From 9db190c7e736ec8d063187d4241b59feaf7dc2d1 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Wed, 22 Jun 2011 11:28:20 +0200 Subject: update to MediaWiki 1.17.0 --- .gitignore | 4 +- COPYING | 188 +- CREDITS | 25 +- HISTORY | 1036 +- INSTALL | 37 +- README | 54 +- RELEASE-NOTES | 1873 ++- UPGRADE | 143 +- api.php | 21 +- config/Installer.php | 2353 ---- config/OBSOLETE | 2 + config/index.php | 44 +- config/index.php5 | 5 +- docs/code-coverage/README | 2 + docs/database.txt | 26 +- docs/databases/ibm_db2.txt | 3 + docs/databases/postgres.txt | 100 + docs/databases/sqlite.txt | 12 + docs/distributors.txt | 43 +- docs/export-0.5.xsd | 213 + docs/hooks.txt | 192 +- docs/maintenance.txt | 2 +- docs/memcached.txt | 16 +- docs/scripts.txt | 5 +- docs/skin.txt | 13 +- extensions/README | 13 + img_auth.php | 28 +- includes/AjaxDispatcher.php | 60 +- includes/AjaxFunctions.php | 85 +- includes/AjaxResponse.php | 19 +- includes/Article.php | 1138 +- includes/AuthPlugin.php | 60 +- includes/AutoLoader.php | 283 +- includes/Autopromote.php | 69 +- includes/BacklinkCache.php | 24 + includes/BagOStuff.php | 239 +- includes/Block.php | 66 +- includes/CacheDependency.php | 17 +- includes/Category.php | 38 +- includes/CategoryPage.php | 358 +- includes/Categoryfinder.php | 50 +- includes/Cdb.php | 9 +- includes/Cdb_PHP.php | 9 +- includes/ChangeTags.php | 14 +- includes/ChangesFeed.php | 19 +- includes/ChangesList.php | 114 +- includes/Collation.php | 307 + includes/ConfEditor.php | 26 +- includes/Credits.php | 134 +- includes/DatabaseFunctions.php | 412 - includes/DefaultSettings.php | 6704 +++++----- includes/Defines.php | 135 +- includes/DjVuImage.php | 37 +- includes/DoubleRedirectJob.php | 172 - includes/EditPage.php | 468 +- includes/EmaillingJob.php | 26 - includes/EnotifNotifyJob.php | 35 - includes/Exception.php | 109 +- includes/Exif.php | 16 +- includes/Export.php | 108 +- includes/ExternalEdit.php | 9 +- includes/ExternalStore.php | 13 +- includes/ExternalStoreDB.php | 35 +- includes/ExternalUser.php | 37 +- includes/Feed.php | 52 +- includes/FeedUtils.php | 16 +- includes/FileDeleteForm.php | 38 +- includes/FileRevertForm.php | 4 +- includes/ForkController.php | 2 - includes/FormOptions.php | 40 +- includes/GlobalFunctions.php | 1271 +- includes/HTMLCacheUpdate.php | 1 - includes/HTMLFileCache.php | 41 +- includes/HTMLForm.php | 745 +- includes/HistoryBlob.php | 41 +- includes/HistoryPage.php | 238 +- includes/Hooks.php | 60 +- includes/Html.php | 188 +- includes/HttpFunctions.old.php | 12 + includes/HttpFunctions.php | 519 +- includes/IEContentAnalyzer.php | 824 -- includes/IP.php | 676 +- includes/ImageFunctions.php | 105 +- includes/ImageGallery.php | 115 +- includes/ImagePage.php | 435 +- includes/Import.php | 1749 +-- includes/Interwiki.php | 48 +- includes/JSMin.php | 290 - includes/JobQueue.php | 318 - includes/Licenses.php | 14 +- includes/LinkBatch.php | 87 +- includes/LinkCache.php | 46 +- includes/Linker.php | 797 +- includes/LinksUpdate.php | 164 +- includes/LocalisationCache.php | 33 +- includes/LogEventsList.php | 343 +- includes/LogPage.php | 251 +- includes/MacBinary.php | 25 +- includes/MagicWord.php | 37 +- includes/Math.php | 27 +- includes/MediaTransformOutput.php | 245 - includes/MemcachedSessions.php | 43 +- includes/Message.php | 360 + includes/MessageBlobStore.php | 370 + includes/MessageCache.php | 219 +- includes/Metadata.php | 30 +- includes/MimeMagic.php | 238 +- includes/Namespace.php | 56 +- includes/NamespaceCompat.php | 9 - includes/ObjectCache.php | 4 + includes/OutputHandler.php | 5 + includes/OutputPage.php | 883 +- includes/PageQueryPage.php | 7 +- includes/Pager.php | 150 +- includes/PoolCounter.php | 203 +- includes/Preferences.php | 1430 +-- includes/PrefixSearch.php | 27 +- includes/Profiler.php | 43 +- includes/ProfilerSimple.php | 6 +- includes/ProfilerSimpleText.php | 24 +- includes/ProfilerSimpleTrace.php | 30 +- includes/ProfilerStub.php | 10 +- includes/ProtectionForm.php | 65 +- includes/ProxyTools.php | 16 +- includes/QueryPage.php | 43 +- includes/RawPage.php | 96 +- includes/RecentChange.php | 25 +- includes/RefreshLinksJob.php | 120 - includes/Revision.php | 12 +- includes/Sanitizer.php | 96 +- includes/SeleniumWebSettings.php | 72 + includes/Setup.php | 83 +- includes/SiteConfiguration.php | 10 +- includes/SiteStats.php | 116 +- includes/Skin.php | 878 +- includes/SkinTemplate.php | 223 +- includes/SpecialPage.php | 237 +- includes/SquidPurgeClient.php | 6 +- includes/SquidUpdate.php | 7 +- includes/Status.php | 154 +- includes/StreamFile.php | 14 +- includes/StringUtils.php | 29 +- includes/StubObject.php | 65 +- includes/Title.php | 1924 +-- includes/User.php | 532 +- includes/UserMailer.php | 249 +- includes/UserRightsProxy.php | 56 +- includes/WatchedItem.php | 7 +- includes/WatchlistEditor.php | 63 +- includes/WebRequest.php | 525 +- includes/WebResponse.php | 6 + includes/WebStart.php | 64 +- includes/Wiki.php | 157 +- includes/WikiError.php | 16 +- includes/WikiMap.php | 11 +- includes/Xml.php | 181 +- includes/XmlFunctions.php | 86 - includes/ZhClient.php | 20 +- includes/ZhConversion.php | 1311 +- includes/api/ApiBase.php | 275 +- includes/api/ApiBlock.php | 38 +- includes/api/ApiDelete.php | 81 +- includes/api/ApiDisabled.php | 14 +- includes/api/ApiEditPage.php | 293 +- includes/api/ApiEmailUser.php | 111 +- includes/api/ApiExpandTemplates.php | 39 +- includes/api/ApiFeedWatchlist.php | 104 +- includes/api/ApiFormatBase.php | 85 +- includes/api/ApiFormatDbg.php | 22 +- includes/api/ApiFormatDump.php | 64 + includes/api/ApiFormatJson.php | 44 +- includes/api/ApiFormatPhp.php | 22 +- includes/api/ApiFormatRaw.php | 39 +- includes/api/ApiFormatTxt.php | 22 +- includes/api/ApiFormatWddx.php | 47 +- includes/api/ApiFormatXml.php | 115 +- includes/api/ApiFormatYaml.php | 24 +- includes/api/ApiFormatYaml_spyc.php | 236 - includes/api/ApiHelp.php | 115 +- includes/api/ApiImport.php | 115 +- includes/api/ApiLogin.php | 24 +- includes/api/ApiLogout.php | 29 +- includes/api/ApiMain.php | 422 +- includes/api/ApiMove.php | 158 +- includes/api/ApiOpenSearch.php | 74 +- includes/api/ApiPageSet.php | 239 +- includes/api/ApiParamInfo.php | 148 +- includes/api/ApiParse.php | 445 +- includes/api/ApiPatrol.php | 58 +- includes/api/ApiProtect.php | 141 +- includes/api/ApiPurge.php | 57 +- includes/api/ApiQuery.php | 329 +- includes/api/ApiQueryAllCategories.php | 91 +- includes/api/ApiQueryAllLinks.php | 148 +- includes/api/ApiQueryAllUsers.php | 141 +- includes/api/ApiQueryAllimages.php | 107 +- includes/api/ApiQueryAllmessages.php | 81 +- includes/api/ApiQueryAllpages.php | 158 +- includes/api/ApiQueryBacklinks.php | 268 +- includes/api/ApiQueryBase.php | 185 +- includes/api/ApiQueryBlocks.php | 221 +- includes/api/ApiQueryCategories.php | 139 +- includes/api/ApiQueryCategoryInfo.php | 42 +- includes/api/ApiQueryCategoryMembers.php | 312 +- includes/api/ApiQueryDeletedrevs.php | 210 +- includes/api/ApiQueryDisabled.php | 27 +- includes/api/ApiQueryDuplicateFiles.php | 83 +- includes/api/ApiQueryExtLinksUsage.php | 117 +- includes/api/ApiQueryExternalLinks.php | 65 +- includes/api/ApiQueryFilearchive.php | 264 + includes/api/ApiQueryIWBacklinks.php | 217 + includes/api/ApiQueryIWLinks.php | 158 + includes/api/ApiQueryImageInfo.php | 379 +- includes/api/ApiQueryImages.php | 92 +- includes/api/ApiQueryInfo.php | 355 +- includes/api/ApiQueryLangLinks.php | 89 +- includes/api/ApiQueryLinks.php | 159 +- includes/api/ApiQueryLogEvents.php | 221 +- includes/api/ApiQueryPageProps.php | 150 + includes/api/ApiQueryProtectedTitles.php | 123 +- includes/api/ApiQueryRandom.php | 77 +- includes/api/ApiQueryRecentChanges.php | 382 +- includes/api/ApiQueryRevisions.php | 376 +- includes/api/ApiQuerySearch.php | 166 +- includes/api/ApiQuerySiteinfo.php | 191 +- includes/api/ApiQueryStashImageInfo.php | 152 + includes/api/ApiQueryTags.php | 141 +- includes/api/ApiQueryUserContributions.php | 260 +- includes/api/ApiQueryUserInfo.php | 113 +- includes/api/ApiQueryUsers.php | 190 +- includes/api/ApiQueryWatchlist.php | 269 +- includes/api/ApiQueryWatchlistRaw.php | 135 +- includes/api/ApiResult.php | 171 +- includes/api/ApiRollback.php | 146 +- includes/api/ApiRsd.php | 180 + includes/api/ApiUnblock.php | 67 +- includes/api/ApiUndelete.php | 86 +- includes/api/ApiUpload.php | 455 +- includes/api/ApiUserrights.php | 92 +- includes/api/ApiWatch.php | 55 +- includes/db/Database.php | 1654 ++- includes/db/DatabaseIbm_db2.php | 1341 +- includes/db/DatabaseMssql.php | 1684 +-- includes/db/DatabaseMysql.php | 240 +- includes/db/DatabaseOracle.php | 664 +- includes/db/DatabasePostgres.php | 922 +- includes/db/DatabaseSqlite.php | 247 +- includes/db/LBFactory.php | 76 +- includes/db/LBFactory_Multi.php | 6 +- includes/db/LBFactory_Single.php | 57 + includes/db/LoadBalancer.php | 123 +- includes/db/LoadMonitor.php | 22 +- includes/diff/Diff.php | 580 - includes/diff/DifferenceEngine.php | 2002 ++- includes/diff/DifferenceInterface.php | 1024 -- includes/diff/WikiDiff.php | 1241 ++ includes/diff/WikiDiff3.php | 586 + includes/extauth/Hardcoded.php | 39 +- includes/extauth/MediaWiki.php | 56 +- includes/extauth/vB.php | 47 +- includes/filerepo/ArchivedFile.php | 18 +- includes/filerepo/FSRepo.php | 30 +- includes/filerepo/File.php | 128 +- includes/filerepo/FileRepo.php | 173 +- includes/filerepo/FileRepoStatus.php | 6 + includes/filerepo/ForeignAPIFile.php | 83 +- includes/filerepo/ForeignAPIRepo.php | 258 +- includes/filerepo/ForeignDBFile.php | 8 + includes/filerepo/ForeignDBRepo.php | 23 +- includes/filerepo/ForeignDBViaLBRepo.php | 7 + includes/filerepo/Image.php | 16 +- includes/filerepo/LocalFile.php | 409 +- includes/filerepo/LocalRepo.php | 20 +- includes/filerepo/NullRepo.php | 6 + includes/filerepo/OldLocalFile.php | 29 +- includes/filerepo/RepoGroup.php | 31 +- includes/filerepo/UnregisteredLocalFile.php | 8 +- includes/installer/CliInstaller.php | 171 + includes/installer/DatabaseInstaller.php | 580 + includes/installer/DatabaseUpdater.php | 574 + includes/installer/Installer.i18n.php | 12267 +++++++++++++++++++ includes/installer/Installer.php | 1511 +++ includes/installer/LocalSettingsGenerator.php | 349 + includes/installer/MysqlInstaller.php | 589 + includes/installer/MysqlUpdater.php | 832 ++ includes/installer/OracleInstaller.php | 279 + includes/installer/OracleUpdater.php | 114 + includes/installer/PhpBugTests.php | 72 + includes/installer/PostgresInstaller.php | 601 + includes/installer/PostgresUpdater.php | 628 + includes/installer/SqliteInstaller.php | 190 + includes/installer/SqliteUpdater.php | 84 + includes/installer/WebInstaller.php | 1034 ++ includes/installer/WebInstallerOutput.php | 269 + includes/installer/WebInstallerPage.php | 1238 ++ includes/job/DoubleRedirectJob.php | 178 + includes/job/EmaillingJob.php | 31 + includes/job/EnotifNotifyJob.php | 41 + includes/job/JobQueue.php | 344 + includes/job/RefreshLinksJob.php | 128 + includes/job/UploadFromUrlJob.php | 153 + includes/json/FormatJson.php | 54 +- includes/json/Services_JSON.php | 48 +- includes/libs/CSSJanus.php | 323 + includes/libs/CSSMin.php | 214 + includes/libs/IEContentAnalyzer.php | 824 ++ includes/libs/IEUrlExtension.php | 247 + includes/libs/JavaScriptMinifier.php | 579 + includes/libs/README | 4 + includes/libs/spyc.php | 248 + includes/media/BMP.php | 4 +- includes/media/Bitmap.php | 533 +- includes/media/Bitmap_ClientOnly.php | 14 + includes/media/DjVu.php | 7 +- includes/media/GIF.php | 43 +- includes/media/GIFMetadataExtractor.php | 21 +- includes/media/Generic.php | 51 +- includes/media/MediaTransformOutput.php | 255 + includes/media/PNG.php | 82 + includes/media/PNGMetadataExtractor.php | 104 + includes/media/SVG.php | 121 +- includes/media/SVGMetadataExtractor.php | 313 + includes/media/Tiff.php | 6 +- includes/memcached-client.php | 277 +- includes/mime.info | 30 +- includes/mime.types | 46 +- includes/normal/CleanUpTest.php | 53 +- includes/normal/RandomTest.php | 38 +- includes/normal/Utf8Case.php | 11 +- includes/normal/Utf8CaseGenerate.php | 53 +- includes/normal/Utf8Test.php | 53 +- includes/normal/UtfNormal.php | 162 +- includes/normal/UtfNormalBench.php | 42 +- includes/normal/UtfNormalData.inc | 13 +- includes/normal/UtfNormalDataK.inc | 7 +- includes/normal/UtfNormalDefines.php | 6 + includes/normal/UtfNormalGenerate.php | 60 +- includes/normal/UtfNormalTest.php | 54 +- includes/normal/UtfNormalTest2.php | 239 + includes/normal/UtfNormalUtil.php | 39 +- includes/parser/CoreLinkFunctions.php | 5 + includes/parser/CoreParserFunctions.php | 64 +- includes/parser/CoreTagHooks.php | 11 +- includes/parser/DateFormatter.php | 10 +- includes/parser/LinkHolderArray.php | 108 +- includes/parser/Parser.php | 2105 ++-- includes/parser/ParserCache.php | 172 +- includes/parser/ParserOptions.php | 185 +- includes/parser/ParserOutput.php | 178 +- includes/parser/Parser_DiffTest.php | 16 +- includes/parser/Parser_LinkHooks.php | 26 +- includes/parser/Preprocessor.php | 8 + includes/parser/Preprocessor_DOM.php | 90 +- includes/parser/Preprocessor_Hash.php | 72 +- includes/parser/Tidy.php | 28 +- includes/proxy_check.php | 2 + includes/resourceloader/ResourceLoader.php | 740 ++ includes/resourceloader/ResourceLoaderContext.php | 176 + .../resourceloader/ResourceLoaderFileModule.php | 509 + includes/resourceloader/ResourceLoaderModule.php | 239 + .../resourceloader/ResourceLoaderSiteModule.php | 63 + .../resourceloader/ResourceLoaderStartUpModule.php | 225 + .../resourceloader/ResourceLoaderUserModule.php | 50 + .../ResourceLoaderUserOptionsModule.php | 121 + .../resourceloader/ResourceLoaderWikiModule.php | 171 + includes/revisiondelete/RevisionDelete.php | 690 ++ .../revisiondelete/RevisionDeleteAbstracts.php | 454 + includes/revisiondelete/RevisionDeleter.php | 270 + includes/search/SearchEngine.php | 761 +- includes/search/SearchIBM_DB2.php | 53 +- includes/search/SearchMssql.php | 254 + includes/search/SearchMySQL.php | 52 +- includes/search/SearchMySQL4.php | 34 - includes/search/SearchOracle.php | 62 +- includes/search/SearchPostgres.php | 64 +- includes/search/SearchSqlite.php | 82 +- includes/search/SearchUpdate.php | 31 +- includes/specials/SpecialActiveusers.php | 90 +- includes/specials/SpecialAllmessages.php | 84 +- includes/specials/SpecialAllpages.php | 66 +- includes/specials/SpecialAncientpages.php | 38 +- includes/specials/SpecialBlankpage.php | 22 + includes/specials/SpecialBlockip.php | 195 +- includes/specials/SpecialBlockme.php | 66 +- includes/specials/SpecialBooksources.php | 31 +- includes/specials/SpecialBrokenRedirects.php | 22 +- includes/specials/SpecialCategories.php | 68 +- includes/specials/SpecialComparePages.php | 170 + includes/specials/SpecialConfirmemail.php | 46 +- includes/specials/SpecialContributions.php | 231 +- includes/specials/SpecialDeadendpages.php | 19 + includes/specials/SpecialDeletedContributions.php | 32 +- includes/specials/SpecialDisambiguations.php | 33 +- includes/specials/SpecialDoubleRedirects.php | 21 +- includes/specials/SpecialEmailuser.php | 514 +- includes/specials/SpecialExport.php | 267 +- includes/specials/SpecialFewestrevisions.php | 17 + includes/specials/SpecialFileDuplicateSearch.php | 28 +- includes/specials/SpecialFilepath.php | 94 +- includes/specials/SpecialImport.php | 89 +- includes/specials/SpecialIpblocklist.php | 275 +- includes/specials/SpecialLinkSearch.php | 41 +- includes/specials/SpecialListfiles.php | 123 +- includes/specials/SpecialListgrouprights.php | 62 +- includes/specials/SpecialListredirects.php | 26 +- includes/specials/SpecialListusers.php | 69 +- includes/specials/SpecialLockdb.php | 140 +- includes/specials/SpecialLog.php | 185 +- includes/specials/SpecialLonelypages.php | 18 + includes/specials/SpecialLongpages.php | 17 + includes/specials/SpecialMIMEsearch.php | 24 +- includes/specials/SpecialMergeHistory.php | 90 +- includes/specials/SpecialMostcategories.php | 25 +- includes/specials/SpecialMostimages.php | 27 +- includes/specials/SpecialMostlinked.php | 31 +- includes/specials/SpecialMostlinkedcategories.php | 27 +- includes/specials/SpecialMostlinkedtemplates.php | 25 +- includes/specials/SpecialMostrevisions.php | 25 +- includes/specials/SpecialMovepage.php | 181 +- includes/specials/SpecialNewimages.php | 42 +- includes/specials/SpecialNewpages.php | 100 +- includes/specials/SpecialPopularpages.php | 20 +- includes/specials/SpecialPreferences.php | 37 +- includes/specials/SpecialPrefixindex.php | 54 +- includes/specials/SpecialProtectedpages.php | 94 +- includes/specials/SpecialProtectedtitles.php | 71 +- includes/specials/SpecialRandompage.php | 30 +- includes/specials/SpecialRandomredirect.php | 24 +- includes/specials/SpecialRecentchanges.php | 113 +- includes/specials/SpecialRecentchangeslinked.php | 43 +- includes/specials/SpecialRemoveRestrictions.php | 60 - includes/specials/SpecialResetpass.php | 39 +- includes/specials/SpecialRevisiondelete.php | 1283 +- includes/specials/SpecialSearch.php | 185 +- includes/specials/SpecialShortpages.php | 28 +- includes/specials/SpecialSpecialpages.php | 166 +- includes/specials/SpecialStatistics.php | 92 +- includes/specials/SpecialTags.php | 38 +- .../specials/SpecialUncategorizedcategories.php | 22 +- includes/specials/SpecialUncategorizedimages.php | 19 +- includes/specials/SpecialUncategorizedpages.php | 18 + .../specials/SpecialUncategorizedtemplates.php | 19 +- includes/specials/SpecialUndelete.php | 253 +- includes/specials/SpecialUnlockdb.php | 127 +- includes/specials/SpecialUnusedcategories.php | 17 + includes/specials/SpecialUnusedimages.php | 37 +- includes/specials/SpecialUnusedtemplates.php | 26 +- includes/specials/SpecialUnwatchedpages.php | 24 +- includes/specials/SpecialUpload.php | 422 +- includes/specials/SpecialUploadStash.php | 394 + includes/specials/SpecialUserlogin.php | 256 +- includes/specials/SpecialUserlogout.php | 72 +- includes/specials/SpecialUserrights.php | 107 +- includes/specials/SpecialVersion.php | 353 +- includes/specials/SpecialWantedcategories.php | 23 +- includes/specials/SpecialWantedfiles.php | 44 +- includes/specials/SpecialWantedpages.php | 22 +- includes/specials/SpecialWantedtemplates.php | 30 +- includes/specials/SpecialWatchlist.php | 108 +- includes/specials/SpecialWhatlinkshere.php | 48 +- includes/specials/SpecialWithoutinterwiki.php | 23 +- includes/templates/NoLocalSettings.php | 48 +- includes/templates/PHP4.php | 6 +- includes/templates/Userlogin.php | 81 +- includes/upload/UploadBase.php | 372 +- includes/upload/UploadFromFile.php | 61 +- includes/upload/UploadFromStash.php | 17 +- includes/upload/UploadFromUrl.php | 221 +- includes/upload/UploadStash.php | 397 + includes/zhtable/Makefile.py | 596 +- includes/zhtable/simp2trad.manual | 7 +- includes/zhtable/simpphrases.manual | 11 + includes/zhtable/simpphrases_exclude.manual | 3 +- includes/zhtable/toCN.manual | 3 +- includes/zhtable/toHK.manual | 1 + includes/zhtable/toSimp.manual | 20 + includes/zhtable/toTW.manual | 4 +- includes/zhtable/toTrad.manual | 42 +- includes/zhtable/trad2simp.manual | 3 + includes/zhtable/tradphrases.manual | 376 +- includes/zhtable/tradphrases_exclude.manual | 9 + index.php | 12 +- languages/Language.php | 1031 +- languages/LanguageConverter.php | 540 +- languages/Names.php | 83 +- languages/classes/LanguageAm.php | 5 +- languages/classes/LanguageAr.php | 14 +- languages/classes/LanguageBat_smg.php | 8 +- languages/classes/LanguageBe.php | 6 +- languages/classes/LanguageBe_tarask.php | 45 +- languages/classes/LanguageBg.php | 6 +- languages/classes/LanguageBh.php | 5 +- languages/classes/LanguageBs.php | 8 +- languages/classes/LanguageCs.php | 2 +- languages/classes/LanguageCu.php | 24 +- languages/classes/LanguageCy.php | 2 +- languages/classes/LanguageDsb.php | 2 +- languages/classes/LanguageEo.php | 114 +- languages/classes/LanguageEt.php | 6 +- languages/classes/LanguageFi.php | 22 +- languages/classes/LanguageFr.php | 4 +- languages/classes/LanguageGa.php | 8 +- languages/classes/LanguageGan.php | 38 +- languages/classes/LanguageGd.php | 2 +- languages/classes/LanguageGv.php | 6 +- languages/classes/LanguageHe.php | 36 +- languages/classes/LanguageHi.php | 5 +- languages/classes/LanguageHr.php | 6 +- languages/classes/LanguageHsb.php | 2 +- languages/classes/LanguageHu.php | 2 +- languages/classes/LanguageHy.php | 44 +- languages/classes/LanguageJa.php | 10 +- languages/classes/LanguageKaa.php | 2 +- languages/classes/LanguageKk.deps.php | 4 +- languages/classes/LanguageKk.php | 153 +- languages/classes/LanguageKk_cyrl.php | 153 +- languages/classes/LanguageKm.php | 2 +- languages/classes/LanguageKsh.php | 162 +- languages/classes/LanguageKu.deps.php | 4 +- languages/classes/LanguageKu.php | 48 +- languages/classes/LanguageKu_ku.php | 2 +- languages/classes/LanguageLa.php | 2 +- languages/classes/LanguageLn.php | 5 +- languages/classes/LanguageLt.php | 10 +- languages/classes/LanguageLv.php | 10 +- languages/classes/LanguageMg.php | 5 +- languages/classes/LanguageMk.php | 3 +- languages/classes/LanguageMl.php | 15 +- languages/classes/LanguageMo.php | 3 +- languages/classes/LanguageMt.php | 6 +- languages/classes/LanguageMy.php | 5 +- languages/classes/LanguageNso.php | 5 +- languages/classes/LanguagePl.php | 8 +- languages/classes/LanguagePt_br.php | 17 - languages/classes/LanguageRo.php | 3 +- languages/classes/LanguageRu.php | 68 +- languages/classes/LanguageSe.php | 5 +- languages/classes/LanguageSh.php | 11 +- languages/classes/LanguageSk.php | 2 +- languages/classes/LanguageSl.php | 4 +- languages/classes/LanguageSma.php | 5 +- languages/classes/LanguageSr.deps.php | 4 +- languages/classes/LanguageSr.php | 82 +- languages/classes/LanguageSr_ec.php | 8 +- languages/classes/LanguageSr_el.deps.php | 2 +- languages/classes/LanguageSr_el.php | 8 +- languages/classes/LanguageTg.php | 4 +- languages/classes/LanguageTi.php | 5 +- languages/classes/LanguageTl.php | 5 +- languages/classes/LanguageTr.php | 2 +- languages/classes/LanguageTyv.php | 244 +- languages/classes/LanguageUk.php | 75 +- languages/classes/LanguageWa.php | 31 +- languages/classes/LanguageYue.php | 6 +- languages/classes/LanguageZh.deps.php | 4 +- languages/classes/LanguageZh.php | 64 +- languages/classes/LanguageZh_hans.php | 12 +- languages/messages/MessagesAb.php | 87 +- languages/messages/MessagesAce.php | 183 +- languages/messages/MessagesAf.php | 383 +- languages/messages/MessagesAln.php | 69 +- languages/messages/MessagesAm.php | 56 +- languages/messages/MessagesAn.php | 407 +- languages/messages/MessagesAng.php | 58 +- languages/messages/MessagesAr.php | 394 +- languages/messages/MessagesArc.php | 199 +- languages/messages/MessagesArn.php | 17 +- languages/messages/MessagesAry.php | 2099 ++++ languages/messages/MessagesArz.php | 238 +- languages/messages/MessagesAs.php | 221 +- languages/messages/MessagesAst.php | 433 +- languages/messages/MessagesAvk.php | 16 +- languages/messages/MessagesAy.php | 3 +- languages/messages/MessagesAz.php | 1373 ++- languages/messages/MessagesBa.php | 400 +- languages/messages/MessagesBar.php | 90 +- languages/messages/MessagesBat_smg.php | 1943 +-- languages/messages/MessagesBcc.php | 72 +- languages/messages/MessagesBcl.php | 34 +- languages/messages/MessagesBe.php | 237 +- languages/messages/MessagesBe_tarask.php | 348 +- languages/messages/MessagesBg.php | 323 +- languages/messages/MessagesBh.php | 29 +- languages/messages/MessagesBjn.php | 2432 ++++ languages/messages/MessagesBn.php | 415 +- languages/messages/MessagesBo.php | 50 +- languages/messages/MessagesBpy.php | 60 +- languages/messages/MessagesBqi.php | 13 +- languages/messages/MessagesBr.php | 422 +- languages/messages/MessagesBs.php | 356 +- languages/messages/MessagesCa.php | 321 +- languages/messages/MessagesCdo.php | 57 +- languages/messages/MessagesCe.php | 254 +- languages/messages/MessagesCeb.php | 49 +- languages/messages/MessagesCh.php | 12 +- languages/messages/MessagesCkb.php | 310 +- languages/messages/MessagesCkb_arab.php | 2997 ----- languages/messages/MessagesCkb_latn.php | 12 - languages/messages/MessagesCo.php | 11 +- languages/messages/MessagesCps.php | 49 +- languages/messages/MessagesCrh_cyrl.php | 81 +- languages/messages/MessagesCrh_latn.php | 81 +- languages/messages/MessagesCs.php | 513 +- languages/messages/MessagesCsb.php | 153 +- languages/messages/MessagesCu.php | 891 +- languages/messages/MessagesCv.php | 137 +- languages/messages/MessagesCy.php | 347 +- languages/messages/MessagesDa.php | 449 +- languages/messages/MessagesDe.php | 464 +- languages/messages/MessagesDe_at.php | 3 +- languages/messages/MessagesDe_ch.php | 30 +- languages/messages/MessagesDe_formal.php | 72 +- languages/messages/MessagesDiq.php | 259 +- languages/messages/MessagesDk.php | 12 - languages/messages/MessagesDsb.php | 449 +- languages/messages/MessagesDz.php | 9 +- languages/messages/MessagesEe.php | 3 +- languages/messages/MessagesEl.php | 355 +- languages/messages/MessagesEn.php | 444 +- languages/messages/MessagesEn_gb.php | 7 +- languages/messages/MessagesEo.php | 615 +- languages/messages/MessagesEs.php | 572 +- languages/messages/MessagesEt.php | 341 +- languages/messages/MessagesEu.php | 218 +- languages/messages/MessagesExt.php | 65 +- languages/messages/MessagesFa.php | 1226 +- languages/messages/MessagesFf.php | 2 +- languages/messages/MessagesFi.php | 314 +- languages/messages/MessagesFj.php | 2 +- languages/messages/MessagesFo.php | 53 +- languages/messages/MessagesFr.php | 479 +- languages/messages/MessagesFrc.php | 8 +- languages/messages/MessagesFrp.php | 523 +- languages/messages/MessagesFrr.php | 122 +- languages/messages/MessagesFur.php | 206 +- languages/messages/MessagesFy.php | 63 +- languages/messages/MessagesGa.php | 64 +- languages/messages/MessagesGag.php | 39 +- languages/messages/MessagesGan_hans.php | 63 +- languages/messages/MessagesGan_hant.php | 64 +- languages/messages/MessagesGd.php | 51 +- languages/messages/MessagesGl.php | 493 +- languages/messages/MessagesGlk.php | 5 +- languages/messages/MessagesGn.php | 8 +- languages/messages/MessagesGot.php | 1 - languages/messages/MessagesGrc.php | 80 +- languages/messages/MessagesGsw.php | 322 +- languages/messages/MessagesGu.php | 415 +- languages/messages/MessagesGv.php | 47 +- languages/messages/MessagesHa.php | 21 +- languages/messages/MessagesHak.php | 46 +- languages/messages/MessagesHaw.php | 8 +- languages/messages/MessagesHe.php | 343 +- languages/messages/MessagesHi.php | 301 +- languages/messages/MessagesHif_deva.php | 20 - languages/messages/MessagesHif_latn.php | 274 +- languages/messages/MessagesHil.php | 308 +- languages/messages/MessagesHr.php | 326 +- languages/messages/MessagesHsb.php | 435 +- languages/messages/MessagesHt.php | 191 +- languages/messages/MessagesHu.php | 462 +- languages/messages/MessagesHy.php | 106 +- languages/messages/MessagesIa.php | 485 +- languages/messages/MessagesId.php | 510 +- languages/messages/MessagesIe.php | 48 +- languages/messages/MessagesIg.php | 116 +- languages/messages/MessagesIke_cans.php | 4 +- languages/messages/MessagesIke_latn.php | 4 +- languages/messages/MessagesIlo.php | 17 +- languages/messages/MessagesInh.php | 620 +- languages/messages/MessagesIo.php | 244 +- languages/messages/MessagesIs.php | 66 +- languages/messages/MessagesIt.php | 372 +- languages/messages/MessagesJa.php | 517 +- languages/messages/MessagesJut.php | 12 +- languages/messages/MessagesJv.php | 98 +- languages/messages/MessagesKa.php | 341 +- languages/messages/MessagesKaa.php | 133 +- languages/messages/MessagesKab.php | 24 +- languages/messages/MessagesKbd.php | 12 + languages/messages/MessagesKbd_cyrl.php | 1332 ++ languages/messages/MessagesKiu.php | 162 +- languages/messages/MessagesKk_arab.php | 32 +- languages/messages/MessagesKk_cyrl.php | 69 +- languages/messages/MessagesKk_latn.php | 28 +- languages/messages/MessagesKl.php | 64 +- languages/messages/MessagesKm.php | 234 +- languages/messages/MessagesKn.php | 66 +- languages/messages/MessagesKo.php | 378 +- languages/messages/MessagesKoi.php | 19 +- languages/messages/MessagesKrc.php | 312 +- languages/messages/MessagesKri.php | 1 - languages/messages/MessagesKrj.php | 4 +- languages/messages/MessagesKs.php | 2 +- languages/messages/MessagesKsh.php | 478 +- languages/messages/MessagesKu_arab.php | 2 +- languages/messages/MessagesKu_latn.php | 171 +- languages/messages/MessagesKw.php | 109 +- languages/messages/MessagesKy.php | 1 - languages/messages/MessagesLa.php | 71 +- languages/messages/MessagesLad.php | 592 +- languages/messages/MessagesLb.php | 503 +- languages/messages/MessagesLbe.php | 35 +- languages/messages/MessagesLez.php | 717 +- languages/messages/MessagesLfn.php | 12 +- languages/messages/MessagesLg.php | 57 +- languages/messages/MessagesLi.php | 416 +- languages/messages/MessagesLij.php | 12 +- languages/messages/MessagesLmo.php | 115 +- languages/messages/MessagesLn.php | 72 +- languages/messages/MessagesLo.php | 8 +- languages/messages/MessagesLoz.php | 12 +- languages/messages/MessagesLt.php | 478 +- languages/messages/MessagesLtg.php | 55 +- languages/messages/MessagesLv.php | 225 +- languages/messages/MessagesLzh.php | 282 +- languages/messages/MessagesLzz.php | 19 +- languages/messages/MessagesMai.php | 2661 +++- languages/messages/MessagesMdf.php | 64 +- languages/messages/MessagesMg.php | 313 +- languages/messages/MessagesMhr.php | 139 +- languages/messages/MessagesMin.php | 700 ++ languages/messages/MessagesMk.php | 483 +- languages/messages/MessagesMl.php | 518 +- languages/messages/MessagesMn.php | 275 +- languages/messages/MessagesMo.php | 2 + languages/messages/MessagesMr.php | 1197 +- languages/messages/MessagesMrj.php | 34 +- languages/messages/MessagesMs.php | 483 +- languages/messages/MessagesMt.php | 167 +- languages/messages/MessagesMwl.php | 15 +- languages/messages/MessagesMy.php | 286 +- languages/messages/MessagesMyv.php | 165 +- languages/messages/MessagesMzn.php | 72 +- languages/messages/MessagesNah.php | 37 +- languages/messages/MessagesNan.php | 73 +- languages/messages/MessagesNap.php | 5 +- languages/messages/MessagesNds.php | 161 +- languages/messages/MessagesNds_nl.php | 320 +- languages/messages/MessagesNe.php | 319 +- languages/messages/MessagesNew.php | 3 +- languages/messages/MessagesNiu.php | 2 +- languages/messages/MessagesNl.php | 344 +- languages/messages/MessagesNl_informal.php | 658 + languages/messages/MessagesNn.php | 367 +- languages/messages/MessagesNo.php | 457 +- languages/messages/MessagesNov.php | 2 +- languages/messages/MessagesNso.php | 18 +- languages/messages/MessagesNv.php | 3 +- languages/messages/MessagesOc.php | 386 +- languages/messages/MessagesOr.php | 534 +- languages/messages/MessagesOs.php | 502 +- languages/messages/MessagesPa.php | 85 +- languages/messages/MessagesPam.php | 38 +- languages/messages/MessagesPap.php | 2 +- languages/messages/MessagesPcd.php | 56 +- languages/messages/MessagesPdc.php | 73 +- languages/messages/MessagesPdt.php | 1 - languages/messages/MessagesPfl.php | 12 +- languages/messages/MessagesPl.php | 459 +- languages/messages/MessagesPms.php | 337 +- languages/messages/MessagesPnb.php | 78 +- languages/messages/MessagesPnt.php | 46 +- languages/messages/MessagesPrg.php | 64 +- languages/messages/MessagesPs.php | 266 +- languages/messages/MessagesPt.php | 540 +- languages/messages/MessagesPt_br.php | 490 +- languages/messages/MessagesQqq.php | 443 +- languages/messages/MessagesQu.php | 545 +- languages/messages/MessagesRgn.php | 9 +- languages/messages/MessagesRif.php | 14 +- languages/messages/MessagesRm.php | 229 +- languages/messages/MessagesRo.php | 488 +- languages/messages/MessagesRoa_rup.php | 2 +- languages/messages/MessagesRoa_tara.php | 325 +- languages/messages/MessagesRu.php | 343 +- languages/messages/MessagesRue.php | 454 +- languages/messages/MessagesRuq_cyrl.php | 9 +- languages/messages/MessagesRuq_latn.php | 9 +- languages/messages/MessagesSa.php | 351 +- languages/messages/MessagesSah.php | 326 +- languages/messages/MessagesSc.php | 64 +- languages/messages/MessagesScn.php | 80 +- languages/messages/MessagesSco.php | 35 +- languages/messages/MessagesSd.php | 33 +- languages/messages/MessagesSdc.php | 34 +- languages/messages/MessagesSe.php | 71 +- languages/messages/MessagesSei.php | 10 +- languages/messages/MessagesSgs.php | 1935 +++ languages/messages/MessagesSh.php | 330 +- languages/messages/MessagesShi.php | 103 +- languages/messages/MessagesSi.php | 639 +- languages/messages/MessagesSimple.php | 12 +- languages/messages/MessagesSk.php | 334 +- languages/messages/MessagesSl.php | 385 +- languages/messages/MessagesSli.php | 931 +- languages/messages/MessagesSma.php | 12 +- languages/messages/MessagesSn.php | 2 +- languages/messages/MessagesSo.php | 746 +- languages/messages/MessagesSq.php | 334 +- languages/messages/MessagesSr.php | 2 +- languages/messages/MessagesSr_ec.php | 426 +- languages/messages/MessagesSr_el.php | 197 +- languages/messages/MessagesSrn.php | 13 +- languages/messages/MessagesSs.php | 20 +- languages/messages/MessagesSt.php | 2 +- languages/messages/MessagesStq.php | 322 +- languages/messages/MessagesSu.php | 106 +- languages/messages/MessagesSv.php | 450 +- languages/messages/MessagesSw.php | 336 +- languages/messages/MessagesSzl.php | 186 +- languages/messages/MessagesTa.php | 207 +- languages/messages/MessagesTcy.php | 8 +- languages/messages/MessagesTe.php | 392 +- languages/messages/MessagesTet.php | 167 +- languages/messages/MessagesTg_cyrl.php | 64 +- languages/messages/MessagesTg_latn.php | 62 +- languages/messages/MessagesTh.php | 355 +- languages/messages/MessagesTi.php | 3 - languages/messages/MessagesTk.php | 281 +- languages/messages/MessagesTl.php | 337 +- languages/messages/MessagesTn.php | 2 +- languages/messages/MessagesTo.php | 7 +- languages/messages/MessagesTpi.php | 53 +- languages/messages/MessagesTr.php | 679 +- languages/messages/MessagesTs.php | 2 +- languages/messages/MessagesTt_cyrl.php | 230 +- languages/messages/MessagesTt_latn.php | 69 +- languages/messages/MessagesTyv.php | 23 +- languages/messages/MessagesUdm.php | 2 +- languages/messages/MessagesUg.php | 4 +- languages/messages/MessagesUg_arab.php | 267 +- languages/messages/MessagesUk.php | 341 +- languages/messages/MessagesUr.php | 48 +- languages/messages/MessagesUz.php | 11 +- languages/messages/MessagesVec.php | 364 +- languages/messages/MessagesVep.php | 244 +- languages/messages/MessagesVi.php | 571 +- languages/messages/MessagesVls.php | 16 +- languages/messages/MessagesVmf.php | 63 +- languages/messages/MessagesVo.php | 85 +- languages/messages/MessagesVot.php | 7 +- languages/messages/MessagesVro.php | 59 +- languages/messages/MessagesWa.php | 20 +- languages/messages/MessagesWar.php | 46 +- languages/messages/MessagesWo.php | 68 +- languages/messages/MessagesWuu.php | 105 +- languages/messages/MessagesXal.php | 83 +- languages/messages/MessagesXh.php | 2 +- languages/messages/MessagesXmf.php | 267 +- languages/messages/MessagesYi.php | 453 +- languages/messages/MessagesYo.php | 123 +- languages/messages/MessagesYue.php | 321 +- languages/messages/MessagesZa.php | 19 +- languages/messages/MessagesZea.php | 9 +- languages/messages/MessagesZh.php | 13 +- languages/messages/MessagesZh_hans.php | 353 +- languages/messages/MessagesZh_hant.php | 345 +- languages/messages/MessagesZh_hk.php | 29 +- languages/messages/MessagesZh_tw.php | 11 +- languages/messages/MessagesZu.php | 12 +- load.php | 42 + load.php5 | 1 + maintenance/7zip.inc | 41 +- maintenance/Doxyfile | 18 +- maintenance/FiveUpgrade.inc | 1190 -- maintenance/Maintenance.php | 634 +- maintenance/Makefile | 2 +- maintenance/addwiki.php | 46 +- maintenance/archives/patch-archive_ar_revid.sql | 4 + .../archives/patch-archive_kill_ar_page_revid.sql | 4 + .../patch-categorylinks-better-collation.sql | 19 + .../patch-categorylinks-better-collation2.sql | 12 + maintenance/archives/patch-iw_api_and_wikiid.sql | 9 + maintenance/archives/patch-iwlinks.sql | 16 + maintenance/archives/patch-kill-iwl_pft.sql | 7 + maintenance/archives/patch-kill-iwl_prefix.sql | 7 + .../archives/patch-langlinks-ll_lang-20.sql | 3 + maintenance/archives/patch-mime_minor_length.sql | 2 +- maintenance/archives/patch-module_deps.sql | 12 + maintenance/archives/patch-msg_resource.sql | 20 + maintenance/archives/patch-profiling.sql | 7 +- maintenance/archives/patch-rename-iwl_prefix.sql | 4 + maintenance/archives/patch-tc-timestamp.sql | 2 +- maintenance/archives/patch-testrun.sql | 35 + maintenance/archives/patch-ul_value.sql | 4 + maintenance/archives/upgradeLogging.php | 4 +- maintenance/attachLatest.php | 30 +- maintenance/backup.inc | 97 +- maintenance/backupPrefetch.inc | 106 +- maintenance/benchmarkPurge.php | 47 +- maintenance/benchmarks/Benchmarker.php | 72 + maintenance/benchmarks/bench_HTTP_HTTPS.php | 38 + maintenance/benchmarks/bench_wfIsWindows.php | 42 + maintenance/changePassword.php | 21 +- maintenance/checkAutoLoader.php | 11 +- maintenance/checkBadRedirects.php | 19 +- maintenance/checkImages.php | 23 +- maintenance/checkSyntax.php | 53 +- maintenance/checkUsernames.php | 7 +- maintenance/cleanupCaps.php | 25 +- maintenance/cleanupDupes.inc | 128 - maintenance/cleanupImages.php | 61 +- maintenance/cleanupRemovedModules.php | 89 + maintenance/cleanupSpam.php | 27 +- maintenance/cleanupTable.inc | 15 +- maintenance/cleanupTitles.php | 47 +- maintenance/cleanupWatchlist.php | 11 +- maintenance/clear_interwiki_cache.php | 7 +- maintenance/clear_stats.php | 33 +- maintenance/commandLine.inc | 7 +- maintenance/convertLinks.inc | 218 - maintenance/convertLinks.php | 199 +- maintenance/convertUserOptions.php | 25 +- maintenance/createAndPromote.php | 28 +- maintenance/cssjanus/COPYING | 13 + maintenance/cssjanus/LICENSE | 202 + maintenance/cssjanus/README | 91 + maintenance/cssjanus/cssjanus.py | 574 + maintenance/cssjanus/csslex.py | 114 + maintenance/deleteArchivedFiles.inc | 62 + maintenance/deleteArchivedFiles.php | 48 +- maintenance/deleteArchivedRevisions.inc | 57 + maintenance/deleteArchivedRevisions.php | 33 +- maintenance/deleteBatch.php | 31 +- maintenance/deleteDefaultMessages.php | 32 +- maintenance/deleteImageMemcached.php | 14 +- maintenance/deleteOldRevisions.php | 32 +- maintenance/deleteOrphanedRevisions.php | 27 +- maintenance/deleteRevision.php | 14 +- maintenance/deleteSelfExternals.php | 18 +- maintenance/doMaintenance.php | 40 +- maintenance/dumpBackup.php | 31 +- maintenance/dumpInterwiki.inc | 209 - maintenance/dumpInterwiki.php | 238 +- maintenance/dumpLinks.php | 14 +- maintenance/dumpSisterSites.php | 9 +- maintenance/dumpTextPass.php | 448 +- maintenance/dumpUploads.php | 50 +- maintenance/edit.php | 22 +- maintenance/eval.php | 15 +- maintenance/fetchText.php | 39 +- maintenance/findhooks.php | 103 +- maintenance/fixSlaveDesync.php | 52 +- maintenance/fixTimestamps.php | 51 +- maintenance/fixUserRegistration.php | 4 +- maintenance/fuzz-tester.php | 3881 +++--- maintenance/gearman/gearman.inc | 2 +- maintenance/gearman/gearmanRefreshLinks.php | 12 +- maintenance/gearman/gearmanWorker.php | 6 +- maintenance/generateSitemap.php | 116 +- maintenance/getLagTimes.php | 12 +- maintenance/getSlaveServer.php | 12 +- maintenance/getText.php | 6 +- maintenance/httpSessionDownload.php | 12 +- maintenance/ibm_db2/README | 3 - maintenance/ibm_db2/foreignkeys.sql | 107 + maintenance/ibm_db2/tables.sql | 103 +- maintenance/importDump.php | 76 +- maintenance/importImages.inc | 45 +- maintenance/importImages.php | 184 +- maintenance/importTextFile.php | 12 +- maintenance/importUseModWiki.php | 90 +- maintenance/initEditCount.php | 30 +- maintenance/initStats.php | 13 +- maintenance/install-utils.inc | 208 +- maintenance/install.php | 95 + maintenance/installExtension.php | 683 -- maintenance/interwiki.list | 97 + maintenance/interwiki.sql | 2 +- maintenance/lag.php | 12 +- maintenance/language/StatOutputs.php | 23 +- maintenance/language/alltrans.php | 8 +- maintenance/language/checkDupeMessages.php | 82 +- maintenance/language/checkExtensions.php | 6 +- maintenance/language/checkLanguage.inc | 44 +- maintenance/language/checkLanguage.php | 4 +- maintenance/language/countMessages.php | 10 +- maintenance/language/date-formats.php | 6 +- maintenance/language/diffLanguage.php | 159 - maintenance/language/digit2html.php | 20 +- maintenance/language/dumpMessages.php | 6 +- maintenance/language/function-list.php | 6 +- maintenance/language/generateCollationData.php | 381 + maintenance/language/generateNormalizerData.php | 6 +- maintenance/language/lang2po.php | 75 +- maintenance/language/langmemusage.php | 10 +- maintenance/language/languages.inc | 4 +- maintenance/language/messageTypes.inc | 16 +- maintenance/language/messages.inc | 144 +- maintenance/language/rebuildLanguage.php | 37 +- maintenance/language/transstat.php | 8 +- maintenance/language/validate.php | 2 +- maintenance/language/writeMessagesArray.inc | 31 +- maintenance/mcc.php | 35 +- maintenance/mctest.php | 26 +- maintenance/mergeMessageFileList.php | 18 +- maintenance/migrateUserGroup.php | 16 +- maintenance/minify.php | 37 +- maintenance/moveBatch.php | 20 +- maintenance/mssql/README | 78 - maintenance/mssql/tables.sql | 983 +- maintenance/mwdocgen.php | 69 +- maintenance/namespaceDupes.php | 136 +- maintenance/nextJobDB.php | 14 +- maintenance/nukeNS.php | 30 +- maintenance/nukePage.php | 14 +- maintenance/ora/patch_seq_names_pre1.16.sql | 8 - maintenance/ora/tables.sql | 794 -- maintenance/ora/user.sql | 16 - maintenance/oracle/archives/patch-testrun.sql | 37 + .../oracle/archives/patch_16_17_schema_changes.sql | 98 + .../oracle/archives/patch_create_17_functions.sql | 125 + .../oracle/archives/patch_fk_rename_deferred.sql | 41 + .../oracle/archives/patch_namespace_defaults.sql | 17 + maintenance/oracle/patch_seq_names_pre1.16.sql | 8 + maintenance/oracle/tables.sql | 856 ++ maintenance/oracle/user.sql | 16 + maintenance/orphans.php | 83 +- maintenance/ourusers.php | 4 +- maintenance/parserTests.inc | 1719 --- maintenance/parserTests.php | 88 - maintenance/parserTests.txt | 7773 ------------ maintenance/parserTestsParserHook.php | 34 - maintenance/parserTestsParserTime.php | 26 - maintenance/parserTestsStaticParserHook.php | 47 - maintenance/patchSql.php | 14 +- maintenance/populateCategory.inc | 85 - maintenance/populateCategory.php | 58 +- maintenance/populateLogSearch.inc | 80 - maintenance/populateLogSearch.php | 81 +- maintenance/populateLogUsertext.php | 22 +- maintenance/populateParentId.inc | 83 - maintenance/populateParentId.php | 41 +- maintenance/populateRevisionLength.php | 98 + maintenance/populateSha1.php | 22 +- .../patch-categorylinks-better-collation.sql | 8 + maintenance/postgres/archives/patch-change_tag.sql | 27 +- maintenance/postgres/archives/patch-iwlinks.sql | 8 + .../postgres/archives/patch-kill-iwl_pft.sql | 7 + .../postgres/archives/patch-kill-iwl_prefix.sql | 7 + .../postgres/archives/patch-mediawiki_version.sql | 18 - .../postgres/archives/patch-module_deps.sql | 7 + .../postgres/archives/patch-msg_resource.sql | 8 + .../postgres/archives/patch-msg_resource_links.sql | 6 + maintenance/postgres/archives/patch-mwuser.sql | 1 - maintenance/postgres/archives/patch-page.sql | 24 + .../postgres/archives/patch-pagecontent.sql | 1 - .../postgres/archives/patch-rename-iwl_prefix.sql | 2 + .../postgres/archives/patch-tag_summary.sql | 9 + maintenance/postgres/archives/patch-testrun.sql | 30 + .../postgres/archives/patch-update_sequences.sql | 14 +- maintenance/postgres/archives/patch-valid_tag.sql | 3 + maintenance/postgres/compare_schemas.pl | 63 +- maintenance/postgres/mediawiki_mysql2postgres.pl | 11 +- maintenance/postgres/tables.sql | 134 +- maintenance/preprocessorFuzzTest.php | 26 +- maintenance/protect.php | 19 +- maintenance/purgeList.php | 13 +- maintenance/purgeOldText.inc | 26 +- maintenance/purgeOldText.php | 8 +- maintenance/reassignEdits.php | 60 +- maintenance/rebuildFileCache.php | 51 +- maintenance/rebuildImages.php | 106 +- maintenance/rebuildInterwiki.inc | 259 - maintenance/rebuildInterwiki.php | 278 +- maintenance/rebuildLocalisationCache.php | 28 +- maintenance/rebuildall.php | 6 +- maintenance/rebuildmessages.php | 12 +- maintenance/rebuildrecentchanges.php | 139 +- maintenance/rebuildtextindex.php | 40 +- maintenance/refreshImageCount.php | 8 +- maintenance/refreshLinks.php | 88 +- maintenance/removeUnusedAccounts.php | 32 +- maintenance/renameDbPrefix.php | 34 +- maintenance/renamewiki.php | 16 +- maintenance/renderDump.php | 41 +- maintenance/rollbackEdits.php | 20 +- maintenance/runBatchedQuery.php | 8 +- maintenance/runJobs.php | 28 +- maintenance/showJobs.php | 8 +- maintenance/showStats.php | 19 +- maintenance/sql.php | 8 +- maintenance/sqlite.inc | 67 + maintenance/sqlite.php | 30 +- maintenance/sqlite/README | 12 - maintenance/sqlite/archives/initial-indexes.sql | 2 +- .../patch-categorylinks-better-collation.sql | 7 + .../sqlite/archives/patch-iw_api_and_wikiid.sql | 19 + maintenance/sqlite/archives/patch-kill-iwl_pft.sql | 7 + .../sqlite/archives/patch-kill-iwl_prefix.sql | 7 + .../archives/patch-log_search-rename-index.sql | 1 + .../sqlite/archives/patch-rename-iwl_prefix.sql | 5 + maintenance/sqlite/archives/patch-tc-timestamp.sql | 2 +- maintenance/sqlite/archives/searchindex-fts3.sql | 2 +- maintenance/stats.php | 81 +- maintenance/storage/checkStorage.php | 74 +- maintenance/storage/compressOld.inc | 21 +- maintenance/storage/compressOld.php | 20 +- maintenance/storage/dumpRev.php | 16 +- maintenance/storage/fixBug20757.php | 43 +- maintenance/storage/moveToExternal.php | 30 +- maintenance/storage/orphanStats.php | 13 +- maintenance/storage/recompressTracked.php | 70 +- maintenance/storage/resolveStubs.php | 21 +- maintenance/storage/storageTypeStats.php | 7 +- maintenance/storage/testCompression.php | 12 +- maintenance/storage/trackBlobs.php | 56 +- maintenance/tables.sql | 375 +- maintenance/testRunner.ora.sql | 37 - maintenance/testRunner.postgres.sql | 30 - maintenance/testRunner.sql | 35 - maintenance/tests/ApiSetup.php | 39 - maintenance/tests/ApiTest.php | 164 - maintenance/tests/CdbTest.php | 79 - maintenance/tests/DatabaseSqliteTest.php | 57 - maintenance/tests/DatabaseTest.php | 92 - maintenance/tests/GlobalTest.php | 212 - maintenance/tests/HttpTest.php | 567 - maintenance/tests/IPTest.php | 52 - maintenance/tests/ImageFunctionsTest.php | 48 - maintenance/tests/LanguageConverterTest.php | 148 - maintenance/tests/LicensesTest.php | 17 - maintenance/tests/LocalFileTest.php | 97 - maintenance/tests/Makefile | 23 - maintenance/tests/MediaWikiParserTest.php | 283 - maintenance/tests/MediaWiki_Setup.php | 28 - maintenance/tests/README | 24 - maintenance/tests/RevisionTest.php | 114 - maintenance/tests/RunSeleniumTests.php | 220 + maintenance/tests/SanitizerTest.php | 73 - maintenance/tests/SearchEngineTest.php | 138 - maintenance/tests/SearchMySQLTest.php | 26 - maintenance/tests/SearchUpdateTest.php | 103 - maintenance/tests/SiteConfigurationTest.php | 311 - maintenance/tests/TimeAdjustTest.php | 40 - maintenance/tests/TitleTest.php | 17 - maintenance/tests/XmlTest.php | 115 - maintenance/tests/bootstrap.php | 15 - maintenance/tests/parser/ExtraParserTests.txt | Bin 0 -> 1261 bytes maintenance/tests/parser/parserTest.inc | 1305 ++ maintenance/tests/parser/parserTests.txt | 8315 +++++++++++++ maintenance/tests/parser/parserTestsParserHook.php | 46 + .../tests/parser/parserTestsStaticParserHook.php | 58 + maintenance/tests/parserTests.php | 92 + maintenance/tests/phpunit.xml | 17 - maintenance/tests/selenium/Selenium.php | 190 + maintenance/tests/selenium/SeleniumConfig.php | 88 + maintenance/tests/selenium/SeleniumLoader.php | 9 + .../tests/selenium/SeleniumServerManager.php | 239 + maintenance/tests/selenium/SeleniumTestCase.php | 103 + .../tests/selenium/SeleniumTestConsoleLogger.php | 25 + .../tests/selenium/SeleniumTestHTMLLogger.php | 36 + .../tests/selenium/SeleniumTestListener.php | 68 + maintenance/tests/selenium/SeleniumTestSuite.php | 46 + .../tests/selenium/data/Wikipedia-logo-v2-de.png | Bin 0 -> 21479 bytes .../selenium/selenium_settings.ini.php52.sample | 23 + .../tests/selenium/selenium_settings.ini.sample | 32 + .../selenium/selenium_settings_grid.ini.sample | 14 + .../suites/AddContentToNewPageTestCase.php | 182 + .../tests/selenium/suites/AddNewPageTestCase.php | 65 + .../selenium/suites/CreateAccountTestCase.php | 114 + .../selenium/suites/DeletePageAdminTestCase.php | 89 + .../selenium/suites/EmailPasswordTestCase.php | 81 + .../selenium/suites/MediaWikExtraTestSuite.php | 20 + .../selenium/suites/MediaWikiEditorConfig.php | 47 + .../selenium/suites/MediaWikiEditorTestSuite.php | 18 + .../selenium/suites/MediawikiCoreSmokeTestCase.php | 69 + .../suites/MediawikiCoreSmokeTestSuite.php | 19 + .../tests/selenium/suites/MovePageTestCase.php | 117 + .../selenium/suites/MyContributionsTestCase.php | 76 + .../tests/selenium/suites/MyWatchListTestCase.php | 73 + .../tests/selenium/suites/PageDeleteTestSuite.php | 16 + .../tests/selenium/suites/PageSearchTestCase.php | 105 + .../tests/selenium/suites/PreviewPageTestCase.php | 53 + .../tests/selenium/suites/SavePageTestCase.php | 58 + .../tests/selenium/suites/SimpleSeleniumConfig.php | 15 + .../selenium/suites/SimpleSeleniumTestCase.php | 30 + .../selenium/suites/SimpleSeleniumTestSuite.php | 26 + .../selenium/suites/UserPreferencesTestCase.php | 179 + maintenance/tests/test-prefetch-current.xml | 75 - maintenance/tests/test-prefetch-previous.xml | 57 - maintenance/tests/test-prefetch-stub.xml | 75 - maintenance/tests/testHelpers.inc | 652 + maintenance/undelete.php | 4 +- maintenance/update.php | 135 +- maintenance/updateArticleCount.php | 14 +- maintenance/updateCollation.php | 145 + maintenance/updateDoubleWidthSearch.php | 71 + maintenance/updateRestrictions.php | 35 +- maintenance/updateSearchIndex.php | 115 +- maintenance/updateSpecialPages.php | 25 +- maintenance/updaters.inc | 1979 --- maintenance/upgrade1_5.php | 1302 +- maintenance/userDupes.inc | 127 +- maintenance/userOptions.inc | 90 +- maintenance/userOptions.php | 2 +- maintenance/waitForSlave.php | 5 +- math/Makefile | 47 +- math/README | 2 +- math/lexer.mll | 1 + math/render.ml | 54 +- math/texutil.ml | 30 +- math/texvc.ml | 26 +- math/util.ml | 15 +- mw-config/index.php | 50 + mw-config/index.php5 | 4 + php5.php5 | 2 +- profileinfo.php | 112 +- resources/Resources.php | 587 + resources/jquery.effects/jquery.effects.blind.js | 49 + resources/jquery.effects/jquery.effects.bounce.js | 78 + resources/jquery.effects/jquery.effects.clip.js | 54 + resources/jquery.effects/jquery.effects.core.js | 714 ++ resources/jquery.effects/jquery.effects.drop.js | 50 + resources/jquery.effects/jquery.effects.explode.js | 79 + resources/jquery.effects/jquery.effects.fold.js | 56 + .../jquery.effects/jquery.effects.highlight.js | 50 + resources/jquery.effects/jquery.effects.pulsate.js | 51 + resources/jquery.effects/jquery.effects.scale.js | 178 + resources/jquery.effects/jquery.effects.shake.js | 57 + resources/jquery.effects/jquery.effects.slide.js | 50 + .../jquery.effects/jquery.effects.transfer.js | 45 + resources/jquery.tipsy/images/tipsy.png | Bin 0 -> 179 bytes resources/jquery.tipsy/jquery.tipsy.css | 75 + resources/jquery.tipsy/jquery.tipsy.js | 207 + .../jquery.ui/i18n/jquery.ui.datepicker-af.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-ar.js | 24 + .../jquery.ui/i18n/jquery.ui.datepicker-az.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-bg.js | 24 + .../jquery.ui/i18n/jquery.ui.datepicker-bs.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-ca.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-cs.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-da.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-de.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-el.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-en-GB.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-eo.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-es.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-et.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-eu.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-fa.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-fi.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-fo.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-fr-CH.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-fr.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-he.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-hr.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-hu.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-hy.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-id.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-is.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-it.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-ja.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-ko.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-lt.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-lv.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-ms.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-nl.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-no.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-pl.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-pt-BR.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-ro.js | 26 + .../jquery.ui/i18n/jquery.ui.datepicker-ru.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-sk.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-sl.js | 24 + .../jquery.ui/i18n/jquery.ui.datepicker-sq.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-sr-SR.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-sr.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-sv.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-ta.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-th.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-tr.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-uk.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-vi.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-zh-CN.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-zh-HK.js | 23 + .../jquery.ui/i18n/jquery.ui.datepicker-zh-TW.js | 23 + resources/jquery.ui/jquery.ui.accordion.js | 504 + resources/jquery.ui/jquery.ui.autocomplete.js | 511 + resources/jquery.ui/jquery.ui.button.js | 365 + resources/jquery.ui/jquery.ui.core.js | 216 + resources/jquery.ui/jquery.ui.datepicker.js | 1730 +++ resources/jquery.ui/jquery.ui.dialog.js | 823 ++ resources/jquery.ui/jquery.ui.draggable.js | 797 ++ resources/jquery.ui/jquery.ui.droppable.js | 285 + resources/jquery.ui/jquery.ui.mouse.js | 151 + resources/jquery.ui/jquery.ui.position.js | 233 + resources/jquery.ui/jquery.ui.progressbar.js | 107 + resources/jquery.ui/jquery.ui.resizable.js | 799 ++ resources/jquery.ui/jquery.ui.selectable.js | 269 + resources/jquery.ui/jquery.ui.slider.js | 682 ++ resources/jquery.ui/jquery.ui.sortable.js | 1067 ++ resources/jquery.ui/jquery.ui.tabs.js | 729 ++ resources/jquery.ui/jquery.ui.widget.js | 236 + .../themes/default/images/ui-anim_basic_16x16.gif | Bin 0 -> 1553 bytes .../default/images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../default/images/ui-bg_flat_55_fbf9ee_40x100.png | Bin 0 -> 182 bytes .../default/images/ui-bg_flat_65_ffffff_40x100.png | Bin 0 -> 178 bytes .../default/images/ui-bg_flat_75_cccccc_40x100.png | Bin 0 -> 180 bytes .../default/images/ui-bg_flat_75_dadada_40x100.png | Bin 0 -> 180 bytes .../default/images/ui-bg_flat_75_e6e6e6_40x100.png | Bin 0 -> 180 bytes .../default/images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../default/images/ui-bg_flat_95_fef1ec_40x100.png | Bin 0 -> 182 bytes .../default/images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../default/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 5355 bytes .../default/images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../default/images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../default/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../themes/default/jquery.ui.accordion.css | 12 + .../themes/default/jquery.ui.autocomplete.css | 39 + .../jquery.ui/themes/default/jquery.ui.button.css | 35 + .../jquery.ui/themes/default/jquery.ui.core.css | 37 + .../themes/default/jquery.ui.datepicker.css | 61 + .../jquery.ui/themes/default/jquery.ui.dialog.css | 13 + .../themes/default/jquery.ui.progressbar.css | 4 + .../themes/default/jquery.ui.resizable.css | 13 + .../themes/default/jquery.ui.selectable.css | 3 + .../jquery.ui/themes/default/jquery.ui.slider.css | 17 + .../jquery.ui/themes/default/jquery.ui.tabs.css | 11 + .../jquery.ui/themes/default/jquery.ui.theme.css | 248 + .../themes/vector/images/button-disabled-blue.png | Bin 0 -> 126 bytes .../themes/vector/images/button-disabled-green.png | Bin 0 -> 126 bytes .../themes/vector/images/button-disabled-red.png | Bin 0 -> 126 bytes .../themes/vector/images/button-disabled.png | Bin 0 -> 126 bytes .../themes/vector/images/button-down-blue.png | Bin 0 -> 170 bytes .../themes/vector/images/button-down-green.png | Bin 0 -> 170 bytes .../themes/vector/images/button-down-red.png | Bin 0 -> 170 bytes .../jquery.ui/themes/vector/images/button-down.png | Bin 0 -> 170 bytes .../themes/vector/images/button-off-blue.png | Bin 0 -> 216 bytes .../themes/vector/images/button-off-green.png | Bin 0 -> 216 bytes .../themes/vector/images/button-off-red.png | Bin 0 -> 216 bytes .../jquery.ui/themes/vector/images/button-off.png | Bin 0 -> 190 bytes .../themes/vector/images/button-over-blue.png | Bin 0 -> 216 bytes .../themes/vector/images/button-over-green.png | Bin 0 -> 216 bytes .../themes/vector/images/button-over-red.png | Bin 0 -> 216 bytes .../jquery.ui/themes/vector/images/button-over.png | Bin 0 -> 191 bytes resources/jquery.ui/themes/vector/images/close.png | Bin 0 -> 164 bytes .../themes/vector/images/titlebar-fade.png | Bin 0 -> 231 bytes .../themes/vector/images/ui-anim_basic_16x16.gif | Bin 0 -> 1553 bytes .../vector/images/ui-bg_flat_15_cd0a0a_40x100.png | Bin 0 -> 181 bytes .../vector/images/ui-bg_flat_70_000000_40x100.png | Bin 0 -> 178 bytes .../ui-bg_highlight-hard_100_f2f5f7_1x100.png | Bin 0 -> 103 bytes .../ui-bg_highlight-hard_80_d7ebf9_1x100.png | Bin 0 -> 111 bytes .../ui-bg_highlight-soft_100_e4f1fb_1x100.png | Bin 0 -> 112 bytes .../ui-bg_highlight-soft_100_ffffff_1x100.png | Bin 0 -> 86 bytes .../ui-bg_highlight-soft_25_ffef8f_1x100.png | Bin 0 -> 153 bytes .../images/ui-bg_inset-hard_100_f0f0f0_1x100.png | Bin 0 -> 91 bytes .../vector/images/ui-icons_2694e8_256x240.png | Bin 0 -> 5355 bytes .../vector/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../vector/images/ui-icons_3d80b3_256x240.png | Bin 0 -> 5355 bytes .../vector/images/ui-icons_666666_256x240.png | Bin 0 -> 4369 bytes .../vector/images/ui-icons_72a7cf_256x240.png | Bin 0 -> 4369 bytes .../vector/images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../themes/vector/jquery.ui.accordion.css | 12 + .../themes/vector/jquery.ui.autocomplete.css | 39 + .../jquery.ui/themes/vector/jquery.ui.button.css | 143 + .../jquery.ui/themes/vector/jquery.ui.core.css | 37 + .../themes/vector/jquery.ui.datepicker.css | 61 + .../jquery.ui/themes/vector/jquery.ui.dialog.css | 37 + .../themes/vector/jquery.ui.progressbar.css | 4 + .../themes/vector/jquery.ui.resizable.css | 13 + .../themes/vector/jquery.ui.selectable.css | 3 + .../jquery.ui/themes/vector/jquery.ui.slider.css | 17 + .../jquery.ui/themes/vector/jquery.ui.tabs.css | 11 + .../jquery.ui/themes/vector/jquery.ui.theme.css | 248 + resources/jquery/jquery.async.js | 78 + resources/jquery/jquery.autoEllipsis.js | 131 + resources/jquery/jquery.checkboxShiftClick.js | 28 + resources/jquery/jquery.client.js | 206 + resources/jquery/jquery.collapsibleTabs.js | 117 + resources/jquery/jquery.color.js | 123 + resources/jquery/jquery.cookie.js | 89 + resources/jquery/jquery.delayedBind.js | 68 + resources/jquery/jquery.expandableField.js | 129 + resources/jquery/jquery.highlightText.js | 62 + resources/jquery/jquery.js | 6240 ++++++++++ resources/jquery/jquery.localize.js | 64 + resources/jquery/jquery.placeholder.js | 85 + resources/jquery/jquery.suggestions.css | 75 + resources/jquery/jquery.suggestions.js | 521 + resources/jquery/jquery.tabIndex.js | 35 + resources/jquery/jquery.textSelection.js | 404 + .../mediawiki.action/mediawiki.action.edit.js | 30 + .../mediawiki.action/mediawiki.action.history.js | 7 + .../mediawiki.action.view.rightClickEdit.js | 24 + resources/mediawiki.language/languages/am.js | 8 + resources/mediawiki.language/languages/ar.js | 38 + resources/mediawiki.language/languages/bat-smg.js | 18 + .../mediawiki.language/languages/be-tarask.js | 23 + resources/mediawiki.language/languages/be.js | 20 + resources/mediawiki.language/languages/bh.js | 8 + resources/mediawiki.language/languages/bs.js | 20 + resources/mediawiki.language/languages/cs.js | 19 + resources/mediawiki.language/languages/cu.js | 18 + resources/mediawiki.language/languages/cy.js | 15 + resources/mediawiki.language/languages/dsb.js | 18 + resources/mediawiki.language/languages/fr.js | 8 + resources/mediawiki.language/languages/ga.js | 14 + resources/mediawiki.language/languages/gd.js | 18 + resources/mediawiki.language/languages/gv.js | 18 + resources/mediawiki.language/languages/he.js | 14 + resources/mediawiki.language/languages/hi.js | 8 + resources/mediawiki.language/languages/hr.js | 20 + resources/mediawiki.language/languages/hsb.js | 18 + resources/mediawiki.language/languages/hy.js | 8 + resources/mediawiki.language/languages/ksh.js | 14 + resources/mediawiki.language/languages/ln.js | 8 + resources/mediawiki.language/languages/lt.js | 17 + resources/mediawiki.language/languages/lv.js | 8 + resources/mediawiki.language/languages/mg.js | 8 + resources/mediawiki.language/languages/mk.js | 8 + resources/mediawiki.language/languages/mo.js | 14 + resources/mediawiki.language/languages/mt.js | 17 + resources/mediawiki.language/languages/nso.js | 8 + resources/mediawiki.language/languages/pl.js | 21 + resources/mediawiki.language/languages/pt-br.js | 8 + resources/mediawiki.language/languages/ro.js | 14 + resources/mediawiki.language/languages/ru.js | 23 + resources/mediawiki.language/languages/se.js | 17 + resources/mediawiki.language/languages/sh.js | 23 + resources/mediawiki.language/languages/sk.js | 14 + resources/mediawiki.language/languages/sl.js | 20 + resources/mediawiki.language/languages/sma.js | 14 + resources/mediawiki.language/languages/sr-ec.js | 20 + resources/mediawiki.language/languages/sr-el.js | 20 + resources/mediawiki.language/languages/sr.js | 23 + resources/mediawiki.language/languages/ti.js | 8 + resources/mediawiki.language/languages/tl.js | 7 + resources/mediawiki.language/languages/uk.js | 23 + resources/mediawiki.language/languages/wa.js | 8 + resources/mediawiki.language/mediawiki.language.js | 102 + .../mediawiki.special.preferences.css | 21 + .../mediawiki.special.preferences.js | 77 + .../mediawiki.special/mediawiki.special.search.js | 11 + resources/mediawiki.util/mediawiki.util.js | 399 + resources/mediawiki.util/mediawiki.util.test.js | 172 + resources/mediawiki/mediawiki.js | 1154 ++ resources/mediawiki/mediawiki.log.js | 64 + resources/startup.js | 34 + serialized/first-letters-root.ser | 1 + skins/ArchLinux.php | 57 +- skins/CologneBlue.php | 62 +- skins/Modern.php | 175 +- skins/MonoBook.php | 59 +- skins/Nostalgia.php | 18 +- skins/Simple.php | 61 +- skins/Standard.php | 59 +- skins/Vector.php | 234 +- skins/archlinux/IE50Fixes.css | 10 +- skins/archlinux/IE55Fixes.css | 10 +- skins/archlinux/IE60Fixes.css | 12 +- skins/archlinux/IE70Fixes.css | 8 +- skins/archlinux/Opera6Fixes.css | 2 +- skins/archlinux/audio.png | Bin 312 -> 239 bytes skins/archlinux/document.png | Bin 270 -> 213 bytes skins/archlinux/external-rtl.png | Bin 198 -> 157 bytes skins/archlinux/external.png | Bin 165 -> 143 bytes skins/archlinux/main.css | 115 +- skins/archlinux/news_icon.png | Bin 297 -> 294 bytes skins/archlinux/rtl.css | 22 +- skins/archlinux/wiki-indexed.png | Bin 8205 -> 8013 bytes skins/archlinux/wiki.png | Bin 22987 -> 22736 bytes skins/chick/main.css | 13 +- skins/common/IEFixes.js | 41 +- skins/common/ajax.js | 196 +- skins/common/ajaxwatch.js | 262 +- skins/common/block.js | 48 +- skins/common/changepassword.js | 16 - skins/common/cologneblue.css | 247 +- skins/common/commonPrint.css | 316 +- skins/common/common_rtl.css | 12 +- skins/common/config-cc.css | 56 + skins/common/config.css | 164 + skins/common/config.js | 102 + skins/common/diff.css | 84 +- skins/common/edit.js | 44 +- skins/common/enhancedchanges.js | 4 +- skins/common/history.js | 25 +- skins/common/htmlform.js | 4 +- skins/common/images/Arr_d.png | Bin 215 -> 205 bytes skins/common/images/Arr_l.png | Bin 263 -> 257 bytes skins/common/images/Arr_r.png | Bin 210 -> 206 bytes skins/common/images/Arr_u.png | Bin 425 -> 423 bytes skins/common/images/add.png | Bin 3329 -> 3222 bytes skins/common/images/ar/button_bold.png | Bin 741 -> 626 bytes skins/common/images/ar/button_headline.png | Bin 629 -> 560 bytes skins/common/images/ar/button_italic.png | Bin 692 -> 605 bytes skins/common/images/ar/button_link.png | Bin 741 -> 643 bytes skins/common/images/ar/button_nowiki.png | Bin 1185 -> 963 bytes skins/common/images/arrow_disabled_first_25.png | Bin 481 -> 369 bytes skins/common/images/arrow_disabled_last_25.png | Bin 480 -> 374 bytes skins/common/images/arrow_disabled_left_25.png | Bin 460 -> 352 bytes skins/common/images/arrow_disabled_right_25.png | Bin 447 -> 358 bytes skins/common/images/arrow_first_25.png | Bin 482 -> 405 bytes skins/common/images/arrow_last_25.png | Bin 484 -> 395 bytes skins/common/images/arrow_left_25.png | Bin 462 -> 383 bytes skins/common/images/arrow_right_25.png | Bin 449 -> 394 bytes skins/common/images/be-tarask/button_italic.png | Bin 592 -> 580 bytes skins/common/images/be-tarask/button_link.png | Bin 466 -> 459 bytes skins/common/images/button_bold.png | Bin 288 -> 271 bytes skins/common/images/button_extlink.png | Bin 494 -> 456 bytes skins/common/images/button_headline.png | Bin 465 -> 461 bytes skins/common/images/button_hr.png | Bin 251 -> 247 bytes skins/common/images/button_image.png | Bin 584 -> 504 bytes skins/common/images/button_italic.png | Bin 292 -> 271 bytes skins/common/images/button_link.png | Bin 337 -> 301 bytes skins/common/images/button_media.png | Bin 780 -> 749 bytes skins/common/images/button_nowiki.png | Bin 352 -> 342 bytes skins/common/images/button_sig.png | Bin 953 -> 949 bytes skins/common/images/button_template.png | Bin 233 -> 210 bytes skins/common/images/cc-by-nc-sa.png | Bin 0 -> 4263 bytes skins/common/images/cc-by-sa.png | Bin 0 -> 4109 bytes skins/common/images/closewindow.png | Bin 0 -> 148 bytes skins/common/images/critical-32.png | Bin 0 -> 2395 bytes skins/common/images/cyrl/button_italic.png | Bin 460 -> 457 bytes skins/common/images/de/button_bold.png | Bin 328 -> 308 bytes skins/common/images/de/button_italic.png | Bin 351 -> 313 bytes skins/common/images/download-32.png | Bin 0 -> 2057 bytes skins/common/images/fa/button_bold.png | Bin 500 -> 496 bytes skins/common/images/fa/button_headline.png | Bin 434 -> 429 bytes skins/common/images/fa/button_italic.png | Bin 573 -> 563 bytes skins/common/images/fa/button_link.png | Bin 535 -> 522 bytes skins/common/images/fa/button_nowiki.png | Bin 1185 -> 963 bytes skins/common/images/gnu-fdl.png | Bin 1730 -> 1655 bytes skins/common/images/help-question-hover.gif | Bin 0 -> 1246 bytes skins/common/images/help-question.gif | Bin 0 -> 126 bytes skins/common/images/icons/fileicon-c.png | Bin 2211 -> 1948 bytes skins/common/images/icons/fileicon-cpp.png | Bin 1882 -> 1577 bytes skins/common/images/icons/fileicon-deb.png | Bin 4801 -> 4726 bytes skins/common/images/icons/fileicon-djvu.png | Bin 10752 -> 10615 bytes skins/common/images/icons/fileicon-dvi.png | Bin 12778 -> 12628 bytes skins/common/images/icons/fileicon-exe.png | Bin 5680 -> 5627 bytes skins/common/images/icons/fileicon-h.png | Bin 1191 -> 998 bytes skins/common/images/icons/fileicon-html.png | Bin 7422 -> 7376 bytes skins/common/images/icons/fileicon-iso.png | Bin 6450 -> 6304 bytes skins/common/images/icons/fileicon-java.png | Bin 5989 -> 5901 bytes skins/common/images/icons/fileicon-mid.png | Bin 6657 -> 6515 bytes skins/common/images/icons/fileicon-o.png | Bin 2204 -> 1937 bytes skins/common/images/icons/fileicon-ogg.png | Bin 3750 -> 3346 bytes skins/common/images/icons/fileicon-pdf.png | Bin 4976 -> 4909 bytes skins/common/images/icons/fileicon-ps.png | Bin 3012 -> 2985 bytes skins/common/images/icons/fileicon-rm.png | Bin 2851 -> 2714 bytes skins/common/images/icons/fileicon-rpm.png | Bin 4103 -> 4000 bytes skins/common/images/icons/fileicon-svg.png | Bin 5094 -> 4978 bytes skins/common/images/icons/fileicon-tar.png | Bin 6347 -> 6224 bytes skins/common/images/icons/fileicon-tex.png | Bin 3997 -> 3937 bytes skins/common/images/icons/fileicon-ttf.png | Bin 3469 -> 3392 bytes skins/common/images/icons/fileicon-txt.png | Bin 3638 -> 3582 bytes skins/common/images/icons/fileicon.png | Bin 1121 -> 884 bytes skins/common/images/info-32.png | Bin 0 -> 2159 bytes skins/common/images/ksh/button_S_italic.png | Bin 3206 -> 3201 bytes skins/common/images/mediawiki.png | Bin 22987 -> 22736 bytes skins/common/images/poweredby_mediawiki_88x31.png | Bin 1927 -> 3605 bytes skins/common/images/public-domain.png | Bin 2251 -> 2248 bytes skins/common/images/redirectltr.png | Bin 381 -> 355 bytes skins/common/images/redirectrtl.png | Bin 381 -> 359 bytes skins/common/images/remove.png | Bin 3346 -> 3271 bytes skins/common/images/tick-32.png | Bin 0 -> 1457 bytes skins/common/images/tipsy-arrow.gif | Bin 0 -> 205 bytes skins/common/images/tooltip_icon.png | Bin 430 -> 391 bytes skins/common/images/warning-32.png | Bin 0 -> 1895 bytes skins/common/images/wiki.png | Bin 24801 -> 24482 bytes skins/common/jquery.js | 4384 ------- skins/common/jquery.min.js | 433 - skins/common/metadata.js | 8 +- skins/common/mwsuggest.js | 351 +- skins/common/nostalgia.css | 49 +- skins/common/oldshared.css | 232 +- skins/common/prefs.js | 111 +- skins/common/preview.js | 155 +- skins/common/protect.js | 26 +- skins/common/quickbar-right.css | 1 - skins/common/quickbar.css | 1 - skins/common/rightclickedit.js | 48 - skins/common/search.css | 14 + skins/common/search.js | 10 +- skins/common/shared.css | 329 +- skins/common/upload.js | 50 +- skins/common/wikibits.js | 414 +- skins/common/wikiprintable.css | 4 +- skins/common/wikistandard.css | 212 +- skins/modern/audio.png | Bin 312 -> 239 bytes skins/modern/document.png | Bin 270 -> 213 bytes skins/modern/external.png | Bin 165 -> 143 bytes skins/modern/footer-grad.png | Bin 149 -> 141 bytes skins/modern/main.css | 168 +- skins/modern/news_icon.png | Bin 297 -> 294 bytes skins/modern/print.css | 3 +- skins/modern/rtl.css | 9 +- skins/modern/video.png | Bin 215 -> 178 bytes skins/monobook/IE50Fixes.css | 10 +- skins/monobook/IE55Fixes.css | 10 +- skins/monobook/IE60Fixes.css | 12 +- skins/monobook/IE70Fixes.css | 8 +- skins/monobook/Opera6Fixes.css | 2 +- skins/monobook/audio.png | Bin 312 -> 239 bytes skins/monobook/document.png | Bin 270 -> 213 bytes skins/monobook/external-rtl.png | Bin 198 -> 157 bytes skins/monobook/external.png | Bin 165 -> 143 bytes skins/monobook/main.css | 115 +- skins/monobook/news_icon.png | Bin 297 -> 294 bytes skins/monobook/rtl.css | 22 +- skins/monobook/wiki-indexed.png | Bin 8205 -> 8013 bytes skins/monobook/wiki.png | Bin 22987 -> 22736 bytes skins/simple/external.png | Bin 165 -> 143 bytes skins/simple/main.css | 11 +- skins/simple/rtl.css | 185 - skins/vector/Makefile | 18 - skins/vector/csshover.htc | 144 +- skins/vector/csshover.min.htc | 12 + skins/vector/cssjanus/COPYING | 13 - skins/vector/cssjanus/LICENSE | 202 - skins/vector/cssjanus/README | 91 - skins/vector/cssjanus/cssjanus.py | 574 - skins/vector/cssjanus/csslex.py | 114 - skins/vector/experiments/babaco-colors-a.css | 109 - skins/vector/experiments/babaco-colors-b.css | 67 - skins/vector/experiments/babaco-colors-c.css | 91 - skins/vector/experiments/images/new-border.png | Bin 124 -> 0 bytes .../experiments/images/new-portal-break-ltr.png | Bin 891 -> 0 bytes .../experiments/images/new-portal-break-rtl.png | Bin 891 -> 0 bytes skins/vector/experiments/images/page-base-fade.png | Bin 306 -> 0 bytes .../experiments/images/page-base-updated.png | Bin 124 -> 0 bytes .../vector/experiments/images/tab-active-first.png | Bin 981 -> 0 bytes .../vector/experiments/images/tab-active-last.png | Bin 980 -> 0 bytes skins/vector/experiments/images/tab-fade.png | Bin 226 -> 0 bytes skins/vector/experiments/images/tab-first.png | Bin 1057 -> 0 bytes skins/vector/experiments/images/tab-last.png | Bin 1057 -> 0 bytes skins/vector/experiments/images/tab-new-fade.png | Bin 216 -> 0 bytes skins/vector/experiments/new-tabs.css | 322 - skins/vector/images/arrow-down-icon.png | Bin 181 -> 188 bytes skins/vector/images/audio-icon.png | Bin 345 -> 240 bytes skins/vector/images/border.png | Bin 119 -> 118 bytes skins/vector/images/bullet-icon.png | Bin 152 -> 137 bytes skins/vector/images/document-icon.png | Bin 345 -> 172 bytes skins/vector/images/edit-icon.png | Bin 358 -> 314 bytes skins/vector/images/external-link-ltr-icon.png | Bin 279 -> 180 bytes skins/vector/images/external-link-rtl-icon.png | Bin 277 -> 178 bytes skins/vector/images/file-icon.png | Bin 402 -> 170 bytes skins/vector/images/link-icon.png | Bin 429 -> 406 bytes skins/vector/images/lock-icon.png | Bin 370 -> 227 bytes skins/vector/images/mail-icon.png | Bin 375 -> 245 bytes skins/vector/images/news-icon.png | Bin 359 -> 217 bytes skins/vector/images/page-base.png | Bin 119 -> 114 bytes skins/vector/images/page-fade.png | Bin 253 -> 152 bytes skins/vector/images/portal-break-ltr.png | Bin 287 -> 206 bytes skins/vector/images/portal-break-rtl.png | Bin 280 -> 198 bytes skins/vector/images/portal-break.png | Bin 242 -> 135 bytes skins/vector/images/preferences-base.png | Bin 119 -> 114 bytes skins/vector/images/preferences-edge.png | Bin 119 -> 114 bytes skins/vector/images/preferences-fade.png | Bin 248 -> 126 bytes skins/vector/images/search-fade.png | Bin 185 -> 132 bytes skins/vector/images/tab-break.png | Bin 263 -> 162 bytes skins/vector/images/tab-current-fade.png | Bin 121 -> 115 bytes skins/vector/images/tab-normal-fade.png | Bin 254 -> 154 bytes skins/vector/images/talk-icon.png | Bin 377 -> 210 bytes skins/vector/images/user-icon.png | Bin 345 -> 308 bytes skins/vector/images/video-icon.png | Bin 395 -> 200 bytes skins/vector/images/watch-icons.png | Bin 1745 -> 1745 bytes skins/vector/main-ltr.css | 1128 -- skins/vector/main-rtl.css | 1128 -- skins/vector/screen.css | 1203 ++ skins/vector/wiki-indexed.png | Bin 8205 -> 0 bytes skins/vector/wiki.png | Bin 22987 -> 0 bytes thumb.php | 13 +- trackback.php | 102 +- 1667 files changed, 182045 insertions(+), 100523 deletions(-) delete mode 100644 config/Installer.php create mode 100644 config/OBSOLETE create mode 100644 docs/code-coverage/README create mode 100644 docs/databases/ibm_db2.txt create mode 100644 docs/databases/postgres.txt create mode 100644 docs/databases/sqlite.txt create mode 100644 docs/export-0.5.xsd create mode 100644 includes/Collation.php delete mode 100644 includes/DatabaseFunctions.php delete mode 100644 includes/DoubleRedirectJob.php delete mode 100644 includes/EmaillingJob.php delete mode 100644 includes/EnotifNotifyJob.php create mode 100644 includes/HttpFunctions.old.php delete mode 100644 includes/IEContentAnalyzer.php delete mode 100644 includes/JSMin.php delete mode 100644 includes/JobQueue.php delete mode 100644 includes/MediaTransformOutput.php create mode 100644 includes/Message.php create mode 100644 includes/MessageBlobStore.php delete mode 100644 includes/NamespaceCompat.php delete mode 100644 includes/RefreshLinksJob.php create mode 100644 includes/SeleniumWebSettings.php delete mode 100644 includes/XmlFunctions.php create mode 100644 includes/api/ApiFormatDump.php delete mode 100644 includes/api/ApiFormatYaml_spyc.php create mode 100644 includes/api/ApiQueryFilearchive.php create mode 100644 includes/api/ApiQueryIWBacklinks.php create mode 100644 includes/api/ApiQueryIWLinks.php create mode 100644 includes/api/ApiQueryPageProps.php create mode 100644 includes/api/ApiQueryStashImageInfo.php create mode 100644 includes/api/ApiRsd.php create mode 100644 includes/db/LBFactory_Single.php delete mode 100644 includes/diff/Diff.php delete mode 100644 includes/diff/DifferenceInterface.php create mode 100644 includes/diff/WikiDiff.php create mode 100644 includes/diff/WikiDiff3.php create mode 100644 includes/installer/CliInstaller.php create mode 100644 includes/installer/DatabaseInstaller.php create mode 100644 includes/installer/DatabaseUpdater.php create mode 100644 includes/installer/Installer.i18n.php create mode 100644 includes/installer/Installer.php create mode 100644 includes/installer/LocalSettingsGenerator.php create mode 100644 includes/installer/MysqlInstaller.php create mode 100644 includes/installer/MysqlUpdater.php create mode 100644 includes/installer/OracleInstaller.php create mode 100644 includes/installer/OracleUpdater.php create mode 100644 includes/installer/PhpBugTests.php create mode 100644 includes/installer/PostgresInstaller.php create mode 100644 includes/installer/PostgresUpdater.php create mode 100644 includes/installer/SqliteInstaller.php create mode 100644 includes/installer/SqliteUpdater.php create mode 100644 includes/installer/WebInstaller.php create mode 100644 includes/installer/WebInstallerOutput.php create mode 100644 includes/installer/WebInstallerPage.php create mode 100644 includes/job/DoubleRedirectJob.php create mode 100644 includes/job/EmaillingJob.php create mode 100644 includes/job/EnotifNotifyJob.php create mode 100644 includes/job/JobQueue.php create mode 100644 includes/job/RefreshLinksJob.php create mode 100644 includes/job/UploadFromUrlJob.php create mode 100644 includes/libs/CSSJanus.php create mode 100644 includes/libs/CSSMin.php create mode 100644 includes/libs/IEContentAnalyzer.php create mode 100644 includes/libs/IEUrlExtension.php create mode 100644 includes/libs/JavaScriptMinifier.php create mode 100644 includes/libs/README create mode 100644 includes/libs/spyc.php create mode 100644 includes/media/MediaTransformOutput.php create mode 100644 includes/media/PNG.php create mode 100644 includes/media/PNGMetadataExtractor.php create mode 100644 includes/media/SVGMetadataExtractor.php create mode 100644 includes/normal/UtfNormalTest2.php create mode 100644 includes/resourceloader/ResourceLoader.php create mode 100644 includes/resourceloader/ResourceLoaderContext.php create mode 100644 includes/resourceloader/ResourceLoaderFileModule.php create mode 100644 includes/resourceloader/ResourceLoaderModule.php create mode 100644 includes/resourceloader/ResourceLoaderSiteModule.php create mode 100644 includes/resourceloader/ResourceLoaderStartUpModule.php create mode 100644 includes/resourceloader/ResourceLoaderUserModule.php create mode 100644 includes/resourceloader/ResourceLoaderUserOptionsModule.php create mode 100644 includes/resourceloader/ResourceLoaderWikiModule.php create mode 100644 includes/revisiondelete/RevisionDelete.php create mode 100644 includes/revisiondelete/RevisionDeleteAbstracts.php create mode 100644 includes/revisiondelete/RevisionDeleter.php create mode 100644 includes/search/SearchMssql.php delete mode 100644 includes/search/SearchMySQL4.php create mode 100644 includes/specials/SpecialComparePages.php delete mode 100644 includes/specials/SpecialRemoveRestrictions.php create mode 100644 includes/specials/SpecialUploadStash.php create mode 100644 includes/upload/UploadStash.php delete mode 100644 languages/classes/LanguagePt_br.php create mode 100644 languages/messages/MessagesAry.php create mode 100644 languages/messages/MessagesBjn.php delete mode 100644 languages/messages/MessagesCkb_arab.php delete mode 100644 languages/messages/MessagesCkb_latn.php delete mode 100644 languages/messages/MessagesDk.php delete mode 100644 languages/messages/MessagesHif_deva.php create mode 100644 languages/messages/MessagesKbd.php create mode 100644 languages/messages/MessagesKbd_cyrl.php create mode 100644 languages/messages/MessagesMin.php create mode 100644 languages/messages/MessagesNl_informal.php create mode 100644 languages/messages/MessagesSgs.php create mode 100644 load.php create mode 100644 load.php5 delete mode 100644 maintenance/FiveUpgrade.inc create mode 100644 maintenance/archives/patch-archive_ar_revid.sql create mode 100644 maintenance/archives/patch-archive_kill_ar_page_revid.sql create mode 100644 maintenance/archives/patch-categorylinks-better-collation.sql create mode 100644 maintenance/archives/patch-categorylinks-better-collation2.sql create mode 100644 maintenance/archives/patch-iw_api_and_wikiid.sql create mode 100644 maintenance/archives/patch-iwlinks.sql create mode 100644 maintenance/archives/patch-kill-iwl_pft.sql create mode 100644 maintenance/archives/patch-kill-iwl_prefix.sql create mode 100644 maintenance/archives/patch-langlinks-ll_lang-20.sql create mode 100644 maintenance/archives/patch-module_deps.sql create mode 100644 maintenance/archives/patch-msg_resource.sql create mode 100644 maintenance/archives/patch-rename-iwl_prefix.sql create mode 100644 maintenance/archives/patch-testrun.sql create mode 100644 maintenance/archives/patch-ul_value.sql create mode 100644 maintenance/benchmarks/Benchmarker.php create mode 100644 maintenance/benchmarks/bench_HTTP_HTTPS.php create mode 100644 maintenance/benchmarks/bench_wfIsWindows.php delete mode 100644 maintenance/cleanupDupes.inc create mode 100644 maintenance/cleanupRemovedModules.php delete mode 100644 maintenance/convertLinks.inc create mode 100644 maintenance/cssjanus/COPYING create mode 100644 maintenance/cssjanus/LICENSE create mode 100644 maintenance/cssjanus/README create mode 100644 maintenance/cssjanus/cssjanus.py create mode 100644 maintenance/cssjanus/csslex.py create mode 100644 maintenance/deleteArchivedFiles.inc create mode 100644 maintenance/deleteArchivedRevisions.inc delete mode 100644 maintenance/dumpInterwiki.inc delete mode 100644 maintenance/ibm_db2/README create mode 100644 maintenance/ibm_db2/foreignkeys.sql create mode 100644 maintenance/install.php delete mode 100644 maintenance/installExtension.php create mode 100644 maintenance/interwiki.list delete mode 100644 maintenance/language/diffLanguage.php create mode 100644 maintenance/language/generateCollationData.php delete mode 100644 maintenance/mssql/README delete mode 100644 maintenance/ora/patch_seq_names_pre1.16.sql delete mode 100644 maintenance/ora/tables.sql delete mode 100644 maintenance/ora/user.sql create mode 100644 maintenance/oracle/archives/patch-testrun.sql create mode 100644 maintenance/oracle/archives/patch_16_17_schema_changes.sql create mode 100644 maintenance/oracle/archives/patch_create_17_functions.sql create mode 100644 maintenance/oracle/archives/patch_fk_rename_deferred.sql create mode 100644 maintenance/oracle/archives/patch_namespace_defaults.sql create mode 100644 maintenance/oracle/patch_seq_names_pre1.16.sql create mode 100644 maintenance/oracle/tables.sql create mode 100644 maintenance/oracle/user.sql delete mode 100644 maintenance/parserTests.inc delete mode 100644 maintenance/parserTests.php delete mode 100644 maintenance/parserTests.txt delete mode 100644 maintenance/parserTestsParserHook.php delete mode 100644 maintenance/parserTestsParserTime.php delete mode 100644 maintenance/parserTestsStaticParserHook.php delete mode 100644 maintenance/populateCategory.inc delete mode 100644 maintenance/populateLogSearch.inc delete mode 100644 maintenance/populateParentId.inc create mode 100644 maintenance/populateRevisionLength.php create mode 100644 maintenance/postgres/archives/patch-categorylinks-better-collation.sql create mode 100644 maintenance/postgres/archives/patch-iwlinks.sql create mode 100644 maintenance/postgres/archives/patch-kill-iwl_pft.sql create mode 100644 maintenance/postgres/archives/patch-kill-iwl_prefix.sql delete mode 100644 maintenance/postgres/archives/patch-mediawiki_version.sql create mode 100644 maintenance/postgres/archives/patch-module_deps.sql create mode 100644 maintenance/postgres/archives/patch-msg_resource.sql create mode 100644 maintenance/postgres/archives/patch-msg_resource_links.sql delete mode 100644 maintenance/postgres/archives/patch-mwuser.sql create mode 100644 maintenance/postgres/archives/patch-page.sql delete mode 100644 maintenance/postgres/archives/patch-pagecontent.sql create mode 100644 maintenance/postgres/archives/patch-rename-iwl_prefix.sql create mode 100644 maintenance/postgres/archives/patch-tag_summary.sql create mode 100644 maintenance/postgres/archives/patch-testrun.sql create mode 100644 maintenance/postgres/archives/patch-valid_tag.sql delete mode 100644 maintenance/rebuildInterwiki.inc create mode 100644 maintenance/sqlite.inc delete mode 100644 maintenance/sqlite/README create mode 100644 maintenance/sqlite/archives/patch-categorylinks-better-collation.sql create mode 100644 maintenance/sqlite/archives/patch-iw_api_and_wikiid.sql create mode 100644 maintenance/sqlite/archives/patch-kill-iwl_pft.sql create mode 100644 maintenance/sqlite/archives/patch-kill-iwl_prefix.sql create mode 100644 maintenance/sqlite/archives/patch-log_search-rename-index.sql create mode 100644 maintenance/sqlite/archives/patch-rename-iwl_prefix.sql delete mode 100644 maintenance/testRunner.ora.sql delete mode 100644 maintenance/testRunner.postgres.sql delete mode 100644 maintenance/testRunner.sql delete mode 100644 maintenance/tests/ApiSetup.php delete mode 100644 maintenance/tests/ApiTest.php delete mode 100644 maintenance/tests/CdbTest.php delete mode 100644 maintenance/tests/DatabaseSqliteTest.php delete mode 100644 maintenance/tests/DatabaseTest.php delete mode 100644 maintenance/tests/GlobalTest.php delete mode 100644 maintenance/tests/HttpTest.php delete mode 100644 maintenance/tests/IPTest.php delete mode 100644 maintenance/tests/ImageFunctionsTest.php delete mode 100644 maintenance/tests/LanguageConverterTest.php delete mode 100644 maintenance/tests/LicensesTest.php delete mode 100644 maintenance/tests/LocalFileTest.php delete mode 100644 maintenance/tests/Makefile delete mode 100644 maintenance/tests/MediaWikiParserTest.php delete mode 100644 maintenance/tests/MediaWiki_Setup.php delete mode 100644 maintenance/tests/README delete mode 100644 maintenance/tests/RevisionTest.php create mode 100644 maintenance/tests/RunSeleniumTests.php delete mode 100644 maintenance/tests/SanitizerTest.php delete mode 100644 maintenance/tests/SearchEngineTest.php delete mode 100644 maintenance/tests/SearchMySQLTest.php delete mode 100644 maintenance/tests/SearchUpdateTest.php delete mode 100644 maintenance/tests/SiteConfigurationTest.php delete mode 100644 maintenance/tests/TimeAdjustTest.php delete mode 100644 maintenance/tests/TitleTest.php delete mode 100644 maintenance/tests/XmlTest.php delete mode 100644 maintenance/tests/bootstrap.php create mode 100644 maintenance/tests/parser/ExtraParserTests.txt create mode 100644 maintenance/tests/parser/parserTest.inc create mode 100644 maintenance/tests/parser/parserTests.txt create mode 100644 maintenance/tests/parser/parserTestsParserHook.php create mode 100644 maintenance/tests/parser/parserTestsStaticParserHook.php create mode 100644 maintenance/tests/parserTests.php delete mode 100644 maintenance/tests/phpunit.xml create mode 100644 maintenance/tests/selenium/Selenium.php create mode 100644 maintenance/tests/selenium/SeleniumConfig.php create mode 100644 maintenance/tests/selenium/SeleniumLoader.php create mode 100644 maintenance/tests/selenium/SeleniumServerManager.php create mode 100644 maintenance/tests/selenium/SeleniumTestCase.php create mode 100644 maintenance/tests/selenium/SeleniumTestConsoleLogger.php create mode 100644 maintenance/tests/selenium/SeleniumTestHTMLLogger.php create mode 100644 maintenance/tests/selenium/SeleniumTestListener.php create mode 100644 maintenance/tests/selenium/SeleniumTestSuite.php create mode 100644 maintenance/tests/selenium/data/Wikipedia-logo-v2-de.png create mode 100644 maintenance/tests/selenium/selenium_settings.ini.php52.sample create mode 100644 maintenance/tests/selenium/selenium_settings.ini.sample create mode 100644 maintenance/tests/selenium/selenium_settings_grid.ini.sample create mode 100644 maintenance/tests/selenium/suites/AddContentToNewPageTestCase.php create mode 100644 maintenance/tests/selenium/suites/AddNewPageTestCase.php create mode 100644 maintenance/tests/selenium/suites/CreateAccountTestCase.php create mode 100644 maintenance/tests/selenium/suites/DeletePageAdminTestCase.php create mode 100644 maintenance/tests/selenium/suites/EmailPasswordTestCase.php create mode 100644 maintenance/tests/selenium/suites/MediaWikExtraTestSuite.php create mode 100644 maintenance/tests/selenium/suites/MediaWikiEditorConfig.php create mode 100644 maintenance/tests/selenium/suites/MediaWikiEditorTestSuite.php create mode 100644 maintenance/tests/selenium/suites/MediawikiCoreSmokeTestCase.php create mode 100644 maintenance/tests/selenium/suites/MediawikiCoreSmokeTestSuite.php create mode 100644 maintenance/tests/selenium/suites/MovePageTestCase.php create mode 100644 maintenance/tests/selenium/suites/MyContributionsTestCase.php create mode 100644 maintenance/tests/selenium/suites/MyWatchListTestCase.php create mode 100644 maintenance/tests/selenium/suites/PageDeleteTestSuite.php create mode 100644 maintenance/tests/selenium/suites/PageSearchTestCase.php create mode 100644 maintenance/tests/selenium/suites/PreviewPageTestCase.php create mode 100644 maintenance/tests/selenium/suites/SavePageTestCase.php create mode 100644 maintenance/tests/selenium/suites/SimpleSeleniumConfig.php create mode 100644 maintenance/tests/selenium/suites/SimpleSeleniumTestCase.php create mode 100644 maintenance/tests/selenium/suites/SimpleSeleniumTestSuite.php create mode 100644 maintenance/tests/selenium/suites/UserPreferencesTestCase.php delete mode 100644 maintenance/tests/test-prefetch-current.xml delete mode 100644 maintenance/tests/test-prefetch-previous.xml delete mode 100644 maintenance/tests/test-prefetch-stub.xml create mode 100644 maintenance/tests/testHelpers.inc create mode 100644 maintenance/updateCollation.php create mode 100644 maintenance/updateDoubleWidthSearch.php delete mode 100644 maintenance/updaters.inc create mode 100644 mw-config/index.php create mode 100644 mw-config/index.php5 create mode 100644 resources/Resources.php create mode 100644 resources/jquery.effects/jquery.effects.blind.js create mode 100644 resources/jquery.effects/jquery.effects.bounce.js create mode 100644 resources/jquery.effects/jquery.effects.clip.js create mode 100644 resources/jquery.effects/jquery.effects.core.js create mode 100644 resources/jquery.effects/jquery.effects.drop.js create mode 100644 resources/jquery.effects/jquery.effects.explode.js create mode 100644 resources/jquery.effects/jquery.effects.fold.js create mode 100644 resources/jquery.effects/jquery.effects.highlight.js create mode 100644 resources/jquery.effects/jquery.effects.pulsate.js create mode 100644 resources/jquery.effects/jquery.effects.scale.js create mode 100644 resources/jquery.effects/jquery.effects.shake.js create mode 100644 resources/jquery.effects/jquery.effects.slide.js create mode 100644 resources/jquery.effects/jquery.effects.transfer.js create mode 100644 resources/jquery.tipsy/images/tipsy.png create mode 100644 resources/jquery.tipsy/jquery.tipsy.css create mode 100644 resources/jquery.tipsy/jquery.tipsy.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-af.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-ar.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-az.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-bg.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-bs.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-ca.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-cs.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-da.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-de.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-el.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-en-GB.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-eo.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-es.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-et.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-eu.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-fa.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-fi.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-fo.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-fr-CH.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-fr.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-he.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-hr.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-hu.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-hy.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-id.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-is.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-it.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-ja.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-ko.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-lt.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-lv.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-ms.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-nl.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-no.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-pl.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-pt-BR.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-ro.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-ru.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-sk.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-sl.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-sq.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-sr-SR.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-sr.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-sv.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-ta.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-th.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-tr.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-uk.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-vi.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-zh-CN.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-zh-HK.js create mode 100644 resources/jquery.ui/i18n/jquery.ui.datepicker-zh-TW.js create mode 100644 resources/jquery.ui/jquery.ui.accordion.js create mode 100644 resources/jquery.ui/jquery.ui.autocomplete.js create mode 100644 resources/jquery.ui/jquery.ui.button.js create mode 100644 resources/jquery.ui/jquery.ui.core.js create mode 100644 resources/jquery.ui/jquery.ui.datepicker.js create mode 100644 resources/jquery.ui/jquery.ui.dialog.js create mode 100644 resources/jquery.ui/jquery.ui.draggable.js create mode 100644 resources/jquery.ui/jquery.ui.droppable.js create mode 100644 resources/jquery.ui/jquery.ui.mouse.js create mode 100644 resources/jquery.ui/jquery.ui.position.js create mode 100644 resources/jquery.ui/jquery.ui.progressbar.js create mode 100644 resources/jquery.ui/jquery.ui.resizable.js create mode 100644 resources/jquery.ui/jquery.ui.selectable.js create mode 100644 resources/jquery.ui/jquery.ui.slider.js create mode 100644 resources/jquery.ui/jquery.ui.sortable.js create mode 100644 resources/jquery.ui/jquery.ui.tabs.js create mode 100644 resources/jquery.ui/jquery.ui.widget.js create mode 100644 resources/jquery.ui/themes/default/images/ui-anim_basic_16x16.gif create mode 100644 resources/jquery.ui/themes/default/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 resources/jquery.ui/themes/default/images/ui-bg_flat_55_fbf9ee_40x100.png create mode 100644 resources/jquery.ui/themes/default/images/ui-bg_flat_65_ffffff_40x100.png create mode 100644 resources/jquery.ui/themes/default/images/ui-bg_flat_75_cccccc_40x100.png create mode 100644 resources/jquery.ui/themes/default/images/ui-bg_flat_75_dadada_40x100.png create mode 100644 resources/jquery.ui/themes/default/images/ui-bg_flat_75_e6e6e6_40x100.png create mode 100644 resources/jquery.ui/themes/default/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 resources/jquery.ui/themes/default/images/ui-bg_flat_95_fef1ec_40x100.png create mode 100644 resources/jquery.ui/themes/default/images/ui-icons_222222_256x240.png create mode 100644 resources/jquery.ui/themes/default/images/ui-icons_2e83ff_256x240.png create mode 100644 resources/jquery.ui/themes/default/images/ui-icons_454545_256x240.png create mode 100644 resources/jquery.ui/themes/default/images/ui-icons_888888_256x240.png create mode 100644 resources/jquery.ui/themes/default/images/ui-icons_cd0a0a_256x240.png create mode 100644 resources/jquery.ui/themes/default/jquery.ui.accordion.css create mode 100644 resources/jquery.ui/themes/default/jquery.ui.autocomplete.css create mode 100644 resources/jquery.ui/themes/default/jquery.ui.button.css create mode 100644 resources/jquery.ui/themes/default/jquery.ui.core.css create mode 100644 resources/jquery.ui/themes/default/jquery.ui.datepicker.css create mode 100644 resources/jquery.ui/themes/default/jquery.ui.dialog.css create mode 100644 resources/jquery.ui/themes/default/jquery.ui.progressbar.css create mode 100644 resources/jquery.ui/themes/default/jquery.ui.resizable.css create mode 100644 resources/jquery.ui/themes/default/jquery.ui.selectable.css create mode 100644 resources/jquery.ui/themes/default/jquery.ui.slider.css create mode 100644 resources/jquery.ui/themes/default/jquery.ui.tabs.css create mode 100644 resources/jquery.ui/themes/default/jquery.ui.theme.css create mode 100644 resources/jquery.ui/themes/vector/images/button-disabled-blue.png create mode 100644 resources/jquery.ui/themes/vector/images/button-disabled-green.png create mode 100644 resources/jquery.ui/themes/vector/images/button-disabled-red.png create mode 100644 resources/jquery.ui/themes/vector/images/button-disabled.png create mode 100644 resources/jquery.ui/themes/vector/images/button-down-blue.png create mode 100644 resources/jquery.ui/themes/vector/images/button-down-green.png create mode 100644 resources/jquery.ui/themes/vector/images/button-down-red.png create mode 100644 resources/jquery.ui/themes/vector/images/button-down.png create mode 100644 resources/jquery.ui/themes/vector/images/button-off-blue.png create mode 100644 resources/jquery.ui/themes/vector/images/button-off-green.png create mode 100644 resources/jquery.ui/themes/vector/images/button-off-red.png create mode 100644 resources/jquery.ui/themes/vector/images/button-off.png create mode 100644 resources/jquery.ui/themes/vector/images/button-over-blue.png create mode 100644 resources/jquery.ui/themes/vector/images/button-over-green.png create mode 100644 resources/jquery.ui/themes/vector/images/button-over-red.png create mode 100644 resources/jquery.ui/themes/vector/images/button-over.png create mode 100644 resources/jquery.ui/themes/vector/images/close.png create mode 100644 resources/jquery.ui/themes/vector/images/titlebar-fade.png create mode 100644 resources/jquery.ui/themes/vector/images/ui-anim_basic_16x16.gif create mode 100644 resources/jquery.ui/themes/vector/images/ui-bg_flat_15_cd0a0a_40x100.png create mode 100644 resources/jquery.ui/themes/vector/images/ui-bg_flat_70_000000_40x100.png create mode 100644 resources/jquery.ui/themes/vector/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png create mode 100644 resources/jquery.ui/themes/vector/images/ui-bg_highlight-hard_80_d7ebf9_1x100.png create mode 100644 resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_100_e4f1fb_1x100.png create mode 100644 resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_100_ffffff_1x100.png create mode 100644 resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_25_ffef8f_1x100.png create mode 100644 resources/jquery.ui/themes/vector/images/ui-bg_inset-hard_100_f0f0f0_1x100.png create mode 100644 resources/jquery.ui/themes/vector/images/ui-icons_2694e8_256x240.png create mode 100644 resources/jquery.ui/themes/vector/images/ui-icons_2e83ff_256x240.png create mode 100644 resources/jquery.ui/themes/vector/images/ui-icons_3d80b3_256x240.png create mode 100644 resources/jquery.ui/themes/vector/images/ui-icons_666666_256x240.png create mode 100644 resources/jquery.ui/themes/vector/images/ui-icons_72a7cf_256x240.png create mode 100644 resources/jquery.ui/themes/vector/images/ui-icons_ffffff_256x240.png create mode 100644 resources/jquery.ui/themes/vector/jquery.ui.accordion.css create mode 100644 resources/jquery.ui/themes/vector/jquery.ui.autocomplete.css create mode 100644 resources/jquery.ui/themes/vector/jquery.ui.button.css create mode 100644 resources/jquery.ui/themes/vector/jquery.ui.core.css create mode 100644 resources/jquery.ui/themes/vector/jquery.ui.datepicker.css create mode 100644 resources/jquery.ui/themes/vector/jquery.ui.dialog.css create mode 100644 resources/jquery.ui/themes/vector/jquery.ui.progressbar.css create mode 100644 resources/jquery.ui/themes/vector/jquery.ui.resizable.css create mode 100644 resources/jquery.ui/themes/vector/jquery.ui.selectable.css create mode 100644 resources/jquery.ui/themes/vector/jquery.ui.slider.css create mode 100644 resources/jquery.ui/themes/vector/jquery.ui.tabs.css create mode 100644 resources/jquery.ui/themes/vector/jquery.ui.theme.css create mode 100644 resources/jquery/jquery.async.js create mode 100644 resources/jquery/jquery.autoEllipsis.js create mode 100644 resources/jquery/jquery.checkboxShiftClick.js create mode 100644 resources/jquery/jquery.client.js create mode 100644 resources/jquery/jquery.collapsibleTabs.js create mode 100644 resources/jquery/jquery.color.js create mode 100644 resources/jquery/jquery.cookie.js create mode 100644 resources/jquery/jquery.delayedBind.js create mode 100644 resources/jquery/jquery.expandableField.js create mode 100644 resources/jquery/jquery.highlightText.js create mode 100644 resources/jquery/jquery.js create mode 100644 resources/jquery/jquery.localize.js create mode 100644 resources/jquery/jquery.placeholder.js create mode 100644 resources/jquery/jquery.suggestions.css create mode 100644 resources/jquery/jquery.suggestions.js create mode 100644 resources/jquery/jquery.tabIndex.js create mode 100644 resources/jquery/jquery.textSelection.js create mode 100644 resources/mediawiki.action/mediawiki.action.edit.js create mode 100644 resources/mediawiki.action/mediawiki.action.history.js create mode 100644 resources/mediawiki.action/mediawiki.action.view.rightClickEdit.js create mode 100644 resources/mediawiki.language/languages/am.js create mode 100644 resources/mediawiki.language/languages/ar.js create mode 100644 resources/mediawiki.language/languages/bat-smg.js create mode 100644 resources/mediawiki.language/languages/be-tarask.js create mode 100644 resources/mediawiki.language/languages/be.js create mode 100644 resources/mediawiki.language/languages/bh.js create mode 100644 resources/mediawiki.language/languages/bs.js create mode 100644 resources/mediawiki.language/languages/cs.js create mode 100644 resources/mediawiki.language/languages/cu.js create mode 100644 resources/mediawiki.language/languages/cy.js create mode 100644 resources/mediawiki.language/languages/dsb.js create mode 100644 resources/mediawiki.language/languages/fr.js create mode 100644 resources/mediawiki.language/languages/ga.js create mode 100644 resources/mediawiki.language/languages/gd.js create mode 100644 resources/mediawiki.language/languages/gv.js create mode 100644 resources/mediawiki.language/languages/he.js create mode 100644 resources/mediawiki.language/languages/hi.js create mode 100644 resources/mediawiki.language/languages/hr.js create mode 100644 resources/mediawiki.language/languages/hsb.js create mode 100644 resources/mediawiki.language/languages/hy.js create mode 100644 resources/mediawiki.language/languages/ksh.js create mode 100644 resources/mediawiki.language/languages/ln.js create mode 100644 resources/mediawiki.language/languages/lt.js create mode 100644 resources/mediawiki.language/languages/lv.js create mode 100644 resources/mediawiki.language/languages/mg.js create mode 100644 resources/mediawiki.language/languages/mk.js create mode 100644 resources/mediawiki.language/languages/mo.js create mode 100644 resources/mediawiki.language/languages/mt.js create mode 100644 resources/mediawiki.language/languages/nso.js create mode 100644 resources/mediawiki.language/languages/pl.js create mode 100644 resources/mediawiki.language/languages/pt-br.js create mode 100644 resources/mediawiki.language/languages/ro.js create mode 100644 resources/mediawiki.language/languages/ru.js create mode 100644 resources/mediawiki.language/languages/se.js create mode 100644 resources/mediawiki.language/languages/sh.js create mode 100644 resources/mediawiki.language/languages/sk.js create mode 100644 resources/mediawiki.language/languages/sl.js create mode 100644 resources/mediawiki.language/languages/sma.js create mode 100644 resources/mediawiki.language/languages/sr-ec.js create mode 100644 resources/mediawiki.language/languages/sr-el.js create mode 100644 resources/mediawiki.language/languages/sr.js create mode 100644 resources/mediawiki.language/languages/ti.js create mode 100644 resources/mediawiki.language/languages/tl.js create mode 100644 resources/mediawiki.language/languages/uk.js create mode 100644 resources/mediawiki.language/languages/wa.js create mode 100644 resources/mediawiki.language/mediawiki.language.js create mode 100644 resources/mediawiki.special/mediawiki.special.preferences.css create mode 100644 resources/mediawiki.special/mediawiki.special.preferences.js create mode 100644 resources/mediawiki.special/mediawiki.special.search.js create mode 100644 resources/mediawiki.util/mediawiki.util.js create mode 100644 resources/mediawiki.util/mediawiki.util.test.js create mode 100644 resources/mediawiki/mediawiki.js create mode 100644 resources/mediawiki/mediawiki.log.js create mode 100644 resources/startup.js create mode 100644 serialized/first-letters-root.ser delete mode 100644 skins/common/changepassword.js create mode 100644 skins/common/config-cc.css create mode 100644 skins/common/config.css create mode 100644 skins/common/config.js create mode 100644 skins/common/images/cc-by-nc-sa.png create mode 100644 skins/common/images/cc-by-sa.png create mode 100644 skins/common/images/closewindow.png create mode 100644 skins/common/images/critical-32.png create mode 100644 skins/common/images/download-32.png create mode 100644 skins/common/images/help-question-hover.gif create mode 100644 skins/common/images/help-question.gif create mode 100644 skins/common/images/info-32.png create mode 100644 skins/common/images/tick-32.png create mode 100644 skins/common/images/tipsy-arrow.gif create mode 100644 skins/common/images/warning-32.png delete mode 100644 skins/common/jquery.js delete mode 100644 skins/common/jquery.min.js delete mode 100644 skins/common/quickbar-right.css delete mode 100644 skins/common/quickbar.css delete mode 100644 skins/common/rightclickedit.js create mode 100644 skins/common/search.css delete mode 100644 skins/simple/rtl.css delete mode 100644 skins/vector/Makefile create mode 100644 skins/vector/csshover.min.htc delete mode 100644 skins/vector/cssjanus/COPYING delete mode 100644 skins/vector/cssjanus/LICENSE delete mode 100644 skins/vector/cssjanus/README delete mode 100644 skins/vector/cssjanus/cssjanus.py delete mode 100644 skins/vector/cssjanus/csslex.py delete mode 100644 skins/vector/experiments/babaco-colors-a.css delete mode 100644 skins/vector/experiments/babaco-colors-b.css delete mode 100644 skins/vector/experiments/babaco-colors-c.css delete mode 100644 skins/vector/experiments/images/new-border.png delete mode 100644 skins/vector/experiments/images/new-portal-break-ltr.png delete mode 100644 skins/vector/experiments/images/new-portal-break-rtl.png delete mode 100644 skins/vector/experiments/images/page-base-fade.png delete mode 100644 skins/vector/experiments/images/page-base-updated.png delete mode 100644 skins/vector/experiments/images/tab-active-first.png delete mode 100644 skins/vector/experiments/images/tab-active-last.png delete mode 100644 skins/vector/experiments/images/tab-fade.png delete mode 100644 skins/vector/experiments/images/tab-first.png delete mode 100644 skins/vector/experiments/images/tab-last.png delete mode 100644 skins/vector/experiments/images/tab-new-fade.png delete mode 100644 skins/vector/experiments/new-tabs.css delete mode 100644 skins/vector/main-ltr.css delete mode 100644 skins/vector/main-rtl.css create mode 100644 skins/vector/screen.css delete mode 100644 skins/vector/wiki-indexed.png delete mode 100644 skins/vector/wiki.png diff --git a/.gitignore b/.gitignore index a94ae0af..954c371e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ /images/ /cache/ *~ -/LocalSettings.php -/AdminSettings.php +/LocalSettings.php* +/AdminSettings.php* diff --git a/COPYING b/COPYING index d7c31ed3..019694a9 100644 --- a/COPYING +++ b/COPYING @@ -1,14 +1,15 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 +== GNU GENERAL PUBLIC LICENSE == - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. +Version 2, June 1991 - Preamble +Copyright (C) 1989, 1991 Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. - The licenses for most software are designed to take away your +=== Preamble === + +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This @@ -18,48 +19,47 @@ using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. - When we speak of free software, we are referring to freedom, not +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. - To protect your rights, we need to make restrictions that forbid +To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. - For example, if you distribute copies of such a program, whether +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. - We protect your rights with two steps: (1) copyright the software, and +We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. - Also, for each author's protection and ours, we want to make certain +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. - Finally, any free program is threatened constantly by software +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. - The precise terms and conditions for copying, distribution and +The precise terms and conditions for copying, distribution and modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - 0. This License applies to any program or other work which contains +== TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION == + +'''0.''' This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" @@ -76,7 +76,7 @@ is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. - 1. You may copy and distribute verbatim copies of the Program's +'''1.''' You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the @@ -87,30 +87,30 @@ along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. - 2. You may modify your copy or copies of the Program or any portion +'''2.''' You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - + '''a)''' You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + '''b)''' You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + '''c)''' If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in @@ -131,26 +131,26 @@ with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. - 3. You may copy and distribute the Program (or a work based on it, +'''3.''' You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, + '''a)''' Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, + '''b)''' Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) + '''c)''' Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source @@ -168,8 +168,8 @@ access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program + +'''4.''' You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. @@ -177,7 +177,7 @@ However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. - 5. You are not required to accept this License, since you have not +'''5.''' You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by @@ -186,7 +186,7 @@ Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. - 6. Each time you redistribute the Program (or any work based on the +'''6.''' Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further @@ -194,7 +194,7 @@ restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. - 7. If, as a consequence of a court judgment or allegation of patent +'''7.''' If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not @@ -225,8 +225,8 @@ impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in + +'''8.''' If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding @@ -234,7 +234,7 @@ those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. - 9. The Free Software Foundation may publish revised and/or new versions +'''9.''' The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. @@ -247,7 +247,7 @@ Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. - 10. If you wish to incorporate parts of the Program into other free +'''10.''' If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes @@ -255,9 +255,9 @@ make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - NO WARRANTY +=== NO WARRANTY === - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +'''11.''' BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED @@ -267,7 +267,7 @@ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +'''12.''' IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING @@ -277,35 +277,36 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs + '''END OF TERMS AND CONDITIONS''' + +== How to Apply These Terms to Your New Programs == - If you develop a new program, and you want it to be of the greatest +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. - To do so, attach the following notices to the program. It is safest +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - - Copyright (C) + - 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. + Copyright (C) - 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. + 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. - 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 + 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 Also add information on how to contact you by electronic and paper mail. @@ -313,10 +314,10 @@ Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may @@ -327,11 +328,12 @@ You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 - , 1 April 1989 - Ty Coon, President of Vice + Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may diff --git a/CREDITS b/CREDITS index 7abe12f0..2842b0c0 100644 --- a/CREDITS +++ b/CREDITS @@ -1,4 +1,4 @@ -MediaWiki 1.16 is a collaborative project released under the +MediaWiki 1.17 is a collaborative project released under the GNU General Public License v2. We would like to recognize the following names for their contribution to the product. @@ -44,6 +44,7 @@ following names for their contribution to the product. * Nathaniel Herman * Nicolas Dumazet * Niklas Laxström +* Philip Tzou * Platonides * Purodha Blissenbach * Raimond Spekking @@ -61,39 +62,52 @@ following names for their contribution to the product. * Thomas Bleher * Tim Starling * Tom Gries +* Trevor Parscal * Victor Vasiliev * Yuri Astrakhan == Patch Contributors == * Agbad * Ahmad Sherif +* Alejandro Mery +* Amalthea * Antonio Ospite * Azliq7 +* Bawolff * Borislav Manolov * Brad Jorsch * Brent G * Brianna Laugher * Carlin +* Carsten Nielsen * Conrad Irwin +* Dan Barrett * Dan Nessett * Daniel Arnold * Denny Vrandecic * Derk-Jan Hartman +* DieBuche * FunPika * Ireas +* Jaska Zedlik * Jeremy Baron * Jidanni * Jimmy Xu +* John Du Hart +* Jonathan Wiltshire * Karun Dambietz * Kim Hyun-Joon +* Lee Worden +* Lejonel * liangent -* Lucas Garczewski * Louperivois +* Lucas Garczewski * Luigi Corsaro * Manuel Menal * Marcin Cieślak * Marcus Buck * Marooned +* Mathias Ertl * Matthew Britton * mati * Max Sikström @@ -108,16 +122,23 @@ following names for their contribution to the product. * Nikolaos S. Karastathis * Olaf Lenz * Paul Copperman +* Paul Oranje * PieRRoMaN +* quietust * René Kijewski * Robert Treat * RockMFR * ST47 * Scott Colcord * Simon Walker +* Solitarius * Stefano Codari * Str4nd * svip +* Tisane +* Umherirrender +* Ville Stadista +* Zachary Hauri == Translators == * Anders Wegge Jakobsen diff --git a/HISTORY b/HISTORY index 05ad1b29..2cc94aad 100644 --- a/HISTORY +++ b/HISTORY @@ -1,43 +1,1009 @@ Change notes from older releases. For current info see RELEASE-NOTES. -== MediaWiki 1.15 == - -=== Changes since 1.15.1 === - -* The installer now includes a check for a data corruption issue with certain - versions of libxml2 2.7 and PHP earlier than 5.2.9, and also for a PHP bug - present in the official release of PHP 5.3.1. -* (bug 20239) MediaWiki:Imagemaxsize does not contain anymore a
tag which - was displayed to the user -* (bug 21150) SQLite no longer raise an error when deleting files -* (bug 20880) Fixed updater failure on SQLite backend +== MediaWiki 1.16 == + +== Changes since 1.16.4 == + +* (bug 28534) Fixed XSS vulnerability for IE 6 clients. This is the third + attempt at fixing bug 28235. +* (bug 28639) Fixed potential privilege escalation when $wgBlockDisablesLogin + is enabled. + +== Changes since 1.16.3 == + +* (bug 28507) The change we made in 1.16.3 to fix bug 28235 (XSS for IE 6 + clients) was not actually sufficient to fix that bug. This release contains + a second attempt, hopefully we have fixed it this time. + +== Changes since 1.16.2 == + +* (bug 28449) Fixed permissions checks in Special:Import which allowed users + without the 'import' permission to import pages from the configured import + sources. +* (bug 28235) Fixed XSS affecting IE 6 and earlier clients only, due to those + browsers looking for a file extension in the query string of the URL, and + ignoring the Content-Type header if one is found. +* (bug 28450) Fixed a CSS validation issue involving escaped comments, which + led to XSS for Internet Explorer clients and privacy loss for other clients. + +== Changes since 1.16.1 == + +* (bug 26642) Fixed incorrect translated namespace due to a regression in the + language converter. +* The interface translations were updated. +* (bug 27093, CVE-2011-0047): Fixed CSS injection vulnerability. +* (bug 27094) Fixed server-side arbitrary script inclusion vulnerability. + Affects Windows servers only. A malicious file with extension ".php" must + exist on the server for the exploit to be effective. + +== Changes since 1.16.0 == + +* (bug 24981) Allow extensions to access SpecialUpload variables again +* (bug 24724) list=allusers was out by 1 (shows total users - 1) +* (bug 24166) Fixed API error when using rvprop=tags +* For wikis using French as a content language, Special:Téléchargement works + again as an alias for Special:Upload. +* (bug 25167) Correctly load JS fixes for IE6 (fixing a regression in 1.16.0) +* (bug 25248) Fixed paraminfo errors in certain API modules. +* The installer now has improved handling for situations where safe_mode is + active or exec() and similar functions are disabled. +* (bug 19593) Specifying --server in now works for all maintenance scripts. +* Fixed $wgLicenseTerms register globals. +* (bug 26561) Fixed clickjacking vulnerabilities by introducing support for + X-Frame-Options. The header value can be configured using $wgBreakFrames and + $wgEditPageFrameOptions. + +== Changes since 1.16 beta 3 == + +* (bug 23769) Disabled HTML 5 client-side form validation. Was introduced in + 1.16 beta 1, but is currently poorly supported by browsers. +* (bug 23175) Re-added window.ta variable for backwards compatibility. +* (bug 23264) Fixed breakage of various command line scripts due to extra line + endings being inserted by Maintenance::output(). +* Fixed HTTP client functionality with safe_mode=On. +* Fixed parser tests broken in 1.16 beta 3. +* For Oracle DB backend: fixed parser tests and table prefix feature. +* (bug 23767) Fixed PHP warning when REQUEST_URI is blank (IIS issue). +* Fixed plural function for Northern Sami (se) +* (bug 23597) Fixed conflicts between ID attributes in the Vector skin and + parser-generated heading IDs. Renamed head, panel, head-base and page-base. +* Disabled $wgHitcounterUpdateFreq>1 feature on SQLite, does not work yet. +* (bug 23465) Don't ignore the predefined destination filename on + Special:Upload after following a red link to a file. +* In SQLite full-text search feature: fixed "move page" feature, was non- + functional. +* (bug 24565) Fixed Cache-Control headers sent from API modules, to protect + user privacy in the case where an attacker can access the wiki through the + same HTTP proxy as a logged-in user. +* Fixed an XSS vulnerability in profileinfo.php for installations with + $wgEnableProfileInfo = true (false by default) +* Fixed a case where an X-Vary-Options header was sent despite $wgUseXVO being + false. Fixed a minor header parsing issue when $wgUseXVO = true. +* Fixed a register_globals arbitrary inclusion vulnerability in + MediaWikiParserTest.php, introduced in 1.16 beta 1. + +== Changes since 1.16 beta 2 == + +* Fixed bugs in the [[Special:Userlogin]] and [[Special:Emailuser]] handling of + invalid usernames. +* Fixed sorting in [[Special:Allmessages]] +* (bug 23113) Fixed title in the show/hide links on diff pages +* (bug 23117) Fixed API rollback, was returning "badtoken" for valid requests +* (bug 23127) Re-added missing $1 parameter to the uploadtext message +* Fixed a bug in the Vector skin where personal tools display behind the logo +* (bug 23139) Fixed a bug in edit conflict resolution, where both textboxes + showed the same text. +* (bug 23115, bug 23124) Fixed various problems with and <h1> elements + in page views and previews when the language converter is enabled. +* (bug 23148) Fixed a local path disclosure vulnerability in ImageMagick image + scaling, which was introduced in 1.16 beta 1. +* Improved error checking on installer. +* (bug 22970) Fixed a JavaScript error in the upload destination conflict + check. +* (bug 23167) Check the watch checkbox by default if the watchcreations + preference is set. +* (bug 23171) Improve IE6 version check to avoid false positives. +* (bug 23176) Fixed upload warning override feature "upload new version", + broken in 1.16 beta 1. +* Fixed regression in unwatch links sent out in notification emails. When the + mailing job was deferred via the job queue, the title was incorrect. +* (bug 23534) Fixed SQL query error in API list=allusers. +* Fixed a bug in uploads for non-JavaScript clients. An empty string was used + as the default destination filename, instead of the source filename as + expected. +* (bug 23371) Fixed CSRF vulnerability in "e-mail me my password", "create + account" and "create by e-mail" features of [[Special:Userlogin]] +* (bug 23687) Fixed XSS vulnerability affecting IE clients only, due to a CSS + validation issue. +* Fixed a DoS vulnerability in ImageMagick image scaling. ImageMagick + expanded wildcard characters "?" and "*" in image filenames, potentially + causing large numbers of images to be scaled in response to a single request. + The fix for this involves breaking the scaling of such image filenames until + ImageMagick 6.6.1-5 or later is deployed, see bug 23361 for more details. +* (bug 23608) Fixed invalid HTML in diff pages. + +=== Changes since 1.16 beta 1 === + +* Fixed errors in maintenance/patchSql.php +* (bug 19627) Fix regression from r57867 where HTMLForm would output + <element classes="foo bar"> rather than <element class="foo bar"> +* Fixed broken "-r" option to maintenance/lag.php +* (bug 23076) Fixed login CSRF vulnerability. Logins now require a token to + be submitted along with the user name and password. + +=== Configuration changes in 1.16 === + +* (bug 18222) $wgMinimalPasswordLength default is now 1 +* $wgSessionHandler can be used to configure session.save_handler +* $wgLocalFileRepo/$wgForeignFileRepos now have a 'fileMode' parameter to + be used when uploading/moving files +* (bug 18761) $wgHiddenPrefs is a new array for specifying preferences not + to be shown to users +* $wgAllowRealName and $wgAllowUserSkin were deprecated in favor of + $wgHiddenPrefs[] = 'realname', but the former are still retained + for backwards-compatibility +* (bug 9257) $wgRCMaxAge now defaults to three months +* $wgDevelopmentWarnings can be set to true to show warnings about deprecated + functions and other potential errors when developing. +* Subpages are now enabled in the MediaWiki namespace by default. This is + mainly a cosmetic change, and does not in any way affect the MessageCache, + which was already effectively treating the namespace as if it had subpages. +* Oracle: maintenance/ora/user.sql script for creating DB user on oracle with + appropriate privileges. Creating this user with web-install page requires + oci8.privileged_connect set to On in php.ini. +* Removed UserrightsChangeableGroups hook introduced in 1.14 +* Added $wgCacheDirectory, to replace $wgFileCacheDirectory, + $wgLocalMessageCache, and any other local caches which need a place to put + files. +* $wgFileCacheDirectory is no longer set to anything by default, and so either + needs to be set explicitly, or $wgCacheDirectory needs to be set instead. +* $wgLocalMessageCache has been removed. Instead, set $wgUseLocalMessageCache + to true +* Removed $wgEnableSerializedMessages and $wgCheckSerialized. Similar + functionality is now available via $wgLocalisationCacheConf. +* $wgMessageCache->addMessages() is deprecated. Messages added via this + interface will not appear in Special:AllMessages. +* $wgRegisterInternalExternals can be used to record external links pointing + to same server +* (bug 19907) $wgCrossSiteAJAXdomains and $wgCrossSiteAJAXdomainExceptions added + to control which external domains may access the API via cross-site AJAX. +* $wgMaintenanceScripts for extensions to add their scripts to the default list +* $wgMemoryLimit has been added, default value '50M' +* $wgExtraRandompageSQL is deprecated, the SpecialRandomGetRandomTitle hook + should be used instead +* (bug 20489) $wgIllegalFileChars added to override the default list of illegal + characters in file names. +* (bug 19646) $wgImgAuthDetails added to display reason access to uploaded file + was denied to users(img_auth only) +* (bug 19646) $wgImgAuthPublicTest added to test to see if img_auth set up + correctly (img_auth only) +* $wgUploadMaintenance added to disable file deletions and restorations during + maintenance +* $wgCapitalLinkOverrides added to configure per-namespace capitalization +* (bug 21172) $wgSorbsUrl can now be an array with multiple DNSBL and renamed + to $wgDnsBlacklistUrls (backward compatibility kept) +* $wgEnableHtmlDiff has been removed +* (bug 3340) $wgBlockCIDRLimit added (default: 16) to configure the low end of + CIDR ranges for blocking +* $wgUseInstantCommons added for quick and easy enabling of Commons as a remote + file repository +* $wgDBAhandler added to choose a DBA handler when using CACHE_DBA +* $wgPreviewOnOpenNamespaces for extensions that create namespaces that behave + similarly to the category namespace. +* $wgEnableSorbs renamed to $wgDnsBlacklistUrls ($wgEnableSorbs kept for + backward compatibility) +* $wgUploadNavigationUrl now also affects images inline images that do not + exist. In that case the URL will get (?|&)wpDestFile=<filename> appended to + it as appropriate. +* If $wgLocaltimezone is null, use the server's timezone as the default for + signatures. This was always the behaviour documented in DefaultSettings.php + but has not been the actual behaviour for some time: instead, UTC was used + by default. +* Added $wgExtensionAssetsPath, to decouple assets serving from $wgScriptPath. + If not specified it will default to $wgScriptPath/extensions +* Added $wgCountTotalSearchHits to make search UI display total number of hits + with some search engines. +* Added $wgAdvertisedFeedTypes to decide what feed types (RSS, Atom, both, or + neither) MediaWiki advertises. Default is array( 'atom' ), so RSS is no + longer advertised by default (but it still works). +* Added $wgMemCachedTimeout, controls how long to wait for data from the + memcached servers. +* New configuration variables $wgDebugTimestamps and $wgDebugPrintHttpHeaders + for controlling debug output. +* New $wgBlockDisablesLogin when set to true disallows blocked users from + logging in. +* (bug 8790) Metadata edition ($wgUseMetadataEdit) has been moved to a separate + extension "MetadataEdit". + +=== New features in 1.16 === + +* Add CSS defintion of the 'wikitable' class to shared.css +* (bug 17163) Added MediaWiki:Talkpageheader which will be displayed when + viewing talk pages +* Superfluous border="0" removed from images +* Added new hook 'MessageCacheReplace' into MessageCache.php. For instance + to allow extensions to update caches in similar way as MediaWiki invalidates + a cached MonoBook sidebar +* Special:AllPages: Move hardcoded styles from code to CSS +* (bug 18529) New hook: SoftwareInfo for adding information about the software + to Special:Version +* Added $wgExtPGAlteredFields to allow extensions to easily alter the data + type of columns when using the Postgres backend. +* (bug 16950) Show move log when viewing/creating a deleted page +* (bug 18242) Show the Subversion revision number per extensions in + Special:Version +* (bug 18420) Missing file revisions are handled gracefully now +* (bug 9219) Auth plugins can control editing RealName/Email/Nick preferences +* (bug 18466) Add note or warning when overruling a move (semi-)protection +* (bug 18342) insertTags works in edit summary box +* (bug 18411) The upload form also checks post_max_size +* Watchlist now has a specialized <div> tag that contains a unique class for + each page +* Added Minguo calendar support for the Taiwan Chinese language +* Database: unionQueries function to be used for UNION sql construction, so + it can be overloaded on DB abstraction level for DB specific functionality +* (bug 18849) Implement Japanese and North Korean calendars +* (bug 5755) Introduce {{CURRENTMONTH1}} and {{LOCALMONTH1}} to display the + month number without the leading zero +* (bug 13456) categoriespagetext supports PLURAL +* (bug 18860) Blocks of IPs affecting registered users can now block email +* (bug 17093) Date and time are separate parameters in Special:BlockList +* (bug 11484) Added ISO speed rating to default collapsed EXIF metadata view +* (bug 14866) Messages 'recentchangeslinked-toolbox' and + 'recentchangeslinked-toolbox' were added to allow more fine grained + customisation of the user interface +* DISPLAYTITLE now accepts a limited amount of wiki markup (the single-quote + items) +* Special:Search now could search terms in all variant-forms. ONLY apply on + wikis enabled LanguageConverter. +* Add autopromote condition APCOND_BLOCKED to autopromote blocked users to + various user groups. +* Add $wgRevokePermissions as a means of restricting a group's rights. The + syntax is identical to $wgGroupPermissions, but users in these groups will + have these rights stripped from them. +* Added a PHP port of CDB (constant database), for improved local caching when + the DBA extension is not available. +* Introduced a new system for localisation caching. The system is based around + fast fetches of individual messages, minimising memory overhead and startup + time in the typical case. The database backend will be used by default, but + set $wgCacheDirectory to get a faster CDB-based implementation. +* Expanded the number of variables which can be set in the extension messages + files. +* Added a feature to allow per-article process pool size control for the parsing + task, to limit resource usage when the cache for a heavily-viewed article is + invalidated. Requires an external daemon. +* (bug 19576) Moved the id attribues from the anchors accompanying section + headers to the <span class="mw-headline"> elements within the section headers, + removing the redundant anchor elements. +* Parser::setFunctionTagHook now can be used to add a new tag which is parsed at + preprocesor level. +* Added $wgShowArchiveThumbnails, allowing sysadmins to disable thumbnail + display for old versions of images. +* In watchlists and Special:RecentChanges, the difference in page size now + appears in dark green if bytes were added and dark red if bytes were removed. +* Added FSRepo configuration properties thumbUrl and thumbDir, to allow the + thumbnails to be stored in a separate location to the source images. +* If config/ directory is not executable, the command to make it executable + now asks the user to cd to the correct directory +* Add experimental new external authentication framework, ExternalAuth +* (bug 18768) Remove AdminSettings requirements. Maintenance environment + will still load it if it exists, but it's not required for anything +* (bug 19900) The "listgrouprights-key" message is now wrapped in a div with + class "mw-listgrouprights-key" +* (bug 471) Allow RSS feeds for watchlist, using an opt-in security token +* (bug 10812) Interwiki links can have names and descriptions, fetched from + message 'interwiki-desc-PREFIX', not really used anywhere yet though +* (bug 9691) Add type (signup or login) parameter to + AuthPlugin::ModifyUITemplate() +* (bug 14454) "Member of group(s)" in Special:Preferences causes language + difficulties +* (bug 16697) Unicode combining characters are difficult to edit in some + browsers +* Parser test supports uploading results to remote CodeReview instance +* (bug 20013) Added CSS class "mw-version-ext-version" is wrapped on the + extension version in Special:Version +* (bug 20014) Added CSS class "mw-listgrouprights-right-name" is wrapped on the + right name in Special:ListGroupRights +* (bug 12920) New CoreParserFunction {{nse:...}} as an url-friendly equivalent + to {{ns:...}} +* (bug 16322) Allow maintenance scripts to accept DB user/pass over input or + params +* (bug 18566) Maintenance script to un/protect pages +* (bug 671) The HTML <abbr> tag is now permitted. +* RecentChanges now has a legend to explain what the Nmb! flags mean, and the + flags have tooltips. +* (bug 15209) New hook BeforeInitialize called after everything has been setup + but before Mediawiki::performRequestForTitle() +* wgMainPageTitle variable now available to JavaScript code to identify the main + page link, so it doesn't have to be extracted from the link URLs. +* (bug 16836) Display preview of signature in user preferences and describe its + use +* The default output format is now HTML 5 instead of XHTML 1.0 Transitional. + This can be disabled by setting $wgHtml5 = false;. Specific features enabled + if HTML 5 is used: +** Some extra inputs will be autofocused, in supporting browsers. +** The summary attribute has been removed from tables of contents. summary is + obsolete in HTML 5 and wasn't useful here anyway. +** Unnecessary type="" attribute removed for CSS and JS. +** If $wgWellFormedXml is set to false, some bytes will be shaved off of HTML + output by omitting some things like quotation marks where HTML 5 allows. +** (bug 16921) maxlength enabled for page move comments +* The description message in $wgExtensionCredits can be an array with parameters +* New hook SpecialRandomGetRandomTitle allows extensions to modify the selection + criteria used by Special:Random and subclasses, or substitute a custom result, + deprecating the $wgExtraRandompageSQL config variable +* (bug 20318) Distinct CSS classes for ISBN/RFC/PMID special links added +* (bug 20404) Custom fields in the user creation form template can now have + detail labels in prefsectiontip divs. +* MakeSysop and MakeBot are now aliases for Special:UserRights +* IndexPager->mLimitsShown can now be an associative array of limit => text-to- + display-in-limit-form. +* (bug 18880) LogEventsList::showLogExtract() can now take a string-by-reference + and add its HTML to it, rather than having to go straight to $wgOut. +* Added $wgShowDBErrorBacktrace, to allow users to easily gather backtraces for + database connection and query errors. +* Show change block / unblock link on Special:Contributions if user is blocked +* Display note on Special:Contributions if the user is blocked, and provide an + excerpt from the block log. +* (bug 19646) New hook: ImgAuthBeforeStream for tests and functionality before + file is streamed to user, but only when using img_auth +* Note on non-existing user and user talk pages if user does not exist +* New hook ShowMissingArticle so extensions can modify the output for + non-existent pages. +* Admins could disable some variants using $wgDisabledVariants now. ONLY apply + on wikis enabled LanguageConverter. +* (bug 16310) Credits page now lists IP addresses rather than saying the number + of anonymous users that edited the page +* New permission 'sendemail' added. Default right for all registered users. Can + for example be used to prevent new accounts from sending spam. +* (bug 16979) Tracking categories for __INDEX__ and __NOINDEX__ +* Two new hooks, ConfirmEmailComplete and InvalidateEmailComplete, which are + called after a user's email has been successfully confirmed or invalidated. +* (bug 19741) Moved the XCF files out of the main MediaWiki distribution, for + a smaller subversion checkout. +* (bug 13750) First letter capitalization can now be a per-namespace setting +* (bug 21073) "User does not exist" message no longer displayed on sub-sub-pages + of existing users +* (bug 21095) Tracking categories produced by the parser (expensive parser + function limit exceeded, __NOINDEX__ tracking, etc) can now be disabled by + setting the system message ([[MediaWiki:expensive-parserfunction-category]] + etc) to "-". +* Added maintenance script sqlite.php for SQLite-specific maintenance tasks. +* Rewrote Special:Upload to allow easier extension. +* Upload errors that can be solved by changing the filename now do not require + reuploading. +* Added $wgRateLimitsExcludedIPs, to allow specific IPs to be whitelisted from + rate limits. +* (bug 21222) When $wgUseTeX is not enabled, <math> is no longer registered with + the parser so extensions are free to implement their own <math> tag +* (bug 21047) Wrap 'cannotdelete' into a div with the generic 'error' class and + an own 'mw-error-cannotdelete' class +* New hook AbortNewAccountAuto, called before account creation from AuthPlugin- + or ExtUser-driven requests. +* (bug 3480) The warning saying that the page has a history when deleting it now + contains the number of revisions in the history +* $wgStylePath and $wgLogo are now set in the default LocalSettings.php file. +* (bug 20186) Allow filtering history for revision deletion. +* New hook OtherBlockLogLink, called in Special:IPBlockList and Special:Block + to show links to block logs of other blocking extensions, i.e. GlobalBlocking +* Added search capabilities to SQLite backend +* rebuildtextindex.php maintenance script now supports databases other than + MySQL * upgrade1_5.php now requires to be run --update option to prevent confusion -* Fixed a CSS validation issue which allowed external images to be included - into wikis where that is disallowed by configuration. -* Fixed a data leakage vulnerability for private wikis using img_auth.php or - similar image access authentication schemes. Check user permissions before - streaming out scaled images from thumb.php. - -=== Changes since 1.15.0 === +* (bug 17662) Customizable default preload/editintro for new sections in the + respective addsection-preload and addsection-editintro messages +* Added maintenance script checkSyntax.php that checks for PHP syntax errors + and common coding mistakes +* Updated Unicode normalization tables +* (bug 21604) Spellcheck attribute for editsummary +* New wgCategories JavaScript global variable for userscripts. +* (bug 20717) Added checkboxes to hide users with bot and/or sysop group + membership in SpecialActiveusers +* Allow \pagecolor and \definecolor in texvc +* $wgTexvcBackgroundColor contains background color for texvc call +* (bug 21574) Redirects can now have "303 See Other" HTTP status +* EditPage refactored to allow extensions to derive new edit modes much easier. +* (bug 21826) Subsections of Special:Version now also have anchors +* (bug 19791) Add URL of file source as comment to thumbs (for ImageMagick) +* (bug 21946) Sorted wikitables do not properly handle minus signs +* (bug 18885) Red links for media files do not support shared repositories +* Added $wgFixArabicUnicode, to convert deprecated presentation forms in + Arabic text to their modern equivalents, and $wgFixMalayalamUnicode, to + convert ZWJ-based chillu sequences in Malayalam text to their Unicode 5.1 + equivalents. +* (bug 22051) Returing false in SpecialContributionsBeforeMainOutput hook now + stops normal output +* Send new password e-mail in users preference language +* LanguageConverter now support nested using of manual convert syntax like + "-{-{}-}-" +* Upload license preview now uses the API instead of action=ajax +* (bug 7346) Add <guid> to RSS to avoid duplicates +* (bug 19996) Added new hooks for Special:Search, which allow to further + restrict/expand it. +* (bug 21936) When a revision has been patrolled, there's now a link back to the + article +* (bug 22315) SpecialRecentChangesQuery hook now pass $query_options and checks + the return value +* Separate unit test suites under t/ and tests/ were merged and moved to + maintenance/tests/. +* importImages.php maintenance script can now use the original uploader and +comment from another wiki. +* Support for Turck MMCache was removed +* (bug 14592) Warn users when they try to move their user page that their + account will not be renamed +* Show block log on non-existing user (talk) pages of currently blocked users + +=== Bug fixes in 1.16 === + +* (bug 18031) Make namespace selector on Special:Export remember the previous + selection +* The svn-version version numbers on Special:Version have been removed +* (bug 17374) Special:Export no longer exports two copies of the same page +* (bug 18190) Proper parsing in MediaWiki:Sharedupload message +* (bug 17617) HTML cleanup for ImagePage +* (bug 17964) namespaceDupes.php no longer fails on an empty interwiki table +* Improved error handling for image moving +* (bug 17974) On Special:SpecialPages, restricted special pages are now marked + with <strong> tags, helps with text-based browsers +* (bug 18259) Special:DeletedContributions now also uses + MediaWiki:Sp-contributions-logs for the link to Special:Log +* Don't add empty title="" attributes to links to anchors on the current page +* (bug 18291) rebuildrecentchanges.php failed to add deletion log entries +* (bug 18304) rebuildrecentchanges.php got size changes wrong +* (bug 18170) Fixed a PHP warning in Parser::preSaveTransform() in PHP 5.3 +* (bug 18289) Database connection error page now returns correct HTML +* "successbox", "errorbox" and related CSS classes are now available in all + skins +* (bug 18316) Removed superfluous name="fulltext" from Special:Search +* (bug 18331) MediaWiki:Undelete-revision can now have wikitext +* The "noautoblock" flag is no longer displayed in the block log when blocking + an IP address +* (bug 18009) $wgHooks and $wgExtensionFunctions now support closures +* (bug 17948) Maintenance scripts now exit(0) or exit(1) as appropriate +* (bug 18377) Time in Enhanced ChangesList lacking localisation +* (bug 12998) Allow <sup>, <sub>, etc. in DISPLAYTITLE +* (bug 1553) Lowercase navigation headings in German +* (bug 7830) Pending transactions failed to commit on loginToUse() error +* (bug 11613) session.save_handler being over-ridden +* (bug 11381) session.save_handler being set twice (causes error) +* (bug 17835) ForeignAPIRepo throwing error on first page load for file +* (bug 18115) ForeignAPIRepo cache isn't working +* Fixed a bug caused by LanguageConverter.php, which brings an abnormal '}-' + after some parsed math syntax. +* (bug 18441) rebuildrecentchanges.inc no longer ignores $wgLogRestrictions +* (bug 18317) Bolded selections in 1 | 3 | etc days on RecentChanges now use + <strong> instead of hardcoded styles +* (bug 18449) Fixed items number per column on category pages when the total is + divisible by 3 +* (bug 18121) maintenance/deleteArchivedRevisions.php no longer deletes + revisions when --delete is not passed +* (bug 13172) GPS coordinates in image Exif data are now actually displayed +* Overhaul of preferences system, includes the following bug fixes: +** (bug 5363) Changes to default preferences now impact registered users. +** (bug 14806) Hook to enable putting preferences in existing tabs. +** (bug 17191) Registration date now listed on preferences page. +** The user_properties table (now used for storing preferences) has been added + to $wgSharedTables. +** Note that this change will break some extensions which have not been adapted + for it. +* (bug 17020) Adding fallback encodings for Traditional and Simplified Chinese + languages while the the text is typed as URLs. +* (bug 17614) Prev / Next links are not shown if all results are shown +* (bug 18207) Strange spacing before [[irc:...]] links +* Removed float from the user login form in RTL interface - caused display + problems in FF2 +* (bug 15008) Redirect images are now subject to Bad image list rules +* (bug 6802) profileinfo.php now also work on other database servers than MySQL +* (bug 16925) Diffs no longer fail when $wgExternalDiffEngine is set to + 'wikidiff' or 'wikidiff2' but extension is not installed +* (bug 18326) Chmod errors in file repos have been hidden +* (bug 18718) Comma after a } create a error in IE +* (bug 18716) Removed redundant class in Modern skin CSS for category links and + tweaked spacing. +* (bug 18656) Use proper directory separators in wfMkdirParents() +* (bug 18549) Make Special:Blockip respect $wgEnableUserEmail and + $wgSysopEmailBans +* (bug 16912) Tooltips on images with link= disappear +* (bug 18389) Localise numbers in EXIF data +* (bug 18522) Wrap MediaWiki:Protect-cascadeon in a div for identification +* (bug 18438) Tweak HTML for preview bar for consistency and accessibility +* (bug 18432) Updated documentation for dumpBackup.php +* Fix array logic in Sanitizer::removeHTMLtags so that it doesn't strip good + tags that were redundantly defined. +* (bug 14118) SpecialPage::getTitleFor does not return a localised name +* (bug 18698) Renaming non entry point maintenance scripts from .inc.php to + .inc +* Deprecated methods Title::getInterwikiLink, Title::userCanCreate(), + Title::userCanEdit() and Title::userCanMove() have been removed +* Only show upload links on file description if $wgEnableUploads = true + and user can upload +* Don't say "You need to log in to upload/move", because it's possible that + uploading/moving is disabled for registered users as well (e.g. only sysops) +* (bug 18943) Handle invalid titles gracefully at Special:Mostlinked +* (bug 8873) Enable variant conversion in text on 'alt' and 'title' attributes +* (bug 10837) Introducing the StubUserVariant class to determine the variant + variable instead of using this to overrules the user language preference. +* (bug 19014) If user had deletedhistory right, but not undeleted right, then + show "view" instead of "view/restore" on logs. +* (bug 19017) TOC level calculation error in an odd case +* (bug 18999) CSS update for RTL interwiki links +* (bug 18925) history.js removes class names of list elements on initialization +* Multiple whitespace in TOC anchors is now stripped, for consistency with the + link from the edit comment +* (bug 19112) Preferences now respects $wgUseExternalEditor +* (bug 18173) MediaWiki now fails when unable to determine a client IP +* (bug 19170) Special:Version should follow the content language direction +* (bug 19160) maintenance/purgeOldText.inc is now compatible with PostgreSQL +* Fixed performance regression in "bad image list" feature +* Show user preference 'Use live preview' if $wgLivePreview is enabled only +* (bug 17014) Blocked users can no longer use Special:UserRights unless they + can add/remove *all* groups (have 'userrights' permission). +* (bug 19294) Always show Sp-contributions-footer(-anon) +* Attempts to restrict reading of pages while anonymous viewing is allowed + via extensions not using the userCan hook and via $wgRevokePermissions now + work. +* (bug 8445) Multiple-character search terms are now handled properly for + Chinese +* (bug 19450) Use formatNum for "Number of edits" in Special:Preferences +* (bug 11242) Check for MySQL storage engines during installation now checks + whether the engines are actually available +* (bug 19390) Omit the "printable version" link on the printable version +* (bug 18394) img_auth.php now respects userCan +* (bug 19509) Uploading to a file named '0' previously treated it as null input + and attempted to upload with the source name. Now warns about not having an + extension (since 0.ext is perfectly valid) +* (bug 19468) Enotif preferences are now only displayed when they are turned on +* (bug 19442) Show/hide options on watchlist only work once +* (bug 19602) PubMed Magic links now use updated NIH url +* (bug 19637) externallinks have links to self +* Don't load Opera 9.5 RTL fixes for Opera 9.6 +* Remove five-year-old KHTMLFixes.css, which is unlikely to be relevant anymore + and was causing problems. +* Removed repetition of URIs in the title attributes of external links. +* (bug 19693) User name is now escaped in "Contributions for ..." link on + Special:BlockIP +* (bug 19571) Override buildConcat for SQLite. +* Log in and log out links no longer return to page view when clicked from + history view, edit page, or something similar +* (bug 19513) RTL fixes for new Search UI +* (bug 16497) Special:Allmessages is paginated +* (bug 18708) CSS plainlinks class now available to all skins +* (bug 19590) Database error messages no longer have "MySQL" hardcoded as the + database type +* (bug 19759) successbox on Special:Preferences now correctly aligned on + standard, nostalgia and cologneblue skin +* (bug 19814) interwiki links from file links ([[File:Foo.jpg|link=de:Test]]) + are no longer recorded in the pagelinks table +* (bug 19784) date option "ISO 8601" produced illegal id +* (bug 19761) Removed autogenerated <meta keywords> tag with link data. + Keyword set was not useful, and is ignored by modern search engines anway. +* (bug 19827) Special:SpecialPages title is "Upload file +* (bug 19355) Added .xhtml, .xht to upload file extension blacklist +* (bug 19287) Workaround for lag on history page in Firefox 3.5 +* (bug 19564) Updated docs/hooks.txt +* (bug 18751) Fix for buggage in profiling setup for some extensions on PHP 5.1 +* (bug 17139) ts_resortTable inconsistent trimming makes date sorting fragile +* (bug 19445) Change oldimage table to use ON UPDATE CASCADE for FK to image + table. +* (bug 14080) Short notation links to subpages didn't work in edit summaries +* (bug 17374) Special:Export no longer exports multiple copies of pages +* (bug 19818) Edits to user CSS/JS subpages can now be marked as patrolled by + users who can't edit them +* (bug 19839) Comments in log items are no more double escaped +* (bug 18161) Fix inconsistent separators in watchlist link toolbars with + "enhanced recent changes" +* (bug 16877) Moving a page over a redirect no longer leaves an orphan entry in + the recentchanges table +* (bug 16009) Limit selection forms based on Pager now links to the correct page + when using long urls +* The display of the language list on the preferences is more comply with the + BCP 47 standards. +* (bug 19849) Custom X-Vary-Options header now disabled unless $wgUseXVO is set +* (bug 19301) Duplicates entries in $wgAddGroups, $wgRemoveGroups, + $wgGroupsAddToSelf and $wgGroupsRemoveFromSelf are no more displayed on + Special:ListGroupRights +* (bug 18799) Special:Userlogin now handles correctly the returnto parameter + to not link back to Special:Userlogout when user's language isn't the same as + content's language +* (bug 19479) Show proper error message when unable to connect to PostgreSQL + database with username/password in MediaWiki's setup +* (bugs 18407, 18409) Special:Upload is now listed on Special:Specialpages only + if uploads are enabled and the user can access it +* (bug 17988) Spaces before [[Category:]] links are no longer ignored +* (bug 19957) All known-failing tests now marked disabled; added --run-disabled + option to parser test suite to run disabled tests if desired. +* (bug 16311) Make recent change flags (n/m/b) <abbr>s instead of <span>s +* (bug 15680) Split the edit tip message of user CSS/JS subpage into + "usercssyoucanpreview" and "userjsyoucanpreview" respectively. +* (bug 12110) Split the rights for editing users' CSS/JS subpage from + "editusercssjs" into "editusercss" and edituserjs" respectively. +* (bug 19394) RecentChanges feed URLs for log items with no revisions + (eg Newuser, Userrights) are no longer broken +* (bug 17395) Remote file descriptions use user language ($wgLang), not wiki + language ($wgContLang) +* (bug 11867) Lock error on redirect table when running orphans.php +* (bug 18930) initStats.php now refreshes active users count +* (bug 18699) Using the nosummary URL option no longer triggers the "You have + not provided a summary" warning for those who activated it in their + preferences +* (bug 18855) commandLine.inc and Maintenance.php are now properly included + using the full path +* (bug 18497) Fixed broken style sheets in Opera fullscreen mode +* (bug 16084) Default memory limit has be increased to 50M, see $wgMemoryLimit +* (bug 17864/19519) Added proper input normalization in Special:UserRights +* (bug 20086) Add Hook to add extra statistics at the end of Special:Statistics +* (bug 19289) importDump.php can now handle bzip2 and 7zip +* (bug 20131) Fixed a PHP notice for users having the "rollback" right on + Special:RecentChangesLinked +* Do not transform EXIF fields with pure text to avoid results like + foo,bar@example,com +* (bug 20176) Fix login/logout links in skin CologneBlue +* (bug 20203) "Powered by Mediawiki" now has height/width on image tag +* (bug 20273) Fix broken output when no pages are found in the content + namespaces +* (bug 20265) Make AncientPages and UnusedFiles work on SQLite +* Fixed XSS vulnerability for Internet Explorer clients (only pre-release + versions of MediaWiki were affected). +* (bug 14817) Moving a page to a subpage of itself moves it twice +* (bug 20289) $wgMaximumMovedPages should only count pages actually moved +* (bug 15248) Non-breaking spaces and certain other Unicode space characters + are now normalized to ordinary spaces in titles; if your wiki has existing + titles with such characters, run cleanupTitles.php and/or cleanupImages.php +* (bug 11143) Links containing invalid UTF-8 percent-code sequences are now + cleanly disabled instead of breaking parsing entirely on PHP 5.2. +* (bug 20296) Fixed an PHP warning in Language::getMagic() in PHP 5.3 +* (bug 20358) Unprotect tab was missing accesskey; now same as protect tab. +* (bug 20317) Cleaned up default main page link accesskey settings +* (bug 20362) Special:Statistics now produces valid HTML when view counters are + enabled +* (bug 19857) maintenance/deleteRevision.php on last revision no longer breaks + target page +* (bug 20365) Page name with with c/g/h/j/s/u + x are now correctly handled in + Special:MovePage with Esperanto as content language +* (bug 20364) Fixed regression in GIF metadata loading +* (bug 20299) MediaWiki:Move-subpages and MediaWiki:Move-talk-subpages can now + use wikitext +* (bug 15475) DatabaseBase::setFlag(), DatabaseBase::clearFlag() and + DatabaseBase::getFlag() now have documentation +* (bug 19966) MediaWiki:License-header is now used for the licensing header in + the file description page instead of MediaWiki:License +* (bug 20380) Links to history/deleted edits at the top of + Special:RevisionDelete are no more displayed when when doing log suppression +* (bug 8143) Localised parser function names are now correctly case insensitive + if they contain non-ASCII characters +* (bug 19055) maintenance/rebuildrecentchanges.php now purges + Special:Recentchanges's RSS and Atom feed cache +* The installer will now try to bypass PHP's max_execution_time +* (bug 20260) SQLite no longer tries to automatically create the database at + execution time, this now happens only at install time; if it is not available + at script execution, it now throws an exception +* Fixed EditFilterMerged hook so the hookError parameter serves a purpose + (analogous to EditFilter hook) +* (bug 2257) Tag extensions can expand template parameters provided to the tag, + by using a new parameter added to the recursiveTagParse function +* (bug 14900) __INDEX__ and __NOINDEX__ no longer override site config set in + $wgArticleRobotPolicies. +* (bug 20466) Hidden categories are no more displayed when printing +* (bug 20446) When changing user rights with User@remotewiki and remotewiki is + the local wiki, the user is now treated as the local user +* (bug 20494) OutputPage::getArticleBodyOnly() no longer requires an useless + argument +* (bug 20136) Protection form JavaScript now synchronizes the expiry boxes on + any change, in addition to onkeyup. +* Don't link to "edit this page" on MediaWiki:Noarticletext if user is not + allowed to create page. Done via new message + MediaWiki:Noarticletext-nopermission +* Improved compatibility between the Vector skin and addPortletLink() from + wikibits.js: empty portlets are now present but hidden, adding an element to a + portlet unhides it +* (bug 19531) addPortletLink() now wraps inserted labels in a <span> element to + be compatible with the CSS for the Vector skin +* (bug 20578) Wrong localized image metadata - duplicated string? +* (bug 20556) Stub threshold's "other" <input> in Special:Preferences now has a + correct type="text" parameter +* (bug 482) Don't include TOC in the printable version if it has been hidden +* Adjust the time according to the user configuration on Special:Revisiondelete +* (bug 20624) Installation no longer allows "qqq" as the chosen language +* (bug 20634) The installer-created database user will now have all rights on + the database so that upgrades will go more smoothly. +* (bug 18180) Special:Export ignores limit, dir, offset parameters +* User::getBlockedStatus() works for all kinds of user objects and doesn't + assume the user object is equal to the current-user object ($wgUser) +* (bug 20517) Cancel link from edit page now returns to the old version when + editing an old version +* (bug 16902) Installer no longer shows warnings when exec() has been disabled + by disable_functions +* (bug 20726) Title::getLatestRevID's documentation now says that the function + returns false if the page doesn't exist +* (bug 20751) ForeignApiRepo now urldecodes filenames when saving to local cache +* (bug 20730) Fix to Special:Version ViewVC link for branch checkouts +* (bug 20353) wfShellExec() was adding extra quotes on Windows Vista, causing + command line scripts to fail +* (bug 20702) Parser functions can now be used correctly in + MediaWiki:Missing-article +* (bug 14117) "redirected from" is now also shown on foreign file redirects +* (bug 17747) Only display thumbnail column in file history if the image can + be rendered. +* (bug 3421) Live preview no longer breaks user CSS/JS previews +* (bug 11264) The file logo on a file description page for documents (PDF, ...) + now links to the file rather than the file description page +* Password fields built with HTMLForm now still have the type="password" + attribute if $wgHtml5=false. +* (bug 20836) Preload now works for MediaWiki namespace +* (bug 20885) Search box no longer suggests unavailable special pages +* (bug 20948) "Create this page" on Special:Search is no longer displayed when + searching for special pages +* (bug 20524) Hideuser: Show nice error when trying to block hidden user without + hideuser right +* (bug 21026) Fixed file redirects on shared repos on non-English client wikis +* (bug 21030) Fixed schema choices from being overwritten by defining unique + field names per driver. +* (bug 21115) wgCanonicalSpecialPageName javascript variable is now always + false on non-special pages +* (bug 21113) "Other statistics" header on Special:Statistics is no more + displayed when there isn't any entry in it +* (bug 21114) Special:Contributions no longer shows diff links for new + revisions +* (bug 21116) MediaWiki:Templatesused, MediaWiki:Templatesusedpreview and + MediaWiki:Templatesusedsection now support plural +* (bug 21079) There is no more line wrapping between label and field in + Special:Log +* (bug 20256) Fixed SQL errors on Special:Recentchanges and + Special:Recentchangeslinked on SQLite backend +* (bug 20880) Fixed updater failure on SQLite backend +* (bug 21182) Fixed invalid HTML in Special:Listgrouprights +* (bug 20242) Installer no longer promts for user credentials for SQLite + databases +* (bug 20911) Installer failed to create a SQLite database +* (bug 20847) Deprecated deprecated akeytt() removed in wikibits.js leaving + dummy +* (bug 21161) Changing $wgCacheEpoch now always invalidates file cache +* (bug 20268) Fixed row count estimation on SQLite backend +* (bug 20275) Fixed LIKE queries on SQLite backend +* (bug 21234) Moving subpages of titles containing \\ now works properly +* (bug 21006) maintenance/updateArticleCount.php now works again on PostgreSQL +* (bug 19319) Add activeusers-intro message at top of SpecialActiveUsers page +* (bug 21255) Fixed hostname construction for DNSBL checking +* (bug 18019) Users are now warned when moving a file to a name in use on a + shared repository and only users with the 'reupload-shared' permission can + complete the move. +* (bug 18909) Add missing Postgres INSERT SELECT wrapper +* User::isValidPassword now only returns boolean results, + User::getPasswordValidity can be used to get an error message string +* The error message shown in Special:ChangePassword now parses wiki markup +* (bug 19859) Removed experimental HTMLDiff feature +* Removed section edit links in edit conflict form +* Allow SpecialActiveusers to work on non-MySQL databases +* (bug 6579) Fixed protecting images from uploading only +* (bug 18609) Search index was empty for some pages +* (bug 13453) rebuildrecentchanges maintenance script works on PG again +* (bug 16583) Reduce false positives when checking for PHP (on upload, etc.) +* (bug 20112) Bitrotted tests in the t/ directory were failing. +* (bug 21470) MediaWiki:Sp-contributions-explain is now wrapped in a <p> with + id "mw-sp-contributions-explain" +* (bug 19159) Fixed \overleftrightarrow in texvc +* (bug 19391) Fix caching for Recent ChangesFeed. +* (bug 21455) Fixed "Watch this page" checkbox appearing on some special pages + even to non-logged in users +* (bug 21551) Rewrote the Squid purge HTTP client to provide a more robust and + general implementation of HTTP, allowing it to purge non-Squid caches such as + Varnish. +* Fixed corruption of long UDP debug log messages by using socket_sendto() + instead of fsockopen() with fwrite(). +* (bug 16884) Fixed feed links in sidebar not complying with URL parameters + of the displayed page +* (bug 21403) memcached class renamed to MWMemecached to avoid conflict with + PHP's memcached extension +* (bug 21650) Both calls to SkinTemplateTabs hook are now compatible +* (bug 21672) Add missing Accept-Language to both Vary and XVO headers +* (bug 21679) "Edit block reasons" link at the bottom of Special:Blockip is now + only displayed to the users that have "editinterface" right +* (bug 21740) Attempting to protect a page that doesn't exist (salting) returns + "unknown error" +* (bug 18762) both redirects and links get fixed one after another if + redirects-only switch is not present +* (bug 20159) thumbnails rerendered if older that $wgThumbnailEpoch +* Fixed a bug which in some situations causes the job queue to grow forever, + due to an infinite loop of job requeues. +* (bug 21523) File that can have multiple pages (djvu, pdf, ...) no longer have + the page selector when they have only one page +* (bug 21559) "logempty" message is now wrapped in a div with class + "mw-warning-logempty" when used in log extract +* (bug 20549) Parser tests were broken on SQLite backend +* (bug 21776) Interwiki urls like http://en.wikibooks.org/wiki/cs: should give + a redirect instead of a baderror. +* (bug 21803) Special:MyContributions now keeps the query string parameters +* Redirecting special pages now keep query string paramters set to "0" (e.g. + for namespace) +* (bug 20765) Special:ListGroupRights no longer misses addables and removables + groups if there are duplicate entries +* (bug 21814) Message shown when rolling back an edit with a deleted username + now shows '(username deleted)' instead of broken user tool links +* (bug 21536) Fixed JavaScript error on Special:Search caused by an incorrect ID +* (bug 21535) RecentChanges RSS feed now always recognises the namespace filter, + previously it sometimes didn't due to caching. +* (bug 20388) ProfilerSimpleText no longer outputs comment on action=raw +* refreshLinks.php now purges orphaned redirect table rows +* (bug 2971) Swap links of hist & diff location on Special:Contributions for + consistency with RC/WL +* (bug 21986) Special page names were are now capitalized by content language +* If two log type have the same description, they're now both displayed in the + type selector on Special:Log +* (bug 20115) Special:Userlogin title says "Log in / create account" even if the + user can't create an account +* (bug 2658) Don't attempt to set the TZ environment variable. +* (bug 9794) User rights log entries for foreign user now links to the foreign + user's page if possible +* (bug 14717) Don't load nonexistent CSS fix files for non-Monobook skins +* (bug 22034) Use wfClientAcceptsGzip() in wfGzipHandler instead of + reimplementing it. +* (bug 19226) First line renders differently on many UI messages. +* (bug 21303) Comments are no longer stripped from MediaWiki:Common.js and + skin-specific JS pages +* (bug 5061) Use the more precise thumbcaption thumbimage and thumbinner classes + for image divs. +* (bug 22096) IE50Fixes.css and IE55Fixes.css have been dropped from the Monobook + and Chick skins +* Fixed bug involving unclosed "-{" markup in the language converter +* (bug 21870) No longer include Google logo from an external server on wiki error. +* (bug 22181) Do not truncate if the ellipsis actually make the string longer +* (bug 16039) Text disappearing after a bad image +* (bug 18784) Internal links like [[File:Foo|caption]] should read 'caption', + not 'File:Foo' when Foo is not an image +* (bug 21518) Special:UserRights no longer displays the user name box for users + that can only change their rights +* (bug 21593) Special:UserRights now lists automatic groups membership +* (bug 22364) Setting $wgUseExternalEditor to false no longer hides the reupload + link from file pages +* Fix bug introduced in MediaWiki 1.12: The author field in + $wgExtensionCredits is no longer sorted with sort() but rather used + as it appears in extensions as was the case before r30117 where it + was unintentionally sorted along with other fields. +* (bug 19334) Textarea no longer jumps when editing longer articles in IE8 +* Truncate summary of page moves in revision comment field to avoid broken + multibyte characters +* (bug 22540) ForeignApiRepos no longer try to store thumbnails that don't exist +* (bug 22551) Special:Resetpass now has a "Cancel" button that sends the user to + the page set in the &returnto parameter. +* (bug 19194) Search box in Modern skin doesn't focus with Safari/Chrome +* (bug 17790) Users instantly logged off on HughesNet +* (bug 21549) Make foreign key constraints DEFERRABLE INITIALLY DEFERRED + when using Postgres as the database backend. + +== API changes in 1.16 == + +* Added uiprop=changeablegroups to meta=userinfo +* Added usprop=gender to list=users +* (bug 18311) action=purge now works for images too +* Add parentid to prop=revisions output +* (bug 17832) action=delete returns 'unknownerror' instead of 'permissiondenied' + when the user is blocked +* (bug 18546) Added timestamp of new revision to action=edit output +* (bug 18554) Also list hidden revisions in list=usercontribs for privileged + users +* (bug 13049) "API must be accessed from the primary script entry point" error +* (bug 16422) Don't display help for format=jsonfm unless specifically requested +* Added PHP and database version to meta=siteinfo output +* (bug 18533) Add readonly message to meta=siteinfo output +* (bug 18518) Add clprop=hidden to prop=categories +* (bug 18710) Fixed internal error with empty parameter in action=paraminfo +* (bug 18709) Missing descriptions for some parameters in action=paraminfo + output +* (bug 18731) Show correct SVN links for extension modules in api.php?version +* (bug 18730) Add version information to action=paraminfo output +* (bug 18743) Add ucprop=size to list=usercontribs +* (bug 18749) Add generator flag to action=paraminfo output +* Make action=block respect $wgEnableUserEmail and $wgSysopEmailBans +* Made deleting file description pages without files possible +* (bug 18773) Add content flag to siprop=namespaces output +* (bug 18785) Add siprop=languages to meta=siteinfo +* (bug 14200) Added user and excludeuser parameters to list=watchlist and + list=recentchanges +* Added index, fromtitle and byteoffset fields to action=parse&prop=sections + output +* (bug 19313) action=rollback returns wrong revid on master/slave setups +* (bug 19323) action=parse doesn't return section tree on pages with Cite + warnings +* (bug 18720) Add anchor field to action=parse&prop=sections output +* (bug 19423) The initial file description page used caption in user lang + rather than UI lang +* (bug 17809) Add number of users in user groups to meta=siteinfo +* (bug 18533) Add readonly reason to readonly exception +* (bug 19528) Added XSLT parameter to API queries in format=xml +* (bug 19040) Fix prependtext and appendtext in combination with section + parameter in action=edit +* (bug 19090) Added watchlist parameter, deprecated watch and unwatch + parameter in action=edit +* Added fields to list=search output: size, wordcount, timestamp, snippet +* Where supported by backend, list=search adds a 'searchinfo' element with + optional info: 'totalhits' count and 'suggestion' alternate query term +* (bug 19907) $wgCrossSiteAJAXdomains added to allow specified (or all) + external domains to access api.php via AJAX, if the browser supports the + Access-Control-Allow-Origin HTTP header +* (bug 19999) Made metadata and properties of search results optional. Added + srprop and srinfo. +* (bug 20700) Add amprop=default to meta=allmessages to list default value for + customized messages +* Don't parse magic words in meta=allmessages, output messages unparsed +* (bug 21105) list=usercontribs can now list contribs for User:0 +* (bug 21085) list=deletedrevs no longer returns only one revision when + drcontinue param is passed +* (bug 21106) Deprecated parameters now tagged in action=paraminfo +* (bug 19004) Added support for tags +* (bug 21083) list=allusers no longer returns current timestamp for users + without registration date +* (bug 20967) action=edit allows creation of invalid titles +* (bug 19523) Add inprop=watched to prop=info +* (bug 21589) API: Separate summary and initial page text for uploads +* (bug 21817) list=usercontribs returns empty result for empty ucuser +* (bug 21441) meta=userinfo&uiprop=options no longer returns default options + for logged-in users under certain circumstances +* (bug 21945) Add chomp control in YAML +* Expand the thumburl to an absolute url to make it consistent with url and + descriptionurl +* (bug 20233) ApiLogin::execute() doesn't handle LoginForm :: RESET_PASS +* (bug 22061) API: add prop=headitems to action=parse +* (bug 22240) API: include time in siteinfo +* (bug 22241) Quick edit is still using the deprecated watch parameter (API: Setting default for watch/unwatch wrongly set) +* (bug 22245) blfilterredirect=nonredirects in blredirect mode wrongly filtering +* (bug 22248) Output extension URLs in meta=siteinfo&siprop=extensions +* Support key-params arrays in 'descriptionmsg' in meta=siteinfo&siprop=extensions +* (bug 21922) YAML output should quote asterisk when used as key +* (bug 22297) safesubst: to allow substitution without breaking transclusion +* (bug 18758) API read of watchlist's wl_notificationtimestamp +* (bug 20809) Expose EditFormPreloadText via the API +* (bug 18427) Comment (edit summary) parser option for API +* (bug 18608) API should provide list of CSS styles to apply to rendered output +* (bug 18771) List possible errors in action=paraminfo + +=== Languages updated in 1.16 === -* Fixed fatal errors for unusual file repository configurations, such as - ForeignAPIRepo. -* Fixed the "change password" link on Special:Preferences to have the correct - returnto parameter. -* (bug 19693) Fixed cross-site scripting vulnerability in Special:Block +MediaWiki supports over 300 languages. Many localisations are updated +regularly. Below only new and removed languages are listed, as well as +changes to languages because of Bugzilla reports. + +* Capiznon (cps) (new) +* North Frisian (frr) (new) +* Kirmanjki (kiu) (new) +* Komi-Permyak (koi) (new) +* Karachay-Balkar (krc) (new) +* Hill Mari (mrj) (new) +* Prussian (prg) (new) +* Romagnol (rgn) (new) +* Lower Silesian (sli) (new) +* Picard (pcd) (new) +* Uyghur (Arabic script) (ug-arab) (new) +* Upper Franconian (vmf) (new) +* Votic (vot) (new) +* Eastern Yiddish (ydd) (removed) +* Iriga Bicolano (bto) (removed) +* Ladin (lld) (removed) +* Laz (lzz) (removed) +* Palembang (plm) (removed) +* Megleno-Romanian (Greek script) (ruq-grek) (removed) +* Tamazight (tzm) (removed) +* Laz (lzz) (new) -=== Changes since 1.15.0rc1 === +* (bug 18474) Sorani (ckb - Central Kurdish) (renamed from ku-arab) +* Add PLURAL function for Scots Gaelic (gd) +* Add Estonian letters äöõšüž to linktrail (et) +* (bug 18776) Native name of Burmese language (my) +* (bug 18806) Use correct unicode characters in spelling of native Chuvash + (Чӑвашла) +* (bug 18864) Updated autonym for Zhuang language +* (bug 18308) Updated date formatting in Occitan (oc) +* (bug 19080) Added ăâîşţșțĂÂÎŞŢȘȚ to Romanion (ro) linktrail +* (bug 19286) Correct commafying function in Polish (pl) +* (bug 19441) Updated date formatting for Lithuanian +* (bug 19630) Added ÄäÇçĞğŇňÖöŞşÜüÝýŽž to Turkmen (tk) linktrail +* (bug 19949) New linktrail for Greek (el) +* (bug 19809) Korean (North Korea) (ko-kp) (new) +* (bug 19968) Fixed "Project talk" namespace name for Maltese (mt) +* (bug 21168) Added áâãàéêçíóôõúü to Portuguese (pt) linktrail +* (bug 21596) Change interwiki link for Kurdish (ku) +* (bug 23767) PHP warning/error when REQUEST_URI returns blank (IIS issue). -* Removed category redirect feature, implementation was incomplete. -* (bug 18846) Remove update_password_format(), unnecessary, destroys all - passwords if a wiki with $wgPasswordSalt=false is upgraded with the web - installer. -* (bug 19127) Documentation warning for PostgreSQL users who run update.php: - use the same user in AdminSettings.php as in LocalSettings.php. -* Fixed possible web invocation of some maintenance scripts, due to the use of - include() instead of require(). A full exploit would require a very strange - web server configuration. -* Localisation updates. +== MediaWiki 1.15 == === Configuration changes in 1.15 === @@ -380,7 +1346,7 @@ Change notes from older releases. For current info see RELEASE-NOTES. MediaWiki supports over 300 languages. Many localisations are updated regularly. Below only new and removed languages are listed, as well as -changes to languages because of MediaZilla reports. +changes to languages because of Bugzilla reports. * Austrian German (de-at) (new) * Swiss Standard German (de-ch) (new) diff --git a/INSTALL b/INSTALL index ec790205..2a35216d 100644 --- a/INSTALL +++ b/INSTALL @@ -6,8 +6,11 @@ Starting with MediaWiki 1.2.0, it's possible to install and configure the wiki "in-place", as long as you have the necessary prerequisites available. Required software: -* Web server with PHP 5.1 or higher (this will be the last release to support 5.1.x) -* A MySQL server, 4.0.14 or higher OR a Postgres server, 8.1 or higher +* Web server with PHP 5.2.3 or higher (1.16 was the last release to support 5.1.x) +* A SQL server, the following types are supported +** MySQL 4.0.14 or higher +** PostgreSQL 8.3 or higher +** SQLite MediaWiki is developed and tested mainly on Unix/Linux platforms, but should work on Windows as well. @@ -51,36 +54,19 @@ something nice, like "wiki", since it'll be in your URL. | See: http://www.mediawiki.org/wiki/Manual:Short_URL | +--------------------------------------------------------------------------+ -To run the install script, you'll need to temporarily make the 'config' -subdirectory writable by the web server. The simplest way to do this on a -Unix/Linux system is to make it world-writable: - - chmod a+w config - Hop into your browser and surf into the wiki directory. It'll direct you into the config script. Fill out the form... remember you're probably not on an encrypted connection. Gaaah! :) If all goes well, you should soon be told that it's set up your wiki database -and written a configuration file. There should now be a 'LocalSettings.php' in -the config directory; move it back up to the main wiki directory, and the wiki -should now be working. - - +-------------------------------------------------------------------------+ - | Security hint: if you have limited access on your server and cannot | - | change ownership of files, you might want to *copy* instead of *move* | - | LocalSettings.php. | - | | - | This will make the file owned by your user account instead of by | - | the web server, which is safer in case another user's account is | - | compromised. | - +-------------------------------------------------------------------------+ - -Once the wiki is set up, you should remove the config directory, or at least -make it not world-writable (though it will refuse to config again if the wiki -is set up). +and generated a configuration file. There is now a copy of "LocalSettings.php" +available to download from the installer. Download this now, there is not a +way (yet) to get it after you exit the installer. Place it in the main wiki +directory, and the wiki should now be working. +Once the wiki is set up, you should remove the mw-config directory (though it will +refuse to config again if the wiki is set up). ---- @@ -96,4 +82,3 @@ http://lists.wikimedia.org/mailman/listinfo/mediawiki-announce (low traffic) http://lists.wikimedia.org/mailman/listinfo/mediawiki-l (site admin support) http://lists.wikimedia.org/mailman/listinfo/wikitech-l (development) - diff --git a/README b/README index 7c3651e0..e95b1e76 100644 --- a/README +++ b/README @@ -36,10 +36,19 @@ The MediaWiki software was written by: * Yuri Astrakhan * Aryeh Gregor * Aaron Schulz +* Andrew Garrett +* Raimond Spekking +* Alexandre Emsenhuber +* Siebrand Mazeland +* Chad Horohoe +* Roan Kattouw +* Trevor Pascal +* Bryan Tong Minh +* Sam Reed * Several others (view CREDITS for a more complete list) The contributors hold the copyright to this work, and it is licensed under the -terms of the GNU General Public License, version 2 or later[1] (see +terms of the GNU General Public License, version 2 or later (see http://www.fsf.org/licensing/licenses/gpl.html). Derivative works and later versions of the code must be free software licensed under the same or a compatible license. This includes "extensions" that use MediaWiki functions or @@ -48,58 +57,65 @@ details. The Wikimedia Foundation currently has no legal rights to the software. -[1] Sections of code written exclusively by Lee Crocker or Erik Moeller are also +Sections of code written exclusively by Lee Crocker or Erik Moeller are also released into the public domain, which does not impair the obligations of users under the GPL for use of the whole code or other sections thereof. -[2] MediaWiki makes use of the Sajax Toolkit by modernmethod, - http://www.modernmethod.com/sajax/ - which has the following license: +MediaWiki makes use of the Sajax Toolkit by modernmethod, +http://www.modernmethod.com/sajax/ which has the following license: - 'This work is licensed under the Creative Commons Attribution - License. To view a copy of this license, visit - http://creativecommons.org/licenses/by/2.0/ or send a letter - to Creative Commons, 559 Nathan Abbott Way, - Stanford, California 94305, USA.' + 'This work is licensed under the Creative Commons Attribution + License. To view a copy of this license, visit + http://creativecommons.org/licenses/by/2.0/ or send a letter + to Creative Commons, 559 Nathan Abbott Way, + Stanford, California 94305, USA.' + +MediaWiki use Creative Commons license marks to points to their online +licenses. This content is trademarked and used under a specific license +available at http://creativecommons.org/policies#trademark +The restricted content is: + +* skins/common/images/cc-by-nc-sa.png +* skins/common/images/cc-by-sa.png Many thanks to the Wikimedia regulars for testing and suggestions. The official website for MediaWiki is located at: - http://www.mediawiki.org/ + http://www.mediawiki.org/ The code is currently maintained in a Subversion repository at svn.wikimedia.org. See http://www.mediawiki.org/wiki/Subversion for details. Please report bugs and make feature requests in our Bugzilla system: - https://bugzilla.wikimedia.org/ +* https://bugzilla.wikimedia.org/ Documentation and discussion on new features may be found at: - http://www.mediawiki.org/wiki/Manual:FAQ - http://www.mediawiki.org/wiki/Documentation - http://www.mediawiki.org/wiki/Development +* http://www.mediawiki.org/wiki/Manual:FAQ +* http://www.mediawiki.org/wiki/Documentation +* http://www.mediawiki.org/wiki/Development Extensions are listed at: - http://www.mediawiki.org/wiki/Category:Extensions +* http://www.mediawiki.org/wiki/Category:Extensions If you are setting up your own wiki based on this software, it is highly recommended that you subscribe to mediawiki-announce: - https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce +* https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce The mailing list is very low volume, and is intended primarily for announcements of new versions, bug fixes, and security issues. A higher volume support mailing list can be found at: - https://lists.wikimedia.org/mailman/listinfo/mediawiki-l +* https://lists.wikimedia.org/mailman/listinfo/mediawiki-l Developer discussion takes place at: - https://lists.wikimedia.org/mailman/listinfo/wikitech-l +* https://lists.wikimedia.org/mailman/listinfo/wikitech-l There is also a development and support channel #mediawiki on irc.freenode.net, and an unoffical support forum at www.mwusers.com. diff --git a/RELEASE-NOTES b/RELEASE-NOTES index ecfb4e2d..6d288307 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -1,1060 +1,813 @@ = MediaWiki release notes = -== MediaWiki 1.16.5 == - -2011-05-05 - -This is a security release of the MediaWiki 1.16 branch. - -=== Summary of selected changes in 1.16 === - -Selected changes since MediaWiki 1.15 that may be of interest: - -* A new skin called Vector was added - -* Watchlists now have RSS/Atom feeds. RSS feeds generally are now hidden, - since Atom is a better protocol and is supported by virtually all clients. - -* It's now possible to block users from sending email via Special:Emailuser. - -* The maintenance script system was overhauled. Most maintenance scripts now - have a useful help page when you run them with --help. - -* AdminSettings.php is no longer required in order to run maintenance scripts. - You can just set $wgDBadminuser and $wgDBadminpassword in your - LocalSettings.php instead. - -* The preferences system was overhauled. Preferences are stored in a more - compact format. Changes to site default preferences will automatically - affect all users who have not chosen a different preference. - -* Support for SQLite was improved. Some broken features were fixed, and it - now has an efficient full-text search. - -* The user groups ACL system was improved by allowing rights to be revoked, - instead of just granted. - -* A new localisation caching system was introduced, which will make MediaWiki - faster for almost everyone, especially when lots of extensions are enabled. - -By default, this new system makes a lot of database queries. If your database -is particularly slow, or if your system administrator limits your query count, -or if you want to squeeze as much performance as possible out of Mediawiki, -set $wgCacheDirectory to a writable path on the local filesystem. Make sure -you have the DBA extension for PHP installed, this will improve performance -further. - -== Changes since 1.16.4 - -* (bug 28534) Fixed XSS vulnerability for IE 6 clients. This is the third - attempt at fixing bug 28235. -* (bug 28639) Fixed potential privilege escalation when $wgBlockDisablesLogin - is enabled. - -== Changes since 1.16.3 == - -* (bug 28507) The change we made in 1.16.3 to fix bug 28235 (XSS for IE 6 - clients) was not actually sufficient to fix that bug. This release contains - a second attempt, hopefully we have fixed it this time. - -== Changes since 1.16.2 == - -* (bug 28449) Fixed permissions checks in Special:Import which allowed users - without the 'import' permission to import pages from the configured import - sources. -* (bug 28235) Fixed XSS affecting IE 6 and earlier clients only, due to those - browsers looking for a file extension in the query string of the URL, and - ignoring the Content-Type header if one is found. -* (bug 28450) Fixed a CSS validation issue involving escaped comments, which - led to XSS for Internet Explorer clients and privacy loss for other clients. - -== Changes since 1.16.1 == - -* (bug 26642) Fixed incorrect translated namespace due to a regression in the - language converter. -* The interface translations were updated. -* (bug 27093, CVE-2011-0047): Fixed CSS injection vulnerability. -* (bug 27094) Fixed server-side arbitrary script inclusion vulnerability. - Affects Windows servers only. A malicious file with extension ".php" must - exist on the server for the exploit to be effective. - -== Changes since 1.16.0 == - -* (bug 24981) Allow extensions to access SpecialUpload variables again -* (bug 24724) list=allusers was out by 1 (shows total users - 1) -* (bug 24166) Fixed API error when using rvprop=tags -* For wikis using French as a content language, Special:Téléchargement works - again as an alias for Special:Upload. -* (bug 25167) Correctly load JS fixes for IE6 (fixing a regression in 1.16.0) -* (bug 25248) Fixed paraminfo errors in certain API modules. -* The installer now has improved handling for situations where safe_mode is - active or exec() and similar functions are disabled. +Security reminder: MediaWiki does not require PHP's register_globals +setting since version 1.2.0. If you have it on, turn it '''off''' if you can. + +== MediaWiki 1.17.0 == + +2011-06-22 + +This is the first stable release of the MediaWiki 1.17 branch. + +=== Summary of selected changes in 1.17 === + +Selected changes since MediaWiki 1.16 that may be of interest: + +* A new installer has been introduced. It has a wizard-style interface which is + translated into many languages. Many shortcomings in the old installer were + addressed with this rewrite. Note that it is no longer required for the config + directory to be made writable by the webserver. Instead the generated + LocalSettings.php file is offered as a download, which you must then upload + to the wiki's base directory. + +* ResourceLoader, a new framework for delivering client-side resources such as + JavaScript and CSS, has been introduced. These resources are now delivered + through the new entry point script "load.php", instead of as static files + served directly by the web server. This allows minification, compression and + client-side caching to be used more effectively, which should provide a net + performance improvement for most users. + +* Category sorting has been improved. +** Sorting is now case insensitive. +** Sub-categories, pages and files can now be paged separately. +** When several pages are given the same sort key, they sort by their + names instead of randomly. + +* The lowest supported version of PHP is now 5.2.3. If necessary, please + upgrade PHP prior to upgrading MediaWiki. + +=== Changes since 1.17.0rc1 === + +* Fixed syntax error in generated LocalSettings.php when a non-default user + rights profile is chosen. +* (bug 29399) Fixed PostgreSQL installation when the DB user for installation + is the same as the one for web access. +* (bug 29233) Fixed failover for DB slave servers. When a DB slave went down, + an error was immediately shown to the user, instead of trying another slave. + Was broken since 1.17 beta 1. +* (bug 29278) Fixed PHP fatal error when attempting to add text to a page via a + redirect. +* (bug 29408) Fixed uploads of files with MIME types that aren't detected by + MediaWiki. + +=== Changes since 1.17 beta 1 === + +* Fixed warning about missing file "password.js". +* When installing on MySQL, don't attempt to create a new database user if the + same user is used for installation and web access. +* Fixed SQL query errors in queries with table aliases. +* (bug 27891) Fixed the "chronology protector", broken since 1.17beta1, which + ensures that when database replication is used, the new version is seen by + the user immediately after they create or edit an article. +* (bug 28845) Allow PostgreSQL installation using a non-root user account which + has role creation abilities. +* When installing on PostgreSQL and the install account is the same as the web + account, check to make sure that the account has suitable privileges in the + mediawiki schema. +* (bug 28172) Fixed error in PostgreSQL installation when creating the wiki + sysop account. +* Fixed an issue with the Oracle installer in cases where the user is different + to the database name. +* Added "unblockself" to the list of available rights. +* In the installer, fixed the "user rights profile" option, it never worked. +* (bug 29117) Fixed Hebrew localisation of the installer. +* (bug 28840) Reduce the collateral damage caused by the fix for bug 28235 (XSS + on Internet Explorer 6 due to a file extension in the query string) by + reducing the number of URLs that are blocked, and by redirecting the request + to a safer URL where possible instead of blocking it. +* (bug 28812) Fixed documentation of API action=parse. +* (bug 28979) Fixed styling of <abbr> and <acronym>. +* Fixed the error message displayed when you try to create an account by email, + but an email address is not given. +* Fixed JS error due to missing dependency for jquery.suggestions. +* Exposed $wgExtensionAssetsPath in JavaScript. +* (bug 28738) Made ResourceLoader support environments with small URL length + limits. The length limit can be configured via $wgResourceLoaderMaxQueryLength, + and this is set automatically in the generated LocalSettings.php when the + php.ini variable "suhosin.get.max_value_length" is set. When a URL exceeds + this limit, the request is split up. Also, reduced the average length of + load.php URLs by using a more compact parameter format. +* (bug 25262) Fix for minification of hardcoded data: URIs in CSS. +* (bug 25124) Respect $wgStyleDirectory in ResourceLoader. +* Allow installation when no HTTP client is available, don't throw an exception. +* (bug 27465) Fix metadata extraction for SVG files using unusual namespace + names. +* (bug 29174) Fix regression in upload-by-URL: uploading files larger than the + PHP memory limit should work again. +* Fixed the display of comments in the new user log. +* (bug 28237) When installing extensions using the web-based installer, create + any necessary database tables. +* (bug 28983) Fixed automated installation of extensions that overwrite $path. +* Fixed error caused by missing magic words. +* Fixed breakage of article editing in PostgreSQL due to text search + configuration errors. +* Fixed the HTTPS client used when Curl is not available. This avoids an error + during install about failure of the mediawiki-announce subscription. +* (bug 28162) When installing to PostgreSQL, respect the "database port" input, + it was ignored. + +=== Configuration changes in 1.17 === + +* $wgLogAutocreatedAccounts controls whether autocreation of accounts is logged + to new users log. +* (bug 22858) $wgLocalStylePath is by default set to the same value as + $wgStylePath but should never point to a different domain than the site is + on, allowing skins to use .htc files which are not cross-domain friendly. +* $wgFileStore has been deprecated. The only usage $wgFileStore['deleted'] has + been turned into $wgDeletedDirectory. +* $wgDeletedDirectory has been added to specify what directory to place deleted + uploads in. +* IBM DB2 database no longer uses the db specific $wgDBport_db2 variable but the + normal $wgDBport. +* $wgCategoryPrefixedDefaultSortkey was removed and is now always false. This + provides more sensible sorting behavior for categories. +* Removed unused globals: $wgEnableSerializedMessages, $wgCheckSerialized, + $wgUseMemCached, $wgDisableSearchContext, $wgColorErrors, $wgUseZhdaemon, + $wgZhdaemonHost and $wgZhdaemonPort. +* (bug 24408) The include_path is not modified in the default LocalSettings.php +* $wgVectorExtraStyles was removed, and is no longer in use. +* Removed $wgUpdates for database updates; extensions should use + DatabaseUpdater::addExtensionUpdate() via the LoadExtensionSchemaUpdates hook. +* Removed $wgServerName. It doesn't need to be set anymore and is no longer + available as input for other configuration items, either. +* It's no longer necessary for LocalSettings.php to include DefaultSettings.php. +* It's no longer necessary to set $wgCacheEpoch to the file modification time + of LocalSettings.php, in LocalSettings.php itself. Instead, this is done + automatically if $wgInvalidateCacheOnLocalSettingsChange is true (which is + the default). +* $wgCopyrightIcon is deprecated and $wgFooterIcons['copyright']['copyright'] + should be used instead. +* $wgSysopUserBans is deprecated, and will be made permanently true in 1.18. + If you need this functionality, you should use the BlockIp hook to filter and + reject such blocks. +* $wgSysopRangeBans is deprecated, you should set $wgBlockCIDRLimit to maximum + (32 for IPv4, 128 for IPv6), equivalent to allowing rangeblocks of only 1 + address at a time. + +=== New features in 1.17 === + +* (bug 10183) Users can now add personal styles and scripts to all skins via + User:<name>/common.css and /common.js (if user css/js is enabled). +* (bug 22748) Add anchors on Special:ListGroupRights. +* (bug 21981) Add parameter 'showfilename' to <gallery> to automatically + apply the names of the individual files within the gallery. +* Future-proof redirection to fragments in Gecko, so things work a little nicer + if they fix <https://bugzilla.mozilla.org/show_bug.cgi?id=516293>. +* Support git:// and mms:// protocols by default for external links. +* (bug 15810) Blocked admins can no longer unblock themselves without the + 'unblockself' permission (which they have by default). +* (bug 18499) Added "enhanced" URL parameter to switch between old and enhanced + changes list. +* (bug 22925) "sp-contributions-blocked-notice-anon" message now displayed when + viewing contributions of a blocked IP address. +* (bug 22474) {{urlencode:}} now takes an optional second parameter for type of + escaping. +* Special:Listfiles now supports a username parameter. +* Special:Random carries over query string parameters. +* (bug 23206) Add Special::Search hook for detecting successful "Go". +* When visiting a "red link" of a deleted file, a deletion and move log excerpt + is provided on the Upload form. +* (bug 22647) Add category details in search results. +* (bug 23276) Add hook to Special:NewPages to modify query. +* Add accesskey 's' and tooltip to 'Save' button at Special:Preferences. +* Add accesskey 'b' and tooltip to the summary field of edit mode. +* (bug 20186) Allow filtering Special:Contributions for RevisionDeleted edits. +* ajaxwatch now uses the API and JQuery, and can be used to animate arbitrary + watch links, not just to watch the page the link is on. +* (bug 20976) "searchmenu-new-nocreate" message now displayed when when there + is no title match in search and the user has no rights to create pages. +* (bug 23429) Added new hook WatchlistEditorBuildRemoveLine. +* (bug 22844) Added support for WinCache object caching (for IIS). +* (bug 23580) Add two new events to LivePreview so that scripts can be notified + about the beginning and finishing of LivePreview actions. +* (bug 21278) Now the sidebar allows inclusion of wiki markup. +* (bug 23733) Add IDs to messages used on CSS/JS pages. +* Show validity period of the login cookie in Special:UserLogin and + Special:Preferences. +* Interlanguage links display the page title in their tooltip. +* (bug 23621) New Special:ComparePages to compare (diff) two articles. +* (bug 4597) Provide support in Special:Contributions to show only "current" + contributions +* (bug 17857) {{anchorencode}} acts more like how the parser creates section ids +* (bug 21477) \& can now be used in <math> +* (bug 11641) \dotsc \dotsm \dotsi \dotso can now be used in <math> +* (bug 21475) \mathtt and \textsf can now be used in <math> +* texvc is now run via ulimit4.sh, to limit execution time. +* SQLite now supports $wgSharedDB. +* (bug 8507) Group file links by namespace:title on image pages. +* Stop emitting named entities, so we can use <!DOCTYPE html> while still being + well-formed XML. +* texvc now supports \bcancel and \xcancel in addition to \cancel and \cancelto +* Added scriptExtension setting to $wgForeignFileRepos. +* ForeignApiRepo uses scriptDirUrl if apiBase not set. +* (bug 24212) Added MediaWiki:Filepage.css which is also included on foreign + client wikis. +* (bug 14685) Double underscore magic word usage is now tracked in the + page_props table, as well as the behavioral magic words {{DEFAULTSORT}} and + {{DISPLAYTITLE}} +* (bug 24045) MediaWiki:Ipb-needreblock is now wrapped in a div with class + "mw-ipb-needreblock" +* Non-file pages can no longer be moved to the file namespace, nor vice versa. +* (bug 671) The <dfn>, <kbd> and <samp> elements have been whitelisted in user + input. +* (bug 21503) There's now a "reason" field when creating account for other users. +* (bug 24418) action=markpatrolled now requires a token. +* A variety of category sort-related fixes, including: +** (bug 164) In English, lowercase and uppercase letters now sort the same. +** (bug 1211) Subcategories, ordinary pages, and files now page separately. +** When several pages are given the same sort key, they sort by their names + instead of randomly. +* (bug 23848) Add {{ARTICLEPATH}} Magic Word. +* (bug 8140) Add dedicated CSS classes to Special:Newpages elements. +* (bug 11005) Add CSS class to empty pages in Special:Newpages. +* The parser cache is now shared amongst users whose different settings aren't + used in the page. +* Any attribute beginning with "data-" can now be used in wikitext, per HTML5. +* (bug 24007) Diff pages now mention the number of users having edited + intermediate revisions. +* Added new hook GetIP. +* Special:Version now displays whether a SQLite database supports full-text + search. +* TS_ISO_8691_BASIC was added as a time format, which is used by ResourceLoader + for versioning. +* Maintenance scripts get a --memory-limit option to override defaults (which + is usually to set it to -1 to disable the limit). +* (bug 25397) Allow uploading (not displaying) of WebP images, disabled + by default. +* (bug 23194) Special:ListFiles now has thumbnails. +* Use hreflang to specify canonical and alternate links, search engine friendly + when a wiki has multiple variant languages. * (bug 19593) Specifying --server in now works for all maintenance scripts. -* Fixed $wgLicenseTerms register globals. -* (bug 26561) Fixed clickjacking vulnerabilities by introducing support for - X-Frame-Options. The header value can be configured using $wgBreakFrames and - $wgEditPageFrameOptions. - -== Changes since 1.16 beta 3 == - -* (bug 23769) Disabled HTML 5 client-side form validation. Was introduced in - 1.16 beta 1, but is currently poorly supported by browsers. -* (bug 23175) Re-added window.ta variable for backwards compatibility. -* (bug 23264) Fixed breakage of various command line scripts due to extra line - endings being inserted by Maintenance::output(). -* Fixed HTTP client functionality with safe_mode=On. -* Fixed parser tests broken in 1.16 beta 3. -* For Oracle DB backend: fixed parser tests and table prefix feature. -* (bug 23767) Fixed PHP warning when REQUEST_URI is blank (IIS issue). -* Fixed plural function for Northern Sami (se) -* (bug 23597) Fixed conflicts between ID attributes in the Vector skin and - parser-generated heading IDs. Renamed head, panel, head-base and page-base. -* Disabled $wgHitcounterUpdateFreq>1 feature on SQLite, does not work yet. -* (bug 23465) Don't ignore the predefined destination filename on - Special:Upload after following a red link to a file. -* In SQLite full-text search feature: fixed "move page" feature, was non- - functional. -* (bug 24565) Fixed Cache-Control headers sent from API modules, to protect - user privacy in the case where an attacker can access the wiki through the - same HTTP proxy as a logged-in user. -* Fixed an XSS vulnerability in profileinfo.php for installations with - $wgEnableProfileInfo = true (false by default) -* Fixed a case where an X-Vary-Options header was sent despite $wgUseXVO being - false. Fixed a minor header parsing issue when $wgUseXVO = true. -* Fixed a register_globals arbitrary inclusion vulnerability in - MediaWikiParserTest.php, introduced in 1.16 beta 1. - -== Changes since 1.16 beta 2 == - -* Fixed bugs in the [[Special:Userlogin]] and [[Special:Emailuser]] handling of - invalid usernames. -* Fixed sorting in [[Special:Allmessages]] -* (bug 23113) Fixed title in the show/hide links on diff pages -* (bug 23117) Fixed API rollback, was returning "badtoken" for valid requests -* (bug 23127) Re-added missing $1 parameter to the uploadtext message -* Fixed a bug in the Vector skin where personal tools display behind the logo -* (bug 23139) Fixed a bug in edit conflict resolution, where both textboxes - showed the same text. -* (bug 23115, bug 23124) Fixed various problems with <title> and <h1> elements - in page views and previews when the language converter is enabled. -* (bug 23148) Fixed a local path disclosure vulnerability in ImageMagick image - scaling, which was introduced in 1.16 beta 1. -* Improved error checking on installer. -* (bug 22970) Fixed a JavaScript error in the upload destination conflict - check. -* (bug 23167) Check the watch checkbox by default if the watchcreations +* Now rebuildtextindex.php warns if SQLite doesn't support full-text search. +* (bug 10541) Front/backend separation of installation/upgrade code. +* (bug 10596) Allow installer to enable extensions already in extensions folder. +* (bug 20627) Installer should be in languages other than English. +* Support for metadata in SVG files (title, description). +* Special:Search: Add CSS classes to 'none found' and 'create link' messages. +* Add CSS classes (including namespace and pagename) to the enhanced recent + changes/watchlist entries. +* (bug 22463) Add hook 'SkinGetPoweredBy' to make 'powered by' icon/text + customizable. +* Added CSS print pagination to the print stylesheets. +* (bug 25960) Add <link rel=canonical"> for File pages of shared/foreign + file repositories. +* When viewing a redirect, the redirect arrow and redirection target are both + wrapped in a div that has the class "redirectMsg" so that the redirection + arrow can be customized with CSS. +* (bug 21911) Hard coded limit for long page warning removed. New message + [[MediaWiki:Longpage-hint]] (empty per default) can be used instead. + Parameters: $1 shows the formatted textsize in Byte/KB/MB, $2 is the raw + number of the textsize in Byte. +* (bug 3276) Give image <gallery>s fluid width. +* Added uploads link to page subtitle in Special:Contributions. +* Added Special:Myuploads special page that redirects to Special:Listfiles. +* The footerlinks used in Monobook/Vector/Modern are now part of common skin + code, SkinTemplateOutputPageBeforeExec can be used to customize the list. +* Special wrapping setups can now define MW_CONFIG_FILE to load a config file + other than LocalSettings.php. This is like MW_CONFIG_CALLBACK but works in + some cases where MW_CONFIG_CALLBACK will not work. +* (bug 26574) Added 'upload' to $wgRestrictionTypes, allowing upload protected + pages to be queried via the API and Special:ProtectedPages, and allowing + disabling upload protection by removing it from $wgRestrictionTypes. +* The name attribute of HTMLForm fields can now be overridden by passing a + 'name' key in the descriptor array. Hidden field names are now treated + consistently with other fields and, by default, prefixed with 'wp'. +* (bug 27402) Add support for disabling MWSuggest. +* (bug 26563) Add bytes changed per revision for stub and full article dumps. +* (bug 27508) Add $wgSVGMetadataCutoff to limit the maximum amount of an svg we + look at when finding metadata to prevent excessive resource usage. +* (bug 198) $wgUpgradeKey allows unlocking the web installer for upgrades + without having to move LocalSettings.php +* Added $wgAllowImageTag, which can be set to true to whitelist the <img> tag + in wikitext. +* (bug 12797) Add $wgGalleryOptions for adjusting of default gallery display + options. +* Added the $wgAllowUserCssPrefs option which allows disabling CSS-based + preferences; which can improve page loading speed. +* Added $wgSQLMode for setting database SQL modes - either performance (null) + or other reasons (such as enabling stricter checks). +* (bug 20193) Added $wgVectorShowVariantName global configuration variable + which causes Vector to render the variants drop-down menu with a label + showing the current variant name. This is off by default, pending further + research into its user experience implications. +* The upload link for missing files can now be set separately from the + navigation link with $wgUploadMissingFileUrl. +* $wgAdditionalMailParams added to allow setting extra options to mail() calls. +* Added $wgSecureLogin to optionally login using HTTPS. +* (bug 25728) Added $wgPasswordSenderName to make the name associated + with $wgPasswordSender configurable. +* (bug 22463) $wgFooterIcons added to allow configuration of the icons shown in + the footers of skins. +* $wgFileCacheDepth can be used to set the depth of the subdirectory hierarchy. + used for the file cache. Default value is 2, which matches former behavior. + +=== Bug fixes in 1.17 === + +* (bug 17560) Half-broken deletion moved image files to deletion archive + without updating database. +* (bug 22666) Submitting user block form with an invalid user name no longer + throws an error. +* (bug 22665, bug 22667) User '0' can now be unblocked and have its block + settings changed. +* (bug 22606) The body of e-mail address confirmation message is now different + when the address changed. +* (bug 22664) Special:Userrights now accepts '0' as a valid user name. +* (bug 5210) Preload parser now parses <noinclude>, <includeonly> and + redirects. +* (bug 22709) IIS7 mishandles redirects generated by OutputPage::output() when + the URL contains a colon. +* (bug 22353) Categorised recent changes now works again. +* (bug 22747) "Reveal my e-mail address in notification e-mails" preference is + now only displayed when relevant. +* (bug 22772) {{#special:}} parser function now works with subpages. +* (bug 18664) Relative URIs in interwiki links cause failed redirects. +* (bug 19270) Relative URIs in interwiki links break interwiki transclusion. +* (bug 22903) Revdelete log entries now show in the user preferred language. +* (bug 22905) Correctly handle <abbr> followed by ISBN. +* (bug 22940) Namespace aliases pointing to main namespace don't work. +* (bug 15810) Blocked admins can no longer block/unblock other users. +* (bug 22876) Avoid possible PHP Notice if $wgDefaultUserOptions is not + correctly set. +* (bug 14952) Page titles are renormalized after html entities are removed so + that links with non-NFC character references work correctly. +* (bug 22991) wgUserGroups JavaScript variable now reports * group for + anonymous users instead of null. +* (bug 22627) Remove PHP notice when deleting a page only hidden users edited. +* (bug 21520) Anonymous previews now also gives a warning about not being + logged in (anonpreviewwarning). +* (bug 22935) image/x-ms-bmp mime type added for BMP files. +* (bug 23024) Special:ListFiles now escapes file names correctly. +* (bug 22867) "View source" tab is now only displayed if there's source text. +* (bug 19393) Feeds now format dates in user language rather than content + language. +* (bug 22852) "Served in" comment is now the time used to cache a single page + when using rebuildFileCache.php +* (bug 22496) Viewing diff of a redirect page without specifying "oldid". + parameter no longer makes the page displayed as being the redirect target. +* (bug 22918) Feed cache keys now use $wgRenderHashAppend. +* (bug 21916) Last-Modified header is now correct when outputting cached feed. +* (bug 20049) Fixed PHP notice in search highlighter that occurs in some cases. +* (bug 23017) Special:Disambiguations now list pages in content namespaces + rather than only main namespace. +* (bug 23063) $wgMaxAnimatedGifArea is checked against the total size of all. + frames, and $wgMaxImageArea against the size of the first frame, rather than + the other way around. Both now default to 12.5 megapixels. Also, images + exceeding $wgMaxImageArea can still be embedded at original size. +* (bug 23078) "All public logs" option on Special:Log is now always the first + item. +* (bug 16817) Group names in user rights log are now singular and in lowercase. +* Special:Preferences no longer crashes if the wiki default date formatting + style is not valid for the user's interface language. +* (bug 23167) Check the watch checkbox by default if the watchcreations preference is set. -* (bug 23171) Improve IE6 version check to avoid false positives. -* (bug 23176) Fixed upload warning override feature "upload new version", - broken in 1.16 beta 1. -* Fixed regression in unwatch links sent out in notification emails. When the - mailing job was deferred via the job queue, the title was incorrect. -* (bug 23534) Fixed SQL query error in API list=allusers. -* Fixed a bug in uploads for non-JavaScript clients. An empty string was used - as the default destination filename, instead of the source filename as - expected. -* (bug 23371) Fixed CSRF vulnerability in "e-mail me my password", "create - account" and "create by e-mail" features of [[Special:Userlogin]] -* (bug 23687) Fixed XSS vulnerability affecting IE clients only, due to a CSS - validation issue. -* Fixed a DoS vulnerability in ImageMagick image scaling. ImageMagick - expanded wildcard characters "?" and "*" in image filenames, potentially - causing large numbers of images to be scaled in response to a single request. - The fix for this involves breaking the scaling of such image filenames until - ImageMagick 6.6.1-5 or later is deployed, see bug 23361 for more details. -* (bug 23608) Fixed invalid HTML in diff pages. - -=== Changes since 1.16 beta 1 === - -* Fixed errors in maintenance/patchSql.php -* (bug 19627) Fix regression from r57867 where HTMLForm would output - <element classes="foo bar"> rather than <element class="foo bar"> -* Fixed broken "-r" option to maintenance/lag.php -* (bug 23076) Fixed login CSRF vulnerability. Logins now require a token to - be submitted along with the user name and password. - -=== Configuration changes in 1.16 === - -* (bug 18222) $wgMinimalPasswordLength default is now 1 -* $wgSessionHandler can be used to configure session.save_handler -* $wgLocalFileRepo/$wgForeignFileRepos now have a 'fileMode' parameter to - be used when uploading/moving files -* (bug 18761) $wgHiddenPrefs is a new array for specifying preferences not - to be shown to users -* $wgAllowRealName and $wgAllowUserSkin were deprecated in favor of - $wgHiddenPrefs[] = 'realname', but the former are still retained - for backwards-compatibility -* (bug 9257) $wgRCMaxAge now defaults to three months -* $wgDevelopmentWarnings can be set to true to show warnings about deprecated - functions and other potential errors when developing. -* Subpages are now enabled in the MediaWiki namespace by default. This is - mainly a cosmetic change, and does not in any way affect the MessageCache, - which was already effectively treating the namespace as if it had subpages. -* Oracle: maintenance/ora/user.sql script for creating DB user on oracle with - appropriate privileges. Creating this user with web-install page requires - oci8.privileged_connect set to On in php.ini. -* Removed UserrightsChangeableGroups hook introduced in 1.14 -* Added $wgCacheDirectory, to replace $wgFileCacheDirectory, - $wgLocalMessageCache, and any other local caches which need a place to put - files. -* $wgFileCacheDirectory is no longer set to anything by default, and so either - needs to be set explicitly, or $wgCacheDirectory needs to be set instead. -* $wgLocalMessageCache has been removed. Instead, set $wgUseLocalMessageCache - to true -* Removed $wgEnableSerializedMessages and $wgCheckSerialized. Similar - functionality is now available via $wgLocalisationCacheConf. -* $wgMessageCache->addMessages() is deprecated. Messages added via this - interface will not appear in Special:AllMessages. -* $wgRegisterInternalExternals can be used to record external links pointing - to same server -* (bug 19907) $wgCrossSiteAJAXdomains and $wgCrossSiteAJAXdomainExceptions added - to control which external domains may access the API via cross-site AJAX. -* $wgMaintenanceScripts for extensions to add their scripts to the default list -* $wgMemoryLimit has been added, default value '50M' -* $wgExtraRandompageSQL is deprecated, the SpecialRandomGetRandomTitle hook - should be used instead -* (bug 20489) $wgIllegalFileChars added to override the default list of illegal - characters in file names. -* (bug 19646) $wgImgAuthDetails added to display reason access to uploaded file - was denied to users(img_auth only) -* (bug 19646) $wgImgAuthPublicTest added to test to see if img_auth set up - correctly (img_auth only) -* $wgUploadMaintenance added to disable file deletions and restorations during - maintenance -* $wgCapitalLinkOverrides added to configure per-namespace capitalization -* (bug 21172) $wgSorbsUrl can now be an array with multiple DNSBL and renamed - to $wgDnsBlacklistUrls (backward compatibility kept) -* $wgEnableHtmlDiff has been removed -* (bug 3340) $wgBlockCIDRLimit added (default: 16) to configure the low end of - CIDR ranges for blocking -* $wgUseInstantCommons added for quick and easy enabling of Commons as a remote - file repository -* $wgDBAhandler added to choose a DBA handler when using CACHE_DBA -* $wgPreviewOnOpenNamespaces for extensions that create namespaces that behave - similarly to the category namespace. -* $wgEnableSorbs renamed to $wgDnsBlacklistUrls ($wgEnableSorbs kept for - backward compatibility) -* $wgUploadNavigationUrl now also affects images inline images that do not - exist. In that case the URL will get (?|&)wpDestFile=<filename> appended to - it as appropriate. -* If $wgLocaltimezone is null, use the server's timezone as the default for - signatures. This was always the behaviour documented in DefaultSettings.php - but has not been the actual behaviour for some time: instead, UTC was used - by default. -* Added $wgExtensionAssetsPath, to decouple assets serving from $wgScriptPath. - If not specified it will default to $wgScriptPath/extensions -* Added $wgCountTotalSearchHits to make search UI display total number of hits - with some search engines. -* Added $wgAdvertisedFeedTypes to decide what feed types (RSS, Atom, both, or - neither) MediaWiki advertises. Default is array( 'atom' ), so RSS is no - longer advertised by default (but it still works). -* Added $wgMemCachedTimeout, controls how long to wait for data from the - memcached servers. -* New configuration variables $wgDebugTimestamps and $wgDebugPrintHttpHeaders - for controlling debug output. -* New $wgBlockDisablesLogin when set to true disallows blocked users from - logging in. -* (bug 8790) Metadata edition ($wgUseMetadataEdit) has been moved to a separate - extension "MetadataEdit". - -=== New features in 1.16 === - -* A new skin called Vector was added -* Add CSS defintion of the 'wikitable' class to shared.css -* (bug 17163) Added MediaWiki:Talkpageheader which will be displayed when - viewing talk pages -* Superfluous border="0" removed from images -* Added new hook 'MessageCacheReplace' into MessageCache.php. For instance - to allow extensions to update caches in similar way as MediaWiki invalidates - a cached MonoBook sidebar -* Special:AllPages: Move hardcoded styles from code to CSS -* (bug 18529) New hook: SoftwareInfo for adding information about the software - to Special:Version -* Added $wgExtPGAlteredFields to allow extensions to easily alter the data - type of columns when using the Postgres backend. -* (bug 16950) Show move log when viewing/creating a deleted page -* (bug 18242) Show the Subversion revision number per extensions in - Special:Version -* (bug 18420) Missing file revisions are handled gracefully now -* (bug 9219) Auth plugins can control editing RealName/Email/Nick preferences -* (bug 18466) Add note or warning when overruling a move (semi-)protection -* (bug 18342) insertTags works in edit summary box -* (bug 18411) The upload form also checks post_max_size -* Watchlist now has a specialized <div> tag that contains a unique class for - each page -* Added Minguo calendar support for the Taiwan Chinese language -* Database: unionQueries function to be used for UNION sql construction, so - it can be overloaded on DB abstraction level for DB specific functionality -* (bug 18849) Implement Japanese and North Korean calendars -* (bug 5755) Introduce {{CURRENTMONTH1}} and {{LOCALMONTH1}} to display the - month number without the leading zero -* (bug 13456) categoriespagetext supports PLURAL -* (bug 18860) Blocks of IPs affecting registered users can now block email -* (bug 17093) Date and time are separate parameters in Special:BlockList -* (bug 11484) Added ISO speed rating to default collapsed EXIF metadata view -* (bug 14866) Messages 'recentchangeslinked-toolbox' and - 'recentchangeslinked-toolbox' were added to allow more fine grained - customisation of the user interface -* DISPLAYTITLE now accepts a limited amount of wiki markup (the single-quote - items) -* Special:Search now could search terms in all variant-forms. ONLY apply on - wikis enabled LanguageConverter. -* Add autopromote condition APCOND_BLOCKED to autopromote blocked users to - various user groups. -* Add $wgRevokePermissions as a means of restricting a group's rights. The - syntax is identical to $wgGroupPermissions, but users in these groups will - have these rights stripped from them. -* Added a PHP port of CDB (constant database), for improved local caching when - the DBA extension is not available. -* Introduced a new system for localisation caching. The system is based around - fast fetches of individual messages, minimising memory overhead and startup - time in the typical case. The database backend will be used by default, but - set $wgCacheDirectory to get a faster CDB-based implementation. -* Expanded the number of variables which can be set in the extension messages - files. -* Added a feature to allow per-article process pool size control for the parsing - task, to limit resource usage when the cache for a heavily-viewed article is - invalidated. Requires an external daemon. -* (bug 19576) Moved the id attribues from the anchors accompanying section - headers to the <span class="mw-headline"> elements within the section headers, - removing the redundant anchor elements. -* Parser::setFunctionTagHook now can be used to add a new tag which is parsed at - preprocesor level. -* Added $wgShowArchiveThumbnails, allowing sysadmins to disable thumbnail - display for old versions of images. -* In watchlists and Special:RecentChanges, the difference in page size now - appears in dark green if bytes were added and dark red if bytes were removed. -* Added FSRepo configuration properties thumbUrl and thumbDir, to allow the - thumbnails to be stored in a separate location to the source images. -* If config/ directory is not executable, the command to make it executable - now asks the user to cd to the correct directory -* Add experimental new external authentication framework, ExternalAuth -* (bug 18768) Remove AdminSettings requirements. Maintenance environment - will still load it if it exists, but it's not required for anything -* (bug 19900) The "listgrouprights-key" message is now wrapped in a div with - class "mw-listgrouprights-key" -* (bug 471) Allow RSS feeds for watchlist, using an opt-in security token -* (bug 10812) Interwiki links can have names and descriptions, fetched from - message 'interwiki-desc-PREFIX', not really used anywhere yet though -* (bug 9691) Add type (signup or login) parameter to - AuthPlugin::ModifyUITemplate() -* (bug 14454) "Member of group(s)" in Special:Preferences causes language - difficulties -* (bug 16697) Unicode combining characters are difficult to edit in some - browsers -* Parser test supports uploading results to remote CodeReview instance -* (bug 20013) Added CSS class "mw-version-ext-version" is wrapped on the - extension version in Special:Version -* (bug 20014) Added CSS class "mw-listgrouprights-right-name" is wrapped on the - right name in Special:ListGroupRights -* (bug 12920) New CoreParserFunction {{nse:...}} as an url-friendly equivalent - to {{ns:...}} -* (bug 16322) Allow maintenance scripts to accept DB user/pass over input or - params -* (bug 18566) Maintenance script to un/protect pages -* (bug 671) The HTML <abbr> tag is now permitted. -* RecentChanges now has a legend to explain what the Nmb! flags mean, and the - flags have tooltips. -* (bug 15209) New hook BeforeInitialize called after everything has been setup - but before Mediawiki::performRequestForTitle() -* wgMainPageTitle variable now available to JavaScript code to identify the main - page link, so it doesn't have to be extracted from the link URLs. -* (bug 16836) Display preview of signature in user preferences and describe its - use -* The default output format is now HTML 5 instead of XHTML 1.0 Transitional. - This can be disabled by setting $wgHtml5 = false;. Specific features enabled - if HTML 5 is used: -** Some extra inputs will be autofocused, in supporting browsers. -** The summary attribute has been removed from tables of contents. summary is - obsolete in HTML 5 and wasn't useful here anyway. -** Unnecessary type="" attribute removed for CSS and JS. -** If $wgWellFormedXml is set to false, some bytes will be shaved off of HTML - output by omitting some things like quotation marks where HTML 5 allows. -** (bug 16921) maxlength enabled for page move comments -* The description message in $wgExtensionCredits can be an array with parameters -* New hook SpecialRandomGetRandomTitle allows extensions to modify the selection - criteria used by Special:Random and subclasses, or substitute a custom result, - deprecating the $wgExtraRandompageSQL config variable -* (bug 20318) Distinct CSS classes for ISBN/RFC/PMID special links added -* (bug 20404) Custom fields in the user creation form template can now have - detail labels in prefsectiontip divs. -* MakeSysop and MakeBot are now aliases for Special:UserRights -* IndexPager->mLimitsShown can now be an associative array of limit => text-to- - display-in-limit-form. -* (bug 18880) LogEventsList::showLogExtract() can now take a string-by-reference - and add its HTML to it, rather than having to go straight to $wgOut. -* Added $wgShowDBErrorBacktrace, to allow users to easily gather backtraces for - database connection and query errors. -* Show change block / unblock link on Special:Contributions if user is blocked -* Display note on Special:Contributions if the user is blocked, and provide an - excerpt from the block log. -* (bug 19646) New hook: ImgAuthBeforeStream for tests and functionality before - file is streamed to user, but only when using img_auth -* Note on non-existing user and user talk pages if user does not exist -* New hook ShowMissingArticle so extensions can modify the output for - non-existent pages. -* Admins could disable some variants using $wgDisabledVariants now. ONLY apply - on wikis enabled LanguageConverter. -* (bug 16310) Credits page now lists IP addresses rather than saying the number - of anonymous users that edited the page -* New permission 'sendemail' added. Default right for all registered users. Can - for example be used to prevent new accounts from sending spam. -* (bug 16979) Tracking categories for __INDEX__ and __NOINDEX__ -* Two new hooks, ConfirmEmailComplete and InvalidateEmailComplete, which are - called after a user's email has been successfully confirmed or invalidated. -* (bug 19741) Moved the XCF files out of the main MediaWiki distribution, for - a smaller subversion checkout. -* (bug 13750) First letter capitalization can now be a per-namespace setting -* (bug 21073) "User does not exist" message no longer displayed on sub-sub-pages - of existing users -* (bug 21095) Tracking categories produced by the parser (expensive parser - function limit exceeded, __NOINDEX__ tracking, etc) can now be disabled by - setting the system message ([[MediaWiki:expensive-parserfunction-category]] - etc) to "-". -* Added maintenance script sqlite.php for SQLite-specific maintenance tasks. -* Rewrote Special:Upload to allow easier extension. -* Upload errors that can be solved by changing the filename now do not require - reuploading. -* Added $wgRateLimitsExcludedIPs, to allow specific IPs to be whitelisted from - rate limits. -* (bug 21222) When $wgUseTeX is not enabled, <math> is no longer registered with - the parser so extensions are free to implement their own <math> tag -* (bug 21047) Wrap 'cannotdelete' into a div with the generic 'error' class and - an own 'mw-error-cannotdelete' class -* New hook AbortNewAccountAuto, called before account creation from AuthPlugin- - or ExtUser-driven requests. -* (bug 3480) The warning saying that the page has a history when deleting it now - contains the number of revisions in the history -* $wgStylePath and $wgLogo are now set in the default LocalSettings.php file. -* (bug 20186) Allow filtering history for revision deletion. -* New hook OtherBlockLogLink, called in Special:IPBlockList and Special:Block - to show links to block logs of other blocking extensions, i.e. GlobalBlocking -* Added search capabilities to SQLite backend -* rebuildtextindex.php maintenance script now supports databases other than - MySQL -* upgrade1_5.php now requires to be run --update option to prevent confusion -* (bug 17662) Customizable default preload/editintro for new sections in the - respective addsection-preload and addsection-editintro messages -* Added maintenance script checkSyntax.php that checks for PHP syntax errors - and common coding mistakes -* Updated Unicode normalization tables -* (bug 21604) Spellcheck attribute for editsummary -* New wgCategories JavaScript global variable for userscripts. -* (bug 20717) Added checkboxes to hide users with bot and/or sysop group - membership in SpecialActiveusers -* Allow \pagecolor and \definecolor in texvc -* $wgTexvcBackgroundColor contains background color for texvc call -* (bug 21574) Redirects can now have "303 See Other" HTTP status -* EditPage refactored to allow extensions to derive new edit modes much easier. -* (bug 21826) Subsections of Special:Version now also have anchors -* (bug 19791) Add URL of file source as comment to thumbs (for ImageMagick) -* (bug 21946) Sorted wikitables do not properly handle minus signs -* (bug 18885) Red links for media files do not support shared repositories -* Added $wgFixArabicUnicode, to convert deprecated presentation forms in - Arabic text to their modern equivalents, and $wgFixMalayalamUnicode, to - convert ZWJ-based chillu sequences in Malayalam text to their Unicode 5.1 - equivalents. -* (bug 22051) Returing false in SpecialContributionsBeforeMainOutput hook now - stops normal output -* Send new password e-mail in users preference language -* LanguageConverter now support nested using of manual convert syntax like - "-{-{}-}-" -* Upload license preview now uses the API instead of action=ajax -* (bug 7346) Add <guid> to RSS to avoid duplicates -* (bug 19996) Added new hooks for Special:Search, which allow to further - restrict/expand it. -* (bug 21936) When a revision has been patrolled, there's now a link back to the - article -* (bug 22315) SpecialRecentChangesQuery hook now pass $query_options and checks - the return value -* Separate unit test suites under t/ and tests/ were merged and moved to - maintenance/tests/. -* importImages.php maintenance script can now use the original uploader and -comment from another wiki. -* Support for Turck MMCache was removed -* (bug 14592) Warn users when they try to move their user page that their - account will not be renamed -* Show block log on non-existing user (talk) pages of currently blocked users - -=== Bug fixes in 1.16 === - -* (bug 18031) Make namespace selector on Special:Export remember the previous - selection -* The svn-version version numbers on Special:Version have been removed -* (bug 17374) Special:Export no longer exports two copies of the same page -* (bug 18190) Proper parsing in MediaWiki:Sharedupload message -* (bug 17617) HTML cleanup for ImagePage -* (bug 17964) namespaceDupes.php no longer fails on an empty interwiki table -* Improved error handling for image moving -* (bug 17974) On Special:SpecialPages, restricted special pages are now marked - with <strong> tags, helps with text-based browsers -* (bug 18259) Special:DeletedContributions now also uses - MediaWiki:Sp-contributions-logs for the link to Special:Log -* Don't add empty title="" attributes to links to anchors on the current page -* (bug 18291) rebuildrecentchanges.php failed to add deletion log entries -* (bug 18304) rebuildrecentchanges.php got size changes wrong -* (bug 18170) Fixed a PHP warning in Parser::preSaveTransform() in PHP 5.3 -* (bug 18289) Database connection error page now returns correct HTML -* "successbox", "errorbox" and related CSS classes are now available in all - skins -* (bug 18316) Removed superfluous name="fulltext" from Special:Search -* (bug 18331) MediaWiki:Undelete-revision can now have wikitext -* The "noautoblock" flag is no longer displayed in the block log when blocking - an IP address -* (bug 18009) $wgHooks and $wgExtensionFunctions now support closures -* (bug 17948) Maintenance scripts now exit(0) or exit(1) as appropriate -* (bug 18377) Time in Enhanced ChangesList lacking localisation -* (bug 12998) Allow <sup>, <sub>, etc. in DISPLAYTITLE -* (bug 1553) Lowercase navigation headings in German -* (bug 7830) Pending transactions failed to commit on loginToUse() error -* (bug 11613) session.save_handler being over-ridden -* (bug 11381) session.save_handler being set twice (causes error) -* (bug 17835) ForeignAPIRepo throwing error on first page load for file -* (bug 18115) ForeignAPIRepo cache isn't working -* Fixed a bug caused by LanguageConverter.php, which brings an abnormal '}-' - after some parsed math syntax. -* (bug 18441) rebuildrecentchanges.inc no longer ignores $wgLogRestrictions -* (bug 18317) Bolded selections in 1 | 3 | etc days on RecentChanges now use - <strong> instead of hardcoded styles -* (bug 18449) Fixed items number per column on category pages when the total is - divisible by 3 -* (bug 18121) maintenance/deleteArchivedRevisions.php no longer deletes - revisions when --delete is not passed -* (bug 13172) GPS coordinates in image Exif data are now actually displayed -* Overhaul of preferences system, includes the following bug fixes: -** (bug 5363) Changes to default preferences now impact registered users. -** (bug 14806) Hook to enable putting preferences in existing tabs. -** (bug 17191) Registration date now listed on preferences page. -** The user_properties table (now used for storing preferences) has been added - to $wgSharedTables. -** Note that this change will break some extensions which have not been adapted - for it. -* (bug 17020) Adding fallback encodings for Traditional and Simplified Chinese - languages while the the text is typed as URLs. -* (bug 17614) Prev / Next links are not shown if all results are shown -* (bug 18207) Strange spacing before [[irc:...]] links -* Removed float from the user login form in RTL interface - caused display - problems in FF2 -* (bug 15008) Redirect images are now subject to Bad image list rules -* (bug 6802) profileinfo.php now also work on other database servers than MySQL -* (bug 16925) Diffs no longer fail when $wgExternalDiffEngine is set to - 'wikidiff' or 'wikidiff2' but extension is not installed -* (bug 18326) Chmod errors in file repos have been hidden -* (bug 18718) Comma after a } create a error in IE -* (bug 18716) Removed redundant class in Modern skin CSS for category links and - tweaked spacing. -* (bug 18656) Use proper directory separators in wfMkdirParents() -* (bug 18549) Make Special:Blockip respect $wgEnableUserEmail and - $wgSysopEmailBans -* (bug 16912) Tooltips on images with link= disappear -* (bug 18389) Localise numbers in EXIF data -* (bug 18522) Wrap MediaWiki:Protect-cascadeon in a div for identification -* (bug 18438) Tweak HTML for preview bar for consistency and accessibility -* (bug 18432) Updated documentation for dumpBackup.php -* Fix array logic in Sanitizer::removeHTMLtags so that it doesn't strip good - tags that were redundantly defined. -* (bug 14118) SpecialPage::getTitleFor does not return a localised name -* (bug 18698) Renaming non entry point maintenance scripts from .inc.php to - .inc -* Deprecated methods Title::getInterwikiLink, Title::userCanCreate(), - Title::userCanEdit() and Title::userCanMove() have been removed -* Only show upload links on file description if $wgEnableUploads = true - and user can upload -* Don't say "You need to log in to upload/move", because it's possible that - uploading/moving is disabled for registered users as well (e.g. only sysops) -* (bug 18943) Handle invalid titles gracefully at Special:Mostlinked -* (bug 8873) Enable variant conversion in text on 'alt' and 'title' attributes -* (bug 10837) Introducing the StubUserVariant class to determine the variant - variable instead of using this to overrules the user language preference. -* (bug 19014) If user had deletedhistory right, but not undeleted right, then - show "view" instead of "view/restore" on logs. -* (bug 19017) TOC level calculation error in an odd case -* (bug 18999) CSS update for RTL interwiki links -* (bug 18925) history.js removes class names of list elements on initialization -* Multiple whitespace in TOC anchors is now stripped, for consistency with the - link from the edit comment -* (bug 19112) Preferences now respects $wgUseExternalEditor -* (bug 18173) MediaWiki now fails when unable to determine a client IP -* (bug 19170) Special:Version should follow the content language direction -* (bug 19160) maintenance/purgeOldText.inc is now compatible with PostgreSQL -* Fixed performance regression in "bad image list" feature -* Show user preference 'Use live preview' if $wgLivePreview is enabled only -* (bug 17014) Blocked users can no longer use Special:UserRights unless they - can add/remove *all* groups (have 'userrights' permission). -* (bug 19294) Always show Sp-contributions-footer(-anon) -* Attempts to restrict reading of pages while anonymous viewing is allowed - via extensions not using the userCan hook and via $wgRevokePermissions now +* Maintenance script cleanupTitles is now able to fix titles stored + in a negative namespace (which is invalid). +* (bug 19858) Removed obsolete <big> in interface messages. +* (bug 21456) "Bad title" error when showing non-local interwiki pages no longer + displays incorrect tabs. +* (bug 23190) Improved math representation for text browsers. +* (bug 22015) Improved upload-by-url error handling and error display. +* (bug 17941) $wgMaxUploadSize is now honored by all upload sources. +* (bug 23080) New usernames now limited to 235 bytes so that custom skin files work. -* (bug 8445) Multiple-character search terms are now handled properly for - Chinese -* (bug 19450) Use formatNum for "Number of edits" in Special:Preferences -* (bug 11242) Check for MySQL storage engines during installation now checks - whether the engines are actually available -* (bug 19390) Omit the "printable version" link on the printable version -* (bug 18394) img_auth.php now respects userCan -* (bug 19509) Uploading to a file named '0' previously treated it as null input - and attempted to upload with the source name. Now warns about not having an - extension (since 0.ext is perfectly valid) -* (bug 19468) Enotif preferences are now only displayed when they are turned on -* (bug 19442) Show/hide options on watchlist only work once -* (bug 19602) PubMed Magic links now use updated NIH url -* (bug 19637) externallinks have links to self -* Don't load Opera 9.5 RTL fixes for Opera 9.6 -* Remove five-year-old KHTMLFixes.css, which is unlikely to be relevant anymore - and was causing problems. -* Removed repetition of URIs in the title attributes of external links. -* (bug 19693) User name is now escaped in "Contributions for ..." link on - Special:BlockIP -* (bug 19571) Override buildConcat for SQLite. -* Log in and log out links no longer return to page view when clicked from - history view, edit page, or something similar -* (bug 19513) RTL fixes for new Search UI -* (bug 16497) Special:Allmessages is paginated -* (bug 18708) CSS plainlinks class now available to all skins -* (bug 19590) Database error messages no longer have "MySQL" hardcoded as the - database type -* (bug 19759) successbox on Special:Preferences now correctly aligned on - standard, nostalgia and cologneblue skin -* (bug 19814) interwiki links from file links ([[File:Foo.jpg|link=de:Test]]) - are no longer recorded in the pagelinks table -* (bug 19784) date option "ISO 8601" produced illegal id -* (bug 19761) Removed autogenerated <meta keywords> tag with link data. - Keyword set was not useful, and is ignored by modern search engines anway. -* (bug 19827) Special:SpecialPages title is "Upload file -* (bug 19355) Added .xhtml, .xht to upload file extension blacklist -* (bug 19287) Workaround for lag on history page in Firefox 3.5 -* (bug 19564) Updated docs/hooks.txt -* (bug 18751) Fix for buggage in profiling setup for some extensions on PHP 5.1 -* (bug 17139) ts_resortTable inconsistent trimming makes date sorting fragile -* (bug 19445) Change oldimage table to use ON UPDATE CASCADE for FK to image - table. -* (bug 14080) Short notation links to subpages didn't work in edit summaries -* (bug 17374) Special:Export no longer exports multiple copies of pages -* (bug 19818) Edits to user CSS/JS subpages can now be marked as patrolled by - users who can't edit them -* (bug 19839) Comments in log items are no more double escaped -* (bug 18161) Fix inconsistent separators in watchlist link toolbars with - "enhanced recent changes" -* (bug 16877) Moving a page over a redirect no longer leaves an orphan entry in - the recentchanges table -* (bug 16009) Limit selection forms based on Pager now links to the correct page - when using long urls -* The display of the language list on the preferences is more comply with the - BCP 47 standards. -* (bug 19849) Custom X-Vary-Options header now disabled unless $wgUseXVO is set -* (bug 19301) Duplicates entries in $wgAddGroups, $wgRemoveGroups, - $wgGroupsAddToSelf and $wgGroupsRemoveFromSelf are no more displayed on - Special:ListGroupRights -* (bug 18799) Special:Userlogin now handles correctly the returnto parameter - to not link back to Special:Userlogout when user's language isn't the same as - content's language -* (bug 19479) Show proper error message when unable to connect to PostgreSQL - database with username/password in MediaWiki's setup -* (bugs 18407, 18409) Special:Upload is now listed on Special:Specialpages only - if uploads are enabled and the user can access it -* (bug 17988) Spaces before [[Category:]] links are no longer ignored -* (bug 19957) All known-failing tests now marked disabled; added --run-disabled - option to parser test suite to run disabled tests if desired. -* (bug 16311) Make recent change flags (n/m/b) <abbr>s instead of <span>s -* (bug 15680) Split the edit tip message of user CSS/JS subpage into - "usercssyoucanpreview" and "userjsyoucanpreview" respectively. -* (bug 12110) Split the rights for editing users' CSS/JS subpage from - "editusercssjs" into "editusercss" and edituserjs" respectively. -* (bug 19394) RecentChanges feed URLs for log items with no revisions - (eg Newuser, Userrights) are no longer broken -* (bug 17395) Remote file descriptions use user language ($wgLang), not wiki - language ($wgContLang) -* (bug 11867) Lock error on redirect table when running orphans.php -* (bug 18930) initStats.php now refreshes active users count -* (bug 18699) Using the nosummary URL option no longer triggers the "You have - not provided a summary" warning for those who activated it in their - preferences -* (bug 18855) commandLine.inc and Maintenance.php are now properly included - using the full path -* (bug 18497) Fixed broken style sheets in Opera fullscreen mode -* (bug 16084) Default memory limit has be increased to 50M, see $wgMemoryLimit -* (bug 17864/19519) Added proper input normalization in Special:UserRights -* (bug 20086) Add Hook to add extra statistics at the end of Special:Statistics -* (bug 19289) importDump.php can now handle bzip2 and 7zip -* (bug 20131) Fixed a PHP notice for users having the "rollback" right on - Special:RecentChangesLinked -* Do not transform EXIF fields with pure text to avoid results like - foo,bar@example,com -* (bug 20176) Fix login/logout links in skin CologneBlue -* (bug 20203) "Powered by Mediawiki" now has height/width on image tag -* (bug 20273) Fix broken output when no pages are found in the content - namespaces -* (bug 20265) Make AncientPages and UnusedFiles work on SQLite -* Fixed XSS vulnerability for Internet Explorer clients (only pre-release - versions of MediaWiki were affected). -* (bug 14817) Moving a page to a subpage of itself moves it twice -* (bug 20289) $wgMaximumMovedPages should only count pages actually moved -* (bug 15248) Non-breaking spaces and certain other Unicode space characters - are now normalized to ordinary spaces in titles; if your wiki has existing - titles with such characters, run cleanupTitles.php and/or cleanupImages.php -* (bug 11143) Links containing invalid UTF-8 percent-code sequences are now - cleanly disabled instead of breaking parsing entirely on PHP 5.2. -* (bug 20296) Fixed an PHP warning in Language::getMagic() in PHP 5.3 -* (bug 20358) Unprotect tab was missing accesskey; now same as protect tab. -* (bug 20317) Cleaned up default main page link accesskey settings -* (bug 20362) Special:Statistics now produces valid HTML when view counters are - enabled -* (bug 19857) maintenance/deleteRevision.php on last revision no longer breaks - target page -* (bug 20365) Page name with with c/g/h/j/s/u + x are now correctly handled in - Special:MovePage with Esperanto as content language -* (bug 20364) Fixed regression in GIF metadata loading -* (bug 20299) MediaWiki:Move-subpages and MediaWiki:Move-talk-subpages can now - use wikitext -* (bug 15475) DatabaseBase::setFlag(), DatabaseBase::clearFlag() and - DatabaseBase::getFlag() now have documentation -* (bug 19966) MediaWiki:License-header is now used for the licensing header in - the file description page instead of MediaWiki:License -* (bug 20380) Links to history/deleted edits at the top of - Special:RevisionDelete are no more displayed when when doing log suppression -* (bug 8143) Localised parser function names are now correctly case insensitive - if they contain non-ASCII characters -* (bug 19055) maintenance/rebuildrecentchanges.php now purges - Special:Recentchanges's RSS and Atom feed cache -* The installer will now try to bypass PHP's max_execution_time -* (bug 20260) SQLite no longer tries to automatically create the database at - execution time, this now happens only at install time; if it is not available - at script execution, it now throws an exception -* Fixed EditFilterMerged hook so the hookError parameter serves a purpose - (analogous to EditFilter hook) -* (bug 2257) Tag extensions can expand template parameters provided to the tag, - by using a new parameter added to the recursiveTagParse function -* (bug 14900) __INDEX__ and __NOINDEX__ no longer override site config set in - $wgArticleRobotPolicies. -* (bug 20466) Hidden categories are no more displayed when printing -* (bug 20446) When changing user rights with User@remotewiki and remotewiki is - the local wiki, the user is now treated as the local user -* (bug 20494) OutputPage::getArticleBodyOnly() no longer requires an useless - argument -* (bug 20136) Protection form JavaScript now synchronizes the expiry boxes on - any change, in addition to onkeyup. -* Don't link to "edit this page" on MediaWiki:Noarticletext if user is not - allowed to create page. Done via new message - MediaWiki:Noarticletext-nopermission -* Improved compatibility between the Vector skin and addPortletLink() from - wikibits.js: empty portlets are now present but hidden, adding an element to a - portlet unhides it -* (bug 19531) addPortletLink() now wraps inserted labels in a <span> element to - be compatible with the CSS for the Vector skin -* (bug 20578) Wrong localized image metadata - duplicated string? -* (bug 20556) Stub threshold's "other" <input> in Special:Preferences now has a - correct type="text" parameter -* (bug 482) Don't include TOC in the printable version if it has been hidden -* Adjust the time according to the user configuration on Special:Revisiondelete -* (bug 20624) Installation no longer allows "qqq" as the chosen language -* (bug 20634) The installer-created database user will now have all rights on - the database so that upgrades will go more smoothly. -* (bug 18180) Special:Export ignores limit, dir, offset parameters -* User::getBlockedStatus() works for all kinds of user objects and doesn't - assume the user object is equal to the current-user object ($wgUser) -* (bug 20517) Cancel link from edit page now returns to the old version when - editing an old version -* (bug 16902) Installer no longer shows warnings when exec() has been disabled - by disable_functions -* (bug 20726) Title::getLatestRevID's documentation now says that the function - returns false if the page doesn't exist -* (bug 20751) ForeignApiRepo now urldecodes filenames when saving to local cache -* (bug 20730) Fix to Special:Version ViewVC link for branch checkouts -* (bug 20353) wfShellExec() was adding extra quotes on Windows Vista, causing - command line scripts to fail -* (bug 20702) Parser functions can now be used correctly in - MediaWiki:Missing-article -* (bug 14117) "redirected from" is now also shown on foreign file redirects -* (bug 17747) Only display thumbnail column in file history if the image can - be rendered. -* (bug 3421) Live preview no longer breaks user CSS/JS previews -* (bug 11264) The file logo on a file description page for documents (PDF, ...) - now links to the file rather than the file description page -* Password fields built with HTMLForm now still have the type="password" - attribute if $wgHtml5=false. -* (bug 20836) Preload now works for MediaWiki namespace -* (bug 20885) Search box no longer suggests unavailable special pages -* (bug 20948) "Create this page" on Special:Search is no longer displayed when - searching for special pages -* (bug 20524) Hideuser: Show nice error when trying to block hidden user without - hideuser right -* (bug 21026) Fixed file redirects on shared repos on non-English client wikis -* (bug 21030) Fixed schema choices from being overwritten by defining unique - field names per driver. -* (bug 21115) wgCanonicalSpecialPageName javascript variable is now always - false on non-special pages -* (bug 21113) "Other statistics" header on Special:Statistics is no more - displayed when there isn't any entry in it -* (bug 21114) Special:Contributions no longer shows diff links for new - revisions -* (bug 21116) MediaWiki:Templatesused, MediaWiki:Templatesusedpreview and - MediaWiki:Templatesusedsection now support plural -* (bug 21079) There is no more line wrapping between label and field in - Special:Log -* (bug 20256) Fixed SQL errors on Special:Recentchanges and - Special:Recentchangeslinked on SQLite backend -* (bug 20880) Fixed updater failure on SQLite backend -* (bug 21182) Fixed invalid HTML in Special:Listgrouprights -* (bug 20242) Installer no longer promts for user credentials for SQLite - databases -* (bug 20911) Installer failed to create a SQLite database -* (bug 20847) Deprecated deprecated akeytt() removed in wikibits.js leaving - dummy -* (bug 21161) Changing $wgCacheEpoch now always invalidates file cache -* (bug 20268) Fixed row count estimation on SQLite backend -* (bug 20275) Fixed LIKE queries on SQLite backend -* (bug 21234) Moving subpages of titles containing \\ now works properly -* (bug 21006) maintenance/updateArticleCount.php now works again on PostgreSQL -* (bug 19319) Add activeusers-intro message at top of SpecialActiveUsers page -* (bug 21255) Fixed hostname construction for DNSBL checking -* (bug 18019) Users are now warned when moving a file to a name in use on a - shared repository and only users with the 'reupload-shared' permission can - complete the move. -* (bug 18909) Add missing Postgres INSERT SELECT wrapper -* User::isValidPassword now only returns boolean results, - User::getPasswordValidity can be used to get an error message string -* The error message shown in Special:ChangePassword now parses wiki markup -* (bug 19859) Removed experimental HTMLDiff feature -* Removed section edit links in edit conflict form -* Allow SpecialActiveusers to work on non-MySQL databases -* (bug 6579) Fixed protecting images from uploading only -* (bug 18609) Search index was empty for some pages -* (bug 13453) rebuildrecentchanges maintenance script works on PG again -* (bug 16583) Reduce false positives when checking for PHP (on upload, etc.) -* (bug 20112) Bitrotted tests in the t/ directory were failing. -* (bug 21470) MediaWiki:Sp-contributions-explain is now wrapped in a <p> with - id "mw-sp-contributions-explain" -* (bug 19159) Fixed \overleftrightarrow in texvc -* (bug 19391) Fix caching for Recent ChangesFeed. -* (bug 21455) Fixed "Watch this page" checkbox appearing on some special pages - even to non-logged in users -* (bug 21551) Rewrote the Squid purge HTTP client to provide a more robust and - general implementation of HTTP, allowing it to purge non-Squid caches such as - Varnish. -* Fixed corruption of long UDP debug log messages by using socket_sendto() - instead of fsockopen() with fwrite(). -* (bug 16884) Fixed feed links in sidebar not complying with URL parameters - of the displayed page -* (bug 21403) memcached class renamed to MWMemecached to avoid conflict with - PHP's memcached extension -* (bug 21650) Both calls to SkinTemplateTabs hook are now compatible -* (bug 21672) Add missing Accept-Language to both Vary and XVO headers -* (bug 21679) "Edit block reasons" link at the bottom of Special:Blockip is now - only displayed to the users that have "editinterface" right -* (bug 21740) Attempting to protect a page that doesn't exist (salting) returns - "unknown error" -* (bug 18762) both redirects and links get fixed one after another if - redirects-only switch is not present -* (bug 20159) thumbnails rerendered if older that $wgThumbnailEpoch -* Fixed a bug which in some situations causes the job queue to grow forever, - due to an infinite loop of job requeues. -* (bug 21523) File that can have multiple pages (djvu, pdf, ...) no longer have - the page selector when they have only one page -* (bug 21559) "logempty" message is now wrapped in a div with class - "mw-warning-logempty" when used in log extract -* (bug 20549) Parser tests were broken on SQLite backend -* (bug 21776) Interwiki urls like http://en.wikibooks.org/wiki/cs: should give - a redirect instead of a baderror. -* (bug 21803) Special:MyContributions now keeps the query string parameters -* Redirecting special pages now keep query string paramters set to "0" (e.g. - for namespace) -* (bug 20765) Special:ListGroupRights no longer misses addables and removables - groups if there are duplicate entries -* (bug 21814) Message shown when rolling back an edit with a deleted username - now shows '(username deleted)' instead of broken user tool links -* (bug 21536) Fixed JavaScript error on Special:Search caused by an incorrect ID -* (bug 21535) RecentChanges RSS feed now always recognises the namespace filter, - previously it sometimes didn't due to caching. -* (bug 20388) ProfilerSimpleText no longer outputs comment on action=raw -* refreshLinks.php now purges orphaned redirect table rows -* (bug 2971) Swap links of hist & diff location on Special:Contributions for - consistency with RC/WL -* (bug 21986) Special page names were are now capitalized by content language -* If two log type have the same description, they're now both displayed in the - type selector on Special:Log -* (bug 20115) Special:Userlogin title says "Log in / create account" even if the - user can't create an account -* (bug 2658) Don't attempt to set the TZ environment variable. -* (bug 9794) User rights log entries for foreign user now links to the foreign - user's page if possible -* (bug 14717) Don't load nonexistent CSS fix files for non-Monobook skins -* (bug 22034) Use wfClientAcceptsGzip() in wfGzipHandler instead of - reimplementing it. -* (bug 19226) First line renders differently on many UI messages. -* (bug 21303) Comments are no longer stripped from MediaWiki:Common.js and - skin-specific JS pages -* (bug 5061) Use the more precise thumbcaption thumbimage and thumbinner classes - for image divs. -* Fixed bug involving unclosed "-{" markup in the language converter -* (bug 21870) No longer include Google logo from an external server on wiki error. -* (bug 22181) Do not truncate if the ellipsis actually make the string longer -* (bug 16039) Text disappearing after a bad image -* (bug 18784) Internal links like [[File:Foo|caption]] should read 'caption', - not 'File:Foo' when Foo is not an image -* (bug 21518) Special:UserRights no longer displays the user name box for users - that can only change their rights -* (bug 21593) Special:UserRights now lists automatic groups membership -* (bug 22364) Setting $wgUseExternalEditor to false no longer hides the reupload - link from file pages -* Fix bug introduced in MediaWiki 1.12: The author field in - $wgExtensionCredits is no longer sorted with sort() but rather used - as it appears in extensions as was the case before r30117 where it - was unintentionally sorted along with other fields. -* (bug 19334) Textarea no longer jumps when editing longer articles in IE8 -* Truncate summary of page moves in revision comment field to avoid broken - multibyte characters -* (bug 22540) ForeignApiRepos no longer try to store thumbnails that don't exist -* (bug 22551) Special:Resetpass now has a "Cancel" button that sends the user to - the page set in the &returnto parameter. -* (bug 19194) Search box in Modern skin doesn't focus with Safari/Chrome -* (bug 17790) Users instantly logged off on HughesNet - -== API changes in 1.16 == -* Added uiprop=changeablegroups to meta=userinfo -* Added usprop=gender to list=users -* (bug 18311) action=purge now works for images too -* Add parentid to prop=revisions output -* (bug 17832) action=delete returns 'unknownerror' instead of 'permissiondenied' - when the user is blocked -* (bug 18546) Added timestamp of new revision to action=edit output -* (bug 18554) Also list hidden revisions in list=usercontribs for privileged - users -* (bug 13049) "API must be accessed from the primary script entry point" error -* (bug 16422) Don't display help for format=jsonfm unless specifically requested -* Added PHP and database version to meta=siteinfo output -* (bug 18533) Add readonly message to meta=siteinfo output -* (bug 18518) Add clprop=hidden to prop=categories -* (bug 18710) Fixed internal error with empty parameter in action=paraminfo -* (bug 18709) Missing descriptions for some parameters in action=paraminfo - output -* (bug 18731) Show correct SVN links for extension modules in api.php?version -* (bug 18730) Add version information to action=paraminfo output -* (bug 18743) Add ucprop=size to list=usercontribs -* (bug 18749) Add generator flag to action=paraminfo output -* Make action=block respect $wgEnableUserEmail and $wgSysopEmailBans -* Made deleting file description pages without files possible -* (bug 18773) Add content flag to siprop=namespaces output -* (bug 18785) Add siprop=languages to meta=siteinfo -* (bug 14200) Added user and excludeuser parameters to list=watchlist and - list=recentchanges -* Added index, fromtitle and byteoffset fields to action=parse&prop=sections - output -* (bug 19313) action=rollback returns wrong revid on master/slave setups -* (bug 19323) action=parse doesn't return section tree on pages with Cite - warnings -* (bug 18720) Add anchor field to action=parse&prop=sections output -* (bug 19423) The initial file description page used caption in user lang - rather than UI lang -* (bug 17809) Add number of users in user groups to meta=siteinfo -* (bug 18533) Add readonly reason to readonly exception -* (bug 19528) Added XSLT parameter to API queries in format=xml -* (bug 19040) Fix prependtext and appendtext in combination with section - parameter in action=edit -* (bug 19090) Added watchlist parameter, deprecated watch and unwatch - parameter in action=edit -* Added fields to list=search output: size, wordcount, timestamp, snippet -* Where supported by backend, list=search adds a 'searchinfo' element with - optional info: 'totalhits' count and 'suggestion' alternate query term -* (bug 19907) $wgCrossSiteAJAXdomains added to allow specified (or all) - external domains to access api.php via AJAX, if the browser supports the - Access-Control-Allow-Origin HTTP header -* (bug 19999) Made metadata and properties of search results optional. Added - srprop and srinfo. -* (bug 20700) Add amprop=default to meta=allmessages to list default value for - customized messages -* Don't parse magic words in meta=allmessages, output messages unparsed -* (bug 21105) list=usercontribs can now list contribs for User:0 -* (bug 21085) list=deletedrevs no longer returns only one revision when - drcontinue param is passed -* (bug 21106) Deprecated parameters now tagged in action=paraminfo -* (bug 19004) Added support for tags -* (bug 21083) list=allusers no longer returns current timestamp for users - without registration date -* (bug 20967) action=edit allows creation of invalid titles -* (bug 19523) Add inprop=watched to prop=info -* (bug 21589) API: Separate summary and initial page text for uploads -* (bug 21817) list=usercontribs returns empty result for empty ucuser -* (bug 21441) meta=userinfo&uiprop=options no longer returns default options - for logged-in users under certain circumstances -* (bug 21945) Add chomp control in YAML -* Expand the thumburl to an absolute url to make it consistent with url and - descriptionurl -* (bug 20233) ApiLogin::execute() doesn't handle LoginForm :: RESET_PASS -* (bug 22061) API: add prop=headitems to action=parse -* (bug 22240) API: include time in siteinfo -* (bug 22241) Quick edit is still using the deprecated watch parameter (API: Setting default for watch/unwatch wrongly set) -* (bug 22245) blfilterredirect=nonredirects in blredirect mode wrongly filtering -* (bug 22248) Output extension URLs in meta=siteinfo&siprop=extensions -* Support key-params arrays in 'descriptionmsg' in meta=siteinfo&siprop=extensions -* (bug 21922) YAML output should quote asterisk when used as key -* (bug 22297) safesubst: to allow substitution without breaking transclusion -* (bug 18758) API read of watchlist's wl_notificationtimestamp -* (bug 20809) Expose EditFormPreloadText via the API -* (bug 18427) Comment (edit summary) parser option for API -* (bug 18608) API should provide list of CSS styles to apply to rendered output -* (bug 18771) List possible errors in action=paraminfo - -=== Languages updated in 1.16 === - -MediaWiki supports over 330 languages. Many localisations are updated -regularly. Below only new and removed languages are listed, as well as -changes to languages because of MediaZilla reports. - -* Capiznon (cps) (new) -* North Frisian (frr) (new) -* Kirmanjki (kiu) (new) -* Komi-Permyak (koi) (new) -* Karachay-Balkar (krc) (new) -* Latgalian (ltg) (new) -* Hill Mari (mrj) (new) -* Prussian (prg) (new) -* Romagnol (rgn) (new) -* Rusyn (rue) (new) -* Lower Silesian (sli) (new) -* Picard (pcd) (new) -* Uyghur (Arabic script) (ug-arab) (new) -* Upper Franconian (vmf) (new) -* Votic (vot) (new) -* Eastern Yiddish (ydd) (removed) -* Iriga Bicolano (bto) (removed) -* Ladin (lld) (removed) -* Palembang (plm) (removed) -* Megleno-Romanian (Greek script) (ruq-grek) (removed) -* Tamazight (tzm) (removed) - -* (bug 18474) Sorani (ckb - Central Kurdish) (renamed from ku-arab) -* Add PLURAL function for Scots Gaelic (gd) -* Add Estonian letters äöõšüž to linktrail (et) -* (bug 18776) Native name of Burmese language (my) -* (bug 18806) Use correct unicode characters in spelling of native Chuvash - (Чӑвашла) -* (bug 18864) Updated autonym for Zhuang language -* (bug 18308) Updated date formatting in Occitan (oc) -* (bug 19080) Added ăâîşţșțĂÂÎŞŢȘȚ to Romanion (ro) linktrail -* (bug 19286) Correct commafying function in Polish (pl) -* (bug 19441) Updated date formatting for Lithuanian -* (bug 19630) Added ÄäÇçĞğŇňÖöŞşÜüÝýŽž to Turkmen (tk) linktrail -* (bug 19949) New linktrail for Greek (el) -* (bug 19809) Korean (North Korea) (ko-kp) (new) -* (bug 19968) Fixed "Project talk" namespace name for Maltese (mt) -* (bug 21168) Added áâãàéêçíóôõúü to Portuguese (pt) linktrail -* (bug 21596) Change interwiki link for Kurdish (ku) +* (bug 23075) Correct MediaTransformError default width in gallery. +* (bug 16487) The Anonymous user account used on Postgres is no longer + displayed on Special:Listusers. +* (bug 23313) Move watchlisthidepatrolled above token in watchlist preferences + to enhance preference grouping. +* (bug 23298) Interwiki links with prefix only in log summaries now link to the + correct link. +* (bug 23284) Times are now rounded correctly. +* (bug 23375) Added ogv, oga, spx as extensions for ogg files. +* (bug 18408) All required permissions for uploading (upload, edit, create). + are now checked when loading Special:Upload. Toolbar link for Special:Upload + is no longer shown if the user does not have the required permissions. +* (bug 23397) texvc in html mode renders \sim as ˜ not ∼ +* (bug 23241) License selector should be disabled during upload of a new + version. +* (bug 23240) Add ID to namespace selector form on Special:Watchlist. +* The pipe | character in urls is now escaped. +* (bug 23422) mp3 files can now be moved. +* (bug 23448) MediaWiki:Summary-preview is now displayed instead of + MediaWiki:Subject-preview when previewing summary. +* (bug 23426) The {{REVISIONMONTH}} variable is now zero-padded and added + new variable {{REVISIONMONTH1}} when unpadded version is needed. +* Special:Userrights didn't recognize user as changing his/her own rights if + user did not capitalize first letter of username. +* (bug 23507) Add styles for printing wikitables. +* (bug 19586) Avoid JS errors in mwsuggest when using old browsers such + as Opera 8. +* (bug 23563) Old skins now support $wgUploadNavigationUrl and take into + account upload rights. +* (bug 1347) Render \phi in math using images, in order to create consistent + and correct render results. +* (bug 16573) Render \epsilon in math using images, in order to create + consistent and correct render results. +* (bug 22541) Support image redirects when using ForeignAPIRepo. +* (bug 22967) Make edit summary length cut-off behave correctly for multibyte + characters. +* (bug 8689) Long numeric lines no longer kill the parser. +* (bug 23740) Article::doRedirect() now use $extraQuery parameter correctly if + the $noRedir parameter is set to true. +* (bug 23688) Correct mime types for Office 2007 OpenXML documents. +* (bug 23787) Corrected $wgDefaultSkin's comment in DefaultSettings.php. +* (bug 23797) Xml::input() now allows '0' for the value parameter. +* (bug 23747) Make sure that on History pages, the RevDel button is not + accidentally activated when hitting enter. +* (bug 23845) Special:ListFiles now uses correct file names without underscores. +* Ask for permanent login in Special:Preferences only if $wgCookieExpiration > 0. +* (bug 16356) Repair dumpInterwiki.inc to use proper normalization. +* (bug 24006) deleteArchivedRevisions.php maintenance script now longer throws + a fatal error. +* (bug 23465) Don't ignore the predefined destination filename on + Special:Upload after following a red link. +* (bug 23642) Recognize mime types of MS OpenXML documents. +* (bug 22784) Normalise underscores and spaces in autocomments. +* (bug 19910) Headings of the form ===+\s+ are now displayed as valid headings. +* (bug 24022) Only check file extensions on the uploadpage when needed. +* (bug 24076) Recognize Office 2003 files with OpenXML trailers. +* (bug 24244) Updated comments in DefaultSettings.php to reflect. + Image: --> File: namespace rename. +* Make wfTimestamp recognize negative unix timestamp values. +* (bug 24401) SimpleSearch: No button/text indicating 'Search' if image is + disabled. +* (bug 23293) Do not show change tags when Special:RecentChanges(linked) or + Special:Newpages is transcluded into another page as it messes up the page. +* (bug 24517) LocalFile::newFromKey() and OldLocalFile::newFromKey() no longer + throw fatal errors. +* (bug 23380) Uploaded files that are larger than allowed by PHP now show a + useful error message. +* Uploading to a protected title will allow the user to choose a new name + instead of showing an error page. +* (bug 24425) Use Database::replace instead of delete/insert in + SqlBagOStuff::set to avoid query errors about duplicate keynames. +* (bug 15470) First letters of filenames are always capitalized by upload JS. +* (bug 21215) NoLocalSettings.php doesn't tolerate rewrite rules. +* (bug 21052) Fix link color for stubs in NewPages. +* (bug 24714) Usage of {{#dateformat: }} in wikis without $wgUseDynamicDates no + longer pollutes the parser cache. +* (bug 17031) Correct which characters the parser allows in tag attributes (a + letter, colon or underscore followed by 0 or more letters, numbers, colons, + underscores, hyphens, and/or periods). +* Save 200 useless queries on each category page view. +* Shell commands will now work on Linux in filesystems mounted noexec. +* (bug 24804) Corrected commafying in Polish and Ukrainian. +* "Difference between pages" is now displayed instead of "Difference between + revisions" on diffs when appropriate. +* (bug 23703) ForeignAPIRepo fails on findBySha1() when using a 1.14 install as + a repository due to missing 'name' attribute from the API list=allimages. +* (bug 24898) MediaWiki uses /tmp even if a vHost-specific tempdir is set, also + make wfTempDir() return a sane value for Windows on worst-case. +* (bug 24824) Support ImageMagick 6.5.6-2+ JPEG decoder size hint, to reduce + memory usage when such an ImageMagick is used for scaling. +* Disable multithreaded behaviour in recent ImageMagick, to avoid a deadlock + when a resource limit such as $wgMaxShellMemory is hit. +* (bug 24981) Allow extensions to access SpecialUpload variables again. +* (bug 20744) Wiki forgets about an uploaded file. +* (bug 17913) Don't show "older edit" when no older edit available. +* (bug 6204) TOC not properly rendered when using $wgMaxTocLevel. +* (bug 24977) The accesskey in history page now lead directly to the diff. + instead of alternating focus between the two buttons. +* (bug 24987) Special:ListUsers does not take external groups into account. +* (bug 20633) update.php has mixed language output. +* SQLite system table names are now never prefixed. +* (bug 25292) SkinSubPageSubtitle hook now passes the Skin object as second + parameter. +* (bug 25167) Correctly load JS fixes for IE6 (fixing a regression in 1.16). +* (bug 25367) wfShellExec() is more explicit when failing due to disabled + passthru(). +* (bug 25462) Fix double-escaping for section edit link tooltips. +* action=raw was removed for Special:Statistics. This information is still + available via the API. +* (bug 23934) Groups defined in $wgRevokePermissions but not in + $wgGroupPermissions now appear on Special:ListGroupRights. +* (bug 23923) Special:Prefixindex no longer shows results if nothing was + requested. +* (bug 22308) Search now finds text in default main page immediately after setup. +* (bug 25697) Make sure empty lines render in diff view. +* Use an actual minus sign in diff views, instead of a hyphen. +* (bug 23732) Clarified "n links" message on Special:MostLinkedFiles. +* (bug 23731) Clarified "n links" message on Special:MostLinkedTemplates. +* (bug 25642) A exception is now thrown instead of a fatal error when using + $wgSMTP without PEAR mail package. +* (bug 19633) When possible, Upscale small SVGs when creating thumbnails. +* (bug 11013) Database driver detection needs rewriting for robustness. +* (bug 13409) Installer prompts could use clarification--now has help boxes. +* (bug 16902) Installer spews warnings when exec() and dl() are not available. +* (bug 19129) Only show MyISAM/InnoDB when supported. +* (bug 17762) Only show other e-mail options when e-mail is globally enabled. +* Cache multiple sizes of InstantCommons thumbnails. +* (bug 25488) Disallowing anonymous users to read pages no longer throws error + on discussion pages with vector as default skin. +* (bug 24833) Files name in includes/diff/ are now less confusing. +* (bug 25713) SpecialPage::resolveAlias() now normalise spaces to underscores. +* (bug 25829) Special:Mypage and Special:Mytalk now forward oldid, diff and dir + parameters. +* (bug 25175) HTML file cache now honor $wgCacheDirectory if + $wgFileCacheDirectory is not set. +* (bug 13353) Diff3 version checks were too strict, did not detect working diff3. +* (bug 25843) Links to special pages using link= attribute on images are now. + normalised like normal links to special pages. +* (bug 21364) External links using link= attribute on images now respect + $wgExternalLinkTarget. +* (bug 17789) Added a note to the total views on Special:Statistics saying that + is doesn't count non-existing pages and special pages. +* (bug 17996) HTTP redirects are now combined when requesting a special page. +* (bug 19944) Link on image thumbnails no longer link to "Media:" namespace in + some cases. +* (bug 25670) wfFindFile() now checks the namespace of the given title, only + "File" and "Media" are allowed now. +* (bug 25872) Rename the HttpRequest class to MWHttpRequest to avoid conflict + with php extension that defines same class. +* (bug 20591) There's now a different message on Special:MovePage when + $wgFixDoubleRedirects is set to false. +* Fixed PHP warnings when updating a broken MySQL database. +* (bug 26023) Corrected deleteBacth.php's documentation. +* (bug 25451) Improved datetime representation in 32 bit php >= 5.2. +* Show "skin does not exist error" only when the skin is inputted in the wrong + case. +* (bug 26164) Potential html injection when the database server isn't available. +* (bug 26160) Upload description set by extensions are not propagated. +* (bug 9675) generateSitemap.php now takes an --urlpath parameter to allow + absolute URLs in the sitemap index (as required e.g. by Google). +* Partial workaround for bug 6220: at least make files on shared repositories + show up as (struck-out) bluelinks instead of redlinks on Special:WantedFiles. +* rebuildFileCache.php no longer creates inappropriate cache files for redirects. +* (bug 25512) Subcategory list should not include category prefix for members. +* (bug 10871) Javascript and CSS pages in MediaWiki namespace are no longer + treated as wikitext on preview. +* Page existence is now not revealed (in the colour of the tabs) to users who + cannot read the page in question. +* (bug 22753) Output from update.php is more clear when things changed, entries + indicating nothing changed are now all prefixed by "..." +* (bug 16019) $wgArticlePath = "/$1" no longer breaks API edit/watch actions. +* (bug 18372) File types blacklisted by $wgFileBlacklist will no longer be shown as + "Permitted file types" on the upload form. +* (bug 26540) Fixed wrong call to applyPatch in MysqlUpdater. +* (bug 26034) Make the "View / Read" tab in content_navigation style tabs remain + selected when the action is "purge". +* (bug 26733) Wrap initial table creation in transaction. +* (bug 26208) Mark directionality of some interlanguage links. +* (bug 26716) Provide link to instructions for external editor related preferences. +* (bug 26961) Hide anon edits in watchlist preference now actually works. +* (bug 1379) Installer directory conflicts with some hosts' configuration panel. +* (bug 27781) Installer does not warn about 5.1.x. Added a compatibility function + for array_key_exists(). +* Fix XML well-formedness on a few pages when $wgHtml5 is true (the default). +* (bug 28069) MediaWiki fails streaming files when mod_deflate and ob_gzhandler + are also set. +* (bug 26223) Concurrently moving an article to different titles leaks a + redirect revision with no page. +* (bug 15641) Fixed permissions checks in Special:Import which allowed users + without the 'import' permission to import pages from configured import sources. +* (bug 26449) Keep underlines from headings outside of tables and thumbs by + adding overflow:hidden to h1,h2,h3,h4,h5,h6 (also fixes editsection bunching). +* (bug 26708) Remove background-color:white from tables in Monobook and Vector. +* (bug 26781) {{PAGENAME}} and related parser functions escape their output better. +* (bug 26716) Provide link to instructions for external editor related preferences + and add a comment to the ini control file explaining what is going on. +* (bug 28422) Remove color:black from tables in Monobook and Vector. And add it + to table.wikitable instead. +* (bug 27560) Search queries no longer fail in walloon language. +* (bug 27700) The upload protection can now also be set for files that do not + exist. +* (bug 28034) uploading file to local wiki when file exists on shared repository + (commons) gives spurious info in the warning message. +* Usernames get lost when selecting different sorts on Special:listfiles. +* (bug 28166) UploadBase assumes that 'edit' and 'upload' rights are not per + page restrictions. +* (bug 28242) Make redirects generated by urls containing a local interwiki + prefix be a 301 instead of a 302. +* (bug 28568) Entries in the iwlinks table are now removed on page deletion. +* (bug 28306) Fix exposure of suppressed usernames in ForeignDBRepo. +* (bug 28444) Fix regression: edit-on-doubleclick retains revision id again. +* UtfNormal::cleanUp on an invalid utf-8 sequence no longer returns false if + intl installed. +* (bug 26729) Category pages should return 404 if they do not exist and have no + members. +* (bug 28214) When page not found, sends malformed HTTP/1.x instead of HTTP/1.1 + in header of response. +* (bug 27634) TOC title appears in wrong language. +* (bug 27761) Fix regression: pages with Esperanto titles containing convertible + character sequences became unreachable. +* (bug 27508) SVGMetadataExtractor takes too much resources on huge svgs. +* (bug 27465) SVG thumbnail generation. +* (bug 27467) preload can leave UNIQ. +* (bug 27539) Allow attributes beginning with a digit in wiktext tag parameters. +* (bug 27328) using relative paths in CSS imports in MediaWiki:Common.css broken + in 1.17. +* (bug 27333) Fix repetitive last-seen time queries on page history. +* (bug 26250, bug 23817) Fix wfObjectToArray() to descend into arrays; fixes + processing of JSON return values for ForeignAPIRepo when native json module + not present. +* (bug 25675) Fix search suggestions for Special: pages with spaces. +* (bug 25571) Xml::encodeJsVar now passes floats natively instead of converting + to strings. +* (bug 27338) Gallery in 1.17 breaks for audio/video + ogghandler. +* (bug 27302) Don't append the current timestamp for user/site modules when no + user/site JS/CSS is present. +* (bug 27016) dumpTextPass.php now consider the "output" parameter. +* (bug 22606) don't send the "someone registred an account" message when setting + email address (i.e. old one empty) in user preferences. +* (bug 26458) Section edit links appear on pages that user does not have right + to edit. +* (bug 28611) Don't die in SqlBagOStuff::incr() if there's a race condition. +* (bug 16886) Sister projects box moves down the extract of the first result + in IE 7. +* (bug 17398) Fixed "link" parameter in image links with "thumb" or "frame" + parameter. + +=== API changes in 1.17 === + +* BREAKING CHANGE: action=patrol now requires POST. +* BREAKING CHANGE: patrol token is no longer the same as edit token. +* BREAKING CHANGE: Session keys returned by ApiUpload are now strings instead + of integers. +* BREAKING CHANGE: (bug 25303) Fix API parameter integer validation to actually + enforce validation on the input values in addition to giving a warning. + Also add flag to enforce (die) if integer out of range. +* (bug 24650) Fix API to work with categorylinks changes. +* action=parse now correctly returns an error for nonexistent pages. +* (bug 27201) Special:WhatLinksHere output no longer contains duplicate IDs. +* (bug 26560) On allusers if limit < total number of users, last user gets + duplicated. +* (bug 27715) imageinfo didn't respect revdelete. +* (bug 27479) API error when using both prop=pageprops and + prop=info&inprop=displaytitle. +* (bug 27862) Useremail module didn't properly return success on success. +* (bug 27590) prop=imageinfo now allows querying the media type. +* (bug 27587) list=filearchive now outputs full title info. +* (bug 27897) list=allusers and list=users list hidden users. +* (bug 22738) Allow filtering by action type on query=logevent. +* (bug 22764) uselang parameter for action=parse. +* (bug 22944) API: watchlist options are inconsistent. +* (bug 22868) don't list infinite block expiry date as "now" in API logevents. +* (bug 22290) prop=revisions now outputs "comment" field even when comment. + is empty, for consistency with list=recentchanges. +* (bug 19721) API action=help should have a way to just list for a specific + module. +* (bug 23458) Add support for pageid parameter to action=parse requests. +* (bug 23460) Parse action should have a section option. +* (bug 21346) Make deleted images searchable by hash. +* (bug 23461) Normalise usage of parameter names in parameter descriptions. +* (bug 23548) Allow access of another users watchlist through watchlistraw + using token and username. +* (bug 23524) Api Modules as followup to bug 14473 (Add iwlinks table to + track inline interwiki link usage). +* Add pltitles and tltemplates to prop=links and prop=templates respectively, + similar to prop=categories's clcategorie. +* (bug 23834) Invalid "thumbwidth" and "thumbheight" in "imageinfo" query when + thumbnailing larger than original image. +* (bug 23835) Need "thumbmime" result in "imageinfo" query. +* (bug 23851) Repair diff for file redirect pages. +* (bug 24009) Include implicit groups in action=query&list=users&usprop=groups. +* (bug 24016) API: Handle parameters specified in simple string syntax + ( 'paramname' => 'defaultval' ) correctly when outputting help. +* (bug 24089) Logevents causes PHP Notice if leprop=title isn't supplied. +* (bug 23473) Give description of properties on all modules. +* (bug 24136) unknownerror when adding new section without summary, but + forceditsummary. +* (bug 22339) Added srwhat=nearmatch to list=search to get a "go" result. +* (bug 24303) Added new &servedby parameter to all actions which adds the + hostname that served the request to the result. It is also added + unconditionally on error. +* (bug 24185) Titles in the Media and Special namespace are now supported for + title normalization in action=query. Special pages have their name resolved + to the local alias. +* (bug 24296) Added converttitles parameter to convert titles to their + canonical language variant. +* (bug 23936) Add "displaytitle" to query/info API. +* (bug 24485) Make iwbacklinks a generator, optionally display iwprefix and + iwtitle. +* (bug 24564) Fix fatal errors when using list=deletedrevs, prop=revisions or + one of the backlinks generators with limit=max. +* (bug 24656) API's parse module needs option to disable PP report. +* PARAM_REQUIRED parameter flag added. If this flag is set, and the end user + does not set the parameter, the API will automatically throw an error. +* (bug 24665) When starttimestamp is not specified, fake it by setting it to + NOW, not to the timestamp of the last edit. +* (bug 24677) axto= parameters added to allcategories, allimages, alllinks, + allmessages, allpages, and allusers. +* (bug 24236) Add add, remove, add-self, remove-self tags to + meta=siteinfo&siprop=usergroups. +* (bug 24484) Add prop=pageprops module. +* (bug 24330) Add &redirect parameter to ?action=edit. +* (bug 24722) For list=allusers&auprop=blockinfo, only show blockedby and + blockreason if the user is actually blocked. +* Add format=dump and format=dumpfm, outputs results in PHP's var_dump() format. +* For required string parameters, if '' is provided, this is now classed as + missing. +* (bug 24724) list=allusers is out by 1 (shows total users - 1). +* (bug 24166) API error when using rvprop=tags. +* Introduced "asynchronous download" mode for upload-by-url. Requires + $wgAllowAsyncCopyUploads to be true. +* sinumberingroup correctly gives size of 'user' group, and omits size of + implicit groups rather than showing 0. +* (bug 25248) API: paraminfo errors with certain modules. +* (bug 24792) API help for action=purge sometimes wrongly stated whether a + POST request was needed due to cache pollution. +* Added iiprop=parsedcomment to prop=imageinfo, similar to prop=revisions. +* Added rvparse to parse revisions. For performance reasons if this option is + used, rvlimit is enforced to 1. +* (bug 25748) If a action=parse request provides an oldid that is actually the + current revision id, try the parser cache, and save it to it if necessary. +* (bug 25463) Export header should not be shown if no pages were requested, to + reduce confusion. +* (bug 25648) API discovery information has been added as RSD link in page. + <head> and by providing an API module action=rsd. Added hook + ApiRsdServiceApis for extensions to add their own service to the services + list. +* The HTML of diff output markers has changed. Hyphens are now minus signs, + empty markers are now filled with non-breaking-space characters. +* (bug 25741) Add more data to list=search's srprop. +* (bug 25760) counter property still reported by the API when + $wgDisableCounters enabled. +* (bug 25987) prop=info&inprop=watched now also works for missing pages. +* (bug 26006) prop=langlinks now allows obtaining full URL. +* (bug 26075) ApiDelete.php now calls correctly ArticleDelete hook. +* (bug 26089) add block expiration to blockinfo. +* (bug 26125) prop=imageinfo&iiprop=size now returns the page count if the + file is a multi-page file. +* (bug 10268) Added linktodiffs parameter on action=feedwatchlist. +* (bug 26219) Show API limits for multi values in description. +* (bug 28070) Fix watchlist RSS for databases that store timestamps in a + real timestamp field. +* (bug 27722) list=filearchive now supports revdel. + +=== Language support changes in 1.17 === + +MediaWiki supports over 330 languages. Many localizations are updated regularly. + +The following languages were added: + +* Moroccan Spoken Arabic (ary) +* Banjar (bjn) +* Kabardian (kdb) +* Kabardian (Cyrillic) (kbd-cyrl) +* Latgalian (ltg) +* Minangkabau (min) +* Dutch (informal) (nl-informal) +* Rusyn (rue) + +Other significant changes to MediaWiki's language support: + +* Fiji Hindi (Devangari script) was removed. +* Removed deprecated language code "dk" (Danish), use "da" instead. +* Link trail added for sl and sh. +* (bug 27633) Add characters to linkTrail for Portuguese (pt and pt-br). +* (bug 23156) Commafy and search normalization updated for Belarusian + (Taraškievica). +* (bug 23283) Native name for Old English -> Ænglisc. +* (bug 23364) Native name for Azerbaijani -> Azərbaycanca. +* (bug 24593) Native name for Sorani now uses only Arabic script. +* (bug 24628) Generic translations for NS_USER/NS_USER_TALK for Esperanto. +* (bug 24917) Polish as fallback for Kashubia. +* (bug 24794) Tatar link trail updated. +* Esperanto date format corrected. +* (bug 28159) Change interwiki name of language kbd to Къэбэрдеибзэ / + Qabardjajəbza. +* (bug 28184) Namespaces for the Latgalian Wikipedia. +* (bug 25010) Bashkir-language interwikis: linktext change from Башҡорт + to Башҡортса. +* (bug 26395) Change name of Cornish language to Kernowek. + +=== Other changes in 1.17 === + +* DatabaseFunctions.php that was needed for compatibility with pre-1.3 + extensions has been removed. +* XmlFunctions.php has been removed. Use the Xml or Html classes as appropriate. +* The FailFunction "error handling" method has now been removed +* Sysops now have the "suppressredirect" right by default +* Removed $wgRemoteUploads. It was not well supported and superseded by + $wgUploadNavigationUrl. +* (bug 26253) $wgPostCommitUpdateList has been removed +* The PHPUnit test suite has been removed from this release due to serious issues + which should be resolved by the 1.18 release. +* Oracle DB now uses the __destruct fuction to commit/close connection as it + doesn't commit on close if transation is triggered in OCI. == Compatibility == -MediaWiki 1.16 requires PHP 5.1 (5.2 recommended). PHP 4 is no longer supported. +MediaWiki 1.17 requires PHP 5.2.3 or later. + +MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but +support for them is somewhat less mature. There is experimental support for IBM +DB2 and Microsoft SQL Server. -MySQL 3.23.x is no longer supported; some older hosts may need to upgrade. -At this time we still recommend 4.0, but 4.1/5.0 will work fine in most cases. +The supported versions are: +* MySQL 4.0 or later +* PostgreSQL 8.3 or later +* SQLite 3 +* Oracle 9.0.1 or later == Upgrading == -1.16 has several database changes since 1.15, and will not work without schema +1.17 has several database changes since 1.16, and will not work without schema updates. -If upgrading from before 1.11, and you are using a wiki as a commons reposito- -ry, make sure that it is updated as well. Otherwise, errors may arise due to +If upgrading from before 1.11, and you are using a wiki as a commons repository, +make sure that it is updated as well. Otherwise, errors may arise due to database schema changes. If upgrading from before 1.7, you may want to run refreshLinks.php to ensure @@ -1066,43 +819,29 @@ break. Don't forget to always back up your database before upgrading! See the file UPGRADE for more detailed upgrade instructions. +For notes on 1.16.x and older releases, see HISTORY. -=== Caveats === +== Online documentation == -Some output, particularly involving user-supplied inline HTML, may not -produce 100% valid or well-formed XHTML output. Testers are welcome to -set $wgMimeType = "application/xhtml+xml"; to test for remaining problem -cases, but this is not recommended on live sites. (This must be set for -MathML to display properly in Mozilla.) +Documentation for both end-users and site administrators is available on +MediaWiki.org, and is covered under the GNU Free Documentation License (except +for pages that explicitly state that their contents are in the public domain): -For notes on 1.15.x and older releases, see HISTORY. + http://www.mediawiki.org/wiki/Documentation +== Mailing list == -=== Online documentation === +A mailing list is available for MediaWiki user support and discussion: -Documentation for both end-users and site administrators is currently being -built up on MediaWiki.org, and is covered under the GNU Free Documentation -License (except for pages that explicitly state that their contents are in -the public domain) : - - http://www.mediawiki.org/wiki/Documentation - - -=== Mailing list === - -A MediaWiki-l mailing list has been set up distinct from the Wikipedia -wikitech-l list: - - http://lists.wikimedia.org/mailman/listinfo/mediawiki-l + http://lists.wikimedia.org/mailman/listinfo/mediawiki-l A low-traffic announcements-only list is also available: - http://lists.wikimedia.org/mailman/listinfo/mediawiki-announce + http://lists.wikimedia.org/mailman/listinfo/mediawiki-announce It's highly recommended that you sign up for one of these lists if you're going to run a public MediaWiki, so you can be notified of security fixes. - -=== IRC help === +== IRC help == There's usually someone online in #mediawiki on irc.freenode.net diff --git a/UPGRADE b/UPGRADE index 7cd302e9..9e7d0353 100644 --- a/UPGRADE +++ b/UPGRADE @@ -1,3 +1,4 @@ + This file provides an overview of the MediaWiki upgrade process. For help with specific problems, check @@ -28,7 +29,7 @@ the upgrade scripts are somewhat robust, there is no guarantee that things will not fail, leaving the database in an inconsistent state. http://www.mediawiki.org/wiki/Manual:Backing_up_a_wiki provides an overview of -the upgrade process. You should also refer to the documentation for your +the backup process. You should also refer to the documentation for your database management system for information on backing up a database, and to your operating system documentation for information on making copies of files. @@ -50,10 +51,15 @@ deleted file archives, and any custom skins. === Perform the database upgrade === -You will need to have $wgDBadminuser and $wgDBadminpassword set in your -LocalSettings.php, see there for more info. +==== From the web ==== + +If you browse to the web-based installation script (usually at +/mw-config/index.php) from your wiki installation you can follow the script and +upgrade your database in place. + +==== From the command line ==== -From the command line, browse to the "maintenance" directory and run the +From the command line, browse to the "maintenance" directory and run the update.php script to check and update the schema. This will insert missing tables, update existing tables, and move data around as needed. In most cases, this is successful and nothing further needs to be done. @@ -67,6 +73,9 @@ notes to check for configuration changes which would alter the expected behaviour of MediaWiki. === Check installed extensions === + +Extensions usually need to be upgraded at the same time as the MediaWiki core. + In MediaWiki 1.14 some extensions are migrated into the core. Please see the HISTORY section "Migrated extensions" and disable these extensions in your LocalSettings.php @@ -80,7 +89,17 @@ and quirks which reveal themselves. You should also test any extensions, and upgrade these if necessary. -== Upgrading from 1.8 wikis == +== Upgrading from 1.16 or earlier == + +If you have a Chinese or Japanese wiki ($wgLanguageCode is set to one +of "zh", "ja", or "yue") and you are using MySQL fulltext search, you +will probably want to update the search index. + +In the "maintenance" directory, run the updateDoubleWidthSearch.php +script. This will update the searchindex table for those pages that +contain double-byte latin characters. + +== Upgrading from 1.8 or earlier == MediaWiki 1.9 and later no longer keep default localized message text in the database; 'MediaWiki:'-namespace pages that do not exist in the @@ -94,24 +113,19 @@ Note that the large number of deletions may cause older edits to expire from the list on Special:Recentchanges, although the deletions themselves will be hidden by default. (Click "show bot edits" to list them.) - See RELEASE-NOTES for more details about new and changed options. - -== Upgrading from 1.7 wikis == +== Upgrading from 1.7 or earlier == $wgDefaultUserOptions now contains all the defaults, not only overrides. If you're setting this as a complete array(), you may need to change it to set only specific items as recommended in DefaultSettings.php. -== Upgrading from 1.6 wikis == +== Upgrading from 1.6 or earlier == $wgLocalTZoffset was in hours, it is now using minutes. -Link autonumbering got fixed (#5918) for protocols other than http. - - 'irc://irc.server.tld/' render as a link with a chat icon - - '[irc://irc.server.tld]' render as an autonumbered link: [1] -== Upgrading from pre-1.5 wikis == +== Upgrading from 1.5 or earlier == Major changes have been made to the schema from 1.4.x. The updater has not been fully tested for all conditions, and might well break. @@ -167,69 +181,7 @@ If using Memcached, you must enabled it differently now: should be replaced with: $wgMainCacheType = CACHE_MEMCACHED; - -=== Web installer === - -You can use the web-based installer wizard if you first remove the -LocalSettings.php file; be sure to give the installer the same -information as you did on the original install (language/encoding, -database name, password, etc). This will also generate a fresh -LocalSettings.php, which you may need to customize. - -You may change some settings during the install, but be very careful! -Changing the encoding in particular will generally leave you with a -lot of corrupt pages, particularly if your wiki is not in English. - -=== Command-line upgrade === - -Additionally, as of 1.4.0 you can run an in-place upgrade script from -the command line, keeping your existing LocalSettings.php. This requires -that you set $wgDBadminuser and $wgDBadminpassword with an appropriate -database user and password with privileges to modify the database structure. - -Once the new files are in place, go into the maintenance subdirectory and -run the script: - - php update.php - -See caveats below on upgrading from 1.3.x or earlier. - - -== Backups! == - -To upgrade an existing MediaWiki installation, first BACK UP YOUR WIKI! -If something goes wrong, you want to be able to start again. - -Your image files, configuration, etc can simply be copied or archived as -you would any other files. (Make sure that the contents of your -LocalSettings.php are not accidentally made public, as this contains -a database password.) - -To back up the database, use the tools provided by your service provider -(if applicable) or the standard mysqldump or pg_dump programs. - -For general help on mysqldump: -http://dev.mysql.com/doc/mysql/en/mysqldump.html - -WARNING: If using MySQL 4.1.x, mysqldump's charset conversion may in -some cases damage data in your wiki. If necessary, set the charset -option to 'latin1' to avoid the conversion. - -For general help on pg_dump: -http://www.postgresql.org/docs/current/static/app-pgdump.html - - -== Caveats == - -=== Postgres === - -Postgres support is new, and much of the upgrade instructions may -not apply. The schema was changed significantly from 1.7 to 1.8, -so you will need to at least use the update.php or web installer, -as described above. - - -=== Upgrading from 1.4.2 or earlier === +== Upgrading from 1.4.2 or earlier == 1.4.3 has added new fields to the sitestats table. These fields are optional and help to speed Special:Statistics on large sites. If you @@ -241,7 +193,7 @@ manually run the SQL commands from this file: maintenance/archives/patch-ss_total_articles.sql -=== Upgrading from 1.4rc1 or earlier betas === +== Upgrading from 1.4rc1 or earlier betas == The logging table has been altered from 1.4beta4 to 1.4beta5 and again in 1.4.0 final. Copy in the new files and use the web @@ -254,7 +206,7 @@ files: maintenance/archives/patch-logging-title.sql -=== Upgrading from 1.3.x === +== Upgrading from 1.3 or earlier == This should generally go smoothly. @@ -272,19 +224,20 @@ to this: As well as new messages, the processing of some messages has changed. If you have customized them, please compare the new format using Special:Allmessages or the relevant LanguageXX.php files: - copyrightwarning - dberrortext - editingcomment (was named commentedit) - editingsection (was named sectionedit) - numauthors - numedits - numtalkauthors - numtalkedits - numwatchers - protectedarticle - searchresulttext - showhideminor - unprotectedarticle + +* copyrightwarning +* dberrortext +* editingcomment (was named commentedit) +* editingsection (was named sectionedit) +* numauthors +* numedits +* numtalkauthors +* numtalkedits +* numwatchers +* protectedarticle +* searchresulttext +* showhideminor +* unprotectedarticle Note that the 1.3 beta releases included a potential vulnerability if PHP is configured with register_globals on and the includes directory is @@ -296,7 +249,7 @@ send them a kind note explaining that it can expose their servers and their customers to attacks. -=== Upgrading from 1.2.x === +== Upgrading from 1.2 or earlier == If you've been using the MediaWiki: namespace for custom page templates, note that things are a little different. The Template: namespace has been @@ -316,7 +269,7 @@ to dump the database to SQL, run it through iconv or another conversion tool, and restore it. Sorry. -=== Upgrading from 1.1.x or earlier === +== Upgrading from 1.1 or earlier == This is less thoroughly tested, but should work. @@ -330,7 +283,7 @@ scripts in maintenance/archives before the installer is able to pick up with remaining updates. -=== Upgrading from UseModWiki or old "phase 2" Wikipedia code === +== Upgrading from UseModWiki or old "phase 2" Wikipedia code == There is a semi-maintained UseModWiki to MediaWiki conversion script at maintenance/importUseModWiki.php; it may require tweaking and customization @@ -341,3 +294,5 @@ output SQL statements; direct these to a file and then run that into your database. You will have to rebuild the links tables etc after importing. + + diff --git a/api.php b/api.php index 7c80f734..5c675b06 100644 --- a/api.php +++ b/api.php @@ -17,7 +17,7 @@ * * 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., - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * * @file @@ -34,6 +34,9 @@ * in the URL. */ +// So extensions (and other code) can check whether they're running in API mode +define( 'MW_API', true ); + // Initialise common code require ( dirname( __FILE__ ) . '/includes/WebStart.php' ); @@ -41,18 +44,7 @@ wfProfileIn( 'api.php' ); $starttime = microtime( true ); // URL safety checks -// -// See RawPage.php for details; summary is that MSIE can override the -// Content-Type if it sees a recognized extension on the URL, such as -// might be appended via PATH_INFO after 'api.php'. -// -// Some data formats can end up containing unfiltered user-provided data -// which will end up triggering HTML detection and execution, hence -// XSS injection and all that entails. -// -if ( $wgRequest->isPathInfoBad() ) { - wfHttpError( 403, 'Forbidden', - 'Invalid file extension found in PATH_INFO or QUERY_STRING.' ); +if ( !$wgRequest->checkUrlExtension() ) { return; } @@ -98,9 +90,6 @@ if ( $wgCrossSiteAJAXdomains && isset( $_SERVER['HTTP_ORIGIN'] ) ) { } } -// So extensions can check whether they're running in API mode -define( 'MW_API', true ); - // Set a dummy $wgTitle, because $wgTitle == null breaks various things // In a perfect world this wouldn't be necessary $wgTitle = Title::makeTitle( NS_MAIN, 'API' ); diff --git a/config/Installer.php b/config/Installer.php deleted file mode 100644 index f00a850d..00000000 --- a/config/Installer.php +++ /dev/null @@ -1,2353 +0,0 @@ -<?php - -# MediaWiki web-based config/installation -# Copyright (C) 2004 Brion Vibber <brion@pobox.com>, 2006 Rob Church <robchur@gmail.com> -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - -if( !defined( 'MEDIAWIKI_INSTALL' ) ) { - die( 'Not an entry point.' ); -} - -error_reporting( E_ALL | E_STRICT ); -header( "Content-type: text/html; charset=utf-8" ); -header( 'X-Frame-Options: DENY' ); -@ini_set( "display_errors", true ); - -# In case of errors, let output be clean. -$wgRequestTime = microtime( true ); - -// Run version checks before including other files -// so people don't see a scary parse error. -require_once( "$IP/maintenance/install-utils.inc" ); -install_version_checks(); - -require_once( "$IP/includes/Defines.php" ); -require_once( "$IP/includes/DefaultSettings.php" ); -require_once( "$IP/includes/AutoLoader.php" ); -require_once( "$IP/includes/MagicWord.php" ); -require_once( "$IP/includes/Namespace.php" ); -require_once( "$IP/includes/ProfilerStub.php" ); -require_once( "$IP/includes/GlobalFunctions.php" ); -require_once( "$IP/includes/Hooks.php" ); -require_once( "$IP/includes/Exception.php" ); -require_once( "$IP/includes/json/Services_JSON.php" ); -require_once( "$IP/includes/json/FormatJson.php" ); - -$wgMaxShellMemory = 0; - -# If we get an exception, the user needs to know -# all the details -$wgShowExceptionDetails = true; -$wgShowSQLErrors = true; -wfInstallExceptionHandler(); -## Databases we support: - -$ourdb = array(); - -$ourdb['mysql'] = array( - 'fullname' => 'MySQL', - 'havedriver' => 0, - 'compile' => 'mysql', - 'bgcolor' => '#ffe5a7', - 'rootuser' => 'root', - 'serverless' => false -); - -$ourdb['postgres'] = array( - 'fullname' => 'PostgreSQL', - 'havedriver' => 0, - 'compile' => 'pgsql', - 'bgcolor' => '#aaccff', - 'rootuser' => 'postgres', - 'serverless' => false -); - -$ourdb['sqlite'] = array( - 'fullname' => 'SQLite', - 'havedriver' => 0, - 'compile' => 'pdo_sqlite', - 'bgcolor' => '#b1ebb1', - 'rootuser' => '', - 'serverless' => true -); - -$ourdb['mssql'] = array( - 'fullname' => 'MSSQL', - 'havedriver' => 0, - 'compile' => 'mssql_not_ready', # Change to 'mssql' after includes/DatabaseMssql.php added; - 'bgcolor' => '#ffc0cb', - 'rootuser' => 'administrator', - 'serverless' => false -); - -$ourdb['ibm_db2'] = array( - 'fullname' => 'DB2', - 'havedriver' => 0, - 'compile' => 'ibm_db2', - 'bgcolor' => '#ffeba1', - 'rootuser' => 'db2admin', - 'serverless' => false -); - -$ourdb['oracle'] = array( - 'fullname' => 'Oracle', - 'havedriver' => 0, - 'compile' => 'oci8', - 'bgcolor' => '#ffeba1', - 'rootuser' => 'sys', - 'serverless' => false -); - -?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" lang="en" dir="ltr"> -<head> - <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> - <meta name="robots" content="noindex,nofollow"/> - <title>MediaWiki <?php echo htmlspecialchars( $wgVersion ); ?> Installation - - - - - -
-
-
-
- -

MediaWiki Installation

- -Setup has completed, your wiki is configured.

-

Please delete the /config directory for extra security.

" ); -} - -if( file_exists( "./LocalSettings.php" ) ) { - writeSuccessMessage(); - dieout( '' ); -} - -if( !is_writable( "." ) ) { - dieout( "

Can't write config file, aborting

- -

In order to configure the wiki you have to make the config subdirectory - writable by the web server. Once configuration is done you'll move the created - LocalSettings.php to the parent directory, and for added safety you can - then remove the config subdirectory entirely.

- -

To make the directory writable on a Unix/Linux system:

- -
-	cd " . htmlspecialchars( dirname( dirname( __FILE__ ) ) ) . "
-	chmod a+w config
-	
- -

Afterwards retry to start the setup.

" ); -} - - -require_once( "$IP/maintenance/updaters.inc" ); - -class ConfigData { - function getEncoded( $data ) { - # removing latin1 support, no need... - return $data; - } - function getSitename() { return $this->getEncoded( $this->Sitename ); } - function getSysopName() { return $this->getEncoded( $this->SysopName ); } - function getSysopPass() { return $this->getEncoded( $this->SysopPass ); } - - function setSchema( $schema, $engine ) { - $this->DBschema = $schema; - if ( !preg_match( '/^\w*$/', $engine ) ){ - $engine = 'InnoDB'; - } - switch ( $this->DBschema ) { - case 'mysql5': - $this->DBTableOptions = "ENGINE=$engine, DEFAULT CHARSET=utf8"; - $this->DBmysql5 = 'true'; - break; - case 'mysql5-binary': - $this->DBTableOptions = "ENGINE=$engine, DEFAULT CHARSET=binary"; - $this->DBmysql5 = 'true'; - break; - default: - $this->DBTableOptions = "TYPE=$engine"; - $this->DBmysql5 = 'false'; - } - $this->DBengine = $engine; - - # Set the global for use during install - global $wgDBTableOptions; - $wgDBTableOptions = $this->DBTableOptions; - } -} - -?> - - - - -

Checking environment...

-

Please include all of the lines below when reporting installation problems.

-
    -PHP " . htmlspecialchars( phpversion() ) . " installed\n"; - -error_reporting( 0 ); -$phpdatabases = array(); -foreach (array_keys($ourdb) as $db) { - $compname = $ourdb[$db]['compile']; - if( extension_loaded( $compname ) || ( mw_have_dl() && dl( "{$compname}." . PHP_SHLIB_SUFFIX ) ) ) { - array_push($phpdatabases, $db); - $ourdb[$db]['havedriver'] = 1; - } -} -error_reporting( E_ALL | E_STRICT ); - -if (!$phpdatabases) { - print "Could not find a suitable database driver!
      "; - foreach (array_keys($ourdb) AS $db) { - $comp = $ourdb[$db]['compile']; - $full = $ourdb[$db]['fullname']; - print "
    • For $full, compile PHP using --with-$comp, " - ."or install the $comp.so module
    • \n"; - } - echo '
    '; - dieout( '' ); -} - -print "
  • Found database drivers for:"; -$DefaultDBtype = ''; -foreach (array_keys($ourdb) AS $db) { - if ($ourdb[$db]['havedriver']) { - if ( $DefaultDBtype == '' ) { - $DefaultDBtype = $db; - } - print " ".$ourdb[$db]['fullname']; - } -} -print "
  • \n"; - -if( wfIniGetBool( "register_globals" ) ) { - ?> -
  • -
    - Warning: - PHP's register_globals option is enabled. Disable it if you can. -
    - MediaWiki will work, but your server is more exposed to PHP-based security vulnerabilities. -
  • -
  • Fatal: magic_quotes_runtime is active! - This option corrupts data input unpredictably; you cannot install or use - MediaWiki unless this option is disabled.
  • -
  • Fatal: magic_quotes_sybase is active! - This option corrupts data input unpredictably; you cannot install or use - MediaWiki unless this option is disabled.
  • -
  • Fatal: mbstring.func_overload is active! - This option causes errors and may corrupt data unpredictably; - you cannot install or use MediaWiki unless this option is disabled.
  • -
  • Fatal: zend.ze1_compatibility_mode is active! - This option causes horrible bugs with MediaWiki; you cannot install or use - MediaWiki unless this option is disabled.
  • - safeMode = true; - ?> -
  • Warning: PHP's - safe mode is active. - You may have problems caused by this, particularly if using image uploads. -
  • - safeMode = false; -} - -$sapi = htmlspecialchars( php_sapi_name() ); -print "
  • PHP server API is $sapi; "; -$script = defined('MW_INSTALL_PHP5_EXT') ? 'index.php5' : 'index.php'; -if( $wgUsePathInfo ) { - print "ok, using pretty URLs ($script/Page_Title)"; -} else { - print "using ugly URLs ($script?title=Page_Title)"; -} -print "
  • \n"; - -$conf->xml = function_exists( "utf8_encode" ); -if( $conf->xml ) { - print "
  • Have XML / Latin1-UTF-8 conversion support.
  • \n"; -} else { - dieout( "PHP's XML module is missing; the wiki requires functions in - this module and won't work in this configuration. - If you're running Mandrake, install the php-xml package." ); -} - -# Check for session support -if( !function_exists( 'session_name' ) ) - dieout( "PHP's session module is missing. MediaWiki requires session support in order to function." ); - -# session.save_path doesn't *have* to be set, but if it is, and it's -# not valid/writable/etc. then it can cause problems -$sessionSavePath = mw_get_session_save_path(); -$ssp = htmlspecialchars( $sessionSavePath ); -# Warn the user if it's not set, but let them proceed -if( !$sessionSavePath ) { - print "
  • Warning: A value for session.save_path - has not been set in PHP.ini. If the default value causes problems with - saving session data, set it to a valid path which is read/write/execute - for the user your web server is running under.
  • "; -} elseif ( is_dir( $sessionSavePath ) && is_writable( $sessionSavePath ) ) { - # All good? Let the user know - print "
  • Session save path ({$ssp}) appears to be valid.
  • "; -} else { - # Something not right? Warn the user, but let them proceed - print "
  • Warning: Your session.save_path value ({$ssp}) - appears to be invalid or is not writable. PHP needs to be able to save data to - this location for correct session operation.
  • "; -} - -# Check for PCRE support -if( !function_exists( 'preg_match' ) ) - dieout( "The PCRE support module appears to be missing. MediaWiki requires the - Perl-compatible regular expression functions." ); - -# The installer can take a while, and we really don't want it to time out -wfSuppressWarnings(); -set_time_limit( 0 ); -wfRestoreWarnings(); - -$memlimit = ini_get( "memory_limit" ); -if( $memlimit == -1 ) { - print "
  • PHP is configured with no memory_limit.
  • \n"; -} else { - print "
  • PHP's memory_limit is " . htmlspecialchars( $memlimit ). " bytes. "; - $newlimit = wfMemoryLimit(); - $memlimit = wfShorthandToInteger( $memlimit ); - if( $newlimit < $memlimit ) { - print "Failed raising limit, installation may fail."; - } elseif ( $newlimit > $memlimit ) { - print "Raised memory_limit to " . htmlspecialchars( $newlimit ) . " bytes. "; - } - print "
  • \n"; -} - -$conf->xcache = function_exists( 'xcache_get' ); -if( $conf->xcache ) - print "
  • XCache installed
  • \n"; - -$conf->apc = function_exists('apc_fetch'); -if ($conf->apc ) { - print "
  • APC installed
  • \n"; -} - -$conf->eaccel = function_exists( 'eaccelerator_get' ); -if ( $conf->eaccel ) { - print "
  • eAccelerator installed
  • \n"; -} - -$conf->dba = function_exists( 'dba_open' ); - -if( !( $conf->eaccel || $conf->apc || $conf->xcache ) ) { - echo( '
  • Couldn\'t find eAccelerator, - APC or XCache; - cannot use these for object caching.
  • ' ); -} - -$conf->diff3 = false; -$diff3locations = array_merge( - array( - "/usr/bin", - "/usr/local/bin", - "/opt/csw/bin", - "/usr/gnu/bin", - "/usr/sfw/bin" ), - explode( PATH_SEPARATOR, getenv( "PATH" ) ) ); -$diff3names = array( "gdiff3", "diff3", "diff3.exe" ); - -$diff3versioninfo = array( '$1 --version 2>&1', 'diff3 (GNU diffutils)' ); -foreach ($diff3locations as $loc) { - $exe = locate_executable($loc, $diff3names, $diff3versioninfo); - if ($exe !== false) { - $conf->diff3 = $exe; - break; - } -} - -if ($conf->diff3) - print "
  • Found GNU diff3: $conf->diff3.
  • "; -else - print "
  • GNU diff3 not found.
  • "; - -$conf->ImageMagick = false; -$imcheck = array( "/usr/bin", "/opt/csw/bin", "/usr/local/bin", "/sw/bin", "/opt/local/bin" ); -foreach( $imcheck as $dir ) { - $im = "$dir/convert"; - if( @file_exists( $im ) ) { - print "
  • Found ImageMagick: $im; image thumbnailing will be enabled if you enable uploads.
  • \n"; - $conf->ImageMagick = $im; - break; - } -} - -$conf->HaveGD = function_exists( "imagejpeg" ); -if( $conf->HaveGD ) { - print "
  • Found GD graphics library built-in"; - if( !$conf->ImageMagick ) { - print ", image thumbnailing will be enabled if you enable uploads"; - } - print ".
  • \n"; -} else { - if( !$conf->ImageMagick ) { - print "
  • Couldn't find GD library or ImageMagick; image thumbnailing disabled.
  • \n"; - } -} - -$conf->IP = dirname( dirname( __FILE__ ) ); -print "
  • Installation directory: " . htmlspecialchars( $conf->IP ) . "
  • \n"; - - -// PHP_SELF isn't available sometimes, such as when PHP is CGI but -// cgi.fix_pathinfo is disabled. In that case, fall back to SCRIPT_NAME -// to get the path to the current script... hopefully it's reliable. SIGH -$path = ($_SERVER["PHP_SELF"] === '') - ? $_SERVER["SCRIPT_NAME"] - : $_SERVER["PHP_SELF"]; - -$conf->ScriptPath = preg_replace( '{^(.*)/config.*$}', '$1', $path ); -print "
  • Script URI path: " . htmlspecialchars( $conf->ScriptPath ) . "
  • \n"; - - - -// We may be installing from *.php5 extension file, if so, print message -$conf->ScriptExtension = '.php'; -if (defined('MW_INSTALL_PHP5_EXT')) { - $conf->ScriptExtension = '.php5'; - print "
  • Installing MediaWiki with php5 file extensions
  • \n"; -} else { - print "
  • Installing MediaWiki with php file extensions
  • \n"; -} - - -print "
  • Environment checked. You can install MediaWiki.
  • \n"; - $conf->posted = ($_SERVER["REQUEST_METHOD"] == "POST"); - - $conf->Sitename = ucfirst( importPost( "Sitename", "" ) ); - $defaultEmail = empty( $_SERVER["SERVER_ADMIN"] ) - ? 'root@localhost' - : $_SERVER["SERVER_ADMIN"]; - $conf->EmergencyContact = importPost( "EmergencyContact", $defaultEmail ); - $conf->DBtype = importPost( "DBtype", $DefaultDBtype ); - if ( !isset( $ourdb[$conf->DBtype] ) ) { - $conf->DBtype = $DefaultDBtype; - } - - $conf->DBserver = importPost( "DBserver", "localhost" ); - $conf->DBname = importPost( "DBname", "wikidb" ); - $conf->DBuser = importPost( "DBuser", "wikiuser" ); - $conf->DBpassword = importPost( "DBpassword" ); - $conf->DBpassword2 = importPost( "DBpassword2" ); - $conf->SysopName = importPost( "SysopName", "WikiSysop" ); - $conf->SysopPass = importPost( "SysopPass" ); - $conf->SysopPass2 = importPost( "SysopPass2" ); - $conf->RootUser = importPost( "RootUser" ); - $conf->RootPW = importPost( "RootPW", "" ); - $useRoot = importCheck( 'useroot', false ); - $conf->LanguageCode = importPost( "LanguageCode", "en" ); - ## MySQL specific: - $conf->DBprefix = importPost( "DBprefix" ); - $conf->setSchema( - importPost( "DBschema", "mysql5-binary" ), - importPost( "DBengine", "InnoDB" ) ); - - ## Postgres specific: - $conf->DBport = importPost( "DBport", "5432" ); - $conf->DBts2schema = importPost( "DBts2schema", "public" ); - $conf->DBpgschema = importPost( "DBpgschema", "mediawiki" ); - - ## SQLite specific - $conf->SQLiteDataDir = importPost( "SQLiteDataDir", "$IP/../data" ); - - ## MSSQL specific - // We need a second field so it doesn't overwrite the MySQL one - $conf->DBprefix2 = importPost( "DBprefix2" ); - - ## DB2 specific: - // New variable in order to have a different default port number - $conf->DBport_db2 = importPost( "DBport_db2", "50000" ); - $conf->DBcataloged = importPost( "DBcataloged", "cataloged" ); - $conf->DBdb2schema = importPost( "DBdb2schema", "mediawiki" ); - - // Oracle specific - $conf->DBprefix_ora = importPost( "DBprefix_ora" ); - $conf->DBdefTS_ora = importPost( "DBdefTS_ora", "USERS" ); - $conf->DBtempTS_ora = importPost( "DBtempTS_ora", "TEMP" ); - - $conf->ShellLocale = getShellLocale( $conf->LanguageCode ); - -/* Check for validity */ -$errs = array(); - -if( preg_match( '/^$|^mediawiki$|#/i', $conf->Sitename ) ) { - $errs["Sitename"] = "Must not be blank or \"MediaWiki\" and may not contain \"#\""; -} -if( !$ourdb[$conf->DBtype]['serverless'] ) { - if( $conf->DBuser == "" ) { - $errs["DBuser"] = "Must not be blank"; - } - if( ($conf->DBtype == 'mysql') && (strlen($conf->DBuser) > 16) ) { - $errs["DBuser"] = "Username too long"; - } - if( $conf->DBpassword == "" && $conf->DBtype != "postgres" ) { - $errs["DBpassword"] = "Must not be blank"; - } - if( $conf->DBpassword != $conf->DBpassword2 ) { - $errs["DBpassword2"] = "Passwords don't match!"; - } -} -if( !preg_match( '/^[A-Za-z_0-9]*$/', $conf->DBprefix ) ) { - $errs["DBprefix"] = "Invalid table prefix"; -} else { - untaint( $conf->DBprefix, TC_MYSQL ); -} -if( !preg_match( '/^[A-Za-z_0-9]*$/', $conf->DBprefix_ora ) ) { - $errs["DBprefix_ora"] = "Invalid table prefix"; -} - -error_reporting( E_ALL | E_STRICT ); - -/** - * Initialise $wgLang and $wgContLang to something so we can - * call case-folding methods. Per Brion, this is English for - * now, although we could be clever and initialise to the - * user-selected language. - */ -$wgContLang = Language::factory( 'en' ); -$wgLang = $wgContLang; - -/** - * We're messing about with users, so we need a stub - * authentication plugin... - */ -$wgAuth = new AuthPlugin(); - -/** - * Validate the initial administrator account; username, - * password checks, etc. - */ -if( $conf->SysopName ) { - # Check that the user can be created - $u = User::newFromName( $conf->SysopName ); - if( $u instanceof User ) { - # Various password checks - if( $conf->SysopPass != '' ) { - if( $conf->SysopPass == $conf->SysopPass2 ) { - if( !$u->isValidPassword( $conf->SysopPass ) ) { - $errs['SysopPass'] = "Bad password"; - } - } else { - $errs['SysopPass2'] = "Passwords don't match"; - } - } else { - $errs['SysopPass'] = "Cannot be blank"; - } - unset( $u ); - } else { - $errs['SysopName'] = "Bad username"; - } -} - -$conf->License = importRequest( "License", "none" ); -if( $conf->License == "gfdl1_2" ) { - $conf->RightsUrl = "http://www.gnu.org/licenses/old-licenses/fdl-1.2.txt"; - $conf->RightsText = "GNU Free Documentation License 1.2"; - $conf->RightsCode = "gfdl1_2"; - $conf->RightsIcon = '${wgScriptPath}/skins/common/images/gnu-fdl.png'; -} elseif( $conf->License == "gfdl1_3" ) { - $conf->RightsUrl = "http://www.gnu.org/copyleft/fdl.html"; - $conf->RightsText = "GNU Free Documentation License 1.3"; - $conf->RightsCode = "gfdl1_3"; - $conf->RightsIcon = '${wgScriptPath}/skins/common/images/gnu-fdl.png'; -} elseif( $conf->License == "none" ) { - $conf->RightsUrl = $conf->RightsText = $conf->RightsCode = $conf->RightsIcon = ""; -} elseif( $conf->License == "pd" ) { - $conf->RightsUrl = "http://creativecommons.org/licenses/publicdomain/"; - $conf->RightsText = "Public Domain"; - $conf->RightsCode = "pd"; - $conf->RightsIcon = '${wgScriptPath}/skins/common/images/public-domain.png'; -} else { - $conf->RightsUrl = importRequest( "RightsUrl", "" ); - $conf->RightsText = importRequest( "RightsText", "" ); - $conf->RightsCode = importRequest( "RightsCode", "" ); - $conf->RightsIcon = importRequest( "RightsIcon", "" ); -} - -$conf->Shm = importRequest( "Shm", "none" ); -$conf->MCServers = importRequest( "MCServers" ); - -/* Test memcached servers */ - -if ( $conf->Shm == 'memcached' && $conf->MCServers ) { - $conf->MCServerArray = wfArrayMap( 'trim', explode( ',', $conf->MCServers ) ); - foreach ( $conf->MCServerArray as $server ) { - $error = testMemcachedServer( $server ); - if ( $error ) { - $errs["MCServers"] = $error; - break; - } - } -} else if ( $conf->Shm == 'memcached' ) { - $errs["MCServers"] = "Please specify at least one server if you wish to use memcached"; -} - -/* default values for installation */ -$conf->Email = importRequest("Email", "email_enabled"); -$conf->Emailuser = importRequest("Emailuser", "emailuser_enabled"); -$conf->Enotif = importRequest("Enotif", "enotif_allpages"); -$conf->Eauthent = importRequest("Eauthent", "eauthent_enabled"); - -if( $conf->posted && ( 0 == count( $errs ) ) ) { - do { /* So we can 'continue' to end prematurely */ - $conf->Root = ($conf->RootPW != ""); - - /* Load up the settings and get installin' */ - $local = writeLocalSettings( $conf ); - echo "
  • \n"; - echo "

    Generating configuration file...

    \n"; - echo "
  • \n"; - - $wgCommandLineMode = false; - chdir( ".." ); - $ok = eval( $local ); - if( $ok === false ) { - dieout( "

    Errors in generated configuration; " . - "most likely due to a bug in the installer... " . - "Config file was:

    " . - "
    " .
    -				htmlspecialchars( $local ) .
    -				"
    " ); - } - $conf->DBtypename = ''; - foreach (array_keys($ourdb) as $db) { - if ($conf->DBtype === $db) - $conf->DBtypename = $ourdb[$db]['fullname']; - } - if ( ! strlen($conf->DBtype)) { - $errs["DBpicktype"] = "Please choose a database type"; - continue; - } - - if (! $conf->DBtypename) { - $errs["DBtype"] = "Unknown database type '$conf->DBtype'"; - continue; - } - print "
  • Database type: " . htmlspecialchars( $conf->DBtypename ) . "
  • \n"; - $dbclass = 'Database'.ucfirst($conf->DBtype); - $wgDBtype = $conf->DBtype; - $wgDBadminuser = "root"; - $wgDBadminpassword = $conf->RootPW; - - ## Mysql specific: - $wgDBprefix = $conf->DBprefix; - - ## Postgres specific: - $wgDBport = $conf->DBport; - $wgDBts2schema = $conf->DBts2schema; - - if( $wgDBtype == 'postgres' ) { - $wgDBmwschema = $conf->DBpgschema; - } elseif ( $wgDBtype == 'ibm_db2' ) { - $wgDBmwschema = $conf->DBdb2schema; - } - - if( $conf->DBprefix2 != '' ) { - // For MSSQL - $wgDBprefix = $conf->DBprefix2; - } elseif( $conf->DBprefix_ora != '' ) { - // For Oracle - $wgDBprefix = $conf->DBprefix_ora; - } - - ## DB2 specific: - $wgDBcataloged = $conf->DBcataloged; - - $wgCommandLineMode = true; - if (! defined ( 'STDERR' ) ) - define( 'STDERR', fopen("php://stderr", "wb")); - $wgUseDatabaseMessages = false; /* FIXME: For database failure */ - require_once( "$IP/includes/Setup.php" ); - Language::getLocalisationCache()->disableBackend(); - - chdir( "config" ); - - $wgTitle = Title::newFromText( "Installation script" ); - error_reporting( E_ALL | E_STRICT ); - print "
  • Loading class: " . htmlspecialchars( $dbclass ) . "
  • \n"; - if ( $conf->DBtype != 'sqlite' ) { - $dbc = new $dbclass; - } - - if( $conf->DBtype == 'mysql' ) { - $mysqlOldClient = version_compare( mysql_get_client_info(), "4.1.0", "lt" ); - if( $mysqlOldClient ) { - print "
  • PHP is linked with old MySQL client libraries. If you are - using a MySQL 4.1 server and have problems connecting to the database, - see http://dev.mysql.com/doc/mysql/en/old-client.html for help.
  • \n"; - } - $ok = true; # Let's be optimistic - - # Decide if we're going to use the superuser or the regular database user - $conf->Root = $useRoot; - if( $conf->Root ) { - $db_user = $conf->RootUser; - $db_pass = $conf->RootPW; - } else { - $db_user = $wgDBuser; - $db_pass = $wgDBpassword; - } - - # Attempt to connect - echo( "
  • Attempting to connect to database server as " . htmlspecialchars( $db_user ) . "..." ); - $wgDatabase = Database::newFromParams( $wgDBserver, $db_user, $db_pass, '', 1 ); - - # Check the connection and respond to errors - if( $wgDatabase->isOpen() ) { - # Seems OK - $ok = true; - $wgDBadminuser = $db_user; - $wgDBadminpassword = $db_pass; - echo( "success.
  • \n" ); - $wgDatabase->ignoreErrors( true ); - $myver = $wgDatabase->getServerVersion(); - } else { - # There were errors, report them and back out - $ok = false; - $errno = mysql_errno(); - $errtx = htmlspecialchars( mysql_error() ); - switch( $errno ) { - case 1045: - case 2000: - echo( "failed due to authentication errors. Check passwords." ); - if( $conf->Root ) { - # The superuser details are wrong - $errs["RootUser"] = "Check username"; - $errs["RootPW"] = "and password"; - } else { - # The regular user details are wrong - $errs["DBuser"] = "Check username"; - $errs["DBpassword"] = "and password"; - } - break; - case 2002: - case 2003: - default: - # General connection problem - echo( htmlspecialchars( "failed with error [$errno] $errtx." ) . "\n" ); - $errs["DBserver"] = "Connection failed"; - break; - } # switch - } #conn. att. - - if( !$ok ) { continue; } - } - else if( $conf->DBtype == 'ibm_db2' ) { - if( $useRoot ) { - $db_user = $conf->RootUser; - $db_pass = $conf->RootPW; - } else { - $db_user = $wgDBuser; - $db_pass = $wgDBpassword; - } - - echo( "
  • Attempting to connect to database \"" . htmlspecialchars( $wgDBname ) . - "\" as \"" . htmlspecialchars( $db_user ) . "\"..." ); - $wgDatabase = $dbc->newFromParams($wgDBserver, $db_user, $db_pass, $wgDBname, 1); - // enable extra debug messages - $dbc->setMode(DatabaseIbm_db2::INSTALL_MODE); - $wgDatabase->setMode(DatabaseIbm_db2::INSTALL_MODE); - - if (!$wgDatabase->isOpen()) { - print " error: " . htmlspecialchars( $wgDatabase->lastError() ) . "
  • \n"; - } else { - $myver = $wgDatabase->getServerVersion(); - } - if (is_callable(array($wgDatabase, 'initial_setup'))) $wgDatabase->initial_setup('', $wgDBname); - - } elseif ( $conf->DBtype == 'sqlite' ) { - $wgSQLiteDataDir = $conf->SQLiteDataDir; - echo '
  • Attempting to connect to SQLite database at "' . - htmlspecialchars( $wgSQLiteDataDir ) . '": '; - if ( !is_dir( $wgSQLiteDataDir ) ) { - if ( is_writable( dirname( $wgSQLiteDataDir ) ) ) { - $ok = wfMkdirParents( $wgSQLiteDataDir, $wgSQLiteDataDirMode ); - } else { - $ok = false; - } - if ( !$ok ) { - echo "cannot create data directory
  • "; - $errs['SQLiteDataDir'] = 'Enter a valid data directory'; - continue; - } - } - if ( !is_writable( $wgSQLiteDataDir ) ) { - echo "data directory not writable"; - $errs['SQLiteDataDir'] = 'Enter a writable data directory'; - continue; - } - $dataFile = DatabaseSqlite::generateFileName( $wgSQLiteDataDir, $wgDBname ); - if ( file_exists( $dataFile ) ) { - if ( !is_writable( $dataFile ) ) { - echo "data file not writable"; - $errs['SQLiteDataDir'] = basename( $dataFile ) . " is not writable"; - continue; - } - } else { - if ( file_put_contents( $dataFile, '' ) === false ) { - echo 'could not create database file "' . htmlspecialchars( basename( $dataFile ) ) . "\"\n"; - $errs['SQLiteDataDir'] = "couldn't create " . basename( $dataFile ); - continue; - } - } - try { - $wgDatabase = new DatabaseSqlite( false, false, false, $wgDBname, 1 ); - } - catch( MWException $ex ) { - echo 'error: ' . htmlspecialchars( $ex->getMessage() ) . "\n"; - continue; - } - - if (!$wgDatabase->isOpen()) { - print "error: " . htmlspecialchars( $wgDatabase->lastError() ) . "\n"; - $errs['SQLiteDataDir'] = 'Could not connect to database'; - continue; - } else { - $myver = $wgDatabase->getServerVersion(); - } - if ( is_callable( array( $wgDatabase, 'initial_setup' ) ) ) { - $wgDatabase->initial_setup('', $wgDBname); - } - echo "ok\n"; - } elseif ( $conf->DBtype == 'oracle' ) { - echo "
  • Attempting to connect to database \"" . htmlspecialchars( $wgDBname ) ."\"
  • "; - $old_error_level = error_reporting(); - wfSuppressWarnings(); - $wgDatabase = $dbc->newFromParams('DUMMY', $wgDBuser, $wgDBpassword, $wgDBname, 1); - wfRestoreWarnings(); - if (!$wgDatabase->isOpen()) { - $ok = true; - echo "
  • Connect failed.
  • "; - if ($useRoot) { - if (ini_get('oci8.privileged_connect') === false) { - echo "
  • Privileged connect disabled, please set oci8.privileged_connect or run maintenance/ora/user.sql script manually prior to continuing.
  • "; - $ok = false; - } else { - $wgDBadminuser = $conf->RootUser; - $wgDBadminpassword = $conf->RootPW; - echo "
  • Attempting to create DB user.
  • "; - $wgDatabase = $dbc->newFromParams('DUMMY', $wgDBadminuser, $wgDBadminpassword, $wgDBname, 1, 64); - if ($wgDatabase->isOpen()) { - $wgDBOracleDefTS = $conf->DBdefTS_ora; - $wgDBOracleTempTS = $conf->DBtempTS_ora; - $res = $wgDatabase->sourceFile( "../maintenance/ora/user.sql" ); - if ($res !== true) dieout($res); - } else { - echo "
  • Invalid database superuser, please supply a valid superuser account.
  • "; - echo "
  • ERR: ".print_r(oci_error(), true)."
  • "; - $ok = false; - } - } - } else { - echo "
  • Database superuser missing, please supply a valid superuser account.
  • "; - $ok = false; - } - if (!$ok) { - $errs["RootUser"] = "Check username"; - $errs["RootPW"] = "and password"; - } else { - echo "
  • Attempting to connect to database with new user \"" . htmlspecialchars( $wgDBname ) ."\"
  • "; - $wgDatabase = $dbc->newFromParams('DUMMY', $wgDBuser, $wgDBpassword, $wgDBname, 1); - } - } - if ($ok) { - $myver = $wgDatabase->getServerVersion(); - } - } else { # not mysql - error_reporting( E_ALL | E_STRICT ); - $wgSuperUser = ''; - ## Possible connect as a superuser - // Changed !mysql to postgres check since it seems to only apply to postgres - if( $useRoot && $conf->DBtype == 'postgres' ) { - $wgDBsuperuser = $conf->RootUser; - echo( "
  • Attempting to connect to database \"postgres\" as superuser \"" . - htmlspecialchars( $wgDBsuperuser ) . "\"..." ); - $wgDatabase = $dbc->newFromParams($wgDBserver, $wgDBsuperuser, $conf->RootPW, "postgres", 1); - if (!$wgDatabase->isOpen()) { - print " error: " . htmlspecialchars( $wgDatabase->lastError() ) . "
  • \n"; - $errs["DBserver"] = "Could not connect to database as superuser"; - $errs["RootUser"] = "Check username"; - $errs["RootPW"] = "and password"; - continue; - } - $wgDatabase->initial_setup($conf->RootPW, 'postgres'); - } - echo( "
  • Attempting to connect to database \"" . htmlspecialchars( $wgDBname ) . - "\" as \"" . htmlspecialchars( $wgDBuser ) . "\"..." ); - $wgDatabase = $dbc->newFromParams($wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, 1); - if (!$wgDatabase->isOpen()) { - print " error: " . htmlspecialchars( $wgDatabase->lastError() ) . "
  • \n"; - $errs["DBserver"] = "Could not connect to database as user"; - $errs["DBuser"] = "Check username"; - $errs["DBpassword"] = "and password"; - continue; - } else { - $myver = $wgDatabase->getServerVersion(); - } - if (is_callable(array($wgDatabase, 'initial_setup'))) $wgDatabase->initial_setup('', $wgDBname); - } - - if ( !$wgDatabase->isOpen() ) { - $errs["DBserver"] = "Couldn't connect to database"; - continue; - } - - print "
  • Connected to " . htmlspecialchars( "{$conf->DBtype} $myver" ); - if ($conf->DBtype == 'mysql') { - if( version_compare( $myver, "4.0.14" ) < 0 ) { - print "
  • \n"; - dieout( "-- mysql 4.0.14 or later required. Aborting." ); - } - $mysqlNewAuth = version_compare( $myver, "4.1.0", "ge" ); - if( $mysqlNewAuth && $mysqlOldClient ) { - print "; You are using MySQL 4.1 server, but PHP is linked - to old client libraries; if you have trouble with authentication, see - http://dev.mysql.com/doc/mysql/en/old-client.html for help."; - } - if( $wgDBmysql5 ) { - if( $mysqlNewAuth ) { - print "; enabling MySQL 4.1/5.0 charset mode"; - } else { - print "; MySQL 4.1/5.0 charset mode enabled, - but older version detected; will likely fail."; - } - } - print "\n"; - - @$sel = $wgDatabase->selectDB( $wgDBname ); - if( $sel ) { - print "
  • Database " . htmlspecialchars( $wgDBname ) . " exists
  • \n"; - } else { - $err = mysql_errno(); - $databaseSafe = htmlspecialchars( $wgDBname ); - if( $err == 1102 /* Invalid database name */ ) { - print "
    • {$databaseSafe} is not a valid database name.
    "; - continue; - } elseif( $err != 1049 /* Database doesn't exist */ ) { - print "
    • Error selecting database {$databaseSafe}: {$err} "; - print htmlspecialchars( mysql_error() ) . "
    "; - continue; - } - print "
  • Attempting to create database...
  • "; - $res = $wgDatabase->query( "CREATE DATABASE `$wgDBname`" ); - if( !$res ) { - print "
  • Couldn't create database " . - htmlspecialchars( $wgDBname ) . - "; try with root access or check your username/pass.
  • \n"; - $errs["RootPW"] = "<- Enter"; - continue; - } - print "
  • Created database " . htmlspecialchars( $wgDBname ) . "
  • \n"; - } - $wgDatabase->selectDB( $wgDBname ); - } - else if ($conf->DBtype == 'postgres') { - if( version_compare( $myver, "8.0" ) < 0 ) { - dieout( "Postgres 8.0 or later is required. Aborting." ); - } - } - - if( $wgDatabase->tableExists( "cur" ) || $wgDatabase->tableExists( "revision" ) ) { - print "
  • There are already MediaWiki tables in this database. Checking if updates are needed...
  • \n"; - - if ( $conf->DBtype == 'mysql') { - # Determine existing default character set - if ( $wgDatabase->tableExists( "revision" ) ) { - $revision = $wgDatabase->escapeLike( $conf->DBprefix . 'revision' ); - $res = $wgDatabase->query( "SHOW TABLE STATUS LIKE '$revision'" ); - $row = $wgDatabase->fetchObject( $res ); - if ( !$row ) { - echo "
  • SHOW TABLE STATUS query failed!
  • \n"; - $existingSchema = false; - $existingEngine = false; - } else { - if ( preg_match( '/^latin1/', $row->Collation ) ) { - $existingSchema = 'mysql4'; - } elseif ( preg_match( '/^utf8/', $row->Collation ) ) { - $existingSchema = 'mysql5'; - } elseif ( preg_match( '/^binary/', $row->Collation ) ) { - $existingSchema = 'mysql5-binary'; - } else { - $existingSchema = false; - echo "
  • Warning: Unrecognised existing collation
  • \n"; - } - if ( isset( $row->Engine ) ) { - $existingEngine = $row->Engine; - } else { - $existingEngine = $row->Type; - } - } - if ( $existingSchema && $existingSchema != $conf->DBschema ) { - $encExisting = htmlspecialchars( $existingSchema ); - $encRequested = htmlspecialchars( $conf->DBschema ); - print "
  • Warning: you requested the $encRequested schema, " . - "but the existing database has the $encExisting schema. This upgrade script ". - "can't convert it, so it will remain $encExisting.
  • \n"; - $conf->setSchema( $existingSchema, $conf->DBengine ); - } - if ( $existingEngine && $existingEngine != $conf->DBengine ) { - $encExisting = htmlspecialchars( $existingEngine ); - $encRequested = htmlspecialchars( $conf->DBengine ); - print "
  • Warning: you requested the $encRequested storage " . - "engine, but the existing database uses the $encExisting engine. This upgrade " . - "script can't convert it, so it will remain $encExisting.
  • \n"; - $conf->setSchema( $conf->DBschema, $existingEngine ); - } - } - - # Create user if required - if ( $conf->Root ) { - $conn = $dbc->newFromParams( $wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, 1 ); - if ( $conn->isOpen() ) { - print "
  • DB user account ok
  • \n"; - $conn->close(); - } else { - print "
  • Granting user permissions..."; - if( $mysqlOldClient && $mysqlNewAuth ) { - print " If the next step fails, see http://dev.mysql.com/doc/mysql/en/old-client.html for help."; - } - print "
  • \n"; - $res = $wgDatabase->sourceFile( "../maintenance/users.sql" ); - if ($res !== true) dieout($res); - } - } - } - print "
\n";
-			chdir( ".." );
-			flush();
-			do_all_updates();
-			chdir( "config" );
-			print "
\n"; - print "
  • Finished update checks.
  • \n"; - // if tables don't yet exist - } else { - # Determine available storage engines if possible - if ( $conf->DBtype == 'mysql' && version_compare( $myver, "4.1.2", "ge" ) ) { - $res = $wgDatabase->query( 'SHOW ENGINES' ); - $found = false; - while ( $row = $wgDatabase->fetchObject( $res ) ) { - if ( $row->Engine == $conf->DBengine && ( $row->Support == 'YES' || $row->Support == 'DEFAULT' ) ) { - $found = true; - break; - } - } - $wgDatabase->freeResult( $res ); - if ( !$found && $conf->DBengine != 'MyISAM' ) { - echo "
  • Warning: " . htmlspecialchars( $conf->DBengine ) . - " storage engine not available, " . - "using MyISAM instead
  • \n"; - $conf->setSchema( $conf->DBschema, 'MyISAM' ); - } - } - - # FIXME: Check for errors - print "
  • Creating tables..."; - if ($conf->DBtype == 'mysql') { - $res = $wgDatabase->sourceFile( "../maintenance/tables.sql" ); - if ($res === true) { - print " done.
  • \n
  • Populating interwiki table... \n"; - $res = $wgDatabase->sourceFile( "../maintenance/interwiki.sql" ); - } - if ($res === true) { - print " done.
  • \n"; - } else { - print " FAILED\n"; - dieout( htmlspecialchars( $res ) ); - } - } elseif (is_callable(array($wgDatabase, 'setup_database'))) { - $wgDatabase->setup_database(); - } - else { - $errs["DBtype"] = "Do not know how to handle database type '$conf->DBtype'"; - continue; - } - - - if ( $conf->DBtype == 'ibm_db2' ) { - // Now that table creation is done, make sure everything is committed - // Do this before doing inserts through API - if ($wgDatabase->lastError()) { - print "
  • Errors encountered during table creation -- rolled back
  • \n"; - $wgDatabase->rollback(); - } - else { - print "
  • MediaWiki tables successfully created
  • \n"; - $wgDatabase->commit(); - } - } elseif ( $conf->DBtype == 'sqlite' ) { - // Ensure proper searchindex format. We have to do that separately because - // if SQLite is compiled without the FTS3 module, table creation syntax will be invalid. - sqlite_setup_searchindex(); - } - - print "
  • Initializing statistics...
  • \n"; - $wgDatabase->insert( 'site_stats', - array ( 'ss_row_id' => 1, - 'ss_total_views' => 0, - 'ss_total_edits' => 1, # Main page first edit - 'ss_good_articles' => 0, # Main page is not a good article - no internal link - 'ss_total_pages' => 1, # Main page - 'ss_users' => $conf->SysopName ? 1 : 0, # Sysop account, if created - 'ss_admins' => $conf->SysopName ? 1 : 0, # Sysop account, if created - 'ss_images' => 0 ) ); - - # Set up the "regular user" account *if we can, and if we need to* - if( $conf->Root and $conf->DBtype == 'mysql') { - # See if we need to - $wgDatabase2 = $dbc->newFromParams( $wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, 1 ); - if( $wgDatabase2->isOpen() ) { - # Nope, just close the test connection and continue - $wgDatabase2->close(); - echo( "
  • User " . htmlspecialchars( $wgDBuser ) . " exists. Skipping grants.
  • \n" ); - } else { - # Yes, so run the grants - echo( "
  • " . htmlspecialchars( "Granting user permissions to $wgDBuser on $wgDBname..." ) ); - $res = $wgDatabase->sourceFile( "../maintenance/users.sql" ); - if ( $res === true ) { - echo( " success.
  • \n" ); - } else { - echo( " FAILED.\n" ); - dieout( $res ); - } - } - } - - if( $conf->SysopName ) { - $u = User::newFromName( $conf->getSysopName() ); - if ( !$u ) { - print "
  • Warning: Skipped sysop account creation - invalid username!
  • \n"; - } - else if ( 0 == $u->idForName() ) { - $u->addToDatabase(); - $u->setPassword( $conf->getSysopPass() ); - $u->saveSettings(); - - $u->addGroup( "sysop" ); - $u->addGroup( "bureaucrat" ); - - print "
  • Created sysop account " . - htmlspecialchars( $conf->SysopName ) . ".
  • \n"; - } else { - print "
  • Could not create user - already exists!
  • \n"; - } - } else { - print "
  • Skipped sysop account creation, no name given.
  • \n"; - } - - $titleobj = Title::newFromText( wfMsgNoDB( "mainpage" ) ); - $article = new Article( $titleobj ); - $newid = $article->insertOn( $wgDatabase ); - $revision = new Revision( array( - 'page' => $newid, - 'text' => wfMsg( 'mainpagetext' ) . "\n\n" . wfMsgNoTrans( 'mainpagedocfooter' ), - 'comment' => '', - 'user' => 0, - 'user_text' => 'MediaWiki default', - ) ); - $revid = $revision->insertOn( $wgDatabase ); - $article->updateRevisionOn( $wgDatabase, $revision ); - } - - /* Write out the config file now that all is well */ - print "
  • \n"; - print "

    Creating LocalSettings.php...

    \n\n"; - $localSettings = "<" . "?php$endl$local"; - // Fix up a common line-ending problem (due to CVS on Windows) - $localSettings = str_replace( "\r\n", "\n", $localSettings ); - $f = fopen( "LocalSettings.php", 'xt' ); - - if( $f == false ) { - print( "
  • \n" ); - dieout( "

    Couldn't write out LocalSettings.php. Check that the directory permissions are correct and that there isn't already a file of that name here...

    \n" . - "

    Here's the file that would have been written, try to paste it into place manually:

    \n" . - "
    \n" . htmlspecialchars( $localSettings ) . "
    \n" ); - } - if(fwrite( $f, $localSettings ) ) { - fclose( $f ); - print "
    \n"; - writeSuccessMessage(); - print "\n"; - } else { - fclose( $f ); - dieout( "

    An error occured while writing the config/LocalSettings.php file. Check user rights and disk space then try again.

    \n" ); - } - - } while( false ); -} - -print "
\n"; -$mainListOpened = false; - -if( count( $errs ) ) { - /* Display options form */ - - if( $conf->posted ) { - echo "

Something's not quite right yet; make sure everything below is filled out correctly.

\n"; - } -?> - -
- -

Site config

- -
-
- -
-

- Preferably a short word without punctuation, i.e. "Wikipedia".
- Will appear as the namespace name for "meta" pages, and throughout the interface. -

-
-

- Displayed to users in some error messages, used as the return address for password reminders, and used as the default sender address of e-mail notifications. -

- -
- - -
-

- Select the language for your wiki's interface. Some localizations aren't fully complete. Unicode (UTF-8) is used for all localizations. -

- -
- - -
    -
  • -
  • -
  • -
  • -
  • ScriptPath}/config/$script?License=cc&RightsUrl=[license_url]&RightsText=[license_name]&RightsCode=[license_code]&RightsIcon=[license_button]" ); - $icon = urlencode( "$wgServer$wgUploadPath/wiki.png" ); - $ccApp = htmlspecialchars( "http://creativecommons.org/license/?partner=$partner&exit_url=$exit&partner_icon_url=$icon" ); - print "choose"; - if( $conf->License == "cc" ) { ?> -
      -
    • RightsIcon ) . "\" alt='(Creative Commons icon)' />", "hidden" ); ?>
    • -
    • RightsText ), "hidden" ); ?>
    • -
    • RightsCode ), "hidden" ); ?>
    • -
    • RightsUrl ) . "\">" . htmlspecialchars( $conf->RightsUrl ) . "", "hidden" ); ?>
    • -
    - -
  • -
-
-

- A notice, icon, and machine-readable copyright metadata will be displayed for the license you pick. -

- - -
- -
-
- -
-
- -
-

- An admin can lock/delete pages, block users from editing, and do other maintenance tasks.
- A new account will be added only when creating a new wiki database. -

- The password cannot be the same as the username. -

- -
- - -
    -
  • - xcache ) { - echo "
  • "; - aField( $conf, 'Shm', 'XCache', 'radio', 'xcache' ); - echo "
  • \n"; - } - if ( $conf->apc ) { - echo "
  • "; - aField( $conf, "Shm", "APC", "radio", "apc" ); - echo "
  • \n"; - } - if ( $conf->eaccel ) { - echo "
  • "; - aField( $conf, "Shm", "eAccelerator", "radio", "eaccel" ); - echo "
  • \n"; - } - if ( $conf->dba ) { - echo "
  • "; - aField( $conf, "Shm", "DBA (not recommended)", "radio", "dba" ); - echo "
  • "; - } - ?> -
  • -
-
-
-

- An object caching system such as memcached will provide a significant performance boost, - but needs to be installed. Provide the server addresses and ports in a comma-separated list. -

- MediaWiki can also detect and support eAccelerator, APC, and XCache, but - these should not be used if the wiki will be running on multiple application servers. -

- DBA (Berkeley-style DB) is generally slower than using no cache at all, and is only - recommended for testing. -

-
- -

E-mail, e-mail notification and authentication setup

- -
-
- -
    -
  • -
  • -
-
-

- Use this to disable all e-mail functions (password reminders, user-to-user e-mail, and e-mail notifications) - if sending mail doesn't work on your server. -

- -
- -
    -
  • -
  • -
-
-

- The user-to-user e-mail feature (Special:Emailuser) lets the wiki act as a relay to allow users to exchange e-mail without publicly advertising their e-mail address. -

-
- -
    -
  • -
  • -
  • -
-
-
-

- For this feature to work, an e-mail address must be present for the user account, and the notification - options in the user's preferences must be enabled. Also note the - authentication option below. When testing the feature, keep in mind that your own changes will never trigger notifications to be sent to yourself.

- -

There are additional options for fine tuning in /includes/DefaultSettings.php; copy these to your LocalSettings.php and edit them there to change them.

-
- -
- -
    -
  • -
  • -
-
-
-

If this option is enabled, users have to confirm their e-mail address using a magic link sent to them whenever they set or change it, and only authenticated e-mail addresses can receive mails from other users and/or - change notification mails. Setting this option is recommended for public wikis because of potential abuse of the e-mail features above.

-
- -
- -

Database config

- -
-
- -" . htmlspecialchars( $errs['DBpicktype'] ) . "\n"; - } -?> -
-
- -
-
- -
-

- If your database server isn't on your web server, enter the name or IP address here. -

-
- -
-
-
-
-
-

- If you only have a single user account and database available, - enter those here. If you have database root access (see below) - you can specify new accounts/databases to be created. This account - will not be created if it pre-exists. If this is the case, ensure that it - has SELECT, INSERT, UPDATE, and DELETE permissions on the MediaWiki database. -

- -
- - checked="checked" /> -   -
-
-
- -

- If the database user specified above does not exist, or does not have access to create - the database (if needed) or tables within it, please check the box and provide details - of a superuser account, such as root, which does. -

-
- - -
-
-

If you need to share one database between multiple wikis, or - between MediaWiki and another web application, you may choose to - add a prefix to all the table names to avoid conflicts.

- -

Avoid exotic characters; something like mw_ is good.

-
- -
-
Select one:
-
    -
  • -
  • -
-
-

- InnoDB is best for public web installations, since it has good concurrency - support. MyISAM may be faster in single-user installations. MyISAM databases - tend to get corrupted more often than InnoDB databases. -

-
-
Select one:
-
    -
  • -
  • -
  • -
-
-

- This option is ignored on upgrade, the same character set will be kept. -

- WARNING: If you use backwards-compatible UTF-8 on MySQL 4.1+, and subsequently back up the database with mysqldump, it may destroy all non-ASCII characters, irreversibly corrupting your backups!. -

- In binary mode, MediaWiki stores UTF-8 text to the database in binary fields. This is more efficient than MySQL's UTF-8 mode, and allows you to use the full range of Unicode characters. In UTF-8 mode, MySQL will know what character set your data is in, and can present and convert it appropriately, but it won't let you store characters above the Basic Multilingual Plane. -

- - - -
-
-
-
-

The username specified above (at "DB username") will have its search path set to the above schemas, - so it is recommended that you create a new user. The above schemas are generally correct: - only change them if you are sure you need to.

-
- - - -
-
-

SQLite stores table data into files in the - filesystem.

- -

This directory must exist and be writable by the web server.

-
- - - -
-
-

If you need to share one database between multiple wikis, or - between MediaWiki and another web application, you may choose to - add a prefix to all the table names to avoid conflicts.

- -

Avoid exotic characters; something like mw_ is good.

-
- - - -
-
-
Select one:
-
    -
  • -
  • -
-
-

If you need to share one database between multiple wikis, or - between MediaWiki and another web application, you may specify - a different schema to avoid conflicts.

-
- - - -
-
-

If you need to share one database between multiple wikis, or - between MediaWiki and another web application, you may choose to - add a prefix to all the table names to avoid conflicts.

- -

Avoid exotic characters; something like mw_ is good.

-
-
-
- - -
- - -
-
-
- - -

Installation successful!

-

To complete the installation, please do the following: -

    -
  1. Download config/LocalSettings.php with your FTP client or file manager
  2. -
  3. Upload it to the parent directory
  4. -
  5. Delete config/LocalSettings.php
  6. -
  7. Start using your wiki! -
-

If you are in a shared hosting environment, do not just move LocalSettings.php -remotely. LocalSettings.php is currently owned by the user your webserver is running under, -which means that anyone on the same server can read your database password! Downloading -it and uploading it again will hopefully change the ownership to a user ID specific to you.

-
-HTML; - } else { - echo << -

-Installation successful! -Move the config/LocalSettings.php file to the parent directory, then follow - this link to your wiki.

-

You should change file permissions for LocalSettings.php as required to -prevent other users on the server reading passwords and altering configuration data.

-
-HTML; - } -} - - -function escapePhpString( $string ) { - if ( is_array( $string ) || is_object( $string ) ) { - return false; - } - return strtr( $string, - array( - "\n" => "\\n", - "\r" => "\\r", - "\t" => "\\t", - "\\" => "\\\\", - "\$" => "\\\$", - "\"" => "\\\"" - )); -} - -function writeLocalSettings( $conf ) { - $conf->PasswordSender = $conf->EmergencyContact; - $magic = ($conf->ImageMagick ? "" : "# "); - $convert = ($conf->ImageMagick ? $conf->ImageMagick : "/usr/bin/convert" ); - $rights = ($conf->RightsUrl) ? "" : "# "; - $hashedUploads = $conf->safeMode ? '' : '# '; - $dir = realpath( $conf->SQLiteDataDir ); - if ( !$dir ) { - $dir = $conf->SQLiteDataDir; // dumb realpath sometimes fails - } - $sqliteDataDir = escapePhpString( $dir ); - - if ( $conf->ShellLocale ) { - $locale = ''; - } else { - $locale = '# '; - $conf->ShellLocale = 'en_US.UTF-8'; - } - - switch ( $conf->Shm ) { - case 'memcached': - $cacheType = 'CACHE_MEMCACHED'; - $mcservers = var_export( $conf->MCServerArray, true ); - break; - case 'xcache': - case 'apc': - case 'eaccel': - $cacheType = 'CACHE_ACCEL'; - $mcservers = 'array()'; - break; - case 'dba': - $cacheType = 'CACHE_DBA'; - $mcservers = 'array()'; - break; - default: - $cacheType = 'CACHE_NONE'; - $mcservers = 'array()'; - } - - if ( $conf->Email == 'email_enabled' ) { - $enableemail = 'true'; - $enableuseremail = ( $conf->Emailuser == 'emailuser_enabled' ) ? 'true' : 'false' ; - $eauthent = ( $conf->Eauthent == 'eauthent_enabled' ) ? 'true' : 'false' ; - switch ( $conf->Enotif ) { - case 'enotif_usertalk': - $enotifusertalk = 'true'; - $enotifwatchlist = 'false'; - break; - case 'enotif_allpages': - $enotifusertalk = 'true'; - $enotifwatchlist = 'true'; - break; - default: - $enotifusertalk = 'false'; - $enotifwatchlist = 'false'; - } - } else { - $enableuseremail = 'false'; - $enableemail = 'false'; - $eauthent = 'false'; - $enotifusertalk = 'false'; - $enotifwatchlist = 'false'; - } - - $file = @fopen( "/dev/urandom", "r" ); - if ( $file ) { - $secretKey = bin2hex( fread( $file, 32 ) ); - fclose( $file ); - } else { - $secretKey = ""; - for ( $i=0; $i<8; $i++ ) { - $secretKey .= dechex(mt_rand(0, 0x7fffffff)); - } - print "
  • Warning: \$wgSecretKey key is insecure, generated with mt_rand(). Consider changing it manually.
  • \n"; - } - - # Add slashes to strings for double quoting - $slconf = wfArrayMap( "escapePhpString", get_object_vars( $conf ) ); - if( $conf->License == 'gfdl1_2' || $conf->License == 'pd' || $conf->License == 'gfdl1_3' ) { - # Needs literal string interpolation for the current style path - $slconf['RightsIcon'] = $conf->RightsIcon; - } - - if( $conf->DBtype == 'mysql' ) { - $dbsettings = -"# MySQL specific settings -\$wgDBprefix = \"{$slconf['DBprefix']}\"; - -# MySQL table options to use during installation or update -\$wgDBTableOptions = \"{$slconf['DBTableOptions']}\"; - -# Experimental charset support for MySQL 4.1/5.0. -\$wgDBmysql5 = {$conf->DBmysql5};"; - } elseif( $conf->DBtype == 'postgres' ) { - $dbsettings = -"# Postgres specific settings -\$wgDBport = \"{$slconf['DBport']}\"; -\$wgDBmwschema = \"{$slconf['DBpgschema']}\"; -\$wgDBts2schema = \"{$slconf['DBts2schema']}\";"; - } elseif( $conf->DBtype == 'sqlite' ) { - $dbsettings = -"# SQLite-specific settings -\$wgSQLiteDataDir = \"{$sqliteDataDir}\";"; - } elseif( $conf->DBtype == 'mssql' ) { - $dbsettings = -"# MSSQL specific settings -\$wgDBprefix = \"{$slconf['DBprefix2']}\";"; - } elseif( $conf->DBtype == 'ibm_db2' ) { - $dbsettings = -"# DB2 specific settings -\$wgDBport_db2 = \"{$slconf['DBport_db2']}\"; -\$wgDBmwschema = \"{$slconf['DBdb2schema']}\"; -\$wgDBcataloged = \"{$slconf['DBcataloged']}\";"; - } elseif( $conf->DBtype == 'oracle' ) { - $dbsettings = -"# Oracle specific settings -\$wgDBprefix = \"{$slconf['DBprefix_ora']}\";"; - } else { - // ummm... :D - $dbsettings = ''; - } - - - $localsettings = " -# This file was automatically generated by the MediaWiki installer. -# If you make manual changes, please keep track in case you need to -# recreate them later. -# -# See includes/DefaultSettings.php for all configurable settings -# and their default values, but don't forget to make changes in _this_ -# file, not there. -# -# Further documentation for configuration settings may be found at: -# http://www.mediawiki.org/wiki/Manual:Configuration_settings - -# If you customize your file layout, set \$IP to the directory that contains -# the other MediaWiki files. It will be used as a base to locate files. -if( defined( 'MW_INSTALL_PATH' ) ) { - \$IP = MW_INSTALL_PATH; -} else { - \$IP = dirname( __FILE__ ); -} - -\$path = array( \$IP, \"\$IP/includes\", \"\$IP/languages\" ); -set_include_path( implode( PATH_SEPARATOR, \$path ) . PATH_SEPARATOR . get_include_path() ); - -require_once( \"\$IP/includes/DefaultSettings.php\" ); - -if ( \$wgCommandLineMode ) { - if ( isset( \$_SERVER ) && array_key_exists( 'REQUEST_METHOD', \$_SERVER ) ) { - die( \"This script must be run from the command line\\n\" ); - } -} -## Uncomment this to disable output compression -# \$wgDisableOutputCompression = true; - -\$wgSitename = \"{$slconf['Sitename']}\"; - -## The URL base path to the directory containing the wiki; -## defaults for all runtime URL paths are based off of this. -## For more information on customizing the URLs please see: -## http://www.mediawiki.org/wiki/Manual:Short_URL -\$wgScriptPath = \"{$slconf['ScriptPath']}\"; -\$wgScriptExtension = \"{$slconf['ScriptExtension']}\"; - -## The relative URL path to the skins directory -\$wgStylePath = \"\$wgScriptPath/skins\"; - -## The relative URL path to the logo. Make sure you change this from the default, -## or else you'll overwrite your logo when you upgrade! -\$wgLogo = \"\$wgStylePath/common/images/wiki.png\"; - -## UPO means: this is also a user preference option - -\$wgEnableEmail = $enableemail; -\$wgEnableUserEmail = $enableuseremail; # UPO - -\$wgEmergencyContact = \"{$slconf['EmergencyContact']}\"; -\$wgPasswordSender = \"{$slconf['PasswordSender']}\"; - -\$wgEnotifUserTalk = $enotifusertalk; # UPO -\$wgEnotifWatchlist = $enotifwatchlist; # UPO -\$wgEmailAuthentication = $eauthent; - -## Database settings -\$wgDBtype = \"{$slconf['DBtype']}\"; -\$wgDBserver = \"{$slconf['DBserver']}\"; -\$wgDBname = \"{$slconf['DBname']}\"; -\$wgDBuser = \"{$slconf['DBuser']}\"; -\$wgDBpassword = \"{$slconf['DBpassword']}\"; - -{$dbsettings} - -## Shared memory settings -\$wgMainCacheType = $cacheType; -\$wgMemCachedServers = $mcservers; - -## To enable image uploads, make sure the 'images' directory -## is writable, then set this to true: -\$wgEnableUploads = false; -{$magic}\$wgUseImageMagick = true; -{$magic}\$wgImageMagickConvertCommand = \"{$convert}\"; - -## If you use ImageMagick (or any other shell command) on a -## Linux server, this will need to be set to the name of an -## available UTF-8 locale -{$locale}\$wgShellLocale = \"{$slconf['ShellLocale']}\"; - -## If you want to use image uploads under safe mode, -## create the directories images/archive, images/thumb and -## images/temp, and make them all writable. Then uncomment -## this, if it's not already uncommented: -{$hashedUploads}\$wgHashedUploadDirectory = false; - -## If you have the appropriate support software installed -## you can enable inline LaTeX equations: -\$wgUseTeX = false; - -## Set \$wgCacheDirectory to a writable directory on the web server -## to make your wiki go slightly faster. The directory should not -## be publically accessible from the web. -#\$wgCacheDirectory = \"\$IP/cache\"; - -\$wgLocalInterwiki = strtolower( \$wgSitename ); - -\$wgLanguageCode = \"{$slconf['LanguageCode']}\"; - -\$wgSecretKey = \"$secretKey\"; - -## Default skin: you can change the default skin. Use the internal symbolic -## names, ie 'vector', 'monobook': -\$wgDefaultSkin = 'monobook'; - -## For attaching licensing metadata to pages, and displaying an -## appropriate copyright notice / icon. GNU Free Documentation -## License and Creative Commons licenses are supported so far. -{$rights}\$wgEnableCreativeCommonsRdf = true; -\$wgRightsPage = \"\"; # Set to the title of a wiki page that describes your license/copyright -\$wgRightsUrl = \"{$slconf['RightsUrl']}\"; -\$wgRightsText = \"{$slconf['RightsText']}\"; -\$wgRightsIcon = \"{$slconf['RightsIcon']}\"; -# \$wgRightsCode = \"{$slconf['RightsCode']}\"; # Not yet used - -\$wgDiff3 = \"{$slconf['diff3']}\"; - -# When you make changes to this configuration file, this will make -# sure that cached pages are cleared. -\$wgCacheEpoch = max( \$wgCacheEpoch, gmdate( 'YmdHis', @filemtime( __FILE__ ) ) ); -"; ## End of setting the $localsettings string - - // Keep things in Unix line endings internally; - // the system will write out as local text type. - return str_replace( "\r\n", "\n", $localsettings ); -} - -function dieout( $text ) { - global $mainListOpened; - if( $mainListOpened ) echo( "" ); - if( $text != '' && substr( $text, 0, 2 ) != '$text

    \n"; - } else { - echo $text; - } - die( "\n\n
    \n
    \n\n\n\n" ); -} - -function importVar( &$var, $name, $default = "" ) { - if( isset( $var[$name] ) ) { - $retval = $var[$name]; - if ( get_magic_quotes_gpc() ) { - $retval = stripslashes( $retval ); - } - } else { - $retval = $default; - } - taint( $retval ); - return $retval; -} - -function importPost( $name, $default = "" ) { - return importVar( $_POST, $name, $default ); -} - -function importCheck( $name ) { - return isset( $_POST[$name] ); -} - -function importRequest( $name, $default = "" ) { - return importVar( $_REQUEST, $name, $default ); -} - -function aField( &$conf, $field, $text, $type = "text", $value = "", $onclick = '' ) { - static $radioCount = 0; - if( $type != "" ) { - $xtype = "type=\"$type\""; - } else { - $xtype = ""; - } - - $id = $field; - $nolabel = ($type == "radio") || ($type == "hidden"); - - if ($type == 'radio') - $id .= $radioCount++; - - if( !$nolabel ) { - echo ""; - } - - if( $type == "radio" && $value == $conf->$field ) { - $checked = "checked='checked'"; - } else { - $checked = ""; - } - echo "$field ); - } - - - echo "\" />"; - if( $nolabel ) { - echo ""; - } - - global $errs; - if(isset($errs[$field])) { - echo "" . htmlspecialchars( $errs[$field] ) . "\n"; - } -} - -function getLanguageList() { - global $wgDummyLanguageCodes; - - $codes = array(); - foreach ( Language::getLanguageNames() as $code => $name ) { - if( in_array( $code, $wgDummyLanguageCodes ) ) continue; - $codes[$code] = $code . ' - ' . $name; - } - ksort( $codes ); - return $codes; -} - -#Check for location of an executable -# @param string $loc single location to check -# @param array $names filenames to check for. -# @param mixed $versioninfo array of details to use when checking version, use false for no version checking -function locate_executable($loc, $names, $versioninfo = false) { - if (!is_array($names)) - $names = array($names); - - foreach ($names as $name) { - $command = "$loc".DIRECTORY_SEPARATOR."$name"; - if (@file_exists($command)) { - if (!$versioninfo) - return $command; - - $file = str_replace('$1', $command, $versioninfo[0]); - if ( strstr( wfShellExec( $file ), $versioninfo[1]) !== false ) - return $command; - } - } - return false; -} - -# Test a memcached server -function testMemcachedServer( $server ) { - $hostport = explode(":", $server); - $errstr = false; - $fp = false; - if ( !function_exists( 'fsockopen' ) ) { - $errstr = "Can't connect to memcached, fsockopen() not present"; - } - if ( !$errstr && count( $hostport ) != 2 ) { - $errstr = 'Please specify host and port'; - } - if ( !$errstr ) { - list( $host, $port ) = $hostport; - $errno = 0; - $fsockerr = ''; - - $fp = @fsockopen( $host, $port, $errno, $fsockerr, 1.0 ); - if ( $fp === false ) { - $errstr = "Cannot connect to memcached on $host:$port : $fsockerr"; - } - } - if ( !$errstr ) { - $command = "version\r\n"; - $bytes = fwrite( $fp, $command ); - if ( $bytes != strlen( $command ) ) { - $errstr = "Cannot write to memcached socket on $host:$port"; - } - } - if ( !$errstr ) { - $expected = "VERSION "; - $response = fread( $fp, strlen( $expected ) ); - if ( $response != $expected ) { - $errstr = "Didn't get correct memcached response from $host:$port"; - } - } - if ( $fp ) { - fclose( $fp ); - } - if ( !$errstr ) { - echo "
  • Connected to memcached on " . htmlspecialchars( "$host:$port" ) ." successfully
  • "; - } - return $errstr; -} - -function database_picker($conf) { - global $ourdb; - print "\n"; - foreach(array_keys($ourdb) as $db) { - if ($ourdb[$db]['havedriver']) { - print "\t
  • "; - aField( $conf, "DBtype", $ourdb[$db]['fullname'], 'radio', $db, 'onclick'); - print "
  • \n"; - } - } - print "\n\t"; -} - -function database_switcher($db) { - global $ourdb; - $color = $ourdb[$db]['bgcolor']; - $full = $ourdb[$db]['fullname']; - print "
    $full-specific options\n"; -} - -function printListItem( $item ) { - print "
  • $item
  • "; -} - -# Determine a suitable value for $wgShellLocale -function getShellLocale( $wikiLang ) { - # Give up now if we're in safe mode or open_basedir - # It's theoretically possible but tricky to work with - if ( wfIniGetBool( "safe_mode" ) || ini_get( 'open_basedir' ) || !function_exists('exec') ) { - return false; - } - - $os = php_uname( 's' ); - $supported = array( 'Linux', 'SunOS', 'HP-UX' ); # Tested these - if ( !in_array( $os, $supported ) ) { - return false; - } - - # Get a list of available locales - $lines = $ret = false; - $lines = wfShellExec( '/usr/bin/locale -a', $ret, true ); - if ( $ret ) { - return false; - } - - $lines = wfArrayMap( 'trim', explode( "\n", $lines ) ); - $candidatesByLocale = array(); - $candidatesByLang = array(); - foreach ( $lines as $line ) { - if ( $line === '' ) { - continue; - } - if ( !preg_match( '/^([a-zA-Z]+)(_[a-zA-Z]+|)\.(utf8|UTF-8)(@[a-zA-Z_]*|)$/i', $line, $m ) ) { - continue; - } - list( $all, $lang, $territory, $charset, $modifier ) = $m; - $candidatesByLocale[$m[0]] = $m; - $candidatesByLang[$lang][] = $m; - } - - # Try the current value of LANG - if ( isset( $candidatesByLocale[ getenv( 'LANG' ) ] ) ) { - return getenv( 'LANG' ); - } - - # Try the most common ones - $commonLocales = array( 'en_US.UTF-8', 'en_US.utf8', 'de_DE.UTF-8', 'de_DE.utf8' ); - foreach ( $commonLocales as $commonLocale ) { - if ( isset( $candidatesByLocale[$commonLocale] ) ) { - return $commonLocale; - } - } - - # Is there an available locale in the Wiki's language? - if ( isset( $candidatesByLang[$wikiLang] ) ) { - $m = reset( $candidatesByLang[$wikiLang] ); - return $m[0]; - } - - # Are there any at all? - if ( count( $candidatesByLocale ) ) { - $m = reset( $candidatesByLocale ); - return $m[0]; - } - - # Give up - return false; -} - -function wfArrayMap( $function, $input ) { - $ret = array_map( $function, $input ); - foreach ( $ret as $key => $value ) { - $taint = istainted( $input[$key] ); - if ( $taint ) { - taint( $ret[$key], $taint ); - } - } - return $ret; -} - -?> - -
    -
    -

    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. - or read it online

    -
    - - - - -
    - - -
    - -

    MediaWiki is Copyright © 2001-2009 by Magnus Manske, Brion Vibber, - Lee Daniel Crocker, Tim Starling, Erik Möller, Gabriel Wicke, Ævar Arnfjörð Bjarmason, Niklas Laxström, - Domas Mituzas, Rob Church, Yuri Astrakhan, Aryeh Gregor, Aaron Schulz and others.

    -
    -
    - - - - - diff --git a/config/OBSOLETE b/config/OBSOLETE new file mode 100644 index 00000000..108c1675 --- /dev/null +++ b/config/OBSOLETE @@ -0,0 +1,2 @@ +This is a back-compat directory for installer, which resides in mw-config/ now. +It will probably be remved in 1.19. \ No newline at end of file diff --git a/config/index.php b/config/index.php index d913bbb1..948fe69f 100644 --- a/config/index.php +++ b/config/index.php @@ -1,43 +1 @@ -, 2006 Rob Church -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - -# Attempt to set up the include path, to fix problems with relative includes -$IP = dirname( dirname( __FILE__ ) ); -define( 'MW_INSTALL_PATH', $IP ); - -# Define an entry point and include some files -define( "MEDIAWIKI", true ); -define( "MEDIAWIKI_INSTALL", true ); - -# Check for PHP 5 -if ( !function_exists( 'version_compare' ) - || version_compare( phpversion(), '5.0.0' ) < 0 -) { - define( 'MW_PHP4', '1' ); - require( "$IP/includes/DefaultSettings.php" ); - require( "$IP/includes/templates/PHP4.php" ); - exit; -} - -// Isolate the rest of the code so this file can die out cleanly -// if we find we're running under PHP 4.x... We use PHP 5 syntax -// which doesn't parse under 4. -require( dirname( __FILE__ ) . "/Installer.php" ); +select( /* ...see docs... */ ); -while ( $row = $dbr->fetchObject( $res ) ) { +foreach ( $res as $row ) { ... } -$dbr->freeResult( $res ); - -Note the assignment operator in the while condition. For a write query, use something like: @@ -149,9 +146,7 @@ to avoid long-lasting locks. By default, MediaWiki opens a transaction at the first query, and commits it before the output is sent. Locks will be held from the time when the query is done until the commit. So you can reduce lock time by doing as much processing as possible before you -do your write queries. Update operations which do not require database -access can be delayed until after the commit by adding an object to -$wgPostCommitUpdateList. +do your write queries. Often this approach is not good enough, and it becomes necessary to enclose small groups of queries in their own transaction. Use the @@ -174,3 +169,20 @@ queries, by using an appropriate condition in the WHERE clause of an UPDATE, or by using unique indexes in combination with INSERT IGNORE. Then use the affected row count to see if the query succeeded. +------------------------------------------------------------------------ + Supported DBMSs +------------------------------------------------------------------------ + +MediaWiki is written primarily for use with MySQL. Queries are optimized +for it and its schema is considered the canonical version. However, +MediaWiki does support the following other DBMSs to varying degrees. + +* PostgreSQL +* SQLite +* Oracle +* IBM DB2 +* MSSQL + +More information can be found about each of these databases (known issues, +level of support, extra configuration) in the "databases" subdirectory in +this folder. diff --git a/docs/databases/ibm_db2.txt b/docs/databases/ibm_db2.txt new file mode 100644 index 00000000..3c3f381c --- /dev/null +++ b/docs/databases/ibm_db2.txt @@ -0,0 +1,3 @@ +== See also == +*[http://www.mediawiki.org/wiki/Manual:IBM_DB2 Installation instructions] +*[http://ca.php.net/manual/en/function.db2-connect.php PHP Manual for DB2 functions] \ No newline at end of file diff --git a/docs/databases/postgres.txt b/docs/databases/postgres.txt new file mode 100644 index 00000000..cec51861 --- /dev/null +++ b/docs/databases/postgres.txt @@ -0,0 +1,100 @@ +This document describes the state of Postgres support in MediaWiki. + + +== Overview == + +Support for PostgreSQL has been available since version 1.7 +of MediaWiki, and is fairly well maintained. The main code +is very well integrated, while extensions are very hit and miss. +Still, it is probably the most supported database after MySQL. +Much of the work in making MediaWiki database-agnostic came +about through the work of creating Postgres support. + + +== Required versions == + +The current minimum version of PostgreSQL for MediaWiki is 8.1. +It is expected that this will be raised to 8.3 at some point, +as 8.1 and 8.2 are nearing end of life. + + + +== Database schema == + +Postgres has its own schema file at maintenance/postgres/tables.sql. + +The goal is to keep this file as close as possible to the canonical +schema at maintenance/tables.sql, but without copying over +all the usage comments. General notes on the conversion: + +* The use of a true TIMESTAMP rather than the text string that +MySQL uses is highly encouraged. There are still places in the +code (especially extensions) which make assumptions about the +textual nature of timestamp fields, but these can almost always +be programmed around. + +* Although Postgres has a true BOOLEAN type, boolean columns +are always mapped to SMALLINT, as the code does not always treat +the column as a boolean (which is limited to accepting true, +false, 0, 1, t, or f) + +* The default data type for all VARCHAR, CHAR, and VARBINARY +columns should simply be TEXT. The only exception is +when VARBINARY is used to store true binary data, such as +the math_inputhash column, in which case BYTEA should be used. + +* All integer variants should generally be mapped to INTEGER. +There is small-to-no advantage in using SMALLINT versus +INTEGER in Postgres, and the possibility of running out of +room outweighs such concerns. The columns that are BIGINT +in other schemas should be INTEGER as well, as none of them +so far are even remotely likely to reach the 32 billion +limit of an INTEGER. + +* Blobs (blob, tinyblog, mediumblob) should be mapped to TEXT +whenever possible, and to BYTEA if they are known to contain +binary data. + +* All length modifiers on data types should be removed. If +they are on an INTEGER, it's probably an error, and if on +any text-based field, simply using TEXT is preferred. + +* Sequences should be explicitly named rather than using +SERIAL, as the code can depend on having a specific name. + +* Foreign keys should be used when possible. This makes things +both easier and harder in the code, but most of the major +problems have now been overcome. Always add an explicit ON DELETE +clause, and consider carefully what choice to use (all things +considered, prefer CASCADE). + +* The use of CIDR should be done very carefully, because the code +will sometimes want to store things such as an empty string or +other non-IP value in the column. When in doubt, use TEXT. + +* Indexes should be created using the original MySQL tables.sql +as a guide, but keeping in mind the ability of Postgres to use +partial indexes, functional indexes, and bitmaps. The index names +should be logical but are not too important, as they are never +referenced directly by the code (unlike sequence names). Most of +the indexes in the file as of this writing are there due to production +testing of expensive queries on a busy wiki. + + +== Keeping in sync with tables.sql == + +The script maintenance/postgres/compare_schemas.pl should be +periodically run. It will parse both "tables.sql" files and +produce any differences found. Such differences should be fixed +or exceptions specifically carved out by editing the script +itself. This script has also been very useful in finding problems +in maintenance/tables.sql itself, as it is very strict in the +format it expects things to be in. :) + + +== Getting help == + +In addition to the normal venues (MediaWiki mailing lists +and IRC channels), the #postgresql channel on irc.freenode.net +is a friendly and expert resource if you should encounter a +problem with your Postgres-enabled MediaWiki. diff --git a/docs/databases/sqlite.txt b/docs/databases/sqlite.txt new file mode 100644 index 00000000..b8a45553 --- /dev/null +++ b/docs/databases/sqlite.txt @@ -0,0 +1,12 @@ +SQLite shares the MySQL schema file at maintenance/tables.sql, with a set of +compatibility regexes to convert MySQL syntax to SQLite syntax: + +* BINARY() and VARBINARY() fields are converted to BLOB +* the UNSIGNED modifier is removed +* "INT" fields are converted to "INTEGER" +* ENUM is converted to BLOB +* the BINARY collation modifier is removed +* AUTO_INCREMENT is converted to AUTOINCREMENT +* Any table options are removed +* Truncated indexes are upgraded to full-width indexes +* FULLTEXT indexes are converted to ordinary indexes diff --git a/docs/distributors.txt b/docs/distributors.txt index 5586df12..e9f151cf 100644 --- a/docs/distributors.txt +++ b/docs/distributors.txt @@ -58,13 +58,11 @@ If you really must mess around with the directory structure, note that the following files *must* all be web-accessible for MediaWiki to function correctly: - * api.php, img_auth.php, index.php, mwScriptLoader.php, opensearch_desc.php, - profileinfo.php, redirect.php, thumb.php, trackback.php. These are the entry - points for normal usage. This list may be incomplete and is subject to - change. - * config/index.php: Used for web-based installation (sets up the database, - prompts for the name of the wiki, etc.). No command-line installation is - currently available. + * api.php, img_auth.php, index.php, load.php, opensearch_desc.php, thumb.php, + profileinfo.php, redirect.php, trackback.php. These are the entry points for + normal usage. This list may be incomplete and is subject to change. + * mw-config/index.php: Used for web-based installation (sets up the database, + prompts for the name of the wiki, etc.). * images/: Used for uploaded files. This could be somewhere else if $wgUploadDirectory and $wgUploadPath are changed appropriately. * skins/*/: Subdirectories of skins/ contain CSS and JavaScript files that @@ -84,25 +82,42 @@ something. You have been warned. == Configuration == MediaWiki is configured using LocalSettings.php. This is a PHP file that's -generated when the user visits config/index.php to install the software, and +generated when the user visits mw-config/index.php to install the software, and which the user can edit by hand thereafter. It's just a plain old PHP file, and can contain any PHP statements. It usually sets global variables that are used for configuration, and includes files used by any extensions. Distributors cannot easily add extra statements to the autogenerated -LocalSettings.php at the present time -- although hacking config/index.php +LocalSettings.php at the present time -- although hacking mw-config/index.php would work. It would be nice if this situation could be improved. +There's a new maintenance/install.php script which could be used for performing +an install through the command line. + Some configuration options that distributors might be in a position to set intelligently: * $wgEmergencyContact: An e-mail address that can be used to contact the wiki - administrator. By default, "wikiadmin@$wgServerName". + administrator. By default, "wikiadmin@ServerName". * $wgPasswordSender: The e-mail address to use when sending password e-mails. - By default, "MediaWiki Mail ". + By default, "MediaWiki Mail ". + (with ServerName guessed from the http request) * $wgSMTP: Can be configured to use SMTP for mail sending instead of PHP mail(). +== Updates == +The correct way for updating a wiki is to update the files and then run from +command line the maintenance/update.php script (with appropriate parameters if +files were moved). It will perform all the needed steps to update the database +schema and contents to the version from whatever old one it has. +Any package manager which replaces the files but doesn't update the db is leaving +an inconsistent wiki that may produce blank pages (php errors) when new features +using the changed schema would be used. + +Since MediaWiki 1.17 it is possible to upgrade using the installer by providing +an arbitrary secret value stored as $wgUpgradeKey in LocalSettings (older versions +needed to rename LocalSettings.php in order to upgrade using the installer). + == Documentation == MediaWiki's official documentation is split between two places: the source @@ -156,8 +171,8 @@ perhaps configure it to use them (see Configuration section of this document): "$wgAntivirus = 'clamav';". * DjVuLibre: Allows processing of DjVu files. To enable this, set "$wgDjvuDump = 'djvudump'; $wgDjvuRenderer = 'ddjvu'; $wgDjvuTxt = 'djvutxt';". - * HTML Tidy: Fixes errors in HTML at runtime. Can be enabled with "$wgUseTidy - = true;". + * HTML Tidy: Fixes errors in HTML at runtime. Can be enabled with + "$wgUseTidy = true;". * ImageMagick: For resizing images. "$wgUseImageMagick = true;" will enable it. PHP's GD can also be used, but ImageMagick is preferable. * Squid: Can provide a drastic speedup and a major cut in resource @@ -172,7 +187,7 @@ perhaps configure it to use them (see Configuration section of this document): MediaWiki uses some standard GNU utilities as well, such as diff and diff3. If these are present in /usr/bin or some other reasonable location, they will be -used automatically. +configured automatically on install. MediaWiki also has a "job queue" that handles background processing. Because shared hosts often don't provide access to cron, the job queue is run on every diff --git a/docs/export-0.5.xsd b/docs/export-0.5.xsd new file mode 100644 index 00000000..a0884958 --- /dev/null +++ b/docs/export-0.5.xsd @@ -0,0 +1,213 @@ + + + + + + + MediaWiki's page export format + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/hooks.txt b/docs/hooks.txt index 174fb7d9..8a0003a3 100644 --- a/docs/hooks.txt +++ b/docs/hooks.txt @@ -263,6 +263,23 @@ $message: out parameter: error message to display on abort $user: the User object that was created. (Parameter added in 1.7) $byEmail: true when account was created "by email" (added in 1.12) +'AfterImportPage': When a page import is completed +$title: Title under which the revisions were imported +$origTitle: Title provided by the XML file +$revCount: Number of revisions in the XML file +$sRevCount: Number of sucessfully imported revisions +$pageInfo: associative array of page information + +'AfterUserMessage': After a user message has been left, this hook is +called to take care of any cleanup. +$user: The user who we left the message for. +$article: The article the message was left on. +$subject: The subject of the message +$text: The text of the message. +$signature: The signature we used. +$summary: The edit summary. +$editor: The editor that performed the edit. + 'AjaxAddScript': Called in output page just before the initialisation of the javascript ajax engine. The hook is only called when ajax is enabled ( $wgUseAjax = true; ). @@ -345,6 +362,13 @@ is the User object. In the hook, just add your callback to the $tokenFunctions array and return true (returning false makes no sense) $tokenFunctions: array(action => callback) +'ApiRsdServiceApis': Add or remove APIs from the RSD services list. +Each service should have its own entry in the $apis array and have a +unique name, passed as key for the array that represents the service data. +In this data array, the key-value-pair identified by the apiLink key is +required. +&$apis: array of services + 'ArticleAfterFetchContent': after fetching content of an article from the database $article: the article (object) being loaded from the database @@ -356,6 +380,10 @@ $article: the article (object) being deleted $output: the OutputPage object ($wgOut) &$reason: the reason (string) the article is being deleted +'ArticleContentOnDiff': before showing the article below a diff + $diffEngine: the DifferenceEngine + $output: the OutputPage object ($wgOut) + 'ArticleDelete': before an article is deleted $article: the article (object) being deleted $user: the user (object) deleting the article @@ -429,7 +457,7 @@ $moveonly: boolean whether it was for move only or not 'ArticlePurge': before executing "&action=purge" $article: article (object) to purge -'ArticleRevisionVisiblitySet': called when changing visibility of one or more +'ArticleRevisionVisibilitySet': called when changing visibility of one or more revision of an article &$title: title object of the article @@ -552,6 +580,9 @@ $user: the user who did the block (not the one being blocked) 'BookInformation': Before information output on Special:Booksources $isbn: ISBN to show information for $output: OutputPage object in use + +'CanonicalNamespaces': For extensions adding their own namespaces or altering the defaults +&$namespaces: Array of namespace numbers with corresponding canonical names 'CategoryPageView': before viewing a categorypage in CategoryPage::view $catpage: CategoryPage instance @@ -617,8 +648,9 @@ $section: The designation of the section being pointed to, to be included in the link, like "§ion=$section" $tooltip: The default tooltip. Escape with htmlspecialchars() before using. By default, this is wrapped in the 'editsectionhint' message. -$result: The HTML to return, prefilled with the default plus whatever other +&$result: The HTML to return, prefilled with the default plus whatever other changes earlier hooks have made +$lang: The language code to use for the link in the wfMsg* functions 'EditFilter': Perform checks on an edit $editor: Edit form (see includes/EditPage.php) @@ -717,7 +749,8 @@ $skin: Skin rendering the UI $title: Title being linked to $section: Section to link to $link: Default link -$result: Result (alter this to override the generated links) +&$result: Result (alter this to override the generated links) +$lang: The language code to use for the link in the wfMsg* functions 'EmailConfirmed': When checking that the user's email address is "confirmed" $user: User being checked @@ -731,17 +764,29 @@ $from: address of sending user $subject: subject of the mail $text: text of the mail +'EmailUserCC': before sending the copy of the email to the author +$to: address of receiving user +$from: address of sending user +$subject: subject of the mail +$text: text of the mail + 'EmailUserComplete': after sending email from one user to another $to: address of receiving user $from: address of sending user $subject: subject of the mail $text: text of the mail +'EmailUserForm': after building the email user form object +$form: HTMLForm object + 'EmailUserPermissionsErrors': to retrieve permissions errors for emailing a user. $user: The user who is trying to email another user. $editToken: The user's edit token. &$hookErr: Out-param for the error. Passed as the parameters to OutputPage::showErrorPage. +'ExtensionTypes': called when generating the extensions credits, use this to change the tables headers +&$extTypes: associative array of extensions types + 'FetchChangesList': When fetching the ChangesList derivative for a particular user &$user: User the list is being fetched for @@ -759,6 +804,8 @@ $reason: reason 'FileUpload': When a file upload occurs $file : Image object representing the file that was uploaded +$reupload : Boolean indicating if there was a previously another image there or not (since 1.17) +$hasDescription : Boolean indicating that there was already a description page and a new one from the comment wasn't created (since 1.17) 'FileUndeleteComplete': When a file is undeleted $title: title object to the file @@ -766,6 +813,12 @@ $fileVersions: array of undeleted versions. Empty if all versions were restored $user: user who performed the undeletion $reason: reason +'FormatUserMessage': Hook to format a message if you want to override +the internal formatter. +$subject: Title of the message. +&$text: Text of the message. +$signature: Signature that they would like to leave. + 'GetAutoPromoteGroups': When determining which autopromote groups a user is entitled to be in. &$user: user to promote. @@ -789,6 +842,9 @@ $title: Title object of page $url: string value as output (out parameter, can modify) $query: query options passed to Title::getInternalURL() +'GetIP': modify the ip of the current user (called only once) +&$ip: string holding the ip as determined so far + 'GetLinkColours': modify the CSS class of an array of page links $linkcolour_ids: array of prefixed DB keys of the pages linked to, indexed by page_id. @@ -818,10 +874,6 @@ $result: User permissions error to add. If none, return true. 'getUserPermissionsErrorsExpensive': Absolutely the same, but is called only if expensive checks are enabled. -'HTMLCacheUpdate::doUpdate': After cache invalidation updates are inserted -into the job queue. -$title: Title object, pages linked to this title are purged. - 'ImageBeforeProduceHTML': Called before producing the HTML created by a wiki image insertion. You can skip the default logic entirely by returning false, or just modify a few things using call-by-reference. @@ -873,6 +925,29 @@ $page: ImagePage object $result[2 through n]=Parameters passed to body text message. Please note the header message cannot receive/use parameters. +'ImportHandleLogItemXMLTag': When parsing a XML tag in a log item +$reader: XMLReader object +$logInfo: Array of information +Return false to stop further processing of the tag + +'ImportHandlePageXMLTag': When parsing a XML tag in a page +$reader: XMLReader object +$pageInfo: Array of information +Return false to stop further processing of the tag + +'ImportHandleRevisionXMLTag': When parsing a XML tag in a page revision +$reader: XMLReader object +$revInfo: Array of information +Return false to stop further processing of the tag + +'ImportHandleToplevelXMLTag': When parsing a top level XML tag +$reader: XMLReader object +Return false to stop further processing of the tag + +'ImportHandleUploadXMLTag': When parsing a XML tag in a file upload +$reader: XMLReader object +$revisionInfo: Array of information +Return false to stop further processing of the tag 'InitializeArticleMaybeRedirect': MediaWiki check to see if title is a redirect $title: Title object ($wgTitle) @@ -964,20 +1039,20 @@ $linkType: The external link type 'LinksUpdate': At the beginning of LinksUpdate::doUpdate() just before the actual update -&$linksUpdate: the LinkUpdate object +&$linksUpdate: the LinksUpdate object 'LinksUpdateComplete': At the end of LinksUpdate::doUpdate() when updating has completed -&$linksUpdate: the LinkUpdate object +&$linksUpdate: the LinksUpdate object 'LinksUpdateConstructed': At the end of LinksUpdate() is contruction. -&$linksUpdate: the LinkUpdate object +&$linksUpdate: the LinksUpdate object 'ListDefinedTags': When trying to find all defined tags. &$tags: The list of tags. -'LoadExtensionSchemaUpdates': called by maintenance/updaters.inc when upgrading -database schema +'LoadExtensionSchemaUpdates': called during database installation and updates +&updater: A DatabaseUpdater subclass 'LocalFile::getHistory': called before file history query performed $file: the file @@ -1038,7 +1113,9 @@ $magicWords: array of strings $variableIDs: array of strings 'MakeGlobalVariablesScript': called right before Skin::makeVariablesScript -is executed +is executed. Ideally, this hook should only be used to add variables that +depend on the current page/request; static configuration should be added +through ResourceLoaderGetConfigVars instead. &$vars: variable (or multiple variables) to be added into the output of Skin::makeVariablesScript @@ -1090,7 +1167,7 @@ been rendered (useful for adding more) Note: this is only run for the Monobook skin. This hook is deprecated and may be removed in the future. To add items to the toolbox you should use the SkinTemplateToolboxEnd hook instead, which works for all -'SkinTemplate'-type skins. +"SkinTemplate"-type skins. $tools: array of tools 'NewRevisionFromEditComplete': called when a revision was inserted @@ -1130,6 +1207,14 @@ the resulting HTML is about to be displayed. $parserOutput: the parserOutput (object) that corresponds to the page $text: the text that will be displayed, in HTML (string) +'OutputPageBodyAttributes': called when OutputPage::headElement is creating the body +tag to allow for extensions to add attributes to the body of the page they might +need. Or to allow building extensions to add body classes that aren't of high +enough demand to be included in core. +$out: The OutputPage which called the hook, can be used to get the real title +$sk: The Skin that called OutputPage::headElement +&$bodyAttrs: An array of attributes for the body tag passed to Html::openElement + 'OutputPageCheckLastModified': when checking if the page has been modified since the last visit &$modifiedTimes: array of timestamps. @@ -1274,13 +1359,23 @@ $errorMsg: an html message string of an error $article: the page the form is shown for $out: OutputPage object +'ResourceLoaderRegisterModules': Right before modules information is required, such as when responding to a resource +loader request or generating HTML output. +&$resourceLoader: ResourceLoader object + 'RawPageViewBeforeOutput': Right before the text is blown out in action=raw &$obj: RawPage object &$text: The text that's going to be the output -'RecentChange_save': called at the end of RecenChange::save() +'RecentChange_save': called at the end of RecentChange::save() $recentChange: RecentChange object +'ResourceLoaderGetConfigVars': called at the end of +ResourceLoaderStartUpModule::getConfig(). Use this to export static +configuration variables to JavaScript. Things that depend on the current +page/request state must be added through MakeGlobalVariablesScript instead. +&$vars: array( variable name => value ) + 'RevisionInsertComplete': called after a revision is inserted into the DB &$revision: the Revision $data: the data stored in old_text. The meaning depends on $flags: if external @@ -1319,6 +1414,16 @@ $query : Original query. 'SetupAfterCache': Called in Setup.php, after cache objects are set +'SetupUserMessageArticle': Called in User::leaveUserMessage() before +anything has been posted to the article. +$user: The user who we left the message for. +&$article: The article that will be posted to. +$subject: The subject of the message +$text: The text of the message. +$signature: The signature we used. +$summary: The edit summary. +$editor: The editor that performed the edit. + 'ShowMissingArticle': Called when generating the output for a non-existent page $article: The article object corresponding to the page @@ -1351,6 +1456,7 @@ Append to $text to add additional text/scripts after the stock bottom scripts. 'SkinAfterContent': Allows extensions to add text after the page content and article metadata. &$data: (string) Text to be printed out directly (without parsing) +$skin: Skin object This hook should work in all skins. Just set the &$data variable to the text you're going to add. @@ -1364,10 +1470,16 @@ $title: displayed page title $type: 'normal' or 'history' for old/diff views &$msg: overridable message; usually 'copyright' or 'history_copyright'. This message must be in HTML format, not wikitext! &$link: overridable HTML link to be passed into the message as $1 +&$forContent: overridable flag if copyright footer is shown in content language. -'SkinSubPageSubtitle': At the beginning of Skin::subPageSubtitle() +'SkinGetPoweredBy' +&$text: additional 'powered by' icons in HTML. +Note: Modern skin does not use the MediaWiki icon but plain text instead $skin: Skin object + +'SkinSubPageSubtitle': At the beginning of Skin::subPageSubtitle() &$subpages: Subpage links HTML +$skin: Skin object If false is returned $subpages will be used instead of the HTML subPageSubtitle() generates. If true is returned, $subpages will be ignored and the rest of @@ -1388,7 +1500,10 @@ $nav_urls: array of tabs [See http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/examples/Content_action.php for an example] -'SkinTemplateNavigation': Alter the structured navigation links in SkinTemplates +Alter the structured navigation links in SkinTemplates, there are three of these hooks called in different spots. +'SkinTemplateNavigation': Called on content pages before variants have been added +'SkinTemplateNavigation::SpecialPage': Called on special pages before variands have been added +'SkinTemplateNavigation::Universal': Called on both content and special pages after variants have been added &$sktemplate: SkinTemplate object &$links: Structured navigation links This is used to alter the navigation for skins which use buildNavigationUrls such as Vector. @@ -1464,6 +1579,11 @@ $movePage: MovePageForm object $oldTitle: old title (object) $newTitle: new title (object) +'SpecialNewpagesConditions': called when building sql query for Special:NewPages +&$special: NewPagesPager object (subclass of ReverseChronologicalPager) +$opts: FormOptions object containing special page options +&$conds: array of WHERE conditionals for query + 'SpecialPage_initList': called when setting up SpecialPage::$mList, use this hook to remove a core special page $list: list (array) of core special pages @@ -1483,16 +1603,21 @@ SpecialRecentChanges $opts: FormOptions for this request 'SpecialRecentChangesQuery': called when building sql query for -SpecialRecentChanges +SpecialRecentChanges and SpecialRecentChangesLinked &$conds: array of WHERE conditionals for query &$tables: array of tables to be queried &$join_conds: join conditions for the tables $opts: FormOptions for this request &$query_options: array of options for the database request +&$select: String '*' or array of columns to select + +'SpecialSearchGo': called when user clicked the "Go" +&$title: title object generated from the text entered by the user +&$term: the search term entered by the user 'SpecialSearchNogomatch': called when user clicked the "Go" button but the target doesn't exist -$title: title object generated from the text entred by the user +&$title: title object generated from the text entered by the user 'SpecialSearchProfiles': allows modification of search profiles &$profiles: profiles, which can be modified. @@ -1569,10 +1694,13 @@ You might set the member-variables $uploadFormTextTop and $uploadFormTextAfterSummary to inject text (HTML) either before or after the editform. -'UploadForm:BeforeProcessing': DEPRECATED! at the beginning of processUpload() +'UploadForm:BeforeProcessing': at the beginning of processUpload() $form: UploadForm object Lets you poke at member variables like $mUploadDescription before the file is saved. +Do not use this hook to break upload processing. This will return the user to +a blank form with no error message; use UploadVerification and +UploadVerifyFile instead 'UploadCreateFromRequest': when UploadBase::createFromRequest has been called $type: (string) the requested upload type @@ -1589,7 +1717,8 @@ $descriptor: (array) the HTMLForm descriptor added to the descriptor $descriptor: (array) the HTMLForm descriptor -'UploadVerification': additional chances to reject an uploaded file +'UploadVerification': additional chances to reject an uploaded file. Consider + using UploadVerifyFile instead. string $saveName: destination file name string $tempName: filesystem path to the temporary file for checks string &$error: output: message key for message to show if upload canceled @@ -1597,6 +1726,16 @@ string &$error: output: message key for message to show if upload canceled is the message key and the remaining elements are used as parameters to the message. +'UploadVerifyFile': extra file verification, based on mime type, etc. Preferred + in most cases over UploadVerification. +object $upload: an instance of UploadBase, with all info about the upload +string $mime: the uploaded file's mime type, as detected by MediaWiki. Handlers + will typically only apply for specific mime types. +object &$error: output: true if the file is valid. Otherwise, an indexed array + representing the problem with the file, where the first element + is the message key and the remaining elements are used as parameters to + the message. + 'UploadComplete': Upon completion of a file upload $uploadBase: UploadBase (or subclass) object. File can be accessed by $uploadBase->getLocalFile(). @@ -1762,10 +1901,6 @@ $user: User object &$timestamp: new timestamp, change this to override local email authentification timestamp -'UserToggles': called when initialising User::$mToggles, use this to add -new toggles -$toggles: array of toggles to add - 'WantedPages::getSQL': called in WantedPagesPage::getSQL(), can be used to alter the SQL query which gets the list of wanted pages &$wantedPages: WantedPagesPage object @@ -1779,6 +1914,13 @@ $article: article object to be watched $user: user that watched $article: article object watched +'WatchlistEditorBuildRemoveLine': when building remove lines in + Special:Watchlist/edit +&$tools: array of extra links +$title: Title object +$redirect: whether the page is a redirect +$skin: Skin object + 'WikiExporter::dumpStableQuery': Get the SELECT query for "stable" revisions dumps One, and only one hook should set this, and return false. diff --git a/docs/maintenance.txt b/docs/maintenance.txt index 039c71c5..988ff280 100644 --- a/docs/maintenance.txt +++ b/docs/maintenance.txt @@ -47,7 +47,7 @@ class DemoMaint extends Maintenance { } $maintClass = "DemoMaint"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); ==END== diff --git a/docs/memcached.txt b/docs/memcached.txt index da6add66..d8863c91 100644 --- a/docs/memcached.txt +++ b/docs/memcached.txt @@ -153,16 +153,20 @@ Newtalk: Parser Cache: stored in: $parserMemc controlled by: $wgEnableParserCache - key: $wgDBname:pcache:idhash:$pageid-$renderkey!$hash$edit + key: $wgDBname:pcache:idhash:$pageid-$renderkey!$hash $pageid: id of the page $renderkey: 1 if action=render, 0 otherwise - $hash: hash of user options, see User::getPageRenderingHash() - $edit: '!edit=0' if the user can't edit the page, '' otherwise + $hash: hash of user options applied to the page, see ParserOptions::optionsHash() ex: wikidb:pcache:idhash:1-0!1!0!!en!2 stores: ParserOutput object - modified by: Article::editUpdates() - expriy: $wgParserCacheExpireTime or one hour if it contains specific magic - words + modified by: Article::editUpdates() or Article::getOutputFromWikitext() + expiry: $wgParserCacheExpireTime or less if it contains short lived functions + + key: $wgDBname:pcache:idoptions:$pageid + stores: CacheTime object with an additional list of used options for the hash, + serves as ParserCache pointer. + modified by: ParserCache::save() + expiry: The same as the ParserCache entry it points to. Ping limiter: controlled by: $wgRateLimits diff --git a/docs/scripts.txt b/docs/scripts.txt index 2027d176..4af2a2b4 100644 --- a/docs/scripts.txt +++ b/docs/scripts.txt @@ -20,6 +20,9 @@ Primary scripts: Script that only serve images to logged in users. To configure the wiki to use that script, see http://www.mediawiki.org/wiki/Manual:Image_Authorisation. + load.php + Used by ResourceLoader to serve minified, concatenated and gzipped CSS and JS. + opensearch_desc.php Returns a OpenSearch description document (see http://www.opensearch.org/) that points to the search engines of the wiki. @@ -58,5 +61,5 @@ There is also a file with a .php5 extension for each script. They can be used if the web server needs a .php5 to run the file with the PHP 5 engine and runs .php scripts with PHP 4. To use these files, you have to modify $wgScriptExtension to '.php5' is LocalSettings.php but it is already done by the config script if you -used the config/index.php5 script. +used mw-config/index.php5 for installation. diff --git a/docs/skin.txt b/docs/skin.txt index a42369ce..bbe6fec5 100644 --- a/docs/skin.txt +++ b/docs/skin.txt @@ -1,8 +1,9 @@ skin.txt -MediaWiki's default skin is called Monobook, after the black-and-white photo of -a book, in the page background. This skin has been the default since MediaWiki -1.3 (2004). It is used on Wikipedia, and is popular on other sites. +MediaWiki's default skin is called Vector. This has been the case since +the 1.17 release (2011). This replaces the popular skin, Monobook which +had been been the default since MediaWiki 1.3 (2004). It is now the +default skin on Wikimedia Projects. There are three legacy skins which were introduced before MediaWiki 1.3: @@ -15,6 +16,11 @@ http://nostalgia.wikipedia.org/ * Cologne Blue: A nicer-looking alternative to Standard. +The other skin that is widely used (and is the MediaWiki default before 1.17) +is Monobook. + +* Monobook: Named after the black-and-white photo of a book, in the page background. +This was introduced in the 2004 release of 1.3 And there are four Monobook-derived skins which have been introduced since 1.3: @@ -29,7 +35,6 @@ top bar. * Modern: An attractive blue/grey theme with sidebar and top bar. - == Custom CSS/JS == It is possible to customise the site CSS and JavaScript without editing any diff --git a/extensions/README b/extensions/README index 85f4943b..0437af69 100644 --- a/extensions/README +++ b/extensions/README @@ -12,3 +12,16 @@ The extensions are available through svn at: You can find documentation and additional extensions on MediaWiki website: http://www.mediawiki.org/wiki/Category:Extensions + + +Please note that under POSIX systems (Linux...), parent of a symbolic path +refers to the link source, NOT to the target! You should check the env +variable MW_INSTALL_PATH in case the extension is not in the default location. + +The following code snippet let you override the default path: + + $IP = getenv( 'MW_INSTALL_PATH' ); + if( $IP === false ) { + $IP = dirname( __FILE__ ) . '/../..'; + } + require( "$IP/maintenance/Maintenance.php" ); // a MediaWiki core file diff --git a/img_auth.php b/img_auth.php index 0fe239ba..1daba85f 100644 --- a/img_auth.php +++ b/img_auth.php @@ -37,19 +37,29 @@ if ( $wgImgAuthPublicTest wfForbidden('img-auth-accessdenied','img-auth-public'); } +// Extract path and image information +if( !isset( $_SERVER['PATH_INFO'] ) ) { + $path = $wgRequest->getText( 'path' ); + if( !$path ) { + wfForbidden( 'img-auth-accessdenied', 'img-auth-nopathinfo' ); + } + $path = "/$path"; +} else { + $path = $_SERVER['PATH_INFO']; +} + // Check for bug 28235: QUERY_STRING overriding the correct extension -if ( isset( $_SERVER['QUERY_STRING'] ) - && preg_match( '/\.[^\\/:*?"<>|%]+(#|\?|$)/i', $_SERVER['QUERY_STRING'] ) ) +$dotPos = strpos( $path, '.' ); +$whitelist = array(); +if ( $dotPos !== false ) { + $whitelist[] = substr( $path, $dotPos + 1 ); +} +if ( !$wgRequest->checkUrlExtension( $whitelist ) ) { - wfForbidden( 'img-auth-accessdenied', 'img-auth-bad-query-string' ); + return; } -// Extract path and image information -if( !isset( $_SERVER['PATH_INFO'] ) ) - wfForbidden('img-auth-accessdenied','img-auth-nopathinfo'); - -$path = $_SERVER['PATH_INFO']; -$filename = realpath( $wgUploadDirectory . $_SERVER['PATH_INFO'] ); +$filename = realpath( $wgUploadDirectory . $path ); $realUpload = realpath( $wgUploadDirectory ); // Basic directory traversal check diff --git a/includes/AjaxDispatcher.php b/includes/AjaxDispatcher.php index 5bd7cfa4..e36787fd 100644 --- a/includes/AjaxDispatcher.php +++ b/includes/AjaxDispatcher.php @@ -42,31 +42,27 @@ class AjaxDispatcher { } switch( $this->mode ) { - - case 'get': - $this->func_name = isset( $_GET["rs"] ) ? $_GET["rs"] : ''; - if ( ! empty( $_GET["rsargs"] ) ) { - $this->args = $_GET["rsargs"]; - } else { - $this->args = array(); - } - break; - - case 'post': - $this->func_name = isset( $_POST["rs"] ) ? $_POST["rs"] : ''; - if ( ! empty( $_POST["rsargs"] ) ) { - $this->args = $_POST["rsargs"]; - } else { - $this->args = array(); - } - break; - - default: - wfProfileOut( __METHOD__ ); - return; - # Or we could throw an exception: - # throw new MWException( __METHOD__ . ' called without any data (mode empty).' ); - + case 'get': + $this->func_name = isset( $_GET["rs"] ) ? $_GET["rs"] : ''; + if ( ! empty( $_GET["rsargs"] ) ) { + $this->args = $_GET["rsargs"]; + } else { + $this->args = array(); + } + break; + case 'post': + $this->func_name = isset( $_POST["rs"] ) ? $_POST["rs"] : ''; + if ( ! empty( $_POST["rsargs"] ) ) { + $this->args = $_POST["rsargs"]; + } else { + $this->args = array(); + } + break; + default: + wfProfileOut( __METHOD__ ); + return; + # Or we could throw an exception: + # throw new MWException( __METHOD__ . ' called without any data (mode empty).' ); } wfProfileOut( __METHOD__ ); @@ -89,8 +85,11 @@ class AjaxDispatcher { if ( ! in_array( $this->func_name, $wgAjaxExportList ) ) { wfDebug( __METHOD__ . ' Bad Request for unknown function ' . $this->func_name . "\n" ); - wfHttpError( 400, 'Bad Request', - "unknown function " . (string) $this->func_name ); + wfHttpError( + 400, + 'Bad Request', + "unknown function " . (string) $this->func_name + ); } else { wfDebug( __METHOD__ . ' dispatching ' . $this->func_name . "\n" ); @@ -99,6 +98,7 @@ class AjaxDispatcher { } else { $func = $this->func_name; } + try { $result = call_user_func_array( $func, $this->args ); @@ -109,8 +109,7 @@ class AjaxDispatcher { wfHttpError( 500, 'Internal Error', "{$this->func_name} returned no data" ); - } - else { + } else { if ( is_string( $result ) ) { $result = new AjaxResponse( $result ); } @@ -120,7 +119,6 @@ class AjaxDispatcher { wfDebug( __METHOD__ . ' dispatch complete for ' . $this->func_name . "\n" ); } - } catch ( Exception $e ) { wfDebug( __METHOD__ . ' ERROR while dispatching ' . $this->func_name . "(" . var_export( $this->args, true ) . "): " @@ -135,7 +133,7 @@ class AjaxDispatcher { } } - wfProfileOut( __METHOD__ ); $wgOut = null; + wfProfileOut( __METHOD__ ); } } diff --git a/includes/AjaxFunctions.php b/includes/AjaxFunctions.php index e3180e0a..8e5de31b 100644 --- a/includes/AjaxFunctions.php +++ b/includes/AjaxFunctions.php @@ -1,5 +1,7 @@ > 6 ) + 192 ) . chr( ( $num&63 ) + 128 ); - if ( $num < 65536 ) - return chr( ( $num >> 12 ) + 224 ) . chr( ( ( $num >> 6 )&63 ) + 128 ) . chr( ( $num&63 ) + 128 ); - if ( $num < 2097152 ) - return chr( ( $num >> 18 ) + 240 ) . chr( ( ( $num >> 12 )&63 ) + 128 ) . chr( ( ( $num >> 6 )&63 ) + 128 ) . chr( ( $num&63 ) + 128 ); - return ''; -} - -/** - * Called for AJAX watch/unwatch requests. - * @param $pagename Prefixed title string for page to watch/unwatch - * @param $watch String 'w' to watch, 'u' to unwatch - * @return String '' or '' on successful watch or unwatch, - * respectively, followed by an HTML message to display in the alert box; or - * '' on error - */ -function wfAjaxWatch( $pagename = "", $watch = "" ) { - if ( wfReadOnly() ) { - // redirect to action=(un)watch, which will display the database lock - // message - return ''; } - if ( 'w' !== $watch && 'u' !== $watch ) { - return ''; + if ( $num < 2048 ) { + return chr( ( $num >> 6 ) + 192 ) . chr( ( $num&63 ) + 128 ); } - $watch = 'w' === $watch; - $title = Title::newFromDBkey( $pagename ); - if ( !$title ) { - // Invalid title - return ''; + if ( $num < 65536 ) { + return chr( ( $num >> 12 ) + 224 ) . chr( ( ( $num >> 6 )&63 ) + 128 ) . chr( ( $num&63 ) + 128 ); } - $article = new Article( $title ); - $watching = $title->userIsWatching(); - if ( $watch ) { - if ( !$watching ) { - $dbw = wfGetDB( DB_MASTER ); - $dbw->begin(); - $ok = $article->doWatch(); - $dbw->commit(); - } - } else { - if ( $watching ) { - $dbw = wfGetDB( DB_MASTER ); - $dbw->begin(); - $ok = $article->doUnwatch(); - $dbw->commit(); - } - } - // Something stopped the change - if ( isset( $ok ) && !$ok ) { - return ''; - } - if ( $watch ) { - return '' . wfMsgExt( 'addedwatchtext', array( 'parse' ), $title->getPrefixedText() ); - } else { - return '' . wfMsgExt( 'removedwatchtext', array( 'parse' ), $title->getPrefixedText() ); + if ( $num < 2097152 ) { + return chr( ( $num >> 18 ) + 240 ) . chr( ( ( $num >> 12 )&63 ) + 128 ) . chr( ( ( $num >> 6 )&63 ) + 128 ) . chr( ( $num&63 ) + 128 ); } -} - -/** - * Called in some places (currently just extensions) - * to get the thumbnail URL for a given file at a given resolution. - */ -function wfAjaxGetThumbnailUrl( $file, $width, $height ) { - $file = wfFindFile( $file ); - - if ( !$file || !$file->exists() ) - return null; - - $url = $file->getThumbnail( $width, $height )->url; - return $url; + return ''; } /** @@ -149,8 +91,9 @@ function wfAjaxGetThumbnailUrl( $file, $width, $height ) { function wfAjaxGetFileUrl( $file ) { $file = wfFindFile( $file ); - if ( !$file || !$file->exists() ) + if ( !$file || !$file->exists() ) { return null; + } $url = $file->getUrl(); diff --git a/includes/AjaxResponse.php b/includes/AjaxResponse.php index f7495666..014798f8 100644 --- a/includes/AjaxResponse.php +++ b/includes/AjaxResponse.php @@ -1,5 +1,7 @@ mLastModified ) { header ( "Last-Modified: " . $this->mLastModified ); - } - else { + } else { header ( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . " GMT" ); } if ( $this->mCacheDuration ) { - # If squid caches are configured, tell them to cache the response, # and tell the client to always check with the squid. Otherwise, # tell the client to use a cached copy, without a way to purge it. if ( $wgUseSquid ) { - # Expect explicite purge of the proxy cache, but require end user agents # to revalidate against the proxy on each visit. # Surrogate-Control controls our Squid, Cache-Control downstream caches @@ -127,7 +125,7 @@ class AjaxResponse { # Let the client do the caching. Cache is not purged. header ( "Expires: " . gmdate( "D, d M Y H:i:s", time() + $this->mCacheDuration ) . " GMT" ); - header ( "Cache-Control: s-max-age={$this->mCacheDuration},public,max-age={$this->mCacheDuration}" ); + header ( "Cache-Control: s-maxage={$this->mCacheDuration},public,max-age={$this->mCacheDuration}" ); } } else { @@ -156,10 +154,12 @@ class AjaxResponse { wfDebug( "$fname: CACHE DISABLED, NO TIMESTAMP\n" ); return; } + if ( !$wgCachePages ) { wfDebug( "$fname: CACHE DISABLED\n", false ); return; } + if ( $wgUser->getOption( 'nocache' ) ) { wfDebug( "$fname: USER DISABLED CACHE\n", false ); return; @@ -177,6 +177,7 @@ class AjaxResponse { $ismodsince = wfTimestamp( TS_MW, $modsinceTime ? $modsinceTime : 1 ); wfDebug( "$fname: -- client send If-Modified-Since: " . $modsince . "\n", false ); wfDebug( "$fname: -- we might send Last-Modified : $lastmod\n", false ); + if ( ( $ismodsince >= $timestamp ) && $wgUser->validateCache( $ismodsince ) && $ismodsince >= $wgCacheEpoch ) { ini_set( 'zlib.output_compression', 0 ); $this->setResponseCode( "304 Not Modified" ); @@ -198,7 +199,10 @@ class AjaxResponse { function loadFromMemcached( $mckey, $touched ) { global $wgMemc; - if ( !$touched ) return false; + + if ( !$touched ) { + return false; + } $mcvalue = $wgMemc->get( $mckey ); if ( $mcvalue ) { @@ -206,6 +210,7 @@ class AjaxResponse { if ( $touched <= $mcvalue['timestamp'] ) { wfDebug( "Got $mckey from cache\n" ); $this->mText = $mcvalue['value']; + return true; } else { wfDebug( "$mckey has expired\n" ); diff --git a/includes/Article.php b/includes/Article.php index 5edfc10d..3e8cfd5e 100644 --- a/includes/Article.php +++ b/includes/Article.php @@ -11,6 +11,7 @@ * Note: edit user interface and cache support functions have been * moved to separate EditPage and HTMLFileCache classes. * + * @internal documentation reviewed 15 Mar 2010 */ class Article { /**@{{ @@ -33,15 +34,15 @@ class Article { var $mRedirectTarget = null; // !< Title object if set var $mRedirectUrl = false; // !< var $mRevIdFetched = 0; // !< - var $mRevision; // !< + var $mRevision; // !< Revision object if set var $mTimestamp = ''; // !< - var $mTitle; // !< + var $mTitle; // !< Title object var $mTotalAdjustment = 0; // !< var $mTouched = '19700101000000'; // !< var $mUser = -1; // !< Not loaded - var $mUserText = ''; // !< - var $mParserOptions; // !< - var $mParserOutput; // !< + var $mUserText = ''; // !< username from Revision if set + var $mParserOptions; // !< ParserOptions object + var $mParserOutput; // !< ParserCache object if set /**@}}*/ /** @@ -50,12 +51,13 @@ class Article { * @param $oldId Integer revision ID, null to fetch from request, zero for current */ public function __construct( Title $title, $oldId = null ) { + // FIXME: does the reference play any role here? $this->mTitle =& $title; $this->mOldId = $oldId; } /** - * Constructor from an article article + * Constructor from an page id * @param $id The article ID to load */ public static function newFromID( $id ) { @@ -70,7 +72,7 @@ class Article { * from another page on the wiki. * @param $from Title object. */ - public function setRedirectedFrom( $from ) { + public function setRedirectedFrom( Title $from ) { $this->mRedirectedFrom = $from; } @@ -82,20 +84,29 @@ class Article { * @return mixed Title object, or null if this page is not a redirect */ public function getRedirectTarget() { - if ( !$this->mTitle || !$this->mTitle->isRedirect() ) + if ( !$this->mTitle->isRedirect() ) { return null; - if ( !is_null( $this->mRedirectTarget ) ) + } + + if ( $this->mRedirectTarget !== null ) { return $this->mRedirectTarget; + } + # Query the redirect table $dbr = wfGetDB( DB_SLAVE ); $row = $dbr->selectRow( 'redirect', - array( 'rd_namespace', 'rd_title' ), + array( 'rd_namespace', 'rd_title', 'rd_fragment', 'rd_interwiki' ), array( 'rd_from' => $this->getID() ), __METHOD__ ); - if ( $row ) { - return $this->mRedirectTarget = Title::makeTitle( $row->rd_namespace, $row->rd_title ); + + // rd_fragment and rd_interwiki were added later, populate them if empty + if ( $row && !is_null( $row->rd_fragment ) && !is_null( $row->rd_interwiki ) ) { + return $this->mRedirectTarget = Title::makeTitle( + $row->rd_namespace, $row->rd_title, + $row->rd_fragment, $row->rd_interwiki ); } + # This page doesn't have an entry in the redirect table return $this->mRedirectTarget = $this->insertRedirect(); } @@ -104,43 +115,66 @@ class Article { * Insert an entry for this page into the redirect table. * * Don't call this function directly unless you know what you're doing. - * @return Title object + * @return Title object or null if not a redirect */ public function insertRedirect() { - $retval = Title::newFromRedirect( $this->getContent() ); + // recurse through to only get the final target + $retval = Title::newFromRedirectRecurse( $this->getContent() ); if ( !$retval ) { return null; } + $this->insertRedirectEntry( $retval ); + return $retval; + } + + /** + * Insert or update the redirect table entry for this page to indicate + * it redirects to $rt . + * @param $rt Title redirect target + */ + public function insertRedirectEntry( $rt ) { $dbw = wfGetDB( DB_MASTER ); $dbw->replace( 'redirect', array( 'rd_from' ), array( 'rd_from' => $this->getID(), - 'rd_namespace' => $retval->getNamespace(), - 'rd_title' => $retval->getDBkey() + 'rd_namespace' => $rt->getNamespace(), + 'rd_title' => $rt->getDBkey(), + 'rd_fragment' => $rt->getFragment(), + 'rd_interwiki' => $rt->getInterwiki(), ), __METHOD__ ); - return $retval; } /** - * Get the Title object this page redirects to + * Get the Title object or URL this page redirects to * * @return mixed false, Title of in-wiki target, or string with URL */ public function followRedirect() { - $text = $this->getContent(); - return $this->followRedirectText( $text ); + return $this->getRedirectURL( $this->getRedirectTarget() ); } /** * Get the Title object this text redirects to * + * @param $text string article content containing redirect info * @return mixed false, Title of in-wiki target, or string with URL + * @deprecated */ public function followRedirectText( $text ) { - $rt = Title::newFromRedirectRecurse( $text ); // recurse through to only get the final target - # process if title object is valid and not special:userlogout + // recurse through to only get the final target + return $this->getRedirectURL( Title::newFromRedirectRecurse( $text ) ); + } + + /** + * Get the Title object or URL to use for a redirect. We use Title + * objects for same-wiki, non-special redirects and URLs for everything + * else. + * @param $rt Title Redirect target + * @return mixed false, Title object of local target, or string with URL + */ + public function getRedirectURL( $rt ) { if ( $rt ) { if ( $rt->getInterwiki() != '' ) { if ( $rt->isLocal() ) { @@ -164,15 +198,18 @@ class Article { return $rt->getFullURL(); } } + return $rt; } } + // No or invalid redirect return false; } /** - * get the title object of the article + * Get the title object of the article + * @return Title object of this page */ public function getTitle() { return $this->mTitle; @@ -180,6 +217,7 @@ class Article { /** * Clear the object + * FIXME: shouldn't this be public? * @private */ public function clear() { @@ -204,31 +242,38 @@ class Article { /** * Note that getContent/loadContent do not follow redirects anymore. * If you need to fetch redirectable content easily, try - * the shortcut in Article::followContent() + * the shortcut in Article::followRedirect() + * + * This function has side effects! Do not use this function if you + * only want the real revision text if any. * * @return Return the text of this revision */ public function getContent() { - global $wgUser, $wgContLang, $wgOut, $wgMessageCache; + global $wgUser, $wgContLang, $wgMessageCache; + wfProfileIn( __METHOD__ ); + if ( $this->getID() === 0 ) { # If this is a MediaWiki:x message, then load the messages # and return the message value for x. if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) { # If this is a system message, get the default text. list( $message, $lang ) = $wgMessageCache->figureMessage( $wgContLang->lcfirst( $this->mTitle->getText() ) ); - $wgMessageCache->loadAllMessages( $lang ); $text = wfMsgGetKey( $message, false, $lang, false ); + if ( wfEmptyMsg( $message, $text ) ) $text = ''; } else { $text = wfMsgExt( $wgUser->isLoggedIn() ? 'noarticletext' : 'noarticletextanon', 'parsemag' ); } wfProfileOut( __METHOD__ ); + return $text; } else { $this->loadContent(); wfProfileOut( __METHOD__ ); + return $this->mContent; } } @@ -243,8 +288,10 @@ class Article { if ( $this->mContentLoaded && $this->mOldId == 0 ) { return $this->mContent; } + $rev = Revision::newFromTitle( $this->mTitle ); $text = $rev ? $rev->getRawText() : false; + return $text; } @@ -274,16 +321,25 @@ class Article { * @return mixed string on success, false on failure */ public function getUndoText( Revision $undo, Revision $undoafter = null ) { + $currentRev = Revision::newFromTitle( $this->mTitle ); + if ( !$currentRev ) { + return false; // no page + } $undo_text = $undo->getText(); $undoafter_text = $undoafter->getText(); - $cur_text = $this->getContent(); + $cur_text = $currentRev->getText(); + if ( $cur_text == $undo_text ) { # No use doing a merge if it's just a straight revert. return $undoafter_text; } + $undone_text = ''; - if ( !wfMerge( $undo_text, $undoafter_text, $cur_text, $undone_text ) ) + + if ( !wfMerge( $undo_text, $undoafter_text, $cur_text, $undone_text ) ) { return false; + } + return $undone_text; } @@ -295,6 +351,7 @@ class Article { if ( is_null( $this->mOldId ) ) { $this->mOldId = $this->getOldIDFromRequest(); } + return $this->mOldId; } @@ -305,13 +362,16 @@ class Article { */ public function getOldIDFromRequest() { global $wgRequest; + $this->mRedirectUrl = false; + $oldid = $wgRequest->getVal( 'oldid' ); + if ( isset( $oldid ) ) { $oldid = intval( $oldid ); if ( $wgRequest->getVal( 'direction' ) == 'next' ) { $nextid = $this->mTitle->getNextRevisionID( $oldid ); - if ( $nextid ) { + if ( $nextid ) { $oldid = $nextid; } else { $this->mRedirectUrl = $this->mTitle->getFullURL( 'redirect=no' ); @@ -323,9 +383,11 @@ class Article { } } } + if ( !$oldid ) { $oldid = 0; } + return $oldid; } @@ -333,22 +395,24 @@ class Article { * Load the revision (including text) into this object */ function loadContent() { - if ( $this->mContentLoaded ) return; + if ( $this->mContentLoaded ) { + return; + } + wfProfileIn( __METHOD__ ); - # Query variables :P + $oldid = $this->getOldID(); - # Pre-fill content with error message so that if something - # fails we'll have something telling us what we intended. $this->mOldId = $oldid; $this->fetchContent( $oldid ); + wfProfileOut( __METHOD__ ); } - /** * Fetch a page record with the given conditions * @param $dbr Database object * @param $conditions Array + * @return mixed Database result resource, or false on failure */ protected function pageData( $dbr, $conditions ) { $fields = array( @@ -364,20 +428,23 @@ class Article { 'page_latest', 'page_len', ); + wfRunHooks( 'ArticlePageDataBefore', array( &$this, &$fields ) ); - $row = $dbr->selectRow( - 'page', - $fields, - $conditions, - __METHOD__ - ); + + $row = $dbr->selectRow( 'page', $fields, $conditions, __METHOD__ ); + wfRunHooks( 'ArticlePageDataAfter', array( &$this, &$row ) ); - return $row ; + + return $row; } /** + * Fetch a page record matching the Title object's namespace and title + * using a sanitized title string + * * @param $dbr Database object * @param $title Title object + * @return mixed Database result resource, or false on failure */ public function pageDataFromTitle( $dbr, $title ) { return $this->pageData( $dbr, array( @@ -386,6 +453,8 @@ class Article { } /** + * Fetch a page record matching the requested ID + * * @param $dbr Database * @param $id Integer */ @@ -406,8 +475,9 @@ class Article { } $lc = LinkCache::singleton(); + if ( $data ) { - $lc->addGoodLinkObj( $data->page_id, $this->mTitle, $data->page_len, $data->page_is_redirect ); + $lc->addGoodLinkObj( $data->page_id, $this->mTitle, $data->page_len, $data->page_is_redirect, $data->page_latest ); $this->mTitle->mArticleID = intval( $data->page_id ); @@ -419,20 +489,19 @@ class Article { $this->mIsRedirect = intval( $data->page_is_redirect ); $this->mLatest = intval( $data->page_latest ); } else { - if ( is_object( $this->mTitle ) ) { - $lc->addBadLinkObj( $this->mTitle ); - } + $lc->addBadLinkObj( $this->mTitle ); $this->mTitle->mArticleID = 0; } - $this->mDataLoaded = true; + $this->mDataLoaded = true; } /** * Get text of an article from database * Does *NOT* follow redirects. + * * @param $oldid Int: 0 for whatever the latest revision is - * @return string + * @return mixed string containing article contents, or false if null */ function fetchContent( $oldid = 0 ) { if ( $this->mContentLoaded ) { @@ -449,28 +518,33 @@ class Article { if ( $oldid ) { $revision = Revision::newFromId( $oldid ); - if ( is_null( $revision ) ) { + if ( $revision === null ) { wfDebug( __METHOD__ . " failed to retrieve specified revision, id $oldid\n" ); return false; } + $data = $this->pageDataFromId( $dbr, $revision->getPage() ); + if ( !$data ) { wfDebug( __METHOD__ . " failed to get page data linked to revision id $oldid\n" ); return false; } + $this->mTitle = Title::makeTitle( $data->page_namespace, $data->page_title ); $this->loadPageData( $data ); } else { if ( !$this->mDataLoaded ) { $data = $this->pageDataFromTitle( $dbr, $this->mTitle ); + if ( !$data ) { wfDebug( __METHOD__ . " failed to find page data for title " . $this->mTitle->getPrefixedText() . "\n" ); return false; } + $this->loadPageData( $data ); } $revision = Revision::newFromId( $this->mLatest ); - if ( is_null( $revision ) ) { + if ( $revision === null ) { wfDebug( __METHOD__ . " failed to retrieve current page, rev_id {$this->mLatest}\n" ); return false; } @@ -489,7 +563,7 @@ class Article { $this->mContentLoaded = true; $this->mRevision =& $revision; - wfRunHooks( 'ArticleAfterFetchContent', array( &$this, &$this->mContent ) ) ; + wfRunHooks( 'ArticleAfterFetchContent', array( &$this, &$this->mContent ) ); return $this->mContent; } @@ -498,22 +572,12 @@ class Article { * Read/write accessor to select FOR UPDATE * * @param $x Mixed: FIXME + * @return mixed value of $x, or value stored in Article::mForUpdate */ public function forUpdate( $x = null ) { return wfSetVar( $this->mForUpdate, $x ); } - /** - * Get the database which should be used for reads - * - * @return Database - * @deprecated - just call wfGetDB( DB_MASTER ) instead - */ - function getDB() { - wfDeprecated( __METHOD__ ); - return wfGetDB( DB_MASTER ); - } - /** * Get options for all SELECT statements * @@ -529,6 +593,7 @@ class Article { $options = 'FOR UPDATE'; } } + return $options; } @@ -536,11 +601,7 @@ class Article { * @return int Page ID */ public function getID() { - if ( $this->mTitle ) { - return $this->mTitle->getArticleID(); - } else { - return 0; - } + return $this->mTitle->getArticleID(); } /** @@ -568,6 +629,7 @@ class Article { public function getCount() { if ( -1 == $this->mCounter ) { $id = $this->getID(); + if ( $id == 0 ) { $this->mCounter = 0; } else { @@ -580,11 +642,12 @@ class Article { ); } } + return $this->mCounter; } /** - * Determine whether a page would be suitable for being counted as an + * Determine whether a page would be suitable for being counted as an * article in the site_stats table based on the title & its content * * @param $text String: text to analyze @@ -594,13 +657,14 @@ class Article { global $wgUseCommaCount; $token = $wgUseCommaCount ? ',' : '[['; + return $this->mTitle->isContentPage() && !$this->isRedirect( $text ) && in_string( $token, $text ); } /** * Tests if the article text represents a redirect * - * @param $text String: FIXME + * @param $text mixed string containing article contents, or boolean * @return bool */ public function isRedirect( $text = false ) { @@ -608,12 +672,14 @@ class Article { if ( $this->mDataLoaded ) { return $this->mIsRedirect; } + // Apparently loadPageData was never called $this->loadContent(); $titleObj = Title::newFromRedirectRecurse( $this->fetchContent() ); } else { $titleObj = Title::newFromRedirect( $text ); } + return $titleObj !== null; } @@ -627,6 +693,7 @@ class Article { if ( $this->getOldID() == 0 ) { return true; } + return $this->exists() && isset( $this->mRevision ) && $this->mRevision->isCurrent(); } @@ -635,12 +702,15 @@ class Article { * This isn't necessary for all uses, so it's only done if needed. */ protected function loadLastEdit() { - if ( -1 != $this->mUser ) + if ( -1 != $this->mUser ) { return; + } # New or non-existent articles have no user information $id = $this->getID(); - if ( 0 == $id ) return; + if ( 0 == $id ) { + return; + } $this->mLastRevision = Revision::loadFromPageId( wfGetDB( DB_MASTER ), $id ); if ( !is_null( $this->mLastRevision ) ) { @@ -653,46 +723,71 @@ class Article { } } + /** + * @return string GMT timestamp of last article revision + **/ + public function getTimestamp() { // Check if the field has been filled by ParserCache::get() if ( !$this->mTimestamp ) { $this->loadLastEdit(); } + return wfTimestamp( TS_MW, $this->mTimestamp ); } + /** + * @return int user ID for the user that made the last article revision + */ public function getUser() { $this->loadLastEdit(); return $this->mUser; } + /** + * @return string username of the user that made the last article revision + */ public function getUserText() { $this->loadLastEdit(); return $this->mUserText; } + /** + * @return string Comment stored for the last article revision + */ public function getComment() { $this->loadLastEdit(); return $this->mComment; } + /** + * Returns true if last revision was marked as "minor edit" + * + * @return boolean Minor edit indicator for the last article revision. + */ public function getMinorEdit() { $this->loadLastEdit(); return $this->mMinorEdit; } - /* Use this to fetch the rev ID used on page views */ + /** + * Use this to fetch the rev ID used on page views + * + * @return int revision ID of last article revision + */ public function getRevIdFetched() { $this->loadLastEdit(); return $this->mRevIdFetched; } /** + * FIXME: this does what? * @param $limit Integer: default 0. * @param $offset Integer: default 0. + * @return UserArrayFromResult object with User objects of article contributors for requested range */ public function getContributors( $limit = 0, $offset = 0 ) { - # XXX: this is expensive; cache this info somewhere. + # FIXME: this is expensive; cache this info somewhere. $dbr = wfGetDB( DB_SLAVE ); $revTable = $dbr->tableName( 'revision' ); @@ -701,6 +796,7 @@ class Article { $pageId = $this->getId(); $user = $this->getUser(); + if ( $user ) { $excludeCond = "AND rev_user != $user"; } else { @@ -718,8 +814,9 @@ class Article { GROUP BY rev_user, rev_user_text ORDER BY timestamp DESC"; - if ( $limit > 0 ) + if ( $limit > 0 ) { $sql = $dbr->limitResult( $sql, $limit, $offset ); + } $sql .= ' ' . $this->getSelectOptions(); $res = $dbr->query( $sql, __METHOD__ ); @@ -732,9 +829,8 @@ class Article { * page of the given title. */ public function view() { - global $wgUser, $wgOut, $wgRequest, $wgContLang; - global $wgEnableParserCache, $wgStylePath, $wgParser; - global $wgUseTrackbacks, $wgUseFileCache; + global $wgUser, $wgOut, $wgRequest, $wgParser; + global $wgUseFileCache, $wgUseETag; wfProfileIn( __METHOD__ ); @@ -742,22 +838,26 @@ class Article { $oldid = $this->getOldID(); $parserCache = ParserCache::singleton(); - $parserOptions = clone $this->getParserOptions(); + $parserOptions = $this->getParserOptions(); # Render printable version, use printable version cache if ( $wgOut->isPrintable() ) { $parserOptions->setIsPrintable( true ); + $parserOptions->setEditSection( false ); + } else if ( $wgUseETag && !$this->mTitle->quickUserCan( 'edit' ) ) { + $parserOptions->setEditSection( false ); } # Try client and file cache if ( $oldid === 0 && $this->checkTouched() ) { - global $wgUseETag; if ( $wgUseETag ) { $wgOut->setETag( $parserCache->getETag( $this, $parserOptions ) ); } - # Is is client cached? + + # Is it client cached? if ( $wgOut->checkLastModified( $this->getTouched() ) ) { wfDebug( __METHOD__ . ": done 304\n" ); wfProfileOut( __METHOD__ ); + return; # Try file cache } else if ( $wgUseFileCache && $this->tryFileCache() ) { @@ -766,17 +866,17 @@ class Article { $wgOut->disable(); $this->viewUpdates(); wfProfileOut( __METHOD__ ); + return; } } - $sk = $wgUser->getSkin(); - # getOldID may want us to redirect somewhere else if ( $this->mRedirectUrl ) { $wgOut->redirect( $this->mRedirectUrl ); wfDebug( __METHOD__ . ": redirecting due to oldid\n" ); wfProfileOut( __METHOD__ ); + return; } @@ -785,20 +885,25 @@ class Article { $wgOut->setPageTitle( $this->mTitle->getPrefixedText() ); # If we got diff in the query, we want to see a diff page instead of the article. - if ( !is_null( $wgRequest->getVal( 'diff' ) ) ) { + if ( $wgRequest->getCheck( 'diff' ) ) { wfDebug( __METHOD__ . ": showing diff page\n" ); $this->showDiffPage(); wfProfileOut( __METHOD__ ); + return; } # Allow frames by default $wgOut->allowClickjacking(); + if ( !$wgUseETag && !$this->mTitle->quickUserCan( 'edit' ) ) { + $parserOptions->setEditSection( false ); + } + # Should the parser cache be used? $useParserCache = $this->useParserCache( $oldid ); wfDebug( 'Article::view using parser cache: ' . ( $useParserCache ? 'yes' : 'no' ) . "\n" ); - if ( $wgUser->getOption( 'stubthreshold' ) ) { + if ( $wgUser->getStubThreshold() ) { wfIncrStats( 'pcache_miss_stub' ); } @@ -810,16 +915,17 @@ class Article { $pass = 0; $outputDone = false; $this->mParserOutput = false; + while ( !$outputDone && ++$pass ) { switch( $pass ) { case 1: wfRunHooks( 'ArticleViewHeader', array( &$this, &$outputDone, &$useParserCache ) ); break; - case 2: # Try the parser cache if ( $useParserCache ) { $this->mParserOutput = $parserCache->get( $this, $parserOptions ); + if ( $this->mParserOutput !== false ) { wfDebug( __METHOD__ . ": showing parser cache contents\n" ); $wgOut->addParserOutput( $this->mParserOutput ); @@ -830,7 +936,6 @@ class Article { } } break; - case 3: $text = $this->getContent(); if ( $text === false || $this->getID() == 0 ) { @@ -853,22 +958,22 @@ class Article { # Are we looking at an old revision if ( $oldid && !is_null( $this->mRevision ) ) { $this->setOldSubtitle( $oldid ); + if ( !$this->showDeletedRevisionHeader() ) { wfDebug( __METHOD__ . ": cannot view deleted revision\n" ); wfProfileOut( __METHOD__ ); return; } + # If this "old" version is the current, then try the parser cache... if ( $oldid === $this->getLatest() && $this->useParserCache( false ) ) { $this->mParserOutput = $parserCache->get( $this, $parserOptions ); if ( $this->mParserOutput ) { - wfDebug( __METHOD__ . ": showing parser cache for current rev permalink\n" ); + wfDebug( __METHOD__ . ": showing parser cache for current rev permalink\n" ); $wgOut->addParserOutput( $this->mParserOutput ); $wgOut->setRevisionId( $this->mLatest ); - $this->showViewFooter(); - $this->viewUpdates(); - wfProfileOut( __METHOD__ ); - return; + $outputDone = true; + break; } } } @@ -882,36 +987,35 @@ class Article { wfDebug( __METHOD__ . ": showing CSS/JS source\n" ); $this->showCssOrJsPage(); $outputDone = true; - } else if ( $rt = Title::newFromRedirectArray( $text ) ) { - wfDebug( __METHOD__ . ": showing redirect=no page\n" ); - # Viewing a redirect page (e.g. with parameter redirect=no) - # Don't append the subtitle if this was an old revision - $wgOut->addHTML( $this->viewRedirect( $rt, !$wasRedirected && $this->isCurrent() ) ); - # Parse just to get categories, displaytitle, etc. - $this->mParserOutput = $wgParser->parse( $text, $this->mTitle, $parserOptions ); - $wgOut->addParserOutputNoText( $this->mParserOutput ); - $outputDone = true; + } else { + $rt = Title::newFromRedirectArray( $text ); + if ( $rt ) { + wfDebug( __METHOD__ . ": showing redirect=no page\n" ); + # Viewing a redirect page (e.g. with parameter redirect=no) + # Don't append the subtitle if this was an old revision + $wgOut->addHTML( $this->viewRedirect( $rt, !$wasRedirected && $this->isCurrent() ) ); + # Parse just to get categories, displaytitle, etc. + $this->mParserOutput = $wgParser->parse( $text, $this->mTitle, $parserOptions ); + $wgOut->addParserOutputNoText( $this->mParserOutput ); + $outputDone = true; + } } break; - case 4: # Run the parse, protected by a pool counter wfDebug( __METHOD__ . ": doing uncached parse\n" ); - $key = $parserCache->getKey( $this, $parserOptions ); - $poolCounter = PoolCounter::factory( 'Article::view', $key ); - $dirtyCallback = $useParserCache ? array( $this, 'tryDirtyCache' ) : false; - $status = $poolCounter->executeProtected( array( $this, 'doViewParse' ), $dirtyCallback ); - if ( !$status->isOK() ) { + $key = $parserCache->getKey( $this, $parserOptions ); + $poolArticleView = new PoolWorkArticleView( $this, $key, $useParserCache, $parserOptions ); + + if ( !$poolArticleView->execute() ) { # Connection or timeout error - $this->showPoolError( $status ); wfProfileOut( __METHOD__ ); return; } else { $outputDone = true; } break; - # Should be unreachable, but just in case... default: break 2; @@ -921,6 +1025,7 @@ class Article { # Adjust the title if it was set by displaytitle, -{T|}- or language conversion if ( $this->mParserOutput ) { $titleText = $this->mParserOutput->getTitleText(); + if ( strval( $titleText ) !== '' ) { $wgOut->setPageTitle( $titleText ); } @@ -929,6 +1034,7 @@ class Article { # For the main page, overwrite the element with the con- # tents of 'pagetitle-view-mainpage' instead of the default (if # that's not empty). + # This message always exists because it is in the i18n files if ( $this->mTitle->equals( Title::newMainPage() ) && ( $m = wfMsgForContent( 'pagetitle-view-mainpage' ) ) !== '' ) { @@ -951,7 +1057,7 @@ class Article { * Article::view() only, other callers should use the DifferenceEngine class. */ public function showDiffPage() { - global $wgOut, $wgRequest, $wgUser; + global $wgRequest, $wgUser; $diff = $wgRequest->getVal( 'diff' ); $rcid = $wgRequest->getVal( 'rcid' ); @@ -980,9 +1086,11 @@ class Article { * This is hooked by SyntaxHighlight_GeSHi to do syntax highlighting of these * page views. */ - public function showCssOrJsPage() { + protected function showCssOrJsPage() { global $wgOut; - $wgOut->addHTML( wfMsgExt( 'clearyourcache', 'parse' ) ); + + $wgOut->wrapWikiMsg( "<div id='mw-clearyourcache'>\n$1\n</div>", 'clearyourcache' ); + // Give hooks a chance to customise the output if ( wfRunHooks( 'ShowRawCssJs', array( $this->mContent, $this->mTitle, $wgOut ) ) ) { // Wrap the whole lot in a <pre> and don't parse @@ -994,18 +1102,6 @@ class Article { } } - /** - * Get the robot policy to be used for the current action=view request. - * @return String the policy that should be set - * @deprecated use getRobotPolicy() instead, which returns an associative - * array - */ - public function getRobotPolicyForView() { - wfDeprecated( __FUNC__ ); - $policy = $this->getRobotPolicy( 'view' ); - return $policy['index'] . ',' . $policy['follow']; - } - /** * Get the robot policy to be used for the current view * @param $action String the action= GET parameter @@ -1013,34 +1109,42 @@ class Article { * TODO: actions other than 'view' */ public function getRobotPolicy( $action ) { - global $wgOut, $wgArticleRobotPolicies, $wgNamespaceRobotPolicies; global $wgDefaultRobotPolicy, $wgRequest; $ns = $this->mTitle->getNamespace(); + if ( $ns == NS_USER || $ns == NS_USER_TALK ) { # Don't index user and user talk pages for blocked users (bug 11443) if ( !$this->mTitle->isSubpage() ) { $block = new Block(); if ( $block->load( $this->mTitle->getText() ) ) { - return array( 'index' => 'noindex', - 'follow' => 'nofollow' ); + return array( + 'index' => 'noindex', + 'follow' => 'nofollow' + ); } } } if ( $this->getID() === 0 || $this->getOldID() ) { # Non-articles (special pages etc), and old revisions - return array( 'index' => 'noindex', - 'follow' => 'nofollow' ); + return array( + 'index' => 'noindex', + 'follow' => 'nofollow' + ); } elseif ( $wgOut->isPrintable() ) { # Discourage indexing of printable versions, but encourage following - return array( 'index' => 'noindex', - 'follow' => 'follow' ); + return array( + 'index' => 'noindex', + 'follow' => 'follow' + ); } elseif ( $wgRequest->getInt( 'curid' ) ) { # For ?curid=x urls, disallow indexing - return array( 'index' => 'noindex', - 'follow' => 'follow' ); + return array( + 'index' => 'noindex', + 'follow' => 'follow' + ); } # Otherwise, construct the policy based on the various config variables. @@ -1048,24 +1152,29 @@ class Article { if ( isset( $wgNamespaceRobotPolicies[$ns] ) ) { # Honour customised robot policies for this namespace - $policy = array_merge( $policy, - self::formatRobotPolicy( $wgNamespaceRobotPolicies[$ns] ) ); + $policy = array_merge( + $policy, + self::formatRobotPolicy( $wgNamespaceRobotPolicies[$ns] ) + ); } if ( $this->mTitle->canUseNoindex() && is_object( $this->mParserOutput ) && $this->mParserOutput->getIndexPolicy() ) { # __INDEX__ and __NOINDEX__ magic words, if allowed. Incorporates # a final sanity check that we have really got the parser output. - $policy = array_merge( $policy, - array( 'index' => $this->mParserOutput->getIndexPolicy() ) ); + $policy = array_merge( + $policy, + array( 'index' => $this->mParserOutput->getIndexPolicy() ) + ); } if ( isset( $wgArticleRobotPolicies[$this->mTitle->getPrefixedText()] ) ) { # (bug 14900) site config can override user-defined __INDEX__ or __NOINDEX__ - $policy = array_merge( $policy, - self::formatRobotPolicy( $wgArticleRobotPolicies[$this->mTitle->getPrefixedText()] ) ); + $policy = array_merge( + $policy, + self::formatRobotPolicy( $wgArticleRobotPolicies[$this->mTitle->getPrefixedText()] ) + ); } return $policy; - } /** @@ -1093,6 +1202,7 @@ class Article { $arr['follow'] = $var; } } + return $arr; } @@ -1100,12 +1210,15 @@ class Article { * If this request is a redirect view, send "redirected from" subtitle to * $wgOut. Returns true if the header was needed, false if this is not a * redirect view. Handles both local and remote redirects. + * + * @return boolean */ public function showRedirectedFromHeader() { global $wgOut, $wgUser, $wgRequest, $wgRedirectSources; $rdfrom = $wgRequest->getVal( 'rdfrom' ); $sk = $wgUser->getSkin(); + if ( isset( $this->mRedirectedFrom ) ) { // This is an internally redirected page view. // We'll need a backlink to the source page for navigation. @@ -1117,6 +1230,7 @@ class Article { array( 'redirect' => 'no' ), array( 'known', 'noclasses' ) ); + $s = wfMsgExt( 'redirectedfrom', array( 'parseinline', 'replaceafter' ), $redir ); $wgOut->setSubtitle( $s ); @@ -1130,6 +1244,7 @@ class Article { $wgOut->addLink( array( 'rel' => 'canonical', 'href' => $this->mTitle->getLocalURL() ) ); + return true; } } elseif ( $rdfrom ) { @@ -1139,9 +1254,11 @@ class Article { $redir = $sk->makeExternalLink( $rdfrom, $rdfrom ); $s = wfMsgExt( 'redirectedfrom', array( 'parseinline', 'replaceafter' ), $redir ); $wgOut->setSubtitle( $s ); + return true; } } + return false; } @@ -1151,10 +1268,11 @@ class Article { */ public function showNamespaceHeader() { global $wgOut; + if ( $this->mTitle->isTalkPage() ) { $msg = wfMsgNoTrans( 'talkpageheader' ); if ( $msg !== '-' && !wfEmptyMsg( 'talkpageheader', $msg ) ) { - $wgOut->wrapWikiMsg( "<div class=\"mw-talkpageheader\">\n$1</div>", array( 'talkpageheader' ) ); + $wgOut->wrapWikiMsg( "<div class=\"mw-talkpageheader\">\n$1\n</div>", array( 'talkpageheader' ) ); } } } @@ -1163,7 +1281,8 @@ class Article { * Show the footer section of an ordinary page view */ public function showViewFooter() { - global $wgOut, $wgUseTrackbacks, $wgRequest; + global $wgOut, $wgUseTrackbacks; + # check if we're displaying a [[User talk:x.x.x.x]] anonymous talk page if ( $this->mTitle->getNamespace() == NS_USER_TALK && IP::isValid( $this->mTitle->getText() ) ) { $wgOut->addWikiMsg( 'anontalkpagetext' ); @@ -1186,13 +1305,16 @@ class Article { */ public function showPatrolFooter() { global $wgOut, $wgRequest, $wgUser; + $rcid = $wgRequest->getVal( 'rcid' ); - if ( !$rcid || !$this->mTitle->exists() || !$this->mTitle->quickUserCan( 'patrol' ) ) { + if ( !$rcid || !$this->mTitle->quickUserCan( 'patrol' ) ) { return; } $sk = $wgUser->getSkin(); + $token = $wgUser->editToken( $rcid ); + $wgOut->preventClickjacking(); $wgOut->addHTML( "<div class='patrollink'>" . @@ -1204,7 +1326,8 @@ class Article { array(), array( 'action' => 'markpatrolled', - 'rcid' => $rcid + 'rcid' => $rcid, + 'token' => $token, ), array( 'known', 'noclasses' ) ) @@ -1226,8 +1349,9 @@ class Article { $rootPart = $parts[0]; $user = User::newFromName( $rootPart, false /* allow IP users*/ ); $ip = User::isIP( $rootPart ); + if ( !$user->isLoggedIn() && !$ip ) { # User does not exist - $wgOut->wrapWikiMsg( "<div class=\"mw-userpage-userdoesnotexist error\">\n\$1</div>", + $wgOut->wrapWikiMsg( "<div class=\"mw-userpage-userdoesnotexist error\">\n\$1\n</div>", array( 'userpage-userdoesnotexist-view', $rootPart ) ); } else if ( $user->isBlocked() ) { # Show log extract if the user is currently blocked LogEventsList::showLogExtract( @@ -1246,7 +1370,9 @@ class Article { ); } } + wfRunHooks( 'ShowMissingArticle', array( $this ) ); + # Show delete and move logs LogEventsList::showLogExtract( $wgOut, array( 'delete', 'move' ), $this->mTitle->getPrefixedText(), '', array( 'lim' => 10, @@ -1269,35 +1395,42 @@ class Article { $editErrors = $this->mTitle->getUserPermissionsErrors( 'edit', $wgUser ); $errors = array_merge( $createErrors, $editErrors ); - if ( !count( $errors ) ) + if ( !count( $errors ) ) { $text = wfMsgNoTrans( 'noarticletext' ); - else + } else { $text = wfMsgNoTrans( 'noarticletext-nopermission' ); + } } $text = "<div class='noarticletext'>\n$text\n</div>"; + if ( !$this->hasViewableContent() ) { // If there's no backing content, send a 404 Not Found // for better machine handling of broken links. - $wgRequest->response()->header( "HTTP/1.x 404 Not Found" ); + $wgRequest->response()->header( "HTTP/1.1 404 Not Found" ); } + $wgOut->addWikiText( $text ); } /** * If the revision requested for view is deleted, check permissions. * Send either an error message or a warning header to $wgOut. - * Returns true if the view is allowed, false if not. + * + * @return boolean true if the view is allowed, false if not. */ public function showDeletedRevisionHeader() { global $wgOut, $wgRequest; + if ( !$this->mRevision->isDeleted( Revision::DELETED_TEXT ) ) { // Not deleted return true; } + // If the user is not allowed to see it... if ( !$this->mRevision->userCan( Revision::DELETED_TEXT ) ) { - $wgOut->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1</div>\n", + $wgOut->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n", 'rev-deleted-text-permission' ); + return false; // If the user needs to confirm that they want to see it... } else if ( $wgRequest->getInt( 'unhide' ) != 1 ) { @@ -1306,26 +1439,30 @@ class Article { $link = $this->mTitle->getFullUrl( "oldid={$oldid}&unhide=1" ); $msg = $this->mRevision->isDeleted( Revision::DELETED_RESTRICTED ) ? 'rev-suppressed-text-unhide' : 'rev-deleted-text-unhide'; - $wgOut->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1</div>\n", + $wgOut->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n", array( $msg, $link ) ); + return false; // We are allowed to see... } else { $msg = $this->mRevision->isDeleted( Revision::DELETED_RESTRICTED ) ? 'rev-suppressed-text-view' : 'rev-deleted-text-view'; - $wgOut->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1</div>\n", $msg ); + $wgOut->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n", $msg ); + return true; } } - /* - * Should the parser cache be used? - */ + /** + * Should the parser cache be used? + * + * @return boolean + */ public function useParserCache( $oldid ) { global $wgUser, $wgEnableParserCache; return $wgEnableParserCache - && intval( $wgUser->getOption( 'stubthreshold' ) ) == 0 + && $wgUser->getStubThreshold() == 0 && $this->exists() && empty( $oldid ) && !$this->mTitle->isCssOrJsPage() @@ -1337,15 +1474,22 @@ class Article { */ public function doViewParse() { global $wgOut; + $oldid = $this->getOldID(); - $useParserCache = $this->useParserCache( $oldid ); - $parserOptions = clone $this->getParserOptions(); + $parserOptions = $this->getParserOptions(); + # Render printable version, use printable version cache $parserOptions->setIsPrintable( $wgOut->isPrintable() ); + # Don't show section-edit links on old revisions... this way lies madness. - $parserOptions->setEditSection( $this->isCurrent() ); + if ( !$this->isCurrent() || $wgOut->isPrintable() || !$this->mTitle->quickUserCan( 'edit' ) ) { + $parserOptions->setEditSection( false ); + } + $useParserCache = $this->useParserCache( $oldid ); $this->outputWikiText( $this->getContent(), $useParserCache, $parserOptions ); + + return true; } /** @@ -1353,13 +1497,21 @@ class Article { * output it and return true. If it is not present, output nothing and * return false. This is used as a callback function for * PoolCounter::executeProtected(). + * + * @return boolean */ public function tryDirtyCache() { global $wgOut; $parserCache = ParserCache::singleton(); $options = $this->getParserOptions(); - $options->setIsPrintable( $wgOut->isPrintable() ); + + if ( $wgOut->isPrintable() ) { + $options->setIsPrintable( true ); + $options->setEditSection( false ); + } + $output = $parserCache->getDirty( $this, $options ); + if ( $output ) { wfDebug( __METHOD__ . ": sending dirty output\n" ); wfDebugLog( 'dirty', "dirty output " . $parserCache->getKey( $this, $options ) . "\n" ); @@ -1367,126 +1519,123 @@ class Article { $this->mParserOutput = $output; $wgOut->addParserOutput( $output ); $wgOut->addHTML( "<!-- parser cache is expired, sending anyway due to pool overload-->\n" ); + return true; } else { wfDebugLog( 'dirty', "dirty missing\n" ); wfDebug( __METHOD__ . ": no dirty cache\n" ); + return false; } } - /** - * Show an error page for an error from the pool counter. - * @param $status Status - */ - public function showPoolError( $status ) { - global $wgOut; - $wgOut->clearHTML(); // for release() errors - $wgOut->enableClientCache( false ); - $wgOut->setRobotPolicy( 'noindex,nofollow' ); - $wgOut->addWikiText( - '<div class="errorbox">' . - $status->getWikiText( false, 'view-pool-error' ) . - '</div>' - ); - } - /** * View redirect + * * @param $target Title object or Array of destination(s) to redirect * @param $appendSubtitle Boolean [optional] * @param $forceKnown Boolean: should the image be shown as a bluelink regardless of existence? + * @return string containing HMTL with redirect link */ public function viewRedirect( $target, $appendSubtitle = true, $forceKnown = false ) { global $wgOut, $wgContLang, $wgStylePath, $wgUser; - # Display redirect + if ( !is_array( $target ) ) { $target = array( $target ); } + $imageDir = $wgContLang->getDir(); - $imageUrl = $wgStylePath . '/common/images/redirect' . $imageDir . '.png'; - $imageUrl2 = $wgStylePath . '/common/images/nextredirect' . $imageDir . '.png'; - $alt2 = $wgContLang->isRTL() ? '←' : '→'; // should -> and <- be used instead of entities? if ( $appendSubtitle ) { $wgOut->appendSubtitle( wfMsgHtml( 'redirectpagesub' ) ); } + $sk = $wgUser->getSkin(); // the loop prepends the arrow image before the link, so the first case needs to be outside $title = array_shift( $target ); + if ( $forceKnown ) { - $link = $sk->link( - $title, - htmlspecialchars( $title->getFullText() ), - array(), - array(), - array( 'known', 'noclasses' ) - ); + $link = $sk->linkKnown( $title, htmlspecialchars( $title->getFullText() ) ); } else { $link = $sk->link( $title, htmlspecialchars( $title->getFullText() ) ); } - // automatically append redirect=no to each link, since most of them are redirect pages themselves + + $nextRedirect = $wgStylePath . '/common/images/nextredirect' . $imageDir . '.png'; + $alt = $wgContLang->isRTL() ? '←' : '→'; + // Automatically append redirect=no to each link, since most of them are redirect pages themselves. + // FIXME: where this happens? foreach ( $target as $rt ) { + $link .= Html::element( 'img', array( 'src' => $nextRedirect, 'alt' => $alt ) ); if ( $forceKnown ) { - $link .= '<img src="' . $imageUrl2 . '" alt="' . $alt2 . ' " />' - . $sk->link( - $rt, - htmlspecialchars( $rt->getFullText() ), - array(), - array(), - array( 'known', 'noclasses' ) - ); + $link .= $sk->linkKnown( $rt, htmlspecialchars( $rt->getFullText() ) ); } else { - $link .= '<img src="' . $imageUrl2 . '" alt="' . $alt2 . ' " />' - . $sk->link( $rt, htmlspecialchars( $rt->getFullText() ) ); + $link .= $sk->link( $rt, htmlspecialchars( $rt->getFullText() ) ); } } - return '<img src="' . $imageUrl . '" alt="#REDIRECT " />' . - '<span class="redirectText">' . $link . '</span>'; + $imageUrl = $wgStylePath . '/common/images/redirect' . $imageDir . '.png'; + return '<div class="redirectMsg">' . + Html::element( 'img', array( 'src' => $imageUrl, 'alt' => '#REDIRECT' ) ) . + '<span class="redirectText">' . $link . '</span></div>'; } + /** + * Builds trackback links for article display if $wgUseTrackbacks is set to true + */ public function addTrackbacks() { global $wgOut, $wgUser; + $dbr = wfGetDB( DB_SLAVE ); $tbs = $dbr->select( 'trackbacks', array( 'tb_id', 'tb_title', 'tb_url', 'tb_ex', 'tb_name' ), array( 'tb_page' => $this->getID() ) ); - if ( !$dbr->numRows( $tbs ) ) return; + + if ( !$dbr->numRows( $tbs ) ) { + return; + } $wgOut->preventClickjacking(); $tbtext = ""; - while ( $o = $dbr->fetchObject( $tbs ) ) { + foreach ( $tbs as $o ) { $rmvtxt = ""; + if ( $wgUser->isAllowed( 'trackback' ) ) { $delurl = $this->mTitle->getFullURL( "action=deletetrackback&tbid=" . $o->tb_id . "&token=" . urlencode( $wgUser->editToken() ) ); $rmvtxt = wfMsg( 'trackbackremove', htmlspecialchars( $delurl ) ); } + $tbtext .= "\n"; - $tbtext .= wfMsg( strlen( $o->tb_ex ) ? 'trackbackexcerpt' : 'trackback', + $tbtext .= wfMsgNoTrans( strlen( $o->tb_ex ) ? 'trackbackexcerpt' : 'trackback', $o->tb_title, $o->tb_url, $o->tb_ex, $o->tb_name, $rmvtxt ); } - $wgOut->wrapWikiMsg( "<div id='mw_trackbacks'>$1</div>\n", array( 'trackbackbox', $tbtext ) ); - $this->mTitle->invalidateCache(); + + $wgOut->wrapWikiMsg( "<div id='mw_trackbacks'>\n$1\n</div>\n", array( 'trackbackbox', $tbtext ) ); } + /** + * Removes trackback record for current article from trackbacks table + */ public function deletetrackback() { global $wgUser, $wgRequest, $wgOut; + if ( !$wgUser->matchEditToken( $wgRequest->getVal( 'token' ) ) ) { $wgOut->addWikiMsg( 'sessionfailure' ); + return; } $permission_errors = $this->mTitle->getUserPermissionsErrors( 'delete', $wgUser ); + if ( count( $permission_errors ) ) { $wgOut->showPermissionsErrorPage( $permission_errors ); + return; } @@ -1497,8 +1646,13 @@ class Article { $this->mTitle->invalidateCache(); } + /** + * Handle action=render + */ + public function render() { global $wgOut; + $wgOut->setArticleBodyOnly( true ); $this->view(); } @@ -1508,22 +1662,30 @@ class Article { */ public function purge() { global $wgUser, $wgRequest, $wgOut; + if ( $wgUser->isAllowed( 'purge' ) || $wgRequest->wasPosted() ) { + //FIXME: shouldn't this be in doPurge()? if ( wfRunHooks( 'ArticlePurge', array( &$this ) ) ) { $this->doPurge(); $this->view(); } } else { - $action = htmlspecialchars( $wgRequest->getRequestURL() ); - $button = wfMsgExt( 'confirm_purge_button', array( 'escapenoentities' ) ); - $form = "<form method=\"post\" action=\"$action\">\n" . - "<input type=\"submit\" name=\"submit\" value=\"$button\" />\n" . - "</form>\n"; - $top = wfMsgExt( 'confirm-purge-top', array( 'parse' ) ); - $bottom = wfMsgExt( 'confirm-purge-bottom', array( 'parse' ) ); + $formParams = array( + 'method' => 'post', + 'action' => $wgRequest->getRequestURL(), + ); + + $wgOut->addWikiMsg( 'confirm-purge-top' ); + + $form = Html::openElement( 'form', $formParams ); + $form .= Xml::submitButton( wfMsg( 'confirm_purge_button' ) ); + $form .= Html::closeElement( 'form' ); + + $wgOut->addHTML( $form ); + $wgOut->addWikiMsg( 'confirm-purge-bottom' ); + $wgOut->setPageTitle( $this->mTitle->getPrefixedText() ); $wgOut->setRobotPolicy( 'noindex,nofollow' ); - $wgOut->addHTML( $top . $form . $bottom ); } } @@ -1532,6 +1694,7 @@ class Article { */ public function doPurge() { global $wgUseSquid; + // Invalidate the cache $this->mTitle->invalidateCache(); @@ -1544,13 +1707,16 @@ class Article { $update = SquidUpdate::newSimplePurge( $this->mTitle ); $update->doUpdate(); } + if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) { global $wgMessageCache; + if ( $this->getID() == 0 ) { $text = false; } else { $text = $this->getRawText(); } + $wgMessageCache->replace( $this->mTitle->getDBkey(), $text ); } } @@ -1558,7 +1724,7 @@ class Article { /** * Insert a new empty page record for this article. * This *must* be followed up by creating a revision - * and running $this->updateToLatest( $rev_id ); + * and running $this->updateRevisionOn( ... ); * or else the record will be left in a funky state. * Best if all done inside a transaction. * @@ -1585,18 +1751,20 @@ class Article { ), __METHOD__, 'IGNORE' ); $affected = $dbw->affectedRows(); + if ( $affected ) { $newid = $dbw->insertId(); $this->mTitle->resetArticleId( $newid ); } wfProfileOut( __METHOD__ ); + return $affected ? $newid : false; } /** * Update the page record to point to a newly saved revision. * - * @param $dbw Database object + * @param $dbw DatabaseBase: object * @param $revision Revision: For ID number, and text used to set length and redirect status fields * @param $lastRevision Integer: if given, will not overwrite the page field @@ -1612,9 +1780,10 @@ class Article { wfProfileIn( __METHOD__ ); $text = $revision->getText(); - $rt = Title::newFromRedirect( $text ); + $rt = Title::newFromRedirectRecurse( $text ); $conditions = array( 'page_id' => $this->getId() ); + if ( !is_null( $lastRevision ) ) { # An extra check against threads stepping on each other $conditions['page_latest'] = $lastRevision; @@ -1656,27 +1825,25 @@ class Article { // Update/Insert if we don't know if the last revision was a redirect or not // Delete if changing from redirect to non-redirect $isRedirect = !is_null( $redirectTitle ); + if ( $isRedirect || is_null( $lastRevIsRedirect ) || $lastRevIsRedirect !== $isRedirect ) { wfProfileIn( __METHOD__ ); if ( $isRedirect ) { - // This title is a redirect, Add/Update row in the redirect table - $set = array( /* SET */ - 'rd_namespace' => $redirectTitle->getNamespace(), - 'rd_title' => $redirectTitle->getDBkey(), - 'rd_from' => $this->getId(), - ); - $dbw->replace( 'redirect', array( 'rd_from' ), $set, __METHOD__ ); + $this->insertRedirectEntry( $redirectTitle ); } else { // This is not a redirect, remove row from redirect table $where = array( 'rd_from' => $this->getId() ); $dbw->delete( 'redirect', $where, __METHOD__ ); } + if ( $this->getTitle()->getNamespace() == NS_FILE ) { RepoGroup::singleton()->getLocalRepo()->invalidateImageRedirect( $this->getTitle() ); } wfProfileOut( __METHOD__ ); + return ( $dbw->affectedRows() != 0 ); } + return true; } @@ -1686,9 +1853,11 @@ class Article { * * @param $dbw Database object * @param $revision Revision object + * @return mixed */ public function updateIfNewerOn( &$dbw, $revision ) { wfProfileIn( __METHOD__ ); + $row = $dbw->selectRow( array( 'revision', 'page' ), array( 'rev_id', 'rev_timestamp', 'page_is_redirect' ), @@ -1696,6 +1865,7 @@ class Article { 'page_id' => $this->getId(), 'page_latest=rev_id' ), __METHOD__ ); + if ( $row ) { if ( wfTimestamp( TS_MW, $row->rev_timestamp ) >= $revision->getTimestamp() ) { wfProfileOut( __METHOD__ ); @@ -1708,17 +1878,23 @@ class Article { $prev = 0; $lastRevIsRedirect = null; } + $ret = $this->updateRevisionOn( $dbw, $revision, $prev, $lastRevIsRedirect ); + wfProfileOut( __METHOD__ ); return $ret; } /** * @param $section empty/null/false or a section number (0, 1, 2, T1, T2...) + * @param $text String: new text of the section + * @param $summary String: new section's subject, only if $section is 'new' + * @param $edittime String: revision timestamp or null to use the current revision * @return string Complete article text, or null if error */ public function replaceSection( $section, $text, $summary = '', $edittime = null ) { wfProfileIn( __METHOD__ ); + if ( strval( $section ) == '' ) { // Whole-page edit; let the whole text through } else { @@ -1728,11 +1904,14 @@ class Article { $dbw = wfGetDB( DB_MASTER ); $rev = Revision::loadFromTimestamp( $dbw, $this->mTitle, $edittime ); } + if ( !$rev ) { wfDebug( "Article::replaceSection asked for bogus section (page: " . $this->getId() . "; section: $section; edittime: $edittime)\n" ); + wfProfileOut( __METHOD__ ); return null; } + $oldtext = $rev->getText(); if ( $section == 'new' ) { @@ -1744,9 +1923,11 @@ class Article { } else { # Replacing an existing section; roll out the big guns global $wgParser; + $text = $wgParser->replaceSection( $oldtext, $section, $text ); } } + wfProfileOut( __METHOD__ ); return $text; } @@ -1765,7 +1946,6 @@ class Article { if ( $comment && $summary != "" ) { $text = wfMsgForContent( 'newsectionheaderdefaultlevel', $summary ) . "\n\n" . $text; } - $this->doEdit( $text, $summary, $flags ); $dbw = wfGetDB( DB_MASTER ); @@ -1794,6 +1974,7 @@ class Article { ( $forceBot ? EDIT_FORCE_BOT : 0 ); $status = $this->doEdit( $text, $summary, $flags ); + if ( !$status->isOK() ) { return false; } @@ -1820,6 +2001,23 @@ class Article { return true; } + /** + * Check flags and add EDIT_NEW or EDIT_UPDATE to them as needed. + * @param $flags Int + * @return Int updated $flags + */ + function checkFlags( $flags ) { + if ( !( $flags & EDIT_NEW ) && !( $flags & EDIT_UPDATE ) ) { + if ( $this->mTitle->getArticleID() ) { + $flags |= EDIT_UPDATE; + } else { + $flags |= EDIT_NEW; + } + } + + return $flags; + } + /** * Article::doEdit() * @@ -1874,7 +2072,7 @@ class Article { global $wgUser, $wgDBtransactions, $wgUseAutomaticEditSummaries; # Low-level sanity check - if ( $this->mTitle->getText() == '' ) { + if ( $this->mTitle->getText() === '' ) { throw new MWException( 'Something is trying to edit an article with an empty title' ); } @@ -1886,23 +2084,18 @@ class Article { # Load $this->mTitle->getArticleID() and $this->mLatest if it's not already $this->loadPageData(); - if ( !( $flags & EDIT_NEW ) && !( $flags & EDIT_UPDATE ) ) { - $aid = $this->mTitle->getArticleID(); - if ( $aid ) { - $flags |= EDIT_UPDATE; - } else { - $flags |= EDIT_NEW; - } - } + $flags = $this->checkFlags( $flags ); if ( !wfRunHooks( 'ArticleSave', array( &$this, &$user, &$text, &$summary, $flags & EDIT_MINOR, null, null, &$flags, &$status ) ) ) { wfDebug( __METHOD__ . ": ArticleSave hook aborted save!\n" ); - wfProfileOut( __METHOD__ ); + if ( $status->isOK() ) { $status->fatal( 'edit-hook-aborted' ); } + + wfProfileOut( __METHOD__ ); return $status; } @@ -1929,13 +2122,12 @@ class Article { if ( $flags & EDIT_UPDATE ) { # Update article, but only if changed. $status->value['new'] = false; + # Make sure the revision is either completely inserted or not inserted at all if ( !$wgDBtransactions ) { $userAbort = ignore_user_abort( true ); } - $revisionId = 0; - $changed = ( strcmp( $text, $oldtext ) != 0 ); if ( $changed ) { @@ -1947,6 +2139,7 @@ class Article { # Article gone missing wfDebug( __METHOD__ . ": EDIT_UPDATE specified but article doesn't exist\n" ); $status->fatal( 'edit-gone-missing' ); + wfProfileOut( __METHOD__ ); return $status; } @@ -1959,7 +2152,7 @@ class Article { 'parent_id' => $this->mLatest, 'user' => $user->getId(), 'user_text' => $user->getName(), - ) ); + ) ); $dbw->begin(); $revisionId = $revision->insertOn( $dbw ); @@ -1976,10 +2169,12 @@ class Article { if ( !$ok ) { /* Belated edit conflict! Run away!! */ $status->fatal( 'edit-conflict' ); + # Delete the invalid revision if the DB is not transactional if ( !$wgDBtransactions ) { $dbw->delete( 'revision', array( 'rev_id' => $revisionId ), __METHOD__ ); } + $revisionId = 0; $dbw->rollback(); } else { @@ -1994,6 +2189,7 @@ class Article { $this->mLatest, $this->getTimestamp(), $bot, '', $oldsize, $newsize, $revisionId, $patrolled ); + # Log auto-patrolled edits if ( $patrolled ) { PatrolLog::record( $rc, true ); @@ -2015,6 +2211,7 @@ class Article { if ( !$wgDBtransactions ) { ignore_user_abort( $userAbort ); } + // Now that ignore_user_abort is restored, we can respond to fatal errors if ( !$status->isOK() ) { wfProfileOut( __METHOD__ ); @@ -2045,6 +2242,7 @@ class Article { if ( $newid === false ) { $dbw->rollback(); $status->fatal( 'edit-already-exists' ); + wfProfileOut( __METHOD__ ); return $status; } @@ -2066,14 +2264,17 @@ class Article { $this->updateRevisionOn( $dbw, $revision, 0 ); wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $revision, false, $user ) ); + # Update recentchanges if ( !( $flags & EDIT_SUPPRESS_RC ) ) { global $wgUseRCPatrol, $wgUseNPPatrol; + # Mark as patrolled if the user can do so $patrolled = ( $wgUseRCPatrol || $wgUseNPPatrol ) && $this->mTitle->userCan( 'autopatrol' ); # Add RC row to the DB $rc = RecentChange::notifyNew( $now, $this->mTitle, $isminor, $user, $summary, $bot, '', strlen( $text ), $revisionId, $patrolled ); + # Log auto-patrolled edits if ( $patrolled ) { PatrolLog::record( $rc, true ); @@ -2125,13 +2326,15 @@ class Article { */ public function doRedirect( $noRedir = false, $sectionAnchor = '', $extraQuery = '' ) { global $wgOut; + if ( $noRedir ) { $query = 'redirect=no'; if ( $extraQuery ) - $query .= "&$query"; + $query .= "&$extraQuery"; } else { $query = $extraQuery; } + $wgOut->redirect( $this->mTitle->getFullURL( $query ) . $sectionAnchor ); } @@ -2139,12 +2342,20 @@ class Article { * Mark this particular edit/page as patrolled */ public function markpatrolled() { - global $wgOut, $wgRequest, $wgUseRCPatrol, $wgUseNPPatrol, $wgUser; + global $wgOut, $wgUser, $wgRequest; + $wgOut->setRobotPolicy( 'noindex,nofollow' ); # If we haven't been given an rc_id value, we can't do anything $rcid = (int) $wgRequest->getVal( 'rcid' ); + + if ( !$wgUser->matchEditToken( $wgRequest->getVal( 'token' ), $rcid ) ) { + $wgOut->showErrorPage( 'sessionfailure-title', 'sessionfailure' ); + return; + } + $rc = RecentChange::newFromId( $rcid ); + if ( is_null( $rc ) ) { $wgOut->showErrorPage( 'markedaspatrollederror', 'markedaspatrollederrortext' ); return; @@ -2154,11 +2365,11 @@ class Article { $returnto = $rc->getAttribute( 'rc_type' ) == RC_NEW ? 'Newpages' : 'Recentchanges'; $return = SpecialPage::getTitleFor( $returnto ); - $dbw = wfGetDB( DB_MASTER ); $errors = $rc->doMarkPatrolled(); if ( in_array( array( 'rcpatroldisabled' ), $errors ) ) { $wgOut->showErrorPage( 'rcpatroldisabled', 'rcpatroldisabledtext' ); + return; } @@ -2171,11 +2382,13 @@ class Article { $wgOut->setPageTitle( wfMsg( 'markedaspatrollederror' ) ); $wgOut->addWikiMsg( 'markedaspatrollederror-noautopatrol' ); $wgOut->returnToMain( false, $return ); + return; } if ( !empty( $errors ) ) { $wgOut->showPermissionsErrorPage( $errors ); + return; } @@ -2190,35 +2403,45 @@ class Article { */ public function watch() { global $wgUser, $wgOut; + if ( $wgUser->isAnon() ) { $wgOut->showErrorPage( 'watchnologin', 'watchnologintext' ); return; } + if ( wfReadOnly() ) { $wgOut->readOnlyPage(); return; } + if ( $this->doWatch() ) { $wgOut->setPagetitle( wfMsg( 'addedwatch' ) ); $wgOut->setRobotPolicy( 'noindex,nofollow' ); $wgOut->addWikiMsg( 'addedwatchtext', $this->mTitle->getPrefixedText() ); } + $wgOut->returnToMain( true, $this->mTitle->getPrefixedText() ); } /** * Add this page to $wgUser's watchlist + * + * This is safe to be called multiple times + * * @return bool true on successful watch operation */ public function doWatch() { global $wgUser; + if ( $wgUser->isAnon() ) { return false; } + if ( wfRunHooks( 'WatchArticle', array( &$wgUser, &$this ) ) ) { $wgUser->addWatch( $this->mTitle ); return wfRunHooks( 'WatchArticleComplete', array( &$wgUser, &$this ) ); } + return false; } @@ -2227,19 +2450,23 @@ class Article { */ public function unwatch() { global $wgUser, $wgOut; + if ( $wgUser->isAnon() ) { $wgOut->showErrorPage( 'watchnologin', 'watchnologintext' ); return; } + if ( wfReadOnly() ) { $wgOut->readOnlyPage(); return; } + if ( $this->doUnwatch() ) { $wgOut->setPagetitle( wfMsg( 'removedwatch' ) ); $wgOut->setRobotPolicy( 'noindex,nofollow' ); $wgOut->addWikiMsg( 'removedwatchtext', $this->mTitle->getPrefixedText() ); } + $wgOut->returnToMain( true, $this->mTitle->getPrefixedText() ); } @@ -2249,13 +2476,16 @@ class Article { */ public function doUnwatch() { global $wgUser; + if ( $wgUser->isAnon() ) { return false; } + if ( wfRunHooks( 'UnwatchArticle', array( &$wgUser, &$this ) ) ) { $wgUser->removeWatch( $this->mTitle ); return wfRunHooks( 'UnwatchArticleComplete', array( &$wgUser, &$this ) ); } + return false; } @@ -2289,8 +2519,9 @@ class Article { $restrictionTypes = $this->mTitle->getRestrictionTypes(); $id = $this->mTitle->getArticleID(); + if ( $id <= 0 ) { - wfDebug( "updateRestrictions failed: $id <= 0\n" ); + wfDebug( "updateRestrictions failed: article id $id <= 0\n" ); return false; } @@ -2316,6 +2547,7 @@ class Article { $current = array(); $updated = Article::flattenRestrictions( $limit ); $changed = false; + foreach ( $restrictionTypes as $action ) { if ( isset( $expiry[$action] ) ) { # Get current restrictions on $action @@ -2323,6 +2555,7 @@ class Article { $current[$action] = implode( '', $aLimits ); # Are any actual restrictions being dealt with here? $aRChanged = count( $aLimits ) || !empty( $limit[$action] ); + # If something changed, we need to log it. Checking $aRChanged # assures that "unprotecting" a page that is not protected does # not log just because the expiry was "changed". @@ -2341,38 +2574,44 @@ class Article { # If nothing's changed, do nothing if ( $changed ) { if ( wfRunHooks( 'ArticleProtect', array( &$this, &$wgUser, $limit, $reason ) ) ) { - $dbw = wfGetDB( DB_MASTER ); # Prepare a null revision to be added to the history $modified = $current != '' && $protect; + if ( $protect ) { $comment_type = $modified ? 'modifiedarticleprotection' : 'protectedarticle'; } else { $comment_type = 'unprotectedarticle'; } + $comment = $wgContLang->ucfirst( wfMsgForContent( $comment_type, $this->mTitle->getPrefixedText() ) ); # Only restrictions with the 'protect' right can cascade... # Otherwise, people who cannot normally protect can "protect" pages via transclusion $editrestriction = isset( $limit['edit'] ) ? array( $limit['edit'] ) : $this->mTitle->getRestrictions( 'edit' ); + # The schema allows multiple restrictions - if ( !in_array( 'protect', $editrestriction ) && !in_array( 'sysop', $editrestriction ) ) + if ( !in_array( 'protect', $editrestriction ) && !in_array( 'sysop', $editrestriction ) ) { $cascade = false; + } + $cascade_description = ''; + if ( $cascade ) { $cascade_description = ' [' . wfMsgForContent( 'protect-summary-cascade' ) . ']'; } - if ( $reason ) + if ( $reason ) { $comment .= ": $reason"; + } $editComment = $comment; $encodedExpiry = array(); $protect_description = ''; - foreach ( $limit as $action => $restrictions ) { + foreach ( $limit as $action => $restrictions ) { if ( !isset( $expiry[$action] ) ) - $expiry[$action] = 'infinite'; + $expiry[$action] = Block::infinity(); $encodedExpiry[$action] = Block::encodeExpiry( $expiry[$action], $dbw ); if ( $restrictions != '' ) { @@ -2385,15 +2624,20 @@ class Article { } else { $protect_description .= wfMsgForContent( 'protect-expiry-indefinite' ); } + $protect_description .= ') '; } } $protect_description = trim( $protect_description ); - if ( $protect_description && $protect ) + if ( $protect_description && $protect ) { $editComment .= " ($protect_description)"; - if ( $cascade ) + } + + if ( $cascade ) { $editComment .= "$cascade_description"; + } + # Update restrictions table foreach ( $limit as $action => $restrictions ) { if ( $restrictions != '' ) { @@ -2402,7 +2646,10 @@ class Article { 'pr_type' => $action, 'pr_level' => $restrictions, 'pr_cascade' => ( $cascade && $action == 'edit' ) ? 1 : 0, - 'pr_expiry' => $encodedExpiry[$action] ), __METHOD__ ); + 'pr_expiry' => $encodedExpiry[$action] + ), + __METHOD__ + ); } else { $dbw->delete( 'page_restrictions', array( 'pr_page' => $id, 'pr_type' => $action ), __METHOD__ ); @@ -2436,7 +2683,6 @@ class Article { } else { $log->addEntry( 'unprotect', $this->mTitle, $reason ); } - } # End hook } # End "changed" check @@ -2453,35 +2699,46 @@ class Article { if ( !is_array( $limit ) ) { throw new MWException( 'Article::flattenRestrictions given non-array restriction set' ); } + $bits = array(); ksort( $limit ); + foreach ( $limit as $action => $restrictions ) { if ( $restrictions != '' ) { $bits[] = "$action=$restrictions"; } } + return implode( ':', $bits ); } /** * Auto-generates a deletion reason + * * @param &$hasHistory Boolean: whether the page has a history + * @return mixed String containing deletion reason or empty string, or boolean false + * if no revision occurred */ public function generateReason( &$hasHistory ) { global $wgContLang; + $dbw = wfGetDB( DB_MASTER ); // Get the last revision $rev = Revision::newFromTitle( $this->mTitle ); - if ( is_null( $rev ) ) + + if ( is_null( $rev ) ) { return false; + } // Get the article's contents $contents = $rev->getText(); $blank = false; + // If the page is blank, use the text from the previous revision, // which can only be blank if there's a move/import/protect dummy revision involved if ( $contents == '' ) { $prev = $rev->getPrevious(); + if ( $prev ) { $contents = $prev->getText(); $blank = true; @@ -2495,21 +2752,27 @@ class Article { __METHOD__, array( 'LIMIT' => 20 ) ); - if ( $res === false ) + + if ( $res === false ) { // This page has no revisions, which is very weird return false; + } $hasHistory = ( $res->numRows() > 1 ); $row = $dbw->fetchObject( $res ); - $onlyAuthor = $row->rev_user_text; - // Try to find a second contributor - foreach ( $res as $row ) { - if ( $row->rev_user_text != $onlyAuthor ) { - $onlyAuthor = false; - break; + + if ( $row ) { // $row is false if the only contributor is hidden + $onlyAuthor = $row->rev_user_text; + // Try to find a second contributor + foreach ( $res as $row ) { + if ( $row->rev_user_text != $onlyAuthor ) { // Bug 22999 + $onlyAuthor = false; + break; + } } + } else { + $onlyAuthor = false; } - $dbw->freeResult( $res ); // Generate the summary with a '$1' placeholder if ( $blank ) { @@ -2517,10 +2780,11 @@ class Article { // blank. It's just not our lucky day $reason = wfMsgForContent( 'exbeforeblank', '$1' ); } else { - if ( $onlyAuthor ) + if ( $onlyAuthor ) { $reason = wfMsgForContent( 'excontentauthor', '$1', $onlyAuthor ); - else + } else { $reason = wfMsgForContent( 'excontent', '$1' ); + } } if ( $reason == '-' ) { @@ -2538,6 +2802,7 @@ class Article { $contents = preg_replace( '/\[\[([^\]]*)\]?$/', '$1', $contents ); // Now replace the '$1' placeholder $reason = str_replace( '$1', $contents, $reason ); + return $reason; } @@ -2562,6 +2827,7 @@ class Article { } elseif ( $reason == 'other' ) { $reason = $this->DeleteReason; } + # Flag to hide all contents of the archived revisions $suppress = $wgRequest->getVal( 'wpSuppress' ) && $wgUser->isAllowed( 'suppressrevision' ); @@ -2570,6 +2836,7 @@ class Article { # Read-only check... if ( wfReadOnly() ) { $wgOut->readOnlyPage(); + return; } @@ -2578,6 +2845,7 @@ class Article { if ( count( $permission_errors ) > 0 ) { $wgOut->showPermissionsErrorPage( $permission_errors ); + return; } @@ -2601,6 +2869,7 @@ class Article { 'delete', $this->mTitle->getPrefixedText() ); + return; } @@ -2608,38 +2877,47 @@ class Article { $bigHistory = $this->isBigDeletion(); if ( $bigHistory && !$this->mTitle->userCan( 'bigdelete' ) ) { global $wgLang, $wgDeleteRevisionsLimit; - $wgOut->wrapWikiMsg( "<div class='error'>\n$1</div>\n", + + $wgOut->wrapWikiMsg( "<div class='error'>\n$1\n</div>\n", array( 'delete-toobig', $wgLang->formatNum( $wgDeleteRevisionsLimit ) ) ); + return; } if ( $confirm ) { $this->doDelete( $reason, $suppress ); + if ( $wgRequest->getCheck( 'wpWatch' ) && $wgUser->isLoggedIn() ) { $this->doWatch(); } elseif ( $this->mTitle->userIsWatching() ) { $this->doUnwatch(); } + return; } // Generate deletion reason $hasHistory = false; - if ( !$reason ) $reason = $this->generateReason( $hasHistory ); + if ( !$reason ) { + $reason = $this->generateReason( $hasHistory ); + } // If the page has a history, insert a warning if ( $hasHistory && !$confirm ) { global $wgLang; + $skin = $wgUser->getSkin(); $revisions = $this->estimateRevisionCount(); + //FIXME: lego $wgOut->addHTML( '<strong class="mw-delete-warning-revisions">' . wfMsgExt( 'historywarning', array( 'parseinline' ), $wgLang->formatNum( $revisions ) ) . wfMsgHtml( 'word-separator' ) . $skin->historyLink() . '</strong>' ); + if ( $bigHistory ) { global $wgDeleteRevisionsLimit; - $wgOut->wrapWikiMsg( "<div class='error'>\n$1</div>\n", + $wgOut->wrapWikiMsg( "<div class='error'>\n$1\n</div>\n", array( 'delete-warning-toobig', $wgLang->formatNum( $wgDeleteRevisionsLimit ) ) ); } } @@ -2652,10 +2930,13 @@ class Article { */ public function isBigDeletion() { global $wgDeleteRevisionsLimit; + if ( $wgDeleteRevisionsLimit ) { $revCount = $this->estimateRevisionCount(); + return $revCount > $wgDeleteRevisionsLimit; } + return false; } @@ -2664,6 +2945,7 @@ class Article { */ public function estimateRevisionCount() { $dbr = wfGetDB( DB_SLAVE ); + // For an exact count... // return $dbr->selectField( 'revision', 'COUNT(*)', // array( 'rev_page' => $this->getId() ), __METHOD__ ); @@ -2683,6 +2965,7 @@ class Article { // If that doesn't have the latest revision, try the master $continue = 2; $db = wfGetDB( DB_SLAVE ); + do { $res = $db->select( array( 'page', 'revision' ), array( 'rev_id', 'rev_user_text' ), @@ -2695,11 +2978,14 @@ class Article { 'LIMIT' => $num ) ) ); + if ( !$res ) { wfProfileOut( __METHOD__ ); return array(); } + $row = $db->fetchObject( $res ); + if ( $continue == 2 && $revLatest && $row->rev_id != $revLatest ) { $db = wfGetDB( DB_MASTER ); $continue--; @@ -2709,15 +2995,18 @@ class Article { } while ( $continue ); $authors = array( $row->rev_user_text ); - while ( $row = $db->fetchObject( $res ) ) { + + foreach ( $res as $row ) { $authors[] = $row->rev_user_text; } + wfProfileOut( __METHOD__ ); return $authors; } /** * Output deletion confirmation dialog + * FIXME: Move to another file? * @param $reason String: prefilled reason */ public function confirmDelete( $reason ) { @@ -2725,13 +3014,7 @@ class Article { wfDebug( "Article::confirmDelete\n" ); - $deleteBackLink = $wgUser->getSkin()->link( - $this->mTitle, - null, - array(), - array(), - array( 'known', 'noclasses' ) - ); + $deleteBackLink = $wgUser->getSkin()->linkKnown( $this->mTitle ); $wgOut->setSubtitle( wfMsgHtml( 'delete-backlink', $deleteBackLink ) ); $wgOut->setRobotPolicy( 'noindex,nofollow' ); $wgOut->addWikiMsg( 'confirmdeletetext' ); @@ -2780,7 +3063,8 @@ class Article { ) ) . "</td> </tr>"; - # Dissalow watching is user is not logged in + + # Disallow watching if user is not logged in if ( $wgUser->isLoggedIn() ) { $form .= " <tr> @@ -2791,6 +3075,7 @@ class Article { "</td> </tr>"; } + $form .= " $suppress <tr> @@ -2802,7 +3087,7 @@ class Article { </tr>" . Xml::closeElement( 'table' ) . Xml::closeElement( 'fieldset' ) . - Xml::hidden( 'wpEditToken', $wgUser->editToken() ) . + Html::hidden( 'wpEditToken', $wgUser->editToken() ) . Xml::closeElement( 'form' ); if ( $wgUser->isAllowed( 'editinterface' ) ) { @@ -2819,9 +3104,7 @@ class Article { $wgOut->addHTML( $form ); $wgOut->addHTML( Xml::element( 'h2', null, LogPage::logName( 'delete' ) ) ); - LogEventsList::showLogExtract( - $wgOut, - 'delete', + LogEventsList::showLogExtract( $wgOut, 'delete', $this->mTitle->getPrefixedText() ); } @@ -2831,7 +3114,8 @@ class Article { */ public function doDelete( $reason, $suppress = false ) { global $wgOut, $wgUser; - $id = $this->mTitle->getArticleID( GAID_FOR_UPDATE ); + + $id = $this->mTitle->getArticleID( Title::GAID_FOR_UPDATE ); $error = ''; if ( wfRunHooks( 'ArticleDelete', array( &$this, &$wgUser, &$reason, &$error ) ) ) { @@ -2856,7 +3140,9 @@ class Article { wfMsgExt( 'cannotdelete', array( 'parse' ), $this->mTitle->getPrefixedText() ) ) ); + $wgOut->addHTML( Xml::element( 'h2', null, LogPage::logName( 'delete' ) ) ); + LogEventsList::showLogExtract( $wgOut, 'delete', @@ -2871,20 +3157,27 @@ class Article { /** * Back-end article deletion * Deletes the article with database consistency, writes logs, purges caches - * Returns success + * + * @param $reason string delete reason for deletion log + * @param suppress bitfield + * Revision::DELETED_TEXT + * Revision::DELETED_COMMENT + * Revision::DELETED_USER + * Revision::DELETED_RESTRICTED + * @param $id int article ID + * @param $commit boolean defaults to true, triggers transaction end + * @return boolean true if successful */ - public function doDeleteArticle( $reason, $suppress = false, $id = 0 ) { - global $wgUseSquid, $wgDeferredUpdateList; - global $wgUseTrackbacks; + public function doDeleteArticle( $reason, $suppress = false, $id = 0, $commit = true ) { + global $wgDeferredUpdateList, $wgUseTrackbacks; wfDebug( __METHOD__ . "\n" ); $dbw = wfGetDB( DB_MASTER ); - $ns = $this->mTitle->getNamespace(); $t = $this->mTitle->getDBkey(); - $id = $id ? $id : $this->mTitle->getArticleID( GAID_FOR_UPDATE ); + $id = $id ? $id : $this->mTitle->getArticleID( Title::GAID_FOR_UPDATE ); - if ( $t == '' || $id == 0 ) { + if ( $t === '' || $id == 0 ) { return false; } @@ -2942,6 +3235,7 @@ class Article { # Now that it's safely backed up, delete it $dbw->delete( 'page', array( 'page_id' => $id ), __METHOD__ ); $ok = ( $dbw->affectedRows() > 0 ); // getArticleId() uses slave, could be laggy + if ( !$ok ) { $dbw->rollback(); return false; @@ -2950,9 +3244,11 @@ class Article { # Fix category table counts $cats = array(); $res = $dbw->select( 'categorylinks', 'cl_to', array( 'cl_from' => $id ), __METHOD__ ); + foreach ( $res as $row ) { $cats [] = $row->cl_to; } + $this->updateCategoryCounts( array(), $cats ); # If using cascading deletes, we can skip some explicit deletes @@ -2969,6 +3265,7 @@ class Article { $dbw->delete( 'templatelinks', array( 'tl_from' => $id ) ); $dbw->delete( 'externallinks', array( 'el_from' => $id ) ); $dbw->delete( 'langlinks', array( 'll_from' => $id ) ); + $dbw->delete( 'iwlinks', array( 'iwl_from' => $id ) ); $dbw->delete( 'redirect', array( 'rd_from' => $id ) ); } @@ -2998,7 +3295,9 @@ class Article { # Make sure logging got through $log->addEntry( 'delete', $this->mTitle, $reason, array() ); - $dbw->commit(); + if ( $commit ) { + $dbw->commit(); + } return true; } @@ -3026,6 +3325,7 @@ class Article { */ public function doRollback( $fromP, $summary, $token, $bot, &$resultDetails ) { global $wgUser; + $resultDetails = null; # Check permissions @@ -3033,15 +3333,18 @@ class Article { $rollbackErrors = $this->mTitle->getUserPermissionsErrors( 'rollback', $wgUser ); $errors = array_merge( $editErrors, wfArrayDiff2( $rollbackErrors, $editErrors ) ); - if ( !$wgUser->matchEditToken( $token, array( $this->mTitle->getPrefixedText(), $fromP ) ) ) + if ( !$wgUser->matchEditToken( $token, array( $this->mTitle->getPrefixedText(), $fromP ) ) ) { $errors[] = array( 'sessionfailure' ); + } if ( $wgUser->pingLimiter( 'rollback' ) || $wgUser->pingLimiter() ) { $errors[] = array( 'actionthrottledtext' ); } + # If there were errors, bail out now - if ( !empty( $errors ) ) + if ( !empty( $errors ) ) { return $errors; + } return $this->commitRollback( $fromP, $summary, $bot, $resultDetails ); } @@ -3057,6 +3360,7 @@ class Article { */ public function commitRollback( $fromP, $summary, $bot, &$resultDetails ) { global $wgUseRCPatrol, $wgUser, $wgLang; + $dbw = wfGetDB( DB_MASTER ); if ( wfReadOnly() ) { @@ -3092,12 +3396,12 @@ class Article { "rev_user != {$user} OR rev_user_text != {$user_text}" ), __METHOD__, array( 'USE INDEX' => 'page_timestamp', - 'ORDER BY' => 'rev_timestamp DESC' ) + 'ORDER BY' => 'rev_timestamp DESC' ) ); if ( $s === false ) { # No one else ever edited this page return array( array( 'cantrollback' ) ); - } else if ( $s->rev_deleted & REVISION::DELETED_TEXT || $s->rev_deleted & REVISION::DELETED_USER ) { + } else if ( $s->rev_deleted & Revision::DELETED_TEXT || $s->rev_deleted & Revision::DELETED_USER ) { # Only admins can see this text return array( array( 'notvisiblerev' ) ); } @@ -3107,6 +3411,7 @@ class Article { # Mark all reverted edits as bot $set['rc_bot'] = 1; } + if ( $wgUseRCPatrol ) { # Mark all reverted edits as patrolled $set['rc_patrolled'] = 1; @@ -3143,11 +3448,14 @@ class Article { # Save $flags = EDIT_UPDATE; - if ( $wgUser->isAllowed( 'minoredit' ) ) + if ( $wgUser->isAllowed( 'minoredit' ) ) { $flags |= EDIT_MINOR; + } - if ( $bot && ( $wgUser->isAllowed( 'markbotedits' ) || $wgUser->isAllowed( 'bot' ) ) ) + if ( $bot && ( $wgUser->isAllowed( 'markbotedits' ) || $wgUser->isAllowed( 'bot' ) ) ) { $flags |= EDIT_FORCE_BOT; + } + # Actually store the edit $status = $this->doEdit( $target->getText(), $summary, $flags, $target->getId() ); if ( !empty( $status->value['revision'] ) ) { @@ -3164,6 +3472,7 @@ class Article { 'target' => $target, 'newid' => $revId ); + return array(); } @@ -3171,7 +3480,8 @@ class Article { * User interface for rollback operations */ public function rollback() { - global $wgUser, $wgOut, $wgRequest, $wgUseRCPatrol; + global $wgUser, $wgOut, $wgRequest; + $details = null; $result = $this->doRollback( @@ -3186,26 +3496,31 @@ class Article { $wgOut->rateLimited(); return; } + if ( isset( $result[0][0] ) && ( $result[0][0] == 'alreadyrolled' || $result[0][0] == 'cantrollback' ) ) { $wgOut->setPageTitle( wfMsg( 'rollbackfailed' ) ); $errArray = $result[0]; $errMsg = array_shift( $errArray ); $wgOut->addWikiMsgArray( $errMsg, $errArray ); + if ( isset( $details['current'] ) ) { $current = $details['current']; + if ( $current->getComment() != '' ) { $wgOut->addWikiMsgArray( 'editcomment', array( $wgUser->getSkin()->formatComment( $current->getComment() ) ), array( 'replaceafter' ) ); } } + return; } + # Display permissions errors before read-only message -- there's no # point in misleading the user into thinking the inability to rollback # is only temporary. if ( !empty( $result ) && $result !== array( array( 'readonlytext' ) ) ) { - # array_diff is completely broken for arrays of arrays, sigh. Re- - # move any 'readonlytext' error manually. + # array_diff is completely broken for arrays of arrays, sigh. + # Remove any 'readonlytext' error manually. $out = array(); foreach ( $result as $error ) { if ( $error != array( 'readonlytext' ) ) { @@ -3213,10 +3528,13 @@ class Article { } } $wgOut->showPermissionsErrorPage( $out ); + return; } + if ( $result == array( array( 'readonlytext' ) ) ) { $wgOut->readOnlyPage(); + return; } @@ -3225,12 +3543,14 @@ class Article { $newId = $details['newid']; $wgOut->setPageTitle( wfMsg( 'actioncomplete' ) ); $wgOut->setRobotPolicy( 'noindex,nofollow' ); + if ( $current->getUserText() === '' ) { $old = wfMsg( 'rev-deleted-user' ); } else { $old = $wgUser->getSkin()->userLink( $current->getUser(), $current->getUserText() ) . $wgUser->getSkin()->userToolLinks( $current->getUser(), $current->getUserText() ); } + $new = $wgUser->getSkin()->userLink( $target->getUser(), $target->getUserText() ) . $wgUser->getSkin()->userToolLinks( $target->getUser(), $target->getUserText() ); $wgOut->addHTML( wfMsgExt( 'rollback-success', array( 'parse', 'replaceafter' ), $old, $new ) ); @@ -3242,7 +3562,6 @@ class Article { } } - /** * Do standard deferred updates after page view */ @@ -3251,12 +3570,14 @@ class Article { if ( wfReadOnly() ) { return; } + # Don't update page view counters on views from bot users (bug 14044) if ( !$wgDisableCounters && !$wgUser->isAllowed( 'bot' ) && $this->getID() ) { Article::incViewCount( $this->getID() ); $u = new SiteStatsUpdate( 1, 0, 0 ); array_push( $wgDeferredUpdateList, $u ); } + # Update newtalk / watchlist notification status $wgUser->clearNotification( $this->mTitle ); } @@ -3270,15 +3591,19 @@ class Article { // Already prepared return $this->mPreparedEdit; } + global $wgParser; + $edit = (object)array(); $edit->revid = $revid; $edit->newText = $text; $edit->pst = $this->preSaveTransform( $text ); - $options = $this->getParserOptions(); - $edit->output = $wgParser->parse( $edit->pst, $this->mTitle, $options, true, true, $revid ); + $edit->popts = $this->getParserOptions(); + $edit->output = $wgParser->parse( $edit->pst, $this->mTitle, $edit->popts, true, true, $revid ); $edit->oldText = $this->getContent(); + $this->mPreparedEdit = $edit; + return $edit; } @@ -3289,12 +3614,12 @@ class Article { * Every 100th edit, prune the recent changes table. * * @private - * @param $text New text of the article - * @param $summary Edit summary - * @param $minoredit Minor edit + * @param $text String: New text of the article + * @param $summary String: Edit summary + * @param $minoredit Boolean: Minor edit * @param $timestamp_of_pagechange Timestamp associated with the page change - * @param $newid rev_id value of the new revision - * @param $changed Whether or not the content actually changed + * @param $newid Integer: rev_id value of the new revision + * @param $changed Boolean: Whether or not the content actually changed */ public function editUpdates( $text, $summary, $minoredit, $timestamp_of_pagechange, $newid, $changed = true ) { global $wgDeferredUpdateList, $wgMessageCache, $wgUser, $wgEnableParserCache; @@ -3313,9 +3638,8 @@ class Article { # Save it to the parser cache if ( $wgEnableParserCache ) { - $popts = $this->getParserOptions(); $parserCache = ParserCache::singleton(); - $parserCache->save( $editInfo->output, $this, $popts ); + $parserCache->save( $editInfo->output, $this, $editInfo->popts ); } # Update the links tables @@ -3329,10 +3653,12 @@ class Article { // Flush old entries from the `recentchanges` table; we do this on // random requests so as to avoid an increase in writes for no good reason global $wgRCMaxAge; + $dbw = wfGetDB( DB_MASTER ); $cutoff = $dbw->timestamp( time() - $wgRCMaxAge ); $recentchanges = $dbw->tableName( 'recentchanges' ); $sql = "DELETE FROM $recentchanges WHERE rc_timestamp < '{$cutoff}'"; + $dbw->query( $sql ); } } @@ -3356,7 +3682,8 @@ class Article { # load of user talk pages and piss people off, nor if it's a minor edit # by a properly-flagged bot. if ( $this->mTitle->getNamespace() == NS_USER_TALK && $shortTitle != $wgUser->getTitleKey() && $changed - && !( $minoredit && $wgUser->isAllowed( 'nominornewtalk' ) ) ) { + && !( $minoredit && $wgUser->isAllowed( 'nominornewtalk' ) ) + ) { if ( wfRunHooks( 'ArticleEditUpdateNewTalk', array( &$this ) ) ) { $other = User::newFromName( $shortTitle, false ); if ( !$other ) { @@ -3410,13 +3737,14 @@ class Article { return; } - $unhide = $wgRequest->getInt( 'unhide' ) == 1 && - $wgUser->matchEditToken( $wgRequest->getVal( 'token' ), $oldid ); + $unhide = $wgRequest->getInt( 'unhide' ) == 1; + # Cascade unhide param in links for easy deletion browsing $extraParams = array(); if ( $wgRequest->getVal( 'unhide' ) ) { $extraParams['unhide'] = 1; } + $revision = Revision::newFromId( $oldid ); $current = ( $oldid == $this->mLatest ); @@ -3496,6 +3824,7 @@ class Article { ); $cdel = ''; + // User can delete revisions or view deleted revisions... $canHide = $wgUser->isAllowed( 'deleterevision' ); if ( $canHide || ( $revision->getVisibility() && $wgUser->isAllowed( 'deletedhistory' ) ) ) { @@ -3534,6 +3863,7 @@ class Article { "</div>\n" . "\n\t\t\t\t<div id=\"mw-revision-nav\">" . $cdel . wfMsgExt( 'revision-nav', array( 'escapenoentities', 'parsemag', 'replaceafter' ), $prevdiff, $prevlink, $lnk, $curdiff, $nextlink, $nextdiff ) . "</div>\n\t\t\t"; + $wgOut->setSubtitle( $r ); } @@ -3541,10 +3871,13 @@ class Article { * This function is called right before saving the wikitext, * so we can do things like signatures and links-in-context. * - * @param $text String + * @param $text String article contents + * @return string article contents with altered wikitext markup (signatures + * converted, {{subst:}}, templates, etc.) */ public function preSaveTransform( $text ) { global $wgParser, $wgUser; + return $wgParser->preSaveTransform( $text, $this->mTitle, $wgUser, ParserOptions::newFromUser( $wgUser ) ); } @@ -3554,13 +3887,17 @@ class Article { * checkLastModified returns true if it has taken care of all * output to the client that is necessary for this request. * (that is, it has sent a cached version of the page) + * + * @return boolean true if cached version send, false otherwise */ protected function tryFileCache() { static $called = false; + if ( $called ) { wfDebug( "Article::tryFileCache(): called twice!?\n" ); return false; } + $called = true; if ( $this->isFileCacheable() ) { $cache = new HTMLFileCache( $this->mTitle ); @@ -3575,6 +3912,7 @@ class Article { } else { wfDebug( "Article::tryFileCache(): not cacheable\n" ); } + return false; } @@ -3584,45 +3922,51 @@ class Article { */ public function isFileCacheable() { $cacheable = false; + if ( HTMLFileCache::useFileCache() ) { - $cacheable = $this->getID() && !$this->mRedirectedFrom; + $cacheable = $this->getID() && !$this->mRedirectedFrom && !$this->mTitle->isRedirect(); // Extension may have reason to disable file caching on some pages. if ( $cacheable ) { $cacheable = wfRunHooks( 'IsFileCacheable', array( &$this ) ); } } + return $cacheable; } /** * Loads page_touched and returns a value indicating if it should be used - * + * @return boolean true if not a redirect */ public function checkTouched() { if ( !$this->mDataLoaded ) { $this->loadPageData(); } + return !$this->mIsRedirect; } /** * Get the page_touched field + * @return string containing GMT timestamp */ public function getTouched() { - # Ensure that page data has been loaded if ( !$this->mDataLoaded ) { $this->loadPageData(); } + return $this->mTouched; } /** * Get the page_latest field + * @return integer rev_id of current revision */ public function getLatest() { if ( !$this->mDataLoaded ) { $this->loadPageData(); } + return (int)$this->mLatest; } @@ -3648,6 +3992,7 @@ class Article { $revision->insertOn( $dbw ); $this->updateRevisionOn( $dbw, $revision ); + global $wgUser; wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $revision, false, $wgUser ) ); wfProfileOut( __METHOD__ ); @@ -3660,6 +4005,7 @@ class Article { */ public static function incViewCount( $id ) { $id = intval( $id ); + global $wgHitcounterUpdateFreq; $dbw = wfGetDB( DB_MASTER ); @@ -3670,6 +4016,7 @@ class Article { if ( $wgHitcounterUpdateFreq <= 1 || $dbType == 'sqlite' ) { $dbw->query( "UPDATE $pageTable SET page_counter = page_counter + 1 WHERE page_id = $id" ); + return; } @@ -3682,12 +4029,14 @@ class Article { if ( ( rand() % $checkfreq != 0 ) or ( $dbw->lastErrno() != 0 ) ) { # Most of the time (or on SQL errors), skip row count check $dbw->ignoreErrors( $oldignore ); + return; } $res = $dbw->query( "SELECT COUNT(*) as n FROM $hitcounterTable" ); $row = $dbw->fetchObject( $res ); $rown = intval( $row->n ); + if ( $rown >= $wgHitcounterUpdateFreq ) { wfProfileIn( 'Article::incViewCount-collect' ); $old_user_abort = ignore_user_abort( true ); @@ -3699,11 +4048,11 @@ class Article { 'GROUP BY hc_id', __METHOD__ ); $dbw->delete( 'hitcounter', '*', __METHOD__ ); $dbw->unlockTables( __METHOD__ ); + if ( $dbType == 'mysql' ) { $dbw->query( "UPDATE $pageTable,$acchitsTable SET page_counter=page_counter + hc_n " . 'WHERE page_id = hc_id', __METHOD__ ); - } - else { + } else { $dbw->query( "UPDATE $pageTable SET page_counter=page_counter + hc_n " . "FROM $acchitsTable WHERE page_id = hc_id", __METHOD__ ); } @@ -3712,6 +4061,7 @@ class Article { ignore_user_abort( $old_user_abort ); wfProfileOut( 'Article::incViewCount-collect' ); } + $dbw->ignoreErrors( $oldignore ); } @@ -3733,6 +4083,7 @@ class Article { } else { $other = $title->getTalkPage(); } + $other->invalidateCache(); $other->purgeSquid(); @@ -3741,14 +4092,19 @@ class Article { $title->deleteTitleProtection(); } + /** + * Clears caches when article is deleted + */ public static function onArticleDelete( $title ) { global $wgMessageCache; + # Update existence markers on article/talk tabs... if ( $title->isTalkPage() ) { $other = $title->getSubjectPage(); } else { $other = $title->getTalkPage(); } + $other->invalidateCache(); $other->purgeSquid(); @@ -3762,24 +4118,30 @@ class Article { if ( $title->getNamespace() == NS_MEDIAWIKI ) { $wgMessageCache->replace( $title->getDBkey(), false ); } + # Images if ( $title->getNamespace() == NS_FILE ) { $update = new HTMLCacheUpdate( $title, 'imagelinks' ); $update->doUpdate(); } + # User talk pages if ( $title->getNamespace() == NS_USER_TALK ) { $user = User::newFromName( $title->getText(), false ); $user->setNewtalk( false ); } + # Image redirects RepoGroup::singleton()->getLocalRepo()->invalidateImageRedirect( $title ); } /** * Purge caches on page update etc + * + * @param $title Title object + * @todo: verify that $title is always a Title object (and never false or null), add Title hint to parameter $title */ - public static function onArticleEdit( $title, $flags = '' ) { + public static function onArticleEdit( $title ) { global $wgDeferredUpdateList; // Invalidate caches of articles which include this page @@ -3836,6 +4198,7 @@ class Article { : 'noarticletextanon'; $wgOut->addHTML( wfMsgExt( $msg, 'parse' ) ); } + $wgOut->addHTML( '</div>' ); } else { $dbr = wfGetDB( DB_SLAVE ); @@ -3852,15 +4215,21 @@ class Article { $pageInfo = $this->pageCountInfo( $page ); $talkInfo = $this->pageCountInfo( $page->getTalkPage() ); + + //FIXME: unescaped messages $wgOut->addHTML( "<ul><li>" . wfMsg( "numwatchers", $wgLang->formatNum( $numwatchers ) ) . '</li>' ); $wgOut->addHTML( "<li>" . wfMsg( 'numedits', $wgLang->formatNum( $pageInfo['edits'] ) ) . '</li>' ); + if ( $talkInfo ) { $wgOut->addHTML( '<li>' . wfMsg( "numtalkedits", $wgLang->formatNum( $talkInfo['edits'] ) ) . '</li>' ); } + $wgOut->addHTML( '<li>' . wfMsg( "numauthors", $wgLang->formatNum( $pageInfo['authors'] ) ) . '</li>' ); + if ( $talkInfo ) { $wgOut->addHTML( '<li>' . wfMsg( 'numtalkauthors', $wgLang->formatNum( $talkInfo['authors'] ) ) . '</li>' ); } + $wgOut->addHTML( '</ul>' ); } } @@ -3870,13 +4239,15 @@ class Article { * on a given page. If page does not exist, returns false. * * @param $title Title object - * @return array + * @return mixed array or boolean false */ public function pageCountInfo( $title ) { $id = $title->getArticleId(); + if ( $id == 0 ) { return false; } + $dbr = wfGetDB( DB_SLAVE ); $rev_clause = array( 'rev_page' => $id ); $edits = $dbr->selectField( @@ -3893,6 +4264,7 @@ class Article { __METHOD__, $this->getSelectOptions() ); + return array( 'edits' => $edits, 'authors' => $authors ); } @@ -3905,20 +4277,23 @@ class Article { public function getUsedTemplates() { $result = array(); $id = $this->mTitle->getArticleID(); + if ( $id == 0 ) { return array(); } + $dbr = wfGetDB( DB_SLAVE ); $res = $dbr->select( array( 'templatelinks' ), array( 'tl_namespace', 'tl_title' ), array( 'tl_from' => $id ), __METHOD__ ); + if ( $res !== false ) { foreach ( $res as $row ) { $result[] = Title::makeTitle( $row->tl_namespace, $row->tl_title ); } } - $dbr->freeResult( $res ); + return $result; } @@ -3931,21 +4306,24 @@ class Article { public function getHiddenCategories() { $result = array(); $id = $this->mTitle->getArticleID(); + if ( $id == 0 ) { return array(); } + $dbr = wfGetDB( DB_SLAVE ); $res = $dbr->select( array( 'categorylinks', 'page_props', 'page' ), array( 'cl_to' ), array( 'cl_from' => $id, 'pp_page=page_id', 'pp_propname' => 'hiddencat', 'page_namespace' => NS_CATEGORY, 'page_title=cl_to' ), __METHOD__ ); + if ( $res !== false ) { foreach ( $res as $row ) { $result[] = Title::makeTitle( NS_CATEGORY, $row->cl_to ); } } - $dbr->freeResult( $res ); + return $result; } @@ -3957,11 +4335,14 @@ class Article { * @return string An appropriate autosummary, or an empty string. */ public static function getAutosummary( $oldtext, $newtext, $flags ) { + global $wgContLang; + # Decide what kind of autosummary is needed. # Redirect autosummaries $ot = Title::newFromRedirect( $oldtext ); $rt = Title::newFromRedirect( $newtext ); + if ( is_object( $rt ) && ( !is_object( $ot ) || !$rt->equals( $ot ) || $ot->getFragment() != $rt->getFragment() ) ) { return wfMsgForContent( 'autoredircomment', $rt->getFullText() ); } @@ -3969,10 +4350,11 @@ class Article { # New page autosummaries if ( $flags & EDIT_NEW && strlen( $newtext ) ) { # If they're making a new article, give its text, truncated, in the summary. - global $wgContLang; + $truncatedtext = $wgContLang->truncate( str_replace( "\n", ' ', $newtext ), max( 0, 200 - strlen( wfMsgForContent( 'autosumm-new' ) ) ) ); + return wfMsgForContent( 'autosumm-new', $truncatedtext ); } @@ -3981,10 +4363,11 @@ class Article { return wfMsgForContent( 'autosumm-blank' ); } elseif ( strlen( $oldtext ) > 10 * strlen( $newtext ) && strlen( $newtext ) < 500 ) { # Removing more than 90% of the article - global $wgContLang; + $truncatedtext = $wgContLang->truncate( $newtext, max( 0, 200 - strlen( wfMsgForContent( 'autosumm-replace' ) ) ) ); + return wfMsgForContent( 'autosumm-replace', $truncatedtext ); } @@ -4000,6 +4383,7 @@ class Article { * * @param $text String * @param $cache Boolean + * @param $parserOptions mixed ParserOptions object, or boolean false */ public function outputWikiText( $text, $cache = true, $parserOptions = false ) { global $wgOut; @@ -4012,9 +4396,14 @@ class Article { * This does all the heavy lifting for outputWikitext, except it returns the parser * output instead of sending it straight to $wgOut. Makes things nice and simple for, * say, embedding thread pages within a discussion system (LiquidThreads) + * + * @param $text string + * @param $cache boolean + * @param $parserOptions parsing options, defaults to false + * @return string containing parsed output */ public function getOutputFromWikitext( $text, $cache = true, $parserOptions = false ) { - global $wgParser, $wgOut, $wgEnableParserCache, $wgUseFileCache; + global $wgParser, $wgEnableParserCache, $wgUseFileCache; if ( !$parserOptions ) { $parserOptions = $this->getParserOptions(); @@ -4031,33 +4420,46 @@ class Article { $this->mTitle->getPrefixedDBkey() ) ); } - if ( $wgEnableParserCache && $cache && $this && $this->mParserOutput->getCacheTime() != -1 ) { + if ( $wgEnableParserCache && $cache && $this->mParserOutput->isCacheable() ) { $parserCache = ParserCache::singleton(); $parserCache->save( $this->mParserOutput, $this, $parserOptions ); } + // Make sure file cache is not used on uncacheable content. // Output that has magic words in it can still use the parser cache // (if enabled), though it will generally expire sooner. - if ( $this->mParserOutput->getCacheTime() == -1 || $this->mParserOutput->containsOldMagic() ) { + if ( !$this->mParserOutput->isCacheable() || $this->mParserOutput->containsOldMagic() ) { $wgUseFileCache = false; } + $this->doCascadeProtectionUpdates( $this->mParserOutput ); + return $this->mParserOutput; } /** * Get parser options suitable for rendering the primary article wikitext + * @return mixed ParserOptions object or boolean false */ public function getParserOptions() { global $wgUser; + if ( !$this->mParserOptions ) { $this->mParserOptions = new ParserOptions( $wgUser ); $this->mParserOptions->setTidy( true ); $this->mParserOptions->enableLimitReport(); } - return $this->mParserOptions; + + // Clone to allow modifications of the return value without affecting + // the cache + return clone $this->mParserOptions; } + /** + * Updates cascading protections + * + * @param $parserOutput mixed ParserOptions object, or boolean false + **/ protected function doCascadeProtectionUpdates( $parserOutput ) { if ( !$this->isCurrent() || wfReadOnly() || !$this->mTitle->areRestrictionsCascading() ) { return; @@ -4079,9 +4481,9 @@ class Article { $res = $dbr->select( array( 'templatelinks' ), array( 'tl_namespace', 'tl_title' ), array( 'tl_from' => $id ), - __METHOD__ ); + __METHOD__ + ); - global $wgContLang; foreach ( $res as $row ) { $tlTemplates["{$row->tl_namespace}:{$row->tl_title}"] = true; } @@ -4095,7 +4497,6 @@ class Article { } # Get the diff - # Note that we simulate array_diff_key in PHP <5.0.x $templates_diff = array_diff_key( $poTemplates, $tlTemplates ); if ( count( $templates_diff ) > 0 ) { @@ -4111,7 +4512,6 @@ class Article { * * @param $added array The names of categories that were added * @param $deleted array The names of categories that were deleted - * @return null */ public function updateCategoryCounts( $added, $deleted ) { $ns = $this->mTitle->getNamespace(); @@ -4128,7 +4528,9 @@ class Article { # Okay, nothing to do return; } + $insertRows = array(); + foreach ( $insertCats as $cat ) { $insertRows[] = array( 'cat_id' => $dbw->nextSequenceValue( 'category_cat_id_seq' ), @@ -4139,6 +4541,7 @@ class Article { $addFields = array( 'cat_pages = cat_pages + 1' ); $removeFields = array( 'cat_pages = cat_pages - 1' ); + if ( $ns == NS_CATEGORY ) { $addFields[] = 'cat_subcats = cat_subcats + 1'; $removeFields[] = 'cat_subcats = cat_subcats - 1'; @@ -4155,6 +4558,7 @@ class Article { __METHOD__ ); } + if ( $deleted ) { $dbw->update( 'category', @@ -4165,21 +4569,27 @@ class Article { } } - /** Lightweight method to get the parser output for a page, checking the parser cache + /** + * Lightweight method to get the parser output for a page, checking the parser cache * and so on. Doesn't consider most of the stuff that Article::view is forced to * consider, so it's not appropriate to use there. + * + * @since 1.16 (r52326) for LiquidThreads + * + * @param $oldid mixed integer Revision ID or null */ - function getParserOutput( $oldid = null ) { - global $wgEnableParserCache, $wgUser, $wgOut; + public function getParserOutput( $oldid = null ) { + global $wgEnableParserCache, $wgUser; // Should the parser cache be used? $useParserCache = $wgEnableParserCache && - intval( $wgUser->getOption( 'stubthreshold' ) ) == 0 && - $this->exists() && - $oldid === null; + $wgUser->getStubThreshold() == 0 && + $this->exists() && + $oldid === null; wfDebug( __METHOD__ . ': using parser cache: ' . ( $useParserCache ? 'yes' : 'no' ) . "\n" ); - if ( $wgUser->getOption( 'stubthreshold' ) ) { + + if ( $wgUser->getStubThreshold() ) { wfIncrStats( 'pcache_miss_stub' ); } @@ -4197,4 +4607,66 @@ class Article { return $parserOutput; } } + + // Deprecated methods + /** + * Get the database which should be used for reads + * + * @return Database + * @deprecated - just call wfGetDB( DB_MASTER ) instead + */ + function getDB() { + wfDeprecated( __METHOD__ ); + return wfGetDB( DB_MASTER ); + } + +} + +class PoolWorkArticleView extends PoolCounterWork { + private $mArticle; + + function __construct( $article, $key, $useParserCache, $parserOptions ) { + parent::__construct( 'ArticleView', $key ); + $this->mArticle = $article; + $this->cacheable = $useParserCache; + $this->parserOptions = $parserOptions; + } + + function doWork() { + return $this->mArticle->doViewParse(); + } + + function getCachedWork() { + global $wgOut; + + $parserCache = ParserCache::singleton(); + $this->mArticle->mParserOutput = $parserCache->get( $this->mArticle, $this->parserOptions ); + + if ( $this->mArticle->mParserOutput !== false ) { + wfDebug( __METHOD__ . ": showing contents parsed by someone else\n" ); + $wgOut->addParserOutput( $this->mArticle->mParserOutput ); + # Ensure that UI elements requiring revision ID have + # the correct version information. + $wgOut->setRevisionId( $this->mArticle->getLatest() ); + return true; + } + return false; + } + + function fallback() { + return $this->mArticle->tryDirtyCache(); + } + + function error( $status ) { + global $wgOut; + + $wgOut->clearHTML(); // for release() errors + $wgOut->enableClientCache( false ); + $wgOut->setRobotPolicy( 'noindex,nofollow' ); + + $errortext = $status->getWikiText( false, 'view-pool-error' ); + $wgOut->addWikiText( '<div class="errorbox">' . $errortext . '</div>' ); + + return false; + } } diff --git a/includes/AuthPlugin.php b/includes/AuthPlugin.php index 87ac8adb..7dc99259 100644 --- a/includes/AuthPlugin.php +++ b/includes/AuthPlugin.php @@ -1,23 +1,27 @@ <?php /** + * Authentication plugin interface + * + * Copyright © 2004 Brion Vibber <brion@pobox.com> + * http://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file */ -# Copyright (C) 2004 Brion Vibber <brion@pobox.com> -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html /** * Authentication plugin interface. Instantiate a subclass of AuthPlugin @@ -105,7 +109,6 @@ class AuthPlugin { return true; } - /** * Return true if the wiki should create a new local account automatically * when asked to login a user who doesn't exist locally but does in the @@ -131,11 +134,11 @@ class AuthPlugin { * @return Boolean */ public function allowPropChange( $prop = '' ) { - if( $prop == 'realname' && is_callable( array( $this, 'allowRealNameChange' ) ) ) { + if ( $prop == 'realname' && is_callable( array( $this, 'allowRealNameChange' ) ) ) { return $this->allowRealNameChange(); - } elseif( $prop == 'emailaddress' && is_callable( array( $this, 'allowEmailChange' ) ) ) { + } elseif ( $prop == 'emailaddress' && is_callable( array( $this, 'allowEmailChange' ) ) ) { return $this->allowEmailChange(); - } elseif( $prop == 'nickname' && is_callable( array( $this, 'allowNickChange' ) ) ) { + } elseif ( $prop == 'nickname' && is_callable( array( $this, 'allowNickChange' ) ) ) { return $this->allowNickChange(); } else { return true; @@ -197,11 +200,10 @@ class AuthPlugin { * @param $realname String * @return Boolean */ - public function addUser( $user, $password, $email='', $realname='' ) { + public function addUser( $user, $password, $email = '', $realname = '' ) { return true; } - /** * Return true to prevent logins that don't authenticate here from being * checked against the local database's password fields. @@ -236,7 +238,7 @@ class AuthPlugin { * @param $user User object. * @param $autocreate Boolean: True if user is being autocreated on login */ - public function initUser( &$user, $autocreate=false ) { + public function initUser( &$user, $autocreate = false ) { # Override this to do something. } @@ -247,7 +249,7 @@ class AuthPlugin { public function getCanonicalName( $username ) { return $username; } - + /** * Get an instance of a User object * @@ -262,22 +264,22 @@ class AuthPluginUser { function __construct( $user ) { # Override this! } - + public function getId() { # Override this! return -1; } - + public function isLocked() { # Override this! return false; } - + public function isHidden() { # Override this! return false; } - + public function resetAuthToken() { # Override this! return true; diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index cecb53f9..f1605a56 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -1,10 +1,17 @@ <?php -/* This defines autoloading handler for whole MediaWiki framework */ +/** + * This defines autoloading handler for whole MediaWiki framework + * + * @file + */ -# Locations of core classes -# Extension classes are specified with $wgAutoloadClasses -# This array is a global instead of a static member of AutoLoader to work around a bug in APC +/** + * Locations of core classes + * Extension classes are specified with $wgAutoloadClasses + * This array is a global instead of a static member of AutoLoader to work around a bug in APC + */ global $wgAutoloadLocalClasses; + $wgAutoloadLocalClasses = array( # Includes 'AjaxDispatcher' => 'includes/AjaxDispatcher.php', @@ -20,6 +27,7 @@ $wgAutoloadLocalClasses = array( 'BagOStuff' => 'includes/BagOStuff.php', 'Block' => 'includes/Block.php', 'CacheDependency' => 'includes/CacheDependency.php', + 'CacheTime' => 'includes/parser/ParserOutput.php', 'Category' => 'includes/Category.php', 'Categoryfinder' => 'includes/Categoryfinder.php', 'CategoryPage' => 'includes/CategoryPage.php', @@ -35,6 +43,7 @@ $wgAutoloadLocalClasses = array( 'ChangesFeed' => 'includes/ChangesFeed.php', 'ChangeTags' => 'includes/ChangeTags.php', 'ChannelFeed' => 'includes/Feed.php', + 'Collation' => 'includes/Collation.php', 'Cookie' => 'includes/HttpFunctions.php', 'CookieJar' => 'includes/HttpFunctions.php', 'ConcatenatedGzipHistoryBlob' => 'includes/HistoryBlob.php', @@ -44,12 +53,13 @@ $wgAutoloadLocalClasses = array( 'ConstantDependency' => 'includes/CacheDependency.php', 'CreativeCommonsRdf' => 'includes/Metadata.php', 'Credits' => 'includes/Credits.php', + 'CSSJanus' => 'includes/libs/CSSJanus.php', + 'CSSMin' => 'includes/libs/CSSMin.php', 'DBABagOStuff' => 'includes/BagOStuff.php', 'DependencyWrapper' => 'includes/CacheDependency.php', 'DiffHistoryBlob' => 'includes/HistoryBlob.php', 'DjVuImage' => 'includes/DjVuImage.php', 'DoubleReplacer' => 'includes/StringUtils.php', - 'DoubleRedirectJob' => 'includes/DoubleRedirectJob.php', 'DublinCoreRdf' => 'includes/Metadata.php', 'Dump7ZipOutput' => 'includes/Export.php', 'DumpBZip2Output' => 'includes/Export.php', @@ -64,10 +74,8 @@ $wgAutoloadLocalClasses = array( 'DumpPipeOutput' => 'includes/Export.php', 'eAccelBagOStuff' => 'includes/BagOStuff.php', 'EditPage' => 'includes/EditPage.php', - 'EmaillingJob' => 'includes/EmaillingJob.php', 'EmailNotification' => 'includes/UserMailer.php', 'EnhancedChangesList' => 'includes/ChangesList.php', - 'EnotifNotifyJob' => 'includes/EnotifNotifyJob.php', 'ErrorPageError' => 'includes/Exception.php', 'Exif' => 'includes/Exif.php', 'ExplodeIterator' => 'includes/StringUtils.php', @@ -76,9 +84,6 @@ $wgAutoloadLocalClasses = array( 'ExternalStoreHttp' => 'includes/ExternalStoreHttp.php', 'ExternalStore' => 'includes/ExternalStore.php', 'ExternalUser' => 'includes/ExternalUser.php', - 'ExternalUser_Hardcoded' => 'includes/extauth/Hardcoded.php', - 'ExternalUser_MediaWiki' => 'includes/extauth/MediaWiki.php', - 'ExternalUser_vB' => 'includes/extauth/vB.php', 'FatalError' => 'includes/Exception.php', 'FakeTitle' => 'includes/FakeTitle.php', 'FakeMemCachedClient' => 'includes/ObjectCache.php', @@ -92,8 +97,6 @@ $wgAutoloadLocalClasses = array( 'ForkController' => 'includes/ForkController.php', 'FormatExif' => 'includes/Exif.php', 'FormOptions' => 'includes/FormOptions.php', - 'GIFMetadataExtractor' => 'includes/media/GIFMetadataExtractor.php', - 'GIFHandler' => 'includes/media/GIF.php', 'GlobalDependency' => 'includes/CacheDependency.php', 'HashBagOStuff' => 'includes/BagOStuff.php', 'HashtableReplacer' => 'includes/StringUtils.php', @@ -122,8 +125,8 @@ $wgAutoloadLocalClasses = array( 'HTMLRadioField' => 'includes/HTMLForm.php', 'HTMLInfoField' => 'includes/HTMLForm.php', 'Http' => 'includes/HttpFunctions.php', - 'HttpRequest' => 'includes/HttpFunctions.php', - 'IEContentAnalyzer' => 'includes/IEContentAnalyzer.php', + 'HttpRequest' => 'includes/HttpFunctions.old.php', + 'IcuCollation' => 'includes/Collation.php', 'ImageGallery' => 'includes/ImageGallery.php', 'ImageHistoryList' => 'includes/ImagePage.php', 'ImageHistoryPseudoPager' => 'includes/ImagePage.php', @@ -133,8 +136,7 @@ $wgAutoloadLocalClasses = array( 'IndexPager' => 'includes/Pager.php', 'Interwiki' => 'includes/Interwiki.php', 'IP' => 'includes/IP.php', - 'Job' => 'includes/JobQueue.php', - 'JSMin' => 'includes/JSMin.php', + 'JavaScriptMinifier' => 'includes/libs/JavaScriptMinifier.php', 'LCStore_DB' => 'includes/LocalisationCache.php', 'LCStore_CDB' => 'includes/LocalisationCache.php', 'LCStore_Null' => 'includes/LocalisationCache.php', @@ -157,18 +159,18 @@ $wgAutoloadLocalClasses = array( 'MagicWord' => 'includes/MagicWord.php', 'MailAddress' => 'includes/UserMailer.php', 'MathRenderer' => 'includes/Math.php', - 'MediaTransformError' => 'includes/MediaTransformOutput.php', - 'MediaTransformOutput' => 'includes/MediaTransformOutput.php', 'MediaWikiBagOStuff' => 'includes/BagOStuff.php', 'MediaWiki_I18N' => 'includes/SkinTemplate.php', 'MediaWiki' => 'includes/Wiki.php', 'MemCachedClientforWiki' => 'includes/memcached-client.php', + 'Message' => 'includes/Message.php', + 'MessageBlobStore' => 'includes/MessageBlobStore.php', 'MessageCache' => 'includes/MessageCache.php', 'MimeMagic' => 'includes/MimeMagic.php', 'MWException' => 'includes/Exception.php', + 'MWHttpRequest' => 'includes/HttpFunctions.php', 'MWMemcached' => 'includes/memcached-client.php', 'MWNamespace' => 'includes/Namespace.php', - 'Namespace' => 'includes/NamespaceCompat.php', // Compat 'OldChangesList' => 'includes/ChangesList.php', 'OutputPage' => 'includes/OutputPage.php', 'PageQueryPage' => 'includes/PageQueryPage.php', @@ -177,8 +179,10 @@ $wgAutoloadLocalClasses = array( 'Pager' => 'includes/Pager.php', 'PasswordError' => 'includes/User.php', 'PatrolLog' => 'includes/PatrolLog.php', + 'PhpHttpRequest' => 'includes/HttpFunctions.php', 'PoolCounter' => 'includes/PoolCounter.php', 'PoolCounter_Stub' => 'includes/PoolCounter.php', + 'PoolCounterWork' => 'includes/PoolCounter.php', 'Preferences' => 'includes/Preferences.php', 'PrefixSearch' => 'includes/PrefixSearch.php', 'Profiler' => 'includes/Profiler.php', @@ -192,13 +196,21 @@ $wgAutoloadLocalClasses = array( 'RCCacheEntry' => 'includes/ChangesList.php', 'RdfMetaData' => 'includes/Metadata.php', 'RecentChange' => 'includes/RecentChange.php', - 'RefreshLinksJob' => 'includes/RefreshLinksJob.php', - 'RefreshLinksJob2' => 'includes/RefreshLinksJob.php', 'RegexlikeReplacer' => 'includes/StringUtils.php', 'ReplacementArray' => 'includes/StringUtils.php', 'Replacer' => 'includes/StringUtils.php', + 'ResourceLoader' => 'includes/resourceloader/ResourceLoader.php', + 'ResourceLoaderContext' => 'includes/resourceloader/ResourceLoaderContext.php', + 'ResourceLoaderModule' => 'includes/resourceloader/ResourceLoaderModule.php', + 'ResourceLoaderWikiModule' => 'includes/resourceloader/ResourceLoaderWikiModule.php', + 'ResourceLoaderFileModule' => 'includes/resourceloader/ResourceLoaderFileModule.php', + 'ResourceLoaderSiteModule' => 'includes/resourceloader/ResourceLoaderSiteModule.php', + 'ResourceLoaderUserModule' => 'includes/resourceloader/ResourceLoaderUserModule.php', + 'ResourceLoaderUserOptionsModule' => 'includes/resourceloader/ResourceLoaderUserOptionsModule.php', + 'ResourceLoaderStartUpModule' => 'includes/resourceloader/ResourceLoaderStartUpModule.php', 'ReverseChronologicalPager' => 'includes/Pager.php', 'Revision' => 'includes/Revision.php', + 'RevisionDelete' => 'includes/revisiondelete/RevisionDelete.php', 'RSSFeed' => 'includes/Feed.php', 'Sanitizer' => 'includes/Sanitizer.php', 'SiteConfiguration' => 'includes/SiteConfiguration.php', @@ -218,24 +230,17 @@ $wgAutoloadLocalClasses = array( 'SquidPurgeClientPool' => 'includes/SquidPurgeClient.php', 'Status' => 'includes/Status.php', 'StubContLang' => 'includes/StubObject.php', - 'StubUser' => 'includes/StubObject.php', 'StubUserLang' => 'includes/StubObject.php', 'StubObject' => 'includes/StubObject.php', 'StringUtils' => 'includes/StringUtils.php', 'TablePager' => 'includes/Pager.php', - 'ThumbnailImage' => 'includes/MediaTransformOutput.php', - 'TiffHandler' => 'includes/media/Tiff.php', 'TitleDependency' => 'includes/CacheDependency.php', 'Title' => 'includes/Title.php', 'TitleArray' => 'includes/TitleArray.php', 'TitleArrayFromResult' => 'includes/TitleArray.php', 'TitleListDependency' => 'includes/CacheDependency.php', - 'TransformParameterError' => 'includes/MediaTransformOutput.php', 'UnlistedSpecialPage' => 'includes/SpecialPage.php', - 'UploadBase' => 'includes/upload/UploadBase.php', - 'UploadFromStash' => 'includes/upload/UploadFromStash.php', - 'UploadFromFile' => 'includes/upload/UploadFromFile.php', - 'UploadFromUrl' => 'includes/upload/UploadFromUrl.php', + 'UppercaseCollation' => 'includes/Collation.php', 'User' => 'includes/User.php', 'UserArray' => 'includes/UserArray.php', 'UserArrayFromResult' => 'includes/UserArray.php', @@ -245,6 +250,7 @@ $wgAutoloadLocalClasses = array( 'WatchedItem' => 'includes/WatchedItem.php', 'WatchlistEditor' => 'includes/WatchlistEditor.php', 'WebRequest' => 'includes/WebRequest.php', + 'WebRequestUpload' => 'includes/WebRequest.php', 'WebResponse' => 'includes/WebResponse.php', 'WikiError' => 'includes/WikiError.php', 'WikiErrorMsg' => 'includes/WikiError.php', @@ -252,9 +258,11 @@ $wgAutoloadLocalClasses = array( 'WikiMap' => 'includes/WikiMap.php', 'WikiReference' => 'includes/WikiMap.php', 'WikiXmlError' => 'includes/WikiError.php', + 'WinCacheBagOStuff' => 'includes/BagOStuff.php', 'XCacheBagOStuff' => 'includes/BagOStuff.php', 'XmlDumpWriter' => 'includes/Export.php', 'Xml' => 'includes/Xml.php', + 'XmlJsCode' => 'includes/Xml.php', 'XmlSelect' => 'includes/Xml.php', 'XmlTypeCheck' => 'includes/XmlTypeCheck.php', 'ZhClient' => 'includes/ZhClient.php', @@ -270,6 +278,7 @@ $wgAutoloadLocalClasses = array( 'ApiFeedWatchlist' => 'includes/api/ApiFeedWatchlist.php', 'ApiFormatBase' => 'includes/api/ApiFormatBase.php', 'ApiFormatDbg' => 'includes/api/ApiFormatDbg.php', + 'ApiFormatDump' => 'includes/api/ApiFormatDump.php', 'ApiFormatFeedWrapper' => 'includes/api/ApiFormatBase.php', 'ApiFormatJson' => 'includes/api/ApiFormatJson.php', 'ApiFormatPhp' => 'includes/api/ApiFormatPhp.php', @@ -292,6 +301,7 @@ $wgAutoloadLocalClasses = array( 'ApiPatrol' => 'includes/api/ApiPatrol.php', 'ApiProtect' => 'includes/api/ApiProtect.php', 'ApiPurge' => 'includes/api/ApiPurge.php', + 'ApiRsd' => 'includes/api/ApiRsd.php', 'ApiQuery' => 'includes/api/ApiQuery.php', 'ApiQueryAllCategories' => 'includes/api/ApiQueryAllCategories.php', 'ApiQueryAllimages' => 'includes/api/ApiQueryAllimages.php', @@ -310,20 +320,25 @@ $wgAutoloadLocalClasses = array( 'ApiQueryDisabled' => 'includes/api/ApiQueryDisabled.php', 'ApiQueryDuplicateFiles' => 'includes/api/ApiQueryDuplicateFiles.php', 'ApiQueryExtLinksUsage' => 'includes/api/ApiQueryExtLinksUsage.php', + 'ApiQueryFilearchive' => 'includes/api/ApiQueryFilearchive.php', 'ApiQueryExternalLinks' => 'includes/api/ApiQueryExternalLinks.php', 'ApiQueryGeneratorBase' => 'includes/api/ApiQueryBase.php', 'ApiQueryImageInfo' => 'includes/api/ApiQueryImageInfo.php', 'ApiQueryImages' => 'includes/api/ApiQueryImages.php', 'ApiQueryInfo' => 'includes/api/ApiQueryInfo.php', + 'ApiQueryIWLinks' => 'includes/api/ApiQueryIWLinks.php', + 'ApiQueryIWBacklinks' => 'includes/api/ApiQueryIWBacklinks.php', 'ApiQueryLangLinks' => 'includes/api/ApiQueryLangLinks.php', 'ApiQueryLinks' => 'includes/api/ApiQueryLinks.php', 'ApiQueryLogEvents' => 'includes/api/ApiQueryLogEvents.php', + 'ApiQueryPageProps' => 'includes/api/ApiQueryPageProps.php', 'ApiQueryProtectedTitles' => 'includes/api/ApiQueryProtectedTitles.php', 'ApiQueryRandom' => 'includes/api/ApiQueryRandom.php', - 'ApiQueryRecentChanges'=> 'includes/api/ApiQueryRecentChanges.php', + 'ApiQueryRecentChanges' => 'includes/api/ApiQueryRecentChanges.php', 'ApiQueryRevisions' => 'includes/api/ApiQueryRevisions.php', 'ApiQuerySearch' => 'includes/api/ApiQuerySearch.php', 'ApiQuerySiteinfo' => 'includes/api/ApiQuerySiteinfo.php', + 'ApiQueryStashImageInfo' => 'includes/api/ApiQueryStashImageInfo.php', 'ApiQueryTags' => 'includes/api/ApiQueryTags.php', 'ApiQueryUserInfo' => 'includes/api/ApiQueryUserInfo.php', 'ApiQueryUsers' => 'includes/api/ApiQueryUsers.php', @@ -337,9 +352,13 @@ $wgAutoloadLocalClasses = array( 'ApiUpload' => 'includes/api/ApiUpload.php', 'ApiWatch' => 'includes/api/ApiWatch.php', - 'Spyc' => 'includes/api/ApiFormatYaml_spyc.php', 'UsageException' => 'includes/api/ApiMain.php', + # includes/extauth + 'ExternalUser_Hardcoded' => 'includes/extauth/Hardcoded.php', + 'ExternalUser_MediaWiki' => 'includes/extauth/MediaWiki.php', + 'ExternalUser_vB' => 'includes/extauth/vB.php', + # includes/json 'Services_JSON' => 'includes/json/Services_JSON.php', 'Services_JSON_Error' => 'includes/json/Services_JSON.php', @@ -356,23 +375,26 @@ $wgAutoloadLocalClasses = array( 'DatabasePostgres' => 'includes/db/DatabasePostgres.php', 'DatabaseSqlite' => 'includes/db/DatabaseSqlite.php', 'DatabaseSqliteStandalone' => 'includes/db/DatabaseSqlite.php', + 'DatabaseType' => 'includes/db/Database.php', 'DBConnectionError' => 'includes/db/Database.php', 'DBError' => 'includes/db/Database.php', 'DBObject' => 'includes/db/Database.php', 'DBQueryError' => 'includes/db/Database.php', 'DBUnexpectedError' => 'includes/db/Database.php', + 'FakeResultWrapper' => 'includes/db/Database.php', + 'Field' => 'includes/db/Database.php', 'IBM_DB2Blob' => 'includes/db/DatabaseIbm_db2.php', 'LBFactory' => 'includes/db/LBFactory.php', 'LBFactory_Multi' => 'includes/db/LBFactory_Multi.php', 'LBFactory_Simple' => 'includes/db/LBFactory.php', + 'LBFactory_Single' => 'includes/db/LBFactory_Single.php', 'LikeMatch' => 'includes/db/Database.php', 'LoadBalancer' => 'includes/db/LoadBalancer.php', + 'LoadBalancer_Single' => 'includes/db/LBFactory_Single.php', 'LoadMonitor' => 'includes/db/LoadMonitor.php', 'LoadMonitor_MySQL' => 'includes/db/LoadMonitor.php', - 'MSSQLField' => 'includes/db/DatabaseMssql.php', - 'MySQLField' => 'includes/db/Database.php', + 'MySQLField' => 'includes/db/DatabaseMysql.php', 'MySQLMasterPos' => 'includes/db/DatabaseMysql.php', - 'ORABlob' => 'includes/db/DatabaseOracle.php', 'ORAField' => 'includes/db/DatabaseOracle.php', 'ORAResult' => 'includes/db/DatabaseOracle.php', 'PostgresField' => 'includes/db/DatabasePostgres.php', @@ -382,23 +404,23 @@ $wgAutoloadLocalClasses = array( 'IBM_DB2Field' => 'includes/db/DatabaseIbm_db2.php', # includes/diff - 'ArrayDiffFormatter' => 'includes/diff/DifferenceEngine.php', - '_DiffEngine' => 'includes/diff/DifferenceEngine.php', - 'DifferenceEngine' => 'includes/diff/DifferenceInterface.php', - 'DiffFormatter' => 'includes/diff/DifferenceEngine.php', - 'Diff' => 'includes/diff/DifferenceEngine.php', - '_DiffOp_Add' => 'includes/diff/DifferenceEngine.php', - '_DiffOp_Change' => 'includes/diff/DifferenceEngine.php', - '_DiffOp_Copy' => 'includes/diff/DifferenceEngine.php', - '_DiffOp_Delete' => 'includes/diff/DifferenceEngine.php', - '_DiffOp' => 'includes/diff/DifferenceEngine.php', - '_HWLDF_WordAccumulator' => 'includes/diff/DifferenceEngine.php', - 'MappedDiff' => 'includes/diff/DifferenceEngine.php', - 'RangeDifference' => 'includes/diff/Diff.php', - 'TableDiffFormatter' => 'includes/diff/DifferenceEngine.php', - 'UnifiedDiffFormatter' => 'includes/diff/DifferenceEngine.php', - 'WikiDiff3' => 'includes/diff/Diff.php', - 'WordLevelDiff' => 'includes/diff/DifferenceEngine.php', + 'ArrayDiffFormatter' => 'includes/diff/WikiDiff.php', + '_DiffEngine' => 'includes/diff/WikiDiff.php', + 'DifferenceEngine' => 'includes/diff/DifferenceEngine.php', + 'DiffFormatter' => 'includes/diff/WikiDiff.php', + 'Diff' => 'includes/diff/WikiDiff.php', + '_DiffOp_Add' => 'includes/diff/WikiDiff.php', + '_DiffOp_Change' => 'includes/diff/WikiDiff.php', + '_DiffOp_Copy' => 'includes/diff/WikiDiff.php', + '_DiffOp_Delete' => 'includes/diff/WikiDiff.php', + '_DiffOp' => 'includes/diff/WikiDiff.php', + '_HWLDF_WordAccumulator' => 'includes/diff/WikiDiff.php', + 'MappedDiff' => 'includes/diff/WikiDiff.php', + 'RangeDifference' => 'includes/diff/WikiDiff3.php', + 'TableDiffFormatter' => 'includes/diff/WikiDiff.php', + 'UnifiedDiffFormatter' => 'includes/diff/WikiDiff.php', + 'WikiDiff3' => 'includes/diff/WikiDiff3.php', + 'WordLevelDiff' => 'includes/diff/WikiDiff.php', # includes/filerepo 'ArchivedFile' => 'includes/filerepo/ArchivedFile.php', @@ -421,14 +443,59 @@ $wgAutoloadLocalClasses = array( 'RepoGroup' => 'includes/filerepo/RepoGroup.php', 'UnregisteredLocalFile' => 'includes/filerepo/UnregisteredLocalFile.php', + # includes/installer + 'CliInstaller' => 'includes/installer/CliInstaller.php', + 'Installer' => 'includes/installer/Installer.php', + 'DatabaseInstaller' => 'includes/installer/DatabaseInstaller.php', + 'DatabaseUpdater' => 'includes/installer/DatabaseUpdater.php', + 'LBFactory_InstallerFake' => 'includes/installer/Installer.php', + 'LocalSettingsGenerator' => 'includes/installer/LocalSettingsGenerator.php', + 'WebInstaller' => 'includes/installer/WebInstaller.php', + 'WebInstallerPage' => 'includes/installer/WebInstallerPage.php', + 'WebInstallerOutput' => 'includes/installer/WebInstallerOutput.php', + 'MysqlInstaller' => 'includes/installer/MysqlInstaller.php', + 'MysqlUpdater' => 'includes/installer/MysqlUpdater.php', + 'PhpXmlBugTester' => 'includes/installer/PhpBugTests.php', + 'PhpRefCallBugTester' => 'includes/installer/PhpBugTests.php', + 'PostgresInstaller' => 'includes/installer/PostgresInstaller.php', + 'PostgresUpdater' => 'includes/installer/PostgresUpdater.php', + 'SqliteInstaller' => 'includes/installer/SqliteInstaller.php', + 'SqliteUpdater' => 'includes/installer/SqliteUpdater.php', + 'OracleInstaller' => 'includes/installer/OracleInstaller.php', + 'OracleUpdater' => 'includes/installer/OracleUpdater.php', + + # includes/job + 'DoubleRedirectJob' => 'includes/job/DoubleRedirectJob.php', + 'EmaillingJob' => 'includes/job/EmaillingJob.php', + 'EnotifNotifyJob' => 'includes/job/EnotifNotifyJob.php', + 'Job' => 'includes/job/JobQueue.php', + 'RefreshLinksJob' => 'includes/job/RefreshLinksJob.php', + 'RefreshLinksJob2' => 'includes/job/RefreshLinksJob.php', + 'UploadFromUrlJob' => 'includes/job/UploadFromUrlJob.php', + + # includes/libs + 'IEContentAnalyzer' => 'includes/libs/IEContentAnalyzer.php', + 'IEUrlExtension' => 'includes/libs/IEUrlExtension.php', + 'Spyc' => 'includes/libs/spyc.php', + # includes/media 'BitmapHandler' => 'includes/media/Bitmap.php', 'BitmapHandler_ClientOnly' => 'includes/media/Bitmap_ClientOnly.php', 'BmpHandler' => 'includes/media/BMP.php', 'DjVuHandler' => 'includes/media/DjVu.php', + 'GIFHandler' => 'includes/media/GIF.php', + 'GIFMetadataExtractor' => 'includes/media/GIFMetadataExtractor.php', 'ImageHandler' => 'includes/media/Generic.php', 'MediaHandler' => 'includes/media/Generic.php', + 'MediaTransformError' => 'includes/media/MediaTransformOutput.php', + 'MediaTransformOutput' => 'includes/media/MediaTransformOutput.php', + 'PNGHandler' => 'includes/media/PNG.php', + 'PNGMetadataExtractor' => 'includes/media/PNGMetadataExtractor.php', 'SvgHandler' => 'includes/media/SVG.php', + 'SVGMetadataExtractor' => 'includes/media/SVGMetadataExtractor.php', + 'ThumbnailImage' => 'includes/media/MediaTransformOutput.php', + 'TiffHandler' => 'includes/media/Tiff.php', + 'TransformParameterError' => 'includes/media/MediaTransformOutput.php', # includes/normal 'UtfNormal' => 'includes/normal/UtfNormal.php', @@ -481,7 +548,7 @@ $wgAutoloadLocalClasses = array( 'SearchEngine' => 'includes/search/SearchEngine.php', 'SearchHighlighter' => 'includes/search/SearchEngine.php', 'SearchIBM_DB2' => 'includes/search/SearchIBM_DB2.php', - 'SearchMySQL4' => 'includes/search/SearchMySQL4.php', + 'SearchMssql' => 'includes/search/SearchMssql.php', 'SearchMySQL' => 'includes/search/SearchMySQL.php', 'SearchOracle' => 'includes/search/SearchOracle.php', 'SearchPostgres' => 'includes/search/SearchPostgres.php', @@ -510,8 +577,7 @@ $wgAutoloadLocalClasses = array( 'DoubleRedirectsPage' => 'includes/specials/SpecialDoubleRedirects.php', 'EmailConfirmation' => 'includes/specials/SpecialConfirmemail.php', 'EmailInvalidation' => 'includes/specials/SpecialConfirmemail.php', - 'EmailUserForm' => 'includes/specials/SpecialEmailuser.php', - 'FakeResultWrapper' => 'includes/specials/SpecialAllmessages.php', + 'SpecialEmailUser' => 'includes/specials/SpecialEmailuser.php', 'FewestrevisionsPage' => 'includes/specials/SpecialFewestrevisions.php', 'FileDuplicateSearchPage' => 'includes/specials/SpecialFileDuplicateSearch.php', 'IPBlockForm' => 'includes/specials/SpecialBlockip.php', @@ -541,35 +607,50 @@ $wgAutoloadLocalClasses = array( 'PreferencesForm' => 'includes/Preferences.php', 'RandomPage' => 'includes/specials/SpecialRandompage.php', 'SpecialRevisionDelete' => 'includes/specials/SpecialRevisiondelete.php', - 'RevisionDeleter' => 'includes/specials/SpecialRevisiondelete.php', - 'RevDel_RevisionList' => 'includes/specials/SpecialRevisiondelete.php', - 'RevDel_RevisionItem' => 'includes/specials/SpecialRevisiondelete.php', - 'RevDel_ArchiveList' => 'includes/specials/SpecialRevisiondelete.php', - 'RevDel_ArchiveItem' => 'includes/specials/SpecialRevisiondelete.php', - 'RevDel_FileList' => 'includes/specials/SpecialRevisiondelete.php', - 'RevDel_FileItem' => 'includes/specials/SpecialRevisiondelete.php', - 'RevDel_ArchivedFileList' => 'includes/specials/SpecialRevisiondelete.php', - 'RevDel_ArchivedFileItem' => 'includes/specials/SpecialRevisiondelete.php', - 'RevDel_LogList' => 'includes/specials/SpecialRevisiondelete.php', - 'RevDel_LogItem' => 'includes/specials/SpecialRevisiondelete.php', + 'RevisionDeleter' => 'includes/revisiondelete/RevisionDeleter.php', + 'RevDel_List' => 'includes/revisiondelete/RevisionDeleteAbstracts.php', + 'RevDel_Item' => 'includes/revisiondelete/RevisionDeleteAbstracts.php', + 'RevDel_RevisionList' => 'includes/revisiondelete/RevisionDelete.php', + 'RevDel_RevisionItem' => 'includes/revisiondelete/RevisionDelete.php', + 'RevDel_ArchiveList' => 'includes/revisiondelete/RevisionDelete.php', + 'RevDel_ArchiveItem' => 'includes/revisiondelete/RevisionDelete.php', + 'RevDel_FileList' => 'includes/revisiondelete/RevisionDelete.php', + 'RevDel_FileItem' => 'includes/revisiondelete/RevisionDelete.php', + 'RevDel_ArchivedFileList' => 'includes/revisiondelete/RevisionDelete.php', + 'RevDel_ArchivedFileItem' => 'includes/revisiondelete/RevisionDelete.php', + 'RevDel_LogList' => 'includes/revisiondelete/RevisionDelete.php', + 'RevDel_LogItem' => 'includes/revisiondelete/RevisionDelete.php', 'ShortPagesPage' => 'includes/specials/SpecialShortpages.php', 'SpecialActiveUsers' => 'includes/specials/SpecialActiveusers.php', 'SpecialAllpages' => 'includes/specials/SpecialAllpages.php', 'SpecialBlankpage' => 'includes/specials/SpecialBlankpage.php', + 'SpecialBlockme' => 'includes/specials/SpecialBlockme.php', 'SpecialBookSources' => 'includes/specials/SpecialBooksources.php', + 'SpecialCategories' => 'includes/specials/SpecialCategories.php', + 'SpecialComparePages' => 'includes/specials/SpecialComparePages.php', 'SpecialExport' => 'includes/specials/SpecialExport.php', + 'SpecialFilepath' => 'includes/specials/SpecialFilepath.php', 'SpecialImport' => 'includes/specials/SpecialImport.php', 'SpecialListGroupRights' => 'includes/specials/SpecialListgrouprights.php', + 'SpecialLockdb' => 'includes/specials/SpecialLockdb.php', + 'SpecialLog' => 'includes/specials/SpecialLog.php', + 'SpecialMergeHistory' => 'includes/specials/SpecialMergeHistory.php', 'SpecialMostlinkedtemplates' => 'includes/specials/SpecialMostlinkedtemplates.php', 'SpecialPreferences' => 'includes/specials/SpecialPreferences.php', 'SpecialPrefixindex' => 'includes/specials/SpecialPrefixindex.php', + 'SpecialProtectedpages' => 'includes/specials/SpecialProtectedpages.php', + 'SpecialProtectedtitles' => 'includes/specials/SpecialProtectedtitles.php', 'SpecialRandomredirect' => 'includes/specials/SpecialRandomredirect.php', 'SpecialRecentChanges' => 'includes/specials/SpecialRecentchanges.php', 'SpecialRecentchangeslinked' => 'includes/specials/SpecialRecentchangeslinked.php', 'SpecialSearch' => 'includes/specials/SpecialSearch.php', + 'SpecialUploadStash' => 'includes/specials/SpecialUploadStash.php', + 'SpecialSpecialpages' => 'includes/specials/SpecialSpecialpages.php', 'SpecialStatistics' => 'includes/specials/SpecialStatistics.php', 'SpecialTags' => 'includes/specials/SpecialTags.php', + 'SpecialUnlockdb' => 'includes/specials/SpecialUnlockdb.php', 'SpecialUpload' => 'includes/specials/SpecialUpload.php', + 'SpecialUserlogout' => 'includes/specials/SpecialUserlogout.php', 'SpecialVersion' => 'includes/specials/SpecialVersion.php', 'SpecialWhatlinkshere' => 'includes/specials/SpecialWhatlinkshere.php', 'SpecialWhatLinksHere' => 'includes/specials/SpecialWhatlinkshere.php', @@ -598,18 +679,66 @@ $wgAutoloadLocalClasses = array( 'UsercreateTemplate' => 'includes/templates/Userlogin.php', 'UserloginTemplate' => 'includes/templates/Userlogin.php', + # includes/upload + 'UploadBase' => 'includes/upload/UploadBase.php', + 'UploadFromStash' => 'includes/upload/UploadFromStash.php', + 'UploadFromFile' => 'includes/upload/UploadFromFile.php', + 'UploadFromUrl' => 'includes/upload/UploadFromUrl.php', + 'UploadStash' => 'includes/upload/UploadStash.php', + 'UploadStashFile' => 'includes/upload/UploadStash.php', + 'UploadStashNotAvailableException' => 'includes/upload/UploadStash.php', + 'UploadStashFileNotFoundException' => 'includes/upload/UploadStash.php', + 'UploadStashBadPathException' => 'includes/upload/UploadStash.php', + 'UploadStashBadVersionException' => 'includes/upload/UploadStash.php', + 'UploadStashFileException' => 'includes/upload/UploadStash.php', + 'UploadStashZeroLengthFileException' => 'includes/upload/UploadStash.php', + # languages 'Language' => 'languages/Language.php', 'FakeConverter' => 'languages/Language.php', 'LanguageConverter' => 'languages/LanguageConverter.php', + # maintenance + 'AnsiTermColorer' => 'maintenance/tests/testHelpers.inc', + 'ConvertLinks' => 'maintenance/convertLinks.php', + 'DbTestPreviewer' => 'maintenance/tests/testHelpers.inc', + 'DbTestRecorder' => 'maintenance/tests/testHelpers.inc', + 'DeleteArchivedFilesImplementation' => 'maintenance/deleteArchivedFiles.inc', + 'DeleteArchivedRevisionsImplementation' => 'maintenance/deleteArchivedRevisions.inc', + 'DeleteDefaultMessages' => 'maintenance/deleteDefaultMessages.php', + 'DummyTermColorer' => 'maintenance/tests/testHelpers.inc', + 'ParserTest' => 'maintenance/tests/parser/parserTest.inc', + 'ParserTestParserHook' => 'maintenance/tests/parser/parserTestsParserHook.php', + 'ParserTestStaticParserHook' => 'maintenance/tests/parser/parserTestsStaticParserHook.php', + 'PopulateCategory' => 'maintenance/populateCategory.php', + 'PopulateLogSearch' => 'maintenance/populateLogSearch.php', + 'PopulateLogUsertext' => 'maintenance/populateLogUsertext.php', + 'PopulateParentId' => 'maintenance/populateParentId.php', + 'PopulateRevisionLength' => 'maintenance/populateRevisionLength.php', + 'RemoteTestRecorder' => 'maintenance/tests/testHelpers.inc', + 'SevenZipStream' => 'maintenance/7zip.inc', + 'Sqlite' => 'maintenance/sqlite.inc', + 'TestFileIterator' => 'maintenance/tests/testHelpers.inc', + 'TestRecorder' => 'maintenance/tests/testHelpers.inc', + 'UpdateCollation' => 'maintenance/updateCollation.php', + 'UpdateRestrictions' => 'maintenance/updateRestrictions.php', + 'UserDupes' => 'maintenance/userDupes.inc', + + # maintenance/tests/selenium + 'Selenium' => 'maintenance/tests/selenium/Selenium.php', + 'SeleniumLoader' => 'maintenance/tests/selenium/SeleniumLoader.php', + 'SeleniumTestCase' => 'maintenance/tests/selenium/SeleniumTestCase.php', + 'SeleniumTestConsoleLogger' => 'maintenance/tests/selenium/SeleniumTestConsoleLogger.php', + 'SeleniumTestHTMLLogger' => 'maintenance/tests/selenium/SeleniumTestHTMLLogger.php', + 'SeleniumTestListener' => 'maintenance/tests/selenium/SeleniumTestListener.php', + 'SeleniumTestSuite' => 'maintenance/tests/selenium/SeleniumTestSuite.php', + 'SeleniumConfig' => 'maintenance/tests/selenium/SeleniumConfig.php', + # maintenance/language + 'csvStatsOutput' => 'maintenance/language/StatOutputs.php', 'statsOutput' => 'maintenance/language/StatOutputs.php', - 'wikiStatsOutput' => 'maintenance/language/StatOutputs.php', 'textStatsOutput' => 'maintenance/language/StatOutputs.php', - 'csvStatsOutput' => 'maintenance/language/StatOutputs.php', - 'SevenZipStream' => 'maintenance/7zip.inc', - + 'wikiStatsOutput' => 'maintenance/language/StatOutputs.php', ); class AutoLoader { @@ -633,14 +762,18 @@ class AutoLoader { # The case can sometimes be wrong when unserializing PHP 4 objects $filename = false; $lowerClass = strtolower( $className ); + foreach ( $wgAutoloadLocalClasses as $class2 => $file2 ) { if ( strtolower( $class2 ) == $lowerClass ) { $filename = $file2; } } + if ( !$filename ) { - if( function_exists( 'wfDebug' ) ) + if ( function_exists( 'wfDebug' ) ) { wfDebug( "Class {$className} not found; skipped loading\n" ); + } + # Give up return false; } @@ -651,15 +784,17 @@ class AutoLoader { global $IP; $filename = "$IP/$filename"; } + require( $filename ); + return true; } static function loadAllExtensions() { global $wgAutoloadClasses; - foreach( $wgAutoloadClasses as $class => $file ) { - if( !( class_exists( $class, false ) || interface_exists( $class, false ) ) ) { + foreach ( $wgAutoloadClasses as $class => $file ) { + if ( !( class_exists( $class, false ) || interface_exists( $class, false ) ) ) { require( $file ); } } @@ -677,10 +812,6 @@ class AutoLoader { } } -function wfLoadAllExtensions() { - AutoLoader::loadAllExtensions(); -} - if ( function_exists( 'spl_autoload_register' ) ) { spl_autoload_register( array( 'AutoLoader', 'autoload' ) ); } else { diff --git a/includes/Autopromote.php b/includes/Autopromote.php index c0adff43..b4d89b24 100644 --- a/includes/Autopromote.php +++ b/includes/Autopromote.php @@ -3,6 +3,7 @@ * This class checks if user can get extra rights * because of conditions specified in $wgAutopromote */ + class Autopromote { /** * Get the groups for the given user based on $wgAutopromote. @@ -12,10 +13,13 @@ class Autopromote { */ public static function getAutopromoteGroups( User $user ) { global $wgAutopromote; + $promote = array(); - foreach( $wgAutopromote as $group => $cond ) { - if( self::recCheckCondition( $cond, $user ) ) + + foreach ( $wgAutopromote as $group => $cond ) { + if ( self::recCheckCondition( $cond, $user ) ) { $promote[] = $group; + } } wfRunHooks( 'GetAutoPromoteGroups', array( $user, &$promote ) ); @@ -41,38 +45,52 @@ class Autopromote { */ private static function recCheckCondition( $cond, User $user ) { $validOps = array( '&', '|', '^', '!' ); - if( is_array( $cond ) && count( $cond ) >= 2 && in_array( $cond[0], $validOps ) ) { + + if ( is_array( $cond ) && count( $cond ) >= 2 && in_array( $cond[0], $validOps ) ) { # Recursive condition - if( $cond[0] == '&' ) { - foreach( array_slice( $cond, 1 ) as $subcond ) - if( !self::recCheckCondition( $subcond, $user ) ) + if ( $cond[0] == '&' ) { + foreach ( array_slice( $cond, 1 ) as $subcond ) { + if ( !self::recCheckCondition( $subcond, $user ) ) { return false; + } + } + return true; - } elseif( $cond[0] == '|' ) { - foreach( array_slice( $cond, 1 ) as $subcond ) - if( self::recCheckCondition( $subcond, $user ) ) + } elseif ( $cond[0] == '|' ) { + foreach ( array_slice( $cond, 1 ) as $subcond ) { + if ( self::recCheckCondition( $subcond, $user ) ) { return true; + } + } + return false; - } elseif( $cond[0] == '^' ) { + } elseif ( $cond[0] == '^' ) { $res = null; - foreach( array_slice( $cond, 1 ) as $subcond ) { - if( is_null( $res ) ) + foreach ( array_slice( $cond, 1 ) as $subcond ) { + if ( is_null( $res ) ) { $res = self::recCheckCondition( $subcond, $user ); - else - $res = ($res xor self::recCheckCondition( $subcond, $user )); + } else { + $res = ( $res xor self::recCheckCondition( $subcond, $user ) ); + } } + return $res; - } elseif ( $cond[0] = '!' ) { - foreach( array_slice( $cond, 1 ) as $subcond ) - if( self::recCheckCondition( $subcond, $user ) ) + } elseif ( $cond[0] == '!' ) { + foreach ( array_slice( $cond, 1 ) as $subcond ) { + if ( self::recCheckCondition( $subcond, $user ) ) { return false; + } + } + return true; } } # If we got here, the array presumably does not contain other condi- # tions; it's not recursive. Pass it off to self::checkCondition. - if( !is_array( $cond ) ) + if ( !is_array( $cond ) ) { $cond = array( $cond ); + } + return self::checkCondition( $cond, $user ); } @@ -87,13 +105,15 @@ class Autopromote { * @return bool Whether the condition is true for the user */ private static function checkCondition( $cond, User $user ) { - if( count( $cond ) < 1 ) + global $wgEmailAuthentication; + if ( count( $cond ) < 1 ) { return false; + } + switch( $cond[0] ) { case APCOND_EMAILCONFIRMED: - if( User::isValidEmailAddr( $user->getEmail() ) ) { - global $wgEmailAuthentication; - if( $wgEmailAuthentication ) { + if ( User::isValidEmailAddr( $user->getEmail() ) ) { + if ( $wgEmailAuthentication ) { return (bool)$user->getEmailAuthenticationTimestamp(); } else { return true; @@ -120,10 +140,11 @@ class Autopromote { default: $result = null; wfRunHooks( 'AutopromoteCondition', array( $cond[0], array_slice( $cond, 1 ), $user, &$result ) ); - if( $result === null ) { + if ( $result === null ) { throw new MWException( "Unrecognized condition {$cond[0]} for autopromotion!" ); } - return $result ? true : false; + + return (bool)$result; } } } diff --git a/includes/BacklinkCache.php b/includes/BacklinkCache.php index 53f92dd9..02b0f170 100644 --- a/includes/BacklinkCache.php +++ b/includes/BacklinkCache.php @@ -21,6 +21,14 @@ class BacklinkCache { $this->title = $title; } + /** + * Serialization handler, diasallows to serialize the database to prevent + * failures after this class is deserialized from cache with dead DB connection. + */ + function __sleep() { + return array( 'partitionCache', 'fullResultCache', 'title' ); + } + /** * Clear locally stored data */ @@ -41,6 +49,7 @@ class BacklinkCache { if ( !isset( $this->db ) ) { $this->db = wfGetDB( DB_SLAVE ); } + return $this->db; } @@ -60,14 +69,17 @@ class BacklinkCache { // Partial range, not cached wfDebug( __METHOD__ . ": from DB (uncacheable range)\n" ); $conds = $this->getConditions( $table ); + // Use the from field in the condition rather than the joined page_id, // because databases are stupid and don't necessarily propagate indexes. if ( $startId ) { $conds[] = "$fromField >= " . intval( $startId ); } + if ( $endId ) { $conds[] = "$fromField <= " . intval( $endId ); } + $res = $this->getDB()->select( array( $table, 'page' ), array( 'page_namespace', 'page_title', 'page_id' ), @@ -78,6 +90,7 @@ class BacklinkCache { 'ORDER BY' => $fromField ) ); $ta = TitleArray::newFromResult( $res ); + wfProfileOut( __METHOD__ ); return $ta; } @@ -95,7 +108,9 @@ class BacklinkCache { ) ); $this->fullResultCache[$table] = $res; } + $ta = TitleArray::newFromResult( $this->fullResultCache[$table] ); + wfProfileOut( __METHOD__ ); return $ta; } @@ -150,6 +165,7 @@ class BacklinkCache { default: throw new MWException( "Invalid table \"$table\" in " . __CLASS__ ); } + return $conds; } @@ -167,6 +183,7 @@ class BacklinkCache { } $titleArray = $this->getLinks( $table ); + return $titleArray->count(); } @@ -193,29 +210,35 @@ class BacklinkCache { if ( isset( $this->fullResultCache[$table] ) ) { $cacheEntry = $this->partitionResult( $this->fullResultCache[$table], $batchSize ); wfDebug( __METHOD__ . ": got from full result cache\n" ); + return $cacheEntry['batches']; } // Try memcached global $wgMemc; + $memcKey = wfMemcKey( 'backlinks', md5( $this->title->getPrefixedDBkey() ), $table, $batchSize ); + $memcValue = $wgMemc->get( $memcKey ); if ( is_array( $memcValue ) ) { $cacheEntry = $memcValue; wfDebug( __METHOD__ . ": got from memcached $memcKey\n" ); + return $cacheEntry['batches']; } + // Fetch from database $this->getLinks( $table ); $cacheEntry = $this->partitionResult( $this->fullResultCache[$table], $batchSize ); // Save to memcached $wgMemc->set( $memcKey, $cacheEntry, self::CACHE_EXPIRY ); + wfDebug( __METHOD__ . ": got from database\n" ); return $cacheEntry['batches']; } @@ -254,6 +277,7 @@ class BacklinkCache { $batches[] = array( $start, $end ); } + return array( 'numRows' => $numRows, 'batches' => $batches ); } } diff --git a/includes/BagOStuff.php b/includes/BagOStuff.php index ac0263d8..63c96de7 100644 --- a/includes/BagOStuff.php +++ b/includes/BagOStuff.php @@ -1,30 +1,33 @@ <?php -# -# Copyright (C) 2003-2004 Brion Vibber <brion@pobox.com> -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - /** - * @defgroup Cache Cache + * Classes to cache objects in PHP accelerators, SQL database or DBA files + * + * Copyright © 2003-2004 Brion Vibber <brion@pobox.com> + * http://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html * * @file * @ingroup Cache */ +/** + * @defgroup Cache Cache + */ + /** * interface is intended to be more or less compatible with * the PHP memcached client. @@ -102,8 +105,9 @@ abstract class BagOStuff { } public function add( $key, $value, $exptime = 0 ) { - if ( $this->get( $key ) == false ) { + if ( !$this->get( $key ) ) { $this->set( $key, $value, $exptime ); + return true; } } @@ -126,18 +130,24 @@ abstract class BagOStuff { } } + /** + * @param $key String: Key to increase + * @param $value Integer: Value to add to $key (Default 1) + * @return null if lock is not possible else $key value increased by $value + */ public function incr( $key, $value = 1 ) { if ( !$this->lock( $key ) ) { - return false; + return null; } + $value = intval( $value ); - $n = false; if ( ( $n = $this->get( $key ) ) !== false ) { $n += $value; $this->set( $key, $n ); // exptime? } $this->unlock( $key ); + return $n; } @@ -146,15 +156,16 @@ abstract class BagOStuff { } public function debug( $text ) { - if ( $this->debugMode ) + if ( $this->debugMode ) { wfDebug( "BagOStuff debug: $text\n" ); + } } /** * Convert an optionally relative time to an absolute time */ protected function convertExpiry( $exptime ) { - if ( ( $exptime != 0 ) && ( $exptime < 3600 * 24 * 30 ) ) { + if ( ( $exptime != 0 ) && ( $exptime < 86400 * 3650 /* 10 years */ ) ) { return time() + $exptime; } else { return $exptime; @@ -178,10 +189,13 @@ class HashBagOStuff extends BagOStuff { protected function expire( $key ) { $et = $this->bag[$key][1]; + if ( ( $et == 0 ) || ( $et > time() ) ) { return false; } + $this->delete( $key ); + return true; } @@ -189,9 +203,11 @@ class HashBagOStuff extends BagOStuff { if ( !isset( $this->bag[$key] ) ) { return false; } + if ( $this->expire( $key ) ) { return false; } + return $this->bag[$key][0]; } @@ -203,7 +219,9 @@ class HashBagOStuff extends BagOStuff { if ( !isset( $this->bag[$key] ) ) { return false; } + unset( $this->bag[$key] ); + return true; } @@ -223,6 +241,7 @@ class SqlBagOStuff extends BagOStuff { protected function getDB() { global $wgDBtype; + if ( !isset( $this->db ) ) { /* We must keep a separate connection to MySQL in order to avoid deadlocks * However, SQLite has an opposite behaviour. @@ -236,6 +255,7 @@ class SqlBagOStuff extends BagOStuff { $this->db->clearFlag( DBO_TRX ); } } + return $this->db; } @@ -245,12 +265,14 @@ class SqlBagOStuff extends BagOStuff { $db = $this->getDB(); $row = $db->selectRow( 'objectcache', array( 'value', 'exptime' ), array( 'keyname' => $key ), __METHOD__ ); + if ( !$row ) { $this->debug( 'get: no matching rows' ); return false; } $this->debug( "get: retrieved data; expiry time is " . $row->exptime ); + if ( $this->isExpired( $row->exptime ) ) { $this->debug( "get: key has expired, deleting" ); try { @@ -266,26 +288,35 @@ class SqlBagOStuff extends BagOStuff { } catch ( DBQueryError $e ) { $this->handleWriteError( $e ); } + return false; } + return $this->unserialize( $db->decodeBlob( $row->value ) ); } public function set( $key, $value, $exptime = 0 ) { $db = $this->getDB(); $exptime = intval( $exptime ); - if ( $exptime < 0 ) $exptime = 0; + + if ( $exptime < 0 ) { + $exptime = 0; + } + if ( $exptime == 0 ) { $encExpiry = $this->getMaxDateTime(); } else { - if ( $exptime < 3.16e8 ) # ~10 years + if ( $exptime < 3.16e8 ) { # ~10 years $exptime += time(); + } + $encExpiry = $db->timestamp( $exptime ); } try { $db->begin(); - $db->delete( 'objectcache', array( 'keyname' => $key ), __METHOD__ ); - $db->insert( 'objectcache', + // (bug 24425) use a replace if the db supports it instead of + // delete/insert to avoid clashes with conflicting keynames + $db->replace( 'objectcache', array( 'keyname' ), array( 'keyname' => $key, 'value' => $db->encodeBlob( $this->serialize( $value ) ), @@ -294,21 +325,26 @@ class SqlBagOStuff extends BagOStuff { $db->commit(); } catch ( DBQueryError $e ) { $this->handleWriteError( $e ); + return false; } + return true; } public function delete( $key, $time = 0 ) { $db = $this->getDB(); + try { $db->begin(); $db->delete( 'objectcache', array( 'keyname' => $key ), __METHOD__ ); $db->commit(); } catch ( DBQueryError $e ) { $this->handleWriteError( $e ); + return false; } + return true; } @@ -323,13 +359,15 @@ class SqlBagOStuff extends BagOStuff { if ( $row === false ) { // Missing $db->commit(); - return false; + + return null; } $db->delete( 'objectcache', array( 'keyname' => $key ), __METHOD__ ); if ( $this->isExpired( $row->exptime ) ) { // Expired, do not reinsert $db->commit(); - return false; + + return null; } $oldValue = intval( $this->unserialize( $db->decodeBlob( $row->value ) ) ); @@ -339,12 +377,19 @@ class SqlBagOStuff extends BagOStuff { 'keyname' => $key, 'value' => $db->encodeBlob( $this->serialize( $newValue ) ), 'exptime' => $row->exptime - ), __METHOD__ ); + ), __METHOD__, 'IGNORE' ); + + if ( $db->affectedRows() == 0 ) { + // Race condition. See bug 28611 + $newValue = null; + } $db->commit(); } catch ( DBQueryError $e ) { $this->handleWriteError( $e ); - return false; + + return null; } + return $newValue; } @@ -352,9 +397,11 @@ class SqlBagOStuff extends BagOStuff { $db = $this->getDB(); $res = $db->select( 'objectcache', array( 'keyname' ), false, __METHOD__ ); $result = array(); + foreach ( $res as $row ) { $result[] = $row->keyname; } + return $result; } @@ -385,6 +432,7 @@ class SqlBagOStuff extends BagOStuff { public function expireAll() { $db = $this->getDB(); $now = $db->timestamp(); + try { $db->begin(); $db->delete( 'objectcache', array( 'exptime < ' . $db->addQuotes( $now ) ), __METHOD__ ); @@ -396,6 +444,7 @@ class SqlBagOStuff extends BagOStuff { public function deleteAll() { $db = $this->getDB(); + try { $db->begin(); $db->delete( 'objectcache', '*', __METHOD__ ); @@ -415,6 +464,7 @@ class SqlBagOStuff extends BagOStuff { */ protected function serialize( &$data ) { $serial = serialize( $data ); + if ( function_exists( 'gzdeflate' ) ) { return gzdeflate( $serial ); } else { @@ -430,11 +480,14 @@ class SqlBagOStuff extends BagOStuff { protected function unserialize( $serial ) { if ( function_exists( 'gzinflate' ) ) { $decomp = @gzinflate( $serial ); + if ( false !== $decomp ) { $serial = $decomp; } } + $ret = unserialize( $serial ); + return $ret; } @@ -444,13 +497,16 @@ class SqlBagOStuff extends BagOStuff { */ protected function handleWriteError( $exception ) { $db = $this->getDB(); + if ( !$db->wasReadOnlyError() ) { throw $exception; } + try { $db->rollback(); } catch ( DBQueryError $e ) { } + wfDebug( __METHOD__ . ": ignoring query error\n" ); $db->ignoreErrors( false ); } @@ -469,19 +525,23 @@ class MediaWikiBagOStuff extends SqlBagOStuff { } class APCBagOStuff extends BagOStuff { public function get( $key ) { $val = apc_fetch( $key ); + if ( is_string( $val ) ) { $val = unserialize( $val ); } + return $val; } public function set( $key, $value, $exptime = 0 ) { apc_store( $key, serialize( $value ), $exptime ); + return true; } public function delete( $key, $time = 0 ) { apc_delete( $key ); + return true; } @@ -489,9 +549,11 @@ class APCBagOStuff extends BagOStuff { $info = apc_cache_info( 'user' ); $list = $info['cache_list']; $keys = array(); + foreach ( $list as $entry ) { $keys[] = $entry['info']; } + return $keys; } } @@ -507,29 +569,35 @@ class APCBagOStuff extends BagOStuff { class eAccelBagOStuff extends BagOStuff { public function get( $key ) { $val = eaccelerator_get( $key ); + if ( is_string( $val ) ) { $val = unserialize( $val ); } + return $val; } public function set( $key, $value, $exptime = 0 ) { eaccelerator_put( $key, serialize( $value ), $exptime ); + return true; } public function delete( $key, $time = 0 ) { eaccelerator_rm( $key ); + return true; } public function lock( $key, $waitTimeout = 0 ) { eaccelerator_lock( $key ); + return true; } public function unlock( $key ) { eaccelerator_unlock( $key ); + return true; } } @@ -541,7 +609,6 @@ class eAccelBagOStuff extends BagOStuff { * @ingroup Cache */ class XCacheBagOStuff extends BagOStuff { - /** * Get a value from the XCache object cache * @@ -550,8 +617,11 @@ class XCacheBagOStuff extends BagOStuff { */ public function get( $key ) { $val = xcache_get( $key ); - if ( is_string( $val ) ) + + if ( is_string( $val ) ) { $val = unserialize( $val ); + } + return $val; } @@ -565,6 +635,7 @@ class XCacheBagOStuff extends BagOStuff { */ public function set( $key, $value, $expire = 0 ) { xcache_set( $key, serialize( $value ), $expire ); + return true; } @@ -577,6 +648,7 @@ class XCacheBagOStuff extends BagOStuff { */ public function delete( $key, $time = 0 ) { xcache_unset( $key ); + return true; } } @@ -594,10 +666,12 @@ class DBABagOStuff extends BagOStuff { public function __construct( $dir = false ) { global $wgDBAhandler; + if ( $dir === false ) { global $wgTmpDirectory; $dir = $wgTmpDirectory; } + $this->mFile = "$dir/mw-cache-" . wfWikiID(); $this->mFile .= '.db'; wfDebug( __CLASS__ . ": using cache file {$this->mFile}\n" ); @@ -610,6 +684,7 @@ class DBABagOStuff extends BagOStuff { function encode( $value, $expiry ) { # Convert to absolute time $expiry = $this->convertExpiry( $expiry ); + return sprintf( '%010u', intval( $expiry ) ) . ' ' . serialize( $value ); } @@ -633,29 +708,37 @@ class DBABagOStuff extends BagOStuff { } else { $handle = $this->getWriter(); } + if ( !$handle ) { wfDebug( "Unable to open DBA cache file {$this->mFile}\n" ); } + return $handle; } function getWriter() { $handle = dba_open( $this->mFile, 'cl', $this->mHandler ); + if ( !$handle ) { wfDebug( "Unable to open DBA cache file {$this->mFile}\n" ); } + return $handle; } function get( $key ) { wfProfileIn( __METHOD__ ); wfDebug( __METHOD__ . "($key)\n" ); + $handle = $this->getReader(); if ( !$handle ) { + wfProfileOut( __METHOD__ ); return null; } + $val = dba_fetch( $key, $handle ); list( $val, $expiry ) = $this->decode( $val ); + # Must close ASAP because locks are held dba_close( $handle ); @@ -667,6 +750,7 @@ class DBABagOStuff extends BagOStuff { wfDebug( __METHOD__ . ": $key expired\n" ); $val = null; } + wfProfileOut( __METHOD__ ); return $val; } @@ -674,13 +758,18 @@ class DBABagOStuff extends BagOStuff { function set( $key, $value, $exptime = 0 ) { wfProfileIn( __METHOD__ ); wfDebug( __METHOD__ . "($key)\n" ); + $blob = $this->encode( $value, $exptime ); + $handle = $this->getWriter(); if ( !$handle ) { + wfProfileOut( __METHOD__ ); return false; } + $ret = dba_replace( $key, $blob, $handle ); dba_close( $handle ); + wfProfileOut( __METHOD__ ); return $ret; } @@ -688,27 +777,38 @@ class DBABagOStuff extends BagOStuff { function delete( $key, $time = 0 ) { wfProfileIn( __METHOD__ ); wfDebug( __METHOD__ . "($key)\n" ); + $handle = $this->getWriter(); if ( !$handle ) { + wfProfileOut( __METHOD__ ); return false; } + $ret = dba_delete( $key, $handle ); dba_close( $handle ); + wfProfileOut( __METHOD__ ); return $ret; } function add( $key, $value, $exptime = 0 ) { wfProfileIn( __METHOD__ ); + $blob = $this->encode( $value, $exptime ); + $handle = $this->getWriter(); + if ( !$handle ) { + wfProfileOut( __METHOD__ ); return false; } + $ret = dba_insert( $key, $blob, $handle ); + # Insert failed, check to see if it failed due to an expired key if ( !$ret ) { list( $value, $expiry ) = $this->decode( dba_fetch( $key, $handle ) ); + if ( $expiry < time() ) { # Yes expired, delete and try again dba_delete( $key, $handle ); @@ -718,6 +818,7 @@ class DBABagOStuff extends BagOStuff { } dba_close( $handle ); + wfProfileOut( __METHOD__ ); return $ret; } @@ -725,13 +826,81 @@ class DBABagOStuff extends BagOStuff { function keys() { $reader = $this->getReader(); $k1 = dba_firstkey( $reader ); + if ( !$k1 ) { return array(); } + $result[] = $k1; + while ( $key = dba_nextkey( $reader ) ) { $result[] = $key; } + return $result; } } + +/** + * Wrapper for WinCache object caching functions; identical interface + * to the APC wrapper + * + * @ingroup Cache + */ +class WinCacheBagOStuff extends BagOStuff { + + /** + * Get a value from the WinCache object cache + * + * @param $key String: cache key + * @return mixed + */ + public function get( $key ) { + $val = wincache_ucache_get( $key ); + + if ( is_string( $val ) ) { + $val = unserialize( $val ); + } + + return $val; + } + + /** + * Store a value in the WinCache object cache + * + * @param $key String: cache key + * @param $value Mixed: object to store + * @param $expire Int: expiration time + * @return bool + */ + public function set( $key, $value, $expire = 0 ) { + wincache_ucache_set( $key, serialize( $value ), $expire ); + + return true; + } + + /** + * Remove a value from the WinCache object cache + * + * @param $key String: cache key + * @param $time Int: not used in this implementation + * @return bool + */ + public function delete( $key, $time = 0 ) { + wincache_ucache_delete( $key ); + + return true; + } + + public function keys() { + $info = wincache_ucache_info(); + $list = $info['ucache_entries']; + $keys = array(); + + foreach ( $list as $entry ) { + $keys[] = $entry['key_name']; + } + + return $keys; + } +} diff --git a/includes/Block.php b/includes/Block.php index 187ff2db..7c5f0ddd 100644 --- a/includes/Block.php +++ b/includes/Block.php @@ -24,8 +24,8 @@ class Block { const EB_RANGE_ONLY = 4; function __construct( $address = '', $user = 0, $by = 0, $reason = '', - $timestamp = '' , $auto = 0, $expiry = '', $anonOnly = 0, $createAccount = 0, $enableAutoblock = 0, - $hideName = 0, $blockEmail = 0, $allowUsertalk = 0 ) + $timestamp = 0, $auto = 0, $expiry = '', $anonOnly = 0, $createAccount = 0, $enableAutoblock = 0, + $hideName = 0, $blockEmail = 0, $allowUsertalk = 0, $byName = false ) { $this->mId = 0; # Expand valid IPv6 addresses @@ -45,7 +45,7 @@ class Block { $this->mAllowUsertalk = $allowUsertalk; $this->mForUpdate = false; $this->mFromMaster = false; - $this->mByName = false; + $this->mByName = $byName; $this->mAngryAutoblock = false; $this->initialiseRange(); } @@ -63,6 +63,7 @@ class Block { public static function newFromDB( $address, $user = 0, $killExpired = true ) { $block = new Block; $block->load( $address, $user, $killExpired ); + if ( $block->isValid() ) { return $block; } else { @@ -81,6 +82,7 @@ class Block { $res = $dbr->resultObject( $dbr->select( 'ipblocks', '*', array( 'ipb_id' => $id ), __METHOD__ ) ); $block = new Block; + if ( $block->loadFromResult( $res ) ) { return $block; } else { @@ -142,6 +144,7 @@ class Block { $db = wfGetDB( DB_SLAVE ); $options = array(); } + return $db; } @@ -158,11 +161,12 @@ class Block { wfDebug( "Block::load: '$address', '$user', $killExpired\n" ); $options = array(); - $db =& $this->getDBOptions( $options ); + $db = $this->getDBOptions( $options ); - if ( 0 == $user && $address == '' ) { + if ( 0 == $user && $address === '' ) { # Invalid user specification, not blocked $this->clear(); + return false; } @@ -170,6 +174,7 @@ class Block { if ( $user ) { $res = $db->resultObject( $db->select( 'ipblocks', '*', array( 'ipb_user' => $user ), __METHOD__, $options ) ); + if ( $this->loadFromResult( $res, $killExpired ) ) { return true; } @@ -178,7 +183,7 @@ class Block { # Try IP block # TODO: improve performance by merging this query with the autoblock one # Slightly tricky while handling killExpired as well - if ( $address ) { + if ( $address !== '' ) { $conds = array( 'ipb_address' => $address, 'ipb_auto' => 0 ); $res = $db->resultObject( $db->select( 'ipblocks', '*', $conds, __METHOD__, $options ) ); @@ -190,6 +195,7 @@ class Block { if ( !$this->mCreateAccount ) { $this->clear(); } + return false; } else { return true; @@ -204,6 +210,7 @@ class Block { if ( !$this->mCreateAccount ) { $this->clear(); } + return false; } else { return true; @@ -266,6 +273,7 @@ class Block { } } $res->free(); + return $ret; } @@ -275,7 +283,7 @@ class Block { * * @param $address String: IP address range * @param $killExpired Boolean: whether to delete expired rows while loading - * @param $userid Integer: if not 0, then sets ipb_anon_only + * @param $user Integer: if not 0, then sets ipb_anon_only * @return Boolean */ public function loadRange( $address, $killExpired = true, $user = 0 ) { @@ -291,7 +299,7 @@ class Block { $range = substr( $iaddr, 0, 4 ); $options = array(); - $db =& $this->getDBOptions( $options ); + $db = $this->getDBOptions( $options ); $conds = array( 'ipb_range_start' . $db->buildLike( $range, $db->anyString() ), "ipb_range_start <= '$iaddr'", @@ -304,6 +312,7 @@ class Block { $res = $db->resultObject( $db->select( 'ipblocks', '*', $conds, __METHOD__, $options ) ); $success = $this->loadFromResult( $res, $killExpired ); + return $success; } @@ -368,6 +377,7 @@ class Block { $dbw = wfGetDB( DB_MASTER ); $dbw->delete( 'ipblocks', array( 'ipb_id' => $this->mId ), __METHOD__ ); + return $dbw->affectedRows() > 0; } @@ -377,9 +387,11 @@ class Block { * * @return Boolean: whether or not the insertion was successful. */ - public function insert() { + public function insert( $dbw = null ) { wfDebug( "Block::insert; timestamp {$this->mTimestamp}\n" ); - $dbw = wfGetDB( DB_MASTER ); + + if ( $dbw === null ) + $dbw = wfGetDB( DB_MASTER ); $this->validateBlockParams(); $this->initialiseRange(); @@ -475,6 +487,7 @@ class Block { if ( !$this->mUser && $this->mAnonOnly ) { $this->mBlockEmail = 0; } + if ( !$this->mByName ) { if ( $this->mBy ) { $this->mByName = User::whoIs( $this->mBy ); @@ -518,9 +531,10 @@ class Block { # No results, don't autoblock anything wfDebug( "No IP found to retroactively autoblock\n" ); } else { - while ( $row = $dbr->fetchObject( $res ) ) { - if ( $row->rc_ip ) + foreach ( $res as $row ) { + if ( $row->rc_ip ) { $this->doAutoblock( $row->rc_ip ); + } } } } @@ -601,13 +615,16 @@ class Block { # exceed the user block. If it would exceed, then do nothing, else # prolong block time if ( $this->mExpiry && - ( $this->mExpiry < Block::getAutoblockExpiry( $ipblock->mTimestamp ) ) ) { + ( $this->mExpiry < Block::getAutoblockExpiry( $ipblock->mTimestamp ) ) + ) { return; } + # Just update the timestamp if ( !$justInserted ) { $ipblock->updateTimestamp(); } + return; } else { $ipblock = new Block; @@ -626,6 +643,7 @@ class Block { # Continue suppressing the name if needed $ipblock->mHideName = $this->mHideName; $ipblock->mAllowUsertalk = $this->mAllowUsertalk; + # If the user is already blocked with an expiry date, we don't # want to pile on top of that! if ( $this->mExpiry ) { @@ -633,6 +651,7 @@ class Block { } else { $ipblock->mExpiry = Block::getAutoblockExpiry( $this->mTimestamp ); } + # Insert it return $ipblock->insert(); } @@ -643,6 +662,7 @@ class Block { */ public function deleteIfExpired() { wfProfileIn( __METHOD__ ); + if ( $this->isExpired() ) { wfDebug( "Block::deleteIfExpired() -- deleting\n" ); $this->delete(); @@ -651,6 +671,7 @@ class Block { wfDebug( "Block::deleteIfExpired() -- not expired\n" ); $retVal = false; } + wfProfileOut( __METHOD__ ); return $retVal; } @@ -661,6 +682,7 @@ class Block { */ public function isExpired() { wfDebug( "Block::isExpired() checking current " . wfTimestampNow() . " vs $this->mExpiry\n" ); + if ( !$this->mExpiry ) { return false; } else { @@ -777,6 +799,7 @@ class Block { */ public static function getAutoblockExpiry( $timestamp ) { global $wgAutoblockExpiry; + return wfTimestamp( TS_MW, wfTimestamp( TS_UNIX, $timestamp ) + $wgAutoblockExpiry ); } @@ -792,7 +815,7 @@ class Block { // IPv6 if ( IP::isIPv6( $range ) && $parts[1] >= 64 && $parts[1] <= 128 ) { $bits = $parts[1]; - $ipint = IP::toUnsigned6( $parts[0] ); + $ipint = IP::toUnsigned( $parts[0] ); # Native 32 bit functions WON'T work here!!! # Convert to a padded binary number $network = wfBaseConvert( $ipint, 10, 2, 128 ); @@ -812,6 +835,7 @@ class Block { $range = "$newip/{$parts[1]}"; } } + return $range; } @@ -833,6 +857,16 @@ class Block { public static function infinity() { # This is a special keyword for timestamps in PostgreSQL, and # works with CHAR(14) as well because "i" sorts after all numbers. + + # BEGIN DatabaseMssql hack + # Since MSSQL doesn't recognize the infinity keyword, set date manually. + # TO-DO: Refactor for better DB portability and remove magic date + $dbr = wfGetDB( DB_SLAVE ); + if ( $dbr->getType() == 'mssql' ) { + return '3000-01-31 00:00:00.000'; + } + # End DatabaseMssql hack + return 'infinity'; } @@ -848,6 +882,7 @@ class Block { if ( is_null( $msg ) ) { $msg = array(); $keys = array( 'infiniteblock', 'expiringblock' ); + foreach ( $keys as $key ) { $msg[$key] = wfMsgHtml( $key ); } @@ -862,6 +897,7 @@ class Block { $expiretimestr = htmlspecialchars( $wgLang->time( $expiry, true ) ); $expirystr = wfMsgReplaceArgs( $msg['expiringblock'], array( $expiredatestr, $expiretimestr ) ); } + return $expirystr; } @@ -880,7 +916,7 @@ class Block { return false; } } + return $expiry; } - } diff --git a/includes/CacheDependency.php b/includes/CacheDependency.php index 11e70738..74ca2864 100644 --- a/includes/CacheDependency.php +++ b/includes/CacheDependency.php @@ -1,10 +1,11 @@ <?php /** * This class stores an arbitrary value along with its dependencies. - * Users should typically only use DependencyWrapper::getFromCache(), rather - * than instantiating one of these objects directly. + * Users should typically only use DependencyWrapper::getValueFromCache(), + * rather than instantiating one of these objects directly. * @ingroup Cache */ + class DependencyWrapper { var $value; var $deps; @@ -17,9 +18,11 @@ class DependencyWrapper { */ function __construct( $value = false, $deps = array() ) { $this->value = $value; + if ( !is_array( $deps ) ) { $deps = array( $deps ); } + $this->deps = $deps; } @@ -32,6 +35,7 @@ class DependencyWrapper { return true; } } + return false; } @@ -81,6 +85,7 @@ class DependencyWrapper { $callbackParams = array(), $deps = array() ) { $obj = $cache->get( $key ); + if ( is_object( $obj ) && $obj instanceof DependencyWrapper && !$obj->isExpired() ) { $value = $obj->value; } elseif ( $callback ) { @@ -91,6 +96,7 @@ class DependencyWrapper { } else { $value = null; } + return $value; } } @@ -207,6 +213,7 @@ class TitleDependency extends CacheDependency { if ( !isset( $this->titleObj ) ) { $this->titleObj = Title::makeTitle( $this->ns, $this->dbk ); } + return $this->titleObj; } @@ -255,6 +262,7 @@ class TitleListDependency extends CacheDependency { foreach ( $this->getLinkBatch()->data as $ns => $dbks ) { if ( count( $dbks ) > 0 ) { $timestamps[$ns] = array(); + foreach ( $dbks as $dbk => $value ) { $timestamps[$ns][$dbk] = false; } @@ -272,10 +280,11 @@ class TitleListDependency extends CacheDependency { __METHOD__ ); - while ( $row = $dbr->fetchObject( $res ) ) { + foreach ( $res as $row ) { $timestamps[$row->page_namespace][$row->page_title] = $row->page_touched; } } + return $timestamps; } @@ -297,6 +306,7 @@ class TitleListDependency extends CacheDependency { function isExpired() { $newTimestamps = $this->calculateTimestamps(); + foreach ( $this->timestamps as $ns => $dbks ) { foreach ( $dbks as $dbk => $oldTimestamp ) { $newTimestamp = $newTimestamps[$ns][$dbk]; @@ -319,6 +329,7 @@ class TitleListDependency extends CacheDependency { } } } + return false; } } diff --git a/includes/Category.php b/includes/Category.php index e9ffaecf..614933ff 100644 --- a/includes/Category.php +++ b/includes/Category.php @@ -25,9 +25,6 @@ class Category { * @return bool True on success, false on failure. */ protected function initialize() { - if ( $this->mName === null && $this->mTitle ) - $this->mName = $title->getDBkey(); - if ( $this->mName === null && $this->mID === null ) { throw new MWException( __METHOD__ . ' has both names and IDs null' ); } elseif ( $this->mID === null ) { @@ -248,28 +245,33 @@ class Category { if ( wfReadOnly() ) { return false; } - $dbw = wfGetDB( DB_MASTER ); - $dbw->begin(); + # Note, we must use names for this, since categorylinks does. if ( $this->mName === null ) { if ( !$this->initialize() ) { return false; } - } else { - # Let's be sure that the row exists in the table. We don't need to - # do this if we got the row from the table in initialization! - $seqVal = $dbw->nextSequenceValue( 'category_cat_id_seq' ); - $dbw->insert( - 'category', - array( - 'cat_id' => $seqVal, - 'cat_title' => $this->mName - ), - __METHOD__, - 'IGNORE' - ); } + $dbw = wfGetDB( DB_MASTER ); + $dbw->begin(); + + # Insert the row if it doesn't exist yet (e.g., this is being run via + # update.php from a pre-1.16 schema). TODO: This will cause lots and + # lots of gaps on some non-MySQL DBMSes if you run populateCategory.php + # repeatedly. Plus it's an extra query that's unneeded almost all the + # time. This should be rewritten somehow, probably. + $seqVal = $dbw->nextSequenceValue( 'category_cat_id_seq' ); + $dbw->insert( + 'category', + array( + 'cat_id' => $seqVal, + 'cat_title' => $this->mName + ), + __METHOD__, + 'IGNORE' + ); + $cond1 = $dbw->conditional( 'page_namespace=' . NS_CATEGORY, 1, 'NULL' ); $cond2 = $dbw->conditional( 'page_namespace=' . NS_FILE, 1, 'NULL' ); $result = $dbw->selectRow( diff --git a/includes/CategoryPage.php b/includes/CategoryPage.php index 56f85faa..f990b79b 100644 --- a/includes/CategoryPage.php +++ b/includes/CategoryPage.php @@ -1,33 +1,41 @@ <?php /** - * Special handling for category description pages - * Modelled after ImagePage.php + * Special handling for category description pages. + * Modelled after ImagePage.php. * + * @file */ if ( !defined( 'MEDIAWIKI' ) ) die( 1 ); /** + * Special handling for category description pages, showing pages, + * subcategories and file that belong to the category */ class CategoryPage extends Article { + # Subclasses can change this to override the viewer class. + protected $mCategoryViewerClass = 'CategoryViewer'; + function view() { global $wgRequest, $wgUser; $diff = $wgRequest->getVal( 'diff' ); $diffOnly = $wgRequest->getBool( 'diffonly', $wgUser->getOption( 'diffonly' ) ); - if ( isset( $diff ) && $diffOnly ) - return Article::view(); + if ( isset( $diff ) && $diffOnly ) { + return parent::view(); + } - if ( !wfRunHooks( 'CategoryPageView', array( &$this ) ) ) + if ( !wfRunHooks( 'CategoryPageView', array( &$this ) ) ) { return; + } if ( NS_CATEGORY == $this->mTitle->getNamespace() ) { $this->openShowCategory(); } - Article::view(); + parent::view(); if ( NS_CATEGORY == $this->mTitle->getNamespace() ) { $this->closeShowCategory(); @@ -36,14 +44,23 @@ class CategoryPage extends Article { /** * Don't return a 404 for categories in use. + * In use defined as: either the actual page exists + * or the category currently has members. */ function hasViewableContent() { if ( parent::hasViewableContent() ) { return true; } else { $cat = Category::newFromTitle( $this->mTitle ); - return $cat->getId() != 0; + // If any of these are not 0, then has members + if ( $cat->getPageCount() + || $cat->getSubcatCount() + || $cat->getFileCount() + ) { + return true; + } } + return false; } function openShowCategory() { @@ -52,10 +69,14 @@ class CategoryPage extends Article { function closeShowCategory() { global $wgOut, $wgRequest; - $from = $wgRequest->getVal( 'from' ); - $until = $wgRequest->getVal( 'until' ); - $viewer = new CategoryViewer( $this->mTitle, $from, $until ); + $from = $until = array(); + foreach ( array( 'page', 'subcat', 'file' ) as $type ) { + $from[$type] = $wgRequest->getVal( "{$type}from" ); + $until[$type] = $wgRequest->getVal( "{$type}until" ); + } + + $viewer = new $this->mCategoryViewerClass( $this->mTitle, $from, $until, $wgRequest->getValues() ); $wgOut->addHTML( $viewer->getHTML() ); } } @@ -65,27 +86,32 @@ class CategoryViewer { $articles, $articles_start_char, $children, $children_start_char, $showGallery, $gallery, - $skin; - /** Category object for this page */ + $imgsNoGalley, $imgsNoGallery_start_char, + $skin, $collation; + # Category object for this page private $cat; + # The original query array, to be used in generating paging links. + private $query; - function __construct( $title, $from = '', $until = '' ) { + function __construct( $title, $from = '', $until = '', $query = array() ) { global $wgCategoryPagingLimit; $this->title = $title; $this->from = $from; $this->until = $until; $this->limit = $wgCategoryPagingLimit; $this->cat = Category::newFromTitle( $title ); + $this->query = $query; + $this->collation = Collation::singleton(); + unset( $this->query['title'] ); } /** * Format the category data list. * * @return string HTML output - * @private */ - function getHTML() { - global $wgOut, $wgCategoryMagicGallery, $wgCategoryPagingLimit, $wgContLang; + public function getHTML() { + global $wgOut, $wgCategoryMagicGallery, $wgContLang; wfProfileIn( __METHOD__ ); $this->showGallery = $wgCategoryMagicGallery && !$wgOut->mNoGallery; @@ -128,6 +154,9 @@ class CategoryViewer { if ( $this->showGallery ) { $this->gallery = new ImageGallery(); $this->gallery->setHideBadImages(); + } else { + $this->imgsNoGallery = array(); + $this->imgsNoGallery_start_char = array(); } } @@ -142,26 +171,29 @@ class CategoryViewer { /** * Add a subcategory to the internal lists, using a Category object */ - function addSubcategoryObject( $cat, $sortkey, $pageLength ) { + function addSubcategoryObject( Category $cat, $sortkey, $pageLength ) { + // Subcategory; strip the 'Category' namespace from the link text. $title = $cat->getTitle(); - $this->addSubcategory( $title, $sortkey, $pageLength ); + + $link = $this->getSkin()->link( $title, $title->getText() ); + if ( $title->isRedirect() ) { + // This didn't used to add redirect-in-category, but might + // as well be consistent with the rest of the sections + // on a category page. + $link = '<span class="redirect-in-category">' . $link . '</span>'; + } + $this->children[] = $link; + + $this->children_start_char[] = + $this->getSubcategorySortChar( $cat->getTitle(), $sortkey ); } /** * Add a subcategory to the internal lists, using a title object * @deprecated kept for compatibility, please use addSubcategoryObject instead */ - function addSubcategory( $title, $sortkey, $pageLength ) { - // Subcategory; strip the 'Category' namespace from the link text. - $this->children[] = $this->getSkin()->link( - $title, - null, - array(), - array(), - array( 'known', 'noclasses' ) - ); - - $this->children_start_char[] = $this->getSubcategorySortChar( $title, $sortkey ); + function addSubcategory( Title $title, $sortkey, $pageLength ) { + $this->addSubcategoryObject( Category::newFromTitle( $title ), $sortkey, $pageLength ); } /** @@ -170,16 +202,21 @@ class CategoryViewer { * entry in the categorylinks table is Category:A, not A, which it SHOULD be. * Workaround: If sortkey == "Category:".$title, than use $title for sorting, * else use sortkey... + * + * @param Title $title + * @param string $sortkey The human-readable sortkey (before transforming to icu or whatever). */ function getSubcategorySortChar( $title, $sortkey ) { global $wgContLang; if ( $title->getPrefixedText() == $sortkey ) { - $firstChar = $wgContLang->firstChar( $title->getDBkey() ); + $word = $title->getDBkey(); } else { - $firstChar = $wgContLang->firstChar( $sortkey ); + $word = $sortkey; } + $firstChar = $this->collation->getFirstLetter( $word ); + return $wgContLang->convert( $firstChar ); } @@ -187,14 +224,25 @@ class CategoryViewer { * Add a page in the image namespace */ function addImage( Title $title, $sortkey, $pageLength, $isRedirect = false ) { + global $wgContLang; if ( $this->showGallery ) { - if ( $this->flip ) { + $flip = $this->flip['file']; + if ( $flip ) { $this->gallery->insert( $title ); } else { $this->gallery->add( $title ); } } else { - $this->addPage( $title, $sortkey, $pageLength, $isRedirect ); + $link = $this->getSkin()->link( $title ); + if ( $isRedirect ) { + // This seems kind of pointless given 'mw-redirect' class, + // but keeping for back-compatibility with user css. + $link = '<span class="redirect-in-category">' . $link . '</span>'; + } + $this->imgsNoGallery[] = $link; + + $this->imgsNoGallery_start_char[] = $wgContLang->convert( + $this->collation->getFirstLetter( $sortkey ) ); } } @@ -203,74 +251,104 @@ class CategoryViewer { */ function addPage( $title, $sortkey, $pageLength, $isRedirect = false ) { global $wgContLang; - $this->articles[] = $isRedirect - ? '<span class="redirect-in-category">' . - $this->getSkin()->link( - $title, - null, - array(), - array(), - array( 'known', 'noclasses' ) - ) . '</span>' - : $this->getSkin()->makeSizeLinkObj( $pageLength, $title ); - $this->articles_start_char[] = $wgContLang->convert( $wgContLang->firstChar( $sortkey ) ); + + $link = $this->getSkin()->link( $title ); + if ( $isRedirect ) { + // This seems kind of pointless given 'mw-redirect' class, + // but keeping for back-compatiability with user css. + $link = '<span class="redirect-in-category">' . $link . '</span>'; + } + $this->articles[] = $link; + + $this->articles_start_char[] = $wgContLang->convert( + $this->collation->getFirstLetter( $sortkey ) ); } function finaliseCategoryState() { - if ( $this->flip ) { + if ( $this->flip['subcat'] ) { $this->children = array_reverse( $this->children ); $this->children_start_char = array_reverse( $this->children_start_char ); + } + if ( $this->flip['page'] ) { $this->articles = array_reverse( $this->articles ); $this->articles_start_char = array_reverse( $this->articles_start_char ); } + if ( !$this->showGallery && $this->flip['file'] ) { + $this->imgsNoGallery = array_reverse( $this->imgsNoGallery ); + $this->imgsNoGallery_start_char = array_reverse( $this->imgsNoGallery_start_char ); + } } function doCategoryQuery() { $dbr = wfGetDB( DB_SLAVE, 'category' ); - if ( $this->from != '' ) { - $pageCondition = 'cl_sortkey >= ' . $dbr->addQuotes( $this->from ); - $this->flip = false; - } elseif ( $this->until != '' ) { - $pageCondition = 'cl_sortkey < ' . $dbr->addQuotes( $this->until ); - $this->flip = true; - } else { - $pageCondition = '1 = 1'; - $this->flip = false; - } - $res = $dbr->select( - array( 'page', 'categorylinks', 'category' ), - array( 'page_title', 'page_namespace', 'page_len', 'page_is_redirect', 'cl_sortkey', - 'cat_id', 'cat_title', 'cat_subcats', 'cat_pages', 'cat_files' ), - array( $pageCondition, 'cl_to' => $this->title->getDBkey() ), - __METHOD__, - array( 'ORDER BY' => $this->flip ? 'cl_sortkey DESC' : 'cl_sortkey', - 'USE INDEX' => array( 'categorylinks' => 'cl_sortkey' ), - 'LIMIT' => $this->limit + 1 ), - array( 'categorylinks' => array( 'INNER JOIN', 'cl_from = page_id' ), - 'category' => array( 'LEFT JOIN', 'cat_title = page_title AND page_namespace = ' . NS_CATEGORY ) ) + $this->nextPage = array( + 'page' => null, + 'subcat' => null, + 'file' => null, ); + $this->flip = array( 'page' => false, 'subcat' => false, 'file' => false ); + + foreach ( array( 'page', 'subcat', 'file' ) as $type ) { + # Get the sortkeys for start/end, if applicable. Note that if + # the collation in the database differs from the one + # set in $wgCategoryCollation, pagination might go totally haywire. + $extraConds = array( 'cl_type' => $type ); + if ( $this->from[$type] !== null ) { + $extraConds[] = 'cl_sortkey >= ' + . $dbr->addQuotes( $this->collation->getSortKey( $this->from[$type] ) ); + } elseif ( $this->until[$type] !== null ) { + $extraConds[] = 'cl_sortkey < ' + . $dbr->addQuotes( $this->collation->getSortKey( $this->until[$type] ) ); + $this->flip[$type] = true; + } - $count = 0; - $this->nextPage = null; + $res = $dbr->select( + array( 'page', 'categorylinks', 'category' ), + array( 'page_id', 'page_title', 'page_namespace', 'page_len', + 'page_is_redirect', 'cl_sortkey', 'cat_id', 'cat_title', + 'cat_subcats', 'cat_pages', 'cat_files', + 'cl_sortkey_prefix', 'cl_collation' ), + array( 'cl_to' => $this->title->getDBkey() ) + $extraConds, + __METHOD__, + array( + 'USE INDEX' => array( 'categorylinks' => 'cl_sortkey' ), + 'LIMIT' => $this->limit + 1, + 'ORDER BY' => $this->flip[$type] ? 'cl_sortkey DESC' : 'cl_sortkey', + ), + array( + 'categorylinks' => array( 'INNER JOIN', 'cl_from = page_id' ), + 'category' => array( 'LEFT JOIN', 'cat_title = page_title AND page_namespace = ' . NS_CATEGORY ) + ) + ); - while ( $x = $dbr->fetchObject ( $res ) ) { - if ( ++$count > $this->limit ) { - // We've reached the one extra which shows that there are - // additional pages to be had. Stop here... - $this->nextPage = $x->cl_sortkey; - break; - } + $count = 0; + foreach ( $res as $row ) { + $title = Title::newFromRow( $row ); + if ( $row->cl_collation === '' ) { + // Hack to make sure that while updating from 1.16 schema + // and db is inconsistent, that the sky doesn't fall. + // See r83544. Could perhaps be removed in a couple decades... + $humanSortkey = $row->cl_sortkey; + } else { + $humanSortkey = $title->getCategorySortkey( $row->cl_sortkey_prefix ); + } - $title = Title::makeTitle( $x->page_namespace, $x->page_title ); + if ( ++$count > $this->limit ) { + # We've reached the one extra which shows that there + # are additional pages to be had. Stop here... + $this->nextPage[$type] = $humanSortkey; + break; + } - if ( $title->getNamespace() == NS_CATEGORY ) { - $cat = Category::newFromRow( $x, $title ); - $this->addSubcategoryObject( $cat, $x->cl_sortkey, $x->page_len ); - } elseif ( $this->showGallery && $title->getNamespace() == NS_FILE ) { - $this->addImage( $title, $x->cl_sortkey, $x->page_len, $x->page_is_redirect ); - } else { - $this->addPage( $title, $x->cl_sortkey, $x->page_len, $x->page_is_redirect ); + if ( $title->getNamespace() == NS_CATEGORY ) { + $cat = Category::newFromRow( $row, $title ); + $this->addSubcategoryObject( $cat, $humanSortkey, $row->page_len ); + } elseif ( $title->getNamespace() == NS_FILE ) { + $this->addImage( $title, $humanSortkey, $row->page_len, $row->page_is_redirect ); + } else { + $this->addPage( $title, $humanSortkey, $row->page_len, $row->page_is_redirect ); + } } } } @@ -294,7 +372,9 @@ class CategoryViewer { $r .= "<div id=\"mw-subcategories\">\n"; $r .= '<h2>' . wfMsg( 'subcategories' ) . "</h2>\n"; $r .= $countmsg; + $r .= $this->getSectionPagingLinks( 'subcat' ); $r .= $this->formatList( $this->children, $this->children_start_char ); + $r .= $this->getSectionPagingLinks( 'subcat' ); $r .= "\n</div>"; } return $r; @@ -318,36 +398,57 @@ class CategoryViewer { $r = "<div id=\"mw-pages\">\n"; $r .= '<h2>' . wfMsg( 'category_header', $ti ) . "</h2>\n"; $r .= $countmsg; + $r .= $this->getSectionPagingLinks( 'page' ); $r .= $this->formatList( $this->articles, $this->articles_start_char ); + $r .= $this->getSectionPagingLinks( 'page' ); $r .= "\n</div>"; } return $r; } function getImageSection() { - if ( $this->showGallery && ! $this->gallery->isEmpty() ) { + $r = ''; + $rescnt = $this->showGallery ? $this->gallery->count() : count( $this->imgsNoGallery ); + if ( $rescnt > 0 ) { $dbcnt = $this->cat->getFileCount(); - $rescnt = $this->gallery->count(); $countmsg = $this->getCountMessage( $rescnt, $dbcnt, 'file' ); - return "<div id=\"mw-category-media\">\n" . - '<h2>' . wfMsg( 'category-media-header', htmlspecialchars( $this->title->getText() ) ) . "</h2>\n" . - $countmsg . $this->gallery->toHTML() . "\n</div>"; - } else { - return ''; + $r .= "<div id=\"mw-category-media\">\n"; + $r .= '<h2>' . wfMsg( 'category-media-header', htmlspecialchars( $this->title->getText() ) ) . "</h2>\n"; + $r .= $countmsg; + $r .= $this->getSectionPagingLinks( 'file' ); + if ( $this->showGallery ) { + $r .= $this->gallery->toHTML(); + } else { + $r .= $this->formatList( $this->imgsNoGallery, $this->imgsNoGallery_start_char ); + } + $r .= $this->getSectionPagingLinks( 'file' ); + $r .= "\n</div>"; } + return $r; } - function getCategoryBottom() { - if ( $this->until != '' ) { - return $this->pagingLinks( $this->title, $this->nextPage, $this->until, $this->limit ); - } elseif ( $this->nextPage != '' || $this->from != '' ) { - return $this->pagingLinks( $this->title, $this->from, $this->nextPage, $this->limit ); + /** + * Get the paging links for a section (subcats/pages/files), to go at the top and bottom + * of the output. + * + * @param $type String: 'page', 'subcat', or 'file' + * @return String: HTML output, possibly empty if there are no other pages + */ + private function getSectionPagingLinks( $type ) { + if ( $this->until[$type] !== null ) { + return $this->pagingLinks( $this->nextPage[$type], $this->until[$type], $type ); + } elseif ( $this->nextPage[$type] !== null || $this->from[$type] !== null ) { + return $this->pagingLinks( $this->from[$type], $this->nextPage[$type], $type ); } else { return ''; } } + function getCategoryBottom() { + return ''; + } + /** * Format a list of articles chunked by letter, either as a * bullet list or a columnar format, depending on the length. @@ -360,10 +461,10 @@ class CategoryViewer { */ function formatList( $articles, $articles_start_char, $cutoff = 6 ) { if ( count ( $articles ) > $cutoff ) { - return $this->columnList( $articles, $articles_start_char ); + return self::columnList( $articles, $articles_start_char ); } elseif ( count( $articles ) > 0 ) { // for short lists of articles in categories. - return $this->shortList( $articles, $articles_start_char ); + return self::shortList( $articles, $articles_start_char ); } return ''; } @@ -383,7 +484,7 @@ class CategoryViewer { * @return String * @private */ - function columnList( $articles, $articles_start_char ) { + static function columnList( $articles, $articles_start_char ) { $columns = array_combine( $articles, $articles_start_char ); # Split into three columns $columns = array_chunk( $columns, ceil( count( $columns ) / 3 ), true /* preserve keys */ ); @@ -435,7 +536,7 @@ class CategoryViewer { * @return String * @private */ - function shortList( $articles, $articles_start_char ) { + static function shortList( $articles, $articles_start_char ) { $r = '<h3>' . htmlspecialchars( $articles_start_char[0] ) . "</h3>\n"; $r .= '<ul><li>' . $articles[0] . '</li>'; for ( $index = 1; $index < count( $articles ); $index++ ) @@ -452,26 +553,27 @@ class CategoryViewer { } /** - * @param $title Title object - * @param $first String - * @param $last String - * @param $limit Int - * @param $query Array: additional query options to pass - * @return String - * @private + * Create paging links, as a helper method to getSectionPagingLinks(). + * + * @param $first String The 'until' parameter for the generated URL + * @param $last String The 'from' parameter for the genererated URL + * @param $type String A prefix for parameters, 'page' or 'subcat' or + * 'file' + * @return String HTML */ - function pagingLinks( $title, $first, $last, $limit, $query = array() ) { + private function pagingLinks( $first, $last, $type = '' ) { global $wgLang; $sk = $this->getSkin(); - $limitText = $wgLang->formatNum( $limit ); + $limitText = $wgLang->formatNum( $this->limit ); $prevLink = wfMsgExt( 'prevn', array( 'escape', 'parsemag' ), $limitText ); if ( $first != '' ) { - $prevQuery = $query; - $prevQuery['until'] = $first; + $prevQuery = $this->query; + $prevQuery["{$type}until"] = $first; + unset( $prevQuery["{$type}from"] ); $prevLink = $sk->linkKnown( - $title, + $this->title, $prevLink, array(), $prevQuery @@ -481,10 +583,11 @@ class CategoryViewer { $nextLink = wfMsgExt( 'nextn', array( 'escape', 'parsemag' ), $limitText ); if ( $last != '' ) { - $lastQuery = $query; - $lastQuery['from'] = $last; + $lastQuery = $this->query; + $lastQuery["{$type}from"] = $last; + unset( $lastQuery["{$type}until"] ); $nextLink = $sk->linkKnown( - $title, + $this->title, $nextLink, array(), $lastQuery @@ -496,8 +599,8 @@ class CategoryViewer { /** * What to do if the category table conflicts with the number of results - * returned? This function says what. It works the same whether the - * things being counted are articles, subcategories, or files. + * returned? This function says what. Each type is considered independantly + * of the other types. * * Note for grepping: uses the messages category-article-count, * category-article-count-limited, category-subcat-count, @@ -520,15 +623,28 @@ class CategoryViewer { # than $this->limit and there's no offset. In this case we still # know the right figure. # 3) We have no idea. - $totalrescnt = count( $this->articles ) + count( $this->children ) + - ( $this->showGallery ? $this->gallery->count() : 0 ); - if ( $dbcnt == $rescnt || ( ( $totalrescnt == $this->limit || $this->from - || $this->until ) && $dbcnt > $rescnt ) ) + # Check if there's a "from" or "until" for anything + + // This is a little ugly, but we seem to use different names + // for the paging types then for the messages. + if ( $type === 'article' ) { + $pagingType = 'page'; + } else { + $pagingType = $type; + } + + $fromOrUntil = false; + if ( $this->from[$pagingType] !== null || $this->until[$pagingType] !== null ) { + $fromOrUntil = true; + } + + if ( $dbcnt == $rescnt || ( ( $rescnt == $this->limit || $fromOrUntil ) + && $dbcnt > $rescnt ) ) { # Case 1: seems sane. $totalcnt = $dbcnt; - } elseif ( $totalrescnt < $this->limit && !$this->from && !$this->until ) { + } elseif ( $rescnt < $this->limit && !$fromOrUntil ) { # Case 2: not sane, but salvageable. Use the number of results. # Since there are fewer than 200, we can also take this opportunity # to refresh the incorrect category table entry -- which should be diff --git a/includes/Categoryfinder.php b/includes/Categoryfinder.php index 5ac8a9be..1f08b7f8 100644 --- a/includes/Categoryfinder.php +++ b/includes/Categoryfinder.php @@ -10,14 +10,14 @@ * # Determines whether the article with the page_id 12345 is in both * # "Category 1" and "Category 2" or their subcategories, respectively * - * $cf = new Categoryfinder ; - * $cf->seed ( - * array ( 12345 ) , - * array ( "Category 1","Category 2" ) , - * "AND" - * ) ; - * $a = $cf->run() ; - * print implode ( "," , $a ) ; + * $cf = new Categoryfinder; + * $cf->seed( + * array( 12345 ), + * array( 'Category 1', 'Category 2' ), + * 'AND' + * ); + * $a = $cf->run(); + * print implode( ',' , $a ); * </code> * */ @@ -43,7 +43,7 @@ class Categoryfinder { * @param $categories FIXME * @param $mode String: FIXME, default 'AND'. */ - function seed( $article_ids, $categories, $mode = "AND" ) { + function seed( $article_ids, $categories, $mode = 'AND' ) { $this->articles = $article_ids; $this->next = $article_ids; $this->mode = $mode; @@ -64,9 +64,9 @@ class Categoryfinder { * then checks the articles if they match the conditions * @return array of page_ids (those given to seed() that match the conditions) */ - function run () { + function run() { $this->dbr = wfGetDB( DB_SLAVE ); - while ( count ( $this->next ) > 0 ) { + while ( count( $this->next ) > 0 ) { $this->scan_next_layer(); } @@ -90,7 +90,7 @@ class Categoryfinder { * @param $path used to check for recursion loops * @return bool Does this match the conditions? */ - function check( $id , &$conds, $path = array() ) { + function check( $id, &$conds, $path = array() ) { // Check for loops and stop! if ( in_array( $id, $path ) ) { return false; @@ -114,13 +114,13 @@ class Categoryfinder { # Is this a condition? if ( isset( $conds[$pname] ) ) { # This key is in the category list! - if ( $this->mode == "OR" ) { + if ( $this->mode == 'OR' ) { # One found, that's enough! $conds = array(); return true; } else { # Assuming "AND" as default - unset( $conds[$pname] ) ; + unset( $conds[$pname] ); if ( count( $conds ) == 0 ) { # All conditions met, done return true; @@ -131,7 +131,7 @@ class Categoryfinder { # Not done yet, try sub-parents if ( !isset( $this->name2id[$pname] ) ) { # No sub-parent - continue ; + continue; } $done = $this->check( $this->name2id[$pname], $conds, $path ); if ( $done || count( $conds ) == 0 ) { @@ -152,10 +152,10 @@ class Categoryfinder { /* FROM */ 'categorylinks', /* SELECT */ '*', /* WHERE */ array( 'cl_from' => $this->next ), - __METHOD__ . "-1" + __METHOD__ . '-1' ); - while ( $o = $this->dbr->fetchObject( $res ) ) { - $k = $o->cl_to ; + foreach ( $res as $o ) { + $k = $o->cl_to; # Update parent tree if ( !isset( $this->parents[$o->cl_from] ) ) { @@ -164,9 +164,13 @@ class Categoryfinder { $this->parents[$o->cl_from][$k] = $o; # Ignore those we already have - if ( in_array ( $k , $this->deadend ) ) continue; + if ( in_array( $k, $this->deadend ) ) { + continue; + } - if ( isset ( $this->name2id[$k] ) ) continue; + if ( isset( $this->name2id[$k] ) ) { + continue; + } # Hey, new category! $layer[$k] = $k; @@ -175,14 +179,14 @@ class Categoryfinder { $this->next = array(); # Find the IDs of all category pages in $layer, if they exist - if ( count ( $layer ) > 0 ) { + if ( count( $layer ) > 0 ) { $res = $this->dbr->select( /* FROM */ 'page', /* SELECT */ array( 'page_id', 'page_title' ), /* WHERE */ array( 'page_namespace' => NS_CATEGORY , 'page_title' => $layer ), - __METHOD__ . "-2" + __METHOD__ . '-2' ); - while ( $o = $this->dbr->fetchObject( $res ) ) { + foreach ( $res as $o ) { $id = $o->page_id; $name = $o->page_title; $this->name2id[$name] = $id; diff --git a/includes/Cdb.php b/includes/Cdb.php index ab429872..60477485 100644 --- a/includes/Cdb.php +++ b/includes/Cdb.php @@ -1,4 +1,9 @@ <?php +/** + * Native CDB file reader and writer + * + * @file + */ /** * Read from a CDB file. @@ -93,7 +98,7 @@ class CdbReader_DBA { function __construct( $fileName ) { $this->handle = dba_open( $fileName, 'r-', 'cdb' ); if ( !$this->handle ) { - throw new MWException( 'Unable to open DB file "' . $fileName . '"' ); + throw new MWException( 'Unable to open CDB file "' . $fileName . '"' ); } } @@ -120,7 +125,7 @@ class CdbWriter_DBA { $this->tmpFileName = $fileName . '.tmp.' . mt_rand( 0, 0x7fffffff ); $this->handle = dba_open( $this->tmpFileName, 'n', 'cdb_make' ); if ( !$this->handle ) { - throw new MWException( 'Unable to open DB file for write "' . $fileName . '"' ); + throw new MWException( 'Unable to open CDB file for write "' . $fileName . '"' ); } } diff --git a/includes/Cdb_PHP.php b/includes/Cdb_PHP.php index 49294f71..1485cc66 100644 --- a/includes/Cdb_PHP.php +++ b/includes/Cdb_PHP.php @@ -1,11 +1,12 @@ <?php - /** * This is a port of D.J. Bernstein's CDB to PHP. It's based on the copy that * appears in PHP 5.3. Changes are: * * Error returns replaced with exceptions * * Exception thrown if sizes or offsets are between 2GB and 4GB * * Some variables renamed + * + * @file */ /** @@ -96,7 +97,7 @@ class CdbReader_PHP extends CdbReader { function __construct( $fileName ) { $this->handle = fopen( $fileName, 'rb' ); if ( !$this->handle ) { - throw new MWException( 'Unable to open DB file "' . $fileName . '"' ); + throw new MWException( 'Unable to open CDB file "' . $fileName . '"' ); } $this->findStart(); } @@ -137,7 +138,7 @@ class CdbReader_PHP extends CdbReader { $buf = fread( $this->handle, $length ); if ( $buf === false || strlen( $buf ) !== $length ) { - throw new MWException( __METHOD__.': read from cdb file failed, file may be corrupted' ); + throw new MWException( __METHOD__.': read from CDB file failed, file may be corrupted' ); } return $buf; } @@ -223,7 +224,7 @@ class CdbWriter_PHP extends CdbWriter { $this->tmpFileName = $fileName . '.tmp.' . mt_rand( 0, 0x7fffffff ); $this->handle = fopen( $this->tmpFileName, 'wb' ); if ( !$this->handle ) { - throw new MWException( 'Unable to open DB file for write "' . $fileName . '"' ); + throw new MWException( 'Unable to open CDB file for write "' . $fileName . '"' ); } $this->hplist = array(); $this->numentries = 0; diff --git a/includes/ChangeTags.php b/includes/ChangeTags.php index 8dce679b..7f0fee21 100644 --- a/includes/ChangeTags.php +++ b/includes/ChangeTags.php @@ -119,7 +119,6 @@ class ChangeTags { } // Figure out which conditions can be done. - $join_field = ''; if ( in_array( 'recentchanges', $tables ) ) { $join_cond = 'rc_id'; } elseif( in_array( 'logging', $tables ) ) { @@ -168,10 +167,10 @@ class ChangeTags { return $data; } - $html = implode( ' ', $data ); + $html = implode( ' ', $data ); $html .= "\n" . Xml::element( 'input', array( 'type' => 'submit', 'value' => wfMsg( 'tag-filter-submit' ) ) ); - $html .= "\n" . Xml::hidden( 'title', $wgTitle-> getPrefixedText() ); - $html = Xml::tags( 'form', array( 'action' => $wgTitle->getLocalURL(), 'method' => 'get' ), $html ); + $html .= "\n" . Html::hidden( 'title', $title->getPrefixedText() ); + $html = Xml::tags( 'form', array( 'action' => $title->getLocalURL(), 'method' => 'get' ), $html ); return $html; } @@ -181,16 +180,17 @@ class ChangeTags { // Caching... global $wgMemc; $key = wfMemcKey( 'valid-tags' ); - - if ( $tags = $wgMemc->get( $key ) ) + $tags = $wgMemc->get( $key ); + if ( $tags ) { return $tags; + } $emptyTags = array(); // Some DB stuff $dbr = wfGetDB( DB_SLAVE ); $res = $dbr->select( 'valid_tag', 'vt_tag', array(), __METHOD__ ); - while( $row = $res->fetchObject() ) { + foreach ( $res as $row ) { $emptyTags[] = $row->vt_tag; } diff --git a/includes/ChangesFeed.php b/includes/ChangesFeed.php index bc50fe02..f07b6505 100644 --- a/includes/ChangesFeed.php +++ b/includes/ChangesFeed.php @@ -27,8 +27,8 @@ class ChangesFeed { * @return ChannelFeed subclass or false on failure */ public function getFeedObject( $title, $description ) { - global $wgSitename, $wgContLanguageCode, $wgFeedClasses, $wgTitle; - $feedTitle = "$wgSitename - {$title} [$wgContLanguageCode]"; + global $wgSitename, $wgLanguageCode, $wgFeedClasses, $wgTitle; + $feedTitle = "$wgSitename - {$title} [$wgLanguageCode]"; if( !isset($wgFeedClasses[$this->format] ) ) return false; return new $wgFeedClasses[$this->format]( @@ -45,18 +45,17 @@ class ChangesFeed { * @return null or true */ public function execute( $feed, $rows, $lastmod, $opts ) { - global $messageMemc, $wgFeedCacheTimeout; - global $wgSitename, $wgLang; + global $wgLang, $wgRenderHashAppend; if ( !FeedUtils::checkFeedOutput( $this->format ) ) { return; } - $timekey = wfMemcKey( $this->type, $this->format, 'timestamp' ); - $optionsHash = md5( serialize( $opts->getAllValues() ) ); + $optionsHash = md5( serialize( $opts->getAllValues() ) ) . $wgRenderHashAppend; + $timekey = wfMemcKey( $this->type, $this->format, $wgLang->getCode(), $optionsHash, 'timestamp' ); $key = wfMemcKey( $this->type, $this->format, $wgLang->getCode(), $optionsHash ); - FeedUtils::checkPurge($timekey, $key); + FeedUtils::checkPurge( $timekey, $key ); /* * Bumping around loading up diffs can be pretty slow, so where @@ -102,7 +101,8 @@ class ChangesFeed { * @return feed's content on cache hit or false on cache miss */ public function loadFromCache( $lastmod, $timekey, $key ) { - global $wgFeedCacheTimeout, $messageMemc; + global $wgFeedCacheTimeout, $wgOut, $messageMemc; + $feedLastmod = $messageMemc->get( $timekey ); if( ( $wgFeedCacheTimeout > 0 ) && $feedLastmod ) { @@ -119,6 +119,9 @@ class ChangesFeed { if( $feedAge < $wgFeedCacheTimeout || $feedLastmodUnix > $lastmodUnix) { wfDebug( "RC: loading feed from cache ($key; $feedLastmod; $lastmod)...\n" ); + if ( $feedLastmodUnix < $lastmodUnix ) { + $wgOut->setLastModified( $feedLastmod ); // bug 21916 + } return $messageMemc->get( $key ); } else { wfDebug( "RC: cached feed timestamp check failed ($feedLastmod; $lastmod)\n" ); diff --git a/includes/ChangesList.php b/includes/ChangesList.php index 9f092991..b8bc4f55 100644 --- a/includes/ChangesList.php +++ b/includes/ChangesList.php @@ -1,4 +1,12 @@ <?php +/** + * Classes to show various lists of changes: + * - watchlist + * - related changes + * - recent changes + * + * @file + */ /** * @todo document @@ -17,13 +25,9 @@ class RCCacheEntry extends RecentChange { } /** - * Class to show various lists of changes: - * - what links here - * - related changes - * - recent changes + * Base class for all changes lists */ class ChangesList { - # Called by history lists and recent changes public $skin; protected $watchlist = false; @@ -44,11 +48,13 @@ class ChangesList { * @return ChangesList derivative */ public static function newFromUser( &$user ) { + global $wgRequest; + $sk = $user->getSkin(); $list = null; if( wfRunHooks( 'FetchChangesList', array( &$user, &$sk, &$list ) ) ) { - return $user->getOption( 'usenewrc' ) ? - new EnhancedChangesList( $sk ) : new OldChangesList( $sk ); + $new = $wgRequest->getBool( 'enhanced', $user->getOption( 'usenewrc' ) ); + return $new ? new EnhancedChangesList( $sk ) : new OldChangesList( $sk ); } else { return $list; } @@ -85,7 +91,7 @@ class ChangesList { * @param $bot Boolean * @return String */ - protected function recentChangesFlags( $new, $minor, $patrolled, $nothing = ' ', $bot = false ) { + protected function recentChangesFlags( $new, $minor, $patrolled, $nothing = ' ', $bot = false ) { $f = $new ? self::flag( 'newpage' ) : $nothing; $f .= $minor ? self::flag( 'minor' ) : $nothing; $f .= $bot ? self::flag( 'bot' ) : $nothing; @@ -123,47 +129,6 @@ class ChangesList { . '</abbr>'; } - /** - * Some explanatory wrapper text for the given flag, to be used in a legend - * explaining what the flags mean. For instance, "N - new page". See - * also flag(). - * - * @param $key String: 'newpage', 'unpatrolled', 'minor', or 'bot' - * @return String: Raw HTML - */ - private static function flagLine( $key ) { - return wfMsgExt( "recentchanges-legend-$key", array( 'escapenoentities', - 'replaceafter' ), self::flag( $key ) ); - } - - /** - * A handy legend to tell users what the little "m", "b", and so on mean. - * - * @return String: Raw HTML - */ - public static function flagLegend() { - global $wgGroupPermissions, $wgLang; - - $flags = array( self::flagLine( 'newpage' ), - self::flagLine( 'minor' ) ); - - # Don't show info on bot edits unless there's a bot group of some kind - foreach ( $wgGroupPermissions as $rights ) { - if ( isset( $rights['bot'] ) && $rights['bot'] ) { - $flags[] = self::flagLine( 'bot' ); - break; - } - } - - if ( self::usePatrol() ) { - $flags[] = self::flagLine( 'unpatrolled' ); - } - - return '<div class="mw-rc-label-legend">' . - wfMsgExt( 'recentchanges-label-legend', 'parseinline', - $wgLang->commaList( $flags ) ) . '</div>'; - } - /** * Returns text for the start of the tabular part of RC * @return String @@ -595,14 +560,14 @@ class EnhancedChangesList extends ChangesList { * @return String */ public function beginRecentChangesList() { - global $wgStylePath, $wgStyleVersion; + global $wgOut; $this->rc_cache = array(); $this->rcMoveIndex = 0; $this->rcCacheIndex = 0; $this->lastdate = ''; $this->rclistOpen = false; - $script = Html::linkedScript( $wgStylePath . "/common/enhancedchanges.js?$wgStyleVersion" ); - return $script; + $wgOut->addModules( 'mediawiki.legacy.enhancedchanges' ); + return ''; } /** * Format a line for enhanced recentchange (aka with javascript and block of lines). @@ -628,7 +593,7 @@ class EnhancedChangesList extends ChangesList { # Process current cache $ret = $this->recentChangesBlock(); $this->rc_cache = array(); - $ret .= Xml::element( 'h4', null, $date ); + $ret .= Xml::element( 'h4', null, $date ) . "\n"; $this->lastdate = $date; } @@ -771,7 +736,15 @@ class EnhancedChangesList extends ChangesList { wfProfileIn( __METHOD__ ); - $r = '<table class="mw-enhanced-rc"><tr>'; + # Add the namespace and title of the block as part of the class + if ( $block[0]->mAttribs['rc_log_type'] ) { + # Log entry + $classes = 'mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-log-' . $block[0]->mAttribs['rc_log_type'] . '-' . $block[0]->mAttribs['rc_title'] ); + } else { + $classes = 'mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-ns' . $block[0]->mAttribs['rc_namespace'] . '-' . $block[0]->mAttribs['rc_title'] ); + } + $r = Html::openElement( 'table', array( 'class' => $classes ) ) . + Html::openElement( 'tr' ); # Collate list of users $userlinks = array(); @@ -841,13 +814,13 @@ class EnhancedChangesList extends ChangesList { $tl = "<span id='mw-rc-openarrow-$jsid' class='mw-changeslist-expanded' style='visibility:hidden'><a href='#' $toggleLink title='$expandTitle'>" . $this->sideArrow() . "</a></span>"; $tl .= "<span id='mw-rc-closearrow-$jsid' class='mw-changeslist-hidden' style='display:none'><a href='#' $toggleLink title='$closeTitle'>" . $this->downArrow() . "</a></span>"; - $r .= '<td class="mw-enhanced-rc">'.$tl.' '; + $r .= '<td class="mw-enhanced-rc">'.$tl.' '; # Main line - $r .= $this->recentChangesFlags( $isnew, false, $unpatrolled, ' ', $bot ); + $r .= $this->recentChangesFlags( $isnew, false, $unpatrolled, ' ', $bot ); # Timestamp - $r .= ' '.$block[0]->timestamp.' </td><td style="padding:0px;">'; + $r .= ' '.$block[0]->timestamp.' </td><td style="padding:0px;">'; # Article link if( $namehidden ) { @@ -951,8 +924,8 @@ class EnhancedChangesList extends ChangesList { #$r .= '<tr><td valign="top">'.$this->spacerArrow(); $r .= '<tr><td style="vertical-align:top;font-family:monospace; padding:0px;">'; $r .= $this->spacerIndent() . $this->spacerIndent(); - $r .= $this->recentChangesFlags( $rc_new, $rc_minor, $rcObj->unpatrolled, ' ', $rc_bot ); - $r .= ' </td><td style="vertical-align:top; padding:0px;"><span style="font-family:monospace">'; + $r .= $this->recentChangesFlags( $rc_new, $rc_minor, $rcObj->unpatrolled, ' ', $rc_bot ); + $r .= ' </td><td style="vertical-align:top; padding:0px;"><span style="font-family:monospace">'; $params = $queryParams; @@ -1067,7 +1040,7 @@ class EnhancedChangesList extends ChangesList { * @return String: HTML <td> tag */ protected function spacerIndent() { - return '     '; + return '     '; } /** @@ -1082,19 +1055,27 @@ class EnhancedChangesList extends ChangesList { # Extract fields from DB into the function scope (rc_xxxx variables) // FIXME: Would be good to replace this extract() call with something // that explicitly initializes variables. - $classes = array(); // TODO implement + // TODO implement extract( $rcObj->mAttribs ); $query['curid'] = $rc_cur_id; - $r = '<table class="mw-enhanced-rc"><tr>'; - $r .= '<td class="mw-enhanced-rc">' . $this->spacerArrow() . ' '; + if( $rc_log_type ) { + # Log entry + $classes = 'mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-log-' . $rc_log_type . '-' . $rcObj->mAttribs['rc_title'] ); + } else { + $classes = 'mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-ns' . $rcObj->mAttribs['rc_namespace'] . '-' . $rcObj->mAttribs['rc_title'] ); + } + $r = Html::openElement( 'table', array( 'class' => $classes ) ) . + Html::openElement( 'tr' ); + + $r .= '<td class="mw-enhanced-rc">' . $this->spacerArrow() . ' '; # Flag and Timestamp if( $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) { - $r .= '    '; // 4 flags -> 4 spaces + $r .= '    '; // 4 flags -> 4 spaces } else { - $r .= $this->recentChangesFlags( $rc_type == RC_NEW, $rc_minor, $rcObj->unpatrolled, ' ', $rc_bot ); + $r .= $this->recentChangesFlags( $rc_type == RC_NEW, $rc_minor, $rcObj->unpatrolled, ' ', $rc_bot ); } - $r .= ' '.$rcObj->timestamp.' </td><td style="padding:0px;">'; + $r .= ' '.$rcObj->timestamp.' </td><td style="padding:0px;">'; # Article or log link if( $rc_log_type ) { $logtitle = Title::newFromText( "Log/$rc_log_type", NS_SPECIAL ); @@ -1140,6 +1121,7 @@ class EnhancedChangesList extends ChangesList { $this->insertComment( $r, $rcObj ); $this->insertRollback( $r, $rcObj ); # Tags + $classes = explode( ' ', $classes ); $this->insertTags( $r, $rcObj, $classes ); # Show how many people are watching this if enabled $r .= $this->numberofWatchingusers($rcObj->numberofWatchingusers); diff --git a/includes/Collation.php b/includes/Collation.php new file mode 100644 index 00000000..f00b568f --- /dev/null +++ b/includes/Collation.php @@ -0,0 +1,307 @@ +<?php + +abstract class Collation { + static $instance; + + static function singleton() { + if ( !self::$instance ) { + global $wgCategoryCollation; + self::$instance = self::factory( $wgCategoryCollation ); + } + return self::$instance; + } + + static function factory( $collationName ) { + switch( $collationName ) { + case 'uppercase': + return new UppercaseCollation; + case 'uca-default': + return new IcuCollation( 'root' ); + default: + throw new MWException( __METHOD__.": unknown collation type \"$collationName\"" ); + } + } + + /** + * Given a string, convert it to a (hopefully short) key that can be used + * for efficient sorting. A binary sort according to the sortkeys + * corresponds to a logical sort of the corresponding strings. Current + * code expects that a line feed character should sort before all others, but + * has no other particular expectations (and that one can be changed if + * necessary). + * + * @param string $string UTF-8 string + * @return string Binary sortkey + */ + abstract function getSortKey( $string ); + + /** + * Given a string, return the logical "first letter" to be used for + * grouping on category pages and so on. This has to be coordinated + * carefully with convertToSortkey(), or else the sorted list might jump + * back and forth between the same "initial letters" or other pathological + * behavior. For instance, if you just return the first character, but "a" + * sorts the same as "A" based on getSortKey(), then you might get a + * list like + * + * == A == + * * [[Aardvark]] + * + * == a == + * * [[antelope]] + * + * == A == + * * [[Ape]] + * + * etc., assuming for the sake of argument that $wgCapitalLinks is false. + * + * @param string $string UTF-8 string + * @return string UTF-8 string corresponding to the first letter of input + */ + abstract function getFirstLetter( $string ); +} + +class UppercaseCollation extends Collation { + var $lang; + function __construct() { + // Get a language object so that we can use the generic UTF-8 uppercase + // function there + $this->lang = Language::factory( 'en' ); + } + + function getSortKey( $string ) { + return $this->lang->uc( $string ); + } + + function getFirstLetter( $string ) { + if ( $string[0] == "\0" ) { + $string = substr( $string, 1 ); + } + return $this->lang->ucfirst( $this->lang->firstChar( $string ) ); + } +} + +class IcuCollation extends Collation { + var $primaryCollator, $mainCollator, $locale; + var $firstLetterData; + + /** + * Unified CJK blocks. + * + * The same definition of a CJK block must be used for both Collation and + * generateCollationData.php. These blocks are omitted from the first + * letter data, as an optimisation measure and because the default UCA table + * is pretty useless for sorting Chinese text anyway. Japanese and Korean + * blocks are not included here, because they are smaller and more useful. + */ + static $cjkBlocks = array( + array( 0x2E80, 0x2EFF ), // CJK Radicals Supplement + array( 0x2F00, 0x2FDF ), // Kangxi Radicals + array( 0x2FF0, 0x2FFF ), // Ideographic Description Characters + array( 0x3000, 0x303F ), // CJK Symbols and Punctuation + array( 0x31C0, 0x31EF ), // CJK Strokes + array( 0x3200, 0x32FF ), // Enclosed CJK Letters and Months + array( 0x3300, 0x33FF ), // CJK Compatibility + array( 0x3400, 0x4DBF ), // CJK Unified Ideographs Extension A + array( 0x4E00, 0x9FFF ), // CJK Unified Ideographs + array( 0xF900, 0xFAFF ), // CJK Compatibility Ideographs + array( 0xFE30, 0xFE4F ), // CJK Compatibility Forms + array( 0x20000, 0x2A6DF ), // CJK Unified Ideographs Extension B + array( 0x2A700, 0x2B73F ), // CJK Unified Ideographs Extension C + array( 0x2B740, 0x2B81F ), // CJK Unified Ideographs Extension D + array( 0x2F800, 0x2FA1F ), // CJK Compatibility Ideographs Supplement + ); + + const RECORD_LENGTH = 14; + + function __construct( $locale ) { + if ( !extension_loaded( 'intl' ) ) { + throw new MWException( 'An ICU collation was requested, ' . + 'but the intl extension is not available.' ); + } + $this->locale = $locale; + $this->mainCollator = Collator::create( $locale ); + if ( !$this->mainCollator ) { + throw new MWException( "Invalid ICU locale specified for collation: $locale" ); + } + + $this->primaryCollator = Collator::create( $locale ); + $this->primaryCollator->setStrength( Collator::PRIMARY ); + } + + function getSortKey( $string ) { + // intl extension produces non null-terminated + // strings. Appending '' fixes it so that it doesn't generate + // a warning on each access in debug php. + wfSuppressWarnings(); + $key = $this->mainCollator->getSortKey( $string ) . ''; + wfRestoreWarnings(); + return $key; + } + + function getPrimarySortKey( $string ) { + wfSuppressWarnings(); + $key = $this->primaryCollator->getSortKey( $string ) . ''; + wfRestoreWarnings(); + return $key; + } + + function getFirstLetter( $string ) { + $string = strval( $string ); + if ( $string === '' ) { + return ''; + } + + // Check for CJK + $firstChar = mb_substr( $string, 0, 1, 'UTF-8' ); + if ( ord( $firstChar ) > 0x7f + && self::isCjk( utf8ToCodepoint( $firstChar ) ) ) + { + return $firstChar; + } + + $sortKey = $this->getPrimarySortKey( $string ); + + // Do a binary search to find the correct letter to sort under + $min = $this->findLowerBound( + array( $this, 'getSortKeyByLetterIndex' ), + $this->getFirstLetterCount(), + 'strcmp', + $sortKey ); + + if ( $min === false ) { + // Before the first letter + return ''; + } + return $this->getLetterByIndex( $min ); + } + + function getFirstLetterData() { + if ( $this->firstLetterData !== null ) { + return $this->firstLetterData; + } + + $cache = wfGetCache( CACHE_ANYTHING ); + $cacheKey = wfMemcKey( 'first-letters', $this->locale ); + $cacheEntry = $cache->get( $cacheKey ); + + if ( $cacheEntry ) { + $this->firstLetterData = $cacheEntry; + return $this->firstLetterData; + } + + // Generate data from serialized data file + + $letters = wfGetPrecompiledData( "first-letters-{$this->locale}.ser" ); + if ( $letters === false ) { + throw new MWException( "MediaWiki does not support ICU locale " . + "\"{$this->locale}\"" ); + } + + // Sort the letters. + // + // It's impossible to have the precompiled data file properly sorted, + // because the sort order changes depending on ICU version. If the + // array is not properly sorted, the binary search will return random + // results. + // + // We also take this opportunity to remove primary collisions. + $letterMap = array(); + foreach ( $letters as $letter ) { + $key = $this->getPrimarySortKey( $letter ); + if ( isset( $letterMap[$key] ) ) { + // Primary collision + // Keep whichever one sorts first in the main collator + if ( $this->mainCollator->compare( $letter, $letterMap[$key] ) < 0 ) { + $letterMap[$key] = $letter; + } + } else { + $letterMap[$key] = $letter; + } + } + ksort( $letterMap, SORT_STRING ); + $data = array( + 'chars' => array_values( $letterMap ), + 'keys' => array_keys( $letterMap ) + ); + + // Reduce memory usage before caching + unset( $letterMap ); + + // Save to cache + $this->firstLetterData = $data; + $cache->set( $cacheKey, $data, 86400 * 7 /* 1 week */ ); + return $data; + } + + function getLetterByIndex( $index ) { + if ( $this->firstLetterData === null ) { + $this->getFirstLetterData(); + } + return $this->firstLetterData['chars'][$index]; + } + + function getSortKeyByLetterIndex( $index ) { + if ( $this->firstLetterData === null ) { + $this->getFirstLetterData(); + } + return $this->firstLetterData['keys'][$index]; + } + + function getFirstLetterCount() { + if ( $this->firstLetterData === null ) { + $this->getFirstLetterData(); + } + return count( $this->firstLetterData['chars'] ); + } + + /** + * Do a binary search, and return the index of the largest item that sorts + * less than or equal to the target value. + * + * @param $valueCallback A function to call to get the value with + * a given array index. + * @param $valueCount The number of items accessible via $valueCallback, + * indexed from 0 to $valueCount - 1 + * @param $comparisonCallback A callback to compare two values, returning + * -1, 0 or 1 in the style of strcmp(). + * @param $target The target value to find. + * + * @return The item index of the lower bound, or false if the target value + * sorts before all items. + */ + function findLowerBound( $valueCallback, $valueCount, $comparisonCallback, $target ) { + $min = 0; + $max = $valueCount - 1; + do { + $mid = $min + ( ( $max - $min ) >> 1 ); + $item = call_user_func( $valueCallback, $mid ); + $comparison = call_user_func( $comparisonCallback, $target, $item ); + if ( $comparison > 0 ) { + $min = $mid; + } elseif ( $comparison == 0 ) { + $min = $mid; + break; + } else { + $max = $mid; + } + } while ( $min < $max - 1 ); + + if ( $min == 0 && $max == 0 && $comparison > 0 ) { + // Before the first item + return false; + } else { + return $min; + } + } + + static function isCjk( $codepoint ) { + foreach ( self::$cjkBlocks as $block ) { + if ( $codepoint >= $block[0] && $codepoint <= $block[1] ) { + return true; + } + } + return false; + } +} + diff --git a/includes/ConfEditor.php b/includes/ConfEditor.php index f862ebb7..b08b77df 100644 --- a/includes/ConfEditor.php +++ b/includes/ConfEditor.php @@ -72,7 +72,7 @@ class ConfEditor { var $pathInfo; /** - * Next serial number for whitespace placeholder paths (@extra-N) + * Next serial number for whitespace placeholder paths (\@extra-N) */ var $serial; @@ -104,7 +104,7 @@ class ConfEditor { /** * Edit the text. Returns the edited text. - * @param array $ops Array of operations. + * @param $ops Array of operations. * * Operations are given as an associative array, with members: * type: One of delete, set, append or insert (required) @@ -176,7 +176,7 @@ class ConfEditor { // Has it got a comma already? if ( strpos( $lastEltPath, '@extra' ) === false && !$lastEltInfo['hasComma'] ) { // No comma, insert one after the value region - list( $start, $end ) = $this->findValueRegion( $lastEltPath ); + list( , $end ) = $this->findValueRegion( $lastEltPath ); $this->replaceSourceRegion( $end - 1, $end - 1, ',' ); } @@ -184,7 +184,7 @@ class ConfEditor { list( $start, $end ) = $this->findDeletionRegion( $lastEltPath ); if ( $key === null ) { - list( $indent, $arrowIndent ) = $this->getIndent( $start ); + list( $indent, ) = $this->getIndent( $start ); $textToInsert = "$indent$value,"; } else { list( $indent, $arrowIndent ) = @@ -202,12 +202,12 @@ class ConfEditor { if ( $firstEltPath === false ) { throw new MWException( "Can't find array element of \"$path\"" ); } - list( $start, $end ) = $this->findDeletionRegion( $firstEltPath ); + list( $start, ) = $this->findDeletionRegion( $firstEltPath ); $info = $this->pathInfo[$firstEltPath]; // Make the text to insert if ( $key === null ) { - list( $indent, $arrowIndent ) = $this->getIndent( $start ); + list( $indent, ) = $this->getIndent( $start ); $textToInsert = "$indent$value,"; } else { list( $indent, $arrowIndent ) = @@ -336,7 +336,7 @@ class ConfEditor { // Split all copy operations with a source corresponding to the region // in question. $newEdits = array(); - foreach ( $this->edits as $i => $edit ) { + foreach ( $this->edits as $edit ) { if ( $edit[0] !== 'copy' ) { $newEdits[] = $edit; continue; @@ -427,7 +427,7 @@ class ConfEditor { */ function findValueRegion( $pathName ) { if ( !isset( $this->pathInfo[$pathName] ) ) { - throw new MWEXception( "Can't find path \"$pathName\"" ); + throw new MWException( "Can't find path \"$pathName\"" ); } $path = $this->pathInfo[$pathName]; if ( $path['valueStartByte'] === false || $path['valueEndByte'] === false ) { @@ -438,7 +438,7 @@ class ConfEditor { /** * Find the path name of the last element in the array. - * If the array is empty, this will return the @extra interstitial element. + * If the array is empty, this will return the \@extra interstitial element. * If the specified path is not found or is not an array, it will return false. */ function findLastArrayElement( $path ) { @@ -474,7 +474,7 @@ class ConfEditor { /* * Find the path name of first element in the array. - * If the array is empty, this will return the @extra interstitial element. + * If the array is empty, this will return the \@extra interstitial element. * If the specified path is not found or is not an array, it will return false. */ function findFirstArrayElement( $path ) { @@ -510,7 +510,6 @@ class ConfEditor { $indent = false; } if ( $indent !== false && $arrowPos !== false ) { - $textToInsert = "$indent$key "; $arrowIndentLength = $arrowPos - $pos - $indentLength - strlen( $key ); if ( $arrowIndentLength > 0 ) { $arrowIndent = str_repeat( ' ', $arrowIndentLength ); @@ -537,7 +536,7 @@ class ConfEditor { switch ( $state ) { case 'file': - $token = $this->expect( T_OPEN_TAG ); + $this->expect( T_OPEN_TAG ); $token = $this->skipSpace(); if ( $token->isEnd() ) { break 2; @@ -836,7 +835,6 @@ class ConfEditor { * not call except from popPath() or nextPath(). */ function endPath() { - $i = count( $this->pathStack ) - 1; $key = ''; foreach ( $this->pathStack as $pathInfo ) { if ( $key !== '' ) { @@ -878,7 +876,7 @@ class ConfEditor { /** * Go to the next path on the same level. This ends the current path and - * starts a new one. If $path is @next, the new path is set to the next + * starts a new one. If $path is \@next, the new path is set to the next * numeric array element. */ function nextPath( $path ) { diff --git a/includes/Credits.php b/includes/Credits.php index 91ba3f16..e4c8be54 100644 --- a/includes/Credits.php +++ b/includes/Credits.php @@ -1,50 +1,51 @@ <?php /** - * Credits.php -- formats credits for articles + * Formats credits for articles + * * Copyright 2004, Evan Prodromou <evan@wikitravel.org>. * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This program is 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. + * 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 + * 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 * + * @file * @author <evan@wikitravel.org> */ class Credits { - /** * This is largely cadged from PageHistory::history * @param $article Article object */ public static function showPage( Article $article ) { global $wgOut; - + wfProfileIn( __METHOD__ ); - + $wgOut->setPageTitle( $article->mTitle->getPrefixedText() ); $wgOut->setSubtitle( wfMsg( 'creditspage' ) ); $wgOut->setArticleFlag( false ); $wgOut->setArticleRelated( true ); $wgOut->setRobotPolicy( 'noindex,nofollow' ); - - if( $article->mTitle->getArticleID() == 0 ) { + + if ( $article->mTitle->getArticleID() == 0 ) { $s = wfMsg( 'nocredits' ); } else { - $s = self::getCredits($article, -1 ); + $s = self::getCredits( $article, -1 ); } - + $wgOut->addHTML( $s ); - + wfProfileOut( __METHOD__ ); } @@ -59,7 +60,7 @@ class Credits { wfProfileIn( __METHOD__ ); $s = ''; - if( isset( $cnt ) && $cnt != 0 ){ + if ( isset( $cnt ) && $cnt != 0 ) { $s = self::getAuthor( $article ); if ( $cnt > 1 || $cnt < 0 ) { $s .= ' ' . self::getContributors( $article, $cnt - 1, $showIfMax ); @@ -74,13 +75,13 @@ class Credits { * Get the last author with the last modification time * @param $article Article object */ - protected static function getAuthor( Article $article ){ + protected static function getAuthor( Article $article ) { global $wgLang; $user = User::newFromId( $article->getUser() ); $timestamp = $article->getTimestamp(); - if( $timestamp ){ + if ( $timestamp ) { $d = $wgLang->date( $article->getTimestamp(), true ); $t = $wgLang->time( $article->getTimestamp(), true ); } else { @@ -99,62 +100,72 @@ class Credits { */ protected static function getContributors( Article $article, $cnt, $showIfMax ) { global $wgLang, $wgHiddenPrefs; - + $contributors = $article->getContributors(); - + $others_link = false; - + # Hmm... too many to fit! - if( $cnt > 0 && $contributors->count() > $cnt ){ + if ( $cnt > 0 && $contributors->count() > $cnt ) { $others_link = self::othersLink( $article ); - if( !$showIfMax ) - return wfMsg( 'othercontribs', $others_link ); + if ( !$showIfMax ) + return wfMsgExt( 'othercontribs', 'parsemag', $others_link, $contributors->count() ); } - + $real_names = array(); $user_names = array(); $anon_ips = array(); - + # Sift for real versus user names - foreach( $contributors as $user ) { + foreach ( $contributors as $user ) { $cnt--; - if( $user->isLoggedIn() ){ + if ( $user->isLoggedIn() ) { $link = self::link( $user ); - if( !in_array( 'realname', $wgHiddenPrefs ) && $user->getRealName() ) + if ( !in_array( 'realname', $wgHiddenPrefs ) && $user->getRealName() ) { $real_names[] = $link; - else + } else { $user_names[] = $link; + } } else { $anon_ips[] = self::link( $user ); } - if( $cnt == 0 ) break; + + if ( $cnt == 0 ) { + break; + } } - + if ( count( $real_names ) ) { $real = $wgLang->listToText( $real_names ); } else { $real = false; } - + # "ThisSite user(s) A, B and C" - if( count( $user_names ) ){ - $user = wfMsgExt( 'siteusers', array( 'parsemag' ), - $wgLang->listToText( $user_names ), count( $user_names ) ); + if ( count( $user_names ) ) { + $user = wfMsgExt( + 'siteusers', + 'parsemag', + $wgLang->listToText( $user_names ), count( $user_names ) + ); } else { $user = false; } - if( count( $anon_ips ) ){ - $anon = wfMsgExt( 'anonusers', array( 'parsemag' ), - $wgLang->listToText( $anon_ips ), count( $anon_ips ) ); + if ( count( $anon_ips ) ) { + $anon = wfMsgExt( + 'anonusers', + 'parsemag', + $wgLang->listToText( $anon_ips ), count( $anon_ips ) + ); } else { $anon = false; } - + # This is the big list, all mooshed together. We sift for blank strings $fulllist = array(); - foreach( array( $real, $user, $anon, $others_link ) as $s ){ - if( $s ){ + foreach ( array( $real, $user, $anon, $others_link ) as $s ) { + if ( $s ) { array_push( $fulllist, $s ); } } @@ -163,7 +174,9 @@ class Credits { $creds = $wgLang->listToText( $fulllist ); # "Based on work by ..." - return strlen( $creds ) ? wfMsg( 'othercontribs', $creds ) : ''; + return strlen( $creds ) + ? wfMsgExt( 'othercontribs', 'parsemag', $creds, count( $fulllist ) ) + : ''; } /** @@ -173,10 +186,11 @@ class Credits { */ protected static function link( User $user ) { global $wgUser, $wgHiddenPrefs; - if( !in_array( 'realname', $wgHiddenPrefs ) && !$user->isAnon() ) + if ( !in_array( 'realname', $wgHiddenPrefs ) && !$user->isAnon() ) { $real = $user->getRealName(); - else + } else { $real = false; + } $skin = $wgUser->getSkin(); $page = $user->isAnon() ? @@ -188,20 +202,20 @@ class Credits { /** * Get a link to $user's user page - * @param $user_name String: user name - * @param $linkText String: optional display + * @param $user User object * @return String: html */ protected static function userLink( User $user ) { $link = self::link( $user ); - if( $user->isAnon() ){ + if ( $user->isAnon() ) { return wfMsgExt( 'anonuser', array( 'parseinline', 'replaceafter' ), $link ); } else { global $wgHiddenPrefs; - if( !in_array( 'realname', $wgHiddenPrefs ) && $user->getRealName() ) + if ( !in_array( 'realname', $wgHiddenPrefs ) && $user->getRealName() ) { return $link; - else - return wfMsgExt( 'siteuser', array( 'parseinline', 'replaceafter' ), $link ); + } else { + return wfMsgExt( 'siteuser', 'parsemag', $link, $user->getName() ); + } } } @@ -213,6 +227,12 @@ class Credits { protected static function othersLink( Article $article ) { global $wgUser; $skin = $wgUser->getSkin(); - return $skin->link( $article->getTitle(), wfMsgHtml( 'others' ), array(), array( 'action' => 'credits' ), array( 'known' ) ); + return $skin->link( + $article->getTitle(), + wfMsgHtml( 'others' ), + array(), + array( 'action' => 'credits' ), + array( 'known' ) + ); } } diff --git a/includes/DatabaseFunctions.php b/includes/DatabaseFunctions.php deleted file mode 100644 index 2df56115..00000000 --- a/includes/DatabaseFunctions.php +++ /dev/null @@ -1,412 +0,0 @@ -<?php -/** - * Legacy database functions, for compatibility with pre-1.3 code - * NOTE: this file is no longer loaded by default. - * @file - * @ingroup Database - */ - -/** - * Usually aborts on failure - * If errors are explicitly ignored, returns success - * @param $sql String: SQL query - * @param $db Mixed: database handler - * @param $fname String: name of the php function calling - */ -function wfQuery( $sql, $db, $fname = '' ) { - if ( !is_numeric( $db ) ) { - # Someone has tried to call this the old way - throw new FatalError( wfMsgNoDB( 'wrong_wfQuery_params', $db, $sql ) ); - } - $c = wfGetDB( $db ); - if ( $c !== false ) { - return $c->query( $sql, $fname ); - } else { - return false; - } -} - -/** - * - * @param $sql String: SQL query - * @param $dbi - * @param $fname String: name of the php function calling - * @return Array: first row from the database - */ -function wfSingleQuery( $sql, $dbi, $fname = '' ) { - $db = wfGetDB( $dbi ); - $res = $db->query($sql, $fname ); - $row = $db->fetchRow( $res ); - $ret = $row[0]; - $db->freeResult( $res ); - return $ret; -} - -/** - * Turns on (false) or off (true) the automatic generation and sending - * of a "we're sorry, but there has been a database error" page on - * database errors. Default is on (false). When turned off, the - * code should use wfLastErrno() and wfLastError() to handle the - * situation as appropriate. - * - * @param $newstate - * @param $dbi - * @return Returns the previous state. - */ -function wfIgnoreSQLErrors( $newstate, $dbi = DB_LAST ) { - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->ignoreErrors( $newstate ); - } else { - return null; - } -} - -/**#@+ - * @param $res Database result handler - * @param $dbi -*/ - -/** - * Free a database result - * @return Bool: whether result is sucessful or not. - */ -function wfFreeResult( $res, $dbi = DB_LAST ) -{ - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - $db->freeResult( $res ); - return true; - } else { - return false; - } -} - -/** - * Get an object from a database result - * @return object|false object we requested - */ -function wfFetchObject( $res, $dbi = DB_LAST ) { - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->fetchObject( $res, $dbi = DB_LAST ); - } else { - return false; - } -} - -/** - * Get a row from a database result - * @return object|false row we requested - */ -function wfFetchRow( $res, $dbi = DB_LAST ) { - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->fetchRow ( $res, $dbi = DB_LAST ); - } else { - return false; - } -} - -/** - * Get a number of rows from a database result - * @return integer|false number of rows - */ -function wfNumRows( $res, $dbi = DB_LAST ) { - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->numRows( $res, $dbi = DB_LAST ); - } else { - return false; - } -} - -/** - * Get the number of fields from a database result - * @return integer|false number of fields - */ -function wfNumFields( $res, $dbi = DB_LAST ) { - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->numFields( $res ); - } else { - return false; - } -} - -/** - * Return name of a field in a result - * @param $res Mixed: Ressource link see Database::fieldName() - * @param $n Integer: id of the field - * @param $dbi Default DB_LAST - * @return string|false name of field - */ -function wfFieldName( $res, $n, $dbi = DB_LAST ) -{ - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->fieldName( $res, $n, $dbi = DB_LAST ); - } else { - return false; - } -} -/**#@-*/ - -/** - * @todo document function - * @see Database::insertId() - */ -function wfInsertId( $dbi = DB_LAST ) { - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->insertId(); - } else { - return false; - } -} - -/** - * @todo document function - * @see Database::dataSeek() - */ -function wfDataSeek( $res, $row, $dbi = DB_LAST ) { - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->dataSeek( $res, $row ); - } else { - return false; - } -} - -/** - * Get the last error number - * @see Database::lastErrno() - */ -function wfLastErrno( $dbi = DB_LAST ) { - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->lastErrno(); - } else { - return false; - } -} - -/** - * Get the last error - * @see Database::lastError() - */ -function wfLastError( $dbi = DB_LAST ) { - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->lastError(); - } else { - return false; - } -} - -/** - * Get the number of affected rows - * @see Database::affectedRows() - */ -function wfAffectedRows( $dbi = DB_LAST ) { - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->affectedRows(); - } else { - return false; - } -} - -/** - * Get the last query ran - * @see Database::lastQuery - */ -function wfLastDBquery( $dbi = DB_LAST ) { - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->lastQuery(); - } else { - return false; - } -} - -/** - * @see Database::Set() - * @todo document function - * @param $table - * @param $var - * @param $value - * @param $cond - * @param $dbi Default DB_MASTER - */ -function wfSetSQL( $table, $var, $value, $cond, $dbi = DB_MASTER ) -{ - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->set( $table, $var, $value, $cond ); - } else { - return false; - } -} - - -/** - * Simple select wrapper, return one field - * @see Database::selectField() - * @param $table - * @param $var - * @param $cond Default '' - * @param $dbi Default DB_LAST - */ -function wfGetSQL( $table, $var, $cond='', $dbi = DB_LAST ) -{ - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->selectField( $table, $var, $cond ); - } else { - return false; - } -} - -/** - * Does a given field exist on the specified table? - * @see Database::fieldExists() - * @param $table - * @param $field - * @param $dbi Default DB_LAST - * @return Result of Database::fieldExists() or false. - */ -function wfFieldExists( $table, $field, $dbi = DB_LAST ) { - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->fieldExists( $table, $field ); - } else { - return false; - } -} - -/** - * Does the requested index exist on the specified table? - * @see Database::indexExists() - * @param $table String - * @param $index - * @param $dbi Default DB_LAST - * @return Result of Database::indexExists() or false. - */ -function wfIndexExists( $table, $index, $dbi = DB_LAST ) { - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->indexExists( $table, $index ); - } else { - return false; - } -} - -/** - * @see Database::insert() - * @todo document function - * @param $table String - * @param $array Array - * @param $fname String, default 'wfInsertArray'. - * @param $dbi Default DB_MASTER - * @return result of Database::insert() or false. - */ -function wfInsertArray( $table, $array, $fname = 'wfInsertArray', $dbi = DB_MASTER ) { - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->insert( $table, $array, $fname ); - } else { - return false; - } -} - -/** - * @see Database::getArray() - * @todo document function - * @param $table String - * @param $vars - * @param $conds - * @param $fname String, default 'wfGetArray'. - * @param $dbi Default DB_LAST - * @return result of Database::getArray() or false. - */ -function wfGetArray( $table, $vars, $conds, $fname = 'wfGetArray', $dbi = DB_LAST ) { - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->getArray( $table, $vars, $conds, $fname ); - } else { - return false; - } -} - -/** - * @see Database::update() - * @param $table String - * @param $values - * @param $conds - * @param $fname String, default 'wfUpdateArray' - * @param $dbi Default DB_MASTER - * @return Result of Database::update()) or false; - * @todo document function - */ -function wfUpdateArray( $table, $values, $conds, $fname = 'wfUpdateArray', $dbi = DB_MASTER ) { - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - $db->update( $table, $values, $conds, $fname ); - return true; - } else { - return false; - } -} - -/** - * Get fully usable table name - * @see Database::tableName() - */ -function wfTableName( $name, $dbi = DB_LAST ) { - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->tableName( $name ); - } else { - return false; - } -} - -/** - * @todo document function - * @see Database::strencode() - */ -function wfStrencode( $s, $dbi = DB_LAST ) { - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->strencode( $s ); - } else { - return false; - } -} - -/** - * @todo document function - * @see Database::nextSequenceValue() - */ -function wfNextSequenceValue( $seqName, $dbi = DB_MASTER ) { - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->nextSequenceValue( $seqName ); - } else { - return false; - } -} - -/** - * @todo document function - * @see Database::useIndexClause() - */ -function wfUseIndexClause( $index, $dbi = DB_SLAVE ) { - $db = wfGetDB( $dbi ); - if ( $db !== false ) { - return $db->useIndexClause( $index ); - } else { - return false; - } -} diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 54a96d44..ae6fc1b7 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -1,5 +1,6 @@ <?php /** + * @file * * NEVER EDIT THIS FILE * @@ -14,80 +15,78 @@ * * Documentation is in the source and on: * http://www.mediawiki.org/wiki/Manual:Configuration_settings - * */ -# This is not a valid entry point, perform no further processing unless MEDIAWIKI is defined +/** + * @cond file_level_code + * This is not a valid entry point, perform no further processing unless MEDIAWIKI is defined + */ if( !defined( 'MEDIAWIKI' ) ) { echo "This file is part of MediaWiki and is not a valid entry point\n"; die( 1 ); } -/** - * Create a site configuration object - * Not used for much in a default install - */ +# Create a site configuration object. Not used for much in a default install if ( !defined( 'MW_PHP4' ) ) { require_once( "$IP/includes/SiteConfiguration.php" ); $wgConf = new SiteConfiguration; } +/** @endcond */ /** MediaWiki version number */ -$wgVersion = '1.16.5'; +$wgVersion = '1.17.0'; /** Name of the site. It must be changed in LocalSettings.php */ $wgSitename = 'MediaWiki'; /** - * Name of the project namespace. If left set to false, $wgSitename will be - * used instead. - */ -$wgMetaNamespace = false; - -/** - * Name of the project talk namespace. + * URL of the server. It will be automatically built including https mode. * - * Normally you can ignore this and it will be something like - * $wgMetaNamespace . "_talk". In some languages, you may want to set this - * manually for grammatical reasons. It is currently only respected by those - * languages where it might be relevant and where no automatic grammar converter - * exists. + * Example: + * <code> + * $wgServer = http://example.com + * </code> + * + * This is usually detected correctly by MediaWiki. If MediaWiki detects the + * wrong server, it will redirect incorrectly after you save a page. In that + * case, set this variable to fix it. */ -$wgMetaNamespaceTalk = false; - - -/** URL of the server. It will be automatically built including https mode */ $wgServer = ''; +/** @cond file_level_code */ if( isset( $_SERVER['SERVER_NAME'] ) ) { - $wgServerName = $_SERVER['SERVER_NAME']; + $serverName = $_SERVER['SERVER_NAME']; } elseif( isset( $_SERVER['HOSTNAME'] ) ) { - $wgServerName = $_SERVER['HOSTNAME']; + $serverName = $_SERVER['HOSTNAME']; } elseif( isset( $_SERVER['HTTP_HOST'] ) ) { - $wgServerName = $_SERVER['HTTP_HOST']; + $serverName = $_SERVER['HTTP_HOST']; } elseif( isset( $_SERVER['SERVER_ADDR'] ) ) { - $wgServerName = $_SERVER['SERVER_ADDR']; + $serverName = $_SERVER['SERVER_ADDR']; } else { - $wgServerName = 'localhost'; + $serverName = 'localhost'; } -# check if server use https: $wgProto = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https' : 'http'; -$wgServer = $wgProto.'://' . $wgServerName; +$wgServer = $wgProto.'://' . $serverName; # If the port is a non-standard one, add it to the URL if( isset( $_SERVER['SERVER_PORT'] ) - && !strpos( $wgServerName, ':' ) - && ( ( $wgProto == 'http' && $_SERVER['SERVER_PORT'] != 80 ) + && !strpos( $serverName, ':' ) + && ( ( $wgProto == 'http' && $_SERVER['SERVER_PORT'] != 80 ) || ( $wgProto == 'https' && $_SERVER['SERVER_PORT'] != 443 ) ) ) { $wgServer .= ":" . $_SERVER['SERVER_PORT']; } +/** @endcond */ +/************************************************************************//** + * @name Script path settings + * @{ + */ /** * The path we should point to. - * It might be a virtual path in case with use apache mod_rewrite for example + * It might be a virtual path in case with use apache mod_rewrite for example. * * This *needs* to be set correctly. * @@ -117,85 +116,207 @@ $wgUsePathInfo = ( strpos( php_sapi_name(), 'apache2filter' ) === false ) && ( strpos( php_sapi_name(), 'isapi' ) === false ); +/** + * The extension to append to script names by default. This can either be .php + * or .php5. + * + * Some hosting providers use PHP 4 for *.php files, and PHP 5 for *.php5. This + * variable is provided to support those providers. + */ +$wgScriptExtension = '.php'; + +/** + * The URL path to index.php. + * + * Defaults to "{$wgScriptPath}/index{$wgScriptExtension}". + */ +$wgScript = false; -/**@{ - * Script users will request to get articles - * ATTN: Old installations used wiki.phtml and redirect.phtml - make sure that - * LocalSettings.php is correctly set! +/** + * The URL path to redirect.php. This is a script that is used by the Nostalgia + * skin. * - * Will be set based on $wgScriptPath in Setup.php if not overridden in - * LocalSettings.php. Generally you should not need to change this unless you - * don't like seeing "index.php". + * Defaults to "{$wgScriptPath}/redirect{$wgScriptExtension}". */ -$wgScriptExtension = '.php'; ///< extension to append to script names by default -$wgScript = false; ///< defaults to "{$wgScriptPath}/index{$wgScriptExtension}" -$wgRedirectScript = false; ///< defaults to "{$wgScriptPath}/redirect{$wgScriptExtension}" -/**@}*/ +$wgRedirectScript = false; ///< defaults to + +/** + * The URL path to load.php. + * + * Defaults to "{$wgScriptPath}/load{$wgScriptExtension}". + */ +$wgLoadScript = false; +/**@}*/ -/**@{ +/************************************************************************//** + * @name URLs and file paths + * * These various web and file path variables are set to their defaults * in Setup.php if they are not explicitly set from LocalSettings.php. * If you do override them, be sure to set them all! * * These will relatively rarely need to be set manually, unless you are * splitting style sheets or images outside the main document root. + * + * In this section, a "path" is usually a host-relative URL, i.e. a URL without + * the host part, that starts with a slash. In most cases a full URL is also + * acceptable. A "directory" is a local file path. + * + * In both paths and directories, trailing slashes should not be included. + * + * @{ */ + /** - * asset paths as seen by users + * The URL path of the skins directory. Defaults to "{$wgScriptPath}/skins" */ -$wgStylePath = false; ///< defaults to "{$wgScriptPath}/skins" -$wgExtensionAssetsPath = false; ///< defaults to "{$wgScriptPath}/extensions" +$wgStylePath = false; +$wgStyleSheetPath = &$wgStylePath; /** - * filesystem stylesheets directory + * The URL path of the skins directory. Should not point to an external domain. + * Defaults to "{$wgScriptPath}/skins". + */ +$wgLocalStylePath = false; + +/** + * The URL path of the extensions directory. + * Defaults to "{$wgScriptPath}/extensions". + */ +$wgExtensionAssetsPath = false; + +/** + * Filesystem stylesheets directory. Defaults to "{$IP}/skins" + */ +$wgStyleDirectory = false; + +/** + * The URL path for primary article page views. This path should contain $1, + * which is replaced by the article title. + * + * Defaults to "{$wgScript}/$1" or "{$wgScript}?title=$1", depending on + * $wgUsePathInfo. + */ +$wgArticlePath = false; + +/** + * The URL path for the images directory. Defaults to "{$wgScriptPath}/images" + */ +$wgUploadPath = false; + +/** + * The filesystem path of the images directory. Defaults to "{$IP}/images". + */ +$wgUploadDirectory = false; + +/** + * The URL path of the wiki logo. The logo size should be 135x135 pixels. + * Defaults to "{$wgStylePath}/common/images/wiki.png". + */ +$wgLogo = false; + +/** + * The URL path of the shortcut icon. */ -$wgStyleDirectory = false; ///< defaults to "{$IP}/skins" -$wgStyleSheetPath = &$wgStylePath; -$wgArticlePath = false; ///< default to "{$wgScript}/$1" or "{$wgScript}?title=$1", depending on $wgUsePathInfo -$wgUploadPath = false; ///< defaults to "{$wgScriptPath}/images" -$wgUploadDirectory = false; ///< defaults to "{$IP}/images" -$wgHashedUploadDirectory = true; -$wgLogo = false; ///< defaults to "{$wgStylePath}/common/images/wiki.png" $wgFavicon = '/favicon.ico'; -$wgAppleTouchIcon = false; ///< This one'll actually default to off. For iPhone and iPod Touch web app bookmarks -$wgMathPath = false; ///< defaults to "{$wgUploadPath}/math" -$wgMathDirectory = false; ///< defaults to "{$wgUploadDirectory}/math" -$wgTmpDirectory = false; ///< defaults to "{$wgUploadDirectory}/tmp" -$wgUploadBaseUrl = ""; -/**@}*/ /** - * Directory for caching data in the local filesystem. Should not be accessible - * from the web. Set this to false to not use any local caches. + * The URL path of the icon for iPhone and iPod Touch web app bookmarks. + * Defaults to no icon. + */ +$wgAppleTouchIcon = false; + +/** + * The URL path of the math directory. Defaults to "{$wgUploadPath}/math". * - * Note: if multiple wikis share the same localisation cache directory, they - * must all have the same set of extensions. You can set a directory just for - * the localisation cache using $wgLocalisationCacheConf['storeDirectory']. + * See http://www.mediawiki.org/wiki/Manual:Enable_TeX for details about how to + * set up mathematical formula display. */ -$wgCacheDirectory = false; +$wgMathPath = false; /** - * Default value for chmoding of new directories. + * The filesystem path of the math directory. + * Defaults to "{$wgUploadDirectory}/math". + * + * See http://www.mediawiki.org/wiki/Manual:Enable_TeX for details about how to + * set up mathematical formula display. */ -$wgDirectoryMode = 0777; +$wgMathDirectory = false; /** - * New file storage paths; currently used only for deleted files. - * Set it like this: + * The local filesystem path to a temporary directory. This is not required to + * be web accessible. * - * $wgFileStore['deleted']['directory'] = '/var/wiki/private/deleted'; + * Defaults to "{$wgUploadDirectory}/tmp". + */ +$wgTmpDirectory = false; + +/** + * If set, this URL is added to the start of $wgUploadPath to form a complete + * upload URL. + */ +$wgUploadBaseUrl = ""; + +/** + * To enable remote on-demand scaling, set this to the thumbnail base URL. + * Full thumbnail URL will be like $wgUploadStashScalerBaseUrl/e/e6/Foo.jpg/123px-Foo.jpg + * where 'e6' are the first two characters of the MD5 hash of the file name. + * If $wgUploadStashScalerBaseUrl is set to false, thumbs are rendered locally as needed. + */ +$wgUploadStashScalerBaseUrl = false; + +/** + * To set 'pretty' URL paths for actions other than + * plain page views, add to this array. For instance: + * 'edit' => "$wgScriptPath/edit/$1" * + * There must be an appropriate script or rewrite rule + * in place to handle these URLs. + */ +$wgActionPaths = array(); + +/**@}*/ + +/************************************************************************//** + * @name Files and file uploads + * @{ + */ + +/** Uploads have to be specially set up to be secure */ +$wgEnableUploads = false; + +/** Allows to move images and other media files */ +$wgAllowImageMoving = true; + +/** + * These are additional characters that should be replaced with '-' in file names + */ +$wgIllegalFileChars = ":"; + +/** + * @deprecated use $wgDeletedDirectory */ $wgFileStore = array(); -$wgFileStore['deleted']['directory'] = false;///< Defaults to $wgUploadDirectory/deleted -$wgFileStore['deleted']['url'] = null; ///< Private -$wgFileStore['deleted']['hash'] = 3; ///< 3-level subdirectory split -$wgImgAuthDetails = false; ///< defaults to false - only set to true if you use img_auth and want the user to see details on why access failed -$wgImgAuthPublicTest = true; ///< defaults to true - if public read is turned on, no need for img_auth, config error unless other access is used +/** + * What directory to place deleted uploads in + */ +$wgDeletedDirectory = false; // Defaults to $wgUploadDirectory/deleted + +/** + * Set this to true if you use img_auth and want the user to see details on why access failed. + */ +$wgImgAuthDetails = false; + +/** + * If this is enabled, img_auth.php will not allow image access unless the wiki + * is private. This improves security when image uploads are hosted on a + * separate domain. + */ +$wgImgAuthPublicTest = true; -/**@{ +/** * File repository structures * * $wgLocalFileRepo is a single repository structure, and $wgForeignFileRepos is @@ -203,59 +324,62 @@ $wgImgAuthPublicTest = true; ///< defaults to true - if public read is turned on * array of properties configuring the repository. * * Properties required for all repos: - * class The class name for the repository. May come from the core or an extension. + * - class The class name for the repository. May come from the core or an extension. * The core repository classes are LocalRepo, ForeignDBRepo, FSRepo. * - * name A unique name for the repository. + * - name A unique name for the repository. * * For most core repos: - * url Base public URL - * hashLevels The number of directory levels for hash-based division of files - * thumbScriptUrl The URL for thumb.php (optional, not recommended) - * transformVia404 Whether to skip media file transformation on parse and rely on a 404 + * - url Base public URL + * - hashLevels The number of directory levels for hash-based division of files + * - thumbScriptUrl The URL for thumb.php (optional, not recommended) + * - transformVia404 Whether to skip media file transformation on parse and rely on a 404 * handler instead. - * initialCapital Equivalent to $wgCapitalLinks (or $wgCapitalLinkOverrides[NS_FILE], + * - initialCapital Equivalent to $wgCapitalLinks (or $wgCapitalLinkOverrides[NS_FILE], * determines whether filenames implicitly start with a capital letter. * The current implementation may give incorrect description page links * when the local $wgCapitalLinks and initialCapital are mismatched. - * pathDisclosureProtection + * - pathDisclosureProtection * May be 'paranoid' to remove all parameters from error messages, 'none' to * leave the paths in unchanged, or 'simple' to replace paths with * placeholders. Default for LocalRepo is 'simple'. - * fileMode This allows wikis to set the file mode when uploading/moving files. Default + * - fileMode This allows wikis to set the file mode when uploading/moving files. Default * is 0644. - * directory The local filesystem directory where public files are stored. Not used for + * - directory The local filesystem directory where public files are stored. Not used for * some remote repos. - * thumbDir The base thumbnail directory. Defaults to <directory>/thumb. - * thumbUrl The base thumbnail URL. Defaults to <url>/thumb. + * - thumbDir The base thumbnail directory. Defaults to <directory>/thumb. + * - thumbUrl The base thumbnail URL. Defaults to <url>/thumb. * * * These settings describe a foreign MediaWiki installation. They are optional, and will be ignored * for local repositories: - * descBaseUrl URL of image description pages, e.g. http://en.wikipedia.org/wiki/Image: - * scriptDirUrl URL of the MediaWiki installation, equivalent to $wgScriptPath, e.g. - * http://en.wikipedia.org/w - * - * articleUrl Equivalent to $wgArticlePath, e.g. http://en.wikipedia.org/wiki/$1 - * fetchDescription Fetch the text of the remote file description page. Equivalent to + * - descBaseUrl URL of image description pages, e.g. http://en.wikipedia.org/wiki/File: + * - scriptDirUrl URL of the MediaWiki installation, equivalent to $wgScriptPath, e.g. + * http://en.wikipedia.org/w + * - scriptExtension Script extension of the MediaWiki installation, equivalent to + * $wgScriptExtension, e.g. .php5 defaults to .php + * + * - articleUrl Equivalent to $wgArticlePath, e.g. http://en.wikipedia.org/wiki/$1 + * - fetchDescription Fetch the text of the remote file description page. Equivalent to * $wgFetchCommonsDescriptions. * * ForeignDBRepo: - * dbType, dbServer, dbUser, dbPassword, dbName, dbFlags + * - dbType, dbServer, dbUser, dbPassword, dbName, dbFlags * equivalent to the corresponding member of $wgDBservers - * tablePrefix Table prefix, the foreign wiki's $wgDBprefix - * hasSharedCache True if the wiki's shared cache is accessible via the local $wgMemc + * - tablePrefix Table prefix, the foreign wiki's $wgDBprefix + * - hasSharedCache True if the wiki's shared cache is accessible via the local $wgMemc * * ForeignAPIRepo: - * apibase Use for the foreign API's URL - * apiThumbCacheExpiry How long to locally cache thumbs for + * - apibase Use for the foreign API's URL + * - apiThumbCacheExpiry How long to locally cache thumbs for * * The default is to initialise these arrays from the MW<1.11 backwards compatible settings: * $wgUploadPath, $wgThumbnailScriptPath, $wgSharedUploadDirectory, etc. */ $wgLocalFileRepo = false; + +/** @see $wgLocalFileRepo */ $wgForeignFileRepos = array(); -/**@}*/ /** * Use Commons as a remote file repository. Essentially a wrapper, when this @@ -265,100 +389,422 @@ $wgForeignFileRepos = array(); $wgUseInstantCommons = false; /** - * Allowed title characters -- regex character class - * Don't change this unless you know what you're doing - * - * Problematic punctuation: - * []{}|# Are needed for link syntax, never enable these - * <> Causes problems with HTML escaping, don't use - * % Enabled by default, minor problems with path to query rewrite rules, see below - * + Enabled by default, but doesn't work with path to query rewrite rules, corrupted by apache - * ? Enabled by default, but doesn't work with path to PATH_INFO rewrites - * - * All three of these punctuation problems can be avoided by using an alias, instead of a - * rewrite rule of either variety. + * Show EXIF data, on by default if available. + * Requires PHP's EXIF extension: http://www.php.net/manual/en/ref.exif.php * - * The problem with % is that when using a path to query rewrite rule, URLs are - * double-unescaped: once by Apache's path conversion code, and again by PHP. So - * %253F, for example, becomes "?". Our code does not double-escape to compensate - * for this, indeed double escaping would break if the double-escaped title was - * passed in the query string rather than the path. This is a minor security issue - * because articles can be created such that they are hard to view or edit. + * NOTE FOR WINDOWS USERS: + * To enable EXIF functions, add the folloing lines to the + * "Windows extensions" section of php.ini: * - * In some rare cases you may wish to remove + for compatibility with old links. + * extension=extensions/php_mbstring.dll + * extension=extensions/php_exif.dll + */ +$wgShowEXIF = function_exists( 'exif_read_data' ); + +/** + * If you operate multiple wikis, you can define a shared upload path here. + * Uploads to this wiki will NOT be put there - they will be put into + * $wgUploadDirectory. + * If $wgUseSharedUploads is set, the wiki will look in the shared repository if + * no file of the given name is found in the local repository (for [[File:..]], + * [[Media:..]] links). Thumbnails will also be looked for and generated in this + * directory. * - * Theoretically 0x80-0x9F of ISO 8859-1 should be disallowed, but - * this breaks interlanguage links + * Note that these configuration settings can now be defined on a per- + * repository basis for an arbitrary number of file repositories, using the + * $wgForeignFileRepos variable. */ -$wgLegalTitleChars = " %!\"$&'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF+"; -$wgIllegalFileChars = ":"; // These are additional characters that should be replaced with '-' in file names +$wgUseSharedUploads = false; +/** Full path on the web server where shared uploads can be found */ +$wgSharedUploadPath = "http://commons.wikimedia.org/shared/images"; +/** Fetch commons image description pages and display them on the local wiki? */ +$wgFetchCommonsDescriptions = false; +/** Path on the file system where shared uploads can be found. */ +$wgSharedUploadDirectory = "/var/www/wiki3/images"; +/** DB name with metadata about shared directory. Set this to false if the uploads do not come from a wiki. */ +$wgSharedUploadDBname = false; +/** Optional table prefix used in database. */ +$wgSharedUploadDBprefix = ''; +/** Cache shared metadata in memcached. Don't do this if the commons wiki is in a different memcached domain */ +$wgCacheSharedUploads = true; +/** +* Allow for upload to be copied from an URL. Requires Special:Upload?source=web +* The timeout for copy uploads is set by $wgHTTPTimeout. +*/ +$wgAllowCopyUploads = false; +/** + * Allow asynchronous copy uploads. + * This feature is experimental. + */ +$wgAllowAsyncCopyUploads = false; +/** + * Max size for uploads, in bytes. Applies to all uploads. + */ +$wgMaxUploadSize = 1024*1024*100; # 100MB /** - * The external URL protocols + * Point the upload navigation link to an external URL + * Useful if you want to use a shared repository by default + * without disabling local uploads (use $wgEnableUploads = false for that) + * e.g. $wgUploadNavigationUrl = 'http://commons.wikimedia.org/wiki/Special:Upload'; */ -$wgUrlProtocols = array( - 'http://', - 'https://', - 'ftp://', - 'irc://', - 'gopher://', - 'telnet://', // Well if we're going to support the above.. -ævar - 'nntp://', // @bug 3808 RFC 1738 - 'worldwind://', - 'mailto:', - 'news:', - 'svn://', -); +$wgUploadNavigationUrl = false; -/** internal name of virus scanner. This servers as a key to the $wgAntivirusSetup array. - * Set this to NULL to disable virus scanning. If not null, every file uploaded will be scanned for viruses. +/** + * Point the upload link for missing files to an external URL, as with + * $wgUploadNavigationUrl. The URL will get (?|&)wpDestFile=<filename> + * appended to it as appropriate. */ -$wgAntivirus= null; +$wgUploadMissingFileUrl = false; -/** Configuration for different virus scanners. This an associative array of associative arrays: - * it contains on setup array per known scanner type. The entry is selected by $wgAntivirus, i.e. - * valid values for $wgAntivirus are the keys defined in this array. - * - * The configuration array for each scanner contains the following keys: "command", "codemap", "messagepattern"; +/** + * Give a path here to use thumb.php for thumbnail generation on client request, instead of + * generating them on render and outputting a static URL. This is necessary if some of your + * apache servers don't have read/write access to the thumbnail path. * - * "command" is the full command to call the virus scanner - %f will be replaced with the name of the - * file to scan. If not present, the filename will be appended to the command. Note that this must be - * overwritten if the scanner is not in the system path; in that case, plase set - * $wgAntivirusSetup[$wgAntivirus]['command'] to the desired command with full path. + * Example: + * $wgThumbnailScriptPath = "{$wgScriptPath}/thumb{$wgScriptExtension}"; + */ +$wgThumbnailScriptPath = false; +$wgSharedThumbnailScriptPath = false; + +/** + * Set this to false if you do not want MediaWiki to divide your images + * directory into many subdirectories, for improved performance. * - * "codemap" is a mapping of exit code to return codes of the detectVirus function in SpecialUpload. - * An exit code mapped to AV_SCAN_FAILED causes the function to consider the scan to be failed. This will pass - * the file if $wgAntivirusRequired is not set. - * An exit code mapped to AV_SCAN_ABORTED causes the function to consider the file to have an usupported format, - * which is probably imune to virusses. This causes the file to pass. - * An exit code mapped to AV_NO_VIRUS will cause the file to pass, meaning no virus was found. - * All other codes (like AV_VIRUS_FOUND) will cause the function to report a virus. - * You may use "*" as a key in the array to catch all exit codes not mapped otherwise. + * It's almost always good to leave this enabled. In previous versions of + * MediaWiki, some users set this to false to allow images to be added to the + * wiki by simply copying them into $wgUploadDirectory and then running + * maintenance/rebuildImages.php to register them in the database. This is no + * longer recommended, use maintenance/importImages.php instead. * - * "messagepattern" is a perl regular expression to extract the meaningful part of the scanners - * output. The relevant part should be matched as group one (\1). - * If not defined or the pattern does not match, the full message is shown to the user. + * Note that this variable may be ignored if $wgLocalFileRepo is set. */ -$wgAntivirusSetup = array( +$wgHashedUploadDirectory = true; - #setup for clamav - 'clamav' => array ( - 'command' => "clamscan --no-summary ", +/** + * Set the following to false especially if you have a set of files that need to + * be accessible by all wikis, and you do not want to use the hash (path/a/aa/) + * directory layout. + */ +$wgHashedSharedUploadDirectory = true; - 'codemap' => array ( - "0" => AV_NO_VIRUS, # no virus - "1" => AV_VIRUS_FOUND, # virus found - "52" => AV_SCAN_ABORTED, # unsupported file format (probably imune) - "*" => AV_SCAN_FAILED, # else scan failed - ), +/** + * Base URL for a repository wiki. Leave this blank if uploads are just stored + * in a shared directory and not meant to be accessible through a separate wiki. + * Otherwise the image description pages on the local wiki will link to the + * image description page on this wiki. + * + * Please specify the namespace, as in the example below. + */ +$wgRepositoryBaseUrl = "http://commons.wikimedia.org/wiki/File:"; - 'messagepattern' => '/.*?:(.*)/sim', - ), +/** + * This is the list of preferred extensions for uploading files. Uploading files + * with extensions not in this list will trigger a warning. + * + * WARNING: If you add any OpenOffice or Microsoft Office file formats here, + * such as odt or doc, and untrusted users are allowed to upload files, then + * your wiki will be vulnerable to cross-site request forgery (CSRF). + */ +$wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg' ); - #setup for f-prot - 'f-prot' => array ( - 'command' => "f-prot ", +/** Files with these extensions will never be allowed as uploads. */ +$wgFileBlacklist = array( + # HTML may contain cookie-stealing JavaScript and web bugs + 'html', 'htm', 'js', 'jsb', 'mhtml', 'mht', 'xhtml', 'xht', + # PHP scripts may execute arbitrary code on the server + 'php', 'phtml', 'php3', 'php4', 'php5', 'phps', + # Other types that may be interpreted by some servers + 'shtml', 'jhtml', 'pl', 'py', 'cgi', + # May contain harmful executables for Windows victims + 'exe', 'scr', 'dll', 'msi', 'vbs', 'bat', 'com', 'pif', 'cmd', 'vxd', 'cpl' ); + +/** + * Files with these mime types will never be allowed as uploads + * if $wgVerifyMimeType is enabled. + */ +$wgMimeTypeBlacklist = array( + # HTML may contain cookie-stealing JavaScript and web bugs + 'text/html', 'text/javascript', 'text/x-javascript', 'application/x-shellscript', + # PHP scripts may execute arbitrary code on the server + 'application/x-php', 'text/x-php', + # Other types that may be interpreted by some servers + 'text/x-python', 'text/x-perl', 'text/x-bash', 'text/x-sh', 'text/x-csh', + # Client-side hazards on Internet Explorer + 'text/scriptlet', 'application/x-msdownload', + # Windows metafile, client-side vulnerability on some systems + 'application/x-msmetafile', + # A ZIP file may be a valid Java archive containing an applet which exploits the + # same-origin policy to steal cookies + 'application/zip', + + # MS Office OpenXML and other Open Package Conventions files are zip files + # and thus blacklisted just as other zip files. If you remove these entries + # from the blacklist in your local configuration, a malicious file upload + # will be able to compromise the wiki's user accounts, and the user + # accounts of any other website in the same cookie domain. + 'application/x-opc+zip', + 'application/msword', + 'application/vnd.ms-powerpoint', + 'application/vnd.msexcel', +); + +/** + * This is a flag to determine whether or not to check file extensions on upload. + * + * WARNING: setting this to false is insecure for public wikis. + */ +$wgCheckFileExtensions = true; + +/** + * If this is turned off, users may override the warning for files not covered + * by $wgFileExtensions. + * + * WARNING: setting this to false is insecure for public wikis. + */ +$wgStrictFileExtensions = true; + +/** Warn if uploaded files are larger than this (in bytes), or false to disable*/ +$wgUploadSizeWarning = false; + +/** + * list of trusted media-types and mime types. + * Use the MEDIATYPE_xxx constants to represent media types. + * This list is used by File::isSafeFile + * + * Types not listed here will have a warning about unsafe content + * displayed on the images description page. It would also be possible + * to use this for further restrictions, like disabling direct + * [[media:...]] links for non-trusted formats. + */ +$wgTrustedMediaFormats = array( + MEDIATYPE_BITMAP, //all bitmap formats + MEDIATYPE_AUDIO, //all audio formats + MEDIATYPE_VIDEO, //all plain video formats + "image/svg+xml", //svg (only needed if inline rendering of svg is not supported) + "application/pdf", //PDF files + #"application/x-shockwave-flash", //flash/shockwave movie +); + +/** + * Plugins for media file type handling. + * Each entry in the array maps a MIME type to a class name + */ +$wgMediaHandlers = array( + 'image/jpeg' => 'BitmapHandler', + 'image/png' => 'PNGHandler', + 'image/gif' => 'GIFHandler', + 'image/tiff' => 'TiffHandler', + 'image/x-ms-bmp' => 'BmpHandler', + 'image/x-bmp' => 'BmpHandler', + 'image/svg+xml' => 'SvgHandler', // official + 'image/svg' => 'SvgHandler', // compat + 'image/vnd.djvu' => 'DjVuHandler', // official + 'image/x.djvu' => 'DjVuHandler', // compat + 'image/x-djvu' => 'DjVuHandler', // compat +); + +/** + * Resizing can be done using PHP's internal image libraries or using + * ImageMagick or another third-party converter, e.g. GraphicMagick. + * These support more file formats than PHP, which only supports PNG, + * GIF, JPG, XBM and WBMP. + * + * Use Image Magick instead of PHP builtin functions. + */ +$wgUseImageMagick = false; +/** The convert command shipped with ImageMagick */ +$wgImageMagickConvertCommand = '/usr/bin/convert'; + +/** Sharpening parameter to ImageMagick */ +$wgSharpenParameter = '0x0.4'; + +/** Reduction in linear dimensions below which sharpening will be enabled */ +$wgSharpenReductionThreshold = 0.85; + +/** + * Temporary directory used for ImageMagick. The directory must exist. Leave + * this set to false to let ImageMagick decide for itself. + */ +$wgImageMagickTempDir = false; + +/** + * Use another resizing converter, e.g. GraphicMagick + * %s will be replaced with the source path, %d with the destination + * %w and %h will be replaced with the width and height. + * + * Example for GraphicMagick: + * <code> + * $wgCustomConvertCommand = "gm convert %s -resize %wx%h %d" + * </code> + * + * Leave as false to skip this. + */ +$wgCustomConvertCommand = false; + +/** + * Scalable Vector Graphics (SVG) may be uploaded as images. + * Since SVG support is not yet standard in browsers, it is + * necessary to rasterize SVGs to PNG as a fallback format. + * + * An external program is required to perform this conversion. + */ +$wgSVGConverters = array( + 'ImageMagick' => '$path/convert -background white -thumbnail $widthx$height\! $input PNG:$output', + 'sodipodi' => '$path/sodipodi -z -w $width -f $input -e $output', + 'inkscape' => '$path/inkscape -z -w $width -f $input -e $output', + 'batik' => 'java -Djava.awt.headless=true -jar $path/batik-rasterizer.jar -w $width -d $output $input', + 'rsvg' => '$path/rsvg -w$width -h$height $input $output', + 'imgserv' => '$path/imgserv-wrapper -i svg -o png -w$width $input $output', + ); +/** Pick a converter defined in $wgSVGConverters */ +$wgSVGConverter = 'ImageMagick'; +/** If not in the executable PATH, specify the SVG converter path. */ +$wgSVGConverterPath = ''; +/** Don't scale a SVG larger than this */ +$wgSVGMaxSize = 2048; +/** Don't read SVG metadata beyond this point. + * Default is 1024*256 bytes */ +$wgSVGMetadataCutoff = 262144; + +/** + * MediaWiki will reject HTMLesque tags in uploaded files due to idiotic browsers which can't + * perform basic stuff like MIME detection and which are vulnerable to further idiots uploading + * crap files as images. When this directive is on, <title> will be allowed in files with + * an "image/svg+xml" MIME type. You should leave this disabled if your web server is misconfigured + * and doesn't send appropriate MIME types for SVG images. + */ +$wgAllowTitlesInSVG = false; + +/** + * Don't thumbnail an image if it will use too much working memory. + * Default is 50 MB if decompressed to RGBA form, which corresponds to + * 12.5 million pixels or 3500x3500 + */ +$wgMaxImageArea = 1.25e7; +/** + * Force thumbnailing of animated GIFs above this size to a single + * frame instead of an animated thumbnail. As of MW 1.17 this limit + * is checked against the total size of all frames in the animation. + * It probably makes sense to keep this equal to $wgMaxImageArea. + */ +$wgMaxAnimatedGifArea = 1.25e7; +/** + * Browsers don't support TIFF inline generally... + * For inline display, we need to convert to PNG or JPEG. + * Note scaling should work with ImageMagick, but may not with GD scaling. + * + * Example: + * <code> + * // PNG is lossless, but inefficient for photos + * $wgTiffThumbnailType = array( 'png', 'image/png' ); + * // JPEG is good for photos, but has no transparency support. Bad for diagrams. + * $wgTiffThumbnailType = array( 'jpg', 'image/jpeg' ); + * </code> + */ + $wgTiffThumbnailType = false; + +/** + * If rendered thumbnail files are older than this timestamp, they + * will be rerendered on demand as if the file didn't already exist. + * Update if there is some need to force thumbs and SVG rasterizations + * to rerender, such as fixes to rendering bugs. + */ +$wgThumbnailEpoch = '20030516000000'; + +/** + * If set, inline scaled images will still produce <img> tags ready for + * output instead of showing an error message. + * + * This may be useful if errors are transitory, especially if the site + * is configured to automatically render thumbnails on request. + * + * On the other hand, it may obscure error conditions from debugging. + * Enable the debug log or the 'thumbnail' log group to make sure errors + * are logged to a file for review. + */ +$wgIgnoreImageErrors = false; + +/** + * Allow thumbnail rendering on page view. If this is false, a valid + * thumbnail URL is still output, but no file will be created at + * the target location. This may save some time if you have a + * thumb.php or 404 handler set up which is faster than the regular + * webserver(s). + */ +$wgGenerateThumbnailOnParse = true; + +/** +* Show thumbnails for old images on the image description page +*/ +$wgShowArchiveThumbnails = true; + +/** Obsolete, always true, kept for compatibility with extensions */ +$wgUseImageResize = true; + + +/** + * Internal name of virus scanner. This servers as a key to the + * $wgAntivirusSetup array. Set this to NULL to disable virus scanning. If not + * null, every file uploaded will be scanned for viruses. + */ +$wgAntivirus= null; + +/** + * Configuration for different virus scanners. This an associative array of + * associative arrays. It contains one setup array per known scanner type. + * The entry is selected by $wgAntivirus, i.e. + * valid values for $wgAntivirus are the keys defined in this array. + * + * The configuration array for each scanner contains the following keys: + * "command", "codemap", "messagepattern": + * + * "command" is the full command to call the virus scanner - %f will be + * replaced with the name of the file to scan. If not present, the filename + * will be appended to the command. Note that this must be overwritten if the + * scanner is not in the system path; in that case, plase set + * $wgAntivirusSetup[$wgAntivirus]['command'] to the desired command with full + * path. + * + * "codemap" is a mapping of exit code to return codes of the detectVirus + * function in SpecialUpload. + * - An exit code mapped to AV_SCAN_FAILED causes the function to consider + * the scan to be failed. This will pass the file if $wgAntivirusRequired + * is not set. + * - An exit code mapped to AV_SCAN_ABORTED causes the function to consider + * the file to have an usupported format, which is probably imune to + * virusses. This causes the file to pass. + * - An exit code mapped to AV_NO_VIRUS will cause the file to pass, meaning + * no virus was found. + * - All other codes (like AV_VIRUS_FOUND) will cause the function to report + * a virus. + * - You may use "*" as a key in the array to catch all exit codes not mapped otherwise. + * + * "messagepattern" is a perl regular expression to extract the meaningful part of the scanners + * output. The relevant part should be matched as group one (\1). + * If not defined or the pattern does not match, the full message is shown to the user. + */ +$wgAntivirusSetup = array( + + #setup for clamav + 'clamav' => array ( + 'command' => "clamscan --no-summary ", + + 'codemap' => array ( + "0" => AV_NO_VIRUS, # no virus + "1" => AV_VIRUS_FOUND, # virus found + "52" => AV_SCAN_ABORTED, # unsupported file format (probably imune) + "*" => AV_SCAN_FAILED, # else scan failed + ), + + 'messagepattern' => '/.*?:(.*)/sim', + ), + + #setup for f-prot + 'f-prot' => array ( + 'command' => "f-prot ", 'codemap' => array ( "0" => AV_NO_VIRUS, # no virus @@ -373,13 +819,13 @@ $wgAntivirusSetup = array( /** Determines if a failed virus scan (AV_SCAN_FAILED) will cause the file to be rejected. */ -$wgAntivirusRequired= true; +$wgAntivirusRequired = true; /** Determines if the mime type of uploaded files should be checked */ -$wgVerifyMimeType= true; +$wgVerifyMimeType = true; /** Sets the mime type definition file to use by MimeMagic.php. */ -$wgMimeTypeFile= "includes/mime.types"; +$wgMimeTypeFile = "includes/mime.types"; #$wgMimeTypeFile= "/etc/mime.types"; #$wgMimeTypeFile= null; #use built-in defaults only. @@ -387,25 +833,30 @@ $wgMimeTypeFile= "includes/mime.types"; $wgMimeInfoFile= "includes/mime.info"; #$wgMimeInfoFile= null; #use built-in defaults only. -/** Switch for loading the FileInfo extension by PECL at runtime. +/** + * Switch for loading the FileInfo extension by PECL at runtime. * This should be used only if fileinfo is installed as a shared object - * or a dynamic libary + * or a dynamic library. */ -$wgLoadFileinfoExtension= false; +$wgLoadFileinfoExtension = false; /** Sets an external mime detector program. The command must print only * the mime type to standard output. * The name of the file to process will be appended to the command given here. * If not set or NULL, mime_content_type will be used if available. + * Example: + * <code> + * #$wgMimeDetectorCommand = "file -bi"; # use external mime detector (Linux) + * </code> */ -$wgMimeDetectorCommand= null; # use internal mime_content_type function, available since php 4.3.0 -#$wgMimeDetectorCommand= "file -bi"; #use external mime detector (Linux) +$wgMimeDetectorCommand = null; -/** Switch for trivial mime detection. Used by thumb.php to disable all fance +/** + * Switch for trivial mime detection. Used by thumb.php to disable all fancy * things, because only a few types of images are needed and file extensions * can be trusted. */ -$wgTrivialMimeDetection= false; +$wgTrivialMimeDetection = false; /** * Additional XML types we can allow via mime-detection. @@ -420,117 +871,136 @@ $wgXMLMimeTypes = array( ); /** - * To set 'pretty' URL paths for actions other than - * plain page views, add to this array. For instance: - * 'edit' => "$wgScriptPath/edit/$1" - * - * There must be an appropriate script or rewrite rule - * in place to handle these URLs. + * Limit images on image description pages to a user-selectable limit. In order + * to reduce disk usage, limits can only be selected from a list. + * The user preference is saved as an array offset in the database, by default + * the offset is set with $wgDefaultUserOptions['imagesize']. Make sure you + * change it if you alter the array (see bug 8858). + * This is the list of settings the user can choose from: */ -$wgActionPaths = array(); +$wgImageLimits = array ( + array(320,240), + array(640,480), + array(800,600), + array(1024,768), + array(1280,1024), + array(10000,10000) ); /** - * If you operate multiple wikis, you can define a shared upload path here. - * Uploads to this wiki will NOT be put there - they will be put into - * $wgUploadDirectory. - * If $wgUseSharedUploads is set, the wiki will look in the shared repository if - * no file of the given name is found in the local repository (for [[Image:..]], - * [[Media:..]] links). Thumbnails will also be looked for and generated in this - * directory. - * - * Note that these configuration settings can now be defined on a per- - * repository basis for an arbitrary number of file repositories, using the - * $wgForeignFileRepos variable. + * Adjust thumbnails on image pages according to a user setting. In order to + * reduce disk usage, the values can only be selected from a list. This is the + * list of settings the user can choose from: */ -$wgUseSharedUploads = false; -/** Full path on the web server where shared uploads can be found */ -$wgSharedUploadPath = "http://commons.wikimedia.org/shared/images"; -/** Fetch commons image description pages and display them on the local wiki? */ -$wgFetchCommonsDescriptions = false; -/** Path on the file system where shared uploads can be found. */ -$wgSharedUploadDirectory = "/var/www/wiki3/images"; -/** DB name with metadata about shared directory. Set this to false if the uploads do not come from a wiki. */ -$wgSharedUploadDBname = false; -/** Optional table prefix used in database. */ -$wgSharedUploadDBprefix = ''; -/** Cache shared metadata in memcached. Don't do this if the commons wiki is in a different memcached domain */ -$wgCacheSharedUploads = true; +$wgThumbLimits = array( + 120, + 150, + 180, + 200, + 250, + 300 +); + /** -* Allow for upload to be copied from an URL. Requires Special:Upload?source=web -* The timeout for copy uploads is set by $wgHTTPTimeout. -*/ -$wgAllowCopyUploads = false; + * Default parameters for the <gallery> tag + */ +$wgGalleryOptions = array ( + 'imagesPerRow' => 0, // Default number of images per-row in the gallery. 0 -> Adapt to screensize + 'imageWidth' => 120, // Width of the cells containing images in galleries (in "px") + 'imageHeight' => 120, // Height of the cells containing images in galleries (in "px") + 'captionLength' => 20, // Length of caption to truncate (in characters) + 'showBytes' => true, // Show the filesize in bytes in categories +); /** - * Max size for uploads, in bytes. Currently only works for uploads from URL - * via CURL (see $wgAllowCopyUploads). The only way to impose limits on - * normal uploads is currently to edit php.ini. + * Adjust width of upright images when parameter 'upright' is used + * This allows a nicer look for upright images without the need to fix the width + * by hardcoded px in wiki sourcecode. */ -$wgMaxUploadSize = 1024*1024*100; # 100MB +$wgThumbUpright = 0.75; /** - * Point the upload navigation link to an external URL - * Useful if you want to use a shared repository by default - * without disabling local uploads (use $wgEnableUploads = false for that) - * e.g. $wgUploadNavigationUrl = 'http://commons.wikimedia.org/wiki/Special:Upload'; - * - * This also affects images inline images that do not exist. In that case the URL will get - * (?|&)wpDestFile=<filename> appended to it as appropriate. + * Default value for chmoding of new directories. */ -$wgUploadNavigationUrl = false; +$wgDirectoryMode = 0777; /** - * Give a path here to use thumb.php for thumbnail generation on client request, instead of - * generating them on render and outputting a static URL. This is necessary if some of your - * apache servers don't have read/write access to the thumbnail path. - * - * Example: - * $wgThumbnailScriptPath = "{$wgScriptPath}/thumb{$wgScriptExtension}"; + * DJVU settings + * Path of the djvudump executable + * Enable this and $wgDjvuRenderer to enable djvu rendering */ -$wgThumbnailScriptPath = false; -$wgSharedThumbnailScriptPath = false; +# $wgDjvuDump = 'djvudump'; +$wgDjvuDump = null; /** - * Set the following to false especially if you have a set of files that need to - * be accessible by all wikis, and you do not want to use the hash (path/a/aa/) - * directory layout. + * Path of the ddjvu DJVU renderer + * Enable this and $wgDjvuDump to enable djvu rendering */ -$wgHashedSharedUploadDirectory = true; +# $wgDjvuRenderer = 'ddjvu'; +$wgDjvuRenderer = null; /** - * Base URL for a repository wiki. Leave this blank if uploads are just stored - * in a shared directory and not meant to be accessible through a separate wiki. - * Otherwise the image description pages on the local wiki will link to the - * image description page on this wiki. + * Path of the djvutxt DJVU text extraction utility + * Enable this and $wgDjvuDump to enable text layer extraction from djvu files + */ +# $wgDjvuTxt = 'djvutxt'; +$wgDjvuTxt = null; + +/** + * Path of the djvutoxml executable + * This works like djvudump except much, much slower as of version 3.5. * - * Please specify the namespace, as in the example below. + * For now I recommend you use djvudump instead. The djvuxml output is + * probably more stable, so we'll switch back to it as soon as they fix + * the efficiency problem. + * http://sourceforge.net/tracker/index.php?func=detail&aid=1704049&group_id=32953&atid=406583 + */ +# $wgDjvuToXML = 'djvutoxml'; +$wgDjvuToXML = null; + + +/** + * Shell command for the DJVU post processor + * Default: pnmtopng, since ddjvu generates ppm output + * Set this to false to output the ppm file directly. + */ +$wgDjvuPostProcessor = 'pnmtojpeg'; +/** + * File extension for the DJVU post processor output + */ +$wgDjvuOutputExtension = 'jpg'; + +/** @} */ # end of file uploads } + +/************************************************************************//** + * @name Email settings + * @{ */ -$wgRepositoryBaseUrl = "http://commons.wikimedia.org/wiki/Image:"; -# -# Email settings -# +/** + * Site admin email address. + */ +$wgEmergencyContact = 'wikiadmin@' . $serverName; /** - * Site admin email address - * Default to wikiadmin@SERVER_NAME + * Password reminder email address. + * + * The address we should use as sender when a user is requesting his password. */ -$wgEmergencyContact = 'wikiadmin@' . $wgServerName; +$wgPasswordSender = 'apache@' . $serverName; + +unset( $serverName ); # Don't leak local variables to global scope /** - * Password reminder email address - * The address we should use as sender when a user is requesting his password - * Default to apache@SERVER_NAME + * Password reminder name */ -$wgPasswordSender = 'MediaWiki Mail <apache@' . $wgServerName . '>'; +$wgPasswordSenderName = 'MediaWiki Mail'; /** - * dummy address which should be accepted during mail send action - * It might be necessay to adapt the address or to set it equal - * to the $wgEmergencyContact address + * Dummy address which should be accepted during mail send action. + * It might be necessary to adapt the address or to set it equal + * to the $wgEmergencyContact address. */ -#$wgNoReplyAddress = $wgEmergencyContact; -$wgNoReplyAddress = 'reply@not.possible'; +$wgNoReplyAddress = 'reply@not.possible'; /** * Set to true to enable the e-mail basic features: @@ -581,18 +1051,97 @@ $wgNewPasswordExpiry = 3600 * 24 * 7; */ $wgSMTP = false; +/** + * Additional email parameters, will be passed as the last argument to mail() call. + */ +$wgAdditionalMailParams = null; + +/** + * True: from page editor if s/he opted-in. False: Enotif mails appear to come + * from $wgEmergencyContact + */ +$wgEnotifFromEditor = false; + +// TODO move UPO to preferences probably ? +# If set to true, users get a corresponding option in their preferences and can choose to enable or disable at their discretion +# If set to false, the corresponding input form on the user preference page is suppressed +# It call this to be a "user-preferences-option (UPO)" + +/** + * Require email authentication before sending mail to an email addres. This is + * highly recommended. It prevents MediaWiki from being used as an open spam + * relay. + */ +$wgEmailAuthentication = true; + +/** + * Allow users to enable email notification ("enotif") on watchlist changes. + */ +$wgEnotifWatchlist = false; + +/** + * Allow users to enable email notification ("enotif") when someone edits their + * user talk page. + */ +$wgEnotifUserTalk = false; + +/** + * Set the Reply-to address in notifications to the editor's address, if user + * allowed this in the preferences. + */ +$wgEnotifRevealEditorAddress = false; + +/** + * Send notification mails on minor edits to watchlist pages. This is enabled + * by default. Does not affect user talk notifications. + */ +$wgEnotifMinorEdits = true; + +/** + * Send a generic mail instead of a personalised mail for each user. This + * always uses UTC as the time zone, and doesn't include the username. + * + * For pages with many users watching, this can significantly reduce mail load. + * Has no effect when using sendmail rather than SMTP. + */ +$wgEnotifImpersonal = false; + +/** + * Maximum number of users to mail at once when using impersonal mail. Should + * match the limit on your mail server. + */ +$wgEnotifMaxRecips = 500; + +/** + * Send mails via the job queue. This can be useful to reduce the time it + * takes to save a page that a lot of people are watching. + */ +$wgEnotifUseJobQ = false; + +/** + * Use real name instead of username in e-mail "from" field. + */ +$wgEnotifUseRealName = false; + +/** + * Array of usernames who will be sent a notification email for every change + * which occurs on a wiki. + */ +$wgUsersNotifiedOnAllChanges = array(); + -/**@{ - * Database settings +/** @} */ # end of email settings + +/************************************************************************//** + * @name Database settings + * @{ */ -/** database host name or ip address */ +/** Database host name or IP address */ $wgDBserver = 'localhost'; -/** database port number (for PostgreSQL) */ +/** Database port number (for PostgreSQL) */ $wgDBport = 5432; -/** name of the database */ +/** Name of the database */ $wgDBname = 'my_wiki'; -/** */ -$wgDBconnection = ''; /** Database username */ $wgDBuser = 'wikiuser'; /** Database user's password */ @@ -600,11 +1149,13 @@ $wgDBpassword = ''; /** Database type */ $wgDBtype = 'mysql'; -/** Separate username and password for maintenance tasks. Leave as null to use the default */ +/** Separate username for maintenance tasks. Leave as null to use the default. */ $wgDBadminuser = null; +/** Separate password for maintenance tasks. Leave as null to use the default. */ $wgDBadminpassword = null; -/** Search type +/** + * Search type. * Leave as null to select the default search engine for the * selected database type (eg SearchMySQL), or set to a class * name to override to a custom search engine. @@ -616,6 +1167,14 @@ $wgDBprefix = ''; /** MySQL table options to use during installation or update */ $wgDBTableOptions = 'ENGINE=InnoDB'; +/** + * SQL Mode - default is turning off all modes, including strict, if set. + * null can be used to skip the setting for performance reasons and assume + * DBA has done his best job. + * String override can be used for some additional fun :-) + */ +$wgSQLMode = ''; + /** Mediawiki schema */ $wgDBmwschema = 'mediawiki'; /** Tsearch2 schema */ @@ -624,12 +1183,6 @@ $wgDBts2schema = 'public'; /** To override default SQLite data directory ($docroot/../data) */ $wgSQLiteDataDir = ''; -/** Default directory mode for SQLite data directory on creation. - * Note that this is different from the default directory mode used - * elsewhere. - */ -$wgSQLiteDataDirMode = 0700; - /** * Make all database connections secretly go to localhost. Fool the load balancer * thinking there is an arbitrarily large cluster of servers to connect to. @@ -637,17 +1190,11 @@ $wgSQLiteDataDirMode = 0700; */ $wgAllDBsAreLocalhost = false; -/**@}*/ - - -/** Live high performance sites should disable this - some checks acquire giant mysql locks */ -$wgCheckDBSchema = true; - - /** * Shared database for multiple wikis. Commonly used for storing a user table * for single sign-on. The server for this database must be the same as for the * main database. + * * For backwards compatibility the shared prefix is set to the same as the local * prefix, and the user table is listed in the default list of shared tables. * The user_properties table is also added so that users will continue to have their @@ -657,33 +1204,39 @@ $wgCheckDBSchema = true; * datbase. However it is advised to limit what tables you do share as many of * MediaWiki's tables may have side effects if you try to share them. * EXPERIMENTAL + * + * $wgSharedPrefix is the table prefix for the shared database. It defaults to + * $wgDBprefix. */ $wgSharedDB = null; -$wgSharedPrefix = false; # Defaults to $wgDBprefix + +/** @see $wgSharedDB */ +$wgSharedPrefix = false; +/** @see $wgSharedDB */ $wgSharedTables = array( 'user', 'user_properties' ); /** * Database load balancer * This is a two-dimensional array, an array of server info structures * Fields are: - * host: Host name - * dbname: Default database name - * user: DB user - * password: DB password - * type: "mysql" or "postgres" - * load: ratio of DB_SLAVE load, must be >=0, the sum of all loads must be >0 - * groupLoads: array of load ratios, the key is the query group name. A query may belong - * to several groups, the most specific group defined here is used. - * - * flags: bit field - * DBO_DEFAULT -- turns on DBO_TRX only if !$wgCommandLineMode (recommended) - * DBO_DEBUG -- equivalent of $wgDebugDumpSql - * DBO_TRX -- wrap entire request in a transaction - * DBO_IGNORE -- ignore errors (not useful in LocalSettings.php) - * DBO_NOBUFFER -- turn off buffering (not useful in LocalSettings.php) - * - * max lag: (optional) Maximum replication lag before a slave will taken out of rotation - * max threads: (optional) Maximum number of running threads + * - host: Host name + * - dbname: Default database name + * - user: DB user + * - password: DB password + * - type: "mysql" or "postgres" + * - load: ratio of DB_SLAVE load, must be >=0, the sum of all loads must be >0 + * - groupLoads: array of load ratios, the key is the query group name. A query may belong + * to several groups, the most specific group defined here is used. + * + * - flags: bit field + * - DBO_DEFAULT -- turns on DBO_TRX only if !$wgCommandLineMode (recommended) + * - DBO_DEBUG -- equivalent of $wgDebugDumpSql + * - DBO_TRX -- wrap entire request in a transaction + * - DBO_IGNORE -- ignore errors (not useful in LocalSettings.php) + * - DBO_NOBUFFER -- turn off buffering (not useful in LocalSettings.php) + * + * - max lag: (optional) Maximum replication lag before a slave will taken out of rotation + * - max threads: (optional) Maximum number of running threads * * These and any other user-defined properties will be assigned to the mLBInfo member * variable of the Database object. @@ -697,7 +1250,9 @@ $wgSharedTables = array( 'user', 'user_properties' ); * accidental misconfiguration or MediaWiki bugs, set read_only=1 on all your * slaves in my.cnf. You can set read_only mode at runtime using: * + * <code> * SET @@read_only=1; + * </code> * * Since the effect of writing to a slave is so damaging and difficult to clean * up, we at Wikimedia set read_only=1 in my.cnf on all our DB servers, even @@ -763,3138 +1318,3702 @@ $wgDBmysql5 = false; */ $wgLocalDatabases = array(); -/** @{ - * Object cache settings - * See Defines.php for types +/** + * If lag is higher than $wgSlaveLagWarning, show a warning in some special + * pages (like watchlist). If the lag is higher than $wgSlaveLagCritical, + * show a more obvious warning. */ -$wgMainCacheType = CACHE_NONE; -$wgMessageCacheType = CACHE_ANYTHING; -$wgParserCacheType = CACHE_ANYTHING; -/**@}*/ +$wgSlaveLagWarning = 10; +/** @see $wgSlaveLagWarning */ +$wgSlaveLagCritical = 30; -$wgParserCacheExpireTime = 86400; +/** + * Use old names for change_tags indices. + */ +$wgOldChangeTagsIndex = false; -// Select which DBA handler <http://www.php.net/manual/en/dba.requirements.php> to use as CACHE_DBA backend -$wgDBAhandler = 'db3'; +/**@}*/ # End of DB settings } -$wgSessionsInMemcached = false; -/** This is used for setting php's session.save_handler. In practice, you will - * almost never need to change this ever. Other options might be 'user' or - * 'session_mysql.' Setting to null skips setting this entirely (which might be - * useful if you're doing cross-application sessions, see bug 11381) */ -$wgSessionHandler = 'files'; +/************************************************************************//** + * @name Text storage + * @{ + */ -/**@{ - * Memcached-specific settings - * See docs/memcached.txt +/** + * We can also compress text stored in the 'text' table. If this is set on, new + * revisions will be compressed on page save if zlib support is available. Any + * compressed revisions will be decompressed on load regardless of this setting + * *but will not be readable at all* if zlib support is not available. */ -$wgUseMemCached = false; -$wgMemCachedDebug = false; ///< Will be set to false in Setup.php, if the server isn't working -$wgMemCachedServers = array( '127.0.0.1:11000' ); -$wgMemCachedPersistent = false; -$wgMemCachedTimeout = 100000; //Data timeout in microseconds -/**@}*/ +$wgCompressRevisions = false; /** - * Set this to true to make a local copy of the message cache, for use in - * addition to memcached. The files will be put in $wgCacheDirectory. + * External stores allow including content + * from non database sources following URL links + * + * Short names of ExternalStore classes may be specified in an array here: + * $wgExternalStores = array("http","file","custom")... + * + * CAUTION: Access to database might lead to code execution */ -$wgUseLocalMessageCache = false; +$wgExternalStores = false; /** - * Defines format of local cache - * true - Serialized object - * false - PHP source file (Warning - security risk) + * An array of external mysql servers, e.g. + * $wgExternalServers = array( 'cluster1' => array( 'srv28', 'srv29', 'srv30' ) ); + * Used by LBFactory_Simple, may be ignored if $wgLBFactoryConf is set to another class. */ -$wgLocalMessageCacheSerialized = true; +$wgExternalServers = array(); /** - * Localisation cache configuration. Associative array with keys: - * class: The class to use. May be overridden by extensions. + * The place to put new revisions, false to put them in the local text table. + * Part of a URL, e.g. DB://cluster1 * - * store: The location to store cache data. May be 'files', 'db' or - * 'detect'. If set to "files", data will be in CDB files. If set - * to "db", data will be stored to the database. If set to - * "detect", files will be used if $wgCacheDirectory is set, - * otherwise the database will be used. + * Can be an array instead of a single string, to enable data distribution. Keys + * must be consecutive integers, starting at zero. Example: * - * storeClass: The class name for the underlying storage. If set to a class - * name, it overrides the "store" setting. + * $wgDefaultExternalStore = array( 'DB://cluster1', 'DB://cluster2' ); * - * storeDirectory: If the store class puts its data in files, this is the - * directory it will use. If this is false, $wgCacheDirectory - * will be used. + */ +$wgDefaultExternalStore = false; + +/** + * Revision text may be cached in $wgMemc to reduce load on external storage + * servers and object extraction overhead for frequently-loaded revisions. * - * manualRecache: Set this to true to disable cache updates on web requests. - * Use maintenance/rebuildLocalisationCache.php instead. + * Set to 0 to disable, or number of seconds before cache expiry. */ -$wgLocalisationCacheConf = array( - 'class' => 'LocalisationCache', - 'store' => 'detect', - 'storeClass' => false, - 'storeDirectory' => false, - 'manualRecache' => false, -); +$wgRevisionCacheExpiry = 0; -# Language settings -# -/** Site language code, should be one of ./languages/Language(.*).php */ -$wgLanguageCode = 'en'; +/** @} */ # end text storage } -/** - * Some languages need different word forms, usually for different cases. - * Used in Language::convertGrammar(). +/************************************************************************//** + * @name Performance hacks and limits + * @{ */ -$wgGrammarForms = array(); -#$wgGrammarForms['en']['genitive']['car'] = 'car\'s'; - -/** Treat language links as magic connectors, not inline links */ -$wgInterwikiMagic = true; - -/** Hide interlanguage links from the sidebar */ -$wgHideInterlanguageLinks = false; - -/** List of language names or overrides for default names in Names.php */ -$wgExtraLanguageNames = array(); +/** Disable database-intensive features */ +$wgMiserMode = false; +/** Disable all query pages if miser mode is on, not just some */ +$wgDisableQueryPages = false; +/** Number of rows to cache in 'querycache' table when miser mode is on */ +$wgQueryCacheLimit = 1000; +/** Number of links to a page required before it is deemed "wanted" */ +$wgWantedPagesThreshold = 1; +/** Enable slow parser functions */ +$wgAllowSlowParserFunctions = false; /** - * List of language codes that don't correspond to an actual language. - * These codes are leftoffs from renames, or other legacy things. - * Also, qqq is a dummy "language" for documenting messages. + * Do DELETE/INSERT for link updates instead of incremental */ -$wgDummyLanguageCodes = array( 'qqq', 'als', 'be-x-old', 'dk', 'fiu-vro', 'iu', 'nb', 'simple', 'tp' ); - -/** We speak UTF-8 all the time now, unless some oddities happen */ -$wgInputEncoding = 'UTF-8'; -$wgOutputEncoding = 'UTF-8'; -$wgEditEncoding = ''; +$wgUseDumbLinkUpdate = false; /** - * Set this to true to replace Arabic presentation forms with their standard - * forms in the U+0600-U+06FF block. This only works if $wgLanguageCode is - * set to "ar". - * - * Note that pages with titles containing presentation forms will become - * inaccessible, run maintenance/cleanupTitles.php to fix this. + * Anti-lock flags - bitfield + * - ALF_PRELOAD_LINKS: + * Preload links during link update for save + * - ALF_PRELOAD_EXISTENCE: + * Preload cur_id during replaceLinkHolders + * - ALF_NO_LINK_LOCK: + * Don't use locking reads when updating the link table. This is + * necessary for wikis with a high edit rate for performance + * reasons, but may cause link table inconsistency + * - ALF_NO_BLOCK_LOCK: + * As for ALF_LINK_LOCK, this flag is a necessity for high-traffic + * wikis. */ -$wgFixArabicUnicode = true; +$wgAntiLockFlags = 0; /** - * Set this to true to replace ZWJ-based chillu sequences in Malayalam text - * with their Unicode 5.1 equivalents. This only works if $wgLanguageCode is - * set to "ml". Note that some clients (even new clients as of 2010) do not - * support these characters. - * - * If you enable this on an existing wiki, run maintenance/cleanupTitles.php to - * fix any ZWJ sequences in existing page titles. + * Maximum article size in kilobytes */ -$wgFixMalayalamUnicode = true; +$wgMaxArticleSize = 2048; /** - * Locale for LC_CTYPE, to work around http://bugs.php.net/bug.php?id=45132 - * For Unix-like operating systems, set this to to a locale that has a UTF-8 - * character set. Only the character set is relevant. + * The minimum amount of memory that MediaWiki "needs"; MediaWiki will try to + * raise PHP's memory limit if it's below this amount. + */ +$wgMemoryLimit = "50M"; + +/** @} */ # end performance hacks } + +/************************************************************************//** + * @name Cache settings + * @{ */ -$wgShellLocale = 'en_US.utf8'; /** - * Set this to eg 'ISO-8859-1' to perform character set - * conversion when loading old revisions not marked with - * "utf-8" flag. Use this when converting wiki to UTF-8 - * without the burdensome mass conversion of old text data. + * Directory for caching data in the local filesystem. Should not be accessible + * from the web. Set this to false to not use any local caches. * - * NOTE! This DOES NOT touch any fields other than old_text. - * Titles, comments, user names, etc still must be converted - * en masse in the database before continuing as a UTF-8 wiki. + * Note: if multiple wikis share the same localisation cache directory, they + * must all have the same set of extensions. You can set a directory just for + * the localisation cache using $wgLocalisationCacheConf['storeDirectory']. */ -$wgLegacyEncoding = false; +$wgCacheDirectory = false; /** - * If set to true, the MediaWiki 1.4 to 1.5 schema conversion will - * create stub reference rows in the text table instead of copying - * the full text of all current entries from 'cur' to 'text'. + * Main cache type. This should be a cache with fast access, but it may have + * limited space. By default, it is disabled, since the database is not fast + * enough to make it worthwhile. * - * This will speed up the conversion step for large sites, but - * requires that the cur table be kept around for those revisions - * to remain viewable. + * The options are: * - * maintenance/migrateCurStubs.php can be used to complete the - * migration in the background once the wiki is back online. + * - CACHE_ANYTHING: Use anything, as long as it works + * - CACHE_NONE: Do not cache + * - CACHE_DB: Store cache objects in the DB + * - CACHE_MEMCACHED: MemCached, must specify servers in $wgMemCachedServers + * - CACHE_ACCEL: eAccelerator, APC, XCache or WinCache + * - CACHE_DBA: Use PHP's DBA extension to store in a DBM-style + * database. This is slow, and is not recommended for + * anything other than debugging. * - * This option affects the updaters *only*. Any present cur stub - * revisions will be readable at runtime regardless of this setting. + * @see $wgMessageCacheType, $wgParserCacheType */ -$wgLegacySchemaConversion = false; - -$wgMimeType = 'text/html'; -$wgJsMimeType = 'text/javascript'; -$wgDocType = '-//W3C//DTD XHTML 1.0 Transitional//EN'; -$wgDTD = 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'; -$wgXhtmlDefaultNamespace = 'http://www.w3.org/1999/xhtml'; +$wgMainCacheType = CACHE_NONE; /** - * Should we output an HTML5 doctype? This mode is still experimental, but - * all indications are that it should be usable, so it's enabled by default. - * If all goes well, it will be removed and become always true before the 1.16 - * release. + * The cache type for storing the contents of the MediaWiki namespace. This + * cache is used for a small amount of data which is expensive to regenerate. + * + * For available types see $wgMainCacheType. */ -$wgHtml5 = true; +$wgMessageCacheType = CACHE_ANYTHING; /** - * Defines the value of the version attribute in the <html> tag, if any. - * Will be initialized later if not set explicitly. + * The cache type for storing article HTML. This is used to store data which + * is expensive to regenerate, and benefits from having plenty of storage space. + * + * For available types see $wgMainCacheType. */ -$wgHtml5Version = null; +$wgParserCacheType = CACHE_ANYTHING; /** - * Enabled RDFa attributes for use in wikitext. - * NOTE: Interaction with HTML5 is somewhat underspecified. + * The expiry time for the parser cache, in seconds. The default is 86.4k + * seconds, otherwise known as a day. */ -$wgAllowRdfaAttributes = false; +$wgParserCacheExpireTime = 86400; /** - * Enabled HTML5 microdata attributes for use in wikitext, if $wgHtml5 is also true. + * Select which DBA handler <http://www.php.net/manual/en/dba.requirements.php> to use as CACHE_DBA backend */ -$wgAllowMicrodataAttributes = false; +$wgDBAhandler = 'db3'; /** - * Should we try to make our HTML output well-formed XML? If set to false, - * output will be a few bytes shorter, and the HTML will arguably be more - * readable. If set to true, life will be much easier for the authors of - * screen-scraping bots, and the HTML will arguably be more readable. - * - * Setting this to false may omit quotation marks on some attributes, omit - * slashes from some self-closing tags, omit some ending tags, etc., where - * permitted by HTML5. Setting it to true will not guarantee that all pages - * will be well-formed, although non-well-formed pages should be rare and it's - * a bug if you find one. Conversely, setting it to false doesn't mean that - * all XML-y constructs will be omitted, just that they might be. - * - * Because of compatibility with screen-scraping bots, and because it's - * controversial, this is currently left to true by default. + * Store sessions in MemCached. This can be useful to improve performance, or to + * avoid the locking behaviour of PHP's default session handler, which tends to + * prevent multiple requests for the same user from acting concurrently. */ -$wgWellFormedXml = true; +$wgSessionsInMemcached = false; /** - * Permit other namespaces in addition to the w3.org default. - * Use the prefix for the key and the namespace for the value. For - * example: - * $wgXhtmlNamespaces['svg'] = 'http://www.w3.org/2000/svg'; - * Normally we wouldn't have to define this in the root <html> - * element, but IE needs it there in some circumstances. + * This is used for setting php's session.save_handler. In practice, you will + * almost never need to change this ever. Other options might be 'user' or + * 'session_mysql.' Setting to null skips setting this entirely (which might be + * useful if you're doing cross-application sessions, see bug 11381) */ -$wgXhtmlNamespaces = array(); +$wgSessionHandler = 'files'; + +/** If enabled, will send MemCached debugging information to $wgDebugLogFile */ +$wgMemCachedDebug = false; + +/** The list of MemCached servers and port numbers */ +$wgMemCachedServers = array( '127.0.0.1:11000' ); -/** Enable to allow rewriting dates in page text. - * DOES NOT FORMAT CORRECTLY FOR MOST LANGUAGES */ -$wgUseDynamicDates = false; -/** Enable dates like 'May 12' instead of '12 May', this only takes effect if - * the interface is set to English - */ -$wgAmericanDates = false; /** - * For Hindi and Arabic use local numerals instead of Western style (0-9) - * numerals in interface. + * Use persistent connections to MemCached, which are shared across multiple + * requests. */ -$wgTranslateNumerals = true; +$wgMemCachedPersistent = false; /** - * Translation using MediaWiki: namespace. - * Interface messages will be loaded from the database. + * Read/write timeout for MemCached server communication, in microseconds. */ -$wgUseDatabaseMessages = true; +$wgMemCachedTimeout = 100000; /** - * Expiry time for the message cache key + * Set this to true to make a local copy of the message cache, for use in + * addition to memcached. The files will be put in $wgCacheDirectory. */ -$wgMsgCacheExpiry = 86400; +$wgUseLocalMessageCache = false; /** - * Maximum entry size in the message cache, in bytes + * Defines format of local cache + * true - Serialized object + * false - PHP source file (Warning - security risk) */ -$wgMaxMsgCacheEntrySize = 10000; +$wgLocalMessageCacheSerialized = true; /** - * If true, serialized versions of the messages arrays will be - * read from the 'serialized' subdirectory if they are present. - * Set to false to always use the Messages files, regardless of - * whether they are up to date or not. + * Localisation cache configuration. Associative array with keys: + * class: The class to use. May be overridden by extensions. + * + * store: The location to store cache data. May be 'files', 'db' or + * 'detect'. If set to "files", data will be in CDB files. If set + * to "db", data will be stored to the database. If set to + * "detect", files will be used if $wgCacheDirectory is set, + * otherwise the database will be used. + * + * storeClass: The class name for the underlying storage. If set to a class + * name, it overrides the "store" setting. + * + * storeDirectory: If the store class puts its data in files, this is the + * directory it will use. If this is false, $wgCacheDirectory + * will be used. + * + * manualRecache: Set this to true to disable cache updates on web requests. + * Use maintenance/rebuildLocalisationCache.php instead. */ -$wgEnableSerializedMessages = true; +$wgLocalisationCacheConf = array( + 'class' => 'LocalisationCache', + 'store' => 'detect', + 'storeClass' => false, + 'storeDirectory' => false, + 'manualRecache' => false, +); + +/** Allow client-side caching of pages */ +$wgCachePages = true; /** - * Set to false if you are thorough system admin who always remembers to keep - * serialized files up to date to save few mtime calls. + * Set this to current time to invalidate all prior cached pages. Affects both + * client- and server-side caching. + * You can get the current date on your server by using the command: + * date +%Y%m%d%H%M%S */ -$wgCheckSerialized = true; +$wgCacheEpoch = '20030516000000'; -/** Whether to enable language variant conversion. */ -$wgDisableLangConversion = 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. + */ +$wgStyleVersion = '301'; -/** Whether to enable language variant conversion for links. */ -$wgDisableTitleConversion = false; +/** + * This will cache static pages for non-logged-in users to reduce + * database traffic on public sites. + * Must set $wgShowIPinHeader = false + */ +$wgUseFileCache = false; -/** Default variant code, if false, the default will be the language code */ -$wgDefaultLanguageVariant = false; +/** + * Directory where the cached page will be saved. + * Defaults to "$wgCacheDirectory/html". + */ +$wgFileCacheDirectory = false; -/** Disabled variants array of language variant conversion. - * example: - * $wgDisabledVariants[] = 'zh-mo'; - * $wgDisabledVariants[] = 'zh-my'; - * - * or: - * $wgDisabledVariants = array('zh-mo', 'zh-my'); +/** + * Depth of the subdirectory hierarchy to be created under + * $wgFileCacheDirectory. The subdirectories will be named based on + * the MD5 hash of the title. A value of 0 means all cache files will + * be put directly into the main file cache directory. */ -$wgDisabledVariants = array(); +$wgFileCacheDepth = 2; /** - * Like $wgArticlePath, but on multi-variant wikis, this provides a - * path format that describes which parts of the URL contain the - * language variant. For Example: - * - * $wgLanguageCode = 'sr'; - * $wgVariantArticlePath = '/$2/$1'; - * $wgArticlePath = '/wiki/$1'; - * - * A link to /wiki/ would be redirected to /sr/Главна_страна + * Keep parsed pages in a cache (objectcache table or memcached) + * to speed up output of the same page viewed by another user with the + * same options. * - * It is important that $wgArticlePath not overlap with possible values - * of $wgVariantArticlePath. + * This can provide a significant speedup for medium to large pages, + * so you probably want to keep it on. Extensions that conflict with the + * parser cache should disable the cache on a per-page basis instead. */ -$wgVariantArticlePath = false;///< defaults to false +$wgEnableParserCache = true; /** - * Show a bar of language selection links in the user login and user - * registration forms; edit the "loginlanguagelinks" message to - * customise these + * Append a configured value to the parser cache and the sitenotice key so + * that they can be kept separate for some class of activity. */ -$wgLoginLanguageSelector = false; +$wgRenderHashAppend = ''; /** - * Whether to use zhdaemon to perform Chinese text processing - * zhdaemon is under developement, so normally you don't want to - * use it unless for testing + * If on, the sidebar navigation links are cached for users with the + * current language set. This can save a touch of load on a busy site + * by shaving off extra message lookups. + * + * However it is also fragile: changing the site configuration, or + * having a variable $wgArticlePath, can produce broken links that + * don't update as expected. */ -$wgUseZhdaemon = false; -$wgZhdaemonHost="localhost"; -$wgZhdaemonPort=2004; - - -# Miscellaneous configuration settings -# +$wgEnableSidebarCache = false; -$wgLocalInterwiki = 'w'; -$wgInterwikiExpiry = 10800; # Expiry time for cache of interwiki table - -/** Interwiki caching settings. - $wgInterwikiCache specifies path to constant database file - This cdb database is generated by dumpInterwiki from maintenance - and has such key formats: - dbname:key - a simple key (e.g. enwiki:meta) - _sitename:key - site-scope key (e.g. wiktionary:meta) - __global:key - global-scope key (e.g. __global:meta) - __sites:dbname - site mapping (e.g. __sites:enwiki) - Sites mapping just specifies site name, other keys provide - "local url" data layout. - $wgInterwikiScopes specify number of domains to check for messages: - 1 - Just wiki(db)-level - 2 - wiki and global levels - 3 - site levels - $wgInterwikiFallbackSite - if unable to resolve from cache - */ -$wgInterwikiCache = false; -$wgInterwikiScopes = 3; -$wgInterwikiFallbackSite = 'wiki'; +/** + * Expiry time for the sidebar cache, in seconds + */ +$wgSidebarCacheExpiry = 86400; /** - * If local interwikis are set up which allow redirects, - * set this regexp to restrict URLs which will be displayed - * as 'redirected from' links. - * - * It might look something like this: - * $wgRedirectSources = '!^https?://[a-z-]+\.wikipedia\.org/!'; + * When using the file cache, we can store the cached HTML gzipped to save disk + * space. Pages will then also be served compressed to clients that support it. + * THIS IS NOT COMPATIBLE with ob_gzhandler which is now enabled if supported in + * the default LocalSettings.php! If you enable this, remove that setting first. * - * Leave at false to avoid displaying any incoming redirect markers. - * This does not affect intra-wiki redirects, which don't change - * the URL. + * Requires zlib support enabled in PHP. */ -$wgRedirectSources = false; - - -$wgShowIPinHeader = true; # For non-logged in users -$wgMaxSigChars = 255; # Maximum number of Unicode characters in signature -$wgMaxArticleSize = 2048; # Maximum article size in kilobytes -# Maximum number of bytes in username. You want to run the maintenance -# script ./maintenancecheckUsernames.php once you have changed this value -$wgMaxNameChars = 255; - -$wgMaxPPNodeCount = 1000000; # A complexity limit on template expansion +$wgUseGzip = false; /** - * Maximum recursion depth for templates within templates. - * The current parser adds two levels to the PHP call stack for each template, - * and xdebug limits the call stack to 100 by default. So this should hopefully - * stop the parser before it hits the xdebug limit. + * Whether MediaWiki should send an ETag header. Seems to cause + * broken behavior with Squid 2.6, see bug 7098. */ -$wgMaxTemplateDepth = 40; -$wgMaxPPExpandDepth = 40; +$wgUseETag = false; -/** - * If true, removes (substitutes) templates in "~~~~" signatures. +/** Clock skew or the one-second resolution of time() can occasionally cause cache + * problems when the user requests two pages within a short period of time. This + * variable adds a given number of seconds to vulnerable timestamps, thereby giving + * a grace period. */ -$wgCleanSignatures = true; - -$wgExtraSubtitle = ''; -$wgSiteSupportPage = ''; # A page where you users can receive donations +$wgClockSkewFudge = 5; /** - * Set this to a string to put the wiki into read-only mode. The text will be - * used as an explanation to users. + * Invalidate various caches when LocalSettings.php changes. This is equivalent + * to setting $wgCacheEpoch to the modification time of LocalSettings.php, as + * was previously done in the default LocalSettings.php file. * - * This prevents most write operations via the web interface. Cache updates may - * still be possible. To prevent database writes completely, use the read_only - * option in MySQL. + * On high-traffic wikis, this should be set to false, to avoid the need to + * check the file modification time, and to avoid the performance impact of + * unnecessary cache invalidations. */ -$wgReadOnly = null; +$wgInvalidateCacheOnLocalSettingsChange = true; -/*** - * If this lock file exists (size > 0), the wiki will be forced into read-only mode. - * Its contents will be shown to users as part of the read-only warning - * message. +/** @} */ # end of cache settings + +/************************************************************************//** + * @name HTTP proxy (Squid) settings + * + * Many of these settings apply to any HTTP proxy used in front of MediaWiki, + * although they are referred to as Squid settings for historical reasons. + * + * Achieving a high hit ratio with an HTTP proxy requires special + * configuration. See http://www.mediawiki.org/wiki/Manual:Squid_caching for + * more details. + * + * @{ */ -$wgReadOnlyFile = false; ///< defaults to "{$wgUploadDirectory}/lock_yBgMBwiR"; /** - * Filename for debug logging. See http://www.mediawiki.org/wiki/How_to_debug - * The debug log file should be not be publicly accessible if it is used, as it - * may contain private data. + * Enable/disable Squid. + * See http://www.mediawiki.org/wiki/Manual:Squid_caching */ -$wgDebugLogFile = ''; +$wgUseSquid = false; + +/** If you run Squid3 with ESI support, enable this (default:false): */ +$wgUseESI = false; + +/** Send X-Vary-Options header for better caching (requires patched Squid) */ +$wgUseXVO = false; /** - * Prefix for debug log lines + * Internal server name as known to Squid, if different. Example: + * <code> + * $wgInternalServer = 'http://yourinternal.tld:8000'; + * </code> */ -$wgDebugLogPrefix = ''; +$wgInternalServer = $wgServer; /** - * If true, instead of redirecting, show a page with a link to the redirect - * destination. This allows for the inspection of PHP error messages, and easy - * resubmission of form data. For developer use only. + * Cache timeout for the squid, will be sent as s-maxage (without ESI) or + * Surrogate-Control (with ESI). Without ESI, you should strip out s-maxage in + * the Squid config. 18000 seconds = 5 hours, more cache hits with 2678400 = 31 + * days */ -$wgDebugRedirects = false; +$wgSquidMaxage = 18000; /** - * If true, log debugging data from action=raw. - * This is normally false to avoid overlapping debug entries due to gen=css and - * gen=js requests. + * Default maximum age for raw CSS/JS accesses */ -$wgDebugRawPage = false; +$wgForcedRawSMaxage = 300; /** - * Send debug data to an HTML comment in the output. + * List of proxy servers to purge on changes; default port is 80. Use IP addresses. * - * This may occasionally be useful when supporting a non-technical end-user. It's - * more secure than exposing the debug log file to the web, since the output only - * contains private data for the current user. But it's not ideal for development - * use since data is lost on fatal errors and redirects. + * When MediaWiki is running behind a proxy, it will trust X-Forwarded-For + * headers sent/modified from these proxies when obtaining the remote IP address + * + * For a list of trusted servers which *aren't* purged, see $wgSquidServersNoPurge. */ -$wgDebugComments = false; +$wgSquidServers = array(); /** - * Write SQL queries to the debug log + * As above, except these servers aren't purged on page changes; use to set a + * list of trusted proxies, etc. */ -$wgDebugDumpSql = false; +$wgSquidServersNoPurge = array(); -/** - * Set to an array of log group keys to filenames. - * If set, wfDebugLog() output for that group will go to that file instead - * of the regular $wgDebugLogFile. Useful for enabling selective logging - * in production. - */ -$wgDebugLogGroups = array(); +/** Maximum number of titles to purge in any one client operation */ +$wgMaxSquidPurgeTitles = 400; /** - * Display debug data at the bottom of the main content area. + * HTCP multicast address. Set this to a multicast IP address to enable HTCP. * - * Useful for developers and technical users trying to working on a closed wiki. + * Note that MediaWiki uses the old non-RFC compliant HTCP format, which was + * present in the earliest Squid implementations of the protocol. */ -$wgShowDebug = false; +$wgHTCPMulticastAddress = false; /** - * Prefix debug messages with relative timestamp. Very-poor man's profiler. + * HTCP multicast port. + * @see $wgHTCPMulticastAddress */ -$wgDebugTimestamps = false; +$wgHTCPPort = 4827; /** - * Print HTTP headers for every request in the debug information. + * HTCP multicast TTL. + * @see $wgHTCPMulticastAddress */ -$wgDebugPrintHttpHeaders = true; +$wgHTCPMulticastTTL = 1; -/** - * Show the contents of $wgHooks in Special:Version - */ -$wgSpecialVersionShowHooks = false; +/** Should forwarded Private IPs be accepted? */ +$wgUsePrivateIPs = false; -/** - * Whether to show "we're sorry, but there has been a database error" pages. - * Displaying errors aids in debugging, but may display information useful - * to an attacker. - */ -$wgShowSQLErrors = false; +/** @} */ # end of HTTP proxy settings -/** - * If true, some error messages will be colorized when running scripts on the - * command line; this can aid picking important things out when debugging. - * Ignored when running on Windows or when output is redirected to a file. +/************************************************************************//** + * @name Language, regional and character encoding settings + * @{ */ -$wgColorErrors = true; -/** - * If set to true, uncaught exceptions will print a complete stack trace - * to output. This should only be used for debugging, as it may reveal - * private information in function parameters due to PHP's backtrace - * formatting. - */ -$wgShowExceptionDetails = false; +/** Site language code, should be one of ./languages/Language(.*).php */ +$wgLanguageCode = 'en'; /** - * If true, show a backtrace for database errors + * Some languages need different word forms, usually for different cases. + * Used in Language::convertGrammar(). Example: + * + * <code> + * $wgGrammarForms['en']['genitive']['car'] = 'car\'s'; + * </code> */ -$wgShowDBErrorBacktrace = false; +$wgGrammarForms = array(); -/** - * Expose backend server host names through the API and various HTML comments - */ -$wgShowHostnames = false; +/** Treat language links as magic connectors, not inline links */ +$wgInterwikiMagic = true; -/** - * If set to true MediaWiki will throw notices for some possible error - * conditions and for deprecated functions. - */ -$wgDevelopmentWarnings = false; +/** Hide interlanguage links from the sidebar */ +$wgHideInterlanguageLinks = false; -/** - * Use experimental, DMOZ-like category browser - */ -$wgUseCategoryBrowser = false; +/** List of language names or overrides for default names in Names.php */ +$wgExtraLanguageNames = array(); /** - * Keep parsed pages in a cache (objectcache table or memcached) - * to speed up output of the same page viewed by another user with the - * same options. - * - * This can provide a significant speedup for medium to large pages, - * so you probably want to keep it on. Extensions that conflict with the - * parser cache should disable the cache on a per-page basis instead. + * List of language codes that don't correspond to an actual language. + * These codes are leftoffs from renames, or other legacy things. + * Also, qqq is a dummy "language" for documenting messages. */ -$wgEnableParserCache = true; +$wgDummyLanguageCodes = array( + 'als', + 'bat-smg', + 'be-x-old', + 'dk', + 'fiu-vro', + 'iu', + 'nb', + 'qqq', + 'simple', + 'tp', +); -/** - * Append a configured value to the parser cache and the sitenotice key so - * that they can be kept separate for some class of activity. - */ -$wgRenderHashAppend = ''; +/** @deprecated Since MediaWiki 1.5, this must always be set to UTF-8. */ +$wgInputEncoding = 'UTF-8'; +/** @deprecated Since MediaWiki 1.5, this must always be set to UTF-8. */ +$wgOutputEncoding = 'UTF-8'; /** - * If on, the sidebar navigation links are cached for users with the - * current language set. This can save a touch of load on a busy site - * by shaving off extra message lookups. + * Character set for use in the article edit box. Language-specific encodings + * may be defined. * - * However it is also fragile: changing the site configuration, or - * having a variable $wgArticlePath, can produce broken links that - * don't update as expected. + * This historic feature is one of the first that was added by former MediaWiki + * team leader Brion Vibber, and is used to support the Esperanto x-system. */ -$wgEnableSidebarCache = false; +$wgEditEncoding = ''; /** - * Expiry time for the sidebar cache, in seconds + * Set this to true to replace Arabic presentation forms with their standard + * forms in the U+0600-U+06FF block. This only works if $wgLanguageCode is + * set to "ar". + * + * Note that pages with titles containing presentation forms will become + * inaccessible, run maintenance/cleanupTitles.php to fix this. */ -$wgSidebarCacheExpiry = 86400; +$wgFixArabicUnicode = true; /** - * Under which condition should a page in the main namespace be counted - * as a valid article? If $wgUseCommaCount is set to true, it will be - * counted if it contains at least one comma. If it is set to false - * (default), it will only be counted if it contains at least one [[wiki - * link]]. See http://www.mediawiki.org/wiki/Manual:Article_count + * Set this to true to replace ZWJ-based chillu sequences in Malayalam text + * with their Unicode 5.1 equivalents. This only works if $wgLanguageCode is + * set to "ml". Note that some clients (even new clients as of 2010) do not + * support these characters. * - * Retroactively changing this variable will not affect - * the existing count (cf. maintenance/recount.sql). + * If you enable this on an existing wiki, run maintenance/cleanupTitles.php to + * fix any ZWJ sequences in existing page titles. */ -$wgUseCommaCount = false; +$wgFixMalayalamUnicode = true; /** - * wgHitcounterUpdateFreq sets how often page counters should be updated, higher - * values are easier on the database. A value of 1 causes the counters to be - * updated on every hit, any higher value n cause them to update *on average* - * every n hits. Should be set to either 1 or something largish, eg 1000, for - * maximum efficiency. + * Set this to always convert certain Unicode sequences to modern ones + * regardless of the content language. This has a small performance + * impact. + * + * See $wgFixArabicUnicode and $wgFixMalayalamUnicode for conversion + * details. + * + * @since 1.17 */ -$wgHitcounterUpdateFreq = 1; - -# Basic user rights and block settings -$wgSysopUserBans = true; # Allow sysops to ban logged-in users -$wgSysopRangeBans = true; # Allow sysops to ban IP ranges -$wgAutoblockExpiry = 86400; # Number of seconds before autoblock entries expire -$wgBlockAllowsUTEdit = false; # Default setting for option on block form to allow self talkpage editing whilst blocked -$wgSysopEmailBans = true; # Allow sysops to ban users from accessing Emailuser -$wgBlockCIDRLimit = array( - 'IPv4' => 16, # Blocks larger than a /16 (64k addresses) will not be allowed - 'IPv6' => 64, # 2^64 = ~1.8x10^19 addresses -); +$wgAllUnicodeFixes = false; /** - * If true, blocked users will not be allowed to login. When using this with - * a public wiki, the effect of logging out blocked users may actually be - * avers: unless the user's address is also blocked (e.g. auto-block), - * logging the user out will again allow reading and editing, just as for - * anonymous visitors. + * Set this to eg 'ISO-8859-1' to perform character set conversion when + * loading old revisions not marked with "utf-8" flag. Use this when + * converting a wiki from MediaWiki 1.4 or earlier to UTF-8 without the + * burdensome mass conversion of old text data. + * + * NOTE! This DOES NOT touch any fields other than old_text.Titles, comments, + * user names, etc still must be converted en masse in the database before + * continuing as a UTF-8 wiki. */ -$wgBlockDisablesLogin = false; # - -# Pages anonymous user may see as an array, e.g.: -# array ( "Main Page", "Wikipedia:Help"); -# Special:Userlogin and Special:Resetpass are always whitelisted. -# NOTE: This will only work if $wgGroupPermissions['*']['read'] -# is false -- see below. Otherwise, ALL pages are accessible, -# regardless of this setting. -# Also note that this will only protect _pages in the wiki_. -# Uploaded files will remain readable. Make your upload -# directory name unguessable, or use .htaccess to protect it. -$wgWhitelistRead = false; +$wgLegacyEncoding = false; /** - * Should editors be required to have a validated e-mail - * address before being allowed to edit? + * Browser Blacklist for unicode non compliant browsers. Contains a list of + * regexps : "/regexp/" matching problematic browsers. These browsers will + * be served encoded unicode in the edit box instead of real unicode. */ -$wgEmailConfirmToEdit=false; - -/** - * Permission keys given to users in each group. - * All users are implicitly in the '*' group including anonymous visitors; - * logged-in users are all implicitly in the 'user' group. These will be - * combined with the permissions of all groups that a given user is listed - * in in the user_groups table. +$wgBrowserBlackList = array( + /** + * Netscape 2-4 detection + * The minor version may contain strings such as "Gold" or "SGoldC-SGI" + * Lots of non-netscape user agents have "compatible", so it's useful to check for that + * with a negative assertion. The [UIN] identifier specifies the level of security + * in a Netscape/Mozilla browser, checking for it rules out a number of fakers. + * The language string is unreliable, it is missing on NS4 Mac. + * + * Reference: http://www.psychedelix.com/agents/index.shtml + */ + '/^Mozilla\/2\.[^ ]+ [^(]*?\((?!compatible).*; [UIN]/', + '/^Mozilla\/3\.[^ ]+ [^(]*?\((?!compatible).*; [UIN]/', + '/^Mozilla\/4\.[^ ]+ [^(]*?\((?!compatible).*; [UIN]/', + + /** + * MSIE on Mac OS 9 is teh sux0r, converts þ to <thorn>, ð to <eth>, Þ to <THORN> and Ð to <ETH> + * + * Known useragents: + * - Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC) + * - Mozilla/4.0 (compatible; MSIE 5.15; Mac_PowerPC) + * - Mozilla/4.0 (compatible; MSIE 5.23; Mac_PowerPC) + * - [...] + * + * @link http://en.wikipedia.org/w/index.php?title=User%3A%C6var_Arnfj%F6r%F0_Bjarmason%2Ftestme&diff=12356041&oldid=12355864 + * @link http://en.wikipedia.org/wiki/Template%3AOS9 + */ + '/^Mozilla\/4\.0 \(compatible; MSIE \d+\.\d+; Mac_PowerPC\)/', + + /** + * Google wireless transcoder, seems to eat a lot of chars alive + * http://it.wikipedia.org/w/index.php?title=Luciano_Ligabue&diff=prev&oldid=8857361 + */ + '/^Mozilla\/4\.0 \(compatible; MSIE 6.0; Windows NT 5.0; Google Wireless Transcoder;\)/' +); + +/** + * If set to true, the MediaWiki 1.4 to 1.5 schema conversion will + * create stub reference rows in the text table instead of copying + * the full text of all current entries from 'cur' to 'text'. + * + * This will speed up the conversion step for large sites, but + * requires that the cur table be kept around for those revisions + * to remain viewable. + * + * maintenance/migrateCurStubs.php can be used to complete the + * migration in the background once the wiki is back online. + * + * This option affects the updaters *only*. Any present cur stub + * revisions will be readable at runtime regardless of this setting. + */ +$wgLegacySchemaConversion = false; + +/** + * Enable to allow rewriting dates in page text. + * DOES NOT FORMAT CORRECTLY FOR MOST LANGUAGES. + */ +$wgUseDynamicDates = false; +/** + * Enable dates like 'May 12' instead of '12 May', this only takes effect if + * the interface is set to English. + */ +$wgAmericanDates = false; +/** + * For Hindi and Arabic use local numerals instead of Western style (0-9) + * numerals in interface. + */ +$wgTranslateNumerals = true; + +/** + * Translation using MediaWiki: namespace. + * Interface messages will be loaded from the database. + */ +$wgUseDatabaseMessages = true; + +/** + * Expiry time for the message cache key + */ +$wgMsgCacheExpiry = 86400; + +/** + * Maximum entry size in the message cache, in bytes + */ +$wgMaxMsgCacheEntrySize = 10000; + +/** Whether to enable language variant conversion. */ +$wgDisableLangConversion = false; + +/** Whether to enable language variant conversion for links. */ +$wgDisableTitleConversion = false; + +/** Whether to enable cononical language links in meta data. */ +$wgCanonicalLanguageLinks = true; + +/** Default variant code, if false, the default will be the language code */ +$wgDefaultLanguageVariant = false; + +/** + * Disabled variants array of language variant conversion. Example: + * <code> + * $wgDisabledVariants[] = 'zh-mo'; + * $wgDisabledVariants[] = 'zh-my'; + * </code> + * + * or: + * + * <code> + * $wgDisabledVariants = array('zh-mo', 'zh-my'); + * </code> + */ +$wgDisabledVariants = array(); + +/** + * Like $wgArticlePath, but on multi-variant wikis, this provides a + * path format that describes which parts of the URL contain the + * language variant. For Example: + * + * $wgLanguageCode = 'sr'; + * $wgVariantArticlePath = '/$2/$1'; + * $wgArticlePath = '/wiki/$1'; + * + * A link to /wiki/ would be redirected to /sr/Главна_страна + * + * It is important that $wgArticlePath not overlap with possible values + * of $wgVariantArticlePath. + */ +$wgVariantArticlePath = false; + +/** + * Show a bar of language selection links in the user login and user + * registration forms; edit the "loginlanguagelinks" message to + * customise these. + */ +$wgLoginLanguageSelector = false; + +/** + * When translating messages with wfMsg(), it is not always clear what should + * be considered UI messages and what should be content messages. + * + * For example, for the English Wikipedia, there should be only one 'mainpage', + * so when getting the link for 'mainpage', we should treat it as site content + * and call wfMsgForContent(), but for rendering the text of the link, we call + * wfMsg(). The code behaves this way by default. However, sites like the + * Wikimedia Commons do offer different versions of 'mainpage' and the like for + * different languages. This array provides a way to override the default + * behavior. For example, to allow language-specific main page and community + * portal, set + * + * $wgForceUIMsgAsContentMsg = array( 'mainpage', 'portal-url' ); + */ +$wgForceUIMsgAsContentMsg = array(); + +/** + * Fake out the timezone that the server thinks it's in. This will be used for + * date display and not for what's stored in the DB. Leave to null to retain + * your server's OS-based timezone value. + * + * This variable is currently used only for signature formatting and for local + * time/date parser variables ({{LOCALTIME}} etc.) + * + * Timezones can be translated by editing MediaWiki messages of type + * timezone-nameinlowercase like timezone-utc. + * + * Examples: + * <code> + * $wgLocaltimezone = 'GMT'; + * $wgLocaltimezone = 'PST8PDT'; + * $wgLocaltimezone = 'Europe/Sweden'; + * $wgLocaltimezone = 'CET'; + * </code> + */ +$wgLocaltimezone = null; + +/** + * Set an offset from UTC in minutes to use for the default timezone setting + * for anonymous users and new user accounts. + * + * This setting is used for most date/time displays in the software, and is + * overrideable in user preferences. It is *not* used for signature timestamps. + * + * You can set it to match the configured server timezone like this: + * $wgLocalTZoffset = date("Z") / 60; + * + * If your server is not configured for the timezone you want, you can set + * this in conjunction with the signature timezone and override the PHP default + * timezone like so: + * $wgLocaltimezone="Europe/Berlin"; + * date_default_timezone_set( $wgLocaltimezone ); + * $wgLocalTZoffset = date("Z") / 60; + * + * Leave at NULL to show times in universal time (UTC/GMT). + */ +$wgLocalTZoffset = null; + +/** @} */ # End of language/charset settings + +/*************************************************************************//** + * @name Output format and skin settings + * @{ + */ + +/** The default Content-Type header. */ +$wgMimeType = 'text/html'; + +/** The content type used in script tags. */ +$wgJsMimeType = 'text/javascript'; + +/** The HTML document type. */ +$wgDocType = '-//W3C//DTD XHTML 1.0 Transitional//EN'; + +/** The URL of the document type declaration. */ +$wgDTD = 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'; + +/** The default xmlns attribute. */ +$wgXhtmlDefaultNamespace = 'http://www.w3.org/1999/xhtml'; + +/** + * Should we output an HTML5 doctype? If false, use XHTML 1.0 Transitional + * instead, and disable HTML5 features. This may eventually be removed and set + * to always true. + */ +$wgHtml5 = true; + +/** + * Defines the value of the version attribute in the <html> tag, if any. + * Will be initialized later if not set explicitly. + */ +$wgHtml5Version = null; + +/** + * Enabled RDFa attributes for use in wikitext. + * NOTE: Interaction with HTML5 is somewhat underspecified. + */ +$wgAllowRdfaAttributes = false; + +/** + * Enabled HTML5 microdata attributes for use in wikitext, if $wgHtml5 is also true. + */ +$wgAllowMicrodataAttributes = false; + +/** + * Should we try to make our HTML output well-formed XML? If set to false, + * output will be a few bytes shorter, and the HTML will arguably be more + * readable. If set to true, life will be much easier for the authors of + * screen-scraping bots, and the HTML will arguably be more readable. + * + * Setting this to false may omit quotation marks on some attributes, omit + * slashes from some self-closing tags, omit some ending tags, etc., where + * permitted by HTML5. Setting it to true will not guarantee that all pages + * will be well-formed, although non-well-formed pages should be rare and it's + * a bug if you find one. Conversely, setting it to false doesn't mean that + * all XML-y constructs will be omitted, just that they might be. + * + * Because of compatibility with screen-scraping bots, and because it's + * controversial, this is currently left to true by default. + */ +$wgWellFormedXml = true; + +/** + * Permit other namespaces in addition to the w3.org default. + * Use the prefix for the key and the namespace for the value. For + * example: + * $wgXhtmlNamespaces['svg'] = 'http://www.w3.org/2000/svg'; + * Normally we wouldn't have to define this in the root <html> + * element, but IE needs it there in some circumstances. + */ +$wgXhtmlNamespaces = array(); + +/** + * Show IP address, for non-logged in users. It's necessary to switch this off + * for some forms of caching. + */ +$wgShowIPinHeader = true; + +/** + * Site notice shown at the top of each page + * + * MediaWiki:Sitenotice page, which will override this. You can also + * provide a separate message for logged-out users using the + * MediaWiki:Anonnotice page. + */ +$wgSiteNotice = ''; + +/** + * A subtitle to add to the tagline, for skins that have it/ + */ +$wgExtraSubtitle = ''; + +/** + * If this is set, a "donate" link will appear in the sidebar. Set it to a URL. + */ +$wgSiteSupportPage = ''; + +/** + * Validate the overall output using tidy and refuse + * to display the page if it's not valid. + */ +$wgValidateAllHtml = false; + +/** + * Default skin, for new users and anonymous visitors. Registered users may + * change this to any one of the other available skins in their preferences. + * This has to be completely lowercase; see the "skins" directory for the list + * of available skins. + */ +$wgDefaultSkin = 'vector'; + +/** +* Should we allow the user's to select their own skin that will override the default? +* @deprecated in 1.16, use $wgHiddenPrefs[] = 'skin' to disable it +*/ +$wgAllowUserSkin = true; + +/** + * Specify the name of a skin that should not be presented in the list of + * available skins. Use for blacklisting a skin which you do not want to + * remove from the .../skins/ directory + */ +$wgSkipSkin = ''; +/** Array for more like $wgSkipSkin. */ +$wgSkipSkins = array(); + +/** + * Optionally, we can specify a stylesheet to use for media="handheld". + * This is recognized by some, but not all, handheld/mobile/PDA browsers. + * If left empty, compliant handheld browsers won't pick up the skin + * stylesheet, which is specified for 'screen' media. * - * Note: Don't set $wgGroupPermissions = array(); unless you know what you're - * doing! This will wipe all permissions, and may mean that your users are - * unable to perform certain essential tasks or access new functionality - * when new permissions are introduced and default grants established. + * Can be a complete URL, base-relative path, or $wgStylePath-relative path. + * Try 'chick/main.css' to apply the Chick styles to the MonoBook HTML. * - * Functionality to make pages inaccessible has not been extensively tested - * for security. Use at your own risk! + * Will also be switched in when 'handheld=yes' is added to the URL, like + * the 'printable=yes' mode for print media. + */ +$wgHandheldStyle = false; + +/** + * If set, 'screen' and 'handheld' media specifiers for stylesheets are + * transformed such that they apply to the iPhone/iPod Touch Mobile Safari, + * which doesn't recognize 'handheld' but does support media queries on its + * screen size. * - * This replaces wgWhitelistAccount and wgWhitelistEdit + * Consider only using this if you have a *really good* handheld stylesheet, + * as iPhone users won't have any way to disable it and use the "grown-up" + * styles instead. */ -$wgGroupPermissions = array(); +$wgHandheldForIPhone = false; -// Implicit group for all visitors -$wgGroupPermissions['*']['createaccount'] = true; -$wgGroupPermissions['*']['read'] = true; -$wgGroupPermissions['*']['edit'] = true; -$wgGroupPermissions['*']['createpage'] = true; -$wgGroupPermissions['*']['createtalk'] = true; -$wgGroupPermissions['*']['writeapi'] = true; -//$wgGroupPermissions['*']['patrolmarks'] = false; // let anons see what was patrolled +/** + * Allow user Javascript page? + * This enables a lot of neat customizations, but may + * increase security risk to users and server load. + */ +$wgAllowUserJs = false; -// Implicit group for all logged-in accounts -$wgGroupPermissions['user']['move'] = true; -$wgGroupPermissions['user']['move-subpages'] = true; -$wgGroupPermissions['user']['move-rootuserpages'] = true; // can move root userpages -//$wgGroupPermissions['user']['movefile'] = true; // Disabled for now due to possible bugs and security concerns -$wgGroupPermissions['user']['read'] = true; -$wgGroupPermissions['user']['edit'] = true; -$wgGroupPermissions['user']['createpage'] = true; -$wgGroupPermissions['user']['createtalk'] = true; -$wgGroupPermissions['user']['writeapi'] = true; -$wgGroupPermissions['user']['upload'] = true; -$wgGroupPermissions['user']['reupload'] = true; -$wgGroupPermissions['user']['reupload-shared'] = true; -$wgGroupPermissions['user']['minoredit'] = true; -$wgGroupPermissions['user']['purge'] = true; // can use ?action=purge without clicking "ok" -$wgGroupPermissions['user']['sendemail'] = true; +/** + * Allow user Cascading Style Sheets (CSS)? + * This enables a lot of neat customizations, but may + * increase security risk to users and server load. + */ +$wgAllowUserCss = false; -// Implicit group for accounts that pass $wgAutoConfirmAge -$wgGroupPermissions['autoconfirmed']['autoconfirmed'] = true; +/** + * Allow user-preferences implemented in CSS? + * This allows users to customise the site appearance to a greater + * degree; disabling it will improve page load times. + */ +$wgAllowUserCssPrefs = true; -// Users with bot privilege can have their edits hidden -// from various log pages by default -$wgGroupPermissions['bot']['bot'] = true; -$wgGroupPermissions['bot']['autoconfirmed'] = true; -$wgGroupPermissions['bot']['nominornewtalk'] = true; -$wgGroupPermissions['bot']['autopatrol'] = true; -$wgGroupPermissions['bot']['suppressredirect'] = true; -$wgGroupPermissions['bot']['apihighlimits'] = true; -$wgGroupPermissions['bot']['writeapi'] = true; -#$wgGroupPermissions['bot']['editprotected'] = true; // can edit all protected pages without cascade protection enabled +/** Use the site's Javascript page? */ +$wgUseSiteJs = true; -// Most extra permission abilities go to this group -$wgGroupPermissions['sysop']['block'] = true; -$wgGroupPermissions['sysop']['createaccount'] = true; -$wgGroupPermissions['sysop']['delete'] = true; -$wgGroupPermissions['sysop']['bigdelete'] = true; // can be separately configured for pages with > $wgDeleteRevisionsLimit revs -$wgGroupPermissions['sysop']['deletedhistory'] = true; // can view deleted history entries, but not see or restore the text -$wgGroupPermissions['sysop']['deletedtext'] = true; // can view deleted revision text -$wgGroupPermissions['sysop']['undelete'] = true; -$wgGroupPermissions['sysop']['editinterface'] = true; -$wgGroupPermissions['sysop']['editusercss'] = true; -$wgGroupPermissions['sysop']['edituserjs'] = true; -$wgGroupPermissions['sysop']['import'] = true; -$wgGroupPermissions['sysop']['importupload'] = true; -$wgGroupPermissions['sysop']['move'] = true; -$wgGroupPermissions['sysop']['move-subpages'] = true; -$wgGroupPermissions['sysop']['move-rootuserpages'] = true; -$wgGroupPermissions['sysop']['patrol'] = true; -$wgGroupPermissions['sysop']['autopatrol'] = true; -$wgGroupPermissions['sysop']['protect'] = true; -$wgGroupPermissions['sysop']['proxyunbannable'] = true; -$wgGroupPermissions['sysop']['rollback'] = true; -$wgGroupPermissions['sysop']['trackback'] = true; -$wgGroupPermissions['sysop']['upload'] = true; -$wgGroupPermissions['sysop']['reupload'] = true; -$wgGroupPermissions['sysop']['reupload-shared'] = true; -$wgGroupPermissions['sysop']['unwatchedpages'] = true; -$wgGroupPermissions['sysop']['autoconfirmed'] = true; -$wgGroupPermissions['sysop']['upload_by_url'] = true; -$wgGroupPermissions['sysop']['ipblock-exempt'] = true; -$wgGroupPermissions['sysop']['blockemail'] = true; -$wgGroupPermissions['sysop']['markbotedits'] = true; -$wgGroupPermissions['sysop']['apihighlimits'] = true; -$wgGroupPermissions['sysop']['browsearchive'] = true; -$wgGroupPermissions['sysop']['noratelimit'] = true; -$wgGroupPermissions['sysop']['versiondetail'] = true; -$wgGroupPermissions['sysop']['movefile'] = true; -#$wgGroupPermissions['sysop']['mergehistory'] = true; +/** Use the site's Cascading Style Sheets (CSS)? */ +$wgUseSiteCss = true; -// Permission to change users' group assignments -$wgGroupPermissions['bureaucrat']['userrights'] = true; -$wgGroupPermissions['bureaucrat']['noratelimit'] = true; -// Permission to change users' groups assignments across wikis -#$wgGroupPermissions['bureaucrat']['userrights-interwiki'] = true; -// Permission to export pages including linked pages regardless of $wgExportMaxLinkDepth -#$wgGroupPermissions['bureaucrat']['override-export-depth'] = true; +/** + * Set to false to disable application of access keys and tooltips, + * eg to avoid keyboard conflicts with system keys or as a low-level + * optimization. + */ +$wgEnableTooltipsAndAccesskeys = true; -#$wgGroupPermissions['sysop']['deleterevision'] = true; -// To hide usernames from users and Sysops -#$wgGroupPermissions['suppress']['hideuser'] = true; -// To hide revisions/log items from users and Sysops -#$wgGroupPermissions['suppress']['suppressrevision'] = true; -// For private suppression log access -#$wgGroupPermissions['suppress']['suppressionlog'] = true; +/** + * Break out of framesets. This can be used to prevent clickjacking attacks, + * or to prevent external sites from framing your site with ads. + */ +$wgBreakFrames = false; /** - * The developer group is deprecated, but can be activated if need be - * to use the 'lockdb' and 'unlockdb' special pages. Those require - * that a lock file be defined and creatable/removable by the web - * server. + * The X-Frame-Options header to send on pages sensitive to clickjacking + * attacks, such as edit pages. This prevents those pages from being displayed + * in a frame or iframe. The options are: + * + * - 'DENY': Do not allow framing. This is recommended for most wikis. + * + * - 'SAMEORIGIN': Allow framing by pages on the same domain. This can be used + * to allow framing within a trusted domain. This is insecure if there + * is a page on the same domain which allows framing of arbitrary URLs. + * + * - false: Allow all framing. This opens up the wiki to XSS attacks and thus + * full compromise of local user accounts. Private wikis behind a + * corporate firewall are especially vulnerable. This is not + * recommended. + * + * For extra safety, set $wgBreakFrames = true, to prevent framing on all pages, + * not just edit pages. + */ +$wgEditPageFrameOptions = 'DENY'; + +/** + * Disable output compression (enabled by default if zlib is available) + */ +$wgDisableOutputCompression = false; + +/** + * Should we allow a broader set of characters in id attributes, per HTML5? If + * not, use only HTML 4-compatible IDs. This option is for testing -- when the + * functionality is ready, it will be on by default with no option. + * + * Currently this appears to work fine in all browsers, but it's disabled by + * default because it normalizes id's a bit too aggressively, breaking preexisting + * content (particularly Cite). See bug 27733, bug 27694, bug 27474. + */ +$wgExperimentalHtmlIds = false; + +/** + * Abstract list of footer icons for skins in place of old copyrightico and poweredbyico code + * You can add new icons to the built in copyright or poweredby, or you can create + * a new block. Though note that you may need to add some custom css to get good styling + * of new blocks in monobook. vector and modern should work without any special css. + * + * $wgFooterIcons itself is a key/value array. + * The key is the name of a block that the icons will be wrapped in. The final id varies + * by skin; Monobook and Vector will turn poweredby into f-poweredbyico while Modern + * turns it into mw_poweredby. + * The value is either key/value array of icons or a string. + * In the key/value array the key may or may not be used by the skin but it can + * be used to find the icon and unset it or change the icon if needed. + * This is useful for disabling icons that are set by extensions. + * The value should be either a string or an array. If it is a string it will be output + * directly as html, however some skins may choose to ignore it. An array is the preferred format + * for the icon, the following keys are used: + * src: An absolute url to the image to use for the icon, this is recommended + * but not required, however some skins will ignore icons without an image + * url: The url to use in the <a> arround the text or icon, if not set an <a> will not be outputted + * alt: This is the text form of the icon, it will be displayed without an image in + * skins like Modern or if src is not set, and will otherwise be used as + * the alt="" for the image. This key is required. + * width and height: If the icon specified by src is not of the standard size + * you can specify the size of image to use with these keys. + * Otherwise they will default to the standard 88x31. + */ +$wgFooterIcons = array( + "copyright" => array( + "copyright" => array(), // placeholder for the built in copyright icon + ), + "poweredby" => array( + "mediawiki" => array( + "src" => null, // Defaults to "$wgStylePath/common/images/poweredby_mediawiki_88x31.png" + "url" => "http://www.mediawiki.org/", + "alt" => "Powered by MediaWiki", + ) + ), +); + +/** + * Search form behavior for Vector skin only + * true = use an icon search button + * false = use Go & Search buttons + */ +$wgVectorUseSimpleSearch = false; + +/** + * Watch and unwatch as an icon rather than a link for Vector skin only + * true = use an icon watch/unwatch button + * false = use watch/unwatch text link + */ +$wgVectorUseIconWatch = false; + +/** + * Show the name of the current variant as a label in the variants drop-down menu + */ +$wgVectorShowVariantName = false; + +/** + * Display user edit counts in various prominent places. + */ +$wgEdititis = false; + +/** + * Experimental better directionality support. + */ +$wgBetterDirectionality = false; + + +/** @} */ # End of output format settings } + +/*************************************************************************//** + * @name Resource loader settings + * @{ + */ + +/** + * Client-side resource modules. Extensions should add their module definitions + * here. + * + * Example: + * $wgResourceModules['ext.myExtension'] = array( + * 'scripts' => 'myExtension.js', + * 'styles' => 'myExtension.css', + * 'dependencies' => array( 'jquery.cookie', 'jquery.tabIndex' ), + * 'localBasePath' => dirname( __FILE__ ), + * 'remoteExtPath' => 'MyExtension', + * ); + */ +$wgResourceModules = array(); + +/** + * Maximum time in seconds to cache resources served by the resource loader + */ +$wgResourceLoaderMaxage = array( + 'versioned' => array( + // Squid/Varnish but also any other public proxy cache between the client and MediaWiki + 'server' => 30 * 24 * 60 * 60, // 30 days + // On the client side (e.g. in the browser cache). + 'client' => 30 * 24 * 60 * 60, // 30 days + ), + 'unversioned' => array( + 'server' => 5 * 60, // 5 minutes + 'client' => 5 * 60, // 5 minutes + ), +); + +/** + * Whether to embed private modules inline with HTML output or to bypass + * caching and check the user parameter against $wgUser to prevent + * unauthorized access to private modules. + */ +$wgResourceLoaderInlinePrivateModules = true; + +/** + * The default debug mode (on/off) for of ResourceLoader requests. This will still + * be overridden when the debug URL parameter is used. */ -# $wgGroupPermissions['developer']['siteadmin'] = true; +$wgResourceLoaderDebug = false; /** - * Permission keys revoked from users in each group. - * This acts the same way as wgGroupPermissions above, except that - * if the user is in a group here, the permission will be removed from them. - * - * Improperly setting this could mean that your users will be unable to perform - * certain essential tasks, so use at your own risk! + * Enable embedding of certain resources using Edge Side Includes. This will + * improve performance but only works if there is something in front of the + * web server (e..g a Squid or Varnish server) configured to process the ESI. */ -$wgRevokePermissions = array(); +$wgResourceLoaderUseESI = false; /** - * Implicit groups, aren't shown on Special:Listusers or somewhere else + * Put each statement on its own line when minifying JavaScript. This makes + * debugging in non-debug mode a bit easier. */ -$wgImplicitGroups = array( '*', 'user', 'autoconfirmed' ); +$wgResourceLoaderMinifierStatementsOnOwnLine = false; /** - * A map of group names that the user is in, to group names that those users - * are allowed to add or revoke. - * - * Setting the list of groups to add or revoke to true is equivalent to "any group". - * - * For example, to allow sysops to add themselves to the "bot" group: - * - * $wgGroupsAddToSelf = array( 'sysop' => array( 'bot' ) ); - * - * Implicit groups may be used for the source group, for instance: - * - * $wgGroupsRemoveFromSelf = array( '*' => true ); - * - * This allows users in the '*' group (i.e. any user) to remove themselves from - * any group that they happen to be in. - * + * Maximum line length when minifying JavaScript. This is not a hard maximum: + * the minifier will try not to produce lines longer than this, but may be + * forced to do so in certain cases. */ -$wgGroupsAddToSelf = array(); -$wgGroupsRemoveFromSelf = array(); +$wgResourceLoaderMinifierMaxLineLength = 1000; /** - * Set of available actions that can be restricted via action=protect - * You probably shouldn't change this. - * Translated through restriction-* messages. + * Whether to include the mediawiki.legacy JS library (old wikibits.js), and its + * dependencies */ -$wgRestrictionTypes = array( 'edit', 'move' ); +$wgIncludeLegacyJavaScript = true; /** - * Rights which can be required for each protection level (via action=protect) - * - * You can add a new protection level that requires a specific - * permission by manipulating this array. The ordering of elements - * dictates the order on the protection form's lists. + * If set to a positive number, ResourceLoader will not generate URLs whose + * query string is more than this many characters long, and will instead use + * multiple requests with shorter query strings. This degrades performance, + * but may be needed if your web server has a low (less than, say 1024) + * query string length limit or a low value for suhosin.get.max_value_length + * that you can't increase. * - * '' will be ignored (i.e. unprotected) - * 'sysop' is quietly rewritten to 'protect' for backwards compatibility + * If set to a negative number, ResourceLoader will assume there is no query + * string length limit. + */ +$wgResourceLoaderMaxQueryLength = -1; + +/** @} */ # End of resource loader settings } + + +/*************************************************************************//** + * @name Page title and interwiki link settings + * @{ */ -$wgRestrictionLevels = array( '', 'autoconfirmed', 'sysop' ); /** - * Set the minimum permissions required to edit pages in each - * namespace. If you list more than one permission, a user must - * have all of them to edit pages in that namespace. - * - * Note: NS_MEDIAWIKI is implicitly restricted to editinterface. + * Name of the project namespace. If left set to false, $wgSitename will be + * used instead. */ -$wgNamespaceProtection = array(); +$wgMetaNamespace = false; /** - * Pages in namespaces in this array can not be used as templates. - * Elements must be numeric namespace ids. - * Among other things, this may be useful to enforce read-restrictions - * which may otherwise be bypassed by using the template machanism. + * Name of the project talk namespace. + * + * Normally you can ignore this and it will be something like + * $wgMetaNamespace . "_talk". In some languages, you may want to set this + * manually for grammatical reasons. */ -$wgNonincludableNamespaces = array(); +$wgMetaNamespaceTalk = false; /** - * Number of seconds an account is required to age before - * it's given the implicit 'autoconfirm' group membership. - * This can be used to limit privileges of new accounts. + * Additional namespaces. If the namespaces defined in Language.php and + * Namespace.php are insufficient, you can create new ones here, for example, + * to import Help files in other languages. You can also override the namespace + * names of existing namespaces. Extensions developers should use + * $wgCanonicalNamespaceNames. * - * Accounts created by earlier versions of the software - * may not have a recorded creation date, and will always - * be considered to pass the age test. + * PLEASE NOTE: Once you delete a namespace, the pages in that namespace will + * no longer be accessible. If you rename it, then you can access them through + * the new namespace name. * - * When left at 0, all registered accounts will pass. + * Custom namespaces should start at 100 to avoid conflicting with standard + * namespaces, and should always follow the even/odd main/talk pattern. */ -$wgAutoConfirmAge = 0; -//$wgAutoConfirmAge = 600; // ten minutes -//$wgAutoConfirmAge = 3600*24; // one day - -# Number of edits an account requires before it is autoconfirmed -# Passing both this AND the time requirement is needed -$wgAutoConfirmCount = 0; -//$wgAutoConfirmCount = 50; +#$wgExtraNamespaces = +# array(100 => "Hilfe", +# 101 => "Hilfe_Diskussion", +# 102 => "Aide", +# 103 => "Discussion_Aide" +# ); +$wgExtraNamespaces = array(); /** - * Automatically add a usergroup to any user who matches certain conditions. - * The format is - * array( '&' or '|' or '^', cond1, cond2, ... ) - * where cond1, cond2, ... are themselves conditions; *OR* - * APCOND_EMAILCONFIRMED, *OR* - * array( APCOND_EMAILCONFIRMED ), *OR* - * array( APCOND_EDITCOUNT, number of edits ), *OR* - * array( APCOND_AGE, seconds since registration ), *OR* - * array( APCOND_INGROUPS, group1, group2, ... ), *OR* - * array( APCOND_ISIP, ip ), *OR* - * array( APCOND_IPINRANGE, range ), *OR* - * array( APCOND_AGE_FROM_EDIT, seconds since first edit ), *OR* - * array( APCOND_BLOCKED ), *OR* - * similar constructs defined by extensions. + * Namespace aliases + * These are alternate names for the primary localised namespace names, which + * are defined by $wgExtraNamespaces and the language file. If a page is + * requested with such a prefix, the request will be redirected to the primary + * name. * - * If $wgEmailAuthentication is off, APCOND_EMAILCONFIRMED will be true for any - * user who has provided an e-mail address. + * Set this to a map from namespace names to IDs. + * Example: + * $wgNamespaceAliases = array( + * 'Wikipedian' => NS_USER, + * 'Help' => 100, + * ); */ -$wgAutopromote = array( - 'autoconfirmed' => array( '&', - array( APCOND_EDITCOUNT, &$wgAutoConfirmCount ), - array( APCOND_AGE, &$wgAutoConfirmAge ), - ), -); +$wgNamespaceAliases = array(); /** - * These settings can be used to give finer control over who can assign which - * groups at Special:Userrights. Example configuration: + * Allowed title characters -- regex character class + * Don't change this unless you know what you're doing * - * // Bureaucrat can add any group - * $wgAddGroups['bureaucrat'] = true; - * // Bureaucrats can only remove bots and sysops - * $wgRemoveGroups['bureaucrat'] = array( 'bot', 'sysop' ); - * // Sysops can make bots - * $wgAddGroups['sysop'] = array( 'bot' ); - * // Sysops can disable other sysops in an emergency, and disable bots - * $wgRemoveGroups['sysop'] = array( 'sysop', 'bot' ); + * Problematic punctuation: + * - []{}|# Are needed for link syntax, never enable these + * - <> Causes problems with HTML escaping, don't use + * - % Enabled by default, minor problems with path to query rewrite rules, see below + * - + Enabled by default, but doesn't work with path to query rewrite rules, corrupted by apache + * - ? Enabled by default, but doesn't work with path to PATH_INFO rewrites + * + * All three of these punctuation problems can be avoided by using an alias, instead of a + * rewrite rule of either variety. + * + * The problem with % is that when using a path to query rewrite rule, URLs are + * double-unescaped: once by Apache's path conversion code, and again by PHP. So + * %253F, for example, becomes "?". Our code does not double-escape to compensate + * for this, indeed double escaping would break if the double-escaped title was + * passed in the query string rather than the path. This is a minor security issue + * because articles can be created such that they are hard to view or edit. + * + * In some rare cases you may wish to remove + for compatibility with old links. + * + * Theoretically 0x80-0x9F of ISO 8859-1 should be disallowed, but + * this breaks interlanguage links */ -$wgAddGroups = array(); -$wgRemoveGroups = array(); +$wgLegalTitleChars = " %!\"$&'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF+"; /** - * A list of available rights, in addition to the ones defined by the core. - * For extensions only. + * The interwiki prefix of the current wiki, or false if it doesn't have one. */ -$wgAvailableRights = array(); +$wgLocalInterwiki = false; /** - * Optional to restrict deletion of pages with higher revision counts - * to users with the 'bigdelete' permission. (Default given to sysops.) + * Expiry time for cache of interwiki table */ -$wgDeleteRevisionsLimit = 0; +$wgInterwikiExpiry = 10800; -# Proxy scanner settings -# +/** Interwiki caching settings. + $wgInterwikiCache specifies path to constant database file + This cdb database is generated by dumpInterwiki from maintenance + and has such key formats: + dbname:key - a simple key (e.g. enwiki:meta) + _sitename:key - site-scope key (e.g. wiktionary:meta) + __global:key - global-scope key (e.g. __global:meta) + __sites:dbname - site mapping (e.g. __sites:enwiki) + Sites mapping just specifies site name, other keys provide + "local url" data layout. + $wgInterwikiScopes specify number of domains to check for messages: + 1 - Just wiki(db)-level + 2 - wiki and global levels + 3 - site levels + $wgInterwikiFallbackSite - if unable to resolve from cache + */ +$wgInterwikiCache = false; +$wgInterwikiScopes = 3; +$wgInterwikiFallbackSite = 'wiki'; /** - * If you enable this, every editor's IP address will be scanned for open HTTP - * proxies. + * If local interwikis are set up which allow redirects, + * set this regexp to restrict URLs which will be displayed + * as 'redirected from' links. * - * Don't enable this. Many sysops will report "hostile TCP port scans" to your - * ISP and ask for your server to be shut down. + * It might look something like this: + * $wgRedirectSources = '!^https?://[a-z-]+\.wikipedia\.org/!'; * - * You have been warned. + * Leave at false to avoid displaying any incoming redirect markers. + * This does not affect intra-wiki redirects, which don't change + * the URL. */ -$wgBlockOpenProxies = false; -/** Port we want to scan for a proxy */ -$wgProxyPorts = array( 80, 81, 1080, 3128, 6588, 8000, 8080, 8888, 65506 ); -/** Script used to scan */ -$wgProxyScriptPath = "$IP/includes/proxy_check.php"; -/** */ -$wgProxyMemcExpiry = 86400; -/** This should always be customised in LocalSettings.php */ -$wgSecretKey = false; -/** big list of banned IP addresses, in the keys not the values */ -$wgProxyList = array(); -/** deprecated */ -$wgProxyKey = false; +$wgRedirectSources = false; -/** Number of accounts each IP address may create, 0 to disable. - * Requires memcached */ -$wgAccountCreationThrottle = 0; +/** + * Set this to false to avoid forcing the first letter of links to capitals. + * WARNING: may break links! This makes links COMPLETELY case-sensitive. Links + * appearing with a capital at the beginning of a sentence will *not* go to the + * same place as links in the middle of a sentence using a lowercase initial. + */ +$wgCapitalLinks = true; -# Client-side caching: +/** + * @since 1.16 - This can now be set per-namespace. Some special namespaces (such + * as Special, see MWNamespace::$alwaysCapitalizedNamespaces for the full list) must be + * true by default (and setting them has no effect), due to various things that + * require them to be so. Also, since Talk namespaces need to directly mirror their + * associated content namespaces, the values for those are ignored in favor of the + * subject namespace's setting. Setting for NS_MEDIA is taken automatically from + * NS_FILE. + * EX: $wgCapitalLinkOverrides[ NS_FILE ] = false; + */ +$wgCapitalLinkOverrides = array(); -/** Allow client-side caching of pages */ -$wgCachePages = true; +/** Which namespaces should support subpages? + * See Language.php for a list of namespaces. + */ +$wgNamespacesWithSubpages = array( + NS_TALK => true, + NS_USER => true, + NS_USER_TALK => true, + NS_PROJECT_TALK => true, + NS_FILE_TALK => true, + NS_MEDIAWIKI => true, + NS_MEDIAWIKI_TALK => true, + NS_TEMPLATE_TALK => true, + NS_HELP_TALK => true, + NS_CATEGORY_TALK => true +); /** - * Set this to current time to invalidate all prior cached pages. Affects both - * client- and server-side caching. - * You can get the current date on your server by using the command: - * date +%Y%m%d%H%M%S + * Array of namespaces which can be deemed to contain valid "content", as far + * as the site statistics are concerned. Useful if additional namespaces also + * contain "content" which should be considered when generating a count of the + * number of articles in the wiki. */ -$wgCacheEpoch = '20030516000000'; +$wgContentNamespaces = array( NS_MAIN ); /** - * 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. + * Max number of redirects to follow when resolving redirects. + * 1 means only the first redirect is followed (default behavior). + * 0 or less means no redirects are followed. + */ +$wgMaxRedirects = 1; + +/** + * Array of invalid page redirect targets. + * Attempting to create a redirect to any of the pages in this array + * will make the redirect fail. + * Userlogout is hard-coded, so it does not need to be listed here. + * (bug 10569) Disallow Mypage and Mytalk as well. + * + * As of now, this only checks special pages. Redirects to pages in + * other namespaces cannot be invalidated by this variable. */ -$wgStyleVersion = '270'; - +$wgInvalidRedirectTargets = array( 'Filepath', 'Mypage', 'Mytalk' ); -# Server-side caching: +/** @} */ # End of title and interwiki settings } -/** - * This will cache static pages for non-logged-in users to reduce - * database traffic on public sites. - * Must set $wgShowIPinHeader = false +/************************************************************************//** + * @name Parser settings + * These settings configure the transformation from wikitext to HTML. + * @{ */ -$wgUseFileCache = false; - -/** Directory where the cached page will be saved */ -$wgFileCacheDirectory = false; ///< defaults to "$wgCacheDirectory/html"; /** - * When using the file cache, we can store the cached HTML gzipped to save disk - * space. Pages will then also be served compressed to clients that support it. - * THIS IS NOT COMPATIBLE with ob_gzhandler which is now enabled if supported in - * the default LocalSettings.php! If you enable this, remove that setting first. + * Parser configuration. Associative array with the following members: * - * Requires zlib support enabled in PHP. + * class The class name + * + * preprocessorClass The preprocessor class. Two classes are currently available: + * Preprocessor_Hash, which uses plain PHP arrays for tempoarary + * storage, and Preprocessor_DOM, which uses the DOM module for + * temporary storage. Preprocessor_DOM generally uses less memory; + * the speed of the two is roughly the same. + * + * If this parameter is not given, it uses Preprocessor_DOM if the + * DOM module is available, otherwise it uses Preprocessor_Hash. + * + * The entire associative array will be passed through to the constructor as + * the first parameter. Note that only Setup.php can use this variable -- + * the configuration will change at runtime via $wgParser member functions, so + * the contents of this variable will be out-of-date. The variable can only be + * changed during LocalSettings.php, in particular, it can't be changed during + * an extension setup function. */ -$wgUseGzip = false; - -/** Whether MediaWiki should send an ETag header */ -$wgUseETag = false; - -# Email notification settings -# +$wgParserConf = array( + 'class' => 'Parser', + #'preprocessorClass' => 'Preprocessor_Hash', +); -/** For email notification on page changes */ -$wgPasswordSender = $wgEmergencyContact; +/** Maximum indent level of toc. */ +$wgMaxTocLevel = 999; -# true: from page editor if s/he opted-in -# false: Enotif mails appear to come from $wgEmergencyContact -$wgEnotifFromEditor = false; +/** + * A complexity limit on template expansion + */ +$wgMaxPPNodeCount = 1000000; -// TODO move UPO to preferences probably ? -# If set to true, users get a corresponding option in their preferences and can choose to enable or disable at their discretion -# If set to false, the corresponding input form on the user preference page is suppressed -# It call this to be a "user-preferences-option (UPO)" -$wgEmailAuthentication = true; # UPO (if this is set to false, texts referring to authentication are suppressed) -$wgEnotifWatchlist = false; # UPO -$wgEnotifUserTalk = false; # UPO -$wgEnotifRevealEditorAddress = false; # UPO; reply-to address may be filled with page editor's address (if user allowed this in the preferences) -$wgEnotifMinorEdits = true; # UPO; false: "minor edits" on pages do not trigger notification mails. -# # Attention: _every_ change on a user_talk page trigger a notification mail (if the user is not yet notified) - -# Send a generic mail instead of a personalised mail for each user. This -# always uses UTC as the time zone, and doesn't include the username. -# -# For pages with many users watching, this can significantly reduce mail load. -# Has no effect when using sendmail rather than SMTP; +/** + * Maximum recursion depth for templates within templates. + * The current parser adds two levels to the PHP call stack for each template, + * and xdebug limits the call stack to 100 by default. So this should hopefully + * stop the parser before it hits the xdebug limit. + */ +$wgMaxTemplateDepth = 40; -$wgEnotifImpersonal = false; +/** @see $wgMaxTemplateDepth */ +$wgMaxPPExpandDepth = 40; -# Maximum number of users to mail at once when using impersonal mail. Should -# match the limit on your mail server. -$wgEnotifMaxRecips = 500; +/** The external URL protocols */ +$wgUrlProtocols = array( + 'http://', + 'https://', + 'ftp://', + 'irc://', + 'gopher://', + 'telnet://', // Well if we're going to support the above.. -ævar + 'nntp://', // @bug 3808 RFC 1738 + 'worldwind://', + 'mailto:', + 'news:', + 'svn://', + 'git://', + 'mms://', +); -# Send mails via the job queue. -$wgEnotifUseJobQ = false; +/** + * If true, removes (substitutes) templates in "~~~~" signatures. + */ +$wgCleanSignatures = true; -# Use real name instead of username in e-mail "from" field -$wgEnotifUseRealName = false; +/** Whether to allow inline image pointing to other websites */ +$wgAllowExternalImages = false; /** - * Array of usernames who will be sent a notification email for every change which occurs on a wiki + * If the above is false, you can specify an exception here. Image URLs + * that start with this string are then rendered, while all others are not. + * You can use this to set up a trusted, simple repository of images. + * You may also specify an array of strings to allow multiple sites + * + * Examples: + * <code> + * $wgAllowExternalImagesFrom = 'http://127.0.0.1/'; + * $wgAllowExternalImagesFrom = array( 'http://127.0.0.1/', 'http://example.com' ); + * </code> */ -$wgUsersNotifiedOnAllChanges = array(); +$wgAllowExternalImagesFrom = ''; -/** Show watching users in recent changes, watchlist and page history views */ -$wgRCShowWatchingUsers = false; # UPO -/** Show watching users in Page views */ -$wgPageShowWatchingUsers = false; -/** Show the amount of changed characters in recent changes */ -$wgRCShowChangedSize = true; +/** If $wgAllowExternalImages is false, you can allow an on-wiki + * whitelist of regular expression fragments to match the image URL + * against. If the image matches one of the regular expression fragments, + * The image will be displayed. + * + * Set this to true to enable the on-wiki whitelist (MediaWiki:External image whitelist) + * Or false to disable it + */ +$wgEnableImageWhitelist = true; /** - * If the difference between the character counts of the text - * before and after the edit is below that value, the value will be - * highlighted on the RC page. + * A different approach to the above: simply allow the <img> tag to be used. + * This allows you to specify alt text and other attributes, copy-paste HTML to + * your wiki more easily, etc. However, allowing external images in any manner + * will allow anyone with editing rights to snoop on your visitors' IP + * addresses and so forth, if they wanted to, by inserting links to images on + * sites they control. */ -$wgRCChangedSizeThreshold = 500; +$wgAllowImageTag = false; /** - * Show "Updated (since my last visit)" marker in RC view, watchlist and history - * view for watched pages with new changes */ -$wgShowUpdatedMarker = true; + * $wgUseTidy: use tidy to make sure HTML output is sane. + * Tidy is a free tool that fixes broken HTML. + * See http://www.w3.org/People/Raggett/tidy/ + * + * - $wgTidyBin should be set to the path of the binary and + * - $wgTidyConf to the path of the configuration file. + * - $wgTidyOpts can include any number of parameters. + * - $wgTidyInternal controls the use of the PECL extension to use an in- + * process tidy library instead of spawning a separate program. + * Normally you shouldn't need to override the setting except for + * debugging. To install, use 'pear install tidy' and add a line + * 'extension=tidy.so' to php.ini. + */ +$wgUseTidy = false; +/** @see $wgUseTidy */ +$wgAlwaysUseTidy = false; +/** @see $wgUseTidy */ +$wgTidyBin = 'tidy'; +/** @see $wgUseTidy */ +$wgTidyConf = $IP.'/includes/tidy.conf'; +/** @see $wgUseTidy */ +$wgTidyOpts = ''; +/** @see $wgUseTidy */ +$wgTidyInternal = extension_loaded( 'tidy' ); /** - * Default cookie expiration time. Setting to 0 makes all cookies session-only. + * Put tidy warnings in HTML comments + * Only works for internal tidy. */ -$wgCookieExpiration = 30*86400; +$wgDebugTidy = false; -/** Clock skew or the one-second resolution of time() can occasionally cause cache - * problems when the user requests two pages within a short period of time. This - * variable adds a given number of seconds to vulnerable timestamps, thereby giving - * a grace period. +/** Allow raw, unchecked HTML in <html>...</html> sections. + * THIS IS VERY DANGEROUS on a publically editable site, so USE wgGroupPermissions + * TO RESTRICT EDITING to only those that you trust */ -$wgClockSkewFudge = 5; - -# Squid-related settings -# - -/** Enable/disable Squid */ -$wgUseSquid = false; - -/** If you run Squid3 with ESI support, enable this (default:false): */ -$wgUseESI = false; - -/** Send X-Vary-Options header for better caching (requires patched Squid) */ -$wgUseXVO = false; +$wgRawHtml = false; -/** Internal server name as known to Squid, if different */ -# $wgInternalServer = 'http://yourinternal.tld:8000'; -$wgInternalServer = $wgServer; +/** + * Set a default target for external links, e.g. _blank to pop up a new window + */ +$wgExternalLinkTarget = false; /** - * Cache timeout for the squid, will be sent as s-maxage (without ESI) or - * Surrogate-Control (with ESI). Without ESI, you should strip out s-maxage in - * the Squid config. 18000 seconds = 5 hours, more cache hits with 2678400 = 31 - * days + * If true, external URL links in wiki text will be given the + * rel="nofollow" attribute as a hint to search engines that + * they should not be followed for ranking purposes as they + * are user-supplied and thus subject to spamming. */ -$wgSquidMaxage = 18000; +$wgNoFollowLinks = true; /** - * Default maximum age for raw CSS/JS accesses + * Namespaces in which $wgNoFollowLinks doesn't apply. + * See Language.php for a list of namespaces. */ -$wgForcedRawSMaxage = 300; +$wgNoFollowNsExceptions = array(); /** - * List of proxy servers to purge on changes; default port is 80. Use IP addresses. + * If this is set to an array of domains, external links to these domain names + * (or any subdomains) will not be set to rel="nofollow" regardless of the + * value of $wgNoFollowLinks. For instance: * - * When MediaWiki is running behind a proxy, it will trust X-Forwarded-For - * headers sent/modified from these proxies when obtaining the remote IP address + * $wgNoFollowDomainExceptions = array( 'en.wikipedia.org', 'wiktionary.org' ); * - * For a list of trusted servers which *aren't* purged, see $wgSquidServersNoPurge. + * This would add rel="nofollow" to links to de.wikipedia.org, but not + * en.wikipedia.org, wiktionary.org, en.wiktionary.org, us.en.wikipedia.org, + * etc. */ -$wgSquidServers = array(); +$wgNoFollowDomainExceptions = array(); /** - * As above, except these servers aren't purged on page changes; use to set a - * list of trusted proxies, etc. + * Allow DISPLAYTITLE to change title display */ -$wgSquidServersNoPurge = array(); - -/** Maximum number of titles to purge in any one client operation */ -$wgMaxSquidPurgeTitles = 400; - -/** HTCP multicast purging */ -$wgHTCPPort = 4827; -$wgHTCPMulticastTTL = 1; -# $wgHTCPMulticastAddress = "224.0.0.85"; -$wgHTCPMulticastAddress = false; +$wgAllowDisplayTitle = true; -/** Should forwarded Private IPs be accepted? */ -$wgUsePrivateIPs = false; +/** + * For consistency, restrict DISPLAYTITLE to titles that normalize to the same + * canonical DB key. + */ +$wgRestrictDisplayTitle = true; -# Cookie settings: -# /** - * Set to set an explicit domain on the login cookies eg, "justthis.domain. org" - * or ".any.subdomain.net" + * Maximum number of calls per parse to expensive parser functions such as + * PAGESINCATEGORY. */ -$wgCookieDomain = ''; -$wgCookiePath = '/'; -$wgCookieSecure = ($wgProto == 'https'); -$wgDisableCookieCheck = false; +$wgExpensiveParserFunctionLimit = 100; /** - * Set $wgCookiePrefix to use a custom one. Setting to false sets the default of - * using the database name. + * Preprocessor caching threshold */ -$wgCookiePrefix = false; +$wgPreprocessorCacheThreshold = 1000; /** - * Set authentication cookies to HttpOnly to prevent access by JavaScript, - * in browsers that support this feature. This can mitigates some classes of - * XSS attack. - * - * Only supported on PHP 5.2 or higher. + * Enable interwiki transcluding. Only when iw_trans=1. */ -$wgCookieHttpOnly = version_compare("5.2", PHP_VERSION, "<"); +$wgEnableScaryTranscluding = false; /** - * If the requesting browser matches a regex in this blacklist, we won't - * send it cookies with HttpOnly mode, even if $wgCookieHttpOnly is on. + * Expiry time for interwiki transclusion */ -$wgHttpOnlyBlacklist = array( - // Internet Explorer for Mac; sometimes the cookies work, sometimes - // they don't. It's difficult to predict, as combinations of path - // and expiration options affect its parsing. - '/^Mozilla\/4\.0 \(compatible; MSIE \d+\.\d+; Mac_PowerPC\)/', -); +$wgTranscludeCacheExpiry = 3600; -/** A list of cookies that vary the cache (for use by extensions) */ -$wgCacheVaryCookies = array(); +/** @} */ # end of parser settings } -/** Override to customise the session name */ -$wgSessionName = false; +/************************************************************************//** + * @name Statistics + * @{ + */ -/** Whether to allow inline image pointing to other websites */ -$wgAllowExternalImages = false; +/** + * Under which condition should a page in the main namespace be counted + * as a valid article? If $wgUseCommaCount is set to true, it will be + * counted if it contains at least one comma. If it is set to false + * (default), it will only be counted if it contains at least one [[wiki + * link]]. See http://www.mediawiki.org/wiki/Manual:Article_count + * + * Retroactively changing this variable will not affect + * the existing count (cf. maintenance/recount.sql). + */ +$wgUseCommaCount = false; + +/** + * wgHitcounterUpdateFreq sets how often page counters should be updated, higher + * values are easier on the database. A value of 1 causes the counters to be + * updated on every hit, any higher value n cause them to update *on average* + * every n hits. Should be set to either 1 or something largish, eg 1000, for + * maximum efficiency. + */ +$wgHitcounterUpdateFreq = 1; -/** If the above is false, you can specify an exception here. Image URLs - * that start with this string are then rendered, while all others are not. - * You can use this to set up a trusted, simple repository of images. - * You may also specify an array of strings to allow multiple sites - * - * Examples: - * $wgAllowExternalImagesFrom = 'http://127.0.0.1/'; - * $wgAllowExternalImagesFrom = array( 'http://127.0.0.1/', 'http://example.com' ); - */ -$wgAllowExternalImagesFrom = ''; +/** + * How many days user must be idle before he is considered inactive. Will affect + * the number shown on Special:Statistics and Special:ActiveUsers special page. + * You might want to leave this as the default value, to provide comparable + * numbers between different wikis. + */ +$wgActiveUserDays = 30; -/** If $wgAllowExternalImages is false, you can allow an on-wiki - * whitelist of regular expression fragments to match the image URL - * against. If the image matches one of the regular expression fragments, - * The image will be displayed. - * - * Set this to true to enable the on-wiki whitelist (MediaWiki:External image whitelist) - * Or false to disable it +/** @} */ # End of statistics } + +/************************************************************************//** + * @name User accounts, authentication + * @{ */ -$wgEnableImageWhitelist = true; -/** Allows to move images and other media files */ -$wgAllowImageMoving = true; +/** For compatibility with old installations set to false */ +$wgPasswordSalt = true; -/** Disable database-intensive features */ -$wgMiserMode = false; -/** Disable all query pages if miser mode is on, not just some */ -$wgDisableQueryPages = false; -/** Number of rows to cache in 'querycache' table when miser mode is on */ -$wgQueryCacheLimit = 1000; -/** Number of links to a page required before it is deemed "wanted" */ -$wgWantedPagesThreshold = 1; -/** Enable slow parser functions */ -$wgAllowSlowParserFunctions = false; +/** + * Specifies the minimal length of a user password. If set to 0, empty pass- + * words are allowed. + */ +$wgMinimalPasswordLength = 1; /** - * Maps jobs to their handling classes; extensions - * can add to this to provide custom jobs + * Enabes or disables JavaScript-based suggestions of password strength */ -$wgJobClasses = array( - 'refreshLinks' => 'RefreshLinksJob', - 'refreshLinks2' => 'RefreshLinksJob2', - 'htmlCacheUpdate' => 'HTMLCacheUpdateJob', - 'html_cache_update' => 'HTMLCacheUpdateJob', // backwards-compatible - 'sendMail' => 'EmaillingJob', - 'enotifNotify' => 'EnotifNotifyJob', - 'fixDoubleRedirect' => 'DoubleRedirectJob', -); +$wgLivePasswordStrengthChecks = false; /** - * Additional functions to be performed with updateSpecialPages. - * Expensive Querypages are already updated. + * Maximum number of Unicode characters in signature */ -$wgSpecialPageCacheUpdates = array( - 'Statistics' => array('SiteStatsUpdate','cacheUpdate') -); +$wgMaxSigChars = 255; /** - * To use inline TeX, you need to compile 'texvc' (in the 'math' subdirectory of - * the MediaWiki package and have latex, dvips, gs (ghostscript), andconvert - * (ImageMagick) installed and available in the PATH. - * Please see math/README for more information. + * Maximum number of bytes in username. You want to run the maintenance + * script ./maintenance/checkUsernames.php once you have changed this value. */ -$wgUseTeX = false; -/** Location of the texvc binary */ -$wgTexvc = './math/texvc'; +$wgMaxNameChars = 255; + /** - * Texvc background color - * use LaTeX color format as used in \special function - * for transparent background use value 'Transparent' for alpha transparency or - * 'transparent' for binary transparency. - */ -$wgTexvcBackgroundColor = 'transparent'; + * Array of usernames which may not be registered or logged in from + * Maintenance scripts can still use these + */ +$wgReservedUsernames = array( + 'MediaWiki default', // Default 'Main Page' and MediaWiki: message pages + 'Conversion script', // Used for the old Wikipedia software upgrade + 'Maintenance script', // Maintenance scripts which perform editing, image import script + 'Template namespace initialisation script', // Used in 1.2->1.3 upgrade + 'msg:double-redirect-fixer', // Automatic double redirect fix + 'msg:usermessage-editor', // Default user for leaving user messages + 'msg:proxyblocker', // For Special:Blockme +); /** - * Normally when generating math images, we double-check that the - * directories we want to write to exist, and that files that have - * been generated still exist when we need to bring them up again. - * - * This lets us give useful error messages in case of permission - * problems, and automatically rebuild images that have been lost. + * Settings added to this array will override the default globals for the user + * preferences used by anonymous visitors and newly created accounts. + * For instance, to disable section editing links: + * $wgDefaultUserOptions ['editsection'] = 0; * - * On a big site with heavy NFS traffic this can be slow and flaky, - * so sometimes we want to short-circuit it by setting this to false. */ -$wgMathCheckFiles = true; - -# -# Profiling / debugging -# -# You have to create a 'profiling' table in your database before using -# profiling see maintenance/archives/patch-profiling.sql . -# -# To enable profiling, edit StartProfiler.php - -/** Only record profiling info for pages that took longer than this */ -$wgProfileLimit = 0.0; -/** Don't put non-profiling info into log file */ -$wgProfileOnly = false; -/** Log sums from profiling into "profiling" table in db. */ -$wgProfileToDatabase = false; -/** If true, print a raw call tree instead of per-function report */ -$wgProfileCallTree = false; -/** Should application server host be put into profiling table */ -$wgProfilePerHost = false; +$wgDefaultUserOptions = array( + 'ccmeonemails' => 0, + 'cols' => 80, + 'contextchars' => 50, + 'contextlines' => 5, + 'date' => 'default', + 'diffonly' => 0, + 'disablemail' => 0, + 'disablesuggest' => 0, + 'editfont' => 'default', + 'editondblclick' => 0, + 'editsection' => 1, + 'editsectiononrightclick' => 0, + 'enotifminoredits' => 0, + 'enotifrevealaddr' => 0, + 'enotifusertalkpages' => 1, + 'enotifwatchlistpages' => 0, + 'extendwatchlist' => 0, + 'externaldiff' => 0, + 'externaleditor' => 0, + 'fancysig' => 0, + 'forceeditsummary' => 0, + 'gender' => 'unknown', + 'hideminor' => 0, + 'hidepatrolled' => 0, + 'highlightbroken' => 1, + 'imagesize' => 2, + 'justify' => 0, + 'math' => 1, + 'minordefault' => 0, + 'newpageshidepatrolled' => 0, + 'nocache' => 0, + 'noconvertlink' => 0, + 'norollbackdiff' => 0, + 'numberheadings' => 0, + 'previewonfirst' => 0, + 'previewontop' => 1, + 'quickbar' => 1, + 'rcdays' => 7, + 'rclimit' => 50, + 'rememberpassword' => 0, + 'rows' => 25, + 'searchlimit' => 20, + 'showhiddencats' => 0, + 'showjumplinks' => 1, + 'shownumberswatching' => 1, + 'showtoc' => 1, + 'showtoolbar' => 1, + 'skin' => false, + 'stubthreshold' => 0, + 'thumbsize' => 2, + 'underline' => 2, + 'uselivepreview' => 0, + 'usenewrc' => 0, + 'watchcreations' => 0, + 'watchdefault' => 0, + 'watchdeletion' => 0, + 'watchlistdays' => 3.0, + 'watchlisthideanons' => 0, + 'watchlisthidebots' => 0, + 'watchlisthideliu' => 0, + 'watchlisthideminor' => 0, + 'watchlisthideown' => 0, + 'watchlisthidepatrolled' => 0, + 'watchmoves' => 0, + 'wllimit' => 250, +); -/** Settings for UDP profiler */ -$wgUDPProfilerHost = '127.0.0.1'; -$wgUDPProfilerPort = '3811'; +/** + * Whether or not to allow and use real name fields. + * @deprecated in 1.16, use $wgHiddenPrefs[] = 'realname' below to disable real + * names + */ +$wgAllowRealName = true; -/** Detects non-matching wfProfileIn/wfProfileOut calls */ -$wgDebugProfiling = false; -/** Output debug message on every wfProfileIn/wfProfileOut */ -$wgDebugFunctionEntry = 0; +/** An array of preferences to not show for the user */ +$wgHiddenPrefs = array(); -/* - * Destination for wfIncrStats() data... - * 'cache' to go into the system cache, if enabled (memcached) - * 'udp' to be sent to the UDP profiler (see $wgUDPProfilerHost) - * false to disable +/** + * Characters to prevent during new account creations. + * This is used in a regular expression character class during + * registration (regex metacharacters like / are escaped). */ -$wgStatsMethod = 'cache'; +$wgInvalidUsernameCharacters = '@'; -/** Whereas to count the number of time an article is viewed. - * Does not work if pages are cached (for example with squid). +/** + * Character used as a delimiter when testing for interwiki userrights + * (In Special:UserRights, it is possible to modify users on different + * databases if the delimiter is used, e.g. Someuser@enwiki). + * + * It is recommended that you have this delimiter in + * $wgInvalidUsernameCharacters above, or you will not be able to + * modify the user rights of those users via Special:UserRights */ -$wgDisableCounters = false; - -$wgDisableTextSearch = false; -$wgDisableSearchContext = false; - +$wgUserrightsInterwikiDelimiter = '@'; /** - * Set to true to have nicer highligted text in search results, - * by default off due to execution overhead + * Use some particular type of external authentication. The specific + * authentication module you use will normally require some extra settings to + * be specified. + * + * null indicates no external authentication is to be used. Otherwise, + * $wgExternalAuthType must be the name of a non-abstract class that extends + * ExternalUser. + * + * Core authentication modules can be found in includes/extauth/. */ -$wgAdvancedSearchHighlighting = false; +$wgExternalAuthType = null; /** - * Regexp to match word boundaries, defaults for non-CJK languages - * should be empty for CJK since the words are not separate + * Configuration for the external authentication. This may include arbitrary + * keys that depend on the authentication mechanism. For instance, + * authentication against another web app might require that the database login + * info be provided. Check the file where your auth mechanism is defined for + * info on what to put here. */ -$wgSearchHighlightBoundaries = version_compare("5.1", PHP_VERSION, "<")? '[\p{Z}\p{P}\p{C}]' - : '[ ,.;:!?~!@#$%\^&*\(\)+=\-\\|\[\]"\'<>\n\r\/{}]'; // PHP 5.0 workaround +$wgExternalAuthConf = array(); /** - * Set to true to have the search engine count total - * search matches to present in the Special:Search UI. - * Not supported by every search engine shipped with MW. + * When should we automatically create local accounts when external accounts + * already exist, if using ExternalAuth? Can have three values: 'never', + * 'login', 'view'. 'view' requires the external database to support cookies, + * and implies 'login'. * - * This could however be slow on larger wikis, and is pretty flaky - * with the current title vs content split. Recommend avoiding until - * that's been worked out cleanly; but this may aid in testing the - * search UI and API to confirm that the result count works. + * TODO: Implement 'view' (currently behaves like 'login'). */ -$wgCountTotalSearchHits = false; +$wgAutocreatePolicy = 'login'; /** - * Template for OpenSearch suggestions, defaults to API action=opensearch + * Policies for how each preference is allowed to be changed, in the presence + * of external authentication. The keys are preference keys, e.g., 'password' + * or 'emailaddress' (see Preferences.php et al.). The value can be one of the + * following: * - * Sites with heavy load would tipically have these point to a custom - * PHP wrapper to avoid firing up mediawiki for every keystroke + * - local: Allow changes to this pref through the wiki interface but only + * apply them locally (default). + * - semiglobal: Allow changes through the wiki interface and try to apply them + * to the foreign database, but continue on anyway if that fails. + * - global: Allow changes through the wiki interface, but only let them go + * through if they successfully update the foreign database. + * - message: Allow no local changes for linked accounts; replace the change + * form with a message provided by the auth plugin, telling the user how to + * change the setting externally (maybe providing a link, etc.). If the auth + * plugin provides no message for this preference, hide it entirely. * - * Placeholders: {searchTerms} + * Accounts that are not linked to an external account are never affected by + * this setting. You may want to look at $wgHiddenPrefs instead. + * $wgHiddenPrefs supersedes this option. * + * TODO: Implement message, global. */ -$wgOpenSearchTemplate = false; +$wgAllowPrefChange = array(); /** - * Enable suggestions while typing in search boxes - * (results are passed around in OpenSearch format) - * Requires $wgEnableOpenSearchSuggest = true; + * This is to let user authenticate using https when they come from http. + * Based on an idea by George Herbert on wikitech-l: + * http://lists.wikimedia.org/pipermail/wikitech-l/2010-October/050065.html + * @since 1.17 */ -$wgEnableMWSuggest = false; +$wgSecureLogin = false; -/** - * Enable OpenSearch suggestions requested by MediaWiki. Set this to - * false if you've disabled MWSuggest or another suggestion script and - * want reduce load caused by cached scripts pulling suggestions. +/** @} */ # end user accounts } + +/************************************************************************//** + * @name User rights, access control and monitoring + * @{ */ -$wgEnableOpenSearchSuggest = true; /** - * Expiry time for search suggestion responses + * Allow sysops to ban logged-in users + * @deprecated since 1.17, will be made permanently true in 1.18 */ -$wgSearchSuggestCacheExpiry = 1200; +$wgSysopUserBans = true; /** - * Template for internal MediaWiki suggestion engine, defaults to API action=opensearch - * - * Placeholders: {searchTerms}, {namespaces}, {dbname} - * + * Allow sysops to ban IP ranges + * @deprecated since 1.17; set $wgBlockCIDRLimit to array( 'IPv4' => 32, 'IPv6 => 128 ) instead. */ -$wgMWSuggestTemplate = false; +$wgSysopRangeBans = true; /** - * If you've disabled search semi-permanently, this also disables updates to the - * table. If you ever re-enable, be sure to rebuild the search table. + * Number of seconds before autoblock entries expire. Default 86400 = 1 day. */ -$wgDisableSearchUpdate = false; -/** Uploads have to be specially set up to be secure */ -$wgEnableUploads = false; +$wgAutoblockExpiry = 86400; + /** - * Show EXIF data, on by default if available. - * Requires PHP's EXIF extension: http://www.php.net/manual/en/ref.exif.php - * - * NOTE FOR WINDOWS USERS: - * To enable EXIF functions, add the folloing lines to the - * "Windows extensions" section of php.ini: - * - * extension=extensions/php_mbstring.dll - * extension=extensions/php_exif.dll + * Set this to true to allow blocked users to edit their own user talk page. */ -$wgShowEXIF = function_exists( 'exif_read_data' ); +$wgBlockAllowsUTEdit = false; + +/** Allow sysops to ban users from accessing Emailuser */ +$wgSysopEmailBans = true; /** - * Set to true to enable the upload _link_ while local uploads are disabled. - * Assumes that the special page link will be bounced to another server where - * uploads do work. + * Limits on the possible sizes of range blocks. + * + * CIDR notation is hard to understand, it's easy to mistakenly assume that a + * /1 is a small range and a /31 is a large range. Setting this to half the + * number of bits avoids such errors. */ -$wgRemoteUploads = false; +$wgBlockCIDRLimit = array( + 'IPv4' => 16, # Blocks larger than a /16 (64k addresses) will not be allowed + 'IPv6' => 64, # 2^64 = ~1.8x10^19 addresses +); /** - * Disable links to talk pages of anonymous users (IPs) in listings on special - * pages like page history, Special:Recentchanges, etc. + * If true, blocked users will not be allowed to login. When using this with + * a public wiki, the effect of logging out blocked users may actually be + * avers: unless the user's address is also blocked (e.g. auto-block), + * logging the user out will again allow reading and editing, just as for + * anonymous visitors. */ -$wgDisableAnonTalk = false; +$wgBlockDisablesLogin = false; + /** - * Do DELETE/INSERT for link updates instead of incremental + * Pages anonymous user may see as an array, e.g. + * + * <code> + * $wgWhitelistRead = array ( "Main Page", "Wikipedia:Help"); + * </code> + * + * Special:Userlogin and Special:Resetpass are always whitelisted. + * + * NOTE: This will only work if $wgGroupPermissions['*']['read'] is false -- + * see below. Otherwise, ALL pages are accessible, regardless of this setting. + * + * Also note that this will only protect _pages in the wiki_. Uploaded files + * will remain readable. You can use img_auth.php to protect uploaded files, + * see http://www.mediawiki.org/wiki/Manual:Image_Authorization */ -$wgUseDumbLinkUpdate = false; +$wgWhitelistRead = false; /** - * Anti-lock flags - bitfield - * ALF_PRELOAD_LINKS - * Preload links during link update for save - * ALF_PRELOAD_EXISTENCE - * Preload cur_id during replaceLinkHolders - * ALF_NO_LINK_LOCK - * Don't use locking reads when updating the link table. This is - * necessary for wikis with a high edit rate for performance - * reasons, but may cause link table inconsistency - * ALF_NO_BLOCK_LOCK - * As for ALF_LINK_LOCK, this flag is a necessity for high-traffic - * wikis. + * Should editors be required to have a validated e-mail + * address before being allowed to edit? */ -$wgAntiLockFlags = 0; +$wgEmailConfirmToEdit = false; /** - * Path to the GNU diff3 utility. If the file doesn't exist, edit conflicts will - * fall back to the old behaviour (no merging). + * Permission keys given to users in each group. + * All users are implicitly in the '*' group including anonymous visitors; + * logged-in users are all implicitly in the 'user' group. These will be + * combined with the permissions of all groups that a given user is listed + * in in the user_groups table. + * + * Note: Don't set $wgGroupPermissions = array(); unless you know what you're + * doing! This will wipe all permissions, and may mean that your users are + * unable to perform certain essential tasks or access new functionality + * when new permissions are introduced and default grants established. + * + * Functionality to make pages inaccessible has not been extensively tested + * for security. Use at your own risk! + * + * This replaces wgWhitelistAccount and wgWhitelistEdit */ -$wgDiff3 = '/usr/bin/diff3'; +$wgGroupPermissions = array(); + +/** @cond file_level_code */ +// Implicit group for all visitors +$wgGroupPermissions['*']['createaccount'] = true; +$wgGroupPermissions['*']['read'] = true; +$wgGroupPermissions['*']['edit'] = true; +$wgGroupPermissions['*']['createpage'] = true; +$wgGroupPermissions['*']['createtalk'] = true; +$wgGroupPermissions['*']['writeapi'] = true; +//$wgGroupPermissions['*']['patrolmarks'] = false; // let anons see what was patrolled + +// Implicit group for all logged-in accounts +$wgGroupPermissions['user']['move'] = true; +$wgGroupPermissions['user']['move-subpages'] = true; +$wgGroupPermissions['user']['move-rootuserpages'] = true; // can move root userpages +//$wgGroupPermissions['user']['movefile'] = true; // Disabled for now due to possible bugs and security concerns +$wgGroupPermissions['user']['read'] = true; +$wgGroupPermissions['user']['edit'] = true; +$wgGroupPermissions['user']['createpage'] = true; +$wgGroupPermissions['user']['createtalk'] = true; +$wgGroupPermissions['user']['writeapi'] = true; +$wgGroupPermissions['user']['upload'] = true; +$wgGroupPermissions['user']['reupload'] = true; +$wgGroupPermissions['user']['reupload-shared'] = true; +$wgGroupPermissions['user']['minoredit'] = true; +$wgGroupPermissions['user']['purge'] = true; // can use ?action=purge without clicking "ok" +$wgGroupPermissions['user']['sendemail'] = true; + +// Implicit group for accounts that pass $wgAutoConfirmAge +$wgGroupPermissions['autoconfirmed']['autoconfirmed'] = true; + +// Users with bot privilege can have their edits hidden +// from various log pages by default +$wgGroupPermissions['bot']['bot'] = true; +$wgGroupPermissions['bot']['autoconfirmed'] = true; +$wgGroupPermissions['bot']['nominornewtalk'] = true; +$wgGroupPermissions['bot']['autopatrol'] = true; +$wgGroupPermissions['bot']['suppressredirect'] = true; +$wgGroupPermissions['bot']['apihighlimits'] = true; +$wgGroupPermissions['bot']['writeapi'] = true; +#$wgGroupPermissions['bot']['editprotected'] = true; // can edit all protected pages without cascade protection enabled + +// Most extra permission abilities go to this group +$wgGroupPermissions['sysop']['block'] = true; +$wgGroupPermissions['sysop']['createaccount'] = true; +$wgGroupPermissions['sysop']['delete'] = true; +$wgGroupPermissions['sysop']['bigdelete'] = true; // can be separately configured for pages with > $wgDeleteRevisionsLimit revs +$wgGroupPermissions['sysop']['deletedhistory'] = true; // can view deleted history entries, but not see or restore the text +$wgGroupPermissions['sysop']['deletedtext'] = true; // can view deleted revision text +$wgGroupPermissions['sysop']['undelete'] = true; +$wgGroupPermissions['sysop']['editinterface'] = true; +$wgGroupPermissions['sysop']['editusercss'] = true; +$wgGroupPermissions['sysop']['edituserjs'] = true; +$wgGroupPermissions['sysop']['import'] = true; +$wgGroupPermissions['sysop']['importupload'] = true; +$wgGroupPermissions['sysop']['move'] = true; +$wgGroupPermissions['sysop']['move-subpages'] = true; +$wgGroupPermissions['sysop']['move-rootuserpages'] = true; +$wgGroupPermissions['sysop']['patrol'] = true; +$wgGroupPermissions['sysop']['autopatrol'] = true; +$wgGroupPermissions['sysop']['protect'] = true; +$wgGroupPermissions['sysop']['proxyunbannable'] = true; +$wgGroupPermissions['sysop']['rollback'] = true; +$wgGroupPermissions['sysop']['trackback'] = true; +$wgGroupPermissions['sysop']['upload'] = true; +$wgGroupPermissions['sysop']['reupload'] = true; +$wgGroupPermissions['sysop']['reupload-shared'] = true; +$wgGroupPermissions['sysop']['unwatchedpages'] = true; +$wgGroupPermissions['sysop']['autoconfirmed'] = true; +$wgGroupPermissions['sysop']['upload_by_url'] = true; +$wgGroupPermissions['sysop']['ipblock-exempt'] = true; +$wgGroupPermissions['sysop']['blockemail'] = true; +$wgGroupPermissions['sysop']['markbotedits'] = true; +$wgGroupPermissions['sysop']['apihighlimits'] = true; +$wgGroupPermissions['sysop']['browsearchive'] = true; +$wgGroupPermissions['sysop']['noratelimit'] = true; +$wgGroupPermissions['sysop']['movefile'] = true; +$wgGroupPermissions['sysop']['unblockself'] = true; +$wgGroupPermissions['sysop']['suppressredirect'] = true; +#$wgGroupPermissions['sysop']['mergehistory'] = true; + +// Permission to change users' group assignments +$wgGroupPermissions['bureaucrat']['userrights'] = true; +$wgGroupPermissions['bureaucrat']['noratelimit'] = true; +// Permission to change users' groups assignments across wikis +#$wgGroupPermissions['bureaucrat']['userrights-interwiki'] = true; +// Permission to export pages including linked pages regardless of $wgExportMaxLinkDepth +#$wgGroupPermissions['bureaucrat']['override-export-depth'] = true; + +#$wgGroupPermissions['sysop']['deleterevision'] = true; +// To hide usernames from users and Sysops +#$wgGroupPermissions['suppress']['hideuser'] = true; +// To hide revisions/log items from users and Sysops +#$wgGroupPermissions['suppress']['suppressrevision'] = true; +// For private suppression log access +#$wgGroupPermissions['suppress']['suppressionlog'] = true; /** - * Path to the GNU diff utility. + * The developer group is deprecated, but can be activated if need be + * to use the 'lockdb' and 'unlockdb' special pages. Those require + * that a lock file be defined and creatable/removable by the web + * server. */ -$wgDiff = '/usr/bin/diff'; +# $wgGroupPermissions['developer']['siteadmin'] = true; + +/** @endcond */ /** - * We can also compress text stored in the 'text' table. If this is set on, new - * revisions will be compressed on page save if zlib support is available. Any - * compressed revisions will be decompressed on load regardless of this setting - * *but will not be readable at all* if zlib support is not available. + * Permission keys revoked from users in each group. + * This acts the same way as wgGroupPermissions above, except that + * if the user is in a group here, the permission will be removed from them. + * + * Improperly setting this could mean that your users will be unable to perform + * certain essential tasks, so use at your own risk! */ -$wgCompressRevisions = false; +$wgRevokePermissions = array(); /** - * This is the list of preferred extensions for uploading files. Uploading files - * with extensions not in this list will trigger a warning. + * Implicit groups, aren't shown on Special:Listusers or somewhere else */ -$wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg' ); - -/** Files with these extensions will never be allowed as uploads. */ -$wgFileBlacklist = array( - # HTML may contain cookie-stealing JavaScript and web bugs - 'html', 'htm', 'js', 'jsb', 'mhtml', 'mht', 'xhtml', 'xht', - # PHP scripts may execute arbitrary code on the server - 'php', 'phtml', 'php3', 'php4', 'php5', 'phps', - # Other types that may be interpreted by some servers - 'shtml', 'jhtml', 'pl', 'py', 'cgi', - # May contain harmful executables for Windows victims - 'exe', 'scr', 'dll', 'msi', 'vbs', 'bat', 'com', 'pif', 'cmd', 'vxd', 'cpl' ); +$wgImplicitGroups = array( '*', 'user', 'autoconfirmed' ); -/** Files with these mime types will never be allowed as uploads - * if $wgVerifyMimeType is enabled. - */ -$wgMimeTypeBlacklist= array( - # HTML may contain cookie-stealing JavaScript and web bugs - 'text/html', 'text/javascript', 'text/x-javascript', 'application/x-shellscript', - # PHP scripts may execute arbitrary code on the server - 'application/x-php', 'text/x-php', - # Other types that may be interpreted by some servers - 'text/x-python', 'text/x-perl', 'text/x-bash', 'text/x-sh', 'text/x-csh', - # Client-side hazards on Internet Explorer - 'text/scriptlet', 'application/x-msdownload', - # Windows metafile, client-side vulnerability on some systems - 'application/x-msmetafile', - # A ZIP file may be a valid Java archive containing an applet which exploits the - # same-origin policy to steal cookies - 'application/zip', -); +/** + * A map of group names that the user is in, to group names that those users + * are allowed to add or revoke. + * + * Setting the list of groups to add or revoke to true is equivalent to "any group". + * + * For example, to allow sysops to add themselves to the "bot" group: + * + * $wgGroupsAddToSelf = array( 'sysop' => array( 'bot' ) ); + * + * Implicit groups may be used for the source group, for instance: + * + * $wgGroupsRemoveFromSelf = array( '*' => true ); + * + * This allows users in the '*' group (i.e. any user) to remove themselves from + * any group that they happen to be in. + * + */ +$wgGroupsAddToSelf = array(); -/** This is a flag to determine whether or not to check file extensions on upload. */ -$wgCheckFileExtensions = true; +/** @see $wgGroupsAddToSelf */ +$wgGroupsRemoveFromSelf = array(); /** - * If this is turned off, users may override the warning for files not covered - * by $wgFileExtensions. + * Set of available actions that can be restricted via action=protect + * You probably shouldn't change this. + * Translated through restriction-* messages. + * Title::getRestrictionTypes() will remove restrictions that are not + * applicable to a specific title (create and upload) */ -$wgStrictFileExtensions = true; - -/** Warn if uploaded files are larger than this (in bytes), or false to disable*/ -$wgUploadSizeWarning = false; +$wgRestrictionTypes = array( 'create', 'edit', 'move', 'upload' ); -/** For compatibility with old installations set to false */ -$wgPasswordSalt = true; +/** + * Rights which can be required for each protection level (via action=protect) + * + * You can add a new protection level that requires a specific + * permission by manipulating this array. The ordering of elements + * dictates the order on the protection form's lists. + * + * - '' will be ignored (i.e. unprotected) + * - 'sysop' is quietly rewritten to 'protect' for backwards compatibility + */ +$wgRestrictionLevels = array( '', 'autoconfirmed', 'sysop' ); -/** Which namespaces should support subpages? - * See Language.php for a list of namespaces. +/** + * Set the minimum permissions required to edit pages in each + * namespace. If you list more than one permission, a user must + * have all of them to edit pages in that namespace. + * + * Note: NS_MEDIAWIKI is implicitly restricted to editinterface. */ -$wgNamespacesWithSubpages = array( - NS_TALK => true, - NS_USER => true, - NS_USER_TALK => true, - NS_PROJECT_TALK => true, - NS_FILE_TALK => true, - NS_MEDIAWIKI => true, - NS_MEDIAWIKI_TALK => true, - NS_TEMPLATE_TALK => true, - NS_HELP_TALK => true, - NS_CATEGORY_TALK => true -); +$wgNamespaceProtection = array(); /** - * Which namespaces have special treatment where they should be preview-on-open - * Internaly only Category: pages apply, but using this extensions (e.g. Semantic MediaWiki) - * can specify namespaces of pages they have special treatment for + * Pages in namespaces in this array can not be used as templates. + * Elements must be numeric namespace ids. + * Among other things, this may be useful to enforce read-restrictions + * which may otherwise be bypassed by using the template machanism. */ -$wgPreviewOnOpenNamespaces = array( - NS_CATEGORY => true -); +$wgNonincludableNamespaces = array(); -$wgNamespacesToBeSearchedDefault = array( - NS_MAIN => true, -); +/** + * Number of seconds an account is required to age before it's given the + * implicit 'autoconfirm' group membership. This can be used to limit + * privileges of new accounts. + * + * Accounts created by earlier versions of the software may not have a + * recorded creation date, and will always be considered to pass the age test. + * + * When left at 0, all registered accounts will pass. + * + * Example: + * <code> + * $wgAutoConfirmAge = 600; // ten minutes + * $wgAutoConfirmAge = 3600*24; // one day + * </code> + */ +$wgAutoConfirmAge = 0; /** - * Namespaces to be searched when user clicks the "Help" tab - * on Special:Search + * Number of edits an account requires before it is autoconfirmed. + * Passing both this AND the time requirement is needed. Example: * - * Same format as $wgNamespacesToBeSearchedDefault + * <code> + * $wgAutoConfirmCount = 50; + * </code> */ -$wgNamespacesToBeSearchedHelp = array( - NS_PROJECT => true, - NS_HELP => true, -); +$wgAutoConfirmCount = 0; /** - * If set to true the 'searcheverything' preference will be effective only for logged-in users. - * Useful for big wikis to maintain different search profiles for anonymous and logged-in users. + * Automatically add a usergroup to any user who matches certain conditions. + * The format is + * array( '&' or '|' or '^', cond1, cond2, ... ) + * where cond1, cond2, ... are themselves conditions; *OR* + * APCOND_EMAILCONFIRMED, *OR* + * array( APCOND_EMAILCONFIRMED ), *OR* + * array( APCOND_EDITCOUNT, number of edits ), *OR* + * array( APCOND_AGE, seconds since registration ), *OR* + * array( APCOND_INGROUPS, group1, group2, ... ), *OR* + * array( APCOND_ISIP, ip ), *OR* + * array( APCOND_IPINRANGE, range ), *OR* + * array( APCOND_AGE_FROM_EDIT, seconds since first edit ), *OR* + * array( APCOND_BLOCKED ), *OR* + * similar constructs defined by extensions. * + * If $wgEmailAuthentication is off, APCOND_EMAILCONFIRMED will be true for any + * user who has provided an e-mail address. */ -$wgSearchEverythingOnlyLoggedIn = false; +$wgAutopromote = array( + 'autoconfirmed' => array( '&', + array( APCOND_EDITCOUNT, &$wgAutoConfirmCount ), + array( APCOND_AGE, &$wgAutoConfirmAge ), + ), +); /** - * Site notice shown at the top of each page + * $wgAddGroups and $wgRemoveGroups can be used to give finer control over who + * can assign which groups at Special:Userrights. Example configuration: * - * MediaWiki:Sitenotice page, which will override this. You can also - * provide a separate message for logged-out users using the - * MediaWiki:Anonnotice page. + * @code + * // Bureaucrat can add any group + * $wgAddGroups['bureaucrat'] = true; + * // Bureaucrats can only remove bots and sysops + * $wgRemoveGroups['bureaucrat'] = array( 'bot', 'sysop' ); + * // Sysops can make bots + * $wgAddGroups['sysop'] = array( 'bot' ); + * // Sysops can disable other sysops in an emergency, and disable bots + * $wgRemoveGroups['sysop'] = array( 'sysop', 'bot' ); + * @endcode */ -$wgSiteNotice = ''; +$wgAddGroups = array(); +/** @see $wgAddGroups */ +$wgRemoveGroups = array(); -# -# Images settings -# +/** + * A list of available rights, in addition to the ones defined by the core. + * For extensions only. + */ +$wgAvailableRights = array(); /** - * Plugins for media file type handling. - * Each entry in the array maps a MIME type to a class name + * Optional to restrict deletion of pages with higher revision counts + * to users with the 'bigdelete' permission. (Default given to sysops.) */ -$wgMediaHandlers = array( - 'image/jpeg' => 'BitmapHandler', - 'image/png' => 'BitmapHandler', - 'image/gif' => 'GIFHandler', - 'image/tiff' => 'TiffHandler', - 'image/x-ms-bmp' => 'BmpHandler', - 'image/x-bmp' => 'BmpHandler', - 'image/svg+xml' => 'SvgHandler', // official - 'image/svg' => 'SvgHandler', // compat - 'image/vnd.djvu' => 'DjVuHandler', // official - 'image/x.djvu' => 'DjVuHandler', // compat - 'image/x-djvu' => 'DjVuHandler', // compat -); +$wgDeleteRevisionsLimit = 0; +/** Number of accounts each IP address may create, 0 to disable. + * Requires memcached */ +$wgAccountCreationThrottle = 0; /** - * Resizing can be done using PHP's internal image libraries or using - * ImageMagick or another third-party converter, e.g. GraphicMagick. - * These support more file formats than PHP, which only supports PNG, - * GIF, JPG, XBM and WBMP. + * Edits matching these regular expressions in body text + * will be recognised as spam and rejected automatically. * - * Use Image Magick instead of PHP builtin functions. + * There's no administrator override on-wiki, so be careful what you set. :) + * May be an array of regexes or a single string for backwards compatibility. + * + * See http://en.wikipedia.org/wiki/Regular_expression + * Note that each regex needs a beginning/end delimiter, eg: # or / */ -$wgUseImageMagick = false; -/** The convert command shipped with ImageMagick */ -$wgImageMagickConvertCommand = '/usr/bin/convert'; +$wgSpamRegex = array(); -/** Sharpening parameter to ImageMagick */ -$wgSharpenParameter = '0x0.4'; +/** Same as the above except for edit summaries */ +$wgSummarySpamRegex = array(); -/** Reduction in linear dimensions below which sharpening will be enabled */ -$wgSharpenReductionThreshold = 0.85; +/** + * Similarly you can get a function to do the job. The function will be given + * the following args: + * - a Title object for the article the edit is made on + * - the text submitted in the textarea (wpTextbox1) + * - the section number. + * The return should be boolean indicating whether the edit matched some evilness: + * - true : block it + * - false : let it through + * + * @deprecated Use hooks. See SpamBlacklist extension. + */ +$wgFilterCallback = false; /** - * Temporary directory used for ImageMagick. The directory must exist. Leave - * this set to false to let ImageMagick decide for itself. + * Whether to use DNS blacklists in $wgDnsBlacklistUrls to check for open proxies + * @since 1.16 */ -$wgImageMagickTempDir = false; +$wgEnableDnsBlacklist = false; /** - * Use another resizing converter, e.g. GraphicMagick - * %s will be replaced with the source path, %d with the destination - * %w and %h will be replaced with the width and height - * - * An example is provided for GraphicMagick - * Leave as false to skip this + * @deprecated Use $wgEnableDnsBlacklist instead, only kept for backward + * compatibility */ -#$wgCustomConvertCommand = "gm convert %s -resize %wx%h %d" -$wgCustomConvertCommand = false; +$wgEnableSorbs = false; -# Scalable Vector Graphics (SVG) may be uploaded as images. -# Since SVG support is not yet standard in browsers, it is -# necessary to rasterize SVGs to PNG as a fallback format. -# -# An external program is required to perform this conversion: -$wgSVGConverters = array( - 'ImageMagick' => '$path/convert -background white -thumbnail $widthx$height\! $input PNG:$output', - 'sodipodi' => '$path/sodipodi -z -w $width -f $input -e $output', - 'inkscape' => '$path/inkscape -z -w $width -f $input -e $output', - 'batik' => 'java -Djava.awt.headless=true -jar $path/batik-rasterizer.jar -w $width -d $output $input', - 'rsvg' => '$path/rsvg -w$width -h$height $input $output', - 'imgserv' => '$path/imgserv-wrapper -i svg -o png -w$width $input $output', - ); -/** Pick one of the above */ -$wgSVGConverter = 'ImageMagick'; -/** If not in the executable PATH, specify */ -$wgSVGConverterPath = ''; -/** Don't scale a SVG larger than this */ -$wgSVGMaxSize = 2048; /** - * Don't thumbnail an image if it will use too much working memory - * Default is 50 MB if decompressed to RGBA form, which corresponds to - * 12.5 million pixels or 3500x3500 + * List of DNS blacklists to use, if $wgEnableDnsBlacklist is true + * @since 1.16 */ -$wgMaxImageArea = 1.25e7; +$wgDnsBlacklistUrls = array( 'http.dnsbl.sorbs.net.' ); + /** - * Force thumbnailing of animated GIFs above this size to a single - * frame instead of an animated thumbnail. ImageMagick seems to - * get real unhappy and doesn't play well with resource limits. :P - * Defaulting to 1 megapixel (1000x1000) + * @deprecated Use $wgDnsBlacklistUrls instead, only kept for backward + * compatibility */ -$wgMaxAnimatedGifArea = 1.0e6; +$wgSorbsUrl = array(); + /** - * Browsers don't support TIFF inline generally... - * For inline display, we need to convert to PNG or JPEG. - * Note scaling should work with ImageMagick, but may not with GD scaling. - * // PNG is lossless, but inefficient for photos - * $wgTiffThumbnailType = array( 'png', 'image/png' ); - * // JPEG is good for photos, but has no transparency support. Bad for diagrams. - * $wgTiffThumbnailType = array( 'jpg', 'image/jpeg' ); + * Proxy whitelist, list of addresses that are assumed to be non-proxy despite + * what the other methods might say. */ - $wgTiffThumbnailType = false; +$wgProxyWhitelist = array(); + +/** + * Simple rate limiter options to brake edit floods. Maximum number actions + * allowed in the given number of seconds; after that the violating client re- + * ceives HTTP 500 error pages until the period elapses. + * + * array( 4, 60 ) for a maximum of 4 hits in 60 seconds. + * + * This option set is experimental and likely to change. Requires memcached. + */ +$wgRateLimits = array( + 'edit' => array( + 'anon' => null, // for any and all anonymous edits (aggregate) + 'user' => null, // for each logged-in user + 'newbie' => null, // for each recent (autoconfirmed) account; overrides 'user' + 'ip' => null, // for each anon and recent account + 'subnet' => null, // ... with final octet removed + ), + 'move' => array( + 'user' => null, + 'newbie' => null, + 'ip' => null, + 'subnet' => null, + ), + 'mailpassword' => array( + 'anon' => null, + ), + 'emailuser' => array( + 'user' => null, + ), + ); /** - * If rendered thumbnail files are older than this timestamp, they - * will be rerendered on demand as if the file didn't already exist. - * Update if there is some need to force thumbs and SVG rasterizations - * to rerender, such as fixes to rendering bugs. + * Set to a filename to log rate limiter hits. */ -$wgThumbnailEpoch = '20030516000000'; +$wgRateLimitLog = null; /** - * If set, inline scaled images will still produce <img> tags ready for - * output instead of showing an error message. + * Array of groups which should never trigger the rate limiter * - * This may be useful if errors are transitory, especially if the site - * is configured to automatically render thumbnails on request. + * @deprecated as of 1.13.0, the preferred method is using + * $wgGroupPermissions[]['noratelimit']. However, this will still + * work if desired. * - * On the other hand, it may obscure error conditions from debugging. - * Enable the debug log or the 'thumbnail' log group to make sure errors - * are logged to a file for review. + * $wgRateLimitsExcludedGroups = array( 'sysop', 'bureaucrat' ); */ -$wgIgnoreImageErrors = false; +$wgRateLimitsExcludedGroups = array(); /** - * Allow thumbnail rendering on page view. If this is false, a valid - * thumbnail URL is still output, but no file will be created at - * the target location. This may save some time if you have a - * thumb.php or 404 handler set up which is faster than the regular - * webserver(s). + * Array of IPs which should be excluded from rate limits. + * This may be useful for whitelisting NAT gateways for conferences, etc. */ -$wgGenerateThumbnailOnParse = true; +$wgRateLimitsExcludedIPs = array(); /** -* Show thumbnails for old images on the image description page -*/ -$wgShowArchiveThumbnails = true; - -/** Obsolete, always true, kept for compatibility with extensions */ -$wgUseImageResize = true; + * Log IP addresses in the recentchanges table; can be accessed only by + * extensions (e.g. CheckUser) or a DB admin + */ +$wgPutIPinRC = true; +/** + * Limit password attempts to X attempts per Y seconds per IP per account. + * Requires memcached. + */ +$wgPasswordAttemptThrottle = array( 'count' => 5, 'seconds' => 300 ); -/** Set $wgCommandLineMode if it's not set already, to avoid notices */ -if( !isset( $wgCommandLineMode ) ) { - $wgCommandLineMode = false; -} +/** @} */ # end of user rights settings -/** For colorized maintenance script output, is your terminal background dark ? */ -$wgCommandLineDarkBg = false; +/************************************************************************//** + * @name Proxy scanner settings + * @{ + */ /** - * Array for extensions to register their maintenance scripts with the - * system. The key is the name of the class and the value is the full - * path to the file + * If you enable this, every editor's IP address will be scanned for open HTTP + * proxies. + * + * Don't enable this. Many sysops will report "hostile TCP port scans" to your + * ISP and ask for your server to be shut down. + * + * You have been warned. */ -$wgMaintenanceScripts = array(); - -# -# Recent changes settings -# +$wgBlockOpenProxies = false; +/** Port we want to scan for a proxy */ +$wgProxyPorts = array( 80, 81, 1080, 3128, 6588, 8000, 8080, 8888, 65506 ); +/** Script used to scan */ +$wgProxyScriptPath = "$IP/includes/proxy_check.php"; +/** */ +$wgProxyMemcExpiry = 86400; +/** This should always be customised in LocalSettings.php */ +$wgSecretKey = false; +/** big list of banned IP addresses, in the keys not the values */ +$wgProxyList = array(); +/** deprecated */ +$wgProxyKey = false; -/** Log IP addresses in the recentchanges table; can be accessed only by extensions (e.g. CheckUser) or a DB admin */ -$wgPutIPinRC = true; +/** @} */ # end of proxy scanner settings -/** - * Recentchanges items are periodically purged; entries older than this many - * seconds will go. - * Default: 13 weeks = about three months +/************************************************************************//** + * @name Cookie settings + * @{ */ -$wgRCMaxAge = 13 * 7 * 24 * 3600; /** - * Filter $wgRCLinkDays by $wgRCMaxAge to avoid showing links for numbers higher than what will be stored. - * Note that this is disabled by default because we sometimes do have RC data which is beyond the limit - * for some reason, and some users may use the high numbers to display that data which is still there. + * Default cookie expiration time. Setting to 0 makes all cookies session-only. */ -$wgRCFilterByAge = false; +$wgCookieExpiration = 30*86400; /** - * List of Days and Limits options to list in the Special:Recentchanges and Special:Recentchangeslinked pages. + * Set to set an explicit domain on the login cookies eg, "justthis.domain.org" + * or ".any.subdomain.net" */ -$wgRCLinkLimits = array( 50, 100, 250, 500 ); -$wgRCLinkDays = array( 1, 3, 7, 14, 30 ); +$wgCookieDomain = ''; +$wgCookiePath = '/'; +$wgCookieSecure = ($wgProto == 'https'); +$wgDisableCookieCheck = false; /** - * Send recent changes updates via UDP. The updates will be formatted for IRC. - * Set this to the IP address of the receiver. + * Set $wgCookiePrefix to use a custom one. Setting to false sets the default of + * using the database name. */ -$wgRC2UDPAddress = false; +$wgCookiePrefix = false; /** - * Port number for RC updates + * Set authentication cookies to HttpOnly to prevent access by JavaScript, + * in browsers that support this feature. This can mitigates some classes of + * XSS attack. + * + * Only supported on PHP 5.2 or higher. */ -$wgRC2UDPPort = false; +$wgCookieHttpOnly = version_compare("5.2", PHP_VERSION, "<"); /** - * Prefix to prepend to each UDP packet. - * This can be used to identify the wiki. A script is available called - * mxircecho.py which listens on a UDP port, and uses a prefix ending in a - * tab to identify the IRC channel to send the log line to. + * If the requesting browser matches a regex in this blacklist, we won't + * send it cookies with HttpOnly mode, even if $wgCookieHttpOnly is on. */ -$wgRC2UDPPrefix = ''; +$wgHttpOnlyBlacklist = array( + // Internet Explorer for Mac; sometimes the cookies work, sometimes + // they don't. It's difficult to predict, as combinations of path + // and expiration options affect its parsing. + '/^Mozilla\/4\.0 \(compatible; MSIE \d+\.\d+; Mac_PowerPC\)/', +); -/** - * If this is set to true, $wgLocalInterwiki will be prepended to links in the - * IRC feed. If this is set to a string, that string will be used as the prefix. +/** A list of cookies that vary the cache (for use by extensions) */ +$wgCacheVaryCookies = array(); + +/** Override to customise the session name */ +$wgSessionName = false; + +/** @} */ # end of cookie settings } + +/************************************************************************//** + * @name LaTeX (mathematical formulas) + * @{ */ -$wgRC2UDPInterwikiPrefix = false; /** - * Set to true to omit "bot" edits (by users with the bot permission) from the - * UDP feed. + * To use inline TeX, you need to compile 'texvc' (in the 'math' subdirectory of + * the MediaWiki package and have latex, dvips, gs (ghostscript), andconvert + * (ImageMagick) installed and available in the PATH. + * Please see math/README for more information. */ -$wgRC2UDPOmitBots = false; +$wgUseTeX = false; +/** Location of the texvc binary */ +$wgTexvc = $IP . '/math/texvc'; +/** + * Texvc background color + * use LaTeX color format as used in \special function + * for transparent background use value 'Transparent' for alpha transparency or + * 'transparent' for binary transparency. + */ +$wgTexvcBackgroundColor = 'transparent'; /** - * Enable user search in Special:Newpages - * This is really a temporary hack around an index install bug on some Wikipedias. - * Kill it once fixed. + * Normally when generating math images, we double-check that the + * directories we want to write to exist, and that files that have + * been generated still exist when we need to bring them up again. + * + * This lets us give useful error messages in case of permission + * problems, and automatically rebuild images that have been lost. + * + * On a big site with heavy NFS traffic this can be slow and flaky, + * so sometimes we want to short-circuit it by setting this to false. */ -$wgEnableNewpagesUserFilter = true; - -# -# Copyright and credits settings -# +$wgMathCheckFiles = true; -/** RDF metadata toggles */ -$wgEnableDublinCoreRdf = false; -$wgEnableCreativeCommonsRdf = false; +/* @} */ # end LaTeX } -/** Override for copyright metadata. - * TODO: these options need documentation +/************************************************************************//** + * @name Profiling, testing and debugging + * + * To enable profiling, edit StartProfiler.php + * + * @{ */ -$wgRightsPage = null; -$wgRightsUrl = null; -$wgRightsText = null; -$wgRightsIcon = null; /** - * Set to an array of metadata terms. Else they will be loaded based on $wgRightsUrl + * Filename for debug logging. See http://www.mediawiki.org/wiki/How_to_debug + * The debug log file should be not be publicly accessible if it is used, as it + * may contain private data. */ -$wgLicenseTerms = false; - -/** Set this to some HTML to override the rights icon with an arbitrary logo */ -$wgCopyrightIcon = null; - -/** Set this to true if you want detailed copyright information forms on Upload. */ -$wgUseCopyrightUpload = false; - -/** Set this to false if you want to disable checking that detailed copyright - * information values are not empty. */ -$wgCheckCopyrightUpload = true; +$wgDebugLogFile = ''; /** - * Set this to the number of authors that you want to be credited below an - * article text. Set it to zero to hide the attribution block, and a negative - * number (like -1) to show all authors. Note that this will require 2-3 extra - * database hits, which can have a not insignificant impact on performance for - * large wikis. + * Prefix for debug log lines */ -$wgMaxCredits = 0; +$wgDebugLogPrefix = ''; -/** If there are more than $wgMaxCredits authors, show $wgMaxCredits of them. - * Otherwise, link to a separate credits page. */ -$wgShowCreditsIfMax = true; +/** + * If true, instead of redirecting, show a page with a link to the redirect + * destination. This allows for the inspection of PHP error messages, and easy + * resubmission of form data. For developer use only. + */ +$wgDebugRedirects = false; +/** + * If true, log debugging data from action=raw. + * This is normally false to avoid overlapping debug entries due to gen=css and + * gen=js requests. + */ +$wgDebugRawPage = false; +/** + * Send debug data to an HTML comment in the output. + * + * This may occasionally be useful when supporting a non-technical end-user. It's + * more secure than exposing the debug log file to the web, since the output only + * contains private data for the current user. But it's not ideal for development + * use since data is lost on fatal errors and redirects. + */ +$wgDebugComments = false; /** - * Set this to false to avoid forcing the first letter of links to capitals. - * WARNING: may break links! This makes links COMPLETELY case-sensitive. Links - * appearing with a capital at the beginning of a sentence will *not* go to the - * same place as links in the middle of a sentence using a lowercase initial. + * Write SQL queries to the debug log */ -$wgCapitalLinks = true; +$wgDebugDumpSql = false; /** - * @since 1.16 - This can now be set per-namespace. Some special namespaces (such - * as Special, see MWNamespace::$alwaysCapitalizedNamespaces for the full list) must be - * true by default (and setting them has no effect), due to various things that - * require them to be so. Also, since Talk namespaces need to directly mirror their - * associated content namespaces, the values for those are ignored in favor of the - * subject namespace's setting. Setting for NS_MEDIA is taken automatically from - * NS_FILE. - * EX: $wgCapitalLinkOverrides[ NS_FILE ] = false; + * Set to an array of log group keys to filenames. + * If set, wfDebugLog() output for that group will go to that file instead + * of the regular $wgDebugLogFile. Useful for enabling selective logging + * in production. */ -$wgCapitalLinkOverrides = array(); +$wgDebugLogGroups = array(); /** - * List of interwiki prefixes for wikis we'll accept as sources for - * Special:Import (for sysops). Since complete page history can be imported, - * these should be 'trusted'. + * Display debug data at the bottom of the main content area. * - * If a user has the 'import' permission but not the 'importupload' permission, - * they will only be able to run imports through this transwiki interface. + * Useful for developers and technical users trying to working on a closed wiki. */ -$wgImportSources = array(); +$wgShowDebug = false; /** - * Optional default target namespace for interwiki imports. - * Can use this to create an incoming "transwiki"-style queue. - * Set to numeric key, not the name. - * - * Users may override this in the Special:Import dialog. + * Prefix debug messages with relative timestamp. Very-poor man's profiler. + */ +$wgDebugTimestamps = false; + +/** + * Print HTTP headers for every request in the debug information. */ -$wgImportTargetNamespace = null; +$wgDebugPrintHttpHeaders = true; /** - * If set to false, disables the full-history option on Special:Export. - * This is currently poorly optimized for long edit histories, so is - * disabled on Wikimedia's sites. + * Show the contents of $wgHooks in Special:Version */ -$wgExportAllowHistory = true; +$wgSpecialVersionShowHooks = false; /** - * If set nonzero, Special:Export requests for history of pages with - * more revisions than this will be rejected. On some big sites things - * could get bogged down by very very long pages. + * Whether to show "we're sorry, but there has been a database error" pages. + * Displaying errors aids in debugging, but may display information useful + * to an attacker. */ -$wgExportMaxHistory = 0; +$wgShowSQLErrors = false; /** -* Return distinct author list (when not returning full history) -*/ -$wgExportAllowListContributors = false ; + * If set to true, uncaught exceptions will print a complete stack trace + * to output. This should only be used for debugging, as it may reveal + * private information in function parameters due to PHP's backtrace + * formatting. + */ +$wgShowExceptionDetails = false; /** - * If non-zero, Special:Export accepts a "pagelink-depth" parameter - * up to this specified level, which will cause it to include all - * pages linked to from the pages you specify. Since this number - * can become *insanely large* and could easily break your wiki, - * it's disabled by default for now. - * - * There's a HARD CODED limit of 5 levels of recursion to prevent a - * crazy-big export from being done by someone setting the depth - * number too high. In other words, last resort safety net. + * If true, show a backtrace for database errors */ -$wgExportMaxLinkDepth = 0; +$wgShowDBErrorBacktrace = false; /** -* Whether to allow the "export all pages in namespace" option -*/ -$wgExportFromNamespaces = false; + * Expose backend server host names through the API and various HTML comments + */ +$wgShowHostnames = false; /** - * Edits matching these regular expressions in body text - * will be recognised as spam and rejected automatically. - * - * There's no administrator override on-wiki, so be careful what you set. :) - * May be an array of regexes or a single string for backwards compatibility. - * - * See http://en.wikipedia.org/wiki/Regular_expression - * Note that each regex needs a beginning/end delimiter, eg: # or / + * If set to true MediaWiki will throw notices for some possible error + * conditions and for deprecated functions. */ -$wgSpamRegex = array(); +$wgDevelopmentWarnings = false; -/** Same as the above except for edit summaries */ -$wgSummarySpamRegex = array(); +/** Only record profiling info for pages that took longer than this */ +$wgProfileLimit = 0.0; -/** Similarly you can get a function to do the job. The function will be given - * the following args: - * - a Title object for the article the edit is made on - * - the text submitted in the textarea (wpTextbox1) - * - the section number. - * The return should be boolean indicating whether the edit matched some evilness: - * - true : block it - * - false : let it through +/** Don't put non-profiling info into log file */ +$wgProfileOnly = false; + +/** + * Log sums from profiling into "profiling" table in db. * - * For a complete example, have a look at the SpamBlacklist extension. + * You have to create a 'profiling' table in your database before using + * this feature, see maintenance/archives/patch-profiling.sql + * + * To enable profiling, edit StartProfiler.php */ -$wgFilterCallback = false; +$wgProfileToDatabase = false; -/** Go button goes straight to the edit screen if the article doesn't exist. */ -$wgGoToEdit = false; +/** If true, print a raw call tree instead of per-function report */ +$wgProfileCallTree = false; -/** Allow raw, unchecked HTML in <html>...</html> sections. - * THIS IS VERY DANGEROUS on a publically editable site, so USE wgGroupPermissions - * TO RESTRICT EDITING to only those that you trust - */ -$wgRawHtml = false; +/** Should application server host be put into profiling table */ +$wgProfilePerHost = false; /** - * $wgUseTidy: use tidy to make sure HTML output is sane. - * Tidy is a free tool that fixes broken HTML. - * See http://www.w3.org/People/Raggett/tidy/ - * $wgTidyBin should be set to the path of the binary and - * $wgTidyConf to the path of the configuration file. - * $wgTidyOpts can include any number of parameters. + * Host for UDP profiler. * - * $wgTidyInternal controls the use of the PECL extension to use an in- - * process tidy library instead of spawning a separate program. - * Normally you shouldn't need to override the setting except for - * debugging. To install, use 'pear install tidy' and add a line - * 'extension=tidy.so' to php.ini. + * The host should be running a daemon which can be obtained from MediaWiki + * Subversion at: http://svn.wikimedia.org/svnroot/mediawiki/trunk/udpprofile */ -$wgUseTidy = false; -$wgAlwaysUseTidy = false; -$wgTidyBin = 'tidy'; -$wgTidyConf = $IP.'/includes/tidy.conf'; -$wgTidyOpts = ''; -$wgTidyInternal = extension_loaded( 'tidy' ); +$wgUDPProfilerHost = '127.0.0.1'; /** - * Put tidy warnings in HTML comments - * Only works for internal tidy. + * Port for UDP profiler. + * @see $wgUDPProfilerHost */ -$wgDebugTidy = false; +$wgUDPProfilerPort = '3811'; -/** - * Validate the overall output using tidy and refuse - * to display the page if it's not valid. +/** Detects non-matching wfProfileIn/wfProfileOut calls */ +$wgDebugProfiling = false; + +/** Output debug message on every wfProfileIn/wfProfileOut */ +$wgDebugFunctionEntry = 0; + +/* + * Destination for wfIncrStats() data... + * 'cache' to go into the system cache, if enabled (memcached) + * 'udp' to be sent to the UDP profiler (see $wgUDPProfilerHost) + * false to disable */ -$wgValidateAllHtml = false; +$wgStatsMethod = 'cache'; -/** See list of skins and their symbolic names in languages/Language.php */ -$wgDefaultSkin = 'monobook'; +/** Whereas to count the number of time an article is viewed. + * Does not work if pages are cached (for example with squid). + */ +$wgDisableCounters = false; /** -* Should we allow the user's to select their own skin that will override the default? -* @deprecated in 1.16, use $wgHiddenPrefs[] = 'skin' to disable it -*/ -$wgAllowUserSkin = true; + * Support blog-style "trackbacks" for articles. See + * http://www.sixapart.com/pronet/docs/trackback_spec for details. + */ +$wgUseTrackbacks = false; /** - * Optionally, we can specify a stylesheet to use for media="handheld". - * This is recognized by some, but not all, handheld/mobile/PDA browsers. - * If left empty, compliant handheld browsers won't pick up the skin - * stylesheet, which is specified for 'screen' media. + * Parser test suite files to be run by parserTests.php when no specific + * filename is passed to it. * - * Can be a complete URL, base-relative path, or $wgStylePath-relative path. - * Try 'chick/main.css' to apply the Chick styles to the MonoBook HTML. + * Extensions may add their own tests to this array, or site-local tests + * may be added via LocalSettings.php * - * Will also be switched in when 'handheld=yes' is added to the URL, like - * the 'printable=yes' mode for print media. + * Use full paths. */ -$wgHandheldStyle = false; +$wgParserTestFiles = array( + "$IP/maintenance/tests/parser/parserTests.txt", + "$IP/maintenance/tests/parser/ExtraParserTests.txt" +); /** - * If set, 'screen' and 'handheld' media specifiers for stylesheets are - * transformed such that they apply to the iPhone/iPod Touch Mobile Safari, - * which doesn't recognize 'handheld' but does support media queries on its - * screen size. + * If configured, specifies target CodeReview installation to send test + * result data from 'parserTests.php --upload' * - * Consider only using this if you have a *really good* handheld stylesheet, - * as iPhone users won't have any way to disable it and use the "grown-up" - * styles instead. + * Something like this: + * $wgParserTestRemote = array( + * 'api-url' => 'http://www.mediawiki.org/w/api.php', + * 'repo' => 'MediaWiki', + * 'suite' => 'ParserTests', + * 'path' => '/trunk/phase3', // not used client-side; for reference + * 'secret' => 'qmoicj3mc4mcklmqw', // Shared secret used in HMAC validation + * ); */ -$wgHandheldForIPhone = false; +$wgParserTestRemote = false; -/** - * Settings added to this array will override the default globals for the user - * preferences used by anonymous visitors and newly created accounts. - * For instance, to disable section editing links: - * $wgDefaultUserOptions ['editsection'] = 0; - * +/** @} */ # end of profiling, testing and debugging } + +/************************************************************************//** + * @name Search + * @{ */ -$wgDefaultUserOptions = array( - 'quickbar' => 1, - 'underline' => 2, - 'cols' => 80, - 'rows' => 25, - 'searchlimit' => 20, - 'contextlines' => 5, - 'contextchars' => 50, - 'disablesuggest' => 0, - 'skin' => false, - 'math' => 1, - 'usenewrc' => 0, - 'rcdays' => 7, - 'rclimit' => 50, - 'wllimit' => 250, - 'hideminor' => 0, - 'hidepatrolled' => 0, - 'newpageshidepatrolled' => 0, - 'highlightbroken' => 1, - 'stubthreshold' => 0, - 'previewontop' => 1, - 'previewonfirst' => 0, - 'editsection' => 1, - 'editsectiononrightclick' => 0, - 'editondblclick' => 0, - 'editwidth' => 0, - 'showtoc' => 1, - 'showtoolbar' => 1, - 'minordefault' => 0, - 'date' => 'default', - 'imagesize' => 2, - 'thumbsize' => 2, - 'rememberpassword' => 0, - 'nocache' => 0, - 'diffonly' => 0, - 'showhiddencats' => 0, - 'norollbackdiff' => 0, - 'enotifwatchlistpages' => 0, - 'enotifusertalkpages' => 1, - 'enotifminoredits' => 0, - 'enotifrevealaddr' => 0, - 'shownumberswatching' => 1, - 'fancysig' => 0, - 'externaleditor' => 0, - 'externaldiff' => 0, - 'forceeditsummary' => 0, - 'showjumplinks' => 1, - 'justify' => 0, - 'numberheadings' => 0, - 'uselivepreview' => 0, - 'watchlistdays' => 3.0, - 'extendwatchlist' => 0, - 'watchlisthideminor' => 0, - 'watchlisthidebots' => 0, - 'watchlisthideown' => 0, - 'watchlisthideanons' => 0, - 'watchlisthideliu' => 0, - 'watchlisthidepatrolled' => 0, - 'watchcreations' => 0, - 'watchdefault' => 0, - 'watchmoves' => 0, - 'watchdeletion' => 0, - 'noconvertlink' => 0, - 'gender' => 'unknown', - 'ccmeonemails' => 0, - 'disablemail' => 0, - 'editfont' => 'default', -); /** - * Whether or not to allow and use real name fields. - * @deprecated in 1.16, use $wgHiddenPrefs[] = 'realname' below to disable real - * names + * Set this to true to disable the full text search feature. */ -$wgAllowRealName = true; - -/** An array of preferences to not show for the user */ -$wgHiddenPrefs = array(); +$wgDisableTextSearch = false; -/***************************************************************************** - * Extensions +/** + * Set to true to have nicer highligted text in search results, + * by default off due to execution overhead */ +$wgAdvancedSearchHighlighting = false; /** - * A list of callback functions which are called once MediaWiki is fully initialised + * Regexp to match word boundaries, defaults for non-CJK languages + * should be empty for CJK since the words are not separate + * + * @todo FIXME: checks for lower than required PHP version (5.1.x). */ -$wgExtensionFunctions = array(); +$wgSearchHighlightBoundaries = version_compare("5.1", PHP_VERSION, "<")? '[\p{Z}\p{P}\p{C}]' + : '[ ,.;:!?~!@#$%\^&*\(\)+=\-\\|\[\]"\'<>\n\r\/{}]'; // PHP 5.0 workaround /** - * Extension functions for initialisation of skins. This is called somewhat earlier - * than $wgExtensionFunctions. + * Set to true to have the search engine count total + * search matches to present in the Special:Search UI. + * Not supported by every search engine shipped with MW. + * + * This could however be slow on larger wikis, and is pretty flaky + * with the current title vs content split. Recommend avoiding until + * that's been worked out cleanly; but this may aid in testing the + * search UI and API to confirm that the result count works. */ -$wgSkinExtensionFunctions = array(); +$wgCountTotalSearchHits = false; /** - * Extension messages files. - * - * Associative array mapping extension name to the filename where messages can be - * found. The file should contain variable assignments. Any of the variables - * present in languages/messages/MessagesEn.php may be defined, but $messages - * is the most common. + * Template for OpenSearch suggestions, defaults to API action=opensearch * - * Variables defined in extensions will override conflicting variables defined - * in the core. + * Sites with heavy load would tipically have these point to a custom + * PHP wrapper to avoid firing up mediawiki for every keystroke * - * Example: - * $wgExtensionMessagesFiles['ConfirmEdit'] = dirname(__FILE__).'/ConfirmEdit.i18n.php'; + * Placeholders: {searchTerms} * */ -$wgExtensionMessagesFiles = array(); +$wgOpenSearchTemplate = false; /** - * Aliases for special pages provided by extensions. - * @deprecated Use $specialPageAliases in a file referred to by $wgExtensionMessagesFiles + * Enable suggestions while typing in search boxes + * (results are passed around in OpenSearch format) + * Requires $wgEnableOpenSearchSuggest = true; */ -$wgExtensionAliasesFiles = array(); +$wgEnableMWSuggest = false; /** - * Parser output hooks. - * This is an associative array where the key is an extension-defined tag - * (typically the extension name), and the value is a PHP callback. - * These will be called as an OutputPageParserOutput hook, if the relevant - * tag has been registered with the parser output object. - * - * Registration is done with $pout->addOutputHook( $tag, $data ). - * - * The callback has the form: - * function outputHook( $outputPage, $parserOutput, $data ) { ... } + * Enable OpenSearch suggestions requested by MediaWiki. Set this to + * false if you've disabled MWSuggest or another suggestion script and + * want reduce load caused by cached scripts pulling suggestions. */ -$wgParserOutputHooks = array(); +$wgEnableOpenSearchSuggest = true; /** - * List of valid skin names. - * The key should be the name in all lower case, the value should be a display name. - * The default skins will be added later, by Skin::getSkinNames(). Use - * Skin::getSkinNames() as an accessor if you wish to have access to the full list. + * Expiry time for search suggestion responses */ -$wgValidSkinNames = array(); +$wgSearchSuggestCacheExpiry = 1200; /** - * Special page list. - * See the top of SpecialPage.php for documentation. + * Template for internal MediaWiki suggestion engine, defaults to API action=opensearch + * + * Placeholders: {searchTerms}, {namespaces}, {dbname} + * */ -$wgSpecialPages = array(); +$wgMWSuggestTemplate = false; /** - * Array mapping class names to filenames, for autoloading. + * If you've disabled search semi-permanently, this also disables updates to the + * table. If you ever re-enable, be sure to rebuild the search table. */ -$wgAutoloadClasses = array(); +$wgDisableSearchUpdate = false; /** - * An array of extension types and inside that their names, versions, authors, - * urls, descriptions and pointers to localized description msgs. Note that - * the version, url, description and descriptionmsg key can be omitted. + * List of namespaces which are searched by default. Example: * * <code> - * $wgExtensionCredits[$type][] = array( - * 'name' => 'Example extension', - * 'version' => 1.9, - * 'path' => __FILE__, - * 'author' => 'Foo Barstein', - * 'url' => 'http://wwww.example.com/Example%20Extension/', - * 'description' => 'An example extension', - * 'descriptionmsg' => 'exampleextension-desc', - * ); + * $wgNamespacesToBeSearchedDefault[NS_MAIN] = true; + * $wgNamespacesToBeSearchedDefault[NS_PROJECT] = true; * </code> - * - * Where $type is 'specialpage', 'parserhook', 'variable', 'media' or 'other'. - * Where 'descriptionmsg' can be an array with message key and parameters: - * 'descriptionmsg' => array( 'exampleextension-desc', param1, param2, ... ), */ -$wgExtensionCredits = array(); -/* - * end extensions - ******************************************************************************/ +$wgNamespacesToBeSearchedDefault = array( + NS_MAIN => true, +); /** - * Allow user Javascript page? - * This enables a lot of neat customizations, but may - * increase security risk to users and server load. + * Namespaces to be searched when user clicks the "Help" tab + * on Special:Search + * + * Same format as $wgNamespacesToBeSearchedDefault */ -$wgAllowUserJs = false; +$wgNamespacesToBeSearchedHelp = array( + NS_PROJECT => true, + NS_HELP => true, +); /** - * Allow user Cascading Style Sheets (CSS)? - * This enables a lot of neat customizations, but may - * increase security risk to users and server load. + * If set to true the 'searcheverything' preference will be effective only for logged-in users. + * Useful for big wikis to maintain different search profiles for anonymous and logged-in users. + * */ -$wgAllowUserCss = false; - -/** Use the site's Javascript page? */ -$wgUseSiteJs = true; - -/** Use the site's Cascading Style Sheets (CSS)? */ -$wgUseSiteCss = true; +$wgSearchEverythingOnlyLoggedIn = false; /** - * Filter for Special:Randompage. Part of a WHERE clause - * @deprecated as of 1.16, use the SpecialRandomGetRandomTitle hook -*/ - -$wgExtraRandompageSQL = false; - -/** Allow the "info" action, very inefficient at the moment */ -$wgAllowPageInfo = false; - -/** Maximum indent level of toc. */ -$wgMaxTocLevel = 999; - -/** Name of the external diff engine to use */ -$wgExternalDiffEngine = false; - -/** Use RC Patrolling to check for vandalism */ -$wgUseRCPatrol = true; - -/** Use new page patrolling to check new pages on Special:Newpages */ -$wgUseNPPatrol = true; - -/** Provide syndication feeds (RSS, Atom) for, e.g., Recentchanges, Newpages */ -$wgFeed = true; - -/** Set maximum number of results to return in syndication feeds (RSS, Atom) for - * eg Recentchanges, Newpages. */ -$wgFeedLimit = 50; + * Disable the internal MySQL-based search, to allow it to be + * implemented by an extension instead. + */ +$wgDisableInternalSearch = false; -/** _Minimum_ timeout for cached Recentchanges feed, in seconds. - * A cached version will continue to be served out even if changes - * are made, until this many seconds runs out since the last render. +/** + * Set this to a URL to forward search requests to some external location. + * If the URL includes '$1', this will be replaced with the URL-encoded + * search term. * - * If set to 0, feed caching is disabled. Use this for debugging only; - * feed generation can be pretty slow with diffs. + * For example, to forward to Google you'd have something like: + * $wgSearchForwardUrl = 'http://www.google.com/search?q=$1' . + * '&domains=http://example.com' . + * '&sitesearch=http://example.com' . + * '&ie=utf-8&oe=utf-8'; */ -$wgFeedCacheTimeout = 60; - -/** When generating Recentchanges RSS/Atom feed, diffs will not be generated for - * pages larger than this size. */ -$wgFeedDiffCutoff = 32768; +$wgSearchForwardUrl = null; -/** Override the site's default RSS/ATOM feed for recentchanges that appears on - * every page. Some sites might have a different feed they'd like to promote - * instead of the RC feed (maybe like a "Recent New Articles" or "Breaking news" one). - * Ex: $wgSiteFeed['format'] = "http://example.com/somefeed.xml"; Format can be one - * of either 'rss' or 'atom'. +/** + * Search form behavior + * true = use Go & Search buttons + * false = use Go button & Advanced search link */ -$wgOverrideSiteFeed = array(); +$wgUseTwoButtonsSearchForm = true; /** - * Which feed types should we provide by default? This can include 'rss', - * 'atom', neither, or both. + * Array of namespaces to generate a Google sitemap for when the + * maintenance/generateSitemap.php script is run, or false if one is to be ge- + * nerated for all namespaces. */ -$wgAdvertisedFeedTypes = array( 'atom' ); +$wgSitemapNamespaces = false; -/** - * Additional namespaces. If the namespaces defined in Language.php and - * Namespace.php are insufficient, you can create new ones here, for example, - * to import Help files in other languages. - * PLEASE NOTE: Once you delete a namespace, the pages in that namespace will - * no longer be accessible. If you rename it, then you can access them through - * the new namespace name. - * - * Custom namespaces should start at 100 to avoid conflicting with standard - * namespaces, and should always follow the even/odd main/talk pattern. +/** @} */ # end of search settings + +/************************************************************************//** + * @name Edit user interface + * @{ */ -#$wgExtraNamespaces = -# array(100 => "Hilfe", -# 101 => "Hilfe_Diskussion", -# 102 => "Aide", -# 103 => "Discussion_Aide" -# ); -$wgExtraNamespaces = null; /** - * Namespace aliases - * These are alternate names for the primary localised namespace names, which - * are defined by $wgExtraNamespaces and the language file. If a page is - * requested with such a prefix, the request will be redirected to the primary - * name. - * - * Set this to a map from namespace names to IDs. - * Example: - * $wgNamespaceAliases = array( - * 'Wikipedian' => NS_USER, - * 'Help' => 100, - * ); + * Path to the GNU diff3 utility. If the file doesn't exist, edit conflicts will + * fall back to the old behaviour (no merging). */ -$wgNamespaceAliases = array(); +$wgDiff3 = '/usr/bin/diff3'; /** - * Limit images on image description pages to a user-selectable limit. In order - * to reduce disk usage, limits can only be selected from a list. - * The user preference is saved as an array offset in the database, by default - * the offset is set with $wgDefaultUserOptions['imagesize']. Make sure you - * change it if you alter the array (see bug 8858). - * This is the list of settings the user can choose from: + * Path to the GNU diff utility. */ -$wgImageLimits = array ( - array(320,240), - array(640,480), - array(800,600), - array(1024,768), - array(1280,1024), - array(10000,10000) ); +$wgDiff = '/usr/bin/diff'; /** - * Adjust thumbnails on image pages according to a user setting. In order to - * reduce disk usage, the values can only be selected from a list. This is the - * list of settings the user can choose from: + * Which namespaces have special treatment where they should be preview-on-open + * Internaly only Category: pages apply, but using this extensions (e.g. Semantic MediaWiki) + * can specify namespaces of pages they have special treatment for */ -$wgThumbLimits = array( - 120, - 150, - 180, - 200, - 250, - 300 +$wgPreviewOnOpenNamespaces = array( + NS_CATEGORY => true ); /** - * Adjust width of upright images when parameter 'upright' is used - * This allows a nicer look for upright images without the need to fix the width - * by hardcoded px in wiki sourcecode. + * Activate external editor interface for files and pages + * See http://www.mediawiki.org/wiki/Manual:External_editors */ -$wgThumbUpright = 0.75; +$wgUseExternalEditor = true; + +/** Go button goes straight to the edit screen if the article doesn't exist. */ +$wgGoToEdit = false; /** - * On category pages, show thumbnail gallery for images belonging to that - * category instead of listing them as articles. + * Enable the UniversalEditButton for browsers that support it + * (currently only Firefox with an extension) + * See http://universaleditbutton.org for more background information */ -$wgCategoryMagicGallery = true; +$wgUniversalEditButton = true; /** - * Paging limit for categories + * If user doesn't specify any edit summary when making a an edit, MediaWiki + * will try to automatically create one. This feature can be disabled by set- + * ting this variable false. */ -$wgCategoryPagingLimit = 200; +$wgUseAutomaticEditSummaries = true; -/** - * Should the default category sortkey be the prefixed title? - * Run maintenance/refreshLinks.php after changing this. +/** @} */ # end edit UI } + +/************************************************************************//** + * @name Maintenance + * See also $wgSiteNotice + * @{ */ -$wgCategoryPrefixedDefaultSortkey = true; /** - * Browser Blacklist for unicode non compliant browsers - * Contains a list of regexps : "/regexp/" matching problematic browsers + * @cond file_level_code + * Set $wgCommandLineMode if it's not set already, to avoid notices */ -$wgBrowserBlackList = array( - /** - * Netscape 2-4 detection - * The minor version may contain strings such as "Gold" or "SGoldC-SGI" - * Lots of non-netscape user agents have "compatible", so it's useful to check for that - * with a negative assertion. The [UIN] identifier specifies the level of security - * in a Netscape/Mozilla browser, checking for it rules out a number of fakers. - * The language string is unreliable, it is missing on NS4 Mac. - * - * Reference: http://www.psychedelix.com/agents/index.shtml - */ - '/^Mozilla\/2\.[^ ]+ [^(]*?\((?!compatible).*; [UIN]/', - '/^Mozilla\/3\.[^ ]+ [^(]*?\((?!compatible).*; [UIN]/', - '/^Mozilla\/4\.[^ ]+ [^(]*?\((?!compatible).*; [UIN]/', - - /** - * MSIE on Mac OS 9 is teh sux0r, converts þ to <thorn>, ð to <eth>, Þ to <THORN> and Ð to <ETH> - * - * Known useragents: - * - Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC) - * - Mozilla/4.0 (compatible; MSIE 5.15; Mac_PowerPC) - * - Mozilla/4.0 (compatible; MSIE 5.23; Mac_PowerPC) - * - [...] - * - * @link http://en.wikipedia.org/w/index.php?title=User%3A%C6var_Arnfj%F6r%F0_Bjarmason%2Ftestme&diff=12356041&oldid=12355864 - * @link http://en.wikipedia.org/wiki/Template%3AOS9 - */ - '/^Mozilla\/4\.0 \(compatible; MSIE \d+\.\d+; Mac_PowerPC\)/', +if( !isset( $wgCommandLineMode ) ) { + $wgCommandLineMode = false; +} +/** @endcond */ - /** - * Google wireless transcoder, seems to eat a lot of chars alive - * http://it.wikipedia.org/w/index.php?title=Luciano_Ligabue&diff=prev&oldid=8857361 - */ - '/^Mozilla\/4\.0 \(compatible; MSIE 6.0; Windows NT 5.0; Google Wireless Transcoder;\)/' -); +/** For colorized maintenance script output, is your terminal background dark ? */ +$wgCommandLineDarkBg = false; /** - * Fake out the timezone that the server thinks it's in. This will be used for - * date display and not for what's stored in the DB. Leave to null to retain - * your server's OS-based timezone value. - * - * This variable is currently used only for signature formatting and for local - * time/date parser variables ({{LOCALTIME}} etc.) - * - * Timezones can be translated by editing MediaWiki messages of type - * timezone-nameinlowercase like timezone-utc. + * Array for extensions to register their maintenance scripts with the + * system. The key is the name of the class and the value is the full + * path to the file */ -# $wgLocaltimezone = 'GMT'; -# $wgLocaltimezone = 'PST8PDT'; -# $wgLocaltimezone = 'Europe/Sweden'; -# $wgLocaltimezone = 'CET'; -$wgLocaltimezone = null; +$wgMaintenanceScripts = array(); /** - * Set an offset from UTC in minutes to use for the default timezone setting - * for anonymous users and new user accounts. - * - * This setting is used for most date/time displays in the software, and is - * overrideable in user preferences. It is *not* used for signature timestamps. - * - * You can set it to match the configured server timezone like this: - * $wgLocalTZoffset = date("Z") / 60; - * - * If your server is not configured for the timezone you want, you can set - * this in conjunction with the signature timezone and override the PHP default - * timezone like so: - * $wgLocaltimezone="Europe/Berlin"; - * date_default_timezone_set( $wgLocaltimezone ); - * $wgLocalTZoffset = date("Z") / 60; + * Set this to a string to put the wiki into read-only mode. The text will be + * used as an explanation to users. * - * Leave at NULL to show times in universal time (UTC/GMT). + * This prevents most write operations via the web interface. Cache updates may + * still be possible. To prevent database writes completely, use the read_only + * option in MySQL. */ -$wgLocalTZoffset = null; - +$wgReadOnly = null; /** - * When translating messages with wfMsg(), it is not always clear what should - * be considered UI messages and what should be content messages. - * - * For example, for the English Wikipedia, there should be only one 'mainpage', - * so when getting the link for 'mainpage', we should treat it as site content - * and call wfMsgForContent(), but for rendering the text of the link, we call - * wfMsg(). The code behaves this way by default. However, sites like the - * Wikimedia Commons do offer different versions of 'mainpage' and the like for - * different languages. This array provides a way to override the default - * behavior. For example, to allow language-specific main page and community - * portal, set + * If this lock file exists (size > 0), the wiki will be forced into read-only mode. + * Its contents will be shown to users as part of the read-only warning + * message. * - * $wgForceUIMsgAsContentMsg = array( 'mainpage', 'portal-url' ); + * Defaults to "{$wgUploadDirectory}/lock_yBgMBwiR". */ -$wgForceUIMsgAsContentMsg = array(); - +$wgReadOnlyFile = false; /** - * Authentication plugin. + * When you run the web-based upgrade utility, it will tell you what to set + * this to in order to authorize the upgrade process. It will subsequently be + * used as a password, to authorize further upgrades. + * + * For security, do not set this to a guessable string. Use the value supplied + * by the install/upgrade process. To cause the upgrader to generate a new key, + * delete the old key from LocalSettings.php. */ -$wgAuth = null; +$wgUpgradeKey = false; -/** - * Global list of hooks. - * Add a hook by doing: - * $wgHooks['event_name'][] = $function; - * or: - * $wgHooks['event_name'][] = array($function, $data); - * or: - * $wgHooks['event_name'][] = array($object, 'method'); +/** @} */ # End of maintenance } + +/************************************************************************//** + * @name Recent changes, new pages, watchlist and history + * @{ */ -$wgHooks = array(); /** - * The logging system has two levels: an event type, which describes the - * general category and can be viewed as a named subset of all logs; and - * an action, which is a specific kind of event that can exist in that - * log type. + * Recentchanges items are periodically purged; entries older than this many + * seconds will go. + * Default: 13 weeks = about three months */ -$wgLogTypes = array( '', - 'block', - 'protect', - 'rights', - 'delete', - 'upload', - 'move', - 'import', - 'patrol', - 'merge', - 'suppress', -); +$wgRCMaxAge = 13 * 7 * 24 * 3600; /** - * This restricts log access to those who have a certain right - * Users without this will not see it in the option menu and can not view it - * Restricted logs are not added to recent changes - * Logs should remain non-transcludable - * Format: logtype => permissiontype + * Filter $wgRCLinkDays by $wgRCMaxAge to avoid showing links for numbers + * higher than what will be stored. Note that this is disabled by default + * because we sometimes do have RC data which is beyond the limit for some + * reason, and some users may use the high numbers to display that data which + * is still there. */ -$wgLogRestrictions = array( - 'suppress' => 'suppressionlog' -); +$wgRCFilterByAge = false; /** - * Show/hide links on Special:Log will be shown for these log types. - * - * This is associative array of log type => boolean "hide by default" - * - * See $wgLogTypes for a list of available log types. - * - * For example: - * $wgFilterLogTypes => array( - * 'move' => true, - * 'import' => false, - * ); - * - * Will display show/hide links for the move and import logs. Move logs will be - * hidden by default unless the link is clicked. Import logs will be shown by - * default, and hidden when the link is clicked. - * - * A message of the form log-show-hide-<type> should be added, and will be used - * for the link text. + * List of Days and Limits options to list in the Special:Recentchanges and + * Special:Recentchangeslinked pages. */ -$wgFilterLogTypes = array( - 'patrol' => true -); +$wgRCLinkLimits = array( 50, 100, 250, 500 ); +$wgRCLinkDays = array( 1, 3, 7, 14, 30 ); /** - * Lists the message key string for each log type. The localized messages - * will be listed in the user interface. - * - * Extensions with custom log types may add to this array. + * Send recent changes updates via UDP. The updates will be formatted for IRC. + * Set this to the IP address of the receiver. */ -$wgLogNames = array( - '' => 'all-logs-page', - 'block' => 'blocklogpage', - 'protect' => 'protectlogpage', - 'rights' => 'rightslog', - 'delete' => 'dellogpage', - 'upload' => 'uploadlogpage', - 'move' => 'movelogpage', - 'import' => 'importlogpage', - 'patrol' => 'patrol-log-page', - 'merge' => 'mergelog', - 'suppress' => 'suppressionlog', -); +$wgRC2UDPAddress = false; /** - * Lists the message key string for descriptive text to be shown at the - * top of each log type. - * - * Extensions with custom log types may add to this array. + * Port number for RC updates */ -$wgLogHeaders = array( - '' => 'alllogstext', - 'block' => 'blocklogtext', - 'protect' => 'protectlogtext', - 'rights' => 'rightslogtext', - 'delete' => 'dellogpagetext', - 'upload' => 'uploadlogpagetext', - 'move' => 'movelogpagetext', - 'import' => 'importlogpagetext', - 'patrol' => 'patrol-log-header', - 'merge' => 'mergelogpagetext', - 'suppress' => 'suppressionlogtext', -); +$wgRC2UDPPort = false; /** - * Lists the message key string for formatting individual events of each - * type and action when listed in the logs. - * - * Extensions with custom log types may add to this array. + * Prefix to prepend to each UDP packet. + * This can be used to identify the wiki. A script is available called + * mxircecho.py which listens on a UDP port, and uses a prefix ending in a + * tab to identify the IRC channel to send the log line to. */ -$wgLogActions = array( - 'block/block' => 'blocklogentry', - 'block/unblock' => 'unblocklogentry', - 'block/reblock' => 'reblock-logentry', - 'protect/protect' => 'protectedarticle', - 'protect/modify' => 'modifiedarticleprotection', - 'protect/unprotect' => 'unprotectedarticle', - 'protect/move_prot' => 'movedarticleprotection', - 'rights/rights' => 'rightslogentry', - 'delete/delete' => 'deletedarticle', - 'delete/restore' => 'undeletedarticle', - 'delete/revision' => 'revdelete-logentry', - 'delete/event' => 'logdelete-logentry', - 'upload/upload' => 'uploadedimage', - 'upload/overwrite' => 'overwroteimage', - 'upload/revert' => 'uploadedimage', - 'move/move' => '1movedto2', - 'move/move_redir' => '1movedto2_redir', - 'import/upload' => 'import-logentry-upload', - 'import/interwiki' => 'import-logentry-interwiki', - 'merge/merge' => 'pagemerge-logentry', - 'suppress/revision' => 'revdelete-logentry', - 'suppress/file' => 'revdelete-logentry', - 'suppress/event' => 'logdelete-logentry', - 'suppress/delete' => 'suppressedarticle', - 'suppress/block' => 'blocklogentry', - 'suppress/reblock' => 'reblock-logentry', -); +$wgRC2UDPPrefix = ''; /** - * The same as above, but here values are names of functions, - * not messages + * If this is set to true, $wgLocalInterwiki will be prepended to links in the + * IRC feed. If this is set to a string, that string will be used as the prefix. */ -$wgLogActionsHandlers = array(); +$wgRC2UDPInterwikiPrefix = false; /** - * Maintain a log of newusers at Log/newusers? + * Set to true to omit "bot" edits (by users with the bot permission) from the + * UDP feed. */ -$wgNewUserLog = true; +$wgRC2UDPOmitBots = false; /** - * List of special pages, followed by what subtitle they should go under - * at Special:SpecialPages + * Enable user search in Special:Newpages + * This is really a temporary hack around an index install bug on some Wikipedias. + * Kill it once fixed. */ -$wgSpecialPageGroups = array( - 'DoubleRedirects' => 'maintenance', - 'BrokenRedirects' => 'maintenance', - 'Lonelypages' => 'maintenance', - 'Uncategorizedpages' => 'maintenance', - 'Uncategorizedcategories' => 'maintenance', - 'Uncategorizedimages' => 'maintenance', - 'Uncategorizedtemplates' => 'maintenance', - 'Unusedcategories' => 'maintenance', - 'Unusedimages' => 'maintenance', - 'Protectedpages' => 'maintenance', - 'Protectedtitles' => 'maintenance', - 'Unusedtemplates' => 'maintenance', - 'Withoutinterwiki' => 'maintenance', - 'Longpages' => 'maintenance', - 'Shortpages' => 'maintenance', - 'Ancientpages' => 'maintenance', - 'Deadendpages' => 'maintenance', - 'Wantedpages' => 'maintenance', - 'Wantedcategories' => 'maintenance', - 'Wantedfiles' => 'maintenance', - 'Wantedtemplates' => 'maintenance', - 'Unwatchedpages' => 'maintenance', - 'Fewestrevisions' => 'maintenance', +$wgEnableNewpagesUserFilter = true; - 'Userlogin' => 'login', - 'Userlogout' => 'login', - 'CreateAccount' => 'login', +/** Use RC Patrolling to check for vandalism */ +$wgUseRCPatrol = true; - 'Recentchanges' => 'changes', - 'Recentchangeslinked' => 'changes', - 'Watchlist' => 'changes', - 'Newimages' => 'changes', - 'Newpages' => 'changes', - 'Log' => 'changes', - 'Tags' => 'changes', +/** Use new page patrolling to check new pages on Special:Newpages */ +$wgUseNPPatrol = true; - 'Upload' => 'media', - 'Listfiles' => 'media', - 'MIMEsearch' => 'media', - 'FileDuplicateSearch' => 'media', - 'Filepath' => 'media', +/** Provide syndication feeds (RSS, Atom) for, e.g., Recentchanges, Newpages */ +$wgFeed = true; - 'Listusers' => 'users', - 'Activeusers' => 'users', - 'Listgrouprights' => 'users', - 'Ipblocklist' => 'users', - 'Contributions' => 'users', - 'Emailuser' => 'users', - 'Listadmins' => 'users', - 'Listbots' => 'users', - 'Userrights' => 'users', - 'Blockip' => 'users', - 'Preferences' => 'users', - 'Resetpass' => 'users', - 'DeletedContributions' => 'users', +/** Set maximum number of results to return in syndication feeds (RSS, Atom) for + * eg Recentchanges, Newpages. */ +$wgFeedLimit = 50; - 'Mostlinked' => 'highuse', - 'Mostlinkedcategories' => 'highuse', - 'Mostlinkedtemplates' => 'highuse', - 'Mostcategories' => 'highuse', - 'Mostimages' => 'highuse', - 'Mostrevisions' => 'highuse', +/** _Minimum_ timeout for cached Recentchanges feed, in seconds. + * A cached version will continue to be served out even if changes + * are made, until this many seconds runs out since the last render. + * + * If set to 0, feed caching is disabled. Use this for debugging only; + * feed generation can be pretty slow with diffs. + */ +$wgFeedCacheTimeout = 60; - 'Allpages' => 'pages', - 'Prefixindex' => 'pages', - 'Listredirects' => 'pages', - 'Categories' => 'pages', - 'Disambiguations' => 'pages', +/** When generating Recentchanges RSS/Atom feed, diffs will not be generated for + * pages larger than this size. */ +$wgFeedDiffCutoff = 32768; - 'Randompage' => 'redirects', - 'Randomredirect' => 'redirects', - 'Mypage' => 'redirects', - 'Mytalk' => 'redirects', - 'Mycontributions' => 'redirects', - 'Search' => 'redirects', - 'LinkSearch' => 'redirects', +/** Override the site's default RSS/ATOM feed for recentchanges that appears on + * every page. Some sites might have a different feed they'd like to promote + * instead of the RC feed (maybe like a "Recent New Articles" or "Breaking news" one). + * Ex: $wgSiteFeed['format'] = "http://example.com/somefeed.xml"; Format can be one + * of either 'rss' or 'atom'. + */ +$wgOverrideSiteFeed = array(); - 'Movepage' => 'pagetools', - 'MergeHistory' => 'pagetools', - 'Revisiondelete' => 'pagetools', - 'Undelete' => 'pagetools', - 'Export' => 'pagetools', - 'Import' => 'pagetools', - 'Whatlinkshere' => 'pagetools', +/** + * Which feed types should we provide by default? This can include 'rss', + * 'atom', neither, or both. + */ +$wgAdvertisedFeedTypes = array( 'atom' ); - 'Statistics' => 'wiki', - 'Version' => 'wiki', - 'Lockdb' => 'wiki', - 'Unlockdb' => 'wiki', - 'Allmessages' => 'wiki', - 'Popularpages' => 'wiki', +/** Show watching users in recent changes, watchlist and page history views */ +$wgRCShowWatchingUsers = false; # UPO +/** Show watching users in Page views */ +$wgPageShowWatchingUsers = false; +/** Show the amount of changed characters in recent changes */ +$wgRCShowChangedSize = true; - 'Specialpages' => 'other', - 'Blockme' => 'other', - 'Booksources' => 'other', -); +/** + * If the difference between the character counts of the text + * before and after the edit is below that value, the value will be + * highlighted on the RC page. + */ +$wgRCChangedSizeThreshold = 500; /** - * Disable the internal MySQL-based search, to allow it to be - * implemented by an extension instead. + * Show "Updated (since my last visit)" marker in RC view, watchlist and history + * view for watched pages with new changes */ +$wgShowUpdatedMarker = true; + +/** + * Disable links to talk pages of anonymous users (IPs) in listings on special + * pages like page history, Special:Recentchanges, etc. */ -$wgDisableInternalSearch = false; +$wgDisableAnonTalk = false; /** - * Set this to a URL to forward search requests to some external location. - * If the URL includes '$1', this will be replaced with the URL-encoded - * search term. - * - * For example, to forward to Google you'd have something like: - * $wgSearchForwardUrl = 'http://www.google.com/search?q=$1' . - * '&domains=http://example.com' . - * '&sitesearch=http://example.com' . - * '&ie=utf-8&oe=utf-8'; + * Enable filtering of categories in Recentchanges */ -$wgSearchForwardUrl = null; +$wgAllowCategorizedRecentChanges = false; /** - * Set a default target for external links, e.g. _blank to pop up a new window + * Allow filtering by change tag in recentchanges, history, etc + * Has no effect if no tags are defined in valid_tag. */ -$wgExternalLinkTarget = false; +$wgUseTagFilter = true; + +/** @} */ # end RC/watchlist } + +/************************************************************************//** + * @name Copyright and credits settings + * @{ + */ + +/** RDF metadata toggles */ +$wgEnableDublinCoreRdf = false; +$wgEnableCreativeCommonsRdf = false; + +/** Override for copyright metadata. + * TODO: these options need documentation + */ +$wgRightsPage = null; +$wgRightsUrl = null; +$wgRightsText = null; +$wgRightsIcon = null; /** - * If true, external URL links in wiki text will be given the - * rel="nofollow" attribute as a hint to search engines that - * they should not be followed for ranking purposes as they - * are user-supplied and thus subject to spamming. + * Set to an array of metadata terms. Else they will be loaded based on $wgRightsUrl */ -$wgNoFollowLinks = true; +$wgLicenseTerms = false; /** - * Namespaces in which $wgNoFollowLinks doesn't apply. - * See Language.php for a list of namespaces. + * Set this to some HTML to override the rights icon with an arbitrary logo + * @deprecated Use $wgFooterIcons['copyright']['copyright'] */ -$wgNoFollowNsExceptions = array(); +$wgCopyrightIcon = null; + +/** Set this to true if you want detailed copyright information forms on Upload. */ +$wgUseCopyrightUpload = false; + +/** Set this to false if you want to disable checking that detailed copyright + * information values are not empty. */ +$wgCheckCopyrightUpload = true; /** - * If this is set to an array of domains, external links to these domain names - * (or any subdomains) will not be set to rel="nofollow" regardless of the - * value of $wgNoFollowLinks. For instance: + * Set this to the number of authors that you want to be credited below an + * article text. Set it to zero to hide the attribution block, and a negative + * number (like -1) to show all authors. Note that this will require 2-3 extra + * database hits, which can have a not insignificant impact on performance for + * large wikis. + */ +$wgMaxCredits = 0; + +/** If there are more than $wgMaxCredits authors, show $wgMaxCredits of them. + * Otherwise, link to a separate credits page. */ +$wgShowCreditsIfMax = true; + +/** @} */ # end of copyright and credits settings } + +/************************************************************************//** + * @name Import / Export + * @{ + */ + +/** + * List of interwiki prefixes for wikis we'll accept as sources for + * Special:Import (for sysops). Since complete page history can be imported, + * these should be 'trusted'. * - * $wgNoFollowDomainExceptions = array( 'en.wikipedia.org', 'wiktionary.org' ); + * If a user has the 'import' permission but not the 'importupload' permission, + * they will only be able to run imports through this transwiki interface. + */ +$wgImportSources = array(); + +/** + * Optional default target namespace for interwiki imports. + * Can use this to create an incoming "transwiki"-style queue. + * Set to numeric key, not the name. * - * This would add rel="nofollow" to links to de.wikipedia.org, but not - * en.wikipedia.org, wiktionary.org, en.wiktionary.org, us.en.wikipedia.org, - * etc. + * Users may override this in the Special:Import dialog. */ -$wgNoFollowDomainExceptions = array(); +$wgImportTargetNamespace = null; /** - * Default robot policy. The default policy is to encourage indexing and fol- - * lowing of links. It may be overridden on a per-namespace and/or per-page - * basis. + * If set to false, disables the full-history option on Special:Export. + * This is currently poorly optimized for long edit histories, so is + * disabled on Wikimedia's sites. + */ +$wgExportAllowHistory = true; + +/** + * If set nonzero, Special:Export requests for history of pages with + * more revisions than this will be rejected. On some big sites things + * could get bogged down by very very long pages. */ -$wgDefaultRobotPolicy = 'index,follow'; +$wgExportMaxHistory = 0; /** - * Robot policies per namespaces. The default policy is given above, the array - * is made of namespace constants as defined in includes/Defines.php. You can- - * not specify a different default policy for NS_SPECIAL: it is always noindex, - * nofollow. This is because a number of special pages (e.g., ListPages) have - * many permutations of options that display the same data under redundant - * URLs, so search engine spiders risk getting lost in a maze of twisty special - * pages, all alike, and never reaching your actual content. +* Return distinct author list (when not returning full history) +*/ +$wgExportAllowListContributors = false ; + +/** + * If non-zero, Special:Export accepts a "pagelink-depth" parameter + * up to this specified level, which will cause it to include all + * pages linked to from the pages you specify. Since this number + * can become *insanely large* and could easily break your wiki, + * it's disabled by default for now. * - * Example: - * $wgNamespaceRobotPolicies = array( NS_TALK => 'noindex' ); + * There's a HARD CODED limit of 5 levels of recursion to prevent a + * crazy-big export from being done by someone setting the depth + * number too high. In other words, last resort safety net. */ -$wgNamespaceRobotPolicies = array(); +$wgExportMaxLinkDepth = 0; /** - * Robot policies per article. These override the per-namespace robot policies. - * Must be in the form of an array where the key part is a properly canonical- - * ised text form title and the value is a robot policy. - * Example: - * $wgArticleRobotPolicies = array( 'Main Page' => 'noindex,follow', - * 'User:Bob' => 'index,follow' ); - * Example that DOES NOT WORK because the names are not canonical text forms: - * $wgArticleRobotPolicies = array( - * # Underscore, not space! - * 'Main_Page' => 'noindex,follow', - * # "Project", not the actual project name! - * 'Project:X' => 'index,follow', - * # Needs to be "Abc", not "abc" (unless $wgCapitalLinks is false for that namespace)! - * 'abc' => 'noindex,nofollow' - * ); +* Whether to allow the "export all pages in namespace" option +*/ +$wgExportFromNamespaces = false; + +/** @} */ # end of import/export } + +/*************************************************************************//** + * @name Extensions + * @{ */ -$wgArticleRobotPolicies = array(); /** - * An array of namespace keys in which the __INDEX__/__NOINDEX__ magic words - * will not function, so users can't decide whether pages in that namespace are - * indexed by search engines. If set to null, default to $wgContentNamespaces. - * Example: - * $wgExemptFromUserRobotsControl = array( NS_MAIN, NS_TALK, NS_PROJECT ); + * A list of callback functions which are called once MediaWiki is fully initialised */ -$wgExemptFromUserRobotsControl = null; +$wgExtensionFunctions = array(); /** - * Specifies the minimal length of a user password. If set to 0, empty pass- - * words are allowed. + * Extension functions for initialisation of skins. This is called somewhat earlier + * than $wgExtensionFunctions. */ -$wgMinimalPasswordLength = 1; +$wgSkinExtensionFunctions = array(); /** - * Activate external editor interface for files and pages - * See http://www.mediawiki.org/wiki/Manual:External_editors + * Extension messages files. + * + * Associative array mapping extension name to the filename where messages can be + * found. The file should contain variable assignments. Any of the variables + * present in languages/messages/MessagesEn.php may be defined, but $messages + * is the most common. + * + * Variables defined in extensions will override conflicting variables defined + * in the core. + * + * Example: + * $wgExtensionMessagesFiles['ConfirmEdit'] = dirname(__FILE__).'/ConfirmEdit.i18n.php'; + * */ -$wgUseExternalEditor = true; - -/** Whether or not to sort special pages in Special:Specialpages */ - -$wgSortSpecialPages = true; +$wgExtensionMessagesFiles = array(); /** - * Specify the name of a skin that should not be presented in the list of a- - * vailable skins. Use for blacklisting a skin which you do not want to remove - * from the .../skins/ directory + * Aliases for special pages provided by extensions. + * @deprecated Use $specialPageAliases in a file referred to by $wgExtensionMessagesFiles */ -$wgSkipSkin = ''; -$wgSkipSkins = array(); # More of the same +$wgExtensionAliasesFiles = array(); /** - * Array of disabled article actions, e.g. view, edit, dublincore, delete, etc. + * Parser output hooks. + * This is an associative array where the key is an extension-defined tag + * (typically the extension name), and the value is a PHP callback. + * These will be called as an OutputPageParserOutput hook, if the relevant + * tag has been registered with the parser output object. + * + * Registration is done with $pout->addOutputHook( $tag, $data ). + * + * The callback has the form: + * function outputHook( $outputPage, $parserOutput, $data ) { ... } */ -$wgDisabledActions = array(); +$wgParserOutputHooks = array(); /** - * Disable redirects to special pages and interwiki redirects, which use a 302 - * and have no "redirected from" link. + * List of valid skin names. + * The key should be the name in all lower case, the value should be a display name. + * The default skins will be added later, by Skin::getSkinNames(). Use + * Skin::getSkinNames() as an accessor if you wish to have access to the full list. */ -$wgDisableHardRedirects = false; +$wgValidSkinNames = array(); /** - * Set to false to disable application of access keys and tooltips, - * eg to avoid keyboard conflicts with system keys or as a low-level - * optimization. + * Special page list. + * See the top of SpecialPage.php for documentation. */ -$wgEnableTooltipsAndAccesskeys = true; +$wgSpecialPages = array(); /** - * Whether to use DNS blacklists in $wgDnsBlacklistUrls to check for open proxies - * @since 1.16 + * Array mapping class names to filenames, for autoloading. */ -$wgEnableDnsBlacklist = false; +$wgAutoloadClasses = array(); /** - * @deprecated Use $wgEnableDnsBlacklist instead, only kept for backward - * compatibility + * An array of extension types and inside that their names, versions, authors, + * urls, descriptions and pointers to localized description msgs. Note that + * the version, url, description and descriptionmsg key can be omitted. + * + * <code> + * $wgExtensionCredits[$type][] = array( + * 'name' => 'Example extension', + * 'version' => 1.9, + * 'path' => __FILE__, + * 'author' => 'Foo Barstein', + * 'url' => 'http://wwww.example.com/Example%20Extension/', + * 'description' => 'An example extension', + * 'descriptionmsg' => 'exampleextension-desc', + * ); + * </code> + * + * Where $type is 'specialpage', 'parserhook', 'variable', 'media' or 'other'. + * Where 'descriptionmsg' can be an array with message key and parameters: + * 'descriptionmsg' => array( 'exampleextension-desc', param1, param2, ... ), */ -$wgEnableSorbs = false; +$wgExtensionCredits = array(); /** - * List of DNS blacklists to use, if $wgEnableDnsBlacklist is true - * @since 1.16 + * Authentication plugin. */ -$wgDnsBlacklistUrls = array( 'http.dnsbl.sorbs.net.' ); +$wgAuth = null; /** - * @deprecated Use $wgDnsBlacklistUrls instead, only kept for backward - * compatibility + * Global list of hooks. + * Add a hook by doing: + * $wgHooks['event_name'][] = $function; + * or: + * $wgHooks['event_name'][] = array($function, $data); + * or: + * $wgHooks['event_name'][] = array($object, 'method'); */ -$wgSorbsUrl = array(); +$wgHooks = array(); /** - * Proxy whitelist, list of addresses that are assumed to be non-proxy despite - * what the other methods might say. + * Maps jobs to their handling classes; extensions + * can add to this to provide custom jobs */ -$wgProxyWhitelist = array(); +$wgJobClasses = array( + 'refreshLinks' => 'RefreshLinksJob', + 'refreshLinks2' => 'RefreshLinksJob2', + 'htmlCacheUpdate' => 'HTMLCacheUpdateJob', + 'html_cache_update' => 'HTMLCacheUpdateJob', // backwards-compatible + 'sendMail' => 'EmaillingJob', + 'enotifNotify' => 'EnotifNotifyJob', + 'fixDoubleRedirect' => 'DoubleRedirectJob', + 'uploadFromUrl' => 'UploadFromUrlJob', +); /** - * Simple rate limiter options to brake edit floods. Maximum number actions - * allowed in the given number of seconds; after that the violating client re- - * ceives HTTP 500 error pages until the period elapses. - * - * array( 4, 60 ) for a maximum of 4 hits in 60 seconds. - * - * This option set is experimental and likely to change. Requires memcached. + * Additional functions to be performed with updateSpecialPages. + * Expensive Querypages are already updated. */ -$wgRateLimits = array( - 'edit' => array( - 'anon' => null, // for any and all anonymous edits (aggregate) - 'user' => null, // for each logged-in user - 'newbie' => null, // for each recent (autoconfirmed) account; overrides 'user' - 'ip' => null, // for each anon and recent account - 'subnet' => null, // ... with final octet removed - ), - 'move' => array( - 'user' => null, - 'newbie' => null, - 'ip' => null, - 'subnet' => null, - ), - 'mailpassword' => array( - 'anon' => null, - ), - 'emailuser' => array( - 'user' => null, - ), - ); +$wgSpecialPageCacheUpdates = array( + 'Statistics' => array('SiteStatsUpdate','cacheUpdate') +); /** - * Set to a filename to log rate limiter hits. + * Hooks that are used for outputting exceptions. Format is: + * $wgExceptionHooks[] = $funcname + * or: + * $wgExceptionHooks[] = array( $class, $funcname ) + * Hooks should return strings or false */ -$wgRateLimitLog = null; +$wgExceptionHooks = array(); + /** - * Array of groups which should never trigger the rate limiter - * - * @deprecated as of 1.13.0, the preferred method is using - * $wgGroupPermissions[]['noratelimit']. However, this will still - * work if desired. - * - * $wgRateLimitsExcludedGroups = array( 'sysop', 'bureaucrat' ); + * Page property link table invalidation lists. When a page property + * changes, this may require other link tables to be updated (eg + * adding __HIDDENCAT__ means the hiddencat tracking category will + * have been added, so the categorylinks table needs to be rebuilt). + * This array can be added to by extensions. */ -$wgRateLimitsExcludedGroups = array(); +$wgPagePropLinkInvalidations = array( + 'hiddencat' => 'categorylinks', +); -/** - * Array of IPs which should be excluded from rate limits. - * This may be useful for whitelisting NAT gateways for conferences, etc. +/** @} */ # End extensions } + +/*************************************************************************//** + * @name Categories + * @{ */ -$wgRateLimitsExcludedIPs = array(); /** - * On Special:Unusedimages, consider images "used", if they are put - * into a category. Default (false) is not to count those as used. + * Use experimental, DMOZ-like category browser */ -$wgCountCategorizedImagesAsUsed = false; +$wgUseCategoryBrowser = false; /** - * External stores allow including content - * from non database sources following URL links - * - * Short names of ExternalStore classes may be specified in an array here: - * $wgExternalStores = array("http","file","custom")... - * - * CAUTION: Access to database might lead to code execution + * On category pages, show thumbnail gallery for images belonging to that + * category instead of listing them as articles. */ -$wgExternalStores = false; +$wgCategoryMagicGallery = true; /** - * An array of external mysql servers, e.g. - * $wgExternalServers = array( 'cluster1' => array( 'srv28', 'srv29', 'srv30' ) ); - * Used by LBFactory_Simple, may be ignored if $wgLBFactoryConf is set to another class. + * Paging limit for categories */ -$wgExternalServers = array(); +$wgCategoryPagingLimit = 200; /** - * The place to put new revisions, false to put them in the local text table. - * Part of a URL, e.g. DB://cluster1 + * Specify how category names should be sorted, when listed on a category page. + * A sorting scheme is also known as a collation. * - * Can be an array instead of a single string, to enable data distribution. Keys - * must be consecutive integers, starting at zero. Example: + * Available values are: * - * $wgDefaultExternalStore = array( 'DB://cluster1', 'DB://cluster2' ); + * - uppercase: Converts the category name to upper case, and sorts by that. + * + * - uca-default: Provides access to the Unicode Collation Algorithm with + * the default element table. This is a compromise collation which sorts + * all languages in a mediocre way. However, it is better than "uppercase". + * + * To use the uca-default collation, you must have PHP's intl extension + * installed. See http://php.net/manual/en/intl.setup.php . The details of the + * resulting collation will depend on the version of ICU installed on the + * server. * + * After you change this, you must run maintenance/updateCollation.php to fix + * the sort keys in the database. */ -$wgDefaultExternalStore = false; +$wgCategoryCollation = 'uppercase'; -/** - * Revision text may be cached in $wgMemc to reduce load on external storage - * servers and object extraction overhead for frequently-loaded revisions. - * - * Set to 0 to disable, or number of seconds before cache expiry. +/** @} */ # End categories } + +/*************************************************************************//** + * @name Logging + * @{ */ -$wgRevisionCacheExpiry = 0; /** - * list of trusted media-types and mime types. - * Use the MEDIATYPE_xxx constants to represent media types. - * This list is used by Image::isSafeFile - * - * Types not listed here will have a warning about unsafe content - * displayed on the images description page. It would also be possible - * to use this for further restrictions, like disabling direct - * [[media:...]] links for non-trusted formats. + * The logging system has two levels: an event type, which describes the + * general category and can be viewed as a named subset of all logs; and + * an action, which is a specific kind of event that can exist in that + * log type. */ -$wgTrustedMediaFormats= array( - MEDIATYPE_BITMAP, //all bitmap formats - MEDIATYPE_AUDIO, //all audio formats - MEDIATYPE_VIDEO, //all plain video formats - "image/svg+xml", //svg (only needed if inline rendering of svg is not supported) - "application/pdf", //PDF files - #"application/x-shockwave-flash", //flash/shockwave movie +$wgLogTypes = array( '', + 'block', + 'protect', + 'rights', + 'delete', + 'upload', + 'move', + 'import', + 'patrol', + 'merge', + 'suppress', ); /** - * Allow special page inclusions such as {{Special:Allpages}} + * This restricts log access to those who have a certain right + * Users without this will not see it in the option menu and can not view it + * Restricted logs are not added to recent changes + * Logs should remain non-transcludable + * Format: logtype => permissiontype */ -$wgAllowSpecialInclusion = true; +$wgLogRestrictions = array( + 'suppress' => 'suppressionlog' +); /** - * Timeout for HTTP requests done internally + * Show/hide links on Special:Log will be shown for these log types. + * + * This is associative array of log type => boolean "hide by default" + * + * See $wgLogTypes for a list of available log types. + * + * For example: + * $wgFilterLogTypes => array( + * 'move' => true, + * 'import' => false, + * ); + * + * Will display show/hide links for the move and import logs. Move logs will be + * hidden by default unless the link is clicked. Import logs will be shown by + * default, and hidden when the link is clicked. + * + * A message of the form log-show-hide-<type> should be added, and will be used + * for the link text. */ -$wgHTTPTimeout = 25; +$wgFilterLogTypes = array( + 'patrol' => true +); /** - * Timeout for Asynchronous (background) HTTP requests + * Lists the message key string for each log type. The localized messages + * will be listed in the user interface. + * + * Extensions with custom log types may add to this array. */ -$wgAsyncHTTPTimeout = 25; +$wgLogNames = array( + '' => 'all-logs-page', + 'block' => 'blocklogpage', + 'protect' => 'protectlogpage', + 'rights' => 'rightslog', + 'delete' => 'dellogpage', + 'upload' => 'uploadlogpage', + 'move' => 'movelogpage', + 'import' => 'importlogpage', + 'patrol' => 'patrol-log-page', + 'merge' => 'mergelog', + 'suppress' => 'suppressionlog', +); /** - * Proxy to use for CURL requests. + * Lists the message key string for descriptive text to be shown at the + * top of each log type. + * + * Extensions with custom log types may add to this array. */ -$wgHTTPProxy = false; +$wgLogHeaders = array( + '' => 'alllogstext', + 'block' => 'blocklogtext', + 'protect' => 'protectlogtext', + 'rights' => 'rightslogtext', + 'delete' => 'dellogpagetext', + 'upload' => 'uploadlogpagetext', + 'move' => 'movelogpagetext', + 'import' => 'importlogpagetext', + 'patrol' => 'patrol-log-header', + 'merge' => 'mergelogpagetext', + 'suppress' => 'suppressionlogtext', +); /** - * Enable interwiki transcluding. Only when iw_trans=1. - */ -$wgEnableScaryTranscluding = false; -/** - * Expiry time for interwiki transclusion + * Lists the message key string for formatting individual events of each + * type and action when listed in the logs. + * + * Extensions with custom log types may add to this array. */ -$wgTranscludeCacheExpiry = 3600; +$wgLogActions = array( + 'block/block' => 'blocklogentry', + 'block/unblock' => 'unblocklogentry', + 'block/reblock' => 'reblock-logentry', + 'protect/protect' => 'protectedarticle', + 'protect/modify' => 'modifiedarticleprotection', + 'protect/unprotect' => 'unprotectedarticle', + 'protect/move_prot' => 'movedarticleprotection', + 'rights/rights' => 'rightslogentry', + 'rights/disable' => 'disableaccount-logentry', + 'delete/delete' => 'deletedarticle', + 'delete/restore' => 'undeletedarticle', + 'delete/revision' => 'revdelete-logentry', + 'delete/event' => 'logdelete-logentry', + 'upload/upload' => 'uploadedimage', + 'upload/overwrite' => 'overwroteimage', + 'upload/revert' => 'uploadedimage', + 'move/move' => '1movedto2', + 'move/move_redir' => '1movedto2_redir', + 'import/upload' => 'import-logentry-upload', + 'import/interwiki' => 'import-logentry-interwiki', + 'merge/merge' => 'pagemerge-logentry', + 'suppress/revision' => 'revdelete-logentry', + 'suppress/file' => 'revdelete-logentry', + 'suppress/event' => 'logdelete-logentry', + 'suppress/delete' => 'suppressedarticle', + 'suppress/block' => 'blocklogentry', + 'suppress/reblock' => 'reblock-logentry', + 'patrol/patrol' => 'patrol-log-line', +); /** - * Support blog-style "trackbacks" for articles. See - * http://www.sixapart.com/pronet/docs/trackback_spec for details. + * The same as above, but here values are names of functions, + * not messages. + * @see LogPage::actionText */ -$wgUseTrackbacks = false; +$wgLogActionsHandlers = array(); /** - * Enable filtering of categories in Recentchanges + * Maintain a log of newusers at Log/newusers? */ -$wgAllowCategorizedRecentChanges = false ; +$wgNewUserLog = true; /** - * Number of jobs to perform per request. May be less than one in which case - * jobs are performed probabalistically. If this is zero, jobs will not be done - * during ordinary apache requests. In this case, maintenance/runJobs.php should - * be run periodically. + * Log the automatic creations of new users accounts? */ -$wgJobRunRate = 1; +$wgLogAutocreatedAccounts = false; -/** - * Number of rows to update per job - */ -$wgUpdateRowsPerJob = 500; +/** @} */ # end logging } -/** - * Number of rows to update per query +/*************************************************************************//** + * @name Special pages (general and miscellaneous) + * @{ */ -$wgUpdateRowsPerQuery = 100; /** - * Enable AJAX framework + * Allow special page inclusions such as {{Special:Allpages}} */ -$wgUseAjax = true; +$wgAllowSpecialInclusion = true; /** - * List of Ajax-callable functions. - * Extensions acting as Ajax callbacks must register here + * Set this to an array of special page names to prevent + * maintenance/updateSpecialPages.php from updating those pages. */ -$wgAjaxExportList = array( 'wfAjaxGetThumbnailUrl', 'wfAjaxGetFileUrl' ); +$wgDisableQueryPageUpdate = false; /** - * Enable watching/unwatching pages using AJAX. - * Requires $wgUseAjax to be true too. - * Causes wfAjaxWatch to be added to $wgAjaxExportList + * List of special pages, followed by what subtitle they should go under + * at Special:SpecialPages */ -$wgAjaxWatch = true; +$wgSpecialPageGroups = array( + 'DoubleRedirects' => 'maintenance', + 'BrokenRedirects' => 'maintenance', + 'Lonelypages' => 'maintenance', + 'Uncategorizedpages' => 'maintenance', + 'Uncategorizedcategories' => 'maintenance', + 'Uncategorizedimages' => 'maintenance', + 'Uncategorizedtemplates' => 'maintenance', + 'Unusedcategories' => 'maintenance', + 'Unusedimages' => 'maintenance', + 'Protectedpages' => 'maintenance', + 'Protectedtitles' => 'maintenance', + 'Unusedtemplates' => 'maintenance', + 'Withoutinterwiki' => 'maintenance', + 'Longpages' => 'maintenance', + 'Shortpages' => 'maintenance', + 'Ancientpages' => 'maintenance', + 'Deadendpages' => 'maintenance', + 'Wantedpages' => 'maintenance', + 'Wantedcategories' => 'maintenance', + 'Wantedfiles' => 'maintenance', + 'Wantedtemplates' => 'maintenance', + 'Unwatchedpages' => 'maintenance', + 'Fewestrevisions' => 'maintenance', -/** - * Enable AJAX check for file overwrite, pre-upload - */ -$wgAjaxUploadDestCheck = true; + 'Userlogin' => 'login', + 'Userlogout' => 'login', + 'CreateAccount' => 'login', + + 'Recentchanges' => 'changes', + 'Recentchangeslinked' => 'changes', + 'Watchlist' => 'changes', + 'Newimages' => 'changes', + 'Newpages' => 'changes', + 'Log' => 'changes', + 'Tags' => 'changes', + + 'Upload' => 'media', + 'Listfiles' => 'media', + 'MIMEsearch' => 'media', + 'FileDuplicateSearch' => 'media', + 'Filepath' => 'media', + + 'Listusers' => 'users', + 'Activeusers' => 'users', + 'Listgrouprights' => 'users', + 'Ipblocklist' => 'users', + 'Contributions' => 'users', + 'Emailuser' => 'users', + 'Listadmins' => 'users', + 'Listbots' => 'users', + 'Userrights' => 'users', + 'Blockip' => 'users', + 'Preferences' => 'users', + 'Resetpass' => 'users', + 'DeletedContributions' => 'users', + + 'Mostlinked' => 'highuse', + 'Mostlinkedcategories' => 'highuse', + 'Mostlinkedtemplates' => 'highuse', + 'Mostcategories' => 'highuse', + 'Mostimages' => 'highuse', + 'Mostrevisions' => 'highuse', + + 'Allpages' => 'pages', + 'Prefixindex' => 'pages', + 'Listredirects' => 'pages', + 'Categories' => 'pages', + 'Disambiguations' => 'pages', -/** - * Enable previewing licences via AJAX. Also requires $wgEnableAPI to be true. - */ -$wgAjaxLicensePreview = true; + 'Randompage' => 'redirects', + 'Randomredirect' => 'redirects', + 'Mypage' => 'redirects', + 'Mytalk' => 'redirects', + 'Mycontributions' => 'redirects', + 'Search' => 'redirects', + 'LinkSearch' => 'redirects', -/** - * Allow DISPLAYTITLE to change title display - */ -$wgAllowDisplayTitle = true; + 'ComparePages' => 'pagetools', + 'Movepage' => 'pagetools', + 'MergeHistory' => 'pagetools', + 'Revisiondelete' => 'pagetools', + 'Undelete' => 'pagetools', + 'Export' => 'pagetools', + 'Import' => 'pagetools', + 'Whatlinkshere' => 'pagetools', -/** - * for consistency, restrict DISPLAYTITLE to titles that normalize to the same canonical DB key - */ -$wgRestrictDisplayTitle = true; + 'Statistics' => 'wiki', + 'Version' => 'wiki', + 'Lockdb' => 'wiki', + 'Unlockdb' => 'wiki', + 'Allmessages' => 'wiki', + 'Popularpages' => 'wiki', -/** - * Array of usernames which may not be registered or logged in from - * Maintenance scripts can still use these - */ -$wgReservedUsernames = array( - 'MediaWiki default', // Default 'Main Page' and MediaWiki: message pages - 'Conversion script', // Used for the old Wikipedia software upgrade - 'Maintenance script', // Maintenance scripts which perform editing, image import script - 'Template namespace initialisation script', // Used in 1.2->1.3 upgrade - 'msg:double-redirect-fixer', // Automatic double redirect fix + 'Specialpages' => 'other', + 'Blockme' => 'other', + 'Booksources' => 'other', ); -/** - * MediaWiki will reject HTMLesque tags in uploaded files due to idiotic browsers which can't - * perform basic stuff like MIME detection and which are vulnerable to further idiots uploading - * crap files as images. When this directive is on, <title> will be allowed in files with - * an "image/svg+xml" MIME type. You should leave this disabled if your web server is misconfigured - * and doesn't send appropriate MIME types for SVG images. - */ -$wgAllowTitlesInSVG = false; +/** Whether or not to sort special pages in Special:Specialpages */ -/** - * Array of namespaces which can be deemed to contain valid "content", as far - * as the site statistics are concerned. Useful if additional namespaces also - * contain "content" which should be considered when generating a count of the - * number of articles in the wiki. - */ -$wgContentNamespaces = array( NS_MAIN ); +$wgSortSpecialPages = true; /** - * Maximum amount of virtual memory available to shell processes under linux, in KB. + * Filter for Special:Randompage. Part of a WHERE clause + * @deprecated as of 1.16, use the SpecialRandomGetRandomTitle hook */ -$wgMaxShellMemory = 102400; +$wgExtraRandompageSQL = false; /** - * Maximum file size created by shell processes under linux, in KB - * ImageMagick convert for example can be fairly hungry for scratch space + * On Special:Unusedimages, consider images "used", if they are put + * into a category. Default (false) is not to count those as used. */ -$wgMaxShellFileSize = 102400; +$wgCountCategorizedImagesAsUsed = false; /** - * Maximum CPU time in seconds for shell processes under linux + * Maximum number of links to a redirect page listed on + * Special:Whatlinkshere/RedirectDestination */ -$wgMaxShellTime = 180; +$wgMaxRedirectLinksRetrieved = 500; -/** - * Executable path of the PHP cli binary (php/php5). Should be set up on install. +/** @} */ # end special pages } + +/*************************************************************************//** + * @name Robot (search engine crawler) policy + * See also $wgNoFollowLinks. + * @{ */ -$wgPhpCli = '/usr/bin/php'; /** - * DJVU settings - * Path of the djvudump executable - * Enable this and $wgDjvuRenderer to enable djvu rendering + * Default robot policy. The default policy is to encourage indexing and fol- + * lowing of links. It may be overridden on a per-namespace and/or per-page + * basis. */ -# $wgDjvuDump = 'djvudump'; -$wgDjvuDump = null; +$wgDefaultRobotPolicy = 'index,follow'; /** - * Path of the ddjvu DJVU renderer - * Enable this and $wgDjvuDump to enable djvu rendering + * Robot policies per namespaces. The default policy is given above, the array + * is made of namespace constants as defined in includes/Defines.php. You can- + * not specify a different default policy for NS_SPECIAL: it is always noindex, + * nofollow. This is because a number of special pages (e.g., ListPages) have + * many permutations of options that display the same data under redundant + * URLs, so search engine spiders risk getting lost in a maze of twisty special + * pages, all alike, and never reaching your actual content. + * + * Example: + * $wgNamespaceRobotPolicies = array( NS_TALK => 'noindex' ); */ -# $wgDjvuRenderer = 'ddjvu'; -$wgDjvuRenderer = null; +$wgNamespaceRobotPolicies = array(); /** - * Path of the djvutxt DJVU text extraction utility - * Enable this and $wgDjvuDump to enable text layer extraction from djvu files + * Robot policies per article. These override the per-namespace robot policies. + * Must be in the form of an array where the key part is a properly canonical- + * ised text form title and the value is a robot policy. + * Example: + * $wgArticleRobotPolicies = array( 'Main Page' => 'noindex,follow', + * 'User:Bob' => 'index,follow' ); + * Example that DOES NOT WORK because the names are not canonical text forms: + * $wgArticleRobotPolicies = array( + * # Underscore, not space! + * 'Main_Page' => 'noindex,follow', + * # "Project", not the actual project name! + * 'Project:X' => 'index,follow', + * # Needs to be "Abc", not "abc" (unless $wgCapitalLinks is false for that namespace)! + * 'abc' => 'noindex,nofollow' + * ); */ -# $wgDjvuTxt = 'djvutxt'; -$wgDjvuTxt = null; +$wgArticleRobotPolicies = array(); /** - * Path of the djvutoxml executable - * This works like djvudump except much, much slower as of version 3.5. - * - * For now I recommend you use djvudump instead. The djvuxml output is - * probably more stable, so we'll switch back to it as soon as they fix - * the efficiency problem. - * http://sourceforge.net/tracker/index.php?func=detail&aid=1704049&group_id=32953&atid=406583 + * An array of namespace keys in which the __INDEX__/__NOINDEX__ magic words + * will not function, so users can't decide whether pages in that namespace are + * indexed by search engines. If set to null, default to $wgContentNamespaces. + * Example: + * $wgExemptFromUserRobotsControl = array( NS_MAIN, NS_TALK, NS_PROJECT ); */ -# $wgDjvuToXML = 'djvutoxml'; -$wgDjvuToXML = null; +$wgExemptFromUserRobotsControl = null; +/** @} */ # End robot policy } -/** - * Shell command for the DJVU post processor - * Default: pnmtopng, since ddjvu generates ppm output - * Set this to false to output the ppm file directly. - */ -$wgDjvuPostProcessor = 'pnmtojpeg'; -/** - * File extension for the DJVU post processor output +/************************************************************************//** + * @name AJAX and API + * Note: The AJAX entry point which this section refers to is gradually being + * replaced by the API entry point, api.php. They are essentially equivalent. + * Both of them are used for dynamic client-side features, via XHR. + * @{ */ -$wgDjvuOutputExtension = 'jpg'; /** * Enable the MediaWiki API for convenient access to @@ -3958,262 +5077,193 @@ $wgAPICacheHelp = true; $wgAPICacheHelpTimeout = 60*60; /** - * Parser test suite files to be run by parserTests.php when no specific - * filename is passed to it. - * - * Extensions may add their own tests to this array, or site-local tests - * may be added via LocalSettings.php - * - * Use full paths. - */ -$wgParserTestFiles = array( - "$IP/maintenance/parserTests.txt", -); - -/** - * If configured, specifies target CodeReview installation to send test - * result data from 'parserTests.php --upload' - * - * Something like this: - * $wgParserTestRemote = array( - * 'api-url' => 'http://www.mediawiki.org/w/api.php', - * 'repo' => 'MediaWiki', - * 'suite' => 'ParserTests', - * 'path' => '/trunk/phase3', // not used client-side; for reference - * 'secret' => 'qmoicj3mc4mcklmqw', // Shared secret used in HMAC validation - * ); - */ -$wgParserTestRemote = false; - -/** - * Break out of framesets. This can be used to prevent clickjacking attacks, - * or to prevent external sites from framing your site with ads. + * Enable AJAX framework */ -$wgBreakFrames = false; +$wgUseAjax = true; /** - * The X-Frame-Options header to send on pages sensitive to clickjacking - * attacks, such as edit pages. This prevents those pages from being displayed - * in a frame or iframe. The options are: - * - * - 'DENY': Do not allow framing. This is recommended for most wikis. - * - * - 'SAMEORIGIN': Allow framing by pages on the same domain. This can be used - * to allow framing within a trusted domain. This is insecure if there - * is a page on the same domain which allows framing of arbitrary URLs. - * - * - false: Allow all framing. This opens up the wiki to XSS attacks and thus - * full compromise of local user accounts. Private wikis behind a - * corporate firewall are especially vulnerable. This is not - * recommended. - * - * For extra safety, set $wgBreakFrames = true, to prevent framing on all pages, - * not just edit pages. + * List of Ajax-callable functions. + * Extensions acting as Ajax callbacks must register here */ -$wgEditPageFrameOptions = 'DENY'; +$wgAjaxExportList = array( 'wfAjaxGetFileUrl' ); /** - * Set this to an array of special page names to prevent - * maintenance/updateSpecialPages.php from updating those pages. + * Enable watching/unwatching pages using AJAX. + * Requires $wgUseAjax to be true too. + * Causes wfAjaxWatch to be added to $wgAjaxExportList */ -$wgDisableQueryPageUpdate = false; +$wgAjaxWatch = true; /** - * Disable output compression (enabled by default if zlib is available) + * Enable AJAX check for file overwrite, pre-upload */ -$wgDisableOutputCompression = false; +$wgAjaxUploadDestCheck = true; /** - * If lag is higher than $wgSlaveLagWarning, show a warning in some special - * pages (like watchlist). If the lag is higher than $wgSlaveLagCritical, - * show a more obvious warning. + * Enable previewing licences via AJAX. Also requires $wgEnableAPI to be true. */ -$wgSlaveLagWarning = 10; -$wgSlaveLagCritical = 30; +$wgAjaxLicensePreview = true; /** - * Parser configuration. Associative array with the following members: - * - * class The class name + * Settings for incoming cross-site AJAX requests: + * Newer browsers support cross-site AJAX when the target resource allows requests + * from the origin domain by the Access-Control-Allow-Origin header. + * This is currently only used by the API (requests to api.php) + * $wgCrossSiteAJAXdomains can be set using a wildcard syntax: * - * preprocessorClass The preprocessor class. Two classes are currently available: - * Preprocessor_Hash, which uses plain PHP arrays for tempoarary - * storage, and Preprocessor_DOM, which uses the DOM module for - * temporary storage. Preprocessor_DOM generally uses less memory; - * the speed of the two is roughly the same. + * '*' matches any number of characters + * '?' matches any 1 character * - * If this parameter is not given, it uses Preprocessor_DOM if the - * DOM module is available, otherwise it uses Preprocessor_Hash. + * Example: + $wgCrossSiteAJAXdomains = array( + 'www.mediawiki.org', + '*.wikipedia.org', + '*.wikimedia.org', + '*.wiktionary.org', + ); * - * The entire associative array will be passed through to the constructor as - * the first parameter. Note that only Setup.php can use this variable -- - * the configuration will change at runtime via $wgParser member functions, so - * the contents of this variable will be out-of-date. The variable can only be - * changed during LocalSettings.php, in particular, it can't be changed during - * an extension setup function. */ -$wgParserConf = array( - 'class' => 'Parser', - #'preprocessorClass' => 'Preprocessor_Hash', -); +$wgCrossSiteAJAXdomains = array(); /** - * LinkHolderArray batch size - * For debugging + * Domains that should not be allowed to make AJAX requests, + * even if they match one of the domains allowed by $wgCrossSiteAJAXdomains + * Uses the same syntax as $wgCrossSiteAJAXdomains */ -$wgLinkHolderBatchSize = 1000; -/** - * By default MediaWiki does not register links pointing to same server in externallinks dataset, - * use this value to override: +$wgCrossSiteAJAXdomainExceptions = array(); + +/** @} */ # End AJAX and API } + +/************************************************************************//** + * @name Shell and process control + * @{ */ -$wgRegisterInternalExternals = false; /** - * Hooks that are used for outputting exceptions. Format is: - * $wgExceptionHooks[] = $funcname - * or: - * $wgExceptionHooks[] = array( $class, $funcname ) - * Hooks should return strings or false + * Maximum amount of virtual memory available to shell processes under linux, in KB. */ -$wgExceptionHooks = array(); +$wgMaxShellMemory = 102400; /** - * Page property link table invalidation lists. When a page property - * changes, this may require other link tables to be updated (eg - * adding __HIDDENCAT__ means the hiddencat tracking category will - * have been added, so the categorylinks table needs to be rebuilt). - * This array can be added to by extensions. + * Maximum file size created by shell processes under linux, in KB + * ImageMagick convert for example can be fairly hungry for scratch space */ -$wgPagePropLinkInvalidations = array( - 'hiddencat' => 'categorylinks', -); +$wgMaxShellFileSize = 102400; /** - * Maximum number of links to a redirect page listed on - * Special:Whatlinkshere/RedirectDestination + * Maximum CPU time in seconds for shell processes under linux */ -$wgMaxRedirectLinksRetrieved = 500; +$wgMaxShellTime = 180; /** - * Maximum number of calls per parse to expensive parser functions such as - * PAGESINCATEGORY. + * Executable path of the PHP cli binary (php/php5). Should be set up on install. */ -$wgExpensiveParserFunctionLimit = 100; +$wgPhpCli = '/usr/bin/php'; /** - * Maximum number of pages to move at once when moving subpages with a page. + * Locale for LC_CTYPE, to work around http://bugs.php.net/bug.php?id=45132 + * For Unix-like operating systems, set this to to a locale that has a UTF-8 + * character set. Only the character set is relevant. */ -$wgMaximumMovedPages = 100; +$wgShellLocale = 'en_US.utf8'; -/** - * Fix double redirects after a page move. - * Tends to conflict with page move vandalism, use only on a private wiki. +/** @} */ # End shell } + +/************************************************************************//** + * @name HTTP client + * @{ */ -$wgFixDoubleRedirects = false; /** - * Max number of redirects to follow when resolving redirects. - * 1 means only the first redirect is followed (default behavior). - * 0 or less means no redirects are followed. + * Timeout for HTTP requests done internally */ -$wgMaxRedirects = 1; +$wgHTTPTimeout = 25; /** - * Array of invalid page redirect targets. - * Attempting to create a redirect to any of the pages in this array - * will make the redirect fail. - * Userlogout is hard-coded, so it does not need to be listed here. - * (bug 10569) Disallow Mypage and Mytalk as well. - * - * As of now, this only checks special pages. Redirects to pages in - * other namespaces cannot be invalidated by this variable. + * Timeout for Asynchronous (background) HTTP requests */ -$wgInvalidRedirectTargets = array( 'Filepath', 'Mypage', 'Mytalk' ); +$wgAsyncHTTPTimeout = 25; /** - * Array of namespaces to generate a sitemap for when the - * maintenance/generateSitemap.php script is run, or false if one is to be ge- - * nerated for all namespaces. + * Proxy to use for CURL requests. */ -$wgSitemapNamespaces = false; +$wgHTTPProxy = false; +/** @} */ # End HTTP client } -/** - * If user doesn't specify any edit summary when making a an edit, MediaWiki - * will try to automatically create one. This feature can be disabled by set- - * ting this variable false. +/************************************************************************//** + * @name Job queue + * See also $wgEnotifUseJobQ. + * @{ */ -$wgUseAutomaticEditSummaries = true; /** - * Limit password attempts to X attempts per Y seconds per IP per account. - * Requires memcached. + * Number of jobs to perform per request. May be less than one in which case + * jobs are performed probabalistically. If this is zero, jobs will not be done + * during ordinary apache requests. In this case, maintenance/runJobs.php should + * be run periodically. */ -$wgPasswordAttemptThrottle = array( 'count' => 5, 'seconds' => 300 ); +$wgJobRunRate = 1; /** - * Display user edit counts in various prominent places. + * Number of rows to update per job */ -$wgEdititis = false; +$wgUpdateRowsPerJob = 500; /** - * Enable the UniversalEditButton for browsers that support it - * (currently only Firefox with an extension) - * See http://universaleditbutton.org for more background information + * Number of rows to update per query */ -$wgUniversalEditButton = true; +$wgUpdateRowsPerQuery = 100; -/** - * Should we allow a broader set of characters in id attributes, per HTML5? If - * not, use only HTML 4-compatible IDs. This option is for testing -- when the - * functionality is ready, it will be on by default with no option. - * - * Currently this appears to work fine in Chrome 4 and 5, Firefox 3.5 and 3.6, IE6 - * and 8, and Opera 10.50, but it fails in Opera 10.10: Unicode IDs don't seem - * to work as anchors. So not quite ready for general use yet. +/** @} */ # End job queue } + +/************************************************************************//** + * @name Miscellaneous + * @{ */ -$wgExperimentalHtmlIds = false; + +/** Allow the "info" action, very inefficient at the moment */ +$wgAllowPageInfo = false; + +/** Name of the external diff engine to use */ +$wgExternalDiffEngine = false; /** - * Search form behavior - * true = use Go & Search buttons - * false = use Go button & Advanced search link + * Array of disabled article actions, e.g. view, edit, dublincore, delete, etc. */ -$wgUseTwoButtonsSearchForm = true; +$wgDisabledActions = array(); /** - * Search form behavior for Vector skin only - * true = use an icon search button - * false = use Go & Search buttons + * Disable redirects to special pages and interwiki redirects, which use a 302 + * and have no "redirected from" link. Note this is only for articles with #Redirect + * in them. URL's containing a local interwiki prefix (or a non-canonical special + * page name) are still hard redirected regardless of this setting. */ -$wgVectorUseSimpleSearch = false; +$wgDisableHardRedirects = false; /** - * Watch and unwatch as an icon rather than a link for Vector skin only - * true = use an icon watch/unwatch button - * false = use watch/unwatch text link + * LinkHolderArray batch size + * For debugging */ -$wgVectorUseIconWatch = false; +$wgLinkHolderBatchSize = 1000; /** - * Add extra stylesheets for Vector - This is only being used so that we can play around with different options while - * keeping our CSS code in the SVN and not having to change the main Vector styles. This will probably go away later on. - * null = add no extra styles - * array = list of style paths relative to skins/vector/ + * By default MediaWiki does not register links pointing to same server in externallinks dataset, + * use this value to override: */ -$wgVectorExtraStyles = null; +$wgRegisterInternalExternals = false; /** - * Preprocessor caching threshold + * Maximum number of pages to move at once when moving subpages with a page. */ -$wgPreprocessorCacheThreshold = 1000; +$wgMaximumMovedPages = 100; /** - * Allow filtering by change tag in recentchanges, history, etc - * Has no effect if no tags are defined in valid_tag. + * Fix double redirects after a page move. + * Tends to conflict with page move vandalism, use only on a private wiki. */ -$wgUseTagFilter = true; +$wgFixDoubleRedirects = false; /** * Allow redirection to another page when a user logs in. @@ -4221,24 +5271,6 @@ $wgUseTagFilter = true; */ $wgRedirectOnLogin = null; -/** - * Characters to prevent during new account creations. - * This is used in a regular expression character class during - * registration (regex metacharacters like / are escaped). - */ -$wgInvalidUsernameCharacters = '@'; - -/** - * Character used as a delimiter when testing for interwiki userrights - * (In Special:UserRights, it is possible to modify users on different - * databases if the delimiter is used, e.g. Someuser@enwiki). - * - * It is recommended that you have this delimiter in - * $wgInvalidUsernameCharacters above, or you will not be able to - * modify the user rights of those users via Special:UserRights - */ -$wgUserrightsInterwikiDelimiter = '@'; - /** * Configuration for processing pool control, for use in high-traffic wikis. * An implementation is provided in the PoolCounter extension. @@ -4248,112 +5280,30 @@ $wgUserrightsInterwikiDelimiter = '@'; * The remaining elements are passed through to the class as constructor * parameters. Example: * - * $wgPoolCounterConf = array( 'Article::view' => array( + * $wgPoolCounterConf = array( 'ArticleView' => array( * 'class' => 'PoolCounter_Client', + * 'timeout' => 15, // wait timeout in seconds + * 'workers' => 5, // maximum number of active threads in each pool + * 'maxqueue' => 50, // maximum number of total threads in each pool * ... any extension-specific options... * ); */ $wgPoolCounterConf = null; -/** - * Use some particular type of external authentication. The specific - * authentication module you use will normally require some extra settings to - * be specified. - * - * null indicates no external authentication is to be used. Otherwise, - * $wgExternalAuthType must be the name of a non-abstract class that extends - * ExternalUser. - * - * Core authentication modules can be found in includes/extauth/. - */ -$wgExternalAuthType = null; - -/** - * Configuration for the external authentication. This may include arbitrary - * keys that depend on the authentication mechanism. For instance, - * authentication against another web app might require that the database login - * info be provided. Check the file where your auth mechanism is defined for - * info on what to put here. - */ -$wgExternalAuthConfig = array(); - -/** - * When should we automatically create local accounts when external accounts - * already exist, if using ExternalAuth? Can have three values: 'never', - * 'login', 'view'. 'view' requires the external database to support cookies, - * and implies 'login'. - * - * TODO: Implement 'view' (currently behaves like 'login'). - */ -$wgAutocreatePolicy = 'login'; - -/** - * Policies for how each preference is allowed to be changed, in the presence - * of external authentication. The keys are preference keys, e.g., 'password' - * or 'emailaddress' (see Preferences.php et al.). The value can be one of the - * following: - * - * - local: Allow changes to this pref through the wiki interface but only - * apply them locally (default). - * - semiglobal: Allow changes through the wiki interface and try to apply them - * to the foreign database, but continue on anyway if that fails. - * - global: Allow changes through the wiki interface, but only let them go - * through if they successfully update the foreign database. - * - message: Allow no local changes for linked accounts; replace the change - * form with a message provided by the auth plugin, telling the user how to - * change the setting externally (maybe providing a link, etc.). If the auth - * plugin provides no message for this preference, hide it entirely. - * - * Accounts that are not linked to an external account are never affected by - * this setting. You may want to look at $wgHiddenPrefs instead. - * $wgHiddenPrefs supersedes this option. - * - * TODO: Implement message, global. - */ -$wgAllowPrefChange = array(); - - -/** - * Settings for incoming cross-site AJAX requests: - * Newer browsers support cross-site AJAX when the target resource allows requests - * from the origin domain by the Access-Control-Allow-Origin header. - * This is currently only used by the API (requests to api.php) - * $wgCrossSiteAJAXdomains can be set using a wildcard syntax: - * - * '*' matches any number of characters - * '?' matches any 1 character - * - * Example: - $wgCrossSiteAJAXdomains = array( - 'www.mediawiki.org', - '*.wikipedia.org', - '*.wikimedia.org', - '*.wiktionary.org', - ); - * - */ -$wgCrossSiteAJAXdomains = array(); - -/** - * Domains that should not be allowed to make AJAX requests, - * even if they match one of the domains allowed by $wgCrossSiteAJAXdomains - * Uses the same syntax as $wgCrossSiteAJAXdomains - */ - -$wgCrossSiteAJAXdomainExceptions = array(); - -/** - * The minimum amount of memory that MediaWiki "needs"; MediaWiki will try to raise PHP's memory limit if it's below this amount. - */ -$wgMemoryLimit = "50M"; - /** * To disable file delete/restore temporarily */ $wgUploadMaintenance = false; /** - * Use old names for change_tags indices. + * Allows running of selenium tests via maintenance/tests/RunSeleniumTests.php */ -$wgOldChangeTagsIndex = false; +$wgEnableSelenium = false; +$wgSeleniumTestConfigs = array(); +$wgSeleniumConfigFile = null; +/** + * For really cool vim folding this needs to be at the end: + * vim: foldmarker=@{,@} foldmethod=marker + * @} + */ diff --git a/includes/Defines.php b/includes/Defines.php index 7be569af..64197d9c 100644 --- a/includes/Defines.php +++ b/includes/Defines.php @@ -9,7 +9,7 @@ */ define( 'MW_SPECIALPAGE_VERSION', 2 ); -/**#@+ +/**@{ * Database related constants */ define( 'DBO_DEBUG', 1 ); @@ -19,27 +19,31 @@ define( 'DBO_TRX', 8 ); define( 'DBO_DEFAULT', 16 ); define( 'DBO_PERSISTENT', 32 ); define( 'DBO_SYSDBA', 64 ); //for oracle maintenance -/**#@-*/ +define( 'DBO_DDLMODE', 128 ); // when using schema files: mostly for Oracle +/**@}*/ -# Valid database indexes -# Operation-based indexes +/**@{ + * Valid database indexes + * Operation-based indexes + */ define( 'DB_SLAVE', -1 ); # Read from the slave (or only server) define( 'DB_MASTER', -2 ); # Write to master (or only server) define( 'DB_LAST', -3 ); # Whatever database was used last +/**@}*/ # Obsolete aliases define( 'DB_READ', -1 ); define( 'DB_WRITE', -2 ); -/**#@+ +/**@{ * Virtual namespaces; don't appear in the page database */ -define('NS_MEDIA', -2); -define('NS_SPECIAL', -1); -/**#@-*/ +define( 'NS_MEDIA', -2 ); +define( 'NS_SPECIAL', -1 ); +/**@}*/ -/**#@+ +/**@{ * Real namespaces * * Number 100 and beyond are reserved for custom namespaces; @@ -47,22 +51,23 @@ define('NS_SPECIAL', -1); * DO NOT Change integer values as they are most probably hardcoded everywhere * see bug #696 which talked about that. */ -define('NS_MAIN', 0); -define('NS_TALK', 1); -define('NS_USER', 2); -define('NS_USER_TALK', 3); -define('NS_PROJECT', 4); -define('NS_PROJECT_TALK', 5); -define('NS_FILE', 6); -define('NS_FILE_TALK', 7); -define('NS_MEDIAWIKI', 8); -define('NS_MEDIAWIKI_TALK', 9); -define('NS_TEMPLATE', 10); -define('NS_TEMPLATE_TALK', 11); -define('NS_HELP', 12); -define('NS_HELP_TALK', 13); -define('NS_CATEGORY', 14); -define('NS_CATEGORY_TALK', 15); +define( 'NS_MAIN', 0 ); +define( 'NS_TALK', 1 ); +define( 'NS_USER', 2 ); +define( 'NS_USER_TALK', 3 ); +define( 'NS_PROJECT', 4 ); +define( 'NS_PROJECT_TALK', 5 ); +define( 'NS_FILE', 6 ); +define( 'NS_FILE_TALK', 7 ); +define( 'NS_MEDIAWIKI', 8 ); +define( 'NS_MEDIAWIKI_TALK', 9 ); +define( 'NS_TEMPLATE', 10 ); +define( 'NS_TEMPLATE_TALK', 11 ); +define( 'NS_HELP', 12 ); +define( 'NS_HELP_TALK', 13 ); +define( 'NS_CATEGORY', 14 ); +define( 'NS_CATEGORY_TALK', 15 ); + /** * NS_IMAGE and NS_IMAGE_TALK are the pre-v1.14 names for NS_FILE and * NS_FILE_TALK respectively, and are kept for compatibility. @@ -71,9 +76,9 @@ define('NS_CATEGORY_TALK', 15); * versions, either stick to the old names or define the new constants * yourself, if they're not defined already. */ -define('NS_IMAGE', NS_FILE); -define('NS_IMAGE_TALK', NS_FILE_TALK); -/**#@-*/ +define( 'NS_IMAGE', NS_FILE ); +define( 'NS_IMAGE_TALK', NS_FILE_TALK ); +/**@}*/ /** * Available feeds objects @@ -85,7 +90,7 @@ $wgFeedClasses = array( 'atom' => 'AtomFeed', ); -/**#@+ +/**@{ * Maths constants */ define( 'MW_MATH_PNG', 0 ); @@ -94,9 +99,9 @@ define( 'MW_MATH_HTML', 2 ); define( 'MW_MATH_SOURCE', 3 ); define( 'MW_MATH_MODERN', 4 ); define( 'MW_MATH_MATHML', 5 ); -/**#@-*/ +/**@}*/ -/**#@+ +/**@{ * Cache type */ define( 'CACHE_ANYTHING', -1 ); // Use anything, as long as it works @@ -105,11 +110,9 @@ define( 'CACHE_DB', 1 ); // Store cache objects in the DB define( 'CACHE_MEMCACHED', 2 ); // MemCached, must specify servers in $wgMemCacheServers define( 'CACHE_ACCEL', 3 ); // eAccelerator define( 'CACHE_DBA', 4 ); // Use PHP's DBA extension to store in a DBM-style database -/**#@-*/ - - +/**@}*/ -/**#@+ +/**@{ * Media types. * This defines constants for the value returned by Image::getMediaType() */ @@ -123,18 +126,18 @@ define( 'MEDIATYPE_OFFICE', 'OFFICE' ); // Office Documents, Spreadshee define( 'MEDIATYPE_TEXT', 'TEXT' ); // Plain text (possibly containing program code or scripts) define( 'MEDIATYPE_EXECUTABLE', 'EXECUTABLE' ); // binary executable define( 'MEDIATYPE_ARCHIVE', 'ARCHIVE' ); // archive file (zip, tar, etc) -/**#@-*/ +/**@}*/ -/**#@+ +/**@{ * Antivirus result codes, for use in $wgAntivirusSetup. */ define( 'AV_NO_VIRUS', 0 ); #scan ok, no virus found define( 'AV_VIRUS_FOUND', 1 ); #virus found! define( 'AV_SCAN_ABORTED', -1 ); #scan aborted, the file is probably imune define( 'AV_SCAN_FAILED', false ); #scan failed (scanner not found or error in scanner) -/**#@-*/ +/**@}*/ -/**#@+ +/**@{ * Anti-lock flags * See DefaultSettings.php for a description */ @@ -142,9 +145,9 @@ define( 'ALF_PRELOAD_LINKS', 1 ); define( 'ALF_PRELOAD_EXISTENCE', 2 ); define( 'ALF_NO_LINK_LOCK', 4 ); define( 'ALF_NO_BLOCK_LOCK', 8 ); -/**#@-*/ +/**@}*/ -/**#@+ +/**@{ * Date format selectors; used in user preference storage and by * Language::date() and co. */ @@ -158,9 +161,9 @@ define( 'MW_DATE_MDY', 'mdy' ); define( 'MW_DATE_DMY', 'dmy' ); define( 'MW_DATE_YMD', 'ymd' ); define( 'MW_DATE_ISO', 'ISO 8601' ); -/**#@-*/ +/**@}*/ -/**#@+ +/**@{ * RecentChange type identifiers * This may be obsolete; log items are now used for moves? */ @@ -169,9 +172,9 @@ define( 'RC_NEW', 1); define( 'RC_MOVE', 2); define( 'RC_LOG', 3); define( 'RC_MOVE_OVER_REDIRECT', 4); -/**#@-*/ +/**@}*/ -/**#@+ +/**@{ * Article edit flags */ define( 'EDIT_NEW', 1 ); @@ -181,9 +184,9 @@ define( 'EDIT_SUPPRESS_RC', 8 ); define( 'EDIT_FORCE_BOT', 16 ); define( 'EDIT_DEFER_UPDATES', 32 ); define( 'EDIT_AUTOSUMMARY', 64 ); -/**#@-*/ +/**@}*/ -/** +/**@{ * Flags for Database::makeList() * These are also available as Database class constants */ @@ -192,36 +195,57 @@ define( 'LIST_AND', 1 ); define( 'LIST_SET', 2 ); define( 'LIST_NAMES', 3); define( 'LIST_OR', 4); +define( 'LIST_SET_PREPARED', 8); // List of (?, ?, ?) for DatabaseIbm_db2 +/**@}*/ /** * Unicode and normalisation related */ require_once dirname(__FILE__).'/normal/UtfNormalDefines.php'; -# Hook support constants +/**@{ + * Hook support constants + */ define( 'MW_SUPPORTS_EDITFILTERMERGED', 1 ); define( 'MW_SUPPORTS_PARSERFIRSTCALLINIT', 1 ); define( 'MW_SUPPORTS_LOCALISATIONCACHE', 1 ); +/**@}*/ + +/** Support for $wgResourceModules */ +define( 'MW_SUPPORTS_RESOURCE_MODULES', 1 ); -# Allowed values for Parser::$mOutputType -# Parameter to Parser::startExternalParse(). +/**@{ + * Allowed values for Parser::$mOutputType + * Parameter to Parser::startExternalParse(). + */ define( 'OT_HTML', 1 ); define( 'OT_WIKI', 2 ); define( 'OT_PREPROCESS', 3 ); define( 'OT_MSG' , 3 ); // b/c alias for OT_PREPROCESS +define( 'OT_PLAIN', 4 ); +/**@}*/ -# Flags for Parser::setFunctionHook +/**@{ + * Flags for Parser::setFunctionHook + */ define( 'SFH_NO_HASH', 1 ); define( 'SFH_OBJECT_ARGS', 2 ); +/**@}*/ -# Flags for Parser::setLinkHook +/** + * Flags for Parser::setLinkHook + */ define( 'SLH_PATTERN', 1 ); -# Flags for Parser::replaceLinkHolders +/** + * Flags for Parser::replaceLinkHolders + */ define( 'RLH_FOR_UPDATE', 1 ); -# Autopromote conditions (must be here and not in Autopromote.php, so that -# they're loaded for DefaultSettings.php before AutoLoader.php) +/**@{ + * Autopromote conditions (must be here and not in Autopromote.php, so that + * they're loaded for DefaultSettings.php before AutoLoader.php) + */ define( 'APCOND_EDITCOUNT', 1 ); define( 'APCOND_AGE', 2 ); define( 'APCOND_EMAILCONFIRMED', 3 ); @@ -230,3 +254,4 @@ define( 'APCOND_ISIP', 5 ); define( 'APCOND_IPINRANGE', 6 ); define( 'APCOND_AGE_FROM_EDIT', 7 ); define( 'APCOND_BLOCKED', 8 ); +/**@}*/ diff --git a/includes/DjVuImage.php b/includes/DjVuImage.php index 75df0fd5..cccb070a 100644 --- a/includes/DjVuImage.php +++ b/includes/DjVuImage.php @@ -1,8 +1,8 @@ <?php - /** + * DjVu image handler * - * Copyright (C) 2006 Brion Vibber <brion@pobox.com> + * Copyright © 2006 Brion Vibber <brion@pobox.com> * http://www.mediawiki.org/ * * This program is free software; you can redistribute it and/or modify @@ -20,6 +20,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file */ /** @@ -225,6 +226,8 @@ class DjVuImage { */ function retrieveMetaData() { global $wgDjvuToXML, $wgDjvuDump, $wgDjvuTxt; + wfProfileIn( __METHOD__ ); + if ( isset( $wgDjvuDump ) ) { # djvudump is faster as of version 3.5 # http://sourceforge.net/tracker/index.php?func=detail&aid=1704049&group_id=32953&atid=406583 @@ -247,28 +250,38 @@ class DjVuImage { wfProfileIn( 'djvutxt' ); $cmd = wfEscapeShellArg( $wgDjvuTxt ) . ' --detail=page ' . wfEscapeShellArg( $this->mFilename ) ; wfDebug( __METHOD__.": $cmd\n" ); + $retval = ''; $txt = wfShellExec( $cmd, $retval ); wfProfileOut( 'djvutxt' ); if( $retval == 0) { - # Get rid of invalid UTF-8, strip control characters - if( is_callable( 'iconv' ) ) { - wfSuppressWarnings(); - $txt = iconv( "UTF-8","UTF-8//IGNORE", $txt ); - wfRestoreWarnings(); - } else { - $txt = UtfNormal::cleanUp( $txt ); - } + # Strip some control characters $txt = preg_replace( "/[\013\035\037]/", "", $txt ); - $txt = htmlspecialchars($txt); - $txt = preg_replace( "/\((page\s[\d-]*\s[\d-]*\s[\d-]*\s[\d-]*\s*\"([^<]*?)\"\s*|)\)/s", "<PAGE value=\"$2\" />", $txt ); + $reg = <<<EOR + /\(page\s[\d-]*\s[\d-]*\s[\d-]*\s[\d-]*\s*" + ((?> # Text to match is composed of atoms of either: + \\\\. # - any escaped character + | # - any character different from " and \ + [^"\\\\]+ + )*?) + "\s*\) + | # Or page can be empty ; in this case, djvutxt dumps () + \(\s*()\)/sx +EOR; + $txt = preg_replace_callback( $reg, array( $this, 'pageTextCallback' ), $txt ); $txt = "<DjVuTxt>\n<HEAD></HEAD>\n<BODY>\n" . $txt . "</BODY>\n</DjVuTxt>\n"; $xml = preg_replace( "/<DjVuXML>/", "<mw-djvu><DjVuXML>", $xml ); $xml = $xml . $txt. '</mw-djvu>' ; } } + wfProfileOut( __METHOD__ ); return $xml; } + function pageTextCallback( $matches ) { + # Get rid of invalid UTF-8, strip control characters + return '<PAGE value="' . htmlspecialchars( UtfNormal::cleanUp( $matches[1] ) ) . '" />'; + } + /** * Hack to temporarily work around djvutoxml bug */ diff --git a/includes/DoubleRedirectJob.php b/includes/DoubleRedirectJob.php deleted file mode 100644 index 0857408a..00000000 --- a/includes/DoubleRedirectJob.php +++ /dev/null @@ -1,172 +0,0 @@ -<?php - -/** - * Job to fix double redirects after moving a page - * - * @ingroup JobQueue - */ -class DoubleRedirectJob extends Job { - var $reason, $redirTitle, $destTitleText; - static $user; - - /** - * Insert jobs into the job queue to fix redirects to the given title - * @param $reason String: the reason for the fix, see message double-redirect-fixed-<reason> - * @param $redirTitle Title: the title which has changed, redirects pointing to this title are fixed - * @param $destTitle Not used - */ - public static function fixRedirects( $reason, $redirTitle, $destTitle = false ) { - # Need to use the master to get the redirect table updated in the same transaction - $dbw = wfGetDB( DB_MASTER ); - $res = $dbw->select( - array( 'redirect', 'page' ), - array( 'page_namespace', 'page_title' ), - array( - 'page_id = rd_from', - 'rd_namespace' => $redirTitle->getNamespace(), - 'rd_title' => $redirTitle->getDBkey() - ), __METHOD__ ); - if ( !$res->numRows() ) { - return; - } - $jobs = array(); - foreach ( $res as $row ) { - $title = Title::makeTitle( $row->page_namespace, $row->page_title ); - if ( !$title ) { - continue; - } - - $jobs[] = new self( $title, array( - 'reason' => $reason, - 'redirTitle' => $redirTitle->getPrefixedDBkey() ) ); - # Avoid excessive memory usage - if ( count( $jobs ) > 10000 ) { - Job::batchInsert( $jobs ); - $jobs = array(); - } - } - Job::batchInsert( $jobs ); - } - function __construct( $title, $params = false, $id = 0 ) { - parent::__construct( 'fixDoubleRedirect', $title, $params, $id ); - $this->reason = $params['reason']; - $this->redirTitle = Title::newFromText( $params['redirTitle'] ); - $this->destTitleText = !empty( $params['destTitle'] ) ? $params['destTitle'] : ''; - } - - function run() { - if ( !$this->redirTitle ) { - $this->setLastError( 'Invalid title' ); - return false; - } - - $targetRev = Revision::newFromTitle( $this->title ); - if ( !$targetRev ) { - wfDebug( __METHOD__.": target redirect already deleted, ignoring\n" ); - return true; - } - $text = $targetRev->getText(); - $currentDest = Title::newFromRedirect( $text ); - if ( !$currentDest || !$currentDest->equals( $this->redirTitle ) ) { - wfDebug( __METHOD__.": Redirect has changed since the job was queued\n" ); - return true; - } - - # Check for a suppression tag (used e.g. in periodically archived discussions) - $mw = MagicWord::get( 'staticredirect' ); - if ( $mw->match( $text ) ) { - wfDebug( __METHOD__.": skipping: suppressed with __STATICREDIRECT__\n" ); - return true; - } - - # Find the current final destination - $newTitle = self::getFinalDestination( $this->redirTitle ); - if ( !$newTitle ) { - wfDebug( __METHOD__.": skipping: single redirect, circular redirect or invalid redirect destination\n" ); - return true; - } - if ( $newTitle->equals( $this->redirTitle ) ) { - # The redirect is already right, no need to change it - # This can happen if the page was moved back (say after vandalism) - wfDebug( __METHOD__.": skipping, already good\n" ); - } - - # Preserve fragment (bug 14904) - $newTitle = Title::makeTitle( $newTitle->getNamespace(), $newTitle->getDBkey(), - $currentDest->getFragment() ); - - # Fix the text - # Remember that redirect pages can have categories, templates, etc., - # so the regex has to be fairly general - $newText = preg_replace( '/ \[ \[ [^\]]* \] \] /x', - '[[' . $newTitle->getFullText() . ']]', - $text, 1 ); - - if ( $newText === $text ) { - $this->setLastError( 'Text unchanged???' ); - return false; - } - - # Save it - global $wgUser; - $oldUser = $wgUser; - $wgUser = $this->getUser(); - $article = new Article( $this->title ); - $reason = wfMsgForContent( 'double-redirect-fixed-' . $this->reason, - $this->redirTitle->getPrefixedText(), $newTitle->getPrefixedText() ); - $article->doEdit( $newText, $reason, EDIT_UPDATE | EDIT_SUPPRESS_RC ); - $wgUser = $oldUser; - - return true; - } - - /** - * Get the final destination of a redirect - * @return false if the specified title is not a redirect, or if it is a circular redirect - */ - public static function getFinalDestination( $title ) { - $dbw = wfGetDB( DB_MASTER ); - - $seenTitles = array(); # Circular redirect check - $dest = false; - - while ( true ) { - $titleText = $title->getPrefixedDBkey(); - if ( isset( $seenTitles[$titleText] ) ) { - wfDebug( __METHOD__, "Circular redirect detected, aborting\n" ); - return false; - } - $seenTitles[$titleText] = true; - - $row = $dbw->selectRow( - array( 'redirect', 'page' ), - array( 'rd_namespace', 'rd_title' ), - array( - 'rd_from=page_id', - 'page_namespace' => $title->getNamespace(), - 'page_title' => $title->getDBkey() - ), __METHOD__ ); - if ( !$row ) { - # No redirect from here, chain terminates - break; - } else { - $dest = $title = Title::makeTitle( $row->rd_namespace, $row->rd_title ); - } - } - return $dest; - } - - /** - * Get a user object for doing edits, from a request-lifetime cache - */ - function getUser() { - if ( !self::$user ) { - self::$user = User::newFromName( wfMsgForContent( 'double-redirect-fixer' ), false ); - if ( !self::$user->isLoggedIn() ) { - self::$user->addToDatabase(); - } - } - return self::$user; - } -} - diff --git a/includes/EditPage.php b/includes/EditPage.php index b4cbf0de..3e85ad10 100644 --- a/includes/EditPage.php +++ b/includes/EditPage.php @@ -96,7 +96,7 @@ class EditPage { * @todo document * @param $article */ - function EditPage( $article ) { + function __construct( $article ) { $this->mArticle =& $article; $this->mTitle = $article->getTitle(); $this->action = 'submit'; @@ -129,21 +129,19 @@ class EditPage { wfProfileIn( __METHOD__ ); # Get variables from query string :P $section = $wgRequest->getVal( 'section' ); - - $preload = $wgRequest->getVal( 'preload', + + $preload = $wgRequest->getVal( 'preload', // Custom preload text for new sections $section === 'new' ? 'MediaWiki:addsection-preload' : '' ); $undoafter = $wgRequest->getVal( 'undoafter' ); $undo = $wgRequest->getVal( 'undo' ); - $text = ''; // For message page not locally set, use the i18n message. // For other non-existent articles, use preload text if any. if ( !$this->mTitle->exists() ) { if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) { # If this is a system message, get the default text. list( $message, $lang ) = $wgMessageCache->figureMessage( $wgContLang->lcfirst( $this->mTitle->getText() ) ); - $wgMessageCache->loadAllMessages( $lang ); $text = wfMsgGetKey( $message, false, $lang, false ); if( wfEmptyMsg( $message, $text ) ) $text = $this->getPreloadedText( $preload ); @@ -220,30 +218,39 @@ class EditPage { } /** - * Get the contents of a page from its title and remove includeonly tags + * Get the contents to be preloaded into the box, either set by + * an earlier setPreloadText() or by loading the given page. * - * @param $preload String: the title of the page. - * @return string The contents of the page. + * @param $preload String: representing the title to preload from. + * @return String */ protected function getPreloadedText( $preload ) { + global $wgUser, $wgParser; if ( !empty( $this->mPreloadText ) ) { return $this->mPreloadText; - } elseif ( $preload === '' ) { - return ''; - } else { - $preloadTitle = Title::newFromText( $preload ); - if ( isset( $preloadTitle ) && $preloadTitle->userCanRead() ) { - $rev = Revision::newFromTitle( $preloadTitle ); - if ( is_object( $rev ) ) { - $text = $rev->getText(); - // TODO FIXME: AAAAAAAAAAA, this shouldn't be implementing - // its own mini-parser! -ævar - $text = preg_replace( '~</?includeonly>~', '', $text ); - return $text; - } else - return ''; + } elseif ( $preload !== '' ) { + $title = Title::newFromText( $preload ); + # Check for existence to avoid getting MediaWiki:Noarticletext + if ( isset( $title ) && $title->exists() && $title->userCanRead() ) { + $article = new Article( $title ); + + if ( $article->isRedirect() ) { + $title = Title::newFromRedirectRecurse( $article->getContent() ); + # Redirects to missing titles are displayed, to hidden pages are followed + # Copying observed behaviour from ?action=view + if ( $title->exists() ) { + if ($title->userCanRead() ) { + $article = new Article( $title ); + } else { + return ""; + } + } + } + $parserOptions = ParserOptions::newFromUser( $wgUser ); + return $wgParser->getPreloadText( $article->getContent(), $title, $parserOptions ); } } + return ''; } /* @@ -267,6 +274,24 @@ class EditPage { return $this->deletedSinceEdit; } + /** + * Checks whether the user entered a skin name in uppercase, + * e.g. "User:Example/Monobook.css" instead of "monobook.css" + */ + protected function isWrongCaseCssJsPage() { + if( $this->mTitle->isCssJsSubpage() ) { + $name = $this->mTitle->getSkinFromCssJsSubpage(); + $skins = array_merge( + array_keys( Skin::getSkinNames() ), + array( 'common' ) + ); + return !in_array( $name, $skins ) + && in_array( strtolower( $name ), $skins ); + } else { + return false; + } + } + function submit() { $this->edit(); } @@ -310,11 +335,10 @@ class EditPage { $this->preview = true; } - $wgOut->addScriptFile( 'edit.js' ); - + $wgOut->addModules( array( 'mediawiki.legacy.edit', 'mediawiki.action.edit' ) ); + if ( $wgUser->getOption( 'uselivepreview', false ) ) { - $wgOut->includeJQuery(); - $wgOut->addScriptFile( 'preview.js' ); + $wgOut->addModules( 'mediawiki.legacy.preview' ); } // Bug #19334: textarea jumps when editing articles in IE8 $wgOut->addStyle( 'common/IE80Fixes.css', 'screen', 'IE 8' ); @@ -322,7 +346,9 @@ class EditPage { $permErrors = $this->getEditPermissionErrors(); if ( $permErrors ) { wfDebug( __METHOD__ . ": User can't edit\n" ); - $this->readOnlyPage( $this->getContent( false ), true, $permErrors, 'edit' ); + $content = $this->getContent( null ); + $content = $content === '' ? null : $content; + $this->readOnlyPage( $content, true, $permErrors, 'edit' ); wfProfileOut( __METHOD__ ); return; } else { @@ -354,7 +380,7 @@ class EditPage { $this->isCssJsSubpage = $this->mTitle->isCssJsSubpage(); $this->isCssSubpage = $this->mTitle->isCssSubpage(); $this->isJsSubpage = $this->mTitle->isJsSubpage(); - $this->isValidCssJsSubpage = $this->mTitle->isValidCssJsSubpage(); + $this->isWrongCaseCssJsPage = $this->isWrongCaseCssJsPage(); # Show applicable editing introductions if ( $this->formtype == 'initial' || $this->firsttime ) @@ -484,7 +510,7 @@ class EditPage { /** * Does this EditPage class support section editing? * This is used by EditPage subclasses to indicate their ui cannot handle section edits - * + * * @return bool */ protected function isSectionEditSupported() { @@ -496,8 +522,8 @@ class EditPage { * This is used by EditPage subclasses when simply customizing the action * variable in the constructor is not enough. This can be used when the * EditPage lives inside of a Special page rather than a custom page action. - * - * @param Title $title The title for which is being edited (where we go to for &action= links) + * + * @param $title Title object for which is being edited (where we go to for &action= links) * @return string */ protected function getActionURL( Title $title ) { @@ -635,10 +661,10 @@ class EditPage { // Custom edit intro for new sections $this->section === 'new' ? 'MediaWiki:addsection-editintro' : '' ); - wfProfileOut( __METHOD__ ); - // Allow extensions to modify form data wfRunHooks( 'EditPage::importFormData', array( $this, $request ) ); + + wfProfileOut( __METHOD__ ); } /** @@ -646,8 +672,8 @@ class EditPage { * posted form to be placed in $this->textbox1, if using customized input * this method should be overrided and return the page text that will be used * for saving, preview parsing and so on... - * - * @praram WebRequest $request + * + * @param $request WebRequest */ protected function importContentFormData( &$request ) { return; // Don't do anything, EditPage already extracted wpTextbox1 @@ -681,7 +707,7 @@ class EditPage { if ( $namespace == NS_MEDIAWIKI ) { # Show a warning if editing an interface message - $wgOut->wrapWikiMsg( "<div class='mw-editinginterface'>\n$1</div>", 'editinginterface' ); + $wgOut->wrapWikiMsg( "<div class='mw-editinginterface'>\n$1\n</div>", 'editinginterface' ); } # Show a warning message when someone creates/edits a user (talk) page but the user does not exist @@ -692,7 +718,7 @@ class EditPage { $user = User::newFromName( $username, false /* allow IP users*/ ); $ip = User::isIP( $username ); if ( !$user->isLoggedIn() && !$ip ) { # User does not exist - $wgOut->wrapWikiMsg( "<div class=\"mw-userpage-userdoesnotexist error\">\n$1</div>", + $wgOut->wrapWikiMsg( "<div class=\"mw-userpage-userdoesnotexist error\">\n$1\n</div>", array( 'userpage-userdoesnotexist', $username ) ); } else if ( $user->isBlocked() ) { # Show log extract if the user is currently blocked LogEventsList::showLogExtract( @@ -714,9 +740,9 @@ class EditPage { # Try to add a custom edit intro, or use the standard one if this is not possible. if ( !$this->showCustomIntro() && !$this->mTitle->exists() ) { if ( $wgUser->isLoggedIn() ) { - $wgOut->wrapWikiMsg( "<div class=\"mw-newarticletext\">\n$1</div>", 'newarticletext' ); + $wgOut->wrapWikiMsg( "<div class=\"mw-newarticletext\">\n$1\n</div>", 'newarticletext' ); } else { - $wgOut->wrapWikiMsg( "<div class=\"mw-newarticletextanon\">\n$1</div>", 'newarticletextanon' ); + $wgOut->wrapWikiMsg( "<div class=\"mw-newarticletextanon\">\n$1\n</div>", 'newarticletextanon' ); } } # Give a notice if the user is editing a deleted/moved page... @@ -756,7 +782,7 @@ class EditPage { * @return one of the constants describing the result */ function internalAttemptSave( &$result, $bot = false ) { - global $wgFilterCallback, $wgUser, $wgOut, $wgParser; + global $wgFilterCallback, $wgUser, $wgParser; global $wgMaxArticleSize; wfProfileIn( __METHOD__ ); @@ -764,6 +790,8 @@ class EditPage { if ( !wfRunHooks( 'EditPage::attemptSave', array( $this ) ) ) { wfDebug( "Hook 'EditPage::attemptSave' aborted article saving\n" ); + wfProfileOut( __METHOD__ . '-checks' ); + wfProfileOut( __METHOD__ ); return self::AS_HOOK_ERROR; } @@ -771,11 +799,12 @@ class EditPage { if ( $this->mTitle->getNamespace() == NS_FILE && Title::newFromRedirect( $this->textbox1 ) instanceof Title && !$wgUser->isAllowed( 'upload' ) ) { - if ( $wgUser->isAnon() ) { - return self::AS_IMAGE_REDIRECT_ANON; - } else { - return self::AS_IMAGE_REDIRECT_LOGGED; - } + $isAnon = $wgUser->isAnon(); + + wfProfileOut( __METHOD__ . '-checks' ); + wfProfileOut( __METHOD__ ); + + return $isAnon ? self::AS_IMAGE_REDIRECT_ANON : self::AS_IMAGE_REDIRECT_LOGGED; } # Check for spam @@ -859,7 +888,7 @@ class EditPage { wfProfileOut( __METHOD__ . '-checks' ); # If article is new, insert it. - $aid = $this->mTitle->getArticleID( GAID_FOR_UPDATE ); + $aid = $this->mTitle->getArticleID( Title::GAID_FOR_UPDATE ); if ( 0 == $aid ) { // Late check for create permission, just in case *PARANOIA* if ( !$this->mTitle->userCan( 'create' ) ) { @@ -1008,7 +1037,7 @@ class EditPage { return self::AS_TEXTBOX_EMPTY; } if ( $this->summary != '' ) { - $sectionanchor = $wgParser->guessSectionNameFromWikiText( $this->summary ); + $sectionanchor = $wgParser->guessLegacySectionNameFromWikiText( $this->summary ); # This is a new section, so create a link to the new section # in the revision summary. $cleanSummary = $wgParser->stripSectionName( $this->summary ); @@ -1022,7 +1051,7 @@ class EditPage { # we can't deal with anchors, includes, html etc in the header for now, # headline would need to be parsed to improve this if ( $hasmatch and strlen( $matches[2] ) > 0 ) { - $sectionanchor = $wgParser->guessSectionNameFromWikiText( $matches[2] ); + $sectionanchor = $wgParser->guessLegacySectionNameFromWikiText( $matches[2] ); } } wfProfileOut( __METHOD__ . '-sectionanchor' ); @@ -1071,7 +1100,7 @@ class EditPage { ), __METHOD__, array( 'ORDER BY' => 'rev_timestamp ASC', 'LIMIT' => 50 ) ); - while( $row = $res->fetchObject() ) { + foreach ( $res as $row ) { if( $row->rev_user != $id ) { return false; } @@ -1166,7 +1195,7 @@ class EditPage { * parameter; will be called during form output * near the top, for captchas and the like. */ - function showEditForm( $formCallback=null ) { + function showEditForm( $formCallback = null ) { global $wgOut, $wgUser, $wgTitle; # If $wgTitle is null, that means we're in API mode. @@ -1196,10 +1225,12 @@ class EditPage { # Enabled article-related sidebar, toplinks, etc. $wgOut->setArticleRelated( true ); - if ( $this->showHeader() === false ) + if ( $this->showHeader() === false ) { + wfProfileOut( __METHOD__ ); return; + } - $action = htmlspecialchars($this->getActionURL($wgTitle)); + $action = htmlspecialchars( $this->getActionURL( $wgTitle ) ); if ( $wgUser->getOption( 'showtoolbar' ) and !$this->isCssJsSubpage ) { # prepare toolbar for edit buttons @@ -1225,7 +1256,7 @@ class EditPage { if ( $this->wasDeletedSinceLastEdit() && 'save' != $this->formtype ) { $wgOut->wrapWikiMsg( - "<div class='error mw-deleted-while-editing'>\n$1</div>", + "<div class='error mw-deleted-while-editing'>\n$1\n</div>", 'deletedwhileediting' ); } elseif ( $this->wasDeletedSinceLastEdit() ) { // Hide the toolbar and edit area, user can click preview to get it back @@ -1268,11 +1299,11 @@ HTML # automatic one and pass that in the hidden field wpAutoSummary. if ( $this->missingSummary || ( $this->section == 'new' && $this->nosummary ) ) - $wgOut->addHTML( Xml::hidden( 'wpIgnoreBlankSummary', true ) ); + $wgOut->addHTML( Html::hidden( 'wpIgnoreBlankSummary', true ) ); $autosumm = $this->autoSumm ? $this->autoSumm : md5( $this->summary ); - $wgOut->addHTML( Xml::hidden( 'wpAutoSummary', $autosumm ) ); + $wgOut->addHTML( Html::hidden( 'wpAutoSummary', $autosumm ) ); - $wgOut->addHTML( Xml::hidden( 'oldid', $this->mArticle->getOldID() ) ); + $wgOut->addHTML( Html::hidden( 'oldid', $this->mArticle->getOldID() ) ); if ( $this->section == 'new' ) { $this->showSummaryInput( true, $this->summary ); @@ -1280,7 +1311,7 @@ HTML } $wgOut->addHTML( $this->editFormTextBeforeContent ); - + if ( $this->isConflict ) { // In an edit conflict bypass the overrideable content form method // and fallback to the raw wpTextbox1 since editconflicts can't be @@ -1317,7 +1348,7 @@ HTML if ( $this->isConflict ) $this->showConflict(); - + $wgOut->addHTML( $this->editFormTextBottom ); $wgOut->addHTML( "</form>\n" ); if ( !$wgUser->getOption( 'previewontop' ) ) { @@ -1326,11 +1357,11 @@ HTML wfProfileOut( __METHOD__ ); } - + protected function showHeader() { global $wgOut, $wgUser, $wgTitle, $wgMaxArticleSize, $wgLang; if ( $this->isConflict ) { - $wgOut->wrapWikiMsg( "<div class='mw-explainconflict'>\n$1</div>", 'explainconflict' ); + $wgOut->wrapWikiMsg( "<div class='mw-explainconflict'>\n$1\n</div>", 'explainconflict' ); $this->edittime = $this->mArticle->getTimestamp(); } else { if ( $this->section != '' && !$this->isSectionEditSupported() ) { @@ -1355,15 +1386,15 @@ HTML } if ( $this->missingComment ) { - $wgOut->wrapWikiMsg( "<div id='mw-missingcommenttext'>\n$1</div>", 'missingcommenttext' ); + $wgOut->wrapWikiMsg( "<div id='mw-missingcommenttext'>\n$1\n</div>", 'missingcommenttext' ); } if ( $this->missingSummary && $this->section != 'new' ) { - $wgOut->wrapWikiMsg( "<div id='mw-missingsummary'>\n$1</div>", 'missingsummary' ); + $wgOut->wrapWikiMsg( "<div id='mw-missingsummary'>\n$1\n</div>", 'missingsummary' ); } if ( $this->missingSummary && $this->section == 'new' ) { - $wgOut->wrapWikiMsg( "<div id='mw-missingcommentheader'>\n$1</div>", 'missingcommentheader' ); + $wgOut->wrapWikiMsg( "<div id='mw-missingcommentheader'>\n$1\n</div>", 'missingcommentheader' ); } if ( $this->hookError !== '' ) { @@ -1378,9 +1409,9 @@ HTML // Let sysop know that this will make private content public if saved if ( !$this->mArticle->mRevision->userCan( Revision::DELETED_TEXT ) ) { - $wgOut->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1</div>\n", 'rev-deleted-text-permission' ); + $wgOut->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n", 'rev-deleted-text-permission' ); } else if ( $this->mArticle->mRevision->isDeleted( Revision::DELETED_TEXT ) ) { - $wgOut->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1</div>\n", 'rev-deleted-text-view' ); + $wgOut->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n", 'rev-deleted-text-view' ); } if ( !$this->mArticle->mRevision->isCurrent() ) { @@ -1392,19 +1423,23 @@ HTML if ( wfReadOnly() ) { $wgOut->wrapWikiMsg( "<div id=\"mw-read-only-warning\">\n$1\n</div>", array( 'readonlywarning', wfReadOnlyReason() ) ); - } elseif ( $wgUser->isAnon() && $this->formtype != 'preview' ) { - $wgOut->wrapWikiMsg( "<div id=\"mw-anon-edit-warning\">\n$1</div>", 'anoneditwarning' ); + } elseif ( $wgUser->isAnon() ) { + if ( $this->formtype != 'preview' ) { + $wgOut->wrapWikiMsg( "<div id=\"mw-anon-edit-warning\">\n$1</div>", 'anoneditwarning' ); + } else { + $wgOut->wrapWikiMsg( "<div id=\"mw-anon-preview-warning\">\n$1</div>", 'anonpreviewwarning' ); + } } else { if ( $this->isCssJsSubpage ) { # Check the skin exists - if ( !$this->isValidCssJsSubpage ) { - $wgOut->addWikiMsg( 'userinvalidcssjstitle', $wgTitle->getSkinFromCssJsSubpage() ); + if ( $this->isWrongCaseCssJsPage ) { + $wgOut->wrapWikiMsg( "<div class='error' id='mw-userinvalidcssjstitle'>\n$1\n</div>", array( 'userinvalidcssjstitle', $wgTitle->getSkinFromCssJsSubpage() ) ); } if ( $this->formtype !== 'preview' ) { if ( $this->isCssSubpage ) - $wgOut->addWikiMsg( 'usercssyoucanpreview' ); + $wgOut->wrapWikiMsg( "<div id='mw-usercssyoucanpreview'>\n$1\n</div>", array( 'usercssyoucanpreview' ) ); if ( $this->isJsSubpage ) - $wgOut->addWikiMsg( 'userjsyoucanpreview' ); + $wgOut->wrapWikiMsg( "<div id='mw-userjsyoucanpreview'>\n$1\n</div>", array( 'userjsyoucanpreview' ) ); } } } @@ -1447,13 +1482,16 @@ HTML } if ( $this->tooBig || $this->kblength > $wgMaxArticleSize ) { - $wgOut->addHTML( "<div class='error' id='mw-edit-longpageerror'>\n" ); - $wgOut->addWikiMsg( 'longpageerror', $wgLang->formatNum( $this->kblength ), $wgLang->formatNum( $wgMaxArticleSize ) ); - $wgOut->addHTML( "</div>\n" ); - } elseif ( $this->kblength > 29 ) { - $wgOut->addHTML( "<div id='mw-edit-longpagewarning'>\n" ); - $wgOut->addWikiMsg( 'longpagewarning', $wgLang->formatNum( $this->kblength ) ); - $wgOut->addHTML( "</div>\n" ); + $wgOut->wrapWikiMsg( "<div class='error' id='mw-edit-longpageerror'>\n$1\n</div>", + array( 'longpageerror', $wgLang->formatNum( $this->kblength ), $wgLang->formatNum( $wgMaxArticleSize ) ) ); + } else { + $msg = 'longpage-hint'; + $text = wfMsg( $msg ); + if( !wfEmptyMsg( $msg, $text ) && $text !== '-' ) { + $wgOut->wrapWikiMsg( "<div id='mw-edit-longpage-hint'>\n$1\n</div>", + array( 'longpage-hint', $wgLang->formatSize( strlen( $this->textbox1 ) ), strlen( $this->textbox1 ) ) + ); + } } } @@ -1463,23 +1501,25 @@ HTML * Note that you do not need to worry about the label's for=, it will be * inferred by the id given to the input. You can remove them both by * passing array( 'id' => false ) to $userInputAttrs. - * + * * @param $summary The value of the summary input * @param $labelText The html to place inside the label - * @param $userInputAttrs An array of attrs to use on the input - * @param $userSpanAttrs An array of attrs to use on the span inside the label - * + * @param $inputAttrs An array of attrs to use on the input + * @param $spanLabelAttrs An array of attrs to use on the span inside the label + * * @return array An array in the format array( $label, $input ) */ function getSummaryInput($summary = "", $labelText = null, $inputAttrs = null, $spanLabelAttrs = null) { + global $wgUser; + //Note: the maxlength is overriden in JS to 250 and to make it use UTF-8 bytes, not characters. $inputAttrs = ( is_array($inputAttrs) ? $inputAttrs : array() ) + array( 'id' => 'wpSummary', 'maxlength' => '200', 'tabindex' => '1', 'size' => 60, 'spellcheck' => 'true', - ); - + ) + $wgUser->getSkin()->tooltipAndAccessKeyAttribs( 'summary' ); + $spanLabelAttrs = ( is_array($spanLabelAttrs) ? $spanLabelAttrs : array() ) + array( 'class' => $this->missingSummary ? 'mw-summarymissed' : 'mw-summary', 'id' => "wpSummaryLabel" @@ -1497,11 +1537,11 @@ HTML } /** - * @param bool $isSubjectPreview true if this is the section subject/title - * up top, or false if this is the comment - * summary down below the textarea - * @param string $summary The text of the summary to display - * @return string + * @param $isSubjectPreview Boolean: true if this is the section subject/title + * up top, or false if this is the comment summary + * down below the textarea + * @param $summary String: The text of the summary to display + * @return String */ protected function showSummaryInput( $isSubjectPreview, $summary = "" ) { global $wgOut, $wgContLang; @@ -1521,41 +1561,43 @@ HTML } /** - * @param bool $isSubjectPreview true if this is the section subject/title - * up top, or false if this is the comment - * summary down below the textarea - * @param string $summary The text of the summary to display - * @return string + * @param $isSubjectPreview Boolean: true if this is the section subject/title + * up top, or false if this is the comment summary + * down below the textarea + * @param $summary String: the text of the summary to display + * @return String */ protected function getSummaryPreview( $isSubjectPreview, $summary = "" ) { if ( !$summary || ( !$this->preview && !$this->diff ) ) return ""; - + global $wgParser, $wgUser; $sk = $wgUser->getSkin(); - + if ( $isSubjectPreview ) $summary = wfMsgForContent( 'newsectionsummary', $wgParser->stripSectionName( $summary ) ); - $summary = wfMsgExt( 'subject-preview', 'parseinline' ) . $sk->commentBlock( $summary, $this->mTitle, !!$isSubjectPreview ); + $message = $isSubjectPreview ? 'subject-preview' : 'summary-preview'; + + $summary = wfMsgExt( $message, 'parseinline' ) . $sk->commentBlock( $summary, $this->mTitle, $isSubjectPreview ); return Xml::tags( 'div', array( 'class' => 'mw-summary-preview' ), $summary ); } protected function showFormBeforeText() { global $wgOut; $section = htmlspecialchars( $this->section ); - $wgOut->addHTML( <<<INPUTS + $wgOut->addHTML( <<<HTML <input type='hidden' value="{$section}" name="wpSection" /> <input type='hidden' value="{$this->starttime}" name="wpStarttime" /> <input type='hidden' value="{$this->edittime}" name="wpEdittime" /> <input type='hidden' value="{$this->scrolltop}" name="wpScrolltop" id="wpScrolltop" /> -INPUTS +HTML ); if ( !$this->checkUnicodeCompliantBrowser() ) - $wgOut->addHTML(Xml::hidden( 'safemode', '1' )); + $wgOut->addHTML(Html::hidden( 'safemode', '1' )); } - + protected function showFormAfterText() { global $wgOut, $wgUser; /** @@ -1570,7 +1612,7 @@ INPUTS * include the constant suffix to prevent editing from * broken text-mangling proxies. */ - $wgOut->addHTML( "\n" . Xml::hidden( "wpEditToken", $wgUser->editToken() ) . "\n" ); + $wgOut->addHTML( "\n" . Html::hidden( "wpEditToken", $wgUser->editToken() ) . "\n" ); } /** @@ -1580,8 +1622,6 @@ INPUTS * be it a form, or simply wpTextbox1 with a modified content that will be * reverse modified when extracted from the post data. * Note that this is basically the inverse for importContentFormData - * - * @praram WebRequest $request */ protected function showContentForm() { $this->showTextbox1(); @@ -1591,9 +1631,9 @@ INPUTS * Method to output wpTextbox1 * The $textoverride method can be used by subclasses overriding showContentForm * to pass back to this method. - * - * @param array $customAttribs An array of html attributes to use in the textarea - * @param string $textoverride Optional text to override $this->textarea1 with + * + * @param $customAttribs An array of html attributes to use in the textarea + * @param $textoverride String: optional text to override $this->textarea1 with */ protected function showTextbox1($customAttribs = null, $textoverride = null) { $classes = array(); // Textarea CSS @@ -1617,7 +1657,7 @@ INPUTS $classes[] = $attribs['class']; $attribs['class'] = implode( ' ', $classes ); } - + $this->showTextbox( isset($textoverride) ? $textoverride : $this->textbox1, 'wpTextbox1', $attribs ); } @@ -1640,14 +1680,11 @@ INPUTS $attribs = $customAttribs + array( 'accesskey' => ',', 'id' => $name, - 'cols' => $wgUser->getIntOption( 'cols' ), + 'cols' => $wgUser->getIntOption( 'cols' ), 'rows' => $wgUser->getIntOption( 'rows' ), - 'style' => '' // avoid php notices when appending for editwidth preference (appending allows customAttribs['style'] to still work + 'style' => '' // avoid php notices when appending preferences (appending allows customAttribs['style'] to still work ); - if ( $wgUser->getOption( 'editwidth' ) ) - $attribs['style'] .= 'width: 100%'; - $wgOut->addHTML( Html::textarea( $name, $wikitext, $attribs ) ); } @@ -1679,7 +1716,7 @@ INPUTS * Append preview output to $wgOut. * Includes category rendering if this is a category page. * - * @param string $text The HTML to be output for the preview. + * @param $text String: the HTML to be output for the preview. */ protected function showPreview( $text ) { global $wgOut; @@ -1695,14 +1732,16 @@ INPUTS } } + /** + * Give a chance for site and per-namespace customizations of + * terms of service summary link that might exist separately + * from the copyright notice. + * + * This will display between the save button and the edit tools, + * so should remain short! + */ protected function showTosSummary() { $msg = 'editpage-tos-summary'; - // Give a chance for site and per-namespace customizations of - // terms of service summary link that might exist separately - // from the copyright notice. - // - // This will display between the save button and the edit tools, - // so should remain short! wfRunHooks( 'EditPageTosSummary', array( $this->mTitle, &$msg ) ); $text = wfMsg( $msg ); if( !wfEmptyMsg( $msg, $text ) && $text !== '-' ) { @@ -1719,7 +1758,7 @@ INPUTS $wgOut->addWikiMsgArray( 'edittools', array(), array( 'content' ) ); $wgOut->addHTML( '</div>' ); } - + protected function getCopywarn() { global $wgRightsText; if ( $wgRightsText ) { @@ -1732,10 +1771,10 @@ INPUTS } // Allow for site and per-namespace customization of contribution/copyright notice. wfRunHooks( 'EditPageCopyrightWarning', array( $this->mTitle, &$copywarnMsg ) ); - + return "<div id=\"editpage-copywarn\">\n" . call_user_func_array("wfMsgNoTrans", $copywarnMsg) . "\n</div>"; } - + protected function showStandardInputs( &$tabindex = 2 ) { global $wgOut, $wgUser; $wgOut->addHTML( "<div class='editOptions'>\n" ); @@ -1818,7 +1857,7 @@ INPUTS * @return string */ function getPreviewText() { - global $wgOut, $wgUser, $wgTitle, $wgParser, $wgLang, $wgContLang, $wgMessageCache; + global $wgOut, $wgUser, $wgParser, $wgMessageCache; wfProfileIn( __METHOD__ ); @@ -1841,54 +1880,71 @@ INPUTS if ( $wgRawHtml && !$this->mTokenOk ) { // Could be an offsite preview attempt. This is very unsafe if // HTML is enabled, as it could be an attack. - return $wgOut->parse( "<div class='previewnote'>" . + $parsedNote = $wgOut->parse( "<div class='previewnote'>" . wfMsg( 'session_fail_preview_html' ) . "</div>" ); + wfProfileOut( __METHOD__ ); + return $parsedNote; } # don't parse user css/js, show message about preview - # XXX: stupid php bug won't let us use $wgTitle->isCssJsSubpage() here + # XXX: stupid php bug won't let us use $wgTitle->isCssJsSubpage() here -- This note has been there since r3530. Sure the bug was fixed time ago? + + if ( $this->isCssJsSubpage || $this->mTitle->isCssOrJsPage() ) { + $level = 'user'; + if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) { + $level = 'site'; + } - if ( $this->isCssJsSubpage ) { + # Used messages to make sure grep find them: + # Messages: usercsspreview, userjspreview, sitecsspreview, sitejspreview if (preg_match( "/\\.css$/", $this->mTitle->getText() ) ) { - $previewtext = wfMsg( 'usercsspreview' ); - } else if (preg_match( "/\\.js$/", $this->mTitle->getText() ) ) { - $previewtext = wfMsg( 'userjspreview' ); + $previewtext = "<div id='mw-{$level}csspreview'>\n" . wfMsg( "{$level}csspreview" ) . "\n</div>"; + $class = "mw-code mw-css"; + } elseif (preg_match( "/\\.js$/", $this->mTitle->getText() ) ) { + $previewtext = "<div id='mw-{$level}jspreview'>\n" . wfMsg( "{$level}jspreview" ) . "\n</div>"; + $class = "mw-code mw-js"; + } else { + throw new MWException( 'A CSS/JS (sub)page but which is not css nor js!' ); } + $parserOptions->setTidy( true ); $parserOutput = $wgParser->parse( $previewtext, $this->mTitle, $parserOptions ); $previewHTML = $parserOutput->mText; - } elseif ( $rt = Title::newFromRedirectArray( $this->textbox1 ) ) { - $previewHTML = $this->mArticle->viewRedirect( $rt, false ); + $previewHTML .= "<pre class=\"$class\" dir=\"ltr\">\n" . htmlspecialchars( $this->textbox1 ) . "\n</pre>\n"; } else { - $toparse = $this->textbox1; + $rt = Title::newFromRedirectArray( $this->textbox1 ); + if ( $rt ) { + $previewHTML = $this->mArticle->viewRedirect( $rt, false ); + } else { + $toparse = $this->textbox1; - # If we're adding a comment, we need to show the - # summary as the headline - if ( $this->section == "new" && $this->summary != "" ) { - $toparse = "== {$this->summary} ==\n\n" . $toparse; - } + # If we're adding a comment, we need to show the + # summary as the headline + if ( $this->section == "new" && $this->summary != "" ) { + $toparse = "== {$this->summary} ==\n\n" . $toparse; + } - wfRunHooks( 'EditPageGetPreviewText', array( $this, &$toparse ) ); - - // Parse mediawiki messages with correct target language - if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) { - list( /* $unused */, $lang ) = $wgMessageCache->figureMessage( $this->mTitle->getText() ); - $obj = wfGetLangObj( $lang ); - $parserOptions->setTargetLanguage( $obj ); - } + wfRunHooks( 'EditPageGetPreviewText', array( $this, &$toparse ) ); + // Parse mediawiki messages with correct target language + if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) { + list( /* $unused */, $lang ) = $wgMessageCache->figureMessage( $this->mTitle->getText() ); + $obj = wfGetLangObj( $lang ); + $parserOptions->setTargetLanguage( $obj ); + } - $parserOptions->setTidy( true ); - $parserOptions->enableLimitReport(); - $parserOutput = $wgParser->parse( $this->mArticle->preSaveTransform( $toparse ), + $parserOptions->setTidy( true ); + $parserOptions->enableLimitReport(); + $parserOutput = $wgParser->parse( $this->mArticle->preSaveTransform( $toparse ), $this->mTitle, $parserOptions ); - $previewHTML = $parserOutput->getText(); - $this->mParserOutput = $parserOutput; - $wgOut->addParserOutputNoText( $parserOutput ); + $previewHTML = $parserOutput->getText(); + $this->mParserOutput = $parserOutput; + $wgOut->addParserOutputNoText( $parserOutput ); - if ( count( $parserOutput->getWarnings() ) ) { - $note .= "\n\n" . implode( "\n\n", $parserOutput->getWarnings() ); + if ( count( $parserOutput->getWarnings() ) ) { + $note .= "\n\n" . implode( "\n\n", $parserOutput->getWarnings() ); + } } } @@ -1991,8 +2047,9 @@ INPUTS * Produce the stock "your edit contains spam" page * * @param $match Text which triggered one or more filters + * @deprecated Use method spamPageWithContent() instead */ - function spamPage( $match = false ) { + static function spamPage( $match = false ) { global $wgOut, $wgTitle; $wgOut->setPageTitle( wfMsg( 'spamprotectiontitle' ) ); @@ -2001,13 +2058,46 @@ INPUTS $wgOut->addHTML( '<div id="spamprotected">' ); $wgOut->addWikiMsg( 'spamprotectiontext' ); - if ( $match ) + if ( $match ) { $wgOut->addWikiMsg( 'spamprotectionmatch', wfEscapeWikiText( $match ) ); + } $wgOut->addHTML( '</div>' ); $wgOut->returnToMain( false, $wgTitle ); } + /** + * Show "your edit contains spam" page with your diff and text + * + * @param $match Text which triggered one or more filters + */ + public function spamPageWithContent( $match = false ) { + global $wgOut, $wgTitle; + $this->textbox2 = $this->textbox1; + + $wgOut->setPageTitle( wfMsg( 'spamprotectiontitle' ) ); + $wgOut->setRobotPolicy( 'noindex,nofollow' ); + $wgOut->setArticleRelated( false ); + + $wgOut->addHTML( '<div id="spamprotected">' ); + $wgOut->addWikiMsg( 'spamprotectiontext' ); + if ( $match ) { + $wgOut->addWikiMsg( 'spamprotectionmatch', wfEscapeWikiText( $match ) ); + } + $wgOut->addHTML( '</div>' ); + + $wgOut->wrapWikiMsg( '<h2>$1</h2>', "yourdiff" ); + $de = new DifferenceEngine( $this->mTitle ); + $de->setText( $this->getContent(), $this->textbox2 ); + $de->showDiff( wfMsg( "storedversion" ), wfMsg( "yourtext" ) ); + + $wgOut->wrapWikiMsg( '<h2>$1</h2>', "yourtext" ); + $this->showTextbox2(); + + $wgOut->addReturnTo( $wgTitle, array( 'action' => 'edit' ) ); + } + + /** * @private * @todo document @@ -2076,8 +2166,8 @@ INPUTS /** * Format an anchor fragment as it would appear for a given section name - * @param string $text - * @return string + * @param $text String + * @return String * @private */ function sectionAnchor( $text ) { @@ -2093,7 +2183,10 @@ INPUTS * @return string */ static function getEditToolbar() { - global $wgStylePath, $wgContLang, $wgLang; + global $wgStylePath, $wgContLang, $wgLang, $wgOut; + global $wgUseTeX, $wgEnableUploads, $wgForeignFileRepos; + + $imagesAvailable = $wgEnableUploads || count( $wgForeignFileRepos ); /** @@ -2153,7 +2246,7 @@ INPUTS 'tip' => wfMsg( 'headline_tip' ), 'key' => 'H' ), - array( + $imagesAvailable ? array( 'image' => $wgLang->getImageFile( 'button-image' ), 'id' => 'mw-editbutton-image', 'open' => '[[' . $wgContLang->getNsText( NS_FILE ) . ':', @@ -2161,8 +2254,8 @@ INPUTS 'sample' => wfMsg( 'image_sample' ), 'tip' => wfMsg( 'image_tip' ), 'key' => 'D' - ), - array( + ) : false, + $imagesAvailable ? array( 'image' => $wgLang->getImageFile( 'button-media' ), 'id' => 'mw-editbutton-media', 'open' => '[[' . $wgContLang->getNsText( NS_MEDIA ) . ':', @@ -2170,8 +2263,8 @@ INPUTS 'sample' => wfMsg( 'media_sample' ), 'tip' => wfMsg( 'media_tip' ), 'key' => 'M' - ), - array( + ) : false, + $wgUseTeX ? array( 'image' => $wgLang->getImageFile( 'button-math' ), 'id' => 'mw-editbutton-math', 'open' => "<math>", @@ -2179,7 +2272,7 @@ INPUTS 'sample' => wfMsg( 'math_sample' ), 'tip' => wfMsg( 'math_tip' ), 'key' => 'C' - ), + ) : false, array( 'image' => $wgLang->getImageFile( 'button-nowiki' ), 'id' => 'mw-editbutton-nowiki', @@ -2212,6 +2305,10 @@ INPUTS $script = ''; foreach ( $toolarray as $tool ) { + if ( !$tool ) { + continue; + } + $params = array( $image = $wgStylePath . '/common/images/' . $tool['image'], // Note that we use the tip both for the ALT tag and the TITLE tag of the image. @@ -2229,8 +2326,11 @@ INPUTS array_map( array( 'Xml', 'encodeJsVar' ), $params ) ); $script .= "addButton($paramList);\n"; } - $toolbar .= Html::inlineScript( "\n$script\n" ); - + + $wgOut->addScript( Html::inlineScript( + "if ( window.mediaWiki ) { $script }" + ) ); + $toolbar .= "\n</div>"; wfRunHooks( 'EditPageBeforeEditToolbar', array( &$toolbar ) ); @@ -2264,7 +2364,9 @@ INPUTS ); $checkboxes['minor'] = Xml::check( 'wpMinoredit', $checked['minor'], $attribs ) . - " <label for='wpMinoredit'" . $skin->tooltip( 'minoredit', 'withaccess' ) . ">{$minorLabel}</label>"; + " <label for='wpMinoredit' id='mw-editpage-minoredit'" . + Xml::expandAttributes( array( 'title' => $skin->titleAttrib( 'minoredit', 'withaccess' ) ) ) . + ">{$minorLabel}</label>"; } $watchLabel = wfMsgExt( 'watchthis', array( 'parseinline' ) ); @@ -2277,7 +2379,9 @@ INPUTS ); $checkboxes['watch'] = Xml::check( 'wpWatchthis', $checked['watch'], $attribs ) . - " <label for='wpWatchthis'" . $skin->tooltip( 'watch', 'withaccess' ) . ">{$watchLabel}</label>"; + " <label for='wpWatchthis' id='mw-editpage-watch'" . + Xml::expandAttributes( array( 'title' => $skin->titleAttrib( 'watch', 'withaccess' ) ) ) . + ">{$watchLabel}</label>"; } wfRunHooks( 'EditPageBeforeEditChecks', array( &$this, &$checkboxes, &$tabindex ) ); return $checkboxes; @@ -2291,7 +2395,7 @@ INPUTS * * @return array */ - public function getEditButtons(&$tabindex) { + public function getEditButtons( &$tabindex ) { $buttons = array(); $temp = array( @@ -2415,9 +2519,9 @@ INPUTS * Filter an input field through a Unicode de-armoring process if it * came from an old browser with known broken Unicode editing issues. * - * @param WebRequest $request - * @param string $field - * @return string + * @param $request WebRequest + * @param $field String + * @return String * @private */ function safeUnicodeInput( $request, $field ) { @@ -2438,8 +2542,8 @@ INPUTS * Filter an output field through a Unicode armoring process if it is * going to an old browser with known broken Unicode editing issues. * - * @param string $text - * @return string + * @param $text String + * @return String * @private */ function safeUnicodeOutput( $text ) { @@ -2459,8 +2563,8 @@ INPUTS * Preexisting such character references will have a 0 added to them * to ensure that round-trips do not alter the original data. * - * @param string $invalue - * @return string + * @param $invalue String + * @return String * @private */ function makesafe( $invalue ) { @@ -2501,8 +2605,8 @@ INPUTS * back to UTF-8. Used to protect data from corruption by broken web browsers * as listed in $wgBrowserBlackList. * - * @param string $invalue - * @return string + * @param $invalue String + * @return String * @private */ function unmakesafe( $invalue ) { @@ -2573,7 +2677,7 @@ INPUTS return false; case self::AS_SPAM_ERROR: - $this->spamPage( $resultDetails['spam'] ); + $this->spamPageWithContent( $resultDetails['spam'] ); return false; case self::AS_BLOCKED_PAGE_FOR_USER: @@ -2612,7 +2716,7 @@ INPUTS } function getBaseRevision() { - if ( $this->mBaseRevision == false ) { + if ( !$this->mBaseRevision ) { $db = wfGetDB( DB_MASTER ); $baseRevision = Revision::loadFromTimestamp( $db, $this->mTitle, $this->edittime ); @@ -2620,5 +2724,5 @@ INPUTS } else { return $this->mBaseRevision; } - } + } } diff --git a/includes/EmaillingJob.php b/includes/EmaillingJob.php deleted file mode 100644 index 380c8982..00000000 --- a/includes/EmaillingJob.php +++ /dev/null @@ -1,26 +0,0 @@ -<?php - -/** - * Old job used for sending single notification emails; - * kept for backwards-compatibility - * - * @ingroup JobQueue - */ -class EmaillingJob extends Job { - - function __construct( $title, $params, $id = 0 ) { - parent::__construct( 'sendMail', Title::newMainPage(), $params, $id ); - } - - function run() { - userMailer( - $this->params['to'], - $this->params['from'], - $this->params['subj'], - $this->params['body'], - $this->params['replyto'] - ); - return true; - } - -} diff --git a/includes/EnotifNotifyJob.php b/includes/EnotifNotifyJob.php deleted file mode 100644 index f7178d0f..00000000 --- a/includes/EnotifNotifyJob.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php - -/** - * Job for email notification mails - * - * @ingroup JobQueue - */ -class EnotifNotifyJob extends Job { - - function __construct( $title, $params, $id = 0 ) { - parent::__construct( 'enotifNotify', $title, $params, $id ); - } - - function run() { - $enotif = new EmailNotification(); - // Get the user from ID (rename safe). Anons are 0, so defer to name. - if( isset($this->params['editorID']) && $this->params['editorID'] ) { - $editor = User::newFromId( $this->params['editorID'] ); - // B/C, only the name might be given. - } else { - $editor = User::newFromName( $this->params['editor'], false ); - } - $enotif->actuallyNotifyOnPageChange( - $editor, - $this->title, - $this->params['timestamp'], - $this->params['summary'], - $this->params['minorEdit'], - $this->params['oldid'], - $this->params['watchers'] - ); - return true; - } - -} diff --git a/includes/Exception.php b/includes/Exception.php index f6bc6f87..ff5d4b19 100644 --- a/includes/Exception.php +++ b/includes/Exception.php @@ -1,10 +1,17 @@ <?php +/** + * Exception class and handler + * + * @file + */ + /** * @defgroup Exception Exception */ /** * MediaWiki exception + * * @ingroup Exception */ class MWException extends Exception { @@ -25,37 +32,45 @@ class MWException extends Exception { */ function useMessageCache() { global $wgLang; + foreach ( $this->getTrace() as $frame ) { if ( isset( $frame['class'] ) && $frame['class'] === 'LocalisationCache' ) { return false; } } + return is_object( $wgLang ); } /** * Run hook to allow extensions to modify the text of the exception * - * @param String $name class name of the exception - * @param Array $args arguments to pass to the callback functions - * @return mixed string to output or null if any hook has been called + * @param $name String: class name of the exception + * @param $args Array: arguments to pass to the callback functions + * @return Mixed: string to output or null if any hook has been called */ function runHooks( $name, $args = array() ) { global $wgExceptionHooks; - if( !isset( $wgExceptionHooks ) || !is_array( $wgExceptionHooks ) ) + + if ( !isset( $wgExceptionHooks ) || !is_array( $wgExceptionHooks ) ) { return; // Just silently ignore - if( !array_key_exists( $name, $wgExceptionHooks ) || !is_array( $wgExceptionHooks[ $name ] ) ) + } + + if ( !array_key_exists( $name, $wgExceptionHooks ) || !is_array( $wgExceptionHooks[ $name ] ) ) { return; + } + $hooks = $wgExceptionHooks[ $name ]; $callargs = array_merge( array( $this ), $args ); - foreach( $hooks as $hook ) { - if( is_string( $hook ) || ( is_array( $hook ) && count( $hook ) >= 2 && is_string( $hook[0] ) ) ) { //'function' or array( 'class', hook' ) + foreach ( $hooks as $hook ) { + if ( is_string( $hook ) || ( is_array( $hook ) && count( $hook ) >= 2 && is_string( $hook[0] ) ) ) { // 'function' or array( 'class', hook' ) $result = call_user_func_array( $hook, $callargs ); } else { $result = null; } - if( is_string( $result ) ) + + if ( is_string( $result ) ) return $result; } } @@ -63,14 +78,15 @@ class MWException extends Exception { /** * Get a message from i18n * - * @param String $key message name - * @param String $fallback default message if the message cache can't be - * called by the exception + * @param $key String: message name + * @param $fallback String: default message if the message cache can't be + * called by the exception * The function also has other parameters that are arguments for the message * @return String message with arguments replaced */ function msg( $key, $fallback /*[, params...] */ ) { $args = array_slice( func_get_args(), 2 ); + if ( $this->useMessageCache() ) { return wfMsgReal( $key, $args ); } else { @@ -87,7 +103,8 @@ class MWException extends Exception { */ function getHTML() { global $wgShowExceptionDetails; - if( $wgShowExceptionDetails ) { + + if ( $wgShowExceptionDetails ) { return '<p>' . nl2br( htmlspecialchars( $this->getMessage() ) ) . '</p><p>Backtrace:</p><p>' . nl2br( htmlspecialchars( $this->getTraceAsString() ) ) . "</p>\n"; @@ -104,7 +121,8 @@ class MWException extends Exception { */ function getText() { global $wgShowExceptionDetails; - if( $wgShowExceptionDetails ) { + + if ( $wgShowExceptionDetails ) { return $this->getMessage() . "\nBacktrace:\n" . $this->getTraceAsString() . "\n"; } else { @@ -119,6 +137,7 @@ class MWException extends Exception { return wfMsg( 'internalerror' ); } else { global $wgSitename; + return "$wgSitename error"; } } @@ -127,13 +146,15 @@ class MWException extends Exception { * Return the requested URL and point to file and line number from which the * exception occured * - * @return string + * @return String */ function getLogMessage() { global $wgRequest; + $file = $this->getFile(); $line = $this->getLine(); $message = $this->getMessage(); + if ( isset( $wgRequest ) ) { $url = $wgRequest->getRequestURL(); if ( !$url ) { @@ -149,6 +170,7 @@ class MWException extends Exception { /** Output the exception report using HTML */ function reportHTML() { global $wgOut; + if ( $this->useOutputPage() ) { $wgOut->setPageTitle( $this->getPageTitle() ); $wgOut->setRobotPolicy( "noindex,nofollow" ); @@ -156,16 +178,21 @@ class MWException extends Exception { $wgOut->enableClientCache( false ); $wgOut->redirect( '' ); $wgOut->clearHTML(); - if( $hookResult = $this->runHooks( get_class( $this ) ) ) { + + $hookResult = $this->runHooks( get_class( $this ) ); + if ( $hookResult ) { $wgOut->addHTML( $hookResult ); } else { $wgOut->addHTML( $this->getHTML() ); } + $wgOut->output(); } else { - if( $hookResult = $this->runHooks( get_class( $this ) . "Raw" ) ) { + $hookResult = $this->runHooks( get_class( $this ) . "Raw" ); + if ( $hookResult ) { die( $hookResult ); } + if ( defined( 'MEDIAWIKI_INSTALL' ) || $this->htmlBodyOnly() ) { echo $this->getHTML(); } else { @@ -182,9 +209,11 @@ class MWException extends Exception { */ function report() { $log = $this->getLogMessage(); + if ( $log ) { wfDebugLog( 'exception', $log ); } + if ( self::isCommandLine() ) { wfPrintError( $this->getText() ); } else { @@ -197,22 +226,25 @@ class MWException extends Exception { * $wgOut to output the exception. */ function htmlHeader() { - global $wgLogo, $wgSitename, $wgOutputEncoding; + global $wgLogo, $wgOutputEncoding; if ( !headers_sent() ) { header( 'HTTP/1.0 500 Internal Server Error' ); - header( 'Content-type: text/html; charset='.$wgOutputEncoding ); + header( 'Content-type: text/html; charset=' . $wgOutputEncoding ); /* Don't cache error pages! They cause no end of trouble... */ header( 'Cache-control: none' ); header( 'Pragma: nocache' ); } - $title = $this->getPageTitle(); + + $logo = htmlspecialchars( $wgLogo, ENT_QUOTES ); + $title = htmlspecialchars( $this->getPageTitle() ); + return "<html> <head> <title>$title -

    $title

    +

    $title

    "; } @@ -222,7 +254,7 @@ class MWException extends Exception { function htmlFooter() { return ""; } - + /** * headers handled by subclass? */ @@ -267,6 +299,7 @@ class ErrorPageError extends MWException { function report() { global $wgOut; + $wgOut->showErrorPage( $this->title, $this->msg ); $wgOut->output(); } @@ -283,7 +316,10 @@ function wfInstallExceptionHandler() { * Report an exception to the user */ function wfReportException( Exception $e ) { + global $wgShowExceptionDetails; + $cmdLine = MWException::isCommandLine(); + if ( $e instanceof MWException ) { try { $e->report(); @@ -292,28 +328,36 @@ function wfReportException( Exception $e ) { // Show a simpler error message for the original exception, // don't try to invoke report() $message = "MediaWiki internal error.\n\n"; - if ( $GLOBALS['wgShowExceptionDetails'] ) - $message .= "Original exception: " . $e->__toString(); - $message .= "\n\nException caught inside exception handler"; - if ( $GLOBALS['wgShowExceptionDetails'] ) - $message .= ": " . $e2->__toString(); + + if ( $wgShowExceptionDetails ) { + $message .= 'Original exception: ' . $e->__toString() . "\n\n" . + 'Exception caught inside exception handler: ' . $e2->__toString(); + } else { + $message .= "Exception caught inside exception handler.\n\n" . + "Set \$wgShowExceptionDetails = true; at the bottom of LocalSettings.php " . + "to show detailed debugging information."; + } + $message .= "\n"; + if ( $cmdLine ) { wfPrintError( $message ); } else { - echo nl2br( htmlspecialchars( $message ) ). "\n"; + echo nl2br( htmlspecialchars( $message ) ) . "\n"; } } } else { $message = "Unexpected non-MediaWiki exception encountered, of type \"" . get_class( $e ) . "\"\n" . $e->__toString() . "\n"; - if ( $GLOBALS['wgShowExceptionDetails'] ) { - $message .= "\n" . $e->getTraceAsString() ."\n"; + + if ( $wgShowExceptionDetails ) { + $message .= "\n" . $e->getTraceAsString() . "\n"; } + if ( $cmdLine ) { wfPrintError( $message ); } else { - echo nl2br( htmlspecialchars( $message ) ). "\n"; + echo nl2br( htmlspecialchars( $message ) ) . "\n"; } } } @@ -323,7 +367,7 @@ function wfReportException( Exception $e ) { * Use this in command line mode only (see isCommandLine) */ function wfPrintError( $message ) { - #NOTE: STDERR may not be available, especially if php-cgi is used from the command line (bug #15602). + # NOTE: STDERR may not be available, especially if php-cgi is used from the command line (bug #15602). # Try to produce meaningful output anyway. Using echo may corrupt output to STDOUT though. if ( defined( 'STDERR' ) ) { fwrite( STDERR, $message ); @@ -345,9 +389,10 @@ function wfPrintError( $message ) { */ function wfExceptionHandler( $e ) { global $wgFullyInitialised; + wfReportException( $e ); - // Final cleanup, similar to wfErrorExit() + // Final cleanup if ( $wgFullyInitialised ) { try { wfLogProfilingData(); // uses $wgRequest, hence the $wgFullyInitialised condition diff --git a/includes/Exif.php b/includes/Exif.php index 594e633a..630821c3 100644 --- a/includes/Exif.php +++ b/includes/Exif.php @@ -1,5 +1,7 @@ mExif = $exif; } @@ -1146,15 +1148,3 @@ class FormatExif { return $a; } } - -/** - * MW 1.6 compatibility - */ -define( 'MW_EXIF_BYTE', Exif::BYTE ); -define( 'MW_EXIF_ASCII', Exif::ASCII ); -define( 'MW_EXIF_SHORT', Exif::SHORT ); -define( 'MW_EXIF_LONG', Exif::LONG ); -define( 'MW_EXIF_RATIONAL', Exif::RATIONAL ); -define( 'MW_EXIF_UNDEFINED', Exif::UNDEFINED ); -define( 'MW_EXIF_SLONG', Exif::SLONG ); -define( 'MW_EXIF_SRATIONAL', Exif::SRATIONAL ); diff --git a/includes/Export.php b/includes/Export.php index e8e74289..e7cd4d3f 100644 --- a/includes/Export.php +++ b/includes/Export.php @@ -1,21 +1,27 @@ -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html +/** + * Base classes for dumps and export + * + * Copyright © 2003, 2005, 2006 Brion Vibber + * http://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file + */ /** * @defgroup Dump Dump @@ -124,7 +130,7 @@ class WikiExporter { public function pageByName( $name ) { $title = Title::newFromText( $name ); if( is_null( $title ) ) { - return new WikiError( "Can't export invalid title" ); + throw new MWException( "Can't export invalid title" ); } else { return $this->pageByTitle( $title ); } @@ -152,17 +158,16 @@ class WikiExporter { # Not called by default (depends on $this->list_authors) # Can be set by Special:Export when not exporting whole history protected function do_list_authors( $page , $revision , $cond ) { - $fname = "do_list_authors" ; - wfProfileIn( $fname ); + wfProfileIn( __METHOD__ ); $this->author_list = ""; //rev_deleted $nothidden = '('.$this->db->bitAnd('rev_deleted', Revision::DELETED_USER) . ') = 0'; $sql = "SELECT DISTINCT rev_user_text,rev_user FROM {$page},{$revision} WHERE page_id=rev_page AND $nothidden AND " . $cond ; - $result = $this->db->query( $sql, $fname ); + $result = $this->db->query( $sql, __METHOD__ ); $resultset = $this->db->resultObject( $result ); - while( $row = $resultset->fetchObject() ) { + foreach ( $resultset as $row ) { $this->author_list .= "" . "" . htmlentities( $row->rev_user_text ) . @@ -172,8 +177,8 @@ class WikiExporter { "" . ""; } - wfProfileOut( $fname ); $this->author_list .= ""; + wfProfileOut( __METHOD__ ); } protected function dumpFrom( $cond = '' ) { @@ -246,12 +251,12 @@ class WikiExporter { # One, and only one hook should set this, and return false if( wfRunHooks( 'WikiExporter::dumpStableQuery', array(&$tables,&$opts,&$join) ) ) { wfProfileOut( __METHOD__ ); - return new WikiError( __METHOD__." given invalid history dump type." ); + throw new MWException( __METHOD__." given invalid history dump type." ); } } else { # Uknown history specification parameter? wfProfileOut( __METHOD__ ); - return new WikiError( __METHOD__." given invalid history dump type." ); + throw new MWException( __METHOD__." given invalid history dump type." ); } # Query optimization hacks if( $cond == '' ) { @@ -301,7 +306,7 @@ class WikiExporter { */ protected function outputPageStream( $resultset ) { $last = null; - while( $row = $resultset->fetchObject() ) { + foreach ( $resultset as $row ) { if( is_null( $last ) || $last->page_namespace != $row->page_namespace || $last->page_title != $row->page_title ) { @@ -332,7 +337,7 @@ class WikiExporter { } protected function outputLogStream( $resultset ) { - while( $row = $resultset->fetchObject() ) { + foreach ( $resultset as $row ) { $output = $this->writer->writeLogItem( $row ); $this->sink->writeLogItem( $row, $output ); } @@ -349,7 +354,7 @@ class XmlDumpWriter { * @return string */ function schemaVersion() { - return "0.4"; + return "0.5"; } /** @@ -363,7 +368,7 @@ class XmlDumpWriter { * @return string */ function openStream() { - global $wgContLanguageCode; + global $wgLanguageCode; $ver = $this->schemaVersion(); return Xml::element( 'mediawiki', array( 'xmlns' => "http://www.mediawiki.org/xml/export-$ver/", @@ -371,7 +376,7 @@ class XmlDumpWriter { 'xsi:schemaLocation' => "http://www.mediawiki.org/xml/export-$ver/ " . "http://www.mediawiki.org/xml/export-$ver.xsd", 'version' => $ver, - 'xml:lang' => $wgContLanguageCode ), + 'xml:lang' => $wgLanguageCode ), null ) . "\n" . $this->siteInfo(); @@ -477,8 +482,7 @@ class XmlDumpWriter { * @access private */ function writeRevision( $row ) { - $fname = 'WikiExporter::dumpRev'; - wfProfileIn( $fname ); + wfProfileIn( __METHOD__ ); $out = " \n"; $out .= " " . Xml::element( 'id', null, strval( $row->rev_id ) ) . "\n"; @@ -507,12 +511,12 @@ class XmlDumpWriter { // Raw text from the database may have invalid chars $text = strval( Revision::getRevisionText( $row ) ); $out .= " " . Xml::elementClean( 'text', - array( 'xml:space' => 'preserve' ), + array( 'xml:space' => 'preserve', 'bytes' => $row->rev_len ), strval( $text ) ) . "\n"; } else { // Stub output $out .= " " . Xml::element( 'text', - array( 'id' => $row->rev_text_id ), + array( 'id' => $row->rev_text_id, 'bytes' => $row->rev_len ), "" ) . "\n"; } @@ -520,7 +524,7 @@ class XmlDumpWriter { $out .= " \n"; - wfProfileOut( $fname ); + wfProfileOut( __METHOD__ ); return $out; } @@ -533,8 +537,7 @@ class XmlDumpWriter { * @access private */ function writeLogItem( $row ) { - $fname = 'WikiExporter::writeLogItem'; - wfProfileIn( $fname ); + wfProfileIn( __METHOD__ ); $out = " \n"; $out .= " " . Xml::element( 'id', null, strval( $row->log_id ) ) . "\n"; @@ -568,7 +571,7 @@ class XmlDumpWriter { $out .= " \n"; - wfProfileOut( $fname ); + wfProfileOut( __METHOD__ ); return $out; } @@ -666,7 +669,7 @@ class DumpOutput { class DumpFileOutput extends DumpOutput { var $handle; - function DumpFileOutput( $file ) { + function __construct( $file ) { $this->handle = fopen( $file, "wt" ); } @@ -682,7 +685,7 @@ class DumpFileOutput extends DumpOutput { * @ingroup Dump */ class DumpPipeOutput extends DumpFileOutput { - function DumpPipeOutput( $command, $file = null ) { + function __construct( $command, $file = null ) { if( !is_null( $file ) ) { $command .= " > " . wfEscapeShellArg( $file ); } @@ -695,8 +698,8 @@ class DumpPipeOutput extends DumpFileOutput { * @ingroup Dump */ class DumpGZipOutput extends DumpPipeOutput { - function DumpGZipOutput( $file ) { - parent::DumpPipeOutput( "gzip", $file ); + function __construct( $file ) { + parent::__construct( "gzip", $file ); } } @@ -705,8 +708,8 @@ class DumpGZipOutput extends DumpPipeOutput { * @ingroup Dump */ class DumpBZip2Output extends DumpPipeOutput { - function DumpBZip2Output( $file ) { - parent::DumpPipeOutput( "bzip2", $file ); + function __construct( $file ) { + parent::__construct( "bzip2", $file ); } } @@ -715,12 +718,12 @@ class DumpBZip2Output extends DumpPipeOutput { * @ingroup Dump */ class Dump7ZipOutput extends DumpPipeOutput { - function Dump7ZipOutput( $file ) { + function __construct( $file ) { $command = "7za a -bd -si " . wfEscapeShellArg( $file ); // Suppress annoying useless crap from p7zip // Unfortunately this could suppress real error messages too $command .= ' >' . wfGetNull() . ' 2>&1'; - parent::DumpPipeOutput( $command ); + parent::__construct( $command ); } } @@ -733,7 +736,7 @@ class Dump7ZipOutput extends DumpPipeOutput { * @ingroup Dump */ class DumpFilter { - function DumpFilter( &$sink ) { + function __construct( &$sink ) { $this->sink =& $sink; } @@ -796,8 +799,8 @@ class DumpNamespaceFilter extends DumpFilter { var $invert = false; var $namespaces = array(); - function DumpNamespaceFilter( &$sink, $param ) { - parent::DumpFilter( $sink ); + function __construct( &$sink, $param ) { + parent::__construct( $sink ); $constants = array( "NS_MAIN" => NS_MAIN, @@ -882,7 +885,7 @@ class DumpLatestFilter extends DumpFilter { * @ingroup Dump */ class DumpMultiWriter { - function DumpMultiWriter( $sinks ) { + function __construct( $sinks ) { $this->sinks = $sinks; $this->count = count( $sinks ); } @@ -919,8 +922,7 @@ class DumpMultiWriter { } function xmlsafe( $string ) { - $fname = 'xmlsafe'; - wfProfileIn( $fname ); + wfProfileIn( __FUNCTION__ ); /** * The page may contain old data which has not been properly normalized. @@ -930,6 +932,6 @@ function xmlsafe( $string ) { $string = UtfNormal::cleanUp( $string ); $string = htmlspecialchars( $string ); - wfProfileOut( $fname ); + wfProfileOut( __FUNCTION__ ); return $string; } diff --git a/includes/ExternalEdit.php b/includes/ExternalEdit.php index 1c58f442..7109c1ac 100644 --- a/includes/ExternalEdit.php +++ b/includes/ExternalEdit.php @@ -1,7 +1,10 @@ */ @@ -15,7 +18,6 @@ * and save the modified data back to the server. * */ - class ExternalEdit { function __construct( $article, $mode ) { @@ -51,6 +53,11 @@ class ExternalEdit { } $special=$wgLang->getNsText(NS_SPECIAL); $control = << &$ret ); + $externalBlobCache = array( $cacheID => &$ret ); return $ret; } diff --git a/includes/ExternalUser.php b/includes/ExternalUser.php index 65dae617..d1eff916 100644 --- a/includes/ExternalUser.php +++ b/includes/ExternalUser.php @@ -1,21 +1,24 @@ -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - /** - * @defgroup Feed Feed - * * Basic support for outputting syndication feeds in RSS, other formats. + * * Contain a feed class as well as classes to build rss / atom ... feeds * Available feeds are defined in Defines.php * + * Copyright © 2004 Brion Vibber + * http://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * * @file */ +/** + * @defgroup Feed Feed + */ + /** * A base class for basic support for outputting syndication feeds in RSS and other formats. * @@ -99,7 +101,7 @@ class FeedItem { */ public function setUniqueId($uniqueId, $RSSisPermalink = False) { $this->UniqueId = $uniqueId; - $this->RSSIsPermalink = $isPermalink; + $this->RSSIsPermalink = $RSSisPermalink; } /** @@ -135,8 +137,8 @@ class FeedItem { * @return String */ public function getLanguage() { - global $wgContLanguageCode; - return $wgContLanguageCode; + global $wgLanguageCode; + return $wgLanguageCode; } /** @@ -303,7 +305,7 @@ class RSSFeed extends ChannelFeed { <?php print $item->getTitle() ?> getUrl() ?> - RSSIsPermalink ) print ' isPermaLink="true"' ?>>getUniqueId() ?> + RSSIsPermalink ) print ' isPermaLink="false"' ?>>getUniqueId() ?> getDescription() ?> getDate() ) { ?>formatTime( $item->getDate() ) ?> getAuthor() ) { ?>getAuthor() ?> diff --git a/includes/FeedUtils.php b/includes/FeedUtils.php index 7e841f32..9daffc12 100644 --- a/includes/FeedUtils.php +++ b/includes/FeedUtils.php @@ -86,7 +86,7 @@ class FeedUtils { * @return String */ public static function formatDiffRow( $title, $oldid, $newid, $timestamp, $comment, $actiontext='' ) { - global $wgFeedDiffCutoff, $wgContLang, $wgUser; + global $wgFeedDiffCutoff, $wgLang, $wgUser; wfProfileIn( __METHOD__ ); $skin = $wgUser->getSkin(); @@ -108,9 +108,9 @@ class FeedUtils { wfProfileIn( __METHOD__."-dodiff" ); #$diffText = $de->getDiff( wfMsg( 'revisionasof', - # $wgContLang->timeanddate( $timestamp ), - # $wgContLang->date( $timestamp ), - # $wgContLang->time( $timestamp ) ), + # $wgLang->timeanddate( $timestamp ), + # $wgLang->date( $timestamp ), + # $wgLang->time( $timestamp ) ), # wfMsg( 'currentrev' ) ); // Don't bother generating the diff if we won't be able to show it @@ -119,12 +119,12 @@ class FeedUtils { $diffText = $de->getDiff( wfMsg( 'previousrevision' ), // hack wfMsg( 'revisionasof', - $wgContLang->timeanddate( $timestamp ), - $wgContLang->date( $timestamp ), - $wgContLang->time( $timestamp ) ) ); + $wgLang->timeanddate( $timestamp ), + $wgLang->date( $timestamp ), + $wgLang->time( $timestamp ) ) ); } - if ( ( strlen( $diffText ) > $wgFeedDiffCutoff ) || ( $wgFeedDiffCutoff <= 0 ) ) { + if ( $wgFeedDiffCutoff <= 0 || ( strlen( $diffText ) > $wgFeedDiffCutoff ) ) { // Omit large diffs $diffLink = $title->escapeFullUrl( 'diff=' . $newid . diff --git a/includes/FileDeleteForm.php b/includes/FileDeleteForm.php index dad19524..030330bb 100644 --- a/includes/FileDeleteForm.php +++ b/includes/FileDeleteForm.php @@ -102,34 +102,47 @@ class FileDeleteForm { public static function doDelete( &$title, &$file, &$oldimage, $reason, $suppress ) { global $wgUser; $article = null; + $status = Status::newFatal( 'error' ); + if( $oldimage ) { $status = $file->deleteOld( $oldimage, $reason, $suppress ); if( $status->ok ) { // Need to do a log item $log = new LogPage( 'delete' ); $logComment = wfMsgForContent( 'deletedrevision', $oldimage ); - if( trim( $reason ) != '' ) + if( trim( $reason ) != '' ) { $logComment .= wfMsgForContent( 'colon-separator' ) . $reason; - $log->addEntry( 'delete', $title, $logComment ); + } + $log->addEntry( 'delete', $title, $logComment ); } } else { - $status = $file->delete( $reason, $suppress ); - if( $status->ok ) { - $id = $title->getArticleID( GAID_FOR_UPDATE ); - // Need to delete the associated article - $article = new Article( $title ); - $error = ''; - if( wfRunHooks('ArticleDelete', array(&$article, &$wgUser, &$reason, &$error)) ) { - if( $article->doDeleteArticle( $reason, $suppress, $id ) ) { + $id = $title->getArticleID( Title::GAID_FOR_UPDATE ); + $article = new Article( $title ); + $error = ''; + $dbw = wfGetDB( DB_MASTER ); + try { + if( wfRunHooks( 'ArticleDelete', array( &$article, &$wgUser, &$reason, &$error ) ) ) { + // delete the associated article first + if( $article->doDeleteArticle( $reason, $suppress, $id, false ) ) { global $wgRequest; if( $wgRequest->getCheck( 'wpWatch' ) && $wgUser->isLoggedIn() ) { $article->doWatch(); } elseif( $title->userIsWatching() ) { $article->doUnwatch(); } - wfRunHooks('ArticleDeleteComplete', array(&$article, &$wgUser, $reason, $id)); + $status = $file->delete( $reason, $suppress ); + if( $status->ok ) { + $dbw->commit(); + wfRunHooks( 'ArticleDeleteComplete', array( &$article, &$wgUser, $reason, $id ) ); + } else { + $dbw->rollback(); + } } } + } catch ( MWException $e ) { + // rollback before returning to prevent UI from displaying incorrect "View or restore N deleted edits?" + $dbw->rollback(); + throw $e; } } if( $status->isGood() ) @@ -161,7 +174,7 @@ class FileDeleteForm { 'id' => 'mw-img-deleteconfirm' ) ) . Xml::openElement( 'fieldset' ) . Xml::element( 'legend', null, wfMsg( 'filedelete-legend' ) ) . - Xml::hidden( 'wpEditToken', $wgUser->editToken( $this->oldimage ) ) . + Html::hidden( 'wpEditToken', $wgUser->editToken( $this->oldimage ) ) . $this->prepareMessage( 'filedelete-intro' ) . Xml::openElement( 'table', array( 'id' => 'mw-img-deleteconfirm-table' ) ) . " @@ -241,7 +254,6 @@ class FileDeleteForm { private function prepareMessage( $message ) { global $wgLang; if( $this->oldimage ) { - $url = $this->file->getArchiveUrl( $this->oldimage ); return wfMsgExt( "{$message}-old", # To ensure grep will find them: 'filedelete-intro-old', 'filedelete-nofile-old', 'filedelete-success-old' 'parse', diff --git a/includes/FileRevertForm.php b/includes/FileRevertForm.php index eb16693a..47084aad 100644 --- a/includes/FileRevertForm.php +++ b/includes/FileRevertForm.php @@ -88,11 +88,11 @@ class FileRevertForm { * Show the confirmation form */ protected function showForm() { - global $wgOut, $wgUser, $wgRequest, $wgLang, $wgContLang; + global $wgOut, $wgUser, $wgLang, $wgContLang; $timestamp = $this->getTimestamp(); $form = Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getAction() ) ); - $form .= Xml::hidden( 'wpEditToken', $wgUser->editToken( $this->archiveName ) ); + $form .= Html::hidden( 'wpEditToken', $wgUser->editToken( $this->archiveName ) ); $form .= '
    ' . wfMsgHtml( 'filerevert-legend' ) . ''; $form .= wfMsgExt( 'filerevert-intro', 'parse', $this->title->getText(), $wgLang->date( $timestamp, true ), $wgLang->time( $timestamp, true ), diff --git a/includes/ForkController.php b/includes/ForkController.php index 7b889228..e5b44c2b 100644 --- a/includes/ForkController.php +++ b/includes/ForkController.php @@ -126,8 +126,6 @@ class ForkController { * Fork a number of worker processes. */ protected function forkWorkers( $numProcs ) { - global $wgMemc, $wgCaches, $wgMainCacheType; - $this->prepareEnvironment(); // Create the child processes diff --git a/includes/FormOptions.php b/includes/FormOptions.php index 262c8c7f..2442a330 100644 --- a/includes/FormOptions.php +++ b/includes/FormOptions.php @@ -2,16 +2,17 @@ /** * Helper class to keep track of options when mixing links and form elements. * + * Copyright © 2008, Niklas Laxström + * * @author Niklas Laxström - * @copyright Copyright © 2008, Niklas Laxström */ class FormOptions implements ArrayAccess { - const AUTO = -1; //! Automatically detects simple data types + const AUTO = -1; // ! Automatically detects simple data types const STRING = 0; const INT = 1; const BOOL = 2; - const INTNULL = 3; //! Useful for namespace selector + const INTNULL = 3; // ! Useful for namespace selector protected $options = array(); @@ -34,15 +35,15 @@ class FormOptions implements ArrayAccess { public function delete( $name ) { $this->validateName( $name, true ); - unset($this->options[$name]); + unset( $this->options[$name] ); } public static function guessType( $data ) { - if ( is_bool($data) ) { + if ( is_bool( $data ) ) { return self::BOOL; - } elseif( is_int($data) ) { + } elseif ( is_int( $data ) ) { return self::INT; - } elseif( is_string($data) ) { + } elseif ( is_string( $data ) ) { return self::STRING; } else { throw new MWException( 'Unsupported datatype' ); @@ -52,7 +53,7 @@ class FormOptions implements ArrayAccess { # Handling values public function validateName( $name, $strict = false ) { - if ( !isset($this->options[$name]) ) { + if ( !isset( $this->options[$name] ) ) { if ( $strict ) { throw new MWException( "Invalid option $name" ); } else { @@ -64,6 +65,7 @@ class FormOptions implements ArrayAccess { public function setValue( $name, $value, $force = false ) { $this->validateName( $name, true ); + if ( !$force && $value === $this->options[$name]['default'] ) { // null default values as unchanged $this->options[$name]['value'] = null; @@ -74,6 +76,7 @@ class FormOptions implements ArrayAccess { public function getValue( $name ) { $this->validateName( $name, true ); + return $this->getValueReal( $this->options[$name] ); } @@ -93,16 +96,19 @@ class FormOptions implements ArrayAccess { public function consumeValue( $name ) { $this->validateName( $name, true ); $this->options[$name]['consumed'] = true; + return $this->getValueReal( $this->options[$name] ); } public function consumeValues( /*Array*/ $names ) { $out = array(); + foreach ( $names as $name ) { $this->validateName( $name, true ); $this->options[$name]['consumed'] = true; $out[] = $this->getValueReal( $this->options[$name] ); } + return $out; } @@ -111,8 +117,9 @@ class FormOptions implements ArrayAccess { public function validateIntBounds( $name, $min, $max ) { $this->validateName( $name, true ); - if ( $this->options[$name]['type'] !== self::INT ) + if ( $this->options[$name]['type'] !== self::INT ) { throw new MWException( "Option $name is not of type int" ); + } $value = $this->getValueReal( $this->options[$name] ); $value = max( $min, min( $max, $value ) ); @@ -124,6 +131,7 @@ class FormOptions implements ArrayAccess { public function getUnconsumedValues( $all = false ) { $values = array(); + foreach ( $this->options as $name => $data ) { if ( !$data['consumed'] ) { if ( $all || $data['value'] !== null ) { @@ -131,24 +139,29 @@ class FormOptions implements ArrayAccess { } } } + return $values; } public function getChangedValues() { $values = array(); + foreach ( $this->options as $name => $data ) { if ( $data['value'] !== null ) { $values[$name] = $data['value']; } } + return $values; } public function getAllValues() { $values = array(); + foreach ( $this->options as $name => $data ) { $values[$name] = $this->getValueReal( $data ); } + return $values; } @@ -156,7 +169,7 @@ class FormOptions implements ArrayAccess { public function fetchValuesFromRequest( WebRequest $r, $values = false ) { if ( !$values ) { - $values = array_keys($this->options); + $values = array_keys( $this->options ); } foreach ( $values as $name ) { @@ -184,7 +197,7 @@ class FormOptions implements ArrayAccess { /* ArrayAccess methods */ public function offsetExists( $name ) { - return isset($this->options[$name]); + return isset( $this->options[$name] ); } public function offsetGet( $name ) { @@ -192,11 +205,10 @@ class FormOptions implements ArrayAccess { } public function offsetSet( $name, $value ) { - return $this->setValue( $name, $value ); + $this->setValue( $name, $value ); } public function offsetUnset( $name ) { - return $this->delete( $name ); + $this->delete( $name ); } - } diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index d6e0f5b4..b21779c1 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -1,15 +1,14 @@ 0 ) { if( $splitPos > 256 ) { // Optimize large string offsets by skipping ahead N bytes. // This will cut out most of our slow time on Latin-based text, // and 1/2 to 1/3 on East European and Asian scripts. $bytePos = $splitPos; - while ($bytePos < $byteLen && $str{$bytePos} >= "\x80" && $str{$bytePos} < "\xc0") + while ( $bytePos < $byteLen && $str{$bytePos} >= "\x80" && $str{$bytePos} < "\xc0" ) { ++$bytePos; + } $charPos = mb_strlen( substr( $str, 0, $bytePos ) ); } else { $charPos = 0; $bytePos = 0; } - + while( $charPos++ < $splitPos ) { ++$bytePos; // Move past any tail bytes - while ($bytePos < $byteLen && $str{$bytePos} >= "\x80" && $str{$bytePos} < "\xc0") + while ( $bytePos < $byteLen && $str{$bytePos} >= "\x80" && $str{$bytePos} < "\xc0" ) { ++$bytePos; + } } } else { $splitPosX = $splitPos + 1; @@ -92,11 +102,12 @@ if ( !function_exists( 'mb_substr' ) ) { while( $bytePos > 0 && $charPos-- >= $splitPosX ) { --$bytePos; // Move past any tail bytes - while ($bytePos > 0 && $str{$bytePos} >= "\x80" && $str{$bytePos} < "\xc0") + while ( $bytePos > 0 && $str{$bytePos} >= "\x80" && $str{$bytePos} < "\xc0" ) { --$bytePos; + } } } - + return $bytePos; } } @@ -108,7 +119,7 @@ if ( !function_exists( 'mb_strlen' ) ) { * @param string $enc optional encoding; ignored * @return int */ - function mb_strlen( $str, $enc="" ) { + function mb_strlen( $str, $enc = '' ) { $counts = count_chars( $str ); $total = 0; @@ -135,11 +146,11 @@ if( !function_exists( 'mb_strpos' ) ) { * @param $encoding String: optional encoding; ignored * @return int */ - function mb_strpos( $haystack, $needle, $offset = 0, $encoding="" ) { + function mb_strpos( $haystack, $needle, $offset = 0, $encoding = '' ) { $needle = preg_quote( $needle, '/' ); $ar = array(); - preg_match( '/'.$needle.'/u', $haystack, $ar, PREG_OFFSET_CAPTURE, $offset ); + preg_match( '/' . $needle . '/u', $haystack, $ar, PREG_OFFSET_CAPTURE, $offset ); if( isset( $ar[0][1] ) ) { return $ar[0][1]; @@ -158,65 +169,17 @@ if( !function_exists( 'mb_strrpos' ) ) { * @param $encoding String: optional encoding; ignored * @return int */ - function mb_strrpos( $haystack, $needle, $offset = 0, $encoding = "" ) { + function mb_strrpos( $haystack, $needle, $offset = 0, $encoding = '' ) { $needle = preg_quote( $needle, '/' ); $ar = array(); - preg_match_all( '/'.$needle.'/u', $haystack, $ar, PREG_OFFSET_CAPTURE, $offset ); + preg_match_all( '/' . $needle . '/u', $haystack, $ar, PREG_OFFSET_CAPTURE, $offset ); - if( isset( $ar[0] ) && count( $ar[0] ) > 0 && - isset( $ar[0][count($ar[0])-1][1] ) ) { - return $ar[0][count($ar[0])-1][1]; + if( isset( $ar[0] ) && count( $ar[0] ) > 0 && + isset( $ar[0][count( $ar[0] ) - 1][1] ) ) { + return $ar[0][count( $ar[0] ) - 1][1]; } else { return false; - } - } -} - -if ( !function_exists( 'array_diff_key' ) ) { - /** - * Exists in PHP 5.1.0+ - * Not quite compatible, two-argument version only - * Null values will cause problems due to this use of isset() - */ - function array_diff_key( $left, $right ) { - $result = $left; - foreach ( $left as $key => $unused ) { - if ( isset( $right[$key] ) ) { - unset( $result[$key] ); - } - } - return $result; - } -} - -if ( !function_exists( 'array_intersect_key' ) ) { - /** - * Exists in 5.1.0+ - * Define our own array_intersect_key function - */ - function array_intersect_key( $isec, $keys ) { - $argc = func_num_args(); - - if ( $argc > 2 ) { - for ( $i = 1; $isec && $i < $argc; $i++ ) { - $arr = func_get_arg( $i ); - - foreach ( array_keys( $isec ) as $key ) { - if ( !isset( $arr[$key] ) ) - unset( $isec[$key] ); - } - } - - return $isec; - } else { - $res = array(); - foreach ( array_keys( $isec ) as $key ) { - if ( isset( $keys[$key] ) ) - $res[$key] = $isec[$key]; - } - - return $res; } } } @@ -234,6 +197,16 @@ if ( !function_exists( 'istainted' ) ) { define( 'TC_PCRE', 1 ); define( 'TC_SELF', 1 ); } + +// array_fill_keys() was only added in 5.2, but people use it anyway +// add a back-compat layer for 5.1. See bug 27781 +if( !function_exists( 'array_fill_keys' ) ) { + function array_fill_keys( $keys, $value ) { + return array_combine( $keys, array_fill( 0, count( $keys ), $value ) ); + } +} + + /// @endcond @@ -251,7 +224,7 @@ function wfArrayDiff2_cmp( $a, $b ) { } else { reset( $a ); reset( $b ); - while( ( list( $keyA, $valueA ) = each( $a ) ) && ( list( $keyB, $valueB ) = each( $b ) ) ) { + while( ( list( , $valueA ) = each( $a ) ) && ( list( , $valueB ) = each( $b ) ) ) { $cmp = strcmp( $valueA, $valueB ); if ( $cmp !== 0 ) { return $cmp; @@ -264,9 +237,10 @@ function wfArrayDiff2_cmp( $a, $b ) { /** * Seed Mersenne Twister * No-op for compatibility; only necessary in PHP < 4.2.0 + * @deprecated. Remove in 1.18 */ function wfSeedRandom() { - /* No-op */ + wfDeprecated(__FUNCTION__); } /** @@ -280,7 +254,7 @@ function wfRandom() { # The maximum random value is "only" 2^31-1, so get two random # values to reduce the chance of dupes $max = mt_getrandmax() + 1; - $rand = number_format( (mt_rand() * $max + mt_rand()) + $rand = number_format( ( mt_rand() * $max + mt_rand() ) / $max / $max, 12, '.', '' ); return $rand; } @@ -299,16 +273,27 @@ function wfRandom() { * * ;:@$!*(),/ * + * However, IIS7 redirects fail when the url contains a colon (Bug 22709), + * so no fancy : for IIS7. + * * %2F in the page titles seems to fatally break for some reason. * * @param $s String: * @return string */ function wfUrlencode( $s ) { + static $needle; + if ( is_null( $needle ) ) { + $needle = array( '%3B', '%40', '%24', '%21', '%2A', '%28', '%29', '%2C', '%2F' ); + if ( !isset( $_SERVER['SERVER_SOFTWARE'] ) || ( strpos( $_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS/7' ) === false ) ) { + $needle[] = '%3A'; + } + } + $s = urlencode( $s ); $s = str_ireplace( - array( '%3B','%3A','%40','%24','%21','%2A','%28','%29','%2C','%2F' ), - array( ';', ':', '@', '$', '!', '*', '(', ')', ',', '/' ), + $needle, + array( ';', '@', '$', '!', '*', '(', ')', ',', '/', ':' ), $s ); @@ -371,7 +356,9 @@ function wfDebug( $text, $logonly = false ) { function wfDebugTimer() { global $wgDebugTimestamps; - if ( !$wgDebugTimestamps ) return ''; + if ( !$wgDebugTimestamps ) { + return ''; + } static $start = null; if ( $start === null ) { @@ -409,7 +396,7 @@ function wfDebugMem( $exact = false ) { */ function wfDebugLog( $logGroup, $text, $public = true ) { global $wgDebugLogGroups, $wgShowHostnames; - $text = trim($text)."\n"; + $text = trim( $text ) . "\n"; if( isset( $wgDebugLogGroups[$logGroup] ) ) { $time = wfTimestamp( TS_DB ); $wiki = wfWikiID(); @@ -419,7 +406,7 @@ function wfDebugLog( $logGroup, $text, $public = true ) { $host = ''; } wfErrorLog( "$time $host $wiki: $text", $wgDebugLogGroups[$logGroup] ); - } else if ( $public === true ) { + } elseif ( $public === true ) { wfDebug( $text, true ); } } @@ -432,28 +419,27 @@ function wfLogDBError( $text ) { global $wgDBerrorLog, $wgDBname; if ( $wgDBerrorLog ) { $host = trim(`hostname`); - $text = date('D M j G:i:s T Y') . "\t$host\t$wgDBname\t$text"; + $text = date( 'D M j G:i:s T Y' ) . "\t$host\t$wgDBname\t$text"; wfErrorLog( $text, $wgDBerrorLog ); } } /** * Log to a file without getting "file size exceeded" signals. - * - * Can also log to TCP or UDP with the syntax udp://host:port/prefix. This will + * + * Can also log to TCP or UDP with the syntax udp://host:port/prefix. This will * send lines to the specified port, prefixed by the specified prefix and a space. */ function wfErrorLog( $text, $file ) { if ( substr( $file, 0, 4 ) == 'udp:' ) { + # Needs the sockets extension if ( preg_match( '!^(tcp|udp):(?://)?\[([0-9a-fA-F:]+)\]:(\d+)(?:/(.*))?$!', $file, $m ) ) { // IPv6 bracketed host - $protocol = $m[1]; $host = $m[2]; $port = intval( $m[3] ); $prefix = isset( $m[4] ) ? $m[4] : false; $domain = AF_INET6; } elseif ( preg_match( '!^(tcp|udp):(?://)?([a-zA-Z0-9.-]+):(\d+)(?:/(.*))?$!', $file, $m ) ) { - $protocol = $m[1]; $host = $m[2]; if ( !IP::isIPv4( $host ) ) { $host = gethostbyname( $host ); @@ -462,7 +448,7 @@ function wfErrorLog( $text, $file ) { $prefix = isset( $m[4] ) ? $m[4] : false; $domain = AF_INET; } else { - throw new MWException( __METHOD__.": Invalid UDP specification" ); + throw new MWException( __METHOD__ . ': Invalid UDP specification' ); } // Clean it up for the multiplexer if ( strval( $prefix ) !== '' ) { @@ -496,29 +482,39 @@ function wfLogProfilingData() { global $wgRequestTime, $wgDebugLogFile, $wgDebugRawPage, $wgRequest; global $wgProfiler, $wgProfileLimit, $wgUser; # Profiling must actually be enabled... - if( !isset( $wgProfiler ) ) return; + if( is_null( $wgProfiler ) ) { + return; + } # Get total page request time $now = wfTime(); $elapsed = $now - $wgRequestTime; # Only show pages that longer than $wgProfileLimit time (default is 0) - if( $elapsed <= $wgProfileLimit ) return; + if( $elapsed <= $wgProfileLimit ) { + return; + } $prof = wfGetProfilingOutput( $wgRequestTime, $elapsed ); $forward = ''; - if( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) + if( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) { $forward = ' forwarded for ' . $_SERVER['HTTP_X_FORWARDED_FOR']; - if( !empty( $_SERVER['HTTP_CLIENT_IP'] ) ) + } + if( !empty( $_SERVER['HTTP_CLIENT_IP'] ) ) { $forward .= ' client IP ' . $_SERVER['HTTP_CLIENT_IP']; - if( !empty( $_SERVER['HTTP_FROM'] ) ) + } + if( !empty( $_SERVER['HTTP_FROM'] ) ) { $forward .= ' from ' . $_SERVER['HTTP_FROM']; - if( $forward ) + } + if( $forward ) { $forward = "\t(proxied via {$_SERVER['REMOTE_ADDR']}{$forward})"; + } // Don't unstub $wgUser at this late stage just for statistics purposes - if( StubObject::isRealObject($wgUser) && $wgUser->isAnon() ) + // FIXME: We can detect some anons even if it is not loaded. See User::getId() + if( $wgUser->mDataLoaded && $wgUser->isAnon() ) { $forward .= ' anon'; + } $log = sprintf( "%s\t%04.3f\t%s\n", - gmdate( 'YmdHis' ), $elapsed, - urldecode( $wgRequest->getRequestURL() . $forward ) ); - if ( $wgDebugLogFile != '' && ( $wgRequest->getVal('action') != 'raw' || $wgDebugRawPage ) ) { + gmdate( 'YmdHis' ), $elapsed, + urldecode( $wgRequest->getRequestURL() . $forward ) ); + if ( $wgDebugLogFile != '' && ( $wgRequest->getVal( 'action' ) != 'raw' || $wgDebugRawPage ) ) { wfErrorLog( $log . $prof, $wgDebugLogFile ); } } @@ -566,34 +562,69 @@ function wfReadOnlyReason() { * functionality), or if it is true then use the wikis * @return Language object */ -function wfGetLangObj( $langcode = false ){ +function wfGetLangObj( $langcode = false ) { # Identify which language to get or create a language object for. - if( $langcode instanceof Language ) - # Great, we already have the object! + # Using is_object here due to Stub objects. + if( is_object( $langcode ) ) { + # Great, we already have the object (hopefully)! return $langcode; - - global $wgContLang; - if( $langcode === $wgContLang->getCode() || $langcode === true ) + } + + global $wgContLang, $wgLanguageCode; + if( $langcode === true || $langcode === $wgLanguageCode ) { # $langcode is the language code of the wikis content language object. # or it is a boolean and value is true return $wgContLang; - + } + global $wgLang; - if( $langcode === $wgLang->getCode() || $langcode === false ) + if( $langcode === false || $langcode === $wgLang->getCode() ) { # $langcode is the language code of user language object. # or it was a boolean and value is false return $wgLang; + } $validCodes = array_keys( Language::getLanguageNames() ); - if( in_array( $langcode, $validCodes ) ) + if( in_array( $langcode, $validCodes ) ) { # $langcode corresponds to a valid language. return Language::factory( $langcode ); + } # $langcode is a string, but not a valid language code; use content language. wfDebug( "Invalid language code passed to wfGetLangObj, falling back to content language.\n" ); return $wgContLang; } +/** + * Use this instead of $wgContLang, when working with user interface. + * User interface is currently hard coded according to wiki content language + * in many ways, especially regarding to text direction. There is lots stuff + * to fix, hence this function to keep the old behaviour unless the global + * $wgBetterDirectionality is enabled (or removed when everything works). + */ +function wfUILang() { + global $wgBetterDirectionality; + return wfGetLangObj( !$wgBetterDirectionality ); +} + +/** + * This is the new function for getting translated interface messages. + * See the Message class for documentation how to use them. + * The intention is that this function replaces all old wfMsg* functions. + * @param $key \string Message key. + * Varargs: normal message parameters. + * @return \type{Message} + * @since 1.17 + */ +function wfMessage( $key /*...*/) { + $params = func_get_args(); + array_shift( $params ); + if ( isset( $params[0] ) && is_array( $params[0] ) ) { + $params = $params[0]; + } + return new Message( $key, $params ); +} + /** * Get a message from anywhere, for the current user language. * @@ -604,7 +635,7 @@ function wfGetLangObj( $langcode = false ){ * defined in languages/Language.php * * This function also takes extra optional parameters (not - * shown in the function definition), which can by used to + * shown in the function definition), which can be used to * insert variable text into the predefined message. */ function wfMsg( $key ) { @@ -626,7 +657,7 @@ function wfMsgNoTrans( $key ) { * Get a message from anywhere, for the current global language * set with $wgLanguageCode. * - * Use this if the message should NOT change dependent on the + * Use this if the message should NOT change dependent on the * language set in the user's preferences. This is the case for * most text written into logs, as well as link targets (such as * the name of the copyright policy page). Link titles, on the @@ -638,8 +669,8 @@ function wfMsgNoTrans( $key ) { * * Be wary of this distinction: If you use wfMsg() where you should * use wfMsgForContent(), a user of the software may have to - * customize over 70 messages in order to, e.g., fix a link in every - * possible language. + * customize potentially hundreds of messages in + * order to, e.g., fix a link in every possible language. * * @param $key String: lookup key for the message, usually * defined in languages/Language.php @@ -651,7 +682,9 @@ function wfMsgForContent( $key ) { $forcontent = true; if( is_array( $wgForceUIMsgAsContentMsg ) && in_array( $key, $wgForceUIMsgAsContentMsg ) ) + { $forcontent = false; + } return wfMsgReal( $key, $args, true, $forcontent ); } @@ -665,7 +698,9 @@ function wfMsgForContentNoTrans( $key ) { $forcontent = true; if( is_array( $wgForceUIMsgAsContentMsg ) && in_array( $key, $wgForceUIMsgAsContentMsg ) ) + { $forcontent = false; + } return wfMsgReal( $key, $args, true, $forcontent, false ); } @@ -688,7 +723,9 @@ function wfMsgNoDBForContent( $key ) { $forcontent = true; if( is_array( $wgForceUIMsgAsContentMsg ) && in_array( $key, $wgForceUIMsgAsContentMsg ) ) + { $forcontent = false; + } return wfMsgReal( $key, $args, false, $forcontent ); } @@ -698,8 +735,8 @@ function wfMsgNoDBForContent( $key ) { * @param $key String: key to get. * @param $args * @param $useDB Boolean - * @param $transform Boolean: Whether or not to transform the message. * @param $forContent Mixed: Language code, or false for user lang, true for content lang. + * @param $transform Boolean: Whether or not to transform the message. * @return String: the requested message. */ function wfMsgReal( $key, $args, $useDB = true, $forContent = false, $transform = true ) { @@ -716,10 +753,11 @@ function wfMsgReal( $key, $args, $useDB = true, $forContent = false, $transform */ function wfMsgWeirdKey( $key ) { $source = wfMsgGetKey( $key, false, true, false ); - if ( wfEmptyMsg( $key, $source ) ) - return ""; - else + if ( wfEmptyMsg( $key, $source ) ) { + return ''; + } else { return $source; + } } /** @@ -730,33 +768,22 @@ function wfMsgWeirdKey( $key ) { * behaves as a content language switch if it is a boolean. * @param $transform Boolean: whether to parse magic words, etc. * @return string - * @private */ function wfMsgGetKey( $key, $useDB, $langCode = false, $transform = true ) { - global $wgContLang, $wgMessageCache; + global $wgMessageCache; - wfRunHooks('NormalizeMessageKey', array(&$key, &$useDB, &$langCode, &$transform)); - - # If $wgMessageCache isn't initialised yet, try to return something sensible. - if( is_object( $wgMessageCache ) ) { - $message = $wgMessageCache->get( $key, $useDB, $langCode ); - if ( $transform ) { - $message = $wgMessageCache->transform( $message ); - } - } else { - $lang = wfGetLangObj( $langCode ); + wfRunHooks( 'NormalizeMessageKey', array( &$key, &$useDB, &$langCode, &$transform ) ); - # MessageCache::get() does this already, Language::getMessage() doesn't - # ISSUE: Should we try to handle "message/lang" here too? - $key = str_replace( ' ' , '_' , $wgContLang->lcfirst( $key ) ); - - if( is_object( $lang ) ) { - $message = $lang->getMessage( $key ); - } else { - $message = false; - } + if ( !is_object( $wgMessageCache ) ) { + throw new MWException( 'Trying to get message before message cache is initialised' ); } + $message = $wgMessageCache->get( $key, $useDB, $langCode ); + if( $message === false ) { + $message = '<' . htmlspecialchars( $key ) . '>'; + } elseif ( $transform ) { + $message = $wgMessageCache->transform( $message ); + } return $message; } @@ -780,7 +807,7 @@ function wfMsgReplaceArgs( $message, $args ) { } $replacementKeys = array(); foreach( $args as $n => $param ) { - $replacementKeys['$' . ($n + 1)] = $param; + $replacementKeys['$' . ( $n + 1 )] = $param; } $message = strtr( $message, $replacementKeys ); } @@ -827,17 +854,17 @@ function wfMsgWikiHtml( $key ) { * Returns message in the requested format * @param $key String: key of the message * @param $options Array: processing rules. Can take the following options: - * parse: parses wikitext to html - * parseinline: parses wikitext to html and removes the surrounding + * parse: parses wikitext to HTML + * parseinline: parses wikitext to HTML and removes the surrounding * p's added by parser or tidy * escape: filters message through htmlspecialchars - * escapenoentities: same, but allows entity references like   through + * escapenoentities: same, but allows entity references like   through * replaceafter: parameters are substituted after parsing or escaping * parsemag: transform the message using magic phrases * content: fetch message for content language instead of interface * Also can accept a single associative argument, of the form 'language' => 'xx': * language: Language object or language code to fetch message for - * (overriden by content), its behaviour with parser, parseinline + * (overriden by content), its behaviour with parse, parseinline * and parsemag is undefined. * Behavior for conflicting options (e.g., parse+parseinline) is undefined. */ @@ -861,10 +888,10 @@ function wfMsgExt( $key, $options ) { } } - if( in_array('content', $options, true ) ) { + if( in_array( 'content', $options, true ) ) { $forContent = true; $langCode = true; - } elseif( array_key_exists('language', $options) ) { + } elseif( array_key_exists( 'language', $options ) ) { $forContent = false; $langCode = wfGetLangObj( $options['language'] ); } else { @@ -874,19 +901,19 @@ function wfMsgExt( $key, $options ) { $string = wfMsgGetKey( $key, /*DB*/true, $langCode, /*Transform*/false ); - if( !in_array('replaceafter', $options, true ) ) { + if( !in_array( 'replaceafter', $options, true ) ) { $string = wfMsgReplaceArgs( $string, $args ); } - if( in_array('parse', $options, true ) ) { + if( in_array( 'parse', $options, true ) ) { $string = $wgOut->parse( $string, true, !$forContent ); - } elseif ( in_array('parseinline', $options, true ) ) { + } elseif ( in_array( 'parseinline', $options, true ) ) { $string = $wgOut->parse( $string, true, !$forContent ); $m = array(); if( preg_match( '/^

    (.*)\n?<\/p>\n?$/sU', $string, $m ) ) { $string = $m[1]; } - } elseif ( in_array('parsemag', $options, true ) ) { + } elseif ( in_array( 'parsemag', $options, true ) ) { global $wgMessageCache; if ( isset( $wgMessageCache ) ) { $string = $wgMessageCache->transform( $string, @@ -895,13 +922,13 @@ function wfMsgExt( $key, $options ) { } } - if ( in_array('escape', $options, true ) ) { + if ( in_array( 'escape', $options, true ) ) { $string = htmlspecialchars ( $string ); - } elseif ( in_array( 'escapenoentities', $options, true ) ) { + } elseif ( in_array( 'escapenoentities', $options, true ) ) { $string = Sanitizer::escapeHtmlAllowEntities( $string ); } - if( in_array('replaceafter', $options, true ) ) { + if( in_array( 'replaceafter', $options, true ) ) { $string = wfMsgReplaceArgs( $string, $args ); } @@ -913,24 +940,26 @@ function wfMsgExt( $key, $options ) { * Just like exit() but makes a note of it. * Commits open transactions except if the error parameter is set * - * @deprecated Please return control to the caller or throw an exception + * @deprecated Please return control to the caller or throw an exception. Will + * be removed in 1.19. */ -function wfAbruptExit( $error = false ){ +function wfAbruptExit( $error = false ) { static $called = false; - if ( $called ){ + if ( $called ) { exit( -1 ); } $called = true; + wfDeprecated( __FUNCTION__ ); $bt = wfDebugBacktrace(); if( $bt ) { - for($i = 0; $i < count($bt) ; $i++){ - $file = isset($bt[$i]['file']) ? $bt[$i]['file'] : "unknown"; - $line = isset($bt[$i]['line']) ? $bt[$i]['line'] : "unknown"; - wfDebug("WARNING: Abrupt exit in $file at line $line\n"); + for( $i = 0; $i < count( $bt ); $i++ ) { + $file = isset( $bt[$i]['file'] ) ? $bt[$i]['file'] : 'unknown'; + $line = isset( $bt[$i]['line'] ) ? $bt[$i]['line'] : 'unknown'; + wfDebug( "WARNING: Abrupt exit in $file at line $line\n"); } } else { - wfDebug("WARNING: Abrupt exit\n"); + wfDebug( "WARNING: Abrupt exit\n" ); } wfLogProfilingData(); @@ -942,9 +971,11 @@ function wfAbruptExit( $error = false ){ } /** - * @deprecated Please return control the caller or throw an exception + * @deprecated Please return control the caller or throw an exception. Will + * be removed in 1.19. */ function wfErrorExit() { + wfDeprecated( __FUNCTION__ ); wfAbruptExit( true ); } @@ -953,7 +984,7 @@ function wfErrorExit() { * Plain die() fails to return nonzero to the shell if you pass a string. * @param $msg String */ -function wfDie( $msg='' ) { +function wfDie( $msg = '' ) { echo $msg; die( 1 ); } @@ -1008,8 +1039,8 @@ function wfReportTime() { $elapsed = $now - $wgRequestTime; return $wgShowHostnames - ? sprintf( "", wfHostname(), $elapsed ) - : sprintf( "", $elapsed ); + ? sprintf( '', wfHostname(), $elapsed ) + : sprintf( '', $elapsed ); } /** @@ -1062,7 +1093,7 @@ function wfBacktrace() { foreach( $backtrace as $call ) { if( isset( $call['file'] ) ) { $f = explode( DIRECTORY_SEPARATOR, $call['file'] ); - $file = $f[count($f)-1]; + $file = $f[count( $f ) - 1]; } else { $file = '-'; } @@ -1076,7 +1107,9 @@ function wfBacktrace() { } else { $msg .= '

  • ' . $file . ' line ' . $line . ' calls '; } - if( !empty( $call['class'] ) ) $msg .= $call['class'] . '::'; + if( !empty( $call['class'] ) ) { + $msg .= $call['class'] . '::'; + } $msg .= $call['function'] . '()'; if ( $wgCommandLineMode ) { @@ -1103,8 +1136,12 @@ function wfBacktrace() { */ function wfShowingResults( $offset, $limit ) { global $wgLang; - return wfMsgExt( 'showingresults', array( 'parseinline' ), $wgLang->formatNum( $limit ), - $wgLang->formatNum( $offset+1 ) ); + return wfMsgExt( + 'showingresults', + array( 'parseinline' ), + $wgLang->formatNum( $limit ), + $wgLang->formatNum( $offset + 1 ) + ); } /** @@ -1112,8 +1149,13 @@ function wfShowingResults( $offset, $limit ) { */ function wfShowingResultsNum( $offset, $limit, $num ) { global $wgLang; - return wfMsgExt( 'showingresultsnum', array( 'parseinline' ), $wgLang->formatNum( $limit ), - $wgLang->formatNum( $offset+1 ), $wgLang->formatNum( $num ) ); + return wfMsgExt( + 'showingresultsnum', + array( 'parseinline' ), + $wgLang->formatNum( $limit ), + $wgLang->formatNum( $offset + 1 ), + $wgLang->formatNum( $num ) + ); } /** @@ -1129,11 +1171,11 @@ function wfViewPrevNext( $offset, $limit, $link, $query = '', $atend = false ) { $fmtLimit = $wgLang->formatNum( $limit ); // FIXME: Why on earth this needs one message for the text and another one for tooltip?? # Get prev/next link display text - $prev = wfMsgExt( 'prevn', array('parsemag','escape'), $fmtLimit ); - $next = wfMsgExt( 'nextn', array('parsemag','escape'), $fmtLimit ); + $prev = wfMsgExt( 'prevn', array( 'parsemag', 'escape' ), $fmtLimit ); + $next = wfMsgExt( 'nextn', array( 'parsemag', 'escape' ), $fmtLimit ); # Get prev/next link title text - $pTitle = wfMsgExt( 'prevn-title', array('parsemag','escape'), $fmtLimit ); - $nTitle = wfMsgExt( 'nextn-title', array('parsemag','escape'), $fmtLimit ); + $pTitle = wfMsgExt( 'prevn-title', array( 'parsemag', 'escape' ), $fmtLimit ); + $nTitle = wfMsgExt( 'nextn-title', array( 'parsemag', 'escape' ), $fmtLimit ); # Fetch the title object if( is_object( $link ) ) { $title =& $link; @@ -1146,28 +1188,28 @@ function wfViewPrevNext( $offset, $limit, $link, $query = '', $atend = false ) { # Make 'previous' link if( 0 != $offset ) { $po = $offset - $limit; - $po = max($po,0); + $po = max( $po, 0 ); $q = "limit={$limit}&offset={$po}"; if( $query != '' ) { - $q .= '&'.$query; + $q .= '&' . $query; } - $plink = '{$prev}"; - } else { + $plink = '{$prev}"; + } else { $plink = $prev; } # Make 'next' link $no = $offset + $limit; $q = "limit={$limit}&offset={$no}"; if( $query != '' ) { - $q .= '&'.$query; + $q .= '&' . $query; } if( $atend ) { $nlink = $next; } else { - $nlink = '{$next}"; + $nlink = '{$next}"; } # Make links to set number of items per page - $nums = $wgLang->pipeList( array( + $nums = $wgLang->pipeList( array( wfNumLink( $offset, 20, $title, $query ), wfNumLink( $offset, 50, $title, $query ), wfNumLink( $offset, 100, $title, $query ), @@ -1186,15 +1228,15 @@ function wfViewPrevNext( $offset, $limit, $link, $query = '', $atend = false ) { */ function wfNumLink( $offset, $limit, $title, $query = '' ) { global $wgLang; - if( $query == '' ) { + if( $query == '' ) { $q = ''; - } else { + } else { $q = $query.'&'; } $q .= "limit={$limit}&offset={$offset}"; $fmtLimit = $wgLang->formatNum( $limit ); - $lTitle = wfMsgExt('shown-title',array('parsemag','escape'),$limit); - $s = '{$fmtLimit}"; + $lTitle = wfMsgExt( 'shown-title', array( 'parsemag', 'escape' ), $limit ); + $s = '{$fmtLimit}"; return $s; } @@ -1205,19 +1247,28 @@ function wfNumLink( $offset, $limit, $title, $query = '' ) { * @return bool Whereas client accept gzip compression */ function wfClientAcceptsGzip() { - if( isset( $_SERVER['HTTP_ACCEPT_ENCODING'] ) ) { - # FIXME: we may want to blacklist some broken browsers - $m = array(); - if( preg_match( - '/\bgzip(?:;(q)=([0-9]+(?:\.[0-9]+)))?\b/', - $_SERVER['HTTP_ACCEPT_ENCODING'], - $m ) ) { - if( isset( $m[2] ) && ( $m[1] == 'q' ) && ( $m[2] == 0 ) ) return false; - wfDebug( " accepts gzip\n" ); - return true; + static $result = null; + if ( $result === null ) { + $result = false; + if( isset( $_SERVER['HTTP_ACCEPT_ENCODING'] ) ) { + # FIXME: we may want to blacklist some broken browsers + $m = array(); + if( preg_match( + '/\bgzip(?:;(q)=([0-9]+(?:\.[0-9]+)))?\b/', + $_SERVER['HTTP_ACCEPT_ENCODING'], + $m ) + ) + { + if( isset( $m[2] ) && ( $m[1] == 'q' ) && ( $m[2] == 0 ) ) { + $result = false; + return $result; + } + wfDebug( " accepts gzip\n" ); + $result = true; + } } } - return false; + return $result; } /** @@ -1246,9 +1297,12 @@ function wfCheckLimits( $deflimit = 50, $optionname = 'rclimit' ) { */ function wfEscapeWikiText( $text ) { $text = str_replace( - array( '[', '|', ']', '\'', 'ISBN ', 'RFC ', '://', "\n=", '{{' ), # }} - array( '[', '|', ']', ''', 'ISBN ', 'RFC ', '://', "\n=", '{{' ), - htmlspecialchars($text) ); + array( '[', '|', ']', '\'', 'ISBN ', + 'RFC ', '://', "\n=", '{{', '}}' ), + array( '[', '|', ']', ''', 'ISBN ', + 'RFC ', '://', "\n=", '{{', '}}' ), + htmlspecialchars( $text ) + ); return $text; } @@ -1266,7 +1320,9 @@ function wfQuotedPrintable( $string, $charset = '' ) { $illegal = '\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\xff='; $replace = $illegal . '\t ?_'; - if( !preg_match( "/[$illegal]/", $string ) ) return $string; + if( !preg_match( "/[$illegal]/", $string ) ) { + return $string; + } $out = "=?$charset?Q?"; $out .= preg_replace( "/([$replace])/e", 'sprintf("=%02X",ord("$1"))', $string ); $out .= '?='; @@ -1279,7 +1335,7 @@ function wfQuotedPrintable( $string, $charset = '' ) { * @return float */ function wfTime() { - return microtime(true); + return microtime( true ); } /** @@ -1298,7 +1354,7 @@ function wfSetVar( &$dest, $source ) { * As for wfSetVar except setting a bit */ function wfSetBit( &$dest, $bit, $state = true ) { - $temp = (bool)($dest & $bit ); + $temp = (bool)( $dest & $bit ); if ( !is_null( $state ) ) { if ( $state ) { $dest |= $bit; @@ -1314,8 +1370,7 @@ function wfSetBit( &$dest, $bit, $state = true ) { * "days=7&limit=100". Options in the first array override options in the second. * Options set to "" will not be output. */ -function wfArrayToCGI( $array1, $array2 = null ) -{ +function wfArrayToCGI( $array1, $array2 = null ) { if ( !is_null( $array2 ) ) { $array1 = $array1 + $array2; } @@ -1357,7 +1412,7 @@ function wfArrayToCGI( $array1, $array2 = null ) * @return array Array version of input */ function wfCgiToArray( $query ) { - if( isset( $query[0] ) and $query[0] == '?' ) { + if( isset( $query[0] ) && $query[0] == '?' ) { $query = substr( $query, 1 ); } $bits = explode( '&', $query ); @@ -1399,16 +1454,19 @@ function wfAppendQuery( $url, $query ) { /** * Expand a potentially local URL to a fully-qualified URL. Assumes $wgServer - * is correct. Also doesn't handle any type of relative URL except one - * starting with a single "/": this won't work with current-path-relative URLs - * like "subdir/foo.html", protocol-relative URLs like - * "//en.wikipedia.org/wiki/", etc. TODO: improve this! + * and $wgProto are correct. + * + * @todo this won't work with current-path-relative URLs + * like "subdir/foo.html", etc. * * @param $url String: either fully-qualified or a local path + query * @return string Fully-qualified URL */ function wfExpandUrl( $url ) { - if( substr( $url, 0, 1 ) == '/' ) { + if( substr( $url, 0, 2 ) == '//' ) { + global $wgProto; + return $wgProto . ':' . $url; + } elseif( substr( $url, 0, 1 ) == '/' ) { global $wgServer; return $wgServer . $url; } else { @@ -1416,20 +1474,12 @@ function wfExpandUrl( $url ) { } } -/** - * This is obsolete, use SquidUpdate::purge() - * @deprecated - */ -function wfPurgeSquidServers ($urlArr) { - SquidUpdate::purge( $urlArr ); -} - /** * Windows-compatible version of escapeshellarg() * Windows doesn't recognise single-quotes in the shell, but the escapeshellarg() * function puts single quotes in regardless of OS. * - * Also fixes the locale problems on Linux in PHP 5.2.6+ (bug backported to + * Also fixes the locale problems on Linux in PHP 5.2.6+ (bug backported to * earlier distro releases of PHP) */ function wfEscapeShellArg( ) { @@ -1451,14 +1501,19 @@ function wfEscapeShellArg( ) { // Double the backslashes before any double quotes. Escape the double quotes. $tokens = preg_split( '/(\\\\*")/', $arg, -1, PREG_SPLIT_DELIM_CAPTURE ); $arg = ''; - $delim = false; + $iteration = 0; foreach ( $tokens as $token ) { - if ( $delim ) { + if ( $iteration % 2 == 1 ) { + // Delimiter, a double quote preceded by zero or more slashes $arg .= str_replace( '\\', '\\\\', substr( $token, 0, -1 ) ) . '\\"'; - } else { + } elseif ( $iteration % 4 == 2 ) { + // ^ in $token will be outside quotes, need to be escaped + $arg .= str_replace( '^', '^^', $token ); + } else { // $iteration % 4 == 0 + // ^ in $token will appear inside double quotes, so leave as is $arg .= $token; } - $delim = !$delim; + $iteration++; } // Double the backslashes before the end of the string, because // we will soon add a quote @@ -1480,12 +1535,16 @@ function wfEscapeShellArg( ) { * wfMerge attempts to merge differences between three texts. * Returns true for a clean merge and false for failure or a conflict. */ -function wfMerge( $old, $mine, $yours, &$result ){ +function wfMerge( $old, $mine, $yours, &$result ) { global $wgDiff3; # This check may also protect against code injection in # case of broken installations. - if( !$wgDiff3 || !file_exists( $wgDiff3 ) ) { + wfSuppressWarnings(); + $haveDiff3 = $wgDiff3 && file_exists( $wgDiff3 ); + wfRestoreWarnings(); + + if( !$haveDiff3 ) { wfDebug( "diff3 not found\n" ); return false; } @@ -1496,18 +1555,21 @@ function wfMerge( $old, $mine, $yours, &$result ){ $mytextFile = fopen( $mytextName = tempnam( $td, 'merge-mine-' ), 'w' ); $yourtextFile = fopen( $yourtextName = tempnam( $td, 'merge-your-' ), 'w' ); - fwrite( $oldtextFile, $old ); fclose( $oldtextFile ); - fwrite( $mytextFile, $mine ); fclose( $mytextFile ); - fwrite( $yourtextFile, $yours ); fclose( $yourtextFile ); + fwrite( $oldtextFile, $old ); + fclose( $oldtextFile ); + fwrite( $mytextFile, $mine ); + fclose( $mytextFile ); + fwrite( $yourtextFile, $yours ); + fclose( $yourtextFile ); # Check for a conflict $cmd = $wgDiff3 . ' -a --overlap-only ' . - wfEscapeShellArg( $mytextName ) . ' ' . - wfEscapeShellArg( $oldtextName ) . ' ' . - wfEscapeShellArg( $yourtextName ); + wfEscapeShellArg( $mytextName ) . ' ' . + wfEscapeShellArg( $oldtextName ) . ' ' . + wfEscapeShellArg( $yourtextName ); $handle = popen( $cmd, 'r' ); - if( fgets( $handle, 1024 ) ){ + if( fgets( $handle, 1024 ) ) { $conflict = true; } else { $conflict = false; @@ -1516,7 +1578,7 @@ function wfMerge( $old, $mine, $yours, &$result ){ # Merge differences $cmd = $wgDiff3 . ' -a -e --merge ' . - wfEscapeShellArg( $mytextName, $oldtextName, $yourtextName ); + wfEscapeShellArg( $mytextName, $oldtextName, $yourtextName ); $handle = popen( $cmd, 'r' ); $result = ''; do { @@ -1527,13 +1589,15 @@ function wfMerge( $old, $mine, $yours, &$result ){ $result .= $data; } while ( true ); pclose( $handle ); - unlink( $mytextName ); unlink( $oldtextName ); unlink( $yourtextName ); + unlink( $mytextName ); + unlink( $oldtextName ); + unlink( $yourtextName ); - if ( $result === '' && $old !== '' && $conflict == false ) { + if ( $result === '' && $old !== '' && !$conflict ) { wfDebug( "Unexpected null result from diff3. Command: $cmd\n" ); $conflict = true; } - return ! $conflict; + return !$conflict; } /** @@ -1545,15 +1609,18 @@ function wfMerge( $old, $mine, $yours, &$result ){ * @return String: unified diff of $before and $after */ function wfDiff( $before, $after, $params = '-u' ) { - if ($before == $after) { + if ( $before == $after ) { return ''; } - + global $wgDiff; + wfSuppressWarnings(); + $haveDiff = $wgDiff && file_exists( $wgDiff ); + wfRestoreWarnings(); # This check may also protect against code injection in # case of broken installations. - if( !file_exists( $wgDiff ) ){ + if( !$haveDiff ) { wfDebug( "diff executable not found\n" ); $diffs = new Diff( explode( "\n", $before ), explode( "\n", $after ) ); $format = new UnifiedDiffFormatter(); @@ -1565,16 +1632,18 @@ function wfDiff( $before, $after, $params = '-u' ) { $oldtextFile = fopen( $oldtextName = tempnam( $td, 'merge-old-' ), 'w' ); $newtextFile = fopen( $newtextName = tempnam( $td, 'merge-your-' ), 'w' ); - fwrite( $oldtextFile, $before ); fclose( $oldtextFile ); - fwrite( $newtextFile, $after ); fclose( $newtextFile ); - + fwrite( $oldtextFile, $before ); + fclose( $oldtextFile ); + fwrite( $newtextFile, $after ); + fclose( $newtextFile ); + // Get the diff of the two files - $cmd = "$wgDiff " . $params . ' ' .wfEscapeShellArg( $oldtextName, $newtextName ); - + $cmd = "$wgDiff " . $params . ' ' . wfEscapeShellArg( $oldtextName, $newtextName ); + $h = popen( $cmd, 'r' ); - + $diff = ''; - + do { $data = fread( $h, 8192 ); if ( strlen( $data ) == 0 ) { @@ -1582,23 +1651,23 @@ function wfDiff( $before, $after, $params = '-u' ) { } $diff .= $data; } while ( true ); - + // Clean up pclose( $h ); unlink( $oldtextName ); unlink( $newtextName ); - + // Kill the --- and +++ lines. They're not useful. $diff_lines = explode( "\n", $diff ); - if (strpos( $diff_lines[0], '---' ) === 0) { - unset($diff_lines[0]); + if ( strpos( $diff_lines[0], '---' ) === 0 ) { + unset( $diff_lines[0] ); } - if (strpos( $diff_lines[1], '+++' ) === 0) { - unset($diff_lines[1]); + if ( strpos( $diff_lines[1], '+++' ) === 0 ) { + unset( $diff_lines[1] ); } - + $diff = implode( "\n", $diff_lines ); - + return $diff; } @@ -1610,7 +1679,7 @@ function wfDiff( $before, $after, $params = '-u' ) { */ function wfVarDump( $var ) { global $wgOut; - $s = str_replace("\n","
    \n", var_export( $var, true ) . "\n"); + $s = str_replace( "\n", "
    \n", var_export( $var, true ) . "\n" ); if ( headers_sent() || !@is_object( $wgOut ) ) { print $s; } else { @@ -1630,11 +1699,11 @@ function wfHttpError( $code, $label, $desc ) { header( 'Content-type: text/html; charset=utf-8' ); print "". - "" . + '<html><head><title>' . htmlspecialchars( $label ) . - "

    " . + '

    ' . htmlspecialchars( $label ) . - "

    " . + '

    ' . nl2br( htmlspecialchars( $desc ) ) . "

    \n"; } @@ -1656,7 +1725,7 @@ function wfHttpError( $code, $label, $desc ) { * * @param $resetGzipEncoding Bool */ -function wfResetOutputBuffers( $resetGzipEncoding=true ) { +function wfResetOutputBuffers( $resetGzipEncoding = true ) { if( $resetGzipEncoding ) { // Suppress Content-Encoding and Content-Length // headers from 1.10+s wfOutputHandler @@ -1681,7 +1750,13 @@ function wfResetOutputBuffers( $resetGzipEncoding=true ) { if( $status['name'] == 'ob_gzhandler' ) { // Reset the 'Content-Encoding' field set by this handler // so we can start fresh. - header( 'Content-Encoding:' ); + if ( function_exists( 'header_remove' ) ) { + // Available since PHP 5.3.0 + header_remove( 'Content-Encoding' ); + } else { + // We need to provide a valid content-coding. See bug 28069 + header( 'Content-Encoding: identity' ); + } break; } } @@ -1725,7 +1800,7 @@ function wfAcceptToPrefs( $accept, $def = '*/*' ) { if( !isset( $qpart ) ) { $prefs[$value] = 1.0; } elseif( preg_match( '/q\s*=\s*(\d*\.\d+)/', $qpart, $match ) ) { - $prefs[$value] = floatval($match[1]); + $prefs[$value] = floatval( $match[1] ); } } @@ -1745,7 +1820,7 @@ function wfAcceptToPrefs( $accept, $def = '*/*' ) { * @private */ function mimeTypeMatch( $type, $avail ) { - if( array_key_exists($type, $avail) ) { + if( array_key_exists( $type, $avail ) ) { return $type; } else { $parts = explode( '/', $type ); @@ -1844,7 +1919,7 @@ function wfSuppressWarnings( $end = false ) { } } else { if ( !$suppressCount ) { - $originalLevel = error_reporting( E_ALL & ~( E_WARNING | E_NOTICE ) ); + $originalLevel = error_reporting( E_ALL & ~( E_WARNING | E_NOTICE | E_USER_WARNING | E_USER_NOTICE ) ); } ++$suppressCount; } @@ -1862,29 +1937,29 @@ function wfRestoreWarnings() { /** * Unix time - the number of seconds since 1970-01-01 00:00:00 UTC */ -define('TS_UNIX', 0); +define( 'TS_UNIX', 0 ); /** * MediaWiki concatenated string timestamp (YYYYMMDDHHMMSS) */ -define('TS_MW', 1); +define( 'TS_MW', 1 ); /** * MySQL DATETIME (YYYY-MM-DD HH:MM:SS) */ -define('TS_DB', 2); +define( 'TS_DB', 2 ); /** * RFC 2822 format, for E-mail and HTTP headers */ -define('TS_RFC2822', 3); +define( 'TS_RFC2822', 3 ); /** * ISO 8601 format with no timezone: 1986-02-09T20:00:00Z * * This is used by Special:Export */ -define('TS_ISO_8601', 4); +define( 'TS_ISO_8601', 4 ); /** * An Exif timestamp (YYYY:MM:DD HH:MM:SS) @@ -1893,91 +1968,152 @@ define('TS_ISO_8601', 4); * DateTime tag and page 36 for the DateTimeOriginal and * DateTimeDigitized tags. */ -define('TS_EXIF', 5); +define( 'TS_EXIF', 5 ); /** * Oracle format time. */ -define('TS_ORACLE', 6); +define( 'TS_ORACLE', 6 ); /** * Postgres format time. */ -define('TS_POSTGRES', 7); +define( 'TS_POSTGRES', 7 ); /** * DB2 format time */ -define('TS_DB2', 8); +define( 'TS_DB2', 8 ); + +/** + * ISO 8601 basic format with no timezone: 19860209T200000Z + * + * This is used by ResourceLoader + */ +define( 'TS_ISO_8601_BASIC', 9 ); /** * @param $outputtype Mixed: A timestamp in one of the supported formats, the * function will autodetect which format is supplied and act * accordingly. * @param $ts Mixed: the timestamp to convert or 0 for the current timestamp - * @return String: in the format specified in $outputtype + * @return Mixed: String / false The same date in the format specified in $outputtype or false */ function wfTimestamp( $outputtype = TS_UNIX, $ts = 0 ) { $uts = 0; $da = array(); - if ($ts==0) { - $uts=time(); - } elseif (preg_match('/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)$/D',$ts,$da)) { + $strtime = ''; + + if ( !$ts ) { // We want to catch 0, '', null... but not date strings starting with a letter. + $uts = time(); + $strtime = "@$uts"; + } elseif ( preg_match( '/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)$/D', $ts, $da ) ) { # TS_DB - } elseif (preg_match('/^(\d{4}):(\d\d):(\d\d) (\d\d):(\d\d):(\d\d)$/D',$ts,$da)) { + } elseif ( preg_match( '/^(\d{4}):(\d\d):(\d\d) (\d\d):(\d\d):(\d\d)$/D', $ts, $da ) ) { # TS_EXIF - } elseif (preg_match('/^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/D',$ts,$da)) { + } elseif ( preg_match( '/^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/D', $ts, $da ) ) { # TS_MW - } elseif (preg_match('/^\d{1,13}$/D',$ts)) { + } elseif ( preg_match( '/^-?\d{1,13}$/D', $ts ) ) { # TS_UNIX $uts = $ts; - } elseif (preg_match('/^\d{2}-\d{2}-\d{4} \d{2}:\d{2}:\d{2}.\d{6}$/', $ts)) { + $strtime = "@$ts"; // Undocumented? + } elseif ( preg_match( '/^\d{2}-\d{2}-\d{4} \d{2}:\d{2}:\d{2}.\d{6}$/', $ts ) ) { # TS_ORACLE // session altered to DD-MM-YYYY HH24:MI:SS.FF6 - $uts = strtotime(preg_replace('/(\d\d)\.(\d\d)\.(\d\d)(\.(\d+))?/', "$1:$2:$3", - str_replace("+00:00", "UTC", $ts))); - } elseif (preg_match('/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.*\d*)?Z$/', $ts, $da)) { + $strtime = preg_replace( '/(\d\d)\.(\d\d)\.(\d\d)(\.(\d+))?/', "$1:$2:$3", + str_replace( '+00:00', 'UTC', $ts ) ); + } elseif ( preg_match( '/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.*\d*)?Z$/', $ts, $da ) ) { # TS_ISO_8601 - } elseif (preg_match('/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)\.*\d*[\+\- ](\d\d)$/',$ts,$da)) { + } elseif ( preg_match( '/^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})(?:\.*\d*)?Z$/', $ts, $da ) ) { + #TS_ISO_8601_BASIC + } elseif ( preg_match( '/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)\.*\d*[\+\- ](\d\d)$/', $ts, $da ) ) { # TS_POSTGRES - } elseif (preg_match('/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)\.*\d* GMT$/',$ts,$da)) { + } elseif ( preg_match( '/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)\.*\d* GMT$/', $ts, $da ) ) { # TS_POSTGRES + } elseif (preg_match('/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)\.\d\d\d$/',$ts,$da)) { + # TS_DB2 + } elseif ( preg_match( '/^[ \t\r\n]*([A-Z][a-z]{2},[ \t\r\n]*)?' . # Day of week + '\d\d?[ \t\r\n]*[A-Z][a-z]{2}[ \t\r\n]*\d{2}(?:\d{2})?' . # dd Mon yyyy + '[ \t\r\n]*\d\d[ \t\r\n]*:[ \t\r\n]*\d\d[ \t\r\n]*:[ \t\r\n]*\d\d/S', $ts ) ) { # hh:mm:ss + # TS_RFC2822, accepting a trailing comment. See http://www.squid-cache.org/mail-archive/squid-users/200307/0122.html / r77171 + # The regex is a superset of rfc2822 for readability + $strtime = strtok( $ts, ';' ); + } elseif ( preg_match( '/^[A-Z][a-z]{5,8}, \d\d-[A-Z][a-z]{2}-\d{2} \d\d:\d\d:\d\d/', $ts ) ) { + # TS_RFC850 + $strtime = $ts; + } elseif ( preg_match( '/^[A-Z][a-z]{2} [A-Z][a-z]{2} +\d{1,2} \d\d:\d\d:\d\d \d{4}/', $ts ) ) { + # asctime + $strtime = $ts; } else { - # Bogus value; fall back to the epoch... + # Bogus value... wfDebug("wfTimestamp() fed bogus time value: $outputtype; $ts\n"); - $uts = 0; + + return false; } - if (count( $da ) ) { - // Warning! gmmktime() acts oddly if the month or day is set to 0 - // We may want to handle that explicitly at some point - $uts=gmmktime((int)$da[4],(int)$da[5],(int)$da[6], - (int)$da[2],(int)$da[3],(int)$da[1]); + + + static $formats = array( + TS_UNIX => 'U', + TS_MW => 'YmdHis', + TS_DB => 'Y-m-d H:i:s', + TS_ISO_8601 => 'Y-m-d\TH:i:s\Z', + TS_ISO_8601_BASIC => 'Ymd\THis\Z', + TS_EXIF => 'Y:m:d H:i:s', // This shouldn't ever be used, but is included for completeness + TS_RFC2822 => 'D, d M Y H:i:s', + TS_ORACLE => 'd-m-Y H:i:s.000000', // Was 'd-M-y h.i.s A' . ' +00:00' before r51500 + TS_POSTGRES => 'Y-m-d H:i:s', + TS_DB2 => 'Y-m-d H:i:s', + ); + + if ( !isset( $formats[$outputtype] ) ) { + throw new MWException( 'wfTimestamp() called with illegal output type.' ); } - switch($outputtype) { - case TS_UNIX: + if ( function_exists( "date_create" ) ) { + if ( count( $da ) ) { + $ds = sprintf("%04d-%02d-%02dT%02d:%02d:%02d.00+00:00", + (int)$da[1], (int)$da[2], (int)$da[3], + (int)$da[4], (int)$da[5], (int)$da[6]); + + $d = date_create( $ds, new DateTimeZone( 'GMT' ) ); + } elseif ( $strtime ) { + $d = date_create( $strtime, new DateTimeZone( 'GMT' ) ); + } else { + return false; + } + + if ( !$d ) { + wfDebug("wfTimestamp() fed bogus time value: $outputtype; $ts\n"); + return false; + } + + $output = $d->format( $formats[$outputtype] ); + } else { + if ( count( $da ) ) { + // Warning! gmmktime() acts oddly if the month or day is set to 0 + // We may want to handle that explicitly at some point + $uts = gmmktime( (int)$da[4], (int)$da[5], (int)$da[6], + (int)$da[2], (int)$da[3], (int)$da[1] ); + } elseif ( $strtime ) { + $uts = strtotime( $strtime ); + } + + if ( $uts === false ) { + wfDebug("wfTimestamp() can't parse the timestamp (non 32-bit time? Update php): $outputtype; $ts\n"); + return false; + } + + if ( TS_UNIX == $outputtype ) { return $uts; - case TS_MW: - return gmdate( 'YmdHis', $uts ); - case TS_DB: - return gmdate( 'Y-m-d H:i:s', $uts ); - case TS_ISO_8601: - return gmdate( 'Y-m-d\TH:i:s\Z', $uts ); - // This shouldn't ever be used, but is included for completeness - case TS_EXIF: - return gmdate( 'Y:m:d H:i:s', $uts ); - case TS_RFC2822: - return gmdate( 'D, d M Y H:i:s', $uts ) . ' GMT'; - case TS_ORACLE: - return gmdate( 'd-m-Y H:i:s.000000', $uts); - //return gmdate( 'd-M-y h.i.s A', $uts) . ' +00:00'; - case TS_POSTGRES: - return gmdate( 'Y-m-d H:i:s', $uts) . ' GMT'; - case TS_DB2: - return gmdate( 'Y-m-d H:i:s', $uts); - default: - throw new MWException( 'wfTimestamp() called with illegal output type.'); + } + $output = gmdate( $formats[$outputtype], $uts ); } + + if ( ( $outputtype == TS_RFC2822 ) || ( $outputtype == TS_POSTGRES ) ) { + $output .= ' GMT'; + } + + return $output; } /** @@ -2001,11 +2137,11 @@ function wfTimestampOrNull( $outputtype = TS_UNIX, $ts = null ) { * @return Bool: true if it's Windows, False otherwise. */ function wfIsWindows() { - if (substr(php_uname(), 0, 7) == 'Windows') { - return true; - } else { - return false; + static $isWindows = null; + if ( $isWindows === null ) { + $isWindows = substr( php_uname(), 0, 7 ) == 'Windows'; } + return $isWindows; } /** @@ -2059,11 +2195,11 @@ function wfGetCachedNotice( $name ) { $parserMemc->set( $key, array( 'html' => $parsed, 'hash' => md5( $notice ) ), 600 ); $notice = $parsed; } else { - wfDebug( 'wfGetCachedNotice called for ' . $name . ' with no $wgOut available'."\n" ); + wfDebug( 'wfGetCachedNotice called for ' . $name . ' with no $wgOut available' . "\n" ); $notice = ''; } } - + $notice = '
    ' .$notice . '
    '; wfProfileOut( $fname ); return $notice; } @@ -2072,18 +2208,19 @@ function wfGetNamespaceNotice() { global $wgTitle; # Paranoia - if ( !isset( $wgTitle ) || !is_object( $wgTitle ) ) - return ""; + if ( !isset( $wgTitle ) || !is_object( $wgTitle ) ) { + return ''; + } $fname = 'wfGetNamespaceNotice'; wfProfileIn( $fname ); - $key = "namespacenotice-" . $wgTitle->getNsText(); + $key = 'namespacenotice-' . $wgTitle->getNsText(); $namespaceNotice = wfGetCachedNotice( $key ); - if ( $namespaceNotice && substr ( $namespaceNotice , 0 ,7 ) != "

    <" ) { - $namespaceNotice = '

    ' . $namespaceNotice . "
    "; + if ( $namespaceNotice && substr( $namespaceNotice, 0, 7 ) != '

    <' ) { + $namespaceNotice = '

    ' . $namespaceNotice . '
    '; } else { - $namespaceNotice = ""; + $namespaceNotice = ''; } wfProfileOut( $fname ); @@ -2091,7 +2228,7 @@ function wfGetNamespaceNotice() { } function wfGetSiteNotice() { - global $wgUser, $wgSiteNotice; + global $wgUser; $fname = 'wfGetSiteNotice'; wfProfileIn( $fname ); $siteNotice = ''; @@ -2119,40 +2256,42 @@ function wfGetSiteNotice() { /** * BC wrapper for MimeMagic::singleton() - * @deprecated + * @deprecated No longer needed as of 1.17 (r68836). */ function &wfGetMimeMagic() { + wfDeprecated( __FUNCTION__ ); return MimeMagic::singleton(); } /** - * Tries to get the system directory for temporary files. For PHP >= 5.2.1, - * we'll use sys_get_temp_dir(). The TMPDIR, TMP, and TEMP environment - * variables are then checked in sequence, and if none are set /tmp is - * returned as the generic Unix default. + * Tries to get the system directory for temporary files. The TMPDIR, TMP, and + * TEMP environment variables are then checked in sequence, and if none are set + * try sys_get_temp_dir() for PHP >= 5.2.1. All else fails, return /tmp for Unix + * or C:\Windows\Temp for Windows and hope for the best. + * It is common to call it with tempnam(). * - * NOTE: When possible, use the tempfile() function to create temporary - * files to avoid race conditions on file creation, etc. + * NOTE: When possible, use instead the tmpfile() function to create + * temporary files to avoid race conditions on file creation, etc. * * @return String */ function wfTempDir() { - if( function_exists( 'sys_get_temp_dir' ) ) { - return sys_get_temp_dir(); - } foreach( array( 'TMPDIR', 'TMP', 'TEMP' ) as $var ) { $tmp = getenv( $var ); if( $tmp && file_exists( $tmp ) && is_dir( $tmp ) && is_writable( $tmp ) ) { return $tmp; } } - # Hope this is Unix of some kind! - return '/tmp'; + if( function_exists( 'sys_get_temp_dir' ) ) { + return sys_get_temp_dir(); + } + # Usual defaults + return wfIsWindows() ? 'C:\Windows\Temp' : '/tmp'; } /** * Make directory, and make all parent directories if they don't exist - * + * * @param $dir String: full path to directory to create * @param $mode Integer: chmod value to use, default is $wgDirectoryMode * @param $caller String: optional caller param for debugging. @@ -2165,15 +2304,21 @@ function wfMkdirParents( $dir, $mode = null, $caller = null ) { wfDebug( "$caller: called wfMkdirParents($dir)" ); } - if( strval( $dir ) === '' || file_exists( $dir ) ) + if( strval( $dir ) === '' || file_exists( $dir ) ) { return true; + } $dir = str_replace( array( '\\', '/' ), DIRECTORY_SEPARATOR, $dir ); - if ( is_null( $mode ) ) + if ( is_null( $mode ) ) { $mode = $wgDirectoryMode; + } + + // Turn off the normal warning, we're doing our own below + wfSuppressWarnings(); + $ok = mkdir( $dir, $mode, true ); // PHP5 <3 + wfRestoreWarnings(); - $ok = mkdir( $dir, $mode, true ); // PHP5 <3 if( !$ok ) { // PHP doesn't report the path in its warning message, so add our own to aid in diagnosis. trigger_error( __FUNCTION__ . ": failed to mkdir \"$dir\" mode $mode", E_USER_WARNING ); @@ -2190,13 +2335,29 @@ function wfIncrStats( $key ) { if( $wgStatsMethod == 'udp' ) { global $wgUDPProfilerHost, $wgUDPProfilerPort, $wgDBname; static $socket; - if (!$socket) { - $socket=socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); - $statline="stats/{$wgDBname} - 1 1 1 1 1 -total\n"; - socket_sendto($socket,$statline,strlen($statline),0,$wgUDPProfilerHost,$wgUDPProfilerPort); + if ( !$socket ) { + $socket = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP ); + $statline = "stats/{$wgDBname} - 1 1 1 1 1 -total\n"; + socket_sendto( + $socket, + $statline, + strlen( $statline ), + 0, + $wgUDPProfilerHost, + $wgUDPProfilerPort + ); } - $statline="stats/{$wgDBname} - 1 1 1 1 1 {$key}\n"; - @socket_sendto($socket,$statline,strlen($statline),0,$wgUDPProfilerHost,$wgUDPProfilerPort); + $statline = "stats/{$wgDBname} - 1 1 1 1 1 {$key}\n"; + wfSuppressWarnings(); + socket_sendto( + $socket, + $statline, + strlen( $statline ), + 0, + $wgUDPProfilerHost, + $wgUDPProfilerPort + ); + wfRestoreWarnings(); } elseif( $wgStatsMethod == 'cache' ) { global $wgMemc; $key = wfMemcKey( 'stats', $key ); @@ -2230,7 +2391,7 @@ function wfPercent( $nr, $acc = 2, $round = true ) { function wfEncryptPassword( $userid, $password ) { wfDeprecated(__FUNCTION__); # Just wrap around User::oldCrypt() - return User::oldCrypt($password, $userid); + return User::oldCrypt( $password, $userid ); } /** @@ -2238,7 +2399,7 @@ function wfEncryptPassword( $userid, $password ) { */ function wfAppendToArrayIfNotDefault( $key, $value, $default, &$changed ) { if ( is_null( $changed ) ) { - throw new MWException('GlobalFunctions::wfAppendToArrayIfNotDefault got null'); + throw new MWException( 'GlobalFunctions::wfAppendToArrayIfNotDefault got null' ); } if ( $default[$key] !== $value ) { $changed[$key] = $value; @@ -2250,12 +2411,12 @@ function wfAppendToArrayIfNotDefault( $key, $value, $default, &$changed ) { * looked up didn't exist but a XHTML string, this function checks for the * nonexistance of messages by looking at wfMsg() output * - * @param $msg String: the message key looked up - * @param $wfMsgOut String: the output of wfMsg*() - * @return Boolean + * @param $key String: the message key looked up + * @return Boolean True if the message *doesn't* exist. */ -function wfEmptyMsg( $msg, $wfMsgOut ) { - return $wfMsgOut === htmlspecialchars( "<$msg>" ); +function wfEmptyMsg( $key ) { + global $wgMessageCache; + return $wgMessageCache->get( $key, /*useDB*/true, /*content*/false ) === false; } /** @@ -2271,7 +2432,7 @@ function in_string( $needle, $str ) { function wfSpecialList( $page, $details ) { global $wgContLang; - $details = $details ? ' ' . $wgContLang->getDirMark() . "($details)" : ""; + $details = $details ? ' ' . $wgContLang->getDirMark() . "($details)" : ''; return $page . $details; } @@ -2284,15 +2445,17 @@ function wfUrlProtocols() { global $wgUrlProtocols; static $retval = null; - if ( !is_null( $retval ) ) + if ( !is_null( $retval ) ) { return $retval; + } // Support old-style $wgUrlProtocols strings, for backwards compatibility // with LocalSettings files from 1.5 if ( is_array( $wgUrlProtocols ) ) { $protocols = array(); - foreach ($wgUrlProtocols as $protocol) + foreach ( $wgUrlProtocols as $protocol ) { $protocols[] = preg_quote( $protocol, '/' ); + } $retval = implode( '|', $protocols ); } else { @@ -2333,15 +2496,41 @@ function wfIniGetBool( $setting ) { || preg_match( "/^\s*[+-]?0*[1-9]/", $val ); // approx C atoi() function } +/** + * Wrapper function for PHP's dl(). This doesn't work in most situations from + * PHP 5.3 onward, and is usually disabled in shared environments anyway. + * + * @param $extension String A PHP extension. The file suffix (.so or .dll) + * should be omitted + * @return Bool - Whether or not the extension is loaded + */ +function wfDl( $extension ) { + if( extension_loaded( $extension ) ) { + return true; + } + + $canDl = ( function_exists( 'dl' ) && is_callable( 'dl' ) + && wfIniGetBool( 'enable_dl' ) && !wfIniGetBool( 'safe_mode' ) ); + + if( $canDl ) { + wfSuppressWarnings(); + dl( $extension . '.' . PHP_SHLIB_SUFFIX ); + wfRestoreWarnings(); + } + return extension_loaded( $extension ); +} + /** * Execute a shell command, with time and memory limits mirrored from the PHP * configuration if supported. - * @param $cmd Command line, properly escaped for shell. + * @param $cmd String Command line, properly escaped for shell. * @param &$retval optional, will receive the program's exit code. * (non-zero is usually failure) + * @param $environ Array optional environment variables which should be + * added to the executed command environment. * @return collected stdout as a string (trailing newlines stripped) */ -function wfShellExec( $cmd, &$retval=null ) { +function wfShellExec( $cmd, &$retval = null, $environ = array() ) { global $IP, $wgMaxShellMemory, $wgMaxShellFileSize, $wgMaxShellTime; static $disabled; @@ -2349,24 +2538,55 @@ function wfShellExec( $cmd, &$retval=null ) { $disabled = false; if( wfIniGetBool( 'safe_mode' ) ) { wfDebug( "wfShellExec can't run in safe_mode, PHP's exec functions are too broken.\n" ); - $disabled = true; - } - $functions = explode( ',', ini_get( 'disable_functions' ) ); - $functions = array_map( 'trim', $functions ); - $functions = array_map( 'strtolower', $functions ); - if ( in_array( 'passthru', $functions ) ) { - wfDebug( "passthru is in disabled_functions\n" ); - $disabled = true; + $disabled = 'safemode'; + } else { + $functions = explode( ',', ini_get( 'disable_functions' ) ); + $functions = array_map( 'trim', $functions ); + $functions = array_map( 'strtolower', $functions ); + if ( in_array( 'passthru', $functions ) ) { + wfDebug( "passthru is in disabled_functions\n" ); + $disabled = 'passthru'; + } } } if ( $disabled ) { $retval = 1; - return "Unable to run external programs in safe mode."; + return $disabled == 'safemode' ? + 'Unable to run external programs in safe mode.' : + 'Unable to run external programs, passthru() is disabled.'; } wfInitShellLocale(); - if ( php_uname( 's' ) == 'Linux' ) { + $envcmd = ''; + foreach( $environ as $k => $v ) { + if ( wfIsWindows() ) { + /* Surrounding a set in quotes (method used by wfEscapeShellArg) makes the quotes themselves + * appear in the environment variable, so we must use carat escaping as documented in + * http://technet.microsoft.com/en-us/library/cc723564.aspx + * Note however that the quote isn't listed there, but is needed, and the parentheses + * are listed there but doesn't appear to need it. + */ + $envcmd .= "set $k=" . preg_replace( '/([&|()<>^"])/', '^\\1', $v ) . '&& '; + } else { + /* Assume this is a POSIX shell, thus required to accept variable assignments before the command + * http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_09_01 + */ + $envcmd .= "$k=" . escapeshellarg( $v ) . ' '; + } + } + $cmd = $envcmd . $cmd; + + if ( wfIsWindows() ) { + if ( version_compare( PHP_VERSION, '5.3.0', '<' ) && /* Fixed in 5.3.0 :) */ + ( version_compare( PHP_VERSION, '5.2.1', '>=' ) || php_uname( 's' ) == 'Windows NT' ) ) + { + # Hack to work around PHP's flawed invocation of cmd.exe + # http://news.php.net/php.internals/21796 + # Windows 9x doesn't accept any kind of quotes + $cmd = '"' . $cmd . '"'; + } + } elseif ( php_uname( 's' ) == 'Linux' ) { $time = intval( $wgMaxShellTime ); $mem = intval( $wgMaxShellMemory ); $filesize = intval( $wgMaxShellFileSize ); @@ -2374,16 +2594,9 @@ function wfShellExec( $cmd, &$retval=null ) { if ( $time > 0 && $mem > 0 ) { $script = "$IP/bin/ulimit4.sh"; if ( is_executable( $script ) ) { - $cmd = escapeshellarg( $script ) . " $time $mem $filesize " . escapeshellarg( $cmd ); + $cmd = '/bin/bash ' . escapeshellarg( $script ) . " $time $mem $filesize " . escapeshellarg( $cmd ); } } - } elseif ( php_uname( 's' ) == 'Windows NT' && - version_compare( PHP_VERSION, '5.3.0', '<' ) ) - { - # This is a hack to work around PHP's flawed invocation of cmd.exe - # http://news.php.net/php.internals/21796 - # Which is fixed in 5.3.0 :) - $cmd = '"' . $cmd . '"'; } wfDebug( "wfShellExec: $cmd\n" ); @@ -2405,7 +2618,9 @@ function wfShellExec( $cmd, &$retval=null ) { */ function wfInitShellLocale() { static $done = false; - if ( $done ) return; + if ( $done ) { + return; + } $done = true; global $wgShellLocale; if ( !wfIniGetBool( 'safe_mode' ) ) { @@ -2432,8 +2647,9 @@ function wfInitShellLocale() { function wfUsePHP( $req_ver ) { $php_ver = PHP_VERSION; - if ( version_compare( $php_ver, (string)$req_ver, '<' ) ) - throw new MWException( "PHP $req_ver required--this is only $php_ver" ); + if ( version_compare( $php_ver, (string)$req_ver, '<' ) ) { + throw new MWException( "PHP $req_ver required--this is only $php_ver" ); + } } /** @@ -2452,15 +2668,9 @@ function wfUsePHP( $req_ver ) { function wfUseMW( $req_ver ) { global $wgVersion; - if ( version_compare( $wgVersion, (string)$req_ver, '<' ) ) + if ( version_compare( $wgVersion, (string)$req_ver, '<' ) ) { throw new MWException( "MediaWiki $req_ver required--this is only $wgVersion" ); -} - -/** - * @deprecated use StringUtils::escapeRegexReplacement - */ -function wfRegexReplacement( $string ) { - return StringUtils::escapeRegexReplacement( $string ); + } } /** @@ -2475,8 +2685,8 @@ function wfRegexReplacement( $string ) { * @param $suffix String: to remove if present * @return String */ -function wfBaseName( $path, $suffix='' ) { - $encSuffix = ($suffix == '') +function wfBaseName( $path, $suffix = '' ) { + $encSuffix = ( $suffix == '' ) ? '' : ( '(?:' . preg_quote( $suffix, '#' ) . ')?' ); $matches = array(); @@ -2505,7 +2715,7 @@ function wfRelativePath( $path, $from ) { $path = rtrim( $path, DIRECTORY_SEPARATOR ); $from = rtrim( $from, DIRECTORY_SEPARATOR ); - $pieces = explode( DIRECTORY_SEPARATOR, dirname( $path ) ); + $pieces = explode( DIRECTORY_SEPARATOR, dirname( $path ) ); $against = explode( DIRECTORY_SEPARATOR, $from ); if( $pieces[0] !== $against[0] ) { @@ -2553,24 +2763,26 @@ function wfArrayMerge( $array1/* ... */ ) { /** * Merge arrays in the style of getUserPermissionsErrors, with duplicate removal * e.g. - * wfMergeErrorArrays( - * array( array( 'x' ) ), - * array( array( 'x', '2' ) ), - * array( array( 'x' ) ), + * wfMergeErrorArrays( + * array( array( 'x' ) ), + * array( array( 'x', '2' ) ), + * array( array( 'x' ) ), * array( array( 'y') ) * ); * returns: - * array( + * array( * array( 'x', '2' ), * array( 'x' ), * array( 'y' ) * ) */ -function wfMergeErrorArrays(/*...*/) { +function wfMergeErrorArrays( /*...*/ ) { $args = func_get_args(); $out = array(); foreach ( $args as $errors ) { foreach ( $errors as $params ) { + # FIXME: sometimes get nested arrays for $params, + # which leads to E_NOTICEs $spec = implode( "\t", $params ); $out[$spec] = $params; } @@ -2604,7 +2816,7 @@ function wfParseUrl( $url ) { $bits['delimiter'] = ':'; // parse_url detects for news: and mailto: the host part of an url as path // We have to correct this wrong detection - if ( isset ( $bits['path'] ) ) { + if ( isset( $bits['path'] ) ) { $bits['host'] = $bits['path']; $bits['path'] = ''; } @@ -2625,7 +2837,7 @@ function wfMakeUrlIndex( $url ) { // For emails reverse domainpart only if ( $bits['scheme'] == 'mailto' ) { $mailparts = explode( '@', $bits['host'], 2 ); - if ( count($mailparts) === 2 ) { + if ( count( $mailparts ) === 2 ) { $domainpart = strtolower( implode( '.', array_reverse( explode( '.', $mailparts[1] ) ) ) ); } else { // No domain specified, don't mangle it @@ -2644,39 +2856,53 @@ function wfMakeUrlIndex( $url ) { $prot = $bits['scheme']; $index = $prot . $bits['delimiter'] . $reversedHost; // Leave out user and password. Add the port, path, query and fragment - if ( isset( $bits['port'] ) ) $index .= ':' . $bits['port']; + if ( isset( $bits['port'] ) ) { + $index .= ':' . $bits['port']; + } if ( isset( $bits['path'] ) ) { $index .= $bits['path']; } else { $index .= '/'; } - if ( isset( $bits['query'] ) ) $index .= '?' . $bits['query']; - if ( isset( $bits['fragment'] ) ) $index .= '#' . $bits['fragment']; + if ( isset( $bits['query'] ) ) { + $index .= '?' . $bits['query']; + } + if ( isset( $bits['fragment'] ) ) { + $index .= '#' . $bits['fragment']; + } return $index; } /** * Do any deferred updates and clear the list - * TODO: This could be in Wiki.php if that class made any sense at all + * + * @param $commit Boolean: commit after every update to prevent lock contention */ -function wfDoUpdates() -{ - global $wgPostCommitUpdateList, $wgDeferredUpdateList; - foreach ( $wgDeferredUpdateList as $update ) { - $update->doUpdate(); +function wfDoUpdates( $commit = false ) { + global $wgDeferredUpdateList; + + wfProfileIn( __METHOD__ ); + + // No need to get master connections in case of empty updates array + if ( !count( $wgDeferredUpdateList ) ) { + wfProfileOut( __METHOD__ ); + return; } - foreach ( $wgPostCommitUpdateList as $update ) { + + if ( $commit ) { + $dbw = wfGetDB( DB_MASTER ); + } + + foreach ( $wgDeferredUpdateList as $update ) { $update->doUpdate(); + + if ( $commit && $dbw->trxLevel() ) { + $dbw->commit(); + } } - $wgDeferredUpdateList = array(); - $wgPostCommitUpdateList = array(); -} -/** - * @deprecated use StringUtils::explodeMarkup - */ -function wfExplodeMarkup( $separator, $text ) { - return StringUtils::explodeMarkup( $separator, $text ); + $wgDeferredUpdateList = array(); + wfProfileOut( __METHOD__ ); } /** @@ -2693,7 +2919,7 @@ function wfExplodeMarkup( $separator, $text ) { * @param $lowercase Boolean * @return String or false on invalid input */ -function wfBaseConvert( $input, $sourceBase, $destBase, $pad=1, $lowercase=true ) { +function wfBaseConvert( $input, $sourceBase, $destBase, $pad = 1, $lowercase = true ) { $input = strval( $input ); if( $sourceBase < 2 || $sourceBase > 36 || @@ -2707,7 +2933,7 @@ function wfBaseConvert( $input, $sourceBase, $destBase, $pad=1, $lowercase=true $input == '' ) { return false; } - $digitChars = ( $lowercase ) ? '0123456789abcdefghijklmnopqrstuvwxyz' : '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; + $digitChars = ( $lowercase ) ? '0123456789abcdefghijklmnopqrstuvwxyz' : '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $inDigits = array(); $outChars = ''; @@ -2771,7 +2997,7 @@ function wfBaseConvert( $input, $sourceBase, $destBase, $pad=1, $lowercase=true * @param $name String * @param $p Array: parameters */ -function wfCreateObject( $name, $p ){ +function wfCreateObject( $name, $p ) { $p = array_values( $p ); switch ( count( $p ) ) { case 0: @@ -2789,32 +3015,15 @@ function wfCreateObject( $name, $p ){ case 6: return new $name( $p[0], $p[1], $p[2], $p[3], $p[4], $p[5] ); default: - throw new MWException( "Too many arguments to construtor in wfCreateObject" ); + throw new MWException( 'Too many arguments to construtor in wfCreateObject' ); } } -/** - * Alias for modularized function - * @deprecated Use Http::get() instead - */ -function wfGetHTTP( $url ) { - wfDeprecated(__FUNCTION__); - return Http::get( $url ); -} - -/** - * Alias for modularized function - * @deprecated Use Http::isLocalURL() instead - */ -function wfIsLocalURL( $url ) { - wfDeprecated(__FUNCTION__); - return Http::isLocalURL( $url ); -} - function wfHttpOnlySafe() { global $wgHttpOnlyBlacklist; - if( !version_compare("5.2", PHP_VERSION, "<") ) + if( !version_compare( '5.2', PHP_VERSION, '<' ) ) { return false; + } if( isset( $_SERVER['HTTP_USER_AGENT'] ) ) { foreach( $wgHttpOnlyBlacklist as $regex ) { @@ -2830,15 +3039,15 @@ function wfHttpOnlySafe() { /** * Initialise php session */ -function wfSetupSession() { - global $wgSessionsInMemcached, $wgCookiePath, $wgCookieDomain, +function wfSetupSession( $sessionId = false ) { + global $wgSessionsInMemcached, $wgCookiePath, $wgCookieDomain, $wgCookieSecure, $wgCookieHttpOnly, $wgSessionHandler; if( $wgSessionsInMemcached ) { require_once( 'MemcachedSessions.php' ); } elseif( $wgSessionHandler && $wgSessionHandler != ini_get( 'session.save_handler' ) ) { # Only set this if $wgSessionHandler isn't null and session.save_handler # hasn't already been set to the desired value (that causes errors) - ini_set ( 'session.save_handler', $wgSessionHandler ); + ini_set( 'session.save_handler', $wgSessionHandler ); } $httpOnlySafe = wfHttpOnlySafe(); wfDebugLog( 'cookie', @@ -2856,6 +3065,9 @@ function wfSetupSession() { session_set_cookie_params( 0, $wgCookiePath, $wgCookieDomain, $wgCookieSecure ); } session_cache_limiter( 'private, must-revalidate' ); + if ( $sessionId ) { + session_id( $sessionId ); + } wfSuppressWarnings(); session_start(); wfRestoreWarnings(); @@ -2882,7 +3094,7 @@ function wfGetPrecompiledData( $name ) { function wfGetCaller( $level = 2 ) { $backtrace = wfDebugBacktrace(); if ( isset( $backtrace[$level] ) ) { - return wfFormatStackFrame($backtrace[$level]); + return wfFormatStackFrame( $backtrace[$level] ); } else { $caller = 'unknown'; } @@ -2890,20 +3102,28 @@ function wfGetCaller( $level = 2 ) { } /** - * Return a string consisting all callers in stack, somewhat useful sometimes - * for profiling specific points + * Return a string consisting of callers in the stack. Useful sometimes + * for profiling specific points. + * + * @param $limit The maximum depth of the stack frame to return, or false for + * the entire stack. */ -function wfGetAllCallers() { - return implode('/', array_map('wfFormatStackFrame',array_reverse(wfDebugBacktrace()))); +function wfGetAllCallers( $limit = 3 ) { + $trace = array_reverse( wfDebugBacktrace() ); + if ( !$limit || $limit > count( $trace ) - 1 ) { + $limit = count( $trace ) - 1; + } + $trace = array_slice( $trace, -$limit - 1, $limit ); + return implode( '/', array_map( 'wfFormatStackFrame', $trace ) ); } /** * Return a string representation of frame */ -function wfFormatStackFrame($frame) { - return isset( $frame["class"] )? - $frame["class"]."::".$frame["function"]: - $frame["function"]; +function wfFormatStackFrame( $frame ) { + return isset( $frame['class'] ) ? + $frame['class'] . '::' . $frame['function'] : + $frame['function']; } /** @@ -2953,7 +3173,7 @@ function wfSplitWikiID( $wiki ) { return $bits; } -/* +/** * Get a Database object. * @param $db Integer: index of the connection to get. May be DB_MASTER for the * master (for write queries), DB_SLAVE for potentially lagged read @@ -2968,6 +3188,8 @@ function wfSplitWikiID( $wiki ) { * Note: multiple calls to wfGetDB(DB_SLAVE) during the course of one request * will always return the same object, unless the underlying connection or load * balancer is manually destroyed. + * + * @return DatabaseBase */ function &wfGetDB( $db, $groups = array(), $wiki = false ) { return wfGetLB( $wiki )->getConnection( $db, $groups, $wiki ); @@ -2993,7 +3215,7 @@ function &wfGetLBFactory() { /** * Find a file. * Shortcut for RepoGroup::singleton()->findFile() - * @param $title Either a string or Title object + * @param $title String or Title object * @param $options Associative array of options: * time: requested time for an archived image, or false for the * current version. An image object will be returned which was @@ -3001,7 +3223,7 @@ function &wfGetLBFactory() { * * ignoreRedirect: If true, do not follow file redirects * - * private: If true, return restricted (deleted) files if the current + * private: If true, return restricted (deleted) files if the current * user is allowed to view them. Otherwise, such files will not * be found. * @@ -3016,7 +3238,7 @@ function wfFindFile( $title, $options = array() ) { /** * Get an object referring to a locally registered file. * Returns a valid placeholder object if the file does not exist. - * @param $title Either a string or Title object + * @param $title Title or String * @return File, or null if passed an invalid Title */ function wfLocalFile( $title ) { @@ -3047,12 +3269,13 @@ function wfScript( $script = 'index' ) { global $wgScriptPath, $wgScriptExtension; return "{$wgScriptPath}/{$script}{$wgScriptExtension}"; } + /** - * Get the script url. + * Get the script URL. * - * @return script url + * @return script URL */ -function wfGetScriptUrl(){ +function wfGetScriptUrl() { if( isset( $_SERVER['SCRIPT_NAME'] ) ) { # # as it was called, minus the query string. @@ -3083,7 +3306,7 @@ function wfBoolToStr( $value ) { /** * Load an extension messages file - * @deprecated + * @deprecated in 1.16 (warnings in 1.18, removed in ?) */ function wfLoadExtensionMessages( $extensionName, $langcode = false ) { } @@ -3145,18 +3368,21 @@ function wfDeprecated( $function ) { */ function wfWarn( $msg, $callerOffset = 1, $level = E_USER_NOTICE ) { $callers = wfDebugBacktrace(); - if( isset( $callers[$callerOffset+1] ) ){ - $callerfunc = $callers[$callerOffset+1]; + if( isset( $callers[$callerOffset + 1] ) ){ + $callerfunc = $callers[$callerOffset + 1]; $callerfile = $callers[$callerOffset]; - if( isset( $callerfile['file'] ) && isset( $callerfile['line'] ) ){ + if( isset( $callerfile['file'] ) && isset( $callerfile['line'] ) ) { $file = $callerfile['file'] . ' at line ' . $callerfile['line']; } else { $file = '(internal function)'; } $func = ''; - if( isset( $callerfunc['class'] ) ) + if( isset( $callerfunc['class'] ) ) { $func .= $callerfunc['class'] . '::'; - $func .= @$callerfunc['function']; + } + if( isset( $callerfunc['function'] ) ) { + $func .= $callerfunc['function']; + } $msg .= " [Called from $func in $file]"; } @@ -3187,23 +3413,24 @@ function wfWaitForSlaves( $maxLag, $wiki = false ) { $lb = wfGetLB( $wiki ); list( $host, $lag ) = $lb->getMaxLag( $wiki ); while( $lag > $maxLag ) { - $name = @gethostbyaddr( $host ); + wfSuppressWarnings(); + $name = gethostbyaddr( $host ); + wfRestoreWarnings(); if( $name !== false ) { $host = $name; } print "Waiting for $host (lagged $lag seconds)...\n"; - sleep($maxLag); + sleep( $maxLag ); list( $host, $lag ) = $lb->getMaxLag(); } } } /** - * Output some plain text in command-line mode or in the installer (updaters.inc). - * Do not use it in any other context, its behaviour is subject to change. + * Used to be used for outputting text in the installer/updater + * @deprecated Warnings in 1.19, removal in 1.20 */ function wfOut( $s ) { - static $lineStarted = false; global $wgCommandLineMode; if ( $wgCommandLineMode && !defined( 'MEDIAWIKI_INSTALL' ) ) { echo $s; @@ -3214,14 +3441,14 @@ function wfOut( $s ) { } /** - * Count down from $n to zero on the terminal, with a one-second pause + * Count down from $n to zero on the terminal, with a one-second pause * between showing each number. For use in command-line scripts. */ function wfCountDown( $n ) { for ( $i = $n; $i >= 0; $i-- ) { if ( $i != $n ) { echo str_repeat( "\x08", strlen( $i + 1 ) ); - } + } echo $i; flush(); if ( $i ) { @@ -3231,14 +3458,14 @@ function wfCountDown( $n ) { echo "\n"; } -/** Generate a random 32-character hexadecimal token. +/** + * Generate a random 32-character hexadecimal token. * @param $salt Mixed: some sort of salt, if necessary, to add to random * characters before hashing. */ function wfGenerateToken( $salt = '' ) { - $salt = serialize($salt); - - return md5( mt_rand( 0, 0x7fffffff ) . $salt ); + $salt = serialize( $salt ); + return md5( mt_rand( 0, 0x7fffffff ) . $salt ); } /** @@ -3248,7 +3475,13 @@ function wfGenerateToken( $salt = '' ) { function wfStripIllegalFilenameChars( $name ) { global $wgIllegalFileChars; $name = wfBaseName( $name ); - $name = preg_replace("/[^".Title::legalChars()."]".($wgIllegalFileChars ? "|[".$wgIllegalFileChars."]":"")."/",'-',$name); + $name = preg_replace( + "/[^" . Title::legalChars() . "]" . + ( $wgIllegalFileChars ? "|[" . $wgIllegalFileChars . "]" : '' ) . + "/", + '-', + $name + ); return $name; } @@ -3260,31 +3493,34 @@ function wfStripIllegalFilenameChars( $name ) { */ function wfArrayInsertAfter( $array, $insert, $after ) { // Find the offset of the element to insert after. - $keys = array_keys($array); + $keys = array_keys( $array ); $offsetByKey = array_flip( $keys ); - + $offset = $offsetByKey[$after]; - + // Insert at the specified offset $before = array_slice( $array, 0, $offset + 1, true ); - $after = array_slice( $array, $offset + 1, count($array)-$offset, true ); - + $after = array_slice( $array, $offset + 1, count( $array ) - $offset, true ); + $output = $before + $insert + $after; - + return $output; } /* Recursively converts the parameter (an object) to an array with the same data */ -function wfObjectToArray( $object, $recursive = true ) { +function wfObjectToArray( $objOrArray, $recursive = true ) { $array = array(); - foreach ( get_object_vars($object) as $key => $value ) { - if ( is_object($value) && $recursive ) { + if( is_object( $objOrArray ) ) { + $objOrArray = get_object_vars( $objOrArray ); + } + foreach ( $objOrArray as $key => $value ) { + if ( $recursive && ( is_object( $value ) || is_array( $value ) ) ) { $value = wfObjectToArray( $value ); } - + $array[$key] = $value; } - + return $array; } @@ -3292,22 +3528,21 @@ function wfObjectToArray( $object, $recursive = true ) { * Set PHP's memory limit to the larger of php.ini or $wgMemoryLimit; * @return Integer value memory was set to. */ - -function wfMemoryLimit () { +function wfMemoryLimit() { global $wgMemoryLimit; - $memlimit = wfShorthandToInteger( ini_get( "memory_limit" ) ); - $conflimit = wfShorthandToInteger( $wgMemoryLimit ); + $memlimit = wfShorthandToInteger( ini_get( 'memory_limit' ) ); if( $memlimit != -1 ) { + $conflimit = wfShorthandToInteger( $wgMemoryLimit ); if( $conflimit == -1 ) { wfDebug( "Removing PHP's memory limit\n" ); wfSuppressWarnings(); - ini_set( "memory_limit", $conflimit ); + ini_set( 'memory_limit', $conflimit ); wfRestoreWarnings(); return $conflimit; } elseif ( $conflimit > $memlimit ) { wfDebug( "Raising PHP's memory limit to $conflimit bytes\n" ); wfSuppressWarnings(); - ini_set( "memory_limit", $conflimit ); + ini_set( 'memory_limit', $conflimit ); wfRestoreWarnings(); return $conflimit; } @@ -3320,24 +3555,32 @@ function wfMemoryLimit () { * @param $string String * @return Integer */ -function wfShorthandToInteger ( $string = '' ) { - $string = trim($string); - if( empty($string) ) { return -1; } - $last = strtolower($string[strlen($string)-1]); - $val = intval($string); - switch($last) { +function wfShorthandToInteger( $string = '' ) { + $string = trim( $string ); + if( $string === '' ) { + return -1; + } + $last = $string[strlen( $string ) - 1]; + $val = intval( $string ); + switch( $last ) { case 'g': + case 'G': $val *= 1024; + // break intentionally missing case 'm': + case 'M': $val *= 1024; + // break intentionally missing case 'k': + case 'K': $val *= 1024; } return $val; } -/* Get the normalised IETF language tag +/** + * Get the normalised IETF language tag * @param $code String: The language code. * @return $langCode String: The language code which complying with BCP 47 standards. */ @@ -3346,19 +3589,31 @@ function wfBCP47( $code ) { foreach ( $codeSegment as $segNo => $seg ) { if ( count( $codeSegment ) > 0 ) { // ISO 3166 country code - if ( ( strlen( $seg ) == 2 ) && ( $segNo > 0 ) ) + if ( ( strlen( $seg ) == 2 ) && ( $segNo > 0 ) ) { $codeBCP[$segNo] = strtoupper( $seg ); // ISO 15924 script code - else if ( ( strlen( $seg ) == 4 ) && ( $segNo > 0 ) ) + } elseif ( ( strlen( $seg ) == 4 ) && ( $segNo > 0 ) ) { $codeBCP[$segNo] = ucfirst( $seg ); // Use lowercase for other cases - else + } else { $codeBCP[$segNo] = strtolower( $seg ); + } } else { // Use lowercase for single segment $codeBCP[$segNo] = strtolower( $seg ); } } - $langCode = implode ( '-' , $codeBCP ); + $langCode = implode( '-', $codeBCP ); return $langCode; } + +function wfArrayMap( $function, $input ) { + $ret = array_map( $function, $input ); + foreach ( $ret as $key => $value ) { + $taint = istainted( $input[$key] ); + if ( $taint ) { + taint( $ret[$key], $taint ); + } + } + return $ret; +} diff --git a/includes/HTMLCacheUpdate.php b/includes/HTMLCacheUpdate.php index 6f90b2d9..f0456a22 100644 --- a/includes/HTMLCacheUpdate.php +++ b/includes/HTMLCacheUpdate.php @@ -63,7 +63,6 @@ class HTMLCacheUpdate $this->invalidateTitles( $titleArray ); } } - wfRunHooks( 'HTMLCacheUpdate::doUpdate', array($this->mTitle) ); } /** diff --git a/includes/HTMLFileCache.php b/includes/HTMLFileCache.php index 53af1e6e..26cb147d 100644 --- a/includes/HTMLFileCache.php +++ b/includes/HTMLFileCache.php @@ -7,8 +7,7 @@ /** * Handles talking to the file cache, putting stuff in and taking it back out. - * Mostly called from Article.php, also from DatabaseFunctions.php for the - * emergency abort/fallback to cache. + * Mostly called from Article.php for the emergency abort/fallback to cache. * * Global options that affect this module: * - $wgCachePages @@ -31,7 +30,7 @@ class HTMLFileCache { public function fileCacheName() { if( !$this->mFileCache ) { - global $wgCacheDirectory, $wgFileCacheDirectory, $wgRequest; + global $wgCacheDirectory, $wgFileCacheDirectory, $wgFileCacheDepth; if ( $wgFileCacheDirectory ) { $dir = $wgFileCacheDirectory; @@ -43,17 +42,21 @@ class HTMLFileCache { # Store raw pages (like CSS hits) elsewhere $subdir = ($this->mType === 'raw') ? 'raw/' : ''; + $key = $this->mTitle->getPrefixedDbkey(); - $hash = md5( $key ); + if ( $wgFileCacheDepth > 0 ) { + $hash = md5( $key ); + for ( $i = 1; $i <= $wgFileCacheDepth; $i++ ) { + $subdir .= substr( $hash, 0, $i ) . '/'; + } + } # Avoid extension confusion $key = str_replace( '.', '%2E', urlencode( $key ) ); - - $hash1 = substr( $hash, 0, 1 ); - $hash2 = substr( $hash, 0, 2 ); - $this->mFileCache = "{$wgFileCacheDirectory}/{$subdir}{$hash1}/{$hash2}/{$key}.html"; + $this->mFileCache = "{$dir}/{$subdir}{$key}.html"; - if( $this->useGzip() ) + if( $this->useGzip() ) { $this->mFileCache .= '.gz'; + } wfDebug( __METHOD__ . ": {$this->mFileCache}\n" ); } @@ -135,7 +138,7 @@ class HTMLFileCache { /* Working directory to/from output */ public function loadFromFileCache() { - global $wgOut, $wgMimeType, $wgOutputEncoding, $wgContLanguageCode; + global $wgOut, $wgMimeType, $wgOutputEncoding, $wgLanguageCode; wfDebug( __METHOD__ . "()\n"); $filename = $this->fileCacheName(); // Raw pages should handle cache control on their own, @@ -143,7 +146,7 @@ class HTMLFileCache { if( $this->mType !== 'raw' ) { $wgOut->sendCacheControl(); header( "Content-Type: $wgMimeType; charset={$wgOutputEncoding}" ); - header( "Content-Language: $wgContLanguageCode" ); + header( "Content-Language: $wgLanguageCode" ); } if( $this->useGzip() ) { @@ -210,11 +213,21 @@ class HTMLFileCache { public static function clearFileCache( $title ) { global $wgUseFileCache; - if( !$wgUseFileCache ) return false; + + if ( !$wgUseFileCache ) { + return false; + } + + wfSuppressWarnings(); + $fc = new self( $title, 'view' ); - @unlink( $fc->fileCacheName() ); + unlink( $fc->fileCacheName() ); + $fc = new self( $title, 'raw' ); - @unlink( $fc->fileCacheName() ); + unlink( $fc->fileCacheName() ); + + wfRestoreWarnings(); + return true; } } diff --git a/includes/HTMLForm.php b/includes/HTMLForm.php index 12687dc4..be912daf 100644 --- a/includes/HTMLForm.php +++ b/includes/HTMLForm.php @@ -1,48 +1,52 @@ $info, * where $info is an Associative Array with any of the following: - * - * 'class' -- the subclass of HTMLFormField that will be used - * to create the object. *NOT* the CSS class! - * 'type' -- roughly translates into the type attribute. + * if 'class' is not specified, this is used as a map + * through HTMLForm::$typeMappings to get the class name. + * 'default' -- default value when the form is displayed + * 'id' -- HTML id attribute + * 'cssclass' -- CSS class + * 'options' -- varies according to the specific object. + * 'label-message' -- message key for a message to use as the label. + * can be an array of msg key and then parameters to + * the message. + * 'label' -- alternatively, a raw text message. Overridden by + * label-message + * 'help-message' -- message key for a message to use as a help text. + * can be an array of msg key and then parameters to + * the message. + * 'required' -- passed through to the object, indicating that it + * is a required field. + * 'size' -- the length of text fields + * 'filter-callback -- a function name to give you the chance to + * massage the inputted value before it's processed. + * @see HTMLForm::filter() + * 'validation-callback' -- a function name to give you the chance + * to impose extra validation on the field input. + * @see HTMLForm::validate() + * 'name' -- By default, the 'name' attribute of the input field + * is "wp{$fieldname}". If you want a different name + * (eg one without the "wp" prefix), specify it here and + * it will be used without modification. + * * TODO: Document 'section' / 'subsection' stuff */ class HTMLForm { @@ -64,38 +68,40 @@ class HTMLForm { 'submit' => 'HTMLSubmitField', 'hidden' => 'HTMLHiddenField', 'edittools' => 'HTMLEditTools', - + # HTMLTextField will output the correct type="" attribute automagically. # There are about four zillion other HTML5 input types, like url, but # we don't use those at the moment, so no point in adding all of them. 'email' => 'HTMLTextField', 'password' => 'HTMLTextField', ); - + protected $mMessagePrefix; protected $mFlatFields; protected $mFieldTree; protected $mShowReset = false; public $mFieldData; - + protected $mSubmitCallback; protected $mValidationErrorMessage; - + protected $mPre = ''; protected $mHeader = ''; + protected $mFooter = ''; protected $mPost = ''; protected $mId; - + protected $mSubmitID; protected $mSubmitName; protected $mSubmitText; protected $mSubmitTooltip; protected $mTitle; - + protected $mMethod = 'post'; + protected $mUseMultipart = false; protected $mHiddenFields = array(); protected $mButtons = array(); - + protected $mWrapperLegend = false; /** @@ -103,31 +109,30 @@ class HTMLForm { * @param $descriptor Array of Field constructs, as described above * @param $messagePrefix String a prefix to go in front of default messages */ - public function __construct( $descriptor, $messagePrefix='' ) { + public function __construct( $descriptor, $messagePrefix = '' ) { $this->mMessagePrefix = $messagePrefix; // Expand out into a tree. $loadedDescriptor = array(); $this->mFlatFields = array(); - foreach( $descriptor as $fieldname => $info ) { - $section = ''; - if ( isset( $info['section'] ) ) - $section = $info['section']; + foreach ( $descriptor as $fieldname => $info ) { + $section = isset( $info['section'] ) + ? $info['section'] + : ''; - $info['name'] = $fieldname; - - if ( isset( $info['type'] ) && $info['type'] == 'file' ) + if ( isset( $info['type'] ) && $info['type'] == 'file' ) { $this->mUseMultipart = true; + } - $field = self::loadInputFromParameters( $info ); + $field = self::loadInputFromParameters( $fieldname, $info ); $field->mParent = $this; $setSection =& $loadedDescriptor; - if( $section ) { + if ( $section ) { $sectionParts = explode( '/', $section ); - while( count( $sectionParts ) ) { + while ( count( $sectionParts ) ) { $newName = array_shift( $sectionParts ); if ( !isset( $setSection[$newName] ) ) { @@ -146,15 +151,15 @@ class HTMLForm { } /** - * Add the HTMLForm-specific JavaScript, if it hasn't been + * Add the HTMLForm-specific JavaScript, if it hasn't been * done already. */ static function addJS() { - if( self::$jsAdded ) return; + if ( self::$jsAdded ) return; - global $wgOut, $wgStylePath; + global $wgOut; - $wgOut->addScriptFile( "$wgStylePath/common/htmlform.js" ); + $wgOut->addModules( 'mediawiki.legacy.htmlform' ); } /** @@ -162,7 +167,7 @@ class HTMLForm { * @param $descriptor input Descriptor, as described above * @return HTMLFormField subclass */ - static function loadInputFromParameters( $descriptor ) { + static function loadInputFromParameters( $fieldname, $descriptor ) { if ( isset( $descriptor['class'] ) ) { $class = $descriptor['class']; } elseif ( isset( $descriptor['type'] ) ) { @@ -170,9 +175,11 @@ class HTMLForm { $descriptor['class'] = $class; } - if( !$class ) { + if ( !$class ) { throw new MWException( "Descriptor with no class: " . print_r( $descriptor, true ) ); } + + $descriptor['fieldname'] = $fieldname; $obj = new $class( $descriptor ); @@ -180,31 +187,50 @@ class HTMLForm { } /** - * The here's-one-I-made-earlier option: do the submission if - * posted, or display the form with or without funky valiation - * errors - * @return Bool whether submission was successful. + * Prepare form for submission */ - function show() { - $html = ''; + function prepareForm() { + # Check if we have the info we need + if ( ! $this->mTitle ) { + throw new MWException( "You must call setTitle() on an HTMLForm" ); + } + // FIXME shouldn't this be closer to displayForm() ? self::addJS(); # Load data from the request. $this->loadData(); + } - # Try a submission + /** + * Try submitting, with edit token check first + * @return Status|boolean + */ + function tryAuthorizedSubmit() { global $wgUser, $wgRequest; $editToken = $wgRequest->getVal( 'wpEditToken' ); $result = false; - if ( $wgUser->matchEditToken( $editToken ) ) + if ( $this->getMethod() != 'post' || $wgUser->matchEditToken( $editToken ) ) { $result = $this->trySubmit(); + } + return $result; + } + + /** + * The here's-one-I-made-earlier option: do the submission if + * posted, or display the form with or without funky valiation + * errors + * @return Bool or Status whether submission was successful. + */ + function show() { + $this->prepareForm(); - if( $result === true ) + $result = $this->tryAuthorizedSubmit(); + if ( $result === true || ( $result instanceof Status && $result->isGood() ) ){ return $result; + } - # Display form. $this->displayForm( $result ); return false; } @@ -213,19 +239,20 @@ class HTMLForm { * Validate all the fields, and call the submision callback * function if everything is kosher. * @return Mixed Bool true == Successful submission, Bool false - * == No submission attempted, anything else == Error to + * == No submission attempted, anything else == Error to * display. */ function trySubmit() { # Check for validation - foreach( $this->mFlatFields as $fieldname => $field ) { - if ( !empty( $field->mParams['nodata'] ) ) + foreach ( $this->mFlatFields as $fieldname => $field ) { + if ( !empty( $field->mParams['nodata'] ) ) { continue; - if ( $field->validate( + } + if ( $field->validate( $this->mFieldData[$fieldname], - $this->mFieldData ) - !== true ) - { + $this->mFieldData ) + !== true + ) { return isset( $this->mValidationErrorMessage ) ? $this->mValidationErrorMessage : array( 'htmlform-invalid-input' ); @@ -254,14 +281,14 @@ class HTMLForm { } /** - * Set a message to display on a validation error. + * Set a message to display on a validation error. * @param $msg Mixed String or Array of valid inputs to wfMsgExt() * (so each entry can be either a String or Array) */ function setValidationErrorMessage( $msg ) { $this->mValidationErrorMessage = $msg; } - + /** * Set the introductory message, overwriting any existing message. * @param $msg String complete text of message to display @@ -273,52 +300,58 @@ class HTMLForm { * @param $msg String complete text of message to display */ function addPreText( $msg ) { $this->mPre .= $msg; } - + /** * Add header text, inside the form. * @param $msg String complete text of message to display */ function addHeaderText( $msg ) { $this->mHeader .= $msg; } - + + /** + * Add footer text, inside the form. + * @param $msg String complete text of message to display + */ + function addFooterText( $msg ) { $this->mFooter .= $msg; } + /** * Add text to the end of the display. * @param $msg String complete text of message to display */ function addPostText( $msg ) { $this->mPost .= $msg; } - + /** * Add a hidden field to the output - * @param $name String field name + * @param $name String field name. This will be used exactly as entered * @param $value String field value + * @param $attribs Array */ - public function addHiddenField( $name, $value ){ - $this->mHiddenFields[ $name ] = $value; + public function addHiddenField( $name, $value, $attribs = array() ) { + $attribs += array( 'name' => $name ); + $this->mHiddenFields[] = array( $value, $attribs ); } - - public function addButton( $name, $value, $id=null, $attribs=null ){ + + public function addButton( $name, $value, $id = null, $attribs = null ) { $this->mButtons[] = compact( 'name', 'value', 'id', 'attribs' ); } /** - * Display the form (sending to wgOut), with an appropriate error + * Display the form (sending to wgOut), with an appropriate error * message or stack of messages, and any validation errors, etc. * @param $submitResult Mixed output from HTMLForm::trySubmit() */ function displayForm( $submitResult ) { global $wgOut; - if ( $submitResult !== false ) { - $this->displayErrors( $submitResult ); - } - # For good measure (it is the default) $wgOut->preventClickjacking(); $html = '' + . $this->getErrors( $submitResult ) . $this->mHeader . $this->getBody() . $this->getHiddenFields() . $this->getButtons() + . $this->mFooter ; $html = $this->wrapForm( $html ); @@ -336,25 +369,26 @@ class HTMLForm { * @return String wrapped HTML. */ function wrapForm( $html ) { - + # Include a
    wrapper for style, if requested. - if ( $this->mWrapperLegend !== false ){ + if ( $this->mWrapperLegend !== false ) { $html = Xml::fieldset( $this->mWrapperLegend, $html ); } # Use multipart/form-data - $encType = $this->mUseMultipart + $encType = $this->mUseMultipart ? 'multipart/form-data' : 'application/x-www-form-urlencoded'; # Attributes $attribs = array( 'action' => $this->getTitle()->getFullURL(), - 'method' => 'post', + 'method' => $this->mMethod, 'class' => 'visualClear', - 'enctype' => $encType, + 'enctype' => $encType, ); - if ( !empty( $this->mId ) ) + if ( !empty( $this->mId ) ) { $attribs['id'] = $this->mId; - + } + return Html::rawElement( 'form', $attribs, $html ); } @@ -364,13 +398,17 @@ class HTMLForm { */ function getHiddenFields() { global $wgUser; - $html = ''; - $html .= Html::hidden( 'wpEditToken', $wgUser->editToken(), array( 'id' => 'wpEditToken' ) ) . "\n"; - $html .= Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) . "\n"; + $html = ''; - foreach( $this->mHiddenFields as $name => $value ){ - $html .= Html::hidden( $name, $value ) . "\n"; + if( $this->getMethod() == 'post' ){ + $html .= Html::hidden( 'wpEditToken', $wgUser->editToken(), array( 'id' => 'wpEditToken' ) ) . "\n"; + $html .= Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) . "\n"; + } + + foreach ( $this->mHiddenFields as $data ) { + list( $value, $attribs ) = $data; + $html .= Html::hidden( $attribs['name'], $value, $attribs ) . "\n"; } return $html; @@ -382,13 +420,16 @@ class HTMLForm { */ function getButtons() { $html = ''; - $attribs = array(); - if ( isset( $this->mSubmitID ) ) + if ( isset( $this->mSubmitID ) ) { $attribs['id'] = $this->mSubmitID; - if ( isset( $this->mSubmitName ) ) + } + + if ( isset( $this->mSubmitName ) ) { $attribs['name'] = $this->mSubmitName; + } + if ( isset( $this->mSubmitTooltip ) ) { global $wgUser; $attribs += $wgUser->getSkin()->tooltipAndAccessKeyAttribs( $this->mSubmitTooltip ); @@ -398,7 +439,7 @@ class HTMLForm { $html .= Xml::submitButton( $this->getSubmitText(), $attribs ) . "\n"; - if( $this->mShowReset ) { + if ( $this->mShowReset ) { $html .= Html::element( 'input', array( @@ -407,20 +448,25 @@ class HTMLForm { ) ) . "\n"; } - - foreach( $this->mButtons as $button ){ + + foreach ( $this->mButtons as $button ) { $attrs = array( 'type' => 'submit', 'name' => $button['name'], 'value' => $button['value'] ); - if ( $button['attribs'] ) - $attrs += $button['attribs']; - if( isset( $button['id'] ) ) + + if ( $button['attribs'] ) { + $attrs += $button['attribs']; + } + + if ( isset( $button['id'] ) ) { $attrs['id'] = $button['id']; + } + $html .= Html::element( 'input', $attrs ); } - + return $html; } @@ -434,18 +480,25 @@ class HTMLForm { /** * Format and display an error message stack. * @param $errors Mixed String or Array of message keys + * @return String */ - function displayErrors( $errors ) { - if ( is_array( $errors ) ) { + function getErrors( $errors ) { + if ( $errors instanceof Status ) { + global $wgOut; + if ( $errors->isOK() ) { + $errorstr = ''; + } else { + $errorstr = $wgOut->parse( $errors->getWikiText() ); + } + } elseif ( is_array( $errors ) ) { $errorstr = $this->formatErrors( $errors ); } else { $errorstr = $errors; } - - $errorstr = Html::rawElement( 'div', array( 'class' => 'error' ), $errorstr ); - global $wgOut; - $wgOut->addHTML( $errorstr ); + return $errorstr + ? Html::rawElement( 'div', array( 'class' => 'error' ), $errorstr ) + : ''; } /** @@ -455,13 +508,15 @@ class HTMLForm { */ static function formatErrors( $errors ) { $errorstr = ''; + foreach ( $errors as $error ) { - if( is_array( $error ) ) { + if ( is_array( $error ) ) { $msg = array_shift( $error ); } else { $msg = $error; $error = array(); } + $errorstr .= Html::rawElement( 'li', null, @@ -488,27 +543,26 @@ class HTMLForm { */ function getSubmitText() { return $this->mSubmitText - ? $this->mSubmitText + ? $this->mSubmitText : wfMsg( 'htmlform-submit' ); } - + public function setSubmitName( $name ) { $this->mSubmitName = $name; } - + public function setSubmitTooltip( $name ) { $this->mSubmitTooltip = $name; } - /** - * Set the id for the submit button. + * Set the id for the submit button. * @param $t String. FIXME: Integrity is *not* validated */ function setSubmitID( $t ) { $this->mSubmitID = $t; } - + public function setId( $id ) { $this->mId = $id; } @@ -518,11 +572,11 @@ class HTMLForm { * @param $legend String HTML to go inside the element. * Will be escaped */ - public function setWrapperLegend( $legend ){ $this->mWrapperLegend = $legend; } + public function setWrapperLegend( $legend ) { $this->mWrapperLegend = $legend; } /** * Set the prefix for various default messages - * TODO: currently only used for the
    legend on forms + * TODO: currently only used for the
    legend on forms * with multiple sections; should be used elsewhre? * @param $p String */ @@ -545,6 +599,18 @@ class HTMLForm { function getTitle() { return $this->mTitle; } + + /** + * Set the method used to submit the form + * @param $method String + */ + public function setMethod( $method='post' ){ + $this->mMethod = $method; + } + + public function getMethod(){ + return $this->mMethod; + } /** * TODO: Document @@ -555,14 +621,14 @@ class HTMLForm { $subsectionHtml = ''; $hasLeftColumn = false; - foreach( $fields as $key => $value ) { + foreach ( $fields as $key => $value ) { if ( is_object( $value ) ) { $v = empty( $value->mParams['nodata'] ) ? $this->mFieldData[$key] : $value->getDefault(); $tableHtml .= $value->getTableRow( $v ); - if( $value->getLabel() != ' ' ) + if ( $value->getLabel() != ' ' ) $hasLeftColumn = true; } elseif ( is_array( $value ) ) { $section = $this->displaySection( $value, $key ); @@ -572,13 +638,18 @@ class HTMLForm { } $classes = array(); - if( !$hasLeftColumn ) // Avoid strange spacing when no labels exist + + if ( !$hasLeftColumn ) { // Avoid strange spacing when no labels exist $classes[] = 'mw-htmlform-nolabel'; + } + $attribs = array( - 'class' => implode( ' ', $classes ), + 'class' => implode( ' ', $classes ), ); - if ( $sectionName ) + + if ( $sectionName ) { $attribs['id'] = Sanitizer::escapeId( "mw-htmlform-$sectionName" ); + } $tableHtml = Html::rawElement( 'table', $attribs, Html::rawElement( 'tbody', array(), "\n$tableHtml\n" ) ) . "\n"; @@ -594,9 +665,10 @@ class HTMLForm { $fieldData = array(); - foreach( $this->mFlatFields as $fieldname => $field ) { - if ( !empty( $field->mParams['nodata'] ) ) continue; - if ( !empty( $field->mParams['disabled'] ) ) { + foreach ( $this->mFlatFields as $fieldname => $field ) { + if ( !empty( $field->mParams['nodata'] ) ) { + continue; + } elseif ( !empty( $field->mParams['disabled'] ) ) { $fieldData[$fieldname] = $field->getDefault(); } else { $fieldData[$fieldname] = $field->loadDataFromRequest( $wgRequest ); @@ -604,7 +676,7 @@ class HTMLForm { } # Filter data. - foreach( $fieldData as $name => &$value ) { + foreach ( $fieldData as $name => &$value ) { $field = $this->mFlatFields[$name]; $value = $field->filter( $value, $this->mFlatFields ); } @@ -614,7 +686,7 @@ class HTMLForm { /** * Stop a reset button being shown for this form - * @param $suppressReset Bool set to false to re-enable the + * @param $suppressReset Bool set to false to re-enable the * button again */ function suppressReset( $suppressReset = true ) { @@ -623,9 +695,9 @@ class HTMLForm { /** * Overload this if you want to apply special filtration routines - * to the form as a whole, after it's submitted but before it's + * to the form as a whole, after it's submitted but before it's * processed. - * @param $data + * @param $data * @return unknown_type */ function filterDataForSubmit( $data ) { @@ -634,36 +706,37 @@ class HTMLForm { } /** - * The parent class to generate form fields. Any field type should + * The parent class to generate form fields. Any field type should * be a subclass of this. */ abstract class HTMLFormField { - + protected $mValidationCallback; protected $mFilterCallback; protected $mName; public $mParams; protected $mLabel; # String label. Set on construction protected $mID; + protected $mClass = ''; protected $mDefault; public $mParent; - + /** * This function must be implemented to return the HTML to generate * the input object itself. It should not implement the surrounding * table cells/rows, or labels/help messages. * @param $value String the value to set the input to; eg a default - * text for a text input. + * text for a text input. * @return String valid HTML. */ abstract function getInputHTML( $value ); /** - * Override this function to add specific validation checks on the + * Override this function to add specific validation checks on the * field input. Don't forget to call parent::validate() to ensure * that the user-defined callback mValidationCallback is still run * @param $value String the value the field was submitted with - * @param $alldata $all the data collected from the form + * @param $alldata Array the data collected from the form * @return Mixed Bool true on success, or String error to display. */ function validate( $value, $alldata ) { @@ -671,11 +744,15 @@ abstract class HTMLFormField { return call_user_func( $this->mValidationCallback, $value, $alldata ); } + if ( isset( $this->mParams['required'] ) && $value === '' ) { + return wfMsgExt( 'htmlform-required', 'parseinline' ); + } + return true; } function filter( $value, $alldata ) { - if( isset( $this->mFilterCallback ) ) { + if ( isset( $this->mFilterCallback ) ) { $value = call_user_func( $this->mFilterCallback, $value, $alldata ); } @@ -699,7 +776,7 @@ abstract class HTMLFormField { * @return String the value */ function loadDataFromRequest( $request ) { - if( $request->getCheck( $this->mName ) ) { + if ( $request->getCheck( $this->mName ) ) { return $request->getText( $this->mName ); } else { return $this->getDefault(); @@ -714,7 +791,7 @@ abstract class HTMLFormField { $this->mParams = $params; # Generate the label from a message, if possible - if( isset( $params['label-message'] ) ) { + if ( isset( $params['label-message'] ) ) { $msgInfo = $params['label-message']; if ( is_array( $msgInfo ) ) { @@ -729,15 +806,17 @@ abstract class HTMLFormField { $this->mLabel = $params['label']; } + $this->mName = "wp{$params['fieldname']}"; if ( isset( $params['name'] ) ) { - $name = $params['name']; - $validName = Sanitizer::escapeId( $name ); - if( $name != $validName ) { - throw new MWException("Invalid name '$name' passed to " . __METHOD__ ); - } - $this->mName = 'wp'.$name; - $this->mID = 'mw-input-'.$name; + $this->mName = $params['name']; } + + $validName = Sanitizer::escapeId( $this->mName ); + if ( $this->mName != $validName && !isset( $params['nodata'] ) ) { + throw new MWException( "Invalid name '{$this->mName}' passed to " . __METHOD__ ); + } + + $this->mID = "mw-input-{$this->mName}"; if ( isset( $params['default'] ) ) { $this->mDefault = $params['default']; @@ -746,12 +825,18 @@ abstract class HTMLFormField { if ( isset( $params['id'] ) ) { $id = $params['id']; $validId = Sanitizer::escapeId( $id ); - if( $id != $validId ) { - throw new MWException("Invalid id '$id' passed to " . __METHOD__ ); + + if ( $id != $validId ) { + throw new MWException( "Invalid id '$id' passed to " . __METHOD__ ); } + $this->mID = $id; } + if ( isset( $params['cssclass'] ) ) { + $this->mClass = $params['cssclass']; + } + if ( isset( $params['validation-callback'] ) ) { $this->mValidationCallback = $params['validation-callback']; } @@ -772,22 +857,44 @@ abstract class HTMLFormField { global $wgRequest; $errors = $this->validate( $value, $this->mParent->mFieldData ); - if ( $errors === true || !$wgRequest->wasPosted() ) { + + $cellAttributes = array(); + $verticalLabel = false; + + if ( !empty($this->mParams['vertical-label']) ) { + $cellAttributes['colspan'] = 2; + $verticalLabel = true; + } + + if ( $errors === true || ( !$wgRequest->wasPosted() && ( $this->mParent->getMethod() == 'post' ) ) ) { $errors = ''; } else { $errors = Html::rawElement( 'span', array( 'class' => 'error' ), $errors ); } - $html = $this->getLabelHtml(); - $html .= Html::rawElement( 'td', array( 'class' => 'mw-input' ), - $this->getInputHTML( $value ) ."\n$errors" ); - + $label = $this->getLabelHtml( $cellAttributes ); + $field = Html::rawElement( + 'td', + array( 'class' => 'mw-input' ) + $cellAttributes, + $this->getInputHTML( $value ) . "\n$errors" + ); + $fieldType = get_class( $this ); - - $html = Html::rawElement( 'tr', array( 'class' => "mw-htmlform-field-$fieldType" ), - $html ) . "\n"; + + if ($verticalLabel) { + $html = Html::rawElement( 'tr', + array( 'class' => 'mw-htmlform-vertical-label' ), $label ); + $html .= Html::rawElement( 'tr', + array( 'class' => "mw-htmlform-field-$fieldType {$this->mClass}" ), + $field ); + } else { + $html = Html::rawElement( 'tr', + array( 'class' => "mw-htmlform-field-$fieldType {$this->mClass}" ), + $label . $field ); + } $helptext = null; + if ( isset( $this->mParams['help-message'] ) ) { $msg = $this->mParams['help-message']; $helptext = wfMsgExt( $msg, 'parseinline' ); @@ -812,16 +919,18 @@ abstract class HTMLFormField { function getLabel() { return $this->mLabel; } - function getLabelHtml() { + function getLabelHtml( $cellAttributes = array() ) { # Don't output a for= attribute for labels with no associated input. # Kind of hacky here, possibly we don't want these to be
    ' @@ -157,9 +164,7 @@ class HistoryPage { wfRunHooks( 'PageHistoryBeforeList', array( &$this->article ) ); - /** - * Do the list - */ + // Create and output the list. $pager = new HistoryPager( $this, $year, $month, $tagFilter, $conds ); $wgOut->addHTML( $pager->getNavigationBar() . @@ -184,24 +189,26 @@ class HistoryPage { function fetchRevisions( $limit, $offset, $direction ) { $dbr = wfGetDB( DB_SLAVE ); - if( $direction == HistoryPage::DIR_PREV ) - list($dirs, $oper) = array("ASC", ">="); - else /* $direction == HistoryPage::DIR_NEXT */ - list($dirs, $oper) = array("DESC", "<="); + if ( $direction == HistoryPage::DIR_PREV ) { + list( $dirs, $oper ) = array( "ASC", ">=" ); + } else { /* $direction == HistoryPage::DIR_NEXT */ + list( $dirs, $oper ) = array( "DESC", "<=" ); + } - if( $offset ) - $offsets = array("rev_timestamp $oper '$offset'"); - else + if ( $offset ) { + $offsets = array( "rev_timestamp $oper '$offset'" ); + } else { $offsets = array(); + } $page_id = $this->title->getArticleID(); return $dbr->select( 'revision', Revision::selectFields(), - array_merge(array("rev_page=$page_id"), $offsets), + array_merge( array( "rev_page=$page_id" ), $offsets ), __METHOD__, array( 'ORDER BY' => "rev_timestamp $dirs", - 'USE INDEX' => 'page_timestamp', 'LIMIT' => $limit) + 'USE INDEX' => 'page_timestamp', 'LIMIT' => $limit ) ); } @@ -212,7 +219,7 @@ class HistoryPage { */ function feed( $type ) { global $wgFeedClasses, $wgRequest, $wgFeedLimit; - if( !FeedUtils::checkFeedOutput($type) ) { + if ( !FeedUtils::checkFeedOutput( $type ) ) { return; } @@ -226,14 +233,15 @@ class HistoryPage { // Get a limit on number of feed entries. Provide a sane default // of 10 if none is defined (but limit to $wgFeedLimit max) $limit = $wgRequest->getInt( 'limit', 10 ); - if( $limit > $wgFeedLimit || $limit < 1 ) { + if ( $limit > $wgFeedLimit || $limit < 1 ) { $limit = 10; } - $items = $this->fetchRevisions($limit, 0, HistoryPage::DIR_NEXT); + $items = $this->fetchRevisions( $limit, 0, HistoryPage::DIR_NEXT ); + // Generate feed elements enclosed between header and footer. $feed->outHeader(); - if( $items ) { - foreach( $items as $row ) { + if ( $items ) { + foreach ( $items as $row ) { $feed->outItem( $this->feedItem( $row ) ); } } else { @@ -272,7 +280,7 @@ class HistoryPage { $rev->getTimestamp(), $rev->getComment() ); - if( $rev->getComment() == '' ) { + if ( $rev->getComment() == '' ) { global $wgContLang; $title = wfMsgForContent( 'history-feed-item-nocomment', $rev->getUserText(), @@ -304,10 +312,10 @@ class HistoryPager extends ReverseChronologicalPager { protected $oldIdChecked; protected $preventClickjacking = false; - function __construct( $historyPage, $year='', $month='', $tagFilter = '', $conds = array() ) { + function __construct( $historyPage, $year = '', $month = '', $tagFilter = '', $conds = array() ) { parent::__construct(); $this->historyPage = $historyPage; - $this->title = $this->historyPage->title; + $this->title = $this->historyPage->getTitle(); $this->tagFilter = $tagFilter; $this->getDateCond( $year, $month ); $this->conds = $conds; @@ -328,12 +336,12 @@ class HistoryPager extends ReverseChronologicalPager { function getQueryInfo() { $queryInfo = array( - 'tables' => array('revision'), + 'tables' => array( 'revision' ), 'fields' => Revision::selectFields(), 'conds' => array_merge( - array( 'rev_page' => $this->historyPage->title->getArticleID() ), + array( 'rev_page' => $this->historyPage->getTitle()->getArticleID() ), $this->conds ), - 'options' => array( 'USE INDEX' => array('revision' => 'page_timestamp') ), + 'options' => array( 'USE INDEX' => array( 'revision' => 'page_timestamp' ) ), 'join_conds' => array( 'tag_summary' => array( 'LEFT JOIN', 'ts_rev_id=rev_id' ) ), ); ChangeTags::modifyDisplayQuery( @@ -353,10 +361,11 @@ class HistoryPager extends ReverseChronologicalPager { } function formatRow( $row ) { - if( $this->lastRow ) { - $latest = ($this->counter == 1 && $this->mIsFirst); + if ( $this->lastRow ) { + $latest = ( $this->counter == 1 && $this->mIsFirst ); $firstInList = $this->counter == 1; - $s = $this->historyLine( $this->lastRow, $row, $this->counter++, + $this->counter++; + $s = $this->historyLine( $this->lastRow, $row, $this->title->getNotificationTimestamp(), $latest, $firstInList ); } else { $s = ''; @@ -376,18 +385,26 @@ class HistoryPager extends ReverseChronologicalPager { $this->counter = 1; $this->oldIdChecked = 0; - $wgOut->wrapWikiMsg( "
    \n$1
    ", 'histlegend' ); - $s = Xml::openElement( 'form', array( 'action' => $wgScript, + $wgOut->wrapWikiMsg( "
    \n$1\n
    ", 'histlegend' ); + $s = Html::openElement( 'form', array( 'action' => $wgScript, 'id' => 'mw-history-compare' ) ) . "\n"; - $s .= Xml::hidden( 'title', $this->title->getPrefixedDbKey() ) . "\n"; - $s .= Xml::hidden( 'action', 'historysubmit' ) . "\n"; + $s .= Html::hidden( 'title', $this->title->getPrefixedDbKey() ) . "\n"; + $s .= Html::hidden( 'action', 'historysubmit' ) . "\n"; + + $s .= '
    ' . $this->submitButton( wfMsg( 'compareselectedversions' ), + array( 'class' => 'historysubmit' ) ) . "\n"; $this->buttons = '
    '; - if( $wgUser->isAllowed('deleterevision') ) { + $this->buttons .= $this->submitButton( wfMsg( 'compareselectedversions' ), + array( 'class' => 'historysubmit' ) + + $wgUser->getSkin()->tooltipAndAccessKeyAttribs( 'compareselectedversions' ) + ) . "\n"; + + if ( $wgUser->isAllowed( 'deleterevision' ) ) { $this->preventClickjacking(); $float = $wgContLang->alignEnd(); # Note bug #20966,
    '; - $s .= $this->buttons . '
      ' . "\n"; + $s .= '
      ' . "\n"; return $s; } function getEndBody() { - if( $this->lastRow ) { + if ( $this->lastRow ) { $latest = $this->counter == 1 && $this->mIsFirst; $firstInList = $this->counter == 1; - if( $this->mIsBackwards ) { + if ( $this->mIsBackwards ) { # Next row is unknown, but for UI reasons, probably exists if an offset has been specified - if( $this->mOffset == '' ) { + if ( $this->mOffset == '' ) { $next = null; } else { $next = 'unknown'; @@ -425,14 +437,15 @@ class HistoryPager extends ReverseChronologicalPager { # The next row is the past-the-end row $next = $this->mPastTheEndRow; } - $s = $this->historyLine( $this->lastRow, $next, $this->counter++, + $this->counter++; + $s = $this->historyLine( $this->lastRow, $next, $this->title->getNotificationTimestamp(), $latest, $firstInList ); } else { $s = ''; } $s .= "
    \n"; # Add second buttons only if there is more than one rev - if( $this->getNumRows() > 2 ) { + if ( $this->getNumRows() > 2 ) { $s .= $this->buttons; } $s .= ''; @@ -448,7 +461,7 @@ class HistoryPager extends ReverseChronologicalPager { */ function submitButton( $message, $attributes = array() ) { # Disable submit button if history has 1 revision only - if( $this->getNumRows() > 1 ) { + if ( $this->getNumRows() > 1 ) { return Xml::submitButton( $message , $attributes ); } else { return ''; @@ -462,13 +475,12 @@ class HistoryPager extends ReverseChronologicalPager { * * @param $row Object: the database row corresponding to the previous line. * @param $next Mixed: the database row corresponding to the next line. - * @param $counter Integer: apparently a counter of what row number we're at, counted from the top row = 1. * @param $notificationtimestamp * @param $latest Boolean: whether this row corresponds to the page's latest revision. * @param $firstInList Boolean: whether this row corresponds to the first displayed on this history page. * @return String: HTML output for the row */ - function historyLine( $row, $next, $counter = '', $notificationtimestamp = false, + function historyLine( $row, $next, $notificationtimestamp = false, $latest = false, $firstInList = false ) { global $wgUser, $wgLang; @@ -476,8 +488,8 @@ class HistoryPager extends ReverseChronologicalPager { $rev->setTitle( $this->title ); $curlink = $this->curLink( $rev, $latest ); - $lastlink = $this->lastLink( $rev, $next, $counter ); - $diffButtons = $this->diffButtons( $rev, $firstInList, $counter ); + $lastlink = $this->lastLink( $rev, $next ); + $diffButtons = $this->diffButtons( $rev, $firstInList ); $histLinks = Html::rawElement( 'span', array( 'class' => 'mw-history-histlinks' ), @@ -489,61 +501,63 @@ class HistoryPager extends ReverseChronologicalPager { $classes = array(); $del = ''; - // User can delete revisions... - if( $wgUser->isAllowed( 'deleterevision' ) ) { + // Show checkboxes for each revision + if ( $wgUser->isAllowed( 'deleterevision' ) ) { $this->preventClickjacking(); // If revision was hidden from sysops, disable the checkbox - if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) { + if ( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) { $del = Xml::check( 'deleterevisions', false, array( 'disabled' => 'disabled' ) ); // Otherwise, enable the checkbox... } else { $del = Xml::check( 'showhiderevisions', false, - array( 'name' => 'ids['.$rev->getId().']' ) ); + array( 'name' => 'ids[' . $rev->getId() . ']' ) ); } // User can only view deleted revisions... - } else if( $rev->getVisibility() && $wgUser->isAllowed( 'deletedhistory' ) ) { + } else if ( $rev->getVisibility() && $wgUser->isAllowed( 'deletedhistory' ) ) { // If revision was hidden from sysops, disable the link - if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) { + if ( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) { $cdel = $this->getSkin()->revDeleteLinkDisabled( false ); // Otherwise, show the link... } else { $query = array( 'type' => 'revision', - 'target' => $this->title->getPrefixedDbkey(), 'ids' => $rev->getId() ); + 'target' => $this->title->getPrefixedDbkey(), 'ids' => $rev->getId() ); $del .= $this->getSkin()->revDeleteLink( $query, $rev->isDeleted( Revision::DELETED_RESTRICTED ), false ); } } - if( $del ) $s .= " $del "; + if ( $del ) { + $s .= " $del "; + } $s .= " $link"; $s .= " " . $this->getSkin()->revUserTools( $rev, true ) . ""; - if( $rev->isMinor() ) { + if ( $rev->isMinor() ) { $s .= ' ' . ChangesList::flag( 'minor' ); } - if( !is_null( $size = $rev->getSize() ) && !$rev->isDeleted( Revision::DELETED_TEXT ) ) { + if ( !is_null( $size = $rev->getSize() ) && !$rev->isDeleted( Revision::DELETED_TEXT ) ) { $s .= ' ' . $this->getSkin()->formatRevisionSize( $size ); } $s .= $this->getSkin()->revComment( $rev, false, true ); - if( $notificationtimestamp && ($row->rev_timestamp >= $notificationtimestamp) ) { + if ( $notificationtimestamp && ( $row->rev_timestamp >= $notificationtimestamp ) ) { $s .= ' ' . wfMsgHtml( 'updatedmarker' ) . ''; } $tools = array(); # Rollback and undo links - if( !is_null( $next ) && is_object( $next ) ) { - if( $latest && $this->title->userCan( 'rollback' ) && $this->title->userCan( 'edit' ) ) { + if ( !is_null( $next ) && is_object( $next ) ) { + if ( $latest && $this->title->userCan( 'rollback' ) && $this->title->userCan( 'edit' ) ) { $this->preventClickjacking(); - $tools[] = ''. - $this->getSkin()->buildRollbackLink( $rev ).''; + $tools[] = '' . + $this->getSkin()->buildRollbackLink( $rev ) . ''; } - if( $this->title->quickUserCan( 'edit' ) + if ( $this->title->quickUserCan( 'edit' ) && !$rev->isDeleted( Revision::DELETED_TEXT ) && !$next->rev_deleted & Revision::DELETED_TEXT ) { @@ -566,12 +580,12 @@ class HistoryPager extends ReverseChronologicalPager { } } - if( $tools ) { + if ( $tools ) { $s .= ' (' . $wgLang->pipeList( $tools ) . ')'; } # Tags - list($tagSummary, $newClasses) = ChangeTags::formatSummaryRow( $row->ts_tags, 'history' ); + list( $tagSummary, $newClasses ) = ChangeTags::formatSummaryRow( $row->ts_tags, 'history' ); $classes = array_merge( $classes, $newClasses ); $s .= " $tagSummary"; @@ -593,9 +607,9 @@ class HistoryPager extends ReverseChronologicalPager { */ function revLink( $rev ) { global $wgLang; - $date = $wgLang->timeanddate( wfTimestamp(TS_MW, $rev->getTimestamp()), true ); + $date = $wgLang->timeanddate( wfTimestamp( TS_MW, $rev->getTimestamp() ), true ); $date = htmlspecialchars( $date ); - if( !$rev->isDeleted( Revision::DELETED_TEXT ) ) { + if ( $rev->userCan( Revision::DELETED_TEXT ) ) { $link = $this->getSkin()->link( $this->title, $date, @@ -604,7 +618,10 @@ class HistoryPager extends ReverseChronologicalPager { array( 'known', 'noclasses' ) ); } else { - $link = "$date"; + $link = $date; + } + if ( $rev->isDeleted( Revision::DELETED_TEXT ) ) { + $link = "$link"; } return $link; } @@ -618,7 +635,7 @@ class HistoryPager extends ReverseChronologicalPager { */ function curLink( $rev, $latest ) { $cur = $this->historyPage->message['cur']; - if( $latest || !$rev->userCan( Revision::DELETED_TEXT ) ) { + if ( $latest || !$rev->userCan( Revision::DELETED_TEXT ) ) { return $cur; } else { return $this->getSkin()->link( @@ -639,17 +656,16 @@ class HistoryPager extends ReverseChronologicalPager { * * @param $prevRev Revision: the previous revision * @param $next Mixed: the newer revision - * @param $counter Integer: what row on the history list this is * @return String */ - function lastLink( $prevRev, $next, $counter ) { + function lastLink( $prevRev, $next ) { $last = $this->historyPage->message['last']; # $next may either be a Row, null, or "unkown" - $nextRev = is_object($next) ? new Revision( $next ) : $next; - if( is_null($next) ) { + $nextRev = is_object( $next ) ? new Revision( $next ) : $next; + if ( is_null( $next ) ) { # Probably no next row return $last; - } elseif( $next === 'unknown' ) { + } elseif ( $next === 'unknown' ) { # Next row probably exists but is unknown, use an oldid=prev link return $this->getSkin()->link( $this->title, @@ -661,8 +677,8 @@ class HistoryPager extends ReverseChronologicalPager { ), array( 'known', 'noclasses' ) ); - } elseif( !$prevRev->userCan(Revision::DELETED_TEXT) - || !$nextRev->userCan(Revision::DELETED_TEXT) ) + } elseif ( !$prevRev->userCan( Revision::DELETED_TEXT ) + || !$nextRev->userCan( Revision::DELETED_TEXT ) ) { return $last; } else { @@ -684,15 +700,15 @@ class HistoryPager extends ReverseChronologicalPager { * * @param $rev Revision object * @param $firstInList Boolean: is this version the first one? - * @param $counter Integer: a counter of what row number we're at, counted from the top row = 1. + * * @return String: HTML output for the radio buttons */ - function diffButtons( $rev, $firstInList, $counter ) { - if( $this->getNumRows() > 1 ) { + function diffButtons( $rev, $firstInList ) { + if ( $this->getNumRows() > 1 ) { $id = $rev->getId(); $radio = array( 'type' => 'radio', 'value' => $id ); /** @todo: move title texts to javascript */ - if( $firstInList ) { + if ( $firstInList ) { $first = Xml::element( 'input', array_merge( $radio, array( 'style' => 'visibility:hidden', @@ -702,10 +718,10 @@ class HistoryPager extends ReverseChronologicalPager { $checkmark = array( 'checked' => 'checked' ); } else { # Check visibility of old revisions - if( !$rev->userCan( Revision::DELETED_TEXT ) ) { + if ( !$rev->userCan( Revision::DELETED_TEXT ) ) { $radio['disabled'] = 'disabled'; $checkmark = array(); // We will check the next possible one - } else if( $counter == 2 || !$this->oldIdChecked ) { + } else if ( !$this->oldIdChecked ) { $checkmark = array( 'checked' => 'checked' ); $this->oldIdChecked = $id; } else { diff --git a/includes/Hooks.php b/includes/Hooks.php index dec1c442..168f4bd9 100644 --- a/includes/Hooks.php +++ b/includes/Hooks.php @@ -1,6 +1,7 @@ . * * This program is free software; you can redistribute it and/or modify @@ -24,9 +25,15 @@ /** + * Call hook functions defined in $wgHooks + * * Because programmers assign to $wgHooks, we need to be very * careful about its contents. So, there's a lot more error-checking * in here than would normally be necessary. + * + * @param $event String: event name + * @param $args Array: parameters passed to hook functions + * @return Boolean */ function wfRunHooks($event, $args = array()) { @@ -39,12 +46,10 @@ function wfRunHooks($event, $args = array()) { if (!is_array($wgHooks)) { throw new MWException("Global hooks array is not an array!\n"); - return false; } if (!is_array($wgHooks[$event])) { throw new MWException("Hooks array for event '$event' is not an array!\n"); - return false; } foreach ($wgHooks[$event] as $index => $hook) { @@ -55,6 +60,7 @@ function wfRunHooks($event, $args = array()) { $data = null; $have_data = false; $closure = false; + $badhookmsg = false; /* $hook can be: a function, an object, an array of $function and $data, * an array of just a function, an array of object and method, or an @@ -128,13 +134,35 @@ function wfRunHooks($event, $args = array()) { // Run autoloader (workaround for call_user_func_array bug) is_callable( $callback ); - /* Call the hook. */ + /* Call the hook. The documentation of call_user_func_array clearly + * states that FALSE is returned on failure. However this is not + * case always. In some version of PHP if the function signature + * does not match the call signature, PHP will issue an warning: + * Param y in x expected to be a reference, value given. + * + * In that case the call will also return null. The following code + * catches that warning and provides better error message. The + * function documentation also says that: + * In other words, it does not depend on the function signature + * whether the parameter is passed by a value or by a reference. + * There is also PHP bug http://bugs.php.net/bug.php?id=47554 which + * is unsurprisingly marked as bogus. In short handling of failures + * with call_user_func_array is a failure, the documentation for that + * function is wrong and misleading and PHP developers don't see any + * problem here. + */ + $retval = null; + set_error_handler( 'hookErrorHandler' ); wfProfileIn( $func ); - $retval = call_user_func_array( $callback, $hook_args ); + try { + $retval = call_user_func_array( $callback, $hook_args ); + } catch ( MWHookException $e ) { + $badhookmsg = $e->getMessage(); + } wfProfileOut( $func ); + restore_error_handler(); /* String return is an error; false return means stop processing. */ - if ( is_string( $retval ) ) { global $wgOut; $wgOut->showFatalError( $retval ); @@ -152,9 +180,14 @@ function wfRunHooks($event, $args = array()) { } else { $prettyFunc = strval( $callback ); } - throw new MWException( "Detected bug in an extension! " . - "Hook $prettyFunc failed to return a value; " . - "should return true to continue hook processing or false to abort." ); + if ( $badhookmsg ) { + throw new MWException( "Detected bug in an extension! " . + "Hook $prettyFunc has invalid call signature; " . $badhookmsg ); + } else { + throw new MWException( "Detected bug in an extension! " . + "Hook $prettyFunc failed to return a value; " . + "should return true to continue hook processing or false to abort." ); + } } else if ( !$retval ) { return false; } @@ -162,3 +195,12 @@ function wfRunHooks($event, $args = array()) { return true; } + +function hookErrorHandler( $errno, $errstr ) { + if ( strpos( $errstr, 'expected to be a reference, value given' ) !== false ) { + throw new MWHookException( $errstr ); + } + return false; +} + +class MWHookException extends MWException {} \ No newline at end of file diff --git a/includes/Html.php b/includes/Html.php index 00183b31..6c802ca3 100644 --- a/includes/Html.php +++ b/includes/Html.php @@ -1,21 +1,27 @@ elements. + * + * @since 1.16 */ class Html { # List of void elements from HTML5, section 9.1.2 as of 2009-08-10 @@ -59,10 +67,9 @@ class Html { ); # Boolean attributes, which may have the value omitted entirely. Manually - # collected from the HTML5 spec as of 2009-08-10. + # collected from the HTML5 spec as of 2010-06-07. private static $boolAttribs = array( 'async', - 'autobuffer', 'autofocus', 'autoplay', 'checked', @@ -72,15 +79,18 @@ class Html { 'formnovalidate', 'hidden', 'ismap', + 'itemscope', 'loop', 'multiple', 'novalidate', 'open', + 'pubdate', 'readonly', 'required', 'reversed', 'scoped', 'seamless', + 'selected', ); /** @@ -115,7 +125,7 @@ class Html { } return $start; } else { - return "$start$contents"; + return "$start$contents" . self::closeElement( $element ); } } @@ -134,15 +144,23 @@ class Html { /** * Identical to rawElement(), but has no third parameter and omits the end - * tag (and the self-closing / in XML mode for empty elements). + * tag (and the self-closing '/' in XML mode for empty elements). */ public static function openElement( $element, $attribs = array() ) { - global $wgHtml5; + global $wgHtml5, $wgWellFormedXml; $attribs = (array)$attribs; # This is not required in HTML5, but let's do it anyway, for # consistency and better compression. $element = strtolower( $element ); + # In text/html, initial and tags can be omitted under + # pretty much any sane circumstances, if they have no attributes. See: + # + if ( !$wgWellFormedXml && !$attribs + && in_array( $element, array( 'html', 'head' ) ) ) { + return ''; + } + # Remove HTML5-only attributes if we aren't doing HTML5, and disable # form validation regardless (see bug 23769 and the more detailed # comment in expandAttributes()) @@ -170,22 +188,6 @@ class Html { && !$wgHtml5 ) { unset( $attribs['type'] ); } - # Here we're blacklisting some HTML5-only attributes... - $html5attribs = array( - 'autocomplete', - 'autofocus', - 'max', - 'min', - 'multiple', - 'pattern', - 'placeholder', - 'required', - 'step', - 'spellcheck', - ); - foreach ( $html5attribs as $badAttr ) { - unset( $attribs[$badAttr] ); - } } if ( !$wgHtml5 && $element == 'textarea' && isset( $attribs['maxlength'] ) ) { unset( $attribs['maxlength'] ); @@ -195,6 +197,36 @@ class Html { self::dropDefaults( $element, $attribs ) ) . '>'; } + /** + * Returns "", except if $wgWellFormedXml is off, in which case + * it returns the empty string when that's guaranteed to be safe. + * + * @param $element string Name of the element, e.g., 'a' + * @return string A closing tag, if required + */ + public static function closeElement( $element ) { + global $wgWellFormedXml; + + $element = strtolower( $element ); + + # Reference: + # http://www.whatwg.org/specs/web-apps/current-work/multipage/syntax.html#optional-tags + if ( !$wgWellFormedXml && in_array( $element, array( + 'html', + 'head', + 'body', + 'li', + 'dt', + 'dd', + 'tr', + 'td', + 'th', + ) ) ) { + return ''; + } + return ""; + } + /** * Given an element name and an associative array of element attributes, * return an array that is functionally identical to the input array, but @@ -344,6 +376,22 @@ class Html { continue; } + # Here we're blacklisting some HTML5-only attributes... + if ( !$wgHtml5 && in_array( $key, array( + 'autocomplete', + 'autofocus', + 'max', + 'min', + 'multiple', + 'pattern', + 'placeholder', + 'required', + 'step', + 'spellcheck', + ) ) ) { + continue; + } + # See the "Attributes" section in the HTML syntax part of HTML5, # 9.1.2.3 as of 2009-08-10. Most attributes can have quotation # marks omitted, but not all. (Although a literal " is not @@ -499,8 +547,7 @@ class Html { } /** - * Convenience function to produce an input element with type=hidden, like - * Xml::hidden. + * Convenience function to produce an input element with type=hidden * * @param $name string name attribute * @param $value string value attribute @@ -529,11 +576,68 @@ class Html { global $wgHtml5; $attribs['name'] = $name; if ( !$wgHtml5 ) { - if ( !isset( $attribs['cols'] ) ) + if ( !isset( $attribs['cols'] ) ) { $attribs['cols'] = ""; - if ( !isset( $attribs['rows'] ) ) + } + if ( !isset( $attribs['rows'] ) ) { $attribs['rows'] = ""; + } } return self::element( 'textarea', $attribs, $value ); } + + /** + * Constructs the opening html-tag with necessary doctypes depending on + * global variables. + * + * @param $attribs array Associative array of miscellaneous extra + * attributes, passed to Html::element() of html tag. + * @return string Raw HTML + */ + public static function htmlHeader( $attribs = array() ) { + $ret = ''; + + global $wgMimeType, $wgOutputEncoding; + if ( self::isXmlMimeType( $wgMimeType ) ) { + $ret .= "\n"; + } + + global $wgHtml5, $wgHtml5Version, $wgDocType, $wgDTD; + global $wgXhtmlNamespaces, $wgXhtmlDefaultNamespace; + if ( $wgHtml5 ) { + $ret .= "\n"; + if ( $wgHtml5Version ) { + $attribs['version'] = $wgHtml5Version; + } + } else { + $ret .= "\n"; + $attribs['xmlns'] = $wgXhtmlDefaultNamespace; + foreach ( $wgXhtmlNamespaces as $tag => $ns ) { + $attribs["xmlns:$tag"] = $ns; + } + } + $html = Html::openElement( 'html', $attribs ); + if ( $html ) { + $html .= "\n"; + } + $ret .= $html; + return $ret; + } + + /** + * Determines if the given mime type is xml. + * + * @param $mimetype string MimeType + * @return Boolean + */ + public static function isXmlMimeType( $mimetype ) { + switch ( $mimetype ) { + case 'text/xml': + case 'application/xhtml+xml': + case 'application/xml': + return true; + default: + return false; + } + } } diff --git a/includes/HttpFunctions.old.php b/includes/HttpFunctions.old.php new file mode 100644 index 00000000..6d28abc6 --- /dev/null +++ b/includes/HttpFunctions.old.php @@ -0,0 +1,12 @@ +execute(); + if ( $status->isOK() ) { return $req->getContent(); } else { @@ -60,11 +69,13 @@ class Http { /** * Check if the URL can be served by localhost - * @param $url string Full url to check - * @return bool + * + * @param $url String: full url to check + * @return Boolean */ public static function isLocalURL( $url ) { global $wgCommandLineMode, $wgConf; + if ( $wgCommandLineMode ) { return false; } @@ -77,6 +88,7 @@ class Http { $domainParts = explode( '.', $host ); // Check if this domain or any superdomain is listed in $wgConf as a local virtual host $domainParts = array_reverse( $domainParts ); + for ( $i = 0; $i < count( $domainParts ); $i++ ) { $domainPart = $domainParts[$i]; if ( $i == 0 ) { @@ -84,17 +96,19 @@ class Http { } else { $domain = $domainPart . '.' . $domain; } + if ( $wgConf->isLocalVHost( $domain ) ) { return true; } } } + return false; } /** * A standard user-agent we can use for external requests. - * @returns string + * @return String */ public static function userAgent() { global $wgVersion; @@ -102,15 +116,19 @@ class Http { } /** - * Checks that the given URI is a valid one + * Checks that the given URI is a valid one. Hardcoding the + * protocols, because we only want protocols that both cURL + * and php support. + * + * @fixme this is wildly inaccurate and fails to actually check most stuff + * * @param $uri Mixed: URI to check for validity - * @returns bool + * @returns Boolean */ public static function isValidURI( $uri ) { return preg_match( - '/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/', - $uri, - $matches + '/^https?:\/\/[^\/\s]\S*$/D', + $uri ); } } @@ -118,8 +136,11 @@ class Http { /** * This wrapper class will call out to curl (if available) or fallback * to regular PHP if necessary for handling internal HTTP requests. + * + * Renamed from HttpRequest to MWHttpRequst to avoid conflict with + * php's HTTP extension. */ -class HttpRequest { +class MWHttpRequest { protected $content; protected $timeout = 'default'; protected $headersOnly = null; @@ -127,6 +148,7 @@ class HttpRequest { protected $proxy = null; protected $noProxy = false; protected $sslVerifyHost = true; + protected $sslVerifyCert = true; protected $caInfo = null; protected $method = "GET"; protected $reqHeaders = array(); @@ -134,7 +156,7 @@ class HttpRequest { protected $parsedUrl; protected $callback; protected $maxRedirects = 5; - protected $followRedirects = true; + protected $followRedirects = false; protected $cookieJar; @@ -146,8 +168,8 @@ class HttpRequest { public $status; /** - * @param $url string url to use - * @param $options array (optional) extra params to pass (see Http::request()) + * @param $url String: url to use + * @param $options Array: (optional) extra params to pass (see Http::request()) */ function __construct( $url, $options = array() ) { global $wgHTTPTimeout; @@ -156,21 +178,22 @@ class HttpRequest { $this->parsedUrl = parse_url( $url ); if ( !Http::isValidURI( $this->url ) ) { - $this->status = Status::newFatal('http-invalid-url'); + $this->status = Status::newFatal( 'http-invalid-url' ); } else { $this->status = Status::newGood( 100 ); // continue } - if ( isset($options['timeout']) && $options['timeout'] != 'default' ) { + if ( isset( $options['timeout'] ) && $options['timeout'] != 'default' ) { $this->timeout = $options['timeout']; } else { $this->timeout = $wgHTTPTimeout; } $members = array( "postData", "proxy", "noProxy", "sslVerifyHost", "caInfo", - "method", "followRedirects", "maxRedirects" ); + "method", "followRedirects", "maxRedirects", "sslVerifyCert" ); + foreach ( $members as $o ) { - if ( isset($options[$o]) ) { + if ( isset( $options[$o] ) ) { $this->$o = $options[$o]; } } @@ -178,42 +201,54 @@ class HttpRequest { /** * Generate a new request object - * @see HttpRequest::__construct + * @see MWHttpRequest::__construct */ public static function factory( $url, $options = null ) { if ( !Http::$httpEngine ) { Http::$httpEngine = function_exists( 'curl_init' ) ? 'curl' : 'php'; } elseif ( Http::$httpEngine == 'curl' && !function_exists( 'curl_init' ) ) { - throw new MWException( __METHOD__.': curl (http://php.net/curl) is not installed, but'. + throw new MWException( __METHOD__ . ': curl (http://php.net/curl) is not installed, but' . ' Http::$httpEngine is set to "curl"' ); } switch( Http::$httpEngine ) { - case 'curl': - return new CurlHttpRequest( $url, $options ); - case 'php': - if ( !wfIniGetBool( 'allow_url_fopen' ) ) { - throw new MWException( __METHOD__.': allow_url_fopen needs to be enabled for pure PHP'. - ' http requests to work. If possible, curl should be used instead. See http://php.net/curl.' ); - } - return new PhpHttpRequest( $url, $options ); - default: - throw new MWException( __METHOD__.': The setting of Http::$httpEngine is not valid.' ); + case 'curl': + return new CurlHttpRequest( $url, $options ); + case 'php': + if ( !wfIniGetBool( 'allow_url_fopen' ) ) { + throw new MWException( __METHOD__ . ': allow_url_fopen needs to be enabled for pure PHP' . + ' http requests to work. If possible, curl should be used instead. See http://php.net/curl.' ); + } + return new PhpHttpRequest( $url, $options ); + default: + throw new MWException( __METHOD__ . ': The setting of Http::$httpEngine is not valid.' ); } } /** * Get the body, or content, of the response to the request - * @return string + * + * @return String */ public function getContent() { return $this->content; } + /** + * Set the parameters of the request + + * @param $args Array + * @todo overload the args param + */ + public function setData( $args ) { + $this->postData = $args; + } + /** * Take care of setting up the proxy * (override in subclass) - * @return string + * + * @return String */ public function proxySetup() { global $wgHTTPProxy; @@ -221,6 +256,7 @@ class HttpRequest { if ( $this->proxy ) { return; } + if ( Http::isLocalURL( $this->url ) ) { $this->proxy = 'http://localhost:80/'; } elseif ( $wgHTTPProxy ) { @@ -234,20 +270,20 @@ class HttpRequest { * Set the refererer header */ public function setReferer( $url ) { - $this->setHeader('Referer', $url); + $this->setHeader( 'Referer', $url ); } /** * Set the user agent */ public function setUserAgent( $UA ) { - $this->setHeader('User-Agent', $UA); + $this->setHeader( 'User-Agent', $UA ); } /** * Set an arbitrary header */ - public function setHeader($name, $value) { + public function setHeader( $name, $value ) { // I feel like I should normalize the case here... $this->reqHeaders[$name] = $value; } @@ -258,30 +294,51 @@ class HttpRequest { public function getHeaderList() { $list = array(); - if( $this->cookieJar ) { + if ( $this->cookieJar ) { $this->reqHeaders['Cookie'] = - $this->cookieJar->serializeToHttpRequest($this->parsedUrl['path'], - $this->parsedUrl['host']); + $this->cookieJar->serializeToHttpRequest( + $this->parsedUrl['path'], + $this->parsedUrl['host'] + ); } - foreach($this->reqHeaders as $name => $value) { + + foreach ( $this->reqHeaders as $name => $value ) { $list[] = "$name: $value"; } + return $list; } /** - * Set the callback - * @param $callback callback + * Set a read callback to accept data read from the HTTP request. + * By default, data is appended to an internal buffer which can be + * retrieved through $req->getContent(). + * + * To handle data as it comes in -- especially for large files that + * would not fit in memory -- you can instead set your own callback, + * in the form function($resource, $buffer) where the first parameter + * is the low-level resource being read (implementation specific), + * and the second parameter is the data buffer. + * + * You MUST return the number of bytes handled in the buffer; if fewer + * bytes are reported handled than were passed to you, the HTTP fetch + * will be aborted. + * + * @param $callback Callback */ public function setCallback( $callback ) { + if ( !is_callable( $callback ) ) { + throw new MWException( 'Invalid MwHttpRequest callback' ); + } $this->callback = $callback; } /** * A generic callback to read the body of the response from a remote * server. + * * @param $fh handle - * @param $content string + * @param $content String */ public function read( $fh, $content ) { $this->content .= $content; @@ -290,12 +347,15 @@ class HttpRequest { /** * Take care of whatever is necessary to perform the URI request. + * * @return Status */ public function execute() { global $wgTitle; - if( strtoupper($this->method) == "HEAD" ) { + $this->content = ""; + + if ( strtoupper( $this->method ) == "HEAD" ) { $this->headersOnly = true; } @@ -303,7 +363,7 @@ class HttpRequest { $this->postData = wfArrayToCGI( $this->postData ); } - if ( is_object( $wgTitle ) && !isset($this->reqHeaders['Referer']) ) { + if ( is_object( $wgTitle ) && !isset( $this->reqHeaders['Referer'] ) ) { $this->setReferer( $wgTitle->getFullURL() ); } @@ -315,8 +375,8 @@ class HttpRequest { $this->setCallback( array( $this, 'read' ) ); } - if ( !isset($this->reqHeaders['User-Agent']) ) { - $this->setUserAgent(Http::userAgent()); + if ( !isset( $this->reqHeaders['User-Agent'] ) ) { + $this->setUserAgent( Http::userAgent() ); } } @@ -324,18 +384,20 @@ class HttpRequest { * Parses the headers, including the HTTP status code and any * Set-Cookie headers. This function expectes the headers to be * found in an array in the member variable headerList. - * @returns nothing + * + * @return nothing */ protected function parseHeader() { $lastname = ""; - foreach( $this->headerList as $header ) { - if( preg_match( "#^HTTP/([0-9.]+) (.*)#", $header, $match ) ) { + + foreach ( $this->headerList as $header ) { + if ( preg_match( "#^HTTP/([0-9.]+) (.*)#", $header, $match ) ) { $this->respVersion = $match[1]; $this->respStatus = $match[2]; - } elseif( preg_match( "#^[ \t]#", $header ) ) { - $last = count($this->respHeaders[$lastname]) - 1; + } elseif ( preg_match( "#^[ \t]#", $header ) ) { + $last = count( $this->respHeaders[$lastname] ) - 1; $this->respHeaders[$lastname][$last] .= "\r\n$header"; - } elseif( preg_match( "#^([^:]*):[\t ]*(.*)#", $header, $match ) ) { + } elseif ( preg_match( "#^([^:]*):[\t ]*(.*)#", $header, $match ) ) { $this->respHeaders[strtolower( $match[1] )][] = $match[2]; $lastname = strtolower( $match[1] ); } @@ -345,35 +407,58 @@ class HttpRequest { } /** - * Sets the member variable status to a fatal status if the HTTP - * status code was not 200. - * @returns nothing + * Sets HTTPRequest status member to a fatal value with the error + * message if the returned integer value of the status code was + * not successful (< 300) or a redirect (>=300 and < 400). (see + * RFC2616, section 10, + * http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html for a + * list of status codes.) + * + * @return nothing */ protected function setStatus() { - if( !$this->respHeaders ) { + if ( !$this->respHeaders ) { $this->parseHeader(); } - if((int)$this->respStatus !== 200) { - list( $code, $message ) = explode(" ", $this->respStatus, 2); - $this->status->fatal("http-bad-status", $code, $message ); + if ( (int)$this->respStatus > 399 ) { + list( $code, $message ) = explode( " ", $this->respStatus, 2 ); + $this->status->fatal( "http-bad-status", $code, $message ); } } + /** + * Get the integer value of the HTTP status code (e.g. 200 for "200 Ok") + * (see RFC2616, section 10, http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html + * for a list of status codes.) + * + * @return Integer + */ + public function getStatus() { + if ( !$this->respHeaders ) { + $this->parseHeader(); + } + + return (int)$this->respStatus; + } + /** * Returns true if the last status code was a redirect. - * @return bool + * + * @return Boolean */ public function isRedirect() { - if( !$this->respHeaders ) { + if ( !$this->respHeaders ) { $this->parseHeader(); } $status = (int)$this->respStatus; - if ( $status >= 300 && $status < 400 ) { + + if ( $status >= 300 && $status <= 303 ) { return true; } + return false; } @@ -382,33 +467,39 @@ class HttpRequest { * request has been executed. Because some headers * (e.g. Set-Cookie) can appear more than once the, each value of * the associative array is an array of the values given. - * @return array + * + * @return Array */ public function getResponseHeaders() { - if( !$this->respHeaders ) { + if ( !$this->respHeaders ) { $this->parseHeader(); } + return $this->respHeaders; } /** * Returns the value of the given response header. - * @param $header string - * @return string + * + * @param $header String + * @return String */ - public function getResponseHeader($header) { - if( !$this->respHeaders ) { + public function getResponseHeader( $header ) { + if ( !$this->respHeaders ) { $this->parseHeader(); } + if ( isset( $this->respHeaders[strtolower ( $header ) ] ) ) { $v = $this->respHeaders[strtolower ( $header ) ]; return $v[count( $v ) - 1]; } + return null; } /** - * Tells the HttpRequest object to use this pre-loaded CookieJar. + * Tells the MWHttpRequest object to use this pre-loaded CookieJar. + * * @param $jar CookieJar */ public function setCookieJar( $jar ) { @@ -417,12 +508,14 @@ class HttpRequest { /** * Returns the cookie jar in use. + * * @returns CookieJar */ public function getCookieJar() { - if( !$this->respHeaders ) { + if ( !$this->respHeaders ) { $this->parseHeader(); } + return $this->cookieJar; } @@ -432,23 +525,25 @@ class HttpRequest { * Set-Cookie headers. * @see Cookie::set */ - public function setCookie( $name, $value = null, $attr = null) { - if( !$this->cookieJar ) { + public function setCookie( $name, $value = null, $attr = null ) { + if ( !$this->cookieJar ) { $this->cookieJar = new CookieJar; } - $this->cookieJar->setCookie($name, $value, $attr); + + $this->cookieJar->setCookie( $name, $value, $attr ); } /** * Parse the cookies in the response headers and store them in the cookie jar. */ protected function parseCookies() { - if( !$this->cookieJar ) { + if ( !$this->cookieJar ) { $this->cookieJar = new CookieJar; } - if( isset( $this->respHeaders['set-cookie'] ) ) { + + if ( isset( $this->respHeaders['set-cookie'] ) ) { $url = parse_url( $this->getFinalUrl() ); - foreach( $this->respHeaders['set-cookie'] as $cookie ) { + foreach ( $this->respHeaders['set-cookie'] as $cookie ) { $this->cookieJar->parseCookieResponseHeader( $cookie, $url['host'] ); } } @@ -456,16 +551,26 @@ class HttpRequest { /** * Returns the final URL after all redirections. - * @returns string + * + * @return String */ public function getFinalUrl() { - $location = $this->getResponseHeader("Location"); + $location = $this->getResponseHeader( "Location" ); + if ( $location ) { return $location; } return $this->url; } + + /** + * Returns true if the backend can follow redirects. Overridden by the + * child classes. + */ + public function canFollowRedirects() { + return true; + } } @@ -490,30 +595,33 @@ class Cookie { * Sets a cookie. Used before a request to set up any individual * cookies. Used internally after a request to parse the * Set-Cookie headers. - * @param $name string the name of the cookie - * @param $value string the value of the cookie - * @param $attr array possible key/values: + * + * @param $value String: the value of the cookie + * @param $attr Array: possible key/values: * expires A date string * path The path this cookie is used on * domain Domain this cookie is used on */ public function set( $value, $attr ) { $this->value = $value; - if( isset( $attr['expires'] ) ) { + + if ( isset( $attr['expires'] ) ) { $this->isSessionKey = false; $this->expires = strtotime( $attr['expires'] ); } - if( isset( $attr['path'] ) ) { + + if ( isset( $attr['path'] ) ) { $this->path = $attr['path']; } else { $this->path = "/"; } - if( isset( $attr['domain'] ) ) { - if( self::validateCookieDomain( $attr['domain'] ) ) { + + if ( isset( $attr['domain'] ) ) { + if ( self::validateCookieDomain( $attr['domain'] ) ) { $this->domain = $attr['domain']; } } else { - throw new MWException("You must specify a domain."); + throw new MWException( "You must specify a domain." ); } } @@ -525,46 +633,52 @@ class Cookie { * A better method might be to use a blacklist like * http://publicsuffix.org/ * - * @param $domain string the domain to validate - * @param $originDomain string (optional) the domain the cookie originates from - * @return bool + * @param $domain String: the domain to validate + * @param $originDomain String: (optional) the domain the cookie originates from + * @return Boolean */ - public static function validateCookieDomain( $domain, $originDomain = null) { + public static function validateCookieDomain( $domain, $originDomain = null ) { // Don't allow a trailing dot - if( substr( $domain, -1 ) == "." ) return false; - - $dc = explode(".", $domain); + if ( substr( $domain, -1 ) == "." ) { + return false; + } - // Don't allow cookies for "localhost", "ls" or other dot-less hosts - if( count($dc) < 2 ) return false; + $dc = explode( ".", $domain ); // Only allow full, valid IP addresses - if( preg_match( '/^[0-9.]+$/', $domain ) ) { - if( count( $dc ) != 4 ) return false; + if ( preg_match( '/^[0-9.]+$/', $domain ) ) { + if ( count( $dc ) != 4 ) { + return false; + } - if( ip2long( $domain ) === false ) return false; + if ( ip2long( $domain ) === false ) { + return false; + } - if( $originDomain == null || $originDomain == $domain ) return true; + if ( $originDomain == null || $originDomain == $domain ) { + return true; + } } // Don't allow cookies for "co.uk" or "gov.uk", etc, but allow "supermarket.uk" - if( strrpos( $domain, "." ) - strlen( $domain ) == -3 ) { - if( (count($dc) == 2 && strlen( $dc[0] ) <= 2 ) - || (count($dc) == 3 && strlen( $dc[0] ) == "" && strlen( $dc[1] ) <= 2 ) ) { + if ( strrpos( $domain, "." ) - strlen( $domain ) == -3 ) { + if ( ( count( $dc ) == 2 && strlen( $dc[0] ) <= 2 ) + || ( count( $dc ) == 3 && strlen( $dc[0] ) == "" && strlen( $dc[1] ) <= 2 ) ) { return false; } - if( (count($dc) == 2 || (count($dc) == 3 && $dc[0] == "") ) - && preg_match( '/(com|net|org|gov|edu)\...$/', $domain) ) { + if ( ( count( $dc ) == 2 || ( count( $dc ) == 3 && $dc[0] == "" ) ) + && preg_match( '/(com|net|org|gov|edu)\...$/', $domain ) ) { return false; } } - if( $originDomain != null ) { - if( substr( $domain, 0, 1 ) != "." && $domain != $originDomain ) { + if ( $originDomain != null ) { + if ( substr( $domain, 0, 1 ) != "." && $domain != $originDomain ) { return false; } - if( substr( $domain, 0, 1 ) == "." + + if ( substr( $domain, 0, 1 ) == "." && substr_compare( $originDomain, $domain, -strlen( $domain ), strlen( $domain ), TRUE ) != 0 ) { return false; @@ -576,47 +690,50 @@ class Cookie { /** * Serialize the cookie jar into a format useful for HTTP Request headers. - * @param $path string the path that will be used. Required. - * @param $domain string the domain that will be used. Required. - * @return string + * + * @param $path String: the path that will be used. Required. + * @param $domain String: the domain that will be used. Required. + * @return String */ public function serializeToHttpRequest( $path, $domain ) { $ret = ""; - if( $this->canServeDomain( $domain ) + if ( $this->canServeDomain( $domain ) && $this->canServePath( $path ) && $this->isUnExpired() ) { - $ret = $this->name ."=". $this->value; + $ret = $this->name . "=" . $this->value; } return $ret; } protected function canServeDomain( $domain ) { - if( $domain == $this->domain - || ( strlen( $domain) > strlen( $this->domain ) - && substr( $this->domain, 0, 1) == "." + if ( $domain == $this->domain + || ( strlen( $domain ) > strlen( $this->domain ) + && substr( $this->domain, 0, 1 ) == "." && substr_compare( $domain, $this->domain, -strlen( $this->domain ), strlen( $this->domain ), TRUE ) == 0 ) ) { return true; } + return false; } protected function canServePath( $path ) { - if( $this->path && substr_compare( $this->path, $path, 0, strlen( $this->path ) ) == 0 ) { + if ( $this->path && substr_compare( $this->path, $path, 0, strlen( $this->path ) ) == 0 ) { return true; } + return false; } protected function isUnExpired() { - if( $this->isSessionKey || $this->expires > time() ) { + if ( $this->isSessionKey || $this->expires > time() ) { return true; } + return false; } - } class CookieJar { @@ -626,12 +743,13 @@ class CookieJar { * Set a cookie in the cookie jar. Make sure only one cookie per-name exists. * @see Cookie::set() */ - public function setCookie ($name, $value, $attr) { + public function setCookie ( $name, $value, $attr ) { /* cookies: case insensitive, so this should work. * We'll still send the cookies back in the same case we got them, though. */ - $index = strtoupper($name); - if( isset( $this->cookie[$index] ) ) { + $index = strtoupper( $name ); + + if ( isset( $this->cookie[$index] ) ) { $this->cookie[$index]->set( $value, $attr ); } else { $this->cookie[$index] = new Cookie( $name, $value, $attr ); @@ -644,38 +762,46 @@ class CookieJar { public function serializeToHttpRequest( $path, $domain ) { $cookies = array(); - foreach( $this->cookie as $c ) { + foreach ( $this->cookie as $c ) { $serialized = $c->serializeToHttpRequest( $path, $domain ); - if ( $serialized ) $cookies[] = $serialized; + + if ( $serialized ) { + $cookies[] = $serialized; + } } - return implode("; ", $cookies); + return implode( "; ", $cookies ); } /** * Parse the content of an Set-Cookie HTTP Response header. - * @param $cookie string + * + * @param $cookie String + * @param $domain String: cookie's domain */ public function parseCookieResponseHeader ( $cookie, $domain ) { $len = strlen( "Set-Cookie:" ); + if ( substr_compare( "Set-Cookie:", $cookie, 0, $len, TRUE ) === 0 ) { $cookie = substr( $cookie, $len ); } $bit = array_map( 'trim', explode( ";", $cookie ) ); - if ( count($bit) >= 1 ) { - list($name, $value) = explode( "=", array_shift( $bit ), 2 ); + + if ( count( $bit ) >= 1 ) { + list( $name, $value ) = explode( "=", array_shift( $bit ), 2 ); $attr = array(); - foreach( $bit as $piece ) { + + foreach ( $bit as $piece ) { $parts = explode( "=", $piece ); - if( count( $parts ) > 1 ) { + if ( count( $parts ) > 1 ) { $attr[strtolower( $parts[0] )] = $parts[1]; } else { $attr[strtolower( $parts[0] )] = true; } } - if( !isset( $attr['domain'] ) ) { + if ( !isset( $attr['domain'] ) ) { $attr['domain'] = $domain; } elseif ( !Cookie::validateCookieDomain( $attr['domain'], $domain ) ) { return null; @@ -686,11 +812,10 @@ class CookieJar { } } - /** - * HttpRequest implemented using internal curl compiled into PHP + * MWHttpRequest implemented using internal curl compiled into PHP */ -class CurlHttpRequest extends HttpRequest { +class CurlHttpRequest extends MWHttpRequest { static $curlMessageMap = array( 6 => 'http-host-unreachable', 28 => 'http-timed-out' @@ -706,26 +831,33 @@ class CurlHttpRequest extends HttpRequest { public function execute() { parent::execute(); + if ( !$this->status->isOK() ) { return $this->status; } + $this->curlOptions[CURLOPT_PROXY] = $this->proxy; $this->curlOptions[CURLOPT_TIMEOUT] = $this->timeout; $this->curlOptions[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_1_0; $this->curlOptions[CURLOPT_WRITEFUNCTION] = $this->callback; - $this->curlOptions[CURLOPT_HEADERFUNCTION] = array($this, "readHeader"); + $this->curlOptions[CURLOPT_HEADERFUNCTION] = array( $this, "readHeader" ); $this->curlOptions[CURLOPT_MAXREDIRS] = $this->maxRedirects; + $this->curlOptions[CURLOPT_ENCODING] = ""; # Enable compression /* not sure these two are actually necessary */ - if(isset($this->reqHeaders['Referer'])) { + if ( isset( $this->reqHeaders['Referer'] ) ) { $this->curlOptions[CURLOPT_REFERER] = $this->reqHeaders['Referer']; } $this->curlOptions[CURLOPT_USERAGENT] = $this->reqHeaders['User-Agent']; - if ( $this->sslVerifyHost ) { + if ( isset( $this->sslVerifyHost ) ) { $this->curlOptions[CURLOPT_SSL_VERIFYHOST] = $this->sslVerifyHost; } + if ( isset( $this->sslVerifyCert ) ) { + $this->curlOptions[CURLOPT_SSL_VERIFYPEER] = $this->sslVerifyCert; + } + if ( $this->caInfo ) { $this->curlOptions[CURLOPT_CAINFO] = $this->caInfo; } @@ -747,12 +879,18 @@ class CurlHttpRequest extends HttpRequest { $this->curlOptions[CURLOPT_HTTPHEADER] = $this->getHeaderList(); $curlHandle = curl_init( $this->url ); + if ( !curl_setopt_array( $curlHandle, $this->curlOptions ) ) { - throw new MWException("Error setting curl options."); + throw new MWException( "Error setting curl options." ); } - if ( ! @curl_setopt( $curlHandle, CURLOPT_FOLLOWLOCATION, $this->followRedirects ) ) { - wfDebug("Couldn't set CURLOPT_FOLLOWLOCATION. Probably safe_mode or open_basedir is set."); - /* Continue the processing. If it were in curl_setopt_array, processing would have halted on its entry */ + + if ( $this->followRedirects && $this->canFollowRedirects() ) { + if ( ! @curl_setopt( $curlHandle, CURLOPT_FOLLOWLOCATION, true ) ) { + wfDebug( __METHOD__ . ": Couldn't set CURLOPT_FOLLOWLOCATION. " . + "Probably safe_mode or open_basedir is set.\n" ); + // Continue the processing. If it were in curl_setopt_array, + // processing would have halted on its entry + } } if ( false === curl_exec( $curlHandle ) ) { @@ -764,20 +902,33 @@ class CurlHttpRequest extends HttpRequest { $this->status->fatal( 'http-curl-error', curl_error( $curlHandle ) ); } } else { - $this->headerList = explode("\r\n", $this->headerText); + $this->headerList = explode( "\r\n", $this->headerText ); } curl_close( $curlHandle ); $this->parseHeader(); $this->setStatus(); + return $this->status; } -} -class PhpHttpRequest extends HttpRequest { - protected $manuallyRedirect = false; + public function canFollowRedirects() { + if ( strval( ini_get( 'open_basedir' ) ) !== '' || wfIniGetBool( 'safe_mode' ) ) { + wfDebug( "Cannot follow redirects in safe mode\n" ); + return false; + } + + if ( !defined( 'CURLOPT_REDIR_PROTOCOLS' ) ) { + wfDebug( "Cannot follow redirects with libcurl < 7.19.4 due to CVE-2009-0037\n" ); + return false; + } + + return true; + } +} +class PhpHttpRequest extends MWHttpRequest { protected function urlToTcp( $url ) { $parsedUrl = parse_url( $url ); @@ -789,11 +940,10 @@ class PhpHttpRequest extends HttpRequest { // At least on Centos 4.8 with PHP 5.1.6, using max_redirects to follow redirects // causes a segfault - if ( version_compare( '5.1.7', phpversion(), '>' ) ) { - $this->manuallyRedirect = true; - } + $manuallyRedirect = version_compare( phpversion(), '5.1.7', '<' ); - if ( $this->parsedUrl['scheme'] != 'http' ) { + if ( $this->parsedUrl['scheme'] != 'http' && + $this->parsedUrl['scheme'] != 'https' ) { $this->status->fatal( 'http-invalid-scheme', $this->parsedUrl['scheme'] ); } @@ -810,14 +960,14 @@ class PhpHttpRequest extends HttpRequest { $options['request_fulluri'] = true; } - if ( !$this->followRedirects || $this->manuallyRedirect ) { + if ( !$this->followRedirects || $manuallyRedirect ) { $options['max_redirects'] = 0; } else { $options['max_redirects'] = $this->maxRedirects; } $options['method'] = $this->method; - $options['header'] = implode("\r\n", $this->getHeaderList()); + $options['header'] = implode( "\r\n", $this->getHeaderList() ); // Note that at some future point we may want to support // HTTP/1.1, but we'd have to write support for chunking // in version of PHP < 5.3.1 @@ -833,7 +983,7 @@ class PhpHttpRequest extends HttpRequest { $oldTimeout = false; if ( version_compare( '5.2.1', phpversion(), '>' ) ) { - $oldTimeout = ini_set('default_socket_timeout', $this->timeout); + $oldTimeout = ini_set( 'default_socket_timeout', $this->timeout ); } else { $options['timeout'] = $this->timeout; } @@ -843,25 +993,42 @@ class PhpHttpRequest extends HttpRequest { $this->headerList = array(); $reqCount = 0; $url = $this->url; + do { - $again = false; $reqCount++; wfSuppressWarnings(); $fh = fopen( $url, "r", false, $context ); wfRestoreWarnings(); - if ( $fh ) { - $result = stream_get_meta_data( $fh ); - $this->headerList = $result['wrapper_data']; - $this->parseHeader(); - $url = $this->getResponseHeader("Location"); - $again = $this->manuallyRedirect && $this->followRedirects && $url - && $this->isRedirect() && $this->maxRedirects > $reqCount; + + if ( !$fh ) { + break; + } + + $result = stream_get_meta_data( $fh ); + $this->headerList = $result['wrapper_data']; + $this->parseHeader(); + + if ( !$manuallyRedirect || !$this->followRedirects ) { + break; } - } while ( $again ); + + # Handle manual redirection + if ( !$this->isRedirect() || $reqCount > $this->maxRedirects ) { + break; + } + # Check security of URL + $url = $this->getResponseHeader( "Location" ); + + if ( substr( $url, 0, 7 ) !== 'http://' ) { + wfDebug( __METHOD__ . ": insecure redirection\n" ); + break; + } + } while ( true ); if ( $oldTimeout !== false ) { - ini_set('default_socket_timeout', $oldTimeout); + ini_set( 'default_socket_timeout', $oldTimeout ); } + $this->setStatus(); if ( $fh === false ) { @@ -874,13 +1041,15 @@ class PhpHttpRequest extends HttpRequest { return $this->status; } - if($this->status->isOK()) { + if ( $this->status->isOK() ) { while ( !feof( $fh ) ) { $buf = fread( $fh, 8192 ); + if ( $buf === false ) { $this->status->fatal( 'http-read-error' ); break; } + if ( strlen( $buf ) ) { call_user_func( $this->callback, $fh, $buf ); } diff --git a/includes/IEContentAnalyzer.php b/includes/IEContentAnalyzer.php deleted file mode 100644 index df4d36f0..00000000 --- a/includes/IEContentAnalyzer.php +++ /dev/null @@ -1,824 +0,0 @@ - array( - 'text/plain', - 'application/octet-stream', - 'application/x-netcdf', // [sic] - ), - 'text' /*3*/ => array( - 'text/richtext', 'image/x-bitmap', 'application/postscript', 'application/base64', - 'application/macbinhex40', 'application/x-cdf', 'text/scriptlet' - ), - 'binary' /*4*/ => array( - 'application/pdf', 'audio/x-aiff', 'audio/basic', 'audio/wav', 'image/gif', - 'image/pjpeg', 'image/jpeg', 'image/tiff', 'image/x-png', 'image/png', 'image/bmp', - 'image/x-jg', 'image/x-art', 'image/x-emf', 'image/x-wmf', 'video/avi', - 'video/x-msvideo', 'video/mpeg', 'application/x-compressed', - 'application/x-zip-compressed', 'application/x-gzip-compressed', 'application/java', - 'application/x-msdownload' - ), - 'html' /*5*/ => array( 'text/html' ), - ); - - /** - * Changes to the type table in later versions of IE - */ - protected $addedTypes = array( - 'ie07' => array( - 'text' => array( 'text/xml', 'application/xml' ) - ), - ); - - /** - * An approximation of the "Content Type" values in HKEY_CLASSES_ROOT in a - * typical Windows installation. - * - * Used for extension to MIME type mapping if detection fails. - */ - protected $registry = array( - '.323' => 'text/h323', - '.3g2' => 'video/3gpp2', - '.3gp' => 'video/3gpp', - '.3gp2' => 'video/3gpp2', - '.3gpp' => 'video/3gpp', - '.aac' => 'audio/aac', - '.ac3' => 'audio/ac3', - '.accda' => 'application/msaccess', - '.accdb' => 'application/msaccess', - '.accdc' => 'application/msaccess', - '.accde' => 'application/msaccess', - '.accdr' => 'application/msaccess', - '.accdt' => 'application/msaccess', - '.ade' => 'application/msaccess', - '.adp' => 'application/msaccess', - '.adts' => 'audio/aac', - '.ai' => 'application/postscript', - '.aif' => 'audio/aiff', - '.aifc' => 'audio/aiff', - '.aiff' => 'audio/aiff', - '.amc' => 'application/x-mpeg', - '.application' => 'application/x-ms-application', - '.asf' => 'video/x-ms-asf', - '.asx' => 'video/x-ms-asf', - '.au' => 'audio/basic', - '.avi' => 'video/avi', - '.bmp' => 'image/bmp', - '.caf' => 'audio/x-caf', - '.cat' => 'application/vnd.ms-pki.seccat', - '.cbo' => 'application/sha', - '.cdda' => 'audio/aiff', - '.cer' => 'application/x-x509-ca-cert', - '.conf' => 'text/plain', - '.crl' => 'application/pkix-crl', - '.crt' => 'application/x-x509-ca-cert', - '.css' => 'text/css', - '.csv' => 'application/vnd.ms-excel', - '.der' => 'application/x-x509-ca-cert', - '.dib' => 'image/bmp', - '.dif' => 'video/x-dv', - '.dll' => 'application/x-msdownload', - '.doc' => 'application/msword', - '.docm' => 'application/vnd.ms-word.document.macroEnabled.12', - '.docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - '.dot' => 'application/msword', - '.dotm' => 'application/vnd.ms-word.template.macroEnabled.12', - '.dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', - '.dv' => 'video/x-dv', - '.dwfx' => 'model/vnd.dwfx+xps', - '.edn' => 'application/vnd.adobe.edn', - '.eml' => 'message/rfc822', - '.eps' => 'application/postscript', - '.etd' => 'application/x-ebx', - '.exe' => 'application/x-msdownload', - '.fdf' => 'application/vnd.fdf', - '.fif' => 'application/fractals', - '.gif' => 'image/gif', - '.gsm' => 'audio/x-gsm', - '.hqx' => 'application/mac-binhex40', - '.hta' => 'application/hta', - '.htc' => 'text/x-component', - '.htm' => 'text/html', - '.html' => 'text/html', - '.htt' => 'text/webviewhtml', - '.hxa' => 'application/xml', - '.hxc' => 'application/xml', - '.hxd' => 'application/octet-stream', - '.hxe' => 'application/xml', - '.hxf' => 'application/xml', - '.hxh' => 'application/octet-stream', - '.hxi' => 'application/octet-stream', - '.hxk' => 'application/xml', - '.hxq' => 'application/octet-stream', - '.hxr' => 'application/octet-stream', - '.hxs' => 'application/octet-stream', - '.hxt' => 'application/xml', - '.hxv' => 'application/xml', - '.hxw' => 'application/octet-stream', - '.ico' => 'image/x-icon', - '.iii' => 'application/x-iphone', - '.ins' => 'application/x-internet-signup', - '.iqy' => 'text/x-ms-iqy', - '.isp' => 'application/x-internet-signup', - '.jfif' => 'image/jpeg', - '.jnlp' => 'application/x-java-jnlp-file', - '.jpe' => 'image/jpeg', - '.jpeg' => 'image/jpeg', - '.jpg' => 'image/jpeg', - '.jtx' => 'application/x-jtx+xps', - '.latex' => 'application/x-latex', - '.log' => 'text/plain', - '.m1v' => 'video/mpeg', - '.m2v' => 'video/mpeg', - '.m3u' => 'audio/x-mpegurl', - '.mac' => 'image/x-macpaint', - '.man' => 'application/x-troff-man', - '.mda' => 'application/msaccess', - '.mdb' => 'application/msaccess', - '.mde' => 'application/msaccess', - '.mfp' => 'application/x-shockwave-flash', - '.mht' => 'message/rfc822', - '.mhtml' => 'message/rfc822', - '.mid' => 'audio/mid', - '.midi' => 'audio/mid', - '.mod' => 'video/mpeg', - '.mov' => 'video/quicktime', - '.mp2' => 'video/mpeg', - '.mp2v' => 'video/mpeg', - '.mp3' => 'audio/mpeg', - '.mp4' => 'video/mp4', - '.mpa' => 'video/mpeg', - '.mpe' => 'video/mpeg', - '.mpeg' => 'video/mpeg', - '.mpf' => 'application/vnd.ms-mediapackage', - '.mpg' => 'video/mpeg', - '.mpv2' => 'video/mpeg', - '.mqv' => 'video/quicktime', - '.NMW' => 'application/nmwb', - '.nws' => 'message/rfc822', - '.odc' => 'text/x-ms-odc', - '.ols' => 'application/vnd.ms-publisher', - '.p10' => 'application/pkcs10', - '.p12' => 'application/x-pkcs12', - '.p7b' => 'application/x-pkcs7-certificates', - '.p7c' => 'application/pkcs7-mime', - '.p7m' => 'application/pkcs7-mime', - '.p7r' => 'application/x-pkcs7-certreqresp', - '.p7s' => 'application/pkcs7-signature', - '.pct' => 'image/pict', - '.pdf' => 'application/pdf', - '.pdx' => 'application/vnd.adobe.pdx', - '.pfx' => 'application/x-pkcs12', - '.pic' => 'image/pict', - '.pict' => 'image/pict', - '.pinstall' => 'application/x-picasa-detect', - '.pko' => 'application/vnd.ms-pki.pko', - '.png' => 'image/png', - '.pnt' => 'image/x-macpaint', - '.pntg' => 'image/x-macpaint', - '.pot' => 'application/vnd.ms-powerpoint', - '.potm' => 'application/vnd.ms-powerpoint.template.macroEnabled.12', - '.potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', - '.ppa' => 'application/vnd.ms-powerpoint', - '.ppam' => 'application/vnd.ms-powerpoint.addin.macroEnabled.12', - '.pps' => 'application/vnd.ms-powerpoint', - '.ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12', - '.ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', - '.ppt' => 'application/vnd.ms-powerpoint', - '.pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12', - '.pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - '.prf' => 'application/pics-rules', - '.ps' => 'application/postscript', - '.pub' => 'application/vnd.ms-publisher', - '.pwz' => 'application/vnd.ms-powerpoint', - '.py' => 'text/plain', - '.pyw' => 'text/plain', - '.qht' => 'text/x-html-insertion', - '.qhtm' => 'text/x-html-insertion', - '.qt' => 'video/quicktime', - '.qti' => 'image/x-quicktime', - '.qtif' => 'image/x-quicktime', - '.qtl' => 'application/x-quicktimeplayer', - '.rat' => 'application/rat-file', - '.rmf' => 'application/vnd.adobe.rmf', - '.rmi' => 'audio/mid', - '.rqy' => 'text/x-ms-rqy', - '.rtf' => 'application/msword', - '.sct' => 'text/scriptlet', - '.sd2' => 'audio/x-sd2', - '.sdp' => 'application/sdp', - '.shtml' => 'text/html', - '.sit' => 'application/x-stuffit', - '.sldm' => 'application/vnd.ms-powerpoint.slide.macroEnabled.12', - '.sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide', - '.slk' => 'application/vnd.ms-excel', - '.snd' => 'audio/basic', - '.so' => 'application/x-apachemodule', - '.sol' => 'text/plain', - '.sor' => 'text/plain', - '.spc' => 'application/x-pkcs7-certificates', - '.spl' => 'application/futuresplash', - '.sst' => 'application/vnd.ms-pki.certstore', - '.stl' => 'application/vnd.ms-pki.stl', - '.swf' => 'application/x-shockwave-flash', - '.thmx' => 'application/vnd.ms-officetheme', - '.tif' => 'image/tiff', - '.tiff' => 'image/tiff', - '.txt' => 'text/plain', - '.uls' => 'text/iuls', - '.vcf' => 'text/x-vcard', - '.vdx' => 'application/vnd.ms-visio.viewer', - '.vsd' => 'application/vnd.ms-visio.viewer', - '.vss' => 'application/vnd.ms-visio.viewer', - '.vst' => 'application/vnd.ms-visio.viewer', - '.vsx' => 'application/vnd.ms-visio.viewer', - '.vtx' => 'application/vnd.ms-visio.viewer', - '.wav' => 'audio/wav', - '.wax' => 'audio/x-ms-wax', - '.wbk' => 'application/msword', - '.wdp' => 'image/vnd.ms-photo', - '.wiz' => 'application/msword', - '.wm' => 'video/x-ms-wm', - '.wma' => 'audio/x-ms-wma', - '.wmd' => 'application/x-ms-wmd', - '.wmv' => 'video/x-ms-wmv', - '.wmx' => 'video/x-ms-wmx', - '.wmz' => 'application/x-ms-wmz', - '.wpl' => 'application/vnd.ms-wpl', - '.wsc' => 'text/scriptlet', - '.wvx' => 'video/x-ms-wvx', - '.xaml' => 'application/xaml+xml', - '.xbap' => 'application/x-ms-xbap', - '.xdp' => 'application/vnd.adobe.xdp+xml', - '.xfdf' => 'application/vnd.adobe.xfdf', - '.xht' => 'application/xhtml+xml', - '.xhtml' => 'application/xhtml+xml', - '.xla' => 'application/vnd.ms-excel', - '.xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12', - '.xlk' => 'application/vnd.ms-excel', - '.xll' => 'application/vnd.ms-excel', - '.xlm' => 'application/vnd.ms-excel', - '.xls' => 'application/vnd.ms-excel', - '.xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12', - '.xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12', - '.xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - '.xlt' => 'application/vnd.ms-excel', - '.xltm' => 'application/vnd.ms-excel.template.macroEnabled.12', - '.xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', - '.xlw' => 'application/vnd.ms-excel', - '.xml' => 'text/xml', - '.xps' => 'application/vnd.ms-xpsdocument', - '.xsl' => 'text/xml', - ); - - /** - * IE versions which have been analysed to bring you this class, and for - * which some substantive difference exists. These will appear as keys - * in the return value of getRealMimesFromData(). The names are chosen to sort correctly. - */ - protected $versions = array( 'ie05', 'ie06', 'ie07', 'ie07.strict', 'ie07.nohtml' ); - - /** - * Type table with versions expanded - */ - protected $typeTable = array(); - - /** constructor */ - function __construct() { - // Construct versioned type arrays from the base type array plus additions - $types = $this->baseTypeTable; - foreach ( $this->versions as $version ) { - if ( isset( $this->addedTypes[$version] ) ) { - foreach ( $this->addedTypes[$version] as $format => $addedTypes ) { - $types[$format] = array_merge( $types[$format], $addedTypes ); - } - } - $this->typeTable[$version] = $types; - } - } - - /** - * Get the MIME types from getMimesFromData(), but convert the result from IE's - * idiosyncratic private types into something other apps will understand. - * - * @param string $fileName The file name (unused at present) - * @param string $chunk The first 256 bytes of the file - * @param string $proposed The MIME type proposed by the server - * - * @return array Map of IE version to detected mime type - */ - public function getRealMimesFromData( $fileName, $chunk, $proposed ) { - $types = $this->getMimesFromData( $fileName, $chunk, $proposed ); - $types = array_map( array( $this, 'translateMimeType' ), $types ); - return $types; - } - - /** - * Translate a MIME type from IE's idiosyncratic private types into - * more commonly understood type strings - */ - public function translateMimeType( $type ) { - static $table = array( - 'image/pjpeg' => 'image/jpeg', - 'image/x-png' => 'image/png', - 'image/x-wmf' => 'application/x-msmetafile', - 'image/bmp' => 'image/x-bmp', - 'application/x-zip-compressed' => 'application/zip', - 'application/x-compressed' => 'application/x-compress', - 'application/x-gzip-compressed' => 'application/x-gzip', - 'audio/mid' => 'audio/midi', - ); - if ( isset( $table[$type] ) ) { - $type = $table[$type]; - } - return $type; - } - - /** - * Get the untranslated MIME types for all known versions - * - * @param string $fileName The file name (unused at present) - * @param string $chunk The first 256 bytes of the file - * @param string $proposed The MIME type proposed by the server - * - * @return array Map of IE version to detected mime type - */ - public function getMimesFromData( $fileName, $chunk, $proposed ) { - $types = array(); - foreach ( $this->versions as $version ) { - $types[$version] = $this->getMimeTypeForVersion( $version, $fileName, $chunk, $proposed ); - } - return $types; - } - - /** - * Get the MIME type for a given named version - */ - protected function getMimeTypeForVersion( $version, $fileName, $chunk, $proposed ) { - // Strip text after a semicolon - $semiPos = strpos( $proposed, ';' ); - if ( $semiPos !== false ) { - $proposed = substr( $proposed, 0, $semiPos ); - } - - $proposedFormat = $this->getDataFormat( $version, $proposed ); - if ( $proposedFormat == 'unknown' - && $proposed != 'multipart/mixed' - && $proposed != 'multipart/x-mixed-replace' ) - { - return $proposed; - } - if ( strval( $chunk ) === '' ) { - return $proposed; - } - - // Truncate chunk at 255 bytes - $chunk = substr( $chunk, 0, 255 ); - - // IE does the Check*Headers() calls last, and instead does the following image - // type checks by directly looking for the magic numbers. What I do here should - // have the same effect since the magic number checks are identical in both cases. - $result = $this->sampleData( $version, $chunk ); - $sampleFound = $result['found']; - $counters = $result['counters']; - $binaryType = $this->checkBinaryHeaders( $version, $chunk ); - $textType = $this->checkTextHeaders( $version, $chunk ); - - if ( $proposed == 'text/html' && isset( $sampleFound['html'] ) ) { - return 'text/html'; - } - if ( $proposed == 'image/gif' && $binaryType == 'image/gif' ) { - return 'image/gif'; - } - if ( ( $proposed == 'image/pjpeg' || $proposed == 'image/jpeg' ) - && $binaryType == 'image/pjpeg' ) - { - return $proposed; - } - // PNG check added in IE 7 - if ( $version >= 'ie07' - && ( $proposed == 'image/x-png' || $proposed == 'image/png' ) - && $binaryType == 'image/x-png' ) - { - return $proposed; - } - - // CDF was removed in IE 7 so it won't be in $sampleFound for later versions - if ( isset( $sampleFound['cdf'] ) ) { - return 'application/x-cdf'; - } - - // RSS and Atom were added in IE 7 so they won't be in $sampleFound for - // previous versions - if ( isset( $sampleFound['rss'] ) ) { - return 'application/rss+xml'; - } - if ( isset( $sampleFound['rdf-tag'] ) - && isset( $sampleFound['rdf-url'] ) - && isset( $sampleFound['rdf-purl'] ) ) - { - return 'application/rss+xml'; - } - if ( isset( $sampleFound['atom'] ) ) { - return 'application/atom+xml'; - } - - if ( isset( $sampleFound['xml'] ) ) { - // TODO: I'm not sure under what circumstances this flag is enabled - if ( strpos( $version, 'strict' ) !== false ) { - if ( $proposed == 'text/html' || $proposed == 'text/xml' ) { - return 'text/xml'; - } - } else { - return 'text/xml'; - } - } - if ( isset( $sampleFound['html'] ) ) { - // TODO: I'm not sure under what circumstances this flag is enabled - if ( strpos( $version, 'nohtml' ) !== false ) { - if ( $proposed == 'text/plain' ) { - return 'text/html'; - } - } else { - return 'text/html'; - } - } - if ( isset( $sampleFound['xbm'] ) ) { - return 'image/x-bitmap'; - } - if ( isset( $sampleFound['binhex'] ) ) { - return 'application/macbinhex40'; - } - if ( isset( $sampleFound['scriptlet'] ) ) { - if ( strpos( $version, 'strict' ) !== false ) { - if ( $proposed == 'text/plain' || $proposed == 'text/scriptlet' ) { - return 'text/scriptlet'; - } - } else { - return 'text/scriptlet'; - } - } - - // Freaky heuristics to determine if the data is text or binary - // The heuristic is of course broken for non-ASCII text - if ( $counters['ctrl'] != 0 && ( $counters['ff'] + $counters['low'] ) - < ( $counters['ctrl'] + $counters['high'] ) * 16 ) - { - $kindOfBinary = true; - $type = $binaryType ? $binaryType : $textType; - if ( $type === false ) { - $type = 'application/octet-stream'; - } - } else { - $kindOfBinary = false; - $type = $textType ? $textType : $binaryType; - if ( $type === false ) { - $type = 'text/plain'; - } - } - - // Check if the output format is ambiguous - // This generally means that detection failed, real types aren't ambiguous - $detectedFormat = $this->getDataFormat( $version, $type ); - if ( $detectedFormat != 'ambiguous' ) { - return $type; - } - - if ( $proposedFormat != 'ambiguous' ) { - // FormatAgreesWithData() - if ( $proposedFormat == 'text' && !$kindOfBinary ) { - return $proposed; - } - if ( $proposedFormat == 'binary' && $kindOfBinary ) { - return $proposed; - } - if ( $proposedFormat == 'html' ) { - return $proposed; - } - } - - // Find a MIME type by searching the registry for the file extension. - $dotPos = strrpos( $fileName, '.' ); - if ( $dotPos === false ) { - return $type; - } - $ext = substr( $fileName, $dotPos ); - if ( isset( $this->registry[$ext] ) ) { - return $this->registry[$ext]; - } - - // TODO: If the extension has an application registered to it, IE will return - // application/octet-stream. We'll skip that, so we could erroneously - // return text/plain or application/x-netcdf where application/octet-stream - // would be correct. - - return $type; - } - - /** - * Check for text headers at the start of the chunk - * Confirmed same in 5 and 7. - */ - private function checkTextHeaders( $version, $chunk ) { - $chunk2 = substr( $chunk, 0, 2 ); - $chunk4 = substr( $chunk, 0, 4 ); - $chunk5 = substr( $chunk, 0, 5 ); - if ( $chunk4 == '%PDF' ) { - return 'application/pdf'; - } - if ( $chunk2 == '%!' ) { - return 'application/postscript'; - } - if ( $chunk5 == '{\\rtf' ) { - return 'text/richtext'; - } - if ( $chunk5 == 'begin' ) { - return 'application/base64'; - } - return false; - } - - /** - * Check for binary headers at the start of the chunk - * Confirmed same in 5 and 7. - */ - private function checkBinaryHeaders( $version, $chunk ) { - $chunk2 = substr( $chunk, 0, 2 ); - $chunk3 = substr( $chunk, 0, 3 ); - $chunk4 = substr( $chunk, 0, 4 ); - $chunk5 = substr( $chunk, 0, 5 ); - $chunk5uc = strtoupper( $chunk5 ); - $chunk8 = substr( $chunk, 0, 8 ); - if ( $chunk5uc == 'GIF87' || $chunk5uc == 'GIF89' ) { - return 'image/gif'; - } - if ( $chunk2 == "\xff\xd8" ) { - return 'image/pjpeg'; // actually plain JPEG but this is what IE returns - } - - if ( $chunk2 == 'BM' - && substr( $chunk, 6, 2 ) == "\000\000" - && substr( $chunk, 8, 2 ) == "\000\000" ) - { - return 'image/bmp'; // another non-standard MIME - } - if ( $chunk4 == 'RIFF' - && substr( $chunk, 8, 4 ) == 'WAVE' ) - { - return 'audio/wav'; - } - // These were integer literals in IE - // Perhaps the author was not sure what the target endianness was - if ( $chunk4 == ".sd\000" - || $chunk4 == ".snd" - || $chunk4 == "\000ds." - || $chunk4 == "dns." ) - { - return 'audio/basic'; - } - if ( $chunk3 == "MM\000" ) { - return 'image/tiff'; - } - if ( $chunk2 == 'MZ' ) { - return 'application/x-msdownload'; - } - if ( $chunk8 == "\x89PNG\x0d\x0a\x1a\x0a" ) { - return 'image/x-png'; // [sic] - } - if ( strlen( $chunk ) >= 5 ) { - $byte2 = ord( $chunk[2] ); - $byte4 = ord( $chunk[4] ); - if ( $byte2 >= 3 && $byte2 <= 31 && $byte4 == 0 && $chunk2 == 'JG' ) { - return 'image/x-jg'; - } - } - // More endian confusion? - if ( $chunk4 == 'MROF' ) { - return 'audio/x-aiff'; - } - $chunk4_8 = substr( $chunk, 8, 4 ); - if ( $chunk4 == 'FORM' && ( $chunk4_8 == 'AIFF' || $chunk4_8 == 'AIFC' ) ) { - return 'audio/x-aiff'; - } - if ( $chunk4 == 'RIFF' && $chunk4_8 == 'AVI ' ) { - return 'video/avi'; - } - if ( $chunk4 == "\x00\x00\x01\xb3" || $chunk4 == "\x00\x00\x01\xba" ) { - return 'video/mpeg'; - } - if ( $chunk4 == "\001\000\000\000" - && substr( $chunk, 40, 4 ) == ' EMF' ) - { - return 'image/x-emf'; - } - if ( $chunk4 == "\xd7\xcd\xc6\x9a" ) { - return 'image/x-wmf'; - } - if ( $chunk4 == "\xca\xfe\xba\xbe" ) { - return 'application/java'; - } - if ( $chunk2 == 'PK' ) { - return 'application/x-zip-compressed'; - } - if ( $chunk2 == "\x1f\x9d" ) { - return 'application/x-compressed'; - } - if ( $chunk2 == "\x1f\x8b" ) { - return 'application/x-gzip-compressed'; - } - // Skip redundant check for ZIP - if ( $chunk5 == "MThd\000" ) { - return 'audio/mid'; - } - if ( $chunk4 == '%PDF' ) { - return 'application/pdf'; - } - return false; - } - - /** - * Do heuristic checks on the bulk of the data sample. - * Search for HTML tags. - */ - protected function sampleData( $version, $chunk ) { - $found = array(); - $counters = array( - 'ctrl' => 0, - 'high' => 0, - 'low' => 0, - 'lf' => 0, - 'cr' => 0, - 'ff' => 0 - ); - $htmlTags = array( - 'html', - 'head', - 'title', - 'body', - 'script', - 'a href', - 'pre', - 'img', - 'plaintext', - 'table' - ); - $rdfUrl = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'; - $rdfPurl = 'http://purl.org/rss/1.0/'; - $xbmMagic1 = '#define'; - $xbmMagic2 = '_width'; - $xbmMagic3 = '_bits'; - $binhexMagic = 'converted with BinHex'; - - for ( $offset = 0; $offset < strlen( $chunk ); $offset++ ) { - $curChar = $chunk[$offset]; - if ( $curChar == "\x0a" ) { - $counters['lf']++; - continue; - } elseif ( $curChar == "\x0d" ) { - $counters['cr']++; - continue; - } elseif ( $curChar == "\x0c" ) { - $counters['ff']++; - continue; - } elseif ( $curChar == "\t" ) { - $counters['low']++; - continue; - } elseif ( ord( $curChar ) < 32 ) { - $counters['ctrl']++; - continue; - } elseif ( ord( $curChar ) >= 128 ) { - $counters['high']++; - continue; - } - - $counters['low']++; - if ( $curChar == '<' ) { - // XML - $remainder = substr( $chunk, $offset + 1 ); - if ( !strncasecmp( $remainder, '?XML', 4 ) ) { - $nextChar = substr( $chunk, $offset + 5, 1 ); - if ( $nextChar == ':' || $nextChar == ' ' || $nextChar == "\t" ) { - $found['xml'] = true; - } - } - // Scriptlet (JSP) - if ( !strncasecmp( $remainder, 'SCRIPTLET', 9 ) ) { - $found['scriptlet'] = true; - break; - } - // HTML - foreach ( $htmlTags as $tag ) { - if ( !strncasecmp( $remainder, $tag, strlen( $tag ) ) ) { - $found['html'] = true; - } - } - // Skip broken check for additional tags (HR etc.) - - // CHANNEL replaced by RSS, RDF and FEED in IE 7 - if ( $version < 'ie07' ) { - if ( !strncasecmp( $remainder, 'CHANNEL', 7 ) ) { - $found['cdf'] = true; - } - } else { - // RSS - if ( !strncasecmp( $remainder, 'RSS', 3 ) ) { - $found['rss'] = true; - break; // return from SampleData - } - if ( !strncasecmp( $remainder, 'rdf:RDF', 7 ) ) { - $found['rdf-tag'] = true; - // no break - } - if ( !strncasecmp( $remainder, 'FEED', 4 ) ) { - $found['atom'] = true; - break; - } - } - continue; - } - // Skip broken check for --> - - // RSS URL checks - // For some reason both URLs must appear before it is recognised - $remainder = substr( $chunk, $offset ); - if ( !strncasecmp( $remainder, $rdfUrl, strlen( $rdfUrl ) ) ) { - $found['rdf-url'] = true; - if ( isset( $found['rdf-tag'] ) - && isset( $found['rdf-purl'] ) ) // [sic] - { - break; - } - continue; - } - - if ( !strncasecmp( $remainder, $rdfPurl, strlen( $rdfPurl ) ) ) { - if ( isset( $found['rdf-tag'] ) - && isset( $found['rdf-url'] ) ) // [sic] - { - break; - } - continue; - } - - // XBM checks - if ( !strncasecmp( $remainder, $xbmMagic1, strlen( $xbmMagic1 ) ) ) { - $found['xbm1'] = true; - continue; - } - if ( $curChar == '_' ) { - if ( isset( $found['xbm2'] ) ) { - if ( !strncasecmp( $remainder, $xbmMagic3, strlen( $xbmMagic3 ) ) ) { - $found['xbm'] = true; - break; - } - } elseif ( isset( $found['xbm1'] ) ) { - if ( !strncasecmp( $remainder, $xbmMagic2, strlen( $xbmMagic2 ) ) ) { - $found['xbm2'] = true; - } - } - } - - // BinHex - if ( !strncmp( $remainder, $binhexMagic, strlen( $binhexMagic ) ) ) { - $found['binhex'] = true; - } - } - return array( 'found' => $found, 'counters' => $counters ); - } - - protected function getDataFormat( $version, $type ) { - $types = $this->typeTable[$version]; - if ( $type == '(null)' || strval( $type ) === '' ) { - return 'ambiguous'; - } - foreach ( $types as $format => $list ) { - if ( in_array( $type, $list ) ) { - return $format; - } - } - return 'unknown'; - } -} - diff --git a/includes/IP.php b/includes/IP.php index bbe70339..5f492c66 100644 --- a/includes/IP.php +++ b/includes/IP.php @@ -1,39 +1,69 @@ - * @License GPL v2 or later +/** + * Functions and constants to play with IP addresses and ranges + * + * 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 + * @author Ashar Voultoiz , Aaron Schulz */ // Some regex definition to "play" with IP address and IP address blocks -// An IP is made of 4 bytes from x00 to xFF which is d0 to d255 -define( 'RE_IP_BYTE', '(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|0?[0-9]?[0-9])'); -define( 'RE_IP_ADD' , RE_IP_BYTE . '\.' . RE_IP_BYTE . '\.' . RE_IP_BYTE . '\.' . RE_IP_BYTE ); +// An IPv4 address is made of 4 bytes from x00 to xFF which is d0 to d255 +define( 'RE_IP_BYTE', '(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|0?[0-9]?[0-9])' ); +define( 'RE_IP_ADD', RE_IP_BYTE . '\.' . RE_IP_BYTE . '\.' . RE_IP_BYTE . '\.' . RE_IP_BYTE ); // An IPv4 block is an IP address and a prefix (d1 to d32) -define( 'RE_IP_PREFIX', '(3[0-2]|[12]?\d)'); -define( 'RE_IP_BLOCK', RE_IP_ADD . '\/' . RE_IP_PREFIX); -// For IPv6 canonicalization (NOT for strict validation; these are quite lax!) +define( 'RE_IP_PREFIX', '(3[0-2]|[12]?\d)' ); +define( 'RE_IP_BLOCK', RE_IP_ADD . '\/' . RE_IP_PREFIX ); + +// An IPv6 address is made up of 8 words (each x0000 to xFFFF). +// However, the "::" abbreviation can be used on consecutive x0000 words. define( 'RE_IPV6_WORD', '([0-9A-Fa-f]{1,4})' ); -define( 'RE_IPV6_GAP', ':(?:0+:)*(?::(?:0+:)*)?' ); -define( 'RE_IPV6_V4_PREFIX', '0*' . RE_IPV6_GAP . '(?:ffff:)?' ); -// An IPv6 block is an IP address and a prefix (d1 to d128) define( 'RE_IPV6_PREFIX', '(12[0-8]|1[01][0-9]|[1-9]?\d)'); -// An IPv6 IP is made up of 8 octets. However abbreviations like "::" can be used. -// This is lax! Number of octets/double colons validation not done. define( 'RE_IPV6_ADD', - '(' . - ':(:' . RE_IPV6_WORD . '){1,7}' . // IPs that start with ":" - '|' . - RE_IPV6_WORD . '(:{1,2}' . RE_IPV6_WORD . '|::$){1,7}' . // IPs that don't start with ":" + '(?:' . // starts with "::" (including "::") + ':(?::|(?::' . RE_IPV6_WORD . '){1,7})' . + '|' . // ends with "::" (except "::") + RE_IPV6_WORD . '(?::' . RE_IPV6_WORD . '){0,6}::' . + '|' . // contains one "::" in the middle, ending in "::WORD" + RE_IPV6_WORD . '(?::' . RE_IPV6_WORD . '){0,5}' . '::' . RE_IPV6_WORD . + '|' . // contains one "::" in the middle, not ending in "::WORD" (regex for PCRE 4.0+) + RE_IPV6_WORD . '(?::(?P:(?P))?' . RE_IPV6_WORD . '(?!:(?P=abn))){1,5}' . + ':' . RE_IPV6_WORD . '(?P=iabn)' . + // NOTE: (?!(?P=abn)) fails iff "::" used twice; (?P=iabn) passes iff a "::" was found. + '|' . // contains no "::" + RE_IPV6_WORD . '(?::' . RE_IPV6_WORD . '){7}' . ')' + // NOTE: With PCRE 7.2+, we can combine the two '"::" in the middle' cases into: + // RE_IPV6_WORD . '(?::((?(-1)|:))?' . RE_IPV6_WORD . '){1,6}(?(-2)|^)' + // This also improves regex concatenation by using relative references. ); +// An IPv6 block is an IP address and a prefix (d1 to d128) define( 'RE_IPV6_BLOCK', RE_IPV6_ADD . '\/' . RE_IPV6_PREFIX ); +// For IPv6 canonicalization (NOT for strict validation; these are quite lax!) +define( 'RE_IPV6_GAP', ':(?:0+:)*(?::(?:0+:)*)?' ); +define( 'RE_IPV6_V4_PREFIX', '0*' . RE_IPV6_GAP . '(?:ffff:)?' ); + // This might be useful for regexps used elsewhere, matches any IPv6 or IPv6 address or network define( 'IP_ADDRESS_STRING', '(?:' . - RE_IP_ADD . '(\/' . RE_IP_PREFIX . '|)' . // IPv4 + RE_IP_ADD . '(?:\/' . RE_IP_PREFIX . ')?' . // IPv4 '|' . - RE_IPV6_ADD . '(\/' . RE_IPV6_PREFIX . '|)' . // IPv6 + RE_IPV6_ADD . '(?:\/' . RE_IPV6_PREFIX . ')?' . // IPv6 ')' ); @@ -43,284 +73,193 @@ define( 'IP_ADDRESS_STRING', */ class IP { /** - * Given a string, determine if it as valid IP - * Unlike isValid(), this looks for networks too - * @param $ip IP address. - * @return string + * Determine if a string is as valid IP address or network (CIDR prefix). + * SIIT IPv4-translated addresses are rejected. + * Note: canonicalize() tries to convert translated addresses to IPv4. + * + * @param $ip String: possible IP address + * @return Boolean */ public static function isIPAddress( $ip ) { - if ( !$ip ) return false; - if ( is_array( $ip ) ) { - throw new MWException( "invalid value passed to " . __METHOD__ ); - } - // IPv6 IPs with two "::" strings are ambiguous and thus invalid - return preg_match( '/^' . IP_ADDRESS_STRING . '$/', $ip) && ( substr_count($ip, '::') < 2 ); + return (bool)preg_match( '/^' . IP_ADDRESS_STRING . '$/', $ip ); } + /** + * Given a string, determine if it as valid IP in IPv6 only. + * Note: Unlike isValid(), this looks for networks too. + * + * @param $ip String: possible IP address + * @return Boolean + */ public static function isIPv6( $ip ) { - if ( !$ip ) return false; - if( is_array( $ip ) ) { - throw new MWException( "invalid value passed to " . __METHOD__ ); - } - $doubleColons = substr_count($ip, '::'); - // IPv6 IPs with two "::" strings are ambiguous and thus invalid - return preg_match( '/^' . RE_IPV6_ADD . '(\/' . RE_IPV6_PREFIX . '|)$/', $ip) - && ( $doubleColons == 1 || substr_count($ip,':') == 7 ); + return (bool)preg_match( '/^' . RE_IPV6_ADD . '(?:\/' . RE_IPV6_PREFIX . ')?$/', $ip ); } + /** + * Given a string, determine if it as valid IP in IPv4 only. + * Note: Unlike isValid(), this looks for networks too. + * + * @param $ip String: possible IP address + * @return Boolean + */ public static function isIPv4( $ip ) { - if ( !$ip ) return false; - return preg_match( '/^' . RE_IP_ADD . '(\/' . RE_IP_PREFIX . '|)$/', $ip); + return (bool)preg_match( '/^' . RE_IP_ADD . '(?:\/' . RE_IP_PREFIX . ')?$/', $ip ); } /** - * Given an IP address in dotted-quad notation, returns an IPv6 octet. - * See http://www.answers.com/topic/ipv4-compatible-address - * IPs with the first 92 bits as zeros are reserved from IPv6 - * @param $ip quad-dotted IP address. - * @return string + * Validate an IP address. Ranges are NOT considered valid. + * SIIT IPv4-translated addresses are rejected. + * Note: canonicalize() tries to convert translated addresses to IPv4. + * + * @param $ip String + * @return Boolean: True if it is valid. */ - public static function IPv4toIPv6( $ip ) { - if ( !$ip ) return null; - // Convert only if needed - if ( self::isIPv6( $ip ) ) return $ip; - // IPv4 CIDRs - if ( strpos( $ip, '/' ) !== false ) { - $parts = explode( '/', $ip, 2 ); - if ( count( $parts ) != 2 ) { - return false; - } - $network = self::toUnsigned( $parts[0] ); - if ( $network !== false && is_numeric( $parts[1] ) && $parts[1] >= 0 && $parts[1] <= 32 ) { - $bits = $parts[1] + 96; - return self::toOctet( $network ) . "/$bits"; - } else { - return false; - } - } - return self::toOctet( self::toUnsigned( $ip ) ); + public static function isValid( $ip ) { + return ( preg_match( '/^' . RE_IP_ADD . '$/', $ip ) + || preg_match( '/^' . RE_IPV6_ADD . '$/', $ip ) ); } /** - * Given an IPv6 address in octet notation, returns an unsigned integer. - * @param $ip octet ipv6 IP address. - * @return string + * Validate an IP Block (valid address WITH a valid prefix). + * SIIT IPv4-translated addresses are rejected. + * Note: canonicalize() tries to convert translated addresses to IPv4. + * + * @param $ipblock String + * @return Boolean: True if it is valid. */ - public static function toUnsigned6( $ip ) { - if ( !$ip ) return null; - $ip = explode(':', self::sanitizeIP( $ip ) ); - $r_ip = ''; - foreach ($ip as $v) { - $r_ip .= str_pad( $v, 4, 0, STR_PAD_LEFT ); - } - $r_ip = wfBaseConvert( $r_ip, 16, 10 ); - return $r_ip; + public static function isValidBlock( $ipblock ) { + return ( preg_match( '/^' . RE_IPV6_BLOCK . '$/', $ipblock ) + || preg_match( '/^' . RE_IP_BLOCK . '$/', $ipblock ) ); } /** - * Given an IPv6 address in octet notation, returns the expanded octet. - * IPv4 IPs will be trimmed, thats it... - * @param $ip octet ipv6 IP address. - * @return string + * Convert an IP into a nice standard form. + * IPv6 addresses in octet notation are expanded to 8 words. + * IPv4 addresses are just trimmed. + * + * @param $ip String: IP address in quad or octet form (CIDR or not). + * @return String */ public static function sanitizeIP( $ip ) { $ip = trim( $ip ); - if ( $ip === '' ) return null; - // Trim and return IPv4 addresses - if ( self::isIPv4($ip) ) return $ip; - // Only IPv6 addresses can be expanded - if ( !self::isIPv6($ip) ) return $ip; + if ( $ip === '' ) { + return null; + } + if ( self::isIPv4( $ip ) || !self::isIPv6( $ip ) ) { + return $ip; // nothing else to do for IPv4 addresses or invalid ones + } // Remove any whitespaces, convert to upper case $ip = strtoupper( $ip ); // Expand zero abbreviations $abbrevPos = strpos( $ip, '::' ); if ( $abbrevPos !== false ) { + // We know this is valid IPv6. Find the last index of the + // address before any CIDR number (e.g. "a:b:c::/24"). + $CIDRStart = strpos( $ip, "/" ); + $addressEnd = ( $CIDRStart !== false ) + ? $CIDRStart - 1 + : strlen( $ip ) - 1; // If the '::' is at the beginning... - if( $abbrevPos == 0 ) { - $repeat = '0:'; $extra = ''; $pad = 9; // 7+2 (due to '::') - // If the '::' is at the end... - } else if( $abbrevPos == (strlen($ip)-2) ) { - $repeat = ':0'; $extra = ''; $pad = 9; // 7+2 (due to '::') + if ( $abbrevPos == 0 ) { + $repeat = '0:'; + $extra = ( $ip == '::' ) ? '0' : ''; // for the address '::' + $pad = 9; // 7+2 (due to '::') // If the '::' is at the end... + } elseif ( $abbrevPos == ( $addressEnd - 1 ) ) { + $repeat = ':0'; + $extra = ''; + $pad = 9; // 7+2 (due to '::') + // If the '::' is in the middle... } else { - $repeat = ':0'; $extra = ':'; $pad = 8; // 6+2 (due to '::') + $repeat = ':0'; + $extra = ':'; + $pad = 8; // 6+2 (due to '::') } - $ip = str_replace('::', str_repeat($repeat, $pad-substr_count($ip,':')).$extra, $ip); + $ip = str_replace( '::', + str_repeat( $repeat, $pad - substr_count( $ip, ':' ) ) . $extra, + $ip + ); } // Remove leading zereos from each bloc as needed - $ip = preg_replace( '/(^|:)0+' . RE_IPV6_WORD . '/', '$1$2', $ip ); + $ip = preg_replace( '/(^|:)0+(' . RE_IPV6_WORD . ')/', '$1$2', $ip ); return $ip; } /** * Given an unsigned integer, returns an IPv6 address in octet notation - * @param $ip integer IP address. - * @return string + * + * @param $ip_int String: IP address. + * @return String */ public static function toOctet( $ip_int ) { - // Convert to padded uppercase hex - $ip_hex = wfBaseConvert($ip_int, 10, 16, 32, false); - // Separate into 8 octets - $ip_oct = substr( $ip_hex, 0, 4 ); - for ($n=1; $n < 8; $n++) { - $ip_oct .= ':' . substr($ip_hex, 4*$n, 4); - } - // NO leading zeroes - $ip_oct = preg_replace( '/(^|:)0+' . RE_IPV6_WORD . '/', '$1$2', $ip_oct ); - return $ip_oct; + return self::hexToOctet( wfBaseConvert( $ip_int, 10, 16, 32, false ) ); } /** * Convert an IPv4 or IPv6 hexadecimal representation back to readable format + * + * @param $hex String: number, with "v6-" prefix if it is IPv6 + * @return String: quad-dotted (IPv4) or octet notation (IPv6) */ public static function formatHex( $hex ) { - if ( substr( $hex, 0, 3 ) == 'v6-' ) { - return self::hexToOctet( $hex ); - } else { + if ( substr( $hex, 0, 3 ) == 'v6-' ) { // IPv6 + return self::hexToOctet( substr( $hex, 3 ) ); + } else { // IPv4 return self::hexToQuad( $hex ); } } - + /** - * Given a hexadecimal number, returns to an IPv6 address in octet notation - * @param $ip string hex IP - * @return string + * Converts a hexadecimal number to an IPv6 address in octet notation + * + * @param $ip_hex String: pure hex (no v6- prefix) + * @return String (of format a:b:c:d:e:f:g:h) */ - public static function hextoOctet( $ip_hex ) { - // Convert to padded uppercase hex - $ip_hex = str_pad( strtoupper($ip_hex), 32, '0'); - // Separate into 8 octets - $ip_oct = substr( $ip_hex, 0, 4 ); - for ($n=1; $n < 8; $n++) { - $ip_oct .= ':' . substr($ip_hex, 4*$n, 4); - } - // NO leading zeroes - $ip_oct = preg_replace( '/(^|:)0+' . RE_IPV6_WORD . '/', '$1$2', $ip_oct ); + public static function hexToOctet( $ip_hex ) { + // Pad hex to 32 chars (128 bits) + $ip_hex = str_pad( strtoupper( $ip_hex ), 32, '0', STR_PAD_LEFT ); + // Separate into 8 words + $ip_oct = substr( $ip_hex, 0, 4 ); + for ( $n = 1; $n < 8; $n++ ) { + $ip_oct .= ':' . substr( $ip_hex, 4 * $n, 4 ); + } + // NO leading zeroes + $ip_oct = preg_replace( '/(^|:)0+(' . RE_IPV6_WORD . ')/', '$1$2', $ip_oct ); return $ip_oct; } - + /** - * Converts a hexadecimal number to an IPv4 address in octet notation - * @param $ip string Hex IP - * @return string - */ - public static function hexToQuad( $ip ) { - // Converts a hexadecimal IP to nnn.nnn.nnn.nnn format + * Converts a hexadecimal number to an IPv4 address in quad-dotted notation + * + * @param $ip_hex String: pure hex + * @return String (of format a.b.c.d) + */ + public static function hexToQuad( $ip_hex ) { + // Pad hex to 8 chars (32 bits) + $ip_hex = str_pad( strtoupper( $ip_hex ), 8, '0', STR_PAD_LEFT ); + // Separate into four quads $s = ''; for ( $i = 0; $i < 4; $i++ ) { if ( $s !== '' ) { $s .= '.'; } - $s .= base_convert( substr( $ip, $i * 2, 2 ), 16, 10 ); + $s .= base_convert( substr( $ip_hex, $i * 2, 2 ), 16, 10 ); } return $s; } - /** - * Convert a network specification in IPv6 CIDR notation to an integer network and a number of bits - * @return array(string, int) - */ - public static function parseCIDR6( $range ) { - # Expand any IPv6 IP - $parts = explode( '/', IP::sanitizeIP( $range ), 2 ); - if ( count( $parts ) != 2 ) { - return array( false, false ); - } - $network = self::toUnsigned6( $parts[0] ); - if ( $network !== false && is_numeric( $parts[1] ) && $parts[1] >= 0 && $parts[1] <= 128 ) { - $bits = $parts[1]; - if ( $bits == 0 ) { - $network = 0; - } else { - # Native 32 bit functions WONT work here!!! - # Convert to a padded binary number - $network = wfBaseConvert( $network, 10, 2, 128 ); - # Truncate the last (128-$bits) bits and replace them with zeros - $network = str_pad( substr( $network, 0, $bits ), 128, 0, STR_PAD_RIGHT ); - # Convert back to an integer - $network = wfBaseConvert( $network, 2, 10 ); - } - } else { - $network = false; - $bits = false; - } - return array( $network, $bits ); - } - - /** - * Given a string range in a number of formats, return the start and end of - * the range in hexadecimal. For IPv6. - * - * Formats are: - * 2001:0db8:85a3::7344/96 CIDR - * 2001:0db8:85a3::7344 - 2001:0db8:85a3::7344 Explicit range - * 2001:0db8:85a3::7344/96 Single IP - * @return array(string, int) - */ - public static function parseRange6( $range ) { - # Expand any IPv6 IP - $range = IP::sanitizeIP( $range ); - if ( strpos( $range, '/' ) !== false ) { - # CIDR - list( $network, $bits ) = self::parseCIDR6( $range ); - if ( $network === false ) { - $start = $end = false; - } else { - $start = wfBaseConvert( $network, 10, 16, 32, false ); - # Turn network to binary (again) - $end = wfBaseConvert( $network, 10, 2, 128 ); - # Truncate the last (128-$bits) bits and replace them with ones - $end = str_pad( substr( $end, 0, $bits ), 128, 1, STR_PAD_RIGHT ); - # Convert to hex - $end = wfBaseConvert( $end, 2, 16, 32, false ); - # see toHex() comment - $start = "v6-$start"; $end = "v6-$end"; - } - } elseif ( strpos( $range, '-' ) !== false ) { - # Explicit range - list( $start, $end ) = array_map( 'trim', explode( '-', $range, 2 ) ); - $start = self::toUnsigned6( $start ); $end = self::toUnsigned6( $end ); - if ( $start > $end ) { - $start = $end = false; - } else { - $start = wfBaseConvert( $start, 10, 16, 32, false ); - $end = wfBaseConvert( $end, 10, 16, 32, false ); - } - # see toHex() comment - $start = "v6-$start"; $end = "v6-$end"; - } else { - # Single IP - $start = $end = self::toHex( $range ); - } - if ( $start === false || $end === false ) { - return array( false, false ); - } else { - return array( $start, $end ); - } - } - - /** - * Validate an IP address. - * @return boolean True if it is valid. - */ - public static function isValid( $ip ) { - return ( preg_match( '/^' . RE_IP_ADD . '$/', $ip) || preg_match( '/^' . RE_IPV6_ADD . '$/', $ip) ); - } - - /** - * Validate an IP Block. - * @return boolean True if it is valid. - */ - public static function isValidBlock( $ipblock ) { - return ( count(self::toArray($ipblock)) == 1 + 5 ); - } - /** * Determine if an IP address really is an IP address, and if it is public, * i.e. not RFC 1918 or similar * Comes from ProxyTools.php + * + * @param $ip String + * @return Boolean */ public static function isPublic( $ip ) { + if ( self::isIPv6( $ip ) ) { + return self::isPublic6( $ip ); + } $n = self::toUnsigned( $ip ); if ( !$n ) { return false; @@ -328,7 +267,7 @@ class IP { // ip2long accepts incomplete addresses, as well as some addresses // followed by garbage characters. Check that it's really valid. - if( $ip != long2ip( $n ) ) { + if ( $ip != long2ip( $n ) ) { return false; } @@ -354,100 +293,118 @@ class IP { } /** - * Split out an IP block as an array of 4 bytes and a mask, - * return false if it can't be determined + * Determine if an IPv6 address really is an IP address, and if it is public, + * i.e. not RFC 4193 or similar * - * @param $ip string A quad dotted/octet IP address - * @return array + * @param $ip String + * @return Boolean */ - public static function toArray( $ipblock ) { - $matches = array(); - if( preg_match( '/^' . RE_IP_ADD . '(?:\/(?:'.RE_IP_PREFIX.'))?' . '$/', $ipblock, $matches ) ) { - return $matches; - } else if ( preg_match( '/^' . RE_IPV6_ADD . '(?:\/(?:'.RE_IPV6_PREFIX.'))?' . '$/', $ipblock, $matches ) ) { - return $matches; - } else { - return false; + private static function isPublic6( $ip ) { + static $privateRanges = false; + if ( !$privateRanges ) { + $privateRanges = array( + array( 'fc::', 'fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' ), # RFC 4193 (local) + array( '0:0:0:0:0:0:0:1', '0:0:0:0:0:0:0:1' ), # loopback + ); } + $n = self::toHex( $ip ); + foreach ( $privateRanges as $r ) { + $start = self::toHex( $r[0] ); + $end = self::toHex( $r[1] ); + if ( $n >= $start && $n <= $end ) { + return false; + } + } + return true; } /** - * Return a zero-padded hexadecimal representation of an IP address. + * Return a zero-padded upper case hexadecimal representation of an IP address. * * Hexadecimal addresses are used because they can easily be extended to * IPv6 support. To separate the ranges, the return value from this * function for an IPv6 address will be prefixed with "v6-", a non- * hexadecimal string which sorts after the IPv4 addresses. * - * @param $ip Quad dotted/octet IP address. - * @return hexidecimal + * @param $ip String: quad dotted/octet IP address. + * @return String */ public static function toHex( $ip ) { - $n = self::toUnsigned( $ip ); - if ( $n !== false ) { - $n = self::isIPv6($ip) ? "v6-" . wfBaseConvert( $n, 10, 16, 32, false ) : wfBaseConvert( $n, 10, 16, 8, false ); + if ( self::isIPv6( $ip ) ) { + $n = 'v6-' . self::IPv6ToRawHex( $ip ); + } else { + $n = self::toUnsigned( $ip ); + if ( $n !== false ) { + $n = wfBaseConvert( $n, 10, 16, 8, false ); + } } return $n; } + /** + * Given an IPv6 address in octet notation, returns a pure hex string. + * + * @param $ip String: octet ipv6 IP address. + * @return String: pure hex (uppercase) + */ + private static function IPv6ToRawHex( $ip ) { + $ip = self::sanitizeIP( $ip ); + if ( !$ip ) { + return null; + } + $r_ip = ''; + foreach ( explode( ':', $ip ) as $v ) { + $r_ip .= str_pad( $v, 4, 0, STR_PAD_LEFT ); + } + return $r_ip; + } + /** * Given an IP address in dotted-quad/octet notation, returns an unsigned integer. * Like ip2long() except that it actually works and has a consistent error return value. * Comes from ProxyTools.php - * @param $ip Quad dotted IP address. - * @return integer + * + * @param $ip String: quad dotted IP address. + * @return Mixed: string/int/false */ public static function toUnsigned( $ip ) { - // Use IPv6 functions if needed if ( self::isIPv6( $ip ) ) { - return self::toUnsigned6( $ip ); - } - if ( $ip == '255.255.255.255' ) { - $n = -1; + $n = self::toUnsigned6( $ip ); } else { $n = ip2long( $ip ); - if ( $n == -1 || $n === false ) { # Return value on error depends on PHP version - $n = false; + if ( $n < 0 ) { + $n += pow( 2, 32 ); } } - if ( $n < 0 ) { - $n += pow( 2, 32 ); - } return $n; } - /** - * Convert a dotted-quad IP to a signed integer - * Returns false on failure - */ - public static function toSigned( $ip ) { - if ( $ip == '255.255.255.255' ) { - $n = -1; - } else { - $n = ip2long( $ip ); - if ( $n == -1 ) { - $n = false; - } - } - return $n; + private static function toUnsigned6( $ip ) { + return wfBaseConvert( self::IPv6ToRawHex( $ip ), 16, 10 ); } /** - * Convert a network specification in CIDR notation to an integer network and a number of bits - * @return array(string, int) + * Convert a network specification in CIDR notation + * to an integer network and a number of bits + * + * @param $range String: IP with CIDR prefix + * @return array(int or string, int) */ public static function parseCIDR( $range ) { + if ( self::isIPv6( $range ) ) { + return self::parseCIDR6( $range ); + } $parts = explode( '/', $range, 2 ); if ( count( $parts ) != 2 ) { return array( false, false ); } - $network = self::toSigned( $parts[0] ); - if ( $network !== false && is_numeric( $parts[1] ) && $parts[1] >= 0 && $parts[1] <= 32 ) { - $bits = $parts[1]; + list( $network, $bits ) = $parts; + $network = ip2long( $network ); + if ( $network !== false && is_numeric( $bits ) && $bits >= 0 && $bits <= 32 ) { if ( $bits == 0 ) { $network = 0; } else { - $network &= ~((1 << (32 - $bits)) - 1); + $network &= ~( ( 1 << ( 32 - $bits ) ) - 1); } # Convert to unsigned if ( $network < 0 ) { @@ -461,8 +418,8 @@ class IP { } /** - * Given a string range in a number of formats, return the start and end of - * the range in hexadecimal. + * Given a string range in a number of formats, + * return the start and end of the range in hexadecimal. * * Formats are: * 1.2.3.4/24 CIDR @@ -472,27 +429,31 @@ class IP { * 2001:0db8:85a3::7344/96 CIDR * 2001:0db8:85a3::7344 - 2001:0db8:85a3::7344 Explicit range * 2001:0db8:85a3::7344 Single IP - * @return array(string, int) + * @param $range String: IP range + * @return array(string, string) */ public static function parseRange( $range ) { - // Use IPv6 functions if needed - if ( self::isIPv6( $range ) ) { - return self::parseRange6( $range ); - } + // CIDR notation if ( strpos( $range, '/' ) !== false ) { - # CIDR + if ( self::isIPv6( $range ) ) { + return self::parseRange6( $range ); + } list( $network, $bits ) = self::parseCIDR( $range ); if ( $network === false ) { $start = $end = false; } else { $start = sprintf( '%08X', $network ); - $end = sprintf( '%08X', $network + pow( 2, (32 - $bits) ) - 1 ); + $end = sprintf( '%08X', $network + pow( 2, ( 32 - $bits ) ) - 1 ); } + // Explicit range } elseif ( strpos( $range, '-' ) !== false ) { - # Explicit range list( $start, $end ) = array_map( 'trim', explode( '-', $range, 2 ) ); - if( self::isIPAddress( $start ) && self::isIPAddress( $end ) ) { - $start = self::toUnsigned( $start ); $end = self::toUnsigned( $end ); + if ( self::isIPv6( $start ) && self::isIPv6( $end ) ) { + return self::parseRange6( $range ); + } + if ( self::isIPv4( $start ) && self::isIPv4( $end ) ) { + $start = self::toUnsigned( $start ); + $end = self::toUnsigned( $end ); if ( $start > $end ) { $start = $end = false; } else { @@ -513,18 +474,106 @@ class IP { } } + /** + * Convert a network specification in IPv6 CIDR notation to an + * integer network and a number of bits + * + * @return array(string, int) + */ + private static function parseCIDR6( $range ) { + # Explode into + $parts = explode( '/', IP::sanitizeIP( $range ), 2 ); + if ( count( $parts ) != 2 ) { + return array( false, false ); + } + list( $network, $bits ) = $parts; + $network = self::IPv6ToRawHex( $network ); + if ( $network !== false && is_numeric( $bits ) && $bits >= 0 && $bits <= 128 ) { + if ( $bits == 0 ) { + $network = "0"; + } else { + # Native 32 bit functions WONT work here!!! + # Convert to a padded binary number + $network = wfBaseConvert( $network, 16, 2, 128 ); + # Truncate the last (128-$bits) bits and replace them with zeros + $network = str_pad( substr( $network, 0, $bits ), 128, 0, STR_PAD_RIGHT ); + # Convert back to an integer + $network = wfBaseConvert( $network, 2, 10 ); + } + } else { + $network = false; + $bits = false; + } + return array( $network, (int)$bits ); + } + + /** + * Given a string range in a number of formats, return the + * start and end of the range in hexadecimal. For IPv6. + * + * Formats are: + * 2001:0db8:85a3::7344/96 CIDR + * 2001:0db8:85a3::7344 - 2001:0db8:85a3::7344 Explicit range + * 2001:0db8:85a3::7344/96 Single IP + * @return array(string, string) + */ + private static function parseRange6( $range ) { + # Expand any IPv6 IP + $range = IP::sanitizeIP( $range ); + // CIDR notation... + if ( strpos( $range, '/' ) !== false ) { + list( $network, $bits ) = self::parseCIDR6( $range ); + if ( $network === false ) { + $start = $end = false; + } else { + $start = wfBaseConvert( $network, 10, 16, 32, false ); + # Turn network to binary (again) + $end = wfBaseConvert( $network, 10, 2, 128 ); + # Truncate the last (128-$bits) bits and replace them with ones + $end = str_pad( substr( $end, 0, $bits ), 128, 1, STR_PAD_RIGHT ); + # Convert to hex + $end = wfBaseConvert( $end, 2, 16, 32, false ); + # see toHex() comment + $start = "v6-$start"; + $end = "v6-$end"; + } + // Explicit range notation... + } elseif ( strpos( $range, '-' ) !== false ) { + list( $start, $end ) = array_map( 'trim', explode( '-', $range, 2 ) ); + $start = self::toUnsigned6( $start ); + $end = self::toUnsigned6( $end ); + if ( $start > $end ) { + $start = $end = false; + } else { + $start = wfBaseConvert( $start, 10, 16, 32, false ); + $end = wfBaseConvert( $end, 10, 16, 32, false ); + } + # see toHex() comment + $start = "v6-$start"; + $end = "v6-$end"; + } else { + # Single IP + $start = $end = self::toHex( $range ); + } + if ( $start === false || $end === false ) { + return array( false, false ); + } else { + return array( $start, $end ); + } + } + /** * Determine if a given IPv4/IPv6 address is in a given CIDR network - * @param $addr The address to check against the given range. - * @param $range The range to check the given address against. - * @return bool Whether or not the given address is in the given range. + * + * @param $addr String: the address to check against the given range. + * @param $range String: the range to check the given address against. + * @return Boolean: whether or not the given address is in the given range. */ public static function isInRange( $addr, $range ) { - // Convert to IPv6 if needed $hexIP = self::toHex( $addr ); list( $start, $end ) = self::parseRange( $range ); - return (strcmp($hexIP, $start) >= 0 && - strcmp($hexIP, $end) <= 0); + return ( strcmp( $hexIP, $start ) >= 0 && + strcmp( $hexIP, $end ) <= 0 ); } /** @@ -534,29 +583,34 @@ class IP { * This currently only checks a few IPV4-to-IPv6 related cases. More * unusual representations may be added later. * - * @param $addr something that might be an IP address - * @return valid dotted quad IPv4 address or null + * @param $addr String: something that might be an IP address + * @return String: valid dotted quad IPv4 address or null */ public static function canonicalize( $addr ) { - if ( self::isValid( $addr ) ) + if ( self::isValid( $addr ) ) { return $addr; - + } // Turn mapped addresses from ::ce:ffff:1.2.3.4 to 1.2.3.4 - if ( strpos($addr,':') !==false && strpos($addr,'.') !==false ) { - $addr = substr( $addr, strrpos($addr,':')+1 ); - if( self::isIPv4($addr) ) return $addr; + if ( strpos( $addr, ':' ) !== false && strpos( $addr, '.' ) !== false ) { + $addr = substr( $addr, strrpos( $addr, ':' ) + 1 ); + if ( self::isIPv4( $addr ) ) { + return $addr; + } } - // IPv6 loopback address $m = array(); - if ( preg_match( '/^0*' . RE_IPV6_GAP . '1$/', $addr, $m ) ) - return '127.0.0.1'; - + if ( preg_match( '/^0*' . RE_IPV6_GAP . '1$/', $addr, $m ) ) { + return '127.0.0.1'; + } // IPv4-mapped and IPv4-compatible IPv6 addresses - if ( preg_match( '/^' . RE_IPV6_V4_PREFIX . '(' . RE_IP_ADD . ')$/i', $addr, $m ) ) + if ( preg_match( '/^' . RE_IPV6_V4_PREFIX . '(' . RE_IP_ADD . ')$/i', $addr, $m ) ) { return $m[1]; - if ( preg_match( '/^' . RE_IPV6_V4_PREFIX . RE_IPV6_WORD . ':' . RE_IPV6_WORD . '$/i', $addr, $m ) ) + } + if ( preg_match( '/^' . RE_IPV6_V4_PREFIX . RE_IPV6_WORD . + ':' . RE_IPV6_WORD . '$/i', $addr, $m ) ) + { return long2ip( ( hexdec( $m[1] ) << 16 ) + hexdec( $m[2] ) ); + } return null; // give up } diff --git a/includes/ImageFunctions.php b/includes/ImageFunctions.php index 5f01ab6e..8eaebd26 100644 --- a/includes/ImageFunctions.php +++ b/includes/ImageFunctions.php @@ -1,110 +1,9 @@ 1.0, - 'pt' => 1.25, - 'pc' => 15.0, - 'mm' => 3.543307, - 'cm' => 35.43307, - 'in' => 90.0, - 'em' => 16.0, // fake it? - 'ex' => 12.0, // fake it? - '' => 1.0, // "User units" pixels by default - ); - $matches = array(); - if( preg_match( '/^\s*(\d+(?:\.\d+)?)(em|ex|px|pt|pc|cm|mm|in|%|)\s*$/', $length, $matches ) ) { - $length = floatval( $matches[1] ); - $unit = $matches[2]; - if( $unit == '%' ) { - return $length * 0.01 * $viewportSize; - } else { - return $length * $unitLength[$unit]; - } - } else { - // Assume pixels - return floatval( $length ); - } -} - -class XmlSizeFilter { - const DEFAULT_WIDTH = 512; - const DEFAULT_HEIGHT = 512; - var $first = true; - var $width = self::DEFAULT_WIDTH; - var $height = self::DEFAULT_HEIGHT; - function filter( $name, $attribs ) { - if( $this->first ) { - $defaultWidth = self::DEFAULT_WIDTH; - $defaultHeight = self::DEFAULT_HEIGHT; - $aspect = 1.0; - $width = null; - $height = null; - - if( isset( $attribs['viewBox'] ) ) { - // min-x min-y width height - $viewBox = preg_split( '/\s+/', trim( $attribs['viewBox'] ) ); - if( count( $viewBox ) == 4 ) { - $viewWidth = wfScaleSVGUnit( $viewBox[2] ); - $viewHeight = wfScaleSVGUnit( $viewBox[3] ); - if( $viewWidth > 0 && $viewHeight > 0 ) { - $aspect = $viewWidth / $viewHeight; - $defaultHeight = $defaultWidth / $aspect; - } - } - } - if( isset( $attribs['width'] ) ) { - $width = wfScaleSVGUnit( $attribs['width'], $defaultWidth ); - } - if( isset( $attribs['height'] ) ) { - $height = wfScaleSVGUnit( $attribs['height'], $defaultHeight ); - } - - if( !isset( $width ) && !isset( $height ) ) { - $width = $defaultWidth; - $height = $width / $aspect; - } elseif( isset( $width ) && !isset( $height ) ) { - $height = $width / $aspect; - } elseif( isset( $height ) && !isset( $width ) ) { - $width = $height * $aspect; - } - - if( $width > 0 && $height > 0 ) { - $this->width = intval( round( $width ) ); - $this->height = intval( round( $height ) ); - } - - $this->first = false; - } - } -} - -/** - * Compatible with PHP getimagesize() - * @todo support gzipped SVGZ - * @todo check XML more carefully - * @todo sensible defaults - * - * @param $filename String: full name of the file (passed to php fopen()). - * @return array - */ -function wfGetSVGsize( $filename ) { - $filter = new XmlSizeFilter(); - $xml = new XmlTypeCheck( $filename, array( $filter, 'filter' ) ); - if( $xml->wellFormed ) { - return array( $filter->width, $filter->height, 'SVG', - "width=\"$filter->width\" height=\"$filter->height\"" ); - } - - return false; -} /** * Determine if an image exists on the 'bad image list'. diff --git a/includes/ImageGallery.php b/includes/ImageGallery.php index 5bff0ae3..f7020d63 100644 --- a/includes/ImageGallery.php +++ b/includes/ImageGallery.php @@ -32,20 +32,30 @@ class ImageGallery */ private $contextTitle = false; - private $mPerRow = 4; // How many images wide should the gallery be? - private $mWidths = 120, $mHeights = 120; // How wide/tall each thumbnail should be - private $mAttribs = array(); + /** + * Fixed margins + */ + const THUMB_PADDING = 30; + const GB_PADDING = 5; + //2px borders on each side + 2px implied padding on each side + const GB_BORDERS = 8; + /** * Create a new image gallery object. */ function __construct( ) { + global $wgGalleryOptions; $this->mImages = array(); - $this->mShowBytes = true; + $this->mShowBytes = $wgGalleryOptions['showBytes']; $this->mShowFilename = true; $this->mParser = false; $this->mHideBadImages = false; + $this->mPerRow = $wgGalleryOptions['imagesPerRow']; + $this->mWidths = $wgGalleryOptions['imageWidth']; + $this->mHeights = $wgGalleryOptions['imageHeight']; + $this->mCaptionLength = $wgGalleryOptions['captionLength']; } /** @@ -74,7 +84,7 @@ class ImageGallery /** * Set the caption (as HTML) * - * @param $caption Caption + * @param $caption String: Caption */ public function setCaptionHtml( $caption ) { $this->mCaption = $caption; @@ -83,10 +93,11 @@ class ImageGallery /** * Set how many images will be displayed per row. * - * @param int $num > 0; invalid numbers will be rejected + * @param $num Integer >= 0; If perrow=0 the gallery layout will adapt to screensize + * invalid numbers will be rejected */ public function setPerRow( $num ) { - if ($num > 0) { + if ($num >= 0) { $this->mPerRow = (int)$num; } } @@ -94,7 +105,7 @@ class ImageGallery /** * Set how wide each image will be, in pixels. * - * @param int $num > 0; invalid numbers will be ignored + * @param $num Integer > 0; invalid numbers will be ignored */ public function setWidths( $num ) { if ($num > 0) { @@ -105,7 +116,7 @@ class ImageGallery /** * Set how high each image will be, in pixels. * - * @param int $num > 0; invalid numbers will be ignored + * @param $num Integer > 0; invalid numbers will be ignored */ public function setHeights( $num ) { if ($num > 0) { @@ -153,11 +164,11 @@ class ImageGallery } /** - * Add an image at the beginning of the gallery. - * - * @param $title Title object of the image that is added to the gallery - * @param $html String: Additional HTML text to be shown. The name and size of the image are always shown. - */ + * Add an image at the beginning of the gallery. + * + * @param $title Title object of the image that is added to the gallery + * @param $html String: Additional HTML text to be shown. The name and size of the image are always shown. + */ function insert( $title, $html='' ) { if ( $title instanceof File ) { // Old calling convention @@ -181,7 +192,7 @@ class ImageGallery * @param $f Boolean: set to false to disable. */ function setShowBytes( $f ) { - $this->mShowBytes = ( $f == true); + $this->mShowBytes = (bool)$f; } /** @@ -191,17 +202,17 @@ class ImageGallery * @param $f Boolean: set to false to disable. */ function setShowFilename( $f ) { - $this->mShowFilename = ( $f == true); + $this->mShowFilename = (bool)$f; } /** * Set arbitrary attributes to go on the HTML gallery output element. - * Should be suitable for a <table> element. + * Should be suitable for a
      element. * * Note -- if taking from user input, you should probably run through * Sanitizer::validateAttributes() first. * - * @param array of HTML attribute pairs + * @param $attribs Array of HTML attribute pairs */ function setAttributes( $attribs ) { $this->mAttribs = $attribs; @@ -222,15 +233,20 @@ class ImageGallery $sk = $this->getSkin(); + if ( $this->mPerRow > 0 ) { + $maxwidth = $this->mPerRow * ( $this->mWidths + self::THUMB_PADDING + self::GB_PADDING + self::GB_BORDERS ); + $oldStyle = isset( $this->mAttribs['style'] ) ? $this->mAttribs['style'] : ""; + $this->mAttribs['style'] = "max-width: {$maxwidth}px;_width: {$maxwidth}px;" . $oldStyle; + } + $attribs = Sanitizer::mergeAttributes( array( - 'class' => 'gallery', - 'cellspacing' => '0', - 'cellpadding' => '0' ), + 'class' => 'gallery'), $this->mAttribs ); - $s = Xml::openElement( 'table', $attribs ); - if( $this->mCaption ) - $s .= "\n\t{$this->mCaption}"; + $s = Xml::openElement( 'ul', $attribs ); + if ( $this->mCaption ) { + $s .= "\n\t
    • {$this->mCaption}
    • "; + } $params = array( 'width' => $this->mWidths, 'height' => $this->mHeights ); $i = 0; @@ -242,15 +258,19 @@ class ImageGallery $time = $descQuery = false; wfRunHooks( 'BeforeGalleryFindFile', array( &$this, &$nt, &$time, &$descQuery ) ); - $img = wfFindFile( $nt, array( 'time' => $time ) ); + if ( $nt->getNamespace() == NS_FILE ) { + $img = wfFindFile( $nt, array( 'time' => $time ) ); + } else { + $img = false; + } - if( $nt->getNamespace() != NS_FILE || !$img ) { + if( !$img ) { # We're dealing with a non-image, spit out the name and be done with it. - $thumbhtml = "\n\t\t\t".'
      ' + $thumbhtml = "\n\t\t\t".'
      ' . htmlspecialchars( $nt->getText() ) . '
      '; } elseif( $this->mHideBadImages && wfIsBadImage( $nt->getDBkey(), $this->getContextTitle() ) ) { # The image is blacklisted, just show it as a text link. - $thumbhtml = "\n\t\t\t".'
      ' . + $thumbhtml = "\n\t\t\t".'
      ' . $sk->link( $nt, htmlspecialchars( $nt->getText() ), @@ -261,10 +281,14 @@ class ImageGallery '
      '; } elseif( !( $thumb = $img->transform( $params ) ) ) { # Error generating thumbnail. - $thumbhtml = "\n\t\t\t".'
      ' + $thumbhtml = "\n\t\t\t".'
      ' . htmlspecialchars( $img->getLastError() ) . '
      '; } else { - $vpad = floor( ( 1.25*$this->mHeights - $thumb->height ) /2 ) - 2; + //We get layout problems with the margin, if the image is smaller + //than the line-height, so we less margin in these cases. + $minThumbHeight = $thumb->height > 17 ? $thumb->height : 17; + $vpad = floor(( self::THUMB_PADDING + $this->mHeights - $minThumbHeight ) /2); + $imageParameters = array( 'desc-link' => true, @@ -274,13 +298,14 @@ class ImageGallery if ( $text == '' ) { $imageParameters['alt'] = $nt->getText(); } - + + # Set both fixed width and min-height. $thumbhtml = "\n\t\t\t". - '
      ' + '
      ' # Auto-margin centering for block-level elements. Needed now that we have video # handlers since they may emit block-level elements as opposed to simple tags. # ref http://css-discuss.incutio.com/?page=CenteringBlockElement - . '
      ' + . '
      ' . $thumb->toHtml( $imageParameters ) . '
      '; // Call parser transform hook @@ -308,7 +333,7 @@ class ImageGallery $textlink = $this->mShowFilename ? $sk->link( $nt, - htmlspecialchars( $wgLang->truncate( $nt->getText(), 20 ) ), + htmlspecialchars( $wgLang->truncate( $nt->getText(), $this->mCaptionLength ) ), array(), array(), array( 'known', 'noclasses' ) @@ -319,31 +344,25 @@ class ImageGallery # in version 4.8.6 generated crackpot html in its absence, see: # http://bugzilla.wikimedia.org/show_bug.cgi?id=1765 -Ævar - if ( $i % $this->mPerRow == 0 ) { - $s .= "\n\t"; - } + # Weird double wrapping in div needed due to FF2 bug + # Can be safely removed if FF2 falls completely out of existance $s .= - "\n\t\t" . '
      ' + "\n\t\t" . '
    • ' + . '
      ' . $thumbhtml . "\n\t\t\t" . '
      ' . "\n" . $textlink . $text . $nb . "\n\t\t\t
      " - . "\n\t\t
      "; - if ( $i % $this->mPerRow == $this->mPerRow - 1 ) { - $s .= "\n\t"; - } + . "\n\t\t
    • "; ++$i; } - if( $i % $this->mPerRow != 0 ) { - $s .= "\n\t"; - } - $s .= "\n"; + $s .= "\n
    "; return $s; } /** - * @return int Number of images in the gallery + * @return Integer: number of images in the gallery */ public function count() { return count( $this->mImages ); @@ -352,7 +371,7 @@ class ImageGallery /** * Set the contextual title * - * @param Title $title Contextual title + * @param $title Title: contextual title */ public function setContextTitle( $title ) { $this->contextTitle = $title; diff --git a/includes/ImagePage.php b/includes/ImagePage.php index f16acc33..c018e647 100644 --- a/includes/ImagePage.php +++ b/includes/ImagePage.php @@ -1,6 +1,6 @@ dupes = null; $this->repo = null; } - + + /** + * @param $file File: + * @return void + */ public function setFile( $file ) { $this->displayImg = $file; $this->img = $file; @@ -30,20 +34,20 @@ class ImagePage extends Article { } protected function loadFile() { - if( $this->fileLoaded ) { + if ( $this->fileLoaded ) { return true; } $this->fileLoaded = true; $this->displayImg = $this->img = false; wfRunHooks( 'ImagePageFindFile', array( $this, &$this->img, &$this->displayImg ) ); - if( !$this->img ) { + if ( !$this->img ) { $this->img = wfFindFile( $this->mTitle ); - if( !$this->img ) { + if ( !$this->img ) { $this->img = wfLocalFile( $this->mTitle ); } } - if( !$this->displayImg ) { + if ( !$this->displayImg ) { $this->displayImg = $this->img; } $this->repo = $this->img->getRepo(); @@ -61,13 +65,22 @@ class ImagePage extends Article { public function view() { global $wgOut, $wgShowEXIF, $wgRequest, $wgUser; + + $diff = $wgRequest->getVal( 'diff' ); + $diffOnly = $wgRequest->getBool( 'diffonly', $wgUser->getOption( 'diffonly' ) ); + + if ( $this->mTitle->getNamespace() != NS_FILE || ( isset( $diff ) && $diffOnly ) ) { + return parent::view(); + } + $this->loadFile(); - if( $this->mTitle->getNamespace() == NS_FILE && $this->img->getRedirected() ) { - if( $this->mTitle->getDBkey() == $this->img->getName() ) { + if ( $this->mTitle->getNamespace() == NS_FILE && $this->img->getRedirected() ) { + if ( $this->mTitle->getDBkey() == $this->img->getName() || isset( $diff ) ) { // mTitle is the same as the redirect target so ask Article // to perform the redirect for us. - return Article::view(); + $wgRequest->setVal( 'diffonly', 'true' ); + return parent::view(); } else { // mTitle is not the same as the redirect target so it is // probably the redirect page itself. Fake the redirect symbol @@ -79,15 +92,9 @@ class ImagePage extends Article { } } - $diff = $wgRequest->getVal( 'diff' ); - $diffOnly = $wgRequest->getBool( 'diffonly', $wgUser->getOption( 'diffonly' ) ); - - if( $this->mTitle->getNamespace() != NS_FILE || ( isset( $diff ) && $diffOnly ) ) - return Article::view(); - $this->showRedirectedFromHeader(); - if( $wgShowEXIF && $this->displayImg->exists() ) { + if ( $wgShowEXIF && $this->displayImg->exists() ) { // FIXME: bad interface, see note on MediaHandler::formatMetadata(). $formattedMetadata = $this->displayImg->formatMetadata(); $showmeta = $formattedMetadata !== false; @@ -95,15 +102,15 @@ class ImagePage extends Article { $showmeta = false; } - if( !$diff && $this->displayImg->exists() ) - $wgOut->addHTML( $this->showTOC($showmeta) ); + if ( !$diff && $this->displayImg->exists() ) + $wgOut->addHTML( $this->showTOC( $showmeta ) ); - if( !$diff ) + if ( !$diff ) $this->openShowImage(); # No need to display noarticletext, we use our own message, output in openShowImage() - if( $this->getID() ) { - Article::view(); + if ( $this->getID() ) { + parent::view(); } else { # Just need to set the right headers $wgOut->setArticleFlag( true ); @@ -112,9 +119,9 @@ class ImagePage extends Article { } # Show shared description, if needed - if( $this->mExtraDescription ) { + if ( $this->mExtraDescription ) { $fol = wfMsgNoTrans( 'shareddescriptionfollows' ); - if( $fol != '-' && !wfEmptyMsg( 'shareddescriptionfollows', $fol ) ) { + if ( $fol != '-' && !wfEmptyMsg( 'shareddescriptionfollows', $fol ) ) { $wgOut->addWikiText( $fol ); } $wgOut->addHTML( '
    ' . $this->mExtraDescription . "
    \n" ); @@ -123,7 +130,7 @@ class ImagePage extends Article { $this->closeShowImage(); $this->imageHistory(); // TODO: Cleanup the following - + $wgOut->addHTML( Xml::element( 'h2', array( 'id' => 'filelinks' ), wfMsg( 'imagelinks' ) ) . "\n" ); @@ -136,49 +143,49 @@ class ImagePage extends Article { # Allow extensions to add something after the image links $html = ''; wfRunHooks( 'ImagePageAfterImageLinks', array( $this, &$html ) ); - if ( $html) + if ( $html ) $wgOut->addHTML( $html ); - if( $showmeta ) { - global $wgStylePath, $wgStyleVersion; - $expand = htmlspecialchars( Xml::escapeJsString( wfMsg( 'metadata-expand' ) ) ); - $collapse = htmlspecialchars( Xml::escapeJsString( wfMsg( 'metadata-collapse' ) ) ); + if ( $showmeta ) { $wgOut->addHTML( Xml::element( 'h2', array( 'id' => 'metadata' ), wfMsg( 'metadata' ) ) . "\n" ); $wgOut->addWikiText( $this->makeMetadataTable( $formattedMetadata ) ); - $wgOut->addScriptFile( 'metadata.js' ); - $wgOut->addHTML( - "\n" ); + $wgOut->addModules( array( 'mediawiki.legacy.metadata' ) ); + } + + $css = $this->repo->getDescriptionStylesheetUrl(); + if ( $css ) { + $wgOut->addStyle( $css ); } } public function getRedirectTarget() { $this->loadFile(); - if( $this->img->isLocal() ) { + if ( $this->img->isLocal() ) { return parent::getRedirectTarget(); } // Foreign image page $from = $this->img->getRedirected(); $to = $this->img->getName(); - if( $from == $to ) { - return null; + if ( $from == $to ) { + return null; } return $this->mRedirectTarget = Title::makeTitle( NS_FILE, $to ); } public function followRedirect() { $this->loadFile(); - if( $this->img->isLocal() ) { + if ( $this->img->isLocal() ) { return parent::followRedirect(); } $from = $this->img->getRedirected(); $to = $this->img->getName(); - if( $from == $to ) { - return false; + if ( $from == $to ) { + return false; } - return Title::makeTitle( NS_FILE, $to ); + return Title::makeTitle( NS_FILE, $to ); } public function isRedirect( $text = false ) { $this->loadFile(); - if( $this->img->isLocal() ) + if ( $this->img->isLocal() ) return parent::isRedirect( $text ); return (bool)$this->img->getRedirected(); @@ -201,21 +208,21 @@ class ImagePage extends Article { public function getDuplicates() { $this->loadFile(); - if( !is_null($this->dupes) ) { + if ( !is_null( $this->dupes ) ) { return $this->dupes; } - if( !( $hash = $this->img->getSha1() ) ) { + if ( !( $hash = $this->img->getSha1() ) ) { return $this->dupes = array(); } $dupes = RepoGroup::singleton()->findBySha1( $hash ); // Remove duplicates with self and non matching file sizes - $self = $this->img->getRepoName().':'.$this->img->getName(); + $self = $this->img->getRepoName() . ':' . $this->img->getName(); $size = $this->img->getSize(); foreach ( $dupes as $index => $file ) { - $key = $file->getRepoName().':'.$file->getName(); - if( $key == $self ) + $key = $file->getRepoName() . ':' . $file->getName(); + if ( $key == $self ) unset( $dupes[$index] ); - if( $file->getSize() != $size ) + if ( $file->getSize() != $size ) unset( $dupes[$index] ); } return $this->dupes = $dupes; @@ -226,14 +233,14 @@ class ImagePage extends Article { /** * Create the TOC * - * @param bool $metadata Whether or not to show the metadata link - * @return string + * @param $metadata Boolean: whether or not to show the metadata link + * @return String */ protected function showTOC( $metadata ) { $r = array( '
  • ' . wfMsgHtml( 'file-anchor-link' ) . '
  • ', '
  • ' . wfMsgHtml( 'filehist' ) . '
  • ', - '
  • ' . wfMsgHtml( 'imagelinks' ) . '
  • ', + '
  • ' . wfMsgHtml( 'imagelinks' ) . '
  • ', ); if ( $metadata ) { $r[] = '
  • ' . wfMsgHtml( 'metadata' ) . '
  • '; @@ -249,8 +256,8 @@ class ImagePage extends Article { * * FIXME: bad interface, see note on MediaHandler::formatMetadata(). * - * @param array $exif The array containing the EXIF data - * @return string + * @param $metadata Array: the array containing the EXIF data + * @return String */ protected function makeMetadataTable( $metadata ) { $r = "'; + } if ( $wrap!='' ) { // Wrap message in html $s = str_replace( '$1', $s, $wrap ); @@ -701,9 +710,10 @@ class LogEventsList { /** * SQL clause to skip forbidden log types for this user + * * @param $db Database * @param $audience string, public/user - * @return mixed (string or false) + * @return Mixed: string or false */ public static function getExcludeClause( $db, $audience = 'public' ) { global $wgLogRestrictions, $wgUser; @@ -734,15 +744,17 @@ class LogPager extends ReverseChronologicalPager { public $mLogEventsList; /** - * constructor + * Constructor + * * @param $list LogEventsList - * @param $types String or Array log types to show - * @param $user String The user who made the log entries - * @param $title String The page title the log entries are for - * @param $pattern String Do a prefix search rather than an exact title match - * @param $conds Array Extra conditions for the query - * @param $year Integer The year to start from - * @param $month Integer The month to start from + * @param $types String or Array: log types to show + * @param $user String: the user who made the log entries + * @param $title String: the page title the log entries are for + * @param $pattern String: do a prefix search rather than an exact title match + * @param $conds Array: extra conditions for the query + * @param $year Integer: the year to start from + * @param $month Integer: the month to start from + * @param $tagFilter String: tag */ public function __construct( $list, $types = array(), $user = '', $title = '', $pattern = '', $conds = array(), $year = false, $month = false, $tagFilter = '' ) @@ -790,6 +802,7 @@ class LogPager extends ReverseChronologicalPager { /** * Set the log reader to return only entries of the given type. * Type restrictions enforced here + * * @param $types String or array: Log types ('upload', 'delete', etc); * empty string means no restriction */ @@ -822,6 +835,7 @@ class LogPager extends ReverseChronologicalPager { /** * Set the log reader to return only entries by the given user. + * * @param $name String: (In)valid user name */ private function limitUser( $name ) { @@ -855,6 +869,7 @@ class LogPager extends ReverseChronologicalPager { /** * Set the log reader to return only entries affecting the given page. * (For the block and rights logs, this is a user page.) + * * @param $page String: Title name as text * @param $pattern String */ @@ -898,7 +913,6 @@ class LogPager extends ReverseChronologicalPager { } public function getQueryInfo() { - global $wgOut; $tables = array( 'logging', 'user' ); $this->mConds[] = 'user_id = log_user'; $index = array(); @@ -951,7 +965,7 @@ class LogPager extends ReverseChronologicalPager { # Do a link batch query if( $this->getNumRows() > 0 ) { $lb = new LinkBatch; - while( $row = $this->mResult->fetchObject() ) { + foreach ( $this->mResult as $row ) { $lb->add( $row->log_namespace, $row->log_title ); $lb->addObj( Title::makeTitleSafe( NS_USER, $row->user_name ) ); $lb->addObj( Title::makeTitleSafe( NS_USER_TALK, $row->user_name ) ); @@ -1009,6 +1023,7 @@ class LogPager extends ReverseChronologicalPager { */ class LogReader { var $pager; + /** * @param $request WebRequest: for internal use use a FauxRequest object to pass arbitrary parameters. */ @@ -1073,8 +1088,9 @@ class LogViewer { * Take over the whole output page in $wgOut with the log display. */ public function show() { + global $wgOut; # Set title and add header - $this->list->showHeader( $pager->getType() ); + $this->list->showHeader( $this->pager->getType() ); # Show form options $this->list->showOptions( $this->pager->getType(), $this->pager->getUser(), $this->pager->getPage(), $this->pager->getPattern(), $this->pager->getYear(), $this->pager->getMonth() ); @@ -1097,6 +1113,7 @@ class LogViewer { * Output just the list of entries given by the linked LogReader, * with extraneous UI elements. Use for displaying log fragments in * another page (eg at Special:Undelete) + * * @param $out OutputPage: where to send output */ public function showList( &$out ) { diff --git a/includes/LogPage.php b/includes/LogPage.php index 1d8d6c1c..8bd08dc4 100644 --- a/includes/LogPage.php +++ b/includes/LogPage.php @@ -1,25 +1,25 @@ -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - /** * Contain log classes + * + * Copyright © 2002, 2004 Brion Vibber + * http://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * * @file */ @@ -43,17 +43,17 @@ class LogPage { var $updateRecentChanges, $sendToUDP; /** - * Constructor - * - * @param string $type One of '', 'block', 'protect', 'rights', 'delete', - * 'upload', 'move' - * @param bool $rc Whether to update recent changes as well as the logging table - * @param bool $udp Whether to send to the UDP feed if NOT sent to RC - */ + * Constructor + * + * @param $type String: one of '', 'block', 'protect', 'rights', 'delete', + * 'upload', 'move' + * @param $rc Boolean: whether to update recent changes as well as the logging table + * @param $udp String: pass 'UDP' to send to the UDP feed if NOT sent to RC + */ public function __construct( $type, $rc = true, $udp = 'skipUDP' ) { $this->type = $type; $this->updateRecentChanges = $rc; - $this->sendToUDP = ($udp == 'UDP'); + $this->sendToUDP = ( $udp == 'UDP' ); } protected function saveContent() { @@ -77,23 +77,29 @@ class LogPage { 'log_params' => $this->params ); $dbw->insert( 'logging', $data, __METHOD__ ); - $newId = !is_null($log_id) ? $log_id : $dbw->insertId(); + $newId = !is_null( $log_id ) ? $log_id : $dbw->insertId(); # And update recentchanges if( $this->updateRecentChanges ) { $titleObj = SpecialPage::getTitleFor( 'Log', $this->type ); - RecentChange::notifyLog( $now, $titleObj, $this->doer, $this->getRcComment(), '', $this->type, - $this->action, $this->target, $this->comment, $this->params, $newId ); - } else if( $this->sendToUDP ) { + RecentChange::notifyLog( + $now, $titleObj, $this->doer, $this->getRcComment(), '', + $this->type, $this->action, $this->target, $this->comment, + $this->params, $newId + ); + } elseif( $this->sendToUDP ) { # Don't send private logs to UDP - if( isset($wgLogRestrictions[$this->type]) && $wgLogRestrictions[$this->type] !='*' ) { + if( isset( $wgLogRestrictions[$this->type] ) && $wgLogRestrictions[$this->type] != '*' ) { return true; } # Notify external application via UDP. # We send this to IRC but do not want to add it the RC table. $titleObj = SpecialPage::getTitleFor( 'Log', $this->type ); - $rc = RecentChange::newLogEntry( $now, $titleObj, $this->doer, $this->getRcComment(), '', - $this->type, $this->action, $this->target, $this->comment, $this->params, $newId ); + $rc = RecentChange::newLogEntry( + $now, $titleObj, $this->doer, $this->getRcComment(), '', + $this->type, $this->action, $this->target, $this->comment, + $this->params, $newId + ); $rc->notifyRC2UDP(); } return $newId; @@ -105,10 +111,11 @@ class LogPage { public function getRcComment() { $rcComment = $this->actionText; if( $this->comment != '' ) { - if ($rcComment == '') + if ( $rcComment == '' ) { $rcComment = $this->comment; - else + } else { $rcComment .= wfMsgForContent( 'colon-separator' ) . $this->comment; + } } return $rcComment; } @@ -121,7 +128,9 @@ class LogPage { } /** - * @static + * Get the list of valid log types + * + * @return Array of strings */ public static function validTypes() { global $wgLogTypes; @@ -129,21 +138,25 @@ class LogPage { } /** - * @static + * Is $type a valid log type + * + * @param $type String: log type to check + * @return Boolean */ public static function isLogType( $type ) { return in_array( $type, LogPage::validTypes() ); } /** - * @static - * @param string $type logtype + * Get the name for the given log type + * + * @param $type String: logtype + * @return String: log name */ public static function logName( $type ) { - global $wgLogNames, $wgMessageCache; + global $wgLogNames; if( isset( $wgLogNames[$type] ) ) { - $wgMessageCache->loadAllMessages(); return str_replace( '_', ' ', wfMsg( $wgLogNames[$type] ) ); } else { // Bogus log types? Perhaps an extension was removed. @@ -152,26 +165,34 @@ class LogPage { } /** + * Get the log header for the given log type + * * @todo handle missing log types - * @param string $type logtype - * @return string Headertext of this logtype + * @param $type String: logtype + * @return String: headertext of this logtype */ public static function logHeader( $type ) { - global $wgLogHeaders, $wgMessageCache; - $wgMessageCache->loadAllMessages(); - return wfMsgExt($wgLogHeaders[$type],array('parseinline')); + global $wgLogHeaders; + return wfMsgExt( $wgLogHeaders[$type], array( 'parseinline' ) ); } /** - * @static + * Generate text for a log entry + * + * @param $type String: log type + * @param $action String: log action + * @param $title Mixed: Title object or null + * @param $skin Mixed: Skin object or null. If null, we want to use the wiki + * content language, since that will go to the IRC feed. + * @param $params Array: parameters + * @param $filterWikilinks Boolean: whether to filter wiki links * @return HTML string */ - public static function actionText( $type, $action, $title = null, $skin = null, - $params = array(), $filterWikilinks = false ) + public static function actionText( $type, $action, $title = null, $skin = null, + $params = array(), $filterWikilinks = false ) { - global $wgLang, $wgContLang, $wgLogActions, $wgMessageCache; + global $wgLang, $wgContLang, $wgLogActions; - $wgMessageCache->loadAllMessages(); $key = "$type/$action"; # Defer patrol log to PatrolLog class if( $key == 'patrol/patrol' ) { @@ -187,16 +208,18 @@ class LogPage { $rightsnone = wfMsg( 'rightsnone' ); foreach ( $params as &$param ) { $groupArray = array_map( 'trim', explode( ',', $param ) ); - $groupArray = array_map( array( 'User', 'getGroupName' ), $groupArray ); + $groupArray = array_map( array( 'User', 'getGroupMember' ), $groupArray ); $param = $wgLang->listToText( $groupArray ); } } else { $rightsnone = wfMsgForContent( 'rightsnone' ); } - if( !isset( $params[0] ) || trim( $params[0] ) == '' ) + if( !isset( $params[0] ) || trim( $params[0] ) == '' ) { $params[0] = $rightsnone; - if( !isset( $params[1] ) || trim( $params[1] ) == '' ) + } + if( !isset( $params[1] ) || trim( $params[1] ) == '' ) { $params[1] = $rightsnone; + } } if( count( $params ) == 0 ) { if ( $skin ) { @@ -210,15 +233,16 @@ class LogPage { // User suppression if ( preg_match( '/^(block|suppress)\/(block|reblock)$/', $key ) ) { if ( $skin ) { - $params[1] = '' . + $params[1] = '' . $wgLang->translateBlockExpiry( $params[1] ) . ''; } else { $params[1] = $wgContLang->translateBlockExpiry( $params[1] ); } - $params[2] = isset( $params[2] ) ? + $params[2] = isset( $params[2] ) ? self::formatBlockFlags( $params[2], is_null( $skin ) ) : ''; + // Page protections - } else if ( $type == 'protect' && count($params) == 3 ) { + } elseif ( $type == 'protect' && count($params) == 3 ) { // Restrictions and expiries if( $skin ) { $details .= htmlspecialchars( " {$params[1]}" ); @@ -228,13 +252,14 @@ class LogPage { // Cascading flag... if( $params[2] ) { if ( $skin ) { - $details .= ' ['.wfMsg('protect-summary-cascade').']'; + $details .= ' [' . wfMsg( 'protect-summary-cascade' ) . ']'; } else { - $details .= ' ['.wfMsgForContent('protect-summary-cascade').']'; + $details .= ' [' . wfMsgForContent( 'protect-summary-cascade' ) . ']'; } } + // Page moves - } else if ( $type == 'move' && count( $params ) == 3 ) { + } elseif ( $type == 'move' && count( $params ) == 3 ) { if( $params[2] ) { if ( $skin ) { $details .= ' [' . wfMsg( 'move-redirect-suppressed' ) . ']'; @@ -242,19 +267,22 @@ class LogPage { $details .= ' [' . wfMsgForContent( 'move-redirect-suppressed' ) . ']'; } } + // Revision deletion - } else if ( preg_match( '/^(delete|suppress)\/revision$/', $key ) && count( $params ) == 5 ) { + } elseif ( preg_match( '/^(delete|suppress)\/revision$/', $key ) && count( $params ) == 5 ) { $count = substr_count( $params[2], ',' ) + 1; // revisions $ofield = intval( substr( $params[3], 7 ) ); // $nfield = intval( substr( $params[4], 7 ) ); // - $details .= ': '.RevisionDeleter::getLogMessage( $count, $nfield, $ofield, false ); + $details .= ': ' . RevisionDeleter::getLogMessage( $count, $nfield, $ofield, false, is_null( $skin ) ); + // Log deletion - } else if ( preg_match( '/^(delete|suppress)\/event$/', $key ) && count( $params ) == 4 ) { + } elseif ( preg_match( '/^(delete|suppress)\/event$/', $key ) && count( $params ) == 4 ) { $count = substr_count( $params[1], ',' ) + 1; // log items $ofield = intval( substr( $params[2], 7 ) ); // $nfield = intval( substr( $params[3], 7 ) ); // - $details .= ': '.RevisionDeleter::getLogMessage( $count, $nfield, $ofield, true ); + $details .= ': ' . RevisionDeleter::getLogMessage( $count, $nfield, $ofield, true, is_null( $skin ) ); } + if ( $skin ) { $rv = wfMsgHtml( $wgLogActions[$key], $params ) . $details; } else { @@ -272,24 +300,24 @@ class LogPage { $rv = "$action"; } } - + // For the perplexed, this feature was added in r7855 by Erik. - // The feature was added because we liked adding [[$1]] in our log entries - // but the log entries are parsed as Wikitext on RecentChanges but as HTML - // on Special:Log. The hack is essentially that [[$1]] represented a link - // to the title in question. The first parameter to the HTML version (Special:Log) - // is that link in HTML form, and so this just gets rid of the ugly [[]]. - // However, this is a horrible hack and it doesn't work like you expect if, say, - // you want to link to something OTHER than the title of the log entry. - // The real problem, which Erik was trying to fix (and it sort-of works now) is - // that the same messages are being treated as both wikitext *and* HTML. + // The feature was added because we liked adding [[$1]] in our log entries + // but the log entries are parsed as Wikitext on RecentChanges but as HTML + // on Special:Log. The hack is essentially that [[$1]] represented a link + // to the title in question. The first parameter to the HTML version (Special:Log) + // is that link in HTML form, and so this just gets rid of the ugly [[]]. + // However, this is a horrible hack and it doesn't work like you expect if, say, + // you want to link to something OTHER than the title of the log entry. + // The real problem, which Erik was trying to fix (and it sort-of works now) is + // that the same messages are being treated as both wikitext *and* HTML. if( $filterWikilinks ) { - $rv = str_replace( "[[", "", $rv ); - $rv = str_replace( "]]", "", $rv ); + $rv = str_replace( '[[', '', $rv ); + $rv = str_replace( ']]', '', $rv ); } return $rv; } - + protected static function getTitleLink( $type, $skin, $title, &$params ) { global $wgLang, $wgContLang, $wgUserrightsInterwikiDelimiter; if( !$skin ) { @@ -298,7 +326,7 @@ class LogPage { switch( $type ) { case 'move': $titleLink = $skin->link( - $title, + $title, htmlspecialchars( $title->getPrefixedText() ), array(), array( 'redirect' => 'no' ) @@ -331,8 +359,9 @@ class LogPage { if ( count( $parts ) == 2 ) { $titleLink = WikiMap::foreignUserLink( $parts[1], $parts[0], htmlspecialchars( $title->getPrefixedText() ) ); - if ( $titleLink !== false ) + if ( $titleLink !== false ) { break; + } } $titleLink = $skin->link( Title::makeTitle( NS_USER, $text ) ); break; @@ -354,7 +383,7 @@ class LogPage { list( $name, $par ) = SpecialPage::resolveAliasWithSubpage( $title->getDBkey() ); # Use the language name for log titles, rather than Log/X if( $name == 'Log' ) { - $titleLink = '('.$skin->link( $title, LogPage::logName( $par ) ).')'; + $titleLink = '(' . $skin->link( $title, LogPage::logName( $par ) ) . ')'; } else { $titleLink = $skin->link( $title ); } @@ -367,48 +396,60 @@ class LogPage { /** * Add a log entry - * @param string $action one of '', 'block', 'protect', 'rights', 'delete', 'upload', 'move', 'move_redir' - * @param object &$target A title object. - * @param string $comment Description associated - * @param array $params Parameters passed later to wfMsg.* functions - * @param User $doer The user doing the action + * + * @param $action String: one of '', 'block', 'protect', 'rights', 'delete', 'upload', 'move', 'move_redir' + * @param $target Title object + * @param $comment String: description associated + * @param $params Array: parameters passed later to wfMsg.* functions + * @param $doer User object: the user doing the action */ public function addEntry( $action, $target, $comment, $params = array(), $doer = null ) { if ( !is_array( $params ) ) { $params = array( $params ); } - if ( $comment === null ) $comment = ""; + if ( $comment === null ) { + $comment = ''; + } $this->action = $action; $this->target = $target; $this->comment = $comment; $this->params = LogPage::makeParamBlob( $params ); - - if ($doer === null) { + + if ( $doer === null ) { global $wgUser; $doer = $wgUser; - } elseif (!is_object( $doer ) ) { + } elseif ( !is_object( $doer ) ) { $doer = User::newFromId( $doer ); } - + $this->doer = $doer; $this->actionText = LogPage::actionText( $this->type, $action, $target, null, $params ); return $this->saveContent(); } - + /** * Add relations to log_search table - * @static + * + * @param $field String + * @param $values Array + * @param $logid Integer + * @return Boolean */ public function addRelations( $field, $values, $logid ) { - if( !strlen($field) || empty($values) ) + if( !strlen( $field ) || empty( $values ) ) { return false; // nothing + } $data = array(); foreach( $values as $value ) { - $data[] = array('ls_field' => $field,'ls_value' => $value,'ls_log_id' => $logid); + $data[] = array( + 'ls_field' => $field, + 'ls_value' => $value, + 'ls_log_id' => $logid + ); } $dbw = wfGetDB( DB_MASTER ); $dbw->insert( 'log_search', $data, __METHOD__, 'IGNORE' ); @@ -417,7 +458,9 @@ class LogPage { /** * Create a blob from a parameter array - * @static + * + * @param $params Array + * @return String */ public static function makeParamBlob( $params ) { return implode( "\n", $params ); @@ -425,7 +468,9 @@ class LogPage { /** * Extract a parameter array from a blob - * @static + * + * @param $blob String + * @return Array */ public static function extractParams( $blob ) { if ( $blob === '' ) { @@ -442,15 +487,16 @@ class LogPage { * @param $flags Flags to format * @param $forContent Whether to localize the message depending of the user * language - * @return string + * @return String */ public static function formatBlockFlags( $flags, $forContent = false ) { global $wgLang; $flags = explode( ',', trim( $flags ) ); if( count( $flags ) > 0 ) { - for( $i = 0; $i < count( $flags ); $i++ ) + for( $i = 0; $i < count( $flags ); $i++ ) { $flags[$i] = self::formatBlockFlag( $flags[$i], $forContent ); + } return '(' . $wgLang->commaList( $flags ) . ')'; } else { return ''; @@ -463,16 +509,17 @@ class LogPage { * @param $flag Flag to translate * @param $forContent Whether to localize the message depending of the user * language - * @return string + * @return String */ public static function formatBlockFlag( $flag, $forContent = false ) { static $messages = array(); if( !isset( $messages[$flag] ) ) { $k = 'block-log-flags-' . $flag; - if( $forContent ) + if( $forContent ) { $msg = wfMsgForContent( $k ); - else + } else { $msg = wfMsg( $k ); + } $messages[$flag] = htmlspecialchars( wfEmptyMsg( $k, $msg ) ? $flag : $msg ); } return $messages[$flag]; diff --git a/includes/MacBinary.php b/includes/MacBinary.php index b5b11e6c..0c38a641 100644 --- a/includes/MacBinary.php +++ b/includes/MacBinary.php @@ -35,7 +35,7 @@ class MacBinary { * The file must be seekable, such as local filesystem. * Remote URLs probably won't work. * - * @param string $filename + * @param $filename String */ function open( $filename ) { $this->valid = false; @@ -48,7 +48,8 @@ class MacBinary { /** * Does this appear to be a valid MacBinary archive? - * @return bool + * + * @return Boolean */ function isValid() { return $this->valid; @@ -56,7 +57,8 @@ class MacBinary { /** * Get length of data fork - * @return int + * + * @return Integer */ function dataForkLength() { return $this->dataLength; @@ -64,8 +66,9 @@ class MacBinary { /** * Copy the data fork to an external file or resource. - * @param resource $destination - * @return bool + * + * @param $destination Ressource + * @return Boolean */ function extractData( $destination ) { if( !$this->isValid() ) { @@ -173,9 +176,9 @@ class MacBinary { * with magic array thingy by Jim Van Verth. * http://search.cpan.org/~eryq/Convert-BinHex-1.119/lib/Convert/BinHex.pm * - * @param string $data - * @param int $seed - * @return int + * @param $data String + * @param $seed Integer + * @return Integer * @access private */ function calcCRC( $data, $seed = 0 ) { @@ -226,9 +229,9 @@ class MacBinary { } /** - * @param resource $destination - * @param int $bytesToCopy - * @return bool + * @param $destination Resource + * @param $bytesToCopy Integer + * @return Boolean * @access private */ function copyBytesTo( $destination, $bytesToCopy ) { diff --git a/includes/MagicWord.php b/includes/MagicWord.php index d741832f..31d83332 100644 --- a/includes/MagicWord.php +++ b/includes/MagicWord.php @@ -1,6 +1,7 @@ mId = $id; $this->mSynonyms = (array)$syn; $this->mCaseSensitive = $cs; @@ -269,13 +272,13 @@ class MagicWord { * @private */ function initRegex() { - #$variableClass = Title::legalChars(); - # This was used for matching "$1" variables, but different uses of the feature will have - # different restrictions, which should be checked *after* the MagicWord has been matched, - # not here. - IMSoP + // Sort the synonyms by length, descending, so that the longest synonym + // matches in precedence to the shortest + $synonyms = $this->mSynonyms; + usort( $synonyms, array( $this, 'compareStringLength' ) ); $escSyn = array(); - foreach ( $this->mSynonyms as $synonym ) + foreach ( $synonyms as $synonym ) // In case a magic word contains /, like that's going to happen;) $escSyn[] = preg_quote( $synonym, '/' ); $this->mBaseRegex = implode( '|', $escSyn ); @@ -288,6 +291,23 @@ class MagicWord { "/^(?:{$this->mBaseRegex})$/{$case}" ); } + /** + * A comparison function that returns -1, 0 or 1 depending on whether the + * first string is longer, the same length or shorter than the second + * string. + */ + function compareStringLength( $s1, $s2 ) { + $l1 = strlen( $s1 ); + $l2 = strlen( $s2 ); + if ( $l1 < $l2 ) { + return 1; + } elseif ( $l1 > $l2 ) { + return -1; + } else { + return 0; + } + } + /** * Gets a regex representing matching the word */ @@ -513,7 +533,6 @@ class MagicWordArray { * Add a magic word by name */ public function add( $name ) { - global $wgContLang; $this->names[] = $name; $this->hash = $this->baseRegex = $this->regex = null; } @@ -646,7 +665,6 @@ class MagicWordArray { } // This shouldn't happen either throw new MWException( __METHOD__.': parameter not found' ); - return array( false, false ); } /** @@ -656,7 +674,6 @@ class MagicWordArray { * Both elements are false if there was no match. */ public function matchVariableStartToEnd( $text ) { - global $wgContLang; $regexes = $this->getVariableStartToEndRegex(); foreach ( $regexes as $regex ) { if ( $regex !== '' ) { @@ -720,7 +737,7 @@ class MagicWordArray { continue; } if ( preg_match( $regex, $text, $m ) ) { - list( $id, $param ) = $this->parseMatch( $m ); + list( $id, ) = $this->parseMatch( $m ); if ( strlen( $m[0] ) >= strlen( $text ) ) { $text = ''; } else { diff --git a/includes/Math.php b/includes/Math.php index 8cf9b8d8..0e136d5f 100644 --- a/includes/Math.php +++ b/includes/Math.php @@ -37,7 +37,8 @@ class MathRenderer { if( $this->mode == MW_MATH_SOURCE ) { # No need to render or parse anything more! - return ('$ '.htmlspecialchars( $this->tex ).' $'); + # New lines are replaced with spaces, which avoids confusing our parser (bugs 23190, 22818) + return ('$ ' . str_replace( "\n", " ", htmlspecialchars( $this->tex ) ) . ' $'); } if( $this->tex == '' ) { return; # bug 8372 @@ -55,7 +56,7 @@ class MathRenderer { } } - if( function_exists( 'is_executable' ) && !is_executable( $wgTexvc ) ) { + if( !is_executable( $wgTexvc ) ) { return $this->_error( 'math_notexvc' ); } $cmd = $wgTexvc . ' ' . @@ -71,7 +72,7 @@ class MathRenderer { } wfDebug( "TeX: $cmd\n" ); - $contents = `$cmd`; + $contents = wfShellExec( $cmd ); wfDebug( "TeX output:\n $contents\n---\n" ); if (strlen($contents) == 0) { @@ -153,7 +154,10 @@ class MathRenderer { $hashpath = $this->_getHashPath(); if( !file_exists( $hashpath ) ) { - if( !@wfMkdirParents( $hashpath, 0755 ) ) { + wfSuppressWarnings(); + $ret = wfMkdirParents( $hashpath, 0755 ); + wfRestoreWarnings(); + if( !$ret ) { return $this->_error( 'math_bad_output' ); } } elseif( !is_dir( $hashpath ) || !is_writable( $hashpath ) ) { @@ -231,7 +235,9 @@ class MathRenderer { if( file_exists( $filename ) ) { if( filesize( $filename ) == 0 ) { // Some horrible error corrupted stuff :( - @unlink( $filename ); + wfSuppressWarnings(); + unlink( $filename ); + wfRestoreWarnings(); } else { return true; } @@ -241,7 +247,10 @@ class MathRenderer { $hashpath = $this->_getHashPath(); if( !file_exists( $hashpath ) ) { - if( !@wfMkdirParents( $hashpath, 0755 ) ) { + wfSuppressWarnings(); + $ret = wfMkdirParents( $hashpath, 0755 ); + wfRestoreWarnings(); + if( !$ret ) { return false; } } elseif( !is_dir( $hashpath ) || !is_writable( $hashpath ) ) { @@ -323,10 +332,10 @@ class MathRenderer { .'/'. substr($this->hash, 2, 1); } - public static function renderMath( $tex, $params=array() ) { - global $wgUser; + public static function renderMath( $tex, $params=array(), ParserOptions $parserOptions = null ) { $math = new MathRenderer( $tex, $params ); - $math->setOutputMode( $wgUser->getOption('math')); + if ( $parserOptions ) + $math->setOutputMode( $parserOptions->getMath() ); return $math->render(); } } diff --git a/includes/MediaTransformOutput.php b/includes/MediaTransformOutput.php deleted file mode 100644 index a3fcc96e..00000000 --- a/includes/MediaTransformOutput.php +++ /dev/null @@ -1,245 +0,0 @@ -width; - } - - /** - * Get the height of the output box - */ - function getHeight() { - return $this->height; - } - - /** - * @return string The thumbnail URL - */ - function getUrl() { - return $this->url; - } - - /** - * @return string Destination file path (local filesystem) - */ - function getPath() { - return $this->path; - } - - /** - * Fetch HTML for this transform output - * - * @param array $options Associative array of options. Boolean options - * should be indicated with a value of true for true, and false or - * absent for false. - * - * alt Alternate text or caption - * desc-link Boolean, show a description link - * file-link Boolean, show a file download link - * custom-url-link Custom URL to link to - * custom-title-link Custom Title object to link to - * valign vertical-align property, if the output is an inline element - * img-class Class applied to the tag, if there is such a tag - * - * For images, desc-link and file-link are implemented as a click-through. For - * sounds and videos, they may be displayed in other ways. - * - * @return string - */ - abstract function toHtml( $options = array() ); - - /** - * This will be overridden to return true in error classes - */ - function isError() { - return false; - } - - /** - * Wrap some XHTML text in an anchor tag with the given attributes - */ - protected function linkWrap( $linkAttribs, $contents ) { - if ( $linkAttribs ) { - return Xml::tags( 'a', $linkAttribs, $contents ); - } else { - return $contents; - } - } - - function getDescLinkAttribs( $title = null, $params = '' ) { - $query = $this->page ? ( 'page=' . urlencode( $this->page ) ) : ''; - if( $params ) { - $query .= $query ? '&'.$params : $params; - } - $attribs = array( - 'href' => $this->file->getTitle()->getLocalURL( $query ), - 'class' => 'image', - ); - if ( $title ) { - $attribs['title'] = $title; - } - return $attribs; - } -} - - -/** - * Media transform output for images - * - * @ingroup Media - */ -class ThumbnailImage extends MediaTransformOutput { - /** - * @param string $path Filesystem path to the thumb - * @param string $url URL path to the thumb - * @private - */ - function ThumbnailImage( $file, $url, $width, $height, $path = false, $page = false ) { - $this->file = $file; - $this->url = $url; - # These should be integers when they get here. - # If not, there's a bug somewhere. But let's at - # least produce valid HTML code regardless. - $this->width = round( $width ); - $this->height = round( $height ); - $this->path = $path; - $this->page = $page; - } - - /** - * Return HTML tag for the thumbnail, will include - * width and height attributes and a blank alt text (as required). - * - * @param array $options Associative array of options. Boolean options - * should be indicated with a value of true for true, and false or - * absent for false. - * - * alt HTML alt attribute - * title HTML title attribute - * desc-link Boolean, show a description link - * file-link Boolean, show a file download link - * valign vertical-align property, if the output is an inline element - * img-class Class applied to the tag, if there is such a tag - * desc-query String, description link query params - * custom-url-link Custom URL to link to - * custom-title-link Custom Title object to link to - * - * For images, desc-link and file-link are implemented as a click-through. For - * sounds and videos, they may be displayed in other ways. - * - * @return string - * @public - */ - function toHtml( $options = array() ) { - if ( count( func_get_args() ) == 2 ) { - throw new MWException( __METHOD__ .' called in the old style' ); - } - - $alt = empty( $options['alt'] ) ? '' : $options['alt']; - - $query = empty( $options['desc-query'] ) ? '' : $options['desc-query']; - - if ( !empty( $options['custom-url-link'] ) ) { - $linkAttribs = array( 'href' => $options['custom-url-link'] ); - if ( !empty( $options['title'] ) ) { - $linkAttribs['title'] = $options['title']; - } - } elseif ( !empty( $options['custom-title-link'] ) ) { - $title = $options['custom-title-link']; - $linkAttribs = array( - 'href' => $title->getLinkUrl(), - 'title' => empty( $options['title'] ) ? $title->getFullText() : $options['title'] - ); - } elseif ( !empty( $options['desc-link'] ) ) { - $linkAttribs = $this->getDescLinkAttribs( empty( $options['title'] ) ? null : $options['title'], $query ); - } elseif ( !empty( $options['file-link'] ) ) { - $linkAttribs = array( 'href' => $this->file->getURL() ); - } else { - $linkAttribs = false; - } - - $attribs = array( - 'alt' => $alt, - 'src' => $this->url, - 'width' => $this->width, - 'height' => $this->height, - ); - if ( !empty( $options['valign'] ) ) { - $attribs['style'] = "vertical-align: {$options['valign']}"; - } - if ( !empty( $options['img-class'] ) ) { - $attribs['class'] = $options['img-class']; - } - return $this->linkWrap( $linkAttribs, Xml::element( 'img', $attribs ) ); - } - -} - -/** - * Basic media transform error class - * - * @ingroup Media - */ -class MediaTransformError extends MediaTransformOutput { - var $htmlMsg, $textMsg, $width, $height, $url, $path; - - function __construct( $msg, $width, $height /*, ... */ ) { - $args = array_slice( func_get_args(), 3 ); - $htmlArgs = array_map( 'htmlspecialchars', $args ); - $htmlArgs = array_map( 'nl2br', $htmlArgs ); - - $this->htmlMsg = wfMsgReplaceArgs( htmlspecialchars( wfMsgGetKey( $msg, true ) ), $htmlArgs ); - $this->textMsg = wfMsgReal( $msg, $args ); - $this->width = intval( $width ); - $this->height = intval( $height ); - $this->url = false; - $this->path = false; - } - - function toHtml( $options = array() ) { - return "width}px; height: {$this->height}px;\">
    " . - $this->htmlMsg . - "
    "; - } - - function toText() { - return $this->textMsg; - } - - function getHtmlMsg() { - return $this->htmlMsg; - } - - function isError() { - return true; - } -} - -/** - * Shortcut class for parameter validation errors - * - * @ingroup Media - */ -class TransformParameterError extends MediaTransformError { - function __construct( $params ) { - parent::__construct( 'thumbnail_error', - max( isset( $params['width'] ) ? $params['width'] : 0, 180 ), - max( isset( $params['height'] ) ? $params['height'] : 0, 180 ), - wfMsg( 'thumbnail_invalid_params' ) ); - } -} diff --git a/includes/MemcachedSessions.php b/includes/MemcachedSessions.php index e3bcea1b..4f10f99c 100644 --- a/includes/MemcachedSessions.php +++ b/includes/MemcachedSessions.php @@ -11,30 +11,42 @@ */ /** - * @todo document + * Get a cache key for the given session id. + * + * @param $id String: session id + * @return String: cache key */ function memsess_key( $id ) { return wfMemcKey( 'session', $id ); } /** - * @todo document + * Callback when opening a session. + * NOP: $wgMemc should be set up already. + * + * @param $save_path String: path used to store session files, unused + * @param $session_name String: session name + * @return Boolean: success */ function memsess_open( $save_path, $session_name ) { - # NOP, $wgMemc should be set up already return true; } /** - * @todo document + * Callback when closing a session. + * NOP. + * + * @return Boolean: success */ function memsess_close() { - # NOP return true; } /** - * @todo document + * Callback when reading session data. + * + * @param $id String: session id + * @return Mixed: session data */ function memsess_read( $id ) { global $wgMemc; @@ -44,7 +56,11 @@ function memsess_read( $id ) { } /** - * @todo document + * Callback when writing session data. + * + * @param $id String: session id + * @param $data Mixed: session data + * @return Boolean: success */ function memsess_write( $id, $data ) { global $wgMemc; @@ -53,19 +69,26 @@ function memsess_write( $id, $data ) { } /** - * @todo document + * Callback to destroy a session when calling session_destroy(). + * + * @param $id String: session id + * @return Boolean: success */ function memsess_destroy( $id ) { global $wgMemc; + $wgMemc->delete( memsess_key( $id ) ); return true; } /** - * @todo document + * Callback to execute garbage collection. + * NOP: Memcached performs garbage collection. + * + * @param $maxlifetime Integer: maximum session life time + * @return Boolean: success */ function memsess_gc( $maxlifetime ) { - # NOP: Memcached performs garbage collection. return true; } diff --git a/includes/Message.php b/includes/Message.php new file mode 100644 index 00000000..72232ec9 --- /dev/null +++ b/includes/Message.php @@ -0,0 +1,360 @@ +text() ); + * + * Messages can have parameters: + * wfMessage( 'welcome-to' )->params( $wgSitename )->text(); + * {{GRAMMAR}} and friends work correctly + * wfMessage( 'are-friends', $user, $friend ); + * wfMessage( 'bad-message' )->rawParams( '' )->escaped(); + * + * Sometimes the message text ends up in the database, so content language is needed. + * wfMessage( 'file-log', $user, $filename )->inContentLanguage()->text() + * + * Checking if message exists: + * wfMessage( 'mysterious-message' )->exists() + * + * If you want to use a different language: + * wfMessage( 'email-header' )->inLanguage( $user->getOption( 'language' ) )->plain() + * Note that you cannot parse the text except in the content or interface + * languages + * + * + * + * Comparison with old wfMsg* functions: + * + * Use full parsing. + * wfMsgExt( 'key', array( 'parseinline' ), 'apple' ); + * === wfMessage( 'key', 'apple' )->parse(); + * + * Parseinline is used because it is more useful when pre-building html. + * In normal use it is better to use OutputPage::(add|wrap)WikiMsg. + * + * Places where html cannot be used. {{-transformation is done. + * wfMsgExt( 'key', array( 'parsemag' ), 'apple', 'pear' ); + * === wfMessage( 'key', 'apple', 'pear' )->text(); + * + * + * Shortcut for escaping the message too, similar to wfMsgHTML, but + * parameters are not replaced after escaping by default. + * $escaped = wfMessage( 'key' )->rawParams( 'apple' )->escaped(); + * + * + * TODO: + * - test, can we have tests? + * - sort out the details marked with fixme + * + * @since 1.17 + * @author Niklas Laxström + */ +class Message { + /** + * In which language to get this message. True, which is the default, + * means the current interface language, false content language. + */ + protected $interface = true; + + /** + * In which language to get this message. Overrides the $interface + * variable. + */ + protected $language = null; + + /** + * The message key. + */ + protected $key; + + /** + * List of parameters which will be substituted into the message. + */ + protected $parameters = array(); + + /** + * Format for the message. + * Supported formats are: + * * text (transform) + * * escaped (transform+htmlspecialchars) + * * block-parse + * * parse (default) + * * plain + */ + protected $format = 'parse'; + + /** + * Whether database can be used. + */ + protected $useDatabase = true; + + /** + * Constructor. + * @param $key String: message key + * @param $params Array message parameters + * @return Message: $this + */ + public function __construct( $key, $params = array() ) { + global $wgLang; + $this->key = $key; + $this->parameters = array_values( $params ); + $this->language = $wgLang; + } + + /** + * Factory function that is just wrapper for the real constructor. It is + * intented to be used instead of the real constructor, because it allows + * chaining method calls, while new objects don't. + * @param $key String: message key + * @param Varargs: parameters as Strings + * @return Message: $this + */ + public static function newFromKey( $key /*...*/ ) { + $params = func_get_args(); + array_shift( $params ); + return new self( $key, $params ); + } + + /** + * Adds parameters to the parameter list of this message. + * @param Varargs: parameters as Strings + * @return Message: $this + */ + public function params( /*...*/ ) { + $args_values = array_values( func_get_args() ); + $this->parameters = array_merge( $this->parameters, $args_values ); + return $this; + } + + /** + * Add parameters that are substituted after parsing or escaping. + * In other words the parsing process cannot access the contents + * of this type of parameter, and you need to make sure it is + * sanitized beforehand. The parser will see "$n", instead. + * @param Varargs: raw parameters as Strings + * @return Message: $this + */ + public function rawParams( /*...*/ ) { + $params = func_get_args(); + foreach( $params as $param ) { + $this->parameters[] = self::rawParam( $param ); + } + return $this; + } + + /** + * Request the message in any language that is supported. + * As a side effect interface message status is unconditionally + * turned off. + * @param $lang Mixed: language code or Language object. + * @return Message: $this + */ + public function inLanguage( $lang ) { + if( $lang instanceof Language ){ + $this->language = $lang; + } elseif ( is_string( $lang ) ) { + if( $this->language->getCode() != $lang ) { + $this->language = Language::factory( $lang ); + } + } else { + $type = gettype( $lang ); + throw new MWException( __METHOD__ . " must be " + . "passed a String or Language object; $type given" + ); + } + $this->interface = false; + return $this; + } + + /** + * Request the message in the wiki's content language. + * @return Message: $this + */ + public function inContentLanguage() { + global $wgContLang; + $this->interface = false; + $this->language = $wgContLang; + return $this; + } + + /** + * Enable or disable database use. + * @param $value Boolean + * @return Message: $this + */ + public function useDatabase( $value ) { + $this->useDatabase = (bool) $value; + return $this; + } + + /** + * Returns the message parsed from wikitext to HTML. + * TODO: in PHP >= 5.2.0, we can make this a magic method, + * and then we can do, eg: + * $foo = Message::get($key); + * $string = "$foo"; + * But we shouldn't implement that while MediaWiki still supports + * PHP < 5.2; or people will start using it... + * @return String: HTML + */ + public function toString() { + $string = $this->getMessageText(); + + # Replace parameters before text parsing + $string = $this->replaceParameters( $string, 'before' ); + + # Maybe transform using the full parser + if( $this->format === 'parse' ) { + $string = $this->parseText( $string ); + $m = array(); + if( preg_match( '/^

    (.*)\n?<\/p>\n?$/sU', $string, $m ) ) { + $string = $m[1]; + } + } elseif( $this->format === 'block-parse' ){ + $string = $this->parseText( $string ); + } elseif( $this->format === 'text' ){ + $string = $this->transformText( $string ); + } elseif( $this->format === 'escaped' ){ + # FIXME: Sanitizer method here? + $string = $this->transformText( $string ); + $string = htmlspecialchars( $string ); + } + + # Raw parameter replacement + $string = $this->replaceParameters( $string, 'after' ); + + return $string; + } + + /** + * Fully parse the text from wikitext to HTML + * @return String parsed HTML + */ + public function parse() { + $this->format = 'parse'; + return $this->toString(); + } + + /** + * Returns the message text. {{-transformation is done. + * @return String: Unescaped message text. + */ + public function text() { + $this->format = 'text'; + return $this->toString(); + } + + /** + * Returns the message text as-is, only parameters are subsituted. + * @return String: Unescaped untransformed message text. + */ + public function plain() { + $this->format = 'plain'; + return $this->toString(); + } + + /** + * Returns the parsed message text which is always surrounded by a block element. + * @return String: HTML + */ + public function parseAsBlock() { + $this->format = 'block-parse'; + return $this->toString(); + } + + /** + * Returns the message text. {{-transformation is done and the result + * is escaped excluding any raw parameters. + * @return String: Escaped message text. + */ + public function escaped() { + $this->format = 'escaped'; + return $this->toString(); + } + + /** + * Check whether a message key has been defined currently. + * @return Bool: true if it is and false if not. + */ + public function exists() { + return $this->fetchMessage() !== false; + } + + public static function rawParam( $value ) { + return array( 'raw' => $value ); + } + + /** + * Substitutes any paramaters into the message text. + * @param $message String, the message text + * @param $type String: either before or after + * @return String + */ + protected function replaceParameters( $message, $type = 'before' ) { + $replacementKeys = array(); + foreach( $this->parameters as $n => $param ) { + if ( $type === 'before' && !is_array( $param ) ) { + $replacementKeys['$' . ($n + 1)] = $param; + } elseif ( $type === 'after' && isset( $param['raw'] ) ) { + $replacementKeys['$' . ($n + 1)] = $param['raw']; + } + } + $message = strtr( $message, $replacementKeys ); + return $message; + } + + /** + * Wrapper for what ever method we use to parse wikitext. + * @param $string String: Wikitext message contents + * @return Wikitext parsed into HTML + */ + protected function parseText( $string ) { + global $wgOut, $wgLang, $wgContLang; + if ( $this->language !== $wgLang && $this->language !== $wgContLang ) { + # FIXME: remove this limitation + throw new MWException( 'Can only parse in interface or content language' ); + } + return $wgOut->parse( $string, /*linestart*/true, $this->interface ); + } + + /** + * Wrapper for what ever method we use to {{-transform wikitext. + * @param $string String: Wikitext message contents + * @return Wikitext with {{-constructs replaced with their values. + */ + protected function transformText( $string ) { + global $wgMessageCache; + return $wgMessageCache->transform( $string, $this->interface, $this->language ); + } + + /** + * Returns the textual value for the message. + * @return Message contents or placeholder + */ + protected function getMessageText() { + $message = $this->fetchMessage(); + if ( $message === false ) { + return '<' . htmlspecialchars( $this->key ) . '>'; + } else { + return $message; + } + } + + /** + * Wrapper for what ever method we use to get message contents + */ + protected function fetchMessage() { + if ( !isset( $this->message ) ) { + global $wgMessageCache; + $this->message = $wgMessageCache->get( $this->key, $this->useDatabase, $this->language ); + } + return $this->message; + } + +} \ No newline at end of file diff --git a/includes/MessageBlobStore.php b/includes/MessageBlobStore.php new file mode 100644 index 00000000..5e6c8e5e --- /dev/null +++ b/includes/MessageBlobStore.php @@ -0,0 +1,370 @@ +insert( 'msg_resource', array( + 'mr_lang' => $lang, + 'mr_resource' => $name, + 'mr_blob' => $blob, + 'mr_timestamp' => $dbw->timestamp() + ), + __METHOD__, + array( 'IGNORE' ) + ); + + if ( $success ) { + if ( $dbw->affectedRows() == 0 ) { + // Blob was already present, fetch it + $blob = $dbw->selectField( 'msg_resource', 'mr_blob', array( + 'mr_resource' => $name, + 'mr_lang' => $lang, + ), + __METHOD__ + ); + } else { + // Update msg_resource_links + $rows = array(); + + foreach ( $module->getMessages() as $key ) { + $rows[] = array( + 'mrl_resource' => $name, + 'mrl_message' => $key + ); + } + $dbw->insert( 'msg_resource_links', $rows, + __METHOD__, array( 'IGNORE' ) + ); + } + } + + return $blob; + } + + /** + * Update all message blobs for a given module. + * + * @param $name String: module name + * @param $module ResourceLoaderModule object + * @param $lang String: language code (optional) + * @return Mixed: if $lang is set, the new message blob for that language is + * returned if present. Otherwise, null is returned. + */ + public static function updateModule( $name, ResourceLoaderModule $module, $lang = null ) { + $retval = null; + + // Find all existing blobs for this module + $dbw = wfGetDB( DB_MASTER ); + $res = $dbw->select( 'msg_resource', + array( 'mr_lang', 'mr_blob' ), + array( 'mr_resource' => $name ), + __METHOD__ + ); + + // Build the new msg_resource rows + $newRows = array(); + $now = $dbw->timestamp(); + // Save the last-processed old and new blobs for later + $oldBlob = $newBlob = null; + + foreach ( $res as $row ) { + $oldBlob = $row->mr_blob; + $newBlob = self::generateMessageBlob( $module, $row->mr_lang ); + + if ( $row->mr_lang === $lang ) { + $retval = $newBlob; + } + $newRows[] = array( + 'mr_resource' => $name, + 'mr_lang' => $row->mr_lang, + 'mr_blob' => $newBlob, + 'mr_timestamp' => $now + ); + } + + $dbw->replace( 'msg_resource', + array( array( 'mr_resource', 'mr_lang' ) ), + $newRows, __METHOD__ + ); + + // Figure out which messages were added and removed + $oldMessages = array_keys( FormatJson::decode( $oldBlob, true ) ); + $newMessages = array_keys( FormatJson::decode( $newBlob, true ) ); + $added = array_diff( $newMessages, $oldMessages ); + $removed = array_diff( $oldMessages, $newMessages ); + + // Delete removed messages, insert added ones + if ( $removed ) { + $dbw->delete( 'msg_resource_links', array( + 'mrl_resource' => $name, + 'mrl_message' => $removed + ), __METHOD__ + ); + } + + $newLinksRows = array(); + + foreach ( $added as $message ) { + $newLinksRows[] = array( + 'mrl_resource' => $name, + 'mrl_message' => $message + ); + } + + if ( $newLinksRows ) { + $dbw->insert( 'msg_resource_links', $newLinksRows, __METHOD__, + array( 'IGNORE' ) // just in case + ); + } + + return $retval; + } + + /** + * Update a single message in all message blobs it occurs in. + * + * @param $key String: message key + */ + public static function updateMessage( $key ) { + $dbw = wfGetDB( DB_MASTER ); + + // Keep running until the updates queue is empty. + // Due to update conflicts, the queue might not be emptied + // in one iteration. + $updates = null; + do { + $updates = self::getUpdatesForMessage( $key, $updates ); + + foreach ( $updates as $k => $update ) { + // Update the row on the condition that it + // didn't change since we fetched it by putting + // the timestamp in the WHERE clause. + $success = $dbw->update( 'msg_resource', + array( + 'mr_blob' => $update['newBlob'], + 'mr_timestamp' => $dbw->timestamp() ), + array( + 'mr_resource' => $update['resource'], + 'mr_lang' => $update['lang'], + 'mr_timestamp' => $update['timestamp'] ), + __METHOD__ + ); + + // Only requeue conflicted updates. + // If update() returned false, don't retry, for + // fear of getting into an infinite loop + if ( !( $success && $dbw->affectedRows() == 0 ) ) { + // Not conflicted + unset( $updates[$k] ); + } + } + } while ( count( $updates ) ); + + // No need to update msg_resource_links because we didn't add + // or remove any messages, we just changed their contents. + } + + public static function clear() { + // TODO: Give this some more thought + // TODO: Is TRUNCATE better? + $dbw = wfGetDB( DB_MASTER ); + $dbw->delete( 'msg_resource', '*', __METHOD__ ); + $dbw->delete( 'msg_resource_links', '*', __METHOD__ ); + } + + /** + * Create an update queue for updateMessage() + * + * @param $key String: message key + * @param $prevUpdates Array: updates queue to refresh or null to build a fresh update queue + * @return Array: updates queue + */ + private static function getUpdatesForMessage( $key, $prevUpdates = null ) { + $dbw = wfGetDB( DB_MASTER ); + + if ( is_null( $prevUpdates ) ) { + // Fetch all blobs referencing $key + $res = $dbw->select( + array( 'msg_resource', 'msg_resource_links' ), + array( 'mr_resource', 'mr_lang', 'mr_blob', 'mr_timestamp' ), + array( 'mrl_message' => $key, 'mr_resource=mrl_resource' ), + __METHOD__ + ); + } else { + // Refetch the blobs referenced by $prevUpdates + + // Reorganize the (resource, lang) pairs in the format + // expected by makeWhereFrom2d() + $twoD = array(); + + foreach ( $prevUpdates as $update ) { + $twoD[$update['resource']][$update['lang']] = true; + } + + $res = $dbw->select( 'msg_resource', + array( 'mr_resource', 'mr_lang', 'mr_blob', 'mr_timestamp' ), + $dbw->makeWhereFrom2d( $twoD, 'mr_resource', 'mr_lang' ), + __METHOD__ + ); + } + + // Build the new updates queue + $updates = array(); + + foreach ( $res as $row ) { + $updates[] = array( + 'resource' => $row->mr_resource, + 'lang' => $row->mr_lang, + 'timestamp' => $row->mr_timestamp, + 'newBlob' => self::reencodeBlob( $row->mr_blob, $key, $row->mr_lang ) + ); + } + + return $updates; + } + + /** + * Reencode a message blob with the updated value for a message + * + * @param $blob String: message blob (JSON object) + * @param $key String: message key + * @param $lang String: language code + * @return Message blob with $key replaced with its new value + */ + private static function reencodeBlob( $blob, $key, $lang ) { + $decoded = FormatJson::decode( $blob, true ); + $decoded[$key] = wfMsgExt( $key, array( 'language' => $lang ) ); + + return FormatJson::encode( (object)$decoded ); + } + + /** + * Get the message blobs for a set of modules from the database. + * Modules whose blobs are not in the database are silently dropped. + * + * @param $resourceLoader ResourceLoader object + * @param $modules Array of module names + * @param $lang String: language code + * @return array Array mapping module names to blobs + */ + private static function getFromDB( ResourceLoader $resourceLoader, $modules, $lang ) { + global $wgCacheEpoch; + $retval = array(); + $dbr = wfGetDB( DB_SLAVE ); + $res = $dbr->select( 'msg_resource', + array( 'mr_blob', 'mr_resource', 'mr_timestamp' ), + array( 'mr_resource' => $modules, 'mr_lang' => $lang ), + __METHOD__ + ); + + foreach ( $res as $row ) { + $module = $resourceLoader->getModule( $row->mr_resource ); + if ( !$module ) { + // This shouldn't be possible + throw new MWException( __METHOD__ . ' passed an invalid module name' ); + } + // Update the module's blobs if the set of messages changed or if the blob is + // older than $wgCacheEpoch + if ( array_keys( FormatJson::decode( $row->mr_blob, true ) ) !== $module->getMessages() || + wfTimestamp( TS_MW, $row->mr_timestamp ) <= $wgCacheEpoch ) { + $retval[$row->mr_resource] = self::updateModule( $row->mr_resource, $module, $lang ); + } else { + $retval[$row->mr_resource] = $row->mr_blob; + } + } + + return $retval; + } + + /** + * Generate the message blob for a given module in a given language. + * + * @param $module ResourceLoaderModule object + * @param $lang String: language code + * @return String: JSON object + */ + private static function generateMessageBlob( ResourceLoaderModule $module, $lang ) { + $messages = array(); + + foreach ( $module->getMessages() as $key ) { + $messages[$key] = wfMsgExt( $key, array( 'language' => $lang ) ); + } + + return FormatJson::encode( (object)$messages ); + } +} diff --git a/includes/MessageCache.php b/includes/MessageCache.php index 2c53430f..cc14ec2b 100644 --- a/includes/MessageCache.php +++ b/includes/MessageCache.php @@ -18,23 +18,38 @@ define( 'MSG_CACHE_VERSION', 1 ); * @ingroup Cache */ class MessageCache { - // Holds loaded messages that are defined in MediaWiki namespace. - var $mCache; + /** + * Process local cache of loaded messages that are defined in + * MediaWiki namespace. First array level is a language code, + * second level is message key and the values are either message + * content prefixed with space, or !NONEXISTENT for negative + * caching. + */ + protected $mCache; + + // Should mean that database cannot be used, but check + protected $mDisable; + + /// Lifetime for cache, used by object caching + protected $mExpiry; + + /** + * Message cache has it's own parser which it uses to transform + * messages. + */ + protected $mParserOptions, $mParser; - var $mUseCache, $mDisable, $mExpiry; - var $mKeys, $mParserOptions, $mParser; + /// Variable for tracking which variables are already loaded + protected $mLoadedLanguages = array(); - // Variable for tracking which variables are loaded - var $mLoadedLanguages = array(); + function __construct( $memCached, $useDB, $expiry ) { + if ( !$memCached ) { + $memCached = wfGetCache( CACHE_NONE ); + } - function __construct( &$memCached, $useDB, $expiry, /*ignored*/ $memcPrefix ) { - $this->mUseCache = !is_null( $memCached ); - $this->mMemc = &$memCached; + $this->mMemc = $memCached; $this->mDisable = !$useDB; $this->mExpiry = $expiry; - $this->mDisableTransform = false; - $this->mKeys = false; # initialised on demand - $this->mParser = null; } @@ -139,9 +154,9 @@ class MessageCache { fwrite($file,"mCache = array("); - foreach ($array as $key => $message) { + foreach ( $array as $key => $message ) { $key = $this->escapeForScript($key); - $messages = $this->escapeForScript($message); + $message = $this->escapeForScript($message); fwrite($file, "'$key' => '$message',\n"); } @@ -177,7 +192,7 @@ class MessageCache { * When succesfully loading from (2) or (3), all higher level caches are * updated for the newest version. * - * Nothing is loaded if member variable mDisabled is true, either manually + * Nothing is loaded if member variable mDisable is true, either manually * set by calling code or if message loading fails (is this possible?). * * Returns true if cache is already populated or it was succesfully populated, @@ -189,10 +204,6 @@ class MessageCache { function load( $code = false ) { global $wgUseLocalMessageCache; - if ( !$this->mUseCache ) { - return true; - } - if( !is_string( $code ) ) { # This isn't really nice, so at least make a note about it and try to # fall back @@ -331,11 +342,10 @@ class MessageCache { $bigConds[] = 'page_len > ' . intval( $wgMaxMsgCacheEntrySize ); # Load titles for all oversized pages in the MediaWiki namespace - $res = $dbr->select( 'page', 'page_title', $bigConds, __METHOD__ ); - while ( $row = $dbr->fetchObject( $res ) ) { + $res = $dbr->select( 'page', 'page_title', $bigConds, __METHOD__ . "($code)-big" ); + foreach ( $res as $row ) { $cache[$row->page_title] = '!TOO BIG'; } - $dbr->freeResult( $res ); # Conditions to load the remaining pages with their contents $smallConds = $conds; @@ -345,12 +355,11 @@ class MessageCache { $res = $dbr->select( array( 'page', 'revision', 'text' ), array( 'page_title', 'old_text', 'old_flags' ), - $smallConds, __METHOD__. "($code)" ); + $smallConds, __METHOD__ . "($code)-small" ); - for ( $row = $dbr->fetchObject( $res ); $row; $row = $dbr->fetchObject( $res ) ) { + foreach ( $res as $row ) { $cache[$row->page_title] = ' ' . Revision::getRevisionText( $row ); } - $dbr->freeResult( $res ); $cache['VERSION'] = MSG_CACHE_VERSION; wfProfileOut( __METHOD__ ); @@ -367,8 +376,12 @@ class MessageCache { global $wgMaxMsgCacheEntrySize; wfProfileIn( __METHOD__ ); + if ( $this->mDisable ) { + wfProfileOut( __METHOD__ ); + return; + } - list( , $code ) = $this->figureMessage( $title ); + list( $msg, $code ) = $this->figureMessage( $title ); $cacheKey = wfMemcKey( 'messages', $code ); $this->load($code); @@ -410,6 +423,10 @@ class MessageCache { $sidebarKey = wfMemcKey( 'sidebar', $code ); $parserMemc->delete( $sidebarKey ); } + + // Update the message in the message blob store + global $wgContLang; + MessageBlobStore::updateMessage( $wgContLang->lcfirst( $msg ) ); wfRunHooks( "MessageCacheReplace", array( $title, $text ) ); @@ -420,7 +437,6 @@ class MessageCache { * Shortcut to update caches. * * @param $cache Array: cached messages with a version. - * @param $cacheKey String: Identifier for the cache. * @param $memc Bool: Wether to update or not memcache. * @param $code String: Language code. * @return False on somekind of error. @@ -454,14 +470,11 @@ class MessageCache { } /** - * Returns success * Represents a write lock on the messages key + * + * @return Boolean: success */ function lock($key) { - if ( !$this->mUseCache ) { - return true; - } - $lockKey = $key . ':lock'; for ($i=0; $i < MSG_WAIT_TIMEOUT && !$this->mMemc->add( $lockKey, 1, MSG_LOCK_TIMEOUT ); $i++ ) { sleep(1); @@ -471,10 +484,6 @@ class MessageCache { } function unlock($key) { - if ( !$this->mUseCache ) { - return; - } - $lockKey = $key . ':lock'; $this->mMemc->delete( $lockKey ); } @@ -482,28 +491,37 @@ class MessageCache { /** * Get a message from either the content language or the user language. * - * @param string $key The message cache key - * @param bool $useDB Get the message from the DB, false to use only the localisation - * @param string $langcode Code of the language to get the message for, if - * it is a valid code create a language for that - * language, if it is a string but not a valid code - * then make a basic language object, if it is a - * false boolean then use the current users - * language (as a fallback for the old parameter - * functionality), or if it is a true boolean then - * use the wikis content language (also as a - * fallback). - * @param bool $isFullKey Specifies whether $key is a two part key "msg/lang". + * @param $key String: the message cache key + * @param $useDB Boolean: get the message from the DB, false to use only + * the localisation + * @param $langcode String: code of the language to get the message for, if + * it is a valid code create a language for that language, + * if it is a string but not a valid code then make a basic + * language object, if it is a false boolean then use the + * current users language (as a fallback for the old + * parameter functionality), or if it is a true boolean + * then use the wikis content language (also as a + * fallback). + * @param $isFullKey Boolean: specifies whether $key is a two part key + * "msg/lang". */ function get( $key, $useDB = true, $langcode = true, $isFullKey = false ) { - global $wgContLanguageCode, $wgContLang; + global $wgLanguageCode, $wgContLang; + + if ( !is_string( $key ) ) { + throw new MWException( "Non-string key given" ); + } if ( strval( $key ) === '' ) { # Shortcut: the empty key is always missing - return '<>'; + return false; } $lang = wfGetLangObj( $langcode ); + if ( !$lang ) { + throw new MWException( "Bad lang code $langcode given" ); + } + $langcode = $lang->getCode(); $message = false; @@ -521,7 +539,7 @@ class MessageCache { # Try the MediaWiki namespace if( !$this->mDisable && $useDB ) { $title = $uckey; - if(!$isFullKey && ( $langcode != $wgContLanguageCode ) ) { + if(!$isFullKey && ( $langcode != $wgLanguageCode ) ) { $title .= '/' . $langcode; } $message = $this->getMsgFromNamespace( $title, $langcode ); @@ -552,13 +570,13 @@ class MessageCache { # Is this a custom message? Try the default language in the db... if( ($message === false || $message === '-' ) && !$this->mDisable && $useDB && - !$isFullKey && ($langcode != $wgContLanguageCode) ) { - $message = $this->getMsgFromNamespace( $uckey, $wgContLanguageCode ); + !$isFullKey && ($langcode != $wgLanguageCode) ) { + $message = $this->getMsgFromNamespace( $uckey, $wgLanguageCode ); } # Final fallback if( $message === false ) { - return '<' . htmlspecialchars($key) . '>'; + return false; } # Fix whitespace @@ -568,6 +586,7 @@ class MessageCache { ' ' => ' ', # Fix for NBSP, converted to space by firefox ' ' => "\xc2\xa0", + ' ' => "\xc2\xa0", ) ); return $message; @@ -584,14 +603,12 @@ class MessageCache { $type = false; $message = false; - if ( $this->mUseCache ) { - $this->load( $code ); - if (isset( $this->mCache[$code][$title] ) ) { - $entry = $this->mCache[$code][$title]; - $type = substr( $entry, 0, 1 ); - if ( $type == ' ' ) { - return substr( $entry, 1 ); - } + $this->load( $code ); + if ( isset( $this->mCache[$code][$title] ) ) { + $entry = $this->mCache[$code][$title]; + $type = substr( $entry, 0, 1 ); + if ( $type == ' ' ) { + return substr( $entry, 1 ); } } @@ -601,31 +618,23 @@ class MessageCache { return $message; } - # If there is no cache entry and no placeholder, it doesn't exist - if ( $type !== '!' ) { - return false; - } - $titleKey = wfMemcKey( 'messages', 'individual', $title ); # Try the individual message cache - if ( $this->mUseCache ) { - $entry = $this->mMemc->get( $titleKey ); - if ( $entry ) { - $type = substr( $entry, 0, 1 ); - - if ( $type === ' ' ) { - # Ok! - $message = substr( $entry, 1 ); - $this->mCache[$code][$title] = $entry; - return $message; - } elseif ( $entry === '!NONEXISTENT' ) { - return false; - } else { - # Corrupt/obsolete entry, delete it - $this->mMemc->delete( $titleKey ); - } - + $entry = $this->mMemc->get( $titleKey ); + if ( $entry ) { + $type = substr( $entry, 0, 1 ); + + if ( $type === ' ' ) { + # Ok! + $message = substr( $entry, 1 ); + $this->mCache[$code][$title] = $entry; + return $message; + } elseif ( $entry === '!NONEXISTENT' ) { + return false; + } else { + # Corrupt/obsolete entry, delete it + $this->mMemc->delete( $titleKey ); } } @@ -633,10 +642,8 @@ class MessageCache { $revision = Revision::newFromTitle( Title::makeTitle( NS_MEDIAWIKI, $title ) ); if( $revision ) { $message = $revision->getText(); - if ($this->mUseCache) { - $this->mCache[$code][$title] = ' ' . $message; - $this->mMemc->set( $titleKey, ' ' . $message, $this->mExpiry ); - } + $this->mCache[$code][$title] = ' ' . $message; + $this->mMemc->set( $titleKey, ' ' . $message, $this->mExpiry ); } else { # Negative caching # Use some special text instead of false, because false gets converted to '' somewhere @@ -670,6 +677,7 @@ class MessageCache { $popts = $this->getParserOptions(); $popts->setInterfaceMessage( $interface ); $popts->setTargetLanguage( $language ); + $popts->setUserLang( $language ); $message = $this->mParser->transformMsg( $message, $popts ); } return $message; @@ -697,24 +705,23 @@ class MessageCache { * Clear all stored messages. Mainly used after a mass rebuild. */ function clear() { - if( $this->mUseCache ) { - $langs = Language::getLanguageNames( false ); - foreach ( array_keys($langs) as $code ) { - # Global cache - $this->mMemc->delete( wfMemcKey( 'messages', $code ) ); - # Invalidate all local caches - $this->mMemc->delete( wfMemcKey( 'messages', $code, 'hash' ) ); - } - } + $langs = Language::getLanguageNames( false ); + foreach ( array_keys($langs) as $code ) { + # Global cache + $this->mMemc->delete( wfMemcKey( 'messages', $code ) ); + # Invalidate all local caches + $this->mMemc->delete( wfMemcKey( 'messages', $code, 'hash' ) ); + } + $this->mLoadedLanguages = array(); } /** * Add a message to the cache * @deprecated Use $wgExtensionMessagesFiles * - * @param mixed $key - * @param mixed $value - * @param string $lang The messages language, English by default + * @param $key Mixed + * @param $value Mixed + * @param $lang String: the messages language, English by default */ function addMessage( $key, $value, $lang = 'en' ) { wfDeprecated( __METHOD__ ); @@ -726,8 +733,8 @@ class MessageCache { * Add an associative array of message to the cache * @deprecated Use $wgExtensionMessagesFiles * - * @param array $messages An associative array of key => values to be added - * @param string $lang The messages language, English by default + * @param $messages Array: an associative array of key => values to be added + * @param $lang String: the messages language, English by default */ function addMessages( $messages, $lang = 'en' ) { wfDeprecated( __METHOD__ ); @@ -739,7 +746,7 @@ class MessageCache { * Add a 2-D array of messages by lang. Useful for extensions. * @deprecated Use $wgExtensionMessagesFiles * - * @param array $messages The array to be added + * @param $messages Array: the array to be added */ function addMessagesByLang( $messages ) { wfDeprecated( __METHOD__ ); @@ -767,15 +774,15 @@ class MessageCache { } public function figureMessage( $key ) { - global $wgContLanguageCode; + global $wgLanguageCode; $pieces = explode( '/', $key ); if( count( $pieces ) < 2 ) - return array( $key, $wgContLanguageCode ); + return array( $key, $wgLanguageCode ); $lang = array_pop( $pieces ); $validCodes = Language::getLanguageNames(); if( !array_key_exists( $lang, $validCodes ) ) - return array( $key, $wgContLanguageCode ); + return array( $key, $wgLanguageCode ); $message = implode( '/', $pieces ); return array( $message, $lang ); diff --git a/includes/Metadata.php b/includes/Metadata.php index 0b4fbf8c..93ce4b27 100644 --- a/includes/Metadata.php +++ b/includes/Metadata.php @@ -1,6 +1,7 @@ . * * This program is free software; you can redistribute it and/or modify @@ -18,6 +19,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * * @author Evan Prodromou + * @file */ abstract class RdfMetaData { @@ -27,7 +29,7 @@ abstract class RdfMetaData { * Constructor * @param $article Article object */ - public function __construct( Article $article ){ + public function __construct( Article $article ) { $this->mArticle = $article; } @@ -61,11 +63,11 @@ abstract class RdfMetaData { } protected function basics() { - global $wgContLanguageCode, $wgSitename; + global $wgLanguageCode, $wgSitename; $this->element( 'title', $this->mArticle->mTitle->getText() ); $this->pageOrString( 'publisher', wfMsg( 'aboutpage' ), $wgSitename ); - $this->element( 'language', $wgContLanguageCode ); + $this->element( 'language', $wgLanguageCode ); $this->element( 'type', 'Text' ); $this->element( 'format', 'text/html' ); $this->element( 'identifier', $this->reallyFullUrl() ); @@ -92,7 +94,7 @@ abstract class RdfMetaData { . substr($timestamp, 6, 2); } - protected function pageOrString( $name, $page, $str ){ + protected function pageOrString( $name, $page, $str ) { if( $page instanceof Title ) $nt = $page; else @@ -105,7 +107,7 @@ abstract class RdfMetaData { } } - protected function page( $name, $title ){ + protected function page( $name, $title ) { $this->url( $name, $title->getFullUrl() ); } @@ -114,15 +116,17 @@ abstract class RdfMetaData { print "\t\t\n"; } - protected function person($name, User $user ){ - global $wgContLang; - + protected function person( $name, User $user ) { if( $user->isAnon() ){ $this->element( $name, wfMsgExt( 'anonymous', array( 'parsemag' ), 1 ) ); - } else if( $real = $user->getRealName() ) { - $this->element( $name, $real ); } else { - $this->pageOrString( $name, $user->getUserPage(), wfMsg( 'siteuser', $user->getName() ) ); + $real = $user->getRealName(); + if( $real ) { + $this->element( $name, $real ); + } else { + $userName = $user->getName(); + $this->pageOrString( $name, $user->getUserPage(), wfMsgExt( 'siteuser', 'parsemag', $userName, $userName ) ); + } } } @@ -315,4 +319,4 @@ PROLOGUE; protected function epilogue() { echo "\n"; } -} \ No newline at end of file +} diff --git a/includes/MimeMagic.php b/includes/MimeMagic.php index 39c82c9d..018f601d 100644 --- a/includes/MimeMagic.php +++ b/includes/MimeMagic.php @@ -1,15 +1,31 @@ ext + * map. Each line contains a mime type followed by a space separated list of + * extensions. If multiple extensions for a single mime type exist or if + * multiple mime types exist for a single extension then in most cases + * MediaWiki assumes that the first extension following the mime type is the + * canonical extension, and the first time a mime type appears for a certain + * extension is considered the canonical mime type. + * + * (Note that appending $wgMimeTypeFile to the end of MM_WELL_KNOWN_MIME_TYPES + * sucks because you can't redefine canonical types. This could be fixed by + * appending MM_WELL_KNOWN_MIME_TYPES behind $wgMimeTypeFile, but who knows + * what will break? In practice this probably isn't a problem anyway -- Bryan) */ define('MM_WELL_KNOWN_MIME_TYPES',<<isRecognizableExtension( $ext ) ) { + wfDebug( __METHOD__. ": refusing to guess mime type for .$ext file, " . + "we should have recognized it\n" ); + } else { + /* Not something we can detect, so simply + * trust the file extension */ + $mime = $this->guessTypesForExtension( $ext ); + } + } + else if ( $mime === "application/x-opc+zip" ) { + if ( $this->isMatchingExtension( $ext, $mime ) ) { + /* A known file extension for an OPC file, + * find the proper mime type for that file extension */ + $mime = $this->guessTypesForExtension( $ext ); + } else { + wfDebug( __METHOD__. ": refusing to guess better type for $mime file, " . + ".$ext is not a known OPC extension.\n" ); + $mime = "application/zip"; + } + } + + if ( isset( $this->mMimeTypeAliases[$mime] ) ) { + $mime = $this->mMimeTypeAliases[$mime]; + } + + wfDebug(__METHOD__.": improved mime type for .$ext: $mime\n"); + return $mime; + } /** mime type detection. This uses detectMimeType to detect the mime type of the file, * but applies additional checks to determine some well known file formats that may be missed - * or misinterpreter by the default mime detection (namely xml based formats like XHTML or SVG). + * or misinterpreter by the default mime detection (namely XML based formats like XHTML or SVG, + * as well as ZIP based formats like OPC/ODF files). * - * @param string $file The file to check - * @param mixed $ext The file extension, or true to extract it from the filename. - * Set it to false to ignore the extension. + * @param $file String: the file to check + * @param $ext Mixed: the file extension, or true (default) to extract it from the filename. + * Set it to false to ignore the extension. DEPRECATED! Set to false, use + * improveTypeFromExtension($mime, $ext) later to improve mime type. * * @return string the mime type of $file */ function guessMimeType( $file, $ext = true ) { + if( $ext ) { # TODO: make $ext default to false. Or better, remove it. + wfDebug( __METHOD__.": WARNING: use of the \$ext parameter is deprecated. " . + "Use improveTypeFromExtension(\$mime, \$ext) instead.\n" ); + } + $mime = $this->doGuessMimeType( $file, $ext ); if( !$mime ) { @@ -427,11 +504,11 @@ class MimeMagic { $mime = $this->mMimeTypeAliases[$mime]; } - wfDebug(__METHOD__.": final mime type of $file: $mime\n"); + wfDebug(__METHOD__.": guessed mime type of $file: $mime\n"); return $mime; } - function doGuessMimeType( $file, $ext = true ) { + private function doGuessMimeType( $file, $ext ) { # TODO: remove $ext param // Read a chunk of the file wfSuppressWarnings(); $f = fopen( $file, "rt" ); @@ -442,6 +519,8 @@ class MimeMagic { $tail = fread( $f, 65558 ); // 65558 = maximum size of a zip EOCDR fclose( $f ); + wfDebug( __METHOD__ . ": analyzing head and tail of $file for magic numbers.\n" ); + // Hardcode a few magic number checks... $headers = array( // Multimedia... @@ -468,6 +547,30 @@ class MimeMagic { } } + /* Look for WebM and Matroska files */ + if( strncmp( $head, pack( "C4", 0x1a, 0x45, 0xdf, 0xa3 ), 4 ) == 0 ) { + $doctype = strpos( $head, "\x42\x82" ); + if( $doctype ) { + // Next byte is datasize, then data (sizes larger than 1 byte are very stupid muxers) + $data = substr($head, $doctype+3, 8); + if( strncmp( $data, "matroska", 8 ) == 0 ) { + wfDebug( __METHOD__ . ": recognized file as video/x-matroska\n" ); + return "video/x-matroska"; + } else if ( strncmp( $data, "webm", 4 ) == 0 ) { + wfDebug( __METHOD__ . ": recognized file as video/webm\n" ); + return "video/webm"; + } + } + wfDebug( __METHOD__ . ": unknown EBML file\n" ); + return "unknown/unknown"; + } + + /* Look for WebP */ + if( strncmp( $head, "RIFF", 4 ) == 0 && strncmp( substr( $head, 8, 8), "WEBPVP8 ", 8 ) == 0 ) { + wfDebug( __METHOD__ . ": recognized file as image/webp\n" ); + return "image/webp"; + } + /* * Look for PHP. Check for this before HTML/XML... Warning: this is a * heuristic, and won't match a file with a lot of non-PHP before. It @@ -545,10 +648,10 @@ class MimeMagic { } } - // Check for ZIP (before getimagesize) + // Check for ZIP variants (before getimagesize) if ( strpos( $tail, "PK\x05\x06" ) !== false ) { - wfDebug( __METHOD__.": ZIP header present at end of $file\n" ); - return $this->detectZipType( $head ); + wfDebug( __METHOD__.": ZIP header present in $file\n" ); + return $this->detectZipType( $head, $tail, $ext ); } wfSuppressWarnings(); @@ -573,13 +676,24 @@ class MimeMagic { /** * Detect application-specific file type of a given ZIP file from its - * header data. Currently works for OpenDocument types... + * header data. Currently works for OpenDocument and OpenXML types... * If can't tell, returns 'application/zip'. * - * @param string $header Some reasonably-sized chunk of file header + * @param $header String: some reasonably-sized chunk of file header + * @param $tail String: the tail of the file + * @param $ext Mixed: the file extension, or true to extract it from the filename. + * Set it to false (default) to ignore the extension. DEPRECATED! Set to false, + * use improveTypeFromExtension($mime, $ext) later to improve mime type. + * * @return string */ - function detectZipType( $header ) { + function detectZipType( $header, $tail = null, $ext = false ) { + if( $ext ) { # TODO: remove $ext param + wfDebug( __METHOD__.": WARNING: use of the \$ext parameter is deprecated. " . + "Use improveTypeFromExtension(\$mime, \$ext) instead.\n" ); + } + + $mime = 'application/zip'; $opendocTypes = array( 'chart-template', 'chart', @@ -601,16 +715,62 @@ class MimeMagic { // http://lists.oasis-open.org/archives/office/200505/msg00006.html $types = '(?:' . implode( '|', $opendocTypes ) . ')'; $opendocRegex = "/^mimetype(application\/vnd\.oasis\.opendocument\.$types)/"; - wfDebug( __METHOD__.": $opendocRegex\n" ); - + + $openxmlRegex = "/^\[Content_Types\].xml/"; + if( preg_match( $opendocRegex, substr( $header, 30 ), $matches ) ) { $mime = $matches[1]; wfDebug( __METHOD__.": detected $mime from ZIP archive\n" ); - return $mime; + } elseif( preg_match( $openxmlRegex, substr( $header, 30 ) ) ) { + $mime = "application/x-opc+zip"; + # TODO: remove the block below, as soon as improveTypeFromExtension is used everywhere + if( $ext !== true && $ext !== false ) { + /** This is the mode used by getPropsFromPath + * These mime's are stored in the database, where we don't really want + * x-opc+zip, because we use it only for internal purposes + */ + if( $this->isMatchingExtension( $ext, $mime) ) { + /* A known file extension for an OPC file, + * find the proper mime type for that file extension */ + $mime = $this->guessTypesForExtension( $ext ); + } else { + $mime = "application/zip"; + } + } + wfDebug( __METHOD__.": detected an Open Packaging Conventions archive: $mime\n" ); + } else if( substr( $header, 0, 8 ) == "\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1" && + ($headerpos = strpos( $tail, "PK\x03\x04" ) ) !== false && + preg_match( $openxmlRegex, substr( $tail, $headerpos + 30 ) ) ) { + if( substr( $header, 512, 4) == "\xEC\xA5\xC1\x00" ) { + $mime = "application/msword"; + } + switch( substr( $header, 512, 6) ) { + case "\xEC\xA5\xC1\x00\x0E\x00": + case "\xEC\xA5\xC1\x00\x1C\x00": + case "\xEC\xA5\xC1\x00\x43\x00": + $mime = "application/vnd.ms-powerpoint"; + break; + case "\xFD\xFF\xFF\xFF\x10\x00": + case "\xFD\xFF\xFF\xFF\x1F\x00": + case "\xFD\xFF\xFF\xFF\x22\x00": + case "\xFD\xFF\xFF\xFF\x23\x00": + case "\xFD\xFF\xFF\xFF\x28\x00": + case "\xFD\xFF\xFF\xFF\x29\x00": + case "\xFD\xFF\xFF\xFF\x10\x02": + case "\xFD\xFF\xFF\xFF\x1F\x02": + case "\xFD\xFF\xFF\xFF\x22\x02": + case "\xFD\xFF\xFF\xFF\x23\x02": + case "\xFD\xFF\xFF\xFF\x28\x02": + case "\xFD\xFF\xFF\xFF\x29\x02": + $mime = "application/vnd.msexcel"; + break; + } + + wfDebug( __METHOD__.": detected a MS Office document with OPC trailer\n"); } else { wfDebug( __METHOD__.": unable to identify type of ZIP archive\n" ); - return 'application/zip'; } + return $mime; } /** Internal mime type detection, please use guessMimeType() for application code instead. @@ -621,16 +781,21 @@ class MimeMagic { * If the mime type is still unknown, getimagesize is used to detect the mime type if the file is an image. * If no mime type can be determined, this function returns "unknown/unknown". * - * @param string $file The file to check - * @param mixed $ext The file extension, or true to extract it from the filename. - * Set it to false to ignore the extension. + * @param $file String: the file to check + * @param $ext Mixed: the file extension, or true (default) to extract it from the filename. + * Set it to false to ignore the extension. DEPRECATED! Set to false, use + * improveTypeFromExtension($mime, $ext) later to improve mime type. * * @return string the mime type of $file * @access private */ - function detectMimeType( $file, $ext = true ) { + private function detectMimeType( $file, $ext = true ) { global $wgMimeDetectorCommand; + if( $ext ) { # TODO: make $ext default to false. Or better, remove it. + wfDebug( __METHOD__.": WARNING: use of the \$ext parameter is deprecated. Use improveTypeFromExtension(\$mime, \$ext) instead.\n" ); + } + $m = null; if ( $wgMimeDetectorCommand ) { $fn = wfEscapeShellArg( $file ); @@ -717,9 +882,9 @@ class MimeMagic { * @todo analyse file if need be * @todo look at multiple extension, separately and together. * - * @param string $path full path to the image file, in case we have to look at the contents + * @param $path String: full path to the image file, in case we have to look at the contents * (if null, only the mime type is used to determine the media type code). - * @param string $mime mime type. If null it will be guessed using guessMimeType. + * @param $mime String: mime type. If null it will be guessed using guessMimeType. * * @return (int?string?) a value to be used with the MEDIATYPE_xxx constants. */ @@ -756,7 +921,6 @@ class MimeMagic { } # Check for entry for file extension - $e = null; if ( $path ) { $i = strrpos( $path, '.' ); $e = strtolower( $i ? substr( $path, $i + 1 ) : '' ); @@ -819,9 +983,9 @@ class MimeMagic { * Get the MIME types that various versions of Internet Explorer would * detect from a chunk of the content. * - * @param string $fileName The file name (unused at present) - * @param string $chunk The first 256 bytes of the file - * @param string $proposed The MIME type proposed by the server + * @param $fileName String: the file name (unused at present) + * @param $chunk String: the first 256 bytes of the file + * @param $proposed String: the MIME type proposed by the server */ public function getIEMimeTypes( $fileName, $chunk, $proposed ) { $ca = $this->getIEContentAnalyzer(); diff --git a/includes/Namespace.php b/includes/Namespace.php index e8e7523f..47dc3c5f 100644 --- a/includes/Namespace.php +++ b/includes/Namespace.php @@ -28,7 +28,8 @@ $wgCanonicalNamespaceNames = array( NS_CATEGORY_TALK => 'Category_talk', ); -if( isset( $wgExtraNamespaces ) && is_array( $wgExtraNamespaces ) ) { +/// @todo UGLY UGLY +if( is_array( $wgExtraNamespaces ) ) { $wgCanonicalNamespaceNames = $wgCanonicalNamespaceNames + $wgExtraNamespaces; } @@ -112,21 +113,40 @@ class MWNamespace { * Returns whether the specified namespace exists */ public static function exists( $index ) { - global $wgCanonicalNamespaceNames; - return isset( $wgCanonicalNamespaceNames[$index] ); + $nslist = self::getCanonicalNamespaces(); + return isset( $nslist[$index] ); } + /** + * Returns array of all defined namespaces with their canonical + * (English) names. + * + * @return \array + * @since 1.17 + */ + public static function getCanonicalNamespaces() { + static $namespaces = null; + if ( $namespaces === null ) { + global $wgExtraNamespaces, $wgCanonicalNamespaceNames; + $namespaces = array( NS_MAIN => '' ) + $wgCanonicalNamespaceNames; + if ( is_array( $wgExtraNamespaces ) ) { + $namespaces += $wgExtraNamespaces; + } + wfRunHooks( 'CanonicalNamespaces', array( &$namespaces ) ); + } + return $namespaces; + } /** - * Returns the canonical (English Wikipedia) name for a given index + * Returns the canonical (English) name for a given index * * @param $index Int: namespace index * @return string or false if no canonical definition. */ public static function getCanonicalName( $index ) { - global $wgCanonicalNamespaceNames; - if( isset( $wgCanonicalNamespaceNames[$index] ) ) { - return $wgCanonicalNamespaceNames[$index]; + $nslist = self::getCanonicalNamespaces(); + if( isset( $nslist[$index] ) ) { + return $nslist[$index]; } else { return false; } @@ -140,11 +160,10 @@ class MWNamespace { * @return int */ public static function getCanonicalIndex( $name ) { - global $wgCanonicalNamespaceNames; static $xNamespaces = false; if ( $xNamespaces === false ) { $xNamespaces = array(); - foreach ( $wgCanonicalNamespaceNames as $i => $text ) { + foreach ( self::getCanonicalNamespaces() as $i => $text ) { $xNamespaces[strtolower($text)] = $i; } } @@ -155,6 +174,25 @@ class MWNamespace { } } + /** + * Returns an array of the namespaces (by integer id) that exist on the + * wiki. Used primarily by the api in help documentation. + * @return array + */ + public static function getValidNamespaces() { + static $mValidNamespaces = null; + + if ( is_null( $mValidNamespaces ) ) { + foreach ( array_keys( self::getCanonicalNamespaces() ) as $ns ) { + if ( $ns >= 0 ) { + $mValidNamespaces[] = $ns; + } + } + } + + return $mValidNamespaces; + } + /** * Can this namespace ever have a talk namespace? * diff --git a/includes/NamespaceCompat.php b/includes/NamespaceCompat.php deleted file mode 100644 index 15c76478..00000000 --- a/includes/NamespaceCompat.php +++ /dev/null @@ -1,9 +0,0 @@ - array('list-contains=gzip'), - 'Cookie' => null ); - + private $mVaryHeader = array( + 'Accept-Encoding' => array( 'list-contains=gzip' ), + 'Cookie' => null + ); /** * Constructor @@ -99,7 +111,6 @@ class OutputPage { $this->mStatusCode = $statusCode; } - /** * Add a new tag * To add an http-equiv meta tag, precede the name with "http:" @@ -148,7 +159,6 @@ class OutputPage { $haveMeta = true; } - /** * Add raw HTML to the list of scripts (including \ tag, etc.) * @@ -184,15 +194,19 @@ class OutputPage { * * @param $file String: filename in skins/common or complete on-server path * (/foo/bar.js) + * @param $version String: style version of the file. Defaults to $wgStyleVersion */ - public function addScriptFile( $file ) { + public function addScriptFile( $file, $version = null ) { global $wgStylePath, $wgStyleVersion; - if( substr( $file, 0, 1 ) == '/' || substr( $file, 0, 7 ) == 'http://' ) { + // 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 = "{$wgStylePath}/common/{$file}"; + $path = "{$wgStylePath}/common/{$file}"; } - $this->addScript( Html::linkedScript( wfAppendQuery( $path, $wgStyleVersion ) ) ); + if ( is_null( $version ) ) + $version = $wgStyleVersion; + $this->addScript( Html::linkedScript( wfAppendQuery( $path, $version ) ) ); } /** @@ -213,6 +227,85 @@ class OutputPage { return $this->mScripts . $this->getHeadItems(); } + /** + * Get the list of modules to include on this page + * + * @return Array of module names + */ + public function getModules() { + return array_values( array_unique( $this->mModules ) ); + } + + /** + * Add one or more modules recognized by the resource loader. Modules added + * through this function will be loaded by the resource loader when the + * page loads. + * + * @param $modules Mixed: module name (string) or array of module names + */ + public function addModules( $modules ) { + $this->mModules = array_merge( $this->mModules, (array)$modules ); + } + + /** + * Get the list of module JS to include on this page + * @return array of module names + */ + public function getModuleScripts() { + return array_values( array_unique( $this->mModuleScripts ) ); + } + + /** + * Add only JS of one or more modules recognized by the resource loader. Module + * scripts added through this function will be loaded by the resource loader when + * the page loads. + * + * @param $modules Mixed: module name (string) or array of module names + */ + public function addModuleScripts( $modules ) { + $this->mModuleScripts = array_merge( $this->mModuleScripts, (array)$modules ); + } + + /** + * Get the list of module CSS to include on this page + * + * @return Array of module names + */ + public function getModuleStyles() { + return array_values( array_unique( $this->mModuleStyles ) ); + } + + /** + * Add only CSS of one or more modules recognized by the resource loader. Module + * styles added through this function will be loaded by the resource loader when + * the page loads. + * + * @param $modules Mixed: module name (string) or array of module names + */ + public function addModuleStyles( $modules ) { + $this->mModuleStyles = array_merge( $this->mModuleStyles, (array)$modules ); + } + + /** + * Get the list of module messages to include on this page + * + * @return Array of module names + */ + public function getModuleMessages() { + return array_values( array_unique( $this->mModuleMessages ) ); + } + + /** + * Add only messages of one or more modules recognized by the resource loader. + * Module messages added through this function will be loaded by the resource + * loader when the page loads. + * + * @param $modules Mixed: module name (string) or array of module names + */ + public function addModuleMessages( $modules ) { + $this->mModuleMessages = array_merge( $this->mModuleMessages, (array)$modules ); + } + /** * Get all header items in a string * @@ -275,7 +368,6 @@ class OutputPage { return $this->mArticleBodyOnly; } - /** * checkLastModified tells the client to use the client-cached page if * possible. If sucessful, the OutputPage is disabled so that @@ -352,7 +444,7 @@ class OutputPage { # Not modified # Give a 304 response code and disable body output wfDebug( __METHOD__ . ": NOT MODIFIED, $info\n", false ); - ini_set('zlib.output_compression', 0); + ini_set( 'zlib.output_compression', 0 ); $wgRequest->response()->header( "HTTP/1.1 304 Not Modified" ); $this->sendCacheControl(); $this->disable(); @@ -365,6 +457,15 @@ class OutputPage { return true; } + /** + * Override the last modified timestamp + * + * @param $timestamp String: new timestamp, in a format readable by + * wfTimestamp() + */ + public function setLastModified( $timestamp ) { + $this->mLastModified = wfTimestamp( TS_RFC2822, $timestamp ); + } /** * Set the robot policy for the page: @@ -377,10 +478,10 @@ class OutputPage { public function setRobotPolicy( $policy ) { $policy = Article::formatRobotPolicy( $policy ); - if( isset( $policy['index'] ) ){ + if( isset( $policy['index'] ) ) { $this->setIndexPolicy( $policy['index'] ); } - if( isset( $policy['follow'] ) ){ + if( isset( $policy['follow'] ) ) { $this->setFollowPolicy( $policy['follow'] ); } } @@ -413,7 +514,6 @@ class OutputPage { } } - /** * Set the new value of the "action text", this will be added to the * "HTML title", separated from it with " - ". @@ -438,17 +538,9 @@ class OutputPage { /** * "HTML title" means the contents of . * It is stored as plain, unescaped text and will be run through htmlspecialchars in the skin file. - * If $name is from page title, it can only override names which are also from page title, - * but if it is not from page title, it can override all other names. */ - public function setHTMLTitle( $name, $frompagetitle = false ) { - if ( $frompagetitle && $this->mHTMLtitleFromPagetitle ) { - $this->mHTMLtitle = $name; - } - elseif ( $this->mHTMLtitleFromPagetitle ) { - $this->mHTMLtitle = $name; - $this->mHTMLtitleFromPagetitle = false; - } + public function setHTMLTitle( $name ) { + $this->mHTMLtitle = $name; } /** @@ -472,11 +564,6 @@ class OutputPage { $nameWithTags = Sanitizer::normalizeCharReferences( Sanitizer::removeHTMLtags( $name ) ); $this->mPagetitle = $nameWithTags; - $taction = $this->getPageTitleActionText(); - if( !empty( $taction ) ) { - $name .= ' - '.$taction; - } - # change "<i>foo&bar</i>" to "foo&bar" $this->setHTMLTitle( wfMsg( 'pagetitle', Sanitizer::stripAllTags( $nameWithTags ) ) ); } @@ -508,7 +595,7 @@ class OutputPage { if ( $this->mTitle instanceof Title ) { return $this->mTitle; } else { - wfDebug( __METHOD__ . ' called and $mTitle is null. Return $wgTitle for sanity' ); + wfDebug( __METHOD__ . " called and \$mTitle is null. Return \$wgTitle for sanity\n" ); global $wgTitle; return $wgTitle; } @@ -541,7 +628,6 @@ class OutputPage { return $this->mSubtitle; } - /** * Set the page as printable, i.e. it'll be displayed with with all * print styles included @@ -559,7 +645,6 @@ class OutputPage { return $this->mPrintable; } - /** * Disable output completely, i.e. calling output() will have no effect */ @@ -576,7 +661,6 @@ class OutputPage { return $this->mDoNothing; } - /** * Show an "add new section" link? * @@ -595,7 +679,6 @@ class OutputPage { return $this->mHideNewSectionLink; } - /** * Add or remove feed links in the page header * This is mainly kept for backward compatibility, see OutputPage::addFeedLink() @@ -642,7 +725,11 @@ class OutputPage { * @param $href String: URL */ public function addFeedLink( $format, $href ) { - $this->mFeedLinks[$format] = $href; + global $wgAdvertisedFeedTypes; + + if ( in_array( $format, $wgAdvertisedFeedTypes ) ) { + $this->mFeedLinks[$format] = $href; + } } /** @@ -716,7 +803,6 @@ class OutputPage { return $this->mIsArticleRelated; } - /** * Add new language links * @@ -746,7 +832,6 @@ class OutputPage { return $this->mLanguageLinks; } - /** * Add an array of categories, with names in the keys * @@ -769,7 +854,7 @@ class OutputPage { $pageTable = $dbr->tableName( 'page' ); $where = $lb->constructSet( 'page', $dbr ); $propsTable = $dbr->tableName( 'page_props' ); - $sql = "SELECT page_id, page_namespace, page_title, page_len, page_is_redirect, pp_value + $sql = "SELECT page_id, page_namespace, page_title, page_len, page_is_redirect, page_latest, pp_value FROM $pageTable LEFT JOIN $propsTable ON pp_propname='hiddencat' AND pp_page=page_id WHERE $where"; $res = $dbr->query( $sql, __METHOD__ ); @@ -777,8 +862,10 @@ class OutputPage { $lb->addResultToCache( LinkCache::singleton(), $res ); # Set all the values to 'normal'. This can be done with array_fill_keys in PHP 5.2.0+ - $categories = array_combine( array_keys( $categories ), - array_fill( 0, count( $categories ), 'normal' ) ); + $categories = array_combine( + array_keys( $categories ), + array_fill( 0, count( $categories ), 'normal' ) + ); # Mark hidden categories foreach ( $res as $row ) { @@ -794,9 +881,11 @@ class OutputPage { $origcategory = $category; $title = Title::makeTitleSafe( NS_CATEGORY, $category ); $wgContLang->findVariantLink( $category, $title, true ); - if ( $category != $origcategory ) - if ( array_key_exists( $category, $categories ) ) + if ( $category != $origcategory ) { + if ( array_key_exists( $category, $categories ) ) { continue; + } + } $text = $wgContLang->convertHtml( $title->getText() ); $this->mCategories[] = $title->getText(); $this->mCategoryLinks[$type][] = $sk->link( $title, $text ); @@ -835,7 +924,6 @@ class OutputPage { return $this->mCategories; } - /** * Suppress the quickbar from the output, only for skin supporting * the quickbar @@ -853,7 +941,6 @@ class OutputPage { return $this->mSuppressQuickbar; } - /** * Remove user JavaScript from scripts to load */ @@ -870,7 +957,6 @@ class OutputPage { return $this->mAllowUserJs; } - /** * Prepend $text to the body HTML * @@ -905,7 +991,6 @@ class OutputPage { return $this->mBodytext; } - /** * Add $text to the debug output * @@ -915,7 +1000,6 @@ class OutputPage { $this->mDebugtext .= $text; } - /** * @deprecated use parserOptions() instead */ @@ -983,7 +1067,7 @@ class OutputPage { } /** - * Add wikitext with a custom Title object and + * Add wikitext with a custom Title object and * * @param $text String: wikitext * @param $title Title object @@ -1001,7 +1085,7 @@ class OutputPage { */ public function addWikiTextTidy( $text, $linestart = true ) { $title = $this->getTitle(); - $this->addWikiTextTitleTidy($text, $title, $linestart); + $this->addWikiTextTitleTidy( $text, $title, $linestart ); } /** @@ -1022,8 +1106,10 @@ class OutputPage { $popts = $this->parserOptions(); $oldTidy = $popts->setTidy( $tidy ); - $parserOutput = $wgParser->parse( $text, $title, $popts, - $linestart, true, $this->mRevisionId ); + $parserOutput = $wgParser->parse( + $text, $title, $popts, + $linestart, true, $this->mRevisionId + ); $popts->setTidy( $oldTidy ); @@ -1047,13 +1133,15 @@ class OutputPage { wfDeprecated( __METHOD__ ); $popts = $this->parserOptions(); - $popts->setTidy(true); - $parserOutput = $wgParser->parse( $text, $article->mTitle, - $popts, true, true, $this->mRevisionId ); - $popts->setTidy(false); - if ( $cache && $article && $parserOutput->getCacheTime() != -1 ) { + $popts->setTidy( true ); + $parserOutput = $wgParser->parse( + $text, $article->mTitle, + $popts, true, true, $this->mRevisionId + ); + $popts->setTidy( false ); + if ( $cache && $article && $parserOutput->isCacheable() ) { $parserCache = ParserCache::singleton(); - $parserCache->save( $parserOutput, $article, $popts); + $parserCache->save( $parserOutput, $article, $popts ); } $this->addParserOutput( $parserOutput ); @@ -1064,29 +1152,27 @@ class OutputPage { */ public function addSecondaryWikiText( $text, $linestart = true ) { wfDeprecated( __METHOD__ ); - $this->addWikiTextTitleTidy($text, $this->getTitle(), $linestart); + $this->addWikiTextTitleTidy( $text, $this->getTitle(), $linestart ); } - /** * Add a ParserOutput object, but without Html * * @param $parserOutput ParserOutput object */ public function addParserOutputNoText( &$parserOutput ) { - global $wgExemptFromUserRobotsControl, $wgContentNamespaces; - $this->mLanguageLinks += $parserOutput->getLanguageLinks(); $this->addCategoryLinks( $parserOutput->getCategories() ); $this->mNewSectionLink = $parserOutput->getNewSection(); $this->mHideNewSectionLink = $parserOutput->getHideNewSection(); $this->mParseWarnings = $parserOutput->getWarnings(); - if ( $parserOutput->getCacheTime() == -1 ) { + if ( !$parserOutput->isCacheable() ) { $this->enableClientCache( false ); } $this->mNoGallery = $parserOutput->getNoGallery(); $this->mHeadItems = array_merge( $this->mHeadItems, $parserOutput->getHeadItems() ); + $this->addModules( $parserOutput->getModules() ); // Versioning... foreach ( (array)$parserOutput->mTemplateIds as $ns => $dbks ) { if ( isset( $this->mTemplateIds[$ns] ) ) { @@ -1095,11 +1181,6 @@ class OutputPage { $this->mTemplateIds[$ns] = $dbks; } } - // Page title - $title = $parserOutput->getTitleText(); - if ( $title != '' ) { - $this->setPageTitle( $title ); - } // Hooks registered in the object global $wgParserOutputHooks; @@ -1121,7 +1202,7 @@ class OutputPage { function addParserOutput( &$parserOutput ) { $this->addParserOutputNoText( $parserOutput ); $text = $parserOutput->getText(); - wfRunHooks( 'OutputPageBeforeHTML',array( &$this, &$text ) ); + wfRunHooks( 'OutputPageBeforeHTML', array( &$this, &$text ) ); $this->addHTML( $text ); } @@ -1154,10 +1235,16 @@ class OutputPage { throw new MWException( 'Empty $mTitle in ' . __METHOD__ ); } $popts = $this->parserOptions(); - if ( $interface) { $popts->setInterfaceMessage(true); } - $parserOutput = $wgParser->parse( $text, $this->getTitle(), $popts, - $linestart, true, $this->mRevisionId ); - if ( $interface) { $popts->setInterfaceMessage(false); } + if ( $interface ) { + $popts->setInterfaceMessage( true ); + } + $parserOutput = $wgParser->parse( + $text, $this->getTitle(), $popts, + $linestart, true, $this->mRevisionId + ); + if ( $interface ) { + $popts->setInterfaceMessage( false ); + } return $parserOutput->getText(); } @@ -1192,7 +1279,7 @@ class OutputPage { wfDeprecated( __METHOD__ ); $parserOutput = ParserCache::singleton()->get( $article, $article->getParserOptions() ); - if ($parserOutput !== false) { + if ( $parserOutput !== false ) { $this->addParserOutput( $parserOutput ); return true; } else { @@ -1235,21 +1322,21 @@ class OutputPage { ), $wgCacheVaryCookies ); - wfRunHooks('GetCacheVaryCookies', array( $this, &$cookies ) ); + wfRunHooks( 'GetCacheVaryCookies', array( $this, &$cookies ) ); } return $cookies; } /** * Return whether this page is not cacheable because "useskin" or "uselang" - * url parameters were passed + * URL parameters were passed. * * @return Boolean */ function uncacheableBecauseRequestVars() { global $wgRequest; - return $wgRequest->getText('useskin', false) === false - && $wgRequest->getText('uselang', false) === false; + return $wgRequest->getText( 'useskin', false ) === false + && $wgRequest->getText( 'uselang', false ) === false; } /** @@ -1268,11 +1355,11 @@ class OutputPage { foreach ( $cvCookies as $cookieName ) { # Check for a simple string match, like the way squid does it if ( strpos( $cookieHeader, $cookieName ) !== false ) { - wfDebug( __METHOD__.": found $cookieName\n" ); + wfDebug( __METHOD__ . ": found $cookieName\n" ); return true; } } - wfDebug( __METHOD__.": no cache-varying cookies found\n" ); + wfDebug( __METHOD__ . ": no cache-varying cookies found\n" ); return false; } @@ -1281,16 +1368,16 @@ class OutputPage { * * @param $header String: header name * @param $option either an Array or null + * @fixme Document the $option parameter; it appears to be for + * X-Vary-Options but what format is acceptable? */ public function addVaryHeader( $header, $option = null ) { if ( !array_key_exists( $header, $this->mVaryHeader ) ) { - $this->mVaryHeader[$header] = $option; - } - elseif( is_array( $option ) ) { + $this->mVaryHeader[$header] = (array)$option; + } elseif( is_array( $option ) ) { if( is_array( $this->mVaryHeader[$header] ) ) { $this->mVaryHeader[$header] = array_merge( $this->mVaryHeader[$header], $option ); - } - else { + } else { $this->mVaryHeader[$header] = $option; } } @@ -1304,22 +1391,23 @@ class OutputPage { */ public function getXVO() { $cvCookies = $this->getCacheVaryCookies(); - + $cookiesOption = array(); foreach ( $cvCookies as $cookieName ) { $cookiesOption[] = 'string-contains=' . $cookieName; } $this->addVaryHeader( 'Cookie', $cookiesOption ); - + $headers = array(); foreach( $this->mVaryHeader as $header => $option ) { $newheader = $header; - if( is_array( $option ) ) + if( is_array( $option ) ) { $newheader .= ';' . implode( ';', $option ); + } $headers[] = $newheader; } $xvo = 'X-Vary-Options: ' . implode( ',', $headers ); - + return $xvo; } @@ -1330,19 +1418,28 @@ class OutputPage { * For example: * /w/index.php?title=Main_page should always be served; but * /w/index.php?title=Main_page&variant=zh-cn should never be served. - * - * patched by Liangent and Philip */ function addAcceptLanguage() { global $wgRequest, $wgContLang; - if( !$wgRequest->getCheck('variant') && $wgContLang->hasVariants() ) { + if( !$wgRequest->getCheck( 'variant' ) && $wgContLang->hasVariants() ) { $variants = $wgContLang->getVariants(); $aloption = array(); foreach ( $variants as $variant ) { - if( $variant === $wgContLang->getCode() ) + if( $variant === $wgContLang->getCode() ) { continue; - else - $aloption[] = "string-contains=$variant"; + } else { + $aloption[] = 'string-contains=' . $variant; + + // IE and some other browsers use another form of language code + // in their Accept-Language header, like "zh-CN" or "zh-TW". + // We should handle these too. + $ievariant = explode( '-', $variant ); + if ( count( $ievariant ) == 2 ) { + $ievariant[1] = strtoupper( $ievariant[1] ); + $ievariant = implode( '-', $ievariant ); + $aloption[] = 'string-contains=' . $ievariant; + } + } } $this->addVaryHeader( 'Accept-Language', $aloption ); } @@ -1390,8 +1487,9 @@ class OutputPage { global $wgUseSquid, $wgUseESI, $wgUseETag, $wgSquidMaxage, $wgRequest, $wgUseXVO; $response = $wgRequest->response(); - if ($wgUseETag && $this->mETag) - $response->header("ETag: $this->mETag"); + if ( $wgUseETag && $this->mETag ) { + $response->header( "ETag: $this->mETag" ); + } $this->addAcceptLanguage(); @@ -1405,8 +1503,10 @@ class OutputPage { } if( !$this->uncacheableBecauseRequestVars() && $this->mEnableClientCache ) { - if( $wgUseSquid && session_id() == '' && - ! $this->isPrintable() && $this->mSquidMaxage != 0 && !$this->haveCacheVaryCookies() ) + if( + $wgUseSquid && session_id() == '' && !$this->isPrintable() && + $this->mSquidMaxage != 0 && !$this->haveCacheVaryCookies() + ) { if ( $wgUseESI ) { # We'll purge the proxy cache explicitly, but require end user agents @@ -1513,12 +1613,12 @@ class OutputPage { */ public function output() { global $wgUser, $wgOutputEncoding, $wgRequest; - global $wgContLanguageCode, $wgDebugRedirects, $wgMimeType; + global $wgLanguageCode, $wgDebugRedirects, $wgMimeType; global $wgUseAjax, $wgAjaxWatch; global $wgEnableMWSuggest, $wgUniversalEditButton; global $wgArticle; - if( $this->mDoNothing ){ + if( $this->mDoNothing ) { return; } wfProfileIn( __METHOD__ ); @@ -1547,35 +1647,44 @@ class OutputPage { return; } elseif ( $this->mStatusCode ) { $message = self::getStatusMessage( $this->mStatusCode ); - if ( $message ) + if ( $message ) { $wgRequest->response()->header( 'HTTP/1.1 ' . $this->mStatusCode . ' ' . $message ); + } } $sk = $wgUser->getSkin(); + // Add base resources + $this->addModules( 'mediawiki.util' ); + global $wgIncludeLegacyJavaScript; + if( $wgIncludeLegacyJavaScript ){ + $this->addModules( 'mediawiki.legacy.wikibits' ); + } + + // Add various resources if required if ( $wgUseAjax ) { - $this->addScriptFile( 'ajax.js' ); + $this->addModules( 'mediawiki.legacy.ajax' ); wfRunHooks( 'AjaxAddScript', array( &$this ) ); if( $wgAjaxWatch && $wgUser->isLoggedIn() ) { - $this->addScriptFile( 'ajaxwatch.js' ); + $this->addModules( 'mediawiki.legacy.ajaxwatch' ); } - if ( $wgEnableMWSuggest && !$wgUser->getOption( 'disablesuggest', false ) ){ - $this->addScriptFile( 'mwsuggest.js' ); + if ( $wgEnableMWSuggest && !$wgUser->getOption( 'disablesuggest', false ) ) { + $this->addModules( 'mediawiki.legacy.mwsuggest' ); } } if( $wgUser->getBoolOption( 'editsectiononrightclick' ) ) { - $this->addScriptFile( 'rightclickedit.js' ); + $this->addModules( 'mediawiki.action.view.rightClickEdit' ); } if( $wgUniversalEditButton ) { if( isset( $wgArticle ) && $this->getTitle() && $this->getTitle()->quickUserCan( 'edit' ) && ( $this->getTitle()->exists() || $this->getTitle()->quickUserCan( 'create' ) ) ) { // Original UniversalEditButton - $msg = wfMsg('edit'); + $msg = wfMsg( 'edit' ); $this->addLink( array( 'rel' => 'alternate', 'type' => 'application/x-wiki', @@ -1591,11 +1700,12 @@ class OutputPage { } } + # Buffer output; final headers may depend on later processing ob_start(); $wgRequest->response()->header( "Content-type: $wgMimeType; charset={$wgOutputEncoding}" ); - $wgRequest->response()->header( 'Content-language: '.$wgContLanguageCode ); + $wgRequest->response()->header( 'Content-language: ' . $wgLanguageCode ); // Prevent framing, if requested $frameOptions = $this->getFrameOptions(); @@ -1603,9 +1713,8 @@ class OutputPage { $wgRequest->response()->header( "X-Frame-Options: $frameOptions" ); } - - if ($this->mArticleBodyOnly) { - $this->out($this->mBodytext); + if ( $this->mArticleBodyOnly ) { + $this->out( $this->mBodytext ); } else { // Hook that allows last minute changes to the output page, e.g. // adding of CSS or Javascript by extensions. @@ -1633,7 +1742,9 @@ class OutputPage { $outs = $ins; } else { $outs = $wgContLang->iconv( $wgInputEncoding, $wgOutputEncoding, $ins ); - if ( false === $outs ) { $outs = $ins; } + if ( false === $outs ) { + $outs = $ins; + } } print $outs; } @@ -1643,7 +1754,6 @@ class OutputPage { */ public static function setEncodings() { global $wgInputEncoding, $wgOutputEncoding; - global $wgContLang; $wgInputEncoding = strtolower( $wgInputEncoding ); @@ -1683,7 +1793,9 @@ class OutputPage { if( $reason == '' ) { $reason = wfMsg( 'blockednoreason' ); } - $blockTimestamp = $wgLang->timeanddate( wfTimestamp( TS_MW, $wgUser->mBlock->mTimestamp ), true ); + $blockTimestamp = $wgLang->timeanddate( + wfTimestamp( TS_MW, $wgUser->mBlock->mTimestamp ), true + ); $ip = wfGetIP(); $link = '[[' . $wgContLang->getNsText( NS_USER ) . ":{$name}|{$name}]]"; @@ -1696,16 +1808,20 @@ class OutputPage { // Search for localization in 'ipboptions' $scBlockExpiryOptions = wfMsg( 'ipboptions' ); foreach ( explode( ',', $scBlockExpiryOptions ) as $option ) { - if ( strpos( $option, ":" ) === false ) + if ( strpos( $option, ':' ) === false ) { continue; - list( $show, $value ) = explode( ":", $option ); + } + list( $show, $value ) = explode( ':', $option ); if ( $value == 'infinite' || $value == 'indefinite' ) { $blockExpiry = $show; break; } } } else { - $blockExpiry = $wgLang->timeanddate( wfTimestamp( TS_MW, $blockExpiry ), true ); + $blockExpiry = $wgLang->timeanddate( + wfTimestamp( TS_MW, $blockExpiry ), + true + ); } if ( $wgUser->mBlock->mAuto ) { @@ -1715,10 +1831,13 @@ class OutputPage { } /* $ip returns who *is* being blocked, $intended contains who was meant to be blocked. - * This could be a username, an ip range, or a single ip. */ + * This could be a username, an IP range, or a single IP. */ $intended = $wgUser->mBlock->mAddress; - $this->addWikiMsg( $msg, $link, $reason, $ip, $name, $blockid, $blockExpiry, $intended, $blockTimestamp ); + $this->addWikiMsg( + $msg, $link, $reason, $ip, $name, $blockid, $blockExpiry, + $intended, $blockTimestamp + ); # Don't auto-return to special pages if( $return ) { @@ -1806,34 +1925,22 @@ class OutputPage { $groups = array_map( array( 'User', 'makeGroupLinkWiki' ), User::getGroupsWithPermission( $permission ) ); if( $groups ) { - $this->addWikiMsg( 'badaccess-groups', + $this->addWikiMsg( + 'badaccess-groups', $wgLang->commaList( $groups ), - count( $groups) ); + count( $groups ) + ); } else { $this->addWikiMsg( 'badaccess-group0' ); } $this->returnToMain(); } - /** - * @deprecated use permissionRequired() - */ - public function sysopRequired() { - throw new MWException( "Call to deprecated OutputPage::sysopRequired() method\n" ); - } - - /** - * @deprecated use permissionRequired() - */ - public function developerRequired() { - throw new MWException( "Call to deprecated OutputPage::developerRequired() method\n" ); - } - /** * Produce the stock "please login to use the wiki" page */ public function loginToUse() { - global $wgUser, $wgContLang; + global $wgUser; if( $wgUser->isLoggedIn() ) { $this->permissionRequired( 'read' ); @@ -1856,13 +1963,14 @@ class OutputPage { array( 'known', 'noclasses' ) ); $this->addHTML( wfMsgWikiHtml( 'loginreqpagetext', $loginLink ) ); - $this->addHTML( "\n<!--" . $this->getTitle()->getPrefixedUrl() . "-->" ); + $this->addHTML( "\n<!--" . $this->getTitle()->getPrefixedUrl() . '-->' ); # Don't return to the main page if the user can't read it # otherwise we'll end up in a pointless loop $mainPage = Title::newMainPage(); - if( $mainPage->userCanRead() ) + if( $mainPage->userCanRead() ) { $this->returnToMain( null, $mainPage ); + } } /** @@ -1873,26 +1981,30 @@ class OutputPage { * @return String: the wikitext error-messages, formatted into a list. */ public function formatPermissionsErrorMessage( $errors, $action = null ) { - if ($action == null) { - $text = wfMsgNoTrans( 'permissionserrorstext', count($errors)). "\n\n"; + if ( $action == null ) { + $text = wfMsgNoTrans( 'permissionserrorstext', count( $errors ) ) . "\n\n"; } else { - global $wgLang; $action_desc = wfMsgNoTrans( "action-$action" ); - $text = wfMsgNoTrans( 'permissionserrorstext-withaction', count($errors), $action_desc ) . "\n\n"; + $text = wfMsgNoTrans( + 'permissionserrorstext-withaction', + count( $errors ), + $action_desc + ) . "\n\n"; } - if (count( $errors ) > 1) { + if ( count( $errors ) > 1 ) { $text .= '<ul class="permissions-errors">' . "\n"; - foreach( $errors as $error ) - { + foreach( $errors as $error ) { $text .= '<li>'; $text .= call_user_func_array( 'wfMsgNoTrans', $error ); $text .= "</li>\n"; } $text .= '</ul>'; } else { - $text .= "<div class=\"permissions-errors\">\n" . call_user_func_array( 'wfMsgNoTrans', reset( $errors ) ) . "\n</div>"; + $text .= "<div class=\"permissions-errors\">\n" . + call_user_func_array( 'wfMsgNoTrans', reset( $errors ) ) . + "\n</div>"; } return $text; @@ -1927,25 +2039,16 @@ class OutputPage { // If no reason is given, just supply a default "I can't let you do // that, Dave" message. Should only occur if called by legacy code. - if ( $protected && empty($reasons) ) { + if ( $protected && empty( $reasons ) ) { $reasons[] = array( 'badaccess-group0' ); } - if ( !empty($reasons) ) { + if ( !empty( $reasons ) ) { // Permissions error if( $source ) { $this->setPageTitle( wfMsg( 'viewsource' ) ); $this->setSubtitle( - wfMsg( - 'viewsourcefor', - $skin->link( - $this->getTitle(), - null, - array(), - array(), - array( 'known', 'noclasses' ) - ) - ) + wfMsg( 'viewsourcefor', $skin->linkKnown( $this->getTitle() ) ) ); } else { $this->setPageTitle( wfMsg( 'badaccess' ) ); @@ -1955,7 +2058,7 @@ class OutputPage { // Wiki is read only $this->setPageTitle( wfMsg( 'readonly' ) ); $reason = wfReadOnlyReason(); - $this->wrapWikiMsg( '<div class="mw-readonly-error">\n$1</div>', array( 'readonlytext', $reason ) ); + $this->wrapWikiMsg( "<div class='mw-readonly-error'>\n$1\n</div>", array( 'readonlytext', $reason ) ); } // Show source, if supplied @@ -2036,8 +2139,8 @@ class OutputPage { } public function showFatalError( $message ) { - $this->setPageTitle( wfMsg( "internalerror" ) ); - $this->setRobotPolicy( "noindex,nofollow" ); + $this->setPageTitle( wfMsg( 'internalerror' ) ); + $this->setRobotPolicy( 'noindex,nofollow' ); $this->setArticleRelated( false ); $this->enableClientCache( false ); $this->mRedirect = ''; @@ -2069,12 +2172,15 @@ class OutputPage { * * @param $title Title to link * @param $query String: query string + * @param $text String text of the link (input is not escaped) */ - public function addReturnTo( $title, $query = array() ) { + public function addReturnTo( $title, $query = array(), $text = null ) { global $wgUser; - $this->addLink( array( 'rel' => 'next', 'href' => $title->getFullUrl() ) ); - $link = wfMsgHtml( 'returnto', $wgUser->getSkin()->link( - $title, null, array(), $query ) ); + $this->addLink( array( 'rel' => 'next', 'href' => $title->getFullURL() ) ); + $link = wfMsgHtml( + 'returnto', + $wgUser->getSkin()->link( $title, $text, array(), $query ) + ); $this->addHTML( "<p id=\"mw-returnto\">{$link}</p>\n" ); } @@ -2115,88 +2221,75 @@ class OutputPage { /** * @param $sk Skin The given Skin - * @param $includeStyle Unused (?) + * @param $includeStyle Boolean: unused * @return String: The doctype, opening <html>, and head element. */ public function headElement( Skin $sk, $includeStyle = true ) { - global $wgDocType, $wgDTD, $wgContLanguageCode, $wgOutputEncoding, $wgMimeType; - global $wgXhtmlDefaultNamespace, $wgXhtmlNamespaces, $wgHtml5Version; - global $wgContLang, $wgUseTrackbacks, $wgStyleVersion, $wgHtml5, $wgWellFormedXml; + global $wgOutputEncoding, $wgMimeType; + global $wgUseTrackbacks, $wgHtml5; global $wgUser, $wgRequest, $wgLang; - $this->addMeta( "http:Content-Type", "$wgMimeType; charset={$wgOutputEncoding}" ); if ( $sk->commonPrintStylesheet() ) { - $this->addStyle( 'common/wikiprintable.css', 'print' ); + $this->addModuleStyles( 'mediawiki.legacy.wikiprintable' ); } $sk->setupUserCss( $this ); - $ret = ''; - - if( $wgMimeType == 'text/xml' || $wgMimeType == 'application/xhtml+xml' || $wgMimeType == 'application/xml' ) { - $ret .= "<?xml version=\"1.0\" encoding=\"$wgOutputEncoding\" ?" . ">\n"; - } + $lang = wfUILang(); + $ret = Html::htmlHeader( array( 'lang' => $lang->getCode(), 'dir' => $lang->getDir() ) ); if ( $this->getHTMLTitle() == '' ) { - $this->setHTMLTitle( wfMsg( 'pagetitle', $this->getPageTitle() )); + $this->setHTMLTitle( wfMsg( 'pagetitle', $this->getPageTitle() ) ); } - $dir = $wgContLang->getDir(); + $openHead = Html::openElement( 'head' ); + if ( $openHead ) { + # Don't bother with the newline if $head == '' + $ret .= "$openHead\n"; + } if ( $wgHtml5 ) { - if ( $wgWellFormedXml ) { - # Unknown elements and attributes are okay in XML, but unknown - # named entities are well-formedness errors and will break XML - # parsers. Thus we need a doctype that gives us appropriate - # entity definitions. The HTML5 spec permits four legacy - # doctypes as obsolete but conforming, so let's pick one of - # those, although it makes our pages look like XHTML1 Strict. - # Isn't compatibility great? - $ret .= "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"; - } else { - # Much saner. - $ret .= "<!doctype html>\n"; - } - $ret .= "<html lang=\"$wgContLanguageCode\" dir=\"$dir\""; - if ( $wgHtml5Version ) $ret .= " version=\"$wgHtml5Version\""; - $ret .= ">\n"; + # More succinct than <meta http-equiv=Content-Type>, has the + # same effect + $ret .= Html::element( 'meta', array( 'charset' => $wgOutputEncoding ) ) . "\n"; } else { - $ret .= "<!DOCTYPE html PUBLIC \"$wgDocType\" \"$wgDTD\">\n"; - $ret .= "<html xmlns=\"{$wgXhtmlDefaultNamespace}\" "; - foreach($wgXhtmlNamespaces as $tag => $ns) { - $ret .= "xmlns:{$tag}=\"{$ns}\" "; - } - $ret .= "lang=\"$wgContLanguageCode\" dir=\"$dir\">\n"; + $this->addMeta( 'http:Content-Type', "$wgMimeType; charset=$wgOutputEncoding" ); } - $ret .= "<head>\n"; - $ret .= "<title>" . htmlspecialchars( $this->getHTMLTitle() ) . "\n"; + $ret .= Html::element( 'title', null, $this->getHTMLTitle() ) . "\n"; + $ret .= implode( "\n", array( - $this->getHeadLinks(), - $this->buildCssLinks(), - $this->getHeadScripts( $sk ), - $this->getHeadItems(), - )); - if( $sk->usercss ){ - $ret .= Html::inlineStyle( $sk->usercss ); - } + $this->getHeadLinks( $sk ), + $this->buildCssLinks( $sk ), + $this->getHeadItems() + ) ); - if ($wgUseTrackbacks && $this->isArticleRelated()) + if ( $wgUseTrackbacks && $this->isArticleRelated() ) { $ret .= $this->getTitle()->trackbackRDF(); + } - $ret .= "\n"; + $closeHead = Html::closeElement( 'head' ); + if ( $closeHead ) { + $ret .= "$closeHead\n"; + } $bodyAttrs = array(); # Crazy edit-on-double-click stuff $action = $wgRequest->getVal( 'action', 'view' ); - if ( $this->getTitle()->getNamespace() != NS_SPECIAL - && !in_array( $action, array( 'edit', 'submit' ) ) - && $wgUser->getOption( 'editondblclick' ) ) { - $bodyAttrs['ondblclick'] = "document.location = '" . Xml::escapeJsString( $this->getTitle()->getEditURL() ) . "'"; + if ( + $this->getTitle()->getNamespace() != NS_SPECIAL && + !in_array( $action, array( 'edit', 'submit' ) ) && + $wgUser->getOption( 'editondblclick' ) + ) + { + $editUrl = $this->getTitle()->getLocalUrl( $sk->editUrlOptions() ); + $bodyAttrs['ondblclick'] = "document.location = '" . + Xml::escapeJsString( $editUrl ) . "'"; } # Class bloat + $dir = wfUILang()->getDir(); $bodyAttrs['class'] = "mediawiki $dir"; if ( $wgLang->capitalizeAllNouns() ) { @@ -2214,55 +2307,220 @@ class OutputPage { $bodyAttrs['class'] .= ' ' . Sanitizer::escapeClass( 'page-' . $this->getTitle()->getPrefixedText() ); $bodyAttrs['class'] .= ' skin-' . Sanitizer::escapeClass( $wgUser->getSkin()->getSkinName() ); + $sk->addToBodyAttributes( $this, $bodyAttrs ); // Allow skins to add body attributes they need + wfRunHooks( 'OutputPageBodyAttributes', array( $this, $sk, &$bodyAttrs ) ); + $ret .= Html::openElement( 'body', $bodyAttrs ) . "\n"; return $ret; } + /** + * Get a ResourceLoader object associated with this OutputPage + */ + public function getResourceLoader() { + if ( is_null( $this->mResourceLoader ) ) { + $this->mResourceLoader = new ResourceLoader(); + } + return $this->mResourceLoader; + } + + /** + * TODO: Document + * @param $skin Skin + * @param $modules Array/string with the module name + * @param $only string May be styles, messages or scripts + * @param $useESI boolean + * @return string html " ); - } - - /** - * Get complete diff table, including header - * - * @param Title $otitle Old title - * @param Title $ntitle New title - * @param string $notice HTML between diff header and body - * @return mixed - */ - function getDiff( $otitle, $ntitle, $notice = '' ) { - $body = $this->getDiffBody(); - if ( $body === false ) { - return false; - } else { - $multi = $this->getMultiNotice(); - return $this->addHeader( $body, $otitle, $ntitle, $multi, $notice ); - } - } - - /** - * Get the diff table body, without header - * - * @return mixed - */ - function getDiffBody() { - global $wgMemc; - wfProfileIn( __METHOD__ ); - $this->mCacheHit = true; - // Check if the diff should be hidden from this user - if ( !$this->loadRevisionData() ) - return ''; - if ( $this->mOldRev && !$this->mOldRev->userCan(Revision::DELETED_TEXT) ) { - return ''; - } else if ( $this->mNewRev && !$this->mNewRev->userCan(Revision::DELETED_TEXT) ) { - return ''; - } else if ( $this->mOldRev && $this->mNewRev && $this->mOldRev->getID() == $this->mNewRev->getID() ) { - return ''; - } - // Cacheable? - $key = false; - if ( $this->mOldid && $this->mNewid ) { - $key = wfMemcKey( 'diff', 'version', MW_DIFF_VERSION, 'oldid', $this->mOldid, 'newid', $this->mNewid ); - // Try cache - if ( !$this->mRefreshCache ) { - $difftext = $wgMemc->get( $key ); - if ( $difftext ) { - wfIncrStats( 'diff_cache_hit' ); - $difftext = $this->localiseLineNumbers( $difftext ); - $difftext .= "\n\n"; - wfProfileOut( __METHOD__ ); - return $difftext; - } - } // don't try to load but save the result - } - $this->mCacheHit = false; - - // Loadtext is permission safe, this just clears out the diff - if ( !$this->loadText() ) { - wfProfileOut( __METHOD__ ); - return false; - } - - $difftext = $this->generateDiffBody( $this->mOldtext, $this->mNewtext ); - - // Save to cache for 7 days - if ( !wfRunHooks( 'AbortDiffCache', array( &$this ) ) ) { - wfIncrStats( 'diff_uncacheable' ); - } else if ( $key !== false && $difftext !== false ) { - wfIncrStats( 'diff_cache_miss' ); - $wgMemc->set( $key, $difftext, 7*86400 ); - } else { - wfIncrStats( 'diff_uncacheable' ); - } - // Replace line numbers with the text in the user's language - if ( $difftext !== false ) { - $difftext = $this->localiseLineNumbers( $difftext ); - } - wfProfileOut( __METHOD__ ); - return $difftext; - } - - /** - * Make sure the proper modules are loaded before we try to - * make the diff - */ - private function initDiffEngines() { - global $wgExternalDiffEngine; - if ( $wgExternalDiffEngine == 'wikidiff' && !function_exists( 'wikidiff_do_diff' ) ) { - wfProfileIn( __METHOD__ . '-php_wikidiff.so' ); - wfSuppressWarnings(); - dl( 'php_wikidiff.so' ); - wfRestoreWarnings(); - wfProfileOut( __METHOD__ . '-php_wikidiff.so' ); - } - else if ( $wgExternalDiffEngine == 'wikidiff2' && !function_exists( 'wikidiff2_do_diff' ) ) { - wfProfileIn( __METHOD__ . '-php_wikidiff2.so' ); - wfSuppressWarnings(); - dl( 'php_wikidiff2.so' ); - wfRestoreWarnings(); - wfProfileOut( __METHOD__ . '-php_wikidiff2.so' ); - } - } - - /** - * Generate a diff, no caching - * $otext and $ntext must be already segmented - */ - function generateDiffBody( $otext, $ntext ) { - global $wgExternalDiffEngine, $wgContLang; - - $otext = str_replace( "\r\n", "\n", $otext ); - $ntext = str_replace( "\r\n", "\n", $ntext ); - - $this->initDiffEngines(); - - if ( $wgExternalDiffEngine == 'wikidiff' && function_exists( 'wikidiff_do_diff' ) ) { - # For historical reasons, external diff engine expects - # input text to be HTML-escaped already - $otext = htmlspecialchars ( $wgContLang->segmentForDiff( $otext ) ); - $ntext = htmlspecialchars ( $wgContLang->segmentForDiff( $ntext ) ); - return $wgContLang->unsegementForDiff( wikidiff_do_diff( $otext, $ntext, 2 ) ) . - $this->debug( 'wikidiff1' ); - } - - if ( $wgExternalDiffEngine == 'wikidiff2' && function_exists( 'wikidiff2_do_diff' ) ) { - # Better external diff engine, the 2 may some day be dropped - # This one does the escaping and segmenting itself - wfProfileIn( 'wikidiff2_do_diff' ); - $text = wikidiff2_do_diff( $otext, $ntext, 2 ); - $text .= $this->debug( 'wikidiff2' ); - wfProfileOut( 'wikidiff2_do_diff' ); - return $text; - } - if ( $wgExternalDiffEngine != 'wikidiff3' && $wgExternalDiffEngine !== false ) { - # Diff via the shell - global $wgTmpDirectory; - $tempName1 = tempnam( $wgTmpDirectory, 'diff_' ); - $tempName2 = tempnam( $wgTmpDirectory, 'diff_' ); - - $tempFile1 = fopen( $tempName1, "w" ); - if ( !$tempFile1 ) { - wfProfileOut( __METHOD__ ); - return false; - } - $tempFile2 = fopen( $tempName2, "w" ); - if ( !$tempFile2 ) { - wfProfileOut( __METHOD__ ); - return false; - } - fwrite( $tempFile1, $otext ); - fwrite( $tempFile2, $ntext ); - fclose( $tempFile1 ); - fclose( $tempFile2 ); - $cmd = wfEscapeShellArg( $wgExternalDiffEngine, $tempName1, $tempName2 ); - wfProfileIn( __METHOD__ . "-shellexec" ); - $difftext = wfShellExec( $cmd ); - $difftext .= $this->debug( "external $wgExternalDiffEngine" ); - wfProfileOut( __METHOD__ . "-shellexec" ); - unlink( $tempName1 ); - unlink( $tempName2 ); - return $difftext; - } - - # Native PHP diff - $ota = explode( "\n", $wgContLang->segmentForDiff( $otext ) ); - $nta = explode( "\n", $wgContLang->segmentForDiff( $ntext ) ); - $diffs = new Diff( $ota, $nta ); - $formatter = new TableDiffFormatter(); - return $wgContLang->unsegmentForDiff( $formatter->format( $diffs ) ) . - $this->debug(); - } - - /** - * Generate a debug comment indicating diff generating time, - * server node, and generator backend. - */ - protected function debug( $generator="internal" ) { - global $wgShowHostnames; - if ( !$this->enableDebugComment ) { - return ''; - } - $data = array( $generator ); - if( $wgShowHostnames ) { - $data[] = wfHostname(); - } - $data[] = wfTimestamp( TS_DB ); - return "\n"; - } - - /** - * Replace line numbers with the text in the user's language - */ - function localiseLineNumbers( $text ) { - return preg_replace_callback( '//', - array( &$this, 'localiseLineNumbersCb' ), $text ); - } - - function localiseLineNumbersCb( $matches ) { - global $wgLang; - if ( $matches[1] === '1' && $this->mReducedLineNumbers ) return ''; - return wfMsgExt( 'lineno', 'escape', $wgLang->formatNum( $matches[1] ) ); - } - - - /** - * If there are revisions between the ones being compared, return a note saying so. - */ - function getMultiNotice() { - if ( !is_object($this->mOldRev) || !is_object($this->mNewRev) ) - return ''; - - if( !$this->mOldPage->equals( $this->mNewPage ) ) { - // Comparing two different pages? Count would be meaningless. - return ''; - } - - $oldid = $this->mOldRev->getId(); - $newid = $this->mNewRev->getId(); - if ( $oldid > $newid ) { - $tmp = $oldid; $oldid = $newid; $newid = $tmp; - } - - $n = $this->mTitle->countRevisionsBetween( $oldid, $newid ); - if ( !$n ) - return ''; - - return wfMsgExt( 'diff-multi', array( 'parseinline' ), $n ); - } - - - /** - * Add the header to a diff body - */ - static function addHeader( $diff, $otitle, $ntitle, $multi = '', $notice = '' ) { - $header = ""; - if( $diff ) { // Safari/Chrome show broken output if cols not used - $header .= " - - - - "; - $colspan = 2; - $multiColspan = 4; - } else { - $colspan = 1; - $multiColspan = 2; - } - $header .= " - - - - "; - - if ( $multi != '' ) { - $header .= ""; - } - if ( $notice != '' ) { - $header .= ""; - } - - return $header . $diff . "
    {$otitle}{$ntitle}
    {$multi}
    {$notice}
    "; - } - - /** - * Use specified text instead of loading from the database - */ - function setText( $oldText, $newText ) { - $this->mOldtext = $oldText; - $this->mNewtext = $newText; - $this->mTextLoaded = 2; - $this->mRevisionsLoaded = true; - } - - /** - * Load revision metadata for the specified articles. If newid is 0, then compare - * the old article in oldid to the current article; if oldid is 0, then - * compare the current article to the immediately previous one (ignoring the - * value of newid). - * - * If oldid is false, leave the corresponding revision object set - * to false. This is impossible via ordinary user input, and is provided for - * API convenience. - */ - function loadRevisionData() { - global $wgLang, $wgUser; - if ( $this->mRevisionsLoaded ) { - return true; - } else { - // Whether it succeeds or fails, we don't want to try again - $this->mRevisionsLoaded = true; - } - - // Load the new revision object - $this->mNewRev = $this->mNewid - ? Revision::newFromId( $this->mNewid ) - : Revision::newFromTitle( $this->mTitle ); - if( !$this->mNewRev instanceof Revision ) - return false; - - // Update the new revision ID in case it was 0 (makes life easier doing UI stuff) - $this->mNewid = $this->mNewRev->getId(); - - // Check if page is editable - $editable = $this->mNewRev->getTitle()->userCan( 'edit' ); - - // Set assorted variables - $timestamp = $wgLang->timeanddate( $this->mNewRev->getTimestamp(), true ); - $dateofrev = $wgLang->date( $this->mNewRev->getTimestamp(), true ); - $timeofrev = $wgLang->time( $this->mNewRev->getTimestamp(), true ); - $this->mNewPage = $this->mNewRev->getTitle(); - if( $this->mNewRev->isCurrent() ) { - $newLink = $this->mNewPage->escapeLocalUrl( array( - 'oldid' => $this->mNewid - ) ); - $this->mPagetitle = htmlspecialchars( wfMsg( - 'currentrev-asof', - $timestamp, - $dateofrev, - $timeofrev - ) ); - $newEdit = $this->mNewPage->escapeLocalUrl( array( - 'action' => 'edit' - ) ); - - $this->mNewtitle = "
    {$this->mPagetitle}"; - $this->mNewtitle .= " (" . wfMsgHtml( $editable ? 'editold' : 'viewsourceold' ) . ")"; - } else { - $newLink = $this->mNewPage->escapeLocalUrl( array( - 'oldid' => $this->mNewid - ) ); - $newEdit = $this->mNewPage->escapeLocalUrl( array( - 'action' => 'edit', - 'oldid' => $this->mNewid - ) ); - $this->mPagetitle = htmlspecialchars( wfMsg( - 'revisionasof', - $timestamp, - $dateofrev, - $timeofrev - ) ); - - $this->mNewtitle = "{$this->mPagetitle}"; - $this->mNewtitle .= " (" . wfMsgHtml( $editable ? 'editold' : 'viewsourceold' ) . ")"; - } - if( !$this->mNewRev->userCan(Revision::DELETED_TEXT) ) { - $this->mNewtitle = "{$this->mPagetitle}"; - } else if ( $this->mNewRev->isDeleted(Revision::DELETED_TEXT) ) { - $this->mNewtitle = "{$this->mNewtitle}"; - } - - // Load the old revision object - $this->mOldRev = false; - if( $this->mOldid ) { - $this->mOldRev = Revision::newFromId( $this->mOldid ); - } elseif ( $this->mOldid === 0 ) { - $rev = $this->mNewRev->getPrevious(); - if( $rev ) { - $this->mOldid = $rev->getId(); - $this->mOldRev = $rev; - } else { - // No previous revision; mark to show as first-version only. - $this->mOldid = false; - $this->mOldRev = false; - } - }/* elseif ( $this->mOldid === false ) leave mOldRev false; */ - - if( is_null( $this->mOldRev ) ) { - return false; - } - - if ( $this->mOldRev ) { - $this->mOldPage = $this->mOldRev->getTitle(); - - $t = $wgLang->timeanddate( $this->mOldRev->getTimestamp(), true ); - $dateofrev = $wgLang->date( $this->mOldRev->getTimestamp(), true ); - $timeofrev = $wgLang->time( $this->mOldRev->getTimestamp(), true ); - $oldLink = $this->mOldPage->escapeLocalUrl( array( - 'oldid' => $this->mOldid - ) ); - $oldEdit = $this->mOldPage->escapeLocalUrl( array( - 'action' => 'edit', - 'oldid' => $this->mOldid - ) ); - $this->mOldPagetitle = htmlspecialchars( wfMsg( 'revisionasof', $t, $dateofrev, $timeofrev ) ); - - $this->mOldtitle = "{$this->mOldPagetitle}" - . " (" . wfMsgHtml( $editable ? 'editold' : 'viewsourceold' ) . ")"; - // Add an "undo" link - $newUndo = $this->mNewPage->escapeLocalUrl( array( - 'action' => 'edit', - 'undoafter' => $this->mOldid, - 'undo' => $this->mNewid - ) ); - $htmlLink = htmlspecialchars( wfMsg( 'editundo' ) ); - $htmlTitle = $wgUser->getSkin()->tooltip( 'undo' ); - if( $editable && !$this->mOldRev->isDeleted( Revision::DELETED_TEXT ) && !$this->mNewRev->isDeleted( Revision::DELETED_TEXT ) ) { - $this->mNewtitle .= " (" . $htmlLink . ")"; - } - - if( !$this->mOldRev->userCan( Revision::DELETED_TEXT ) ) { - $this->mOldtitle = '' . $this->mOldPagetitle . ''; - } else if( $this->mOldRev->isDeleted( Revision::DELETED_TEXT ) ) { - $this->mOldtitle = '' . $this->mOldtitle . ''; - } - } - - return true; - } - - /** - * Load the text of the revisions, as well as revision data. - */ - function loadText() { - if ( $this->mTextLoaded == 2 ) { - return true; - } else { - // Whether it succeeds or fails, we don't want to try again - $this->mTextLoaded = 2; - } - - if ( !$this->loadRevisionData() ) { - return false; - } - if ( $this->mOldRev ) { - $this->mOldtext = $this->mOldRev->getText( Revision::FOR_THIS_USER ); - if ( $this->mOldtext === false ) { - return false; - } - } - if ( $this->mNewRev ) { - $this->mNewtext = $this->mNewRev->getText( Revision::FOR_THIS_USER ); - if ( $this->mNewtext === false ) { - return false; - } - } - return true; - } - - /** - * Load the text of the new revision, not the old one - */ - function loadNewText() { - if ( $this->mTextLoaded >= 1 ) { - return true; - } else { - $this->mTextLoaded = 1; - } - if ( !$this->loadRevisionData() ) { - return false; - } - $this->mNewtext = $this->mNewRev->getText( Revision::FOR_THIS_USER ); - return true; - } -} diff --git a/includes/diff/WikiDiff.php b/includes/diff/WikiDiff.php new file mode 100644 index 00000000..2d904c96 --- /dev/null +++ b/includes/diff/WikiDiff.php @@ -0,0 +1,1241 @@ + + * You may copy this code freely under the conditions of the GPL. + * + * @file + * @ingroup DifferenceEngine + * @defgroup DifferenceEngine DifferenceEngine + */ + +/** + * @todo document + * @private + * @ingroup DifferenceEngine + */ +class _DiffOp { + var $type; + var $orig; + var $closing; + + function reverse() { + trigger_error( 'pure virtual', E_USER_ERROR ); + } + + function norig() { + return $this->orig ? sizeof( $this->orig ) : 0; + } + + function nclosing() { + return $this->closing ? sizeof( $this->closing ) : 0; + } +} + +/** + * @todo document + * @private + * @ingroup DifferenceEngine + */ +class _DiffOp_Copy extends _DiffOp { + var $type = 'copy'; + + function __construct ( $orig, $closing = false ) { + if ( !is_array( $closing ) ) + $closing = $orig; + $this->orig = $orig; + $this->closing = $closing; + } + + function reverse() { + return new _DiffOp_Copy( $this->closing, $this->orig ); + } +} + +/** + * @todo document + * @private + * @ingroup DifferenceEngine + */ +class _DiffOp_Delete extends _DiffOp { + var $type = 'delete'; + + function __construct ( $lines ) { + $this->orig = $lines; + $this->closing = false; + } + + function reverse() { + return new _DiffOp_Add( $this->orig ); + } +} + +/** + * @todo document + * @private + * @ingroup DifferenceEngine + */ +class _DiffOp_Add extends _DiffOp { + var $type = 'add'; + + function __construct ( $lines ) { + $this->closing = $lines; + $this->orig = false; + } + + function reverse() { + return new _DiffOp_Delete( $this->closing ); + } +} + +/** + * @todo document + * @private + * @ingroup DifferenceEngine + */ +class _DiffOp_Change extends _DiffOp { + var $type = 'change'; + + function __construct ( $orig, $closing ) { + $this->orig = $orig; + $this->closing = $closing; + } + + function reverse() { + return new _DiffOp_Change( $this->closing, $this->orig ); + } +} + +/** + * Class used internally by Diff to actually compute the diffs. + * + * The algorithm used here is mostly lifted from the perl module + * Algorithm::Diff (version 1.06) by Ned Konz, which is available at: + * http://www.perl.com/CPAN/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip + * + * More ideas are taken from: + * http://www.ics.uci.edu/~eppstein/161/960229.html + * + * Some ideas are (and a bit of code) are from from analyze.c, from GNU + * diffutils-2.7, which can be found at: + * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz + * + * closingly, some ideas (subdivision by NCHUNKS > 2, and some optimizations) + * are my own. + * + * Line length limits for robustness added by Tim Starling, 2005-08-31 + * Alternative implementation added by Guy Van den Broeck, 2008-07-30 + * + * @author Geoffrey T. Dairiki, Tim Starling, Guy Van den Broeck + * @private + * @ingroup DifferenceEngine + */ +class _DiffEngine { + + const MAX_XREF_LENGTH = 10000; + + function diff ( $from_lines, $to_lines ) { + wfProfileIn( __METHOD__ ); + + // Diff and store locally + $this->diff_local( $from_lines, $to_lines ); + + // Merge edits when possible + $this->_shift_boundaries( $from_lines, $this->xchanged, $this->ychanged ); + $this->_shift_boundaries( $to_lines, $this->ychanged, $this->xchanged ); + + // Compute the edit operations. + $n_from = sizeof( $from_lines ); + $n_to = sizeof( $to_lines ); + + $edits = array(); + $xi = $yi = 0; + while ( $xi < $n_from || $yi < $n_to ) { + assert( $yi < $n_to || $this->xchanged[$xi] ); + assert( $xi < $n_from || $this->ychanged[$yi] ); + + // Skip matching "snake". + $copy = array(); + while ( $xi < $n_from && $yi < $n_to + && !$this->xchanged[$xi] && !$this->ychanged[$yi] ) { + $copy[] = $from_lines[$xi++]; + ++$yi; + } + if ( $copy ) + $edits[] = new _DiffOp_Copy( $copy ); + + // Find deletes & adds. + $delete = array(); + while ( $xi < $n_from && $this->xchanged[$xi] ) + $delete[] = $from_lines[$xi++]; + + $add = array(); + while ( $yi < $n_to && $this->ychanged[$yi] ) + $add[] = $to_lines[$yi++]; + + if ( $delete && $add ) + $edits[] = new _DiffOp_Change( $delete, $add ); + elseif ( $delete ) + $edits[] = new _DiffOp_Delete( $delete ); + elseif ( $add ) + $edits[] = new _DiffOp_Add( $add ); + } + wfProfileOut( __METHOD__ ); + return $edits; + } + + function diff_local ( $from_lines, $to_lines ) { + global $wgExternalDiffEngine; + wfProfileIn( __METHOD__ ); + + if ( $wgExternalDiffEngine == 'wikidiff3' ) { + // wikidiff3 + $wikidiff3 = new WikiDiff3(); + $wikidiff3->diff( $from_lines, $to_lines ); + $this->xchanged = $wikidiff3->removed; + $this->ychanged = $wikidiff3->added; + unset( $wikidiff3 ); + } else { + // old diff + $n_from = sizeof( $from_lines ); + $n_to = sizeof( $to_lines ); + $this->xchanged = $this->ychanged = array(); + $this->xv = $this->yv = array(); + $this->xind = $this->yind = array(); + unset( $this->seq ); + unset( $this->in_seq ); + unset( $this->lcs ); + + // Skip leading common lines. + for ( $skip = 0; $skip < $n_from && $skip < $n_to; $skip++ ) { + if ( $from_lines[$skip] !== $to_lines[$skip] ) + break; + $this->xchanged[$skip] = $this->ychanged[$skip] = false; + } + // Skip trailing common lines. + $xi = $n_from; $yi = $n_to; + for ( $endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++ ) { + if ( $from_lines[$xi] !== $to_lines[$yi] ) + break; + $this->xchanged[$xi] = $this->ychanged[$yi] = false; + } + + // Ignore lines which do not exist in both files. + for ( $xi = $skip; $xi < $n_from - $endskip; $xi++ ) { + $xhash[$this->_line_hash( $from_lines[$xi] )] = 1; + } + + for ( $yi = $skip; $yi < $n_to - $endskip; $yi++ ) { + $line = $to_lines[$yi]; + if ( ( $this->ychanged[$yi] = empty( $xhash[$this->_line_hash( $line )] ) ) ) + continue; + $yhash[$this->_line_hash( $line )] = 1; + $this->yv[] = $line; + $this->yind[] = $yi; + } + for ( $xi = $skip; $xi < $n_from - $endskip; $xi++ ) { + $line = $from_lines[$xi]; + if ( ( $this->xchanged[$xi] = empty( $yhash[$this->_line_hash( $line )] ) ) ) + continue; + $this->xv[] = $line; + $this->xind[] = $xi; + } + + // Find the LCS. + $this->_compareseq( 0, sizeof( $this->xv ), 0, sizeof( $this->yv ) ); + } + wfProfileOut( __METHOD__ ); + } + + /** + * Returns the whole line if it's small enough, or the MD5 hash otherwise + */ + function _line_hash( $line ) { + if ( strlen( $line ) > self::MAX_XREF_LENGTH ) { + return md5( $line ); + } else { + return $line; + } + } + + /* Divide the Largest Common Subsequence (LCS) of the sequences + * [XOFF, XLIM) and [YOFF, YLIM) into NCHUNKS approximately equally + * sized segments. + * + * Returns (LCS, PTS). LCS is the length of the LCS. PTS is an + * array of NCHUNKS+1 (X, Y) indexes giving the diving points between + * sub sequences. The first sub-sequence is contained in [X0, X1), + * [Y0, Y1), the second in [X1, X2), [Y1, Y2) and so on. Note + * that (X0, Y0) == (XOFF, YOFF) and + * (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM). + * + * This function assumes that the first lines of the specified portions + * of the two files do not match, and likewise that the last lines do not + * match. The caller must trim matching lines from the beginning and end + * of the portions it is going to specify. + */ + function _diag ( $xoff, $xlim, $yoff, $ylim, $nchunks ) { + $flip = false; + + if ( $xlim - $xoff > $ylim - $yoff ) { + // Things seems faster (I'm not sure I understand why) + // when the shortest sequence in X. + $flip = true; + list ( $xoff, $xlim, $yoff, $ylim ) + = array( $yoff, $ylim, $xoff, $xlim ); + } + + if ( $flip ) + for ( $i = $ylim - 1; $i >= $yoff; $i-- ) + $ymatches[$this->xv[$i]][] = $i; + else + for ( $i = $ylim - 1; $i >= $yoff; $i-- ) + $ymatches[$this->yv[$i]][] = $i; + + $this->lcs = 0; + $this->seq[0] = $yoff - 1; + $this->in_seq = array(); + $ymids[0] = array(); + + $numer = $xlim - $xoff + $nchunks - 1; + $x = $xoff; + for ( $chunk = 0; $chunk < $nchunks; $chunk++ ) { + if ( $chunk > 0 ) + for ( $i = 0; $i <= $this->lcs; $i++ ) + $ymids[$i][$chunk -1] = $this->seq[$i]; + + $x1 = $xoff + (int)( ( $numer + ( $xlim -$xoff ) * $chunk ) / $nchunks ); + for ( ; $x < $x1; $x++ ) { + $line = $flip ? $this->yv[$x] : $this->xv[$x]; + if ( empty( $ymatches[$line] ) ) { + continue; + } + $matches = $ymatches[$line]; + reset( $matches ); + while ( list( , $y ) = each( $matches ) ) { + if ( empty( $this->in_seq[$y] ) ) { + $k = $this->_lcs_pos( $y ); + assert( $k > 0 ); + $ymids[$k] = $ymids[$k -1]; + break; + } + } + while ( list ( , $y ) = each( $matches ) ) { + if ( $y > $this->seq[$k -1] ) { + assert( $y < $this->seq[$k] ); + // Optimization: this is a common case: + // next match is just replacing previous match. + $this->in_seq[$this->seq[$k]] = false; + $this->seq[$k] = $y; + $this->in_seq[$y] = 1; + } else if ( empty( $this->in_seq[$y] ) ) { + $k = $this->_lcs_pos( $y ); + assert( $k > 0 ); + $ymids[$k] = $ymids[$k -1]; + } + } + } + } + + $seps[] = $flip ? array( $yoff, $xoff ) : array( $xoff, $yoff ); + $ymid = $ymids[$this->lcs]; + for ( $n = 0; $n < $nchunks - 1; $n++ ) { + $x1 = $xoff + (int)( ( $numer + ( $xlim - $xoff ) * $n ) / $nchunks ); + $y1 = $ymid[$n] + 1; + $seps[] = $flip ? array( $y1, $x1 ) : array( $x1, $y1 ); + } + $seps[] = $flip ? array( $ylim, $xlim ) : array( $xlim, $ylim ); + + return array( $this->lcs, $seps ); + } + + function _lcs_pos ( $ypos ) { + $end = $this->lcs; + if ( $end == 0 || $ypos > $this->seq[$end] ) { + $this->seq[++$this->lcs] = $ypos; + $this->in_seq[$ypos] = 1; + return $this->lcs; + } + + $beg = 1; + while ( $beg < $end ) { + $mid = (int)( ( $beg + $end ) / 2 ); + if ( $ypos > $this->seq[$mid] ) + $beg = $mid + 1; + else + $end = $mid; + } + + assert( $ypos != $this->seq[$end] ); + + $this->in_seq[$this->seq[$end]] = false; + $this->seq[$end] = $ypos; + $this->in_seq[$ypos] = 1; + return $end; + } + + /* Find LCS of two sequences. + * + * The results are recorded in the vectors $this->{x,y}changed[], by + * storing a 1 in the element for each line that is an insertion + * or deletion (ie. is not in the LCS). + * + * The subsequence of file 0 is [XOFF, XLIM) and likewise for file 1. + * + * Note that XLIM, YLIM are exclusive bounds. + * All line numbers are origin-0 and discarded lines are not counted. + */ + function _compareseq ( $xoff, $xlim, $yoff, $ylim ) { + // Slide down the bottom initial diagonal. + while ( $xoff < $xlim && $yoff < $ylim + && $this->xv[$xoff] == $this->yv[$yoff] ) { + ++$xoff; + ++$yoff; + } + + // Slide up the top initial diagonal. + while ( $xlim > $xoff && $ylim > $yoff + && $this->xv[$xlim - 1] == $this->yv[$ylim - 1] ) { + --$xlim; + --$ylim; + } + + if ( $xoff == $xlim || $yoff == $ylim ) + $lcs = 0; + else { + // This is ad hoc but seems to work well. + // $nchunks = sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); + // $nchunks = max(2,min(8,(int)$nchunks)); + $nchunks = min( 7, $xlim - $xoff, $ylim - $yoff ) + 1; + list ( $lcs, $seps ) + = $this->_diag( $xoff, $xlim, $yoff, $ylim, $nchunks ); + } + + if ( $lcs == 0 ) { + // X and Y sequences have no common subsequence: + // mark all changed. + while ( $yoff < $ylim ) + $this->ychanged[$this->yind[$yoff++]] = 1; + while ( $xoff < $xlim ) + $this->xchanged[$this->xind[$xoff++]] = 1; + } else { + // Use the partitions to split this problem into subproblems. + reset( $seps ); + $pt1 = $seps[0]; + while ( $pt2 = next( $seps ) ) { + $this->_compareseq ( $pt1[0], $pt2[0], $pt1[1], $pt2[1] ); + $pt1 = $pt2; + } + } + } + + /* Adjust inserts/deletes of identical lines to join changes + * as much as possible. + * + * We do something when a run of changed lines include a + * line at one end and has an excluded, identical line at the other. + * We are free to choose which identical line is included. + * `compareseq' usually chooses the one at the beginning, + * but usually it is cleaner to consider the following identical line + * to be the "change". + * + * This is extracted verbatim from analyze.c (GNU diffutils-2.7). + */ + function _shift_boundaries ( $lines, &$changed, $other_changed ) { + wfProfileIn( __METHOD__ ); + $i = 0; + $j = 0; + + assert( 'sizeof($lines) == sizeof($changed)' ); + $len = sizeof( $lines ); + $other_len = sizeof( $other_changed ); + + while ( 1 ) { + /* + * Scan forwards to find beginning of another run of changes. + * Also keep track of the corresponding point in the other file. + * + * Throughout this code, $i and $j are adjusted together so that + * the first $i elements of $changed and the first $j elements + * of $other_changed both contain the same number of zeros + * (unchanged lines). + * Furthermore, $j is always kept so that $j == $other_len or + * $other_changed[$j] == false. + */ + while ( $j < $other_len && $other_changed[$j] ) + $j++; + + while ( $i < $len && ! $changed[$i] ) { + assert( '$j < $other_len && ! $other_changed[$j]' ); + $i++; $j++; + while ( $j < $other_len && $other_changed[$j] ) + $j++; + } + + if ( $i == $len ) + break; + + $start = $i; + + // Find the end of this run of changes. + while ( ++$i < $len && $changed[$i] ) + continue; + + do { + /* + * Record the length of this run of changes, so that + * we can later determine whether the run has grown. + */ + $runlength = $i - $start; + + /* + * Move the changed region back, so long as the + * previous unchanged line matches the last changed one. + * This merges with previous changed regions. + */ + while ( $start > 0 && $lines[$start - 1] == $lines[$i - 1] ) { + $changed[--$start] = 1; + $changed[--$i] = false; + while ( $start > 0 && $changed[$start - 1] ) + $start--; + assert( '$j > 0' ); + while ( $other_changed[--$j] ) + continue; + assert( '$j >= 0 && !$other_changed[$j]' ); + } + + /* + * Set CORRESPONDING to the end of the changed run, at the last + * point where it corresponds to a changed run in the other file. + * CORRESPONDING == LEN means no such point has been found. + */ + $corresponding = $j < $other_len ? $i : $len; + + /* + * Move the changed region forward, so long as the + * first changed line matches the following unchanged one. + * This merges with following changed regions. + * Do this second, so that if there are no merges, + * the changed region is moved forward as far as possible. + */ + while ( $i < $len && $lines[$start] == $lines[$i] ) { + $changed[$start++] = false; + $changed[$i++] = 1; + while ( $i < $len && $changed[$i] ) + $i++; + + assert( '$j < $other_len && ! $other_changed[$j]' ); + $j++; + if ( $j < $other_len && $other_changed[$j] ) { + $corresponding = $i; + while ( $j < $other_len && $other_changed[$j] ) + $j++; + } + } + } while ( $runlength != $i - $start ); + + /* + * If possible, move the fully-merged run of changes + * back to a corresponding run in the other file. + */ + while ( $corresponding < $i ) { + $changed[--$start] = 1; + $changed[--$i] = 0; + assert( '$j > 0' ); + while ( $other_changed[--$j] ) + continue; + assert( '$j >= 0 && !$other_changed[$j]' ); + } + } + wfProfileOut( __METHOD__ ); + } +} + +/** + * Class representing a 'diff' between two sequences of strings. + * @todo document + * @private + * @ingroup DifferenceEngine + */ +class Diff +{ + var $edits; + + /** + * Constructor. + * Computes diff between sequences of strings. + * + * @param $from_lines array An array of strings. + * (Typically these are lines from a file.) + * @param $to_lines array An array of strings. + */ + function __construct( $from_lines, $to_lines ) { + $eng = new _DiffEngine; + $this->edits = $eng->diff( $from_lines, $to_lines ); + // $this->_check($from_lines, $to_lines); + } + + /** + * Compute reversed Diff. + * + * SYNOPSIS: + * + * $diff = new Diff($lines1, $lines2); + * $rev = $diff->reverse(); + * @return object A Diff object representing the inverse of the + * original diff. + */ + function reverse () { + $rev = $this; + $rev->edits = array(); + foreach ( $this->edits as $edit ) { + $rev->edits[] = $edit->reverse(); + } + return $rev; + } + + /** + * Check for empty diff. + * + * @return bool True iff two sequences were identical. + */ + function isEmpty () { + foreach ( $this->edits as $edit ) { + if ( $edit->type != 'copy' ) + return false; + } + return true; + } + + /** + * Compute the length of the Longest Common Subsequence (LCS). + * + * This is mostly for diagnostic purposed. + * + * @return int The length of the LCS. + */ + function lcs () { + $lcs = 0; + foreach ( $this->edits as $edit ) { + if ( $edit->type == 'copy' ) + $lcs += sizeof( $edit->orig ); + } + return $lcs; + } + + /** + * Get the original set of lines. + * + * This reconstructs the $from_lines parameter passed to the + * constructor. + * + * @return array The original sequence of strings. + */ + function orig() { + $lines = array(); + + foreach ( $this->edits as $edit ) { + if ( $edit->orig ) + array_splice( $lines, sizeof( $lines ), 0, $edit->orig ); + } + return $lines; + } + + /** + * Get the closing set of lines. + * + * This reconstructs the $to_lines parameter passed to the + * constructor. + * + * @return array The sequence of strings. + */ + function closing() { + $lines = array(); + + foreach ( $this->edits as $edit ) { + if ( $edit->closing ) + array_splice( $lines, sizeof( $lines ), 0, $edit->closing ); + } + return $lines; + } + + /** + * Check a Diff for validity. + * + * This is here only for debugging purposes. + */ + function _check ( $from_lines, $to_lines ) { + wfProfileIn( __METHOD__ ); + if ( serialize( $from_lines ) != serialize( $this->orig() ) ) + trigger_error( "Reconstructed original doesn't match", E_USER_ERROR ); + if ( serialize( $to_lines ) != serialize( $this->closing() ) ) + trigger_error( "Reconstructed closing doesn't match", E_USER_ERROR ); + + $rev = $this->reverse(); + if ( serialize( $to_lines ) != serialize( $rev->orig() ) ) + trigger_error( "Reversed original doesn't match", E_USER_ERROR ); + if ( serialize( $from_lines ) != serialize( $rev->closing() ) ) + trigger_error( "Reversed closing doesn't match", E_USER_ERROR ); + + + $prevtype = 'none'; + foreach ( $this->edits as $edit ) { + if ( $prevtype == $edit->type ) + trigger_error( "Edit sequence is non-optimal", E_USER_ERROR ); + $prevtype = $edit->type; + } + + $lcs = $this->lcs(); + trigger_error( 'Diff okay: LCS = ' . $lcs, E_USER_NOTICE ); + wfProfileOut( __METHOD__ ); + } +} + +/** + * @todo document, bad name. + * @private + * @ingroup DifferenceEngine + */ +class MappedDiff extends Diff +{ + /** + * Constructor. + * + * Computes diff between sequences of strings. + * + * This can be used to compute things like + * case-insensitve diffs, or diffs which ignore + * changes in white-space. + * + * @param $from_lines array An array of strings. + * (Typically these are lines from a file.) + * + * @param $to_lines array An array of strings. + * + * @param $mapped_from_lines array This array should + * have the same size number of elements as $from_lines. + * The elements in $mapped_from_lines and + * $mapped_to_lines are what is actually compared + * when computing the diff. + * + * @param $mapped_to_lines array This array should + * have the same number of elements as $to_lines. + */ + function __construct( $from_lines, $to_lines, + $mapped_from_lines, $mapped_to_lines ) { + wfProfileIn( __METHOD__ ); + + assert( sizeof( $from_lines ) == sizeof( $mapped_from_lines ) ); + assert( sizeof( $to_lines ) == sizeof( $mapped_to_lines ) ); + + parent::__construct( $mapped_from_lines, $mapped_to_lines ); + + $xi = $yi = 0; + for ( $i = 0; $i < sizeof( $this->edits ); $i++ ) { + $orig = &$this->edits[$i]->orig; + if ( is_array( $orig ) ) { + $orig = array_slice( $from_lines, $xi, sizeof( $orig ) ); + $xi += sizeof( $orig ); + } + + $closing = &$this->edits[$i]->closing; + if ( is_array( $closing ) ) { + $closing = array_slice( $to_lines, $yi, sizeof( $closing ) ); + $yi += sizeof( $closing ); + } + } + wfProfileOut( __METHOD__ ); + } +} + +/** + * A class to format Diffs + * + * This class formats the diff in classic diff format. + * It is intended that this class be customized via inheritance, + * to obtain fancier outputs. + * @todo document + * @private + * @ingroup DifferenceEngine + */ +class DiffFormatter { + /** + * Number of leading context "lines" to preserve. + * + * This should be left at zero for this class, but subclasses + * may want to set this to other values. + */ + var $leading_context_lines = 0; + + /** + * Number of trailing context "lines" to preserve. + * + * This should be left at zero for this class, but subclasses + * may want to set this to other values. + */ + var $trailing_context_lines = 0; + + /** + * Format a diff. + * + * @param $diff object A Diff object. + * @return string The formatted output. + */ + function format( $diff ) { + wfProfileIn( __METHOD__ ); + + $xi = $yi = 1; + $block = false; + $context = array(); + + $nlead = $this->leading_context_lines; + $ntrail = $this->trailing_context_lines; + + $this->_start_diff(); + + foreach ( $diff->edits as $edit ) { + if ( $edit->type == 'copy' ) { + if ( is_array( $block ) ) { + if ( sizeof( $edit->orig ) <= $nlead + $ntrail ) { + $block[] = $edit; + } + else { + if ( $ntrail ) { + $context = array_slice( $edit->orig, 0, $ntrail ); + $block[] = new _DiffOp_Copy( $context ); + } + $this->_block( $x0, $ntrail + $xi - $x0, + $y0, $ntrail + $yi - $y0, + $block ); + $block = false; + } + } + $context = $edit->orig; + } + else { + if ( ! is_array( $block ) ) { + $context = array_slice( $context, sizeof( $context ) - $nlead ); + $x0 = $xi - sizeof( $context ); + $y0 = $yi - sizeof( $context ); + $block = array(); + if ( $context ) + $block[] = new _DiffOp_Copy( $context ); + } + $block[] = $edit; + } + + if ( $edit->orig ) + $xi += sizeof( $edit->orig ); + if ( $edit->closing ) + $yi += sizeof( $edit->closing ); + } + + if ( is_array( $block ) ) + $this->_block( $x0, $xi - $x0, + $y0, $yi - $y0, + $block ); + + $end = $this->_end_diff(); + wfProfileOut( __METHOD__ ); + return $end; + } + + function _block( $xbeg, $xlen, $ybeg, $ylen, &$edits ) { + wfProfileIn( __METHOD__ ); + $this->_start_block( $this->_block_header( $xbeg, $xlen, $ybeg, $ylen ) ); + foreach ( $edits as $edit ) { + if ( $edit->type == 'copy' ) + $this->_context( $edit->orig ); + elseif ( $edit->type == 'add' ) + $this->_added( $edit->closing ); + elseif ( $edit->type == 'delete' ) + $this->_deleted( $edit->orig ); + elseif ( $edit->type == 'change' ) + $this->_changed( $edit->orig, $edit->closing ); + else + trigger_error( 'Unknown edit type', E_USER_ERROR ); + } + $this->_end_block(); + wfProfileOut( __METHOD__ ); + } + + function _start_diff() { + ob_start(); + } + + function _end_diff() { + $val = ob_get_contents(); + ob_end_clean(); + return $val; + } + + function _block_header( $xbeg, $xlen, $ybeg, $ylen ) { + if ( $xlen > 1 ) + $xbeg .= "," . ( $xbeg + $xlen - 1 ); + if ( $ylen > 1 ) + $ybeg .= "," . ( $ybeg + $ylen - 1 ); + + return $xbeg . ( $xlen ? ( $ylen ? 'c' : 'd' ) : 'a' ) . $ybeg; + } + + function _start_block( $header ) { + echo $header . "\n"; + } + + function _end_block() { + } + + function _lines( $lines, $prefix = ' ' ) { + foreach ( $lines as $line ) + echo "$prefix $line\n"; + } + + function _context( $lines ) { + $this->_lines( $lines ); + } + + function _added( $lines ) { + $this->_lines( $lines, '>' ); + } + function _deleted( $lines ) { + $this->_lines( $lines, '<' ); + } + + function _changed( $orig, $closing ) { + $this->_deleted( $orig ); + echo "---\n"; + $this->_added( $closing ); + } +} + +/** + * A formatter that outputs unified diffs + * @ingroup DifferenceEngine + */ + +class UnifiedDiffFormatter extends DiffFormatter { + var $leading_context_lines = 2; + var $trailing_context_lines = 2; + + function _added( $lines ) { + $this->_lines( $lines, '+' ); + } + function _deleted( $lines ) { + $this->_lines( $lines, '-' ); + } + function _changed( $orig, $closing ) { + $this->_deleted( $orig ); + $this->_added( $closing ); + } + function _block_header( $xbeg, $xlen, $ybeg, $ylen ) { + return "@@ -$xbeg,$xlen +$ybeg,$ylen @@"; + } +} + +/** + * A pseudo-formatter that just passes along the Diff::$edits array + * @ingroup DifferenceEngine + */ +class ArrayDiffFormatter extends DiffFormatter { + function format( $diff ) { + $oldline = 1; + $newline = 1; + $retval = array(); + foreach ( $diff->edits as $edit ) + switch( $edit->type ) { + case 'add': + foreach ( $edit->closing as $l ) { + $retval[] = array( + 'action' => 'add', + 'new' => $l, + 'newline' => $newline++ + ); + } + break; + case 'delete': + foreach ( $edit->orig as $l ) { + $retval[] = array( + 'action' => 'delete', + 'old' => $l, + 'oldline' => $oldline++, + ); + } + break; + case 'change': + foreach ( $edit->orig as $i => $l ) { + $retval[] = array( + 'action' => 'change', + 'old' => $l, + 'new' => @$edit->closing[$i], + 'oldline' => $oldline++, + 'newline' => $newline++, + ); + } + break; + case 'copy': + $oldline += count( $edit->orig ); + $newline += count( $edit->orig ); + } + return $retval; + } +} + +/** + * Additions by Axel Boldt follow, partly taken from diff.php, phpwiki-1.3.3 + * + */ + +define( 'NBSP', ' ' ); // iso-8859-x non-breaking space. + +/** + * @todo document + * @private + * @ingroup DifferenceEngine + */ +class _HWLDF_WordAccumulator { + function __construct () { + $this->_lines = array(); + $this->_line = ''; + $this->_group = ''; + $this->_tag = ''; + } + + function _flushGroup ( $new_tag ) { + if ( $this->_group !== '' ) { + if ( $this->_tag == 'ins' ) + $this->_line .= '' . + htmlspecialchars ( $this->_group ) . ''; + elseif ( $this->_tag == 'del' ) + $this->_line .= '' . + htmlspecialchars ( $this->_group ) . ''; + else + $this->_line .= htmlspecialchars ( $this->_group ); + } + $this->_group = ''; + $this->_tag = $new_tag; + } + + function _flushLine ( $new_tag ) { + $this->_flushGroup( $new_tag ); + if ( $this->_line != '' ) + array_push ( $this->_lines, $this->_line ); + else + # make empty lines visible by inserting an NBSP + array_push ( $this->_lines, NBSP ); + $this->_line = ''; + } + + function addWords ( $words, $tag = '' ) { + if ( $tag != $this->_tag ) + $this->_flushGroup( $tag ); + + foreach ( $words as $word ) { + // new-line should only come as first char of word. + if ( $word == '' ) + continue; + if ( $word[0] == "\n" ) { + $this->_flushLine( $tag ); + $word = substr( $word, 1 ); + } + assert( !strstr( $word, "\n" ) ); + $this->_group .= $word; + } + } + + function getLines() { + $this->_flushLine( '~done' ); + return $this->_lines; + } +} + +/** + * @todo document + * @private + * @ingroup DifferenceEngine + */ +class WordLevelDiff extends MappedDiff { + const MAX_LINE_LENGTH = 10000; + + function __construct ( $orig_lines, $closing_lines ) { + wfProfileIn( __METHOD__ ); + + list ( $orig_words, $orig_stripped ) = $this->_split( $orig_lines ); + list ( $closing_words, $closing_stripped ) = $this->_split( $closing_lines ); + + parent::__construct( $orig_words, $closing_words, + $orig_stripped, $closing_stripped ); + wfProfileOut( __METHOD__ ); + } + + function _split( $lines ) { + wfProfileIn( __METHOD__ ); + + $words = array(); + $stripped = array(); + $first = true; + foreach ( $lines as $line ) { + # If the line is too long, just pretend the entire line is one big word + # This prevents resource exhaustion problems + if ( $first ) { + $first = false; + } else { + $words[] = "\n"; + $stripped[] = "\n"; + } + if ( strlen( $line ) > self::MAX_LINE_LENGTH ) { + $words[] = $line; + $stripped[] = $line; + } else { + $m = array(); + if ( preg_match_all( '/ ( [^\S\n]+ | [0-9_A-Za-z\x80-\xff]+ | . ) (?: (?!< \n) [^\S\n])? /xs', + $line, $m ) ) + { + $words = array_merge( $words, $m[0] ); + $stripped = array_merge( $stripped, $m[1] ); + } + } + } + wfProfileOut( __METHOD__ ); + return array( $words, $stripped ); + } + + function orig () { + wfProfileIn( __METHOD__ ); + $orig = new _HWLDF_WordAccumulator; + + foreach ( $this->edits as $edit ) { + if ( $edit->type == 'copy' ) + $orig->addWords( $edit->orig ); + elseif ( $edit->orig ) + $orig->addWords( $edit->orig, 'del' ); + } + $lines = $orig->getLines(); + wfProfileOut( __METHOD__ ); + return $lines; + } + + function closing () { + wfProfileIn( __METHOD__ ); + $closing = new _HWLDF_WordAccumulator; + + foreach ( $this->edits as $edit ) { + if ( $edit->type == 'copy' ) + $closing->addWords( $edit->closing ); + elseif ( $edit->closing ) + $closing->addWords( $edit->closing, 'ins' ); + } + $lines = $closing->getLines(); + wfProfileOut( __METHOD__ ); + return $lines; + } +} + +/** + * Wikipedia Table style diff formatter. + * @todo document + * @private + * @ingroup DifferenceEngine + */ +class TableDiffFormatter extends DiffFormatter { + function __construct() { + $this->leading_context_lines = 2; + $this->trailing_context_lines = 2; + } + + public static function escapeWhiteSpace( $msg ) { + $msg = preg_replace( '/^ /m', '  ', $msg ); + $msg = preg_replace( '/ $/m', '  ', $msg ); + $msg = preg_replace( '/ /', '  ', $msg ); + return $msg; + } + + function _block_header( $xbeg, $xlen, $ybeg, $ylen ) { + $r = '\n" . + '\n"; + return $r; + } + + function _start_block( $header ) { + echo $header; + } + + function _end_block() { + } + + function _lines( $lines, $prefix = ' ', $color = 'white' ) { + } + + # HTML-escape parameter before calling this + function addedLine( $line ) { + return $this->wrapLine( '+', 'diff-addedline', $line ); + } + + # HTML-escape parameter before calling this + function deletedLine( $line ) { + return $this->wrapLine( '−', 'diff-deletedline', $line ); + } + + # HTML-escape parameter before calling this + function contextLine( $line ) { + return $this->wrapLine( ' ', 'diff-context', $line ); + } + + private function wrapLine( $marker, $class, $line ) { + if ( $line !== '' ) { + // The

    wrapper is needed for 'overflow: auto' style to scroll properly + $line = Xml::tags( 'div', null, $this->escapeWhiteSpace( $line ) ); + } + return "$marker$line"; + } + + function emptyLine() { + return ' '; + } + + function _added( $lines ) { + foreach ( $lines as $line ) { + echo '' . $this->emptyLine() . + $this->addedLine( '' . + htmlspecialchars ( $line ) . '' ) . "\n"; + } + } + + function _deleted( $lines ) { + foreach ( $lines as $line ) { + echo '' . $this->deletedLine( '' . + htmlspecialchars ( $line ) . '' ) . + $this->emptyLine() . "\n"; + } + } + + function _context( $lines ) { + foreach ( $lines as $line ) { + echo '' . + $this->contextLine( htmlspecialchars ( $line ) ) . + $this->contextLine( htmlspecialchars ( $line ) ) . "\n"; + } + } + + function _changed( $orig, $closing ) { + wfProfileIn( __METHOD__ ); + + $diff = new WordLevelDiff( $orig, $closing ); + $del = $diff->orig(); + $add = $diff->closing(); + + # Notice that WordLevelDiff returns HTML-escaped output. + # Hence, we will be calling addedLine/deletedLine without HTML-escaping. + + while ( $line = array_shift( $del ) ) { + $aline = array_shift( $add ); + echo '' . $this->deletedLine( $line ) . + $this->addedLine( $aline ) . "\n"; + } + foreach ( $add as $line ) { # If any leftovers + echo '' . $this->emptyLine() . + $this->addedLine( $line ) . "\n"; + } + wfProfileOut( __METHOD__ ); + } +} diff --git a/includes/diff/WikiDiff3.php b/includes/diff/WikiDiff3.php new file mode 100644 index 00000000..8def296d --- /dev/null +++ b/includes/diff/WikiDiff3.php @@ -0,0 +1,586 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file + * @ingroup DifferenceEngine + */ + +/** + * This diff implementation is mainly lifted from the LCS algorithm of the Eclipse project which + * in turn is based on Myers' "An O(ND) difference algorithm and its variations" + * (http://citeseer.ist.psu.edu/myers86ond.html) with range compression (see Wu et al.'s + * "An O(NP) Sequence Comparison Algorithm"). + * + * This implementation supports an upper bound on the excution time. + * + * Complexity: O((M + N)D) worst case time, O(M + N + D^2) expected time, O(M + N) space + * + * @author Guy Van den Broeck + * @ingroup DifferenceEngine + */ +class WikiDiff3 { + + // Input variables + private $from; + private $to; + private $m; + private $n; + + private $tooLong; + private $powLimit; + + // State variables + private $maxDifferences; + private $lcsLengthCorrectedForHeuristic = false; + + // Output variables + public $length; + public $removed; + public $added; + public $heuristicUsed; + + function __construct( $tooLong = 2000000, $powLimit = 1.45 ) { + $this->tooLong = $tooLong; + $this->powLimit = $powLimit; + } + + public function diff( /*array*/ $from, /*array*/ $to ) { + // remember initial lengths + $m = sizeof( $from ); + $n = count( $to ); + + $this->heuristicUsed = false; + + // output + $removed = $m > 0 ? array_fill( 0, $m, true ) : array(); + $added = $n > 0 ? array_fill( 0, $n, true ) : array(); + + // reduce the complexity for the next step (intentionally done twice) + // remove common tokens at the start + $i = 0; + while ( $i < $m && $i < $n && $from[$i] === $to[$i] ) { + $removed[$i] = $added[$i] = false; + unset( $from[$i], $to[$i] ); + ++$i; + } + + // remove common tokens at the end + $j = 1; + while ( $i + $j <= $m && $i + $j <= $n && $from[$m - $j] === $to[$n - $j] ) { + $removed[$m - $j] = $added[$n - $j] = false; + unset( $from[$m - $j], $to[$n - $j] ); + ++$j; + } + + $this->from = $newFromIndex = $this->to = $newToIndex = array(); + + // remove tokens not in both sequences + $shared = array(); + foreach ( $from as $key ) { + $shared[$key] = false; + } + + foreach ( $to as $index => &$el ) { + if ( array_key_exists( $el, $shared ) ) { + // keep it + $this->to[] = $el; + $shared[$el] = true; + $newToIndex[] = $index; + } + } + foreach ( $from as $index => &$el ) { + if ( $shared[$el] ) { + // keep it + $this->from[] = $el; + $newFromIndex[] = $index; + } + } + + unset( $shared, $from, $to ); + + $this->m = count( $this->from ); + $this->n = count( $this->to ); + + $this->removed = $this->m > 0 ? array_fill( 0, $this->m, true ) : array(); + $this->added = $this->n > 0 ? array_fill( 0, $this->n, true ) : array(); + + if ( $this->m == 0 || $this->n == 0 ) { + $this->length = 0; + } else { + $this->maxDifferences = ceil( ( $this->m + $this->n ) / 2.0 ); + if ( $this->m * $this->n > $this->tooLong ) { + // limit complexity to D^POW_LIMIT for long sequences + $this->maxDifferences = floor( pow( $this->maxDifferences, $this->powLimit - 1.0 ) ); + wfDebug( "Limiting max number of differences to $this->maxDifferences\n" ); + } + + /* + * The common prefixes and suffixes are always part of some LCS, include + * them now to reduce our search space + */ + $max = min( $this->m, $this->n ); + for ( $forwardBound = 0; $forwardBound < $max + && $this->from[$forwardBound] === $this->to[$forwardBound]; + ++$forwardBound ) { + $this->removed[$forwardBound] = $this->added[$forwardBound] = false; + } + + $backBoundL1 = $this->m - 1; + $backBoundL2 = $this->n - 1; + + while ( $backBoundL1 >= $forwardBound && $backBoundL2 >= $forwardBound + && $this->from[$backBoundL1] === $this->to[$backBoundL2] ) { + $this->removed[$backBoundL1--] = $this->added[$backBoundL2--] = false; + } + + $temp = array_fill( 0, $this->m + $this->n + 1, 0 ); + $V = array( $temp, $temp ); + $snake = array( 0, 0, 0 ); + + $this->length = $forwardBound + $this->m - $backBoundL1 - 1 + + $this->lcs_rec( $forwardBound, $backBoundL1, + $forwardBound, $backBoundL2, $V, $snake ); + } + + $this->m = $m; + $this->n = $n; + + $this->length += $i + $j - 1; + + foreach ( $this->removed as $key => &$removed_elem ) { + if ( !$removed_elem ) { + $removed[$newFromIndex[$key]] = false; + } + } + foreach ( $this->added as $key => &$added_elem ) { + if ( !$added_elem ) { + $added[$newToIndex[$key]] = false; + } + } + $this->removed = $removed; + $this->added = $added; + } + + function diff_range( $from_lines, $to_lines ) { + // Diff and store locally + $this->diff( $from_lines, $to_lines ); + unset( $from_lines, $to_lines ); + + $ranges = array(); + $xi = $yi = 0; + while ( $xi < $this->m || $yi < $this->n ) { + // Matching "snake". + while ( $xi < $this->m && $yi < $this->n + && !$this->removed[$xi] + && !$this->added[$yi] ) { + ++$xi; + ++$yi; + } + // Find deletes & adds. + $xstart = $xi; + while ( $xi < $this->m && $this->removed[$xi] ) { + ++$xi; + } + + $ystart = $yi; + while ( $yi < $this->n && $this->added[$yi] ) { + ++$yi; + } + + if ( $xi > $xstart || $yi > $ystart ) { + $ranges[] = new RangeDifference( $xstart, $xi, + $ystart, $yi ); + } + } + return $ranges; + } + + private function lcs_rec( $bottoml1, $topl1, $bottoml2, $topl2, &$V, &$snake ) { + // check that both sequences are non-empty + if ( $bottoml1 > $topl1 || $bottoml2 > $topl2 ) { + return 0; + } + + $d = $this->find_middle_snake( $bottoml1, $topl1, $bottoml2, + $topl2, $V, $snake ); + + // need to store these so we don't lose them when they're + // overwritten by the recursion + $len = $snake[2]; + $startx = $snake[0]; + $starty = $snake[1]; + + // the middle snake is part of the LCS, store it + for ( $i = 0; $i < $len; ++$i ) { + $this->removed[$startx + $i] = $this->added[$starty + $i] = false; + } + + if ( $d > 1 ) { + return $len + + $this->lcs_rec( $bottoml1, $startx - 1, $bottoml2, + $starty - 1, $V, $snake ) + + $this->lcs_rec( $startx + $len, $topl1, $starty + $len, + $topl2, $V, $snake ); + } else if ( $d == 1 ) { + /* + * In this case the sequences differ by exactly 1 line. We have + * already saved all the lines after the difference in the for loop + * above, now we need to save all the lines before the difference. + */ + $max = min( $startx - $bottoml1, $starty - $bottoml2 ); + for ( $i = 0; $i < $max; ++$i ) { + $this->removed[$bottoml1 + $i] = + $this->added[$bottoml2 + $i] = false; + } + return $max + $len; + } + return $len; + } + + private function find_middle_snake( $bottoml1, $topl1, $bottoml2, $topl2, &$V, &$snake ) { + $from = &$this->from; + $to = &$this->to; + $V0 = &$V[0]; + $V1 = &$V[1]; + $snake0 = &$snake[0]; + $snake1 = &$snake[1]; + $snake2 = &$snake[2]; + $bottoml1_min_1 = $bottoml1 -1; + $bottoml2_min_1 = $bottoml2 -1; + $N = $topl1 - $bottoml1_min_1; + $M = $topl2 - $bottoml2_min_1; + $delta = $N - $M; + $maxabsx = $N + $bottoml1; + $maxabsy = $M + $bottoml2; + $limit = min( $this->maxDifferences, ceil( ( $N + $M ) / 2 ) ); + + // value_to_add_forward: a 0 or 1 that we add to the start + // offset to make it odd/even + if ( ( $M & 1 ) == 1 ) { + $value_to_add_forward = 1; + } else { + $value_to_add_forward = 0; + } + + if ( ( $N & 1 ) == 1 ) { + $value_to_add_backward = 1; + } else { + $value_to_add_backward = 0; + } + + $start_forward = -$M; + $end_forward = $N; + $start_backward = -$N; + $end_backward = $M; + + $limit_min_1 = $limit - 1; + $limit_plus_1 = $limit + 1; + + $V0[$limit_plus_1] = 0; + $V1[$limit_min_1] = $N; + $limit = min( $this->maxDifferences, ceil( ( $N + $M ) / 2 ) ); + + if ( ( $delta & 1 ) == 1 ) { + for ( $d = 0; $d <= $limit; ++$d ) { + $start_diag = max( $value_to_add_forward + $start_forward, -$d ); + $end_diag = min( $end_forward, $d ); + $value_to_add_forward = 1 - $value_to_add_forward; + + // compute forward furthest reaching paths + for ( $k = $start_diag; $k <= $end_diag; $k += 2 ) { + if ( $k == -$d || ( $k < $d + && $V0[$limit_min_1 + $k] < $V0[$limit_plus_1 + $k] ) ) { + $x = $V0[$limit_plus_1 + $k]; + } else { + $x = $V0[$limit_min_1 + $k] + 1; + } + + $absx = $snake0 = $x + $bottoml1; + $absy = $snake1 = $x - $k + $bottoml2; + + while ( $absx < $maxabsx && $absy < $maxabsy && $from[$absx] === $to[$absy] ) { + ++$absx; + ++$absy; + } + $x = $absx -$bottoml1; + + $snake2 = $absx -$snake0; + $V0[$limit + $k] = $x; + if ( $k >= $delta - $d + 1 && $k <= $delta + $d - 1 + && $x >= $V1[$limit + $k - $delta] ) { + return 2 * $d - 1; + } + + // check to see if we can cut down the diagonal range + if ( $x >= $N && $end_forward > $k - 1 ) { + $end_forward = $k - 1; + } else if ( $absy - $bottoml2 >= $M ) { + $start_forward = $k + 1; + $value_to_add_forward = 0; + } + } + + $start_diag = max( $value_to_add_backward + $start_backward, -$d ); + $end_diag = min( $end_backward, $d ); + $value_to_add_backward = 1 - $value_to_add_backward; + + // compute backward furthest reaching paths + for ( $k = $start_diag; $k <= $end_diag; $k += 2 ) { + if ( $k == $d + || ( $k != -$d && $V1[$limit_min_1 + $k] < $V1[$limit_plus_1 + $k] ) ) { + $x = $V1[$limit_min_1 + $k]; + } else { + $x = $V1[$limit_plus_1 + $k] - 1; + } + + $y = $x - $k - $delta; + + $snake2 = 0; + while ( $x > 0 && $y > 0 + && $from[$x + $bottoml1_min_1] === $to[$y + $bottoml2_min_1] ) { + --$x; + --$y; + ++$snake2; + } + $V1[$limit + $k] = $x; + + // check to see if we can cut down our diagonal range + if ( $x <= 0 ) { + $start_backward = $k + 1; + $value_to_add_backward = 0; + } else if ( $y <= 0 && $end_backward > $k - 1 ) { + $end_backward = $k - 1; + } + } + } + } else { + for ( $d = 0; $d <= $limit; ++$d ) { + $start_diag = max( $value_to_add_forward + $start_forward, -$d ); + $end_diag = min( $end_forward, $d ); + $value_to_add_forward = 1 - $value_to_add_forward; + + // compute forward furthest reaching paths + for ( $k = $start_diag; $k <= $end_diag; $k += 2 ) { + if ( $k == -$d + || ( $k < $d && $V0[$limit_min_1 + $k] < $V0[$limit_plus_1 + $k] ) ) { + $x = $V0[$limit_plus_1 + $k]; + } else { + $x = $V0[$limit_min_1 + $k] + 1; + } + + $absx = $snake0 = $x + $bottoml1; + $absy = $snake1 = $x - $k + $bottoml2; + + while ( $absx < $maxabsx && $absy < $maxabsy && $from[$absx] === $to[$absy] ) { + ++$absx; + ++$absy; + } + $x = $absx -$bottoml1; + $snake2 = $absx -$snake0; + $V0[$limit + $k] = $x; + + // check to see if we can cut down the diagonal range + if ( $x >= $N && $end_forward > $k - 1 ) { + $end_forward = $k - 1; + } else if ( $absy -$bottoml2 >= $M ) { + $start_forward = $k + 1; + $value_to_add_forward = 0; + } + } + + $start_diag = max( $value_to_add_backward + $start_backward, -$d ); + $end_diag = min( $end_backward, $d ); + $value_to_add_backward = 1 - $value_to_add_backward; + + // compute backward furthest reaching paths + for ( $k = $start_diag; $k <= $end_diag; $k += 2 ) { + if ( $k == $d + || ( $k != -$d && $V1[$limit_min_1 + $k] < $V1[$limit_plus_1 + $k] ) ) { + $x = $V1[$limit_min_1 + $k]; + } else { + $x = $V1[$limit_plus_1 + $k] - 1; + } + + $y = $x - $k - $delta; + + $snake2 = 0; + while ( $x > 0 && $y > 0 + && $from[$x + $bottoml1_min_1] === $to[$y + $bottoml2_min_1] ) { + --$x; + --$y; + ++$snake2; + } + $V1[$limit + $k] = $x; + + if ( $k >= -$delta - $d && $k <= $d - $delta + && $x <= $V0[$limit + $k + $delta] ) { + $snake0 = $bottoml1 + $x; + $snake1 = $bottoml2 + $y; + return 2 * $d; + } + + // check to see if we can cut down our diagonal range + if ( $x <= 0 ) { + $start_backward = $k + 1; + $value_to_add_backward = 0; + } else if ( $y <= 0 && $end_backward > $k - 1 ) { + $end_backward = $k - 1; + } + } + } + } + /* + * computing the true LCS is too expensive, instead find the diagonal + * with the most progress and pretend a midle snake of length 0 occurs + * there. + */ + + $most_progress = self::findMostProgress( $M, $N, $limit, $V ); + + $snake0 = $bottoml1 + $most_progress[0]; + $snake1 = $bottoml2 + $most_progress[1]; + $snake2 = 0; + wfDebug( "Computing the LCS is too expensive. Using a heuristic.\n" ); + $this->heuristicUsed = true; + return 5; /* + * HACK: since we didn't really finish the LCS computation + * we don't really know the length of the SES. We don't do + * anything with the result anyway, unless it's <=1. We know + * for a fact SES > 1 so 5 is as good a number as any to + * return here + */ + } + + private static function findMostProgress( $M, $N, $limit, $V ) { + $delta = $N - $M; + + if ( ( $M & 1 ) == ( $limit & 1 ) ) { + $forward_start_diag = max( -$M, -$limit ); + } else { + $forward_start_diag = max( 1 - $M, -$limit ); + } + + $forward_end_diag = min( $N, $limit ); + + if ( ( $N & 1 ) == ( $limit & 1 ) ) { + $backward_start_diag = max( -$N, -$limit ); + } else { + $backward_start_diag = max( 1 - $N, -$limit ); + } + + $backward_end_diag = -min( $M, $limit ); + + $temp = array( 0, 0, 0 ); + + + $max_progress = array_fill( 0, ceil( max( $forward_end_diag - $forward_start_diag, + $backward_end_diag - $backward_start_diag ) / 2 ), $temp ); + $num_progress = 0; // the 1st entry is current, it is initialized + // with 0s + + // first search the forward diagonals + for ( $k = $forward_start_diag; $k <= $forward_end_diag; $k += 2 ) { + $x = $V[0][$limit + $k]; + $y = $x - $k; + if ( $x > $N || $y > $M ) { + continue; + } + + $progress = $x + $y; + if ( $progress > $max_progress[0][2] ) { + $num_progress = 0; + $max_progress[0][0] = $x; + $max_progress[0][1] = $y; + $max_progress[0][2] = $progress; + } else if ( $progress == $max_progress[0][2] ) { + ++$num_progress; + $max_progress[$num_progress][0] = $x; + $max_progress[$num_progress][1] = $y; + $max_progress[$num_progress][2] = $progress; + } + } + + $max_progress_forward = true; // initially the maximum + // progress is in the forward + // direction + + // now search the backward diagonals + for ( $k = $backward_start_diag; $k <= $backward_end_diag; $k += 2 ) { + $x = $V[1][$limit + $k]; + $y = $x - $k - $delta; + if ( $x < 0 || $y < 0 ) { + continue; + } + + $progress = $N - $x + $M - $y; + if ( $progress > $max_progress[0][2] ) { + $num_progress = 0; + $max_progress_forward = false; + $max_progress[0][0] = $x; + $max_progress[0][1] = $y; + $max_progress[0][2] = $progress; + } else if ( $progress == $max_progress[0][2] && !$max_progress_forward ) { + ++$num_progress; + $max_progress[$num_progress][0] = $x; + $max_progress[$num_progress][1] = $y; + $max_progress[$num_progress][2] = $progress; + } + } + + // return the middle diagonal with maximal progress. + return $max_progress[floor( $num_progress / 2 )]; + } + + public function getLcsLength() { + if ( $this->heuristicUsed && !$this->lcsLengthCorrectedForHeuristic ) { + $this->lcsLengthCorrectedForHeuristic = true; + $this->length = $this->m -array_sum( $this->added ); + } + return $this->length; + } + +} + +/** + * Alternative representation of a set of changes, by the index + * ranges that are changed. + * + * @ingroup DifferenceEngine + */ +class RangeDifference { + + public $leftstart; + public $leftend; + public $leftlength; + + public $rightstart; + public $rightend; + public $rightlength; + + function __construct( $leftstart, $leftend, $rightstart, $rightend ) { + $this->leftstart = $leftstart; + $this->leftend = $leftend; + $this->leftlength = $leftend - $leftstart; + $this->rightstart = $rightstart; + $this->rightend = $rightend; + $this->rightlength = $rightend - $rightstart; + } +} diff --git a/includes/extauth/Hardcoded.php b/includes/extauth/Hardcoded.php index a9a60bea..dfb46742 100644 --- a/includes/extauth/Hardcoded.php +++ b/includes/extauth/Hardcoded.php @@ -1,21 +1,26 @@ mDb = new $class( - $wgExternalAuthConf['DBserver'], - $wgExternalAuthConf['DBuser'], - $wgExternalAuthConf['DBpassword'], - $wgExternalAuthConf['DBname'], - false, - 0, - $wgExternalAuthConf['DBprefix'] + $this->mDb = DatabaseBase::newFromType( $wgExternalAuthConf['DBtype'], + array( + 'server' => $wgExternalAuthConf['DBserver'], + 'user' => $wgExternalAuthConf['DBuser'], + 'password' => $wgExternalAuthConf['DBpassword'], + 'dbname' => $wgExternalAuthConf['DBname'], + 'tableprefix' => $wgExternalAuthConf['DBprefix'], + ) ); $row = $this->mDb->selectRow( diff --git a/includes/extauth/vB.php b/includes/extauth/vB.php index 23523665..860048f3 100644 --- a/includes/extauth/vB.php +++ b/includes/extauth/vB.php @@ -1,21 +1,26 @@ initFromCond( array( 'username' => $name ) ); @@ -50,13 +55,13 @@ class ExternalUser_vB extends ExternalUser { # Try using the session table. It will only have a row if the user has # an active session, so it might not always work, but it's a lot easier # than trying to convince PHP to give us vB's $_SESSION. - global $wgExternalAuthConf; + global $wgExternalAuthConf, $wgRequest; if ( !isset( $wgExternalAuthConf['cookieprefix'] ) ) { $prefix = 'bb'; } else { $prefix = $wgExternalAuthConf['cookieprefix']; } - if ( !isset( $_COOKIE["{$prefix}sessionhash"] ) ) { + if ( $wgRequest->getCookie( 'sessionhash', $prefix ) === null ) { return false; } @@ -67,7 +72,7 @@ class ExternalUser_vB extends ExternalUser { $this->getFields(), array( 'session.userid = user.userid', - 'sessionhash' => $_COOKIE["{$prefix}sessionhash"] + 'sessionhash' => $wgRequest->getCookie( 'sessionhash', $prefix ), ), __METHOD__ ); diff --git a/includes/filerepo/ArchivedFile.php b/includes/filerepo/ArchivedFile.php index ffc06303..ecc09978 100644 --- a/includes/filerepo/ArchivedFile.php +++ b/includes/filerepo/ArchivedFile.php @@ -1,10 +1,17 @@ id = -1; $this->title = false; $this->name = false; @@ -140,7 +147,6 @@ class ArchivedFile $this->deleted = $row->fa_deleted; } else { throw new MWException( 'This title does not correspond to an image page.' ); - return; } $this->dataLoaded = true; $this->exists = true; @@ -219,7 +225,7 @@ class ArchivedFile * Return the FileStore storage group */ public function getGroup() { - return $file->group; + return $this->group; } /** diff --git a/includes/filerepo/FSRepo.php b/includes/filerepo/FSRepo.php index 0dd9d0f7..e2251b2b 100644 --- a/includes/filerepo/FSRepo.php +++ b/includes/filerepo/FSRepo.php @@ -1,4 +1,10 @@ name}/temp"; @@ -343,8 +349,8 @@ class FSRepo extends FileRepo { /** * Publish a batch of files - * @param array $triplets (source,dest,archive) triplets as per publish() - * @param integer $flags Bitfield, may be FileRepo::DELETE_SOURCE to indicate + * @param $triplets Array: (source,dest,archive) triplets as per publish() + * @param $flags Integer: bitfield, may be FileRepo::DELETE_SOURCE to indicate * that the source files should be deleted if possible */ function publishBatch( $triplets, $flags = 0 ) { @@ -454,7 +460,7 @@ class FSRepo extends FileRepo { * If no valid deletion archive is configured, this may either delete the * file or throw an exception, depending on the preference of the repository. * - * @param array $sourceDestPairs Array of source/destination pairs. Each element + * @param $sourceDestPairs Array of source/destination pairs. Each element * is a two-element array containing the source file path relative to the * public root in the first element, and the archive file path relative * to the deleted zone root in the second element. @@ -615,7 +621,7 @@ class FSRepo extends FileRepo { /** * Chmod a file, supressing the warnings. - * @param String $path The path to change + * @param $path String: the path to change */ protected function chmod( $path ) { wfSuppressWarnings(); diff --git a/includes/filerepo/File.php b/includes/filerepo/File.php index d79a1661..192e8c8a 100644 --- a/includes/filerepo/File.php +++ b/includes/filerepo/File.php @@ -1,4 +1,10 @@ getUrl() ); @@ -259,6 +266,19 @@ abstract class File { } } + /** + * Return true if the file is vectorized + */ + public function isVectorized() { + $handler = $this->getHandler(); + if ( $handler ) { + return $handler->isVectorized( $this ); + } else { + return false; + } + } + + /** * Get handler-specific metadata * Overridden by LocalFile, UnregisteredLocalFile @@ -437,26 +457,21 @@ abstract class File { /** * Get a ThumbnailImage which is the same size as the source */ - function getUnscaledThumb( $page = false ) { + function getUnscaledThumb( $handlerParams = array() ) { + $hp =& $handlerParams; + $page = isset( $hp['page'] ) ? $hp['page'] : false; $width = $this->getWidth( $page ); if ( !$width ) { return $this->iconThumb(); } - if ( $page ) { - $params = array( - 'page' => $page, - 'width' => $this->getWidth( $page ) - ); - } else { - $params = array( 'width' => $this->getWidth() ); - } - return $this->transform( $params ); + $hp['width'] = $width; + return $this->transform( $hp ); } /** * Return the file name of a thumbnail with the specified parameters * - * @param array $params Handler-specific parameters + * @param $params Array: handler-specific parameters * @private -ish */ function thumbName( $params ) { @@ -464,7 +479,7 @@ abstract class File { return null; } $extension = $this->getExtension(); - list( $thumbExt, $thumbMime ) = $this->handler->getThumbType( $extension, $this->getMimeType() ); + list( $thumbExt, $thumbMime ) = $this->handler->getThumbType( $extension, $this->getMimeType(), $params ); $thumbName = $this->handler->makeParamString( $params ) . '-' . $this->getName(); if ( $thumbExt != $extension ) { $thumbName .= ".$thumbExt"; @@ -484,8 +499,8 @@ abstract class File { * specified, the generated image will be no bigger than width x height, * and will also have correct aspect ratio. * - * @param integer $width maximum width of the generated thumbnail - * @param integer $height maximum height of the image (optional) + * @param $width Integer: maximum width of the generated thumbnail + * @param $height Integer: maximum height of the image (optional) */ public function createThumb( $width, $height = -1 ) { $params = array( 'width' => $width ); @@ -500,19 +515,20 @@ abstract class File { /** * As createThumb, but returns a ThumbnailImage object. This can * provide access to the actual file, the real size of the thumb, - * and can produce a convenient tag for you. + * and can produce a convenient \ tag for you. * * For non-image formats, this may return a filetype-specific icon. * - * @param integer $width maximum width of the generated thumbnail - * @param integer $height maximum height of the image (optional) - * @param boolean $render Deprecated + * @param $width Integer: maximum width of the generated thumbnail + * @param $height Integer: maximum height of the image (optional) + * @param $render Integer: Deprecated * * @return ThumbnailImage or null on failure * * @deprecated use transform() */ public function getThumbnail( $width, $height=-1, $render = true ) { + wfDeprecated( __METHOD__ ); $params = array( 'width' => $width ); if ( $height != -1 ) { $params['height'] = $height; @@ -523,10 +539,10 @@ abstract class File { /** * Transform a media file * - * @param array $params An associative array of handler-specific parameters. Typical - * keys are width, height and page. - * @param integer $flags A bitfield, may contain self::RENDER_NOW to force rendering - * @return MediaTransformOutput + * @param $params Array: an associative array of handler-specific parameters. + * Typical keys are width, height and page. + * @param $flags Integer: a bitfield, may contain self::RENDER_NOW to force rendering + * @return MediaTransformOutput | false */ function transform( $params, $flags = 0 ) { global $wgUseSquid, $wgIgnoreImageErrors, $wgThumbnailEpoch, $wgServer; @@ -560,7 +576,7 @@ abstract class File { $thumbPath = $this->getThumbPath( $thumbName ); $thumbUrl = $this->getThumbUrl( $thumbName ); - if ( $this->repo->canTransformVia404() && !($flags & self::RENDER_NOW ) ) { + if ( $this->repo && $this->repo->canTransformVia404() && !($flags & self::RENDER_NOW ) ) { $thumb = $this->handler->getTransform( $this, $thumbPath, $thumbUrl, $params ); break; } @@ -842,19 +858,18 @@ abstract class File { /** * Move or copy a file to its public location. If a file exists at the - * destination, move it to an archive. Returns the archive name on success - * or an empty string if it was a new file, and a wikitext-formatted - * WikiError object on failure. + * destination, move it to an archive. Returns a FileRepoStatus object with + * the archive name in the "value" member on success. * * The archive name should be passed through to recordUpload for database * registration. * - * @param string $sourcePath Local filesystem path to the source image - * @param integer $flags A bitwise combination of: + * @param $srcPath String: local filesystem path to the source image + * @param $flags Integer: a bitwise combination of: * File::DELETE_SOURCE Delete the source file, i.e. move * rather than copy - * @return The archive name on success or an empty string if it was a new - * file, and a wikitext-formatted WikiError object on failure. + * @return FileRepoStatus object. On success, the value member contains the + * archive name, or an empty string if it was a new file. * * STUB * Overridden by LocalFile @@ -872,6 +887,7 @@ abstract class File { * @deprecated Use HTMLCacheUpdate, this function uses too much memory */ function getLinksTo( $options = array() ) { + wfDeprecated( __METHOD__ ); wfProfileIn( __METHOD__ ); // Note: use local DB not repo DB, we want to know local links @@ -884,21 +900,21 @@ abstract class File { $encName = $db->addQuotes( $this->getName() ); $res = $db->select( array( 'page', 'imagelinks'), - array( 'page_namespace', 'page_title', 'page_id', 'page_len', 'page_is_redirect' ), - array( 'page_id' => 'il_from', 'il_to' => $encName ), + array( 'page_namespace', 'page_title', 'page_id', 'page_len', 'page_is_redirect', 'page_latest' ), + array( 'page_id=il_from', 'il_to' => $encName ), __METHOD__, $options ); $retVal = array(); if ( $db->numRows( $res ) ) { - while ( $row = $db->fetchObject( $res ) ) { - if ( $titleObj = Title::newFromRow( $row ) ) { - $linkCache->addGoodLinkObj( $row->page_id, $titleObj, $row->page_len, $row->page_is_redirect ); + foreach ( $res as $row ) { + $titleObj = Title::newFromRow( $row ); + if ( $titleObj ) { + $linkCache->addGoodLinkObj( $row->page_id, $titleObj, $row->page_len, $row->page_is_redirect, $row->page_latest ); $retVal[] = $titleObj; } } } - $db->freeResult( $res ); wfProfileOut( __METHOD__ ); return $retVal; } @@ -916,7 +932,8 @@ abstract class File { * @return bool */ function isLocal() { - return $this->getRepoName() == 'local'; + $repo = $this->getRepo(); + return $repo && $repo->isLocal(); } /** @@ -992,8 +1009,8 @@ abstract class File { * * Cache purging is done; logging is caller's responsibility. * - * @param $reason - * @param $suppress, hide content from sysops? + * @param $reason String + * @param $suppress Boolean: hide content from sysops? * @return true on success, false on some kind of failure * STUB * Overridden by LocalFile @@ -1010,7 +1027,7 @@ abstract class File { * * @param $versions set of record ids of deleted items to restore, * or empty to restore all revisions. - * @param $unsuppress, remove restrictions on content upon restoration? + * @param $unsuppress remove restrictions on content upon restoration? * @return the number of file revisions restored if successful, * or false on failure * STUB @@ -1032,7 +1049,7 @@ abstract class File { } /** - * Returns the number of pages of a multipage document, or NULL for + * Returns the number of pages of a multipage document, or false for * documents which aren't multipage documents */ function pageCount() { @@ -1059,11 +1076,11 @@ abstract class File { } /** - * Get an image size array like that returned by getimagesize(), or false if it + * Get an image size array like that returned by getImageSize(), or false if it * can't be determined. * - * @param string $fileName The filename - * @return array + * @param $fileName String: The filename + * @return Array */ function getImageSize( $fileName ) { if ( !$this->getHandler() ) { @@ -1156,8 +1173,8 @@ abstract class File { * Determine if the current user is allowed to view a particular * field of this file, if it's marked as deleted. * STUB - * @param int $field - * @return bool + * @param $field Integer + * @return Boolean */ function userCan( $field ) { return true; @@ -1166,9 +1183,9 @@ abstract class File { /** * Get an associative array containing information about a file in the local filesystem. * - * @param string $path Absolute local filesystem path - * @param mixed $ext The file extension, or true to extract it from the filename. - * Set it to false to ignore the extension. + * @param $path String: absolute local filesystem path + * @param $ext Mixed: the file extension, or true to extract it from the filename. + * Set it to false to ignore the extension. */ static function getPropsFromPath( $path, $ext = true ) { wfProfileIn( __METHOD__ ); @@ -1180,7 +1197,16 @@ abstract class File { if ( $info['fileExists'] ) { $magic = MimeMagic::singleton(); - $info['mime'] = $magic->guessMimeType( $path, $ext ); + if ( $ext === true ) { + $i = strrpos( $path, '.' ); + $ext = strtolower( $i ? substr( $path, $i + 1 ) : '' ); + } + + # mime type according to file contents + $info['file-mime'] = $magic->guessMimeType( $path, false ); + # logical mime type + $info['mime'] = $magic->improveTypeFromExtension( $info['file-mime'], $ext ); + list( $info['major_mime'], $info['minor_mime'] ) = self::splitMime( $info['mime'] ); $info['media_type'] = $magic->getMediaType( $path, $info['mime'] ); diff --git a/includes/filerepo/FileRepo.php b/includes/filerepo/FileRepo.php index f94709b3..ff73a73c 100644 --- a/includes/filerepo/FileRepo.php +++ b/includes/filerepo/FileRepo.php @@ -1,8 +1,15 @@ initialCapital = MWNamespace::isCapitalized( NS_FILE ); foreach ( array( 'descBaseUrl', 'scriptDirUrl', 'articleUrl', 'fetchDescription', 'thumbScriptUrl', 'initialCapital', 'pathDisclosureProtection', - 'descriptionCacheExpiry', 'hashLevels', 'url', 'thumbUrl' ) as $var ) + 'descriptionCacheExpiry', 'hashLevels', 'url', 'thumbUrl', 'scriptExtension' ) + as $var ) { if ( isset( $info[$var] ) ) { $this->$var = $info[$var]; @@ -49,12 +58,13 @@ abstract class FileRepo { /** * Create a new File object from the local repository - * @param mixed $title Title object or string - * @param mixed $time Time at which the image was uploaded. - * If this is specified, the returned object will be an - * instance of the repository's old file class instead of - * a current file. Repositories not supporting version - * control should return false if this parameter is set. + * + * @param $title Mixed: Title object or string + * @param $time Mixed: Time at which the image was uploaded. + * If this is specified, the returned object will be an + * instance of the repository's old file class instead of a + * current file. Repositories not supporting version control + * should return false if this parameter is set. */ function newFile( $title, $time = false ) { if ( !($title instanceof Title) ) { @@ -79,7 +89,7 @@ abstract class FileRepo { * Returns false if the file does not exist. Repositories not supporting * version control should return false if the time is specified. * - * @param mixed $title Title object or string + * @param $title Mixed: Title object or string * @param $options Associative array of options: * time: requested time for an archived image, or false for the * current version. An image object will be returned which was @@ -144,7 +154,7 @@ abstract class FileRepo { /* * Find many files at once. - * @param array $items, an array of titles, or an array of findFile() options with + * @param $items An array of titles, or an array of findFile() options with * the "title" option giving the title. Example: * * $findItem = array( 'title' => $title, 'private' => true ); @@ -153,7 +163,7 @@ abstract class FileRepo { */ function findFiles( $items ) { $result = array(); - foreach ( $items as $index => $item ) { + foreach ( $items as $item ) { if ( is_array( $item ) ) { $title = $item['title']; $options = $item; @@ -163,31 +173,33 @@ abstract class FileRepo { $options = array(); } $file = $this->findFile( $title, $options ); - if ( $file ) + if ( $file ) { $result[$file->getTitle()->getDBkey()] = $file; + } } return $result; } /** * Create a new File object from the local repository - * @param mixed $sha1 SHA-1 key - * @param mixed $time Time at which the image was uploaded. - * If this is specified, the returned object will be an - * instance of the repository's old file class instead of - * a current file. Repositories not supporting version - * control should return false if this parameter is set. + * @param $sha1 Mixed: SHA-1 key + * @param $time Mixed: time at which the image was uploaded. + * If this is specified, the returned object will be an + * of the repository's old file class instead of a current + * file. Repositories not supporting version control should + * return false if this parameter is set. */ function newFileFromKey( $sha1, $time = false ) { if ( $time ) { if ( $this->oldFileFactoryKey ) { return call_user_func( $this->oldFileFactoryKey, $sha1, $this, $time ); - } else { - return false; } } else { - return call_user_func( $this->fileFactoryKey, $sha1, $this ); + if ( $this->fileFactoryKey ) { + return call_user_func( $this->fileFactoryKey, $sha1, $this ); + } } + return false; } /** @@ -195,8 +207,8 @@ abstract class FileRepo { * Returns false if the file does not exist. Repositories not supporting * version control should return false if the time is specified. * - * @param string $sha1 string - * @param array $options Option array, same as findFile(). + * @param $sha1 String + * @param $options Option array, same as findFile(). */ function findFileFromKey( $sha1, $options = array() ) { if ( !is_array( $options ) ) { @@ -217,7 +229,7 @@ abstract class FileRepo { # Now try an old version of the file if ( $time !== false ) { $img = $this->newFileFromKey( $sha1, $time ); - if ( $img->exists() ) { + if ( $img && $img->exists() ) { if ( !$img->isDeleted(File::DELETED_FILE) ) { return $img; } else if ( !empty( $options['private'] ) && $img->userCan(File::DELETED_FILE) ) { @@ -237,7 +249,7 @@ abstract class FileRepo { /** * Get the URL corresponding to one of the four basic zones - * @param String $zone One of: public, deleted, temp, thumb + * @param $zone String: one of: public, deleted, temp, thumb * @return String or false */ function getZoneUrl( $zone ) { @@ -255,7 +267,6 @@ abstract class FileRepo { * Get the name of an image from its title object */ function getNameFromTitle( $title ) { - global $wgCapitalLinks; if ( $this->initialCapital != MWNamespace::isCapitalized( NS_FILE ) ) { global $wgContLang; $name = $title->getUserCaseDBKey(); @@ -295,6 +306,18 @@ abstract class FileRepo { function getName() { return $this->name; } + + /** + * Make an url to this repo + * + * @param $query mixed Query string to append + * @param $entry string Entry point; defaults to index + * @return string + */ + function makeUrl( $query = '', $entry = 'index' ) { + $ext = isset( $this->scriptExtension ) ? $this->scriptExtension : '.php'; + return wfAppendQuery( "{$this->scriptDirUrl}/{$entry}{$ext}", $query ); + } /** * Get the URL of an image description page. May return false if it is @@ -325,8 +348,7 @@ abstract class FileRepo { # We use "Image:" as the canonical namespace for # compatibility across all MediaWiki versions, # and just sort of hope index.php is right. ;) - return $this->scriptDirUrl . - "/index.php?title=Image:$encName"; + return $this->makeUrl( "title=Image:$encName" ); } return false; } @@ -336,8 +358,8 @@ abstract class FileRepo { * MediaWiki this means action=render. This should only be called by the * repository's file class, since it may return invalid results. User code * should use File::getDescriptionText(). - * @param string $name Name of image to fetch - * @param string $lang Language to fetch it in, if any. + * @param $name String: name of image to fetch + * @param $lang String: language to fetch it in, if any. */ function getDescriptionRenderUrl( $name, $lang = null ) { $query = 'action=render'; @@ -345,9 +367,10 @@ abstract class FileRepo { $query .= '&uselang=' . $lang; } if ( isset( $this->scriptDirUrl ) ) { - return $this->scriptDirUrl . '/index.php?title=' . + return $this->makeUrl( + 'title=' . wfUrlencode( 'Image:' . $name ) . - "&$query"; + "&$query" ); } else { $descUrl = $this->getDescriptionUrl( $name ); if ( $descUrl ) { @@ -357,14 +380,25 @@ abstract class FileRepo { } } } + + /** + * Get the URL of the stylesheet to apply to description pages + * @return string + */ + function getDescriptionStylesheetUrl() { + if ( $this->scriptDirUrl ) { + return $this->makeUrl( 'title=MediaWiki:Filepage.css&' . + wfArrayToCGI( Skin::getDynamicStylesheetQuery() ) ); + } + } /** * Store a file to a given destination. * - * @param string $srcPath Source path or virtual URL - * @param string $dstZone Destination zone - * @param string $dstRel Destination relative path - * @param integer $flags Bitwise combination of the following flags: + * @param $srcPath String: source path or virtual URL + * @param $dstZone String: destination zone + * @param $dstRel String: destination relative path + * @param $flags Integer: bitwise combination of the following flags: * self::DELETE_SOURCE Delete the source file after upload * self::OVERWRITE Overwrite an existing destination file instead of failing * self::OVERWRITE_SAME Overwrite the file if the destination exists and has the @@ -382,8 +416,8 @@ abstract class FileRepo { /** * Store a batch of files * - * @param array $triplets (src,zone,dest) triplets as per store() - * @param integer $flags Flags as per store + * @param $triplets Array: (src,zone,dest) triplets as per store() + * @param $flags Integer: flags as per store */ abstract function storeBatch( $triplets, $flags = 0 ); @@ -391,18 +425,18 @@ abstract class FileRepo { * Pick a random name in the temp zone and store a file to it. * Returns a FileRepoStatus object with the URL in the value. * - * @param string $originalName The base name of the file as specified + * @param $originalName String: the base name of the file as specified * by the user. The file extension will be maintained. - * @param string $srcPath The current location of the file. + * @param $srcPath String: the current location of the file. */ abstract function storeTemp( $originalName, $srcPath ); /** * Append the contents of the source path to the given file. - * @param $srcPath string location of the source file - * @param $toAppendPath string path to append to. - * @param $flags Bitfield, may be FileRepo::DELETE_SOURCE to indicate + * @param $srcPath String: location of the source file + * @param $toAppendPath String: path to append to. + * @param $flags Integer: bitfield, may be FileRepo::DELETE_SOURCE to indicate * that the source file should be deleted if possible * @return mixed Status or false */ @@ -410,8 +444,8 @@ abstract class FileRepo { /** * Remove a temporary file or mark it for garbage collection - * @param string $virtualUrl The virtual URL returned by storeTemp - * @return boolean True on success, false on failure + * @param $virtualUrl String: the virtual URL returned by storeTemp + * @return Boolean: true on success, false on failure * STUB */ function freeTemp( $virtualUrl ) { @@ -425,11 +459,11 @@ abstract class FileRepo { * Returns a FileRepoStatus object. On success, the value contains "new" or * "archived", to indicate whether the file was new with that name. * - * @param string $srcPath The source path or URL - * @param string $dstRel The destination relative path - * @param string $archiveRel The relative path where the existing file is to + * @param $srcPath String: the source path or URL + * @param $dstRel String: the destination relative path + * @param $archiveRel String: rhe relative path where the existing file is to * be archived, if there is one. Relative to the public zone root. - * @param integer $flags Bitfield, may be FileRepo::DELETE_SOURCE to indicate + * @param $flags Integer: bitfield, may be FileRepo::DELETE_SOURCE to indicate * that the source file should be deleted if possible */ function publish( $srcPath, $dstRel, $archiveRel, $flags = 0 ) { @@ -447,8 +481,8 @@ abstract class FileRepo { /** * Publish a batch of files - * @param array $triplets (source,dest,archive) triplets as per publish() - * @param integer $flags Bitfield, may be FileRepo::DELETE_SOURCE to indicate + * @param $triplets Array: (source,dest,archive) triplets as per publish() + * @param $flags Integer: bitfield, may be FileRepo::DELETE_SOURCE to indicate * that the source files should be deleted if possible */ abstract function publishBatch( $triplets, $flags = 0 ); @@ -461,8 +495,8 @@ abstract class FileRepo { /** * Checks existence of an array of files. * - * @param array $files URLs (or paths) of files to check - * @param integer $flags Bitwise combination of the following flags: + * @param $files Array: URLs (or paths) of files to check + * @param $flags Integer: bitwise combination of the following flags: * self::FILES_ONLY Mark file as existing only if it is a file (not directory) * @return Either array of files and existence flags, or false */ @@ -478,7 +512,7 @@ abstract class FileRepo { * assumes a naming scheme in the deleted zone based on content hash, as * opposed to the public zone which is assumed to be unique. * - * @param array $sourceDestPairs Array of source/destination pairs. Each element + * @param $sourceDestPairs Array of source/destination pairs. Each element * is a two-element array containing the source file path relative to the * public root in the first element, and the archive file path relative * to the deleted zone root in the second element. @@ -490,10 +524,10 @@ abstract class FileRepo { * Move a file to the deletion archive. * If no valid deletion archive exists, this may either delete the file * or throw an exception, depending on the preference of the repository - * @param mixed $srcRel Relative path for the file to be deleted - * @param mixed $archiveRel Relative path for the archive location. + * @param $srcRel Mixed: relative path for the file to be deleted + * @param $archiveRel Mixed: relative path for the archive location. * Relative to a private archive directory. - * @return WikiError object (wikitext-formatted), or true for success + * @return FileRepoStatus object */ function delete( $srcRel, $archiveRel ) { return $this->deleteBatch( array( array( $srcRel, $archiveRel ) ) ); @@ -589,7 +623,7 @@ abstract class FileRepo { * title object. If not, return false. * STUB * - * @param Title $title Title of image + * @param $title Title of image */ function checkRedirect( $title ) { return false; @@ -600,7 +634,7 @@ abstract class FileRepo { * Doesn't do anything for repositories that don't support image redirects. * * STUB - * @param Title $title Title of image + * @param $title Title of image */ function invalidateImageRedirect( $title ) {} @@ -620,7 +654,7 @@ abstract class FileRepo { */ public function getDisplayName() { // We don't name our own repo, return nothing - if ( $this->name == 'local' ) { + if ( $this->isLocal() ) { return null; } // 'shared-repo-name-wikimediacommons' is used when $wgUseInstantCommons = true @@ -631,6 +665,16 @@ abstract class FileRepo { return wfMsg( 'shared-repo' ); } + /** + * Returns true if this the local file repository. + * + * @return bool + */ + function isLocal() { + return $this->getName() == 'local'; + } + + /** * Get a key on the primary cache for this repository. * Returns false if the repository's cache is not accessible at this site. @@ -652,4 +696,11 @@ abstract class FileRepo { array_unshift( $args, 'filerepo', $this->getName() ); return call_user_func_array( 'wfMemcKey', $args ); } + + /** + * Get an UploadStash associated with this repo. + */ + function getUploadStash() { + return new UploadStash( $this ); + } } diff --git a/includes/filerepo/FileRepoStatus.php b/includes/filerepo/FileRepoStatus.php index 63460fa8..161284c0 100644 --- a/includes/filerepo/FileRepoStatus.php +++ b/includes/filerepo/FileRepoStatus.php @@ -1,4 +1,10 @@ mInfo = $info; $this->mExists = $exists; } - + + /** + * @static + * @param $title Title + * @param $repo ForeignApiRepo + * @return ForeignAPIFile|null + */ static function newFromTitle( $title, $repo ) { - $info = $repo->getImageInfo( $title ); + $data = $repo->fetchImageQuery( array( + 'titles' => 'File:' . $title->getDBKey(), + 'iiprop' => self::getProps(), + 'prop' => 'imageinfo' ) ); + + $info = $repo->getImageInfo( $data ); + if( $info ) { - return new ForeignAPIFile( $title, $repo, $info, true ); + $lastRedirect = isset( $data['query']['redirects'] ) + ? count( $data['query']['redirects'] ) - 1 + : -1; + if( $lastRedirect >= 0 ) { + $newtitle = Title::newFromText( $data['query']['redirects'][$lastRedirect]['to']); + $img = new ForeignAPIFile( $newtitle, $repo, $info, true ); + if( $img ) { + $img->redirectedFrom( $title->getDBkey() ); + } + } else { + $img = new ForeignAPIFile( $title, $repo, $info, true ); + } + return $img; } else { return null; } } + /** + * Get the property string for iiprop and aiprop + */ + static function getProps() { + return 'timestamp|user|comment|url|size|sha1|metadata|mime'; + } + // Dummy functions... public function exists() { return $this->mExists; @@ -40,10 +77,10 @@ class ForeignAPIFile extends File { return parent::transform( $params, $flags ); } $thumbUrl = $this->repo->getThumbUrlFromCache( - $this->getName(), - isset( $params['width'] ) ? $params['width'] : -1, - isset( $params['height'] ) ? $params['height'] : -1 ); - return $this->handler->getTransform( $this, 'bogus', $thumbUrl, $params );; + $this->getName(), + isset( $params['width'] ) ? $params['width'] : -1, + isset( $params['height'] ) ? $params['height'] : -1 ); + return $this->handler->getTransform( $this, 'bogus', $thumbUrl, $params ); } // Info we can get from API... @@ -74,27 +111,33 @@ class ForeignAPIFile extends File { } public function getSize() { - return intval( @$this->mInfo['size'] ); + return isset( $this->mInfo['size'] ) ? intval( $this->mInfo['size'] ) : null; } public function getUrl() { - return strval( @$this->mInfo['url'] ); + return isset( $this->mInfo['url'] ) ? strval( $this->mInfo['url'] ) : null; } public function getUser( $method='text' ) { - return strval( @$this->mInfo['user'] ); + return isset( $this->mInfo['user'] ) ? strval( $this->mInfo['user'] ) : null; } public function getDescription() { - return strval( @$this->mInfo['comment'] ); + return isset( $this->mInfo['comment'] ) ? strval( $this->mInfo['comment'] ) : null; } function getSha1() { - return wfBaseConvert( strval( @$this->mInfo['sha1'] ), 16, 36, 31 ); + return isset( $this->mInfo['sha1'] ) ? + wfBaseConvert( strval( $this->mInfo['sha1'] ), 16, 36, 31 ) : + null; } function getTimestamp() { - return wfTimestamp( TS_MW, strval( @$this->mInfo['timestamp'] ) ); + return wfTimestamp( TS_MW, + isset( $this->mInfo['timestamp'] ) ? + strval( $this->mInfo['timestamp'] ) : + null + ); } function getMimeType() { @@ -122,15 +165,13 @@ class ForeignAPIFile extends File { */ function getThumbPath( $suffix = '' ) { if ( $this->repo->canCacheThumbs() ) { - global $wgUploadDirectory; - $path = $wgUploadDirectory . '/thumb/' . $this->getHashPath( $this->getName() ); + $path = $this->repo->getZonePath('thumb') . '/' . $this->getHashPath( $this->getName() ); if ( $suffix ) { $path = $path . $suffix . '/'; } return $path; - } - else { - return null; + } else { + return null; } } diff --git a/includes/filerepo/ForeignAPIRepo.php b/includes/filerepo/ForeignAPIRepo.php index 264cb920..e4188d6b 100644 --- a/includes/filerepo/ForeignAPIRepo.php +++ b/includes/filerepo/ForeignAPIRepo.php @@ -1,9 +1,13 @@ mApiBase = $info['apibase']; // http://commons.wikimedia.org/w/api.php + global $wgUploadDirectory; + + // http://commons.wikimedia.org/w/api.php + $this->mApiBase = isset( $info['apibase'] ) ? $info['apibase'] : null; + $this->directory = isset( $info['directory'] ) ? $info['directory'] : $wgUploadDirectory; + if( isset( $info['apiThumbCacheExpiry'] ) ) { $this->apiThumbCacheExpiry = $info['apiThumbCacheExpiry']; } + if( isset( $info['fileCacheExpiry'] ) ) { + $this->fileCacheExpiry = $info['fileCacheExpiry']; + } if( !$this->scriptDirUrl ) { // hack for description fetches $this->scriptDirUrl = dirname( $this->mApiBase ); @@ -41,6 +65,11 @@ class ForeignAPIRepo extends FileRepo { if( $this->canCacheThumbs() && !$this->thumbUrl ) { $this->thumbUrl = $this->url . '/thumb'; } + if ( isset( $info['thumbDir'] ) ) { + $this->thumbDir = $info['thumbDir']; + } else { + $this->thumbDir = "{$this->directory}/thumb"; + } } /** @@ -89,7 +118,7 @@ class ForeignAPIRepo extends FileRepo { } } - $results = $this->fetchImageQuery( array( 'titles' => implode( $files, '|' ), + $data = $this->fetchImageQuery( array( 'titles' => implode( $files, '|' ), 'prop' => 'imageinfo' ) ); if( isset( $data['query']['pages'] ) ) { $i = 0; @@ -98,40 +127,32 @@ class ForeignAPIRepo extends FileRepo { $i++; } } + return $results; } function getFileProps( $virtualUrl ) { return false; } - protected function queryImage( $query ) { - $data = $this->fetchImageQuery( $query ); - - if( isset( $data['query']['pages'] ) ) { - foreach( $data['query']['pages'] as $pageid => $info ) { - if( isset( $info['imageinfo'][0] ) ) { - return $info['imageinfo'][0]; - } - } - } - return false; - } - - protected function fetchImageQuery( $query ) { + function fetchImageQuery( $query ) { global $wgMemc; - $url = $this->mApiBase . - '?' . - wfArrayToCgi( - array_merge( $query, - array( - 'format' => 'json', - 'action' => 'query' ) ) ); + $query = array_merge( $query, + array( + 'format' => 'json', + 'action' => 'query', + 'redirects' => 'true' + ) ); + if ( $this->mApiBase ) { + $url = wfAppendQuery( $this->mApiBase, $query ); + } else { + $url = $this->makeUrl( $query, 'api' ); + } if( !isset( $this->mQueryCache[$url] ) ) { $key = $this->getLocalCacheKey( 'ForeignAPIRepo', 'Metadata', md5( $url ) ); $data = $wgMemc->get( $key ); if( !$data ) { - $data = Http::get( $url ); + $data = self::httpGet( $url ); if ( !$data ) { return null; } @@ -147,81 +168,141 @@ class ForeignAPIRepo extends FileRepo { return FormatJson::decode( $this->mQueryCache[$url], true ); } - function getImageInfo( $title, $time = false ) { - return $this->queryImage( array( - 'titles' => 'Image:' . $title->getText(), - 'iiprop' => 'timestamp|user|comment|url|size|sha1|metadata|mime', - 'prop' => 'imageinfo' ) ); + function getImageInfo( $data ) { + if( $data && isset( $data['query']['pages'] ) ) { + foreach( $data['query']['pages'] as $info ) { + if( isset( $info['imageinfo'][0] ) ) { + return $info['imageinfo'][0]; + } + } + } + return false; } function findBySha1( $hash ) { $results = $this->fetchImageQuery( array( 'aisha1base36' => $hash, - 'aiprop' => 'timestamp|user|comment|url|size|sha1|metadata|mime', + 'aiprop' => ForeignAPIFile::getProps(), 'list' => 'allimages', ) ); $ret = array(); if ( isset( $results['query']['allimages'] ) ) { foreach ( $results['query']['allimages'] as $img ) { + // 1.14 was broken, doesn't return name attribute + if( !isset( $img['name'] ) ) { + continue; + } $ret[] = new ForeignAPIFile( Title::makeTitle( NS_FILE, $img['name'] ), $this, $img ); } } return $ret; } - function getThumbUrl( $name, $width=-1, $height=-1 ) { - $info = $this->queryImage( array( - 'titles' => 'Image:' . $name, - 'iiprop' => 'url', + function getThumbUrl( $name, $width=-1, $height=-1, &$result=NULL ) { + $data = $this->fetchImageQuery( array( + 'titles' => 'File:' . $name, + 'iiprop' => 'url|timestamp', 'iiurlwidth' => $width, 'iiurlheight' => $height, 'prop' => 'imageinfo' ) ); - if( $info && $info['thumburl'] ) { + $info = $this->getImageInfo( $data ); + + if( $data && $info && isset( $info['thumburl'] ) ) { wfDebug( __METHOD__ . " got remote thumb " . $info['thumburl'] . "\n" ); + $result = $info; return $info['thumburl']; } else { return false; } } + /* + * Return the imageurl from cache if possible + * + * If the url has been requested today, get it from cache + * Otherwise retrieve remote thumb url, check for local file. + * + * @param $name String is a dbkey form of a title + * @param $width + * @param $height + */ function getThumbUrlFromCache( $name, $width, $height ) { - global $wgMemc, $wgUploadPath, $wgServer, $wgUploadDirectory; + global $wgMemc; if ( !$this->canCacheThumbs() ) { return $this->getThumbUrl( $name, $width, $height ); } - $key = $this->getLocalCacheKey( 'ForeignAPIRepo', 'ThumbUrl', $name ); - if ( $thumbUrl = $wgMemc->get($key) ) { - wfDebug("Got thumb from local cache. $thumbUrl \n"); - return $thumbUrl; - } - else { - $foreignUrl = $this->getThumbUrl( $name, $width, $height ); - if( !$foreignUrl ) { - wfDebug( __METHOD__ . " Could not find thumburl\n" ); - return false; - } - $thumb = Http::get( $foreignUrl ); - if( !$thumb ) { - wfDebug( __METHOD__ . " Could not download thumb\n" ); - return false; + $sizekey = "$width:$height"; + + /* Get the array of urls that we already know */ + $knownThumbUrls = $wgMemc->get($key); + if( !$knownThumbUrls ) { + /* No knownThumbUrls for this file */ + $knownThumbUrls = array(); + } else { + if( isset( $knownThumbUrls[$sizekey] ) ) { + wfDebug("Got thumburl from local cache. {$knownThumbUrls[$sizekey]} \n"); + return $knownThumbUrls[$sizekey]; } - // We need the same filename as the remote one :) - $fileName = rawurldecode( pathinfo( $foreignUrl, PATHINFO_BASENAME ) ); - $path = 'thumb/' . $this->getHashPath( $name ) . $name . "/"; - if ( !is_dir($wgUploadDirectory . '/' . $path) ) { - wfMkdirParents($wgUploadDirectory . '/' . $path); + /* This size is not yet known */ + } + + $metadata = null; + $foreignUrl = $this->getThumbUrl( $name, $width, $height, $metadata ); + + if( !$foreignUrl ) { + wfDebug( __METHOD__ . " Could not find thumburl\n" ); + return false; + } + + // We need the same filename as the remote one :) + $fileName = rawurldecode( pathinfo( $foreignUrl, PATHINFO_BASENAME ) ); + if( !$this->validateFilename( $fileName ) ) { + wfDebug( __METHOD__ . " The deduced filename $fileName is not safe\n" ); + return false; + } + $localPath = $this->getZonePath( 'thumb' ) . "/" . $this->getHashPath( $name ) . $name; + $localFilename = $localPath . "/" . $fileName; + $localUrl = $this->getZoneUrl( 'thumb' ) . "/" . $this->getHashPath( $name ) . rawurlencode( $name ) . "/" . rawurlencode( $fileName ); + + if( file_exists( $localFilename ) && isset( $metadata['timestamp'] ) ) { + wfDebug( __METHOD__ . " Thumbnail was already downloaded before\n" ); + $modified = filemtime( $localFilename ); + $remoteModified = strtotime( $metadata['timestamp'] ); + $current = time(); + $diff = abs( $modified - $current ); + if( $remoteModified < $modified && $diff < $this->fileCacheExpiry ) { + /* Use our current and already downloaded thumbnail */ + $knownThumbUrls["$width:$height"] = $localUrl; + $wgMemc->set( $key, $knownThumbUrls, $this->apiThumbCacheExpiry ); + return $localUrl; } - $localUrl = $wgServer . $wgUploadPath . '/' . $path . $fileName; - # FIXME: Delete old thumbs that aren't being used. Maintenance script? - if( !file_put_contents($wgUploadDirectory . '/' . $path . $fileName, $thumb ) ) { - wfDebug( __METHOD__ . " could not write to thumb path\n" ); + /* There is a new Commons file, or existing thumbnail older than a month */ + } + $thumb = self::httpGet( $foreignUrl ); + if( !$thumb ) { + wfDebug( __METHOD__ . " Could not download thumb\n" ); + return false; + } + if ( !is_dir($localPath) ) { + if( !wfMkdirParents($localPath) ) { + wfDebug( __METHOD__ . " could not create directory $localPath for thumb\n" ); return $foreignUrl; } - $wgMemc->set( $key, $localUrl, $this->apiThumbCacheExpiry ); - wfDebug( __METHOD__ . " got local thumb $localUrl, saving to cache \n" ); - return $localUrl; } + + # FIXME: Delete old thumbs that aren't being used. Maintenance script? + wfSuppressWarnings(); + if( !file_put_contents( $localFilename, $thumb ) ) { + wfRestoreWarnings(); + wfDebug( __METHOD__ . " could not write to thumb path\n" ); + return $foreignUrl; + } + wfRestoreWarnings(); + $knownThumbUrls[$sizekey] = $localUrl; + $wgMemc->set( $key, $knownThumbUrls, $this->apiThumbCacheExpiry ); + wfDebug( __METHOD__ . " got local thumb $localUrl, saving to cache \n" ); + return $localUrl; } /** @@ -238,6 +319,20 @@ class ForeignAPIRepo extends FileRepo { } } + /** + * Get the local directory corresponding to one of the three basic zones + */ + function getZonePath( $zone ) { + switch ( $zone ) { + case 'public': + return $this->directory; + case 'thumb': + return $this->thumbDir; + default: + return false; + } + } + /** * Are we locally caching the thumbnails? * @return bool @@ -245,4 +340,37 @@ class ForeignAPIRepo extends FileRepo { public function canCacheThumbs() { return ( $this->apiThumbCacheExpiry > 0 ); } + + /** + * The user agent the ForeignAPIRepo will use. + */ + public static function getUserAgent() { + return Http::userAgent() . " ForeignAPIRepo/" . self::VERSION; + } + + /** + * Like a Http:get request, but with custom User-Agent. + * @see Http:get + */ + public static function httpGet( $url, $timeout = 'default', $options = array() ) { + $options['timeout'] = $timeout; + /* Http::get */ + $url = wfExpandUrl( $url ); + wfDebug( "ForeignAPIRepo: HTTP GET: $url\n" ); + $options['method'] = "GET"; + + if ( !isset( $options['timeout'] ) ) { + $options['timeout'] = 'default'; + } + + $req = MWHttpRequest::factory( $url, $options ); + $req->setUserAgent( ForeignAPIRepo::getUserAgent() ); + $status = $req->execute(); + + if ( $status->isOK() ) { + return $req->getContent(); + } else { + return false; + } + } } diff --git a/includes/filerepo/ForeignDBFile.php b/includes/filerepo/ForeignDBFile.php index a24ff72b..5f04ea73 100644 --- a/includes/filerepo/ForeignDBFile.php +++ b/includes/filerepo/ForeignDBFile.php @@ -1,6 +1,14 @@ dbConn ) ) { - $class = 'Database' . ucfirst( $this->dbType ); - $this->dbConn = new $class( $this->dbServer, $this->dbUser, - $this->dbPassword, $this->dbName, false, $this->dbFlags, - $this->tablePrefix ); + $this->dbConn = DatabaseBase::newFromType( $this->dbType, + array( + 'server' => $this->dbServer, + 'user' => $this->dbUser, + 'password' => $this->dbPassword, + 'dbname' => $this->dbName, + 'flags' => $this->dbFlags, + 'tableprefix' => $this->tablePrefix + ) + ); } return $this->dbConn; } @@ -65,7 +78,7 @@ class ForeignDBRepo extends LocalRepo { function publish( $srcPath, $dstRel, $archiveRel, $flags = 0 ) { throw new MWException( get_class($this) . ': write operations are not supported' ); } - function deleteBatch( $fileMap ) { + function deleteBatch( $sourceDestPairs ) { throw new MWException( get_class($this) . ': write operations are not supported' ); } } diff --git a/includes/filerepo/ForeignDBViaLBRepo.php b/includes/filerepo/ForeignDBViaLBRepo.php index 80325752..4c530b51 100644 --- a/includes/filerepo/ForeignDBViaLBRepo.php +++ b/includes/filerepo/ForeignDBViaLBRepo.php @@ -1,7 +1,14 @@ $time ) ); if ( !$img ) { @@ -30,7 +36,7 @@ class Image extends LocalFile { * Wrapper for wfFindFile(), for backwards-compatibility only. * Do not use in core code. * - * @param string $name name of the image, used to create a title object using Title::makeTitleSafe + * @param $name String: name of the image, used to create a title object using Title::makeTitleSafe * @return image object or null if invalid title * @deprecated */ @@ -55,8 +61,8 @@ class Image extends LocalFile { * Note that fromSharedDirectory will only use the shared path for files * that actually exist there now, and will return local paths otherwise. * - * @param string $name Name of the image, without the leading "Image:" - * @param boolean $fromSharedDirectory Should this be in $wgSharedUploadPath? + * @param $name String: name of the image, without the leading "Image:" + * @param $fromSharedDirectory Boolean: Should this be in $wgSharedUploadPath? * @return string URL of $name image * @deprecated */ diff --git a/includes/filerepo/LocalFile.php b/includes/filerepo/LocalFile.php index b6b4bfed..5489ecb2 100644 --- a/includes/filerepo/LocalFile.php +++ b/includes/filerepo/LocalFile.php @@ -1,5 +1,9 @@ img_name ); $file = new self( $title, $repo ); $file->loadFromRow( $row ); + return $file; } - + /** * Create a LocalFile from a SHA-1 key * Do not call this except from inside a repo class. */ static function newFromKey( $sha1, $repo, $timestamp = false ) { - # Polymorphic function name to distinguish foreign and local fetches - $fname = get_class( $this ) . '::' . __FUNCTION__; - $conds = array( 'img_sha1' => $sha1 ); - if( $timestamp ) { + + if ( $timestamp ) { $conds['img_timestamp'] = $timestamp; } - $row = $dbr->selectRow( 'image', $this->getCacheFields( 'img_' ), $conds, $fname ); - if( $row ) { + + $dbr = $repo->getSlaveDB(); + $row = $dbr->selectRow( 'image', self::selectFields(), $conds, __METHOD__ ); + + if ( $row ) { return self::newFromRow( $row, $repo ); } else { return false; } } - + /** * Fields in the image table */ @@ -121,10 +128,12 @@ class LocalFile extends File { * Do not call this except from inside a repo class. */ function __construct( $title, $repo ) { - if( !is_object( $title ) ) { + if ( !is_object( $title ) ) { throw new MWException( __CLASS__ . ' constructor given bogus title.' ); } + parent::__construct( $title, $repo ); + $this->metadata = ''; $this->historyLine = 0; $this->historyRes = null; @@ -132,11 +141,12 @@ class LocalFile extends File { } /** - * Get the memcached key for the main data for this file, or false if + * Get the memcached key for the main data for this file, or false if * there is no access to the shared cache. */ function getCacheKey() { $hashedName = md5( $this->getName() ); + return $this->repo->getSharedCacheKey( 'file', $hashedName ); } @@ -145,13 +155,16 @@ class LocalFile extends File { */ function loadFromCache() { global $wgMemc; + wfProfileIn( __METHOD__ ); $this->dataLoaded = false; $key = $this->getCacheKey(); + if ( !$key ) { wfProfileOut( __METHOD__ ); return false; } + $cachedValues = $wgMemc->get( $key ); // Check if the key existed and belongs to this version of MediaWiki @@ -163,6 +176,7 @@ class LocalFile extends File { } $this->dataLoaded = true; } + if ( $this->dataLoaded ) { wfIncrStats( 'image_cache_hit' ); } else { @@ -178,14 +192,18 @@ class LocalFile extends File { */ function saveToCache() { global $wgMemc; + $this->load(); $key = $this->getCacheKey(); + if ( !$key ) { return; } + $fields = $this->getCacheFields( '' ); $cache = array( 'version' => MW_FILE_VERSION ); $cache['fileExists'] = $this->fileExists; + if ( $this->fileExists ) { foreach ( $fields as $field ) { $cache[$field] = $this->$field; @@ -206,9 +224,11 @@ class LocalFile extends File { static $fields = array( 'size', 'width', 'height', 'bits', 'media_type', 'major_mime', 'minor_mime', 'metadata', 'timestamp', 'sha1', 'user', 'user_text', 'description' ); static $results = array(); + if ( $prefix == '' ) { return $fields; } + if ( !isset( $results[$prefix] ) ) { $prefixedFields = array(); foreach ( $fields as $field ) { @@ -216,6 +236,7 @@ class LocalFile extends File { } $results[$prefix] = $prefixedFields; } + return $results[$prefix]; } @@ -234,6 +255,7 @@ class LocalFile extends File { $row = $dbr->selectRow( 'image', $this->getCacheFields( 'img_' ), array( 'img_name' => $this->getName() ), $fname ); + if ( $row ) { $this->loadFromRow( $row ); } else { @@ -250,15 +272,20 @@ class LocalFile extends File { function decodeRow( $row, $prefix = 'img_' ) { $array = (array)$row; $prefixLength = strlen( $prefix ); + // Sanity check prefix once if ( substr( key( $array ), 0, $prefixLength ) !== $prefix ) { throw new MWException( __METHOD__ . ': incorrect $prefix parameter' ); } + $decoded = array(); + foreach ( $array as $name => $value ) { $decoded[substr( $name, $prefixLength )] = $value; } + $decoded['timestamp'] = wfTimestamp( TS_MW, $decoded['timestamp'] ); + if ( empty( $decoded['major_mime'] ) ) { $decoded['mime'] = 'unknown/unknown'; } else { @@ -267,8 +294,10 @@ class LocalFile extends File { } $decoded['mime'] = $decoded['major_mime'] . '/' . $decoded['minor_mime']; } + # Trim zero padding from char/binary field $decoded['sha1'] = rtrim( $decoded['sha1'], "\0" ); + return $decoded; } @@ -278,9 +307,11 @@ class LocalFile extends File { function loadFromRow( $row, $prefix = 'img_' ) { $this->dataLoaded = true; $array = $this->decodeRow( $row, $prefix ); + foreach ( $array as $name => $value ) { $this->$name = $value; } + $this->fileExists = true; $this->maybeUpgradeRow(); } @@ -305,6 +336,7 @@ class LocalFile extends File { if ( wfReadOnly() ) { return; } + if ( is_null( $this->media_type ) || $this->mime == 'image/svg' ) { @@ -337,6 +369,7 @@ class LocalFile extends File { wfProfileOut( __METHOD__ ); return; } + $dbw = $this->repo->getMasterDB(); list( $major, $minor ) = self::splitMime( $this->mime ); @@ -359,6 +392,7 @@ class LocalFile extends File { ), array( 'img_name' => $this->getName() ), __METHOD__ ); + $this->saveToCache(); wfProfileOut( __METHOD__ ); } @@ -374,15 +408,18 @@ class LocalFile extends File { $this->dataLoaded = true; $fields = $this->getCacheFields( '' ); $fields[] = 'fileExists'; + foreach ( $fields as $field ) { if ( isset( $info[$field] ) ) { $this->$field = $info[$field]; } } + // Fix up mime fields if ( isset( $info['major_mime'] ) ) { $this->mime = "{$info['major_mime']}/{$info['minor_mime']}"; } elseif ( isset( $info['mime'] ) ) { + $this->mime = $info['mime']; list( $this->major_mime, $this->minor_mime ) = self::splitMime( $this->mime ); } } @@ -396,7 +433,7 @@ class LocalFile extends File { /** isVisible inhereted */ function isMissing() { - if( $this->missing === null ) { + if ( $this->missing === null ) { list( $fileExists ) = $this->repo->fileExistsBatch( array( $this->getVirtualUrl() ), FileRepo::FILES_ONLY ); $this->missing = !$fileExists; } @@ -410,6 +447,7 @@ class LocalFile extends File { */ public function getWidth( $page = 1 ) { $this->load(); + if ( $this->isMultipage() ) { $dim = $this->getHandler()->getPageDimensions( $this, $page ); if ( $dim ) { @@ -429,6 +467,7 @@ class LocalFile extends File { */ public function getHeight( $page = 1 ) { $this->load(); + if ( $this->isMultipage() ) { $dim = $this->getHandler()->getPageDimensions( $this, $page ); if ( $dim ) { @@ -448,9 +487,10 @@ class LocalFile extends File { */ function getUser( $type = 'text' ) { $this->load(); - if( $type == 'text' ) { + + if ( $type == 'text' ) { return $this->user_text; - } elseif( $type == 'id' ) { + } elseif ( $type == 'id' ) { return $this->user; } } @@ -521,6 +561,7 @@ class LocalFile extends File { function migrateThumbFile( $thumbName ) { $thumbDir = $this->getThumbPath(); $thumbPath = "$thumbDir/$thumbName"; + if ( is_dir( $thumbPath ) ) { // Directory where file should be // This happened occasionally due to broken migration code in 1.5 @@ -535,6 +576,7 @@ class LocalFile extends File { // Doesn't exist anymore clearstatcache(); } + if ( is_file( $thumbDir ) ) { // File where directory should be unlink( $thumbDir ); @@ -552,6 +594,7 @@ class LocalFile extends File { */ function getThumbnails() { $this->load(); + $files = array(); $dir = $this->getThumbPath(); @@ -560,10 +603,11 @@ class LocalFile extends File { if ( $handle ) { while ( false !== ( $file = readdir( $handle ) ) ) { - if ( $file{0} != '.' ) { + if ( $file { 0 } != '.' ) { $files[] = $file; } } + closedir( $handle ); } } @@ -585,8 +629,10 @@ class LocalFile extends File { */ function purgeHistory() { global $wgMemc; + $hashedName = md5( $this->getName() ); $oldKey = $this->repo->getSharedCacheKey( 'oldfile', $hashedName ); + if ( $oldKey ) { $wgMemc->delete( $oldKey ); } @@ -611,10 +657,12 @@ class LocalFile extends File { */ function purgeThumbnails() { global $wgUseSquid; + // Delete thumbnails $files = $this->getThumbnails(); $dir = $this->getThumbPath(); $urls = array(); + foreach ( $files as $file ) { # Check that the base file name is part of the thumb name # This is a basic sanity check to avoid erasing unrelated directories @@ -641,31 +689,42 @@ class LocalFile extends File { $conds = $opts = $join_conds = array(); $eq = $inc ? '=' : ''; $conds[] = "oi_name = " . $dbr->addQuotes( $this->title->getDBkey() ); - if( $start ) { + + if ( $start ) { $conds[] = "oi_timestamp <$eq " . $dbr->addQuotes( $dbr->timestamp( $start ) ); } - if( $end ) { + + if ( $end ) { $conds[] = "oi_timestamp >$eq " . $dbr->addQuotes( $dbr->timestamp( $end ) ); } - if( $limit ) { + + if ( $limit ) { $opts['LIMIT'] = $limit; } + // Search backwards for time > x queries $order = ( !$start && $end !== null ) ? 'ASC' : 'DESC'; $opts['ORDER BY'] = "oi_timestamp $order"; $opts['USE INDEX'] = array( 'oldimage' => 'oi_name_timestamp' ); - wfRunHooks( 'LocalFile::getHistory', array( &$this, &$tables, &$fields, + wfRunHooks( 'LocalFile::getHistory', array( &$this, &$tables, &$fields, &$conds, &$opts, &$join_conds ) ); $res = $dbr->select( $tables, $fields, $conds, __METHOD__, $opts, $join_conds ); $r = array(); - while( $row = $dbr->fetchObject( $res ) ) { - $r[] = OldLocalFile::newFromRow( $row, $this->repo ); + + foreach ( $res as $row ) { + if ( $this->repo->oldFileFromRowFactory ) { + $r[] = call_user_func( $this->repo->oldFileFromRowFactory, $row, $this->repo ); + } else { + $r[] = OldLocalFile::newFromRow( $row, $this->repo ); + } } - if( $order == 'ASC' ) { + + if ( $order == 'ASC' ) { $r = array_reverse( $r ); // make sure it ends up descending } + return $r; } @@ -694,13 +753,12 @@ class LocalFile extends File { array( 'img_name' => $this->title->getDBkey() ), $fname ); + if ( 0 == $dbr->numRows( $this->historyRes ) ) { - $dbr->freeResult( $this->historyRes ); $this->historyRes = null; return false; } } elseif ( $this->historyLine == 1 ) { - $dbr->freeResult( $this->historyRes ); $this->historyRes = $dbr->select( 'oldimage', '*', array( 'oi_name' => $this->title->getDBkey() ), $fname, @@ -717,8 +775,8 @@ class LocalFile extends File { */ public function resetHistory() { $this->historyLine = 0; + if ( !is_null( $this->historyRes ) ) { - $this->repo->getSlaveDB()->freeResult( $this->historyRes ); $this->historyRes = null; } } @@ -739,14 +797,16 @@ class LocalFile extends File { /** * Upload a file and record it in the DB - * @param string $srcPath Source path or virtual URL - * @param string $comment Upload description - * @param string $pageText Text to use for the new description page, if a new description page is created - * @param integer $flags Flags for publish() - * @param array $props File properties, if known. This can be used to reduce the - * upload time when uploading virtual URLs for which the file info - * is already known - * @param string $timestamp Timestamp for img_timestamp, or false to use the current time + * @param $srcPath String: source path or virtual URL + * @param $comment String: upload description + * @param $pageText String: text to use for the new description page, + * if a new description page is created + * @param $flags Integer: flags for publish() + * @param $props Array: File properties, if known. This can be used to reduce the + * upload time when uploading virtual URLs for which the file info + * is already known + * @param $timestamp String: timestamp for img_timestamp, or false to use the current time + * @param $user Mixed: User object or null to use $wgUser * * @return FileRepoStatus object. On success, the value member contains the * archive name, or an empty string if it was a new file. @@ -754,12 +814,15 @@ class LocalFile extends File { function upload( $srcPath, $comment, $pageText, $flags = 0, $props = false, $timestamp = false, $user = null ) { $this->lock(); $status = $this->publish( $srcPath, $flags ); + if ( $status->ok ) { if ( !$this->recordUpload2( $status->value, $comment, $pageText, $props, $timestamp, $user ) ) { $status->fatal( 'filenotfound', $srcPath ); } } + $this->unlock(); + return $status; } @@ -771,9 +834,11 @@ class LocalFile extends File { $watch = false, $timestamp = false ) { $pageText = SpecialUpload::getInitialPageText( $desc, $license, $copyStatus, $source ); + if ( !$this->recordUpload2( $oldver, $desc, $pageText ) ) { return false; } + if ( $watch ) { global $wgUser; $wgUser->addWatch( $this->getTitle() ); @@ -785,11 +850,12 @@ class LocalFile extends File { /** * Record a file upload in the upload log and the image table */ - function recordUpload2( $oldver, $comment, $pageText, $props = false, $timestamp = false, $user = null ) - { - if( is_null( $user ) ) { + function recordUpload2( + $oldver, $comment, $pageText, $props = false, $timestamp = false, $user = null + ) { + if ( is_null( $user ) ) { global $wgUser; - $user = $wgUser; + $user = $wgUser; } $dbw = $this->repo->getMasterDB(); @@ -798,27 +864,30 @@ class LocalFile extends File { if ( !$props ) { $props = $this->repo->getFileProps( $this->getVirtualUrl() ); } + + if ( $timestamp === false ) { + $timestamp = $dbw->timestamp(); + } + $props['description'] = $comment; $props['user'] = $user->getId(); $props['user_text'] = $user->getName(); - $props['timestamp'] = wfTimestamp( TS_MW ); + $props['timestamp'] = wfTimestamp( TS_MW, $timestamp ); // DB -> TS_MW $this->setProps( $props ); - // Delete thumbnails and refresh the metadata cache + # Delete thumbnails $this->purgeThumbnails(); - $this->saveToCache(); + + # The file is already on its final location, remove it from the squid cache SquidUpdate::purge( array( $this->getURL() ) ); - // Fail now if the file isn't there + # Fail now if the file isn't there if ( !$this->fileExists ) { wfDebug( __METHOD__ . ": File " . $this->getPath() . " went missing!\n" ); return false; } $reupload = false; - if ( $timestamp === false ) { - $timestamp = $dbw->timestamp(); - } # Test to see if the row exists using INSERT IGNORE # This avoids race conditions by locking the row until the commit, and also @@ -826,7 +895,7 @@ class LocalFile extends File { $dbw->insert( 'image', array( 'img_name' => $this->getName(), - 'img_size'=> $this->size, + 'img_size' => $this->size, 'img_width' => intval( $this->width ), 'img_height' => intval( $this->height ), 'img_bits' => $this->bits, @@ -844,7 +913,7 @@ class LocalFile extends File { 'IGNORE' ); - if( $dbw->affectedRows() == 0 ) { + if ( $dbw->affectedRows() == 0 ) { $reupload = true; # Collision, this is an update of a file @@ -905,13 +974,17 @@ class LocalFile extends File { $action = $reupload ? 'overwrite' : 'upload'; $log->addEntry( $action, $descTitle, $comment, array(), $user ); - if( $descTitle->exists() ) { + if ( $descTitle->exists() ) { # Create a null revision $latest = $descTitle->getLatestRevID(); - $nullRevision = Revision::newNullRevision( $dbw, $descTitle->getArticleId(), - $log->getRcComment(), false ); + $nullRevision = Revision::newNullRevision( + $dbw, + $descTitle->getArticleId(), + $log->getRcComment(), + false + ); $nullRevision->insertOn( $dbw ); - + wfRunHooks( 'NewRevisionFromEditComplete', array( $article, $nullRevision, $latest, $user ) ); $article->updateRevisionOn( $dbw, $nullRevision ); @@ -919,24 +992,33 @@ class LocalFile extends File { $descTitle->invalidateCache(); $descTitle->purgeSquid(); } else { - // New file; create the description page. - // There's already a log entry, so don't make a second RC entry + # New file; create the description page. + # There's already a log entry, so don't make a second RC entry + # Squid and file cache for the description page are purged by doEdit. $article->doEdit( $pageText, $comment, EDIT_NEW | EDIT_SUPPRESS_RC ); } - # Hooks, hooks, the magic of hooks... - wfRunHooks( 'FileUpload', array( $this ) ); - # Commit the transaction now, in case something goes wrong later # The most important thing is that files don't get lost, especially archives $dbw->commit(); + # Save to cache and purge the squid + # We shall not saveToCache before the commit since otherwise + # in case of a rollback there is an usable file from memcached + # which in fact doesn't really exist (bug 24978) + $this->saveToCache(); + + # Hooks, hooks, the magic of hooks... + wfRunHooks( 'FileUpload', array( $this, $reupload, $descTitle->exists() ) ); + # Invalidate cache for all pages using this file $update = new HTMLCacheUpdate( $this->getTitle(), 'imagelinks' ); $update->doUpdate(); + # Invalidate cache for all pages that redirects on this page $redirs = $this->getTitle()->getRedirectsHere(); - foreach( $redirs as $redir ) { + + foreach ( $redirs as $redir ) { $update = new HTMLCacheUpdate( $redir, 'imagelinks' ); $update->doUpdate(); } @@ -946,15 +1028,14 @@ class LocalFile extends File { /** * Move or copy a file to its public location. If a file exists at the - * destination, move it to an archive. Returns the archive name on success - * or an empty string if it was a new file, and a wikitext-formatted - * WikiError object on failure. + * destination, move it to an archive. Returns a FileRepoStatus object with + * the archive name in the "value" member on success. * * The archive name should be passed through to recordUpload for database * registration. * - * @param string $sourcePath Local filesystem path to the source image - * @param integer $flags A bitwise combination of: + * @param $srcPath String: local filesystem path to the source image + * @param $flags Integer: a bitwise combination of: * File::DELETE_SOURCE Delete the source file, i.e. move * rather than copy * @return FileRepoStatus object. On success, the value member contains the @@ -962,17 +1043,21 @@ class LocalFile extends File { */ function publish( $srcPath, $flags = 0 ) { $this->lock(); + $dstRel = $this->getRel(); - $archiveName = gmdate( 'YmdHis' ) . '!'. $this->getName(); + $archiveName = gmdate( 'YmdHis' ) . '!' . $this->getName(); $archiveRel = 'archive/' . $this->getHashPath() . $archiveName; $flags = $flags & File::DELETE_SOURCE ? LocalRepo::DELETE_SOURCE : 0; $status = $this->repo->publish( $srcPath, $dstRel, $archiveRel, $flags ); + if ( $status->value == 'new' ) { $status->value = ''; } else { $status->value = $archiveName; } + $this->unlock(); + return $status; } @@ -996,12 +1081,14 @@ class LocalFile extends File { function move( $target ) { wfDebugLog( 'imagemove', "Got request to move {$this->name} to " . $target->getText() ); $this->lock(); + $batch = new LocalFileMoveBatch( $this, $target ); $batch->addCurrent(); $batch->addOlds(); $status = $batch->execute(); wfDebugLog( 'imagemove', "Finished moving {$this->name}" ); + $this->purgeEverything(); $this->unlock(); @@ -1014,7 +1101,7 @@ class LocalFile extends File { // Purge the new image $this->purgeEverything(); } - + return $status; } @@ -1032,6 +1119,7 @@ class LocalFile extends File { */ function delete( $reason, $suppress = false ) { $this->lock(); + $batch = new LocalFileDeleteBatch( $this, $reason, $suppress ); $batch->addCurrent(); @@ -1040,7 +1128,7 @@ class LocalFile extends File { $result = $dbw->select( 'oldimage', array( 'oi_archive_name' ), array( 'oi_name' => $this->getName() ) ); - while ( $row = $dbw->fetchObject( $result ) ) { + foreach ( $result as $row ) { $batch->addOld( $row->oi_archive_name ); } $status = $batch->execute(); @@ -1053,6 +1141,7 @@ class LocalFile extends File { } $this->unlock(); + return $status; } @@ -1064,21 +1153,26 @@ class LocalFile extends File { * * Cache purging is done; logging is caller's responsibility. * - * @param $reason - * @param $suppress + * @param $archiveName String + * @param $reason String + * @param $suppress Boolean * @throws MWException or FSException on database or file store failure * @return FileRepoStatus object. */ - function deleteOld( $archiveName, $reason, $suppress=false ) { + function deleteOld( $archiveName, $reason, $suppress = false ) { $this->lock(); + $batch = new LocalFileDeleteBatch( $this, $reason, $suppress ); $batch->addOld( $archiveName ); $status = $batch->execute(); + $this->unlock(); + if ( $status->ok ) { $this->purgeDescription(); $this->purgeHistory(); } + return $status; } @@ -1090,17 +1184,20 @@ class LocalFile extends File { * * @param $versions set of record ids of deleted items to restore, * or empty to restore all revisions. - * @param $unuppress + * @param $unsuppress Boolean * @return FileRepoStatus */ function restore( $versions = array(), $unsuppress = false ) { $batch = new LocalFileRestoreBatch( $this, $unsuppress ); + if ( !$versions ) { $batch->addAll(); } else { $batch->addIds( $versions ); } + $status = $batch->execute(); + if ( !$status->ok ) { return $status; } @@ -1109,6 +1206,7 @@ class LocalFile extends File { $cleanupStatus->successCount = 0; $cleanupStatus->failCount = 0; $status->merge( $cleanupStatus ); + return $status; } @@ -1174,10 +1272,12 @@ class LocalFile extends File { */ function lock() { $dbw = $this->repo->getMasterDB(); + if ( !$this->locked ) { $dbw->begin(); $this->locked++; } + return $dbw->selectField( 'image', '1', array( 'img_name' => $this->getName() ), __METHOD__ ); } @@ -1205,7 +1305,7 @@ class LocalFile extends File { } } // LocalFile class -#------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ /** * Helper class for file deletion @@ -1240,25 +1340,33 @@ class LocalFileDeleteBatch { unset( $oldRels['.'] ); $deleteCurrent = true; } + return array( $oldRels, $deleteCurrent ); } /*protected*/ function getHashes() { $hashes = array(); list( $oldRels, $deleteCurrent ) = $this->getOldRels(); + if ( $deleteCurrent ) { $hashes['.'] = $this->file->getSha1(); } + if ( count( $oldRels ) ) { $dbw = $this->file->repo->getMasterDB(); - $res = $dbw->select( 'oldimage', array( 'oi_archive_name', 'oi_sha1' ), - 'oi_archive_name IN(' . $dbw->makeList( array_keys( $oldRels ) ) . ')', - __METHOD__ ); - while ( $row = $dbw->fetchObject( $res ) ) { + $res = $dbw->select( + 'oldimage', + array( 'oi_archive_name', 'oi_sha1' ), + 'oi_archive_name IN (' . $dbw->makeList( array_keys( $oldRels ) ) . ')', + __METHOD__ + ); + + foreach ( $res as $row ) { if ( rtrim( $row->oi_sha1, "\0" ) === '' ) { // Get the hash from the file $oldUrl = $this->file->getArchiveVirtualUrl( $row->oi_archive_name ); $props = $this->file->repo->getFileProps( $oldUrl ); + if ( $props['fileExists'] ) { // Upgrade the oldimage row $dbw->update( 'oldimage', @@ -1274,10 +1382,13 @@ class LocalFileDeleteBatch { } } } + $missing = array_diff_key( $this->srcRels, $hashes ); + foreach ( $missing as $name => $rel ) { $this->status->error( 'filedelete-old-unregistered', $name ); } + foreach ( $hashes as $name => $hash ) { if ( !$hash ) { $this->status->error( 'filedelete-missing', $this->srcRels[$name] ); @@ -1290,6 +1401,7 @@ class LocalFileDeleteBatch { function doDBInserts() { global $wgUser; + $dbw = $this->file->repo->getMasterDB(); $encTimestamp = $dbw->addQuotes( $dbw->timestamp() ); $encUserId = $dbw->addQuotes( $wgUser->getId() ); @@ -1377,6 +1489,7 @@ class LocalFileDeleteBatch { function doDBDeletes() { $dbw = $this->file->repo->getMasterDB(); list( $oldRels, $deleteCurrent ) = $this->getOldRels(); + if ( count( $oldRels ) ) { $dbw->delete( 'oldimage', array( @@ -1384,6 +1497,7 @@ class LocalFileDeleteBatch { 'oi_archive_name' => array_keys( $oldRels ) ), __METHOD__ ); } + if ( $deleteCurrent ) { $dbw->delete( 'image', array( 'img_name' => $this->file->getName() ), __METHOD__ ); } @@ -1401,14 +1515,16 @@ class LocalFileDeleteBatch { $privateFiles = array(); list( $oldRels, $deleteCurrent ) = $this->getOldRels(); $dbw = $this->file->repo->getMasterDB(); - if( !empty( $oldRels ) ) { + + if ( !empty( $oldRels ) ) { $res = $dbw->select( 'oldimage', array( 'oi_archive_name' ), array( 'oi_name' => $this->file->getName(), - 'oi_archive_name IN (' . $dbw->makeList( array_keys($oldRels) ) . ')', - $dbw->bitAnd('oi_deleted', File::DELETED_FILE) => File::DELETED_FILE ), + 'oi_archive_name IN (' . $dbw->makeList( array_keys( $oldRels ) ) . ')', + $dbw->bitAnd( 'oi_deleted', File::DELETED_FILE ) => File::DELETED_FILE ), __METHOD__ ); - while( $row = $dbw->fetchObject( $res ) ) { + + foreach ( $res as $row ) { $privateFiles[$row->oi_archive_name] = 1; } } @@ -1417,6 +1533,7 @@ class LocalFileDeleteBatch { $this->deletionBatch = array(); $ext = $this->file->getExtension(); $dotExt = $ext === '' ? '' : ".$ext"; + foreach ( $this->srcRels as $name => $srcRel ) { // Skip files that have no hash (missing source). // Keep private files where they are. @@ -1441,6 +1558,7 @@ class LocalFileDeleteBatch { // Execute the file deletion batch $status = $this->file->repo->deleteBatch( $this->deletionBatch ); + if ( !$status->isGood() ) { $this->status->merge( $status ); } @@ -1457,6 +1575,7 @@ class LocalFileDeleteBatch { // Purge squid if ( $wgUseSquid ) { $urls = array(); + foreach ( $this->srcRels as $srcRel ) { $urlRel = str_replace( '%2F', '/', rawurlencode( $srcRel ) ); $urls[] = $this->file->repo->getZoneUrl( 'public' ) . '/' . $urlRel; @@ -1470,6 +1589,7 @@ class LocalFileDeleteBatch { // Commit and return $this->file->unlock(); wfProfileOut( __METHOD__ ); + return $this->status; } @@ -1478,19 +1598,25 @@ class LocalFileDeleteBatch { */ function removeNonexistentFiles( $batch ) { $files = $newBatch = array(); - foreach( $batch as $batchItem ) { + + foreach ( $batch as $batchItem ) { list( $src, $dest ) = $batchItem; $files[$src] = $this->file->repo->getVirtualUrl( 'public' ) . '/' . rawurlencode( $src ); } + $result = $this->file->repo->fileExistsBatch( $files, FSRepo::FILES_ONLY ); - foreach( $batch as $batchItem ) - if( $result[$batchItem[0]] ) + + foreach ( $batch as $batchItem ) { + if ( $result[$batchItem[0]] ) { $newBatch[] = $batchItem; + } + } + return $newBatch; } } -#------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ /** * Helper class for file undeletion @@ -1536,6 +1662,7 @@ class LocalFileRestoreBatch { */ function execute() { global $wgLang; + if ( !$this->all && !$this->ids ) { // Do nothing return $this->file->repo->newGood(); @@ -1548,7 +1675,8 @@ class LocalFileRestoreBatch { // Fetch all or selected archived revisions for the file, // sorted from the most recent to the oldest. $conditions = array( 'fa_name' => $this->file->getName() ); - if( !$this->all ) { + + if ( !$this->all ) { $conditions[] = 'fa_id IN (' . $dbw->makeList( $this->ids ) . ')'; } @@ -1565,7 +1693,8 @@ class LocalFileRestoreBatch { $deleteIds = array(); $first = true; $archiveNames = array(); - while( $row = $dbw->fetchObject( $result ) ) { + + foreach ( $result as $row ) { $idsPresent[] = $row->fa_id; if ( $row->fa_name != $this->file->getName() ) { @@ -1573,6 +1702,7 @@ class LocalFileRestoreBatch { $status->failCount++; continue; } + if ( $row->fa_storage_key == '' ) { // Revision was missing pre-deletion $status->error( 'undelete-bad-store-key', $wgLang->timeanddate( $row->fa_timestamp ) ); @@ -1584,12 +1714,13 @@ class LocalFileRestoreBatch { $deletedUrl = $this->file->repo->getVirtualUrl() . '/deleted/' . $deletedRel; $sha1 = substr( $row->fa_storage_key, 0, strcspn( $row->fa_storage_key, '.' ) ); + # Fix leading zero if ( strlen( $sha1 ) == 32 && $sha1[0] == '0' ) { $sha1 = substr( $sha1, 1 ); } - if( is_null( $row->fa_major_mime ) || $row->fa_major_mime == 'unknown' + if ( is_null( $row->fa_major_mime ) || $row->fa_major_mime == 'unknown' || is_null( $row->fa_minor_mime ) || $row->fa_minor_mime == 'unknown' || is_null( $row->fa_media_type ) || $row->fa_media_type == 'UNKNOWN' || is_null( $row->fa_metadata ) ) { @@ -1624,23 +1755,27 @@ class LocalFileRestoreBatch { 'img_timestamp' => $row->fa_timestamp, 'img_sha1' => $sha1 ); + // The live (current) version cannot be hidden! - if( !$this->unsuppress && $row->fa_deleted ) { + if ( !$this->unsuppress && $row->fa_deleted ) { $storeBatch[] = array( $deletedUrl, 'public', $destRel ); $this->cleanupBatch[] = $row->fa_storage_key; } } else { $archiveName = $row->fa_archive_name; - if( $archiveName == '' ) { + + if ( $archiveName == '' ) { // This was originally a current version; we // have to devise a new archive name for it. // Format is ! $timestamp = wfTimestamp( TS_UNIX, $row->fa_deleted_timestamp ); + do { $archiveName = wfTimestamp( TS_MW, $timestamp ) . '!' . $row->fa_name; $timestamp++; } while ( isset( $archiveNames[$archiveName] ) ); } + $archiveNames[$archiveName] = true; $destRel = $this->file->getArchiveRel( $archiveName ); $insertBatch[] = array( @@ -1663,19 +1798,23 @@ class LocalFileRestoreBatch { } $deleteIds[] = $row->fa_id; - if( !$this->unsuppress && $row->fa_deleted & File::DELETED_FILE ) { + + if ( !$this->unsuppress && $row->fa_deleted & File::DELETED_FILE ) { // private files can stay where they are $status->successCount++; } else { $storeBatch[] = array( $deletedUrl, 'public', $destRel ); $this->cleanupBatch[] = $row->fa_storage_key; } + $first = false; } + unset( $result ); // Add a warning to the status object for missing IDs $missingIds = array_diff( $this->ids, $idsPresent ); + foreach ( $missingIds as $id ) { $status->error( 'undelete-missing-filearchive', $id ); } @@ -1692,6 +1831,7 @@ class LocalFileRestoreBatch { // Store batch returned a critical error -- this usually means nothing was stored // Stop now and return an error $this->file->unlock(); + return $status; } @@ -1704,9 +1844,11 @@ class LocalFileRestoreBatch { if ( $insertCurrent ) { $dbw->insert( 'image', $insertCurrent, __METHOD__ ); } + if ( $insertBatch ) { $dbw->insert( 'oldimage', $insertBatch, __METHOD__ ); } + if ( $deleteIds ) { $dbw->delete( 'filearchive', array( 'fa_id IN (' . $dbw->makeList( $deleteIds ) . ')' ), @@ -1714,8 +1856,8 @@ class LocalFileRestoreBatch { } // If store batch is empty (all files are missing), deletion is to be considered successful - if( $status->successCount > 0 || !$storeBatch ) { - if( !$exists ) { + if ( $status->successCount > 0 || !$storeBatch ) { + if ( !$exists ) { wfDebug( __METHOD__ . " restored {$status->successCount} items, creating a new current\n" ); // Update site_stats @@ -1729,7 +1871,9 @@ class LocalFileRestoreBatch { $this->file->purgeHistory(); } } + $this->file->unlock(); + return $status; } @@ -1738,12 +1882,17 @@ class LocalFileRestoreBatch { */ function removeNonexistentFiles( $triplets ) { $files = $filteredTriplets = array(); - foreach( $triplets as $file ) + foreach ( $triplets as $file ) $files[$file[0]] = $file[0]; + $result = $this->file->repo->fileExistsBatch( $files, FSRepo::FILES_ONLY ); - foreach( $triplets as $file ) - if( $result[$file[0]] ) + + foreach ( $triplets as $file ) { + if ( $result[$file[0]] ) { $filteredTriplets[] = $file; + } + } + return $filteredTriplets; } @@ -1753,15 +1902,20 @@ class LocalFileRestoreBatch { function removeNonexistentFromCleanup( $batch ) { $files = $newBatch = array(); $repo = $this->file->repo; - foreach( $batch as $file ) { + + foreach ( $batch as $file ) { $files[$file] = $repo->getVirtualUrl( 'deleted' ) . '/' . rawurlencode( $repo->getDeletedHashPath( $file ) . $file ); } $result = $repo->fileExistsBatch( $files, FSRepo::FILES_ONLY ); - foreach( $batch as $file ) - if( $result[$file] ) + + foreach ( $batch as $file ) { + if ( $result[$file] ) { $newBatch[] = $file; + } + } + return $newBatch; } @@ -1773,13 +1927,16 @@ class LocalFileRestoreBatch { if ( !$this->cleanupBatch ) { return $this->file->repo->newGood(); } + $this->cleanupBatch = $this->removeNonexistentFromCleanup( $this->cleanupBatch ); + $status = $this->file->repo->cleanupDeletedBatch( $this->cleanupBatch ); + return $status; } } -#------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ /** * Helper class for file movement @@ -1820,29 +1977,35 @@ class LocalFileMoveBatch { array( 'oi_name' => $this->oldName ), __METHOD__ ); - while( $row = $this->db->fetchObject( $result ) ) { + + foreach ( $result as $row ) { $oldName = $row->oi_archive_name; $bits = explode( '!', $oldName, 2 ); - if( count( $bits ) != 2 ) { + + if ( count( $bits ) != 2 ) { wfDebug( "Invalid old file name: $oldName \n" ); continue; } + list( $timestamp, $filename ) = $bits; - if( $this->oldName != $filename ) { + + if ( $this->oldName != $filename ) { wfDebug( "Invalid old file name: $oldName \n" ); continue; } + $this->oldCount++; + // Do we want to add those to oldCount? - if( $row->oi_deleted & File::DELETED_FILE ) { + if ( $row->oi_deleted & File::DELETED_FILE ) { continue; } + $this->olds[] = array( "{$archiveBase}/{$this->oldHash}{$oldName}", "{$archiveBase}/{$this->newHash}{$timestamp}!{$this->newName}" ); } - $this->db->freeResult( $result ); } /** @@ -1858,19 +2021,23 @@ class LocalFileMoveBatch { wfDebugLog( 'imagemove', "Renamed {$this->file->name} in database: {$statusDb->successCount} successes, {$statusDb->failCount} failures" ); $statusMove = $repo->storeBatch( $triplets, FSRepo::DELETE_SOURCE ); wfDebugLog( 'imagemove', "Moved files for {$this->file->name}: {$statusMove->successCount} successes, {$statusMove->failCount} failures" ); - if( !$statusMove->isOk() ) { + + if ( !$statusMove->isOk() ) { wfDebugLog( 'imagemove', "Error in moving files: " . $statusMove->getWikiText() ); $this->db->rollback(); } $status->merge( $statusDb ); $status->merge( $statusMove ); + return $status; } /** - * Do the database updates and return a new WikiError indicating how many - * rows where updated. + * Do the database updates and return a new FileRepoStatus indicating how + * many rows where updated. + * + * @return FileRepoStatus */ function doDBUpdates() { $repo = $this->file->repo; @@ -1878,13 +2045,14 @@ class LocalFileMoveBatch { $dbw = $this->db; // Update current image - $dbw->update( + $dbw->update( 'image', array( 'img_name' => $this->newName ), array( 'img_name' => $this->oldName ), __METHOD__ ); - if( $dbw->affectedRows() ) { + + if ( $dbw->affectedRows() ) { $status->successCount++; } else { $status->failCount++; @@ -1895,11 +2063,12 @@ class LocalFileMoveBatch { 'oldimage', array( 'oi_name' => $this->newName, - 'oi_archive_name = ' . $dbw->strreplace( 'oi_archive_name', $dbw->addQuotes($this->oldName), $dbw->addQuotes($this->newName) ), + 'oi_archive_name = ' . $dbw->strreplace( 'oi_archive_name', $dbw->addQuotes( $this->oldName ), $dbw->addQuotes( $this->newName ) ), ), array( 'oi_name' => $this->oldName ), __METHOD__ ); + $affected = $dbw->affectedRows(); $total = $this->oldCount; $status->successCount += $affected; @@ -1910,34 +2079,42 @@ class LocalFileMoveBatch { /** * Generate triplets for FSRepo::storeBatch(). - */ + */ function getMoveTriplets() { $moves = array_merge( array( $this->cur ), $this->olds ); $triplets = array(); // The format is: (srcUrl, destZone, destUrl) - foreach( $moves as $move ) { + + foreach ( $moves as $move ) { // $move: (oldRelativePath, newRelativePath) $srcUrl = $this->file->repo->getVirtualUrl() . '/public/' . rawurlencode( $move[0] ); $triplets[] = array( $srcUrl, 'public', $move[1] ); wfDebugLog( 'imagemove', "Generated move triplet for {$this->file->name}: {$srcUrl} :: public :: {$move[1]}" ); } + return $triplets; } /** * Removes non-existent files from move batch. - */ + */ function removeNonexistentFiles( $triplets ) { $files = array(); - foreach( $triplets as $file ) + + foreach ( $triplets as $file ) { $files[$file[0]] = $file[0]; + } + $result = $this->file->repo->fileExistsBatch( $files, FSRepo::FILES_ONLY ); $filteredTriplets = array(); - foreach( $triplets as $file ) - if( $result[$file[0]] ) { + + foreach ( $triplets as $file ) { + if ( $result[$file[0]] ) { $filteredTriplets[] = $file; } else { wfDebugLog( 'imagemove', "File {$file[0]} does not exist" ); } + } + return $filteredTriplets; } } diff --git a/includes/filerepo/LocalRepo.php b/includes/filerepo/LocalRepo.php index 6c4d21a2..02883c53 100644 --- a/includes/filerepo/LocalRepo.php +++ b/includes/filerepo/LocalRepo.php @@ -1,4 +1,12 @@ fetchObject() ) + foreach ( $res as $row ) { $result[] = $this->newFileFromRow( $row ); + } $res->free(); + return $result; } @@ -189,8 +201,8 @@ class LocalRepo extends FSRepo { /** * Invalidates image redirect cache related to that image * - * @param Title $title Title of image - */ + * @param $title Title of page + */ function invalidateImageRedirect( $title ) { global $wgMemc; $memcKey = $this->getSharedCacheKey( 'image_redirect', md5( $title->getDBkey() ) ); diff --git a/includes/filerepo/NullRepo.php b/includes/filerepo/NullRepo.php index 2bc61bde..d5a1ee03 100644 --- a/includes/filerepo/NullRepo.php +++ b/includes/filerepo/NullRepo.php @@ -1,4 +1,10 @@ $sha1 ); if( $timestamp ) { $conds['oi_timestamp'] = $timestamp; } - $row = $dbr->selectRow( 'oldimage', $this->getCacheFields( 'oi_' ), $conds, $fname ); + $dbr = $repo->getSlaveDB(); + $row = $dbr->selectRow( 'oldimage', self::selectFields(), $conds, __METHOD__ ); if( $row ) { return self::newFromRow( $row, $repo ); } else { @@ -70,10 +74,10 @@ class OldLocalFile extends LocalFile { } /** - * @param Title $title - * @param FileRepo $repo - * @param string $time Timestamp or null to load by archive name - * @param string $archiveName Archive name or null to load by timestamp + * @param $title Title + * @param $repo FileRepo + * @param $time String: timestamp or null to load by archive name + * @param $archiveName String: archive name or null to load by timestamp */ function __construct( $title, $repo, $time, $archiveName ) { parent::__construct( $title, $repo ); @@ -135,7 +139,7 @@ class OldLocalFile extends LocalFile { } function getUrlRel() { - return 'archive/' . $this->getHashPath() . urlencode( $this->getArchiveName() ); + return 'archive/' . $this->getHashPath() . rawurlencode( $this->getArchiveName() ); } function upgradeRow() { @@ -172,8 +176,8 @@ class OldLocalFile extends LocalFile { } /** - * int $field one of DELETED_* bitfield constants - * for file or revision rows + * @param $field Integer: one of DELETED_* bitfield constants + * for file or revision rows * @return bool */ function isDeleted( $field ) { @@ -193,7 +197,8 @@ class OldLocalFile extends LocalFile { /** * Determine if the current user is allowed to view a particular * field of this image file, if it's marked as deleted. - * @param int $field + * + * @param $field Integer * @return bool */ function userCan( $field ) { diff --git a/includes/filerepo/RepoGroup.php b/includes/filerepo/RepoGroup.php index 1465400c..b9996941 100644 --- a/includes/filerepo/RepoGroup.php +++ b/includes/filerepo/RepoGroup.php @@ -1,14 +1,19 @@ getNamespace() != NS_MEDIA && $title->getNamespace() != NS_FILE ) { + throw new MWException( __METHOD__ . ' recieved an Title object with incorrect namespace' ); + } + # Check the cache if ( empty( $options['ignoreRedirect'] ) && empty( $options['private'] ) - && empty( $options['bypassCache'] ) ) + && empty( $options['bypassCache'] ) + && $title->getNamespace() == NS_FILE ) { $useCache = true; $time = isset( $options['time'] ) ? $options['time'] : ''; @@ -224,7 +237,7 @@ class RepoGroup { if ( !$this->reposInitialised ) { $this->initialiseRepos(); } - foreach ( $this->foreignRepos as $key => $repo ) { + foreach ( $this->foreignRepos as $repo ) { if ( $repo->name == $name) return $repo; } @@ -243,8 +256,8 @@ class RepoGroup { * Call a function for each foreign repo, with the repo object as the * first parameter. * - * @param $callback callback The function to call - * @param $params array Optional additional parameters to pass to the function + * @param $callback Callback: the function to call + * @param $params Array: optional additional parameters to pass to the function */ function forEachForeignRepo( $callback, $params = array() ) { foreach( $this->foreignRepos as $repo ) { @@ -258,7 +271,7 @@ class RepoGroup { /** * Does the installation have any foreign repos set up? - * @return bool + * @return Boolean */ function hasForeignRepos() { return (bool)$this->foreignRepos; diff --git a/includes/filerepo/UnregisteredLocalFile.php b/includes/filerepo/UnregisteredLocalFile.php index 6f63cb0b..990a218c 100644 --- a/includes/filerepo/UnregisteredLocalFile.php +++ b/includes/filerepo/UnregisteredLocalFile.php @@ -1,4 +1,10 @@ repo ) { - return $this->repo->getZoneUrl( 'public' ) . '/' . $this->repo->getHashPath( $this->name ) . urlencode( $this->name ); + return $this->repo->getZoneUrl( 'public' ) . '/' . $this->repo->getHashPath( $this->name ) . rawurlencode( $this->name ); } else { return false; } diff --git a/includes/installer/CliInstaller.php b/includes/installer/CliInstaller.php new file mode 100644 index 00000000..9e8fb2c5 --- /dev/null +++ b/includes/installer/CliInstaller.php @@ -0,0 +1,171 @@ + 'wgDBtype', + 'dbserver' => 'wgDBserver', + 'dbname' => 'wgDBname', + 'dbuser' => 'wgDBuser', + 'dbpass' => 'wgDBpassword', + 'dbprefix' => 'wgDBprefix', + 'dbtableoptions' => 'wgDBTableOptions', + 'dbmysql5' => 'wgDBmysql5', + 'dbserver' => 'wgDBserver', + 'dbport' => 'wgDBport', + 'dbname' => 'wgDBname', + 'dbuser' => 'wgDBuser', + 'dbpass' => 'wgDBpassword', + 'dbschema' => 'wgDBmwschema', + 'dbpath' => 'wgSQLiteDataDir', + 'scriptpath' => 'wgScriptPath', + ); + + /** + * Constructor. + * + * @param $siteName + * @param $admin + * @param $option Array + */ + function __construct( $siteName, $admin = null, array $option = array() ) { + global $wgContLang; + + parent::__construct(); + + foreach ( $this->optionMap as $opt => $global ) { + if ( isset( $option[$opt] ) ) { + $GLOBALS[$global] = $option[$opt]; + $this->setVar( $global, $option[$opt] ); + } + } + + if ( isset( $option['lang'] ) ) { + global $wgLang, $wgLanguageCode; + $this->setVar( '_UserLang', $option['lang'] ); + $wgContLang = Language::factory( $option['lang'] ); + $wgLang = Language::factory( $option['lang'] ); + $wgLanguageCode = $option['lang']; + } + + $this->setVar( 'wgSitename', $siteName ); + + $metaNS = $wgContLang->ucfirst( str_replace( ' ', '_', $siteName ) ); + if ( $metaNS == 'MediaWiki' ) { + $metaNS = 'Project'; + } + $this->setVar( 'wgMetaNamespace', $metaNS ); + + if ( $admin ) { + $this->setVar( '_AdminName', $admin ); + } + + if ( !isset( $option['installdbuser'] ) ) { + $this->setVar( '_InstallUser', + $this->getVar( 'wgDBuser' ) ); + $this->setVar( '_InstallPassword', + $this->getVar( 'wgDBpassword' ) ); + } else { + $this->setVar( '_InstallUser', + $option['installdbuser'] ); + $this->setVar( '_InstallPassword', + $option['installdbpass'] ); + } + + if ( isset( $option['pass'] ) ) { + $this->setVar( '_AdminPassword', $option['pass'] ); + } + } + + /** + * Main entry point. + */ + public function execute() { + $vars = Installer::getExistingLocalSettings(); + if( $vars ) { + $this->showStatusMessage( + Status::newFatal( "config-localsettings-cli-upgrade" ) + ); + } + + $this->performInstallation( + array( $this, 'startStage' ), + array( $this, 'endStage' ) + ); + } + + /** + * Write LocalSettings.php to a given path + * + * @param $path String Full path to write LocalSettings.php to + */ + public function writeConfigurationFile( $path ) { + $ls = new LocalSettingsGenerator( $this ); + $ls->writeFile( "$path/LocalSettings.php" ); + } + + public function startStage( $step ) { + $this->showMessage( "config-install-$step" ); + } + + public function endStage( $step, $status ) { + $this->showStatusMessage( $status ); + $this->showMessage( 'config-install-step-done' ); + } + + public function showMessage( $msg /*, ... */ ) { + echo $this->getMessageText( func_get_args() ) . "\n"; + flush(); + } + + public function showError( $msg /*, ... */ ) { + echo "***{$this->getMessageText( func_get_args() )}***\n"; + flush(); + } + + /** + * @return string + */ + protected function getMessageText( $params ) { + $msg = array_shift( $params ); + + $text = wfMsgExt( $msg, array( 'parseinline' ), $params ); + + $text = preg_replace( '/(.*?)<\/a>/', '$2 <$1>', $text ); + return html_entity_decode( strip_tags( $text ), ENT_QUOTES ); + } + + /** + * Dummy + */ + public function showHelpBox( $msg /*, ... */ ) { + } + + public function showStatusMessage( Status $status ) { + $warnings = array_merge( $status->getWarningsArray(), + $status->getErrorsArray() ); + + if ( count( $warnings ) !== 0 ) { + foreach ( $warnings as $w ) { + call_user_func_array( array( $this, 'showMessage' ), $w ); + } + } + + if ( !$status->isOk() ) { + echo "\n"; + exit; + } + } +} diff --git a/includes/installer/DatabaseInstaller.php b/includes/installer/DatabaseInstaller.php new file mode 100644 index 00000000..0da24f8e --- /dev/null +++ b/includes/installer/DatabaseInstaller.php @@ -0,0 +1,580 @@ +parent can be assumed to be a WebInstaller. + */ + public abstract function getConnectForm(); + + /** + * Set variables based on the request array, assuming it was submitted + * via the form returned by getConnectForm(). Validate the connection + * settings by attempting to connect with them. + * + * If this is called, $this->parent can be assumed to be a WebInstaller. + * + * @return Status + */ + public abstract function submitConnectForm(); + + /** + * Get HTML for a web form that retrieves settings used for installation. + * $this->parent can be assumed to be a WebInstaller. + * If the DB type has no settings beyond those already configured with + * getConnectForm(), this should return false. + */ + public function getSettingsForm() { + return false; + } + + /** + * Set variables based on the request array, assuming it was submitted via + * the form return by getSettingsForm(). + * + * @return Status + */ + public function submitSettingsForm() { + return Status::newGood(); + } + + /** + * Open a connection to the database using the administrative user/password + * currently defined in the session, without any caching. Returns a status + * object. On success, the status object will contain a Database object in + * its value member. + * + * @return Status + */ + public abstract function openConnection(); + + /** + * Create the database and return a Status object indicating success or + * failure. + * + * @return Status + */ + public abstract function setupDatabase(); + + /** + * Connect to the database using the administrative user/password currently + * defined in the session. Returns a status object. On success, the status + * object will contain a Database object in its value member. + * + * This will return a cached connection if one is available. + * + * @return Status + */ + public function getConnection() { + if ( $this->db ) { + return Status::newGood( $this->db ); + } + + $status = $this->openConnection(); + if ( $status->isOK() ) { + $this->db = $status->value; + // Enable autocommit + $this->db->clearFlag( DBO_TRX ); + $this->db->commit(); + } + return $status; + } + + /** + * Create database tables from scratch. + * + * @return Status + */ + public function createTables() { + $status = $this->getConnection(); + if ( !$status->isOK() ) { + return $status; + } + $this->db->selectDB( $this->getVar( 'wgDBname' ) ); + + if( $this->db->tableExists( 'user' ) ) { + $status->warning( 'config-install-tables-exist' ); + $this->enableLB(); + return $status; + } + + $this->db->setFlag( DBO_DDLMODE ); // For Oracle's handling of schema files + $this->db->begin( __METHOD__ ); + + $error = $this->db->sourceFile( $this->db->getSchema() ); + if( $error !== true ) { + $this->db->reportQueryError( $error, 0, '', __METHOD__ ); + $this->db->rollback( __METHOD__ ); + $status->fatal( 'config-install-tables-failed', $error ); + } else { + $this->db->commit( __METHOD__ ); + } + // Resume normal operations + if( $status->isOk() ) { + $this->enableLB(); + } + return $status; + } + + /** + * Create the tables for each extension the user enabled + * @return Status + */ + public function createExtensionTables() { + $status = $this->getConnection(); + if ( !$status->isOK() ) { + return $status; + } + $updater = DatabaseUpdater::newForDB( $this->db ); + $extensionUpdates = $updater->getNewExtensions(); + + $ourExtensions = array_map( 'strtolower', $this->getVar( '_Extensions' ) ); + + foreach( $ourExtensions as $ext ) { + if( isset( $extensionUpdates[$ext] ) ) { + $this->db->begin( __METHOD__ ); + $error = $this->db->sourceFile( $extensionUpdates[$ext] ); + if( $error !== true ) { + $this->db->rollback( __METHOD__ ); + $status->warning( 'config-install-tables-failed', $error ); + } else { + $this->db->commit( __METHOD__ ); + } + } + } + + // Now run updates to create tables for old extensions + $updater->doUpdates( array( 'extensions' ) ); + + return $status; + } + + /** + * Get the DBMS-specific options for LocalSettings.php generation. + * + * @return String + */ + public abstract function getLocalSettings(); + + /** + * Override this to provide DBMS-specific schema variables, to be + * substituted into tables.sql and other schema files. + */ + public function getSchemaVars() { + return array(); + } + + /** + * Set appropriate schema variables in the current database connection. + * + * This should be called after any request data has been imported, but before + * any write operations to the database. + */ + public function setupSchemaVars() { + $status = $this->getConnection(); + if ( $status->isOK() ) { + $status->value->setSchemaVars( $this->getSchemaVars() ); + } else { + throw new MWException( __METHOD__.': unexpected DB connection error' ); + } + } + + /** + * Set up LBFactory so that wfGetDB() etc. works. + * We set up a special LBFactory instance which returns the current + * installer connection. + */ + public function enableLB() { + $status = $this->getConnection(); + if ( !$status->isOK() ) { + throw new MWException( __METHOD__.': unexpected DB connection error' ); + } + LBFactory::setInstance( new LBFactory_Single( array( + 'connection' => $status->value ) ) ); + } + + /** + * Perform database upgrades + * + * @return Boolean + */ + public function doUpgrade() { + $this->setupSchemaVars(); + $this->enableLB(); + + $ret = true; + ob_start( array( $this, 'outputHandler' ) ); + try { + $up = DatabaseUpdater::newForDB( $this->db ); + $up->doUpdates(); + } catch ( MWException $e ) { + echo "\nAn error occured:\n"; + echo $e->getText(); + $ret = false; + } + ob_end_flush(); + return $ret; + } + + /** + * Allow DB installers a chance to make last-minute changes before installation + * occurs. This happens before setupDatabase() or createTables() is called, but + * long after the constructor. Helpful for things like modifying setup steps :) + */ + public function preInstall() { + + } + + /** + * Allow DB installers a chance to make checks before upgrade. + */ + public function preUpgrade() { + + } + + /** + * Get an array of MW configuration globals that will be configured by this class. + */ + public function getGlobalNames() { + return $this->globalNames; + } + + /** + * Construct and initialise parent. + * This is typically only called from Installer::getDBInstaller() + */ + public function __construct( $parent ) { + $this->parent = $parent; + } + + /** + * Convenience function. + * Check if a named extension is present. + * + * @see wfDl + */ + protected static function checkExtension( $name ) { + wfSuppressWarnings(); + $compiled = wfDl( $name ); + wfRestoreWarnings(); + return $compiled; + } + + /** + * Get the internationalised name for this DBMS. + */ + public function getReadableName() { + return wfMsg( 'config-type-' . $this->getName() ); + } + + /** + * Get a name=>value map of MW configuration globals that overrides. + * DefaultSettings.php + */ + public function getGlobalDefaults() { + return array(); + } + + /** + * Get a name=>value map of internal variables used during installation. + */ + public function getInternalDefaults() { + return $this->internalDefaults; + } + + /** + * Get a variable, taking local defaults into account. + */ + public function getVar( $var, $default = null ) { + $defaults = $this->getGlobalDefaults(); + $internal = $this->getInternalDefaults(); + if ( isset( $defaults[$var] ) ) { + $default = $defaults[$var]; + } elseif ( isset( $internal[$var] ) ) { + $default = $internal[$var]; + } + return $this->parent->getVar( $var, $default ); + } + + /** + * Convenience alias for $this->parent->setVar() + */ + public function setVar( $name, $value ) { + $this->parent->setVar( $name, $value ); + } + + /** + * Get a labelled text box to configure a local variable. + */ + public function getTextBox( $var, $label, $attribs = array(), $helpData = "" ) { + $name = $this->getName() . '_' . $var; + $value = $this->getVar( $var ); + if ( !isset( $attribs ) ) { + $attribs = array(); + } + return $this->parent->getTextBox( array( + 'var' => $var, + 'label' => $label, + 'attribs' => $attribs, + 'controlName' => $name, + 'value' => $value, + 'help' => $helpData + ) ); + } + + /** + * Get a labelled password box to configure a local variable. + * Implements password hiding. + */ + public function getPasswordBox( $var, $label, $attribs = array(), $helpData = "" ) { + $name = $this->getName() . '_' . $var; + $value = $this->getVar( $var ); + if ( !isset( $attribs ) ) { + $attribs = array(); + } + return $this->parent->getPasswordBox( array( + 'var' => $var, + 'label' => $label, + 'attribs' => $attribs, + 'controlName' => $name, + 'value' => $value, + 'help' => $helpData + ) ); + } + + /** + * Get a labelled checkbox to configure a local boolean variable. + */ + public function getCheckBox( $var, $label, $attribs = array(), $helpData = "" ) { + $name = $this->getName() . '_' . $var; + $value = $this->getVar( $var ); + return $this->parent->getCheckBox( array( + 'var' => $var, + 'label' => $label, + 'attribs' => $attribs, + 'controlName' => $name, + 'value' => $value, + 'help' => $helpData + )); + } + + /** + * Get a set of labelled radio buttons. + * + * @param $params Array: + * Parameters are: + * var: The variable to be configured (required) + * label: The message name for the label (required) + * itemLabelPrefix: The message name prefix for the item labels (required) + * values: List of allowed values (required) + * itemAttribs Array of attribute arrays, outer key is the value name (optional) + * + */ + public function getRadioSet( $params ) { + $params['controlName'] = $this->getName() . '_' . $params['var']; + $params['value'] = $this->getVar( $params['var'] ); + return $this->parent->getRadioSet( $params ); + } + + /** + * Convenience function to set variables based on form data. + * Assumes that variables containing "password" in the name are (potentially + * fake) passwords. + * @param $varNames Array + */ + public function setVarsFromRequest( $varNames ) { + return $this->parent->setVarsFromRequest( $varNames, $this->getName() . '_' ); + } + + /** + * Determine whether an existing installation of MediaWiki is present in + * the configured administrative connection. Returns true if there is + * such a wiki, false if the database doesn't exist. + * + * Traditionally, this is done by testing for the existence of either + * the revision table or the cur table. + * + * @return Boolean + */ + public function needsUpgrade() { + $status = $this->getConnection(); + if ( !$status->isOK() ) { + return false; + } + + if ( !$this->db->selectDB( $this->getVar( 'wgDBname' ) ) ) { + return false; + } + return $this->db->tableExists( 'cur' ) || $this->db->tableExists( 'revision' ); + } + + /** + * Get a standard install-user fieldset. + * + * @return String + */ + public function getInstallUserBox() { + return + Html::openElement( 'fieldset' ) . + Html::element( 'legend', array(), wfMsg( 'config-db-install-account' ) ) . + $this->getTextBox( '_InstallUser', 'config-db-username', array(), $this->parent->getHelpBox( 'config-db-install-username' ) ) . + $this->getPasswordBox( '_InstallPassword', 'config-db-password', array(), $this->parent->getHelpBox( 'config-db-install-password' ) ) . + Html::closeElement( 'fieldset' ); + } + + /** + * Submit a standard install user fieldset. + */ + public function submitInstallUserBox() { + $this->setVarsFromRequest( array( '_InstallUser', '_InstallPassword' ) ); + return Status::newGood(); + } + + /** + * Get a standard web-user fieldset + * @param $noCreateMsg String: Message to display instead of the creation checkbox. + * Set this to false to show a creation checkbox. + * + * @return String + */ + public function getWebUserBox( $noCreateMsg = false ) { + $wrapperStyle = $this->getVar( '_SameAccount' ) ? 'display: none' : ''; + $s = Html::openElement( 'fieldset' ) . + Html::element( 'legend', array(), wfMsg( 'config-db-web-account' ) ) . + $this->getCheckBox( + '_SameAccount', 'config-db-web-account-same', + array( 'class' => 'hideShowRadio', 'rel' => 'dbOtherAccount' ) + ) . + Html::openElement( 'div', array( 'id' => 'dbOtherAccount', 'style' => $wrapperStyle ) ) . + $this->getTextBox( 'wgDBuser', 'config-db-username' ) . + $this->getPasswordBox( 'wgDBpassword', 'config-db-password' ) . + $this->parent->getHelpBox( 'config-db-web-help' ); + if ( $noCreateMsg ) { + $s .= $this->parent->getWarningBox( wfMsgNoTrans( $noCreateMsg ) ); + } else { + $s .= $this->getCheckBox( '_CreateDBAccount', 'config-db-web-create' ); + } + $s .= Html::closeElement( 'div' ) . Html::closeElement( 'fieldset' ); + return $s; + } + + /** + * Submit the form from getWebUserBox(). + * + * @return Status + */ + public function submitWebUserBox() { + $this->setVarsFromRequest( + array( 'wgDBuser', 'wgDBpassword', '_SameAccount', '_CreateDBAccount' ) + ); + + if ( $this->getVar( '_SameAccount' ) ) { + $this->setVar( 'wgDBuser', $this->getVar( '_InstallUser' ) ); + $this->setVar( 'wgDBpassword', $this->getVar( '_InstallPassword' ) ); + } + + if( $this->getVar( '_CreateDBAccount' ) && strval( $this->getVar( 'wgDBpassword' ) ) == '' ) { + return Status::newFatal( 'config-db-password-empty', $this->getVar( 'wgDBuser' ) ); + } + + return Status::newGood(); + } + + /** + * Common function for databases that don't understand the MySQLish syntax of interwiki.sql. + * + * @return Status + */ + public function populateInterwikiTable() { + $status = $this->getConnection(); + if ( !$status->isOK() ) { + return $status; + } + $this->db->selectDB( $this->getVar( 'wgDBname' ) ); + + if( $this->db->selectRow( 'interwiki', '*', array(), __METHOD__ ) ) { + $status->warning( 'config-install-interwiki-exists' ); + return $status; + } + global $IP; + wfSuppressWarnings(); + $rows = file( "$IP/maintenance/interwiki.list", + FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES ); + wfRestoreWarnings(); + $interwikis = array(); + if ( !$rows ) { + return Status::newFatal( 'config-install-interwiki-list' ); + } + foreach( $rows as $row ) { + $row = preg_replace( '/^\s*([^#]*?)\s*(#.*)?$/', '\\1', $row ); // strip comments - whee + if ( $row == "" ) continue; + $row .= "||"; + $interwikis[] = array_combine( + array( 'iw_prefix', 'iw_url', 'iw_local', 'iw_api', 'iw_wikiid' ), + explode( '|', $row ) + ); + } + $this->db->insert( 'interwiki', $interwikis, __METHOD__ ); + return Status::newGood(); + } + + public function outputHandler( $string ) { + return htmlspecialchars( $string ); + } +} diff --git a/includes/installer/DatabaseUpdater.php b/includes/installer/DatabaseUpdater.php new file mode 100644 index 00000000..79928d1f --- /dev/null +++ b/includes/installer/DatabaseUpdater.php @@ -0,0 +1,574 @@ +db = $db; + $this->db->setFlag( DBO_DDLMODE ); // For Oracle's handling of schema files + $this->shared = $shared; + if ( $maintenance ) { + $this->maintenance = $maintenance; + } else { + $this->maintenance = new FakeMaintenance; + } + $this->initOldGlobals(); + $this->loadExtensions(); + wfRunHooks( 'LoadExtensionSchemaUpdates', array( $this ) ); + } + + /** + * Initialize all of the old globals. One day this should all become + * something much nicer + */ + private function initOldGlobals() { + global $wgExtNewTables, $wgExtNewFields, $wgExtPGNewFields, + $wgExtPGAlteredFields, $wgExtNewIndexes, $wgExtModifiedFields; + + # For extensions only, should be populated via hooks + # $wgDBtype should be checked to specifiy the proper file + $wgExtNewTables = array(); // table, dir + $wgExtNewFields = array(); // table, column, dir + $wgExtPGNewFields = array(); // table, column, column attributes; for PostgreSQL + $wgExtPGAlteredFields = array(); // table, column, new type, conversion method; for PostgreSQL + $wgExtNewIndexes = array(); // table, index, dir + $wgExtModifiedFields = array(); // table, index, dir + } + + /** + * Loads LocalSettings.php, if needed, and initialises everything needed for LoadExtensionSchemaUpdates hook + */ + private function loadExtensions() { + if ( !defined( 'MEDIAWIKI_INSTALL' ) ) { + return; // already loaded + } + $vars = Installer::getExistingLocalSettings(); + if ( !$vars ) { + return; // no LocalSettings found + } + if ( !isset( $vars['wgHooks'] ) && !isset( $vars['wgHooks']['LoadExtensionSchemaUpdates'] ) ) { + return; + } + global $wgHooks, $wgAutoloadClasses; + $wgHooks['LoadExtensionSchemaUpdates'] = $vars['wgHooks']['LoadExtensionSchemaUpdates']; + $wgAutoloadClasses = $wgAutoloadClasses + $vars['wgAutoloadClasses']; + } + + /** + * @throws MWException + * @param DatabaseBase $db + * @param bool $shared + * @param null $maintenance + * @return DatabaseUpdater + */ + public static function newForDB( &$db, $shared = false, $maintenance = null ) { + $type = $db->getType(); + if( in_array( $type, Installer::getDBTypes() ) ) { + $class = ucfirst( $type ) . 'Updater'; + return new $class( $db, $shared, $maintenance ); + } else { + throw new MWException( __METHOD__ . ' called for unsupported $wgDBtype' ); + } + } + + /** + * Get a database connection to run updates + * + * @return DatabaseBase + */ + public function getDB() { + return $this->db; + } + + /** + * Output some text. If we're running from web, escape the text first. + * + * @param $str String: Text to output + */ + public function output( $str ) { + if ( $this->maintenance->isQuiet() ) { + return; + } + global $wgCommandLineMode; + if( !$wgCommandLineMode ) { + $str = htmlspecialchars( $str ); + } + echo $str; + flush(); + } + + /** + * Add a new update coming from an extension. This should be called by + * extensions while executing the LoadExtensionSchemaUpdates hook. + * + * @param $update Array: the update to run. Format is the following: + * first item is the callback function, it also can be a + * simple string with the name of a function in this class, + * following elements are parameters to the function. + * Note that callback functions will receive this object as + * first parameter. + */ + public function addExtensionUpdate( Array $update ) { + $this->extensionUpdates[] = $update; + } + + /** + * Convenience wrapper for addExtensionUpdate() when adding a new table (which + * is the most common usage of updaters in an extension) + * @param $tableName String Name of table to create + * @param $sqlPath String Full path to the schema file + */ + public function addExtensionTable( $tableName, $sqlPath ) { + $this->extensionUpdates[] = array( 'addTable', $tableName, $sqlPath, true ); + } + + /** + * Add a brand new extension to MediaWiki. Used during the initial install + * @param $ext String Name of extension + * @param $sqlPath String Full path to the schema file + */ + public function addNewExtension( $ext, $sqlPath ) { + $this->newExtensions[ strtolower( $ext ) ] = $sqlPath; + } + + /** + * Get the list of extensions that registered a schema with our DB type + * @return array + */ + public function getNewExtensions() { + return $this->newExtensions; + } + + /** + * Get the list of extension-defined updates + * + * @return Array + */ + protected function getExtensionUpdates() { + return $this->extensionUpdates; + } + + public function getPostDatabaseUpdateMaintenance() { + return $this->postDatabaseUpdateMaintenance; + } + + /** + * Do all the updates + * + * @param $what Array: what updates to perform + */ + public function doUpdates( $what = array( 'core', 'extensions', 'purge' ) ) { + global $wgVersion; + + $what = array_flip( $what ); + if ( isset( $what['core'] ) ) { + $this->runUpdates( $this->getCoreUpdateList(), false ); + } + if ( isset( $what['extensions'] ) ) { + $this->runUpdates( $this->getOldGlobalUpdates(), false ); + $this->runUpdates( $this->getExtensionUpdates(), true ); + } + + $this->setAppliedUpdates( $wgVersion, $this->updates ); + + if( isset( $what['purge'] ) ) { + $this->purgeCache(); + } + if ( isset( $what['core'] ) ) { + $this->checkStats(); + } + } + + /** + * Helper function for doUpdates() + * + * @param $updates Array of updates to run + * @param $passSelf Boolean: whether to pass this object we calling external + * functions + */ + private function runUpdates( array $updates, $passSelf ) { + foreach ( $updates as $params ) { + $func = array_shift( $params ); + if( !is_array( $func ) && method_exists( $this, $func ) ) { + $func = array( $this, $func ); + } elseif ( $passSelf ) { + array_unshift( $params, $this ); + } + call_user_func_array( $func, $params ); + flush(); + } + $this->updates = array_merge( $this->updates, $updates ); + } + + protected function setAppliedUpdates( $version, $updates = array() ) { + if( !$this->canUseNewUpdatelog() ) { + return; + } + $key = "updatelist-$version-" . time(); + $this->db->insert( 'updatelog', + array( 'ul_key' => $key, 'ul_value' => serialize( $updates ) ), + __METHOD__ ); + } + + /** + * Helper function: check if the given key is present in the updatelog table. + * Obviously, only use this for updates that occur after the updatelog table was + * created! + */ + public function updateRowExists( $key ) { + $row = $this->db->selectRow( + 'updatelog', + '1', + array( 'ul_key' => $key ), + __METHOD__ + ); + return (bool)$row; + } + + /** + * Updatelog was changed in 1.17 to have a ul_value column so we can record + * more information about what kind of updates we've done (that's what this + * class does). Pre-1.17 wikis won't have this column, and really old wikis + * might not even have updatelog at all + * + * @return boolean + */ + protected function canUseNewUpdatelog() { + return $this->db->tableExists( 'updatelog' ) && + $this->db->fieldExists( 'updatelog', 'ul_value' ); + } + + /** + * Before 1.17, we used to handle updates via stuff like + * $wgExtNewTables/Fields/Indexes. This is nasty :) We refactored a lot + * of this in 1.17 but we want to remain back-compatible for a while. So + * load up these old global-based things into our update list. + */ + protected function getOldGlobalUpdates() { + global $wgExtNewFields, $wgExtNewTables, $wgExtModifiedFields, + $wgExtNewIndexes, $wgSharedDB, $wgSharedTables; + + $doUser = $this->shared ? + $wgSharedDB && in_array( 'user', $wgSharedTables ) : + !$wgSharedDB || !in_array( 'user', $wgSharedTables ); + + $updates = array(); + + foreach ( $wgExtNewTables as $tableRecord ) { + $updates[] = array( + 'addTable', $tableRecord[0], $tableRecord[1], true + ); + } + + foreach ( $wgExtNewFields as $fieldRecord ) { + if ( $fieldRecord[0] != 'user' || $doUser ) { + $updates[] = array( + 'addField', $fieldRecord[0], $fieldRecord[1], + $fieldRecord[2], true + ); + } + } + + foreach ( $wgExtNewIndexes as $fieldRecord ) { + $updates[] = array( + 'addIndex', $fieldRecord[0], $fieldRecord[1], + $fieldRecord[2], true + ); + } + + foreach ( $wgExtModifiedFields as $fieldRecord ) { + $updates[] = array( + 'modifyField', $fieldRecord[0], $fieldRecord[1], + $fieldRecord[2], true + ); + } + + return $updates; + } + + /** + * Get an array of updates to perform on the database. Should return a + * multi-dimensional array. The main key is the MediaWiki version (1.12, + * 1.13...) with the values being arrays of updates, identical to how + * updaters.inc did it (for now) + * + * @return Array + */ + protected abstract function getCoreUpdateList(); + + /** + * Applies a SQL patch + * @param $path String Path to the patch file + * @param $isFullPath Boolean Whether to treat $path as a relative or not + */ + protected function applyPatch( $path, $isFullPath = false ) { + if ( $isFullPath ) { + $this->db->sourceFile( $path ); + } else { + $this->db->sourceFile( $this->db->patchPath( $path ) ); + } + } + + /** + * Add a new table to the database + * @param $name String Name of the new table + * @param $patch String Path to the patch file + * @param $fullpath Boolean Whether to treat $patch path as a relative or not + */ + protected function addTable( $name, $patch, $fullpath = false ) { + if ( $this->db->tableExists( $name ) ) { + $this->output( "...$name table already exists.\n" ); + } else { + $this->output( "Creating $name table..." ); + $this->applyPatch( $patch, $fullpath ); + $this->output( "ok\n" ); + } + } + + /** + * Add a new field to an existing table + * @param $table String Name of the table to modify + * @param $field String Name of the new field + * @param $patch String Path to the patch file + * @param $fullpath Boolean Whether to treat $patch path as a relative or not + */ + protected function addField( $table, $field, $patch, $fullpath = false ) { + if ( !$this->db->tableExists( $table ) ) { + $this->output( "...$table table does not exist, skipping new field patch\n" ); + } elseif ( $this->db->fieldExists( $table, $field ) ) { + $this->output( "...have $field field in $table table.\n" ); + } else { + $this->output( "Adding $field field to table $table..." ); + $this->applyPatch( $patch, $fullpath ); + $this->output( "ok\n" ); + } + } + + /** + * Add a new index to an existing table + * @param $table String Name of the table to modify + * @param $index String Name of the new index + * @param $patch String Path to the patch file + * @param $fullpath Boolean Whether to treat $patch path as a relative or not + */ + protected function addIndex( $table, $index, $patch, $fullpath = false ) { + if ( $this->db->indexExists( $table, $index ) ) { + $this->output( "...$index key already set on $table table.\n" ); + } else { + $this->output( "Adding $index key to table $table... " ); + $this->applyPatch( $patch, $fullpath ); + $this->output( "ok\n" ); + } + } + + /** + * Drop a field from an existing table + * + * @param $table String Name of the table to modify + * @param $field String Name of the old field + * @param $patch String Path to the patch file + * @param $fullpath Boolean Whether to treat $patch path as a relative or not + */ + protected function dropField( $table, $field, $patch, $fullpath = false ) { + if ( $this->db->fieldExists( $table, $field ) ) { + $this->output( "Table $table contains $field field. Dropping... " ); + $this->applyPatch( $patch, $fullpath ); + $this->output( "ok\n" ); + } else { + $this->output( "...$table table does not contain $field field.\n" ); + } + } + + /** + * Drop an index from an existing table + * + * @param $table String: Name of the table to modify + * @param $index String: Name of the old index + * @param $patch String: Path to the patch file + * @param $fullpath Boolean: Whether to treat $patch path as a relative or not + */ + protected function dropIndex( $table, $index, $patch, $fullpath = false ) { + if ( $this->db->indexExists( $table, $index ) ) { + $this->output( "Dropping $index from table $table... " ); + $this->applyPatch( $patch, $fullpath ); + $this->output( "ok\n" ); + } else { + $this->output( "...$index key doesn't exist.\n" ); + } + } + + /** + * Modify an existing field + * + * @param $table String: name of the table to which the field belongs + * @param $field String: name of the field to modify + * @param $patch String: path to the patch file + * @param $fullpath Boolean: whether to treat $patch path as a relative or not + */ + public function modifyField( $table, $field, $patch, $fullpath = false ) { + if ( !$this->db->tableExists( $table ) ) { + $this->output( "...$table table does not exist, skipping modify field patch\n" ); + } elseif ( !$this->db->fieldExists( $table, $field ) ) { + $this->output( "...$field field does not exist in $table table, skipping modify field patch\n" ); + } else { + $this->output( "Modifying $field field of table $table..." ); + $this->applyPatch( $patch, $fullpath ); + $this->output( "ok\n" ); + } + } + + /** + * Purge the objectcache table + */ + protected function purgeCache() { + # We can't guarantee that the user will be able to use TRUNCATE, + # but we know that DELETE is available to us + $this->output( "Purging caches..." ); + $this->db->delete( 'objectcache', '*', __METHOD__ ); + $this->output( "done.\n" ); + } + + /** + * Check the site_stats table is not properly populated. + */ + protected function checkStats() { + $this->output( "Checking site_stats row..." ); + $row = $this->db->selectRow( 'site_stats', '*', array( 'ss_row_id' => 1 ), __METHOD__ ); + if ( $row === false ) { + $this->output( "data is missing! rebuilding...\n" ); + } elseif ( isset( $row->site_stats ) && $row->ss_total_pages == -1 ) { + $this->output( "missing ss_total_pages, rebuilding...\n" ); + } else { + $this->output( "done.\n" ); + return; + } + SiteStatsInit::doAllAndCommit( false ); + } + + # Common updater functions + + protected function doActiveUsersInit() { + $activeUsers = $this->db->selectField( 'site_stats', 'ss_active_users', false, __METHOD__ ); + if ( $activeUsers == -1 ) { + $activeUsers = $this->db->selectField( 'recentchanges', + 'COUNT( DISTINCT rc_user_text )', + array( 'rc_user != 0', 'rc_bot' => 0, "rc_log_type != 'newusers'" ), __METHOD__ + ); + $this->db->update( 'site_stats', + array( 'ss_active_users' => intval( $activeUsers ) ), + array( 'ss_row_id' => 1 ), __METHOD__, array( 'LIMIT' => 1 ) + ); + } + $this->output( "...ss_active_users user count set...\n" ); + } + + protected function doLogUsertextPopulation() { + if ( $this->updateRowExists( 'populate log_usertext' ) ) { + $this->output( "...log_user_text field already populated.\n" ); + return; + } + + $this->output( + "Populating log_user_text field, printing progress markers. For large\n" . + "databases, you may want to hit Ctrl-C and do this manually with\n" . + "maintenance/populateLogUsertext.php.\n" ); + $task = new PopulateLogUsertext(); + $task->execute(); + $this->output( "Done populating log_user_text field.\n" ); + } + + protected function doLogSearchPopulation() { + if ( $this->updateRowExists( 'populate log_search' ) ) { + $this->output( "...log_search table already populated.\n" ); + return; + } + + $this->output( + "Populating log_search table, printing progress markers. For large\n" . + "databases, you may want to hit Ctrl-C and do this manually with\n" . + "maintenance/populateLogSearch.php.\n" ); + $task = new PopulateLogSearch(); + $task->execute(); + $this->output( "Done populating log_search table.\n" ); + } + + protected function doUpdateTranscacheField() { + if ( $this->updateRowExists( 'convert transcache field' ) ) { + $this->output( "...transcache tc_time already converted.\n" ); + return; + } + + $this->output( "Converting tc_time from UNIX epoch to MediaWiki timestamp... " ); + $this->applyPatch( 'patch-tc-timestamp.sql' ); + $this->output( "ok\n" ); + } + + protected function doCollationUpdate() { + global $wgCategoryCollation; + if ( $this->db->selectField( + 'categorylinks', + 'COUNT(*)', + 'cl_collation != ' . $this->db->addQuotes( $wgCategoryCollation ), + __METHOD__ + ) == 0 ) { + $this->output( "...collations up-to-date.\n" ); + return; + } + + $task = new UpdateCollation(); + $task->execute(); + } +} diff --git a/includes/installer/Installer.i18n.php b/includes/installer/Installer.i18n.php new file mode 100644 index 00000000..d6a8a757 --- /dev/null +++ b/includes/installer/Installer.i18n.php @@ -0,0 +1,12267 @@ + 'The installer for MediaWiki', + 'config-title' => 'MediaWiki $1 installation', + 'config-information' => 'Information', + 'config-localsettings-upgrade' => "A LocalSettings.php file has been detected. +To upgrade this installation, please enter the value of \$wgUpgradeKey in the box below. +You will find it in LocalSettings.php.", + 'config-localsettings-cli-upgrade' => 'A LocalSettings.php file has been detected. +To upgrade this installation, please run update.php instead', + 'config-localsettings-key' => 'Upgrade key:', + 'config-localsettings-badkey' => 'The key you provided is incorrect.', + 'config-upgrade-key-missing' => 'An existing installation of MediaWiki has been detected. +To upgrade this installation, please put the following line at the bottom of your LocalSettings.php: + +$1', + 'config-localsettings-incomplete' => 'The existing LocalSettings.php appears to be incomplete. +The $1 variable is not set. +Please change LocalSettings.php so that this variable is set, and click "Continue".', + 'config-localsettings-connection-error' => 'An error was encountered when connecting to the database using the settings specified in LocalSettings.php or AdminSettings.php. Please fix these settings and try again. + +$1', + 'config-session-error' => 'Error starting session: $1', + 'config-session-expired' => 'Your session data seems to have expired. +Sessions are configured for a lifetime of $1. +You can increase this by setting session.gc_maxlifetime in php.ini. +Restart the installation process.', + 'config-no-session' => 'Your session data was lost! +Check your php.ini and make sure session.save_path is set to an appropriate directory.', + 'config-your-language' => 'Your language:', + 'config-your-language-help' => 'Select a language to use during the installation process.', + 'config-wiki-language' => 'Wiki language:', + 'config-wiki-language-help' => 'Select the language that the wiki will predominantly be written in.', + 'config-back' => '← Back', + 'config-continue' => 'Continue →', + 'config-page-language' => 'Language', + 'config-page-welcome' => 'Welcome to MediaWiki!', + 'config-page-dbconnect' => 'Connect to database', + 'config-page-upgrade' => 'Upgrade existing installation', + 'config-page-dbsettings' => 'Database settings', + 'config-page-name' => 'Name', + 'config-page-options' => 'Options', + 'config-page-install' => 'Install', + 'config-page-complete' => 'Complete!', + 'config-page-restart' => 'Restart installation', + 'config-page-readme' => 'Read me', + 'config-page-releasenotes' => 'Release notes', + 'config-page-copying' => 'Copying', + 'config-page-upgradedoc' => 'Upgrading', + 'config-page-existingwiki' => 'Existing wiki', + 'config-help-restart' => 'Do you want to clear all saved data that you have entered and restart the installation process?', + 'config-restart' => 'Yes, restart it', + 'config-welcome' => "=== Environmental checks === +Basic checks are performed to see if this environment is suitable for MediaWiki installation. +You should provide the results of these checks if you need help during installation.", + 'config-copyright' => "=== Copyright and Terms === + +$1 + +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. or [http://www.gnu.org/copyleft/gpl.html read it online].", + 'config-sidebar' => "* [http://www.mediawiki.org MediaWiki home] +* [http://www.mediawiki.org/wiki/Help:Contents User's Guide] +* [http://www.mediawiki.org/wiki/Manual:Contents Administrator's Guide] +* [http://www.mediawiki.org/wiki/Manual:FAQ FAQ] +---- +* Read me +* Release notes +* Copying +* Upgrading", + 'config-env-good' => 'The environment has been checked. +You can install MediaWiki.', + 'config-env-bad' => 'The environment has been checked. +You cannot install MediaWiki.', + 'config-env-php' => 'PHP $1 is installed.', + 'config-env-php-toolow' => 'PHP $1 is installed. +However, MediaWiki requires PHP $2 or higher.', + 'config-unicode-using-utf8' => 'Using Brion Vibber\'s utf8_normalize.so for Unicode normalization.', + 'config-unicode-using-intl' => 'Using the [http://pecl.php.net/intl intl PECL extension] for Unicode normalization.', + 'config-unicode-pure-php-warning' => "'''Warning''': The [http://pecl.php.net/intl intl PECL extension] is not available to handle Unicode normalization, falling back to slow pure-PHP implementation. +If you run a high-traffic site, you should read a little on [http://www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode normalization].", + 'config-unicode-update-warning' => "'''Warning''': The installed version of the Unicode normalization wrapper uses an older version of [http://site.icu-project.org/ the ICU project's] library. +You should [http://www.mediawiki.org/wiki/Unicode_normalization_considerations upgrade] if you are at all concerned about using Unicode.", + 'config-no-db' => 'Could not find a suitable database driver! You need to install a database driver for PHP. +The following database types are supported: $1. + +If you are on shared hosting, ask your hosting provider to install a suitable database driver. +If you compiled PHP yourself, reconfigure it with a database client enabled, for example using ./configure --with-mysql. +If you installed PHP from a Debian or Ubuntu package, then you also need install the php5-mysql module.', + 'config-no-fts3' => "'''Warning''': SQLite is compiled without the [http://sqlite.org/fts3.html FTS3 module], search features will be unavailable on this backend.", + 'config-register-globals' => "'''Warning: PHP's [http://php.net/register_globals register_globals] option is enabled.''' +'''Disable it if you can.''' +MediaWiki will work, but your server is exposed to potential security vulnerabilities.", + 'config-magic-quotes-runtime' => "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] is active!''' +This option corrupts data input unpredictably. +You cannot install or use MediaWiki unless this option is disabled.", + 'config-magic-quotes-sybase' => "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] is active!''' +This option corrupts data input unpredictably. +You cannot install or use MediaWiki unless this option is disabled.", + 'config-mbstring' => "'''Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] is active!''' +This option causes errors and may corrupt data unpredictably. +You cannot install or use MediaWiki unless this option is disabled.", + 'config-ze1' => "'''Fatal: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] is active!''' +This option causes horrible bugs with MediaWiki. +You cannot install or use MediaWiki unless this option is disabled.", + 'config-safe-mode' => "'''Warning:''' PHP's [http://www.php.net/features.safe-mode safe mode] is active. +It may cause problems, particularly if using file uploads and math support.", + 'config-xml-bad' => "PHP's XML module is missing. +MediaWiki requires functions in this module and will not work in this configuration. +If you're running Mandrake, install the php-xml package.", + 'config-pcre' => 'The PCRE support module appears to be missing. +MediaWiki requires the Perl-compatible regular expression functions to work.', + 'config-pcre-no-utf8' => "'''Fatal''': PHP's PCRE module seems to be compiled without PCRE_UTF8 support. +MediaWiki requires UTF-8 support to function correctly.", + 'config-memory-raised' => "PHP's memory_limit is $1, raised to $2.", + 'config-memory-bad' => "'''Warning:''' PHP's memory_limit is $1. +This is probably too low. +The installation may fail!", + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] is installed', + 'config-apc' => '[http://www.php.net/apc APC] is installed', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] is installed', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] is installed', + 'config-no-cache' => "'''Warning:''' Could not find [http://eaccelerator.sourceforge.net eAccelerator], [http://www.php.net/apc APC], [http://trac.lighttpd.net/xcache/ XCache] or [http://www.iis.net/download/WinCacheForPhp WinCache]. +Object caching is not enabled.", + 'config-diff3-bad' => 'GNU diff3 not found.', + 'config-imagemagick' => 'Found ImageMagick: $1. +Image thumbnailing will be enabled if you enable uploads.', + 'config-gd' => 'Found GD graphics library built-in. +Image thumbnailing will be enabled if you enable uploads.', + 'config-no-scaling' => 'Could not find GD library or ImageMagick. +Image thumbnailing will be disabled.', + 'config-no-uri' => "'''Error:''' Could not determine the current URI. +Installation aborted.", + 'config-uploads-not-safe' => "'''Warning:''' Your default directory for uploads $1 is vulnerable to arbitrary scripts execution. +Although MediaWiki checks all uploaded files for security threats, it is highly recommended to [http://www.mediawiki.org/wiki/Manual:Security#Upload_security close this security vulnerability] before enabling uploads.", + 'config-brokenlibxml' => 'Your system has a combination of PHP and libxml2 versions which is buggy and can cause hidden data corruption in MediaWiki and other web applications. +Upgrade to PHP 5.2.9 or later and libxml2 2.7.3 or later ([http://bugs.php.net/bug.php?id=45996 bug filed with PHP]). +Installation aborted.', + 'config-using531' => 'MediaWiki cannot be used with PHP $1 due to a bug involving reference parameters to __call(). +Upgrade to PHP 5.3.2 or higher, or downgrade to PHP 5.3.0 to resolve this. +Installation aborted.', + 'config-suhosin-max-value-length' => "Suhosin is installed and limits the GET parameter length to $1 bytes. MediaWiki's ResourceLoader component will work around this limit, but that will degrade performance. If at all possible, you should set suhosin.get.max_value_length to 1024 or higher in php.ini , and set \$wgResourceLoaderMaxQueryLength to the same value in LocalSettings.php .", + 'config-db-type' => 'Database type:', + 'config-db-host' => 'Database host:', + 'config-db-host-help' => 'If your database server is on different server, enter the host name or IP address here. + +If you are using shared web hosting, your hosting provider should give you the correct host name in their documentation. + +If you are installing on a Windows server and using MySQL, using "localhost" may not work for the server name. If it does not, try "127.0.0.1" for the local IP address.', + 'config-db-host-oracle' => 'Database TNS:', + 'config-db-host-oracle-help' => 'Enter a valid [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; a tnsnames.ora file must be visible to this installation.
    If you are using client libraries 10g or newer you can also use the [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect] naming method.', + 'config-db-wiki-settings' => 'Identify this wiki', + 'config-db-name' => 'Database name:', + 'config-db-name-help' => 'Choose a name that identifies your wiki. +It should not contain spaces. + +If you are using shared web hosting, your hosting provider will either give you a specific database name to use or let you create databases via a control panel.', + 'config-db-name-oracle' => 'Database schema:', + 'config-db-account-oracle-warn' => "There are three supported scenarios for installing Oracle as database backend: + +If you wish to create database account as part of the installation process, please supply an account with SYSDBA role as database account for installation and specify the desired credentials for the web-access account, otherwise you can either create the web-access account manually and supply only that account (if it has required permissions to create the schema objects) or supply two different accounts, one with create privileges and a restricted one for web access. + +Script for creating an account with required privileges can be found in \"maintenance/oracle/\" directory of this installation. Keep in mind that using a restricted account will disable all maintenance capabilities with the default account.", + 'config-db-install-account' => 'User account for installation', + 'config-db-username' => 'Database username:', + 'config-db-password' => 'Database password:', + 'config-db-password-empty' => 'Please enter a password for the new database user: $1. +While it may be possible to create users with no passwords, it is not secure.', + 'config-db-install-username' => 'Enter the username that will be used to connect to the database during the installation process. +This is not the username of the MediaWiki account; this is the username for your database.', + 'config-db-install-password' => 'Enter the password that will be used to connect to the database during the installation process. +This is not the password for the MediaWiki account; this is the password for your database.', + 'config-db-install-help' => 'Enter the username and password that will be used to connect to the database during the installation process.', + 'config-db-account-lock' => 'Use the same username and password during normal operation', + 'config-db-wiki-account' => 'User account for normal operation', + 'config-db-wiki-help' => 'Enter the username and password that will be used to connect to the database during normal wiki operation. +If the account does not exist, and the installation account has sufficient privileges, this user account will be created with the minimum privileges required to operate the wiki.', + 'config-db-prefix' => 'Database table prefix:', + 'config-db-prefix-help' => 'If you need to share one database between multiple wikis, or between MediaWiki and another web application, you may choose to add a prefix to all the table names to avoid conflicts. +Do not use spaces. + +This field is usually left empty.', + 'config-db-charset' => 'Database character set', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binary', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 backwards-compatible UTF-8', + 'config-charset-help' => "'''Warning:''' If you use '''backwards-compatible UTF-8''' on MySQL 4.1+, and subsequently back up the database with mysqldump, it may destroy all non-ASCII characters, irreversibly corrupting your backups! + +In '''binary mode''', MediaWiki stores UTF-8 text to the database in binary fields. +This is more efficient than MySQL's UTF-8 mode, and allows you to use the full range of Unicode characters. +In '''UTF-8 mode''', MySQL will know what character set your data is in, and can present and convert it appropriately, +but it will not let you store characters above the [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].", + 'config-mysql-old' => 'MySQL $1 or later is required, you have $2.', + 'config-db-port' => 'Database port:', + 'config-db-schema' => 'Schema for MediaWiki', + 'config-db-schema-help' => 'This schema will usually be fine. +Only change it if you know you need to.', + 'config-pg-test-error' => "Cannot connect to database '''$1''': $2", + 'config-sqlite-dir' => 'SQLite data directory:', + 'config-sqlite-dir-help' => "SQLite stores all data in a single file. + +The directory you provide must be writable by the webserver during installation. + +It should '''not''' be accessible via the web, this is why we're not putting it where your PHP files are. + +The installer will write a .htaccess file along with it, but if that fails someone can gain access to your raw database. +That includes raw user data (e-mail addresses, hashed passwords) as well as deleted revisions and other restricted data on the wiki. + +Consider putting the database somewhere else altogether, for example in /var/lib/mediawiki/yourwiki.", + 'config-oracle-def-ts' => 'Default tablespace:', + 'config-oracle-temp-ts' => 'Temporary tablespace:', + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Oracle', + 'config-support-info' => 'MediaWiki supports the following database systems: + +$1 + +If you do not see the database system you are trying to use listed below, then follow the instructions linked above to enable support.', + 'config-support-mysql' => '* $1 is the primary target for MediaWiki and is best supported ([http://www.php.net/manual/en/mysql.installation.php how to compile PHP with MySQL support])', + 'config-support-postgres' => '* $1 is a popular open source database system as an alternative to MySQL ([http://www.php.net/manual/en/pgsql.installation.php how to compile PHP with PostgreSQL support]). There may be some minor outstanding bugs, and it is not recommended for use in a production environment.', + 'config-support-sqlite' => '* $1 is a lightweight database system which is very well supported. ([http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], uses PDO)', + 'config-support-oracle' => '* $1 is a commercial enterprise database. ([http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])', + 'config-header-mysql' => 'MySQL settings', + 'config-header-postgres' => 'PostgreSQL settings', + 'config-header-sqlite' => 'SQLite settings', + 'config-header-oracle' => 'Oracle settings', + 'config-invalid-db-type' => 'Invalid database type', + 'config-missing-db-name' => 'You must enter a value for "Database name"', + 'config-missing-db-host' => 'You must enter a value for "Database host"', + 'config-missing-db-server-oracle' => 'You must enter a value for "Database TNS"', + 'config-invalid-db-server-oracle' => 'Invalid database TNS "$1". +Use only ASCII letters (a-z, A-Z), numbers (0-9), underscores (_) and dots (.).', + 'config-invalid-db-name' => 'Invalid database name "$1". +Use only ASCII letters (a-z, A-Z), numbers (0-9), underscores (_) and hyphens (-).', + 'config-invalid-db-prefix' => 'Invalid database prefix "$1". +Use only ASCII letters (a-z, A-Z), numbers (0-9), underscores (_) and hyphens (-).', + 'config-connection-error' => '$1. + +Check the host, username and password and try again.', + 'config-invalid-schema' => 'Invalid schema for MediaWiki "$1". +Use only ASCII letters (a-z, A-Z), numbers (0-9) and underscores (_).', + 'config-db-sys-create-oracle' => 'Installer only supports using a SYSDBA account for creating a new account.', + 'config-db-sys-user-exists-oracle' => 'User account "$1" already exists. SYSDBA can only be used for creating of a new account!', + 'config-postgres-old' => 'PostgreSQL $1 or later is required, you have $2.', + 'config-sqlite-name-help' => 'Choose a name that identifies your wiki. +Do not use spaces or hyphens. +This will be used for the SQLite data file name.', + 'config-sqlite-parent-unwritable-group' => 'Cannot create the data directory $1, because the parent directory $2 is not writable by the webserver. + +The installer has determined the user your webserver is running as. +Make the $3 directory writable by it to continue. +On a Unix/Linux system do: + +
    cd $2
    +mkdir $3
    +chgrp $4 $3
    +chmod g+w $3
    ', + 'config-sqlite-parent-unwritable-nogroup' => 'Cannot create the data directory $1, because the parent directory $2 is not writable by the webserver. + +The installer could not determine the user your webserver is running as. +Make the $3 directory globally writable by it (and others!) to continue. +On a Unix/Linux system do: + +
    cd $2
    +mkdir $3
    +chmod a+w $3
    ', + 'config-sqlite-mkdir-error' => 'Error creating the data directory "$1". +Check the location and try again.', + 'config-sqlite-dir-unwritable' => 'Unable to write to the directory "$1". +Change its permissions so that the webserver can write to it, and try again.', + 'config-sqlite-connection-error' => '$1. + +Check the data directory and database name below and try again.', + 'config-sqlite-readonly' => 'The file $1 is not writeable.', + 'config-sqlite-cant-create-db' => 'Could not create database file $1.', + 'config-sqlite-fts3-downgrade' => 'PHP is missing FTS3 support, downgrading tables', + 'config-can-upgrade' => "There are MediaWiki tables in this database. +To upgrade them to MediaWiki $1, click '''Continue'''.", + 'config-upgrade-done' => "Upgrade complete. + +You can now [$1 start using your wiki]. + +If you want to regenerate your LocalSettings.php file, click the button below. +This is '''not recommended''' unless you are having problems with your wiki.", + 'config-upgrade-done-no-regenerate' => "Upgrade complete. + +You can now [$1 start using your wiki].", + 'config-regenerate' => 'Regenerate LocalSettings.php →', + 'config-show-table-status' => 'SHOW TABLE STATUS query failed!', + 'config-unknown-collation' => "'''Warning:''' Database is using unrecognised collation.", + 'config-db-web-account' => 'Database account for web access', + 'config-db-web-help' => 'Select the username and password that the web server will use to connect to the database server, during ordinary operation of the wiki.', + 'config-db-web-account-same' => 'Use the same account as for installation', + 'config-db-web-create' => 'Create the account if it does not already exist', + 'config-db-web-no-create-privs' => 'The account you specified for installation does not have enough privileges to create an account. +The account you specify here must already exist.', + 'config-mysql-engine' => 'Storage engine:', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-engine-help' => "'''InnoDB''' is almost always the best option, since it has good concurrency support. + +'''MyISAM''' may be faster in single-user or read-only installations. +MyISAM databases tend to get corrupted more often than InnoDB databases.", + 'config-mysql-charset' => 'Database character set:', + 'config-mysql-binary' => 'Binary', + 'config-mysql-utf8' => 'UTF-8', + 'config-mysql-charset-help' => "In '''binary mode''', MediaWiki stores UTF-8 text to the database in binary fields. +This is more efficient than MySQL's UTF-8 mode, and allows you to use the full range of Unicode characters. + +In '''UTF-8 mode''', MySQL will know what character set your data is in, and can present and convert it appropriately, but it will not let you store characters above the [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].", + 'config-site-name' => 'Name of wiki:', + 'config-site-name-help' => "This will appear in the title bar of the browser and in various other places.", + 'config-site-name-blank' => 'Enter a site name.', + 'config-project-namespace' => 'Project namespace:', + 'config-ns-generic' => 'Project', + 'config-ns-site-name' => 'Same as the wiki name: $1', + 'config-ns-other' => 'Other (specify)', + 'config-ns-other-default' => 'MyWiki', + 'config-project-namespace-help' => 'Following Wikipedia\'s example, many wikis keep their policy pages separate from their content pages, in a "\'\'\'project namespace\'\'\'". +All page titles in this namespace start with a certain prefix, which you can specify here. +Traditionally, this prefix is derived from the name of the wiki, but it cannot contain punctuation characters such as "#" or ":".', + 'config-ns-invalid' => 'The specified namespace "$1" is invalid. +Specify a different project namespace.', + 'config-ns-conflict' => 'The specified namespace "$1" conflicts with a default MediaWiki namespace. +Specify a different project namespace.', + 'config-admin-box' => 'Administrator account', + 'config-admin-name' => 'Your name:', + 'config-admin-password' => 'Password:', + 'config-admin-password-confirm' => 'Password again:', + 'config-admin-help' => 'Enter your preferred username here, for example "Joe Bloggs". +This is the name you will use to log in to the wiki.', + 'config-admin-name-blank' => 'Enter an administrator username.', + 'config-admin-name-invalid' => 'The specified username "$1" is invalid. +Specify a different username.', + 'config-admin-password-blank' => 'Enter a password for the administrator account.', + 'config-admin-password-same' => 'The password must not be the same as the username.', + 'config-admin-password-mismatch' => 'The two passwords you entered do not match.', + 'config-admin-email' => 'E-mail address:', + 'config-admin-email-help' => 'Enter an e-mail address here to allow you to receive e-mail from other users on the wiki, reset your password, and be notified of changes to pages on your watchlist. You can leave this field empty.', + 'config-admin-error-user' => 'Internal error when creating an admin with the name "$1".', + 'config-admin-error-password' => 'Internal error when setting a password for the admin "$1":
    $2
    ', + 'config-admin-error-bademail' => 'You have entered an invalid e-mail address.', + 'config-subscribe' => 'Subscribe to the [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce release announcements mailing list].', + 'config-subscribe-help' => 'This is a low-volume mailing list used for release announcements, including important security announcements. +You should subscribe to it and update your MediaWiki installation when new versions come out.', + 'config-almost-done' => 'You are almost done! +You can now skip the remaining configuration and install the wiki right now.', + 'config-optional-continue' => 'Ask me more questions.', + 'config-optional-skip' => "I'm bored already, just install the wiki.", + 'config-profile' => 'User rights profile:', + 'config-profile-wiki' => 'Traditional wiki', + 'config-profile-no-anon' => 'Account creation required', + 'config-profile-fishbowl' => 'Authorized editors only', + 'config-profile-private' => 'Private wiki', + 'config-profile-help' => "Wikis work best when you let as many people edit them as possible. +In MediaWiki, it is easy to review the recent changes, and to revert any damage that is done by naive or malicious users. + +However, many have found MediaWiki to be useful in a wide variety of roles, and sometimes it is not easy to convince everyone of the benefits of the wiki way. +So you have the choice. + +A '''{{int:config-profile-wiki}}''' allows anyone to edit, without even logging in. +A wiki with '''{{int:config-profile-no-anon}}''' provides extra accountability, but may deter casual contributors. + +The '''{{int:config-profile-fishbowl}}''' scenario allows approved users to edit, but the public can view the pages, including history. +A '''{{int:config-profile-private}}''' only allows approved users to view pages, with the same group allowed to edit. + +More complex user rights configurations are available after installation, see the [http://www.mediawiki.org/wiki/Manual:User_rights relevant manual entry].", + 'config-license' => 'Copyright and license:', + 'config-license-none' => 'No license footer', + 'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike', + 'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike', + 'config-license-cc-0' => 'Creative Commons Zero', + 'config-license-gfdl-old' => 'GNU Free Documentation License 1.2', + 'config-license-gfdl-current' => 'GNU Free Documentation License 1.3 or later', + 'config-license-pd' => 'Public Domain', + 'config-license-cc-choose' => 'Select a custom Creative Commons license', + 'config-license-help' => "Many public wikis put all contributions under a [http://freedomdefined.org/Definition free license]. +This helps to create a sense of community ownership and encourages long-term contribution. +It is not generally necessary for a private or corporate wiki. + +If you want to be able to use text from Wikipedia, and you want Wikipedia to be able to accept text copied from your wiki, you should choose '''Creative Commons Attribution Share Alike'''. + +The GNU Free Documentation License was the old license Wikipedia was under. +It is still a valid license, however, this license has some features which make reuse and interpretation difficult.", + 'config-email-settings' => 'E-mail settings', + 'config-enable-email' => 'Enable outbound e-mail', + 'config-enable-email-help' => "If you want e-mail to work, [http://www.php.net/manual/en/mail.configuration.php PHP's mail settings] need to be configured correctly. +If you do not want any e-mail features, you can disable them here.", + 'config-email-user' => 'Enable user-to-user e-mail', + 'config-email-user-help' => 'Allow all users to send each other e-mail if they have enabled it in their preferences.', + 'config-email-usertalk' => 'Enable user talk page notification', + 'config-email-usertalk-help' => 'Allow users to receive notifications on user talk page changes, if they have enabled it in their preferences.', + 'config-email-watchlist' => 'Enable watchlist notification', + 'config-email-watchlist-help' => 'Allow users to receive notifications about their watched pages if they have enabled it in their preferences.', + 'config-email-auth' => 'Enable e-mail authentication', + 'config-email-auth-help' => "If this option is enabled, users have to confirm their e-mail address using a link sent to them whenever they set or change it. +Only authenticated e-mail addresses can receive e-mails from other users or change notification e-mails. +Setting this option is '''recommended''' for public wikis because of potential abuse of the e-mail features.", + 'config-email-sender' => 'Return e-mail address:', + 'config-email-sender-help' => 'Enter the e-mail address to use as the return address on outbound e-mail. +This is where bounces will be sent. +Many mail servers require at least the domain name part to be valid.', + 'config-upload-settings' => 'Images and file uploads', + 'config-upload-enable' => 'Enable file uploads', + 'config-upload-help' => "File uploads potentially expose your server to security risks. +For more information, read the [http://www.mediawiki.org/wiki/Manual:Security security section] in the manual. + +To enable file uploads, change the mode on the images subdirectory under MediaWiki's root directory so that the web server can write to it. +Then enable this option.", + 'config-upload-deleted' => 'Directory for deleted files:', + 'config-upload-deleted-help' => 'Choose a directory in which to archive deleted files. +Ideally, this should not be accessible from the web.', + 'config-logo' => 'Logo URL:', + 'config-logo-help' => "MediaWiki's default skin includes space for a 135x160 pixel logo above the sidebar menu. +Upload an image of the appropriate size, and enter the URL here. + +If you do not want a logo, leave this box blank.", + 'config-instantcommons' => 'Enable Instant Commons', + 'config-instantcommons-help' => '[http://www.mediawiki.org/wiki/InstantCommons Instant Commons] is a feature that allows wikis to use images, sounds and other media found on the [http://commons.wikimedia.org/ Wikimedia Commons] site. +In order to do this, MediaWiki requires access to the Internet. + +For more information on this feature, including instructions on how to set it up for wikis other than the Wikimedia Commons, consult [http://mediawiki.org/wiki/Manual:$wgForeignFileRepos the manual].', + 'config-cc-error' => 'The Creative Commons license chooser gave no result. +Enter the license name manually.', + 'config-cc-again' => 'Pick again...', + 'config-cc-not-chosen' => 'Choose which Creative Commons license you want and click "proceed".', + 'config-advanced-settings' => 'Advanced configuration', + 'config-cache-options' => 'Settings for object caching:', + 'config-cache-help' => 'Object caching is used to improve the speed of MediaWiki by caching frequently used data. +Medium to large sites are highly encouraged to enable this, and small sites will see benefits as well.', + 'config-cache-none' => 'No caching (no functionality is removed, but speed may be impacted on larger wiki sites)', + 'config-cache-accel' => 'PHP object caching (APC, eAccelerator, XCache or WinCache)', + 'config-cache-memcached' => 'Use Memcached (requires additional setup and configuration)', + 'config-memcached-servers' => 'Memcached servers:', + 'config-memcached-help' => 'List of IP addresses to use for Memcached. +Should specify one per line and specify the port to be used. For example: + 127.0.0.1:11211 + 192.168.1.25:1234', + 'config-memcache-needservers' => 'You selected Memcached as your cache type but did not specify any servers.', + 'config-memcache-badip' => 'You have entered an invalid IP address for Memcached: $1.', + 'config-memcache-noport' => 'You did not specify a port to use for Memcached server: $1. +If you do not know the port, the default is 11211.', + 'config-memcache-badport' => 'Memcached port numbers should be between $1 and $2.', + 'config-extensions' => 'Extensions', + 'config-extensions-help' => 'The extensions listed above were detected in your ./extensions directory. + +They may require additional configuration, but you can enable them now', + 'config-install-alreadydone' => "'''Warning:''' You seem to have already installed MediaWiki and are trying to install it again. +Please proceed to the next page.", + 'config-install-begin' => 'By pressing "{{int:config-continue}}", you will begin the installation of MediaWiki. +If you still want to make changes, press back.', + 'config-install-step-done' => 'done', + 'config-install-step-failed' => 'failed', + 'config-install-extensions' => 'Including extensions', + 'config-install-database' => 'Setting up database', + 'config-install-schema' => 'Creating schema', + 'config-install-pg-schema-not-exist' => 'PostgreSQL schema does not exist.', + 'config-install-pg-schema-failed' => 'Tables creation failed. +Make sure that the user "$1" can write to the schema "$2".', + 'config-install-pg-commit' => 'Committing changes', + 'config-install-pg-plpgsql' => 'Checking for language PL/pgSQL', + 'config-pg-no-plpgsql' => 'You need to install the language PL/pgSQL in the database $1', + 'config-pg-no-create-privs' => 'The account you specified for installation does not have enough privileges to create an account.', + 'config-pg-not-in-role' => 'The account you specified for the web user already exists. +The account you specified for installation is not a superuser and is not a member of the web user\'s role, so it is unable to create objects owned by the web user. + +MediaWiki currently requires that the tables be owned by the web user. Please specify another web account name, or click "back" and specify a suitably privileged install user.', + 'config-install-user' => 'Creating database user', + 'config-install-user-alreadyexists' => 'User "$1" already exists', + 'config-install-user-create-failed' => 'Creating user "$1" failed: $2', + 'config-install-user-grant-failed' => 'Granting permission to user "$1" failed: $2', + 'config-install-user-missing' => 'The specified user "$1" does not exist.', + 'config-install-user-missing-create' => 'The specified user "$1" does not exist. +Please click the "create account" checkbox below if you want to create it.', + 'config-install-tables' => 'Creating tables', + 'config-install-tables-exist' => "'''Warning''': MediaWiki tables seem to already exist. +Skipping creation.", + 'config-install-tables-failed' => "'''Error''': Table creation failed with the following error: $1", + 'config-install-interwiki' => 'Populating default interwiki table', + 'config-install-interwiki-list' => 'Could not read file interwiki.list.', + 'config-install-interwiki-exists' => "'''Warning''': The interwiki table seems to already have entries. +Skipping default list.", + 'config-install-stats' => 'Initializing statistics', + 'config-install-keys' => 'Generating secret keys', + 'config-insecure-keys' => "'''Warning:''' {{PLURAL:$2|A secure key|Secure keys}} ($1) generated during installation {{PLURAL:$2|is|are}} not completely safe. Consider changing {{PLURAL:$2|it|them}} manually.", + 'config-install-sysop' => 'Creating administrator user account', + 'config-install-subscribe-fail' => 'Unable to subscribe to mediawiki-announce: $1', + 'config-install-mainpage' => 'Creating main page with default content', + 'config-install-extension-tables' => 'Creating tables for enabled extensions', + 'config-install-mainpage-failed' => 'Could not insert main page: $1', + 'config-install-done' => "'''Congratulations!''' +You have successfully installed MediaWiki. + +The installer has generated a LocalSettings.php file. +It contains all your configuration. + +You will need to download it and put it in the base of your wiki installation (the same directory as index.php). The download should have started automatically. + +If the download was not offered, or if you cancelled it, you can restart the download by clicking the link below: + +$3 + +'''Note''': If you do not do this now, this generated configuration file will not be available to you later if you exit the installation without downloading it. + +When that has been done, you can '''[$2 enter your wiki]'''.", + 'config-download-localsettings' => 'Download LocalSettings.php', + 'config-help' => 'help', +); + +/** Message documentation (Message documentation) + * @author Dani + * @author EugeneZelenko + * @author Kghbln + * @author McDutchie + * @author Nike + * @author Platonides + * @author Purodha + * @author Raymond + * @author Siebrand + * @author Umherirrender + */ +$messages['qqq'] = array( + 'config-desc' => '{{desc}}', + 'config-title' => 'Parameters: +* $1 is the version of MediaWiki that is being installed.', + 'config-information' => '{{Identical|Information}}', + 'config-localsettings-cli-upgrade' => 'Do not translate the LocalSettings.php and the update.php parts.', + 'config-session-error' => 'Parameters: +* $1 is the error that was encountered with the session.', + 'config-session-expired' => 'Parameters: +* $1 is the configured session lifetime.', + 'config-back' => '{{Identical|Back}}', + 'config-continue' => '{{Identical|Continue}}', + 'config-page-language' => '{{Identical|Language}}', + 'config-page-name' => '{{Identical|Name}}', + 'config-page-options' => '{{Identical|Options}}', + 'config-page-install' => '{{Identical|Install}}', + 'config-page-copying' => 'This is a link to the full GPL text', + 'config-restart' => 'Button text to confirm the installation procedure has to be restarted.', + 'config-env-php' => 'Parameters: +* $1 is the version of PHP that has been installed.', + 'config-no-db-help' => 'Parameters: +* $1 is comma separated list of supported database types by MediaWiki.', + 'config-memory-raised' => 'Parameters: +* $1 is the configured memory_limit. +* $2 is the value to which memory_limit was raised.', + 'config-memory-bad' => 'Parameters: +* $1 is the configured memory_limit.', + 'config-xcache' => 'Message indicates if this program is available', + 'config-apc' => 'Message indicates if this program is available', + 'config-eaccel' => 'Message indicates if this program is available', + 'config-wincache' => 'Message indicates if this program is available', + 'config-db-host-oracle' => 'TNS = [[:wikipedia:Transparent Network Substrate|Transparent Network Substrate]] (<== wikipedia link)', + 'config-db-wiki-settings' => 'This is more acurate: "Enter identifying or distinguishing data for this wiki" since a MySQL database can host tables of several wikis.', + 'config-db-account-lock' => "It might be easier to translate ''normal operation'' as \"also after the installation process\"", + 'config-support-mysql' => 'Parameters: +* $1 - a link to the MySQL home page having the anchor text "MySQL".', + 'config-support-postgres' => 'Parameters: +* $1 - a link to the PostgreSQL home page having the anchor text "PostgreSQL".', + 'config-support-sqlite' => 'Parameters: +* $1 - a link to the SQLite home page having the anchor text "SQLite".', + 'config-support-oracle' => 'Parameters: +* $1 - a link to the Oracle home page, the anchor text of which is "Oracle".', + 'config-sqlite-dir-unwritable' => 'webserver refers to a software like Apache or Lighttpd.', + 'config-can-upgrade' => 'Should we no use an {{int:xxx}} construct for "continue" ? + +Parameters: +* $1 - Version or Revision indicator.', + 'config-show-table-status' => '{{doc-important|"SHOW TABLE STATUS" is a MySQL command. Do not translate this.}}', + 'config-ns-generic' => '{{Identical|Project}}', + 'config-admin-name' => '{{Identical|Your name}}', + 'config-admin-password' => '{{Identical|Password}}', + 'config-admin-email' => '{{Identical|E-mail address}}', + 'config-subscribe' => 'Used as label for the installer checkbox', + 'config-profile-help' => 'Messages referenced: +* {{msg-mw|config-profile-wiki}} +* {{msg-mw|config-profile-no-anon}} +* {{msg-mw|config-profile-fishbowl}} +* {{msg-mw|config-profile-private}}', + 'config-upload-help' => 'The word "mode" here refers to the access rights given to various user groups when attempting to create and store files and/or subdiretories in the said directory on the server. It also refers to the mode command used to maipulate said right mask under Unix, Linux, and similar operating systems. A less operating-system-centric translation is fine.', + 'config-logo-help' => '{{doc-important|For languages with right-to-left script, translate "top left corner" as "top right corner".}}', + 'config-cc-not-chosen' => 'Do not translate the "proceed". part. +This message refers to a block of HTML being embedded into the installer page. It comes from the Creative Commons Web site. The block is in the English language. It is a scripted license chooser. When an individual license has been selected, it asks you to klick "proceed" so as to return to the MediaWiki installer page.', + 'config-extensions' => '{{Identical|Extension}}', + 'config-install-step-done' => '{{Identical|Done}}', + 'config-install-pg-schema-failed' => 'Parameters: +* $1 = database user name (usernames in the database are unrelated to wiki user names) +* $2 =', + 'config-install-user' => 'Message indicates that the user is being created', + 'config-install-user-grant-failed' => 'Parameters: +* $1 is the database username for which granting rights failed +* $2 is the error message', + 'config-install-tables' => 'Message indicates that the tables are being created', + 'config-install-interwiki' => 'Message indicates that the interwikitables are being populated', + 'config-insecure-keys' => 'Parameters: +* $1 - A list of names of the secret keys that were generated. +* $2 - the number of items in the list $1, to be used with PLURAL.', + 'config-install-sysop' => 'Message indicates that the administrator user account is being created', + 'config-install-subscribe-fail' => '{{doc-important|"mediawiki-announce" is the name of a mailing list and should not be translated.}}', + 'config-install-done' => 'Parameters: +* $1 is the URL to LocalSettings download +* $2 is a link to the wiki. +* $3 is a download link with attached download icon. The config-download-localsettings message will be used as the link text.', + 'config-download-localsettings' => 'The link text used in the download link in config-install-done.', + 'config-help' => 'This is used in help boxes. +{{Identical|Help}}', +); + +/** Magyar (magázó) (Magyar (magázó)) + * @author Dani + * @author Glanthor Reviol + */ +$messages['hu-formal'] = array( + 'config-localsettings-upgrade' => "'''Figyelmeztetés''': már létezik a LocalSettings.php fájl. +A szoftver frissíthető. +Adja meg a \$wgUpgradeKey-ben található kulcsot a beviteli mezőben", + 'config-session-expired' => 'Úgy tűnik, hogy a munkamenetadatok lejártak. +A munkamenetek élettartama a következőre van beállítva: $1. +Az érték növelhető a php.ini session.gc_maxlifetime beállításának módosításával. +Indítsa újra a telepítési folyamatot.', + 'config-no-session' => 'Elvesztek a munkamenetadatok! +Ellenőrizze, hogy a php.ini-ben a session.save_path beállítás a megfelelő könyvtárra mutat-e.', + 'config-your-language-help' => 'Válassza ki a telepítési folyamat során használandó nyelvet.', + 'config-wiki-language-help' => 'Az a nyelv, amin a wiki tartalmának legnagyobb része íródik.', + 'config-page-welcome' => 'Üdvözli a MediaWiki!', + 'config-help-restart' => 'Szeretné törölni az eddig megadott összes adatot és újraindítani a telepítési folyamatot?', + 'config-welcome' => '=== Környezet ellenőrzése === +Alapvető ellenőrzés, ami megmondja, hogy a környezet alkalmas-e a MediaWiki számára. +Ha probléma merülne fel a telepítés során, meg kell adnia mások számára az alább megjelenő információkat.', + 'config-unicode-pure-php-warning' => "'''Figyelmeztetés''': Az [http://pecl.php.net/intl intl PECL kiterjesztés] nem érhető el Unicode normalizáláshoz. +Ha nagy látogatottságú oldalt üzemeltet, itt találhat információkat [http://www.mediawiki.org/wiki/Unicode_normalization_considerations a témáról].", + 'config-register-globals' => "'''Figyelmeztetés: A PHP [http://php.net/register_globals register_globals] beállítása engedélyezve van.''' +'''Tiltsa le, ha van rá lehetősége.''' +A MediaWiki működőképes a beállítás használata mellett, de a szerver biztonsági kockázatnak lesz kitéve.", + 'config-imagemagick' => 'Az ImageMagick megtalálható a rendszeren: $1. +A bélyegképek készítése engedélyezve lesz, ha engedélyezi a feltöltéseket.', + 'config-db-name-help' => 'Válassza ki a wikije azonosítására használt nevet. +Nem tartalmazhat szóközt vagy kötőjelet. + +Ha megosztott webtárhelyet használ, a szolgáltatója vagy egy konkrét adatbázisnevet ad önnek használatra, vagy létrehozhat egyet a vezérlőpulton keresztül.', + 'config-db-install-help' => 'Adja meg a felhasználónevet és jelszót, amivel a telepítő csatlakozhat az adatbázishoz.', + 'config-db-wiki-help' => 'Adja meg azt a felhasználónevet és jelszót, amivel a wiki fog csatlakozni az adatbázishoz működés közben. +Ha a fiók nem létezik és a telepítést végző fiók rendelkezik megfelelő jogosultsággal, egy új fiók készül a megadott a névvel, azon minimális jogosultságkörrel, ami a wiki működéséhez szükséges.', + 'config-charset-help' => "'''Figyelmezetés:''' Ha a '''visszafelé kompatibilis UTF-8''' beállítást használja MySQL 4.1 vagy újabb verziók esetén, és utána a mysqldump programmal készít róla biztonsági másolatot, az tönkreteheti az összes nem ASCII-karaktert, visszafordíthatatlanul károsítva a másolatokban tárolt adatokat! + +'''Bináris''' módban a MediaWiki az UTF-8-ban kódolt szöveget bináris mezőkben tárolja az adatbázisban. +Ez sokkal hatékonyabb a MySQL UTF-8-módjától, és lehetővé teszi, hogy a teljes Unicode-karakterkészletet használja. +'''UTF-8-módban''' MySQL tudja, hogy milyen karakterkészlettel van kódolva az adat, megfelelően van megjelenítve és konvertálva, de +nem használhatja a [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane] feletti karaktereket.", + 'config-db-schema-help' => 'A fenti sémák általában megfelelőek. +Csak akkor módosítson rajta, ha szükség van rá.', + 'config-sqlite-parent-unwritable-nogroup' => 'Nem lehet létrehozni az adatok tárolásához szükséges $1 könyvtárat, mert a webszerver nem írhat a szülőkönyvtárba ($2). + +A telepítő nem tudta megállapíteni, hogy melyik felhasználói fiókon fut a webszerver. +A folytatáshoz tegye írhatóvá ezen fiók (és más fiókok!) számára a következő könyvtárat: $3. +Unix/Linux rendszereken tedd a következőt: + +
    cd $2
    +mkdir $3
    +chmod a+w $3
    ', + 'config-ns-other' => 'Más (adja meg)', + 'config-admin-name-blank' => 'Adja meg az adminisztrátor felhasználónevét!', + 'config-admin-name-invalid' => 'A megadott felhasználónév ($1) érvénytelen. +Adjon meg egy másik felhasználónevet.', + 'config-admin-password-blank' => 'Adja meg az adminisztrátori fiók jelszavát!', + 'config-instantcommons-help' => 'Az [http://www.mediawiki.org/wiki/InstantCommons Instant Commons] lehetővé teszi, hogy a wikin használhassák a [http://commons.wikimedia.org/ Wikimedia Commons] oldalon található képeket, hangokat és más médiafájlokat. +A használatához a MediaWikinek internethozzáférésre van szüksége. + +A funkcióról és hogy hogyan állítható be más wikik esetén [http://mediawiki.org/wiki/Manual:$wgForeignFileRepos a kézikönyvben] találhat további információkat.', + 'config-install-done' => "'''Gratulálunk!''' +Sikeresen telepítette a MediaWikit. + +A telepítő készített egy LocalSettings.php fájlt. +Ez tartalmazza az összes beállítást. + +[$1 Le kell töltenie], és el kell helyeznie a MediaWiki telepítési könyvtárába (az a könyvtár, ahol az index.php van). +'''Megjegyzés''': Ha ezt most nem teszi meg, és kilép, a generált fájl nem lesz elérhető a későbbiekben. + +Ha ezzel készen van, '''[$2 beléphet a wikibe]'''.", +); + +/** Afrikaans (Afrikaans) + * @author Naudefj + */ +$messages['af'] = array( + 'config-desc' => 'Die Installasieprogram vir MediaWiki', + 'config-title' => 'Installasie MediaWiki $1', + 'config-information' => 'Inligting', + 'config-localsettings-key' => 'Opgradeer-sleutel:', + 'config-localsettings-badkey' => 'Die sleutel wat u verskaf het is verkeerd.', + 'config-session-error' => 'Fout met begin van sessie: $1', + 'config-no-session' => "U sessiedata is verlore! +Kontroleer u php.ini en maak seker dat session.save_path na 'n geldige gids wys.", + 'config-your-language' => 'U taal:', + 'config-your-language-help' => "Kies 'n taal om tydens die installasieproses te gebruik.", + 'config-wiki-language' => 'Wiki se taal:', + 'config-wiki-language-help' => 'Kies die taal waarin die wiki hoofsaaklik geskryf sal word.', + 'config-back' => '← Terug', + 'config-continue' => 'Gaan voort →', + 'config-page-language' => 'Taal', + 'config-page-welcome' => 'Welkom by MediaWiki!', + 'config-page-dbconnect' => 'Konnekteer na die databasis', + 'config-page-upgrade' => "Opgradeer 'n bestaande installasie", + 'config-page-dbsettings' => 'Databasis-instellings', + 'config-page-name' => 'Naam', + 'config-page-options' => 'Opsies', + 'config-page-install' => 'Installeer', + 'config-page-complete' => 'Voltooi!', + 'config-page-restart' => 'Herbegin installasie', + 'config-page-readme' => 'Lees my', + 'config-page-releasenotes' => 'Vrystellingsnotas', + 'config-page-copying' => 'Besig met kopiëring', + 'config-page-upgradedoc' => 'Besig met opgradering', + 'config-page-existingwiki' => 'Bestaande wiki', + 'config-restart' => 'Ja, herbegin dit', + 'config-sidebar' => '* [http://www.mediawiki.org MediaWiki tuisblad] +* [http://www.mediawiki.org/wiki/Help:Contents Gebruikershandleiding] (Engelstalig) +* [http://www.mediawiki.org/wiki/Manual:Contents Administrateurshandleiding] (Engelstalig) +* [http://www.mediawiki.org/wiki/Manual:FAQ Algemene vrae] (Engelstalig) +---- +* Lees my +* Vrystellingsnotas +* Kopiëring +* Opgradering', + 'config-env-good' => 'Die omgewing is gekontroleer. +U kan MediaWiki installeer.', + 'config-env-bad' => 'Die omgewing is gekontroleer. +U kan nie MediaWiki installeer nie.', + 'config-env-php' => 'PHP $1 is tans geïnstalleer.', + 'config-no-db' => "Kon nie 'n geskikte databasisdrywer vind nie!", + 'config-memory-raised' => 'PHP se memory_limit is $1, en is verhoog tot $2.', + 'config-memory-bad' => "'''Waarskuwing:''' PHP se memory_limit is $1. +Dit is waarskynlik te laag. +Die installasie mag moontlik faal!", + 'config-xcache' => '[Http://trac.lighttpd.net/xcache/ XCache] is geïnstalleer', + 'config-apc' => '[Http://www.php.net/apc APC] is geïnstalleer', + 'config-eaccel' => '[Http://eaccelerator.sourceforge.net/ eAccelerator] is geïnstalleer', + 'config-wincache' => '[Http://www.iis.net/download/WinCacheForPhp WinCache] is geïnstalleer', + 'config-diff3-bad' => 'GNU diff3 nie gevind nie.', + 'config-db-type' => 'Databasistipe:', + 'config-db-host' => 'Databasisbediener:', + 'config-db-host-oracle' => 'Databasis-TNS:', + 'config-db-wiki-settings' => 'Identifiseer hierdie wiki', + 'config-db-name' => 'Databasisnaam:', + 'config-db-name-oracle' => 'Databasis-skema:', + 'config-db-install-account' => 'Gebruiker vir die installasie', + 'config-db-username' => 'Databasis gebruikersnaam:', + 'config-db-password' => 'Databasis wagwoord:', + 'config-db-prefix' => 'Voorvoegsel vir databasistabelle:', + 'config-db-charset' => 'Karakterstelsel vir databasis', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-mysql-old' => 'U moet MySQL $1 of later gebruik. +U gebruik tans $2.', + 'config-db-port' => 'Databasispoort:', + 'config-db-schema' => 'Skema vir MediaWiki', + 'config-sqlite-dir' => 'Gids vir SQLite se data:', + 'config-oracle-def-ts' => 'Standaard tabelruimte:', + 'config-oracle-temp-ts' => 'Tydelike tabelruimte:', + 'config-header-mysql' => 'MySQL-instellings', + 'config-header-postgres' => 'PostgreSQL-instellings', + 'config-header-sqlite' => 'SQLite-instellings', + 'config-header-oracle' => 'Oracle-instellings', + 'config-invalid-db-type' => 'Ongeldige databasistipe', + 'config-missing-db-name' => 'U moet \'n waarde vir "Databasnaam" verskaf', + 'config-sqlite-readonly' => 'Die lêer $1 kan nie geskryf word nie.', + 'config-sqlite-cant-create-db' => 'Kon nie databasislêer $1 skep nie.', + 'config-regenerate' => 'Herskep LocalSettings.php →', + 'config-show-table-status' => 'Die uitvoer van SHOW TABLE STATUS het gefaal!', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-binary' => 'Binêr', + 'config-mysql-utf8' => 'UTF-8', + 'config-site-name' => 'Naam van die wiki:', + 'config-site-name-blank' => "Verskaf 'n naam vir u webwerf.", + 'config-project-namespace' => 'Projeknaamruimte:', + 'config-ns-generic' => 'Projek', + 'config-ns-site-name' => 'Dieselfde as die wiki: $1', + 'config-ns-other' => 'Ander (spesifiseer)', + 'config-ns-other-default' => 'MyWiki', + 'config-admin-box' => 'Administrateur se gebruiker', + 'config-admin-name' => 'U naam:', + 'config-admin-password' => 'Wagwoord:', + 'config-admin-password-confirm' => 'Wagwoord weer:', + 'config-admin-password-blank' => "Verskaf 'n wagwoord vir die administrateur in.", + 'config-admin-password-same' => 'Die wagwoord mag nie dieselfde as die gebruikersnaam wees nie.', + 'config-admin-password-mismatch' => 'Die twee wagwoorde wat u ingetik het stem nie ooreen nie.', + 'config-admin-email' => 'E-posadres:', + 'config-optional-continue' => 'Vra my meer vrae.', + 'config-optional-skip' => 'Ek is reeds verveeld, installeer maar net die wiki.', + 'config-profile-wiki' => 'Tradisionele wiki', + 'config-profile-no-anon' => 'Skep van gebruiker is verpligtend', + 'config-profile-fishbowl' => 'Slegs vir gemagtigde redaksie', + 'config-profile-private' => 'Privaat wiki', + 'config-license' => 'Kopiereg en lisensie:', + 'config-license-none' => 'Geen lisensie in die onderskrif', + 'config-license-pd' => 'Publieke Domein', + 'config-license-cc-choose' => "Kies 'n Creative Commons-lisensie", + 'config-email-settings' => 'E-posinstellings', + 'config-email-sender' => 'E-posadres vir antwoorde:', + 'config-upload-settings' => 'Oplaai van beelde en lêer', + 'config-upload-enable' => 'Aktiveer die oplaai van lêers', + 'config-upload-deleted' => 'Gids vir verwyderde lêers:', + 'config-logo' => 'URL vir logo:', + 'config-cc-again' => 'Kies weer...', + 'config-advanced-settings' => 'Gevorderde konfigurasie', + 'config-memcached-servers' => 'Memcached-bedieners:', + 'config-extensions' => 'Uitbreidings', + 'config-install-step-done' => 'gedoen', + 'config-install-step-failed' => 'het misluk', + 'config-install-extensions' => 'Insluitende uitbreidings', + 'config-install-database' => 'Stel die databasis op', + 'config-install-pg-schema-failed' => 'Die skep van tabelle het gefaal. +Maak seker dat die gebruiker "$1" na skema "$2" mag skryf.', + 'config-install-pg-commit' => 'Wysigings word gestoor', + 'config-pg-no-plpgsql' => 'U moet die taal PL/pgSQL in die database $1 installeer', + 'config-install-user' => 'Besig om die databasisgebruiker te skep', + 'config-install-user-grant-failed' => 'Die toekenning van regte aan gebruiker "$1" het gefaal: $2', + 'config-install-tables' => 'Skep tabelle', + 'config-install-tables-exist' => "'''Waarskuwing''': Dit lyk of MediaWiki se tabelle reeds bestaan. +Die skep van tabelle word oorgeslaan.", + 'config-install-tables-failed' => "'''Fout''': die skep van 'n tabel het gefaal met die volgende fout: $1", + 'config-install-interwiki' => 'Besig om data in die interwiki-tabel in te laai', + 'config-install-interwiki-list' => 'Kon nie die lêer interwiki.list vind nie.', + 'config-install-interwiki-exists' => "'''Waarskuwing''': Die interwiki-tabel bevat reeds inskrywings. +Die standaardlys word oorgeslaan.", + 'config-install-keys' => 'Genereer geheime sleutel', + 'config-install-sysop' => "Skep 'n gebruiker vir die administrateur", + 'config-install-mainpage' => 'Skep die hoofblad met standaard inhoud', + 'config-install-mainpage-failed' => 'Kon nie die hoofblad laai nie: $1', + 'config-install-done' => "'''Veels geluk!''' +U het MediaWiki suksesvol geïnstalleer. + +Die installeerder het 'n LocalSettings.php lêer opgestel. +Dit bevat al u instellings. + +U sal dit moet [$1 aflaai] en dit in die hoofgids van u wiki-installasie plaas; in dieselfde gids as index.php. +'''Let wel''': As u dit nie nou doen nie, sal die gegenereerde konfigurasielêer nie later meer beskikbaar wees nadat u die installasie afgesluit het nie. + +As dit gedoen is, kan u '''[u $2 wiki besoek]'''.", + 'config-download-localsettings' => 'Laai LocalSettings.php af', + 'config-help' => 'hulp', +); + +/** Arabic (العربية) + * @author Meno25 + */ +$messages['ar'] = array( + 'config-type-mysql' => 'ماي إس كيو إل', + 'config-type-postgres' => 'بوستجر إس كيو إل', + 'config-type-sqlite' => 'إس كيو لايت', + 'config-type-oracle' => 'أوراكل', +); + +/** Aramaic (ܐܪܡܝܐ) + * @author Basharh + */ +$messages['arc'] = array( + 'config-information' => 'ܝܕ̈ܥܬܐ', + 'config-your-language' => 'ܠܫܢܐ ܕܝܠܟ:', + 'config-wiki-language' => 'ܠܫܢܐ ܕܘܝܩܝ:', + 'config-page-language' => 'ܠܫܢܐ', + 'config-page-name' => 'ܫܡܐ', + 'config-page-options' => 'ܓܒܝܬ̈ܐ', + 'config-page-install' => 'ܢܨܘܒ', + 'config-ns-other-default' => 'ܘܝܩܝ ܕܝܠܝ', + 'config-admin-box' => 'ܚܘܫܒܢܐ ܕܡܕܒܪܢܐ', + 'config-admin-name' => 'ܫܡܐ ܕܝܠܟ:', + 'config-admin-password' => 'ܡܠܬܐ ܕܥܠܠܐ:', + 'config-admin-password-confirm' => 'ܡܠܬܐ ܕܥܠܠܐ ܙܒܢܬܐ ܐܚܪܬܐ:', + 'config-admin-email' => 'ܦܪܫܓܢܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ:', + 'config-profile-private' => 'ܘܝܩܝ ܦܪܨܘܦܝܐ', + 'config-email-settings' => 'ܛܘܝܒ̈ܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ', +); + +/** Belarusian (Taraškievica orthography) (‪Беларуская (тарашкевіца)‬) + * @author EugeneZelenko + * @author Jim-by + * @author Wizardist + * @author Zedlik + */ +$messages['be-tarask'] = array( + 'config-desc' => 'Праграма ўсталяваньня MediaWiki', + 'config-title' => 'Усталяваньне MediaWiki $1', + 'config-information' => 'Інфармацыя', + 'config-localsettings-upgrade' => 'Выяўлены файл LocalSettings.php. +Каб абнавіць гэтае усталяваньне, калі ласка, увядзіце значэньне $wgUpgradeKey у полі ніжэй. +Яго можна знайсьці ў LocalSettings.php.', + 'config-localsettings-cli-upgrade' => 'Быў знойдзены файл LocalSettings.php. +Каб зьмяніць гэтае ўсталяваньне, калі ласка, запусьціце update.php', + 'config-localsettings-key' => 'Ключ паляпшэньня:', + 'config-localsettings-badkey' => 'Пададзены Вамі ключ зьяўляецца няслушным', + 'config-upgrade-key-missing' => 'Выяўленае існуючае ўсталяваньне MediaWiki. +Каб абнавіць гэтае ўсталяваньне, калі ласка, устаўце наступны радок у канец Вашага LocalSettings.php: + +$1', + 'config-localsettings-incomplete' => 'Выглядае, што існуючы LocalSettings.php зьяўляецца няпоўным. +Не ўстаноўленая пераменная $1. +Калі ласка, зьмяніце LocalSettings.php так, каб была ўстаноўленая гэтая пераменная, і націсьніце «Працягваць».', + 'config-localsettings-connection-error' => 'Адбылася памылка падчас злучэньня з базай зьвестак з выкарыстаньнем наладаў, пазначаных у LocalSettings.php ці AdminSettings.php. Калі ласка, выпраўце гэтыя налады і паспрабуйце зноў. + +$1', + 'config-session-error' => 'Памылка стварэньня сэсіі: $1', + 'config-session-expired' => 'Скончыўся тэрмін дзеяньня зьвестак сэсіі. +Сэсія мае абмежаваны тэрмін у $1. +Вы можаце павялічыць яго, зьмяніўшы парамэтар session.gc_maxlifetime у php.ini. +Перазапусьціце праграму ўсталяваньня.', + 'config-no-session' => 'Зьвесткі сэсіі згубленыя! +Праверце php.ini і ўпэўніцеся, што ўстаноўлены слушны шлях у session.save_path.', + 'config-your-language' => 'Вашая мова:', + 'config-your-language-help' => 'Выберыце мову для выкарыстаньня падчас усталяваньня.', + 'config-wiki-language' => 'Мова вікі:', + 'config-wiki-language-help' => 'Выберыце мову, на якой пераважна будзе пісацца зьмест у вікі.', + 'config-back' => '← Назад', + 'config-continue' => 'Далей →', + 'config-page-language' => 'Мова', + 'config-page-welcome' => 'Вітаем у MediaWiki!', + 'config-page-dbconnect' => 'Падключэньне да базы зьвестак', + 'config-page-upgrade' => 'Абнавіць існуючую ўстаноўку', + 'config-page-dbsettings' => 'Налады базы зьвестак', + 'config-page-name' => 'Назва', + 'config-page-options' => 'Налады', + 'config-page-install' => 'Усталяваць', + 'config-page-complete' => 'Зроблена!', + 'config-page-restart' => 'Пачаць усталяваньне зноў', + 'config-page-readme' => 'Дадатковыя зьвесткі', + 'config-page-releasenotes' => 'Заўвагі да выпуску', + 'config-page-copying' => 'Капіяваньне', + 'config-page-upgradedoc' => 'Абнаўленьне', + 'config-page-existingwiki' => 'Існуючая вікі', + 'config-help-restart' => 'Ці жадаеце выдаліць усе ўведзеныя зьвесткі і пачаць працэс усталяваньня зноў?', + 'config-restart' => 'Так, пачаць зноў', + 'config-welcome' => '== Праверка асяродзьдзя == +Праверка патрэбная для запэўніваньня, што гэтае асяродзьдзе слушнае для ўсталяваньня MediaWiki. +Вам патрэбна будзе падаць усе вынікі праверкі, калі спатрэбіцца дапамога падчас усталяваньня.', + 'config-copyright' => "== Аўтарскае права і ўмовы == + +$1 + +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. or [http://www.gnu.org/copyleft/gpl.html read it online].", + 'config-sidebar' => '* [http://www.mediawiki.org Хатняя старонка MediaWiki] +* [http://www.mediawiki.org/wiki/Help:Contents Даведка для ўдзельнікаў] +* [http://www.mediawiki.org/wiki/Manual:Contents Даведка для адміністратараў] +* [http://www.mediawiki.org/wiki/Manual:FAQ Адказы на частыя пытаньні] +---- +* Прачытайце +* Паляпшэньні ў вэрсіі +* Капіяваньне +* Абнаўленьне', + 'config-env-good' => 'Асяродзьдзе было праверанае. +Вы можаце ўсталёўваць MediaWiki.', + 'config-env-bad' => 'Асяродзьдзе было праверанае. +Усталяваньне MediaWiki немагчымае.', + 'config-env-php' => 'Усталяваны PHP $1.', + 'config-env-php-toolow' => 'Усталяваны PHP $1. +Але MediaWiki патрабуе PHP вэрсіі $2 ці навейшай.', + 'config-unicode-using-utf8' => 'Выкарыстоўваецца бібліятэка Unicode-нармалізацыі Браяна Вібэра', + 'config-unicode-using-intl' => 'Выкарыстоўваецца [http://pecl.php.net/intl intl пашырэньне з PECL] для Unicode-нармалізацыі', + 'config-unicode-pure-php-warning' => "'''Папярэджаньне''': [http://pecl.php.net/intl Пашырэньне intl з PECL] — ня слушнае для Unicode-нармалізацыі, цяпер выкарыстоўваецца марудная PHP-рэалізацыя. +Калі ў Вас сайт з высокай наведваемасьцю, раім пачытаць пра [http://www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode-нармалізацыю].", + 'config-unicode-update-warning' => "'''Папярэджаньне''': усталяваная вэрсія бібліятэкі для Unicode-нармалізацыі выкарыстоўвае састарэлую вэрсію бібліятэкі з [http://site.icu-project.org/ праекту ICU]. +Раім [http://www.mediawiki.org/wiki/Unicode_normalization_considerations абнавіць], калі ваш сайт будзе працаваць зь Unicode.", + 'config-no-db' => 'Немагчыма знайсьці слушны драйвэр базы зьвестак!', + 'config-no-db-help' => 'Вам трэба ўсталяваць драйвэр базы зьвестак для PHP. +Падтрымліваюцца наступныя тыпы базаў зьвестак: $1. + +Калі вы выкарыстоўваеце агульны хостынг, запытайцеся ў свайго хостынг-правайдэра наконт усталяваньня патрабуемага драйвэр базы зьвестак. +Калі Вы кампілявалі PHP самастойна, пераканфігуруйце і сабярыце яго з уключаным кліентам базаў зьвестак, напрыклад, ./configure --with-mysql. +Калі Вы ўсталёўвалі PHP з Debian/Ubuntu-рэпазытарыя, то вам трэба ўсталяваць дадаткова пакет php5-mysql', + 'config-no-fts3' => "'''Папярэджаньне''': SQLite створаны без модуля [http://sqlite.org/fts3.html FTS3], для гэтага ўнутранага інтэрфэйсу ня будзе даступная магчымасьць пошуку.", + 'config-register-globals' => "'''Папярэджаньне: уключаная опцыя PHP [http://php.net/register_globals register_globals].''' +'''Адключыце яе, калі можаце.''' +MediaWiki будзе працаваць, але гэта панізіць узровень бясьпекі сэрвэра.", + 'config-magic-quotes-runtime' => "'''Фатальная памылка: уключаная опцыя PHP [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]!''' +Гэтая опцыя псуе ўводны паток зьвестак непрадказальным чынам. +Працяг усталяваньня альбо выкарыстаньне MediaWiki без адключэньня гэтай опцыі немагчымыя.", + 'config-magic-quotes-sybase' => "'''Фатальная памылка: рэжым [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] уключаны!''' +Гэты рэжым шкодзіць уваходныя зьвесткі непрадказальным чынам. +Працяг усталяваньня альбо выкарыстаньне MediaWiki немагчымыя, пакуль рэжым ня будзе выключаны.", + 'config-mbstring' => "'''Фатальная памылка: рэжым [http://www.php.net/manual/en/ref.info.php#mbstring.overload mbstring.func_overload] уключаны!''' +Гэты рэжым выклікае памылкі і можа шкодзіць зьвесткі непрадказальным чынам. +Працяг усталяваньня альбо выкарыстаньне MediaWiki немагчымыя, пакуль рэжым ня будзе выключаны.", + 'config-ze1' => "'''Фатальная памылка: рэжым [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] уключаны!''' +Гэтая рэжым стварае вялікія праблемы ў працы MediaWiki. +Працяг усталяваньня альбо выкарыстаньне MediaWiki немагчымыя, пакуль рэжым ня будзе выключаны.", + 'config-safe-mode' => "'''Папярэджаньне:''' [http://www.php.net/features.safe-mode бясьпечны рэжым] PHP уключаны. +Гэта можа выклікаць праблемы, галоўным чынам падчас загрузак файлаў і ў падтрымцы math.", + 'config-xml-bad' => 'Ня знойдзены модуль XML для PHP. +MediaWiki патрэбныя функцыі з гэтага модулю, таму MediaWiki ня будзе працаваць у гэтай канфігурацыі. +Калі Вы выкарыстоўваеце Mandrake, усталюйце пакет php-xml.', + 'config-pcre' => 'Ня знойдзены модуль падтрымкі PCRE. +MediaWiki для працы патрабуюцца функцыі рэгулярных выразаў у стылі Perl.', + 'config-pcre-no-utf8' => "'''Крытычная памылка''': модуль PCRE для PHP скампіляваны без падтрымкі PCRE_UTF8. +MediaWiki патрабуе падтрымкі UTF-8 для слушнай працы.", + 'config-memory-raised' => 'Абмежаваньне на даступную для PHP памяць memory_limit было падвышанае з $1 да $2.', + 'config-memory-bad' => "'''Папярэджаньне:''' памер PHP memory_limit складае $1. +Верагодна, гэта вельмі мала. +Усталяваньне можа быць няўдалым!", + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] усталяваны', + 'config-apc' => '[http://www.php.net/apc APC] усталяваны', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] усталяваны', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] усталяваны', + 'config-no-cache' => "'''Папярэджаньне:''' немагчыма знайсьці [http://eaccelerator.sourceforge.net eAccelerator], [http://www.php.net/apc APC], [http://trac.lighttpd.net/xcache/ XCache] ці [http://www.iis.net/download/WinCacheForPhp WinCache]. +Аб’ектнае кэшаваньне ня ўключанае.", + 'config-diff3-bad' => 'GNU diff3 ня знойдзены.', + 'config-imagemagick' => 'Знойдзены ImageMagick: $1. +Пасьля ўключэньня загрузак будзе ўключанае маштабаваньне выяваў.', + 'config-gd' => 'GD падтрымліваецца ўбудавана. +Пасьля ўключэньня загрузак будзе ўключанае маштабаваньне выяваў.', + 'config-no-scaling' => 'Ні GD, ні ImageMagick ня знойдзеныя. +Маштабаваньне выяваў будзе адключанае.', + 'config-no-uri' => "'''Памылка:''' Не магчыма вызначыць цяперашні URI. +Усталяваньне спыненае.", + 'config-uploads-not-safe' => "'''Папярэджаньне:''' дырэкторыя для загрузак па змоўчваньні $1 уразьлівая да выкананьня адвольнага коду. +Хоць MediaWiki і правярае ўсе файлы перад захаваньнем, вельмі рэкамэндуецца [http://www.mediawiki.org/wiki/Manual:Security#Upload_security закрыць гэтую ўразьлівасьць] перад уключэньнем магчымасьці загрузкі файлаў.", + 'config-brokenlibxml' => 'У Вашай сыстэме ўсталяваныя PHP і libxml2 зь несумяшчальнымі вэрсіямі, што можа прывесьці да пашкоджаньня зьвестак MediaWiki і іншых ўэб-дастасаваньняў. +Абнавіце PHP да вэрсіі 5.2.9 ці болей позьняй, а libxml2 да 2.7.3 ці болей позьняй ([http://bugs.php.net/bug.php?id=45996 паведамленьне пра памылку на сайце PHP]). +Усталяваньне перарванае.', + 'config-using531' => 'PHP $1 не сумяшчальнае з MediaWiki з-за памылкі ў перадачы парамэтраў па ўказальніку да __call(). +Абнавіце PHP да вэрсіі 5.3.2 ці болей позьняй, ці адкаціце да вэрсіі 5.3.0 каб гэта выправіць. +Усталяваньне перарванае.', + 'config-db-type' => 'Тып базы зьвестак:', + 'config-db-host' => 'Хост базы зьвестак:', + 'config-db-host-help' => 'Калі сэрвэр Вашай базы зьвестак знаходзіцца на іншым сэрвэры, увядзіце тут імя хоста ці IP-адрас. + +Калі Вы набываеце shared-хостынг, Ваш хостынг-правайдэр мусіць даць Вам слушнае імя хоста базы зьвестак у сваёй дакумэнтацыі. + +Калі Вы усталёўваеце сэрвэр Windows з выкарыстаньнем MySQL, выкарыстаньне «localhost» можа не працаваць для назвы сэрвэра. У гэтым выпадку паспрабуйце пазначыць «127.0.0.1» для лякальнага IP-адраса.', + 'config-db-host-oracle' => 'TNS базы зьвестак:', + 'config-db-host-oracle-help' => 'Увядзіце слушнае [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm лякальнае імя злучэньня]; файл tnsnames.ora павінен быць бачным для гэтага ўсталяваньня.
    Калі Вы выкарыстоўваеце кліенцкія бібліятэкі 10g ці больш новыя, Вы можаце таксама выкарыстоўваць мэтад наданьня назваў [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm лёгкае злучэньне].', + 'config-db-wiki-settings' => 'Ідэнтыфікацыя гэтай вікі', + 'config-db-name' => 'Назва базы зьвестак:', + 'config-db-name-help' => 'Выберыце імя для вызначэньня Вашай вікі. +Яно ня мусіць зьмяшчаць прагалаў. + +Калі Вы набываеце shared-хостынг, Ваш хостынг-правайдэр мусіць надаць Вам ці пэўнае імя базы зьвестак для выкарыстаньня, ці магчымасьць ствараць базы зьвестак праз кантрольную панэль.', + 'config-db-name-oracle' => 'Схема базы зьвестак:', + 'config-db-account-oracle-warn' => 'Існуюць тры сцэнары ўсталяваньня Oracle як базы зьвестак для MediaWiki: + +Калі Вы жадаеце стварыць рахунак базы зьвестак як частку працэсу ўсталяваньня, калі ласка, падайце рахунак з роляй SYSDBA як рахунак базы зьвестак для ўсталяваньня і пазначце пажаданыя правы рахунку з доступам да Інтэрнэту, у адваротным выпадку Вы можаце таксама стварыць рахунак з доступам да Інтэрнэту ўручную і падаць толькі гэты рахунак (калі патрабуюцца правы для стварэньня схемы аб’ектаў) ці падайце два розных рахункі, адзін з правамі на стварэньне і адзін з абмежаваньнямі для доступу да Інтэрнэту. + +Скрыпт для стварэньня рахунку з патрабуемымі правамі можна знайсьці ў дырэкторыі гэтага ўсталяваньня «maintenance/oracle/». Памятайце, што выкарыстаньне рахунку з абмежаваньнямі адключыць усе падтрымліваемыя магчымасьці даступныя па змоўчваньні.', + 'config-db-install-account' => 'Імя карыстальніка для ўсталяваньня', + 'config-db-username' => 'Імя карыстальніка базы зьвестак:', + 'config-db-password' => 'Пароль базы зьвестак:', + 'config-db-password-empty' => 'Калі ласка, увядзіце пароль для новага карыстальніка базы зьвестак: $1. +Магчыма стварыць карыстальніка без паролю, але гэта небясьпечна.', + 'config-db-install-username' => 'Увядзіце імя карыстальніка, якое будзе выкарыстоўвацца для злучэньня з базай зьвестак падчас усталяваньня. Гэта не назва рахунку MediaWiki; гэта імя карыстальніка Вашай базы зьвестак.', + 'config-db-install-password' => 'Увядзіце пароль, які будзе выкарыстоўвацца для злучэньня з базай зьвестак падчас усталяваньня. Гэта не пароль рахунку MediaWiki; гэта пароль Вашай базы зьвестак.', + 'config-db-install-help' => 'Увядзіце імя карыстальніка і пароль, якія будуць выкарыстаныя для далучэньня да базы зьвестак падчас працэсу ўсталяваньня.', + 'config-db-account-lock' => 'Выкарыстоўваць тыя ж імя карыстальніка і пароль пасьля ўсталяваньня', + 'config-db-wiki-account' => 'Імя карыстальніка для працы', + 'config-db-wiki-help' => 'Увядзіце імя карыстальніка і пароль, якія будуць выкарыстаныя для далучэньня да базы зьвестак падчас працы (пасьля ўсталяваньня). +Калі рахунак ня створаны, а рахунак для ўсталяваньня мае значныя правы, гэты рахунак будзе створаны зь мінімальна патрэбнымі для працы вікі правамі.', + 'config-db-prefix' => 'Прэфікс табліцаў базы зьвестак:', + 'config-db-prefix-help' => 'Калі Вы разьдзяляеце адну базу зьвестак паміж некалькімі вікі, ці паміж MediaWiki і іншым вэб-дастасаваньнем, можаце вызначыць прэфікс назваў табліцаў для пазьбяганьня канфліктаў. +Пазьбягайце прагалаў. + +Гэтае поле звычайна пакідаецца пустым.', + 'config-db-charset' => 'Кадаваньне базы зьвестак', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binary', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 UTF-8 з адваротнай сумяшчальнасьцю', + 'config-charset-help' => "'''Папярэджаньне:''' калі Вы выкарыстоўваеце '''UTF-8 з адваротнай сумяшчальнасьцю''' на MySQL 4.1+ і зробіце рэзэрвовую копію праз mysqldump, ён можа зьнішчыць усе не-ASCII-сымбалі беспаваротна! + +У '''бінарным (binary)''' рэжыме MediaWiki захоўвае тэксты ў UTF-8 у палёх тыпу binary. +Гэты рэжым болей эфэктыўны за рэжым MySQL UTF-8 і дазваляе выкарыстоўваць увесь абсяг сымбаляў Unicode. +У рэжыме '''UTF-8''' MySQL будзе ведаць, у якім кадаваньне Вы зьмяшчаеце зьвесткі, і будзе вяртаць іх у адпаведным кадаваньні, +але MySQL ня можа ўтрымліваць сымбалі па-за [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Стандартным шматмоўным пластом] сымбаляў Unicode.", + 'config-mysql-old' => 'Патрабуецца MySQL $1 ці навейшая, усталяваная вэрсія $2.', + 'config-db-port' => 'Порт базы зьвестак:', + 'config-db-schema' => 'Схема для MediaWiki', + 'config-db-schema-help' => 'Гэтая схема слушная ў большасьці выпадкаў. +Зьмяняйце яе толькі тады, калі Вы ведаеце, што гэта неабходна.', + 'config-sqlite-dir' => 'Дырэкторыя зьвестак SQLite:', + 'config-sqlite-dir-help' => "SQLite захоўвае ўсе зьвесткі ў адзіным файле. + +Пададзеная Вамі дырэкторыя павінна быць даступнай да запісу вэб-сэрвэрам падчас усталяваньня. + +Яна '''ня''' мусіць быць даступнай праз Сеціва, вось чаму мы не захоўваем яе ў адным месцы з файламі PHP. + +Праграма ўсталяваньня дадаткова створыць файл .htaccess, але калі ён не выкарыстоўваецца, хто заўгодна зможа атрымаць зьвесткі з базы зьвестак. +Гэта ўключае як прыватныя зьвесткі ўдзельнікаў (адрасы электроннай пошты, хэшы пароляў), гэтак і выдаленыя вэрсіі старонак і іншыя зьвесткі, доступ да якіх маецца абмежаваны. + +Падумайце над тым, каб зьмяшчаць базу зьвестак у іншым месцы, напрыклад у /var/lib/mediawiki/yourwiki.", + 'config-oracle-def-ts' => 'Прастора табліцаў па змоўчваньні:', + 'config-oracle-temp-ts' => 'Часовая прастора табліцаў:', + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Oracle', + 'config-support-info' => 'MediaWiki падтрымлівае наступныя сыстэмы базаў зьвестак: + +$1 + +Калі Вы ня бачыце сыстэму базаў зьвестак, якую Вы спрабуеце выкарыстоўваць ў сьпісе ніжэй, перайдзіце па спасылцы інструкцыі, якая знаходзіцца ніжэй, каб уключыць падтрымку.', + 'config-support-mysql' => '* $1 зьяўляецца галоўнай мэтай MediaWiki і падтрымліваецца лепей за ўсё ([http://www.php.net/manual/en/mysql.installation.php як кампіляваць PHP з падтрымкай MySQL])', + 'config-support-postgres' => '* $1 — вядомая сыстэма базы зьвестак з адкрытым кодам, якая зьяўляецца альтэрнатывай MySQL ([http://www.php.net/manual/en/pgsql.installation.php як кампіляваць PHP з падтрымкай PostgreSQL]). Яна можа ўтрымліваць дробныя памылкі, і не рэкамэндуецца выкарыстоўваць яе для працуючых праектаў.', + 'config-support-sqlite' => '* $1 — невялікая сыстэма базы зьвестак, якая мае вельмі добрую падтрымку. ([http://www.php.net/manual/en/pdo.installation.php як кампіляваць PHP з падтрымкай SQLite], выкарыстоўвае PDO)', + 'config-support-oracle' => '* $1 зьяўляецца камэрцыйнай прафэсійнай базай зьвестак. ([http://www.php.net/manual/en/oci8.installation.php Як скампіляваць PHP з падтрымкай OCI8])', + 'config-header-mysql' => 'Налады MySQL', + 'config-header-postgres' => 'Налады PostgreSQL', + 'config-header-sqlite' => 'Налады SQLite', + 'config-header-oracle' => 'Налады Oracle', + 'config-invalid-db-type' => 'Няслушны тып базы зьвестак', + 'config-missing-db-name' => 'Вы павінны ўвесьці значэньне парамэтру «Імя базы зьвестак»', + 'config-missing-db-host' => 'Вы павінны ўвесьці значэньне парамэтру «Хост базы зьвестак»', + 'config-missing-db-server-oracle' => 'Вы павінны ўвесьці значэньне парамэтру «TNS базы зьвестак»', + 'config-invalid-db-server-oracle' => 'Няслушнае TNS базы зьвестак «$1». +Назва можа ўтрымліваць толькі ASCII-літары (a-z, A-Z), лічбы (0-9), сымбалі падкрэсьліваньня(_) і кропкі (.).', + 'config-invalid-db-name' => 'Няслушная назва базы зьвестак «$1». +Назва можа ўтрымліваць толькі ASCII-літары (a-z, A-Z), лічбы (0-9), сымбалі падкрэсьліваньня(_) і працяжнікі (-).', + 'config-invalid-db-prefix' => 'Няслушны прэфікс базы зьвестак «$1». +Ён можа зьмяшчаць толькі ASCII-літары (a-z, A-Z), лічбы (0-9), сымбалі падкрэсьліваньня (_) і працяжнікі (-).', + 'config-connection-error' => '$1. + +Праверце хост, імя карыстальніка і пароль ніжэй і паспрабуйце зноў.', + 'config-invalid-schema' => 'Няслушная схема для MediaWiki «$1». +Выкарыстоўвайце толькі ASCII-літары (a-z, A-Z), лічбы (0-9) і сымбалі падкрэсьліваньня (_).', + 'config-db-sys-create-oracle' => 'Праграма ўсталяваньня падтрымлівае толькі выкарыстаньне рахунку SYSDBA для стварэньня новага рахунку.', + 'config-db-sys-user-exists-oracle' => 'Рахунак карыстальніка «$1» ужо існуе. SYSDBA можа выкарыстоўвацца толькі для стварэньня новых рахункаў!', + 'config-postgres-old' => 'Патрабуецца PostgreSQL $1 ці навейшая, усталяваная вэрсія $2.', + 'config-sqlite-name-help' => 'Выберыце назву, якая будзе ідэнтыфікаваць Вашую вікі. +Не выкарыстоўвайце прагалы ці злучкі. +Назва будзе выкарыстоўвацца ў назьве файла зьвестак SQLite.', + 'config-sqlite-parent-unwritable-group' => 'Немагчыма стварыць дырэкторыю зьвестак $1, таму што бацькоўская дырэкторыя $2 абароненая ад запісаў вэб-сэрвэра. + +Праграма ўсталяваньня вызначыла карыстальніка, які запусьціў вэб-сэрвэр. +Дазвольце запісы ў дырэкторыю $3 для працягу. +У сыстэме Unix/Linux зрабіце: + +
    cd $2
    +mkdir $3
    +chgrp $4 $3
    +chmod g+w $3
    ', + 'config-sqlite-parent-unwritable-nogroup' => 'Немагчыма стварыць дырэкторыю зьвестак $1, таму што бацькоўская дырэкторыя $2 абароненая ад запісаў вэб-сэрвэра. + +Праграма ўсталяваньня вызначыла карыстальніка, які запусьціў вэб-сэрвэр. +Дазвольце яму (і іншым) запісы ў дырэкторыю $3 для працягу. +У сыстэме Unix/Linux зрабіце: + +
    cd $2
    +mkdir $3
    +chmod a+w $3
    ', + 'config-sqlite-mkdir-error' => 'Памылка падчас стварэньня дырэкторыі «$1». +Праверце шлях і паспрабуйце зноў.', + 'config-sqlite-dir-unwritable' => 'Запіс у дырэкторыю «$1» немагчымы. +Зьмяніце налады доступу, каб вэб-сэрвэр меў правы на запіс, і паспрабуйце зноў.', + 'config-sqlite-connection-error' => '$1. + +Праверце дырэкторыю для зьвестак, назву базы зьвестак і паспрабуйце зноў.', + 'config-sqlite-readonly' => 'Файл $1 недаступны для запісу.', + 'config-sqlite-cant-create-db' => 'Немагчыма стварыць файл базы зьвестак $1.', + 'config-sqlite-fts3-downgrade' => 'PHP бракуе падтрымкі FTS3 — табліцы пагаршаюцца', + 'config-can-upgrade' => "У гэтай базе зьвестак ёсьць табліцы MediaWiki. +Каб абнавіць іх да MediaWiki $1, націсьніце '''Працягнуць'''.", + 'config-upgrade-done' => "Абнаўленьне завершанае. + +Цяпер Вы можаце [$1 пачаць выкарыстаньне вікі]. + +Калі Вы жадаеце рэгенэраваць LocalSettings.php, націсьніце кнопку ніжэй. +Гэтае дзеяньне '''не рэкамэндуецца''', калі Вы ня маеце праблемаў у працы вікі.", + 'config-upgrade-done-no-regenerate' => 'Абнаўленьне скончанае. + +Цяпер Вы можаце [$1 пачаць працу з вікі].', + 'config-regenerate' => 'Рэгенэраваць LocalSettings.php →', + 'config-show-table-status' => "Запыт 'SHOW TABLE STATUS' не атрымаўся!", + 'config-unknown-collation' => "'''Папярэджаньне:''' база зьвестак выкарыстоўвае нераспазнанае супастаўленьне.", + 'config-db-web-account' => 'Рахунак базы зьвестак для вэб-доступу', + 'config-db-web-help' => 'Выберыце імя карыстальніка і пароль, які выкарыстоўваецца вэб-сэрвэрам для злучэньня з сэрвэрам базы зьвестак, падчас звычайных апэрацыяў вікі.', + 'config-db-web-account-same' => 'Выкарыстоўваць той жа рахунак, што для ўсталяваньня', + 'config-db-web-create' => 'Стварыць рахунак, калі ён яшчэ не існуе', + 'config-db-web-no-create-privs' => 'Рахунак, які Вы пазначылі для ўсталяваньня ня мае правоў для стварэньня рахунку. +Рахунак, які Вы пазначылі тут, мусіць ужо існаваць.', + 'config-mysql-engine' => 'Рухавік сховішча:', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-engine-help' => "'''InnoDB''' — звычайна найбольш слушны варыянт, таму што добра падтрымлівае паралелізм. + +'''MyISAM''' можа быць хутчэйшай у вікі з адным удзельнікам, ці толькі для чытаньня. +Базы зьвестак на MyISAM вядомыя тым, што ў іх зьвесткі шкодзяцца нашмат часьцей за InnoDB.", + 'config-mysql-charset' => 'Кадаваньне базы зьвестак:', + 'config-mysql-binary' => 'Двайковае', + 'config-mysql-utf8' => 'UTF-8', + 'config-mysql-charset-help' => "У '''двайковым рэжыме''', MediaWiki захоўвае тэкст у кадаваньні UTF-8 у базе зьвестак у двайковых палях. +Гэта болей эфэктыўна за рэжым MySQL UTF-8, і дазваляе Вам выкарыстоўваць увесь дыяпазон сымбаляў Unicode. + +У '''рэжыме UTF-8''', MySQL ведае, якая табліцы сымбаляў выкарыстоўваецца ў Вашых зьвестках, і можа адпаведна прадстаўляць і канвэртаваць іх, але гэта не дазволіць Вам захоўваць сымбалі па-за межамі [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Базавага шматмоўнага дыяпазону].", + 'config-site-name' => 'Назва вікі:', + 'config-site-name-help' => 'Назва будзе паказвацца ў загалоўку браўзэра і ў некаторых іншых месцах.', + 'config-site-name-blank' => 'Увядзіце назву сайта.', + 'config-project-namespace' => 'Прастора назваў праекту:', + 'config-ns-generic' => 'Праект', + 'config-ns-site-name' => 'Такая ж, як і назва вікі: $1', + 'config-ns-other' => 'Іншая (вызначце)', + 'config-ns-other-default' => 'MyWiki', + 'config-project-namespace-help' => "Па прыкладу Вікіпэдыі, шматлікія вікі трымаюць уласныя старонкі з правіламі асобна ад старонак са зьместам, у «'''прасторы назваў праекту'''». +Усе назвы старонак у гэтай прасторы назваў пачынаюцца з прыстаўкі, якую Вы можаце пазначыць тут. +Традыцыйна, гэтая прыстаўка вытворная ад назвы вікі, яле яна ня можа ўтрымліваць некаторыя сымбалі, такія як «#» ці «:».", + 'config-ns-invalid' => 'Пададзеная няслушная прастора назваў «$1». +Падайце іншую прастору назваў праекту.', + 'config-ns-conflict' => 'Пазначаная прастора назваў «$1» канфліктуе з прасторай назваў MediaWiki па змоўчваньні. +Пазначце іншую прастору назваў праекту.', + 'config-admin-box' => 'Рахунак адміністратара', + 'config-admin-name' => 'Вашае імя:', + 'config-admin-password' => 'Пароль:', + 'config-admin-password-confirm' => 'Пароль яшчэ раз:', + 'config-admin-help' => 'Увядзіце тут Вашае імя ўдзельніка, напрыклад «Янка Кавалевіч». +Гэтае імя будзе выкарыстоўвацца для ўваходу ў вікі.', + 'config-admin-name-blank' => 'Увядзіце імя адміністратара.', + 'config-admin-name-invalid' => 'Пададзенае няслушнае імя ўдзельніка «$1». +Падайце іншае імя ўдзельніка.', + 'config-admin-password-blank' => 'Увядзіце пароль рахунку адміністратара.', + 'config-admin-password-same' => 'Пароль ня можа быць аднолькавым зь іменем удзельніка.', + 'config-admin-password-mismatch' => 'Уведзеныя Вамі паролі не супадаюць.', + 'config-admin-email' => 'Адрас электроннай пошты:', + 'config-admin-email-help' => 'Увядзіце тут адрас электроннай пошты, каб атрымліваць электронныя лісты ад іншых удзельнікаў вікі, скідваць Ваш пароль і атрымліваць абвешчаньні пра зьмены старонак, якія знаходзяцца ў Вашым сьпісе назіраньня. Вы можаце пакінуць гэтае поле пустым.', + 'config-admin-error-user' => 'Унутраная памылка падчас стварэньня рахунку адміністратара зь іменем «$1».', + 'config-admin-error-password' => 'Унутраная памылка падчас устаноўкі паролю для адміністратара «$1»:
    $2
    ', + 'config-admin-error-bademail' => 'Вы ўвялі няслушны адрас электроннай пошты', + 'config-subscribe' => 'Падпісацца на [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce сьпіс распаўсюджаньня навінаў пра зьяўленьне новых вэрсіяў].', + 'config-subscribe-help' => 'Гэта ня вельмі актыўны сьпіс распаўсюджаньня навінаў пра зьяўленьне новых вэрсіяў, які ўключаючы важныя навіны пра бясьпеку. +Вам неабходна падпісацца на яго і абнавіць Вашае ўсталяваньне MediaWiki, калі зьявяцца новыя вэрсіі.', + 'config-almost-done' => 'Вы амаль што скончылі! +Астатнія налады можна прапусьціць і пачаць усталяваньне вікі.', + 'config-optional-continue' => 'Задаць болей пытаньняў.', + 'config-optional-skip' => 'Хопіць, проста ўсталяваць вікі.', + 'config-profile' => 'Профіль правоў удзельніка:', + 'config-profile-wiki' => 'Традыцыйная вікі', + 'config-profile-no-anon' => 'Патрэбнае стварэньне рахунку', + 'config-profile-fishbowl' => 'Толькі для аўтарызаваных рэдактараў', + 'config-profile-private' => 'Прыватная вікі', + 'config-profile-help' => "Вікі працуюць лепей, калі Вы дазваляеце як мага большай колькасьці людзей рэдагаваць яе. +У MediaWiki вельмі лёгка праглядаць апошнія зьмены і выпраўляць любыя пашкоджаньні зробленыя недасьведчанымі ўдзельнікамі альбо вандаламі. + +Тым ня менш, многія лічаць, што MediaWiki можа быць карыснай ў шматлікіх іншых ролях, і часта вельмі нялёгка растлумачыць усім перавагі выкарыстаньня тэхналёгіяў вікі. +Таму Вы маеце выбар. + +'''{{int:config-profile-wiki}}''' дазваляе рэдагаваць усім, нават без уваходу ў сыстэму. +Вікі з '''{{int:config-profile-no-anon}}''' дазваляе дадатковую адказнасьць, але можа адштурхнуць некаторых патэнцыйных удзельнікаў. + +Сцэнар '''{{int:config-profile-fishbowl}}''' дазваляе рэдагаваць зацьверджаным удзельнікам, але ўсе могуць праглядаць старонкі іх гісторыю. +'''{{int:config-profile-private}}''' дазваляе праглядаць і рэдагаваць старонкі толькі зацьверджаным удзельнікам. + +Больш складаныя правы ўдзельнікаў даступныя пасьля ўсталяваньня, глядзіце [http://www.mediawiki.org/wiki/Manual:User_rights адпаведную старонку дакумэнтацыі].", + 'config-license' => 'Аўтарскія правы і ліцэнзія:', + 'config-license-none' => 'Без інфармацыі пра ліцэнзію', + 'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike', + 'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike', + 'config-license-cc-0' => 'Creative Commons Zero', + 'config-license-gfdl-old' => 'GNU Free Documentation License 1.2', + 'config-license-gfdl-current' => 'GNU Free Documentation License 1.3 ці болей позьняя', + 'config-license-pd' => 'Грамадзкі набытак', + 'config-license-cc-choose' => 'Выберыце іншую ліцэнзію Creative Commons', + 'config-license-help' => "Шматлікія адкрытыя вікі разьмяшчаюць унёскі на ўмовах ліцэнзіі [http://freedomdefined.org/Definition вольнай ліцэнзіі]. +Гэта дазваляе ствараць сэнс супольнай уласнасьці і садзейнічае доўгатэрміновым унёскам. +Гэта не неабходна для прыватных і карпаратыўных вікі. + +Калі Вы жадаеце выкарыстоўваць тэкст з Вікіпэдыі, і жадаеце каб Вікіпэдыя магла прынімаць тэкст скапіяваны з Вашай вікі, Вам неабходна выбраць ліцэнзію '''Creative Commons Attribution Share Alike'''. + +Раней Вікіпэдыя выкарыстоўвала ліцэнзію GNU Free Documentation. Яна ўсё яшчэ дзейнічае, але яна ўтрымлівае некаторыя моманты, якія ўскладняюць паўторнае выкарыстоўваньне і інтэрпрэтацыю матэрыялаў.", + 'config-email-settings' => 'Налады электроннай пошты', + 'config-enable-email' => 'Дазволіць выходзячыя электронныя лісты', + 'config-enable-email-help' => 'Калі Вы жадаеце, каб працавала электронная пошта, неабходна сканфігураваць PHP [http://www.php.net/manual/en/mail.configuration.php адпаведным чынам]. +Калі Вы не жадаеце выкарыстоўваць магчымасьці электроннай пошты, Вы можаце яе адключыць.', + 'config-email-user' => 'Дазволіць электронную пошту для сувязі паміж удзельнікамі', + 'config-email-user-help' => 'Дазволіць усім удзельнікам дасылаць адзін аднаму электронныя лісты, калі ўключаная адпаведная магчымасьць ў іх наладах.', + 'config-email-usertalk' => 'Уключыць абвяшчэньні пра паведамленьні на старонцы абмеркаваньня', + 'config-email-usertalk-help' => 'Дазваляе ўдзельнікам атрымліваць абвяшчэньні пра зьмены на старонцы абмеркаваньня, калі гэтая магчымасьць уключаная ў іх наладах.', + 'config-email-watchlist' => 'Уключыць абвяшчэньні пра зьмены ў сьпісе назіраньня', + 'config-email-watchlist-help' => 'Дазваляе ўдзельнікам атрымліваць абвяшчэньні пра зьмены ў іх сьпісе назіраньня, калі гэтая магчымасьць уключаная ў іх наладах.', + 'config-email-auth' => 'Уключыць аўтэнтыфікацыю праз электронную пошту', + 'config-email-auth-help' => "Калі гэтая магчымасьць уключаная, удзельнікі павінны пацьвердзіць іх адрас электроннай пошты праз спасылку, якая дасылаецца ім праз электронную пошту. Яна дасылаецца і падчас зьмены адрасу электроннай пошты. +Толькі аўтэнтыфікаваныя адрасы электроннай пошты могуць атрымліваць электронныя лісты ад іншых удзельнікаў, ці зьмяняць абвяшчэньні дасылаемыя праз электронную пошту. +Уключэньне гэтай магчымасьці '''рэкамэндуецца''' для адкрытых вікі, з-за магчымых злоўжываньняў магчымасьцямі электроннай пошты.", + 'config-email-sender' => 'Адрас электроннай пошты для вяртаньня:', + 'config-email-sender-help' => 'Увядзіце адрас электроннай пошты для вяртаньня ў якасьці адрасу дасылаемых электронных лістоў. +Сюды будуць дасылацца неатрыманыя электронныя лісты. +Шматлікія паштовыя сэрвэры патрабуюць, каб хаця б назва дамэну была слушнай.', + 'config-upload-settings' => 'Загрузкі выяваў і файлаў', + 'config-upload-enable' => 'Дазволіць загрузку файлаў', + 'config-upload-help' => 'Дазвол загрузкі файлаў можа патэнцыйна пагражаць бясьпекі сэрвэра. +Дадатковую інфармацыю можна атрымаць ў [http://www.mediawiki.org/wiki/Manual:Security разьдзеле бясьпекі]. + +Каб дазволіць загрузку файлаў, зьмяніце рэжым падкаталёга images у карэннай дырэкторыі MediaWiki так, каб ўэб-сэрвэр меў доступ на запіс. +Потым дазвольце гэтую магчымасьць.', + 'config-upload-deleted' => 'Дырэкторыя для выдаленых файлаў:', + 'config-upload-deleted-help' => 'Выберыце дырэкторыю, у якой будуць захоўвацца выдаленыя файлы. +У ідэальным выпадку, яна не павінна мець доступу з Інтэрнэту.', + 'config-logo' => 'URL-адрас лягатыпу:', + 'config-logo-help' => 'Афармленьне MediaWiki па змоўчваньні уключае прастору для лягатыпу памерам 135×160 піксэляў у верхнім левым куце. +Загрузіце выяву адпаведнага памеру, і увядзіце тут URL-адрас. + +Калі Вы не жадаеце мець ніякага лягатыпу, пакіньце гэтае поле пустым.', + 'config-instantcommons' => 'Дазволіць Instant Commons', + 'config-instantcommons-help' => '[http://www.mediawiki.org/wiki/InstantCommons Instant Commons] — магчымасьць, якая дазваляе вікі выкарыстоўваць выявы, гукі і іншыя мэдыя, якія знаходзяцца на сайце [http://commons.wikimedia.org/ Wikimedia Commons]. +Каб гэта зрабіць, MediaWiki патрабуе доступу да Інтэрнэту. + +Каб даведацца болей пра гэтую магчымасьць, уключаючы інструкцыю пра тое, як яе ўстанавіць ў любой вікі, акрамя Wikimedia Commons, глядзіце [http://mediawiki.org/wiki/Manual:$wgForeignFileRepos дакумэнтацыю].', + 'config-cc-error' => 'Выбар ліцэнзіі Creative Commons ня даў вынікаў. +Увядзіце назву ліцэнзіі ўручную.', + 'config-cc-again' => 'Выберыце яшчэ раз…', + 'config-cc-not-chosen' => 'Выберыце, якую ліцэнзію Creative Commons Вы жадаеце выкарыстоўваць і націсьніце «працягваць».', + 'config-advanced-settings' => 'Дадатковыя налады', + 'config-cache-options' => 'Налады кэшаваньня аб’ектаў:', + 'config-cache-help' => 'Кэшаваньне аб’ектаў павялічвае хуткасьць працы MediaWiki праз кэшаваньне зьвестак, якія часта выкарыстоўваюцца. +Вельмі рэкамэндуем уключыць гэта для сярэдніх і буйных сайтаў, таксама будзе карысна для дробных сайтаў.', + 'config-cache-none' => 'Без кэшаваньня (ніякія магчымасьці не страчваюцца, але хуткасьць працы буйных сайтаў можа зьнізіцца)', + 'config-cache-accel' => 'Кэшаваньне аб’ектаў PHP (APC, eAccelerator, XCache ці WinCache)', + 'config-cache-memcached' => 'Выкарыстоўваць Memcached (патрабуе дадатковай канфігурацыі)', + 'config-memcached-servers' => 'Сэрвэры memcached:', + 'config-memcached-help' => 'Сьпіс IP-адрасоў, якія будуць выкарыстоўвацца Memcached. +Адрасы павінны быць у асобным радку з пазначэньнем порту, які будзе выкарыстоўвацца. Напрыклад: + 127.0.0.1:11211 + 192.168.1.25:1234', + 'config-memcache-needservers' => 'Вы выбралі Memcached у якасьці тыпу Вашага кэша, але не пазначылі ніякага сэрвэра', + 'config-memcache-badip' => 'Вы ўвялі няслушны IP-адрас для Memcached: $1', + 'config-memcache-noport' => 'Вы не пазначылі порт для выкарыстаньня сэрвэрам Memcached: $1. +Калі Вы ня ведаеце порт, то па змоўчваньні выкарыстоўваецца 11211', + 'config-memcache-badport' => 'Нумар порту Memcached павінен быць паміж $1 і $2', + 'config-extensions' => 'Пашырэньні', + 'config-extensions-help' => 'Пашырэньні пададзеныя вышэй, былі знойдзеныя ў Вашай дырэкторыі ./extensions. + +Яны могуць патрабаваць дадатковых наладаў, але іх можна ўключыць зараз', + 'config-install-alreadydone' => "'''Папярэджаньне:''' здаецца, што Вы ўжо ўсталёўвалі MediaWiki і спрабуеце зрабіць гэтай зноў. +Калі ласка, перайдзіце на наступную старонку.", + 'config-install-begin' => 'Пасьля націску кнопкі «{{int:config-continue}}» пачнецца ўсталяваньне MediaWiki. +Калі Вы жадаеце што-небудзь зьмяніць, націсьніце кнопку «Вярнуцца».', + 'config-install-step-done' => 'зроблена', + 'config-install-step-failed' => 'не атрымалася', + 'config-install-extensions' => 'Уключаючы пашырэньні', + 'config-install-database' => 'Налада базы зьвестак', + 'config-install-pg-schema-not-exist' => 'Схема PostgreSQL не існуе', + 'config-install-pg-schema-failed' => 'Немагчыма стварыць табліцу. +Упэўніцеся, што карыстальнік «$1» можа пісаць у схему «$2».', + 'config-install-pg-commit' => 'Захаваньне зьменаў', + 'config-install-pg-plpgsql' => 'Праверка падтрымкі мовы PL/pgSQL', + 'config-pg-no-plpgsql' => 'Вам неабходна ўсталяваць падтрымку мовы PL/pgSQL у базе зьвестак $1', + 'config-pg-no-create-privs' => 'Рахунак, які Вы пазначылі для ўсталяваньня ня мае дастаткова правоў для стварэньня рахунку.', + 'config-install-user' => 'Стварэньне карыстальніка базы зьвестак', + 'config-install-user-alreadyexists' => 'Удзельнік «$1» ужо існуе', + 'config-install-user-create-failed' => 'Немагчыма стварыць ўдзельніка «$1»: $2', + 'config-install-user-grant-failed' => 'Немагчыма даць правы удзельніку «$1»: $2', + 'config-install-tables' => 'Стварэньне табліцаў', + 'config-install-tables-exist' => "'''Папярэджаньне''': Выглядае, што табліцы MediaWiki ужо існуюць. +Стварэньне прапушчанае.", + 'config-install-tables-failed' => "'''Памылка''': немагчыма стварыць табліцы з-за наступнай памылкі: $1", + 'config-install-interwiki' => 'Запаўненьне табліцы інтэрвікі па змоўчваньні', + 'config-install-interwiki-list' => 'Немагчыма знайсьці файл interwiki.list.', + 'config-install-interwiki-exists' => "'''Папярэджаньне''': выглядае, што табліца інтэрвікі ўжо запоўненая. +Сьпіс па змоўчваньні прапушчаны.", + 'config-install-stats' => 'Ініцыялізацыі статыстыкі', + 'config-install-keys' => 'Стварэньне сакрэтнага ключа', + 'config-insecure-keys' => "'''Папярэджаньне:''' {{PLURAL:$2|Ключ бясьпекі $1 створаны|Ключы бясьпекі $1 створаныя}} падчас усталяваньня, не зьяўляюцца поўнасьцю бясьпечнымі. Рэкамэндуецца зьмяніць {{PLURAL:$2|яго ўручную|іх уручную}}.", + 'config-install-sysop' => 'Стварэньне рахунку адміністратара', + 'config-install-subscribe-fail' => 'Немагчыма падпісацца на «mediawiki-announce»', + 'config-install-mainpage' => 'Стварэньне галоўнай старонкі са зьместам па змоўчваньні', + 'config-install-extension-tables' => 'Стварэньне табліцаў для ўключаных пашырэньняў', + 'config-install-mainpage-failed' => 'Немагчыма ўставіць галоўную старонку: $1', + 'config-install-done' => "'''Віншуем!''' +Вы пасьпяхова ўсталявалі MediaWiki. + +Праграма ўсталяваньня стварыла файл LocalSettings.php. +Ён утрымлівае ўсе Вашыя налады. + +Вам неабходна загрузіць яго і захаваць у карэнную дырэкторыю Вашай вікі (у тую ж самую дырэкторыю, дзе знаходзіцца index.php). Загрузка павінна пачацца аўтаматычна. + +Калі загрузка не пачалася, ці Вы яе адмянілі, Вы можаце перазапусьціць яе націснуўшы на спасылку ніжэй: + +$3 + +'''Заўвага''': калі Вы гэтага ня зробіце зараз, то створаны файл ня будзе даступны Вам потым, калі Вы выйдзеце з праграмы ўсталяваньня без яго загрузкі. + +Калі Вы гэта зробіце, Вы можаце '''[$2 ўвайсьці ў Вашую вікі]'''.", + 'config-download-localsettings' => 'Загрузіць LocalSettings.php', + 'config-help' => 'дапамога', +); + +/** Bulgarian (Български) + * @author DCLXVI + */ +$messages['bg'] = array( + 'config-desc' => 'Инсталатор на МедияУики', + 'config-title' => 'Инсталиране на МедияУики $1', + 'config-information' => 'Информация', + 'config-localsettings-upgrade' => 'Беше открит файл LocalSettings.php. +За надграждане на съществуващата инсталация, необходимо е в кутията по-долу да се въведе стойността на $wgUpgradeKey. +Тази информация е налична в LocalSettings.php.', + 'config-localsettings-cli-upgrade' => 'Беше открит файл LocalSettings.php. +За надграждане на наличната инсталация, необходимо е да се стартира update.php', + 'config-localsettings-key' => 'Ключ за надграждане:', + 'config-localsettings-badkey' => 'Предоставеният ключ е неправилен.', + 'config-upgrade-key-missing' => 'Беше открита съществуваща инсталация на МедияУики. +За надграждане на съществуващата инсталация, необходимо е да се постави следният ред в края на файла LocalSettings.php: + +$1', + 'config-localsettings-incomplete' => 'Съществуващият файл LocalSettings.php изглежда непълен. +Променливата $1 не е зададена. +Необходимо е да се редактира файлът LocalSettings.php и да се зададе променливата, след което да се натисне "Продължаване".', + 'config-localsettings-connection-error' => 'Възникна грешка при свързване с базата от данни чрез данните, посочени в LocalSettings.php или AdminSettings.php. Необходимо е да се коригират тези настройки преди повторен опит за свързване. + +$1', + 'config-session-error' => 'Грешка при създаване на сесия: $1', + 'config-your-language' => 'Вашият език:', + 'config-your-language-help' => 'Избиране на език за използване по време на инсталацията.', + 'config-wiki-language' => 'Език на уикито:', + 'config-wiki-language-help' => 'Избиране на език, на който ще е основното съдържание на уикито.', + 'config-back' => '← Връщане', + 'config-continue' => 'Продължаване →', + 'config-page-language' => 'Език', + 'config-page-welcome' => 'Добре дошли в МедияУики!', + 'config-page-dbconnect' => 'Свързване с базата от данни', + 'config-page-upgrade' => 'Надграждане на съществуваща инсталация', + 'config-page-dbsettings' => 'Настройки на базата от данни', + 'config-page-name' => 'Име', + 'config-page-options' => 'Настройки', + 'config-page-install' => 'Инсталиране', + 'config-page-complete' => 'Готово!', + 'config-page-restart' => 'Рестартиране на инсталацията', + 'config-page-readme' => 'Информация за софтуера', + 'config-page-releasenotes' => 'Бележки за версията', + 'config-page-copying' => 'Лицензно споразумение', + 'config-page-upgradedoc' => 'Надграждане', + 'config-page-existingwiki' => 'Съществуващо уики', + 'config-help-restart' => 'Необходимо е потвърждение за изтриване на всички въведени и съхранени данни и започване отначало на процеса по инсталация.', + 'config-restart' => 'Да, започване отначало', + 'config-welcome' => '=== Проверка на средата === +Извършени бяха основни проверки, за да се провери дали средата е подходяща за инсталиране на МедияУики. +Ако е необходима помощ по време на инсталацията, резултатите от направените проверки трябва също да бъдат предоставени.', + 'config-copyright' => "=== Авторски права и Условия === + +$1 + +Тази програма е свободен софтуер, който може да се променя и/или разпространява според Общия публичен лиценз на GNU, както е публикуван от Free Software Foundation във версия на Лиценза 2 или по-късна версия. + +Тази програма се разпространява с надеждата, че ще е полезна, но '''без каквито и да е гаранции'''; без дори косвена гаранция за '''продаваемост''' или '''прогодност за конкретна употреба'''. +За повече подробности се препоръчва преглеждането на Общия публичен лиценз на GNU. + +Към програмата трябва да е приложено копие на Общия публичен лиценз на GNU; ако не, можете да пишете на Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. или да [http://www.gnu.org/copyleft/gpl.html го прочетете онлайн].", + 'config-sidebar' => '* [http://www.mediawiki.org Сайт на МедияУики] +* [http://www.mediawiki.org/wiki/Help:Contents Наръчник на потребителя] +* [http://www.mediawiki.org/wiki/Manual:Contents Наръчник на администратора] +* [http://www.mediawiki.org/wiki/Manual:FAQ ЧЗВ] +---- +* Документация +* Бележки за версията +* Авторски права +* Обновяване', + 'config-env-good' => 'Средата беше проверена. +Инсталирането на МедияУики е възможно.', + 'config-env-bad' => 'Средата беше проверена. +Не е възможна инсталация на МедияУики.', + 'config-env-php' => 'Инсталирана е версия на PHP $1.', + 'config-env-php-toolow' => 'Инсталирана е версия на PHP $1. +МедияУики изисква версия PHP $2 или по-нова.', + 'config-unicode-using-utf8' => 'Използване на utf8_normalize.so от Brion Vibber за нормализация на Уникод.', + 'config-unicode-using-intl' => 'Използване на разширението [http://pecl.php.net/intl intl PECL] за нормализация на Уникод.', + 'config-unicode-pure-php-warning' => "'''Предупреждение''': [http://pecl.php.net/intl Разширението intl PECL] не е налично за справяне с нормализацията на Уникод, превключване към по-бавното изпълнение на чист PHP. +Ако сайтът е с голям трафик, препоръчително е запознаването с [http://www.mediawiki.org/wiki/Unicode_normalization_considerations нормализацията на Уникод].", + 'config-no-db' => 'Не може да бъде открит подходящ драйвер за база от данни!', + 'config-no-fts3' => "'''Предупреждение''': SQLite е компилирана без [http://sqlite.org/fts3.html модула FTS3], затова възможностите за търсене няма да са достъпни.", + 'config-register-globals' => "'''Предупреждение: Настройката на PHP [http://php.net/register_globals register_globals] е включена.''' +'''При възможност е препоръчително тя да бъде изключена.''' +МедияУики ще работи, но сървърът е изложен на евентуални пропуски в сигурността.", + 'config-magic-quotes-runtime' => "'''Фатално: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] е активирана!''' +Това може да повреди непредвидимо въвеждането на данните. +Инсталацията на МедияУики е невъзможна докато тази настройка не бъде изключена.", + 'config-magic-quotes-sybase' => "'''Фатално: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] е активирана!''' +Това може да повреди непредвидимо въвеждането на данните. +Инсталацията на МедияУики е невъзможна докато тази настройка не бъде изключена.", + 'config-mbstring' => "'''Фатално: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] е активирана!''' +Това може да повреди непредвидимо въвеждането на данните. +Инсталацията на МедияУики е невъзможна докато тази настройка не бъде изключена.", + 'config-ze1' => "'''Фатално: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] е активирана!''' +Тази настройка причинява ужасни грешки в МедияУики. +Невъзможно е инсталирането и използването на МедияУики докато тази настройка не бъде изключена.", + 'config-safe-mode' => "'''Предупреждение:''' PHP работи в [http://www.php.net/features.safe-mode безопасен режим]. +Това може да създаде проблеми, особено ако качването на файлове е разрешено, както и при поддръжката на math.", + 'config-xml-bad' => 'Липсва XML модулът на PHP. +МедияУики се нуждае от някои функции от този модул и няма да работи при наличната конфигурация. +При Mandrake, необходимо е да се инсталира пакетът php-xml.', + 'config-pcre-no-utf8' => "'''Фатално''': Модулът PCRE на PHP изглежда е компилиран без поддръжка на PCRE_UTF8. +За да функционира правилно, МедияУики изисква поддръжка на UTF-8.", + 'config-memory-raised' => 'memory_limit на PHP е $1, увеличаване до $2.', + 'config-memory-bad' => "'''Предупреждение:''' memory_limit на PHP е $1. +Стойността вероятно е твърде ниска. +Възможно е инсталацията да се провали!", + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] е инсталиран', + 'config-apc' => '[http://www.php.net/apc APC] е инсталиран', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] е инсталиран', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] е инсталиран', + 'config-no-cache' => "'''Предупреждение:''' Не бяха открити [http://eaccelerator.sourceforge.net eAccelerator], [http://www.php.net/apc APC] [http://trac.lighttpd.net/xcache/ XCache] или [http://www.iis.net/download/WinCacheForPhp WinCache]. +Обектното кеширане не е включено.", + 'config-diff3-bad' => 'GNU diff3 не беше намерен.', + 'config-imagemagick' => 'Открит е ImageMagick: $1. +Преоразмеряването на картинки ще бъде включено ако качването на файлове бъде разрешено.', + 'config-gd' => 'Открита е вградена графичната библиотека GD. +Ако качването на файлове бъде включено, ще бъде включена възможността за преоразмеряване на картинки.', + 'config-no-scaling' => 'Не са открити библиотеките GD или ImageMagick. +Преоразмеряването на картинки ще бъде изключено.', + 'config-no-uri' => "'''Грешка:''' Не може да се определи текущия адрес. +Инсталация беше прекратена.", + 'config-uploads-not-safe' => "'''Предупреждение:''' Папката по подразбиране за качване $1 е уязвима от изпълнение на зловредни скриптове. +Въпреки че МедияУики извършва проверка за заплахи в сигурността на всички качени файлове, силно препоръчително е да се [http://www.mediawiki.org/wiki/Manual:Security#Upload_security затвори тази уязвимост в сигурността] преди разрешаване за качване на файлове.", + 'config-db-type' => 'Тип на базата от данни:', + 'config-db-host' => 'Хост на базата от данни:', + 'config-db-host-help' => 'Ако базата от данни е на друг сървър, в кутията се въвежда името на хоста или IP адреса. + +Ако се използва споделен уеб хостинг, доставчикът на услугата би трябвало да е предоставил в документацията си коректния хост. + +Ако инсталацията протича на Windows-сървър и се използва MySQL, използването на "localhost" може да е неприемливо. В такива случаи се използва "127.0.0.1" за локален IP адрес.', + 'config-db-wiki-settings' => 'Идентифициране на това уики', + 'config-db-name' => 'Име на базата от данни:', + 'config-db-name-help' => 'Избира се име, което да идентифицира уикито. +То не трябва да съдържа интервали. + +Ако се използва споделен хостинг, доставчикът на услугата би трябвало да е предоставил или име на базата от данни, която да бъде използвана, или да позволява създаването на бази от данни чрез контролния панел.', + 'config-db-name-oracle' => 'Схема на базата от данни:', + 'config-db-install-account' => 'Потребителска сметка за инсталацията', + 'config-db-username' => 'Потребителско име за базата от данни:', + 'config-db-password' => 'Парола за базата от данни:', + 'config-db-install-username' => 'Въвежда се потребителско име, което ще се използва за свързване с базата от данни по време на процеса по инсталация. +Това не е потребителско име за сметка в МедияУики; това е потребителско име за базата от данни.', + 'config-db-install-password' => 'Въвежда се парола, която ще бъде използвана за свързване с базата от данни по време на инсталационния процес. +Това не е парола за сметка в МедияУики; това е парола за базата от данни.', + 'config-db-install-help' => 'Въвеждат се потребителско име и парола, които ще бъдат използвани за свързване с базата от данни по време на инсталационния процес.', + 'config-db-account-lock' => 'Използване на същото потребителско име и парола по време на нормална работа', + 'config-db-wiki-account' => 'Потребителска сметка за нормална работа', + 'config-db-wiki-help' => 'Въвежда се потребителско име и парола, които ще се използват при нормалното функциониране на уикито. +Ако сметката не съществува и използваната при инсталацията сметка има необходимите права, тази потребителска сметка ще бъде създадена с минималните необходими права за работа с уикито.', + 'config-db-prefix' => 'Представка за таблиците в базата от данни:', + 'config-db-prefix-help' => 'Ако е необходимо да се сподели базата от данни между няколко уикита или между МедияУики и друго уеб приложение, може да се добави представка пред имената на таблиците, за да се избегнат конфликти. +Не се използват интервали. + +Това поле обикновено се оставя празно.', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 бинарно', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 с обратна съвестимост с UTF-8', + 'config-mysql-old' => 'Изисква се MySQL $1 или по-нова версия, наличната версия е $2.', + 'config-db-port' => 'Порт на базата от данни:', + 'config-db-schema' => 'Схема за МедияУики', + 'config-db-schema-help' => 'Схемата по-горе обикновено е коректна. +Промени се извършват ако наистина е необходимо.', + 'config-sqlite-dir' => 'Директория за данни на SQLite:', + 'config-sqlite-dir-help' => "SQLite съхранява всички данни в един файл. + +По време на инсталацията уеб сървърът трябва да има права за писане в посочената директория. + +Тя '''не трябва''' да е достъпна през уеб, затова не е там, където са PHP файловете. + +Инсталаторът ще съхрани заедно с нея файл .htaccess, но ако този метод пропадне, някой може да придобие даостъп до суровите данни от базата от данни. +Това включва сурови данни за потребителите (адреси за е-поща, хеширани пароли), както и изтрити версии на страници и друга чувствителна и с ограничен достъп информация от и за уикито. + +Базата от данни е препоръчително да се разположи на друго място, например в /var/lib/mediawiki/yourwiki.", + 'config-support-info' => 'МедияУики поддържа следните системи за бази от данни: + +$1 + +Ако не виждате желаната за използване система в списъка по-долу, следвайте инструкциите за активиране на поддръжка по-горе.', + 'config-support-mysql' => '* $1 е най-фобре поддържата система за база от данни, най-добре поддържана от МедияУики ([http://www.php.net/manual/en/mysql.installation.php Как се компилира PHP с поддръжка на MySQL])', + 'config-support-postgres' => '* $1 е популярна система за бази от данни с отворен изходен код, която е алтернатива на MySQL ([http://www.php.net/manual/en/pgsql.installation.php как се компилира PHP с поддръжка на PostgreSQL]). Възможно е все още да има грешки, затова не се препоръчва да се използва в общодостъпна среда.', + 'config-support-sqlite' => '* $1 е лека система за база от данни, която е много добре поддържана. ([http://www.php.net/manual/en/pdo.installation.php Как се компилира PHP с поддръжка на SQLite], използва PDO)', + 'config-support-oracle' => '* $1 е комерсиална корпоративна база от данни. ([http://www.php.net/manual/en/oci8.installation.php Как се компилира PHP с поддръжка на OCI8])', + 'config-header-mysql' => 'Настройки за MySQL', + 'config-header-postgres' => 'Настройки за PostgreSQL', + 'config-header-sqlite' => 'Настройки за SQLite', + 'config-header-oracle' => 'Настройки за Oracle', + 'config-invalid-db-type' => 'Невалиден тип база от данни', + 'config-missing-db-name' => 'Необходимо е да се въведе стойност за "Име на базата от данни"', + 'config-missing-db-host' => 'Необходимо е да се въведе стойност за "Хост на базата от данни"', + 'config-invalid-db-name' => 'Невалидно име на базата от данни "$1". +Използват се само ASCII букви (a-z, A-Z), цифри (0-9), долни черти (_) и тирета (-).', + 'config-invalid-db-prefix' => 'Невалидна представка за базата от данни "$1". +Позволени са само ASCII букви (a-z, A-Z), цифри (0-9), долни черти (_) и тирета (-).', + 'config-connection-error' => '$1. + +Необходимо е да се проверят хостът, потребителското име и паролата, след което да се опита отново.', + 'config-invalid-schema' => 'Невалидна схема за МедияУики "$1". +Допустими са само ASCII букви (a-z, A-Z), цифри (0-9) и долни черти (_).', + 'config-db-sys-create-oracle' => 'Инсталаторът поддържа само сметка SYSDBA за създаване на нова сметка.', + 'config-db-sys-user-exists-oracle' => 'Потребителската сметка "$1" вече съществува. SYSDBA може да се използва само за създаване на нова сметка!', + 'config-postgres-old' => 'Изисква се PostgreSQL $1 или по-нова версия, наличната версия е $2.', + 'config-sqlite-name-help' => 'Избира се име, което да идентифицира уикито. +Не се използват интервали или тирета. +Това име ще се използва за име на файла за данни на SQLite.', + 'config-sqlite-mkdir-error' => 'Грешка при създаване на директорията за данни "$1". +Проверете местоположението ѝ и опитайте отново.', + 'config-sqlite-readonly' => 'Файлът $1 няма права за писане.', + 'config-sqlite-cant-create-db' => 'Файлът за базата от данни $1 не може да бъде създаден.', + 'config-sqlite-fts3-downgrade' => 'Липсва поддръжката на FTS3 за PHP, извършен беше downgradе на таблиците', + 'config-can-upgrade' => "В базата от данни има таблици за МедияУики. +За надграждането им за MediaWiki $1, натиска се '''Продължаване'''.", + 'config-upgrade-done' => "Обновяването приключи. + +Вече е възможно [$1 да използвате уикито]. + +Ако е необходимо, възможно е файлът LocalSettings.php да бъде създаден отново чрез натискане на бутона по-долу. +Това '''не е препоръчително действие''', освен ако не срещате затруднения с уикито.", + 'config-upgrade-done-no-regenerate' => 'Обновяването приключи. + +Вече е възможно [$1 да използвате уикито].', + 'config-regenerate' => 'Създаване на LocalSettings.php →', + 'config-show-table-status' => 'Заявката SHOW TABLE STATUS не сполучи!', + 'config-unknown-collation' => "'''Предупреждение:''' Базата от данни използва неразпозната колация.", + 'config-db-web-account' => 'Сметка за уеб достъп до базата от данни', + 'config-db-web-help' => 'Избиране на потребителско име и парола, които уеб сървърът ще използва да се свързва с базата от данни при обичайната работа на уикито.', + 'config-db-web-account-same' => 'Използване на същата сметка като при инсталацията.', + 'config-db-web-create' => 'Създаване на сметката ако все още не съществува', + 'config-db-web-no-create-privs' => 'Посочената сметка за инсталацията не разполага с достатъчно права за създаване на нова сметка. +Необходимо е посочената сметка вече да съществува.', + 'config-mysql-engine' => 'Хранилище на данни:', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-engine-help' => "'''InnoDB''' почти винаги е най-добрата възможност заради навременната си поддръжка. + +'''MyISAM''' може да е по-бърза при инсталации с един потребител или само за четене. +Базите от данни MyISAM се повреждат по-често от InnoDB.", + 'config-mysql-charset' => 'Набор от символи в базата от данни:', + 'config-mysql-binary' => 'Бинарен', + 'config-mysql-utf8' => 'UTF-8', + 'config-mysql-charset-help' => "В '''бинарен режим''' МедияУики съхранява текстовете в UTF-8 в бинарни полета в базата от данни. +Това е по-ефективно от UTF-8 режима на MySQL и позволява използването на пълния набор от символи в Уникод. + +В '''UTF-8 режим''' MySQL ще знае в кой набор от символи са данните от уикито и ще може да ги показва и променя по подходящ начин, но няма да позволява складиране на символи извън [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Основния многоезичен набор].", + 'config-site-name' => 'Име на уикито:', + 'config-site-name-help' => 'Това име ще се показва в заглавната лента на браузъра и на различни други места.', + 'config-site-name-blank' => 'Необходимо е да се въведе име на уикито.', + 'config-project-namespace' => 'Именно пространство на проекта:', + 'config-ns-generic' => 'Проект', + 'config-ns-site-name' => 'Същото като името на уикито: $1', + 'config-ns-other' => 'Друго (уточняване)', + 'config-ns-other-default' => 'МоетоУики', + 'config-project-namespace-help' => 'Следвайки примера на Уикипедия, много уикита съхраняват страниците си с правила в "\'\'\'именно пространство на проекта\'\'\'", отделно от основното съдържание. +Всички заглавия на страниците в това именно пространство започват с определена представка, която може да бъде зададена тук. +Обикновено представката произлиза от името на уикито, но не може да съдържа символи като "#" или ":".', + 'config-ns-invalid' => 'Посоченото именно пространство "$1" е невалидно. +Необходимо е да бъде посочено друго.', + 'config-admin-box' => 'Администраторска сметка', + 'config-admin-name' => 'Потребителско име:', + 'config-admin-password' => 'Парола:', + 'config-admin-password-confirm' => 'Парола (повторно):', + 'config-admin-help' => 'Въвежда се предпочитаното потребителско име, например "Иванчо Иванчев". +Това ще е потребителското име, което администраторът ще използва за влизане в уикито.', + 'config-admin-name-blank' => 'Необходимо е да бъде въведено потребителско име на администратора.', + 'config-admin-name-invalid' => 'Посоченото потребителско име "$1" е невалидно. +Необходимо е да се посочи друго.', + 'config-admin-password-blank' => 'Неовходимо е да се въведе парола за администраторската сметка.', + 'config-admin-password-same' => 'Паролата не трябва да е същата като потребителското име.', + 'config-admin-password-mismatch' => 'Двете въведени пароли не съвпадат.', + 'config-admin-email' => 'Адрес за електронна поща:', + 'config-admin-email-help' => 'Въвеждането на адрес за е-поща позволява получаване на е-писма от другите потребители на уикито, възстановяване на изгубена или забравена парола, оповестяване при промени в страниците от списъка за наблюдение. Това поле може да бъде оставено празно.', + 'config-admin-error-user' => 'Възникна вътрешна грешка при създаване на администратор с името "$1".', + 'config-admin-error-password' => 'Възникна вътрешна грешка при задаване на парола за администратора "$1":
    $2
    ', + 'config-admin-error-bademail' => 'Въведен е невалиден адрес за електронна поща', + 'config-subscribe' => 'Абониране за [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce пощенския списък за нови версии].', + 'config-subscribe-help' => 'Това е пощенски списък с малко трафик, който се използва за съобщения при излизане на нови версии, както и за важни проблеми със сигурността. +Абонирането е препоръчително, както и надграждането на инсталацията на МедияУики при излизането на нова версия.', + 'config-almost-done' => 'Инсталацията е почти готова! +Възможно е пропускане на оставащата конфигурация и моментално инсталиране на уикито.', + 'config-optional-continue' => 'Задаване на допълнителни въпроси.', + 'config-optional-skip' => 'Достатъчно, инсталиране на уикито.', + 'config-profile' => 'Профил на потребителските права:', + 'config-profile-wiki' => 'Традиционно уики', + 'config-profile-no-anon' => 'Необходимо е създаване на сметка', + 'config-profile-fishbowl' => 'Само одобрени редактори', + 'config-profile-private' => 'Затворено уики', + 'config-profile-help' => "Уикитата функционират най-добре, когато позволяват на възможно най-много хора да ги редактират. +В МедияУики лесно се преглеждат последните промени и се възстановяват пораженип от недобронамерени потребители. + +Въпреки това мнозина смятат МедияУики за полезен софтуер по различни начини и често е трудно да се убедят всички от предимствата на уики модела. +Затова се предоставя възможност за избор. + +Уикитата от типа '''{{int:config-profile-wiki}}''' позволяват на всички потребители да редактират, дори и без регистрация. +Уикитата от типа '''{{int:config-profile-no-anon}}''' позволяват достъп до страниците и редактирането им само след създаване на потребителска сметка. + +Уики, което е '''{{int:config-profile-fishbowl}}''' позволява на всички да преглеждат страниците, но само предварително одобрени редактори могат да редактират съдържанието. +В '''{{int:config-profile-private}}''' само предварително одобрени потребители могат да четат и редактират съдържанието. + +Детайлно обяснение на конфигурациите на потребителските права е достъпно след инсталацията в [http://www.mediawiki.org/wiki/Manual:User_rights Наръчника за потребителски права].", + 'config-license' => 'Авторски права и лиценз:', + 'config-license-none' => 'Без лиценз', + 'config-license-cc-by-sa' => 'Криейтив Комънс Признание-Споделяне на споделеното', + 'config-license-cc-by-nc-sa' => 'Криейтив Комънс Признание-Некомерсиално-Споделяне на споделеното', + 'config-license-gfdl-old' => 'Лиценз за свободна документация на GNU 1.2', + 'config-license-gfdl-current' => 'Лиценз за свободна документация на GNU 1.3 или по-нов', + 'config-license-pd' => 'Обществено достояние', + 'config-license-cc-choose' => 'Избиране на друг лиценз от Криейтив Комънс', + 'config-license-help' => "Много публични уикита поставят всички приноси под [http://freedomdefined.org/Definition/Bg свободен лиценз]. +Това помага създаване на усещане за общност и насърчава дългосрочните приноси. +Това не е необходимо за частни или корпоративни уикита. + +Ако е необходимо да се използват текстове от Уикипедия, както и Уикипедия да може да използва текстове от уикито, необходимо е да се избере лиценз '''Криейтив Комънс Признание-Споделяне на споделеното'''. + +Лицензът за свободна документация на GNU е старият лиценз на съдържанието на Уикипедия. +Той все още е валиден лиценз, но някои негови условия правят по-сложни повторното използване и интерпретацията.", + 'config-email-settings' => 'Настройки за е-поща', + 'config-enable-email' => 'Разрешаване на изходящи е-писма', + 'config-enable-email-help' => 'За да работят възможностите за използване на е-поща, необходимо е [http://www.php.net/manual/en/mail.configuration.php настройките за поща на PHP] да бъдат конфигурирани правилно. +Ако няма да се използват услугите за е-поща в уикито, те могат да бъдат изключени тук.', + 'config-email-user' => 'Позволяване на потребителите да си изпращат е-писма през уикито', + 'config-email-user-help' => 'Позволяване на потребителите да си изпращат е-писма ако са разрешили това в настройките си.', + 'config-email-usertalk' => 'Оповестяване при промяна на потребителската беседа', + 'config-email-usertalk-help' => 'Позволява на потребителите да получават оповестяване при промяна на беседата им, ако това е разрешено в настройките им.', + 'config-email-watchlist' => 'Оповестяване за списъка за наблюдение', + 'config-email-watchlist-help' => 'Позволява на потребителите да получават оповестяване за техните наблюдавани страници, ако това е разрешено в настройките им.', + 'config-email-auth' => 'Потвърждаване на адреса за електронна поща', + 'config-email-auth-help' => "Ако тази настройка е включена, потребителите трябва да потвърдят адреса си за е-поща чрез препратка, която им се изпраща при настройване или промяна. +Само валидните адреси могат да получават е-писма от други потребители или да променят писмата за оповестяване. +Настройването на това е '''препоръчително''' за публични уикита заради потенциални злоупотреби с възможностите за електронна поща.", + 'config-email-sender' => 'Адрес за обратна връзка:', + 'config-email-sender-help' => 'Въвежда се адрес за електронна поща, който ще се използва за обратен адрес при изходящи е-писма. +Това е адресът, на който ще се получават върнатите и неполучени писма. +Много е-пощенски сървъри изискват поне домейн името да е валидно.', + 'config-upload-settings' => 'Картинки и качване на файлове', + 'config-upload-enable' => 'Позволяне качването на файлове', + 'config-upload-help' => 'Качването на файлове е възможно да доведе до пробели със сигурността на сървъра. +Повече информация по темата има в [http://www.mediawiki.org/wiki/Manual:Security раздела за сигурност] в Наръчника. + +За позволяване качването на файлове, необходимо е уебсървърът да може да записва в поддиректорията на МедияУики images. +След като това условие е изпълнено, функционалността може да бъде активирана.', + 'config-upload-deleted' => 'Директория за изтритите файлове:', + 'config-upload-deleted-help' => 'Избиране на директория, в която ще се складират изтритите файлове. +В най-добрия случай тя не трябва да е достъпна през уеб.', + 'config-logo' => 'Адрес на логото:', + 'config-logo-help' => 'Обликът по подразбиране на МедияУики вклчва място с размери 135х160 пиксела за лого в горния ляв ъгъл. +Ако има наличен файл с подходящ размер, неговият адрес може да бъде посочен тук. + +Ако не е необходимо лого, полето се оставя празно.', + 'config-instantcommons' => 'Включване на Instant Commons', + 'config-instantcommons-help' => '[http://www.mediawiki.org/wiki/InstantCommons Instant Commons] е функционалност, която позволява на уикитата да използват картинки, звуци и друга медиа от сайта на Уикимедия [http://commons.wikimedia.org/ Общомедия]. +За да е възможно това, МедияУики изисква достъп до Интернет. + +Повече информация за тази функционалност, както и инструкции за настройване за други уикита, различни от Общомедия, е налична в [http://mediawiki.org/wiki/Manual:$wgForeignFileRepos наръчника].', + 'config-cc-again' => 'Повторно избиране...', + 'config-advanced-settings' => 'Разширена конфигурация', + 'config-cache-options' => 'Настройки за обектното кеширане:', + 'config-cache-help' => 'Обектното кеширане се използва за подобряване на скоростта на МедияУики чрез кеширане на често използваните данни. +Силно препоръчително е на средните и големите сайтове да включат тази настройка, но малките също могат да се възползват от нея.', + 'config-cache-none' => 'Без кеширане (не се премахва от функционалността, но това влияе на скоростта на по-големи уикита)', + 'config-cache-accel' => 'PHP обектно кеширане (APC, eAccelerator, XCache или WinCache)', + 'config-cache-memcached' => 'Използване на Memcached (изисква допълнителни настройки и конфигуриране)', + 'config-memcached-servers' => 'Memcached сървъри:', + 'config-memcached-help' => 'Списък с IP адреси за използване за Memcached. +Необходимо е да бъдат разделени по един на ред, както и да е посочен порта. Пример: +127.0.0.1:11211 +192.168.1.25:1234', + 'config-memcache-needservers' => 'Избран е Memcached като складиращ тип, но не са посочени сървъри.', + 'config-memcache-badip' => 'Беше въведен невалиден IP адрес за Memcached: $1.', + 'config-extensions' => 'Разширения', + 'config-install-alreadydone' => "'''Предупреждение:''' Изглежда вече сте инсталирали МедияУики и се опитвате да го инсталирате отново. +Продължете към следващата страница.", + 'config-install-begin' => 'Инсталацията на МедияУики ще започне след натискане на бутона "{{int:config-continue}}". +Ако желаете да направите промени, натиснете Връщане.', + 'config-install-step-done' => 'готово', + 'config-install-step-failed' => 'неуспешно', + 'config-install-extensions' => 'Добавяне на разширенията', + 'config-install-database' => 'Създаване на базата от данни', + 'config-install-pg-schema-not-exist' => 'PostgreSQL схемата не съществува', + 'config-install-pg-schema-failed' => 'Създаването на таблиците пропадна. +Необходимо е потребител "$1" да има права за писане в схемата "$2".', + 'config-install-pg-plpgsql' => 'Проверяване за езика PL/pgSQL', + 'config-pg-no-plpgsql' => 'Необходимо е да се инсталира езикът PL/pgSQL в базата от данни $1', + 'config-pg-no-create-privs' => 'Посочената сметка за инсталацията не притежава достатъчно права за създаване на сметка.', + 'config-install-user' => 'Създаване на потребител за базата от данни', + 'config-install-user-alreadyexists' => 'Потребител „$1“ вече съществува', + 'config-install-user-create-failed' => 'Създаването на потребител „$1“ беше неуспешно: $2', + 'config-install-user-grant-failed' => 'Предоставянето на права на потребител "$1" беше неуспешно: $2', + 'config-install-tables' => 'Създаване на таблиците', + 'config-install-tables-exist' => "'''Предупреждение''': Таблиците за МедияУики изглежда вече съществуват. +Пропускане на създаването им.", + 'config-install-tables-failed' => "'''Грешка''': Създаването на таблиците пропадна и върна следната грешка: $1", + 'config-install-interwiki' => 'Попълване на таблицата с междууикитата по подразбиране', + 'config-install-interwiki-list' => 'Файлът interwiki.list не можа да бъде открит.', + 'config-install-interwiki-exists' => "'''Предупреждение''': Таблицата с междууикита изглежда вече съдържа данни. +Пропускане на списъка по подразбиране.", + 'config-install-stats' => 'Инициализиране на статистиките', + 'config-install-keys' => 'Генериране на таен ключ', + 'config-insecure-keys' => "'''Предупреждение:''' {{PLURAL:$2|Сигурният ключ, създаден по време на инсталацията, не е напълно надежден|Сигурните ключове, създадени по време на инсталацията, не са напълно надеждни}} $1 . Обмислете да {{PLURAL:$2|го|ги}} смените ръчно.", + 'config-install-sysop' => 'Създаване на администраторска сметка', + 'config-install-subscribe-fail' => 'Невъзможно беше абонирането за mediawiki-announce', + 'config-install-mainpage' => 'Създаване на Началната страница със съдържание по подразбиране', + 'config-install-extension-tables' => 'Създаване на таблици за включените разширения', + 'config-install-mainpage-failed' => 'Вмъкването на Началната страница беше невъзможно: $1', + 'config-install-done' => "'''Поздравления!''' +Инсталирането на МедияУики приключи успешно. + +Инсталаторът създаде файл LocalSettings.php. +Той съдържа всичката необходима основна конфигурация на уикито. + +Необходимо е той да бъде изтеглен и поставен в основната директория на уикито (директорията, в която е и index.php). Изтеглянето би трябвало да започне автоматично. + +Ако изтеглянето не започне автоматично или е било прекратено, файлът може да бъде изтеглен чрез щракване на препратката по-долу: + +$3 + +'''Забележка''': Ако това не бъде извършено сега, генерираният конфигурационен файл няма да е достъпен на по-късен етап ако не бъде изтеглен сега или инсталацията приключи без изтеглянето му. + +Когато файлът вече е в основната директория, '''[$2 уикито ще е достъпно на този адрес]'''.", + 'config-download-localsettings' => 'Изтегляне на LocalSettings.php', + 'config-help' => 'помощ', +); + +/** Breton (Brezhoneg) + * @author Fohanno + * @author Fulup + * @author Gwendal + * @author Y-M D + */ +$messages['br'] = array( + 'config-desc' => 'Poellad staliañ MediaWIki', + 'config-title' => 'Staliadur MediaWiki $1', + 'config-information' => 'Titouroù', + 'config-localsettings-upgrade' => 'Kavet ez eus bet ur restr LocalSettings.php. +Evit hizivaat ar staliadur-se, merkit an talvoud $wgUpgradeKey er voest dindan. +E gavout a rit e LocalSettings.php.', + 'config-localsettings-cli-upgrade' => 'Dinoet ez eus bet ur restr LocalSettings.php. +Evit lakaat ar staliadur-mañ a-live, implijit --upgrade=yes, mar plij.', + 'config-localsettings-key' => "Alc'hwez hizivaat :", + 'config-localsettings-badkey' => "Direizh eo an alc'hwez merket ganeoc'h", + 'config-upgrade-key-missing' => 'Kavet ez eus bet ur staliadur kent eus MediaWiki. +Evit hizivaat ar staliadur-se, ouzhpennit al linenn da-heul e traoñ ho restr LocalSettings.php: + +$1', + 'config-localsettings-incomplete' => "Diglok e seblant bezañ ar restr LocalSettings.php zo anezhi dija. +An argemmenn $1 n'eo ket termenet. +Kemmit LocalSettings.php evit ma vo termenet an argemmenn-se, ha klikit war « Kenderc'hel ».", + 'config-localsettings-connection-error' => "C'hoarvezet ez eus ur fazi en ur gevreañ ouzh an diaz roadennoù oc'h implijout an arventennoù diferet e LocalSettings.php pe AdminSettings.php. Reizhit an arventennoù-se hag esaeit en-dro. + +$1", + 'config-session-error' => "Fazi e-ser loc'hañ an dalc'h : $1", + 'config-no-session' => "Kolle teo bet roadennoù ho talc'h ! +Gwiriit ar restr php.ini ha bezit sur emañ staliet session.save_path en ur c'havlec'h a zere.", + 'config-your-language' => 'Ho yezh :', + 'config-your-language-help' => 'Dibabit ur yezh da implijout e-pad an argerzh staliañ.', + 'config-wiki-language' => 'Yezh ar wiki :', + 'config-wiki-language-help' => 'Diuzañ ar yezh a vo implijet ar muiañ er wiki.', + 'config-back' => '← Distreiñ', + 'config-continue' => "Kenderc'hel →", + 'config-page-language' => 'Yezh', + 'config-page-welcome' => 'Degemer mat e MediaWiki !', + 'config-page-dbconnect' => "Kevreañ d'an diaz roadennoù", + 'config-page-upgrade' => 'Hizivaat ar staliadur a zo dioutañ', + 'config-page-dbsettings' => 'Arventennoù an diaz roadennoù', + 'config-page-name' => 'Anv', + 'config-page-options' => 'Dibarzhioù', + 'config-page-install' => 'Staliañ', + 'config-page-complete' => 'Graet !', + 'config-page-restart' => 'Adlañsañ ar staliadur', + 'config-page-readme' => 'Lennit-me', + 'config-page-releasenotes' => 'Notennoù stumm', + 'config-page-copying' => 'O eilañ', + 'config-page-upgradedoc' => 'O hizivaat', + 'config-page-existingwiki' => 'Wiki zo anezhañ dija', + 'config-help-restart' => "Ha c'hoant hoc'h eus da ziverkañ an holl roadennoù hoc'h eus ebarzhet ha da adlañsañ an argerzh staliañ ?", + 'config-restart' => "Ya, adloc'hañ anezhañ", + 'config-welcome' => "=== Gwiriadennoù a denn d'an endro === +Rekis eo un nebeud gwiriadennoù diazez da welet hag azas eo an endro evit gallout staliañ MediaWiki. +Dleout a rafec'h merkañ disoc'hoù ar gwiriadennoù-se m'hoc'h eus ezhomm skoazell e-pad ar staliadenn.", + 'config-sidebar' => '* [http://www.mediawiki.org MediaWiki Degemer] +* [http://www.mediawiki.org/wiki/Help:Contents Pajenn-stur an implijer] +* [http://www.mediawiki.org/wiki/Manual:Contents Pajenn-stur ar merour] +* [http://www.mediawiki.org/wiki/Manual:FAQ FAG]', + 'config-env-good' => 'Gwiriet eo bet an endro. +Gallout a rit staliañ MediaWiki.', + 'config-env-bad' => "Gwiriet eo bet an endro. +Ne c'hallit ket staliañ MediaWiki.", + 'config-env-php' => 'Staliet eo PHP $1.', + 'config-env-php-toolow' => "Staliet eo PHP $1. +Nemet eo rekis PHP $2 pe nevesoc'h evit MediaWiki.", + 'config-unicode-using-utf8' => "Oc'h implijout utf8_normalize.so gant Brion Vibber evit ar reolata Unicode.", + 'config-unicode-using-intl' => "Oc'h implijout [http://pecl.php.net/intl an astenn PECL intl] evit ar reolata Unicode.", + 'config-no-db' => "Ne c'haller ket kavout ur sturier diaz roadennoù dereat !", + 'config-ze1' => "'''Fazi diremed : [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mod] zo gweredekaet !''' +An dibarzh-mañ zo kaoz da zrein euzhus gant MediaWiki. +Ne c'hallit ket staliañ nag implijout MediaWiki keit ha m'eo gweredekaet an dibarzh-mañ.", + 'config-memory-raised' => 'memory_limit ar PHP zo $1, kemmet e $2.', + 'config-memory-bad' => "'''Diwallit :''' Da $1 emañ arventenn memory_limit PHP. +Re izel eo moarvat. +Marteze e c'hwito ar staliadenn !", + 'config-xcache' => 'Staliet eo [http://trac.lighttpd.net/xcache/ XCache]', + 'config-apc' => 'Staliet eo [http://www.php.net/apc APC]', + 'config-eaccel' => 'Staliet eo [http://eaccelerator.sourceforge.net/ eAccelerator]', + 'config-wincache' => 'Staliet eo [http://www.iis.net/download/WinCacheForPhp WinCache]', + 'config-diff3-bad' => "N'eo ket bet kavet GNU diff3.", + 'config-no-uri' => "'''Fazi :''' N'eus ket tu da anavezout URI ar skript red. +Staliadur nullet.", + 'config-db-type' => 'Doare an diaz roadennoù :', + 'config-db-host' => 'Anv implijer an diaz roadennoù :', + 'config-db-host-oracle' => 'TNS an diaz roadennoù :', + 'config-db-wiki-settings' => 'Anavezout ar wiki-mañ', + 'config-db-name' => 'Anv an diaz roadennoù :', + 'config-db-name-oracle' => 'Brastres diaz roadennoù :', + 'config-db-install-account' => 'Kont implijer evit ar staliadur', + 'config-db-username' => 'Anv implijer an diaz roadennoù :', + 'config-db-password' => 'Ger-tremen an diaz roadennoù :', + 'config-db-install-username' => "Ebarzhit an anv implijer a vo implijet da gevreañ ouzh an diaz roadennoù e-pad an argerzh staliañ. +N'eo ket anv implijer ar gont MediaWiki, an anv implijer evit ho tiaz roadennoù eo.", + 'config-db-install-password' => "Ebarzhit ar ger-tremen a vo implijet da gevreañ ouzh an diaz roadennoù e-pad an argerzh staliañ. +N'eo ket ar ger-tremen evit ar gont MediaWiki, ar ger-tremen evit ho tiaz roadennoù eo.", + 'config-db-install-help' => 'Merkañ anv an implijer hag ar ger-tremen a vo implijet evit kevreañ ouzh an diaz roadennoù e-pad an argerzh staliañ.', + 'config-db-account-lock' => 'Implijout ar memes anv implijer ha ger-tremen e-kerzh oberiadurioù boutin', + 'config-db-wiki-account' => 'Kont implijer evit oberiadurioù boutin', + 'config-db-prefix' => 'Rakrann taolennoù an diaz roadennoù :', + 'config-db-charset' => 'Strobad arouezennoù an diaz roadennoù', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binarel', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 kilkenglotus UTF-8', + 'config-mysql-old' => "Rekis eo MySQL $1 pe ur stumm nevesoc'h; ober a rit gant $2.", + 'config-db-port' => 'Porzh an diaz roadennoù :', + 'config-db-schema' => 'Brastres evit MediaWiki', + 'config-sqlite-dir' => "Kavlec'h roadennoù SQLite :", + 'config-oracle-def-ts' => 'Esaouenn stokañ ("tablespace") dre ziouer :', + 'config-oracle-temp-ts' => "Esaouenn stokañ (''tablespace'') da c'hortoz :", + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Oracle', + 'config-support-info' => "Skoret eo ar reizhiadoù diaz titouroù da-heul gant MediaWiki : + +$1 + +Ma ne welit ket amañ dindan ar reizhiad diaz titouroù a fell deoc'h ober ganti, heuilhit an titouroù a-us (s.o. al liammoù) evit gweredekaat ar skorañ.", + 'config-support-mysql' => '* $1 eo an dibab kentañ evit MediaWiki hag an hini skoret ar gwellañ ([http://www.php.net/manual/en/mysql.installation.php penaos kempunañ PHP gant skor MySQL])', + 'config-support-postgres' => "* $1 zo ur reizhiad diaz titouroù brudet ha digor hag a c'hall ober evit MySQL ([http://www.php.net/manual/en/pgsql.installation.php penaos kempunañ PHP gant skor PostgreSQL])", + 'config-support-sqlite' => "* $1 zo ur reizhiad diaz titouroù skañv skoret eus ar c'hentañ. ([http://www.php.net/manual/en/pdo.installation.php Penaos kempunañ PHP gant skor SQLite], implijout a ra PDO)", + 'config-support-oracle' => '* $1 zo un diaz titouroù kenwerzhel. ([http://www.php.net/manual/en/oci8.installation.php Penaos kempunañ PHP gant skor OCI8])', + 'config-header-mysql' => 'Arventennoù MySQL', + 'config-header-postgres' => 'Arventennoù PostgreSQL', + 'config-header-sqlite' => 'Arventennoù SQLite', + 'config-header-oracle' => 'Arventennoù Oracle', + 'config-invalid-db-type' => 'Direizh eo ar seurt diaz roadennoù', + 'config-missing-db-name' => 'Ret eo deoc\'h merkañ un dalvoudenn evit "Anv an diaz titouroù"', + 'config-missing-db-host' => 'Ret eo deoc\'h merkañ un dalvoudenn evit "Ostiz an diaz titouroù"', + 'config-missing-db-server-oracle' => 'Ret eo deoc\'h merkañ un dalvoudenn evit "Anv TNS an diaz titouroù"', + 'config-invalid-db-server-oracle' => 'Direizh eo anv TNS an diaz titouroù "$1". +Ober hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9), arouezennoù islinennañ (_) ha pikoù (.).', + 'config-invalid-db-name' => 'Direizh eo anv an diaz titouroù "$1". +Ober hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9), arouezennoù islinennañ (_) ha tiredoù (-).', + 'config-invalid-db-prefix' => 'Direizh eo rakger an diaz titouroù "$1". +Ober hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9), arouezennoù islinennañ (_) ha tiredoù (-).', + 'config-connection-error' => '$1. + +Gwiriit anv an ostiz, an anv implijer, ar ger-tremen ha klaskit en-dro.', + 'config-invalid-schema' => 'Chema direizh evit MediaWiki "$1". +Grit hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9) hag arouezennoù islinennañ (_).', + 'config-postgres-old' => "Rekis eo PostgreSQL $1 pe ur stumm nevesoc'h; ober a rit gant $2.", + 'config-sqlite-mkdir-error' => 'Ur fazi zo bet e-ser krouiñ ar c\'havlec\'h roadennoù "$1". +Gwiriañ al lec\'hiadur ha klask en-dro.', + 'config-sqlite-readonly' => "N'haller ket skrivañ er restr $1.", + 'config-sqlite-cant-create-db' => "N'haller ket krouiñ restr an diaz roadennoù $1.", + 'config-upgrade-done-no-regenerate' => 'Hizivadenn kaset da benn. + +Gallout a rit [$1 kregiñ da implijout ho wiki].', + 'config-regenerate' => 'Adgenel LocalSettings.php →', + 'config-show-table-status' => "C'hwitet ar reked SHOW TABLE STATUS !", + 'config-db-web-account' => 'Kont an diaz roadennoù evit ar voned Kenrouedad', + 'config-db-web-account-same' => 'Ober gant an hevelep kont hag an hini implijet evit ar staliañ', + 'config-db-web-create' => "Krouiñ ar gont ma n'eus ket anezhi c'hoazh", + 'config-mysql-engine' => 'Lusker stokañ :', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-charset' => 'Strobad arouezennoù an diaz roadennoù :', + 'config-mysql-binary' => 'Binarel', + 'config-mysql-utf8' => 'UTF-8', + 'config-site-name' => 'Anv ar wiki :', + 'config-site-name-blank' => "Lakait anv ul lec'hienn .", + 'config-project-namespace' => 'Esaouenn anv ar raktres :', + 'config-ns-generic' => 'Raktres', + 'config-ns-site-name' => 'Hevelep anv hag hini ar wiki : $1', + 'config-ns-other' => 'All (spisaat)', + 'config-ns-other-default' => 'MaWiki', + 'config-admin-box' => 'Kont merour', + 'config-admin-name' => "Hoc'h anv :", + 'config-admin-password' => 'Ger-tremen :', + 'config-admin-password-confirm' => 'Adskrivañ ar ger-tremen :', + 'config-admin-help' => 'Merkit hoc\'h anv implijer amañ, da skouer "Yann Vlog". +Hemañ eo an anv a implijot evit kevreañ d\'ar wiki-mañ.', + 'config-admin-name-blank' => 'Lakait anv ur merour.', + 'config-admin-name-invalid' => 'Direizh eo an anv implijer diferet « $1 ». +Diferit un anv implijer all.', + 'config-admin-password-blank' => 'Reiñ ur ger-tremen evit kont ar merour.', + 'config-admin-password-same' => "Ne c'hall ket ar ger-tremen bezañ heñvel ouzh anv ar gont.", + 'config-admin-password-mismatch' => "Ne glot ket ar gerioù-tremen hoc'h eus merket an eil gant egile.", + 'config-admin-email' => "Chomlec'h postel :", + 'config-admin-email-help' => "Merkit ur chomlec'h postel amañ evit gallout resev posteloù a-berzh implijerien all eus ar wiki, adderaouekaat ho ker-tremen ha bezañ kelaouet eus ar c'hemmoù degaset d'ar pajennoù zo en ho roll evezhiañ.", + 'config-admin-error-user' => 'Fazi diabarzh en ur grouiñ ur merer gant an anv "$1".', + 'config-admin-error-password' => 'Fazi diabarzh o lakaat ur ger-tremen evit ar merour « $1 » :
    $2
    ', + 'config-admin-error-bademail' => "Ebarzhet hoc'h eus ur chomlec'h postel direizh.", + 'config-subscribe' => 'Koumanantit da [https://lists.wikimedia.org/mailman/listinfo/mediawiki-listenn kemennadoù evit ar stummoù nevez].', + 'config-almost-done' => "Kazi echu eo ! +Gellout a rit tremen ar c'hefluniadur nevez ha staliañ ar wiki war-eeun.", + 'config-optional-continue' => "Sevel muioc'h a goulennoù ouzhin.", + 'config-optional-skip' => 'Aet on skuizh, staliañ ar wiki hepken.', + 'config-profile' => 'Profil ar gwirioù implijer :', + 'config-profile-wiki' => 'Wiki hengounel', + 'config-profile-no-anon' => 'Krouidigezh ur gont ret', + 'config-profile-fishbowl' => 'Embanner aotreet hepken', + 'config-profile-private' => 'Wiki prevez', + 'config-license' => 'Copyright hag aotre-implijout:', + 'config-license-none' => 'Aotre ebet en traoñ pajenn', + 'config-license-gfdl-old' => 'Aotre implijout teuliaouiñ frank GNU 1.2', + 'config-license-gfdl-current' => "Aotre implijout teuliaouiñ frank GNU 1.3 pe nevesoc'h", + 'config-license-pd' => 'Domani foran', + 'config-license-cc-choose' => 'Dibabit un aotre-implijout Creative Commons personelaet', + 'config-email-settings' => 'Arventennoù ar postel', + 'config-enable-email' => 'Gweredekaat ar posteloù a ya kuit', + 'config-email-user' => 'Gweredekaat ar posteloù a implijer da implijer', + 'config-email-user-help' => "Aotren a ra an holl implijerien da gas posteloù an eil d'egile mard eo bet gweredekaet an arc'hwel ganto en ho penndibaboù.", + 'config-email-watchlist' => "Gweredekaat ar c'hemenn listenn evezhiañ", + 'config-email-auth' => 'Gweredekaat an dilesadur dre bostel', + 'config-email-sender' => "Chomlec'h postel respont :", + 'config-email-sender-help' => "Merkit ar chomlec'h postel da vezañ implijet da chomlec'h distreiñ ar posteloù a ya er-maez. +Di e vo kaset ar posteloù distaolet. +Niverus eo ar servijerioù postel a c'houlenn da nebeutañ un [http://fr.wikipedia.org/wiki/Nom_de_domaine anv domani] reizh.", + 'config-upload-settings' => 'Pellgargañ skeudennoù ha restroù', + 'config-upload-enable' => 'Gweredekaat ar pellgargañ restroù', + 'config-upload-deleted' => "Kavlec'h evit ar restroù dilamet :", + 'config-logo' => 'URL al logo :', + 'config-instantcommons' => "Gweredekaat ''InstantCommons''", + 'config-cc-again' => 'Dibabit adarre...', + 'config-advanced-settings' => 'Kefluniadur araokaet', + 'config-cache-accel' => 'Krubuilhañ traezoù PHP (APC, eAccelerator, XCache pe WinCache)', + 'config-cache-memcached' => 'Implijout Memcached (en deus ezhomm bezañ staliet ha kefluniet)', + 'config-memcached-servers' => 'Servijerioù Memcached :', + 'config-memcached-help' => "Roll ar chomlec'hioù IP da implijout evit Memcached. +Ret eo dispartiañ anezho gant virgulennoù ha diferañ ar porzh da implijout (da skouer : 127.0.0.1:11211, 192.168.1.25:11211).", + 'config-extensions' => 'Astennoù', + 'config-install-alreadydone' => "'''Diwallit''': Staliet hoc'h eus MediaWiki dija war a seblant hag emaoc'h o klask e staliañ c'hoazh. +Kit d'ar bajenn war-lerc'h, mar plij.", + 'config-install-step-done' => 'graet', + 'config-install-step-failed' => "c'hwitet", + 'config-install-extensions' => 'En ur gontañ an astennoù', + 'config-install-database' => 'Krouiñ an diaz roadennoù', + 'config-install-pg-schema-failed' => "C'hwitet eo krouidigezh an taolennoù. +Gwiriit hag-eñ e c'hall an implijer « $1 » skrivañ er brastres « $2 ».", + 'config-install-pg-commit' => "O wiriekaat ar c'hemmoù", + 'config-install-pg-plpgsql' => 'O wiriañ ar yezh PL/pgSQL', + 'config-pg-no-plpgsql' => "Ret eo deoc'h staliañ ar yezh PL/pgSQL en diaz roadennoù $1", + 'config-install-user' => 'O krouiñ an diaz roadennoù implijer', + 'config-install-tables' => 'Krouiñ taolennoù', + 'config-install-tables-failed' => "'''Fazi :''' c'hwitet eo krouidigezh an daolenn gant ar fazi-mañ : $1", + 'config-install-interwiki-list' => "Ne c'haller ket kavout ar restr interwiki.list.", + 'config-install-stats' => 'O sevel ar stadegoù', + 'config-install-keys' => "Genel an alc'hwez kuzh", + 'config-install-sysop' => 'Krouidigezh kont ar merour', + 'config-install-subscribe-fail' => "Ne c'haller ket koumanantiñ da mediawiki-announce", + 'config-install-mainpage' => "O krouiñ ar bajenn bennañ gant un endalc'had dre ziouer", + 'config-install-mainpage-failed' => "Ne c'haller ket ensoc'hañ ar bajenn bennañ: $1", + 'config-download-localsettings' => 'Pellgargañ LocalSettings.php', + 'config-help' => 'skoazell', +); + +/** Bosnian (Bosanski) + * @author CERminator + */ +$messages['bs'] = array( + 'config-desc' => 'Instalacija za MediaWiki', + 'config-title' => 'MediaWiki $1 instalacija', + 'config-information' => 'Informacija', + 'config-localsettings-upgrade' => 'Otkrivena je datoteka LocalSettings.php. +Da biste unaprijedili vaš softver, molimo vas upišite vrijednost od $wgUpgradeKey u okvir ispod. +Naći ćete ga u LocalSettings.php.', + 'config-localsettings-key' => 'Ključ za nadgradnju:', + 'config-session-error' => 'Greška pri pokretanju sesije: $1', + 'config-no-session' => 'Vaši podaci sesije su izgubljeni! +Provjerite vaš php.ini i provjerite da li je session.save_path postavljen na pravilni direktorijum.', + 'config-your-language' => 'Vaš jezik:', + 'config-your-language-help' => 'Odaberite jezik koji ćete koristiti tokom procesa instalacije.', + 'config-wiki-language' => 'Wiki jezik:', + 'config-wiki-language-help' => 'Odaberite jezik na kojem će wiki biti najvećim dijelim pisana.', + 'config-back' => '← Nazad', + 'config-continue' => 'Nastavi →', + 'config-page-language' => 'Jezik', + 'config-page-welcome' => 'Dobrodošli u MediaWiki!', + 'config-page-dbconnect' => 'Poveži sa bazom podataka', + 'config-page-upgrade' => 'Unaprijedi postojeću instalaciju', + 'config-page-dbsettings' => 'Postavke baze podataka', + 'config-page-name' => 'Naziv', + 'config-page-options' => 'Opcije', + 'config-page-install' => 'Instaliraj', + 'config-page-complete' => 'Završeno!', + 'config-page-restart' => 'Ponovi instalaciju ispočetka', + 'config-page-readme' => 'Pročitaj me', + 'config-page-releasenotes' => 'Bilješke izdanja', + 'config-page-copying' => 'Kopiram', + 'config-page-upgradedoc' => 'Nadograđujem', + 'config-help-restart' => 'Da li želite očistiti sve spremljene podatke koje ste unijeli i da započnete ponovo proces instalacije?', + 'config-restart' => 'Da, pokreni ponovo', + 'config-sidebar' => '* [http://www.mediawiki.org MediaWiki Početna strana] +* [http://www.mediawiki.org/wiki/Help:Contents Vodič za korisnike] +* [http://www.mediawiki.org/wiki/Manual:Contents Vodič za administratore] +* [http://www.mediawiki.org/wiki/Manual:FAQ NPP] +---- +* Pročitaj me +* Napomene izdanja +* Kopiranje +* Poboljšavanje', + 'config-env-good' => 'Okruženje je provjereno. +Možete instalirati MediaWiki.', + 'config-env-php' => 'PHP $1 je instaliran.', + 'config-no-db' => 'Nije mogao biti pronađen podgodan drajver za bazu podataka!', + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] je instaliran', + 'config-apc' => '[http://www.php.net/apc APC] je instaliran', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] je instaliran', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] je instaliran', + 'config-diff3-bad' => 'GNU diff3 nije pronađen.', + 'config-db-name' => 'Naziv baze podataka:', + 'config-db-name-oracle' => 'Šema baze podataka:', + 'config-header-mysql' => 'Postavke MySQL', + 'config-header-postgres' => 'Postavke PostgreSQL', + 'config-header-sqlite' => 'Postavke SQLite', + 'config-header-oracle' => 'Postavke Oracle', + 'config-invalid-db-type' => 'Nevaljana vrsta baze podataka', + 'config-upgrade-done' => "Nadogradnja završena. + +Sada možete [$1 početi koristiti vašu wiki]. + +Ako želite regenerisati vašu datoteku LocalSettings.php, kliknite na dugme ispod. +Ovo '''nije preporučeno''' osim ako nemate problema s vašom wiki.", + 'config-admin-name' => 'Vaše ime:', + 'config-admin-password' => 'Šifra:', +); + +/** Chechen (Нохчийн) + * @author Sasan700 + */ +$messages['ce'] = array( + 'config-no-fts3' => "'''Тергам бе''': SQLite гулйина хуттург йоцуш [http://sqlite.org/fts3.html FTS3] — лахар болхбеш хир дац оцу бухца.", +); + +/** Czech (Česky) */ +$messages['cs'] = array( + 'config-information' => 'Informace', + 'config-continue' => 'Pokračovat →', + 'config-page-language' => 'Jazyk', + 'config-page-name' => 'Název', + 'config-page-options' => 'Nastavení', + 'config-page-install' => 'Instalovat', + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Věštba', + 'config-admin-name' => 'Vaše jméno:', + 'config-admin-email' => 'E-mailová adresa:', + 'config-email-settings' => 'Nastavení e-mailu', + 'config-install-step-failed' => 'selhaly', +); + +/** German (Deutsch) + * @author Kghbln + * @author LWChris + * @author Purodha + * @author The Evil IP address + * @author Umherirrender + */ +$messages['de'] = array( + 'config-desc' => 'Das MediaWiki-Installationsprogramm', + 'config-title' => 'Installation von MediaWiki $1', + 'config-information' => 'Informationen', + 'config-localsettings-upgrade' => 'Eine Datei LocalSettings.php wurde gefunden. +Um die vorhandene Installation aktualisieren zu können, muss der Wert des Parameters $wgUpgradeKey im folgenden Eingabefeld angegeben werden. +Der Parameterwert befindet sich in der Datei LocalSettings.php.', + 'config-localsettings-cli-upgrade' => 'Eine Datei LocalSettings.php wurde gefunden. +Um die vorhandene Installation zu aktualisieren, muss die Datei update.php ausgeführt werden.', + 'config-localsettings-key' => 'Aktualisierungsschlüssel:', + 'config-localsettings-badkey' => 'Der angegebene Aktualisierungsschlüssel ist falsch.', + 'config-upgrade-key-missing' => 'Eine MediaWiki-Installation wurde gefunden. +Um die vorhandene Installation aktualisieren zu können, muss die unten angegebene Codezeile in die Datei LocalSettings.php an deren Ende eingefügt werden: + +$1', + 'config-localsettings-incomplete' => 'Die vorhandene Datei LocalSettings.php scheint unvollständig zu sein. +Die Variable $1 wurde nicht definiert. +Die Datei LocalSettings.php muss entsprechend geändert werden, so dass sie definiert ist. Klicke danach auf „Weiter“.', + 'config-localsettings-connection-error' => 'Beim Verbindungsversuch zur Datenbank ist, unter Verwendung der in den Dateien LocalSettings.php oder AdminSettings.php hinterlegten Einstellungen, ein Fehler aufgetreten. Diese Einstellungen müssen korrigiert werden. Danach kann ein erneuter Versuch unternommen werden. + +$1', + 'config-session-error' => 'Fehler beim Starten der Sitzung: $1', + 'config-session-expired' => 'Die Sitzungsdaten scheinen abgelaufen zu sein. +Sitzungen sind für einen Zeitraum von $1 konfiguriert. +Dieser kann durch Anhebung des Parameters session.gc_maxlifetime in der Datei php.ini erhöht werden. +Den Installationsvorgang erneut starten.', + 'config-no-session' => 'Die Sitzungsdaten sind verloren gegangen! +Die Datei php.ini muss geprüft und es muss dabei sichergestellt werden, dass der Parameter session.save_path auf das richtige Verzeichnis verweist.', + 'config-your-language' => 'Sprache:', + 'config-your-language-help' => 'Bitte die Sprache auswählen, die während des Installationsvorgangs verwendet werden soll.', + 'config-wiki-language' => 'Sprache des Wikis:', + 'config-wiki-language-help' => 'Bitte die Hauptbearbeitungssprache des Wikis auswählen', + 'config-back' => '← Zurück', + 'config-continue' => 'Weiter →', + 'config-page-language' => 'Sprache', + 'config-page-welcome' => 'Willkommen bei MediaWiki!', + 'config-page-dbconnect' => 'Mit der Datenbank verbinden', + 'config-page-upgrade' => 'Eine vorhandene Installation aktualisieren', + 'config-page-dbsettings' => 'Datenbankeinstellungen', + 'config-page-name' => 'Name', + 'config-page-options' => 'Optionen', + 'config-page-install' => 'Installieren', + 'config-page-complete' => 'Fertig!', + 'config-page-restart' => 'Installationsvorgang erneut starten', + 'config-page-readme' => 'Lies mich', + 'config-page-releasenotes' => 'Versionsinfos (en)', + 'config-page-copying' => 'Kopie der Lizenz', + 'config-page-upgradedoc' => 'Aktualisiere', + 'config-page-existingwiki' => 'Vorhandenes Wiki', + 'config-help-restart' => 'Sollen alle bereits eingegebene Daten gelöscht und der Installationsvorgang erneut gestartet werden?', + 'config-restart' => 'Ja, erneut starten', + 'config-welcome' => '=== Prüfung der Installationsumgebung === +Basisprüfungen werden durchgeführt, um festzustellen, ob die Installationsumgebung für die Installation von MediaWiki geeignet ist. +Die Ergebnisse dieser Prüfung sollten angegeben werden, sofern während des Installationsvorgangs Hilfe benötigt und erfragt wird.', + 'config-copyright' => "=== Lizenz und Nutzungsbedingungen === + +$1 + +Dieses Programm ist freie Software, d. h. es kann, gemäß den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/ oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden. + +Dieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird, allerdings '''ohne jegliche Garantie''' und sogar ohne die implizierte Garantie einer '''Marktgängigkeit''' oder '''Eignung für einen bestimmten Zweck'''. Hierzu sind weitere Hinweise in der ''GNU General Public License'' enthalten. + +Eine Kopie der ''GNU General Public License'' sollte zusammen mit diesem Programm verteilt worden sein. Sofern dies nicht der Fall war, kann eine Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich angefordert oder auf deren Website [http://www.gnu.org/copyleft/gpl.html online gelesen] werden.", + 'config-sidebar' => '* [http://www.mediawiki.org Website von MediaWiki] +* [http://www.mediawiki.org/wiki/Help:Contents Nutzeranleitung] +* [http://www.mediawiki.org/wiki/Manual:Contents Administratorenanleitung] +* [http://www.mediawiki.org/wiki/Manual:FAQ Häufig gestellte Fragen] +---- +* Lies mich +* Versionsinformationen +* Lizenzbestimmungen +* Aktualisierung', + 'config-env-good' => 'Die Installationsumgebung wurde geprüft. +MediaWiki kann installiert werden.', + 'config-env-bad' => 'Die Installationsumgebung wurde geprüft. +MediaWiki kann nicht installiert werden.', + 'config-env-php' => 'PHP $1 ist installiert.', + 'config-env-php-toolow' => 'PHP $1 ist installiert. +Allerdings benötigt MediaWiki PHP $2 oder höher.', + 'config-unicode-using-utf8' => 'Zur Unicode-Normalisierung wird Brion Vibbers utf8_normalize.so eingesetzt.', + 'config-unicode-using-intl' => 'Zur Unicode-Normalisierung wird die [http://pecl.php.net/intl PECL-Erweiterung intl] eingesetzt.', + 'config-unicode-pure-php-warning' => "'''Warnung:''' Die [http://pecl.php.net/intl PECL-Erweiterung intl] ist für die Unicode-Normalisierung nicht verfügbar, so dass stattdessen die langsame pure-PHP-Implementierung genutzt wird. +Sofern eine Website mit großer Benutzeranzahl betrieben wird, sollten weitere Informationen auf der Webseite [http://www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode-Normalisierung (en)] gelesen werden.", + 'config-unicode-update-warning' => "'''Warnung:''' Die installierte Version des Unicode-Normalisierungswrappers nutzt einer ältere Version der Bibliothek [http://site.icu-project.org/ des ICU-Projekts]. +Diese sollte [http://www.mediawiki.org/wiki/Unicode_normalization_considerations aktualisiert] werden, sofern auf die Verwendung von Unicode Wert gelegt wird.", + 'config-no-db' => 'Es konnte kein adäquater Datenbanktreiber gefunden werden!', + 'config-no-db-help' => 'Es muss ein Datenbanktreiber für PHP installiert werden. +Die folgenden Datenbanksysteme werden unterstützt: $1 + +Sofern ein gemeinschaftlich genutzter Server für das Hosting verwendet wird, muss der Hoster gefragt werden einen adäquaten Datenbanktreiber zu installieren. +Sofern PHP selbst kompiliert wurde, muss es mit es neu konfiguriert werden, wobei der Datenbankclient zu aktivierten ist. Hierzu kann beispielsweise ./configure --with-mysql ausgeführt werden. +Sofern PHP über die Paketverwaltung einer Debian- oder Ubuntu-Installation installiert wurde, muss das „php5-mysql“-Paket nachinstalliert werden.', + 'config-no-fts3' => "'''Warnung:''' SQLite wurde ohne das [http://sqlite.org/fts3.html FTS3-Modul] kompiliert, so dass keine Suchfunktionen zur Verfügung stehen.", + 'config-register-globals' => "'''Warnung: Der Parameter [http://php.net/register_globals register_globals] von PHP ist aktiviert.''' +'''Sie sollte deaktiviert werden, sofern dies möglich ist.''' +Die MediaWiki-Installation wird zwar laufen, wobei aber der Server für potentielle Sicherheitsprobleme anfällig ist.", + 'config-magic-quotes-runtime' => "'''Fataler Fehler: Der Parameter [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] von PHP ist aktiviert!''' +Diese Einstellung führt zu unvorhersehbaren Problemen bei der Dateneingabe. +MediaWiki kann nicht installiert werden, solange dieser Parameter nicht deaktiviert wurde.", + 'config-magic-quotes-sybase' => "'''Fataler Fehler: Der Parameter [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] von PHP ist aktiviert!''' +Diese Einstellung führt zu unvorhersehbaren Problemen bei der Dateneingabe. +MediaWiki kann nicht installiert werden, solange dieser Parameter nicht deaktiviert wurde.", + 'config-mbstring' => "'''Fataler Fehler: Der Parameter [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] von PHP ist aktiviert!''' +Diese Einstellung verursacht Fehler und führt zu unvorhersehbaren Problemen bei der Dateneingabe. +MediaWiki kann nicht installiert werden, solange dieser Parameter nicht deaktiviert wurde.", + 'config-ze1' => "'''Fataler Fehler: Der Parameter [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] von PHP ist aktiviert!''' +Diese Einstellung führt zu großen Fehlern bei MediaWiki. +MediaWiki kann nicht installiert werden, solange dieser Parameter nicht deaktiviert wurde.", + 'config-safe-mode' => "'''Warnung:''' Der Funktion [http://www.php.net/features.safe-mode Safe Mode] von PHP ist aktiviert. +Dies kann zu Problemen führen, insbesondere wenn das Hochladen von Dateien möglich sein, bzw. der Auszeichner math genutzt werden soll.", + 'config-xml-bad' => 'Das XML-Modul von PHP fehlt. +MediaWiki benötigt Funktionen, die dieses Modul bereitstellt und wird in der bestehenden Konfiguration nicht funktionieren. +Sofern Mandriva genutzt wird, muss noch das „php-xml“-Paket installiert werden.', + 'config-pcre' => 'Das PHP-Modul für die PCRE-Unterstützung wurde nicht gefunden. +MediaWiki benötigt allerdings perl-kompatible reguläre Ausdrücke, um lauffähig zu sein.', + 'config-pcre-no-utf8' => "'''Fataler Fehler: Das PHP-Modul PCRE scheint ohne PCRE_UTF8-Unterstützung kompiliert worden zu sein.''' +MediaWiki benötigt die UTF-8-Unterstützung, um fehlerfrei lauffähig zu sein.", + 'config-memory-raised' => 'Der PHP-Parameter memory_limit betrug $1 und wurde auf $2 erhöht.', + 'config-memory-bad' => "'''Warnung:''' Der PHP-Parameter memory_limit beträgt $1. +Dieser Wert ist wahrscheinlich zu niedrig. +Der Installationsvorgang könnte daher scheitern!", + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] ist installiert', + 'config-apc' => '[http://www.php.net/apc APC] ist installiert', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] ist installiert', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] ist installiert', + 'config-no-cache' => "'''Warnung:''' [http://eaccelerator.sourceforge.net eAccelerator], [http://www.php.net/apc APC], [http://trac.lighttpd.net/xcache/ XCache] oder [http://www.iis.net/download/WinCacheForPhp WinCache] konnten nicht gefunden werden. +Das Objektcaching ist daher nicht aktiviert.", + 'config-diff3-bad' => 'GNU diff3 wurde nicht gefunden.', + 'config-imagemagick' => 'ImageMagick wurde gefunden: $1. +Miniaturansichten von Bildern werden möglich sein, sobald das Hochladen von Dateien aktiviert wurde.', + 'config-gd' => 'Die im System integrierte GD-Grafikbibliothek wurde gefunden. +Miniaturansichten von Bildern werden möglich sein, sobald das Hochladen von Dateien aktiviert wurde.', + 'config-no-scaling' => 'Weder die GD-Grafikbibliothek noch ImageMagick wurden gefunden. +Miniaturansichten von Bildern sind daher nicht möglich.', + 'config-no-uri' => "'''Fehler:''' Die aktuelle URL konnte nicht ermittelt werden. +Der Installationsvorgang wurde daher abgebrochen.", + 'config-uploads-not-safe' => "'''Warnung:''' Das Standardverzeichnis für hochgeladene Dateien $1 ist für die willkürliche Ausführung von Skripten anfällig. +Obwohl MediaWiki die hochgeladenen Dateien auf Sicherheitsrisiken überprüft, wird dennoch dringend empfohlen diese [http://www.mediawiki.org/wiki/Manual:Security#Upload_security Sicherheitslücke] zu schließen, bevor das Hochladen von Dateien aktiviert wird.", + 'config-brokenlibxml' => 'Das System nutzt eine Kombination aus PHP- und libxml2-Versionen, die fehleranfällig ist und versteckte Datenfehler bei MediaWiki und anderen Webanwendungen verursachen kann. +PHP muss auf Version 5.2.9 oder später sowie libxml2 auf die Version 2.7.3 oder später aktualisiert werden, um das Problem zu lösen. Installationsabbruch ([http://bugs.php.net/bug.php?id=45996 siehe hierzu die Fehlermeldung bei PHP]).', + 'config-using531' => 'MediaWiki kann nicht zusammen mit PHP $1 verwendet werden. Grund hierfür ist ein Fehler im Zusammenhang mit den Verweisparametern zu __call(). +PHP muss auf Version 5.3.2 oder höher oder 5.3.0 oder niedriger aktualisiert werden, um das Problem zu beheben. +Die Installation wurde abgebrochen.', + 'config-db-type' => 'Datenbanksystem:', + 'config-db-host' => 'Datenbankserver:', + 'config-db-host-help' => 'Sofern sich die Datenbank auf einem anderen Server befindet, ist hier der Servername oder die entsprechende IP-Adresse anzugeben. + +Sofern ein gemeinschaftlich genutzter Server verwendet wird, sollte der Hoster den zutreffenden Servernamen in seiner Dokumentation angegeben haben. + +Sofern auf einem Windows-Server installiert und MySQL genutzt wird, funktioniert der Servername „localhost“ voraussichtlich nicht. Wenn nicht, sollte „127.0.0.1“ oder die lokale IP-Adresse angegeben werden.', + 'config-db-host-oracle' => 'Datenbank-TNS:', + 'config-db-host-oracle-help' => 'Einen gültigen [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm „Local Connect“-Namen] angeben. Die „tnsnames.ora“-Datei muss von dieser Installation erkannt werden können.
    Sofern die Client-Bibliotheken für Version 10g oder neuer verwendet werden, kann auch [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm „Easy Connect“] zur Namensgebung genutzt werden.', + 'config-db-wiki-settings' => 'Bitte identifiziere dieses Wiki', + 'config-db-name' => 'Datenbankname:', + 'config-db-name-help' => 'Bitte einen Namen angeben, mit dem das Wiki identifiziert werden kann. +Dabei sollten keine Leerzeichen verwendet werden. + +Sofern ein gemeinschaftlich genutzter Server verwendet wird, sollte der Hoster den Datenbanknamen angegeben oder aber die Erstellung einer Datenbank über ein entsprechendes Interface gestattet haben.', + 'config-db-name-oracle' => 'Datenbankschema:', + 'config-db-account-oracle-warn' => 'Es gibt drei von MediaWiki unterstützte Möglichkeiten Oracle als Datenbank einzurichten: + +Sofern das Datenbankbenutzerkonto während des Installationsvorgangs erstellt werden soll, muss ein Datenbankbenutzerkonto mit der SYSDBA-Berechtigung zusammen mit den entsprechenden Anmeldeinformationen angegeben werden, mit dem dann über das Web auf die Datenbank zugegriffen werden kann. Alternativ kann man auch lediglich ein einzelnes manuell angelegtes Datenbankbenutzerkonto angeben, mit dem über das Web auf die Datenbank zugegriffen werden kann, sofern dieses über die Berechtigung zur Erstellung von Datenbankschemen verfügt. Zudem ist es möglich zwei Datenbankbenutzerkonten anzugeben von denen eines die Berechtigung zur Erstellung von Datenbankschemen hat und das andere, um mit ihm über das Web auf die Datenbank zuzugreifen. + +Ein Skript zum Anlegen eines Datenbankbenutzerkontos mit den notwendigen Berechtigungen findet man unter dem Pfad „…/maintenance/oracle/“ dieser MediaWiki-Installation. Es ist dabei zu bedenken, dass die Verwendung eines Datenbankbenutzerkontos mit beschränkten Berechtigungen die Nutzung der Wartungsfunktionen für das Standarddatenbankbenutzerkonto deaktiviert.', + 'config-db-install-account' => 'Benutzerkonto für die Installation', + 'config-db-username' => 'Name des Datenbankbenutzers:', + 'config-db-password' => 'Passwort des Datenbankbenutzers:', + 'config-db-password-empty' => 'Bitte ein Passwort für den neuen Datenbankbenutzer angeben: $1 +Obzwar es möglich ist Datenbankbenutzer ohne Passwort anzulegen, so ist dies aber nicht sicher.', + 'config-db-install-username' => 'Den Benutzernamen angeben, der für die Verbindung mit der Datenbank während des Installationsvorgangs genutzt werden soll. Es handelt sich dabei nicht um den Benutzernamen für das MediaWiki-Konto, sondern um den Benutzernamen der vorgesehenen Datenbank.', + 'config-db-install-password' => 'Das Passwort angeben, das für die Verbindung mit der Datenbank während des Installationsvorgangs genutzt werden soll. Es handelt sich dabei nicht um das Passwort für das MediaWiki-Konto, sondern um das Passwort der vorgesehenen Datenbank.', + 'config-db-install-help' => 'Benutzername und Passwort, die während des Installationsvorgangs, für die Verbindung mit der Datenbank, genutzt werden sollen, sind nun anzugeben.', + 'config-db-account-lock' => 'Derselbe Benutzername und das Passwort müssen während des Normalbetriebs des Wikis verwendet werden.', + 'config-db-wiki-account' => 'Benutzerkonto für den normalen Betrieb', + 'config-db-wiki-help' => 'Bitte Benutzernamen und Passwort angeben, die der Webserver während des Normalbetriebes dazu verwenden soll, eine Verbindung zum Datenbankserver herzustellen. +Sofern ein entsprechendes Benutzerkonto nicht vorhanden ist und das Benutzerkonto für den Installationsvorgang über ausreichende Berechtigungen verfügt, wird dieses Benutzerkonto automatisch mit den Mindestberechtigungen zum Normalbetrieb des Wikis angelegt.', + 'config-db-prefix' => 'Datenbanktabellenpräfix:', + 'config-db-prefix-help' => 'Sofern eine Datenbank für mehrere Wikiinstallationen oder eine Wikiinstallation und eine andere Programminstallation genutzt werden soll, muss ein weiterer Datenbanktabellenpräfix angegeben werden, um Datenbankprobleme zu vermeiden. +Es können keine Leerzeichen verwendet werden. + +Gewöhnlich bleibt dieses Datenfeld leer.', + 'config-db-charset' => 'Datenbankzeichensatz', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binär', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 abwärtskompatibles UTF-8', + 'config-charset-help' => "'''Warnung:''' Sofern '''abwärtskompatibles UTF-8''' bei MySQL 4.1+ verwendet und anschließend die Datenbank mit mysqldump gesichert wird, könnten alle nicht mit ASCII-codierten Zeichen beschädigt werden, was zu irreversiblen Schäden der Datensicherung führt! + +Im '''binären Modus''' speichert MediaWiki UTF-8 Texte in der Datenbank in binär kodierte Datenfelder. +Dies ist effizienter als der UTF-8-Modus von MySQL und ermöglicht so die Verwendung jeglicher Unicode-Zeichen. +Im '''UTF-8-Modus''' wird MySQL den Zeichensatz der Daten erkennen und sie richtig anzeigen und konvertieren, +allerdings können keine Zeichen außerhalb des [http://de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke ''Basic Multilingual Plane'' (BMP)] gespeichert werden.", + 'config-mysql-old' => 'MySQL $1 oder höher wird benötigt. MySQL $2 ist momentan vorhanden.', + 'config-db-port' => 'Datenbankport:', + 'config-db-schema' => 'Datenschema für MediaWiki', + 'config-db-schema-help' => 'Dieses Datenschema ist in der Regel allgemein verwendbar. +Nur Änderungen daran vornehmen, sofern es gute Gründe dafür gibt.', + 'config-sqlite-dir' => 'SQLite-Datenverzeichnis:', + 'config-sqlite-dir-help' => "SQLite speichert alle Daten in einer einzigen Datei. + +Das für sie vorgesehene Verzeichnis muss während des Installationsvorgangs beschreibbar sein. + +Es sollte '''nicht'' über das Web zugänglich sein, was der Grund ist, warum die Datei nicht dort abgelegt wird, wo sich die PHP-Dateien befinden. + +Das Installationsprogramm wird mit der Datei zusammen eine zusätzliche .htaccess-Datei erstellen. Sofern dies scheitert, können Dritte auf die Datendatei zugreifen. +Dies umfasst die Nutzerdaten (E-Mail-Adressen, Passwörter, etc.) wie auch gelöschte Seitenversionen und andere vertrauliche Daten, die im Wiki gespeichert sind. + +Es ist daher zu erwägen die Datendatei an gänzlich anderer Stelle abzulegen, beispielsweise im Verzeichnis ./var/lib/mediawiki/yourwiki.", + 'config-oracle-def-ts' => 'Standardtabellenraum:', + 'config-oracle-temp-ts' => 'Temporärer Tabellenraum:', + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Oracle', + 'config-support-info' => 'MediaWiki unterstützt die folgenden Datenbanksysteme: + +$1 + +Sofern nicht das Datenbanksystem angezeigt wird, das verwendet werden soll, gibt es oben einen Link zur Anleitung mit Informationen, wie dieses aktiviert werden kann.', + 'config-support-mysql' => '* $1 ist das von MediaWiki primär unterstützte Datenbanksystem ([http://www.php.net/manual/en/mysql.installation.php Anleitung zur Kompilierung von PHP mit MySQL-Unterstützung (en)])', + 'config-support-postgres' => '* $1 ist ein beliebtes Open-Source-Datenbanksystem und eine Alternative zu MySQL ([http://www.php.net/manual/de/pgsql.installation.php Anleitung zur Kompilierung von PHP mit PostgreSQL-Unterstützung]). Es gibt allerdings einige kleinere Implementierungsfehler, so dass von der Nutzung in einer Produktivumgebung abgeraten wird.', + 'config-support-sqlite' => '* $1 ist ein verschlanktes Datenbanksystem, das auch gut unterstützt wird ([http://www.php.net/manual/de/pdo.installation.php Anleitung zur Kompilierung von PHP mit SQLite-Unterstützung], verwendet PHP Data Objects (PDO))', + 'config-support-oracle' => '* $1 ist eine kommerzielle Unternehmensdatenbank ([http://www.php.net/manual/en/oci8.installation.php Anleitung zur Kompilierung von PHP mit OCI8-Unterstützung (en)])', + 'config-header-mysql' => 'MySQL-Einstellungen', + 'config-header-postgres' => 'PostgreSQL-Einstellungen', + 'config-header-sqlite' => 'SQLite-Einstellungen', + 'config-header-oracle' => 'Oracle-Einstellungen', + 'config-invalid-db-type' => 'Unzulässiges Datenbanksystem', + 'config-missing-db-name' => 'Bei „Datenbankname“ muss ein Wert angegeben werden.', + 'config-missing-db-host' => 'Bei „Datenbankhost“ muss ein Wert angegeben werden.', + 'config-missing-db-server-oracle' => 'Für das „Datenbank-TNS“ muss ein Wert eingegeben werden', + 'config-invalid-db-server-oracle' => 'Ungültiges Datenbank-TNS „$1“. +Es dürfen nur ASCII-codierte Buchstaben (a-z, A-Z), Zahlen (0-9) und Unterstriche (_) und Punkte (.) verwendet werden.', + 'config-invalid-db-name' => 'Ungültiger Datenbankname „$1“. +Es dürfen nur ASCII-codierte Buchstaben (a-z, A-Z), Zahlen (0-9), Unter- (_) sowie Bindestriche (-) verwendet werden.', + 'config-invalid-db-prefix' => 'Ungültiger Datenbanktabellenpräfix „$1“. +Es dürfen nur ASCII-codierte Buchstaben (a-z, A-Z), Zahlen (0-9), Unter- (_) sowie Bindestriche (-) verwendet werden.', + 'config-connection-error' => '$1. + +Bitte unten angegebenen Servernamen, Benutzernamen sowie das Passwort überprüfen und es danach erneut versuchen.', + 'config-invalid-schema' => 'Ungültiges Datenschema für MediaWiki „$1“. +Es dürfen nur ASCII-codierte Buchstaben (a-z, A-Z), Zahlen (0-9) und Unterstriche (_) verwendet werden.', + 'config-db-sys-create-oracle' => 'Das Installationsprogramm unterstützt nur die Verwendung eines Datenbankbenutzerkontos mit SYSDBA-Berechtigung zum Anlegen eines neuen Datenbankbenutzerkontos.', + 'config-db-sys-user-exists-oracle' => 'Das Datenbankbenutzerkonto „$1“ ist bereits vorhanden. Ein Datenbankbenutzerkontos mit SYSDBA-Berechtigung kann nur zum Anlegen eines neuen Datenbankbenutzerkontos genutzt werden.', + 'config-postgres-old' => 'PostgreSQL $1 oder höher wird benötigt. PostgreSQL $2 ist momentan vorhanden.', + 'config-sqlite-name-help' => 'Bitten einen Namen angeben, mit dem das Wiki identifiziert werden kann. +Dabei bitte keine Leerzeichen oder Bindestriche verwenden. +Dieser Name wird für die SQLite-Datendateinamen genutzt.', + 'config-sqlite-parent-unwritable-group' => 'Das Datenverzeichnis $1 kann nicht erzeugt werden, da das übergeordnete Verzeichnis $2 nicht für den Webserver beschreibbar ist. + +Das Installationsprogramm konnte den Benutzer bestimmen, mit dem Webserver ausgeführt wird. +Schreibzugriff auf das $3-Verzeichnis muss für diesen ermöglicht werden, um den Installationsvorgang fortsetzen zu können. + +Auf einem Unix- oder Linux-System: +
    cd $2
    +mkdir $3
    +chgrp $4 $3
    +chmod g+w $3
    ', + 'config-sqlite-parent-unwritable-nogroup' => 'Das Datenverzeichnis $1 kann nicht erzeugt werden, da das übergeordnete Verzeichnis $2 nicht für den Webserver beschreibbar ist. + +Das Installationsprogramm konnte den Benutzer bestimmen, mit dem Webserver ausgeführt wird. +Schreibzugriff auf das $3-Verzeichnis muss global für diesen und andere Benutzer ermöglicht werden, um den Installationsvorgang fortsetzen zu können. + +Auf einem Unix- oder Linux-System: +
    cd $2
    +mkdir $3
    +chmod a+w $3
    ', + 'config-sqlite-mkdir-error' => 'Fehler beim Erstellen des Datenverzeichnisses „$1“. + +Bitte den Speicherort überprüfen und es danach erneut versuchen.', + 'config-sqlite-dir-unwritable' => 'Das Verzeichnis „$1“ ist nicht beschreibbar. +Bitte die Zugriffsberechtigungen so ändern, dass dieses Verzeichnis für den Webserver beschreibbar ist und es danach erneut versuchen.', + 'config-sqlite-connection-error' => '$1. + +Bitte unten angegebenes Datenverzeichnis sowie den Datenbanknamen überprüfen und es danach erneut versuchen.', + 'config-sqlite-readonly' => 'Die Datei $1 ist nicht beschreibbar.', + 'config-sqlite-cant-create-db' => 'Die Datenbankdatei $1 konnte nicht erzeugt werden.', + 'config-sqlite-fts3-downgrade' => 'PHP verfügt nicht über FTS3-Unterstützung. Die Tabellen wurden zurückgestuft.', + 'config-can-upgrade' => "Es wurden MediaWiki-Tabellen in dieser Datenbank gefunden. +Um sie auf MediaWiki $1 zu aktualisieren, bitte auf '''Weiter''' klicken.", + 'config-upgrade-done' => "Die Aktualisierung ist abgeschlossen. + +Das Wiki kann nun [$1 genutzt werden]. + +Sofern die Datei LocalSettings.php neu erzeugt werden soll, bitte auf die Schaltfläche unten klicken. +Dies wird '''nicht empfohlen''', es sei denn, es treten Probleme mit dem Wiki auf.", + 'config-upgrade-done-no-regenerate' => 'Die Aktualisierung ist abgeschlossen. + +Das Wiki kann nun [$1 genutzt werden].', + 'config-regenerate' => 'LocalSettings.php neu erstellen →', + 'config-show-table-status' => 'Die Abfrage SHOW TABLE STATUS ist gescheitert!', + 'config-unknown-collation' => "'''Warnung:''' Die Datenbank nutzt eine unbekannte Kollation.", + 'config-db-web-account' => 'Datenbankkonto für den Webzugriff', + 'config-db-web-help' => 'Bitte Benutzernamen und Passwort auswählen, die der Webserver während des Normalbetriebes dazu verwenden soll, eine Verbindung zum Datenbankserver herzustellen.', + 'config-db-web-account-same' => 'Dasselbe Konto wie während des Installationsvorgangs verwenden', + 'config-db-web-create' => 'Sofern nicht bereits vorhanden, muss nun das Konto erstellt werden', + 'config-db-web-no-create-privs' => 'Das angegebene und für den Installationsvorgang vorgesehene Konto verfügt nicht über ausreichend Berechtigungen, um ein Konto zu erstellen. +Das hier angegebene Konto muss bereits vorhanden sein.', + 'config-mysql-engine' => 'Speicher-Engine:', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-engine-help' => "'''InnoDB''' ist fast immer die bessere Wahl, da es gleichzeitige Zugriffe gut unterstützt. + +'''MyISAM''' ist in Einzelnutzerumgebungen sowie bei schreibgeschützten Wikis schneller. +Bei MyISAM-Datenbanken treten tendenziell häufiger Fehler auf als bei InnoDB-Datenbanken.", + 'config-mysql-charset' => 'Datenbankzeichensatz:', + 'config-mysql-binary' => 'binär', + 'config-mysql-utf8' => 'UTF-8', + 'config-mysql-charset-help' => "Im '''binären Modus''' speichert MediaWiki UTF-8 Texte in der Datenbank in binär kodierte Datenfelder. +Dies ist effizienter als der UTF-8-Modus von MySQL und ermöglicht so die Verwendung jeglicher Unicode-Zeichen. + +Im '''UTF-8-Modus''' wird MySQL den Zeichensatz der Daten erkennen und sie richtig anzeigen und konvertieren, +allerdings können keine Zeichen außerhalb des [http://de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke ''Basic Multilingual Plane'' (BMP)] gespeichert werden.", + 'config-site-name' => 'Name des Wikis:', + 'config-site-name-help' => 'Er wird in der Titelleiste des Browsers, wie auch verschiedenen anderen Stellen, genutzt.', + 'config-site-name-blank' => 'Sitenamen angeben.', + 'config-project-namespace' => 'Name des Projektnamensraums:', + 'config-ns-generic' => 'Projekt', + 'config-ns-site-name' => 'Entspricht dem Namen des Wikis: $1', + 'config-ns-other' => 'Sonstige (bitte angeben)', + 'config-ns-other-default' => 'MeinWiki', + 'config-project-namespace-help' => "Dem Beispiel von Wikipedia folgend, unterscheiden viele Wikis zwischen den Seiten für Inhalte und denen für Richtlinien. Letztere werden im „'''Projektnamensraum'''“ hinterlegt. +Alle Seiten dieses Namensraumes verfügen über einen Seitenpräfix, der nun an dieser Stelle angegeben werden kann. +Traditionell steht dieser Seitenpräfix mit dem Namen des Wikis in einem engen Zusammenhang. Dabei können bestimmte Sonderzeichen wie „#“ oder „:“ nicht verwendet werden.", + 'config-ns-invalid' => 'Der angegebene Namensraum „$1“ ist ungültig. +Bitte einen abweichenden Projektnamensraum angeben.', + 'config-ns-conflict' => 'Der angegebene Namensraum „$1“ verursacht Problem mit dem Standardnamensraum von MediaWiki. +Bitte einen abweichenden Projektnamensraum angeben.', + 'config-admin-box' => 'Administratorkonto', + 'config-admin-name' => 'Name:', + 'config-admin-password' => 'Passwort:', + 'config-admin-password-confirm' => 'Passwort wiederholen:', + 'config-admin-help' => 'Bitte den bevorzugten Benutzernamen angeben, beispielsweise „Knut Wuchtig“. +Dies ist der Name, der benötigt wird, um sich im Wiki anzumelden.', + 'config-admin-name-blank' => 'Bitte den Benutzernamen für den Administratoren angeben.', + 'config-admin-name-invalid' => 'Der angegebene Benutzername „$1“ ist ungültig. +Bitte einen abweichenden Benutzernamen angeben.', + 'config-admin-password-blank' => 'Bitte das Passwort für das Administratorkonto angeben.', + 'config-admin-password-same' => 'Das Passwort darf nicht mit dem Benutzernamen übereinstimmen.', + 'config-admin-password-mismatch' => 'Die beiden Passwörter stimmen nicht überein.', + 'config-admin-email' => 'E-Mail-Adresse:', + 'config-admin-email-help' => 'Bitte hier eine E-Mail-Adresse angeben, die den E-Mail-Empfang von anderen Benutzern des Wikis, das Zurücksetzen des Passwortes sowie Benachrichtigungen zu Änderungen an beobachteten Seiten ermöglicht. Diese Feld kann leer gelassen werden.', + 'config-admin-error-user' => 'Es ist beim Erstellen des Administrators mit dem Namen „$1“ ein interner Fehler aufgetreten.', + 'config-admin-error-password' => 'Es ist beim Setzen des Passworts für den Administrator „$1“ ein interner Fehler aufgetreten:
    $2
    ', + 'config-admin-error-bademail' => 'Es wurde eine ungültige E-Mail-Adresse angegeben', + 'config-subscribe' => 'Bitte die Mailingliste [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mitteilungen zu Versionsveröffentlichungen] abonnieren.', + 'config-subscribe-help' => 'Es handelt sich hierbei um eine Mailingliste mit wenigen Aussendungen, die für Mitteilungen zu Versionsveröffentlichungen, einschließlich wichtiger Sicherheitsveröffentlichungen, genutzt wird. +Diese Mailingliste sollte abonniert werden. Zudem sollte die MediaWiki-Installation stets aktualisiert werden, sobald eine neue Programmversion veröffentlicht wurde.', + 'config-almost-done' => 'Der Vorgang ist fast abgeschlossen! +Die verbliebenen Konfigurationseinstellungen können übersprungen und das Wiki umgehend installiert werden.', + 'config-optional-continue' => 'Sollen weitere Konfigurationseinstellungen vorgenommen werden?', + 'config-optional-skip' => 'Nein, das Wiki soll nun installiert werden.', + 'config-profile' => 'Profil der Benutzerberechtigungen:', + 'config-profile-wiki' => 'offenes Wiki', + 'config-profile-no-anon' => 'Erstellung eines Benutzerkontos erforderlich', + 'config-profile-fishbowl' => 'ausschließlich berechtigte Bearbeiter', + 'config-profile-private' => 'geschlossenes Wiki', + 'config-profile-help' => "Wikis sind am nützlichsten, wenn so viele Menschen als möglich Bearbeitungen vornehmen können. +Mit MediaWiki ist es einfach die letzten Änderungen nachzuvollziehen und unbrauchbare Bearbeitungen, beispielsweise von unbedarften oder böswilligen Benutzern, rückgängig zu machen. + +Allerdings finden etliche Menschen Wikis auch mit anderen Bearbeitungskonzepten sinnvoll. Manchmal ist es auch nicht einfach alle Beteiligten vollständig von den Vorteilen des „Wiki-Prinzips” zu überzeugen. Darum ist eine Auswahl möglich. + +Ein '''{{int:config-profile-wiki}}''' ermöglicht es jedermann, sogar ohne über ein Benutzerkonto zu verfügen, Bearbeitungen vorzunehmen. +Ein Wiki bei dem die '''{{int:config-profile-no-anon}}''' ist, bietet höhere Verantwortlichkeit des Einzelnen für seine Bearbeitungen, könnte allerdings Personen mit gelegentlichen Bearbeitungen abschrecken. Ein Wiki mit '''{{int:config-profile-fishbowl}}''' gestattet es nur ausgewählten Benutzern Bearbeitungen vorzunehmen. Allerdings kann dabei die Allgemeinheit die Seiten immer noch betrachten und Änderungen nachvollziehen. Ein '''{{int:config-profile-private}}''' gestattet es nur ausgewählten Benutzern, Seiten zu betrachten sowie zu bearbeiten. + +Komplexere Konzepte zur Zugriffssteuerung können erst nach abgeschlossenem Installationsvorgang eingerichtet werden. Hierzu gibt es weitere Informationen auf der Website mit der [http://www.mediawiki.org/wiki/Manual:User_rights entsprechenden Anleitung].", + 'config-license' => 'Lizenz:', + 'config-license-none' => 'Keine Lizenzangabe in der Fußzeile', + 'config-license-cc-by-sa' => 'Creative Commons „Namensnennung, Weitergabe unter gleichen Bedingungen“', + 'config-license-cc-by-nc-sa' => 'Creative Commons „Namensnennung, nicht kommerziell, Weitergabe unter gleichen Bedingungen“', + 'config-license-cc-0' => 'Creative Commons „Zero“', + 'config-license-gfdl-old' => 'GNU-Lizenz für freie Dokumentation 1.2', + 'config-license-gfdl-current' => 'GNU-Lizenz für freie Dokumentation 1.3 oder höher', + 'config-license-pd' => 'Gemeinfreiheit', + 'config-license-cc-choose' => 'Eine benutzerdefinierte Creative-Commons-Lizenz auswählen', + 'config-license-help' => 'Viele öffentliche Wikis publizieren alle Beiträge unter einer [http://freedomdefined.org/Definition/De freien Lizenz]. +Dies trägt dazu bei ein Gefühl von Gemeinschaft zu schaffen und ermutigt zu längerfristiger Mitarbeit. +Dahingegen ist im Allgemeinen eine freie Lizenz auf geschlossenen Wikis nicht notwendig. + +Sofern man Texte aus der Wikipedia verwenden möchte und umgekehrt, sollte die Creative Commons-Lizens „Namensnennung, Weitergabe unter gleichen Bedingungen“ gewählt werden. + +Die GNU-Lizenz für freie Dokumentation ist die ehemalige Lizenz der Wikipedia. +Sie ist noch immer gültig, beinhaltet aber einige Bedingungen, welche die Wiederverwendung und deren Interpretation erschweren.', + 'config-email-settings' => 'E-Mail-Einstellungen', + 'config-enable-email' => 'Ausgehende E-Mails ermöglichen', + 'config-enable-email-help' => 'Sofern die E-Mail-Funktionen genutzt werden sollen, müssen die entsprechenden [http://www.php.net/manual/en/mail.configuration.php PHP-E-Mail-Einstellungen] richtig konfiguriert werden. +Für den Fall, dass die E-Mail-Funktionen nicht benötigt werden, können sie hier deaktiviert werden.', + 'config-email-user' => 'E-Mail-Versand von Benutzer zu Benutzer aktivieren', + 'config-email-user-help' => 'Allen Benutzern ermöglichen, sich gegenseitig E-Mails zu schicken, sofern sie es in ihren Einstellungen aktiviert haben.', + 'config-email-usertalk' => 'Benachrichtigungen zu Änderungen an Benutzerdiskussionsseiten ermöglichen', + 'config-email-usertalk-help' => 'Ermöglicht es Benutzern, Benachrichtigungen zu Änderungen an ihren Benutzerdiskussionsseiten zu erhalten, sofern sie dies in ihren Einstellungen aktiviert haben.', + 'config-email-watchlist' => 'Benachrichtigungen zu Änderungen an Seiten auf der Beobachtungsliste ermöglichen', + 'config-email-watchlist-help' => 'Ermöglicht es Benutzern, Benachrichtigungen zu Änderungen an Seiten auf ihrer Beobachtungsliste zu erhalten, sofern sie dies in ihren Einstellungen aktiviert haben.', + 'config-email-auth' => 'E-Mail-Authentifizierung ermöglichen', + 'config-email-auth-help' => "Sofern diese Funktion aktiviert ist, müssen Benutzer ihre E-Mail-Adresse bestätigen, indem sie den Bestätigungslink nutzen, der ihnen immer dann zugesandt wird, wenn sie ihre E-Mail-Adresse angeben oder ändern. +Nur bestätigte E-Mail-Adressen können Nachrichten von anderen Benutzer oder Benachrichtigungsmitteilungen erhalten. +Die Aktivierung dieser Funktion wird bei offenen Wikis, mit Hinblick auf möglichen Missbrauch der E-Mailfunktionen, '''empfohlen'''.", + 'config-email-sender' => 'E-Mail-Adresse für Antworten:', + 'config-email-sender-help' => 'Bitte hier die E-Mail-Adresse angeben, die als Absenderadresse bei ausgehenden E-Mails eingesetzt werden soll. +Rücklaufende E-Mails werden an diese E-Mail-Adresse gesandt. +Bei viele E-Mail-Servern muss der Teil der E-Mail-Adresse mit der Domainangabe korrekt sein.', + 'config-upload-settings' => 'Hochladen von Bildern und Dateien', + 'config-upload-enable' => 'Das Hochladen von Dateien ermöglichen', + 'config-upload-help' => 'Das Hochladen von Dateien macht den Server für potentielle Sicherheitsprobleme anfällig. +Weitere Informationen hierzu sollen im [http://www.mediawiki.org/wiki/Manual:Security Abschnitt Sicherheit] der Anleitung gelesen werden. + +Um das Hochladen von Dateien zu ermöglichen, muss der Zugriff auf das Unterverzeichnis ./images so geändert werden, das es für den Webserver beschreibbar ist. +Hernach kann diese Option aktiviert werden.', + 'config-upload-deleted' => 'Verzeichnis für gelöschte Dateien:', + 'config-upload-deleted-help' => 'Bitte ein Verzeichnis auswählen, in dem gelöschte Dateien archiviert werden sollen. +Idealerweise sollte es nicht über das Internet zugänglich sein.', + 'config-logo' => 'URL des Logos:', + 'config-logo-help' => 'Die Standardoberfläche von MediaWiki verfügt, in der oberen linken Ecke, über Platz für eine Logo mit den Maßen 135x160 Pixel. +Bitte ein Logo in entsprechender Größe hochladen und die zugehörige URL an dieser Stelle angeben. + +Sofern kein Logo benötigt wird, kann dieses Datenfeld leer bleiben.', + 'config-instantcommons' => '„InstantCommons“ aktivieren', + 'config-instantcommons-help' => '[http://www.mediawiki.org/wiki/InstantCommons InstantCommons] ist eine Funktion, die es Wikis ermöglicht, Bild-, Klang- und andere Mediendateien zu nutzen, die auf der Website [http://commons.wikimedia.org/ Wikimedia Commons] verfügbar sind. +Um diese Funktion zu nutzen, muss MediaWiki eine Verbindung ins Internet herstellen können. + +Weitere Informationen zu dieser Funktion, einschließlich der Anleitung, wie andere Wikis als Wikimedia Commons eingerichtet werden können, gibt es im [http://mediawiki.org/wiki/Manual:$wgForeignFileRepos Handbuch].', + 'config-cc-error' => 'Der Creativ-Commons-Lizenzassistent konnte keine Lizenz ermitteln. +Die Lizenz ist daher jetzt manuell einzugeben.', + 'config-cc-again' => 'Erneut auswählen…', + 'config-cc-not-chosen' => 'Die gewünschte Creative-Commons-Lizenz auswählen und dann auf „weiter“ klicken.', + 'config-advanced-settings' => 'Erweiterte Konfiguration', + 'config-cache-options' => 'Einstellungen für die Zwischenspeicherung von Objekten:', + 'config-cache-help' => 'Objektcaching wird dazu genutzt die Geschwindigkeit von MediaWiki zu verbessern, indem häufig genutzte Daten zwischengespeichert werden. +Mittelgroße bis große Wikis werden sehr ermutigt dies zu nutzen, aber auch für kleine Wikis ergeben sich erkennbare Vorteile.', + 'config-cache-none' => 'Kein Objektcaching (es wird keine Funktion entfernt, allerdings kann die Geschwindigkeit größerer Wikis beeinflusst werden)', + 'config-cache-accel' => 'Objektcaching von PHP (APC, eAccelerator, XCache or WinCache)', + 'config-cache-memcached' => 'Memchached Cacheserver nutzen (erfordert einen zusätzliche Installationsvorgang mitsamt Konfiguration)', + 'config-memcached-servers' => 'Memcached Cacheserver', + 'config-memcached-help' => 'Liste der für Memcached nutzbaren IP-Adressen. +Es sollte eine je Zeile mitsamt des vorgesehenen Ports angegeben werden. Beispiele: +127.0.0.1:11211 +192.168.1.25:1234', + 'config-memcache-needservers' => 'Memcached wurde als Cacheserver ausgewählt. Dabei wurde allerdings kein Server angegeben.', + 'config-memcache-badip' => 'Es wurde für Memcached eine ungültige IP-Adresse angegeben: $1', + 'config-memcache-noport' => 'Es wurde kein Port zur Nutzung durch den Memcached Cacheserver angegeben: $1 +Sofern der Port unbekannt ist, ist 11211 die Standardangabe.', + 'config-memcache-badport' => 'Der Ports für den Memcached Cacheserver sollten zwischen $1 und $2 liegen', + 'config-extensions' => 'Erweiterungen', + 'config-extensions-help' => 'Die obig angegebenen Erweiterungen wurden im Verzeichnis ./extensions gefunden. + +Sie könnten zusätzliche Konfigurierung erfordern, können aber bereits jetzt aktiviert werden.', + 'config-install-alreadydone' => "'''Warnung:''' Es wurde eine vorhandene MediaWiki-Installation gefunden. +Es muss daher mit den nächsten Seite weitergemacht werden.", + 'config-install-begin' => 'Durch Drücken von „{{int:config-continue}}“ wird die Installation von MediaWiki gestartet. +Sofern Änderungen vorgenommen werden sollen, kann man auf „Zurück“ klicken.', + 'config-install-step-done' => 'erledigt', + 'config-install-step-failed' => 'gescheitert', + 'config-install-extensions' => 'Einschließlich Erweiterungen', + 'config-install-database' => 'Datenbank wird eingerichtet', + 'config-install-pg-schema-not-exist' => 'Das PostgesSQL-Schema ist nicht vorhanden', + 'config-install-pg-schema-failed' => 'Das Erstellen der Datentabellen ist gescheitert. +Es muss sichergestellt sein, dass der Benutzer „$1“ Schreibzugriff auf das Datenschema „$2“ hat.', + 'config-install-pg-commit' => 'Änderungen anwenden', + 'config-install-pg-plpgsql' => 'Suche nach der Datenbanksprache PL/pgSQL', + 'config-pg-no-plpgsql' => 'Für Datenbank $1 muss die Datenbanksprache PL/pgSQL installiert werden', + 'config-pg-no-create-privs' => 'Das für die Installation angegeben Konto verfügt nicht über ausreichende Berechtigungen, um ein Datenbanknutzerkonto zu erstellen.', + 'config-install-user' => 'Datenbankbenutzer wird erstellt', + 'config-install-user-alreadyexists' => 'Datenbankbenutzer „$1“ ist bereits vorhanden', + 'config-install-user-create-failed' => 'Das Anlegen des Datenbankbenutzers „$1“ ist gescheitert: $2', + 'config-install-user-grant-failed' => 'Die Gewährung der Berechtigung für Datenbankbenutzer „$1“ ist gescheitert: $2', + 'config-install-tables' => 'Datentabellen werden erstellt', + 'config-install-tables-exist' => "'''Warnung:''' Es wurden MediaWiki-Datentabellen gefunden. +Die Erstellung wurde übersprungen.", + 'config-install-tables-failed' => "'''Fehler:''' Die Erstellung der Datentabellen ist aufgrund des folgenden Fehlers gescheitert: $1", + 'config-install-interwiki' => 'Interwikitabellen werden eingerichtet', + 'config-install-interwiki-list' => 'Die Datei interwiki.list konnte nicht gefunden werden.', + 'config-install-interwiki-exists' => "'''Warnung:''' Es wurden Interwikitabellen mit Daten gefunden. +Die Standardliste wird übersprungen.", + 'config-install-stats' => 'Initialisierung der Statistiken', + 'config-install-keys' => 'Erstellung der Geheimschlüssel', + 'config-insecure-keys' => "'''Warnung:''' {{PLURAL:$2|Der Geheimschlüssel|Die Geheimschlüssel}} $1 {{PLURAL:$2|der|die}} während des Installationsvorgangs generiert wurde, ist nicht sehr sicher. {{PLURAL:$2|Er sollte|Sie sollten}} manuell geändert werden.", + 'config-install-sysop' => 'Administratorkonto wird erstellt', + 'config-install-subscribe-fail' => 'Abonnierung von „mediawiki-announce“ ist gescheitert', + 'config-install-mainpage' => 'Erstellung der Hauptseite mit Standardinhalten', + 'config-install-extension-tables' => 'Erstellung der Tabellen für die aktivierten Erweiterungen', + 'config-install-mainpage-failed' => 'Die Hauptseite konnte nicht erstellt werden: $1', + 'config-install-done' => "'''Herzlichen Glückwunsch!''' +MediaWiki wurde erfolgreich installiert. + +Das Installationsprogramm hat die Datei LocalSettings.php erzeugt. +Sie enthält alle Konfigurationseinstellungen. + +Diese Datei muss nun heruntergeladen und anschließend in das Stammverzeichnis der MediaWiki-Installation hochgeladen werden. Dies ist dasselbe Verzeichnis, in dem sich auch die Datei index.php befindet. Das Herunterladen sollte automatisch gestartet worden sein. + +Sofern dies nicht der Fall war, oder das Herunterladen unterbrochen wurde, kann der Vorgang durch einen Klick auf untenstehenden Link erneut gestartet werden: + +$3 + +'''Hinweis:''' Sofern das Herunterladen der Konfigurationsdatei nicht jetzt durchgeführt wird, wird sie zu einem späteren Zeitpunkt nach dem Beenden des Installationsprogramms nicht mehr zur Verfügung stehen. + +Sobald dies alles erledigt wurde, kann auf das '''[$2 Wiki zugegriffen werden]'''.", + 'config-download-localsettings' => 'LocalSettings.php herunterladen', + 'config-help' => 'Hilfe', +); + +/** Esperanto (Esperanto) + * @author Yekrats + */ +$messages['eo'] = array( + 'config-your-language' => 'Via lingvo:', + 'config-your-language-help' => 'Elekti lingvon uzi dum la instalada procezo.', + 'config-wiki-language' => 'Lingvo de la vikio:', + 'config-wiki-language-help' => 'Elekti la ĉefe skribotan lingvon de la vikio.', + 'config-page-welcome' => 'Bonvenon al MediaWiki!', + 'config-page-dbsettings' => 'Agordoj de la datumbazo', + 'config-page-name' => 'Nomo', + 'config-page-options' => 'Agordoj', + 'config-page-install' => 'Instali', + 'config-page-complete' => 'Farita!', +); + +/** Spanish (Español) + * @author Crazymadlover + * @author Danke7 + * @author Platonides + * @author Sanbec + * @author Translationista + */ +$messages['es'] = array( + 'config-desc' => 'El instalador para MediaWiki', + 'config-title' => 'MediaWiki $1 instalación', + 'config-information' => 'Información', + 'config-localsettings-upgrade' => "'''Atención''': Se ha encontrado un fichero de configuración LocalSettings.php. +Para actualizar MediaWiki mueva LocalSettings.php a un lugar seguro y ejecute de nuevo el instalador.", + 'config-session-error' => 'Error comenzando sesión: $1', + 'config-session-expired' => 'Tus datos de sesión parecen haber expirado. +Las sesiones están configuradas por una duración de $1. +Puedes incrementar esto configurando session.gc_maxlifetime en php.ini. +Reiniciar el proceso de instalación.', + 'config-no-session' => 'Se han perdido los datos de sesión. +Verifica tu php.ini y comprueba que session.save_path está establecido en un directorio apropiado.', + 'config-your-language' => 'Tu idioma:', + 'config-your-language-help' => 'Seleccionar un idioma a usar durante el proceso de instalación.', + 'config-wiki-language' => 'Idioma del wiki:', + 'config-wiki-language-help' => 'Seleccionar el idioma en el que el wiki será escrito predominantemente.', + 'config-back' => '← Atrás', + 'config-continue' => 'Continuar →', + 'config-page-language' => 'Idioma', + 'config-page-welcome' => 'Bienvenido a MediaWiki!', + 'config-page-dbconnect' => 'Conectar a la base de datos', + 'config-page-upgrade' => 'Actualizar instalación existente', + 'config-page-dbsettings' => 'Configuración de la base de datos', + 'config-page-name' => 'Nombre', + 'config-page-options' => 'Opciones', + 'config-page-install' => 'Instalar', + 'config-page-complete' => 'Completo!', + 'config-page-restart' => 'Reiniciar instalación', + 'config-page-readme' => 'Léeme', + 'config-page-releasenotes' => 'Notas de la versión', + 'config-page-copying' => 'Copiando', + 'config-page-upgradedoc' => 'Actualizando', + 'config-help-restart' => '¿Deseas borrar todos los datos que has ingresado hasta ahora y reiniciar el proceso de instalación desde el principio?', + 'config-restart' => 'Sí, reiniciarlo', + 'config-welcome' => '=== Comprobación del entorno === +Se realiza comprobacioens básicas para ver si el entorno es adecuado para la instalación de MediaWiki. +Deberás suministrar los resultados de tales comprobaciones si necesitas ayuda durante la instalación.', + 'config-copyright' => "=== Derechos de autor y Términos de uso === + +$1 + +Este programa es software libre; puedes redistribuirlo y/o modificarlo en los términos de la Licencia Pública General de GNU, tal como aparece publicada por la Fundación para el Software Libre, tanto la versión 2 de la Licencia, como cualquier versión posterior (según prefiera). + +Este programa es distribuido en la esperanza de que sea útil, pero '''sin cualquier garantía'''; inclusive, sin la garantía implícita de la '''posibilidad de ser comercializado''' o de '''idoneidad para cualquier finalidad específica'''. +Consulte la licencia *GNU General *Public *License para más detalles. + +En conjunto con este programa debe haber recibido una copia de la Licencia Pública General de GNU; si no la recibió, pídala por escrito a Fundación para el Software Libre, Inc., 51 Franklin Street, Fifth Floor, Boston, ME La 02110-1301, USA o [http://www.gnu.org/copyleft/gpl.html léala en internet].", + 'config-sidebar' => '* [http://www.mediawiki.org Página principal de MediaWiki] +* [http://www.mediawiki.org/wiki/Help:Contents Guía del usuario] +* [http://www.mediawiki.org/wiki/Manual:Contents Guía del administrador] +* [http://www.mediawiki.org/wiki/Manual:FAQ Preguntas frecuentes]', + 'config-env-good' => 'El entorno ha sido comprobado. +Puedes instalar MediaWiki.', + 'config-env-bad' => 'El entorno ha sido comprobado. +No puedes instalar MediaWiki.', + 'config-env-php' => 'PHP $1 está instalado.', + 'config-unicode-using-utf8' => 'Usando utf8_normalize.so de Brion Vibber para la normalización Unicode.', + 'config-unicode-using-intl' => 'Usando la [http://pecl.php.net/intl extensión intl PECL] para la normalización Unicode.', + 'config-unicode-pure-php-warning' => "'''Advertencia''': La [http://*pecl.*php.*net/*intl extensión intl PECL] no está disponible para efectuar la normalización Unicode. +Si tu web tiene un alto volumen de tráfico, te recomendamos leer acerca de [http://www.mediawiki.org/wiki/Unicode_normalization_considerations normalización Unicode].", + 'config-unicode-update-warning' => "'''Warning''': La versión instalada del contenedor de normalización Unicode usa una versión anterior de la biblioteca del [http://site.icu-project.org/ proyecto ICU]. +Deberás [http://www.mediawiki.org/wiki/Unicode_normalization_considerations actualizar] si realmente deseas usar Unicode.", + 'config-no-db' => 'No fue posible encontrar un controlador adecuado para la base de datos.', + 'config-no-db-help' => 'Necesitará instalar un controlador de base de datos para PHP. +Estos son los tipos de base de datos compatibles: $1. + +Si tu web está en un alojamiento compartido, solicita a tu proveedor la instalación de un controlador de base de datos ocmpatible. +Si has compilado tú mismo(a) el PHP, reconfigúralo con un cliente de base de datos habilitado, por ejemplo mediante ./configure --with-mysql. +Si instalaste el PHP a partir de un paquete Debian o Ubuntu, entonces necesitarás instalar también el módulo php5-mysql.', + 'config-no-fts3' => "'''Advertencia''': SQLite está compilado sin el [http://sqlite.org/fts3.html módulo FTS3]. Las funcionalidades de búsqueda no estarán disponibles en esta instalación.", + 'config-register-globals' => "'''Advertencia: La opción de [http://php.net/register_globals register_globals] de PHP está habilitada.''' +'''Desactívela si puede.''' +MediaWiki funcionará, pero tu servidor quedará expuesto a vulnerabilidades de seguridad potenciales.", + 'config-magic-quotes-runtime' => "'''Fatal: ¡[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] está activada!''' +Esta opción causa la imprevisible corrupción de la entrada de datos. +No puedes instalar o utilizar MediaWiki a menos que esta opción esté inhabilitada.", + 'config-magic-quotes-sybase' => "'''Fatal: ¡[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] está activada!''' +Esta opción causa la imprevisible corrupción de la entrada de datos. +No puedes instalar o utilizar MediaWiki a menos que esta opción esté inhabilitada.", + 'config-mbstring' => "'''Fatal: La opción [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] está activada!''' +Esta opción causa errores y puede corromper los datos de una forma imprevisible. +No se puede instalar o usar MediaWiki a menos que esta opción sea desactivada.", + 'config-ze1' => "'''Fatal: ¡La opción [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] está activada!''' +Esta opción causa problemas significativos en MediaWiki. +No se puede instalar o usar MediaWiki a menos que esta opción sea desactivada.", + 'config-safe-mode' => "'''Advertencia:''' El [http://www.php.net/features.safe-mode modo seguro] de PHP está activado. +Este modo puede causar problemas, especialmente en la carga de archivosy en compatibilidad con math.", + 'config-xml-bad' => 'Falta el módulo XML de PHP. +MediaWiki necesita funciones en este módulo y no funcionará con esta configuración. +Si está ejecutando Mandrake, instale el paquete php-xml.', + 'config-pcre' => 'Parece faltar el módulo de compatibilidad PCRE. +MediaWiki necesita que las funciones de expresiones regulares compatibles con Perl estén funcionando.', + 'config-memory-raised' => 'el parámetro memory_limit de PHP es $1, aumentada a $2.', + 'config-memory-bad' => "'''Advertencia:''' El parámetro memory_limit de PHP es $1. +Probablemente este valor es demasiado bajo. +¡La instalación podrá fallar!", + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] está instalado', + 'config-apc' => '[http://www.php.net/apc APC] está instalado', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] está instalado', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] está instalado', + 'config-no-cache' => "'''Advertencia:''' No pudo encontrarse [http://eaccelerator.sourceforge.net eAccelerator], [http://www.php.net/apc APC], [http://trac.lighttpd.net/xcache/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache]. +El caché de objetos no está habilitado.", + 'config-diff3-bad' => 'GNU diff3 no se encuentra.', + 'config-imagemagick' => 'ImageMagick encontrado: $1. +La miniaturización de imágenes se habilitará si habilitas las cargas.', + 'config-gd' => 'Se ha encontrado una biblioteca de gráficos GD integrada. +La miniaturización de imágenes se habilitará si habilitas las subidas.', + 'config-no-scaling' => 'No se ha encontrado ninguma biblioteca GD o ImageMagik. +Se inhabilitará la miniaturización de imágenes.', + 'config-no-uri' => "'''Error:''' No se pudo determinar el URI actual. +Instalación abortada.", + 'config-db-type' => 'Tipo de base de datos', + 'config-db-host' => 'Servidor de la base de datos:', + 'config-db-wiki-settings' => 'Identifique este wiki', + 'config-db-name' => 'Nombre de base de datos:', + 'config-db-install-account' => 'Cuenta de usuario para instalación', + 'config-db-username' => 'Nombre de usuario de base de datos:', + 'config-db-password' => 'contraseña de base de datos:', + 'config-db-install-help' => 'Ingresar el nombre de usuario y la contraseña que será usada para conectar a la base de datos durante el proceso de instalación.', + 'config-db-account-lock' => 'Usar el mismo nombre de usuario y contraseña durante operación normal', + 'config-db-wiki-account' => 'Usar cuenta para operación normal', + 'config-db-wiki-help' => 'Introduce el nombre de usuario y la contraseña que serán usados para acceder a la base de datos durante la operación normal del wiki. +Si esta cuenta no existe y la cuenta de instalación tiene suficientes privilegios, se creará esta cuenta de usuario con los privilegios mínimos necesarios para la operación normal del wiki.', + 'config-db-prefix' => 'Prefijo para las tablas de la base de datos:', + 'config-db-charset' => 'Conjunto de caracteres de la base de datos', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binario', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 retrocompatible UTF-8', + 'config-mysql-old' => 'Se necesita MySQL $1 o una versión más reciente. Tienes la versión $2.', + 'config-db-port' => 'Puerto de la base de datos:', + 'config-db-schema' => 'Esquema para MediaWiki', + 'config-db-schema-help' => 'Normalmente, los esquemas arriba son los correctos. +Altéralos sólo si tienes la seguridad de que necesitas alterarlos.', + 'config-sqlite-dir' => 'Directorio de datos SQLite:', + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Oracle', + 'config-support-info' => 'MediaWiki es compatible con los siguientes sistemas de bases de datos: + +$1 + +Si no encuentras en el listado el sistema de base de datos que estás intentando utilizar, sigue las instrucciones vinculadas arriba para habilitar la compatibilidad.', + 'config-support-mysql' => '* $1 es la base de datos mayoritaria para MediaWiki y la que goza de mayor compatibilidad ([http://www.php.net/manual/es/mysql.installation.php cómo compilar PHP con compatibilidad MySQL])', + 'config-support-postgres' => '* $1 es una popular base de datos de código abierto, alternativa a MySQL. ([http://www.php.net/manual/es/pgsql.installation.php cómo compilar PHP con compatibilidad PostgreSQL])', + 'config-support-sqlite' => '* $1 es una base de datos ligera con gran compatibilidad con MediaWiki. ([http://www.php.net/manual/es/pdo.installation.php Cómo compilar PHP con compatibilidad SQLite], usa PDO)', + 'config-support-oracle' => '* $1 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-header-mysql' => 'Configuración de MySQL', + 'config-header-postgres' => 'Configuración de PostgreSQL', + 'config-header-sqlite' => 'Configuración de SQLite', + 'config-header-oracle' => 'Configuración de Oracle', + 'config-invalid-db-type' => 'Tipo de base de datos inválida', + 'config-missing-db-name' => 'Debes introducir un valor para "Nombre de la base de datos"', + 'config-invalid-db-name' => 'El nombre de la base de datos "$1" es inválido. +Usa sólo caracteres ASCII: letras (a-z, A-Z), guarismos (0-9) y guiones bajos (_).', + 'config-invalid-db-prefix' => 'El prefijo de la base de datos "$1" es inválido. +Use sólo carateres ASCII: letras (a-z, A-Z), guarismos (0-9) y guiones bajos (_).', + 'config-connection-error' => '$1. + +Verifique el servidor, el nombre de usuario y la contraseña, e intente de nuevo.', + 'config-invalid-schema' => 'El esquema de la base de datos "$1" es inválido. +Use sólo carateres ASCII: letras (a-z, A-Z), guarismos (0-9) y guiones bajos (_).', + 'config-postgres-old' => 'Se necesita PostgreSQL $1 o una versión más reciente; tienes la versión $2.', + 'config-sqlite-name-help' => 'Elige el nombre que identificará tu wiki. +No uses espacios o guiones. +Este nombre será usado como nombre del archivo de datos de SQLite.', + 'config-sqlite-mkdir-error' => 'Error al crear el directorio de datos "$1". +Comprueba la ubicación e inténtalo de nuevo.', + 'config-sqlite-dir-unwritable' => 'No se puede escribir en el directorio "$1". +Modifica los permisos para que el servidor web pueda escribir en él y vuelve a intentarlo.', + 'config-sqlite-connection-error' => '$1. + +Verifique el directório de datos y el nombre de la base de datos mostrada a continuación e inténtalo nuevamente.', + 'config-sqlite-readonly' => 'El archivo $1 no se puede escribir.', + 'config-sqlite-cant-create-db' => 'No fue posible crear el archivo de la base de datos $1.', + 'config-sqlite-fts3-downgrade' => 'El PHP no tiene compatibilidad FTS3. actualizando tablas a una versión anterior', + 'config-can-upgrade' => "Esta base de datos contiene tablas de MediaWiki. +Para actualizarlas a MediaWiki $1, haz clic en '''Continuar'''.", + 'config-regenerate' => 'Regenerar LocalSettings.php →', + 'config-show-table-status' => 'SHOW TABLE STATUS ha fallado!', + 'config-unknown-collation' => "'''Advertencia:''' La base de datos está utilizando una intercalación no reconocida.", + 'config-db-web-account' => 'Cuenta de base de datos para acceso Web', + 'config-db-web-help' => 'Elige el usuario y contraseña que el servidor Web usará para conectarse al servidor de la base de datos durante el fincionamiento normal del wiki.', + 'config-db-web-account-same' => 'Utilizar la misma cuenta que en la instalación', + 'config-db-web-create' => 'Crear la cuenta si no existe', + 'config-db-web-no-create-privs' => 'La cuenta que has especificado para la instalación no tiene privilegios suficientes para crear una cuenta. +La cuenta que especifiques aquí debe existir.', + 'config-mysql-engine' => 'Motor de almacenamiento:', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-engine-help' => "'''InnoDB''' es casi siempre la mejor opción, dado que soporta bien los accesos simultáneos. + +'''MyISAM''' es más rápido en instalaciones de usuario único o de sólo lectura. +Las bases de datos MyISAM tienden a corromperse más a menudo que las bases de datos InnoDB.", + 'config-mysql-charset' => 'Conjunto de caracteres de la base de datos:', + 'config-mysql-binary' => 'Binario', + 'config-mysql-utf8' => 'UTF-8', + 'config-site-name' => 'Nombre del wiki:', + 'config-site-name-help' => 'Esto aparecerá en la barra de título del navegador y en varios otros lugares.', + 'config-site-name-blank' => 'Ingresar un nombre de sitio.', + 'config-project-namespace' => 'Espacio de nombre de proyecto:', + 'config-ns-generic' => 'Proyecto', + 'config-ns-site-name' => 'Igual como el nombre del wiki: $1', + 'config-ns-other' => 'Otro (especificar)', + 'config-ns-other-default' => 'MiWiki', + 'config-ns-invalid' => 'El espacio de nombre especificado "$1" no es válido. +Especifica un espacio de nombre de proyecto diferente.', + 'config-admin-box' => 'Cuenta de administrador', + 'config-admin-name' => 'Tu nombre:', + 'config-admin-password' => 'Contraseña:', + 'config-admin-password-confirm' => 'Repita la contraseña:', + 'config-admin-help' => 'Escribe aquí el nombre de usuario que desees, como por ejemplo "Pedro Bloggs". +Este es el nombre que usarás para entrar al wiki.', + 'config-admin-name-blank' => 'Introduce un nombre de usuario de administrador.', + 'config-admin-name-invalid' => 'El nombre de usuario especificado "$1" no es válido. +Especifique un nombre de usuario diferente.', + 'config-admin-password-blank' => 'Introduzca una contraseña para la cuenta de administrador.', + 'config-admin-password-same' => 'La contraseña no debe ser la misma que el nombre de usuario.', + 'config-admin-password-mismatch' => 'Las dos contraseñas que ingresaste no coinciden.', + 'config-admin-email' => 'Dirección de correo electrónico:', + 'config-admin-email-help' => 'Introduce aquí un correo electrónico que te permita recibir mensajes de otros usuarios del wiki, vuelve a configurar tu contraseña y recibe notificaciones de cambios realizados a tus páginas vigiladas.', + 'config-admin-error-user' => 'Error interno al crear un administrador con el nombre "$1".', + 'config-admin-error-password' => 'Error interno al establecer una contraseña para el administrador " $1 ":
    $2
    ', + 'config-subscribe' => 'Suscribirse para recibir [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce avisos de nuevas versiones].', + 'config-subscribe-help' => 'Esta es una lista de divulgación de bajo volumen para anuncios de lanzamiento de versiones nuevas, incluyendo anuncios de seguridad importantes. +Te recomendamos suscribirte y actualizar tu instalación MediaWiki cada vez que se lance una nueva versión.', + 'config-almost-done' => '¡Ya casi has terminado! +Ahora puedes saltarte el resto de pasos e instalar el wiki con valores predeterminados.', + 'config-optional-continue' => 'Hazme más preguntas.', + 'config-optional-skip' => 'Ya estoy aburrido, sólo instala el wiki.', + 'config-profile' => 'Perfil de derechos de usuario:', + 'config-profile-wiki' => 'Wiki tradicional', + 'config-profile-no-anon' => 'Creación de cuenta requerida', + 'config-profile-fishbowl' => 'Sólo editores autorizados', + 'config-profile-private' => 'Wiki privado', + 'config-license' => 'Copyright and licencia:', + 'config-license-none' => 'Pie sin licencia', + 'config-license-cc-by-sa' => 'Creative Commons Reconocimiento Compartir Igual', + 'config-license-cc-by-nc-sa' => 'Creative Commons Reconocimiento Compartir Igual no comercial', + 'config-license-gfdl-old' => 'GNU Licencia de Documentación Libre 1.2', + 'config-license-gfdl-current' => 'Licencia de documentación libre GNU 1.3 o más reciente', + 'config-license-pd' => 'Dominio Público', + 'config-license-cc-choose' => 'Selecciona una licencia personalizada de Creative Commons', + 'config-email-settings' => 'Configuración de correo electrónico', + 'config-enable-email' => 'Activar el envío de e-mails', + 'config-enable-email-help' => 'Si quieres que el correo electrónico funcione, la [http://www.php.net/manual/en/mail.configuration.php configuración PHP de correo electrónico] debe ser la correcta. +Si no quieres la funcionalidad de correo electrónico, puedes desactivarla aquí.', + 'config-email-user' => 'Habilitar correo electrónico de usuario a usuario', + '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-email-usertalk-help' => 'Permitir a los usuarios recibir notificaciones de cambios en la página de discusión de usuario, si lo han activado en sus preferencias.', + 'config-email-watchlist' => 'Activar notificación de alteraciones a la páginas vigiladas', + 'config-email-watchlist-help' => 'Permitir a los usuarios recibir notificaciones de cambios en la páginas que vigilan, si lo han activado en sus preferencias.', + 'config-email-auth' => 'Activar autenticación del correo electrónico', + 'config-email-sender' => 'Dirección de correo electrónico de retorno:', + 'config-email-sender-help' => 'Introduce la dirección de correo electrónico que será usada como dirección de retorno en los mensajes electrónicos de salida. +Aquí llegarán los correos electrónicos que no lleguen a su destino. +Muchos servidores de correo electrónico exigen que por lo menos la parte del nombre del dominio sea válida.', + 'config-upload-settings' => 'Cargas de imágenes y archivos', + 'config-upload-enable' => 'Habilitar la subida de archivos', + 'config-upload-deleted' => '*Directório para los archivos eliminados:', + 'config-upload-deleted-help' => 'Elige un directorio en el que guardar los archivos eliminados. +Lo ideal es una carpeta no accesible desde la red.', + 'config-logo' => 'URL del logo :', + 'config-instantcommons' => 'Habilitar Instant Commons', + 'config-cc-error' => 'El selector de licencia de Creative Commons no dio resultado. +Escribe el nombre de la licencia manualmente.', + 'config-cc-again' => 'Elegir otra vez...', + 'config-cc-not-chosen' => 'Elige la licencia Creative Commons que desees y haz clic en "continuar".', + 'config-advanced-settings' => 'Configuración avanzada', + 'config-cache-options' => 'Configuración de la caché de objetos:', + 'config-cache-help' => 'El almacenamiento en caché de objetos se utiliza para mejorar la velocidad de MediaWiki mediante el almacenamiento en caché los datos usados más frecuentemente. +A los sitios medianos y grandes se les recomienda que permitirlo. También es beneficioso para los sitios pequeños.', + 'config-cache-none' => 'Sin almacenamiento en caché (no se pierde ninguna funcionalidad, pero la velocidad puede resentirse en sitios grandes)', + 'config-cache-accel' => 'Almacenamiento en caché de objetos PHP (APC, eAccelerator, XCache o WinCache)', + 'config-cache-memcached' => 'Utilizar Memcached (necesita ser instalado y configurado aparte)', + 'config-memcached-servers' => 'Servidores Memcached:', + 'config-memcached-help' => 'Lista de direcciones IP que serán usadas para Memcached. +Deben ser separadas por comas y especificar el puerto a utilizar (por ejemplo: 127.0.0.1:11211, 192.168.1.25:11211).', + 'config-extensions' => 'Extensiones', + 'config-extensions-help' => 'Se ha detectado en tu directorio ./extensions las extensiones listadas arriba. + +Puede que necesiten configuraciones adicionales, pero puedes habilitarlas ahora.', + 'config-install-alreadydone' => "'''Aviso:''' Parece que ya habías instalado MediaWiki y estás intentando instalarlo nuevamente. +Pasa a la próxima página, por favor.", + 'config-install-step-done' => 'hecho', + 'config-install-step-failed' => 'falló', + 'config-install-extensions' => 'Extensiones inclusive', + 'config-install-database' => 'Configurando la base de datos', + 'config-install-pg-schema-failed' => 'La creación de las tablas ha fallado. +Asegúrate de que el usuario "$1" puede escribir en el esquema "$2".', + 'config-install-user' => 'Creando el usuario de la base de datos', + 'config-install-user-grant-failed' => 'La concesión de permisos para el usuario "$1" ha fallado: $2', + 'config-install-tables' => 'Creando tablas', + 'config-install-tables-exist' => "'''Advertencia''': Al parecer, las tablas de MediaWiki ya existen. Saltándose su creación.", + 'config-install-tables-failed' => "'''Error''': La creación de las tablas falló con el siguiente error: $1", + 'config-install-interwiki' => 'Llenando la tabla interwiki predeterminada', + 'config-install-interwiki-list' => 'No se pudo encontrar el archivo interwiki.list.', + 'config-install-interwiki-exists' => "'''Advertencia''': La tabla de interwikis parece ya contener entradas. +Se omitirá la lista predeterminada.", + 'config-install-keys' => 'Generación de clave secreta', + 'config-install-sysop' => 'Creando cuenta de usuario del administrador', +); + +/** Basque (Euskara) + * @author An13sa + */ +$messages['eu'] = array( + 'config-desc' => 'MediaWiki instalatzailea', + 'config-title' => 'MediaWiki $1 instalazioa', + 'config-information' => 'Informazioa', + 'config-session-error' => 'Saio hasierako errorea: $1', + 'config-your-language' => 'Zure hizkuntza:', + 'config-your-language-help' => 'Aukeratu instalazio prozesuan erabiliko den hizkuntza', + 'config-wiki-language' => 'Wiki hizkuntza:', + 'config-back' => '← Atzera', + 'config-continue' => 'Jarraitu →', + 'config-page-language' => 'Hizkuntza', + 'config-page-welcome' => 'Ongi etorri MediaWikira!', + 'config-page-dbconnect' => 'Datu-basera konektatu', + 'config-page-dbsettings' => 'Datu-basearen ezarpenak', + 'config-page-name' => 'Izena', + 'config-page-options' => 'Aukerak', + 'config-page-install' => 'Instalatu', + 'config-page-complete' => 'Bukatua!', + 'config-page-restart' => 'Instalazioa berriz hasi', + 'config-page-readme' => 'Irakur nazazu', + 'config-page-copying' => 'Kopiatzea', + 'config-page-upgradedoc' => 'Eguneratu', + 'config-restart' => 'Bai, berriz hasi', + 'config-sidebar' => '* [http://www.mediawiki.org MediaWiki nagusia] +* [http://www.mediawiki.org/wiki/Help:Contents Erabiltzaileentzako Gida] +* [http://www.mediawiki.org/wiki/Manual:Contents Administratzaileentzako Gida] +* [http://www.mediawiki.org/wiki/Manual:FAQ MEG]', + 'config-env-php' => 'PHP $1 instalatuta dago.', + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] instalatuta dago', + 'config-apc' => '[http://www.php.net/apc APC] instalatuta dago', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] instalatuta dago', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] instalatuta dago', + 'config-diff3-bad' => 'GNU diff3 ez da aurkitu.', + 'config-db-type' => 'Datu-base mota:', + 'config-db-wiki-settings' => 'Wiki hau identifikatu', + 'config-db-name' => 'Datu-base izena:', + 'config-db-username' => 'Datu-base lankide izena:', + 'config-db-password' => 'Datu-base pasahitza:', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 bitarra', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Oracle', + 'config-header-mysql' => 'MySQL hobespenak', + 'config-header-postgres' => 'PostgreSQL hobespenak', + 'config-header-sqlite' => 'SQLite hobespenak', + 'config-header-oracle' => 'Oracle hobespenak', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-binary' => 'Bitarra', + 'config-mysql-utf8' => 'UTF-8', + 'config-site-name' => 'Wikiaren izena:', + 'config-project-namespace' => 'Proiektuaren izen-tartea:', + 'config-ns-generic' => 'Proiektua', + 'config-ns-other' => 'Bestelakoa (zehaztu)', + 'config-ns-other-default' => 'MyWiki', + 'config-admin-box' => 'Administratzaile kontua', + 'config-admin-name' => 'Zure izena:', + 'config-admin-password' => 'Pasahitza:', + 'config-admin-password-confirm' => 'Pasahitza berriz:', + 'config-admin-email' => 'E-posta helbidea:', + 'config-profile-wiki' => 'Wiki tradizionala', + 'config-profile-private' => 'Wiki pribatua', + 'config-license' => 'Copyright eta lizentzia:', + 'config-license-pd' => 'Domeinu Askea', + 'config-email-settings' => 'E-posta hobespenak', + 'config-logo' => 'Logo URL:', + 'config-install-step-done' => 'egina', +); + +/** Persian (فارسی) + * @author Mjbmr + */ +$messages['fa'] = array( + 'config-your-language' => 'زبان شما:', + 'config-wiki-language' => 'زبان ویکی:', + 'config-page-language' => 'زبان', +); + +/** Finnish (Suomi) + * @author Centerlink + * @author Crt + * @author Nike + * @author Olli + * @author Str4nd + */ +$messages['fi'] = array( + 'config-desc' => 'MediaWiki-asennin', + 'config-title' => 'MediaWikin version $1 asennus', + 'config-information' => 'Tiedot', + 'config-localsettings-upgrade' => 'LocalSettings.php-tiedosto on havaittu. +Syötä kohdan $wgUpgradeKey arvo alla olevaan kenttään päivittääksesi asennuksen. +Löydät sen LocalSettings.php-tiedostosta.', + 'config-session-error' => 'Istunnon aloittaminen epäonnistui: $1', + 'config-session-expired' => 'Istuntotietosi näyttävät olevan vanhentuneita. +Istuntojen elinajaksi on määritelty $1. +Voit muuttaa tätä asetusta vaihtamalla kohtaa session.gc_maxlifetime php.ini -tiedostossa. +Käynnistä asennusprosessi uudelleen.', + 'config-your-language' => 'Asennuksen kieli', + 'config-your-language-help' => 'Valitse kieli, jota haluat käyttää asennuksen ajan.', + 'config-wiki-language' => 'Wikin kieli', + 'config-wiki-language-help' => 'Valitse kieli, jota wikissä tullaan etupäässä käyttämään.', + 'config-back' => '← Takaisin', + 'config-continue' => 'Jatka →', + 'config-page-language' => 'Kieli', + 'config-page-welcome' => 'Tervetuloa MediaWikiin!', + 'config-page-dbconnect' => 'Tietokantaan yhdistäminen', + 'config-page-upgrade' => 'Olemassa olevan asennuksen päivitys', + 'config-page-dbsettings' => 'Tietokannan asetukset', + 'config-page-name' => 'Nimi', + 'config-page-options' => 'Asetukset', + 'config-page-install' => 'Asenna', + 'config-page-complete' => 'Valmis!', + 'config-page-restart' => 'Aloita asennus alusta', + 'config-page-readme' => 'Lue minut', + 'config-page-releasenotes' => 'Julkaisun tiedot', + 'config-page-copying' => 'Kopiointi', + 'config-page-upgradedoc' => 'Päivittäminen', + 'config-help-restart' => 'Haluatko poistaa kaikki annetut tiedot ja aloittaa asennuksen alusta?', + 'config-restart' => 'Kyllä', + 'config-welcome' => '=== Ympäristön tarkistukset === +Varmistetaan MediaWikin asennettavuus tähän ympäristöön. +Sinun pitäisi antaa näiden tarkistusten tulokset, jos tarvitset apua asennuksen aikana.', + 'config-sidebar' => '* [http://www.mediawiki.org MediaWikin kotisivu] +* [http://www.mediawiki.org/wiki/Help:Contents Käyttöopas] +* [http://www.mediawiki.org/wiki/Manual:Contents Hallintaopas] +* [http://www.mediawiki.org/wiki/Manual:FAQ UKK]', + 'config-env-good' => 'Asennusympäristö on tarkastettu. +Voit asentaa MediaWikin.', + 'config-env-bad' => 'Asennusympäristö on tarkastettu. +Et voi asentaa MediaWikiä.', + 'config-env-php' => 'PHP $1 on asennettu.', + 'config-no-db' => 'Sopivaa tietokanta-ajuria ei löytynyt!', + 'config-no-db-help' => 'Sinun täytyy asentaa tietokanta-ajuri PHP:lle. +Seuraavat tietokantatyypit on tuettu: $1. + +Jos käytät jaettua sivutilaa, kysy palveluntarjoajalta, josko se voisi asentaa sopivan tietokanta-ajurin. +Jos olet kääntänyt PHP:n itse, asenna se tietokantaohjelman kanssa, esimerkiksi käyttäen koodia ./configure --with-mysql. +Jos olet asentanut PHP:n Debian tai Ubuntu-paketista, sinun täytyy asentaa myös php5-mysql-moduuli.', + 'config-safe-mode' => "'''Varoitus:''' PHP:n [http://www.php.net/features.safe-mode safe mode] -tila on aktiivinen. +Se voi aiheuttaa ongelmia erityisesti tiedostojen tallentamisen ja matemaattisten kaavojen kanssa.", + 'config-pcre' => 'PCRE-tukimoduuli puuttuu. +MediaWiki vaatii toimiakseen Perl-yhteensopivat säännölliset lausekkeet.', + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] on asennettu', + 'config-apc' => '[http://www.php.net/apc APC] on asennettu.', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] on asennettu', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] on asennettu', + 'config-diff3-bad' => 'GNU diff3:a ei löytynyt.', + 'config-db-type' => 'Tietokannan tyyppi', + 'config-db-host' => 'Tietokantapalvelin', + 'config-db-name' => 'Tietokannan nimi', + 'config-db-username' => 'Tietokannan käyttäjätunnus', + 'config-db-password' => 'Tietokannan salasana', + 'config-db-install-help' => 'Anna käyttäjätunnus ja salasana, joita käytetään asennuksen aikana.', + 'config-db-account-lock' => 'Käytä samaa tunnusta ja salasanaa myös asennuksen jälkeen', + 'config-db-prefix' => 'Tietokantataulujen etuliite', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0, binääri', + 'config-charset-mysql5' => 'MySQL 4.1/5.0, UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0, taaksepäin yhteensopiva UTF-8', + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Oracle', + 'config-header-mysql' => 'MySQL-asetukset', + 'config-header-postgres' => 'PostgreSQL-asetukset', + 'config-header-sqlite' => 'SQLite-asetukset', + 'config-header-oracle' => 'Oracle-asetukset', + 'config-invalid-db-type' => 'Virheellinen tietokantatyyppi', + 'config-missing-db-name' => 'Kenttä »Tietokannan nimi» on pakollinen', + 'config-invalid-db-name' => '”$1” ei kelpaa tietokannan nimeksi. +Se voi sisältää vain kirjaimia (a-z, A-Z), numeroita (0-9) ja alaviivan (_).', + 'config-invalid-db-prefix' => '”$1” ei kelpaa tietokannan etuliitteeksi. +Se voi sisältää vain kirjaimia (a-z, A-Z), numeroita (0-9) ja alaviivan (_).', + 'config-postgres-old' => 'MediaWiki tarvitsee PostgreSQL:n version $1 tai uudemman. Nykyinen versio on $2.', + 'config-sqlite-name-help' => 'Valitse nimi joka yksilöi tämän wikin. +Älä käytä välilyöntejä tai viivoja. +Nimeä käytetään SQlite-tietokannan tiedostonimessä.', + 'config-sqlite-dir-unwritable' => 'Hakemistoon ”$1” kirjoittaminen epäonnistui. +Muuta hakemiston käyttöoikeuksia siten, että palvelinohjelmisto voi kirjoittaa siihen ja koita uudelleen.', + 'config-sqlite-readonly' => 'Tiedostoon $1 ei voi kirjoittaa.', + 'config-sqlite-fts3-downgrade' => 'PHP:stä puuttuu FTS3-tuki. Poistetaan ominaisuus käytöstä tietokantatauluista.', + 'config-show-table-status' => 'Kysely SHOW TABLE STATUS epäonnistui!', + 'config-mysql-engine' => 'Tallennusmoottori', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-binary' => 'Binääri', + 'config-mysql-utf8' => 'UTF-8', + 'config-site-name' => 'Wikin nimi', + 'config-project-namespace' => 'Projektinimiavaruus:', + 'config-ns-generic' => 'Projekti', + 'config-admin-name' => 'Nimesi', + 'config-admin-password' => 'Salasana', + 'config-admin-password-confirm' => 'Salasana uudelleen', + 'config-admin-name-blank' => 'Anna ylläpitäjän käyttäjänimi.', + 'config-admin-email' => 'Sähköpostiosoite', + 'config-profile-private' => 'Yksityinen wiki', + 'config-install-step-done' => 'tehty', + 'config-install-step-failed' => 'epäonnistui', + 'config-help' => 'ohje', +); + +/** French (Français) + * @author Aadri + * @author Crochet.david + * @author Hashar + * @author IAlex + * @author Jean-Frédéric + * @author McDutchie + * @author Peter17 + * @author Sherbrooke + * @author Verdy p + * @author Yumeki + */ +$messages['fr'] = array( + 'config-desc' => 'Le programme d’installation de MediaWiki', + 'config-title' => 'Installation de MediaWiki $1', + 'config-information' => 'Informations', + 'config-localsettings-upgrade' => 'Un fichier LocalSettings.php a été détecté. +Pour mettre à jour cette installation, veuillez saisir la valeur de $wgUpgradeKey dans le champ ci-dessous. +Vous la trouverez dans LocalSettings.php.', + 'config-localsettings-cli-upgrade' => 'Un fichier LocalSettings.php a été détecté. +Pour mettre à niveau cette installation, veuillez exécuter update.php', + 'config-localsettings-key' => 'Clé de mise à jour :', + 'config-localsettings-badkey' => 'La clé que vous avez fournie est incorrecte', + 'config-upgrade-key-missing' => 'Une installation existante de MediaWiki a été détectée. + +Pour mettre à jour cette installation, veuillez ajouter la ligne suivante à la fin de votre fichier LocalSettings.php + +$1', + 'config-localsettings-incomplete' => 'Le fichier LocalSettings.php existant semble être incomplet. +La variable $1 n’est pas définie. +Veuillez modifier LocalSettings.php de sorte que cette variable soit définie, puis cliquer sur « Continuer ».', + 'config-localsettings-connection-error' => 'Une erreur est survenue lors de la connexion à la base de données en utilisant la configuration spécifiée dans LocalSettings.php ou AdminSettings.php. Veuillez corriger cette configuration puis réessayer. + +$1', + 'config-session-error' => 'Erreur lors du démarrage de la session : $1', + 'config-session-expired' => "↓Les données de votre session semblent avoir expiré. +Les sessions sont configurées pour une durée de $1. +Vous pouvez l'augmenter en configurant session.gc_maxlifetime dans le fichier php.ini. +Redémarrer le processus d'installation.", + 'config-no-session' => 'Les données de votre session ont été perdues ! +Vérifiez votre fichier php.ini et assurez-vous que session.save_path contient le chemin d’un répertoire approprié.', + 'config-your-language' => 'Votre langue :', + 'config-your-language-help' => "Sélectionnez la langue à utiliser pendant le processus d'installation.", + 'config-wiki-language' => 'Langue du wiki :', + 'config-wiki-language-help' => 'Sélectionner la langue dans laquelle le wiki sera principalement écrit.', + 'config-back' => '← Retour', + 'config-continue' => 'Continuer →', + 'config-page-language' => 'Langue', + 'config-page-welcome' => 'Bienvenue sur MediaWiki !', + 'config-page-dbconnect' => 'Se connecter à la base de données', + 'config-page-upgrade' => 'Mettre à jour l’installation existante', + 'config-page-dbsettings' => 'Paramètres de la base de données', + 'config-page-name' => 'Nom', + 'config-page-options' => 'Options', + 'config-page-install' => 'Installer', + 'config-page-complete' => 'Terminé !', + 'config-page-restart' => 'Redémarrer l’installation', + 'config-page-readme' => 'Lisez-moi', + 'config-page-releasenotes' => 'Notes de version', + 'config-page-copying' => 'Copie', + 'config-page-upgradedoc' => 'Mise à jour', + 'config-page-existingwiki' => 'Wiki existant', + 'config-help-restart' => "Voulez-vous effacer toutes les données enregistrées que vous avez entrées et relancer le processus d'installation ?", + 'config-restart' => 'Oui, le relancer', + 'config-welcome' => "=== Vérifications liées à l’environnement === +Des vérifications de base sont effectuées pour voir si cet environnement est adapté à l'installation de MediaWiki. +Vous devriez indiquer les résultats de ces vérifications si vous avez besoin d’aide lors de l’installation.", + 'config-copyright' => "=== Droit d'auteur et conditions === + +$1 + +Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation (version 2 de la Licence, ou, à votre choix, toute version ultérieure). + +Ce programme est distribué dans l’espoir qu’il sera utile, mais '''sans aucune garantie''' : sans même les garanties implicites de '''commerciabilité''' ou d’'''adéquation à un usage particulier'''. +Voir la Licence Publique Générale GNU pour plus de détails. + +Vous devriez avoir reçu une copie de la Licence Publique Générale GNU avec ce programme ; dans le cas contraire, écrivez à la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ou [http://www.gnu.org/copyleft/gpl.html lisez-le en ligne].", + 'config-sidebar' => '* [http://www.mediawiki.org MediaWiki Accueil] +* [http://www.mediawiki.org/wiki/Help:Contents Guide de l’utilisateur] +* [http://www.mediawiki.org/wiki/Manual:Contents Guide de l’administrateur] +* [http://www.mediawiki.org/wiki/Manual:FAQ FAQ] +---- +* Lisez-moi +* Notes de pblication +* Copie +* Mise à jour', + 'config-env-good' => 'L’environnement a été vérifié. +Vous pouvez installer MediaWiki.', + 'config-env-bad' => 'L’environnement a été vérifié. +vous ne pouvez pas installer MediaWiki.', + 'config-env-php' => 'PHP $1 est installé.', + 'config-env-php-toolow' => 'PHP $1 est installé. +Cependant, MediaWiki requiert PHP $2 ou plus haut.', + 'config-unicode-using-utf8' => 'Utilisation de utf8_normalize.so par Brion Vibber pour la normalisation Unicode.', + 'config-unicode-using-intl' => "Utilisation de [http://pecl.php.net/intl l'extension PECL intl] pour la normalisation Unicode.", + 'config-unicode-pure-php-warning' => "'''Attention''': L'[http://pecl.php.net/intl extension PECL intl] n'est pas disponible pour la normalisation d’Unicode, retour à la version lente implémentée en PHP. +Si vous utilisez un site web très fréquenté, vous devriez lire ceci : [http://www.mediawiki.org/wiki/Unicode_normalization_considerations ''Unicode normalization''] (en anglais).", + 'config-unicode-update-warning' => "'''Attention''': La version installée du ''wrapper'' de normalisation Unicode utilise une vieille version de la [http://site.icu-project.org/ bibliothèque logicielle ''ICU Project'']. +Vous devriez faire une [http://www.mediawiki.org/wiki/Unicode_normalization_considerations mise à jour] (texte en anglais) si l'usage d'Unicode vous semble important.", + 'config-no-db' => 'Impossible de trouver un pilote de base de données approprié !', + 'config-no-db-help' => "Vous avez besoin d'installer un pilote de base de données pour PHP. +Les types de base de données suivants sont supportés: $1. + +Si vous êtes en hébergement mutualisé, demandez à votre fournisseur d'hébergement pour installer un pilote de base de données appropriée. +Si vous avez compilé PHP vous-même, reconfigurez-le en activant un client de base de données, par exemple en utilisant ./configure --with-mysql. +Si vous avez installé PHP à partir d'un paquet Debian ou Ubuntu, vous devez également installer le module php5-mysql.", + 'config-no-fts3' => "'''Attention :''' SQLite est compilé sans le module [http://sqlite.org/fts3.html FTS3] ; les fonctions de recherche ne seront pas disponibles sur ce moteur.", + 'config-register-globals' => "'''Attention : l'option [http://php.net/register_globals register_globals] de PHP est activée.''' +'''Désactivez-la si vous le pouvez.''' +MediaWiki fonctionnera, mais votre serveur sera exposé à de potentielles failles de sécurité.", + 'config-magic-quotes-runtime' => "'''Erreur fatale : [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] est activé !''' +Cette option corrompt les données de manière imprévisible. +Vous ne pouvez pas installer ou utiliser MediaWiki tant que cette option est activée.", + 'config-magic-quotes-sybase' => "'''Erreur fatale : [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybasee] est activé !''' +Cette option corrompt les données de manière imprévisible. +Vous ne pouvez pas installer ou utiliser MediaWiki tant que cette option est activée.", + 'config-mbstring' => "'''Erreur fatale : [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] est activé !''' +Cette option provoque des erreurs et peut corrompre les données de manière imprévisible. +Vous ne pouvez pas installer ou utiliser MediaWiki tant que cette option est activée.", + 'config-ze1' => "'''Erreur fatale : [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mod] est activé !''' +Cette option provoque des bugs horribles avec MediaWiki. +Vous ne pouvez pas installer ou utiliser MediaWiki tant que cette option est activée.", + 'config-safe-mode' => "'''Attention : le « [http://www.php.net/features.safe-mode safe mode] » est activé !''' +Ceci peut causer des problèmes, en particulier si vous utilisez le téléversement de fichiers et le support de math.", + 'config-xml-bad' => 'Le module XML de PHP est manquant. +MediaWiki requiert des fonctions de ce module et ne fonctionnera pas avec cette configuration. +Si vous êtes sous Mandrake, installez le paquet php-xml.', + 'config-pcre' => "Le module de support PCRE semble manquer. +MediaWiki requiert les fonctions d'expression régulière compatible avec Perl.", + 'config-pcre-no-utf8' => "'''Erreur fatale''': Le module PCRE de PHP semble être compilé sans le support PCRE_UTF8. +MédiaWiki nécessite la gestion d’UTF-8 pour fonctionner correctement.", + 'config-memory-raised' => 'Le paramètre memory_limit de PHP était à $1, porté à $2.', + 'config-memory-bad' => "'''Attention :''' Le paramètre memory_limit de PHP est à $1. +Cette valeur est probablement trop faible. +Il est possible que l’installation échoue !", + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] est installé', + 'config-apc' => '[http://www.php.net/apc APC] est installé', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] est installé', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] est installé', + 'config-no-cache' => "'''Attention :''' Impossible de trouver [http://eaccelerator.sourceforge.net eAccelerator], [http://www.php.net/apc APC], [http://trac.lighttpd.net/xcache/ XCache] ou [http://www.iis.net/download/WinCacheForPhp WinCache]. +La mise en cache d'objets n'est pas activée.", + 'config-diff3-bad' => 'GNU diff3 introuvable.', + 'config-imagemagick' => "ImageMagick trouvé : $1. +La miniaturisation d'images sera activée si vous activez le téléversement de fichiers.", + 'config-gd' => "La bibliothèque graphique GD intégrée a été trouvée. +La miniaturisation d'images sera activée si vous activez le téléversement de fichiers.", + 'config-no-scaling' => "Impossible de trouver la bibliothèque GD ou ImageMagick. +La miniaturisation d'images sera désactivé.", + 'config-no-uri' => "'''Erreur :''' Impossible de déterminer l'URI du script actuel. +Installation avortée.", + 'config-uploads-not-safe' => "'''Attention:''' Votre répertoire par défaut pour les téléchargements, $1, est vulnérable, car il peut exécuter n'importe quel script. +Bien que MediaWiki vérifie tous les fichiers téléchargés, il est fortement recommandé de [http://www.mediawiki.org/wiki/Manual:Security#Upload_security fermer cette vulnérabilité de sécurité] (texte en anglais) avant d'activer les téléchargements.", + 'config-brokenlibxml' => 'Votre système utilise une combinaison de versions de PHP et libxml2 qui est boguée et peut engendrer des corruptions cachées de données dans MediaWiki et d’autres applications web. +Veuillez mettre à jour votre système vers PHP 5.2.9 ou plus récent et libxml2 2.7.3 ou plus récent ([http://bugs.php.net/bug.php?id=45996 bogue déposé auprès de PHP]). +Installation interrompue.', + 'config-using531' => 'MediaWiki ne peut pas être utilisé avec PHP $1 à cause d’un bogue affectant les paramètres passés par référence à __call(). +Veuillez mettre à jour votre système vers PHP 5.3.2 ou plus récent ou revenir à PHP 5.3.0 pour résoudre ce problème. +Installation interrompue.', + 'config-db-type' => 'Type de base de données :', + 'config-db-host' => 'Nom d’hôte de la base de données :', + 'config-db-host-help' => "Si votre serveur de base de données est sur un serveur différent, saisissez ici son nom d’hôte ou son adresse IP. + +Si vous utilisez un hébergement mutualisé, votre hébergeur doit vous avoir fourni le nom d’hôte correct dans sa documentation. + +Si vous installez sur un serveur Windows et utilisez MySQL, « localhost » peut ne pas fonctionner comme nom de serveur. S'il ne fonctionne pas, essayez « 127.0.0.1 » comme adresse IP locale.", + 'config-db-host-oracle' => 'Nom TNS de la base de données :', + 'config-db-host-oracle-help' => 'Entrez un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nom de connexion locale] valide ; un fichier tnsnames.ora doit être visible par cette installation.
    Si vous utilisez les bibliothèques clientes version 10g ou plus récentes, vous pouvez également utiliser la méthode de nommage [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].', + 'config-db-wiki-settings' => 'Identifier ce wiki', + 'config-db-name' => 'Nom de la base de données :', + 'config-db-name-help' => "Choisissez un nom qui identifie votre wiki. +Il ne doit pas contenir d'espaces. + +Si vous utilisez un hébergement web partagé, votre hébergeur vous fournira un nom spécifique de base de données à utiliser, ou bien vous permet de créer des bases de données via un panneau de contrôle.", + 'config-db-name-oracle' => 'Schéma de base de données :', + 'config-db-account-oracle-warn' => "Il existe trois scénarios pris en charge pour l’installation d'Oracle comme backend de base : + +Si vous souhaitez créer un compte de base de données dans le cadre de la procédure d’installation, veuillez fournir un compte avec le rôle de SYSDBA comme compte de base de données pour l’installation et spécifiez les informations d’identification souhaitées pour le compte d'accès au web, sinon vous pouvez créer le compte d’accès web manuellement et fournir uniquement ce compte (si elle a exigé des autorisations nécessaires pour créer les objets de schéma) ou fournir deux comptes différents, l’un avec les privilèges de créer et une restreinte pour l’accès web. + +Un script pour créer un compte avec des privilèges requis peut être trouvé dans le répertoire « entretien/oracle/ » de cette installation. N’oubliez pas que le fait de l’utilisation d’un compte limité désactive toutes les fonctionnalités d’entretien avec le compte par défaut.", + 'config-db-install-account' => "Compte d'utilisateur pour l'installation", + 'config-db-username' => 'Nom d’utilisateur de la base de données :', + 'config-db-password' => 'Mot de passe de la base de données :', + 'config-db-password-empty' => "Veuillez entrer un mot de passe pour le nouvel compte de la base de données : $1. +Bien qu'il soit possible de créer un compte sans mot de passe, ce n'est pas recommandé pour des questions de sécurité.", + 'config-db-install-username' => "Entrez le nom d’utilisateur qui sera utilisé pour se connecter à la base de données pendant le processus d'installation. Il ne s’agit pas du nom d’utilisateur du compte MediaWiki, mais du nom d’utilisateur pour votre base de données.", + 'config-db-install-password' => "Entrez le mot de passe qui sera utilisé pour se connecter à la base de données pendant le processus d'installation. Il ne s’agit pas du mot de passe du compte MediaWiki, mais du mot de passe pour votre base de données.", + 'config-db-install-help' => "Entrez le nom d'utilisateur et le mot de passe qui seront utilisés pour se connecter à la base de données pendant le processus d'installation.", + 'config-db-account-lock' => "Utiliser le même nom d'utilisateur et le même mot de passe pendant le fonctionnement habituel", + 'config-db-wiki-account' => "Compte d'utilisateur pour le fonctionnement habituel", + 'config-db-wiki-help' => "Entrez le nom d'utilisateur et le mot de passe qui seront utilisés pour se connecter à la base de données pendant le fonctionnement habituel du wiki. +Si le compte n'existe pas, et le compte d'installation dispose de privilèges suffisants, ce compte d'utilisateur sera créé avec les privilèges minimum requis pour faire fonctionner le wiki.", + 'config-db-prefix' => 'Préfixe des tables de la base de données :', + 'config-db-prefix-help' => "Si vous avez besoin de partager une base de données entre plusieurs wikis, ou entre MediaWiki et une autre application Web, vous pouvez choisir d'ajouter un préfixe à tous les noms de table pour éviter les conflits. +Ne pas utiliser des espaces. + +Ce champ est généralement laissé vide.", + 'config-db-charset' => 'Jeu de caractères de la base de données', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binaire', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 rétrocompatible UTF-8', + 'config-charset-help' => "'''Attention:''' Si vous utilisez ''backwards-compatible UTF-8'' sur MySQL 4.1+, et ensuite sauvegardez la base de données avec mysqldump, cela peut détruire tous les caractères non-ASCII, ce qui rend inutilisable vos copies de sauvegarde de façon irréversible ! + +En ''mode binaire'', MediaWiki stocke le texte UTF-8 dans des champs binaires de la base de données. C'est plus efficace que le ''mode UTF-8'' de MySQL, et vous permet d'utiliser toute la gamme des caractères Unicode. +En ''mode UTF-8'', MySQL connaîtra le jeu de caractères de vos données et pourra présenter et convertir les données de manière appropriée, mais il ne vous laissera pas stocker les caractères au-dessus du [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plan multilingue de base] (en anglais).", + 'config-mysql-old' => 'MySQL $1 ou version ultérieure est requis, vous avez $2.', + 'config-db-port' => 'Port de la base de données :', + 'config-db-schema' => 'Schéma pour MediaWiki', + 'config-db-schema-help' => "Les schémas ci-dessus sont généralement corrects. +Ne les changez que si vous êtes sûr que c'est nécessaire.", + 'config-sqlite-dir' => 'Dossier des données SQLite :', + 'config-sqlite-dir-help' => "SQLite stocke toutes les données dans un fichier unique. + +Le répertoire que vous inscrivez doit être accessible en écriture par le serveur lors de l'installation. + +Il '''ne faut pas''' qu'il soit accessible via le web, c'est pourquoi il n'est pas à l'endroit où vos fichiers PHP sont. + +L'installateur écrira un fichier .htaccess en même temps, mais s'il y a échec, quelqu'un peut accéder à votre base de données. +Cela comprend les données des utilisateurs (adresses de courriel, mots de passe hachés) ainsi que des révisions supprimées et d'autres données confidentielles du wiki. + +Envisagez de placer la base de données ailleurs, par exemple dans /var/lib/mediawiki/yourwiki.", + 'config-oracle-def-ts' => "Espace de stockage (''tablespace'') par défaut :", + 'config-oracle-temp-ts' => "Espace de stockage (''tablespace'') temporaire :", + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Oracle', + 'config-support-info' => "MediaWiki supporte ces systèmes de bases de données : + +$1 + +Si vous ne voyez pas le système de base de données que vous essayez d'utiliser ci-dessous, alors suivez les instructions ci-dessus (voir liens) pour activer le support.", + 'config-support-mysql' => '* $1 est le premier choix pour MediaWiki et est mieux pris en charge ([http://www.php.net/manual/en/mysql.installation.php how to compile PHP with MySQL support])', + 'config-support-postgres' => "* $1 est un système de base de données populaire et ''open source'' qui peut être une alternative à MySQL ([http://www.php.net/manual/en/pgsql.installation.php how to compile PHP with PostgreSQL support])", + 'config-support-sqlite' => '* $1 est un système de base de données léger qui est bien supporté. ([http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], utilise PDO)', + 'config-support-oracle' => '* $1 est un système commercial de gestion de base de données d’entreprise. ([Http://www.php.net/manual/en/oci8.installation.php Comment compiler PHP avec le support OCI8])', + 'config-header-mysql' => 'Paramètres de MySQL', + 'config-header-postgres' => 'Paramètres de PostgreSQL', + 'config-header-sqlite' => 'Paramètres de SQLite', + 'config-header-oracle' => 'Paramètres d’Oracle', + 'config-invalid-db-type' => 'Type de base de données non valide', + 'config-missing-db-name' => 'Vous devez saisir une valeur pour « Nom de la base de données »', + 'config-missing-db-host' => "Vous devez entrer une valeur pour « l'hôte de la base de données »", + 'config-missing-db-server-oracle' => 'Vous devez saisir une valeur pour le « Nom TNS de la base de données »', + 'config-invalid-db-server-oracle' => 'Le nom TNS de la base de données (« $1 ») est invalide. +Il ne peut contenir que des lettres latines de base (a-z, A-Z), des chiffres (0-9), des caractères de soulignement (_) et des points (.).', + 'config-invalid-db-name' => 'Nom de la base de données invalide (« $1 »). +Il ne peut contenir que des lettres latines (a-z, A-Z), des chiffres (0-9), des caractères de soulignement (_) et des tirets (-).', + 'config-invalid-db-prefix' => 'Préfixe de la base de données non valide « $1 ». +Il ne peut contenir que des lettres latines (a-z, A-Z), des chiffres (0-9), des caractères de soulignement (_) et des tirets (-).', + 'config-connection-error' => '$1. + +Vérifier le nom d’hôte, le nom d’utilisateur et le mot de passe ci-dessous puis réessayer.', + 'config-invalid-schema' => 'Schéma invalide pour MediaWiki « $1 ». +Utilisez seulement des lettres latines (a-z, A-Z), des chiffres (0-9) et des caractères de soulignement (_).', + 'config-db-sys-create-oracle' => "L'installateur ne reconnaît que les compte SYSDBA lors de la création d'un nouveau compte.", + 'config-db-sys-user-exists-oracle' => 'Le compte « $1 » existe déjà. Un SYSDBA peut seulement servir à créer un nouveau comtpe.', + 'config-postgres-old' => 'PostgreSQL $1 ou version ultérieure est requis, vous avez $2.', + 'config-sqlite-name-help' => "Choisir un nom qui identifie votre wiki. +Ne pas utiliser des espaces ou des traits d'union. +Il sera utilisé pour le fichier de données SQLite.", + 'config-sqlite-parent-unwritable-group' => "Impossible de créer le répertoire de données $1, parce que le répertoire parent $2 n'est pas accessible en écriture par le serveur Web. + +L'utilisateur du serveur web est connu. +Rendre le répertoire $3 accessible en écriture pour continuer. +Sur un système UNIX/Linux, saisir : + +
    cd $2 
    +mkdir $3 
    +chgrp $4 $3 
    +chmod g+w $3
    ", + 'config-sqlite-parent-unwritable-nogroup' => "Impossible de créer le répertoire de données $1, parce que le répertoire parent $2 n'est pas accessible en écriture par le serveur Web. + +L'utilisateur du serveur web est inconnu. +Rendre le répertoire $3 globalement accessible en écriture pour continuer. +Sur un système UNIX/Linux, saisir : + +
    cd $2 
    +mkdir $3 
    +chmod a+w $3
    ", + 'config-sqlite-mkdir-error' => "Erreur de création du répertoire de données « $1 ». +Vérifiez l'emplacement et essayez à nouveau.", + 'config-sqlite-dir-unwritable' => "Impossible d'écrire dans le répertoire « $1 ». +Changer les permissions de sorte que le serveur peut y écrire et essayez à nouveau.", + 'config-sqlite-connection-error' => '$1. + +Vérifier le répertoire des données et le nom de la base de données ci-dessous et réessayer.', + 'config-sqlite-readonly' => "Le fichier $1 n'est pas accessible en écriture.", + 'config-sqlite-cant-create-db' => 'Impossible de créer le fichier de base de données $1.', + 'config-sqlite-fts3-downgrade' => 'PHP ne vient pas avec FTS3, les tables sont diminuées.', + 'config-can-upgrade' => "Il y a des tables MediaWiki dans cette base de données. +Pour les mettre au niveau de MediaWiki $1, cliquez sur '''Continuer'''.", + 'config-upgrade-done' => "Mise à jour complétée. + +Vous pouvez maintenant [$1 commencer à utiliser votre wiki]. + +Si vous souhaitez régénérer votre fichier LocalSettings.php, cliquez sur le bouton ci-dessous. +Ce '''n'est pas recommandé''' sauf si vous rencontrez des problèmes avec votre wiki.", + 'config-upgrade-done-no-regenerate' => 'Mise à jour terminée. + +Vous pouvez maintenant [$1 commencer à utiliser votre wiki].', + 'config-regenerate' => 'Regénérer LocalSettings.php →', + 'config-show-table-status' => 'Échec de la requête SHOW TABLE STATUS !', + 'config-unknown-collation' => "'''Attention:''' La base de données effectue un classement alphabétique (''collation'') inconnu.", + 'config-db-web-account' => "Compte de la base de données pour l'accès Web", + 'config-db-web-help' => "Sélectionnez le nom d'utilisateur et le mot de passe que le serveur web utilisera pour se connecter au serveur de base de données pendant le fonctionnement habituel du wiki.", + 'config-db-web-account-same' => "Utilisez le même compte que pour l'installation", + 'config-db-web-create' => "Créez le compte s'il n'existe pas déjà", + 'config-db-web-no-create-privs' => "Le compte que vous avez spécifié pour l'installation n'a pas de privilèges suffisants pour créer un compte. +Le compte que vous spécifiez ici doit déjà exister.", + 'config-mysql-engine' => 'Moteur de stockage :', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-engine-help' => "'''InnoDB''' est presque toujours la meilleure option, car il supporte bien l'[http://fr.wikipedia.org/wiki/Ordonnancement_dans_les_syst%C3%A8mes_d%27exploitation ordonnancement]. + +'''MyISAM''' peut être plus rapide dans les installations monoposte ou en lecture seule. Les bases de données MyISAM ont tendance à se corrompre plus souvent que celles d'InnoDB.", + 'config-mysql-charset' => 'Jeu de caractères de la base de données :', + 'config-mysql-binary' => 'Binaire', + 'config-mysql-utf8' => 'UTF-8', + 'config-mysql-charset-help' => "En ''mode binaire'', MediaWiki stocke le texte au format UTF-8 dans la base de données. C'est plus efficace que le ''UTF-8 mode'' de MySQL, et vous permet d'utiliser toute la gamme des caractères Unicode. + +En ''mode binaire'', MediaWiki stocke le texte UTF-8 dans des champs binaires de la base de données. C'est plus efficace que le ''mode UTF-8'' de MySQL, et vous permet d'utiliser toute la gamme des caractères Unicode. +En ''mode UTF-8'', MySQL connaîtra le jeu de caractères de vos données et pourra présenter et convertir les données de manière appropriée, mais il ne vous laissera pas stocker les caractères au-dessus du [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plan multilingue de base] (en anglais).", + 'config-site-name' => 'Nom du wiki :', + 'config-site-name-help' => 'Il apparaîtra dans la barre de titre du navigateur et en divers autres endroits.', + 'config-site-name-blank' => 'Entrez un nom de site.', + 'config-project-namespace' => 'Espace de noms du projet :', + 'config-ns-generic' => 'Projet', + 'config-ns-site-name' => 'Même nom que le wiki : $1', + 'config-ns-other' => 'Autre (préciser)', + 'config-ns-other-default' => 'MonWiki', + 'config-project-namespace-help' => "Suivant l'exemple de Wikipédia, plusieurs wikis gardent leurs pages de politique séparées de leurs pages de contenu, dans un ''espace de noms'' propre. +Tous les titres de page de cet espace de noms commence par un préfixe défini, que vous pouvez spécifier ici. +Traditionnellement, ce préfixe est dérivé du nom du wiki, mais il ne peut contenir des caractères de ponctuation tels que « # » ou « : ».", + 'config-ns-invalid' => "L'espace de noms spécifié « $1 » n'est pas valide. +Spécifiez un espace de noms pour le projet.", + 'config-ns-conflict' => "L'espace de noms spécifié « $1 » est en conflit avec un espace de noms par défaut de MediaWiki. +Choisir un autre espace de noms.", + 'config-admin-box' => 'Compte administrateur', + 'config-admin-name' => 'Votre nom :', + 'config-admin-password' => 'Mot de passe :', + 'config-admin-password-confirm' => 'Saisir à nouveau le mot de passe :', + 'config-admin-help' => "Entrez votre nom d'utilisateur préféré ici, par exemple « Jean Blogue ». +C'est le nom que vous utiliserez pour vous connecter au wiki.", + 'config-admin-name-blank' => "Entrez un nom d'administrateur.", + 'config-admin-name-invalid' => "Le nom d'utilisateur spécifié « $1 » n'est pas valide. +Indiquez un nom d'utilisateur différent.", + 'config-admin-password-blank' => 'Entrez un mot de passe pour le compte administrateur.', + 'config-admin-password-same' => "Le mot de passe doit être différent du nom d'utilisateur.", + 'config-admin-password-mismatch' => 'Les deux mots de passe que vous avez saisis ne correspondent pas.', + 'config-admin-email' => 'Adresse de courriel :', + 'config-admin-email-help' => "Entrez une adresse de courriel ici pour vous permettre de recevoir des courriels d'autres utilisateurs du wiki, réinitialiser votre mot de passe, et être informé des modifications apportées aux pages de votre liste de suivi. Vous pouvez laisser ce champ vide.", + 'config-admin-error-user' => "Erreur interne lors de la création d'un administrateur avec le nom « $1 ».", + 'config-admin-error-password' => "Erreur interne lors de l'inscription d'un mot de passe pour l'administrateur « $1 » :
    $2
    ", + 'config-admin-error-bademail' => 'Vous avez entré une adresse de courriel invalide', + 'config-subscribe' => "Abonnez-vous à la [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce liste d'annonce des nouvelles versions] (la page peut afficher le texte en français).", + 'config-subscribe-help' => "Il s'agit d'une liste de diffusion à faible volume utilisée servant à annoncer les nouvelles versions, y compris les versions améliorant la sécurité du logiciel. +Vous devriez y souscrire et mettre à jour votre version de MediaWiki lorsque de nouvelles versions sont publiées.", + 'config-almost-done' => 'Vous avez presque fini ! +Vous pouvez passer la configuration restante et installer immédiatement le wiki.', + 'config-optional-continue' => 'Me poser davantage de questions.', + 'config-optional-skip' => 'J’en ai assez, installer simplement le wiki.', + 'config-profile' => 'Profil des droits d’utilisateurs :', + 'config-profile-wiki' => 'Wiki traditionnel', + 'config-profile-no-anon' => 'Création de comte requise', + 'config-profile-fishbowl' => 'Éditeurs autorisés seulement', + 'config-profile-private' => 'Wiki privé', + 'config-profile-help' => "Les wikis fonctionnent mieux lorsque vous laissez le plus de personnes possible le modifier. +Avec MediaWiki, il est facile de vérifier les modifications récentes et de révoquer tout dommage créé par des utilisateurs débutants ou mal intentionnés. + +Cependant, de nombreuses autres utilisations ont été trouvées au logiciel et il n’est pas toujours facile de convaincre tout le monde des bénéfices de l’esprit wiki. +Vous avez donc le choix. + +'''{{int:config-profile-wiki}}''' autorise quiconque à modifier, y compris sans s’identifier. +'''{{int:config-profile-no-anon}}''' fournit plus de contrôle, par l’identification, mais peut rebuter les contributeurs occasionnels. + +'''{{int:config-profile-fishbowl}}''' autorise la modification par les utilisateurs approuvés, mais le public peut toujours lire les pages et leur historique. +'''{{int:config-profile-private}}''' n’autorise que les utilisateurs approuvés à voir et modifier les pages. + +Des configurations de droits d’utilisateurs plus complexes sont disponibles après l'installation, voir la [http://www.mediawiki.org/wiki/Manual:User_rights page correspondante du manuel].", + 'config-license' => "Droits d'auteur et licence :", + 'config-license-none' => 'Aucune licence en bas de page', + 'config-license-cc-by-sa' => "Creative Commons attribution partage à l'identique", + 'config-license-cc-by-nc-sa' => "Creative Commons attribution non commercial partage à l'identique", + 'config-license-cc-0' => 'Creative Commons Zero', + 'config-license-gfdl-old' => 'Licence de documentation libre GNU 1.2', + 'config-license-gfdl-current' => 'Licence de documentation libre GNU 1.3 ou plus récent', + 'config-license-pd' => 'Domaine public', + 'config-license-cc-choose' => 'Sélectionner une licence Creative Commons personnalisée', + 'config-license-help' => "Beaucoup de wikis publics mettent l'ensemble des contributions sous [http://freedomdefined.org/Definition/Fr licence libre]. +Cela contribue à créer un sentiment d'appartenance dans leur communauté et encourage les contributions sur le long terme. +Ce n'est généralement pas nécessaire pour un wiki privé ou d'entreprise. + +Si vous souhaitez utiliser des textes de Wikipédia, et souhaitez que Wikipédia réutilise des textes de votre wiki, vous devriez choisir la [http://creativecommons.org/licenses/by-sa/3.0/deed.fr licence ''Creative Commons Attribution Share Alike''] (CC-by-sa). + +Wikipédia a déjà été publié selon les termes de la [http://fr.wikipedia.org/wiki/Licence_de_documentation_libre_GNU ''GNU Free Documentation License''] (GFDL). +C'est encore une licence valide, mais elle possède des caractéristiques qui rendent difficiles la réutilisation et l'interprétation des textes.", + 'config-email-settings' => 'Paramètres de courriel', + 'config-enable-email' => 'Activer les courriels sortants', + 'config-enable-email-help' => 'Si vous souhaitez utiliser le courriel, vous devez [http://www.php.net/manual/en/mail.configuration.php configurer des paramètres PHP] (texte en anglais). +Si vous ne voulez pas du service de courriel, vous pouvez le désactiver ici.', + 'config-email-user' => 'Activer les courriels de utilisateur à utilisateur', + 'config-email-user-help' => "Permet à tous les utilisateurs d'envoyer des courriels à d'autres utilisateurs si cela est activé dans leurs préférences.", + 'config-email-usertalk' => 'Activer la notification des pages de discussion des utilisateurs', + 'config-email-usertalk-help' => 'Permet aux utilisateurs de recevoir une notification en cas de modification de leurs pages de discussion, si cela est activé dans leurs préférences.', + 'config-email-watchlist' => 'Activer la notification de la liste de suivi', + 'config-email-watchlist-help' => "Permet aux utilisateurs de recevoir des notifications à propos des pages qu'ils ont en suivi (si cette préférence est activée).", + 'config-email-auth' => "Activer l'authentification par courriel", + 'config-email-auth-help' => "Si cette option est activée, les utilisateurs doivent confirmer leur adresse de courriel en utilisant l'hyperlien envoyé à chaque fois qu'ils la définissent ou la modifient. +Seules les adresses authentifiées peuvent recevoir des courriels des autres utilisateurs ou lorsqu'il y a des notifications de modification. +L'activation de cette option est '''recommandée''' pour les wikis publics en raison d'abus potentiels des fonctionnalités de courriels.", + 'config-email-sender' => 'Adresse de courriel de retour :', + 'config-email-sender-help' => "Entrez l'adresse de courriel à utiliser comme adresse de retour des courriels sortant. +Les courriels rejetés y seront envoyés. +De nombreux serveurs de courriels exigent au moins un [http://fr.wikipedia.org/wiki/Nom_de_domaine nom de domaine] valide.", + 'config-upload-settings' => 'Téléchargement des images et des fichiers', + 'config-upload-enable' => 'Activer le téléchargement des fichiers', + 'config-upload-help' => "Le téléchargement des fichiers expose votre serveur à des risques de sécurité. +Pour plus d'informations, lire la section [http://www.mediawiki.org/wiki/Manual:Security ''Security''] du manuel d'installation (en anglais). + +Pour autoriser le téléchargement des fichiers, modifier le mode du sous-répertoire images qui se situe sous le répertoire racine de MediaWiki. +Ensuite, activez cette option.", + 'config-upload-deleted' => 'Répertoire pour les fichiers supprimés :', + 'config-upload-deleted-help' => 'Choisissez un répertoire qui servira à archiver les fichiers supprimés. +Idéalement, il ne devrait pas être accessible depuis le web.', + 'config-logo' => 'URL du logo :', + 'config-logo-help' => "L'habillage (''skin'') par défaut de MediaWiki comprend l'espace pour un logo de 135x160 pixels dans le coin supérieur gauche. +Téléchargez une image de la taille appropriée, et entrez l'URL ici. + +Si vous ne voulez pas d'un logo, laissez cette case vide.", + 'config-instantcommons' => "Activer ''InstantCommons''", + 'config-instantcommons-help' => "[http://www.mediawiki.org/wiki/InstantCommons InstantCommons] est un service qui permet d'utiliser les images, les sons et les autres médias disponibles sur le site [http://commons.wikimedia.org/ Wikimedia Commons]. +Pour se faire, il faut que MediaWiki accède à Internet. + +Pour plus d'informations sur ce service, y compris les instructions sur la façon de le configurer pour d'autres wikis que Wikimedia Commons, consultez le [http://mediawiki.org/wiki/Manual:\$wgForeignFileRepos manuel] (en anglais).", + 'config-cc-error' => "Le sélection d'une licence ''Creative Commons'' n'a donné aucun résultat. +Entrez le nom de la licence manuellement.", + 'config-cc-again' => 'Choisissez à nouveau...', + 'config-cc-not-chosen' => "Choisissez une licence ''Creative Commons'' et cliquez sur « Continuer ».", + 'config-advanced-settings' => 'Configuration avancée', + 'config-cache-options' => 'Paramètres pour la mise en cache des objets:', + 'config-cache-help' => "La mise en cache des objets améliore la vitesse de MediaWiki en mettant en cache les données fréquemment utilisées. +Les sites de taille moyenne à grande sont fortement encouragés à l'activer. Les petits sites y verront également des avantages.", + 'config-cache-none' => 'Aucune mise en cache (aucune fonctionnalité supprimée, mais la vitesse peut changer sur les wikis importants)', + 'config-cache-accel' => 'Mise en cache des objets PHP (APC, eAccelerator, XCache ou WinCache)', + 'config-cache-memcached' => 'Utiliser Memcached (nécessite une installation et une configuration supplémentaires)', + 'config-memcached-servers' => 'serveurs pour Memcached :', + 'config-memcached-help' => 'Liste des adresses IP à utiliser pour Memcached. +Elles doivent être séparés par des virgules et vous devez spécifier le port à utiliser. Par exemple : + 127.0.0.1:11211 + 192.168.1.25:1234', + 'config-memcache-needservers' => 'Vous avez sélectionné Memcached comme type de cache, mais ne précisez pas de serveur.', + 'config-memcache-badip' => 'Vous avez entré une adresse IP invalide pour Memcached: $1.', + 'config-memcache-noport' => "Vous n'avez pas entré un port pour le serveur Memcached : $1. +Si vous ne le connaissez pas, la valeur par défaut est 11211.", + 'config-memcache-badport' => 'Les numéros de port de Memcached sont situés entre $1 et $2.', + 'config-extensions' => 'Extensions', + 'config-extensions-help' => 'Les extensions énumérées ci-dessus ont été détectées dans votre répertoire ./extensions. + +Elles peuvent nécessiter une configuration supplémentaire, mais vous pouvez les activer maintenant', + 'config-install-alreadydone' => "'''Attention''': Vous semblez avoir déjà installé MediaWiki et tentez de l'installer à nouveau. +S'il vous plaît, allez à la page suivante.", + 'config-install-begin' => "En appuyant sur {{int:config-continue}}, vous commencerez l'installation de MediaWiki. +Si vous voulez apporter des modifications, appuyez sur Retour.", + 'config-install-step-done' => 'fait', + 'config-install-step-failed' => 'échec', + 'config-install-extensions' => 'Inclusion des extensions', + 'config-install-database' => 'Création de la base de données', + 'config-install-pg-schema-not-exist' => "Le schéma PostgreSQL n'existe pas", + 'config-install-pg-schema-failed' => "Échec lors de la création des tables. +Assurez-vous que l'utilisateur « $1 » peut écrire selon le schéma « $2 ».", + 'config-install-pg-commit' => 'Validation des modifications', + 'config-install-pg-plpgsql' => 'Vérification du language PL/pgSQL', + 'config-pg-no-plpgsql' => 'Vous devez installer le langage PL/pgSQL dans la base de données $1', + 'config-pg-no-create-privs' => "Le compte que vous avez spécifié pour l'installation n'a pas suffisamment de privilèges pour créer un compte.", + 'config-install-user' => "Création d'un utilisateur de la base de données", + 'config-install-user-alreadyexists' => "L'utilisateur « $1 » existe déjà.", + 'config-install-user-create-failed' => "Échec lors de la création de l'utilisateur « $1 » : $2", + 'config-install-user-grant-failed' => "Échec lors de l'ajout de permissions à l'utilisateur « $1 » : $2", + 'config-install-tables' => 'Création des tables', + 'config-install-tables-exist' => "'''Avertissement:''' Les tables MediaWiki semblent déjà exister. +Création omise.", + 'config-install-tables-failed' => "'''Erreur:''' échec lors de la création de la table avec l'erreur suivante: $1", + 'config-install-interwiki' => 'Remplissage par défaut de la table des interwikis', + 'config-install-interwiki-list' => 'Impossible de trouver le fichier interwiki.list.', + 'config-install-interwiki-exists' => "'''Attention:''' La table des interwikis semble déjà contenir des entrées. +La liste par défaut ne sera pas inscrite.", + 'config-install-stats' => 'Initialisation des statistiques', + 'config-install-keys' => 'Génération de la clé secrète', + 'config-install-sysop' => 'Création du compte administrateur', + 'config-install-subscribe-fail' => "Impossible de s'abonner à mediawiki-announce", + 'config-install-mainpage' => 'Création de la page principale avec un contenu par défaut', + 'config-install-extension-tables' => 'Création de tables pour les extensions activées', + 'config-install-mainpage-failed' => 'Impossible d’insérer la page principale: $1', + 'config-install-done' => "'''Félicitations!''' +Vous avez réussi à installer MediaWiki. + +Le programme d'installation a généré LocalSettings.php, un fichier qui contient tous les paramètres de configuration. + +Si le téléchargement n'a pas été offert, ou que vous l'avez annulé, vous pouvez démarrer à nouveau le téléchargement en cliquant ce lien : + +$3 + +'''Note''': Si vous ne le faites pas maintenant, ce fichier de configuration généré ne sera pas disponible plus tard si vous quittez l'installation sans le télécharger. + +Lorsque c'est fait, vous pouvez '''[$2 accéder à votre wiki]'''.", + 'config-download-localsettings' => 'Télécharger LocalSettings.php', + 'config-help' => 'aide', +); + +/** Galician (Galego) + * @author Toliño + */ +$messages['gl'] = array( + 'config-desc' => 'O programa de instalación de MediaWiki', + 'config-title' => 'Instalación de MediaWiki $1', + 'config-information' => 'Información', + 'config-localsettings-upgrade' => 'Detectouse un ficheiro LocalSettings.php. +Para actualizar esta instalación, introduza o valor de $wgUpgradeKey na caixa. +Pode atopalo en LocalSettings.php.', + 'config-localsettings-cli-upgrade' => 'Detectouse un ficheiro LocalSettings.php. +Para actualizar esta instalación, execute update.php', + 'config-localsettings-key' => 'Clave de actualización:', + 'config-localsettings-badkey' => 'A clave dada é incorrecta', + 'config-upgrade-key-missing' => 'Detectouse unha instalación existente de MediaWiki. +Para actualizar esta instalación, inclúa esta liña ao final do ficheiro LocalSettings.php: + +$1', + 'config-localsettings-incomplete' => 'Semella que o ficheiro LocalSettings.php existente está incompleto. +A variable $1 non está establecida. +Modifique o ficheiro LocalSettings.php de xeito que a variable quede establecida e prema en "Continuar".', + 'config-localsettings-connection-error' => 'Atopouse un erro ao conectar coa base de datos empregando a configuración especificada no ficheiro LocalSettings.php ou no ficheiro AdminSettings.php. Corrixa esta configuración e inténteo de novo. + +$1', + 'config-session-error' => 'Erro ao iniciar a sesión: $1', + 'config-session-expired' => 'Semella que os seus datos da sesión caducaron. +As sesións están configuradas para unha duración de $1. +Pode incrementar isto fixando session.gc_maxlifetime en php.ini. +Reinicie o proceso de instalación.', + 'config-no-session' => 'Perdéronse os datos da súa sesión! +Comprobe o seu php.ini e asegúrese de que en session.save_path está definido un directorio correcto.', + 'config-your-language' => 'A súa lingua:', + 'config-your-language-help' => 'Seleccione a lingua que se empregará durante o proceso de instalación.', + 'config-wiki-language' => 'Lingua do wiki:', + 'config-wiki-language-help' => 'Seleccione a lingua que predominará no wiki.', + 'config-back' => '← Volver', + 'config-continue' => 'Continuar →', + 'config-page-language' => 'Lingua', + 'config-page-welcome' => 'Benvido a MediaWiki!', + 'config-page-dbconnect' => 'Conectarse á base de datos', + 'config-page-upgrade' => 'Actualizar a instalación actual', + 'config-page-dbsettings' => 'Configuración da base de datos', + 'config-page-name' => 'Nome', + 'config-page-options' => 'Opcións', + 'config-page-install' => 'Instalar', + 'config-page-complete' => 'Completo!', + 'config-page-restart' => 'Reiniciar a instalación', + 'config-page-readme' => 'Léame', + 'config-page-releasenotes' => 'Notas de lanzamento', + 'config-page-copying' => 'Copiar', + 'config-page-upgradedoc' => 'Actualizar', + 'config-page-existingwiki' => 'Wiki existente', + 'config-help-restart' => 'Quere eliminar todos os datos gardados e reiniciar o proceso de instalación?', + 'config-restart' => 'Si, reiniciala', + 'config-welcome' => '=== Comprobación do entorno === +Cómpre realizar unhas comprobacións básicas para ver se o entorno é axeitado para a instalación de MediaWiki. +Deberá proporcionar os resultados destas comprobacións se necesita axuda durante a instalación.', + 'config-copyright' => "=== Dereitos de autor e termos de uso === + +$1 + +Este programa é software libre; pode redistribuílo e/ou modificalo segundo os termos da licenza pública xeral GNU publicada pola Free Software Foundation; versión 2 ou (na súa escolla) calquera outra posterior. + +Este programa distribúese coa esperanza de que poida ser útil, pero '''sen ningunha garantía'''; nin sequera a garantía implícita de '''comercialización''' ou '''adecuación a unha finalidade específica'''. +Olle a licenza pública xeral GNU para obter máis detalles. + +Debería recibir unha copia da licenza pública xeral GNU xunto ao programa; se non é así, escriba á Free Software Foundation, Inc., 51 da rúa Franklin, quinto andar, Boston, MA 02110-1301, Estados Unidos ou [http://www.gnu.org/copyleft/gpl.html lea a licenza en liña].", + 'config-sidebar' => '* [http://www.mediawiki.org/wiki/MediaWiki/gl Páxina principal de MediaWiki] +* [http://www.mediawiki.org/wiki/Help:Contents Guía de usuario] +* [http://www.mediawiki.org/wiki/Manual:Contents Guía de administrador] +* [http://www.mediawiki.org/wiki/Manual:FAQ Preguntas máis frecuentes] +---- +* Léame +* Notas de lanzamento +* Copia +* Actualización', + 'config-env-good' => 'Rematou a comprobación do entorno. +Pode instalar MediaWiki.', + 'config-env-bad' => 'Rematou a comprobación do entorno. +Non pode instalar MediaWiki.', + 'config-env-php' => 'Está instalado o PHP $1.', + 'config-env-php-toolow' => 'Está instalado o PHP $1. +Porén, MediaWiki necesita o PHP $2 ou superior.', + 'config-unicode-using-utf8' => 'Usando utf8_normalize.so de Brion Vibber para a normalización Unicode.', + 'config-unicode-using-intl' => 'Usando a [http://pecl.php.net/intl extensión intl PECL] para a normalización Unicode.', + 'config-unicode-pure-php-warning' => "'''Atención:''' A [http://pecl.php.net/intl extensión intl PECL] non está dispoñible para manexar a normalización Unicode; volvendo á implementación lenta de PHP puro. +Se o seu sitio posúe un alto tráfico de visitantes, debería ler un chisco sobre a [http://www.mediawiki.org/wiki/Unicode_normalization_considerations normalización Unicode].", + 'config-unicode-update-warning' => "'''Atención:''' A versión instalada da envoltura de normalización Unicode emprega unha versión vella da biblioteca [http://site.icu-project.org/ do proxecto ICU]. +Debería [http://www.mediawiki.org/wiki/Unicode_normalization_considerations actualizar] se o uso de Unicode é importante para vostede.", + 'config-no-db' => 'Non se puido atopar un controlador axeitado para a base de datos!', + 'config-no-db-help' => 'Debe instalar un controlador de base de datos para PHP. +Os tipos de base de datos soportados son os seguintes: $1. + +Se está nun aloxamento compartido, pregunte ao seu provedor de hospedaxe para instalar un controlador de base de datos axeitado. +Se compilou o PHP vostede mesmo, reconfigúreo activando un cliente de base de datos, por exemplo, usando ./configure --with-mysql. +Se instalou o PHP desde un paquete Debian ou Ubuntu, entón tamén necesita instalar o módulo php5-mysql.', + 'config-no-fts3' => "'''Atención:''' O SQLite está compilado sen o [http://sqlite.org/fts3.html módulo FTS3]; as características de procura non estarán dispoñibles nesta instalación.", + 'config-register-globals' => "'''Atención: A opción PHP [http://php.net/register_globals register_globals] está activada.''' +'''Desactívea se pode.''' +MediaWiki funcionará, pero o seu servidor está exposto a potenciais vulnerabilidades de seguridade.", + 'config-magic-quotes-runtime' => "'''Erro fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] está activado!''' +Esta opción corrompe os datos de entrada de xeito imprevisible. +Non pode instalar ou empregar MediaWiki a menos que esta opción estea desactivada.", + 'config-magic-quotes-sybase' => "'''Erro fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] está activado!''' +Esta opción corrompe os datos de entrada de xeito imprevisible. +Non pode instalar ou empregar MediaWiki a menos que esta opción estea desactivada.", + 'config-mbstring' => "'''Erro fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] está activado!''' +Esta opción causa erros e pode corromper os datos de xeito imprevisible. +Non pode instalar ou empregar MediaWiki a menos que esta opción estea desactivada.", + 'config-ze1' => "'''Erro fatal: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] está activado!''' +Esta opción causa erros horribles en MediaWiki. +Non pode instalar ou empregar MediaWiki a menos que esta opción estea desactivada.", + 'config-safe-mode' => "'''Atención:''' O [http://www.php.net/features.safe-mode safe mode] do PHP está activado. +Isto pode causar problemas, particularmente se emprega cargas de ficheiros e soporte de math.", + 'config-xml-bad' => 'Falta o módulo XML do PHP. +MediaWiki necesita funcións neste módulo e non funcionará con esta configuración. +Se está executando o Mandrake, instale o paquete php-xml.', + 'config-pcre' => 'Semella que falta o módulo de soporte PCRE. +MediaWiki necesita que funcionen as expresións regulares compatibles co Perl.', + 'config-pcre-no-utf8' => "'''Erro fatal:''' Semella que o módulo PCRE do PHP foi compilado sen o soporte PCRE_UTF8. +MediaWiki necesita soporte UTF-8 para funcionar correctamente.", + 'config-memory-raised' => 'O parámetro memory_limit do PHP é $1. Aumentado a $2.', + 'config-memory-bad' => "'''Atención:''' O parámetro memory_limit do PHP é $1. +Probablemente é un valor baixo de máis. +A instalación pode fallar!", + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] está instalado', + 'config-apc' => '[http://www.php.net/apc APC] está instalado', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] está instalado', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] está instalado', + 'config-no-cache' => "'''Atención:''' Non se puido atopar [http://eaccelerator.sourceforge.net eAccelerator], [http://www.php.net/apc APC], [http://trac.lighttpd.net/xcache/ XCache] ou [http://www.iis.net/download/WinCacheForPhp WinCache]. +A caché de obxectos está desactivada.", + 'config-diff3-bad' => 'GNU diff3 non se atopou.', + 'config-imagemagick' => 'ImageMagick atopado: $1. +As miniaturas de imaxes estarán dispoñibles se activa as cargas.', + 'config-gd' => 'Atopouse a biblioteca gráfica GD integrada. +As miniaturas de imaxes estarán dispoñibles se activa as cargas.', + 'config-no-scaling' => 'Non se puido atopar a biblioteca GD ou ImageMagick. +As miniaturas de imaxes estarán desactivadas.', + 'config-no-uri' => "'''Erro:''' Non se puido determinar o URI actual. +Instalación abortada.", + 'config-uploads-not-safe' => "'''Atención:''' O seu directorio por defecto para as cargas, $1, é vulnerable a execucións arbitrarias de escrituras. +Aínda que MediaWiki comproba todos os ficheiros cargados por se houbese ameazas de seguridade, é amplamente recomendable [http://www.mediawiki.org/wiki/Manual:Security#Upload_security pechar esta vulnerabilidade de seguridade] antes de activar as cargas.", + 'config-brokenlibxml' => 'O seu sistema ten unha combinación de versións de PHP e libxml2 que pode ser problemático e causar corrupción de datos en MediaWiki e outras aplicacións web. +Actualice o sistema á versión 5.2.9 ou posterior do PHP e á 2.7.3 ou posterior de libxml2 ([http://bugs.php.net/bug.php?id=45996 erro presentado co PHP]). +Instalación abortada.', + 'config-using531' => 'O PHP $1 non é compatible con MediaWiki debido a un erro que afecta aos parámetros de referencia de __call(). +Actualice o sistema á versión 5.3.2 ou posterior do PHP ou volva á versión 5.3.0 do PHP para arranxar o problema. +Instalación abortada.', + 'config-db-type' => 'Tipo de base de datos:', + 'config-db-host' => 'Servidor da base de datos:', + 'config-db-host-help' => 'Se o servidor da súa base de datos está nun servidor diferente, escriba o nome do servidor ou o enderezo IP aquí. + +Se está usando un aloxamento web compartido, o seu provedor de hospedaxe debe darlle o nome de servidor correcto na súa documentación. + +Se está a realizar a instalación nun servidor de Windows con MySQL, o nome "localhost" pode non valer como servidor. Se non funcionase, inténteo con "127.0.0.1" como enderezo IP local.', + 'config-db-host-oracle' => 'TNS da base de datos:', + 'config-db-host-oracle-help' => 'Insira un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nome de conexión local] válido; cómpre que haxa visible un ficheiro tnsnames.ora para esta instalación.
    Se está a empregar bibliotecas cliente versión 10g ou máis recentes, tamén pode usar o método de atribución de nomes [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].', + 'config-db-wiki-settings' => 'Identificar o wiki', + 'config-db-name' => 'Nome da base de datos:', + 'config-db-name-help' => 'Escolla un nome que identifique o seu wiki. +Non debe conter espazos. + +Se está usando un aloxamento web compartido, o seu provedor de hospedaxe daralle un nome específico para a base de datos ou deixaralle crear unha a través do panel de control.', + 'config-db-name-oracle' => 'Esquema da base de datos:', + 'config-db-account-oracle-warn' => 'Existen tres escenarios soportados para a instalación de Oracle como fin da base de datos: + +Se quere crear unha conta para a base de datos como parte do proceso de instalación, proporcione unha conta co papel SYSDBA e especifique as credenciais desexadas para a conta; senón pode crear a conta manualmente e dar só esa conta (se ten os permisos necesarios para crear os obxectos do esquema) ou fornecer dous contas diferentes, unha con privilexios de creación e outra restrinxida para o acceso á web. + +A escritura para crear unha conta cos privilexios necesarios atópase no directorio "maintenance/oracle/" desta instalación. Teña en conta que o emprego de contas restrinxidas desactivará todas as operacións de mantemento da conta predeterminada.', + 'config-db-install-account' => 'Conta de usuario para a instalación', + 'config-db-username' => 'Nome de usuario da base de datos:', + 'config-db-password' => 'Contrasinal da base de datos:', + 'config-db-password-empty' => 'Introduza un contrasinal para o novo usuario da base de datos: $1. +Malia que é posible crear usuarios sen contrasinal, esta práctica non é segura.', + 'config-db-install-username' => 'Escriba o nome de usuario que empregará para conectarse á base de datos durante o proceso de instalación. Este non é o nome de usuario da conta de MediaWiki, trátase do nome de usuario para a súa base de datos.', + 'config-db-install-password' => 'Escriba o contrasinal que empregará para conectarse á base de datos durante o proceso de instalación. Este non é o contrasinal da conta de MediaWiki, trátase do contrasinal para a súa base de datos.', + 'config-db-install-help' => 'Introduza o nome de usuario e contrasinal que se usará para conectar á base de datos durante o proceso de instalación.', + 'config-db-account-lock' => 'Use o mesmo nome de usuario e contrasinal despois do proceso de instalación', + 'config-db-wiki-account' => 'Conta de usuario para despois do proceso de instalación', + 'config-db-wiki-help' => 'Introduza o nome de usuario e mais o contrasinal que se usarán para conectar á base de datos durante o funcionamento habitual do wiki. +Se a conta non existe e a conta de instalación ten privilexios suficientes, esa conta de usuario será creada cos privilexios mínimos necesarios para o funcionamento do wiki.', + 'config-db-prefix' => 'Prefixo das táboas da base de datos:', + 'config-db-prefix-help' => 'Se necesita compartir unha base de datos entre varios wikis ou entre MediaWiki e outra aplicación web, pode optar por engadir un prefixo a todos os nomes da táboa para evitar conflitos. +Non utilice espazos. + +O normal é que este campo quede baleiro.', + 'config-db-charset' => 'Conxunto de caracteres da base de datos', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binario', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 retrocompatible UTF-8', + 'config-charset-help' => "'''Atención:''' Se emprega '''backwards-compatible UTF-8''' no MySQL 4.1+ e posteriormente realiza unha copia de seguridade da base de datos con mysqldump, pode destruír todos os caracteres que non sexan ASCII, corrompendo de xeito irreversible as súas copias! + +No '''modo binario''', MediaWiki almacena texto UTF-8 na base de datos en campos binarios. +Isto é máis eficaz ca o modo UTF-8 de MySQL e permítelle usar o rango completo de caracteres Unicode. +No '''modo UTF-8''', MySQL saberá o xogo de caracteres dos seus datos e pode presentar e converter os datos de maneira axeitada, +pero non lle deixará gardar caracteres por riba do [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plan multilingüe básico].", + 'config-mysql-old' => 'Necesítase MySQL $1 ou posterior; ten a versión $2.', + 'config-db-port' => 'Porto da base de datos:', + 'config-db-schema' => 'Esquema para MediaWiki', + 'config-db-schema-help' => 'O normal é que este esquema sexa correcto. +Cámbieo soamente se sabe que é necesario.', + 'config-sqlite-dir' => 'Directorio de datos SQLite:', + 'config-sqlite-dir-help' => "SQLite recolle todos os datos nun ficheiro único. + +O servidor web debe ter permisos sobre o directorio para que poida escribir nel durante a instalación. + +Ademais, o servidor '''non''' debe ser accesible a través da web, motivo polo que non está no mesmo lugar ca os ficheiros PHP. + +Asemade, o programa de instalación escribirá un ficheiro .htaccess, pero se erra alguén pode obter acceso á súa base de datos. +Isto inclúe datos de usuario (enderezos de correo electrónico, contrasinais codificados), así como revisións borradas e outros datos restrinxidos no wiki. + +Considere poñer a base de datos nun só lugar, por exemplo en /var/lib/mediawiki/oseuwiki.", + 'config-oracle-def-ts' => 'Espazo de táboas por defecto:', + 'config-oracle-temp-ts' => 'Espazo de táboas temporal:', + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Oracle', + 'config-support-info' => 'MediaWiki soporta os seguintes sistemas de bases de datos: + +$1 + +Se non ve listado a continuación o sistema de base de datos que intenta usar, siga as instrucións ligadas enriba para activar o soporte.', + 'config-support-mysql' => '* $1 é o obxectivo principal para MediaWiki e está mellor soportado ([http://www.php.net/manual/en/mysql.installation.php como compilar o PHP con soporte MySQL])', + 'config-support-postgres' => '* $1 é un sistema de base de datos popular e de código aberto como alternativa a MySQL ([http://www.php.net/manual/en/pgsql.installation.php como compilar o PHP con soporte PostgreSQL]). É posible que haxa algúns pequenos erros e non se recomenda o seu uso nun entorno de produción.', + 'config-support-sqlite' => '* $1 é un sistema de base de datos lixeiro moi ben soportado. ([http://www.php.net/manual/en/pdo.installation.php Como compilar o PHP con soporte SQLite], emprega PDO)', + 'config-support-oracle' => '* $1 é un sistema comercial de xestión de base de datos de empresa. ([http://www.php.net/manual/en/oci8.installation.php Como compilar PHP con soporte OCI8])', + 'config-header-mysql' => 'Configuración do MySQL', + 'config-header-postgres' => 'Configuración do PostgreSQL', + 'config-header-sqlite' => 'Configuración do SQLite', + 'config-header-oracle' => 'Configuración do Oracle', + 'config-invalid-db-type' => 'Tipo de base de datos incorrecto', + 'config-missing-db-name' => 'Debe escribir un valor "Nome da base de datos"', + 'config-missing-db-host' => 'Debe escribir un valor "Servidor da base de datos"', + 'config-missing-db-server-oracle' => 'Debe escribir un valor "TNS da base de datos"', + 'config-invalid-db-server-oracle' => 'O TNS da base de datos, "$1", é incorrecto. +Só pode conter letras ASCII (a-z, A-Z), números (0-9), guións baixos (_) e puntos (.).', + 'config-invalid-db-name' => 'O nome da base de datos, "$1", é incorrecto. +Só pode conter letras ASCII (a-z, A-Z), números (0-9), guións baixos (_) e guións (-).', + 'config-invalid-db-prefix' => 'O prefixo da base de datos, "$1", é incorrecto. +Só pode conter letras ASCII (a-z, A-Z), números (0-9), guións baixos (_) e guións (-).', + 'config-connection-error' => '$1. + +Comprobe o servidor, nome de usuario e contrasinal que hai a continuación e inténteo de novo.', + 'config-invalid-schema' => 'O esquema de MediaWiki, "$1", é incorrecto. +Só pode conter letras ASCII (a-z, A-Z), números (0-9) e guións baixos (_).', + 'config-db-sys-create-oracle' => 'O programa de instalación soamente soporta o emprego de contas SYSDBA como método para crear unha nova conta.', + 'config-db-sys-user-exists-oracle' => 'A conta de usuario "$1" xa existe. SYSDBA soamente se pode empregar para a creación dunha nova conta!', + 'config-postgres-old' => 'Necesítase PostgreSQL $1 ou posterior; ten a versión $2.', + 'config-sqlite-name-help' => 'Escolla un nome que identifique o seu wiki. +Non utilice espazos ou guións. +Este nome será utilizado para o ficheiro de datos SQLite.', + 'config-sqlite-parent-unwritable-group' => 'Non se puido crear o directorio de datos $1, porque o servidor web non pode escribir no directorio pai $2. + +O programa de instalación determinou o usuario que executa o seu servidor web. +Para continuar, faga que se poida escribir no directorio $3. +Nun sistema Unix/Linux cómpre realizar: + +
    cd $2
    +mkdir $3
    +chgrp $4 $3
    +chmod g+w $3
    ', + 'config-sqlite-parent-unwritable-nogroup' => 'Non se puido crear o directorio de datos $1, porque o servidor web non pode escribir no directorio pai $2. + +O programa de instalación non puido determinar o usuario que executa o seu servidor web. +Para continuar, faga que se poida escribir globalmente no directorio $3. +Nun sistema Unix/Linux cómpre realizar: + +
    cd $2
    +mkdir $3
    +chmod a+w $3
    ', + 'config-sqlite-mkdir-error' => 'Erro ao crear o directorio de datos "$1". +Comprobe a localización e inténteo de novo.', + 'config-sqlite-dir-unwritable' => 'Non se puido escribir o directorio "$1". +Cambie os permisos para que o servidor poida escribir nel e inténteo de novo.', + 'config-sqlite-connection-error' => '$1. + +Comprobe o directorio de datos e o nome da base de datos que hai a continuación e inténteo de novo.', + 'config-sqlite-readonly' => 'Non se pode escribir no ficheiro $1.', + 'config-sqlite-cant-create-db' => 'Non se puido crear o ficheiro da base de datos $1.', + 'config-sqlite-fts3-downgrade' => 'Falta o soporte FTS3 para o PHP; diminuíndo as táboas', + 'config-can-upgrade' => "Existen táboas MediaWiki nesta base de datos. +Para actualizalas a MediaWiki \$1, prema sobre \"'''Continuar'''\".", + 'config-upgrade-done' => "Actualización completada. + +Agora pode [$1 comezar a utilizar o seu wiki]. + +Se quere rexenerar o seu ficheiro LocalSettings.php, prema no botón que aparece a continuación. +Isto '''non é recomendable''' a menos que estea a ter problemas co seu wiki.", + 'config-upgrade-done-no-regenerate' => 'Actualización completada. + +Xa pode [$1 comezar a usar o seu wiki].', + 'config-regenerate' => 'Rexenerar LocalSettings.php →', + 'config-show-table-status' => 'A pescuda SHOW TABLE STATUS fallou!', + 'config-unknown-collation' => "'''Atención:''' A base de datos está a empregar unha clasificación alfabética irrecoñecible.", + 'config-db-web-account' => 'Conta na base de datos para o acceso á internet', + 'config-db-web-help' => 'Seleccione o nome de usuario e contrasinal que o servidor web empregará para se conectar ao servidor da base de datos durante o funcionamento normal do wiki.', + 'config-db-web-account-same' => 'Empregar a mesma conta que para a instalación', + 'config-db-web-create' => 'Crear a conta se aínda non existe', + 'config-db-web-no-create-privs' => 'A conta que especificou para a instalación non ten os privilexios suficientes para crear unha conta. +A conta que se especifique aquí xa debe existir.', + 'config-mysql-engine' => 'Motor de almacenamento:', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-engine-help' => "'''InnoDB''' é case sempre a mellor opción, dado que soporta ben os accesos simultáneos. + +'''MyISAM''' é máis rápido en instalacións de usuario único e de só lectura. +As bases de datos MyISAM tenden a se corromper máis a miúdo ca as bases de datos InnoDB.", + 'config-mysql-charset' => 'Conxunto de caracteres da base de datos:', + 'config-mysql-binary' => 'Binario', + 'config-mysql-utf8' => 'UTF-8', + 'config-mysql-charset-help' => "No '''modo binario''', MediaWiki almacena texto UTF-8 na base de datos en campos binarios. +Isto é máis eficaz ca o modo UTF-8 de MySQL e permítelle usar o rango completo de caracteres Unicode. + +No '''modo UTF-8''', MySQL saberá o xogo de caracteres dos seus datos e pode presentar e converter os datos de maneira axeitada, +pero non lle deixará gardar caracteres por riba do [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plan multilingüe básico].", + 'config-site-name' => 'Nome do wiki:', + 'config-site-name-help' => 'Isto aparecerá na barra de títulos do navegador e noutros lugares.', + 'config-site-name-blank' => 'Escriba o nome do sitio.', + 'config-project-namespace' => 'Espazo de nomes do proxecto:', + 'config-ns-generic' => 'Proxecto', + 'config-ns-site-name' => 'O mesmo nome que o wiki: $1', + 'config-ns-other' => 'Outro (especificar)', + 'config-ns-other-default' => 'OMeuWiki', + 'config-project-namespace-help' => 'Seguindo o exemplo da Wikipedia, moitos wikis manteñen as súas páxinas de políticas separadas das súas páxinas de contido, nun "\'\'\'espazo de nomes do proxecto\'\'\'". +Todos os títulos presentes neste espazo de nomes comezan cun prefixo determinado, que pode especificar aquí. +Tradicionalmente, este prefixo deriva do nome do wiki, pero non pode conter caracteres de puntuación como "#" ou ":".', + 'config-ns-invalid' => 'O espazo de nomes especificado, "$1", é incorrecto. +Especifique un espazo de nomes do proxecto diferente.', + 'config-ns-conflict' => 'O espazo de nomes especificado, "$1", entra en conflito co espazo de nomes MediaWiki por defecto. +Especifique un espazo de nomes do proxecto diferente.', + 'config-admin-box' => 'Conta de administrador', + 'config-admin-name' => 'O seu nome:', + 'config-admin-password' => 'Contrasinal:', + 'config-admin-password-confirm' => 'Repita o contrasinal:', + 'config-admin-help' => 'Escriba o nome de usuario que queira aquí, por exemplo, "Joe Bloggs". +Este é o nome que usará para acceder ao sistema do wiki.', + 'config-admin-name-blank' => 'Escriba un nome de usuario para o administrador.', + 'config-admin-name-invalid' => 'O nome de usuario especificado, "$1", é incorrecto. +Especifique un nome de usuario diferente.', + 'config-admin-password-blank' => 'Escriba un contrasinal para a conta de administrador.', + 'config-admin-password-same' => 'O contrasinal debe diferir do nome de usuario.', + 'config-admin-password-mismatch' => 'Os contrasinais non coinciden.', + 'config-admin-email' => 'Enderezo de correo electrónico:', + 'config-admin-email-help' => 'Escriba aquí un enderezo de correo electrónico para que poida recibir mensaxes doutros usuarios a través do wiki, restablecer o contrasinal e ser notificado das modificacións feitas nas páxinas presentes na súa lista de vixilancia. Pode deixar este campo en branco.', + 'config-admin-error-user' => 'Erro interno ao crear un administrador co nome "$1".', + 'config-admin-error-password' => 'Erro interno ao establecer un contrasinal para o administrador "$1":
    $2
    ', + 'config-admin-error-bademail' => 'Escribiu un enderezo de correo electrónico non válido.', + 'config-subscribe' => 'Subscríbase á [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce lista de correo de anuncios sobre lanzamentos].', + 'config-subscribe-help' => 'Esta é unha lista de correos de baixo volume usada para anuncios sobre lanzamentos de novas versións, incluíndo avisos de seguridade importantes. +Debería subscribirse a ela e actualizar a súa instalación MediaWiki cando saian as novas versións.', + 'config-almost-done' => 'Xa case rematou! +Neste paso pode saltar o resto da configuración e instalar o wiki agora mesmo.', + 'config-optional-continue' => 'Facédeme máis preguntas.', + 'config-optional-skip' => 'Xa estou canso. Instalade o wiki.', + 'config-profile' => 'Perfil dos dereitos de usuario:', + 'config-profile-wiki' => 'Wiki tradicional', + 'config-profile-no-anon' => 'Necesítase a creación dunha conta', + 'config-profile-fishbowl' => 'Só os editores autorizados', + 'config-profile-private' => 'Wiki privado', + 'config-profile-help' => "Os wikis funcionan mellor canta máis xente os edite. +En MediaWiki, é doado revisar os cambios recentes e reverter calquera dano feito por usuarios novatos ou con malas intencións. +Porén, moita xente atopa MediaWiki útil nunha ampla variedade de papeis, e ás veces non é fácil convencer a todos dos beneficios que leva consigo o estilo wiki. +Vostede decide. + +O tipo '''{{int:config-profile-wiki}}''' permite a edición por parte de calquera, mesmo sen rexistro. +A opción '''{{int:config-profile-no-anon}}''' proporciona un control maior, pero pode desalentar os colaboradores casuais. + +O escenario '''{{int:config-profile-fishbowl}}''' restrinxe a edición aos usuarios aprobados, pero o público pode ollar as páxinas, incluíndo os historiais. +O tipo '''{{int:config-profile-private}}''' só deixa que os usuarios aprobados vexan e editen as páxinas. + +Hai dispoñibles configuracións de dereitos de usuario máis complexas despois da instalación; bótelle un ollo a [http://www.mediawiki.org/wiki/Manual:User_rights esta entrada no manual].", + 'config-license' => 'Dereitos de autor e licenza:', + 'config-license-none' => 'Sen licenza ao pé', + 'config-license-cc-by-sa' => 'Creative Commons recoñecemento compartir igual', + 'config-license-cc-by-nc-sa' => 'Creative Commons recoñecemento non comercial compartir igual', + 'config-license-cc-0' => 'Creative Commons Zero', + 'config-license-gfdl-old' => 'Licenza de documentación libre de GNU 1.2', + 'config-license-gfdl-current' => 'Licenza de documentación libre de GNU 1.3 ou posterior', + 'config-license-pd' => 'Dominio público', + 'config-license-cc-choose' => 'Seleccione unha licenza Creative Commons personalizada', + 'config-license-help' => "Moitos wikis públicos liberan todas as súas contribucións baixo unha [http://freedomdefined.org/Definition/Gl licenza libre]. +Isto axuda a crear un sentido de propiedade na comunidade e anima a seguir contribuíndo durante moito tempo. +Xeralmente, non é necesario nos wikis privados ou de empresas. + +Se quere poder empregar textos da Wikipedia, así como que a Wikipedia poida aceptar textos copiados do seu wiki, escolla a licenza '''Creative Commons recoñecemento compartir igual'''. + +A licenza de documentación libre de GNU era a licenza anterior da Wikipedia. +Malia aínda ser unha licenza válida, esta ten algunhas características que poden facer o reuso e a interpretación difíciles.", + 'config-email-settings' => 'Configuración do correo electrónico', + 'config-enable-email' => 'Activar os correos electrónicos de saída', + 'config-enable-email-help' => 'Se quere que o correo electrónico funcione, cómpre configurar os [http://www.php.net/manual/en/mail.configuration.php parámetros PHP] correctamente. +Se non quere ningunha característica no correo, pode desactivalas aquí.', + 'config-email-user' => 'Activar o intercambio de correos electrónicos entre usuarios', + 'config-email-user-help' => 'Permitir que todos os usuarios intercambien correos electrónicos, se o teñen activado nas súas preferencias.', + 'config-email-usertalk' => 'Activar a notificación da páxina de conversa de usuario', + 'config-email-usertalk-help' => 'Permitir que os usuarios reciban notificacións cando a súa páxina de conversa de usuario sufra modificacións, se o teñen activado nas súas preferencias.', + 'config-email-watchlist' => 'Activar a notificación da lista de vixilancia', + 'config-email-watchlist-help' => 'Permitir que os usuarios reciban notificacións sobre modificacións nas páxinas que vixían, se o teñen activado nas súas preferencias.', + 'config-email-auth' => 'Activar a autenticación do correo electrónico', + 'config-email-auth-help' => "Se esta opción está activada, os usuarios teñen que confirmar o seu correo electrónico mediante unha ligazón enviada ao enderezo cando o definan ou o cambien. +Só os enderezos autenticados poden recibir correos doutros usuarios ou de notificación. +É '''recomendable''' establecer esta opción nos wikis públicos para evitar abusos potenciais das características do correo.", + 'config-email-sender' => 'Enderezo de correo electrónico de retorno:', + 'config-email-sender-help' => 'Introduza o enderezo de correo electrónico a usar como enderezo de retorno dos correos de saída. +Aquí é onde irán parar os correos rexeitados. +Moitos servidores de correo electrónico esixen que polo menos a parte do nome de dominio sexa válido.', + 'config-upload-settings' => 'Imaxes e carga de ficheiros', + 'config-upload-enable' => 'Activar a carga de ficheiros', + 'config-upload-help' => 'A subida de ficheiros expón potencialmente o servidor a riscos de seguridade. +Para obter máis información, lea a [http://www.mediawiki.org/wiki/Manual:Security sección de seguridade] no manual. + +Para activar a carga de ficheiros, cambie o modo no subdirectorio images que está baixo o directorio raíz de MediaWiki, de xeito que o servidor web poida escribir nel. +A continuación, active esta opción.', + 'config-upload-deleted' => 'Directorio para os ficheiros borrados:', + 'config-upload-deleted-help' => 'Escolla un directorio no que arquivar os ficheiros borrados. +O ideal é que non sexa accesible desde a web.', + 'config-logo' => 'URL do logo:', + 'config-logo-help' => 'A aparencia de MediaWiki por defecto inclúe espazo para un logo de 135x160 píxeles no recuncho superior esquerdo. +Cargue unha imaxe do tamaño axeitado e introduza o URL aquí. + +Se non quere un logo, deixe esta caixa en branco.', + 'config-instantcommons' => 'Activar Instant Commons', + 'config-instantcommons-help' => '[http://www.mediawiki.org/wiki/InstantCommons InstantCommons] é unha característica que permite aos wikis usar imaxes, sons e outros ficheiros multimedia atopados no sitio da [http://commons.wikimedia.org/wiki/Portada_galega Wikimedia Commons]. +Para facer isto, MediaWiki necesita acceso á internet. + +Para obter máis información sobre esta característica, incluíndo as instrucións sobre como configuralo para outros wikis que non sexan a Wikimedia Commons, consulte [http://mediawiki.org/wiki/Manual:$wgForeignFileRepos o manual].', + 'config-cc-error' => 'A escolla da licenza Creative Commons non deu resultados. +Escriba o nome da licenza manualmente.', + 'config-cc-again' => 'Escolla outra vez...', + 'config-cc-not-chosen' => 'Escolla a licenza Creative Commons que desexe e prema en "continuar".', + 'config-advanced-settings' => 'Configuración avanzada', + 'config-cache-options' => 'Configuración da caché de obxectos:', + 'config-cache-help' => 'A caché de obxectos emprégase para mellorar a velocidade de MediaWiki mediante a memorización de datos usados con frecuencia. +É amplamente recomendable a súa activación nos sitios de tamaño medio e grande; os sitios pequenos obterán tamén beneficios.', + 'config-cache-none' => 'Sen caché (non se elimina ningunha funcionalidade, pero pode afectar á velocidade en wikis grandes)', + 'config-cache-accel' => 'Caché de obxectos do PHP (APC, eAccelerator, XCache ou WinCache)', + 'config-cache-memcached' => 'Empregar o Memcached (necesita unha instalación e configuración adicional)', + 'config-memcached-servers' => 'Servidores da memoria caché:', + 'config-memcached-help' => 'Lista de enderezos IP para Memcached. +Debe especificarse un por liña, así como o porto a usar. Por exemplo: + 127.0.0.1:11211 + 192.168.1.25:1234', + 'config-memcache-needservers' => 'Seleccionou Memcached como o seu tipo de caché, pero non especificou ningún servidor.', + 'config-memcache-badip' => 'Escribiu un enderezo IP inválido para Memcached: $1.', + 'config-memcache-noport' => 'Non especificou o porto a usar no servidor Memcached: $1. +Se non sabe o porto, o predeterminado é 11211.', + 'config-memcache-badport' => 'Os números de porto Memcached deben estar entre $1 e $2.', + 'config-extensions' => 'Extensións', + 'config-extensions-help' => 'As extensións anteriores detectáronse no seu directorio ./extensions. + +Quizais necesite algunha configuración adicional, pero pode activalas agora', + 'config-install-alreadydone' => "'''Atención:''' Semella que xa instalou MediaWiki e que o está a instalar de novo. +Vaia ata a seguinte páxina.", + 'config-install-begin' => 'Ao premer en "{{int:config-continue}}", comezará a instalación de MediaWiki. +Se aínda quere facer algún cambio, volva atrás.', + 'config-install-step-done' => 'feito', + 'config-install-step-failed' => 'erro', + 'config-install-extensions' => 'Incluíndo as extensións', + 'config-install-database' => 'Configurando a base de datos', + 'config-install-pg-schema-not-exist' => 'O esquema PostgreSQL non existe.', + 'config-install-pg-schema-failed' => 'Fallou a creación de táboas. +Asegúrese de que o usuario "$1" pode escribir no esquema "$2".', + 'config-install-pg-commit' => 'Validando os cambios', + 'config-install-pg-plpgsql' => 'Comprobación da lingua PL/pgSQL', + 'config-pg-no-plpgsql' => 'Cómpre instalar a lingua PL/pgSQL na base de datos $1', + 'config-pg-no-create-privs' => 'A conta especificada para a instalación non ten os privilexios necesarios para crear unha conta.', + 'config-install-user' => 'Creando o usuario da base de datos', + 'config-install-user-alreadyexists' => 'O usuario "$1" xa existe', + 'config-install-user-create-failed' => 'A creación do usuario "$1" fallou: $2', + 'config-install-user-grant-failed' => 'Fallou a concesión de permisos ao usuario "$1": $2', + 'config-install-tables' => 'Creando as táboas', + 'config-install-tables-exist' => "'''Atención:''' Semella que as táboas de MediaWiki xa existen. +Saltando a creación.", + 'config-install-tables-failed' => "'''Erro:''' Fallou a creación da táboa. Descrición do erro: $1", + 'config-install-interwiki' => 'Enchendo a táboa de interwiki por defecto', + 'config-install-interwiki-list' => 'Non se puido atopar o ficheiro interwiki.list.', + 'config-install-interwiki-exists' => "'''Atención:''' Semella que a táboa de interwiki xa contén entradas. +Saltando a lista por defecto.", + 'config-install-stats' => 'Iniciando as estatísticas', + 'config-install-keys' => 'Xerando a clave secreta', + 'config-install-sysop' => 'Creando a conta de usuario de administrador', + 'config-install-subscribe-fail' => 'Non se puido subscribir á lista mediawiki-announce', + 'config-install-mainpage' => 'Creando a páxina principal co contido por defecto', + 'config-install-extension-tables' => 'Creando as táboas para as extensións activadas', + 'config-install-mainpage-failed' => 'Non se puido inserir a páxina principal: $1', + 'config-install-done' => "'''Parabéns!''' +Instalou correctamente MediaWiki. + +O programa de instalación xerou un ficheiro LocalSettings.php. +Este ficheiro contén toda a súa configuración. + +Terá que descargalo e poñelo na base da instalación do seu wiki (no mesmo directorio ca index.php). A descarga debería comezar automaticamente. + +Se non comezou a descarga ou se a cancelou, pode facer que comece de novo premendo na ligazón que aparece a continuación: + +$3 + +'''Nota:''' Se non fai iso agora, este ficheiro de configuración xerado non estará dispoñible máis adiante se sae da instalación sen descargalo. + +Cando faga todo isto, xa poderá '''[$2 entrar no seu wiki]'''.", + 'config-download-localsettings' => 'Descargar o LocalSettings.php', + 'config-help' => 'axuda', +); + +/** Swiss German (Alemannisch) + * @author Als-Holder + */ +$messages['gsw'] = array( + 'config-desc' => 'S MediaWiki-Inschtallationsprogramm', + 'config-title' => 'MediaWiki $1 inschtalliere', + 'config-information' => 'Information', + 'config-localsettings-upgrade' => "'''Warnig:''' E Datei LocalSettings.php isch gfunde wore. +Fir d Aktualisierig vu dr däre Inschtallation, gib bitte dr Wärt vum Parameter \$wgUpgradeKey im Fäld unten yy. +Du findsch dr Wärt in dr Datei LocalSettings.php.", + 'config-localsettings-key' => 'Aktualisierigsschlissel:', + 'config-localsettings-badkey' => 'Dr Aktualisierigsschlissel, wu du aagee hesch, isch falsch.', + 'config-session-error' => 'Fähler bim Starte vu dr Sitzig: $1', + 'config-session-expired' => 'D Sitzigsdate sin schyns abgloffe. +Sitzige sin fir e Zytruum vu $1 konfiguriert. +Dää cha dur Aalupfe vum Parameter session.gc_maxlifetime in dr Datei php.ini greßer gmacht wäre. +Dr Inschtallationsvorgang nomol starte.', + 'config-no-session' => 'Dyyni Sitzigsdate sin verlore gange! +D Datei php.ini mueß prieft wäre un s mueß derby sichergstellt wäre, ass dr Parameter session.save_path uf s richtig Verzeichnis verwyyst.', + 'config-your-language' => 'Dyy Sproch:', + 'config-your-language-help' => 'Bitte d Sproch uuswehle, wu bim Inschtallationsvorgang soll brucht wäre.', + 'config-wiki-language' => 'Wikisproch:', + 'config-wiki-language-help' => 'Bitte d Sproch uuswehle, wu s Wiki in dr Hauptsach din gschribe wird.', + 'config-back' => '← Zruck', + 'config-continue' => 'Wyter →', + 'config-page-language' => 'Sproch', + 'config-page-welcome' => 'Willchuu bi MediaWiki!', + 'config-page-dbconnect' => 'Mit dr Datebank verbinde', + 'config-page-upgrade' => 'E Inschtallition, wu s scho het, aktualisiere', + 'config-page-dbsettings' => 'Datebankyystellige', + 'config-page-name' => 'Name', + 'config-page-options' => 'Optione', + 'config-page-install' => 'Inschtalliere', + 'config-page-complete' => 'Fertig!', + 'config-page-restart' => 'Inschtallation nomol aafange', + 'config-page-readme' => 'Liis mi', + 'config-page-releasenotes' => 'Hiiwys fir d Vereffentlichung', + 'config-page-copying' => 'Am Kopiere', + 'config-page-upgradedoc' => 'Am Aktualisiere', + 'config-help-restart' => 'Witt alli Date, wu Du yygee hesch, lesche un d Inschtallation nomol aafange?', + 'config-restart' => 'Jo, nomol aafange', + 'config-welcome' => '=== Priefig vu dr Inschtallationsumgäbig === +Basispriefige wäre durgfiert zum Feschtstelle, eb d Inschtallationsumgäbig fir d Inschtallation vu MediaWiki geignet isch. +Du sottsch d Ergebnis vu däre Priefig aagee, wänn Du bi dr Inschtallation Hilf bruchsch.', + 'config-copyright' => "=== Copyright un Nutzigsbedingige === + +$1 + +Des Programm isch e freji Software, d. h. s cha, no dr Bedingige vu dr GNU General Public-Lizänz, wu vu dr Free Software Foundation vereffentligt woren isch, wyterverteilt un/oder modifiziert wäre. Doderbyy cha d Version 2, oder no eigenem Ermässe, jedi nejeri Version vu dr Lizänz brucht wäre. + +Des Programm wird in dr Hoffnig verteilt, ass es nitzli isch, aber '''ohni jedi Garanti''' un sogar ohni di impliziert Garanti vun ere '''Märtgängigkeit''' oder '''Eignig fir e bstimmte Zwäck'''. Doderzue git meh Hiiwys in dr GNU General Public-Lizänz. + +E Kopi vu dr GNU General Public-Lizänz sott zämme mit däm Programm verteilt wore syy. Wänn des nit eso isch, cha ne Kopi bi dr Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftli aagforderet oder [http://www.gnu.org/copyleft/gpl.html online gläse] wäre.", + 'config-sidebar' => '* [http://www.mediawiki.org MediaWiki Websyte vu MediaWiki] +* [http://www.mediawiki.org/wiki/Help:Contents Nutzeraaleitig zue MediaWiki] +* [http://www.mediawiki.org/wiki/Manual:Contents Adminischtratoreaaleitig zue MediaWiki] +* [http://www.mediawiki.org/wiki/Manual:FAQ Vilmol gstellti Froge zue MediaWiki]', + 'config-env-good' => 'D Inschtallationsumgäbig isch prieft wore. +Du chasch MediaWiki inschtalliere.', + 'config-env-bad' => 'D Inschtallationsumgäbigisch prieft wore. +Du chasch MediaWiki nit inschtalliere.', + 'config-env-php' => 'PHP $1 isch inschtalliert.', + 'config-unicode-using-utf8' => 'Fir d Unicode-Normalisierig wird em Brion Vibber syy utf8_normalize.so yygsetzt.', + 'config-unicode-using-intl' => 'For d Unicode-Normalisierig wird d [http://pecl.php.net/intl PECL-Erwyterig intl] yygsetzt.', + 'config-unicode-pure-php-warning' => "'''Warnig:''' D [http://pecl.php.net/intl PECL-Erwyterig intl] isch fir d Unicode-Normalisierig nit verfiegbar. Wäge däm wird di langsam pure-PHP-Implementierig brucht. +Wänn Du ne Websyte mit ere große Bsuechrzahl bedrybsch, sottsch e weng ebis läse iber [http://www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode-Normalisierig (en)].", + 'config-unicode-update-warning' => "'''Warnig:''' Di inschtalliert Version vum Unicode-Normalisierigswrapper verwändet e elteri Version vu dr Bibliothek vum [http://site.icu-project.org/ ICU-Projäkt]. +Du sottsch si [http://www.mediawiki.org/wiki/Unicode_normalization_considerations aktualisiere], wänn Dor d Verwändig vu Unicode wichtig isch.", + 'config-no-db' => 'S isch kei adäquate Datebanktryyber gfunde wore!', + 'config-no-db-help' => 'S mueß e Datebanktryyber fir PHP inschtalliert wäre. +Die Datebanksyschtem wäre unterstitzt: $1 + +Wänn Du ne gmeinschaftli gnutzte Server fir s Hosting bruchsch, muesch dr Hoster froge go ne adäquate Datebanktryyber inschtalliere. +Wänn Du PHP sälber kumpiliert hesch, muesch s nej konfiguriere, dr Datebankclient mueß aktiviert wäre. Doderzue chasch zem Byschpel ./configure --with-mysql uusfiere. +Wänn Du PHP iber d Paketverwaltig vun ere Debian- oder Ubuntu-Inschtallation inschtalliert hesch, muesch s „php5-mysql“-Paket nooinschtalliere.', + 'config-no-fts3' => "'''Warnig:''' SQLite isch ohni s [http://sqlite.org/fts3.html FTS3-Modul] kumpiliert wore, s stehn kei Suechfunktione z Verfiegig.", + 'config-register-globals' => "'''Warnig: Dr Parameter [http://php.net/register_globals register_globals] vu PHP isch aktiviert.''' +'''Är sott deaktiviert wäre, wänn des megli isch.''' +D MediaWiki-Inschtallation lauft einwäg, aber dr Server isch aafällig fi megligi Sicherheitsprobläm.", + 'config-magic-quotes-runtime' => "'''Fatal: Dr Parameter [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] vu PHP isch aktiviert!''' +Die Yystellig fiert zue nit vorhärsähbare Probläm bi dr Datenyygab. +MediaWiki cha nit inschtalliert wäre, solang dää Parameter nit deaktiviert woren isch.", + 'config-magic-quotes-sybase' => "'''Fatal: Dr Parameter [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] vu PHP isch aktiviert!''' +Die Yystellig fiert zue nit vorhärsähbare Probläm bi dr Datenyygab. +MediaWiki cha nit inschtalliert wäre, solang dää Parameter nit deaktiviert woren isch.", + 'config-mbstring' => "'''Fatal: Dr Parameter [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] vu PHP isch aktiviert!''' +Die Yystellig verursacht Fähler un fiert zue nit vorhärsähbare Probläm bi dr Datenyygab. +MediaWiki cha nit inschtalliert wäre, solang dää Parameter nit deaktiviert woren isch.", + 'config-ze1' => "'''Fatal: Dr Parameter [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] vu PHP isch aktiviert!''' +Die Yystellig fiert zue große Fähler bi MediaWiki. +MediaWiki cha nit inschtalliert wäre, solang dää Parameter nit deaktiviert woren isch.", + 'config-safe-mode' => "'''Warnig:''' D Funktion [http://www.php.net/features.safe-mode Safe Mode] vu PHP isch aktiviert. +Des cha zue Probläm fiere, vor allem wänn s Uffelade vu Dateie soll megli syy bzw. dr Uuszeichner math soll brucht wäre.", + 'config-xml-bad' => 'S XML-Modul vu PHP fählt. +MediaWiki brucht Funktione, wu au des Modul z Verfiegig stellt, un funktioniert in däre Konfiguration nit. +Wänn Mandriva brucht wird, mueß no s „php-xml“-Paket inschtalliert wäre.', + 'config-pcre' => 'S PHP-Modul fir d PCRE-Unterstitzig isch nit gfunde wore. +MediaWiki brucht aber perl-kompatibli reguläri Uusdruck zum lauffähig syy.', + 'config-pcre-no-utf8' => "'''Fatale Fähler: S PHP-Modul PCRE isch schyns ohni PCRE_UTF8-Unterstitzig kompiliert wore.''' +MediaWiki brucht d UTF-8-Unterstitzi zum fählerfrej lauffähig syy.", + 'config-memory-raised' => 'Dr PHP-Parameter memory_limit lyt bi $1 un isch uf $2 uffegsetzt wore.', + 'config-memory-bad' => "'''Warnig:''' Dr PHP-Parameter memory_limit lyt bi $1. +Dää Wärt isch wahrschyns z nider. +Dr Inschtallationsvorgang chennt wäge däm fählschlaa!", + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] isch inschtalliert', + 'config-apc' => '[http://www.php.net/apc APC] isch inschtalliert', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] isch inschtalliert', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] isch inschtalliert', + 'config-no-cache' => "'''Warnig:''' [http://eaccelerator.sourceforge.net eAccelerator], [http://www.php.net/apc APC], [http://trac.lighttpd.net/xcache/ XCache] oder [http://www.iis.net/download/WinCacheForPhp WinCache] hän nit chenne gfunde wäre. +S Objäktcaching isch wäge däm nit aktiviert.", + 'config-diff3-bad' => 'GNU diff3 isch nit gfunde wore.', + 'config-imagemagick' => 'ImageMagick isch gfunde wore: $1. +Miniaturaasichte vu Bilder sin megli, sobald s Uffelade vu Dateie aktiviert isch.', + 'config-help' => 'Hilf', +); + +/** Hebrew (עברית) + * @author Amire80 + * @author YaronSh + */ +$messages['he'] = array( + 'config-desc' => 'תכנית ההתקנה של מדיה־ויקי', + 'config-title' => 'התקנת מדיה־ויקי $1', + 'config-information' => 'פרטים', + 'config-localsettings-upgrade' => 'זוהה קובץ LocalSettings.php. +כדי לשדרג את ההתקנה הזאת, נא להקליד את הערך של $wgUpgradeKey בתיבה להלן. +אפשר למצוא אותו בקובץ LocalSettings.php.', + 'config-localsettings-cli-upgrade' => 'זוהה קובץ LocalSettings.php. +כדי לשדרג את ההתקנה הזאת, הריצו את update.php ולא את הקובץ הזה.', + 'config-localsettings-key' => 'מפתח השדרוג:', + 'config-localsettings-badkey' => 'המפתח שהקלדתם שגוי', + 'config-upgrade-key-missing' => 'זוהתה התקנה קיימת של מדיה־ויקי. +כדי לשדרג את ההתקנה הזאת, אנא כתבו את השורה הבא בתחתית קובץ LocalSettings.php שלכם: + +$1', + 'config-localsettings-incomplete' => 'נראה שקובץ LocalSettings.php הקיים אינו שלם. +המשתנה $1 אינו מוגדר. +נו לשנות את קובץ LocalSettings.php שלכם כך שהמשתנה הזה יהיה מוגדר וללחוץ "המשך".', + 'config-localsettings-connection-error' => 'אירעה שגיאה בעת חיבור למסד נתונים עם הגדרות ב־LocalSettings.php או ב־AdminSettings.php. נא לתקן את ההגדרות האלו ולנסות שוב. + +$1', + 'config-session-error' => 'שגיאה באתחול שיחה: $1', + 'config-session-expired' => 'נראה שנתוני השיחה שלכם פגו. +השיחות מוגדרות להיות תקפות לזמן של $1. +אפשר להגדיל את זה ב־session.gc_maxlifetime בקובץ php.ini. +יש להתחיל מחדש את תהליך ההתקנה.', + 'config-no-session' => 'נתוני השיחה שלכם אבדו! +יש לבדוק את קובץ php.ini שלכם ולוודא שתיקייה נכונה מוגדרת ב־session.save_path.', + 'config-your-language' => 'השפה שלכם:', + 'config-your-language-help' => 'נא לבחור את השפה שתשמש במהלך ההתקנה.', + 'config-wiki-language' => 'שפת הוויקי:', + 'config-wiki-language-help' => 'נא לבחור את השפה העיקרית שבה ייכתב ויקי זה.', + 'config-back' => '→ חזרה', + 'config-continue' => 'המשך ←', + 'config-page-language' => 'שפה', + 'config-page-welcome' => 'ברוכים הבאים למדיה־ויקי!', + 'config-page-dbconnect' => 'התחברות למסד הנתונים', + 'config-page-upgrade' => 'שדרוג התקנה קיימת', + 'config-page-dbsettings' => 'הגדרות מסד הנתונים', + 'config-page-name' => 'שם', + 'config-page-options' => 'אפשרויות', + 'config-page-install' => 'התקנה', + 'config-page-complete' => 'הושלמה!', + 'config-page-restart' => 'הפעלת ההתקנה מחדש', + 'config-page-readme' => 'קרא־אותי', + 'config-page-releasenotes' => 'הערות גרסה', + 'config-page-copying' => 'העתקה', + 'config-page-upgradedoc' => 'שדרוג', + 'config-page-existingwiki' => 'ויקי קיים', + 'config-help-restart' => 'האם ברצונך לפנות את כל הנתונים שנשמרו שהוזנו על ידיך ולהתחיל מחדש את תהליך ההתקנה?', + 'config-restart' => 'כן, להפעיל מחדש', + 'config-welcome' => '=== בדיקות סביבה === +בדיקות בסיסיות מתבצעות כדי לבדוק שהסביבה מתאימה להתקנת מדיה־ויקי. +יש לתת את תוצאות הבדיקות האלו אם תזדקקו לעזרה בזמן ההתקנה.', + 'config-copyright' => "=== זכויות יוצרים ותנאים === + +$1 + +תכנית זו היא תכנה חופשית; באפשרותך להפיצה מחדש ו/או לשנות אותה על פי תנאי הרישיון הציבורי הכללי של GNU כפי שפורסם על ידי קרן התכנה החופשית; בין אם גרסה 2 של הרישיון, ובין אם (לפי בחירתך) כל גרסה מאוחרת שלו. + +תכנית זו מופצת בתקווה שתהיה מועילה, אבל '''בלא אחריות כלשהי'''; ואפילו ללא האחריות המשתמעת בדבר '''מסחריותה''' או '''התאמתה למטרה '''מסוימת'''. לפרטים נוספים, ניתן לעיין ברישיון הציבורי הכללי של GNU. + +לתכנית זו אמור היה להיות מצורף עותק של הרישיון הציבורי הכללי של GNU; אם לא, עליך לכתוב ל־Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, , MA 02111-1307, USA. או [http://www.gnu.org/copyleft/gpl.html לקרוא אותו דרך האינטרנט].", + 'config-sidebar' => '* [http://www.mediawiki.org MediaWiki אתר הבית של מדיה־ויקי] +* [http://www.mediawiki.org/wiki/Help:Contents המדריך למשתמשים] +* [http://www.mediawiki.org/wiki/Manual:Contents המדריך למנהלים] +* [http://www.mediawiki.org/wiki/Manual:FAQ שו״ת] +---- +* קרא אותי +* הערות גרסה +* העתקה +* שדרוג', + 'config-env-good' => 'הסביבה שלכם נבדקה. +אפשר להתקין מדיה־ויקי.', + 'config-env-bad' => 'הסביבה שלכם נבדקה. +אי־אפשר להתקין מדיה־ויקי.', + 'config-env-php' => 'מותקנת PHP $1.', + 'config-env-php-toolow' => 'מותקנת PHP $1. +למדיה־ויקי נדרשת PHP $2 או גרסה גבוהה יותר.', + 'config-unicode-using-utf8' => 'משתמש ב־normalize.so של בריון ויבר לנרמול יוניקוד.', + 'config-unicode-using-intl' => 'משתמש בהרחבת [http://pecl.php.net/intl הרחבת intl PECL] לנרמול יוניקוד', + 'config-unicode-pure-php-warning' => "'''אזהרה''': [http://pecl.php.net/intl הרחבת intl PECL] אינה זמינה לטיפול בנרמול יוניקוד. משתמש ביישום PHP טהור ואטי יותר. +אם זה אתר בעל תעבורה גבוהה, כדאי לקרוא את המסמך הבא: [http://www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode normalization].", + 'config-unicode-update-warning' => "'''אזהרה''': הגרסה המותקנת של מעטפת נרמול יוניקוד משתמשת בגרסה ישנה של הספרייה של [http://site.icu-project.org/ פרויקט ICU]. +כדאי [http://www.mediawiki.org/wiki/Unicode_normalization_considerations לעדכן] אם יש חשוב לכם הטיפול ביוניקוד.", + 'config-no-db' => 'לא נמצא דרייבר מסד נתונים מתאים.', + 'config-no-db-help' => 'יש להתקין דרייבר מסד נתונים ל־PHP. +נתמכים הסוגים הבאים של מסדי נתונים: $1. + +אם אתם משתמשים באירוח משותף, בקשו מספק האירוח שלכם להתקין דרייבר מסד נתונים מתאים. +אם קמפלתם את PHP בעצמכם, הגדירו אותו מחדש והפעילו את לקוח מסד נתונים (database client), למשל בעזרת ./configure --with-mysql. +אם התקנתם את PHP מחבילה של דביאן או אובונטו, יש להתקין את המודול php5-mysql.', + 'config-no-fts3' => "'''אזהרה''': SQLite מקומפל ללא [http://sqlite.org/fts3.html מודול FTS]. יכולות חיפוש לא יהיו זמינות בהתקנה הזאת.", + 'config-register-globals' => "'''אזהרה: האפשרות [http://php.net/register_globals register_globals] של PHP מופעלת.''' +'''כבו אותה אם אתם יכולים.''' +מדיה־ויקי תעבוד, אבל השרת שלכם חשוף לפגיעות אבטחה.", + 'config-magic-quotes-runtime' => "'''שגיאה סופנית: האפשרות [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] פעילה!''' +האפשרות הזאת מעוותת את נתוני הקלט באופן בלתי־צפוי. +לא ניתן להתקין את מדיה־ויקי אלא אם האפשרות הזאת תכובה.", + 'config-magic-quotes-sybase' => "'''שגיאה סופנית''': האפשרות [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] פעילה!''' +האפשרות הזאת מעוותת את נתוני הקלט באופן בלתי־צפוי. +לא ניתן להתקין את מדיה־ויקי או להשתמש בה אלא אם האפשרות הזאת תכובה.", + 'config-mbstring' => "'''שגיאה סופנית''': האפשרות [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] פעילה!''' +האפשרות הזאת גורמת לשגיאות ומעוותת את נתוני הקלט באופן בלתי־צפוי. +לא ניתן להתקין את מדיה־ויקי או להשתמש בה אלא אם האפשרות הזאת תכובה.", + 'config-ze1' => "'''שגיאה סופנית''': האפשרות [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] פעילה!''' +האפשרות הזאת גורמת לתקלות מזעזעות במדיה־ויקי. +לא ניתן להתקין את מדיה־ויקי או להשתמש בה אלא אם האפשרות הזאת תכובה.", + 'config-safe-mode' => "'''אזהרה:''' האפשרות [http://www.php.net/features.safe-mode safe mode] של PHP פעילה. +היא יכולה לגרום לבעיות, במיוחד אם אתם משתמשים בהעלאת קבצים או ב־math.", + 'config-xml-bad' => 'מודול XML של PHP חסר. +מדיה־ויקי דורשת פונקציות של המודול ולא תעבוד עם הגדרות כאלו. +אם מערכת ההפעלה שלהם היא Mandrake, התקינו את החבילה php-xml.', + 'config-pcre' => 'נראה שחסרה תמיכה במודול PCRE. +כדי שמדיה־ויקי תעבוד, נדרשת תמיכה בביטויים רגולריים תואמי Perl.', + 'config-pcre-no-utf8' => "'''שגיאה סופנית:''': נראה שמודול PCRE של PHP מקומפל ללא תמיכה ב־PCRE_UTF8. +מדיה־ויקי דורשת תמיכה ב־UTF-8 לפעילות נכונה.", + 'config-memory-raised' => 'ערך האפשרות memory_limit של PHP הוא $1, הועלה ל־$2.', + 'config-memory-bad' => "'''אזהרה:''' ערך האפשרות memory_limit של PHP הוא $1. +זה כנראה נמוך מדי. +ההתקנה עשויה להיכשל!", + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] מותקן', + 'config-apc' => '[http://www.php.net/apc APC] מותקן', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] מותקן', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] מותקן', + 'config-no-cache' => "'''אזהרה:''' אחת מהתוכנות הבאות לא נמצאה: [http://eaccelerator.sourceforge.net eAccelerator]‏, [http://www.php.net/apc APC]‏, [http://trac.lighttpd.net/xcache/ XCache] או [http://www.iis.net/download/WinCacheForPhp WinCache]. +מטמון עצמים לא מופעל.", + 'config-diff3-bad' => 'GNU diff3 לא נמצא.', + 'config-imagemagick' => 'נמצא ImageMagick‏: $1. +מזעור תמונות יופעל, אם תפעילו את האפשרות להעלות קבצים.', + 'config-gd' => 'נמצאה ספריית הגרפיקה GD המובנית. +מזעור תמונות יופעל, אם תפעילו את האפשרות להעלות קבצים.', + 'config-no-scaling' => 'ספריית GD או ImageMagick לא נמצאו. +מזעור תמונות לא יופעל.', + 'config-no-uri' => "'''שגיאה:''' אי־אפשר לזהות את הכתובת הנוכחית. +ההתקנה בוטלה.", + 'config-uploads-not-safe' => "'''אזהרה:''' התיקייה ההתחלתית להעלות $1 חשופה להרצת סקריפטים. +מדיה־ויקי בודקת את כל הקבצים המוּעלים לאיומי אבטחה, מומלץ מאוד למנוע את [http://www.mediawiki.org/wiki/Manual:Security#Upload_security פרצת האבטחה] הזאת לפני שאתם מפעילים את ההעלאות.", + 'config-brokenlibxml' => 'במערכת שלכם יש שילוב של גרסאות של PHP ושל libxml2 שחשוף לבאגים ויכול לגרום לעיוות נתונים נסתר במדיה־ויקי וביישומי רשת אחרים. +שדרגו ל־PHP 5.2.9 או לגרסה חדשה יותר ול־libxml2 2.7.3 או גרסה חדשה יותר ([http://bugs.php.net/bug.php?id=45996 באג מתויק ב־PHP]). +ההתקנה בוטלה.', + 'config-using531' => 'אי־אפשר להשתמש במדיה־ויקי עם PHP $1 בגלל באג בפרמטרים של הפניות (reference parameters) ל־__call(). +שדרגו ל־PHP 5.3.2 או לגרסה גבוהה יותר כדי לתקן את זה ([http://bugs.php.net/bug.php?id=50394 bug filed with PHP]) או שנמכו ל־PHP 5.3.0 כדי לפתור את הבעיה הזאת. +ההתקנה בוטלה.', + 'config-db-type' => 'סוג מסד הנתונים:', + 'config-db-host' => 'שרת מסד הנתונים:', + 'config-db-host-help' => 'אם שרת מסד הנתונים שלכם נמצא על שרת מחשב אחר, הקלידו את שם המחשב או כתובת ה־IP כאן. + +אם אתם משתמשים באירוח משותף, ספק האירוח שלכם אמור לתת לכם את שם השרת הנכון במסמכים. + +אם אתם מתקינים בשרת חלונות ומשתמשים ב־MySQL, השימוש ב־localhost עשוי לא לעבוד. אם הוא לא עובד, נסו את "127.0.0.1" בתור כתובת ה־IP המקומית.', + 'config-db-host-oracle' => 'TNS של מסד הנתונים:', + 'config-db-host-oracle-help' => 'הקלידו [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm שם חיבור מקומי (Local Connect Name)] תקין; הקובץ tnsnames.ora צריך להיות זמין להתקנה הזאת.
    +אם אתם משתמשים ב־client libraries 10g או בגרסה חדשה יותר, אתם יכולים גם להשתמש בשיטת מתן השמות [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].', + 'config-db-wiki-settings' => 'זיהוי ויקי זה', + 'config-db-name' => 'שם מסד הנתונים:', + 'config-db-name-help' => 'בחרו שם שמזהה את הוויקי שלכם. +לא צריכים להיות בו רווחים. + +אם אתם משתמשים באירוח משותף, ספק האירוח שלכם ייתן לכם שם מסד נתונים מסוים שתוכלו להשתמש בו או יאפשר לכם ליצור מסד נתונים דרך לוח בקרה.', + 'config-db-name-oracle' => 'סכמה של מסד נתונים:', + 'config-db-account-oracle-warn' => 'קיימים שלושה תרחישים נתמכים עבור התקנת אורקל בתור מסד הנתונים: + +אם אתם רוצים ליצור חשבון מסד נתונים כחלק מתהליך ההתקנה, נא לספק חשבון בעל תפקיד SYSDBA בתור חשבון מסד הנתונים עבור ההתקנה ולציין את האישורים המבוקשים עבור חשבון הגישה לאינטרנט, אחרת ניתן ליצור באופן ידני את חשבון הגישה לאינטרנט, ולספק חשבון זה בלבד (אם יש לו ההרשאות הדרושות ליצירת עצמי סכמה) או לספק שני חשבונות שונים, אחד עם הרשאות יצירה ואחד מוגבלת עבור גישה לאינטרנט. + +סקריפט ליצירת חשבון עם ההרשאות הנדרשות ניתן למצוא בתיקייה "maintenance/oracle/" של ההתקנה זו. זכרו כי שימוש בחשבון מוגבל יגרום להשבתת כל יכולות תחזוקה עם חשבון בררת המחדל.', + 'config-db-install-account' => 'חשבון משתמש להתקנה', + 'config-db-username' => 'שם המשתמש במסד הנתונים:', + 'config-db-password' => 'הססמה במסד הנתונים:', + 'config-db-password-empty' => 'נא להזין ססמה למשתמש מסד הנתונים החדש: $1. +אף־על־פי שאפשר ליצור חשבונות ללא ססמה, זה לא מאובטח.', + 'config-db-install-username' => 'הכניסו שם משתמש שישמש אתכם לחיבור למסד נתונים במהלך ההתקנה. +זהו לא שם משתמש לחשבון במדיה־ויקי; זהו שם משתמש בשרת מסד נתונים.', + 'config-db-install-password' => 'הקלידו ססמה שתשמש אתכם לצורך חיבור למסד נתונים במהלך ההתקנה. +זוהי לא ססמה של חשבון במדיה־ויקי; זוהי ססמה לשרת מסד נתונים.', + 'config-db-install-help' => 'הקלידו את שם המשתמש ואת הססמה להתחברות למסד הנתונים במהלך ההתקנה.', + 'config-db-account-lock' => 'להשתמש באותו שם המשתמש ובאותה ססמה בזמן הפעלה רגילה', + 'config-db-wiki-account' => 'חשבון משתמש להפעלה רגילה', + 'config-db-wiki-help' => 'הקלידו את שם המשתמש והססמה לחיבור למסד הנתונים במהלך פעילות רגילה של הוויקי. +אם החשבון אינו קיים ולחשבון שבו מתבצעת ההתקנה יש הרשאות מספיקות, החשבון הזה ייווצר עם ההרשאות המזעריות הנחוצות להפעלת הוויקי.', + 'config-db-prefix' => 'תחילית לטבלאות של מסד נתונים (database table prefix):', + 'config-db-prefix-help' => 'אם אתם צריכים לשתף מסד נתונים אחד בין אתרי ויקי שונים או בין מדיה־ויקי ויישום וב אחר, תוכלו לבחור להוסיף תחילית וכל שמות הטבלאות כדי להימנע מהתנגשויות. +אל תשתמשו ברווחים. + +השדה הזה בדרך כלל אמור להיות ריק.', + 'config-db-charset' => 'קבוצת התווים (character set) של מסד הנתונים', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binary', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 backwards-compatible UTF-8', + 'config-charset-help' => "'''אזהרה:''' אם אתם משתמשים ב־'''backwards-compatible UTF-8''' ב־MySQL 4.1+, ומגבים את מסד הנתונים באמצעות mysqldump, זה יכול להרוס את כל תווי ה־ASCII ויהרוס באופן בלתי־הפיך את הגיבויים שלכם! + +ב'''מצב בינרי''' (binary mode) מדיה־ויקי שומרת טקסט UTF-8 במסד הנתונים בשדות בינריים. +זה יעיל יותר ממצב UTF-8 של MySQL ומאפשר לכם להשתמש בכל הטווח של תווי יוניקוד. +ב'''מצב UTF-8'''‏ (UTF-8 mode)‏ MySQL יֵדַע מה קבוצת התווים (character set) של הטקסט שלכם ויציג וימיר אותו בהתאם, אבל לא יאפשר לכם לשמור תווים שאינם נמצאים בטווח הרב־לשוני הבסיסי ([http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane]).", + 'config-mysql-old' => 'נדרשת גרסה $1 של MySQL או גרסה חדשה יותר. הגרסה הנוכחית שלכם היא $2.', + 'config-db-port' => 'פִּתְחַת מסד הנתונים (database port):', + 'config-db-schema' => 'סכמה למדיה־ויקי', + 'config-db-schema-help' => 'הסְכֵמָה הבאה בדרך כלל מתאימה. +שנו אותה רק אם אתם יודעים שאתם חייבים.', + 'config-sqlite-dir' => 'תיקיית נתונים (data directory) של SQLite:', + 'config-sqlite-dir-help' => 'SQLite שומר את כל הנתונים בקובץ אחד. + +לשרת הווב צריכה להיות הרשאה לכתוב לתיקייה שאתם מגדירים. + +היא לא צריכה נגישה לכולם דרך האינטרנט – בגלל זה איננו שמים אותה באותו מקום עם קובצי ה־PHP. + +תוכנת ההתקנה תכתוב קובץ .htaccess יחד אִתו, אבל אם זה ייכשל, מישהו יוכל להשיג גישה למסד הנתונים שלכם. שם נמצא מידע מפורש של משתמשים (כתובות דוא״ל, ססמאות מגובבות) וגם גרסאות מחוקות של דפים ומידע מוגבל אחר. + +כדאי לשקול לשים את מסד הנתונים במקום אחר לגמרי, למשל ב־/var/lib/mediawiki/yourwik.', + 'config-oracle-def-ts' => 'מרחב טבלאות לפי בררת מחדל (default tablespace):', + 'config-oracle-temp-ts' => 'מרחב טבלאות זמני (temporary tablespace):', + 'config-support-info' => 'מדיה־ויקי תומכת במערכות מסדי הנתונים הבאות: + +$1 + +אם אינכם רואים את מסד הנתונים שלכם ברשימה, עקבו אחר ההוראות המקושרות לעיל כדי להפעיל את התמיכה.', + 'config-support-mysql' => '* $1 הוא היעד העיקרי עבור מדיה־ויקי ולו התמיכה הטובה ביותר (ר׳ [http://www.php.net/manual/en/mysql.installation.php how to compile PHP with MySQL support])', + 'config-support-postgres' => '$1 הוא מסד נתונים נפוץ בקוד פתוח והוא נפוץ בתור חלופה ל־MySQL (ר׳ [http://www.php.net/manual/en/pgsql.installation.php how to compile PHP with PostgreSQL support]). ייתכן שיש בתצורה הזאת באגים מסוימים והיא לא מומלצת לסביבות מבצעיות.', + 'config-support-sqlite' => '* $1 הוא מסד נתונים קליל עם תמיכה טובה מאוד. (ר׳ [http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], משתמש ב־PDO)', + 'config-support-oracle' => '* $1 הוא מסד נתונים עסקי מסחרי. (ר׳ [http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])', + 'config-header-mysql' => 'הגדרות MySQL', + 'config-header-postgres' => 'הגדרות PostgreSQL', + 'config-header-sqlite' => 'הגדרות SQLite', + 'config-header-oracle' => 'הגדרות Oracle', + 'config-invalid-db-type' => 'סוג מסד הנתונים שגוי', + 'config-missing-db-name' => 'עליך להזין ערך עבור "שם מסד הנתונים"', + 'config-missing-db-host' => 'יש להכניס ערך לשדה "שרת מסד הנתונים"', + 'config-missing-db-server-oracle' => 'יש להכניס ערך לשדה "TNS של מסד הנתונים"', + 'config-invalid-db-server-oracle' => '"$1" הוא TNS בלתי תקין. +יש להשתמש רק באותיות ASCII‏ (a עד z‏, A עד Z), סְפָרוֹת (0 עד 9), קווים תחתיים (_) ונקודות (.).', + 'config-invalid-db-name' => '"$1" הוא שם מסד נתונים בלתי תקין. +יש להשתמש רק באותיות ASCII‏ (a עד z‏, A עד Z), סְפָרוֹת (0 עד 9), קווים תחתיים (_) ומינוסים (-).', + 'config-invalid-db-prefix' => '"$1" היא תחילית מסד נתונים בלתי תקינה. +יש להשתמש רק באותיות ASCII‏ (a עד z‏, A עד Z), סְפָרוֹת (0 עד 9), קווים תחתיים (_) ומינוסים (-).', + 'config-connection-error' => '$1. + +בדקו את שם השרת, את שם המשתמש ואת הססמה ונסו שוב.', + 'config-invalid-schema' => '"$1" היא סכמה לא תקינה עבור מדיה־ויקי. +יש להשתמש רק באותיות ASCII‏ (a עד z‏, A עד Z), סְפָרוֹת (0 עד 9) וקווים תחתיים (_).', + 'config-db-sys-create-oracle' => 'תוכנית ההתקנה תומכת רק בשימוש בחשבון SYSDBA ליצירת חשבון חדש.', + 'config-db-sys-user-exists-oracle' => 'חשבון המשתמש "$1" כבר קיים. SYSDBA יכול לשמש רק ליצירת חשבון חדש!', + 'config-postgres-old' => 'נדרש PostgreSQL $1 או גרסה חדשה יותר, הגרסה הנוכחית שלכם היא $2.', + 'config-sqlite-name-help' => 'בחרו בשם שמזהה את הוויקי שלכם. +אל תשתמשו ברווחים או במינוסים. +זה יהיה שם קובץ הנתונים ל־SQLite.', + 'config-sqlite-parent-unwritable-group' => 'לא ניתן ליצור את תיקיית הנתונים $1, כי לשָׁרַת הווב אין הרשאות לכתוב לתיקיית האם $2 . + +תוכנת ההתקנה זיהתה את החשבון שתחתיו רץ שרת הווב שלכם. +אפשרו לשָׁרַת הווב לכתוב לתיקייה $3. +במערכת Unix/Linux כִתבו: + +
    cd $2
    +mkdir $3
    +chgrp $4 $3
    +chmod g+w $3
    ', + 'config-sqlite-parent-unwritable-nogroup' => 'לא ניתן ליצור את תיקיית הנתונים $1, כי לשָׁרַת הווב אין הרשאות לכתוב לתיקיית האם $2 . + +תוכנת ההתקנה לא זיהתה את החשבון שתחתיו רץ שרת הווב שלכם. +אפשרו לכל החשבונות לכתוב לתיקייה $3 כדי להמשיך. +במערכת Unix/Linux כִתבו: + +
    cd $2
    +mkdir $3
    +chmod a+w $3
    ', + 'config-sqlite-mkdir-error' => 'אירעה שגיאה בעת יצירת תיקיית הנתונים "$1". +נא לבדוק את המיקום ולנסות שוב.', + 'config-sqlite-dir-unwritable' => 'אי־אפשר לכתוב לתיקייה "$1". +שנו את ההרשאות שלה כך ששרת הווב יוכל לכתוב אליה ונסו שוב.', + 'config-sqlite-connection-error' => '$1. + +בִדקו את תיקיית הנתונים את שם מסת הנתונים להלן ונסו שוב.', + 'config-sqlite-readonly' => 'לא ניתן לכתוב אל הקובץ $1.', + 'config-sqlite-cant-create-db' => 'לא ניתן ליצור את קובץ מסד הנתונים $1.', + 'config-sqlite-fts3-downgrade' => 'ב־PHP חסרה תמיכה ב־FTS3, יבתצע שנמוך טבלאות', + 'config-can-upgrade' => "יש טבלאות מדיה־ויקי במסד הנתונים. +כדי לשדרג אותן למדיה־ויקי $1, לחצו '''המשך'''.", + 'config-upgrade-done' => "השדרוג הושלם. + +עכשיו אפשר [$1 להשתמש בוויקי שלכם]. + +אם תרצו ליצור מחדש את קובץ ה־LocalSettings.php שלכם, לחצו על הכפתור להלן. +זה '''לא מומלץ''', אלא אם כן יש לכם בעיות עם הוויקי שלכם.", + 'config-upgrade-done-no-regenerate' => 'השדרוג הושלם. + +עכשיו אפשר [$1 להתחיל להשתמש בוויקי שלכם].', + 'config-regenerate' => 'לחולל מחדש את LocalSettings.php ←', + 'config-show-table-status' => 'שאילתת SHOW TABLE STATUS נכשלה!', + 'config-unknown-collation' => "'''אזהרה:''' מסד הנתונים משתמש בשיטת מיון שאינה מוּכּרת.", + 'config-db-web-account' => 'חשבון במסד הנתונים לגישה מהרשת', + 'config-db-web-help' => 'לבחור את שם המשתמש ואת הססמה ששרת הווב ישתמש בו להתחברות לשרת מסד הנתונים בזמן פעילות רגילה של הוויקי.', + 'config-db-web-account-same' => 'להשתמש באותו חשבון כמו עבור ההתקנה', + 'config-db-web-create' => 'ליצור חשבון אם הוא אינו קיים כבר.', + 'config-db-web-no-create-privs' => 'לחשבון שהקלדתם להתקנה אין מספיק הרשאות ליצירת חשבות. +החשבון שאתם מקלידים כאן צריך להיות קיים.', + 'config-mysql-engine' => 'מנגנון האחסון:', + 'config-mysql-engine-help' => "'''InnoDB''' הוא כמעט תמיד האפשרות הטובה ביותר, כי במנוע הזה יש תמיכה טובה ביותר בעיבוד מקבילי. + +'''MyISAM''' עשוי להיות בהתקנות שמיועדות למשתמש אחד ולהתקנות לקריאה בלבד. +מסדי נתונים עם MyISAM נוטים להיהרס לעתים קרובות יותר מאשר מסדי נתונים עם InnoDB.", + 'config-mysql-charset' => 'ערכת הקידוד של מסד הנתונים:', + 'config-mysql-binary' => 'בינרי', + 'config-mysql-utf8' => 'UTF-8', + 'config-mysql-charset-help' => "ב'''מצב בינרי''' (binary mode) מדיה־ויקי שומרת טקסט UTF-8 במסד הנתונים בשדות בינריים. +זה יעיל יותר ממצב UTF-8 של MySQL ומאפשר לכם להשתמש בכל הטווח של תווי יוניקוד. + +ב'''מצב UTF-8'''‏ (UTF-8 mode)‏ MySQL יֵדַע מה קבוצת התווים (character set) של הטקסט שלכם ויציג וימיר אותו בהתאם, אבל לא יאפשר לכם לשמור תווים שאינם נמצאים בטווח הרב־לשוני הבסיסי ([http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane]).", + 'config-site-name' => 'שם הוויקי:', + 'config-site-name-help' => 'זה יופיע בשורת הכותרת של הדפדפן ובמקומות רבים אחרים.', + 'config-site-name-blank' => 'נא להזין שם לאתר.', + 'config-project-namespace' => 'מרחב שמות לדפי מיזם:', + 'config-ns-generic' => 'מיזם', + 'config-ns-site-name' => 'זהה לשם הוויקי: $1', + 'config-ns-other' => 'אחר (לציין)', + 'config-ns-other-default' => 'הוויקי־שלי', + 'config-project-namespace-help' => "בהתאם לדוגמה של ויקיפדיה, אתרי ויקי רבים שומרים על דפי המדיניות שלהם בנפרד מדפי התוכן שלהם ב\"'''מרחב השמות של המיזם'''\" (\"'''project namespace'''\"). +כל שמות הדפים במרחב השמות הזה נפתחים בתחילית מסוימת שאתם יכולים להגדיר כאן. +באופן מסורתי התחילית הזאת מבוססת על שם הוויקי, אבל אינו יכול להכיל תווי פיסוק כגון \"#\" או \":\".", + 'config-ns-invalid' => 'מרחב השמות "$1" אינו תקין. +הקלידו שם אחר למרחב השמות של המיזם.', + 'config-ns-conflict' => 'מרחב השמות שהגדרתם "$1" מתנגש עם מרחב שמות מובנה של מדיה־ויקי. +הגדירו מרחב שמות מיזם שונה.', + 'config-admin-box' => 'חשבון מפעיל', + 'config-admin-name' => 'שמכם:', + 'config-admin-password' => 'ססמה:', + 'config-admin-password-confirm' => 'הססמה שוב:', + 'config-admin-help' => 'הקלידו כאן את שם המשתמש, למשל "שקד לוי" או "Joe Bloggs". +זה השם שישמש אתכם כדי להיכנס לוויקי.', + 'config-admin-name-blank' => 'נא להזין את שם המשתמש של המפעיל.', + 'config-admin-name-invalid' => 'שם המשתמש שהוקלד "$1" אינו תקין. +הקלידו שם משתמש אחר.', + 'config-admin-password-blank' => 'הקלידו ססמה לחשבון המפעיל.', + 'config-admin-password-same' => 'הססמה לא יכולה להיות זהה לשם המשתמש.', + 'config-admin-password-mismatch' => 'שתי הססמאות שהוזנו אינן מתאימות.', + 'config-admin-email' => 'כתובת הדוא״ל:', + 'config-admin-email-help' => 'הקלידו כתובת דוא״ל שתאפשר לכם לקבל מכתבים ממשתמשים אחרים בוויקי, לאתחל את הססמה, ולקבל הודעות על שינויים בדפים ברשימת המעקב שלכם. אפשר להשאיר את השדה הזה ריק.', + 'config-admin-error-user' => 'שגיאה פנימית ביצירת מפעיל בשם "$1".', + 'config-admin-error-password' => 'שגיאה פנימית בהגדרת ססמה עבור המפעיל "$1"‏:
    $2
    ', + 'config-admin-error-bademail' => 'הכנסתם כתובת דוא״ל לא תקינה.', + 'config-subscribe' => 'להירשם ל[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce רשימת התפוצה עם הודעות על גרסאות חדשות].', + 'config-subscribe-help' => 'זוהי רשימת תפוצה עם הודעות מעטות שמשמשת להודעות על הוצאת גרסאות, כולל עדכוני אבטחה חשובים. +מומלץ להירשם אליה ולעדכן את מדיה־ויקי כאשר יוצאות גרסאות חדשות.', + 'config-almost-done' => 'כמעט סיימתם! +אפשר לדלג על שאר ההגדרות ולהתקין את הוויקי כבר עכשיו.', + 'config-optional-continue' => 'הצגת שאלות נוספות.', + 'config-optional-skip' => 'משעמם לי, תתקינו לי כבר את הוויקי הזה.', + 'config-profile' => 'תסריט הרשאות משתמשים:', + 'config-profile-wiki' => 'ויקי מסורתי', + 'config-profile-no-anon' => 'נדרשת יצירת חשבון', + 'config-profile-fishbowl' => 'עורכים מורשים בלבד', + 'config-profile-private' => 'ויקי פרטי', + 'config-profile-help' => "אתרי ויקי עובדים הכי טוב כאשר אתם מאפשרים לכמה שיותר אנשים לערוך אותם. +במדיה־ויקי קל לסקור את השינויים האחרונים ולשחזר כל נזק שעושים משתמשים תמימים או משחיתים. + +עם זאת, אנשים שונים מצאו למדיה־ויקי שימושים מגוּונים ולעתים לא קל לשכנע את כולם ביתרונות של \"דרך הוויקי\" המסורתית. ולכן יש לכם בררה. + +באתר '''{{int:config-profile-wiki}}''' – לכולם יש הרשאה לערוך, אפילו בלי להיכנס לחשבון. +באתר וויקי מסוג '''{{int:config-profile-no-anon}}''' יש ביטחון גדול יותר, אבל הגדרה כזאת יכולה להרתיע תורמים מזדמנים. + +בתסריט '''{{int:config-profile-fishbowl}}''' רק משתמשים שקיבלו אישור יכולים לערוך, אבל כל הגולשים יכולים לקרוא את הדפים ואת גרסאותיהם הקודמות. +ב'''{{int:config-profile-private}}''' רק משתמשים שקיבלו אישור יכולים לקרוא ולערוך דפים. + +הגדרות מורכבות של הרשאות אפשריות אחרי ההתקנה, ר׳ את [http://www.mediawiki.org/wiki/Manual:User_rights הפרק על הנושא הזה בספר ההדרכה].", + 'config-license' => 'זכויות יוצרים ורישיון:', + 'config-license-none' => 'ללא כותרת תחתית עם רישיון', + 'config-license-cc-by-sa' => 'קריאייטיב קומונז–ייחוס–שיתוף זהה', + 'config-license-cc-by-nc-sa' => 'קריאייטיב קומונז ייחוס–ללא שימוש מסחרי–שיתוף זהה', + 'config-license-cc-0' => 'Creative Commons אפס', + 'config-license-gfdl-old' => 'רישיון חופשי למסמכים של גנו, גרסה 1.2', + 'config-license-gfdl-current' => 'רישיון חופשי למסמכים של גנו, גרסה 1.3 או גרסה מאוחרת יותר', + 'config-license-pd' => 'נחלת הכלל', + 'config-license-cc-choose' => 'בחרו רישיון קריאייטיב קומונז מותאם אישית', + 'config-license-help' => "אתרי ויקי ציבוריים רבים מפרסמים את כל התרומות תחת [http://freedomdefined.org/Definition רישיון חופשי]. +זה עוזר ליצור תחושה של בעלות קהילתית ומעודד תרומה לאורך זמן. +זה בדרך כלל לא נחוץ לאתר ויקי פרטי או בחברה מסחרית. + +אם אתם רוצים אפשרות להשתמש בטקסט מוויקיפדיה ואתם רוצים שוויקיפדיה תוכל לקבל עותקים של טקסטים מהוויקי שלכם, כדאי לכם לבחור ב'''רישיון קריאייטיב קומונז ייחוס–שיתוף זהה''' (CC-BY-SA). + +הרישיון החופשי למסמכים של גנו הוא הרישיון שבו ויקיפדיה השתמשה בעבר (GNU FDL או GFDL). +הוא עדיין תקין, אבל יש בו תכונות מסוימות שמקשות על שימוש חוזר ועל פרשנות.", + 'config-email-settings' => 'הגדרות דוא״ל', + 'config-enable-email' => 'להפעיל דוא״ל יוצא', + 'config-enable-email-help' => 'אם אתם רוצים שדוא״ל יעבוד, [http://www.php.net/manual/en/mail.configuration.php אפשרויות הדוא״ל של PHP] צריכות להיות מוגדרות נכון. +אם אינכם רוצים להפעיל שום אפשרויות דוא״ל, כבו אותן כאן ועכשיו.', + 'config-email-user' => 'לאפשר שליחת דוא״ל ממשתמש למשתמש', + 'config-email-user-help' => 'לאפשר לכל המשתמשים לשלוח אחד לשני דוא״ל אם הם הפעילו את זה בהעדפות שלהם.', + 'config-email-usertalk' => 'לאפשר הודעות על דף שיחת משתמש', + 'config-email-usertalk-help' => 'לאפשר למשתמשים לקבל הודעות על שינויים בדפי המשתמש שלהם, אם הם הפעילו את זה בהעדפות שלהם.', + 'config-email-watchlist' => 'הפעלת התרעה על רשימת המעקב', + 'config-email-watchlist-help' => 'לאפשר למשתמשים לקבל הודעות על הדפים ברשימת המעקב שלהם אם הם הפעילו את זה בהעדפות שלהם.', + 'config-email-auth' => 'הפעלת התרעה בדוא״ל', + 'config-email-auth-help' => "אם האפשרות הזאת מופעלת, משתמשים יצטרכו לאשר את כתובת הדוא״ל שלהם באמצעות קישור שיישלח אליהם בכל פעם שהם יגדירו או ישנו אותה. +רק כתובות דוא״ל מאושרות יכולות לקבלת דוא״ל ממשתמשים אחרים או מכתבים עם הודעות על שינויים. +'''מומלץ''' להגדיר את האפשרות הזאת לאתרי ויקי ציבוריים כי אפשר לעשות שימוש לרעה בתכונות הדוא״ל.", + 'config-email-sender' => 'כתובת דוא״ל לתשובות:', + 'config-email-sender-help' => 'הכניסו את כתובת הדוא״ל שתשמש ככתובת לתשובה לכל הדואר היוצא. +לשם יישלחו תגובות שגיאה (bounce). +שרתי דוא״ל רבים דורשים שלפחות החלק של המתחם יהיה תקין.', + 'config-upload-settings' => 'העלאת קבצים ותמונות', + 'config-upload-enable' => 'אפשור העלאת קבצים', + 'config-upload-help' => 'העלאות קבצים חושפות את השרת שלכם לסיכוני אבטחה. +למידע נוסף, קִראו את [http://www.mediawiki.org/wiki/Manual:Security חלק האבטחה] בספר ההדרכה. + +כדי להפעיל העלאת קבצים שנו את ההרשאות של התיקייה images תחת תיקיית השורש של מדיה־ויקי כך ששרת הווב יוכל לכתוב אליה. +זה מפעיל את האפשרות הזאת.', + 'config-upload-deleted' => 'תיקיית הקבצים שנמחקו:', + 'config-upload-deleted-help' => 'בחרו את התיקייה לארכוב קבצים מחוקים. +כדאי שזה לא יהיה נגיש לכל העולם דרך הרשת.', + 'config-logo' => 'כתובת הסמל:', + 'config-logo-help' => 'המראה ההתחלתי של מדיה־ויקי מכיל מקום לסמל של 135 על 160 פיקסלים בפינה השמאלית העליונה (ימנית עבור שפות שנכתבות מימין לשמאל). +יש להעלות תמונה בגודל מתאים ולהכניס את הכתובת כאן. + +אם אינכם רוצים סמל, השאירו את התיבה הזאת ריקה.', + 'config-instantcommons' => 'להפעיל את Instant Commons', + 'config-instantcommons-help' => '[http://www.mediawiki.org/wiki/InstantCommons Instant Commons] היא תכונה שמאפשרת לאתרי ויקי להשתמש בתמונות, בצלילים ובמדיה אחרת שנמצאת באתר [http://commons.wikimedia.org/ ויקישיתוף] (Wikimedia Commons). +כדי לעשות את זה, מדיה־ויקי צריך לגשת לאינטרנט. + +למידע נוסף על התכונה הזאת, כולל הוראות איך להפעיל את זה לאתרי ויקי שאינם ויקישיתוף, ר׳ [http://mediawiki.org/wiki/Manual:$wgForeignFileRepos את ספר ההדרכה].', + 'config-cc-error' => 'בורר רישיונות קריאייטיב קומונז לא החזיר שום תוצאה. +הקלידו את שם הרישיון ידנית.', + 'config-cc-again' => 'נא לבחור שוב...', + 'config-cc-not-chosen' => 'בחרו באיזה רישיון קריאייטיב קומונז להשתמש ולחצו "המשך".', + 'config-advanced-settings' => 'הגדרות מתקדמות', + 'config-cache-options' => 'הגדרות למטמון עצמים (object caching):', + 'config-cache-help' => 'מטמון עצמים משמש לשיפור המהירות של מדיה־ויקי על־ידי שמירה של נתונים שהשימוש בהם נפוץ במטמון. +לאתרים בינוניים וגדולים כדאי מאוד להפעיל את זה, וגם אתרים קטנים ייהנו מזה.', + 'config-cache-none' => 'ללא מטמון (שום יכולת אינה מוסרת, אבל הביצועים באתרים גדולים ייפגעו)', + 'config-cache-accel' => 'מטמון עצמים (object caching) של PHP‏ (APC‏, eAccelerator‏, XCache או WinCache)', + 'config-cache-memcached' => 'להשתמש ב־Memcached (דורש התקנות והגדרות נוספות)', + 'config-memcached-servers' => 'שרתי Memcached:', + 'config-memcached-help' => 'רשימת כתובות IP ש־Memcached ישתמש בהן. +יש לרשום כתובת אחת בכל שורה ולציין את הפִּתְחָה (port), למשל: + 127.0.0.1:11211 + 192.168.1.25:1234', + 'config-memcache-needservers' => 'בחרת ב־Memcached בתתור סוג המטמון שלכם, אבל לא הגדרתם שום שרת.', + 'config-memcache-badip' => 'הקלדתם כתובת IP בלתי תקינה ל־Memcached‎: $1.', + 'config-memcache-noport' => 'לא הגדרתם פתחה לשימוש שרת Memcached‏: $1. +אם אינכם יודעים את מספר הפתחה, בררת המחדל היא 11211.', + 'config-memcache-badport' => 'מספרי פתחה של Memcached צריכים להיות בין $1 ל־$2', + 'config-extensions' => 'הרחבות', + 'config-extensions-help' => 'ההרחבות ברשימה לעיל התגלו בתיקיית ./extensions שלכם. + +ייתכן שזה ידרוש הגדרות נוספות, אבל תוכלו להפעיל אותן עכשיו.', + 'config-install-alreadydone' => "'''אזהרה:''' נראה שכבר התקנתם את מדיה־ויקי ואתם מנסים להתקין אותה שוב. +אנה התקדמו לדף הבא.", + 'config-install-begin' => 'כשתלחצו על "{{int:config-continue}}", תתחילו את ההתקנה של מדיה־ויקי. +אם אתם עדיין רוצים לשנות משהו, לחצו על "הקודם".', + 'config-install-step-done' => 'בוצע', + 'config-install-step-failed' => 'נכשל', + 'config-install-extensions' => 'כולל הרחבות', + 'config-install-database' => 'הקמת מסד נתונים', + 'config-install-pg-schema-not-exist' => 'סכמה של PostgreSQL אינה קיימת', + 'config-install-pg-schema-failed' => 'יצירת טבלאות נכשלה. +ודאו כי המשתמש "$1" יכול לכתוב לסכמה "$2".', + 'config-install-pg-commit' => 'שמירת שינויים', + 'config-install-pg-plpgsql' => 'בדיקת שפת PL/pgSQL', + 'config-pg-no-plpgsql' => 'צריך להתקין את שפת PL/pgSQL במסד הנתונים $1', + 'config-pg-no-create-privs' => 'לחשבון שהגדרתם להתקנה אין מספיק הרשאות ליצירת חשבון.', + 'config-install-user' => 'יצירת חשבון במסד נתונים', + 'config-install-user-alreadyexists' => 'המשתמש "$1" כבר קיים', + 'config-install-user-create-failed' => 'יצירת משתמש "$1" נכשלה: $2', + 'config-install-user-grant-failed' => 'מתן הרשאות למשתמש "$1" נכשל: $2', + 'config-install-tables' => 'יצירת טבלאות', + 'config-install-tables-exist' => "'''אזהרה:''' נראה שטבלאות מדיה־ויקי כבר קיימות. +מדלג על יצירתן.", + 'config-install-tables-failed' => "'''שגיאה:''' יצירת הטבלה נכשלה עם השגיאה הבאה: $1", + 'config-install-interwiki' => 'אכלוס טבלת בינוויקי התחלתית', + 'config-install-interwiki-list' => 'קריאת הקובץ interwiki.list לא הצליחה.', + 'config-install-interwiki-exists' => "'''אזהרה:''': נראה שבטבלת הבינוויקי כבר יש רשומות. +מדלג על הרשומה ההתחלתית.", + 'config-install-stats' => 'אתחול סטטיסטיקות', + 'config-install-keys' => 'יצירת מפתחות סודיים', + 'config-install-sysop' => 'יצירת חשבון מפעיל', + 'config-install-subscribe-fail' => 'הרישום ל־mediawiki-announce לא הצליח', + 'config-install-mainpage' => 'יצירת דף ראשי עם תוכן לפי בררת מחדל.', + 'config-install-extension-tables' => 'יצירת טבלאות להרחבות מופעלות', + 'config-install-mainpage-failed' => 'לא הצליחה הכנסת דף ראשי: $1.', + 'config-install-done' => "'''מזל טוב!''' +התקנתם בהצלחה את מדיה־ויקי. + +תוכנת ההתקנה יצרה את הקובץ LocalSettings.php. +הוא מכיל את כל ההגדרות שלכם. + +תצטרכו להוריד אותו ולשים אותו בבסיס ההתקנה של הוויקי שלכם (אות התיקייה שבה נמצא הקובץ index.php). ההורדה הייתה אמורה להתחיל באופן אוטומטי. + +אם ההורדה לא התחילה, אם אם ביטלתם אותה, אפשר להתחיל אותה מחדש בלחיצה על הקישור הבא: + +$3 + +'''שימו לב''': אם לא תעשו זאת עכשיו, קובץ ההגדרות המחולל לא יהיה זמין לכם שוב. + +אחרי שתעשו את זה, תוכלו '''[$2 להיכנס לוויקי שלכם]'''.", + 'config-download-localsettings' => 'הורדת LocalSettings.php', + 'config-help' => 'עזרה', +); + +/** Upper Sorbian (Hornjoserbsce) + * @author Michawiki + */ +$messages['hsb'] = array( + 'config-desc' => 'Instalaciski program za MediaWiki', + 'config-title' => 'Instalacija MediaWiki $1', + 'config-information' => 'Informacije', + 'config-localsettings-upgrade' => 'Dataja LocalSettings.php je so wotkryła. +Zo by tutu instalaciju aktualizował, zapodaj prošu hódnotu za parameter $wgUpgradeKey do slědowaceho pola. +Namakaš tón parameter w dataji LocalSettings.php.', + 'config-localsettings-cli-upgrade' => 'Dataja LocalSettings.php bu wotkryta. +Zo by tutu instalaciju aktualizował, wuwjedźće update.php', + 'config-localsettings-key' => 'Aktualizaciski kluč:', + 'config-localsettings-badkey' => 'Kluč, kotryž sy podał, je wopak', + 'config-upgrade-key-missing' => 'Eksistowaca instalacija MediaWiki je so wotkryła. +Zo by tutu instalaciju aktualizował, staj prošu slědowacu linku deleka w dataji LocalSettings.php: + +$1', + 'config-localsettings-incomplete' => 'Zda so, zo eksistwoaca dataja LocalSettings.php je njedospołna. +Wariabla $1 njeje nastajena. +Prošu změń dataju LocalSettings.php, zo by so tuta wariabla nastajiła a klikń na "Dale".', + 'config-localsettings-connection-error' => 'Při zwjazowanju z datowej banku z pomocu nastajenjow podatych w LocalSettings.php abo AdminSettings.php je zmylk wustupił. Prošu skoriguj tute nastajenja a spytaj hišće raz. + +$1', + 'config-session-error' => 'Zmylk při startowanju posedźenja: $1', + 'config-session-expired' => 'Zda so, zo twoje posedźenske daty su spadnjene. +Posedźenja su za čas žiwjenja $1 skonfigurowane. +Móžeš jón přez nastajenje session.gc_maxlifetime w php.ini powyšić. +Startuj instalaciski proces znowa.', + 'config-no-session' => 'Twoje posedźenske daty su so zhubili! +Skontroluj swój php.ini a zawěsć, zo session.save_path je na prawy zapis nastajeny.', + 'config-your-language' => 'Twoja rěč:', + 'config-your-language-help' => 'Wubjer rěč, kotraž ma so za instalaciski proces wužiwać.', + 'config-wiki-language' => 'Wikirěč:', + 'config-wiki-language-help' => 'Wubjer rěč, w kotrejž wiki ma so zwjetša pisać.', + 'config-back' => '← Wróćo', + 'config-continue' => 'Dale →', + 'config-page-language' => 'Rěč', + 'config-page-welcome' => 'Witaj do MediaWiki!', + 'config-page-dbconnect' => 'Z datowej banku zwjazać', + 'config-page-upgrade' => 'Eksistowacu instalaciju aktualizować', + 'config-page-dbsettings' => 'Nastajenja datoweje banki', + 'config-page-name' => 'Mjeno', + 'config-page-options' => 'Opcije', + 'config-page-install' => 'Instalować', + 'config-page-complete' => 'Dokónčeny!', + 'config-page-restart' => 'Instalaciju znowa startować', + 'config-page-readme' => 'Čitaj mje', + 'config-page-releasenotes' => 'Wersijowe informacije', + 'config-page-copying' => 'Kopěrowanje', + 'config-page-upgradedoc' => 'Aktualizowanje', + 'config-page-existingwiki' => 'Eksistowacy wiki', + 'config-help-restart' => 'Chceš wšě składowane daty hašeć, kotrež sy zapodał a instalaciski proces znowa startować?', + 'config-restart' => 'Haj, znowa startować', + 'config-sidebar' => '* [http://www.mediawiki.org MediaWiki Startowa strona MediaWiki] +* [http://www.mediawiki.org/wiki/Help:Contents Nawod za wužiwarjow] +* [http://www.mediawiki.org/wiki/Manual:Contents Nawod za administratorow] +* [http://www.mediawiki.org/wiki/Manual:FAQ Huste prašenja] +---- +* Čitaj mje +* Wersijowe informacije +* Licencne postajenja +* Aktualizacija', + 'config-env-good' => 'Wokolina je so skontrolowała. +Móžeš MediaWiki instalować.', + 'config-env-bad' => 'Wokolina je so skontrolowała. +Njemóžeš MediaWiki instalować.', + 'config-env-php' => 'PHP $1 je instalowany.', + 'config-env-php-toolow' => 'PHP $1 je instalowany. +Ale MediaWiki wužaduje sej PHP $2 abo wyši.', + 'config-unicode-using-utf8' => 'Za normalizaciju Unicode so utf8_normalize.so Briona Vibbera wužiwa.', + 'config-unicode-using-intl' => 'Za normalizaciju Unicode so [http://pecl.php.net/intl PECL-rozšěrjenje intl] wužiwa.', + 'config-no-db' => 'Njeda so přihódny ćěrjak datoweje banki namakać!', + 'config-no-fts3' => "'''Warnowanje''': SQLite je so bjez [http://sqlite.org/fts3.html FTS3-modula] kompilował, pytanske funkcije njebudu k dispoziciji stać.", + 'config-register-globals' => "'''Warnowanje: Funkcija [http://php.net/register_globals register_globals] PHP je zmóžnjena.''' +'''Znjemóžń ju, jeli móžeš.''' +MediaWiki budźe fungować, ale twój serwer je potencielnym wěstotnym njedostatkam wustajeny.", + 'config-ze1' => "'''Chutny zmylk: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] je aktiwny!''' +Tuta opcija zawinuje grawěrowace zmylki při MediaWiki. +Njemóžeš MediaWiki instalować abo wužiwać, chibazo tuta opcija je znjemóžnjena.", + 'config-safe-mode' => "'''Warnowanje:''' [http://www.php.net/features.safe-mode wěsty modus] PHP je aktiwny. +To móže problemy zawinować, předewšěm, jeli so datajowe nahraća a podpěra math wužiwaja.", + 'config-xml-bad' => 'XML-modul za PHP faluje. +MediaWiki trjeba funkcije w tutym modulu a njebudźe w tutej konfiguraciji fungować. +Jeli wužiwaš Mandrake, instaluj paket php-xml.', + 'config-memory-raised' => 'PHP-parameter memory_limit je $1, je so na hódnotu $2 zwyšił.', + 'config-memory-bad' => "'''Warnowanje:''' PHP-parameter memory_limit ma hódnotu $1, +To je najskerje přeniske. +Instalacija móhła so njeporadźić!", + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] je instalowany', + 'config-apc' => '[http://www.php.net/apc APC] je instalowany', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] je instalowany', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] je instalowany', + 'config-diff3-bad' => 'GNU diff3 njenamakany.', + 'config-no-uri' => "'''Zmylk:''' Aktualny URI njeda so postajić. +Instalacija bu přetorhnjena.", + 'config-db-type' => 'Typ datoweje banki:', + 'config-db-host' => 'Serwer datoweje banki:', + 'config-db-host-oracle' => 'Datowa banka TNS:', + 'config-db-wiki-settings' => 'Tutón wiki identifikować', + 'config-db-name' => 'Mjeno datoweje banki:', + 'config-db-name-oracle' => 'Šema datoweje banki:', + 'config-db-install-account' => 'Wužiwarske konto za instalaciju', + 'config-db-username' => 'Wužiwarske mjeno datoweje banki:', + 'config-db-password' => 'Hesło datoweje banki:', + 'config-db-password-empty' => 'Prošu zapodaj hesło za noweho wužiwarja datoweje banki: $1. +Byrnjež było móžno wužiwarjow bjez hesłow wutworić, njeje to wěste.', + 'config-db-install-username' => 'Zapodaj wužiwarske mjeno, kotrež budźe so za zwisk z datowej banku za instalaciski proces wužiwać. +To njeje wužiwarske mjeno konta MediaWiki; to je wužiwarske mjeno za twoju datowu banku.', + 'config-db-install-password' => 'Zapodaj hesło, kotrež budźe so za zwisk z datowej banku za instalaciski proces wužiwać. +To njeje hesło konta MediaWiki; to je hesło za twoju datowu banku.', + 'config-db-install-help' => 'Zapodaj wužiwarske mjeno a hesło, kotrejž měłoj so za zwisk z datowej banku za instalaciski proces wužiwać.', + 'config-db-account-lock' => 'Samsne wužiwarske mjeno a hesło za normalnu operaciju wužiwać', + 'config-db-wiki-account' => 'Wužiwarske konto za normalnu operaciju', + 'config-db-prefix' => 'Tabelowy prefiks datoweje banki:', + 'config-db-charset' => 'Znamješkowa sadźba datoweje banki', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binarny', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 wróćokompatibelny UTF-8', + 'config-mysql-old' => 'MySQL $1 abo nowši trěbny, maš $2.', + 'config-db-port' => 'Port datoweje banki:', + 'config-db-schema' => 'Šema za MediaWiki', + 'config-db-schema-help' => 'Tuta šema da so zwjetša derje wužiwać. +Změń ju jenož, jeli su přeswědčiwe přičiny za to.', + 'config-sqlite-dir' => 'Zapis SQLite-datow:', + 'config-oracle-def-ts' => 'Standardny tabelowy rum:', + 'config-oracle-temp-ts' => 'Nachwilny tabelowy rum:', + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Oracle', + 'config-support-mysql' => '* $1 je primarny cil za MediaWiki a podpěruje so najlěpje ([http://www.php.net/manual/en/mysql.installation.php Nawod ke kompilowanju PHP z MySQL-podpěru])', + 'config-support-postgres' => '* $1 je popularny system datoweje banki zjawneho žórła jako alternatiwa k MySQL ([http://www.php.net/manual/en/pgsql.installation.php nawod za kompilowanje PHP z podpěru PostgreSQL])', + 'config-header-mysql' => 'Nastajenja MySQL', + 'config-header-postgres' => 'Nastajenja PostgreSQL', + 'config-header-sqlite' => 'Nastajenja SQLite', + 'config-header-oracle' => 'Nastajenja Oracle', + 'config-invalid-db-type' => 'Njepłaćiwy typ datoweje banki', + 'config-missing-db-name' => 'Dyrbiš hódnotu za "Mjeno datoweje banki" zapodać', + 'config-missing-db-host' => 'Dyrbiš hódnotu za "Database host" zapodać', + 'config-missing-db-server-oracle' => 'Dyrbiš hódnotu za "Database TNS" zapodać', + 'config-invalid-db-server-oracle' => 'Njepłaćiwa datowa banka TNS "$1". +Wužij jenož pismiki ASCII (a-z, A-Z), ličby (0-9), podsmužki (_) a dypki (.).', + 'config-invalid-db-name' => 'Njepłaćiwe mjeno "$1" datoweje banki. +Wužij jenož pismiki ASCII (a-z, A-Z), ličby (0-9),a podsmužki (_) a wjazawki (-).', + 'config-invalid-db-prefix' => 'Njepłaćiwy prefiks "$1" datoweje banki. +Wužij jenož pismiki ASCII (a-z, A-Z), ličby (0-9), podsmužki (_) a wjazawki (-).', + 'config-connection-error' => '$1. + +Skontroluj serwer, wužiwarske a hesło a spytaj hišće raz.', + 'config-invalid-schema' => 'Njepłaćiwe šema za MediaWiki "$1". +Wužij jenož pismiki ASCII (a-z, A-Z), ličby (0-9) a podsmužki (_).', + 'config-db-sys-create-oracle' => 'Instalaciski program podpěruje jenož wužiwanje SYSDBA-konta za zakoženje noweho konta.', + 'config-db-sys-user-exists-oracle' => 'Wužiwarske konto "$1" hižo eksistuje. SYSDBA hodźi so jenož za załoženje noweho konta wužiwać!', + 'config-postgres-old' => 'PostgreSQL $1 abo nowši trěbny, maš $2.', + 'config-sqlite-name-help' => 'Wubjer mjeno, kotrež twój wiki identifikuje. +Njewužij mjezery abo wjazawki. +To budźe so za mjeno dataje SQLite-datow wužiwać.', + 'config-sqlite-mkdir-error' => 'Zmylk při wutworjenju datoweho zapisa "$1". +Skontroluj městno a spytaj hišće raz.', + 'config-sqlite-dir-unwritable' => 'Njeje móžno do zapisa "$1" pisać. +Změń jeho prawa, tak zo webserwer móže do njeho pisać a spytaj hišće raz.', + 'config-sqlite-connection-error' => '$1. + +Skontroluj datowy zapis a mjeno datoweje banki kaj spytaj hišće raz.', + 'config-sqlite-readonly' => 'Do dataje $1 njeda so pisać.', + 'config-sqlite-cant-create-db' => 'Dataja $1 datoweje banki njeda so wutworić.', + 'config-sqlite-fts3-downgrade' => 'PHP wo podpěrje FTS3 k dispoziciji njesteji, table so znižuja', + 'config-can-upgrade' => "Su tabele MediaWiki w tutej datowej bance. +Zo by je na MediaWiki $1 aktualizował, klikń na '''Dale'''.", + 'config-upgrade-done-no-regenerate' => 'Aktualizacija dokónčena. + +Móžeš nětko [$1 swój wiki wužiwać].', + 'config-regenerate' => 'LocalSettings.php znowa wutworić →', + 'config-show-table-status' => 'Naprašowanje SHOW TABLE STATUS je so njeporadźiło!', + 'config-unknown-collation' => "'''Warnowanje:''' Datowa banka njeznatu kolaciju wužiwa.", + 'config-db-web-account' => 'Konto datoweje banki za webpřistup', + 'config-db-web-help' => 'wubjer wužiwarske mjeno a hesło, kotrejž webserwer budźe wužiwać, zo by z serwerom datoweje banki za wšědnu operaciju zwjazać', + 'config-db-web-account-same' => 'Samsne konto kaž za instalaciju wužiwać', + 'config-db-web-create' => 'Załož konto, jeli hišće njeeksistuje.', + 'config-db-web-no-create-privs' => 'Konto, kotrež sy za instalaciju podał, nima dosć woprawnjenjow, zo by konto wutworiło. +Konto, kotrež tu podawaće, dyrbi hižo eksistować.', + 'config-mysql-engine' => 'Składowanska mašina:', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-charset' => 'Znamješkowa sadźba datoweje banki:', + 'config-mysql-binary' => 'Binarny', + 'config-mysql-utf8' => 'UTF-8', + 'config-site-name' => 'Mjeno wikija:', + 'config-site-name-help' => 'To zjewi so w titulowej lejstwje wobhladaka kaž tež na wšelakich druhich městnach.', + 'config-site-name-blank' => 'Zapodaj sydłowe mjeno.', + 'config-project-namespace' => 'Mjenowy rum projekta:', + 'config-ns-generic' => 'Projekt', + 'config-ns-site-name' => 'Samsne kaž wikimjeno: $1', + 'config-ns-other' => 'Druhe (podać)', + 'config-ns-other-default' => 'MyWiki', + 'config-ns-invalid' => 'Podaty mjenowy rum "$1" je njepłaćiwy. +Podaj druhi projektowy mjenowy rum.', + 'config-ns-conflict' => 'Podaty mjenowy rum "$1" je w konflikće ze standardnym mjenjowym rumom MediaWiki. +Podaj druhi projektowy mjenowy rum.', + 'config-admin-box' => 'Administratorowe konto', + 'config-admin-name' => 'Twoje mjeno:', + 'config-admin-password' => 'Hesło:', + 'config-admin-password-confirm' => 'Hesło wospjetować:', + 'config-admin-help' => 'Zapodaj swoje preferowane wužiwarske mjeno, na přikład "Jurij Serb". +To je mjeno, kotrež budźeš wužiwać, zo by so do wikija přizjewił.', + 'config-admin-name-blank' => 'Zapodaj administratorowe wužiwarske mjeno.', + 'config-admin-name-invalid' => 'Podate wužiwarske mjeno "$1" je njepłaćiwe. +Podaj druhe wužiwarske mjeno.', + 'config-admin-password-blank' => 'Zapodaj hesło za administratorowe konto.', + 'config-admin-password-same' => 'Hesło dyrbi so wot wužiwarskeho mjena rozeznać.', + 'config-admin-password-mismatch' => 'Wobě hesle, kotrejž sy zapodał, njejstej jenakej.', + 'config-admin-email' => 'E-mejlowa adresa:', + 'config-admin-email-help' => 'Zapodaj tu e-mejlowu adresu, zo by přijimanje e-mejlow wot druhich wužiwarjow w tutym wikiju zmóžnił, swoje hesło wróćo stajił a zdźělenki wo změnach na swojich wobkedźbowanych stronach dostał.', + 'config-admin-error-user' => 'Interny zmylk při wutworjenju administratora z mjenom "$1".', + 'config-admin-error-password' => 'Interny zmylk při nastajenju hesła za administratora "$1":
    $2
    ', + 'config-admin-error-bademail' => 'Sy njepłaćiwu e-mejlowu adresu zapodał.', + 'config-subscribe' => '[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Rozesyłansku lisćinu wo připowědźenjach nowych wersijow ].abonować', + 'config-almost-done' => 'Sy skoro hotowy! +Móžeš nětko zbytnu konfiguraciju přeskočić a wiki hnydom instalować.', + 'config-optional-continue' => 'Dalše prašenja?', + 'config-optional-skip' => 'Instaluj nětko wiki.', + 'config-profile' => 'Profil wužiwarskich prawow:', + 'config-profile-wiki' => 'Tradicionelny wiki', + 'config-profile-no-anon' => 'Załoženje konto je trěbne', + 'config-profile-fishbowl' => 'Jenož awtorizowani wobdźěłarjo', + 'config-profile-private' => 'Priwatny wiki', + 'config-license' => 'Awtorske prawo a licenca:', + 'config-license-none' => 'Žane licencne podaća w nohowej lince', + 'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike', + 'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike', + 'config-license-cc-0' => 'Creative Commons "Zero"', + 'config-license-gfdl-old' => 'GNU Free Documentation License 1.2', + 'config-license-gfdl-current' => 'GNU Free Documentation License 1.3 abo nowša', + 'config-license-pd' => 'Powšitkownosći přistupny', + 'config-license-cc-choose' => 'Swójsku licencu Creative Commons wubrać', + 'config-email-settings' => 'E-mejlowe nastajenja', + 'config-enable-email' => 'Wuchadźace e-mejlki zmóžnić', + 'config-enable-email-help' => 'Jeli chceš e-mejl wužiwać, dyrbja so [http://www.php.net/manual/en/mail.configuration.php e-mejlowe nastajenja PHP] prawje konfigurować. +Jeli nochceš e-mejlowe funkcije wužiwać, móžeš je tu znjemóžnić.', + 'config-email-user' => 'E-mejl mjez wužiwarjemi zmóžnić', + 'config-email-user-help' => 'Wšěm wužiwarjam dowolić, jednomu druhemu e-mejlki pósłać, jeli su tutu funkciju w swojich nastajenjach zmóžnili.', + 'config-email-usertalk' => 'Zdźělenja za wužiwarske diskusijne strony zmóžnić', + 'config-email-usertalk-help' => 'Wužiwarjam dowolić zdźělenki wo změnach na wužiwarskich diskusijnych stronach dóstać, jeli woni su to w swojich nastajenjach zmóžnili.', + 'config-email-watchlist' => 'Zdźělenja za wobkedźbowanki zmóžnić', + 'config-email-watchlist-help' => 'Wužiwarjam dowolić zdźělenki wo jich wobked´bowanych stronach dóstać, jeli woni su to w swojich nastajenjach zmóžnili.', + 'config-email-auth' => 'E-mejlowu awtentifikaciju zmóžnić', + 'config-email-sender' => 'E-mejlowa adresa za wotmołwy:', + 'config-upload-settings' => 'Wobrazy a nahraća datajow', + 'config-upload-enable' => 'Nahraće datajow zmóžnić', + 'config-upload-deleted' => 'Zapis za zhašane dataje:', + 'config-upload-deleted-help' => 'Wubjer zapis, w kotrymž zhašene dataje maja so archiwować. +Idealnje tón njeměł z weba přistupny być.', + 'config-logo' => 'URL loga:', + 'config-instantcommons' => 'Instant commons zmóžnić', + 'config-cc-error' => 'Pytanje za licencu Creative Commons njeje žadyn wuslědk přinjesło. +Zapodaj licencne mjeno manuelnje.', + 'config-cc-again' => 'Zaso wubrać...', + 'config-cc-not-chosen' => 'Wubjer licencu Creative Commons a klikń na "dale".', + 'config-advanced-settings' => 'Rozšěrjena konfiguraćija', + 'config-cache-options' => 'Nastajenja za objektowe pufrowanje:', + 'config-cache-none' => 'Žane pufrowanje (žana funkcionalnosć so njewotstronja, ale spěšnosć móže so na wjetšich wikijowych sydłach wobwliwować)', + 'config-cache-accel' => 'Objektowe pufrowanje PHP (APC, eAccelerator, XCache abo WinCache)', + 'config-cache-memcached' => 'Memcached wužiwać (wužaduje sej přidatnu instalaciju a konfiguraciju)', + 'config-memcached-servers' => 'Serwery memcached:', + 'config-memcached-help' => 'Lisćina IP-adresow, kotrež maja so za Memcached wužiwać. +Kóžda linka měła jenož jednu IP-adresu a port, kotryž ma so wužiwać, wobsahować. Na přikład: +127.0.0.1:11211 +192.168.1.25:1234', + 'config-memcache-needservers' => 'Sy Memcached jako swój pufrowakowy typ wubrał, ale njejsy žane serwery podał', + 'config-memcache-badip' => 'Sy njepłaćiwu IP-adresu za Memcached zapodał: $1', + 'config-memcache-noport' => 'Njejsy žadyn port za wužiwanje serwera Memcached podał: $1. +Jeli port njewěš, standard je 11211.', + 'config-memcache-badport' => 'Portowe čisła za Memcached měli mjez $1 a $2 być', + 'config-extensions' => 'Rozšěrjenja', + 'config-extensions-help' => 'Rozšěrjenja podate horjeka buchu w twojim zapisu ./extensions namakane. + +To móže sej přidatnu konfiguraciju wužadać, ale móžeš je nětko zmóžnić.', + 'config-install-alreadydone' => "'''Warnowanje:''' Zda so, zo sy hižo MediaWiki instalował a pospytuješ jón znowa instalować. +Prošu pokročuj z přichodnej stronu.", + 'config-install-begin' => 'Přez kliknjenje na "{{int:config-continue}}" budźe so instalacija MediaWiki startować. +Jeli hišće chceš něšto změnić, klikń na "Wróćo".', + 'config-install-step-done' => 'dokónčene', + 'config-install-step-failed' => 'njeporadźiło', + 'config-install-extensions' => 'Inkluziwnje rozšěrjenja', + 'config-install-database' => 'Datowa banka so připrawja', + 'config-install-pg-schema-not-exist' => 'Šema PostgreSQL njeeksistuje', + 'config-install-pg-schema-failed' => 'Wutworjenje tabelow je so njeporadźiło. +Zawěsć, zo wužiwar "$1" móže do šemy "$2" pisać.', + 'config-install-pg-commit' => 'Změny so wotesyłaja', + 'config-install-pg-plpgsql' => 'Pruwowanje za rěču PL/pgSQL', + 'config-pg-no-plpgsql' => 'Dyrbiš rěč PL/pgSQL w datowej bance $1 instalować', + 'config-pg-no-create-privs' => 'Konto, kotrež sy za instalaciju podał, nima dosahace prawa za wutworjenje konta.', + 'config-install-user' => 'Tworjenje wužiwarja datoweje banki', + 'config-install-user-alreadyexists' => 'Wužiwar "$1" hižo eksistuje', + 'config-install-user-create-failed' => 'Wutworjenje wužiwarja "$1" je so njeporadźiło: $2', + 'config-install-user-grant-failed' => 'Prawo njeda so wužiwarjej "$1" dać: $2', + 'config-install-tables' => 'Tworjenje tabelow', + 'config-install-tables-exist' => "'''Warnowanje''': Zda so, zo tabele MediaWiki hižo eksistuja. +Wutworjenje so přeskakuje.", + 'config-install-tables-failed' => "'''Zmylk''': Wutworjenje tabele je so slědowaceho zmylka dla njeporadźiło: $1", + 'config-install-interwiki' => 'Standardna tabela interwikijow so pjelni', + 'config-install-interwiki-list' => 'interwiki.list njeda so namakać.', + 'config-install-interwiki-exists' => "'''Warnowanje''': Zda so, zo tabela interwikjow hižo zapiski wobsahuje. +Standardna lisćina sp přeskakuje.", + 'config-install-stats' => 'Statistika so inicializuje', + 'config-install-keys' => 'Tworjenje tajneho kluča', + 'config-install-sysop' => 'Tworjenje administratoroweho wužiwarskeho konta', + 'config-install-subscribe-fail' => 'Abonowanje "mediawiki-announce" njemóžno', + 'config-install-mainpage' => 'Hłowna strona so ze standardnym wobsahom wutworja', + 'config-install-extension-tables' => 'Tabele za zmóžnjene rozšěrjenja so tworja', + 'config-install-mainpage-failed' => 'Powěsć njeda so zasunyć: $1', + 'config-download-localsettings' => 'LocalSettings.php sćahnyć', + 'config-help' => 'pomoc', +); + +/** Hungarian (Magyar) + * @author Dani + * @author Glanthor Reviol + */ +$messages['hu'] = array( + 'config-desc' => 'A MediaWiki telepítője', + 'config-title' => 'A MediaWiki $1 telepítése', + 'config-information' => 'Információ', + 'config-localsettings-upgrade' => 'Már létezik a LocalSettings.php fájl. +A telepített szoftver frissítéséhez írd be az alábbi mezőbe a $wgUpgradeKey beállítás értékét, melyet a LocalSettings.php nevű fájlban találhatsz meg.', + 'config-localsettings-key' => 'Frissítési kulcs:', + 'config-localsettings-badkey' => 'A megadott kulcs érvénytelen.', + 'config-localsettings-connection-error' => 'Nem sikerült csatlakozni az adatbázishoz a LocalSettings.php-ben vagy az AdminSettings.php-ben megadott adatokkal. Ellenőrizd a beállításokat, majd próbáld újra. + +$1', + 'config-session-error' => 'Nem sikerült elindítani a munkamenetet: $1', + 'config-session-expired' => 'Úgy tűnik, hogy a munkamenetadatok lejártak. +A munkamenetek élettartama a következőre van beállítva: $1. +Az érték növelhető a php.ini session.gc_maxlifetime beállításának módosításával. +Indítsd újra a telepítési folyamatot.', + 'config-no-session' => 'Elvesztek a munkamenetadatok! +Ellenőrizd, hogy a php.ini-ben a session.save_path a megfelelő könyvtárra mutat-e.', + 'config-your-language' => 'Nyelv:', + 'config-your-language-help' => 'A telepítési folyamat során használandó nyelv.', + 'config-wiki-language' => 'A wiki nyelve:', + 'config-wiki-language-help' => 'Az a nyelv, amin a wiki tartalmának legnagyobb része íródik.', + 'config-back' => '← Vissza', + 'config-continue' => 'Folytatás →', + 'config-page-language' => 'Nyelv', + 'config-page-welcome' => 'Üdvözöl a MediaWiki!', + 'config-page-dbconnect' => 'Kapcsolódás az adatbázishoz', + 'config-page-upgrade' => 'Telepített változat frissítése', + 'config-page-dbsettings' => 'Adatbázis-beállítások', + 'config-page-name' => 'Név', + 'config-page-options' => 'Beállítások', + 'config-page-install' => 'Telepítés', + 'config-page-complete' => 'Kész!', + 'config-page-restart' => 'Telepítés újraindítása', + 'config-page-readme' => 'Tudnivalók', + 'config-page-releasenotes' => 'Kiadási megjegyzések', + 'config-page-copying' => 'Másolás', + 'config-page-upgradedoc' => 'Frissítés', + 'config-page-existingwiki' => 'Létező wiki', + 'config-help-restart' => 'Szeretnéd törölni az eddig megadott összes adatot és újraindítani a telepítési folyamatot?', + 'config-restart' => 'Igen, újraindítás', + 'config-welcome' => '=== A környezet ellenőrzése === +Néhány alapvető ellenőrzés lett végrehajtva, ami meghatározza, hogy ez a környezet alkalmas-e a MediaWiki telepítésére. +Ha telepítéssel kapcsolatos segítségre van szükséged, add meg ezen ellenőrzések eredményét.', + 'config-copyright' => "=== Licenc és feltételek === + +$1 + +Ez a program szabad szoftver; terjeszthető illetve módosítható a Free Software Foundation által kiadott GNU General Public License dokumentumában leírtak; akár a licenc 2-es, akár (tetszőleges) későbbi változata szerint. + +Ez a program abban a reményben kerül közreadásra, hogy hasznos lesz, de minden egyéb '''garancia nélkül''', az '''eladhatóságra''' vagy '''valamely célra való alkalmazhatóságra''' való származtatott garanciát is beleértve. További részleteket a GNU General Public License tartalmaz. + +A felhasználónak a programmal együtt meg kell kapnia a GNU General Public License egy példányát; ha mégsem kapta meg, akkor írjon a Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. címre, vagy [http://www.gnu.org/copyleft/gpl.html tekintse meg online].", + 'config-sidebar' => '* [http://www.mediawiki.org A MediaWiki honlapja] +* [http://www.mediawiki.org/wiki/Help:Contents Felhasználói kézikönyv] +* [http://www.mediawiki.org/wiki/Manual:Contents Útmutató adminisztrátoroknak] +* [http://www.mediawiki.org/wiki/Manual:FAQ GyIK] +---- +* Ismertető +* Kiadási megjegyzések +* Másolás +* Frissítés', + 'config-env-good' => 'A környezet ellenőrzése befejeződött. +A MediaWiki telepíthető.', + 'config-env-bad' => 'A környezet ellenőrzése befejeződött. +A MediaWiki nem telepíthető.', + 'config-env-php' => 'A PHP verziója: $1', + 'config-env-php-toolow' => 'PHP $1 van telepítve, +azonban a MediaWikinek PHP $2, vagy újabb szükséges.', + 'config-unicode-using-utf8' => 'A rendszer Unicode normalizálására Brion Vibber utf8_normalize.so könyvtárát használja.', + 'config-unicode-using-intl' => 'A rendszer Unicode normalizálására az [http://pecl.php.net/intl intl PECL kiterjesztést] használja.', + 'config-unicode-pure-php-warning' => "'''Figyelmeztetés''': Az Unicode normalizáláshoz szükséges [http://pecl.php.net/intl intl PECL kiterjesztés] nem érhető el, helyette a lassú, PHP alapú implementáció lesz használva. +Ha nagy látogatottságú oldalt üzemeltetsz, itt találhatsz további információkat [http://www.mediawiki.org/wiki/Unicode_normalization_considerations a témáról].", + 'config-no-db' => 'Nem sikerült egyetlen használható adatbázismeghajtót sem találni.', + 'config-no-fts3' => "'''Figyelmeztetés''': Az SQLite [http://sqlite.org/fts3.html FTS3 modul] nélkül lett fordítva, a keresési funkciók nem fognak működni ezen a rendszeren.", + 'config-register-globals' => "'''Figyelmeztetés: A PHP [http://php.net/register_globals register_globals] beállítása engedélyezve van.''' +'''Tiltsd le, ha van rá lehetőséged.''' +A MediaWiki működőképes a beállítás használata mellett, de a szerver biztonsági kockázatnak lesz kitéve.", + 'config-magic-quotes-runtime' => "'''Kritikus hiba: a [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] aktív!''' +Ez a beállítás kiszámíthatatlan károkat okoz a bevitt adatokban. +A MediaWiki csak akkor telepíthető, ha ki van kapcsolva.", + 'config-magic-quotes-sybase' => "'''Kritikus hiba: a [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] aktív!''' +Ez a beállítás kiszámíthatatlan károkat okoz a bevitt adatokban. +A MediaWiki csak akkor telepíthető, ha ki van kapcsolva.", + 'config-mbstring' => "'''Kritikus hiba: az [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime mbstring.func_overload] aktív!''' +Ez a beállítás hibákat okoz és kiszámíthatatlanul károsíthatja bevitt adatokat. +A MediaWiki csak akkor telepíthető, ha ki van kapcsolva.", + 'config-ze1' => "'''Kritikus hiba: a [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] aktív!''' +Ez a beállítás borzalmas hibákat okoz a MediaWiki futása során. +A MediaWiki csak akkor telepíthető, ha ki van kapcsolva.", + 'config-xml-bad' => 'A PHP XML-modulja hiányzik. +Egyes MediaWiki-funkciók, melyek ezt a modult igénylik, nem fognak működni ilyen beállítások mellett. +Ha Madrake-et futtatsz, telepítsd a php-xml csomagot.', + 'config-pcre' => 'Úgy tűnik, hogy a PCRE támogató modul hiányzik. +A MediaWikinek Perl-kompatibilis reguláriskifejezés-függvényekre van szüksége a működéshez.', + 'config-memory-raised' => 'A PHP memory_limit beállításának értéke: $1. Meg lett növelve a következő értékre: $2.', + 'config-memory-bad' => "'''Figyelmeztetés:''' A PHP memory_limit beállításának értéke $1. +Ez az érték valószínűleg túl kevés, a telepítés sikertelen lehet.", + 'config-xcache' => 'Az [http://trac.lighttpd.net/xcache/ XCache] telepítve van', + 'config-apc' => 'Az [http://www.php.net/apc APC] telepítve van', + 'config-eaccel' => 'Az [http://eaccelerator.sourceforge.net/ eAccelerator] telepítve van', + 'config-wincache' => 'A [http://www.iis.net/download/WinCacheForPhp WinCache] telepítve van', + 'config-no-cache' => "'''Figyelmeztetés:''' Nem található [http://eaccelerator.sourceforge.net eAccelerator], [http://www.php.net/apc APC], [http://trac.lighttpd.net/xcache/ XCache] és [http://www.iis.net/download/WinCacheForPhp WinCache] sem. +Az objektum-gyorsítótárazás nem lesz engedélyezve.", + 'config-diff3-bad' => 'GNU diff3 nem található.', + 'config-imagemagick' => 'Az ImageMagick megtalálható a rendszeren: $1. +A bélyegképek készítése engedélyezve lesz a feltöltések engedélyezése esetén.', + 'config-gd' => 'A GD grafikai könyvtár elérhető. +Bélyegképek készítése működni fog, miután engedélyezted a fájlfeltöltést.', + 'config-no-scaling' => 'Nem található a GD könyvtár és az ImageMagick. +A bélyegképek készítése le lesz tiltva.', + 'config-no-uri' => "'''Hiba:''' Nem sikerült megállapítani a jelenlegi URI-t. +Telepítés megszakítva.", + 'config-uploads-not-safe' => "'''Figyelmeztetés:''' a feltöltésekhez használt alapértelmezett könyvtárban ($1) tetszőleges külső szkript futtatható. +Habár a MediaWiki ellenőrzi a feltöltött fájlokat az efféle biztonsági veszélyek megtalálása érdekében, a feltöltés engedélyezése előtt erősen ajánlott a [http://www.mediawiki.org/wiki/Manual:Security#Upload_security a sérülékenység megszüntetése].", + 'config-db-type' => 'Adatbázis típusa:', + 'config-db-host' => 'Adatbázis hosztneve:', + 'config-db-host-help' => 'Ha az adatbázisszerver másik szerveren található, add meg a hosztnevét vagy az IP-címét. + +Ha megosztott webtárhelyet használsz, a szolgáltató dokumentációjában megtalálható a helyes hosztnév. + +Ha Windows-alapú szerverre telepítesz, és MySQL-t használsz, a „localhost” nem biztos, hogy működni fog. Ha így van, próbáld meg a „127.0.0.1” helyi IP-cím használatát.', + 'config-db-host-oracle' => 'Adatbázis TNS:', + 'config-db-wiki-settings' => 'A wiki azonosítása', + 'config-db-name' => 'Adatbázisnév:', + 'config-db-name-help' => 'Válassz egy nevet a wiki azonosítására. +Ne tartalmazzon szóközt. + +Ha megosztott webtárhelyet használsz, a szolgáltatód vagy egy konkrét adatbázisnevet ad neked használatra, vagy te magad hozhatsz létre adatbázisokat a vezérlőpulton keresztül.', + 'config-db-name-oracle' => 'Adatbázisséma:', + 'config-db-install-account' => 'A telepítéshez használt felhasználói fiók adatai', + 'config-db-username' => 'Felhasználónév:', + 'config-db-password' => 'Jelszó:', + 'config-db-install-username' => 'Írd be az adatbázisrendszerhez való csatlakozáshoz használt felhasználónevet. +Ez nem a MediaWiki fiók felhasználóneve; ez az adatbázisrendszeren használt felhasználóneved.', + 'config-db-install-password' => 'Írd be az adatbázisrendszerhez való csatlakozáshoz használt jelszót. +Ez nem a MediaWiki-fiók jelszava; ez az adatbázisrendszeren használt jelszavad.', + 'config-db-install-help' => 'Add meg a felhasználónevet és jelszót, amivel a telepítő csatlakozhat az adatbázishoz.', + 'config-db-account-lock' => 'Általános működés során is ezen információk használata', + 'config-db-wiki-account' => 'Általános működéshez használt felhasználói adatok', + 'config-db-wiki-help' => 'Add meg azt a felhasználónevet és jelszót, amivel a wiki fog csatlakozni az adatbázishoz működés közben. +Ha a fiók nem létezik és a telepítést végző fiók rendelkezik megfelelő jogosultsággal, egy új fiók készül a megadott a névvel, azon minimális jogosultságkörrel, ami a wiki működéséhez szükséges.', + 'config-db-prefix' => 'Adatbázistáblák nevének előtagja:', + 'config-db-prefix-help' => 'Ha egyetlen adatbázison osztozik több wiki, vagy a MediaWiki és más webalkalmazás, választhatsz egy előtagot a táblaneveknek, hogy megelőzd a konfliktusokat. +Ne használj szóközöket. + +A mezőt általában üresen kell hagyni.', + 'config-db-charset' => 'Az adatbázis karakterkészlete', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0, bináris', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0, visszafelé kompatibilis UTF-8', + 'config-charset-help' => "'''Figyelmezetés:''' Ha a '''visszafelé kompatibilis UTF-8''' beállítást használod MySQL 4.1 vagy újabb verziók esetén, és utána a mysqldump programmal készítesz róla biztonsági másolatot, az tönkreteheti az összes nem ASCII-karaktert, visszafordíthatatlanul károsítva a másolatokban tárolt adatokat! + +'''Bináris''' módban a MediaWiki az UTF-8-ban kódolt szöveget bináris mezőkben tárolja az adatbázisban. +Ez sokkal hatékonyabb a MySQL UTF-8-módjától, és lehetővé teszi, hogy a teljes Unicode-karakterkészletet használd. +'''UTF-8-módban''' MySQL tudja, hogy milyen karakterkészlettel van kódolva az adat, és megfelelően tárolja és konvertálja, de +nem használhatod a [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane] feletti karaktereket.", + 'config-mysql-old' => 'A MySQL $1 vagy újabb verziója szükséges, a rendszeren $2 van.', + 'config-db-port' => 'Adatbázisport:', + 'config-db-schema' => 'MediaWiki-séma', + 'config-db-schema-help' => 'A fenti sémák általában megfelelőek. +Csak akkor módosíts rajtuk, ha tudod, hogy szükséges.', + 'config-sqlite-dir' => 'SQLite-adatkönyvtár:', + 'config-oracle-def-ts' => 'Alapértelmezett táblatér:', + 'config-oracle-temp-ts' => 'Ideiglenes táblatér:', + 'config-support-info' => 'A MediaWiki a következő adatbázisrendszereket támogatja: + +$1 + +Ha az alábbi listán nem találod azt a rendszert, melyet használni szeretnél, a fenti linken található instrukciókat követve engedélyezheted a támogatását.', + 'config-support-mysql' => '* A $1 a MediaWiki elsődleges célpontja, így a legjobban támogatott ([http://www.php.net/manual/en/mysql.installation.php Hogyan fordítható a PHP MySQL-támogatással])', + 'config-support-postgres' => '* A $1 népszerű, nyílt forráskódú adatbázisrendszer, a MySQL alternatívája ([http://www.php.net/manual/en/pgsql.installation.php Hogyan fordítható a PHP PostgreSQL-támogatással]). Több apró, javítatlan hiba is előfordulhat, így nem ajánlott éles környezetben használni.', + 'config-support-sqlite' => '* Az $1 egy könnyű, nagyon jól támogatott adatbázisrendszer. ([http://www.php.net/manual/en/pdo.installation.php Hogyan fordítható a PHP SQLite-támogatással], PDO-t használ)', + 'config-support-oracle' => '* Az $1 kereskedelmi, vállalati adatbázisrendszer. ([http://www.php.net/manual/en/oci8.installation.php Hogyan fordítható a PHP OCI8-támogatással])', + 'config-header-mysql' => 'MySQL-beállítások', + 'config-header-postgres' => 'PostgreSQL-beállítások', + 'config-header-sqlite' => 'SQLite-beállítások', + 'config-header-oracle' => 'Oracle-beállítások', + 'config-invalid-db-type' => 'Érvénytelen adatbázistípus', + 'config-missing-db-name' => 'Meg kell adnod az „adatbázis nevét”', + 'config-missing-db-server-oracle' => 'Meg kell adnod az „Adatbázis TNS” értékét', + 'config-invalid-db-server-oracle' => 'Érvénytelen adatbázis TNS: „$1” +Csak ASCII betűk (a-z, A-Z), számok (0-9), alulvonás (_) és pont (.) használható.', + 'config-invalid-db-name' => 'Érvénytelen adatbázisnév: „$1”. +Csak ASCII-karakterek (a-z, A-Z), számok (0-9), alulvonás (_) és kötőjel (-) használható.', + 'config-invalid-db-prefix' => 'Érvénytelen adatbázisnév-előtag: „$1”. +Csak ASCII-karakterek (a-z, A-Z), számok (0-9), alulvonás (_) és kötőjel (-) használható.', + 'config-connection-error' => '$1. + +Ellenőrizd a hosztot, felhasználónevet és jelszót, majd próbáld újra.', + 'config-invalid-schema' => 'Érvénytelen MediaWiki-séma: „$1”. +Csak ASCII-karakterek (a-z, A-Z), számok (0-9) és alulvonás (_) használható.', + 'config-db-sys-create-oracle' => 'A telepítő csak a SYSDBA fiókkal tud új felhasználói fiókot létrehozni.', + 'config-db-sys-user-exists-oracle' => 'Már létezik „$1” nevű felhasználói fiók. A SYSDBA csak új fiók létrehozására használható!', + 'config-postgres-old' => 'A PostgreSQL $1 vagy újabb verziója szükséges, a rendszeren $2 van.', + 'config-sqlite-parent-unwritable-nogroup' => 'Nem lehet létrehozni az adatok tárolásához szükséges $1 könyvtárat, mert a webszerver nem írhat a szülőkönyvtárba ($2). + +A telepítő nem tudta megállapíteni, hogy melyik felhasználói fiókon fut a webszerver. +A folytatáshoz tedd írhatóvá ezen fiók (és más fiókok!) számára a következő könyvtárat: $3. +Unix/Linux rendszereken tedd a következőt: + +
    cd $2
    +mkdir $3
    +chmod a+w $3
    ', + 'config-sqlite-mkdir-error' => 'Nem sikerült létrehozni a következő adatkönyvtárat: „$1”. +Ellenőrizd a helyet, majd próbáld újra.', + 'config-sqlite-dir-unwritable' => 'Nem sikerült írni a következő könyvtárba: „$1”. +Módosítsd a jogosultságokat úgy, hogy a webszerver tudjon oda írni, majd próbáld újra.', + 'config-sqlite-connection-error' => '$1. + +Ellenőrizd az adatkönyvtárat és az adatbázisnevet, majd próbáld újra.', + 'config-sqlite-readonly' => 'A következő fájl nem írható: $1.', + 'config-regenerate' => 'LocalSettings.php elkészítése újra →', + 'config-show-table-status' => 'A SHOW TABLE STATUS lekérdezés nem sikerült!', + 'config-unknown-collation' => "'''Figyelmeztetés:''' az adatbázis ismeretlen egybevetést használ.", + 'config-db-web-account' => 'A webes hozzáférésnél használt adatbázisfiók', + 'config-db-web-help' => 'Add meg azt a felhasználónevet és jelszót, amit a webszerver a wiki általános működése során használ a csatlakozáshoz.', + 'config-db-web-account-same' => 'Ezen fiók használata a telepítéshez is', + 'config-db-web-create' => 'Fiók létrehozása, ha még nem létezik.', + 'config-mysql-engine' => 'Tárolómotor:', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-engine-help' => "A legtöbb esetben az '''InnoDB''' a legjobb választás, mivel megfelelően támogatja a párhuzamosságot. + +A '''MyISAM''' gyorsabb megoldás lehet egyfelhasználós vagy csak olvasható környezetekben, azonban a MyISAM-adatbázisok sokkal gyakrabban sérülnek meg, mint az InnoDB-adatbázisok.", + 'config-mysql-charset' => 'Adatbázis karakterkészlete:', + 'config-mysql-binary' => 'Bináris', + 'config-mysql-utf8' => 'UTF-8', + 'config-mysql-charset-help' => "'''Bináris módban''' a MediaWiki az UTF-8-as szövegeket bináris mezőkben tárolja az adatbázisban. +Ez sokkal hatékonyabb a MySQL UTF-8-as módjánál, és lehetővé teszi a teljes Unicode-karakterkészlet használatát. + +'''UTF-8-as módban''' a MySQL tudni fogja,hogy az adatok milyen karakterkészlettel rendelkeznek, és megfelelően átalakítja őket, azonban nem tárolhatóak olyan karakterek, melyek a [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane] felett vannak.", + 'config-site-name' => 'A wiki neve:', + 'config-site-name-help' => 'A böngésző címsorában és még számos más helyen jelenik meg.', + 'config-site-name-blank' => 'Add meg az oldal nevét.', + 'config-project-namespace' => 'Projektnévtér:', + 'config-ns-generic' => 'Projekt', + 'config-ns-site-name' => 'Ugyanaz, mint a wiki neve: $1', + 'config-ns-other' => 'Más (meg kell adni)', + 'config-ns-other-default' => 'SajátWiki', + 'config-project-namespace-help' => "A Wikipédia példáját követve számos wiki elkülöníti egy '''projekt névtérbe''' az irányelveit a tartalommal rendelkező lapoktól +Az ebben a névtérben található lapok nevei egy előtaggal kezdődnek, amit itt adhatsz meg. +Általában az előtag a wiki nevéből származik, de nem tartalmazhat írásjeleket, például „#”-t vagy „:”-t.", + 'config-admin-box' => 'Adminisztrátori fiók', + 'config-admin-name' => 'Név:', + 'config-admin-password' => 'Jelszó:', + 'config-admin-password-confirm' => 'Jelszó újra:', + 'config-admin-help' => 'Írd be a kívánt felhasználónevet, például „Kovács János”. +Ezzel a névvel fogsz majd bejelentkezni a wikibe.', + 'config-admin-name-blank' => 'Add meg az adminisztrátor felhasználónevét!', + 'config-admin-name-invalid' => 'A megadott felhasználónév ($1) érvénytelen. +Adj meg egy másik felhasználónevet.', + 'config-admin-password-blank' => 'Add meg az adminisztrátori fiók jelszavát!', + 'config-admin-password-same' => 'A jelszó nem lehet ugyanaz, mint a felhasználónév.', + 'config-admin-password-mismatch' => 'A megadott jelszavak nem egyeznek.', + 'config-admin-email' => 'E-mail cím:', + 'config-admin-email-help' => 'Add meg az e-mail címedet, hogy más felhasználók küldhessenek e-maileket a wikin keresztül, új jelszót tudj kérni, és értesülhess a figyelőlistádon lévő lapokon történt változásokról. Üresen is hagyhatod ezt a mezőt.', + 'config-subscribe-help' => 'Ez egy alacsony forgalmú levelezőlista, ahol a kiadásokkal kapcsolatos bejelentések jelennek meg, a fontos biztonsági javításokkal együtt. +Ajánlott feliratkozni rá, és frissíteni a MediaWikit, ha új verzió jön ki.', + 'config-almost-done' => 'Már majdnem kész! +A további konfigurációt kihagyhatod, és most azonnal elindíthatod a wiki telepítését.', + 'config-optional-continue' => 'További információk megadása.', + 'config-optional-skip' => 'Épp elég volt, települjön a wiki!', + 'config-profile' => 'Felhasználói jogosultságok profilja:', + 'config-profile-wiki' => 'Hagyományos wiki', + 'config-profile-no-anon' => 'Felhasználói fiók létrehozása szükséges', + 'config-profile-fishbowl' => 'Csak engedélyezett szerkesztők', + 'config-profile-private' => 'Privát wiki', + 'config-profile-help' => "A wikik akkor működnek a legjobban, ha minél több felhasználó számára engedélyezett a szerkesztés. +A MediaWikiben könnyű ellenőrizni a legutóbbi változtatásokat,és visszaállítani a naiv vagy káros felhasználók által okozott károkat. + +A MediaWiki azonban számos helyzetben hasznos lehet, és néha nem könnyű mindenkit meggyőzni a wiki előnyeiről. +Választhatsz! + +'''{{int:config-profile-wiki}}kben''' bárki szerkeszthet, akár bejelentkezés nélkül is. A '''{{int:config-profile-no-anon}}''' beállítás további biztonságot nyújt, azonban elijesztheti az alkalmi szerkesztőket. + +Lehetőség van arra is, hogy '''{{lc:{{int:config-profile-fishbowl}}}}''' módosíthassák a lapokat, de a nyilvánosság ekkor megtekintheti a lapokat és azok laptörténetét is. '''{{int:config-profile-private}}''' esetén csak az engedélyezett szerkesztők tekinthetik meg a lapokat, és ugyanez a csoport szerkeszthet. + +Telepítés után jóval összetettebb jogosultságrendszer állítható össze, további információ a [http://www.mediawiki.org/wiki/Manual:User_rights kézikönyv kapcsolódó bejegyzésében].", + 'config-license' => 'Szerzői jog és licenc:', + 'config-license-none' => 'Nincs licencjelzés', + 'config-license-cc-by-sa' => 'Creative Commons Nevezd meg! - Így add tovább!', + 'config-license-cc-by-nc-sa' => 'Creative Commons Nevezd meg! - Ne add el! - Így add tovább!', + 'config-license-cc-0' => 'Creative Commons Zero', + 'config-license-gfdl-old' => 'GNU Szabad Dokumentációs Licenc 1.2', + 'config-license-gfdl-current' => 'GNU Szabad Dokumentációs Licenc 1.3 vagy újabb', + 'config-license-pd' => 'Közkincs', + 'config-license-cc-choose' => 'Creative Commons-licenc választása', + 'config-license-help' => "A legtöbb wiki [http://freedomdefined.org/Definition szabad licenc] alatt teszi közzé a szerkesztéseit. +Ez erősíti a közösségi tulajdon érzését, és elősegíti a hosszú távú közreműködést. +Általában szükségtelen magán- vagy vállalati wiki esetén. + +Ha a Wikipédiáról szeretnél szövegeket másolni, és a Wikipédián felhasználhassák a wikidben található szöveget, akkor a '''Creative Commons Nevezd meg! - Így add tovább!''' lehetőséget válaszd. + +A GNU Szabad Dokumentációs Licenc a Wikipédia korábbi licence. +Még ma is érvényes, azonban van néhány tulajdonsága, amely nehezíti az újrafelhasználást és az értelmezését.", + 'config-email-settings' => 'E-mail beállítások', + 'config-enable-email' => 'Kimenő e-mailek engedélyezése', + 'config-enable-email-help' => 'E-mailek küldéséhez [http://www.php.net/manual/en/mail.configuration.php a PHP mail beállításait] megfelelően meg kell adni. +Ha nem akarsz semmilyen e-mailes funkciót használni, itt tilthatod le őket.', + 'config-email-sender' => 'Válaszcím:', + 'config-upload-settings' => 'Képek és fájlok feltöltése', + 'config-upload-enable' => 'Fájlfeltöltés engedélyezése', + 'config-upload-deleted' => 'Törölt fájlok könyvtára:', + 'config-logo' => 'A logó URL-címe:', + 'config-instantcommons' => 'Instant Commons engedélyezése', + 'config-instantcommons-help' => 'Az [http://www.mediawiki.org/wiki/InstantCommons Instant Commons] lehetővé teszi, hogy a wikin használhassák a [http://commons.wikimedia.org/ Wikimedia Commons] oldalon található képeket, hangokat és más médiafájlokat. +A használatához a MediaWikinek internethozzáférésre van szüksége. + +A funkcióról és hogy hogyan állítható be más wikik esetén [http://mediawiki.org/wiki/Manual:$wgForeignFileRepos a kézikönyvben] találhatsz további információkat.', + 'config-cc-again' => 'Válassz újra…', + 'config-advanced-settings' => 'Haladó beállítások', + 'config-cache-options' => 'Objektum-gyorsítótárazás beállításai:', + 'config-cache-none' => 'Nincs gyorsítótárazás (minden funkció működik, de nagyobb wiki esetében lassabb működést eredményezhet)', + 'config-cache-accel' => 'PHP-objektumok gyorsítótárazása (APC, eAccelerator, XCache or WinCache)', + 'config-cache-memcached' => 'Memcached használata (további telepítés és konfigurálás szükséges)', + 'config-memcached-servers' => 'Memcached-szerverek:', + 'config-memcached-help' => 'Azon IP-címek listája, melyeket a Memcached használhat. +Vesszővel kell elválasztani őket, és meg kell adni a portot is. Például: + 127.0.0.1:11211 + 192.168.1.25:11211', + 'config-extensions' => 'Kiterjesztések', + 'config-install-step-done' => 'kész', + 'config-install-step-failed' => 'sikertelen', + 'config-install-extensions' => 'Kiterjesztések beillesztése', + 'config-install-database' => 'Adatbázis felállítása', + 'config-install-user' => 'Adatbázis-felhasználó létrehozása', + 'config-install-tables' => 'Táblák létrehozása', + 'config-install-tables-exist' => "'''Figyelmeztetés''': úgy tűnik, hogy a MediaWiki táblái már léteznek. +Létrehozás kihagyása.", + 'config-install-tables-failed' => "'''Hiba''': a tábla létrehozása nem sikerült a következő miatt: $1", + 'config-install-interwiki' => 'Alapértelmezett nyelvközihivatkozás-tábla feltöltése', + 'config-install-interwiki-list' => 'Az interwiki.list fájl nem található.', + 'config-install-stats' => 'Statisztika inicializálása', + 'config-install-keys' => 'Titkos kulcsok generálása', + 'config-insecure-keys' => "'''Figyelmeztetés:''' A telepítés során generált $1 {{PLURAL:$2|biztonsági kulcs|biztonsági kulcsok}} nem teljesen $1 {{PLURAL:$2|biztonságos|biztonságosak}}. Érdemes {{PLURAL:$2||őket}} manuálisan megváltoztatni.", + 'config-install-sysop' => 'Az adminisztrátor felhasználói fiókjának létrehozása', + 'config-install-subscribe-fail' => 'Nem sikerült feliratkozni a mediawiki-announce levelezőlistára', + 'config-install-mainpage' => 'Kezdőlap létrehozása az alapértelmezett tartalommal', + 'config-install-extension-tables' => 'Táblák létrehozása az engedélyezett kiterjesztésekhez', + 'config-install-mainpage-failed' => 'Nemsikerült létrehozni a kezdőlapot: $1', + 'config-install-done' => "'''Gratulálunk!''' +A MediaWiki telepítése sikeresen befejeződött. + +A telepítő elkészítette a LocalSettings.php fájlt, amely tartalmazza az összes beállítást. + +Ezt le kell tölteni, majd elhelyezni a wiki telepítési könyvtárába (az a könyvtár, ahol az index.php is található). + +A letöltés automatikusan elindul. Ha mégsem indulna el, vagy megszakítottad, az alábbi linkre kattintva újra letöltheted: + +$3 + +'''Megjegyzés''': Ha ezt most nem teszed meg, és kilépsz a telepítésből, az elkészített konfigurációs fájlt nem tudod elérni a későbbiekben. + +Ha végeztél a fájl elhelyezésével, '''[$2 beléphetsz a wikibe]'''.", + 'config-download-localsettings' => 'LocalSettings.php letöltése', + 'config-help' => 'segítség', +); + +/** Interlingua (Interlingua) + * @author McDutchie + */ +$messages['ia'] = array( + 'config-desc' => 'Le installator de MediaWiki', + 'config-title' => 'Installation de MediaWiki $1', + 'config-information' => 'Information', + 'config-localsettings-upgrade' => 'Un file LocalSettings.php ha essite detegite. +Pro actualisar iste installation, per favor entra le valor de $wgUpgradeKey in le quadro hic infra. +Iste se trova in LocalSettings.php.', + 'config-localsettings-cli-upgrade' => 'Un file LocalSettings.php file ha essite detegite. +Pro actualisar iste installation, per favor executa upgrade.php.', + 'config-localsettings-key' => 'Clave de actualisation:', + 'config-localsettings-badkey' => 'Le clave que tu forniva es incorrecte', + 'config-upgrade-key-missing' => 'Un installation existente de MediaWiki ha essite detegite. +Pro actualisar iste installation, es necessari adjunger le sequente linea al fin del file LocalSettings.php: + +$1', + 'config-localsettings-incomplete' => 'Le file LocalSettings.php existente pare esser incomplete. +Le variabile $1 non es definite. +Per favor cambia LocalSettings.php de sorta que iste variabile es definite, e clicca "Continuar".', + 'config-localsettings-connection-error' => 'Un error esseva incontrate durante le connexion al base de datos usante le configurationes specificate in LocalSettings.php o AdminSettings.php. Per favor repara iste configurationes e tenta lo de novo. + +$1', + 'config-session-error' => 'Error al comenciamento del session: $1', + 'config-session-expired' => 'Le datos de tu session pare haber expirate. +Le sessiones es configurate pro un duration de $1. +Tu pote augmentar isto per definir session.gc_maxlifetime in php.ini. +Reinitia le processo de installation.', + 'config-no-session' => 'Le datos de tu session es perdite! +Verifica tu php.ini e assecura te que un directorio appropriate es definite in session.save_path.', + 'config-your-language' => 'Tu lingua:', + 'config-your-language-help' => 'Selige un lingua a usar durante le processo de installation.', + 'config-wiki-language' => 'Lingua del wiki:', + 'config-wiki-language-help' => 'Selige le lingua in que le wiki essera predominantemente scribite.', + 'config-back' => '← Retro', + 'config-continue' => 'Continuar →', + 'config-page-language' => 'Lingua', + 'config-page-welcome' => 'Benvenite a MediaWiki!', + 'config-page-dbconnect' => 'Connecter al base de datos', + 'config-page-upgrade' => 'Actualisar le installation existente', + 'config-page-dbsettings' => 'Configuration del base de datos', + 'config-page-name' => 'Nomine', + 'config-page-options' => 'Optiones', + 'config-page-install' => 'Installar', + 'config-page-complete' => 'Complete!', + 'config-page-restart' => 'Reinitiar installation', + 'config-page-readme' => 'Lege me', + 'config-page-releasenotes' => 'Notas del version', + 'config-page-copying' => 'Copiar', + 'config-page-upgradedoc' => 'Actualisar', + 'config-page-existingwiki' => 'Wiki existente', + 'config-help-restart' => 'Vole tu rader tote le datos salveguardate que tu ha entrate e reinitiar le processo de installation?', + 'config-restart' => 'Si, reinitia lo', + 'config-welcome' => '=== Verificationes del ambiente === +Verificationes de base es exequite pro determinar si iste ambiente es apte pro le installation de MediaWiki. +Tu deberea indicar le resultatos de iste verificationes si tu ha besonio de adjuta durante le installation.', + 'config-copyright' => "=== Copyright and Terms === + +$1 + +Iste programma es software libere; vos pote redistribuer lo e/o modificar lo sub le conditiones del Licentia Public General de GNU publicate per le Free Software Foundation; version 2 del Licentia, o (a vostre option) qualcunque version posterior. + +Iste programma es distribuite in le sperantia que illo sia utile, ma '''sin garantia''', sin mesmo le implicite garantia de '''commercialisation''' o '''aptitude pro un proposito particular'''. +Vide le Licentia Public General de GNU pro plus detalios. + +Vos deberea haber recipite un exemplar del Licentia Public General de GNU con iste programma; si non, scribe al Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, o [http://www.gnu.org/copyleft/gpl.html lege lo in linea].", + 'config-sidebar' => '* [http://www.mediawiki.org Pagina principal de MediaWiki] +* [http://www.mediawiki.org/wiki/Help:Contents Guida pro usatores] +* [http://www.mediawiki.org/wiki/Manual:Contents Guida pro administratores] +* [http://www.mediawiki.org/wiki/Manual:FAQ FAQ] +---- +* Lege me +* Notas de iste version +* Conditiones de copia +* Actualisation', + 'config-env-good' => 'Le ambiente ha essite verificate. +Tu pote installar MediaWiki.', + 'config-env-bad' => 'Le ambiente ha essite verificate. +Tu non pote installar MediaWiki.', + 'config-env-php' => 'PHP $1 es installate.', + 'config-env-php-toolow' => 'PHP $1 es installate. +Nonobstante, MediaWiki require PHP $2 o plus recente.', + 'config-unicode-using-utf8' => 'utf8_normalize.so per Brion Vibber es usate pro le normalisation Unicode.', + 'config-unicode-using-intl' => 'Le [http://pecl.php.net/intl extension PECL intl] es usate pro le normalisation Unicode.', + 'config-unicode-pure-php-warning' => "'''Aviso''': Le [http://pecl.php.net/intl extension PECL intl] non es disponibile pro exequer le normalisation Unicode; le systema recurre al implementation lente in PHP pur. +Si tu sito ha un alte volumine de traffico, tu deberea informar te un poco super le [http://www.mediawiki.org/wiki/Unicode_normalization_considerations normalisation Unicode].", + 'config-unicode-update-warning' => "'''Aviso''': Le version installate del bibliotheca inveloppante pro normalisation Unicode usa un version ancian del bibliotheca del [http://site.icu-project.org/ projecto ICU]. +Tu deberea [http://www.mediawiki.org/wiki/Unicode_normalization_considerations actualisar lo] si le uso de Unicode importa a te.", + 'config-no-db' => 'Non poteva trovar un driver appropriate pro le base de datos!', + 'config-no-db-help' => 'Tu debe installar un driver de base de datos pro PHP. +Le sequente typos de base de datos es supportate: $1. + +Si tu sito usa un servitor partite (shared hosting), demanda a tu providitor de installar un driver de base de datos appropriate. +Si tu compilava PHP tu mesme, reconfigura lo con un cliente de base de datos activate, per exemplo usante ./configure --with-mysql. +Si tu installava PHP ex un pacchetto Debian o Ubuntu, tu debe installar equalmente le modulo php5-mysql.', + 'config-no-fts3' => "'''Attention''': SQLite es compilate sin [http://sqlite.org/fts3.html modulo FTS3]; functionalitate de recerca non essera disponibile in iste back-end.", + 'config-register-globals' => "'''Attention: le option [http://php.net/register_globals register_globals] de PHP es activate.''' +'''Disactiva lo si tu pote.''' +MediaWiki functionara, ma tu servitor es exponite a potential vulnerabilitates de securitate.", + 'config-magic-quotes-runtime' => "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] es active!''' +Iste option corrumpe le entrata de datos imprevisibilemente. +Tu non pote installar o usar MediaWiki si iste option non es disactivate.", + 'config-magic-quotes-sybase' => "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] es active!''' +Iste option corrumpe le entrata de datos imprevisibilemente. +Tu non pote installar o usar MediaWiki si iste option non es disactivate.", + 'config-mbstring' => "'''Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] es active!''' +Iste option causa errores e pote corrumper datos imprevisibilemente. +Tu non pote installar o usar MediaWiki si iste option non es disactivate.", + 'config-ze1' => "'''Fatal: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] es active!''' +Iste option causa horribile defectos con MediaWiki. +Tu non pote installar o usar MediaWiki si iste option non es disactivate.", + 'config-safe-mode' => "'''Aviso:''' Le [http://www.php.net/features.safe-mode modo secur] de PHP es active. +Isto pote causar problemas, particularmente si es usate le incargamento de files e le supporto de math.", + 'config-xml-bad' => 'Le modulo XML de PHP es mancante. +MediaWiki require functiones de iste modulo e non functionara in iste configuration. +Si tu usa Mandrake, installa le pacchetto php-xml.', + 'config-pcre' => 'Le modulo de supporto PCRE pare esser mancante. +MediaWiki require le functiones de expression regular compatibile con Perl pro poter functionar.', + 'config-pcre-no-utf8' => "'''Fatal''': Le modulo PCRE de PHP pare haber essite compilate sin supporto de PCRE_UTF8. +MediaWiki require supporto de UTF-8 pro functionar correctemente.", + 'config-memory-raised' => 'Le memory_limit de PHP es $1, elevate a $2.', + 'config-memory-bad' => "'''Aviso:''' Le memory_limit de PHP es $1. +Isto es probabilemente troppo basse. +Le installation pote faller!", + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] es installate', + 'config-apc' => '[http://www.php.net/apc APC] es installate', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] es installate', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] es installate', + 'config-no-cache' => "'''Aviso:''' Non poteva trovar [http://eaccelerator.sourceforge.net eAccelerator], [http://www.php.net/apc APC], [http://trac.lighttpd.net/xcache/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache]. +Le cache de objectos non es activate.", + 'config-diff3-bad' => 'GNU diff3 non trovate.', + 'config-imagemagick' => 'ImageMagick trovate: $1. +Le miniaturas de imagines essera activate si tu activa le incargamento de files.', + 'config-gd' => 'Le bibliotheca graphic GD se trova integrate in le systema. +Le miniaturas de imagines essera activate si tu activa le incargamento de files.', + 'config-no-scaling' => 'Non poteva trovar le bibliotheca GD ni ImageMagick. +Le miniaturas de imagines essera disactivate.', + 'config-no-uri' => "'''Error:''' Non poteva determinar le URI actual. +Installation abortate.", + 'config-uploads-not-safe' => "'''Aviso:''' Le directorio predefinite pro files incargate $1 es vulnerabile al execution arbitrari de scripts. +Ben que MediaWiki verifica tote le files incargate contra le menacias de securitate, il es altemente recommendate [http://www.mediawiki.org/wiki/Manual:Security#Upload_security remediar iste vulnerabilitate de securitate] ante de activar le incargamento de files.", + 'config-brokenlibxml' => 'Vostre systema ha un combination de versiones de PHP e libxml2 que es defectuose e pote causar corruption celate de datos in MediaWiki e altere applicationes web. +Actualisa a PHP 5.2.9 o plus recente e libxml2 2.7.3 o plus recente ([http://bugs.php.net/bug.php?id=45996 problema reportate presso PHP]). +Installation abortate.', + 'config-using531' => 'MediaWiki non pote esser usate con PHP $1 a causa de un defecto concernente parametros de referentia a __call(). +Actualisa a PHP 5.3.2 o plus recente, o retrograda a PHP 5.3.0 pro remediar isto. +Installation abortate.', + 'config-db-type' => 'Typo de base de datos:', + 'config-db-host' => 'Servitor de base de datos:', + 'config-db-host-help' => 'Si tu servitor de base de datos es in un altere servitor, entra hic le nomine o adresse IP del servitor. + +Si tu usa un servitor web usate in commun, tu providitor deberea dar te le correcte nomine de servitor in su documentation. + +Si tu face le installation in un servitor Windows e usa MySQL, le nomine "localhost" possibilemente non functiona como nomine de servitor. Si non, essaya "127.0.0.1", i.e. le adresse IP local.', + 'config-db-host-oracle' => 'TNS del base de datos:', + 'config-db-host-oracle-help' => 'Entra un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nomine Local Connect] valide; un file tnsnames.ora debe esser visibile a iste installation.
    Si tu usa bibliothecas de cliente 10g o plus recente, tu pote anque usar le methodo de nomination [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].', + 'config-db-wiki-settings' => 'Identificar iste wiki', + 'config-db-name' => 'Nomine del base de datos:', + 'config-db-name-help' => 'Selige un nomine que identifica tu wiki. +Illo non pote continer spatios. + +Si tu usa un servitor web usate in commun, tu providitor te fornira le nomine specific de un base de datos a usar, o te permitte crear un base de datos via un pannello de controlo.', + 'config-db-name-oracle' => 'Schema del base de datos:', + 'config-db-account-oracle-warn' => 'Il ha tres scenarios supportate pro le installation de Oracle como le base de datos de iste systema: + +Si tu vole crear un conto del base de datos como parte del processo de installation, per favor specifica un conto con le rolo SYSDBA como le conto del base de datos pro installation, e specifica le nomine e contrasigno desirate pro le conto de accesso per web. Alteremente tu pote crear le conto de accesso per web manualmente e specificar solmente iste conto (si illo ha le permissiones requisite pro crear le objectos de schema) o specifica duo contos differente, un con privilegios de creation e un conto restringite pro accesso per web. + +Un script pro crear un conto con le privilegios requisite se trova in le directorio "maintenance/oracle/" de iste installation. Non oblida que le uso de un conto restringite disactiva tote le capacitates de mantenentia in le conto predefinite.', + 'config-db-install-account' => 'Conto de usator pro installation', + 'config-db-username' => 'Nomine de usator del base de datos:', + 'config-db-password' => 'Contrasigno del base de datos:', + 'config-db-password-empty' => 'Per favor entra un contrasigno pro le nove usator del base de datos: $1. +Ben que il es possibile crear usatores sin contrasigno, isto non es secur.', + 'config-db-install-username' => 'Entra le nomine de usator que essera usate pro connecter al base de datos durante le processo de installation. Isto non es le nomine de usator del conto MediaWiki; isto es le nomine de usator pro tu base de datos.', + 'config-db-install-password' => 'Entra le contrasigno que essera usate pro connecter al base de datos durante le processo de installation. Isto non es le contrasigno del conto MediaWiki; isto es le contrasigno pro tu base de datos.', + 'config-db-install-help' => 'Entra le nomine de usator e contrasigno que essera usate pro connecter al base de datos durante le processo de installation.', + 'config-db-account-lock' => 'Usar le mesme nomine de usator e contrasigno durante le operation normal', + 'config-db-wiki-account' => 'Conto de usator pro operation normal', + 'config-db-wiki-help' => 'Entra le nomine de usator e contrasigno que essera usate pro connecter al base de datos durante le operation normal del wiki. +Si le conto non existe, e si le conto de installation possede sufficiente privilegios, iste conto de usator essera create con le minime privilegios necessari pro operar le wiki.', + 'config-db-prefix' => 'Prefixo de tabella del base de datos:', + 'config-db-prefix-help' => 'Si il es necessari usar un base de datos in commun inter multiple wikis, o inter MediaWiki e un altere application web, tu pote optar pro adder un prefixo a tote le nomines de tabella pro evitar conflictos. +Non usa spatios. + +Iste campo usualmente resta vacue.', + 'config-db-charset' => 'Codification de characteres in le base de datos', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binari', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 retrocompatibile UTF-8', + 'config-charset-help' => "'''Aviso:''' Si tu usa '''UTF-8 retrocompatibile''' sur MySQL 4.1+, e postea face un copia de reserva del base de datos con mysqldump, tote le characteres non ASCII pote esser destruite, resultante in corruption irreversibile de tu copias de reserva! + +In '''modo binari''', MediaWiki immagazina texto in UTF-8 in le base de datos in campos binari. +Isto es plus efficiente que le modo UTF-8 de MySQL, e permitte usar le rango complete de characteres de Unicode. +In '''modo UTF-8''', MySQL sapera in qual codification de characteres tu datos es, e pote presentar e converter lo appropriatemente, +ma non te permittera immagazinar characteres supra le [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Plano Multilingue Basic].", + 'config-mysql-old' => 'MySQL $1 o plus recente es requirite, tu ha $2.', + 'config-db-port' => 'Porto de base de datos:', + 'config-db-schema' => 'Schema pro MediaWiki', + 'config-db-schema-help' => 'Iste schema es generalmente correcte. +Solmente cambia lo si tu es secur que es necessari.', + 'config-sqlite-dir' => 'Directorio pro le datos de SQLite:', + 'config-sqlite-dir-help' => "SQLite immagazina tote le datos in un sol file. + +Le directorio que tu forni debe permitter le accesso de scriptura al servitor web durante le installation. + +Illo '''non''' debe esser accessibile via web. Pro isto, nos non lo pone ubi tu files PHP es. + +Le installator scribera un file .htaccess insimul a illo, ma si isto falli, alcuno pote ganiar accesso directe a tu base de datos. +Isto include le crude datos de usator (adresses de e-mail, contrasignos codificate) assi como versiones delite e altere datos restringite super le wiki. + +Considera poner le base de datos in un loco completemente differente, per exemplo in /var/lib/mediawiki/yourwiki.", + 'config-oracle-def-ts' => 'Spatio de tabellas predefinite:', + 'config-oracle-temp-ts' => 'Spatio de tabellas temporari:', + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Oracle', + 'config-support-info' => 'MediaWiki supporta le sequente systemas de base de datos: + +$1 + +Si tu non vide hic infra le systema de base de datos que tu tenta usar, alora seque le instructiones ligate hic supra pro activar le supporto.', + 'config-support-mysql' => '* $1 es le systema primari pro MediaWiki e le melio supportate ([http://www.php.net/manual/en/mysql.installation.php como compilar PHP con supporto de MySQL])', + 'config-support-postgres' => '* $1 es un systema de base de datos popular e open source, alternativa a MySQL ([http://www.php.net/manual/en/pgsql.installation.php como compilar PHP con supporto de PostgreSQL]). Es possibile que resta alcun minor defectos non resolvite, dunque illo non es recommendate pro uso in un ambiente de production.', + 'config-support-sqlite' => '* $1 es un systema de base de datos legier que es multo ben supportate. ([http://www.php.net/manual/en/pdo.installation.php Como compilar PHP con supporto de SQLite], usa PDO)', + 'config-support-oracle' => '* $1 es un banca de datos commercial pro interprisas. ([http://www.php.net/manual/en/oci8.installation.php Como compilar PHP con supporto de OCI8])', + 'config-header-mysql' => 'Configuration de MySQL', + 'config-header-postgres' => 'Configuration de PostgreSQL', + 'config-header-sqlite' => 'Configuration de SQLite', + 'config-header-oracle' => 'Configuration de Oracle', + 'config-invalid-db-type' => 'Typo de base de datos invalide', + 'config-missing-db-name' => 'Tu debe entrar un valor pro "Nomine de base de datos"', + 'config-missing-db-host' => 'Tu debe entrar un valor pro "Host del base de datos"', + 'config-missing-db-server-oracle' => 'You must enter a value for "TNS del base de datos"', + 'config-invalid-db-server-oracle' => 'TNS de base de datos "$1" invalide. +Usa solmente litteras ASCII (a-z, A-Z), numeros (0-9), characteres de sublineamento (_) e punctos (.).', + 'config-invalid-db-name' => 'Nomine de base de datos "$1" invalide. +Usa solmente litteras ASCII (a-z, A-Z), numeros (0-9), characteres de sublineamento (_) e tractos de union (-).', + 'config-invalid-db-prefix' => 'Prefixo de base de datos "$1" invalide. +Usa solmente litteras ASCII (a-z, A-Z), numeros (0-9), characteres de sublineamento (_) e tractos de union (-).', + 'config-connection-error' => '$1. + +Verifica le servitor, nomine de usator e contrasigno hic infra e reproba.', + 'config-invalid-schema' => 'Schema invalide pro MediaWiki "$1". +Usa solmente litteras ASCII (a-z, A-Z), numeros (0-9) e characteres de sublineamento (_).', + 'config-db-sys-create-oracle' => 'Le installator supporta solmente le uso de un conto SYSDBA pro le creation de un nove conto.', + 'config-db-sys-user-exists-oracle' => 'Le conto de usator "$1" ja existe. SYSDBA pote solmente esser usate pro le creation de un nove conto!', + 'config-postgres-old' => 'PostgreSQL $1 o plus recente es requirite, tu ha $2.', + 'config-sqlite-name-help' => 'Selige un nomine que identifica tu wiki. +Non usar spatios o tractos de union. +Isto essera usate pro le nomine del file de datos de SQLite.', + 'config-sqlite-parent-unwritable-group' => 'Impossibile crear le directorio de datos $1, proque le directorio superjacente $2 non concede le accesso de scriptura al servitor web. + +Le installator ha determinate le usator sub que le servitor web es executate. +Concede le accesso de scriptura in le directorio $3 a iste usator pro continuar. +In un systema Unix/Linux: + +
    cd $2
    +mkdir $3
    +chgrp $4 $3
    +chmod g+w $3
    ', + 'config-sqlite-parent-unwritable-nogroup' => 'Impossibile crear le directorio de datos $1, proque le directorio superjacente $2 non concede le accesso de scriptura al servitor web. + +Le installator non poteva determinar le usator sub que le servitor web es executate. +Concede le accesso de scriptura in le directorio $3 a iste usator (e alteres!) pro continuar. +In un systema Unix/Linux: + +
    cd $2
    +mkdir $3
    +chmod a+w $3
    ', + 'config-sqlite-mkdir-error' => 'Error al creation del directorio de datos "$1". +Verifica le loco e reproba.', + 'config-sqlite-dir-unwritable' => 'Impossibile scriber in le directorio "$1". +Cambia su permissiones de sorta que le servitor web pote scriber in illo, e reproba.', + 'config-sqlite-connection-error' => '$1. + +Verifica le directorio de datos e le nomine de base de datos hic infra e reproba.', + 'config-sqlite-readonly' => 'Le file $1 non es accessibile pro scriptura.', + 'config-sqlite-cant-create-db' => 'Non poteva crear le file de base de datos $1.', + 'config-sqlite-fts3-downgrade' => 'PHP non ha supporto pro FTS3. Le tabellas es retrogradate.', + 'config-can-upgrade' => "Il ha tabellas MediaWiki in iste base de datos. +Pro actualisar los a MediaWiki $1, clicca super '''Continuar'''.", + 'config-upgrade-done' => "Actualisation complete. + +Tu pote ora [$1 comenciar a usar tu wiki]. + +Si tu vole regenerar tu file LocalSettings.php, clicca super le button hic infra. +Isto '''non es recommendate''' si tu non ha problemas con tu wiki.", + 'config-upgrade-done-no-regenerate' => 'Actualisation complete. + +Tu pote ora [$1 comenciar a usar tu wiki].', + 'config-regenerate' => 'Regenerar LocalSettings.php →', + 'config-show-table-status' => 'Le consulta SHOW TABLE STATUS falleva!', + 'config-unknown-collation' => "'''Aviso:''' Le base de datos usa un collation non recognoscite.", + 'config-db-web-account' => 'Conto de base de datos pro accesso via web', + 'config-db-web-help' => 'Selige le nomine de usator e contrasigno que le servitor web usara pro connecter al servitor de base de datos, durante le operation ordinari del wiki.', + 'config-db-web-account-same' => 'Usar le mesme conto que pro le installation', + 'config-db-web-create' => 'Crear le conto si illo non jam existe', + 'config-db-web-no-create-privs' => 'Le conto que tu specificava pro installation non ha sufficiente privilegios pro crear un conto. +Le conto que tu specifica hic debe jam exister.', + 'config-mysql-engine' => 'Motor de immagazinage:', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-engine-help' => "'''InnoDB''' es quasi sempre le melior option, post que illo ha bon supporto pro simultaneitate. + +'''MyISAM''' pote esser plus rapide in installationes a usator singule o a lectura solmente. +Le bases de datos MyISAM tende a esser corrumpite plus frequentemente que le base de datos InnoDB.", + 'config-mysql-charset' => 'Codification de characteres in le base de datos:', + 'config-mysql-binary' => 'Binari', + 'config-mysql-utf8' => 'UTF-8', + 'config-mysql-charset-help' => "In '''modo binari''', MediaWiki immagazina le texto UTF-8 in le base de datos in campos binari. +Isto es plus efficiente que le modo UTF-8 de MySQL, e permitte usar le rango complete de characteres Unicode. + +In '''modo UTF-8''', MySQL cognoscera le codification de characteres usate pro tu dats, e pote presentar e converter lo appropriatemente, ma illo non permittera immagazinar characteres supra le [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Plano Multilingue Basic].", + 'config-site-name' => 'Nomine del wiki:', + 'config-site-name-help' => 'Isto apparera in le barra de titulo del navigator e in varie altere locos.', + 'config-site-name-blank' => 'Entra un nomine de sito.', + 'config-project-namespace' => 'Spatio de nomines del projecto:', + 'config-ns-generic' => 'Projecto', + 'config-ns-site-name' => 'Mesme nomine que le wiki: $1', + 'config-ns-other' => 'Altere (specifica)', + 'config-ns-other-default' => 'MiWiki', + 'config-project-namespace-help' => 'Sequente le exemplo de Wikipedia, multe wikis tene lor paginas de politica separate de lor paginas de contento, in un "\'\'\'spatio de nomines de projecto\'\'\'". +Tote le titulos de pagina in iste spatio de nomines comencia con un certe prefixo, le qual tu pote specificar hic. +Traditionalmente, iste prefixo deriva del nomine del wiki, ma illo non pote continer characteres de punctuation como "#" o ":".', + 'config-ns-invalid' => 'Le spatio de nomines specificate "$1" es invalide. +Specifica un altere spatio de nomines de projecto.', + 'config-ns-conflict' => 'Le spatio de nomines specificate "$1" conflige con un spatio de nomines predefinite de MediaWiki. +Specifica un altere spatio de nomines pro le projecto.', + 'config-admin-box' => 'Conto de administrator', + 'config-admin-name' => 'Tu nomine:', + 'config-admin-password' => 'Contrasigno:', + 'config-admin-password-confirm' => 'Repete contrasigno:', + 'config-admin-help' => 'Entra hic tu nomine de usator preferite, per exemplo "Julio Cesare". +Isto es le nomine que tu usara pro aperir session in le wiki.', + 'config-admin-name-blank' => 'Entra un nomine de usator pro administrator.', + 'config-admin-name-invalid' => 'Le nomine de usator specificate "$1" es invalide. +Specifica un altere nomine de usator.', + 'config-admin-password-blank' => 'Entra un contrasigno pro le conto de administrator.', + 'config-admin-password-same' => 'Le contrasigno non pote esser le mesme que le nomine de usator.', + 'config-admin-password-mismatch' => 'Le duo contrasignos que tu scribeva non es identic.', + 'config-admin-email' => 'Adresse de e-mail:', + 'config-admin-email-help' => 'Entra un adresse de e-mail hic pro permitter le reception de e-mail ab altere usatores del wiki, pro poter reinitialisar tu contrasigno, e pro reciper notification de cambios a paginas in tu observatorio. Iste campo pote esser lassate vacue.', + 'config-admin-error-user' => 'Error interne durante le creation de un administrator con le nomine "$1".', + 'config-admin-error-password' => 'Error interne durante le definition de un contrasigno pro le administrator "$1":
    $2
    ', + 'config-admin-error-bademail' => 'Tu ha entrate un adresse de e-mail invalide', + 'config-subscribe' => 'Subscribe al [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce lista de diffusion pro annuncios de nove versiones].', + 'config-subscribe-help' => 'Isto es un lista de e-mail a basse volumine pro annuncios de nove versiones, includente importante annuncios de securitate. +Tu deberea subscriber a illo e actualisar tu installation de MediaWiki quando nove versiones es editate.', + 'config-almost-done' => 'Tu ha quasi finite! +Tu pote ora saltar le configuration remanente e installar le wiki immediatemente.', + 'config-optional-continue' => 'Pone me plus questiones.', + 'config-optional-skip' => 'Isto me es jam tediose. Simplemente installa le wiki.', + 'config-profile' => 'Profilo de derectos de usator:', + 'config-profile-wiki' => 'Wiki traditional', + 'config-profile-no-anon' => 'Creation de conto obligatori', + 'config-profile-fishbowl' => 'Modificatores autorisate solmente', + 'config-profile-private' => 'Wiki private', + 'config-profile-help' => "Le wikis functiona melio si tu permitte a tante personas como possibile de modificar los. +In MediaWiki, il es facile revider le modificationes recente, e reverter omne damno facite per usatores naive o malitiose. + +Nonobstante, multes ha trovate MediaWiki utile in un grande varietate de rolos, e alcun vices il non es facile convincer omnes del beneficios del principio wiki. +Dunque, a te le option. + +Un '''{{int:config-profile-wiki}}''' permitte a omnes de modificar, sin mesmo aperir un session. +Un wiki con '''{{int:config-profile-no-anon}}''' attribue additional responsabilitate, ma pote dissuader contributores occasional. + +Le scenario '''{{int:config-profile-fishbowl}}''' permitte al usatores approbate de modificar, ma le publico pote vider le paginas, includente lor historia. +Un '''{{int:config-profile-private}}''' permitte solmente al usatores approbate de vider le paginas e de modificar los. + +Configurationes de derectos de usator plus complexe es disponibile post installation, vide le [http://www.mediawiki.org/wiki/Manual:User_rights pertinente section del manual].", + 'config-license' => 'Copyright e licentia:', + 'config-license-none' => 'Nulle licentia in pede de paginas', + 'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike', + 'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike', + 'config-license-cc-0' => 'Creative Commons Zero', + 'config-license-gfdl-old' => 'Licentia GNU pro Documentation Libere 1.2', + 'config-license-gfdl-current' => 'Licentia GNU pro Documentation Libere 1.3 o plus recente', + 'config-license-pd' => 'Dominio public', + 'config-license-cc-choose' => 'Seliger un licentia Creative Commons personalisate', + 'config-license-help' => "Multe wikis public pone tote le contributiones sub un [http://freedomdefined.org/Definition/Ia?uselang=ia licentia libere]. +Isto adjuta a crear un senso de proprietate communitari e incoragia le contribution in longe termino. +Isto non es generalmente necessari pro un wiki private o de interprisa. + +Si tu vole poter usar texto de Wikipedia, e si tu vole que Wikipedia pote acceptar texto copiate de tu wiki, tu debe seliger '''Creative Commons Attribution Share Alike'''. + +Le Licentia GNU pro Documentation Libere esseva le ancian licentia de publication de Wikipedia. +Iste licentia continua a esser valide, ma illo ha alcun characteristicas que rende le re-uso e interpretation difficile.", + 'config-email-settings' => 'Configuration de e-mail', + 'config-enable-email' => 'Activar le e-mail sortiente', + 'config-enable-email-help' => 'Si tu vole que e-mail functiona, [http://www.php.net/manual/en/mail.configuration.php le optiones de e-mail de PHP] debe esser configurate correctemente. +Si tu non vole functiones de e-mail, tu pote disactivar los hic.', + 'config-email-user' => 'Activar le e-mail de usator a usator', + 'config-email-user-help' => 'Permitter a tote le usatores de inviar e-mail inter se, si illes lo ha activate in lor preferentias.', + 'config-email-usertalk' => 'Activar notification de cambios in paginas de discussion de usatores', + 'config-email-usertalk-help' => 'Permitter al usatores de reciper notification de modificationes in lor paginas de discussion personal, si illes lo ha activate in lor preferentias.', + 'config-email-watchlist' => 'Activar notification de observatorio', + 'config-email-watchlist-help' => 'Permitter al usatores de reciper notification super lor paginas sub observation, si illes lo ha activate in lor preferentias.', + 'config-email-auth' => 'Activar authentication de e-mail', + 'config-email-auth-help' => "Si iste option es activate, le usatores debe confirmar lor adresse de e-mail usante un ligamine inviate a illes, quandocunque illes lo defini o cambia. +Solmente le adresses de e-mail authenticate pote reciper e-mail de altere usatores o alterar le e-mails de notification. +Es '''recommendate''' activar iste option pro wikis public a causa de abuso potential del functionalitate de e-mail.", + 'config-email-sender' => 'Adresse de e-mail de retorno:', + 'config-email-sender-help' => 'Entra le adresse de e-mail a usar como adresse de retorno in e-mail sortiente. +Hic es recipite le notificationes de non-livration. +Multe servitores de e-mail require que al minus le parte de nomine de dominio sia valide.', + 'config-upload-settings' => 'Incargamento de imagines e files', + 'config-upload-enable' => 'Activar le incargamento de files', + 'config-upload-help' => 'Le incargamento de files potentialmente expone tu servitor a riscos de securitate. +Pro plus information, lege le [http://www.mediawiki.org/wiki/Manual:Security section de securitate] in le manual. + +Pro activar le incargamento de files, cambia le modo in le subdirectorio images sub le directorio-radice de MediaWiki de sorta que le servitor web pote scriber in illo. +Postea activa iste option.', + 'config-upload-deleted' => 'Directorio pro files delite:', + 'config-upload-deleted-help' => 'Selige un directorio in le qual archivar le files delite. +Idealmente, isto non debe esser accessibile ab le web.', + 'config-logo' => 'URL del logotypo:', + 'config-logo-help' => 'Le apparentia predefinite de MediaWiki include spatio pro un logotypo de 135×160 pixeles in le angulo superior sinistre. +Incarga un imagine con le dimensiones appropriate, e entra le URL hic. + +Si tu non vole un logotypo, lassa iste quadro vacue.', + 'config-instantcommons' => 'Activar "Instant Commons"', + 'config-instantcommons-help' => '[http://www.mediawiki.org/wiki/InstantCommons Instant Commons] es un function que permitte a wikis de usar imagines, sonos e altere multimedia trovate in le sito [http://commons.wikimedia.org/ Wikimedia Commons]. +Pro poter facer isto, MediaWiki require accesso a Internet. + +Pro plus information super iste function, includente instructiones super como configurar lo pro wikis altere que Wikimedia Commons, consulta [http://mediawiki.org/wiki/Manual:$wgForeignFileRepos le manual].', + 'config-cc-error' => 'Le selector de licentia Creative Commons non dava un resultato. +Entra le nomine del licentia manualmente.', + 'config-cc-again' => 'Selige de novo…', + 'config-cc-not-chosen' => 'Selige le licentia Creative Commons que tu prefere e clicca "proceder".', + 'config-advanced-settings' => 'Configuration avantiate', + 'config-cache-options' => 'Configuration del cache de objectos:', + 'config-cache-help' => 'Le cache de objectos es usate pro meliorar le rapiditate de MediaWiki per immagazinar le datos frequentemente usate. +Le sitos medie o grande es multo incoragiate de activar isto, ma anque le sitos parve percipera le beneficios.', + 'config-cache-none' => 'Nulle cache (nulle functionalitate es removite, ma le rapiditate pote diminuer in grande sitos wiki)', + 'config-cache-accel' => 'Cache de objectos de PHP (APC, eAccelerator, XCache o WinCache)', + 'config-cache-memcached' => 'Usar Memcached (require additional installation e configuration)', + 'config-memcached-servers' => 'Servitores Memcached:', + 'config-memcached-help' => 'Lista de adresses IP a usar pro Memcached. +Debe specificar un per linea e specificar le porto a usar. Per exemplo: + 127.0.0.1:11211 + 192.168.1.25:1234', + 'config-memcache-needservers' => 'Tu seligeva Memcached como typo de cache ma non specificava alcun servitores', + 'config-memcache-badip' => 'Tu ha entrate un adresse IP invalide pro Memcached: $1', + 'config-memcache-noport' => 'Tu non specificava un porto a usar pro le servitor Memcached: $1. +Si tu non cognosce le porto, le standard es 11211', + 'config-memcache-badport' => 'Le numeros de porto de Memcached debe esser inter $1 e $2', + 'config-extensions' => 'Extensiones', + 'config-extensions-help' => 'Le extensiones listate hic supra esseva detegite in tu directorio ./extensions. + +Istes pote requirer additional configuration, ma tu pote activar los ora.', + 'config-install-alreadydone' => "'''Aviso:''' Il pare que tu ha jam installate MediaWiki e tenta installar lo de novo. +Per favor continua al proxime pagina.", + 'config-install-begin' => 'Un clic sur "{{int:config-continue}}" comencia le installation de MediaWiki. +Pro facer alterationes, clicca sur "Retro".', + 'config-install-step-done' => 'finite', + 'config-install-step-failed' => 'fallite', + 'config-install-extensions' => 'Include le extensiones', + 'config-install-database' => 'Configura le base de datos', + 'config-install-pg-schema-not-exist' => 'Iste schema de PostgreSQL non existe', + 'config-install-pg-schema-failed' => 'Le creation del tabellas falleva. +Assecura te que le usator "$1" pote scriber in le schema "$2".', + 'config-install-pg-commit' => 'Committer cambiamentos', + 'config-install-pg-plpgsql' => 'Verifica le presentia del linguage PL/pgSQL', + 'config-pg-no-plpgsql' => 'Es necessari installar le linguage PL/pgSQL in le base de datos $1', + 'config-pg-no-create-privs' => 'Le conto que tu specificava pro installation non ha sufficiente privilegios pro crear un conto.', + 'config-install-user' => 'Crea usator pro base de datos', + 'config-install-user-alreadyexists' => 'Le usator "$1" ja existe', + 'config-install-user-create-failed' => 'Le creation del usator "$1" ha fallite: $2', + 'config-install-user-grant-failed' => 'Le concession de permission al usator "$1" falleva: $2', + 'config-install-tables' => 'Crea tabellas', + 'config-install-tables-exist' => "'''Aviso''': Il pare que le tabellas de MediaWiki jam existe. +Le creation es saltate.", + 'config-install-tables-failed' => "'''Error''': Le creation del tabellas falleva con le sequente error: $1", + 'config-install-interwiki' => 'Plena le tabella interwiki predefinite', + 'config-install-interwiki-list' => 'Non poteva trovar le file interwiki.list.', + 'config-install-interwiki-exists' => "'''Aviso''': Le tabella interwiki pare jam haber entratas. +Le lista predefinite es saltate.", + 'config-install-stats' => 'Initialisation del statisticas', + 'config-install-keys' => 'Genera clave secrete', + 'config-install-sysop' => 'Crea conto de usator pro administrator', + 'config-install-subscribe-fail' => 'Impossibile subscriber a mediawiki-announce', + 'config-install-mainpage' => 'Crea pagina principal con contento predefinite', + 'config-install-extension-tables' => 'Creation de tabellas pro le extensiones activate', + 'config-install-mainpage-failed' => 'Non poteva inserer le pagina principal: $1', + 'config-install-done' => "'''Felicitationes!''' +Tu ha installate MediaWiki con successo. + +Le installator ha generate un file LocalSettings.php. +Iste contine tote le configuration. + +Es necessari discargar lo e poner lo in le base del installation wiki (le mesme directorio que index.php). +Le discargamento debe haber comenciate automaticamente. + +Si le discargamento non ha comenciate, o si illo esseva cancellate, es possibile recomenciar le discargamento con un clic sur le ligamine sequente: + +$3 + +'''Nota''': Si tu non discarga iste file de configuration ora, illo non essera disponibile plus tarde. + +Post facer isto, tu pote '''[$2 entrar in tu wiki]'''.", + 'config-download-localsettings' => 'Discargar LocalSettings.php', + 'config-help' => 'adjuta', +); + +/** Indonesian (Bahasa Indonesia) + * @author Farras + * @author IvanLanin + * @author Reedy + */ +$messages['id'] = array( + 'config-desc' => 'Penginstal untuk MediaWiki', + 'config-title' => 'Instalasi MediaWiki $1', + 'config-information' => 'Informasi', + 'config-localsettings-upgrade' => 'Berkas LocalSettings.php sudah ada. +Untuk memutakhirkan instalasi ini, masukkan nilai $wgUpgradeKey dalam kotak yang tersedia di bawah ini. +Anda dapat menemukan nilai tersebut dalam LocalSettings.php.', + 'config-localsettings-cli-upgrade' => 'Berkas LocalSettings.php terdeteksi. +Untuk meningkatkan versi, sertakan pilihan --upgrade=yes.', + 'config-localsettings-key' => 'Kunci pemutakhiran:', + 'config-localsettings-badkey' => 'Kunci yang Anda berikan tidak benar', + 'config-upgrade-key-missing' => 'Suatu instalasi MediaWiki telah terdeteksi. +Untuk memutakhirkan instalasi ini, silakan masukkan baris berikut di bagian bawah LocalSettings.php Anda: + +$1', + 'config-localsettings-incomplete' => 'LocalSettings.php yang ada tampaknya tidak lengkap. +Variabel $1 tidak diatur. +Silakan ubah LocalSettings.php untuk mengatur variabel ini dan klik "Lanjutkan".', + 'config-localsettings-connection-error' => 'Timbul galat saat menghubungkan ke basis data dengan menggunakan setelan yang ditentukan di LocalSettings.php atau AdminSettings.php. Harap perbaiki setelan ini dan coba lagi. + +$1', + 'config-session-error' => 'Kesalahan sesi mulai: $1', + 'config-session-expired' => 'Data sesi tampaknya telah kedaluwarsa. +Sesi dikonfigurasi untuk berlaku selama $1. +Anda dapat menaikkannya dengan menetapkan session.gc_maxlifetime dalam php.ini. +Ulangi proses instalasi.', + 'config-no-session' => 'Data sesi Anda hilang! +Cek php.ini Anda dan pastikan bahwa session.save_path diatur ke direktori yang sesuai.', + 'config-your-language' => 'Bahasa Anda:', + 'config-your-language-help' => 'Pilih bahasa yang akan digunakan selama proses instalasi.', + 'config-wiki-language' => 'Bahasa wiki:', + 'config-wiki-language-help' => 'Pilih bahasa yang akan digunakan tulisan-tulisan wiki.', + 'config-back' => '← Kembali', + 'config-continue' => 'Lanjut →', + 'config-page-language' => 'Bahasa', + 'config-page-welcome' => 'Selamat datang di MediaWiki', + 'config-page-dbconnect' => 'Hubungkan ke basis data', + 'config-page-upgrade' => 'Perbarui instalasi yang ada', + 'config-page-dbsettings' => 'Pengaturan basis data', + 'config-page-name' => 'Nama', + 'config-page-options' => 'Pilihan', + 'config-page-install' => 'Instal', + 'config-page-complete' => 'Selesai!', + 'config-page-restart' => 'Ulangi instalasi', + 'config-page-readme' => 'Baca saya', + 'config-page-releasenotes' => 'Catatan pelepasan', + 'config-page-copying' => 'Menyalin', + 'config-page-upgradedoc' => 'Memerbarui', + 'config-page-existingwiki' => 'Wiki yang ada', + 'config-help-restart' => 'Apakah Anda ingin menghapus semua data tersimpan yang telah Anda masukkan dan mengulang proses instalasi?', + 'config-restart' => 'Ya, nyalakan ulang', + 'config-welcome' => '=== Pengecekan lingkungan === +Pengecekan dasar dilakukan untuk melihat apakah lingkungan ini memadai untuk instalasi MediaWiki. +Anda harus memberikan hasil pemeriksaan ini jika Anda memerlukan bantuan selama instalasi.', + 'config-copyright' => "=== Hak cipta dan persyaratan === + +\$1 + +Program ini adalah perangkat lunak bebas; Anda dapat mendistribusikan dan/atau memodifikasi di bawah persyaratan GNU General Public License seperti yang diterbitkan oleh Free Software Foundation; baik versi 2 lisensi, atau (sesuai pilihan Anda) versi yang lebih baru. + +Program ini didistribusikan dengan harapan bahwa itu akan berguna, tetapi '''tanpa jaminan apa pun'''; bahkan tanpa jaminan tersirat untuk '''dapat diperjualbelikan ''' atau '''sesuai untuk tujuan tertentu'''. +Lihat GNU General Public License untuk lebih jelasnya. + +Anda seharusnya telah menerima salinan dari GNU General Public License bersama dengan program ini; jika tidak, kirimkan surat untuk Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. atau [http://www.gnu.org/copyleft/gpl.html baca versi daring].", + 'config-sidebar' => '* [http://www.mediawiki.org Halaman utama MediaWiki] +* [http://www.mediawiki.org/wiki/Help:Contents Panduan Pengguna] +* [http://www.mediawiki.org/wiki/Manual:Contents Panduan Pengurus] +* [http://www.mediawiki.org/wiki/Manual:FAQ Pertanyaan yang Sering Diajukan]', + 'config-env-good' => 'Kondisi telah diperiksa. +Anda dapat menginstal MediaWiki.', + 'config-env-bad' => 'Kondisi telah diperiksa. +Anda tidak dapat menginstal MediaWiki.', + 'config-env-php' => 'PHP $1 diinstal.', + 'config-unicode-using-utf8' => 'Menggunakan utf8_normalize.so Brion Vibber untuk normalisasi Unicode.', + 'config-unicode-using-intl' => 'Menggunakan [http://pecl.php.net/intl ekstensi PECL intl] untuk normalisasi Unicode.', + 'config-unicode-pure-php-warning' => "'''Peringatan''': [http://pecl.php.net/intl Ekstensi intl PECL] untuk menangani normalisasi Unicode tidak tersedia, kembali menggunakan implementasi murni PHP yang lambat. +Jika Anda menjalankan situs berlalu lintas tinggi, Anda harus sedikit membaca [http://www.mediawiki.org/wiki/Unicode_normalization_considerations normalisasi Unicode].", + 'config-unicode-update-warning' => "'''Peringatan''': Versi terinstal dari pembungkus normalisasi Unicode menggunakan versi lama pustaka [http://site.icu-project.org/ proyek ICU]. +Anda harus [http://www.mediawiki.org/wiki/Unicode_normalization_considerations memutakhirkannya] jika Anda ingin menggunakan Unicode.", + 'config-no-db' => 'Tidak dapat menemukan pengandar basis data yang sesuai!', + 'config-no-db-help' => 'Anda perlu menginstal pengandar basis data untuk PHP. +Jenis basis data yang didukung: $1. + +Jika Anda menggunakan inang bersama, mintalah penyedia inang Anda untuk menginstal pengandar basis data yang cocok. +Jika Anda mengompilasi sendiri PHP, ubahlah konfigurasinya dengan mengaktifkan klien basis data, misalnya menggunakan ./configure --with-mysql. +Jika Anda menginstal PHP dari paket Debian atau Ubuntu, maka Anda juga perlu menginstal modul php5-mysql.', + 'config-no-fts3' => "'''Peringatan''': SQLite dikompilasi tanpa [http://sqlite.org/fts3.html modul FTS3], fitur pencarian tidak akan tersedia pada konfigurasi ini.", + 'config-register-globals' => "'''Peringatan: Opsi [http://php.net/register_globals register_globals] PHP diaktifkan.''' +'''Nonaktifkan kalau bisa.''' +MediaWiki akan bekerja, tetapi server Anda memiliki potensi kerentanan keamanan.", + 'config-magic-quotes-runtime' => "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] aktif!''' +Pilihan ini dapat merusak masukan data secara tidak terduga. +Anda tidak dapat menginstal atau menggunakan MediaWiki kecuali pilihan ini dinonaktifkan.", + 'config-magic-quotes-sybase' => "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic_quotes_sybase magic_quotes_sybase] aktif!''' +Pilihan ini dapat merusak masukan data secara tidak terduga. +Anda tidak dapat menginstal atau menggunakan MediaWiki kecuali pilihan ini dinonaktifkan.", + 'config-mbstring' => "'''Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] aktif!'' ' +Pilihan ini dapat menyebabkan kesalahan dan kerusakan data yang tidak terduga. +Anda tidak dapat menginstal atau menggunakan MediaWiki kecuali pilihan ini dinonaktifkan.", + 'config-ze1' => "'''Fatal: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] aktif!''' +Pilihan ini dapat menyebabkan bug yang mengerikan pada MediaWiki. +Anda tidak dapat menginstal atau menggunakan MediaWiki kecuali pilihan ini dinonaktifkan.", + 'config-safe-mode' => "''' Peringatan:''' [http://www.php.net/features.safe-mode Mode aman] PHP aktif. +Hal ini akan menyebabkan masalah, terutama jika menggunakan pengunggahan berkas dan dukungan math.", + 'config-xml-bad' => 'Modul XML PHP hilang. +MediaWiki membutuhkan fungsi dalam modul ini dan tidak akan bekerja dalam konfigurasi ini. +Jika Anda menggunakan Mandrake, instal paket php-xml.', + 'config-pcre' => 'Modul pendukung PCRE tampaknya hilang. +MediaWiki memerlukan fungsi persamaan reguler kompatibel Perl untuk bekerja.', + 'config-pcre-no-utf8' => "'''Fatal''': Modul PCRE PHP tampaknya dikompilasi tanpa dukungan PCRE_UTF8. +MediaWiki memerlukan dukungan UTF-8 untuk berfungsi dengan benar.", + 'config-memory-raised' => 'memory_limit PHP adalah $1, dinaikkan ke $2.', + 'config-memory-bad' => "'''Peringatan:''' memory_limit PHP adalah $1. +Ini terlalu rendah. +Instalasi terancam gagal!", + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] telah diinstal', + 'config-apc' => '[http://www.php.net/apc APC] telah diinstal', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] telah diinstal', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] telah diinstal', + 'config-no-cache' => "'''Peringatan:''' Tidak dapat menemukan [http://eaccelerator.sourceforge.net eAccelerator], [http://www.php.net/apc APC], [http://trac.lighttpd.net/xcache/ XCache], atau [http://www.iis.net/download/WinCacheForPhp WinCache]. Pinggahan obyek tidak dinonaktifkan.", + 'config-diff3-bad' => 'GNU diff3 tidak ditemukan.', + 'config-imagemagick' => 'ImageMagick ditemukan: $1 . +Pembuatan gambar mini akan diaktifkan jika Anda mengaktifkan pengunggahan.', + 'config-gd' => 'Pustaka grafis GD terpasang ditemukan. +Pembuatan gambar mini akan diaktifkan jika Anda mengaktifkan pengunggahan.', + 'config-no-scaling' => 'Pustaka GD atau ImageMagick tidak ditemukan. +Pembuatan gambar mini dinonaktifkan.', + 'config-no-uri' => "'''Kesalahan:''' URI saat ini tidak dapat ditentukan. +Instalasi dibatalkan.", + 'config-uploads-not-safe' => "'''Peringatan:''' Direktori bawaan pengunggahan $1 Anda rentan terhadap eksekusi skrip yang sewenang-wenang. +Meskipun MediaWiki memeriksa semua berkas unggahan untuk ancaman keamanan, sangat dianjurkan untuk [http://www.mediawiki.org/wiki/Manual:Security#Upload_security menutup kerentanan keamanan ini] sebelum mengaktifkan pengunggahan.", + 'config-brokenlibxml' => 'Sistem Anda memiliki kombinasi versi PHP dan libxml2 yang memiliki bug dan dapat menyebabkan kerusakan data tersembunyi pada MediaWiki dan aplikasi web lain. +Mutakhirkan ke PHP 5.2.9 atau yang lebih baru dan libxml2 2.7.3 atau yang lebih baru ([http://bugs.php.net/bug.php?id=45996 arsip bug di PHP]). +Instalasi dibatalkan.', + 'config-using531' => 'PHP $1 tidak kompatibel dengan MediaWiki karena bug yang melibatkan parameter referensi untuk __call() . +Tingkatkan ke PHP 5.3.2 atau yang lebih baru, atau turunkan ke PHP versi 5.3.0 untuk memperbaiki ini ([http://bugs.php.net/bug.php?id=50394 arsip bug di PHP]). +Instalasi dibatalkan.', + 'config-db-type' => 'Jenis basis data:', + 'config-db-host' => 'Inang basis data:', + 'config-db-host-help' => 'Jika server basis data Anda berada di server yang berbeda, masukkan nama inang atau alamat IP di sini. + +Jika Anda menggunakan inang web bersama, penyedia inang Anda harus memberikan nama inang yang benar di dokumentasi mereka. + +Jika Anda menginstal pada server Windows dan menggunakan MySQL, "localhost" mungkin tidak dapat digunakan sebagai nama server. Jika demikian, coba "127.0.0.1" untuk alamat IP lokal.', + 'config-db-host-oracle' => 'TNS basis data:', + 'config-db-host-oracle-help' => 'Masukkan [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name] yang sah; berkas tnsnames.ora harus dapat diakses oleh instalasi ini.
    Jika Anda menggunakan pustaka klien 10g atau lebih baru, Anda juga dapat menggunakan metode penamaan [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].', + 'config-db-wiki-settings' => 'Identifikasi wiki ini', + 'config-db-name' => 'Nama basis data:', + 'config-db-name-help' => 'Pilih nama yang mengidentifikasikan wiki Anda. +Nama tersebut tidak boleh mengandung spasi. + +Jika Anda menggunakan inang web bersama, penyedia inang Anda dapat memberikan Anda nama basis data khusus untuk digunakan atau mengizinkan Anda membuat basis data melalui panel kontrol.', + 'config-db-name-oracle' => 'Skema basis data:', + 'config-db-install-account' => 'Akun pengguna untuk instalasi', + 'config-db-username' => 'Nama pengguna basis data:', + 'config-db-password' => 'Kata sandi basis data:', + 'config-db-install-username' => 'Masukkan nama pengguna yang akan digunakan untuk terhubung ke basis data selama proses instalasi. +Ini bukan nama pengguna akun MediaWiki, melainkan nama pengguna untuk basis data Anda.', + 'config-db-install-password' => 'Masukkan sandi yang akan digunakan untuk terhubung ke basis data selama proses instalasi. +Ini bukan sandi untuk akun MediaWiki, melainkan sandi untuk basis data Anda.', + 'config-db-install-help' => 'Masukkan nama pengguna dan sandi yang akan digunakan untuk terhubung ke basis data pada saat proses instalasi.', + 'config-db-account-lock' => 'Gunakan nama pengguna dan kata sandi yang sama selama operasi normal', + 'config-db-wiki-account' => 'Akun pengguna untuk operasi normal', + 'config-db-wiki-help' => 'Masukkan nama pengguna dan sandi yang akan digunakan untuk terhubung ke basis data wiki selama operasi normal. +Jika akun tidak ada, akun instalasi memiliki hak yang memadai, akun pengguna ini akan dibuat dengan hak akses minimum yang diperlukan untuk mengoperasikan wiki.', + 'config-db-prefix' => 'Prefiks tabel basis data:', + 'config-db-prefix-help' => 'Jika Anda perlu berbagi satu basis data di antara beberapa wiki, atau antara MediaWiki dan aplikasi web lain, Anda dapat memilih untuk menambahkan prefiks terhadap semua nama tabel demi menghindari konflik. +Jangan gunakan spasi. + +Prefiks ini biasanya dibiarkan kosong.', + 'config-db-charset' => 'Set karakter basis data', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 biner', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'UTF-8 yang kompatibel balik dengan MySQL 4.0', + 'config-charset-help' => "'''Peringatan:''' Jika Anda menggunakan '''UTF-8 kompatibel balik''' pada MySQL 4.1+, dan kemudian mencadangkan basis data dengan mysqldump, proses itu mungkin menghancurkan semua karakter non-ASCII dan merusak cadangan Anda tanpa dapat dikembalikan! + +Dalam '''modus biner''', MediaWiki menyimpan teks UTF-8 ke basis data dalam bidang biner. +Ini lebih efisien dibandingkan modus UTF-8 MySQL dan memungkinkan Anda untuk menggunakan berbagai karakter Unicode. +Dalam '''modus UTF-8''', MySQL akan tahu apa set karakter data anda dan dapat menyajikan dan mengubahnya denga tepat, namun tidak akan mengizinkan Anda menyimpan karakter di atas [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].", + 'config-mysql-old' => 'MySQL $1 atau versi terbaru diperlukan, Anda menggunakan $2.', + 'config-db-port' => 'Porta basis data:', + 'config-db-schema' => 'Skema untuk MediaWiki', + 'config-db-schema-help' => 'Skema di atas biasanya benar. +Ubah hanya jika Anda tahu Anda perlu mengubahnya.', + 'config-sqlite-dir' => 'Direktori data SQLite:', + 'config-sqlite-dir-help' => "SQLite menyimpan semua data dalam satu berkas. + +Direktori yang Anda berikan harus dapat ditulisi oleh server web selama instalasi. + +Direktori itu '''tidak''' boleh dapat diakses melalui web, inilah sebabnya kami tidak menempatkannya bersama dengan berkas PHP lain. + +Penginstal akan membuat berkas .htaccess bersamaan dengan itu, tetapi jika gagal, orang dapat memperoleh akses ke basis data mentah Anda. +Itu termasuk data mentah pengguna (alamat surel, hash sandi) serta revisi yang dihapus dan data lainnya yang dibatasi pada wiki. + +Pertimbangkan untuk menempatkan basis data di tempat lain, misalnya di /var/lib/mediawiki/yourwiki.", + 'config-oracle-def-ts' => 'Tablespace bawaan:', + 'config-oracle-temp-ts' => 'Tablespace sementara:', + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Oracle', + 'config-support-info' => 'MediaWiki mendukung sistem basis data berikut: + +$1 + +Jika Anda tidak melihat sistem basis data yang Anda gunakan tercantum di bawah ini, ikuti petunjuk terkait di atas untuk mengaktifkan dukungan.', + 'config-support-mysql' => '* $1 adalah target utama MediaWiki dan memiliki dukungan terbaik ([http://www.php.net/manual/en/mysql.installation.php cara mengompilasi PHP dengan dukungan MySQL])', + 'config-support-postgres' => '* $1 adalah sistem basis data sumber terbuka populer sebagai alternatif untuk MySQL ([http://www.php.net/manual/en/pgsql.installation.php cara mengompilasi PHP dengan dukungan PostgreSQL])', + 'config-support-sqlite' => '* $1 adalah sistem basis data yang ringan yang sangat baik dukungannya. ([http://www.php.net/manual/en/pdo.installation.php cara mengompilasi PHP dengan dukungan SQLite], menggunakan PDO)', + 'config-support-oracle' => '* $1 adalah basis data komersial untuka perusahaan. ([http://www.php.net/manual/en/oci8.installation.php cara mengompilasi PHP dengan dukungan OCI8])', + 'config-header-mysql' => 'Pengaturan MySQL', + 'config-header-postgres' => 'Pengaturan PostgreSQL', + 'config-header-sqlite' => 'Pengaturan SQLite', + 'config-header-oracle' => 'Pengaturan Oracle', + 'config-invalid-db-type' => 'Jenis basis data tidak sah', + 'config-missing-db-name' => 'Anda harus memasukkan nilai untuk "Nama basis data"', + 'config-missing-db-host' => 'Anda harus memasukkan nilai untuk "Inang basis data"', + 'config-missing-db-server-oracle' => 'Anda harus memasukkan nilai untuk "TNS basis data"', + 'config-invalid-db-server-oracle' => 'TNS basis data "$1" tidak sah. +Gunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), garis bawah (_), dan titik (.).', + 'config-invalid-db-name' => 'Nama basis data "$1" tidak sah. +Gunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), garis bawah (_), dan tanda hubung (-).', + 'config-invalid-db-prefix' => 'Prefiks basis data "$1" tidak sah. +Gunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), garis bawah (_), dan tanda hubung (-).', + 'config-connection-error' => '$1. + +Periksa nama inang, pengguna, dan sandi di bawah ini dan coba lagi.', + 'config-invalid-schema' => 'Skema MediaWiki "$1" tidak sah. +Gunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), dan garis bawah (_).', + 'config-postgres-old' => 'PostgreSQL $1 atau versi terbaru diperlukan, Anda menggunakan $2.', + 'config-sqlite-name-help' => 'Pilih nama yang mengidentifikasi wiki Anda. +Jangan gunakan spasi atau tanda hubung. +Nama ini akan digunakan untuk nama berkas data SQLite.', + 'config-sqlite-parent-unwritable-group' => 'Tidak dapat membuat direktori data $1, karena direktori induk $2 tidak bisa ditulisi oleh server web. + +Penginstal telah menentukan pengguna yang menjalankan server web Anda. +Buat direktori $3 menjadi dapat ditulisi olehnya. +Pada sistem Unix/Linux lakukan hal berikut: + +
    cd $2
    +mkdir $3
    +chgrp $4 $3
    +chmod g+w $3
    ', + 'config-sqlite-parent-unwritable-nogroup' => 'Tidak dapat membuat direktori data $1, karena direktori induk $2 tidak bisa ditulisi oleh server web. + +Penginstal tidak dapat menentukan pengguna yang menjalankan server web Anda. +Buat direktori $3 menjadi dapat ditulisi oleh semua orang. +Pada sistem Unix/Linux lakukan hal berikut: + +
    cd $2
    +mkdir $3
    +chmod a+w $3
    ', + 'config-sqlite-mkdir-error' => 'Kesalahan saat membuat direktori data "$1". +Periksa lokasi dan coba lagi.', + 'config-sqlite-dir-unwritable' => 'Tidak dapat menulisi direktori "$1". +Ubah hak akses direktori sehingga server web dapat menulis ke sana, dan coba lagi.', + 'config-sqlite-connection-error' => '$1. + +Periksa direktori data dan nama basis data di bawah dan coba lagi.', + 'config-sqlite-readonly' => 'Berkas $1 tidak dapat ditulisi.', + 'config-sqlite-cant-create-db' => 'Tidak dapat membuat berkas basis data $1.', + 'config-sqlite-fts3-downgrade' => 'PHP tidak memiliki dukungan FTS3, tabel dituruntarafkan.', + 'config-can-upgrade' => "Ada tabel MediaWiki di basis dataini. +Untuk memperbaruinya ke MediaWiki $1, klik '''Lanjut'''.", + 'config-upgrade-done' => "Pemutakhiran selesai. + +Anda sekarang dapat [$1 mulai menggunakan wiki Anda]. + +Jika Anda ingin membuat ulang berkas LocalSettings.php, klik tombol di bawah ini. +Tindakan ini '''tidak dianjurkan''' kecuali jika Anda mengalami masalah dengan wiki Anda.", + 'config-upgrade-done-no-regenerate' => 'Pemutakhiran selesai. + +Anda sekarang dapat [$1 mulai menggunakan wiki Anda].', + 'config-regenerate' => 'Regenerasi LocalSettings.php →', + 'config-show-table-status' => 'Kueri SHOW TABLE STATUS gagal!', + 'config-unknown-collation' => "'''Peringatan:''' basis data menggunakan kolasi yang tidak dikenal.", + 'config-db-web-account' => 'Akun basis data untuk akses web', + 'config-db-web-help' => 'Masukkan nama pengguna dan sandi yang akan digunakan server web untuk terhubung ke server basis data saat operasi normal wiki.', + 'config-db-web-account-same' => 'Gunakan akun yang sama seperti untuk instalasi', + 'config-db-web-create' => 'Buat akun jika belum ada', + 'config-db-web-no-create-privs' => 'Akun Anda berikan untuk instalasi tidak memiliki hak yang cukup untuk membuat akun. +Akun yang Anda berikan harus sudah ada.', + 'config-mysql-engine' => 'Mesin penyimpanan:', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-engine-help' => "'''InnoDB''' hampir selalu merupakan pilihan terbaik karena memiliki dukungan konkurensi yang baik. + +'''MyISAM''' mungkin lebih cepat dalam instalasi pengguna-tunggal atau hanya-baca. +Basis data MyISAM cenderung lebih sering rusak daripada basis data InnoDB.", + 'config-mysql-charset' => 'Set karakter basis data:', + 'config-mysql-binary' => 'Biner', + 'config-mysql-utf8' => 'UTF-8', + 'config-mysql-charset-help' => "Dalam '''modus biner''', MediaWiki menyimpan teks UTF-8 untuk basis data dalam bidang biner. +Ini lebih efisien daripada modus UTF-8 MySQL dan memungkinkan Anda untuk menggunakan ragam penuh karakter Unicode. + +Dalam '''modus UTF-8''', MySQL akan tahu apa set karakter data dan dapat menampilkan dan mengubahnya sesuai keperluan, tetapi tidak akan mengizinkan Anda menyimpan karakter di atas [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].", + 'config-site-name' => 'Nama wiki:', + 'config-site-name-help' => 'Ini akan muncul di bilah judul peramban dan di berbagai tempat lainnya.', + 'config-site-name-blank' => 'Masukkan nama situs.', + 'config-project-namespace' => 'Ruang nama proyek:', + 'config-ns-generic' => 'Proyek', + 'config-ns-site-name' => 'Sama seperti nama wiki: $1', + 'config-ns-other' => 'Lainnya (sebutkan)', + 'config-ns-other-default' => 'MyWiki', + 'config-project-namespace-help' => 'Mengikuti contoh Wikipedia, banyak wiki menyimpan halaman kebijakan mereka terpisah dari halaman konten mereka, dalam "\'\'\'ruang nama proyek\'\'\'". +Semua judul halaman dalam ruang nama ini diawali dengan prefiks tertentu yang dapat Anda tetapkan di sini. +Biasanya, prefiks ini berasal dari nama wiki, tetapi tidak dapat berisi karakter tanda baca seperti "#" atau ":".', + 'config-ns-invalid' => 'Ruang nama "$1" yang ditentukan tidak sah. +Berikan ruang nama proyek lain.', + 'config-admin-box' => 'Akun pengurus', + 'config-admin-name' => 'Nama Anda:', + 'config-admin-password' => 'Kata sandi:', + 'config-admin-password-confirm' => 'Kata sandi lagi:', + 'config-admin-help' => 'Masukkan nama pengguna pilihan Anda di sini, misalnya "Udin Wiki". +Ini adalah nama yang akan Anda gunakan untuk masuk ke wiki.', + 'config-admin-name-blank' => 'Masukkan nama pengguna pengurus.', + 'config-admin-name-invalid' => 'Nama pengguna "$1" yang diberikan tidak sah. +Berikan nama pengguna lain.', + 'config-admin-password-blank' => 'Masukkan kata sandi untuk akun pengurus.', + 'config-admin-password-same' => 'Kata sandi harus tidak sama seperti nama pengguna.', + 'config-admin-password-mismatch' => 'Dua kata sandi yang Anda masukkan tidak cocok.', + 'config-admin-email' => 'Alamat surel:', + 'config-admin-email-help' => 'Masukkan alamat surel untuk memungkinkan Anda menerima surel dari pengguna lain, menyetel ulang sandi, dan mendapat pemberitahuan tentang perubahan atas daftar pantauan Anda.', + 'config-admin-error-user' => 'Kesalahan internal saat membuat admin dengan nama "$1".', + 'config-admin-error-password' => 'Kesalahan internal saat membuat sandi untuk admin "$1":
    $2
    ', + 'config-admin-error-bademail' => 'Anda memasukkan alamat surel yang tidak sah', + 'config-subscribe' => 'Berlangganan ke [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce milis pengumuman rilis].', + 'config-subscribe-help' => 'Ini adalah milis bervolume rendah yang digunakan untuk pengumuman rilis, termasuk pengumuman keamanan penting. +Anda sebaiknya berlangganan dan memperbarui instalasi MediaWiki saat versi baru keluar.', + 'config-almost-done' => 'Anda hampir selesai! +Anda sekarang dapat melewati sisa konfigurasi dan menginstal wiki sekarang.', + 'config-optional-continue' => 'Berikan saya pertanyaan lagi.', + 'config-optional-skip' => 'Saya sudah bosan, instal saja wikinya.', + 'config-profile' => 'Profil hak pengguna:', + 'config-profile-wiki' => 'Wiki tradisional', + 'config-profile-no-anon' => 'Pembuatan akun diperlukan', + 'config-profile-fishbowl' => 'Khusus penyunting terdaftar', + 'config-profile-private' => 'Wiki pribadi', + 'config-profile-help' => "Wiki paling baik bekerja jika Anda membiarkan sebanyak mungkin orang untuk menyunting. +Dengan MediaWiki, sangat mudah meninjau perubahan terbaru dan mengembalikan kerusakan yang dilakukan oleh pengguna naif atau berbahaya. + +Namun, berbagai kegunaan lain dari MediaWiki telah ditemukan, dan kadang tidak mudah untuk meyakinkan semua orang manfaat dari cara wiki. +Jadi, Anda yang menentukan. + +'''{{int:config-profil-wiki}}''' memungkinkan setiap orang untuk menyunting, bahkan tanpa masuk. +'''{{int:config-profil-no-anon}}''' menyediakan akuntabilitas tambahan, tetapi dapat mencegah kontributor biasa. + +'''{{int:config-profil-fishbowl}}''' memungkinkan pengguna yang disetujui untuk menyunting, tetapi publik dapat melihat halaman, termasuk riwayatnya. +'''{{int:config-profil-private}}''' hanya memungkinkan pengguna yang disetujui untuk melihat dan menyunting halaman. + +Konfigurasi hak pengguna yang lebih kompleks tersedia setelah instalasi. Lihat [http://www.mediawiki.org/wiki/Manual:User_rights/id entri manual terkait].", + 'config-license' => 'Hak cipta dan lisensi:', + 'config-license-none' => 'Tidak ada lisensi', + 'config-license-cc-by-sa' => 'Creative Commons Atribusi Berbagi Serupa', + 'config-license-cc-by-nc-sa' => 'Creative Commons Atribusi Non-Komersial Berbagi Serupa', + 'config-license-gfdl-old' => 'Lisensi Dokumentasi Bebas GNU 1.2', + 'config-license-gfdl-current' => 'Lisensi Dokumentasi Bebas GNU 1.3 atau versi terbaru', + 'config-license-pd' => 'Domain Umum', + 'config-license-cc-choose' => 'Pilih lisensi Creative Commons kustom', + 'config-license-help' => "Banyak wiki publik meletakkan semua kontribusi di bawah [http://freedomdefined.org/Definition lisensi bebas]. +Hal ini membantu untuk menciptakan rasa kepemilikan komunitas dan mendorong kontribusi jangka panjang. +Ini umumnya tidak diperlukan untuk wiki pribadi atau perusahaan. + +Jika Anda ingin dapat menggunakan teks dari Wikipedia dan Anda ingin Wikipedia untuk dapat menerima teks yang disalin dari wiki Anda, Anda harus memilih'''Creative Commons Attribution Share Alike'''. + +GNU Free Documentation License adalah lisensi sebelumnya dari Wikipedia. +Lisensi ini masih sah, namun memiliki beberapa fitur yang menyulitkan pemakaian ulang dan interpretasi.", + 'config-email-settings' => 'Pengaturan surel', + 'config-enable-email' => 'Aktifkan surel keluar', + 'config-enable-email-help' => 'Jika Anda ingin mengaktifkan surel, [http://www.php.net/manual/en/mail.configuration.php setelah surel PHP] perlu dikonfigurasi dengan benar. +Jika Anda tidak perlu fitur surel, Anda dapat menonaktifkannya di sini.', + 'config-email-user' => 'Aktifkan surel antarpengguna', + 'config-email-user-help' => 'Memungkinkan semua pengguna untuk saling berkirim surel jika mereka mengaktifkan pilihan tersebut dalam preferensi mereka.', + 'config-email-usertalk' => 'Aktifkan pemberitahuan perubahan halaman pembicaraan pengguna', + 'config-email-usertalk-help' => 'Memungkinkan pengguna untuk menerima pemberitahuan tentang perubahan halaman pembicaraan pengguna, jika pilihan tersebut telah diaktifkan dalam preferensi mereka.', + 'config-email-watchlist' => 'Aktifkan pemberitahuan daftar pantau', + 'config-email-watchlist-help' => 'Memungkinkan pengguna untuk menerima pemberitahuan tentang perubahan halaman yang ada dalam daftar pantauan mereka, jika pilihan tersebut telah diaktifkan dalam preferensi mereka.', + 'config-email-auth' => 'Aktifkan otentikasi surel', + 'config-email-auth-help' => "Jika opsi ini diaktifkan, pengguna harus mengonfirmasi alamat surel dengan menggunakan pranala yang dikirim kepadanya setiap kali mereka mengatur atau mengubahnya. +Hanya alamat surel yang dikonfirmasi yang dapat menerima surel dari pengguna lain atau surel pemberitahuan perubahan. +Penetapan opsi ini '''direkomendasikan''' untuk wiki publik karena adanya potensi penyalahgunaan fitur surel.", + 'config-email-sender' => 'Alamat surel balasan:', + 'config-email-sender-help' => 'Masukkan alamat surel untuk digunakan sebagai alamat pengirim pada surel keluar. +Alamat ini akan menerima pentalan. +Banyak server surel mensyaratkan paling tidak bagian nama domain yang sah.', + 'config-upload-settings' => 'Pengunggahan gambar dan berkas', + 'config-upload-enable' => 'Aktifkan pengunggahan berkas', + 'config-upload-help' => 'Pengunggahan berkas berpotensi memaparkan server Anda dengan risiko keamanan. +Untuk informasi lebih lanjut, baca [http://www.mediawiki.org/wiki/Manual:Security/id manual keamanan]. + +Untuk mengaktifkan pengunggahan berkas, ubah modus subdirektori images di bawah direktori akar MediaWiki agar server web dapat menulis ke sana. +Kemudian aktifkan opsi ini.', + 'config-upload-deleted' => 'Direktori untuk berkas terhapus:', + 'config-upload-deleted-help' => 'Pilih direktori tempat mengarsipkan berkas yang dihapus. +Idealnya, direktori ini tidak boleh dapat diakses dari web.', + 'config-logo' => 'URL logo:', + 'config-logo-help' => 'Kulit bawaan MediaWiki memberikan ruang untuk logo ukuran 135x160 pixel di sudut kiri atas. +Unggah gambar dengan ukuran yang sesuai, lalu masukkan URL di sini. + +Jika Anda tidak ingin menyertakan logo, biarkan kotak ini kosong.', + 'config-instantcommons' => 'Aktifkan Instant Commons', + 'config-instantcommons-help' => '[http://www.mediawiki.org/wiki/InstantCommons Instant Commons] adalah fitur yang memungkinkan wiki untuk menggunakan gambar, suara, dan media lain dari [http://commons.wikimedia.org/ Wikimedia Commons]. +Untuk melakukannya, MediaWiki memerlukan akses ke Internet. + +Untuk informasi lebih lanjut tentang fitur ini, termasuk petunjuk tentang cara untuk mengatur untuk wiki selain Wikimedia Commons, baca [http://mediawiki.org/wiki/Manual:$wgForeignFileRepos manual].', + 'config-cc-error' => 'Pemilih lisensi Creative Commons tidak memberikan hasil. +Masukkan nama lisensi secara manual.', + 'config-cc-again' => 'Pilih lagi...', + 'config-cc-not-chosen' => 'Pilih lisensi Creative Commons yang Anda inginkan dan klik "lanjutkan".', + 'config-advanced-settings' => 'Konfigurasi lebih lanjut', + 'config-cache-options' => 'Pengaturan untuk penyinggahan objek:', + 'config-cache-help' => 'Penyinggahan objek digunakan untuk meningkatkan kecepatan MediaWiki dengan menyinggahkan data yang sering digunakan. +Situs berukuran sedang hingga besar sangat dianjurkan untuk mengaktifkan fitur ini, dan situs kecil juga akan merasakan manfaatnya.', + 'config-cache-none' => 'Tidak ada penyinggahan (tidak ada fungsi yang dibuang, tetapi kecepatan dapat terpengaruh pada situs wiki yang besar)', + 'config-cache-accel' => 'Penyinggahan objek PHP (APC, eAccelerator, XCache atau WinCache)', + 'config-cache-memcached' => 'Gunakan Memcached (memerlukan setup dan konfigurasi tambahan)', + 'config-memcached-servers' => 'Server Memcached:', + 'config-memcached-help' => 'Daftar alamat IP yang digunakan untuk Memcached. +Harus dipisahkan dengan koma dan sebutkan port yang akan digunakan (contoh: 127.0.0.1:11211, 192.168.1.25:11211).', + 'config-extensions' => 'Ekstensi', + 'config-extensions-help' => 'Ekstensi yang tercantum di atas terdeteksi di direktori ./extensions. + +Ekstensi tersebut mungkin memerlukan konfigurasi tambahan, tetapi Anda dapat mengaktifkannya sekarang.', + 'config-install-alreadydone' => "'''Peringatan:''' Anda tampaknya telah menginstal MediaWiki dan mencoba untuk menginstalnya lagi. +Lanjutkan ke halaman berikutnya.", + 'config-install-step-done' => 'selesai', + 'config-install-step-failed' => 'gagal', + 'config-install-extensions' => 'Termasuk ekstensi', + 'config-install-database' => 'Mendirikan basis data', + 'config-install-pg-schema-failed' => 'Pembuatan tabel gagal. +Pastikan bahwa pengguna "$1" dapat menulis ke skema "$2".', + 'config-install-pg-commit' => 'Melakukan perubahan', + 'config-install-pg-plpgsql' => 'Memeriksa bahasa PL / pgSQL', + 'config-pg-no-plpgsql' => 'Anda perlu menginstal bahasa PL/pgSQL pada basis data $1', + 'config-install-user' => 'Membuat pengguna basis data', + 'config-install-user-grant-failed' => 'Memberikan izin untuk pengguna "$1" gagal: $2', + 'config-install-tables' => 'Membuat tabel', + 'config-install-tables-exist' => "'''Peringatan''': Tabel MediaWiki sepertinya sudah ada. +Melompati pembuatan.", + 'config-install-tables-failed' => "'''Kesalahan''': Pembuatan tabel gagal dengan kesalahan berikut: $1", + 'config-install-interwiki' => 'Mengisi tabel bawaan antarwiki', + 'config-install-interwiki-list' => 'Tidak dapat menemukan berkas interwiki.list.', + 'config-install-interwiki-exists' => "'''Peringatan''': Tabel antarwiki tampaknya sudah memiliki entri. +Mengabaikan daftar bawaan.", + 'config-install-keys' => 'Menciptakan kunci rahasia', + 'config-install-sysop' => 'Membuat akun pengguna pengurus', + 'config-install-subscribe-fail' => 'Tidak dapat berlangganan mediawiki-announce', + 'config-install-mainpage' => 'Membuat halaman utama dengan konten bawaan', + 'config-install-mainpage-failed' => 'Tidak dapat membuat halaman utama: $1', + 'config-install-done' => "'''Selamat!''' +Anda telah berhasil menginstal MediaWiki. + +Penginstal telah membuat berkas LocalSettings.php. +Berkas itu berisi semua konfigurasi Anda. + +Anda perlu [$1 mengunduhnya] dan meletakkannya di basis instalasi wiki (direktori yang sama dengan index.php). +'''Catatan''': Jika Anda tidak melakukannya sekarang, berkas konfigurasi yang dihasilkan ini tidak akan tersedia lagi setelah Anda keluar instalasi tanpa mengunduhnya. + +Setelah melakukannya, Anda dapat '''[$2 memasuki wiki Anda]'''.", + 'config-download-localsettings' => 'Unduh LocalSettings.php', + 'config-help' => 'bantuan', +); + +/** Igbo (Igbo) + * @author Ukabia + */ +$messages['ig'] = array( + 'config-admin-password' => 'Okwúngáfè:', + 'config-admin-password-confirm' => 'Okwúngáfè mgbe ozor:', +); + +/** Italian (Italiano) + * @author Beta16 + */ +$messages['it'] = array( + 'config-information' => 'Informazioni', + 'config-back' => '← Indietro', + 'config-continue' => 'Continua →', + 'config-page-language' => 'Lingua', + 'config-page-name' => 'Nome', + 'config-page-options' => 'Opzioni', + 'config-page-install' => 'Installa', + 'config-page-complete' => 'Completa!', + 'config-page-readme' => 'Leggimi', + 'config-page-releasenotes' => 'Note di versione', +); + +/** Japanese (日本語) + * @author Aphaia + * @author Iwai.masaharu + * @author Mizusumashi + * @author Ohgi + * @author Whym + * @author Yanajin66 + * @author 青子守歌 + */ +$messages['ja'] = array( + 'config-desc' => 'MediaWikiのためのインストーラー', + 'config-title' => 'MediaWiki $1のインストール', + 'config-information' => '情報', + 'config-localsettings-upgrade' => 'LocalSettings.phpファイルが検出されました。 +アップグレードするため、ボックス中の$wgUpgradeKeyの値を入力してください。 +LocalSettings.phpの中にそれはあるでしょう。', + 'config-localsettings-key' => 'アップグレードキー:', + 'config-localsettings-badkey' => '与えられたキーが間違っています', + 'config-localsettings-incomplete' => '現在のLocalSettings.phpは不完全であるようです。 +変数$1が設定されていません。 +LocalSettings.phpを変更してこの変数を設定して、『{{int:Config-continue}}』を押してください。', + 'config-session-error' => 'セッションの開始エラー:$1', + 'config-session-expired' => 'セッションの有効期限が切れたようです。 +セッションの有効期間は$1に設定されています。 +php.iniのsession.gc_maxlifetimeを設定することで、この問題を改善できます。 +インストール作業を再起動させてください。', + 'config-no-session' => 'セッションのデータが損失しました! +php.iniを確認し、session.save_pathが適切なディレクトリに設定されていることを確かめて下さい。', + 'config-your-language' => 'あなたの言語:', + 'config-your-language-help' => 'インストール作業中に利用する言語を選んで下さい。', + 'config-wiki-language' => 'ウィキの言語:', + 'config-wiki-language-help' => 'そのウィキで主に書き込まれる言語を選んで下さい。', + 'config-back' => '←戻る', + 'config-continue' => '続行→', + 'config-page-language' => '言語', + 'config-page-welcome' => 'MediaWikiへようこそ!', + 'config-page-dbconnect' => 'データベースへ接続', + 'config-page-upgrade' => '既存のインストールを更新', + 'config-page-dbsettings' => 'データベースの設定', + 'config-page-name' => '名前', + 'config-page-options' => 'オプション', + 'config-page-install' => 'インストール', + 'config-page-complete' => '完了!', + 'config-page-restart' => 'インストールを再起動', + 'config-page-readme' => 'リードミー', + 'config-page-releasenotes' => 'リリースノート', + 'config-page-copying' => 'コピー', + 'config-page-upgradedoc' => '更新', + 'config-page-existingwiki' => '既存のウィキ', + 'config-help-restart' => '入力された全て保存データを消去し、インストール作業を再起動しますか?', + 'config-restart' => 'はい、再起動します', + 'config-welcome' => '=== 環境の確認 === +基本的な確認では、この環境がMediaWikiの導入に適しているかを確認します。 +インストール中に必要になったとき、この確認結果を利用して下さい。', + 'config-copyright' => '=== 著作権および規約 === +$1 + +この作品はフリーソフトウェアです。あなたは、フリーソフトウェア財団の発行するGNU一般公衆利用許諾書 (GNU General Public License)(バージョン2、またはそれ以降のライセンス)の規約にもとづき、このライブラリの再配布や改変をすることができます。 + +この作品は、有用であることを期待して配布されていますが、商用あるいは特定の目的に適するかどうかも含めて、暗黙的にも、一切保証されません。 +詳しくは、GNU一般公衆利用許諾書をご覧下さい。 + +あなたはこのプログラムと共に、GNU一般公衆利用許諾契約書の複製を一部受け取ったはずです。もし受け取っていなければ、フリーソフトウェア財団(宛先は the Free Software Foundation, Inc., 59Temple Place, Suite 330, Boston, MA 02111-1307 USA)まで請求してください。', + 'config-sidebar' => '* [http://www.mediawiki.org MediaWikiのホーム] +* [http://www.mediawiki.org/wiki/Help:Contents 利用者向け案内] +* [http://www.mediawiki.org/wiki/Manual:Contents 管理者向け案内] +* [http://www.mediawiki.org/wiki/Manual:FAQ FAQ] +---- +* お読みください +* リリースノート +* コピー +* アップグレード', + 'config-env-good' => '環境は確認されました。 +MediaWikiをインストール出来ます。', + 'config-env-bad' => '環境が確認されました。 +MediaWikiをインストール出来ません。', + 'config-env-php' => 'PHP $1がインストールされています。', + 'config-unicode-using-utf8' => 'Unicode正規化に、Brion Vibberのutf8_normalize.soを利用。', + 'config-unicode-using-intl' => 'Unicode正規化に[http://pecl.php.net/intl intl PECL 拡張機能]を利用。', + 'config-unicode-pure-php-warning' => "'''警告''':Unicode正規化の処理に [http://pecl.php.net/intl intl PECL 拡張機能]ではなく、ピュア PHP な実装を用いています。この処理は遅いです。 +高トラフィックのサイトを運営する場合は、[http://www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode正規化に関するページ]をお読み下さい。", + 'config-unicode-update-warning' => "'''警告''':Unicode正規化ラッパーのインストールされているバージョンは、[http://site.icu-project.org/ ICUプロジェクト]のライブラリの古いバージョンを使用しています。 +Unicodeを少しでも利用する可能性があるなら、[http://www.mediawiki.org/wiki/Unicode_normalization_considerations 更新]する必要があります。", + 'config-no-db' => '適切なデータベースドライバを見つけられませんでした!', + 'config-no-db-help' => 'PHPのデータベースドライバーをインストールする必要があります。 +以下のデータベースの種類がサポートされます:$1。 + +共有ホスト上の場合、ホスト元に適切なデータベースドライバをインストールするように依頼してください。 +PHPを自分自身でコンパイルした場合、./configure --with-mysqlなどを利用して、データベースクライアントを有効化する設定をしてください。 +DebianもしくはUbuntuパッケージからPHPをインストールした場合、php5-mysqlモジュールもインストールする必要があります。', + 'config-no-fts3' => "'''警告''':SQLiteは[http://sqlite.org/fts3.html FTS3]モジュール以外でコンパイルされており、検索機能はこのバックエンドで利用不可能になります。", + 'config-register-globals' => "'''警告:PHPの[http://php.net/register_globals register_globals]オプションが有効になっています。''' +'''可能なら無効化してください。''' +MediaWikiは動作しますが、サーバーは、潜在的なセキュリティ脆弱性を露呈します。", + 'config-magic-quotes-runtime' => "'''致命的エラー:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]が動作しています!''' +このオプションは、予期せずデータ入力を破壊します。 +このオプションが無効化されないかぎり、MediaWikiをインストールし利用することはできません。", + 'config-magic-quotes-sybase' => "'''致命的エラー:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]が動作しています!''' +このオプションは、予期せずデータ入力を破壊します。 +このオプションが無効化されないかぎり、MediaWikiをインストールし利用することはできません。", + 'config-mbstring' => "'''致命的エラー:[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]が動作しています!''' +このオプションは、エラーを引き起こし、予期せずデータ入力を破壊する可能性があります。 +このオプションが無効化されないかぎり、MediaWikiをインストールし利用することはできません。", + 'config-ze1' => "'''致命的エラー:[http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]が動作しています!''' +このオプションは、MediaWikiにおいて深刻なバグを引き起こします。 +このオプションが無効化されないかぎり、MediaWikiをインストールし利用することはできません。", + 'config-safe-mode' => "'''警告:'''PHPの[http://www.php.net/features.safe-mode セーフモード]が有効です。 +特にファイルのアップロードmathのサポートにおいて、問題が発生する可能性があります。", + 'config-xml-bad' => 'PHPのXMLモジュールが不足しています。 +MediaWikiは、このモジュールの関数を必要としているため、この構成では動作しません。 +Mandrakeを実行している場合、php-xmlパッケージをインストールしてください。', + 'config-pcre' => 'PCREをサポートしているモジュールが不足しているようです。 +MediaWikiは、Perl互換の正規表現関数の動作が必要です。', + 'config-pcre-no-utf8' => "'''致命的エラー''': PHPのPCREがPCRE_UTF8サポート無しでコンパイルされています。 +MediaWikiにはUTF-8サポートの関数が必要です。", + 'config-memory-raised' => 'PHPのmemory_limitは$1で、$2に引き上げられました。', + 'config-memory-bad' => "'''警告:'''PHPのmemory_limitは$1です。 +これは、非常に遅い可能性があります。 +インストールが失敗するかもしれません!", + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache]がインストール済み', + 'config-apc' => '[http://www.php.net/apc APC]がインストール済み', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator]がインストール済み', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache]がインストール済み', + 'config-no-cache' => "'''警告:'''[http://eaccelerator.sourceforge.net eAccelerator]、[http://www.php.net/apc APC]、[http://trac.lighttpd.net/xcache/ XCache]あるいは[http://www.iis.net/download/WinCacheForPhp WinCache]のいずれも見つかりませんでした。 +オブジェクトのキャッシュは有効化されません。", + 'config-diff3-bad' => 'GNU diff3が見つかりません。', + 'config-imagemagick' => 'ImageMagickが見つかりました:$1。 +アップロードが有効なら、画像のサムネイルが利用できます。', + 'config-gd' => 'GD画像ライブラリが内蔵されていることが確認されました。 +アップロードが有効なら、画像のサムネイルが利用できます。', + 'config-no-scaling' => 'GDライブラリもImageMagickも見つかりませんでした。 +画像のサムネイル生成は無効になります。', + 'config-no-uri' => "'''エラー:'''現在のURIを決定できませんでした。 +インストールは中止されました。", + 'config-uploads-not-safe' => "'''警告:'''アップロードの既定ディレクトリ$1が、任意のスクリプト実行に関して脆弱性があります。 +MediaWikiはアップロードされたファイルのセキュリティ上の脅威を確認しますが、アップロードを有効化するまえに、[http://www.mediawiki.org/wiki/Manual:Security#Upload_security このセキュリティ上の脆弱性を閉じる]ことが強く推奨されます。", + 'config-brokenlibxml' => 'このシステムで使われているPHPとlibxml2のバージョンのこの組み合わせにはバグがあります。具体的には、MediaWikiやその他のウェブアプリケーションでhiddenデータが破損する可能性があります。 +PHPを5.2.9かそれ以降のバージョンに、libxml2を2.7.3かそれ以降のバージョンにアップグレードしてください([http://bugs.php.net/bug.php?id=45996 PHPでのバグ情報])。 +インストールを終了します。', + 'config-using531' => 'PHP$1は__call()の引数参照に関するバグのため、MediaWikiと互換性がありません。 +PHP5.3.2以降に更新するか、この([http://bugs.php.net/bug.php?id=50394 PHPに提出されたバグ])を修正するためにPHP5.3.0へ戻してください。 +インストールは中止されました。', + 'config-db-type' => 'データベースの種類:', + 'config-db-host' => 'データベースのホスト:', + 'config-db-host-help' => 'データベースサーバーが異なったサーバー上にある場合、ホスト名またはIPアドレスをここに入力してください。 + +もし、共有されたウェブホスティングを使用している場合、ホスティング・プロバイダは正確なホストネームを解説しているはずです。 + +WindowsでMySQLを使用している場合に、「localhost」は、サーバー名としてはうまく働かないでしょう。もしそのような場合は、ローカルIPアドレスとして「127.0.0.1」を試してみてください。', + 'config-db-host-oracle' => 'データベースTNS:', + 'config-db-host-oracle-help' => '有効な[http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm ローカル接続名]を入力してください。tnsnames.oraファイルは、このインストールに対して表示されてなければなりません、
    もしクライアントライブラリ10gもしくはそれ以上を使用している場合、メソッドの名前を[http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm 簡易接続]で利用できます。', + 'config-db-wiki-settings' => 'このウィキを識別', + 'config-db-name' => 'データベース名:', + 'config-db-name-help' => 'このウィキを識別する名前を選んで下さい。 +スペースを含めることはできません。 + +共有ウェブホストを利用している場合、ホスト・プロバイダーは特定の利用可能なデータベース名を提供するか、あるいは管理パネルからデータベースを作成できるようにしているでしょう。', + 'config-db-name-oracle' => 'データベースのスキーマ:', + 'config-db-install-account' => 'インストールのための利用者アカウント', + 'config-db-username' => 'データベースの利用者名:', + 'config-db-password' => 'データベースのパスワード:', + 'config-db-install-username' => 'インストール中にデータベースに接続するために使うユーザ名を入力してください。これは MediaWiki アカウントのユーザ名 (利用者名) のことではありません。あなたのデータベースでのユーザ名です。', + 'config-db-install-password' => 'インストール中にデータベースに接続するために使うパスワードを入力してください。これは MediaWiki アカウントパスワードのことではありません。あなたのデータベースでのパスワードです。', + 'config-db-install-help' => 'インストール作業中にデータベースに接続するための利用者名とパスワードを入力してください。', + 'config-db-account-lock' => 'インストール作業終了後も同じ利用者名とパスワードを使用する', + 'config-db-wiki-account' => 'インストール作業終了後の利用者アカウント', + 'config-db-wiki-help' => '通常のウィキ操作中にデータベースへの接続する時に利用する利用者名とパスワードを入力してください。 +アカウントがないが、インストールのアカウントに十分な権限があれば、このユーザーアカウントは、ウィキを操作するうえで最小限の権限を持った状態で作成されます。', + 'config-db-prefix' => 'データベーステーブルの接頭辞:', + 'config-db-prefix-help' => 'データベースを複数のウィキ間、もしくはMediaWikiと他のウェブアプリケーションで共有する必要がある場合、衝突を避けるために、すべてのテーブル名に接頭辞をつける必要があります。 +スペースは使用できません。 + +このフィールドは、通常は空のままです。', + 'config-db-charset' => 'データベースの文字セット', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0バイナリ', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 下位互換UTF-8', + 'config-charset-help' => "'''警告:'''MySQL 4.1+で'''下位互換UTF-8'''を使用し、その後mysqldumpでデータベースをバックアップすると、すべての非ASCII文字が破壊され、不可逆的にバップアップが壊れるかもしれません。 + +'''バイナリー系式'''では、MediaWikiは、UTF-8テキストを、データベースのバイナリーフィールドに格納します。 +これは、MySQLのUTF-8形式より効率的で、ユニコード文字の全範囲を利用することが出来るようになります。 +'''UTF-8形式'''では、MySQLは、なんの文字集合がデータのなかに含まれているかを知り、それに対して適切な提示と変換をするでしょうが、 +[http://ja.wikipedia.org/wiki/%E5%9F%BA%E6%9C%AC%E5%A4%9A%E8%A8%80%E8%AA%9E%E9%9D%A2 基本多言語面]の外にある文字を格納できるようにはなりません。", + 'config-mysql-old' => 'MySQLの$1以降が要求されています。あなたの所有のものは$2です。', + 'config-db-port' => 'データベースポート:', + 'config-db-schema' => 'メディアウィキの図式', + 'config-db-schema-help' => '上の図式は常に正確です。 +必要である場合のみ、変更してください。', + 'config-sqlite-dir' => 'SQLiteのデータディレクトリ:', + 'config-sqlite-dir-help' => 'SQLiteは単一のファイル中に全てのデータを保持しています。 + +あなたが供給するディレクトリーはインストール時にウェブサーバーによって書き込み可能でなければならない。 + +ウェブを通してアクセス可能"不可能"でなければならない。これはあなたのPHPファイルのある所に配置不能な理由です。 + +インストーラーは共に.htaccessファイルを書き込むことでしょう。しかし、例え失敗しても誰かがあなたの生のデータベースにアクセスすることが可能となるでしょう。 + +例えば/var/lib/mediawiki/yourwikiのように、全く違う場所にデータベースを配置することを考えてください。', + 'config-oracle-def-ts' => '既定のテーブル領域:', + 'config-oracle-temp-ts' => '一時的なテーブル領域:', + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Oracle', + 'config-support-info' => 'メディアウィキは次のようなデータベースシステムをサポートする: + +$1 + +もし、データベースシステムが不可視であるならば、以下のようにリスト化されたものを使用してみてください。可能なサポートの指示に従ってください。', + 'config-support-mysql' => '* $1はMediaWikiの主要な対象で、もっともサポートされています([http://www.php.net/manual/en/mysql.installation.php MySQLのサポート下でPHPをコンパイルする方法])', + 'config-support-postgres' => '* $1は、MySQLの代替として、人気のあるオープンソースデータベースシステムです([http://www.php.net/manual/en/pgsql.installation.php PostgreSQLのサポート下でPHPをコンパイルする方法])', + 'config-support-sqlite' => '* $1は、良くサポートされている、軽量データベースシステムです。([http://www.php.net/manual/en/pdo.installation.php SQLiteのサポート下でPHPをコンパイルする方法]、PDOを使用)', + 'config-support-oracle' => '* $1は商業企業のデータベースです。([http://www.php.net/manual/en/oci8.installation.php OCI8サポートなPHPをコンパイルする方法])', + 'config-header-mysql' => 'MySQLの設定', + 'config-header-postgres' => 'PostgreSQLの設定', + 'config-header-sqlite' => 'SQLiteの設定', + 'config-header-oracle' => 'Oracleの設定', + 'config-invalid-db-type' => '不正なデータベースの種類', + 'config-missing-db-name' => '「データベース名」を入力する必要があります', + 'config-missing-db-server-oracle' => '「データベースTNS」に値を入力する必要があります', + 'config-invalid-db-server-oracle' => '不正なデータベースTNS「$1」です。 +アスキー文字(a-z, A-Z)、数字(0-9)およびアンダーバー(_)とドット(.)のみを使用してください。', + 'config-invalid-db-name' => '無効なデータベース名 "$1"。 +アスキー文字(a-z, A-Z)、数字(0-9)、アンダーバー(_)、ハイフン(-)のみを使用してください。', + 'config-invalid-db-prefix' => 'データベースの接頭語 "$1" が無効です。 +アスキー文字(a-z, A-Z)、数字(0-9)、下線(_)、ハイフン(-)のみを使用してください。', + 'config-connection-error' => '$1。 + +以下のホスト名、ユーザ名、パスワードをチェックして、再度試してみてください。', + 'config-invalid-schema' => 'メディアウィキ"$1"における無効な図式です。 +アスキー文字(a-z, A-Z)、数字(0-9)、下線(_)のみを使用してください。', + 'config-postgres-old' => 'PostgreSQLの$1あるいはそれ以降が必要で、いまのバージョンは$2です。', + 'config-sqlite-name-help' => 'あなたのウェキと同一性のある名前を選んでください。 +空白およびハイフンは使用しないでください。 +SQLiteのデータファイル名として使用されます。', + 'config-sqlite-parent-unwritable-group' => 'データディレクトリ$1を作成できません。親ディレクトリ$2は、ウェブサーバから書き込みできませんでした。 + +インストール機能は、実行しているウェブサーバのユーザーを特定しました。 +続行するには、$3ディレクトリを書き込み可能にしてください。 +UnixあるいはLinux上では、以下を実行してください: + +
    cd $2
    +mkdir $3
    +chgrp $4 $3
    +chmod g+w $3
    ', + 'config-sqlite-parent-unwritable-nogroup' => 'データディレクトリ$1を作成できません。親ディレクトリ$2は、ウェブサーバから書き込みできませんでした。 + +インストール機能は、実行しているウェブサーバのユーザーを特定できませんでした。 +続行するには、$3ディレクトリを、ウェブサーバ(と他のユーザ!)からグローバルに書き込み出来るようにしてください。 +UnixあるいはLinux上では、以下を実行してください: + +
    cd $2
    +mkdir $3
    +chmod a+w $3
    ', + 'config-sqlite-mkdir-error' => 'データディレクトリー"$1"を作成したことによるエラー。 +場所をチェックして、再度試してください。', + 'config-sqlite-dir-unwritable' => 'ディレクトリー"$1"を書き込むことができません。 +パーミッションを変更すれば、ウェブサーバーが書き込み可能となります。再度試してください。', + 'config-sqlite-connection-error' => '$1。 + +以下のデータディレクトリーとデータベースをチェックし、再度試してみてください。', + 'config-sqlite-readonly' => 'ファイル$1は書き込み不能です。', + 'config-sqlite-cant-create-db' => 'データベースファイル$1を作成できませんでした。', + 'config-sqlite-fts3-downgrade' => 'PHPはFTS3のサポート、テーブルのダウングレードが無効です。', + 'config-can-upgrade' => 'このデータベースにはメディアウィキテーブルが存在します。 +それらをメディアウィキ$1にアップグレードするために「続行」をクリックしてください。', + 'config-upgrade-done' => "更新は完了しました。 + +[$1 ウィキを使い始める]ことができます。 + +もし、LocalSettings.phpファイルを再生成したいのならば、下のボタンを押してください。 +ウィキに問題がないのであれば、これは'''推奨されません'''。", + 'config-upgrade-done-no-regenerate' => 'アップグレードが完了しました。 + +[$1 ウィキの使用を開始]することができます。', + 'config-regenerate' => 'LocalSettings.phpを再生成→', + 'config-show-table-status' => 'SHOW TABLE STATUSクエリーが失敗しました!', + 'config-unknown-collation' => "'''警告:''' データベースは認識されない照合を使用しています。", + 'config-db-web-account' => 'ウェブアクセスのためのデータベースアカウント', + 'config-db-web-help' => 'ウィキの元来の操作中、ウェブサーバーがデーターベースサーバーに接続できるように、ユーザ名とパスワードを選択してください。', + 'config-db-web-account-same' => 'インストールのために同じアカウントを使用してください', + 'config-db-web-create' => '既に存在していないのであれば、アカウントを作成してください', + 'config-db-web-no-create-privs' => 'あなたがインストールのために定義したアカウントは、アカウント作成のための特権としては不充分です。 +あなたがここで特定したアカウントはすでに存在していなければなりません。', + 'config-mysql-engine' => 'ストレージエンジン:', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-engine-help' => "'''InnoDB'''は、並行処理のサポートに優れているので、ほとんどの場合において最良の選択肢です。 + +'''MyISAM'''は、利用者が1人の場合、あるいは読み込み専用でインストールする場合に、より処理が早くなるでしょう。 +ただし、MyISAMのデータベースは、InnoDBより高頻度で破損する傾向があります。", + 'config-mysql-charset' => 'データベースの文字セット:', + 'config-mysql-binary' => 'バイナリ', + 'config-mysql-utf8' => 'UTF-8', + 'config-mysql-charset-help' => "'''バイナリー系式'''では、MediaWikiは、UTF-8テキストを、データベースのバイナリーフィールドに格納します。 +これは、MySQLのUTF-8形式より効率的で、ユニコード文字の全範囲を利用することが出来るようになります。 + +'''UTF-8形式'''では、MySQLは、なんの文字集合がデータのなかに含まれているかを知り、それに対して適切な提示と変換をするでしょうが、 +[http://ja.wikipedia.org/wiki/%E5%9F%BA%E6%9C%AC%E5%A4%9A%E8%A8%80%E8%AA%9E%E9%9D%A2 基本多言語面]の外にある文字を格納できるようにはなりません。", + 'config-site-name' => 'ウィキの名前:', + 'config-site-name-help' => 'この事象はブラウザのタイトルバーと他の様々な場所において出現する。', + 'config-site-name-blank' => 'サイト名を入力してください。', + 'config-project-namespace' => 'プロジェクト名前空間:', + 'config-ns-generic' => 'プロジェクト', + 'config-ns-site-name' => 'ウィキ名と同じ:$1', + 'config-ns-other' => 'その他(特化されたもの)', + 'config-ns-other-default' => 'マイウィキ', + 'config-project-namespace-help' => "ウィキペディアの例に従えば、多くのウィキは「'''プロジェクトの名前空間'''」において、コンテンツのページとは分離した独自のポリシーページを持つ。 +伝統的にはこの接頭辞はウィキのページから派生される。しかし、\"#\" や \":\"のような句切り記号は含んでいない。", + 'config-ns-invalid' => '"$1"のように指定された名前空間は無効です。 +違うプロジェクト名前空間を指定してください。', + 'config-admin-box' => '管理アカウント', + 'config-admin-name' => '名前:', + 'config-admin-password' => 'パスワード:', + 'config-admin-password-confirm' => 'パスワードの再入力:', + 'config-admin-help' => 'ここにあなたの希望するユーザ名を入力してください(例えば"Joe Bloggs"など)。 +この名前でこのウィキにログインすることになります。', + 'config-admin-name-blank' => '管理者のユーザ名を入力してください。', + 'config-admin-name-invalid' => '指定されたユーザ名 "$1" は無効です。 +別のユーザ名を指定してください。', + 'config-admin-password-blank' => '管理者アカウントのパスワードを入力してください。', + 'config-admin-password-same' => 'ユーザ名と同じパスワードは使えません。', + 'config-admin-password-mismatch' => '入力された二つのパスワードが一致しません。', + 'config-admin-email' => 'Eメールアドレス:', + 'config-admin-email-help' => '電子メールアドレスを入力してください。他のユーザーからの電子メールの受け取りと、パスワードのリセット、ウォッチリストに登録したページの更新通知に用いられます。', + 'config-admin-error-user' => '"$1"という名前の管理者を作成する際に内部エラーが発生しました。', + 'config-admin-error-password' => '管理者"$1"のパスワードを設定する際に内部エラーが発生しました:
    $2
    ', + 'config-subscribe' => '[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce リリース告知のメーリングリスト]を購読する。', + 'config-subscribe-help' => 'これは、リリースの告知(重要なセキュリティに関する案内を含む)に使われる、低容量のメーリングリストです。 +このメーリングリストを購読して、新しいバージョンが出た場合にMediaWikiを更新してください。', + 'config-almost-done' => 'あなたはほとんど完璧です! +設定を残すことをはぶいて、今すぐにウィキをインストールできます。', + 'config-optional-continue' => '私にもっと質問してください。', + 'config-optional-skip' => 'すでに飽きてしまった、ウィキをインストールするだけです。', + 'config-profile' => '正しいプロフィールのユーザ:', + 'config-profile-wiki' => '伝統的なウィキ', + 'config-profile-no-anon' => 'アカウントの作成が必要', + 'config-profile-fishbowl' => '承認された編集者のみ', + 'config-profile-private' => '非公開ウィキ', + 'config-profile-help' => "ウィキは、たくさんの人が可能な限りそのウィキを編集できるとき、最も優れた働きをします。 +MediaWikiでは、最近の更新を確認し、神経質な、もしくは悪意を持った利用者からの損害を差し戻すことが、簡単にできます。 + +しかし一方で、MediaWikiは、さらに様々な形態でもの利用も優れていると言われています。また、時には、すべての人にウィキ手法の利点を説得させるのは容易ではないかもしれません。 +そこで、選択肢があります。 + +'''{{int:config-profile-wiki}}'''は、ログインをせずとも、誰でも編集が可能なものです。 +'''{{int:config-profile-no-anon}}'''なウィキは、各編集に対してより強い説明責任を付与しますが、気軽な投稿を阻害するかもしれません。 + +'''{{int:config-profile-fishbowl}}'''のウィキは、承認された利用者は編集でき、一方、一般の人はページ(とその履歴)の閲覧が可能です。 +'''{{int:config-profile-private}}'''は、承認された利用者がページを閲覧可能で、そのグループが編集可能です。 + +より複雑な利用者権限の設定は、インストール後に設定可能です。詳細は[http://www.mediawiki.org/wiki/Manual:User_rights 関連するマニュアル]をご覧ください。", + 'config-license' => '著作権とライセンス:', + 'config-license-none' => 'ライセンスのフッターを付けない', + 'config-license-cc-by-sa' => 'クリエイティブ・コモンズ 表示-継承', + 'config-license-cc-by-nc-sa' => 'クリエイティブ・コモンズ 表示-非営利-継承', + 'config-license-gfdl-old' => 'GNUフリー文書利用許諾契約書 1.2', + 'config-license-gfdl-current' => 'GNUフリー文書利用許諾契約書 1.3 またはそれ以降', + 'config-license-pd' => 'パブリック・ドメイン', + 'config-license-cc-choose' => 'その他のクリエイティブ・コモンズ・ライセンスを選択する', + 'config-license-help' => "多くの公開ウィキでは、すべての寄稿物が[http://freedomdefined.org/Definition フリーライセンス]の元に置かれています。 +こうすることにより、コミュニティによる共有の感覚が生まれ、長期的な寄稿が促されます。 +私的ウィキや企業のウィキでは、通常、フリーライセンスにする必要はありません。 + +ウィキペディアにあるテキストをあなたのウィキで利用し、逆にあなたのウィキにあるテキストをウィキペディアに複製することを許可したい場合には、'''クリエイティブ・コモンズ 表示-継承'''を選択するべきです。 + +GNUフリー文書利用許諾契約書はウィキペディアが採用していた古いライセンスです。 +今も有効なライセンスではありますが、再利用や解釈を難しくする条項が含まれています。", + 'config-email-settings' => '電子メールの設定', + 'config-enable-email' => '電子メール送信の有効', + 'config-enable-email-help' => "もし、電子メールの作動を欲するならば、[http://www.php.net/manual/en/mail.configuration.php PHP's mail settings]のページが正確に設定されている必要がある。 +もし、電子メールに関するいかなる機能を欲しないのであれば、ここで無効にできます。", + 'config-email-user' => 'ユーザ間同士の電子メールの許可', + 'config-email-user-help' => '設定において有効になっている場合、全てのユーザがお互いに電子メールのやりとりを行うことを許可する。', + 'config-email-usertalk' => 'ユーザのトークページにおける通知を有効にする', + 'config-email-usertalk-help' => '設定で有効にしているならば、ユーザのトークページの変更の通知を受けることをユーザに許可する。', + 'config-email-watchlist' => 'ウォッチリストの通知を有効にする', + 'config-email-watchlist-help' => '設定で有効にしているならば、閲覧されたページに関する通知を受け取ることをユーザに許可する。', + 'config-email-auth' => '電子メールの認証を有効にする', + 'config-email-auth-help' => "この選択肢が有効化されると、利用者が電子メールのアドレスを設定あるいは変更したときに送信されるリンクにより、そのアドレスを確認しなければならなくなります。 +認証済みのアドレスだけが、他の利用者からのメールや、変更通知のメールを受け取ることができます。 +公開ウィキでは、メール機能による潜在的な不正利用の防止のため、この選択肢を設定することが'''推奨'''されます。", + 'config-email-sender' => '電子メールのアドレスを返す:', + 'config-email-sender-help' => '送信メールの返信アドレスとして利用するメールアドレスを入力してください。 +宛先不明の場合、このアドレスにその通知が送信されます。 +多くのメールサーバーでは、少なくともドメイン名の一部が有効であることが必要になっています。', + 'config-upload-settings' => '画像およびファイルのアップロード', + 'config-upload-enable' => 'ファイルのアップロードを有効にする', + 'config-upload-help' => 'ファイルのアップロードは潜在的にあなたのサーバにセキュリティー上の危険をさらします。 +更なる情報のために、マニュアルの[http://www.mediawiki.org/wiki/Manual:Security security section] を読むことをすすめます。 + +ファイルのアップロードを可能にするために、メディアウィキのルートディレクトリ下のimagesサブディレクトリのモードを変更します。そうすることにより、ウェブサーバはそこに書き込みが可能になります。 +そして、このオプションを有効にしてください。', + 'config-upload-deleted' => '削除されたファイルのためのディレクトリ:', + 'config-upload-deleted-help' => '削除されるファイルを保存するためのディレクトリを選択してください。 +これがウェブからアクセスできないことが理想です。', + 'config-logo' => 'ロゴのURL:', + 'config-logo-help' => 'メディアウィキの初期のスキンは最上部左角にある135x160ピクセルのロゴのためにスペースを含んでいます。 +適切なサイズのイメージをアップロードし、ここにURLを入力してください。 + +もし、ロゴを望まないならば、このボックスを空白状態のままにしてください。', + 'config-instantcommons' => 'InstantCommons機能を有効にする', + 'config-instantcommons-help' => '[http://www.mediawiki.org/wiki/InstantCommons InstantCommons]は、[http://commons.wikimedia.org/ ウィキメディア・コモンズ]のサイトで見つかった画像や音声、その他のメディアをウィキ上で利用することができるようになる機能です。 +これを有効化するには、MediaWikiはインターネットに接続できなければなりません。 + +ウィキメディアコモンズ以外のウィキを同じように設定する方法など、この機能に関する詳細な情報は、[http://mediawiki.org/wiki/Manual:$wgForeignFileRepos マニュアル]をご覧ください。', + 'config-cc-error' => 'クリエイティブ・コモンズ・ライセンスの選択器から結果が得られませんでした。 +ライセンスの名前を手動で入力してください。', + 'config-cc-again' => 'もう一度選択してください...', + 'config-cc-not-chosen' => 'あなたの求めるクリエイティブコモンズのライセンスを選んで、"続行"をクリックしてください。', + 'config-advanced-settings' => '高度な設定', + 'config-cache-options' => 'オブジェクトのキャッシュの設定:', + 'config-cache-help' => 'オブジェクトのキャッシュは、使用したデータを頻繁にキャッシングすることによって、メディアウィキのスピード改善に使用されます。 +中〜大サイトにおいては、これを有効にするために大変望ましいことです。また小さなサイトにおいても同様な利点をもたらすと考えられます。', + 'config-cache-none' => 'キャッシングしない(機能は取り払われます、しかもより大きなウィキサイト上でスピードの問題が発生します)', + 'config-cache-accel' => 'PHPオブジェクトキャッシング(APC、eAccelerator、XCacheあるいはWinCache)', + 'config-cache-memcached' => 'Memcachedを使用(追加の設定が必要です)', + 'config-memcached-servers' => 'メモリをキャッシュされたサーバ:', + 'config-memcached-help' => 'Memcachedを使用するIPアドレスの一覧。 +カンマ区切りで、利用する特定のポートの指定が必要です。例: +127.0.0.1:11211 +192.168.1.25:1234', + 'config-extensions' => '拡張機能', + 'config-extensions-help' => './extensionsディレクトリ内で、上記リストの拡張機能が発見されました。 + +これらは更に多くの設定を要求するかもしれませんが、今これらを有効にすることができます。', + 'config-install-alreadydone' => "'''警告:''' 既にMediaWikiがインストール済みで、再びインストールし直そうとしています。 +次のページへ進んでください。", + 'config-install-begin' => '「{{int:config-continue}}」を押すと、MediaWikiのインストールを開始することができます。 +変更したい設定があれば、「{{int:Config-back}}」を押してください。', + 'config-install-step-done' => '実行', + 'config-install-step-failed' => '失敗した', + 'config-install-extensions' => '拡張機能を含む', + 'config-install-database' => 'データベースの構築', + 'config-install-pg-schema-failed' => 'テーブルの作成に失敗した。 +ユーザ"$1"が図式"$2"に書き込みができるようにしてください。', + 'config-install-pg-commit' => '変更を送信', + 'config-install-user' => 'データベースユーザを作成する', + 'config-install-user-grant-failed' => 'ユーザー「$1」に許可を与えることに失敗しました。:$2', + 'config-install-tables' => 'テーブルの作成', + 'config-install-tables-exist' => "'''警告''':MediaWikiテーブルが、すでに存在しているようです。 +作成を飛ばします。", + 'config-install-tables-failed' => "'''エラー''':テーブルの作成が、次のエラーにより失敗しました:$1", + 'config-install-interwiki' => '既定のウィキ間テーブルを導入しています', + 'config-install-interwiki-list' => 'ファイルinterwiki.listを見つけることができませんでした。', + 'config-install-interwiki-exists' => "'''警告''':ウィキ間テーブルはすでに登録されているようです。 +既定のテーブルを無視します。", + 'config-install-keys' => '秘密鍵を生成する', + 'config-install-sysop' => '管理者のユーザーアカウントを作成する', + 'config-install-mainpage' => '既定の接続でメインページを作成', + 'config-install-mainpage-failed' => 'メインページを挿入できませんでした:$1', + 'config-install-done' => "'''おめでとうございます!''' +MediaWikiのインストールに成功しました。 + +LocalSettings.phpファイルが生成されました。 +すべての設定がそのファイルに含まれています。 + +それをダウンロードし、ウィキをインストールした基準ディレクトリー(index.phpと同じディレクトリー)に置く必要があります。ダウンロードは自動的に開始しているはずです。 + +ダウンロードが開始していない場合、またダウンロードをキャンセルした場合は、以下のリンクからダウンロードを再開することができます: + +$3 + +'''注意''': もし、これを今しなければ、つまり、このファイルをダウンロードせずインストールを終了した場合、この生成された設定ファイルは利用されません。 + +それを完了すれば、'''[$2 ウィキに入る]'''ことができます。", + 'config-download-localsettings' => 'LocalSettings.phpをダウンロード', + 'config-help' => 'ヘルプ', +); + +/** Khmer (ភាសាខ្មែរ) + * @author គីមស៊្រុន + */ +$messages['km'] = array( + 'config-your-language' => 'ភាសារបស់អ្នក៖', + 'config-your-language-help' => 'ជ្រើសយកភាសាដើម្បីប្រើក្នុងពេលតំលើង។', + 'config-wiki-language' => 'ភាសាវិគី៖', + 'config-wiki-language-help' => 'ជ្រើសរើសភាសាដែលវិគីនេះប្រើជាចំបង។', + 'config-back' => '← ត្រលប់ក្រោយ', + 'config-continue' => 'បន្ត →', + 'config-page-language' => 'ភាសា', + 'config-page-welcome' => 'មេឌាវិគីសូមស្វាគមន៍!', + 'config-page-dbconnect' => 'ភ្ជាប់ទៅមូលដ្ឋានទិន្នន័យ', + 'config-page-name' => 'ឈ្មោះ', + 'config-page-options' => 'ជំរើស', + 'config-page-install' => 'តំលើង', + 'config-page-complete' => 'បញ្ចប់!', + 'config-page-restart' => 'តំលើងឡើងវិញ', + 'config-help' => 'ជំនួយ', +); + +/** Colognian (Ripoarisch) + * @author Purodha + */ +$messages['ksh'] = array( + 'config-desc' => 'Et Projramm för Mediwiki opzesäze.', + 'config-title' => 'MediaWiki $1 opsäze', + 'config-information' => 'Enfomazjuhn', + 'config-localsettings-upgrade' => 'De Dattei LocalSettings.php es ald doh. +De Projramme vum Wiki künne op der neußte Shtand jebraat wääde: +Donn doför dä Wäät vum $wgUpgradeKey en dat heh Feld enjävve. +Do fenggs_et en dä Dattei LocalSettings.php om ẞööver.', + 'config-localsettings-cli-upgrade' => 'En Dattei LocalSettings.php es jefonge woode. +Öm et Wiki_Projramm op ene neue Shtand ze bränge, donn update.php oproofe.', + 'config-localsettings-key' => 'Der Schlößel för et Projramm op ene neue Schtand ze bränge:', + 'config-localsettings-badkey' => 'Dinge Schlößel paß nit.', + 'config-upgrade-key-missing' => 'Mer han jefonge, dat MediaWiki ald enschtalleed es. +Üm de Projramme un Daate o der neue Schtand bränge ze künne, dunn aan et Engk vun dä Dattei LocalSettings.php op dämm ẞööver: + +$1 + +aanhange.', + 'config-localsettings-incomplete' => 'Mer han en Dattei LocalSettings.php: jefonge, ävver di schingk nit kumplätt ze sin. +De Varijable $1 es nit jesatz. +Bes esu joot, un donn di Dattei esu aanpaße, dat se jesaz ea, un dann donn op „{{int:config-continue}}“ klecke.', + 'config-localsettings-connection-error' => 'Ene Fähler es opjetrodde wi mer en Verbendung noh de Datebangk opmaache wullte met dä Enshtellunge uß dä Dattei LocalSettings udder uß dä Dattei LocalSettings un et hät nit jeflupp. Bes esu joot un dat repareere un versöhg et dann norr_ens. + +$1', + 'config-session-error' => 'Ene Fähler es opjetrodde beim Aanmelde för en Sezung: $1', + 'config-session-expired' => 'De Daate för Ding Setzung sinn wall övverholld of afjeloufe. +De Setzungunge sin esu enjeshtallt, nit mieh wi $1 ze doore. +Dat kanns De verlängere, endämm dat De de session.gc_maxlifetime en dä Dattei php.ini jrüüßer määß. +Don dat Projramm för et Opsäze norr_ens aanschmiiße.', + 'config-no-session' => 'De Daate för Ding Setzung sinn verschött jejange. +Donn en dä Dattei php.ini nohloore, ov dä session.save_path op e zopaß Verzeijschneß zeisch.', + 'config-your-language' => 'Ding Shprooch:', + 'config-your-language-help' => 'Donn heh di Shprooch ußsöhke, di dat Enshtallzjuhnsprojramm kalle sull.', + 'config-wiki-language' => 'Dem Wiki sing Shprooch:', + 'config-wiki-language-help' => 'Donn heh di Shprooch ußsöhke, di et Wiki shtandattmääßesch kalle sull.', + 'config-back' => '← Retuur', + 'config-continue' => 'Wigger →', + 'config-page-language' => 'Shprooch', + 'config-page-welcome' => 'Wellkumme beim MediaWiki!', + 'config-page-dbconnect' => 'Met dä Daatebangk Verbenge', + 'config-page-upgrade' => 'En Inshtallzjuhn op der neuste Shtand bränge', + 'config-page-dbsettings' => 'Parrameeter för de Daatebangk', + 'config-page-name' => 'Name', + 'config-page-options' => 'Ennställunge', + 'config-page-install' => 'Opsäzze', + 'config-page-complete' => 'Fäädesch!', + 'config-page-restart' => 'Et Opsäze norr_ens neu aanfange', + 'config-page-readme' => 'Donn mesch lässe! (read me)', + 'config-page-releasenotes' => 'Henwies för heh di Version vum Projramm (Release notes)', + 'config-page-copying' => 'Ben aam Kopeere', + 'config-page-upgradedoc' => 'Ben op der neuste Stand aam bränge', + 'config-page-existingwiki' => 'Mer han ald e Wiki!', + 'config-help-restart' => 'Wells De all Ding enjejovve Sachee fottjeschmesse han, un dä janze Vörjang vun fürre aan neu aanfange?', + 'config-restart' => 'Joh, neu aanfange!', + 'config-welcome' => '=== Ömjevong Prööfe === +Mer maache en Aanzal jrundlääje Prövunge, öm erus ze fenge, ov di Ömjevong heh paß, för Mediawiki opzesäze. +Wann de Hölp bem Opsäze bruchs, donn wigger ssare, wat erus kohm, wat heh shteiht.', + 'config-copyright' => "=== Urhävverrääsch un Lizänzbedengunge === + +\$1 + +Dat Projramm heh es frei, mer kann et wiggerjävve un verdeijle un och verändere ungger dä Bedengunge vun de GNU General Public License (Alljemeine öffentlesche Lizänz) wi se vun de Free Software Foundation (de Shteftung för frei Projramme) veröffentlesch woode es. Dobei kanns De Der de Version 2 vun dä Lizanz ußsöhke, udder jeede Version donoh, wi et Der jefällt. + +Dat Projramm weed wigger jejovve met dä Hoffnung, dat et jät nöz, ävver '''ohne Jarrantie''', sujaa ohne de onußjeshproche Jarantie, '''verkoufbaa''' ze sin, udder '''för öhnds_ene beshtemmpte Zweck ze bruche''' ze sin. +Liß de GNU General Public License sellver, öm mieh ze erfahre. + +Do sullts en Kopie vun dä alljemene öffentlesche Lizänz vun dä GNU (GNU General Public License) zosamme met heh däm Projramm krääje han. Wann dat nit esu es, schrief aan de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. udder [http://www.gnu.org/copyleft/gpl.html liß se online övver et Internet].", + 'config-sidebar' => '* [http://www.mediawiki.org MediaWiki sing Hompäjdsch] +* [http://www.mediawiki.org/wiki/Help:Contents Handbooch för Aanwender] +* [http://www.mediawiki.org/wiki/Manual:Contents Handbooch för Administratore un Wiki_Köbesse] +* [http://www.mediawiki.org/wiki/Manual:FAQ Öff jeshtallte Froore met Antwoote] +---- +* Liß Mesch! (Read me) +* Release notes Övver heh di Projrammversion +* Copying — Lizänzbeshtemmunge +* Upgrading — Ob en neu Projrammversion jonn', + 'config-env-good' => 'De Ömjävung es jeprööf. +Do kanns MediaWiki opsäze.', + 'config-env-bad' => 'De Ömjävung es jeprööf. +Do kanns MediaWiki nit opsäze.', + 'config-env-php' => 'PHP $1 es doh.', + 'config-env-php-toolow' => 'PHP $1 es enshtalleert. +Ävver MediaWiki bruch PHP $2 udder hühter.', + 'config-unicode-using-utf8' => 'För et Unicode-Nommaliseere dom_mer däm Brion Vibber sing Projramm utf8_normalize.so nämme.', + 'config-unicode-using-intl' => 'För et Unicode-Nommaliseere dom_mer dä [http://pecl.php.net/intl Zohsaz intl uss em PECL] nämme.', + 'config-unicode-pure-php-warning' => '\'\'\'Opjepaß:\'\'\' Mer kunnte dä [http://pecl.php.net/intl Zohsaz intl uss em PECL] för et Unicode-Nommaliseere nit fenge. Dröm nämme mer dat eijfache, ävver ärsh lahme, PHP-Projrammshtöck doför. +För jruuße Wikis met vill Metmaachere doht Üsch die Sigg övver et [http://www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode-Nommaliseere] (es op Änglesch) aanloore.', + 'config-unicode-update-warning' => "'''Opjepaß:''' Dat Projramm för der Unicode zo normaliseere boud em Momang op en ählter Version vun dä Bibliothek vum [http://site.icu-project.org/ ICU-Projäk] op. +Doht di [http://www.mediawiki.org/wiki/Unicode_normalization_considerations op der neuste Shtand bränge], wann auf dat Wiki em Äänz Unicode bruche sull.", + 'config-no-db' => 'Mer kunnte kei zopaß Daatebangk-Driiverprojamm fenge.', + 'config-no-db-help' => 'Mer bruche e Daatebangk-Driiverprojamm för PHP. Dat moß enjeresht wääde. +Mer künne met heh dä Daatebangke ömjonn: $1. + +Wann De nit om eijene Rääshner bes, moß De Dinge provider bedde, dat hä Der ene zopaß Driiver enresht. +Wann de PHP sellver övversaz häs, donn ene Zohjang för en Daatebangk enbenge, för e Beishpell met: ./configure --with-mysql op ene command shell. +Wann De PHP uss enem Debian udder Ubuntu Pakätt enjeresht häs, moß De dann och noch et php5-mysql op Dinge Räschner bränge.', + 'config-no-fts3' => "'''Opjepaß:''' De Projramme vum SQLite sin der ohne et [http://sqlite.org/fts3.html FTS3-Modul] övversaz, dröm wääde de Funxjohne för et Söhke fähle.", + 'config-register-globals' => "'''Opjepaß:''' dem PHP singe Schallder [http://php.net/register_globals register_globals] es enjeschalldt. +'''Donn dä ußmaache, wann De kann.''' +MediaWiki löp och esu, dä künnt ävver Sesherheitslöcke opmaache, di mer noch nit jefonge un eruß jemaat hät.", + 'config-magic-quotes-runtime' => "'''Dä!''' Dem PHP singe Schallder [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] es enjeschalldt. +Dä määt enjejovve Daate kapott, un doh draan kam_mer dann nix mieh repareere. +Domet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße. +Dat heiß, mer moß en affschallde, söns jeiht nix.", + 'config-magic-quotes-sybase' => "'''Dä!''' Dem PHP singe Schallder [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] es enjeschalldt. +Dä määt enjejovve Daate kapott, un doh draan kam_mer dann nix mieh repareere. +Domet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße. +Dat heiß, mer moß en affschallde, söns jeiht nix.", + 'config-mbstring' => "'''Dä!''' Dem PHP singe Schallder [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] es enjeschalldt. +Dat sorresch för Fähler un kann enjejovve Daate esu kapott maach, dat doh draan nix mieh ze repareere es. +Domet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße. +Dat heiß, mer moß en affschallde, söns jeiht nix.", + 'config-ze1' => "'''Dä!''' Dem PHP singe Schallder [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] es enjeschalldt. +Dat sorresch för schräcklejje Fähler em MediaWiki. +Dat kam_mer domet nit ennreeshte un och nit loufe lohße. +Dat heiß, mer moß en affschallde, söns jeiht nix.", + 'config-safe-mode' => "'''Opjepaß:''' Dem PHP singe [http://www.php.net/features.safe-mode safe mode] es aanjeschalldt. Dat kann Ärjer maache, besönders beim Datteie Huhlaade bei de Ongershtözung för math-Befähle.", + 'config-xml-bad' => 'Dem PHP sing XML-Modul es nit ze fenge. +MediaWiki bruch Funxjohne en däm Modul un deiht et esu nit. +Wann De Mandrake aam loufehäs, donn dat Pakätt php-xml enstalleere.', + 'config-pcre' => 'Dem PHP sing Modul för PCRE schingk ze fähle. +MediaWiki deiht et nit ohne de Funxjohne för de Perl-compatible regular expressions.', + 'config-pcre-no-utf8' => "'''Dä:''' Et PHP-Modul PCRE schingk ohne de PCRE_UTF8-Aandeile övversaz ze sin. +MediaWiki bruch dä UTF-8-Krohm ävver, öm ohne Fähler loufe ze künne.", + 'config-memory-raised' => 'Der jrühzte zohjelasse Shpeisherbedarf vum PHP, et memory_limit, shtund op $1 un es op $2 erop jesaz woode.', + 'config-memory-bad' => "'''Opjepaß:''' Dem PHP singe Parameeter memory_limit es \$1. +Dat es wall ze winnisch. +Et Enreeschte kunnt doh draan kappott jon!", + 'config-xcache' => 'Dä [http://trac.lighttpd.net/xcache/ XCache] es ennjeresht.', + 'config-apc' => 'Dä [http://www.php.net/apc APC] es ennjeresht.', + 'config-eaccel' => 'Dä [http://eaccelerator.sourceforge.net/ eAccelerator] es ennjeresht.', + 'config-wincache' => 'Dä [http://www.iis.net/download/WinCacheForPhp WinCache] es ennjeresht.', + 'config-no-cache' => '\'\'\'Opjepaß:\'\'\' Mer kunnte dä [http://eaccelerator.sourceforge.net eAccelerator], dä [http://www.php.net/apc APC], dä [http://trac.lighttpd.net/xcache/ XCache] un dä [http://www.iis.net/download/WinCacheForPhp WinCache] nit fenge. +Et object caching es nit müjjelesh un ußjeschalldt.', + 'config-diff3-bad' => 'Mer han GNU diff3 nit jefonge.', + 'config-imagemagick' => 'Mer han ImageMagick jefonge: $1. +Et Ömrääschne en Minni-Beldsche weed müjjelesch sin, wann De et Belder Huhlaade zohlöhß.', + 'config-gd' => 'Mer han de ennjeboute GD-Jrafik-Projramm-Biblijotheek jefonge. +Et Ömrääschne en Minni-Beldsche weed müjjelesch sin, wann De et Belder Huhlaade zohlöhß.', + 'config-no-scaling' => 'Mer han weeder de GD-Jrafik-Projramm-Biblijotheek, noch ImageMagick jefonge. +Et Ömrääschne en Minni-Beldsche weed ußjeschalldt.', + 'config-no-uri' => "'''Fähler:''' Mer kunnte der aktoälle URI nit erusfenge. +Et Enreeschte es domet heh aam Engk.", + 'config-uploads-not-safe' => "'''Opjepaß:''' Uß däm jewöhnlijje Verzeichnes för de huhjelaade Datteie, dat es $1, künnte öhnzwällsche Skrepte un Projramme ußjeföhrt wääde. Och wann MediaWiki de huhjelaade Datteie prööf, dat kein bekannte Risike dren sin, sullt mer doch dat [http://www.mediawiki.org/wiki/Manual:Security#Upload_security Sesherheitsloch] zoh maache, ih dat mer et Dattei Huhlaade zohlöht.", + 'config-brokenlibxml' => 'Op Dingem Rääschner loufe Versione vun PHP un libxml2 zosamme, di ävver nit zosamme paßße, un de Daate em MediaWiki un ander Web_Aanwändunge [http://bugs.php.net/bug.php?id=45996 bug kapott maache]. +Jangk op PHP 5.2.9 udder dohnoh un op libxml2 2.7.3 udder dohnoh. +Heh jeihd et nit wigger.', + 'config-using531' => 'MediaWiki läuf nit met PHP $1 zosamme wääje enem [http://bugs.php.net/bug.php?id=50394 Fähler em Zosammehang met Parrameetere för __call()]. +Jangk op de Version 5.3.2 vum PHP ov dohnoh, udder op de Version 5.3.0 udder dovöör, öm dat Problem ze ömjonn. +Heh jeiht et nit wigger.', + 'config-db-type' => 'De Zoot Daatebangk:', + 'config-db-host' => 'Dä Name vun däm Rääschner met dä Daatebangk:', + 'config-db-host-help' => 'Wann Dinge ẞööver för de Daatebangk ob enem andere Rääschner es, donn heh dämm singe Name udder IP-Addräß enjävve. + +Wann De ob enem Meetẞööver beß, weet Der Dinge Provaider odder däm sing Dokemäntazjuhn saare, wat De endraare moß. + +Wann De ob enem ẞööver onger Windows am enshtalleere bes un en MySQL-Daatebangk häs, künnd_et sin, dat „localhost“ nit douch för der Name vum ẞööver. Wann dad-esu es, versöhg et ens met „127.0.0.1“ als IP-Addräß vum eije Rääschner.', + 'config-db-host-oracle' => 'Dä Daatebangk ier TNS:', + 'config-db-host-oracle-help' => 'Donn ene jöltije [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm „Local Connect“-Name] aanjävve. De Dattei „tnsnames.ora“ moß för heh dat Projamm seschbaa un ze Lässe sin.
    Wann heh de Projamm_Biblijoteeke für de Aanwänderprojramme för de Version 10g udder neuer enjesaz wääde, kam_mer och et [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm „Easy Connect“] jenumme wääde för der Name ze verjävve.', + 'config-db-wiki-settings' => 'De Daate vum Wiki', + 'config-db-name' => 'Dä Name vun dä Daatebangk:', + 'config-db-name-help' => 'Jiff ene Name aan, dä för Ding Wiki passe deiht. +Doh sullte kei Zweschrereum un kein Stresche dren sin. + +Wann De nit op Dingem eije Rääschner bes, künnt et sin, dat Dinge Provaider Der extra ene beshtemmpte Name för de Daatebangk jejovve hät, uffr dat de dä drom froore moß udder dat De de Daatebangke övver e Fommulaa selver enreeschte moß.', + 'config-db-name-oracle' => 'Schema för de Daatebangk:', + 'config-db-account-oracle-warn' => 'Mer han drei Aate, wi mer Oracle als Daatebangk aanbenge künne. + +Wann De ene neue Zohjang op de Daatenbangk met Naame un Paßwoot mem Projramm för et Opsäze aanlääje wells, dann jif ene Zohjang met däm Rääsch „SYSDBA“ aan, dä et alld jitt, un jif däm di Daate aan för dä neue Zohjang aanzelääje. +Do kanns och dä neue Zohjang vun Hand aanlääje un heh beim Opsäze nur dää aanjävve — wann dä dat Rääsch hät, en de Daatebangk Schema_Objäkte aanzelääje. +Udder De jiß zwei ongerscheidlijje Zohjäng op de Daatenbangk aan, woh eine vun dat Rääsch zom Aanlääje hät un dä andere moß dat nit un es för der nomaale Bedrief zohshtändesch. + +En Skrep, wat ene Zohjang op de Daatenbangk aanlääsch met all dä nüüdejje Rääschde, fengks De em Verzeishneß maintenance/oracle/ vun Dingem MediaWiki. Donn draan dengke, dat ene Zohjang met beschrängkte Rääschde all di Müjjeleschkeite för et Waade un Repareere nit hät, di de jewöhnlejje Zoot Zohjang met sesh brängk.', + 'config-db-install-account' => 'Der Zohjang för en Enreeschte', + 'config-db-username' => 'Dä Name vun däm Aanwender för dä Zohjref op de Daatebangk:', + 'config-db-password' => 'Et Paßwoot vun däm Aanwender för dä Zohjref op de Daatebangk:', + 'config-db-password-empty' => 'Jiv e Paßwoot aan, för dä neue Aanwender för dä Zohjref op de Daatebangk, $1. +Ed es zwa müjjelesch, Aanwender för dä Zohjref op de Daatebangk der ohne e Paßwoot aanzelääje, +ävver dat wöhr en schwere Jevah för de Sescherheit vum Wiki.', + 'config-db-install-username' => 'Jiv ene Name aan för dä Aanwender för dä Zohjref op de Daatebangk beim Enshtalleere. +Dat es keine Metmaacher_Name em Wiki — heh dä Name es alleins en der Daatebangk bikannt.', + 'config-db-install-password' => 'Jiv e Paßwoot aan för dä Aanwender för dä Zohjref op de Daatebangk beim Enshtalleere. +Dat es kei Paßwoot för ene Metmaacher em Wiki — et es alleins en der Daatebangk bikannt.', + 'config-db-install-help' => 'Donn dä Name un et Paßwoot vun däm Aanwänder för der Zohjreff op de Daatebangk jäz för et Enreeshte aanjävve.', + 'config-db-account-lock' => 'Donn dersälve Name un et sälve Paßwoot för der nomaale Bedrief vum Wiki bruche', + 'config-db-wiki-account' => 'Dä Name vun däm Aanwender för dä Zohjref op de Daatebangk em nomaale Bedrief:', + 'config-db-wiki-help' => 'Jiv ene Name un e Paßwoot aan, för dä Aanwender för dä Zohjref op de Daatebangk, wann et wiki nommaal aam Loufe es. +Wan et dä Name en der Daatebangk noch it jit, un dä Aanwender för dä Zohjref op de Daatebangk beim Enshtalleere +jenooch Beräschtijunge hät, läät dä heh dä Aanwender en der Daatebangk aan un jidd_em di Rääschde, di dä nüüdesch hät, ävver nit mieh.', + 'config-db-prefix' => 'Vörsaz för de Name vun de Tabälle en de Daatebangk:', + 'config-db-prefix-help' => 'Wann ein Daatebangk för mieh wi ein Wiki udder e Wiki uns söns jät zosamme jebruch weed, dann kam_mer noch jet vör de Tabälle ier Name säze. Esu ene Vörsaz sull dubblte Tabällename vermeide hälfe. +Donn kein Zwescheräum enjävve! + +Jewöhnlesch bliev dat Feld heh ävver läddesch.', + 'config-db-charset' => 'Dä Daatebangk iere Zeishesaz', + 'config-charset-mysql5-binary' => 'MySQL (4.1 udder 5.0) binär', + 'config-charset-mysql5' => 'MySQL (4.1 udder 5.0) UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 röckwääts kompatibel UTF-8', + 'config-charset-help' => "''' Opjepaß:''' +Wann De et '''röckwääts kompatibel UTF-8 Fommaat''' nemmps, met dem MySQL singe Version4.1 udder hüüter, dann künnt dat all di Zeishe kappott maache, die nit em ASCII sen, un domet all ding Sesherungskopieje kapott maache, wat mer nieh mieh retuur krijje kann. + +Beim Shpeishere em '''binäre Fomaat''' deiht MediaWiki de Täxte, di em UTF-8 Fommaat kumme, en dä Daatebangk en binär kodeerte Daatefälder faßhallde. +Dat es flöcker un spaasaamer wi et UTF-8 Fommaat vum MySQL un määd et müjjelesch, all un jeedes Unicode-Zeishe met faßzehallde. + +Beim Shpeishere em '''UTF-8 Fomaat''' deiht et MySQL der Zeishesaz un de Kodeerung vun dä Daate känne, un kann se akeraat aanzeije un ömwandelle, +allerdengs künne kein Zeishe ußerhalv vum [http://de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke jrundlääje Knubbel för vill Shprooche (Basic Multilingual Plane — BMP)] afjeshpeishert wääde.", + 'config-mysql-old' => 'Mer bruche MySQL $1 udder neuer. Em Momang es MySQL $2 aam Loufe.', + 'config-db-port' => 'De Pooz-Nommer (port) för de Daatebangk:', + 'config-db-schema' => 'Et Schema en de Datebangk för MediaWiki:', + 'config-db-schema-help' => 'För jewöhnlesch es dat Schema en Odenong. +Donn bloß jät draan ändere, wann De sescher weiß, dat dat nüüdesch es.', + 'config-sqlite-dir' => 'Dem SQLite sing Daateverzeishnes:', + 'config-sqlite-dir-help' => 'SQLite hät all sing Daate zosamme en en einzel Dattei. + +En dat Verzeishneß, wat De aanjiß, moß dat Web_ẞööver_Projramm beim Opsäze eren schriive dörrve. + +Dat Verzeishneß sullt \'\'\'nit\'\'\' övver et Web zohjänglesch sin, dröm dom_mer et nit dohen, woh de PHP-Datteije sin. + +Mer donn beim Opsäze zwa uß Vöörssh en .htaccess Dattei dobei, ävver wann di nit werrek, künnte Lück vun ußerhallef aan Ding Daatebangk_Dattei eraan kumme. +Doh shtonn Saache dren, wi de Addräße för de Metmaacher ier e-mail un de verschlößelte Paßwööter un de vershtoche un de fottjeschmeße Sigge un ander Saache ussem Wiki, di mer nit öffentlesch maache darref. + +Donn Ding Daatebangk et beß janz woh anders hen, noh /var/lib/mediawiki/\'\'wikiname\'\' för e Beishpell.', + 'config-oracle-def-ts' => 'Tabälleroum för der Shtandattjebruch:', + 'config-oracle-temp-ts' => 'Tabälleroum för der Jebruch zweschedorsh:', + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Oracle', + 'config-support-info' => 'MediaWiki kann met heh dä Daatebangk_Süßteeme zosamme jonn: + +$1 + +Wann dat Daatebangk_Süßteem, wat De nämme wells, onge nit dobei es, dann donn desch aan di Aanleidonge hallde, di bovve verlengk sen, öm et op Dingem ẞööver singem Süßteem müjjelesh ze maache, se aan et Loufe ze krijje.', + 'config-support-mysql' => '* $1 es dat vum MediaWiki et eets ongershtöz Daatebangksüßteem ([http://www.php.net/manual/de/mysql.installation.php Aanleidung för et Övversäze un Enreeschte von PHP met MySQL dobei, op Deutsch])', + 'config-support-postgres' => '* $1 es e bikannt Daatebangksüßteem met offe Quälltäxde, un en och en Wahl nävve MySQL ([http://www.php.net/manual/de/pgsql.installation.php Aanleidung för et Övversäze un Enreeschte von PHP met PostgreSQL dobei, op Deutsch]) Et sinn_er ävver paa klein Fählershe bekannt, um kunne dat em Momang för et reschtijje Werke nit emfähle.', + 'config-support-sqlite' => '* $1 es e eijfach Daatebangksüßteem, wat joot ongershtöz weed. ([http://www.php.net/manual/de/pdo.installation.php Aanleidong för et Övversäze un Enreeschte von PHP met SQLite dobei, op Deutsch])', + 'config-support-oracle' => '* $1 es e jeschäfflesch Daatebangksüßteem för Ferme. ([http://www.php.net/manual/de/oci8.installation.php Aanleidong för et Övversäze un Enreeschte von PHP met OCI8 dobei, op Deutsch])', + 'config-header-mysql' => 'De Enshtällunge för de MySQL Daatebangk', + 'config-header-postgres' => 'De Enshtällunge för de PostgreSQL Daatebangk', + 'config-header-sqlite' => 'De Enshtällunge för de SQLite Daatebangk', + 'config-header-oracle' => 'De Enshtällunge för de Oracle Daatebangk', + 'config-invalid-db-type' => 'Dat es en onjöltijje Zoot Daatebangk.', + 'config-missing-db-name' => 'Do moß jät enjävve för dä Name vun dä Daatebangk.', + 'config-missing-db-host' => 'Do moß jät enjävve för dä Name vun däm Rääschner met dä Daatebangk.', + 'config-missing-db-server-oracle' => 'Do moß jät enjävve för dä Daatebangk ier TNS.', + 'config-invalid-db-server-oracle' => 'Dä Daatebangk ier TNS kann nit „$1“ sin, dat es esu nit jöltesch. +Döh dörve bloß ASCII Boochshtaabe (a-z, A-Z), Zahle (0-9), Ongerstreshe (_), un Punkte (.) dren vörkumme.', + 'config-invalid-db-name' => 'Dä Daatebangk iere Name kann nit „$1“ sin, dä es esu nit jöltesch. +Döh dörve bloß ASCII Boochshtaabe (a-z, A-Z), Zahle (0-9), Ongerstresh (_), un Bendeshtresh (-) dren vörkumme.', + 'config-invalid-db-prefix' => 'Dä Vörsaz för de Name vun de Tabälle en de Daatebangk kann nit „$1“ sin, dä es esu nit jöltesch. +Döh dörve bloß ASCII Boochshtaabe (a-z, A-Z), Zahle (0-9), Ongerstreshe (_), un Bendeshtreshe (-) dren vörkumme.', + 'config-connection-error' => '$1. + +Donn de Name för dä Rääschner, vun däm Aanwender för dä Zohjref op de Daatebangk, un et Paßwoot prööfe, repareere, un dann versöhg et norr_ens.', + 'config-invalid-schema' => 'Dat Schema för MediaWiki kann nit „$1“ sin, dä Name wöhr esu nit jöltesch. +Döh dörve bloß ASCII Boochshtaabe (a-z, A-Z), Zahle (0-9), un Ongerstreshe (_) dren vörkumme.', + 'config-db-sys-create-oracle' => 'Dat Projramm för MediaWiki opzesäze kann bloß SYSDBA bruche för ene neue Zohjang zor Daatebangk enzereeschte!', + 'config-db-sys-user-exists-oracle' => 'Dä Aanwender „$1“ för dä Zohjref op de Daatebangk jidd_et ald. SYSDBA kam_mer bloß bruche, för ene neue Zohjang enzereeschte!', + 'config-postgres-old' => 'Mer bruche PostgreSQL $1 udder neuer. Em Momang es PostgreSQL $2 aam Loufe.', + 'config-sqlite-name-help' => 'Söhk enen Name uß, dä Ding Wiki beschrief. +Donn kein Bendeschresch un Zweschräum en däm Name bruche. +Dä Name weed för der Dateiname för de SQLite Daatebangk jenumme.', + 'config-sqlite-parent-unwritable-group' => 'Mer kunnte dat Verzeischneß för de Daate, $1, nit enreeschte, weil dat Projramm fö dä Web_ẞööver en dat Verzeischneß doh drövver, $2, nix erin donn darref. + +Mer han dä Name vun däm Zohjang op et Süßteem eruß jefonge, onger dämm dat Web_ẞööver_Projramm läuf. Jez moß De bloß doför sorrje, dat dä en dat Verzeischneß $3 schrieve kann, öm heh wigger maache ze künne. +Ob enem Süßteem met Unix- oder Linux jeiht dat esu: +
    cd $2
    +mkdir $3
    +chgrp $4 $3
    +chmod g+w $3
    ', + 'config-sqlite-parent-unwritable-nogroup' => 'Mer kunnte dat Verzeischneß för de Daate, $1, nit enreeschte, weil dat Projramm fö dä Web_ẞööver en dat Verzeischneß doh drövver, $2, nix erin donn darref. + +Mer han dä Name vun däm Zohjang op et Süßteem nit eruß fenge künne, onger dämm dat Web_ẞööver_Projramm läuf. Jez moß De bloß doför sorrje, dat dä en dat Verzeischneß $3 schrieve kann, öm heh wigger maache ze künne. Wann De dä Name och nit weiß, maach, dat jeeder_ein doh schrieve kann. +Ob enem Süßteem met Unix- oder Linux jeiht dat esu: +
    cd $2
    +mkdir $3
    +chmod a+w $3
    ', + 'config-sqlite-mkdir-error' => 'Ene Fähler es opjetrodde beim Aanlääje vum Daate_Verzeishneß „$1“. +Don dä Plaz för et Shpeishere prööfe un Repareere, dann versöhg et norr_ens.', + 'config-sqlite-dir-unwritable' => 'Mer künne nit en dat Verzeishneß „$1“ schrieeve +Donn dohvun de Zohjreffs_Rääschde esu verändere, dat der Webßööver doh dren schrieeve kann, un dann versöhg et norr_ens.', + 'config-sqlite-connection-error' => '$1. + +Donn onge dat Verzeishnes un der Name vun der Daatebangk prööfe un repareere, un dann versöhg_et norr-ens.', + 'config-sqlite-readonly' => 'En di Dattei $1 künne mer nit schrieve.', + 'config-sqlite-cant-create-db' => 'Mer kunnte di Dattei $1 för de Daatebangk nit aanlääje.', + 'config-sqlite-fts3-downgrade' => 'Dat PHP heh hät kein Ongershtözong för FTS3, dröm donn mer de Daatebangktabälle eronger shtoofe.', + 'config-can-upgrade' => 'Et sinn-er ald Daatebangktabelle vum MediaWiki en dä Daatebangk. +Öm di op der Shtand vum MediaWiki $1 ze bränge, donn jäz op „{{int:config-continue}}“ klecke.', + 'config-upgrade-done' => "Alles es jäz om neue Shtand. + +Mer kann dat Wiki jäz [\$1 bruche]. + +Wann De Ding Dattei LocalSettings.php neu schrieve wells, donn onge op dä Knopp klicke. +Dat dom_mer ävver '''nit vörschlonn'''em Jääjedeil, ußer, wann et Probleme mem Wiki jitt.", + 'config-upgrade-done-no-regenerate' => 'Alles es jäz om neue Shtand. + +Mer kann dat Wiki jäz [$1 bruche].', + 'config-regenerate' => 'Donn de Dattei LocalSettings.php neu opsäze →', + 'config-show-table-status' => 'Et Kommando SHOW TABLE STATUS aan de Daatebangk es donävve jejange!', + 'config-unknown-collation' => "'''Opjepaß:''' De Daatabangk deiht en onbikannte Reijefollsch bruche, för Booshtaabe un Zeishe ze verjliishe un ze zotteere.", + 'config-db-web-account' => 'Dä Zohjang zor Daatebangk fö et Wiki', + 'config-db-web-help' => 'Donn ene Name un e Paßwoot för der Zohjang zor Daatebangk för et Wiki em nomaale Bedrief aanjävve.', + 'config-db-web-account-same' => 'Donn dersällve Zohjang nämme, wi heh beim Opsäze.', + 'config-db-web-create' => 'Donn dä Zohjang aanlääje, wann dä noch nit doh es.', + 'config-db-web-no-create-privs' => 'Dä Zohjang för et Opsäze es nit berääschtesch, ene ander Zohjan enzereeschte. +Dä aanjejovve Zohjang för der Nomaalbedrief moß dröm schunn enjersht sen!', + 'config-mysql-engine' => 'De Zoot udder et Fommaat vun de Tabälle:', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-engine-help' => "'''InnoDB''' es fö jewöhnlesch et beß, weil vill Zohjreffe op eijmohl joot ongershtöz wääde. + +'''MyISAM''' es flöcker op Rääschnere met bloß einem Minsch draan, un bei Wikis, di mer bloß lässe un nit schrieeve kann. +MyISAM-Daatebangke han em Schnett mieh Fähler un jon flöcker kappott, wi InnoDB-Daatebangke.", + 'config-mysql-charset' => 'Dä Daatebangk iere Zeishesaz:', + 'config-mysql-binary' => 'binär', + 'config-mysql-utf8' => 'UTF-8', + 'config-mysql-charset-help' => "Beim Shpeishere em '''binäre Fomaat''' deiht MediaWiki de Täxte, di em UTF-8 Fommaat kumme, en dä Daatebangk en binär kodeerte Daatefälder faßhallde. +Dat es flöcker un spaasaamer wi et UTF-8 Fommaat vum MySQL un määd et müjjelesch, all un jeedes Unicode-Zeishe met faßzehallde. + +Beim Shpeishere em '''UTF-8 Fomaat''' deiht et MySQL der Zeishesaz un de Kodeerung vun dä Daate känne, un kann se akeraat aanzeije un ömwandelle, +allerdengs künne kein Zeishe ußerhalv vum [http://de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke jrundlääje Knubbel för vill Shprooche (Basic Multilingual Plane — BMP)] afjeshpeishert wääde.", + 'config-site-name' => 'Däm Wiki singe Name:', + 'config-site-name-help' => 'Dä douch em Tittel vun de Brauserfinstere un aan ätlije andere Shtälle op.', + 'config-site-name-blank' => 'Donn ene Name för di Sait aanjävve.', + 'config-project-namespace' => 'Dä Name för et Appachtemang övver et Projäk:', + 'config-ns-generic' => 'Projäk', + 'config-ns-site-name' => 'Et sällve wi däm Wiki singe Name: $1', + 'config-ns-other' => 'Andere (jiff aan wälshe)', + 'config-ns-other-default' => 'MingWiki', + 'config-project-namespace-help' => "Noh dämm Vörbeld vun de Wikipeedija, donn vill Wikis dänne ier Sigge övver et Wiki un sing Rääjelle vun dä Sigge mem Enhald vum Wiki tränne, un en enem extra Appachtemang för et „'''Projäk'''“ afflääje. +Sigge en däm Appachtemang fange all med enem beshtemmpte Vörsaz aan, däm Name vum Appachtemang, un dä moß De heh faßlääje. +Dä Name kann beshtemmpte Zeiche nit enthallde, wi „#“ un „:“ un et es Tradizjuhn, dat hä vum Name vum Wiki her kütt.", + 'config-ns-invalid' => 'Dat aanjejovve Appachtemang „$1“ es nit jöltesch. +Nemm ene andere Name för däm Wiki sing eije Appachtemang.', + 'config-ns-conflict' => 'Dat aanjejovve Appachtemang „$1“ kütt ald als Standatt-Appachtemang em MediaWiki vör. +Nemm ene andere Name för däm Wiki sing eije Appachtemang.', + 'config-admin-box' => 'Der Zohjang för der eezte Wiki_Köbes', + 'config-admin-name' => 'Metmaacher_Name:', + 'config-admin-password' => 'Et Paßwoot:', + 'config-admin-password-confirm' => 'Norrens dat Paßwoot:', + 'config-admin-help' => 'Jif Dinge leevste Name als Metmaacher för Desch aan, för e Beishpell „Schmitzens Pitter“ +— Dat weed dä Name wääde, met dämm De Desch enlogge deihs.', + 'config-admin-name-blank' => 'Jiv ene Metmaacher_Name en för dä Wiki-Köbes.', + 'config-admin-name-invalid' => '„$1“ es keine jöltijje Metmaacher_Name. +Jiv ene joode Name en!', + 'config-admin-password-blank' => 'Do mos_e Paßwoot för dä Wiki_Köbes aanjävve!', + 'config-admin-password-same' => 'Dat Paßwoot un dä Name dörve nit ejaal sin!', + 'config-admin-password-mismatch' => 'Di Paßwööter sin ongerscheidlesh!', + 'config-admin-email' => 'Addräß för de e-mail:', + 'config-admin-email-help' => 'Jiv heh di Adräß för de e-mail aan, woh De e-mail vun ander Metmaacher uss_em Wiki hen krijje wells, di et Der müjjelesh määt, Ding Paßwoot automatetsch truusche ze lohße, un woh Nohreeshte övver veränderte Sigge op Dinge Oppaßleß hen jescheck wääde sulle. +De kanns dat Fäld ävver och läddesch lohße.', + 'config-admin-error-user' => 'Beim Enreeshte vum Zohjang för dä Wiki_Köbes „$1“ es ene Fähler em Wiki opjetrodde.', + 'config-admin-error-password' => 'Beim Paßwoot-Säze för dä Wiki_Köbes „$1“ es ene Fähler em Wiki opjetrodde.:
    $2
    ', + 'config-admin-error-bademail' => 'Do häs_en onjöltijje Addräß för de e-mail aanjejovve.', + 'config-subscribe' => 'Donn de [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce e-mail-Leß met de Aanköndijunge vum MediaWiki] abonnere.', + 'config-subscribe-help' => 'Do kumme bloß winnish Meddeilunge un di jonn övver neu Versiohne vom MediaWiki un weeshtejje Saache vun däm sing Sesherheit. +Do sullts se abbonneere, un Ding MediWiki_Projramme op der neue Shtand bränge, wann neu Version eruß kumme.', + 'config-almost-done' => 'Do bes beinah dorsh! +Do künnts jez der Räß vun de einzel Enshtellunge övverjonn, un et Wiki tiräktemang fäädesch opsäze.', + 'config-optional-continue' => 'Wells De noch mieh Frore jeshtallt krijje un noch mieh Enshtällunge maache?', + 'config-optional-skip' => 'Nä, lohß dä Ömshtand, donn eifarr_et Wiki opsäze.', + 'config-profile' => 'Enshtällunge för de Metmaacher ier Rääschte:', + 'config-profile-wiki' => 'E tradizjonäll offe Wiki', + 'config-profile-no-anon' => 'Schriever möße enlogge', + 'config-profile-fishbowl' => 'Bloß ußdröcklesch zohjelohße Schriever', + 'config-profile-private' => 'E jeschloße Privat_Wiki', + 'config-profile-help' => "Wikis loufe et beß, wam_mer esu vill Lück wi müjjelesch draan metmaache un schrieve löht. +Met MediaWiki es et ejfach, de neuste Änderunge ze beloore un wat ahnungslose udder fiese Lück kapott jemaat han wider retuur ze maache. + +Bloß, mänsh eine häd_eruß jefonge, dat mer MediaWiki jood en en jruuße Zahl ongerscheidlijje Rolle bruche kann, un nit emmer es et leish, ene vum onverfälschte Wiki_Wääsch ze övverzeuje. +Esu häß De de Wahl: + +'''{{int:config-profile-wiki}}''' löht jeder_ein metschrieve, och ohne enzelogge. + +'''{{int:config-profile-no-anon}}''', dat sorsh för mieh seeshbaa Verantwootlishkeite, künnt ävver zohfällije Methellefer verschrecke. + +'''{{int:config-profile-fishbowl}}''' löht nor de ußjesöhk Metmaacher schrieve, ävver de janze Öffentleshkeit kann et lässe un süht och de ällder Versione, un wat wää wann draan jedonn hät. + +'''{{int:config-profile-private}}''' kann nur lässe, wäh en et Wiki zohjelohße es, un desellve Jropp kann uch schrieve. + +Noch ander un un opwändijere Enshtellunge för de Rääschte sin müjjelesch, wann et Wiki ens aam Loufe es. Loor Der doför de [http://www.mediawiki.org/wiki/Manual:User_rights zopaß Hölp em Handbooch] aan.", + 'config-license' => 'Urhävverrääsch un Lizänz:', + 'config-license-none' => 'Kein Fooßreih övver de Lizänz', + 'config-license-cc-by-sa' => 'Creative Commons Der Name moß jenannt sin, et Wiggerjävve es zohjelohße onger dersellve Bedengunge', + 'config-license-cc-by-nc-sa' => 'Creative Commons Nit för e Jeschäff ze maache, et Wiggerjävve es zohjelohße unger dersellve Bedengunge', + 'config-license-cc-0' => 'Creative Commons „Noll“', + 'config-license-gfdl-old' => 'De GNU-Lizänz för frei Dokemäntazjuhne Version 1.2', + 'config-license-gfdl-current' => 'De GNU-Lizänz för frei Dokemäntazjuhne, Version 1.3 udder en späädere', + 'config-license-pd' => 'Allmende (jemeinfrei, public domain)', + 'config-license-cc-choose' => 'En Creative Commons Lizänz, sellver ußjesöhk:', + 'config-license-help' => "Ättlijje öffentleje Wikis donn iehr Beidrääsh onger en [http://freedomdefined.org/Definition frei Lizänz] shtelle. +Dat hellef, e Jeföhl vun Jemeinsamkeid opzeboue, un op lange Seesh emmer wider Beidrääsch ze krijje. +Dat es nit onbedengk nüüdesh för e Jeschäffs- udder Privaat_Wiki. + +Wä Stöcke uß de Wikipedia bruche well, un han well, dat de Wikipedia uss_em eije Wiki jät övvernämme kann, sullt mer „'''Creative Commons, dem Schriever singe Name moß jenannt wääde, un Wiggerjävve zoh dersellve Bedengunge es zohjelohße'''“ ußwähle. + +De su jenannte '''GNU Free Documentation License''' (de freije Lizänz för Dokemäntazjuhne vun dä GNU) sen de ahle Lizänzbedenonge vun de Wikipedia. Se es emmer noch in Odenong un jöltesch, ävver se hädd e paa Eijeschaffte, die et Wiggerjävve, et widder Verwände un et Ußlääje schwieeresch maache.", + 'config-email-settings' => 'Enschtellunge för de e-mail', + 'config-enable-email' => 'De e-mail noh druße zohlohße', + 'config-enable-email-help' => 'Sulle e-mails zohjelohße sin, moß mer, domet et noher flupp, de [http://www.php.net/manual/en/mail.configuration.php Enschtellunge em PHP för de e-mails] zopaß jemaat han. +Wann kein e-mails nüüdesch sin, kam_mer se heh afschallde.', + 'config-email-user' => 'e-mails zwesche de Metmaacher zohlohße', + 'config-email-user-help' => 'Määt et müjjelesch, dat sesch de Metmaacher jääjesiggesch e-mails schecke künne, wann se dat en iehre eije Enschtellunge och enjeschalldt han.', + 'config-email-usertalk' => 'e-mails mem Bescheid zohlohße, dat einem sing Klaafsigg verändert woodt', + 'config-email-usertalk-help' => 'Maach et müjjelesch, dat Metmaaacher en iere Enstellunge e-mails mem Bescheid zohlohße, dat einem sing Klaafsigg verändert woodt.', + 'config-email-watchlist' => 'Nohreeschte övver Änderonge aan Sigg op de Opaßleßte zohlohße', + 'config-email-watchlist-help' => 'Lohß Metmaacher Nohreeshte övver de Sigge op dänne iehr Oppaßleß krijje, wann se et en iehre Enschtellonge ußjewählt han.', + 'config-email-auth' => 'Donn de Övverprööfung för Zohjangsberääschtejunge övver de e-mail zohlohße', + 'config-email-auth-help' => 'Wann dat aanjeschald es, möße Metmaacher, di iehr Adräß för de e-mail neu aanjävve udder ändere, di Addräß övver ene Lengk beschtäätejje, dä se met de e-mail jescheck krijje. +Bloß aan esu beschtääteschte Adräße deiht et Wiki e-mails schecke, Di künne vun annder Metmaachere kumme, udder vum Wiki sellver, wann en Sigg en däm Metmaacher singe Oppaßleß verändert woode es. +Mer \'\'\'schlonn vör, dat aanzeschallde\'\'\' för öffentlesch Wikis, weil sönß zoh leisch Driß mem Wiki singe e-mail jemaat wääde künnt.', + 'config-email-sender' => 'De Adräß för de Antwoote op e-mails:', + 'config-email-sender-help' => 'Jiff de Adräß för de e-mail en, woh Antwoote ob em Wiki singe e-mails hen jonn sulle. +Dat es och de Adräß, woh de e-mails met Fählermäldonge hen jon. +Vill ẞöövere för de e-mail welle winnischßdens ene jöltijje Domain en dä Adräß han.', + 'config-upload-settings' => 'Belder un Datteie huh laade', + 'config-upload-enable' => 'Belder un Datteie huh laade zohlohße', + 'config-upload-help' => 'Datteije huh ze laade künnt e Risiko för dem ẞööver singe Sescherheit sin. +Mieh doh drövver kam_mer em [http://www.mediawiki.org/wiki/Manual:Security Kapitel övver de Sescherheit] em Handbooch lässe. + +Öm et Huhlaade zohzelohße donn de Rääschde för der Zohjreff op dat Ongerverzeischneß images em MediaWiki singem Houpverzeischneß esu enshtälle, dat et Webßööverprojramm doh Datteije un Verzeischneße eren schrieve kann. +Donoh donn heh di Saach zohlohße.', + 'config-upload-deleted' => 'Dat Verzeishneß för fottjeschmeße Datteije:', + 'config-upload-deleted-help' => 'Söhk e Verzeijschneß uß för de fottjeschmeße Datteije vum Wiki dren afzelääje. +Et bäß es, wam_mer vum world wide web doh nit drahn kumme kann.', + 'config-logo' => 'Dem Wiki singem Logo sing URL:', + 'config-logo-help' => 'De Schtandart_Bedeen_Bovverfläsch vum MediaWiki hät e Logo bovve en der Eck met 135x160 Pixele. +Donn e zopaß Logo huh laade, un donn däm sing URL heh endraare. + +Wells De kei Logo han, draach heh nix en.', + 'config-instantcommons' => 'Donn InstantCommons zohlohße.', + 'config-instantcommons-help' => '[http://www.mediawiki.org/wiki/InstantCommons InstantCommons] es en Eijeschaff, di et för Wikis müjjelesch määt, Belder, Tondatteie un ander Meedijedatteie enzebenge, di op dä Webßait vun de [http://commons.wikimedia.org/ Wikimedia Commons] ongerjebraat sin. Öm dat noze ze künne, moß dä ẞööver vum MediaWiki en Verbendung nohm Internet opnämme künne. + +Mieh Aanjaabe doh drövver un en Aanleidung, wi mer och ander Wikis ußer de Wikimedia Commons doför enreeschte kann, fengk mer em [http://mediawiki.org/wiki/Manual:$wgForeignFileRepos Handbooch].', + 'config-cc-error' => 'Et Ußsöhke övver de Creative Commons iehr Projramm zum Lizänzbeshtemme hät nix jebraat. +Donn de Lizänz sellver beshtemme.', + 'config-cc-again' => 'Noch ens neu ußsöhke …', + 'config-cc-not-chosen' => 'Söhk uß, wat för en Lizänz vun de Creative Commons De han wells, un donn dann op „proceed“ klecke.', + 'config-advanced-settings' => 'Fottjeschredde Enshtellunge', + 'config-cache-options' => 'Enshtällunge för et Faßhallde vun Objäkte em Zweschsheisher:', + 'config-cache-help' => 'Objäkte em Zwescheshpeisher faßhallde, dat heiß öff jebruchte Daate en der cache donn, bruche mer, öm MediaWiki flöcker ze maache, +Meddlere un jruuße Wiki-ẞaits sullte dat onbedengk ußnoze, un och bei klein Wikis weed mer et jood merke.', + 'config-cache-none' => 'Keine Zweschshpeijsher (Et jeid_em Wiki nix verloore, ußer velleish Schnälleshkeid wann vill loss es)', + 'config-cache-accel' => 'Ene Objäkcache vum PHP (APC, eAccelerator, XCache, udder WinCache)', + 'config-cache-memcached' => 'Donn der memcached ẞööver nämme (Määt extra Enshtellunge un Opsäze nüüdesch)', + 'config-memcached-servers' => 'De memcached ßöövere:', + 'config-memcached-help' => 'Donn de Leß aanhjävve, met de IP-Addräße för der memcached ẞööver ze bruche. +Se sullte ein pro Reih opjeschrevve sin, un en Pooz (port) ier Nommer han, För e Beishpell, esu: + 127.0.0.1:11211 + 192.168.1.25:1234', + 'config-memcache-needservers' => 'Do häss der memcached als Dinge Zoot vun Zwescheshpeijscher aanjejovve, ävver nit eine ẞööver doför.', + 'config-memcache-badip' => 'Do häss en onjöltijje IP-Addräß för der memcached ẞööver aanjejovve: $1.', + 'config-memcache-noport' => 'Do has kein Pooz (port) Nommer aanjejovve för mem memcached ẞööver ze bruche: $1. +Wann De di Nommer nit weiß, der Shtandatt es 11211.', + 'config-memcache-badport' => 'Dem memcached ẞööver singe Pooz (port) Nommere sullte zwesche $1 un $2 sin.', + 'config-extensions' => 'Projramm-Zosätz (extensions)', + 'config-extensions-help' => 'Di bovve opjeleß Zohsazprojramme för et MediaWiki sin em Verzeischneß ./extensions ald ze fenge. + +Do kann se heh un jez aanschallde, ävver se künnte noch zohsäzlesch Enshtellunge bruche.', + 'config-install-alreadydone' => "'''Opjepaß:''' +Et sühd esu uß, wi wann De MediaWiki ald enshtalleet hätß, un wöhrs aam Versöhke, dat norr_ens ze donn. +Jang wigger op de näähßte Sigg.", + 'config-install-begin' => 'Wann De op „{{int:config-continue}}“ klecks, jeiht de Enshtallazjuhn vum MediaWiki loßß. +Wann De noch Änderonge maache wells, dann kleck op „{{int:config-back}}“.', + 'config-install-step-done' => 'jedonn', + 'config-install-step-failed' => 'donävve jejange', + 'config-install-extensions' => 'Zohsazprojramme enjeschloße', + 'config-install-database' => 'Ben de Daatebangk aam ennreeschte.', + 'config-install-pg-schema-not-exist' => 'Dat Scheema för PostgreSQL es nit doh.', + 'config-install-pg-schema-failed' => 'Et Tabälle-Opsäze es donävve jejange. +Donn doför sorrje, dat dä Daatebangk-Aanwänder „$1“ en dämm Daatebangkscheema „$2“ schrieve kann.', + 'config-install-pg-commit' => 'Ben de Änderonge aam ennbränge.', + 'config-install-pg-plpgsql' => 'Ben noh dä Daatebangkshprooch PL/pgSQL aam söhke.', + 'config-pg-no-plpgsql' => 'Do moß de Daatebangkshprooch PL/pgSQL en dä Daatebangk $1 enreeschte.', + 'config-pg-no-create-privs' => 'Dä Daatebangk-Aanwänder för et Enreeschte hät nit jenooch Rääschde, öm ene andere Daatebangk-Aanwänder en dä Daatebangk aanzelääje.', + 'config-install-user' => 'Ben unse Daatebangk-Aanwänder en de Daatebangk am aanlääje.', + 'config-install-user-alreadyexists' => 'Dä Aanwender „$1“ för dä Zohjref op de Daatebangk kann nit aanjelaat wääde, et jidd_en alld.', + 'config-install-user-create-failed' => 'Dä Aanwender „$1“ för dä Zohjref op de Daatebangk kunnt nit aanjelaat wääde, wäje: $2', + 'config-install-user-grant-failed' => 'Däm Daatebangk-Aanwänder sing Beräschtijunge ze säze däät nit fluppe wääje: $2', + 'config-install-tables' => 'Ben de Daatebangk-Tabälle aam aanlääje.', + 'config-install-tables-exist' => "'''Opjepaß''': Et schingk, dem MediaWiki sing Tabälle sin alt doh. +Doh dom_mer nix aanlääje.", + 'config-install-tables-failed' => "'''Fähler''': De Tabälle kunnte nit aanjelaat wääde, wääje: $1", + 'config-install-interwiki' => 'Ben de Engerwiki-Tabäll met de shtandattmääßejje Daate aam fölle.', + 'config-install-interwiki-list' => 'Mer kunnte de Dattei interwiki.list nit fenge.', + 'config-install-interwiki-exists' => "'''Opjepaß''': En der Engewiki-Tabäll schingk alt jät dren ze shtonn. +Doh dom_mer nix dobei.", + 'config-install-stats' => 'De Shtatestek-Zahle wääde op Aanfang jeshtallt.', + 'config-install-keys' => 'Jeheime Schlößel wääde opjebout.', + 'config-insecure-keys' => "'''Opjepaß:''' {{PLURAL:$2|Ene jeheime Schlößel|Jeheim Schlößele|Keine jeheime Schlößel}} ($1) {{PLURAL:$2|es|sin|es}} automattesch aanjelaat woode. {{PLURAL:$2|Dä es|Di sin|Hä es}} ävver nit onbedengk janz sescher. Övverlääsch Der, {{PLURAL:$2|dä|di|en}} norr_ens vun Hand ze ändere.", + 'config-install-sysop' => 'Dä Zohjang för der Wiki-Köbes weed aanjelaat.', + 'config-install-subscribe-fail' => 'Mer künne de e-mail-Leß mediawiki-announce nit abonneere.', + 'config-install-mainpage' => 'Ben de Houpsigg med enem shtandatmääßeje Enhald aam aanlääje', + 'config-install-extension-tables' => 'Ben Datebangk-Tabälle för de Zohsazprojramme aam ennreschte', + 'config-install-mainpage-failed' => 'Kunnt de Houpsigg nit afshpeishere: $1', + 'config-install-done' => "'''Jlöckwonsch!''' +MediaWiki es jetz enstalleet. + +Et Projramm zom Enreeschte hät en Dattei LocalSettings.php aanjelaat. +Doh sin de Enstellunge vum Wiki dren. + +Do weeß se eronge laade möße un dann en dem Wiki sing Aanfangsverzeishnes donn möße, et sellve Verzeisneß, woh di Dattei index.php dren litt. Dat Erongerlaade sullt automattesch aanjefange han. + +Wann domet jet nit jeflupp hät, udder De di Dattei norr_ens han wells, donn op dä Lengk heh dronger klecke: + +\$3 + +'''Opjepaß''': Wann De dat jez nit deihß es Alles verschött wat De jemaat häs, weil di Dattei fott es en däm Momang, woh heh dat Projamm aam Engk es. + +Wann De mem Ronger- un widder Huhlaade fäädesh bes, kanns De '''[\$2 en Ding Wiki jonn]'''.", + 'config-download-localsettings' => 'Donn de Dattei LocalSettings.php eronger laade', + 'config-help' => 'Hölp', +); + +/** Kurdish (Latin) (Kurdî (Latin)) + * @author George Animal + */ +$messages['ku-latn'] = array( + 'config-page-language' => 'Ziman', + 'config-page-name' => 'Nav', +); + +/** Luxembourgish (Lëtzebuergesch) + * @author Robby + */ +$messages['lb'] = array( + 'config-desc' => 'Den Installatiounsprogramm vu MediaWiki', + 'config-title' => 'MediaWiki $1 Installatioun', + 'config-information' => 'Informatioun', + 'config-localsettings-upgrade' => "'''Opgepasst''': E Fichier LocalSettings.php gouf fonnt. +Är Software kann aktualiséiert ginn, setzt w.e.g. de Wäert vum \$wgUpgradeKey an d'Këscht. +Dir fannt en am LocalSettings.php.", + 'config-localsettings-key' => 'Aktualisatiounsschlëssel:', + 'config-localsettings-badkey' => 'De Schlëssel deen Dir aginn hutt ass net korrekt', + 'config-session-error' => 'Feeler beim Starte vun der Sessioun: $1', + 'config-your-language' => 'Är Sprooch', + 'config-your-language-help' => 'Sicht déi Sprooch eraus déi Dir während der Installatioun benotze wëllt', + 'config-wiki-language' => 'Sprooch vun der Wiki:', + 'config-wiki-language-help' => "Sicht d'Sprooch eraus an där d'Wiki haaptsächlech geschriwwe gëtt.", + 'config-back' => '← Zréck', + 'config-continue' => 'Weider →', + 'config-page-language' => 'Sprooch', + 'config-page-welcome' => 'Wëllkomm bäi MediaWiki!', + 'config-page-dbconnect' => 'Mat der Datebank verbannen', + 'config-page-upgrade' => 'Eng Installatioun déi besteet aktualiséieren', + 'config-page-dbsettings' => 'Astellunge vun der Datebank', + 'config-page-name' => 'Numm', + 'config-page-options' => 'Optiounen', + 'config-page-install' => 'Installéieren', + 'config-page-complete' => 'Fäerdeg!', + 'config-page-restart' => 'Installatioun neistarten', + 'config-page-readme' => 'Liest dëst', + 'config-page-releasenotes' => 'Informatiounen zur Versioun', + 'config-page-copying' => 'Kopéieren', + 'config-page-upgradedoc' => 'Aktualiséieren', + 'config-page-existingwiki' => 'Wiki déi et gëtt', + 'config-help-restart' => 'Wëllt dir all gespäichert Donnéeë läschen déi dir bis elo aginn hutt an den Installatiounsprozess nei starten?', + 'config-restart' => 'Jo, neistarten', + 'config-welcome' => "=== Iwwerpréifung vum Installatiounsenvironnement === +Et gi grondsätzlech Iwwerpréifunge gemaach fir ze kucken ob den Environnment gëeegent ass fir MediaWiki z'installéieren. +Dir sollt d'Resultater vun dëser Iwwerpréifung ugi wann Dir während der Installatioun Hëllef braucht.", + 'config-sidebar' => '* [http://www.mediawiki.org MediaWiki Haaptsäit] +* [http://www.mediawiki.org/wiki/Help:Contents Benotzerguide] +* [http://www.mediawiki.org/wiki/Manual:Contents Guide fir Administrateuren] +* [http://www.mediawiki.org/wiki/Manual:FAQ FAQ] +---- +* Liest dëst +* Informatioune vun der aktueller Versioun +* Lizenzbedingungen +* Aktualisatioun', + 'config-env-good' => 'Den Environement gouf nogekuckt. +Dir kënnt MediaWiki installéieren.', + 'config-env-bad' => 'Den Environnement gouf iwwerpréift. +Dir kënnt MediWiki net installéieren.', + 'config-env-php' => 'PHP $1 ass installéiert.', + 'config-unicode-using-utf8' => "Fir d'Unicode-Normalisatioun gëtt dem Brion Vibber säin utf8_normalize.so benotzt.", + 'config-no-db' => 'Et konnt kee passenden Datebank-Driver fonnt ginn!', + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] ass installéiert', + 'config-apc' => '[http://www.php.net/apc APC] ass installéiert', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] ass installéiert', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] ass installéiert', + 'config-diff3-bad' => 'GNU diff3 gouf net fonnt.', + 'config-no-uri' => "'''Feeler:''' Déi aktuell URI konnt net festgestallt ginn. +Installatioun ofgebrach.", + 'config-db-type' => 'Datebanktyp:', + 'config-db-host-oracle' => 'Datebank-TNS:', + 'config-db-wiki-settings' => 'Dës Wiki identifizéieren', + 'config-db-name' => 'Numm vun der Datebank:', + 'config-db-name-oracle' => 'Datebankschema:', + 'config-db-install-account' => "Benotzerkont fir d'Installatioun", + 'config-db-username' => 'Datebank-Benotzernumm:', + 'config-db-password' => 'Passwuert vun der Datebank:', + 'config-db-install-help' => 'Gitt de Benotzernumm an Passwuert an dat wàhrend der Installatioun benotzt gëtt fir sech mat der Datebank ze verbannen.', + 'config-db-account-lock' => 'De selwechte Benotzernumm a Passwuert fir déi normal Operatioune benotzen', + 'config-db-wiki-account' => 'Benotzerkont fir normal Operatiounen', + 'config-db-wiki-help' => "Gitt de Benotzernumm an d'Passwuert an dat benotzt wäert gi fir sech bei den normale Wiki-Operatiounen mat der Datebank ze connectéieren. +Wann et de Kont net gëtt, a wann den Installatiouns-Kont genuch Rechter huet, gëtt dëse Benotzerkont opgemaach mat dem Minimum vu Rechter déi gebraucht gi fir dës Wiki bedreiwen ze kënnen.", + 'config-db-charset' => 'Zeechesaz (character set) vun der Datebank', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binair', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-mysql-old' => 'MySQL $1 oder eng méi nei Versioun gëtt gebraucht, Dir hutt $2.', + 'config-db-port' => 'Port vun der Datebank:', + 'config-db-schema' => 'Schema fir MediaWiki', + 'config-db-schema-help' => "D'Schemaen hei driwwer si gewéinlech korrekt. +Ännert se nëmme wann Dir wësst datt et néideg ass.", + 'config-sqlite-dir' => 'Repertoire vun den SQLite-Donnéeën', + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Oracle', + 'config-header-mysql' => 'MySQL-Astellungen', + 'config-header-postgres' => 'PostgreSQL-Astellungen', + 'config-header-sqlite' => 'SQLite-Astellungen', + 'config-header-oracle' => 'Oracle-Astellungen', + 'config-invalid-db-type' => 'Net valabelen Datebank-Typ', + 'config-missing-db-name' => 'Dir musst en Numm fir de Wäert "Numm vun der Datebank" uginn', + 'config-missing-db-server-oracle' => 'Dir musst e Wäert fir "Datebank-TNS" uginn', + 'config-db-sys-user-exists-oracle' => 'De Benotzerkont "$1" gëtt et schonn. SYSDBA kann nëmme benotzt gi fir en neie Benotzerkont opzemaachen.', + 'config-postgres-old' => 'PostgreSQL $1 oder eng méi nei Versioun gëtt gebraucht, Dir hutt $2.', + 'config-sqlite-name-help' => 'Sicht en Numm deen Är wiki identifizéiert. +Benotzt keng Espacen a Bindestrécher. +E gëtt fir den Numm vum SQLite Date-Fichier benotzt.', + 'config-sqlite-readonly' => 'An de Fichier $1 Kann net geschriwwe ginn.', + 'config-sqlite-cant-create-db' => 'Den Datebank-Fichier $1 konnt net ugeluecht ginn.', + 'config-db-web-account' => 'Datebankkont fir den Accès iwwer de Web', + 'config-db-web-account-same' => 'Dee selwechte Kont wéi bei der Installatioun benotzen', + 'config-db-web-create' => 'De Kont uleeë wann et e net scho gëtt', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-binary' => 'binär', + 'config-mysql-utf8' => 'UTF-8', + 'config-site-name' => 'Numm vun der Wiki:', + 'config-site-name-help' => 'Dësen daucht an der Titelleescht vum Browser an op verschiddenen anere Plazen op.', + 'config-site-name-blank' => 'Gitt den Numm vum Site un.', + 'config-project-namespace' => 'Projet Nummraum:', + 'config-ns-generic' => 'Projet', + 'config-ns-site-name' => 'Deeselwechte wéi den Numm vun der Wiki: $1', + 'config-ns-other' => 'Anerer (spezifizéieren)', + 'config-ns-other-default' => 'MyWiki', + 'config-admin-box' => 'Administrateurs-Kont', + 'config-admin-name' => 'Ären Numm:', + 'config-admin-password' => 'Passwuert:', + 'config-admin-password-confirm' => 'Passwuert confirméieren:', + 'config-admin-name-blank' => 'Gitt e Benotzernumm fir den Administrateur an.', + 'config-admin-name-invalid' => 'De spezifizéierte Benotzernumm "$1" ass net valabel. +Spezifizéiert en anere Benotzernumm.', + 'config-admin-password-blank' => 'Gitt e Passwuert fir den Adminstateur-Kont an.', + 'config-admin-password-same' => "D'Passwuert däerf net dat selwecht si wéi de Benotzernumm.", + 'config-admin-password-mismatch' => 'Déi zwee Passwierder Déi dir aginn stëmmen net iwwerteneen.', + 'config-admin-email' => 'E-Mailadress:', + 'config-admin-error-user' => 'Interne Feeler beim uleeë vun engem Administrateur mam Numm "$1".', + 'config-admin-error-password' => 'Interne Feeler beim Setze vum Passwuert fir den Admin "$1":
    $2
    ', + 'config-admin-error-bademail' => 'Dir hutt eng E-Mailadress aginn déi net valabel ass', + 'config-subscribe' => "Sech op d'[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Ukënnegunge vun neie Versiounen] abonnéieren.", + 'config-almost-done' => "Dir sidd bal fäerdeg! +Dir kënnt elo déi Astellungen déi nach iwwreg sinn iwwersprangen an d'Wiki elo direkt installéieren.", + 'config-optional-continue' => 'Stellt mir méi Froen.', + 'config-optional-skip' => "Ech hunn es genuch, installéier just d'Wiki.", + 'config-profile' => 'Profil vun de Benotzerrechter:', + 'config-profile-wiki' => 'Traditionell Wiki', + 'config-profile-no-anon' => 'Uleeë vun engem Benotzerkont verlaangt', + 'config-profile-fishbowl' => 'Nëmmen autoriséiert Editeuren', + 'config-profile-private' => 'Privat Wiki', + 'config-license' => 'Copyright a Lizenz:', + 'config-license-none' => 'Keng Lizenz ënnen op der Säit', + 'config-license-pd' => 'Ëffentlechen Domaine', + 'config-email-settings' => 'E-Mail-Astellungen', + 'config-enable-email' => 'E-Mailen déi no bausse ginn aschalten', + 'config-email-user' => 'Benotzer-op-Benotzer E-Mail aschalten', + 'config-email-usertalk' => 'Benoriichtege bäi Ännerung vun der Benotzerdiskussiounssäit aschalten', + 'config-email-watchlist' => 'Benoriichtigung vun der Iwwerwaachungslëscht aschalten', + 'config-email-auth' => 'E-Mail-Authentifizéierung aschalten', + 'config-email-sender' => 'E-Mailadress fir Äntwerten:', + 'config-upload-settings' => 'Eropgeluede Biller a Fichieren', + 'config-upload-enable' => 'Eropluede vu Fichieren aschalten', + 'config-upload-deleted' => 'Repertoire fir geläschte Fichieren:', + 'config-logo' => 'URL vum Logo:', + 'config-cc-again' => 'Nach eng kéier eraussichen...', + 'config-advanced-settings' => 'Erweidert Astellungen', + 'config-extensions' => 'Erweiderungen', + 'config-install-step-done' => 'fäerdeg', + 'config-install-step-failed' => 'huet net fonctionnéiert', + 'config-install-extensions' => 'Mat den Ereiderungen', + 'config-install-database' => 'Datebank gëtt installéiert', + 'config-pg-no-plpgsql' => "Fir d'Datebank $1 muss d'Datebanksprooch PL/pgSQL installéiert ginn", + 'config-install-user' => 'Datebank Benotzer uleeën', + 'config-install-user-alreadyexists' => 'De Benotzer "$1" gëtt et schonn!', + 'config-install-user-create-failed' => 'D\'Opmaache vum Benotzer "$1" huet net fonctionnéiert: $2', + 'config-install-tables' => 'Tabelle ginn ugeluecht', + 'config-install-interwiki' => 'Standard Interwiki-Tabell gëtt ausgefëllt', + 'config-install-interwiki-list' => 'De Fichier interwiki.list gouf net fonnt.', + 'config-install-stats' => 'Initialisatioun vun de Statistiken', + 'config-install-keys' => 'Generéiere vum Geheimschlëssel', + 'config-install-sysop' => 'Administrateur Benotzerkont gëtt ugeluecht', +); + +/** Malagasy (Malagasy) + * @author Jagwar + */ +$messages['mg'] = array( + 'config-session-error' => 'Hadisoana teo am-panombohana ny fidirana : $1', + 'config-your-language' => 'Ny fiteninao :', + 'config-wiki-language' => "Fiteny ho ampiasain'ny wiki :", + 'config-back' => '← Miverina', + 'config-continue' => 'Manohy →', + 'config-page-language' => 'Fiteny', + 'config-page-welcome' => "Tonga soa eto amin'i MediaWiki !", + 'config-page-dbconnect' => "Hiditra eo amin'i banky angona", + 'config-page-name' => 'Anarana', + 'config-page-readme' => 'Vakio aho', + 'config-page-copying' => 'Hala-tahaka', + 'config-page-upgradedoc' => 'Fanavaozina', + 'config-page-existingwiki' => 'Wiki efa misy', + 'config-help-restart' => "Tianao hofafana avokoa ve ny data voaangona natsofokao ary hamerina ny fizotran'ny fametrahana ?", + 'config-restart' => 'Eny, avereno atao', + 'config-db-username' => "Anaram-pikamban'ny banky angona :", + 'config-db-password' => "Tenimiafin'ny banky angona :", + 'config-header-mysql' => "Parametatr'i MySQL", + 'config-header-sqlite' => "Parametatr'i SQLite", + 'config-header-oracle' => "Parametatr'i Oracle", + 'config-mysql-innodb' => 'innoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-ns-generic' => 'Tetikasa', + 'config-ns-other' => 'Hafa (lazao)', + 'config-admin-name' => 'Ny anaranao :', + 'config-admin-password' => 'Tenimiafina :', + 'config-admin-email' => 'Adiresy imailaka :', + 'config-profile-wiki' => 'Wiki tsotra', + 'config-profile-no-anon' => 'Mila mamorona kaonty', + 'config-profile-fishbowl' => 'Mpanova mahazo alalana ihany', + 'config-profile-private' => 'Wiki tsy sarababem-bahoaka', + 'config-license' => 'Zom-pamorona ary lisansa :', + 'config-license-none' => 'Tsy misy lisansa any an-tongom-pejy', + 'config-email-user' => 'Avela mifandefa imailaka ny mpikambana', + 'config-email-user-help' => "Hahafahan'ny mpikambana mifandefa imailaka raha omen'ny mpikambana alalana ao amin'ny safidiny.", + 'config-upload-deleted' => "Petra-drakitra ho an'ny rakitra voafafa :", + 'config-extensions' => 'Fanitarana', + 'config-install-step-done' => 'vita', + 'config-install-step-failed' => 'hadisoana', + 'config-install-user' => "Famoronana mpapiasan'ny banky angona", + 'config-install-tables' => 'Famoronana tabilao', + 'config-install-stats' => 'Fanombohana ny statistika', + 'config-install-keys' => 'Fanamboarana lakile miafina$', + 'config-help' => 'fanoroana', +); + +/** Macedonian (Македонски) + * @author Bjankuloski06 + */ +$messages['mk'] = array( + 'config-desc' => 'Инсталатор на МедијаВики', + 'config-title' => 'Инсталатор на МедијаВики $1', + 'config-information' => 'Информации', + 'config-localsettings-upgrade' => 'Востановена е податотека LocalSettings.php. +За да ја надградите инсталцијава, внесете ја вредноста на $wgUpgradeKey во полето подолу. +Тоа е го најдете во LocalSettings.php.', + 'config-localsettings-cli-upgrade' => 'Утврдено е присуството на податотеката „LocalSettings.php“. +За да ја надградите инсталацијата, пуштете ја „update.php“ наместо горенаведената.', + 'config-localsettings-key' => 'Надградбен клуч:', + 'config-localsettings-badkey' => 'Клучот што го наведовте е погрешен', + 'config-upgrade-key-missing' => 'Востановена е постоечка инсталација на МедијаВики. +За да ја надградите, вметнете го следниов ред на дното од вашата страница LocalSettings.php: + +$1', + 'config-localsettings-incomplete' => 'Постоечката страница LocalSettings.php е нецелосна. +Не е поставена променливата $1. +Изменете ја страницата LocalSettings.php така што ќе ѝ зададете вредност на променливата, па стиснете на „Продолжи“.', + 'config-localsettings-connection-error' => 'Се појави грешка при поврзувањето со базата користејќи ги поставките назначени во LocalSettings.php или AdminSettings.php. Исправете ги овие поставки и обидете се повторно. + +$1', + 'config-session-error' => 'Грешка при започнување на сесијата: $1', + 'config-session-expired' => 'Вашите сесиски податоци истекоа. +Поставките на сесиите траат $1. +Нивниот рок можете да го зголемите со задавање на session.gc_maxlifetime во php.ini. +Почнете ја инсталацијата одново.', + 'config-no-session' => 'Вашите сесиски податоци се изгубени! +Погледајте во php.ini дали session.save_path е поставен во правилна папка.', + 'config-your-language' => 'Вашиот јазик:', + 'config-your-language-help' => 'Одберете на кој јазик да се одвива инсталацијата.', + 'config-wiki-language' => 'Јазик на викито:', + 'config-wiki-language-help' => 'Одберете на кој јазик ќе бидат содржините на викито.', + 'config-back' => '← Назад', + 'config-continue' => 'Продолжи →', + 'config-page-language' => 'Јазик', + 'config-page-welcome' => 'Добредојдовте на МедијаВики!', + 'config-page-dbconnect' => 'Поврзување со базата', + 'config-page-upgrade' => 'Надградба на постоечката инсталација', + 'config-page-dbsettings' => 'Нагодувања на базата', + 'config-page-name' => 'Назив', + 'config-page-options' => 'Поставки', + 'config-page-install' => 'Инсталирај', + 'config-page-complete' => 'Готово!', + 'config-page-restart' => 'Пушти ја инсталацијата одново', + 'config-page-readme' => 'Прочитај ме', + 'config-page-releasenotes' => 'Белешки за изданието', + 'config-page-copying' => 'Копирање', + 'config-page-upgradedoc' => 'Надградба', + 'config-page-existingwiki' => 'Постоечко вики', + 'config-help-restart' => 'Дали сакате да ги исчистите сите зачувани податоци што ги внесовте и да ја започнете инсталацијата одново?', + 'config-restart' => 'Да, почни одново', + 'config-welcome' => '=== Environmental checks === +Се вршат основни проверки за да се востанови дали околината е погодна за инсталирање на МедијаВики. +Ако ви затреба помош при инсталацијата, ќе треба да ги наведете резултатите од овие проверки.', + 'config-copyright' => "=== Авторски права и услови === + +$1 + +Ова е слободна програмска опрема (free software); можете да го редистрибуирате и/или менувате согласно условите на ГНУ-овата општа јавна лиценца (GNU General Public License) на Фондацијата за слободна програмска опрема (Free Software Foundation); верзија 2 или било која понова верзија на лиценцата (по ваш избор). + +Овој програм се нуди со надеж дека ќе биде корисен, но '''без никаква гаранција'''; дури ни подразбраната гаранција за '''продажна способност''' или '''погодност за определена цел'''. +Повеќе информации ќе најдете во текстот на ГНУ-овата општа јавна лиценца. + +Би требало да имате добиено примерок од ГНУ-овата општа јавна лиценца заедно со програмов; ако немате добиено, тогаш пишете ни на Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. или [http://www.gnu.org/copyleft/gpl.html прочитајте ја тука].", + 'config-sidebar' => '* [http://www.mediawiki.org Домашна страница на МедијаВики] +* [http://www.mediawiki.org/wiki/Help:Contents Водич за корисници] +* [http://www.mediawiki.org/wiki/Manual:Contents Водич за администратори] +* [http://www.mediawiki.org/wiki/Manual:FAQ ЧПП] +---- +* Прочитај ме +* Белешки за изданието +* Копирање +* Надградување', + 'config-env-good' => 'Околината е проверена. +Можете да го инсталирате МедијаВики.', + 'config-env-bad' => 'Околината е проверена. +Не можете да го инсталирате МедијаВики.', + 'config-env-php' => 'PHP $1 е инсталиран.', + 'config-env-php-toolow' => 'PHP $1 е инсталиран. +Меѓутоа, МедијаВики бара PHP $2 или поново.', + 'config-unicode-using-utf8' => 'Со utf8_normalize.so за уникодна нормализација од Брајон Вибер (Brion Vibber).', + 'config-unicode-using-intl' => 'Со додатокот [http://pecl.php.net/intl intl PECL] за уникодна нормализација.', + 'config-unicode-pure-php-warning' => "'''Предупредување''': Додатокот [http://pecl.php.net/intl intl PECL] не е достапен за врши уникодна нормализација, враќајќи се на бавна примена на чист PHP. + +Ако имате високопрометно мрежно место, тогаш ќе треба да прочитате повеќе за [http://www.mediawiki.org/wiki/Unicode_normalization_considerations уникодната нормализација].", + 'config-unicode-update-warning' => "'''Предупредување''': Инсталираната верзија на обвивката за уникодна нормализација користи постара верзија на библиотеката на [http://site.icu-project.org/ проектот ICU]. +За да користите Уникод, ќе треба да направите [http://www.mediawiki.org/wiki/Unicode_normalization_considerations надградба].", + 'config-no-db' => 'Не можев да пронајдам соодветен двигател за базата на податоци!', + 'config-no-db-help' => 'Ќе треба да инсталирате двигател за базата на податоци за PHP. +Поддржани се следниве типови на бази: $1. + +Ако сте на заедничко (споделено) вдомување, побарајте му на вдомителот да инсталира соодветен двигател за базата. +Ако вие самите го составивте ова PHP, сменете ги поставките така што ќе овозможите клиент на базата - на пр. со кодот ./configure --with-mysql. +Ако инсталиравте PHP од пакет на Debian или Ubuntu, тогаш ќе треба да го инсталирате и модулот php5-mysql.', + 'config-no-fts3' => "'''Предупредување''': SQLite iе составен без модулот [http://sqlite.org/fts3.html FTS3] - за оваа база нема да има можност за пребарување.", + 'config-register-globals' => "'''Предупредување: Можноста [http://php.net/register_globals register_globals] за PHP е овозможена.''' +'''Оневозможете ја ако е можно.''' +МедијаВики ќе работи, но опслужувачот ви е изложен на безбедносни ризици.", + 'config-magic-quotes-runtime' => "'''Кобно: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] е активно!''' +Оваа можност непредвидливо го расипува вносот на податоци. +Оваа можност мора да е исклучена. Во спротивно нема да можете да го инсталирате и користите МедијаВики.", + 'config-magic-quotes-sybase' => "'''Кобно: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] е активно!''' +Оваа можност непредвидливо го расипува вносот на податоци. +Оваа можност мора да е исклучена. Во спротивно нема да можете да го инсталирате и користите МедијаВики.", + 'config-mbstring' => "'''Кобно: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] е активно!''' +Оваа можност предизвикува грешки и може непредвидиво да го расипува вносот на податоци. +Оваа можност мора да е исклучена. Во спротивно нема да можете да го инсталирате и користите МедијаВики.", + 'config-ze1' => "'''Кобно: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] е активно!''' +Оваа можност предизвикува ужасни грешки во МедијаВики. +Оваа можност мора да е исклучена. Во спротивно нема да можете да го инсталирате и користите МедијаВики.", + 'config-safe-mode' => "'''Предупредување:''' [http://www.php.net/features.safe-mode безбедниот режим] на PHP е активен. +Ова може да предизвика проблеми, особено ако користите подигања и поддршка за math.", + 'config-xml-bad' => 'XML-модулот за PHP недостасува. +МедијаВики има потреба од функции во овој модул и нема да работи со овие поставки. +Ако работите со Mandrake, инсталирајте го php-xml пакетот.', + 'config-pcre' => 'Недостасува модулот за поддршка на PCRE. +МедијаВики не може да работи без функции за регуларни изрази соодветни на Perl.', + 'config-pcre-no-utf8' => "'''Фатално''': PCRE-модулот на PHP е составен без поддршка за PCRE_UTF8. +МедијаВики бара поддршка за UTF-8 за да може да работи правилно.", + 'config-memory-raised' => 'memory_limit за PHP изнесува $1, зголемен на $2.', + 'config-memory-bad' => "'''Предупредување:''' memory_limit за PHP изнесува $1. +Ова е веројатно премалку. +Инсталацијата може да не успее!", + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] е инсталиран', + 'config-apc' => '[http://www.php.net/apc APC] е инсталиран', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] е инсталиран', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] е инсталиран', + 'config-no-cache' => "'''Предупредување:''' Не можев да го најдам [http://eaccelerator.sourceforge.net eAccelerator], [http://www.php.net/apc APC], [http://trac.lighttpd.net/xcache/ XCache] или [http://www.iis.net/download/WinCacheForPhp WinCache]. +Кеширањето на објекти не е овозможено.", + 'config-diff3-bad' => 'GNU diff3 не е пронајден.', + 'config-imagemagick' => 'Пронајден е ImageMagick: $1. +Ако овозможите подигање, тогаш ќе биде овозможена минијатуризација на сликите.', + 'config-gd' => 'Утврдив дека има вградена GD графичка библиотека. +Ако овозможите подигање, тогаш ќе биде овозможена минијатураизација на сликите.', + 'config-no-scaling' => 'Не можев да пронајдам GD-библиотека или ImageMagick. +Минијатуризацијата на сликите ќе биде оневозможена.', + 'config-no-uri' => "'''Грешка:''' Не можев да го утврдам тековниот URI. +Инсталацијата е откажана.", + 'config-uploads-not-safe' => "'''Предупредување:''' Вашата матична папка за подигање $1 е подложна на извршување (пуштање) на произволни скрипти. +Иако МедијаВики врши безбедносни проверки на сите подигнати податотеки, ве советуваме [http://www.mediawiki.org/wiki/Manual:Security#Upload_security да ја затворите оваа безбедносна дупка] пред да овозможите подигање.", + 'config-brokenlibxml' => 'Вашиот систем има комбинација од PHP и libxml2 верзии и затоа има грешки и може да предизвика скриено расипување на податоците кај МедијаВики и други мрежни програми. +Надградете го на PHP 5.2.9 и libxml2 2.7.3 или нивни понови верзии! ПРЕКИНУВАМ ([http://bugs.php.net/bug.php?id=45996 грешката е заведена во PHP]).', + 'config-using531' => 'МедијаВики не може да се користи со PHP $1 поради грешка кај упатните параметри за __call(). +За да го решите проблемот, надградете го на PHP 5.3.2 или понова верзија, или пак користете го постариот PHP 5.3.0.', + 'config-db-type' => 'Тип на база:', + 'config-db-host' => 'Домаќин на базата:', + 'config-db-host-help' => 'Ако вашата база е на друг опслужувач, тогаш тука внесете го името на домаќинот илиу IP-адресата. + +Ако користите заедничко (споделено) вдомување, тогаш вашиот вдомител треба да го доде точното име на домаќинот и неговата документација. + +Ако инсталирате на опслужувач на Windows и користите MySQL, можноста „localhost“ може да не функционира за опслужувачкото име. Во тој случај, обидете се со внесување на „127.0.0.1“ како локална IP-адреса', + 'config-db-host-oracle' => 'TNS на базата:', + 'config-db-host-oracle-help' => 'Внесете важечко [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm локално име за поврзување]. На оваа инсталација мора да ѝ биде видлива податотеката tnsnames.ora.
    Ако користите клиентски библиотеки 10g или понови, тогаш можете да го користите и методот на иметнување на [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].', + 'config-db-wiki-settings' => 'Идентификувај го викиво', + 'config-db-name' => 'Име на базата:', + 'config-db-name-help' => 'Одберете име што ќе го претставува вашето вики. +Името не смее да содржи празни места. + +Ако користите заедничко (споделено) вдомување, тогаш вашиот вдомител ќе ви даде конкретно име на база за користење, или пак ќе ви даде да создавате бази преку контролната табла.', + 'config-db-name-oracle' => 'Шема на базата:', + 'config-db-account-oracle-warn' => 'Постојат три поддржани сценарија за инсталирање на Oracle како базен услужник: + +Ако сакате да создадете сметка на базата како дел од постапката за инсталација, наведете сметка со SYSDBA-улога како сметка за базата што ќе се инсталира и наведете ги саканите податоци за сметката за мрежен пристап. Во друг случај, можете да создадете сметка за мрежен пристап рачно и да ја наведете само таа сметка (ако има дозволи за создавање на шематски објекти) или пак да наведете две различни сметки, една со привилегии за создавање, а друга (ограничена) за мрежен пристап. + +Скриптата за создавање сметка со задолжителни привилегии ќе ја најдете во папката „maintenance/oracle/“ од оваа инсталација. Имајте на ум дека ако користите ограничена сметка ќе ги оневозможите сите функции за одржување со основната сметка.', + 'config-db-install-account' => 'Корисничка смета за инсталација', + 'config-db-username' => 'Корисничко име за базата:', + 'config-db-password' => 'Лозинка за базата:', + 'config-db-password-empty' => 'Внесете лозинка за новиот корисник на базата: $1. +Иако може да се создаваат корисници без лозинка, тоа не е безбедно.', + 'config-db-install-username' => 'Внесете корисничко име што ќе се користи за поврзување со базата во текот на инсталацијата. Ова не е корисничкото име од сметката на МедијаВики, туку посебно корисничко име за вашата база на податоци.', + 'config-db-install-password' => 'Внесете клозинка што ќе се користи за поврзување со базата во текот на инсталацијата. Ова не е лозинката од сметката на МедијаВики, туку посебна лозинка за вашата база на податоци.', + 'config-db-install-help' => 'Внесете го корисничкото име и лозинката што ќе се користи за поврзување со базата на податоци во текот на инсталацијата.', + 'config-db-account-lock' => 'Користи го истото корисничко име и лозинка за редовна работа', + 'config-db-wiki-account' => 'Корисничко име за редовна работа', + 'config-db-wiki-help' => 'Внесете корисничко име и лозинка што ќе се користат за поврзување со базата на податоци во текот на редовната работа со викито. +Ако сметката не постои, а инсталационата сметка има доволно привилегии, тогаш оваа корисничка сметка ќе биде создадена со минималните привилегии потребни за работа со викито.', + 'config-db-prefix' => 'Префикс на табелата на базата:', + 'config-db-prefix-help' => 'Ако треба да делите една база на податоци со повеќе викија, или со МедијаВики и друг мрежен програм, тогаш можете да додадете префикс на сите називи на табелите за да спречите проблематични ситуации. +Не користете празни простори. + +Ова поле обично се остава празно.', + 'config-db-charset' => 'Збир знаци за базата', + 'config-charset-mysql5-binary' => 'Бинарен за MySQL 4.1/5.0', + 'config-charset-mysql5' => 'UTF-8 за MySQL 4.1/5.0', + 'config-charset-mysql4' => 'Назадно-соодветен UTF-8 за MySQL 4.0', + 'config-charset-help' => "'''ПРЕДУПРЕДУВАЊЕ:''' Ако користите '''назадно-соодветен UTF-8''' во MySQL 4.1+, а потоа направите резервен примерок на базата со mysqldump, ова може да ги опустоши сите не-ASCII знаци, и со тоа неповратно да ја расипе целата зачувана резерва! + +Во '''бинарен режим''', во базата МедијаВики го складира UTF-8 текстот во бинарни полиња. +Ова е поефикансно отколку UTF-8 режимот на MySQL бидејќи ви овозможува да го користите целиот спектар на уникодни знаци. +Во '''UTF-8 режим''', MySQL ќе знае на кој збир знаци припаѓаат вашите податоци, и може соодветно да ги претстави и претвори, +но нема да ви дозволи да складирате знаци над [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Основната повеќејазична рамнина].", + 'config-mysql-old' => 'Се бара MySQL $1 или поново, а вие имате $2.', + 'config-db-port' => 'Порта на базата:', + 'config-db-schema' => 'Шема за МедијаВики', + 'config-db-schema-help' => 'Оваа шема обично по правило ќе работи нормално. +Сменете ја само ако знаете дека треба да се смени.', + 'config-sqlite-dir' => 'Папка на SQLite-податоци:', + 'config-sqlite-dir-help' => "SQLite ги складира сите податоци во една податотека. + +Папката што ќе ја наведете мора да е запислива од мрежниот опслужувач во текот на инсталацијата. + +Таа '''не''' смее да биде достапна преку интернет, и затоа не ја ставаме кајшто ви се наоѓаат PHP-податотеките. + +Инсталаторот воедно ќе создаде податотека .htaccess, но ако таа не функционира како што треба, тогаш некој ќе може да ви влезе во вашата необработена (сирова) база на податоци. +Тука спаѓаат необработени кориснички податоци (е-поштенски адреси, хеширани лозинки) како и избришани ревизии и други податоци за викито до кои се има ограничен пристап. + +Се препорачува целата база да ја сместите некаде, како на пр. /var/lib/mediawiki/вашетовики.", + 'config-oracle-def-ts' => 'Стандарден таблеарен простор:', + 'config-oracle-temp-ts' => 'Привремен табеларен простор:', + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Oracle', + 'config-support-info' => 'МедијаВики ги поддржува следниве системи на бази на податоци: + +$1 + +Ако системот што сакате да го користите не е наведен подолу, тогаш проследете ја горенаведената врска со инструкции за да овозможите поддршка за тој систем.', + 'config-support-mysql' => '* $1 е главната цел на МедијаВики и најдобро се поддржува ([http://www.php.net/manual/en/mysql.installation.php како се составува PHP со поддршка за MySQL])', + 'config-support-postgres' => '* $1 е популарен систем на бази на податоци со отворен код кој претставува алтернатива на MySQL ([http://www.php.net/manual/en/pgsql.installation.php како да составите PHP со поддршка за PostgreSQL]). Може сè уште да има некои грешки. па затоа не се препорачува за употреба во производна средина.', + 'config-support-sqlite' => '* $1 е лесен систем за бази на податоци кој е многу добро поддржан. ([http://www.php.net/manual/en/pdo.installation.php Како да составите PHP со поддршка за SQLite], користи PDO)', + 'config-support-oracle' => '* $1 е база на податоци на комерцијално претпријатие. ([http://www.php.net/manual/en/oci8.installation.php Како да составите PHP со поддршка за OCI8])', + 'config-header-mysql' => 'Нагодувања на MySQL', + 'config-header-postgres' => 'Нагодувања на PostgreSQL', + 'config-header-sqlite' => 'Нагодувања на SQLite', + 'config-header-oracle' => 'Нагодувања на Oracle', + 'config-invalid-db-type' => 'Неважечки тип на база', + 'config-missing-db-name' => 'Мора да внесете значење за параметарот „Име на базата“', + 'config-missing-db-host' => 'Мора да внесете вредност за „Домаќин на базата на податоци“', + 'config-missing-db-server-oracle' => 'Мора да внесете вредност за „TNS на базата“', + 'config-invalid-db-server-oracle' => 'Неважечки TNS „$1“ за базата. +Користете само знаци по ASCII - букви (a-z, A-Z), бројки (0-9), долни црти (_) и точки (.).', + 'config-invalid-db-name' => 'Неважечко име на базата „$1“. +Користете само ASCII-букви (a-z, A-Z), бројки (0-9), долни црти (_) и цртички (-).', + 'config-invalid-db-prefix' => 'Неважечки префикс за базата „$1“. +Користете само ASCII-букви (a-z, A-Z), бројки (0-9), долни црти (_) и цртички (-).', + 'config-connection-error' => '$1. + +Проверете го долунаведениот домаќин, корисничко име и лозинка и обидете се повторно.', + 'config-invalid-schema' => 'Неважечка шема за МедијаВики „$1“. +Користете само букви, бројки и долни црти.', + 'config-db-sys-create-oracle' => 'Инсталаторот поддржува само употреба на SYSDBA-сметка за создавање на нова сметка.', + 'config-db-sys-user-exists-oracle' => 'Корисничката сметка „$1“ веќе постои. SYSDBA служи само за создавање на нова сметка!', + 'config-postgres-old' => 'Се бара PostgreSQL $1 или поново, а вие имате $2.', + 'config-sqlite-name-help' => 'Одберете име кое ќе го претставува вашето вики. +Не користете празни простори и црти. +Ова ќе се користи за податотечното име на SQLite-податоците.', + 'config-sqlite-parent-unwritable-group' => 'Не можам да ја создадам папката $1 бидејќи мрежниот опслужувач не може да запише во матичната папка $2. + +Инсталаторот го утврди корисникот под кој работи вашиот мрежен опслужувач. +За да продолжите, наместете да може да запишува во папката $3. +На Unix/Linux систем направете го следново: + +
    cd $2
    +mkdir $3
    +chgrp $4 $3
    +chmod g+w $3
    ', + 'config-sqlite-parent-unwritable-nogroup' => 'Не можам да ја создадам папката $1 бидејќи мрежниот опслужувач не може да запише во матичната папка $2. + +Инсталаторот не можеше го утврди корисникот под кој работи вашиот мрежен опслужувач. +За да продолжите, наместете тој (и други!) да може глобално да запишува во папката $3 +На Unix/Linux систем направете го следново: + +
    cd $2
    +mkdir $3
    +chmod a+w $3
    ', + 'config-sqlite-mkdir-error' => 'Грешка при создавањето на податочната папка „$1“. +Проверете каде се наоѓа и обидете се повторно.', + 'config-sqlite-dir-unwritable' => 'Не можам да запишам во папката „$1“. +Во дозволите за неа, овозможете му на мрежниот опслужувач да запишува во неа и обидете се повторно.', + 'config-sqlite-connection-error' => '$1. + +Проверете ја податочната папка и името на базата, и обидете се повторно.', + 'config-sqlite-readonly' => 'Податотеката $1 е незапислива.', + 'config-sqlite-cant-create-db' => 'Не можев да ја создадам податотеката $1 за базата.', + 'config-sqlite-fts3-downgrade' => 'PHP нема поддршка за FTS3 — ја поништувам надградбата за табелите', + 'config-can-upgrade' => "Во оваа база има табели на МедијаВики. +За да ги надградите на МедијаВики $1, кликнете на '''Продолжи'''.", + 'config-upgrade-done' => "Надградбата заврши. + +Сега можете да [$1 почнете да го користите вашето вики]. + +Ако сакате да ја пресоздадете вашата податотека LocalSettings.php, тогаш кликнете на копчето подолу. +Ова '''не се препорачува''' освен во случај на проблеми со викито.", + 'config-upgrade-done-no-regenerate' => 'Надградбата заврши. + +Сега можете да [$1 почнете да го користите викито].', + 'config-regenerate' => 'Пресоздај LocalSettings.php →', + 'config-show-table-status' => 'Барањето SHOW TABLE STATUS не успеа!', + 'config-unknown-collation' => "'''Предупредување:''' Базата корисни непрепознаена упатна споредба.", + 'config-db-web-account' => 'Сметка на базата за мрежен пристап', + 'config-db-web-help' => 'Одберете корисничко име и лозинка што ќе ги користи мрежниот опслужувач за поврзување со опслужувачот на базта на податоци во текот на редовната работа со викито.', + 'config-db-web-account-same' => 'Користи ја истата сметка од инсталацијата', + 'config-db-web-create' => 'Создај ја сметката ако веќе не постои', + 'config-db-web-no-create-privs' => 'Сметката што ја назначивте за инсталација нема доволно привилегии за да може да создаде сметка. +Тука мора да назначите постоечка сметка.', + 'config-mysql-engine' => 'Складишен погон:', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-engine-help' => "'''InnoDB''' речиси секогаш е најдобар избор, бидејќи има добра поддршка за едновременост. + +'''MyISAM''' може да е побрз кај инсталациите наменети за само еден корисник или незаписни инсталации (само читање). +Базите на податоци од MyISAM почесто се расипуваат од базите на InnoDB.", + 'config-mysql-charset' => 'Збир знаци за базата:', + 'config-mysql-binary' => 'Бинарен', + 'config-mysql-utf8' => 'UTF-8', + 'config-mysql-charset-help' => "Во '''бинарен режим''', во базата на податоци МедијаВики складира UTF-8 текст во бинарни полиња. +Ова е поефикасно отколку TF-8 режимот на MySQL, и ви овозможува да ја користите целата палета на уникодни знаци. + +Во '''UTF-8 режим''', MySQL ќе знае на кој збир знаци припаѓаат вашите податоци, и може соодветно да ги претстави и претвори, но нема да ви дозволи да складиратезнаци над [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Основната повеќејазична рамнина].", + 'config-site-name' => 'Име на викито:', + 'config-site-name-help' => 'Ова ќе се појавува во заглавната лента на прелистувачот и на разни други места.', + 'config-site-name-blank' => 'Внесете име на мрежното место.', + 'config-project-namespace' => 'Проектен именски простор:', + 'config-ns-generic' => 'Проект', + 'config-ns-site-name' => 'Исто име како викито: $1', + 'config-ns-other' => 'Друго (наведете)', + 'config-ns-other-default' => 'МоеВики', + 'config-project-namespace-help' => "По примерот на Википедија, многу викија ги чуваат страниците со правила на посебно место од самите содржини, т.е. во „'''проектен именски простор'''“. +Сите наслови на страниците во овој именски простор почнуваат со извесен префикс, којшто можете да го укажете тука. +По традиција префиксот произлегува од името на викито, но не смее да содржи интерпункциски знаци како „#“ или „:“.", + 'config-ns-invalid' => 'Назначениот именски простор „$1“ е неважечки. +Назначете друг проектен именски простор.', + 'config-ns-conflict' => 'Наведениот именски простор „$1“ се коси со основниот именски простор на МедијаВики. +Наведете друг именски простор за проектот.', + 'config-admin-box' => 'Администратоска сметка', + 'config-admin-name' => 'Вашето име:', + 'config-admin-password' => 'Лозинка:', + 'config-admin-password-confirm' => 'Пак лозинката:', + 'config-admin-help' => 'Тука внесете го вашето корисничко име, на пр. „Петар Петровски“. +Ова име ќесе користи за најава во викито.', + 'config-admin-name-blank' => 'Внесете администраторско корисничко име.', + 'config-admin-name-invalid' => 'Назначенотго корисничко име „$1“ е неважечко. +Назначете друго.', + 'config-admin-password-blank' => 'Внесете лозинка за администраторската сметка', + 'config-admin-password-same' => 'Лозинката не може да биде иста со корисничкото име.', + 'config-admin-password-mismatch' => 'Лозинките што ги внесовте не се совпаѓаат.', + 'config-admin-email' => 'Е-поштенска адреса:', + 'config-admin-email-help' => 'Тука внесете е-поштенска адреса за да можете да добивате е-пошта од други корисници на викито, да ја менувате лозинката, и да бидете известувани за промени во страниците на вашиот список на набљудувања. Можете и да го оставите празно.', + 'config-admin-error-user' => 'Се појави внатрешна грешка при создавањето на администраторот со име „$1“.', + 'config-admin-error-password' => 'Се појави внатрешна грешка при задавање на лозинката за администраторот „$1“:
    $2
    ', + 'config-admin-error-bademail' => 'Внесовте неважечка е-поштенска адреса', + 'config-subscribe' => 'Претплатете се на [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce release поштенскиот список за известувања].', + 'config-subscribe-help' => 'Ова е нископрометен поштенски список кој се користи за соопштувања во врска со изданија, вклучувајќи важни безбедносни соопштенија. +Треба да се претплатите и да ја надградувате вашата инсталација на МедијаВики кога излегуваат нови верзии.', + 'config-almost-done' => 'Уште малку сте готови! +Сега можете да ги прескокнете преостанатите поставувања и веднаш да го инсталирате викито.', + 'config-optional-continue' => 'Постави ми повеќе прашања.', + 'config-optional-skip' => 'Веќе ми здосади, дај само инсталирај го викито.', + 'config-profile' => 'Профил на кориснички права:', + 'config-profile-wiki' => 'Традиционално вики', + 'config-profile-no-anon' => 'Задолжително отворање сметка', + 'config-profile-fishbowl' => 'Само овластени уредници', + 'config-profile-private' => 'Приватно вики', + 'config-profile-help' => "Викијата функционираат најдобро кога имаат што повеќе уредници. +Во МедијаВики лесно се проверуваат скорешните промени, и лесно се исправа (технички: „враќа“) штетата направена од неупатени или злонамерни корисници. + +Многумина имаат најдено најразлични полезни примени за МедијаВики, но понекогаш не е лесно да убедите некого во предностите на вики-концептот. +Значи имате избор. + +'''{{int:config-profile-wiki}}''' — секој може да го уредува, дури и без најавување. +Ако имате вики со '''задолжително отворање на сметка''', тогаш добивате повеќе контрола, но ова може даги одврати спонтаните учесници. + +'''{{int:config-profile-fishbowl}}''' — може да уредуваат само уредници што имаат добиено дозвола за тоа, но јавноста може да ги гледа страниците, вклучувајќи ја нивната историја. +'''{{int:config-profile-private}}''' — страниците се видливи и уредливи само за овластени корисници. + +По инсталацијата имате на избор и посложени кориснички права и поставки. Погледајте во [http://www.mediawiki.org/wiki/Manual:User_rights прирачникот].", + 'config-license' => 'Авторски права и лиценца:', + 'config-license-none' => 'Без подножје за лиценца', + 'config-license-cc-by-sa' => 'Creative Commons НаведиИзвор СподелиПодИстиУслови', + 'config-license-cc-by-nc-sa' => 'Creative Commons НаведиИзвор-Некомерцијално-СподелиПодИстиУслови', + 'config-license-cc-0' => 'Криејтив комонс Нула', + 'config-license-gfdl-old' => 'ГНУ-ова лиценца за слободна документација 1.2', + 'config-license-gfdl-current' => 'ГНУ-ова лиценца за слободна документација 1.3 или понова', + 'config-license-pd' => 'Јавен домен', + 'config-license-cc-choose' => 'Одберете друга Creative Commons лиценца по ваш избор', + 'config-license-help' => "Многу јавни викија ги ставаат сите придонеси под [http://freedomdefined.org/Definition слободна лиценца]. +Со ова се создава атмосфера на општа сопственост и поттикнува долгорочно учество. +Ова не е неопходно за викија на поединечни физички или правни лица. + +Ако сакате да користите текст од Википедија, и сакате Википедија да прифаќа текст прекопиран од вашето вики, тогаш треба да ја одберете лиценцата '''Creative Commons НаведиИзвор СподелиПодИстиУслови'''. + +ГНУ-овата лиценца за слободна документација е старата лиценца на Википедија. +Оваа лиценца сè уште важи, но има некои особености што значително го отежнуваат толкувањето на искористувањето на содржините вон Викимедија.", + 'config-email-settings' => 'Нагодувања за е-пошта', + 'config-enable-email' => 'Овозможи излезна е-пошта', + 'config-enable-email-help' => 'Ако сакате да работи е-поштата, [http://www.php.net/manual/en/mail.configuration.php поштенските нагодувања на PHP] треба да се правилно наместени. +Ако воопшто не сакате никакви функции за е-пошта, тогаш можете да ги оневозможите тука.', + 'config-email-user' => 'Овозможи е-пошта од корисник до корисник', + 'config-email-user-help' => 'Дозволи сите корисници да можат да си праќаат е-пошта ако ја имаат овозможено во нагодувањата.', + 'config-email-usertalk' => 'Овозможи известувања за промени во кориснички страници за разговор', + 'config-email-usertalk-help' => 'Овозможи корисниците да добиваат известувања за промени во нивните кориснички страници за разговор ако ги имаат овозможено во нагодувањата.', + 'config-email-watchlist' => 'Овозможи известувања за список на набљудувања', + 'config-email-watchlist-help' => 'Овозможи корисниците да добиваат известувања за нивните набљудувани страници ако ги имаат овозможено во нагодувањата.', + 'config-email-auth' => 'Овозможи потврдување на е-пошта', + 'config-email-auth-help' => "Ако оваа можност е вклучена, тогаш корисниците ќе мора да ја потврдат нивната е-поштенска адреса преку врска испратена до нив кога ја укажуваат или менуваат е-поштенската адреса. +Само корисници со потврдена е-пошта можат да добиваат е-пошта од други корисници или да ги менуваат писмата за известување. +Оваа можност е '''препорачана''' за јавни викија поради можни злоупотреби на е-поштенската функција.", + 'config-email-sender' => 'Повратна е-поштенска адреса:', + 'config-email-sender-help' => 'Внесете ја е-поштенската адреса што ќе се користи како повратна адреса за излезна е-пошта. +Таму ќе се испраќаат вратените (непримени) писма. +Многу поштенски опслужувачи бараат барем делот за доменско име да биде важечки.', + 'config-upload-settings' => 'Подигање на слики и податотеки', + 'config-upload-enable' => 'Овозможи подигање на податотеки', + 'config-upload-help' => 'Подигањето на податотеки потенцијално го изложуваат вашиот опслужувач на безбедносни ризици. +За повеќе информации, прочитајте го [http://www.mediawiki.org/wiki/Manual:Security поглавието за безбедност] во прирачникот. + +За да овозможите подигање на податотеки, сменете го режимот на потпапката images во основната папка на МедијаВики, за да му овозможите на мрежниот опслужувач да запишува во неа. +Потоа овозможете ја оваа функција.', + 'config-upload-deleted' => 'Папка за избришаните податотеки:', + 'config-upload-deleted-help' => 'Одберете во која папка да се архивираат избришаните податотеки. +Најдобро би било ако таа не е достапна преку интернет.', + 'config-logo' => 'URL за логото:', + 'config-logo-help' => 'Матичното руво на МедијаВики има простор за лого од 135x160 пиксели во горниот лев агол. +Подигнете слика со соодветна големина, и тука внесете ја URL-адресата. + +Ако не сакате да имате лого, тогаш оставете го ова поле празно.', + 'config-instantcommons' => 'Овозможи Instant Commons', + 'config-instantcommons-help' => '[http://www.mediawiki.org/wiki/InstantCommons Instant Commons] е функција која им овозможува на викијата да користат слики, звучни записи и други мултимедијални содржини од [http://commons.wikimedia.org/ Заедничката Ризница]. +За да може ова да работи, МедијаВики бара пристап до интернет. + +За повеќе информации за оваа функција и напатствија за нејзино поставување на вики (сите други освен Ризницата), коносултирајте го [http://mediawiki.org/wiki/Manual:$wgForeignFileRepos прирачникот].', + 'config-cc-error' => 'Изборникот на Creative Commons лиценца не даде резултати. +Внесете го името на лиценцата рачно.', + 'config-cc-again' => 'Одберете повторно...', + 'config-cc-not-chosen' => 'Одберете ја саканата Creative Commons лиценца и кликнете на „продолжи“.', + 'config-advanced-settings' => 'Напредни нагодувања', + 'config-cache-options' => 'Нагодувања за кеширање на објекти:', + 'config-cache-help' => 'Кеширањето на објекти се користи за зголемување на брзината на МедијаВики со кеширање на често употребуваните податоци. +Ова многу се препорачува на средни до големи викија, но од тоа ќе имаат полза и малите викија.', + 'config-cache-none' => 'Без кеширање (не се остранува ниедна функција, но може да влијае на брзината кај поголеми викија)', + 'config-cache-accel' => 'Кеширање на PHP-објекти (APC, eAccelerator, XCache или WinCache)', + 'config-cache-memcached' => 'Користи Memcached (бара дополнително поставување и нагодување)', + 'config-memcached-servers' => 'Memcached-опслужувачи:', + 'config-memcached-help' => 'Список на IP-адреси за употреба во Memcached. +Треба да се наведе по една во секој ред, како и портата што ќе се користи. На пример: + 127.0.0.1:11211 + 192.168.1.25:1234', + 'config-memcache-needservers' => 'Го одбравте Memcached како ваш ваш тип на скришно памтење (кеш), но не наведовте опслужувач(и)', + 'config-memcache-badip' => 'Внесовте неважечка IP-адреса за Memcached: $1', + 'config-memcache-noport' => 'Не ја наведовте портата за опслужувачот на Memcached: $1. +Ако не знаете која порта треба да се користи, основната е 11211', + 'config-memcache-badport' => 'Бројките за портата на Memcached треба да бидат помеѓу $1 и $2', + 'config-extensions' => 'Додатоци', + 'config-extensions-help' => 'Во вашата папка ./extensions беа востановени горенаведените додатоци. + +За ова може да треба дополнително нагодување, но можете да ги овозможите сега', + 'config-install-alreadydone' => "'''Предупредување:''' Изгледа дека веќе го имате инсталирано МедијаВики и сега сакате да го инсталирате повторно. +Продолжете на следната страница.", + 'config-install-begin' => 'Стискајќи на „{{int:config-continue}}“ ќе ја започнете инсталацијата на МедијаВики. +Ако сакате да направите измени во досегашното, стиснете на „Назад“.', + 'config-install-step-done' => 'готово', + 'config-install-step-failed' => 'не успеа', + 'config-install-extensions' => 'Вклучувам додатоци', + 'config-install-database' => 'Ја поставувам базата на податоци', + 'config-install-pg-schema-not-exist' => 'PostgreSQL-шемата не постои', + 'config-install-pg-schema-failed' => 'Создавањето натабелите не успеа. +Проверете дали корисникот „$1“ може да запишува во шемата „$2“.', + 'config-install-pg-commit' => 'Спроведување на промени', + 'config-install-pg-plpgsql' => 'Проверувам јазик PL/pgSQL', + 'config-pg-no-plpgsql' => 'Ќе треба да го инсталирате јазикот PL/pgSQL во базата $1', + 'config-pg-no-create-privs' => 'Сметката што ја наведовте за инсталацијата нема доволно привилегии за да создаде друга сметка.', + 'config-install-user' => 'Создавам корисник за базата', + 'config-install-user-alreadyexists' => 'Корисникот „$1“ веќе постои', + 'config-install-user-create-failed' => 'Создавањето на корисникот „$1“ не успеа: $2', + 'config-install-user-grant-failed' => 'Доделувањето на дозвола на корисникот „$1“ не успеа: $2', + 'config-install-tables' => 'Создавам табели', + 'config-install-tables-exist' => "'''Предупредување''': Изгледа дека табелите за МедијаВики веќе постојат. +Го прескокнувам создавањето.", + 'config-install-tables-failed' => "'''Грешка''': Создавањето на табелата не успеа поради следнава грешка: $1", + 'config-install-interwiki' => 'Ги пополнувам основно-зададените интервики-табели', + 'config-install-interwiki-list' => 'Не можев да ја пронајдам податотеката interwiki.list.', + 'config-install-interwiki-exists' => "'''Предупредување''': Табелата со интервикија веќе содржи ставки. +Го прескокнувам основно-зададениот список.", + 'config-install-stats' => 'Ги подготвувам статистиките', + 'config-install-keys' => 'Создавам таен клуч', + 'config-insecure-keys' => "'''Предупредување:''' {{PLURAL:$2|Безбедносниот клуч $1 создаден во текот на инсталацијата не е сосем безбеден|Безбедносните клучеви $1 создадени во текот на инсталацијата не се сосем безбедни}}. Ви препорачуваме да {{PLURAL:$2|го|ги}} смените рачно.", + 'config-install-sysop' => 'Создавање на администраторска корисничка сметка', + 'config-install-subscribe-fail' => 'Не можам да ве претплатам на објавите на МедијаВики', + 'config-install-mainpage' => 'Создавам главна страница со стандардна содржина', + 'config-install-extension-tables' => 'Изработка на табели за овозможени додатоци', + 'config-install-mainpage-failed' => 'Не можев да вметнам главна страница: $1', + 'config-install-done' => "'''Честитаме!''' +Успешно го инсталиравте МедијаВики. + +Инсталаторот создаде податотека LocalSettings.php. +Таму се содржат сите ваши нагодувања. + +Ќе треба да ја преземете и да ја ставите во основата на инсталацијата (истата папка во која се наоѓа index.php). Преземањето треба да е започнато автоматски. + +Ако не ви е понудено преземање, или пак ако сте го откажале, можете да го почнете одново стискајќи на следнава врска: + +$3 + +'''Напомена''': Ако ова не го направите сега, податотеката со поставки повеќе нема да биде на достапна. + +Откога ќе завршите со тоа, можете да '''[$2 влезете на вашето вики]'''.", + 'config-download-localsettings' => 'Преземи го LocalSettings.php', + 'config-help' => 'помош', +); + +/** Malayalam (മലയാളം) + * @author Praveenp + */ +$messages['ml'] = array( + 'config-desc' => 'മീഡിയവിക്കി ഇൻസ്റ്റോളർ', + 'config-title' => 'മീഡിയവിക്കി $1 ഇൻസ്റ്റലേഷൻ', + 'config-information' => 'വിവരങ്ങൾ', + 'config-localsettings-upgrade' => "'''അറിയിപ്പ്''': ഒരു LocalSettings.php ഫയൽ കാണുന്നു. +സോഫ്റ്റ്‌വേർ അപ്‌ഗ്രേഡ് ചെയ്യുക സാദ്ധ്യമാണ്. +ദയവായി പെട്ടിയിൽ \$wgUpgradeKey എന്നതിന്റെ വില നൽകുക.", + 'config-localsettings-key' => 'അപ്‌ഗ്രേഡ് ചാവി:', + 'config-localsettings-badkey' => 'താങ്കൾ നൽകിയ ചാവി തെറ്റാണ്', + 'config-session-error' => 'സെഷൻ തുടങ്ങുന്നതിൽ പിഴവ്: $1', + 'config-your-language' => 'താങ്കളുടെ ഭാഷ:', + 'config-your-language-help' => 'ഇൻസ്റ്റലേഷൻ പ്രക്രിയയിൽ ഉപയോഗിക്കേണ്ട ഭാഷ തിരഞ്ഞെടുക്കുക.', + 'config-wiki-language' => 'വിക്കി ഭാഷ:', + 'config-wiki-language-help' => 'വിക്കിയിൽ പ്രധാനമായി ഉപയോഗിക്കേണ്ട ഭാഷ തിരഞ്ഞെടുക്കുക.', + 'config-back' => '← പിന്നിലേയ്ക്ക്', + 'config-continue' => 'തുടരുക →', + 'config-page-language' => 'ഭാഷ', + 'config-page-welcome' => 'മീഡിയവിക്കിയിലേയ്ക്ക് സ്വാഗതം!', + 'config-page-dbconnect' => 'ഡേറ്റാബേസുമായി ബന്ധപ്പെടുക', + 'config-page-upgrade' => 'നിലവിലുള്ള ഇൻസ്റ്റലേഷൻ അപ്‌ഗ്രേഡ് ചെയ്യുക', + 'config-page-dbsettings' => 'ഡേറ്റാബേസ് സജ്ജീകരണങ്ങൾ', + 'config-page-name' => 'പേര്', + 'config-page-options' => 'ഐച്ഛികങ്ങൾ', + 'config-page-install' => 'ഇൻസ്റ്റോൾ', + 'config-page-complete' => 'സമ്പൂർണ്ണം!', + 'config-page-restart' => 'ഇൻസ്റ്റലേഷൻ അടച്ച ശേഷം പുനർപ്രവർത്തിപ്പിക്കുക', + 'config-page-readme' => 'ഇത് വായിക്കൂ', + 'config-page-releasenotes' => 'പ്രകാശന കുറിപ്പുകൾ', + 'config-page-copying' => 'പകർത്തൽ', + 'config-page-upgradedoc' => 'അപ്‌ഗ്രേഡിങ്', + 'config-help-restart' => 'ഇതുവരെ ഉൾപ്പെടുത്തിയ എല്ലാവിവരങ്ങളും ഒഴിവാക്കാനും ഇൻസ്റ്റലേഷൻ പ്രക്രിയ നിർത്തി-വീണ്ടുമാരംഭിക്കാനും താങ്കളാഗ്രഹിക്കുന്നുണ്ടോ?', + 'config-restart' => 'അതെ, പുനർപ്രവർത്തിപ്പിക്കുക', + 'config-sidebar' => '* [http://www.mediawiki.org മീഡിയവിക്കി പ്രധാനതാൾ] +* [http://www.mediawiki.org/wiki/Help:Contents ഉപയോക്തൃസഹായി] +* [http://www.mediawiki.org/wiki/Manual:Contents കാര്യനിർവഹണസഹായി] +* [http://www.mediawiki.org/wiki/Manual:FAQ പതിവുചോദ്യങ്ങൾ]', + 'config-env-php' => 'പി.എച്ച്.പി. $1 ഇൻസ്റ്റോൾ ചെയ്തിട്ടുണ്ട്.', + 'config-no-db' => 'അനുയോജ്യമായ ഡേറ്റാബേസ് ഡ്രൈവർ കണ്ടെത്താനായില്ല!', + 'config-memory-raised' => 'പി.എച്ച്.പി.യുടെ memory_limit $1 ആണ്, $2 ആയി ഉയർത്തിയിരിക്കുന്നു.', + 'config-memory-bad' => "'''മുന്നറിയിപ്പ്:''' പി.എച്ച്.പി.യുടെ memory_limit $1 ആണ്. +ഇത് മിക്കവാറും വളരെ കുറവാണ്. +ഇൻസ്റ്റലേഷൻ പരാജയപ്പെട്ടേക്കാം!", + 'config-db-type' => 'ഡേറ്റാബേസ് തരം:', + 'config-db-host' => 'ഡേറ്റാബേസ് ഹോസ്റ്റ്:', + 'config-db-name' => 'ഡേറ്റാബേസിന്റെ പേര്:', + 'config-db-name-oracle' => 'ഡേറ്റാബേസ് സ്കീമ:', + 'config-db-install-account' => 'ഇൻസ്റ്റലേഷനുള്ള ഉപയോക്തൃ അംഗത്വം', + 'config-db-username' => 'ഡേറ്റാബേസ് ഉപയോക്തൃനാമം:', + 'config-db-password' => 'ഡേറ്റാബേസ് രഹസ്യവാക്ക്:', + 'config-mysql-old' => 'മൈഎസ്‌ക്യൂഎൽ $1 അഥവാ അതിലും പുതിയത് ആവശ്യമാണ്, താങ്കളുടെ പക്കൽ ഉള്ളത് $2 ആണ്.', + 'config-db-port' => 'ഡേറ്റാബേസ് പോർട്ട്:', + 'config-db-schema' => 'മീഡിയവിക്കിയ്ക്കായുള്ള സ്കീമ', + 'config-support-info' => 'മീഡിയവിക്കി താഴെ പറയുന്ന ഡേറ്റാബേസ് സിസ്റ്റംസ് പിന്തുണയ്ക്കുന്നു: + +$1 + +താങ്കൾ ഉപയോഗിക്കാനാഗ്രഹിക്കുന്ന ഡേറ്റാബേസ് സിസ്റ്റം പട്ടികയിലില്ലെങ്കിൽ, ദയവായി പിന്തുണ സജ്ജമാക്കാനായി മുകളിൽ നൽകിയിട്ടുള്ള ലിങ്കിലെ നിർദ്ദേശങ്ങൾ ചെയ്യുക.', + 'config-header-mysql' => 'മൈഎസ്‌ക്യൂഎൽ സജ്ജീകരണങ്ങൾ', + 'config-invalid-db-type' => 'അസാധുവായ ഡേറ്റാബേസ് തരം', + 'config-missing-db-name' => '"ഡേറ്റാബേസിന്റെ പേരി"ന് ഒരു വില നിർബന്ധമായും നൽകിയിരിക്കണം', + 'config-connection-error' => '$1. + +താഴെ നൽകിയിരിക്കുന്ന ഹോസ്റ്റ്, ഉപയോക്തൃനാമം, രഹസ്യവാക്ക് എന്നിവ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക.', + 'config-regenerate' => 'LocalSettings.php പുനഃസൃഷ്ടിക്കുക →', + 'config-mysql-engine' => 'സ്റ്റോറേജ് എൻജിൻ:', + 'config-site-name' => 'വിക്കിയുടെ പേര്:', + 'config-site-name-help' => 'ഇത് ബ്രൗസറിന്റെ ടൈറ്റിൽ ബാറിലും മറ്റനേകം ഇടങ്ങളിലും പ്രദർശിപ്പിക്കപ്പെടും.', + 'config-site-name-blank' => 'സൈറ്റിന്റെ പേര് നൽകുക.', + 'config-project-namespace' => 'പദ്ധതി നാമമേഖല:', + 'config-ns-generic' => 'പദ്ധതി', + 'config-ns-site-name' => 'വിക്കിയുടെ പേര് തന്നെ: $1', + 'config-ns-other' => 'ഇതരം (വ്യക്തമാക്കുക)', + 'config-ns-other-default' => 'എന്റെ‌വിക്കി', + 'config-admin-box' => 'കാര്യനിർവാഹക അംഗത്വം', + 'config-admin-name' => 'താങ്കളുടെ പേര്:', + 'config-admin-password' => 'രഹസ്യവാക്ക്:', + 'config-admin-password-confirm' => 'രഹസ്യവാക്ക് ഒരിക്കൽക്കൂടി:', + 'config-admin-help' => 'ഇവിടെ താങ്കളുടെ ഇച്ഛാനുസരണമുള്ള ഉപയോക്തൃനാമം നൽകുക, ഉദാഹരണം "ശശി കൊട്ടാരത്തിൽ". +ഈ പേരായിരിക്കണം വിക്കിയിൽ പ്രവേശിക്കാൻ താങ്കൾ ഉപയോഗിക്കേണ്ടത്.', + 'config-admin-name-blank' => 'ഒരു കാര്യനിർവാഹക ഉപയോക്തൃനാമം നൽകുക.', + 'config-admin-name-invalid' => 'നൽകിയിട്ടുള്ള ഉപയോക്തൃനാമം "$1" അസാധുവാണ്. +മറ്റൊരു ഉപയോക്തൃനാമം നൽകുക.', + 'config-admin-password-blank' => 'കാര്യനിർവാഹക അംഗത്വത്തിനുള്ള രഹസ്യവാക്ക് നൽകുക.', + 'config-admin-password-same' => 'രഹസ്യവാക്കും ഉപയോക്തൃനാമവും ഒന്നാകരുത്.', + 'config-admin-password-mismatch' => 'താങ്കൾ നൽകിയ രഹസ്യവാക്കുകൾ രണ്ടും തമ്മിൽ യോജിക്കുന്നില്ല.', + 'config-admin-email' => 'ഇമെയിൽ വിലാസം:', + 'config-admin-error-user' => '"$1" എന്ന പേരിലുള്ള കാര്യനിർവഹണ അംഗത്വ നിർമ്മിതിയ്ക്കിടെ ആന്തരികമായ പിഴവുണ്ടായി.', + 'config-admin-error-password' => '"$1" എന്ന പേരിലുള്ള കാര്യനിർവാഹക അംഗത്വത്തിനു രഹസ്യവാക്ക് സജ്ജീകരിച്ചപ്പോൾ ആന്തരികമായ പിഴവുണ്ടായി:
    $2
    ', + 'config-subscribe' => '[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce പ്രകാശന അറിയിപ്പ് മെയിലിങ് ലിസ്റ്റിൽ] വരിക്കാരാകുക.', + 'config-subscribe-help' => 'പുറത്തിറക്കൽ അറിയിപ്പുകളും, പ്രധാന സുരക്ഷാ അറിയിപ്പുകളും പ്രസിദ്ധീകരിക്കുന്ന വളരെ എഴുത്തുകളൊന്നും ഉണ്ടാകാറില്ലാത്ത മെയിലിങ് ലിസ്റ്റ് ആണിത്. +പുതിയ പതിപ്പുകൾ പുറത്ത് വരുന്നതനുസരിച്ച് അവയെക്കുറിച്ചറിയാനും മീഡിയവിക്കി ഇൻസ്റ്റലേഷൻ പുതുക്കാനും ഇതിന്റെ വരിക്കാരൻ/വരിക്കാരി ആവുക.', + 'config-almost-done' => 'മിക്കവാറും പൂർത്തിയായിരിക്കുന്നു! +ബാക്കിയുള്ളവ അവഗണിച്ച് വിക്കി ഇൻസ്റ്റോൾ ചെയ്യാവുന്നതാണ്.', + 'config-optional-continue' => 'കൂടുതൽ ചോദ്യങ്ങൾ ചോദിക്കൂ.', + 'config-optional-skip' => 'ഞാൻ മടുത്തു, ഇൻസ്റ്റോൾ ചെയ്ത് തീർക്ക്.', + 'config-profile-wiki' => 'പരമ്പരാഗത വിക്കി', + 'config-profile-no-anon' => 'അംഗത്വ സൃഷ്ടി ചെയ്യേണ്ടതുണ്ട്', + 'config-profile-fishbowl' => 'അനുവാദമുള്ളവർ മാത്രം തിരുത്തുക', + 'config-profile-private' => 'സ്വകാര്യ വിക്കി', + 'config-license' => 'പകർപ്പവകാശവും അനുമതിയും:', + 'config-license-cc-by-sa' => 'ക്രിയേറ്റീവ് കോമൺസ് ആട്രിബ്യൂഷൻ ഷെയർ എലൈക്', + 'config-license-cc-by-nc-sa' => 'ക്രിയേറ്റീവ് കോമൺസ് ആട്രിബ്യൂഷൻ നോൺ-കൊമേഴ്സ്യൽ ഷെയർ എലൈക്', + 'config-license-gfdl-old' => 'ഗ്നൂ സ്വതന്ത്ര പ്രസിദ്ധീകരണാനുമതി 1.2', + 'config-license-gfdl-current' => 'ഗ്നൂ സ്വതന്ത്ര പ്രസിദ്ധീകരണാനുമതി 1.3 അഥവാ പുതിയത്', + 'config-license-pd' => 'പൊതു സഞ്ചയം', + 'config-email-settings' => 'ഇമെയിൽ സജ്ജീകരണങ്ങൾ', + 'config-enable-email-help' => "ഇമെയിൽ പ്രവർത്തിക്കണമെങ്കിൽ, [http://www.php.net/manual/en/mail.configuration.php PHP's മെയിൽ സജ്ജീകരണങ്ങൾ] ശരിയായി ക്രമീകരിക്കേണ്ടതുണ്ട്. +ഇമെയിൽ സൗകര്യം ആവശ്യമില്ലെങ്കിൽ, ഇവിടെത്തന്നെ അത് നിർജ്ജീവമാക്കാം.", + 'config-email-user' => 'ഉപയോക്താക്കൾ തമ്മിലുള്ള ഇമെയിൽ പ്രവർത്തനസജ്ജമാക്കുക', + 'config-email-user-help' => 'സ്വന്തം ക്രമീകരണങ്ങളിൽ ഇമെയിൽ സജ്ജമാക്കിയിട്ടുണ്ടെങ്കിൽ ഉപയോക്താക്കളെ മറ്റുള്ളവർക്ക് ഇമെയിൽ അയയ്ക്കാൻ അനുവദിക്കുക.', + 'config-email-usertalk' => 'ഉപയോക്തൃസംവാദം താളിൽ മാറ്റങ്ങളുണ്ടായാൽ അറിയിക്കുക', + 'config-email-watchlist' => 'ശ്രദ്ധിക്കുന്നവയിൽ മാറ്റം വന്നാൽ അറിയിക്കുക', + 'config-email-auth' => 'ഇമെയിലിന്റെ സാധുതാപരിശോധന സജ്ജമാക്കുക', + 'config-email-sender' => 'മറുപടിയ്ക്കുള്ള ഇമെയിൽ വിലാസം:', + 'config-upload-settings' => 'ചിത്രങ്ങളും പ്രമാണങ്ങളും അപ്‌ലോഡ് ചെയ്യൽ', + 'config-upload-enable' => 'പ്രമാണ അപ്‌ലോഡുകൾ സജ്ജമാക്കുക', + 'config-upload-deleted' => 'മായ്ക്കപ്പെട്ട ഫയലുകൾക്കുള്ള ഡയറക്റ്ററി:', + 'config-logo' => 'ലോഗോയുടെ യൂ.ആർ.എൽ.:', + 'config-logo-help' => 'മീഡിയവിക്കിയിൽ സ്വതേയുള്ള ദൃശ്യരൂപത്തിൽ 135x160 പിക്സലുള്ള ലോഗോ മുകളിൽ ഇടത് മൂലയിൽ കാണാം. +അനുയോജ്യമായ വലിപ്പമുള്ള ഒരു ചിത്രം അപ്‌ലോഡ് ചെയ്തിട്ട്, അതിന്റെ യൂ.ആർ.എൽ. ഇവിടെ നൽകുക. + +താങ്കൾക്ക് ലോഗോ ആവശ്യമില്ലെങ്കിൽ, ഈ പെട്ടി ശൂന്യമായിടുക.', + 'config-cc-again' => 'ഒന്നുകൂടി എടുക്കൂ...', + 'config-advanced-settings' => 'വിപുലീകൃത ക്രമീകരണങ്ങൾ', + 'config-extensions' => 'അനുബന്ധങ്ങൾ', + 'config-install-step-done' => 'ചെയ്തു കഴിഞ്ഞു', + 'config-install-step-failed' => 'പരാജയപ്പെട്ടു', + 'config-install-extensions' => 'അനുബന്ധങ്ങൾ ഉൾപ്പെടുത്തുന്നു', + 'config-install-database' => 'ഡേറ്റാബേസ് സജ്ജമാക്കുന്നു', + 'config-install-pg-commit' => 'മാറ്റങ്ങൾ സ്വീകരിക്കുന്നു', + 'config-install-user' => 'ഡേറ്റാബേസ് ഉപയോക്താവിനെ സൃഷ്ടിക്കുന്നു', + 'config-install-sysop' => 'കാര്യനിർവാഹക അംഗത്വം സൃഷ്ടിക്കുന്നു', + 'config-install-mainpage' => 'സ്വാഭാവിക ഉള്ളടക്കത്തോടുകൂടി പ്രധാനതാൾ സൃഷ്ടിക്കുന്നു', + 'config-install-mainpage-failed' => 'പ്രധാന താൾ ഉൾപ്പെടുത്താൻ കഴിഞ്ഞില്ല: $1', + 'config-install-done' => "'''അഭിനന്ദനങ്ങൾ!''' +താങ്കൾ വിജയകരമായി മീഡിയവിക്കി ഇൻസ്റ്റോൾ ചെയ്തിരിക്കുന്നു. + +ഇൻസ്റ്റോളർ ഒരു LocalSettings.php ഫയൽ സൃഷ്ടിച്ചിട്ടുണ്ട്. +അതിൽ താങ്കളുടെ എല്ലാ ക്രമീകരണങ്ങളുമുണ്ട്. + +താങ്കൾ അത് [$1 എടുത്ത്] താങ്കളുടെ വിക്കി ഇൻസ്റ്റലേഷന്റെ അടിസ്ഥാന ഡയറക്റ്ററിയിൽ ഇടുക (index.php കിടക്കുന്ന അതേ ഡയറക്റ്ററി). +'''ശ്രദ്ധിക്കുക''': ഇത് ഇപ്പോൾ ചെയ്തില്ലെങ്കിൽ, സൃഷ്ടിക്കപ്പെട്ട കോൺഫിഗറേഷൻ ഫയൽ എടുക്കാതെ ഇൻസ്റ്റലേഷൻ പ്രക്രിയയിൽ നിന്ന് പുറത്തിറങ്ങിയാൽ പിന്നീട് ലഭ്യമായിരിക്കില്ല. + +ചെയ്തശേഷം, താങ്കൾക്ക് '''[$2 വിക്കിയിൽ പ്രവേശിക്കാം]'''.", +); + +/** Mongolian (Монгол) + * @author Chinneeb + */ +$messages['mn'] = array( + 'config-page-language' => 'Хэл', +); + +/** Erzya (Эрзянь) + * @author Botuzhaleny-sodamo + */ +$messages['myv'] = array( + 'config-page-language' => 'Кель', + 'config-page-name' => 'Лемезэ', + 'config-page-readme' => 'Ловномак', + 'config-admin-name' => 'Леметь:', + 'config-admin-password' => 'Совамо валот:', + 'config-admin-password-confirm' => 'Совамо валот одов:', + 'config-admin-email' => 'Е-сёрма паргот:', + 'config-install-step-done' => 'теезь', +); + +/** Dutch (Nederlands) + * @author Catrope + * @author McDutchie + * @author Purodha + * @author SPQRobin + * @author Siebrand + */ +$messages['nl'] = array( + 'config-desc' => 'Het installatieprogramma voor MediaWiki', + 'config-title' => 'Installatie MediaWiki $1', + 'config-information' => 'Informatie', + 'config-localsettings-upgrade' => 'Er is een bestaand instellingenbestand LocalSettings.php gevonden. +Voer de waarde van $wgUpgradeKey in in onderstaande invoerveld om deze installatie bij te werken. +De instelling is terug te vinden in LocalSettings.php.', + 'config-localsettings-cli-upgrade' => 'Het bestand LocalSettings.php is al aanwezig. +Voer update.php uit om deze installatie bij te werken.', + 'config-localsettings-key' => 'Upgradesleutel:', + 'config-localsettings-badkey' => 'De sleutel die u hebt opgegeven is onjuist', + 'config-upgrade-key-missing' => 'Er is een bestaande installatie van MediaWiki aangetroffen. +Plaats de volgende regel onderaan uw LocalSettings.php om deze installatie bij te werken: + +$1', + 'config-localsettings-incomplete' => 'De bestaande inhoud van LocalSettings.php lijkt incompleet. +De variabele $1 is niet ingesteld. +Wijzig LocalSettings.php zodat deze variabele is ingesteld en klik op "Doorgaan".', + 'config-localsettings-connection-error' => 'Er is een fout opgetreden tijdens het verbinden van de database met de instellingen uit LocalSettings.php of AdminSettings.php. Los het probleem met de instellingen op en probeer het daarna opnieuw. + +$1', + 'config-session-error' => 'Fout bij het begin van de sessie: $1', + 'config-session-expired' => 'Uw sessiegegevens zijn verlopen. +Sessies zijn ingesteld om een levensduur van $1 te hebben. +U kunt deze wijzigen via de instelling session.gc_maxlifetime in php.ini. +Begin het installatieproces opnieuw.', + 'config-no-session' => 'Uw sessiegegevens zijn verloren gegaan. +Controleer uw php.ini en zorg dat er een juiste map is ingesteld voor session.save_path.', + 'config-your-language' => 'Uw taal:', + 'config-your-language-help' => 'Selecteer een taal om tijdens het installatieproces te gebruiken.', + 'config-wiki-language' => 'Wikitaal:', + 'config-wiki-language-help' => 'Selecteer de taal waar de wiki voornamelijk in wordt geschreven.', + 'config-back' => '← Terug', + 'config-continue' => 'Doorgaan →', + 'config-page-language' => 'Taal', + 'config-page-welcome' => 'Welkom bij MediaWiki!', + 'config-page-dbconnect' => 'Verbinding maken met database', + 'config-page-upgrade' => 'Bestaande installatie bijwerken', + 'config-page-dbsettings' => 'Databaseinstellingen', + 'config-page-name' => 'Naam', + 'config-page-options' => 'Opties', + 'config-page-install' => 'Installeren', + 'config-page-complete' => 'Afgerond!', + 'config-page-restart' => 'Installatie herstarten', + 'config-page-readme' => 'Lees mij', + 'config-page-releasenotes' => 'Release notes', + 'config-page-copying' => 'Kopiëren', + 'config-page-upgradedoc' => 'Bijwerken', + 'config-page-existingwiki' => 'Bestaande wiki', + 'config-help-restart' => 'Wilt u alle opgeslagen gegevens die u hebt ingevoerd wissen en het installatieproces opnieuw starten?', + 'config-restart' => 'Ja, opnieuw starten', + 'config-welcome' => '=== Controle ongeving === +Er worden een aantal basale controles uitgevoerd met als doel vast te stellen of deze omgeving geschikt is voor een installatie van MediaWiki. +Als u hulp nodig hebt bij de installatie, lever deze gegevens dan ook aan.', + 'config-copyright' => "=== Auteursrechten en voorwaarden === + +$1 + +Dit programma is vrije software. U mag het verder verspreiden en/of aanpassen in overeenstemming met de voorwaarden van de GNU General Public License zoals uitgegeven door de Free Software Foundation; ofwel versie 2 van de Licentie of - naar uw keuze - enige latere versie. + +Dit programma wordt verspreid in de hoop dat het nuttig is, maar '''zonder enige garantie''', zelfs zonder de impliciete garantie van '''verkoopbaarheid''' of '''geschiktheid voor een bepaald doel'''. +Zie de GNU General Public License voor meer informatie. + +Samen met dit programma hoort u een exemplaar van de GNU General Public License ontvangen te hebben; zo niet, schrijf dan aan de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, Verenigde Staten. Of [http://www.gnu.org/copyleft/gpl.html lees de licentie online].", + 'config-sidebar' => '* [http://www.mediawiki.org MediaWiki thuispagina] +* [http://www.mediawiki.org/wiki/Help:Contents Gebruikershandleiding] (Engelstalig) +* [http://www.mediawiki.org/wiki/Manual:Contents Beheerdershandleiding] (Engelstalig) +* [http://www.mediawiki.org/wiki/Manual:FAQ Veel gestelde vragen] (Engelstalig) +---- +* Leesmij (Engelstalig) +* Release notes (Engelstalig) +* Kopiëren (Engelstalig) +* Versie bijwerken (Engelstalig)', + 'config-env-good' => 'De omgeving is gecontroleerd. +U kunt MediaWiki installeren.', + 'config-env-bad' => 'De omgeving is gecontroleerd. +U kunt MediaWiki niet installeren.', + 'config-env-php' => 'PHP $1 is op dit moment geïnstalleerd.', + 'config-env-php-toolow' => 'PHP $1 is geïnstalleerd. +MediaWiki heeft PHP $2 of hoger nodig om correct te kunnen werken.', + 'config-unicode-using-utf8' => 'Voor Unicode-normalisatie wordt utf8_normalize.so van Brion Vibber gebruikt.', + 'config-unicode-using-intl' => 'Voor Unicode-normalisatie wordt de [http://pecl.php.net/intl PECL-extensie intl] gebruikt.', + 'config-unicode-pure-php-warning' => "'''Waarschuwing''': De [http://pecl.php.net/intl PECL-extensie intl] is niet beschikbaar om de Unicode-normalisatie af te handelen en daarom wordt de langzame PHP-implementatie gebruikt. +Als u MediaWiki voor een website met veel verkeer installeert, lees u dan in over [http://www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode-normalisatie].", + 'config-unicode-update-warning' => "'''Waarschuwing''': De geïnstalleerde versie van de Unicode-normalisatiewrapper maakt gebruik van een oudere versie van [http://site.icu-project.org/ de bibliotheek van het ICU-project]. +U moet [http://www.mediawiki.org/wiki/Unicode_normalization_considerations bijwerken] als Unicode voor u van belang is.", + 'config-no-db' => 'Er kon geen geschikte databasedriver geladen worden!', + 'config-no-db-help' => 'U moet een databasedriver installeren voor PHP. +De volgende databases worden ondersteund: $1. + +Als u op een gedeelde omgeving zit, vraag dan aan uw hostingprovider een geschikte databasedriver te installeren. +Als u PHP zelf hebt gecompileerd, wijzig dan uw instellingen zodat een databasedriver wordt geactiveerd, bijvoorbeeld via ./configure --with-mysql. +Als u PHP hebt geïnstalleerd via een Debian- of Ubuntu-package, installeer dan ook de module php5-mysql.', + 'config-no-fts3' => "'''Waarschuwing''': SQLite is gecompileerd zonder de module [http://sqlite.org/fts3.html FTS3]; er zijn geen zoekfuncties niet beschikbaar.", + 'config-register-globals' => "'''Waarschuwing: De PHP-optie [http://php.net/register_globals register_globals] is ingeschakeld.''' +'''Schakel deze uit als dat mogelijk is.''' +MediaWiki kan ermee werken, maar uw server is dan meer kwetsbaar voor beveiligingslekken.", + 'config-magic-quotes-runtime' => "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] is actief!''' +Deze instelling zorgt voor gegevenscorruptie. +U kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.", + 'config-magic-quotes-sybase' => "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] is actief!''' +Deze instelling zorgt voor gegevenscorruptie. +U kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.", + 'config-mbstring' => "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] is actief!''' +Deze instelling zorgt voor gegevenscorruptie. +U kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.", + 'config-ze1' => "'''Onherstelbare fout: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] is actief!''' +Deze instelling zorgt voor grote problemen in MediaWiki. +U kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.", + 'config-safe-mode' => "'''Waarschuwing:''' +'''PHP's [http://www.php.net/features.safe-mode veilige modus] is actief.''' +Dit kan problemen veroorzaken, vooral bij het uploaden van bestanden en ondersteuning van math.", + 'config-xml-bad' => 'De XML-module van PHP ontbreekt. +MediaWiki heeft de functies van deze module nodig en werkt niet zonder deze module. +Als u gebruik maakt van Mandrake, installeer dan het package php-xml.', + 'config-pcre' => 'De ondersteuningsmodule PCRE lijkt te missen. +MediaWiki vereist dat de met Perl compatibele reguliere expressies werken.', + 'config-pcre-no-utf8' => "'''Fataal:''' de module PRCE van PHP lijkt te zijn gecompileerd zonder ondersteuning voor PCRE_UTF8. +MediaWiki heeft ondersteuning voor UTF-8 nodig om correct te kunnen werken.", + 'config-memory-raised' => "PHP's memory_limit is $1 en is verhoogd tot $2.", + 'config-memory-bad' => "'''Waarschuwing:''' PHP's memory_limit is $1. +Dit is waarschijnlijk te laag. +De installatie kan mislukken!", + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] is op dit moment geïnstalleerd', + 'config-apc' => '[http://www.php.net/apc APC] is op dit moment geïnstalleerd', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] is op dit moment geïnstalleerd', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] is op dit moment geïnstalleerd', + 'config-no-cache' => "'''Waarschuwing:''' [http://eaccelerator.sourceforge.net eAccelerator], [http://www.php.net/apc APC] of [http://trac.lighttpd.net/ xcache / XCache] is niet aangetroffen. +Het cachen van objecten is niet ingeschakeld.", + 'config-diff3-bad' => 'GNU diff3 niet aangetroffen.', + 'config-imagemagick' => 'ImageMagick aangetroffen: $1. +Het aanmaken van miniaturen van afbeeldingen wordt ingeschakeld als u uploaden inschakelt.', + 'config-gd' => 'Ingebouwde GD grafische bibliotheek aangetroffen. +Het aanmaken van miniaturen van afbeeldingen wordt ingeschakeld als u uploaden inschakelt.', + 'config-no-scaling' => 'De GD-bibliotheek en ImageMagick zijn niet aangetroffen. +Het maken van miniaturen van afbeeldingen wordt uitgeschakeld.', + 'config-no-uri' => "'''Fout:''' de huidige URI kon niet vastgesteld worden. +De installatie is afgebroken.", + 'config-uploads-not-safe' => "'''Waarschuwing:''' uw uploadmap $1 kan gebruikt worden voor het arbitrair uitvoeren van scripts. +Hoewel MediaWiki alle toegevoegde bestanden controleert op bedreigingen, is het zeer aan te bevelen het [http://www.mediawiki.org/wiki/Manual:Security#Upload_security beveiligingslek te verhelpen] alvorens uploads in te schakelen.", + 'config-brokenlibxml' => 'Uw systeem heeft een combinatie van PHP- en libxml2-versies geïnstalleerd die is foutgevoelig is en kan leiden tot onzichtbare beschadiging van gegevens in MediaWiki en andere webapplicaties. +Upgrade naar PHP 5.2.9 of hoger en libxml2 2.7.3 of hoger! De installatie wordt afgebroken ([http://bugs.php.net/bug.php?id=45996 bij PHP gerapporteerde fout]).', + 'config-using531' => 'PHP $1 is niet compatibel met MediaWiki vanwege een fout met betrekking tot referentieparameters met __call(). +Werk uw PHP bij naar PHP 5.3.2 of hoger of werk bij naar de lagere versie PHP 5.3.0 om dit op te lossen. +De installatie wordt afgebroken.', + 'config-db-type' => 'Databasetype:', + 'config-db-host' => 'Databasehost:', + 'config-db-host-help' => 'Als uw databaseserver een andere server is, voer dan de hostnaam of het IP-adres hier in. + +Als u gebruik maakt van gedeelde webhosting, hoort uw provider u de juiste hostnaam te hebben verstrekt. + +Als u MediaWiki op een Windowsserver installeert en MySQL gebruikt, dan werkt "localhost" mogelijk niet als servernaam. +Als het inderdaad niet werkt, probeer dan "127.0.0.1" te gebruiken als lokaal IP-adres.', + 'config-db-host-oracle' => 'Database-TNS:', + 'config-db-host-oracle-help' => 'Voer een geldige [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name] in; een tnsnames.ora-bestand moet zichtbaar zijn voor deze installatie.
    Als u gebruik maakt van clientlibraries 10g of een latere versie, kunt u ook gebruik maken van de naamgevingsmethode [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].', + 'config-db-wiki-settings' => 'Identificeer deze wiki', + 'config-db-name' => 'Databasenaam:', + 'config-db-name-help' => 'Kies een naam die uw wiki identificeert. +Er mogen geen spaties gebruikt worden. +Als u gebruik maakt van gedeelde webhosting, dan hoort uw provider ofwel u een te gebruiken databasenaam gegeven te hebben, of u aangegeven te hebben hoe u databases kunt aanmaken.', + 'config-db-name-oracle' => 'Databaseschema:', + 'config-db-account-oracle-warn' => 'Er zijn drie ondersteunde scenario\'s voor het installeren van Oracle als databasebackend: + +Als u een databasegebruiker wilt aanmaken als onderdeel van het installatieproces, geef dan de gegevens op van een databasegebruiker in met de rol SYSDBA voor de installatie en voer de gewenste aanmeldgegevens in voor de gebruiker met webtoegang. U kunt ook de gebruiker met webtoegang handmatig aanmaken en alleen van die gebruiker de aanmeldgegevens opgeven als deze de vereiste rechten heeft om schemaobjecten aan te maken. Als laatste is het mogelijk om aanmeldgegevens van twee verschillende gebruikers op te geven; een met de rechten om schemaobjecten aan te maken, en een met alleen webtoegang. + +Een script voor het aanmaken van een gebruiker met de vereiste rechten is te vinden in de map "maintenance/oracle/" van deze installatie. Onthoud dat het gebruiken van een gebruiker met beperkte rechten alle mogelijkheden om beheerscripts uit te voeren met de standaard gebruiker onmogelijk maakt.', + 'config-db-install-account' => 'Gebruiker voor installatie', + 'config-db-username' => 'Gebruikersnaam voor database:', + 'config-db-password' => 'Wachtwoord voor database:', + 'config-db-password-empty' => 'Voer een wachtwoord in voor de nieuwe databasegebruiker: $1. +Hoewel het wellicht mogelijk is gebruikers aan te maken zonder wachtwoord, is dit niet veilig.', + 'config-db-install-username' => 'Voer de gebruikersnaam in die gebruikt moet worden om te verbinden met de database tijdens het installatieproces. Dit is niet de gebruikersnaam van de MediaWikigebruiker. Dit is de gebruikersnaam voor de database.', + 'config-db-install-password' => 'Voer het wachtwoord in dat gebruikt moet worden om te verbinden met de database tijdens het installatieproces. Dit is niet het wachtwoord van de MediaWikigebruiker. Dit is het wachtwoord voor de database.', + 'config-db-install-help' => 'Voer de gebruikersnaam en het wachtwoord in die worden gebruikt voor de databaseverbinding tijdens het installatieproces.', + 'config-db-account-lock' => 'Dezelfde gebruiker en wachwoord gebruiken na de installatie', + 'config-db-wiki-account' => 'Gebruiker voor na de installatie', + 'config-db-wiki-help' => 'Selecteer de gebruikersnaam en het wachtwoord die gebruikt worden om verbinding te maken met de database na de installatie. +Als de gebruiker niet bestaat en de gebruiker die tijdens de installatie gebruikt wordt voldoende rechten heeft, wordt deze gebruiker aangemaakt met de minimaal benodigde rechten voor het laten werken van de wiki.', + 'config-db-prefix' => 'Databasetabelvoorvoegsel:', + 'config-db-prefix-help' => "Als u een database moet gebruiken voor meerdere wiki's, of voor MediaWiki en een andere applicatie, dan kunt u ervoor kiezen om een voorvoegsel toe te voegen aan de tabelnamen om conflicten te voorkomen. +Gebruik geen spaties. + +Dit veld wordt meestal leeg gelaten.", + 'config-db-charset' => 'Tekenset voor de database', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binair', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 UTF-8-compatibel', + 'config-charset-help' => "'''Waarschuwing:''' als u '''achterwaarts compatibel met UTF-8''' gebruikt met MySQL 4.1+ en een back-up van de database maakt met mysqldump, dan kunnen alle niet-ASCII-tekens in uw back-ups onherstelbaar beschadigd raken. + +In '''binaire modus''' slaat MediaWiki tekst in UTF-8 op in binaire databasevelden. +Dit is efficiënter dan de UTF-8-modus van MySQL en stelt u in staat de volledige reeks Unicode-tekens te gebruiken. +In '''UTF-8-modus''' kent MySQL de tekenset van uw gegevens en kan de databaseserver ze juist weergeven en converteren. +Het is dat niet mogelijk tekens op te slaan die de \"[http://nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.", + 'config-mysql-old' => 'U moet MySQL $1 of later gebruiken. +U gebruikt $2.', + 'config-db-port' => 'Databasepoort:', + 'config-db-schema' => 'Schema voor MediaWiki', + 'config-db-schema-help' => 'Dit schema klopt meestal. +Wijzig het alleen als u weet dat dit nodig is.', + 'config-sqlite-dir' => 'Gegevensmap voor SQLite:', + 'config-sqlite-dir-help' => "SQLite slaat alle gegevens op in een enkel bestand. + +De map die u opgeeft moet schrijfbaar zijn voor de webserver tijdens de installatie. + +Deze mag '''niet toegankelijk''' zijn via het web en het bestand mag dus niet tussen de PHP-bestanden staan. + +Het installatieprogramma schrijft het bestand .htaccess weg met het databasebestand, maar als dat niet werkt kan iemand zich toegang tot het ruwe databasebestand verschaffen. +Ook de gebruikersgegevens (e-mailsadressen, wachtwoordhashes) en verwijderde versies en overige gegevens met beperkte toegang via MediaWiki zijn dan onbeschermd. + +Overweeg om de database op een totaal andere plaats neer te zetten, bijvoorbeeld in /var/lib/mediawiki/yourwiki.", + 'config-oracle-def-ts' => 'Standaard tablespace:', + 'config-oracle-temp-ts' => 'Tijdelijke tablespace:', + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Oracle', + 'config-support-info' => 'MediaWiki ondersteunt de volgende databasesystemen: + +$1 + +Als u het databasesysteem dat u wilt gebruiken niet in de lijst terugvindt, volg dan de handleiding waarnaar hierboven wordt verwezen om ondersteuning toe te voegen.', + 'config-support-mysql' => '* $1 is het primaire databasesysteem voor voor MediaWiki en wordt het best ondersteund ([http://www.php.net/manual/en/mysql.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor MySQL])', + 'config-support-postgres' => '* $1 is een populair open source databasesysteem als alternatief voor MySQL ([http://www.php.net/manual/en/pgsql.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor PostgreSQL])', + 'config-support-sqlite' => '* $1 is een zeer goed ondersteund lichtgewicht databasesysteem ([http://www.php.net/manual/en/pdo.installation.php hoe PHP gecompileerd zijn met ondersteuning voor SQLite]; gebruikt PDO)', + 'config-support-oracle' => '* $1 is een commerciële data voor grote bedrijven ([http://www.php.net/manual/en/oci8.installation.php PHP compileren met ondersteuning voor OCI8]).', + 'config-header-mysql' => 'MySQL-instellingen', + 'config-header-postgres' => 'PostgreSQL-instellingen', + 'config-header-sqlite' => 'SQLite-instellingen', + 'config-header-oracle' => 'Oracle-instellingen', + 'config-invalid-db-type' => 'Ongeldig databasetype', + 'config-missing-db-name' => 'U moet een waarde ingeven voor "Databasenaam"', + 'config-missing-db-host' => 'U moet een waarde invoeren voor "Databaseserver"', + 'config-missing-db-server-oracle' => 'U moet een waarde voor "Database-TNS" ingeven', + 'config-invalid-db-server-oracle' => 'Ongeldige database-TMS "$1". +Gebruik alleen letters (a-z, A-Z), cijfers (0-9) en liggende streepjes (_).', + 'config-invalid-db-name' => 'Ongeldige databasenaam "$1". +Gebruik alleen letters (a-z, A-Z), cijfers (0-9) en liggende streepjes (_) en streepjes (-).', + 'config-invalid-db-prefix' => 'Ongeldig databasevoorvoegsel "$1". +Gebruik alleen letters (a-z, A-Z), cijfers (0-9) en liggende streepjes (_) en streepjes (-).', + 'config-connection-error' => '$1. + +Controleer de host, gebruikersnaam en wachtwoord hieronder in en probeer het opnieuw.', + 'config-invalid-schema' => 'Ongeldig schema voor MediaWiki "$1". +Gebruik alleen letters (a-z, A-Z), cijfers (0-9) en liggende streepjes (_).', + 'config-db-sys-create-oracle' => 'Het installatieprogramma biedt alleen de mogelijkheid een nieuwe gebruiker aan te maken met de SYSDBA-gebruiker.', + 'config-db-sys-user-exists-oracle' => 'De gebruiker "$1" bestaat al. SYSDBA kan alleen gebruikt worden voor het aanmaken van een nieuwe gebruiker!', + 'config-postgres-old' => 'PostgreSQL $1 of hoger is vereist. +U gebruikt $2.', + 'config-sqlite-name-help' => 'Kies een naam die uw wiki identificeert. +Gebruik geen spaties of koppeltekens. +Deze naam wordt gebruikt voor het gegevensbestands van SQLite.', + 'config-sqlite-parent-unwritable-group' => 'Het was niet mogelijk de gegevensmap $1 te maken omdat in de bovenliggende map $2 niet geschreven mag worden door de webserver. + +Het installatieprogramma heeft vast kunnen stellen onder welke gebruiker de webserver draait. +Maak de map $3 beschrijfbaar om door te kunnen gaan. +Voer op een Linux-systeem de volgende opdrachten uit: + +
    cd $2
    +mkdir $3
    +chgrp $4 $3
    +chmod g+w $3
    ', + 'config-sqlite-parent-unwritable-nogroup' => 'Het was niet mogelijk de gegevensmap $1 te maken omdat in de bovenliggende map $2 niet geschreven mag worden door de webserver. + +Het installatieprogramma heeft niet vast kunnen stellen onder welke gebruiker de webserver draait. +Maak de map $3 beschrijfbaar voor de webserver (en anderen!) om door te kunnen gaan. +Voer op een Linux-systeem de volgende opdrachten uit: + +
    cd $2
    +mkdir $3
    +chmod a+w $3
    ', + 'config-sqlite-mkdir-error' => 'Er is een fout opgetreden bij het aanmaken van de gegevensmap "$1". +Controleer de locatie en probeer het opnieuw.', + 'config-sqlite-dir-unwritable' => 'Het was niet mogelijk in de map "$1" te schrijven. +Wijzig de rechten zodat de webserver erin kan schrijven en probeer het opnieuw.', + 'config-sqlite-connection-error' => '$1. + +Controleer de map voor gegevens en de databasenaam hieronder en probeer het opnieuw.', + 'config-sqlite-readonly' => 'Het bestand $1 kan niet geschreven worden.', + 'config-sqlite-cant-create-db' => 'Het was niet mogelijk het databasebestand $1 aan te maken.', + 'config-sqlite-fts3-downgrade' => 'PHP heeft geen ondersteuning voor FTS3. +De tabellen worden gedowngrade.', + 'config-can-upgrade' => "Er staan al tabellen voor MediaWiki in deze database. +Klik op '''Doorgaan''' om ze bij te werken naar MediaWiki $1.", + 'config-upgrade-done' => "Het bijwerken is afgerond. + +Uw kunt [$1 uw wiki nu gebruiken]. + +Als u uw LocalSettings.php opnieuw wilt aanmaken, klik dan op de knop hieronder. +Dit is '''niet aan te raden''' tenzij u problemen hebt met uw wiki.", + 'config-upgrade-done-no-regenerate' => 'Het bijwerken is afgerond. + +U kunt u [$1 uw wiki gebruiken].', + 'config-regenerate' => 'LocalSettings.php opnieuw aanmaken →', + 'config-show-table-status' => 'Het uitvoeren van SHOW TABLE STATUS is mislukt!', + 'config-unknown-collation' => "'''Waarschuwing:''' de database gebruikt een collatie die niet wordt herkend.", + 'config-db-web-account' => 'Databasegebruiker voor webtoegang', + 'config-db-web-help' => 'Selecteer de gebruikersnaam en het wachtwoord die de webserver gebruikt om verbinding te maken met de databaseserver na de installatie.', + 'config-db-web-account-same' => 'Dezelfde gebruiker gebruiken als voor de installatie', + 'config-db-web-create' => 'Maak de gebruiker aan als deze nog niet bestaat', + 'config-db-web-no-create-privs' => 'De gebruiker die u hebt opgegeven voor de installatie heeft niet voldoende rechten om een gebruiker aan te maken. +De gebruiker die u hier opgeeft moet al bestaan.', + 'config-mysql-engine' => 'Opslagmethode:', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-engine-help' => "'''InnoDB''' is vrijwel altijd de beste instelling, omdat deze goed omgaat met meerdere verzoeken tegelijkertijd. + +'''MyISAM''' is bij een zeer beperkt aantal gebruikers mogelijk sneller, of als de wiki alleen-lezen is. +MyISAM-databases raken vaker corrupt dan InnoDB-databases.", + 'config-mysql-charset' => 'Tekenset voor de database:', + 'config-mysql-binary' => 'Binair', + 'config-mysql-utf8' => 'UTF-8', + 'config-mysql-charset-help' => "In '''binaire modus''' slaat MediaWiki tekst in UTF-8 op in binaire databasevelden. +Dit is efficiënter dan de UTF-8-modus van MySQL en stelt u in staat de volledige reeks Unicode-tekens te gebruiken. + +In '''UTF-8-modus''' kent MySQL de tekenset van uw gegevens en kan de databaseserver ze juist weergeven en converteren. +Het is dat niet mogelijk tekens op te slaan die de \"[http://nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.", + 'config-site-name' => 'Naam van de wiki:', + 'config-site-name-help' => 'Deze naam verschijnt in de titelbalk van browsers en op andere plaatsen.', + 'config-site-name-blank' => 'Geef een naam op voor de site.', + 'config-project-namespace' => 'Projectnaamruimte:', + 'config-ns-generic' => 'Project', + 'config-ns-site-name' => 'Zelfde als de wiki: $1', + 'config-ns-other' => 'Andere (geen aan welke)', + 'config-ns-other-default' => 'MijnWiki', + 'config-project-namespace-help' => "In het kielzog van Wikipedia beheren veel wiki's hun beleidspagina's apart van hun inhoudelijke pagina's in een \"'''projectnaamruimte'''\". +Alle paginanamen in deze naamruimte beginnen met een bepaald voorvoegsel dat u hier kunt aangeven. +Dit voorvoegsel wordt meestal afgeleid van de naam van de wiki, maar het kan geen bijzondere tekens bevatten als \"#\" of \":\".", + 'config-ns-invalid' => 'De aangegeven naamruimte "$1" is ongeldig. +Geef een andere naamruimte op.', + 'config-ns-conflict' => 'De aangegeven naamruimte "$1" conflicteert met een standaard naamruimte in MediaWiki. +Geef een andere naam op voor de projectnaamruimte.', + 'config-admin-box' => 'Beheerdersgebruiker', + 'config-admin-name' => 'Uw naam:', + 'config-admin-password' => 'Wachtwoord:', + 'config-admin-password-confirm' => 'Wachtwoord opnieuw:', + 'config-admin-help' => 'Voer de gebruikersnaam hier in, bijvoorbeeld "Jan Jansen". +Dit is de naam die wordt gebruikt om aan de melden bij de wiki.', + 'config-admin-name-blank' => 'Geef een gebruikersnaam op voor de beheerder.', + 'config-admin-name-invalid' => 'De opgegeven gebruikersnaam "$1" is ongeldig. +Kies een andere gebruikersnaam.', + 'config-admin-password-blank' => 'Voer een wachtwoord voor de beheerder in.', + 'config-admin-password-same' => 'Het wachtwoord mag niet hetzelfde zijn als de gebruikersnaam.', + 'config-admin-password-mismatch' => 'De twee door u ingevoerde wachtwoorden komen niet overeen.', + 'config-admin-email' => 'E-mailadres:', + 'config-admin-email-help' => "Voer hier een e-mailadres in om e-mail te kunnen ontvangen van andere gebruikers op de wiki, uw wachtwoord opnieuw in te kunnen stellen en op de hoogte te worden gehouden van wijzigingen van pagina's op uw volglijst.", + 'config-admin-error-user' => 'Interne fout bij het aanmaken van een beheerder met de naam "$1".', + 'config-admin-error-password' => 'Interne fout bij het instellen van een wachtwoord voor de bejeerder "$1":
    $2
    ', + 'config-admin-error-bademail' => 'U hebt een ongeldig e-mailadres opgegeven', + 'config-subscribe' => 'Abonneren op de [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce mailinglijst releaseaankondigen].', + 'config-subscribe-help' => 'Dit is een mailinglijst met een laag volume voor aankondigingen van nieuwe versies, inclusief belangrijke aankondigingen met betrekking tot beveiliging. +Abonneer uzelf erop en werk uw MediaWiki-installatie bij als er nieuwe versies uitkomen.', + 'config-almost-done' => 'U bent bijna klaar! +Als u wilt kunt u de overige instellingen overslaan en de wiki nu installeren.', + 'config-optional-continue' => 'Stel me meer vragen.', + 'config-optional-skip' => 'Laat dat maar, installeer gewoon de wiki.', + 'config-profile' => 'Gebruikersrechtenprofiel:', + 'config-profile-wiki' => 'Traditionele wiki', + 'config-profile-no-anon' => 'Gebruiker aanmaken verplicht', + 'config-profile-fishbowl' => 'Alleen voor geautoriseerde bewerkers', + 'config-profile-private' => 'Privéwiki', + 'config-profile-help' => "Wiki's werken het beste als ze door zoveel mogelijk gebruikers worden bewerkt. +In MediaWiki is het eenvoudig om de recente wijzigingen te controleren en eventuele foutieve of kwaadwillende bewerkingen terug te draaien. + +Daarnaast vinden velen MediaWiki goed inzetbaar in vele andere rollen, en soms is het niet handig om helemaal \"op de wikimanier\" te werken. +Daarom biedt dit installatieprogramma u de volgende keuzes voor de basisinstelling van gebruikersvrijheden: + +Een '''{{int:config-profile-wiki}}''' staat iedereen toe te bewerken, zonder zelfs aan te melden. +Een wiki met '''{{int:config-profile-no-anon}}\" biedt extra verantwoordelijkheid, maar kan afschrikken toevallige gebruikers afschrikken. + +Het scenario '''{{int:config-profile-fishbowl}}''' laat gebruikers waarvoor dat is ingesteld bewerkt, maar andere gebruikers kunnen alleen pagina's bekijken, inclusief de bewerkingsgeschiedenis. +In een '''{{int:config-profile-private}}''' kunnen alleen goedgekeurde gebruikers pagina's bekijken en bewerken. + +Meer complexe instellingen voor gebruikersrechten zijn te maken na de installatie; hierover is meer te lezen in de [http://www.mediawiki.org/wiki/Manual:User_rights handleiding].", + 'config-license' => 'Auteursrechten en licentie:', + 'config-license-none' => 'Geen licentie in de voettekst', + 'config-license-cc-by-sa' => 'Creative Commons Naamsvermelding-Gelijk delen', + 'config-license-cc-by-nc-sa' => 'Creative Commons Naamsvermelding-Niet Commercieel-Gelijk delen', + 'config-license-cc-0' => 'Creative Commons Zero', + 'config-license-gfdl-old' => 'GNU Free Documentation License 1.2', + 'config-license-gfdl-current' => 'GNU Free Documentation License 1.3 of hoger', + 'config-license-pd' => 'Publiek domein', + 'config-license-cc-choose' => 'Een Creative Commons-licentie selecteren', + 'config-license-help' => "In veel openbare wiki's zijn alle bijdragen beschikbaar onder een [http://freedomdefined.org/Definition vrije licentie]. +Dit helpt bij het creëren van een gevoel van gemeenschappelijk eigendom en stimuleert bijdragen op lange termijn. +Dit is over het algemeen niet nodig is voor een particuliere of zakelijke wiki. + +Als u teksten uit Wikipedia wilt kunnen gebruiken en u wilt het mogelijk maken teksten uit uw wiki naar Wikipedia te kopiëren, kies dan de licentie '''Creative Commons Naamsvermelding-Gelijk delen'''. + +De GNU Free Documentation License was de oude licentie voor inhoud uit Wikipedia. +Dit is nog steeds een geldige licentie, maar deze licentie heeft een aantal eigenschappen die hergebruik en interpretatie lastig kunnen maken.", + 'config-email-settings' => 'E-mailinstellingen', + 'config-enable-email' => 'Uitgaande e-mail inschakelen', + 'config-enable-email-help' => "Als u wilt dat e-mailen mogelijk is, dan moeten [http://www.php.net/manual/en/mail.configuration.php PHP's e-mailinstellingen] correct zijn. +Als u niet wilt dat e-mailen mogelijk is, dan kunt u de instellingen hier uitschakelen.", + 'config-email-user' => 'E-mail tussen gebruikers inschakelen', + 'config-email-user-help' => 'Gebruikers toestaan e-mail aan elkaar te verzenden als dit in de voorkeuren is ingesteld.', + 'config-email-usertalk' => 'Gebruikersoverlegnotificatie inschakelen', + 'config-email-usertalk-help' => 'Gebruikers toestaan notificaties te ontvangen bij wijzigingen op de eigen overlegpagina als dit in de voorkeuren is ingesteld', + 'config-email-watchlist' => 'Volglijstnotificatie inschakelen', + 'config-email-watchlist-help' => "Gebruikers toestaan notificaties te ontvangen bij wijzigingen van pagina's op hun volglijst als dit in de voorkeuren is ingesteld", + 'config-email-auth' => 'E-mailbevestiging inschakelen', + 'config-email-auth-help' => "Als deze instelling actief is, moeten gebruikers hun e-mailadres bevestigen via een verwijziging die ze per e-mail wordt toegezonden. +Alleen bevestigde e-mailadressen kunnen e-mail ontvangen van andere gebruikers of wijzigingsnotificaties ontvangen. +Het inschakelen van deze instelling is '''aan te raden''' voor openbare wiki's vanwege de mogelijkheden voor misbruik van e-mailmogelijkheden.", + 'config-email-sender' => 'E-mailadres voor antwoorden:', + 'config-email-sender-help' => 'Voer het e-mailadres in dat u wilt gebruiken als antwoordadres voor uitgaande e-mail. +Als een e-mail niet bezorgd kan worden, wordt dat op dit e-mailadres gemeld. +Veel mailservers vereisen dat tenminste het domein bestaat.', + 'config-upload-settings' => 'Afbeeldingen en bestanden uploaden', + 'config-upload-enable' => 'Uploaden van bestanden inschakelen', + 'config-upload-help' => "Het uploaden van bestanden stelt uw server mogelijk bloot aan beveiligingsrisico's. +Er is meer [http://www.mediawiki.org/wiki/Manual:Security informatie over beveiliging] beschikbaar in de handleiding. + +Om het bestandsuploads mogelijk te maken kunt u de rechten op de submap images onder de hoofdmap van MediaWiki aanpassen, zodat de webserver erin kan schrijven. +Daarmee wordt deze functie ingeschakeld.", + 'config-upload-deleted' => 'Map voor verwijderde bestanden:', + 'config-upload-deleted-help' => 'Kies een map waarin verwijderde bestanden gearchiveerd kunnen worden. +Idealiter is deze map niet via het web te benaderen.', + 'config-logo' => 'URL voor logo:', + 'config-logo-help' => 'Het standaarduiterlijk van MediaWiki bevat ruimte voor een logo van 135x160 pixels in de linker bovenhoek. +Upload een afbeelding met de juiste afmetingen en voer de URL hier in. + +Als u geen logo wilt gebruiken, kunt u dit veld leeg laten.', + 'config-instantcommons' => 'Instant Commons inschakelen', + 'config-instantcommons-help' => '[http://www.mediawiki.org/wiki/InstantCommons Instant Commons] is functie die het mogelijk maakt om afbeeldingen, geluidsbestanden en andere mediabestanden te gebruiken van de website [http://commons.wikimedia.org/ Wikimedia Commons]. +Hiervoor heeft MediaWiki toegang nodig tot Internet. + +Meer informatie over deze functie en hoe deze in te stellen voor andere wiki\'s dan Wikimedia Commons is te vinden in de [http://mediawiki.org/wiki/Manual:$wgForeignFileRepos handleiding].', + 'config-cc-error' => 'De licentiekiezer van Creative Commons heeft geen resultaat opgeleverd. +Voer de licentie handmatig in.', + 'config-cc-again' => 'Opnieuw kiezen...', + 'config-cc-not-chosen' => 'Kies alstublieft de Creative Commons-licentie die u wilt gebruiken en klik op "doorgaan".', + 'config-advanced-settings' => 'Gevorderde instellingen', + 'config-cache-options' => 'Instellingen voor het cachen van objecten:', + 'config-cache-help' => 'Het cachen van objecten wordt gebruikt om de snelheid van MediaWiki te verbeteren door vaak gebruikte gegevens te bewaren. +Middelgrote tot grote websites wordt geadviseerd dit in te schakelen en ook kleine sites merken de voordelen.', + 'config-cache-none' => 'Niets cachen. +Er gaat geen functionaliteit verloren, maar dit kan invloed hebben op de snelheid.', + 'config-cache-accel' => 'Cachen van objecten via PHP (APC, eAccelerator, XCache of WinCache)', + 'config-cache-memcached' => 'Memcached gebruiken (dit vereist aanvullende instellingen)', + 'config-memcached-servers' => 'Memcachedservers:', + 'config-memcached-help' => 'Lijst met IP-adressen te gebruiken voor Memcached. +Eén IP-adres per regel met een poortnummer. +Bijvoorbeeld: + 127.0.0.1:11211 + 192.168.1.25:1234', + 'config-memcache-needservers' => 'U hebt Memcached geselecteerd als uw cache, maar u hebt geen servers opgegeven.', + 'config-memcache-badip' => 'U hebt een ongeldig IP-adres ingevoerd voor Memcached: $1.', + 'config-memcache-noport' => 'U hebt geen poort opgegeven voor de Memcachedserver: $1. +De standaardpoort is 11211.', + 'config-memcache-badport' => 'Poortnummers voor Memcached moeten tussen $1 en $2 liggen.', + 'config-extensions' => 'Uitbreidingen', + 'config-extensions-help' => 'De bovenstaande uitbreidingen zijn aangetroffen in de map ./extensions. + +Mogelijk moet u aanvullende instellingen maken, maar u kunt deze uitbreidingen nu inschakelen.', + 'config-install-alreadydone' => "'''Waarschuwing:''' het lijkt alsof u MediaWiki al hebt geïnstalleerd en probeert het programma opnieuw te installeren. +Ga alstublieft door naar de volgende pagina.", + 'config-install-begin' => 'Als u nu op "{{int:config-continue}}" klikt, begint de installatie van MediaWiki. +Als u nog wijzigingen wilt maken, klik dan op "Terug".', + 'config-install-step-done' => 'Afgerond', + 'config-install-step-failed' => 'Mislukt', + 'config-install-extensions' => 'Inclusief uitbreidingen', + 'config-install-database' => 'Database inrichten', + 'config-install-pg-schema-not-exist' => 'Het schema voor PostgreSQL bestaat niet', + 'config-install-pg-schema-failed' => 'Het aanmaken van de tabellen is mislukt. +Zorg dat de gebruiker "$1" in het schema "$2" mag schrijven.', + 'config-install-pg-commit' => 'Wijzigingen worden doorgevoerd', + 'config-install-pg-plpgsql' => 'Controle op de taal PL/pgSQL', + 'config-pg-no-plpgsql' => 'U moet de taal PL/pgSQL installeren in de database $1', + 'config-pg-no-create-privs' => 'De gebruiker die u hebt opgegeven door de installatie heeft niet voldoende rechten om een gebruiker aan te maken.', + 'config-install-user' => 'Databasegebruiker aan het aanmaken', + 'config-install-user-alreadyexists' => 'Gebruiker "$1" bestaat al', + 'config-install-user-create-failed' => 'Het aanmaken van de gebruiker "$1" is mislukt: $2', + 'config-install-user-grant-failed' => 'Het geven van rechten aan gebruiker "$1" is mislukt: $2', + 'config-install-tables' => 'Tabellen aanmaken', + 'config-install-tables-exist' => "'''Waarschuwing''': de MediaWiki-tabellen lijken al te bestaan. +Het aanmaken wordt overgeslagen.", + 'config-install-tables-failed' => "'''Fout''': het aanmaken van een tabel is mislukt met de volgende foutmelding: $1", + 'config-install-interwiki' => 'Bezig met het vullen van de interwikitabel', + 'config-install-interwiki-list' => 'Het bestand interwiki.list is niet aangetroffen', + 'config-install-interwiki-exists' => "'''Waarschuwing''': de interwikitabel heeft al inhoud. +De standaardlijst wordt overgeslagen.", + 'config-install-stats' => 'Statistieken initialiseren', + 'config-install-keys' => 'Geheime sleutel aanmaken', + 'config-install-sysop' => 'Gebruiker voor beheerder aanmaken', + 'config-install-subscribe-fail' => 'Het is niet mogelijk te abonneren op mediawiki-announce', + 'config-install-mainpage' => 'Hoofdpagina aanmaken met standaard inhoud', + 'config-install-extension-tables' => 'Tabellen voor ingeschakelde uitbreidingen worden aangemaakt', + 'config-install-mainpage-failed' => 'Het was niet mogelijk de hoofdpagina in te voegen: $1', + 'config-install-done' => "'''Gefeliciteerd!''' +U hebt MediaWiki met geïnstalleerd. + +Het installatieprogramma heeft het bestand LocalSettings.php aangemaakt. +Dit bevat al uw instellingen. + +U moet het bestand downloaden en in de hoofdmap van uw wiki-installatie plaatsten; in dezelfde map als index.php. +De download moet u automatisch zijn aangeboden. + +Als de download niet is aangeboden of als u de download hebt geannuleerd, dan kunt u de download opnieuw starten door op de onderstaande verwijzing te klikken: + +$3 + +'''Let op''': als u dit niet nu doet, dan het is bestand als u later de installatieprocedure afsluit zonder het bestand te downloaden niet meer beschikbaar. + +Na het plaatsen van het bestand met instellingen kunt u '''[$2 uw wiki betreden]'''.", + 'config-download-localsettings' => 'LocalSettings.php downloaden', + 'config-help' => 'hulp', +); + +/** Norwegian Nynorsk (‪Norsk (nynorsk)‬) + * @author Nghtwlkr + */ +$messages['nn'] = array( + 'config-your-language' => 'Språket ditt:', + 'config-wiki-language' => 'Wikispråk:', + 'config-back' => '← Attende', + 'config-continue' => 'Hald fram →', + 'config-page-language' => 'Språk', + 'config-memory-raised' => 'PHPs memory_limit er $1, auka til $2.', + 'config-memory-bad' => "'''Advarsel:''' PHPs memory_limit er $1. +Dette er sannsynlegvis for lågt. +Installasjonen kan mislukkast!", + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] er innstallert', + 'config-apc' => '[http://www.php.net/apc APC] er innstallert', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] er innstallert', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] er installert', + 'config-db-name' => 'Databasenamn:', + 'config-db-username' => 'Databasebrukarnamn:', + 'config-db-password' => 'Databasepassord:', + 'config-db-charset' => 'Databaseteiknsett', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binær', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 bakoverkompatibel UTF-8', + 'config-mysql-old' => 'MySQL $1 eller seinare krevst, du har $2.', + 'config-db-port' => 'Databaseport:', + 'config-db-schema' => 'Skjema for MediaWiki', + 'config-header-mysql' => 'MySQL-innstillingar', + 'config-header-postgres' => 'PostgreSQL-innstillingar', + 'config-header-sqlite' => 'SQLite-innstillingar', + 'config-header-oracle' => 'Oracle-innstillingar', + 'config-invalid-db-type' => 'Ugyldig databasetype', + 'config-invalid-db-name' => 'Ugyldig databasenamn «$1». +Berre bruk ASCII-bokstavar (a-z, A-Z), tal (0-9) og undestrekar (_).', + 'config-invalid-db-prefix' => 'Ugyldig databaseprefiks «$1». +Berre bruk ASCII-bokstavar (a-z, A-Z), tal (0-9) og undestrekar (_).', + 'config-invalid-schema' => 'Ugyldig skjema for MediaWiki «$1». +Berre bruk ASCII-bokstavar (a-z, A-Z), tal (0-9) og undestrekar (_).', + 'config-postgres-old' => 'PostgreSQL $1 eller seinare krevst, du har $2.', + 'config-email-settings' => 'E-postinnstillingar', + 'config-logo' => 'Logo-URL:', +); + +/** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬) + * @author Jon Harald Søby + * @author Nghtwlkr + */ +$messages['no'] = array( + 'config-desc' => 'Installasjonsprogrammet for MediaWiki', + 'config-title' => 'Installasjon av MediaWiki $1', + 'config-information' => 'Informasjon', + 'config-localsettings-upgrade' => "'''Advarsel''': En LocalSettings.php-fil har blitt oppdaget. +Programvaren kan oppgraderes. +Flytt LocalSettings.php til et trygt sted og kjør installasjonsprogrammet på nytt.", + 'config-session-error' => 'Feil under oppstart av økt: $1', + 'config-session-expired' => 'Dine øktdata ser ut til å ha utløpt. +Økter er konfigurert for en levetid på $1. +Du kan øke dette ved å sette session.gc_maxlifetime i php.ini. +Start installasjonsprosessen på nytt.', + 'config-no-session' => 'Dine øktdata ble tapt! +Sjekk din php.ini og sørg for at session.save_path er satt til en passende mappe.', + 'config-your-language' => 'Ditt språk:', + 'config-your-language-help' => 'Velg et språk å bruke under installasjonsprosessen.', + 'config-wiki-language' => 'Wikispråk:', + 'config-wiki-language-help' => 'Velg språket som wikien hovedsakelig vil bli skrevet i.', + 'config-back' => '← Tilbake', + 'config-continue' => 'Fortsett →', + 'config-page-language' => 'Språk', + 'config-page-welcome' => 'Velkommen til MediaWiki!', + 'config-page-dbconnect' => 'Koble til database', + 'config-page-upgrade' => 'Oppgrader eksisterende innstallasjon', + 'config-page-dbsettings' => 'Databaseinnstillinger', + 'config-page-name' => 'Navn', + 'config-page-options' => 'Valg', + 'config-page-install' => 'Innstaller', + 'config-page-complete' => 'Ferdig!', + 'config-page-restart' => 'Start installasjonen på nytt', + 'config-page-readme' => 'Les meg', + 'config-page-releasenotes' => 'Utgivelsesnotat', + 'config-page-copying' => 'Kopiering', + 'config-page-upgradedoc' => 'Oppgradering', + 'config-help-restart' => 'Ønsker du å fjerne alle lagrede data som du har skrevet inn og starte installasjonsprosessen på nytt?', + 'config-restart' => 'Ja, start på nytt', + 'config-welcome' => '=== Miljøsjekker === +Grunnleggende sjekker utføres for å se om dette miljøet er egnet for en MediaWiki-installasjon. +Du bør oppgi resultatene fra disse sjekkene om du trenger hjelp under installasjonen.', + 'config-copyright' => "=== Opphavsrett og vilkår === + +$1 + +MediaWiki er fri programvare; du kan redistribuere det og/eller modifisere det under betingelsene i GNU General Public License som publisert av Free Software Foundation; enten versjon 2 av lisensen, eller (etter eget valg) enhver senere versjon. + +Dette programmet er distribuert i håp om at det vil være nyttig, men '''uten noen garanti'''; ikke engang implisitt garanti av '''salgbarhet''' eller '''egnethet for et bestemt formål'''. +Se GNU General Public License for flere detaljer. + +Du skal ha mottatt en kopi av GNU General Public License sammen med dette programmet; hvis ikke, skriv til Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA eller [http://www.gnu.org/copyleft/gpl.html les det på nettet].", + 'config-sidebar' => '* [http://www.mediawiki.org MediaWiki hjem] +* [http://www.mediawiki.org/wiki/Help:Contents Brukerguide] +* [http://www.mediawiki.org/wiki/Manual:Contents Administratorguide] +* [http://www.mediawiki.org/wiki/Manual:FAQ OSS]', + 'config-env-good' => 'Miljøet har blitt sjekket. +Du kan installere MediaWiki.', + 'config-env-bad' => 'Miljøet har blitt sjekket. +Du kan installere MediaWiki.', + 'config-env-php' => 'PHP $1 er innstallert.', + 'config-unicode-using-utf8' => 'Bruker Brion Vibbers utf8_normalize.so for Unicode-normalisering.', + 'config-unicode-using-intl' => 'Bruker [http://pecl.php.net/intl intl PECL-utvidelsen] for Unicode-normalisering.', + 'config-unicode-pure-php-warning' => "'''Advarsel''': [http://pecl.php.net/intl intl PECL-utvidelsen] er ikke tilgjengelig for å håndtere Unicode-normaliseringen. +Om du kjører et høy trafikksnettsted bør du lese litt om [http://www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode-normalisering].", + 'config-unicode-update-warning' => "'''Advarsel''': Den installerte versjonen av Unicode-normalisereren bruker en eldre versjon av [http://site.icu-project.org/ ICU-prosjektets] bibliotek. +Du bør [http://www.mediawiki.org/wiki/Unicode_normalization_considerations oppgradere] om du er bekymret for å bruke Unicode.", + 'config-no-db' => 'Fant ikke en passende databasedriver!', + 'config-no-db-help' => 'Du må installere en databasedriver for PHP. +Følgende databasetyper er støttet: $1. + +Om du er på delt tjener, spør din tjenerleverandør om å installere en passende databasedriver. +Om du kompilerte PHP selv, rekonfigirer den med en aktivert databaseklient, for eksempel ved å bruke ./configure --with-mysql. +Om du installerte PHP fra en Debian eller Ubuntu-pakke må du også installere modulen php5-mysql.', + 'config-no-fts3' => "'''Advarsel''': SQLite er kompilert uten [http://sqlite.org/fts3.html FTS3-modulen], søkefunksjoner vil ikke være tilgjengelig på dette bakstykket.", + 'config-register-globals' => "'''Advarsel: PHPs [http://php.net/register_globals register_globals]-alternativ er aktivert.''' +'''Deaktiver det om du kan.''' +MediaWiki vil fungere, men tjeneren din er utsatt for potensielle sikkerhetssårbarheter.", + 'config-magic-quotes-runtime' => "'''Kritisk: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] er aktiv!''' +Dette alternativet ødelegger inndata på en uforutsigbar måte. +Du kan ikke installere eller bruke MediaWiki med mindre dette alternativet deaktiveres.", + 'config-magic-quotes-sybase' => "'''Kritisk: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] er aktiv!''' +Dette alternativet ødelegger inndata på en uforutsigbar måte. +Du kan ikke installere eller bruke MediaWiki med mindre dette alternativet deaktiveres.", + 'config-mbstring' => "'''Kritisk: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] er aktiv!''' +Dette alternativet fører til feil og kan ødelegge data på en uforutsigbar måte. +Du kan ikke installere eller bruke MediaWiki med mindre dette alternativet deaktiveres.", + 'config-ze1' => "'''Kritisk: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] er aktiv!''' +Dette alternativet fører til horrible feil med MediaWiki. +Du kan ikke installere eller bruke MediaWiki med mindre dette alternativet deaktiveres.", + 'config-safe-mode' => "'''Advarsel:''' PHPs [http://www.php.net/features.safe-mode safe mode] er aktiv. +Det kan føre til problem, spesielt hvis du bruker støtte for filopplastinger og math.", + 'config-xml-bad' => 'PHPs XML-modul mangler. +MediaWiki krever funksjonene i denne modulen og vil ikke virke i denne konfigurasjonen. +Hvis du kjører Mandrak, installer pakken php-xml.', + 'config-pcre' => 'PCRE-støttemodulen ser ut til å mangle. +MediaWiki krever funksjonene for de Perl-kompatible regulære uttrykkene for å virke.', + 'config-memory-raised' => 'PHPs memory_limit er $1, økt til $2.', + 'config-memory-bad' => "'''Advarsel:''' PHPs memory_limit er $1. +Dette er sannsynligvis for lavt. +Installasjonen kan mislykkes!", + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] er innstallert', + 'config-apc' => '[http://www.php.net/apc APC] er innstallert', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] er innstallert', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] er installert', + 'config-no-cache' => "'''Advarsel:''' Kunne ikke finne [http://eaccelerator.sourceforge.net eAccelerator], [http://www.php.net/apc APC], [http://trac.lighttpd.net/xcache/ XCache] eller [http://www.iis.net/download/WinCacheForPhp WinCache]. +Objekthurtiglagring er ikke aktivert.", + 'config-diff3-bad' => 'GNU diff3 ikke funnet.', + 'config-imagemagick' => 'Fant ImageMagick: $1. +Bildeminiatyrisering vil aktiveres om du aktiverer opplastinger.', + 'config-gd' => 'Fant innebygd GD-grafikkbibliotek. +Bildeminiatyrisering vil aktiveres om du aktiverer opplastinger.', + 'config-no-scaling' => 'Kunne ikke finne GD-bibliotek eller ImageMagick. +Bildeminiatyrisering vil være deaktivert.', + 'config-no-uri' => "'''Feil:''' Kunne ikke bestemme gjeldende URI. +Installasjon avbrutt.", + 'config-uploads-not-safe' => "'''Advarsel:''' Din standardmappe for opplastinger $1 er sårbar for kjøring av vilkårlige skript. +Selv om MediaWiki sjekker alle opplastede filer for sikkerhetstrusler er det sterkt anbefalt å [http://www.mediawiki.org/wiki/Manual:Security#Upload_security lukke denne sikkerhetssårbarheten] før du aktiverer opplastinger.", + 'config-db-type' => 'Databasetype:', + 'config-db-host' => 'Databasevert:', + 'config-db-host-help' => 'Hvis databasetjeneren er på en annen tjener, skriv inn vertsnavnet eller IP-adressen her. + +Hvis du bruker en delt nettvert bør verten din oppgi det korrekte vertsnavnet i deres dokumentasjon. + +Hvis du installerer på en Windowstjener og bruker MySQL kan det hende at «localhost» ikke virker som tjenernavnet. Hvis ikke, prøv «127.0.0.1» for den lokale IP-adressen.', + 'config-db-host-oracle' => 'Database TNS:', + 'config-db-host-oracle-help' => 'Skriv inn et gyldig [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; en tnsnames.ora-fil må være synlig for installasjonsprosessen.
    Hvis du bruker klientbibliotek 10g eller nyere kan du også bruke navngivingsmetoden [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].', + 'config-db-wiki-settings' => 'Identifiser denne wikien', + 'config-db-name' => 'Databasenavn:', + 'config-db-name-help' => 'Velg et navn som identifiserer wikien din. +Det bør ikke inneholde mellomrom eller bindestreker. + +Hvis du bruker en delt nettvert vil verten din enten gi deg et spesifikt databasenavn å bruke, eller la deg opprette databaser via kontrollpanelet.', + 'config-db-name-oracle' => 'Databaseskjema:', + 'config-db-install-account' => 'Brukerkonto for installasjon', + 'config-db-username' => 'Databasebrukernavn:', + 'config-db-password' => 'Databasepassord:', + 'config-db-install-help' => 'Skriv inn brukernavnet og passordet som vil bli brukt for å koble til databasen under installasjonsprosessen.', + 'config-db-account-lock' => 'Bruk det samme brukernavnet og passordet under normal drift', + 'config-db-wiki-account' => 'Brukerkonto for normal drift', + 'config-db-wiki-help' => 'Skriv inn brukernavnet og passordet som vil bli brukt til å koble til databasen under normal wikidrift. +Hvis kontoen ikke finnes, og installasjonskontoen har tilstrekkelige privilegier, vil denne brukerkontoen bli opprettet med et minimum av privilegier, tilstrekkelig for å operere wikien.', + 'config-db-prefix' => 'Databasetabellprefiks:', + 'config-db-prefix-help' => 'Hvis du trenger å dele en database mellom flere wikier, eller mellom MediaWiki og andre nettapplikasjoner, kan du velge å legge til et prefiks til alle tabellnavnene for å unngå konflikter. +Ikke bruk mellomrom eller bindestreker. + +Dette feltet er vanligvis tomt.', + 'config-db-charset' => 'Databasetegnsett', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binær', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 bakoverkompatibel UTF-8', + 'config-charset-help' => "'''Advarsel:''' Hvis du bruker '''bakoverkompatibel UTF-8''' på MySQL 4.1+, og deretter sikkerhetskopierer databasen med mysqldump kan det ødelegge alle ikke-ASCII tegn og irreversibelt ødelegge dine sikkerhetskopier! + +I '''binary mode''' lagrer MediaWiki UTF-8 tekst til databasen i binærfelt. +Dette er mer effektivt enn MySQLs UTF-8 modus og tillater deg å bruke hele spekteret av Unicode-tegn. +I '''UTF-8 mode''' vil MySQL vite hvilket tegnsett dataene dine er i og kan presentere og konvertere det på en riktig måte, +men det vil ikke la deg lagre tegn over «[http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes the Basic Multilingual Plane]».", + 'config-mysql-old' => 'MySQL $1 eller senere kreves, du har $2.', + 'config-db-port' => 'Databaseport:', + 'config-db-schema' => 'Skjema for MediaWiki', + 'config-db-schema-help' => 'Ovennevnte skjema er som regel riktig. +Bare endre dem hvis du vet at du trenger det.', + 'config-sqlite-dir' => 'SQLite datamappe:', + 'config-sqlite-dir-help' => "SQLite lagrer alle data i en enkelt fil. + +Mappen du oppgir må være skrivbar for nettjeneren under installasjonen. + +Den bør '''ikke''' være tilgjengelig fra nettet, dette er grunnen til at vi ikke legger det der PHP-filene dine er. + +Installasjonsprogrammet vil skrive en .htaccess-fil sammen med det, men om det mislykkes kan noen få tilgang til din råe database. Dette inkluderer rå brukerdata (e-postadresser, hashede passord) samt slettede revisjoner og andre begrensede data på wikien. + +Vurder å plassere databasen et helt annet sted, for eksempel i /var/lib/mediawiki/yourwiki.", + 'config-oracle-def-ts' => 'Standard tabellrom:', + 'config-oracle-temp-ts' => 'Midlertidig tabellrom:', + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Oracle', + 'config-support-info' => 'MediaWiki støtter følgende databasesystem: + +$1 + +Hvis du ikke ser databasesystemet du prøver å bruke i listen nedenfor, følg instruksjonene det er lenket til over for å aktivere støtte.', + 'config-support-mysql' => '* $1 er det primære målet for MediaWiki og er best støttet ([http://www.php.net/manual/en/mysql.installation.php hvordan kompilere PHP med MySQL-støtte])', + 'config-support-postgres' => '* $1 er et populært åpen kildekode-databasesystem som er et alternativ til MySQL ([http://www.php.net/manual/en/pgsql.installation.php hvordan kompilere PHP med PostgreSQL-støtte])', + 'config-support-sqlite' => '* $1 er et lettvekts-databasesystem som er veldig godt støttet. ([http://www.php.net/manual/en/pdo.installation.php hvordan kompilere PHP med SQLite-støtte], bruker PDO)', + 'config-support-oracle' => '* $1 er en kommersiell bedriftsdatabase. ([http://www.php.net/manual/en/oci8.installation.php Hvordan kompilere PHP med OCI8-støtte])', + 'config-header-mysql' => 'MySQL-innstillinger', + 'config-header-postgres' => 'PostgreSQL-innstillinger', + 'config-header-sqlite' => 'SQLite-innstillinger', + 'config-header-oracle' => 'Oracle-innstillinger', + 'config-invalid-db-type' => 'Ugyldig databasetype', + 'config-missing-db-name' => 'Du må skrive inn en verdi for «Databasenavn»', + 'config-missing-db-server-oracle' => 'Du må skrive inn en verdi for «Database TNS»', + 'config-invalid-db-server-oracle' => 'Ugyldig database-TNS «$1». +Bruk bare ASCII-bokstaver (a-z, A-Z), tall (0-9) og undestreker (_) og punktum (.).', + 'config-invalid-db-name' => 'Ugyldig databasenavn «$1». +Bruk bare ASCII-bokstaver (a-z, A-Z), tall (0-9) og undestreker (_).', + 'config-invalid-db-prefix' => 'Ugyldig databaseprefiks «$1». +Bruk bare ASCII-bokstaver (a-z, A-Z), tall (0-9) og undestreker (_).', + 'config-connection-error' => '$1. + +Sjekk verten, brukernavnet og passordet nedenfor og prøv igjen.', + 'config-invalid-schema' => 'Ugyldig skjema for MediaWiki «$1». +Bruk bare ASCII-bokstaver (a-z, A-Z), tall (0-9) og undestreker (_).', + 'config-postgres-old' => 'PostgreSQL $1 eller senere kreves, du har $2.', + 'config-sqlite-name-help' => 'Velg et navn som identifiserer wikien din. +Ikke bruk mellomrom eller bindestreker. +Dette vil bli brukt til SQLite-datafilnavnet.', + 'config-sqlite-parent-unwritable-group' => 'Kan ikke opprette datamappen $1 fordi foreldremappen $2 ikke er skrivbar for nettjeneren. + +Installasjonsprogrammet har bestemt brukeren nettjeneren din kjører som. +Gjør $3-mappen skrivbar for denne for å fortsette. +På et Unix/Linux-system, gjør: + +
    cd $2
    +mkdir $3
    +chgrp $4 $3
    +chmod g+w $3
    ', + 'config-sqlite-parent-unwritable-nogroup' => 'Kan ikke opprette datamappen $1 fordi foreldremappen $2 ikke er skrivbar for nettjeneren. + +Installasjonsprogrammet kunne ikke bestemme brukeren nettjeneren din kjører som. +Gjør $3-mappen globalt skrivbar for denne (og andre!) for å fortsette. +På et Unix/Linux-system, gjør: + +
    cd $2
    +mkdir $3
    +chmod a+w $3
    ', + 'config-sqlite-mkdir-error' => 'Feil under oppretting av datamappen «$1». +Sjekk plasseringen og prøv igjen.', + 'config-sqlite-dir-unwritable' => 'Kan ikke skrive til mappen «$1». +Endre dens tilganger slik at nettjeneren kan skrive til den og prøv igjen.', + 'config-sqlite-connection-error' => '$1. + +Sjekk datamappen og databasenavnet nedenfor og prøv igjen.', + 'config-sqlite-readonly' => 'Filen $1 er ikke skrivbar.', + 'config-sqlite-cant-create-db' => 'Kunne ikke opprette databasefilen $1.', + 'config-sqlite-fts3-downgrade' => 'PHP mangler FTS3-støtte, nedgraderer tabeller', + 'config-can-upgrade' => "Det er MediaWiki-tabeller i denne databasen. +For å oppgradere dem til MediaWiki $1, klikk '''Fortsett'''.", + 'config-upgrade-done' => "Oppgradering fullført. + +Du kan nå [$1 begynne å bruke wikien din]. + +Hvis du ønsker å regenerere LocalSettings.php-filen din, klikk på knappen nedenfor. +Dette er '''ikke anbefalt''' med mindre du har problemer med wikien din.", + 'config-regenerate' => 'Regenerer LocalSettings.php →', + 'config-show-table-status' => 'SHOW TABLE STATUS etterspørselen mislyktes!', + 'config-unknown-collation' => "'''Advarsel:''' Databasen bruker en ukjent sortering.", + 'config-db-web-account' => 'Databasekonto for nettilgang', + 'config-db-web-help' => 'Velg brukernavnet og passordet som nettjeneren skal bruke for å koble til databasetjeneren under ordinær drift av wikien.', + 'config-db-web-account-same' => 'Bruk samme konto som for installasjonen', + 'config-db-web-create' => 'Opprett kontoen om den ikke finnes allerede', + 'config-db-web-no-create-privs' => 'Kontoen du oppga for installasjonen har ikke nok privilegier til å opprette en konto. +Kontoen du oppgir her må finnes allerede.', + 'config-mysql-engine' => 'Lagringsmotor:', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-engine-help' => "'''InnoDB''' er nesten alltid det beste alternativet siden den har god støtte for samtidighet («concurrency»). + +'''MyISAM''' kan være raskere i enbruker- eller les-bare-installasjoner. +MyISAM-databaser har en tendens til å bli ødelagt oftere enn InnoDB-databaser.", + 'config-mysql-charset' => 'Databasetegnsett:', + 'config-mysql-binary' => 'Binær', + 'config-mysql-utf8' => 'UTF-8', + 'config-mysql-charset-help' => "I '''binary mode''' lagrer MediaWiki UTF-8 tekst til databasen i binærfelt. +Dette er mer effektivt enn MySQLs UTF-8 modus og tillater deg å bruke hele spekteret av Unicode-tegn. + +I '''UTF-8 mode''' vil MySQL vite hvilket tegnsett dataene dine er i og kan presentere og konvertere det på en riktig måte, +men det vil ikke la deg lagre tegn over «[http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes the Basic Multilingual Plane]».", + 'config-site-name' => 'Navn på wiki:', + 'config-site-name-help' => 'Dette vil vises i tittellinjen i nettleseren og diverse andre steder.', + 'config-site-name-blank' => 'Skriv inn et nettstedsnavn.', + 'config-project-namespace' => 'Prosjektnavnerom:', + 'config-ns-generic' => 'Prosjekt', + 'config-ns-site-name' => 'Samme som wikinavnet: $1', + 'config-ns-other' => 'Annet (spesifiser)', + 'config-ns-other-default' => 'MyWiki', + 'config-project-namespace-help' => "Etter Wikipedias eksempel holder mange wikier deres sider med retningslinjer atskilt fra sine innholdssider, i et «'''prosjektnavnerom'''». +Alle sidetitler i dette navnerommet starter med et gitt prefiks som du kan angi her. +Tradisjonelt er dette prefikset avledet fra navnet på wikien, men det kan ikke innholde punkttegn som «#» eller «:».", + 'config-ns-invalid' => 'Det angitte navnerommet «$1» er ugyldig. +Angi et annet prosjektnavnerom.', + 'config-admin-box' => 'Administratorkonto', + 'config-admin-name' => 'Ditt navn:', + 'config-admin-password' => 'Passord:', + 'config-admin-password-confirm' => 'Passord igjen:', + 'config-admin-help' => 'Skriv inn ditt ønskede brukernavn her, for eksempel «Joe Bloggs». +Dette er navnet du vil bruke for å logge inn på denne wikien.', + 'config-admin-name-blank' => 'Skriv inn et administratorbrukernavn.', + 'config-admin-name-invalid' => 'Det angitte brukernavnet «$1» er ugyldig. +Angi et annet brukernavn.', + 'config-admin-password-blank' => 'Skriv inn et passord for administratorkontoen.', + 'config-admin-password-same' => 'Passordet skal ikke være det samme som brukernavnet.', + 'config-admin-password-mismatch' => 'De to passordene du skrev inn samsvarte ikke.', + 'config-admin-email' => 'E-postadresse:', + 'config-admin-email-help' => 'Skriv inn en e-postadresse her for at du skal kunne motta e-post fra andre brukere på wikien, tilbakestille passordet ditt, og bli varslet om endringer på sider på overvåkningslisten din.', + 'config-admin-error-user' => 'Intern feil ved opprettelse av en admin med navnet «$1».', + 'config-admin-error-password' => 'Intern feil ved opprettelse av passord for admin «$1»:
    $2
    ', + 'config-subscribe' => 'Abonner på [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce e-postlisten for utgivelsesannonseringer].', + 'config-subscribe-help' => 'Dette er en lav-volums e-postliste brukt til utgivelsesannonseringer, herunder viktige sikkerhetsannonseringer. +Du bør abonnere på den og oppdatere MediaWikiinstallasjonen din når nye versjoner kommer ut.', + 'config-almost-done' => 'Du er nesten ferdig! +Du kan hoppe over de resterende konfigurasjonene og installere wikien nå.', + 'config-optional-continue' => 'Spør meg flere spørsmål.', + 'config-optional-skip' => 'Jeg er lei, bare installer wikien.', + 'config-profile' => 'Brukerrettighetsprofil:', + 'config-profile-wiki' => 'Tradisjonell wiki', + 'config-profile-no-anon' => 'Kontoopprettelse påkrevd', + 'config-profile-fishbowl' => 'Kun autoriserte bidragsytere', + 'config-profile-private' => 'Privat wiki', + 'config-profile-help' => "Wikier fungerer best når du lar så mange mennesker som mulig redigere den. +I MediaWiki er det lett å revidere siste endringer og tilbakestille eventuell skade som er gjort av naive eller ondsinnede brukere. + +Imidlertid har mange funnet at MediaWiki er nyttig i mange roller, og av og til er det ikke lett å overbevise alle om fordelene med wikimåten. +Så du har valget. + +En '''{{int:config-profile-wiki}}''' tillater alle å redigere, selv uten å logge inn. +En wiki med '''{{int:config-profile-no-anon}}''' tilbyr ekstra ansvarlighet, men kan avskrekke tilfeldige bidragsytere. + +'''{{int:config-profile-fishbowl}}'''-scenariet tillater godkjente brukere å redigere, mens publikum kan se sider, og også historikken. +En '''{{int:config-profile-private}}''' tillater kun godkjente brukere å se sider, den samme gruppen som får lov til å redigere dem. + +Mer komplekse konfigurasjoner av brukerrettigheter er tilgjengelig etter installasjon, se det [http://www.mediawiki.org/wiki/Manual:User_rights relevante manualavsnittet].", + 'config-license' => 'Opphavsrett og lisens:', + 'config-license-cc-by-sa' => 'Creative Commons Navngivelse Del på samme vilkår', + 'config-license-cc-by-nc-sa' => 'Creative Commons Navngivelse Ikke-kommersiell Del på samme vilkår', + 'config-license-gfdl-old' => 'GNU Free Documentation License 1.2', + 'config-license-gfdl-current' => 'GNU Free Documentation License 1.3 eller nyere', + 'config-license-pd' => 'Offentlig rom', + 'config-license-cc-choose' => 'Velg en egendefinert Creative Commons-lisens', + '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å [http://www.php.net/manual/en/mail.configuration.php PHPs e-postinnstillinger] bli konfigurert riktig. +Hvis 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-email-usertalk-help' => 'Tillat brukere å motta varsler ved endringer på deres brukerdiskusjonsside hvis de har aktivert dette i deres innstillinger.', + 'config-email-watchlist' => 'Aktiver overvåkningslistevarsler', + 'config-email-watchlist-help' => 'Tillat brukere å motta varsler ved endringer på deres overvåkede sider hvis de har aktivert dette i deres innstillinger.', + 'config-email-auth' => 'Aktiver e-postautentisering', + 'config-email-auth-help' => "Om dette alternativet er aktivert må brukere bekrefte sin e-postadresse ved å bruke en lenke som blir sendt til dem når de setter eller endrer adressen sin. +Kun autentiserte e-postadresser kan motta e-post fra andre brukere eller endringsvarsel. +Å sette dette valget er '''anbefalt''' for offentlige wikier på grunn av potensiell misbruk av e-postfunksjonene.", + 'config-email-sender' => 'Svar-e-postadresse:', + 'config-email-sender-help' => 'Skriv inn e-postadressen som skal brukes som svar-adresse ved utgående e-post. +Det er hit returmeldinger vil bli sendt. +Mange e-posttjenere krever at minst domenenavnet må være gyldig.', + 'config-upload-settings' => 'Bilde- og filopplastinger', + 'config-upload-enable' => 'Aktiver filopplastinger', + 'config-upload-help' => 'Filopplastinger kan potensielt utsette tjeneren din for sikkerhetsrisikoer. +For mer informasjon, les [http://www.mediawiki.org/wiki/Manual:Security sikkerhetsseksjonen] i manualen. + +For å aktivere filopplastinger, endre modusen i images-undermappen i MediaWikis rotmappe slik at nettjeneren kan skrive til den. +Aktiver så dette alternativet.', + 'config-upload-deleted' => 'Mappe for slettede filer:', + 'config-upload-deleted-help' => 'Velg en mappe for å arkivere slettede filer. +Ideelt burde ikke denne være tilgjengelig for nettet.', + 'config-logo' => 'Logo-URL:', + 'config-logo-help' => 'MediaWikis standarddrakt inkluderer plass til en 135x160 pikslers logo i øvre venstre hjørne. +Last opp et bilde i passende størrelse og skriv inn nettadressen her. + +Hvis du ikke ønsker en logo, la denne boksen være tom.', + 'config-instantcommons' => 'Aktiver Instant Commons', + 'config-instantcommons-help' => '[http://www.mediawiki.org/wiki/InstantCommons Instant Commons] er en funksjon som gjør det mulig for wikier å bruke bilder, lyder og andre media funnet på nettstedet [http://commons.wikimedia.org/ Wikimedia Commons]. +For å gjøre dette krever MediaWiki tilgang til internett. + +For mer informasjon om denne funksjonen, inklusive instruksjoner om hvordan man setter opp dette for andre wikier enn Wikimedia Commons, konsulter [http://mediawiki.org/wiki/Manual:$wgForeignFileRepos manualen].', + 'config-cc-again' => 'Velg igjen...', + 'config-cc-not-chosen' => 'Velg hvilken Creative Commons-lisens du ønsker og klikk «fortsett».', + 'config-advanced-settings' => 'Avansert konfigurasjon', + 'config-extensions' => 'Utvidelser', + 'config-install-step-done' => 'ferdig', + 'config-install-step-failed' => 'mislyktes', + 'config-install-extensions' => 'Inkludert utvidelser', + 'config-install-database' => 'Setter opp database', + 'config-install-user' => 'Oppretter databasebruker', + 'config-install-tables' => 'Oppretter tabeller', +); + +/** Polish (Polski) + * @author Holek + * @author Sp5uhe + */ +$messages['pl'] = array( + 'config-desc' => 'Instalator MediaWiki', + 'config-title' => 'Instalacja MediaWiki $1', + 'config-information' => 'Informacja', + 'config-localsettings-upgrade' => 'Plik LocalSettings.php istnieje. +Aby oprogramowanie zostało zaktualizowane musisz wstawić wartość $wgUpgradeKey w poniższe pole. +Odnajdziesz ją w LocalSettings.php.', + 'config-localsettings-cli-upgrade' => 'Wykryto obecność pliku LocalSettings.php. +Do wykonania aktualizacji instalacji należy dodać opcję --upgrade=yes.', + 'config-localsettings-key' => 'Klucz aktualizacji', + 'config-localsettings-badkey' => 'Podany klucz jest nieprawidłowy', + 'config-upgrade-key-missing' => 'Wykryto zainstalowane wcześniej MediaWiki. +Jeśli chcesz je zaktualizować dodaj na koniec pliku LocalSettings.php poniższą linię tekstu. + +$1', + 'config-localsettings-incomplete' => 'Istniejący plik LocalSettings.php wygląda na niekompletny. +Brak wartości zmiennej $1. +Zmień plik LocalSettings.php, tak by zawierał deklarację wartości tej zmiennej, a następnie kliknij „Dalej”.', + 'config-localsettings-connection-error' => 'Wystąpił błąd podczas łączenia z bazą danych z wykorzystaniem danych z LocalSettings.php lub AdminSettings.php. +Popraw ustawienia i spróbuj ponownie. + +$1', + 'config-session-error' => 'Błąd uruchomienia sesji – $1', + 'config-session-expired' => 'Wygląda na to, że Twoja sesja wygasła. +Czas życia sesji został skonfigurowany na $1. +Możesz go wydłużyć zmieniając session.gc_maxlifetime w pliku php.ini. +Uruchom ponownie proces instalacji.', + 'config-no-session' => 'Dane sesji zostały utracone. +Sprawdź plik php.ini i upewnij się, że session.save_path wskazuje na odpowiedni katalog.', + 'config-your-language' => 'Język', + 'config-your-language-help' => 'Wybierz język używany podczas procesu instalacji.', + 'config-wiki-language' => 'Język wiki', + 'config-wiki-language-help' => 'Wybierz język, w którym będzie tworzona większość treści wiki', + 'config-back' => '← Wstecz', + 'config-continue' => 'Dalej →', + 'config-page-language' => 'Język', + 'config-page-welcome' => 'Witamy w MediaWiki!', + 'config-page-dbconnect' => 'Połączenie z bazą danych', + 'config-page-upgrade' => 'Uaktualnienie istniejącej instalacji', + 'config-page-dbsettings' => 'Ustawienia bazy danych', + 'config-page-name' => 'Nazwa', + 'config-page-options' => 'Opcje', + 'config-page-install' => 'Instaluj', + 'config-page-complete' => 'Zakończono!', + 'config-page-restart' => 'Ponowne uruchomienie instalacji', + 'config-page-readme' => 'Podstawowe informacje', + 'config-page-releasenotes' => 'Informacje o wersji', + 'config-page-copying' => 'Kopiowanie', + 'config-page-upgradedoc' => 'Uaktualnienie', + 'config-page-existingwiki' => 'Istniejąca wiki', + 'config-help-restart' => 'Czy chcesz usunąć wszystkie zapisane dane, które podałeś i uruchomić ponownie proces instalacji?', + 'config-restart' => 'Tak, zacznij od nowa', + 'config-welcome' => '=== Sprawdzenie środowiska instalacji === +Wykonywane są podstawowe testy sprawdzające czy to środowisko jest odpowiednie dla instalacji MediaWiki. +Jeśli potrzebujesz pomocy podczas instalacji załącz wyniki tych testów.', + 'config-copyright' => "=== Prawa autorskie i warunki użytkowania === + +$1 + +To oprogramowanie jest wolne; możesz je rozprowadzać dalej i modyfikować zgodnie z warunkami licencji GNU General Public License opublikowanej przez Free Software Foundation w wersji 2 tej licencji lub (według Twojego wyboru) którejś z późniejszych jej wersji. + +Niniejsze oprogramowanie jest rozpowszechniane w nadziei, że będzie użyteczne, ale '''bez żadnej gwarancji'''; nawet bez domniemanej gwarancji '''handlowej''' lub '''przydatności do określonego celu'''. +Zobacz treść licencji GNU General Public License, aby uzyskać więcej szczegółów. + +Razem z oprogramowaniem powinieneś otrzymać kopię licencji GNU General Public License. Jeśli jej nie otrzymałeś, napisz do Free Software Foundation, Inc, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. lub [http://www.gnu.org/copyleft/gpl.html przeczytaj ją online].", + 'config-sidebar' => '* [http://www.mediawiki.org Strona domowa MediaWiki] +* [http://www.mediawiki.org/wiki/Help:Contents Podręcznik użytkownika] +* [http://www.mediawiki.org/wiki/Manual:Contents Podręcznik administratora] +* [http://www.mediawiki.org/wiki/Manual:FAQ Odpowiedzi na często zadawane pytania] +---- +* Przeczytaj to +* Informacje o tej wersji +* Kopiowanie +* Aktualizacja', + 'config-env-good' => 'Środowisko oprogramowania zostało sprawdzone. +Możesz teraz zainstalować MediaWiki.', + 'config-env-bad' => 'Środowisko oprogramowania zostało sprawdzone. +Nie możesz zainstalować MediaWiki.', + 'config-env-php' => 'Zainstalowane jest PHP w wersji $1.', + 'config-unicode-using-utf8' => 'Korzystanie z normalizacji Unicode utf8_normalize.so napisanej przez Brion Vibbera.', + 'config-unicode-using-intl' => 'Korzystanie z [http://pecl.php.net/intl rozszerzenia intl PECL] do normalizacji Unicode.', + 'config-unicode-pure-php-warning' => "'''Uwaga!''' [http://pecl.php.net/intl Rozszerzenie intl PECL] do obsługi normalizacji Unicode nie jest dostępne. Użyta zostanie mało wydajna zwykła implementacja w PHP. +Jeśli prowadzisz stronę o dużym natężeniu ruchu, powinieneś zapoznać się z informacjami o [http://www.mediawiki.org/wiki/Unicode_normalization_considerations normalizacji Unicode].", + 'config-unicode-update-warning' => "'''Uwaga''' – zainstalowana wersja normalizacji Unicode korzysta z nieaktualnej biblioteki [http://site.icu-project.org/ projektu ICU]. +Powinieneś [http://www.mediawiki.org/wiki/Unicode_normalization_considerations zrobić aktualizację] jeśli chcesz korzystać w pełni z Unicode.", + 'config-no-db' => 'Nie można odnaleźć właściwego sterownika bazy danych!', + 'config-no-db-help' => 'Należy zainstalować sterownik bazy danych dla PHP. +Obsługiwane są następujące typy baz danych: $1. + +Jeżeli korzystasz ze współdzielonego hostingu, zwróć się do administratora o zainstalowanie odpowiedniego sterownika bazy danych. +Jeśli skompilowałeś PHP samodzielnie, skonfiguruj je ponownie z włączonym klientem bazy danych, na przykład za pomocą polecenia +./configure --with-mysql. +Jeśli zainstalowałeś PHP jako pakiet Debiana lub Ubuntu, musisz również zainstalować moduł php5-mysql.', + 'config-no-fts3' => "'''Uwaga''' – SQLite został skompilowany bez [http://sqlite.org/fts3.html modułu FTS3] – funkcje wyszukiwania nie będą dostępne.", + 'config-register-globals' => "'''Uwaga – w konfiguracji PHP włączona jest opcja [http://php.net/register_globals register_globals].''' +'''Jeśli możesz, wyłącz ją.''' +MediaWiki będzie działać, ale Twój serwer może być narażony potencjalnymi lukami w zabezpieczeniach.", + 'config-magic-quotes-runtime' => "'''Błąd krytyczny – włączono [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]!''' +Ta opcja powoduje nieprzewidywalne uszkodzenia wprowadzanych danych. +Zainstalować lub korzystać z MediaWiki można pod warunkiem, że ta opcja jest wyłączona.", + 'config-magic-quotes-sybase' => "'''Błąd krytyczny – włączono [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]!''' +Ta opcja powoduje nieprzewidywalne uszkodzenia wprowadzanych danych. +Zainstalować lub korzystać z MediaWiki można pod warunkiem, że ta opcja jest wyłączona.", + 'config-mbstring' => "'''Błąd krytyczny – włączono [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!''' +Ta opcja powoduje błędy i może wywołać nieprzewidywalne uszkodzenia wprowadzanych danych. +Zainstalować lub korzystać z MediaWiki można pod warunkiem, że ta opcja jest wyłączona.", + 'config-ze1' => "'''Błąd krytyczny – włączono [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]!''' +Ta opcja powoduje okropne błędy podczas korzystania z MediaWiki. +Zainstalować lub korzystać z MediaWiki można wyłącznie wtedy, gdy ta opcja jest wyłączona.", + 'config-safe-mode' => "'''Ostrzeżenie''' – uaktywniono [http://www.php.net/features.safe-mode tryb awaryjny] PHP. +Opcja ta może powodować problemy, szczególnie w przypadku korzystania z przesyłania plików i używania znacznika math.", + 'config-xml-bad' => 'Brak modułu XML dla PHP. +MediaWiki wymaga funkcji z tego modułu i nie może działać w tej konfiguracji. +Jeśli korzystasz z Mandrake, zainstaluj pakiet php-xml.', + 'config-pcre' => 'Wygląda na to, że brak modułu PCRE. +MediaWiki do pracy wymaga funkcji obsługi wyrażeń regularnych kompatybilnej z Perlem.', + 'config-pcre-no-utf8' => "'''Błąd krytyczny''' – wydaje się, że moduł PCRE w PHP został skompilowany bez wsparcia dla UTF‐8. +MediaWiki wymaga wsparcia dla UTF‐8 do prawidłowego działania.", + 'config-memory-raised' => 'PHP memory_limit było ustawione na $1, zostanie zwiększone do $2.', + 'config-memory-bad' => "'''Uwaga:''' PHP memory_limit jest ustawione na $1. +To jest prawdopodobnie zbyt mało. +Instalacja może się nie udać!", + 'config-xcache' => '[Http://trac.lighttpd.net/xcache/ XCache] jest zainstalowany', + 'config-apc' => '[Http://www.php.net/apc APC] jest zainstalowany', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] jest zainstalowany', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] jest zainstalowany', + 'config-no-cache' => "'''Uwaga:''' Nie można odnaleźć [http://eaccelerator.sourceforge.net eAccelerator], [http://www.php.net/apc APC], [http://trac.lighttpd.net/xcache/ XCache] lub [http://www.iis.net/download/WinCacheForPhp WinCache]. +Buforowanie obiektów nie będzie możliwe.", + 'config-diff3-bad' => 'Nie znaleziono GNU diff3.', + 'config-imagemagick' => 'Odnaleziono ImageMagick $1. +Miniatury grafik będą generowane jeśli włączysz przesyłanie plików.', + 'config-gd' => 'Odnaleziono wbudowaną bibliotekę graficzną GD. +Miniatury grafik będą generowane jeśli włączysz przesyłanie plików.', + 'config-no-scaling' => 'Nie można odnaleźć biblioteki GD lub ImageMagick. +Tworzenie miniatur grafik będzie wyłączone.', + 'config-no-uri' => "'''Błąd.''' Nie można określić aktualnego URI. +Instalacja została przerwana.", + 'config-uploads-not-safe' => "'''Uwaga''' – domyślny katalog do którego zapisywane są przesyłane pliki $1 jest podatny na wykonanie dowolnego skryptu. +Chociaż MediaWiki sprawdza wszystkie przesłane pliki pod kątem bezpieczeństwa, zaleca się jednak, aby [http://www.mediawiki.org/wiki/Manual:Security#Upload_security zamknąć tę lukę w zabezpieczeniach] przed włączeniem przesyłania plików.", + 'config-brokenlibxml' => 'Twój system jest kombinacją wersji PHP i libxml2, które zawierają błędy mogące powodować ukryte uszkodzenia danych w MediaWiki i innych aplikacjach sieci web. +Wykonaj aktualizację PHP do wersji 5.2.9 lub późniejszej oraz libxml2 do wersji 2.7.3 lub późniejszej ([http://bugs.php.net/bug.php?id=45996 błąd w PHP]). +Instalacja została przerwana.', + 'config-using531' => 'PHP $1 nie współpracuje poprawnie z MediaWiki z powodu błędu dotyczącego referencyjnych argumentów funkcji __call(). +Uaktualnij do PHP 5.3.2 lub nowszego. Możesz również cofnąć wersję do PHP 5.3.0 aby naprawić ten błąd ([http://bugs.php.net/bug.php?id=50394 błąd w PHP]). +Instalacja została przerwana.', + 'config-db-type' => 'Typ bazy danych', + 'config-db-host' => 'Adres serwera bazy danych', + 'config-db-host-help' => 'Jeśli serwer bazy danych jest na innej maszynie, wprowadź jej nazwę domenową lub adres IP. + +Jeśli korzystasz ze współdzielonego hostingu, operator serwera powinien podać Ci prawidłową nazwę serwera w swojej dokumentacji. + +Jeśli instalujesz oprogramowanie na serwerze Windowsowym i korzystasz z MySQL, użycie „localhost” może nie zadziałać jako nazwa hosta. Jeśli wystąpi ten problem użyj „127.0.0.1” jako lokalnego adresu IP.', + 'config-db-host-oracle' => 'TNS bazy danych', + 'config-db-host-oracle-help' => 'Wprowadź prawidłową [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nazwę połączenia lokalnego]. Plik „tnsnames.ora” musi być widoczny dla instalatora.
    Jeśli używasz biblioteki klienckiej 10g lub nowszej możesz również skorzystać z metody nazw [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm łatwego łączenia].', + 'config-db-wiki-settings' => 'Zidentyfikuj tę wiki', + 'config-db-name' => 'Nazwa bazy danych', + 'config-db-name-help' => 'Wybierz nazwę, która zidentyfikuje Twoją wiki. +Nie może ona zawierać spacji. + +Jeśli korzystasz ze współdzielonego hostingu, dostawca usługi hostingowej może wymagać użycia konkretnej nazwy bazy danych lub pozwalać na tworzenie baz danych za pośrednictwem panelu użytkownika.', + 'config-db-name-oracle' => 'Schemat bazy danych', + 'config-db-install-account' => 'Konto użytkownika dla instalatora', + 'config-db-username' => 'Nazwa użytkownika bazy danych', + 'config-db-password' => 'Hasło bazy danych', + 'config-db-install-username' => 'Wprowadź nazwę użytkownika, który będzie używany do łączenia się z bazą danych podczas procesu instalacji. +Nie jest to nazwa konta MediaWiki, a użytkownika bazy danych.', + 'config-db-install-password' => 'Wprowadź hasło, które będzie wykorzystywane do łączenia się z bazą danych w procesie instalacji. +To nie jest hasło konta MediaWiki, lecz hasło do bazy danych.', + 'config-db-install-help' => 'Podaj nazwę użytkownika i jego hasło, które zostaną użyte do połączenia z bazą danych w czasie procesu instalacji.', + 'config-db-account-lock' => 'Użyj tej samej nazwy użytkownika i hasła w czasie normalnej pracy.', + 'config-db-wiki-account' => 'Konto użytkownika do normalnej pracy', + 'config-db-prefix' => 'Przedrostek tabel bazy danych', + 'config-db-charset' => 'Zestaw znaków bazy danych', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binarny', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 kompatybilny wstecz UTF-8', + 'config-mysql-old' => 'Wymagany jest MySQL $1 lub nowszy; korzystasz z $2.', + 'config-db-port' => 'Port bazy danych', + 'config-db-schema' => 'Schemat dla MediaWiki', + 'config-db-schema-help' => 'Ten schemat jest zazwyczaj właściwy. +Zmień go wyłącznie jeśli jesteś pewien, że powinieneś.', + 'config-sqlite-dir' => 'Katalog danych SQLite', + 'config-oracle-def-ts' => 'Domyślna przestrzeń tabel', + 'config-oracle-temp-ts' => 'Przestrzeń tabel tymczasowych', + 'config-support-info' => 'MediaWiki może współpracować z następującymi systemami baz danych: + +$1 + +Jeśli system baz danych, z którego chcesz skorzystać nie jest wymieniony, postępuj zgodnie z instrukcjami aby móc z niego skorzystać.', + 'config-support-mysql' => '* $1 jest domyślną bazą danych dla MediaWiki i jest najlepiej wspierane ([http://www.php.net/manual/en/mysql.installation.php jak skompilować PHP ze wsparciem dla MySQL])', + 'config-support-postgres' => '* $1 jest popularnym systemem baz danych z otwartym kodem; jest alternatywą dla MySQL ([http://www.php.net/manual/en/pgsql.installation.php jak skompilować PHP ze wsparciem dla PostgreSQL])', + 'config-support-sqlite' => '* $1 jest lekkim systemem bazy danych, który jest bardzo dobrze wspierany. ([http://www.php.net/manual/en/pdo.installation.php Jak skompilować PHP ze wsparciem dla SQLite], korzystając z PDO)', + 'config-support-oracle' => '* $1 jest komercyjną profesjonalną bazą danych. ([http://www.php.net/manual/en/oci8.installation.php Jak skompilować PHP ze wsparciem dla OCI8])', + 'config-header-mysql' => 'Ustawienia MySQL', + 'config-header-postgres' => 'Ustawienia PostgreSQL', + 'config-header-sqlite' => 'Ustawienia SQLite', + 'config-header-oracle' => 'Ustawienia Oracle', + 'config-invalid-db-type' => 'Nieprawidłowy typ bazy danych', + 'config-missing-db-name' => 'Należy wpisać wartość w polu „Nazwa bazy danych”', + 'config-missing-db-host' => 'Musisz wpisać wartość w polu „Serwer bazy danych”', + 'config-missing-db-server-oracle' => 'Należy wpisać wartość w polu „Baza danych TNS”', + 'config-invalid-db-server-oracle' => 'Nieprawidłowa baza danych TNS „$1”. +Używaj wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9), podkreślenia (_) i kropek (.).', + 'config-invalid-db-name' => 'Nieprawidłowa nazwa bazy danych „$1”. +Używaj wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9), podkreślenia (_) lub znaku odejmowania (-).', + 'config-invalid-db-prefix' => 'Nieprawidłowy prefiks bazy danych „$1”. +Używaj wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9), podkreślenia (_) lub znaku odejmowania (-).', + 'config-connection-error' => '$1. + +Sprawdź adres serwera, nazwę użytkownika i hasło, a następnie spróbuj ponownie.', + 'config-invalid-schema' => 'Nieprawidłowy schemat dla MediaWiki „$1”. +Używaj wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9) i podkreślenia (_).', + 'config-postgres-old' => 'Wymagany jest PostgreSQL $1 lub nowszy; korzystasz z $2.', + 'config-sqlite-name-help' => 'Wybierz nazwę, która będzie identyfikować Twoją wiki. +Nie wolno używać spacji ani myślników. +Zostanie ona użyta jako nazwa pliku danych SQLite.', + 'config-sqlite-mkdir-error' => 'Błąd podczas tworzenia katalogu dla danych „$1”. +Sprawdź lokalizację i spróbuj ponownie.', + 'config-sqlite-dir-unwritable' => 'Nie można zapisać do katalogu „$1”. +Zmień uprawnienia dostępu do katalogu tak, aby serwer WWW mógł pisać do niego, a następnie spróbuj ponownie.', + 'config-sqlite-connection-error' => '$1. + +Sprawdź katalog danych oraz nazwę bazy danych, a następnie spróbuj ponownie.', + 'config-sqlite-readonly' => 'Plik $1 nie jest zapisywalny.', + 'config-sqlite-cant-create-db' => 'Nie można utworzyć pliku bazy danych $1.', + 'config-sqlite-fts3-downgrade' => 'Brak wsparcia FTS3 dla PHP. Tabele zostały cofnięte', + 'config-can-upgrade' => "W bazie danych są już tabele MediaWiki. +Aby uaktualnić je do MediaWiki $1, kliknij '''Dalej'''.", + 'config-upgrade-done-no-regenerate' => 'Aktualizacja zakończona. + +Możesz wreszcie [$1 zacząć korzystać ze swojej wiki].', + 'config-regenerate' => 'Ponowne generowanie LocalSettings.php →', + 'config-show-table-status' => 'Zapytanie „SHOW TABLE STATUS” nie powiodło się!', + 'config-unknown-collation' => "'''Uwaga''' – bazy danych używa nierozpoznanej metody porównywania.", + 'config-db-web-account' => 'Konto bazy danych dla dostępu przez WWW', + 'config-db-web-help' => 'Wybierz nazwę użytkownika i hasło, z których korzystać będzie serwer WWW do łączenia się z serwerem baz danych, podczas zwykłej pracy z wiki.', + 'config-db-web-account-same' => 'Użyj tego samego konta, co dla instalacji', + 'config-db-web-create' => 'Utwórz konto, jeśli jeszcze nie istnieje', + 'config-db-web-no-create-privs' => 'Konto podane do wykonania instalacji nie ma wystarczających uprawnień, aby utworzyć nowe konto. +Konto, które wskazałeś tutaj musi już istnieć.', + 'config-mysql-engine' => 'Silnik przechowywania', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-charset' => 'Zestaw znaków bazy danych', + 'config-mysql-binary' => 'binarny', + 'config-mysql-utf8' => 'UTF‐8', + 'config-site-name' => 'Nazwa wiki', + 'config-site-name-help' => 'Ten napis pojawi się w pasku tytułowym przeglądarki oraz w różnych innych miejscach.', + 'config-site-name-blank' => 'Wprowadź nazwę witryny.', + 'config-project-namespace' => 'Przestrzeń nazw projektu', + 'config-ns-generic' => 'Projekt', + 'config-ns-site-name' => 'Taka sama jak nazwa wiki $1', + 'config-ns-other' => 'Inna (należy określić)', + 'config-ns-other-default' => 'MojaWiki', + 'config-ns-invalid' => 'Podana przestrzeń nazw „$1” jest nieprawidłowa. +Podaj inną przestrzeń nazw projektu.', + 'config-admin-box' => 'Konto administratora', + 'config-admin-name' => 'Administrator', + 'config-admin-password' => 'Hasło', + 'config-admin-password-confirm' => 'Hasło powtórnie', + 'config-admin-help' => 'Wprowadź preferowaną nazwę użytkownika, na przykład „Jan Kowalski”. +Tej nazwy będziesz używać do logowania się do wiki.', + 'config-admin-name-blank' => 'Wpisz nazwę użytkownika, który będzie administratorem.', + 'config-admin-name-invalid' => 'Podana nazwa użytkownika „$1” jest nieprawidłowa. +Podaj inną nazwę.', + 'config-admin-password-blank' => 'Wprowadź hasło dla konta administratora.', + 'config-admin-password-same' => 'Hasło nie może być takie samo jak nazwa użytkownika.', + 'config-admin-password-mismatch' => 'Wprowadzone dwa hasła różnią się między sobą.', + 'config-admin-email' => 'Adres e‐mail', + 'config-admin-email-help' => 'Wpisz adres e‐mail, aby mieć możliwość odbierania e‐maili od innych użytkowników na wiki, zresetowania hasła oraz otrzymywania powiadomień o zmianach na stronach z listy obserwowanych.', + 'config-admin-error-user' => 'Błąd wewnętrzny podczas tworzenia konta administratora o nazwie „$1”.', + 'config-admin-error-password' => 'Wewnętrzny błąd podczas ustawiania hasła dla administratora „$1”:
    $2
    ', + 'config-admin-error-bademail' => 'Wpisałeś nieprawidłowy adres e‐mail', + 'config-subscribe' => 'Zapisz się na [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce listę pocztową z ogłaszaniami o nowych wersjach].', + 'config-subscribe-help' => 'Jest to lista o małej liczbie wiadomości, wykorzystywana do przesyłania informacji o udostępnieniu nowej wersji oraz istotnych sprawach dotyczących bezpieczeństwa. +Powinieneś zapisać się na tę listę i aktualizować zainstalowane oprogramowanie MediaWiki gdy pojawia się nowa wersja.', + 'config-almost-done' => 'To już prawie koniec! +Możesz pominąć pozostałe czynności konfiguracyjne i zainstalować wiki.', + 'config-optional-continue' => 'Zadaj mi więcej pytań.', + 'config-optional-skip' => 'Jestem już znudzony, po prostu zainstaluj wiki.', + 'config-profile' => 'Profil uprawnień użytkowników', + 'config-profile-wiki' => 'Tradycyjne wiki', + 'config-profile-no-anon' => 'Wymagane utworzenie konta', + 'config-profile-fishbowl' => 'Wyłącznie zatwierdzeni edytorzy', + 'config-profile-private' => 'Prywatna wiki', + 'config-license' => 'Prawa autorskie i licencja', + 'config-license-none' => 'Brak stopki z licencją', + 'config-license-cc-by-sa' => 'Creative Commons – za uznaniem autora, na tych samych zasadach', + 'config-license-cc-by-nc-sa' => 'Creative Commons – za uznaniem autora, bez użycia komercyjnego, na tych samych zasadach', + 'config-license-gfdl-old' => 'GNU Free Documentation License 1.2', + 'config-license-gfdl-current' => 'GNU Free Documentation License 1.3 lub późniejsza', + 'config-license-pd' => 'Domena publiczna', + 'config-license-cc-choose' => 'Wybierz własną licencję Creative Commons', + 'config-email-settings' => 'Ustawienia e-maili', + 'config-enable-email' => 'Włącz wychodzące wiadomości e–mail', + '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-email-usertalk-help' => 'Pozwól użytkownikom otrzymywać powiadomienia o zmianach na stronie dyskusji użytkownika, jeśli będą mieć włączoną tę funkcję w swoich preferencjach.', + 'config-email-watchlist' => 'Włącz powiadomienie o zmianach stron obserwowanych', + 'config-email-watchlist-help' => 'Pozwól użytkownikom otrzymywać powiadomienia o zmianach na stronach obserwowanych, jeśli będą mieć włączoną tę funkcję w swoich preferencjach.', + 'config-email-auth' => 'Włącz uwierzytelnianie e‐mailem', + 'config-email-sender' => 'Zwrotny adres e‐mail', + 'config-upload-settings' => 'Przesyłanie obrazków i plików', + 'config-upload-enable' => 'Włącz przesyłanie plików na serwer', + 'config-upload-deleted' => 'Katalog dla usuniętych plików', + 'config-upload-deleted-help' => 'Wybierz katalog, w którym będzie archiwum usuniętych plików. +Najlepiej, aby nie był on dostępny z internetu.', + 'config-logo' => 'Adres URL logo', + 'config-instantcommons' => 'Włącz Instant Commons', + 'config-cc-error' => 'Wybieranie licencji Creative Commons nie dało wyniku. +Wpisz nazwę licencji ręcznie.', + 'config-cc-again' => 'Wybierz jeszcze raz...', + 'config-cc-not-chosen' => 'Wybierz którą chcesz licencję Creative Commons i kliknij „Dalej”.', + 'config-advanced-settings' => 'Konfiguracja zaawansowana', + 'config-cache-options' => 'Ustawienia buforowania obiektów', + 'config-cache-none' => 'Brak buforowania (wszystkie funkcje będą działać, ale mogą wystąpić kłopoty z wydajnością na dużych witrynach wiki)', + 'config-cache-accel' => 'Buforowania obiektów PHP (APC, eAccelerator, XCache lub WinCache)', + 'config-cache-memcached' => 'Użyj Memcached (wymaga dodatkowej instalacji i konfiguracji)', + 'config-memcached-servers' => 'Serwery Memcached:', + 'config-memcached-help' => 'Lista adresów IP do wykorzystania przez Memcached. +Adresy powinny być umieszczane po jednym w linii i określać również wykorzystywany port. Na przykład: + 127.0.0.1:11211 + 192.168.1.25:1234', + 'config-extensions' => 'Rozszerzenia', + 'config-install-alreadydone' => "'''Uwaga''' – wydaje się, że MediaWiki jest już zainstalowane, a obecnie próbujesz zainstalować je ponownie. +Przejdź do następnej strony.", + 'config-install-step-done' => 'gotowe', + 'config-install-step-failed' => 'nieudane', + 'config-install-extensions' => 'Włącznie z rozszerzeniami', + 'config-install-database' => 'Konfigurowanie bazy danych', + 'config-install-pg-schema-failed' => 'Utworzenie tabel nie powiodło się. +Upewnij się, że użytkownik „$1” może zapisywać do schematu „$2”.', + 'config-install-pg-commit' => 'Zatwierdzanie zmian', + 'config-pg-no-plpgsql' => 'Musisz zainstalować język PL/pgSQL w bazie danych $1', + 'config-install-user' => 'Tworzenie użytkownika bazy danych', + 'config-install-user-grant-failed' => 'Przyznanie uprawnień użytkownikowi „$1” nie powiodło się – $2', + 'config-install-tables' => 'Tworzenie tabel', + 'config-install-tables-exist' => "'''Uwaga''' – wygląda na to, że tabele MediaWiki już istnieją. +Pomijam tworzenie tabel.", + 'config-install-tables-failed' => "'''Błąd''' – tworzenie tabeli nie powiodło się z powodu błędu – $1", + 'config-install-interwiki' => 'Wypełnianie tabeli domyślnymi interwiki', + 'config-install-interwiki-list' => 'Nie można odnaleźć pliku interwiki.list.', + 'config-install-interwiki-exists' => "'''Uwaga''' – wygląda na to, że tabela interwiki ma już jakieś wpisy. +Tworzenie domyślnej listy pominięto.", + 'config-install-keys' => 'Generowanie tajnego klucza', + 'config-install-sysop' => 'Tworzenie konta administratora', + 'config-install-subscribe-fail' => 'Nie można zapisać na listę „mediawiki-announce“', + 'config-install-mainpage' => 'Tworzenie strony głównej z domyślną zawartością', + 'config-install-mainpage-failed' => 'Nie udało się wstawić strony głównej – $1', + 'config-download-localsettings' => 'Pobierz LocalSettings.php', + 'config-help' => 'pomoc', +); + +/** Piedmontese (Piemontèis) + * @author Borichèt + * @author Dragonòt + * @author Krinkle + */ +$messages['pms'] = array( + 'config-desc' => "L'instalador për mediaWiki", + 'config-title' => 'Anstalassion ëd MediaWiki $1', + 'config-information' => 'Anformassion', + 'config-localsettings-upgrade' => "A l'é stàit trovà n'archivi LocalSettings.php. +Për agiorné cost'anstalassion, ch'a anserissa ël valor ëd \$wgUpgradeKey ant la casela sì-sota. +A la trovrà an LocalSetting.php.", + 'config-localsettings-key' => "Ciav d'agiornament:", + 'config-session-error' => 'Eror an fasend parte la session: $1', + 'config-session-expired' => "Ij sò dat ëd session a smijo scadù. +Le session a son configurà për na durà ëd $1. +A peul aumenté sòn an ampostand session.gc_maxlifetime an php.ini. +Ch'a anandia torna ël process d'instalassion.", + 'config-no-session' => "Ij sò dat ëd session a son përdù! +Ch'a contròla sò php.ini e ch'as sigura che session.save_path a sia ampostà ant ël dossié giust.", + 'config-your-language' => 'Toa lenga:', + 'config-your-language-help' => "Selessioné na lenga da dovré durant ël process d'instalassion.", + 'config-wiki-language' => 'Lenga dla Wiki:', + 'config-wiki-language-help' => 'Selession-a la lenga dont la wiki a sarà prevalentement scrivùa.', + 'config-back' => '← André', + 'config-continue' => 'Continua →', + 'config-page-language' => 'Lenga', + 'config-page-welcome' => 'Bin ëvnù a MediaWiki!', + 'config-page-dbconnect' => 'Coleghesse a la base ëd dàit', + 'config-page-upgrade' => "Agiorné l'instalassion esistenta", + 'config-page-dbsettings' => 'Ampostassion dla base ëd dàit', + 'config-page-name' => 'Nòm', + 'config-page-options' => 'Opsion', + 'config-page-install' => 'Instala', + 'config-page-complete' => 'Completa!', + 'config-page-restart' => "Fé torna parte l'instalassion", + 'config-page-readme' => 'Lesme', + 'config-page-releasenotes' => 'Nòte ëd publicassion', + 'config-page-copying' => 'Copié', + 'config-page-upgradedoc' => 'Agiorné', + 'config-help-restart' => "Veul-lo scancelé tùit ij dat salvà ch'a l'ha anserì e anandié torna ël process d'instalassion?", + 'config-restart' => 'É!, felo torna parte', + 'config-welcome' => "=== Contròj d'ambient === +Dle verìfiche ëd base a son fàite për vëdde se st'ambient a va bin për l'instalassion ëd MediaWiki. +S'a l'ha da manca d'agiut durant l'anstalassion, a dovrìa fornì j'arzultà dë sti contròj.", + 'config-copyright' => "=== Drit d'Autor e Condission === + +$1 + +Cost-sì a l'é un programa lìber e a gràtis: a peul ridistribuilo e/o modifichelo sota le condission dla licensa pùblica general GNU com publicà da la Free Software Foundation; la version 2 dla Licensa, o (a toa sèrnìa) qualsëssìa version pi recenta. + +Cost programa a l'é distribuì ant la speransa ch'a sia ùtil, ma '''sensa gnun-e garansìe'''; sensa gnanca la garansia implìssita ëd '''comersiabilità''' o '''d'esse adat a un but particolar'''. + +A dovrìa avèj arseivù na còpia ëd la licensa pùblica general GNU ansema a sto programa; dësnò, ch'a scriva a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA opura [http://www.gnu.org/copyleft/gpl.html ch'a la lesa an linia].", + 'config-sidebar' => "* [http://www.mediawiki.org Intrada MediaWiki] +* [http://www.mediawiki.org/wiki/Help:Contents Guida dl'Utent] +* [http://www.mediawiki.org/wiki/Manual:Contents Guida dl'Aministrator] +* [http://www.mediawiki.org/wiki/Manual:FAQ Soens an ciamo]", + 'config-env-good' => "L'ambient a l'é stàit controlà. +It peule instalé MediaWiki.", + 'config-env-bad' => "L'ambient a l'é stàit controlà. +It peule pa instalé MediaWiki.", + 'config-env-php' => "PHP $1 a l'é instalà.", + 'config-unicode-using-utf8' => 'As deuvra utf8_normalize.so ëd Brion Vibber për la normalisassion Unicode.', + 'config-unicode-using-intl' => "As deuvra l'[http://pecl.php.net/intl estension intl PECL] për la normalisassion Unicode.", + 'config-unicode-pure-php-warning' => "'''Avis:''' L'[http://pecl.php.net/intl estension intl PECL] a l'é pa disponìbil për gestì la normalisassion Unicode, da già che l'implementassion an PHP pur a faliss për lentëssa. +S'a gestiss un sit a àut tràfich, a dovrìa lese cheicòs an sla [http://www.mediawiki.org/wiki/Unicode_normalization_considerations normalisassion Unicode].", + 'config-unicode-update-warning' => "'''Avis:''' La version instalà dlë spassiador ëd normalisassion Unicode a deuvra na version veja ëd la librarìa dël [http://site.icu-project.org/ proget ICU]. +A dovrìa fé n'[http://www.mediawiki.org/wiki/Unicode_normalization_considerations agiornament] s'a l'é anteressà a dovré Unicode.", + 'config-no-db' => 'Impossìbil tové un pilòta ëd base ëd dàit bon!', + 'config-no-db-help' => "A dev instalé un pilòta ëd base ëd dàit për PHP. +A son mantnùe le sòrt ëd base ëd dàit sì-dapress: $1. + +S'a l'é ospità ëd fasson partagià, ch'a ciama al fornidor d'ospitalità d'instalé un pilòta ëd base ëd dàit adat. +S'a l'ha compilà chiel-midem PHP, ch'a lo configura torna con un client ëd base ëd dàit abilità, për esempi an dovrand ./configure --with-mysql. +S'a l'ha instalà PHP da un pachet Debian o Ubuntu, antlora a dev ëdcò instalé ël mòdul php5-mysql.", + 'config-no-fts3' => "'''Avis''': SQLite a l'é compilà sensa ël mòdul [http://sqlite.org/fts3.html FTS3], le funsion d'arserca a saran pa disponìbij su cost motor.", + 'config-register-globals' => "'''Avis: L'opsion [http://php.net/register_globals register_globals] ëd PHP a l'é abilità.''' +'''Ch'a la disabìlita s'a peul.''' +MediaWiki a marcërà, ma sò servent a l'é espòst a 'd possìbij vunerabilità ëd sicurëssa.", + 'config-magic-quotes-runtime' => "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] a l'é ativ!''' +Costa opsion a danegia ij dat d'intrada an manera pa prevedìbil. +A peul pa instalé o dovré MediaWiki se st'opsion a l'é pa disabilità.", + 'config-magic-quotes-sybase' => "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] a l'é ativ!''' +Costa opsion a danegia ij dat d'intrada an manera pa prevedìbil. +A peul pa instalé o dovré MediaWiki se st'opsion a l'é pa disabilità.", + 'config-mbstring' => "'''Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] a l'é ativ!''' +Costa opsion a càusa d'eror e a peul danegié ij dat d'intrada an manera pa prevedìbil. +A peul pa instalé o dovré MediaWiki se st'opsion a l'é pa disabilità.", + 'config-ze1' => "'''Fatal: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] a l'é ativ!''' +Costa opsion a càusa dij bigat afros con MediaWiki. +A peul pa instalé o dovré MediaWiki se st'opsion a l'é pa disabilità.", + 'config-safe-mode' => "'''Avis:''' [http://www.php.net/features.safe-mode Safe mode] ëd PHP a l'é ativ. +A peul causé ëd problema, dzortut s'as deuvro ël cariament d'archivi e ël manteniment ëd math.", + 'config-xml-bad' => "Mòdul XML ed PHP mancant. +MediaWiki a l'ha da manca dle funsion an sto mòdul e a travajërà pa an costa configurassion. +S'a fa giré mandrake, ch'a instala ël pachet php-xml.", + 'config-pcre' => "A smija che ël mòdul d'apògg PCRE a sia mancant. +MediaWiki a l'ha da manca dle funsion d'espression regolar Perl-compatìbij për marcé.", + 'config-memory-raised' => "memory_limit ëd PHP a l'é $1, aussà a $2.", + 'config-memory-bad' => "'''Avis:''' memory_limit ëd PHP a l'é $1. +Sossì a l'é probabilment tròp bass. +L'instalassion a peul falì!", + 'config-xcache' => "[http://trac.lighttpd.net/xcache/ XCache] a l'é instalà", + 'config-apc' => "[http://www.php.net/apc APC] a l'é instalà", + 'config-eaccel' => "[http://eaccelerator.sourceforge.net/ eAccelerator] a l'é instalà", + 'config-wincache' => "[http://www.iis.net/download/WinCacheForPhp WinCache] a l'é instalà", + 'config-no-cache' => "'''Avis:''' As treuva pa [http://eaccelerator.sourceforge.net eAccelerator], [http://www.php.net/apc APC], [http://trac.lighttpd.net/xcache/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache]. Ël buté d'oget an memòria local a l'é pa abilità.", + 'config-diff3-bad' => 'GNU diff3 pa trovà.', + 'config-imagemagick' => "Trovà ImageMagick: $1. +La miniaturisassion ëd figure a sarà abilità s'it abìlite le carie.", + 'config-gd' => "Trovà la librarìa gràfica antëgrà GD. +La miniaturisassion ëd figure a sarà abilità s'a abìlita ij cariament.", + 'config-no-scaling' => 'As treuva pa la librarìa GD o ImageMagick. +La miniaturisassion ëd figure a sarà disabilità.', + 'config-no-uri' => "'''Eror:''' As peul pa determiné l'URI corenta. +Instalassion abortìa.", + 'config-uploads-not-safe' => "'''Avis:''' Sò dossié stàndard për carié $1 a l'é vulneràbil a l'esecussion ëd qualsëssìa senari. +Bele che MediaWiki a contròla j'aspet ëd sicurëssa ëd tùit j'archivi carià, a l'é motobin arcomandà ëd [http://www.mediawiki.org/wiki/Manual:Security#Upload_security saré ës përtus ëd sicurëssa] prima d'abilité ij cariament.", + 'config-db-type' => 'Sòrt ëd base ëd dàit:', + 'config-db-host' => 'Ospitant ëd la base ëd dàit:', + 'config-db-host-help' => "Se sò servent ëd base ëd dàit a l'é su un servent diferent, ch'a anseriss ambelessì ël nòm dl'ospitant o l'adrëssa IP. + +S'a deuvra n'ospitalità partagià, sò fornidor d'ospitalità a dovrìa deje ël nòm dl'ospitant giust ant soa documentassion. + +Se a anstala su un servent Windows e a deuvra MySQL, dovré \"localhost\" a podrìa funsioné nen com nòm dël servent. S'a marcia nen, ch'a preuva \"127.0.0.1\" com adrëssa IP local.", + 'config-db-host-oracle' => 'TNS dla base ëd dàit:', + 'config-db-host-oracle-help' => "Anserì un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nòm ëd conession local] bon; n'archivi tnsnames.ora a dev esse visìbil da costa anstalassion..
    S'a deuvra le librarìe cliente 10g o pi neuve a peul ëdcò dovré ël métod ëd nominassion [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].", + 'config-db-wiki-settings' => 'Identìfica sta wiki', + 'config-db-name' => 'Nòm dla base ëd dàit:', + 'config-db-name-help' => "Ch'a serna un nòm ch'a identìfica soa wiki. +A dovrìa conten-e gnun ëspassi o tratin. + +S'a deuvra n'ospitalità partagià, sò fornidor ëd l'ospitalità a-j darà un nòm ëd base ëd dàit specìfich da dovré, o a lassrà ch'a lo crea via un panel ëd contròl.", + 'config-db-name-oracle' => 'Schema dla base ëd dàit:', + 'config-db-install-account' => "Cont d'utent për l'instalassion.", + 'config-db-username' => "Nòm d'utent dla base ëd dàit:", + 'config-db-password' => 'Ciav dla base ëd dàit:', + 'config-db-install-help' => "Ch'a anserissa lë stranòm d'utent e la ciav che a saran dovrà për coleghesse a la base ëd dàit durant ël process d'instalassion.", + 'config-db-account-lock' => "Dovré ij midem stranòm d'utent e ciav durant j'operassion normaj", + 'config-db-wiki-account' => "Cont d'utent për j'operassion normaj", + 'config-db-wiki-help' => "Ch'a anseriss lë stranòm d'utent e la ciav che a saran dovrà për coleghesse a la base ëd dàit durant j'operassion normaj dla wiki. +S'ël cont a esist pa, e ël cont d'instalassion a l'ha ij privilegi ch'a-i van, sto cont utent a sarà creà con ij privilegi mìnin për fé marcé la wiki.", + 'config-db-prefix' => 'Prefiss dle tàule dla base ëd dàit:', + 'config-db-prefix-help' => "S'a l'ha dabzògn ëd partagé na base ëd dàit an tra vàire wiki, o tra MediaWiki e n'àutra aplicassion dl'aragnà, a peul serne ëd gionté un prefiss a tùit ij nòm ëd le tàule për evité ëd conflit. +Ch'a deuvra ni dë spassi ni ëd tratin. + +Cost camp a l'é lassà normalment veuid.", + 'config-db-charset' => 'Ansema dij caràter dla base ëd dàit', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binari', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => "MySQL 4.0 compatìbil a l'andaré con UTF-8", + 'config-charset-help' => "'''Avis:''' S'a deuvra '''UTF-8 compatìbil a l'andaré''' su MySQL 4.1+, e peui a fa na còpia con mysqldump, a podrìa scancelé tùit ij caràter nen-ASCII, dësbland sensa speranse soe còpie! + +An '''manera binaria''', MediaWiki a memorisa ël test UTF-8 an dij camp binari ant la base ëd dàit. +Sossì a l'é pi eficient che la manera UTF-8 ëd MySQL, e a përmët ëd dovré tut l'ansema ëd caràter Unicode. +An '''manera UTF-8''', MySQL a arconòss an che ansema ëd caràter a son ij sò dat, e a peul presenteje e convertije apropriatament, ma a-j lassrà pa memorisé ij caràter dzora al [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes pian multilenghe ëd base].", + 'config-mysql-old' => "A-i é da manca ëd MySQL $1 o pi recent, chiel a l'ha $2.", + 'config-db-port' => 'Porta dla base ëd dàit:', + 'config-db-schema' => 'Schema për MediaWiki', + 'config-db-schema-help' => "Jë schema sì-dzora a son normalment giust. +Ch'a-j cangia mach s'a sa ch'a n'ha da manca.", + 'config-sqlite-dir' => 'Dossié dij dat SQLite:', + 'config-sqlite-dir-help' => "SQLite a memorisa tùit ij dat ant n'archivi ùnich. + +Ël dossié che chiel a forniss a dev esse scrivìbil dal servent durant l'instalassion. + +A dovrìa '''pa''' esse acessìbil da l'aragnà, sossì a l'é për sòn ch'i l'oma pa butalo andova a-i son ij sò file PHP. + +L'instalador a scriverà n'archivi .htaccess ansema con chiel, ma se lòn a faliss quaidun a peul intré an soa base ëd dàit originaria. +Lòn a comprend ij dat brut ëd l'utent (adrëssa ëd pòsta eletrònica, ciav tërbola) e ëdcò le revision scancelà e d'àutri dat segret ëd la wiki. + +Ch'a consìdera ëd buté la base ëd dàit tuta antrega da n'àutra part, për esempi an /var/lib/mediawiki/yourwiki.", + 'config-oracle-def-ts' => 'Spassi dla tàula dë stàndard:', + 'config-oracle-temp-ts' => 'Spassi dla tàula temporani:', + 'config-support-info' => "MediaWiki a manten ij sistema ëd base ëd dàit sì-dapress: + +$1 + +S'a vëd pa listà sì-sota ël sistema ëd base ëd dàit ch'a preuva a dovré, antlora va andaré a j'istrussion dl'anliura sì-dzora për abilité ël manteniment.", + 'config-support-mysql' => "* $1 e l'é l'obietiv primari për MediaWiki e a l'é mej mantnù ([http://www.php.net/manual/en/mysql.installation.php com compilé PHP con ël manteniment MySQL])", + 'config-support-postgres' => "* $1 e l'é un sistema ëd base ëd dàit popolar a sorgiss duverta com alternativa a MySQL ([http://www.php.net/manual/en/pgsql.installation.php com compilé PHP con ël manteniment ëd PostgreSQL])", + 'config-support-sqlite' => "* $1 e l'é un sistema ëd base ëd dàit leger che a l'é motobin bin mantnù ([http://www.php.net/manual/en/pdo.installation.php com compilé PHP con ël manteniment ëd SQLite], a deuvra PDO)", + 'config-support-oracle' => "* $1 a l'é na base ëd dàit comersial për j'amprèise. ([http://www.php.net/manual/en/oci8.installation.php Com compilé PHP con ël manteniment OCI8])", + 'config-header-mysql' => 'Ampostassion MySQL', + 'config-header-postgres' => 'Ampostassion PostgreSQL', + 'config-header-sqlite' => 'Ampostassion SQLite', + 'config-header-oracle' => 'Ampostassion Oracle', + 'config-invalid-db-type' => 'Sòrt ëd ëd base ëd dàit pa bon-a', + 'config-missing-db-name' => 'A dev buteje un valor për "Nòm ëd la base ëd dàit"', + 'config-missing-db-server-oracle' => 'A dev buteje un valor për "TNS ëd la base ëd dat"', + 'config-invalid-db-server-oracle' => 'TNS ëd la base ëd dat pa bon "$1". +Dovré mach dle litre ASCII (a-z, A-Z), nùmer (0-9), sotlignadure (_) e pontin (.).', + 'config-invalid-db-name' => 'Nòm ëd la base ëd dàit pa bon "$1". +Dovré mach litre ASCII (a-z, A-Z), nùmer (0-9) e sotlignadure (_).', + 'config-invalid-db-prefix' => 'Prefiss dla base ëd dàit pa bon "$1". +Dovré mach litre ASCII (a-z, A-Z), nùmer (0-9) e sotlignadure (_).', + 'config-connection-error' => "$1. + +Controla l'ospitant, lë stranòm d'utent e la ciav sì-sota e prové torna.", + 'config-invalid-schema' => 'Schema pa bon për MediaWiki "$1". +Dovré mach litre ASCII (a-z, A-Z), nùmer (0-9) e sotlignadure (_).', + 'config-postgres-old' => "A-i é da manca ëd PostgreSQL $1 o pi recent, chiel a l'ha $2.", + 'config-sqlite-name-help' => "Serne un nòm ch'a identìfica soa wiki. +Dovré nì dë spassi nì ëd tratin. +Sòn a sarà dovrà për ël nòm ëd l'archivi ëd dat SQLite.", + 'config-sqlite-parent-unwritable-group' => "As peul pa creesse ël dossié ëd dat $1, përchè ël dossié a mont $2 a l'é pa scrivìbil dal servent. + +L'instalador a l'ha determinà sota che utent a gira sò servent. +Fé an manera che ël dossié $3 a sia scrivìbil da chiel për continué. +Su un sistema Unix/Linux buté: +
    cd $2
    +mkdir $3
    +chgrp $4 $3
    +chmod g+w $3
    ", + 'config-sqlite-parent-unwritable-nogroup' => "As peul pa creesse ël dossié ëd dat $1, përchè ël dossié a mont $2 a l'é pa scrivìbil dal servent. + +L'instalador a peul pa determiné l'utent sota ël qual a gira sò servent. +Fé an manera che ël dossié $3 a sia scrivìbil globalment da chiel (e da d'àutri) për continué. +Su un sistema Unix/Linux buté: +
    cd $2
    +mkdir $3
    +chmod a+w $3
    ", + 'config-sqlite-mkdir-error' => 'Eror an creand ël dossié ëd dat "$1". +Ch\'a contròla la locassion e ch\'a preuva torna.', + 'config-sqlite-dir-unwritable' => 'As peul pa scrivse an sël dossié "$1". +Modifiché ij sò përmess an manera che ël servent a peula scrivje ansima, e prové torna.', + 'config-sqlite-connection-error' => '$1. + +Controlé ël dossié ëd dat e ël nòm ëd la base ëd dàit ambelessì-sota e prové torna.', + 'config-sqlite-readonly' => "L'archivi $1 a l'é nen scrivìbil.", + 'config-sqlite-cant-create-db' => "As peul pa cresse l'archivi ëd base ëd dàit $1.", + 'config-sqlite-fts3-downgrade' => "PHP a l'ha pa ël supòrt ëd FTS3, le tàule a son degradà", + 'config-can-upgrade' => "A-i é dle tàule MediaWiki an costa base ëd dàit. +Për agiorneje a MediaWiki $1, ch'a sgnaca su '''Continué'''.", + 'config-upgrade-done' => "Agiornament completà. + +Adess a peule [$1 ancaminé a dovré soa wiki]. + +S'a veul generé torna sò archivi LocalSettings.php, ch'a sgnaca ël boton sì-sota. +Sòn a l'è '''pa arcomandà''' gavà ch'a rancontra dij problema con soa wiki.", + 'config-regenerate' => 'Generé torna LocalSettings.php →', + 'config-show-table-status' => 'Arcesta SHOW TABLE STATUS falìa!', + 'config-unknown-collation' => "'''Avis:''' La base ëd dàit a deuvra na classificassion pa arconossùa.", + 'config-db-web-account' => "Cont dla base ëd dàit për l'acess a l'aragnà", + 'config-db-web-help' => "Ch'a selession-a lë stranòm d'utent e la ciav che ël servent ëd l'aragnà a dovrërà për coleghesse al servent dle base ëd dàit, durant j'operassion ordinarie dla wiki.", + 'config-db-web-account-same' => "Ch'a deuvra ël midem cont com për l'istalassion", + 'config-db-web-create' => "Crea ël cont se a esist pa anco'", + 'config-db-web-no-create-privs' => "Ël cont ch'a l'ha specificà për l'instalassion a l'ha pa basta 'd privilegi për creé un cont. +Ël cont ch'a spessìfica ambelessì a dev già esiste.", + 'config-mysql-engine' => 'Motor ëd memorisassion:', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-engine-help' => "'''InnoDB''' a l'é scasi sempe la mej opsion, da già ch'a l'ha un bon manteniment dla concorensa. + +'''MyISAM''' a peul esse pi lest an instalassion për n'utent sol o mach an letura. +La base ëd dàit MyISAM a tira a corompse pi 'd soens che la base ëd dàit InnoDB.", + 'config-mysql-charset' => 'Ansem ëd caràter dla base ëd dàit:', + 'config-mysql-binary' => 'Binari', + 'config-mysql-utf8' => 'UTF-8', + 'config-mysql-charset-help' => "An '''manera binaria''', MediaWiki a memorisa ël test UTF-8 ant la base ëd dàit an camp binari. +Sòn a l'é pi eficient che la manera UTF-8 ëd MySQL, e a-j përmët ëd dovré l'ansema antregh ëd caràter Unicode. + +An '''manera UTF-8''', MySQL a conossrà an che ansem ëd caràter a son ij sò dat, e a peul presenteje e convertije apropriatament, ma a-j lassa pa memorisé ij caràter ëdzora al [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes pian multilenghìstich ëd base].", + 'config-site-name' => 'Nòm ëd la wiki:', + 'config-site-name-help' => "Sòn a comparirà ant la bara dël tìtol dël navigador e an vàire d'àutri pòst.", + 'config-site-name-blank' => "Ch'a buta un nòm ëd sit.", + 'config-project-namespace' => 'Spassi nominal dël proget:', + 'config-ns-generic' => 'Proget', + 'config-ns-site-name' => 'Midem com ël nom dla wiki: $1', + 'config-ns-other' => 'Àutr (specìfica)', + 'config-ns-other-default' => 'MyWiki', + 'config-project-namespace-help' => "Andasend daré a l'esempi ëd Wikipedia, vàire wiki a manten-o soe pàgine ëd regolament separà da soe pàgine ëd contnù, ant në \"'''spassi nominal ëd proget'''\". +Tùit ij tìtoj ëd pàgina ant cost ëspassi nominal a parto con un sert prefiss, che a peul specifiché ambelessì. +Tradissionalment, sto prefiss a l'é derivà dal nòm ëd la wiki, ma a peul pa conten-e caràter ëd pontegiatura coma \"#\" o \":\".", + 'config-ns-invalid' => 'Lë spassi nominal specificà "$1" a l\'é pa bon. +Specìfica në spassi nominal ëd proget diferent.', + 'config-admin-box' => "Cont ëd l'Aministrator", + 'config-admin-name' => 'Tò nòm:', + 'config-admin-password' => 'Ciav:', + 'config-admin-password-confirm' => 'Buté torna la ciav:', + 'config-admin-help' => "Ch'a butà ambelessì tò stranòm d'utent preferì, për esempi \"Gioann Scriv\". +Cost-sì a l'é lë stranòm ch'a dovrërà për intré ant la wiki.", + 'config-admin-name-blank' => "Ch'a anserissa në stranòm d'aministrator.", + 'config-admin-name-invalid' => 'Ël nòm utent specificà "$1" a l\'é pa bon. +Specìfica un nòm utent diferent.', + 'config-admin-password-blank' => "Ch'a anserissa na ciav për ël cont d'aministrator.", + 'config-admin-password-same' => "La ciav a dev nen esse l'istessa ëd lë stranòm d'utent.", + 'config-admin-password-mismatch' => "Le doe ciav che a l'ha scrivù a son diferente antra 'd lor.", + 'config-admin-email' => 'Adrëssa ëd pòsta eletrònica:', + 'config-admin-email-help' => "Ch'a anserissa ambelessì n'adrëssa ëd pòsta eletrònica për përmëtt-je d'arsèive ëd mëssagi da d'àutri utent an sla wiki, riamposté soa ciav, e esse anformà ëd camgiament a le pàgine ch'a ten sot-euj.", + 'config-admin-error-user' => 'Eror antern an creand n\'aministrator con lë stranòm "$1".', + 'config-admin-error-password' => 'Eror antern an ampostand na ciav për l\'admin "$1":
    $2
    ', + 'config-subscribe' => "Ch'a sot-scriva la [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce lista ëd discussion ëd j'anonsi ëd publicassion].", + 'config-subscribe-help' => "Costa a l'é na lista ëd discussion a bass tràfich dovrà për j'anonsi ëd publicassion, comprèis d'amportant anonsi ëd sicurëssa. +A dovrìa sot-ëscrivla e agiorné soa instalassion mediaWiki quand che ëd version neuve a rivo.", + 'config-almost-done' => "A l'ha bele che fàit! +A peul adess sauté la configurassion rimanenta e instalé dlongh la wiki.", + 'config-optional-continue' => "Ciameme d'àutre chestion.", + 'config-optional-skip' => 'I son già anojà, instala mach la wiki.', + 'config-profile' => "Profil dij drit d'utent:", + 'config-profile-wiki' => 'Wiki tradissional', + 'config-profile-no-anon' => 'A venta creé un cont', + 'config-profile-fishbowl' => 'Mach editor autorisà', + 'config-profile-private' => 'Wiki privà', + 'config-profile-help' => "Le wiki a marcio mej quand ch'a lassa che pì përsone possìbij a-j modìfico. +An MediaWiki, a l'é bel fé revisioné ij cambi recent, e buté andré minca dann che a sia fàit da utent noviss o malissios. + +An tùit ij cas, an tanti a l'han trovà che MediaWiki a sia ùtil ant na gran varietà ëd manere, e dle vire a l'é pa bel fé convince cheidun dij vantagi dla wiki. +Parèj a l'ha doe possibilità. + +Un '''{{int:config-profile-wiki}}''' a përmët a chicassìa ëd modifiché, bele sensa intré ant ël sistema. +Na wiki con '''{{int:config-profile-no-anon}}''' a dà pì 'd contròl, ma a peul slontané dij contribudor casuaj. + +Ël senari '''{{int:config-profile-fishbowl}}''' a përmët a j'utent aprovà ëd modifiché, ma ël pùblich a peul vëdde le pàgine, comprèisa la stòria. +Un '''{{int:config-profile-private}}''' a përmët mach a j'utent aprovà ëd vëdde le pàgine, con la midema partìa ch'a peul modifiché. + +Configurassion ëd drit d'utent pi complicà a son disponìbij apress l'instalassion, vëdde la [http://www.mediawiki.org/wiki/Manual:User_rights pàgina a pòsta dël manual].", + 'config-license' => "Drit d'autor e licensa", + 'config-license-none' => 'Gnun-a licensa an nòta an bass', + 'config-license-cc-by-sa' => 'Creative Commons atribussion an part uguaj', + 'config-license-cc-by-nc-sa' => 'Creative Commons atribussion nen comersial an part uguaj', + 'config-license-gfdl-old' => 'Licensa ëd documentassion lìbera GNU 1.2', + 'config-license-gfdl-current' => 'Licensa ëd documentassion lìbera GNU 1.3 o pi recenta', + 'config-license-pd' => 'Domini Pùblich', + 'config-license-cc-choose' => 'Selessioné na licensa Creative Commons përsonalisà', + 'config-license-help' => "Vàire wiki pùbliche a buto tute le contribussion sota na [http://freedomdefined.org/Definition licensa lìbera]. Sòn a giuta a creé un sens d'apartenensa a la comunità e a ancoragia ëd contribussion ëd longa durà. +A l'é generalment nen necessari për na wiki privà o d'asienda. + +S'a veul podèj dovré dij test da Wikipedia, e a veul che Wikipedia a aceta dij test copià da soa wiki, a dovrìa serne '''Creative Commons Attribution Share Alike'''. + +La GNU Free Documentation License a l'era la veja licensa dont sota a-i era Wikipedia. +A l'é anco' na licensa bon-a, an tùit ij cas, sta licensa a l'ha chèich funsion ch'a rendo difìcij l'utilisassion e l'antërpretassion.", + 'config-email-settings' => 'Ampostassion ëd pòsta eletrònica', + 'config-enable-email' => 'Abilité ij mëssagi ëd pòsta eletrònica an surtìa', + 'config-enable-email-help' => "S'a veul che la pòsta eletrònica a marcia, j'[http://www.php.net/manual/en/mail.configuration.php ampostassion ëd pòsta eletrònica PHP] a devo esse configurà për da bin. +S'a veul pa 'd funsion ëd pòsta eletrònica, a dev disabiliteje ambelessì.", + 'config-email-user' => 'Abilité ij mëssagi ëd pòsta eletrònica da utent a utent', + 'config-email-user-help' => "A përmët a tùit j'utent ëd mandesse ëd mëssagi ëd pòsta eletrònica se lor a l'han abilità sòn an soe preferense.", + 'config-email-usertalk' => "Abilité notìfica dle pàgine ëd discussion dj'utent", + 'config-email-usertalk-help' => "A përmët a j'utent d'arsèive na notìfica dle modìfiche dle pàgine ëd discussion d'utent, s'a l'han abilitalo ant soe preferense.", + 'config-email-watchlist' => "Abilité la notìfica ëd lòn ch'as ten sot euj", + 'config-email-watchlist-help' => "A përmët a j'utent d'arsèive dle notificassion a propòsit dle pàgine ch'a ten-o sot euj s'a l'han abilitalo ant soe preferense.", + 'config-email-auth' => "Abilité l'autenticassion për pòsta eletrònica", + 'config-email-auth-help' => "Se st'opsion a l'é abilità, j'utent a devo confirmé soe adrësse ëd pòsta eletrònica an dovrand un colegament mandà a lor quand ch'a l'han ampostala o cambiala. +Mach j'adrësse ëd pòsta eletrònica autenticà a peulo arsèive ëd mëssagi da j'àutri utent o cangé adrëssa ëd notìfica. +Amposté st'opsion a l'é '''arcomandà''' për le wiki pùbliche a càusa ëd possìbij abus ëd le funsion ëd pòsta eletrònica.", + 'config-email-sender' => 'Adrëssa ëd pòsta eletrònica ëd ritorn:', + 'config-email-sender-help' => "Ch'a anserissa l'adrëssa ëd pòsta eletrònica da dovré com adrëssa d'artorn dij mëssagi an surtìa. +Ambelessì a l'é andova j'arspòste a saran mandà. +Motobin ëd servent ëd pòsta a ciamo che almanch la part dël nòm ëd domini a sia bon-a.", + 'config-upload-settings' => 'Cariament ëd figure e archivi', + 'config-upload-enable' => "Abilité ël cariament d'archivi", + 'config-upload-help' => "Carié d'archivi potensialment a espon sò servent a d'arzigh ëd sicurëssa. +Per pi d'anformassion, ch'a lesa la [http://www.mediawiki.org/wiki/Manual:Security session ëd sicurëssa] d'ës manual. + +Për abilité ël cariament d'archivi, ch'a modìfica la manera dël sot-dossié dle figure sota al dossié rèis ëd MediaWiki an manera che ël servent dl'aragnà a peussa scrivlo. +Peui ch'a abìlita costa opsion.", + 'config-upload-deleted' => "Dossié për j'archivi scancelà:", + 'config-upload-deleted-help' => "ch'a serna un dossié andova goerné j'archivi scancelà. +Idealment, sòn a dovrìa pa esse acessìbil an sl'aragnà.", + 'config-logo' => 'Anliura dla marca:', + 'config-logo-help' => "La pel dë stàndard ëd MediaWiki a comprend lë spassi për na marca ëd 135x160 pontin ant ël canton an àut a snista. +Ch'a dëscaria na figura ëd la dimension aproprià, e ch'a anserissa l'anliura ambelessì. + +S'a veul gnun-e marche, ch'a lassa ës camp bianch.", + 'config-instantcommons' => 'Abìlita Instant Commons', + 'config-instantcommons-help' => "[http://www.mediawiki.org/wiki/InstantCommons Instant Commons] a l'é na funsion ch'a përmët a le wiki ëd dovré dle figure, dij son e d'àutri mojen trovà an sël sit [http://commons.wikimedia.org/ Wikimedia Commons]. +Për dovré sossì, MediaWiki a l'ha da manca dl'acess a la ragnà. + +Për pi d'anformassion su sta funsion, comprèise j'istrussion ëd com ampostela për wiki diferente da Wikimedia Commons, ch'a consulta [http://mediawiki.org/wiki/Manual:\$wgForeignFileRepos ël manual].", + 'config-cc-error' => "La selession ëd la licensa Creative Commons a l'ha dàit gnun arzultà. +Ch'a anserissa ël nòm dla licensa a man.", + 'config-cc-again' => 'Torna cheuje...', + 'config-cc-not-chosen' => 'Sern che licensa Creative Commons it veule e sgnaca "anans".', + 'config-advanced-settings' => 'Configurassion avansà', + 'config-cache-options' => "Ampostassion për la memorisassion local d'oget:", + 'config-cache-help' => "La memorisassion loca d'oget a l'é dovrà për amelioré l'andi ëd MediaWiki an butant an local dij dat dovrà 'd soens. +Ij sit da mesan a gròss a son motobin ancoragià a abilité sòn, e ij sit cit a l'avran ëdcò dij benefissi.", + 'config-cache-none' => "Gnun-a memorisassion local (gnun-a funsionalità gavà, ma l'andi a peul esse anfluensà an sij sit ëd wiki gròsse)", + 'config-cache-accel' => "Memorisassion local d'oget PHP (APC, eAccelerator, XCache o WinCache)", + 'config-cache-memcached' => "Dovré Memcached (a ciama n'ampostassion e na configurassion adissionaj)", + 'config-memcached-servers' => 'Servent Memcached:', + 'config-memcached-help' => "Lista d'adrësse IP da dovré për Memcached. +A dovrìa esse separà con dle vìrgole e specifiché la pòrta da dovré (për esempi: 127.0.0.1:11211, 192.168.1.25:11211).", + 'config-extensions' => 'Estension', + 'config-extensions-help' => "J'estension listà dì-sota a son ëstàite trovà ant sò dossié ./extensions. + +A peulo avèj da manca ëd configurassion adissionaj, ma a peul abiliteje adess", + 'config-install-alreadydone' => "'''Avis''' A smija ch'a l'abie già instalà MediaWiki e ch'a preuva a instalelo torna. +Për piasì, ch'a vada a la pàgina ch'a-i ven.", + 'config-install-step-done' => 'fàit', + 'config-install-step-failed' => 'falì', + 'config-install-extensions' => "Comprende j'estension", + 'config-install-database' => 'Creassion ëd la base ëd dàit', + 'config-install-pg-schema-failed' => 'Creassion dle tàule falìa. +Sigurte che l\'utent "$1" a peussa scrive lë schema "$2".', + 'config-install-user' => "Creassion ëd n'utent ëd la base ëd dàit", + 'config-install-user-grant-failed' => 'Falì a dé ij përmess a l\'utent "$1": $2', + 'config-install-tables' => 'Creassion dle tàule', + 'config-install-tables-exist' => "'''Avis''': A smija che le tàule ëd mediaWiki a esisto già. +Sauté la creassion.", + 'config-install-tables-failed' => "'''Eror''': Creassion ëd le tàule falìa con l'eror sì-dapress: $1", + 'config-install-interwiki' => "Ampiniment dë stàndard ëd le tàule dj'anliure interwiki", + 'config-install-interwiki-list' => "As peul pa trovesse l'archivi interwiki.list.", + 'config-install-interwiki-exists' => "'''Avis''': La tàula interwiki a smija ch'a l'abia già dj'element. +Për stàndard, la lista a sarà sautà.", + 'config-install-keys' => 'Generassion ëd la ciav segreta', + 'config-install-sysop' => "Creassion dël cont ëd l'utent aministrator", + 'config-install-done' => "'''Congratulassion!''' +A l'ha instalà për da bin mediaWiki. + +L'instalador a l'ha generà n'archivi LocalSettings.php. +A conten tuta soa configurassion. + +A dovrà [$1 dëscarielo] e butelo ant la bas ëd l'instalassion ëd soa wiki (ël midem dossié d'index.php). +'''Nòta''': S'a lo fa nen adess, cost archivi ëd configurassion generà a sarà pa disponìbil për chiel pi tard s'a chita l'instalassion sensa dëscarielo. + +Quand che a l'é stàit fàit, a peul '''[$2 intré an soa wiki]'''.", +); + +/** Pashto (پښتو) + * @author Ahmed-Najib-Biabani-Ibrahimkhel + */ +$messages['ps'] = array( + 'config-your-language' => 'ستاسې ژبه:', + 'config-wiki-language' => 'د ويکي ژبه:', + 'config-page-language' => 'ژبه', + 'config-page-welcome' => 'مېډياويکي ته ښه راغلاست!', + 'config-page-name' => 'نوم', + 'config-page-install' => 'لګول', + 'config-page-complete' => 'بشپړ!', + 'config-env-php' => 'د $1 PHP نصب شو.', +); + +/** Portuguese (Português) + * @author Crazymadlover + * @author Hamilton Abreu + * @author Platonides + * @author SandroHc + * @author Waldir + */ +$messages['pt'] = array( + 'config-desc' => 'O instalador do MediaWiki', + 'config-title' => 'Instalação MediaWiki $1', + 'config-information' => 'Informação', + 'config-localsettings-upgrade' => 'Foi detectado um ficheiro LocalSettings.php. +Para actualizar esta instalação, por favor introduza o valor de $wgUpgradeKey na caixa abaixo. +Encontra este valor no LocalSettings.php.', + 'config-localsettings-cli-upgrade' => 'Foi detectada a existência de um ficheiro LocalSettings.php. +Para actualizar esta instalação execute o update.php, por favor.', + 'config-localsettings-key' => 'Chave de actualização:', + 'config-localsettings-badkey' => 'A chave que forneceu está incorreta.', + 'config-upgrade-key-missing' => 'Foi detectada uma instalação existente do MediaWiki. +Para actualizar esta instalação, por favor coloque a seguinte linha no final do seu LocalSettings.php: + +$1', + 'config-localsettings-incomplete' => 'O ficheiro LocalSettings.php existente parece estar incompleto. +A variável $1 não está definida. +Por favor defina esta variável no LocalSettings.php e clique "Continuar".', + 'config-localsettings-connection-error' => 'Ocorreu um erro ao ligar à base de dados usando as configurações especificadas no LocalSettings.php ou AdminSettings.php. Por favor corrija essas configurações e tente novamente. + +$1', + 'config-session-error' => 'Erro ao iniciar a sessão: $1', + 'config-session-expired' => 'Os seus dados de sessão parecem ter expirado. +As sessões estão configuradas para uma duração de $1. +Pode aumentar esta duração configurando session.gc_maxlifetime no php.ini. +Reinicie o processo de instalação.', + 'config-no-session' => 'Os seus dados de sessão foram perdidos! +Verifique o seu php.ini e certifique-se de que em session.save_path está definido um directório apropriado.', + 'config-your-language' => 'A sua língua:', + 'config-your-language-help' => 'Seleccione a língua que será usada durante o processo de instalação.', + 'config-wiki-language' => 'Língua da wiki:', + 'config-wiki-language-help' => 'Seleccione a língua que será predominante na wiki.', + 'config-back' => '← Voltar', + 'config-continue' => 'Continuar →', + 'config-page-language' => 'Língua', + 'config-page-welcome' => 'Bem-vindo(a) ao MediaWiki!', + 'config-page-dbconnect' => 'Ligar à base de dados', + 'config-page-upgrade' => 'Actualizar a instalação existente', + 'config-page-dbsettings' => 'Configurações da base de dados', + 'config-page-name' => 'Nome', + 'config-page-options' => 'Opções', + 'config-page-install' => 'Instalar', + 'config-page-complete' => 'Terminado!', + 'config-page-restart' => 'Reiniciar a instalação', + 'config-page-readme' => 'Leia-me', + 'config-page-releasenotes' => 'Notas de lançamento', + 'config-page-copying' => 'A copiar', + 'config-page-upgradedoc' => 'A actualizar', + 'config-page-existingwiki' => 'Wiki existente', + 'config-help-restart' => 'Deseja limpar todos os dados gravados que introduziu e reiniciar o processo de instalação?', + 'config-restart' => 'Sim, reiniciar', + 'config-welcome' => '=== Verificações do ambiente === +São realizadas verificações básicas para determinar se este ambiente é apropriado para instalação do MediaWiki. +Se necessitar de pedir ajuda durante a instalação, deve fornecer os resultados destas verificações.', + 'config-copyright' => "=== Direitos de autor e Termos de uso === + +$1 + +Este programa é software livre; pode redistribuí-lo e/ou modificá-lo nos termos da licença GNU General Public License, tal como publicada pela Free Software Foundation; tanto a versão 2 da Licença, como (por opção sua) qualquer versão posterior. + +Este programa é distribuído na esperança de que seja útil, mas '''sem qualquer garantia'''; inclusive, sem a garantia implícita da '''possibilidade de ser comercializado''' ou de '''adequação para qualquer finalidade específica'''. +Consulte a licença GNU General Public License para mais detalhes. + +Em conjunto com este programa deve ter recebido uma cópia da licença GNU General Public License; se não a recebeu, peça-a por escrito para Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ou [http://www.gnu.org/copyleft/gpl.html leia-a na internet].", + 'config-sidebar' => '* [http://www.mediawiki.org/wiki/MediaWiki/pt Página principal do MediaWiki] +* [http://www.mediawiki.org/wiki/Help:Contents/pt Ajuda] +* [http://www.mediawiki.org/wiki/Manual:Contents/pt Manual técnico] +* [http://www.mediawiki.org/wiki/Manual:FAQ FAQ] +---- +* Leia-me +* Notas de lançamento +* Cópia +* Atualização', + 'config-env-good' => 'O ambiente foi verificado. +Pode instalar o MediaWiki.', + 'config-env-bad' => 'O ambiente foi verificado. +Não pode instalar o MediaWiki.', + 'config-env-php' => 'O PHP $1 está instalado.', + 'config-env-php-toolow' => 'O PHP $1 está instalado. +No entanto, o MediaWiki requer o PHP $2 ou superior.', + 'config-unicode-using-utf8' => 'A usar o utf8_normalize.so, por Brian Viper, para a normalização Unicode.', + 'config-unicode-using-intl' => 'A usar a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.', + 'config-unicode-pure-php-warning' => "'''Aviso''': A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efectuar a normalização Unicode. Irá recorrer-se à implementação em PHP puro, que é mais lenta. +Se o seu site tem alto volume de tráfego, devia informar-se um pouco sobre a [http://www.mediawiki.org/wiki/Unicode_normalization_considerations/pt normalização Unicode].", + 'config-unicode-update-warning' => "'''Aviso''': A versão instalada do wrapper de normalização Unicode usa uma versão mais antiga da biblioteca do [http://site.icu-project.org/ projecto ICU]. +Devia [http://www.mediawiki.org/wiki/Unicode_normalization_considerations actualizá-la] se tem quaisquer preocupações sobre o uso do Unicode.", + 'config-no-db' => "Não foi possível encontrar um controlador ''(driver)'' apropriado para a base de dados!", + 'config-no-db-help' => "Precisa de instalar um controlador ''(driver)'' de base de dados para o PHP. +São suportadas as seguintes bases de dados: $1. + +Se o seu site está alojado num servidor partilhado, peça ao fornecedor do alojamento para instalar um controlador de base de dados apropriado. +Se fez a compilação do PHP você mesmo, reconfigure-o com um cliente de base de dados activado, usando, por exemplo, ./configure --with-mysql. +Se instalou o PHP a partir de um pacote Debian ou Ubuntu, então precisa de instalar também o módulo php5-mysql.", + 'config-no-fts3' => "'''Aviso''': O SQLite foi compilado sem o módulo [http://sqlite.org/fts3.html FTS3]; as funcionalidades de pesquisa não estarão disponíveis nesta instalação.", + 'config-register-globals' => "'''Aviso: A opção [http://php.net/register_globals register_globals] do PHP está activada.''' +'''Desactive-a, se puder.''' +O MediaWiki funciona mesmo assim, mas o seu servidor está exposto a potenciais vulnerabilidades de segurança.", + 'config-magic-quotes-runtime' => "'''Fatal: A opção [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] está activada!''' +Esta opção causa corrupção dos dados de entrada, de uma forma imprevisível. +Não pode instalar ou usar o MediaWiki a menos que esta opção seja desactivada.", + 'config-magic-quotes-sybase' => "'''Fatal: A opção [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] está activada!''' +Esta opção causa corrupção dos dados de entrada, de uma forma imprevisível. +Não pode instalar ou usar o MediaWiki a menos que esta opção seja desactivada.", + 'config-mbstring' => "'''Fatal: A opção [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] está activada!''' +Esta opção causa erros e pode corromper os dados de uma forma imprevisível. +Não pode instalar ou usar o MediaWiki a menos que esta opção seja desactivada.", + 'config-ze1' => "'''Fatal: A opção [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] está activada!''' +Esta opção causa problemas significativos no MediaWiki. +Não pode instalar ou usar o MediaWiki a menos que esta opção seja desactivada.", + 'config-safe-mode' => "'''Aviso:''' O [http://www.php.net/features.safe-mode safe mode] do PHP está activo. +Este modo pode causar problemas, especialmente no upload de ficheiros e no suporte a math.", + 'config-xml-bad' => 'Falta o módulo XML do PHP. +O MediaWiki necessita de funções deste módulo e não funcionará com esta configuração. +Se está a executar o Mandrake, instale o pacote php-xml.', + 'config-pcre' => 'Parece faltar o módulo de suporte PCRE. +Para funcionar, o MediaWiki necessita das funções de expressões regulares compatíveis com Perl.', + 'config-pcre-no-utf8' => "'''Fatal''': O módulo PCRE do PHP parece ter sido compilado sem suporte PCRE_UTF8. +O MediaWiki necessita do suporte UTF-8 para funcionar correctamente.", + 'config-memory-raised' => 'A configuração memory_limit do PHP era $1; foi aumentada para $2.', + 'config-memory-bad' => "'''Aviso:''' A configuração memory_limit do PHP é $1. +Isto é provavelmente demasiado baixo. +A instalação poderá falhar!", + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] instalada', + 'config-apc' => '[http://www.php.net/apc APC] instalada', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] instalado', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] instalada', + 'config-no-cache' => "'''Aviso:''' Não foram encontrados [http://eaccelerator.sourceforge.net eAccelerator], [http://www.php.net/apc APC], [http://trac.lighttpd.net/xcache/ XCache] nem [http://www.iis.net/download/WinCacheForPhp WinCache]. +A cache de objectos não será activada.", + 'config-diff3-bad' => 'O GNU diff3 não foi encontrado.', + 'config-imagemagick' => 'Foi encontrado o ImageMagick: $1. +Se possibilitar uploads, a miniaturização de imagens será activada.', + 'config-gd' => 'Foi encontrada a biblioteca gráfica GD. +Se possibilitar uploads, a miniaturização de imagens será activada.', + 'config-no-scaling' => 'Não foi encontrada a biblioteca gráfica GD nem o ImageMagick. +A miniaturização de imagens será desactivada.', + 'config-no-uri' => "'''Erro:''' Não foi possível determinar a URI actual. +A instalação foi abortada.", + 'config-uploads-not-safe' => "'''Aviso:''' O directório por omissão para uploads $1, está vulnerável à execução arbitrária de scripts. +Embora o MediaWiki verifique a existência de ameaças de segurança em todos os ficheiros enviados, é altamente recomendado que [http://www.mediawiki.org/wiki/Manual:Security#Upload_security vede esta vulnerabilidade de segurança] antes de possibilitar uploads.", + 'config-brokenlibxml' => 'O seu sistema tem uma combinação de versões de PHP e libxml2 conhecida por ser problemática, podendo causar corrupção de dados no MediaWiki e outras aplicações da internet. +Actualize para o PHP versão 5.2.9 ou posterior e libxml2 versão 2.7.3 ou posterior ([http://bugs.php.net/bug.php?id=45996 incidência reportada no PHP]). +Instalação interrompida.', + 'config-using531' => 'O MediaWiki não pode ser usado com o PHP $1 devido a um problema que envolve parâmetros de referência para __call(). +Para resolver este problema, actualize o PHP para a versão 5.3.2 ou posterior, ou reverta-o para a 5.3.0. +Instalação interrompida.', + 'config-db-type' => 'Tipo da base de dados:', + 'config-db-host' => 'Servidor da base de dados:', + 'config-db-host-help' => 'Se a base de dados estiver num servidor separado, introduza aqui o nome ou o endereço IP desse servidor. + +Se estiver a usar um servidor partilhado, o fornecedor do alojamento deve ter-lhe fornecido o nome do servidor na documentação. + +Se está a fazer a instalação num servidor Windows com MySQL, usar como nome do servidor "localhost" poderá não funcionar. Se não funcionar, tente usar "127.0.0.1" como endereço IP local.', + 'config-db-host-oracle' => 'TNS (Transparent Network Substrate) da base de dados:', + 'config-db-host-oracle-help' => 'Introduza um [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Nome Local de Ligação] válido; tem de estar visível para esta instalação um ficheiro tnsnames.ora.
    Se está a usar bibliotecas cliente versão 10g ou posterior, também pode usar o método [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Ligação Fácil] de atribuição do nome.', + 'config-db-wiki-settings' => 'Identifique esta wiki', + 'config-db-name' => 'Nome da base de dados:', + 'config-db-name-help' => 'Escolha um nome para identificar a sua wiki. +O nome não deve conter espaços. + +Se estiver a usar um servidor partilhado, o fornecedor do alojamento deve poder fornecer-lhe o nome de uma base de dados que possa usar, ou permite-lhe criar bases de dados através de um painel de controle.', + 'config-db-name-oracle' => "Esquema ''(schema)'' da base de dados:", + 'config-db-account-oracle-warn' => "Há três cenários suportados na instalação do servidor de base de dados Oracle: + +Se pretende criar a conta de acesso pela internet na base de dados durante o processo de instalação, forneça como conta para a instalação uma conta com o papel de SYSDBA na base de dados e especifique as credenciais desejadas para a conta de acesso pela internet. Se não pretende criar a conta de acesso pela internet durante a instalação, pode criá-la manualmente e fornecer só essa conta para a instalação (se ela tiver as permissões necessárias para criar os objectos do esquema ''(schema)''). A terceira alternativa é fornecer duas contas diferentes; uma com privilégios de criação e outra com privilégios limitados para o acesso pela internet. + +Existe um script para criação de uma conta com os privilégios necessários no directório \"maintenance/oracle/\" desta instalação. Mantenha em mente que usar uma conta com privilégios limitados impossibilita todas as operações de manutenção com a conta padrão.", + 'config-db-install-account' => 'Conta do utilizador para a instalação', + 'config-db-username' => 'Nome do utilizador da base de dados:', + 'config-db-password' => 'Palavra-chave do utilizador da base de dados:', + 'config-db-password-empty' => 'Introduza a palavra-chave do novo utilizador da base de dados: $1. +Embora seja possível criar utilizadores sem palavra-chave, fazê-lo não é seguro.', + 'config-db-install-username' => 'Introduza o nome de utilizador que será usado para aceder à base de dados durante o processo de instalação. Este utilizador não é o do MediaWiki; é o utilizador da base de dados.', + 'config-db-install-password' => 'Introduza a palavra-chave do utilizador que será usado para aceder à base de dados durante o processo de instalação. Esta palavra-chave não é a do utilizador do MediaWiki; é a palavra-chave do utilizador da base de dados.', + 'config-db-install-help' => 'Introduza o nome de utilizador e a palavra-chave que serão usados para aceder à base de dados durante o processo de instalação.', + 'config-db-account-lock' => 'Usar o mesmo nome de utilizador e palavra-chave durante a operação normal', + 'config-db-wiki-account' => 'Conta de utilizador para a operação normal', + 'config-db-wiki-help' => 'Introduza o nome de utilizador e a palavra-chave que serão usados para aceder à base de dados durante a operação normal da wiki. +Se o utilizador não existir na base de dados, mas a conta de instalação tiver privilégios suficientes, o utilizador que introduzir será criado na base de dados com os privilégios mínimos necessários para a operação normal da wiki.', + 'config-db-prefix' => 'Prefixo para as tabelas da base de dados:', + 'config-db-prefix-help' => 'Se necessitar de partilhar uma só base de dados entre várias wikis, ou entre o MediaWiki e outra aplicação, pode escolher adicionar um prefixo ao nome de todas as tabelas desta instalação, para evitar conflitos. +Não use espaços. + +Normalmente, este campo deve ficar vazio.', + 'config-db-charset' => 'Conjunto de caracteres da base de dados', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binary', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 backwards-compatible UTF-8', + 'config-charset-help' => "'''Aviso:''' Se usar '''backwards-compatible UTF-8''' (\"UTF-8 compatível com versões anteriores\") no MySQL 4.1+, e depois fizer cópias de segurança da base de dados usando mysqldump, poderá destruir todos os caracteres que não fazem parte do conjunto ASCII, corrompendo assim, de forma irreversível, as suas cópias de segurança! + +No modo '''binary''' (\"binário\"), o MediaWiki armazena o texto UTF-8 na base de dados em campos binários. +Isto é mais eficiente do que o modo UTF-8 do MySQL e permite que sejam usados todos os caracteres Unicode. +No modo '''UTF-8''', o MySQL saberá em que conjunto de caracteres os seus dados estão e pode apresentá-los e convertê-los da forma mais adequada, +mas não lhe permitirá armazenar caracteres acima do [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Plano Multilingue Básico].", + 'config-mysql-old' => 'É necessário o MySQL $1 ou posterior; tem a versão $2.', + 'config-db-port' => 'Porta da base de dados:', + 'config-db-schema' => "Esquema ''(schema)'' do MediaWiki", + 'config-db-schema-help' => 'Normalmente, este esquema ("schema") estará correcto. +Altere-o só se souber que precisa de o fazer.', + 'config-sqlite-dir' => 'Directório de dados do SQLite:', + 'config-sqlite-dir-help' => "O SQLite armazena todos os dados num único ficheiro. + +Durante a instalação, o servidor de internet precisa de ter permissão de escrita no directório que especificar. + +Este directório '''não''' deve poder ser acedido directamente da internet, por isso está a ser colocado onde estão os seus ficheiros PHP. + +Juntamente com o directório, o instalador irá criar um ficheiro .htaccess, mas se esta operação falhar é possível que alguém venha a ter acesso directo à base de dados. +Isto inclui acesso aos dados dos utilizadores (endereços de correio electrónico, palavras-chave encriptadas), às revisões eliminadas e a outros dados de acesso restrito na wiki. + +Considere colocar a base de dados num local completamente diferente, como, por exemplo, em /var/lib/mediawiki/asuawiki.", + 'config-oracle-def-ts' => 'Tablespace padrão:', + 'config-oracle-temp-ts' => 'Tablespace temporário:', + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Oracle', + 'config-support-info' => 'O MediaWiki suporta as seguintes plataformas de base de dados: + +$1 + +Se a plataforma que pretende usar não está listada abaixo, siga as instruções nos links acima para activar o suporte.', + 'config-support-mysql' => '* $1 é a plataforma primária do MediaWiki e a melhor suportada ([http://www.php.net/manual/en/mysql.installation.php como compilar PHP com suporte MySQL])', + 'config-support-postgres' => '* $1 é uma plataforma de base de dados comum, de fonte aberta, alternativa ao MySQL. ([http://www.php.net/manual/en/pgsql.installation.php como compilar PHP com suporte PostgreSQL])', + 'config-support-sqlite' => '* $1 é uma plataforma de base de dados ligeira muito bem suportada. ([http://www.php.net/manual/en/pdo.installation.php Como compilar PHP com suporte SQLite], usa PDO)', + 'config-support-oracle' => '* $1 é uma base de dados de uma empresa comercial. ([http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])', + 'config-header-mysql' => 'Definições MySQL', + 'config-header-postgres' => 'Definições PostgreSQL', + 'config-header-sqlite' => 'Definições SQLite', + 'config-header-oracle' => 'Definições Oracle', + 'config-invalid-db-type' => 'O tipo de base de dados é inválido', + 'config-missing-db-name' => 'Tem de introduzir um valor para "Nome da base de dados"', + 'config-missing-db-host' => 'Tem de introduzir um valor para "Servidor da base de dados"', + 'config-missing-db-server-oracle' => 'Tem de introduzir um valor para "TNS da base de dados"', + 'config-invalid-db-server-oracle' => 'O TNS da base de dados, "$1", é inválido. +Use só letras (a-z, A-Z), algarismos (0-9), sublinhados (_) e pontos (.) dos caracteres ASCII.', + 'config-invalid-db-name' => 'O nome da base de dados, "$1", é inválido. +Use só letras (a-z, A-Z), algarismos (0-9), sublinhados (_) e hífens (-) dos caracteres ASCII.', + 'config-invalid-db-prefix' => 'O prefixo da base de dados, "$1", é inválido. +Use só letras (a-z, A-Z), algarismos (0-9), sublinhados (_) e hífens (-) dos caracteres ASCII.', + 'config-connection-error' => '$1. + +Verifique o servidor, o nome do utilizador e a palavra-chave abaixo e tente novamente.', + 'config-invalid-schema' => "O esquema ''(schema)'' do MediaWiki, \"\$1\", é inválido. +Use só letras (a-z, A-Z), algarismos (0-9) e sublinhados (_) dos caracteres ASCII.", + 'config-db-sys-create-oracle' => 'O instalador só permite criar uma conta nova usando uma conta SYSDBA.', + 'config-db-sys-user-exists-oracle' => 'A conta "$1" já existe. A conta SYSDBA só pode criar uma conta nova!', + 'config-postgres-old' => 'É necessário o PostgreSQL $1 ou posterior; tem a versão $2.', + 'config-sqlite-name-help' => 'Escolha o nome que identificará a sua wiki. +Não use espaços ou hífens. +Este nome será usado como nome do ficheiro de dados do SQLite.', + 'config-sqlite-parent-unwritable-group' => 'Não é possível criar o directório de dados $1, porque o servidor de internet não tem permissão de escrita no directório que o contém $2. + +O instalador determinou em que nome de utilizador o seu servidor de internet está a correr. +Para continuar, configure o directório $3 para poder ser escrito por este utilizador. +Para fazê-lo em sistemas Unix ou Linux, use: + +
    cd $2
    +mkdir $3
    +chgrp $4 $3
    +chmod g+w $3
    ', + 'config-sqlite-parent-unwritable-nogroup' => 'Não é possível criar o directório de dados $1, porque o servidor de internet não tem permissão de escrita no directório que o contém $2. + +Não foi possível determinar em que nome de utilizador o seu servidor de internet está a correr. +Para continuar, configure o directório $3 para que este possa ser globalmente escrito por esse utilizador (e por outros!). +Para fazê-lo em sistemas Unix ou Linux, use: + +
    cd $2
    +mkdir $3
    +chmod a+w $3
    ', + 'config-sqlite-mkdir-error' => 'Ocorreu um erro ao criar o directório de dados "$1". +Verifique a localização e tente novamente.', + 'config-sqlite-dir-unwritable' => 'Não foi possível escrever no directório "$1". +Altere as permissões para que ele possa ser escrito pelo servidor de internet e tente novamente.', + 'config-sqlite-connection-error' => '$1. + +Verifique o directório de dados e o nome da base de dados abaixo e tente novamente.', + 'config-sqlite-readonly' => 'Não é possivel escrever no ficheiro $1.', + 'config-sqlite-cant-create-db' => 'Não foi possível criar o ficheiro da base de dados $1.', + 'config-sqlite-fts3-downgrade' => 'O PHP não tem suporte FTS3; a reverter o esquema das tabelas para o anterior', + 'config-can-upgrade' => "Esta base de dados contém tabelas do MediaWiki. +Para actualizá-las para o MediaWiki $1, clique '''Continuar'''.", + 'config-upgrade-done' => "Actualização terminada. + +Agora pode [$1 começar a usar a sua wiki]. + +Se quiser regenerar o seu ficheiro LocalSettings.php, clique o botão abaixo. +Esta operação '''não é recomendada''' a menos que esteja a ter problemas com a sua wiki.", + 'config-upgrade-done-no-regenerate' => 'Actualização terminada. + +Agora pode [$1 começar a usar a sua wiki].', + 'config-regenerate' => 'Regenerar o LocalSettings.php →', + 'config-show-table-status' => 'A consulta SHOW TABLE STATUS falhou!', + 'config-unknown-collation' => "'''Aviso:''' A base de dados está a utilizar uma colação ''(collation)'' desconhecida.", + 'config-db-web-account' => 'Conta na base de dados para acesso pela internet', + 'config-db-web-help' => 'Seleccione o nome de utilizador e a palavra-chave que o servidor de internet irá utilizar para aceder ao servidor da base de dados, durante a operação normal da wiki.', + 'config-db-web-account-same' => 'Usar a mesma conta usada na instalação', + 'config-db-web-create' => 'Criar a conta se ainda não existir', + 'config-db-web-no-create-privs' => 'A conta que especificou para a instalação não tem privilégios suficientes para criar uma conta. +A conta que especificar aqui já tem de existir.', + 'config-mysql-engine' => 'Motor de armazenamento:', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-engine-help' => "'''InnoDB''' é quase sempre a melhor opção, porque suporta bem acessos simultâneos ''(concurrency)''. + +'''MyISAM''' pode ser mais rápido no modo de utilizador único ou em instalações somente para leitura. +As bases de dados MyISAM tendem a ficar corrompidas com maior frequência do que as bases de dados InnoDB.", + 'config-mysql-charset' => 'Conjunto de caracteres da base de dados:', + 'config-mysql-binary' => 'Binary', + 'config-mysql-utf8' => 'UTF-8', + 'config-mysql-charset-help' => "No modo '''binary''' (\"binário\"), o MediaWiki armazena o texto UTF-8 na base de dados em campos binários. +Isto é mais eficiente do que o modo UTF-8 do MySQL e permite que sejam usados todos os caracteres Unicode. + +No modo '''UTF-8''', o MySQL saberá em que conjunto de caracteres os seus dados estão e pode apresentá-los e convertê-los da forma mais adequada, +mas não lhe permitirá armazenar caracteres acima do [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Plano Multilingue Básico].", + 'config-site-name' => 'Nome da wiki:', + 'config-site-name-help' => 'Este nome aparecerá no título da janela do seu browser e em vários outros sítios.', + 'config-site-name-blank' => 'Introduza o nome do site.', + 'config-project-namespace' => 'Espaço nominal do projecto:', + 'config-ns-generic' => 'Projecto', + 'config-ns-site-name' => 'O mesmo que o nome da wiki: $1', + 'config-ns-other' => 'Outro (especifique)', + 'config-ns-other-default' => 'AMinhaWiki', + 'config-project-namespace-help' => 'Seguindo o exemplo da Wikipedia, muitas wikis mantêm as páginas das suas normas e políticas, separadas das páginas de conteúdo, num "\'\'\'espaço nominal do projecto\'\'\'". +Todos os nomes das páginas neste espaço nominal começam com um determinado prefixo, que pode especificar aqui. +Tradicionalmente, este prefixo deriva do nome da wiki, mas não pode conter caracteres de pontuação, como "#" ou ":".', + 'config-ns-invalid' => 'O espaço nominal especificado "$1" é inválido. +Introduza um espaço nominal de projecto diferente.', + 'config-ns-conflict' => 'O espaço nominal que especificou, "$1", cria um conflito com um dos espaços nominais padrão do MediaWiki. +Especifique um espaço nominal do projecto diferente.', + 'config-admin-box' => 'Conta de administrador', + 'config-admin-name' => 'O seu nome:', + 'config-admin-password' => 'Palavra-chave:', + 'config-admin-password-confirm' => 'Repita a palavra-chave:', + 'config-admin-help' => 'Introduza aqui o seu nome de utilizador preferido, por exemplo, "João Beltrão". +Este é o nome que irá utilizar para entrar na wiki.', + 'config-admin-name-blank' => 'Introduza um nome de utilizador para administrador.', + 'config-admin-name-invalid' => 'O nome de utilizador especificado "$1" é inválido. +Introduza um nome de utilizador diferente.', + 'config-admin-password-blank' => 'Introduza uma palavra-chave para a conta de administrador.', + 'config-admin-password-same' => 'A palavra-chave tem de ser diferente do nome de utilizador.', + 'config-admin-password-mismatch' => 'As duas palavras-chave que introduziu não coincidem.', + 'config-admin-email' => 'Correio electrónico:', + 'config-admin-email-help' => 'Introduza aqui um correio electrónico que lhe permita receber mensagens de outros utilizadores da wiki, reiniciar a sua palavra-chave e receber notificações de alterações às suas páginas vigiadas. Pode deixar o campo vazio.', + 'config-admin-error-user' => 'Ocorreu um erro interno ao criar um administrador com o nome "$1".', + 'config-admin-error-password' => 'Ocorreu um erro interno ao definir uma palavra-chave para o administrador "$1":
    $2
    ', + 'config-admin-error-bademail' => 'Introduziu um correio electrónico inválido', + 'config-subscribe' => 'Subscreva a [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce lista de divulgação de anúncios de lançamento].', + 'config-subscribe-help' => 'Esta é uma lista de divulgação de baixo volume para anúncios de lançamento de versões novas, incluindo anúncios de segurança importantes. +Deve subscrevê-la e actualizar a sua instalação MediaWiki quando são lançadas versões novas.', + 'config-almost-done' => 'Está quase a terminar! +Agora pode saltar as configurações restantes e instalar já a wiki.', + 'config-optional-continue' => 'Faz-me mais perguntas.', + 'config-optional-skip' => 'Já estou aborrecido, instala lá a wiki.', + 'config-profile' => 'Perfil de permissões:', + 'config-profile-wiki' => 'Wiki tradicional', + 'config-profile-no-anon' => 'Criação de conta exigida', + 'config-profile-fishbowl' => 'Somente utilizadores autorizados', + 'config-profile-private' => 'Wiki privada', + 'config-profile-help' => "As wikis funcionam melhor quando se deixa tantas pessoas editá-las quanto possível. +No MediaWiki, é fácil rever as alterações recentes e reverter quaisquer estragos causados por utilizadores novatos ou maliciosos. + +No entanto, muitas pessoas consideram o MediaWiki útil de variadas formas e nem sempre é fácil convencer todas as pessoas dos benefícios desta filosofia wiki. +Por isso pode optar. + +Uma '''{{int:config-profile-wiki}}''' permite que todos a editem, sem sequer necessitar de autenticação. +Uma wiki com '''{{int:config-profile-no-anon}}''' atribui mais responsabilidade, mas pode afastar os colaboradores ocasionais. + +Um cenário '''{{int:config-profile-fishbowl}}''' permite que os utilizadores aprovados editem, mas que o público visione as páginas, incluindo o historial das mesmas. +Uma '''{{int:config-profile-private}}''' só permite que os utilizadores aprovados visionem as páginas e as editem. + +Após a instalação, estarão disponíveis mais configurações de privilégios. Consulte [http://www.mediawiki.org/wiki/Manual:User_rights a entrada relevante no Manual].", + 'config-license' => 'Direitos de autor e licença:', + 'config-license-none' => 'Sem rodapé com a licença', + 'config-license-cc-by-sa' => 'Atribuição - Partilha nos Mesmos Termos, da Creative Commons', + 'config-license-cc-by-nc-sa' => 'Atribuição - Uso Não-Comercial - Partilha nos Mesmos Termos, da Creative Commons', + 'config-license-cc-0' => 'Creative Commons Zero', + 'config-license-gfdl-old' => 'GNU Free Documentation License 1.2', + 'config-license-gfdl-current' => 'GNU Free Documentation License 1.3 ou posterior', + 'config-license-pd' => 'Domínio Público', + 'config-license-cc-choose' => 'Seleccione uma licença personalizada da Creative Commons', + 'config-license-help' => 'Muitas wikis de acesso público licenciam todas as colaborações com uma [http://freedomdefined.org/Definition licença livre]. +Isto ajuda a criar um sentido de propriedade da comunidade e encoraja as colaborações a longo prazo. +Tal não é geralmente necessário nas wikis privadas ou corporativas. + +Se pretende que seja possível usar textos da Wikipédia na sua wiki e que seja possível a Wikipédia aceitar textos copiados da sua wiki, deve escolher a licença Atribuição - Partilha nos Mesmos Termos, da Creative Commons. + +A licença GNU Free Documentation License era a anterior licença da Wikipédia. +Embora ainda seja uma licença válida, ela tem certas características que tornam o reuso e a interpretação difíceis.', + 'config-email-settings' => 'Definições do correio electrónico', + 'config-enable-email' => 'Activar mensagens electrónicas de saída', + 'config-enable-email-help' => 'Se quer que o correio electrónico funcione, as [http://www.php.net/manual/en/mail.configuration.php definições de correio electrónico do PHP] têm de estar configuradas correctamente. +Se não pretende viabilizar qualquer funcionalidade de correio electrónico, pode desactivá-lo aqui.', + 'config-email-user' => 'Activar mensagens electrónicas entre utilizadores', + 'config-email-user-help' => 'Permitir que todos os utilizadores troquem entre si mensagens de correio electrónico, se tiverem activado esta funcionalidade nas suas preferências.', + 'config-email-usertalk' => 'Activar notificações de alterações à página de discussão dos utilizadores', + 'config-email-usertalk-help' => 'Permitir que os utilizadores recebam notificações de alterações à sua página de discussão, se tiverem activado esta funcionalidade nas suas preferências.', + 'config-email-watchlist' => 'Activar notificação de alterações às páginas vigiadas', + 'config-email-watchlist-help' => 'Permitir que os utilizadores recebam notificações de alterações às suas páginas vigiadas, se tiverem activado esta funcionalidade nas suas preferências.', + 'config-email-auth' => 'Activar autenticação do correio electrónico', + 'config-email-auth-help' => "Se esta opção for activada, os utilizadores têm de confirmar o seu endereço de correio electrónico usando um link que lhes é enviado sempre que o definirem ou alterarem. +Só os endereços de correio electrónico autenticados podem receber mensagens electrónicas dos outros utilizadores ou alterar as mensagens de notificação. +É '''recomendado''' que esta opção seja activada nas wikis de acesso público para impedir o uso abusivo das funcionalidades de correio electrónico.", + 'config-email-sender' => 'Endereço de correio electrónico de retorno:', + 'config-email-sender-help' => 'Introduza o endereço de correio electrónico que será usado como endereço de retorno nas mensagens electrónicas de saída. +É para este endereço que serão enviadas as mensagens que não podem ser entregues. +Muitos servidores de correio electrónico exigem que pelo menos a parte do nome do domínio seja válida. \\', + 'config-upload-settings' => 'Upload de imagens e ficheiros', + 'config-upload-enable' => 'Possibilitar o upload de ficheiros', + 'config-upload-help' => 'O upload de ficheiros expõe o seu servidor a riscos de segurança. +Para mais informações, leia a [http://www.mediawiki.org/wiki/Manual:Security secção sobre segurança] do Manual Técnico. + +Para permitir o upload de ficheiros, altere as permissões do subdirectório images no directório de raiz do MediaWik para que o servidor de internet possa escrever nele. +Depois active esta opção.', + 'config-upload-deleted' => 'Directório para os ficheiros apagados:', + 'config-upload-deleted-help' => 'Escolha um directório onde serão arquivados os ficheiros apagados. +O ideal é que este directório não possa ser directamente acedido a partir da internet.', + 'config-logo' => 'URL do logótipo:', + 'config-logo-help' => 'O tema padrão do MediaWiki inclui espaço para um logótipo de 135x160 pixels no canto superior esquerdo. +Faça o upload de uma imagem com estas dimensões e introduza aqui a URL dessa imagem. + +Se não pretende usar um logótipo, deixe este campo em branco.', + 'config-instantcommons' => 'Activar a funcionalidade Instant Commons', + 'config-instantcommons-help' => 'O [http://www.mediawiki.org/wiki/InstantCommons Instant Commons] é uma funcionalidade que permite que as wikis usem imagens, áudio e outros ficheiros multimédia disponíveis no site [http://commons.wikimedia.org/ Wikimedia Commons]. +Para poder usá-los, o MediaWiki necessita de acesso à internet. + +Para mais informações sobre esta funcionalidade, incluindo instruções sobre como configurá-la para usar outras wikis em vez da Wikimedia Commons, consulte o [http://mediawiki.org/wiki/Manual:$wgForeignFileRepos Manual Técnico].', + 'config-cc-error' => 'O auxiliar de escolha de licenças da Creative Commons não produziu resultados. +Introduza o nome da licença manualmente.', + 'config-cc-again' => 'Escolha outra vez...', + 'config-cc-not-chosen' => 'Escolha a licença da Creative Commons que pretende e clique "continuar".', + 'config-advanced-settings' => 'Configuração avançada', + 'config-cache-options' => 'Definições da cache de objectos:', + 'config-cache-help' => 'A cache de objectos é usada para melhorar o desempenho do MediaWiki. Armazena dados usados com frequência. +Sites de tamanho médio ou grande são altamente encorajados a activar esta funcionalidade e os sites pequenos também terão alguns benefícios em fazê-lo.', + 'config-cache-none' => 'Sem cache (não é removida nenhuma funcionalidade, mas a velocidade de operação pode ser afectada nas wikis grandes)', + 'config-cache-accel' => 'Cache de objectos do PHP (APC, eAccelerator, XCache ou WinCache)', + 'config-cache-memcached' => 'Usar Memcached (requer instalação e configurações adicionais)', + 'config-memcached-servers' => 'Servidores Memcached:', + 'config-memcached-help' => 'Lista de endereços IP que serão usados para o Memcached. +Deve-se colocar um por linha e indicar a porta a utilizar. Por exemplo: + 127.0.0.1:11211 + 192.168.1.25:1234', + 'config-memcache-needservers' => 'Seleccionou o Memcached como tipo de chache, mas não especificou nenhum servidor.', + 'config-memcache-badip' => 'Introduziu um endereço IP inválido para o Memcached: $1.', + 'config-memcache-noport' => 'Não especificou a porta a usar para o servidor Memcached: $1. +Se não sabe qual é a porta, a predefinida é a 11211.', + 'config-memcache-badport' => 'Os números das portas do Memcached devem estar entre $1 e $2.', + 'config-extensions' => 'Extensões', + 'config-extensions-help' => 'Foi detectada a existência das extensões listadas acima, no seu directório ./extensions. + +Estas talvez necessitem de configurações adicionais, mas pode activá-las agora', + 'config-install-alreadydone' => "'''Aviso:''' Parece que já instalou o MediaWiki e está a tentar instalá-lo novamente. +Passe para a próxima página, por favor.", + 'config-install-begin' => 'Ao clicar "{{int:config-continue}}", vai iniciar a instalação do MediaWiki. +Se quiser fazer mais alterações, clique Voltar.', + 'config-install-step-done' => 'terminado', + 'config-install-step-failed' => 'falhou', + 'config-install-extensions' => 'A incluir as extensões', + 'config-install-database' => 'A preparar a base de dados', + 'config-install-pg-schema-not-exist' => "O esquema ''(schema)'' PostgreSQL não existe", + 'config-install-pg-schema-failed' => 'A criação das tabelas falhou. +Certifique-se de que o utilizador "$1" pode escrever no esquema \'\'(schema)\'\' "$2".', + 'config-install-pg-commit' => 'A gravar as alterações', + 'config-install-pg-plpgsql' => 'A verificar a presença da linguagem PL/pgSQL', + 'config-pg-no-plpgsql' => 'É preciso instalar a linguagem PL/pgSQL na base de dados $1', + 'config-pg-no-create-privs' => 'A conta que especificou para a instalação não tem privilégios suficientes para criar uma conta.', + 'config-install-user' => 'A criar o utilizador da base de dados', + 'config-install-user-alreadyexists' => 'O utilizador "$1" já existe', + 'config-install-user-create-failed' => 'A criação do utilizador "$1" falhou: $2', + 'config-install-user-grant-failed' => 'A atribuição das permissões ao utilizador "$1" falhou: $2', + 'config-install-tables' => 'A criar as tabelas', + 'config-install-tables-exist' => "'''Aviso''': As tabelas do MediaWiki parecem já existir. +A criação das tabelas será saltada.", + 'config-install-tables-failed' => "'''Erro''': A criação das tabelas falhou com o seguinte erro: $1", + 'config-install-interwiki' => 'A preencher a tabela padrão de interwikis', + 'config-install-interwiki-list' => 'Não foi possível encontrar o ficheiro interwiki.list.', + 'config-install-interwiki-exists' => "'''Aviso''': A tabela de interwikis parece já conter entradas. +O preenchimento padrão desta tabela será saltado.", + 'config-install-stats' => 'A inicializar as estatísticas', + 'config-install-keys' => 'A gerar a chave secreta', + 'config-install-sysop' => 'A criar a conta de administrador', + 'config-install-subscribe-fail' => 'Não foi possível subscrever a lista mediawiki-announce', + 'config-install-mainpage' => 'A criar a página principal com o conteúdo padrão.', + 'config-install-extension-tables' => 'A criar as tabelas das extensões activadas', + 'config-install-mainpage-failed' => 'Não foi possível inserir a página principal: $1', + 'config-install-done' => "'''Parabéns!''' +Terminou a instalação do MediaWiki. + +O instalador gerou um ficheiro LocalSettings.php. +Este ficheiro contém todas as configurações. + +Precisa de fazer o download do ficheiro e colocá-lo no directório de raiz da sua instalação (o mesmo directório onde está o ficheiro index.php). Este download deverá ter sido iniciado automaticamente. + +Se o download não foi iniciado, ou se o cancelou, pode recomeçá-lo clicando o link abaixo: + +$3 + +'''Nota''': Se não fizer isto agora, o ficheiro que foi gerado deixará de estar disponível quando sair do processo de instalação. + +Depois de terminar o passo anterior, pode '''[$2 entrar na wiki]'''.", + 'config-download-localsettings' => 'Download do LocalSettings.php', + 'config-help' => 'ajuda', +); + +/** Brazilian Portuguese (Português do Brasil) + * @author Giro720 + * @author Gustavo + * @author Marcionunes + */ +$messages['pt-br'] = array( + 'config-desc' => 'O instalador do MediaWiki', + 'config-title' => 'Instalação MediaWiki $1', + 'config-information' => 'Informações', + 'config-localsettings-upgrade' => "'''Aviso''': Foi detetada a existência de um arquivo LocalSettings.php. +É possível atualizar o seu software. +Mova o LocalSettings.php para um lugar seguro e execute o instalador novamente, por favor.", + 'config-localsettings-cli-upgrade' => 'Foi detectado um arquivo LocalSettings.php. +Para atualizar esta instalação, por favor, use: --upgrade=yes.', + 'config-localsettings-key' => 'Chave de atualização:', + 'config-localsettings-badkey' => 'A senha inserida está incorreta.', + 'config-upgrade-key-missing' => 'Foi detectada uma instalação existente do MediaWiki. +Para atualizar esta instalação, por favor, coloque a seguinte linha na parte inferior do seu LocalSettings.php: + +$ 1', + 'config-session-error' => 'Erro ao iniciar a sessão: $1', + 'config-session-expired' => 'Os seus dados de sessão parecem ter expirado. +As sessões estão configuradas para uma duração de $1. +Você pode aumentar esta duração configurando session.gc_maxlifetime no php.ini. +Reinicie o processo de instalação.', + 'config-no-session' => 'Os seus dados de sessão foram perdidos! +Verifique o seu php.ini e certifique-se de que em session.save_path está definido um diretório apropriado.', + 'config-your-language' => 'A sua língua:', + 'config-your-language-help' => 'Selecione a língua que será usada durante o processo de instalação.', + 'config-wiki-language' => 'Língua da wiki:', + 'config-wiki-language-help' => 'Selecione a língua que será predominante na wiki.', + 'config-back' => '← Voltar', + 'config-continue' => 'Continuar →', + 'config-page-language' => 'Língua', + 'config-page-welcome' => 'Bem-vindo(a) ao MediaWiki!', + 'config-page-dbconnect' => 'Ligar à base de dados', + 'config-page-upgrade' => 'Atualizar a instalação existente', + 'config-page-dbsettings' => 'Configurações da base de dados', + 'config-page-name' => 'Nome', + 'config-page-options' => 'Opções', + 'config-page-install' => 'Instalar', + 'config-page-complete' => 'Terminado!', + 'config-page-restart' => 'Reiniciar a instalação', + 'config-page-readme' => 'Leia-me', + 'config-page-releasenotes' => 'Notas de lançamento', + 'config-page-copying' => 'Copiando', + 'config-page-upgradedoc' => 'Atualizando', + 'config-help-restart' => 'Deseja limpar todos os dados salvos que você introduziu e reiniciar o processo de instalação?', + 'config-restart' => 'Sim, reiniciar', + 'config-welcome' => '=== Verificações do ambiente === +São realizadas verificações básicas para determinar se este ambiente é apropriado para instalação do MediaWiki. +Você deverá fornecer os resultados destas verificações se você precisar de ajuda durante a instalação.', + 'config-copyright' => "=== Direitos autorais e Termos de uso === + +$1 + +Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo nos termos da licença GNU General Public License, tal como publicada pela Free Software Foundation; tanto a versão 2 da Licença, como (por opção sua) qualquer versão posterior. + +Este programa é distribuído na esperança de que seja útil, mas '''sem qualquer garantia'''; inclusive, sem a garantia implícita da '''possibilidade de ser comercializado''' ou de '''adequação para qualquer finalidade específica'''. +Consulte a licença GNU General Public License para mais detalhes. + +Em conjunto com este programa você deve ter recebido uma cópia da licença GNU General Public License; se não a recebeu, peça-a por escrito para Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ou [http://www.gnu.org/copyleft/gpl.html leia-a na internet].", + 'config-sidebar' => '* [http://www.mediawiki.org/wiki/MediaWiki/pt Página principal do MediaWiki] +* [http://www.mediawiki.org/wiki/Help:Contents/pt Ajuda] +* [http://www.mediawiki.org/wiki/Manual:Contents/pt Manual técnico] +* [http://www.mediawiki.org/wiki/Manual:FAQ FAQ]', + 'config-env-good' => 'O ambiente foi verificado. +Você pode instalar o MediaWiki.', + 'config-env-bad' => 'O ambiente foi verificado. +Você não pode instalar o MediaWiki.', + 'config-env-php' => 'O PHP $1 está instalado.', + 'config-unicode-using-utf8' => 'A usar o utf8_normalize.so, de Brian Viper, para a normalização Unicode.', + 'config-unicode-using-intl' => 'Usando a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.', + 'config-unicode-pure-php-warning' => "'''Aviso''': A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode. +Se o seu site tem um alto volume de tráfego, devia informar-se um pouco sobre a [http://www.mediawiki.org/wiki/Unicode_normalization_considerations normalização Unicode].", + 'config-no-db' => 'Não foi possível encontrar um driver de banco de dados adequado!', + 'config-no-db-help' => 'Você precisa instalar um driver de banco de dados para PHP. +Os seguintes tipos de banco de dados são suportados: $1. + +Se você estiver em hospedagem compartilhada, pergunte ao seu provedor de hospedagem para instalar um driver de banco de dados apropriado. +Se você compilou o PHP você mesmo, reconfigurá-lo com um cliente de banco de dados habilitado, por exemplo, usando ./configure --with-mysql. +Se você instalou o PHP de um Debian ou Ubuntu package, então você também precisa instalar o módulo php5-mysql.', + 'config-no-fts3' => "' ' 'Aviso' ' ': O SQLite foi compilado sem o módulo [http://sqlite.org/fts3.html FTS3]; as funcionalidades de pesquisa não estarão disponíveis nesta instalação.", + 'config-register-globals' => "' ' 'Aviso: A opção [http://php.net/register_globals register_globals] do PHP está ativada.''' +' ' 'Desative-a, se puder.''' +O MediaWiki funcionará mesmo assim, mas o seu servidor ficará exposto a potenciais vulnerabilidades de segurança.", + 'config-logo-help' => 'O tema padrão do MediaWiki inclui espaço para um logotipo de 135x160 pixels no canto superior esquerdo. +Faça o upload de uma imagem com estas dimensões e introduza aqui a URL dessa imagem. + +Se você não pretende usar um logotipo, deixe este campo em branco.', +); + +/** Romanian (Română) + * @author Stelistcristi + */ +$messages['ro'] = array( + 'config-session-error' => 'Eroare la pornirea sesiunii: $1', + 'config-your-language' => 'Limba ta:', + 'config-your-language-help' => 'Alege o limbă pentru a o utiliza în timpul procesului de instalare.', + 'config-wiki-language' => 'Limbă wiki:', + 'config-wiki-language-help' => 'Alege limba în care wiki-ul va fi scris predominant.', + 'config-back' => '← Înapoi', + 'config-continue' => 'Continuă →', + 'config-page-language' => 'Limbă', + 'config-page-welcome' => 'Bun venit la MediaWiki!', + 'config-page-dbconnect' => 'Conectează la baza de date', + 'config-page-upgrade' => 'Extinde instalarea existentă', + 'config-page-dbsettings' => 'Setări ale bazei de date', + 'config-page-name' => 'Nume', + 'config-page-options' => 'Opţiuni', + 'config-page-install' => 'Instalare', + 'config-page-restart' => 'Reporneşte instalarea', + 'config-page-readme' => 'Citeşte-mă', + 'config-page-releasenotes' => 'Note de lansare', + 'config-db-type' => 'Tipul bazei de date:', + 'config-db-host' => 'Gazdă bază de date:', + 'config-header-mysql' => 'Setările MySQL', + 'config-header-sqlite' => 'Setări SQLite', + 'config-header-oracle' => 'Setări Oracle', + 'config-missing-db-name' => 'Trebuie să introduci o valoare pentru „Numele bazei de date”', + 'config-ns-generic' => 'Proiect', + 'config-admin-password' => 'Parolă:', +); + +/** Russian (Русский) + * @author DCamer + * @author Eleferen + * @author Krinkle + * @author MaxSem + * @author Yuriy Apostol + * @author Александр Сигачёв + * @author Сrower + */ +$messages['ru'] = array( + 'config-desc' => 'Инсталлятор MediaWiki', + 'config-title' => 'Установка MediaWiki $1', + 'config-information' => 'Информация', + 'config-localsettings-upgrade' => 'Обнаружен файл LocalSettings.php. +Для обновления этой установки, пожалуйста, введите значение $wgUpgradeKey. +Его можно найти в файле LocalSettings.php.', + 'config-localsettings-cli-upgrade' => 'Обнаружен файл LocalSettings.php. +Для обновления этой установки, пожалуйста, запустите update.php', + 'config-localsettings-key' => 'Ключ обновления:', + 'config-localsettings-badkey' => 'Вы указали неправильный ключ', + 'config-upgrade-key-missing' => 'Обнаружена существующая установленная копия MediaWiki. +Чтобы обновить обнаруженную установку, пожалуйста, добавьте следующую строку в конец вашего файла LocalSettings.php: + +$1', + 'config-localsettings-incomplete' => 'Похоже, что существующий файл LocalSettings.php не является полными. +Не установлена переменная $1. +Пожалуйста, измените LocalSettings.php так, чтобы значение этой переменной было задано, затем нажмите «Продолжить».', + 'config-localsettings-connection-error' => 'Произошла ошибка при подключении к базе данных с помощью настроек, указанных в LocalSettings.php или AdminSettings.php. Пожалуйста, исправьте эти настройки и повторите попытку. + +$1', + 'config-session-error' => 'Ошибка при запуске сессии: $1', + 'config-session-expired' => 'Ваша сессия истекла. +Сессии настроены на длительность $1. +Вы её можете увеличить, изменив session.gc_maxlifetime в php.ini. +Перезапустите процесс установки.', + 'config-no-session' => 'Данные сессии потеряны! +Проверьте ваш php.ini и убедитесь, что session.save_path установлен в соответствующий каталог.', + 'config-your-language' => 'Ваш язык:', + 'config-your-language-help' => 'Выберите язык, на котором будет происходить процесс установки.', + 'config-wiki-language' => 'Язык, который будет использовать вики:', + 'config-wiki-language-help' => 'Выберите язык, на котором будут отображаться вики.', + 'config-back' => '← Назад', + 'config-continue' => 'Далее →', + 'config-page-language' => 'Язык', + 'config-page-welcome' => 'Добро пожаловать в MediaWiki!', + 'config-page-dbconnect' => 'Подключение к базе данных', + 'config-page-upgrade' => 'Обновление существующей установки', + 'config-page-dbsettings' => 'Настройки базы данных', + 'config-page-name' => 'Название', + 'config-page-options' => 'Настройки', + 'config-page-install' => 'Установка', + 'config-page-complete' => 'Готово!', + 'config-page-restart' => 'Начать установку заново', + 'config-page-readme' => 'Прочти меня', + 'config-page-releasenotes' => 'Информация о версии', + 'config-page-copying' => 'Лицензия', + 'config-page-upgradedoc' => 'Обновление', + 'config-page-existingwiki' => 'Существующая вики', + 'config-help-restart' => 'Вы хотите удалить все сохранённые данные, которые вы ввели, и запустить процесс установки заново?', + 'config-restart' => 'Да, начать заново', + 'config-welcome' => '=== Проверка окружения === +Проводятся базовые проверки с целью определить, подходит ли данная система для установки MediaWiki. +Укажите результаты этих проверок при обращении за помощью с установкой.', + 'config-copyright' => "=== Авторские права и условия === + +$1 + +MediaWiki является свободным программным обеспечением, которое вы можете распространять и/или изменять в соответствии с условиями лицензии GNU General Public License, опубликованной фондом свободного программного обеспечения; второй версии, либо любой более поздней версии. + +MediaWiki распространяется в надежде, что она будет полезной, но '''без каких-либо гарантий''', даже без подразумеваемых гарантий '''коммерческой ценности''' или '''пригодности для определённой цели'''. См. лицензию GNU General Public License для более подробной информации. + +Вы должны были получить копию GNU General Public License вместе с этой программой, если нет, то напишите Free Software Foundation, Inc., по адресу: 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA или [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html прочтите её онлайн].", + 'config-sidebar' => '* [http://www.mediawiki.org Сайт MediaWiki] +* [http://www.mediawiki.org/wiki/Help:Contents/ru Справка для пользователей] +* [http://www.mediawiki.org/wiki/Manual:Contents/ru Справка для администраторов] +* [http://www.mediawiki.org/wiki/Manual:FAQ/ru FAQ] +---- +* Readme-файл +* Информация о выпуске +* Лицензия +* Обновление', + 'config-env-good' => 'Проверка внешней среды была успешно проведена. +Вы можете установить MediaWiki.', + 'config-env-bad' => 'Была проведена проверка внешней среды. +Вы не можете установить MediaWiki.', + 'config-env-php' => 'Установленная версия PHP: $1.', + 'config-env-php-toolow' => 'Найден PHP $1, тогда как MediaWiki требуется PHP версии $2 или выше.', + 'config-unicode-using-utf8' => 'Использовать Brion Vibber utf8_normalize.so для нормализации Юникода.', + 'config-unicode-using-intl' => 'Будет использовано [http://pecl.php.net/intl расширение «intl» для PECL] для нормализации Юникода.', + 'config-unicode-pure-php-warning' => "'''Внимание!''': [http://pecl.php.net/intl международное расширение PECL] недоступно для нормализации Юникода, будет использоваться медленная реализация на чистом PHP. +Если ваш сайт работает под высокой нагрузкой, вам следует больше узнать о [http://www.mediawiki.org/wiki/Unicode_normalization_considerations нормализации Юникода].", + 'config-unicode-update-warning' => "'''Предупреждение''': установленная версия обёртки нормализации Юникода использует старую версию библиотеки [http://site.icu-project.org/ проекта ICU]. +Вы должны [http://www.mediawiki.org/wiki/Unicode_normalization_considerations обновить версию], если хотите полноценно использовать Юникод.", + 'config-no-db' => 'Не найдено поддержки баз данных!', + 'config-no-db-help' => 'Вам необходимо установить драйвера базы данных для PHP. +Поддерживаются следующие типы баз данных: $1. + +Если вы используете виртуальный хостинг, обратитесь к своему хостинг-провайдеру с просьбой установить подходящий драйвер базы данных. +Если вы скомпилировали PHP сами, сконфигурируйте его снова с включенным клиентом базы данных, например, с помощью ./configure --with-mysql. +Если вы установили PHP из пакетов Debian или Ubuntu, то вам также необходимо установить модуль php5-mysql.', + 'config-no-fts3' => "'''Внимание''': SQLite собран без модуля [http://sqlite.org/fts3.html FTS3] — поиск не будет работать для этой базы данных.", + 'config-register-globals' => "'''Внимание: PHP-опция [http://php.net/register_globals register_globals] включена.''' +'''Отключите её, если это возможно.''' +MediaWiki будет работать, но это снизит безопасность сервера и увеличит риск проникновения извне.", + 'config-magic-quotes-runtime' => "'''Проблема: включена опция PHP [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]!''' +Это приводит к непредсказуемой порче вводимых данных. +Установка и использование MediaWiki без выключения этой опции невозможно.", + 'config-magic-quotes-sybase' => "'''Проблема: включена опция PHP [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]!''' +Это приводит к непредсказуемой порче вводимых данных. +Установка и использование MediaWiki без выключения этой опции невозможно.", + 'config-mbstring' => "'''Проблема: включена опция PHP [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!''' +Это приводит к ошибкам и непредсказуемой порче вводимых данных. +Установка и использование MediaWiki без выключения этой опции невозможно.", + 'config-ze1' => "'''Проблема: включена опция PHP [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]!''' +Это приводит к катастрофическим сбоям в MediaWiki. +Установка и использование MediaWiki без выключения этой опции невозможно.", + 'config-safe-mode' => "'''Предупреждение:''' PHP работает в [http://www.php.net/features.safe-mode «безопасном режиме»]. +Это может привести к проблемам, особенно с загрузкой файлов и вставкой математических формул.", + 'config-xml-bad' => 'XML-модуль РНР отсутствует. +MediaWiki не будет работать в этой конфигурации, так как требуется функционал этого модуля. +Если вы работаете в Mandrake, установите PHP XML-пакет.', + 'config-pcre' => 'Модуль поддержки PCRE не найден. +Для работы MediaWiki требуется поддержка Perl-совместимых регулярных выражений.', + 'config-pcre-no-utf8' => "'''Фатальная ошибка'''. Модуль PCRE для PHP, похоже, собран без поддержки PCRE_UTF8. +MediaWiki требует поддержки UTF-8 для корректной работы.", + 'config-memory-raised' => 'Ограничение на доступную PHP память (memory_limit) поднято с $1 до $2.', + 'config-memory-bad' => "'''Внимание:''' размер PHP memory_limit составляет $1. +Вероятно, этого слишком мало. +Установка может потерпеть неудачу!", + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] установлен', + 'config-apc' => '[http://www.php.net/apc APC] установлен', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] установлен', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] установлен', + 'config-no-cache' => "'''Внимание:''' Не найдены [http://eaccelerator.sourceforge.net eAccelerator], [http://www.php.net/apc APC], [http://trac.lighttpd.net/xcache/ XCache] или [http://www.iis.net/download/WinCacheForPhp WinCache]. +Кэширование объектов будет отключено.", + 'config-diff3-bad' => 'GNU diff3 не найден.', + 'config-imagemagick' => 'Обнаружен ImageMagick: $1. +Возможно отображение миниатюр изображений, если вы разрешите закачки файлов.', + 'config-gd' => 'Найдена встроенная графическая библиотека GD. +Возможность использования миниатюр изображений будет включена, если вы включите их загрузку.', + 'config-no-scaling' => 'Не удалось найти встроенную библиотеку GD или ImageMagick. +Возможность использования миниатюр изображений будет отключена.', + 'config-no-uri' => "'''Ошибка:''' Не могу определить текущий URI. +Установка прервана.", + 'config-uploads-not-safe' => "'''Внимание:''' директория, используемая по умолчанию для загрузок ($1) уязвима к выполнению произвольных скриптов. +Хотя MediaWiki проверяет все загружаемые файлы на наличие угроз, настоятельно рекомендуется [http://www.mediawiki.org/wiki/Manual:Security#Upload_security закрыть данную уязвимость] перед включением загрузки файлов.", + 'config-brokenlibxml' => 'В вашей системе имеется сочетание версий PHP и libxml2, могущее привести к скрытым повреждениям данных в MediaWiki и других веб-приложениях. +Обновите PHP до версии 5.2.9 или старше и libxml2 до 2.7.3 или старше ([http://bugs.php.net/bug.php?id=45996 сведения об ошибке]). +Установка прервана.', + 'config-using531' => 'PHP $1 не совместим с MediaWiki из-за ошибки с параметрами-ссылками при вызовах __call(). +Обновитесь до PHP 5.3.2 и выше, или откатитесь до PHP 5.3.0, чтобы избежать этой проблемы. +Установка прервана.', + 'config-db-type' => 'Тип базы данных:', + 'config-db-host' => 'Хост базы данных:', + 'config-db-host-help' => 'Если сервер базы данных находится на другом сервере, введите здесь его имя хоста или IP-адрес. + +Если вы используете виртуальный хостинг, ваш провайдер должен указать правильное имя хоста в своей документации. + +Если вы устанавливаете систему на сервере под Windows и используете MySQL, имя сервера «localhost» может не работать. В этом случае попробуйте указать «127.0.0.1».', + 'config-db-host-oracle' => 'TNS базы данных:', + 'config-db-host-oracle-help' => 'Введите действительный [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; файл tnsnames.ora должен быть видимым для этой инсталляции.
    При использовании клиентских библиотек версии 10g и старше также возможно использовать метод именования [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].', + 'config-db-wiki-settings' => 'Идентификация этой вики', + 'config-db-name' => 'Имя базы данных:', + 'config-db-name-help' => 'Выберите название-идентификатор для вашей вики. +Оно не должно содержать пробелов. + +Если вы используете виртуальный хостинг, провайдер или выдаст вам конкретное имя базы данных, или позволит создавать базы данных с помощью панели управления.', + 'config-db-name-oracle' => 'Схема базы данных:', + 'config-db-account-oracle-warn' => 'Поддерживаются три сценария установки Oracle в качестве базы данных: + +Если вы хотите создать учётную запись базы данных в процессе установки, пожалуйста, укажите учётную запись роли SYSDBA для установки и укажите желаемые полномочия учётной записи с веб-доступом. вы также можете учётную запись с веб-доступом вручную и указать только её (если у неё есть необходимые разрешения на создание объектов схемы) или указать две учётные записи, одну с правами создания объектов, а другую с ограничениями для веб-доступа. + +Сценарий для создания учётной записи с необходимыми привилегиями можно найти в папке «maintenance/oracle/» этой программы установки. Имейте в виду, что использование ограниченной учётной записи приведёт к отключению всех возможностей обслуживания с учётной записи по умолчанию.', + 'config-db-install-account' => 'Учётная запись для установки', + 'config-db-username' => 'Имя пользователя базы данных:', + 'config-db-password' => 'Пароль базы данных:', + 'config-db-password-empty' => 'Пожалуйста, введите пароль для нового пользователя базы данных «$1». +Хотя и возможно создание пользователей без паролей, это небезопасно.', + 'config-db-install-username' => 'Введите имя пользователя, которое будет использоваться для подключения к базе данных в процессе установки. +Это не имя пользователя MediaWiki, это имя пользователя для базы данных.', + 'config-db-install-password' => 'Введите пароль, который будет использоваться для подключения к базе данных в процессе установки. +Это не пароль пользователя MediaWiki, это пароль для базы данных.', + 'config-db-install-help' => 'Введите имя пользователя и пароль, которые будут использоваться для подключения к базе данных во время процесса установки.', + 'config-db-account-lock' => 'Использовать то же имя пользователя и пароль для обычной работы', + 'config-db-wiki-account' => 'Учётная запись для обычной работы', + 'config-db-wiki-help' => 'Введите имя пользователя и пароль, которые будут использоваться для подключения к базе данных во время обычной работы вики. +Если такой учётной записи не существует, а установочная учётная запись имеет достаточно привилегий, то обычная учётная запись будет создана с минимально необходимыми для работы вики привилегиями.', + 'config-db-prefix' => 'Префикс таблиц базы данных:', + 'config-db-prefix-help' => 'Если вам нужно делить одну базу данных между несколькими вики, или между MediaWiki и другими веб-приложениями, вы можете добавить префикс для всех имён таблиц. +Не используйте пробелы. + +Это поле обычно остаётся пустым.', + 'config-db-charset' => 'Набор символов базы данных', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 бинарная', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 обратно совместимая с UTF-8', + 'config-charset-help' => "'''Внимание.''' Если вы используете '''обратно совместый UTF-8''' на MySQL 4.1+ и создаёте резервные копии базы данных с помощью mysqldump, то все не-ASCII символы могут быть искажены, а резервная копия окажется негодной! + +В '''бинарном режиме''' MediaWiki хранит юникодный текст в базе в виде двоичных полей. +Это более эффективно, чем MySQL в режиме UTF-8, позволяет использовать полный набор символов Юникода. +В '''режиме UTF-8''' MySQL будет знать к какому набору символу относятся ваши данные, сможет представлять и преобразовать их надлежащим образом (буква Ё окажется при сортировке после буквы Е, а не после буквы Я, как в бинарном режиме), +но не позволит вам сохранять символы, выходящие за пределы [http://ru.wikipedia.org/wiki/Символы,_представленные_в_Юникоде#.D0.91.D0.B0.D0.B7.D0.BE.D0.B2.D0.B0.D1.8F_.D0.BC.D0.BD.D0.BE.D0.B3.D0.BE.D1.8F.D0.B7.D1.8B.D0.BA.D0.BE.D0.B2.D0.B0.D1.8F_.D0.BF.D0.BB.D0.BE.D1.81.D0.BA.D0.BE.D1.81.D1.82.D1.8C BMP].", + 'config-mysql-old' => 'Необходим MySQL $1 или более поздняя версия. У вас установлен MySQL $2.', + 'config-db-port' => 'Порт базы данных:', + 'config-db-schema' => 'Схема для MediaWiki', + 'config-db-schema-help' => 'Эта схема обычно работают хорошо. +Изменяйте её только если знаете, что вам это нужно.', + 'config-sqlite-dir' => 'Директория данных SQLite:', + 'config-sqlite-dir-help' => "SQLite хранит все данные в одном файле. + +Директория, которую вы должны указать, должна быть доступна для записи веб-сервером во время установки. + +Она '''не должна''' быть доступна через Интернет, поэтому не должна совпадать с той, где хранятся PHP файлы. + +Установщик запишет в эту директорию файл .htaccess, но если это не сработает, кто-нибудь может получить доступ ко всей базе данных. +В этой базе находится в том числе и информация о пользователях (адреса электронной почты, хэши паролей), а также удалённые страницы и другие секретные данные о вики. + +По возможности, расположите базу данных где-нибудь в стороне, например, в /var/lib/mediawiki/yourwiki.", + 'config-oracle-def-ts' => 'Пространство таблиц по умолчанию:', + 'config-oracle-temp-ts' => 'Временное пространство таблиц:', + 'config-type-mysql' => 'MySQL', + 'config-type-postgres' => 'PostgreSQL', + 'config-type-sqlite' => 'SQLite', + 'config-type-oracle' => 'Oracle', + 'config-support-info' => 'MediaWiki поддерживает следующие СУБД: + +$1 + +Если вы не видите своей системы хранения данных в этом списке, следуйте инструкциям, на которые есть ссылка выше, чтобы получить поддержку.', + 'config-support-mysql' => '* $1 — основная база данных для MediaWiki, и лучше поддерживается ([http://www.php.net/manual/en/mysql.installation.php инструкция, как собрать PHP с поддержкой MySQL])', + 'config-support-postgres' => '* $1 — популярная открытая СУБД, альтернатива MySQL ([http://www.php.net/manual/en/pgsql.installation.php инструкция, как собрать PHP с поддержкой PostgreSQL]). Могут встречаться небольшие неисправленные ошибки, не рекомендуется для использования в рабочей системе.', + 'config-support-sqlite' => '* $1 — это легковесная система баз данных, имеющая очень хорошую поддержку. ([http://www.php.net/manual/en/pdo.installation.php инструкция, как собрать PHP с поддержкой SQLite], работающей посредством PDO)', + 'config-support-oracle' => '* $1 — это коммерческая база данных масштаба предприятия. ([http://www.php.net/manual/en/oci8.installation.php Как собрать PHP с поддержкой OCI8])', + 'config-header-mysql' => 'Настройки MySQL', + 'config-header-postgres' => 'Настройки PostgreSQL', + 'config-header-sqlite' => 'Настройки SQLite', + 'config-header-oracle' => 'Настройки Oracle', + 'config-invalid-db-type' => 'Неверный тип базы данных', + 'config-missing-db-name' => 'Вы должны ввести значение параметра «Имя базы данных»', + 'config-missing-db-host' => 'Необходимо ввести значение параметра «Сервер базы данных»', + 'config-missing-db-server-oracle' => 'Вы должны заполнить поле «TNS базы данных»', + 'config-invalid-db-server-oracle' => 'Неверное имя TNS базы данных «$1». +Используйте только символы ASCII (a-z, A-Z), цифры (0-9), знаки подчёркивания (_) и точки (.).', + 'config-invalid-db-name' => 'Неверное имя базы данных «$1». +Используйте только ASCII-символы (a-z, A-Z), цифры (0-9), знак подчёркивания (_) и дефис(-).', + 'config-invalid-db-prefix' => 'Неверный префикс базы данных «$1». +Используйте только буквы ASCII (a-z, A-Z), цифры (0-9), знак подчёркивания (_) и дефис (-).', + 'config-connection-error' => '$1. + +Проверьте хост, имя пользователя и пароль и попробуйте ещё раз.', + 'config-invalid-schema' => 'Неправильная схема для MediaWiki «$1». +Используйте только ASCII символы (a-z, A-Z), цифры(0-9) и знаки подчёркивания(_).', + 'config-db-sys-create-oracle' => 'Программа установки поддерживает только использование SYSDBA для создания новой учётной записи.', + 'config-db-sys-user-exists-oracle' => 'Учётная запись «$1». SYSDBA может использоваться только для создания новой учётной записи!', + 'config-postgres-old' => 'Необходим PostgreSQL $1 или более поздняя версия. У вас установлен PostgreSQL $2.', + 'config-sqlite-name-help' => 'Выберите имя-идентификатор для вашей вики. +Не используйте дефисы и пробелы. +Эта строка будет использоваться в имени файла SQLite.', + 'config-sqlite-parent-unwritable-group' => 'Не удалось создать директорию данных $1, так как у веб-сервера нет прав записи в родительскую директорию $2. + +Установщик определил пользователя, под которым работает веб-сервер. +Сделайте директорию $3 доступной для записи и продолжите. +В Unix/Linux системе выполните: + +
    cd $2
    +mkdir $3
    +chgrp $4 $3
    +chmod g+w $3
    ', + 'config-sqlite-parent-unwritable-nogroup' => 'Не удалось создать директорию для данных $1, так как у веб-сервера нет прав на запись в родительскую директорию $2. + +Программа установки не смогла определить пользователя, под которым работает веб-сервер. +Для продолжения сделайте каталог $3 глобально доступным для записи серверу (и другим). +В Unix/Linux сделайте: + +
    cd $2
    +mkdir $3
    +chmod a+w $3
    ', + 'config-sqlite-mkdir-error' => 'Ошибка при создании директории для данных «$1». +Проверьте расположение и повторите попытку.', + 'config-sqlite-dir-unwritable' => 'Невозможно произвести запись в каталог «$1». +Измените настройки доступа так, чтобы веб-сервер мог записывать в этот каталог, и попробуйте ещё раз.', + 'config-sqlite-connection-error' => '$1. + +Проверьте название базы данных и директорию с данными и попробуйте ещё раз.', + 'config-sqlite-readonly' => 'Файл $1 недоступен для записи.', + 'config-sqlite-cant-create-db' => 'Не удаётся создать файл базы данных $1 .', + 'config-sqlite-fts3-downgrade' => 'У PHP отсутствует поддержка FTS3 — сбрасываем таблицы', + 'config-can-upgrade' => "В базе данных найдены таблицы MediaWiki. +Чтобы обновить их до MediaWiki $1, нажмите на кнопку '''«Продолжить»'''.", + 'config-upgrade-done' => "Обновление завершено. + +Теперь вы можете [$1 начать использовать вики]. + +Если вы хотите повторно создать файл LocalSettings.php, нажмите на кнопку ниже. +Это действие '''не рекомендуется''', если у вас не возникло проблем при установке.", + 'config-upgrade-done-no-regenerate' => 'Обновление завершено. + +Теперь вы можете [$1 начать работу с вики].', + 'config-regenerate' => 'Создать LocalSettings.php заново →', + 'config-show-table-status' => 'Запрос «SHOW TABLE STATUS» не выполнен!', + 'config-unknown-collation' => "'''Внимание:''' База данных использует нераспознанные правила сортировки.", + 'config-db-web-account' => 'Учётная запись для доступа к базе данных из веб-сервера', + 'config-db-web-help' => 'Выберите имя пользователя и пароль, которые веб-сервер будет использовать для подключения к серверу базы данных при обычной работе вики.', + 'config-db-web-account-same' => 'Использовать ту же учётную запись, что и для установки', + 'config-db-web-create' => 'Создать учётную запись, если она ещё не существует', + 'config-db-web-no-create-privs' => 'Учётная запись, указанная вами для установки, не обладает достаточными правами для создания учётной записи. +Указанная здесь учётная запись уже должна существовать.', + 'config-mysql-engine' => 'Движок базы данных:', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-engine-help' => "'''InnoDB''' почти всегда предпочтительнее, так как он лучше справляется с параллельным доступом. + +'''MyISAM''' может оказаться быстрее для вики с одним пользователем или с минимальным количеством поступающих правок, однако базы данных на нём портятся чаще, чем на InnoDB.", + 'config-mysql-charset' => 'Набор символов (кодовая таблица) базы данных:', + 'config-mysql-binary' => 'Двоичный', + 'config-mysql-utf8' => 'UTF-8', + 'config-mysql-charset-help' => "В '''двоичном режиме''' MediaWiki хранит UTF-8 текст в бинарных полях базы данных. +Это более эффективно, чем ''UTF-8 режим'' MySQL, и позволяет использовать полный набор символов Unicode. + +В '''режиме UTF-8''' MySQL будет знать в какой кодировке находятся Ваши данные и может отображать и преобразовывать их соответствующим образом, но это не позволит вам хранить символы выше [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Базовой Многоязыковой Плоскости].", + 'config-site-name' => 'Название вики:', + 'config-site-name-help' => 'Название будет отображаться в заголовке окна браузера и в некоторых других местах вики.', + 'config-site-name-blank' => 'Введите название сайта.', + 'config-project-namespace' => 'Пространство имён проекта:', + 'config-ns-generic' => 'Проект', + 'config-ns-site-name' => 'То же, что имя вики: $1', + 'config-ns-other' => 'Другое (укажите)', + 'config-ns-other-default' => 'MyWiki', + 'config-project-namespace-help' => "Следуя примеру Википедии, многие вики хранят свои страницы правил отдельно от страниц основного содержания, в так называемом '''«пространстве имён проекта»'''. +Все названия страниц в этом пространстве имён начинается с определённого префикса, который вы можете задать здесь. +Обычно, этот префикс происходит от имени вики, но он не может содержать знаки препинания, символы «#» или «:».", + 'config-ns-invalid' => 'Указанное пространство имён $1 недопустимо. +Укажите другое пространство имён проекта.', + 'config-ns-conflict' => 'Указанное пространство имён «$1» конфликтует со стандартным пространством имён MediaWiki. +Укажите другое пространство имён проекта.', + 'config-admin-box' => 'Учётная запись администратора', + 'config-admin-name' => 'Имя:', + 'config-admin-password' => 'Пароль:', + 'config-admin-password-confirm' => 'Пароль ещё раз:', + 'config-admin-help' => 'Введите ваше имя пользователя здесь, например, «Иван Иванов». +Это имя будет использоваться для входа в вики.', + 'config-admin-name-blank' => 'Введите имя пользователя администратора.', + 'config-admin-name-invalid' => 'Указанное имя пользователя «$1» недопустимо. +Укажите другое имя пользователя.', + 'config-admin-password-blank' => 'Введите пароль для учётной записи администратора.', + 'config-admin-password-same' => 'Пароль не должен быть таким же, как имя пользователя.', + 'config-admin-password-mismatch' => 'Введённые вами пароли не совпадают.', + 'config-admin-email' => 'Адрес электронной почты:', + 'config-admin-email-help' => 'Введите адрес электронной почты, чтобы получать сообщения от других пользователей вики, иметь возможность восстановить пароль, а также получать уведомления об изменениях страниц из списка наблюдения. Вы можете оставить это поле пустым.', + 'config-admin-error-user' => 'Внутренняя ошибка при создании учётной записи администратора с именем «$1».', + 'config-admin-error-password' => 'Внутренняя ошибка при установке пароля для учётной записи администратора «$1»:
    $2
    ', + 'config-admin-error-bademail' => 'Вы ввели неправильный адрес электронной почты', + 'config-subscribe' => 'Подписаться на [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce рассылку новостей о появлении новых версий MediaWiki].', + 'config-subscribe-help' => 'Это список рассылки с малым числом сообщений, используется для анонса новых выпусков и сообщений о проблемах с безопасностью. +Вам следует подписаться на него и обновлять движок MediaWiki, по мере выхода новых версий.', + 'config-almost-done' => 'Вы почти у цели! +Остальные настройки можно пропустить и приступить к установке вики.', + 'config-optional-continue' => 'Произвести тонкую настройку', + 'config-optional-skip' => 'Хватит, установить вики', + 'config-profile' => 'Профиль прав прользователей:', + 'config-profile-wiki' => 'Традиционная вики', + 'config-profile-no-anon' => 'Требуется создание учётной записи', + 'config-profile-fishbowl' => 'Только для авторизованных редакторов', + 'config-profile-private' => 'Закрытая вики', + 'config-profile-help' => "Вики-технология лучше всего работает, когда вы позволяете редактировать сайт максимально широкому кругу лиц. +В MediaWiki легко просмотреть последних изменений и, при необходимости, откатить любой ущерб сделанный злоумышленниками или наивными пользователями. + +Однако, движок MediaWiki можно использовать и иными способами, и не далеко не всех удаётся убедить в преимуществах открытой вики-работы. +Так что в вас есть выбор. + +Конфигурация '''«{{int:config-profile-wiki}}»''' позволяет всем править страницы даже не регистрируясь на сайте. Конфигурация '''{{int:config-profile-no-anon}}''' обеспечивает дополнительный учёт, но может отсечь случайных участников. + +Сценарий '''«{{int:config-profile-fishbowl}}»''' разрешает редактирование только определённым участникам, но общедоступным остаётся просмотр страниц, в том числе просмотр истории изменения. В режиме '''«{{int:config-profile-private}}»''' просмотр страниц разрешён только определённым пользователям, какая-то их часть может иметь также права на редактирование. + +Более сложные схемы разграничения прав можно настроить после установки, см. [http://www.mediawiki.org/wiki/Manual:User_rights соответствующее руководство].", + 'config-license' => 'Авторские права и лицензии:', + 'config-license-none' => 'Не указывать лицензию в колонтитуле внизу страницы', + 'config-license-cc-by-sa' => 'Creative Commons атрибуция — с сохранением условий', + 'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike', + 'config-license-cc-0' => 'Creative Commons Zero', + 'config-license-gfdl-old' => 'GNU Free Documentation License 1.2', + 'config-license-gfdl-current' => 'GNU Free Documentation License 1.3 или более поздней версии', + 'config-license-pd' => 'Общественное достояние', + 'config-license-cc-choose' => 'Выберите одну из лицензий Creative Commons', + 'config-license-help' => "Многие общедоступные вики разрешают использовать свои материалы на условиях [http://freedomdefined.org/Definition/Ru свободных лицензий]. +Это помогает созданию чувства общности, стимулирует долгосрочное участие. +Но в этом нет необходимости для частных или корпоративных вики. + +Если вы хотите использовать тексты из Википедии или хотите, что в Википедию можно было копировать тексты из вашей вики, вам следует выбрать '''Creative Commons Attribution Share Alike'''. + +GNU Free Documentation License раньше была основной лицензией Википедии. +Она все ещё используется, однако, она имеет некоторые особенности, осложняющие повторное использование и интерпретацию её материалов.", + 'config-email-settings' => 'Настройки электронной почты', + 'config-enable-email' => 'Включить исходящие e-mail', + 'config-enable-email-help' => 'Если вы хотите, чтобы электронная почта работала, необходимо выполнить [http://www.php.net/manual/en/mail.configuration.php соответствующие настройки PHP]. +Если вы не хотите использовать возможности электронной почты в вики, вы можете её отключить.', + 'config-email-user' => 'Включить электронную почту от участника к участнику', + 'config-email-user-help' => 'Разрешить всем пользователям отправлять друг другу электронные письма, если выставлена соответствующая настройка в профиле.', + 'config-email-usertalk' => 'Включить уведомления пользователей о сообщениях на их странице обсуждения', + 'config-email-usertalk-help' => 'Разрешить пользователям получать уведомления об изменениях своих страниц обсуждения, если они разрешат это в своих настройках.', + 'config-email-watchlist' => 'Включить уведомление на электронную почту об изменении списка наблюдения', + 'config-email-watchlist-help' => 'Разрешить пользователям получать уведомления об отслеживаемых ими страницах, если они разрешили это в своих настройках.', + 'config-email-auth' => 'Включить аутентификацию через электронную почту', + 'config-email-auth-help' => "Если эта опция включена, пользователи должны подтвердить свой адрес электронной почты перейдя по ссылке, которая отправляется на e-mail. Подтверждение требуется каждый раз при смене электронного ящика в настройках пользователя. +Только прошедшие проверку подлинности адреса электронной почты, могут получать электронные письма от других пользователей или изменять уведомления, отправляемые по электронной почте. +Включение этой опции '''рекомендуется''' для открытых вики в целях пресечения потенциальных злоупотреблений возможностями электронной почты.", + 'config-email-sender' => 'Обратный адрес электронной почты:', + 'config-email-sender-help' => 'Введите адрес электронной почты для использования в качестве обратного адреса исходящей электронной почты. +На него будут отправляться отказы. +Многие почтовые серверы требуют, чтобы по крайней мере доменное имя в нём было правильным.', + 'config-upload-settings' => 'Загрузка изображений и файлов', + 'config-upload-enable' => 'Разрешить загрузку файлов', + 'config-upload-help' => 'Разрешение загрузки файлов, потенциально, может привести к угрозе безопасности сервера. +Для получения дополнительной информации, прочтите в руководстве [http://www.mediawiki.org/wiki/Manual:Security раздел, посвящённый безопасности]. + +Чтобы разрешить загрузку файлов, необходимо изменить права на каталог images, в корневой директории MediaWiki так, чтобы веб-сервер мог записывать в него файлы. +Затем включите эту опцию.', + 'config-upload-deleted' => 'Директория для удалённых файлов:', + 'config-upload-deleted-help' => 'Выберите каталог, в котором будут храниться архивы удалённых файлов. +В идеальном случае, в этот каталог не должно быть доступа из сети Интернет.', + 'config-logo' => 'URL логотипа:', + 'config-logo-help' => 'Тема по умолчанию для MediaWiki включает пространство для логотипа размером 135x160 в левом верхнем углу. +Загрузите изображение соответствующего размера, и введите его URL здесь. + +Если вам не нужен логотип, оставьте это поле пустым.', + 'config-instantcommons' => 'Включить Instant Commons', + 'config-instantcommons-help' => '[http://www.mediawiki.org/wiki/InstantCommons Instant Commons] — это функция, позволяющая использовать изображения, звуки и другие медиафайлы с Викисклада ([http://commons.wikimedia.org/ Wikimedia Commons]). +Для работы этой функции MediaWiki необходим доступ к Интернету. + +Дополнительную информацию об Instant Commons, в том числе указания о том, как её настроить для других вики, отличных от Викисклада, можно найти в [http://mediawiki.org/wiki/Manual:$wgForeignFileRepos руководстве].', + 'config-cc-error' => 'Механизм выбора лицензии Creative Commons не вернул результата. +Введите название лицензии вручную.', + 'config-cc-again' => 'Выберите ещё раз…', + 'config-cc-not-chosen' => 'Выберите, какую лицензию Creative Commons Вы хотите использовать, и нажмите кнопку "Продолжить".', + 'config-advanced-settings' => 'Дополнительные настройки', + 'config-cache-options' => 'Параметры кэширования объектов:', + 'config-cache-help' => 'Кэширование объектов используется для повышения скорости MediaWiki путем кэширования часто используемых данных. +Для средних и больших сайтов кеширование настоятельно рекомендуется включать, а для небольших сайтов кеширование может показать преимущество.', + 'config-cache-none' => 'Без кэширования (никакой функционал не теряется, но крупные вики-сайты могут работать медленнее)', + 'config-cache-accel' => 'PHP кэширование объектов (APC, eAccelerator, XCache или WinCache)', + 'config-cache-memcached' => 'Использовать Memcached (требует дополнительной настройки)', + 'config-memcached-servers' => 'Сервера Memcached:', + 'config-memcached-help' => 'Список IP-адресов, используемых Memcached. +Перечислите по одному адресу на строку с указанием портов. Например: + 127.0.0.1:11211 + 192.168.1.25:1234', + 'config-memcache-needservers' => 'Вы выбрали тип кэширования Memcached, но не задали адреса серверов.', + 'config-memcache-badip' => 'Вы ввели неверный IP-адрес для Memcached: $1.', + 'config-memcache-noport' => 'Не указан порт для сервера Memcached: $1. +Если вы не знаете порт, по умолчанию используется 11211.', + 'config-memcache-badport' => 'Номера портов Memcached должны лежать в пределах от $1 до $2.', + 'config-extensions' => 'Расширения', + 'config-extensions-help' => 'Расширения MediaWiki, перечисленные выше, были найдены в каталоге ./extensions. + +Они могут потребовать дополнительные настройки, но их можно включить прямо сейчас', + 'config-install-alreadydone' => "'''Предупреждение:''' Вы, кажется, уже устанавливали MediaWiki и пытаетесь произвести повторную установку. +Пожалуйста, перейдите на следующую страницу.", + 'config-install-begin' => 'Нажав «{{int:config-continue}}», вы начнёте установку MediaWiki. +Если вы хотите внести изменения, нажмите «Назад».', + 'config-install-step-done' => 'выполнено', + 'config-install-step-failed' => 'не удалось', + 'config-install-extensions' => 'В том числе расширения', + 'config-install-database' => 'Настройка базы данных', + 'config-install-pg-schema-not-exist' => 'Схемы PostgreSQL не существует', + 'config-install-pg-schema-failed' => 'Не удалось создать таблицы. +Убедитесь в том, что пользователь «$1» может писать в схему «$2».', + 'config-install-pg-commit' => 'Внесение изменений', + 'config-install-pg-plpgsql' => 'Проверка языка PL/pgSQL', + 'config-pg-no-plpgsql' => 'Вам необходимо установить поддержку языка PL/pgSQL для базы данных $1', + 'config-pg-no-create-privs' => 'Учётная запись, указанная для установки, не обладает достаточными привилегиями для создания учётной записи.', + 'config-install-user' => 'Создание базы данных пользователей', + 'config-install-user-alreadyexists' => 'Участник «$1» уже существует', + 'config-install-user-create-failed' => 'Не получилось создать участника «$1»: $2', + 'config-install-user-grant-failed' => 'Ошибка предоставления прав пользователю «$1»: $2', + 'config-install-tables' => 'Создание таблиц', + 'config-install-tables-exist' => "'''Предупреждение''': таблицы MediaWiki, возможно, уже существуют. +Пропуск повторного создания.", + 'config-install-tables-failed' => "'''Ошибка''': Таблица не может быть создана из-за ошибки: $1", + 'config-install-interwiki' => 'Заполнение таблицы интервики значениями по умолчанию', + 'config-install-interwiki-list' => 'Не удалось найти файл interwiki.list.', + 'config-install-interwiki-exists' => "'''Предупреждение''': в интервики-таблице, кажется, уже есть записи. +Создание стандартного списка, пропущено.", + 'config-install-stats' => 'Статистика инициализации', + 'config-install-keys' => 'Создание секретного ключа', + 'config-insecure-keys' => "'''Предупреждение.''' {{PLURAL:$2|Ключ безопасности $1, созданный во время установки, недостаточно надёжен|Ключи безопасности $1, созданные во время установки, недостаточно надёжны}}. Рассмотрите возможность {{PLURAL:$2|его|их}} изменения вручную.", + 'config-install-sysop' => 'Создание учётной записи администратора', + 'config-install-subscribe-fail' => 'Не удаётся подписаться на mediawiki-announce', + 'config-install-mainpage' => 'Создание главной страницы с содержимым по умолчанию', + 'config-install-extension-tables' => 'Создание таблиц для включённых расширений', + 'config-install-mainpage-failed' => 'Не удаётся вставить главную страницу: $1', + 'config-install-done' => "'''Поздравляем!''' +Вы успешно установили MediaWiki. + +Во время установки был создан файл LocalSettings.php. +Он содержит всю конфигурации вики. + +Вам необходимо скачать его и положить в корневую директорию вашей вики (ту же директорию, где находится файл index.php). Его загрузка должна начаться автоматически. + +Если автоматическая загрузка не началась или вы её отменили, вы можете скачать по ссылке ниже: + +$3 + +'''Примечание''': Если вы не сделаете этого сейчас, то сгенерированный файл конфигурации не будет доступен вам в дальнейшем, если вы выйдете из установки, не скачивая его. + +По окончании действий, описанных выше, вы сможете '''[$2 войти в вашу вики]'''.", + 'config-download-localsettings' => 'Загрузить LocalSettings.php', + 'config-help' => 'справка', +); + +/** Slovenian (Slovenščina) + * @author Dbc334 + */ +$messages['sl'] = array( + 'config-desc' => 'Namestitveni program za MediaWiki', + 'config-title' => 'Namestitev MediaWiki $1', + 'config-information' => 'Informacije', + 'config-your-language' => 'Vaš jezik:', + 'config-back' => '← Nazaj', + 'config-continue' => 'Nadaljuj →', + 'config-page-language' => 'Jezik', + 'config-page-welcome' => 'Dobrodošli na MediaWiki!', + 'config-page-name' => 'Ime', + 'config-page-options' => 'Možnosti', + 'config-page-install' => 'Namesti', + 'config-page-complete' => 'Končano!', + 'config-page-readme' => 'Beri me', + 'config-page-copying' => 'Kopiranje', + 'config-page-upgradedoc' => 'Nadgrajevanje', + 'config-db-name' => 'Ime zbirke podatkov:', + 'config-db-username' => 'Uporabniško ime zbirke podatkov:', + 'config-db-password' => 'Geslo zbirke podatkov:', + 'config-admin-password' => 'Geslo:', +); + +/** Serbian Cyrillic ekavian (‪Српски (ћирилица)‬) */ +$messages['sr-ec'] = array( + 'config-continue' => 'Настави →', + 'config-page-language' => 'Језик', +); + +/** Swedish (Svenska) + * @author WikiPhoenix + */ +$messages['sv'] = array( + 'config-desc' => 'Installationsprogram för MediaWiki', + 'config-title' => 'Installation av MediaWiki $1', + 'config-information' => 'Information', + 'config-localsettings-key' => 'Uppgraderingsnyckel:', + 'config-localsettings-badkey' => 'Nyckeln du angav är inkorrekt.', + 'config-session-error' => 'Fel vid uppstart av session: $1', + 'config-your-language' => 'Ditt språk:', + 'config-your-language-help' => 'Välj ett språk som ska användas under installationen.', + 'config-wiki-language' => 'Wikispråk:', + 'config-wiki-language-help' => 'Välj det språk som wikin främst kommer att skrivas i.', + 'config-back' => '← Tillbaka', + 'config-continue' => 'Fortsätt →', + 'config-page-language' => 'Språk', + 'config-page-welcome' => 'Välkommen till MediaWiki!', + 'config-page-dbconnect' => 'Anslut till databas', + 'config-page-upgrade' => 'Uppgradera existerande installation', + 'config-page-dbsettings' => 'Databasinställningar', + 'config-page-name' => 'Namn', + 'config-page-options' => 'Alternativ', + 'config-page-install' => 'Installera', + 'config-page-complete' => 'Slutfört!', + 'config-page-restart' => 'Starta om installationen', + 'config-page-readme' => 'Läs mig', + 'config-page-releasenotes' => 'Utgivningsanteckningar', + 'config-page-copying' => 'Kopiering', + 'config-page-upgradedoc' => 'Uppgradering', + 'config-help-restart' => 'Vill du rensa all sparad data som du har skrivit in och starta om installationen?', + 'config-restart' => 'Ja, starta om', + 'config-sidebar' => '* [http://www.mediawiki.org MediaWikis hemsida] +* [http://www.mediawiki.org/wiki/Help:Contents Användarguide] +* [http://www.mediawiki.org/wiki/Manual:Contents Administratörguide] +* [http://www.mediawiki.org/wiki/Manual:FAQ Frågor och svar] +---- +* Läs mig +* Utgivningsanteckningar +* Kopiering +* Uppgradering', + 'config-env-good' => 'Miljön har kontrollerats. +Du kan installera MediaWiki.', + 'config-env-bad' => 'Miljön har kontrollerats. +Du kan inte installera MediaWiki.', + 'config-env-php' => 'PHP $1 är installerad.', + 'config-env-php-toolow' => 'PHP $1 är installerad. +MediaWiki kräver PHP $2 eller högre.', + 'config-header-mysql' => 'MySQL-inställningar', + 'config-header-postgres' => 'PostgreSQL-inställningar', + 'config-header-sqlite' => 'SQLite-inställningar', + 'config-header-oracle' => 'Oracle-inställningar', + 'config-invalid-db-type' => 'Ogiltig databastyp', + 'config-missing-db-name' => 'Du måste ange ett värde för "Databasnamn"', + 'config-missing-db-host' => 'Du måste ange ett värde för "Databasvärd"', + 'config-invalid-db-name' => '"$1" är ett ogiltigt databasnamn. +Använd bara ASCII-bokstäver (a-z, A-Z), siffror (0-9), understreck (_) och bindestreck (-).', + 'config-invalid-db-prefix' => '"$1" är ett ogiltigt databasprefix. +Använd bara ASCII-bokstäver (a-z, A-Z), siffror (0-9), understreck (_) och bindestreck (-).', + 'config-connection-error' => '$1. + +Kontrollera värden, användarnamnet och lösenordet nedan och försök igen', + 'config-invalid-schema' => '"$1" är ett ogiltigt schema för MediaWiki. +Använd bara ASCII-bokstäver (a-z, A-Z), siffror (0-9), understreck (_) och bindestreck (-).', +); + +/** Tamil (தமிழ்) + * @author TRYPPN + */ +$messages['ta'] = array( + 'config-information' => 'தகவல்', + 'config-your-language' => 'தங்களது மொழி:', + 'config-back' => '← முந்தைய', + 'config-continue' => 'தொடரவும் →', + 'config-page-language' => 'மொழி', + 'config-page-name' => 'பெயர்', + 'config-page-options' => 'விருப்பத்தேர்வுகள்', +); + +/** Telugu (తెలుగు) + * @author Veeven + */ +$messages['te'] = array( + 'config-desc' => 'మీడియావికీ కొరకై స్థాపకి', + 'config-title' => 'మీడియావికీ $1స్థాపన', + 'config-information' => 'సమాచారం', + 'config-your-language' => 'మీ భాష:', + 'config-wiki-language' => 'వికీ భాష:', + 'config-back' => '← వెనక్కి', + 'config-continue' => 'కొనసాగించు →', + 'config-page-language' => 'భాష', + 'config-page-welcome' => 'మీడియావికీకి స్వాగతం!', + 'config-page-dbsettings' => 'డాటాబేసు అమరికలు', + 'config-page-name' => 'పేరు', + 'config-page-options' => 'ఎంపికలు', + 'config-page-install' => 'స్థాపించు', + 'config-page-complete' => 'పూర్తయ్యింది!', + 'config-page-readme' => 'నన్ను చదవండి', + 'config-page-releasenotes' => 'విడుదల విశేషాలు', + 'config-db-type' => 'డాటాబేసు రకం:', + 'config-db-name' => 'డాటాబేసు పేరు:', + 'config-db-install-account' => 'స్థాపనకి వాడుకరి ఖాతా', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-header-mysql' => 'MySQL అమరికలు', + 'config-header-postgres' => 'PostgreSQL అమరికలు', + 'config-header-sqlite' => 'SQLite అమరికలు', + 'config-header-oracle' => 'Oracle అమరికలు', + 'config-invalid-db-type' => 'తప్పుడు డాటాబేసు రకం', + 'config-connection-error' => '$1. + +క్రింది హోస్టు, వాడుకరిపేరు మరియు సంకేతపదాలను ఒకసారి సరిచూసుకుని అప్పుడు ప్రయత్నించండి.', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-utf8' => 'UTF-8', + 'config-site-name' => 'వికీ యొక్క పేరు:', + 'config-ns-other' => 'ఇతర (ఇవ్వండి)', + 'config-admin-name' => 'మీ పేరు:', + 'config-admin-password' => 'సంకేతపదం:', + 'config-admin-password-confirm' => 'సంకేతపదం మళ్ళీ:', + 'config-admin-email' => 'ఈ-మెయిలు చిరునామా:', + 'config-profile-wiki' => 'సంప్రదాయ వికీ', + 'config-profile-no-anon' => 'ఖాతా సృష్టింపు తప్పనిసరి', + 'config-profile-private' => 'అంతరంగిక వికీ', + 'config-license' => 'కాపీహక్కులు మరియు లైసెన్సు:', + 'config-license-pd' => 'సార్వజనీనం', + 'config-email-settings' => 'ఈ-మెయిల్ అమరికలు', + 'config-upload-deleted' => 'తొలగించిన దస్త్రాల కొరకు సంచయం:', + 'config-install-step-done' => 'పూర్తయింది', + 'config-install-step-failed' => 'విఫలమైంది', +); + +/** Tagalog (Tagalog) + * @author AnakngAraw + * @author Sky Harbor + */ +$messages['tl'] = array( + 'config-desc' => 'Ang instalador para sa MediaWiki', + 'config-title' => 'Instalasyong $1 ng MediaWiki', + 'config-information' => 'Kabatiran', + 'config-localsettings-key' => 'Susi ng pagsasapanahon:', + 'config-localsettings-badkey' => 'Hindi tama ang susing ibinigay mo.', + 'config-session-error' => 'Kamalian sa pagsisimula ng sesyon: $1', + 'config-no-session' => 'Nawala ang iyong datos ng sesyon! +Suriin ang iyong php.ini at tiyakin na ang session.save_path ay nakatakda sa angkop na direktoryo.', + 'config-your-language' => 'Ang wika mo:', + 'config-your-language-help' => 'Pumili ng isang wikang gagamitin habang isinasagawa ang pagtatalaga.', + 'config-wiki-language' => 'Wika ng Wiki:', + 'config-wiki-language-help' => 'Piliin ang wika kung saan mangingibabaw na isusulat ang wiki.', + 'config-back' => '← Bumalik', + 'config-continue' => 'Magpatuloy →', + 'config-page-language' => 'Wika', + 'config-page-welcome' => 'Maligayang pagdating sa MediaWiki!', + 'config-page-dbconnect' => 'Umugnay sa kalipunan ng datos', + 'config-page-upgrade' => 'Itaas ng uri ang umiiral na pagkakatalaga', + 'config-page-dbsettings' => 'Mga katakdaan ng kalipunan ng datos', + 'config-page-name' => 'Pangalan', + 'config-page-options' => 'Mga mapipili', + 'config-page-install' => 'Italaga', + 'config-page-complete' => 'Buo na!', + 'config-page-restart' => 'Simulan muli ang pag-iinstala', + 'config-page-readme' => 'Basahin ako', + 'config-page-releasenotes' => 'Pakawalan ang mga tala', + 'config-page-copying' => 'Kinokopya', + 'config-page-upgradedoc' => 'Itinataas ang uri', + 'config-page-existingwiki' => 'Umiiral na wiki', + 'config-help-restart' => 'Nais mo bang hawiin ang lahat ng nasagip na datong ipinasok mo at muling simulan ang proseso ng pagluluklok?', + 'config-restart' => 'Oo, muling simulan ito', + 'config-welcome' => '=== Pagsusuring pangkapaligiran === +Isinasagawa ang payak na mga pagsusuri upang makita kung ang kapaligirang ito ay angkop para sa pagluluklok ng MediaWiki. +Dapat mong ibigay ang mga kinalabasan ng mga pagsusuring ito kung kailangan mo ng tulong habang nagluluklok.', + 'config-copyright' => "=== Karapatang-ari at Tadhana === + +$1 + +Ang programang ito ay malayang software; maaari mo itong ipamahagi at/o baguhin sa ilalim ng mga tadhana ng Pangkalahatang Pampublikong Lisensiyang GNU ayon sa pagkakalathala ng Free Software Foundation; na maaaring bersyong 2 ng Lisensiya, o (kung nais mo) anumang susunod na bersyon. + +Ipinamamahagi ang programang ito na umaasang magiging gamitin, subaliut '''walang anumang katiyakan'''; na walang pahiwatig ng '''pagiging mabenta''' o '''kaangkupan para sa isang tiyak na layunin'''. +Tingnan ang Pangkalahatang Pampublikong Lisensiyang GNU para sa mas maraming detalye. + +Dapat nakatanggap ka ng isang sipi ng Pangkalahatang Pampublikong Lisensiyang GNU kasama ng programang ito; kung hindi, sumulat sa Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, o [http://www.gnu.org/licenses//gpl.html basahin ito sa Internet].", + 'config-sidebar' => '* [http://www.mediawiki.org Tahanan ng MediaWiki] +* [http://www.mediawiki.org/wiki/Help:Contents Gabay ng Tagagamit] +* [http://www.mediawiki.org/wiki/Manual:Contents Gabay ng Tagapangasiwa] +* [http://www.mediawiki.org/wiki/Manual:FAQ Mga Malimit Itanong] +---- +* Basahin ako +* Mga tala ng paglalabas +* Pagkopya +* Pagsasapanahon', + 'config-env-good' => 'Nasuri na ang kapaligiran. +Mailuluklok mo ang MediaWiki.', + 'config-env-bad' => 'Nasuri na ang kapaligiran. +Hindi mo mailuklok ang MediaWiki.', + 'config-env-php' => 'Naitalaga ang PHP na $1.', + 'config-env-php-toolow' => 'Naitalaga ang PHP $1. +Subalit, nangangailangan ang MediaWiki ng PHP $2 o mas mataas pa.', + 'config-unicode-using-utf8' => 'Ginagamit ang utf8_normalize.so ni Brion Vibber para sa pagpapanormal ng Unikodigo.', + 'config-unicode-using-intl' => 'Ginagamit ang [http://pecl.php.net/intl intl dugtong na PECL] para sa pagsasanormal ng Unikodigo.', + 'config-no-db' => 'Hindi matagpuan ang isang angkop na drayber ng kalipunan ng datos!', + 'config-memory-raised' => 'Ang hangganan_ng_alaala ng PHP ay $1, itinaas sa $2.', + 'config-memory-bad' => "'''Babala:''' Ang hangganan_ng_alaala ng PHP ay $1. +Ito ay maaaring napakababa. +Maaaring mabigo ang pagluluklok!", + 'config-xcache' => 'Ininstala na ang [http://trac.lighttpd.net/xcache/ XCache]', + 'config-apc' => 'Ininstala na ang [http://www.php.net/apc APC]', + 'config-eaccel' => 'Ininstala na ang [http://eaccelerator.sourceforge.net/ eAccelerator]', + 'config-wincache' => 'Ininstala na ang [http://www.iis.net/download/WinCacheForPhp WinCache]', + 'config-no-cache' => "'''Babala:''' Hindi mahanap ang [http://eaccelerator.sourceforge.net eAccelerator], [http://www.php.net/apc APC], [http://trac.lighttpd.net/xcache/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache]. +Hindi pinapagana ang pagbabaon ng mga bagay.", + 'config-diff3-bad' => 'Hindi natagpuan ang GNU diff3.', + 'config-imagemagick' => 'Natagpuan ang ImageMagick: $1. +Papaganahin ang pagkakagyat ng larawan kapag pinagana mo ang mga pagkakargang paitaas.', + 'config-no-scaling' => 'Hindi matagpuan ang aklatang GD o ImageMagick. +Hindi papaganahin ang pagkakagyat ng larawan.', + 'config-no-uri' => "'''Kamalian:''' Hindi matukoy ang kasalukuyang URI. +Pinigilan ang pag-iinstala.", + 'config-db-type' => 'Uri ng kalipunan ng datos:', + 'config-db-host' => 'Tagapagpasinaya ng kalipunan ng datos:', + 'config-db-host-oracle' => 'TNS ng kalipunan ng dato:', + 'config-db-wiki-settings' => 'Kilalanin ang wiking ito', + 'config-db-name' => 'Pangalan ng kalipunan ng dato:', + 'config-db-install-account' => 'Akawnt ng tagagamit para sa pagluluklok', + 'config-db-username' => 'Pangalang pangtagagamit ng kalipunan ng dato:', + 'config-db-password' => 'Hudyat sa kalipunan ng dato:', + 'config-db-install-help' => 'Ipasok ang pangalan ng tagagamit at hudyat na gagamitin upang umugnay sa kalipunan ng dato habang isinasagawa ang pagluluklok.', + 'config-db-account-lock' => 'Gamitin ang gayun ding pangalan ng tagagamit at hudyat habang nasa normal na operasyon', + 'config-db-wiki-account' => 'Akawnt ng tagagamit para sa pangkaraniwang pagpapaandar', + 'config-db-prefix' => 'Unlapi ng talahanayan ng kalipunan ng dato:', + 'config-db-charset' => 'Pangkat ng panitik ng kalipunan ng dato', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binaryo', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 paurong-kabagay UTF-8', + 'config-mysql-old' => 'Hindi kailangan ang MySQL na $1 o mas bago, mayroon kang $2.', + 'config-db-port' => 'Daungan ng kalipunan ng dato:', + 'config-db-schema' => 'Panukala para sa MediaWiki', + 'config-db-schema-help' => 'Ang nasa itaas na panukala ay pangkaraniwang magiging maayos. +Baguhin lamang ito kung alam mong kinakailangan.', + 'config-sqlite-dir' => 'Direktoryo ng dato ng SQLite:', + 'config-oracle-def-ts' => 'Likas na nakatakdang puwang ng talahanayan:', + 'config-oracle-temp-ts' => 'Pansamantalang puwang ng talahanayan:', + 'config-header-mysql' => 'Mga katakdaan ng MySQL', + 'config-header-postgres' => 'Mga katakdaan ng PostgreSQL', + 'config-header-sqlite' => 'Mga katakdaan ng SQLite', + 'config-header-oracle' => 'Mga katakdaan ng Oracle', + 'config-invalid-db-type' => 'Hindi tanggap na uri ng kalipunan ng dato', + 'config-missing-db-name' => 'Dapat kang magpasok ng isang halaga para sa "pangalan ng Kalipunan ng Dao"', + 'config-invalid-db-name' => 'Hindi tanggap na pangalan ng kalipunan ng dato na "$1". +Gumamit lamang ng mga titik ng ASCII (a-z, A-Z), mga bilang (0-9), mga salangguhit (_) at mga gitling (-).', + 'config-invalid-db-prefix' => 'Hindi tanggap na unlapi ng kalipunan ng dato na "$1". +Gamitin lamang ang mga titik na ASCII (a-z, A-Z), mga bilang (0-9), mga salangguhit (_) at mga gitling (-).', + 'config-postgres-old' => 'Kailangan ang PostgreSQL $1 o mas bago, mayroon kang $2.', + 'config-sqlite-readonly' => 'Ang talaksang $1 ay hindi maisusulat.', + 'config-sqlite-cant-create-db' => 'Hindi malikha ang talaksang $1 ng kalipunan ng dato.', + 'config-sqlite-fts3-downgrade' => 'Nawawala ang suportang FTS3 ng PHP, ibinababa ang uri ng mga talahanayan', + 'config-regenerate' => 'Muling likhain ang LocalSettings.php →', + 'config-show-table-status' => 'Nabigo ang pagtatanong na IPAKITA ANG KALAGAYAN NG TALAHANAYAN!', + 'config-db-web-account' => 'Akawnt ng kalipunan ng dato para sa pagpunta sa web', + 'config-db-web-help' => 'Piliin ang pangalan ng tagagamit at hudyat na gagamitin ng tagapaghain ng web upang umugnay sa tagapaghain ng kalipunan ng dato, habang nasa pangkaraniwang pagtakbo ng wiki.', + 'config-db-web-account-same' => 'Gamitin ang gayun din akawnt katulad ng sa pagluluklok', + 'config-db-web-create' => 'Likhain ang akawnt kung hindi pa ito umiiral', + 'config-mysql-engine' => 'Makinang imbakan:', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-charset' => 'Pangkat ng panitik ng kalipunan ng dato:', + 'config-mysql-binary' => 'Binaryo', + 'config-mysql-utf8' => 'UTF-8', + 'config-site-name' => 'Pangalan ng wiki:', + 'config-site-name-help' => "Lilitaw ito sa bareta ng pamagat ng pantingin-tingin at sa samu't saring ibang mga lugar.", + 'config-site-name-blank' => 'Magpasok ng isang pangalan ng sityo.', + 'config-project-namespace' => 'Puwang na pampangalan ng proyekto:', + 'config-ns-generic' => 'Proyekto', + 'config-ns-site-name' => 'Katulad ng sa pangalan ng wiki: $1', + 'config-ns-other' => 'Iba pa (tukuyin)', + 'config-ns-other-default' => 'Wiki Ko', + 'config-admin-box' => 'Akawnt ng tagapangasiwa', + 'config-admin-name' => 'Pangalan mo:', + 'config-admin-password' => 'Hudyat:', + 'config-admin-password-confirm' => 'Hudyat uli:', + 'config-admin-name-blank' => 'Magpasok ng isang pangalan ng tagagamit na tagapangasiwa.', + 'config-admin-name-invalid' => 'Ang tinukoy na pangalan ng tagagamit na "$1" ay hindi tanggap. +Tumukoy ng ibang pangalan ng tagagamit.', + 'config-admin-password-blank' => 'Magpasok ng isang hudyat para sa akawnt ng tagapangasiwa.', + 'config-admin-password-same' => 'Ang hudyat ay hindi dapat na katulad ng pangalan ng tagagamit.', + 'config-admin-password-mismatch' => 'Hindi magkatugma ang ipinasok mong dalawang mga hudyat.', + 'config-admin-email' => 'Tirahan ng e-liham:', + 'config-admin-error-user' => 'Panloob na kamalian kapag nililikha ang isang tagapangasiwa na may pangalang "$1".', + 'config-admin-error-password' => 'Panloob na kamalian kapag nagtatakda ng isang hudyat na para sa tagapangasiwang "$1":
    $2
    ', + 'config-subscribe' => 'Tumanggap mula sa [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce talaan ng mga pinadadalhan ng mga nilalabas na mga pabatid].', + 'config-almost-done' => 'Halos tapos ka na! +Maaari mo ngayong laktawan ang natitira pang pag-aayos at iluklok na ang wiki ngayon.', + 'config-optional-continue' => 'Magtanong sa akin ng marami pang mga tanong.', + 'config-optional-skip' => 'Naiinip na ako, basta iluklok na lang ang wiki.', + 'config-profile' => 'Balangkas ng mga karapatan ng tagagamit:', + 'config-profile-wiki' => 'Tradisyonal na wiki', + 'config-profile-no-anon' => 'Kailangan ang paglikha ng akawnt', + 'config-profile-fishbowl' => 'Pinahintulutang mga patnugot lamang', + 'config-profile-private' => 'Pribadong wiki', + 'config-license' => 'Karapatang-ari at lisensiya:', + 'config-license-none' => 'Walang talababa ng lisensiya', + 'config-license-cc-by-sa' => 'Malikhaing Pangkaraniwang Pagtukoy Pamamahaging Magkatulad', + 'config-license-cc-by-nc-sa' => 'Malikhaing Pangkaraniwang Pagtukoy Hindi-Pangkalakal Pamamahaging Magkatulad', + 'config-license-gfdl-old' => 'Lisensiya ng Malayang Dokumenstasyon 1.2 ng GNU', + 'config-license-gfdl-current' => 'Lisensiya ng Malayang Dokumenstasyon 1.3 ng GNU o mas bago', + 'config-license-pd' => 'Nasasakupan ng Madla', + 'config-license-cc-choose' => 'Pumili ng isang pasadyang Lisensiya ng Malikhaing mga Pangkaraniwan', + 'config-email-settings' => 'Mga katakdaan ng e-liham', + 'config-enable-email' => 'Paganahin ang palabas na e-liham', + 'config-email-user' => 'Paganahin ang tagagamit-sa-tagagamit na e-liham', + 'config-email-user-help' => 'Payagan ang lahat ng mga tagagamit na magpadala ng e-liham sa bawat isa kapag pinagana nila ito sa kanilang mga nais.', + 'config-email-usertalk' => 'Paganahin ang pabatid na pampahina ng usapan ng tagagamit', + 'config-email-usertalk-help' => 'Payagan ang mga tagagamit na tumanggap ng mga pabatid sa mga pagbabago ng pahina ng usapan ng tagagamit, kapag pinagana nila ito sa kanilang mga nais.', + 'config-email-watchlist' => 'Paganahin ang pabatid ng talaan ng bantayan', + 'config-email-watchlist-help' => 'Payagan ang mga tagagamit na tumanggap ng mga pabatid tungkol sa kanilang binabantayang mga pahina kapag pinagana nila ito sa kanilang mga nais.', + 'config-email-auth' => 'Paganahin ang pagpapatunay ng e-liham', + 'config-email-sender' => 'Pabalik na tirahan ng e-liham:', + 'config-upload-settings' => 'Mga pagkakarga ng mga larawan at talaksan', + 'config-upload-enable' => 'Paganahin ang pagkakarga ng talaksan', + 'config-upload-deleted' => 'Direktoryo para sa binurang mga talaksan:', + 'config-upload-deleted-help' => 'Pumili ng isang direktoryong pagsusupnayan ng naburang mga talaksan. +Ideyal na dapat itong hindi mapupuntahan mula sa web.', + 'config-logo' => 'URL ng logo:', + 'config-instantcommons' => 'Paganahin ang Mga Pangkaraniwang Biglaan', + 'config-cc-error' => 'Hindi nagbigay ng resulta ang pampili ng lisensiya ng Malikhaing Pangkaraniwan. +Ipasok na kinakamay ang pangalan ng lisensiya.', + 'config-cc-again' => 'Pumili uli...', + 'config-cc-not-chosen' => 'Piliin kung anong lisensiya ng Malikhaing mga Pangkaraniwan ang nais mo at pindutin ang "magpatuloy".', + 'config-advanced-settings' => 'Mas masulong na pagkakaayos', + 'config-cache-options' => 'Mga katakdaan para sa pagtatago ng bagay:', + 'config-memcached-servers' => 'Mga tagapaghaing itinago sa alaala:', + 'config-memcache-needservers' => 'Pinili mo ang Memcached bilang uri mo ng taguan ngunit hindi tumukoy ng anumang mga tagapaghain.', + 'config-memcache-badip' => 'Nagpasok ka ng isang hindi tanggap na tirahan ng IP para sa Memcached: $1.', + 'config-memcache-noport' => 'Hindi ka tumukoy ng isang daungan na gagamitin para sa tagapaghain ng Memcached: $1. +Kung hindi mo alam ang daungan, ang likas na nakatakda ay 11211.', + 'config-memcache-badport' => 'Ang bilang ng daungan ng Memcached ay dapat na nasa pagitan ng $1 at $2.', + 'config-extensions' => 'Mga dugtong', + 'config-install-step-done' => 'nagawa na', + 'config-install-step-failed' => 'nabigo', + 'config-install-extensions' => 'Isinasama ang mga karugtong', + 'config-install-database' => 'Inihahanda ang kalipunan ng dato', + 'config-install-pg-schema-failed' => 'Nabigo ang paglikha ng mga talahanayan. +Tiyakin na ang tagagamit na "$1" ay maaaring makasulat sa balangkas na "$2".', + 'config-install-pg-commit' => 'Isinasagawa ang mga pagbabago', + 'config-install-pg-plpgsql' => 'Sumusuri ng wikang PL/pgSQL', + 'config-pg-no-plpgsql' => 'Kailangan mong magtalaga ng wikang PL/pgSQL sa loob ng kalipunan ng datong $1', + 'config-pg-no-create-privs' => 'Ang tinukoy mong akawnt para sa pagtatalaga ay walang sapat na mga pribilehiyo upang makalikha ng isang akawnt.', + 'config-install-user' => 'Nililikha ang tagagamit ng kalipunan ng dato', + 'config-install-user-alreadyexists' => 'Umiiral na ang tagagamit na "$1"', + 'config-install-user-create-failed' => 'Nabigo ang paglikha ng tagagamit na "$1": $2', + 'config-install-user-grant-failed' => 'Nabigo ang pagbibigay ng pahintulot sa tagagamit na "$1": $2', + 'config-install-tables' => 'Nililikha ang mga talahanayan', + 'config-install-tables-exist' => "'''Babala''': Tila umiiral na ang mga talahanayan ng MediaWiki. +Nilalaktawan ang paglikha.", + 'config-install-tables-failed' => "'''Kamalian''': Nabigo ang paglikha ng talahanayan na may sumusunod na kamalian: $1", + 'config-install-interwiki' => 'Nilalagyan ng laman ang likas na nakatakdang talahanayan ng interwiki', + 'config-install-interwiki-list' => 'Hindi matagpuan ang talaksang interwiki.list.', + 'config-install-interwiki-exists' => "'''Babala''': Tila may mga laman na ang talahanayan ng interwiki. +Nilalaktawan ang likas na nakatakdang talaan.", + 'config-install-stats' => 'Sinisimulan ang estadistika', + 'config-install-keys' => 'Ginagawa ang lihim na susi', + 'config-install-sysop' => 'Nililikha ang akawnt ng tagagamit na tagapangasiwa', + 'config-install-subscribe-fail' => 'Hindi nagawang sumipi mula sa mediawiki-announce', + 'config-install-mainpage' => 'Nililikha ang pangunahing pahina na may likas na nakatakdang nilalaman', + 'config-install-extension-tables' => 'Nililikha ang mga talahanayan para sa pinagaganang mga dugtong', + 'config-install-mainpage-failed' => 'Hindi maisingit ang pangunahing pahina: $1', + 'config-install-done' => "'''Maligayang bati!''' +Matagumpay mong nailuklok ang MediaWiki. + +Ang tagapagluklok ay nakagawa ng isang talaksan ng LocalSettings.php. +Naglalaman ito ng lahat ng iyong mga pagsasaayos. + +Kailangan mo itong ikargang paibaba at ilagay ito sa lipon ng iyong pagluluklok ng wiki (katulad ng direktoryo ng index.php). Ang pagkakargang paibaba ay dapat na kusang magsimula. + +Kung ang pagkakargang paibaba ay hindi inialok, o kung hindi mo ito itinuloy, maaari mong muling simulan ang pagkakargang paibaba sa pamamagitan ng pagpindot sa kawing na nasa ibaba: + +$3 + +'''Paunawa''': Kapag hindi mo ito ginawa ngayon, ang nagawang talaksang ito ng pagkakaayos ay hindi mo na makukuha mamaya kapag lumabas ka mula sa pagluluklok na hindi ikinakarga itong paibaba. + +Kapag nagawa na iyan, maaari ka nang '''[$2 pumasok sa wiki mo]'''.", + 'config-download-localsettings' => 'Ikargang paibaba ang LocalSettings.php', + 'config-help' => 'saklolo', +); + +/** Ukrainian (Українська) + * @author Ahonc + * @author Alex Khimich + * @author Diemon.ukr + * @author Тест + */ +$messages['uk'] = array( + 'config-desc' => 'Інсталятор MediaWiki', + 'config-title' => 'Встановлення MediaWiki $1', + 'config-information' => 'Інформація', + 'config-localsettings-upgrade' => "'''Увага''': було виявлено файл LocalSettings.php. +Ваше програмне забезпечення може бути оновлено. +Будь-ласка, перемістіть файл LocalSettings.php в іншу безпечну директорію, а потім знову запустіть програму установки.", + 'config-session-error' => 'Помилка початку сесії: $1', + 'config-your-language' => 'Ваша мова:', + 'config-your-language-help' => 'Оберіть мову для використання в процесі установки.', + 'config-wiki-language' => 'Мова для вікі:', + 'config-wiki-language-help' => 'Виберіть мову, якою буде відображатися вікі.', + 'config-back' => '← Назад', + 'config-continue' => 'Далі →', + 'config-page-language' => 'Мова', + 'config-page-welcome' => 'Ласкаво просимо на MediaWiki!', + 'config-page-dbconnect' => 'Підключення до бази даних', + 'config-page-upgrade' => 'Оновлення існуючої установки', + 'config-page-dbsettings' => 'Налаштування бази даних', + 'config-page-name' => 'Назва', + 'config-page-options' => 'Параметри', + 'config-page-install' => 'Установка', + 'config-page-complete' => 'Готово!', + 'config-page-restart' => 'Перезапустити установку', + 'config-page-readme' => 'Прочитай мене', + 'config-page-releasenotes' => 'Інформація про версію', + 'config-page-copying' => 'Копіювання', + 'config-page-upgradedoc' => 'Оновлення', + 'config-help-restart' => 'Ви бажаєте видалити всі введені та збережені вами дані і запустити процес установки спочатку?', + 'config-restart' => 'Так, перезапустити установку', + 'config-welcome' => '=== Перевірка оточення === +Проводяться базові перевірки, щоб виявити, чи можлива установка MediaWiki у даній системі. +Вкажіть результати цих перевірок при зверненні за допомогою під час установки.', + 'config-sidebar' => '* [http://www.mediawiki.org Сайт MediaWiki] +* [http://www.mediawiki.org/wiki/Help:Contents/uk Керівництво користувача] +* [http://www.mediawiki.org/wiki/Manual:Contents/uk Керівництво адміністратора] +* [http://www.mediawiki.org/wiki/Manual:FAQ/uk FAQ]', + 'config-env-good' => 'Перевірку середовища успішно завершено. +Ви можете встановити MediaWiki.', + 'config-env-bad' => 'Було проведено перевірку середовища. Ви не можете встановити MediaWiki.', + 'config-env-php' => 'Встановлено версію PHP: $1.', + 'config-unicode-using-utf8' => 'Використовувати utf8_normalize.so Брайона Віббера для нормалізації Юнікоду.', + 'config-unicode-using-intl' => 'Використовувати [http://pecl.php.net/intl міжнародне розширення PECL] для нормалізації Юнікоду.', + 'config-unicode-pure-php-warning' => "'''Увага''': [http://pecl.php.net/intl міжнародне розширення PECL] не може провести нормалізацію Юнікоду. +Якщо ваш сайт має високий трафік, вам варто почитати про [http://www.mediawiki.org/wiki/Unicode_normalization_considerations нормалізацію Юнікоду].", + 'config-no-db' => 'Не вдалося знайти відповідний драйвер бази даних!', + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache] встановлено', + 'config-apc' => '[http://www.php.net/apc APC] встановлено', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator] встановлено', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] встановлено', + 'config-db-type' => 'Тип бази даних:', + 'config-db-host' => 'Хост бази даних:', + 'config-db-name' => 'Назва бази даних:', + 'config-db-password' => 'Пароль бази даних:', + 'config-db-charset' => 'Кодування бази даних', + 'config-db-port' => 'Порт бази даних:', + 'config-invalid-db-type' => 'Невірний тип бази даних', + 'config-invalid-db-name' => 'Неприпустима назва бази даних "$1". +Використовуйте тільки ASCII букви (a-z, A-Z), цифри (0-9), знаки підкреслення (_) і дефіси (-).', + 'config-invalid-db-prefix' => 'Неприпустимий префікс бази даних "$1". +Використовуйте тільки ASCII букви (a-z, A-Z), цифри (0-9), знаки підкреслення (_) і дефіси (-).', + 'config-sqlite-cant-create-db' => 'Не вдалося створити файл бази даних $1.', + 'config-db-web-create' => 'Створити обліковий запис, якщо його ще не існує', + 'config-mysql-charset' => 'Кодування бази даних:', + 'config-mysql-binary' => 'Двійкове', + 'config-site-name' => 'Назва вікі:', + 'config-site-name-blank' => 'Введіть назву сайту.', + 'config-project-namespace' => 'Простір назв проекту:', + 'config-ns-generic' => 'Проект', + 'config-admin-name' => "Ваше ім'я:", + 'config-admin-password' => 'Пароль:', + 'config-admin-password-confirm' => 'Пароль ще раз:', + 'config-admin-password-mismatch' => 'Два введені вами паролі не збігаються.', + 'config-admin-email' => 'Адреса електронної пошти:', + 'config-license' => 'Авторські права і ліцензія:', + 'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike', + 'config-license-gfdl-old' => 'GNU Free Documentation License 1.2', + 'config-email-settings' => 'Налаштування електронної пошти', + 'config-upload-enable' => 'Дозволити завантаження файлів', + 'config-upload-deleted' => 'Каталог для вилучених файлів:', + 'config-cc-again' => 'Виберіть знову ...', + 'config-extensions' => 'Розширення', + 'config-install-step-done' => 'виконано', + 'config-install-step-failed' => 'не вдалося', + 'config-install-interwiki-list' => 'Не вдалося знайти файл interwiki.list.', +); + +/** Yiddish (ייִדיש) + * @author פוילישער + */ +$messages['yi'] = array( + 'config-admin-name' => 'אײַער נאָמען:', +); + +/** Simplified Chinese (‪中文(简体)‬) + * @author Hydra + * @author PhiLiP + * @author 阿pp + */ +$messages['zh-hans'] = array( + 'config-desc' => 'MediaWiki安装程序', + 'config-title' => 'MediaWiki $1配置', + 'config-information' => '信息', + 'config-localsettings-upgrade' => '已检测到LocalSettings.php文件。要升级该配置,请在下面的框中输入$wgUpgradeKey的值。您可以在LocalSettings.php中找到它。', + 'config-localsettings-cli-upgrade' => '已检测到LocalSettings.php文件。要升级该配置,请使用--upgrade=yes选项。', + 'config-localsettings-key' => '升级密钥:', + 'config-localsettings-badkey' => '您提供的密钥不正确。', + 'config-upgrade-key-missing' => '检测到MediaWiki的配置已经存在。若要升级该配置,请将下面一行文本添加到LocalSettings.php的底部: + +$1', + 'config-localsettings-incomplete' => '当前的LocalSettings.php可能并不完整,因为变量$1没有设置。请在LocalSettings.php设置该变量,并单击“继续”。', + 'config-localsettings-connection-error' => '在使用LocalSettings.php或AdminSettings.php中指定的设置连接数据库时发生错误。请修复相应设置并重试。 + +$1', + 'config-session-error' => '启动会话出错:$1', + 'config-session-expired' => '您的会话数据可能已经过期,当前会话的使用期限被设定为$1。您可以在php.ini中设置session.gc_maxlifetime来延长此期限,并重新启动本配置程序。', + 'config-no-session' => '您的会话数据丢失了!请检查php.ini并确保session.save_path被设置为适当的目录。', + 'config-your-language' => '您使用的语言:', + 'config-your-language-help' => '选择在安装过程中使用的语言。', + 'config-wiki-language' => 'Wiki使用的语言:', + 'config-wiki-language-help' => '选择将要安装的wiki在多数情况下使用的语言。', + 'config-back' => '← 后退', + 'config-continue' => '继续 →', + 'config-page-language' => '语言', + 'config-page-welcome' => '欢迎使用MediaWiki!', + 'config-page-dbconnect' => '连接到数据库', + 'config-page-upgrade' => '升级当前配置', + 'config-page-dbsettings' => '数据库设置', + 'config-page-name' => '名称', + 'config-page-options' => '选项', + 'config-page-install' => '安装', + 'config-page-complete' => '完成!', + 'config-page-restart' => '重新开始安装', + 'config-page-readme' => '自述', + 'config-page-releasenotes' => '发布说明', + 'config-page-copying' => '复制', + 'config-page-upgradedoc' => '更新', + 'config-page-existingwiki' => '已有wiki', + 'config-help-restart' => '是否要清除所有已输入且保存的数据,并重新启动安装过程吗?', + 'config-restart' => '是的,重启吧', + 'config-welcome' => '=== 环境检查 === +对当前环境是否适合安装MediaWiki作基本的检查。如果您在安装过程中需要帮助,请提供这些检查的结果。', + 'config-copyright' => "=== 版权和条款 === + +\$1 + +本程序为自由软件;您可依据自由软件基金会所发表的GNU通用公共授权条款规定,就本程序再为发布与/或修改;无论您依据的是本授权的第二版或(您自行选择的)任一日后发行的版本。 + +本程序是基于使用目的而加以发布,然而'''不负任何担保责任''';亦无对'''适售性'''或'''特定目的适用性'''所为的默示性担保。详情请参照GNU通用公共授权。 + +您应已收到附随于本程序的GNU通用公共授权的副本;如果没有,请写信至自由软件基金会:59 Temple Place - Suite 330, Boston, Ma 02111-1307, USA,或[http://www.gnu.org/copyleft/gpl.html 在线阅读]。", + 'config-sidebar' => '* [http://www.mediawiki.org/wiki/MediaWiki/zh-hans MediaWiki首页] +* [http://www.mediawiki.org/wiki/Help:Contents/zh-hans 用户帮助] +* [http://www.mediawiki.org/wiki/Manual:Contents 管理员帮助] +* [http://www.mediawiki.org/wiki/Manual:FAQ/zh-hans 常见问题解答]', + 'config-env-good' => '环境检查已经完成。您可以安装MediaWiki。', + 'config-env-bad' => '环境检查已经完成。您不能安装MediaWiki。', + 'config-env-php' => 'PHP $1已安装。', + 'config-unicode-using-utf8' => '使用Brion Vibber的utf8_normalize.so实现Unicode正常化。', + 'config-unicode-using-intl' => '使用[http://pecl.php.net/intl intl PECL扩展]实现Unicode正常化。', + 'config-unicode-pure-php-warning' => "'''警告''':[http://pecl.php.net/intl intl PECL扩展]无法处理Unicode正常化,故只能退而采用运行较慢的纯PHP实现的方法。如果您运行着一个高流量的站点,请参阅[http://www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode正常化]一文。", + 'config-unicode-update-warning' => "'''警告''':Unicode正常化封装器的已安装版本使用了旧版本的[http://site.icu-project.org/ ICU项目]库。如果您需要使用Unicode,请将其[http://www.mediawiki.org/wiki/Unicode_normalization_considerations 升级]。", + 'config-no-db' => '找不到合适的数据库驱动!', + 'config-no-db-help' => '您需要为PHP安装数据库驱动。MediaWiki支持下列数据库类型:$1 + +如果您正在使用共享主机,请让您的主机提供商为您安装适当的数据库驱动。 +如果PHP由您自行编译,请将其重新配置以启用数据库客户端,例如使用./configure --with-mysql。 +如果PHP是您通过Debian或Ubuntu包安装的,那么您还需要安装php5-mysql模块。', + 'config-no-fts3' => "'''警告''':已编译的SQLite不包含[http://sqlite.org/fts3.html FTS3模块],后台搜索功能将不可用。", + 'config-register-globals' => "'''警告:PHP的[http://php.net/register_globals register_globals]选项被启用。请尽量禁用该功能,'''虽然不会影响MediaWiki的运行,但您的服务器会被暴露给潜在的安全漏洞。", + 'config-magic-quotes-runtime' => "'''致命错误:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]被启用!''' +此选项会无法预测地破坏输入的数据,请将其禁用,否则您将不能安装或使用MediaWiki。", + 'config-magic-quotes-sybase' => "'''致命错误:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase]被启用!''' +此选项会无法预测地破坏输入的数据,请将其禁用,否则您将不能安装或使用MediaWiki。", + 'config-mbstring' => "'''致命错误:[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]被启用!''' +此选项会导致错误并不可预测地破坏数据,请将其禁用,否则您将不能安装或使用MediaWiki。", + 'config-ze1' => "'''致命错误:[http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]被启用!''' +此选项将导致MediaWiki出现极其严重的故障,请将其禁用,否则您将不能安装或使用MediaWiki。", + 'config-safe-mode' => "'''警告:'''PHP的[http://www.php.net/features.safe-mode 安全模式]已启用。它可能会导致一些问题,尤其在对文件上传和数学公式math的支持方面。", + 'config-xml-bad' => '缺少PHP的XML模块。MediaWiki需要使用该模块提供的函数,在当前配置下将无法工作。如果您正在使用Mandrake Linux,请安装php-xml包。', + 'config-pcre' => '可能缺少PCRE的支持模块。MediaWiki的运行需要兼容于Perl的正则表达式函数。', + 'config-pcre-no-utf8' => "'''致命错误''':PHP的PCRE模块在编译时可能没有包含PCRE_UTF8支持。MediaWiki需要UTF-8支持才能正常工作。", + 'config-memory-raised' => 'PHP的内存使用上限memory_limit为$1,自动提升到$2。', + 'config-memory-bad' => "'''警告:'''PHP的内存使用上限memory_limit为$1。该设定可能过低,并导致安装失败!", + 'config-xcache' => '[http://trac.lighttpd.net/xcache/ XCache]已安装', + 'config-apc' => '[http://www.php.net/apc APC]已安装', + 'config-eaccel' => '[http://eaccelerator.sourceforge.net/ eAccelerator]已安装', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache]已安装', + 'config-no-cache' => "'''警告:'''找不到[http://eaccelerator.sourceforge.net eAccelerator]、[http://www.php.net/apc APC]、[http://trac.lighttpd.net/xcache/ XCache]或[http://www.iis.net/download/WinCacheForPhp WinCache],无法启用对象缓存。 +Object caching is not enabled.", + 'config-diff3-bad' => '找不到GNU diff3。', + 'config-imagemagick' => '已找到ImageMagick:$1。如果你启用了上传功能,缩略图功能也将被启用。', + 'config-gd' => '已找到内建的GD图形库。如果你启用了上传功能,缩略图功能也将被启用。', + 'config-no-scaling' => '找不到GD库或ImageMagick。缩略图功能将不可用。', + 'config-no-uri' => "'''错误:'''无法确定当前的URI。安装已中断。", + 'config-uploads-not-safe' => "'''警告:'''您的默认上传目录$1存在允许执行任意脚本的漏洞。尽管MediaWiki会对所有已上传的文件进行安全检查,但我们仍然强烈建议您在启用上传功能前[http://www.mediawiki.org/wiki/Manual:Security#Upload_security 关闭该安全漏洞]。", + 'config-brokenlibxml' => '您的系统安装的PHP和libxml2版本组合存在故障,并可能在MediaWiki和其他web应用程序中造成隐藏的数据损坏。请将PHP升级到5.2.9或以上,libxml2升级到2.7.3或以上([http://bugs.php.net/bug.php?id=45996 PHP的故障报告])。安装已中断。', + 'config-using531' => '由于函数__call()的引用参数存在故障,PHP $1和MediaWiki无法兼容。请升级到PHP 5.3.2或以上版本,或降级到PHP 5.3.0以修复该问题([http://bugs.php.net/bug.php?id=50394 PHP的故障报告])。安装已中断。', + 'config-db-type' => '数据库类型:', + 'config-db-host' => '数据库主机:', + 'config-db-host-help' => '如果您的数据库位于另一台服务器上,在此输入主机名或IP地址。 + +如果您使用的是共享web主机,您的主机提供商应会在他们的文档中给出正确的主机名称。 + +如果您使用了Windows服务器和MySQL数据库,使用“localhost”可能无法识别到本地服务器。如果是这样的话,请尝试指定本地服务器的IP地址为“127.0.0.1”。', + 'config-db-host-oracle' => '数据库透明网络底层(TNS):', + 'config-db-host-oracle-help' => '请输入合法的[http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm 本地连接名],并确保tnsnames.ora文件对本安装程序可见。
    如果您使用的客户端库为10g或更新的版本,您还可以使用[http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm 简单连接名方法](easy connect naming method)。', + 'config-db-wiki-settings' => '标识本wiki', + 'config-db-name' => '数据库名称:', + 'config-db-name-help' => '请输入一个可以标识您的wiki的名称。请勿使用空格。 + +如果您正在使用共享web主机,您的主机提供商或会给您指定一个数据库名称,或会让您通过控制面板创建数据库。', + 'config-db-name-oracle' => '数据库模式:', + 'config-db-install-account' => '用于安装的用户帐号', + 'config-db-username' => '数据库用户名:', + 'config-db-password' => '数据库密码:', + 'config-db-install-username' => '请输入在安装过程中用于连接数据库的用户名。请勿输入MediaWiki帐号的用户名,请输入您数据库的用户名。', + 'config-db-install-password' => '请输入在安装过程中用于连接数据库的密码。请勿输入MediaWiki帐号的密码,请输入您数据库的密码。', + 'config-db-install-help' => '请输入在安装过程中用于连接数据库的用户名和密码。', + 'config-db-account-lock' => '在普通操作中使用相同的用户名和密码', + 'config-db-wiki-account' => '用于普通操作的用户帐号', + 'config-db-wiki-help' => '输入在普通的wiki操作中(安装完成后)将用于连接数据库的用户名和密码。如果该帐号并不存在,而安装帐号具有足够的权限,该用户帐号会被自动创建,并被赋予足以运行此wiki的最低权限。', + 'config-db-prefix' => '数据库表前缀:', + 'config-db-prefix-help' => '如果您需要在多个wiki之间(或在MediaWiki与其他web应用程序之间)共享一个数据库,您可以通过添加前缀的方式来避免出现表名称的冲突。请勿使用空格。 + +此字段通常可留空。', + 'config-db-charset' => '数据库字符集', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 二进制', + 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', + 'config-charset-mysql4' => 'MySQL 4.0 UTF-8(向后兼容)', + 'config-charset-help' => "'''警告:'''如果您在MySQL 4.1+中使用'''向后兼容的UTF-8'''字符集,并在之后使用mysqldump备份了数据库,则可能损坏所有的非ASCII字符,从而不可逆地破坏您的备份! + +在'''二进制模式'''下,MediaWiki会将UTF-8编码的文本存于数据库的二进制字段中。相对于MySQL的UTF-8模式,这种方法效率更高,并允许您使用全范围的Unicode字符。 + +在'''UTF-8模式'''下,MySQL将知道您数据使用的字符集,并能适当地提供和转换内容。但这样做您将无法在数据库中存储[http://zh.wikipedia.org/wiki/基本多文种平面 基本多文种平面]以外的字符。", + 'config-mysql-old' => '需要MySQL $1或更新的版本,您的版本为$2。', + 'config-db-port' => '数据库端口:', + 'config-db-schema' => 'MediaWiki的数据库模式', + 'config-db-schema-help' => '上述数据库模式的设置通常是正确的。请在有此需求时才更改它们。', + 'config-sqlite-dir' => 'SQLite数据目录:', + 'config-sqlite-dir-help' => "SQLite会将所有的数据存储于单一文件中。 + +您所提供的目录必须在安装过程中对网页服务器可写。 + +该目录'''不应'''允许通过web访问,因此我们不会将数据文件和PHP文件放在一起。 + +安装程序在创建数据文件时,亦会在相同目录下创建.htaccess以控制权限。假若此等控制失效,则可能会将您的数据文件暴露于公共空间,让他人可以获取用户数据(电子邮件地址、杂凑后的密码)、被删除的版本以及其他在wiki上被限制访问的数据。 + +请考虑将数据库统一放置在某处,如/var/lib/mediawiki/yourwiki下。", + 'config-oracle-def-ts' => '默认表空间:', + 'config-oracle-temp-ts' => '临时表空间:', + 'config-support-info' => 'MediaWiki支持以下数据库系统: + +$1 + +如果您在下面列出的数据库系统中没有找到您希望使用的系统,请根据上方链向的指引启用支持。', + 'config-support-mysql' => '* $1是MediaWiki的首选数据库,对它的支持最为完备([http://www.php.net/manual/en/mysql.installation.php 如何将对MySQL的支持编译进PHP中])', + 'config-support-postgres' => '* $1是一种流行的开源数据库系统,可作为MySQL的替代([http://www.php.net/manual/en/pgsql.installation.php 如何将对PostgreSQL的支持编译进PHP中])', + 'config-support-sqlite' => '* $1是一种轻量级的数据库系统,能被良好地支持。([http://www.php.net/manual/en/pdo.installation.php 如何将对SQLite的支持编译进PHP中],须使用PDO)', + 'config-support-oracle' => '* $1是一种商用企业级的数据库。([http://www.php.net/manual/en/oci8.installation.php 如何将对OCI8的支持编译进PHP中])', + 'config-header-mysql' => 'MySQL设置', + 'config-header-postgres' => 'PostgreSQL设置', + 'config-header-sqlite' => 'SQLite设置', + 'config-header-oracle' => 'Oracle设置', + 'config-invalid-db-type' => '无效的数据库类型', + 'config-missing-db-name' => '您必须为“数据库名称”输入内容', + 'config-missing-db-host' => '您必须为“数据库主机”输入内容', + 'config-missing-db-server-oracle' => '您必须为“数据库透明网络底层(TNS)”输入内容', + 'config-invalid-db-server-oracle' => '无效的数据库TNS“$1”。请只使用ASCII字母(a-z、A-Z)、数字(0-9)、下划线(_)和点号(.)。', + 'config-invalid-db-name' => '无效的数据库名称“$1”。请只使用ASCII字母(a-z、A-Z)、数字(0-9)、下划线(_)和连字号(-)。', + 'config-invalid-db-prefix' => '无效的数据库前缀“$1”。请只使用ASCII字母(a-z、A-Z)、数字(0-9)、下划线(_)和连字号(-)。', + 'config-connection-error' => '$1。 + +请检查下列的主机、用户名和密码设置后重试。', + 'config-invalid-schema' => '无效的MediaWiki数据库模式“$1”。请只使用ASCII字母(a-z、A-Z)、数字(0-9)和下划线(_)。', + 'config-postgres-old' => '需要PostgreSQL $1或更新的版本,您的版本为$2。', + 'config-sqlite-name-help' => '请为您的wiki指定一个用于标识的名称。请勿使用空格或连字号,该名称将被用作SQLite的数据文件名。', + 'config-sqlite-parent-unwritable-group' => '由于父目录$2对网页服务器不可写,无法创建数据目录$1。 + +安装程序已确定您网页服务器所使用的用户。请将$3目录设为对该用户可写以继续安装过程。在Unix/Linux系统中,您可以逐行输入下列命令: + +
    cd $2
    +mkdir $3
    +chgrp $4 $3
    +chmod g+w $3
    ', + 'config-sqlite-parent-unwritable-nogroup' => '由于父目录$2对网页服务器不可写,无法创建数据目录$1。 + +安装程序无法确定您网页服务器所使用的用户。请将$3目录设为全局可写(对所有用户)以继续安装过程。在Unix/Linux系统中,您可以逐行输入下列命令: + +
    cd $2
    +mkdir $3
    +chmod a+w $3
    ', + 'config-sqlite-mkdir-error' => '创建数据目录“$1”时发生错误。请检查路径后重试。', + 'config-sqlite-dir-unwritable' => '无法写入目录“$1”。请修改该目录的权限,使其对网页服务器可写后重试。', + 'config-sqlite-connection-error' => '$1。 + +请检查下列的数据目录和数据库名称后重试。', + 'config-sqlite-readonly' => '文件$1不可写。', + 'config-sqlite-cant-create-db' => '无法创建数据文件$1。', + 'config-sqlite-fts3-downgrade' => 'PHP缺少FTS3支持,正在降级数据表', + 'config-can-upgrade' => "在数据库中发现了MediaWiki的数据表。要将它们升级至MediaWiki $1,请点击'''继续'''。", + 'config-upgrade-done' => "升级完成。 + +现在您可以[$1 开始使用您的wiki]了。 + +如果您需要重新生成LocalSettings.php文件,请点击下面的按钮。除非您的wiki出现了问题,我们'''不推荐'''您执行此操作。", + 'config-upgrade-done-no-regenerate' => '升级完成。 + +现在您可以[$1 开始使用您的wiki]了。', + 'config-regenerate' => '重新生成LocalSettings.php →', + 'config-show-table-status' => '查询SHOW TABLE STATUS失败!', + 'config-unknown-collation' => "'''警告:'''数据库使用了无法识别的整理。", + 'config-db-web-account' => '供网页访问使用的数据库帐号', + 'config-db-web-help' => '请指定在wiki执行普通操作时,网页服务器用于连接数据库服务器的用户名和密码。', + 'config-db-web-account-same' => '使用和安装程序相同的帐号', + 'config-db-web-create' => '如果帐号不存在,则自动创建', + 'config-db-web-no-create-privs' => '您指定给安装程序的帐号缺少创建帐号的权限,因此您指定的帐号必须已经存在。', + 'config-mysql-engine' => '存储引擎:', + 'config-mysql-innodb' => 'InnoDB', + 'config-mysql-myisam' => 'MyISAM', + 'config-mysql-engine-help' => "'''InnoDB'''通常是最佳选项,因为它对并发操作有着良好的支持。 + +'''MyISAM'''在单用户或只读环境下可能会有更快的性能表现。但MyISAM数据库出错的概率一般要大于InnoDB数据库。", + 'config-mysql-charset' => '数据库字符集:', + 'config-mysql-binary' => '二进制', + 'config-mysql-utf8' => 'UTF-8', + 'config-mysql-charset-help' => "在'''二进制模式'''下,MediaWiki会将UTF-8编码的文本存于数据库的二进制字段中。相对于MySQL的UTF-8模式,这种方法效率更高,并允许您使用全范围的Unicode字符。 + +在'''UTF-8模式'''下,MySQL将知道您数据使用的字符集,并能适当地提供和转换内容。但这样做您将无法在数据库中存储[http://zh.wikipedia.org/wiki/基本多文种平面 基本多文种平面]以外的字符。", + 'config-site-name' => 'Wiki的名称:', + 'config-site-name-help' => '填入的内容会出现在浏览器的标题栏以及其他多处位置中。', + 'config-site-name-blank' => '输入网站的名称。', + 'config-project-namespace' => '项目名字空间:', + 'config-ns-generic' => '项目', + 'config-ns-site-name' => '与wiki名称相同:$1', + 'config-ns-other' => '其他(自定义)', + 'config-ns-other-default' => '我的Wiki', + 'config-project-namespace-help' => "依循维基百科形成的惯例,许多wiki将他们的方针页面存放在与内容页面不同的“'''项目名字空间'''”中。所有位于该名字空间下的页面标题都会被冠以固定的前缀,您可以在此处指定这一前缀。传统上,这一前缀应与wiki的命名保持一致,但请勿在其中使用标点符号,如“#”或“:”。", + 'config-ns-invalid' => '指定的名字空间“$1”无效,请为项目名字空间指定其他名称。', + 'config-admin-box' => '管理员帐号', + 'config-admin-name' => '您的名字:', + 'config-admin-password' => '密码:', + 'config-admin-password-confirm' => '确认密码:', + 'config-admin-help' => '在此输入您想使用的用户名,例如“乔帮主”。您将使用该名称登录本wiki。', + 'config-admin-name-blank' => '输入管理员的用户名。', + 'config-admin-name-invalid' => '指定的用户名“$1”无效,请指定其他用户名。', + 'config-admin-password-blank' => '输入管理员帐号的密码。', + 'config-admin-password-same' => '密码不能和用户名相同。', + 'config-admin-password-mismatch' => '两次输入的密码并不相同。', + 'config-admin-email' => '电子邮件地址:', + 'config-admin-email-help' => '在此输入电子邮件地址,这样您将可以收到本wiki上的其他用户发来的电子邮件,可以重置您的密码,并能在监视列表中的页面被更改时收到邮件通知。', + 'config-admin-error-user' => '在创建用户名为“$1”的管理员帐号时发生内部错误。', + 'config-admin-error-password' => '在为管理员“$1”设置密码时发生内部错误:
    $2
    ', + 'config-admin-error-bademail' => '您输入了无效的电子邮件地址。', + 'config-subscribe' => '订阅[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 发行公告邮件列表]。', + 'config-subscribe-help' => '此低流量的邮件列表仅用于发行公告,其中包括重要安全公告。请订阅该列表以便在新的版本推出时升级您的MediaWiki。', + 'config-almost-done' => '您几乎已经完成了!现在您可以跳过剩下的配置流程并立即安装wiki。', + 'config-optional-continue' => '多问我一些问题吧。', + 'config-optional-skip' => '我已经不耐烦了,赶紧安装我的wiki。', + 'config-profile' => '用户权限配置:', + 'config-profile-wiki' => '传统wiki', + 'config-profile-no-anon' => '需要注册帐号', + 'config-profile-fishbowl' => '编辑受限', + 'config-profile-private' => '非公开wiki', + 'config-profile-help' => "如果您允许尽量多的人编写wiki,网站上的内容会更加丰富。在MediaWiki中,您可以轻松地审查最近更改,并轻易回退掉新手或破坏者造成的损害。 + +然而,许多人觉得让MediaWiki存在多种角色将更加好用;同时,要说服所有人都愿以wiki的方式作贡献并非一件易事。因此,您可以有以下选择: + +'''{{int:config-profile-wiki}}'''允许包括未登录用户在内的所有人编辑。'''{{int:config-profile-no-anon}}'''的wiki需要额外的注册流程,这有可能会阻碍随意贡献者。 + +'''{{int:config-profile-fishbowl}}'''模式只允许获批准的用户编辑,但对公众开放页面浏览(包括历史记录)。'''{{int:config-profile-private}}'''则只允许获批准的用户浏览、编辑页面。 + +安装完成后,您还可以对用户权限进行更多、更复杂的配置,参见[http://www.mediawiki.org/wiki/Manual:User_rights 相关的使用手册]。", + 'config-license' => '版权和许可证:', + 'config-license-none' => '页脚无许可证', + 'config-license-cc-by-sa' => '知识共享署名-相同方式分享', + 'config-license-cc-by-nc-sa' => '知识共享署名-非商业性使用-相同方式共享', + 'config-license-gfdl-old' => 'GNU自由文档许可证 1.2', + 'config-license-gfdl-current' => 'GNU自由文档许可证 1.3或更高版本', + 'config-license-pd' => '公有领域', + 'config-license-cc-choose' => '选择自定义的知识共享许可证', + 'config-license-help' => "许多公共wiki会以[http://freedomdefined.org/Definition 自由许可证]的方式释放出编者的所有贡献。这有助于构建社区的主人翁意识,并能鼓励长期贡献。对于非公共wiki或公司wiki,这并非必要条件。 + +如果您希望使用来自维基百科的内容,并希望维基百科能接受复制自您的wiki的内容,请选择'''知识共享署名-相同方式共享'''。 + +GNU自由文档许可证是维基百科曾经使用过的许可证,并迄今有效。然而,该许可证的一些特性会增加重用或演绎内容的难度。", + 'config-email-settings' => '电子邮件设置', + 'config-enable-email' => '启用出站电子邮件', + 'config-enable-email-help' => '如果您希望使用电子邮件功能,请正确配置[http://www.php.net/manual/en/mail.configuration.php PHP的邮件设定]。如果您不需要任何电子邮件功能,请在此处禁用它。', + 'config-email-user' => '启用用户到用户的电子邮件', + 'config-email-user-help' => '允许所有用户互发邮件,假若他们启用了该功能。', + 'config-email-usertalk' => '启用用户讨论页通知', + 'config-email-usertalk-help' => '允许用户收到用户讨论页被修改的通知,假若他们启用了该功能。', + 'config-email-watchlist' => '启用监视列表通知', + 'config-email-watchlist-help' => '允许用户收到与其监视列表有关的通知,假若他们启用了该功能。', + 'config-email-auth' => '启用电子邮件身份验证', + 'config-email-auth-help' => "如果启用此选项,在用户设置或修改电子邮件地址时,就会收到一封邮件,内含确认电子地址的链接。只有经过身份验证的电子邮件地址,才能收到来自其他用户的电子邮件,或任何修改通知的邮件。'''建议'''公开wiki启用本选项,以防对电子邮件功能的滥用。", + 'config-email-sender' => '回复电子邮件地址:', + 'config-email-sender-help' => '输入要用来发送出站电子邮件的地址,该地址将会收到被拒收的邮件。许多邮件服务器要求域名部分必须有效。', + 'config-upload-settings' => '图像和文件上传', + 'config-upload-enable' => '启用文件上传', + 'config-upload-help' => '文件上传可能会将您的服务器暴露在安全风险下。有关更多的信息,请参阅手册的[http://www.mediawiki.org/wiki/Manual:Security 安全部分]。 + +要启用文件上传,请先将MediaWiki根目录下的images子目录更改为对web服务器可写,然后再启用此选项。', + 'config-upload-deleted' => '已删除文件的目录:', + 'config-upload-deleted-help' => '指定用于存放被删除文件的目录。理想情况下,该目录不应能通过web访问。', + 'config-logo' => '标志URL:', + 'config-logo-help' => '在MediaWiki的默认外观中,左上角部位有一块135x160像素的区域可用于展示站点的标志。请上传一幅相应大小的图像,并在此输入URL。 + +如果您不希望使用标志,请将本处留空。', + 'config-instantcommons' => '启用即时共享资源', + 'config-instantcommons-help' => '[http://www.mediawiki.org/wiki/InstantCommons 即时共享资源]可以让wiki使用来自[http://commons.wikimedia.org/ 维基共享资源]网站的图像、音频和其他媒体文件。要启用该功能,MediaWiki必须能够访问互联网。 + +有关此功能的详细信息,包括如何将其他wiki网站设为具有类似共享功能的方法,请参考[http://mediawiki.org/wiki/Manual:$wgForeignFileRepos 手册]。', + 'config-cc-error' => '知识共享许可证挑选器无法找到结果,请手动输入许可证的名称。', + 'config-cc-again' => '重新挑选……', + 'config-cc-not-chosen' => '选择您希望使用的知识共享许可证,并点击“继续”。', + 'config-advanced-settings' => '高级设置', + 'config-cache-options' => '对象缓存设置:', + 'config-cache-help' => '对象缓存可通过缓存频繁使用的数据来提高MediaWiki的速度。高度推荐中到大型的网站启用该功能,小型网站亦能从其中受益。', + 'config-cache-none' => '无缓存(不影响功能,但对较大型的wiki网站会有速度影响)', + 'config-cache-accel' => 'PHP对象缓存(APC、eAccelerator、XCache或WinCache)', + 'config-cache-memcached' => '使用Memcached(需要另外安装并配置)', + 'config-memcached-servers' => 'Memcached服务器:', + 'config-memcached-help' => '用于Memcached的IP地址列表。请以半角逗号分割,并指定要使用的端口(例如:127.0.0.1:11211, 192.168.1.25:11211)。', + 'config-extensions' => '扩展', + 'config-extensions-help' => '已在您的./extensions目录中发现下列扩展。 + +您可能要对它们进行额外的配置,但您现在可以启用它们。', + 'config-install-alreadydone' => "'''警告:'''您似乎已经安装了MediaWiki,并试图重新安装它。请前往下一个页面。", + 'config-install-begin' => '点击继续后,您将开始安装MediaWiki。如果您还想对配置作一些修改,请点击后退。', + 'config-install-step-done' => '完成', + 'config-install-step-failed' => '失败', + 'config-install-extensions' => '正在启用扩展', + 'config-install-database' => '正在配置数据库', + 'config-install-pg-schema-not-exist' => 'PostgreSQL 架构不存在', + 'config-install-pg-schema-failed' => '创建数据表失败。请确保用户“$1”拥有写入模式“$2”的权限。', + 'config-install-pg-commit' => '正在提交更改', + 'config-install-pg-plpgsql' => '正在检查PL/pgSQL语言', + 'config-pg-no-plpgsql' => '您需要为数据库$1安装PL/pgSQL语言', + 'config-pg-no-create-privs' => '为安装程序指定的帐号缺少创建帐号的权限。', + 'config-install-user' => '正在创建数据库用户', + 'config-install-user-grant-failed' => '授予用户“$1”权限失败:$2', + 'config-install-tables' => '正在创建数据表', + 'config-install-tables-exist' => "'''警告''':MediaWiki的数据表似乎已经存在,跳过创建。", + 'config-install-tables-failed' => "'''错误''':创建数据表出错,下为错误信息:$1", + 'config-install-interwiki' => '正在填充默认的跨wiki数据表', + 'config-install-interwiki-list' => '找不到文件interwiki.list。', + 'config-install-interwiki-exists' => "'''警告''':跨wiki数据表似乎已有内容,跳过默认列表。", + 'config-install-stats' => '初始化统计', + 'config-install-keys' => '正在生成密钥', + 'config-install-sysop' => '正在创建管理员用户帐号', + 'config-install-subscribe-fail' => '无法订阅mediawiki-announce', + 'config-install-mainpage' => '正在创建显示默认内容的首页', + 'config-install-extension-tables' => '正在为已启用扩展创建数据表', + 'config-install-mainpage-failed' => '无法插入首页:$1', + 'config-install-done' => "'''恭喜!''' +您已经成功地安装了MediaWiki。 + +安装程序已经生成了LocalSettings.php文件,其中包含了您所有的配置。 + +您需要下载该文件,并将其放在您wiki的根目录(index.php的同级目录)中。稍后下载将自动开始。 + +如果浏览器没有提示您下载,或者您取消了下载,您可以点击下面的链接重新开始下载: + +$3 + +'''注意''':如果您现在不完成本步骤,而是没有下载便退出了安装过程,此后您将无法获得自动生成的配置文件。 + +当本步骤完成后,您可以 '''[$2 进入您的wiki]'''。", + 'config-download-localsettings' => '下载LocalSettings.php', + 'config-help' => '帮助', +); + +/** Traditional Chinese (‪中文(繁體)‬) + * @author Mark85296341 + */ +$messages['zh-hant'] = array( + 'config-information' => '資訊', + 'config-your-language' => '您的語言:', + 'config-your-language-help' => '選擇一個要使用的語言在安裝過程中。', + 'config-wiki-language' => 'Wiki 語言:', + 'config-back' => '←返回', + 'config-continue' => '繼續→', + 'config-page-language' => '語言', + 'config-page-welcome' => '歡迎您來到 MediaWiki!', + 'config-page-dbconnect' => '連接到資料庫', + 'config-page-upgrade' => '升級現有的安裝', + 'config-page-dbsettings' => '資料庫設定', + 'config-page-name' => '名稱', + 'config-page-options' => '選項', + 'config-page-install' => '安裝', + 'config-page-complete' => '完成!', + 'config-page-restart' => '重新安裝', + 'config-page-readme' => '讀我', + 'config-page-copying' => '複製', + 'config-page-upgradedoc' => '升級', + 'config-restart' => '是的,重新啟動', + 'config-db-type' => '資料庫類型:', + 'config-db-host' => '資料庫主機:', + 'config-db-host-oracle' => '資料庫的 TNS:', + 'config-db-wiki-settings' => '識別這個 Wiki', + 'config-db-name' => '資料庫名稱:', + 'config-db-name-oracle' => '資料庫架構:', + 'config-db-username' => '資料庫使用者名稱:', + 'config-db-password' => '資料庫密碼:', + 'config-sqlite-dir' => 'SQLite 的資料目錄:', + 'config-header-mysql' => 'MySQL 的設定', + 'config-header-sqlite' => 'SQLite 的設定', + 'config-header-oracle' => '甲骨文設定', + 'config-invalid-db-type' => '無效的資料庫類型', + 'config-db-web-create' => '建立帳號,如果它不存在', + 'config-mysql-charset' => '資料庫字符集:', + 'config-mysql-utf8' => 'UTF-8', + 'config-site-name-blank' => '輸入站點名稱。', + 'config-ns-other' => '其他(請註明)', + 'config-admin-password' => '密碼:', + 'config-admin-password-confirm' => '再次輸入密碼:', + 'config-admin-name-blank' => '輸入管理員的使用者名稱。', + 'config-admin-password-blank' => '輸入管理員帳號密碼。', + 'config-admin-password-same' => '密碼不能與使用者名稱相同。', + 'config-admin-email' => 'E-mail 地址:', + 'config-admin-error-bademail' => '你輸入了一個無效的電子郵件地址。', + 'config-license' => '版權和許可證:', + 'config-license-pd' => '公共領域', + 'config-email-settings' => 'E-mail 設定', + 'config-email-auth' => '啟用電子郵件認證', + 'config-email-sender' => '返回電子郵件地址:', + 'config-upload-settings' => '圖片和檔案上傳', + 'config-upload-enable' => '啟用檔案上傳', + 'config-cc-again' => '重新選取......', + 'config-advanced-settings' => '進階配置', + 'config-extensions' => '擴充套件', + 'config-install-step-done' => '完成', + 'config-install-step-failed' => '失敗', + 'config-install-pg-commit' => '提交更改', + 'config-help' => '說明', +); + diff --git a/includes/installer/Installer.php b/includes/installer/Installer.php new file mode 100644 index 00000000..6da4f100 --- /dev/null +++ b/includes/installer/Installer.php @@ -0,0 +1,1511 @@ +Installer, + * and are also MediaWiki database types valid for $wgDBtype. + * + * To add a new type, create a Installer class and a Database + * class, and add a config-type- message to MessagesEn.php. + * + * @var array + */ + protected static $dbTypes = array( + 'mysql', + 'postgres', + 'oracle', + 'sqlite', + ); + + /** + * A list of environment check methods called by doEnvironmentChecks(). + * These may output warnings using showMessage(), and/or abort the + * installation process by returning false. + * + * @var array + */ + protected $envChecks = array( + 'envCheckDB', + 'envCheckRegisterGlobals', + 'envCheckBrokenXML', + 'envCheckPHP531', + 'envCheckMagicQuotes', + 'envCheckMagicSybase', + 'envCheckMbstring', + 'envCheckZE1', + 'envCheckSafeMode', + 'envCheckXML', + 'envCheckPCRE', + 'envCheckMemory', + 'envCheckCache', + 'envCheckDiff3', + 'envCheckGraphics', + 'envCheckPath', + 'envCheckExtension', + 'envCheckShellLocale', + 'envCheckUploadsDirectory', + 'envCheckLibicu', + 'envCheckSuhosinMaxValueLength', + ); + + /** + * MediaWiki configuration globals that will eventually be passed through + * to LocalSettings.php. The names only are given here, the defaults + * typically come from DefaultSettings.php. + * + * @var array + */ + protected $defaultVarNames = array( + 'wgSitename', + 'wgPasswordSender', + 'wgLanguageCode', + 'wgRightsIcon', + 'wgRightsText', + 'wgRightsUrl', + 'wgMainCacheType', + 'wgEnableEmail', + 'wgEnableUserEmail', + 'wgEnotifUserTalk', + 'wgEnotifWatchlist', + 'wgEmailAuthentication', + 'wgDBtype', + 'wgDiff3', + 'wgImageMagickConvertCommand', + 'IP', + 'wgScriptPath', + 'wgScriptExtension', + 'wgMetaNamespace', + 'wgDeletedDirectory', + 'wgEnableUploads', + 'wgLogo', + 'wgShellLocale', + 'wgSecretKey', + 'wgUseInstantCommons', + 'wgUpgradeKey', + 'wgDefaultSkin', + 'wgResourceLoaderMaxQueryLength', + ); + + /** + * Variables that are stored alongside globals, and are used for any + * configuration of the installation process aside from the MediaWiki + * configuration. Map of names to defaults. + * + * @var array + */ + protected $internalDefaults = array( + '_UserLang' => 'en', + '_Environment' => false, + '_CompiledDBs' => array(), + '_SafeMode' => false, + '_RaiseMemory' => false, + '_UpgradeDone' => false, + '_InstallDone' => false, + '_Caches' => array(), + '_InstallPassword' => '', + '_SameAccount' => true, + '_CreateDBAccount' => false, + '_NamespaceType' => 'site-name', + '_AdminName' => '', // will be set later, when the user selects language + '_AdminPassword' => '', + '_AdminPassword2' => '', + '_AdminEmail' => '', + '_Subscribe' => false, + '_SkipOptional' => 'continue', + '_RightsProfile' => 'wiki', + '_LicenseCode' => 'none', + '_CCDone' => false, + '_Extensions' => array(), + '_MemCachedServers' => '', + '_UpgradeKeySupplied' => false, + '_ExistingDBSettings' => false, + ); + + /** + * The actual list of installation steps. This will be initialized by getInstallSteps() + * + * @var array + */ + private $installSteps = array(); + + /** + * Extra steps for installation, for things like DatabaseInstallers to modify + * + * @var array + */ + protected $extraInstallSteps = array(); + + /** + * Known object cache types and the functions used to test for their existence. + * + * @var array + */ + protected $objectCaches = array( + 'xcache' => 'xcache_get', + 'apc' => 'apc_fetch', + 'eaccel' => 'eaccelerator_get', + 'wincache' => 'wincache_ucache_get' + ); + + /** + * User rights profiles. + * + * @var array + */ + public $rightsProfiles = array( + 'wiki' => array(), + 'no-anon' => array( + '*' => array( 'edit' => false ) + ), + 'fishbowl' => array( + '*' => array( + 'createaccount' => false, + 'edit' => false, + ), + ), + 'private' => array( + '*' => array( + 'createaccount' => false, + 'edit' => false, + 'read' => false, + ), + ), + ); + + /** + * License types. + * + * @var array + */ + public $licenses = array( + 'cc-by-sa' => array( + 'url' => 'http://creativecommons.org/licenses/by-sa/3.0/', + 'icon' => '{$wgStylePath}/common/images/cc-by-sa.png', + ), + 'cc-by-nc-sa' => array( + 'url' => 'http://creativecommons.org/licenses/by-nc-sa/3.0/', + 'icon' => '{$wgStylePath}/common/images/cc-by-nc-sa.png', + ), + 'cc-0' => array( + 'url' => 'https://creativecommons.org/publicdomain/zero/1.0/', + 'icon' => '{$wgStylePath}/common/images/cc-0.png', + ), + 'pd' => array( + 'url' => 'http://creativecommons.org/licenses/publicdomain/', + 'icon' => '{$wgStylePath}/common/images/public-domain.png', + ), + 'gfdl-old' => array( + 'url' => 'http://www.gnu.org/licenses/old-licenses/fdl-1.2.html', + 'icon' => '{$wgStylePath}/common/images/gnu-fdl.png', + ), + 'gfdl-current' => array( + 'url' => 'http://www.gnu.org/copyleft/fdl.html', + 'icon' => '{$wgStylePath}/common/images/gnu-fdl.png', + ), + 'none' => array( + 'url' => '', + 'icon' => '', + 'text' => '' + ), + 'cc-choose' => array( + // Details will be filled in by the selector. + 'url' => '', + 'icon' => '', + 'text' => '', + ), + ); + + /** + * URL to mediawiki-announce subscription + */ + protected $mediaWikiAnnounceUrl = 'https://lists.wikimedia.org/mailman/subscribe/mediawiki-announce'; + + /** + * Supported language codes for Mailman + */ + protected $mediaWikiAnnounceLanguages = array( + 'ca', 'cs', 'da', 'de', 'en', 'es', 'et', 'eu', 'fi', 'fr', 'hr', 'hu', + 'it', 'ja', 'ko', 'lt', 'nl', 'no', 'pl', 'pt', 'pt-br', 'ro', 'ru', + 'sl', 'sr', 'sv', 'tr', 'uk' + ); + + /** + * UI interface for displaying a short message + * The parameters are like parameters to wfMsg(). + * The messages will be in wikitext format, which will be converted to an + * output format such as HTML or text before being sent to the user. + */ + public abstract function showMessage( $msg /*, ... */ ); + + /** + * Same as showMessage(), but for displaying errors + */ + public abstract function showError( $msg /*, ... */ ); + + /** + * Show a message to the installing user by using a Status object + * @param $status Status + */ + public abstract function showStatusMessage( Status $status ); + + /** + * Constructor, always call this from child classes. + */ + public function __construct() { + global $wgExtensionMessagesFiles, $wgUser, $wgHooks; + + // Disable the i18n cache and LoadBalancer + Language::getLocalisationCache()->disableBackend(); + LBFactory::disableBackend(); + + // Load the installer's i18n file. + $wgExtensionMessagesFiles['MediawikiInstaller'] = + dirname( __FILE__ ) . '/Installer.i18n.php'; + + // Having a user with id = 0 safeguards us from DB access via User::loadOptions(). + $wgUser = User::newFromId( 0 ); + + $this->settings = $this->internalDefaults; + + foreach ( $this->defaultVarNames as $var ) { + $this->settings[$var] = $GLOBALS[$var]; + } + + foreach ( self::getDBTypes() as $type ) { + $installer = $this->getDBInstaller( $type ); + + if ( !$installer->isCompiled() ) { + continue; + } + + $defaults = $installer->getGlobalDefaults(); + + foreach ( $installer->getGlobalNames() as $var ) { + if ( isset( $defaults[$var] ) ) { + $this->settings[$var] = $defaults[$var]; + } else { + $this->settings[$var] = $GLOBALS[$var]; + } + } + } + + $this->parserTitle = Title::newFromText( 'Installer' ); + $this->parserOptions = new ParserOptions; // language will be wrong :( + $this->parserOptions->setEditSection( false ); + } + + /** + * Get a list of known DB types. + */ + public static function getDBTypes() { + return self::$dbTypes; + } + + /** + * Do initial checks of the PHP environment. Set variables according to + * the observed environment. + * + * It's possible that this may be called under the CLI SAPI, not the SAPI + * that the wiki will primarily run under. In that case, the subclass should + * initialise variables such as wgScriptPath, before calling this function. + * + * Under the web subclass, it can already be assumed that PHP 5+ is in use + * and that sessions are working. + * + * @return Status + */ + public function doEnvironmentChecks() { + $phpVersion = phpversion(); + if( version_compare( $phpVersion, self::MINIMUM_PHP_VERSION, '>=' ) ) { + $this->showMessage( 'config-env-php', $phpVersion ); + $good = true; + } else { + $this->showMessage( 'config-env-php-toolow', $phpVersion, self::MINIMUM_PHP_VERSION ); + $good = false; + } + + if( $good ) { + foreach ( $this->envChecks as $check ) { + $status = $this->$check(); + if ( $status === false ) { + $good = false; + } + } + } + + $this->setVar( '_Environment', $good ); + + return $good ? Status::newGood() : Status::newFatal( 'config-env-bad' ); + } + + /** + * Set a MW configuration variable, or internal installer configuration variable. + * + * @param $name String + * @param $value Mixed + */ + public function setVar( $name, $value ) { + $this->settings[$name] = $value; + } + + /** + * Get an MW configuration variable, or internal installer configuration variable. + * The defaults come from $GLOBALS (ultimately DefaultSettings.php). + * Installer variables are typically prefixed by an underscore. + * + * @param $name String + * @param $default Mixed + * + * @return mixed + */ + public function getVar( $name, $default = null ) { + if ( !isset( $this->settings[$name] ) ) { + return $default; + } else { + return $this->settings[$name]; + } + } + + /** + * Get an instance of DatabaseInstaller for the specified DB type. + * + * @param $type Mixed: DB installer for which is needed, false to use default. + * + * @return DatabaseInstaller + */ + public function getDBInstaller( $type = false ) { + if ( !$type ) { + $type = $this->getVar( 'wgDBtype' ); + } + + $type = strtolower( $type ); + + if ( !isset( $this->dbInstallers[$type] ) ) { + $class = ucfirst( $type ). 'Installer'; + $this->dbInstallers[$type] = new $class( $this ); + } + + return $this->dbInstallers[$type]; + } + + /** + * Determine if LocalSettings.php exists. If it does, return its variables, + * merged with those from AdminSettings.php, as an array. + * + * @return Array + */ + public static function getExistingLocalSettings() { + global $IP; + + wfSuppressWarnings(); + $_lsExists = file_exists( "$IP/LocalSettings.php" ); + wfRestoreWarnings(); + + if( !$_lsExists ) { + return false; + } + unset($_lsExists); + + require( "$IP/includes/DefaultSettings.php" ); + require( "$IP/LocalSettings.php" ); + if ( file_exists( "$IP/AdminSettings.php" ) ) { + require( "$IP/AdminSettings.php" ); + } + return get_defined_vars(); + } + + /** + * Get a fake password for sending back to the user in HTML. + * This is a security mechanism to avoid compromise of the password in the + * event of session ID compromise. + * + * @param $realPassword String + * + * @return string + */ + public function getFakePassword( $realPassword ) { + return str_repeat( '*', strlen( $realPassword ) ); + } + + /** + * Set a variable which stores a password, except if the new value is a + * fake password in which case leave it as it is. + * + * @param $name String + * @param $value Mixed + */ + public function setPassword( $name, $value ) { + if ( !preg_match( '/^\*+$/', $value ) ) { + $this->setVar( $name, $value ); + } + } + + /** + * On POSIX systems return the primary group of the webserver we're running under. + * On other systems just returns null. + * + * This is used to advice the user that he should chgrp his mw-config/data/images directory as the + * webserver user before he can install. + * + * Public because SqliteInstaller needs it, and doesn't subclass Installer. + * + * @return mixed + */ + public static function maybeGetWebserverPrimaryGroup() { + if ( !function_exists( 'posix_getegid' ) || !function_exists( 'posix_getpwuid' ) ) { + # I don't know this, this isn't UNIX. + return null; + } + + # posix_getegid() *not* getmygid() because we want the group of the webserver, + # not whoever owns the current script. + $gid = posix_getegid(); + $getpwuid = posix_getpwuid( $gid ); + $group = $getpwuid['name']; + + return $group; + } + + /** + * Convert wikitext $text to HTML. + * + * This is potentially error prone since many parser features require a complete + * installed MW database. The solution is to just not use those features when you + * write your messages. This appears to work well enough. Basic formatting and + * external links work just fine. + * + * But in case a translator decides to throw in a #ifexist or internal link or + * whatever, this function is guarded to catch the attempted DB access and to present + * some fallback text. + * + * @param $text String + * @param $lineStart Boolean + * @return String + */ + public function parse( $text, $lineStart = false ) { + global $wgParser; + + try { + $out = $wgParser->parse( $text, $this->parserTitle, $this->parserOptions, $lineStart ); + $html = $out->getText(); + } catch ( DBAccessError $e ) { + $html = ' ' . htmlspecialchars( $text ); + + if ( !empty( $this->debug ) ) { + $html .= ""; + } + } + + return $html; + } + + public function getParserOptions() { + return $this->parserOptions; + } + + public function disableLinkPopups() { + $this->parserOptions->setExternalLinkTarget( false ); + } + + public function restoreLinkPopups() { + global $wgExternalLinkTarget; + $this->parserOptions->setExternalLinkTarget( $wgExternalLinkTarget ); + } + + /** + * Install step which adds a row to the site_stats table with appropriate + * initial values. + */ + public function populateSiteStats( DatabaseInstaller $installer ) { + $status = $installer->getConnection(); + if ( !$status->isOK() ) { + return $status; + } + $status->value->insert( 'site_stats', array( + 'ss_row_id' => 1, + 'ss_total_views' => 0, + 'ss_total_edits' => 0, + 'ss_good_articles' => 0, + 'ss_total_pages' => 0, + 'ss_users' => 0, + 'ss_admins' => 0, + 'ss_images' => 0 ), + __METHOD__, 'IGNORE' ); + return Status::newGood(); + } + + /** + * Exports all wg* variables stored by the installer into global scope. + */ + public function exportVars() { + foreach ( $this->settings as $name => $value ) { + if ( substr( $name, 0, 2 ) == 'wg' ) { + $GLOBALS[$name] = $value; + } + } + } + + /** + * Environment check for DB types. + */ + protected function envCheckDB() { + global $wgLang; + + $compiledDBs = array(); + $allNames = array(); + + foreach ( self::getDBTypes() as $name ) { + $db = $this->getDBInstaller( $name ); + $readableName = wfMsg( 'config-type-' . $name ); + + if ( $db->isCompiled() ) { + $compiledDBs[] = $name; + } + $allNames[] = $readableName; + } + + $this->setVar( '_CompiledDBs', $compiledDBs ); + + if ( !$compiledDBs ) { + $this->showError( 'config-no-db', $wgLang->commaList( $allNames ) ); + // FIXME: this only works for the web installer! + return false; + } + + // Check for FTS3 full-text search module + $sqlite = $this->getDBInstaller( 'sqlite' ); + if ( $sqlite->isCompiled() ) { + if( DatabaseSqlite::getFulltextSearchModule() != 'FTS3' ) { + $this->showMessage( 'config-no-fts3' ); + } + } + } + + /** + * Environment check for register_globals. + */ + protected function envCheckRegisterGlobals() { + if( wfIniGetBool( "magic_quotes_runtime" ) ) { + $this->showMessage( 'config-register-globals' ); + } + } + + /** + * Some versions of libxml+PHP break < and > encoding horribly + */ + protected function envCheckBrokenXML() { + $test = new PhpXmlBugTester(); + if ( !$test->ok ) { + $this->showError( 'config-brokenlibxml' ); + return false; + } + } + + /** + * Test PHP (probably 5.3.1, but it could regress again) to make sure that + * reference parameters to __call() are not converted to null + */ + protected function envCheckPHP531() { + $test = new PhpRefCallBugTester; + $test->execute(); + if ( !$test->ok ) { + $this->showError( 'config-using531', phpversion() ); + return false; + } + } + + /** + * Environment check for magic_quotes_runtime. + */ + protected function envCheckMagicQuotes() { + if( wfIniGetBool( "magic_quotes_runtime" ) ) { + $this->showError( 'config-magic-quotes-runtime' ); + return false; + } + } + + /** + * Environment check for magic_quotes_sybase. + */ + protected function envCheckMagicSybase() { + if ( wfIniGetBool( 'magic_quotes_sybase' ) ) { + $this->showError( 'config-magic-quotes-sybase' ); + return false; + } + } + + /** + * Environment check for mbstring.func_overload. + */ + protected function envCheckMbstring() { + if ( wfIniGetBool( 'mbstring.func_overload' ) ) { + $this->showError( 'config-mbstring' ); + return false; + } + } + + /** + * Environment check for zend.ze1_compatibility_mode. + */ + protected function envCheckZE1() { + if ( wfIniGetBool( 'zend.ze1_compatibility_mode' ) ) { + $this->showError( 'config-ze1' ); + return false; + } + } + + /** + * Environment check for safe_mode. + */ + protected function envCheckSafeMode() { + if ( wfIniGetBool( 'safe_mode' ) ) { + $this->setVar( '_SafeMode', true ); + $this->showMessage( 'config-safe-mode' ); + } + } + + /** + * Environment check for the XML module. + */ + protected function envCheckXML() { + if ( !function_exists( "utf8_encode" ) ) { + $this->showError( 'config-xml-bad' ); + return false; + } + } + + /** + * Environment check for the PCRE module. + */ + protected function envCheckPCRE() { + if ( !function_exists( 'preg_match' ) ) { + $this->showError( 'config-pcre' ); + return false; + } + wfSuppressWarnings(); + $regexd = preg_replace( '/[\x{0430}-\x{04FF}]/iu', '', '-АБВГД-' ); + wfRestoreWarnings(); + if ( $regexd != '--' ) { + $this->showError( 'config-pcre-no-utf8' ); + return false; + } + } + + /** + * Environment check for available memory. + */ + protected function envCheckMemory() { + $limit = ini_get( 'memory_limit' ); + + if ( !$limit || $limit == -1 ) { + return true; + } + + $n = wfShorthandToInteger( $limit ); + + if( $n < $this->minMemorySize * 1024 * 1024 ) { + $newLimit = "{$this->minMemorySize}M"; + + if( ini_set( "memory_limit", $newLimit ) === false ) { + $this->showMessage( 'config-memory-bad', $limit ); + } else { + $this->showMessage( 'config-memory-raised', $limit, $newLimit ); + $this->setVar( '_RaiseMemory', true ); + } + } else { + return true; + } + } + + /** + * Environment check for compiled object cache types. + */ + protected function envCheckCache() { + $caches = array(); + foreach ( $this->objectCaches as $name => $function ) { + if ( function_exists( $function ) ) { + $caches[$name] = true; + } + } + + if ( !$caches ) { + $this->showMessage( 'config-no-cache' ); + } + + $this->setVar( '_Caches', $caches ); + } + + /** + * Search for GNU diff3. + */ + protected function envCheckDiff3() { + $names = array( "gdiff3", "diff3", "diff3.exe" ); + $versionInfo = array( '$1 --version 2>&1', 'GNU diffutils' ); + + $diff3 = self::locateExecutableInDefaultPaths( $names, $versionInfo ); + + if ( $diff3 ) { + $this->setVar( 'wgDiff3', $diff3 ); + } else { + $this->setVar( 'wgDiff3', false ); + $this->showMessage( 'config-diff3-bad' ); + } + } + + /** + * Environment check for ImageMagick and GD. + */ + protected function envCheckGraphics() { + $names = array( wfIsWindows() ? 'convert.exe' : 'convert' ); + $convert = self::locateExecutableInDefaultPaths( $names, array( '$1 -version', 'ImageMagick' ) ); + + $this->setVar( 'wgImageMagickConvertCommand', '' ); + if ( $convert ) { + $this->setVar( 'wgImageMagickConvertCommand', $convert ); + $this->showMessage( 'config-imagemagick', $convert ); + return true; + } elseif ( function_exists( 'imagejpeg' ) ) { + $this->showMessage( 'config-gd' ); + return true; + } else { + $this->showMessage( 'config-no-scaling' ); + } + } + + /** + * Environment check for setting $IP and $wgScriptPath. + */ + protected function envCheckPath() { + global $IP; + $IP = dirname( dirname( dirname( __FILE__ ) ) ); + + $this->setVar( 'IP', $IP ); + + // PHP_SELF isn't available sometimes, such as when PHP is CGI but + // cgi.fix_pathinfo is disabled. In that case, fall back to SCRIPT_NAME + // to get the path to the current script... hopefully it's reliable. SIGH + if ( !empty( $_SERVER['PHP_SELF'] ) ) { + $path = $_SERVER['PHP_SELF']; + } elseif ( !empty( $_SERVER['SCRIPT_NAME'] ) ) { + $path = $_SERVER['SCRIPT_NAME']; + } elseif ( $this->getVar( 'wgScriptPath' ) ) { + // Some kind soul has set it for us already (e.g. debconf) + return true; + } else { + $this->showError( 'config-no-uri' ); + return false; + } + + $uri = preg_replace( '{^(.*)/(mw-)?config.*$}', '$1', $path ); + $this->setVar( 'wgScriptPath', $uri ); + } + + /** + * Environment check for setting the preferred PHP file extension. + */ + protected function envCheckExtension() { + // FIXME: detect this properly + if ( defined( 'MW_INSTALL_PHP5_EXT' ) ) { + $ext = 'php5'; + } else { + $ext = 'php'; + } + $this->setVar( 'wgScriptExtension', ".$ext" ); + } + + /** + * TODO: document + */ + protected function envCheckShellLocale() { + $os = php_uname( 's' ); + $supported = array( 'Linux', 'SunOS', 'HP-UX', 'Darwin' ); # Tested these + + if ( !in_array( $os, $supported ) ) { + return true; + } + + # Get a list of available locales. + $ret = false; + $lines = wfShellExec( '/usr/bin/locale -a', $ret ); + + if ( $ret ) { + return true; + } + + $lines = wfArrayMap( 'trim', explode( "\n", $lines ) ); + $candidatesByLocale = array(); + $candidatesByLang = array(); + + foreach ( $lines as $line ) { + if ( $line === '' ) { + continue; + } + + if ( !preg_match( '/^([a-zA-Z]+)(_[a-zA-Z]+|)\.(utf8|UTF-8)(@[a-zA-Z_]*|)$/i', $line, $m ) ) { + continue; + } + + list( $all, $lang, $territory, $charset, $modifier ) = $m; + + $candidatesByLocale[$m[0]] = $m; + $candidatesByLang[$lang][] = $m; + } + + # Try the current value of LANG. + if ( isset( $candidatesByLocale[ getenv( 'LANG' ) ] ) ) { + $this->setVar( 'wgShellLocale', getenv( 'LANG' ) ); + return true; + } + + # Try the most common ones. + $commonLocales = array( 'en_US.UTF-8', 'en_US.utf8', 'de_DE.UTF-8', 'de_DE.utf8' ); + foreach ( $commonLocales as $commonLocale ) { + if ( isset( $candidatesByLocale[$commonLocale] ) ) { + $this->setVar( 'wgShellLocale', $commonLocale ); + return true; + } + } + + # Is there an available locale in the Wiki's language? + $wikiLang = $this->getVar( 'wgLanguageCode' ); + + if ( isset( $candidatesByLang[$wikiLang] ) ) { + $m = reset( $candidatesByLang[$wikiLang] ); + $this->setVar( 'wgShellLocale', $m[0] ); + return true; + } + + # Are there any at all? + if ( count( $candidatesByLocale ) ) { + $m = reset( $candidatesByLocale ); + $this->setVar( 'wgShellLocale', $m[0] ); + return true; + } + + # Give up. + return true; + } + + /** + * TODO: document + */ + protected function envCheckUploadsDirectory() { + global $IP, $wgServer; + + $dir = $IP . '/images/'; + $url = $wgServer . $this->getVar( 'wgScriptPath' ) . '/images/'; + $safe = !$this->dirIsExecutable( $dir, $url ); + + if ( $safe ) { + return true; + } else { + $this->showMessage( 'config-uploads-not-safe', $dir ); + } + } + + /** + * Checks if suhosin.get.max_value_length is set, and if so, sets + * $wgResourceLoaderMaxQueryLength to that value in the generated + * LocalSettings file + */ + protected function envCheckSuhosinMaxValueLength() { + $maxValueLength = ini_get( 'suhosin.get.max_value_length' ); + if ( $maxValueLength > 0 ) { + $this->showMessage( 'config-suhosin-max-value-length', $maxValueLength ); + } else { + $maxValueLength = -1; + } + $this->setVar( 'wgResourceLoaderMaxQueryLength', $maxValueLength ); + } + + /** + * Convert a hex string representing a Unicode code point to that code point. + * @param $c String + * @return string + */ + protected function unicodeChar( $c ) { + $c = hexdec($c); + if ($c <= 0x7F) { + return chr($c); + } else if ($c <= 0x7FF) { + return chr(0xC0 | $c >> 6) . chr(0x80 | $c & 0x3F); + } else if ($c <= 0xFFFF) { + return chr(0xE0 | $c >> 12) . chr(0x80 | $c >> 6 & 0x3F) + . chr(0x80 | $c & 0x3F); + } else if ($c <= 0x10FFFF) { + return chr(0xF0 | $c >> 18) . chr(0x80 | $c >> 12 & 0x3F) + . chr(0x80 | $c >> 6 & 0x3F) + . chr(0x80 | $c & 0x3F); + } else { + return false; + } + } + + + /** + * Check the libicu version + */ + protected function envCheckLibicu() { + $utf8 = function_exists( 'utf8_normalize' ); + $intl = function_exists( 'normalizer_normalize' ); + + /** + * This needs to be updated something that the latest libicu + * will properly normalize. This normalization was found at + * http://www.unicode.org/versions/Unicode5.2.0/#Character_Additions + * Note that we use the hex representation to create the code + * points in order to avoid any Unicode-destroying during transit. + */ + $not_normal_c = $this->unicodeChar("FA6C"); + $normal_c = $this->unicodeChar("242EE"); + + $useNormalizer = 'php'; + $needsUpdate = false; + + /** + * We're going to prefer the pecl extension here unless + * utf8_normalize is more up to date. + */ + if( $utf8 ) { + $useNormalizer = 'utf8'; + $utf8 = utf8_normalize( $not_normal_c, UNORM_NFC ); + if ( $utf8 !== $normal_c ) $needsUpdate = true; + } + if( $intl ) { + $useNormalizer = 'intl'; + $intl = normalizer_normalize( $not_normal_c, Normalizer::FORM_C ); + if ( $intl !== $normal_c ) $needsUpdate = true; + } + + // Uses messages 'config-unicode-using-php', 'config-unicode-using-utf8', 'config-unicode-using-intl' + if( $useNormalizer === 'php' ) { + $this->showMessage( 'config-unicode-pure-php-warning' ); + } else { + $this->showMessage( 'config-unicode-using-' . $useNormalizer ); + if( $needsUpdate ) { + $this->showMessage( 'config-unicode-update-warning' ); + } + } + } + + /** + * Get an array of likely places we can find executables. Check a bunch + * of known Unix-like defaults, as well as the PATH environment variable + * (which should maybe make it work for Windows?) + * + * @return Array + */ + protected static function getPossibleBinPaths() { + return array_merge( + array( '/usr/bin', '/usr/local/bin', '/opt/csw/bin', + '/usr/gnu/bin', '/usr/sfw/bin', '/sw/bin', '/opt/local/bin' ), + explode( PATH_SEPARATOR, getenv( 'PATH' ) ) + ); + } + + /** + * Search a path for any of the given executable names. Returns the + * executable name if found. Also checks the version string returned + * by each executable. + * + * Used only by environment checks. + * + * @param $path String: path to search + * @param $names Array of executable names + * @param $versionInfo Boolean false or array with two members: + * 0 => Command to run for version check, with $1 for the full executable name + * 1 => String to compare the output with + * + * If $versionInfo is not false, only executables with a version + * matching $versionInfo[1] will be returned. + */ + public static function locateExecutable( $path, $names, $versionInfo = false ) { + if ( !is_array( $names ) ) { + $names = array( $names ); + } + + foreach ( $names as $name ) { + $command = $path . DIRECTORY_SEPARATOR . $name; + + wfSuppressWarnings(); + $file_exists = file_exists( $command ); + wfRestoreWarnings(); + + if ( $file_exists ) { + if ( !$versionInfo ) { + return $command; + } + + $file = str_replace( '$1', wfEscapeShellArg( $command ), $versionInfo[0] ); + if ( strstr( wfShellExec( $file ), $versionInfo[1] ) !== false ) { + return $command; + } + } + } + return false; + } + + /** + * Same as locateExecutable(), but checks in getPossibleBinPaths() by default + * @see locateExecutable() + */ + public static function locateExecutableInDefaultPaths( $names, $versionInfo = false ) { + foreach( self::getPossibleBinPaths() as $path ) { + $exe = self::locateExecutable( $path, $names, $versionInfo ); + if( $exe !== false ) { + return $exe; + } + } + return false; + } + + /** + * Checks if scripts located in the given directory can be executed via the given URL. + * + * Used only by environment checks. + */ + public function dirIsExecutable( $dir, $url ) { + $scriptTypes = array( + 'php' => array( + " $contents ) { + foreach ( $contents as $source ) { + $file = 'exectest.' . $ext; + + if ( !file_put_contents( $dir . $file, $source ) ) { + break; + } + + try { + $text = Http::get( $url . $file, array( 'timeout' => 3 ) ); + } + catch( MWException $e ) { + // Http::get throws with allow_url_fopen = false and no curl extension. + $text = null; + } + unlink( $dir . $file ); + + if ( $text == 'exec' ) { + wfRestoreWarnings(); + return $ext; + } + } + } + + wfRestoreWarnings(); + + return false; + } + + /** + * ParserOptions are constructed before we determined the language, so fix it + */ + public function setParserLanguage( $lang ) { + $this->parserOptions->setTargetLanguage( $lang ); + $this->parserOptions->setUserLang( $lang->getCode() ); + } + + /** + * Overridden by WebInstaller to provide lastPage parameters. + */ + protected function getDocUrl( $page ) { + return "{$_SERVER['PHP_SELF']}?page=" . urlencode( $page ); + } + + /** + * Finds extensions that follow the format /extensions/Name/Name.php, + * and returns an array containing the value for 'Name' for each found extension. + * + * @return array + */ + public function findExtensions() { + if( $this->getVar( 'IP' ) === null ) { + return false; + } + + $exts = array(); + $dir = $this->getVar( 'IP' ) . '/extensions'; + $dh = opendir( $dir ); + + while ( ( $file = readdir( $dh ) ) !== false ) { + if( file_exists( "$dir/$file/$file.php" ) ) { + $exts[] = $file; + } + } + + return $exts; + } + + /** + * Installs the auto-detected extensions. + * + * @return Status + */ + protected function includeExtensions() { + global $IP; + $exts = $this->getVar( '_Extensions' ); + $IP = $this->getVar( 'IP' ); + + /** + * We need to include DefaultSettings before including extensions to avoid + * warnings about unset variables. However, the only thing we really + * want here is $wgHooks['LoadExtensionSchemaUpdates']. This won't work + * if the extension has hidden hook registration in $wgExtensionFunctions, + * but we're not opening that can of worms + * @see https://bugzilla.wikimedia.org/show_bug.cgi?id=26857 + */ + global $wgAutoloadClasses; + require( "$IP/includes/DefaultSettings.php" ); + + foreach( $exts as $e ) { + require_once( $IP . '/extensions' . "/$e/$e.php" ); + } + + $hooksWeWant = isset( $wgHooks['LoadExtensionSchemaUpdates'] ) ? + $wgHooks['LoadExtensionSchemaUpdates'] : array(); + + // Unset everyone else's hooks. Lord knows what someone might be doing + // in ParserFirstCallInit (see bug 27171) + $GLOBALS['wgHooks'] = array( 'LoadExtensionSchemaUpdates' => $hooksWeWant ); + + return Status::newGood(); + } + + /** + * Get an array of install steps. Should always be in the format of + * array( + * 'name' => 'someuniquename', + * 'callback' => array( $obj, 'method' ), + * ) + * There must be a config-install-$name message defined per step, which will + * be shown on install. + * + * @param $installer DatabaseInstaller so we can make callbacks + * @return array + */ + protected function getInstallSteps( DatabaseInstaller $installer ) { + $coreInstallSteps = array( + array( 'name' => 'database', 'callback' => array( $installer, 'setupDatabase' ) ), + array( 'name' => 'tables', 'callback' => array( $installer, 'createTables' ) ), + array( 'name' => 'interwiki', 'callback' => array( $installer, 'populateInterwikiTable' ) ), + array( 'name' => 'stats', 'callback' => array( $this, 'populateSiteStats' ) ), + array( 'name' => 'keys', 'callback' => array( $this, 'generateKeys' ) ), + array( 'name' => 'sysop', 'callback' => array( $this, 'createSysop' ) ), + array( 'name' => 'mainpage', 'callback' => array( $this, 'createMainpage' ) ), + ); + + // Build the array of install steps starting from the core install list, + // then adding any callbacks that wanted to attach after a given step + foreach( $coreInstallSteps as $step ) { + $this->installSteps[] = $step; + if( isset( $this->extraInstallSteps[ $step['name'] ] ) ) { + $this->installSteps = array_merge( + $this->installSteps, + $this->extraInstallSteps[ $step['name'] ] + ); + } + } + + // Prepend any steps that want to be at the beginning + if( isset( $this->extraInstallSteps['BEGINNING'] ) ) { + $this->installSteps = array_merge( + $this->extraInstallSteps['BEGINNING'], + $this->installSteps + ); + } + + // Extensions should always go first, chance to tie into hooks and such + if( count( $this->getVar( '_Extensions' ) ) ) { + array_unshift( $this->installSteps, + array( 'name' => 'extensions', 'callback' => array( $this, 'includeExtensions' ) ) + ); + $this->installSteps[] = array( + 'name' => 'extension-tables', + 'callback' => array( $installer, 'createExtensionTables' ) + ); + } + return $this->installSteps; + } + + /** + * Actually perform the installation. + * + * @param $startCB Array A callback array for the beginning of each step + * @param $endCB Array A callback array for the end of each step + * + * @return Array of Status objects + */ + public function performInstallation( $startCB, $endCB ) { + $installResults = array(); + $installer = $this->getDBInstaller(); + $installer->preInstall(); + $steps = $this->getInstallSteps( $installer ); + foreach( $steps as $stepObj ) { + $name = $stepObj['name']; + call_user_func_array( $startCB, array( $name ) ); + + // Perform the callback step + $status = call_user_func( $stepObj['callback'], $installer ); + + // Output and save the results + call_user_func( $endCB, $name, $status ); + $installResults[$name] = $status; + + // If we've hit some sort of fatal, we need to bail. + // Callback already had a chance to do output above. + if( !$status->isOk() ) { + break; + } + } + if( $status->isOk() ) { + $this->setVar( '_InstallDone', true ); + } + return $installResults; + } + + /** + * Generate $wgSecretKey. Will warn if we had to use mt_rand() instead of + * /dev/urandom + * + * @return Status + */ + public function generateKeys() { + $keys = array( 'wgSecretKey' => 64 ); + if ( strval( $this->getVar( 'wgUpgradeKey' ) ) === '' ) { + $keys['wgUpgradeKey'] = 16; + } + return $this->doGenerateKeys( $keys ); + } + + /** + * Generate a secret value for variables using either + * /dev/urandom or mt_rand(). Produce a warning in the later case. + * + * @param $keys Array + * @return Status + */ + protected function doGenerateKeys( $keys ) { + $status = Status::newGood(); + + wfSuppressWarnings(); + $file = fopen( "/dev/urandom", "r" ); + wfRestoreWarnings(); + + foreach ( $keys as $name => $length ) { + if ( $file ) { + $secretKey = bin2hex( fread( $file, $length / 2 ) ); + } else { + $secretKey = ''; + + for ( $i = 0; $i < $length / 8; $i++ ) { + $secretKey .= dechex( mt_rand( 0, 0x7fffffff ) ); + } + } + + $this->setVar( $name, $secretKey ); + } + + if ( $file ) { + fclose( $file ); + } else { + $names = array_keys ( $keys ); + $names = preg_replace( '/^(.*)$/', '\$$1', $names ); + global $wgLang; + $status->warning( 'config-insecure-keys', $wgLang->listToText( $names ), count( $names ) ); + } + + return $status; + } + + /** + * Create the first user account, grant it sysop and bureaucrat rights + * + * @return Status + */ + protected function createSysop() { + $name = $this->getVar( '_AdminName' ); + $user = User::newFromName( $name ); + + if ( !$user ) { + // We should've validated this earlier anyway! + return Status::newFatal( 'config-admin-error-user', $name ); + } + + if ( $user->idForName() == 0 ) { + $user->addToDatabase(); + + try { + $user->setPassword( $this->getVar( '_AdminPassword' ) ); + } catch( PasswordError $pwe ) { + return Status::newFatal( 'config-admin-error-password', $name, $pwe->getMessage() ); + } + + $user->addGroup( 'sysop' ); + $user->addGroup( 'bureaucrat' ); + if( $this->getVar( '_AdminEmail' ) ) { + $user->setEmail( $this->getVar( '_AdminEmail' ) ); + } + $user->saveSettings(); + + // Update user count + $ssUpdate = new SiteStatsUpdate( 0, 0, 0, 0, 1 ); + $ssUpdate->doUpdate(); + } + $status = Status::newGood(); + + if( $this->getVar( '_Subscribe' ) && $this->getVar( '_AdminEmail' ) ) { + $this->subscribeToMediaWikiAnnounce( $status ); + } + + return $status; + } + + private function subscribeToMediaWikiAnnounce( Status $s ) { + $params = array( + 'email' => $this->getVar( '_AdminEmail' ), + 'language' => 'en', + 'digest' => 0 + ); + + // Mailman doesn't support as many languages as we do, so check to make + // sure their selected language is available + $myLang = $this->getVar( '_UserLang' ); + if( in_array( $myLang, $this->mediaWikiAnnounceLanguages ) ) { + $myLang = $myLang == 'pt-br' ? 'pt_BR' : $myLang; // rewrite to Mailman's pt_BR + $params['language'] = $myLang; + } + + $res = MWHttpRequest::factory( $this->mediaWikiAnnounceUrl, + array( 'method' => 'POST', 'postData' => $params ) )->execute(); + if( !$res->isOK() ) { + $s->warning( 'config-install-subscribe-fail', $res->getMessage() ); + } + } + + /** + * Insert Main Page with default content. + * + * @return Status + */ + protected function createMainpage( DatabaseInstaller $installer ) { + $status = Status::newGood(); + try { + $article = new Article( Title::newMainPage() ); + $article->doEdit( wfMsgForContent( 'mainpagetext' ) . "\n\n" . + wfMsgForContent( 'mainpagedocfooter' ), + '', + EDIT_NEW, + false, + User::newFromName( 'MediaWiki default' ) ); + } catch (MWException $e) { + //using raw, because $wgShowExceptionDetails can not be set yet + $status->fatal( 'config-install-mainpage-failed', $e->getMessage() ); + } + + return $status; + } + + /** + * Override the necessary bits of the config to run an installation. + */ + public static function overrideConfig() { + define( 'MW_NO_SESSION', 1 ); + + // Don't access the database + $GLOBALS['wgUseDatabaseMessages'] = false; + // Debug-friendly + $GLOBALS['wgShowExceptionDetails'] = true; + // Don't break forms + $GLOBALS['wgExternalLinkTarget'] = '_blank'; + + // Extended debugging + $GLOBALS['wgShowSQLErrors'] = true; + $GLOBALS['wgShowDBErrorBacktrace'] = true; + + // Allow multiple ob_flush() calls + $GLOBALS['wgDisableOutputCompression'] = true; + + // Use a sensible cookie prefix (not my_wiki) + $GLOBALS['wgCookiePrefix'] = 'mw_installer'; + + // Some of the environment checks make shell requests, remove limits + $GLOBALS['wgMaxShellMemory'] = 0; + } + + /** + * Add an installation step following the given step. + * + * @param $callback Array A valid installation callback array, in this form: + * array( 'name' => 'some-unique-name', 'callback' => array( $obj, 'function' ) ); + * @param $findStep String the step to find. Omit to put the step at the beginning + */ + public function addInstallStep( $callback, $findStep = 'BEGINNING' ) { + $this->extraInstallSteps[$findStep][] = $callback; + } +} diff --git a/includes/installer/LocalSettingsGenerator.php b/includes/installer/LocalSettingsGenerator.php new file mode 100644 index 00000000..04926c9b --- /dev/null +++ b/includes/installer/LocalSettingsGenerator.php @@ -0,0 +1,349 @@ +installer = $installer; + + $this->extensions = $installer->getVar( '_Extensions' ); + + $db = $installer->getDBInstaller( $installer->getVar( 'wgDBtype' ) ); + + $confItems = array_merge( + array( + 'wgScriptPath', 'wgScriptExtension', + 'wgPasswordSender', 'wgImageMagickConvertCommand', 'wgShellLocale', + 'wgLanguageCode', 'wgEnableEmail', 'wgEnableUserEmail', 'wgDiff3', + 'wgEnotifUserTalk', 'wgEnotifWatchlist', 'wgEmailAuthentication', + 'wgDBtype', 'wgSecretKey', 'wgRightsUrl', 'wgSitename', 'wgRightsIcon', + 'wgRightsText', 'wgRightsCode', 'wgMainCacheType', 'wgEnableUploads', + 'wgMainCacheType', '_MemCachedServers', 'wgDBserver', 'wgDBuser', + 'wgDBpassword', 'wgUseInstantCommons', 'wgUpgradeKey', 'wgDefaultSkin', + 'wgMetaNamespace', 'wgResourceLoaderMaxQueryLength' + ), + $db->getGlobalNames() + ); + + $unescaped = array( 'wgRightsIcon' ); + $boolItems = array( + 'wgEnableEmail', 'wgEnableUserEmail', 'wgEnotifUserTalk', + 'wgEnotifWatchlist', 'wgEmailAuthentication', 'wgEnableUploads', 'wgUseInstantCommons' + ); + + foreach( $confItems as $c ) { + $val = $installer->getVar( $c ); + + if( in_array( $c, $boolItems ) ) { + $val = wfBoolToStr( $val ); + } + + if ( !in_array( $c, $unescaped ) ) { + $val = self::escapePhpString( $val ); + } + + $this->values[$c] = $val; + } + + $this->dbSettings = $db->getLocalSettings(); + $this->safeMode = $installer->getVar( '_SafeMode' ); + $this->values['wgEmergencyContact'] = $this->values['wgPasswordSender']; + } + + /** + * For $wgGroupPermissions, set a given ['group']['permission'] value. + * @param $group String Group name + * @param $rightsArr Array An array of permissions, in the form of: + * array( 'right' => true, 'right2' => false ) + */ + public function setGroupRights( $group, $rightsArr ) { + $this->groupPermissions[$group] = $rightsArr; + } + + /** + * Returns the escaped version of a string of php code. + * + * @param $string String + * + * @return String + */ + public static function escapePhpString( $string ) { + if ( is_array( $string ) || is_object( $string ) ) { + return false; + } + + return strtr( + $string, + array( + "\n" => "\\n", + "\r" => "\\r", + "\t" => "\\t", + "\\" => "\\\\", + "\$" => "\\\$", + "\"" => "\\\"" + ) + ); + } + + /** + * Return the full text of the generated LocalSettings.php file, + * including the extensions + * + * @return String + */ + public function getText() { + $localSettings = $this->getDefaultText(); + + if( count( $this->extensions ) ) { + $localSettings .= " +# Enabled Extensions. Most extensions are enabled by including the base extension file here +# but check specific extension documentation for more details +# The following extensions were automatically enabled:\n"; + + foreach( $this->extensions as $extName ) { + $encExtName = self::escapePhpString( $extName ); + $localSettings .= "require( \"extensions/$encExtName/$encExtName.php\" );\n"; + } + } + + $localSettings .= "\n\n# End of automatically generated settings. +# Add more configuration options below.\n\n"; + + return $localSettings; + } + + /** + * Write the generated LocalSettings to a file + * + * @param $fileName String Full path to filename to write to + */ + public function writeFile( $fileName ) { + file_put_contents( $fileName, $this->getText() ); + } + + /** + * @return String + */ + private function buildMemcachedServerList() { + $servers = $this->values['_MemCachedServers']; + + if( !$servers ) { + return 'array()'; + } else { + $ret = 'array( '; + $servers = explode( ',', $servers ); + + foreach( $servers as $srv ) { + $srv = trim( $srv ); + $ret .= "'$srv', "; + } + + return rtrim( $ret, ', ' ) . ' )'; + } + } + + /** + * @return String + */ + private function getDefaultText() { + if( !$this->values['wgImageMagickConvertCommand'] ) { + $this->values['wgImageMagickConvertCommand'] = '/usr/bin/convert'; + $magic = '#'; + } else { + $magic = ''; + } + + if( !$this->values['wgShellLocale'] ) { + $this->values['wgShellLocale'] = 'en_US.UTF-8'; + $locale = '#'; + } else { + $locale = ''; + } + + $rightsUrl = $this->values['wgRightsUrl'] ? '' : '#'; + $hashedUploads = $this->safeMode ? '' : '#'; + $metaNamespace = ''; + if( $this->values['wgMetaNamespace'] !== $this->values['wgSitename'] ) { + $metaNamespace = "\$wgMetaNamespace = \"{$this->values['wgMetaNamespace']}\";\n"; + } + + $groupRights = ''; + if( $this->groupPermissions ) { + $groupRights .= "# The following permissions were set based on your choice in the installer\n"; + foreach( $this->groupPermissions as $group => $rightArr ) { + $group = self::escapePhpString( $group ); + foreach( $rightArr as $right => $perm ) { + $right = self::escapePhpString( $right ); + $groupRights .= "\$wgGroupPermissions['$group']['$right'] = " . + wfBoolToStr( $perm ) . ";\n"; + } + } + } + + switch( $this->values['wgMainCacheType'] ) { + case 'anything': + case 'db': + case 'memcached': + case 'accel': + $cacheType = 'CACHE_' . strtoupper( $this->values['wgMainCacheType']); + break; + case 'none': + default: + $cacheType = 'CACHE_NONE'; + } + + $mcservers = $this->buildMemcachedServerList(); + return "values['wgSitename']}\"; +{$metaNamespace} +## The URL base path to the directory containing the wiki; +## defaults for all runtime URL paths are based off of this. +## For more information on customizing the URLs please see: +## http://www.mediawiki.org/wiki/Manual:Short_URL +\$wgScriptPath = \"{$this->values['wgScriptPath']}\"; +\$wgScriptExtension = \"{$this->values['wgScriptExtension']}\"; + +## The relative URL path to the skins directory +\$wgStylePath = \"\$wgScriptPath/skins\"; + +## The relative URL path to the logo. Make sure you change this from the default, +## or else you'll overwrite your logo when you upgrade! +\$wgLogo = \"\$wgStylePath/common/images/wiki.png\"; + +## UPO means: this is also a user preference option + +\$wgEnableEmail = {$this->values['wgEnableEmail']}; +\$wgEnableUserEmail = {$this->values['wgEnableUserEmail']}; # UPO + +\$wgEmergencyContact = \"{$this->values['wgEmergencyContact']}\"; +\$wgPasswordSender = \"{$this->values['wgPasswordSender']}\"; + +\$wgEnotifUserTalk = {$this->values['wgEnotifUserTalk']}; # UPO +\$wgEnotifWatchlist = {$this->values['wgEnotifWatchlist']}; # UPO +\$wgEmailAuthentication = {$this->values['wgEmailAuthentication']}; + +## Database settings +\$wgDBtype = \"{$this->values['wgDBtype']}\"; +\$wgDBserver = \"{$this->values['wgDBserver']}\"; +\$wgDBname = \"{$this->values['wgDBname']}\"; +\$wgDBuser = \"{$this->values['wgDBuser']}\"; +\$wgDBpassword = \"{$this->values['wgDBpassword']}\"; + +{$this->dbSettings} + +## Shared memory settings +\$wgMainCacheType = $cacheType; +\$wgMemCachedServers = $mcservers; + +## To enable image uploads, make sure the 'images' directory +## is writable, then set this to true: +\$wgEnableUploads = {$this->values['wgEnableUploads']}; +{$magic}\$wgUseImageMagick = true; +{$magic}\$wgImageMagickConvertCommand = \"{$this->values['wgImageMagickConvertCommand']}\"; + +# InstantCommons allows wiki to use images from http://commons.wikimedia.org +\$wgUseInstantCommons = {$this->values['wgUseInstantCommons']}; + +## If you use ImageMagick (or any other shell command) on a +## Linux server, this will need to be set to the name of an +## available UTF-8 locale +{$locale}\$wgShellLocale = \"{$this->values['wgShellLocale']}\"; + +## If you want to use image uploads under safe mode, +## create the directories images/archive, images/thumb and +## images/temp, and make them all writable. Then uncomment +## this, if it's not already uncommented: +{$hashedUploads}\$wgHashedUploadDirectory = false; + +## If you have the appropriate support software installed +## you can enable inline LaTeX equations: +\$wgUseTeX = false; + +## Set \$wgCacheDirectory to a writable directory on the web server +## to make your wiki go slightly faster. The directory should not +## be publically accessible from the web. +#\$wgCacheDirectory = \"\$IP/cache\"; + +# Site language code, should be one of ./languages/Language(.*).php +\$wgLanguageCode = \"{$this->values['wgLanguageCode']}\"; + +\$wgSecretKey = \"{$this->values['wgSecretKey']}\"; + +# Site upgrade key. Must be set to a string (default provided) to turn on the +# web installer while LocalSettings.php is in place +\$wgUpgradeKey = \"{$this->values['wgUpgradeKey']}\"; + +## Default skin: you can change the default skin. Use the internal symbolic +## names, ie 'standard', 'nostalgia', 'cologneblue', 'monobook', 'vector': +\$wgDefaultSkin = \"{$this->values['wgDefaultSkin']}\"; + +## For attaching licensing metadata to pages, and displaying an +## appropriate copyright notice / icon. GNU Free Documentation +## License and Creative Commons licenses are supported so far. +{$rightsUrl}\$wgEnableCreativeCommonsRdf = true; +\$wgRightsPage = \"\"; # Set to the title of a wiki page that describes your license/copyright +\$wgRightsUrl = \"{$this->values['wgRightsUrl']}\"; +\$wgRightsText = \"{$this->values['wgRightsText']}\"; +\$wgRightsIcon = \"{$this->values['wgRightsIcon']}\"; +# \$wgRightsCode = \"{$this->values['wgRightsCode']}\"; # Not yet used + +# Path to the GNU diff3 utility. Used for conflict resolution. +\$wgDiff3 = \"{$this->values['wgDiff3']}\"; + +{$groupRights} + +# Query string length limit for ResourceLoader. You should only set this if +# your web server has a query string length limit (then set it to that limit), +# or if you have suhosin.get.max_value_length set in php.ini (then set it to +# that value) +\$wgResourceLoaderMaxQueryLength = {$this->values['wgResourceLoaderMaxQueryLength']}; +"; + } + +} diff --git a/includes/installer/MysqlInstaller.php b/includes/installer/MysqlInstaller.php new file mode 100644 index 00000000..2fe16dcf --- /dev/null +++ b/includes/installer/MysqlInstaller.php @@ -0,0 +1,589 @@ + 'InnoDB', + '_MysqlCharset' => 'binary', + '_InstallUser' => 'root', + ); + + public $supportedEngines = array( 'InnoDB', 'MyISAM' ); + + public $minimumVersion = '4.0.14'; + + public $webUserPrivs = array( + 'DELETE', + 'INSERT', + 'SELECT', + 'UPDATE', + 'CREATE TEMPORARY TABLES', + ); + + public function getName() { + return 'mysql'; + } + + public function __construct( $parent ) { + parent::__construct( $parent ); + } + + public function isCompiled() { + return self::checkExtension( 'mysql' ); + } + + public function getGlobalDefaults() { + return array(); + } + + public function getConnectForm() { + return + $this->getTextBox( 'wgDBserver', 'config-db-host', array(), $this->parent->getHelpBox( 'config-db-host-help' ) ) . + Html::openElement( 'fieldset' ) . + Html::element( 'legend', array(), wfMsg( 'config-db-wiki-settings' ) ) . + $this->getTextBox( 'wgDBname', 'config-db-name', array(), $this->parent->getHelpBox( 'config-db-name-help' ) ) . + $this->getTextBox( 'wgDBprefix', 'config-db-prefix', array(), $this->parent->getHelpBox( 'config-db-prefix-help' ) ) . + Html::closeElement( 'fieldset' ) . + $this->getInstallUserBox(); + } + + public function submitConnectForm() { + // Get variables from the request. + $newValues = $this->setVarsFromRequest( array( 'wgDBserver', 'wgDBname', 'wgDBprefix' ) ); + + // Validate them. + $status = Status::newGood(); + if ( !strlen( $newValues['wgDBserver'] ) ) { + $status->fatal( 'config-missing-db-host' ); + } + if ( !strlen( $newValues['wgDBname'] ) ) { + $status->fatal( 'config-missing-db-name' ); + } elseif ( !preg_match( '/^[a-z0-9_-]+$/i', $newValues['wgDBname'] ) ) { + $status->fatal( 'config-invalid-db-name', $newValues['wgDBname'] ); + } + if ( !preg_match( '/^[a-z0-9_-]*$/i', $newValues['wgDBprefix'] ) ) { + $status->fatal( 'config-invalid-db-prefix', $newValues['wgDBprefix'] ); + } + if ( !$status->isOK() ) { + return $status; + } + + // Submit user box + $status = $this->submitInstallUserBox(); + if ( !$status->isOK() ) { + return $status; + } + + // Try to connect + $status = $this->getConnection(); + if ( !$status->isOK() ) { + return $status; + } + $conn = $status->value; + + // Check version + $version = $conn->getServerVersion(); + if ( version_compare( $version, $this->minimumVersion ) < 0 ) { + return Status::newFatal( 'config-mysql-old', $this->minimumVersion, $version ); + } + + return $status; + } + + public function openConnection() { + $status = Status::newGood(); + try { + $db = new DatabaseMysql( + $this->getVar( 'wgDBserver' ), + $this->getVar( '_InstallUser' ), + $this->getVar( '_InstallPassword' ), + false, + false, + 0, + $this->getVar( 'wgDBprefix' ) + ); + $status->value = $db; + } catch ( DBConnectionError $e ) { + $status->fatal( 'config-connection-error', $e->getMessage() ); + } + return $status; + } + + public function preUpgrade() { + global $wgDBuser, $wgDBpassword; + + $status = $this->getConnection(); + if ( !$status->isOK() ) { + $this->parent->showStatusError( $status ); + return; + } + $conn = $status->value; + $conn->selectDB( $this->getVar( 'wgDBname' ) ); + + # Determine existing default character set + if ( $conn->tableExists( "revision" ) ) { + $revision = $conn->buildLike( $this->getVar( 'wgDBprefix' ) . 'revision' ); + $res = $conn->query( "SHOW TABLE STATUS $revision", __METHOD__ ); + $row = $conn->fetchObject( $res ); + if ( !$row ) { + $this->parent->showMessage( 'config-show-table-status' ); + $existingSchema = false; + $existingEngine = false; + } else { + if ( preg_match( '/^latin1/', $row->Collation ) ) { + $existingSchema = 'mysql4'; + } elseif ( preg_match( '/^utf8/', $row->Collation ) ) { + $existingSchema = 'utf8'; + } elseif ( preg_match( '/^binary/', $row->Collation ) ) { + $existingSchema = 'binary'; + } else { + $existingSchema = false; + $this->parent->showMessage( 'config-unknown-collation' ); + } + if ( isset( $row->Engine ) ) { + $existingEngine = $row->Engine; + } else { + $existingEngine = $row->Type; + } + } + } else { + $existingSchema = false; + $existingEngine = false; + } + + if ( $existingSchema && $existingSchema != $this->getVar( '_MysqlCharset' ) ) { + $this->setVar( '_MysqlCharset', $existingSchema ); + } + if ( $existingEngine && $existingEngine != $this->getVar( '_MysqlEngine' ) ) { + $this->setVar( '_MysqlEngine', $existingEngine ); + } + + # Normal user and password are selected after this step, so for now + # just copy these two + $wgDBuser = $this->getVar( '_InstallUser' ); + $wgDBpassword = $this->getVar( '_InstallPassword' ); + } + + /** + * Get a list of storage engines that are available and supported + */ + public function getEngines() { + $engines = array( 'InnoDB', 'MyISAM' ); + $status = $this->getConnection(); + if ( !$status->isOK() ) { + return $engines; + } + $conn = $status->value; + + $version = $conn->getServerVersion(); + if ( version_compare( $version, "4.1.2", "<" ) ) { + // No SHOW ENGINES in this version + return $engines; + } + + $engines = array(); + $res = $conn->query( 'SHOW ENGINES', __METHOD__ ); + foreach ( $res as $row ) { + if ( $row->Support == 'YES' || $row->Support == 'DEFAULT' ) { + $engines[] = $row->Engine; + } + } + $engines = array_intersect( $this->supportedEngines, $engines ); + return $engines; + } + + /** + * Get a list of character sets that are available and supported + */ + public function getCharsets() { + $status = $this->getConnection(); + $mysql5 = array( 'binary', 'utf8' ); + $mysql4 = array( 'mysql4' ); + if ( !$status->isOK() ) { + return $mysql5; + } + if ( version_compare( $status->value->getServerVersion(), '4.1.0', '>=' ) ) { + return $mysql5; + } + return $mysql4; + } + + /** + * Return true if the install user can create accounts + */ + public function canCreateAccounts() { + $status = $this->getConnection(); + if ( !$status->isOK() ) { + return false; + } + $conn = $status->value; + + // Check version, need INFORMATION_SCHEMA and CREATE USER + if ( version_compare( $conn->getServerVersion(), '5.0.2', '<' ) ) { + return false; + } + + // Get current account name + $currentName = $conn->selectField( '', 'CURRENT_USER()', '', __METHOD__ ); + $parts = explode( '@', $currentName ); + if ( count( $parts ) != 2 ) { + return false; + } + $quotedUser = $conn->addQuotes( $parts[0] ) . + '@' . $conn->addQuotes( $parts[1] ); + + // The user needs to have INSERT on mysql.* to be able to CREATE USER + // The grantee will be double-quoted in this query, as required + $res = $conn->select( 'INFORMATION_SCHEMA.USER_PRIVILEGES', '*', + array( 'GRANTEE' => $quotedUser ), __METHOD__ ); + $insertMysql = false; + $grantOptions = array_flip( $this->webUserPrivs ); + foreach ( $res as $row ) { + if ( $row->PRIVILEGE_TYPE == 'INSERT' ) { + $insertMysql = true; + } + if ( $row->IS_GRANTABLE ) { + unset( $grantOptions[$row->PRIVILEGE_TYPE] ); + } + } + + // Check for DB-specific privs for mysql.* + if ( !$insertMysql ) { + $row = $conn->selectRow( 'INFORMATION_SCHEMA.SCHEMA_PRIVILEGES', '*', + array( + 'GRANTEE' => $quotedUser, + 'TABLE_SCHEMA' => 'mysql', + 'PRIVILEGE_TYPE' => 'INSERT', + ), __METHOD__ ); + if ( $row ) { + $insertMysql = true; + } + } + + if ( !$insertMysql ) { + return false; + } + + // Check for DB-level grant options + $res = $conn->select( 'INFORMATION_SCHEMA.SCHEMA_PRIVILEGES', '*', + array( + 'GRANTEE' => $quotedUser, + 'IS_GRANTABLE' => 1, + ), __METHOD__ ); + foreach ( $res as $row ) { + $regex = $conn->likeToRegex( $row->TABLE_SCHEMA ); + if ( preg_match( $regex, $this->getVar( 'wgDBname' ) ) ) { + unset( $grantOptions[$row->PRIVILEGE_TYPE] ); + } + } + if ( count( $grantOptions ) ) { + // Can't grant everything + return false; + } + return true; + } + + public function getSettingsForm() { + if ( $this->canCreateAccounts() ) { + $noCreateMsg = false; + } else { + $noCreateMsg = 'config-db-web-no-create-privs'; + } + $s = $this->getWebUserBox( $noCreateMsg ); + + // Do engine selector + $engines = $this->getEngines(); + // If the current default engine is not supported, use an engine that is + if ( !in_array( $this->getVar( '_MysqlEngine' ), $engines ) ) { + $this->setVar( '_MysqlEngine', reset( $engines ) ); + } + if ( count( $engines ) >= 2 ) { + $s .= $this->getRadioSet( array( + 'var' => '_MysqlEngine', + 'label' => 'config-mysql-engine', + 'itemLabelPrefix' => 'config-mysql-', + 'values' => $engines + )); + $s .= $this->parent->getHelpBox( 'config-mysql-engine-help' ); + } + + // If the current default charset is not supported, use a charset that is + $charsets = $this->getCharsets(); + if ( !in_array( $this->getVar( '_MysqlCharset' ), $charsets ) ) { + $this->setVar( '_MysqlCharset', reset( $charsets ) ); + } + + // Do charset selector + if ( count( $charsets ) >= 2 ) { + $s .= $this->getRadioSet( array( + 'var' => '_MysqlCharset', + 'label' => 'config-mysql-charset', + 'itemLabelPrefix' => 'config-mysql-', + 'values' => $charsets + )); + $s .= $this->parent->getHelpBox( 'config-mysql-charset-help' ); + } + + return $s; + } + + public function submitSettingsForm() { + $this->setVarsFromRequest( array( '_MysqlEngine', '_MysqlCharset' ) ); + $status = $this->submitWebUserBox(); + if ( !$status->isOK() ) { + return $status; + } + + // Validate the create checkbox + $canCreate = $this->canCreateAccounts(); + if ( !$canCreate ) { + $this->setVar( '_CreateDBAccount', false ); + $create = false; + } else { + $create = $this->getVar( '_CreateDBAccount' ); + } + + if ( !$create ) { + // Test the web account + try { + new DatabaseMysql( + $this->getVar( 'wgDBserver' ), + $this->getVar( 'wgDBuser' ), + $this->getVar( 'wgDBpassword' ), + false, + false, + 0, + $this->getVar( 'wgDBprefix' ) + ); + } catch ( DBConnectionError $e ) { + return Status::newFatal( 'config-connection-error', $e->getMessage() ); + } + } + + // Validate engines and charsets + // This is done pre-submit already so it's just for security + $engines = $this->getEngines(); + if ( !in_array( $this->getVar( '_MysqlEngine' ), $engines ) ) { + $this->setVar( '_MysqlEngine', reset( $engines ) ); + } + $charsets = $this->getCharsets(); + if ( !in_array( $this->getVar( '_MysqlCharset' ), $charsets ) ) { + $this->setVar( '_MysqlCharset', reset( $charsets ) ); + } + return Status::newGood(); + } + + public function preInstall() { + # Add our user callback to installSteps, right before the tables are created. + $callback = array( + 'name' => 'user', + 'callback' => array( $this, 'setupUser' ), + ); + $this->parent->addInstallStep( $callback, 'tables' ); + } + + public function setupDatabase() { + $status = $this->getConnection(); + if ( !$status->isOK() ) { + return $status; + } + $conn = $status->value; + $dbName = $this->getVar( 'wgDBname' ); + if( !$conn->selectDB( $dbName ) ) { + $conn->query( "CREATE DATABASE " . $conn->addIdentifierQuotes( $dbName ), __METHOD__ ); + $conn->selectDB( $dbName ); + } + $this->setupSchemaVars(); + return $status; + } + + public function setupUser() { + $dbUser = $this->getVar( 'wgDBuser' ); + if( $dbUser == $this->getVar( '_InstallUser' ) ) { + return Status::newGood(); + } + $status = $this->getConnection(); + if ( !$status->isOK() ) { + return $status; + } + + $this->setupSchemaVars(); + $dbName = $this->getVar( 'wgDBname' ); + $this->db->selectDB( $dbName ); + $server = $this->getVar( 'wgDBserver' ); + $password = $this->getVar( 'wgDBpassword' ); + $grantableNames = array(); + + if ( $this->getVar( '_CreateDBAccount' ) ) { + // Before we blindly try to create a user that already has access, + try { // first attempt to connect to the database + new DatabaseMysql( + $server, + $dbUser, + $password, + false, + false, + 0, + $this->getVar( 'wgDBprefix' ) + ); + $grantableNames[] = $this->buildFullUserName( $dbUser, $server ); + $tryToCreate = false; + } catch ( DBConnectionError $e ) { + $tryToCreate = true; + } + } else { + $grantableNames[] = $this->buildFullUserName( $dbUser, $server ); + $tryToCreate = false; + } + + if( $tryToCreate ) { + $createHostList = array($server, + 'localhost', + 'localhost.localdomain', + '%' + ); + + $createHostList = array_unique( $createHostList ); + $escPass = $this->db->addQuotes( $password ); + + foreach( $createHostList as $host ) { + $fullName = $this->buildFullUserName( $dbUser, $host ); + if( !$this->userDefinitelyExists( $dbUser, $host ) ) { + try{ + $this->db->begin(); + $this->db->query( "CREATE USER $fullName IDENTIFIED BY $escPass", __METHOD__ ); + $this->db->commit(); + $grantableNames[] = $fullName; + } catch( DBQueryError $dqe ) { + if( $this->db->lastErrno() == 1396 /* ER_CANNOT_USER */ ) { + // User (probably) already exists + $this->db->rollback(); + $status->warning( 'config-install-user-alreadyexists', $dbUser ); + $grantableNames[] = $fullName; + break; + } else { + // If we couldn't create for some bizzare reason and the + // user probably doesn't exist, skip the grant + $this->db->rollback(); + $status->warning( 'config-install-user-create-failed', $dbUser, $dqe->getText() ); + } + } + } else { + $status->warning( 'config-install-user-alreadyexists', $dbUser ); + $grantableNames[] = $fullName; + break; + } + } + } + + // Try to grant to all the users we know exist or we were able to create + $escPass = $this->db->addQuotes( $password ); + $dbAllTables = $this->db->addIdentifierQuotes( $dbName ) . '.*'; + foreach( $grantableNames as $name ) { + try { + $this->db->begin(); + $this->db->query( "GRANT ALL PRIVILEGES ON $dbAllTables TO $name", __METHOD__ ); + $this->db->commit(); + } catch( DBQueryError $dqe ) { + $this->db->rollback(); + $status->fatal( 'config-install-user-grant-failed', $dbUser, $dqe->getText() ); + } + } + + return $status; + } + + /** + * Return a formal 'User'@'Host' username for use in queries + * @param $name String Username, quotes will be added + * @param $host String Hostname, quotes will be added + * @return String + */ + private function buildFullUserName( $name, $host ) { + return $this->db->addQuotes( $name ) . '@' . $this->db->addQuotes( $host ); + } + + /** + * Try to see if the user account exists. Our "superuser" may not have + * access to mysql.user, so false means "no" or "maybe" + * @param $host String Hostname to check + * @param $user String Username to check + * @return boolean + */ + private function userDefinitelyExists( $host, $user ) { + try { + $res = $this->db->selectRow( 'mysql.user', array( 'Host', 'User' ), + array( 'Host' => $host, 'User' => $user ), __METHOD__ ); + return (bool)$res; + } catch( DBQueryError $dqe ) { + return false; + } + + } + + /** + * Return any table options to be applied to all tables that don't + * override them. + * + * @return String + */ + protected function getTableOptions() { + $options = array(); + if ( $this->getVar( '_MysqlEngine' ) !== null ) { + $options[] = "ENGINE=" . $this->getVar( '_MysqlEngine' ); + } + if ( $this->getVar( '_MysqlCharset' ) !== null ) { + $options[] = 'DEFAULT CHARSET=' . $this->getVar( '_MysqlCharset' ); + } + return implode( ', ', $options ); + } + + /** + * Get variables to substitute into tables.sql and the SQL patch files. + */ + public function getSchemaVars() { + return array( + 'wgDBTableOptions' => $this->getTableOptions(), + 'wgDBname' => $this->getVar( 'wgDBname' ), + 'wgDBuser' => $this->getVar( 'wgDBuser' ), + 'wgDBpassword' => $this->getVar( 'wgDBpassword' ), + ); + } + + public function getLocalSettings() { + $dbmysql5 = wfBoolToStr( $this->getVar( 'wgDBmysql5', true ) ); + $prefix = LocalSettingsGenerator::escapePhpString( $this->getVar( 'wgDBprefix' ) ); + $tblOpts = LocalSettingsGenerator::escapePhpString( $this->getTableOptions() ); + return +"# MySQL specific settings +\$wgDBprefix = \"{$prefix}\"; + +# MySQL table options to use during installation or update +\$wgDBTableOptions = \"{$tblOpts}\"; + +# Experimental charset support for MySQL 4.1/5.0. +\$wgDBmysql5 = {$dbmysql5};"; + } +} diff --git a/includes/installer/MysqlUpdater.php b/includes/installer/MysqlUpdater.php new file mode 100644 index 00000000..9bbda5db --- /dev/null +++ b/includes/installer/MysqlUpdater.php @@ -0,0 +1,832 @@ +db->tableName( $table ); + $res = $this->db->query( "SELECT $field FROM $tableName LIMIT 0", __METHOD__ ); + $flags = explode( ' ', mysql_field_flags( $res->result, 0 ) ); + + if ( in_array( 'binary', $flags ) ) { + $this->output( "...$table table has correct $field encoding.\n" ); + } else { + $this->output( "Fixing $field encoding on $table table... " ); + $this->applyPatch( $patchFile ); + $this->output( "done.\n" ); + } + } + + /** + * Check whether an index contain a field + * + * @param $table String: table name + * @param $index String: index name to check + * @param $field String: field that should be in the index + * @return Boolean + */ + protected function indexHasField( $table, $index, $field ) { + $info = $this->db->indexInfo( $table, $index, __METHOD__ ); + if ( $info ) { + foreach ( $info as $row ) { + if ( $row->Column_name == $field ) { + $this->output( "...index $index on table $table includes field $field\n" ); + return true; + } + } + } + $this->output( "...index $index on table $table has no field $field; adding\n" ); + return false; + } + + /** + * Check that interwiki table exists; if it doesn't source it + */ + protected function doInterwikiUpdate() { + global $IP; + + if ( $this->db->tableExists( "interwiki" ) ) { + $this->output( "...already have interwiki table\n" ); + return; + } + + $this->output( 'Creating interwiki table...' ); + $this->applyPatch( 'patch-interwiki.sql' ); + $this->output( "ok\n" ); + $this->output( 'Adding default interwiki definitions...' ); + $this->applyPatch( "$IP/maintenance/interwiki.sql", true ); + $this->output( "done.\n" ); + } + + /** + * Check that proper indexes are in place + */ + protected function doIndexUpdate() { + $meta = $this->db->fieldInfo( 'recentchanges', 'rc_timestamp' ); + if ( $meta->isMultipleKey() ) { + $this->output( "...indexes seem up to 20031107 standards\n" ); + return; + } + + $this->output( "Updating indexes to 20031107..." ); + $this->applyPatch( 'patch-indexes.sql', true ); + $this->output( "done.\n" ); + } + + protected function doOldLinksUpdate() { + $cl = $this->maintenance->runChild( 'ConvertLinks' ); + $cl->execute(); + } + + protected function doFixAncientImagelinks() { + $info = $this->db->fieldInfo( 'imagelinks', 'il_from' ); + if ( !$info || $info->type() !== 'string' ) { + $this->output( "...il_from OK\n" ); + return; + } + + $this->output( "Fixing ancient broken imagelinks table.\n" ); + $this->output( "NOTE: you will have to run maintenance/refreshLinks.php after this.\n" ); + $this->applyPatch( 'patch-fix-il_from.sql' ); + $this->output( "done.\n" ); + } + + /** + * Check if we need to add talk page rows to the watchlist + */ + function doWatchlistUpdate() { + $talk = $this->db->selectField( 'watchlist', 'count(*)', 'wl_namespace & 1', __METHOD__ ); + $nontalk = $this->db->selectField( 'watchlist', 'count(*)', 'NOT (wl_namespace & 1)', __METHOD__ ); + if ( $talk == $nontalk ) { + $this->output( "...watchlist talk page rows already present\n" ); + return; + } + + $this->output( "Adding missing watchlist talk page rows... " ); + $this->db->insertSelect( 'watchlist', 'watchlist', + array( + 'wl_user' => 'wl_user', + 'wl_namespace' => 'wl_namespace | 1', + 'wl_title' => 'wl_title', + 'wl_notificationtimestamp' => 'wl_notificationtimestamp' + ), array( 'NOT (wl_namespace & 1)' ), __METHOD__, 'IGNORE' ); + $this->output( "done.\n" ); + } + + function doSchemaRestructuring() { + if ( $this->db->tableExists( 'page' ) ) { + $this->output( "...page table already exists.\n" ); + return; + } + + $this->output( "...converting from cur/old to page/revision/text DB structure.\n" ); + $this->output( wfTimestamp( TS_DB ) ); + $this->output( "......checking for duplicate entries.\n" ); + + list ( $cur, $old, $page, $revision, $text ) = $this->db->tableNamesN( 'cur', 'old', 'page', 'revision', 'text' ); + + $rows = $this->db->query( "SELECT cur_title, cur_namespace, COUNT(cur_namespace) AS c + FROM $cur GROUP BY cur_title, cur_namespace HAVING c>1", __METHOD__ ); + + if ( $rows->numRows() > 0 ) { + $this->output( wfTimestamp( TS_DB ) ); + $this->output( "......Found duplicate entries\n" ); + $this->output( sprintf( " %-60s %3s %5s\n", 'Title', 'NS', 'Count' ) ); + $duplicate = array(); + foreach ( $rows as $row ) { + if ( ! isset( $duplicate[$row->cur_namespace] ) ) { + $duplicate[$row->cur_namespace] = array(); + } + $duplicate[$row->cur_namespace][] = $row->cur_title; + $this->output( sprintf( " %-60s %3s %5s\n", $row->cur_title, $row->cur_namespace, $row->c ) ); + } + $sql = "SELECT cur_title, cur_namespace, cur_id, cur_timestamp FROM $cur WHERE "; + $firstCond = true; + foreach ( $duplicate as $ns => $titles ) { + if ( $firstCond ) { + $firstCond = false; + } else { + $sql .= ' OR '; + } + $sql .= "( cur_namespace = {$ns} AND cur_title in ("; + $first = true; + foreach ( $titles as $t ) { + if ( $first ) { + $sql .= $this->db->addQuotes( $t ); + $first = false; + } else { + $sql .= ', ' . $this->db->addQuotes( $t ); + } + } + $sql .= ") ) \n"; + } + # By sorting descending, the most recent entry will be the first in the list. + # All following entries will be deleted by the next while-loop. + $sql .= 'ORDER BY cur_namespace, cur_title, cur_timestamp DESC'; + + $rows = $this->db->query( $sql, __METHOD__ ); + + $prev_title = $prev_namespace = false; + $deleteId = array(); + + foreach ( $rows as $row ) { + if ( $prev_title == $row->cur_title && $prev_namespace == $row->cur_namespace ) { + $deleteId[] = $row->cur_id; + } + $prev_title = $row->cur_title; + $prev_namespace = $row->cur_namespace; + } + $sql = "DELETE FROM $cur WHERE cur_id IN ( " . join( ',', $deleteId ) . ')'; + $this->db->query( $sql, __METHOD__ ); + $this->output( wfTimestamp( TS_DB ) ); + $this->output( "......Deleted " . $this->db->affectedRows() . " records.\n" ); + } + + $this->output( wfTimestamp( TS_DB ) ); + $this->output( "......Creating tables.\n" ); + $this->db->query( "CREATE TABLE $page ( + page_id int(8) unsigned NOT NULL auto_increment, + page_namespace int NOT NULL, + page_title varchar(255) binary NOT NULL, + page_restrictions tinyblob NOT NULL, + page_counter bigint(20) unsigned NOT NULL default '0', + page_is_redirect tinyint(1) unsigned NOT NULL default '0', + page_is_new tinyint(1) unsigned NOT NULL default '0', + page_random real unsigned NOT NULL, + page_touched char(14) binary NOT NULL default '', + page_latest int(8) unsigned NOT NULL, + page_len int(8) unsigned NOT NULL, + + PRIMARY KEY page_id (page_id), + UNIQUE INDEX name_title (page_namespace,page_title), + INDEX (page_random), + INDEX (page_len) + ) ENGINE=InnoDB", __METHOD__ ); + $this->db->query( "CREATE TABLE $revision ( + rev_id int(8) unsigned NOT NULL auto_increment, + rev_page int(8) unsigned NOT NULL, + rev_comment tinyblob NOT NULL, + rev_user int(5) unsigned NOT NULL default '0', + rev_user_text varchar(255) binary NOT NULL default '', + rev_timestamp char(14) binary NOT NULL default '', + rev_minor_edit tinyint(1) unsigned NOT NULL default '0', + rev_deleted tinyint(1) unsigned NOT NULL default '0', + rev_len int(8) unsigned, + rev_parent_id int(8) unsigned default NULL, + PRIMARY KEY rev_page_id (rev_page, rev_id), + UNIQUE INDEX rev_id (rev_id), + INDEX rev_timestamp (rev_timestamp), + INDEX page_timestamp (rev_page,rev_timestamp), + INDEX user_timestamp (rev_user,rev_timestamp), + INDEX usertext_timestamp (rev_user_text,rev_timestamp) + ) ENGINE=InnoDB", __METHOD__ ); + + $this->output( wfTimestamp( TS_DB ) ); + $this->output( "......Locking tables.\n" ); + $this->db->query( "LOCK TABLES $page WRITE, $revision WRITE, $old WRITE, $cur WRITE", __METHOD__ ); + + $maxold = intval( $this->db->selectField( 'old', 'max(old_id)', '', __METHOD__ ) ); + $this->output( wfTimestamp( TS_DB ) ); + $this->output( "......maxold is {$maxold}\n" ); + + $this->output( wfTimestamp( TS_DB ) ); + global $wgLegacySchemaConversion; + if ( $wgLegacySchemaConversion ) { + // Create HistoryBlobCurStub entries. + // Text will be pulled from the leftover 'cur' table at runtime. + $this->output( "......Moving metadata from cur; using blob references to text in cur table.\n" ); + $cur_text = "concat('O:18:\"historyblobcurstub\":1:{s:6:\"mCurId\";i:',cur_id,';}')"; + $cur_flags = "'object'"; + } else { + // Copy all cur text in immediately: this may take longer but avoids + // having to keep an extra table around. + $this->output( "......Moving text from cur.\n" ); + $cur_text = 'cur_text'; + $cur_flags = "''"; + } + $this->db->query( "INSERT INTO $old (old_namespace, old_title, old_text, old_comment, old_user, old_user_text, + old_timestamp, old_minor_edit, old_flags) + SELECT cur_namespace, cur_title, $cur_text, cur_comment, cur_user, cur_user_text, cur_timestamp, cur_minor_edit, $cur_flags + FROM $cur", __METHOD__ ); + + $this->output( wfTimestamp( TS_DB ) ); + $this->output( "......Setting up revision table.\n" ); + $this->db->query( "INSERT INTO $revision (rev_id, rev_page, rev_comment, rev_user, rev_user_text, rev_timestamp, + rev_minor_edit) + SELECT old_id, cur_id, old_comment, old_user, old_user_text, + old_timestamp, old_minor_edit + FROM $old,$cur WHERE old_namespace=cur_namespace AND old_title=cur_title", __METHOD__ ); + + $this->output( wfTimestamp( TS_DB ) ); + $this->output( "......Setting up page table.\n" ); + $this->db->query( "INSERT INTO $page (page_id, page_namespace, page_title, page_restrictions, page_counter, + page_is_redirect, page_is_new, page_random, page_touched, page_latest, page_len) + SELECT cur_id, cur_namespace, cur_title, cur_restrictions, cur_counter, cur_is_redirect, cur_is_new, + cur_random, cur_touched, rev_id, LENGTH(cur_text) + FROM $cur,$revision + WHERE cur_id=rev_page AND rev_timestamp=cur_timestamp AND rev_id > {$maxold}", __METHOD__ ); + + $this->output( wfTimestamp( TS_DB ) ); + $this->output( "......Unlocking tables.\n" ); + $this->db->query( "UNLOCK TABLES", __METHOD__ ); + + $this->output( wfTimestamp( TS_DB ) ); + $this->output( "......Renaming old.\n" ); + $this->db->query( "ALTER TABLE $old RENAME TO $text", __METHOD__ ); + + $this->output( wfTimestamp( TS_DB ) ); + $this->output( "...done.\n" ); + } + + protected function doNamespaceSize() { + $tables = array( + 'page' => 'page', + 'archive' => 'ar', + 'recentchanges' => 'rc', + 'watchlist' => 'wl', + 'querycache' => 'qc', + 'logging' => 'log', + ); + foreach ( $tables as $table => $prefix ) { + $field = $prefix . '_namespace'; + + $tablename = $this->db->tableName( $table ); + $result = $this->db->query( "SHOW COLUMNS FROM $tablename LIKE '$field'", __METHOD__ ); + $info = $this->db->fetchObject( $result ); + + if ( substr( $info->Type, 0, 3 ) == 'int' ) { + $this->output( "...$field is already a full int ($info->Type).\n" ); + } else { + $this->output( "Promoting $field from $info->Type to int... " ); + $this->db->query( "ALTER TABLE $tablename MODIFY $field int NOT NULL", __METHOD__ ); + $this->output( "done.\n" ); + } + } + } + + protected function doPagelinksUpdate() { + if ( $this->db->tableExists( 'pagelinks' ) ) { + $this->output( "...already have pagelinks table.\n" ); + return; + } + + $this->output( "Converting links and brokenlinks tables to pagelinks... " ); + $this->applyPatch( 'patch-pagelinks.sql' ); + $this->output( "done.\n" ); + + global $wgContLang; + foreach ( MWNamespace::getCanonicalNamespaces() as $ns => $name ) { + if ( $ns == 0 ) { + continue; + } + + $this->output( "Cleaning up broken links for namespace $ns... " ); + + $pagelinks = $this->db->tableName( 'pagelinks' ); + $name = $wgContLang->getNsText( $ns ); + $prefix = $this->db->strencode( $name ); + $likeprefix = str_replace( '_', '\\_', $prefix ); + + $sql = "UPDATE $pagelinks + SET pl_namespace=$ns, + pl_title=TRIM(LEADING '$prefix:' FROM pl_title) + WHERE pl_namespace=0 + AND pl_title LIKE '$likeprefix:%'"; + + $this->db->query( $sql, __METHOD__ ); + $this->output( "done.\n" ); + } + } + + protected function doUserUniqueUpdate() { + $duper = new UserDupes( $this->db, array( $this, 'output' ) ); + if ( $duper->hasUniqueIndex() ) { + $this->output( "...already have unique user_name index.\n" ); + return; + } + + if ( !$duper->clearDupes() ) { + $this->output( "WARNING: This next step will probably fail due to unfixed duplicates...\n" ); + } + $this->output( "Adding unique index on user_name... " ); + $this->applyPatch( 'patch-user_nameindex.sql' ); + $this->output( "done.\n" ); + } + + protected function doUserGroupsUpdate() { + if ( $this->db->tableExists( 'user_groups' ) ) { + $info = $this->db->fieldInfo( 'user_groups', 'ug_group' ); + if ( $info->type() == 'int' ) { + $oldug = $this->db->tableName( 'user_groups' ); + $newug = $this->db->tableName( 'user_groups_bogus' ); + $this->output( "user_groups table exists but is in bogus intermediate format. Renaming to $newug... " ); + $this->db->query( "ALTER TABLE $oldug RENAME TO $newug", __METHOD__ ); + $this->output( "ok\n" ); + + $this->output( "Re-adding fresh user_groups table... " ); + $this->applyPatch( 'patch-user_groups.sql' ); + $this->output( "ok\n" ); + + $this->output( "***\n" ); + $this->output( "*** WARNING: You will need to manually fix up user permissions in the user_groups\n" ); + $this->output( "*** table. Old 1.5 alpha versions did some pretty funky stuff...\n" ); + $this->output( "***\n" ); + } else { + $this->output( "...user_groups table exists and is in current format.\n" ); + } + return; + } + + $this->output( "Adding user_groups table... " ); + $this->applyPatch( 'patch-user_groups.sql' ); + $this->output( "ok\n" ); + + if ( !$this->db->tableExists( 'user_rights' ) ) { + if ( $this->db->fieldExists( 'user', 'user_rights' ) ) { + $this->output( "Upgrading from a 1.3 or older database? Breaking out user_rights for conversion..." ); + $this->db->applyPatch( 'patch-user_rights.sql' ); + $this->output( "ok\n" ); + } else { + $this->output( "*** WARNING: couldn't locate user_rights table or field for upgrade.\n" ); + $this->output( "*** You may need to manually configure some sysops by manipulating\n" ); + $this->output( "*** the user_groups table.\n" ); + return; + } + } + + $this->output( "Converting user_rights table to user_groups... " ); + $result = $this->db->select( 'user_rights', + array( 'ur_user', 'ur_rights' ), + array( "ur_rights != ''" ), + __METHOD__ ); + + foreach ( $result as $row ) { + $groups = array_unique( + array_map( 'trim', + explode( ',', $row->ur_rights ) ) ); + + foreach ( $groups as $group ) { + $this->db->insert( 'user_groups', + array( + 'ug_user' => $row->ur_user, + 'ug_group' => $group ), + __METHOD__ ); + } + } + $this->output( "done.\n" ); + } + + /** + * Make sure wl_notificationtimestamp can be NULL, + * and update old broken items. + */ + protected function doWatchlistNull() { + $info = $this->db->fieldInfo( 'watchlist', 'wl_notificationtimestamp' ); + if ( $info->isNullable() ) { + $this->output( "...wl_notificationtimestamp is already nullable.\n" ); + return; + } + + $this->output( "Making wl_notificationtimestamp nullable... " ); + $this->applyPatch( 'patch-watchlist-null.sql' ); + $this->output( "done.\n" ); + } + + /** + * Set page_random field to a random value where it is equals to 0. + * + * @see bug 3946 + */ + protected function doPageRandomUpdate() { + $page = $this->db->tableName( 'page' ); + $this->db->query( "UPDATE $page SET page_random = RAND() WHERE page_random = 0", __METHOD__ ); + $rows = $this->db->affectedRows(); + + if( $rows ) { + $this->output( "Set page_random to a random value on $rows rows where it was set to 0\n" ); + } else { + $this->output( "...no page_random rows needed to be set\n" ); + } + } + + protected function doTemplatelinksUpdate() { + if ( $this->db->tableExists( 'templatelinks' ) ) { + $this->output( "...templatelinks table already exists\n" ); + return; + } + + $this->output( "Creating templatelinks table...\n" ); + $this->applyPatch( 'patch-templatelinks.sql' ); + $this->output( "Populating...\n" ); + if ( wfGetLB()->getServerCount() > 1 ) { + // Slow, replication-friendly update + $res = $this->db->select( 'pagelinks', array( 'pl_from', 'pl_namespace', 'pl_title' ), + array( 'pl_namespace' => NS_TEMPLATE ), __METHOD__ ); + $count = 0; + foreach ( $res as $row ) { + $count = ( $count + 1 ) % 100; + if ( $count == 0 ) { + wfWaitForSlaves( 10 ); + } + $this->db->insert( 'templatelinks', + array( + 'tl_from' => $row->pl_from, + 'tl_namespace' => $row->pl_namespace, + 'tl_title' => $row->pl_title, + ), __METHOD__ + ); + + } + } else { + // Fast update + $this->db->insertSelect( 'templatelinks', 'pagelinks', + array( + 'tl_from' => 'pl_from', + 'tl_namespace' => 'pl_namespace', + 'tl_title' => 'pl_title' + ), array( + 'pl_namespace' => 10 + ), __METHOD__ + ); + } + $this->output( "Done. Please run maintenance/refreshLinks.php for a more thorough templatelinks update.\n" ); + } + + protected function doBacklinkingIndicesUpdate() { + if ( !$this->indexHasField( 'pagelinks', 'pl_namespace', 'pl_from' ) || + !$this->indexHasField( 'templatelinks', 'tl_namespace', 'tl_from' ) || + !$this->indexHasField( 'imagelinks', 'il_to', 'il_from' ) ) + { + $this->applyPatch( 'patch-backlinkindexes.sql' ); + $this->output( "...backlinking indices updated\n" ); + } + } + + /** + * Adding page_restrictions table, obsoleting page.page_restrictions. + * Migrating old restrictions to new table + * -- Andrew Garrett, January 2007. + */ + protected function doRestrictionsUpdate() { + if ( $this->db->tableExists( 'page_restrictions' ) ) { + $this->output( "...page_restrictions table already exists.\n" ); + return; + } + + $this->output( "Creating page_restrictions table..." ); + $this->applyPatch( 'patch-page_restrictions.sql' ); + $this->applyPatch( 'patch-page_restrictions_sortkey.sql' ); + $this->output( "done.\n" ); + + $this->output( "Migrating old restrictions to new table...\n" ); + $task = $this->maintenance->runChild( 'UpdateRestrictions' ); + $task->execute(); + } + + protected function doCategorylinksIndicesUpdate() { + if ( !$this->indexHasField( 'categorylinks', 'cl_sortkey', 'cl_from' ) ) { + $this->applyPatch( 'patch-categorylinksindex.sql' ); + $this->output( "...categorylinks indices updated\n" ); + } + } + + protected function doCategoryPopulation() { + if ( $this->updateRowExists( 'populate category' ) ) { + $this->output( "...category table already populated.\n" ); + return; + } + + $this->output( + "Populating category table, printing progress markers. " . + "For large databases, you\n" . + "may want to hit Ctrl-C and do this manually with maintenance/\n" . + "populateCategory.php.\n" + ); + $task = $this->maintenance->runChild( 'PopulateCategory' ); + $task->execute(); + $this->output( "Done populating category table.\n" ); + } + + protected function doPopulateParentId() { + if ( $this->updateRowExists( 'populate rev_parent_id' ) ) { + $this->output( "...rev_parent_id column already populated.\n" ); + return; + } + + $task = $this->maintenance->runChild( 'PopulateParentId' ); + $task->execute(); + } + + protected function doMaybeProfilingMemoryUpdate() { + if ( !$this->db->tableExists( 'profiling' ) ) { + // Simply ignore + } elseif ( $this->db->fieldExists( 'profiling', 'pf_memory' ) ) { + $this->output( "...profiling table has pf_memory field.\n" ); + } else { + $this->output( "Adding pf_memory field to table profiling..." ); + $this->applyPatch( 'patch-profiling-memory.sql' ); + $this->output( "done.\n" ); + } + } + + protected function doFilearchiveIndicesUpdate() { + $info = $this->db->indexInfo( 'filearchive', 'fa_user_timestamp', __METHOD__ ); + if ( !$info ) { + $this->output( "Updating filearchive indices..." ); + $this->applyPatch( 'patch-filearchive-user-index.sql' ); + $this->output( "done.\n" ); + } + } + + protected function doUniquePlTlIl() { + $info = $this->db->indexInfo( 'pagelinks', 'pl_namespace' ); + if ( is_array( $info ) && !$info[0]->Non_unique ) { + $this->output( "...pl_namespace, tl_namespace, il_to indices are already UNIQUE.\n" ); + return; + } + + $this->output( "Making pl_namespace, tl_namespace and il_to indices UNIQUE... " ); + $this->applyPatch( 'patch-pl-tl-il-unique.sql' ); + $this->output( "done.\n" ); + } + + protected function renameEuWikiId() { + if ( $this->db->fieldExists( 'external_user', 'eu_local_id' ) ) { + $this->output( "...eu_wiki_id already renamed to eu_local_id.\n" ); + return; + } + + $this->output( "Renaming eu_wiki_id -> eu_local_id... " ); + $this->applyPatch( 'patch-eu_local_id.sql' ); + $this->output( "done.\n" ); + } + + protected function doUpdateMimeMinorField() { + if ( $this->updateRowExists( 'mime_minor_length' ) ) { + $this->output( "...*_mime_minor fields are already long enough.\n" ); + return; + } + + $this->output( "Altering all *_mime_minor fields to 100 bytes in size ... " ); + $this->applyPatch( 'patch-mime_minor_length.sql' ); + $this->output( "done.\n" ); + } + + protected function doPopulateRevLen() { + if ( $this->updateRowExists( 'populate rev_len' ) ) { + $this->output( "...rev_len column already populated.\n" ); + return; + } + + $task = $this->maintenance->runChild( 'PopulateRevisionLength' ); + $task->execute(); + } + + protected function doClFieldsUpdate() { + if ( $this->updateRowExists( 'cl_fields_update' ) ) { + $this->output( "...categorylinks up-to-date.\n" ); + return; + } + + $this->output( 'Updating categorylinks (again)...' ); + $this->applyPatch( 'patch-categorylinks-better-collation2.sql' ); + $this->output( "done.\n" ); + } + + protected function doLangLinksLengthUpdate() { + $langlinks = $this->db->tableName( 'langlinks' ); + $res = $this->db->query( "SHOW COLUMNS FROM $langlinks LIKE 'll_lang'" ); + $row = $this->db->fetchObject( $res ); + + if ( $row && $row->Type == "varbinary(10)" ) { + $this->output( 'Updating length of ll_lang in langlinks...' ); + $this->applyPatch( 'patch-langlinks-ll_lang-20.sql' ); + $this->output( "done.\n" ); + } else { + $this->output( "...ll_lang is up-to-date.\n" ); + } + } +} diff --git a/includes/installer/OracleInstaller.php b/includes/installer/OracleInstaller.php new file mode 100644 index 00000000..8c3e40e1 --- /dev/null +++ b/includes/installer/OracleInstaller.php @@ -0,0 +1,279 @@ + 'USERS', + '_OracleTempTS' => 'TEMP', + '_InstallUser' => 'SYSDBA', + ); + + public $minimumVersion = '9.0.1'; // 9iR1 + + protected $connError = null; + + public function getName() { + return 'oracle'; + } + + public function isCompiled() { + return self::checkExtension( 'oci8' ); + } + + public function getConnectForm() { + if ( $this->getVar( 'wgDBserver' ) == 'localhost' ) { + $this->parent->setVar( 'wgDBserver', '' ); + } + return + $this->getTextBox( 'wgDBserver', 'config-db-host-oracle', array(), $this->parent->getHelpBox( 'config-db-host-oracle-help' ) ) . + Html::openElement( 'fieldset' ) . + Html::element( 'legend', array(), wfMsg( 'config-db-wiki-settings' ) ) . + $this->getTextBox( 'wgDBprefix', 'config-db-prefix' ) . + $this->getTextBox( '_OracleDefTS', 'config-oracle-def-ts' ) . + $this->getTextBox( '_OracleTempTS', 'config-oracle-temp-ts', array(), $this->parent->getHelpBox( 'config-db-oracle-help' ) ) . + Html::closeElement( 'fieldset' ) . + $this->parent->getWarningBox( wfMsg( 'config-db-account-oracle-warn' ) ). + $this->getInstallUserBox(). + $this->getWebUserBox(); + } + + public function submitInstallUserBox() { + parent::submitInstallUserBox(); + $this->parent->setVar( '_InstallDBname', $this->getVar( '_InstallUser' ) ); + return Status::newGood(); + } + + public function submitConnectForm() { + // Get variables from the request + $newValues = $this->setVarsFromRequest( array( 'wgDBserver', 'wgDBprefix', 'wgDBuser', 'wgDBpassword' ) ); + $this->parent->setVar( 'wgDBname', $this->getVar( 'wgDBuser' ) ); + + // Validate them + $status = Status::newGood(); + if ( !strlen( $newValues['wgDBserver'] ) ) { + $status->fatal( 'config-missing-db-server-oracle' ); + } elseif ( !preg_match( '/^[a-zA-Z0-9_\.]+$/', $newValues['wgDBserver'] ) ) { + $status->fatal( 'config-invalid-db-server-oracle', $newValues['wgDBserver'] ); + } + if ( !preg_match( '/^[a-zA-Z0-9_]*$/', $newValues['wgDBprefix'] ) ) { + $status->fatal( 'config-invalid-schema', $newValues['wgDBprefix'] ); + } + if ( !$status->isOK() ) { + return $status; + } + + // Submit user box + $status = $this->submitInstallUserBox(); + if ( !$status->isOK() ) { + return $status; + } + + // Try to connect trough multiple scenarios + // Scenario 1: Install with a manually created account + $status = $this->getConnection(); + if ( !$status->isOK() ) { + if ( $this->connError == 28009 ) { + // _InstallUser seems to be a SYSDBA + // Scenario 2: Create user with SYSDBA and install with new user + $status = $this->submitWebUserBox(); + if ( !$status->isOK() ) { + return $status; + } + $status = $this->openSYSDBAConnection(); + if ( !$status->isOK() ) { + return $status; + } + if ( !$this->getVar( '_CreateDBAccount' ) ) { + $status->fatal('config-db-sys-create-oracle'); + } + } else { + return $status; + } + } else { + // check for web user credentials + // Scenario 3: Install with a priviliged user but use a restricted user + $statusIS3 = $this->submitWebUserBox(); + if ( !$statusIS3->isOK() ) { + return $statusIS3; + } + } + $conn = $status->value; + + // Check version + $version = $conn->getServerVersion(); + if ( version_compare( $version, $this->minimumVersion ) < 0 ) { + return Status::newFatal( 'config-oracle-old', $this->minimumVersion, $version ); + } + + return $status; + } + + public function openConnection() { + $status = Status::newGood(); + try { + $db = new DatabaseOracle( + $this->getVar( 'wgDBserver' ), + $this->getVar( '_InstallUser' ), + $this->getVar( '_InstallPassword' ), + $this->getVar( '_InstallDBname' ), + 0, + $this->getVar( 'wgDBprefix' ) + ); + $status->value = $db; + } catch ( DBConnectionError $e ) { + $this->connError = $e->db->lastErrno(); + $status->fatal( 'config-connection-error', $e->getMessage() ); + } + return $status; + } + + public function openSYSDBAConnection() { + $status = Status::newGood(); + try { + $db = new DatabaseOracle( + $this->getVar( 'wgDBserver' ), + $this->getVar( '_InstallUser' ), + $this->getVar( '_InstallPassword' ), + $this->getVar( '_InstallDBname' ), + DBO_SYSDBA, + $this->getVar( 'wgDBprefix' ) + ); + $status->value = $db; + } catch ( DBConnectionError $e ) { + $this->connError = $e->db->lastErrno(); + $status->fatal( 'config-connection-error', $e->getMessage() ); + } + return $status; + } + + public function needsUpgrade() { + $tempDBname = $this->getVar( 'wgDBname' ); + $this->parent->setVar( 'wgDBname', $this->getVar( 'wgDBuser' ) ); + $retVal = parent::needsUpgrade(); + $this->parent->setVar( 'wgDBname', $tempDBname ); + return $retVal; + } + + public function preInstall() { + # Add our user callback to installSteps, right before the tables are created. + $callback = array( + 'name' => 'user', + 'callback' => array( $this, 'setupUser' ) + ); + $this->parent->addInstallStep( $callback, 'database' ); + } + + + public function setupDatabase() { + $status = Status::newGood(); + return $status; + } + + public function setupUser() { + global $IP; + + if ( !$this->getVar( '_CreateDBAccount' ) ) { + return Status::newGood(); + } + + // normaly only SYSDBA users can create accounts + $status = $this->openSYSDBAConnection(); + if ( !$status->isOK() ) { + if ( $this->connError == 1031 ) { + // insufficient privileges (looks like a normal user) + $status = $this->openConnection(); + if ( !$status->isOK() ) { + return $status; + } + } else { + return $status; + } + } + $this->db = $status->value; + $this->setupSchemaVars(); + + if ( !$this->db->selectDB( $this->getVar( 'wgDBuser' ) ) ) { + $this->db->setFlag( DBO_DDLMODE ); + $error = $this->db->sourceFile( "$IP/maintenance/oracle/user.sql" ); + if ( $error !== true || !$this->db->selectDB( $this->getVar( 'wgDBuser' ) ) ) { + $status->fatal( 'config-install-user-failed', $this->getVar( 'wgDBuser' ), $error ); + } + } elseif ( $this->db->getFlag( DBO_SYSDBA ) ) { + $status->fatal( 'config-db-sys-user-exists-oracle', $this->getVar( 'wgDBuser' ) ); + } + + if ($status->isOK()) { + // user created or already existing, switching back to a normal connection + // as the new user has all needed privileges to setup the rest of the schema + // i will be using that user as _InstallUser from this point on + $this->parent->setVar( '_InstallUser', $this->getVar( 'wgDBuser' ) ); + $this->parent->setVar( '_InstallPassword', $this->getVar( 'wgDBpassword' ) ); + $this->parent->setVar( '_InstallDBname', $this->getVar( 'wgDBuser' ) ); + $status = $this->getConnection(); + } + + return $status; + } + + /** + * Overload: after this action field info table has to be rebuilt + */ + public function createTables() { + $this->setupSchemaVars(); + $this->db->selectDB( $this->getVar( 'wgDBuser' ) ); + $this->db->setFlag( DBO_DDLMODE ); + $status = parent::createTables(); + $this->db->clearFlag( DBO_DDLMODE ); + + $this->db->query( 'BEGIN fill_wiki_info; END;' ); + + return $status; + } + + public function getSchemaVars() { + $varNames = array( + # These variables are used by maintenance/oracle/user.sql + '_OracleDefTS', + '_OracleTempTS', + 'wgDBuser', + 'wgDBpassword', + + # These are used by tables.sql + 'wgDBprefix', + ); + $vars = array(); + foreach ( $varNames as $name ) { + $vars[$name] = $this->getVar( $name ); + } + return $vars; + } + + public function getLocalSettings() { + $prefix = $this->getVar( 'wgDBprefix' ); + return +"# Oracle specific settings +\$wgDBprefix = \"{$prefix}\"; +"; + } + +} diff --git a/includes/installer/OracleUpdater.php b/includes/installer/OracleUpdater.php new file mode 100644 index 00000000..4d85924e --- /dev/null +++ b/includes/installer/OracleUpdater.php @@ -0,0 +1,114 @@ +output( "Altering namespace fields with default value ... " ); + $meta = $this->db->fieldInfo( 'page', 'page_namespace' ); + if ( $meta->defaultValue() != null ) { + $this->output( "defaults seem to present on namespace fields\n" ); + return; + } + + $this->applyPatch( 'patch_namespace_defaults.sql', false ); + $this->output( "ok\n" ); + } + + /** + * Uniform FK names + deferrable state + */ + protected function doFKRenameDeferr() { + $this->output( "Altering foreign keys ... " ); + $meta = $this->db->query( 'SELECT COUNT(*) cnt FROM user_constraints WHERE constraint_type = \'R\' AND deferrable = \'DEFERRABLE\'' ); + $row = $meta->fetchRow(); + if ( $row && $row['cnt'] > 0 ) { + $this->output( "at least one FK is deferrable, considering up to date\n" ); + return; + } + + $this->applyPatch( 'patch_fk_rename_deferred.sql', false ); + $this->output( "ok\n" ); + } + + /** + * Recreate functions to 17 schema layout + */ + protected function doFunctions17() { + $this->output( "Recreating functions ... " ); + $this->applyPatch( 'patch_create_17_functions.sql', false ); + $this->output( "ok\n" ); + } + + /** + * Schema upgrade 16->17 + * there are no incremental patches prior to this + */ + protected function doSchemaUpgrade17() { + $this->output( "Updating schema to 17 ... " ); + // check if iwlinks table exists which was added in 1.17 + if ( $this->db->tableExists( $this->db->tableName( 'iwlinks' ) ) ) { + $this->output( "schema seem to be up to date.\n" ); + return; + } + $this->applyPatch( 'patch_16_17_schema_changes.sql', false ); + $this->output( "ok\n" ); + } + + /** + * Insert page (page_id = 0) to prevent FK constraint violation + */ + protected function doInsertPage0() { + $this->output( "Inserting page 0 if missing ... " ); + $row = array( + 'page_id' => 0, + 'page_namespace' => 0, + 'page_title' => ' ', + 'page_counter' => 0, + 'page_is_redirect' => 0, + 'page_is_new' => 0, + 'page_random' => 0, + 'page_touched' => $this->db->timestamp(), + 'page_latest' => 0, + 'page_len' => 0 + ); + $this->db->insert( 'page', $row, 'OracleUpdater:doInserPage0', array( 'IGNORE' ) ); + $this->output( "ok\n" ); + } + + /** + * Overload: after this action field info table has to be rebuilt + */ + public function doUpdates( $what = array( 'core', 'extensions', 'purge' ) ) { + parent::doUpdates( $what ); + + $this->db->query( 'BEGIN fill_wiki_info; END;' ); + } + +} diff --git a/includes/installer/PhpBugTests.php b/includes/installer/PhpBugTests.php new file mode 100644 index 00000000..9cafd150 --- /dev/null +++ b/includes/installer/PhpBugTests.php @@ -0,0 +1,72 @@ +c'; + $xml = '
    ' . htmlspecialchars( $charData ) . ''; + + $parser = xml_parser_create(); + xml_set_character_data_handler( $parser, array( $this, 'chardata' ) ); + $parsedOk = xml_parse( $parser, $xml, true ); + $this->ok = $parsedOk && ( $this->parsedData == $charData ); + } + public function chardata( $parser, $data ) { + $this->parsedData .= $data; + } +} + +/** + * Test for PHP bug #50394 (PHP 5.3.x conversion to null only, not 5.2.x) + * @see http://bugs.php.net/bug.php?id=45996 + * @ingroup PHPBugTests + */ +class PhpRefCallBugTester { + public $ok = false; + + function __call( $name, $args ) { + $old = error_reporting( E_ALL & ~E_WARNING ); + call_user_func_array( array( $this, 'checkForBrokenRef' ), $args ); + error_reporting( $old ); + } + + function checkForBrokenRef( &$var ) { + if ( $var ) { + $this->ok = true; + } + } + + function execute() { + $var = true; + call_user_func_array( array( $this, 'foo' ), array( &$var ) ); + } +} diff --git a/includes/installer/PostgresInstaller.php b/includes/installer/PostgresInstaller.php new file mode 100644 index 00000000..20575b62 --- /dev/null +++ b/includes/installer/PostgresInstaller.php @@ -0,0 +1,601 @@ + 'postgres', + ); + + var $minimumVersion = '8.3'; + var $maxRoleSearchDepth = 5; + + protected $pgConns = array(); + + function getName() { + return 'postgres'; + } + + public function isCompiled() { + return self::checkExtension( 'pgsql' ); + } + + function getConnectForm() { + return + $this->getTextBox( 'wgDBserver', 'config-db-host', array(), $this->parent->getHelpBox( 'config-db-host-help' ) ) . + $this->getTextBox( 'wgDBport', 'config-db-port' ) . + Html::openElement( 'fieldset' ) . + Html::element( 'legend', array(), wfMsg( 'config-db-wiki-settings' ) ) . + $this->getTextBox( 'wgDBname', 'config-db-name', array(), $this->parent->getHelpBox( 'config-db-name-help' ) ) . + $this->getTextBox( 'wgDBmwschema', 'config-db-schema', array(), $this->parent->getHelpBox( 'config-db-schema-help' ) ) . + Html::closeElement( 'fieldset' ) . + $this->getInstallUserBox(); + } + + function submitConnectForm() { + // Get variables from the request + $newValues = $this->setVarsFromRequest( array( 'wgDBserver', 'wgDBport', + 'wgDBname', 'wgDBmwschema' ) ); + + // Validate them + $status = Status::newGood(); + if ( !strlen( $newValues['wgDBname'] ) ) { + $status->fatal( 'config-missing-db-name' ); + } elseif ( !preg_match( '/^[a-zA-Z0-9_]+$/', $newValues['wgDBname'] ) ) { + $status->fatal( 'config-invalid-db-name', $newValues['wgDBname'] ); + } + if ( !preg_match( '/^[a-zA-Z0-9_]*$/', $newValues['wgDBmwschema'] ) ) { + $status->fatal( 'config-invalid-schema', $newValues['wgDBmwschema'] ); + } + + // Submit user box + if ( $status->isOK() ) { + $status->merge( $this->submitInstallUserBox() ); + } + if ( !$status->isOK() ) { + return $status; + } + + $status = $this->getPgConnection( 'create-db' ); + if ( !$status->isOK() ) { + return $status; + } + $conn = $status->value; + + // Check version + $version = $conn->getServerVersion(); + if ( version_compare( $version, $this->minimumVersion ) < 0 ) { + return Status::newFatal( 'config-postgres-old', $this->minimumVersion, $version ); + } + + $this->setVar( 'wgDBuser', $this->getVar( '_InstallUser' ) ); + $this->setVar( 'wgDBpassword', $this->getVar( '_InstallPassword' ) ); + return Status::newGood(); + } + + public function getConnection() { + $status = $this->getPgConnection( 'create-tables' ); + if ( $status->isOK() ) { + $this->db = $status->value; + } + return $status; + } + + public function openConnection() { + return $this->openPgConnection( 'create-tables' ); + } + + /** + * Open a PG connection with given parameters + * @param $user User name + * @param $password Password + * @param $dbName Database name + * @return Status + */ + protected function openConnectionWithParams( $user, $password, $dbName ) { + $status = Status::newGood(); + try { + $GLOBALS['wgDBport'] = $this->getVar( 'wgDBport' ); + $db = new DatabasePostgres( + $this->getVar( 'wgDBserver' ), + $user, + $password, + $dbName); + $status->value = $db; + } catch ( DBConnectionError $e ) { + $status->fatal( 'config-connection-error', $e->getMessage() ); + } + return $status; + } + + /** + * Get a special type of connection + * @param $type See openPgConnection() for details. + * @return Status + */ + protected function getPgConnection( $type ) { + if ( isset( $this->pgConns[$type] ) ) { + return Status::newGood( $this->pgConns[$type] ); + } + $status = $this->openPgConnection( $type ); + + if ( $status->isOK() ) { + $conn = $status->value; + $conn->clearFlag( DBO_TRX ); + $conn->commit(); + $this->pgConns[$type] = $conn; + } + return $status; + } + + /** + * Get a connection of a specific PostgreSQL-specific type. Connections + * of a given type are cached. + * + * PostgreSQL lacks cross-database operations, so after the new database is + * created, you need to make a separate connection to connect to that + * database and add tables to it. + * + * New tables are owned by the user that creates them, and MediaWiki's + * PostgreSQL support has always assumed that the table owner will be + * $wgDBuser. So before we create new tables, we either need to either + * connect as the other user or to execute a SET ROLE command. Using a + * separate connection for this allows us to avoid accidental cross-module + * dependencies. + * + * @param $type The type of connection to get: + * - create-db: A connection for creating DBs, suitable for pre- + * installation. + * - create-schema: A connection to the new DB, for creating schemas and + * other similar objects in the new DB. + * - create-tables: A connection with a role suitable for creating tables. + * + * @return A Status object. On success, a connection object will be in the + * value member. + */ + protected function openPgConnection( $type ) { + switch ( $type ) { + case 'create-db': + return $this->openConnectionToAnyDB( + $this->getVar( '_InstallUser' ), + $this->getVar( '_InstallPassword' ) ); + case 'create-schema': + return $this->openConnectionWithParams( + $this->getVar( '_InstallUser' ), + $this->getVar( '_InstallPassword' ), + $this->getVar( 'wgDBname' ) ); + case 'create-tables': + $status = $this->openPgConnection( 'create-schema' ); + if ( $status->isOK() ) { + $conn = $status->value; + $safeRole = $conn->addIdentifierQuotes( $this->getVar( 'wgDBuser' ) ); + $conn->query( "SET ROLE $safeRole" ); + } + return $status; + default: + throw new MWException( "Invalid special connection type: \"$type\"" ); + } + } + + public function openConnectionToAnyDB( $user, $password ) { + $dbs = array( + 'template1', + 'postgres', + ); + if ( !in_array( $this->getVar( 'wgDBname' ), $dbs ) ) { + array_unshift( $dbs, $this->getVar( 'wgDBname' ) ); + } + $status = Status::newGood(); + foreach ( $dbs as $db ) { + try { + $GLOBALS['wgDBport'] = $this->getVar( 'wgDBport' ); + $conn = new DatabasePostgres( + $this->getVar( 'wgDBserver' ), + $user, + $password, + $db ); + } catch ( DBConnectionError $error ) { + $conn = false; + $status->fatal( 'config-pg-test-error', $db, + $error->getMessage() ); + } + if ( $conn !== false ) { + break; + } + } + if ( $conn !== false ) { + return Status::newGood( $conn ); + } else { + return $status; + } + } + + protected function getInstallUserPermissions() { + $status = $this->getPgConnection( 'create-db' ); + if ( !$status->isOK() ) { + return false; + } + $conn = $status->value; + $superuser = $this->getVar( '_InstallUser' ); + + $row = $conn->selectRow( '"pg_catalog"."pg_roles"', '*', + array( 'rolname' => $superuser ), __METHOD__ ); + return $row; + } + + protected function canCreateAccounts() { + $perms = $this->getInstallUserPermissions(); + if ( !$perms ) { + return false; + } + return $perms->rolsuper === 't' || $perms->rolcreaterole === 't'; + } + + protected function isSuperUser() { + $perms = $this->getInstallUserPermissions(); + if ( !$perms ) { + return false; + } + return $perms->rolsuper === 't'; + } + + public function getSettingsForm() { + if ( $this->canCreateAccounts() ) { + $noCreateMsg = false; + } else { + $noCreateMsg = 'config-db-web-no-create-privs'; + } + $s = $this->getWebUserBox( $noCreateMsg ); + + return $s; + } + + public function submitSettingsForm() { + $status = $this->submitWebUserBox(); + if ( !$status->isOK() ) { + return $status; + } + + $same = $this->getVar( 'wgDBuser' ) === $this->getVar( '_InstallUser' ); + + if ( $same ) { + $exists = true; + } else { + // Check if the web user exists + // Connect to the database with the install user + $status = $this->getPgConnection( 'create-db' ); + if ( !$status->isOK() ) { + return $status; + } + $exists = $status->value->roleExists( $this->getVar( 'wgDBuser' ) ); + } + + // Validate the create checkbox + if ( $this->canCreateAccounts() && !$same && !$exists ) { + $create = $this->getVar( '_CreateDBAccount' ); + } else { + $this->setVar( '_CreateDBAccount', false ); + $create = false; + } + + if ( !$create && !$exists ) { + if ( $this->canCreateAccounts() ) { + $msg = 'config-install-user-missing-create'; + } else { + $msg = 'config-install-user-missing'; + } + return Status::newFatal( $msg, $this->getVar( 'wgDBuser' ) ); + } + + if ( !$exists ) { + // No more checks to do + return Status::newGood(); + } + + // Existing web account. Test the connection. + $status = $this->openConnectionToAnyDB( + $this->getVar( 'wgDBuser' ), + $this->getVar( 'wgDBpassword' ) ); + if ( !$status->isOK() ) { + return $status; + } + + // The web user is conventionally the table owner in PostgreSQL + // installations. Make sure the install user is able to create + // objects on behalf of the web user. + if ( $same || $this->canCreateObjectsForWebUser() ) { + return Status::newGood(); + } else { + return Status::newFatal( 'config-pg-not-in-role' ); + } + } + + /** + * Returns true if the install user is able to create objects owned + * by the web user, false otherwise. + */ + protected function canCreateObjectsForWebUser() { + if ( $this->isSuperUser() ) { + return true; + } + + $status = $this->getPgConnection( 'create-db' ); + if ( !$status->isOK() ) { + return false; + } + $conn = $status->value; + $installerId = $conn->selectField( '"pg_catalog"."pg_roles"', 'oid', + array( 'rolname' => $this->getVar( '_InstallUser' ) ), __METHOD__ ); + $webId = $conn->selectField( '"pg_catalog"."pg_roles"', 'oid', + array( 'rolname' => $this->getVar( 'wgDBuser' ) ), __METHOD__ ); + + return $this->isRoleMember( $conn, $installerId, $webId, $this->maxRoleSearchDepth ); + } + + /** + * Recursive helper for canCreateObjectsForWebUser(). + * @param $conn Database object + * @param $targetMember Role ID of the member to look for + * @param $group Role ID of the group to look for + * @param $maxDepth Maximum recursive search depth + */ + protected function isRoleMember( $conn, $targetMember, $group, $maxDepth ) { + if ( $targetMember === $group ) { + // A role is always a member of itself + return true; + } + // Get all members of the given group + $res = $conn->select( '"pg_catalog"."pg_auth_members"', array( 'member' ), + array( 'roleid' => $group ), __METHOD__ ); + foreach ( $res as $row ) { + if ( $row->member == $targetMember ) { + // Found target member + return true; + } + // Recursively search each member of the group to see if the target + // is a member of it, up to the given maximum depth. + if ( $maxDepth > 0 ) { + if ( $this->isRoleMember( $conn, $targetMember, $row->member, $maxDepth - 1 ) ) { + // Found member of member + return true; + } + } + } + return false; + } + + public function preInstall() { + $commitCB = array( + 'name' => 'pg-commit', + 'callback' => array( $this, 'commitChanges' ), + ); + $plpgCB = array( + 'name' => 'pg-plpgsql', + 'callback' => array( $this, 'setupPLpgSQL' ), + ); + $schemaCB = array( + 'name' => 'schema', + 'callback' => array( $this, 'setupSchema' ) + ); + $this->parent->addInstallStep( $commitCB, 'interwiki' ); + $this->parent->addInstallStep( $plpgCB, 'database' ); + $this->parent->addInstallStep( $schemaCB, 'database' ); + if( $this->getVar( '_CreateDBAccount' ) ) { + $this->parent->addInstallStep( array( + 'name' => 'user', + 'callback' => array( $this, 'setupUser' ), + ) ); + } + } + + function setupDatabase() { + $status = $this->getPgConnection( 'create-db' ); + if ( !$status->isOK() ) { + return $status; + } + $conn = $status->value; + + $dbName = $this->getVar( 'wgDBname' ); + $schema = $this->getVar( 'wgDBmwschema' ); + $user = $this->getVar( 'wgDBuser' ); + $safeschema = $conn->addIdentifierQuotes( $schema ); + $safeuser = $conn->addIdentifierQuotes( $user ); + + $exists = $conn->selectField( '"pg_catalog"."pg_database"', '1', + array( 'datname' => $dbName ), __METHOD__ ); + if ( !$exists ) { + $safedb = $conn->addIdentifierQuotes( $dbName ); + $conn->query( "CREATE DATABASE $safedb", __METHOD__ ); + } + return Status::newGood(); + } + + function setupSchema() { + // Get a connection to the target database + $status = $this->getPgConnection( 'create-schema' ); + if ( !$status->isOK() ) { + return $status; + } + $conn = $status->value; + + // Create the schema if necessary + $schema = $this->getVar( 'wgDBmwschema' ); + $safeschema = $conn->addIdentifierQuotes( $schema ); + $safeuser = $conn->addIdentifierQuotes( $this->getVar( 'wgDBuser' ) ); + if( !$conn->schemaExists( $schema ) ) { + try { + $conn->query( "CREATE SCHEMA $safeschema AUTHORIZATION $safeuser" ); + } catch ( DBQueryError $e ) { + return Status::newFatal( 'config-install-pg-schema-failed', + $this->getVar( '_InstallUser' ), $schema ); + } + } + + // If we created a user, alter it now to search the new schema by default + if ( $this->getVar( '_CreateDBAccount' ) ) { + $conn->query( "ALTER ROLE $safeuser SET search_path = $safeschema, public", + __METHOD__ ); + } + + // Select the new schema in the current connection + $conn->query( "SET search_path = $safeschema" ); + return Status::newGood(); + } + + function commitChanges() { + $this->db->query( 'COMMIT' ); + return Status::newGood(); + } + + function setupUser() { + if ( !$this->getVar( '_CreateDBAccount' ) ) { + return Status::newGood(); + } + + $status = $this->getPgConnection( 'create-db' ); + if ( !$status->isOK() ) { + return $status; + } + $conn = $status->value; + + $schema = $this->getVar( 'wgDBmwschema' ); + $safeuser = $conn->addIdentifierQuotes( $this->getVar( 'wgDBuser' ) ); + $safepass = $conn->addQuotes( $this->getVar( 'wgDBpassword' ) ); + $safeschema = $conn->addIdentifierQuotes( $schema ); + + // Check if the user already exists + $userExists = $conn->roleExists( $this->getVar( 'wgDBuser' ) ); + if ( !$userExists ) { + // Create the user + try { + $sql = "CREATE ROLE $safeuser NOCREATEDB LOGIN PASSWORD $safepass"; + + // If the install user is not a superuser, we need to make the install + // user a member of the new user's group, so that the install user will + // be able to create a schema and other objects on behalf of the new user. + if ( !$this->isSuperUser() ) { + $sql .= ' ROLE' . $conn->addIdentifierQuotes( $this->getVar( '_InstallUser' ) ); + } + + $conn->query( $sql, __METHOD__ ); + } catch ( DBQueryError $e ) { + return Status::newFatal( 'config-install-user-create-failed', + $this->getVar( 'wgDBuser' ), $e->getMessage() ); + } + } + + return Status::newGood(); + } + + function getLocalSettings() { + $port = $this->getVar( 'wgDBport' ); + $schema = $this->getVar( 'wgDBmwschema' ); + return +"# Postgres specific settings +\$wgDBport = \"{$port}\"; +\$wgDBmwschema = \"{$schema}\";"; + } + + public function preUpgrade() { + global $wgDBuser, $wgDBpassword; + + # Normal user and password are selected after this step, so for now + # just copy these two + $wgDBuser = $this->getVar( '_InstallUser' ); + $wgDBpassword = $this->getVar( '_InstallPassword' ); + } + + public function createTables() { + $schema = $this->getVar( 'wgDBmwschema' ); + + $status = $this->getConnection(); + if ( !$status->isOK() ) { + return $status; + } + $conn = $status->value; + + if( $conn->tableExists( 'user' ) ) { + $status->warning( 'config-install-tables-exist' ); + return $status; + } + + $conn->begin( __METHOD__ ); + + if( !$conn->schemaExists( $schema ) ) { + $status->fatal( 'config-install-pg-schema-not-exist' ); + return $status; + } + $error = $conn->sourceFile( $conn->getSchema() ); + if( $error !== true ) { + $conn->reportQueryError( $error, 0, '', __METHOD__ ); + $conn->rollback( __METHOD__ ); + $status->fatal( 'config-install-tables-failed', $error ); + } else { + $conn->commit( __METHOD__ ); + } + // Resume normal operations + if( $status->isOk() ) { + $this->enableLB(); + } + return $status; + } + + public function setupPLpgSQL() { + // Connect as the install user, since it owns the database and so is + // the user that needs to run "CREATE LANGAUGE" + $status = $this->getPgConnection( 'create-schema' ); + if ( !$status->isOK() ) { + return $status; + } + $conn = $status->value; + + $exists = $conn->selectField( '"pg_catalog"."pg_language"', 1, + array( 'lanname' => 'plpgsql' ), __METHOD__ ); + if ( $exists ) { + // Already exists, nothing to do + return Status::newGood(); + } + + // plpgsql is not installed, but if we have a pg_pltemplate table, we + // should be able to create it + $exists = $conn->selectField( + array( '"pg_catalog"."pg_class"', '"pg_catalog"."pg_namespace"' ), + 1, + array( + 'pg_namespace.oid=relnamespace', + 'nspname' => 'pg_catalog', + 'relname' => 'pg_pltemplate', + ), + __METHOD__ ); + if ( $exists ) { + try { + $conn->query( 'CREATE LANGUAGE plpgsql' ); + } catch ( DBQueryError $e ) { + return Status::newFatal( 'config-pg-no-plpgsql', $this->getVar( 'wgDBname' ) ); + } + } else { + return Status::newFatal( 'config-pg-no-plpgsql', $this->getVar( 'wgDBname' ) ); + } + return Status::newGood(); + } +} diff --git a/includes/installer/PostgresUpdater.php b/includes/installer/PostgresUpdater.php new file mode 100644 index 00000000..272638ce --- /dev/null +++ b/includes/installer/PostgresUpdater.php @@ -0,0 +1,628 @@ + 0 + AND relname=%s AND nspname=%s +END; + $res = $this->db->query( sprintf( $q, + $this->db->addQuotes( $table ), + $this->db->addQuotes( $wgDBmwschema ) ) ); + if ( !$res ) { + return null; + } + + $cols = array(); + foreach ( $res as $r ) { + $cols[] = array( + "name" => $r[0], + "ord" => $r[1], + ); + } + return $cols; + } + + function describeIndex( $idx ) { + global $wgDBmwschema; + + // first fetch the key (which is a list of columns ords) and + // the table the index applies to (an oid) + $q = <<db->query( + sprintf( + $q, + $this->db->addQuotes( $wgDBmwschema ), + $this->db->addQuotes( $idx ) + ) + ); + if ( !$res ) { + return null; + } + if ( !( $r = $this->db->fetchRow( $res ) ) ) { + return null; + } + + $indkey = $r[0]; + $relid = intval( $r[1] ); + $indkeys = explode( ' ', $indkey ); + + $colnames = array(); + foreach ( $indkeys as $rid ) { + $query = <<db->query( sprintf( $query, $rid ) ); + if ( !$r2 ) { + return null; + } + if ( !( $row2 = $this->db->fetchRow( $r2 ) ) ) { + return null; + } + $colnames[] = $row2[0]; + } + + return $colnames; + } + + function fkeyDeltype( $fkey ) { + global $wgDBmwschema; + $q = <<db->query( + sprintf( + $q, + $this->db->addQuotes( $wgDBmwschema ), + $this->db->addQuotes( $fkey ) + ) + ); + if ( !( $row = $this->db->fetchRow( $r ) ) ) { + return null; + } + return $row[0]; + } + + function ruleDef( $table, $rule ) { + global $wgDBmwschema; + $q = <<db->query( + sprintf( + $q, + $this->db->addQuotes( $wgDBmwschema ), + $this->db->addQuotes( $table ), + $this->db->addQuotes( $rule ) + ) + ); + $row = $this->db->fetchRow( $r ); + if ( !$row ) { + return null; + } + $d = $row[0]; + return $d; + } + + protected function addSequence( $ns ) { + if ( !$this->db->sequenceExists( $ns ) ) { + $this->output( "Creating sequence $ns\n" ); + $this->db->query( "CREATE SEQUENCE $ns" ); + } + } + + protected function renameSequence( $old, $new ) { + if ( $this->db->sequenceExists( $old ) ) { + $this->output( "Renaming sequence $old to $new\n" ); + $this->db->query( "ALTER SEQUENCE $old RENAME TO $new" ); + } + } + + protected function renameTable( $old, $new ) { + if ( $this->db->tableExists( $old ) ) { + $this->output( "Renaming table $old to $new\n" ); + $old = $this->db->addQuotes( $old ); + $this->db->query( "ALTER TABLE $old RENAME TO $new" ); + } + } + + protected function addPgField( $table, $field, $type ) { + $fi = $this->db->fieldInfo( $table, $field ); + if ( !is_null( $fi ) ) { + $this->output( "... column '$table.$field' already exists\n" ); + return; + } else { + $this->output( "Adding column '$table.$field'\n" ); + $this->db->query( "ALTER TABLE $table ADD $field $type" ); + } + } + + protected function changeField( $table, $field, $newtype, $default ) { + $fi = $this->db->fieldInfo( $table, $field ); + if ( is_null( $fi ) ) { + $this->output( "... error: expected column $table.$field to exist\n" ); + exit( 1 ); + } + + if ( $fi->type() === $newtype ) + $this->output( "... column '$table.$field' is already of type '$newtype'\n" ); + else { + $this->output( "Changing column type of '$table.$field' from '{$fi->type()}' to '$newtype'\n" ); + $sql = "ALTER TABLE $table ALTER $field TYPE $newtype"; + if ( strlen( $default ) ) { + $res = array(); + if ( preg_match( '/DEFAULT (.+)/', $default, $res ) ) { + $sqldef = "ALTER TABLE $table ALTER $field SET DEFAULT $res[1]"; + $this->db->query( $sqldef ); + $default = preg_replace( '/\s*DEFAULT .+/', '', $default ); + } + $sql .= " USING $default"; + } + $sql .= ";\nCOMMIT;\n"; + $this->db->query( $sql ); + } + } + + protected function changeNullableField( $table, $field, $null ) { + $fi = $this->db->fieldInfo( $table, $field ); + if ( is_null( $fi ) ) { + $this->output( "... error: expected column $table.$field to exist\n" ); + exit( 1 ); + } + if ( $fi->isNullable() ) { + # # It's NULL - does it need to be NOT NULL? + if ( 'NOT NULL' === $null ) { + $this->output( "Changing '$table.$field' to not allow NULLs\n" ); + $this->db->query( "ALTER TABLE $table ALTER $field SET NOT NULL" ); + } else { + $this->output( "... column '$table.$field' is already set as NULL\n" ); + } + } else { + # # It's NOT NULL - does it need to be NULL? + if ( 'NULL' === $null ) { + $this->output( "Changing '$table.$field' to allow NULLs\n" ); + $this->db->query( "ALTER TABLE $table ALTER $field DROP NOT NULL" ); + } + else { + $this->output( "... column '$table.$field' is already set as NOT NULL\n" ); + } + } + } + + public function addPgIndex( $table, $index, $type ) { + if ( $this->db->indexExists( $table, $index ) ) { + $this->output( "... index '$index' on table '$table' already exists\n" ); + } else { + $this->output( "Creating index '$index' on table '$table' $type\n" ); + $this->db->query( "CREATE INDEX $index ON $table $type" ); + } + } + + public function addPgExtIndex( $table, $index, $type ) { + if ( $this->db->indexExists( $table, $index ) ) { + $this->output( "... index '$index' on table '$table' already exists\n" ); + } else { + $this->output( "Creating index '$index' on table '$table'\n" ); + if ( preg_match( '/^\(/', $type ) ) { + $this->db->query( "CREATE INDEX $index ON $table $type" ); + } else { + $this->applyPatch( $type, true ); + } + } + } + + protected function changeFkeyDeferrable( $table, $field, $clause ) { + $fi = $this->db->fieldInfo( $table, $field ); + if ( is_null( $fi ) ) { + $this->output( "WARNING! Column '$table.$field' does not exist but it should! Please report this.\n" ); + return; + } + if ( $fi->is_deferred() && $fi->is_deferrable() ) { + return; + } + $this->output( "Altering column '$table.$field' to be DEFERRABLE INITIALLY DEFERRED\n" ); + $conname = $fi->conname(); + $command = "ALTER TABLE $table DROP CONSTRAINT $conname"; + $this->db->query( $command ); + $command = "ALTER TABLE $table ADD CONSTRAINT $conname FOREIGN KEY ($field) REFERENCES $clause DEFERRABLE INITIALLY DEFERRED"; + $this->db->query( $command ); + } + + protected function convertArchive2() { + if ( $this->db->tableExists( "archive2" ) ) { + $this->output( "Converting 'archive2' back to normal archive table\n" ); + if ( $this->db->ruleExists( 'archive', 'archive_insert' ) ) { + $this->output( "Dropping rule 'archive_insert'\n" ); + $this->db->query( 'DROP RULE archive_insert ON archive' ); + } + if ( $this->db->ruleExists( 'archive', 'archive_delete' ) ) { + $this->output( "Dropping rule 'archive_delete'\n" ); + $this->db->query( 'DROP RULE archive_delete ON archive' ); + } + $this->applyPatch( 'patch-remove-archive2.sql' ); + } else { + $this->output( "... obsolete table 'archive2' does not exist\n" ); + } + } + + protected function checkOiDeleted() { + if ( $this->db->fieldInfo( 'oldimage', 'oi_deleted' )->type() !== 'smallint' ) { + $this->output( "Changing 'oldimage.oi_deleted' to type 'smallint'\n" ); + $this->db->query( "ALTER TABLE oldimage ALTER oi_deleted DROP DEFAULT" ); + $this->db->query( "ALTER TABLE oldimage ALTER oi_deleted TYPE SMALLINT USING (oi_deleted::smallint)" ); + $this->db->query( "ALTER TABLE oldimage ALTER oi_deleted SET DEFAULT 0" ); + } else { + $this->output( "... column 'oldimage.oi_deleted' is already of type 'smallint'\n" ); + } + } + + protected function checkOiNameConstraint() { + if ( $this->db->hasConstraint( "oldimage_oi_name_fkey_cascaded" ) ) { + $this->output( "... table 'oldimage' has correct cascading delete/update foreign key to image\n" ); + } else { + if ( $this->db->hasConstraint( "oldimage_oi_name_fkey" ) ) { + $this->db->query( "ALTER TABLE oldimage DROP CONSTRAINT oldimage_oi_name_fkey" ); + } + if ( $this->db->hasConstraint( "oldimage_oi_name_fkey_cascade" ) ) { + $this->db->query( "ALTER TABLE oldimage DROP CONSTRAINT oldimage_oi_name_fkey_cascade" ); + } + $this->output( "Making foreign key on table 'oldimage' (to image) a cascade delete/update\n" ); + $this->db->query( "ALTER TABLE oldimage ADD CONSTRAINT oldimage_oi_name_fkey_cascaded " . + "FOREIGN KEY (oi_name) REFERENCES image(img_name) ON DELETE CASCADE ON UPDATE CASCADE" ); + } + } + + protected function checkPageDeletedTrigger() { + if ( !$this->db->triggerExists( 'page', 'page_deleted' ) ) { + $this->output( "Adding function and trigger 'page_deleted' to table 'page'\n" ); + $this->applyPatch( 'patch-page_deleted.sql' ); + } else { + $this->output( "... table 'page' has 'page_deleted' trigger\n" ); + } + } + + protected function checkRcCurIdNullable(){ + $fi = $this->db->fieldInfo( 'recentchanges', 'rc_cur_id' ); + if ( !$fi->isNullable() ) { + $this->output( "Removing NOT NULL constraint from 'recentchanges.rc_cur_id'\n" ); + $this->applyPatch( 'patch-rc_cur_id-not-null.sql' ); + } else { + $this->output( "... column 'recentchanges.rc_cur_id' has a NOT NULL constraint\n" ); + } + } + + protected function checkPagelinkUniqueIndex() { + $pu = $this->describeIndex( 'pagelink_unique' ); + if ( !is_null( $pu ) && ( $pu[0] != 'pl_from' || $pu[1] != 'pl_namespace' || $pu[2] != 'pl_title' ) ) { + $this->output( "Dropping obsolete version of index 'pagelink_unique index'\n" ); + $this->db->query( 'DROP INDEX pagelink_unique' ); + $pu = null; + } else { + $this->output( "... obsolete version of index 'pagelink_unique index' does not exist\n" ); + } + + if ( is_null( $pu ) ) { + $this->output( "Creating index 'pagelink_unique index'\n" ); + $this->db->query( 'CREATE UNIQUE INDEX pagelink_unique ON pagelinks (pl_from,pl_namespace,pl_title)' ); + } else { + $this->output( "... index 'pagelink_unique_index' already exists\n" ); + } + } + + protected function checkRevUserFkey() { + if ( $this->fkeyDeltype( 'revision_rev_user_fkey' ) == 'r' ) { + $this->output( "... constraint 'revision_rev_user_fkey' is ON DELETE RESTRICT\n" ); + } else { + $this->output( "Changing constraint 'revision_rev_user_fkey' to ON DELETE RESTRICT\n" ); + $this->applyPatch( 'patch-revision_rev_user_fkey.sql' ); + } + } + + protected function checkIpbAdress() { + if ( $this->db->indexExists( 'ipblocks', 'ipb_address' ) ) { + $this->output( "Removing deprecated index 'ipb_address'...\n" ); + $this->db->query( 'DROP INDEX ipb_address' ); + } + if ( $this->db->indexExists( 'ipblocks', 'ipb_address_unique' ) ) { + $this->output( "... have ipb_address_unique\n" ); + } else { + $this->output( "Adding ipb_address_unique index\n" ); + $this->applyPatch( 'patch-ipb_address_unique.sql' ); + } + } + + protected function checkIwlPrefix() { + if ( $this->db->indexExists( 'iwlinks', 'iwl_prefix' ) ) { + $this->output( "Replacing index 'iwl_prefix' with 'iwl_prefix_from_title'...\n" ); + $this->applyPatch( 'patch-rename-iwl_prefix.sql' ); + } + } + + protected function tsearchFixes() { + # Tweak the page_title tsearch2 trigger to filter out slashes + # This is create or replace, so harmless to call if not needed + $this->applyPatch( 'patch-ts2pagetitle.sql' ); + + # If the server is 8.3 or higher, rewrite the tsearch2 triggers + # in case they have the old 'default' versions + # Gather version numbers in case we need them + if ( $this->db->getServerVersion() >= 8.3 ) { + $this->applyPatch( 'patch-tsearch2funcs.sql' ); + } + } +} diff --git a/includes/installer/SqliteInstaller.php b/includes/installer/SqliteInstaller.php new file mode 100644 index 00000000..2edb3d9b --- /dev/null +++ b/includes/installer/SqliteInstaller.php @@ -0,0 +1,190 @@ + $path ); + } else { + return array(); + } + } + + public function getConnectForm() { + return $this->getTextBox( 'wgSQLiteDataDir', 'config-sqlite-dir', array(), $this->parent->getHelpBox( 'config-sqlite-dir-help' ) ) . + $this->getTextBox( 'wgDBname', 'config-db-name', array(), $this->parent->getHelpBox( 'config-sqlite-name-help' ) ); + } + + /* + * Safe wrapper for PHP's realpath() that fails gracefully if it's unable to canonicalize the path. + */ + private static function realpath( $path ) { + $result = realpath( $path ); + if ( !$result ) { + return $path; + } + return $result; + } + + public function submitConnectForm() { + $this->setVarsFromRequest( array( 'wgSQLiteDataDir', 'wgDBname' ) ); + + # Try realpath() if the directory already exists + $dir = self::realpath( $this->getVar( 'wgSQLiteDataDir' ) ); + $result = self::dataDirOKmaybeCreate( $dir, true /* create? */ ); + if ( $result->isOK() ) + { + # Try expanding again in case we've just created it + $dir = self::realpath( $dir ); + $this->setVar( 'wgSQLiteDataDir', $dir ); + } + return $result; + } + + private static function dataDirOKmaybeCreate( $dir, $create = false ) { + if ( !is_dir( $dir ) ) { + if ( !is_writable( dirname( $dir ) ) ) { + $webserverGroup = Installer::maybeGetWebserverPrimaryGroup(); + if ( $webserverGroup !== null ) { + return Status::newFatal( 'config-sqlite-parent-unwritable-group', $dir, dirname( $dir ), basename( $dir ), $webserverGroup ); + } else { + return Status::newFatal( 'config-sqlite-parent-unwritable-nogroup', $dir, dirname( $dir ), basename( $dir ) ); + } + } + + # Called early on in the installer, later we just want to sanity check + # if it's still writable + if ( $create ) { + wfSuppressWarnings(); + $ok = wfMkdirParents( $dir, 0700 ); + wfRestoreWarnings(); + if ( !$ok ) { + return Status::newFatal( 'config-sqlite-mkdir-error', $dir ); + } + # Put a .htaccess file in in case the user didn't take our advice + file_put_contents( "$dir/.htaccess", "Deny from all\n" ); + } + } + if ( !is_writable( $dir ) ) { + return Status::newFatal( 'config-sqlite-dir-unwritable', $dir ); + } + + # We haven't blown up yet, fall through + return Status::newGood(); + } + + public function openConnection() { + global $wgSQLiteDataDir; + + $status = Status::newGood(); + $dir = $this->getVar( 'wgSQLiteDataDir' ); + $dbName = $this->getVar( 'wgDBname' ); + try { + # FIXME: need more sensible constructor parameters, e.g. single associative array + # Setting globals kind of sucks + $wgSQLiteDataDir = $dir; + $db = new DatabaseSqlite( false, false, false, $dbName ); + $status->value = $db; + } catch ( DBConnectionError $e ) { + $status->fatal( 'config-sqlite-connection-error', $e->getMessage() ); + } + return $status; + } + + public function needsUpgrade() { + $dir = $this->getVar( 'wgSQLiteDataDir' ); + $dbName = $this->getVar( 'wgDBname' ); + // Don't create the data file yet + if ( !file_exists( DatabaseSqlite::generateFileName( $dir, $dbName ) ) ) { + return false; + } + + // If the data file exists, look inside it + return parent::needsUpgrade(); + } + + public function setupDatabase() { + $dir = $this->getVar( 'wgSQLiteDataDir' ); + + # Sanity check. We checked this before but maybe someone deleted the + # data dir between then and now + $dir_status = self::dataDirOKmaybeCreate( $dir, false /* create? */ ); + if ( !$dir_status->isOK() ) { + return $dir_status; + } + + $db = $this->getVar( 'wgDBname' ); + $file = DatabaseSqlite::generateFileName( $dir, $db ); + if ( file_exists( $file ) ) { + if ( !is_writable( $file ) ) { + return Status::newFatal( 'config-sqlite-readonly', $file ); + } + } else { + if ( file_put_contents( $file, '' ) === false ) { + return Status::newFatal( 'config-sqlite-cant-create-db', $file ); + } + } + // nuke the unused settings for clarity + $this->setVar( 'wgDBserver', '' ); + $this->setVar( 'wgDBuser', '' ); + $this->setVar( 'wgDBpassword', '' ); + $this->setupSchemaVars(); + return $this->getConnection(); + } + + public function createTables() { + $status = parent::createTables(); + return $this->setupSearchIndex( $status ); + } + + public function setupSearchIndex( &$status ) { + global $IP; + + $module = DatabaseSqlite::getFulltextSearchModule(); + $fts3tTable = $this->db->checkForEnabledSearch(); + if ( $fts3tTable && !$module ) { + $status->warning( 'config-sqlite-fts3-downgrade' ); + $this->db->sourceFile( "$IP/maintenance/sqlite/archives/searchindex-no-fts.sql" ); + } elseif ( !$fts3tTable && $module == 'FTS3' ) { + $this->db->sourceFile( "$IP/maintenance/sqlite/archives/searchindex-fts3.sql" ); + } + return $status; + } + + public function getLocalSettings() { + $dir = LocalSettingsGenerator::escapePhpString( $this->getVar( 'wgSQLiteDataDir' ) ); + return +"# SQLite-specific settings +\$wgSQLiteDataDir = \"{$dir}\";"; + } +} diff --git a/includes/installer/SqliteUpdater.php b/includes/installer/SqliteUpdater.php new file mode 100644 index 00000000..d1a6c20b --- /dev/null +++ b/includes/installer/SqliteUpdater.php @@ -0,0 +1,84 @@ +updateRowExists( 'initial_indexes' ) || $this->db->indexExists( 'user', 'user_name' ) ) { + $this->output( "...have initial indexes\n" ); + return; + } + $this->output( "Adding initial indexes..." ); + $this->applyPatch( 'initial-indexes.sql' ); + $this->output( "done\n" ); + } + + protected function sqliteSetupSearchindex() { + $module = DatabaseSqlite::getFulltextSearchModule(); + $fts3tTable = $this->updateRowExists( 'fts3' ); + if ( $fts3tTable && !$module ) { + $this->output( '...PHP is missing FTS3 support, downgrading tables...' ); + $this->applyPatch( 'searchindex-no-fts.sql' ); + $this->output( "done\n" ); + } elseif ( !$fts3tTable && $module == 'FTS3' ) { + $this->output( '...adding FTS3 search capabilities...' ); + $this->applyPatch( 'searchindex-fts3.sql' ); + $this->output( "done\n" ); + } else { + $this->output( "...fulltext search table appears to be in order.\n" ); + } + } +} diff --git a/includes/installer/WebInstaller.php b/includes/installer/WebInstaller.php new file mode 100644 index 00000000..b75db74e --- /dev/null +++ b/includes/installer/WebInstaller.php @@ -0,0 +1,1034 @@ + message + * * Add a WebInstaller_ class + * @var array + */ + public $pageSequence = array( + 'Language', + 'ExistingWiki', + 'Welcome', + 'DBConnect', + 'Upgrade', + 'DBSettings', + 'Name', + 'Options', + 'Install', + 'Complete', + ); + + /** + * Out of sequence pages, selectable by the user at any time. + * @var array + */ + protected $otherPages = array( + 'Restart', + 'Readme', + 'ReleaseNotes', + 'Copying', + 'UpgradeDoc', // Can't use Upgrade due to Upgrade step + ); + + /** + * Array of pages which have declared that they have been submitted, have validated + * their input, and need no further processing. + * @var array + */ + protected $happyPages; + + /** + * List of "skipped" pages. These are pages that will automatically continue + * to the next page on any GET request. To avoid breaking the "back" button, + * they need to be skipped during a back operation. + * @var array + */ + protected $skippedPages; + + /** + * Flag indicating that session data may have been lost. + * @var bool + */ + public $showSessionWarning = false; + + /** + * Numeric index of the page we're on + * @var int + */ + protected $tabIndex = 1; + + /** + * Name of the page we're on + * @var string + */ + protected $currentPageName; + + /** + * Constructor. + * + * @param $request WebRequest + */ + public function __construct( WebRequest $request ) { + parent::__construct(); + $this->output = new WebInstallerOutput( $this ); + $this->request = $request; + + // Add parser hooks + global $wgParser; + $wgParser->setHook( 'downloadlink', array( $this, 'downloadLinkHook' ) ); + $wgParser->setHook( 'doclink', array( $this, 'docLink' ) ); + } + + /** + * Main entry point. + * + * @param $session Array: initial session array + * + * @return Array: new session array + */ + public function execute( array $session ) { + $this->session = $session; + + if ( isset( $session['settings'] ) ) { + $this->settings = $session['settings'] + $this->settings; + } + + $this->exportVars(); + $this->setupLanguage(); + + if( ( $this->getVar( '_InstallDone' ) || $this->getVar( '_UpgradeDone' ) ) + && $this->request->getVal( 'localsettings' ) ) + { + $this->request->response()->header( 'Content-type: application/x-httpd-php' ); + $this->request->response()->header( + 'Content-Disposition: attachment; filename="LocalSettings.php"' + ); + + $ls = new LocalSettingsGenerator( $this ); + $rightsProfile = $this->rightsProfiles[$this->getVar( '_RightsProfile' )]; + foreach( $rightsProfile as $group => $rightsArr ) { + $ls->setGroupRights( $group, $rightsArr ); + } + echo $ls->getText(); + return $this->session; + } + + $cssDir = $this->request->getVal( 'css' ); + if( $cssDir ) { + $cssDir = ( $cssDir == 'rtl' ? 'rtl' : 'ltr' ); + $this->request->response()->header( 'Content-type: text/css' ); + echo $this->output->getCSS( $cssDir ); + return $this->session; + } + + if ( isset( $session['happyPages'] ) ) { + $this->happyPages = $session['happyPages']; + } else { + $this->happyPages = array(); + } + + if ( isset( $session['skippedPages'] ) ) { + $this->skippedPages = $session['skippedPages']; + } else { + $this->skippedPages = array(); + } + + $lowestUnhappy = $this->getLowestUnhappy(); + + # Special case for Creative Commons partner chooser box. + if ( $this->request->getVal( 'SubmitCC' ) ) { + $page = $this->getPageByName( 'Options' ); + $this->output->useShortHeader(); + $this->output->allowFrames(); + $page->submitCC(); + return $this->finish(); + } + + if ( $this->request->getVal( 'ShowCC' ) ) { + $page = $this->getPageByName( 'Options' ); + $this->output->useShortHeader(); + $this->output->allowFrames(); + $this->output->addHTML( $page->getCCDoneBox() ); + return $this->finish(); + } + + # Get the page name. + $pageName = $this->request->getVal( 'page' ); + + if ( in_array( $pageName, $this->otherPages ) ) { + # Out of sequence + $pageId = false; + $page = $this->getPageByName( $pageName ); + } else { + # Main sequence + if ( !$pageName || !in_array( $pageName, $this->pageSequence ) ) { + $pageId = $lowestUnhappy; + } else { + $pageId = array_search( $pageName, $this->pageSequence ); + } + + # If necessary, move back to the lowest-numbered unhappy page + if ( $pageId > $lowestUnhappy ) { + $pageId = $lowestUnhappy; + if ( $lowestUnhappy == 0 ) { + # Knocked back to start, possible loss of session data. + $this->showSessionWarning = true; + } + } + + $pageName = $this->pageSequence[$pageId]; + $page = $this->getPageByName( $pageName ); + } + + # If a back button was submitted, go back without submitting the form data. + if ( $this->request->wasPosted() && $this->request->getBool( 'submit-back' ) ) { + if ( $this->request->getVal( 'lastPage' ) ) { + $nextPage = $this->request->getVal( 'lastPage' ); + } elseif ( $pageId !== false ) { + # Main sequence page + # Skip the skipped pages + $nextPageId = $pageId; + + do { + $nextPageId--; + $nextPage = $this->pageSequence[$nextPageId]; + } while( isset( $this->skippedPages[$nextPage] ) ); + } else { + $nextPage = $this->pageSequence[$lowestUnhappy]; + } + + $this->output->redirect( $this->getUrl( array( 'page' => $nextPage ) ) ); + return $this->finish(); + } + + # Execute the page. + $this->currentPageName = $page->getName(); + $this->startPageWrapper( $pageName ); + + $result = $page->execute(); + + $this->endPageWrapper(); + + if ( $result == 'skip' ) { + # Page skipped without explicit submission. + # Skip it when we click "back" so that we don't just go forward again. + $this->skippedPages[$pageName] = true; + $result = 'continue'; + } else { + unset( $this->skippedPages[$pageName] ); + } + + # If it was posted, the page can request a continue to the next page. + if ( $result === 'continue' && !$this->output->headerDone() ) { + if ( $pageId !== false ) { + $this->happyPages[$pageId] = true; + } + + $lowestUnhappy = $this->getLowestUnhappy(); + + if ( $this->request->getVal( 'lastPage' ) ) { + $nextPage = $this->request->getVal( 'lastPage' ); + } elseif ( $pageId !== false ) { + $nextPage = $this->pageSequence[$pageId + 1]; + } else { + $nextPage = $this->pageSequence[$lowestUnhappy]; + } + + if ( array_search( $nextPage, $this->pageSequence ) > $lowestUnhappy ) { + $nextPage = $this->pageSequence[$lowestUnhappy]; + } + + $this->output->redirect( $this->getUrl( array( 'page' => $nextPage ) ) ); + } + + return $this->finish(); + } + + /** + * Find the next page in sequence that hasn't been completed + * @return int + */ + public function getLowestUnhappy() { + if ( count( $this->happyPages ) == 0 ) { + return 0; + } else { + return max( array_keys( $this->happyPages ) ) + 1; + } + } + + /** + * Start the PHP session. This may be called before execute() to start the PHP session. + */ + public function startSession() { + if( wfIniGetBool( 'session.auto_start' ) || session_id() ) { + // Done already + return true; + } + + $this->phpErrors = array(); + set_error_handler( array( $this, 'errorHandler' ) ); + session_start(); + restore_error_handler(); + + if ( $this->phpErrors ) { + $this->showError( 'config-session-error', $this->phpErrors[0] ); + return false; + } + + return true; + } + + /** + * Get a hash of data identifying this MW installation. + * + * This is used by mw-config/index.php to prevent multiple installations of MW + * on the same cookie domain from interfering with each other. + */ + public function getFingerprint() { + // Get the base URL of the installation + $url = $this->request->getFullRequestURL(); + if ( preg_match( '!^(.*\?)!', $url, $m) ) { + // Trim query string + $url = $m[1]; + } + if ( preg_match( '!^(.*)/[^/]*/[^/]*$!', $url, $m ) ) { + // This... seems to try to get the base path from + // the /mw-config/index.php. Kinda scary though? + $url = $m[1]; + } + return md5( serialize( array( + 'local path' => dirname( dirname( __FILE__ ) ), + 'url' => $url, + 'version' => $GLOBALS['wgVersion'] + ) ) ); + } + + /** + * Show an error message in a box. Parameters are like wfMsg(). + */ + public function showError( $msg /*...*/ ) { + $args = func_get_args(); + array_shift( $args ); + $args = array_map( 'htmlspecialchars', $args ); + $msg = wfMsgReal( $msg, $args, false, false, false ); + $this->output->addHTML( $this->getErrorBox( $msg ) ); + } + + /** + * Temporary error handler for session start debugging. + */ + public function errorHandler( $errno, $errstr ) { + $this->phpErrors[] = $errstr; + } + + /** + * Clean up from execute() + * + * @return array + */ + public function finish() { + $this->output->output(); + + $this->session['happyPages'] = $this->happyPages; + $this->session['skippedPages'] = $this->skippedPages; + $this->session['settings'] = $this->settings; + + return $this->session; + } + + /** + * We're restarting the installation, reset the session, happyPages, etc + */ + public function reset() { + $this->session = array(); + $this->happyPages = array(); + $this->settings = array(); + } + + /** + * Get a URL for submission back to the same script. + * + * @param $query: Array + * @return string + */ + public function getUrl( $query = array() ) { + $url = $this->request->getRequestURL(); + # Remove existing query + $url = preg_replace( '/\?.*$/', '', $url ); + + if ( $query ) { + $url .= '?' . wfArrayToCGI( $query ); + } + + return $url; + } + + /** + * Get a WebInstallerPage by name. + * + * @param $pageName String + * @return WebInstallerPage + */ + public function getPageByName( $pageName ) { + // Totally lame way to force autoload of WebInstallerPage.php + class_exists( 'WebInstallerPage' ); + + $pageClass = 'WebInstaller_' . $pageName; + + return new $pageClass( $this ); + } + + /** + * Get a session variable. + * + * @param $name String + * @param $default + */ + public function getSession( $name, $default = null ) { + if ( !isset( $this->session[$name] ) ) { + return $default; + } else { + return $this->session[$name]; + } + } + + /** + * Set a session variable. + * @param $name String key for the variable + * @param $value Mixed + */ + public function setSession( $name, $value ) { + $this->session[$name] = $value; + } + + /** + * Get the next tabindex attribute value. + * @return int + */ + public function nextTabIndex() { + return $this->tabIndex++; + } + + /** + * Initializes language-related variables. + */ + public function setupLanguage() { + global $wgLang, $wgContLang, $wgLanguageCode; + + if ( $this->getSession( 'test' ) === null && !$this->request->wasPosted() ) { + $wgLanguageCode = $this->getAcceptLanguage(); + $wgLang = $wgContLang = Language::factory( $wgLanguageCode ); + $this->setVar( 'wgLanguageCode', $wgLanguageCode ); + $this->setVar( '_UserLang', $wgLanguageCode ); + } else { + $wgLanguageCode = $this->getVar( 'wgLanguageCode' ); + $wgLang = Language::factory( $this->getVar( '_UserLang' ) ); + $wgContLang = Language::factory( $wgLanguageCode ); + } + } + + /** + * Retrieves MediaWiki language from Accept-Language HTTP header. + * + * @return string + */ + public function getAcceptLanguage() { + global $wgLanguageCode, $wgRequest; + + $mwLanguages = Language::getLanguageNames(); + $headerLanguages = array_keys( $wgRequest->getAcceptLang() ); + + foreach ( $headerLanguages as $lang ) { + if ( isset( $mwLanguages[$lang] ) ) { + return $lang; + } + } + + return $wgLanguageCode; + } + + /** + * Called by execute() before page output starts, to show a page list. + * + * @param $currentPageName String + */ + private function startPageWrapper( $currentPageName ) { + $s = "
    \n"; + $s .= "
    \n"; + $s .= "
      \n"; + $lastHappy = -1; + + foreach ( $this->pageSequence as $id => $pageName ) { + $happy = !empty( $this->happyPages[$id] ); + $s .= $this->getPageListItem( + $pageName, + $happy || $lastHappy == $id - 1, + $currentPageName + ); + + if ( $happy ) { + $lastHappy = $id; + } + } + + $s .= "

      \n"; + $s .= $this->getPageListItem( 'Restart', true, $currentPageName ); + $s .= "
    \n"; // end list pane + $s .= Html::element( 'h2', array(), + wfMsg( 'config-page-' . strtolower( $currentPageName ) ) ); + + $this->output->addHTMLNoFlush( $s ); + } + + /** + * Get a list item for the page list. + * + * @param $pageName String + * @param $enabled Boolean + * @param $currentPageName String + * + * @return string + */ + private function getPageListItem( $pageName, $enabled, $currentPageName ) { + $s = "
  • "; + $name = wfMsg( 'config-page-' . strtolower( $pageName ) ); + + if ( $enabled ) { + $query = array( 'page' => $pageName ); + + if ( !in_array( $pageName, $this->pageSequence ) ) { + if ( in_array( $currentPageName, $this->pageSequence ) ) { + $query['lastPage'] = $currentPageName; + } + + $link = Html::element( 'a', + array( + 'href' => $this->getUrl( $query ) + ), + $name + ); + } else { + $link = htmlspecialchars( $name ); + } + + if ( $pageName == $currentPageName ) { + $s .= "$link"; + } else { + $s .= $link; + } + } else { + $s .= Html::element( 'span', + array( + 'class' => 'config-page-disabled' + ), + $name + ); + } + + $s .= "
  • \n"; + + return $s; + } + + /** + * Output some stuff after a page is finished. + */ + private function endPageWrapper() { + $this->output->addHTMLNoFlush( + "
    \n" . + "
    \n" . + "
    \n" . + "
    " ); + } + + /** + * Get HTML for an error box with an icon. + * + * @param $text String: wikitext, get this with wfMsgNoTrans() + */ + public function getErrorBox( $text ) { + return $this->getInfoBox( $text, 'critical-32.png', 'config-error-box' ); + } + + /** + * Get HTML for a warning box with an icon. + * + * @param $text String: wikitext, get this with wfMsgNoTrans() + */ + public function getWarningBox( $text ) { + return $this->getInfoBox( $text, 'warning-32.png', 'config-warning-box' ); + } + + /** + * Get HTML for an info box with an icon. + * + * @param $text String: wikitext, get this with wfMsgNoTrans() + * @param $icon String: icon name, file in skins/common/images + * @param $class String: additional class name to add to the wrapper div + */ + public function getInfoBox( $text, $icon = 'info-32.png', $class = false ) { + $s = + "
    \n" . + "
    \n" . + Html::element( 'img', + array( + 'src' => '../skins/common/images/' . $icon, + 'alt' => wfMsg( 'config-information' ), + ) + ) . "\n" . + "
    \n" . + "
    \n" . + $this->parse( $text, true ) . "\n" . + "
    \n" . + "
    \n" . + "
    \n"; + return $s; + } + + /** + * Get small text indented help for a preceding form field. + * Parameters like wfMsg(). + */ + public function getHelpBox( $msg /*, ... */ ) { + $args = func_get_args(); + array_shift( $args ); + $args = array_map( 'htmlspecialchars', $args ); + $text = wfMsgReal( $msg, $args, false, false, false ); + $html = htmlspecialchars( $text ); + $html = $this->parse( $text, true ); + + return "
    \n" . + "" . wfMsgHtml( 'config-help' ) . "\n" . + "" . $html . "\n" . + "
    \n"; + } + + /** + * Output a help box. + * @param $msg String key for wfMsg() + */ + public function showHelpBox( $msg /*, ... */ ) { + $args = func_get_args(); + $html = call_user_func_array( array( $this, 'getHelpBox' ), $args ); + $this->output->addHTML( $html ); + } + + /** + * Show a short informational message. + * Output looks like a list. + * + * @param $msg string + */ + public function showMessage( $msg /*, ... */ ) { + $args = func_get_args(); + array_shift( $args ); + $html = '
    ' . + $this->parse( wfMsgReal( $msg, $args, false, false, false ) ) . + "
    \n"; + $this->output->addHTML( $html ); + } + + /** + * @param $status Status + */ + public function showStatusMessage( Status $status ) { + $text = $status->getWikiText(); + $this->output->addWikiText( + "
    \n" . + $text . + "
    " + ); + } + + /** + * Label a control by wrapping a config-input div around it and putting a + * label before it. + */ + public function label( $msg, $forId, $contents, $helpData = "" ) { + if ( strval( $msg ) == '' ) { + $labelText = ' '; + } else { + $labelText = wfMsgHtml( $msg ); + } + + $attributes = array( 'class' => 'config-label' ); + + if ( $forId ) { + $attributes['for'] = $forId; + } + + return + "
    \n" . + "
    \n" . + Xml::tags( 'label', + $attributes, + $labelText ) . "\n" . + $helpData . + "
    \n" . + "
    \n" . + $contents . + "
    \n" . + "
    \n"; + } + + /** + * Get a labelled text box to configure a variable. + * + * @param $params Array + * Parameters are: + * var: The variable to be configured (required) + * label: The message name for the label (required) + * attribs: Additional attributes for the input element (optional) + * controlName: The name for the input element (optional) + * value: The current value of the variable (optional) + * help: The html for the help text (optional) + */ + public function getTextBox( $params ) { + if ( !isset( $params['controlName'] ) ) { + $params['controlName'] = 'config_' . $params['var']; + } + + if ( !isset( $params['value'] ) ) { + $params['value'] = $this->getVar( $params['var'] ); + } + + if ( !isset( $params['attribs'] ) ) { + $params['attribs'] = array(); + } + if ( !isset( $params['help'] ) ) { + $params['help'] = ""; + } + return + $this->label( + $params['label'], + $params['controlName'], + Xml::input( + $params['controlName'], + 30, // intended to be overridden by CSS + $params['value'], + $params['attribs'] + array( + 'id' => $params['controlName'], + 'class' => 'config-input-text', + 'tabindex' => $this->nextTabIndex() + ) + ), + $params['help'] + ); + } + + /** + * Get a labelled textarea to configure a variable + * + * @param $params Array + * Parameters are: + * var: The variable to be configured (required) + * label: The message name for the label (required) + * attribs: Additional attributes for the input element (optional) + * controlName: The name for the input element (optional) + * value: The current value of the variable (optional) + * help: The html for the help text (optional) + */ + public function getTextArea( $params ) { + if ( !isset( $params['controlName'] ) ) { + $params['controlName'] = 'config_' . $params['var']; + } + + if ( !isset( $params['value'] ) ) { + $params['value'] = $this->getVar( $params['var'] ); + } + + if ( !isset( $params['attribs'] ) ) { + $params['attribs'] = array(); + } + if ( !isset( $params['help'] ) ) { + $params['help'] = ""; + } + return + $this->label( + $params['label'], + $params['controlName'], + Xml::textarea( + $params['controlName'], + $params['value'], + 30, + 5, + $params['attribs'] + array( + 'id' => $params['controlName'], + 'class' => 'config-input-text', + 'tabindex' => $this->nextTabIndex() + ) + ), + $params['help'] + ); + } + + /** + * Get a labelled password box to configure a variable. + * + * Implements password hiding + * @param $params Array + * Parameters are: + * var: The variable to be configured (required) + * label: The message name for the label (required) + * attribs: Additional attributes for the input element (optional) + * controlName: The name for the input element (optional) + * value: The current value of the variable (optional) + * help: The html for the help text (optional) + */ + public function getPasswordBox( $params ) { + if ( !isset( $params['value'] ) ) { + $params['value'] = $this->getVar( $params['var'] ); + } + + if ( !isset( $params['attribs'] ) ) { + $params['attribs'] = array(); + } + + $params['value'] = $this->getFakePassword( $params['value'] ); + $params['attribs']['type'] = 'password'; + + return $this->getTextBox( $params ); + } + + /** + * Get a labelled checkbox to configure a boolean variable. + * + * @param $params Array + * Parameters are: + * var: The variable to be configured (required) + * label: The message name for the label (required) + * attribs: Additional attributes for the input element (optional) + * controlName: The name for the input element (optional) + * value: The current value of the variable (optional) + * help: The html for the help text (optional) + */ + public function getCheckBox( $params ) { + if ( !isset( $params['controlName'] ) ) { + $params['controlName'] = 'config_' . $params['var']; + } + + if ( !isset( $params['value'] ) ) { + $params['value'] = $this->getVar( $params['var'] ); + } + + if ( !isset( $params['attribs'] ) ) { + $params['attribs'] = array(); + } + if ( !isset( $params['help'] ) ) { + $params['help'] = ""; + } + if( isset( $params['rawtext'] ) ) { + $labelText = $params['rawtext']; + } else { + $labelText = $this->parse( wfMsg( $params['label'] ) ); + } + + return + "
    \n" . + $params['help'] . + "\n" . + "
    \n"; + } + + /** + * Get a set of labelled radio buttons. + * + * @param $params Array + * Parameters are: + * var: The variable to be configured (required) + * label: The message name for the label (required) + * itemLabelPrefix: The message name prefix for the item labels (required) + * values: List of allowed values (required) + * itemAttribs Array of attribute arrays, outer key is the value name (optional) + * commonAttribs Attribute array applied to all items + * controlName: The name for the input element (optional) + * value: The current value of the variable (optional) + * help: The html for the help text (optional) + */ + public function getRadioSet( $params ) { + if ( !isset( $params['controlName'] ) ) { + $params['controlName'] = 'config_' . $params['var']; + } + + if ( !isset( $params['value'] ) ) { + $params['value'] = $this->getVar( $params['var'] ); + } + + if ( !isset( $params['label'] ) ) { + $label = ''; + } else { + $label = $params['label']; + } + if ( !isset( $params['help'] ) ) { + $params['help'] = ""; + } + $s = "
      \n"; + foreach ( $params['values'] as $value ) { + $itemAttribs = array(); + + if ( isset( $params['commonAttribs'] ) ) { + $itemAttribs = $params['commonAttribs']; + } + + if ( isset( $params['itemAttribs'][$value] ) ) { + $itemAttribs = $params['itemAttribs'][$value] + $itemAttribs; + } + + $checked = $value == $params['value']; + $id = $params['controlName'] . '_' . $value; + $itemAttribs['id'] = $id; + $itemAttribs['tabindex'] = $this->nextTabIndex(); + + $s .= + '
    • ' . + Xml::radio( $params['controlName'], $value, $checked, $itemAttribs ) . + ' ' . + Xml::tags( 'label', array( 'for' => $id ), $this->parse( + wfMsgNoTrans( $params['itemLabelPrefix'] . strtolower( $value ) ) + ) ) . + "
    • \n"; + } + + $s .= "
    \n"; + + return $this->label( $label, $params['controlName'], $s, $params['help'] ); + } + + /** + * Output an error or warning box using a Status object. + */ + public function showStatusBox( $status ) { + if( !$status->isGood() ) { + $text = $status->getWikiText(); + + if( $status->isOk() ) { + $box = $this->getWarningBox( $text ); + } else { + $box = $this->getErrorBox( $text ); + } + + $this->output->addHTML( $box ); + } + } + + /** + * Convenience function to set variables based on form data. + * Assumes that variables containing "password" in the name are (potentially + * fake) passwords. + * + * @param $varNames Array + * @param $prefix String: the prefix added to variables to obtain form names + */ + public function setVarsFromRequest( $varNames, $prefix = 'config_' ) { + $newValues = array(); + + foreach ( $varNames as $name ) { + $value = trim( $this->request->getVal( $prefix . $name ) ); + $newValues[$name] = $value; + + if ( $value === null ) { + // Checkbox? + $this->setVar( $name, false ); + } else { + if ( stripos( $name, 'password' ) !== false ) { + $this->setPassword( $name, $value ); + } else { + $this->setVar( $name, $value ); + } + } + } + + return $newValues; + } + + /** + * Helper for Installer::docLink() + */ + protected function getDocUrl( $page ) { + $url = "{$_SERVER['PHP_SELF']}?page=" . urlencode( $page ); + + if ( in_array( $this->currentPageName, $this->pageSequence ) ) { + $url .= '&lastPage=' . urlencode( $this->currentPageName ); + } + + return $url; + } + + /** + * Extension tag hook for a documentation link. + */ + public function docLink( $linkText, $attribs, $parser ) { + $url = $this->getDocUrl( $attribs['href'] ); + return '' . + htmlspecialchars( $linkText ) . + ''; + } + + /** + * Helper for "Download LocalSettings" link on WebInstall_Complete + * @return String Html for download link + */ + public function downloadLinkHook( $text, $attribs, $parser ) { + $img = Html::element( 'img', array( + 'src' => '../skins/common/images/download-32.png', + 'width' => '32', + 'height' => '32', + ) ); + $anchor = Html::rawElement( 'a', + array( 'href' => $this->getURL( array( 'localsettings' => 1 ) ) ), + $img . ' ' . wfMsgHtml( 'config-download-localsettings' ) ); + return Html::rawElement( 'div', array( 'class' => 'config-download-link' ), $anchor ); + } +} diff --git a/includes/installer/WebInstallerOutput.php b/includes/installer/WebInstallerOutput.php new file mode 100644 index 00000000..cb708d13 --- /dev/null +++ b/includes/installer/WebInstallerOutput.php @@ -0,0 +1,269 @@ +parent = $parent; + } + + public function addHTML( $html ) { + $this->contents .= $html; + $this->flush(); + } + + public function addWikiText( $text ) { + $this->addHTML( $this->parent->parse( $text ) ); + } + + public function addHTMLNoFlush( $html ) { + $this->contents .= $html; + } + + public function redirect( $url ) { + if ( $this->headerDone ) { + throw new MWException( __METHOD__ . ' called after sending headers' ); + } + $this->redirectTarget = $url; + } + + public function output() { + $this->flush(); + $this->outputFooter(); + } + + /** + * Get the raw vector CSS, flipping if needed + * @param $dir String 'ltr' or 'rtl' + * @return String + */ + public function getCSS( $dir ) { + $skinDir = dirname( dirname( dirname( __FILE__ ) ) ) . '/skins'; + $vectorCssFile = "$skinDir/vector/screen.css"; + $configCssFile = "$skinDir/common/config.css"; + $css = ''; + wfSuppressWarnings(); + $vectorCss = file_get_contents( $vectorCssFile ); + $configCss = file_get_contents( $configCssFile ); + wfRestoreWarnings(); + if( !$vectorCss || !$configCss ) { + $css = "/** Your webserver cannot read $vectorCssFile or $configCssFile, please check file permissions */"; + } + + $css .= str_replace( 'images/', '../skins/vector/images/', $vectorCss ) . "\n" . str_replace( 'images/', '../skins/common/images/', $configCss ); + if( $dir == 'rtl' ) { + $css = CSSJanus::transform( $css, true ); + } + return $css; + } + + /** + * URL for index.php?css=foobar + * @return String + */ + private function getCssUrl( ) { + return $_SERVER['PHP_SELF'] . '?css=' . $this->getDir(); + } + + public function useShortHeader( $use = true ) { + $this->useShortHeader = $use; + } + + public function allowFrames( $allow = true ) { + $this->allowFrames = $allow; + } + + public function flush() { + if ( !$this->headerDone ) { + $this->outputHeader(); + } + if ( !$this->redirectTarget && strlen( $this->contents ) ) { + echo $this->contents; + flush(); + $this->contents = ''; + } + } + + public function getDir() { + global $wgLang; + if( !is_object( $wgLang ) || !$wgLang->isRtl() ) + return 'ltr'; + else + return 'rtl'; + } + + public function getLanguageCode() { + global $wgLang; + if( !is_object( $wgLang ) ) + return 'en'; + else + return $wgLang->getCode(); + } + + public function getHeadAttribs() { + return array( + 'dir' => $this->getDir(), + 'lang' => $this->getLanguageCode(), + ); + } + + /** + * Get whether the header has been output + * @return bool + */ + public function headerDone() { + return $this->headerDone; + } + + public function outputHeader() { + $this->headerDone = true; + $dbTypes = $this->parent->getDBTypes(); + + $this->parent->request->response()->header( 'Content-Type: text/html; charset=utf-8' ); + if (!$this->allowFrames) { + $this->parent->request->response()->header( 'X-Frame-Options: DENY' ); + } + if ( $this->redirectTarget ) { + $this->parent->request->response()->header( 'Location: '.$this->redirectTarget ); + return; + } + + if ( $this->useShortHeader ) { + $this->outputShortHeader(); + return; + } + +?> +getHeadAttribs() ); ?> + + + + <?php $this->outputTitle(); ?> + + getCssUrl() ) . "\n"; ?> + + getJQuery() . "\n"; ?> + + + + $this->getDir() ) ) . "\n"; ?> +
    +
    +
    +
    + +

    outputTitle(); ?>

    +useShortHeader ) { +?> + + + +
    + + +
    + + +
    +parent->parse( wfMsgNoTrans( 'config-sidebar' ), true ); +?> +
    +
    + + + + +getHeadAttribs() ); ?> + + + + <?php $this->outputTitle(); ?> + getCssUrl() ) . "\n"; ?> + getJQuery(); ?> + + + + +parent = $parent; + } + + public function addHTML( $html ) { + $this->parent->output->addHTML( $html ); + } + + public function startForm() { + $this->addHTML( + "
    \n" . + Html::openElement( + 'form', + array( + 'method' => 'post', + 'action' => $this->parent->getUrl( array( 'page' => $this->getName() ) ) + ) + ) . "\n" + ); + } + + public function endForm( $continue = 'continue', $back = 'back' ) { + $s = "
    \n"; + $id = $this->getId(); + + if ( $id === false ) { + $s .= Html::hidden( 'lastPage', $this->parent->request->getVal( 'lastPage' ) ); + } + + if ( $continue ) { + // Fake submit button for enter keypress (bug 26267) + $s .= Xml::submitButton( wfMsg( "config-$continue" ), + array( 'name' => "enter-$continue", 'style' => 'visibility:hidden;overflow:hidden;width:1px;margin:0' ) ) . "\n"; + } + + if ( $back ) { + $s .= Xml::submitButton( wfMsg( "config-$back" ), + array( + 'name' => "submit-$back", + 'tabindex' => $this->parent->nextTabIndex() + ) ) . "\n"; + } + + if ( $continue ) { + $s .= Xml::submitButton( wfMsg( "config-$continue" ), + array( + 'name' => "submit-$continue", + 'tabindex' => $this->parent->nextTabIndex(), + ) ) . "\n"; + } + + $s .= "
    \n"; + $this->addHTML( $s ); + } + + public function getName() { + return str_replace( 'WebInstaller_', '', get_class( $this ) ); + } + + protected function getId() { + return array_search( $this->getName(), $this->parent->pageSequence ); + } + + public function getVar( $var ) { + return $this->parent->getVar( $var ); + } + + public function setVar( $name, $value ) { + $this->parent->setVar( $name, $value ); + } + + /** + * Get the starting tags of a fieldset. + * + * @param $legend String: message name + */ + protected function getFieldsetStart( $legend ) { + return "\n
    " . wfMsgHtml( $legend ) . "\n"; + } + + /** + * Get the end tag of a fieldset. + */ + protected function getFieldsetEnd() { + return "
    \n"; + } + + /** + * Opens a textarea used to display the progress of a long operation + */ + protected function startLiveBox() { + $this->addHTML( + '' . + '' . + ' +' ); + $this->parent->output->flush(); + } +} + +class WebInstaller_Language extends WebInstallerPage { + + public function execute() { + global $wgLang; + $r = $this->parent->request; + $userLang = $r->getVal( 'UserLang' ); + $contLang = $r->getVal( 'ContLang' ); + + $lifetime = intval( ini_get( 'session.gc_maxlifetime' ) ); + if ( !$lifetime ) { + $lifetime = 1440; // PHP default + } + + if ( $r->wasPosted() ) { + # Do session test + if ( $this->parent->getSession( 'test' ) === null ) { + $requestTime = $r->getVal( 'LanguageRequestTime' ); + if ( !$requestTime ) { + // The most likely explanation is that the user was knocked back + // from another page on POST due to session expiry + $msg = 'config-session-expired'; + } elseif ( time() - $requestTime > $lifetime ) { + $msg = 'config-session-expired'; + } else { + $msg = 'config-no-session'; + } + $this->parent->showError( $msg, $wgLang->formatTimePeriod( $lifetime ) ); + } else { + $languages = Language::getLanguageNames(); + if ( isset( $languages[$userLang] ) ) { + $this->setVar( '_UserLang', $userLang ); + } + if ( isset( $languages[$contLang] ) ) { + $this->setVar( 'wgLanguageCode', $contLang ); + } + return 'continue'; + } + } elseif ( $this->parent->showSessionWarning ) { + # The user was knocked back from another page to the start + # This probably indicates a session expiry + $this->parent->showError( 'config-session-expired', $wgLang->formatTimePeriod( $lifetime ) ); + } + + $this->parent->setSession( 'test', true ); + + if ( !isset( $languages[$userLang] ) ) { + $userLang = $this->getVar( '_UserLang', 'en' ); + } + if ( !isset( $languages[$contLang] ) ) { + $contLang = $this->getVar( 'wgLanguageCode', 'en' ); + } + $this->startForm(); + $s = Html::hidden( 'LanguageRequestTime', time() ) . + $this->getLanguageSelector( 'UserLang', 'config-your-language', $userLang, $this->parent->getHelpBox( 'config-your-language-help' ) ) . + $this->getLanguageSelector( 'ContLang', 'config-wiki-language', $contLang, $this->parent->getHelpBox( 'config-wiki-language-help' ) ); + $this->addHTML( $s ); + $this->endForm( 'continue', false ); + } + + /** + * Get a \n"; + return $this->parent->label( $label, $name, $s ); + } + +} + +class WebInstaller_ExistingWiki extends WebInstallerPage { + public function execute() { + // If there is no LocalSettings.php, continue to the installer welcome page + $vars = Installer::getExistingLocalSettings(); + if ( !$vars ) { + return 'skip'; + } + + // Check if the upgrade key supplied to the user has appeared in LocalSettings.php + if ( $vars['wgUpgradeKey'] !== false + && $this->getVar( '_UpgradeKeySupplied' ) + && $this->getVar( 'wgUpgradeKey' ) === $vars['wgUpgradeKey'] ) + { + // It's there, so the user is authorized + $status = $this->handleExistingUpgrade( $vars ); + if ( $status->isOK() ) { + return 'skip'; + } else { + $this->startForm(); + $this->parent->showStatusBox( $status ); + $this->endForm( 'continue' ); + return 'output'; + } + } + + // If there is no $wgUpgradeKey, tell the user to add one to LocalSettings.php + if ( $vars['wgUpgradeKey'] === false ) { + if ( $this->getVar( 'wgUpgradeKey', false ) === false ) { + $secretKey = $this->getVar( 'wgSecretKey' ); // preserve $wgSecretKey + $this->parent->generateKeys(); + $this->setVar( 'wgSecretKey', $secretKey ); + $this->setVar( '_UpgradeKeySupplied', true ); + } + $this->startForm(); + $this->addHTML( $this->parent->getInfoBox( + wfMsgNoTrans( 'config-upgrade-key-missing', + "
    \$wgUpgradeKey = '" . $this->getVar( 'wgUpgradeKey' ) . "';
    " ) + ) ); + $this->endForm( 'continue' ); + return 'output'; + } + + // If there is an upgrade key, but it wasn't supplied, prompt the user to enter it + + $r = $this->parent->request; + if ( $r->wasPosted() ) { + $key = $r->getText( 'config_wgUpgradeKey' ); + if( !$key || $key !== $vars['wgUpgradeKey'] ) { + $this->parent->showError( 'config-localsettings-badkey' ); + $this->showKeyForm(); + return 'output'; + } + // Key was OK + $status = $this->handleExistingUpgrade( $vars ); + if ( $status->isOK() ) { + return 'continue'; + } else { + $this->parent->showStatusBox( $status ); + $this->showKeyForm(); + return 'output'; + } + } else { + $this->showKeyForm(); + return 'output'; + } + } + + /** + * Show the "enter key" form + */ + protected function showKeyForm() { + $this->startForm(); + $this->addHTML( + $this->parent->getInfoBox( wfMsgNoTrans( 'config-localsettings-upgrade' ) ). + '
    ' . + $this->parent->getTextBox( array( + 'var' => 'wgUpgradeKey', + 'label' => 'config-localsettings-key', + 'attribs' => array( 'autocomplete' => 'off' ), + ) ) + ); + $this->endForm( 'continue' ); + } + + protected function importVariables( $names, $vars ) { + $status = Status::newGood(); + foreach ( $names as $name ) { + if ( !isset( $vars[$name] ) ) { + $status->fatal( 'config-localsettings-incomplete', $name ); + } + $this->setVar( $name, $vars[$name] ); + } + return $status; + } + + /** + * Initiate an upgrade of the existing database + * @param $vars Variables from LocalSettings.php and AdminSettings.php + * @return Status + */ + protected function handleExistingUpgrade( $vars ) { + // Check $wgDBtype + if ( !isset( $vars['wgDBtype'] ) || !in_array( $vars['wgDBtype'], Installer::getDBTypes() ) ) { + return Status::newFatal( 'config-localsettings-connection-error', '' ); + } + + // Set the relevant variables from LocalSettings.php + $requiredVars = array( 'wgDBtype' ); + $status = $this->importVariables( $requiredVars , $vars ); + $installer = $this->parent->getDBInstaller(); + $status->merge( $this->importVariables( $installer->getGlobalNames(), $vars ) ); + if ( !$status->isOK() ) { + return $status; + } + + if ( isset( $vars['wgDBadminuser'] ) ) { + $this->setVar( '_InstallUser', $vars['wgDBadminuser'] ); + } else { + $this->setVar( '_InstallUser', $vars['wgDBuser'] ); + } + if ( isset( $vars['wgDBadminpassword'] ) ) { + $this->setVar( '_InstallPassword', $vars['wgDBadminpassword'] ); + } else { + $this->setVar( '_InstallPassword', $vars['wgDBpassword'] ); + } + + // Test the database connection + $status = $installer->getConnection(); + if ( !$status->isOK() ) { + // Adjust the error message to explain things correctly + $status->replaceMessage( 'config-connection-error', + 'config-localsettings-connection-error' ); + return $status; + } + + // All good + $this->setVar( '_ExistingDBSettings', true ); + return $status; + } +} + +class WebInstaller_Welcome extends WebInstallerPage { + + public function execute() { + if ( $this->parent->request->wasPosted() ) { + if ( $this->getVar( '_Environment' ) ) { + return 'continue'; + } + } + $this->parent->output->addWikiText( wfMsgNoTrans( 'config-welcome' ) ); + $status = $this->parent->doEnvironmentChecks(); + if ( $status->isGood() ) { + $this->parent->output->addHTML( '' . + wfMsgHtml( 'config-env-good' ) . '' ); + $this->parent->output->addWikiText( wfMsgNoTrans( 'config-copyright', + SpecialVersion::getCopyrightAndAuthorList() ) ); + $this->startForm(); + $this->endForm(); + } else { + $this->parent->showStatusMessage( $status ); + } + } + +} + +class WebInstaller_DBConnect extends WebInstallerPage { + + public function execute() { + if ( $this->getVar( '_ExistingDBSettings' ) ) { + return 'skip'; + } + + $r = $this->parent->request; + if ( $r->wasPosted() ) { + $status = $this->submit(); + + if ( $status->isGood() ) { + $this->setVar( '_UpgradeDone', false ); + return 'continue'; + } else { + $this->parent->showStatusBox( $status ); + } + } + + $this->startForm(); + + $types = "
      \n"; + $settings = ''; + $defaultType = $this->getVar( 'wgDBtype' ); + + $dbSupport = ''; + foreach( $this->parent->getDBTypes() as $type ) { + $link = DatabaseBase::newFromType( $type )->getSoftwareLink(); + $dbSupport .= wfMsgNoTrans( "config-support-$type", $link ) . "\n"; + } + $this->addHTML( $this->parent->getInfoBox( + wfMsg( 'config-support-info', $dbSupport ) ) ); + + foreach ( $this->parent->getVar( '_CompiledDBs' ) as $type ) { + $installer = $this->parent->getDBInstaller( $type ); + $types .= + '
    • ' . + Xml::radioLabel( + $installer->getReadableName(), + 'DBType', + $type, + "DBType_$type", + $type == $defaultType, + array( 'class' => 'dbRadio', 'rel' => "DB_wrapper_$type" ) + ) . + "
    • \n"; + + $settings .= + Html::openElement( 'div', array( 'id' => 'DB_wrapper_' . $type, 'class' => 'dbWrapper' ) ) . + Html::element( 'h3', array(), wfMsg( 'config-header-' . $type ) ) . + $installer->getConnectForm() . + "
    \n"; + } + $types .= "
    \n"; + + $this->addHTML( + $this->parent->label( 'config-db-type', false, $types ) . + $settings + ); + + $this->endForm(); + } + + public function submit() { + $r = $this->parent->request; + $type = $r->getVal( 'DBType' ); + $this->setVar( 'wgDBtype', $type ); + $installer = $this->parent->getDBInstaller( $type ); + if ( !$installer ) { + return Status::newFatal( 'config-invalid-db-type' ); + } + return $installer->submitConnectForm(); + } + +} + +class WebInstaller_Upgrade extends WebInstallerPage { + + public function execute() { + if ( $this->getVar( '_UpgradeDone' ) ) { + // Allow regeneration of LocalSettings.php, unless we are working + // from a pre-existing LocalSettings.php file and we want to avoid + // leaking its contents + if ( $this->parent->request->wasPosted() && !$this->getVar( '_ExistingDBSettings' ) ) { + // Done message acknowledged + return 'continue'; + } else { + // Back button click + // Show the done message again + // Make them click back again if they want to do the upgrade again + $this->showDoneMessage(); + return 'output'; + } + } + + // wgDBtype is generally valid here because otherwise the previous page + // (connect) wouldn't have declared its happiness + $type = $this->getVar( 'wgDBtype' ); + $installer = $this->parent->getDBInstaller( $type ); + + if ( !$installer->needsUpgrade() ) { + return 'skip'; + } + + if ( $this->parent->request->wasPosted() ) { + $installer->preUpgrade(); + + $this->startLiveBox(); + $result = $installer->doUpgrade(); + $this->endLiveBox(); + + if ( $result ) { + // If they're going to possibly regenerate LocalSettings, we + // need to create the upgrade/secret keys. Bug 26481 + if( !$this->getVar( '_ExistingDBSettings' ) ) { + $this->parent->generateKeys(); + } + $this->setVar( '_UpgradeDone', true ); + $this->showDoneMessage(); + return 'output'; + } + } + + $this->startForm(); + $this->addHTML( $this->parent->getInfoBox( + wfMsgNoTrans( 'config-can-upgrade', $GLOBALS['wgVersion'] ) ) ); + $this->endForm(); + } + + public function showDoneMessage() { + $this->startForm(); + $regenerate = !$this->getVar( '_ExistingDBSettings' ); + if ( $regenerate ) { + $msg = 'config-upgrade-done'; + } else { + $msg = 'config-upgrade-done-no-regenerate'; + } + $this->parent->disableLinkPopups(); + $this->addHTML( + $this->parent->getInfoBox( + wfMsgNoTrans( $msg, + $GLOBALS['wgServer'] . + $this->getVar( 'wgScriptPath' ) . '/index' . + $this->getVar( 'wgScriptExtension' ) + ), 'tick-32.png' + ) + ); + $this->parent->restoreLinkPopups(); + $this->endForm( $regenerate ? 'regenerate' : false, false ); + } + +} + +class WebInstaller_DBSettings extends WebInstallerPage { + + public function execute() { + $installer = $this->parent->getDBInstaller( $this->getVar( 'wgDBtype' ) ); + + $r = $this->parent->request; + if ( $r->wasPosted() ) { + $status = $installer->submitSettingsForm(); + if ( $status === false ) { + return 'skip'; + } elseif ( $status->isGood() ) { + return 'continue'; + } else { + $this->parent->showStatusBox( $status ); + } + } + + $form = $installer->getSettingsForm(); + if ( $form === false ) { + return 'skip'; + } + + $this->startForm(); + $this->addHTML( $form ); + $this->endForm(); + } + +} + +class WebInstaller_Name extends WebInstallerPage { + + public function execute() { + $r = $this->parent->request; + if ( $r->wasPosted() ) { + if ( $this->submit() ) { + return 'continue'; + } + } + + $this->startForm(); + + // Encourage people to not name their site 'MediaWiki' by blanking the + // field. I think that was the intent with the original $GLOBALS['wgSitename'] + // but these two always were the same so had the effect of making the + // installer forget $wgSitename when navigating back to this page. + if ( $this->getVar( 'wgSitename' ) == 'MediaWiki' ) { + $this->setVar( 'wgSitename', '' ); + } + + // Set wgMetaNamespace to something valid before we show the form. + // $wgMetaNamespace defaults to $wgSiteName which is 'MediaWiki' + $metaNS = $this->getVar( 'wgMetaNamespace' ); + $this->setVar( 'wgMetaNamespace', wfMsgForContent( 'config-ns-other-default' ) ); + + $this->addHTML( + $this->parent->getTextBox( array( + 'var' => 'wgSitename', + 'label' => 'config-site-name', + 'help' => $this->parent->getHelpBox( 'config-site-name-help' ) + ) ) . + $this->parent->getRadioSet( array( + 'var' => '_NamespaceType', + 'label' => 'config-project-namespace', + 'itemLabelPrefix' => 'config-ns-', + 'values' => array( 'site-name', 'generic', 'other' ), + 'commonAttribs' => array( 'class' => 'enableForOther', 'rel' => 'config_wgMetaNamespace' ), + 'help' => $this->parent->getHelpBox( 'config-project-namespace-help' ) + ) ) . + $this->parent->getTextBox( array( + 'var' => 'wgMetaNamespace', + 'label' => '', //TODO: Needs a label? + 'attribs' => array( 'readonly' => 'readonly', 'class' => 'enabledByOther' ), + + ) ) . + $this->getFieldSetStart( 'config-admin-box' ) . + $this->parent->getTextBox( array( + 'var' => '_AdminName', + 'label' => 'config-admin-name', + 'help' => $this->parent->getHelpBox( 'config-admin-help' ) + ) ) . + $this->parent->getPasswordBox( array( + 'var' => '_AdminPassword', + 'label' => 'config-admin-password', + ) ) . + $this->parent->getPasswordBox( array( + 'var' => '_AdminPassword2', + 'label' => 'config-admin-password-confirm' + ) ) . + $this->parent->getTextBox( array( + 'var' => '_AdminEmail', + 'label' => 'config-admin-email', + 'help' => $this->parent->getHelpBox( 'config-admin-email-help' ) + ) ) . + $this->parent->getCheckBox( array( + 'var' => '_Subscribe', + 'label' => 'config-subscribe', + 'help' => $this->parent->getHelpBox( 'config-subscribe-help' ) + ) ) . + $this->getFieldSetEnd() . + $this->parent->getInfoBox( wfMsg( 'config-almost-done' ) ) . + $this->parent->getRadioSet( array( + 'var' => '_SkipOptional', + 'itemLabelPrefix' => 'config-optional-', + 'values' => array( 'continue', 'skip' ) + ) ) + ); + + // Restore the default value + $this->setVar( 'wgMetaNamespace', $metaNS ); + + $this->endForm(); + return 'output'; + } + + public function submit() { + $retVal = true; + $this->parent->setVarsFromRequest( array( 'wgSitename', '_NamespaceType', + '_AdminName', '_AdminPassword', '_AdminPassword2', '_AdminEmail', + '_Subscribe', '_SkipOptional', 'wgMetaNamespace' ) ); + + // Validate site name + if ( strval( $this->getVar( 'wgSitename' ) ) === '' ) { + $this->parent->showError( 'config-site-name-blank' ); + $retVal = false; + } + + // Fetch namespace + $nsType = $this->getVar( '_NamespaceType' ); + if ( $nsType == 'site-name' ) { + $name = $this->getVar( 'wgSitename' ); + // Sanitize for namespace + // This algorithm should match the JS one in WebInstallerOutput.php + $name = preg_replace( '/[\[\]\{\}|#<>%+? ]/', '_', $name ); + $name = str_replace( '&', '&', $name ); + $name = preg_replace( '/__+/', '_', $name ); + $name = ucfirst( trim( $name, '_' ) ); + } elseif ( $nsType == 'generic' ) { + $name = wfMsg( 'config-ns-generic' ); + } else { // other + $name = $this->getVar( 'wgMetaNamespace' ); + } + + // Validate namespace + if ( strpos( $name, ':' ) !== false ) { + $good = false; + } else { + // Title-style validation + $title = Title::newFromText( $name ); + if ( !$title ) { + $good = $nsType == 'site-name'; + } else { + $name = $title->getDBkey(); + $good = true; + } + } + if ( !$good ) { + $this->parent->showError( 'config-ns-invalid', $name ); + $retVal = false; + } + + // Make sure it won't conflict with any existing namespaces + global $wgContLang; + $nsIndex = $wgContLang->getNsIndex( $name ); + if( $nsIndex !== false && $nsIndex !== NS_PROJECT ) { + $this->parent->showError( 'config-ns-conflict', $name ); + $retVal = false; + } + + $this->setVar( 'wgMetaNamespace', $name ); + + // Validate username for creation + $name = $this->getVar( '_AdminName' ); + if ( strval( $name ) === '' ) { + $this->parent->showError( 'config-admin-name-blank' ); + $cname = $name; + $retVal = false; + } else { + $cname = User::getCanonicalName( $name, 'creatable' ); + if ( $cname === false ) { + $this->parent->showError( 'config-admin-name-invalid', $name ); + $retVal = false; + } else { + $this->setVar( '_AdminName', $cname ); + } + } + + // Validate password + $msg = false; + $valid = false; + $pwd = $this->getVar( '_AdminPassword' ); + $user = User::newFromName( $cname ); + $valid = $user && $user->getPasswordValidity( $pwd ); + if ( strval( $pwd ) === '' ) { + # $user->getPasswordValidity just checks for $wgMinimalPasswordLength. + # This message is more specific and helpful. + $msg = 'config-admin-password-blank'; + } elseif ( $pwd !== $this->getVar( '_AdminPassword2' ) ) { + $msg = 'config-admin-password-mismatch'; + } elseif ( $valid !== true ) { + # As of writing this will only catch the username being e.g. 'FOO' and + # the password 'foo' + $msg = $valid; + } + if ( $msg !== false ) { + call_user_func_array( array( $this->parent, 'showError' ), (array)$msg ); + $this->setVar( '_AdminPassword', '' ); + $this->setVar( '_AdminPassword2', '' ); + $retVal = false; + } + + // Validate e-mail if provided + $email = $this->getVar( '_AdminEmail' ); + if( $email && !User::isValidEmailAddr( $email ) ) { + $this->parent->showError( 'config-admin-error-bademail' ); + $retVal = false; + } + + return $retVal; + } + +} + +class WebInstaller_Options extends WebInstallerPage { + + public function execute() { + if ( $this->getVar( '_SkipOptional' ) == 'skip' ) { + return 'skip'; + } + if ( $this->parent->request->wasPosted() ) { + if ( $this->submit() ) { + return 'continue'; + } + } + + $emailwrapperStyle = $this->getVar( 'wgEnableEmail' ) ? '' : 'display: none'; + $this->startForm(); + $this->addHTML( + # User Rights + $this->parent->getRadioSet( array( + 'var' => '_RightsProfile', + 'label' => 'config-profile', + 'itemLabelPrefix' => 'config-profile-', + 'values' => array_keys( $this->parent->rightsProfiles ), + ) ) . + $this->parent->getInfoBox( wfMsgNoTrans( 'config-profile-help' ) ) . + + # Licensing + $this->parent->getRadioSet( array( + 'var' => '_LicenseCode', + 'label' => 'config-license', + 'itemLabelPrefix' => 'config-license-', + 'values' => array_keys( $this->parent->licenses ), + 'commonAttribs' => array( 'class' => 'licenseRadio' ), + ) ) . + $this->getCCChooser() . + $this->parent->getHelpBox( 'config-license-help' ) . + + # E-mail + $this->getFieldSetStart( 'config-email-settings' ) . + $this->parent->getCheckBox( array( + 'var' => 'wgEnableEmail', + 'label' => 'config-enable-email', + 'attribs' => array( 'class' => 'showHideRadio', 'rel' => 'emailwrapper' ), + ) ) . + $this->parent->getHelpBox( 'config-enable-email-help' ) . + "
    " . + $this->parent->getTextBox( array( + 'var' => 'wgPasswordSender', + 'label' => 'config-email-sender' + ) ) . + $this->parent->getHelpBox( 'config-email-sender-help' ) . + $this->parent->getCheckBox( array( + 'var' => 'wgEnableUserEmail', + 'label' => 'config-email-user', + ) ) . + $this->parent->getHelpBox( 'config-email-user-help' ) . + $this->parent->getCheckBox( array( + 'var' => 'wgEnotifUserTalk', + 'label' => 'config-email-usertalk', + ) ) . + $this->parent->getHelpBox( 'config-email-usertalk-help' ) . + $this->parent->getCheckBox( array( + 'var' => 'wgEnotifWatchlist', + 'label' => 'config-email-watchlist', + ) ) . + $this->parent->getHelpBox( 'config-email-watchlist-help' ) . + $this->parent->getCheckBox( array( + 'var' => 'wgEmailAuthentication', + 'label' => 'config-email-auth', + ) ) . + $this->parent->getHelpBox( 'config-email-auth-help' ) . + "
    " . + $this->getFieldSetEnd() + ); + + $extensions = $this->parent->findExtensions(); + + if( $extensions ) { + $extHtml = $this->getFieldSetStart( 'config-extensions' ); + + foreach( $extensions as $ext ) { + $extHtml .= $this->parent->getCheckBox( array( + 'var' => "ext-$ext", + 'rawtext' => $ext, + ) ); + } + + $extHtml .= $this->parent->getHelpBox( 'config-extensions-help' ) . + $this->getFieldSetEnd(); + $this->addHTML( $extHtml ); + } + + // Having / in paths in Windows looks funny :) + $this->setVar( 'wgDeletedDirectory', + str_replace( + '/', DIRECTORY_SEPARATOR, + $this->getVar( 'wgDeletedDirectory' ) + ) + ); + + $uploadwrapperStyle = $this->getVar( 'wgEnableUploads' ) ? '' : 'display: none'; + $this->addHTML( + # Uploading + $this->getFieldSetStart( 'config-upload-settings' ) . + $this->parent->getCheckBox( array( + 'var' => 'wgEnableUploads', + 'label' => 'config-upload-enable', + 'attribs' => array( 'class' => 'showHideRadio', 'rel' => 'uploadwrapper' ), + 'help' => $this->parent->getHelpBox( 'config-upload-help' ) + ) ) . + '
    ' . + $this->parent->getTextBox( array( + 'var' => 'wgDeletedDirectory', + 'label' => 'config-upload-deleted', + 'help' => $this->parent->getHelpBox( 'config-upload-deleted-help' ) + ) ) . + '
    ' . + $this->parent->getTextBox( array( + 'var' => 'wgLogo', + 'label' => 'config-logo', + 'help' => $this->parent->getHelpBox( 'config-logo-help' ) + ) ) + ); + $this->addHTML( + $this->parent->getCheckBox( array( + 'var' => 'wgUseInstantCommons', + 'label' => 'config-instantcommons', + 'help' => $this->parent->getHelpBox( 'config-instantcommons-help' ) + ) ) . + $this->getFieldSetEnd() + ); + + $caches = array( 'none' ); + if( count( $this->getVar( '_Caches' ) ) ) { + $caches[] = 'accel'; + } + $caches[] = 'memcached'; + + $this->addHTML( + # Advanced settings + $this->getFieldSetStart( 'config-advanced-settings' ) . + # Object cache settings + $this->parent->getRadioSet( array( + 'var' => 'wgMainCacheType', + 'label' => 'config-cache-options', + 'itemLabelPrefix' => 'config-cache-', + 'values' => $caches, + 'value' => 'none', + ) ) . + $this->parent->getHelpBox( 'config-cache-help' ) . + '
    ' . + $this->parent->getTextArea( array( + 'var' => '_MemCachedServers', + 'label' => 'config-memcached-servers', + 'help' => $this->parent->getHelpBox( 'config-memcached-help' ) + ) ) . + '
    ' . + $this->getFieldSetEnd() + ); + $this->endForm(); + } + + public function getCCPartnerUrl() { + global $wgServer; + $exitUrl = $wgServer . $this->parent->getUrl( array( + 'page' => 'Options', + 'SubmitCC' => 'indeed', + 'config__LicenseCode' => 'cc', + 'config_wgRightsUrl' => '[license_url]', + 'config_wgRightsText' => '[license_name]', + 'config_wgRightsIcon' => '[license_button]', + ) ); + $styleUrl = $wgServer . dirname( dirname( $this->parent->getUrl() ) ) . + '/skins/common/config-cc.css'; + $iframeUrl = 'http://creativecommons.org/license/?' . + wfArrayToCGI( array( + 'partner' => 'MediaWiki', + 'exit_url' => $exitUrl, + 'lang' => $this->getVar( '_UserLang' ), + 'stylesheet' => $styleUrl, + ) ); + return $iframeUrl; + } + + public function getCCChooser() { + $iframeAttribs = array( + 'class' => 'config-cc-iframe', + 'name' => 'config-cc-iframe', + 'id' => 'config-cc-iframe', + 'frameborder' => 0, + 'width' => '100%', + 'height' => '100%', + ); + if ( $this->getVar( '_CCDone' ) ) { + $iframeAttribs['src'] = $this->parent->getUrl( array( 'ShowCC' => 'yes' ) ); + } else { + $iframeAttribs['src'] = $this->getCCPartnerUrl(); + } + $wrapperStyle = ($this->getVar('_LicenseCode') == 'cc-choose') ? '' : 'display: none'; + + return + "
    \n" . + Html::element( 'iframe', $iframeAttribs, '', false /* not short */ ) . + "
    \n"; + } + + public function getCCDoneBox() { + $js = "parent.document.getElementById('config-cc-wrapper').style.height = '$1';"; + // If you change this height, also change it in config.css + $expandJs = str_replace( '$1', '54em', $js ); + $reduceJs = str_replace( '$1', '70px', $js ); + return + '

    '. + Html::element( 'img', array( 'src' => $this->getVar( 'wgRightsIcon' ) ) ) . + '  ' . + htmlspecialchars( $this->getVar( 'wgRightsText' ) ) . + "

    \n" . + "

    " . + Html::element( 'a', + array( + 'href' => $this->getCCPartnerUrl(), + 'onclick' => $expandJs, + ), + wfMsg( 'config-cc-again' ) + ) . + "

    \n" . + "\n"; + } + + public function submitCC() { + $newValues = $this->parent->setVarsFromRequest( + array( 'wgRightsUrl', 'wgRightsText', 'wgRightsIcon' ) ); + if ( count( $newValues ) != 3 ) { + $this->parent->showError( 'config-cc-error' ); + return; + } + $this->setVar( '_CCDone', true ); + $this->addHTML( $this->getCCDoneBox() ); + } + + public function submit() { + $this->parent->setVarsFromRequest( array( '_RightsProfile', '_LicenseCode', + 'wgEnableEmail', 'wgPasswordSender', 'wgEnableUploads', 'wgLogo', + 'wgEnableUserEmail', 'wgEnotifUserTalk', 'wgEnotifWatchlist', + 'wgEmailAuthentication', 'wgMainCacheType', '_MemCachedServers', + 'wgUseInstantCommons' ) ); + + if ( !in_array( $this->getVar( '_RightsProfile' ), + array_keys( $this->parent->rightsProfiles ) ) ) + { + reset( $this->parent->rightsProfiles ); + $this->setVar( '_RightsProfile', key( $this->parent->rightsProfiles ) ); + } + + $code = $this->getVar( '_LicenseCode' ); + if ( $code == 'cc-choose' ) { + if ( !$this->getVar( '_CCDone' ) ) { + $this->parent->showError( 'config-cc-not-chosen' ); + return false; + } + } elseif ( in_array( $code, array_keys( $this->parent->licenses ) ) ) { + $entry = $this->parent->licenses[$code]; + if ( isset( $entry['text'] ) ) { + $this->setVar( 'wgRightsText', $entry['text'] ); + } else { + $this->setVar( 'wgRightsText', wfMsg( 'config-license-' . $code ) ); + } + $this->setVar( 'wgRightsUrl', $entry['url'] ); + $this->setVar( 'wgRightsIcon', $entry['icon'] ); + } else { + $this->setVar( 'wgRightsText', '' ); + $this->setVar( 'wgRightsUrl', '' ); + $this->setVar( 'wgRightsIcon', '' ); + } + + $extsAvailable = $this->parent->findExtensions(); + $extsToInstall = array(); + foreach( $extsAvailable as $ext ) { + if( $this->parent->request->getCheck( 'config_ext-' . $ext ) ) { + $extsToInstall[] = $ext; + } + } + $this->parent->setVar( '_Extensions', $extsToInstall ); + + if( $this->getVar( 'wgMainCacheType' ) == 'memcached' ) { + $memcServers = explode( "\n", $this->getVar( '_MemCachedServers' ) ); + if( !$memcServers ) { + $this->parent->showError( 'config-memcache-needservers' ); + return false; + } + + foreach( $memcServers as $server ) { + $memcParts = explode( ":", $server ); + if( !IP::isValid( $memcParts[0] ) ) { + $this->parent->showError( 'config-memcache-badip', $memcParts[0] ); + return false; + } elseif( !isset( $memcParts[1] ) ) { + $this->parent->showError( 'config-memcache-noport', $memcParts[0] ); + return false; + } elseif( $memcParts[1] < 1 || $memcParts[1] > 65535 ) { + $this->parent->showError( 'config-memcache-badport', 1, 65535 ); + return false; + } + } + } + return true; + } + +} + +class WebInstaller_Install extends WebInstallerPage { + + public function execute() { + if( $this->getVar( '_UpgradeDone' ) ) { + return 'skip'; + } elseif( $this->getVar( '_InstallDone' ) ) { + return 'continue'; + } elseif( $this->parent->request->wasPosted() ) { + $this->startForm(); + $this->addHTML("
      "); + $results = $this->parent->performInstallation( + array( $this, 'startStage'), + array( $this, 'endStage' ) + ); + $this->addHTML("
    "); + // PerformInstallation bails on a fatal, so make sure the last item + // completed before giving 'next.' Likewise, only provide back on failure + $lastStep = end( $results ); + $continue = $lastStep->isOK() ? 'continue' : false; + $back = $lastStep->isOK() ? false : 'back'; + $this->endForm( $continue, $back ); + } else { + $this->startForm(); + $this->addHTML( $this->parent->getInfoBox( wfMsgNoTrans( 'config-install-begin' ) ) ); + $this->endForm(); + } + return true; + } + + public function startStage( $step ) { + $this->addHTML( "
  • " . wfMsgHtml( "config-install-$step" ) . wfMsg( 'ellipsis') ); + if ( $step == 'extension-tables' ) { + $this->startLiveBox(); + } + } + + public function endStage( $step, $status ) { + if ( $step == 'extension-tables' ) { + $this->endLiveBox(); + } + $msg = $status->isOk() ? 'config-install-step-done' : 'config-install-step-failed'; + $html = wfMsgHtml( 'word-separator' ) . wfMsgHtml( $msg ); + if ( !$status->isOk() ) { + $html = "$html"; + } + $this->addHTML( $html . "
  • \n" ); + if( !$status->isGood() ) { + $this->parent->showStatusBox( $status ); + } + } + +} + +class WebInstaller_Complete extends WebInstallerPage { + + public function execute() { + // Pop up a dialog box, to make it difficult for the user to forget + // to download the file + $lsUrl = $GLOBALS['wgServer'] . $this->parent->getURL( array( 'localsettings' => 1 ) ); + if ( isset( $_SERVER['HTTP_USER_AGENT'] ) && strpos( $_SERVER['HTTP_USER_AGENT'], 'MSIE' ) !== false ) { + // JS appears the only method that works consistently with IE7+ + $this->addHtml( "\n\n" ); + } else { + $this->parent->request->response()->header( "Refresh: 0;url=$lsUrl" ); + } + + $this->startForm(); + $this->parent->disableLinkPopups(); + $this->addHTML( + $this->parent->getInfoBox( + wfMsgNoTrans( 'config-install-done', + $lsUrl, + $GLOBALS['wgServer'] . + $this->getVar( 'wgScriptPath' ) . '/index' . + $this->getVar( 'wgScriptExtension' ), + '' + ), 'tick-32.png' + ) + ); + $this->parent->restoreLinkPopups(); + $this->endForm( false, false ); + } +} + +class WebInstaller_Restart extends WebInstallerPage { + + public function execute() { + $r = $this->parent->request; + if ( $r->wasPosted() ) { + $really = $r->getVal( 'submit-restart' ); + if ( $really ) { + $this->parent->reset(); + } + return 'continue'; + } + + $this->startForm(); + $s = $this->parent->getWarningBox( wfMsgNoTrans( 'config-help-restart' ) ); + $this->addHTML( $s ); + $this->endForm( 'restart' ); + } + +} + +abstract class WebInstaller_Document extends WebInstallerPage { + + protected abstract function getFileName(); + + public function execute() { + $text = $this->getFileContents(); + $text = $this->formatTextFile( $text ); + $this->parent->output->addWikiText( $text ); + $this->startForm(); + $this->endForm( false ); + } + + public function getFileContents() { + return file_get_contents( dirname( __FILE__ ) . '/../../' . $this->getFileName() ); + } + + protected function formatTextFile( $text ) { + // Use Unix line endings, escape some wikitext stuff + $text = str_replace( array( '<', '{{', '[[', "\r" ), + array( '<', '{{', '[[', '' ), $text ); + // join word-wrapped lines into one + do { + $prev = $text; + $text = preg_replace( "/\n([\\*#\t])([^\n]*?)\n([^\n#\\*:]+)/", "\n\\1\\2 \\3", $text ); + } while ( $text != $prev ); + // Replace tab indents with colons + $text = preg_replace( '/^\t\t/m', '::', $text ); + $text = preg_replace( '/^\t/m', ':', $text ); + // turn (bug nnnn) into links + $text = preg_replace_callback('/bug (\d+)/', array( $this, 'replaceBugLinks' ), $text ); + // add links to manual to every global variable mentioned + $text = preg_replace_callback('/(\$wg[a-z0-9_]+)/i', array( $this, 'replaceConfigLinks' ), $text ); + return $text; + } + + private function replaceBugLinks( $matches ) { + return '[https://bugzilla.wikimedia.org/' . + $matches[1] . ' bug ' . $matches[1] . ']'; + } + + private function replaceConfigLinks( $matches ) { + return '[http://www.mediawiki.org/wiki/Manual:' . + $matches[1] . ' ' . $matches[1] . ']'; + } + +} + +class WebInstaller_Readme extends WebInstaller_Document { + protected function getFileName() { return 'README'; } +} + +class WebInstaller_ReleaseNotes extends WebInstaller_Document { + protected function getFileName() { return 'RELEASE-NOTES'; } +} + +class WebInstaller_UpgradeDoc extends WebInstaller_Document { + protected function getFileName() { return 'UPGRADE'; } +} + +class WebInstaller_Copying extends WebInstaller_Document { + protected function getFileName() { return 'COPYING'; } +} + diff --git a/includes/job/DoubleRedirectJob.php b/includes/job/DoubleRedirectJob.php new file mode 100644 index 00000000..3b4b0188 --- /dev/null +++ b/includes/job/DoubleRedirectJob.php @@ -0,0 +1,178 @@ + + * @param $redirTitle Title: the title which has changed, redirects pointing to this title are fixed + * @param $destTitle Not used + */ + public static function fixRedirects( $reason, $redirTitle, $destTitle = false ) { + # Need to use the master to get the redirect table updated in the same transaction + $dbw = wfGetDB( DB_MASTER ); + $res = $dbw->select( + array( 'redirect', 'page' ), + array( 'page_namespace', 'page_title' ), + array( + 'page_id = rd_from', + 'rd_namespace' => $redirTitle->getNamespace(), + 'rd_title' => $redirTitle->getDBkey() + ), __METHOD__ ); + if ( !$res->numRows() ) { + return; + } + $jobs = array(); + foreach ( $res as $row ) { + $title = Title::makeTitle( $row->page_namespace, $row->page_title ); + if ( !$title ) { + continue; + } + + $jobs[] = new self( $title, array( + 'reason' => $reason, + 'redirTitle' => $redirTitle->getPrefixedDBkey() ) ); + # Avoid excessive memory usage + if ( count( $jobs ) > 10000 ) { + Job::batchInsert( $jobs ); + $jobs = array(); + } + } + Job::batchInsert( $jobs ); + } + function __construct( $title, $params = false, $id = 0 ) { + parent::__construct( 'fixDoubleRedirect', $title, $params, $id ); + $this->reason = $params['reason']; + $this->redirTitle = Title::newFromText( $params['redirTitle'] ); + $this->destTitleText = !empty( $params['destTitle'] ) ? $params['destTitle'] : ''; + } + + function run() { + if ( !$this->redirTitle ) { + $this->setLastError( 'Invalid title' ); + return false; + } + + $targetRev = Revision::newFromTitle( $this->title ); + if ( !$targetRev ) { + wfDebug( __METHOD__.": target redirect already deleted, ignoring\n" ); + return true; + } + $text = $targetRev->getText(); + $currentDest = Title::newFromRedirect( $text ); + if ( !$currentDest || !$currentDest->equals( $this->redirTitle ) ) { + wfDebug( __METHOD__.": Redirect has changed since the job was queued\n" ); + return true; + } + + # Check for a suppression tag (used e.g. in periodically archived discussions) + $mw = MagicWord::get( 'staticredirect' ); + if ( $mw->match( $text ) ) { + wfDebug( __METHOD__.": skipping: suppressed with __STATICREDIRECT__\n" ); + return true; + } + + # Find the current final destination + $newTitle = self::getFinalDestination( $this->redirTitle ); + if ( !$newTitle ) { + wfDebug( __METHOD__.": skipping: single redirect, circular redirect or invalid redirect destination\n" ); + return true; + } + if ( $newTitle->equals( $this->redirTitle ) ) { + # The redirect is already right, no need to change it + # This can happen if the page was moved back (say after vandalism) + wfDebug( __METHOD__.": skipping, already good\n" ); + } + + # Preserve fragment (bug 14904) + $newTitle = Title::makeTitle( $newTitle->getNamespace(), $newTitle->getDBkey(), + $currentDest->getFragment() ); + + # Fix the text + # Remember that redirect pages can have categories, templates, etc., + # so the regex has to be fairly general + $newText = preg_replace( '/ \[ \[ [^\]]* \] \] /x', + '[[' . $newTitle->getFullText() . ']]', + $text, 1 ); + + if ( $newText === $text ) { + $this->setLastError( 'Text unchanged???' ); + return false; + } + + # Save it + global $wgUser; + $oldUser = $wgUser; + $wgUser = $this->getUser(); + $article = new Article( $this->title ); + $reason = wfMsgForContent( 'double-redirect-fixed-' . $this->reason, + $this->redirTitle->getPrefixedText(), $newTitle->getPrefixedText() ); + $article->doEdit( $newText, $reason, EDIT_UPDATE | EDIT_SUPPRESS_RC ); + $wgUser = $oldUser; + + return true; + } + + /** + * Get the final destination of a redirect + * @return false if the specified title is not a redirect, or if it is a circular redirect + */ + public static function getFinalDestination( $title ) { + $dbw = wfGetDB( DB_MASTER ); + + $seenTitles = array(); # Circular redirect check + $dest = false; + + while ( true ) { + $titleText = $title->getPrefixedDBkey(); + if ( isset( $seenTitles[$titleText] ) ) { + wfDebug( __METHOD__, "Circular redirect detected, aborting\n" ); + return false; + } + $seenTitles[$titleText] = true; + + $row = $dbw->selectRow( + array( 'redirect', 'page' ), + array( 'rd_namespace', 'rd_title' ), + array( + 'rd_from=page_id', + 'page_namespace' => $title->getNamespace(), + 'page_title' => $title->getDBkey() + ), __METHOD__ ); + if ( !$row ) { + # No redirect from here, chain terminates + break; + } else { + $dest = $title = Title::makeTitle( $row->rd_namespace, $row->rd_title ); + } + } + return $dest; + } + + /** + * Get a user object for doing edits, from a request-lifetime cache + */ + function getUser() { + if ( !self::$user ) { + self::$user = User::newFromName( wfMsgForContent( 'double-redirect-fixer' ), false ); + if ( !self::$user->isLoggedIn() ) { + self::$user->addToDatabase(); + } + } + return self::$user; + } +} + diff --git a/includes/job/EmaillingJob.php b/includes/job/EmaillingJob.php new file mode 100644 index 00000000..89b74a41 --- /dev/null +++ b/includes/job/EmaillingJob.php @@ -0,0 +1,31 @@ +params['to'], + $this->params['from'], + $this->params['subj'], + $this->params['body'], + $this->params['replyto'] + ); + return true; + } + +} diff --git a/includes/job/EnotifNotifyJob.php b/includes/job/EnotifNotifyJob.php new file mode 100644 index 00000000..5d2a08ea --- /dev/null +++ b/includes/job/EnotifNotifyJob.php @@ -0,0 +1,41 @@ +params['editorID']) && $this->params['editorID'] ) { + $editor = User::newFromId( $this->params['editorID'] ); + // B/C, only the name might be given. + } else { + $editor = User::newFromName( $this->params['editor'], false ); + } + $enotif->actuallyNotifyOnPageChange( + $editor, + $this->title, + $this->params['timestamp'], + $this->params['summary'], + $this->params['minorEdit'], + $this->params['oldid'], + $this->params['watchers'] + ); + return true; + } + +} diff --git a/includes/job/JobQueue.php b/includes/job/JobQueue.php new file mode 100644 index 00000000..8eec8215 --- /dev/null +++ b/includes/job/JobQueue.php @@ -0,0 +1,344 @@ +selectRow( + 'job', + '*', + array( 'job_cmd' => $type ), + __METHOD__, + array( 'LIMIT' => 1 ) + ); + + if ( $row === false ) { + wfProfileOut( __METHOD__ ); + return false; + } + + /* Ensure we "own" this row */ + $dbw->delete( 'job', array( 'job_id' => $row->job_id ), __METHOD__ ); + $affected = $dbw->affectedRows(); + + if ( $affected == 0 ) { + wfProfileOut( __METHOD__ ); + return false; + } + + $namespace = $row->job_namespace; + $dbkey = $row->job_title; + $title = Title::makeTitleSafe( $namespace, $dbkey ); + $job = Job::factory( $row->job_cmd, $title, Job::extractBlob( $row->job_params ), + $row->job_id ); + + $dbw->delete( 'job', $job->insertFields(), __METHOD__ ); + $dbw->commit(); + + wfProfileOut( __METHOD__ ); + return $job; + } + + /** + * Pop a job off the front of the queue + * + * @param $offset Integer: Number of jobs to skip + * @return Job or false if there's no jobs + */ + static function pop( $offset = 0 ) { + wfProfileIn( __METHOD__ ); + + $dbr = wfGetDB( DB_SLAVE ); + + /* Get a job from the slave, start with an offset, + scan full set afterwards, avoid hitting purged rows + + NB: If random fetch previously was used, offset + will always be ahead of few entries + */ + + $row = $dbr->selectRow( 'job', '*', "job_id >= ${offset}", __METHOD__, + array( 'ORDER BY' => 'job_id', 'LIMIT' => 1 ) ); + + // Refetching without offset is needed as some of job IDs could have had delayed commits + // and have lower IDs than jobs already executed, blame concurrency :) + // + if ( $row === false ) { + if ( $offset != 0 ) { + $row = $dbr->selectRow( 'job', '*', '', __METHOD__, + array( 'ORDER BY' => 'job_id', 'LIMIT' => 1 ) ); + } + + if ( $row === false ) { + wfProfileOut( __METHOD__ ); + return false; + } + } + + // Try to delete it from the master + $dbw = wfGetDB( DB_MASTER ); + $dbw->delete( 'job', array( 'job_id' => $row->job_id ), __METHOD__ ); + $affected = $dbw->affectedRows(); + $dbw->commit(); + + if ( !$affected ) { + // Failed, someone else beat us to it + // Try getting a random row + $row = $dbw->selectRow( 'job', array( 'MIN(job_id) as minjob', + 'MAX(job_id) as maxjob' ), '1=1', __METHOD__ ); + if ( $row === false || is_null( $row->minjob ) || is_null( $row->maxjob ) ) { + // No jobs to get + wfProfileOut( __METHOD__ ); + return false; + } + // Get the random row + $row = $dbw->selectRow( 'job', '*', + 'job_id >= ' . mt_rand( $row->minjob, $row->maxjob ), __METHOD__ ); + if ( $row === false ) { + // Random job gone before we got the chance to select it + // Give up + wfProfileOut( __METHOD__ ); + return false; + } + // Delete the random row + $dbw->delete( 'job', array( 'job_id' => $row->job_id ), __METHOD__ ); + $affected = $dbw->affectedRows(); + $dbw->commit(); + + if ( !$affected ) { + // Random job gone before we exclusively deleted it + // Give up + wfProfileOut( __METHOD__ ); + return false; + } + } + + // If execution got to here, there's a row in $row that has been deleted from the database + // by this thread. Hence the concurrent pop was successful. + $namespace = $row->job_namespace; + $dbkey = $row->job_title; + $title = Title::makeTitleSafe( $namespace, $dbkey ); + $job = Job::factory( $row->job_cmd, $title, Job::extractBlob( $row->job_params ), $row->job_id ); + + // Remove any duplicates it may have later in the queue + // Deadlock prone section + $dbw->begin(); + $dbw->delete( 'job', $job->insertFields(), __METHOD__ ); + $dbw->commit(); + + wfProfileOut( __METHOD__ ); + return $job; + } + + /** + * Create the appropriate object to handle a specific job + * + * @param $command String: Job command + * @param $title Title: Associated title + * @param $params Array: Job parameters + * @param $id Int: Job identifier + * @return Job + */ + static function factory( $command, $title, $params = false, $id = 0 ) { + global $wgJobClasses; + if( isset( $wgJobClasses[$command] ) ) { + $class = $wgJobClasses[$command]; + return new $class( $title, $params, $id ); + } + throw new MWException( "Invalid job command `{$command}`" ); + } + + static function makeBlob( $params ) { + if ( $params !== false ) { + return serialize( $params ); + } else { + return ''; + } + } + + static function extractBlob( $blob ) { + if ( (string)$blob !== '' ) { + return unserialize( $blob ); + } else { + return false; + } + } + + /** + * Batch-insert a group of jobs into the queue. + * This will be wrapped in a transaction with a forced commit. + * + * This may add duplicate at insert time, but they will be + * removed later on, when the first one is popped. + * + * @param $jobs array of Job objects + */ + static function batchInsert( $jobs ) { + if ( !count( $jobs ) ) { + return; + } + $dbw = wfGetDB( DB_MASTER ); + $rows = array(); + foreach ( $jobs as $job ) { + $rows[] = $job->insertFields(); + if ( count( $rows ) >= 50 ) { + # Do a small transaction to avoid slave lag + $dbw->begin(); + $dbw->insert( 'job', $rows, __METHOD__, 'IGNORE' ); + $dbw->commit(); + $rows = array(); + } + } + if ( $rows ) { // last chunk + $dbw->begin(); + $dbw->insert( 'job', $rows, __METHOD__, 'IGNORE' ); + $dbw->commit(); + } + wfIncrStats( 'job-insert', count( $jobs ) ); + } + + /** + * Insert a group of jobs into the queue. + * + * Same as batchInsert() but does not commit and can thus + * be rolled-back as part of a larger transaction. However, + * large batches of jobs can cause slave lag. + * + * @param $jobs array of Job objects + */ + static function safeBatchInsert( $jobs ) { + if ( !count( $jobs ) ) { + return; + } + $dbw = wfGetDB( DB_MASTER ); + $rows = array(); + foreach ( $jobs as $job ) { + $rows[] = $job->insertFields(); + if ( count( $rows ) >= 500 ) { + $dbw->insert( 'job', $rows, __METHOD__, 'IGNORE' ); + $rows = array(); + } + } + if ( $rows ) { // last chunk + $dbw->insert( 'job', $rows, __METHOD__, 'IGNORE' ); + } + wfIncrStats( 'job-insert', count( $jobs ) ); + } + + /*------------------------------------------------------------------------- + * Non-static functions + *------------------------------------------------------------------------*/ + + function __construct( $command, $title, $params = false, $id = 0 ) { + $this->command = $command; + $this->title = $title; + $this->params = $params; + $this->id = $id; + + // A bit of premature generalisation + // Oh well, the whole class is premature generalisation really + $this->removeDuplicates = true; + } + + /** + * Insert a single job into the queue. + * @return bool true on success + */ + function insert() { + $fields = $this->insertFields(); + + $dbw = wfGetDB( DB_MASTER ); + + if ( $this->removeDuplicates ) { + $res = $dbw->select( 'job', array( '1' ), $fields, __METHOD__ ); + if ( $dbw->numRows( $res ) ) { + return; + } + } + return $dbw->insert( 'job', $fields, __METHOD__ ); + } + + protected function insertFields() { + $dbw = wfGetDB( DB_MASTER ); + return array( + 'job_id' => $dbw->nextSequenceValue( 'job_job_id_seq' ), + 'job_cmd' => $this->command, + 'job_namespace' => $this->title->getNamespace(), + 'job_title' => $this->title->getDBkey(), + 'job_params' => Job::makeBlob( $this->params ) + ); + } + + function toString() { + $paramString = ''; + if ( $this->params ) { + foreach ( $this->params as $key => $value ) { + if ( $paramString != '' ) { + $paramString .= ' '; + } + $paramString .= "$key=$value"; + } + } + + if ( is_object( $this->title ) ) { + $s = "{$this->command} " . $this->title->getPrefixedDBkey(); + if ( $paramString !== '' ) { + $s .= ' ' . $paramString; + } + return $s; + } else { + return "{$this->command} $paramString"; + } + } + + protected function setLastError( $error ) { + $this->error = $error; + } + + function getLastError() { + return $this->error; + } +} diff --git a/includes/job/RefreshLinksJob.php b/includes/job/RefreshLinksJob.php new file mode 100644 index 00000000..cc91fa81 --- /dev/null +++ b/includes/job/RefreshLinksJob.php @@ -0,0 +1,128 @@ +clear(); + + if ( is_null( $this->title ) ) { + $this->error = "refreshLinks: Invalid title"; + wfProfileOut( __METHOD__ ); + return false; + } + + $revision = Revision::newFromTitle( $this->title ); + if ( !$revision ) { + $this->error = 'refreshLinks: Article not found "' . $this->title->getPrefixedDBkey() . '"'; + wfProfileOut( __METHOD__ ); + return false; + } + + wfProfileIn( __METHOD__.'-parse' ); + $options = new ParserOptions; + $parserOutput = $wgParser->parse( $revision->getText(), $this->title, $options, true, true, $revision->getId() ); + wfProfileOut( __METHOD__.'-parse' ); + wfProfileIn( __METHOD__.'-update' ); + $update = new LinksUpdate( $this->title, $parserOutput, false ); + $update->doUpdate(); + wfProfileOut( __METHOD__.'-update' ); + wfProfileOut( __METHOD__ ); + return true; + } +} + +/** + * Background job to update links for a given title. + * Newer version for high use templates. + * + * @ingroup JobQueue + */ +class RefreshLinksJob2 extends Job { + + function __construct( $title, $params, $id = 0 ) { + parent::__construct( 'refreshLinks2', $title, $params, $id ); + } + + /** + * Run a refreshLinks2 job + * @return boolean success + */ + function run() { + global $wgParser; + + wfProfileIn( __METHOD__ ); + + $linkCache = LinkCache::singleton(); + $linkCache->clear(); + + if( is_null( $this->title ) ) { + $this->error = "refreshLinks2: Invalid title"; + wfProfileOut( __METHOD__ ); + return false; + } + if( !isset($this->params['start']) || !isset($this->params['end']) ) { + $this->error = "refreshLinks2: Invalid params"; + wfProfileOut( __METHOD__ ); + return false; + } + $titles = $this->title->getBacklinkCache()->getLinks( + 'templatelinks', $this->params['start'], $this->params['end']); + + # Not suitable for page load triggered job running! + # Gracefully switch to refreshLinks jobs if this happens. + if( php_sapi_name() != 'cli' ) { + $jobs = array(); + foreach ( $titles as $title ) { + $jobs[] = new RefreshLinksJob( $title, '' ); + } + Job::batchInsert( $jobs ); + + wfProfileOut( __METHOD__ ); + return true; + } + # Re-parse each page that transcludes this page and update their tracking links... + foreach ( $titles as $title ) { + $revision = Revision::newFromTitle( $title ); + if ( !$revision ) { + $this->error = 'refreshLinks: Article not found "' . $title->getPrefixedDBkey() . '"'; + wfProfileOut( __METHOD__ ); + return false; + } + wfProfileIn( __METHOD__.'-parse' ); + $options = new ParserOptions; + $parserOutput = $wgParser->parse( $revision->getText(), $title, $options, true, true, $revision->getId() ); + wfProfileOut( __METHOD__.'-parse' ); + wfProfileIn( __METHOD__.'-update' ); + $update = new LinksUpdate( $title, $parserOutput, false ); + $update->doUpdate(); + wfProfileOut( __METHOD__.'-update' ); + wfWaitForSlaves( 5 ); + } + wfProfileOut( __METHOD__ ); + + return true; + } +} diff --git a/includes/job/UploadFromUrlJob.php b/includes/job/UploadFromUrlJob.php new file mode 100644 index 00000000..63166ef9 --- /dev/null +++ b/includes/job/UploadFromUrlJob.php @@ -0,0 +1,153 @@ +upload = new UploadFromUrl(); + $this->upload->initialize( + $this->title->getText(), + $this->params['url'], + false + ); + $this->user = User::newFromName( $this->params['userName'] ); + + # Fetch the file + $status = $this->upload->fetchFile(); + if ( !$status->isOk() ) { + $this->leaveMessage( $status ); + return true; + } + + # Verify upload + $result = $this->upload->verifyUpload(); + if ( $result['status'] != UploadBase::OK ) { + $status = $this->upload->convertVerifyErrorToStatus( $result ); + $this->leaveMessage( $status ); + return true; + } + + # Check warnings + if ( !$this->params['ignoreWarnings'] ) { + $warnings = $this->upload->checkWarnings(); + if ( $warnings ) { + wfSetupSession( $this->params['sessionId'] ); + + if ( $this->params['leaveMessage'] ) { + $this->user->leaveUserMessage( + wfMsg( 'upload-warning-subj' ), + wfMsg( 'upload-warning-msg', + $this->params['sessionKey'], + $this->params['url'] ) + ); + } else { + $this->storeResultInSession( 'Warning', + 'warnings', $warnings ); + } + + # Stash the upload in the session + $this->upload->stashSession( $this->params['sessionKey'] ); + session_write_close(); + + return true; + } + } + + # Perform the upload + $status = $this->upload->performUpload( + $this->params['comment'], + $this->params['pageText'], + $this->params['watch'], + $this->user + ); + $this->leaveMessage( $status ); + return true; + + } + + /** + * Leave a message on the user talk page or in the session according to + * $params['leaveMessage']. + * + * @param $status Status + */ + protected function leaveMessage( $status ) { + if ( $this->params['leaveMessage'] ) { + if ( $status->isGood() ) { + $this->user->leaveUserMessage( wfMsg( 'upload-success-subj' ), + wfMsg( 'upload-success-msg', + $this->upload->getTitle()->getText(), + $this->params['url'] + ) ); + } else { + $this->user->leaveUserMessage( wfMsg( 'upload-failure-subj' ), + wfMsg( 'upload-failure-msg', + $status->getWikiText(), + $this->params['url'] + ) ); + } + } else { + wfSetupSession( $this->params['sessionId'] ); + if ( $status->isOk() ) { + $this->storeResultInSession( 'Success', + 'filename', $this->upload->getLocalFile()->getName() ); + } else { + $this->storeResultInSession( 'Failure', + 'errors', $status->getErrorsArray() ); + } + session_write_close(); + } + } + + /** + * Store a result in the session data. Note that the caller is responsible + * for appropriate session_start and session_write_close calls. + * + * @param $result String: the result (Success|Warning|Failure) + * @param $dataKey String: the key of the extra data + * @param $dataValue Mixed: the extra data itself + */ + protected function storeResultInSession( $result, $dataKey, $dataValue ) { + $session =& self::getSessionData( $this->params['sessionKey'] ); + $session['result'] = $result; + $session[$dataKey] = $dataValue; + } + + /** + * Initialize the session data. Sets the intial result to queued. + */ + public function initializeSessionData() { + $session =& self::getSessionData( $this->params['sessionKey'] ); + $$session['result'] = 'Queued'; + } + + public static function &getSessionData( $key ) { + if ( !isset( $_SESSION[self::SESSION_KEYNAME][$key] ) ) { + $_SESSION[self::SESSION_KEYNAME][$key] = array(); + } + return $_SESSION[self::SESSION_KEYNAME][$key]; + } +} diff --git a/includes/json/FormatJson.php b/includes/json/FormatJson.php index 6db4a23f..b7049aeb 100644 --- a/includes/json/FormatJson.php +++ b/includes/json/FormatJson.php @@ -1,32 +1,60 @@ encode($value, $isHtml) ; + return $json->encode( $value, $isHtml ); } else { - return json_encode($value); + return json_encode( $value ); } } - public static function decode( $value, $assoc=false ){ - if (!function_exists('json_decode') ) { - $json = new Services_JSON(); - $jsonDec = $json->decode( $value ); + + /** + * Decodes a JSON string. + * + * @param $value String: the json string being decoded. + * @param $assoc Boolean: when true, returned objects will be converted into associative arrays. + * + * @return Mixed: the value encoded in json in appropriate PHP type. + * Values true, false and null (case-insensitive) are returned as true, false + * and &null; respectively. &null; is returned if the json cannot be + * decoded or if the encoded data is deeper than the recursion limit. + */ + public static function decode( $value, $assoc = false ) { + if ( !function_exists( 'json_decode' ) ) { if( $assoc ) - $jsonDec = wfObjectToArray( $jsonDec ); + $json = new Services_JSON( SERVICES_JSON_LOOSE_TYPE ); + else + $json = new Services_JSON(); + $jsonDec = $json->decode( $value ); return $jsonDec; } else { return json_decode( $value, $assoc ); } } + } diff --git a/includes/json/Services_JSON.php b/includes/json/Services_JSON.php index 588ece9c..5b4e0503 100644 --- a/includes/json/Services_JSON.php +++ b/includes/json/Services_JSON.php @@ -45,12 +45,13 @@ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. * +* @file * @ingroup API * @author Michal Migurski * @author Matt Knapp * @author Brett Stimmerman * @copyright 2005 Michal Migurski -* @version CVS: $Id: Services_JSON.php 79562 2011-01-04 06:15:54Z tstarling $ +* @version CVS: $Id: Services_JSON.php 90492 2011-06-20 22:39:10Z reedy $ * @license http://www.opensource.org/licenses/bsd-license.php * @see http://pear.php.net/pepr/pepr-proposal-show.php?id=198 */ @@ -118,7 +119,7 @@ class Services_JSON /** * constructs a new JSON instance * - * @param int $use object behavior flags; combine with boolean-OR + * @param $use Integer: object behavior flags; combine with boolean-OR * * possible values: * - SERVICES_JSON_LOOSE_TYPE: loose typing. @@ -131,7 +132,7 @@ class Services_JSON * bubble up with an error, so all return values * from encode() should be checked with isError() */ - function Services_JSON($use = 0) + function __construct($use = 0) { $this->use = $use; } @@ -156,8 +157,8 @@ class Services_JSON * provides a slower PHP-only method for installations * that lack the multibye string extension. * - * @param string $utf16 UTF-16 character - * @return string UTF-8 character + * @param $utf16 String: UTF-16 character + * @return String: UTF-8 character * @access private */ function utf162utf8($utf16) @@ -211,8 +212,8 @@ class Services_JSON * provides a slower PHP-only method for installations * that lack the multibye string extension. * - * @param string $utf8 UTF-8 character - * @return string UTF-16 character + * @param $utf8 String: UTF-8 character + * @return String: UTF-16 character * @access private */ function utf82utf16($utf8) @@ -265,11 +266,11 @@ class Services_JSON /** * encodes an arbitrary variable into JSON format * - * @param mixed $var any number, boolean, string, array, or object to be encoded. + * @param $var Mixed: any number, boolean, string, array, or object to be encoded. * see argument 1 to Services_JSON() above for array-parsing behavior. * if var is a strng, note that encode() always expects it * to be in ASCII or UTF-8 format! - * @param bool $pretty pretty-print output with indents and newlines + * @param $pretty Boolean: pretty-print output with indents and newlines * * @return mixed JSON string representation of input var or an error if a problem occurs * @access public @@ -285,7 +286,7 @@ class Services_JSON /** * encodes an arbitrary variable into JSON format * - * @param mixed $var any number, boolean, string, array, or object to be encoded. + * @param $var Mixed: any number, boolean, string, array, or object to be encoded. * see argument 1 to Services_JSON() above for array-parsing behavior. * if var is a strng, note that encode() always expects it * to be in ASCII or UTF-8 format! @@ -431,7 +432,7 @@ class Services_JSON $this->indent--; foreach($properties as $property) { - if(Services_JSON::isError($property)) { + if($this->isError($property)) { return $property; } } @@ -445,7 +446,7 @@ class Services_JSON $this->indent--; foreach($elements as $element) { - if(Services_JSON::isError($element)) { + if($this->isError($element)) { return $element; } } @@ -462,7 +463,7 @@ class Services_JSON $this->indent--; foreach($properties as $property) { - if(Services_JSON::isError($property)) { + if($this->isError($property)) { return $property; } } @@ -479,17 +480,17 @@ class Services_JSON /** * array-walking function for use in generating JSON-formatted name-value pairs * - * @param string $name name of key to use - * @param mixed $value reference to an array element to be encoded + * @param $name String: name of key to use + * @param $value Mixed: reference to an array element to be encoded * - * @return string JSON-formatted name-value pair, like '"name":value' + * @return String: JSON-formatted name-value pair, like '"name":value' * @access private */ function name_value($name, $value) { $encoded_value = $this->encode2($value); - if(Services_JSON::isError($encoded_value)) { + if($this->isError($encoded_value)) { return $encoded_value; } @@ -499,9 +500,9 @@ class Services_JSON /** * reduce a string by removing leading and trailing comments and whitespace * - * @param $str string string value to strip of comments and whitespace + * @param $str String: string value to strip of comments and whitespace * - * @return string string value stripped of comments and whitespace + * @return String: string value stripped of comments and whitespace * @access private */ function reduce_string($str) @@ -526,7 +527,7 @@ class Services_JSON /** * decodes a JSON string into appropriate variable * - * @param string $str JSON-formatted string + * @param $str String: JSON-formatted string * * @return mixed number, boolean, string, array, or object * corresponding to given JSON input string. @@ -869,7 +870,12 @@ if (class_exists('PEAR_Error')) { function Services_JSON_Error($message = 'unknown error', $code = null, $mode = null, $options = null, $userinfo = null) { - + $this->message = $message; + } + + function __toString() + { + return $this->message; } } } diff --git a/includes/libs/CSSJanus.php b/includes/libs/CSSJanus.php new file mode 100644 index 00000000..aa04bc49 --- /dev/null +++ b/includes/libs/CSSJanus.php @@ -0,0 +1,323 @@ + '`TMP`', + 'nonAscii' => '[\200-\377]', + 'unicode' => '(?:(?:\\[0-9a-f]{1,6})(?:\r\n|\s)?)', + 'num' => '(?:[0-9]*\.[0-9]+|[0-9]+)', + 'unit' => '(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)', + 'body_selector' => 'body\s*{\s*', + 'direction' => 'direction\s*:\s*', + 'escape' => null, + 'nmstart' => null, + 'nmchar' => null, + 'ident' => null, + 'quantity' => null, + 'possibly_negative_quantity' => null, + 'color' => null, + 'url_special_chars' => '[!#$%&*-~]', + 'valid_after_uri_chars' => '[\'\"]?\s*', + 'url_chars' => null, + 'lookahead_not_open_brace' => null, + 'lookahead_not_closing_paren' => null, + 'lookahead_for_closing_paren' => null, + 'lookbehind_not_letter' => '(? '[^\}]*?', + 'noflip_annotation' => '\/\*\s*@noflip\s*\*\/', + 'noflip_single' => null, + 'noflip_class' => null, + 'comment' => '/\/\*[^*]*\*+([^\/*][^*]*\*+)*\//', + 'direction_ltr' => null, + 'direction_rtl' => null, + 'left' => null, + 'right' => null, + 'left_in_url' => null, + 'right_in_url' => null, + 'ltr_in_url' => null, + 'rtl_in_url' => null, + 'cursor_east' => null, + 'cursor_west' => null, + 'four_notation_quantity' => null, + 'four_notation_color' => null, + 'bg_horizontal_percentage' => null, + 'bg_horizontal_percentage_x' => null, + ); + + /** + * Build patterns we can't define above because they depend on other patterns. + */ + private static function buildPatterns() { + if ( !is_null( self::$patterns['escape'] ) ) { + // Patterns have already been built + return; + } + + $patterns =& self::$patterns; + $patterns['escape'] = "(?:{$patterns['unicode']}|\\[^\r\n\f0-9a-f])"; + $patterns['nmstart'] = "(?:[_a-z]|{$patterns['nonAscii']}|{$patterns['escape']})"; + $patterns['nmchar'] = "(?:[_a-z0-9-]|{$patterns['nonAscii']}|{$patterns['escape']})"; + $patterns['ident'] = "-?{$patterns['nmstart']}{$patterns['nmchar']}*"; + $patterns['quantity'] = "{$patterns['num']}(?:\s*{$patterns['unit']}|{$patterns['ident']})?"; + $patterns['possibly_negative_quantity'] = "((?:-?{$patterns['quantity']})|(?:inherit|auto))"; + $patterns['color'] = "(#?{$patterns['nmchar']}+)"; + $patterns['url_chars'] = "(?:{$patterns['url_special_chars']}|{$patterns['nonAscii']}|{$patterns['escape']})*"; + $patterns['lookahead_not_open_brace'] = "(?!({$patterns['nmchar']}|\r?\n|\s|#|\:|\.|\,|\+|>)*?{)"; + $patterns['lookahead_not_closing_paren'] = "(?!{$patterns['url_chars']}?{$patterns['valid_after_uri_chars']}\))"; + $patterns['lookahead_for_closing_paren'] = "(?={$patterns['url_chars']}?{$patterns['valid_after_uri_chars']}\))"; + $patterns['noflip_single'] = "/({$patterns['noflip_annotation']}{$patterns['lookahead_not_open_brace']}[^;}]+;?)/i"; + $patterns['noflip_class'] = "/({$patterns['noflip_annotation']}{$patterns['chars_within_selector']}})/i"; + $patterns['direction_ltr'] = "/({$patterns['direction']})ltr/i"; + $patterns['direction_rtl'] = "/({$patterns['direction']})rtl/i"; + $patterns['left'] = "/{$patterns['lookbehind_not_letter']}(left){$patterns['lookahead_not_closing_paren']}{$patterns['lookahead_not_open_brace']}/i"; + $patterns['right'] = "/{$patterns['lookbehind_not_letter']}(right){$patterns['lookahead_not_closing_paren']}{$patterns['lookahead_not_open_brace']}/i"; + $patterns['left_in_url'] = "/{$patterns['lookbehind_not_letter']}(left){$patterns['lookahead_for_closing_paren']}/i"; + $patterns['right_in_url'] = "/{$patterns['lookbehind_not_letter']}(right){$patterns['lookahead_for_closing_paren']}/i"; + $patterns['ltr_in_url'] = "/{$patterns['lookbehind_not_letter']}(ltr){$patterns['lookahead_for_closing_paren']}/i"; + $patterns['rtl_in_url'] = "/{$patterns['lookbehind_not_letter']}(rtl){$patterns['lookahead_for_closing_paren']}/i"; + $patterns['cursor_east'] = "/{$patterns['lookbehind_not_letter']}([ns]?)e-resize/"; + $patterns['cursor_west'] = "/{$patterns['lookbehind_not_letter']}([ns]?)w-resize/"; + $patterns['four_notation_quantity'] = "/{$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}/i"; + $patterns['four_notation_color'] = "/(-color\s*:\s*){$patterns['color']}(\s+){$patterns['color']}(\s+){$patterns['color']}(\s+){$patterns['color']}/i"; + // The two regexes below are parenthesized differently then in the original implementation to make the + // callback's job more straightforward + $patterns['bg_horizontal_percentage'] = "/(background(?:-position)?\s*:\s*[^%]*?)({$patterns['num']})(%\s*(?:{$patterns['quantity']}|{$patterns['ident']}))/"; + $patterns['bg_horizontal_percentage_x'] = "/(background-position-x\s*:\s*)({$patterns['num']})(%)/"; + } + + /** + * Transform an LTR stylesheet to RTL + * @param $css String: stylesheet to transform + * @param $swapLtrRtlInURL Boolean: If true, swap 'ltr' and 'rtl' in URLs + * @param $swapLeftRightInURL Boolean: If true, swap 'left' and 'right' in URLs + * @return Transformed stylesheet + */ + public static function transform( $css, $swapLtrRtlInURL = false, $swapLeftRightInURL = false ) { + // We wrap tokens in ` , not ~ like the original implementation does. + // This was done because ` is not a legal character in CSS and can only + // occur in URLs, where we escape it to %60 before inserting our tokens. + $css = str_replace( '`', '%60', $css ); + + self::buildPatterns(); + + // Tokenize single line rules with /* @noflip */ + $noFlipSingle = new CSSJanus_Tokenizer( self::$patterns['noflip_single'], '`NOFLIP_SINGLE`' ); + $css = $noFlipSingle->tokenize( $css ); + + // Tokenize class rules with /* @noflip */ + $noFlipClass = new CSSJanus_Tokenizer( self::$patterns['noflip_class'], '`NOFLIP_CLASS`' ); + $css = $noFlipClass->tokenize( $css ); + + // Tokenize comments + $comments = new CSSJanus_Tokenizer( self::$patterns['comment'], '`C`' ); + $css = $comments->tokenize( $css ); + + // LTR->RTL fixes start here + $css = self::fixDirection( $css ); + if ( $swapLtrRtlInURL ) { + $css = self::fixLtrRtlInURL( $css ); + } + + if ( $swapLeftRightInURL ) { + $css = self::fixLeftRightInURL( $css ); + } + $css = self::fixLeftAndRight( $css ); + $css = self::fixCursorProperties( $css ); + $css = self::fixFourPartNotation( $css ); + $css = self::fixBackgroundPosition( $css ); + + // Detokenize stuff we tokenized before + $css = $comments->detokenize( $css ); + $css = $noFlipClass->detokenize( $css ); + $css = $noFlipSingle->detokenize( $css ); + + return $css; + } + + /** + * Replace direction: ltr; with direction: rtl; and vice versa. + * + * The original implementation only does this inside body selectors + * and misses "body\n{\ndirection:ltr;\n}". This function does not have + * these problems. + * + * See http://code.google.com/p/cssjanus/issues/detail?id=15 and + * TODO: URL + */ + private static function fixDirection( $css ) { + $css = preg_replace( self::$patterns['direction_ltr'], + '$1' . self::$patterns['tmpToken'], $css ); + $css = preg_replace( self::$patterns['direction_rtl'], '$1ltr', $css ); + $css = str_replace( self::$patterns['tmpToken'], 'rtl', $css ); + + return $css; + } + + /** + * Replace 'ltr' with 'rtl' and vice versa in background URLs + */ + private static function fixLtrRtlInURL( $css ) { + $css = preg_replace( self::$patterns['ltr_in_url'], self::$patterns['tmpToken'], $css ); + $css = preg_replace( self::$patterns['rtl_in_url'], 'ltr', $css ); + $css = str_replace( self::$patterns['tmpToken'], 'rtl', $css ); + + return $css; + } + + /** + * Replace 'left' with 'right' and vice versa in background URLs + */ + private static function fixLeftRightInURL( $css ) { + $css = preg_replace( self::$patterns['left_in_url'], self::$patterns['tmpToken'], $css ); + $css = preg_replace( self::$patterns['right_in_url'], 'left', $css ); + $css = str_replace( self::$patterns['tmpToken'], 'right', $css ); + + return $css; + } + + /** + * Flip rules like left: , padding-right: , etc. + */ + private static function fixLeftAndRight( $css ) { + $css = preg_replace( self::$patterns['left'], self::$patterns['tmpToken'], $css ); + $css = preg_replace( self::$patterns['right'], 'left', $css ); + $css = str_replace( self::$patterns['tmpToken'], 'right', $css ); + + return $css; + } + + /** + * Flip East and West in rules like cursor: nw-resize; + */ + private static function fixCursorProperties( $css ) { + $css = preg_replace( self::$patterns['cursor_east'], + '$1' . self::$patterns['tmpToken'], $css ); + $css = preg_replace( self::$patterns['cursor_west'], '$1e-resize', $css ); + $css = str_replace( self::$patterns['tmpToken'], 'w-resize', $css ); + + return $css; + } + + /** + * Swap the second and fourth parts in four-part notation rules like + * padding: 1px 2px 3px 4px; + * + * Unlike the original implementation, this function doesn't suffer from + * the bug where whitespace is not preserved when flipping four-part rules + * and four-part color rules with multiple whitespace characters between + * colors are not recognized. + * See http://code.google.com/p/cssjanus/issues/detail?id=16 + */ + private static function fixFourPartNotation( $css ) { + $css = preg_replace( self::$patterns['four_notation_quantity'], '$1$2$7$4$5$6$3', $css ); + $css = preg_replace( self::$patterns['four_notation_color'], '$1$2$3$8$5$6$7$4', $css ); + + return $css; + } + + /** + * Flip horizontal background percentages. + */ + private static function fixBackgroundPosition( $css ) { + $css = preg_replace_callback( self::$patterns['bg_horizontal_percentage'], + array( 'self', 'calculateNewBackgroundPosition' ), $css ); + $css = preg_replace_callback( self::$patterns['bg_horizontal_percentage_x'], + array( 'self', 'calculateNewBackgroundPosition' ), $css ); + + return $css; + } + + /** + * Callback for calculateNewBackgroundPosition() + */ + private static function calculateNewBackgroundPosition( $matches ) { + return $matches[1] . ( 100 - $matches[2] ) . $matches[3]; + } +} + +/** + * Utility class used by CSSJanus that tokenizes and untokenizes things we want + * to protect from being janused. + * @author Roan Kattouw + */ +class CSSJanus_Tokenizer { + private $regex, $token; + private $originals; + + /** + * Constructor + * @param $regex string Regular expression whose matches to replace by a token. + * @param $token string Token + */ + public function __construct( $regex, $token ) { + $this->regex = $regex; + $this->token = $token; + $this->originals = array(); + } + + /** + * Replace all occurrences of $regex in $str with a token and remember + * the original strings. + * @param $str String to tokenize + * @return string Tokenized string + */ + public function tokenize( $str ) { + return preg_replace_callback( $this->regex, array( $this, 'tokenizeCallback' ), $str ); + } + + private function tokenizeCallback( $matches ) { + $this->originals[] = $matches[0]; + return $this->token; + } + + /** + * Replace tokens with their originals. If multiple strings were tokenized, it's important they be + * detokenized in exactly the SAME ORDER. + * @param $str String: previously run through tokenize() + * @return string Original string + */ + public function detokenize( $str ) { + // PHP has no function to replace only the first occurrence or to + // replace occurrences of the same string with different values, + // so we use preg_replace_callback() even though we don't really need a regex + return preg_replace_callback( '/' . preg_quote( $this->token, '/' ) . '/', + array( $this, 'detokenizeCallback' ), $str ); + } + + private function detokenizeCallback( $matches ) { + $retval = current( $this->originals ); + next( $this->originals ); + + return $retval; + } +} diff --git a/includes/libs/CSSMin.php b/includes/libs/CSSMin.php new file mode 100644 index 00000000..c0e78112 --- /dev/null +++ b/includes/libs/CSSMin.php @@ -0,0 +1,214 @@ + + * @copyright Copyright 2010 Wikimedia Foundation + * @license http://www.apache.org/licenses/LICENSE-2.0 + */ +class CSSMin { + + /* Constants */ + + /** + * Maximum file size to still qualify for in-line embedding as a data-URI + * + * 24,576 is used because Internet Explorer has a 32,768 byte limit for data URIs, + * which when base64 encoded will result in a 1/3 increase in size. + */ + const EMBED_SIZE_LIMIT = 24576; + const URL_REGEX = 'url\(\s*[\'"]?(?P[^\?\)\'"]*)(?P\??[^\)\'"]*)[\'"]?\s*\)'; + + /* Protected Static Members */ + + /** @var array List of common image files extensions and mime-types */ + protected static $mimeTypes = array( + 'gif' => 'image/gif', + 'jpe' => 'image/jpeg', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'png' => 'image/png', + 'tif' => 'image/tiff', + 'tiff' => 'image/tiff', + 'xbm' => 'image/x-xbitmap', + ); + + /* Static Methods */ + + /** + * Gets a list of local file paths which are referenced in a CSS style sheet + * + * @param $source string CSS data to remap + * @param $path string File path where the source was read from (optional) + * @return array List of local file references + */ + public static function getLocalFileReferences( $source, $path = null ) { + $files = array(); + $rFlags = PREG_OFFSET_CAPTURE | PREG_SET_ORDER; + if ( preg_match_all( '/' . self::URL_REGEX . '/', $source, $matches, $rFlags ) ) { + foreach ( $matches as $match ) { + $file = ( isset( $path ) + ? rtrim( $path, '/' ) . '/' + : '' ) . "{$match['file'][0]}"; + + // Only proceed if we can access the file + if ( !is_null( $path ) && file_exists( $file ) ) { + $files[] = $file; + } + } + } + return $files; + } + + protected static function getMimeType( $file ) { + $realpath = realpath( $file ); + // Try a couple of different ways to get the mime-type of a file, in order of + // preference + if ( + $realpath + && function_exists( 'finfo_file' ) + && function_exists( 'finfo_open' ) + && defined( 'FILEINFO_MIME_TYPE' ) + ) { + // As of PHP 5.3, this is how you get the mime-type of a file; it uses the Fileinfo + // PECL extension + return finfo_file( finfo_open( FILEINFO_MIME_TYPE ), $realpath ); + } else if ( function_exists( 'mime_content_type' ) ) { + // Before this was deprecated in PHP 5.3, this was how you got the mime-type of a file + return mime_content_type( $file ); + } else { + // Worst-case scenario has happened, use the file extension to infer the mime-type + $ext = strtolower( pathinfo( $file, PATHINFO_EXTENSION ) ); + if ( isset( self::$mimeTypes[$ext] ) ) { + return self::$mimeTypes[$ext]; + } + } + return false; + } + + /** + * Remaps CSS URL paths and automatically embeds data URIs for URL rules + * preceded by an /* @embed * / comment + * + * @param $source string CSS data to remap + * @param $local string File path where the source was read from + * @param $remote string URL path to the file + * @param $embed ??? + * @return string Remapped CSS data + */ + public static function remap( $source, $local, $remote, $embed = true ) { + $pattern = '/((?P\s*\/\*\s*\@embed\s*\*\/)(?P
    [^\;\}]*))?' .
    +			self::URL_REGEX . '(?P[^;]*)[\;]?/';
    +		$offset = 0;
    +		while ( preg_match( $pattern, $source, $match, PREG_OFFSET_CAPTURE, $offset ) ) {
    +			// Skip fully-qualified URLs and data URIs
    +			$urlScheme = parse_url( $match['file'][0], PHP_URL_SCHEME );
    +			if ( $urlScheme ) {
    +				// Move the offset to the end of the match, leaving it alone
    +				$offset = $match[0][1] + strlen( $match[0][0] );
    +				continue;
    +			}
    +			// URLs with absolute paths like /w/index.php need to be expanded
    +			// to absolute URLs but otherwise left alone
    +			if ( $match['file'][0] !== '' && $match['file'][0][0] === '/' ) {
    +				// Replace the file path with an expanded URL
    +				$source = substr_replace( $source, wfExpandUrl( $match['file'][0] ),
    +					$match['file'][1], strlen( $match['file'][0] )
    +				);
    +				// Move the offset to the end of the match, leaving it alone
    +				$offset = $match[0][1] + strlen( $match[0][0] );
    +				continue;
    +			}
    +			// Shortcuts
    +			$embed = $match['embed'][0];
    +			$pre = $match['pre'][0];
    +			$post = $match['post'][0];
    +			$query = $match['query'][0];
    +			$url = "{$remote}/{$match['file'][0]}";
    +			$file = "{$local}/{$match['file'][0]}";
    +			// bug 27052 - Guard against double slashes, because foo//../bar
    +			// apparently resolves to foo/bar on (some?) clients
    +			$url = preg_replace( '#([^:])//+#', '\1/', $url );
    +			$replacement = false;
    +			if ( $local !== false && file_exists( $file ) ) {
    +				// Add version parameter as a time-stamp in ISO 8601 format,
    +				// using Z for the timezone, meaning GMT
    +				$url .= '?' . gmdate( 'Y-m-d\TH:i:s\Z', round( filemtime( $file ), -2 ) );
    +				// Embedding requires a bit of extra processing, so let's skip that if we can
    +				if ( $embed ) {
    +					$type = self::getMimeType( $file );
    +					// Detect when URLs were preceeded with embed tags, and also verify file size is
    +					// below the limit
    +					if (
    +						$type
    +						&& $match['embed'][1] > 0
    +						&& filesize( $file ) < self::EMBED_SIZE_LIMIT
    +					) {
    +						// Strip off any trailing = symbols (makes browsers freak out)
    +						$data = base64_encode( file_get_contents( $file ) );
    +						// Build 2 CSS properties; one which uses a base64 encoded data URI in place
    +						// of the @embed comment to try and retain line-number integrity, and the
    +						// other with a remapped an versioned URL and an Internet Explorer hack
    +						// making it ignored in all browsers that support data URIs
    +						$replacement = "{$pre}url(data:{$type};base64,{$data}){$post};";
    +						$replacement .= "{$pre}url({$url}){$post}!ie;";
    +					}
    +				}
    +				if ( $replacement === false ) {
    +					// Assume that all paths are relative to $remote, and make them absolute
    +					$replacement = "{$embed}{$pre}url({$url}){$post};";				
    +				}
    +			} else if ( $local === false ) {
    +				// Assume that all paths are relative to $remote, and make them absolute
    +				$replacement = "{$embed}{$pre}url({$url}{$query}){$post};";
    +			}
    +			if ( $replacement !== false ) {
    +				// Perform replacement on the source
    +				$source = substr_replace(
    +					$source, $replacement, $match[0][1], strlen( $match[0][0] )
    +				);
    +				// Move the offset to the end of the replacement in the source
    +				$offset = $match[0][1] + strlen( $replacement );
    +				continue;
    +			}
    +			// Move the offset to the end of the match, leaving it alone
    +			$offset = $match[0][1] + strlen( $match[0][0] );
    +		}
    +		return $source;
    +	}
    +
    +	/**
    +	 * Removes whitespace from CSS data
    +	 *
    +	 * @param $css string CSS data to minify
    +	 * @return string Minified CSS data
    +	 */
    +	public static function minify( $css ) {
    +		return trim(
    +			str_replace(
    +				array( '; ', ': ', ' {', '{ ', ', ', '} ', ';}' ),
    +				array( ';', ':', '{', '{', ',', '}', '}' ),
    +				preg_replace( array( '/\s+/', '/\/\*.*?\*\//s' ), array( ' ', '' ), $css )
    +			)
    +		);
    +	}
    +}
    diff --git a/includes/libs/IEContentAnalyzer.php b/includes/libs/IEContentAnalyzer.php
    new file mode 100644
    index 00000000..a2ef1a09
    --- /dev/null
    +++ b/includes/libs/IEContentAnalyzer.php
    @@ -0,0 +1,824 @@
    + array(
    +			'text/plain', 
    +			'application/octet-stream', 
    +			'application/x-netcdf', // [sic]
    +		),
    +		'text' /*3*/ => array(
    +			'text/richtext', 'image/x-bitmap', 'application/postscript', 'application/base64',
    +			'application/macbinhex40', 'application/x-cdf', 'text/scriptlet'
    +		),
    +		'binary' /*4*/ => array(
    +			'application/pdf', 'audio/x-aiff', 'audio/basic', 'audio/wav', 'image/gif',
    +			'image/pjpeg', 'image/jpeg', 'image/tiff', 'image/x-png', 'image/png', 'image/bmp', 
    +			'image/x-jg', 'image/x-art', 'image/x-emf', 'image/x-wmf', 'video/avi', 
    +			'video/x-msvideo', 'video/mpeg', 'application/x-compressed',
    +			'application/x-zip-compressed', 'application/x-gzip-compressed', 'application/java',
    +			'application/x-msdownload'
    +		),
    +		'html' /*5*/ => array( 'text/html' ),
    +	);
    +
    +	/**
    +	 * Changes to the type table in later versions of IE
    +	 */
    +	protected $addedTypes = array(
    +		'ie07' => array(
    +			'text' => array( 'text/xml', 'application/xml' )
    +		),
    +	);
    +
    +	/**
    +	 * An approximation of the "Content Type" values in HKEY_CLASSES_ROOT in a
    +	 * typical Windows installation.
    +	 *
    +	 * Used for extension to MIME type mapping if detection fails.
    +	 */
    +	protected $registry = array(
    +		'.323' => 'text/h323',
    +		'.3g2' => 'video/3gpp2',
    +		'.3gp' => 'video/3gpp',
    +		'.3gp2' => 'video/3gpp2',
    +		'.3gpp' => 'video/3gpp',
    +		'.aac' => 'audio/aac',
    +		'.ac3' => 'audio/ac3',
    +		'.accda' => 'application/msaccess',
    +		'.accdb' => 'application/msaccess',
    +		'.accdc' => 'application/msaccess',
    +		'.accde' => 'application/msaccess',
    +		'.accdr' => 'application/msaccess',
    +		'.accdt' => 'application/msaccess',
    +		'.ade' => 'application/msaccess',
    +		'.adp' => 'application/msaccess',
    +		'.adts' => 'audio/aac',
    +		'.ai' => 'application/postscript',
    +		'.aif' => 'audio/aiff',
    +		'.aifc' => 'audio/aiff',
    +		'.aiff' => 'audio/aiff',
    +		'.amc' => 'application/x-mpeg',
    +		'.application' => 'application/x-ms-application',
    +		'.asf' => 'video/x-ms-asf',
    +		'.asx' => 'video/x-ms-asf',
    +		'.au' => 'audio/basic',
    +		'.avi' => 'video/avi',
    +		'.bmp' => 'image/bmp',
    +		'.caf' => 'audio/x-caf',
    +		'.cat' => 'application/vnd.ms-pki.seccat',
    +		'.cbo' => 'application/sha',
    +		'.cdda' => 'audio/aiff',
    +		'.cer' => 'application/x-x509-ca-cert',
    +		'.conf' => 'text/plain',
    +		'.crl' => 'application/pkix-crl',
    +		'.crt' => 'application/x-x509-ca-cert',
    +		'.css' => 'text/css',
    +		'.csv' => 'application/vnd.ms-excel',
    +		'.der' => 'application/x-x509-ca-cert',
    +		'.dib' => 'image/bmp',
    +		'.dif' => 'video/x-dv',
    +		'.dll' => 'application/x-msdownload',
    +		'.doc' => 'application/msword',
    +		'.docm' => 'application/vnd.ms-word.document.macroEnabled.12',
    +		'.docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
    +		'.dot' => 'application/msword',
    +		'.dotm' => 'application/vnd.ms-word.template.macroEnabled.12',
    +		'.dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
    +		'.dv' => 'video/x-dv',
    +		'.dwfx' => 'model/vnd.dwfx+xps',
    +		'.edn' => 'application/vnd.adobe.edn',
    +		'.eml' => 'message/rfc822',
    +		'.eps' => 'application/postscript',
    +		'.etd' => 'application/x-ebx',
    +		'.exe' => 'application/x-msdownload',
    +		'.fdf' => 'application/vnd.fdf',
    +		'.fif' => 'application/fractals',
    +		'.gif' => 'image/gif',
    +		'.gsm' => 'audio/x-gsm',
    +		'.hqx' => 'application/mac-binhex40',
    +		'.hta' => 'application/hta',
    +		'.htc' => 'text/x-component',
    +		'.htm' => 'text/html',
    +		'.html' => 'text/html',
    +		'.htt' => 'text/webviewhtml',
    +		'.hxa' => 'application/xml',
    +		'.hxc' => 'application/xml',
    +		'.hxd' => 'application/octet-stream',
    +		'.hxe' => 'application/xml',
    +		'.hxf' => 'application/xml',
    +		'.hxh' => 'application/octet-stream',
    +		'.hxi' => 'application/octet-stream',
    +		'.hxk' => 'application/xml',
    +		'.hxq' => 'application/octet-stream',
    +		'.hxr' => 'application/octet-stream',
    +		'.hxs' => 'application/octet-stream',
    +		'.hxt' => 'application/xml',
    +		'.hxv' => 'application/xml',
    +		'.hxw' => 'application/octet-stream',
    +		'.ico' => 'image/x-icon',
    +		'.iii' => 'application/x-iphone',
    +		'.ins' => 'application/x-internet-signup',
    +		'.iqy' => 'text/x-ms-iqy',
    +		'.isp' => 'application/x-internet-signup',
    +		'.jfif' => 'image/jpeg',
    +		'.jnlp' => 'application/x-java-jnlp-file',
    +		'.jpe' => 'image/jpeg',
    +		'.jpeg' => 'image/jpeg',
    +		'.jpg' => 'image/jpeg',
    +		'.jtx' => 'application/x-jtx+xps',
    +		'.latex' => 'application/x-latex',
    +		'.log' => 'text/plain',
    +		'.m1v' => 'video/mpeg',
    +		'.m2v' => 'video/mpeg',
    +		'.m3u' => 'audio/x-mpegurl',
    +		'.mac' => 'image/x-macpaint',
    +		'.man' => 'application/x-troff-man',
    +		'.mda' => 'application/msaccess',
    +		'.mdb' => 'application/msaccess',
    +		'.mde' => 'application/msaccess',
    +		'.mfp' => 'application/x-shockwave-flash',
    +		'.mht' => 'message/rfc822',
    +		'.mhtml' => 'message/rfc822',
    +		'.mid' => 'audio/mid',
    +		'.midi' => 'audio/mid',
    +		'.mod' => 'video/mpeg',
    +		'.mov' => 'video/quicktime',
    +		'.mp2' => 'video/mpeg',
    +		'.mp2v' => 'video/mpeg',
    +		'.mp3' => 'audio/mpeg',
    +		'.mp4' => 'video/mp4',
    +		'.mpa' => 'video/mpeg',
    +		'.mpe' => 'video/mpeg',
    +		'.mpeg' => 'video/mpeg',
    +		'.mpf' => 'application/vnd.ms-mediapackage',
    +		'.mpg' => 'video/mpeg',
    +		'.mpv2' => 'video/mpeg',
    +		'.mqv' => 'video/quicktime',
    +		'.NMW' => 'application/nmwb',
    +		'.nws' => 'message/rfc822',
    +		'.odc' => 'text/x-ms-odc',
    +		'.ols' => 'application/vnd.ms-publisher',
    +		'.p10' => 'application/pkcs10',
    +		'.p12' => 'application/x-pkcs12',
    +		'.p7b' => 'application/x-pkcs7-certificates',
    +		'.p7c' => 'application/pkcs7-mime',
    +		'.p7m' => 'application/pkcs7-mime',
    +		'.p7r' => 'application/x-pkcs7-certreqresp',
    +		'.p7s' => 'application/pkcs7-signature',
    +		'.pct' => 'image/pict',
    +		'.pdf' => 'application/pdf',
    +		'.pdx' => 'application/vnd.adobe.pdx',
    +		'.pfx' => 'application/x-pkcs12',
    +		'.pic' => 'image/pict',
    +		'.pict' => 'image/pict',
    +		'.pinstall' => 'application/x-picasa-detect',
    +		'.pko' => 'application/vnd.ms-pki.pko',
    +		'.png' => 'image/png',
    +		'.pnt' => 'image/x-macpaint',
    +		'.pntg' => 'image/x-macpaint',
    +		'.pot' => 'application/vnd.ms-powerpoint',
    +		'.potm' => 'application/vnd.ms-powerpoint.template.macroEnabled.12',
    +		'.potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
    +		'.ppa' => 'application/vnd.ms-powerpoint',
    +		'.ppam' => 'application/vnd.ms-powerpoint.addin.macroEnabled.12',
    +		'.pps' => 'application/vnd.ms-powerpoint',
    +		'.ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',
    +		'.ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
    +		'.ppt' => 'application/vnd.ms-powerpoint',
    +		'.pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',
    +		'.pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
    +		'.prf' => 'application/pics-rules',
    +		'.ps' => 'application/postscript',
    +		'.pub' => 'application/vnd.ms-publisher',
    +		'.pwz' => 'application/vnd.ms-powerpoint',
    +		'.py' => 'text/plain',
    +		'.pyw' => 'text/plain',
    +		'.qht' => 'text/x-html-insertion',
    +		'.qhtm' => 'text/x-html-insertion',
    +		'.qt' => 'video/quicktime',
    +		'.qti' => 'image/x-quicktime',
    +		'.qtif' => 'image/x-quicktime',
    +		'.qtl' => 'application/x-quicktimeplayer',
    +		'.rat' => 'application/rat-file',
    +		'.rmf' => 'application/vnd.adobe.rmf',
    +		'.rmi' => 'audio/mid',
    +		'.rqy' => 'text/x-ms-rqy',
    +		'.rtf' => 'application/msword',
    +		'.sct' => 'text/scriptlet',
    +		'.sd2' => 'audio/x-sd2',
    +		'.sdp' => 'application/sdp',
    +		'.shtml' => 'text/html',
    +		'.sit' => 'application/x-stuffit',
    +		'.sldm' => 'application/vnd.ms-powerpoint.slide.macroEnabled.12',
    +		'.sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
    +		'.slk' => 'application/vnd.ms-excel',
    +		'.snd' => 'audio/basic',
    +		'.so' => 'application/x-apachemodule',
    +		'.sol' => 'text/plain',
    +		'.sor' => 'text/plain',
    +		'.spc' => 'application/x-pkcs7-certificates',
    +		'.spl' => 'application/futuresplash',
    +		'.sst' => 'application/vnd.ms-pki.certstore',
    +		'.stl' => 'application/vnd.ms-pki.stl',
    +		'.swf' => 'application/x-shockwave-flash',
    +		'.thmx' => 'application/vnd.ms-officetheme',
    +		'.tif' => 'image/tiff',
    +		'.tiff' => 'image/tiff',
    +		'.txt' => 'text/plain',
    +		'.uls' => 'text/iuls',
    +		'.vcf' => 'text/x-vcard',
    +		'.vdx' => 'application/vnd.ms-visio.viewer',
    +		'.vsd' => 'application/vnd.ms-visio.viewer',
    +		'.vss' => 'application/vnd.ms-visio.viewer',
    +		'.vst' => 'application/vnd.ms-visio.viewer',
    +		'.vsx' => 'application/vnd.ms-visio.viewer',
    +		'.vtx' => 'application/vnd.ms-visio.viewer',
    +		'.wav' => 'audio/wav',
    +		'.wax' => 'audio/x-ms-wax',
    +		'.wbk' => 'application/msword',
    +		'.wdp' => 'image/vnd.ms-photo',
    +		'.wiz' => 'application/msword',
    +		'.wm' => 'video/x-ms-wm',
    +		'.wma' => 'audio/x-ms-wma',
    +		'.wmd' => 'application/x-ms-wmd',
    +		'.wmv' => 'video/x-ms-wmv',
    +		'.wmx' => 'video/x-ms-wmx',
    +		'.wmz' => 'application/x-ms-wmz',
    +		'.wpl' => 'application/vnd.ms-wpl',
    +		'.wsc' => 'text/scriptlet',
    +		'.wvx' => 'video/x-ms-wvx',
    +		'.xaml' => 'application/xaml+xml',
    +		'.xbap' => 'application/x-ms-xbap',
    +		'.xdp' => 'application/vnd.adobe.xdp+xml',
    +		'.xfdf' => 'application/vnd.adobe.xfdf',
    +		'.xht' => 'application/xhtml+xml',
    +		'.xhtml' => 'application/xhtml+xml',
    +		'.xla' => 'application/vnd.ms-excel',
    +		'.xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12',
    +		'.xlk' => 'application/vnd.ms-excel',
    +		'.xll' => 'application/vnd.ms-excel',
    +		'.xlm' => 'application/vnd.ms-excel',
    +		'.xls' => 'application/vnd.ms-excel',
    +		'.xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
    +		'.xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12',
    +		'.xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    +		'.xlt' => 'application/vnd.ms-excel',
    +		'.xltm' => 'application/vnd.ms-excel.template.macroEnabled.12',
    +		'.xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
    +		'.xlw' => 'application/vnd.ms-excel',
    +		'.xml' => 'text/xml',
    +		'.xps' => 'application/vnd.ms-xpsdocument',
    +		'.xsl' => 'text/xml',
    +	);
    +
    +	/** 
    +	 * IE versions which have been analysed to bring you this class, and for 
    +	 * which some substantive difference exists. These will appear as keys 
    +	 * in the return value of getRealMimesFromData(). The names are chosen to sort correctly.
    +	 */
    +	protected $versions = array( 'ie05', 'ie06', 'ie07', 'ie07.strict', 'ie07.nohtml' );
    +
    +	/**
    +	 * Type table with versions expanded 
    +	 */
    +	protected $typeTable = array();
    +
    +	/** constructor */
    +	function __construct() {
    +		// Construct versioned type arrays from the base type array plus additions 
    +		$types = $this->baseTypeTable;
    +		foreach ( $this->versions as $version ) {
    +			if ( isset( $this->addedTypes[$version] ) ) {
    +				foreach ( $this->addedTypes[$version] as $format => $addedTypes ) {
    +					$types[$format] = array_merge( $types[$format], $addedTypes );
    +				}
    +			}
    +			$this->typeTable[$version] = $types;
    +		}
    +	}
    +
    +	/**
    +	 * Get the MIME types from getMimesFromData(), but convert the result from IE's 
    +	 * idiosyncratic private types into something other apps will understand.
    +	 *
    +	 * @param $fileName String: the file name (unused at present)
    +	 * @param $chunk String: the first 256 bytes of the file
    +	 * @param $proposed String: the MIME type proposed by the server
    +	 *
    +	 * @return Array: map of IE version to detected mime type
    +	 */
    +	public function getRealMimesFromData( $fileName, $chunk, $proposed ) {
    +		$types = $this->getMimesFromData( $fileName, $chunk, $proposed );
    +		$types = array_map( array( $this, 'translateMimeType' ), $types );
    +		return $types;
    +	}
    +
    +	/**
    +	 * Translate a MIME type from IE's idiosyncratic private types into
    +	 * more commonly understood type strings
    +	 */
    +	public function translateMimeType( $type ) {
    +		static $table = array(
    +			'image/pjpeg' => 'image/jpeg',
    +			'image/x-png' => 'image/png',
    +			'image/x-wmf' => 'application/x-msmetafile',
    +			'image/bmp' => 'image/x-bmp',
    +			'application/x-zip-compressed' => 'application/zip',
    +			'application/x-compressed' => 'application/x-compress',
    +			'application/x-gzip-compressed' => 'application/x-gzip',
    +			'audio/mid' => 'audio/midi',
    +		);
    +		if ( isset( $table[$type] ) ) {
    +			$type = $table[$type];
    +		}
    +		return $type;
    +	}
    +
    +	/**
    +	 * Get the untranslated MIME types for all known versions
    +	 *
    +	 * @param $fileName String: the file name (unused at present)
    +	 * @param $chunk String: the first 256 bytes of the file
    +	 * @param $proposed String: the MIME type proposed by the server
    +	 *
    +	 * @return Array: map of IE version to detected mime type
    +	 */
    +	public function getMimesFromData( $fileName, $chunk, $proposed ) {
    +		$types = array();
    +		foreach ( $this->versions as $version ) {
    +			$types[$version] = $this->getMimeTypeForVersion( $version, $fileName, $chunk, $proposed );
    +		}
    +		return $types;
    +	}
    +
    +	/**
    +	 * Get the MIME type for a given named version
    +	 */
    +	protected function getMimeTypeForVersion( $version, $fileName, $chunk, $proposed ) {
    +		// Strip text after a semicolon
    +		$semiPos = strpos( $proposed, ';' );
    +		if ( $semiPos !== false ) {
    +			$proposed = substr( $proposed, 0, $semiPos );
    +		}
    +
    +		$proposedFormat = $this->getDataFormat( $version, $proposed );
    +		if ( $proposedFormat == 'unknown'
    +			&& $proposed != 'multipart/mixed'
    +			&& $proposed != 'multipart/x-mixed-replace' )
    +		{
    +			return $proposed;
    +		}
    +		if ( strval( $chunk ) === '' ) {
    +			return $proposed;
    +		}
    +
    +		// Truncate chunk at 255 bytes
    +		$chunk = substr( $chunk, 0, 255 );
    +
    +		// IE does the Check*Headers() calls last, and instead does the following image 
    +		// type checks by directly looking for the magic numbers. What I do here should 
    +		// have the same effect since the magic number checks are identical in both cases.
    +		$result = $this->sampleData( $version, $chunk );
    +		$sampleFound = $result['found'];
    +		$counters = $result['counters'];
    +		$binaryType = $this->checkBinaryHeaders( $version, $chunk );
    +		$textType = $this->checkTextHeaders( $version, $chunk );
    +
    +		if ( $proposed == 'text/html' && isset( $sampleFound['html'] ) ) {
    +			return 'text/html';
    +		}
    +		if ( $proposed == 'image/gif' && $binaryType == 'image/gif' ) {
    +			return 'image/gif';
    +		}
    +		if ( ( $proposed == 'image/pjpeg' || $proposed == 'image/jpeg' )
    +			&& $binaryType == 'image/pjpeg' ) 
    +		{
    +			return $proposed;
    +		}
    +		// PNG check added in IE 7
    +		if ( $version >= 'ie07'
    +			&& ( $proposed == 'image/x-png' || $proposed == 'image/png' )
    +			&& $binaryType == 'image/x-png' )
    +		{
    +			return $proposed;
    +		}
    +
    +		// CDF was removed in IE 7 so it won't be in $sampleFound for later versions
    +		if ( isset( $sampleFound['cdf'] ) ) {
    +			return 'application/x-cdf';
    +		}
    +
    +		// RSS and Atom were added in IE 7 so they won't be in $sampleFound for 
    +		// previous versions
    +		if ( isset( $sampleFound['rss'] ) ) {
    +			return 'application/rss+xml';
    +		}
    +		if ( isset( $sampleFound['rdf-tag'] )
    +			&& isset( $sampleFound['rdf-url'] )
    +			&& isset( $sampleFound['rdf-purl'] ) )
    +		{
    +			return 'application/rss+xml';
    +		}
    +		if ( isset( $sampleFound['atom'] ) ) {
    +			return 'application/atom+xml';
    +		}
    +
    +		if ( isset( $sampleFound['xml'] ) ) {
    +			// TODO: I'm not sure under what circumstances this flag is enabled
    +			if ( strpos( $version, 'strict' ) !== false ) {
    +				if ( $proposed == 'text/html' || $proposed == 'text/xml' ) {
    +					return 'text/xml';
    +				}
    +			} else {
    +				return 'text/xml';
    +			}
    +		}
    +		if ( isset( $sampleFound['html'] ) ) {
    +			// TODO: I'm not sure under what circumstances this flag is enabled
    +			if ( strpos( $version, 'nohtml' ) !== false ) {
    +				if ( $proposed == 'text/plain' ) {
    +					return 'text/html';
    +				}
    +			} else {
    +				return 'text/html';
    +			}
    +		}
    +		if ( isset( $sampleFound['xbm'] ) ) {
    +			return 'image/x-bitmap';
    +		}
    +		if ( isset( $sampleFound['binhex'] ) ) {
    +			return 'application/macbinhex40';
    +		}
    +		if ( isset( $sampleFound['scriptlet'] ) ) {
    +			if ( strpos( $version, 'strict' ) !== false ) {
    +				if ( $proposed == 'text/plain' || $proposed == 'text/scriptlet' ) {
    +					return 'text/scriptlet';
    +				}
    +			} else {
    +				return 'text/scriptlet';
    +			}
    +		}
    +
    +		// Freaky heuristics to determine if the data is text or binary
    +		// The heuristic is of course broken for non-ASCII text
    +		if ( $counters['ctrl'] != 0 && ( $counters['ff'] + $counters['low'] ) 
    +			< ( $counters['ctrl'] + $counters['high'] ) * 16 ) 
    +		{
    +			$kindOfBinary = true;
    +			$type = $binaryType ? $binaryType : $textType;
    +			if ( $type === false ) {
    +				$type = 'application/octet-stream';
    +			}
    +		} else {
    +			$kindOfBinary = false;
    +			$type = $textType ? $textType : $binaryType;
    +			if ( $type === false ) {
    +				$type = 'text/plain';
    +			}
    +		}
    +
    +		// Check if the output format is ambiguous
    +		// This generally means that detection failed, real types aren't ambiguous
    +		$detectedFormat = $this->getDataFormat( $version, $type );
    +		if ( $detectedFormat != 'ambiguous' ) {
    +			return $type;
    +		}
    +
    +		if ( $proposedFormat != 'ambiguous' ) {
    +			// FormatAgreesWithData()
    +			if ( $proposedFormat == 'text' && !$kindOfBinary ) {
    +				return $proposed;
    +			}
    +			if ( $proposedFormat == 'binary' && $kindOfBinary ) {
    +				return $proposed;
    +			}
    +			if ( $proposedFormat == 'html' ) {
    +				return $proposed;
    +			}
    +		}
    +
    +		// Find a MIME type by searching the registry for the file extension.
    +		$dotPos = strrpos( $fileName, '.' );
    +		if ( $dotPos === false ) {
    +			return $type;
    +		}
    +		$ext = substr( $fileName, $dotPos );
    +		if ( isset( $this->registry[$ext] ) ) {
    +			return $this->registry[$ext];
    +		}
    +
    +		// TODO: If the extension has an application registered to it, IE will return 
    +		// application/octet-stream. We'll skip that, so we could erroneously 
    +		// return text/plain or application/x-netcdf where application/octet-stream
    +		// would be correct.
    +
    +		return $type;
    +	}
    +
    +	/**
    +	 * Check for text headers at the start of the chunk
    +	 * Confirmed same in 5 and 7.
    +	 */
    +	private function checkTextHeaders( $version, $chunk ) {
    +		$chunk2 = substr( $chunk, 0, 2 );
    +		$chunk4 = substr( $chunk, 0, 4 );
    +		$chunk5 = substr( $chunk, 0, 5 );
    +		if ( $chunk4 == '%PDF' ) {
    +			return 'application/pdf';
    +		}
    +		if ( $chunk2 == '%!' ) {
    +			return 'application/postscript';
    +		}
    +		if ( $chunk5 == '{\\rtf' ) {
    +			return 'text/richtext';
    +		}
    +		if ( $chunk5 == 'begin' ) {
    +			return 'application/base64';
    +		}
    +		return false;
    +	}
    +
    +	/**
    +	 * Check for binary headers at the start of the chunk
    +	 * Confirmed same in 5 and 7.
    +	 */
    +	private function checkBinaryHeaders( $version, $chunk ) {
    +		$chunk2 = substr( $chunk, 0, 2 );
    +		$chunk3 = substr( $chunk, 0, 3 );
    +		$chunk4 = substr( $chunk, 0, 4 );
    +		$chunk5 = substr( $chunk, 0, 5 );
    +		$chunk5uc = strtoupper( $chunk5 );
    +		$chunk8 = substr( $chunk, 0, 8 );
    +		if ( $chunk5uc == 'GIF87' || $chunk5uc == 'GIF89' ) {
    +			return 'image/gif';
    +		}
    +		if ( $chunk2 == "\xff\xd8" ) {
    +			return 'image/pjpeg'; // actually plain JPEG but this is what IE returns
    +		}
    +
    +		if ( $chunk2 == 'BM' 
    +			&& substr( $chunk, 6, 2 ) == "\000\000"
    +			&& substr( $chunk, 8, 2 ) == "\000\000" )
    +		{
    +			return 'image/bmp'; // another non-standard MIME
    +		}
    +		if ( $chunk4 == 'RIFF' 
    +			&& substr( $chunk, 8, 4 ) == 'WAVE' )
    +		{
    +			return 'audio/wav';
    +		}
    +		// These were integer literals in IE
    +		// Perhaps the author was not sure what the target endianness was
    +		if ( $chunk4 == ".sd\000"
    +			|| $chunk4 == ".snd"
    +			|| $chunk4 == "\000ds."
    +			|| $chunk4 == "dns." )
    +		{
    +			return 'audio/basic';
    +		}
    +		if ( $chunk3 == "MM\000" ) {
    +			return 'image/tiff';
    +		}
    +		if ( $chunk2 == 'MZ' ) {
    +			return 'application/x-msdownload';
    +		}
    +		if ( $chunk8 == "\x89PNG\x0d\x0a\x1a\x0a" ) {
    +			return 'image/x-png'; // [sic]
    +		}
    +		if ( strlen( $chunk ) >= 5 ) {
    +			$byte2 = ord( $chunk[2] );
    +			$byte4 = ord( $chunk[4] );
    +			if ( $byte2 >= 3 && $byte2 <= 31 && $byte4 == 0 && $chunk2 == 'JG' ) {
    +				return 'image/x-jg';
    +			}
    +		}
    +		// More endian confusion?
    +		if ( $chunk4 == 'MROF' ) {
    +			return 'audio/x-aiff';
    +		}
    +		$chunk4_8 = substr( $chunk, 8, 4 );
    +		if ( $chunk4 == 'FORM' && ( $chunk4_8 == 'AIFF' || $chunk4_8 == 'AIFC' ) ) {
    +			return 'audio/x-aiff';
    +		}
    +		if ( $chunk4 == 'RIFF' && $chunk4_8 == 'AVI ' ) {
    +			return 'video/avi';
    +		}
    +		if ( $chunk4 == "\x00\x00\x01\xb3" || $chunk4 == "\x00\x00\x01\xba" ) {
    +			return 'video/mpeg';
    +		}
    +		if ( $chunk4 == "\001\000\000\000"
    +			&& substr( $chunk, 40, 4 ) == ' EMF' )
    +		{
    +			return 'image/x-emf';
    +		}
    +		if ( $chunk4 == "\xd7\xcd\xc6\x9a" ) {
    +			return 'image/x-wmf';
    +		}
    +		if ( $chunk4 == "\xca\xfe\xba\xbe" ) {
    +			return 'application/java';
    +		}
    +		if ( $chunk2 == 'PK' ) {
    +			return 'application/x-zip-compressed';
    +		}
    +		if ( $chunk2 == "\x1f\x9d" ) {
    +			return 'application/x-compressed';
    +		}
    +		if ( $chunk2 == "\x1f\x8b" ) {
    +			return 'application/x-gzip-compressed';
    +		}
    +		// Skip redundant check for ZIP
    +		if ( $chunk5 == "MThd\000" ) {
    +			return 'audio/mid';
    +		}
    +		if ( $chunk4 == '%PDF' ) {
    +			return 'application/pdf';
    +		}
    +		return false;
    +	}
    +
    +	/**
    +	 * Do heuristic checks on the bulk of the data sample.
    +	 * Search for HTML tags.
    +	 */
    +	protected function sampleData( $version, $chunk ) {
    +		$found = array();
    +		$counters = array(
    +			'ctrl' => 0,
    +			'high' => 0,
    +			'low' => 0,
    +			'lf' => 0,
    +			'cr' => 0,
    +			'ff' => 0
    +		);
    +		$htmlTags = array(
    +			'html',
    +			'head',
    +			'title',
    +			'body',
    +			'script',
    +			'a href',
    +			'pre',
    +			'img',
    +			'plaintext',
    +			'table'
    +		);
    +		$rdfUrl = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
    +		$rdfPurl = 'http://purl.org/rss/1.0/';
    +		$xbmMagic1 = '#define';
    +		$xbmMagic2 = '_width';
    +		$xbmMagic3 = '_bits';
    +		$binhexMagic = 'converted with BinHex';
    +
    +		for ( $offset = 0; $offset < strlen( $chunk ); $offset++ ) {
    +			$curChar = $chunk[$offset];
    +			if ( $curChar == "\x0a" ) {
    +				$counters['lf']++;
    +				continue;
    +			} elseif ( $curChar == "\x0d" ) {
    +				$counters['cr']++;
    +				continue;
    +			} elseif ( $curChar == "\x0c" ) {
    +				$counters['ff']++;
    +				continue;
    +			} elseif ( $curChar == "\t" ) {
    +				$counters['low']++;
    +				continue;
    +			} elseif ( ord( $curChar ) < 32 ) {
    +				$counters['ctrl']++;
    +				continue;
    +			} elseif ( ord( $curChar ) >= 128 ) {
    +				$counters['high']++;
    +				continue;
    +			}
    +
    +			$counters['low']++;
    +			if ( $curChar == '<' ) {
    +				// XML
    +				$remainder = substr( $chunk, $offset + 1 );
    +				if ( !strncasecmp( $remainder, '?XML', 4 ) ) {
    +					$nextChar = substr( $chunk, $offset + 5, 1 );
    +					if ( $nextChar == ':' || $nextChar == ' ' || $nextChar == "\t" ) {
    +						$found['xml'] = true;
    +					}
    +				}
    +				// Scriptlet (JSP)
    +				if ( !strncasecmp( $remainder, 'SCRIPTLET', 9 ) ) {
    +					$found['scriptlet'] = true;
    +					break;
    +				}
    +				// HTML
    +				foreach ( $htmlTags as $tag ) {
    +					if ( !strncasecmp( $remainder, $tag, strlen( $tag ) ) ) {
    +						$found['html'] = true;
    +					}
    +				}
    +				// Skip broken check for additional tags (HR etc.)
    +
    +				// CHANNEL replaced by RSS, RDF and FEED in IE 7
    +				if ( $version < 'ie07' ) {
    +					if ( !strncasecmp( $remainder, 'CHANNEL', 7 ) ) {
    +						$found['cdf'] = true;
    +					}
    +				} else {
    +					// RSS
    +					if ( !strncasecmp( $remainder, 'RSS', 3 ) ) {
    +						$found['rss'] = true;
    +						break; // return from SampleData
    +					}
    +					if ( !strncasecmp( $remainder, 'rdf:RDF', 7 ) ) {
    +						$found['rdf-tag'] = true;
    +						// no break
    +					}
    +					if ( !strncasecmp( $remainder, 'FEED', 4 ) ) {
    +						$found['atom'] = true;
    +						break;
    +					}
    +				}
    +				continue;
    +			}
    +			// Skip broken check for -->
    +
    +			// RSS URL checks
    +			// For some reason both URLs must appear before it is recognised
    +			$remainder = substr( $chunk, $offset );
    +			if ( !strncasecmp( $remainder, $rdfUrl, strlen( $rdfUrl ) ) ) {
    +				$found['rdf-url'] = true;
    +				if ( isset( $found['rdf-tag'] )
    +					&& isset( $found['rdf-purl'] ) ) // [sic]
    +				{
    +					break;
    +				}
    +				continue;
    +			}
    +
    +			if ( !strncasecmp( $remainder, $rdfPurl, strlen( $rdfPurl ) ) ) {
    +				if ( isset( $found['rdf-tag'] ) 
    +					&& isset( $found['rdf-url'] ) ) // [sic]
    +				{
    +					break;
    +				}
    +				continue;
    +			}
    +
    +			// XBM checks
    +			if ( !strncasecmp( $remainder, $xbmMagic1, strlen( $xbmMagic1 ) ) ) {
    +				$found['xbm1'] = true;
    +				continue;
    +			}
    +			if ( $curChar == '_' ) {
    +				if ( isset( $found['xbm2'] ) ) {
    +					if ( !strncasecmp( $remainder, $xbmMagic3, strlen( $xbmMagic3 ) ) ) {
    +						$found['xbm'] = true;
    +						break;
    +					}
    +				} elseif ( isset( $found['xbm1'] ) ) {
    +					if ( !strncasecmp( $remainder, $xbmMagic2, strlen( $xbmMagic2 ) ) ) {
    +						$found['xbm2'] = true;
    +					}
    +				}
    +			}
    +
    +			// BinHex
    +			if ( !strncmp( $remainder, $binhexMagic, strlen( $binhexMagic ) ) ) {
    +				$found['binhex'] = true;
    +			}
    +		}
    +		return array( 'found' => $found, 'counters' => $counters );
    +	}
    +
    +	protected function getDataFormat( $version, $type ) {
    +		$types = $this->typeTable[$version];
    +		if ( $type == '(null)' || strval( $type ) === '' ) {
    +			return 'ambiguous';
    +		}
    +		foreach ( $types as $format => $list ) {
    +			if ( in_array( $type, $list ) ) {
    +				return $format;
    +			}
    +		}
    +		return 'unknown';
    +	}
    +}
    +
    diff --git a/includes/libs/IEUrlExtension.php b/includes/libs/IEUrlExtension.php
    new file mode 100644
    index 00000000..100454d4
    --- /dev/null
    +++ b/includes/libs/IEUrlExtension.php
    @@ -0,0 +1,247 @@
    +\"/:|?.#
    +	 * - if we find a possible extension followed by the end of the string or 
    +	 *   a #, that's our extension
    +	 * - if we find a possible extension followed by a ?, that's our extension
    +	 *    - UNLESS it's exe, dll or cgi, in which case we ignore it and continue 
    +	 *      searching for another possible extension
    +	 * - if we find a possible extension followed by a dot or another illegal 
    +	 *   character, we ignore it and continue searching
    +	 * 
    +	 * @param $url string URL
    +	 * @return mixed Detected extension (string), or false if none found
    +	 */
    +	public static function findIE6Extension( $url ) {
    +		$pos = 0;
    +		$hashPos = strpos( $url, '#' );
    +		if ( $hashPos !== false ) {
    +			$urlLength = $hashPos;
    +		} else {
    +			$urlLength = strlen( $url );
    +		}
    +		$remainingLength = $urlLength;
    +		while ( $remainingLength > 0 ) {
    +			// Skip ahead to the next dot
    +			$pos += strcspn( $url, '.', $pos, $remainingLength );
    +			if ( $pos >= $urlLength ) {
    +				// End of string, we're done
    +				return false;
    +			}
    +			
    +			// We found a dot. Skip past it
    +			$pos++;
    +			$remainingLength = $urlLength - $pos;
    +
    +			// Check for illegal characters in our prospective extension,
    +			// or for another dot
    +			$nextPos = $pos + strcspn( $url, "<>\\\"/:|?*.", $pos, $remainingLength );
    +			if ( $nextPos >= $urlLength ) {
    +				// No illegal character or next dot
    +				// We have our extension
    +				return substr( $url, $pos, $urlLength - $pos );
    +			}
    +			if ( $url[$nextPos] === '?' ) {
    +				// We've found a legal extension followed by a question mark
    +				// If the extension is NOT exe, dll or cgi, return it
    +				$extension = substr( $url, $pos, $nextPos - $pos );
    +				if ( strcasecmp( $extension, 'exe' ) && strcasecmp( $extension, 'dll' ) &&
    +					strcasecmp( $extension, 'cgi' ) )
    +				{
    +					return $extension;
    +				}
    +				// Else continue looking
    +			}
    +			// We found an illegal character or another dot
    +			// Skip to that character and continue the loop
    +			$pos = $nextPos + 1;
    +			$remainingLength = $urlLength - $pos;
    +		}
    +		return false;
    +	}
    +
    +	/**
    +	 * When passed the value of $_SERVER['SERVER_SOFTWARE'], this function
    +	 * returns true if that server is known to have a REQUEST_URI variable
    +	 * with %2E not decoded to ".". On such a server, it is possible to detect
    +	 * whether the script filename has been obscured.
    +	 *
    +	 * The function returns false if the server is not known to have this 
    +	 * behaviour. Microsoft IIS in particular is known to decode escaped script
    +	 * filenames.
    +	 *
    +	 * SERVER_SOFTWARE typically contains either a plain string such as "Zeus",
    +	 * or a specification in the style of a User-Agent header, such as 
    +	 * "Apache/1.3.34 (Unix) mod_ssl/2.8.25 OpenSSL/0.9.8a PHP/4.4.2"
    +	 *
    +	 * @param $serverSoftware
    +	 * @return bool
    +	 *
    +	 */
    +	public static function haveUndecodedRequestUri( $serverSoftware ) {
    +		static $whitelist = array(
    +			'Apache', 
    +			'Zeus', 
    +			'LiteSpeed' );
    +		if ( preg_match( '/^(.*?)($|\/| )/', $serverSoftware, $m ) ) {
    +			return in_array( $m[1], $whitelist );
    +		} else {
    +			return false;
    +		}
    +	}
    +
    +}
    diff --git a/includes/libs/JavaScriptMinifier.php b/includes/libs/JavaScriptMinifier.php
    new file mode 100644
    index 00000000..a991d915
    --- /dev/null
    +++ b/includes/libs/JavaScriptMinifier.php
    @@ -0,0 +1,579 @@
    +
    + * License: choose any of Apache, MIT, GPL, LGPL
    + */
    +
    +class JavaScriptMinifier {
    +
    +	/* Class constants */
    +	/* Parsing states.
    +	 * The state machine is only necessary to decide whether to parse a slash as division
    +	 * operator or as regexp literal.
    +	 * States are named after the next expected item. We only distinguish states when the
    +	 * distinction is relevant for our purpose.
    +	 */
    +	const STATEMENT                = 0;
    +	const CONDITION                = 1;
    +	const PROPERTY_ASSIGNMENT      = 2;
    +	const EXPRESSION               = 3;
    +	const EXPRESSION_NO_NL         = 4; // only relevant for semicolon insertion
    +	const EXPRESSION_OP            = 5;
    +	const EXPRESSION_FUNC          = 6;
    +	const EXPRESSION_TERNARY       = 7; // used to determine the role of a colon
    +	const EXPRESSION_TERNARY_OP    = 8;
    +	const EXPRESSION_TERNARY_FUNC  = 9;
    +	const PAREN_EXPRESSION         = 10; // expression which is not on the top level
    +	const PAREN_EXPRESSION_OP      = 11;
    +	const PAREN_EXPRESSION_FUNC    = 12;
    +	const PROPERTY_EXPRESSION      = 13; // expression which is within an object literal
    +	const PROPERTY_EXPRESSION_OP   = 14;
    +	const PROPERTY_EXPRESSION_FUNC = 15;
    +
    +	/* Token types */
    +	const TYPE_UN_OP       = 1; // unary operators
    +	const TYPE_INCR_OP     = 2; // ++ and --
    +	const TYPE_BIN_OP      = 3; // binary operators
    +	const TYPE_ADD_OP      = 4; // + and - which can be either unary or binary ops
    +	const TYPE_HOOK        = 5; // ?
    +	const TYPE_COLON       = 6; // :
    +	const TYPE_COMMA       = 7; // ,
    +	const TYPE_SEMICOLON   = 8; // ;
    +	const TYPE_BRACE_OPEN  = 9; // {
    +	const TYPE_BRACE_CLOSE = 10; // }
    +	const TYPE_PAREN_OPEN  = 11; // ( and [
    +	const TYPE_PAREN_CLOSE = 12; // ) and ]
    +	const TYPE_RETURN      = 13; // keywords: break, continue, return, throw
    +	const TYPE_IF          = 14; // keywords: catch, for, with, switch, while, if
    +	const TYPE_DO          = 15; // keywords: case, var, finally, else, do, try
    +	const TYPE_FUNC        = 16; // keywords: function
    +	const TYPE_LITERAL     = 17; // all literals, identifiers and unrecognised tokens
    +	
    +	// Sanity limit to avoid excessive memory usage
    +	const STACK_LIMIT = 1000;
    +
    +	/* Static functions */
    +
    +	/**
    +	 * Returns minified JavaScript code.
    +	 *
    +	 * NOTE: $maxLineLength isn't a strict maximum. Longer lines will be produced when
    +	 *       literals (e.g. quoted strings) longer than $maxLineLength are encountered
    +	 *       or when required to guard against semicolon insertion.
    +	 *
    +	 * @param $s String JavaScript code to minify
    +	 * @param $statementsOnOwnLine Bool Whether to put each statement on its own line
    +	 * @param $maxLineLength Int Maximum length of a single line, or -1 for no maximum.
    +	 * @return String Minified code
    +	 */
    +	public static function minify( $s, $statementsOnOwnLine = false, $maxLineLength = 1000 ) {
    +		// First we declare a few tables that contain our parsing rules
    +
    +		// $opChars : characters, which can be combined without whitespace in between them
    +		$opChars = array(
    +			'!' => true,
    +			'"' => true,
    +			'%' => true,
    +			'&' => true,
    +			"'" => true,
    +			'(' => true,
    +			')' => true,
    +			'*' => true,
    +			'+' => true,
    +			',' => true,
    +			'-' => true,
    +			'.' => true,
    +			'/' => true,
    +			':' => true,
    +			';' => true,
    +			'<' => true,
    +			'=' => true,
    +			'>' => true,
    +			'?' => true,
    +			'[' => true,
    +			']' => true,
    +			'^' => true,
    +			'{' => true,
    +			'|' => true,
    +			'}' => true,
    +			'~' => true
    +		);
    +
    +		// $tokenTypes : maps keywords and operators to their corresponding token type
    +		$tokenTypes = array(
    +			'!'          => self::TYPE_UN_OP,
    +			'~'          => self::TYPE_UN_OP,
    +			'delete'     => self::TYPE_UN_OP,
    +			'new'        => self::TYPE_UN_OP,
    +			'typeof'     => self::TYPE_UN_OP,
    +			'void'       => self::TYPE_UN_OP,
    +			'++'         => self::TYPE_INCR_OP,
    +			'--'         => self::TYPE_INCR_OP,
    +			'!='         => self::TYPE_BIN_OP,
    +			'!=='        => self::TYPE_BIN_OP,
    +			'%'          => self::TYPE_BIN_OP,
    +			'%='         => self::TYPE_BIN_OP,
    +			'&'          => self::TYPE_BIN_OP,
    +			'&&'         => self::TYPE_BIN_OP,
    +			'&='         => self::TYPE_BIN_OP,
    +			'*'          => self::TYPE_BIN_OP,
    +			'*='         => self::TYPE_BIN_OP,
    +			'+='         => self::TYPE_BIN_OP,
    +			'-='         => self::TYPE_BIN_OP,
    +			'.'          => self::TYPE_BIN_OP,
    +			'/'          => self::TYPE_BIN_OP,
    +			'/='         => self::TYPE_BIN_OP,
    +			'<'          => self::TYPE_BIN_OP,
    +			'<<'         => self::TYPE_BIN_OP,
    +			'<<='        => self::TYPE_BIN_OP,
    +			'<='         => self::TYPE_BIN_OP,
    +			'='          => self::TYPE_BIN_OP,
    +			'=='         => self::TYPE_BIN_OP,
    +			'==='        => self::TYPE_BIN_OP,
    +			'>'          => self::TYPE_BIN_OP,
    +			'>='         => self::TYPE_BIN_OP,
    +			'>>'         => self::TYPE_BIN_OP,
    +			'>>='        => self::TYPE_BIN_OP,
    +			'>>>'        => self::TYPE_BIN_OP,
    +			'>>>='       => self::TYPE_BIN_OP,
    +			'^'          => self::TYPE_BIN_OP,
    +			'^='         => self::TYPE_BIN_OP,
    +			'|'          => self::TYPE_BIN_OP,
    +			'|='         => self::TYPE_BIN_OP,
    +			'||'         => self::TYPE_BIN_OP,
    +			'in'         => self::TYPE_BIN_OP,
    +			'instanceof' => self::TYPE_BIN_OP,
    +			'+'          => self::TYPE_ADD_OP,
    +			'-'          => self::TYPE_ADD_OP,
    +			'?'          => self::TYPE_HOOK,
    +			':'          => self::TYPE_COLON,
    +			','          => self::TYPE_COMMA,
    +			';'          => self::TYPE_SEMICOLON,
    +			'{'          => self::TYPE_BRACE_OPEN,
    +			'}'          => self::TYPE_BRACE_CLOSE,
    +			'('          => self::TYPE_PAREN_OPEN,
    +			'['          => self::TYPE_PAREN_OPEN,
    +			')'          => self::TYPE_PAREN_CLOSE,
    +			']'          => self::TYPE_PAREN_CLOSE,
    +			'break'      => self::TYPE_RETURN,
    +			'continue'   => self::TYPE_RETURN,
    +			'return'     => self::TYPE_RETURN,
    +			'throw'      => self::TYPE_RETURN,
    +			'catch'      => self::TYPE_IF,
    +			'for'        => self::TYPE_IF,
    +			'if'         => self::TYPE_IF,
    +			'switch'     => self::TYPE_IF,
    +			'while'      => self::TYPE_IF,
    +			'with'       => self::TYPE_IF,
    +			'case'       => self::TYPE_DO,
    +			'do'         => self::TYPE_DO,
    +			'else'       => self::TYPE_DO,
    +			'finally'    => self::TYPE_DO,
    +			'try'        => self::TYPE_DO,
    +			'var'        => self::TYPE_DO,
    +			'function'   => self::TYPE_FUNC
    +		);
    +
    +		// $goto : This is the main table for our state machine. For every state/token pair
    +		//         the following state is defined. When no rule exists for a given pair,
    +		//         the state is left unchanged.
    +		$goto = array(
    +			self::STATEMENT => array(
    +				self::TYPE_UN_OP      => self::EXPRESSION,
    +				self::TYPE_INCR_OP    => self::EXPRESSION,
    +				self::TYPE_ADD_OP     => self::EXPRESSION,
    +				self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION,
    +				self::TYPE_RETURN     => self::EXPRESSION_NO_NL,
    +				self::TYPE_IF         => self::CONDITION,
    +				self::TYPE_FUNC       => self::CONDITION,
    +				self::TYPE_LITERAL    => self::EXPRESSION_OP
    +			),
    +			self::CONDITION => array(
    +				self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION
    +			),
    +			self::PROPERTY_ASSIGNMENT => array(
    +				self::TYPE_COLON      => self::PROPERTY_EXPRESSION,
    +				self::TYPE_BRACE_OPEN => self::STATEMENT
    +			),
    +			self::EXPRESSION => array(
    +				self::TYPE_SEMICOLON  => self::STATEMENT,
    +				self::TYPE_BRACE_OPEN => self::PROPERTY_ASSIGNMENT,
    +				self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION,
    +				self::TYPE_FUNC       => self::EXPRESSION_FUNC,
    +				self::TYPE_LITERAL    => self::EXPRESSION_OP
    +			),
    +			self::EXPRESSION_NO_NL => array(
    +				self::TYPE_SEMICOLON  => self::STATEMENT,
    +				self::TYPE_BRACE_OPEN => self::PROPERTY_ASSIGNMENT,
    +				self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION,
    +				self::TYPE_FUNC       => self::EXPRESSION_FUNC,
    +				self::TYPE_LITERAL    => self::EXPRESSION_OP
    +			),
    +			self::EXPRESSION_OP => array(
    +				self::TYPE_BIN_OP     => self::EXPRESSION,
    +				self::TYPE_ADD_OP     => self::EXPRESSION,
    +				self::TYPE_HOOK       => self::EXPRESSION_TERNARY,
    +				self::TYPE_COLON      => self::STATEMENT,
    +				self::TYPE_COMMA      => self::EXPRESSION,
    +				self::TYPE_SEMICOLON  => self::STATEMENT,
    +				self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION
    +			),
    +			self::EXPRESSION_FUNC => array(
    +				self::TYPE_BRACE_OPEN => self::STATEMENT
    +			),
    +			self::EXPRESSION_TERNARY => array(
    +				self::TYPE_BRACE_OPEN => self::PROPERTY_ASSIGNMENT,
    +				self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION,
    +				self::TYPE_FUNC       => self::EXPRESSION_TERNARY_FUNC,
    +				self::TYPE_LITERAL    => self::EXPRESSION_TERNARY_OP
    +			),
    +			self::EXPRESSION_TERNARY_OP => array(
    +				self::TYPE_BIN_OP     => self::EXPRESSION_TERNARY,
    +				self::TYPE_ADD_OP     => self::EXPRESSION_TERNARY,
    +				self::TYPE_HOOK       => self::EXPRESSION_TERNARY,
    +				self::TYPE_COMMA      => self::EXPRESSION_TERNARY,
    +				self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION
    +			),
    +			self::EXPRESSION_TERNARY_FUNC => array(
    +				self::TYPE_BRACE_OPEN => self::STATEMENT
    +			),
    +			self::PAREN_EXPRESSION => array(
    +				self::TYPE_BRACE_OPEN => self::PROPERTY_ASSIGNMENT,
    +				self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION,
    +				self::TYPE_FUNC       => self::PAREN_EXPRESSION_FUNC,
    +				self::TYPE_LITERAL    => self::PAREN_EXPRESSION_OP
    +			),
    +			self::PAREN_EXPRESSION_OP => array(
    +				self::TYPE_BIN_OP     => self::PAREN_EXPRESSION,
    +				self::TYPE_ADD_OP     => self::PAREN_EXPRESSION,
    +				self::TYPE_HOOK       => self::PAREN_EXPRESSION,
    +				self::TYPE_COLON      => self::PAREN_EXPRESSION,
    +				self::TYPE_COMMA      => self::PAREN_EXPRESSION,
    +				self::TYPE_SEMICOLON  => self::PAREN_EXPRESSION,
    +				self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION
    +			),
    +			self::PAREN_EXPRESSION_FUNC => array(
    +				self::TYPE_BRACE_OPEN => self::STATEMENT
    +			),
    +			self::PROPERTY_EXPRESSION => array(
    +				self::TYPE_BRACE_OPEN => self::PROPERTY_ASSIGNMENT,
    +				self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION,
    +				self::TYPE_FUNC       => self::PROPERTY_EXPRESSION_FUNC,
    +				self::TYPE_LITERAL    => self::PROPERTY_EXPRESSION_OP
    +			),
    +			self::PROPERTY_EXPRESSION_OP => array(
    +				self::TYPE_BIN_OP     => self::PROPERTY_EXPRESSION,
    +				self::TYPE_ADD_OP     => self::PROPERTY_EXPRESSION,
    +				self::TYPE_HOOK       => self::PROPERTY_EXPRESSION,
    +				self::TYPE_COMMA      => self::PROPERTY_ASSIGNMENT,
    +				self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION
    +			),
    +			self::PROPERTY_EXPRESSION_FUNC => array(
    +				self::TYPE_BRACE_OPEN => self::STATEMENT
    +			)
    +		);
    +
    +		// $push : This table contains the rules for when to push a state onto the stack.
    +		//         The pushed state is the state to return to when the corresponding
    +		//         closing token is found
    +		$push = array(
    +			self::STATEMENT => array(
    +				self::TYPE_BRACE_OPEN => self::STATEMENT,
    +				self::TYPE_PAREN_OPEN => self::EXPRESSION_OP
    +			),
    +			self::CONDITION => array(
    +				self::TYPE_PAREN_OPEN => self::STATEMENT
    +			),
    +			self::PROPERTY_ASSIGNMENT => array(
    +				self::TYPE_BRACE_OPEN => self::PROPERTY_ASSIGNMENT
    +			),
    +			self::EXPRESSION => array(
    +				self::TYPE_BRACE_OPEN => self::EXPRESSION_OP,
    +				self::TYPE_PAREN_OPEN => self::EXPRESSION_OP
    +			),
    +			self::EXPRESSION_NO_NL => array(
    +				self::TYPE_BRACE_OPEN => self::EXPRESSION_OP,
    +				self::TYPE_PAREN_OPEN => self::EXPRESSION_OP
    +			),
    +			self::EXPRESSION_OP => array(
    +				self::TYPE_HOOK       => self::EXPRESSION,
    +				self::TYPE_PAREN_OPEN => self::EXPRESSION_OP
    +			),
    +			self::EXPRESSION_FUNC => array(
    +				self::TYPE_BRACE_OPEN => self::EXPRESSION_OP
    +			),
    +			self::EXPRESSION_TERNARY => array(
    +				self::TYPE_BRACE_OPEN => self::EXPRESSION_TERNARY_OP,
    +				self::TYPE_PAREN_OPEN => self::EXPRESSION_TERNARY_OP
    +			),
    +			self::EXPRESSION_TERNARY_OP => array(
    +				self::TYPE_HOOK       => self::EXPRESSION_TERNARY,
    +				self::TYPE_PAREN_OPEN => self::EXPRESSION_TERNARY_OP
    +			),
    +			self::EXPRESSION_TERNARY_FUNC => array(
    +				self::TYPE_BRACE_OPEN => self::EXPRESSION_TERNARY_OP
    +			),
    +			self::PAREN_EXPRESSION => array(
    +				self::TYPE_BRACE_OPEN => self::PAREN_EXPRESSION_OP,
    +				self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION_OP
    +			),
    +			self::PAREN_EXPRESSION_OP => array(
    +				self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION_OP
    +			),
    +			self::PAREN_EXPRESSION_FUNC => array(
    +				self::TYPE_BRACE_OPEN => self::PAREN_EXPRESSION_OP
    +			),
    +			self::PROPERTY_EXPRESSION => array(
    +				self::TYPE_BRACE_OPEN => self::PROPERTY_EXPRESSION_OP,
    +				self::TYPE_PAREN_OPEN => self::PROPERTY_EXPRESSION_OP
    +			),
    +			self::PROPERTY_EXPRESSION_OP => array(
    +				self::TYPE_PAREN_OPEN => self::PROPERTY_EXPRESSION_OP
    +			),
    +			self::PROPERTY_EXPRESSION_FUNC => array(
    +				self::TYPE_BRACE_OPEN => self::PROPERTY_EXPRESSION_OP
    +			)
    +		);
    +
    +		// $pop : Rules for when to pop a state from the stack
    +		$pop = array(
    +			self::STATEMENT              => array( self::TYPE_BRACE_CLOSE => true ),
    +			self::PROPERTY_ASSIGNMENT    => array( self::TYPE_BRACE_CLOSE => true ),
    +			self::EXPRESSION             => array( self::TYPE_BRACE_CLOSE => true ),
    +			self::EXPRESSION_NO_NL       => array( self::TYPE_BRACE_CLOSE => true ),
    +			self::EXPRESSION_OP          => array( self::TYPE_BRACE_CLOSE => true ),
    +			self::EXPRESSION_TERNARY_OP  => array( self::TYPE_COLON       => true ),
    +			self::PAREN_EXPRESSION       => array( self::TYPE_PAREN_CLOSE => true ),
    +			self::PAREN_EXPRESSION_OP    => array( self::TYPE_PAREN_CLOSE => true ),
    +			self::PROPERTY_EXPRESSION    => array( self::TYPE_BRACE_CLOSE => true ),
    +			self::PROPERTY_EXPRESSION_OP => array( self::TYPE_BRACE_CLOSE => true )
    +		);
    +
    +		// $semicolon : Rules for when a semicolon insertion is appropriate
    +		$semicolon = array(
    +			self::EXPRESSION_NO_NL => array(
    +				self::TYPE_UN_OP      => true,
    +				self::TYPE_INCR_OP    => true,
    +				self::TYPE_ADD_OP     => true,
    +				self::TYPE_BRACE_OPEN => true,
    +				self::TYPE_PAREN_OPEN => true,
    +				self::TYPE_RETURN     => true,
    +				self::TYPE_IF         => true,
    +				self::TYPE_DO         => true,
    +				self::TYPE_FUNC       => true,
    +				self::TYPE_LITERAL    => true
    +			),
    +			self::EXPRESSION_OP => array(
    +				self::TYPE_UN_OP      => true,
    +				self::TYPE_INCR_OP    => true,
    +				self::TYPE_BRACE_OPEN => true,
    +				self::TYPE_RETURN     => true,
    +				self::TYPE_IF         => true,
    +				self::TYPE_DO         => true,
    +				self::TYPE_FUNC       => true,
    +				self::TYPE_LITERAL    => true
    +			)
    +		);
    +		
    +		// Rules for when newlines should be inserted if
    +		// $statementsOnOwnLine is enabled.
    +		// $newlineBefore is checked before switching state,
    +		// $newlineAfter is checked after
    +		$newlineBefore = array(
    +			self::STATEMENT => array(
    +				self::TYPE_BRACE_CLOSE => true,
    +			),
    +		);
    +		$newlineAfter = array(
    +			self::STATEMENT => array(
    +				self::TYPE_BRACE_OPEN => true,
    +				self::TYPE_PAREN_CLOSE => true,
    +				self::TYPE_SEMICOLON => true,
    +			),
    +		);
    +
    +		// $divStates : Contains all states that can be followed by a division operator
    +		$divStates = array(
    +			self::EXPRESSION_OP          => true,
    +			self::EXPRESSION_TERNARY_OP  => true,
    +			self::PAREN_EXPRESSION_OP    => true,
    +			self::PROPERTY_EXPRESSION_OP => true
    +		);
    +
    +		// Here's where the minifying takes place: Loop through the input, looking for tokens
    +		// and output them to $out, taking actions to the above defined rules when appropriate.
    +		$out = '';
    +		$pos = 0;
    +		$length = strlen( $s );
    +		$lineLength = 0;
    +		$newlineFound = true;
    +		$state = self::STATEMENT;
    +		$stack = array();
    +		$last = ';'; // Pretend that we have seen a semicolon yet
    +		while( $pos < $length ) {
    +			// First, skip over any whitespace and multiline comments, recording whether we
    +			// found any newline character
    +			$skip = strspn( $s, " \t\n\r\xb\xc", $pos );
    +			if( !$skip ) {
    +				$ch = $s[$pos];
    +				if( $ch === '/' && substr( $s, $pos, 2 ) === '/*' ) {
    +					// Multiline comment. Search for the end token or EOT.
    +					$end = strpos( $s, '*/', $pos + 2 );
    +					$skip = $end === false ? $length - $pos : $end - $pos + 2;
    +				}
    +			}
    +			if( $skip ) {
    +				// The semicolon insertion mechanism needs to know whether there was a newline
    +				// between two tokens, so record it now.
    +				if( !$newlineFound && strcspn( $s, "\r\n", $pos, $skip ) !== $skip ) {
    +					$newlineFound = true;
    +				}
    +				$pos += $skip;
    +				continue;
    +			}
    +			// Handle C++-style comments and html comments, which are treated as single line
    +			// comments by the browser, regardless of whether the end tag is on the same line.
    +			// Handle --> the same way, but only if it's at the beginning of the line
    +			if( ( $ch === '/' && substr( $s, $pos, 2 ) === '//' )
    +				|| ( $ch === '<' && substr( $s, $pos, 4 ) === '' )
    +			) {
    +				$pos += strcspn( $s, "\r\n", $pos );
    +				continue;
    +			}
    +
    +			// Find out which kind of token we're handling. $end will point past the end of it.
    +			$end = $pos + 1;
    +			// Handle string literals
    +			if( $ch === "'" || $ch === '"' ) {
    +				// Search to the end of the string literal, skipping over backslash escapes
    +				$search = $ch . '\\';
    +				do{
    +					$end += strcspn( $s, $search, $end ) + 2;
    +				} while( $end - 2 < $length && $s[$end - 2] === '\\' );
    +				$end--;
    +			// We have to distinguish between regexp literals and division operators
    +			// A division operator is only possible in certain states
    +			} elseif( $ch === '/' && !isset( $divStates[$state] ) ) {
    +				// Regexp literal, search to the end, skipping over backslash escapes and
    +				// character classes
    +				for( ; ; ) {
    +					do{
    +						$end += strcspn( $s, '/[\\', $end ) + 2;
    +					} while( $end - 2 < $length && $s[$end - 2] === '\\' );
    +					$end--;
    +					if( $end - 1 >= $length || $s[$end - 1] === '/' ) {
    +						break;
    +					}
    +					do{
    +						$end += strcspn( $s, ']\\', $end ) + 2;
    +					} while( $end - 2 < $length && $s[$end - 2] === '\\' );
    +					$end--;
    +				};
    +				// Search past the regexp modifiers (gi)
    +				while( $end < $length && ctype_alpha( $s[$end] ) ) {
    +					$end++;
    +				}
    +			} elseif(
    +				ctype_digit( $ch )
    +				|| ( $ch === '.' && $pos + 1 < $length && ctype_digit( $s[$pos + 1] ) )
    +			) {
    +				// Numeric literal. Search for the end of it, but don't care about [+-]exponent
    +				// at the end, as the results of "numeric [+-] numeric" and "numeric" are
    +				// identical to our state machine.
    +				$end += strspn( $s, '0123456789ABCDEFabcdefXx.', $end );
    +				while( $s[$end - 1] === '.' ) {
    +					// Special case: When a numeric ends with a dot, we have to check the 
    +					// literal for proper syntax
    +					$decimal = strspn( $s, '0123456789', $pos, $end - $pos - 1 );
    +					if( $decimal === $end - $pos - 1 ) {
    +						break;
    +					} else {
    +						$end--;
    +					}
    +				}
    +			} elseif( isset( $opChars[$ch] ) ) {
    +				// Punctuation character. Search for the longest matching operator.
    +				while(
    +					$end < $length
    +					&& isset( $tokenTypes[substr( $s, $pos, $end - $pos + 1 )] )
    +				) {
    +					$end++;
    +				}
    +			} else {
    +				// Identifier or reserved word. Search for the end by excluding whitespace and
    +				// punctuation.
    +				$end += strcspn( $s, " \t\n.;,=<>+-{}()[]?:*/%'\"!&|^~\xb\xc\r", $end );
    +			}
    +
    +			// Now get the token type from our type array
    +			$token = substr( $s, $pos, $end - $pos ); // so $end - $pos == strlen( $token )
    +			$type = isset( $tokenTypes[$token] ) ? $tokenTypes[$token] : self::TYPE_LITERAL;
    +
    +			if( $newlineFound && isset( $semicolon[$state][$type] ) ) {
    +				// This token triggers the semicolon insertion mechanism of javascript. While we
    +				// could add the ; token here ourselves, keeping the newline has a few advantages.
    +				$out .= "\n";
    +				$state = self::STATEMENT;
    +				$lineLength = 0;
    +			} elseif( $maxLineLength > 0 && $lineLength + $end - $pos > $maxLineLength &&
    +					!isset( $semicolon[$state][$type] ) && $type !== self::TYPE_INCR_OP )
    +			{
    +				// This line would get too long if we added $token, so add a newline first.
    +				// Only do this if it won't trigger semicolon insertion and if it won't
    +				// put a postfix increment operator on its own line, which is illegal in js.
    +				$out .= "\n";
    +				$lineLength = 0;
    +			// Check, whether we have to separate the token from the last one with whitespace
    +			} elseif( !isset( $opChars[$last] ) && !isset( $opChars[$ch] ) ) {
    +				$out .= ' ';
    +				$lineLength++;
    +			// Don't accidentally create ++, -- or // tokens
    +			} elseif( $last === $ch && ( $ch === '+' || $ch === '-' || $ch === '/' ) ) {
    +				$out .= ' ';
    +				$lineLength++;
    +			}
    +			
    +			$out .= $token;
    +			$lineLength += $end - $pos; // += strlen( $token )
    +			$last = $s[$end - 1];
    +			$pos = $end;
    +			$newlineFound = false;
    +			
    +			// Output a newline after the token if required
    +			// This is checked before AND after switching state
    +			$newlineAdded = false;
    +			if ( $statementsOnOwnLine && !$newlineAdded && isset( $newlineBefore[$state][$type] ) ) {
    +				$out .= "\n";
    +				$lineLength = 0;
    +				$newlineAdded = true;
    +			}
    +
    +			// Now that we have output our token, transition into the new state.
    +			if( isset( $push[$state][$type] ) && count( $stack ) < self::STACK_LIMIT ) {
    +				$stack[] = $push[$state][$type];
    +			}
    +			if( $stack && isset( $pop[$state][$type] ) ) {
    +				$state = array_pop( $stack );
    +			} elseif( isset( $goto[$state][$type] ) ) {
    +				$state = $goto[$state][$type];
    +			}
    +			
    +			// Check for newline insertion again
    +			if ( $statementsOnOwnLine && !$newlineAdded && isset( $newlineAfter[$state][$type] ) ) {
    +				$out .= "\n";
    +				$lineLength = 0;
    +			}
    +		}
    +		return $out;
    +	}
    +}
    diff --git a/includes/libs/README b/includes/libs/README
    new file mode 100644
    index 00000000..85e3db3c
    --- /dev/null
    +++ b/includes/libs/README
    @@ -0,0 +1,4 @@
    +The classes in this directory ./includes/libs are considered standalone
    +from the remainder of the MediaWiki codebase. They do not call on any other
    +portions of MediaWiki code, and can be used in other projects without
    +dependency issues.
    diff --git a/includes/libs/spyc.php b/includes/libs/spyc.php
    new file mode 100644
    index 00000000..bc92e869
    --- /dev/null
    +++ b/includes/libs/spyc.php
    @@ -0,0 +1,248 @@
    +
    + * @see http://spyc.sourceforge.net/
    + * @copyright Copyright 2005-2006 Chris Wanstrath
    + * @license http://www.opensource.org/licenses/mit-license.php MIT License
    + */
    +
    +/**
    + * The Simple PHP YAML Class.
    + *
    + * This class can be used to read a YAML file and convert its contents
    + * into a PHP array.  It currently supports a very limited subsection of
    + * the YAML spec.
    + *
    + * @ingroup API
    + */
    +class Spyc {
    +
    +	/**
    +	 * Dump YAML from PHP array statically
    +	 *
    +	 * The dump method, when supplied with an array, will do its best
    +	 * to convert the array into friendly YAML.  Pretty simple.  Feel free to
    +	 * save the returned string as nothing.yml and pass it around.
    +	 *
    +	 * Oh, and you can decide how big the indent is and what the wordwrap
    +	 * for folding is.  Pretty cool -- just pass in 'false' for either if
    +	 * you want to use the default.
    +	 *
    +	 * Indent's default is 2 spaces, wordwrap's default is 40 characters.  And
    +	 * you can turn off wordwrap by passing in 0.
    +	 *
    +	 * @param $array Array: PHP array
    +	 * @param $indent Integer: Pass in false to use the default, which is 2
    +	 * @param $wordwrap Integer: Pass in 0 for no wordwrap, false for default (40)
    +	 * @return String
    +	 */
    +	public static function YAMLDump( $array, $indent = false, $wordwrap = false ) {
    +		$spyc = new Spyc;
    +		return $spyc->dump( $array, $indent, $wordwrap );
    +	}
    +
    +	/**
    +	 * Dump PHP array to YAML
    +	 *
    +	 * The dump method, when supplied with an array, will do its best
    +	 * to convert the array into friendly YAML.  Pretty simple.  Feel free to
    +	 * save the returned string as tasteful.yml and pass it around.
    +	 *
    +	 * Oh, and you can decide how big the indent is and what the wordwrap
    +	 * for folding is.  Pretty cool -- just pass in 'false' for either if
    +	 * you want to use the default.
    +	 *
    +	 * Indent's default is 2 spaces, wordwrap's default is 40 characters.  And
    +	 * you can turn off wordwrap by passing in 0.
    +	 *
    +	 * @param $array Array: PHP array
    +	 * @param $indent Integer: Pass in false to use the default, which is 2
    +	 * @param $wordwrap Integer: Pass in 0 for no wordwrap, false for default (40)
    +	 * @return String
    +	 */
    +	public function dump( $array, $indent = false, $wordwrap = false ) {
    +		// Dumps to some very clean YAML.  We'll have to add some more features
    +		// and options soon.  And better support for folding.
    +
    +		// New features and options.
    +		if ( $indent === false or !is_numeric( $indent ) ) {
    +			$this->_dumpIndent = 2;
    +		} else {
    +			$this->_dumpIndent = $indent;
    +		}
    +
    +		if ( $wordwrap === false or !is_numeric( $wordwrap ) ) {
    +			$this->_dumpWordWrap = 40;
    +		} else {
    +			$this->_dumpWordWrap = $wordwrap;
    +		}
    +
    +		// New YAML document
    +		$string = "---\n";
    +
    +		// Start at the base of the array and move through it.
    +		foreach ( $array as $key => $value ) {
    +			$string .= $this->_yamlize( $key, $value, 0 );
    +		}
    +		return $string;
    +	}
    +
    +	/**** Private Properties ****/
    +
    +	/**
    +	 * Unused variables, but just commented rather than deleting
    +	 * to save altering the library
    +	private $_haveRefs;
    +	private $_allNodes;
    +	private $_lastIndent;
    +	private $_lastNode;
    +	private $_inBlock;
    +	private $_isInline;
    +	**/
    +	private $_dumpIndent;
    +	private $_dumpWordWrap;
    +
    +	/**** Private Methods ****/
    +
    +	/**
    +	 * Attempts to convert a key / value array item to YAML
    +	 *
    +	 * @param $key Mixed: the name of the key
    +	 * @param $value Mixed: the value of the item
    +	 * @param $indent Integer: the indent of the current node
    +	 * @return String
    +	 */
    +	private function _yamlize( $key, $value, $indent ) {
    +		if ( is_array( $value ) ) {
    +			// It has children.  What to do?
    +			// Make it the right kind of item
    +			$string = $this->_dumpNode( $key, null, $indent );
    +			// Add the indent
    +			$indent += $this->_dumpIndent;
    +			// Yamlize the array
    +			$string .= $this->_yamlizeArray( $value, $indent );
    +		} elseif ( !is_array( $value ) ) {
    +			// It doesn't have children.  Yip.
    +			$string = $this->_dumpNode( $key, $value, $indent );
    +		}
    +		return $string;
    +	}
    +
    +	/**
    +	 * Attempts to convert an array to YAML
    +	 *
    +	 * @param $array Array: the array you want to convert
    +	 * @param $indent Integer: the indent of the current level
    +	 * @return String
    +	 */
    +	private function _yamlizeArray( $array, $indent ) {
    +		if ( is_array( $array ) ) {
    +			$string = '';
    +			foreach ( $array as $key => $value ) {
    +				$string .= $this->_yamlize( $key, $value, $indent );
    +			}
    +			return $string;
    +		} else {
    +			return false;
    +		}
    +    }
    +
    +	/**
    +	 * Find out whether a string needs to be output as a literal rather than in plain style.
    +	 * Added by Roan Kattouw 13-03-2008
    +	 *
    +	 * @param $value String: the string to check
    +	 * @return Boolean
    +	 */
    +	function _needLiteral( $value ) {
    +		// Check whether the string contains # or : or begins with any of:
    +		// [ - ? , [ ] { } ! * & | > ' " % @ ` ]
    +		// or is a number or contains newlines
    +		return (bool)( gettype( $value ) == "string" &&
    +			( is_numeric( $value )  ||
    +			strpos( $value, "\n" ) ||
    +			preg_match( "/[#:]/", $value ) ||
    +			preg_match( "/^[-?,[\]{}!*&|>'\"%@`]/", $value ) ) );
    +	}
    +
    +	/**
    +	 * Returns YAML from a key and a value
    +	 *
    +	 * @param $key Mixed: the name of the key
    +	 * @param $value Mixed: the value of the item
    +	 * @param $indent Integer: the indent of the current node
    +	 * @return String
    +	 */
    +	private function _dumpNode( $key, $value, $indent ) {
    +		// do some folding here, for blocks
    +		if ( $this->_needLiteral( $value ) ) {
    +			$value = $this->_doLiteralBlock( $value, $indent );
    +		} else {
    +			$value = $this->_doFolding( $value, $indent );
    +		}
    +
    +		$spaces = str_repeat( ' ', $indent );
    +
    +		if ( is_int( $key ) ) {
    +			// It's a sequence
    +			if ( $value !== '' && !is_null( $value ) )
    +				$string = $spaces . '- ' . $value . "\n";
    +			else
    +				$string = $spaces . "-\n";
    +		} else {
    +			 if ( $key == '*' ) // bug 21922 - Quote asterix used as keys
    +				$key = "'*'";
    +
    +			// It's mapped
    +			if ( $value !== '' && !is_null( $value ) )
    +				$string = $spaces . $key . ': ' . $value . "\n";
    +			else
    +				$string = $spaces . $key . ":\n";
    +		}
    +		return $string;
    +	}
    +
    +	/**
    +	 * Creates a literal block for dumping
    +	 *
    +	 * @param $value String
    +	 * @param $indent Integer: the value of the indent
    +	 * @return String
    +	 */
    +	private function _doLiteralBlock( $value, $indent ) {
    +		$exploded = explode( "\n", $value );
    +		$newValue = '|-';
    +		$indent  += $this->_dumpIndent;
    +		$spaces   = str_repeat( ' ', $indent );
    +		foreach ( $exploded as $line ) {
    +			$newValue .= "\n" . $spaces . trim( $line );
    +		}
    +		return $newValue;
    +	}
    +
    +	/**
    +	 * Folds a string of text, if necessary
    +	 *
    +	 * @param $value String: the string you wish to fold
    +	 * @param $indent Integer: the indent of the current node
    +	 * @return String
    +	 */
    +	private function _doFolding( $value, $indent ) {
    +		// Don't do anything if wordwrap is set to 0
    +		if ( $this->_dumpWordWrap === 0 ) {
    +			return $value;
    +		}
    +
    +		if ( strlen( $value ) > $this->_dumpWordWrap ) {
    +			$indent += $this->_dumpIndent;
    +			$indent = str_repeat( ' ', $indent );
    +			$wrapped = wordwrap( $value, $this->_dumpWordWrap, "\n$indent" );
    +			$value   = ">-\n" . $indent . $wrapped;
    +		}
    +		return $value;
    +	}
    +}
    diff --git a/includes/media/BMP.php b/includes/media/BMP.php
    index 39b29744..de836b59 100644
    --- a/includes/media/BMP.php
    +++ b/includes/media/BMP.php
    @@ -1,5 +1,7 @@
     getWidth( $params['page'] );
     		$srcHeight = $image->getHeight( $params['page'] );
     
    -		# Don't thumbnail an image so big that it will fill hard drives and send servers into swap
    -		# JPEG has the handy property of allowing thumbnailing without full decompression, so we make
    -		# an exception for it.
    -		if ( $mimeType !== 'image/jpeg' &&
    -			$this->getImageArea( $image, $srcWidth, $srcHeight ) > $wgMaxImageArea )
    -		{
    -			return false;
    -		}
    -
     		# Don't make an image bigger than the source
     		$params['physicalWidth'] = $params['width'];
     		$params['physicalHeight'] = $params['height'];
    @@ -34,13 +29,25 @@ class BitmapHandler extends ImageHandler {
     		if ( $params['physicalWidth'] >= $srcWidth ) {
     			$params['physicalWidth'] = $srcWidth;
     			$params['physicalHeight'] = $srcHeight;
    -			return true;
    +			# Skip scaling limit checks if no scaling is required
    +			if ( !$image->mustRender() )
    +				return true;
    +		}
    +
    +		# Don't thumbnail an image so big that it will fill hard drives and send servers into swap
    +		# JPEG has the handy property of allowing thumbnailing without full decompression, so we make
    +		# an exception for it.
    +		# FIXME: This actually only applies to ImageMagick
    +		if ( $mimeType !== 'image/jpeg' &&
    +			$srcWidth * $srcHeight > $wgMaxImageArea )
    +		{
    +			return false;
     		}
     
     		return true;
     	}
    -	
    -	
    +
    +
     	// Function that returns the number of pixels to be thumbnailed.
     	// Intended for animated GIFs to multiply by the number of frames.
     	function getImageArea( $image, $width, $height ) {
    @@ -48,36 +55,48 @@ class BitmapHandler extends ImageHandler {
     	}
     
     	function doTransform( $image, $dstPath, $dstUrl, $params, $flags = 0 ) {
    -		global $wgUseImageMagick, $wgImageMagickConvertCommand, $wgImageMagickTempDir;
    +		global $wgUseImageMagick;
     		global $wgCustomConvertCommand, $wgUseImageResize;
    -		global $wgSharpenParameter, $wgSharpenReductionThreshold;
    -		global $wgMaxAnimatedGifArea;
     
     		if ( !$this->normaliseParams( $image, $params ) ) {
     			return new TransformParameterError( $params );
     		}
    -		$physicalWidth = $params['physicalWidth'];
    -		$physicalHeight = $params['physicalHeight'];
    -		$clientWidth = $params['width'];
    -		$clientHeight = $params['height'];
    -		$comment = isset( $params['descriptionUrl'] ) ? "File source: ". $params['descriptionUrl'] : '';
    -		$srcWidth = $image->getWidth();
    -		$srcHeight = $image->getHeight();
    -		$mimeType = $image->getMimeType();
    -		$srcPath = $image->getPath();
    -		$retval = 0;
    -		wfDebug( __METHOD__.": creating {$physicalWidth}x{$physicalHeight} thumbnail at $dstPath\n" );
    +		# Create a parameter array to pass to the scaler
    +		$scalerParams = array(
    +			# The size to which the image will be resized
    +			'physicalWidth' => $params['physicalWidth'],
    +			'physicalHeight' => $params['physicalHeight'],
    +			'physicalDimensions' => "{$params['physicalWidth']}x{$params['physicalHeight']}",
    +			# The size of the image on the page
    +			'clientWidth' => $params['width'],
    +			'clientHeight' => $params['height'],
    +			# Comment as will be added to the EXIF of the thumbnail
    +			'comment' => isset( $params['descriptionUrl'] ) ?
    +				"File source: {$params['descriptionUrl']}" : '',
    +			# Properties of the original image
    +			'srcWidth' => $image->getWidth(),
    +			'srcHeight' => $image->getHeight(),
    +			'mimeType' => $image->getMimeType(),
    +			'srcPath' => $image->getPath(),
    +			'dstPath' => $dstPath,
    +		);
    +
    +		wfDebug( __METHOD__ . ": creating {$scalerParams['physicalDimensions']} thumbnail at $dstPath\n" );
    +
    +		if ( !$image->mustRender() &&
    +				$scalerParams['physicalWidth'] == $scalerParams['srcWidth']
    +				&& $scalerParams['physicalHeight'] == $scalerParams['srcHeight'] ) {
     
    -		if ( !$image->mustRender() && $physicalWidth == $srcWidth && $physicalHeight == $srcHeight ) {
     			# normaliseParams (or the user) wants us to return the unscaled image
    -			wfDebug( __METHOD__.": returning unscaled image\n" );
    -			return new ThumbnailImage( $image, $image->getURL(), $clientWidth, $clientHeight, $srcPath );
    +			wfDebug( __METHOD__ . ": returning unscaled image\n" );
    +			return $this->getClientScalingThumbnailImage( $image, $scalerParams );
     		}
     
    +		# Determine scaler type
     		if ( !$dstPath ) {
    -			// No output path available, client side scaling only
    +			# No output path available, client side scaling only
     			$scaler = 'client';
    -		} elseif( !$wgUseImageResize ) {
    +		} elseif ( !$wgUseImageResize ) {
     			$scaler = 'client';
     		} elseif ( $wgUseImageMagick ) {
     			$scaler = 'im';
    @@ -88,166 +107,289 @@ class BitmapHandler extends ImageHandler {
     		} else {
     			$scaler = 'client';
     		}
    -		wfDebug( __METHOD__.": scaler $scaler\n" );
    +		wfDebug( __METHOD__ . ": scaler $scaler\n" );
     
     		if ( $scaler == 'client' ) {
     			# Client-side image scaling, use the source URL
     			# Using the destination URL in a TRANSFORM_LATER request would be incorrect
    -			return new ThumbnailImage( $image, $image->getURL(), $clientWidth, $clientHeight, $srcPath );
    +			return $this->getClientScalingThumbnailImage( $image, $scalerParams );
     		}
     
     		if ( $flags & self::TRANSFORM_LATER ) {
    -			wfDebug( __METHOD__.": Transforming later per flags.\n" );
    -			return new ThumbnailImage( $image, $dstUrl, $clientWidth, $clientHeight, $dstPath );
    +			wfDebug( __METHOD__ . ": Transforming later per flags.\n" );
    +			return new ThumbnailImage( $image, $dstUrl, $scalerParams['clientWidth'],
    +				$scalerParams['clientHeight'], $dstPath );
     		}
     
    +		# Try to make a target path for the thumbnail
     		if ( !wfMkdirParents( dirname( $dstPath ) ) ) {
    -			wfDebug( __METHOD__.": Unable to create thumbnail destination directory, falling back to client scaling\n" );
    -			return new ThumbnailImage( $image, $image->getURL(), $clientWidth, $clientHeight, $srcPath );
    -		}
    -
    -		if ( $scaler == 'im' ) {
    -			# use ImageMagick
    -
    -			$quality = '';
    -			$sharpen = '';
    -			$scene = false;
    -			$animation = '';
    -			if ( $mimeType == 'image/jpeg' ) {
    -				$quality = "-quality 80"; // 80%
    -				# Sharpening, see bug 6193
    -				if ( ( $physicalWidth + $physicalHeight ) / ( $srcWidth + $srcHeight ) < $wgSharpenReductionThreshold ) {
    -					$sharpen = "-sharpen " . wfEscapeShellArg( $wgSharpenParameter );
    -				}
    -			} elseif ( $mimeType == 'image/png' ) {
    -				$quality = "-quality 95"; // zlib 9, adaptive filtering
    -			} elseif( $mimeType == 'image/gif' ) {
    -				if( $srcWidth * $srcHeight > $wgMaxAnimatedGifArea ) {
    -					// Extract initial frame only; we're so big it'll
    -					// be a total drag. :P
    -					$scene = 0;
    -				} else {
    -					// Coalesce is needed to scale animated GIFs properly (bug 1017).
    -					$animation = ' -coalesce ';
    +			wfDebug( __METHOD__ . ": Unable to create thumbnail destination directory, falling back to client scaling\n" );
    +			return $this->getClientScalingThumbnailImage( $image, $scalerParams );
    +		}
    +
    +		switch ( $scaler ) {
    +			case 'im':
    +				$err = $this->transformImageMagick( $image, $scalerParams );
    +				break;
    +			case 'custom':
    +				$err = $this->transformCustom( $image, $scalerParams );
    +				break;
    +			case 'gd':
    +			default:
    +				$err = $this->transformGd( $image, $scalerParams );
    +				break;
    +		}
    +
    +		# Remove the file if a zero-byte thumbnail was created, or if there was an error
    +		$removed = $this->removeBadFile( $dstPath, (bool)$err );
    +		if ( $err ) {
    +			# transform returned MediaTransforError
    +			return $err;
    +		} elseif ( $removed ) {
    +			# Thumbnail was zero-byte and had to be removed
    +			return new MediaTransformError( 'thumbnail_error',
    +				$scalerParams['clientWidth'], $scalerParams['clientHeight'] );
    +		} else {
    +			return new ThumbnailImage( $image, $dstUrl, $scalerParams['clientWidth'],
    +				$scalerParams['clientHeight'], $dstPath );
    +		}
    +	}
    +
    +	/**
    +	 * Get a ThumbnailImage that respresents an image that will be scaled
    +	 * client side
    +	 *
    +	 * @param $image File File associated with this thumbnail
    +	 * @param $params array Array with scaler params
    +	 * @return ThumbnailImage
    +	 */
    +	protected function getClientScalingThumbnailImage( $image, $params ) {
    +		return new ThumbnailImage( $image, $image->getURL(),
    +				$params['clientWidth'], $params['clientHeight'], $params['srcPath'] );
    +	}
    +
    +	/**
    +	 * Transform an image using ImageMagick
    +	 *
    +	 * @param $image File File associated with this thumbnail
    +	 * @param $params array Array with scaler params
    +	 *
    +	 * @return MediaTransformError Error object if error occured, false (=no error) otherwise
    +	 */
    +	protected function transformImageMagick( $image, $params ) {
    +		# use ImageMagick
    +		global $wgSharpenReductionThreshold, $wgSharpenParameter,
    +			$wgMaxAnimatedGifArea,
    +			$wgImageMagickTempDir, $wgImageMagickConvertCommand;
    +
    +		$quality = '';
    +		$sharpen = '';
    +		$scene = false;
    +		$animation_pre = '';
    +		$animation_post = '';
    +		$decoderHint = '';
    +		if ( $params['mimeType'] == 'image/jpeg' ) {
    +			$quality = "-quality 80"; // 80%
    +			# Sharpening, see bug 6193
    +			if ( ( $params['physicalWidth'] + $params['physicalHeight'] )
    +					/ ( $params['srcWidth'] + $params['srcHeight'] )
    +					< $wgSharpenReductionThreshold ) {
    +				$sharpen = "-sharpen " . wfEscapeShellArg( $wgSharpenParameter );
    +			}
    +			// JPEG decoder hint to reduce memory, available since IM 6.5.6-2
    +			$decoderHint = "-define jpeg:size={$params['physicalDimensions']}";
    +
    +		} elseif ( $params['mimeType'] == 'image/png' ) {
    +			$quality = "-quality 95"; // zlib 9, adaptive filtering
    +
    +		} elseif ( $params['mimeType'] == 'image/gif' ) {
    +			if ( $this->getImageArea( $image, $params['srcWidth'],
    +					$params['srcHeight'] ) > $wgMaxAnimatedGifArea ) {
    +				// Extract initial frame only; we're so big it'll
    +				// be a total drag. :P
    +				$scene = 0;
    +
    +			} elseif ( $this->isAnimatedImage( $image ) ) {
    +				// Coalesce is needed to scale animated GIFs properly (bug 1017).
    +				$animation_pre = '-coalesce';
    +				// We optimize the output, but -optimize is broken,
    +				// use optimizeTransparency instead (bug 11822)
    +				if ( version_compare( $this->getMagickVersion(), "6.3.5" ) >= 0 ) {
    +					$animation_post = '-fuzz 5% -layers optimizeTransparency +map';
     				}
     			}
    +		}
     
    -			if ( strval( $wgImageMagickTempDir ) !== '' ) {
    -				$tempEnv = 'MAGICK_TMPDIR=' . wfEscapeShellArg( $wgImageMagickTempDir ) . ' ';
    -			} else {
    -				$tempEnv = '';
    -			}
    +		// Use one thread only, to avoid deadlock bugs on OOM
    +		$env = array( 'OMP_NUM_THREADS' => 1 );
    +		if ( strval( $wgImageMagickTempDir ) !== '' ) {
    +			$env['MAGICK_TMPDIR'] = $wgImageMagickTempDir;
    +		}
     
    -			# Specify white background color, will be used for transparent images
    -			# in Internet Explorer/Windows instead of default black.
    -
    -			# Note, we specify "-size {$physicalWidth}" and NOT "-size {$physicalWidth}x{$physicalHeight}".
    -			# It seems that ImageMagick has a bug wherein it produces thumbnails of
    -			# the wrong size in the second case.
    -
    -			$cmd  = 
    -				$tempEnv .
    -				wfEscapeShellArg( $wgImageMagickConvertCommand ) .
    -				" {$quality} -background white -size {$physicalWidth} ".
    -				wfEscapeShellArg( $this->escapeMagickInput( $srcPath, $scene ) ) .
    -				$animation .
    -				// For the -resize option a "!" is needed to force exact size,
    -				// or ImageMagick may decide your ratio is wrong and slice off
    -				// a pixel.
    -				" -thumbnail " . wfEscapeShellArg( "{$physicalWidth}x{$physicalHeight}!" ) .
    -				// Add the source url as a comment to the thumb.	
    -				" -set comment " . wfEscapeShellArg( $this->escapeMagickProperty( $comment ) ) .
    -				" -depth 8 $sharpen " .
    -				wfEscapeShellArg( $this->escapeMagickOutput( $dstPath ) ) . " 2>&1";
    -			wfDebug( __METHOD__.": running ImageMagick: $cmd\n" );
    -			wfProfileIn( 'convert' );
    -			$err = wfShellExec( $cmd, $retval );
    -			wfProfileOut( 'convert' );
    -		} elseif( $scaler == 'custom' ) {
    -			# Use a custom convert command
    -			# Variables: %s %d %w %h
    -			$src = wfEscapeShellArg( $srcPath );
    -			$dst = wfEscapeShellArg( $dstPath );
    -			$cmd = $wgCustomConvertCommand;
    -			$cmd = str_replace( '%s', $src, str_replace( '%d', $dst, $cmd ) ); # Filenames
    -			$cmd = str_replace( '%h', $physicalHeight, str_replace( '%w', $physicalWidth, $cmd ) ); # Size
    -			wfDebug( __METHOD__.": Running custom convert command $cmd\n" );
    -			wfProfileIn( 'convert' );
    -			$err = wfShellExec( $cmd, $retval );
    -			wfProfileOut( 'convert' );
    -		} else /* $scaler == 'gd' */ {
    -			# Use PHP's builtin GD library functions.
    -			#
    -			# First find out what kind of file this is, and select the correct
    -			# input routine for this.
    -
    -			$typemap = array(
    -				'image/gif'          => array( 'imagecreatefromgif',  'palette',   'imagegif'  ),
    -				'image/jpeg'         => array( 'imagecreatefromjpeg', 'truecolor', array( __CLASS__, 'imageJpegWrapper' ) ),
    -				'image/png'          => array( 'imagecreatefrompng',  'bits',      'imagepng'  ),
    -				'image/vnd.wap.wbmp' => array( 'imagecreatefromwbmp', 'palette',   'imagewbmp'  ),
    -				'image/xbm'          => array( 'imagecreatefromxbm',  'palette',   'imagexbm'  ),
    -			);
    -			if( !isset( $typemap[$mimeType] ) ) {
    -				$err = 'Image type not supported';
    -				wfDebug( "$err\n" );
    -				$errMsg = wfMsg ( 'thumbnail_image-type' );
    -				return new MediaTransformError( 'thumbnail_error', $clientWidth, $clientHeight, $errMsg );
    -			}
    -			list( $loader, $colorStyle, $saveType ) = $typemap[$mimeType];
    +		$cmd  =
    +			wfEscapeShellArg( $wgImageMagickConvertCommand ) .
    +			// Specify white background color, will be used for transparent images
    +			// in Internet Explorer/Windows instead of default black.
    +			" {$quality} -background white" .
    +			" {$decoderHint} " .
    +			wfEscapeShellArg( $this->escapeMagickInput( $params['srcPath'], $scene ) ) .
    +			" {$animation_pre}" .
    +			// For the -thumbnail option a "!" is needed to force exact size,
    +			// or ImageMagick may decide your ratio is wrong and slice off
    +			// a pixel.
    +			" -thumbnail " . wfEscapeShellArg( "{$params['physicalDimensions']}!" ) .
    +			// Add the source url as a comment to the thumb, but don't add the flag if there's no comment
    +			( $params['comment'] !== ''
    +				? " -set comment " . wfEscapeShellArg( $this->escapeMagickProperty( $params['comment'] ) )
    +				: '' ) .
    +			" -depth 8 $sharpen" .
    +			" {$animation_post} " .
    +			wfEscapeShellArg( $this->escapeMagickOutput( $params['dstPath'] ) ) . " 2>&1";
    +
    +		wfDebug( __METHOD__ . ": running ImageMagick: $cmd\n" );
    +		wfProfileIn( 'convert' );
    +		$retval = 0;
    +		$err = wfShellExec( $cmd, $retval, $env );
    +		wfProfileOut( 'convert' );
     
    -			if( !function_exists( $loader ) ) {
    -				$err = "Incomplete GD library configuration: missing function $loader";
    -				wfDebug( "$err\n" );
    -				$errMsg = wfMsg ( 'thumbnail_gd-library', $loader );
    -				return new MediaTransformError( 'thumbnail_error', $clientWidth, $clientHeight, $errMsg );
    -			}
    +		if ( $retval !== 0 ) {
    +			$this->logErrorForExternalProcess( $retval, $err, $cmd );
    +			return $this->getMediaTransformError( $params, $err );
    +		}
     
    -			if ( !file_exists( $srcPath ) ) {
    -				$err = "File seems to be missing: $srcPath";
    -				wfDebug( "$err\n" );
    -				$errMsg = wfMsg ( 'thumbnail_image-missing', $srcPath );
    -				return new MediaTransformError( 'thumbnail_error', $clientWidth, $clientHeight, $errMsg );
    -			}
    +		return false; # No error
    +	}
     
    -			$src_image = call_user_func( $loader, $srcPath );
    -			$dst_image = imagecreatetruecolor( $physicalWidth, $physicalHeight );
    -
    -			// Initialise the destination image to transparent instead of
    -			// the default solid black, to support PNG and GIF transparency nicely
    -			$background = imagecolorallocate( $dst_image, 0, 0, 0 );
    -			imagecolortransparent( $dst_image, $background );
    -			imagealphablending( $dst_image, false );
    -
    -			if( $colorStyle == 'palette' ) {
    -				// Don't resample for paletted GIF images.
    -				// It may just uglify them, and completely breaks transparency.
    -				imagecopyresized( $dst_image, $src_image,
    -					0,0,0,0,
    -					$physicalWidth, $physicalHeight, imagesx( $src_image ), imagesy( $src_image ) );
    -			} else {
    -				imagecopyresampled( $dst_image, $src_image,
    -					0,0,0,0,
    -					$physicalWidth, $physicalHeight, imagesx( $src_image ), imagesy( $src_image ) );
    -			}
    +	/**
    +	 * Transform an image using a custom command
    +	 *
    +	 * @param $image File File associated with this thumbnail
    +	 * @param $params array Array with scaler params
    +	 *
    +	 * @return MediaTransformError Error object if error occured, false (=no error) otherwise
    +	 */
    +	protected function transformCustom( $image, $params ) {
    +		# Use a custom convert command
    +		global $wgCustomConvertCommand;
    +
    +		# Variables: %s %d %w %h
    +		$src = wfEscapeShellArg( $params['srcPath'] );
    +		$dst = wfEscapeShellArg( $params['dstPath'] );
    +		$cmd = $wgCustomConvertCommand;
    +		$cmd = str_replace( '%s', $src, str_replace( '%d', $dst, $cmd ) ); # Filenames
    +		$cmd = str_replace( '%h', $params['physicalHeight'],
    +			str_replace( '%w', $params['physicalWidth'], $cmd ) ); # Size
    +		wfDebug( __METHOD__ . ": Running custom convert command $cmd\n" );
    +		wfProfileIn( 'convert' );
    +		$retval = 0;
    +		$err = wfShellExec( $cmd, $retval );
    +		wfProfileOut( 'convert' );
     
    -			imagesavealpha( $dst_image, true );
    +		if ( $retval !== 0 ) {
    +			$this->logErrorForExternalProcess( $retval, $err, $cmd );
    +			return $this->getMediaTransformError( $params, $err );
    +		}
    +		return false; # No error
    +	}
     
    -			call_user_func( $saveType, $dst_image, $dstPath );
    -			imagedestroy( $dst_image );
    -			imagedestroy( $src_image );
    -			$retval = 0;
    +	/**
    +	 * Log an error that occured in an external process
    +	 *
    +	 * @param $retval int
    +	 * @param $err int
    +	 * @param $cmd string
    +	 */
    +	protected function logErrorForExternalProcess( $retval, $err, $cmd ) {
    +		wfDebugLog( 'thumbnail',
    +			sprintf( 'thumbnail failed on %s: error %d "%s" from "%s"',
    +					wfHostname(), $retval, trim( $err ), $cmd ) );
    +	}
    +	/**
    +	 * Get a MediaTransformError with error 'thumbnail_error'
    +	 * 
    +	 * @param $params array Parameter array as passed to the transform* functions
    +	 * @param $errMsg string Error message
    +	 * @return MediaTransformError
    +	 */
    +	protected function getMediaTransformError( $params, $errMsg ) {
    +		return new MediaTransformError( 'thumbnail_error', $params['clientWidth'],
    +					$params['clientHeight'], $errMsg );
    +	}
    +
    +	/**
    +	 * Transform an image using the built in GD library
    +	 *
    +	 * @param $image File File associated with this thumbnail
    +	 * @param $params array Array with scaler params
    +	 *
    +	 * @return MediaTransformError Error object if error occured, false (=no error) otherwise
    +	 */
    +	protected function transformGd( $image, $params ) {
    +		# Use PHP's builtin GD library functions.
    +		#
    +		# First find out what kind of file this is, and select the correct
    +		# input routine for this.
    +
    +		$typemap = array(
    +			'image/gif'          => array( 'imagecreatefromgif',  'palette',   'imagegif'  ),
    +			'image/jpeg'         => array( 'imagecreatefromjpeg', 'truecolor', array( __CLASS__, 'imageJpegWrapper' ) ),
    +			'image/png'          => array( 'imagecreatefrompng',  'bits',      'imagepng'  ),
    +			'image/vnd.wap.wbmp' => array( 'imagecreatefromwbmp', 'palette',   'imagewbmp'  ),
    +			'image/xbm'          => array( 'imagecreatefromxbm',  'palette',   'imagexbm'  ),
    +		);
    +		if ( !isset( $typemap[$params['mimeType']] ) ) {
    +			$err = 'Image type not supported';
    +			wfDebug( "$err\n" );
    +			$errMsg = wfMsg ( 'thumbnail_image-type' );
    +			return $this->getMediaTransformError( $params, $errMsg );
    +		}
    +		list( $loader, $colorStyle, $saveType ) = $typemap[$params['mimeType']];
    +
    +		if ( !function_exists( $loader ) ) {
    +			$err = "Incomplete GD library configuration: missing function $loader";
    +			wfDebug( "$err\n" );
    +			$errMsg = wfMsg ( 'thumbnail_gd-library', $loader );
    +			return $this->getMediaTransformError( $params, $errMsg );
    +		}
    +
    +		if ( !file_exists( $params['srcPath'] ) ) {
    +			$err = "File seems to be missing: {$params['srcPath']}";
    +			wfDebug( "$err\n" );
    +			$errMsg = wfMsg ( 'thumbnail_image-missing', $params['srcPath'] );
    +			return $this->getMediaTransformError( $params, $errMsg );
     		}
     
    -		$removed = $this->removeBadFile( $dstPath, $retval );
    -		if ( $retval != 0 || $removed ) {
    -			wfDebugLog( 'thumbnail',
    -				sprintf( 'thumbnail failed on %s: error %d "%s" from "%s"',
    -					wfHostname(), $retval, trim($err), $cmd ) );
    -			return new MediaTransformError( 'thumbnail_error', $clientWidth, $clientHeight, $err );
    +		$src_image = call_user_func( $loader, $params['srcPath'] );
    +		$dst_image = imagecreatetruecolor( $params['physicalWidth'],
    +			$params['physicalHeight'] );
    +
    +		// Initialise the destination image to transparent instead of
    +		// the default solid black, to support PNG and GIF transparency nicely
    +		$background = imagecolorallocate( $dst_image, 0, 0, 0 );
    +		imagecolortransparent( $dst_image, $background );
    +		imagealphablending( $dst_image, false );
    +
    +		if ( $colorStyle == 'palette' ) {
    +			// Don't resample for paletted GIF images.
    +			// It may just uglify them, and completely breaks transparency.
    +			imagecopyresized( $dst_image, $src_image,
    +				0, 0, 0, 0,
    +				$params['physicalWidth'], $params['physicalHeight'],
    +				imagesx( $src_image ), imagesy( $src_image ) );
     		} else {
    -			return new ThumbnailImage( $image, $dstUrl, $clientWidth, $clientHeight, $dstPath );
    +			imagecopyresampled( $dst_image, $src_image,
    +				0, 0, 0, 0,
    +				$params['physicalWidth'], $params['physicalHeight'],
    +				imagesx( $src_image ), imagesy( $src_image ) );
     		}
    +
    +		imagesavealpha( $dst_image, true );
    +
    +		call_user_func( $saveType, $dst_image, $params['dstPath'] );
    +		imagedestroy( $dst_image );
    +		imagedestroy( $src_image );
    +
    +		return false; # No error
     	}
     
     	/**
    @@ -267,14 +409,14 @@ class BitmapHandler extends ImageHandler {
     	}
     
     	/**
    -	 * Escape a string for ImageMagick's input filenames. See ExpandFilenames() 
    +	 * Escape a string for ImageMagick's input filenames. See ExpandFilenames()
     	 * and GetPathComponent() in magick/utility.c.
     	 *
     	 * This won't work with an initial ~ or @, so input files should be prefixed
    -	 * with the directory name. 
    +	 * with the directory name.
     	 *
     	 * Glob character unescaping is broken in ImageMagick before 6.6.1-5, but
    -	 * it's broken in a way that doesn't involve trying to convert every file 
    +	 * it's broken in a way that doesn't involve trying to convert every file
     	 * in a directory, so we're better off escaping and waiting for the bugfix
     	 * to filter down to users.
     	 *
    @@ -285,7 +427,7 @@ class BitmapHandler extends ImageHandler {
     		# Die on initial metacharacters (caller should prepend path)
     		$firstChar = substr( $path, 0, 1 );
     		if ( $firstChar === '~' || $firstChar === '@' ) {
    -			throw new MWException( __METHOD__.': cannot escape this path name' );
    +			throw new MWException( __METHOD__ . ': cannot escape this path name' );
     		}
     
     		# Escape glob chars
    @@ -295,7 +437,7 @@ class BitmapHandler extends ImageHandler {
     	}
     
     	/**
    -	 * Escape a string for ImageMagick's output filename. See 
    +	 * Escape a string for ImageMagick's output filename. See
     	 * InterpretImageFilename() in magick/image.c.
     	 */
     	function escapeMagickOutput( $path, $scene = false ) {
    @@ -304,7 +446,7 @@ class BitmapHandler extends ImageHandler {
     	}
     
     	/**
    -	 * Armour a string against ImageMagick's GetPathComponent(). This is a 
    +	 * Armour a string against ImageMagick's GetPathComponent(). This is a
     	 * helper function for escapeMagickInput() and escapeMagickOutput().
     	 *
     	 * @param $path string The file path
    @@ -318,11 +460,11 @@ class BitmapHandler extends ImageHandler {
     				// OK, it's a drive letter
     				// ImageMagick has a similar exception, see IsMagickConflict()
     			} else {
    -				throw new MWException( __METHOD__.': unexpected colon character in path name' );
    +				throw new MWException( __METHOD__ . ': unexpected colon character in path name' );
     			}
     		}
     
    -		# If there are square brackets, add a do-nothing scene specification 
    +		# If there are square brackets, add a do-nothing scene specification
     		# to force a literal interpretation
     		if ( $scene === false ) {
     			if ( strpos( $path, '[' ) !== false ) {
    @@ -334,6 +476,33 @@ class BitmapHandler extends ImageHandler {
     		return $path;
     	}
     
    +	/**
    +	 * Retrieve the version of the installed ImageMagick
    +	 * You can use PHPs version_compare() to use this value
    +	 * Value is cached for one hour.
    +	 * @return String representing the IM version.
    +	 */
    +	protected function getMagickVersion() {
    +		global $wgMemc;
    +
    +		$cache = $wgMemc->get( "imagemagick-version" );
    +		if ( !$cache ) {
    +			global $wgImageMagickConvertCommand;
    +			$cmd = wfEscapeShellArg( $wgImageMagickConvertCommand ) . ' -version';
    +			wfDebug( __METHOD__ . ": Running convert -version\n" );
    +			$retval = '';
    +			$return = wfShellExec( $cmd, $retval );
    +			$x = preg_match( '/Version: ImageMagick ([0-9]*\.[0-9]*\.[0-9]*)/', $return, $matches );
    +			if ( $x != 1 ) {
    +				wfDebug( __METHOD__ . ": ImageMagick version check failed\n" );
    +				return null;
    +			}
    +			$wgMemc->set( "imagemagick-version", $matches[1], 3600 );
    +			return $matches[1];
    +		}
    +		return $cache;
    +	}
    +
     	static function imageJpegWrapper( $dst_image, $thumbPath ) {
     		imageinterlace( $dst_image );
     		imagejpeg( $dst_image, $thumbPath, 95 );
    @@ -342,7 +511,7 @@ class BitmapHandler extends ImageHandler {
     
     	function getMetadata( $image, $filename ) {
     		global $wgShowEXIF;
    -		if( $wgShowEXIF && file_exists( $filename ) ) {
    +		if ( $wgShowEXIF && file_exists( $filename ) ) {
     			$exif = new Exif( $filename );
     			$data = $exif->getFilteredData();
     			if ( $data ) {
    @@ -370,12 +539,14 @@ class BitmapHandler extends ImageHandler {
     			# Special value indicating that there is no EXIF data in the file
     			return true;
     		}
    -		$exif = @unserialize( $metadata );
    +		wfSuppressWarnings();
    +		$exif = unserialize( $metadata );
    +		wfRestoreWarnings();
     		if ( !isset( $exif['MEDIAWIKI_EXIF_VERSION'] ) ||
     			$exif['MEDIAWIKI_EXIF_VERSION'] != Exif::version() )
     		{
     			# Wrong version
    -			wfDebug( __METHOD__.": wrong version\n" );
    +			wfDebug( __METHOD__ . ": wrong version\n" );
     			return false;
     		}
     		return true;
    @@ -391,9 +562,9 @@ class BitmapHandler extends ImageHandler {
     	function visibleMetadataFields() {
     		$fields = array();
     		$lines = explode( "\n", wfMsgForContent( 'metadata-fields' ) );
    -		foreach( $lines as $line ) {
    +		foreach ( $lines as $line ) {
     			$matches = array();
    -			if( preg_match( '/^\\*\s*(.*?)\s*$/', $line, $matches ) ) {
    +			if ( preg_match( '/^\\*\s*(.*?)\s*$/', $line, $matches ) ) {
     				$fields[] = $matches[1];
     			}
     		}
    diff --git a/includes/media/Bitmap_ClientOnly.php b/includes/media/Bitmap_ClientOnly.php
    index 9801f9be..9f6f7b33 100644
    --- a/includes/media/Bitmap_ClientOnly.php
    +++ b/includes/media/Bitmap_ClientOnly.php
    @@ -1,5 +1,19 @@
      ' . wfEscapeShellArg($dstPath) . ') 2>&1';
     		wfProfileIn( 'ddjvu' );
     		wfDebug( __METHOD__.": $cmd\n" );
    +		$retval = '';
     		$err = wfShellExec( $cmd, $retval );
     		wfProfileOut( 'ddjvu' );
     
    @@ -181,7 +186,7 @@ class DjVuHandler extends ImageHandler {
     		return $this->getDjVuImage( $image, $path )->getImageSize();
     	}
     
    -	function getThumbType( $ext, $mime ) {
    +	function getThumbType( $ext, $mime, $params = null ) {
     		global $wgDjvuOutputExtension;
     		static $mime;
     		if ( !isset( $mime ) ) {
    diff --git a/includes/media/GIF.php b/includes/media/GIF.php
    index dbe5f813..c4ede331 100644
    --- a/includes/media/GIF.php
    +++ b/includes/media/GIF.php
    @@ -1,5 +1,7 @@
     parsedGIFMetadata) ) {
    +		if ( !isset( $image->parsedGIFMetadata ) ) {
     			try {
     				$image->parsedGIFMetadata = GIFMetadataExtractor::getMetadata( $filename );
     			} catch( Exception $e ) {
    @@ -22,7 +24,7 @@ class GIFHandler extends BitmapHandler {
     			}
     		}
     
    -		return serialize($image->parsedGIFMetadata);
    +		return serialize( $image->parsedGIFMetadata );
     
     	}
     	
    @@ -39,22 +41,41 @@ class GIFHandler extends BitmapHandler {
     			return $width * $height;
     		}
     	}
    +
    +	function isAnimatedImage( $image ) {
    +		$ser = $image->getMetadata();
    +		if ($ser) {
    +			$metadata = unserialize($ser);
    +			if( $metadata['frameCount'] > 1 ) return true;
    +		}
    +		return false;
    +	}
     	
     	function getMetadataType( $image ) {
     		return 'parsed-gif';
     	}
     	
    +	function isMetadataValid( $image, $metadata ) {
    +		wfSuppressWarnings();
    +		$data = unserialize( $metadata );
    +		wfRestoreWarnings();
    +		return (boolean) $data;
    +	}
    +
     	function getLongDesc( $image ) {
    -		global $wgUser, $wgLang;
    -		$sk = $wgUser->getSkin();
    -		
    -		$metadata = @unserialize($image->getMetadata());
    +		global $wgLang;
    +
    +		$original = parent::getLongDesc( $image );
    +
    +		wfSuppressWarnings();
    +		$metadata = unserialize($image->getMetadata());
    +		wfRestoreWarnings();
     		
    -		if (!$metadata) return parent::getLongDesc( $image );
    +		if (!$metadata || $metadata['frameCount'] <=  1)
    +			return $original;
     		
     		$info = array();
    -		$info[] = $image->getMimeType();
    -		$info[] = $sk->formatSize( $image->getSize() );
    +		$info[] = $original;
     		
     		if ($metadata['looped'])
     			$info[] = wfMsgExt( 'file-info-gif-looped', 'parseinline' );
    @@ -65,8 +86,6 @@ class GIFHandler extends BitmapHandler {
     		if ($metadata['duration'])
     			$info[] = $wgLang->formatTimePeriod( $metadata['duration'] );
     		
    -		$infoString = $wgLang->commaList( $info );
    -		
    -		return "($infoString)";
    +		return $wgLang->commaList( $info );
     	}
     }
    diff --git a/includes/media/GIFMetadataExtractor.php b/includes/media/GIFMetadataExtractor.php
    index fac9012b..bc1a4804 100644
    --- a/includes/media/GIFMetadataExtractor.php
    +++ b/includes/media/GIFMetadataExtractor.php
    @@ -1,12 +1,21 @@
     formatNum( $file->getSize() ) ) . ')';
    +		$nbytes = wfMsgExt( 'nbytes', array( 'parsemag', 'escape' ),
    +			$wgLang->formatNum( $file->getSize() ) );
     		return "$nbytes";
     	}
     
    @@ -250,8 +256,8 @@ abstract class MediaHandler {
     	
     	static function getGeneralShortDesc( $file ) {
     		global $wgLang;
    -		$nbytes = '(' . wfMsgExt( 'nbytes', array( 'parsemag', 'escape' ),
    -			$wgLang->formatNum( $file->getSize() ) ) . ')';
    +		$nbytes = wfMsgExt( 'nbytes', array( 'parsemag', 'escape' ),
    +			$wgLang->formatNum( $file->getSize() ) );
     		return "$nbytes";
     	}
     
    @@ -272,6 +278,20 @@ abstract class MediaHandler {
     	 */
     	function parserTransformHook( $parser, $file ) {}
     
    +	/**
    +	 * File validation hook called on upload.
    +	 *
    +	 * If the file at the given local path is not valid, or its MIME type does not 
    +	 * match the handler class, a Status object should be returned containing
    +	 * relevant errors.
    +	 * 
    +	 * @param $fileName The local path to the file.
    +	 * @return Status object
    +	 */
    +	function verifyUpload( $fileName ) {
    +		return Status::newGood();
    +	}
    +
     	/**
     	 * Check for zero-sized thumbnails. These can be generated when
     	 * no disk space is available or some other error occurs
    @@ -357,9 +377,19 @@ abstract class ImageHandler extends MediaHandler {
     		if ( !isset( $params['width'] ) ) {
     			return false;
     		}
    +
     		if ( !isset( $params['page'] ) ) {
     			$params['page'] = 1;
    +		} else  {
    +			if ( $params['page'] > $image->pageCount() ) {
    +				$params['page'] = $image->pageCount();
    +			}
    +
    +			if ( $params['page'] < 1 ) {
    +				$params['page'] = 1;
    +			}
     		}
    +
     		$srcWidth = $image->getWidth( $params['page'] );
     		$srcHeight = $image->getHeight( $params['page'] );
     		if ( isset( $params['height'] ) && $params['height'] != -1 ) {
    @@ -386,6 +416,9 @@ abstract class ImageHandler extends MediaHandler {
     	 *
     	 * @param $width Integer: specified width (input/output)
     	 * @param $height Integer: height (output only)
    +	 * @param $srcWidth Integer: width of the source image
    +	 * @param $srcHeight Integer: height of the source image
    +	 * @param $mimeType Unused
     	 * @return false to indicate that an error should be returned to the user.
     	 */
     	function validateThumbParams( &$width, &$height, $srcWidth, $srcHeight, $mimeType ) {
    @@ -424,6 +457,10 @@ abstract class ImageHandler extends MediaHandler {
     		return $gis;
     	}
     
    +	function isAnimatedImage( $image ) {
    +		return false;
    +	}
    +
     	function getShortDesc( $file ) {
     		global $wgLang;
     		$nbytes = wfMsgExt( 'nbytes', array( 'parsemag', 'escape' ),
    diff --git a/includes/media/MediaTransformOutput.php b/includes/media/MediaTransformOutput.php
    new file mode 100644
    index 00000000..c441f06c
    --- /dev/null
    +++ b/includes/media/MediaTransformOutput.php
    @@ -0,0 +1,255 @@
    +width;
    +	}
    +
    +	/**
    +	 * Get the height of the output box
    +	 */
    +	function getHeight() {
    +		return $this->height;
    +	}
    +
    +	/**
    +	 * @return string The thumbnail URL
    +	 */
    +	function getUrl() {
    +		return $this->url;
    +	}
    +
    +	/**
    +	 * @return String: destination file path (local filesystem)
    +	 */
    +	function getPath() {
    +		return $this->path;
    +	}
    +
    +	/**
    +	 * Fetch HTML for this transform output
    +	 *
    +	 * @param $options Associative array of options. Boolean options
    +	 *     should be indicated with a value of true for true, and false or
    +	 *     absent for false.
    +	 *
    +	 *     alt          Alternate text or caption
    +	 *     desc-link    Boolean, show a description link
    +	 *     file-link    Boolean, show a file download link
    +	 *     custom-url-link    Custom URL to link to
    +	 *     custom-title-link  Custom Title object to link to
    +	 *     valign       vertical-align property, if the output is an inline element
    +	 *     img-class    Class applied to the  tag, if there is such a tag
    +	 *
    +	 * For images, desc-link and file-link are implemented as a click-through. For
    +	 * sounds and videos, they may be displayed in other ways.
    +	 *
    +	 * @return string
    +	 */
    +	abstract function toHtml( $options = array() );
    +
    +	/**
    +	 * This will be overridden to return true in error classes
    +	 */
    +	function isError() {
    +		return false;
    +	}
    +
    +	/**
    +	 * Wrap some XHTML text in an anchor tag with the given attributes
    +	 */
    +	protected function linkWrap( $linkAttribs, $contents ) {
    +		if ( $linkAttribs ) {
    +			return Xml::tags( 'a', $linkAttribs, $contents );
    +		} else {
    +			return $contents;
    +		}
    +	}
    +
    +	function getDescLinkAttribs( $title = null, $params = '' ) {
    +		$query = $this->page ? ( 'page=' . urlencode( $this->page ) ) : '';
    +		if( $params ) {
    +			$query .= $query ? '&'.$params : $params;
    +		}
    +		$attribs = array(
    +			'href' => $this->file->getTitle()->getLocalURL( $query ),
    +			'class' => 'image',
    +		);
    +		if ( $title ) {
    +			$attribs['title'] = $title;
    +		}
    +		return $attribs;
    +	}
    +}
    +
    +
    +/**
    + * Media transform output for images
    + *
    + * @ingroup Media
    + */
    +class ThumbnailImage extends MediaTransformOutput {
    +
    +	/**
    +	 * @param $file File object
    +	 * @param $url String: URL path to the thumb
    +	 * @param $width Integer: file's width
    +	 * @param $height Integer: file's height
    +	 * @param $path String: filesystem path to the thumb
    +	 * @param $page Integer: page number, for multipage files
    +	 * @private
    +	 */
    +	function __construct( $file, $url, $width, $height, $path = false, $page = false ) {
    +		$this->file = $file;
    +		$this->url = $url;
    +		# These should be integers when they get here.
    +		# If not, there's a bug somewhere.  But let's at
    +		# least produce valid HTML code regardless.
    +		$this->width = round( $width );
    +		$this->height = round( $height );
    +		$this->path = $path;
    +		$this->page = $page;
    +	}
    +
    +	/**
    +	 * Return HTML  tag for the thumbnail, will include
    +	 * width and height attributes and a blank alt text (as required).
    +	 *
    +	 * @param $options Associative array of options. Boolean options
    +	 *     should be indicated with a value of true for true, and false or
    +	 *     absent for false.
    +	 *
    +	 *     alt          HTML alt attribute
    +	 *     title        HTML title attribute
    +	 *     desc-link    Boolean, show a description link
    +	 *     file-link    Boolean, show a file download link
    +	 *     valign       vertical-align property, if the output is an inline element
    +	 *     img-class    Class applied to the \ tag, if there is such a tag
    +	 *     desc-query   String, description link query params
    +	 *     custom-url-link    Custom URL to link to
    +	 *     custom-title-link  Custom Title object to link to
    +	 *     custom target-link Value of the target attribute, for custom-target-link
    +	 *
    +	 * For images, desc-link and file-link are implemented as a click-through. For
    +	 * sounds and videos, they may be displayed in other ways.
    +	 *
    +	 * @return string
    +	 */
    +	function toHtml( $options = array() ) {
    +		if ( count( func_get_args() ) == 2 ) {
    +			throw new MWException( __METHOD__ .' called in the old style' );
    +		}
    +
    +		$alt = empty( $options['alt'] ) ? '' : $options['alt'];
    +
    +		$query = empty( $options['desc-query'] )  ? '' : $options['desc-query'];
    +
    +		if ( !empty( $options['custom-url-link'] ) ) {
    +			$linkAttribs = array( 'href' => $options['custom-url-link'] );
    +			if ( !empty( $options['title'] ) ) {
    +				$linkAttribs['title'] = $options['title'];
    +			}
    +			if ( !empty( $options['custom-target-link'] ) ) {
    +				$linkAttribs['target'] = $options['custom-target-link'];
    +			}
    +		} elseif ( !empty( $options['custom-title-link'] ) ) {
    +			$title = $options['custom-title-link'];
    +			$linkAttribs = array(
    +				'href' => $title->getLinkUrl(),
    +				'title' => empty( $options['title'] ) ? $title->getFullText() : $options['title']
    +			);
    +		} elseif ( !empty( $options['desc-link'] ) ) {
    +			$linkAttribs = $this->getDescLinkAttribs( empty( $options['title'] ) ? null : $options['title'], $query );
    +		} elseif ( !empty( $options['file-link'] ) ) {
    +			$linkAttribs = array( 'href' => $this->file->getURL() );
    +		} else {
    +			$linkAttribs = false;
    +		}
    +
    +		$attribs = array(
    +			'alt' => $alt,
    +			'src' => $this->url,
    +			'width' => $this->width,
    +			'height' => $this->height,
    +		);
    +		if ( !empty( $options['valign'] ) ) {
    +			$attribs['style'] = "vertical-align: {$options['valign']}";
    +		}
    +		if ( !empty( $options['img-class'] ) ) {
    +			$attribs['class'] = $options['img-class'];
    +		}
    +		return $this->linkWrap( $linkAttribs, Xml::element( 'img', $attribs ) );
    +	}
    +
    +}
    +
    +/**
    + * Basic media transform error class
    + *
    + * @ingroup Media
    + */
    +class MediaTransformError extends MediaTransformOutput {
    +	var $htmlMsg, $textMsg, $width, $height, $url, $path;
    +
    +	function __construct( $msg, $width, $height /*, ... */ ) {
    +		$args = array_slice( func_get_args(), 3 );
    +		$htmlArgs = array_map( 'htmlspecialchars', $args );
    +		$htmlArgs = array_map( 'nl2br', $htmlArgs );
    +
    +		$this->htmlMsg = wfMsgReplaceArgs( htmlspecialchars( wfMsgGetKey( $msg, true ) ), $htmlArgs );
    +		$this->textMsg = wfMsgReal( $msg, $args );
    +		$this->width = intval( $width );
    +		$this->height = intval( $height );
    +		$this->url = false;
    +		$this->path = false;
    +	}
    +
    +	function toHtml( $options = array() ) {
    +		return "
    width}px; height: {$this->height}px; display:inline-block;\">" . + $this->htmlMsg . + "
    "; + } + + function toText() { + return $this->textMsg; + } + + function getHtmlMsg() { + return $this->htmlMsg; + } + + function isError() { + return true; + } +} + +/** + * Shortcut class for parameter validation errors + * + * @ingroup Media + */ +class TransformParameterError extends MediaTransformError { + function __construct( $params ) { + parent::__construct( 'thumbnail_error', + max( isset( $params['width'] ) ? $params['width'] : 0, 120 ), + max( isset( $params['height'] ) ? $params['height'] : 0, 120 ), + wfMsg( 'thumbnail_invalid_params' ) ); + } +} diff --git a/includes/media/PNG.php b/includes/media/PNG.php new file mode 100644 index 00000000..5197282c --- /dev/null +++ b/includes/media/PNG.php @@ -0,0 +1,82 @@ +parsedPNGMetadata) ) { + try { + $image->parsedPNGMetadata = PNGMetadataExtractor::getMetadata( $filename ); + } catch( Exception $e ) { + // Broken file? + wfDebug( __METHOD__ . ': ' . $e->getMessage() . "\n" ); + return '0'; + } + } + + return serialize($image->parsedPNGMetadata); + + } + + function formatMetadata( $image ) { + return false; + } + + function isAnimatedImage( $image ) { + $ser = $image->getMetadata(); + if ($ser) { + $metadata = unserialize($ser); + if( $metadata['frameCount'] > 1 ) return true; + } + return false; + } + + function getMetadataType( $image ) { + return 'parsed-png'; + } + + function isMetadataValid( $image, $metadata ) { + wfSuppressWarnings(); + $data = unserialize( $metadata ); + wfRestoreWarnings(); + return (boolean) $data; + } + function getLongDesc( $image ) { + global $wgLang; + $original = parent::getLongDesc( $image ); + + wfSuppressWarnings(); + $metadata = unserialize($image->getMetadata()); + wfRestoreWarnings(); + + if( !$metadata || $metadata['frameCount'] <= 0 ) + return $original; + + $info = array(); + $info[] = $original; + + if ($metadata['loopCount'] == 0) + $info[] = wfMsgExt( 'file-info-png-looped', 'parseinline' ); + elseif ($metadata['loopCount'] > 1) + $info[] = wfMsgExt( 'file-info-png-repeat', 'parseinline', $metadata['loopCount'] ); + + if ($metadata['frameCount'] > 0) + $info[] = wfMsgExt( 'file-info-png-frames', 'parseinline', $metadata['frameCount'] ); + + if ($metadata['duration']) + $info[] = $wgLang->formatTimePeriod( $metadata['duration'] ); + + return $wgLang->commaList( $info ); + } + +} diff --git a/includes/media/PNGMetadataExtractor.php b/includes/media/PNGMetadataExtractor.php new file mode 100644 index 00000000..6a931e6c --- /dev/null +++ b/includes/media/PNGMetadataExtractor.php @@ -0,0 +1,104 @@ + 1 ) { + $duration *= $loopCount; + } + + return array( + 'frameCount' => $frameCount, + 'loopCount' => $loopCount, + 'duration' => $duration + ); + + } +} diff --git a/includes/media/SVG.php b/includes/media/SVG.php index 4cc66fb1..9a8484f1 100644 --- a/includes/media/SVG.php +++ b/includes/media/SVG.php @@ -1,13 +1,19 @@ getMetadata(); + if ( $metadata ) { + $metadata = $this->unpackMetadata( $metadata ); + if( isset( $metadata['animated'] ) ) { + return $metadata['animated']; + } + } + return false; + } + function normaliseParams( $image, &$params ) { global $wgSVGMaxSize; if ( !parent::normaliseParams( $image, $params ) ) { @@ -57,7 +79,7 @@ class SvgHandler extends ImageHandler { return new MediaTransformError( 'thumbnail_error', $clientWidth, $clientHeight, wfMsg( 'thumbnail_dest_directory' ) ); } - + $status = $this->rasterize( $srcPath, $dstPath, $physicalWidth, $physicalHeight ); if( $status === true ) { return new ThumbnailImage( $image, $dstUrl, $clientWidth, $clientHeight, $dstPath ); @@ -65,7 +87,7 @@ class SvgHandler extends ImageHandler { return $status; // MediaTransformError } } - + /* * Transform an SVG file to PNG * This function can be called outside of thumbnail contexts @@ -78,6 +100,7 @@ class SvgHandler extends ImageHandler { public function rasterize( $srcPath, $dstPath, $width, $height ) { global $wgSVGConverters, $wgSVGConverter, $wgSVGConverterPath; $err = false; + $retval = ''; if ( isset( $wgSVGConverters[$wgSVGConverter] ) ) { $cmd = str_replace( array( '$path/', '$width', '$height', '$input', '$output' ), @@ -102,11 +125,19 @@ class SvgHandler extends ImageHandler { return true; } - function getImageSize( $image, $path ) { - return wfGetSVGsize( $path ); + function getImageSize( $file, $path, $metadata = false ) { + if ( $metadata === false ) { + $metadata = $file->getMetaData(); + } + $metadata = $this->unpackMetaData( $metadata ); + + if ( isset( $metadata['width'] ) && isset( $metadata['height'] ) ) { + return array( $metadata['width'], $metadata['height'], 'SVG', + "width=\"{$metadata['width']}\" height=\"{$metadata['height']}\"" ); + } } - function getThumbType( $ext, $mime ) { + function getThumbType( $ext, $mime, $params = null ) { return array( 'png', 'image/png' ); } @@ -117,4 +148,84 @@ class SvgHandler extends ImageHandler { $wgLang->formatNum( $file->getHeight() ), $wgLang->formatSize( $file->getSize() ) ); } + + function getMetadata( $file, $filename ) { + try { + $metadata = SVGMetadataExtractor::getMetadata( $filename ); + } catch( Exception $e ) { + // Broken file? + wfDebug( __METHOD__ . ': ' . $e->getMessage() . "\n" ); + return '0'; + } + $metadata['version'] = self::SVG_METADATA_VERSION; + return serialize( $metadata ); + } + + function unpackMetadata( $metadata ) { + $unser = @unserialize( $metadata ); + if ( isset( $unser['version'] ) && $unser['version'] == self::SVG_METADATA_VERSION ) { + return $unser; + } else { + return false; + } + } + + function getMetadataType( $image ) { + return 'parsed-svg'; + } + + function isMetadataValid( $image, $metadata ) { + return $this->unpackMetadata( $metadata ) !== false; + } + + function visibleMetadataFields() { + $fields = array( 'title', 'description', 'animated' ); + return $fields; + } + + function formatMetadata( $file ) { + $result = array( + 'visible' => array(), + 'collapsed' => array() + ); + $metadata = $file->getMetadata(); + if ( !$metadata ) { + return false; + } + $metadata = $this->unpackMetadata( $metadata ); + if ( !$metadata ) { + return false; + } + unset( $metadata['version'] ); + unset( $metadata['metadata'] ); /* non-formatted XML */ + + /* TODO: add a formatter + $format = new FormatSVG( $metadata ); + $formatted = $format->getFormattedData(); + */ + + // Sort fields into visible and collapsed + $visibleFields = $this->visibleMetadataFields(); + + // Rename fields to be compatible with exif, so that + // the labels for these fields work. + $conversion = array( 'width' => 'imagewidth', + 'height' => 'imagelength', + 'description' => 'imagedescription', + 'title' => 'objectname', + ); + foreach ( $metadata as $name => $value ) { + $tag = strtolower( $name ); + if ( isset( $conversion[$tag] ) ) { + $tag = $conversion[$tag]; + } + self::addMeta( $result, + in_array( $tag, $visibleFields ) ? 'visible' : 'collapsed', + 'exif', + $tag, + $value + ); + } + return $result; + } } diff --git a/includes/media/SVGMetadataExtractor.php b/includes/media/SVGMetadataExtractor.php new file mode 100644 index 00000000..66ae1edf --- /dev/null +++ b/includes/media/SVGMetadataExtractor.php @@ -0,0 +1,313 @@ + + * @author Brion Vibber + * @copyright Copyright © 2010-2010 Brion Vibber, Derk-Jan Hartman + * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License + */ + +class SVGMetadataExtractor { + static function getMetadata( $filename ) { + $svg = new SVGReader( $filename ); + return $svg->getMetadata(); + } +} + +class SVGReader { + const DEFAULT_WIDTH = 512; + const DEFAULT_HEIGHT = 512; + const NS_SVG = 'http://www.w3.org/2000/svg'; + + private $reader = null; + private $mDebug = false; + private $metadata = Array(); + + /** + * Constructor + * + * Creates an SVGReader drawing from the source provided + * @param $source String: URI from which to read + */ + function __construct( $source ) { + global $wgSVGMetadataCutoff; + $this->reader = new XMLReader(); + + // Don't use $file->getSize() since file object passed to SVGHandler::getMetadata is bogus. + $size = filesize( $source ); + if ( $size === false ) { + throw new MWException( "Error getting filesize of SVG." ); + } + + if ( $size > $wgSVGMetadataCutoff ) { + $this->debug( "SVG is $size bytes, which is bigger than $wgSVGMetadataCutoff. Truncating." ); + $contents = file_get_contents( $source, false, null, -1, $wgSVGMetadataCutoff ); + if ($contents === false) { + throw new MWException( 'Error reading SVG file.' ); + } + $this->reader->XML( $contents, null, LIBXML_NOERROR | LIBXML_NOWARNING ); + } else { + $this->reader->open( $source, null, LIBXML_NOERROR | LIBXML_NOWARNING ); + } + + $this->metadata['width'] = self::DEFAULT_WIDTH; + $this->metadata['height'] = self::DEFAULT_HEIGHT; + + // Because we cut off the end of the svg making an invalid one. Complicated + // try catch thing to make sure warnings get restored. Seems like there should + // be a better way. + wfSuppressWarnings(); + try { + $this->read(); + } catch( Exception $e ) { + wfRestoreWarnings(); + throw $e; + } + wfRestoreWarnings(); + } + + /* + * @return Array with the known metadata + */ + public function getMetadata() { + return $this->metadata; + } + + /* + * Read the SVG + */ + public function read() { + $keepReading = $this->reader->read(); + + /* Skip until first element */ + while( $keepReading && $this->reader->nodeType != XmlReader::ELEMENT ) { + $keepReading = $this->reader->read(); + } + + if ( $this->reader->localName != 'svg' || $this->reader->namespaceURI != self::NS_SVG ) { + throw new MWException( "Expected tag, got ". + $this->reader->localName . " in NS " . $this->reader->namespaceURI ); + } + $this->debug( " tag is correct." ); + $this->handleSVGAttribs(); + + $exitDepth = $this->reader->depth; + $keepReading = $this->reader->read(); + while ( $keepReading ) { + $tag = $this->reader->localName; + $type = $this->reader->nodeType; + $isSVG = ($this->reader->namespaceURI == self::NS_SVG); + + $this->debug( "$tag" ); + + if ( $isSVG && $tag == 'svg' && $type == XmlReader::END_ELEMENT && $this->reader->depth <= $exitDepth ) { + break; + } elseif ( $isSVG && $tag == 'title' ) { + $this->readField( $tag, 'title' ); + } elseif ( $isSVG && $tag == 'desc' ) { + $this->readField( $tag, 'description' ); + } elseif ( $isSVG && $tag == 'metadata' && $type == XmlReader::ELEMENT ) { + $this->readXml( $tag, 'metadata' ); + } elseif ( $tag !== '#text' ) { + $this->debug( "Unhandled top-level XML tag $tag" ); + + if ( !isset( $this->metadata['animated'] ) ) { + // Recurse into children of current tag, looking for animation. + $this->animateFilter( $tag ); + } + } + + // Goto next element, which is sibling of current (Skip children). + $keepReading = $this->reader->next(); + } + + return true; + } + + /* + * Read a textelement from an element + * + * @param String $name of the element that we are reading from + * @param String $metafield that we will fill with the result + */ + private function readField( $name, $metafield=null ) { + $this->debug ( "Read field $metafield" ); + if( !$metafield || $this->reader->nodeType != XmlReader::ELEMENT ) { + return; + } + $keepReading = $this->reader->read(); + while( $keepReading ) { + if( $this->reader->localName == $name && $this->namespaceURI == self::NS_SVG && $this->reader->nodeType == XmlReader::END_ELEMENT ) { + break; + } elseif( $this->reader->nodeType == XmlReader::TEXT ){ + $this->metadata[$metafield] = trim( $this->reader->value ); + } + $keepReading = $this->reader->read(); + } + } + + /* + * Read an XML snippet from an element + * + * @param String $metafield that we will fill with the result + */ + private function readXml( $metafield=null ) { + $this->debug ( "Read top level metadata" ); + if( !$metafield || $this->reader->nodeType != XmlReader::ELEMENT ) { + return; + } + // TODO: find and store type of xml snippet. metadata['metadataType'] = "rdf" + $this->metadata[$metafield] = trim( $this->reader->readInnerXML() ); + $this->reader->next(); + } + + /* + * Filter all children, looking for animate elements + * + * @param String $name of the element that we are reading from + */ + private function animateFilter( $name ) { + $this->debug ( "animate filter" ); + if( $this->reader->nodeType != XmlReader::ELEMENT ) { + return; + } + $exitDepth = $this->reader->depth; + $keepReading = $this->reader->read(); + while( $keepReading ) { + if( $this->reader->localName == $name && $this->reader->depth <= $exitDepth + && $this->reader->nodeType == XmlReader::END_ELEMENT ) { + break; + } elseif ( $this->reader->namespaceURI == self::NS_SVG && $this->reader->nodeType == XmlReader::ELEMENT ) { + switch( $this->reader->localName ) { + case 'animate': + case 'set': + case 'animateMotion': + case 'animateColor': + case 'animateTransform': + $this->debug( "HOUSTON WE HAVE ANIMATION" ); + $this->metadata['animated'] = true; + break; + } + } + $keepReading = $this->reader->read(); + } + } + + private function throwXmlError( $err ) { + $this->debug( "FAILURE: $err" ); + wfDebug( "SVGReader XML error: $err\n" ); + } + + private function debug( $data ) { + if( $this->mDebug ) { + wfDebug( "SVGReader: $data\n" ); + } + } + + private function warn( $data ) { + wfDebug( "SVGReader: $data\n" ); + } + + private function notice( $data ) { + wfDebug( "SVGReader WARN: $data\n" ); + } + + /* + * Parse the attributes of an SVG element + * + * The parser has to be in the start element of + */ + private function handleSVGAttribs( ) { + $defaultWidth = self::DEFAULT_WIDTH; + $defaultHeight = self::DEFAULT_HEIGHT; + $aspect = 1.0; + $width = null; + $height = null; + + if( $this->reader->getAttribute('viewBox') ) { + // min-x min-y width height + $viewBox = preg_split( '/\s+/', trim( $this->reader->getAttribute('viewBox') ) ); + if( count( $viewBox ) == 4 ) { + $viewWidth = $this->scaleSVGUnit( $viewBox[2] ); + $viewHeight = $this->scaleSVGUnit( $viewBox[3] ); + if( $viewWidth > 0 && $viewHeight > 0 ) { + $aspect = $viewWidth / $viewHeight; + $defaultHeight = $defaultWidth / $aspect; + } + } + } + if( $this->reader->getAttribute('width') ) { + $width = $this->scaleSVGUnit( $this->reader->getAttribute('width'), $defaultWidth ); + } + if( $this->reader->getAttribute('height') ) { + $height = $this->scaleSVGUnit( $this->reader->getAttribute('height'), $defaultHeight ); + } + + if( !isset( $width ) && !isset( $height ) ) { + $width = $defaultWidth; + $height = $width / $aspect; + } elseif( isset( $width ) && !isset( $height ) ) { + $height = $width / $aspect; + } elseif( isset( $height ) && !isset( $width ) ) { + $width = $height * $aspect; + } + + if( $width > 0 && $height > 0 ) { + $this->metadata['width'] = intval( round( $width ) ); + $this->metadata['height'] = intval( round( $height ) ); + } + } + + /** + * Return a rounded pixel equivalent for a labeled CSS/SVG length. + * http://www.w3.org/TR/SVG11/coords.html#UnitIdentifiers + * + * @param $length String: CSS/SVG length. + * @param $viewportSize: Float optional scale for percentage units... + * @return float: length in pixels + */ + static function scaleSVGUnit( $length, $viewportSize=512 ) { + static $unitLength = array( + 'px' => 1.0, + 'pt' => 1.25, + 'pc' => 15.0, + 'mm' => 3.543307, + 'cm' => 35.43307, + 'in' => 90.0, + 'em' => 16.0, // fake it? + 'ex' => 12.0, // fake it? + '' => 1.0, // "User units" pixels by default + ); + $matches = array(); + if( preg_match( '/^\s*(\d+(?:\.\d+)?)(em|ex|px|pt|pc|cm|mm|in|%|)\s*$/', $length, $matches ) ) { + $length = floatval( $matches[1] ); + $unit = $matches[2]; + if( $unit == '%' ) { + return $length * 0.01 * $viewportSize; + } else { + return $length * $unitLength[$unit]; + } + } else { + // Assume pixels + return floatval( $length ); + } + } +} diff --git a/includes/media/Tiff.php b/includes/media/Tiff.php index 9d3fbb78..8773201f 100644 --- a/includes/media/Tiff.php +++ b/includes/media/Tiff.php @@ -1,10 +1,14 @@ | -// | All rights reserved. | -// | | -// | Redistribution and use in source and binary forms, with or without | -// | modification, are permitted provided that the following conditions | -// | are met: | -// | | -// | 1. Redistributions of source code must retain the above copyright | -// | notice, this list of conditions and the following disclaimer. | -// | 2. Redistributions in binary form must reproduce the above copyright | -// | notice, this list of conditions and the following disclaimer in the | -// | documentation and/or other materials provided with the distribution. | -// | | -// | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR | -// | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | -// | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | -// | IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | -// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | -// | NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | -// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | -// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | -// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | -// | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | -// +---------------------------------------------------------------------------+ -// | Author: Ryan T. Dean | -// | Heavily influenced by the Perl memcached client by Brad Fitzpatrick. | -// | Permission granted by Brad Fitzpatrick for relicense of ported Perl | -// | client logic under 2-clause BSD license. | -// +---------------------------------------------------------------------------+ -// -// $TCAnet$ -// +/** + * +---------------------------------------------------------------------------+ + * | memcached client, PHP | + * +---------------------------------------------------------------------------+ + * | Copyright (c) 2003 Ryan T. Dean | + * | All rights reserved. | + * | | + * | Redistribution and use in source and binary forms, with or without | + * | modification, are permitted provided that the following conditions | + * | are met: | + * | | + * | 1. Redistributions of source code must retain the above copyright | + * | notice, this list of conditions and the following disclaimer. | + * | 2. Redistributions in binary form must reproduce the above copyright | + * | notice, this list of conditions and the following disclaimer in the | + * | documentation and/or other materials provided with the distribution. | + * | | + * | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR | + * | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | + * | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | + * | IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | + * | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | + * | NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | + * | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | + * | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | + * | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | + * | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | + * +---------------------------------------------------------------------------+ + * | Author: Ryan T. Dean | + * | Heavily influenced by the Perl memcached client by Brad Fitzpatrick. | + * | Permission granted by Brad Fitzpatrick for relicense of ported Perl | + * | client logic under 2-clause BSD license. | + * +---------------------------------------------------------------------------+ + * + * @file + * $TCAnet$ + */ /** * This is the PHP client for memcached - a distributed memory cache daemon. @@ -239,17 +240,17 @@ class MWMemcached { /** * Memcache initializer * - * @param array $args Associative array of settings + * @param $args Array Associative array of settings * * @return mixed */ public function __construct( $args ) { global $wgMemCachedTimeout; - $this->set_servers( @$args['servers'] ); - $this->_debug = @$args['debug']; + $this->set_servers( isset( $args['servers'] ) ? $args['servers'] : array() ); + $this->_debug = isset( $args['debug'] ) ? $args['debug'] : false; $this->stats = array(); - $this->_compress_threshold = @$args['compress_threshold']; - $this->_persistant = array_key_exists( 'persistant', $args ) ? ( @$args['persistant'] ) : false; + $this->_compress_threshold = isset( $args['compress_threshold'] ) ? $args['compress_threshold'] : 0; + $this->_persistant = isset( $args['persistant'] ) ? $args['persistant'] : false; $this->_compress_enable = true; $this->_have_zlib = function_exists( 'gzcompress' ); @@ -270,11 +271,15 @@ class MWMemcached { * Adds a key/value to the memcache server if one isn't already set with * that key * - * @param string $key Key to set with data - * @param mixed $val Value to store - * @param integer $exp (optional) Time to expire data at + * @param $key String: key to set with data + * @param $val Mixed: value to store + * @param $exp Integer: (optional) Expiration time. This can be a number of seconds + * to cache for (up to 30 days inclusive). Any timespans of 30 days + 1 second or + * longer must be the timestamp of the time at which the mapping should expire. It + * is safe to use timestamps in all cases, regardless of exipration + * eg: strtotime("+3 hour") * - * @return boolean + * @return Boolean */ public function add( $key, $val, $exp = 0 ) { return $this->_set( 'add', $key, $val, $exp ); @@ -284,12 +289,12 @@ class MWMemcached { // {{{ decr() /** - * Decriment a value stored on the memcache server + * Decrease a value stored on the memcache server * - * @param string $key Key to decriment - * @param integer $amt (optional) Amount to decriment + * @param $key String: key to decrease + * @param $amt Integer: (optional) amount to decrease * - * @return mixed FALSE on failure, value on success + * @return Mixed: FALSE on failure, value on success */ public function decr( $key, $amt = 1 ) { return $this->_incrdecr( 'decr', $key, $amt ); @@ -301,10 +306,10 @@ class MWMemcached { /** * Deletes a key from the server, optionally after $time * - * @param string $key Key to delete - * @param integer $time (optional) How long to wait before deleting + * @param $key String: key to delete + * @param $time Integer: (optional) how long to wait before deleting * - * @return boolean TRUE on success, FALSE on failure + * @return Boolean: TRUE on success, FALSE on failure */ public function delete( $key, $time = 0 ) { if ( !$this->_active ) { @@ -318,7 +323,11 @@ class MWMemcached { $key = is_array( $key ) ? $key[1] : $key; - @$this->stats['delete']++; + if ( isset( $this->stats['delete'] ) ) { + $this->stats['delete']++; + } else { + $this->stats['delete'] = 1; + } $cmd = "delete $key $time\r\n"; if( !$this->_safe_fwrite( $sock, $cmd, strlen( $cmd ) ) ) { $this->_dead_sock( $sock ); @@ -356,7 +365,7 @@ class MWMemcached { /** * Enable / Disable compression * - * @param boolean $enable TRUE to enable, FALSE to disable + * @param $enable Boolean: TRUE to enable, FALSE to disable */ public function enable_compress( $enable ) { $this->_compress_enable = $enable; @@ -378,9 +387,9 @@ class MWMemcached { /** * Retrieves the value associated with the key from the memcache server * - * @param string $key Key to retrieve + * @param $key Mixed: key to retrieve * - * @return mixed + * @return Mixed */ public function get( $key ) { wfProfileIn( __METHOD__ ); @@ -401,7 +410,11 @@ class MWMemcached { return false; } - @$this->stats['get']++; + if ( isset( $this->stats['get'] ) ) { + $this->stats['get']++; + } else { + $this->stats['get'] = 1; + } $cmd = "get $key\r\n"; if ( !$this->_safe_fwrite( $sock, $cmd, strlen( $cmd ) ) ) { @@ -429,16 +442,20 @@ class MWMemcached { /** * Get multiple keys from the server(s) * - * @param array $keys Keys to retrieve + * @param $keys Array: keys to retrieve * - * @return array + * @return Array */ public function get_multi( $keys ) { if ( !$this->_active ) { return false; } - @$this->stats['get_multi']++; + if ( isset( $this->stats['get_multi'] ) ) { + $this->stats['get_multi']++; + } else { + $this->stats['get_multi'] = 1; + } $sock_keys = array(); foreach ( $keys as $key ) { @@ -490,10 +507,12 @@ class MWMemcached { /** * Increments $key (optionally) by $amt * - * @param string $key Key to increment - * @param integer $amt (optional) amount to increment + * @param $key String: key to increment + * @param $amt Integer: (optional) amount to increment * - * @return integer New key value? + * @return Integer: null if the key does not exist yet (this does NOT + * create new mappings if the key does not exist). If the key does + * exist, this returns the new value for that key. */ public function incr( $key, $amt = 1 ) { return $this->_incrdecr( 'incr', $key, $amt ); @@ -505,11 +524,15 @@ class MWMemcached { /** * Overwrites an existing value for key; only works if key is already set * - * @param string $key Key to set value as - * @param mixed $value Value to store - * @param integer $exp (optional) Experiation time + * @param $key String: key to set value as + * @param $value Mixed: value to store + * @param $exp Integer: (optional) Expiration time. This can be a number of seconds + * to cache for (up to 30 days inclusive). Any timespans of 30 days + 1 second or + * longer must be the timestamp of the time at which the mapping should expire. It + * is safe to use timestamps in all cases, regardless of exipration + * eg: strtotime("+3 hour") * - * @return boolean + * @return Boolean */ public function replace( $key, $value, $exp = 0 ) { return $this->_set( 'replace', $key, $value, $exp ); @@ -528,13 +551,12 @@ class MWMemcached { * with a \n. This is with the PHP flag auto_detect_line_endings set * to falase (the default). * - * @param resource $sock Socket to send command on - * @param string $cmd Command to run + * @param $sock Ressource: socket to send command on + * @param $cmd String: command to run * - * @return array Output array - * @access public + * @return Array: output array */ - function run_command( $sock, $cmd ) { + public function run_command( $sock, $cmd ) { if ( !is_resource( $sock ) ) { return array(); } @@ -563,11 +585,15 @@ class MWMemcached { * Unconditionally sets a key to a given value in the memcache. Returns true * if set successfully. * - * @param string $key Key to set value as - * @param mixed $value Value to set - * @param integer $exp (optional) Experiation time + * @param $key String: key to set value as + * @param $value Mixed: value to set + * @param $exp Integer: (optional) Expiration time. This can be a number of seconds + * to cache for (up to 30 days inclusive). Any timespans of 30 days + 1 second or + * longer must be the timestamp of the time at which the mapping should expire. It + * is safe to use timestamps in all cases, regardless of exipration + * eg: strtotime("+3 hour") * - * @return boolean TRUE on success + * @return Boolean: TRUE on success */ public function set( $key, $value, $exp = 0 ) { return $this->_set( 'set', $key, $value, $exp ); @@ -579,7 +605,7 @@ class MWMemcached { /** * Sets the compression threshold * - * @param integer $thresh Threshold to compress if larger than + * @param $thresh Integer: threshold to compress if larger than */ public function set_compress_threshold( $thresh ) { $this->_compress_threshold = $thresh; @@ -591,7 +617,7 @@ class MWMemcached { /** * Sets the debug flag * - * @param boolean $dbg TRUE for debugging, FALSE otherwise + * @param $dbg Boolean: TRUE for debugging, FALSE otherwise * * @see MWMemcached::__construct */ @@ -605,7 +631,7 @@ class MWMemcached { /** * Sets the server list to distribute key gets and puts between * - * @param array $list Array of servers to connect to + * @param $list Array of servers to connect to * * @see MWMemcached::__construct() */ @@ -624,8 +650,8 @@ class MWMemcached { /** * Sets the timeout for new connections * - * @param integer $seconds Number of seconds - * @param integer $microseconds Number of microseconds + * @param $seconds Integer: number of seconds + * @param $microseconds Integer: number of microseconds */ public function set_timeout( $seconds, $microseconds ) { $this->_timeout_seconds = $seconds; @@ -640,7 +666,7 @@ class MWMemcached { /** * Close the specified socket * - * @param string $sock Socket to close + * @param $sock String: socket to close * * @access private */ @@ -656,8 +682,8 @@ class MWMemcached { /** * Connects $sock to $host, timing out after $timeout * - * @param integer $sock Socket to connect - * @param string $host Host:IP to connect to + * @param $sock Integer: socket to connect + * @param $host String: Host:IP to connect to * * @return boolean * @access private @@ -668,11 +694,13 @@ class MWMemcached { $timeout = $this->_connect_timeout; $errno = $errstr = null; for( $i = 0; !$sock && $i < $this->_connect_attempts; $i++ ) { + wfSuppressWarnings(); if ( $this->_persistant == 1 ) { - $sock = @pfsockopen( $ip, $port, $errno, $errstr, $timeout ); + $sock = pfsockopen( $ip, $port, $errno, $errstr, $timeout ); } else { - $sock = @fsockopen( $ip, $port, $errno, $errstr, $timeout ); + $sock = fsockopen( $ip, $port, $errno, $errstr, $timeout ); } + wfRestoreWarnings(); } if ( !$sock ) { if ( $this->_debug ) { @@ -693,7 +721,7 @@ class MWMemcached { /** * Marks a host as dead until 30-40 seconds in the future * - * @param string $sock Socket to mark as dead + * @param $sock String: socket to mark as dead * * @access private */ @@ -703,7 +731,8 @@ class MWMemcached { } function _dead_host( $host ) { - @list( $ip, /* $port */) = explode( ':', $host ); + $parts = explode( ':', $host ); + $ip = $parts[0]; $this->_host_dead[$ip] = time() + 30 + intval( rand( 0, 10 ) ); $this->_host_dead[$host] = $this->_host_dead[$ip]; unset( $this->_cache_sock[$host] ); @@ -715,10 +744,10 @@ class MWMemcached { /** * get_sock * - * @param string $key Key to retrieve value for; + * @param $key String: key to retrieve value for; * - * @return mixed resource on success, false on failure - * @access private + * @return Mixed: resource on success, false on failure + * @access private */ function get_sock( $key ) { if ( !$this->_active ) { @@ -764,12 +793,12 @@ class MWMemcached { // {{{ _hashfunc() /** - * Creates a hash integer based on the $key + * Creates a hash integer based on the $key * - * @param string $key Key to hash + * @param $key String: key to hash * - * @return integer Hash value - * @access private + * @return Integer: hash value + * @access private */ function _hashfunc( $key ) { # Hash function must on [0,0x7ffffff] @@ -784,12 +813,12 @@ class MWMemcached { /** * Perform increment/decriment on $key * - * @param string $cmd Command to perform - * @param string $key Key to perform it on - * @param integer $amt Amount to adjust + * @param $cmd String: command to perform + * @param $key String: key to perform it on + * @param $amt Integer: amount to adjust * - * @return integer New value of $key - * @access private + * @return Integer: new value of $key + * @access private */ function _incrdecr( $cmd, $key, $amt = 1 ) { if ( !$this->_active ) { @@ -802,7 +831,11 @@ class MWMemcached { } $key = is_array( $key ) ? $key[1] : $key; - @$this->stats[$cmd]++; + if ( isset( $this->stats[$cmd] ) ) { + $this->stats[$cmd]++; + } else { + $this->stats[$cmd] = 1; + } if ( !$this->_safe_fwrite( $sock, "$cmd $key $amt\r\n" ) ) { return $this->_dead_sock( $sock ); } @@ -821,10 +854,10 @@ class MWMemcached { /** * Load items into $ret from $sock * - * @param resource $sock Socket to read from - * @param array $ret Returned values + * @param $sock Ressource: socket to read from + * @param $ret Array: returned values * - * @access private + * @access private */ function _load_items( $sock, &$ret ) { while ( 1 ) { @@ -844,7 +877,11 @@ class MWMemcached { } $offset += $n; $bneed -= $n; - @$ret[$rkey] .= $data; + if ( isset( $ret[$rkey] ) ) { + $ret[$rkey] .= $data; + } else { + $ret[$rkey] = $data; + } } if ( $offset != $len + 2 ) { @@ -881,13 +918,17 @@ class MWMemcached { /** * Performs the requested storage operation to the memcache server * - * @param string $cmd Command to perform - * @param string $key Key to act on - * @param mixed $val What we need to store - * @param integer $exp When it should expire + * @param $cmd String: command to perform + * @param $key String: key to act on + * @param $val Mixed: what we need to store + * @param $exp Integer: (optional) Expiration time. This can be a number of seconds + * to cache for (up to 30 days inclusive). Any timespans of 30 days + 1 second or + * longer must be the timestamp of the time at which the mapping should expire. It + * is safe to use timestamps in all cases, regardless of exipration + * eg: strtotime("+3 hour") * - * @return boolean - * @access private + * @return Boolean + * @access private */ function _set( $cmd, $key, $val, $exp ) { if ( !$this->_active ) { @@ -899,7 +940,11 @@ class MWMemcached { return false; } - @$this->stats[$cmd]++; + if ( isset( $this->stats[$cmd] ) ) { + $this->stats[$cmd]++; + } else { + $this->stats[$cmd] = 1; + } $flags = 0; @@ -949,10 +994,10 @@ class MWMemcached { /** * Returns the socket for the host * - * @param string $host Host:IP to get socket for + * @param $host String: Host:IP to get socket for * - * @return mixed IO Stream or false - * @access private + * @return Mixed: IO Stream or false + * @access private */ function sock_to_host( $host ) { if ( isset( $this->_cache_sock[$host] ) ) { @@ -987,7 +1032,7 @@ class MWMemcached { /** * Write to a stream, timing out after the correct amount of time * - * @return bool false on failure, true on success + * @return Boolean: false on failure, true on success */ /* function _safe_fwrite( $f, $buf, $len = false ) { diff --git a/includes/mime.info b/includes/mime.info index 63b38f5a..3a32f5d9 100644 --- a/includes/mime.info +++ b/includes/mime.info @@ -16,9 +16,10 @@ image/x-icon [BITMAP] image/x-rgb [BITMAP] image/x-portable-pixmap [BITMAP] image/x-portable-graymap image/x-portable-greymap [BITMAP] -image/x-bmp image/bmp application/x-bmp application/bmp [BITMAP] +image/x-bmp image/x-ms-bmp image/bmp application/x-bmp application/bmp [BITMAP] image/x-photoshop image/psd image/x-psd image/photoshop [BITMAP] image/vnd.djvu image/x.djvu image/x-djvu [BITMAP] +image/webp [BITMAP] image/svg+xml application/svg+xml application/svg image/svg [DRAWING] application/postscript [DRAWING] @@ -27,18 +28,23 @@ application/x-tex [DRAWING] application/x-dia-diagram [DRAWING] -audio/mp3 audio/mpeg3 audio/mpeg [AUDIO] +audio/mpeg audio/mp3 audio/mpeg3 [AUDIO] audio/wav audio/x-wav audio/wave [AUDIO] audio/midi audio/mid [AUDIO] audio/basic [AUDIO] +audio/ogg [AUDIO] audio/x-aiff [AUDIO] audio/x-pn-realaudio [AUDIO] audio/x-realaudio [AUDIO] +audio/webm [AUDIO] +audio/x-matroska [AUDIO] video/mpeg application/mpeg [VIDEO] video/ogg [VIDEO] video/x-sgi-video [VIDEO] video/x-flv [VIDEO] +video/webm [VIDEO] +video/x-matroska [VIDEO] application/ogg application/x-ogg audio/ogg audio/x-ogg video/ogg video/x-ogg [MULTIMEDIA] @@ -60,6 +66,7 @@ application/x-gzip [ARCHIVE] application/x-bzip [ARCHIVE] application/x-tar [ARCHIVE] application/x-stuffit [ARCHIVE] +application/x-opc+zip [ARCHIVE] text/javascript application/x-javascript application/x-ecmascript text/ecmascript [EXECUTABLE] @@ -77,3 +84,22 @@ application/vnd.ms-excel [OFFICE] application/vnd.ms-powerpoint [OFFICE] application/x-director [OFFICE] text/rtf [OFFICE] + +application/vnd.openxmlformats-officedocument.wordprocessingml.document [OFFICE] +application/vnd.openxmlformats-officedocument.wordprocessingml.template [OFFICE] +application/vnd.ms-word.document.macroEnabled.12 [OFFICE] +application/vnd.ms-word.template.macroEnabled.12 [OFFICE] +application/vnd.openxmlformats-officedocument.presentationml.template [OFFICE] +application/vnd.openxmlformats-officedocument.presentationml.slideshow [OFFICE] +application/vnd.openxmlformats-officedocument.presentationml.presentation [OFFICE] +application/vnd.ms-powerpoint.addin.macroEnabled.12 [OFFICE] +application/vnd.ms-powerpoint.presentation.macroEnabled.12 [OFFICE] +application/vnd.ms-powerpoint.presentation.macroEnabled.12 [OFFICE] +application/vnd.ms-powerpoint.slideshow.macroEnabled.12 [OFFICE] +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet [OFFICE] +application/vnd.openxmlformats-officedocument.spreadsheetml.template [OFFICE] +application/vnd.ms-excel.sheet.macroEnabled.12 [OFFICE] +application/vnd.ms-excel.template.macroEnabled.12 [OFFICE] +application/vnd.ms-excel.addin.macroEnabled.12 [OFFICE] +application/vnd.ms-excel.sheet.binary.macroEnabled.12 [OFFICE] + diff --git a/includes/mime.types b/includes/mime.types index bd57cd40..bf8c6dd1 100644 --- a/includes/mime.types +++ b/includes/mime.types @@ -2,10 +2,10 @@ application/andrew-inset ez application/mac-binhex40 hqx application/mac-compactpro cpt application/mathml+xml mathml -application/msword doc docx docm dot dotx dotm +application/msword doc dot application/octet-stream bin dms lha lzh exe class so dll application/oda oda -application/ogg ogg ogm +application/ogg ogx ogg ogm ogv oga spx application/pdf pdf application/postscript ai eps ps application/rdf+xml rdf @@ -13,8 +13,8 @@ application/smil smi smil application/srgs gram application/srgs+xml grxml application/vnd.mif mif -application/vnd.ms-excel xls xlsx xlsb xlam xltx xltm -application/vnd.ms-powerpoint ppt pptm pptx pot potx potm ppsm ppam +application/vnd.ms-excel xls xlt xla +application/vnd.ms-powerpoint ppt pot pps ppa application/vnd.wap.wbxml wbxml application/vnd.wap.wmlc wmlc application/vnd.wap.wmlscriptc wmlsc @@ -63,10 +63,12 @@ application/x-rar rar audio/basic au snd audio/midi mid midi kar audio/mpeg mpga mp2 mp3 -audio/ogg ogg +audio/ogg oga ogg spx +audio/webm webm audio/x-aiff aif aiff aifc +audio/x-matroska mka mkv audio/x-mpegurl m3u -audio/x-ogg ogg +audio/x-ogg oga ogg spx audio/x-pn-realaudio ram rm audio/x-pn-realaudio-plugin rpm audio/x-realaudio ra @@ -78,13 +80,15 @@ image/cgm cgm image/gif gif image/ief ief image/jpeg jpeg jpg jpe -image/png png +image/png png apng image/svg+xml svg image/tiff tiff tif image/vnd.djvu djvu djv image/vnd.wap.wbmp wbmp +image/webp webp image/x-cmu-raster ras image/x-icon ico +image/x-ms-bmp bmp image/x-portable-anymap pnm image/x-portable-bitmap pbm image/x-portable-graymap pgm @@ -110,12 +114,14 @@ text/vnd.wap.wmlscript wmls text/xml xml xsl xslt rss rdf text/x-setext etx video/mpeg mpeg mpg mpe -video/ogg ogm ogg +video/ogg ogv ogm ogg video/quicktime qt mov video/vnd.mpegurl mxu +video/webm webm video/x-flv flv +video/x-matroska mkv mka video/x-msvideo avi -video/x-ogg ogm ogg +video/x-ogg ogv ogm ogg video/x-sgi-movie movie x-conference/x-cooltalk ice application/vnd.oasis.opendocument.text odt @@ -133,4 +139,24 @@ application/vnd.oasis.opendocument.image-template oti application/vnd.oasis.opendocument.formula odf application/vnd.oasis.opendocument.formula-template otf application/vnd.oasis.opendocument.text-master odm -application/vnd.oasis.opendocument.text-web oth \ No newline at end of file +application/vnd.oasis.opendocument.text-web oth +application/vnd.openxmlformats-officedocument.wordprocessingml.document docx +application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx +application/vnd.ms-word.document.macroEnabled.12 docm +application/vnd.ms-word.template.macroEnabled.12 dotm +application/vnd.openxmlformats-officedocument.presentationml.template potx +application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx +application/vnd.openxmlformats-officedocument.presentationml.presentation pptx +application/vnd.ms-powerpoint.addin.macroEnabled.12 ppam +application/vnd.ms-powerpoint.presentation.macroEnabled.12 pptm +application/vnd.ms-powerpoint.presentation.macroEnabled.12 potm +application/vnd.ms-powerpoint.slideshow.macroEnabled.12 ppsm +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx +application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx +application/vnd.ms-excel.sheet.macroEnabled.12 xlsm +application/vnd.ms-excel.template.macroEnabled.12 xltm +application/vnd.ms-excel.addin.macroEnabled.12 xlam +application/vnd.ms-excel.sheet.binary.macroEnabled.12 xlsb +model/vnd.dwfx+xps dwfx +application/vnd.ms-xpsdocument xps +application/x-opc+zip docx dotx docm dotm potx ppsx pptx ppam pptm potm ppsm xlsx xltx xlsm xltm xlam xlsb dwfx xps diff --git a/includes/normal/CleanUpTest.php b/includes/normal/CleanUpTest.php index d14bcad1..549a0406 100644 --- a/includes/normal/CleanUpTest.php +++ b/includes/normal/CleanUpTest.php @@ -1,21 +1,28 @@ -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html +/** + * Tests for UtfNormal::cleanUp() function. + * + * Copyright © 2004 Brion Vibber + * http://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file + * @ingroup UtfNormal + */ if( php_sapi_name() != 'cli' ) { @@ -29,7 +36,14 @@ if( isset( $_SERVER['argv'] ) && in_array( '--icu', $_SERVER['argv'] ) ) { #ini_set( 'memory_limit', '40M' ); -require_once 'PHPUnit/Framework.php'; +require_once( 'PHPUnit/Runner/Version.php' ); +if( version_compare( PHPUnit_Runner_Version::id(), '3.5.0', '>=' ) ) { + # PHPUnit 3.5.0 introduced a nice autoloader based on class name + require_once( 'PHPUnit/Autoload.php' ); +} else { + # Keep the old pre PHPUnit 3.5.0 behaviour for compatibility + require_once 'PHPUnit/Framework.php'; +} require_once 'PHPUnit/TextUI/TestRunner.php'; require_once 'UtfNormal.php'; @@ -85,7 +99,6 @@ class CleanUpTest extends PHPUnit_Framework_TestCase { */ function XtestAllChars() { $rep = UTF8_REPLACEMENT; - global $utfCanonicalComp, $utfCanonicalDecomp; for( $i = 0x0; $i < UNICODE_MAX; $i++ ) { $char = codepointToUtf8( $i ); $clean = UtfNormal::cleanUp( $char ); @@ -97,7 +110,7 @@ class CleanUpTest extends PHPUnit_Framework_TestCase { ($i > 0x001f && $i < UNICODE_SURROGATE_FIRST) || ($i > UNICODE_SURROGATE_LAST && $i < 0xfffe ) || ($i > 0xffff && $i <= UNICODE_MAX ) ) { - if( isset( $utfCanonicalComp[$char] ) || isset( $utfCanonicalDecomp[$char] ) ) { + if( isset( UtfNormal::$utfCanonicalComp[$char] ) || isset( UtfNormal::$utfCanonicalDecomp[$char] ) ) { $comp = UtfNormal::NFC( $char ); $this->assertEquals( bin2hex( $comp ), diff --git a/includes/normal/RandomTest.php b/includes/normal/RandomTest.php index eb137574..f2ec460e 100644 --- a/includes/normal/RandomTest.php +++ b/includes/normal/RandomTest.php @@ -1,29 +1,29 @@ -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - /** * Test feeds random 16-byte strings to both the pure PHP and ICU-based * UtfNormal::cleanUp() code paths, and checks to see if there's a * difference. Will run forever until it finds one or you kill it. * + * Copyright (C) 2004 Brion Vibber + * http://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file * @ingroup UtfNormal - * @access private */ if( php_sapi_name() != 'cli' ) { diff --git a/includes/normal/Utf8Case.php b/includes/normal/Utf8Case.php index 9734a922..89b1a892 100644 --- a/includes/normal/Utf8Case.php +++ b/includes/normal/Utf8Case.php @@ -1,19 +1,20 @@ 'A', 'b' => 'B', @@ -1048,7 +1049,7 @@ $wikiUpperChars = array( '𐑏' => '𐐧' ); -/* +/** * Translation array to get lower case character */ $wikiLowerChars = array( diff --git a/includes/normal/Utf8CaseGenerate.php b/includes/normal/Utf8CaseGenerate.php index 22994ba4..8dbff1db 100644 --- a/includes/normal/Utf8CaseGenerate.php +++ b/includes/normal/Utf8CaseGenerate.php @@ -1,32 +1,30 @@ -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - /** - * This script generates Utf8Case.inc from the Unicode Character Database + * This script generates Utf8Case.php from the Unicode Character Database * and supplementary files. * + * Copyright © 2004,2008 Brion Vibber + * http://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file * @ingroup UtfNormal - * @access private */ -/** */ - if( php_sapi_name() != 'cli' ) { die( "Run me from the command line please.\n" ); } @@ -67,23 +65,24 @@ if( $out ) { $outLowerChars = escapeArray( $wikiLowerChars ); $outdata = "<" . "?php /** - * Simple 1:1 upper/lowercase switching arrays for utf-8 text - * Won't get context-sensitive things yet + * Simple 1:1 upper/lowercase switching arrays for utf-8 text. + * Won't get context-sensitive things yet. * * Hack for bugs in ucfirst() and company * * These are pulled from memcached if possible, as this is faster than filling * up a big array manually. + * + * @file * @ingroup Language */ -/* +/** * Translation array to get upper case character */ - \$wikiUpperChars = $outUpperChars; -/* +/** * Translation array to get lower case character */ \$wikiLowerChars = $outLowerChars;\n"; diff --git a/includes/normal/Utf8Test.php b/includes/normal/Utf8Test.php index 4c78b3db..53108bc4 100644 --- a/includes/normal/Utf8Test.php +++ b/includes/normal/Utf8Test.php @@ -1,28 +1,28 @@ -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - /** * Runs the UTF-8 decoder test at: * http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt * + * Copyright © 2004 Brion Vibber + * http://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file * @ingroup UtfNormal - * @access private */ /** */ @@ -30,6 +30,7 @@ require_once 'UtfNormalUtil.php'; require_once 'UtfNormal.php'; mb_internal_encoding( "utf-8" ); +$verbose = false; #$verbose = true; if( php_sapi_name() != 'cli' ) { die( "Run me from the command line please.\n" ); @@ -39,7 +40,7 @@ $in = fopen( "UTF-8-test.txt", "rt" ); if( !$in ) { print "Couldn't open UTF-8-test.txt -- can't run tests.\n"; print "If necessary, manually download this file. It can be obtained at\n"; - print "http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt"; + print "http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt\n"; exit(-1); } @@ -55,7 +56,7 @@ while( false !== ( $line = fgets( $in ) ) ) { if( !$columns ) { print "Something seems to be wrong; couldn't extract line length.\n"; print "Check that UTF-8-test.txt was downloaded correctly from\n"; - print "http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt"; + print "http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt\n"; exit(-1); } @@ -102,10 +103,10 @@ while( false !== ( $line = fgets( $in ) ) ) { if( in_array( $test, $longTests ) ) { $line = fgets( $in ); for( $line = fgets( $in ); !preg_match( '/^\s+\|/', $line ); $line = fgets( $in ) ) { - testLine( $test, $line, $total, $success, $failed ); + testLine( $test, $line, $total, $success, $failed, $columns, $exceptions, $verbose ); } } else { - testLine( $test, $line, $total, $success, $failed ); + testLine( $test, $line, $total, $success, $failed, $columns, $exceptions, $verbose ); } } } @@ -120,7 +121,7 @@ echo "UTF-8 DECODER TEST SUCCESS!\n"; exit (0); -function testLine( $test, $line, &$total, &$success, &$failed ) { +function testLine( $test, $line, &$total, &$success, &$failed, $columns, $exceptions, $verbose ) { $stripped = $line; UtfNormal::quickisNFCVerify( $stripped ); @@ -130,10 +131,8 @@ function testLine( $test, $line, &$total, &$success, &$failed ) { $len = strlen( substr( $stripped, 0, strpos( $stripped, '|' ) ) ); } - global $columns; $ok = $same ^ ($test >= 3 ); - global $exceptions; $ok ^= in_array( $test, $exceptions ); $ok &= ($columns == $len); @@ -144,7 +143,7 @@ function testLine( $test, $line, &$total, &$success, &$failed ) { } else { $failed++; } - global $verbose; + if( $verbose || !$ok ) { print str_replace( "\n", "$len\n", $stripped ); } diff --git a/includes/normal/UtfNormal.php b/includes/normal/UtfNormal.php index e1352fdb..116fb8f0 100644 --- a/includes/normal/UtfNormal.php +++ b/includes/normal/UtfNormal.php @@ -1,38 +1,35 @@ -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html +/** + * Unicode normalization routines + * + * Copyright © 2004 Brion Vibber + * http://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file + * @ingroup UtfNormal + */ /** * @defgroup UtfNormal UtfNormal */ -/** */ require_once dirname(__FILE__).'/UtfNormalUtil.php'; -global $utfCombiningClass, $utfCanonicalComp, $utfCanonicalDecomp; -$utfCombiningClass = null; -$utfCanonicalComp = null; -$utfCanonicalDecomp = null; - -# Load compatibility decompositions on demand if they are needed. -global $utfCompatibilityDecomp; -$utfCompatibilityDecomp = null; - /** * For using the ICU wrapper */ @@ -45,6 +42,7 @@ define( 'UNORM_NFKC', 5 ); define( 'UNORM_FCD', 6 ); define( 'NORMALIZE_ICU', function_exists( 'utf8_normalize' ) ); +define( 'NORMALIZE_INTL', function_exists( 'normalizer_normalize' ) ); /** * Unicode normalization routines for working with UTF-8 strings. @@ -61,6 +59,15 @@ define( 'NORMALIZE_ICU', function_exists( 'utf8_normalize' ) ); * @ingroup UtfNormal */ class UtfNormal { + static $utfCombiningClass = null; + static $utfCanonicalComp = null; + static $utfCanonicalDecomp = null; + + # Load compatibility decompositions on demand if they are needed. + static $utfCompatibilityDecomp = null; + + static $utfCheckNFC; + /** * The ultimate convenience function! Clean up invalid UTF-8 sequences, * and convert to normal form C, canonical composition. @@ -73,17 +80,29 @@ class UtfNormal { */ static function cleanUp( $string ) { if( NORMALIZE_ICU ) { - # We exclude a few chars that ICU would not. - $string = preg_replace( - '/[\x00-\x08\x0b\x0c\x0e-\x1f]/', - UTF8_REPLACEMENT, - $string ); - $string = str_replace( UTF8_FFFE, UTF8_REPLACEMENT, $string ); - $string = str_replace( UTF8_FFFF, UTF8_REPLACEMENT, $string ); + $string = self::replaceForNativeNormalize( $string ); # UnicodeString constructor fails if the string ends with a # head byte. Add a junk char at the end, we'll strip it off. return rtrim( utf8_normalize( $string . "\x01", UNORM_NFC ), "\x01" ); + } elseif( NORMALIZE_INTL ) { + $string = self::replaceForNativeNormalize( $string ); + $norm = normalizer_normalize( $string, Normalizer::FORM_C ); + if( $norm === null || $norm === false ) { + # normalizer_normalize will either return false or null + # (depending on which doc you read) if invalid utf8 string. + # quickIsNFCVerify cleans up invalid sequences. + + if( UtfNormal::quickIsNFCVerify( $string ) ) { + # if that's true, the string is actually already normal. + return $string; + } else { + # Now we are valid but non-normal + return normalizer_normalize( $string, Normalizer::FORM_C ); + } + } else { + return $norm; + } } elseif( UtfNormal::quickIsNFCVerify( $string ) ) { # Side effect -- $string has had UTF-8 errors cleaned up. return $string; @@ -101,7 +120,9 @@ class UtfNormal { * @return string a UTF-8 string in normal form C */ static function toNFC( $string ) { - if( NORMALIZE_ICU ) + if( NORMALIZE_INTL ) + return normalizer_normalize( $string, Normalizer::FORM_C ); + elseif( NORMALIZE_ICU ) return utf8_normalize( $string, UNORM_NFC ); elseif( UtfNormal::quickIsNFC( $string ) ) return $string; @@ -117,7 +138,9 @@ class UtfNormal { * @return string a UTF-8 string in normal form D */ static function toNFD( $string ) { - if( NORMALIZE_ICU ) + if( NORMALIZE_INTL ) + return normalizer_normalize( $string, Normalizer::FORM_D ); + elseif( NORMALIZE_ICU ) return utf8_normalize( $string, UNORM_NFD ); elseif( preg_match( '/[\x80-\xff]/', $string ) ) return UtfNormal::NFD( $string ); @@ -134,7 +157,9 @@ class UtfNormal { * @return string a UTF-8 string in normal form KC */ static function toNFKC( $string ) { - if( NORMALIZE_ICU ) + if( NORMALIZE_INTL ) + return normalizer_normalize( $string, Normalizer::FORM_KC ); + elseif( NORMALIZE_ICU ) return utf8_normalize( $string, UNORM_NFKC ); elseif( preg_match( '/[\x80-\xff]/', $string ) ) return UtfNormal::NFKC( $string ); @@ -151,7 +176,9 @@ class UtfNormal { * @return string a UTF-8 string in normal form KD */ static function toNFKD( $string ) { - if( NORMALIZE_ICU ) + if( NORMALIZE_INTL ) + return normalizer_normalize( $string, Normalizer::FORM_KD ); + elseif( NORMALIZE_ICU ) return utf8_normalize( $string, UNORM_NFKD ); elseif( preg_match( '/[\x80-\xff]/', $string ) ) return UtfNormal::NFKD( $string ); @@ -164,8 +191,7 @@ class UtfNormal { * @private */ static function loadData() { - global $utfCombiningClass; - if( !isset( $utfCombiningClass ) ) { + if( !isset( self::$utfCombiningClass ) ) { require_once( dirname(__FILE__) . '/UtfNormalData.inc' ); } } @@ -182,7 +208,6 @@ class UtfNormal { if( !preg_match( '/[\x80-\xff]/', $string ) ) return true; UtfNormal::loadData(); - global $utfCheckNFC, $utfCombiningClass; $len = strlen( $string ); for( $i = 0; $i < $len; $i++ ) { $c = $string{$i}; @@ -199,11 +224,11 @@ class UtfNormal { $c = substr( $string, $i, 2 ); $i++; } - if( isset( $utfCheckNFC[$c] ) ) { + if( isset( self::$utfCheckNFC[$c] ) ) { # If it's NO or MAYBE, bail and do the slow check. return false; } - if( isset( $utfCombiningClass[$c] ) ) { + if( isset( self::$utfCombiningClass[$c] ) ) { # Combining character? We might have to do sorting, at least. return false; } @@ -229,9 +254,8 @@ class UtfNormal { if( !isset( $checkit ) ) { # Load/build some scary lookup tables... UtfNormal::loadData(); - global $utfCheckNFC, $utfCombiningClass; - $utfCheckOrCombining = array_merge( $utfCheckNFC, $utfCombiningClass ); + $utfCheckOrCombining = array_merge( self::$utfCheckNFC, self::$utfCombiningClass ); # Head bytes for sequences which we should do further validity checks $checkit = array_flip( array_map( 'chr', @@ -295,7 +319,8 @@ class UtfNormal { $len = $chunk + 1; # Counting down is faster. I'm *so* sorry. for( $i = -1; --$len; ) { - if( $remaining = $tailBytes[$c = $str{++$i}] ) { + $remaining = $tailBytes[$c = $str{++$i}]; + if( $remaining ) { # UTF-8 head byte! $sequence = $head = $c; do { @@ -446,9 +471,9 @@ class UtfNormal { */ static function NFD( $string ) { UtfNormal::loadData(); - global $utfCanonicalDecomp; + return UtfNormal::fastCombiningSort( - UtfNormal::fastDecompose( $string, $utfCanonicalDecomp ) ); + UtfNormal::fastDecompose( $string, self::$utfCanonicalDecomp ) ); } /** @@ -466,12 +491,11 @@ class UtfNormal { * @private */ static function NFKD( $string ) { - global $utfCompatibilityDecomp; - if( !isset( $utfCompatibilityDecomp ) ) { + if( !isset( self::$utfCompatibilityDecomp ) ) { require_once( 'UtfNormalDataK.inc' ); } - return UtfNormal::fastCombiningSort( - UtfNormal::fastDecompose( $string, $utfCompatibilityDecomp ) ); + return self::fastCombiningSort( + self::fastDecompose( $string, self::$utfCompatibilityDecomp ) ); } @@ -546,7 +570,6 @@ class UtfNormal { */ static function fastCombiningSort( $string ) { UtfNormal::loadData(); - global $utfCombiningClass; $len = strlen( $string ); $out = ''; $combiners = array(); @@ -565,8 +588,8 @@ class UtfNormal { $c = substr( $string, $i, 2 ); $i++; } - if( isset( $utfCombiningClass[$c] ) ) { - $lastClass = $utfCombiningClass[$c]; + if( isset( self::$utfCombiningClass[$c] ) ) { + $lastClass = self::$utfCombiningClass[$c]; if( isset( $combiners[$lastClass] ) ) { $combiners[$lastClass] .= $c; } else { @@ -599,7 +622,6 @@ class UtfNormal { */ static function fastCompose( $string ) { UtfNormal::loadData(); - global $utfCanonicalComp, $utfCombiningClass; $len = strlen( $string ); $out = ''; $lastClass = -1; @@ -631,14 +653,14 @@ class UtfNormal { } $pair = $startChar . $c; if( $n > 0x80 ) { - if( isset( $utfCombiningClass[$c] ) ) { + if( isset( self::$utfCombiningClass[$c] ) ) { # A combining char; see what we can do with it - $class = $utfCombiningClass[$c]; + $class = self::$utfCombiningClass[$c]; if( !empty( $startChar ) && $lastClass < $class && $class > 0 && - isset( $utfCanonicalComp[$pair] ) ) { - $startChar = $utfCanonicalComp[$pair]; + isset( self::$utfCanonicalComp[$pair] ) ) { + $startChar = self::$utfCanonicalComp[$pair]; $class = 0; } else { $combining .= $c; @@ -650,8 +672,8 @@ class UtfNormal { } # New start char if( $lastClass == 0 ) { - if( isset( $utfCanonicalComp[$pair] ) ) { - $startChar = $utfCanonicalComp[$pair]; + if( isset( self::$utfCanonicalComp[$pair] ) ) { + $startChar = self::$utfCanonicalComp[$pair]; $lastHangul = 0; continue; } @@ -737,4 +759,20 @@ class UtfNormal { } return $out; } + /** + * Function to replace some characters that we don't want + * but most of the native normalize functions keep. + * + * @param $string String The string + * @return String String with the character codes replaced. + */ + private static function replaceForNativeNormalize( $string ) { + $string = preg_replace( + '/[\x00-\x08\x0b\x0c\x0e-\x1f]/', + UTF8_REPLACEMENT, + $string ); + $string = str_replace( UTF8_FFFE, UTF8_REPLACEMENT, $string ); + $string = str_replace( UTF8_FFFF, UTF8_REPLACEMENT, $string ); + return $string; + } } diff --git a/includes/normal/UtfNormalBench.php b/includes/normal/UtfNormalBench.php index 1bcd8334..2229dbb4 100644 --- a/includes/normal/UtfNormalBench.php +++ b/includes/normal/UtfNormalBench.php @@ -1,30 +1,29 @@ -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - /** * Approximate benchmark for some basic operations. * + * Copyright © 2004 Brion Vibber + * http://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file * @ingroup UtfNormal - * @access private */ -/** */ if( isset( $_SERVER['argv'] ) && in_array( '--icu', $_SERVER['argv'] ) ) { dl( 'php_utfnormal.so' ); } @@ -86,11 +85,10 @@ function benchTime(){ } function benchmarkForm( &$u, &$data, $form ) { - global $utfCanonicalDecomp; #$start = benchTime(); for( $i = 0; $i < BENCH_CYCLES; $i++ ) { $start = benchTime(); - $out = $u->$form( $data, $utfCanonicalDecomp ); + $out = $u->$form( $data, UtfNormal::$utfCanonicalDecomp ); $deltas[] = (benchTime() - $start); } #$delta = (benchTime() - $start) / BENCH_CYCLES; diff --git a/includes/normal/UtfNormalData.inc b/includes/normal/UtfNormalData.inc index 46a93947..1d6b4680 100644 --- a/includes/normal/UtfNormalData.inc +++ b/includes/normal/UtfNormalData.inc @@ -2,11 +2,12 @@ /** * This file was automatically generated -- do not edit! * Run UtfNormalGenerate.php to create this file again (make clean && make) + * + * @file */ -/** */ -global $utfCombiningClass, $utfCanonicalComp, $utfCanonicalDecomp, $utfCheckNFC; -$utfCombiningClass = unserialize( 'a:594:{s:2:"̀";i:230;s:2:"́";i:230;s:2:"̂";i:230;s:2:"̃";i:230;s:2:"̄";i:230;s:2:"̅";i:230;s:2:"̆";i:230;s:2:"̇";i:230;s:2:"̈";i:230;s:2:"̉";i:230;s:2:"̊";i:230;s:2:"̋";i:230;s:2:"̌";i:230;s:2:"̍";i:230;s:2:"̎";i:230;s:2:"̏";i:230;s:2:"̐";i:230;s:2:"̑";i:230;s:2:"̒";i:230;s:2:"̓";i:230;s:2:"̔";i:230;s:2:"̕";i:232;s:2:"̖";i:220;s:2:"̗";i:220;s:2:"̘";i:220;s:2:"̙";i:220;s:2:"̚";i:232;s:2:"̛";i:216;s:2:"̜";i:220;s:2:"̝";i:220;s:2:"̞";i:220;s:2:"̟";i:220;s:2:"̠";i:220;s:2:"̡";i:202;s:2:"̢";i:202;s:2:"̣";i:220;s:2:"̤";i:220;s:2:"̥";i:220;s:2:"̦";i:220;s:2:"̧";i:202;s:2:"̨";i:202;s:2:"̩";i:220;s:2:"̪";i:220;s:2:"̫";i:220;s:2:"̬";i:220;s:2:"̭";i:220;s:2:"̮";i:220;s:2:"̯";i:220;s:2:"̰";i:220;s:2:"̱";i:220;s:2:"̲";i:220;s:2:"̳";i:220;s:2:"̴";i:1;s:2:"̵";i:1;s:2:"̶";i:1;s:2:"̷";i:1;s:2:"̸";i:1;s:2:"̹";i:220;s:2:"̺";i:220;s:2:"̻";i:220;s:2:"̼";i:220;s:2:"̽";i:230;s:2:"̾";i:230;s:2:"̿";i:230;s:2:"̀";i:230;s:2:"́";i:230;s:2:"͂";i:230;s:2:"̓";i:230;s:2:"̈́";i:230;s:2:"ͅ";i:240;s:2:"͆";i:230;s:2:"͇";i:220;s:2:"͈";i:220;s:2:"͉";i:220;s:2:"͊";i:230;s:2:"͋";i:230;s:2:"͌";i:230;s:2:"͍";i:220;s:2:"͎";i:220;s:2:"͐";i:230;s:2:"͑";i:230;s:2:"͒";i:230;s:2:"͓";i:220;s:2:"͔";i:220;s:2:"͕";i:220;s:2:"͖";i:220;s:2:"͗";i:230;s:2:"͘";i:232;s:2:"͙";i:220;s:2:"͚";i:220;s:2:"͛";i:230;s:2:"͜";i:233;s:2:"͝";i:234;s:2:"͞";i:234;s:2:"͟";i:233;s:2:"͠";i:234;s:2:"͡";i:234;s:2:"͢";i:233;s:2:"ͣ";i:230;s:2:"ͤ";i:230;s:2:"ͥ";i:230;s:2:"ͦ";i:230;s:2:"ͧ";i:230;s:2:"ͨ";i:230;s:2:"ͩ";i:230;s:2:"ͪ";i:230;s:2:"ͫ";i:230;s:2:"ͬ";i:230;s:2:"ͭ";i:230;s:2:"ͮ";i:230;s:2:"ͯ";i:230;s:2:"҃";i:230;s:2:"҄";i:230;s:2:"҅";i:230;s:2:"҆";i:230;s:2:"҇";i:230;s:2:"֑";i:220;s:2:"֒";i:230;s:2:"֓";i:230;s:2:"֔";i:230;s:2:"֕";i:230;s:2:"֖";i:220;s:2:"֗";i:230;s:2:"֘";i:230;s:2:"֙";i:230;s:2:"֚";i:222;s:2:"֛";i:220;s:2:"֜";i:230;s:2:"֝";i:230;s:2:"֞";i:230;s:2:"֟";i:230;s:2:"֠";i:230;s:2:"֡";i:230;s:2:"֢";i:220;s:2:"֣";i:220;s:2:"֤";i:220;s:2:"֥";i:220;s:2:"֦";i:220;s:2:"֧";i:220;s:2:"֨";i:230;s:2:"֩";i:230;s:2:"֪";i:220;s:2:"֫";i:230;s:2:"֬";i:230;s:2:"֭";i:222;s:2:"֮";i:228;s:2:"֯";i:230;s:2:"ְ";i:10;s:2:"ֱ";i:11;s:2:"ֲ";i:12;s:2:"ֳ";i:13;s:2:"ִ";i:14;s:2:"ֵ";i:15;s:2:"ֶ";i:16;s:2:"ַ";i:17;s:2:"ָ";i:18;s:2:"ֹ";i:19;s:2:"ֺ";i:19;s:2:"ֻ";i:20;s:2:"ּ";i:21;s:2:"ֽ";i:22;s:2:"ֿ";i:23;s:2:"ׁ";i:24;s:2:"ׂ";i:25;s:2:"ׄ";i:230;s:2:"ׅ";i:220;s:2:"ׇ";i:18;s:2:"ؐ";i:230;s:2:"ؑ";i:230;s:2:"ؒ";i:230;s:2:"ؓ";i:230;s:2:"ؔ";i:230;s:2:"ؕ";i:230;s:2:"ؖ";i:230;s:2:"ؗ";i:230;s:2:"ؘ";i:30;s:2:"ؙ";i:31;s:2:"ؚ";i:32;s:2:"ً";i:27;s:2:"ٌ";i:28;s:2:"ٍ";i:29;s:2:"َ";i:30;s:2:"ُ";i:31;s:2:"ِ";i:32;s:2:"ّ";i:33;s:2:"ْ";i:34;s:2:"ٓ";i:230;s:2:"ٔ";i:230;s:2:"ٕ";i:220;s:2:"ٖ";i:220;s:2:"ٗ";i:230;s:2:"٘";i:230;s:2:"ٙ";i:230;s:2:"ٚ";i:230;s:2:"ٛ";i:230;s:2:"ٜ";i:220;s:2:"ٝ";i:230;s:2:"ٞ";i:230;s:2:"ٰ";i:35;s:2:"ۖ";i:230;s:2:"ۗ";i:230;s:2:"ۘ";i:230;s:2:"ۙ";i:230;s:2:"ۚ";i:230;s:2:"ۛ";i:230;s:2:"ۜ";i:230;s:2:"۟";i:230;s:2:"۠";i:230;s:2:"ۡ";i:230;s:2:"ۢ";i:230;s:2:"ۣ";i:220;s:2:"ۤ";i:230;s:2:"ۧ";i:230;s:2:"ۨ";i:230;s:2:"۪";i:220;s:2:"۫";i:230;s:2:"۬";i:230;s:2:"ۭ";i:220;s:2:"ܑ";i:36;s:2:"ܰ";i:230;s:2:"ܱ";i:220;s:2:"ܲ";i:230;s:2:"ܳ";i:230;s:2:"ܴ";i:220;s:2:"ܵ";i:230;s:2:"ܶ";i:230;s:2:"ܷ";i:220;s:2:"ܸ";i:220;s:2:"ܹ";i:220;s:2:"ܺ";i:230;s:2:"ܻ";i:220;s:2:"ܼ";i:220;s:2:"ܽ";i:230;s:2:"ܾ";i:220;s:2:"ܿ";i:230;s:2:"݀";i:230;s:2:"݁";i:230;s:2:"݂";i:220;s:2:"݃";i:230;s:2:"݄";i:220;s:2:"݅";i:230;s:2:"݆";i:220;s:2:"݇";i:230;s:2:"݈";i:220;s:2:"݉";i:230;s:2:"݊";i:230;s:2:"߫";i:230;s:2:"߬";i:230;s:2:"߭";i:230;s:2:"߮";i:230;s:2:"߯";i:230;s:2:"߰";i:230;s:2:"߱";i:230;s:2:"߲";i:220;s:2:"߳";i:230;s:3:"ࠖ";i:230;s:3:"ࠗ";i:230;s:3:"࠘";i:230;s:3:"࠙";i:230;s:3:"ࠛ";i:230;s:3:"ࠜ";i:230;s:3:"ࠝ";i:230;s:3:"ࠞ";i:230;s:3:"ࠟ";i:230;s:3:"ࠠ";i:230;s:3:"ࠡ";i:230;s:3:"ࠢ";i:230;s:3:"ࠣ";i:230;s:3:"ࠥ";i:230;s:3:"ࠦ";i:230;s:3:"ࠧ";i:230;s:3:"ࠩ";i:230;s:3:"ࠪ";i:230;s:3:"ࠫ";i:230;s:3:"ࠬ";i:230;s:3:"࠭";i:230;s:3:"़";i:7;s:3:"्";i:9;s:3:"॑";i:230;s:3:"॒";i:220;s:3:"॓";i:230;s:3:"॔";i:230;s:3:"়";i:7;s:3:"্";i:9;s:3:"਼";i:7;s:3:"੍";i:9;s:3:"઼";i:7;s:3:"્";i:9;s:3:"଼";i:7;s:3:"୍";i:9;s:3:"்";i:9;s:3:"్";i:9;s:3:"ౕ";i:84;s:3:"ౖ";i:91;s:3:"಼";i:7;s:3:"್";i:9;s:3:"്";i:9;s:3:"්";i:9;s:3:"ุ";i:103;s:3:"ู";i:103;s:3:"ฺ";i:9;s:3:"่";i:107;s:3:"้";i:107;s:3:"๊";i:107;s:3:"๋";i:107;s:3:"ຸ";i:118;s:3:"ູ";i:118;s:3:"່";i:122;s:3:"້";i:122;s:3:"໊";i:122;s:3:"໋";i:122;s:3:"༘";i:220;s:3:"༙";i:220;s:3:"༵";i:220;s:3:"༷";i:220;s:3:"༹";i:216;s:3:"ཱ";i:129;s:3:"ི";i:130;s:3:"ུ";i:132;s:3:"ེ";i:130;s:3:"ཻ";i:130;s:3:"ོ";i:130;s:3:"ཽ";i:130;s:3:"ྀ";i:130;s:3:"ྂ";i:230;s:3:"ྃ";i:230;s:3:"྄";i:9;s:3:"྆";i:230;s:3:"྇";i:230;s:3:"࿆";i:220;s:3:"့";i:7;s:3:"္";i:9;s:3:"်";i:9;s:3:"ႍ";i:220;s:3:"፟";i:230;s:3:"᜔";i:9;s:3:"᜴";i:9;s:3:"្";i:9;s:3:"៝";i:230;s:3:"ᢩ";i:228;s:3:"᤹";i:222;s:3:"᤺";i:230;s:3:"᤻";i:220;s:3:"ᨗ";i:230;s:3:"ᨘ";i:220;s:3:"᩠";i:9;s:3:"᩵";i:230;s:3:"᩶";i:230;s:3:"᩷";i:230;s:3:"᩸";i:230;s:3:"᩹";i:230;s:3:"᩺";i:230;s:3:"᩻";i:230;s:3:"᩼";i:230;s:3:"᩿";i:220;s:3:"᬴";i:7;s:3:"᭄";i:9;s:3:"᭫";i:230;s:3:"᭬";i:220;s:3:"᭭";i:230;s:3:"᭮";i:230;s:3:"᭯";i:230;s:3:"᭰";i:230;s:3:"᭱";i:230;s:3:"᭲";i:230;s:3:"᭳";i:230;s:3:"᮪";i:9;s:3:"᰷";i:7;s:3:"᳐";i:230;s:3:"᳑";i:230;s:3:"᳒";i:230;s:3:"᳔";i:1;s:3:"᳕";i:220;s:3:"᳖";i:220;s:3:"᳗";i:220;s:3:"᳘";i:220;s:3:"᳙";i:220;s:3:"᳚";i:230;s:3:"᳛";i:230;s:3:"᳜";i:220;s:3:"᳝";i:220;s:3:"᳞";i:220;s:3:"᳟";i:220;s:3:"᳠";i:230;s:3:"᳢";i:1;s:3:"᳣";i:1;s:3:"᳤";i:1;s:3:"᳥";i:1;s:3:"᳦";i:1;s:3:"᳧";i:1;s:3:"᳨";i:1;s:3:"᳭";i:220;s:3:"᷀";i:230;s:3:"᷁";i:230;s:3:"᷂";i:220;s:3:"᷃";i:230;s:3:"᷄";i:230;s:3:"᷅";i:230;s:3:"᷆";i:230;s:3:"᷇";i:230;s:3:"᷈";i:230;s:3:"᷉";i:230;s:3:"᷊";i:220;s:3:"᷋";i:230;s:3:"᷌";i:230;s:3:"᷍";i:234;s:3:"᷎";i:214;s:3:"᷏";i:220;s:3:"᷐";i:202;s:3:"᷑";i:230;s:3:"᷒";i:230;s:3:"ᷓ";i:230;s:3:"ᷔ";i:230;s:3:"ᷕ";i:230;s:3:"ᷖ";i:230;s:3:"ᷗ";i:230;s:3:"ᷘ";i:230;s:3:"ᷙ";i:230;s:3:"ᷚ";i:230;s:3:"ᷛ";i:230;s:3:"ᷜ";i:230;s:3:"ᷝ";i:230;s:3:"ᷞ";i:230;s:3:"ᷟ";i:230;s:3:"ᷠ";i:230;s:3:"ᷡ";i:230;s:3:"ᷢ";i:230;s:3:"ᷣ";i:230;s:3:"ᷤ";i:230;s:3:"ᷥ";i:230;s:3:"ᷦ";i:230;s:3:"᷽";i:220;s:3:"᷾";i:230;s:3:"᷿";i:220;s:3:"⃐";i:230;s:3:"⃑";i:230;s:3:"⃒";i:1;s:3:"⃓";i:1;s:3:"⃔";i:230;s:3:"⃕";i:230;s:3:"⃖";i:230;s:3:"⃗";i:230;s:3:"⃘";i:1;s:3:"⃙";i:1;s:3:"⃚";i:1;s:3:"⃛";i:230;s:3:"⃜";i:230;s:3:"⃡";i:230;s:3:"⃥";i:1;s:3:"⃦";i:1;s:3:"⃧";i:230;s:3:"⃨";i:220;s:3:"⃩";i:230;s:3:"⃪";i:1;s:3:"⃫";i:1;s:3:"⃬";i:220;s:3:"⃭";i:220;s:3:"⃮";i:220;s:3:"⃯";i:220;s:3:"⃰";i:230;s:3:"⳯";i:230;s:3:"⳰";i:230;s:3:"⳱";i:230;s:3:"ⷠ";i:230;s:3:"ⷡ";i:230;s:3:"ⷢ";i:230;s:3:"ⷣ";i:230;s:3:"ⷤ";i:230;s:3:"ⷥ";i:230;s:3:"ⷦ";i:230;s:3:"ⷧ";i:230;s:3:"ⷨ";i:230;s:3:"ⷩ";i:230;s:3:"ⷪ";i:230;s:3:"ⷫ";i:230;s:3:"ⷬ";i:230;s:3:"ⷭ";i:230;s:3:"ⷮ";i:230;s:3:"ⷯ";i:230;s:3:"ⷰ";i:230;s:3:"ⷱ";i:230;s:3:"ⷲ";i:230;s:3:"ⷳ";i:230;s:3:"ⷴ";i:230;s:3:"ⷵ";i:230;s:3:"ⷶ";i:230;s:3:"ⷷ";i:230;s:3:"ⷸ";i:230;s:3:"ⷹ";i:230;s:3:"ⷺ";i:230;s:3:"ⷻ";i:230;s:3:"ⷼ";i:230;s:3:"ⷽ";i:230;s:3:"ⷾ";i:230;s:3:"ⷿ";i:230;s:3:"〪";i:218;s:3:"〫";i:228;s:3:"〬";i:232;s:3:"〭";i:222;s:3:"〮";i:224;s:3:"〯";i:224;s:3:"゙";i:8;s:3:"゚";i:8;s:3:"꙯";i:230;s:3:"꙼";i:230;s:3:"꙽";i:230;s:3:"꛰";i:230;s:3:"꛱";i:230;s:3:"꠆";i:9;s:3:"꣄";i:9;s:3:"꣠";i:230;s:3:"꣡";i:230;s:3:"꣢";i:230;s:3:"꣣";i:230;s:3:"꣤";i:230;s:3:"꣥";i:230;s:3:"꣦";i:230;s:3:"꣧";i:230;s:3:"꣨";i:230;s:3:"꣩";i:230;s:3:"꣪";i:230;s:3:"꣫";i:230;s:3:"꣬";i:230;s:3:"꣭";i:230;s:3:"꣮";i:230;s:3:"꣯";i:230;s:3:"꣰";i:230;s:3:"꣱";i:230;s:3:"꤫";i:220;s:3:"꤬";i:220;s:3:"꤭";i:220;s:3:"꥓";i:9;s:3:"꦳";i:7;s:3:"꧀";i:9;s:3:"ꪰ";i:230;s:3:"ꪲ";i:230;s:3:"ꪳ";i:230;s:3:"ꪴ";i:220;s:3:"ꪷ";i:230;s:3:"ꪸ";i:230;s:3:"ꪾ";i:230;s:3:"꪿";i:230;s:3:"꫁";i:230;s:3:"꯭";i:9;s:3:"ﬞ";i:26;s:3:"︠";i:230;s:3:"︡";i:230;s:3:"︢";i:230;s:3:"︣";i:230;s:3:"︤";i:230;s:3:"︥";i:230;s:3:"︦";i:230;s:4:"𐇽";i:220;s:4:"𐨍";i:220;s:4:"𐨏";i:230;s:4:"𐨸";i:230;s:4:"𐨹";i:1;s:4:"𐨺";i:220;s:4:"𐨿";i:9;s:4:"𑂹";i:9;s:4:"𑂺";i:7;s:4:"𝅥";i:216;s:4:"𝅦";i:216;s:4:"𝅧";i:1;s:4:"𝅨";i:1;s:4:"𝅩";i:1;s:4:"𝅭";i:226;s:4:"𝅮";i:216;s:4:"𝅯";i:216;s:4:"𝅰";i:216;s:4:"𝅱";i:216;s:4:"𝅲";i:216;s:4:"𝅻";i:220;s:4:"𝅼";i:220;s:4:"𝅽";i:220;s:4:"𝅾";i:220;s:4:"𝅿";i:220;s:4:"𝆀";i:220;s:4:"𝆁";i:220;s:4:"𝆂";i:220;s:4:"𝆅";i:230;s:4:"𝆆";i:230;s:4:"𝆇";i:230;s:4:"𝆈";i:230;s:4:"𝆉";i:230;s:4:"𝆊";i:220;s:4:"𝆋";i:220;s:4:"𝆪";i:230;s:4:"𝆫";i:230;s:4:"𝆬";i:230;s:4:"𝆭";i:230;s:4:"𝉂";i:230;s:4:"𝉃";i:230;s:4:"𝉄";i:230;}' ); -$utfCanonicalComp = unserialize( 'a:1868:{s:3:"À";s:2:"À";s:3:"Á";s:2:"Á";s:3:"Â";s:2:"Â";s:3:"Ã";s:2:"Ã";s:3:"Ä";s:2:"Ä";s:3:"Å";s:2:"Å";s:3:"Ç";s:2:"Ç";s:3:"È";s:2:"È";s:3:"É";s:2:"É";s:3:"Ê";s:2:"Ê";s:3:"Ë";s:2:"Ë";s:3:"Ì";s:2:"Ì";s:3:"Í";s:2:"Í";s:3:"Î";s:2:"Î";s:3:"Ï";s:2:"Ï";s:3:"Ñ";s:2:"Ñ";s:3:"Ò";s:2:"Ò";s:3:"Ó";s:2:"Ó";s:3:"Ô";s:2:"Ô";s:3:"Õ";s:2:"Õ";s:3:"Ö";s:2:"Ö";s:3:"Ù";s:2:"Ù";s:3:"Ú";s:2:"Ú";s:3:"Û";s:2:"Û";s:3:"Ü";s:2:"Ü";s:3:"Ý";s:2:"Ý";s:3:"à";s:2:"à";s:3:"á";s:2:"á";s:3:"â";s:2:"â";s:3:"ã";s:2:"ã";s:3:"ä";s:2:"ä";s:3:"å";s:2:"å";s:3:"ç";s:2:"ç";s:3:"è";s:2:"è";s:3:"é";s:2:"é";s:3:"ê";s:2:"ê";s:3:"ë";s:2:"ë";s:3:"ì";s:2:"ì";s:3:"í";s:2:"í";s:3:"î";s:2:"î";s:3:"ï";s:2:"ï";s:3:"ñ";s:2:"ñ";s:3:"ò";s:2:"ò";s:3:"ó";s:2:"ó";s:3:"ô";s:2:"ô";s:3:"õ";s:2:"õ";s:3:"ö";s:2:"ö";s:3:"ù";s:2:"ù";s:3:"ú";s:2:"ú";s:3:"û";s:2:"û";s:3:"ü";s:2:"ü";s:3:"ý";s:2:"ý";s:3:"ÿ";s:2:"ÿ";s:3:"Ā";s:2:"Ā";s:3:"ā";s:2:"ā";s:3:"Ă";s:2:"Ă";s:3:"ă";s:2:"ă";s:3:"Ą";s:2:"Ą";s:3:"ą";s:2:"ą";s:3:"Ć";s:2:"Ć";s:3:"ć";s:2:"ć";s:3:"Ĉ";s:2:"Ĉ";s:3:"ĉ";s:2:"ĉ";s:3:"Ċ";s:2:"Ċ";s:3:"ċ";s:2:"ċ";s:3:"Č";s:2:"Č";s:3:"č";s:2:"č";s:3:"Ď";s:2:"Ď";s:3:"ď";s:2:"ď";s:3:"Ē";s:2:"Ē";s:3:"ē";s:2:"ē";s:3:"Ĕ";s:2:"Ĕ";s:3:"ĕ";s:2:"ĕ";s:3:"Ė";s:2:"Ė";s:3:"ė";s:2:"ė";s:3:"Ę";s:2:"Ę";s:3:"ę";s:2:"ę";s:3:"Ě";s:2:"Ě";s:3:"ě";s:2:"ě";s:3:"Ĝ";s:2:"Ĝ";s:3:"ĝ";s:2:"ĝ";s:3:"Ğ";s:2:"Ğ";s:3:"ğ";s:2:"ğ";s:3:"Ġ";s:2:"Ġ";s:3:"ġ";s:2:"ġ";s:3:"Ģ";s:2:"Ģ";s:3:"ģ";s:2:"ģ";s:3:"Ĥ";s:2:"Ĥ";s:3:"ĥ";s:2:"ĥ";s:3:"Ĩ";s:2:"Ĩ";s:3:"ĩ";s:2:"ĩ";s:3:"Ī";s:2:"Ī";s:3:"ī";s:2:"ī";s:3:"Ĭ";s:2:"Ĭ";s:3:"ĭ";s:2:"ĭ";s:3:"Į";s:2:"Į";s:3:"į";s:2:"į";s:3:"İ";s:2:"İ";s:3:"Ĵ";s:2:"Ĵ";s:3:"ĵ";s:2:"ĵ";s:3:"Ķ";s:2:"Ķ";s:3:"ķ";s:2:"ķ";s:3:"Ĺ";s:2:"Ĺ";s:3:"ĺ";s:2:"ĺ";s:3:"Ļ";s:2:"Ļ";s:3:"ļ";s:2:"ļ";s:3:"Ľ";s:2:"Ľ";s:3:"ľ";s:2:"ľ";s:3:"Ń";s:2:"Ń";s:3:"ń";s:2:"ń";s:3:"Ņ";s:2:"Ņ";s:3:"ņ";s:2:"ņ";s:3:"Ň";s:2:"Ň";s:3:"ň";s:2:"ň";s:3:"Ō";s:2:"Ō";s:3:"ō";s:2:"ō";s:3:"Ŏ";s:2:"Ŏ";s:3:"ŏ";s:2:"ŏ";s:3:"Ő";s:2:"Ő";s:3:"ő";s:2:"ő";s:3:"Ŕ";s:2:"Ŕ";s:3:"ŕ";s:2:"ŕ";s:3:"Ŗ";s:2:"Ŗ";s:3:"ŗ";s:2:"ŗ";s:3:"Ř";s:2:"Ř";s:3:"ř";s:2:"ř";s:3:"Ś";s:2:"Ś";s:3:"ś";s:2:"ś";s:3:"Ŝ";s:2:"Ŝ";s:3:"ŝ";s:2:"ŝ";s:3:"Ş";s:2:"Ş";s:3:"ş";s:2:"ş";s:3:"Š";s:2:"Š";s:3:"š";s:2:"š";s:3:"Ţ";s:2:"Ţ";s:3:"ţ";s:2:"ţ";s:3:"Ť";s:2:"Ť";s:3:"ť";s:2:"ť";s:3:"Ũ";s:2:"Ũ";s:3:"ũ";s:2:"ũ";s:3:"Ū";s:2:"Ū";s:3:"ū";s:2:"ū";s:3:"Ŭ";s:2:"Ŭ";s:3:"ŭ";s:2:"ŭ";s:3:"Ů";s:2:"Ů";s:3:"ů";s:2:"ů";s:3:"Ű";s:2:"Ű";s:3:"ű";s:2:"ű";s:3:"Ų";s:2:"Ų";s:3:"ų";s:2:"ų";s:3:"Ŵ";s:2:"Ŵ";s:3:"ŵ";s:2:"ŵ";s:3:"Ŷ";s:2:"Ŷ";s:3:"ŷ";s:2:"ŷ";s:3:"Ÿ";s:2:"Ÿ";s:3:"Ź";s:2:"Ź";s:3:"ź";s:2:"ź";s:3:"Ż";s:2:"Ż";s:3:"ż";s:2:"ż";s:3:"Ž";s:2:"Ž";s:3:"ž";s:2:"ž";s:3:"Ơ";s:2:"Ơ";s:3:"ơ";s:2:"ơ";s:3:"Ư";s:2:"Ư";s:3:"ư";s:2:"ư";s:3:"Ǎ";s:2:"Ǎ";s:3:"ǎ";s:2:"ǎ";s:3:"Ǐ";s:2:"Ǐ";s:3:"ǐ";s:2:"ǐ";s:3:"Ǒ";s:2:"Ǒ";s:3:"ǒ";s:2:"ǒ";s:3:"Ǔ";s:2:"Ǔ";s:3:"ǔ";s:2:"ǔ";s:4:"Ǖ";s:2:"Ǖ";s:4:"ǖ";s:2:"ǖ";s:4:"Ǘ";s:2:"Ǘ";s:4:"ǘ";s:2:"ǘ";s:4:"Ǚ";s:2:"Ǚ";s:4:"ǚ";s:2:"ǚ";s:4:"Ǜ";s:2:"Ǜ";s:4:"ǜ";s:2:"ǜ";s:4:"Ǟ";s:2:"Ǟ";s:4:"ǟ";s:2:"ǟ";s:4:"Ǡ";s:2:"Ǡ";s:4:"ǡ";s:2:"ǡ";s:4:"Ǣ";s:2:"Ǣ";s:4:"ǣ";s:2:"ǣ";s:3:"Ǧ";s:2:"Ǧ";s:3:"ǧ";s:2:"ǧ";s:3:"Ǩ";s:2:"Ǩ";s:3:"ǩ";s:2:"ǩ";s:3:"Ǫ";s:2:"Ǫ";s:3:"ǫ";s:2:"ǫ";s:4:"Ǭ";s:2:"Ǭ";s:4:"ǭ";s:2:"ǭ";s:4:"Ǯ";s:2:"Ǯ";s:4:"ǯ";s:2:"ǯ";s:3:"ǰ";s:2:"ǰ";s:3:"Ǵ";s:2:"Ǵ";s:3:"ǵ";s:2:"ǵ";s:3:"Ǹ";s:2:"Ǹ";s:3:"ǹ";s:2:"ǹ";s:4:"Ǻ";s:2:"Ǻ";s:4:"ǻ";s:2:"ǻ";s:4:"Ǽ";s:2:"Ǽ";s:4:"ǽ";s:2:"ǽ";s:4:"Ǿ";s:2:"Ǿ";s:4:"ǿ";s:2:"ǿ";s:3:"Ȁ";s:2:"Ȁ";s:3:"ȁ";s:2:"ȁ";s:3:"Ȃ";s:2:"Ȃ";s:3:"ȃ";s:2:"ȃ";s:3:"Ȅ";s:2:"Ȅ";s:3:"ȅ";s:2:"ȅ";s:3:"Ȇ";s:2:"Ȇ";s:3:"ȇ";s:2:"ȇ";s:3:"Ȉ";s:2:"Ȉ";s:3:"ȉ";s:2:"ȉ";s:3:"Ȋ";s:2:"Ȋ";s:3:"ȋ";s:2:"ȋ";s:3:"Ȍ";s:2:"Ȍ";s:3:"ȍ";s:2:"ȍ";s:3:"Ȏ";s:2:"Ȏ";s:3:"ȏ";s:2:"ȏ";s:3:"Ȑ";s:2:"Ȑ";s:3:"ȑ";s:2:"ȑ";s:3:"Ȓ";s:2:"Ȓ";s:3:"ȓ";s:2:"ȓ";s:3:"Ȕ";s:2:"Ȕ";s:3:"ȕ";s:2:"ȕ";s:3:"Ȗ";s:2:"Ȗ";s:3:"ȗ";s:2:"ȗ";s:3:"Ș";s:2:"Ș";s:3:"ș";s:2:"ș";s:3:"Ț";s:2:"Ț";s:3:"ț";s:2:"ț";s:3:"Ȟ";s:2:"Ȟ";s:3:"ȟ";s:2:"ȟ";s:3:"Ȧ";s:2:"Ȧ";s:3:"ȧ";s:2:"ȧ";s:3:"Ȩ";s:2:"Ȩ";s:3:"ȩ";s:2:"ȩ";s:4:"Ȫ";s:2:"Ȫ";s:4:"ȫ";s:2:"ȫ";s:4:"Ȭ";s:2:"Ȭ";s:4:"ȭ";s:2:"ȭ";s:3:"Ȯ";s:2:"Ȯ";s:3:"ȯ";s:2:"ȯ";s:4:"Ȱ";s:2:"Ȱ";s:4:"ȱ";s:2:"ȱ";s:3:"Ȳ";s:2:"Ȳ";s:3:"ȳ";s:2:"ȳ";s:2:"̀";s:2:"̀";s:2:"́";s:2:"́";s:2:"̓";s:2:"̓";s:4:"̈́";s:2:"̈́";s:2:"ʹ";s:2:"ʹ";s:1:";";s:2:";";s:4:"΅";s:2:"΅";s:4:"Ά";s:2:"Ά";s:2:"·";s:2:"·";s:4:"Έ";s:2:"Έ";s:4:"Ή";s:2:"Ή";s:4:"Ί";s:2:"Ί";s:4:"Ό";s:2:"Ό";s:4:"Ύ";s:2:"Ύ";s:4:"Ώ";s:2:"Ώ";s:4:"ΐ";s:2:"ΐ";s:4:"Ϊ";s:2:"Ϊ";s:4:"Ϋ";s:2:"Ϋ";s:4:"ά";s:2:"ά";s:4:"έ";s:2:"έ";s:4:"ή";s:2:"ή";s:4:"ί";s:2:"ί";s:4:"ΰ";s:2:"ΰ";s:4:"ϊ";s:2:"ϊ";s:4:"ϋ";s:2:"ϋ";s:4:"ό";s:2:"ό";s:4:"ύ";s:2:"ύ";s:4:"ώ";s:2:"ώ";s:4:"ϓ";s:2:"ϓ";s:4:"ϔ";s:2:"ϔ";s:4:"Ѐ";s:2:"Ѐ";s:4:"Ё";s:2:"Ё";s:4:"Ѓ";s:2:"Ѓ";s:4:"Ї";s:2:"Ї";s:4:"Ќ";s:2:"Ќ";s:4:"Ѝ";s:2:"Ѝ";s:4:"Ў";s:2:"Ў";s:4:"Й";s:2:"Й";s:4:"й";s:2:"й";s:4:"ѐ";s:2:"ѐ";s:4:"ё";s:2:"ё";s:4:"ѓ";s:2:"ѓ";s:4:"ї";s:2:"ї";s:4:"ќ";s:2:"ќ";s:4:"ѝ";s:2:"ѝ";s:4:"ў";s:2:"ў";s:4:"Ѷ";s:2:"Ѷ";s:4:"ѷ";s:2:"ѷ";s:4:"Ӂ";s:2:"Ӂ";s:4:"ӂ";s:2:"ӂ";s:4:"Ӑ";s:2:"Ӑ";s:4:"ӑ";s:2:"ӑ";s:4:"Ӓ";s:2:"Ӓ";s:4:"ӓ";s:2:"ӓ";s:4:"Ӗ";s:2:"Ӗ";s:4:"ӗ";s:2:"ӗ";s:4:"Ӛ";s:2:"Ӛ";s:4:"ӛ";s:2:"ӛ";s:4:"Ӝ";s:2:"Ӝ";s:4:"ӝ";s:2:"ӝ";s:4:"Ӟ";s:2:"Ӟ";s:4:"ӟ";s:2:"ӟ";s:4:"Ӣ";s:2:"Ӣ";s:4:"ӣ";s:2:"ӣ";s:4:"Ӥ";s:2:"Ӥ";s:4:"ӥ";s:2:"ӥ";s:4:"Ӧ";s:2:"Ӧ";s:4:"ӧ";s:2:"ӧ";s:4:"Ӫ";s:2:"Ӫ";s:4:"ӫ";s:2:"ӫ";s:4:"Ӭ";s:2:"Ӭ";s:4:"ӭ";s:2:"ӭ";s:4:"Ӯ";s:2:"Ӯ";s:4:"ӯ";s:2:"ӯ";s:4:"Ӱ";s:2:"Ӱ";s:4:"ӱ";s:2:"ӱ";s:4:"Ӳ";s:2:"Ӳ";s:4:"ӳ";s:2:"ӳ";s:4:"Ӵ";s:2:"Ӵ";s:4:"ӵ";s:2:"ӵ";s:4:"Ӹ";s:2:"Ӹ";s:4:"ӹ";s:2:"ӹ";s:4:"آ";s:2:"آ";s:4:"أ";s:2:"أ";s:4:"ؤ";s:2:"ؤ";s:4:"إ";s:2:"إ";s:4:"ئ";s:2:"ئ";s:4:"ۀ";s:2:"ۀ";s:4:"ۂ";s:2:"ۂ";s:4:"ۓ";s:2:"ۓ";s:6:"ऩ";s:3:"ऩ";s:6:"ऱ";s:3:"ऱ";s:6:"ऴ";s:3:"ऴ";s:6:"ো";s:3:"ো";s:6:"ৌ";s:3:"ৌ";s:6:"ୈ";s:3:"ୈ";s:6:"ୋ";s:3:"ୋ";s:6:"ୌ";s:3:"ୌ";s:6:"ஔ";s:3:"ஔ";s:6:"ொ";s:3:"ொ";s:6:"ோ";s:3:"ோ";s:6:"ௌ";s:3:"ௌ";s:6:"ై";s:3:"ై";s:6:"ೀ";s:3:"ೀ";s:6:"ೇ";s:3:"ೇ";s:6:"ೈ";s:3:"ೈ";s:6:"ೊ";s:3:"ೊ";s:6:"ೋ";s:3:"ೋ";s:6:"ൊ";s:3:"ൊ";s:6:"ോ";s:3:"ോ";s:6:"ൌ";s:3:"ൌ";s:6:"ේ";s:3:"ේ";s:6:"ො";s:3:"ො";s:6:"ෝ";s:3:"ෝ";s:6:"ෞ";s:3:"ෞ";s:6:"ཱི";s:3:"ཱི";s:6:"ཱུ";s:3:"ཱུ";s:6:"ཱྀ";s:3:"ཱྀ";s:6:"ဦ";s:3:"ဦ";s:6:"ᬆ";s:3:"ᬆ";s:6:"ᬈ";s:3:"ᬈ";s:6:"ᬊ";s:3:"ᬊ";s:6:"ᬌ";s:3:"ᬌ";s:6:"ᬎ";s:3:"ᬎ";s:6:"ᬒ";s:3:"ᬒ";s:6:"ᬻ";s:3:"ᬻ";s:6:"ᬽ";s:3:"ᬽ";s:6:"ᭀ";s:3:"ᭀ";s:6:"ᭁ";s:3:"ᭁ";s:6:"ᭃ";s:3:"ᭃ";s:3:"Ḁ";s:3:"Ḁ";s:3:"ḁ";s:3:"ḁ";s:3:"Ḃ";s:3:"Ḃ";s:3:"ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"Ḅ";s:3:"ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"Ḇ";s:3:"ḇ";s:3:"ḇ";s:4:"Ḉ";s:3:"Ḉ";s:4:"ḉ";s:3:"ḉ";s:3:"Ḋ";s:3:"Ḋ";s:3:"ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"Ḍ";s:3:"ḍ";s:3:"ḍ";s:3:"Ḏ";s:3:"Ḏ";s:3:"ḏ";s:3:"ḏ";s:3:"Ḑ";s:3:"Ḑ";s:3:"ḑ";s:3:"ḑ";s:3:"Ḓ";s:3:"Ḓ";s:3:"ḓ";s:3:"ḓ";s:4:"Ḕ";s:3:"Ḕ";s:4:"ḕ";s:3:"ḕ";s:4:"Ḗ";s:3:"Ḗ";s:4:"ḗ";s:3:"ḗ";s:3:"Ḙ";s:3:"Ḙ";s:3:"ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"Ḛ";s:3:"ḛ";s:3:"ḛ";s:4:"Ḝ";s:3:"Ḝ";s:4:"ḝ";s:3:"ḝ";s:3:"Ḟ";s:3:"Ḟ";s:3:"ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"Ḡ";s:3:"ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"Ḣ";s:3:"ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"Ḥ";s:3:"ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"Ḧ";s:3:"ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"Ḩ";s:3:"ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"Ḫ";s:3:"ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"Ḭ";s:3:"ḭ";s:3:"ḭ";s:4:"Ḯ";s:3:"Ḯ";s:4:"ḯ";s:3:"ḯ";s:3:"Ḱ";s:3:"Ḱ";s:3:"ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"Ḳ";s:3:"ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"Ḵ";s:3:"ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"Ḷ";s:3:"ḷ";s:3:"ḷ";s:5:"Ḹ";s:3:"Ḹ";s:5:"ḹ";s:3:"ḹ";s:3:"Ḻ";s:3:"Ḻ";s:3:"ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"Ḽ";s:3:"ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"Ḿ";s:3:"ḿ";s:3:"ḿ";s:3:"Ṁ";s:3:"Ṁ";s:3:"ṁ";s:3:"ṁ";s:3:"Ṃ";s:3:"Ṃ";s:3:"ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"Ṅ";s:3:"ṅ";s:3:"ṅ";s:3:"Ṇ";s:3:"Ṇ";s:3:"ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"Ṉ";s:3:"ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"Ṋ";s:3:"ṋ";s:3:"ṋ";s:4:"Ṍ";s:3:"Ṍ";s:4:"ṍ";s:3:"ṍ";s:4:"Ṏ";s:3:"Ṏ";s:4:"ṏ";s:3:"ṏ";s:4:"Ṑ";s:3:"Ṑ";s:4:"ṑ";s:3:"ṑ";s:4:"Ṓ";s:3:"Ṓ";s:4:"ṓ";s:3:"ṓ";s:3:"Ṕ";s:3:"Ṕ";s:3:"ṕ";s:3:"ṕ";s:3:"Ṗ";s:3:"Ṗ";s:3:"ṗ";s:3:"ṗ";s:3:"Ṙ";s:3:"Ṙ";s:3:"ṙ";s:3:"ṙ";s:3:"Ṛ";s:3:"Ṛ";s:3:"ṛ";s:3:"ṛ";s:5:"Ṝ";s:3:"Ṝ";s:5:"ṝ";s:3:"ṝ";s:3:"Ṟ";s:3:"Ṟ";s:3:"ṟ";s:3:"ṟ";s:3:"Ṡ";s:3:"Ṡ";s:3:"ṡ";s:3:"ṡ";s:3:"Ṣ";s:3:"Ṣ";s:3:"ṣ";s:3:"ṣ";s:4:"Ṥ";s:3:"Ṥ";s:4:"ṥ";s:3:"ṥ";s:4:"Ṧ";s:3:"Ṧ";s:4:"ṧ";s:3:"ṧ";s:5:"Ṩ";s:3:"Ṩ";s:5:"ṩ";s:3:"ṩ";s:3:"Ṫ";s:3:"Ṫ";s:3:"ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"Ṭ";s:3:"ṭ";s:3:"ṭ";s:3:"Ṯ";s:3:"Ṯ";s:3:"ṯ";s:3:"ṯ";s:3:"Ṱ";s:3:"Ṱ";s:3:"ṱ";s:3:"ṱ";s:3:"Ṳ";s:3:"Ṳ";s:3:"ṳ";s:3:"ṳ";s:3:"Ṵ";s:3:"Ṵ";s:3:"ṵ";s:3:"ṵ";s:3:"Ṷ";s:3:"Ṷ";s:3:"ṷ";s:3:"ṷ";s:4:"Ṹ";s:3:"Ṹ";s:4:"ṹ";s:3:"ṹ";s:4:"Ṻ";s:3:"Ṻ";s:4:"ṻ";s:3:"ṻ";s:3:"Ṽ";s:3:"Ṽ";s:3:"ṽ";s:3:"ṽ";s:3:"Ṿ";s:3:"Ṿ";s:3:"ṿ";s:3:"ṿ";s:3:"Ẁ";s:3:"Ẁ";s:3:"ẁ";s:3:"ẁ";s:3:"Ẃ";s:3:"Ẃ";s:3:"ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"Ẅ";s:3:"ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"Ẇ";s:3:"ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"Ẉ";s:3:"ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"Ẋ";s:3:"ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"Ẍ";s:3:"ẍ";s:3:"ẍ";s:3:"Ẏ";s:3:"Ẏ";s:3:"ẏ";s:3:"ẏ";s:3:"Ẑ";s:3:"Ẑ";s:3:"ẑ";s:3:"ẑ";s:3:"Ẓ";s:3:"Ẓ";s:3:"ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"Ẕ";s:3:"ẕ";s:3:"ẕ";s:3:"ẖ";s:3:"ẖ";s:3:"ẗ";s:3:"ẗ";s:3:"ẘ";s:3:"ẘ";s:3:"ẙ";s:3:"ẙ";s:4:"ẛ";s:3:"ẛ";s:3:"Ạ";s:3:"Ạ";s:3:"ạ";s:3:"ạ";s:3:"Ả";s:3:"Ả";s:3:"ả";s:3:"ả";s:4:"Ấ";s:3:"Ấ";s:4:"ấ";s:3:"ấ";s:4:"Ầ";s:3:"Ầ";s:4:"ầ";s:3:"ầ";s:4:"Ẩ";s:3:"Ẩ";s:4:"ẩ";s:3:"ẩ";s:4:"Ẫ";s:3:"Ẫ";s:4:"ẫ";s:3:"ẫ";s:5:"Ậ";s:3:"Ậ";s:5:"ậ";s:3:"ậ";s:4:"Ắ";s:3:"Ắ";s:4:"ắ";s:3:"ắ";s:4:"Ằ";s:3:"Ằ";s:4:"ằ";s:3:"ằ";s:4:"Ẳ";s:3:"Ẳ";s:4:"ẳ";s:3:"ẳ";s:4:"Ẵ";s:3:"Ẵ";s:4:"ẵ";s:3:"ẵ";s:5:"Ặ";s:3:"Ặ";s:5:"ặ";s:3:"ặ";s:3:"Ẹ";s:3:"Ẹ";s:3:"ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"Ẻ";s:3:"ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"Ẽ";s:3:"ẽ";s:3:"ẽ";s:4:"Ế";s:3:"Ế";s:4:"ế";s:3:"ế";s:4:"Ề";s:3:"Ề";s:4:"ề";s:3:"ề";s:4:"Ể";s:3:"Ể";s:4:"ể";s:3:"ể";s:4:"Ễ";s:3:"Ễ";s:4:"ễ";s:3:"ễ";s:5:"Ệ";s:3:"Ệ";s:5:"ệ";s:3:"ệ";s:3:"Ỉ";s:3:"Ỉ";s:3:"ỉ";s:3:"ỉ";s:3:"Ị";s:3:"Ị";s:3:"ị";s:3:"ị";s:3:"Ọ";s:3:"Ọ";s:3:"ọ";s:3:"ọ";s:3:"Ỏ";s:3:"Ỏ";s:3:"ỏ";s:3:"ỏ";s:4:"Ố";s:3:"Ố";s:4:"ố";s:3:"ố";s:4:"Ồ";s:3:"Ồ";s:4:"ồ";s:3:"ồ";s:4:"Ổ";s:3:"Ổ";s:4:"ổ";s:3:"ổ";s:4:"Ỗ";s:3:"Ỗ";s:4:"ỗ";s:3:"ỗ";s:5:"Ộ";s:3:"Ộ";s:5:"ộ";s:3:"ộ";s:4:"Ớ";s:3:"Ớ";s:4:"ớ";s:3:"ớ";s:4:"Ờ";s:3:"Ờ";s:4:"ờ";s:3:"ờ";s:4:"Ở";s:3:"Ở";s:4:"ở";s:3:"ở";s:4:"Ỡ";s:3:"Ỡ";s:4:"ỡ";s:3:"ỡ";s:4:"Ợ";s:3:"Ợ";s:4:"ợ";s:3:"ợ";s:3:"Ụ";s:3:"Ụ";s:3:"ụ";s:3:"ụ";s:3:"Ủ";s:3:"Ủ";s:3:"ủ";s:3:"ủ";s:4:"Ứ";s:3:"Ứ";s:4:"ứ";s:3:"ứ";s:4:"Ừ";s:3:"Ừ";s:4:"ừ";s:3:"ừ";s:4:"Ử";s:3:"Ử";s:4:"ử";s:3:"ử";s:4:"Ữ";s:3:"Ữ";s:4:"ữ";s:3:"ữ";s:4:"Ự";s:3:"Ự";s:4:"ự";s:3:"ự";s:3:"Ỳ";s:3:"Ỳ";s:3:"ỳ";s:3:"ỳ";s:3:"Ỵ";s:3:"Ỵ";s:3:"ỵ";s:3:"ỵ";s:3:"Ỷ";s:3:"Ỷ";s:3:"ỷ";s:3:"ỷ";s:3:"Ỹ";s:3:"Ỹ";s:3:"ỹ";s:3:"ỹ";s:4:"ἀ";s:3:"ἀ";s:4:"ἁ";s:3:"ἁ";s:5:"ἂ";s:3:"ἂ";s:5:"ἃ";s:3:"ἃ";s:5:"ἄ";s:3:"ἄ";s:5:"ἅ";s:3:"ἅ";s:5:"ἆ";s:3:"ἆ";s:5:"ἇ";s:3:"ἇ";s:4:"Ἀ";s:3:"Ἀ";s:4:"Ἁ";s:3:"Ἁ";s:5:"Ἂ";s:3:"Ἂ";s:5:"Ἃ";s:3:"Ἃ";s:5:"Ἄ";s:3:"Ἄ";s:5:"Ἅ";s:3:"Ἅ";s:5:"Ἆ";s:3:"Ἆ";s:5:"Ἇ";s:3:"Ἇ";s:4:"ἐ";s:3:"ἐ";s:4:"ἑ";s:3:"ἑ";s:5:"ἒ";s:3:"ἒ";s:5:"ἓ";s:3:"ἓ";s:5:"ἔ";s:3:"ἔ";s:5:"ἕ";s:3:"ἕ";s:4:"Ἐ";s:3:"Ἐ";s:4:"Ἑ";s:3:"Ἑ";s:5:"Ἒ";s:3:"Ἒ";s:5:"Ἓ";s:3:"Ἓ";s:5:"Ἔ";s:3:"Ἔ";s:5:"Ἕ";s:3:"Ἕ";s:4:"ἠ";s:3:"ἠ";s:4:"ἡ";s:3:"ἡ";s:5:"ἢ";s:3:"ἢ";s:5:"ἣ";s:3:"ἣ";s:5:"ἤ";s:3:"ἤ";s:5:"ἥ";s:3:"ἥ";s:5:"ἦ";s:3:"ἦ";s:5:"ἧ";s:3:"ἧ";s:4:"Ἠ";s:3:"Ἠ";s:4:"Ἡ";s:3:"Ἡ";s:5:"Ἢ";s:3:"Ἢ";s:5:"Ἣ";s:3:"Ἣ";s:5:"Ἤ";s:3:"Ἤ";s:5:"Ἥ";s:3:"Ἥ";s:5:"Ἦ";s:3:"Ἦ";s:5:"Ἧ";s:3:"Ἧ";s:4:"ἰ";s:3:"ἰ";s:4:"ἱ";s:3:"ἱ";s:5:"ἲ";s:3:"ἲ";s:5:"ἳ";s:3:"ἳ";s:5:"ἴ";s:3:"ἴ";s:5:"ἵ";s:3:"ἵ";s:5:"ἶ";s:3:"ἶ";s:5:"ἷ";s:3:"ἷ";s:4:"Ἰ";s:3:"Ἰ";s:4:"Ἱ";s:3:"Ἱ";s:5:"Ἲ";s:3:"Ἲ";s:5:"Ἳ";s:3:"Ἳ";s:5:"Ἴ";s:3:"Ἴ";s:5:"Ἵ";s:3:"Ἵ";s:5:"Ἶ";s:3:"Ἶ";s:5:"Ἷ";s:3:"Ἷ";s:4:"ὀ";s:3:"ὀ";s:4:"ὁ";s:3:"ὁ";s:5:"ὂ";s:3:"ὂ";s:5:"ὃ";s:3:"ὃ";s:5:"ὄ";s:3:"ὄ";s:5:"ὅ";s:3:"ὅ";s:4:"Ὀ";s:3:"Ὀ";s:4:"Ὁ";s:3:"Ὁ";s:5:"Ὂ";s:3:"Ὂ";s:5:"Ὃ";s:3:"Ὃ";s:5:"Ὄ";s:3:"Ὄ";s:5:"Ὅ";s:3:"Ὅ";s:4:"ὐ";s:3:"ὐ";s:4:"ὑ";s:3:"ὑ";s:5:"ὒ";s:3:"ὒ";s:5:"ὓ";s:3:"ὓ";s:5:"ὔ";s:3:"ὔ";s:5:"ὕ";s:3:"ὕ";s:5:"ὖ";s:3:"ὖ";s:5:"ὗ";s:3:"ὗ";s:4:"Ὑ";s:3:"Ὑ";s:5:"Ὓ";s:3:"Ὓ";s:5:"Ὕ";s:3:"Ὕ";s:5:"Ὗ";s:3:"Ὗ";s:4:"ὠ";s:3:"ὠ";s:4:"ὡ";s:3:"ὡ";s:5:"ὢ";s:3:"ὢ";s:5:"ὣ";s:3:"ὣ";s:5:"ὤ";s:3:"ὤ";s:5:"ὥ";s:3:"ὥ";s:5:"ὦ";s:3:"ὦ";s:5:"ὧ";s:3:"ὧ";s:4:"Ὠ";s:3:"Ὠ";s:4:"Ὡ";s:3:"Ὡ";s:5:"Ὢ";s:3:"Ὢ";s:5:"Ὣ";s:3:"Ὣ";s:5:"Ὤ";s:3:"Ὤ";s:5:"Ὥ";s:3:"Ὥ";s:5:"Ὦ";s:3:"Ὦ";s:5:"Ὧ";s:3:"Ὧ";s:4:"ὰ";s:3:"ὰ";s:2:"ά";s:3:"ά";s:4:"ὲ";s:3:"ὲ";s:2:"έ";s:3:"έ";s:4:"ὴ";s:3:"ὴ";s:2:"ή";s:3:"ή";s:4:"ὶ";s:3:"ὶ";s:2:"ί";s:3:"ί";s:4:"ὸ";s:3:"ὸ";s:2:"ό";s:3:"ό";s:4:"ὺ";s:3:"ὺ";s:2:"ύ";s:3:"ύ";s:4:"ὼ";s:3:"ὼ";s:2:"ώ";s:3:"ώ";s:5:"ᾀ";s:3:"ᾀ";s:5:"ᾁ";s:3:"ᾁ";s:5:"ᾂ";s:3:"ᾂ";s:5:"ᾃ";s:3:"ᾃ";s:5:"ᾄ";s:3:"ᾄ";s:5:"ᾅ";s:3:"ᾅ";s:5:"ᾆ";s:3:"ᾆ";s:5:"ᾇ";s:3:"ᾇ";s:5:"ᾈ";s:3:"ᾈ";s:5:"ᾉ";s:3:"ᾉ";s:5:"ᾊ";s:3:"ᾊ";s:5:"ᾋ";s:3:"ᾋ";s:5:"ᾌ";s:3:"ᾌ";s:5:"ᾍ";s:3:"ᾍ";s:5:"ᾎ";s:3:"ᾎ";s:5:"ᾏ";s:3:"ᾏ";s:5:"ᾐ";s:3:"ᾐ";s:5:"ᾑ";s:3:"ᾑ";s:5:"ᾒ";s:3:"ᾒ";s:5:"ᾓ";s:3:"ᾓ";s:5:"ᾔ";s:3:"ᾔ";s:5:"ᾕ";s:3:"ᾕ";s:5:"ᾖ";s:3:"ᾖ";s:5:"ᾗ";s:3:"ᾗ";s:5:"ᾘ";s:3:"ᾘ";s:5:"ᾙ";s:3:"ᾙ";s:5:"ᾚ";s:3:"ᾚ";s:5:"ᾛ";s:3:"ᾛ";s:5:"ᾜ";s:3:"ᾜ";s:5:"ᾝ";s:3:"ᾝ";s:5:"ᾞ";s:3:"ᾞ";s:5:"ᾟ";s:3:"ᾟ";s:5:"ᾠ";s:3:"ᾠ";s:5:"ᾡ";s:3:"ᾡ";s:5:"ᾢ";s:3:"ᾢ";s:5:"ᾣ";s:3:"ᾣ";s:5:"ᾤ";s:3:"ᾤ";s:5:"ᾥ";s:3:"ᾥ";s:5:"ᾦ";s:3:"ᾦ";s:5:"ᾧ";s:3:"ᾧ";s:5:"ᾨ";s:3:"ᾨ";s:5:"ᾩ";s:3:"ᾩ";s:5:"ᾪ";s:3:"ᾪ";s:5:"ᾫ";s:3:"ᾫ";s:5:"ᾬ";s:3:"ᾬ";s:5:"ᾭ";s:3:"ᾭ";s:5:"ᾮ";s:3:"ᾮ";s:5:"ᾯ";s:3:"ᾯ";s:4:"ᾰ";s:3:"ᾰ";s:4:"ᾱ";s:3:"ᾱ";s:5:"ᾲ";s:3:"ᾲ";s:4:"ᾳ";s:3:"ᾳ";s:4:"ᾴ";s:3:"ᾴ";s:4:"ᾶ";s:3:"ᾶ";s:5:"ᾷ";s:3:"ᾷ";s:4:"Ᾰ";s:3:"Ᾰ";s:4:"Ᾱ";s:3:"Ᾱ";s:4:"Ὰ";s:3:"Ὰ";s:2:"Ά";s:3:"Ά";s:4:"ᾼ";s:3:"ᾼ";s:2:"ι";s:3:"ι";s:4:"῁";s:3:"῁";s:5:"ῂ";s:3:"ῂ";s:4:"ῃ";s:3:"ῃ";s:4:"ῄ";s:3:"ῄ";s:4:"ῆ";s:3:"ῆ";s:5:"ῇ";s:3:"ῇ";s:4:"Ὲ";s:3:"Ὲ";s:2:"Έ";s:3:"Έ";s:4:"Ὴ";s:3:"Ὴ";s:2:"Ή";s:3:"Ή";s:4:"ῌ";s:3:"ῌ";s:5:"῍";s:3:"῍";s:5:"῎";s:3:"῎";s:5:"῏";s:3:"῏";s:4:"ῐ";s:3:"ῐ";s:4:"ῑ";s:3:"ῑ";s:4:"ῒ";s:3:"ῒ";s:2:"ΐ";s:3:"ΐ";s:4:"ῖ";s:3:"ῖ";s:4:"ῗ";s:3:"ῗ";s:4:"Ῐ";s:3:"Ῐ";s:4:"Ῑ";s:3:"Ῑ";s:4:"Ὶ";s:3:"Ὶ";s:2:"Ί";s:3:"Ί";s:5:"῝";s:3:"῝";s:5:"῞";s:3:"῞";s:5:"῟";s:3:"῟";s:4:"ῠ";s:3:"ῠ";s:4:"ῡ";s:3:"ῡ";s:4:"ῢ";s:3:"ῢ";s:2:"ΰ";s:3:"ΰ";s:4:"ῤ";s:3:"ῤ";s:4:"ῥ";s:3:"ῥ";s:4:"ῦ";s:3:"ῦ";s:4:"ῧ";s:3:"ῧ";s:4:"Ῠ";s:3:"Ῠ";s:4:"Ῡ";s:3:"Ῡ";s:4:"Ὺ";s:3:"Ὺ";s:2:"Ύ";s:3:"Ύ";s:4:"Ῥ";s:3:"Ῥ";s:4:"῭";s:3:"῭";s:2:"΅";s:3:"΅";s:1:"`";s:3:"`";s:5:"ῲ";s:3:"ῲ";s:4:"ῳ";s:3:"ῳ";s:4:"ῴ";s:3:"ῴ";s:4:"ῶ";s:3:"ῶ";s:5:"ῷ";s:3:"ῷ";s:4:"Ὸ";s:3:"Ὸ";s:2:"Ό";s:3:"Ό";s:4:"Ὼ";s:3:"Ὼ";s:2:"Ώ";s:3:"Ώ";s:4:"ῼ";s:3:"ῼ";s:2:"´";s:3:"´";s:3:" ";s:3:" ";s:3:" ";s:3:" ";s:2:"Ω";s:3:"Ω";s:1:"K";s:3:"K";s:2:"Å";s:3:"Å";s:5:"↚";s:3:"↚";s:5:"↛";s:3:"↛";s:5:"↮";s:3:"↮";s:5:"⇍";s:3:"⇍";s:5:"⇎";s:3:"⇎";s:5:"⇏";s:3:"⇏";s:5:"∄";s:3:"∄";s:5:"∉";s:3:"∉";s:5:"∌";s:3:"∌";s:5:"∤";s:3:"∤";s:5:"∦";s:3:"∦";s:5:"≁";s:3:"≁";s:5:"≄";s:3:"≄";s:5:"≇";s:3:"≇";s:5:"≉";s:3:"≉";s:3:"≠";s:3:"≠";s:5:"≢";s:3:"≢";s:5:"≭";s:3:"≭";s:3:"≮";s:3:"≮";s:3:"≯";s:3:"≯";s:5:"≰";s:3:"≰";s:5:"≱";s:3:"≱";s:5:"≴";s:3:"≴";s:5:"≵";s:3:"≵";s:5:"≸";s:3:"≸";s:5:"≹";s:3:"≹";s:5:"⊀";s:3:"⊀";s:5:"⊁";s:3:"⊁";s:5:"⊄";s:3:"⊄";s:5:"⊅";s:3:"⊅";s:5:"⊈";s:3:"⊈";s:5:"⊉";s:3:"⊉";s:5:"⊬";s:3:"⊬";s:5:"⊭";s:3:"⊭";s:5:"⊮";s:3:"⊮";s:5:"⊯";s:3:"⊯";s:5:"⋠";s:3:"⋠";s:5:"⋡";s:3:"⋡";s:5:"⋢";s:3:"⋢";s:5:"⋣";s:3:"⋣";s:5:"⋪";s:3:"⋪";s:5:"⋫";s:3:"⋫";s:5:"⋬";s:3:"⋬";s:5:"⋭";s:3:"⋭";s:3:"〈";s:3:"〈";s:3:"〉";s:3:"〉";s:6:"が";s:3:"が";s:6:"ぎ";s:3:"ぎ";s:6:"ぐ";s:3:"ぐ";s:6:"げ";s:3:"げ";s:6:"ご";s:3:"ご";s:6:"ざ";s:3:"ざ";s:6:"じ";s:3:"じ";s:6:"ず";s:3:"ず";s:6:"ぜ";s:3:"ぜ";s:6:"ぞ";s:3:"ぞ";s:6:"だ";s:3:"だ";s:6:"ぢ";s:3:"ぢ";s:6:"づ";s:3:"づ";s:6:"で";s:3:"で";s:6:"ど";s:3:"ど";s:6:"ば";s:3:"ば";s:6:"ぱ";s:3:"ぱ";s:6:"び";s:3:"び";s:6:"ぴ";s:3:"ぴ";s:6:"ぶ";s:3:"ぶ";s:6:"ぷ";s:3:"ぷ";s:6:"べ";s:3:"べ";s:6:"ぺ";s:3:"ぺ";s:6:"ぼ";s:3:"ぼ";s:6:"ぽ";s:3:"ぽ";s:6:"ゔ";s:3:"ゔ";s:6:"ゞ";s:3:"ゞ";s:6:"ガ";s:3:"ガ";s:6:"ギ";s:3:"ギ";s:6:"グ";s:3:"グ";s:6:"ゲ";s:3:"ゲ";s:6:"ゴ";s:3:"ゴ";s:6:"ザ";s:3:"ザ";s:6:"ジ";s:3:"ジ";s:6:"ズ";s:3:"ズ";s:6:"ゼ";s:3:"ゼ";s:6:"ゾ";s:3:"ゾ";s:6:"ダ";s:3:"ダ";s:6:"ヂ";s:3:"ヂ";s:6:"ヅ";s:3:"ヅ";s:6:"デ";s:3:"デ";s:6:"ド";s:3:"ド";s:6:"バ";s:3:"バ";s:6:"パ";s:3:"パ";s:6:"ビ";s:3:"ビ";s:6:"ピ";s:3:"ピ";s:6:"ブ";s:3:"ブ";s:6:"プ";s:3:"プ";s:6:"ベ";s:3:"ベ";s:6:"ペ";s:3:"ペ";s:6:"ボ";s:3:"ボ";s:6:"ポ";s:3:"ポ";s:6:"ヴ";s:3:"ヴ";s:6:"ヷ";s:3:"ヷ";s:6:"ヸ";s:3:"ヸ";s:6:"ヹ";s:3:"ヹ";s:6:"ヺ";s:3:"ヺ";s:6:"ヾ";s:3:"ヾ";s:3:"豈";s:3:"豈";s:3:"更";s:3:"更";s:3:"車";s:3:"車";s:3:"賈";s:3:"賈";s:3:"滑";s:3:"滑";s:3:"串";s:3:"串";s:3:"句";s:3:"句";s:3:"龜";s:3:"龜";s:3:"契";s:3:"契";s:3:"金";s:3:"金";s:3:"喇";s:3:"喇";s:3:"奈";s:3:"奈";s:3:"懶";s:4:"懶";s:3:"癩";s:3:"癩";s:3:"羅";s:3:"羅";s:3:"蘿";s:3:"蘿";s:3:"螺";s:3:"螺";s:3:"裸";s:3:"裸";s:3:"邏";s:3:"邏";s:3:"樂";s:3:"樂";s:3:"洛";s:3:"洛";s:3:"烙";s:3:"烙";s:3:"珞";s:3:"珞";s:3:"落";s:3:"落";s:3:"酪";s:3:"酪";s:3:"駱";s:3:"駱";s:3:"亂";s:3:"亂";s:3:"卵";s:3:"卵";s:3:"欄";s:3:"欄";s:3:"爛";s:3:"爛";s:3:"蘭";s:3:"蘭";s:3:"鸞";s:3:"鸞";s:3:"嵐";s:3:"嵐";s:3:"濫";s:3:"濫";s:3:"藍";s:3:"藍";s:3:"襤";s:3:"襤";s:3:"拉";s:3:"拉";s:3:"臘";s:3:"臘";s:3:"蠟";s:3:"蠟";s:3:"廊";s:4:"廊";s:3:"朗";s:4:"朗";s:3:"浪";s:3:"浪";s:3:"狼";s:3:"狼";s:3:"郎";s:3:"郎";s:3:"來";s:3:"來";s:3:"冷";s:3:"冷";s:3:"勞";s:3:"勞";s:3:"擄";s:3:"擄";s:3:"櫓";s:3:"櫓";s:3:"爐";s:3:"爐";s:3:"盧";s:3:"盧";s:3:"老";s:3:"老";s:3:"蘆";s:3:"蘆";s:3:"虜";s:4:"虜";s:3:"路";s:3:"路";s:3:"露";s:3:"露";s:3:"魯";s:3:"魯";s:3:"鷺";s:3:"鷺";s:3:"碌";s:4:"碌";s:3:"祿";s:3:"祿";s:3:"綠";s:3:"綠";s:3:"菉";s:3:"菉";s:3:"錄";s:3:"錄";s:3:"鹿";s:3:"鹿";s:3:"論";s:3:"論";s:3:"壟";s:3:"壟";s:3:"弄";s:3:"弄";s:3:"籠";s:3:"籠";s:3:"聾";s:3:"聾";s:3:"牢";s:3:"牢";s:3:"磊";s:3:"磊";s:3:"賂";s:3:"賂";s:3:"雷";s:3:"雷";s:3:"壘";s:3:"壘";s:3:"屢";s:3:"屢";s:3:"樓";s:3:"樓";s:3:"淚";s:3:"淚";s:3:"漏";s:3:"漏";s:3:"累";s:3:"累";s:3:"縷";s:3:"縷";s:3:"陋";s:3:"陋";s:3:"勒";s:3:"勒";s:3:"肋";s:3:"肋";s:3:"凜";s:3:"凜";s:3:"凌";s:3:"凌";s:3:"稜";s:3:"稜";s:3:"綾";s:3:"綾";s:3:"菱";s:3:"菱";s:3:"陵";s:3:"陵";s:3:"讀";s:3:"讀";s:3:"拏";s:3:"拏";s:3:"諾";s:3:"諾";s:3:"丹";s:3:"丹";s:3:"寧";s:4:"寧";s:3:"怒";s:3:"怒";s:3:"率";s:3:"率";s:3:"異";s:4:"異";s:3:"北";s:4:"北";s:3:"磻";s:3:"磻";s:3:"便";s:3:"便";s:3:"復";s:3:"復";s:3:"不";s:3:"不";s:3:"泌";s:3:"泌";s:3:"數";s:3:"數";s:3:"索";s:3:"索";s:3:"參";s:3:"參";s:3:"塞";s:3:"塞";s:3:"省";s:3:"省";s:3:"葉";s:3:"葉";s:3:"說";s:3:"說";s:3:"殺";s:4:"殺";s:3:"辰";s:3:"辰";s:3:"沈";s:3:"沈";s:3:"拾";s:3:"拾";s:3:"若";s:4:"若";s:3:"掠";s:3:"掠";s:3:"略";s:3:"略";s:3:"亮";s:3:"亮";s:3:"兩";s:3:"兩";s:3:"凉";s:3:"凉";s:3:"梁";s:3:"梁";s:3:"糧";s:3:"糧";s:3:"良";s:3:"良";s:3:"諒";s:3:"諒";s:3:"量";s:3:"量";s:3:"勵";s:3:"勵";s:3:"呂";s:3:"呂";s:3:"女";s:3:"女";s:3:"廬";s:3:"廬";s:3:"旅";s:3:"旅";s:3:"濾";s:3:"濾";s:3:"礪";s:3:"礪";s:3:"閭";s:3:"閭";s:3:"驪";s:3:"驪";s:3:"麗";s:3:"麗";s:3:"黎";s:3:"黎";s:3:"力";s:3:"力";s:3:"曆";s:3:"曆";s:3:"歷";s:3:"歷";s:3:"轢";s:3:"轢";s:3:"年";s:3:"年";s:3:"憐";s:3:"憐";s:3:"戀";s:3:"戀";s:3:"撚";s:3:"撚";s:3:"漣";s:3:"漣";s:3:"煉";s:3:"煉";s:3:"璉";s:3:"璉";s:3:"秊";s:3:"秊";s:3:"練";s:3:"練";s:3:"聯";s:3:"聯";s:3:"輦";s:3:"輦";s:3:"蓮";s:3:"蓮";s:3:"連";s:3:"連";s:3:"鍊";s:3:"鍊";s:3:"列";s:3:"列";s:3:"劣";s:3:"劣";s:3:"咽";s:3:"咽";s:3:"烈";s:3:"烈";s:3:"裂";s:3:"裂";s:3:"廉";s:3:"廉";s:3:"念";s:3:"念";s:3:"捻";s:3:"捻";s:3:"殮";s:3:"殮";s:3:"簾";s:3:"簾";s:3:"獵";s:3:"獵";s:3:"令";s:3:"令";s:3:"囹";s:3:"囹";s:3:"嶺";s:3:"嶺";s:3:"怜";s:3:"怜";s:3:"玲";s:3:"玲";s:3:"瑩";s:3:"瑩";s:3:"羚";s:3:"羚";s:3:"聆";s:3:"聆";s:3:"鈴";s:3:"鈴";s:3:"零";s:3:"零";s:3:"靈";s:3:"靈";s:3:"領";s:3:"領";s:3:"例";s:3:"例";s:3:"禮";s:3:"禮";s:3:"醴";s:3:"醴";s:3:"隸";s:3:"隸";s:3:"惡";s:3:"惡";s:3:"了";s:3:"了";s:3:"僚";s:3:"僚";s:3:"寮";s:3:"寮";s:3:"尿";s:3:"尿";s:3:"料";s:3:"料";s:3:"燎";s:3:"燎";s:3:"療";s:3:"療";s:3:"蓼";s:3:"蓼";s:3:"遼";s:3:"遼";s:3:"龍";s:3:"龍";s:3:"暈";s:3:"暈";s:3:"阮";s:3:"阮";s:3:"劉";s:3:"劉";s:3:"杻";s:3:"杻";s:3:"柳";s:3:"柳";s:3:"流";s:4:"流";s:3:"溜";s:3:"溜";s:3:"琉";s:3:"琉";s:3:"留";s:3:"留";s:3:"硫";s:3:"硫";s:3:"紐";s:3:"紐";s:3:"類";s:3:"類";s:3:"六";s:3:"六";s:3:"戮";s:3:"戮";s:3:"陸";s:3:"陸";s:3:"倫";s:3:"倫";s:3:"崙";s:3:"崙";s:3:"淪";s:3:"淪";s:3:"輪";s:3:"輪";s:3:"律";s:3:"律";s:3:"慄";s:3:"慄";s:3:"栗";s:3:"栗";s:3:"隆";s:3:"隆";s:3:"利";s:3:"利";s:3:"吏";s:3:"吏";s:3:"履";s:3:"履";s:3:"易";s:3:"易";s:3:"李";s:3:"李";s:3:"梨";s:3:"梨";s:3:"泥";s:3:"泥";s:3:"理";s:3:"理";s:3:"痢";s:3:"痢";s:3:"罹";s:3:"罹";s:3:"裏";s:3:"裏";s:3:"裡";s:3:"裡";s:3:"里";s:3:"里";s:3:"離";s:3:"離";s:3:"匿";s:3:"匿";s:3:"溺";s:3:"溺";s:3:"吝";s:3:"吝";s:3:"燐";s:3:"燐";s:3:"璘";s:3:"璘";s:3:"藺";s:3:"藺";s:3:"隣";s:3:"隣";s:3:"鱗";s:3:"鱗";s:3:"麟";s:3:"麟";s:3:"林";s:3:"林";s:3:"淋";s:3:"淋";s:3:"臨";s:3:"臨";s:3:"立";s:3:"立";s:3:"笠";s:3:"笠";s:3:"粒";s:3:"粒";s:3:"狀";s:3:"狀";s:3:"炙";s:3:"炙";s:3:"識";s:3:"識";s:3:"什";s:3:"什";s:3:"茶";s:3:"茶";s:3:"刺";s:3:"刺";s:3:"切";s:4:"切";s:3:"度";s:3:"度";s:3:"拓";s:3:"拓";s:3:"糖";s:3:"糖";s:3:"宅";s:3:"宅";s:3:"洞";s:3:"洞";s:3:"暴";s:3:"暴";s:3:"輻";s:3:"輻";s:3:"行";s:3:"行";s:3:"降";s:3:"降";s:3:"見";s:3:"見";s:3:"廓";s:3:"廓";s:3:"兀";s:3:"兀";s:3:"嗀";s:3:"嗀";s:3:"塚";s:3:"塚";s:3:"晴";s:3:"晴";s:3:"凞";s:3:"凞";s:3:"猪";s:3:"猪";s:3:"益";s:3:"益";s:3:"礼";s:3:"礼";s:3:"神";s:3:"神";s:3:"祥";s:3:"祥";s:3:"福";s:4:"福";s:3:"靖";s:3:"靖";s:3:"精";s:3:"精";s:3:"羽";s:3:"羽";s:3:"蘒";s:3:"蘒";s:3:"諸";s:3:"諸";s:3:"逸";s:3:"逸";s:3:"都";s:3:"都";s:3:"飯";s:3:"飯";s:3:"飼";s:3:"飼";s:3:"館";s:3:"館";s:3:"鶴";s:3:"鶴";s:3:"侮";s:4:"侮";s:3:"僧";s:4:"僧";s:3:"免";s:4:"免";s:3:"勉";s:4:"勉";s:3:"勤";s:4:"勤";s:3:"卑";s:4:"卑";s:3:"喝";s:3:"喝";s:3:"嘆";s:4:"嘆";s:3:"器";s:3:"器";s:3:"塀";s:3:"塀";s:3:"墨";s:3:"墨";s:3:"層";s:3:"層";s:3:"屮";s:4:"屮";s:3:"悔";s:4:"悔";s:3:"慨";s:3:"慨";s:3:"憎";s:4:"憎";s:3:"懲";s:4:"懲";s:3:"敏";s:4:"敏";s:3:"既";s:3:"既";s:3:"暑";s:4:"暑";s:3:"梅";s:4:"梅";s:3:"海";s:4:"海";s:3:"渚";s:3:"渚";s:3:"漢";s:3:"漢";s:3:"煮";s:3:"煮";s:3:"爫";s:3:"爫";s:3:"琢";s:3:"琢";s:3:"碑";s:3:"碑";s:3:"社";s:3:"社";s:3:"祉";s:3:"祉";s:3:"祈";s:3:"祈";s:3:"祐";s:3:"祐";s:3:"祖";s:4:"祖";s:3:"祝";s:3:"祝";s:3:"禍";s:3:"禍";s:3:"禎";s:3:"禎";s:3:"穀";s:4:"穀";s:3:"突";s:3:"突";s:3:"節";s:3:"節";s:3:"縉";s:3:"縉";s:3:"繁";s:3:"繁";s:3:"署";s:3:"署";s:3:"者";s:4:"者";s:3:"臭";s:3:"臭";s:3:"艹";s:3:"艹";s:3:"著";s:4:"著";s:3:"褐";s:3:"褐";s:3:"視";s:3:"視";s:3:"謁";s:3:"謁";s:3:"謹";s:3:"謹";s:3:"賓";s:3:"賓";s:3:"贈";s:3:"贈";s:3:"辶";s:3:"辶";s:3:"難";s:3:"難";s:3:"響";s:3:"響";s:3:"頻";s:3:"頻";s:3:"恵";s:3:"恵";s:4:"𤋮";s:3:"𤋮";s:3:"舘";s:3:"舘";s:3:"並";s:3:"並";s:3:"况";s:4:"况";s:3:"全";s:3:"全";s:3:"侀";s:3:"侀";s:3:"充";s:3:"充";s:3:"冀";s:3:"冀";s:3:"勇";s:4:"勇";s:3:"勺";s:4:"勺";s:3:"啕";s:3:"啕";s:3:"喙";s:4:"喙";s:3:"嗢";s:3:"嗢";s:3:"墳";s:3:"墳";s:3:"奄";s:3:"奄";s:3:"奔";s:3:"奔";s:3:"婢";s:3:"婢";s:3:"嬨";s:3:"嬨";s:3:"廒";s:3:"廒";s:3:"廙";s:3:"廙";s:3:"彩";s:3:"彩";s:3:"徭";s:3:"徭";s:3:"惘";s:3:"惘";s:3:"慎";s:4:"慎";s:3:"愈";s:3:"愈";s:3:"慠";s:3:"慠";s:3:"戴";s:3:"戴";s:3:"揄";s:3:"揄";s:3:"搜";s:3:"搜";s:3:"摒";s:3:"摒";s:3:"敖";s:3:"敖";s:3:"望";s:4:"望";s:3:"杖";s:3:"杖";s:3:"歹";s:3:"歹";s:3:"滛";s:3:"滛";s:3:"滋";s:4:"滋";s:3:"瀞";s:4:"瀞";s:3:"瞧";s:3:"瞧";s:3:"爵";s:4:"爵";s:3:"犯";s:3:"犯";s:3:"瑱";s:4:"瑱";s:3:"甆";s:3:"甆";s:3:"画";s:3:"画";s:3:"瘝";s:3:"瘝";s:3:"瘟";s:3:"瘟";s:3:"盛";s:3:"盛";s:3:"直";s:4:"直";s:3:"睊";s:4:"睊";s:3:"着";s:3:"着";s:3:"磌";s:4:"磌";s:3:"窱";s:3:"窱";s:3:"类";s:3:"类";s:3:"絛";s:3:"絛";s:3:"缾";s:3:"缾";s:3:"荒";s:3:"荒";s:3:"華";s:3:"華";s:3:"蝹";s:4:"蝹";s:3:"襁";s:3:"襁";s:3:"覆";s:3:"覆";s:3:"調";s:3:"調";s:3:"請";s:3:"請";s:3:"諭";s:4:"諭";s:3:"變";s:4:"變";s:3:"輸";s:4:"輸";s:3:"遲";s:3:"遲";s:3:"醙";s:3:"醙";s:3:"鉶";s:3:"鉶";s:3:"陼";s:3:"陼";s:3:"韛";s:3:"韛";s:3:"頋";s:4:"頋";s:3:"鬒";s:4:"鬒";s:4:"𢡊";s:3:"𢡊";s:4:"𢡄";s:3:"𢡄";s:4:"𣏕";s:3:"𣏕";s:3:"㮝";s:4:"㮝";s:3:"䀘";s:3:"䀘";s:3:"䀹";s:4:"䀹";s:4:"𥉉";s:3:"𥉉";s:4:"𥳐";s:3:"𥳐";s:4:"𧻓";s:3:"𧻓";s:3:"齃";s:3:"齃";s:3:"龎";s:3:"龎";s:8:"𑂚";s:4:"𑂚";s:8:"𑂜";s:4:"𑂜";s:8:"𑂫";s:4:"𑂫";s:3:"丽";s:4:"丽";s:3:"丸";s:4:"丸";s:3:"乁";s:4:"乁";s:4:"𠄢";s:4:"𠄢";s:3:"你";s:4:"你";s:3:"侻";s:4:"侻";s:3:"倂";s:4:"倂";s:3:"偺";s:4:"偺";s:3:"備";s:4:"備";s:3:"像";s:4:"像";s:3:"㒞";s:4:"㒞";s:4:"𠘺";s:4:"𠘺";s:3:"兔";s:4:"兔";s:3:"兤";s:4:"兤";s:3:"具";s:4:"具";s:4:"𠔜";s:4:"𠔜";s:3:"㒹";s:4:"㒹";s:3:"內";s:4:"內";s:3:"再";s:4:"再";s:4:"𠕋";s:4:"𠕋";s:3:"冗";s:4:"冗";s:3:"冤";s:4:"冤";s:3:"仌";s:4:"仌";s:3:"冬";s:4:"冬";s:4:"𩇟";s:4:"𩇟";s:3:"凵";s:4:"凵";s:3:"刃";s:4:"刃";s:3:"㓟";s:4:"㓟";s:3:"刻";s:4:"刻";s:3:"剆";s:4:"剆";s:3:"割";s:4:"割";s:3:"剷";s:4:"剷";s:3:"㔕";s:4:"㔕";s:3:"包";s:4:"包";s:3:"匆";s:4:"匆";s:3:"卉";s:4:"卉";s:3:"博";s:4:"博";s:3:"即";s:4:"即";s:3:"卽";s:4:"卽";s:3:"卿";s:4:"卿";s:4:"𠨬";s:4:"𠨬";s:3:"灰";s:4:"灰";s:3:"及";s:4:"及";s:3:"叟";s:4:"叟";s:4:"𠭣";s:4:"𠭣";s:3:"叫";s:4:"叫";s:3:"叱";s:4:"叱";s:3:"吆";s:4:"吆";s:3:"咞";s:4:"咞";s:3:"吸";s:4:"吸";s:3:"呈";s:4:"呈";s:3:"周";s:4:"周";s:3:"咢";s:4:"咢";s:3:"哶";s:4:"哶";s:3:"唐";s:4:"唐";s:3:"啓";s:4:"啓";s:3:"啣";s:4:"啣";s:3:"善";s:4:"善";s:3:"喫";s:4:"喫";s:3:"喳";s:4:"喳";s:3:"嗂";s:4:"嗂";s:3:"圖";s:4:"圖";s:3:"圗";s:4:"圗";s:3:"噑";s:4:"噑";s:3:"噴";s:4:"噴";s:3:"壮";s:4:"壮";s:3:"城";s:4:"城";s:3:"埴";s:4:"埴";s:3:"堍";s:4:"堍";s:3:"型";s:4:"型";s:3:"堲";s:4:"堲";s:3:"報";s:4:"報";s:3:"墬";s:4:"墬";s:4:"𡓤";s:4:"𡓤";s:3:"売";s:4:"売";s:3:"壷";s:4:"壷";s:3:"夆";s:4:"夆";s:3:"多";s:4:"多";s:3:"夢";s:4:"夢";s:3:"奢";s:4:"奢";s:4:"𡚨";s:4:"𡚨";s:4:"𡛪";s:4:"𡛪";s:3:"姬";s:4:"姬";s:3:"娛";s:4:"娛";s:3:"娧";s:4:"娧";s:3:"姘";s:4:"姘";s:3:"婦";s:4:"婦";s:3:"㛮";s:4:"㛮";s:3:"㛼";s:4:"㛼";s:3:"嬈";s:4:"嬈";s:3:"嬾";s:4:"嬾";s:4:"𡧈";s:4:"𡧈";s:3:"寃";s:4:"寃";s:3:"寘";s:4:"寘";s:3:"寳";s:4:"寳";s:4:"𡬘";s:4:"𡬘";s:3:"寿";s:4:"寿";s:3:"将";s:4:"将";s:3:"当";s:4:"当";s:3:"尢";s:4:"尢";s:3:"㞁";s:4:"㞁";s:3:"屠";s:4:"屠";s:3:"峀";s:4:"峀";s:3:"岍";s:4:"岍";s:4:"𡷤";s:4:"𡷤";s:3:"嵃";s:4:"嵃";s:4:"𡷦";s:4:"𡷦";s:3:"嵮";s:4:"嵮";s:3:"嵫";s:4:"嵫";s:3:"嵼";s:4:"嵼";s:3:"巡";s:4:"巡";s:3:"巢";s:4:"巢";s:3:"㠯";s:4:"㠯";s:3:"巽";s:4:"巽";s:3:"帨";s:4:"帨";s:3:"帽";s:4:"帽";s:3:"幩";s:4:"幩";s:3:"㡢";s:4:"㡢";s:4:"𢆃";s:4:"𢆃";s:3:"㡼";s:4:"㡼";s:3:"庰";s:4:"庰";s:3:"庳";s:4:"庳";s:3:"庶";s:4:"庶";s:4:"𪎒";s:4:"𪎒";s:3:"廾";s:4:"廾";s:4:"𢌱";s:4:"𢌱";s:3:"舁";s:4:"舁";s:3:"弢";s:4:"弢";s:3:"㣇";s:4:"㣇";s:4:"𣊸";s:4:"𣊸";s:4:"𦇚";s:4:"𦇚";s:3:"形";s:4:"形";s:3:"彫";s:4:"彫";s:3:"㣣";s:4:"㣣";s:3:"徚";s:4:"徚";s:3:"忍";s:4:"忍";s:3:"志";s:4:"志";s:3:"忹";s:4:"忹";s:3:"悁";s:4:"悁";s:3:"㤺";s:4:"㤺";s:3:"㤜";s:4:"㤜";s:4:"𢛔";s:4:"𢛔";s:3:"惇";s:4:"惇";s:3:"慈";s:4:"慈";s:3:"慌";s:4:"慌";s:3:"慺";s:4:"慺";s:3:"憲";s:4:"憲";s:3:"憤";s:4:"憤";s:3:"憯";s:4:"憯";s:3:"懞";s:4:"懞";s:3:"成";s:4:"成";s:3:"戛";s:4:"戛";s:3:"扝";s:4:"扝";s:3:"抱";s:4:"抱";s:3:"拔";s:4:"拔";s:3:"捐";s:4:"捐";s:4:"𢬌";s:4:"𢬌";s:3:"挽";s:4:"挽";s:3:"拼";s:4:"拼";s:3:"捨";s:4:"捨";s:3:"掃";s:4:"掃";s:3:"揤";s:4:"揤";s:4:"𢯱";s:4:"𢯱";s:3:"搢";s:4:"搢";s:3:"揅";s:4:"揅";s:3:"掩";s:4:"掩";s:3:"㨮";s:4:"㨮";s:3:"摩";s:4:"摩";s:3:"摾";s:4:"摾";s:3:"撝";s:4:"撝";s:3:"摷";s:4:"摷";s:3:"㩬";s:4:"㩬";s:3:"敬";s:4:"敬";s:4:"𣀊";s:4:"𣀊";s:3:"旣";s:4:"旣";s:3:"書";s:4:"書";s:3:"晉";s:4:"晉";s:3:"㬙";s:4:"㬙";s:3:"㬈";s:4:"㬈";s:3:"㫤";s:4:"㫤";s:3:"冒";s:4:"冒";s:3:"冕";s:4:"冕";s:3:"最";s:4:"最";s:3:"暜";s:4:"暜";s:3:"肭";s:4:"肭";s:3:"䏙";s:4:"䏙";s:3:"朡";s:4:"朡";s:3:"杞";s:4:"杞";s:3:"杓";s:4:"杓";s:4:"𣏃";s:4:"𣏃";s:3:"㭉";s:4:"㭉";s:3:"柺";s:4:"柺";s:3:"枅";s:4:"枅";s:3:"桒";s:4:"桒";s:4:"𣑭";s:4:"𣑭";s:3:"梎";s:4:"梎";s:3:"栟";s:4:"栟";s:3:"椔";s:4:"椔";s:3:"楂";s:4:"楂";s:3:"榣";s:4:"榣";s:3:"槪";s:4:"槪";s:3:"檨";s:4:"檨";s:4:"𣚣";s:4:"𣚣";s:3:"櫛";s:4:"櫛";s:3:"㰘";s:4:"㰘";s:3:"次";s:4:"次";s:4:"𣢧";s:4:"𣢧";s:3:"歔";s:4:"歔";s:3:"㱎";s:4:"㱎";s:3:"歲";s:4:"歲";s:3:"殟";s:4:"殟";s:3:"殻";s:4:"殻";s:4:"𣪍";s:4:"𣪍";s:4:"𡴋";s:4:"𡴋";s:4:"𣫺";s:4:"𣫺";s:3:"汎";s:4:"汎";s:4:"𣲼";s:4:"𣲼";s:3:"沿";s:4:"沿";s:3:"泍";s:4:"泍";s:3:"汧";s:4:"汧";s:3:"洖";s:4:"洖";s:3:"派";s:4:"派";s:3:"浩";s:4:"浩";s:3:"浸";s:4:"浸";s:3:"涅";s:4:"涅";s:4:"𣴞";s:4:"𣴞";s:3:"洴";s:4:"洴";s:3:"港";s:4:"港";s:3:"湮";s:4:"湮";s:3:"㴳";s:4:"㴳";s:3:"滇";s:4:"滇";s:4:"𣻑";s:4:"𣻑";s:3:"淹";s:4:"淹";s:3:"潮";s:4:"潮";s:4:"𣽞";s:4:"𣽞";s:4:"𣾎";s:4:"𣾎";s:3:"濆";s:4:"濆";s:3:"瀹";s:4:"瀹";s:3:"瀛";s:4:"瀛";s:3:"㶖";s:4:"㶖";s:3:"灊";s:4:"灊";s:3:"災";s:4:"災";s:3:"灷";s:4:"灷";s:3:"炭";s:4:"炭";s:4:"𠔥";s:4:"𠔥";s:3:"煅";s:4:"煅";s:4:"𤉣";s:4:"𤉣";s:3:"熜";s:4:"熜";s:4:"𤎫";s:4:"𤎫";s:3:"爨";s:4:"爨";s:3:"牐";s:4:"牐";s:4:"𤘈";s:4:"𤘈";s:3:"犀";s:4:"犀";s:3:"犕";s:4:"犕";s:4:"𤜵";s:4:"𤜵";s:4:"𤠔";s:4:"𤠔";s:3:"獺";s:4:"獺";s:3:"王";s:4:"王";s:3:"㺬";s:4:"㺬";s:3:"玥";s:4:"玥";s:3:"㺸";s:4:"㺸";s:3:"瑇";s:4:"瑇";s:3:"瑜";s:4:"瑜";s:3:"璅";s:4:"璅";s:3:"瓊";s:4:"瓊";s:3:"㼛";s:4:"㼛";s:3:"甤";s:4:"甤";s:4:"𤰶";s:4:"𤰶";s:3:"甾";s:4:"甾";s:4:"𤲒";s:4:"𤲒";s:4:"𢆟";s:4:"𢆟";s:3:"瘐";s:4:"瘐";s:4:"𤾡";s:4:"𤾡";s:4:"𤾸";s:4:"𤾸";s:4:"𥁄";s:4:"𥁄";s:3:"㿼";s:4:"㿼";s:3:"䀈";s:4:"䀈";s:4:"𥃳";s:4:"𥃳";s:4:"𥃲";s:4:"𥃲";s:4:"𥄙";s:4:"𥄙";s:4:"𥄳";s:4:"𥄳";s:3:"眞";s:4:"眞";s:3:"真";s:4:"真";s:3:"瞋";s:4:"瞋";s:3:"䁆";s:4:"䁆";s:3:"䂖";s:4:"䂖";s:4:"𥐝";s:4:"𥐝";s:3:"硎";s:4:"硎";s:3:"䃣";s:4:"䃣";s:4:"𥘦";s:4:"𥘦";s:4:"𥚚";s:4:"𥚚";s:4:"𥛅";s:4:"𥛅";s:3:"秫";s:4:"秫";s:3:"䄯";s:4:"䄯";s:3:"穊";s:4:"穊";s:3:"穏";s:4:"穏";s:4:"𥥼";s:4:"𥥼";s:4:"𥪧";s:4:"𥪧";s:3:"竮";s:4:"竮";s:3:"䈂";s:4:"䈂";s:4:"𥮫";s:4:"𥮫";s:3:"篆";s:4:"篆";s:3:"築";s:4:"築";s:3:"䈧";s:4:"䈧";s:4:"𥲀";s:4:"𥲀";s:3:"糒";s:4:"糒";s:3:"䊠";s:4:"䊠";s:3:"糨";s:4:"糨";s:3:"糣";s:4:"糣";s:3:"紀";s:4:"紀";s:4:"𥾆";s:4:"𥾆";s:3:"絣";s:4:"絣";s:3:"䌁";s:4:"䌁";s:3:"緇";s:4:"緇";s:3:"縂";s:4:"縂";s:3:"繅";s:4:"繅";s:3:"䌴";s:4:"䌴";s:4:"𦈨";s:4:"𦈨";s:4:"𦉇";s:4:"𦉇";s:3:"䍙";s:4:"䍙";s:4:"𦋙";s:4:"𦋙";s:3:"罺";s:4:"罺";s:4:"𦌾";s:4:"𦌾";s:3:"羕";s:4:"羕";s:3:"翺";s:4:"翺";s:4:"𦓚";s:4:"𦓚";s:4:"𦔣";s:4:"𦔣";s:3:"聠";s:4:"聠";s:4:"𦖨";s:4:"𦖨";s:3:"聰";s:4:"聰";s:4:"𣍟";s:4:"𣍟";s:3:"䏕";s:4:"䏕";s:3:"育";s:4:"育";s:3:"脃";s:4:"脃";s:3:"䐋";s:4:"䐋";s:3:"脾";s:4:"脾";s:3:"媵";s:4:"媵";s:4:"𦞧";s:4:"𦞧";s:4:"𦞵";s:4:"𦞵";s:4:"𣎓";s:4:"𣎓";s:4:"𣎜";s:4:"𣎜";s:3:"舄";s:4:"舄";s:3:"辞";s:4:"辞";s:3:"䑫";s:4:"䑫";s:3:"芑";s:4:"芑";s:3:"芋";s:4:"芋";s:3:"芝";s:4:"芝";s:3:"劳";s:4:"劳";s:3:"花";s:4:"花";s:3:"芳";s:4:"芳";s:3:"芽";s:4:"芽";s:3:"苦";s:4:"苦";s:4:"𦬼";s:4:"𦬼";s:3:"茝";s:4:"茝";s:3:"荣";s:4:"荣";s:3:"莭";s:4:"莭";s:3:"茣";s:4:"茣";s:3:"莽";s:4:"莽";s:3:"菧";s:4:"菧";s:3:"荓";s:4:"荓";s:3:"菊";s:4:"菊";s:3:"菌";s:4:"菌";s:3:"菜";s:4:"菜";s:4:"𦰶";s:4:"𦰶";s:4:"𦵫";s:4:"𦵫";s:4:"𦳕";s:4:"𦳕";s:3:"䔫";s:4:"䔫";s:3:"蓱";s:4:"蓱";s:3:"蓳";s:4:"蓳";s:3:"蔖";s:4:"蔖";s:4:"𧏊";s:4:"𧏊";s:3:"蕤";s:4:"蕤";s:4:"𦼬";s:4:"𦼬";s:3:"䕝";s:4:"䕝";s:3:"䕡";s:4:"䕡";s:4:"𦾱";s:4:"𦾱";s:4:"𧃒";s:4:"𧃒";s:3:"䕫";s:4:"䕫";s:3:"虐";s:4:"虐";s:3:"虧";s:4:"虧";s:3:"虩";s:4:"虩";s:3:"蚩";s:4:"蚩";s:3:"蚈";s:4:"蚈";s:3:"蜎";s:4:"蜎";s:3:"蛢";s:4:"蛢";s:3:"蜨";s:4:"蜨";s:3:"蝫";s:4:"蝫";s:3:"螆";s:4:"螆";s:3:"䗗";s:4:"䗗";s:3:"蟡";s:4:"蟡";s:3:"蠁";s:4:"蠁";s:3:"䗹";s:4:"䗹";s:3:"衠";s:4:"衠";s:3:"衣";s:4:"衣";s:4:"𧙧";s:4:"𧙧";s:3:"裗";s:4:"裗";s:3:"裞";s:4:"裞";s:3:"䘵";s:4:"䘵";s:3:"裺";s:4:"裺";s:3:"㒻";s:4:"㒻";s:4:"𧢮";s:4:"𧢮";s:4:"𧥦";s:4:"𧥦";s:3:"䚾";s:4:"䚾";s:3:"䛇";s:4:"䛇";s:3:"誠";s:4:"誠";s:3:"豕";s:4:"豕";s:4:"𧲨";s:4:"𧲨";s:3:"貫";s:4:"貫";s:3:"賁";s:4:"賁";s:3:"贛";s:4:"贛";s:3:"起";s:4:"起";s:4:"𧼯";s:4:"𧼯";s:4:"𠠄";s:4:"𠠄";s:3:"跋";s:4:"跋";s:3:"趼";s:4:"趼";s:3:"跰";s:4:"跰";s:4:"𠣞";s:4:"𠣞";s:3:"軔";s:4:"軔";s:4:"𨗒";s:4:"𨗒";s:4:"𨗭";s:4:"𨗭";s:3:"邔";s:4:"邔";s:3:"郱";s:4:"郱";s:3:"鄑";s:4:"鄑";s:4:"𨜮";s:4:"𨜮";s:3:"鄛";s:4:"鄛";s:3:"鈸";s:4:"鈸";s:3:"鋗";s:4:"鋗";s:3:"鋘";s:4:"鋘";s:3:"鉼";s:4:"鉼";s:3:"鏹";s:4:"鏹";s:3:"鐕";s:4:"鐕";s:4:"𨯺";s:4:"𨯺";s:3:"開";s:4:"開";s:3:"䦕";s:4:"䦕";s:3:"閷";s:4:"閷";s:4:"𨵷";s:4:"𨵷";s:3:"䧦";s:4:"䧦";s:3:"雃";s:4:"雃";s:3:"嶲";s:4:"嶲";s:3:"霣";s:4:"霣";s:4:"𩅅";s:4:"𩅅";s:4:"𩈚";s:4:"𩈚";s:3:"䩮";s:4:"䩮";s:3:"䩶";s:4:"䩶";s:3:"韠";s:4:"韠";s:4:"𩐊";s:4:"𩐊";s:3:"䪲";s:4:"䪲";s:4:"𩒖";s:4:"𩒖";s:3:"頩";s:4:"頩";s:4:"𩖶";s:4:"𩖶";s:3:"飢";s:4:"飢";s:3:"䬳";s:4:"䬳";s:3:"餩";s:4:"餩";s:3:"馧";s:4:"馧";s:3:"駂";s:4:"駂";s:3:"駾";s:4:"駾";s:3:"䯎";s:4:"䯎";s:4:"𩬰";s:4:"𩬰";s:3:"鱀";s:4:"鱀";s:3:"鳽";s:4:"鳽";s:3:"䳎";s:4:"䳎";s:3:"䳭";s:4:"䳭";s:3:"鵧";s:4:"鵧";s:4:"𪃎";s:4:"𪃎";s:3:"䳸";s:4:"䳸";s:4:"𪄅";s:4:"𪄅";s:4:"𪈎";s:4:"𪈎";s:4:"𪊑";s:4:"𪊑";s:3:"麻";s:4:"麻";s:3:"䵖";s:4:"䵖";s:3:"黹";s:4:"黹";s:3:"黾";s:4:"黾";s:3:"鼅";s:4:"鼅";s:3:"鼏";s:4:"鼏";s:3:"鼖";s:4:"鼖";s:3:"鼻";s:4:"鼻";s:4:"𪘀";s:4:"𪘀";}' ); -$utfCanonicalDecomp = unserialize( 'a:2049:{s:2:"À";s:3:"À";s:2:"Á";s:3:"Á";s:2:"Â";s:3:"Â";s:2:"Ã";s:3:"Ã";s:2:"Ä";s:3:"Ä";s:2:"Å";s:3:"Å";s:2:"Ç";s:3:"Ç";s:2:"È";s:3:"È";s:2:"É";s:3:"É";s:2:"Ê";s:3:"Ê";s:2:"Ë";s:3:"Ë";s:2:"Ì";s:3:"Ì";s:2:"Í";s:3:"Í";s:2:"Î";s:3:"Î";s:2:"Ï";s:3:"Ï";s:2:"Ñ";s:3:"Ñ";s:2:"Ò";s:3:"Ò";s:2:"Ó";s:3:"Ó";s:2:"Ô";s:3:"Ô";s:2:"Õ";s:3:"Õ";s:2:"Ö";s:3:"Ö";s:2:"Ù";s:3:"Ù";s:2:"Ú";s:3:"Ú";s:2:"Û";s:3:"Û";s:2:"Ü";s:3:"Ü";s:2:"Ý";s:3:"Ý";s:2:"à";s:3:"à";s:2:"á";s:3:"á";s:2:"â";s:3:"â";s:2:"ã";s:3:"ã";s:2:"ä";s:3:"ä";s:2:"å";s:3:"å";s:2:"ç";s:3:"ç";s:2:"è";s:3:"è";s:2:"é";s:3:"é";s:2:"ê";s:3:"ê";s:2:"ë";s:3:"ë";s:2:"ì";s:3:"ì";s:2:"í";s:3:"í";s:2:"î";s:3:"î";s:2:"ï";s:3:"ï";s:2:"ñ";s:3:"ñ";s:2:"ò";s:3:"ò";s:2:"ó";s:3:"ó";s:2:"ô";s:3:"ô";s:2:"õ";s:3:"õ";s:2:"ö";s:3:"ö";s:2:"ù";s:3:"ù";s:2:"ú";s:3:"ú";s:2:"û";s:3:"û";s:2:"ü";s:3:"ü";s:2:"ý";s:3:"ý";s:2:"ÿ";s:3:"ÿ";s:2:"Ā";s:3:"Ā";s:2:"ā";s:3:"ā";s:2:"Ă";s:3:"Ă";s:2:"ă";s:3:"ă";s:2:"Ą";s:3:"Ą";s:2:"ą";s:3:"ą";s:2:"Ć";s:3:"Ć";s:2:"ć";s:3:"ć";s:2:"Ĉ";s:3:"Ĉ";s:2:"ĉ";s:3:"ĉ";s:2:"Ċ";s:3:"Ċ";s:2:"ċ";s:3:"ċ";s:2:"Č";s:3:"Č";s:2:"č";s:3:"č";s:2:"Ď";s:3:"Ď";s:2:"ď";s:3:"ď";s:2:"Ē";s:3:"Ē";s:2:"ē";s:3:"ē";s:2:"Ĕ";s:3:"Ĕ";s:2:"ĕ";s:3:"ĕ";s:2:"Ė";s:3:"Ė";s:2:"ė";s:3:"ė";s:2:"Ę";s:3:"Ę";s:2:"ę";s:3:"ę";s:2:"Ě";s:3:"Ě";s:2:"ě";s:3:"ě";s:2:"Ĝ";s:3:"Ĝ";s:2:"ĝ";s:3:"ĝ";s:2:"Ğ";s:3:"Ğ";s:2:"ğ";s:3:"ğ";s:2:"Ġ";s:3:"Ġ";s:2:"ġ";s:3:"ġ";s:2:"Ģ";s:3:"Ģ";s:2:"ģ";s:3:"ģ";s:2:"Ĥ";s:3:"Ĥ";s:2:"ĥ";s:3:"ĥ";s:2:"Ĩ";s:3:"Ĩ";s:2:"ĩ";s:3:"ĩ";s:2:"Ī";s:3:"Ī";s:2:"ī";s:3:"ī";s:2:"Ĭ";s:3:"Ĭ";s:2:"ĭ";s:3:"ĭ";s:2:"Į";s:3:"Į";s:2:"į";s:3:"į";s:2:"İ";s:3:"İ";s:2:"Ĵ";s:3:"Ĵ";s:2:"ĵ";s:3:"ĵ";s:2:"Ķ";s:3:"Ķ";s:2:"ķ";s:3:"ķ";s:2:"Ĺ";s:3:"Ĺ";s:2:"ĺ";s:3:"ĺ";s:2:"Ļ";s:3:"Ļ";s:2:"ļ";s:3:"ļ";s:2:"Ľ";s:3:"Ľ";s:2:"ľ";s:3:"ľ";s:2:"Ń";s:3:"Ń";s:2:"ń";s:3:"ń";s:2:"Ņ";s:3:"Ņ";s:2:"ņ";s:3:"ņ";s:2:"Ň";s:3:"Ň";s:2:"ň";s:3:"ň";s:2:"Ō";s:3:"Ō";s:2:"ō";s:3:"ō";s:2:"Ŏ";s:3:"Ŏ";s:2:"ŏ";s:3:"ŏ";s:2:"Ő";s:3:"Ő";s:2:"ő";s:3:"ő";s:2:"Ŕ";s:3:"Ŕ";s:2:"ŕ";s:3:"ŕ";s:2:"Ŗ";s:3:"Ŗ";s:2:"ŗ";s:3:"ŗ";s:2:"Ř";s:3:"Ř";s:2:"ř";s:3:"ř";s:2:"Ś";s:3:"Ś";s:2:"ś";s:3:"ś";s:2:"Ŝ";s:3:"Ŝ";s:2:"ŝ";s:3:"ŝ";s:2:"Ş";s:3:"Ş";s:2:"ş";s:3:"ş";s:2:"Š";s:3:"Š";s:2:"š";s:3:"š";s:2:"Ţ";s:3:"Ţ";s:2:"ţ";s:3:"ţ";s:2:"Ť";s:3:"Ť";s:2:"ť";s:3:"ť";s:2:"Ũ";s:3:"Ũ";s:2:"ũ";s:3:"ũ";s:2:"Ū";s:3:"Ū";s:2:"ū";s:3:"ū";s:2:"Ŭ";s:3:"Ŭ";s:2:"ŭ";s:3:"ŭ";s:2:"Ů";s:3:"Ů";s:2:"ů";s:3:"ů";s:2:"Ű";s:3:"Ű";s:2:"ű";s:3:"ű";s:2:"Ų";s:3:"Ų";s:2:"ų";s:3:"ų";s:2:"Ŵ";s:3:"Ŵ";s:2:"ŵ";s:3:"ŵ";s:2:"Ŷ";s:3:"Ŷ";s:2:"ŷ";s:3:"ŷ";s:2:"Ÿ";s:3:"Ÿ";s:2:"Ź";s:3:"Ź";s:2:"ź";s:3:"ź";s:2:"Ż";s:3:"Ż";s:2:"ż";s:3:"ż";s:2:"Ž";s:3:"Ž";s:2:"ž";s:3:"ž";s:2:"Ơ";s:3:"Ơ";s:2:"ơ";s:3:"ơ";s:2:"Ư";s:3:"Ư";s:2:"ư";s:3:"ư";s:2:"Ǎ";s:3:"Ǎ";s:2:"ǎ";s:3:"ǎ";s:2:"Ǐ";s:3:"Ǐ";s:2:"ǐ";s:3:"ǐ";s:2:"Ǒ";s:3:"Ǒ";s:2:"ǒ";s:3:"ǒ";s:2:"Ǔ";s:3:"Ǔ";s:2:"ǔ";s:3:"ǔ";s:2:"Ǖ";s:5:"Ǖ";s:2:"ǖ";s:5:"ǖ";s:2:"Ǘ";s:5:"Ǘ";s:2:"ǘ";s:5:"ǘ";s:2:"Ǚ";s:5:"Ǚ";s:2:"ǚ";s:5:"ǚ";s:2:"Ǜ";s:5:"Ǜ";s:2:"ǜ";s:5:"ǜ";s:2:"Ǟ";s:5:"Ǟ";s:2:"ǟ";s:5:"ǟ";s:2:"Ǡ";s:5:"Ǡ";s:2:"ǡ";s:5:"ǡ";s:2:"Ǣ";s:4:"Ǣ";s:2:"ǣ";s:4:"ǣ";s:2:"Ǧ";s:3:"Ǧ";s:2:"ǧ";s:3:"ǧ";s:2:"Ǩ";s:3:"Ǩ";s:2:"ǩ";s:3:"ǩ";s:2:"Ǫ";s:3:"Ǫ";s:2:"ǫ";s:3:"ǫ";s:2:"Ǭ";s:5:"Ǭ";s:2:"ǭ";s:5:"ǭ";s:2:"Ǯ";s:4:"Ǯ";s:2:"ǯ";s:4:"ǯ";s:2:"ǰ";s:3:"ǰ";s:2:"Ǵ";s:3:"Ǵ";s:2:"ǵ";s:3:"ǵ";s:2:"Ǹ";s:3:"Ǹ";s:2:"ǹ";s:3:"ǹ";s:2:"Ǻ";s:5:"Ǻ";s:2:"ǻ";s:5:"ǻ";s:2:"Ǽ";s:4:"Ǽ";s:2:"ǽ";s:4:"ǽ";s:2:"Ǿ";s:4:"Ǿ";s:2:"ǿ";s:4:"ǿ";s:2:"Ȁ";s:3:"Ȁ";s:2:"ȁ";s:3:"ȁ";s:2:"Ȃ";s:3:"Ȃ";s:2:"ȃ";s:3:"ȃ";s:2:"Ȅ";s:3:"Ȅ";s:2:"ȅ";s:3:"ȅ";s:2:"Ȇ";s:3:"Ȇ";s:2:"ȇ";s:3:"ȇ";s:2:"Ȉ";s:3:"Ȉ";s:2:"ȉ";s:3:"ȉ";s:2:"Ȋ";s:3:"Ȋ";s:2:"ȋ";s:3:"ȋ";s:2:"Ȍ";s:3:"Ȍ";s:2:"ȍ";s:3:"ȍ";s:2:"Ȏ";s:3:"Ȏ";s:2:"ȏ";s:3:"ȏ";s:2:"Ȑ";s:3:"Ȑ";s:2:"ȑ";s:3:"ȑ";s:2:"Ȓ";s:3:"Ȓ";s:2:"ȓ";s:3:"ȓ";s:2:"Ȕ";s:3:"Ȕ";s:2:"ȕ";s:3:"ȕ";s:2:"Ȗ";s:3:"Ȗ";s:2:"ȗ";s:3:"ȗ";s:2:"Ș";s:3:"Ș";s:2:"ș";s:3:"ș";s:2:"Ț";s:3:"Ț";s:2:"ț";s:3:"ț";s:2:"Ȟ";s:3:"Ȟ";s:2:"ȟ";s:3:"ȟ";s:2:"Ȧ";s:3:"Ȧ";s:2:"ȧ";s:3:"ȧ";s:2:"Ȩ";s:3:"Ȩ";s:2:"ȩ";s:3:"ȩ";s:2:"Ȫ";s:5:"Ȫ";s:2:"ȫ";s:5:"ȫ";s:2:"Ȭ";s:5:"Ȭ";s:2:"ȭ";s:5:"ȭ";s:2:"Ȯ";s:3:"Ȯ";s:2:"ȯ";s:3:"ȯ";s:2:"Ȱ";s:5:"Ȱ";s:2:"ȱ";s:5:"ȱ";s:2:"Ȳ";s:3:"Ȳ";s:2:"ȳ";s:3:"ȳ";s:2:"̀";s:2:"̀";s:2:"́";s:2:"́";s:2:"̓";s:2:"̓";s:2:"̈́";s:4:"̈́";s:2:"ʹ";s:2:"ʹ";s:2:";";s:1:";";s:2:"΅";s:4:"΅";s:2:"Ά";s:4:"Ά";s:2:"·";s:2:"·";s:2:"Έ";s:4:"Έ";s:2:"Ή";s:4:"Ή";s:2:"Ί";s:4:"Ί";s:2:"Ό";s:4:"Ό";s:2:"Ύ";s:4:"Ύ";s:2:"Ώ";s:4:"Ώ";s:2:"ΐ";s:6:"ΐ";s:2:"Ϊ";s:4:"Ϊ";s:2:"Ϋ";s:4:"Ϋ";s:2:"ά";s:4:"ά";s:2:"έ";s:4:"έ";s:2:"ή";s:4:"ή";s:2:"ί";s:4:"ί";s:2:"ΰ";s:6:"ΰ";s:2:"ϊ";s:4:"ϊ";s:2:"ϋ";s:4:"ϋ";s:2:"ό";s:4:"ό";s:2:"ύ";s:4:"ύ";s:2:"ώ";s:4:"ώ";s:2:"ϓ";s:4:"ϓ";s:2:"ϔ";s:4:"ϔ";s:2:"Ѐ";s:4:"Ѐ";s:2:"Ё";s:4:"Ё";s:2:"Ѓ";s:4:"Ѓ";s:2:"Ї";s:4:"Ї";s:2:"Ќ";s:4:"Ќ";s:2:"Ѝ";s:4:"Ѝ";s:2:"Ў";s:4:"Ў";s:2:"Й";s:4:"Й";s:2:"й";s:4:"й";s:2:"ѐ";s:4:"ѐ";s:2:"ё";s:4:"ё";s:2:"ѓ";s:4:"ѓ";s:2:"ї";s:4:"ї";s:2:"ќ";s:4:"ќ";s:2:"ѝ";s:4:"ѝ";s:2:"ў";s:4:"ў";s:2:"Ѷ";s:4:"Ѷ";s:2:"ѷ";s:4:"ѷ";s:2:"Ӂ";s:4:"Ӂ";s:2:"ӂ";s:4:"ӂ";s:2:"Ӑ";s:4:"Ӑ";s:2:"ӑ";s:4:"ӑ";s:2:"Ӓ";s:4:"Ӓ";s:2:"ӓ";s:4:"ӓ";s:2:"Ӗ";s:4:"Ӗ";s:2:"ӗ";s:4:"ӗ";s:2:"Ӛ";s:4:"Ӛ";s:2:"ӛ";s:4:"ӛ";s:2:"Ӝ";s:4:"Ӝ";s:2:"ӝ";s:4:"ӝ";s:2:"Ӟ";s:4:"Ӟ";s:2:"ӟ";s:4:"ӟ";s:2:"Ӣ";s:4:"Ӣ";s:2:"ӣ";s:4:"ӣ";s:2:"Ӥ";s:4:"Ӥ";s:2:"ӥ";s:4:"ӥ";s:2:"Ӧ";s:4:"Ӧ";s:2:"ӧ";s:4:"ӧ";s:2:"Ӫ";s:4:"Ӫ";s:2:"ӫ";s:4:"ӫ";s:2:"Ӭ";s:4:"Ӭ";s:2:"ӭ";s:4:"ӭ";s:2:"Ӯ";s:4:"Ӯ";s:2:"ӯ";s:4:"ӯ";s:2:"Ӱ";s:4:"Ӱ";s:2:"ӱ";s:4:"ӱ";s:2:"Ӳ";s:4:"Ӳ";s:2:"ӳ";s:4:"ӳ";s:2:"Ӵ";s:4:"Ӵ";s:2:"ӵ";s:4:"ӵ";s:2:"Ӹ";s:4:"Ӹ";s:2:"ӹ";s:4:"ӹ";s:2:"آ";s:4:"آ";s:2:"أ";s:4:"أ";s:2:"ؤ";s:4:"ؤ";s:2:"إ";s:4:"إ";s:2:"ئ";s:4:"ئ";s:2:"ۀ";s:4:"ۀ";s:2:"ۂ";s:4:"ۂ";s:2:"ۓ";s:4:"ۓ";s:3:"ऩ";s:6:"ऩ";s:3:"ऱ";s:6:"ऱ";s:3:"ऴ";s:6:"ऴ";s:3:"क़";s:6:"क़";s:3:"ख़";s:6:"ख़";s:3:"ग़";s:6:"ग़";s:3:"ज़";s:6:"ज़";s:3:"ड़";s:6:"ड़";s:3:"ढ़";s:6:"ढ़";s:3:"फ़";s:6:"फ़";s:3:"य़";s:6:"य़";s:3:"ো";s:6:"ো";s:3:"ৌ";s:6:"ৌ";s:3:"ড়";s:6:"ড়";s:3:"ঢ়";s:6:"ঢ়";s:3:"য়";s:6:"য়";s:3:"ਲ਼";s:6:"ਲ਼";s:3:"ਸ਼";s:6:"ਸ਼";s:3:"ਖ਼";s:6:"ਖ਼";s:3:"ਗ਼";s:6:"ਗ਼";s:3:"ਜ਼";s:6:"ਜ਼";s:3:"ਫ਼";s:6:"ਫ਼";s:3:"ୈ";s:6:"ୈ";s:3:"ୋ";s:6:"ୋ";s:3:"ୌ";s:6:"ୌ";s:3:"ଡ଼";s:6:"ଡ଼";s:3:"ଢ଼";s:6:"ଢ଼";s:3:"ஔ";s:6:"ஔ";s:3:"ொ";s:6:"ொ";s:3:"ோ";s:6:"ோ";s:3:"ௌ";s:6:"ௌ";s:3:"ై";s:6:"ై";s:3:"ೀ";s:6:"ೀ";s:3:"ೇ";s:6:"ೇ";s:3:"ೈ";s:6:"ೈ";s:3:"ೊ";s:6:"ೊ";s:3:"ೋ";s:9:"ೋ";s:3:"ൊ";s:6:"ൊ";s:3:"ോ";s:6:"ോ";s:3:"ൌ";s:6:"ൌ";s:3:"ේ";s:6:"ේ";s:3:"ො";s:6:"ො";s:3:"ෝ";s:9:"ෝ";s:3:"ෞ";s:6:"ෞ";s:3:"གྷ";s:6:"གྷ";s:3:"ཌྷ";s:6:"ཌྷ";s:3:"དྷ";s:6:"དྷ";s:3:"བྷ";s:6:"བྷ";s:3:"ཛྷ";s:6:"ཛྷ";s:3:"ཀྵ";s:6:"ཀྵ";s:3:"ཱི";s:6:"ཱི";s:3:"ཱུ";s:6:"ཱུ";s:3:"ྲྀ";s:6:"ྲྀ";s:3:"ླྀ";s:6:"ླྀ";s:3:"ཱྀ";s:6:"ཱྀ";s:3:"ྒྷ";s:6:"ྒྷ";s:3:"ྜྷ";s:6:"ྜྷ";s:3:"ྡྷ";s:6:"ྡྷ";s:3:"ྦྷ";s:6:"ྦྷ";s:3:"ྫྷ";s:6:"ྫྷ";s:3:"ྐྵ";s:6:"ྐྵ";s:3:"ဦ";s:6:"ဦ";s:3:"ᬆ";s:6:"ᬆ";s:3:"ᬈ";s:6:"ᬈ";s:3:"ᬊ";s:6:"ᬊ";s:3:"ᬌ";s:6:"ᬌ";s:3:"ᬎ";s:6:"ᬎ";s:3:"ᬒ";s:6:"ᬒ";s:3:"ᬻ";s:6:"ᬻ";s:3:"ᬽ";s:6:"ᬽ";s:3:"ᭀ";s:6:"ᭀ";s:3:"ᭁ";s:6:"ᭁ";s:3:"ᭃ";s:6:"ᭃ";s:3:"Ḁ";s:3:"Ḁ";s:3:"ḁ";s:3:"ḁ";s:3:"Ḃ";s:3:"Ḃ";s:3:"ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"Ḅ";s:3:"ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"Ḇ";s:3:"ḇ";s:3:"ḇ";s:3:"Ḉ";s:5:"Ḉ";s:3:"ḉ";s:5:"ḉ";s:3:"Ḋ";s:3:"Ḋ";s:3:"ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"Ḍ";s:3:"ḍ";s:3:"ḍ";s:3:"Ḏ";s:3:"Ḏ";s:3:"ḏ";s:3:"ḏ";s:3:"Ḑ";s:3:"Ḑ";s:3:"ḑ";s:3:"ḑ";s:3:"Ḓ";s:3:"Ḓ";s:3:"ḓ";s:3:"ḓ";s:3:"Ḕ";s:5:"Ḕ";s:3:"ḕ";s:5:"ḕ";s:3:"Ḗ";s:5:"Ḗ";s:3:"ḗ";s:5:"ḗ";s:3:"Ḙ";s:3:"Ḙ";s:3:"ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"Ḛ";s:3:"ḛ";s:3:"ḛ";s:3:"Ḝ";s:5:"Ḝ";s:3:"ḝ";s:5:"ḝ";s:3:"Ḟ";s:3:"Ḟ";s:3:"ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"Ḡ";s:3:"ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"Ḣ";s:3:"ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"Ḥ";s:3:"ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"Ḧ";s:3:"ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"Ḩ";s:3:"ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"Ḫ";s:3:"ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"Ḭ";s:3:"ḭ";s:3:"ḭ";s:3:"Ḯ";s:5:"Ḯ";s:3:"ḯ";s:5:"ḯ";s:3:"Ḱ";s:3:"Ḱ";s:3:"ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"Ḳ";s:3:"ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"Ḵ";s:3:"ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"Ḷ";s:3:"ḷ";s:3:"ḷ";s:3:"Ḹ";s:5:"Ḹ";s:3:"ḹ";s:5:"ḹ";s:3:"Ḻ";s:3:"Ḻ";s:3:"ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"Ḽ";s:3:"ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"Ḿ";s:3:"ḿ";s:3:"ḿ";s:3:"Ṁ";s:3:"Ṁ";s:3:"ṁ";s:3:"ṁ";s:3:"Ṃ";s:3:"Ṃ";s:3:"ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"Ṅ";s:3:"ṅ";s:3:"ṅ";s:3:"Ṇ";s:3:"Ṇ";s:3:"ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"Ṉ";s:3:"ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"Ṋ";s:3:"ṋ";s:3:"ṋ";s:3:"Ṍ";s:5:"Ṍ";s:3:"ṍ";s:5:"ṍ";s:3:"Ṏ";s:5:"Ṏ";s:3:"ṏ";s:5:"ṏ";s:3:"Ṑ";s:5:"Ṑ";s:3:"ṑ";s:5:"ṑ";s:3:"Ṓ";s:5:"Ṓ";s:3:"ṓ";s:5:"ṓ";s:3:"Ṕ";s:3:"Ṕ";s:3:"ṕ";s:3:"ṕ";s:3:"Ṗ";s:3:"Ṗ";s:3:"ṗ";s:3:"ṗ";s:3:"Ṙ";s:3:"Ṙ";s:3:"ṙ";s:3:"ṙ";s:3:"Ṛ";s:3:"Ṛ";s:3:"ṛ";s:3:"ṛ";s:3:"Ṝ";s:5:"Ṝ";s:3:"ṝ";s:5:"ṝ";s:3:"Ṟ";s:3:"Ṟ";s:3:"ṟ";s:3:"ṟ";s:3:"Ṡ";s:3:"Ṡ";s:3:"ṡ";s:3:"ṡ";s:3:"Ṣ";s:3:"Ṣ";s:3:"ṣ";s:3:"ṣ";s:3:"Ṥ";s:5:"Ṥ";s:3:"ṥ";s:5:"ṥ";s:3:"Ṧ";s:5:"Ṧ";s:3:"ṧ";s:5:"ṧ";s:3:"Ṩ";s:5:"Ṩ";s:3:"ṩ";s:5:"ṩ";s:3:"Ṫ";s:3:"Ṫ";s:3:"ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"Ṭ";s:3:"ṭ";s:3:"ṭ";s:3:"Ṯ";s:3:"Ṯ";s:3:"ṯ";s:3:"ṯ";s:3:"Ṱ";s:3:"Ṱ";s:3:"ṱ";s:3:"ṱ";s:3:"Ṳ";s:3:"Ṳ";s:3:"ṳ";s:3:"ṳ";s:3:"Ṵ";s:3:"Ṵ";s:3:"ṵ";s:3:"ṵ";s:3:"Ṷ";s:3:"Ṷ";s:3:"ṷ";s:3:"ṷ";s:3:"Ṹ";s:5:"Ṹ";s:3:"ṹ";s:5:"ṹ";s:3:"Ṻ";s:5:"Ṻ";s:3:"ṻ";s:5:"ṻ";s:3:"Ṽ";s:3:"Ṽ";s:3:"ṽ";s:3:"ṽ";s:3:"Ṿ";s:3:"Ṿ";s:3:"ṿ";s:3:"ṿ";s:3:"Ẁ";s:3:"Ẁ";s:3:"ẁ";s:3:"ẁ";s:3:"Ẃ";s:3:"Ẃ";s:3:"ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"Ẅ";s:3:"ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"Ẇ";s:3:"ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"Ẉ";s:3:"ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"Ẋ";s:3:"ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"Ẍ";s:3:"ẍ";s:3:"ẍ";s:3:"Ẏ";s:3:"Ẏ";s:3:"ẏ";s:3:"ẏ";s:3:"Ẑ";s:3:"Ẑ";s:3:"ẑ";s:3:"ẑ";s:3:"Ẓ";s:3:"Ẓ";s:3:"ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"Ẕ";s:3:"ẕ";s:3:"ẕ";s:3:"ẖ";s:3:"ẖ";s:3:"ẗ";s:3:"ẗ";s:3:"ẘ";s:3:"ẘ";s:3:"ẙ";s:3:"ẙ";s:3:"ẛ";s:4:"ẛ";s:3:"Ạ";s:3:"Ạ";s:3:"ạ";s:3:"ạ";s:3:"Ả";s:3:"Ả";s:3:"ả";s:3:"ả";s:3:"Ấ";s:5:"Ấ";s:3:"ấ";s:5:"ấ";s:3:"Ầ";s:5:"Ầ";s:3:"ầ";s:5:"ầ";s:3:"Ẩ";s:5:"Ẩ";s:3:"ẩ";s:5:"ẩ";s:3:"Ẫ";s:5:"Ẫ";s:3:"ẫ";s:5:"ẫ";s:3:"Ậ";s:5:"Ậ";s:3:"ậ";s:5:"ậ";s:3:"Ắ";s:5:"Ắ";s:3:"ắ";s:5:"ắ";s:3:"Ằ";s:5:"Ằ";s:3:"ằ";s:5:"ằ";s:3:"Ẳ";s:5:"Ẳ";s:3:"ẳ";s:5:"ẳ";s:3:"Ẵ";s:5:"Ẵ";s:3:"ẵ";s:5:"ẵ";s:3:"Ặ";s:5:"Ặ";s:3:"ặ";s:5:"ặ";s:3:"Ẹ";s:3:"Ẹ";s:3:"ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"Ẻ";s:3:"ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"Ẽ";s:3:"ẽ";s:3:"ẽ";s:3:"Ế";s:5:"Ế";s:3:"ế";s:5:"ế";s:3:"Ề";s:5:"Ề";s:3:"ề";s:5:"ề";s:3:"Ể";s:5:"Ể";s:3:"ể";s:5:"ể";s:3:"Ễ";s:5:"Ễ";s:3:"ễ";s:5:"ễ";s:3:"Ệ";s:5:"Ệ";s:3:"ệ";s:5:"ệ";s:3:"Ỉ";s:3:"Ỉ";s:3:"ỉ";s:3:"ỉ";s:3:"Ị";s:3:"Ị";s:3:"ị";s:3:"ị";s:3:"Ọ";s:3:"Ọ";s:3:"ọ";s:3:"ọ";s:3:"Ỏ";s:3:"Ỏ";s:3:"ỏ";s:3:"ỏ";s:3:"Ố";s:5:"Ố";s:3:"ố";s:5:"ố";s:3:"Ồ";s:5:"Ồ";s:3:"ồ";s:5:"ồ";s:3:"Ổ";s:5:"Ổ";s:3:"ổ";s:5:"ổ";s:3:"Ỗ";s:5:"Ỗ";s:3:"ỗ";s:5:"ỗ";s:3:"Ộ";s:5:"Ộ";s:3:"ộ";s:5:"ộ";s:3:"Ớ";s:5:"Ớ";s:3:"ớ";s:5:"ớ";s:3:"Ờ";s:5:"Ờ";s:3:"ờ";s:5:"ờ";s:3:"Ở";s:5:"Ở";s:3:"ở";s:5:"ở";s:3:"Ỡ";s:5:"Ỡ";s:3:"ỡ";s:5:"ỡ";s:3:"Ợ";s:5:"Ợ";s:3:"ợ";s:5:"ợ";s:3:"Ụ";s:3:"Ụ";s:3:"ụ";s:3:"ụ";s:3:"Ủ";s:3:"Ủ";s:3:"ủ";s:3:"ủ";s:3:"Ứ";s:5:"Ứ";s:3:"ứ";s:5:"ứ";s:3:"Ừ";s:5:"Ừ";s:3:"ừ";s:5:"ừ";s:3:"Ử";s:5:"Ử";s:3:"ử";s:5:"ử";s:3:"Ữ";s:5:"Ữ";s:3:"ữ";s:5:"ữ";s:3:"Ự";s:5:"Ự";s:3:"ự";s:5:"ự";s:3:"Ỳ";s:3:"Ỳ";s:3:"ỳ";s:3:"ỳ";s:3:"Ỵ";s:3:"Ỵ";s:3:"ỵ";s:3:"ỵ";s:3:"Ỷ";s:3:"Ỷ";s:3:"ỷ";s:3:"ỷ";s:3:"Ỹ";s:3:"Ỹ";s:3:"ỹ";s:3:"ỹ";s:3:"ἀ";s:4:"ἀ";s:3:"ἁ";s:4:"ἁ";s:3:"ἂ";s:6:"ἂ";s:3:"ἃ";s:6:"ἃ";s:3:"ἄ";s:6:"ἄ";s:3:"ἅ";s:6:"ἅ";s:3:"ἆ";s:6:"ἆ";s:3:"ἇ";s:6:"ἇ";s:3:"Ἀ";s:4:"Ἀ";s:3:"Ἁ";s:4:"Ἁ";s:3:"Ἂ";s:6:"Ἂ";s:3:"Ἃ";s:6:"Ἃ";s:3:"Ἄ";s:6:"Ἄ";s:3:"Ἅ";s:6:"Ἅ";s:3:"Ἆ";s:6:"Ἆ";s:3:"Ἇ";s:6:"Ἇ";s:3:"ἐ";s:4:"ἐ";s:3:"ἑ";s:4:"ἑ";s:3:"ἒ";s:6:"ἒ";s:3:"ἓ";s:6:"ἓ";s:3:"ἔ";s:6:"ἔ";s:3:"ἕ";s:6:"ἕ";s:3:"Ἐ";s:4:"Ἐ";s:3:"Ἑ";s:4:"Ἑ";s:3:"Ἒ";s:6:"Ἒ";s:3:"Ἓ";s:6:"Ἓ";s:3:"Ἔ";s:6:"Ἔ";s:3:"Ἕ";s:6:"Ἕ";s:3:"ἠ";s:4:"ἠ";s:3:"ἡ";s:4:"ἡ";s:3:"ἢ";s:6:"ἢ";s:3:"ἣ";s:6:"ἣ";s:3:"ἤ";s:6:"ἤ";s:3:"ἥ";s:6:"ἥ";s:3:"ἦ";s:6:"ἦ";s:3:"ἧ";s:6:"ἧ";s:3:"Ἠ";s:4:"Ἠ";s:3:"Ἡ";s:4:"Ἡ";s:3:"Ἢ";s:6:"Ἢ";s:3:"Ἣ";s:6:"Ἣ";s:3:"Ἤ";s:6:"Ἤ";s:3:"Ἥ";s:6:"Ἥ";s:3:"Ἦ";s:6:"Ἦ";s:3:"Ἧ";s:6:"Ἧ";s:3:"ἰ";s:4:"ἰ";s:3:"ἱ";s:4:"ἱ";s:3:"ἲ";s:6:"ἲ";s:3:"ἳ";s:6:"ἳ";s:3:"ἴ";s:6:"ἴ";s:3:"ἵ";s:6:"ἵ";s:3:"ἶ";s:6:"ἶ";s:3:"ἷ";s:6:"ἷ";s:3:"Ἰ";s:4:"Ἰ";s:3:"Ἱ";s:4:"Ἱ";s:3:"Ἲ";s:6:"Ἲ";s:3:"Ἳ";s:6:"Ἳ";s:3:"Ἴ";s:6:"Ἴ";s:3:"Ἵ";s:6:"Ἵ";s:3:"Ἶ";s:6:"Ἶ";s:3:"Ἷ";s:6:"Ἷ";s:3:"ὀ";s:4:"ὀ";s:3:"ὁ";s:4:"ὁ";s:3:"ὂ";s:6:"ὂ";s:3:"ὃ";s:6:"ὃ";s:3:"ὄ";s:6:"ὄ";s:3:"ὅ";s:6:"ὅ";s:3:"Ὀ";s:4:"Ὀ";s:3:"Ὁ";s:4:"Ὁ";s:3:"Ὂ";s:6:"Ὂ";s:3:"Ὃ";s:6:"Ὃ";s:3:"Ὄ";s:6:"Ὄ";s:3:"Ὅ";s:6:"Ὅ";s:3:"ὐ";s:4:"ὐ";s:3:"ὑ";s:4:"ὑ";s:3:"ὒ";s:6:"ὒ";s:3:"ὓ";s:6:"ὓ";s:3:"ὔ";s:6:"ὔ";s:3:"ὕ";s:6:"ὕ";s:3:"ὖ";s:6:"ὖ";s:3:"ὗ";s:6:"ὗ";s:3:"Ὑ";s:4:"Ὑ";s:3:"Ὓ";s:6:"Ὓ";s:3:"Ὕ";s:6:"Ὕ";s:3:"Ὗ";s:6:"Ὗ";s:3:"ὠ";s:4:"ὠ";s:3:"ὡ";s:4:"ὡ";s:3:"ὢ";s:6:"ὢ";s:3:"ὣ";s:6:"ὣ";s:3:"ὤ";s:6:"ὤ";s:3:"ὥ";s:6:"ὥ";s:3:"ὦ";s:6:"ὦ";s:3:"ὧ";s:6:"ὧ";s:3:"Ὠ";s:4:"Ὠ";s:3:"Ὡ";s:4:"Ὡ";s:3:"Ὢ";s:6:"Ὢ";s:3:"Ὣ";s:6:"Ὣ";s:3:"Ὤ";s:6:"Ὤ";s:3:"Ὥ";s:6:"Ὥ";s:3:"Ὦ";s:6:"Ὦ";s:3:"Ὧ";s:6:"Ὧ";s:3:"ὰ";s:4:"ὰ";s:3:"ά";s:4:"ά";s:3:"ὲ";s:4:"ὲ";s:3:"έ";s:4:"έ";s:3:"ὴ";s:4:"ὴ";s:3:"ή";s:4:"ή";s:3:"ὶ";s:4:"ὶ";s:3:"ί";s:4:"ί";s:3:"ὸ";s:4:"ὸ";s:3:"ό";s:4:"ό";s:3:"ὺ";s:4:"ὺ";s:3:"ύ";s:4:"ύ";s:3:"ὼ";s:4:"ὼ";s:3:"ώ";s:4:"ώ";s:3:"ᾀ";s:6:"ᾀ";s:3:"ᾁ";s:6:"ᾁ";s:3:"ᾂ";s:8:"ᾂ";s:3:"ᾃ";s:8:"ᾃ";s:3:"ᾄ";s:8:"ᾄ";s:3:"ᾅ";s:8:"ᾅ";s:3:"ᾆ";s:8:"ᾆ";s:3:"ᾇ";s:8:"ᾇ";s:3:"ᾈ";s:6:"ᾈ";s:3:"ᾉ";s:6:"ᾉ";s:3:"ᾊ";s:8:"ᾊ";s:3:"ᾋ";s:8:"ᾋ";s:3:"ᾌ";s:8:"ᾌ";s:3:"ᾍ";s:8:"ᾍ";s:3:"ᾎ";s:8:"ᾎ";s:3:"ᾏ";s:8:"ᾏ";s:3:"ᾐ";s:6:"ᾐ";s:3:"ᾑ";s:6:"ᾑ";s:3:"ᾒ";s:8:"ᾒ";s:3:"ᾓ";s:8:"ᾓ";s:3:"ᾔ";s:8:"ᾔ";s:3:"ᾕ";s:8:"ᾕ";s:3:"ᾖ";s:8:"ᾖ";s:3:"ᾗ";s:8:"ᾗ";s:3:"ᾘ";s:6:"ᾘ";s:3:"ᾙ";s:6:"ᾙ";s:3:"ᾚ";s:8:"ᾚ";s:3:"ᾛ";s:8:"ᾛ";s:3:"ᾜ";s:8:"ᾜ";s:3:"ᾝ";s:8:"ᾝ";s:3:"ᾞ";s:8:"ᾞ";s:3:"ᾟ";s:8:"ᾟ";s:3:"ᾠ";s:6:"ᾠ";s:3:"ᾡ";s:6:"ᾡ";s:3:"ᾢ";s:8:"ᾢ";s:3:"ᾣ";s:8:"ᾣ";s:3:"ᾤ";s:8:"ᾤ";s:3:"ᾥ";s:8:"ᾥ";s:3:"ᾦ";s:8:"ᾦ";s:3:"ᾧ";s:8:"ᾧ";s:3:"ᾨ";s:6:"ᾨ";s:3:"ᾩ";s:6:"ᾩ";s:3:"ᾪ";s:8:"ᾪ";s:3:"ᾫ";s:8:"ᾫ";s:3:"ᾬ";s:8:"ᾬ";s:3:"ᾭ";s:8:"ᾭ";s:3:"ᾮ";s:8:"ᾮ";s:3:"ᾯ";s:8:"ᾯ";s:3:"ᾰ";s:4:"ᾰ";s:3:"ᾱ";s:4:"ᾱ";s:3:"ᾲ";s:6:"ᾲ";s:3:"ᾳ";s:4:"ᾳ";s:3:"ᾴ";s:6:"ᾴ";s:3:"ᾶ";s:4:"ᾶ";s:3:"ᾷ";s:6:"ᾷ";s:3:"Ᾰ";s:4:"Ᾰ";s:3:"Ᾱ";s:4:"Ᾱ";s:3:"Ὰ";s:4:"Ὰ";s:3:"Ά";s:4:"Ά";s:3:"ᾼ";s:4:"ᾼ";s:3:"ι";s:2:"ι";s:3:"῁";s:4:"῁";s:3:"ῂ";s:6:"ῂ";s:3:"ῃ";s:4:"ῃ";s:3:"ῄ";s:6:"ῄ";s:3:"ῆ";s:4:"ῆ";s:3:"ῇ";s:6:"ῇ";s:3:"Ὲ";s:4:"Ὲ";s:3:"Έ";s:4:"Έ";s:3:"Ὴ";s:4:"Ὴ";s:3:"Ή";s:4:"Ή";s:3:"ῌ";s:4:"ῌ";s:3:"῍";s:5:"῍";s:3:"῎";s:5:"῎";s:3:"῏";s:5:"῏";s:3:"ῐ";s:4:"ῐ";s:3:"ῑ";s:4:"ῑ";s:3:"ῒ";s:6:"ῒ";s:3:"ΐ";s:6:"ΐ";s:3:"ῖ";s:4:"ῖ";s:3:"ῗ";s:6:"ῗ";s:3:"Ῐ";s:4:"Ῐ";s:3:"Ῑ";s:4:"Ῑ";s:3:"Ὶ";s:4:"Ὶ";s:3:"Ί";s:4:"Ί";s:3:"῝";s:5:"῝";s:3:"῞";s:5:"῞";s:3:"῟";s:5:"῟";s:3:"ῠ";s:4:"ῠ";s:3:"ῡ";s:4:"ῡ";s:3:"ῢ";s:6:"ῢ";s:3:"ΰ";s:6:"ΰ";s:3:"ῤ";s:4:"ῤ";s:3:"ῥ";s:4:"ῥ";s:3:"ῦ";s:4:"ῦ";s:3:"ῧ";s:6:"ῧ";s:3:"Ῠ";s:4:"Ῠ";s:3:"Ῡ";s:4:"Ῡ";s:3:"Ὺ";s:4:"Ὺ";s:3:"Ύ";s:4:"Ύ";s:3:"Ῥ";s:4:"Ῥ";s:3:"῭";s:4:"῭";s:3:"΅";s:4:"΅";s:3:"`";s:1:"`";s:3:"ῲ";s:6:"ῲ";s:3:"ῳ";s:4:"ῳ";s:3:"ῴ";s:6:"ῴ";s:3:"ῶ";s:4:"ῶ";s:3:"ῷ";s:6:"ῷ";s:3:"Ὸ";s:4:"Ὸ";s:3:"Ό";s:4:"Ό";s:3:"Ὼ";s:4:"Ὼ";s:3:"Ώ";s:4:"Ώ";s:3:"ῼ";s:4:"ῼ";s:3:"´";s:2:"´";s:3:" ";s:3:" ";s:3:" ";s:3:" ";s:3:"Ω";s:2:"Ω";s:3:"K";s:1:"K";s:3:"Å";s:3:"Å";s:3:"↚";s:5:"↚";s:3:"↛";s:5:"↛";s:3:"↮";s:5:"↮";s:3:"⇍";s:5:"⇍";s:3:"⇎";s:5:"⇎";s:3:"⇏";s:5:"⇏";s:3:"∄";s:5:"∄";s:3:"∉";s:5:"∉";s:3:"∌";s:5:"∌";s:3:"∤";s:5:"∤";s:3:"∦";s:5:"∦";s:3:"≁";s:5:"≁";s:3:"≄";s:5:"≄";s:3:"≇";s:5:"≇";s:3:"≉";s:5:"≉";s:3:"≠";s:3:"≠";s:3:"≢";s:5:"≢";s:3:"≭";s:5:"≭";s:3:"≮";s:3:"≮";s:3:"≯";s:3:"≯";s:3:"≰";s:5:"≰";s:3:"≱";s:5:"≱";s:3:"≴";s:5:"≴";s:3:"≵";s:5:"≵";s:3:"≸";s:5:"≸";s:3:"≹";s:5:"≹";s:3:"⊀";s:5:"⊀";s:3:"⊁";s:5:"⊁";s:3:"⊄";s:5:"⊄";s:3:"⊅";s:5:"⊅";s:3:"⊈";s:5:"⊈";s:3:"⊉";s:5:"⊉";s:3:"⊬";s:5:"⊬";s:3:"⊭";s:5:"⊭";s:3:"⊮";s:5:"⊮";s:3:"⊯";s:5:"⊯";s:3:"⋠";s:5:"⋠";s:3:"⋡";s:5:"⋡";s:3:"⋢";s:5:"⋢";s:3:"⋣";s:5:"⋣";s:3:"⋪";s:5:"⋪";s:3:"⋫";s:5:"⋫";s:3:"⋬";s:5:"⋬";s:3:"⋭";s:5:"⋭";s:3:"〈";s:3:"〈";s:3:"〉";s:3:"〉";s:3:"⫝̸";s:5:"⫝̸";s:3:"が";s:6:"が";s:3:"ぎ";s:6:"ぎ";s:3:"ぐ";s:6:"ぐ";s:3:"げ";s:6:"げ";s:3:"ご";s:6:"ご";s:3:"ざ";s:6:"ざ";s:3:"じ";s:6:"じ";s:3:"ず";s:6:"ず";s:3:"ぜ";s:6:"ぜ";s:3:"ぞ";s:6:"ぞ";s:3:"だ";s:6:"だ";s:3:"ぢ";s:6:"ぢ";s:3:"づ";s:6:"づ";s:3:"で";s:6:"で";s:3:"ど";s:6:"ど";s:3:"ば";s:6:"ば";s:3:"ぱ";s:6:"ぱ";s:3:"び";s:6:"び";s:3:"ぴ";s:6:"ぴ";s:3:"ぶ";s:6:"ぶ";s:3:"ぷ";s:6:"ぷ";s:3:"べ";s:6:"べ";s:3:"ぺ";s:6:"ぺ";s:3:"ぼ";s:6:"ぼ";s:3:"ぽ";s:6:"ぽ";s:3:"ゔ";s:6:"ゔ";s:3:"ゞ";s:6:"ゞ";s:3:"ガ";s:6:"ガ";s:3:"ギ";s:6:"ギ";s:3:"グ";s:6:"グ";s:3:"ゲ";s:6:"ゲ";s:3:"ゴ";s:6:"ゴ";s:3:"ザ";s:6:"ザ";s:3:"ジ";s:6:"ジ";s:3:"ズ";s:6:"ズ";s:3:"ゼ";s:6:"ゼ";s:3:"ゾ";s:6:"ゾ";s:3:"ダ";s:6:"ダ";s:3:"ヂ";s:6:"ヂ";s:3:"ヅ";s:6:"ヅ";s:3:"デ";s:6:"デ";s:3:"ド";s:6:"ド";s:3:"バ";s:6:"バ";s:3:"パ";s:6:"パ";s:3:"ビ";s:6:"ビ";s:3:"ピ";s:6:"ピ";s:3:"ブ";s:6:"ブ";s:3:"プ";s:6:"プ";s:3:"ベ";s:6:"ベ";s:3:"ペ";s:6:"ペ";s:3:"ボ";s:6:"ボ";s:3:"ポ";s:6:"ポ";s:3:"ヴ";s:6:"ヴ";s:3:"ヷ";s:6:"ヷ";s:3:"ヸ";s:6:"ヸ";s:3:"ヹ";s:6:"ヹ";s:3:"ヺ";s:6:"ヺ";s:3:"ヾ";s:6:"ヾ";s:3:"豈";s:3:"豈";s:3:"更";s:3:"更";s:3:"車";s:3:"車";s:3:"賈";s:3:"賈";s:3:"滑";s:3:"滑";s:3:"串";s:3:"串";s:3:"句";s:3:"句";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"契";s:3:"契";s:3:"金";s:3:"金";s:3:"喇";s:3:"喇";s:3:"奈";s:3:"奈";s:3:"懶";s:3:"懶";s:3:"癩";s:3:"癩";s:3:"羅";s:3:"羅";s:3:"蘿";s:3:"蘿";s:3:"螺";s:3:"螺";s:3:"裸";s:3:"裸";s:3:"邏";s:3:"邏";s:3:"樂";s:3:"樂";s:3:"洛";s:3:"洛";s:3:"烙";s:3:"烙";s:3:"珞";s:3:"珞";s:3:"落";s:3:"落";s:3:"酪";s:3:"酪";s:3:"駱";s:3:"駱";s:3:"亂";s:3:"亂";s:3:"卵";s:3:"卵";s:3:"欄";s:3:"欄";s:3:"爛";s:3:"爛";s:3:"蘭";s:3:"蘭";s:3:"鸞";s:3:"鸞";s:3:"嵐";s:3:"嵐";s:3:"濫";s:3:"濫";s:3:"藍";s:3:"藍";s:3:"襤";s:3:"襤";s:3:"拉";s:3:"拉";s:3:"臘";s:3:"臘";s:3:"蠟";s:3:"蠟";s:3:"廊";s:3:"廊";s:3:"朗";s:3:"朗";s:3:"浪";s:3:"浪";s:3:"狼";s:3:"狼";s:3:"郎";s:3:"郎";s:3:"來";s:3:"來";s:3:"冷";s:3:"冷";s:3:"勞";s:3:"勞";s:3:"擄";s:3:"擄";s:3:"櫓";s:3:"櫓";s:3:"爐";s:3:"爐";s:3:"盧";s:3:"盧";s:3:"老";s:3:"老";s:3:"蘆";s:3:"蘆";s:3:"虜";s:3:"虜";s:3:"路";s:3:"路";s:3:"露";s:3:"露";s:3:"魯";s:3:"魯";s:3:"鷺";s:3:"鷺";s:3:"碌";s:3:"碌";s:3:"祿";s:3:"祿";s:3:"綠";s:3:"綠";s:3:"菉";s:3:"菉";s:3:"錄";s:3:"錄";s:3:"鹿";s:3:"鹿";s:3:"論";s:3:"論";s:3:"壟";s:3:"壟";s:3:"弄";s:3:"弄";s:3:"籠";s:3:"籠";s:3:"聾";s:3:"聾";s:3:"牢";s:3:"牢";s:3:"磊";s:3:"磊";s:3:"賂";s:3:"賂";s:3:"雷";s:3:"雷";s:3:"壘";s:3:"壘";s:3:"屢";s:3:"屢";s:3:"樓";s:3:"樓";s:3:"淚";s:3:"淚";s:3:"漏";s:3:"漏";s:3:"累";s:3:"累";s:3:"縷";s:3:"縷";s:3:"陋";s:3:"陋";s:3:"勒";s:3:"勒";s:3:"肋";s:3:"肋";s:3:"凜";s:3:"凜";s:3:"凌";s:3:"凌";s:3:"稜";s:3:"稜";s:3:"綾";s:3:"綾";s:3:"菱";s:3:"菱";s:3:"陵";s:3:"陵";s:3:"讀";s:3:"讀";s:3:"拏";s:3:"拏";s:3:"樂";s:3:"樂";s:3:"諾";s:3:"諾";s:3:"丹";s:3:"丹";s:3:"寧";s:3:"寧";s:3:"怒";s:3:"怒";s:3:"率";s:3:"率";s:3:"異";s:3:"異";s:3:"北";s:3:"北";s:3:"磻";s:3:"磻";s:3:"便";s:3:"便";s:3:"復";s:3:"復";s:3:"不";s:3:"不";s:3:"泌";s:3:"泌";s:3:"數";s:3:"數";s:3:"索";s:3:"索";s:3:"參";s:3:"參";s:3:"塞";s:3:"塞";s:3:"省";s:3:"省";s:3:"葉";s:3:"葉";s:3:"說";s:3:"說";s:3:"殺";s:3:"殺";s:3:"辰";s:3:"辰";s:3:"沈";s:3:"沈";s:3:"拾";s:3:"拾";s:3:"若";s:3:"若";s:3:"掠";s:3:"掠";s:3:"略";s:3:"略";s:3:"亮";s:3:"亮";s:3:"兩";s:3:"兩";s:3:"凉";s:3:"凉";s:3:"梁";s:3:"梁";s:3:"糧";s:3:"糧";s:3:"良";s:3:"良";s:3:"諒";s:3:"諒";s:3:"量";s:3:"量";s:3:"勵";s:3:"勵";s:3:"呂";s:3:"呂";s:3:"女";s:3:"女";s:3:"廬";s:3:"廬";s:3:"旅";s:3:"旅";s:3:"濾";s:3:"濾";s:3:"礪";s:3:"礪";s:3:"閭";s:3:"閭";s:3:"驪";s:3:"驪";s:3:"麗";s:3:"麗";s:3:"黎";s:3:"黎";s:3:"力";s:3:"力";s:3:"曆";s:3:"曆";s:3:"歷";s:3:"歷";s:3:"轢";s:3:"轢";s:3:"年";s:3:"年";s:3:"憐";s:3:"憐";s:3:"戀";s:3:"戀";s:3:"撚";s:3:"撚";s:3:"漣";s:3:"漣";s:3:"煉";s:3:"煉";s:3:"璉";s:3:"璉";s:3:"秊";s:3:"秊";s:3:"練";s:3:"練";s:3:"聯";s:3:"聯";s:3:"輦";s:3:"輦";s:3:"蓮";s:3:"蓮";s:3:"連";s:3:"連";s:3:"鍊";s:3:"鍊";s:3:"列";s:3:"列";s:3:"劣";s:3:"劣";s:3:"咽";s:3:"咽";s:3:"烈";s:3:"烈";s:3:"裂";s:3:"裂";s:3:"說";s:3:"說";s:3:"廉";s:3:"廉";s:3:"念";s:3:"念";s:3:"捻";s:3:"捻";s:3:"殮";s:3:"殮";s:3:"簾";s:3:"簾";s:3:"獵";s:3:"獵";s:3:"令";s:3:"令";s:3:"囹";s:3:"囹";s:3:"寧";s:3:"寧";s:3:"嶺";s:3:"嶺";s:3:"怜";s:3:"怜";s:3:"玲";s:3:"玲";s:3:"瑩";s:3:"瑩";s:3:"羚";s:3:"羚";s:3:"聆";s:3:"聆";s:3:"鈴";s:3:"鈴";s:3:"零";s:3:"零";s:3:"靈";s:3:"靈";s:3:"領";s:3:"領";s:3:"例";s:3:"例";s:3:"禮";s:3:"禮";s:3:"醴";s:3:"醴";s:3:"隸";s:3:"隸";s:3:"惡";s:3:"惡";s:3:"了";s:3:"了";s:3:"僚";s:3:"僚";s:3:"寮";s:3:"寮";s:3:"尿";s:3:"尿";s:3:"料";s:3:"料";s:3:"樂";s:3:"樂";s:3:"燎";s:3:"燎";s:3:"療";s:3:"療";s:3:"蓼";s:3:"蓼";s:3:"遼";s:3:"遼";s:3:"龍";s:3:"龍";s:3:"暈";s:3:"暈";s:3:"阮";s:3:"阮";s:3:"劉";s:3:"劉";s:3:"杻";s:3:"杻";s:3:"柳";s:3:"柳";s:3:"流";s:3:"流";s:3:"溜";s:3:"溜";s:3:"琉";s:3:"琉";s:3:"留";s:3:"留";s:3:"硫";s:3:"硫";s:3:"紐";s:3:"紐";s:3:"類";s:3:"類";s:3:"六";s:3:"六";s:3:"戮";s:3:"戮";s:3:"陸";s:3:"陸";s:3:"倫";s:3:"倫";s:3:"崙";s:3:"崙";s:3:"淪";s:3:"淪";s:3:"輪";s:3:"輪";s:3:"律";s:3:"律";s:3:"慄";s:3:"慄";s:3:"栗";s:3:"栗";s:3:"率";s:3:"率";s:3:"隆";s:3:"隆";s:3:"利";s:3:"利";s:3:"吏";s:3:"吏";s:3:"履";s:3:"履";s:3:"易";s:3:"易";s:3:"李";s:3:"李";s:3:"梨";s:3:"梨";s:3:"泥";s:3:"泥";s:3:"理";s:3:"理";s:3:"痢";s:3:"痢";s:3:"罹";s:3:"罹";s:3:"裏";s:3:"裏";s:3:"裡";s:3:"裡";s:3:"里";s:3:"里";s:3:"離";s:3:"離";s:3:"匿";s:3:"匿";s:3:"溺";s:3:"溺";s:3:"吝";s:3:"吝";s:3:"燐";s:3:"燐";s:3:"璘";s:3:"璘";s:3:"藺";s:3:"藺";s:3:"隣";s:3:"隣";s:3:"鱗";s:3:"鱗";s:3:"麟";s:3:"麟";s:3:"林";s:3:"林";s:3:"淋";s:3:"淋";s:3:"臨";s:3:"臨";s:3:"立";s:3:"立";s:3:"笠";s:3:"笠";s:3:"粒";s:3:"粒";s:3:"狀";s:3:"狀";s:3:"炙";s:3:"炙";s:3:"識";s:3:"識";s:3:"什";s:3:"什";s:3:"茶";s:3:"茶";s:3:"刺";s:3:"刺";s:3:"切";s:3:"切";s:3:"度";s:3:"度";s:3:"拓";s:3:"拓";s:3:"糖";s:3:"糖";s:3:"宅";s:3:"宅";s:3:"洞";s:3:"洞";s:3:"暴";s:3:"暴";s:3:"輻";s:3:"輻";s:3:"行";s:3:"行";s:3:"降";s:3:"降";s:3:"見";s:3:"見";s:3:"廓";s:3:"廓";s:3:"兀";s:3:"兀";s:3:"嗀";s:3:"嗀";s:3:"塚";s:3:"塚";s:3:"晴";s:3:"晴";s:3:"凞";s:3:"凞";s:3:"猪";s:3:"猪";s:3:"益";s:3:"益";s:3:"礼";s:3:"礼";s:3:"神";s:3:"神";s:3:"祥";s:3:"祥";s:3:"福";s:3:"福";s:3:"靖";s:3:"靖";s:3:"精";s:3:"精";s:3:"羽";s:3:"羽";s:3:"蘒";s:3:"蘒";s:3:"諸";s:3:"諸";s:3:"逸";s:3:"逸";s:3:"都";s:3:"都";s:3:"飯";s:3:"飯";s:3:"飼";s:3:"飼";s:3:"館";s:3:"館";s:3:"鶴";s:3:"鶴";s:3:"侮";s:3:"侮";s:3:"僧";s:3:"僧";s:3:"免";s:3:"免";s:3:"勉";s:3:"勉";s:3:"勤";s:3:"勤";s:3:"卑";s:3:"卑";s:3:"喝";s:3:"喝";s:3:"嘆";s:3:"嘆";s:3:"器";s:3:"器";s:3:"塀";s:3:"塀";s:3:"墨";s:3:"墨";s:3:"層";s:3:"層";s:3:"屮";s:3:"屮";s:3:"悔";s:3:"悔";s:3:"慨";s:3:"慨";s:3:"憎";s:3:"憎";s:3:"懲";s:3:"懲";s:3:"敏";s:3:"敏";s:3:"既";s:3:"既";s:3:"暑";s:3:"暑";s:3:"梅";s:3:"梅";s:3:"海";s:3:"海";s:3:"渚";s:3:"渚";s:3:"漢";s:3:"漢";s:3:"煮";s:3:"煮";s:3:"爫";s:3:"爫";s:3:"琢";s:3:"琢";s:3:"碑";s:3:"碑";s:3:"社";s:3:"社";s:3:"祉";s:3:"祉";s:3:"祈";s:3:"祈";s:3:"祐";s:3:"祐";s:3:"祖";s:3:"祖";s:3:"祝";s:3:"祝";s:3:"禍";s:3:"禍";s:3:"禎";s:3:"禎";s:3:"穀";s:3:"穀";s:3:"突";s:3:"突";s:3:"節";s:3:"節";s:3:"練";s:3:"練";s:3:"縉";s:3:"縉";s:3:"繁";s:3:"繁";s:3:"署";s:3:"署";s:3:"者";s:3:"者";s:3:"臭";s:3:"臭";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"著";s:3:"著";s:3:"褐";s:3:"褐";s:3:"視";s:3:"視";s:3:"謁";s:3:"謁";s:3:"謹";s:3:"謹";s:3:"賓";s:3:"賓";s:3:"贈";s:3:"贈";s:3:"辶";s:3:"辶";s:3:"逸";s:3:"逸";s:3:"難";s:3:"難";s:3:"響";s:3:"響";s:3:"頻";s:3:"頻";s:3:"恵";s:3:"恵";s:3:"𤋮";s:4:"𤋮";s:3:"舘";s:3:"舘";s:3:"並";s:3:"並";s:3:"况";s:3:"况";s:3:"全";s:3:"全";s:3:"侀";s:3:"侀";s:3:"充";s:3:"充";s:3:"冀";s:3:"冀";s:3:"勇";s:3:"勇";s:3:"勺";s:3:"勺";s:3:"喝";s:3:"喝";s:3:"啕";s:3:"啕";s:3:"喙";s:3:"喙";s:3:"嗢";s:3:"嗢";s:3:"塚";s:3:"塚";s:3:"墳";s:3:"墳";s:3:"奄";s:3:"奄";s:3:"奔";s:3:"奔";s:3:"婢";s:3:"婢";s:3:"嬨";s:3:"嬨";s:3:"廒";s:3:"廒";s:3:"廙";s:3:"廙";s:3:"彩";s:3:"彩";s:3:"徭";s:3:"徭";s:3:"惘";s:3:"惘";s:3:"慎";s:3:"慎";s:3:"愈";s:3:"愈";s:3:"憎";s:3:"憎";s:3:"慠";s:3:"慠";s:3:"懲";s:3:"懲";s:3:"戴";s:3:"戴";s:3:"揄";s:3:"揄";s:3:"搜";s:3:"搜";s:3:"摒";s:3:"摒";s:3:"敖";s:3:"敖";s:3:"晴";s:3:"晴";s:3:"朗";s:3:"朗";s:3:"望";s:3:"望";s:3:"杖";s:3:"杖";s:3:"歹";s:3:"歹";s:3:"殺";s:3:"殺";s:3:"流";s:3:"流";s:3:"滛";s:3:"滛";s:3:"滋";s:3:"滋";s:3:"漢";s:3:"漢";s:3:"瀞";s:3:"瀞";s:3:"煮";s:3:"煮";s:3:"瞧";s:3:"瞧";s:3:"爵";s:3:"爵";s:3:"犯";s:3:"犯";s:3:"猪";s:3:"猪";s:3:"瑱";s:3:"瑱";s:3:"甆";s:3:"甆";s:3:"画";s:3:"画";s:3:"瘝";s:3:"瘝";s:3:"瘟";s:3:"瘟";s:3:"益";s:3:"益";s:3:"盛";s:3:"盛";s:3:"直";s:3:"直";s:3:"睊";s:3:"睊";s:3:"着";s:3:"着";s:3:"磌";s:3:"磌";s:3:"窱";s:3:"窱";s:3:"節";s:3:"節";s:3:"类";s:3:"类";s:3:"絛";s:3:"絛";s:3:"練";s:3:"練";s:3:"缾";s:3:"缾";s:3:"者";s:3:"者";s:3:"荒";s:3:"荒";s:3:"華";s:3:"華";s:3:"蝹";s:3:"蝹";s:3:"襁";s:3:"襁";s:3:"覆";s:3:"覆";s:3:"視";s:3:"視";s:3:"調";s:3:"調";s:3:"諸";s:3:"諸";s:3:"請";s:3:"請";s:3:"謁";s:3:"謁";s:3:"諾";s:3:"諾";s:3:"諭";s:3:"諭";s:3:"謹";s:3:"謹";s:3:"變";s:3:"變";s:3:"贈";s:3:"贈";s:3:"輸";s:3:"輸";s:3:"遲";s:3:"遲";s:3:"醙";s:3:"醙";s:3:"鉶";s:3:"鉶";s:3:"陼";s:3:"陼";s:3:"難";s:3:"難";s:3:"靖";s:3:"靖";s:3:"韛";s:3:"韛";s:3:"響";s:3:"響";s:3:"頋";s:3:"頋";s:3:"頻";s:3:"頻";s:3:"鬒";s:3:"鬒";s:3:"龜";s:3:"龜";s:3:"𢡊";s:4:"𢡊";s:3:"𢡄";s:4:"𢡄";s:3:"𣏕";s:4:"𣏕";s:3:"㮝";s:3:"㮝";s:3:"䀘";s:3:"䀘";s:3:"䀹";s:3:"䀹";s:3:"𥉉";s:4:"𥉉";s:3:"𥳐";s:4:"𥳐";s:3:"𧻓";s:4:"𧻓";s:3:"齃";s:3:"齃";s:3:"龎";s:3:"龎";s:3:"יִ";s:4:"יִ";s:3:"ײַ";s:4:"ײַ";s:3:"שׁ";s:4:"שׁ";s:3:"שׂ";s:4:"שׂ";s:3:"שּׁ";s:6:"שּׁ";s:3:"שּׂ";s:6:"שּׂ";s:3:"אַ";s:4:"אַ";s:3:"אָ";s:4:"אָ";s:3:"אּ";s:4:"אּ";s:3:"בּ";s:4:"בּ";s:3:"גּ";s:4:"גּ";s:3:"דּ";s:4:"דּ";s:3:"הּ";s:4:"הּ";s:3:"וּ";s:4:"וּ";s:3:"זּ";s:4:"זּ";s:3:"טּ";s:4:"טּ";s:3:"יּ";s:4:"יּ";s:3:"ךּ";s:4:"ךּ";s:3:"כּ";s:4:"כּ";s:3:"לּ";s:4:"לּ";s:3:"מּ";s:4:"מּ";s:3:"נּ";s:4:"נּ";s:3:"סּ";s:4:"סּ";s:3:"ףּ";s:4:"ףּ";s:3:"פּ";s:4:"פּ";s:3:"צּ";s:4:"צּ";s:3:"קּ";s:4:"קּ";s:3:"רּ";s:4:"רּ";s:3:"שּ";s:4:"שּ";s:3:"תּ";s:4:"תּ";s:3:"וֹ";s:4:"וֹ";s:3:"בֿ";s:4:"בֿ";s:3:"כֿ";s:4:"כֿ";s:3:"פֿ";s:4:"פֿ";s:4:"𑂚";s:8:"𑂚";s:4:"𑂜";s:8:"𑂜";s:4:"𑂫";s:8:"𑂫";s:4:"𝅗𝅥";s:8:"𝅗𝅥";s:4:"𝅘𝅥";s:8:"𝅘𝅥";s:4:"𝅘𝅥𝅮";s:12:"𝅘𝅥𝅮";s:4:"𝅘𝅥𝅯";s:12:"𝅘𝅥𝅯";s:4:"𝅘𝅥𝅰";s:12:"𝅘𝅥𝅰";s:4:"𝅘𝅥𝅱";s:12:"𝅘𝅥𝅱";s:4:"𝅘𝅥𝅲";s:12:"𝅘𝅥𝅲";s:4:"𝆹𝅥";s:8:"𝆹𝅥";s:4:"𝆺𝅥";s:8:"𝆺𝅥";s:4:"𝆹𝅥𝅮";s:12:"𝆹𝅥𝅮";s:4:"𝆺𝅥𝅮";s:12:"𝆺𝅥𝅮";s:4:"𝆹𝅥𝅯";s:12:"𝆹𝅥𝅯";s:4:"𝆺𝅥𝅯";s:12:"𝆺𝅥𝅯";s:4:"丽";s:3:"丽";s:4:"丸";s:3:"丸";s:4:"乁";s:3:"乁";s:4:"𠄢";s:4:"𠄢";s:4:"你";s:3:"你";s:4:"侮";s:3:"侮";s:4:"侻";s:3:"侻";s:4:"倂";s:3:"倂";s:4:"偺";s:3:"偺";s:4:"備";s:3:"備";s:4:"僧";s:3:"僧";s:4:"像";s:3:"像";s:4:"㒞";s:3:"㒞";s:4:"𠘺";s:4:"𠘺";s:4:"免";s:3:"免";s:4:"兔";s:3:"兔";s:4:"兤";s:3:"兤";s:4:"具";s:3:"具";s:4:"𠔜";s:4:"𠔜";s:4:"㒹";s:3:"㒹";s:4:"內";s:3:"內";s:4:"再";s:3:"再";s:4:"𠕋";s:4:"𠕋";s:4:"冗";s:3:"冗";s:4:"冤";s:3:"冤";s:4:"仌";s:3:"仌";s:4:"冬";s:3:"冬";s:4:"况";s:3:"况";s:4:"𩇟";s:4:"𩇟";s:4:"凵";s:3:"凵";s:4:"刃";s:3:"刃";s:4:"㓟";s:3:"㓟";s:4:"刻";s:3:"刻";s:4:"剆";s:3:"剆";s:4:"割";s:3:"割";s:4:"剷";s:3:"剷";s:4:"㔕";s:3:"㔕";s:4:"勇";s:3:"勇";s:4:"勉";s:3:"勉";s:4:"勤";s:3:"勤";s:4:"勺";s:3:"勺";s:4:"包";s:3:"包";s:4:"匆";s:3:"匆";s:4:"北";s:3:"北";s:4:"卉";s:3:"卉";s:4:"卑";s:3:"卑";s:4:"博";s:3:"博";s:4:"即";s:3:"即";s:4:"卽";s:3:"卽";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"𠨬";s:4:"𠨬";s:4:"灰";s:3:"灰";s:4:"及";s:3:"及";s:4:"叟";s:3:"叟";s:4:"𠭣";s:4:"𠭣";s:4:"叫";s:3:"叫";s:4:"叱";s:3:"叱";s:4:"吆";s:3:"吆";s:4:"咞";s:3:"咞";s:4:"吸";s:3:"吸";s:4:"呈";s:3:"呈";s:4:"周";s:3:"周";s:4:"咢";s:3:"咢";s:4:"哶";s:3:"哶";s:4:"唐";s:3:"唐";s:4:"啓";s:3:"啓";s:4:"啣";s:3:"啣";s:4:"善";s:3:"善";s:4:"善";s:3:"善";s:4:"喙";s:3:"喙";s:4:"喫";s:3:"喫";s:4:"喳";s:3:"喳";s:4:"嗂";s:3:"嗂";s:4:"圖";s:3:"圖";s:4:"嘆";s:3:"嘆";s:4:"圗";s:3:"圗";s:4:"噑";s:3:"噑";s:4:"噴";s:3:"噴";s:4:"切";s:3:"切";s:4:"壮";s:3:"壮";s:4:"城";s:3:"城";s:4:"埴";s:3:"埴";s:4:"堍";s:3:"堍";s:4:"型";s:3:"型";s:4:"堲";s:3:"堲";s:4:"報";s:3:"報";s:4:"墬";s:3:"墬";s:4:"𡓤";s:4:"𡓤";s:4:"売";s:3:"売";s:4:"壷";s:3:"壷";s:4:"夆";s:3:"夆";s:4:"多";s:3:"多";s:4:"夢";s:3:"夢";s:4:"奢";s:3:"奢";s:4:"𡚨";s:4:"𡚨";s:4:"𡛪";s:4:"𡛪";s:4:"姬";s:3:"姬";s:4:"娛";s:3:"娛";s:4:"娧";s:3:"娧";s:4:"姘";s:3:"姘";s:4:"婦";s:3:"婦";s:4:"㛮";s:3:"㛮";s:4:"㛼";s:3:"㛼";s:4:"嬈";s:3:"嬈";s:4:"嬾";s:3:"嬾";s:4:"嬾";s:3:"嬾";s:4:"𡧈";s:4:"𡧈";s:4:"寃";s:3:"寃";s:4:"寘";s:3:"寘";s:4:"寧";s:3:"寧";s:4:"寳";s:3:"寳";s:4:"𡬘";s:4:"𡬘";s:4:"寿";s:3:"寿";s:4:"将";s:3:"将";s:4:"当";s:3:"当";s:4:"尢";s:3:"尢";s:4:"㞁";s:3:"㞁";s:4:"屠";s:3:"屠";s:4:"屮";s:3:"屮";s:4:"峀";s:3:"峀";s:4:"岍";s:3:"岍";s:4:"𡷤";s:4:"𡷤";s:4:"嵃";s:3:"嵃";s:4:"𡷦";s:4:"𡷦";s:4:"嵮";s:3:"嵮";s:4:"嵫";s:3:"嵫";s:4:"嵼";s:3:"嵼";s:4:"巡";s:3:"巡";s:4:"巢";s:3:"巢";s:4:"㠯";s:3:"㠯";s:4:"巽";s:3:"巽";s:4:"帨";s:3:"帨";s:4:"帽";s:3:"帽";s:4:"幩";s:3:"幩";s:4:"㡢";s:3:"㡢";s:4:"𢆃";s:4:"𢆃";s:4:"㡼";s:3:"㡼";s:4:"庰";s:3:"庰";s:4:"庳";s:3:"庳";s:4:"庶";s:3:"庶";s:4:"廊";s:3:"廊";s:4:"𪎒";s:4:"𪎒";s:4:"廾";s:3:"廾";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"舁";s:3:"舁";s:4:"弢";s:3:"弢";s:4:"弢";s:3:"弢";s:4:"㣇";s:3:"㣇";s:4:"𣊸";s:4:"𣊸";s:4:"𦇚";s:4:"𦇚";s:4:"形";s:3:"形";s:4:"彫";s:3:"彫";s:4:"㣣";s:3:"㣣";s:4:"徚";s:3:"徚";s:4:"忍";s:3:"忍";s:4:"志";s:3:"志";s:4:"忹";s:3:"忹";s:4:"悁";s:3:"悁";s:4:"㤺";s:3:"㤺";s:4:"㤜";s:3:"㤜";s:4:"悔";s:3:"悔";s:4:"𢛔";s:4:"𢛔";s:4:"惇";s:3:"惇";s:4:"慈";s:3:"慈";s:4:"慌";s:3:"慌";s:4:"慎";s:3:"慎";s:4:"慌";s:3:"慌";s:4:"慺";s:3:"慺";s:4:"憎";s:3:"憎";s:4:"憲";s:3:"憲";s:4:"憤";s:3:"憤";s:4:"憯";s:3:"憯";s:4:"懞";s:3:"懞";s:4:"懲";s:3:"懲";s:4:"懶";s:3:"懶";s:4:"成";s:3:"成";s:4:"戛";s:3:"戛";s:4:"扝";s:3:"扝";s:4:"抱";s:3:"抱";s:4:"拔";s:3:"拔";s:4:"捐";s:3:"捐";s:4:"𢬌";s:4:"𢬌";s:4:"挽";s:3:"挽";s:4:"拼";s:3:"拼";s:4:"捨";s:3:"捨";s:4:"掃";s:3:"掃";s:4:"揤";s:3:"揤";s:4:"𢯱";s:4:"𢯱";s:4:"搢";s:3:"搢";s:4:"揅";s:3:"揅";s:4:"掩";s:3:"掩";s:4:"㨮";s:3:"㨮";s:4:"摩";s:3:"摩";s:4:"摾";s:3:"摾";s:4:"撝";s:3:"撝";s:4:"摷";s:3:"摷";s:4:"㩬";s:3:"㩬";s:4:"敏";s:3:"敏";s:4:"敬";s:3:"敬";s:4:"𣀊";s:4:"𣀊";s:4:"旣";s:3:"旣";s:4:"書";s:3:"書";s:4:"晉";s:3:"晉";s:4:"㬙";s:3:"㬙";s:4:"暑";s:3:"暑";s:4:"㬈";s:3:"㬈";s:4:"㫤";s:3:"㫤";s:4:"冒";s:3:"冒";s:4:"冕";s:3:"冕";s:4:"最";s:3:"最";s:4:"暜";s:3:"暜";s:4:"肭";s:3:"肭";s:4:"䏙";s:3:"䏙";s:4:"朗";s:3:"朗";s:4:"望";s:3:"望";s:4:"朡";s:3:"朡";s:4:"杞";s:3:"杞";s:4:"杓";s:3:"杓";s:4:"𣏃";s:4:"𣏃";s:4:"㭉";s:3:"㭉";s:4:"柺";s:3:"柺";s:4:"枅";s:3:"枅";s:4:"桒";s:3:"桒";s:4:"梅";s:3:"梅";s:4:"𣑭";s:4:"𣑭";s:4:"梎";s:3:"梎";s:4:"栟";s:3:"栟";s:4:"椔";s:3:"椔";s:4:"㮝";s:3:"㮝";s:4:"楂";s:3:"楂";s:4:"榣";s:3:"榣";s:4:"槪";s:3:"槪";s:4:"檨";s:3:"檨";s:4:"𣚣";s:4:"𣚣";s:4:"櫛";s:3:"櫛";s:4:"㰘";s:3:"㰘";s:4:"次";s:3:"次";s:4:"𣢧";s:4:"𣢧";s:4:"歔";s:3:"歔";s:4:"㱎";s:3:"㱎";s:4:"歲";s:3:"歲";s:4:"殟";s:3:"殟";s:4:"殺";s:3:"殺";s:4:"殻";s:3:"殻";s:4:"𣪍";s:4:"𣪍";s:4:"𡴋";s:4:"𡴋";s:4:"𣫺";s:4:"𣫺";s:4:"汎";s:3:"汎";s:4:"𣲼";s:4:"𣲼";s:4:"沿";s:3:"沿";s:4:"泍";s:3:"泍";s:4:"汧";s:3:"汧";s:4:"洖";s:3:"洖";s:4:"派";s:3:"派";s:4:"海";s:3:"海";s:4:"流";s:3:"流";s:4:"浩";s:3:"浩";s:4:"浸";s:3:"浸";s:4:"涅";s:3:"涅";s:4:"𣴞";s:4:"𣴞";s:4:"洴";s:3:"洴";s:4:"港";s:3:"港";s:4:"湮";s:3:"湮";s:4:"㴳";s:3:"㴳";s:4:"滋";s:3:"滋";s:4:"滇";s:3:"滇";s:4:"𣻑";s:4:"𣻑";s:4:"淹";s:3:"淹";s:4:"潮";s:3:"潮";s:4:"𣽞";s:4:"𣽞";s:4:"𣾎";s:4:"𣾎";s:4:"濆";s:3:"濆";s:4:"瀹";s:3:"瀹";s:4:"瀞";s:3:"瀞";s:4:"瀛";s:3:"瀛";s:4:"㶖";s:3:"㶖";s:4:"灊";s:3:"灊";s:4:"災";s:3:"災";s:4:"灷";s:3:"灷";s:4:"炭";s:3:"炭";s:4:"𠔥";s:4:"𠔥";s:4:"煅";s:3:"煅";s:4:"𤉣";s:4:"𤉣";s:4:"熜";s:3:"熜";s:4:"𤎫";s:4:"𤎫";s:4:"爨";s:3:"爨";s:4:"爵";s:3:"爵";s:4:"牐";s:3:"牐";s:4:"𤘈";s:4:"𤘈";s:4:"犀";s:3:"犀";s:4:"犕";s:3:"犕";s:4:"𤜵";s:4:"𤜵";s:4:"𤠔";s:4:"𤠔";s:4:"獺";s:3:"獺";s:4:"王";s:3:"王";s:4:"㺬";s:3:"㺬";s:4:"玥";s:3:"玥";s:4:"㺸";s:3:"㺸";s:4:"㺸";s:3:"㺸";s:4:"瑇";s:3:"瑇";s:4:"瑜";s:3:"瑜";s:4:"瑱";s:3:"瑱";s:4:"璅";s:3:"璅";s:4:"瓊";s:3:"瓊";s:4:"㼛";s:3:"㼛";s:4:"甤";s:3:"甤";s:4:"𤰶";s:4:"𤰶";s:4:"甾";s:3:"甾";s:4:"𤲒";s:4:"𤲒";s:4:"異";s:3:"異";s:4:"𢆟";s:4:"𢆟";s:4:"瘐";s:3:"瘐";s:4:"𤾡";s:4:"𤾡";s:4:"𤾸";s:4:"𤾸";s:4:"𥁄";s:4:"𥁄";s:4:"㿼";s:3:"㿼";s:4:"䀈";s:3:"䀈";s:4:"直";s:3:"直";s:4:"𥃳";s:4:"𥃳";s:4:"𥃲";s:4:"𥃲";s:4:"𥄙";s:4:"𥄙";s:4:"𥄳";s:4:"𥄳";s:4:"眞";s:3:"眞";s:4:"真";s:3:"真";s:4:"真";s:3:"真";s:4:"睊";s:3:"睊";s:4:"䀹";s:3:"䀹";s:4:"瞋";s:3:"瞋";s:4:"䁆";s:3:"䁆";s:4:"䂖";s:3:"䂖";s:4:"𥐝";s:4:"𥐝";s:4:"硎";s:3:"硎";s:4:"碌";s:3:"碌";s:4:"磌";s:3:"磌";s:4:"䃣";s:3:"䃣";s:4:"𥘦";s:4:"𥘦";s:4:"祖";s:3:"祖";s:4:"𥚚";s:4:"𥚚";s:4:"𥛅";s:4:"𥛅";s:4:"福";s:3:"福";s:4:"秫";s:3:"秫";s:4:"䄯";s:3:"䄯";s:4:"穀";s:3:"穀";s:4:"穊";s:3:"穊";s:4:"穏";s:3:"穏";s:4:"𥥼";s:4:"𥥼";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"竮";s:3:"竮";s:4:"䈂";s:3:"䈂";s:4:"𥮫";s:4:"𥮫";s:4:"篆";s:3:"篆";s:4:"築";s:3:"築";s:4:"䈧";s:3:"䈧";s:4:"𥲀";s:4:"𥲀";s:4:"糒";s:3:"糒";s:4:"䊠";s:3:"䊠";s:4:"糨";s:3:"糨";s:4:"糣";s:3:"糣";s:4:"紀";s:3:"紀";s:4:"𥾆";s:4:"𥾆";s:4:"絣";s:3:"絣";s:4:"䌁";s:3:"䌁";s:4:"緇";s:3:"緇";s:4:"縂";s:3:"縂";s:4:"繅";s:3:"繅";s:4:"䌴";s:3:"䌴";s:4:"𦈨";s:4:"𦈨";s:4:"𦉇";s:4:"𦉇";s:4:"䍙";s:3:"䍙";s:4:"𦋙";s:4:"𦋙";s:4:"罺";s:3:"罺";s:4:"𦌾";s:4:"𦌾";s:4:"羕";s:3:"羕";s:4:"翺";s:3:"翺";s:4:"者";s:3:"者";s:4:"𦓚";s:4:"𦓚";s:4:"𦔣";s:4:"𦔣";s:4:"聠";s:3:"聠";s:4:"𦖨";s:4:"𦖨";s:4:"聰";s:3:"聰";s:4:"𣍟";s:4:"𣍟";s:4:"䏕";s:3:"䏕";s:4:"育";s:3:"育";s:4:"脃";s:3:"脃";s:4:"䐋";s:3:"䐋";s:4:"脾";s:3:"脾";s:4:"媵";s:3:"媵";s:4:"𦞧";s:4:"𦞧";s:4:"𦞵";s:4:"𦞵";s:4:"𣎓";s:4:"𣎓";s:4:"𣎜";s:4:"𣎜";s:4:"舁";s:3:"舁";s:4:"舄";s:3:"舄";s:4:"辞";s:3:"辞";s:4:"䑫";s:3:"䑫";s:4:"芑";s:3:"芑";s:4:"芋";s:3:"芋";s:4:"芝";s:3:"芝";s:4:"劳";s:3:"劳";s:4:"花";s:3:"花";s:4:"芳";s:3:"芳";s:4:"芽";s:3:"芽";s:4:"苦";s:3:"苦";s:4:"𦬼";s:4:"𦬼";s:4:"若";s:3:"若";s:4:"茝";s:3:"茝";s:4:"荣";s:3:"荣";s:4:"莭";s:3:"莭";s:4:"茣";s:3:"茣";s:4:"莽";s:3:"莽";s:4:"菧";s:3:"菧";s:4:"著";s:3:"著";s:4:"荓";s:3:"荓";s:4:"菊";s:3:"菊";s:4:"菌";s:3:"菌";s:4:"菜";s:3:"菜";s:4:"𦰶";s:4:"𦰶";s:4:"𦵫";s:4:"𦵫";s:4:"𦳕";s:4:"𦳕";s:4:"䔫";s:3:"䔫";s:4:"蓱";s:3:"蓱";s:4:"蓳";s:3:"蓳";s:4:"蔖";s:3:"蔖";s:4:"𧏊";s:4:"𧏊";s:4:"蕤";s:3:"蕤";s:4:"𦼬";s:4:"𦼬";s:4:"䕝";s:3:"䕝";s:4:"䕡";s:3:"䕡";s:4:"𦾱";s:4:"𦾱";s:4:"𧃒";s:4:"𧃒";s:4:"䕫";s:3:"䕫";s:4:"虐";s:3:"虐";s:4:"虜";s:3:"虜";s:4:"虧";s:3:"虧";s:4:"虩";s:3:"虩";s:4:"蚩";s:3:"蚩";s:4:"蚈";s:3:"蚈";s:4:"蜎";s:3:"蜎";s:4:"蛢";s:3:"蛢";s:4:"蝹";s:3:"蝹";s:4:"蜨";s:3:"蜨";s:4:"蝫";s:3:"蝫";s:4:"螆";s:3:"螆";s:4:"䗗";s:3:"䗗";s:4:"蟡";s:3:"蟡";s:4:"蠁";s:3:"蠁";s:4:"䗹";s:3:"䗹";s:4:"衠";s:3:"衠";s:4:"衣";s:3:"衣";s:4:"𧙧";s:4:"𧙧";s:4:"裗";s:3:"裗";s:4:"裞";s:3:"裞";s:4:"䘵";s:3:"䘵";s:4:"裺";s:3:"裺";s:4:"㒻";s:3:"㒻";s:4:"𧢮";s:4:"𧢮";s:4:"𧥦";s:4:"𧥦";s:4:"䚾";s:3:"䚾";s:4:"䛇";s:3:"䛇";s:4:"誠";s:3:"誠";s:4:"諭";s:3:"諭";s:4:"變";s:3:"變";s:4:"豕";s:3:"豕";s:4:"𧲨";s:4:"𧲨";s:4:"貫";s:3:"貫";s:4:"賁";s:3:"賁";s:4:"贛";s:3:"贛";s:4:"起";s:3:"起";s:4:"𧼯";s:4:"𧼯";s:4:"𠠄";s:4:"𠠄";s:4:"跋";s:3:"跋";s:4:"趼";s:3:"趼";s:4:"跰";s:3:"跰";s:4:"𠣞";s:4:"𠣞";s:4:"軔";s:3:"軔";s:4:"輸";s:3:"輸";s:4:"𨗒";s:4:"𨗒";s:4:"𨗭";s:4:"𨗭";s:4:"邔";s:3:"邔";s:4:"郱";s:3:"郱";s:4:"鄑";s:3:"鄑";s:4:"𨜮";s:4:"𨜮";s:4:"鄛";s:3:"鄛";s:4:"鈸";s:3:"鈸";s:4:"鋗";s:3:"鋗";s:4:"鋘";s:3:"鋘";s:4:"鉼";s:3:"鉼";s:4:"鏹";s:3:"鏹";s:4:"鐕";s:3:"鐕";s:4:"𨯺";s:4:"𨯺";s:4:"開";s:3:"開";s:4:"䦕";s:3:"䦕";s:4:"閷";s:3:"閷";s:4:"𨵷";s:4:"𨵷";s:4:"䧦";s:3:"䧦";s:4:"雃";s:3:"雃";s:4:"嶲";s:3:"嶲";s:4:"霣";s:3:"霣";s:4:"𩅅";s:4:"𩅅";s:4:"𩈚";s:4:"𩈚";s:4:"䩮";s:3:"䩮";s:4:"䩶";s:3:"䩶";s:4:"韠";s:3:"韠";s:4:"𩐊";s:4:"𩐊";s:4:"䪲";s:3:"䪲";s:4:"𩒖";s:4:"𩒖";s:4:"頋";s:3:"頋";s:4:"頋";s:3:"頋";s:4:"頩";s:3:"頩";s:4:"𩖶";s:4:"𩖶";s:4:"飢";s:3:"飢";s:4:"䬳";s:3:"䬳";s:4:"餩";s:3:"餩";s:4:"馧";s:3:"馧";s:4:"駂";s:3:"駂";s:4:"駾";s:3:"駾";s:4:"䯎";s:3:"䯎";s:4:"𩬰";s:4:"𩬰";s:4:"鬒";s:3:"鬒";s:4:"鱀";s:3:"鱀";s:4:"鳽";s:3:"鳽";s:4:"䳎";s:3:"䳎";s:4:"䳭";s:3:"䳭";s:4:"鵧";s:3:"鵧";s:4:"𪃎";s:4:"𪃎";s:4:"䳸";s:3:"䳸";s:4:"𪄅";s:4:"𪄅";s:4:"𪈎";s:4:"𪈎";s:4:"𪊑";s:4:"𪊑";s:4:"麻";s:3:"麻";s:4:"䵖";s:3:"䵖";s:4:"黹";s:3:"黹";s:4:"黾";s:3:"黾";s:4:"鼅";s:3:"鼅";s:4:"鼏";s:3:"鼏";s:4:"鼖";s:3:"鼖";s:4:"鼻";s:3:"鼻";s:4:"𪘀";s:4:"𪘀";}' ); -$utfCheckNFC = unserialize( 'a:1221:{s:2:"̀";s:1:"N";s:2:"́";s:1:"N";s:2:"̓";s:1:"N";s:2:"̈́";s:1:"N";s:2:"ʹ";s:1:"N";s:2:";";s:1:"N";s:2:"·";s:1:"N";s:3:"क़";s:1:"N";s:3:"ख़";s:1:"N";s:3:"ग़";s:1:"N";s:3:"ज़";s:1:"N";s:3:"ड़";s:1:"N";s:3:"ढ़";s:1:"N";s:3:"फ़";s:1:"N";s:3:"य़";s:1:"N";s:3:"ড়";s:1:"N";s:3:"ঢ়";s:1:"N";s:3:"য়";s:1:"N";s:3:"ਲ਼";s:1:"N";s:3:"ਸ਼";s:1:"N";s:3:"ਖ਼";s:1:"N";s:3:"ਗ਼";s:1:"N";s:3:"ਜ਼";s:1:"N";s:3:"ਫ਼";s:1:"N";s:3:"ଡ଼";s:1:"N";s:3:"ଢ଼";s:1:"N";s:3:"གྷ";s:1:"N";s:3:"ཌྷ";s:1:"N";s:3:"དྷ";s:1:"N";s:3:"བྷ";s:1:"N";s:3:"ཛྷ";s:1:"N";s:3:"ཀྵ";s:1:"N";s:3:"ཱི";s:1:"N";s:3:"ཱུ";s:1:"N";s:3:"ྲྀ";s:1:"N";s:3:"ླྀ";s:1:"N";s:3:"ཱྀ";s:1:"N";s:3:"ྒྷ";s:1:"N";s:3:"ྜྷ";s:1:"N";s:3:"ྡྷ";s:1:"N";s:3:"ྦྷ";s:1:"N";s:3:"ྫྷ";s:1:"N";s:3:"ྐྵ";s:1:"N";s:3:"ά";s:1:"N";s:3:"έ";s:1:"N";s:3:"ή";s:1:"N";s:3:"ί";s:1:"N";s:3:"ό";s:1:"N";s:3:"ύ";s:1:"N";s:3:"ώ";s:1:"N";s:3:"Ά";s:1:"N";s:3:"ι";s:1:"N";s:3:"Έ";s:1:"N";s:3:"Ή";s:1:"N";s:3:"ΐ";s:1:"N";s:3:"Ί";s:1:"N";s:3:"ΰ";s:1:"N";s:3:"Ύ";s:1:"N";s:3:"΅";s:1:"N";s:3:"`";s:1:"N";s:3:"Ό";s:1:"N";s:3:"Ώ";s:1:"N";s:3:"´";s:1:"N";s:3:" ";s:1:"N";s:3:" ";s:1:"N";s:3:"Ω";s:1:"N";s:3:"K";s:1:"N";s:3:"Å";s:1:"N";s:3:"〈";s:1:"N";s:3:"〉";s:1:"N";s:3:"⫝̸";s:1:"N";s:3:"豈";s:1:"N";s:3:"更";s:1:"N";s:3:"車";s:1:"N";s:3:"賈";s:1:"N";s:3:"滑";s:1:"N";s:3:"串";s:1:"N";s:3:"句";s:1:"N";s:3:"龜";s:1:"N";s:3:"龜";s:1:"N";s:3:"契";s:1:"N";s:3:"金";s:1:"N";s:3:"喇";s:1:"N";s:3:"奈";s:1:"N";s:3:"懶";s:1:"N";s:3:"癩";s:1:"N";s:3:"羅";s:1:"N";s:3:"蘿";s:1:"N";s:3:"螺";s:1:"N";s:3:"裸";s:1:"N";s:3:"邏";s:1:"N";s:3:"樂";s:1:"N";s:3:"洛";s:1:"N";s:3:"烙";s:1:"N";s:3:"珞";s:1:"N";s:3:"落";s:1:"N";s:3:"酪";s:1:"N";s:3:"駱";s:1:"N";s:3:"亂";s:1:"N";s:3:"卵";s:1:"N";s:3:"欄";s:1:"N";s:3:"爛";s:1:"N";s:3:"蘭";s:1:"N";s:3:"鸞";s:1:"N";s:3:"嵐";s:1:"N";s:3:"濫";s:1:"N";s:3:"藍";s:1:"N";s:3:"襤";s:1:"N";s:3:"拉";s:1:"N";s:3:"臘";s:1:"N";s:3:"蠟";s:1:"N";s:3:"廊";s:1:"N";s:3:"朗";s:1:"N";s:3:"浪";s:1:"N";s:3:"狼";s:1:"N";s:3:"郎";s:1:"N";s:3:"來";s:1:"N";s:3:"冷";s:1:"N";s:3:"勞";s:1:"N";s:3:"擄";s:1:"N";s:3:"櫓";s:1:"N";s:3:"爐";s:1:"N";s:3:"盧";s:1:"N";s:3:"老";s:1:"N";s:3:"蘆";s:1:"N";s:3:"虜";s:1:"N";s:3:"路";s:1:"N";s:3:"露";s:1:"N";s:3:"魯";s:1:"N";s:3:"鷺";s:1:"N";s:3:"碌";s:1:"N";s:3:"祿";s:1:"N";s:3:"綠";s:1:"N";s:3:"菉";s:1:"N";s:3:"錄";s:1:"N";s:3:"鹿";s:1:"N";s:3:"論";s:1:"N";s:3:"壟";s:1:"N";s:3:"弄";s:1:"N";s:3:"籠";s:1:"N";s:3:"聾";s:1:"N";s:3:"牢";s:1:"N";s:3:"磊";s:1:"N";s:3:"賂";s:1:"N";s:3:"雷";s:1:"N";s:3:"壘";s:1:"N";s:3:"屢";s:1:"N";s:3:"樓";s:1:"N";s:3:"淚";s:1:"N";s:3:"漏";s:1:"N";s:3:"累";s:1:"N";s:3:"縷";s:1:"N";s:3:"陋";s:1:"N";s:3:"勒";s:1:"N";s:3:"肋";s:1:"N";s:3:"凜";s:1:"N";s:3:"凌";s:1:"N";s:3:"稜";s:1:"N";s:3:"綾";s:1:"N";s:3:"菱";s:1:"N";s:3:"陵";s:1:"N";s:3:"讀";s:1:"N";s:3:"拏";s:1:"N";s:3:"樂";s:1:"N";s:3:"諾";s:1:"N";s:3:"丹";s:1:"N";s:3:"寧";s:1:"N";s:3:"怒";s:1:"N";s:3:"率";s:1:"N";s:3:"異";s:1:"N";s:3:"北";s:1:"N";s:3:"磻";s:1:"N";s:3:"便";s:1:"N";s:3:"復";s:1:"N";s:3:"不";s:1:"N";s:3:"泌";s:1:"N";s:3:"數";s:1:"N";s:3:"索";s:1:"N";s:3:"參";s:1:"N";s:3:"塞";s:1:"N";s:3:"省";s:1:"N";s:3:"葉";s:1:"N";s:3:"說";s:1:"N";s:3:"殺";s:1:"N";s:3:"辰";s:1:"N";s:3:"沈";s:1:"N";s:3:"拾";s:1:"N";s:3:"若";s:1:"N";s:3:"掠";s:1:"N";s:3:"略";s:1:"N";s:3:"亮";s:1:"N";s:3:"兩";s:1:"N";s:3:"凉";s:1:"N";s:3:"梁";s:1:"N";s:3:"糧";s:1:"N";s:3:"良";s:1:"N";s:3:"諒";s:1:"N";s:3:"量";s:1:"N";s:3:"勵";s:1:"N";s:3:"呂";s:1:"N";s:3:"女";s:1:"N";s:3:"廬";s:1:"N";s:3:"旅";s:1:"N";s:3:"濾";s:1:"N";s:3:"礪";s:1:"N";s:3:"閭";s:1:"N";s:3:"驪";s:1:"N";s:3:"麗";s:1:"N";s:3:"黎";s:1:"N";s:3:"力";s:1:"N";s:3:"曆";s:1:"N";s:3:"歷";s:1:"N";s:3:"轢";s:1:"N";s:3:"年";s:1:"N";s:3:"憐";s:1:"N";s:3:"戀";s:1:"N";s:3:"撚";s:1:"N";s:3:"漣";s:1:"N";s:3:"煉";s:1:"N";s:3:"璉";s:1:"N";s:3:"秊";s:1:"N";s:3:"練";s:1:"N";s:3:"聯";s:1:"N";s:3:"輦";s:1:"N";s:3:"蓮";s:1:"N";s:3:"連";s:1:"N";s:3:"鍊";s:1:"N";s:3:"列";s:1:"N";s:3:"劣";s:1:"N";s:3:"咽";s:1:"N";s:3:"烈";s:1:"N";s:3:"裂";s:1:"N";s:3:"說";s:1:"N";s:3:"廉";s:1:"N";s:3:"念";s:1:"N";s:3:"捻";s:1:"N";s:3:"殮";s:1:"N";s:3:"簾";s:1:"N";s:3:"獵";s:1:"N";s:3:"令";s:1:"N";s:3:"囹";s:1:"N";s:3:"寧";s:1:"N";s:3:"嶺";s:1:"N";s:3:"怜";s:1:"N";s:3:"玲";s:1:"N";s:3:"瑩";s:1:"N";s:3:"羚";s:1:"N";s:3:"聆";s:1:"N";s:3:"鈴";s:1:"N";s:3:"零";s:1:"N";s:3:"靈";s:1:"N";s:3:"領";s:1:"N";s:3:"例";s:1:"N";s:3:"禮";s:1:"N";s:3:"醴";s:1:"N";s:3:"隸";s:1:"N";s:3:"惡";s:1:"N";s:3:"了";s:1:"N";s:3:"僚";s:1:"N";s:3:"寮";s:1:"N";s:3:"尿";s:1:"N";s:3:"料";s:1:"N";s:3:"樂";s:1:"N";s:3:"燎";s:1:"N";s:3:"療";s:1:"N";s:3:"蓼";s:1:"N";s:3:"遼";s:1:"N";s:3:"龍";s:1:"N";s:3:"暈";s:1:"N";s:3:"阮";s:1:"N";s:3:"劉";s:1:"N";s:3:"杻";s:1:"N";s:3:"柳";s:1:"N";s:3:"流";s:1:"N";s:3:"溜";s:1:"N";s:3:"琉";s:1:"N";s:3:"留";s:1:"N";s:3:"硫";s:1:"N";s:3:"紐";s:1:"N";s:3:"類";s:1:"N";s:3:"六";s:1:"N";s:3:"戮";s:1:"N";s:3:"陸";s:1:"N";s:3:"倫";s:1:"N";s:3:"崙";s:1:"N";s:3:"淪";s:1:"N";s:3:"輪";s:1:"N";s:3:"律";s:1:"N";s:3:"慄";s:1:"N";s:3:"栗";s:1:"N";s:3:"率";s:1:"N";s:3:"隆";s:1:"N";s:3:"利";s:1:"N";s:3:"吏";s:1:"N";s:3:"履";s:1:"N";s:3:"易";s:1:"N";s:3:"李";s:1:"N";s:3:"梨";s:1:"N";s:3:"泥";s:1:"N";s:3:"理";s:1:"N";s:3:"痢";s:1:"N";s:3:"罹";s:1:"N";s:3:"裏";s:1:"N";s:3:"裡";s:1:"N";s:3:"里";s:1:"N";s:3:"離";s:1:"N";s:3:"匿";s:1:"N";s:3:"溺";s:1:"N";s:3:"吝";s:1:"N";s:3:"燐";s:1:"N";s:3:"璘";s:1:"N";s:3:"藺";s:1:"N";s:3:"隣";s:1:"N";s:3:"鱗";s:1:"N";s:3:"麟";s:1:"N";s:3:"林";s:1:"N";s:3:"淋";s:1:"N";s:3:"臨";s:1:"N";s:3:"立";s:1:"N";s:3:"笠";s:1:"N";s:3:"粒";s:1:"N";s:3:"狀";s:1:"N";s:3:"炙";s:1:"N";s:3:"識";s:1:"N";s:3:"什";s:1:"N";s:3:"茶";s:1:"N";s:3:"刺";s:1:"N";s:3:"切";s:1:"N";s:3:"度";s:1:"N";s:3:"拓";s:1:"N";s:3:"糖";s:1:"N";s:3:"宅";s:1:"N";s:3:"洞";s:1:"N";s:3:"暴";s:1:"N";s:3:"輻";s:1:"N";s:3:"行";s:1:"N";s:3:"降";s:1:"N";s:3:"見";s:1:"N";s:3:"廓";s:1:"N";s:3:"兀";s:1:"N";s:3:"嗀";s:1:"N";s:3:"塚";s:1:"N";s:3:"晴";s:1:"N";s:3:"凞";s:1:"N";s:3:"猪";s:1:"N";s:3:"益";s:1:"N";s:3:"礼";s:1:"N";s:3:"神";s:1:"N";s:3:"祥";s:1:"N";s:3:"福";s:1:"N";s:3:"靖";s:1:"N";s:3:"精";s:1:"N";s:3:"羽";s:1:"N";s:3:"蘒";s:1:"N";s:3:"諸";s:1:"N";s:3:"逸";s:1:"N";s:3:"都";s:1:"N";s:3:"飯";s:1:"N";s:3:"飼";s:1:"N";s:3:"館";s:1:"N";s:3:"鶴";s:1:"N";s:3:"侮";s:1:"N";s:3:"僧";s:1:"N";s:3:"免";s:1:"N";s:3:"勉";s:1:"N";s:3:"勤";s:1:"N";s:3:"卑";s:1:"N";s:3:"喝";s:1:"N";s:3:"嘆";s:1:"N";s:3:"器";s:1:"N";s:3:"塀";s:1:"N";s:3:"墨";s:1:"N";s:3:"層";s:1:"N";s:3:"屮";s:1:"N";s:3:"悔";s:1:"N";s:3:"慨";s:1:"N";s:3:"憎";s:1:"N";s:3:"懲";s:1:"N";s:3:"敏";s:1:"N";s:3:"既";s:1:"N";s:3:"暑";s:1:"N";s:3:"梅";s:1:"N";s:3:"海";s:1:"N";s:3:"渚";s:1:"N";s:3:"漢";s:1:"N";s:3:"煮";s:1:"N";s:3:"爫";s:1:"N";s:3:"琢";s:1:"N";s:3:"碑";s:1:"N";s:3:"社";s:1:"N";s:3:"祉";s:1:"N";s:3:"祈";s:1:"N";s:3:"祐";s:1:"N";s:3:"祖";s:1:"N";s:3:"祝";s:1:"N";s:3:"禍";s:1:"N";s:3:"禎";s:1:"N";s:3:"穀";s:1:"N";s:3:"突";s:1:"N";s:3:"節";s:1:"N";s:3:"練";s:1:"N";s:3:"縉";s:1:"N";s:3:"繁";s:1:"N";s:3:"署";s:1:"N";s:3:"者";s:1:"N";s:3:"臭";s:1:"N";s:3:"艹";s:1:"N";s:3:"艹";s:1:"N";s:3:"著";s:1:"N";s:3:"褐";s:1:"N";s:3:"視";s:1:"N";s:3:"謁";s:1:"N";s:3:"謹";s:1:"N";s:3:"賓";s:1:"N";s:3:"贈";s:1:"N";s:3:"辶";s:1:"N";s:3:"逸";s:1:"N";s:3:"難";s:1:"N";s:3:"響";s:1:"N";s:3:"頻";s:1:"N";s:3:"恵";s:1:"N";s:3:"𤋮";s:1:"N";s:3:"舘";s:1:"N";s:3:"並";s:1:"N";s:3:"况";s:1:"N";s:3:"全";s:1:"N";s:3:"侀";s:1:"N";s:3:"充";s:1:"N";s:3:"冀";s:1:"N";s:3:"勇";s:1:"N";s:3:"勺";s:1:"N";s:3:"喝";s:1:"N";s:3:"啕";s:1:"N";s:3:"喙";s:1:"N";s:3:"嗢";s:1:"N";s:3:"塚";s:1:"N";s:3:"墳";s:1:"N";s:3:"奄";s:1:"N";s:3:"奔";s:1:"N";s:3:"婢";s:1:"N";s:3:"嬨";s:1:"N";s:3:"廒";s:1:"N";s:3:"廙";s:1:"N";s:3:"彩";s:1:"N";s:3:"徭";s:1:"N";s:3:"惘";s:1:"N";s:3:"慎";s:1:"N";s:3:"愈";s:1:"N";s:3:"憎";s:1:"N";s:3:"慠";s:1:"N";s:3:"懲";s:1:"N";s:3:"戴";s:1:"N";s:3:"揄";s:1:"N";s:3:"搜";s:1:"N";s:3:"摒";s:1:"N";s:3:"敖";s:1:"N";s:3:"晴";s:1:"N";s:3:"朗";s:1:"N";s:3:"望";s:1:"N";s:3:"杖";s:1:"N";s:3:"歹";s:1:"N";s:3:"殺";s:1:"N";s:3:"流";s:1:"N";s:3:"滛";s:1:"N";s:3:"滋";s:1:"N";s:3:"漢";s:1:"N";s:3:"瀞";s:1:"N";s:3:"煮";s:1:"N";s:3:"瞧";s:1:"N";s:3:"爵";s:1:"N";s:3:"犯";s:1:"N";s:3:"猪";s:1:"N";s:3:"瑱";s:1:"N";s:3:"甆";s:1:"N";s:3:"画";s:1:"N";s:3:"瘝";s:1:"N";s:3:"瘟";s:1:"N";s:3:"益";s:1:"N";s:3:"盛";s:1:"N";s:3:"直";s:1:"N";s:3:"睊";s:1:"N";s:3:"着";s:1:"N";s:3:"磌";s:1:"N";s:3:"窱";s:1:"N";s:3:"節";s:1:"N";s:3:"类";s:1:"N";s:3:"絛";s:1:"N";s:3:"練";s:1:"N";s:3:"缾";s:1:"N";s:3:"者";s:1:"N";s:3:"荒";s:1:"N";s:3:"華";s:1:"N";s:3:"蝹";s:1:"N";s:3:"襁";s:1:"N";s:3:"覆";s:1:"N";s:3:"視";s:1:"N";s:3:"調";s:1:"N";s:3:"諸";s:1:"N";s:3:"請";s:1:"N";s:3:"謁";s:1:"N";s:3:"諾";s:1:"N";s:3:"諭";s:1:"N";s:3:"謹";s:1:"N";s:3:"變";s:1:"N";s:3:"贈";s:1:"N";s:3:"輸";s:1:"N";s:3:"遲";s:1:"N";s:3:"醙";s:1:"N";s:3:"鉶";s:1:"N";s:3:"陼";s:1:"N";s:3:"難";s:1:"N";s:3:"靖";s:1:"N";s:3:"韛";s:1:"N";s:3:"響";s:1:"N";s:3:"頋";s:1:"N";s:3:"頻";s:1:"N";s:3:"鬒";s:1:"N";s:3:"龜";s:1:"N";s:3:"𢡊";s:1:"N";s:3:"𢡄";s:1:"N";s:3:"𣏕";s:1:"N";s:3:"㮝";s:1:"N";s:3:"䀘";s:1:"N";s:3:"䀹";s:1:"N";s:3:"𥉉";s:1:"N";s:3:"𥳐";s:1:"N";s:3:"𧻓";s:1:"N";s:3:"齃";s:1:"N";s:3:"龎";s:1:"N";s:3:"יִ";s:1:"N";s:3:"ײַ";s:1:"N";s:3:"שׁ";s:1:"N";s:3:"שׂ";s:1:"N";s:3:"שּׁ";s:1:"N";s:3:"שּׂ";s:1:"N";s:3:"אַ";s:1:"N";s:3:"אָ";s:1:"N";s:3:"אּ";s:1:"N";s:3:"בּ";s:1:"N";s:3:"גּ";s:1:"N";s:3:"דּ";s:1:"N";s:3:"הּ";s:1:"N";s:3:"וּ";s:1:"N";s:3:"זּ";s:1:"N";s:3:"טּ";s:1:"N";s:3:"יּ";s:1:"N";s:3:"ךּ";s:1:"N";s:3:"כּ";s:1:"N";s:3:"לּ";s:1:"N";s:3:"מּ";s:1:"N";s:3:"נּ";s:1:"N";s:3:"סּ";s:1:"N";s:3:"ףּ";s:1:"N";s:3:"פּ";s:1:"N";s:3:"צּ";s:1:"N";s:3:"קּ";s:1:"N";s:3:"רּ";s:1:"N";s:3:"שּ";s:1:"N";s:3:"תּ";s:1:"N";s:3:"וֹ";s:1:"N";s:3:"בֿ";s:1:"N";s:3:"כֿ";s:1:"N";s:3:"פֿ";s:1:"N";s:4:"𝅗𝅥";s:1:"N";s:4:"𝅘𝅥";s:1:"N";s:4:"𝅘𝅥𝅮";s:1:"N";s:4:"𝅘𝅥𝅯";s:1:"N";s:4:"𝅘𝅥𝅰";s:1:"N";s:4:"𝅘𝅥𝅱";s:1:"N";s:4:"𝅘𝅥𝅲";s:1:"N";s:4:"𝆹𝅥";s:1:"N";s:4:"𝆺𝅥";s:1:"N";s:4:"𝆹𝅥𝅮";s:1:"N";s:4:"𝆺𝅥𝅮";s:1:"N";s:4:"𝆹𝅥𝅯";s:1:"N";s:4:"𝆺𝅥𝅯";s:1:"N";s:4:"丽";s:1:"N";s:4:"丸";s:1:"N";s:4:"乁";s:1:"N";s:4:"𠄢";s:1:"N";s:4:"你";s:1:"N";s:4:"侮";s:1:"N";s:4:"侻";s:1:"N";s:4:"倂";s:1:"N";s:4:"偺";s:1:"N";s:4:"備";s:1:"N";s:4:"僧";s:1:"N";s:4:"像";s:1:"N";s:4:"㒞";s:1:"N";s:4:"𠘺";s:1:"N";s:4:"免";s:1:"N";s:4:"兔";s:1:"N";s:4:"兤";s:1:"N";s:4:"具";s:1:"N";s:4:"𠔜";s:1:"N";s:4:"㒹";s:1:"N";s:4:"內";s:1:"N";s:4:"再";s:1:"N";s:4:"𠕋";s:1:"N";s:4:"冗";s:1:"N";s:4:"冤";s:1:"N";s:4:"仌";s:1:"N";s:4:"冬";s:1:"N";s:4:"况";s:1:"N";s:4:"𩇟";s:1:"N";s:4:"凵";s:1:"N";s:4:"刃";s:1:"N";s:4:"㓟";s:1:"N";s:4:"刻";s:1:"N";s:4:"剆";s:1:"N";s:4:"割";s:1:"N";s:4:"剷";s:1:"N";s:4:"㔕";s:1:"N";s:4:"勇";s:1:"N";s:4:"勉";s:1:"N";s:4:"勤";s:1:"N";s:4:"勺";s:1:"N";s:4:"包";s:1:"N";s:4:"匆";s:1:"N";s:4:"北";s:1:"N";s:4:"卉";s:1:"N";s:4:"卑";s:1:"N";s:4:"博";s:1:"N";s:4:"即";s:1:"N";s:4:"卽";s:1:"N";s:4:"卿";s:1:"N";s:4:"卿";s:1:"N";s:4:"卿";s:1:"N";s:4:"𠨬";s:1:"N";s:4:"灰";s:1:"N";s:4:"及";s:1:"N";s:4:"叟";s:1:"N";s:4:"𠭣";s:1:"N";s:4:"叫";s:1:"N";s:4:"叱";s:1:"N";s:4:"吆";s:1:"N";s:4:"咞";s:1:"N";s:4:"吸";s:1:"N";s:4:"呈";s:1:"N";s:4:"周";s:1:"N";s:4:"咢";s:1:"N";s:4:"哶";s:1:"N";s:4:"唐";s:1:"N";s:4:"啓";s:1:"N";s:4:"啣";s:1:"N";s:4:"善";s:1:"N";s:4:"善";s:1:"N";s:4:"喙";s:1:"N";s:4:"喫";s:1:"N";s:4:"喳";s:1:"N";s:4:"嗂";s:1:"N";s:4:"圖";s:1:"N";s:4:"嘆";s:1:"N";s:4:"圗";s:1:"N";s:4:"噑";s:1:"N";s:4:"噴";s:1:"N";s:4:"切";s:1:"N";s:4:"壮";s:1:"N";s:4:"城";s:1:"N";s:4:"埴";s:1:"N";s:4:"堍";s:1:"N";s:4:"型";s:1:"N";s:4:"堲";s:1:"N";s:4:"報";s:1:"N";s:4:"墬";s:1:"N";s:4:"𡓤";s:1:"N";s:4:"売";s:1:"N";s:4:"壷";s:1:"N";s:4:"夆";s:1:"N";s:4:"多";s:1:"N";s:4:"夢";s:1:"N";s:4:"奢";s:1:"N";s:4:"𡚨";s:1:"N";s:4:"𡛪";s:1:"N";s:4:"姬";s:1:"N";s:4:"娛";s:1:"N";s:4:"娧";s:1:"N";s:4:"姘";s:1:"N";s:4:"婦";s:1:"N";s:4:"㛮";s:1:"N";s:4:"㛼";s:1:"N";s:4:"嬈";s:1:"N";s:4:"嬾";s:1:"N";s:4:"嬾";s:1:"N";s:4:"𡧈";s:1:"N";s:4:"寃";s:1:"N";s:4:"寘";s:1:"N";s:4:"寧";s:1:"N";s:4:"寳";s:1:"N";s:4:"𡬘";s:1:"N";s:4:"寿";s:1:"N";s:4:"将";s:1:"N";s:4:"当";s:1:"N";s:4:"尢";s:1:"N";s:4:"㞁";s:1:"N";s:4:"屠";s:1:"N";s:4:"屮";s:1:"N";s:4:"峀";s:1:"N";s:4:"岍";s:1:"N";s:4:"𡷤";s:1:"N";s:4:"嵃";s:1:"N";s:4:"𡷦";s:1:"N";s:4:"嵮";s:1:"N";s:4:"嵫";s:1:"N";s:4:"嵼";s:1:"N";s:4:"巡";s:1:"N";s:4:"巢";s:1:"N";s:4:"㠯";s:1:"N";s:4:"巽";s:1:"N";s:4:"帨";s:1:"N";s:4:"帽";s:1:"N";s:4:"幩";s:1:"N";s:4:"㡢";s:1:"N";s:4:"𢆃";s:1:"N";s:4:"㡼";s:1:"N";s:4:"庰";s:1:"N";s:4:"庳";s:1:"N";s:4:"庶";s:1:"N";s:4:"廊";s:1:"N";s:4:"𪎒";s:1:"N";s:4:"廾";s:1:"N";s:4:"𢌱";s:1:"N";s:4:"𢌱";s:1:"N";s:4:"舁";s:1:"N";s:4:"弢";s:1:"N";s:4:"弢";s:1:"N";s:4:"㣇";s:1:"N";s:4:"𣊸";s:1:"N";s:4:"𦇚";s:1:"N";s:4:"形";s:1:"N";s:4:"彫";s:1:"N";s:4:"㣣";s:1:"N";s:4:"徚";s:1:"N";s:4:"忍";s:1:"N";s:4:"志";s:1:"N";s:4:"忹";s:1:"N";s:4:"悁";s:1:"N";s:4:"㤺";s:1:"N";s:4:"㤜";s:1:"N";s:4:"悔";s:1:"N";s:4:"𢛔";s:1:"N";s:4:"惇";s:1:"N";s:4:"慈";s:1:"N";s:4:"慌";s:1:"N";s:4:"慎";s:1:"N";s:4:"慌";s:1:"N";s:4:"慺";s:1:"N";s:4:"憎";s:1:"N";s:4:"憲";s:1:"N";s:4:"憤";s:1:"N";s:4:"憯";s:1:"N";s:4:"懞";s:1:"N";s:4:"懲";s:1:"N";s:4:"懶";s:1:"N";s:4:"成";s:1:"N";s:4:"戛";s:1:"N";s:4:"扝";s:1:"N";s:4:"抱";s:1:"N";s:4:"拔";s:1:"N";s:4:"捐";s:1:"N";s:4:"𢬌";s:1:"N";s:4:"挽";s:1:"N";s:4:"拼";s:1:"N";s:4:"捨";s:1:"N";s:4:"掃";s:1:"N";s:4:"揤";s:1:"N";s:4:"𢯱";s:1:"N";s:4:"搢";s:1:"N";s:4:"揅";s:1:"N";s:4:"掩";s:1:"N";s:4:"㨮";s:1:"N";s:4:"摩";s:1:"N";s:4:"摾";s:1:"N";s:4:"撝";s:1:"N";s:4:"摷";s:1:"N";s:4:"㩬";s:1:"N";s:4:"敏";s:1:"N";s:4:"敬";s:1:"N";s:4:"𣀊";s:1:"N";s:4:"旣";s:1:"N";s:4:"書";s:1:"N";s:4:"晉";s:1:"N";s:4:"㬙";s:1:"N";s:4:"暑";s:1:"N";s:4:"㬈";s:1:"N";s:4:"㫤";s:1:"N";s:4:"冒";s:1:"N";s:4:"冕";s:1:"N";s:4:"最";s:1:"N";s:4:"暜";s:1:"N";s:4:"肭";s:1:"N";s:4:"䏙";s:1:"N";s:4:"朗";s:1:"N";s:4:"望";s:1:"N";s:4:"朡";s:1:"N";s:4:"杞";s:1:"N";s:4:"杓";s:1:"N";s:4:"𣏃";s:1:"N";s:4:"㭉";s:1:"N";s:4:"柺";s:1:"N";s:4:"枅";s:1:"N";s:4:"桒";s:1:"N";s:4:"梅";s:1:"N";s:4:"𣑭";s:1:"N";s:4:"梎";s:1:"N";s:4:"栟";s:1:"N";s:4:"椔";s:1:"N";s:4:"㮝";s:1:"N";s:4:"楂";s:1:"N";s:4:"榣";s:1:"N";s:4:"槪";s:1:"N";s:4:"檨";s:1:"N";s:4:"𣚣";s:1:"N";s:4:"櫛";s:1:"N";s:4:"㰘";s:1:"N";s:4:"次";s:1:"N";s:4:"𣢧";s:1:"N";s:4:"歔";s:1:"N";s:4:"㱎";s:1:"N";s:4:"歲";s:1:"N";s:4:"殟";s:1:"N";s:4:"殺";s:1:"N";s:4:"殻";s:1:"N";s:4:"𣪍";s:1:"N";s:4:"𡴋";s:1:"N";s:4:"𣫺";s:1:"N";s:4:"汎";s:1:"N";s:4:"𣲼";s:1:"N";s:4:"沿";s:1:"N";s:4:"泍";s:1:"N";s:4:"汧";s:1:"N";s:4:"洖";s:1:"N";s:4:"派";s:1:"N";s:4:"海";s:1:"N";s:4:"流";s:1:"N";s:4:"浩";s:1:"N";s:4:"浸";s:1:"N";s:4:"涅";s:1:"N";s:4:"𣴞";s:1:"N";s:4:"洴";s:1:"N";s:4:"港";s:1:"N";s:4:"湮";s:1:"N";s:4:"㴳";s:1:"N";s:4:"滋";s:1:"N";s:4:"滇";s:1:"N";s:4:"𣻑";s:1:"N";s:4:"淹";s:1:"N";s:4:"潮";s:1:"N";s:4:"𣽞";s:1:"N";s:4:"𣾎";s:1:"N";s:4:"濆";s:1:"N";s:4:"瀹";s:1:"N";s:4:"瀞";s:1:"N";s:4:"瀛";s:1:"N";s:4:"㶖";s:1:"N";s:4:"灊";s:1:"N";s:4:"災";s:1:"N";s:4:"灷";s:1:"N";s:4:"炭";s:1:"N";s:4:"𠔥";s:1:"N";s:4:"煅";s:1:"N";s:4:"𤉣";s:1:"N";s:4:"熜";s:1:"N";s:4:"𤎫";s:1:"N";s:4:"爨";s:1:"N";s:4:"爵";s:1:"N";s:4:"牐";s:1:"N";s:4:"𤘈";s:1:"N";s:4:"犀";s:1:"N";s:4:"犕";s:1:"N";s:4:"𤜵";s:1:"N";s:4:"𤠔";s:1:"N";s:4:"獺";s:1:"N";s:4:"王";s:1:"N";s:4:"㺬";s:1:"N";s:4:"玥";s:1:"N";s:4:"㺸";s:1:"N";s:4:"㺸";s:1:"N";s:4:"瑇";s:1:"N";s:4:"瑜";s:1:"N";s:4:"瑱";s:1:"N";s:4:"璅";s:1:"N";s:4:"瓊";s:1:"N";s:4:"㼛";s:1:"N";s:4:"甤";s:1:"N";s:4:"𤰶";s:1:"N";s:4:"甾";s:1:"N";s:4:"𤲒";s:1:"N";s:4:"異";s:1:"N";s:4:"𢆟";s:1:"N";s:4:"瘐";s:1:"N";s:4:"𤾡";s:1:"N";s:4:"𤾸";s:1:"N";s:4:"𥁄";s:1:"N";s:4:"㿼";s:1:"N";s:4:"䀈";s:1:"N";s:4:"直";s:1:"N";s:4:"𥃳";s:1:"N";s:4:"𥃲";s:1:"N";s:4:"𥄙";s:1:"N";s:4:"𥄳";s:1:"N";s:4:"眞";s:1:"N";s:4:"真";s:1:"N";s:4:"真";s:1:"N";s:4:"睊";s:1:"N";s:4:"䀹";s:1:"N";s:4:"瞋";s:1:"N";s:4:"䁆";s:1:"N";s:4:"䂖";s:1:"N";s:4:"𥐝";s:1:"N";s:4:"硎";s:1:"N";s:4:"碌";s:1:"N";s:4:"磌";s:1:"N";s:4:"䃣";s:1:"N";s:4:"𥘦";s:1:"N";s:4:"祖";s:1:"N";s:4:"𥚚";s:1:"N";s:4:"𥛅";s:1:"N";s:4:"福";s:1:"N";s:4:"秫";s:1:"N";s:4:"䄯";s:1:"N";s:4:"穀";s:1:"N";s:4:"穊";s:1:"N";s:4:"穏";s:1:"N";s:4:"𥥼";s:1:"N";s:4:"𥪧";s:1:"N";s:4:"𥪧";s:1:"N";s:4:"竮";s:1:"N";s:4:"䈂";s:1:"N";s:4:"𥮫";s:1:"N";s:4:"篆";s:1:"N";s:4:"築";s:1:"N";s:4:"䈧";s:1:"N";s:4:"𥲀";s:1:"N";s:4:"糒";s:1:"N";s:4:"䊠";s:1:"N";s:4:"糨";s:1:"N";s:4:"糣";s:1:"N";s:4:"紀";s:1:"N";s:4:"𥾆";s:1:"N";s:4:"絣";s:1:"N";s:4:"䌁";s:1:"N";s:4:"緇";s:1:"N";s:4:"縂";s:1:"N";s:4:"繅";s:1:"N";s:4:"䌴";s:1:"N";s:4:"𦈨";s:1:"N";s:4:"𦉇";s:1:"N";s:4:"䍙";s:1:"N";s:4:"𦋙";s:1:"N";s:4:"罺";s:1:"N";s:4:"𦌾";s:1:"N";s:4:"羕";s:1:"N";s:4:"翺";s:1:"N";s:4:"者";s:1:"N";s:4:"𦓚";s:1:"N";s:4:"𦔣";s:1:"N";s:4:"聠";s:1:"N";s:4:"𦖨";s:1:"N";s:4:"聰";s:1:"N";s:4:"𣍟";s:1:"N";s:4:"䏕";s:1:"N";s:4:"育";s:1:"N";s:4:"脃";s:1:"N";s:4:"䐋";s:1:"N";s:4:"脾";s:1:"N";s:4:"媵";s:1:"N";s:4:"𦞧";s:1:"N";s:4:"𦞵";s:1:"N";s:4:"𣎓";s:1:"N";s:4:"𣎜";s:1:"N";s:4:"舁";s:1:"N";s:4:"舄";s:1:"N";s:4:"辞";s:1:"N";s:4:"䑫";s:1:"N";s:4:"芑";s:1:"N";s:4:"芋";s:1:"N";s:4:"芝";s:1:"N";s:4:"劳";s:1:"N";s:4:"花";s:1:"N";s:4:"芳";s:1:"N";s:4:"芽";s:1:"N";s:4:"苦";s:1:"N";s:4:"𦬼";s:1:"N";s:4:"若";s:1:"N";s:4:"茝";s:1:"N";s:4:"荣";s:1:"N";s:4:"莭";s:1:"N";s:4:"茣";s:1:"N";s:4:"莽";s:1:"N";s:4:"菧";s:1:"N";s:4:"著";s:1:"N";s:4:"荓";s:1:"N";s:4:"菊";s:1:"N";s:4:"菌";s:1:"N";s:4:"菜";s:1:"N";s:4:"𦰶";s:1:"N";s:4:"𦵫";s:1:"N";s:4:"𦳕";s:1:"N";s:4:"䔫";s:1:"N";s:4:"蓱";s:1:"N";s:4:"蓳";s:1:"N";s:4:"蔖";s:1:"N";s:4:"𧏊";s:1:"N";s:4:"蕤";s:1:"N";s:4:"𦼬";s:1:"N";s:4:"䕝";s:1:"N";s:4:"䕡";s:1:"N";s:4:"𦾱";s:1:"N";s:4:"𧃒";s:1:"N";s:4:"䕫";s:1:"N";s:4:"虐";s:1:"N";s:4:"虜";s:1:"N";s:4:"虧";s:1:"N";s:4:"虩";s:1:"N";s:4:"蚩";s:1:"N";s:4:"蚈";s:1:"N";s:4:"蜎";s:1:"N";s:4:"蛢";s:1:"N";s:4:"蝹";s:1:"N";s:4:"蜨";s:1:"N";s:4:"蝫";s:1:"N";s:4:"螆";s:1:"N";s:4:"䗗";s:1:"N";s:4:"蟡";s:1:"N";s:4:"蠁";s:1:"N";s:4:"䗹";s:1:"N";s:4:"衠";s:1:"N";s:4:"衣";s:1:"N";s:4:"𧙧";s:1:"N";s:4:"裗";s:1:"N";s:4:"裞";s:1:"N";s:4:"䘵";s:1:"N";s:4:"裺";s:1:"N";s:4:"㒻";s:1:"N";s:4:"𧢮";s:1:"N";s:4:"𧥦";s:1:"N";s:4:"䚾";s:1:"N";s:4:"䛇";s:1:"N";s:4:"誠";s:1:"N";s:4:"諭";s:1:"N";s:4:"變";s:1:"N";s:4:"豕";s:1:"N";s:4:"𧲨";s:1:"N";s:4:"貫";s:1:"N";s:4:"賁";s:1:"N";s:4:"贛";s:1:"N";s:4:"起";s:1:"N";s:4:"𧼯";s:1:"N";s:4:"𠠄";s:1:"N";s:4:"跋";s:1:"N";s:4:"趼";s:1:"N";s:4:"跰";s:1:"N";s:4:"𠣞";s:1:"N";s:4:"軔";s:1:"N";s:4:"輸";s:1:"N";s:4:"𨗒";s:1:"N";s:4:"𨗭";s:1:"N";s:4:"邔";s:1:"N";s:4:"郱";s:1:"N";s:4:"鄑";s:1:"N";s:4:"𨜮";s:1:"N";s:4:"鄛";s:1:"N";s:4:"鈸";s:1:"N";s:4:"鋗";s:1:"N";s:4:"鋘";s:1:"N";s:4:"鉼";s:1:"N";s:4:"鏹";s:1:"N";s:4:"鐕";s:1:"N";s:4:"𨯺";s:1:"N";s:4:"開";s:1:"N";s:4:"䦕";s:1:"N";s:4:"閷";s:1:"N";s:4:"𨵷";s:1:"N";s:4:"䧦";s:1:"N";s:4:"雃";s:1:"N";s:4:"嶲";s:1:"N";s:4:"霣";s:1:"N";s:4:"𩅅";s:1:"N";s:4:"𩈚";s:1:"N";s:4:"䩮";s:1:"N";s:4:"䩶";s:1:"N";s:4:"韠";s:1:"N";s:4:"𩐊";s:1:"N";s:4:"䪲";s:1:"N";s:4:"𩒖";s:1:"N";s:4:"頋";s:1:"N";s:4:"頋";s:1:"N";s:4:"頩";s:1:"N";s:4:"𩖶";s:1:"N";s:4:"飢";s:1:"N";s:4:"䬳";s:1:"N";s:4:"餩";s:1:"N";s:4:"馧";s:1:"N";s:4:"駂";s:1:"N";s:4:"駾";s:1:"N";s:4:"䯎";s:1:"N";s:4:"𩬰";s:1:"N";s:4:"鬒";s:1:"N";s:4:"鱀";s:1:"N";s:4:"鳽";s:1:"N";s:4:"䳎";s:1:"N";s:4:"䳭";s:1:"N";s:4:"鵧";s:1:"N";s:4:"𪃎";s:1:"N";s:4:"䳸";s:1:"N";s:4:"𪄅";s:1:"N";s:4:"𪈎";s:1:"N";s:4:"𪊑";s:1:"N";s:4:"麻";s:1:"N";s:4:"䵖";s:1:"N";s:4:"黹";s:1:"N";s:4:"黾";s:1:"N";s:4:"鼅";s:1:"N";s:4:"鼏";s:1:"N";s:4:"鼖";s:1:"N";s:4:"鼻";s:1:"N";s:4:"𪘀";s:1:"N";s:2:"̀";s:1:"M";s:2:"́";s:1:"M";s:2:"̂";s:1:"M";s:2:"̃";s:1:"M";s:2:"̄";s:1:"M";s:2:"̆";s:1:"M";s:2:"̇";s:1:"M";s:2:"̈";s:1:"M";s:2:"̉";s:1:"M";s:2:"̊";s:1:"M";s:2:"̋";s:1:"M";s:2:"̌";s:1:"M";s:2:"̏";s:1:"M";s:2:"̑";s:1:"M";s:2:"̓";s:1:"M";s:2:"̔";s:1:"M";s:2:"̛";s:1:"M";s:2:"̣";s:1:"M";s:2:"̤";s:1:"M";s:2:"̥";s:1:"M";s:2:"̦";s:1:"M";s:2:"̧";s:1:"M";s:2:"̨";s:1:"M";s:2:"̭";s:1:"M";s:2:"̮";s:1:"M";s:2:"̰";s:1:"M";s:2:"̱";s:1:"M";s:2:"̸";s:1:"M";s:2:"͂";s:1:"M";s:2:"ͅ";s:1:"M";s:2:"ٓ";s:1:"M";s:2:"ٔ";s:1:"M";s:2:"ٕ";s:1:"M";s:3:"़";s:1:"M";s:3:"া";s:1:"M";s:3:"ৗ";s:1:"M";s:3:"ା";s:1:"M";s:3:"ୖ";s:1:"M";s:3:"ୗ";s:1:"M";s:3:"ா";s:1:"M";s:3:"ௗ";s:1:"M";s:3:"ౖ";s:1:"M";s:3:"ೂ";s:1:"M";s:3:"ೕ";s:1:"M";s:3:"ೖ";s:1:"M";s:3:"ാ";s:1:"M";s:3:"ൗ";s:1:"M";s:3:"්";s:1:"M";s:3:"ා";s:1:"M";s:3:"ෟ";s:1:"M";s:3:"ီ";s:1:"M";s:3:"ᅡ";s:1:"M";s:3:"ᅢ";s:1:"M";s:3:"ᅣ";s:1:"M";s:3:"ᅤ";s:1:"M";s:3:"ᅥ";s:1:"M";s:3:"ᅦ";s:1:"M";s:3:"ᅧ";s:1:"M";s:3:"ᅨ";s:1:"M";s:3:"ᅩ";s:1:"M";s:3:"ᅪ";s:1:"M";s:3:"ᅫ";s:1:"M";s:3:"ᅬ";s:1:"M";s:3:"ᅭ";s:1:"M";s:3:"ᅮ";s:1:"M";s:3:"ᅯ";s:1:"M";s:3:"ᅰ";s:1:"M";s:3:"ᅱ";s:1:"M";s:3:"ᅲ";s:1:"M";s:3:"ᅳ";s:1:"M";s:3:"ᅴ";s:1:"M";s:3:"ᅵ";s:1:"M";s:3:"ᆨ";s:1:"M";s:3:"ᆩ";s:1:"M";s:3:"ᆪ";s:1:"M";s:3:"ᆫ";s:1:"M";s:3:"ᆬ";s:1:"M";s:3:"ᆭ";s:1:"M";s:3:"ᆮ";s:1:"M";s:3:"ᆯ";s:1:"M";s:3:"ᆰ";s:1:"M";s:3:"ᆱ";s:1:"M";s:3:"ᆲ";s:1:"M";s:3:"ᆳ";s:1:"M";s:3:"ᆴ";s:1:"M";s:3:"ᆵ";s:1:"M";s:3:"ᆶ";s:1:"M";s:3:"ᆷ";s:1:"M";s:3:"ᆸ";s:1:"M";s:3:"ᆹ";s:1:"M";s:3:"ᆺ";s:1:"M";s:3:"ᆻ";s:1:"M";s:3:"ᆼ";s:1:"M";s:3:"ᆽ";s:1:"M";s:3:"ᆾ";s:1:"M";s:3:"ᆿ";s:1:"M";s:3:"ᇀ";s:1:"M";s:3:"ᇁ";s:1:"M";s:3:"ᇂ";s:1:"M";s:3:"ᬵ";s:1:"M";s:3:"゙";s:1:"M";s:3:"゚";s:1:"M";s:4:"𑂺";s:1:"M";}' ); + +UtfNormal::$utfCombiningClass = unserialize( 'a:501:{s:2:"̀";i:230;s:2:"́";i:230;s:2:"̂";i:230;s:2:"̃";i:230;s:2:"̄";i:230;s:2:"̅";i:230;s:2:"̆";i:230;s:2:"̇";i:230;s:2:"̈";i:230;s:2:"̉";i:230;s:2:"̊";i:230;s:2:"̋";i:230;s:2:"̌";i:230;s:2:"̍";i:230;s:2:"̎";i:230;s:2:"̏";i:230;s:2:"̐";i:230;s:2:"̑";i:230;s:2:"̒";i:230;s:2:"̓";i:230;s:2:"̔";i:230;s:2:"̕";i:232;s:2:"̖";i:220;s:2:"̗";i:220;s:2:"̘";i:220;s:2:"̙";i:220;s:2:"̚";i:232;s:2:"̛";i:216;s:2:"̜";i:220;s:2:"̝";i:220;s:2:"̞";i:220;s:2:"̟";i:220;s:2:"̠";i:220;s:2:"̡";i:202;s:2:"̢";i:202;s:2:"̣";i:220;s:2:"̤";i:220;s:2:"̥";i:220;s:2:"̦";i:220;s:2:"̧";i:202;s:2:"̨";i:202;s:2:"̩";i:220;s:2:"̪";i:220;s:2:"̫";i:220;s:2:"̬";i:220;s:2:"̭";i:220;s:2:"̮";i:220;s:2:"̯";i:220;s:2:"̰";i:220;s:2:"̱";i:220;s:2:"̲";i:220;s:2:"̳";i:220;s:2:"̴";i:1;s:2:"̵";i:1;s:2:"̶";i:1;s:2:"̷";i:1;s:2:"̸";i:1;s:2:"̹";i:220;s:2:"̺";i:220;s:2:"̻";i:220;s:2:"̼";i:220;s:2:"̽";i:230;s:2:"̾";i:230;s:2:"̿";i:230;s:2:"̀";i:230;s:2:"́";i:230;s:2:"͂";i:230;s:2:"̓";i:230;s:2:"̈́";i:230;s:2:"ͅ";i:240;s:2:"͆";i:230;s:2:"͇";i:220;s:2:"͈";i:220;s:2:"͉";i:220;s:2:"͊";i:230;s:2:"͋";i:230;s:2:"͌";i:230;s:2:"͍";i:220;s:2:"͎";i:220;s:2:"͐";i:230;s:2:"͑";i:230;s:2:"͒";i:230;s:2:"͓";i:220;s:2:"͔";i:220;s:2:"͕";i:220;s:2:"͖";i:220;s:2:"͗";i:230;s:2:"͘";i:232;s:2:"͙";i:220;s:2:"͚";i:220;s:2:"͛";i:230;s:2:"͜";i:233;s:2:"͝";i:234;s:2:"͞";i:234;s:2:"͟";i:233;s:2:"͠";i:234;s:2:"͡";i:234;s:2:"͢";i:233;s:2:"ͣ";i:230;s:2:"ͤ";i:230;s:2:"ͥ";i:230;s:2:"ͦ";i:230;s:2:"ͧ";i:230;s:2:"ͨ";i:230;s:2:"ͩ";i:230;s:2:"ͪ";i:230;s:2:"ͫ";i:230;s:2:"ͬ";i:230;s:2:"ͭ";i:230;s:2:"ͮ";i:230;s:2:"ͯ";i:230;s:2:"҃";i:230;s:2:"҄";i:230;s:2:"҅";i:230;s:2:"҆";i:230;s:2:"҇";i:230;s:2:"֑";i:220;s:2:"֒";i:230;s:2:"֓";i:230;s:2:"֔";i:230;s:2:"֕";i:230;s:2:"֖";i:220;s:2:"֗";i:230;s:2:"֘";i:230;s:2:"֙";i:230;s:2:"֚";i:222;s:2:"֛";i:220;s:2:"֜";i:230;s:2:"֝";i:230;s:2:"֞";i:230;s:2:"֟";i:230;s:2:"֠";i:230;s:2:"֡";i:230;s:2:"֢";i:220;s:2:"֣";i:220;s:2:"֤";i:220;s:2:"֥";i:220;s:2:"֦";i:220;s:2:"֧";i:220;s:2:"֨";i:230;s:2:"֩";i:230;s:2:"֪";i:220;s:2:"֫";i:230;s:2:"֬";i:230;s:2:"֭";i:222;s:2:"֮";i:228;s:2:"֯";i:230;s:2:"ְ";i:10;s:2:"ֱ";i:11;s:2:"ֲ";i:12;s:2:"ֳ";i:13;s:2:"ִ";i:14;s:2:"ֵ";i:15;s:2:"ֶ";i:16;s:2:"ַ";i:17;s:2:"ָ";i:18;s:2:"ֹ";i:19;s:2:"ֺ";i:19;s:2:"ֻ";i:20;s:2:"ּ";i:21;s:2:"ֽ";i:22;s:2:"ֿ";i:23;s:2:"ׁ";i:24;s:2:"ׂ";i:25;s:2:"ׄ";i:230;s:2:"ׅ";i:220;s:2:"ׇ";i:18;s:2:"ؐ";i:230;s:2:"ؑ";i:230;s:2:"ؒ";i:230;s:2:"ؓ";i:230;s:2:"ؔ";i:230;s:2:"ؕ";i:230;s:2:"ؖ";i:230;s:2:"ؗ";i:230;s:2:"ؘ";i:30;s:2:"ؙ";i:31;s:2:"ؚ";i:32;s:2:"ً";i:27;s:2:"ٌ";i:28;s:2:"ٍ";i:29;s:2:"َ";i:30;s:2:"ُ";i:31;s:2:"ِ";i:32;s:2:"ّ";i:33;s:2:"ْ";i:34;s:2:"ٓ";i:230;s:2:"ٔ";i:230;s:2:"ٕ";i:220;s:2:"ٖ";i:220;s:2:"ٗ";i:230;s:2:"٘";i:230;s:2:"ٙ";i:230;s:2:"ٚ";i:230;s:2:"ٛ";i:230;s:2:"ٜ";i:220;s:2:"ٝ";i:230;s:2:"ٞ";i:230;s:2:"ٰ";i:35;s:2:"ۖ";i:230;s:2:"ۗ";i:230;s:2:"ۘ";i:230;s:2:"ۙ";i:230;s:2:"ۚ";i:230;s:2:"ۛ";i:230;s:2:"ۜ";i:230;s:2:"۟";i:230;s:2:"۠";i:230;s:2:"ۡ";i:230;s:2:"ۢ";i:230;s:2:"ۣ";i:220;s:2:"ۤ";i:230;s:2:"ۧ";i:230;s:2:"ۨ";i:230;s:2:"۪";i:220;s:2:"۫";i:230;s:2:"۬";i:230;s:2:"ۭ";i:220;s:2:"ܑ";i:36;s:2:"ܰ";i:230;s:2:"ܱ";i:220;s:2:"ܲ";i:230;s:2:"ܳ";i:230;s:2:"ܴ";i:220;s:2:"ܵ";i:230;s:2:"ܶ";i:230;s:2:"ܷ";i:220;s:2:"ܸ";i:220;s:2:"ܹ";i:220;s:2:"ܺ";i:230;s:2:"ܻ";i:220;s:2:"ܼ";i:220;s:2:"ܽ";i:230;s:2:"ܾ";i:220;s:2:"ܿ";i:230;s:2:"݀";i:230;s:2:"݁";i:230;s:2:"݂";i:220;s:2:"݃";i:230;s:2:"݄";i:220;s:2:"݅";i:230;s:2:"݆";i:220;s:2:"݇";i:230;s:2:"݈";i:220;s:2:"݉";i:230;s:2:"݊";i:230;s:2:"߫";i:230;s:2:"߬";i:230;s:2:"߭";i:230;s:2:"߮";i:230;s:2:"߯";i:230;s:2:"߰";i:230;s:2:"߱";i:230;s:2:"߲";i:220;s:2:"߳";i:230;s:3:"़";i:7;s:3:"्";i:9;s:3:"॑";i:230;s:3:"॒";i:220;s:3:"॓";i:230;s:3:"॔";i:230;s:3:"়";i:7;s:3:"্";i:9;s:3:"਼";i:7;s:3:"੍";i:9;s:3:"઼";i:7;s:3:"્";i:9;s:3:"଼";i:7;s:3:"୍";i:9;s:3:"்";i:9;s:3:"్";i:9;s:3:"ౕ";i:84;s:3:"ౖ";i:91;s:3:"಼";i:7;s:3:"್";i:9;s:3:"്";i:9;s:3:"්";i:9;s:3:"ุ";i:103;s:3:"ู";i:103;s:3:"ฺ";i:9;s:3:"่";i:107;s:3:"้";i:107;s:3:"๊";i:107;s:3:"๋";i:107;s:3:"ຸ";i:118;s:3:"ູ";i:118;s:3:"່";i:122;s:3:"້";i:122;s:3:"໊";i:122;s:3:"໋";i:122;s:3:"༘";i:220;s:3:"༙";i:220;s:3:"༵";i:220;s:3:"༷";i:220;s:3:"༹";i:216;s:3:"ཱ";i:129;s:3:"ི";i:130;s:3:"ུ";i:132;s:3:"ེ";i:130;s:3:"ཻ";i:130;s:3:"ོ";i:130;s:3:"ཽ";i:130;s:3:"ྀ";i:130;s:3:"ྂ";i:230;s:3:"ྃ";i:230;s:3:"྄";i:9;s:3:"྆";i:230;s:3:"྇";i:230;s:3:"࿆";i:220;s:3:"့";i:7;s:3:"္";i:9;s:3:"်";i:9;s:3:"ႍ";i:220;s:3:"፟";i:230;s:3:"᜔";i:9;s:3:"᜴";i:9;s:3:"្";i:9;s:3:"៝";i:230;s:3:"ᢩ";i:228;s:3:"᤹";i:222;s:3:"᤺";i:230;s:3:"᤻";i:220;s:3:"ᨗ";i:230;s:3:"ᨘ";i:220;s:3:"᬴";i:7;s:3:"᭄";i:9;s:3:"᭫";i:230;s:3:"᭬";i:220;s:3:"᭭";i:230;s:3:"᭮";i:230;s:3:"᭯";i:230;s:3:"᭰";i:230;s:3:"᭱";i:230;s:3:"᭲";i:230;s:3:"᭳";i:230;s:3:"᮪";i:9;s:3:"᰷";i:7;s:3:"᷀";i:230;s:3:"᷁";i:230;s:3:"᷂";i:220;s:3:"᷃";i:230;s:3:"᷄";i:230;s:3:"᷅";i:230;s:3:"᷆";i:230;s:3:"᷇";i:230;s:3:"᷈";i:230;s:3:"᷉";i:230;s:3:"᷊";i:220;s:3:"᷋";i:230;s:3:"᷌";i:230;s:3:"᷍";i:234;s:3:"᷎";i:214;s:3:"᷏";i:220;s:3:"᷐";i:202;s:3:"᷑";i:230;s:3:"᷒";i:230;s:3:"ᷓ";i:230;s:3:"ᷔ";i:230;s:3:"ᷕ";i:230;s:3:"ᷖ";i:230;s:3:"ᷗ";i:230;s:3:"ᷘ";i:230;s:3:"ᷙ";i:230;s:3:"ᷚ";i:230;s:3:"ᷛ";i:230;s:3:"ᷜ";i:230;s:3:"ᷝ";i:230;s:3:"ᷞ";i:230;s:3:"ᷟ";i:230;s:3:"ᷠ";i:230;s:3:"ᷡ";i:230;s:3:"ᷢ";i:230;s:3:"ᷣ";i:230;s:3:"ᷤ";i:230;s:3:"ᷥ";i:230;s:3:"ᷦ";i:230;s:3:"᷾";i:230;s:3:"᷿";i:220;s:3:"⃐";i:230;s:3:"⃑";i:230;s:3:"⃒";i:1;s:3:"⃓";i:1;s:3:"⃔";i:230;s:3:"⃕";i:230;s:3:"⃖";i:230;s:3:"⃗";i:230;s:3:"⃘";i:1;s:3:"⃙";i:1;s:3:"⃚";i:1;s:3:"⃛";i:230;s:3:"⃜";i:230;s:3:"⃡";i:230;s:3:"⃥";i:1;s:3:"⃦";i:1;s:3:"⃧";i:230;s:3:"⃨";i:220;s:3:"⃩";i:230;s:3:"⃪";i:1;s:3:"⃫";i:1;s:3:"⃬";i:220;s:3:"⃭";i:220;s:3:"⃮";i:220;s:3:"⃯";i:220;s:3:"⃰";i:230;s:3:"ⷠ";i:230;s:3:"ⷡ";i:230;s:3:"ⷢ";i:230;s:3:"ⷣ";i:230;s:3:"ⷤ";i:230;s:3:"ⷥ";i:230;s:3:"ⷦ";i:230;s:3:"ⷧ";i:230;s:3:"ⷨ";i:230;s:3:"ⷩ";i:230;s:3:"ⷪ";i:230;s:3:"ⷫ";i:230;s:3:"ⷬ";i:230;s:3:"ⷭ";i:230;s:3:"ⷮ";i:230;s:3:"ⷯ";i:230;s:3:"ⷰ";i:230;s:3:"ⷱ";i:230;s:3:"ⷲ";i:230;s:3:"ⷳ";i:230;s:3:"ⷴ";i:230;s:3:"ⷵ";i:230;s:3:"ⷶ";i:230;s:3:"ⷷ";i:230;s:3:"ⷸ";i:230;s:3:"ⷹ";i:230;s:3:"ⷺ";i:230;s:3:"ⷻ";i:230;s:3:"ⷼ";i:230;s:3:"ⷽ";i:230;s:3:"ⷾ";i:230;s:3:"ⷿ";i:230;s:3:"〪";i:218;s:3:"〫";i:228;s:3:"〬";i:232;s:3:"〭";i:222;s:3:"〮";i:224;s:3:"〯";i:224;s:3:"゙";i:8;s:3:"゚";i:8;s:3:"꙯";i:230;s:3:"꙼";i:230;s:3:"꙽";i:230;s:3:"꠆";i:9;s:3:"꣄";i:9;s:3:"꤫";i:220;s:3:"꤬";i:220;s:3:"꤭";i:220;s:3:"꥓";i:9;s:3:"ﬞ";i:26;s:3:"︠";i:230;s:3:"︡";i:230;s:3:"︢";i:230;s:3:"︣";i:230;s:3:"︤";i:230;s:3:"︥";i:230;s:3:"︦";i:230;s:4:"𐇽";i:220;s:4:"𐨍";i:220;s:4:"𐨏";i:230;s:4:"𐨸";i:230;s:4:"𐨹";i:1;s:4:"𐨺";i:220;s:4:"𐨿";i:9;s:4:"𝅥";i:216;s:4:"𝅦";i:216;s:4:"𝅧";i:1;s:4:"𝅨";i:1;s:4:"𝅩";i:1;s:4:"𝅭";i:226;s:4:"𝅮";i:216;s:4:"𝅯";i:216;s:4:"𝅰";i:216;s:4:"𝅱";i:216;s:4:"𝅲";i:216;s:4:"𝅻";i:220;s:4:"𝅼";i:220;s:4:"𝅽";i:220;s:4:"𝅾";i:220;s:4:"𝅿";i:220;s:4:"𝆀";i:220;s:4:"𝆁";i:220;s:4:"𝆂";i:220;s:4:"𝆅";i:230;s:4:"𝆆";i:230;s:4:"𝆇";i:230;s:4:"𝆈";i:230;s:4:"𝆉";i:230;s:4:"𝆊";i:220;s:4:"𝆋";i:220;s:4:"𝆪";i:230;s:4:"𝆫";i:230;s:4:"𝆬";i:230;s:4:"𝆭";i:230;s:4:"𝉂";i:230;s:4:"𝉃";i:230;s:4:"𝉄";i:230;}' ); +UtfNormal::$utfCanonicalComp = unserialize( 'a:1862:{s:3:"À";s:2:"À";s:3:"Á";s:2:"Á";s:3:"Â";s:2:"Â";s:3:"Ã";s:2:"Ã";s:3:"Ä";s:2:"Ä";s:3:"Å";s:2:"Å";s:3:"Ç";s:2:"Ç";s:3:"È";s:2:"È";s:3:"É";s:2:"É";s:3:"Ê";s:2:"Ê";s:3:"Ë";s:2:"Ë";s:3:"Ì";s:2:"Ì";s:3:"Í";s:2:"Í";s:3:"Î";s:2:"Î";s:3:"Ï";s:2:"Ï";s:3:"Ñ";s:2:"Ñ";s:3:"Ò";s:2:"Ò";s:3:"Ó";s:2:"Ó";s:3:"Ô";s:2:"Ô";s:3:"Õ";s:2:"Õ";s:3:"Ö";s:2:"Ö";s:3:"Ù";s:2:"Ù";s:3:"Ú";s:2:"Ú";s:3:"Û";s:2:"Û";s:3:"Ü";s:2:"Ü";s:3:"Ý";s:2:"Ý";s:3:"à";s:2:"à";s:3:"á";s:2:"á";s:3:"â";s:2:"â";s:3:"ã";s:2:"ã";s:3:"ä";s:2:"ä";s:3:"å";s:2:"å";s:3:"ç";s:2:"ç";s:3:"è";s:2:"è";s:3:"é";s:2:"é";s:3:"ê";s:2:"ê";s:3:"ë";s:2:"ë";s:3:"ì";s:2:"ì";s:3:"í";s:2:"í";s:3:"î";s:2:"î";s:3:"ï";s:2:"ï";s:3:"ñ";s:2:"ñ";s:3:"ò";s:2:"ò";s:3:"ó";s:2:"ó";s:3:"ô";s:2:"ô";s:3:"õ";s:2:"õ";s:3:"ö";s:2:"ö";s:3:"ù";s:2:"ù";s:3:"ú";s:2:"ú";s:3:"û";s:2:"û";s:3:"ü";s:2:"ü";s:3:"ý";s:2:"ý";s:3:"ÿ";s:2:"ÿ";s:3:"Ā";s:2:"Ā";s:3:"ā";s:2:"ā";s:3:"Ă";s:2:"Ă";s:3:"ă";s:2:"ă";s:3:"Ą";s:2:"Ą";s:3:"ą";s:2:"ą";s:3:"Ć";s:2:"Ć";s:3:"ć";s:2:"ć";s:3:"Ĉ";s:2:"Ĉ";s:3:"ĉ";s:2:"ĉ";s:3:"Ċ";s:2:"Ċ";s:3:"ċ";s:2:"ċ";s:3:"Č";s:2:"Č";s:3:"č";s:2:"č";s:3:"Ď";s:2:"Ď";s:3:"ď";s:2:"ď";s:3:"Ē";s:2:"Ē";s:3:"ē";s:2:"ē";s:3:"Ĕ";s:2:"Ĕ";s:3:"ĕ";s:2:"ĕ";s:3:"Ė";s:2:"Ė";s:3:"ė";s:2:"ė";s:3:"Ę";s:2:"Ę";s:3:"ę";s:2:"ę";s:3:"Ě";s:2:"Ě";s:3:"ě";s:2:"ě";s:3:"Ĝ";s:2:"Ĝ";s:3:"ĝ";s:2:"ĝ";s:3:"Ğ";s:2:"Ğ";s:3:"ğ";s:2:"ğ";s:3:"Ġ";s:2:"Ġ";s:3:"ġ";s:2:"ġ";s:3:"Ģ";s:2:"Ģ";s:3:"ģ";s:2:"ģ";s:3:"Ĥ";s:2:"Ĥ";s:3:"ĥ";s:2:"ĥ";s:3:"Ĩ";s:2:"Ĩ";s:3:"ĩ";s:2:"ĩ";s:3:"Ī";s:2:"Ī";s:3:"ī";s:2:"ī";s:3:"Ĭ";s:2:"Ĭ";s:3:"ĭ";s:2:"ĭ";s:3:"Į";s:2:"Į";s:3:"į";s:2:"į";s:3:"İ";s:2:"İ";s:3:"Ĵ";s:2:"Ĵ";s:3:"ĵ";s:2:"ĵ";s:3:"Ķ";s:2:"Ķ";s:3:"ķ";s:2:"ķ";s:3:"Ĺ";s:2:"Ĺ";s:3:"ĺ";s:2:"ĺ";s:3:"Ļ";s:2:"Ļ";s:3:"ļ";s:2:"ļ";s:3:"Ľ";s:2:"Ľ";s:3:"ľ";s:2:"ľ";s:3:"Ń";s:2:"Ń";s:3:"ń";s:2:"ń";s:3:"Ņ";s:2:"Ņ";s:3:"ņ";s:2:"ņ";s:3:"Ň";s:2:"Ň";s:3:"ň";s:2:"ň";s:3:"Ō";s:2:"Ō";s:3:"ō";s:2:"ō";s:3:"Ŏ";s:2:"Ŏ";s:3:"ŏ";s:2:"ŏ";s:3:"Ő";s:2:"Ő";s:3:"ő";s:2:"ő";s:3:"Ŕ";s:2:"Ŕ";s:3:"ŕ";s:2:"ŕ";s:3:"Ŗ";s:2:"Ŗ";s:3:"ŗ";s:2:"ŗ";s:3:"Ř";s:2:"Ř";s:3:"ř";s:2:"ř";s:3:"Ś";s:2:"Ś";s:3:"ś";s:2:"ś";s:3:"Ŝ";s:2:"Ŝ";s:3:"ŝ";s:2:"ŝ";s:3:"Ş";s:2:"Ş";s:3:"ş";s:2:"ş";s:3:"Š";s:2:"Š";s:3:"š";s:2:"š";s:3:"Ţ";s:2:"Ţ";s:3:"ţ";s:2:"ţ";s:3:"Ť";s:2:"Ť";s:3:"ť";s:2:"ť";s:3:"Ũ";s:2:"Ũ";s:3:"ũ";s:2:"ũ";s:3:"Ū";s:2:"Ū";s:3:"ū";s:2:"ū";s:3:"Ŭ";s:2:"Ŭ";s:3:"ŭ";s:2:"ŭ";s:3:"Ů";s:2:"Ů";s:3:"ů";s:2:"ů";s:3:"Ű";s:2:"Ű";s:3:"ű";s:2:"ű";s:3:"Ų";s:2:"Ų";s:3:"ų";s:2:"ų";s:3:"Ŵ";s:2:"Ŵ";s:3:"ŵ";s:2:"ŵ";s:3:"Ŷ";s:2:"Ŷ";s:3:"ŷ";s:2:"ŷ";s:3:"Ÿ";s:2:"Ÿ";s:3:"Ź";s:2:"Ź";s:3:"ź";s:2:"ź";s:3:"Ż";s:2:"Ż";s:3:"ż";s:2:"ż";s:3:"Ž";s:2:"Ž";s:3:"ž";s:2:"ž";s:3:"Ơ";s:2:"Ơ";s:3:"ơ";s:2:"ơ";s:3:"Ư";s:2:"Ư";s:3:"ư";s:2:"ư";s:3:"Ǎ";s:2:"Ǎ";s:3:"ǎ";s:2:"ǎ";s:3:"Ǐ";s:2:"Ǐ";s:3:"ǐ";s:2:"ǐ";s:3:"Ǒ";s:2:"Ǒ";s:3:"ǒ";s:2:"ǒ";s:3:"Ǔ";s:2:"Ǔ";s:3:"ǔ";s:2:"ǔ";s:4:"Ǖ";s:2:"Ǖ";s:4:"ǖ";s:2:"ǖ";s:4:"Ǘ";s:2:"Ǘ";s:4:"ǘ";s:2:"ǘ";s:4:"Ǚ";s:2:"Ǚ";s:4:"ǚ";s:2:"ǚ";s:4:"Ǜ";s:2:"Ǜ";s:4:"ǜ";s:2:"ǜ";s:4:"Ǟ";s:2:"Ǟ";s:4:"ǟ";s:2:"ǟ";s:4:"Ǡ";s:2:"Ǡ";s:4:"ǡ";s:2:"ǡ";s:4:"Ǣ";s:2:"Ǣ";s:4:"ǣ";s:2:"ǣ";s:3:"Ǧ";s:2:"Ǧ";s:3:"ǧ";s:2:"ǧ";s:3:"Ǩ";s:2:"Ǩ";s:3:"ǩ";s:2:"ǩ";s:3:"Ǫ";s:2:"Ǫ";s:3:"ǫ";s:2:"ǫ";s:4:"Ǭ";s:2:"Ǭ";s:4:"ǭ";s:2:"ǭ";s:4:"Ǯ";s:2:"Ǯ";s:4:"ǯ";s:2:"ǯ";s:3:"ǰ";s:2:"ǰ";s:3:"Ǵ";s:2:"Ǵ";s:3:"ǵ";s:2:"ǵ";s:3:"Ǹ";s:2:"Ǹ";s:3:"ǹ";s:2:"ǹ";s:4:"Ǻ";s:2:"Ǻ";s:4:"ǻ";s:2:"ǻ";s:4:"Ǽ";s:2:"Ǽ";s:4:"ǽ";s:2:"ǽ";s:4:"Ǿ";s:2:"Ǿ";s:4:"ǿ";s:2:"ǿ";s:3:"Ȁ";s:2:"Ȁ";s:3:"ȁ";s:2:"ȁ";s:3:"Ȃ";s:2:"Ȃ";s:3:"ȃ";s:2:"ȃ";s:3:"Ȅ";s:2:"Ȅ";s:3:"ȅ";s:2:"ȅ";s:3:"Ȇ";s:2:"Ȇ";s:3:"ȇ";s:2:"ȇ";s:3:"Ȉ";s:2:"Ȉ";s:3:"ȉ";s:2:"ȉ";s:3:"Ȋ";s:2:"Ȋ";s:3:"ȋ";s:2:"ȋ";s:3:"Ȍ";s:2:"Ȍ";s:3:"ȍ";s:2:"ȍ";s:3:"Ȏ";s:2:"Ȏ";s:3:"ȏ";s:2:"ȏ";s:3:"Ȑ";s:2:"Ȑ";s:3:"ȑ";s:2:"ȑ";s:3:"Ȓ";s:2:"Ȓ";s:3:"ȓ";s:2:"ȓ";s:3:"Ȕ";s:2:"Ȕ";s:3:"ȕ";s:2:"ȕ";s:3:"Ȗ";s:2:"Ȗ";s:3:"ȗ";s:2:"ȗ";s:3:"Ș";s:2:"Ș";s:3:"ș";s:2:"ș";s:3:"Ț";s:2:"Ț";s:3:"ț";s:2:"ț";s:3:"Ȟ";s:2:"Ȟ";s:3:"ȟ";s:2:"ȟ";s:3:"Ȧ";s:2:"Ȧ";s:3:"ȧ";s:2:"ȧ";s:3:"Ȩ";s:2:"Ȩ";s:3:"ȩ";s:2:"ȩ";s:4:"Ȫ";s:2:"Ȫ";s:4:"ȫ";s:2:"ȫ";s:4:"Ȭ";s:2:"Ȭ";s:4:"ȭ";s:2:"ȭ";s:3:"Ȯ";s:2:"Ȯ";s:3:"ȯ";s:2:"ȯ";s:4:"Ȱ";s:2:"Ȱ";s:4:"ȱ";s:2:"ȱ";s:3:"Ȳ";s:2:"Ȳ";s:3:"ȳ";s:2:"ȳ";s:2:"̀";s:2:"̀";s:2:"́";s:2:"́";s:2:"̓";s:2:"̓";s:4:"̈́";s:2:"̈́";s:2:"ʹ";s:2:"ʹ";s:1:";";s:2:";";s:4:"΅";s:2:"΅";s:4:"Ά";s:2:"Ά";s:2:"·";s:2:"·";s:4:"Έ";s:2:"Έ";s:4:"Ή";s:2:"Ή";s:4:"Ί";s:2:"Ί";s:4:"Ό";s:2:"Ό";s:4:"Ύ";s:2:"Ύ";s:4:"Ώ";s:2:"Ώ";s:4:"ΐ";s:2:"ΐ";s:4:"Ϊ";s:2:"Ϊ";s:4:"Ϋ";s:2:"Ϋ";s:4:"ά";s:2:"ά";s:4:"έ";s:2:"έ";s:4:"ή";s:2:"ή";s:4:"ί";s:2:"ί";s:4:"ΰ";s:2:"ΰ";s:4:"ϊ";s:2:"ϊ";s:4:"ϋ";s:2:"ϋ";s:4:"ό";s:2:"ό";s:4:"ύ";s:2:"ύ";s:4:"ώ";s:2:"ώ";s:4:"ϓ";s:2:"ϓ";s:4:"ϔ";s:2:"ϔ";s:4:"Ѐ";s:2:"Ѐ";s:4:"Ё";s:2:"Ё";s:4:"Ѓ";s:2:"Ѓ";s:4:"Ї";s:2:"Ї";s:4:"Ќ";s:2:"Ќ";s:4:"Ѝ";s:2:"Ѝ";s:4:"Ў";s:2:"Ў";s:4:"Й";s:2:"Й";s:4:"й";s:2:"й";s:4:"ѐ";s:2:"ѐ";s:4:"ё";s:2:"ё";s:4:"ѓ";s:2:"ѓ";s:4:"ї";s:2:"ї";s:4:"ќ";s:2:"ќ";s:4:"ѝ";s:2:"ѝ";s:4:"ў";s:2:"ў";s:4:"Ѷ";s:2:"Ѷ";s:4:"ѷ";s:2:"ѷ";s:4:"Ӂ";s:2:"Ӂ";s:4:"ӂ";s:2:"ӂ";s:4:"Ӑ";s:2:"Ӑ";s:4:"ӑ";s:2:"ӑ";s:4:"Ӓ";s:2:"Ӓ";s:4:"ӓ";s:2:"ӓ";s:4:"Ӗ";s:2:"Ӗ";s:4:"ӗ";s:2:"ӗ";s:4:"Ӛ";s:2:"Ӛ";s:4:"ӛ";s:2:"ӛ";s:4:"Ӝ";s:2:"Ӝ";s:4:"ӝ";s:2:"ӝ";s:4:"Ӟ";s:2:"Ӟ";s:4:"ӟ";s:2:"ӟ";s:4:"Ӣ";s:2:"Ӣ";s:4:"ӣ";s:2:"ӣ";s:4:"Ӥ";s:2:"Ӥ";s:4:"ӥ";s:2:"ӥ";s:4:"Ӧ";s:2:"Ӧ";s:4:"ӧ";s:2:"ӧ";s:4:"Ӫ";s:2:"Ӫ";s:4:"ӫ";s:2:"ӫ";s:4:"Ӭ";s:2:"Ӭ";s:4:"ӭ";s:2:"ӭ";s:4:"Ӯ";s:2:"Ӯ";s:4:"ӯ";s:2:"ӯ";s:4:"Ӱ";s:2:"Ӱ";s:4:"ӱ";s:2:"ӱ";s:4:"Ӳ";s:2:"Ӳ";s:4:"ӳ";s:2:"ӳ";s:4:"Ӵ";s:2:"Ӵ";s:4:"ӵ";s:2:"ӵ";s:4:"Ӹ";s:2:"Ӹ";s:4:"ӹ";s:2:"ӹ";s:4:"آ";s:2:"آ";s:4:"أ";s:2:"أ";s:4:"ؤ";s:2:"ؤ";s:4:"إ";s:2:"إ";s:4:"ئ";s:2:"ئ";s:4:"ۀ";s:2:"ۀ";s:4:"ۂ";s:2:"ۂ";s:4:"ۓ";s:2:"ۓ";s:6:"ऩ";s:3:"ऩ";s:6:"ऱ";s:3:"ऱ";s:6:"ऴ";s:3:"ऴ";s:6:"ো";s:3:"ো";s:6:"ৌ";s:3:"ৌ";s:6:"ୈ";s:3:"ୈ";s:6:"ୋ";s:3:"ୋ";s:6:"ୌ";s:3:"ୌ";s:6:"ஔ";s:3:"ஔ";s:6:"ொ";s:3:"ொ";s:6:"ோ";s:3:"ோ";s:6:"ௌ";s:3:"ௌ";s:6:"ై";s:3:"ై";s:6:"ೀ";s:3:"ೀ";s:6:"ೇ";s:3:"ೇ";s:6:"ೈ";s:3:"ೈ";s:6:"ೊ";s:3:"ೊ";s:6:"ೋ";s:3:"ೋ";s:6:"ൊ";s:3:"ൊ";s:6:"ോ";s:3:"ോ";s:6:"ൌ";s:3:"ൌ";s:6:"ේ";s:3:"ේ";s:6:"ො";s:3:"ො";s:6:"ෝ";s:3:"ෝ";s:6:"ෞ";s:3:"ෞ";s:6:"ཱི";s:3:"ཱི";s:6:"ཱུ";s:3:"ཱུ";s:6:"ཱྀ";s:3:"ཱྀ";s:6:"ဦ";s:3:"ဦ";s:6:"ᬆ";s:3:"ᬆ";s:6:"ᬈ";s:3:"ᬈ";s:6:"ᬊ";s:3:"ᬊ";s:6:"ᬌ";s:3:"ᬌ";s:6:"ᬎ";s:3:"ᬎ";s:6:"ᬒ";s:3:"ᬒ";s:6:"ᬻ";s:3:"ᬻ";s:6:"ᬽ";s:3:"ᬽ";s:6:"ᭀ";s:3:"ᭀ";s:6:"ᭁ";s:3:"ᭁ";s:6:"ᭃ";s:3:"ᭃ";s:3:"Ḁ";s:3:"Ḁ";s:3:"ḁ";s:3:"ḁ";s:3:"Ḃ";s:3:"Ḃ";s:3:"ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"Ḅ";s:3:"ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"Ḇ";s:3:"ḇ";s:3:"ḇ";s:4:"Ḉ";s:3:"Ḉ";s:4:"ḉ";s:3:"ḉ";s:3:"Ḋ";s:3:"Ḋ";s:3:"ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"Ḍ";s:3:"ḍ";s:3:"ḍ";s:3:"Ḏ";s:3:"Ḏ";s:3:"ḏ";s:3:"ḏ";s:3:"Ḑ";s:3:"Ḑ";s:3:"ḑ";s:3:"ḑ";s:3:"Ḓ";s:3:"Ḓ";s:3:"ḓ";s:3:"ḓ";s:4:"Ḕ";s:3:"Ḕ";s:4:"ḕ";s:3:"ḕ";s:4:"Ḗ";s:3:"Ḗ";s:4:"ḗ";s:3:"ḗ";s:3:"Ḙ";s:3:"Ḙ";s:3:"ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"Ḛ";s:3:"ḛ";s:3:"ḛ";s:4:"Ḝ";s:3:"Ḝ";s:4:"ḝ";s:3:"ḝ";s:3:"Ḟ";s:3:"Ḟ";s:3:"ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"Ḡ";s:3:"ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"Ḣ";s:3:"ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"Ḥ";s:3:"ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"Ḧ";s:3:"ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"Ḩ";s:3:"ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"Ḫ";s:3:"ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"Ḭ";s:3:"ḭ";s:3:"ḭ";s:4:"Ḯ";s:3:"Ḯ";s:4:"ḯ";s:3:"ḯ";s:3:"Ḱ";s:3:"Ḱ";s:3:"ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"Ḳ";s:3:"ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"Ḵ";s:3:"ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"Ḷ";s:3:"ḷ";s:3:"ḷ";s:5:"Ḹ";s:3:"Ḹ";s:5:"ḹ";s:3:"ḹ";s:3:"Ḻ";s:3:"Ḻ";s:3:"ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"Ḽ";s:3:"ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"Ḿ";s:3:"ḿ";s:3:"ḿ";s:3:"Ṁ";s:3:"Ṁ";s:3:"ṁ";s:3:"ṁ";s:3:"Ṃ";s:3:"Ṃ";s:3:"ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"Ṅ";s:3:"ṅ";s:3:"ṅ";s:3:"Ṇ";s:3:"Ṇ";s:3:"ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"Ṉ";s:3:"ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"Ṋ";s:3:"ṋ";s:3:"ṋ";s:4:"Ṍ";s:3:"Ṍ";s:4:"ṍ";s:3:"ṍ";s:4:"Ṏ";s:3:"Ṏ";s:4:"ṏ";s:3:"ṏ";s:4:"Ṑ";s:3:"Ṑ";s:4:"ṑ";s:3:"ṑ";s:4:"Ṓ";s:3:"Ṓ";s:4:"ṓ";s:3:"ṓ";s:3:"Ṕ";s:3:"Ṕ";s:3:"ṕ";s:3:"ṕ";s:3:"Ṗ";s:3:"Ṗ";s:3:"ṗ";s:3:"ṗ";s:3:"Ṙ";s:3:"Ṙ";s:3:"ṙ";s:3:"ṙ";s:3:"Ṛ";s:3:"Ṛ";s:3:"ṛ";s:3:"ṛ";s:5:"Ṝ";s:3:"Ṝ";s:5:"ṝ";s:3:"ṝ";s:3:"Ṟ";s:3:"Ṟ";s:3:"ṟ";s:3:"ṟ";s:3:"Ṡ";s:3:"Ṡ";s:3:"ṡ";s:3:"ṡ";s:3:"Ṣ";s:3:"Ṣ";s:3:"ṣ";s:3:"ṣ";s:4:"Ṥ";s:3:"Ṥ";s:4:"ṥ";s:3:"ṥ";s:4:"Ṧ";s:3:"Ṧ";s:4:"ṧ";s:3:"ṧ";s:5:"Ṩ";s:3:"Ṩ";s:5:"ṩ";s:3:"ṩ";s:3:"Ṫ";s:3:"Ṫ";s:3:"ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"Ṭ";s:3:"ṭ";s:3:"ṭ";s:3:"Ṯ";s:3:"Ṯ";s:3:"ṯ";s:3:"ṯ";s:3:"Ṱ";s:3:"Ṱ";s:3:"ṱ";s:3:"ṱ";s:3:"Ṳ";s:3:"Ṳ";s:3:"ṳ";s:3:"ṳ";s:3:"Ṵ";s:3:"Ṵ";s:3:"ṵ";s:3:"ṵ";s:3:"Ṷ";s:3:"Ṷ";s:3:"ṷ";s:3:"ṷ";s:4:"Ṹ";s:3:"Ṹ";s:4:"ṹ";s:3:"ṹ";s:4:"Ṻ";s:3:"Ṻ";s:4:"ṻ";s:3:"ṻ";s:3:"Ṽ";s:3:"Ṽ";s:3:"ṽ";s:3:"ṽ";s:3:"Ṿ";s:3:"Ṿ";s:3:"ṿ";s:3:"ṿ";s:3:"Ẁ";s:3:"Ẁ";s:3:"ẁ";s:3:"ẁ";s:3:"Ẃ";s:3:"Ẃ";s:3:"ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"Ẅ";s:3:"ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"Ẇ";s:3:"ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"Ẉ";s:3:"ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"Ẋ";s:3:"ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"Ẍ";s:3:"ẍ";s:3:"ẍ";s:3:"Ẏ";s:3:"Ẏ";s:3:"ẏ";s:3:"ẏ";s:3:"Ẑ";s:3:"Ẑ";s:3:"ẑ";s:3:"ẑ";s:3:"Ẓ";s:3:"Ẓ";s:3:"ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"Ẕ";s:3:"ẕ";s:3:"ẕ";s:3:"ẖ";s:3:"ẖ";s:3:"ẗ";s:3:"ẗ";s:3:"ẘ";s:3:"ẘ";s:3:"ẙ";s:3:"ẙ";s:4:"ẛ";s:3:"ẛ";s:3:"Ạ";s:3:"Ạ";s:3:"ạ";s:3:"ạ";s:3:"Ả";s:3:"Ả";s:3:"ả";s:3:"ả";s:4:"Ấ";s:3:"Ấ";s:4:"ấ";s:3:"ấ";s:4:"Ầ";s:3:"Ầ";s:4:"ầ";s:3:"ầ";s:4:"Ẩ";s:3:"Ẩ";s:4:"ẩ";s:3:"ẩ";s:4:"Ẫ";s:3:"Ẫ";s:4:"ẫ";s:3:"ẫ";s:5:"Ậ";s:3:"Ậ";s:5:"ậ";s:3:"ậ";s:4:"Ắ";s:3:"Ắ";s:4:"ắ";s:3:"ắ";s:4:"Ằ";s:3:"Ằ";s:4:"ằ";s:3:"ằ";s:4:"Ẳ";s:3:"Ẳ";s:4:"ẳ";s:3:"ẳ";s:4:"Ẵ";s:3:"Ẵ";s:4:"ẵ";s:3:"ẵ";s:5:"Ặ";s:3:"Ặ";s:5:"ặ";s:3:"ặ";s:3:"Ẹ";s:3:"Ẹ";s:3:"ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"Ẻ";s:3:"ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"Ẽ";s:3:"ẽ";s:3:"ẽ";s:4:"Ế";s:3:"Ế";s:4:"ế";s:3:"ế";s:4:"Ề";s:3:"Ề";s:4:"ề";s:3:"ề";s:4:"Ể";s:3:"Ể";s:4:"ể";s:3:"ể";s:4:"Ễ";s:3:"Ễ";s:4:"ễ";s:3:"ễ";s:5:"Ệ";s:3:"Ệ";s:5:"ệ";s:3:"ệ";s:3:"Ỉ";s:3:"Ỉ";s:3:"ỉ";s:3:"ỉ";s:3:"Ị";s:3:"Ị";s:3:"ị";s:3:"ị";s:3:"Ọ";s:3:"Ọ";s:3:"ọ";s:3:"ọ";s:3:"Ỏ";s:3:"Ỏ";s:3:"ỏ";s:3:"ỏ";s:4:"Ố";s:3:"Ố";s:4:"ố";s:3:"ố";s:4:"Ồ";s:3:"Ồ";s:4:"ồ";s:3:"ồ";s:4:"Ổ";s:3:"Ổ";s:4:"ổ";s:3:"ổ";s:4:"Ỗ";s:3:"Ỗ";s:4:"ỗ";s:3:"ỗ";s:5:"Ộ";s:3:"Ộ";s:5:"ộ";s:3:"ộ";s:4:"Ớ";s:3:"Ớ";s:4:"ớ";s:3:"ớ";s:4:"Ờ";s:3:"Ờ";s:4:"ờ";s:3:"ờ";s:4:"Ở";s:3:"Ở";s:4:"ở";s:3:"ở";s:4:"Ỡ";s:3:"Ỡ";s:4:"ỡ";s:3:"ỡ";s:4:"Ợ";s:3:"Ợ";s:4:"ợ";s:3:"ợ";s:3:"Ụ";s:3:"Ụ";s:3:"ụ";s:3:"ụ";s:3:"Ủ";s:3:"Ủ";s:3:"ủ";s:3:"ủ";s:4:"Ứ";s:3:"Ứ";s:4:"ứ";s:3:"ứ";s:4:"Ừ";s:3:"Ừ";s:4:"ừ";s:3:"ừ";s:4:"Ử";s:3:"Ử";s:4:"ử";s:3:"ử";s:4:"Ữ";s:3:"Ữ";s:4:"ữ";s:3:"ữ";s:4:"Ự";s:3:"Ự";s:4:"ự";s:3:"ự";s:3:"Ỳ";s:3:"Ỳ";s:3:"ỳ";s:3:"ỳ";s:3:"Ỵ";s:3:"Ỵ";s:3:"ỵ";s:3:"ỵ";s:3:"Ỷ";s:3:"Ỷ";s:3:"ỷ";s:3:"ỷ";s:3:"Ỹ";s:3:"Ỹ";s:3:"ỹ";s:3:"ỹ";s:4:"ἀ";s:3:"ἀ";s:4:"ἁ";s:3:"ἁ";s:5:"ἂ";s:3:"ἂ";s:5:"ἃ";s:3:"ἃ";s:5:"ἄ";s:3:"ἄ";s:5:"ἅ";s:3:"ἅ";s:5:"ἆ";s:3:"ἆ";s:5:"ἇ";s:3:"ἇ";s:4:"Ἀ";s:3:"Ἀ";s:4:"Ἁ";s:3:"Ἁ";s:5:"Ἂ";s:3:"Ἂ";s:5:"Ἃ";s:3:"Ἃ";s:5:"Ἄ";s:3:"Ἄ";s:5:"Ἅ";s:3:"Ἅ";s:5:"Ἆ";s:3:"Ἆ";s:5:"Ἇ";s:3:"Ἇ";s:4:"ἐ";s:3:"ἐ";s:4:"ἑ";s:3:"ἑ";s:5:"ἒ";s:3:"ἒ";s:5:"ἓ";s:3:"ἓ";s:5:"ἔ";s:3:"ἔ";s:5:"ἕ";s:3:"ἕ";s:4:"Ἐ";s:3:"Ἐ";s:4:"Ἑ";s:3:"Ἑ";s:5:"Ἒ";s:3:"Ἒ";s:5:"Ἓ";s:3:"Ἓ";s:5:"Ἔ";s:3:"Ἔ";s:5:"Ἕ";s:3:"Ἕ";s:4:"ἠ";s:3:"ἠ";s:4:"ἡ";s:3:"ἡ";s:5:"ἢ";s:3:"ἢ";s:5:"ἣ";s:3:"ἣ";s:5:"ἤ";s:3:"ἤ";s:5:"ἥ";s:3:"ἥ";s:5:"ἦ";s:3:"ἦ";s:5:"ἧ";s:3:"ἧ";s:4:"Ἠ";s:3:"Ἠ";s:4:"Ἡ";s:3:"Ἡ";s:5:"Ἢ";s:3:"Ἢ";s:5:"Ἣ";s:3:"Ἣ";s:5:"Ἤ";s:3:"Ἤ";s:5:"Ἥ";s:3:"Ἥ";s:5:"Ἦ";s:3:"Ἦ";s:5:"Ἧ";s:3:"Ἧ";s:4:"ἰ";s:3:"ἰ";s:4:"ἱ";s:3:"ἱ";s:5:"ἲ";s:3:"ἲ";s:5:"ἳ";s:3:"ἳ";s:5:"ἴ";s:3:"ἴ";s:5:"ἵ";s:3:"ἵ";s:5:"ἶ";s:3:"ἶ";s:5:"ἷ";s:3:"ἷ";s:4:"Ἰ";s:3:"Ἰ";s:4:"Ἱ";s:3:"Ἱ";s:5:"Ἲ";s:3:"Ἲ";s:5:"Ἳ";s:3:"Ἳ";s:5:"Ἴ";s:3:"Ἴ";s:5:"Ἵ";s:3:"Ἵ";s:5:"Ἶ";s:3:"Ἶ";s:5:"Ἷ";s:3:"Ἷ";s:4:"ὀ";s:3:"ὀ";s:4:"ὁ";s:3:"ὁ";s:5:"ὂ";s:3:"ὂ";s:5:"ὃ";s:3:"ὃ";s:5:"ὄ";s:3:"ὄ";s:5:"ὅ";s:3:"ὅ";s:4:"Ὀ";s:3:"Ὀ";s:4:"Ὁ";s:3:"Ὁ";s:5:"Ὂ";s:3:"Ὂ";s:5:"Ὃ";s:3:"Ὃ";s:5:"Ὄ";s:3:"Ὄ";s:5:"Ὅ";s:3:"Ὅ";s:4:"ὐ";s:3:"ὐ";s:4:"ὑ";s:3:"ὑ";s:5:"ὒ";s:3:"ὒ";s:5:"ὓ";s:3:"ὓ";s:5:"ὔ";s:3:"ὔ";s:5:"ὕ";s:3:"ὕ";s:5:"ὖ";s:3:"ὖ";s:5:"ὗ";s:3:"ὗ";s:4:"Ὑ";s:3:"Ὑ";s:5:"Ὓ";s:3:"Ὓ";s:5:"Ὕ";s:3:"Ὕ";s:5:"Ὗ";s:3:"Ὗ";s:4:"ὠ";s:3:"ὠ";s:4:"ὡ";s:3:"ὡ";s:5:"ὢ";s:3:"ὢ";s:5:"ὣ";s:3:"ὣ";s:5:"ὤ";s:3:"ὤ";s:5:"ὥ";s:3:"ὥ";s:5:"ὦ";s:3:"ὦ";s:5:"ὧ";s:3:"ὧ";s:4:"Ὠ";s:3:"Ὠ";s:4:"Ὡ";s:3:"Ὡ";s:5:"Ὢ";s:3:"Ὢ";s:5:"Ὣ";s:3:"Ὣ";s:5:"Ὤ";s:3:"Ὤ";s:5:"Ὥ";s:3:"Ὥ";s:5:"Ὦ";s:3:"Ὦ";s:5:"Ὧ";s:3:"Ὧ";s:4:"ὰ";s:3:"ὰ";s:2:"ά";s:3:"ά";s:4:"ὲ";s:3:"ὲ";s:2:"έ";s:3:"έ";s:4:"ὴ";s:3:"ὴ";s:2:"ή";s:3:"ή";s:4:"ὶ";s:3:"ὶ";s:2:"ί";s:3:"ί";s:4:"ὸ";s:3:"ὸ";s:2:"ό";s:3:"ό";s:4:"ὺ";s:3:"ὺ";s:2:"ύ";s:3:"ύ";s:4:"ὼ";s:3:"ὼ";s:2:"ώ";s:3:"ώ";s:5:"ᾀ";s:3:"ᾀ";s:5:"ᾁ";s:3:"ᾁ";s:5:"ᾂ";s:3:"ᾂ";s:5:"ᾃ";s:3:"ᾃ";s:5:"ᾄ";s:3:"ᾄ";s:5:"ᾅ";s:3:"ᾅ";s:5:"ᾆ";s:3:"ᾆ";s:5:"ᾇ";s:3:"ᾇ";s:5:"ᾈ";s:3:"ᾈ";s:5:"ᾉ";s:3:"ᾉ";s:5:"ᾊ";s:3:"ᾊ";s:5:"ᾋ";s:3:"ᾋ";s:5:"ᾌ";s:3:"ᾌ";s:5:"ᾍ";s:3:"ᾍ";s:5:"ᾎ";s:3:"ᾎ";s:5:"ᾏ";s:3:"ᾏ";s:5:"ᾐ";s:3:"ᾐ";s:5:"ᾑ";s:3:"ᾑ";s:5:"ᾒ";s:3:"ᾒ";s:5:"ᾓ";s:3:"ᾓ";s:5:"ᾔ";s:3:"ᾔ";s:5:"ᾕ";s:3:"ᾕ";s:5:"ᾖ";s:3:"ᾖ";s:5:"ᾗ";s:3:"ᾗ";s:5:"ᾘ";s:3:"ᾘ";s:5:"ᾙ";s:3:"ᾙ";s:5:"ᾚ";s:3:"ᾚ";s:5:"ᾛ";s:3:"ᾛ";s:5:"ᾜ";s:3:"ᾜ";s:5:"ᾝ";s:3:"ᾝ";s:5:"ᾞ";s:3:"ᾞ";s:5:"ᾟ";s:3:"ᾟ";s:5:"ᾠ";s:3:"ᾠ";s:5:"ᾡ";s:3:"ᾡ";s:5:"ᾢ";s:3:"ᾢ";s:5:"ᾣ";s:3:"ᾣ";s:5:"ᾤ";s:3:"ᾤ";s:5:"ᾥ";s:3:"ᾥ";s:5:"ᾦ";s:3:"ᾦ";s:5:"ᾧ";s:3:"ᾧ";s:5:"ᾨ";s:3:"ᾨ";s:5:"ᾩ";s:3:"ᾩ";s:5:"ᾪ";s:3:"ᾪ";s:5:"ᾫ";s:3:"ᾫ";s:5:"ᾬ";s:3:"ᾬ";s:5:"ᾭ";s:3:"ᾭ";s:5:"ᾮ";s:3:"ᾮ";s:5:"ᾯ";s:3:"ᾯ";s:4:"ᾰ";s:3:"ᾰ";s:4:"ᾱ";s:3:"ᾱ";s:5:"ᾲ";s:3:"ᾲ";s:4:"ᾳ";s:3:"ᾳ";s:4:"ᾴ";s:3:"ᾴ";s:4:"ᾶ";s:3:"ᾶ";s:5:"ᾷ";s:3:"ᾷ";s:4:"Ᾰ";s:3:"Ᾰ";s:4:"Ᾱ";s:3:"Ᾱ";s:4:"Ὰ";s:3:"Ὰ";s:2:"Ά";s:3:"Ά";s:4:"ᾼ";s:3:"ᾼ";s:2:"ι";s:3:"ι";s:4:"῁";s:3:"῁";s:5:"ῂ";s:3:"ῂ";s:4:"ῃ";s:3:"ῃ";s:4:"ῄ";s:3:"ῄ";s:4:"ῆ";s:3:"ῆ";s:5:"ῇ";s:3:"ῇ";s:4:"Ὲ";s:3:"Ὲ";s:2:"Έ";s:3:"Έ";s:4:"Ὴ";s:3:"Ὴ";s:2:"Ή";s:3:"Ή";s:4:"ῌ";s:3:"ῌ";s:5:"῍";s:3:"῍";s:5:"῎";s:3:"῎";s:5:"῏";s:3:"῏";s:4:"ῐ";s:3:"ῐ";s:4:"ῑ";s:3:"ῑ";s:4:"ῒ";s:3:"ῒ";s:2:"ΐ";s:3:"ΐ";s:4:"ῖ";s:3:"ῖ";s:4:"ῗ";s:3:"ῗ";s:4:"Ῐ";s:3:"Ῐ";s:4:"Ῑ";s:3:"Ῑ";s:4:"Ὶ";s:3:"Ὶ";s:2:"Ί";s:3:"Ί";s:5:"῝";s:3:"῝";s:5:"῞";s:3:"῞";s:5:"῟";s:3:"῟";s:4:"ῠ";s:3:"ῠ";s:4:"ῡ";s:3:"ῡ";s:4:"ῢ";s:3:"ῢ";s:2:"ΰ";s:3:"ΰ";s:4:"ῤ";s:3:"ῤ";s:4:"ῥ";s:3:"ῥ";s:4:"ῦ";s:3:"ῦ";s:4:"ῧ";s:3:"ῧ";s:4:"Ῠ";s:3:"Ῠ";s:4:"Ῡ";s:3:"Ῡ";s:4:"Ὺ";s:3:"Ὺ";s:2:"Ύ";s:3:"Ύ";s:4:"Ῥ";s:3:"Ῥ";s:4:"῭";s:3:"῭";s:2:"΅";s:3:"΅";s:1:"`";s:3:"`";s:5:"ῲ";s:3:"ῲ";s:4:"ῳ";s:3:"ῳ";s:4:"ῴ";s:3:"ῴ";s:4:"ῶ";s:3:"ῶ";s:5:"ῷ";s:3:"ῷ";s:4:"Ὸ";s:3:"Ὸ";s:2:"Ό";s:3:"Ό";s:4:"Ὼ";s:3:"Ὼ";s:2:"Ώ";s:3:"Ώ";s:4:"ῼ";s:3:"ῼ";s:2:"´";s:3:"´";s:3:" ";s:3:" ";s:3:" ";s:3:" ";s:2:"Ω";s:3:"Ω";s:1:"K";s:3:"K";s:2:"Å";s:3:"Å";s:5:"↚";s:3:"↚";s:5:"↛";s:3:"↛";s:5:"↮";s:3:"↮";s:5:"⇍";s:3:"⇍";s:5:"⇎";s:3:"⇎";s:5:"⇏";s:3:"⇏";s:5:"∄";s:3:"∄";s:5:"∉";s:3:"∉";s:5:"∌";s:3:"∌";s:5:"∤";s:3:"∤";s:5:"∦";s:3:"∦";s:5:"≁";s:3:"≁";s:5:"≄";s:3:"≄";s:5:"≇";s:3:"≇";s:5:"≉";s:3:"≉";s:3:"≠";s:3:"≠";s:5:"≢";s:3:"≢";s:5:"≭";s:3:"≭";s:3:"≮";s:3:"≮";s:3:"≯";s:3:"≯";s:5:"≰";s:3:"≰";s:5:"≱";s:3:"≱";s:5:"≴";s:3:"≴";s:5:"≵";s:3:"≵";s:5:"≸";s:3:"≸";s:5:"≹";s:3:"≹";s:5:"⊀";s:3:"⊀";s:5:"⊁";s:3:"⊁";s:5:"⊄";s:3:"⊄";s:5:"⊅";s:3:"⊅";s:5:"⊈";s:3:"⊈";s:5:"⊉";s:3:"⊉";s:5:"⊬";s:3:"⊬";s:5:"⊭";s:3:"⊭";s:5:"⊮";s:3:"⊮";s:5:"⊯";s:3:"⊯";s:5:"⋠";s:3:"⋠";s:5:"⋡";s:3:"⋡";s:5:"⋢";s:3:"⋢";s:5:"⋣";s:3:"⋣";s:5:"⋪";s:3:"⋪";s:5:"⋫";s:3:"⋫";s:5:"⋬";s:3:"⋬";s:5:"⋭";s:3:"⋭";s:3:"〈";s:3:"〈";s:3:"〉";s:3:"〉";s:6:"が";s:3:"が";s:6:"ぎ";s:3:"ぎ";s:6:"ぐ";s:3:"ぐ";s:6:"げ";s:3:"げ";s:6:"ご";s:3:"ご";s:6:"ざ";s:3:"ざ";s:6:"じ";s:3:"じ";s:6:"ず";s:3:"ず";s:6:"ぜ";s:3:"ぜ";s:6:"ぞ";s:3:"ぞ";s:6:"だ";s:3:"だ";s:6:"ぢ";s:3:"ぢ";s:6:"づ";s:3:"づ";s:6:"で";s:3:"で";s:6:"ど";s:3:"ど";s:6:"ば";s:3:"ば";s:6:"ぱ";s:3:"ぱ";s:6:"び";s:3:"び";s:6:"ぴ";s:3:"ぴ";s:6:"ぶ";s:3:"ぶ";s:6:"ぷ";s:3:"ぷ";s:6:"べ";s:3:"べ";s:6:"ぺ";s:3:"ぺ";s:6:"ぼ";s:3:"ぼ";s:6:"ぽ";s:3:"ぽ";s:6:"ゔ";s:3:"ゔ";s:6:"ゞ";s:3:"ゞ";s:6:"ガ";s:3:"ガ";s:6:"ギ";s:3:"ギ";s:6:"グ";s:3:"グ";s:6:"ゲ";s:3:"ゲ";s:6:"ゴ";s:3:"ゴ";s:6:"ザ";s:3:"ザ";s:6:"ジ";s:3:"ジ";s:6:"ズ";s:3:"ズ";s:6:"ゼ";s:3:"ゼ";s:6:"ゾ";s:3:"ゾ";s:6:"ダ";s:3:"ダ";s:6:"ヂ";s:3:"ヂ";s:6:"ヅ";s:3:"ヅ";s:6:"デ";s:3:"デ";s:6:"ド";s:3:"ド";s:6:"バ";s:3:"バ";s:6:"パ";s:3:"パ";s:6:"ビ";s:3:"ビ";s:6:"ピ";s:3:"ピ";s:6:"ブ";s:3:"ブ";s:6:"プ";s:3:"プ";s:6:"ベ";s:3:"ベ";s:6:"ペ";s:3:"ペ";s:6:"ボ";s:3:"ボ";s:6:"ポ";s:3:"ポ";s:6:"ヴ";s:3:"ヴ";s:6:"ヷ";s:3:"ヷ";s:6:"ヸ";s:3:"ヸ";s:6:"ヹ";s:3:"ヹ";s:6:"ヺ";s:3:"ヺ";s:6:"ヾ";s:3:"ヾ";s:3:"豈";s:3:"豈";s:3:"更";s:3:"更";s:3:"車";s:3:"車";s:3:"賈";s:3:"賈";s:3:"滑";s:3:"滑";s:3:"串";s:3:"串";s:3:"句";s:3:"句";s:3:"龜";s:3:"龜";s:3:"契";s:3:"契";s:3:"金";s:3:"金";s:3:"喇";s:3:"喇";s:3:"奈";s:3:"奈";s:3:"懶";s:4:"懶";s:3:"癩";s:3:"癩";s:3:"羅";s:3:"羅";s:3:"蘿";s:3:"蘿";s:3:"螺";s:3:"螺";s:3:"裸";s:3:"裸";s:3:"邏";s:3:"邏";s:3:"樂";s:3:"樂";s:3:"洛";s:3:"洛";s:3:"烙";s:3:"烙";s:3:"珞";s:3:"珞";s:3:"落";s:3:"落";s:3:"酪";s:3:"酪";s:3:"駱";s:3:"駱";s:3:"亂";s:3:"亂";s:3:"卵";s:3:"卵";s:3:"欄";s:3:"欄";s:3:"爛";s:3:"爛";s:3:"蘭";s:3:"蘭";s:3:"鸞";s:3:"鸞";s:3:"嵐";s:3:"嵐";s:3:"濫";s:3:"濫";s:3:"藍";s:3:"藍";s:3:"襤";s:3:"襤";s:3:"拉";s:3:"拉";s:3:"臘";s:3:"臘";s:3:"蠟";s:3:"蠟";s:3:"廊";s:4:"廊";s:3:"朗";s:4:"朗";s:3:"浪";s:3:"浪";s:3:"狼";s:3:"狼";s:3:"郎";s:3:"郎";s:3:"來";s:3:"來";s:3:"冷";s:3:"冷";s:3:"勞";s:3:"勞";s:3:"擄";s:3:"擄";s:3:"櫓";s:3:"櫓";s:3:"爐";s:3:"爐";s:3:"盧";s:3:"盧";s:3:"老";s:3:"老";s:3:"蘆";s:3:"蘆";s:3:"虜";s:4:"虜";s:3:"路";s:3:"路";s:3:"露";s:3:"露";s:3:"魯";s:3:"魯";s:3:"鷺";s:3:"鷺";s:3:"碌";s:4:"碌";s:3:"祿";s:3:"祿";s:3:"綠";s:3:"綠";s:3:"菉";s:3:"菉";s:3:"錄";s:3:"錄";s:3:"鹿";s:3:"鹿";s:3:"論";s:3:"論";s:3:"壟";s:3:"壟";s:3:"弄";s:3:"弄";s:3:"籠";s:3:"籠";s:3:"聾";s:3:"聾";s:3:"牢";s:3:"牢";s:3:"磊";s:3:"磊";s:3:"賂";s:3:"賂";s:3:"雷";s:3:"雷";s:3:"壘";s:3:"壘";s:3:"屢";s:3:"屢";s:3:"樓";s:3:"樓";s:3:"淚";s:3:"淚";s:3:"漏";s:3:"漏";s:3:"累";s:3:"累";s:3:"縷";s:3:"縷";s:3:"陋";s:3:"陋";s:3:"勒";s:3:"勒";s:3:"肋";s:3:"肋";s:3:"凜";s:3:"凜";s:3:"凌";s:3:"凌";s:3:"稜";s:3:"稜";s:3:"綾";s:3:"綾";s:3:"菱";s:3:"菱";s:3:"陵";s:3:"陵";s:3:"讀";s:3:"讀";s:3:"拏";s:3:"拏";s:3:"諾";s:3:"諾";s:3:"丹";s:3:"丹";s:3:"寧";s:4:"寧";s:3:"怒";s:3:"怒";s:3:"率";s:3:"率";s:3:"異";s:4:"異";s:3:"北";s:4:"北";s:3:"磻";s:3:"磻";s:3:"便";s:3:"便";s:3:"復";s:3:"復";s:3:"不";s:3:"不";s:3:"泌";s:3:"泌";s:3:"數";s:3:"數";s:3:"索";s:3:"索";s:3:"參";s:3:"參";s:3:"塞";s:3:"塞";s:3:"省";s:3:"省";s:3:"葉";s:3:"葉";s:3:"說";s:3:"說";s:3:"殺";s:4:"殺";s:3:"辰";s:3:"辰";s:3:"沈";s:3:"沈";s:3:"拾";s:3:"拾";s:3:"若";s:4:"若";s:3:"掠";s:3:"掠";s:3:"略";s:3:"略";s:3:"亮";s:3:"亮";s:3:"兩";s:3:"兩";s:3:"凉";s:3:"凉";s:3:"梁";s:3:"梁";s:3:"糧";s:3:"糧";s:3:"良";s:3:"良";s:3:"諒";s:3:"諒";s:3:"量";s:3:"量";s:3:"勵";s:3:"勵";s:3:"呂";s:3:"呂";s:3:"女";s:3:"女";s:3:"廬";s:3:"廬";s:3:"旅";s:3:"旅";s:3:"濾";s:3:"濾";s:3:"礪";s:3:"礪";s:3:"閭";s:3:"閭";s:3:"驪";s:3:"驪";s:3:"麗";s:3:"麗";s:3:"黎";s:3:"黎";s:3:"力";s:3:"力";s:3:"曆";s:3:"曆";s:3:"歷";s:3:"歷";s:3:"轢";s:3:"轢";s:3:"年";s:3:"年";s:3:"憐";s:3:"憐";s:3:"戀";s:3:"戀";s:3:"撚";s:3:"撚";s:3:"漣";s:3:"漣";s:3:"煉";s:3:"煉";s:3:"璉";s:3:"璉";s:3:"秊";s:3:"秊";s:3:"練";s:3:"練";s:3:"聯";s:3:"聯";s:3:"輦";s:3:"輦";s:3:"蓮";s:3:"蓮";s:3:"連";s:3:"連";s:3:"鍊";s:3:"鍊";s:3:"列";s:3:"列";s:3:"劣";s:3:"劣";s:3:"咽";s:3:"咽";s:3:"烈";s:3:"烈";s:3:"裂";s:3:"裂";s:3:"廉";s:3:"廉";s:3:"念";s:3:"念";s:3:"捻";s:3:"捻";s:3:"殮";s:3:"殮";s:3:"簾";s:3:"簾";s:3:"獵";s:3:"獵";s:3:"令";s:3:"令";s:3:"囹";s:3:"囹";s:3:"嶺";s:3:"嶺";s:3:"怜";s:3:"怜";s:3:"玲";s:3:"玲";s:3:"瑩";s:3:"瑩";s:3:"羚";s:3:"羚";s:3:"聆";s:3:"聆";s:3:"鈴";s:3:"鈴";s:3:"零";s:3:"零";s:3:"靈";s:3:"靈";s:3:"領";s:3:"領";s:3:"例";s:3:"例";s:3:"禮";s:3:"禮";s:3:"醴";s:3:"醴";s:3:"隸";s:3:"隸";s:3:"惡";s:3:"惡";s:3:"了";s:3:"了";s:3:"僚";s:3:"僚";s:3:"寮";s:3:"寮";s:3:"尿";s:3:"尿";s:3:"料";s:3:"料";s:3:"燎";s:3:"燎";s:3:"療";s:3:"療";s:3:"蓼";s:3:"蓼";s:3:"遼";s:3:"遼";s:3:"龍";s:3:"龍";s:3:"暈";s:3:"暈";s:3:"阮";s:3:"阮";s:3:"劉";s:3:"劉";s:3:"杻";s:3:"杻";s:3:"柳";s:3:"柳";s:3:"流";s:4:"流";s:3:"溜";s:3:"溜";s:3:"琉";s:3:"琉";s:3:"留";s:3:"留";s:3:"硫";s:3:"硫";s:3:"紐";s:3:"紐";s:3:"類";s:3:"類";s:3:"六";s:3:"六";s:3:"戮";s:3:"戮";s:3:"陸";s:3:"陸";s:3:"倫";s:3:"倫";s:3:"崙";s:3:"崙";s:3:"淪";s:3:"淪";s:3:"輪";s:3:"輪";s:3:"律";s:3:"律";s:3:"慄";s:3:"慄";s:3:"栗";s:3:"栗";s:3:"隆";s:3:"隆";s:3:"利";s:3:"利";s:3:"吏";s:3:"吏";s:3:"履";s:3:"履";s:3:"易";s:3:"易";s:3:"李";s:3:"李";s:3:"梨";s:3:"梨";s:3:"泥";s:3:"泥";s:3:"理";s:3:"理";s:3:"痢";s:3:"痢";s:3:"罹";s:3:"罹";s:3:"裏";s:3:"裏";s:3:"裡";s:3:"裡";s:3:"里";s:3:"里";s:3:"離";s:3:"離";s:3:"匿";s:3:"匿";s:3:"溺";s:3:"溺";s:3:"吝";s:3:"吝";s:3:"燐";s:3:"燐";s:3:"璘";s:3:"璘";s:3:"藺";s:3:"藺";s:3:"隣";s:3:"隣";s:3:"鱗";s:3:"鱗";s:3:"麟";s:3:"麟";s:3:"林";s:3:"林";s:3:"淋";s:3:"淋";s:3:"臨";s:3:"臨";s:3:"立";s:3:"立";s:3:"笠";s:3:"笠";s:3:"粒";s:3:"粒";s:3:"狀";s:3:"狀";s:3:"炙";s:3:"炙";s:3:"識";s:3:"識";s:3:"什";s:3:"什";s:3:"茶";s:3:"茶";s:3:"刺";s:3:"刺";s:3:"切";s:4:"切";s:3:"度";s:3:"度";s:3:"拓";s:3:"拓";s:3:"糖";s:3:"糖";s:3:"宅";s:3:"宅";s:3:"洞";s:3:"洞";s:3:"暴";s:3:"暴";s:3:"輻";s:3:"輻";s:3:"行";s:3:"行";s:3:"降";s:3:"降";s:3:"見";s:3:"見";s:3:"廓";s:3:"廓";s:3:"兀";s:3:"兀";s:3:"嗀";s:3:"嗀";s:3:"塚";s:3:"塚";s:3:"晴";s:3:"晴";s:3:"凞";s:3:"凞";s:3:"猪";s:3:"猪";s:3:"益";s:3:"益";s:3:"礼";s:3:"礼";s:3:"神";s:3:"神";s:3:"祥";s:3:"祥";s:3:"福";s:4:"福";s:3:"靖";s:3:"靖";s:3:"精";s:3:"精";s:3:"羽";s:3:"羽";s:3:"蘒";s:3:"蘒";s:3:"諸";s:3:"諸";s:3:"逸";s:3:"逸";s:3:"都";s:3:"都";s:3:"飯";s:3:"飯";s:3:"飼";s:3:"飼";s:3:"館";s:3:"館";s:3:"鶴";s:3:"鶴";s:3:"侮";s:4:"侮";s:3:"僧";s:4:"僧";s:3:"免";s:4:"免";s:3:"勉";s:4:"勉";s:3:"勤";s:4:"勤";s:3:"卑";s:4:"卑";s:3:"喝";s:3:"喝";s:3:"嘆";s:4:"嘆";s:3:"器";s:3:"器";s:3:"塀";s:3:"塀";s:3:"墨";s:3:"墨";s:3:"層";s:3:"層";s:3:"屮";s:4:"屮";s:3:"悔";s:4:"悔";s:3:"慨";s:3:"慨";s:3:"憎";s:4:"憎";s:3:"懲";s:4:"懲";s:3:"敏";s:4:"敏";s:3:"既";s:3:"既";s:3:"暑";s:4:"暑";s:3:"梅";s:4:"梅";s:3:"海";s:4:"海";s:3:"渚";s:3:"渚";s:3:"漢";s:3:"漢";s:3:"煮";s:3:"煮";s:3:"爫";s:3:"爫";s:3:"琢";s:3:"琢";s:3:"碑";s:3:"碑";s:3:"社";s:3:"社";s:3:"祉";s:3:"祉";s:3:"祈";s:3:"祈";s:3:"祐";s:3:"祐";s:3:"祖";s:4:"祖";s:3:"祝";s:3:"祝";s:3:"禍";s:3:"禍";s:3:"禎";s:3:"禎";s:3:"穀";s:4:"穀";s:3:"突";s:3:"突";s:3:"節";s:3:"節";s:3:"縉";s:3:"縉";s:3:"繁";s:3:"繁";s:3:"署";s:3:"署";s:3:"者";s:4:"者";s:3:"臭";s:3:"臭";s:3:"艹";s:3:"艹";s:3:"著";s:4:"著";s:3:"褐";s:3:"褐";s:3:"視";s:3:"視";s:3:"謁";s:3:"謁";s:3:"謹";s:3:"謹";s:3:"賓";s:3:"賓";s:3:"贈";s:3:"贈";s:3:"辶";s:3:"辶";s:3:"難";s:3:"難";s:3:"響";s:3:"響";s:3:"頻";s:3:"頻";s:3:"並";s:3:"並";s:3:"况";s:4:"况";s:3:"全";s:3:"全";s:3:"侀";s:3:"侀";s:3:"充";s:3:"充";s:3:"冀";s:3:"冀";s:3:"勇";s:4:"勇";s:3:"勺";s:4:"勺";s:3:"啕";s:3:"啕";s:3:"喙";s:4:"喙";s:3:"嗢";s:3:"嗢";s:3:"墳";s:3:"墳";s:3:"奄";s:3:"奄";s:3:"奔";s:3:"奔";s:3:"婢";s:3:"婢";s:3:"嬨";s:3:"嬨";s:3:"廒";s:3:"廒";s:3:"廙";s:3:"廙";s:3:"彩";s:3:"彩";s:3:"徭";s:3:"徭";s:3:"惘";s:3:"惘";s:3:"慎";s:4:"慎";s:3:"愈";s:3:"愈";s:3:"慠";s:3:"慠";s:3:"戴";s:3:"戴";s:3:"揄";s:3:"揄";s:3:"搜";s:3:"搜";s:3:"摒";s:3:"摒";s:3:"敖";s:3:"敖";s:3:"望";s:4:"望";s:3:"杖";s:3:"杖";s:3:"歹";s:3:"歹";s:3:"滛";s:3:"滛";s:3:"滋";s:4:"滋";s:3:"瀞";s:4:"瀞";s:3:"瞧";s:3:"瞧";s:3:"爵";s:4:"爵";s:3:"犯";s:3:"犯";s:3:"瑱";s:4:"瑱";s:3:"甆";s:3:"甆";s:3:"画";s:3:"画";s:3:"瘝";s:3:"瘝";s:3:"瘟";s:3:"瘟";s:3:"盛";s:3:"盛";s:3:"直";s:4:"直";s:3:"睊";s:4:"睊";s:3:"着";s:3:"着";s:3:"磌";s:4:"磌";s:3:"窱";s:3:"窱";s:3:"类";s:3:"类";s:3:"絛";s:3:"絛";s:3:"缾";s:3:"缾";s:3:"荒";s:3:"荒";s:3:"華";s:3:"華";s:3:"蝹";s:4:"蝹";s:3:"襁";s:3:"襁";s:3:"覆";s:3:"覆";s:3:"調";s:3:"調";s:3:"請";s:3:"請";s:3:"諭";s:4:"諭";s:3:"變";s:4:"變";s:3:"輸";s:4:"輸";s:3:"遲";s:3:"遲";s:3:"醙";s:3:"醙";s:3:"鉶";s:3:"鉶";s:3:"陼";s:3:"陼";s:3:"韛";s:3:"韛";s:3:"頋";s:4:"頋";s:3:"鬒";s:4:"鬒";s:4:"𢡊";s:3:"𢡊";s:4:"𢡄";s:3:"𢡄";s:4:"𣏕";s:3:"𣏕";s:3:"㮝";s:4:"㮝";s:3:"䀘";s:3:"䀘";s:3:"䀹";s:4:"䀹";s:4:"𥉉";s:3:"𥉉";s:4:"𥳐";s:3:"𥳐";s:4:"𧻓";s:3:"𧻓";s:3:"齃";s:3:"齃";s:3:"龎";s:3:"龎";s:3:"丽";s:4:"丽";s:3:"丸";s:4:"丸";s:3:"乁";s:4:"乁";s:4:"𠄢";s:4:"𠄢";s:3:"你";s:4:"你";s:3:"侻";s:4:"侻";s:3:"倂";s:4:"倂";s:3:"偺";s:4:"偺";s:3:"備";s:4:"備";s:3:"像";s:4:"像";s:3:"㒞";s:4:"㒞";s:4:"𠘺";s:4:"𠘺";s:3:"兔";s:4:"兔";s:3:"兤";s:4:"兤";s:3:"具";s:4:"具";s:4:"𠔜";s:4:"𠔜";s:3:"㒹";s:4:"㒹";s:3:"內";s:4:"內";s:3:"再";s:4:"再";s:4:"𠕋";s:4:"𠕋";s:3:"冗";s:4:"冗";s:3:"冤";s:4:"冤";s:3:"仌";s:4:"仌";s:3:"冬";s:4:"冬";s:4:"𩇟";s:4:"𩇟";s:3:"凵";s:4:"凵";s:3:"刃";s:4:"刃";s:3:"㓟";s:4:"㓟";s:3:"刻";s:4:"刻";s:3:"剆";s:4:"剆";s:3:"割";s:4:"割";s:3:"剷";s:4:"剷";s:3:"㔕";s:4:"㔕";s:3:"包";s:4:"包";s:3:"匆";s:4:"匆";s:3:"卉";s:4:"卉";s:3:"博";s:4:"博";s:3:"即";s:4:"即";s:3:"卽";s:4:"卽";s:3:"卿";s:4:"卿";s:4:"𠨬";s:4:"𠨬";s:3:"灰";s:4:"灰";s:3:"及";s:4:"及";s:3:"叟";s:4:"叟";s:4:"𠭣";s:4:"𠭣";s:3:"叫";s:4:"叫";s:3:"叱";s:4:"叱";s:3:"吆";s:4:"吆";s:3:"咞";s:4:"咞";s:3:"吸";s:4:"吸";s:3:"呈";s:4:"呈";s:3:"周";s:4:"周";s:3:"咢";s:4:"咢";s:3:"哶";s:4:"哶";s:3:"唐";s:4:"唐";s:3:"啓";s:4:"啓";s:3:"啣";s:4:"啣";s:3:"善";s:4:"善";s:3:"喫";s:4:"喫";s:3:"喳";s:4:"喳";s:3:"嗂";s:4:"嗂";s:3:"圖";s:4:"圖";s:3:"圗";s:4:"圗";s:3:"噑";s:4:"噑";s:3:"噴";s:4:"噴";s:3:"壮";s:4:"壮";s:3:"城";s:4:"城";s:3:"埴";s:4:"埴";s:3:"堍";s:4:"堍";s:3:"型";s:4:"型";s:3:"堲";s:4:"堲";s:3:"報";s:4:"報";s:3:"墬";s:4:"墬";s:4:"𡓤";s:4:"𡓤";s:3:"売";s:4:"売";s:3:"壷";s:4:"壷";s:3:"夆";s:4:"夆";s:3:"多";s:4:"多";s:3:"夢";s:4:"夢";s:3:"奢";s:4:"奢";s:4:"𡚨";s:4:"𡚨";s:4:"𡛪";s:4:"𡛪";s:3:"姬";s:4:"姬";s:3:"娛";s:4:"娛";s:3:"娧";s:4:"娧";s:3:"姘";s:4:"姘";s:3:"婦";s:4:"婦";s:3:"㛮";s:4:"㛮";s:3:"㛼";s:4:"㛼";s:3:"嬈";s:4:"嬈";s:3:"嬾";s:4:"嬾";s:4:"𡧈";s:4:"𡧈";s:3:"寃";s:4:"寃";s:3:"寘";s:4:"寘";s:3:"寳";s:4:"寳";s:4:"𡬘";s:4:"𡬘";s:3:"寿";s:4:"寿";s:3:"将";s:4:"将";s:3:"当";s:4:"当";s:3:"尢";s:4:"尢";s:3:"㞁";s:4:"㞁";s:3:"屠";s:4:"屠";s:3:"峀";s:4:"峀";s:3:"岍";s:4:"岍";s:4:"𡷤";s:4:"𡷤";s:3:"嵃";s:4:"嵃";s:4:"𡷦";s:4:"𡷦";s:3:"嵮";s:4:"嵮";s:3:"嵫";s:4:"嵫";s:3:"嵼";s:4:"嵼";s:3:"巡";s:4:"巡";s:3:"巢";s:4:"巢";s:3:"㠯";s:4:"㠯";s:3:"巽";s:4:"巽";s:3:"帨";s:4:"帨";s:3:"帽";s:4:"帽";s:3:"幩";s:4:"幩";s:3:"㡢";s:4:"㡢";s:4:"𢆃";s:4:"𢆃";s:3:"㡼";s:4:"㡼";s:3:"庰";s:4:"庰";s:3:"庳";s:4:"庳";s:3:"庶";s:4:"庶";s:4:"𪎒";s:4:"𪎒";s:3:"廾";s:4:"廾";s:4:"𢌱";s:4:"𢌱";s:3:"舁";s:4:"舁";s:3:"弢";s:4:"弢";s:3:"㣇";s:4:"㣇";s:4:"𣊸";s:4:"𣊸";s:4:"𦇚";s:4:"𦇚";s:3:"形";s:4:"形";s:3:"彫";s:4:"彫";s:3:"㣣";s:4:"㣣";s:3:"徚";s:4:"徚";s:3:"忍";s:4:"忍";s:3:"志";s:4:"志";s:3:"忹";s:4:"忹";s:3:"悁";s:4:"悁";s:3:"㤺";s:4:"㤺";s:3:"㤜";s:4:"㤜";s:4:"𢛔";s:4:"𢛔";s:3:"惇";s:4:"惇";s:3:"慈";s:4:"慈";s:3:"慌";s:4:"慌";s:3:"慺";s:4:"慺";s:3:"憲";s:4:"憲";s:3:"憤";s:4:"憤";s:3:"憯";s:4:"憯";s:3:"懞";s:4:"懞";s:3:"成";s:4:"成";s:3:"戛";s:4:"戛";s:3:"扝";s:4:"扝";s:3:"抱";s:4:"抱";s:3:"拔";s:4:"拔";s:3:"捐";s:4:"捐";s:4:"𢬌";s:4:"𢬌";s:3:"挽";s:4:"挽";s:3:"拼";s:4:"拼";s:3:"捨";s:4:"捨";s:3:"掃";s:4:"掃";s:3:"揤";s:4:"揤";s:4:"𢯱";s:4:"𢯱";s:3:"搢";s:4:"搢";s:3:"揅";s:4:"揅";s:3:"掩";s:4:"掩";s:3:"㨮";s:4:"㨮";s:3:"摩";s:4:"摩";s:3:"摾";s:4:"摾";s:3:"撝";s:4:"撝";s:3:"摷";s:4:"摷";s:3:"㩬";s:4:"㩬";s:3:"敬";s:4:"敬";s:4:"𣀊";s:4:"𣀊";s:3:"旣";s:4:"旣";s:3:"書";s:4:"書";s:3:"晉";s:4:"晉";s:3:"㬙";s:4:"㬙";s:3:"㬈";s:4:"㬈";s:3:"㫤";s:4:"㫤";s:3:"冒";s:4:"冒";s:3:"冕";s:4:"冕";s:3:"最";s:4:"最";s:3:"暜";s:4:"暜";s:3:"肭";s:4:"肭";s:3:"䏙";s:4:"䏙";s:3:"朡";s:4:"朡";s:3:"杞";s:4:"杞";s:3:"杓";s:4:"杓";s:4:"𣏃";s:4:"𣏃";s:3:"㭉";s:4:"㭉";s:3:"柺";s:4:"柺";s:3:"枅";s:4:"枅";s:3:"桒";s:4:"桒";s:4:"𣑭";s:4:"𣑭";s:3:"梎";s:4:"梎";s:3:"栟";s:4:"栟";s:3:"椔";s:4:"椔";s:3:"楂";s:4:"楂";s:3:"榣";s:4:"榣";s:3:"槪";s:4:"槪";s:3:"檨";s:4:"檨";s:4:"𣚣";s:4:"𣚣";s:3:"櫛";s:4:"櫛";s:3:"㰘";s:4:"㰘";s:3:"次";s:4:"次";s:4:"𣢧";s:4:"𣢧";s:3:"歔";s:4:"歔";s:3:"㱎";s:4:"㱎";s:3:"歲";s:4:"歲";s:3:"殟";s:4:"殟";s:3:"殻";s:4:"殻";s:4:"𣪍";s:4:"𣪍";s:4:"𡴋";s:4:"𡴋";s:4:"𣫺";s:4:"𣫺";s:3:"汎";s:4:"汎";s:4:"𣲼";s:4:"𣲼";s:3:"沿";s:4:"沿";s:3:"泍";s:4:"泍";s:3:"汧";s:4:"汧";s:3:"洖";s:4:"洖";s:3:"派";s:4:"派";s:3:"浩";s:4:"浩";s:3:"浸";s:4:"浸";s:3:"涅";s:4:"涅";s:4:"𣴞";s:4:"𣴞";s:3:"洴";s:4:"洴";s:3:"港";s:4:"港";s:3:"湮";s:4:"湮";s:3:"㴳";s:4:"㴳";s:3:"滇";s:4:"滇";s:4:"𣻑";s:4:"𣻑";s:3:"淹";s:4:"淹";s:3:"潮";s:4:"潮";s:4:"𣽞";s:4:"𣽞";s:4:"𣾎";s:4:"𣾎";s:3:"濆";s:4:"濆";s:3:"瀹";s:4:"瀹";s:3:"瀛";s:4:"瀛";s:3:"㶖";s:4:"㶖";s:3:"灊";s:4:"灊";s:3:"災";s:4:"災";s:3:"灷";s:4:"灷";s:3:"炭";s:4:"炭";s:4:"𠔥";s:4:"𠔥";s:3:"煅";s:4:"煅";s:4:"𤉣";s:4:"𤉣";s:3:"熜";s:4:"熜";s:4:"𤎫";s:4:"𤎫";s:3:"爨";s:4:"爨";s:3:"牐";s:4:"牐";s:4:"𤘈";s:4:"𤘈";s:3:"犀";s:4:"犀";s:3:"犕";s:4:"犕";s:4:"𤜵";s:4:"𤜵";s:4:"𤠔";s:4:"𤠔";s:3:"獺";s:4:"獺";s:3:"王";s:4:"王";s:3:"㺬";s:4:"㺬";s:3:"玥";s:4:"玥";s:3:"㺸";s:4:"㺸";s:3:"瑇";s:4:"瑇";s:3:"瑜";s:4:"瑜";s:3:"璅";s:4:"璅";s:3:"瓊";s:4:"瓊";s:3:"㼛";s:4:"㼛";s:3:"甤";s:4:"甤";s:4:"𤰶";s:4:"𤰶";s:3:"甾";s:4:"甾";s:4:"𤲒";s:4:"𤲒";s:4:"𢆟";s:4:"𢆟";s:3:"瘐";s:4:"瘐";s:4:"𤾡";s:4:"𤾡";s:4:"𤾸";s:4:"𤾸";s:4:"𥁄";s:4:"𥁄";s:3:"㿼";s:4:"㿼";s:3:"䀈";s:4:"䀈";s:4:"𥃳";s:4:"𥃳";s:4:"𥃲";s:4:"𥃲";s:4:"𥄙";s:4:"𥄙";s:4:"𥄳";s:4:"𥄳";s:3:"眞";s:4:"眞";s:3:"真";s:4:"真";s:3:"瞋";s:4:"瞋";s:3:"䁆";s:4:"䁆";s:3:"䂖";s:4:"䂖";s:4:"𥐝";s:4:"𥐝";s:3:"硎";s:4:"硎";s:3:"䃣";s:4:"䃣";s:4:"𥘦";s:4:"𥘦";s:4:"𥚚";s:4:"𥚚";s:4:"𥛅";s:4:"𥛅";s:3:"秫";s:4:"秫";s:3:"䄯";s:4:"䄯";s:3:"穊";s:4:"穊";s:3:"穏";s:4:"穏";s:4:"𥥼";s:4:"𥥼";s:4:"𥪧";s:4:"𥪧";s:3:"竮";s:4:"竮";s:3:"䈂";s:4:"䈂";s:4:"𥮫";s:4:"𥮫";s:3:"篆";s:4:"篆";s:3:"築";s:4:"築";s:3:"䈧";s:4:"䈧";s:4:"𥲀";s:4:"𥲀";s:3:"糒";s:4:"糒";s:3:"䊠";s:4:"䊠";s:3:"糨";s:4:"糨";s:3:"糣";s:4:"糣";s:3:"紀";s:4:"紀";s:4:"𥾆";s:4:"𥾆";s:3:"絣";s:4:"絣";s:3:"䌁";s:4:"䌁";s:3:"緇";s:4:"緇";s:3:"縂";s:4:"縂";s:3:"繅";s:4:"繅";s:3:"䌴";s:4:"䌴";s:4:"𦈨";s:4:"𦈨";s:4:"𦉇";s:4:"𦉇";s:3:"䍙";s:4:"䍙";s:4:"𦋙";s:4:"𦋙";s:3:"罺";s:4:"罺";s:4:"𦌾";s:4:"𦌾";s:3:"羕";s:4:"羕";s:3:"翺";s:4:"翺";s:4:"𦓚";s:4:"𦓚";s:4:"𦔣";s:4:"𦔣";s:3:"聠";s:4:"聠";s:4:"𦖨";s:4:"𦖨";s:3:"聰";s:4:"聰";s:4:"𣍟";s:4:"𣍟";s:3:"䏕";s:4:"䏕";s:3:"育";s:4:"育";s:3:"脃";s:4:"脃";s:3:"䐋";s:4:"䐋";s:3:"脾";s:4:"脾";s:3:"媵";s:4:"媵";s:4:"𦞧";s:4:"𦞧";s:4:"𦞵";s:4:"𦞵";s:4:"𣎓";s:4:"𣎓";s:4:"𣎜";s:4:"𣎜";s:3:"舄";s:4:"舄";s:3:"辞";s:4:"辞";s:3:"䑫";s:4:"䑫";s:3:"芑";s:4:"芑";s:3:"芋";s:4:"芋";s:3:"芝";s:4:"芝";s:3:"劳";s:4:"劳";s:3:"花";s:4:"花";s:3:"芳";s:4:"芳";s:3:"芽";s:4:"芽";s:3:"苦";s:4:"苦";s:4:"𦬼";s:4:"𦬼";s:3:"茝";s:4:"茝";s:3:"荣";s:4:"荣";s:3:"莭";s:4:"莭";s:3:"茣";s:4:"茣";s:3:"莽";s:4:"莽";s:3:"菧";s:4:"菧";s:3:"荓";s:4:"荓";s:3:"菊";s:4:"菊";s:3:"菌";s:4:"菌";s:3:"菜";s:4:"菜";s:4:"𦰶";s:4:"𦰶";s:4:"𦵫";s:4:"𦵫";s:4:"𦳕";s:4:"𦳕";s:3:"䔫";s:4:"䔫";s:3:"蓱";s:4:"蓱";s:3:"蓳";s:4:"蓳";s:3:"蔖";s:4:"蔖";s:4:"𧏊";s:4:"𧏊";s:3:"蕤";s:4:"蕤";s:4:"𦼬";s:4:"𦼬";s:3:"䕝";s:4:"䕝";s:3:"䕡";s:4:"䕡";s:4:"𦾱";s:4:"𦾱";s:4:"𧃒";s:4:"𧃒";s:3:"䕫";s:4:"䕫";s:3:"虐";s:4:"虐";s:3:"虧";s:4:"虧";s:3:"虩";s:4:"虩";s:3:"蚩";s:4:"蚩";s:3:"蚈";s:4:"蚈";s:3:"蜎";s:4:"蜎";s:3:"蛢";s:4:"蛢";s:3:"蜨";s:4:"蜨";s:3:"蝫";s:4:"蝫";s:3:"螆";s:4:"螆";s:3:"䗗";s:4:"䗗";s:3:"蟡";s:4:"蟡";s:3:"蠁";s:4:"蠁";s:3:"䗹";s:4:"䗹";s:3:"衠";s:4:"衠";s:3:"衣";s:4:"衣";s:4:"𧙧";s:4:"𧙧";s:3:"裗";s:4:"裗";s:3:"裞";s:4:"裞";s:3:"䘵";s:4:"䘵";s:3:"裺";s:4:"裺";s:3:"㒻";s:4:"㒻";s:4:"𧢮";s:4:"𧢮";s:4:"𧥦";s:4:"𧥦";s:3:"䚾";s:4:"䚾";s:3:"䛇";s:4:"䛇";s:3:"誠";s:4:"誠";s:3:"豕";s:4:"豕";s:4:"𧲨";s:4:"𧲨";s:3:"貫";s:4:"貫";s:3:"賁";s:4:"賁";s:3:"贛";s:4:"贛";s:3:"起";s:4:"起";s:4:"𧼯";s:4:"𧼯";s:4:"𠠄";s:4:"𠠄";s:3:"跋";s:4:"跋";s:3:"趼";s:4:"趼";s:3:"跰";s:4:"跰";s:4:"𠣞";s:4:"𠣞";s:3:"軔";s:4:"軔";s:4:"𨗒";s:4:"𨗒";s:4:"𨗭";s:4:"𨗭";s:3:"邔";s:4:"邔";s:3:"郱";s:4:"郱";s:3:"鄑";s:4:"鄑";s:4:"𨜮";s:4:"𨜮";s:3:"鄛";s:4:"鄛";s:3:"鈸";s:4:"鈸";s:3:"鋗";s:4:"鋗";s:3:"鋘";s:4:"鋘";s:3:"鉼";s:4:"鉼";s:3:"鏹";s:4:"鏹";s:3:"鐕";s:4:"鐕";s:4:"𨯺";s:4:"𨯺";s:3:"開";s:4:"開";s:3:"䦕";s:4:"䦕";s:3:"閷";s:4:"閷";s:4:"𨵷";s:4:"𨵷";s:3:"䧦";s:4:"䧦";s:3:"雃";s:4:"雃";s:3:"嶲";s:4:"嶲";s:3:"霣";s:4:"霣";s:4:"𩅅";s:4:"𩅅";s:4:"𩈚";s:4:"𩈚";s:3:"䩮";s:4:"䩮";s:3:"䩶";s:4:"䩶";s:3:"韠";s:4:"韠";s:4:"𩐊";s:4:"𩐊";s:3:"䪲";s:4:"䪲";s:4:"𩒖";s:4:"𩒖";s:3:"頩";s:4:"頩";s:4:"𩖶";s:4:"𩖶";s:3:"飢";s:4:"飢";s:3:"䬳";s:4:"䬳";s:3:"餩";s:4:"餩";s:3:"馧";s:4:"馧";s:3:"駂";s:4:"駂";s:3:"駾";s:4:"駾";s:3:"䯎";s:4:"䯎";s:4:"𩬰";s:4:"𩬰";s:3:"鱀";s:4:"鱀";s:3:"鳽";s:4:"鳽";s:3:"䳎";s:4:"䳎";s:3:"䳭";s:4:"䳭";s:3:"鵧";s:4:"鵧";s:4:"𪃎";s:4:"𪃎";s:3:"䳸";s:4:"䳸";s:4:"𪄅";s:4:"𪄅";s:4:"𪈎";s:4:"𪈎";s:4:"𪊑";s:4:"𪊑";s:3:"麻";s:4:"麻";s:3:"䵖";s:4:"䵖";s:3:"黹";s:4:"黹";s:3:"黾";s:4:"黾";s:3:"鼅";s:4:"鼅";s:3:"鼏";s:4:"鼏";s:3:"鼖";s:4:"鼖";s:3:"鼻";s:4:"鼻";s:4:"𪘀";s:4:"𪘀";}' ); +UtfNormal::$utfCanonicalDecomp = unserialize( 'a:2043:{s:2:"À";s:3:"À";s:2:"Á";s:3:"Á";s:2:"Â";s:3:"Â";s:2:"Ã";s:3:"Ã";s:2:"Ä";s:3:"Ä";s:2:"Å";s:3:"Å";s:2:"Ç";s:3:"Ç";s:2:"È";s:3:"È";s:2:"É";s:3:"É";s:2:"Ê";s:3:"Ê";s:2:"Ë";s:3:"Ë";s:2:"Ì";s:3:"Ì";s:2:"Í";s:3:"Í";s:2:"Î";s:3:"Î";s:2:"Ï";s:3:"Ï";s:2:"Ñ";s:3:"Ñ";s:2:"Ò";s:3:"Ò";s:2:"Ó";s:3:"Ó";s:2:"Ô";s:3:"Ô";s:2:"Õ";s:3:"Õ";s:2:"Ö";s:3:"Ö";s:2:"Ù";s:3:"Ù";s:2:"Ú";s:3:"Ú";s:2:"Û";s:3:"Û";s:2:"Ü";s:3:"Ü";s:2:"Ý";s:3:"Ý";s:2:"à";s:3:"à";s:2:"á";s:3:"á";s:2:"â";s:3:"â";s:2:"ã";s:3:"ã";s:2:"ä";s:3:"ä";s:2:"å";s:3:"å";s:2:"ç";s:3:"ç";s:2:"è";s:3:"è";s:2:"é";s:3:"é";s:2:"ê";s:3:"ê";s:2:"ë";s:3:"ë";s:2:"ì";s:3:"ì";s:2:"í";s:3:"í";s:2:"î";s:3:"î";s:2:"ï";s:3:"ï";s:2:"ñ";s:3:"ñ";s:2:"ò";s:3:"ò";s:2:"ó";s:3:"ó";s:2:"ô";s:3:"ô";s:2:"õ";s:3:"õ";s:2:"ö";s:3:"ö";s:2:"ù";s:3:"ù";s:2:"ú";s:3:"ú";s:2:"û";s:3:"û";s:2:"ü";s:3:"ü";s:2:"ý";s:3:"ý";s:2:"ÿ";s:3:"ÿ";s:2:"Ā";s:3:"Ā";s:2:"ā";s:3:"ā";s:2:"Ă";s:3:"Ă";s:2:"ă";s:3:"ă";s:2:"Ą";s:3:"Ą";s:2:"ą";s:3:"ą";s:2:"Ć";s:3:"Ć";s:2:"ć";s:3:"ć";s:2:"Ĉ";s:3:"Ĉ";s:2:"ĉ";s:3:"ĉ";s:2:"Ċ";s:3:"Ċ";s:2:"ċ";s:3:"ċ";s:2:"Č";s:3:"Č";s:2:"č";s:3:"č";s:2:"Ď";s:3:"Ď";s:2:"ď";s:3:"ď";s:2:"Ē";s:3:"Ē";s:2:"ē";s:3:"ē";s:2:"Ĕ";s:3:"Ĕ";s:2:"ĕ";s:3:"ĕ";s:2:"Ė";s:3:"Ė";s:2:"ė";s:3:"ė";s:2:"Ę";s:3:"Ę";s:2:"ę";s:3:"ę";s:2:"Ě";s:3:"Ě";s:2:"ě";s:3:"ě";s:2:"Ĝ";s:3:"Ĝ";s:2:"ĝ";s:3:"ĝ";s:2:"Ğ";s:3:"Ğ";s:2:"ğ";s:3:"ğ";s:2:"Ġ";s:3:"Ġ";s:2:"ġ";s:3:"ġ";s:2:"Ģ";s:3:"Ģ";s:2:"ģ";s:3:"ģ";s:2:"Ĥ";s:3:"Ĥ";s:2:"ĥ";s:3:"ĥ";s:2:"Ĩ";s:3:"Ĩ";s:2:"ĩ";s:3:"ĩ";s:2:"Ī";s:3:"Ī";s:2:"ī";s:3:"ī";s:2:"Ĭ";s:3:"Ĭ";s:2:"ĭ";s:3:"ĭ";s:2:"Į";s:3:"Į";s:2:"į";s:3:"į";s:2:"İ";s:3:"İ";s:2:"Ĵ";s:3:"Ĵ";s:2:"ĵ";s:3:"ĵ";s:2:"Ķ";s:3:"Ķ";s:2:"ķ";s:3:"ķ";s:2:"Ĺ";s:3:"Ĺ";s:2:"ĺ";s:3:"ĺ";s:2:"Ļ";s:3:"Ļ";s:2:"ļ";s:3:"ļ";s:2:"Ľ";s:3:"Ľ";s:2:"ľ";s:3:"ľ";s:2:"Ń";s:3:"Ń";s:2:"ń";s:3:"ń";s:2:"Ņ";s:3:"Ņ";s:2:"ņ";s:3:"ņ";s:2:"Ň";s:3:"Ň";s:2:"ň";s:3:"ň";s:2:"Ō";s:3:"Ō";s:2:"ō";s:3:"ō";s:2:"Ŏ";s:3:"Ŏ";s:2:"ŏ";s:3:"ŏ";s:2:"Ő";s:3:"Ő";s:2:"ő";s:3:"ő";s:2:"Ŕ";s:3:"Ŕ";s:2:"ŕ";s:3:"ŕ";s:2:"Ŗ";s:3:"Ŗ";s:2:"ŗ";s:3:"ŗ";s:2:"Ř";s:3:"Ř";s:2:"ř";s:3:"ř";s:2:"Ś";s:3:"Ś";s:2:"ś";s:3:"ś";s:2:"Ŝ";s:3:"Ŝ";s:2:"ŝ";s:3:"ŝ";s:2:"Ş";s:3:"Ş";s:2:"ş";s:3:"ş";s:2:"Š";s:3:"Š";s:2:"š";s:3:"š";s:2:"Ţ";s:3:"Ţ";s:2:"ţ";s:3:"ţ";s:2:"Ť";s:3:"Ť";s:2:"ť";s:3:"ť";s:2:"Ũ";s:3:"Ũ";s:2:"ũ";s:3:"ũ";s:2:"Ū";s:3:"Ū";s:2:"ū";s:3:"ū";s:2:"Ŭ";s:3:"Ŭ";s:2:"ŭ";s:3:"ŭ";s:2:"Ů";s:3:"Ů";s:2:"ů";s:3:"ů";s:2:"Ű";s:3:"Ű";s:2:"ű";s:3:"ű";s:2:"Ų";s:3:"Ų";s:2:"ų";s:3:"ų";s:2:"Ŵ";s:3:"Ŵ";s:2:"ŵ";s:3:"ŵ";s:2:"Ŷ";s:3:"Ŷ";s:2:"ŷ";s:3:"ŷ";s:2:"Ÿ";s:3:"Ÿ";s:2:"Ź";s:3:"Ź";s:2:"ź";s:3:"ź";s:2:"Ż";s:3:"Ż";s:2:"ż";s:3:"ż";s:2:"Ž";s:3:"Ž";s:2:"ž";s:3:"ž";s:2:"Ơ";s:3:"Ơ";s:2:"ơ";s:3:"ơ";s:2:"Ư";s:3:"Ư";s:2:"ư";s:3:"ư";s:2:"Ǎ";s:3:"Ǎ";s:2:"ǎ";s:3:"ǎ";s:2:"Ǐ";s:3:"Ǐ";s:2:"ǐ";s:3:"ǐ";s:2:"Ǒ";s:3:"Ǒ";s:2:"ǒ";s:3:"ǒ";s:2:"Ǔ";s:3:"Ǔ";s:2:"ǔ";s:3:"ǔ";s:2:"Ǖ";s:5:"Ǖ";s:2:"ǖ";s:5:"ǖ";s:2:"Ǘ";s:5:"Ǘ";s:2:"ǘ";s:5:"ǘ";s:2:"Ǚ";s:5:"Ǚ";s:2:"ǚ";s:5:"ǚ";s:2:"Ǜ";s:5:"Ǜ";s:2:"ǜ";s:5:"ǜ";s:2:"Ǟ";s:5:"Ǟ";s:2:"ǟ";s:5:"ǟ";s:2:"Ǡ";s:5:"Ǡ";s:2:"ǡ";s:5:"ǡ";s:2:"Ǣ";s:4:"Ǣ";s:2:"ǣ";s:4:"ǣ";s:2:"Ǧ";s:3:"Ǧ";s:2:"ǧ";s:3:"ǧ";s:2:"Ǩ";s:3:"Ǩ";s:2:"ǩ";s:3:"ǩ";s:2:"Ǫ";s:3:"Ǫ";s:2:"ǫ";s:3:"ǫ";s:2:"Ǭ";s:5:"Ǭ";s:2:"ǭ";s:5:"ǭ";s:2:"Ǯ";s:4:"Ǯ";s:2:"ǯ";s:4:"ǯ";s:2:"ǰ";s:3:"ǰ";s:2:"Ǵ";s:3:"Ǵ";s:2:"ǵ";s:3:"ǵ";s:2:"Ǹ";s:3:"Ǹ";s:2:"ǹ";s:3:"ǹ";s:2:"Ǻ";s:5:"Ǻ";s:2:"ǻ";s:5:"ǻ";s:2:"Ǽ";s:4:"Ǽ";s:2:"ǽ";s:4:"ǽ";s:2:"Ǿ";s:4:"Ǿ";s:2:"ǿ";s:4:"ǿ";s:2:"Ȁ";s:3:"Ȁ";s:2:"ȁ";s:3:"ȁ";s:2:"Ȃ";s:3:"Ȃ";s:2:"ȃ";s:3:"ȃ";s:2:"Ȅ";s:3:"Ȅ";s:2:"ȅ";s:3:"ȅ";s:2:"Ȇ";s:3:"Ȇ";s:2:"ȇ";s:3:"ȇ";s:2:"Ȉ";s:3:"Ȉ";s:2:"ȉ";s:3:"ȉ";s:2:"Ȋ";s:3:"Ȋ";s:2:"ȋ";s:3:"ȋ";s:2:"Ȍ";s:3:"Ȍ";s:2:"ȍ";s:3:"ȍ";s:2:"Ȏ";s:3:"Ȏ";s:2:"ȏ";s:3:"ȏ";s:2:"Ȑ";s:3:"Ȑ";s:2:"ȑ";s:3:"ȑ";s:2:"Ȓ";s:3:"Ȓ";s:2:"ȓ";s:3:"ȓ";s:2:"Ȕ";s:3:"Ȕ";s:2:"ȕ";s:3:"ȕ";s:2:"Ȗ";s:3:"Ȗ";s:2:"ȗ";s:3:"ȗ";s:2:"Ș";s:3:"Ș";s:2:"ș";s:3:"ș";s:2:"Ț";s:3:"Ț";s:2:"ț";s:3:"ț";s:2:"Ȟ";s:3:"Ȟ";s:2:"ȟ";s:3:"ȟ";s:2:"Ȧ";s:3:"Ȧ";s:2:"ȧ";s:3:"ȧ";s:2:"Ȩ";s:3:"Ȩ";s:2:"ȩ";s:3:"ȩ";s:2:"Ȫ";s:5:"Ȫ";s:2:"ȫ";s:5:"ȫ";s:2:"Ȭ";s:5:"Ȭ";s:2:"ȭ";s:5:"ȭ";s:2:"Ȯ";s:3:"Ȯ";s:2:"ȯ";s:3:"ȯ";s:2:"Ȱ";s:5:"Ȱ";s:2:"ȱ";s:5:"ȱ";s:2:"Ȳ";s:3:"Ȳ";s:2:"ȳ";s:3:"ȳ";s:2:"̀";s:2:"̀";s:2:"́";s:2:"́";s:2:"̓";s:2:"̓";s:2:"̈́";s:4:"̈́";s:2:"ʹ";s:2:"ʹ";s:2:";";s:1:";";s:2:"΅";s:4:"΅";s:2:"Ά";s:4:"Ά";s:2:"·";s:2:"·";s:2:"Έ";s:4:"Έ";s:2:"Ή";s:4:"Ή";s:2:"Ί";s:4:"Ί";s:2:"Ό";s:4:"Ό";s:2:"Ύ";s:4:"Ύ";s:2:"Ώ";s:4:"Ώ";s:2:"ΐ";s:6:"ΐ";s:2:"Ϊ";s:4:"Ϊ";s:2:"Ϋ";s:4:"Ϋ";s:2:"ά";s:4:"ά";s:2:"έ";s:4:"έ";s:2:"ή";s:4:"ή";s:2:"ί";s:4:"ί";s:2:"ΰ";s:6:"ΰ";s:2:"ϊ";s:4:"ϊ";s:2:"ϋ";s:4:"ϋ";s:2:"ό";s:4:"ό";s:2:"ύ";s:4:"ύ";s:2:"ώ";s:4:"ώ";s:2:"ϓ";s:4:"ϓ";s:2:"ϔ";s:4:"ϔ";s:2:"Ѐ";s:4:"Ѐ";s:2:"Ё";s:4:"Ё";s:2:"Ѓ";s:4:"Ѓ";s:2:"Ї";s:4:"Ї";s:2:"Ќ";s:4:"Ќ";s:2:"Ѝ";s:4:"Ѝ";s:2:"Ў";s:4:"Ў";s:2:"Й";s:4:"Й";s:2:"й";s:4:"й";s:2:"ѐ";s:4:"ѐ";s:2:"ё";s:4:"ё";s:2:"ѓ";s:4:"ѓ";s:2:"ї";s:4:"ї";s:2:"ќ";s:4:"ќ";s:2:"ѝ";s:4:"ѝ";s:2:"ў";s:4:"ў";s:2:"Ѷ";s:4:"Ѷ";s:2:"ѷ";s:4:"ѷ";s:2:"Ӂ";s:4:"Ӂ";s:2:"ӂ";s:4:"ӂ";s:2:"Ӑ";s:4:"Ӑ";s:2:"ӑ";s:4:"ӑ";s:2:"Ӓ";s:4:"Ӓ";s:2:"ӓ";s:4:"ӓ";s:2:"Ӗ";s:4:"Ӗ";s:2:"ӗ";s:4:"ӗ";s:2:"Ӛ";s:4:"Ӛ";s:2:"ӛ";s:4:"ӛ";s:2:"Ӝ";s:4:"Ӝ";s:2:"ӝ";s:4:"ӝ";s:2:"Ӟ";s:4:"Ӟ";s:2:"ӟ";s:4:"ӟ";s:2:"Ӣ";s:4:"Ӣ";s:2:"ӣ";s:4:"ӣ";s:2:"Ӥ";s:4:"Ӥ";s:2:"ӥ";s:4:"ӥ";s:2:"Ӧ";s:4:"Ӧ";s:2:"ӧ";s:4:"ӧ";s:2:"Ӫ";s:4:"Ӫ";s:2:"ӫ";s:4:"ӫ";s:2:"Ӭ";s:4:"Ӭ";s:2:"ӭ";s:4:"ӭ";s:2:"Ӯ";s:4:"Ӯ";s:2:"ӯ";s:4:"ӯ";s:2:"Ӱ";s:4:"Ӱ";s:2:"ӱ";s:4:"ӱ";s:2:"Ӳ";s:4:"Ӳ";s:2:"ӳ";s:4:"ӳ";s:2:"Ӵ";s:4:"Ӵ";s:2:"ӵ";s:4:"ӵ";s:2:"Ӹ";s:4:"Ӹ";s:2:"ӹ";s:4:"ӹ";s:2:"آ";s:4:"آ";s:2:"أ";s:4:"أ";s:2:"ؤ";s:4:"ؤ";s:2:"إ";s:4:"إ";s:2:"ئ";s:4:"ئ";s:2:"ۀ";s:4:"ۀ";s:2:"ۂ";s:4:"ۂ";s:2:"ۓ";s:4:"ۓ";s:3:"ऩ";s:6:"ऩ";s:3:"ऱ";s:6:"ऱ";s:3:"ऴ";s:6:"ऴ";s:3:"क़";s:6:"क़";s:3:"ख़";s:6:"ख़";s:3:"ग़";s:6:"ग़";s:3:"ज़";s:6:"ज़";s:3:"ड़";s:6:"ड़";s:3:"ढ़";s:6:"ढ़";s:3:"फ़";s:6:"फ़";s:3:"य़";s:6:"य़";s:3:"ো";s:6:"ো";s:3:"ৌ";s:6:"ৌ";s:3:"ড়";s:6:"ড়";s:3:"ঢ়";s:6:"ঢ়";s:3:"য়";s:6:"য়";s:3:"ਲ਼";s:6:"ਲ਼";s:3:"ਸ਼";s:6:"ਸ਼";s:3:"ਖ਼";s:6:"ਖ਼";s:3:"ਗ਼";s:6:"ਗ਼";s:3:"ਜ਼";s:6:"ਜ਼";s:3:"ਫ਼";s:6:"ਫ਼";s:3:"ୈ";s:6:"ୈ";s:3:"ୋ";s:6:"ୋ";s:3:"ୌ";s:6:"ୌ";s:3:"ଡ଼";s:6:"ଡ଼";s:3:"ଢ଼";s:6:"ଢ଼";s:3:"ஔ";s:6:"ஔ";s:3:"ொ";s:6:"ொ";s:3:"ோ";s:6:"ோ";s:3:"ௌ";s:6:"ௌ";s:3:"ై";s:6:"ై";s:3:"ೀ";s:6:"ೀ";s:3:"ೇ";s:6:"ೇ";s:3:"ೈ";s:6:"ೈ";s:3:"ೊ";s:6:"ೊ";s:3:"ೋ";s:9:"ೋ";s:3:"ൊ";s:6:"ൊ";s:3:"ോ";s:6:"ോ";s:3:"ൌ";s:6:"ൌ";s:3:"ේ";s:6:"ේ";s:3:"ො";s:6:"ො";s:3:"ෝ";s:9:"ෝ";s:3:"ෞ";s:6:"ෞ";s:3:"གྷ";s:6:"གྷ";s:3:"ཌྷ";s:6:"ཌྷ";s:3:"དྷ";s:6:"དྷ";s:3:"བྷ";s:6:"བྷ";s:3:"ཛྷ";s:6:"ཛྷ";s:3:"ཀྵ";s:6:"ཀྵ";s:3:"ཱི";s:6:"ཱི";s:3:"ཱུ";s:6:"ཱུ";s:3:"ྲྀ";s:6:"ྲྀ";s:3:"ླྀ";s:6:"ླྀ";s:3:"ཱྀ";s:6:"ཱྀ";s:3:"ྒྷ";s:6:"ྒྷ";s:3:"ྜྷ";s:6:"ྜྷ";s:3:"ྡྷ";s:6:"ྡྷ";s:3:"ྦྷ";s:6:"ྦྷ";s:3:"ྫྷ";s:6:"ྫྷ";s:3:"ྐྵ";s:6:"ྐྵ";s:3:"ဦ";s:6:"ဦ";s:3:"ᬆ";s:6:"ᬆ";s:3:"ᬈ";s:6:"ᬈ";s:3:"ᬊ";s:6:"ᬊ";s:3:"ᬌ";s:6:"ᬌ";s:3:"ᬎ";s:6:"ᬎ";s:3:"ᬒ";s:6:"ᬒ";s:3:"ᬻ";s:6:"ᬻ";s:3:"ᬽ";s:6:"ᬽ";s:3:"ᭀ";s:6:"ᭀ";s:3:"ᭁ";s:6:"ᭁ";s:3:"ᭃ";s:6:"ᭃ";s:3:"Ḁ";s:3:"Ḁ";s:3:"ḁ";s:3:"ḁ";s:3:"Ḃ";s:3:"Ḃ";s:3:"ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"Ḅ";s:3:"ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"Ḇ";s:3:"ḇ";s:3:"ḇ";s:3:"Ḉ";s:5:"Ḉ";s:3:"ḉ";s:5:"ḉ";s:3:"Ḋ";s:3:"Ḋ";s:3:"ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"Ḍ";s:3:"ḍ";s:3:"ḍ";s:3:"Ḏ";s:3:"Ḏ";s:3:"ḏ";s:3:"ḏ";s:3:"Ḑ";s:3:"Ḑ";s:3:"ḑ";s:3:"ḑ";s:3:"Ḓ";s:3:"Ḓ";s:3:"ḓ";s:3:"ḓ";s:3:"Ḕ";s:5:"Ḕ";s:3:"ḕ";s:5:"ḕ";s:3:"Ḗ";s:5:"Ḗ";s:3:"ḗ";s:5:"ḗ";s:3:"Ḙ";s:3:"Ḙ";s:3:"ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"Ḛ";s:3:"ḛ";s:3:"ḛ";s:3:"Ḝ";s:5:"Ḝ";s:3:"ḝ";s:5:"ḝ";s:3:"Ḟ";s:3:"Ḟ";s:3:"ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"Ḡ";s:3:"ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"Ḣ";s:3:"ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"Ḥ";s:3:"ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"Ḧ";s:3:"ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"Ḩ";s:3:"ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"Ḫ";s:3:"ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"Ḭ";s:3:"ḭ";s:3:"ḭ";s:3:"Ḯ";s:5:"Ḯ";s:3:"ḯ";s:5:"ḯ";s:3:"Ḱ";s:3:"Ḱ";s:3:"ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"Ḳ";s:3:"ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"Ḵ";s:3:"ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"Ḷ";s:3:"ḷ";s:3:"ḷ";s:3:"Ḹ";s:5:"Ḹ";s:3:"ḹ";s:5:"ḹ";s:3:"Ḻ";s:3:"Ḻ";s:3:"ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"Ḽ";s:3:"ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"Ḿ";s:3:"ḿ";s:3:"ḿ";s:3:"Ṁ";s:3:"Ṁ";s:3:"ṁ";s:3:"ṁ";s:3:"Ṃ";s:3:"Ṃ";s:3:"ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"Ṅ";s:3:"ṅ";s:3:"ṅ";s:3:"Ṇ";s:3:"Ṇ";s:3:"ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"Ṉ";s:3:"ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"Ṋ";s:3:"ṋ";s:3:"ṋ";s:3:"Ṍ";s:5:"Ṍ";s:3:"ṍ";s:5:"ṍ";s:3:"Ṏ";s:5:"Ṏ";s:3:"ṏ";s:5:"ṏ";s:3:"Ṑ";s:5:"Ṑ";s:3:"ṑ";s:5:"ṑ";s:3:"Ṓ";s:5:"Ṓ";s:3:"ṓ";s:5:"ṓ";s:3:"Ṕ";s:3:"Ṕ";s:3:"ṕ";s:3:"ṕ";s:3:"Ṗ";s:3:"Ṗ";s:3:"ṗ";s:3:"ṗ";s:3:"Ṙ";s:3:"Ṙ";s:3:"ṙ";s:3:"ṙ";s:3:"Ṛ";s:3:"Ṛ";s:3:"ṛ";s:3:"ṛ";s:3:"Ṝ";s:5:"Ṝ";s:3:"ṝ";s:5:"ṝ";s:3:"Ṟ";s:3:"Ṟ";s:3:"ṟ";s:3:"ṟ";s:3:"Ṡ";s:3:"Ṡ";s:3:"ṡ";s:3:"ṡ";s:3:"Ṣ";s:3:"Ṣ";s:3:"ṣ";s:3:"ṣ";s:3:"Ṥ";s:5:"Ṥ";s:3:"ṥ";s:5:"ṥ";s:3:"Ṧ";s:5:"Ṧ";s:3:"ṧ";s:5:"ṧ";s:3:"Ṩ";s:5:"Ṩ";s:3:"ṩ";s:5:"ṩ";s:3:"Ṫ";s:3:"Ṫ";s:3:"ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"Ṭ";s:3:"ṭ";s:3:"ṭ";s:3:"Ṯ";s:3:"Ṯ";s:3:"ṯ";s:3:"ṯ";s:3:"Ṱ";s:3:"Ṱ";s:3:"ṱ";s:3:"ṱ";s:3:"Ṳ";s:3:"Ṳ";s:3:"ṳ";s:3:"ṳ";s:3:"Ṵ";s:3:"Ṵ";s:3:"ṵ";s:3:"ṵ";s:3:"Ṷ";s:3:"Ṷ";s:3:"ṷ";s:3:"ṷ";s:3:"Ṹ";s:5:"Ṹ";s:3:"ṹ";s:5:"ṹ";s:3:"Ṻ";s:5:"Ṻ";s:3:"ṻ";s:5:"ṻ";s:3:"Ṽ";s:3:"Ṽ";s:3:"ṽ";s:3:"ṽ";s:3:"Ṿ";s:3:"Ṿ";s:3:"ṿ";s:3:"ṿ";s:3:"Ẁ";s:3:"Ẁ";s:3:"ẁ";s:3:"ẁ";s:3:"Ẃ";s:3:"Ẃ";s:3:"ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"Ẅ";s:3:"ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"Ẇ";s:3:"ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"Ẉ";s:3:"ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"Ẋ";s:3:"ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"Ẍ";s:3:"ẍ";s:3:"ẍ";s:3:"Ẏ";s:3:"Ẏ";s:3:"ẏ";s:3:"ẏ";s:3:"Ẑ";s:3:"Ẑ";s:3:"ẑ";s:3:"ẑ";s:3:"Ẓ";s:3:"Ẓ";s:3:"ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"Ẕ";s:3:"ẕ";s:3:"ẕ";s:3:"ẖ";s:3:"ẖ";s:3:"ẗ";s:3:"ẗ";s:3:"ẘ";s:3:"ẘ";s:3:"ẙ";s:3:"ẙ";s:3:"ẛ";s:4:"ẛ";s:3:"Ạ";s:3:"Ạ";s:3:"ạ";s:3:"ạ";s:3:"Ả";s:3:"Ả";s:3:"ả";s:3:"ả";s:3:"Ấ";s:5:"Ấ";s:3:"ấ";s:5:"ấ";s:3:"Ầ";s:5:"Ầ";s:3:"ầ";s:5:"ầ";s:3:"Ẩ";s:5:"Ẩ";s:3:"ẩ";s:5:"ẩ";s:3:"Ẫ";s:5:"Ẫ";s:3:"ẫ";s:5:"ẫ";s:3:"Ậ";s:5:"Ậ";s:3:"ậ";s:5:"ậ";s:3:"Ắ";s:5:"Ắ";s:3:"ắ";s:5:"ắ";s:3:"Ằ";s:5:"Ằ";s:3:"ằ";s:5:"ằ";s:3:"Ẳ";s:5:"Ẳ";s:3:"ẳ";s:5:"ẳ";s:3:"Ẵ";s:5:"Ẵ";s:3:"ẵ";s:5:"ẵ";s:3:"Ặ";s:5:"Ặ";s:3:"ặ";s:5:"ặ";s:3:"Ẹ";s:3:"Ẹ";s:3:"ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"Ẻ";s:3:"ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"Ẽ";s:3:"ẽ";s:3:"ẽ";s:3:"Ế";s:5:"Ế";s:3:"ế";s:5:"ế";s:3:"Ề";s:5:"Ề";s:3:"ề";s:5:"ề";s:3:"Ể";s:5:"Ể";s:3:"ể";s:5:"ể";s:3:"Ễ";s:5:"Ễ";s:3:"ễ";s:5:"ễ";s:3:"Ệ";s:5:"Ệ";s:3:"ệ";s:5:"ệ";s:3:"Ỉ";s:3:"Ỉ";s:3:"ỉ";s:3:"ỉ";s:3:"Ị";s:3:"Ị";s:3:"ị";s:3:"ị";s:3:"Ọ";s:3:"Ọ";s:3:"ọ";s:3:"ọ";s:3:"Ỏ";s:3:"Ỏ";s:3:"ỏ";s:3:"ỏ";s:3:"Ố";s:5:"Ố";s:3:"ố";s:5:"ố";s:3:"Ồ";s:5:"Ồ";s:3:"ồ";s:5:"ồ";s:3:"Ổ";s:5:"Ổ";s:3:"ổ";s:5:"ổ";s:3:"Ỗ";s:5:"Ỗ";s:3:"ỗ";s:5:"ỗ";s:3:"Ộ";s:5:"Ộ";s:3:"ộ";s:5:"ộ";s:3:"Ớ";s:5:"Ớ";s:3:"ớ";s:5:"ớ";s:3:"Ờ";s:5:"Ờ";s:3:"ờ";s:5:"ờ";s:3:"Ở";s:5:"Ở";s:3:"ở";s:5:"ở";s:3:"Ỡ";s:5:"Ỡ";s:3:"ỡ";s:5:"ỡ";s:3:"Ợ";s:5:"Ợ";s:3:"ợ";s:5:"ợ";s:3:"Ụ";s:3:"Ụ";s:3:"ụ";s:3:"ụ";s:3:"Ủ";s:3:"Ủ";s:3:"ủ";s:3:"ủ";s:3:"Ứ";s:5:"Ứ";s:3:"ứ";s:5:"ứ";s:3:"Ừ";s:5:"Ừ";s:3:"ừ";s:5:"ừ";s:3:"Ử";s:5:"Ử";s:3:"ử";s:5:"ử";s:3:"Ữ";s:5:"Ữ";s:3:"ữ";s:5:"ữ";s:3:"Ự";s:5:"Ự";s:3:"ự";s:5:"ự";s:3:"Ỳ";s:3:"Ỳ";s:3:"ỳ";s:3:"ỳ";s:3:"Ỵ";s:3:"Ỵ";s:3:"ỵ";s:3:"ỵ";s:3:"Ỷ";s:3:"Ỷ";s:3:"ỷ";s:3:"ỷ";s:3:"Ỹ";s:3:"Ỹ";s:3:"ỹ";s:3:"ỹ";s:3:"ἀ";s:4:"ἀ";s:3:"ἁ";s:4:"ἁ";s:3:"ἂ";s:6:"ἂ";s:3:"ἃ";s:6:"ἃ";s:3:"ἄ";s:6:"ἄ";s:3:"ἅ";s:6:"ἅ";s:3:"ἆ";s:6:"ἆ";s:3:"ἇ";s:6:"ἇ";s:3:"Ἀ";s:4:"Ἀ";s:3:"Ἁ";s:4:"Ἁ";s:3:"Ἂ";s:6:"Ἂ";s:3:"Ἃ";s:6:"Ἃ";s:3:"Ἄ";s:6:"Ἄ";s:3:"Ἅ";s:6:"Ἅ";s:3:"Ἆ";s:6:"Ἆ";s:3:"Ἇ";s:6:"Ἇ";s:3:"ἐ";s:4:"ἐ";s:3:"ἑ";s:4:"ἑ";s:3:"ἒ";s:6:"ἒ";s:3:"ἓ";s:6:"ἓ";s:3:"ἔ";s:6:"ἔ";s:3:"ἕ";s:6:"ἕ";s:3:"Ἐ";s:4:"Ἐ";s:3:"Ἑ";s:4:"Ἑ";s:3:"Ἒ";s:6:"Ἒ";s:3:"Ἓ";s:6:"Ἓ";s:3:"Ἔ";s:6:"Ἔ";s:3:"Ἕ";s:6:"Ἕ";s:3:"ἠ";s:4:"ἠ";s:3:"ἡ";s:4:"ἡ";s:3:"ἢ";s:6:"ἢ";s:3:"ἣ";s:6:"ἣ";s:3:"ἤ";s:6:"ἤ";s:3:"ἥ";s:6:"ἥ";s:3:"ἦ";s:6:"ἦ";s:3:"ἧ";s:6:"ἧ";s:3:"Ἠ";s:4:"Ἠ";s:3:"Ἡ";s:4:"Ἡ";s:3:"Ἢ";s:6:"Ἢ";s:3:"Ἣ";s:6:"Ἣ";s:3:"Ἤ";s:6:"Ἤ";s:3:"Ἥ";s:6:"Ἥ";s:3:"Ἦ";s:6:"Ἦ";s:3:"Ἧ";s:6:"Ἧ";s:3:"ἰ";s:4:"ἰ";s:3:"ἱ";s:4:"ἱ";s:3:"ἲ";s:6:"ἲ";s:3:"ἳ";s:6:"ἳ";s:3:"ἴ";s:6:"ἴ";s:3:"ἵ";s:6:"ἵ";s:3:"ἶ";s:6:"ἶ";s:3:"ἷ";s:6:"ἷ";s:3:"Ἰ";s:4:"Ἰ";s:3:"Ἱ";s:4:"Ἱ";s:3:"Ἲ";s:6:"Ἲ";s:3:"Ἳ";s:6:"Ἳ";s:3:"Ἴ";s:6:"Ἴ";s:3:"Ἵ";s:6:"Ἵ";s:3:"Ἶ";s:6:"Ἶ";s:3:"Ἷ";s:6:"Ἷ";s:3:"ὀ";s:4:"ὀ";s:3:"ὁ";s:4:"ὁ";s:3:"ὂ";s:6:"ὂ";s:3:"ὃ";s:6:"ὃ";s:3:"ὄ";s:6:"ὄ";s:3:"ὅ";s:6:"ὅ";s:3:"Ὀ";s:4:"Ὀ";s:3:"Ὁ";s:4:"Ὁ";s:3:"Ὂ";s:6:"Ὂ";s:3:"Ὃ";s:6:"Ὃ";s:3:"Ὄ";s:6:"Ὄ";s:3:"Ὅ";s:6:"Ὅ";s:3:"ὐ";s:4:"ὐ";s:3:"ὑ";s:4:"ὑ";s:3:"ὒ";s:6:"ὒ";s:3:"ὓ";s:6:"ὓ";s:3:"ὔ";s:6:"ὔ";s:3:"ὕ";s:6:"ὕ";s:3:"ὖ";s:6:"ὖ";s:3:"ὗ";s:6:"ὗ";s:3:"Ὑ";s:4:"Ὑ";s:3:"Ὓ";s:6:"Ὓ";s:3:"Ὕ";s:6:"Ὕ";s:3:"Ὗ";s:6:"Ὗ";s:3:"ὠ";s:4:"ὠ";s:3:"ὡ";s:4:"ὡ";s:3:"ὢ";s:6:"ὢ";s:3:"ὣ";s:6:"ὣ";s:3:"ὤ";s:6:"ὤ";s:3:"ὥ";s:6:"ὥ";s:3:"ὦ";s:6:"ὦ";s:3:"ὧ";s:6:"ὧ";s:3:"Ὠ";s:4:"Ὠ";s:3:"Ὡ";s:4:"Ὡ";s:3:"Ὢ";s:6:"Ὢ";s:3:"Ὣ";s:6:"Ὣ";s:3:"Ὤ";s:6:"Ὤ";s:3:"Ὥ";s:6:"Ὥ";s:3:"Ὦ";s:6:"Ὦ";s:3:"Ὧ";s:6:"Ὧ";s:3:"ὰ";s:4:"ὰ";s:3:"ά";s:4:"ά";s:3:"ὲ";s:4:"ὲ";s:3:"έ";s:4:"έ";s:3:"ὴ";s:4:"ὴ";s:3:"ή";s:4:"ή";s:3:"ὶ";s:4:"ὶ";s:3:"ί";s:4:"ί";s:3:"ὸ";s:4:"ὸ";s:3:"ό";s:4:"ό";s:3:"ὺ";s:4:"ὺ";s:3:"ύ";s:4:"ύ";s:3:"ὼ";s:4:"ὼ";s:3:"ώ";s:4:"ώ";s:3:"ᾀ";s:6:"ᾀ";s:3:"ᾁ";s:6:"ᾁ";s:3:"ᾂ";s:8:"ᾂ";s:3:"ᾃ";s:8:"ᾃ";s:3:"ᾄ";s:8:"ᾄ";s:3:"ᾅ";s:8:"ᾅ";s:3:"ᾆ";s:8:"ᾆ";s:3:"ᾇ";s:8:"ᾇ";s:3:"ᾈ";s:6:"ᾈ";s:3:"ᾉ";s:6:"ᾉ";s:3:"ᾊ";s:8:"ᾊ";s:3:"ᾋ";s:8:"ᾋ";s:3:"ᾌ";s:8:"ᾌ";s:3:"ᾍ";s:8:"ᾍ";s:3:"ᾎ";s:8:"ᾎ";s:3:"ᾏ";s:8:"ᾏ";s:3:"ᾐ";s:6:"ᾐ";s:3:"ᾑ";s:6:"ᾑ";s:3:"ᾒ";s:8:"ᾒ";s:3:"ᾓ";s:8:"ᾓ";s:3:"ᾔ";s:8:"ᾔ";s:3:"ᾕ";s:8:"ᾕ";s:3:"ᾖ";s:8:"ᾖ";s:3:"ᾗ";s:8:"ᾗ";s:3:"ᾘ";s:6:"ᾘ";s:3:"ᾙ";s:6:"ᾙ";s:3:"ᾚ";s:8:"ᾚ";s:3:"ᾛ";s:8:"ᾛ";s:3:"ᾜ";s:8:"ᾜ";s:3:"ᾝ";s:8:"ᾝ";s:3:"ᾞ";s:8:"ᾞ";s:3:"ᾟ";s:8:"ᾟ";s:3:"ᾠ";s:6:"ᾠ";s:3:"ᾡ";s:6:"ᾡ";s:3:"ᾢ";s:8:"ᾢ";s:3:"ᾣ";s:8:"ᾣ";s:3:"ᾤ";s:8:"ᾤ";s:3:"ᾥ";s:8:"ᾥ";s:3:"ᾦ";s:8:"ᾦ";s:3:"ᾧ";s:8:"ᾧ";s:3:"ᾨ";s:6:"ᾨ";s:3:"ᾩ";s:6:"ᾩ";s:3:"ᾪ";s:8:"ᾪ";s:3:"ᾫ";s:8:"ᾫ";s:3:"ᾬ";s:8:"ᾬ";s:3:"ᾭ";s:8:"ᾭ";s:3:"ᾮ";s:8:"ᾮ";s:3:"ᾯ";s:8:"ᾯ";s:3:"ᾰ";s:4:"ᾰ";s:3:"ᾱ";s:4:"ᾱ";s:3:"ᾲ";s:6:"ᾲ";s:3:"ᾳ";s:4:"ᾳ";s:3:"ᾴ";s:6:"ᾴ";s:3:"ᾶ";s:4:"ᾶ";s:3:"ᾷ";s:6:"ᾷ";s:3:"Ᾰ";s:4:"Ᾰ";s:3:"Ᾱ";s:4:"Ᾱ";s:3:"Ὰ";s:4:"Ὰ";s:3:"Ά";s:4:"Ά";s:3:"ᾼ";s:4:"ᾼ";s:3:"ι";s:2:"ι";s:3:"῁";s:4:"῁";s:3:"ῂ";s:6:"ῂ";s:3:"ῃ";s:4:"ῃ";s:3:"ῄ";s:6:"ῄ";s:3:"ῆ";s:4:"ῆ";s:3:"ῇ";s:6:"ῇ";s:3:"Ὲ";s:4:"Ὲ";s:3:"Έ";s:4:"Έ";s:3:"Ὴ";s:4:"Ὴ";s:3:"Ή";s:4:"Ή";s:3:"ῌ";s:4:"ῌ";s:3:"῍";s:5:"῍";s:3:"῎";s:5:"῎";s:3:"῏";s:5:"῏";s:3:"ῐ";s:4:"ῐ";s:3:"ῑ";s:4:"ῑ";s:3:"ῒ";s:6:"ῒ";s:3:"ΐ";s:6:"ΐ";s:3:"ῖ";s:4:"ῖ";s:3:"ῗ";s:6:"ῗ";s:3:"Ῐ";s:4:"Ῐ";s:3:"Ῑ";s:4:"Ῑ";s:3:"Ὶ";s:4:"Ὶ";s:3:"Ί";s:4:"Ί";s:3:"῝";s:5:"῝";s:3:"῞";s:5:"῞";s:3:"῟";s:5:"῟";s:3:"ῠ";s:4:"ῠ";s:3:"ῡ";s:4:"ῡ";s:3:"ῢ";s:6:"ῢ";s:3:"ΰ";s:6:"ΰ";s:3:"ῤ";s:4:"ῤ";s:3:"ῥ";s:4:"ῥ";s:3:"ῦ";s:4:"ῦ";s:3:"ῧ";s:6:"ῧ";s:3:"Ῠ";s:4:"Ῠ";s:3:"Ῡ";s:4:"Ῡ";s:3:"Ὺ";s:4:"Ὺ";s:3:"Ύ";s:4:"Ύ";s:3:"Ῥ";s:4:"Ῥ";s:3:"῭";s:4:"῭";s:3:"΅";s:4:"΅";s:3:"`";s:1:"`";s:3:"ῲ";s:6:"ῲ";s:3:"ῳ";s:4:"ῳ";s:3:"ῴ";s:6:"ῴ";s:3:"ῶ";s:4:"ῶ";s:3:"ῷ";s:6:"ῷ";s:3:"Ὸ";s:4:"Ὸ";s:3:"Ό";s:4:"Ό";s:3:"Ὼ";s:4:"Ὼ";s:3:"Ώ";s:4:"Ώ";s:3:"ῼ";s:4:"ῼ";s:3:"´";s:2:"´";s:3:" ";s:3:" ";s:3:" ";s:3:" ";s:3:"Ω";s:2:"Ω";s:3:"K";s:1:"K";s:3:"Å";s:3:"Å";s:3:"↚";s:5:"↚";s:3:"↛";s:5:"↛";s:3:"↮";s:5:"↮";s:3:"⇍";s:5:"⇍";s:3:"⇎";s:5:"⇎";s:3:"⇏";s:5:"⇏";s:3:"∄";s:5:"∄";s:3:"∉";s:5:"∉";s:3:"∌";s:5:"∌";s:3:"∤";s:5:"∤";s:3:"∦";s:5:"∦";s:3:"≁";s:5:"≁";s:3:"≄";s:5:"≄";s:3:"≇";s:5:"≇";s:3:"≉";s:5:"≉";s:3:"≠";s:3:"≠";s:3:"≢";s:5:"≢";s:3:"≭";s:5:"≭";s:3:"≮";s:3:"≮";s:3:"≯";s:3:"≯";s:3:"≰";s:5:"≰";s:3:"≱";s:5:"≱";s:3:"≴";s:5:"≴";s:3:"≵";s:5:"≵";s:3:"≸";s:5:"≸";s:3:"≹";s:5:"≹";s:3:"⊀";s:5:"⊀";s:3:"⊁";s:5:"⊁";s:3:"⊄";s:5:"⊄";s:3:"⊅";s:5:"⊅";s:3:"⊈";s:5:"⊈";s:3:"⊉";s:5:"⊉";s:3:"⊬";s:5:"⊬";s:3:"⊭";s:5:"⊭";s:3:"⊮";s:5:"⊮";s:3:"⊯";s:5:"⊯";s:3:"⋠";s:5:"⋠";s:3:"⋡";s:5:"⋡";s:3:"⋢";s:5:"⋢";s:3:"⋣";s:5:"⋣";s:3:"⋪";s:5:"⋪";s:3:"⋫";s:5:"⋫";s:3:"⋬";s:5:"⋬";s:3:"⋭";s:5:"⋭";s:3:"〈";s:3:"〈";s:3:"〉";s:3:"〉";s:3:"⫝̸";s:5:"⫝̸";s:3:"が";s:6:"が";s:3:"ぎ";s:6:"ぎ";s:3:"ぐ";s:6:"ぐ";s:3:"げ";s:6:"げ";s:3:"ご";s:6:"ご";s:3:"ざ";s:6:"ざ";s:3:"じ";s:6:"じ";s:3:"ず";s:6:"ず";s:3:"ぜ";s:6:"ぜ";s:3:"ぞ";s:6:"ぞ";s:3:"だ";s:6:"だ";s:3:"ぢ";s:6:"ぢ";s:3:"づ";s:6:"づ";s:3:"で";s:6:"で";s:3:"ど";s:6:"ど";s:3:"ば";s:6:"ば";s:3:"ぱ";s:6:"ぱ";s:3:"び";s:6:"び";s:3:"ぴ";s:6:"ぴ";s:3:"ぶ";s:6:"ぶ";s:3:"ぷ";s:6:"ぷ";s:3:"べ";s:6:"べ";s:3:"ぺ";s:6:"ぺ";s:3:"ぼ";s:6:"ぼ";s:3:"ぽ";s:6:"ぽ";s:3:"ゔ";s:6:"ゔ";s:3:"ゞ";s:6:"ゞ";s:3:"ガ";s:6:"ガ";s:3:"ギ";s:6:"ギ";s:3:"グ";s:6:"グ";s:3:"ゲ";s:6:"ゲ";s:3:"ゴ";s:6:"ゴ";s:3:"ザ";s:6:"ザ";s:3:"ジ";s:6:"ジ";s:3:"ズ";s:6:"ズ";s:3:"ゼ";s:6:"ゼ";s:3:"ゾ";s:6:"ゾ";s:3:"ダ";s:6:"ダ";s:3:"ヂ";s:6:"ヂ";s:3:"ヅ";s:6:"ヅ";s:3:"デ";s:6:"デ";s:3:"ド";s:6:"ド";s:3:"バ";s:6:"バ";s:3:"パ";s:6:"パ";s:3:"ビ";s:6:"ビ";s:3:"ピ";s:6:"ピ";s:3:"ブ";s:6:"ブ";s:3:"プ";s:6:"プ";s:3:"ベ";s:6:"ベ";s:3:"ペ";s:6:"ペ";s:3:"ボ";s:6:"ボ";s:3:"ポ";s:6:"ポ";s:3:"ヴ";s:6:"ヴ";s:3:"ヷ";s:6:"ヷ";s:3:"ヸ";s:6:"ヸ";s:3:"ヹ";s:6:"ヹ";s:3:"ヺ";s:6:"ヺ";s:3:"ヾ";s:6:"ヾ";s:3:"豈";s:3:"豈";s:3:"更";s:3:"更";s:3:"車";s:3:"車";s:3:"賈";s:3:"賈";s:3:"滑";s:3:"滑";s:3:"串";s:3:"串";s:3:"句";s:3:"句";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"契";s:3:"契";s:3:"金";s:3:"金";s:3:"喇";s:3:"喇";s:3:"奈";s:3:"奈";s:3:"懶";s:3:"懶";s:3:"癩";s:3:"癩";s:3:"羅";s:3:"羅";s:3:"蘿";s:3:"蘿";s:3:"螺";s:3:"螺";s:3:"裸";s:3:"裸";s:3:"邏";s:3:"邏";s:3:"樂";s:3:"樂";s:3:"洛";s:3:"洛";s:3:"烙";s:3:"烙";s:3:"珞";s:3:"珞";s:3:"落";s:3:"落";s:3:"酪";s:3:"酪";s:3:"駱";s:3:"駱";s:3:"亂";s:3:"亂";s:3:"卵";s:3:"卵";s:3:"欄";s:3:"欄";s:3:"爛";s:3:"爛";s:3:"蘭";s:3:"蘭";s:3:"鸞";s:3:"鸞";s:3:"嵐";s:3:"嵐";s:3:"濫";s:3:"濫";s:3:"藍";s:3:"藍";s:3:"襤";s:3:"襤";s:3:"拉";s:3:"拉";s:3:"臘";s:3:"臘";s:3:"蠟";s:3:"蠟";s:3:"廊";s:3:"廊";s:3:"朗";s:3:"朗";s:3:"浪";s:3:"浪";s:3:"狼";s:3:"狼";s:3:"郎";s:3:"郎";s:3:"來";s:3:"來";s:3:"冷";s:3:"冷";s:3:"勞";s:3:"勞";s:3:"擄";s:3:"擄";s:3:"櫓";s:3:"櫓";s:3:"爐";s:3:"爐";s:3:"盧";s:3:"盧";s:3:"老";s:3:"老";s:3:"蘆";s:3:"蘆";s:3:"虜";s:3:"虜";s:3:"路";s:3:"路";s:3:"露";s:3:"露";s:3:"魯";s:3:"魯";s:3:"鷺";s:3:"鷺";s:3:"碌";s:3:"碌";s:3:"祿";s:3:"祿";s:3:"綠";s:3:"綠";s:3:"菉";s:3:"菉";s:3:"錄";s:3:"錄";s:3:"鹿";s:3:"鹿";s:3:"論";s:3:"論";s:3:"壟";s:3:"壟";s:3:"弄";s:3:"弄";s:3:"籠";s:3:"籠";s:3:"聾";s:3:"聾";s:3:"牢";s:3:"牢";s:3:"磊";s:3:"磊";s:3:"賂";s:3:"賂";s:3:"雷";s:3:"雷";s:3:"壘";s:3:"壘";s:3:"屢";s:3:"屢";s:3:"樓";s:3:"樓";s:3:"淚";s:3:"淚";s:3:"漏";s:3:"漏";s:3:"累";s:3:"累";s:3:"縷";s:3:"縷";s:3:"陋";s:3:"陋";s:3:"勒";s:3:"勒";s:3:"肋";s:3:"肋";s:3:"凜";s:3:"凜";s:3:"凌";s:3:"凌";s:3:"稜";s:3:"稜";s:3:"綾";s:3:"綾";s:3:"菱";s:3:"菱";s:3:"陵";s:3:"陵";s:3:"讀";s:3:"讀";s:3:"拏";s:3:"拏";s:3:"樂";s:3:"樂";s:3:"諾";s:3:"諾";s:3:"丹";s:3:"丹";s:3:"寧";s:3:"寧";s:3:"怒";s:3:"怒";s:3:"率";s:3:"率";s:3:"異";s:3:"異";s:3:"北";s:3:"北";s:3:"磻";s:3:"磻";s:3:"便";s:3:"便";s:3:"復";s:3:"復";s:3:"不";s:3:"不";s:3:"泌";s:3:"泌";s:3:"數";s:3:"數";s:3:"索";s:3:"索";s:3:"參";s:3:"參";s:3:"塞";s:3:"塞";s:3:"省";s:3:"省";s:3:"葉";s:3:"葉";s:3:"說";s:3:"說";s:3:"殺";s:3:"殺";s:3:"辰";s:3:"辰";s:3:"沈";s:3:"沈";s:3:"拾";s:3:"拾";s:3:"若";s:3:"若";s:3:"掠";s:3:"掠";s:3:"略";s:3:"略";s:3:"亮";s:3:"亮";s:3:"兩";s:3:"兩";s:3:"凉";s:3:"凉";s:3:"梁";s:3:"梁";s:3:"糧";s:3:"糧";s:3:"良";s:3:"良";s:3:"諒";s:3:"諒";s:3:"量";s:3:"量";s:3:"勵";s:3:"勵";s:3:"呂";s:3:"呂";s:3:"女";s:3:"女";s:3:"廬";s:3:"廬";s:3:"旅";s:3:"旅";s:3:"濾";s:3:"濾";s:3:"礪";s:3:"礪";s:3:"閭";s:3:"閭";s:3:"驪";s:3:"驪";s:3:"麗";s:3:"麗";s:3:"黎";s:3:"黎";s:3:"力";s:3:"力";s:3:"曆";s:3:"曆";s:3:"歷";s:3:"歷";s:3:"轢";s:3:"轢";s:3:"年";s:3:"年";s:3:"憐";s:3:"憐";s:3:"戀";s:3:"戀";s:3:"撚";s:3:"撚";s:3:"漣";s:3:"漣";s:3:"煉";s:3:"煉";s:3:"璉";s:3:"璉";s:3:"秊";s:3:"秊";s:3:"練";s:3:"練";s:3:"聯";s:3:"聯";s:3:"輦";s:3:"輦";s:3:"蓮";s:3:"蓮";s:3:"連";s:3:"連";s:3:"鍊";s:3:"鍊";s:3:"列";s:3:"列";s:3:"劣";s:3:"劣";s:3:"咽";s:3:"咽";s:3:"烈";s:3:"烈";s:3:"裂";s:3:"裂";s:3:"說";s:3:"說";s:3:"廉";s:3:"廉";s:3:"念";s:3:"念";s:3:"捻";s:3:"捻";s:3:"殮";s:3:"殮";s:3:"簾";s:3:"簾";s:3:"獵";s:3:"獵";s:3:"令";s:3:"令";s:3:"囹";s:3:"囹";s:3:"寧";s:3:"寧";s:3:"嶺";s:3:"嶺";s:3:"怜";s:3:"怜";s:3:"玲";s:3:"玲";s:3:"瑩";s:3:"瑩";s:3:"羚";s:3:"羚";s:3:"聆";s:3:"聆";s:3:"鈴";s:3:"鈴";s:3:"零";s:3:"零";s:3:"靈";s:3:"靈";s:3:"領";s:3:"領";s:3:"例";s:3:"例";s:3:"禮";s:3:"禮";s:3:"醴";s:3:"醴";s:3:"隸";s:3:"隸";s:3:"惡";s:3:"惡";s:3:"了";s:3:"了";s:3:"僚";s:3:"僚";s:3:"寮";s:3:"寮";s:3:"尿";s:3:"尿";s:3:"料";s:3:"料";s:3:"樂";s:3:"樂";s:3:"燎";s:3:"燎";s:3:"療";s:3:"療";s:3:"蓼";s:3:"蓼";s:3:"遼";s:3:"遼";s:3:"龍";s:3:"龍";s:3:"暈";s:3:"暈";s:3:"阮";s:3:"阮";s:3:"劉";s:3:"劉";s:3:"杻";s:3:"杻";s:3:"柳";s:3:"柳";s:3:"流";s:3:"流";s:3:"溜";s:3:"溜";s:3:"琉";s:3:"琉";s:3:"留";s:3:"留";s:3:"硫";s:3:"硫";s:3:"紐";s:3:"紐";s:3:"類";s:3:"類";s:3:"六";s:3:"六";s:3:"戮";s:3:"戮";s:3:"陸";s:3:"陸";s:3:"倫";s:3:"倫";s:3:"崙";s:3:"崙";s:3:"淪";s:3:"淪";s:3:"輪";s:3:"輪";s:3:"律";s:3:"律";s:3:"慄";s:3:"慄";s:3:"栗";s:3:"栗";s:3:"率";s:3:"率";s:3:"隆";s:3:"隆";s:3:"利";s:3:"利";s:3:"吏";s:3:"吏";s:3:"履";s:3:"履";s:3:"易";s:3:"易";s:3:"李";s:3:"李";s:3:"梨";s:3:"梨";s:3:"泥";s:3:"泥";s:3:"理";s:3:"理";s:3:"痢";s:3:"痢";s:3:"罹";s:3:"罹";s:3:"裏";s:3:"裏";s:3:"裡";s:3:"裡";s:3:"里";s:3:"里";s:3:"離";s:3:"離";s:3:"匿";s:3:"匿";s:3:"溺";s:3:"溺";s:3:"吝";s:3:"吝";s:3:"燐";s:3:"燐";s:3:"璘";s:3:"璘";s:3:"藺";s:3:"藺";s:3:"隣";s:3:"隣";s:3:"鱗";s:3:"鱗";s:3:"麟";s:3:"麟";s:3:"林";s:3:"林";s:3:"淋";s:3:"淋";s:3:"臨";s:3:"臨";s:3:"立";s:3:"立";s:3:"笠";s:3:"笠";s:3:"粒";s:3:"粒";s:3:"狀";s:3:"狀";s:3:"炙";s:3:"炙";s:3:"識";s:3:"識";s:3:"什";s:3:"什";s:3:"茶";s:3:"茶";s:3:"刺";s:3:"刺";s:3:"切";s:3:"切";s:3:"度";s:3:"度";s:3:"拓";s:3:"拓";s:3:"糖";s:3:"糖";s:3:"宅";s:3:"宅";s:3:"洞";s:3:"洞";s:3:"暴";s:3:"暴";s:3:"輻";s:3:"輻";s:3:"行";s:3:"行";s:3:"降";s:3:"降";s:3:"見";s:3:"見";s:3:"廓";s:3:"廓";s:3:"兀";s:3:"兀";s:3:"嗀";s:3:"嗀";s:3:"塚";s:3:"塚";s:3:"晴";s:3:"晴";s:3:"凞";s:3:"凞";s:3:"猪";s:3:"猪";s:3:"益";s:3:"益";s:3:"礼";s:3:"礼";s:3:"神";s:3:"神";s:3:"祥";s:3:"祥";s:3:"福";s:3:"福";s:3:"靖";s:3:"靖";s:3:"精";s:3:"精";s:3:"羽";s:3:"羽";s:3:"蘒";s:3:"蘒";s:3:"諸";s:3:"諸";s:3:"逸";s:3:"逸";s:3:"都";s:3:"都";s:3:"飯";s:3:"飯";s:3:"飼";s:3:"飼";s:3:"館";s:3:"館";s:3:"鶴";s:3:"鶴";s:3:"侮";s:3:"侮";s:3:"僧";s:3:"僧";s:3:"免";s:3:"免";s:3:"勉";s:3:"勉";s:3:"勤";s:3:"勤";s:3:"卑";s:3:"卑";s:3:"喝";s:3:"喝";s:3:"嘆";s:3:"嘆";s:3:"器";s:3:"器";s:3:"塀";s:3:"塀";s:3:"墨";s:3:"墨";s:3:"層";s:3:"層";s:3:"屮";s:3:"屮";s:3:"悔";s:3:"悔";s:3:"慨";s:3:"慨";s:3:"憎";s:3:"憎";s:3:"懲";s:3:"懲";s:3:"敏";s:3:"敏";s:3:"既";s:3:"既";s:3:"暑";s:3:"暑";s:3:"梅";s:3:"梅";s:3:"海";s:3:"海";s:3:"渚";s:3:"渚";s:3:"漢";s:3:"漢";s:3:"煮";s:3:"煮";s:3:"爫";s:3:"爫";s:3:"琢";s:3:"琢";s:3:"碑";s:3:"碑";s:3:"社";s:3:"社";s:3:"祉";s:3:"祉";s:3:"祈";s:3:"祈";s:3:"祐";s:3:"祐";s:3:"祖";s:3:"祖";s:3:"祝";s:3:"祝";s:3:"禍";s:3:"禍";s:3:"禎";s:3:"禎";s:3:"穀";s:3:"穀";s:3:"突";s:3:"突";s:3:"節";s:3:"節";s:3:"練";s:3:"練";s:3:"縉";s:3:"縉";s:3:"繁";s:3:"繁";s:3:"署";s:3:"署";s:3:"者";s:3:"者";s:3:"臭";s:3:"臭";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"著";s:3:"著";s:3:"褐";s:3:"褐";s:3:"視";s:3:"視";s:3:"謁";s:3:"謁";s:3:"謹";s:3:"謹";s:3:"賓";s:3:"賓";s:3:"贈";s:3:"贈";s:3:"辶";s:3:"辶";s:3:"逸";s:3:"逸";s:3:"難";s:3:"難";s:3:"響";s:3:"響";s:3:"頻";s:3:"頻";s:3:"並";s:3:"並";s:3:"况";s:3:"况";s:3:"全";s:3:"全";s:3:"侀";s:3:"侀";s:3:"充";s:3:"充";s:3:"冀";s:3:"冀";s:3:"勇";s:3:"勇";s:3:"勺";s:3:"勺";s:3:"喝";s:3:"喝";s:3:"啕";s:3:"啕";s:3:"喙";s:3:"喙";s:3:"嗢";s:3:"嗢";s:3:"塚";s:3:"塚";s:3:"墳";s:3:"墳";s:3:"奄";s:3:"奄";s:3:"奔";s:3:"奔";s:3:"婢";s:3:"婢";s:3:"嬨";s:3:"嬨";s:3:"廒";s:3:"廒";s:3:"廙";s:3:"廙";s:3:"彩";s:3:"彩";s:3:"徭";s:3:"徭";s:3:"惘";s:3:"惘";s:3:"慎";s:3:"慎";s:3:"愈";s:3:"愈";s:3:"憎";s:3:"憎";s:3:"慠";s:3:"慠";s:3:"懲";s:3:"懲";s:3:"戴";s:3:"戴";s:3:"揄";s:3:"揄";s:3:"搜";s:3:"搜";s:3:"摒";s:3:"摒";s:3:"敖";s:3:"敖";s:3:"晴";s:3:"晴";s:3:"朗";s:3:"朗";s:3:"望";s:3:"望";s:3:"杖";s:3:"杖";s:3:"歹";s:3:"歹";s:3:"殺";s:3:"殺";s:3:"流";s:3:"流";s:3:"滛";s:3:"滛";s:3:"滋";s:3:"滋";s:3:"漢";s:3:"漢";s:3:"瀞";s:3:"瀞";s:3:"煮";s:3:"煮";s:3:"瞧";s:3:"瞧";s:3:"爵";s:3:"爵";s:3:"犯";s:3:"犯";s:3:"猪";s:3:"猪";s:3:"瑱";s:3:"瑱";s:3:"甆";s:3:"甆";s:3:"画";s:3:"画";s:3:"瘝";s:3:"瘝";s:3:"瘟";s:3:"瘟";s:3:"益";s:3:"益";s:3:"盛";s:3:"盛";s:3:"直";s:3:"直";s:3:"睊";s:3:"睊";s:3:"着";s:3:"着";s:3:"磌";s:3:"磌";s:3:"窱";s:3:"窱";s:3:"節";s:3:"節";s:3:"类";s:3:"类";s:3:"絛";s:3:"絛";s:3:"練";s:3:"練";s:3:"缾";s:3:"缾";s:3:"者";s:3:"者";s:3:"荒";s:3:"荒";s:3:"華";s:3:"華";s:3:"蝹";s:3:"蝹";s:3:"襁";s:3:"襁";s:3:"覆";s:3:"覆";s:3:"視";s:3:"視";s:3:"調";s:3:"調";s:3:"諸";s:3:"諸";s:3:"請";s:3:"請";s:3:"謁";s:3:"謁";s:3:"諾";s:3:"諾";s:3:"諭";s:3:"諭";s:3:"謹";s:3:"謹";s:3:"變";s:3:"變";s:3:"贈";s:3:"贈";s:3:"輸";s:3:"輸";s:3:"遲";s:3:"遲";s:3:"醙";s:3:"醙";s:3:"鉶";s:3:"鉶";s:3:"陼";s:3:"陼";s:3:"難";s:3:"難";s:3:"靖";s:3:"靖";s:3:"韛";s:3:"韛";s:3:"響";s:3:"響";s:3:"頋";s:3:"頋";s:3:"頻";s:3:"頻";s:3:"鬒";s:3:"鬒";s:3:"龜";s:3:"龜";s:3:"𢡊";s:4:"𢡊";s:3:"𢡄";s:4:"𢡄";s:3:"𣏕";s:4:"𣏕";s:3:"㮝";s:3:"㮝";s:3:"䀘";s:3:"䀘";s:3:"䀹";s:3:"䀹";s:3:"𥉉";s:4:"𥉉";s:3:"𥳐";s:4:"𥳐";s:3:"𧻓";s:4:"𧻓";s:3:"齃";s:3:"齃";s:3:"龎";s:3:"龎";s:3:"יִ";s:4:"יִ";s:3:"ײַ";s:4:"ײַ";s:3:"שׁ";s:4:"שׁ";s:3:"שׂ";s:4:"שׂ";s:3:"שּׁ";s:6:"שּׁ";s:3:"שּׂ";s:6:"שּׂ";s:3:"אַ";s:4:"אַ";s:3:"אָ";s:4:"אָ";s:3:"אּ";s:4:"אּ";s:3:"בּ";s:4:"בּ";s:3:"גּ";s:4:"גּ";s:3:"דּ";s:4:"דּ";s:3:"הּ";s:4:"הּ";s:3:"וּ";s:4:"וּ";s:3:"זּ";s:4:"זּ";s:3:"טּ";s:4:"טּ";s:3:"יּ";s:4:"יּ";s:3:"ךּ";s:4:"ךּ";s:3:"כּ";s:4:"כּ";s:3:"לּ";s:4:"לּ";s:3:"מּ";s:4:"מּ";s:3:"נּ";s:4:"נּ";s:3:"סּ";s:4:"סּ";s:3:"ףּ";s:4:"ףּ";s:3:"פּ";s:4:"פּ";s:3:"צּ";s:4:"צּ";s:3:"קּ";s:4:"קּ";s:3:"רּ";s:4:"רּ";s:3:"שּ";s:4:"שּ";s:3:"תּ";s:4:"תּ";s:3:"וֹ";s:4:"וֹ";s:3:"בֿ";s:4:"בֿ";s:3:"כֿ";s:4:"כֿ";s:3:"פֿ";s:4:"פֿ";s:4:"𝅗𝅥";s:8:"𝅗𝅥";s:4:"𝅘𝅥";s:8:"𝅘𝅥";s:4:"𝅘𝅥𝅮";s:12:"𝅘𝅥𝅮";s:4:"𝅘𝅥𝅯";s:12:"𝅘𝅥𝅯";s:4:"𝅘𝅥𝅰";s:12:"𝅘𝅥𝅰";s:4:"𝅘𝅥𝅱";s:12:"𝅘𝅥𝅱";s:4:"𝅘𝅥𝅲";s:12:"𝅘𝅥𝅲";s:4:"𝆹𝅥";s:8:"𝆹𝅥";s:4:"𝆺𝅥";s:8:"𝆺𝅥";s:4:"𝆹𝅥𝅮";s:12:"𝆹𝅥𝅮";s:4:"𝆺𝅥𝅮";s:12:"𝆺𝅥𝅮";s:4:"𝆹𝅥𝅯";s:12:"𝆹𝅥𝅯";s:4:"𝆺𝅥𝅯";s:12:"𝆺𝅥𝅯";s:4:"丽";s:3:"丽";s:4:"丸";s:3:"丸";s:4:"乁";s:3:"乁";s:4:"𠄢";s:4:"𠄢";s:4:"你";s:3:"你";s:4:"侮";s:3:"侮";s:4:"侻";s:3:"侻";s:4:"倂";s:3:"倂";s:4:"偺";s:3:"偺";s:4:"備";s:3:"備";s:4:"僧";s:3:"僧";s:4:"像";s:3:"像";s:4:"㒞";s:3:"㒞";s:4:"𠘺";s:4:"𠘺";s:4:"免";s:3:"免";s:4:"兔";s:3:"兔";s:4:"兤";s:3:"兤";s:4:"具";s:3:"具";s:4:"𠔜";s:4:"𠔜";s:4:"㒹";s:3:"㒹";s:4:"內";s:3:"內";s:4:"再";s:3:"再";s:4:"𠕋";s:4:"𠕋";s:4:"冗";s:3:"冗";s:4:"冤";s:3:"冤";s:4:"仌";s:3:"仌";s:4:"冬";s:3:"冬";s:4:"况";s:3:"况";s:4:"𩇟";s:4:"𩇟";s:4:"凵";s:3:"凵";s:4:"刃";s:3:"刃";s:4:"㓟";s:3:"㓟";s:4:"刻";s:3:"刻";s:4:"剆";s:3:"剆";s:4:"割";s:3:"割";s:4:"剷";s:3:"剷";s:4:"㔕";s:3:"㔕";s:4:"勇";s:3:"勇";s:4:"勉";s:3:"勉";s:4:"勤";s:3:"勤";s:4:"勺";s:3:"勺";s:4:"包";s:3:"包";s:4:"匆";s:3:"匆";s:4:"北";s:3:"北";s:4:"卉";s:3:"卉";s:4:"卑";s:3:"卑";s:4:"博";s:3:"博";s:4:"即";s:3:"即";s:4:"卽";s:3:"卽";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"𠨬";s:4:"𠨬";s:4:"灰";s:3:"灰";s:4:"及";s:3:"及";s:4:"叟";s:3:"叟";s:4:"𠭣";s:4:"𠭣";s:4:"叫";s:3:"叫";s:4:"叱";s:3:"叱";s:4:"吆";s:3:"吆";s:4:"咞";s:3:"咞";s:4:"吸";s:3:"吸";s:4:"呈";s:3:"呈";s:4:"周";s:3:"周";s:4:"咢";s:3:"咢";s:4:"哶";s:3:"哶";s:4:"唐";s:3:"唐";s:4:"啓";s:3:"啓";s:4:"啣";s:3:"啣";s:4:"善";s:3:"善";s:4:"善";s:3:"善";s:4:"喙";s:3:"喙";s:4:"喫";s:3:"喫";s:4:"喳";s:3:"喳";s:4:"嗂";s:3:"嗂";s:4:"圖";s:3:"圖";s:4:"嘆";s:3:"嘆";s:4:"圗";s:3:"圗";s:4:"噑";s:3:"噑";s:4:"噴";s:3:"噴";s:4:"切";s:3:"切";s:4:"壮";s:3:"壮";s:4:"城";s:3:"城";s:4:"埴";s:3:"埴";s:4:"堍";s:3:"堍";s:4:"型";s:3:"型";s:4:"堲";s:3:"堲";s:4:"報";s:3:"報";s:4:"墬";s:3:"墬";s:4:"𡓤";s:4:"𡓤";s:4:"売";s:3:"売";s:4:"壷";s:3:"壷";s:4:"夆";s:3:"夆";s:4:"多";s:3:"多";s:4:"夢";s:3:"夢";s:4:"奢";s:3:"奢";s:4:"𡚨";s:4:"𡚨";s:4:"𡛪";s:4:"𡛪";s:4:"姬";s:3:"姬";s:4:"娛";s:3:"娛";s:4:"娧";s:3:"娧";s:4:"姘";s:3:"姘";s:4:"婦";s:3:"婦";s:4:"㛮";s:3:"㛮";s:4:"㛼";s:3:"㛼";s:4:"嬈";s:3:"嬈";s:4:"嬾";s:3:"嬾";s:4:"嬾";s:3:"嬾";s:4:"𡧈";s:4:"𡧈";s:4:"寃";s:3:"寃";s:4:"寘";s:3:"寘";s:4:"寧";s:3:"寧";s:4:"寳";s:3:"寳";s:4:"𡬘";s:4:"𡬘";s:4:"寿";s:3:"寿";s:4:"将";s:3:"将";s:4:"当";s:3:"当";s:4:"尢";s:3:"尢";s:4:"㞁";s:3:"㞁";s:4:"屠";s:3:"屠";s:4:"屮";s:3:"屮";s:4:"峀";s:3:"峀";s:4:"岍";s:3:"岍";s:4:"𡷤";s:4:"𡷤";s:4:"嵃";s:3:"嵃";s:4:"𡷦";s:4:"𡷦";s:4:"嵮";s:3:"嵮";s:4:"嵫";s:3:"嵫";s:4:"嵼";s:3:"嵼";s:4:"巡";s:3:"巡";s:4:"巢";s:3:"巢";s:4:"㠯";s:3:"㠯";s:4:"巽";s:3:"巽";s:4:"帨";s:3:"帨";s:4:"帽";s:3:"帽";s:4:"幩";s:3:"幩";s:4:"㡢";s:3:"㡢";s:4:"𢆃";s:4:"𢆃";s:4:"㡼";s:3:"㡼";s:4:"庰";s:3:"庰";s:4:"庳";s:3:"庳";s:4:"庶";s:3:"庶";s:4:"廊";s:3:"廊";s:4:"𪎒";s:4:"𪎒";s:4:"廾";s:3:"廾";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"舁";s:3:"舁";s:4:"弢";s:3:"弢";s:4:"弢";s:3:"弢";s:4:"㣇";s:3:"㣇";s:4:"𣊸";s:4:"𣊸";s:4:"𦇚";s:4:"𦇚";s:4:"形";s:3:"形";s:4:"彫";s:3:"彫";s:4:"㣣";s:3:"㣣";s:4:"徚";s:3:"徚";s:4:"忍";s:3:"忍";s:4:"志";s:3:"志";s:4:"忹";s:3:"忹";s:4:"悁";s:3:"悁";s:4:"㤺";s:3:"㤺";s:4:"㤜";s:3:"㤜";s:4:"悔";s:3:"悔";s:4:"𢛔";s:4:"𢛔";s:4:"惇";s:3:"惇";s:4:"慈";s:3:"慈";s:4:"慌";s:3:"慌";s:4:"慎";s:3:"慎";s:4:"慌";s:3:"慌";s:4:"慺";s:3:"慺";s:4:"憎";s:3:"憎";s:4:"憲";s:3:"憲";s:4:"憤";s:3:"憤";s:4:"憯";s:3:"憯";s:4:"懞";s:3:"懞";s:4:"懲";s:3:"懲";s:4:"懶";s:3:"懶";s:4:"成";s:3:"成";s:4:"戛";s:3:"戛";s:4:"扝";s:3:"扝";s:4:"抱";s:3:"抱";s:4:"拔";s:3:"拔";s:4:"捐";s:3:"捐";s:4:"𢬌";s:4:"𢬌";s:4:"挽";s:3:"挽";s:4:"拼";s:3:"拼";s:4:"捨";s:3:"捨";s:4:"掃";s:3:"掃";s:4:"揤";s:3:"揤";s:4:"𢯱";s:4:"𢯱";s:4:"搢";s:3:"搢";s:4:"揅";s:3:"揅";s:4:"掩";s:3:"掩";s:4:"㨮";s:3:"㨮";s:4:"摩";s:3:"摩";s:4:"摾";s:3:"摾";s:4:"撝";s:3:"撝";s:4:"摷";s:3:"摷";s:4:"㩬";s:3:"㩬";s:4:"敏";s:3:"敏";s:4:"敬";s:3:"敬";s:4:"𣀊";s:4:"𣀊";s:4:"旣";s:3:"旣";s:4:"書";s:3:"書";s:4:"晉";s:3:"晉";s:4:"㬙";s:3:"㬙";s:4:"暑";s:3:"暑";s:4:"㬈";s:3:"㬈";s:4:"㫤";s:3:"㫤";s:4:"冒";s:3:"冒";s:4:"冕";s:3:"冕";s:4:"最";s:3:"最";s:4:"暜";s:3:"暜";s:4:"肭";s:3:"肭";s:4:"䏙";s:3:"䏙";s:4:"朗";s:3:"朗";s:4:"望";s:3:"望";s:4:"朡";s:3:"朡";s:4:"杞";s:3:"杞";s:4:"杓";s:3:"杓";s:4:"𣏃";s:4:"𣏃";s:4:"㭉";s:3:"㭉";s:4:"柺";s:3:"柺";s:4:"枅";s:3:"枅";s:4:"桒";s:3:"桒";s:4:"梅";s:3:"梅";s:4:"𣑭";s:4:"𣑭";s:4:"梎";s:3:"梎";s:4:"栟";s:3:"栟";s:4:"椔";s:3:"椔";s:4:"㮝";s:3:"㮝";s:4:"楂";s:3:"楂";s:4:"榣";s:3:"榣";s:4:"槪";s:3:"槪";s:4:"檨";s:3:"檨";s:4:"𣚣";s:4:"𣚣";s:4:"櫛";s:3:"櫛";s:4:"㰘";s:3:"㰘";s:4:"次";s:3:"次";s:4:"𣢧";s:4:"𣢧";s:4:"歔";s:3:"歔";s:4:"㱎";s:3:"㱎";s:4:"歲";s:3:"歲";s:4:"殟";s:3:"殟";s:4:"殺";s:3:"殺";s:4:"殻";s:3:"殻";s:4:"𣪍";s:4:"𣪍";s:4:"𡴋";s:4:"𡴋";s:4:"𣫺";s:4:"𣫺";s:4:"汎";s:3:"汎";s:4:"𣲼";s:4:"𣲼";s:4:"沿";s:3:"沿";s:4:"泍";s:3:"泍";s:4:"汧";s:3:"汧";s:4:"洖";s:3:"洖";s:4:"派";s:3:"派";s:4:"海";s:3:"海";s:4:"流";s:3:"流";s:4:"浩";s:3:"浩";s:4:"浸";s:3:"浸";s:4:"涅";s:3:"涅";s:4:"𣴞";s:4:"𣴞";s:4:"洴";s:3:"洴";s:4:"港";s:3:"港";s:4:"湮";s:3:"湮";s:4:"㴳";s:3:"㴳";s:4:"滋";s:3:"滋";s:4:"滇";s:3:"滇";s:4:"𣻑";s:4:"𣻑";s:4:"淹";s:3:"淹";s:4:"潮";s:3:"潮";s:4:"𣽞";s:4:"𣽞";s:4:"𣾎";s:4:"𣾎";s:4:"濆";s:3:"濆";s:4:"瀹";s:3:"瀹";s:4:"瀞";s:3:"瀞";s:4:"瀛";s:3:"瀛";s:4:"㶖";s:3:"㶖";s:4:"灊";s:3:"灊";s:4:"災";s:3:"災";s:4:"灷";s:3:"灷";s:4:"炭";s:3:"炭";s:4:"𠔥";s:4:"𠔥";s:4:"煅";s:3:"煅";s:4:"𤉣";s:4:"𤉣";s:4:"熜";s:3:"熜";s:4:"𤎫";s:4:"𤎫";s:4:"爨";s:3:"爨";s:4:"爵";s:3:"爵";s:4:"牐";s:3:"牐";s:4:"𤘈";s:4:"𤘈";s:4:"犀";s:3:"犀";s:4:"犕";s:3:"犕";s:4:"𤜵";s:4:"𤜵";s:4:"𤠔";s:4:"𤠔";s:4:"獺";s:3:"獺";s:4:"王";s:3:"王";s:4:"㺬";s:3:"㺬";s:4:"玥";s:3:"玥";s:4:"㺸";s:3:"㺸";s:4:"㺸";s:3:"㺸";s:4:"瑇";s:3:"瑇";s:4:"瑜";s:3:"瑜";s:4:"瑱";s:3:"瑱";s:4:"璅";s:3:"璅";s:4:"瓊";s:3:"瓊";s:4:"㼛";s:3:"㼛";s:4:"甤";s:3:"甤";s:4:"𤰶";s:4:"𤰶";s:4:"甾";s:3:"甾";s:4:"𤲒";s:4:"𤲒";s:4:"異";s:3:"異";s:4:"𢆟";s:4:"𢆟";s:4:"瘐";s:3:"瘐";s:4:"𤾡";s:4:"𤾡";s:4:"𤾸";s:4:"𤾸";s:4:"𥁄";s:4:"𥁄";s:4:"㿼";s:3:"㿼";s:4:"䀈";s:3:"䀈";s:4:"直";s:3:"直";s:4:"𥃳";s:4:"𥃳";s:4:"𥃲";s:4:"𥃲";s:4:"𥄙";s:4:"𥄙";s:4:"𥄳";s:4:"𥄳";s:4:"眞";s:3:"眞";s:4:"真";s:3:"真";s:4:"真";s:3:"真";s:4:"睊";s:3:"睊";s:4:"䀹";s:3:"䀹";s:4:"瞋";s:3:"瞋";s:4:"䁆";s:3:"䁆";s:4:"䂖";s:3:"䂖";s:4:"𥐝";s:4:"𥐝";s:4:"硎";s:3:"硎";s:4:"碌";s:3:"碌";s:4:"磌";s:3:"磌";s:4:"䃣";s:3:"䃣";s:4:"𥘦";s:4:"𥘦";s:4:"祖";s:3:"祖";s:4:"𥚚";s:4:"𥚚";s:4:"𥛅";s:4:"𥛅";s:4:"福";s:3:"福";s:4:"秫";s:3:"秫";s:4:"䄯";s:3:"䄯";s:4:"穀";s:3:"穀";s:4:"穊";s:3:"穊";s:4:"穏";s:3:"穏";s:4:"𥥼";s:4:"𥥼";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"竮";s:3:"竮";s:4:"䈂";s:3:"䈂";s:4:"𥮫";s:4:"𥮫";s:4:"篆";s:3:"篆";s:4:"築";s:3:"築";s:4:"䈧";s:3:"䈧";s:4:"𥲀";s:4:"𥲀";s:4:"糒";s:3:"糒";s:4:"䊠";s:3:"䊠";s:4:"糨";s:3:"糨";s:4:"糣";s:3:"糣";s:4:"紀";s:3:"紀";s:4:"𥾆";s:4:"𥾆";s:4:"絣";s:3:"絣";s:4:"䌁";s:3:"䌁";s:4:"緇";s:3:"緇";s:4:"縂";s:3:"縂";s:4:"繅";s:3:"繅";s:4:"䌴";s:3:"䌴";s:4:"𦈨";s:4:"𦈨";s:4:"𦉇";s:4:"𦉇";s:4:"䍙";s:3:"䍙";s:4:"𦋙";s:4:"𦋙";s:4:"罺";s:3:"罺";s:4:"𦌾";s:4:"𦌾";s:4:"羕";s:3:"羕";s:4:"翺";s:3:"翺";s:4:"者";s:3:"者";s:4:"𦓚";s:4:"𦓚";s:4:"𦔣";s:4:"𦔣";s:4:"聠";s:3:"聠";s:4:"𦖨";s:4:"𦖨";s:4:"聰";s:3:"聰";s:4:"𣍟";s:4:"𣍟";s:4:"䏕";s:3:"䏕";s:4:"育";s:3:"育";s:4:"脃";s:3:"脃";s:4:"䐋";s:3:"䐋";s:4:"脾";s:3:"脾";s:4:"媵";s:3:"媵";s:4:"𦞧";s:4:"𦞧";s:4:"𦞵";s:4:"𦞵";s:4:"𣎓";s:4:"𣎓";s:4:"𣎜";s:4:"𣎜";s:4:"舁";s:3:"舁";s:4:"舄";s:3:"舄";s:4:"辞";s:3:"辞";s:4:"䑫";s:3:"䑫";s:4:"芑";s:3:"芑";s:4:"芋";s:3:"芋";s:4:"芝";s:3:"芝";s:4:"劳";s:3:"劳";s:4:"花";s:3:"花";s:4:"芳";s:3:"芳";s:4:"芽";s:3:"芽";s:4:"苦";s:3:"苦";s:4:"𦬼";s:4:"𦬼";s:4:"若";s:3:"若";s:4:"茝";s:3:"茝";s:4:"荣";s:3:"荣";s:4:"莭";s:3:"莭";s:4:"茣";s:3:"茣";s:4:"莽";s:3:"莽";s:4:"菧";s:3:"菧";s:4:"著";s:3:"著";s:4:"荓";s:3:"荓";s:4:"菊";s:3:"菊";s:4:"菌";s:3:"菌";s:4:"菜";s:3:"菜";s:4:"𦰶";s:4:"𦰶";s:4:"𦵫";s:4:"𦵫";s:4:"𦳕";s:4:"𦳕";s:4:"䔫";s:3:"䔫";s:4:"蓱";s:3:"蓱";s:4:"蓳";s:3:"蓳";s:4:"蔖";s:3:"蔖";s:4:"𧏊";s:4:"𧏊";s:4:"蕤";s:3:"蕤";s:4:"𦼬";s:4:"𦼬";s:4:"䕝";s:3:"䕝";s:4:"䕡";s:3:"䕡";s:4:"𦾱";s:4:"𦾱";s:4:"𧃒";s:4:"𧃒";s:4:"䕫";s:3:"䕫";s:4:"虐";s:3:"虐";s:4:"虜";s:3:"虜";s:4:"虧";s:3:"虧";s:4:"虩";s:3:"虩";s:4:"蚩";s:3:"蚩";s:4:"蚈";s:3:"蚈";s:4:"蜎";s:3:"蜎";s:4:"蛢";s:3:"蛢";s:4:"蝹";s:3:"蝹";s:4:"蜨";s:3:"蜨";s:4:"蝫";s:3:"蝫";s:4:"螆";s:3:"螆";s:4:"䗗";s:3:"䗗";s:4:"蟡";s:3:"蟡";s:4:"蠁";s:3:"蠁";s:4:"䗹";s:3:"䗹";s:4:"衠";s:3:"衠";s:4:"衣";s:3:"衣";s:4:"𧙧";s:4:"𧙧";s:4:"裗";s:3:"裗";s:4:"裞";s:3:"裞";s:4:"䘵";s:3:"䘵";s:4:"裺";s:3:"裺";s:4:"㒻";s:3:"㒻";s:4:"𧢮";s:4:"𧢮";s:4:"𧥦";s:4:"𧥦";s:4:"䚾";s:3:"䚾";s:4:"䛇";s:3:"䛇";s:4:"誠";s:3:"誠";s:4:"諭";s:3:"諭";s:4:"變";s:3:"變";s:4:"豕";s:3:"豕";s:4:"𧲨";s:4:"𧲨";s:4:"貫";s:3:"貫";s:4:"賁";s:3:"賁";s:4:"贛";s:3:"贛";s:4:"起";s:3:"起";s:4:"𧼯";s:4:"𧼯";s:4:"𠠄";s:4:"𠠄";s:4:"跋";s:3:"跋";s:4:"趼";s:3:"趼";s:4:"跰";s:3:"跰";s:4:"𠣞";s:4:"𠣞";s:4:"軔";s:3:"軔";s:4:"輸";s:3:"輸";s:4:"𨗒";s:4:"𨗒";s:4:"𨗭";s:4:"𨗭";s:4:"邔";s:3:"邔";s:4:"郱";s:3:"郱";s:4:"鄑";s:3:"鄑";s:4:"𨜮";s:4:"𨜮";s:4:"鄛";s:3:"鄛";s:4:"鈸";s:3:"鈸";s:4:"鋗";s:3:"鋗";s:4:"鋘";s:3:"鋘";s:4:"鉼";s:3:"鉼";s:4:"鏹";s:3:"鏹";s:4:"鐕";s:3:"鐕";s:4:"𨯺";s:4:"𨯺";s:4:"開";s:3:"開";s:4:"䦕";s:3:"䦕";s:4:"閷";s:3:"閷";s:4:"𨵷";s:4:"𨵷";s:4:"䧦";s:3:"䧦";s:4:"雃";s:3:"雃";s:4:"嶲";s:3:"嶲";s:4:"霣";s:3:"霣";s:4:"𩅅";s:4:"𩅅";s:4:"𩈚";s:4:"𩈚";s:4:"䩮";s:3:"䩮";s:4:"䩶";s:3:"䩶";s:4:"韠";s:3:"韠";s:4:"𩐊";s:4:"𩐊";s:4:"䪲";s:3:"䪲";s:4:"𩒖";s:4:"𩒖";s:4:"頋";s:3:"頋";s:4:"頋";s:3:"頋";s:4:"頩";s:3:"頩";s:4:"𩖶";s:4:"𩖶";s:4:"飢";s:3:"飢";s:4:"䬳";s:3:"䬳";s:4:"餩";s:3:"餩";s:4:"馧";s:3:"馧";s:4:"駂";s:3:"駂";s:4:"駾";s:3:"駾";s:4:"䯎";s:3:"䯎";s:4:"𩬰";s:4:"𩬰";s:4:"鬒";s:3:"鬒";s:4:"鱀";s:3:"鱀";s:4:"鳽";s:3:"鳽";s:4:"䳎";s:3:"䳎";s:4:"䳭";s:3:"䳭";s:4:"鵧";s:3:"鵧";s:4:"𪃎";s:4:"𪃎";s:4:"䳸";s:3:"䳸";s:4:"𪄅";s:4:"𪄅";s:4:"𪈎";s:4:"𪈎";s:4:"𪊑";s:4:"𪊑";s:4:"麻";s:3:"麻";s:4:"䵖";s:3:"䵖";s:4:"黹";s:3:"黹";s:4:"黾";s:3:"黾";s:4:"鼅";s:3:"鼅";s:4:"鼏";s:3:"鼏";s:4:"鼖";s:3:"鼖";s:4:"鼻";s:3:"鼻";s:4:"𪘀";s:4:"𪘀";}' ); +UtfNormal::$utfCheckNFC = unserialize( 'a:1217:{s:2:"̀";s:1:"N";s:2:"́";s:1:"N";s:2:"̓";s:1:"N";s:2:"̈́";s:1:"N";s:2:"ʹ";s:1:"N";s:2:";";s:1:"N";s:2:"·";s:1:"N";s:3:"क़";s:1:"N";s:3:"ख़";s:1:"N";s:3:"ग़";s:1:"N";s:3:"ज़";s:1:"N";s:3:"ड़";s:1:"N";s:3:"ढ़";s:1:"N";s:3:"फ़";s:1:"N";s:3:"य़";s:1:"N";s:3:"ড়";s:1:"N";s:3:"ঢ়";s:1:"N";s:3:"য়";s:1:"N";s:3:"ਲ਼";s:1:"N";s:3:"ਸ਼";s:1:"N";s:3:"ਖ਼";s:1:"N";s:3:"ਗ਼";s:1:"N";s:3:"ਜ਼";s:1:"N";s:3:"ਫ਼";s:1:"N";s:3:"ଡ଼";s:1:"N";s:3:"ଢ଼";s:1:"N";s:3:"གྷ";s:1:"N";s:3:"ཌྷ";s:1:"N";s:3:"དྷ";s:1:"N";s:3:"བྷ";s:1:"N";s:3:"ཛྷ";s:1:"N";s:3:"ཀྵ";s:1:"N";s:3:"ཱི";s:1:"N";s:3:"ཱུ";s:1:"N";s:3:"ྲྀ";s:1:"N";s:3:"ླྀ";s:1:"N";s:3:"ཱྀ";s:1:"N";s:3:"ྒྷ";s:1:"N";s:3:"ྜྷ";s:1:"N";s:3:"ྡྷ";s:1:"N";s:3:"ྦྷ";s:1:"N";s:3:"ྫྷ";s:1:"N";s:3:"ྐྵ";s:1:"N";s:3:"ά";s:1:"N";s:3:"έ";s:1:"N";s:3:"ή";s:1:"N";s:3:"ί";s:1:"N";s:3:"ό";s:1:"N";s:3:"ύ";s:1:"N";s:3:"ώ";s:1:"N";s:3:"Ά";s:1:"N";s:3:"ι";s:1:"N";s:3:"Έ";s:1:"N";s:3:"Ή";s:1:"N";s:3:"ΐ";s:1:"N";s:3:"Ί";s:1:"N";s:3:"ΰ";s:1:"N";s:3:"Ύ";s:1:"N";s:3:"΅";s:1:"N";s:3:"`";s:1:"N";s:3:"Ό";s:1:"N";s:3:"Ώ";s:1:"N";s:3:"´";s:1:"N";s:3:" ";s:1:"N";s:3:" ";s:1:"N";s:3:"Ω";s:1:"N";s:3:"K";s:1:"N";s:3:"Å";s:1:"N";s:3:"〈";s:1:"N";s:3:"〉";s:1:"N";s:3:"⫝̸";s:1:"N";s:3:"豈";s:1:"N";s:3:"更";s:1:"N";s:3:"車";s:1:"N";s:3:"賈";s:1:"N";s:3:"滑";s:1:"N";s:3:"串";s:1:"N";s:3:"句";s:1:"N";s:3:"龜";s:1:"N";s:3:"龜";s:1:"N";s:3:"契";s:1:"N";s:3:"金";s:1:"N";s:3:"喇";s:1:"N";s:3:"奈";s:1:"N";s:3:"懶";s:1:"N";s:3:"癩";s:1:"N";s:3:"羅";s:1:"N";s:3:"蘿";s:1:"N";s:3:"螺";s:1:"N";s:3:"裸";s:1:"N";s:3:"邏";s:1:"N";s:3:"樂";s:1:"N";s:3:"洛";s:1:"N";s:3:"烙";s:1:"N";s:3:"珞";s:1:"N";s:3:"落";s:1:"N";s:3:"酪";s:1:"N";s:3:"駱";s:1:"N";s:3:"亂";s:1:"N";s:3:"卵";s:1:"N";s:3:"欄";s:1:"N";s:3:"爛";s:1:"N";s:3:"蘭";s:1:"N";s:3:"鸞";s:1:"N";s:3:"嵐";s:1:"N";s:3:"濫";s:1:"N";s:3:"藍";s:1:"N";s:3:"襤";s:1:"N";s:3:"拉";s:1:"N";s:3:"臘";s:1:"N";s:3:"蠟";s:1:"N";s:3:"廊";s:1:"N";s:3:"朗";s:1:"N";s:3:"浪";s:1:"N";s:3:"狼";s:1:"N";s:3:"郎";s:1:"N";s:3:"來";s:1:"N";s:3:"冷";s:1:"N";s:3:"勞";s:1:"N";s:3:"擄";s:1:"N";s:3:"櫓";s:1:"N";s:3:"爐";s:1:"N";s:3:"盧";s:1:"N";s:3:"老";s:1:"N";s:3:"蘆";s:1:"N";s:3:"虜";s:1:"N";s:3:"路";s:1:"N";s:3:"露";s:1:"N";s:3:"魯";s:1:"N";s:3:"鷺";s:1:"N";s:3:"碌";s:1:"N";s:3:"祿";s:1:"N";s:3:"綠";s:1:"N";s:3:"菉";s:1:"N";s:3:"錄";s:1:"N";s:3:"鹿";s:1:"N";s:3:"論";s:1:"N";s:3:"壟";s:1:"N";s:3:"弄";s:1:"N";s:3:"籠";s:1:"N";s:3:"聾";s:1:"N";s:3:"牢";s:1:"N";s:3:"磊";s:1:"N";s:3:"賂";s:1:"N";s:3:"雷";s:1:"N";s:3:"壘";s:1:"N";s:3:"屢";s:1:"N";s:3:"樓";s:1:"N";s:3:"淚";s:1:"N";s:3:"漏";s:1:"N";s:3:"累";s:1:"N";s:3:"縷";s:1:"N";s:3:"陋";s:1:"N";s:3:"勒";s:1:"N";s:3:"肋";s:1:"N";s:3:"凜";s:1:"N";s:3:"凌";s:1:"N";s:3:"稜";s:1:"N";s:3:"綾";s:1:"N";s:3:"菱";s:1:"N";s:3:"陵";s:1:"N";s:3:"讀";s:1:"N";s:3:"拏";s:1:"N";s:3:"樂";s:1:"N";s:3:"諾";s:1:"N";s:3:"丹";s:1:"N";s:3:"寧";s:1:"N";s:3:"怒";s:1:"N";s:3:"率";s:1:"N";s:3:"異";s:1:"N";s:3:"北";s:1:"N";s:3:"磻";s:1:"N";s:3:"便";s:1:"N";s:3:"復";s:1:"N";s:3:"不";s:1:"N";s:3:"泌";s:1:"N";s:3:"數";s:1:"N";s:3:"索";s:1:"N";s:3:"參";s:1:"N";s:3:"塞";s:1:"N";s:3:"省";s:1:"N";s:3:"葉";s:1:"N";s:3:"說";s:1:"N";s:3:"殺";s:1:"N";s:3:"辰";s:1:"N";s:3:"沈";s:1:"N";s:3:"拾";s:1:"N";s:3:"若";s:1:"N";s:3:"掠";s:1:"N";s:3:"略";s:1:"N";s:3:"亮";s:1:"N";s:3:"兩";s:1:"N";s:3:"凉";s:1:"N";s:3:"梁";s:1:"N";s:3:"糧";s:1:"N";s:3:"良";s:1:"N";s:3:"諒";s:1:"N";s:3:"量";s:1:"N";s:3:"勵";s:1:"N";s:3:"呂";s:1:"N";s:3:"女";s:1:"N";s:3:"廬";s:1:"N";s:3:"旅";s:1:"N";s:3:"濾";s:1:"N";s:3:"礪";s:1:"N";s:3:"閭";s:1:"N";s:3:"驪";s:1:"N";s:3:"麗";s:1:"N";s:3:"黎";s:1:"N";s:3:"力";s:1:"N";s:3:"曆";s:1:"N";s:3:"歷";s:1:"N";s:3:"轢";s:1:"N";s:3:"年";s:1:"N";s:3:"憐";s:1:"N";s:3:"戀";s:1:"N";s:3:"撚";s:1:"N";s:3:"漣";s:1:"N";s:3:"煉";s:1:"N";s:3:"璉";s:1:"N";s:3:"秊";s:1:"N";s:3:"練";s:1:"N";s:3:"聯";s:1:"N";s:3:"輦";s:1:"N";s:3:"蓮";s:1:"N";s:3:"連";s:1:"N";s:3:"鍊";s:1:"N";s:3:"列";s:1:"N";s:3:"劣";s:1:"N";s:3:"咽";s:1:"N";s:3:"烈";s:1:"N";s:3:"裂";s:1:"N";s:3:"說";s:1:"N";s:3:"廉";s:1:"N";s:3:"念";s:1:"N";s:3:"捻";s:1:"N";s:3:"殮";s:1:"N";s:3:"簾";s:1:"N";s:3:"獵";s:1:"N";s:3:"令";s:1:"N";s:3:"囹";s:1:"N";s:3:"寧";s:1:"N";s:3:"嶺";s:1:"N";s:3:"怜";s:1:"N";s:3:"玲";s:1:"N";s:3:"瑩";s:1:"N";s:3:"羚";s:1:"N";s:3:"聆";s:1:"N";s:3:"鈴";s:1:"N";s:3:"零";s:1:"N";s:3:"靈";s:1:"N";s:3:"領";s:1:"N";s:3:"例";s:1:"N";s:3:"禮";s:1:"N";s:3:"醴";s:1:"N";s:3:"隸";s:1:"N";s:3:"惡";s:1:"N";s:3:"了";s:1:"N";s:3:"僚";s:1:"N";s:3:"寮";s:1:"N";s:3:"尿";s:1:"N";s:3:"料";s:1:"N";s:3:"樂";s:1:"N";s:3:"燎";s:1:"N";s:3:"療";s:1:"N";s:3:"蓼";s:1:"N";s:3:"遼";s:1:"N";s:3:"龍";s:1:"N";s:3:"暈";s:1:"N";s:3:"阮";s:1:"N";s:3:"劉";s:1:"N";s:3:"杻";s:1:"N";s:3:"柳";s:1:"N";s:3:"流";s:1:"N";s:3:"溜";s:1:"N";s:3:"琉";s:1:"N";s:3:"留";s:1:"N";s:3:"硫";s:1:"N";s:3:"紐";s:1:"N";s:3:"類";s:1:"N";s:3:"六";s:1:"N";s:3:"戮";s:1:"N";s:3:"陸";s:1:"N";s:3:"倫";s:1:"N";s:3:"崙";s:1:"N";s:3:"淪";s:1:"N";s:3:"輪";s:1:"N";s:3:"律";s:1:"N";s:3:"慄";s:1:"N";s:3:"栗";s:1:"N";s:3:"率";s:1:"N";s:3:"隆";s:1:"N";s:3:"利";s:1:"N";s:3:"吏";s:1:"N";s:3:"履";s:1:"N";s:3:"易";s:1:"N";s:3:"李";s:1:"N";s:3:"梨";s:1:"N";s:3:"泥";s:1:"N";s:3:"理";s:1:"N";s:3:"痢";s:1:"N";s:3:"罹";s:1:"N";s:3:"裏";s:1:"N";s:3:"裡";s:1:"N";s:3:"里";s:1:"N";s:3:"離";s:1:"N";s:3:"匿";s:1:"N";s:3:"溺";s:1:"N";s:3:"吝";s:1:"N";s:3:"燐";s:1:"N";s:3:"璘";s:1:"N";s:3:"藺";s:1:"N";s:3:"隣";s:1:"N";s:3:"鱗";s:1:"N";s:3:"麟";s:1:"N";s:3:"林";s:1:"N";s:3:"淋";s:1:"N";s:3:"臨";s:1:"N";s:3:"立";s:1:"N";s:3:"笠";s:1:"N";s:3:"粒";s:1:"N";s:3:"狀";s:1:"N";s:3:"炙";s:1:"N";s:3:"識";s:1:"N";s:3:"什";s:1:"N";s:3:"茶";s:1:"N";s:3:"刺";s:1:"N";s:3:"切";s:1:"N";s:3:"度";s:1:"N";s:3:"拓";s:1:"N";s:3:"糖";s:1:"N";s:3:"宅";s:1:"N";s:3:"洞";s:1:"N";s:3:"暴";s:1:"N";s:3:"輻";s:1:"N";s:3:"行";s:1:"N";s:3:"降";s:1:"N";s:3:"見";s:1:"N";s:3:"廓";s:1:"N";s:3:"兀";s:1:"N";s:3:"嗀";s:1:"N";s:3:"塚";s:1:"N";s:3:"晴";s:1:"N";s:3:"凞";s:1:"N";s:3:"猪";s:1:"N";s:3:"益";s:1:"N";s:3:"礼";s:1:"N";s:3:"神";s:1:"N";s:3:"祥";s:1:"N";s:3:"福";s:1:"N";s:3:"靖";s:1:"N";s:3:"精";s:1:"N";s:3:"羽";s:1:"N";s:3:"蘒";s:1:"N";s:3:"諸";s:1:"N";s:3:"逸";s:1:"N";s:3:"都";s:1:"N";s:3:"飯";s:1:"N";s:3:"飼";s:1:"N";s:3:"館";s:1:"N";s:3:"鶴";s:1:"N";s:3:"侮";s:1:"N";s:3:"僧";s:1:"N";s:3:"免";s:1:"N";s:3:"勉";s:1:"N";s:3:"勤";s:1:"N";s:3:"卑";s:1:"N";s:3:"喝";s:1:"N";s:3:"嘆";s:1:"N";s:3:"器";s:1:"N";s:3:"塀";s:1:"N";s:3:"墨";s:1:"N";s:3:"層";s:1:"N";s:3:"屮";s:1:"N";s:3:"悔";s:1:"N";s:3:"慨";s:1:"N";s:3:"憎";s:1:"N";s:3:"懲";s:1:"N";s:3:"敏";s:1:"N";s:3:"既";s:1:"N";s:3:"暑";s:1:"N";s:3:"梅";s:1:"N";s:3:"海";s:1:"N";s:3:"渚";s:1:"N";s:3:"漢";s:1:"N";s:3:"煮";s:1:"N";s:3:"爫";s:1:"N";s:3:"琢";s:1:"N";s:3:"碑";s:1:"N";s:3:"社";s:1:"N";s:3:"祉";s:1:"N";s:3:"祈";s:1:"N";s:3:"祐";s:1:"N";s:3:"祖";s:1:"N";s:3:"祝";s:1:"N";s:3:"禍";s:1:"N";s:3:"禎";s:1:"N";s:3:"穀";s:1:"N";s:3:"突";s:1:"N";s:3:"節";s:1:"N";s:3:"練";s:1:"N";s:3:"縉";s:1:"N";s:3:"繁";s:1:"N";s:3:"署";s:1:"N";s:3:"者";s:1:"N";s:3:"臭";s:1:"N";s:3:"艹";s:1:"N";s:3:"艹";s:1:"N";s:3:"著";s:1:"N";s:3:"褐";s:1:"N";s:3:"視";s:1:"N";s:3:"謁";s:1:"N";s:3:"謹";s:1:"N";s:3:"賓";s:1:"N";s:3:"贈";s:1:"N";s:3:"辶";s:1:"N";s:3:"逸";s:1:"N";s:3:"難";s:1:"N";s:3:"響";s:1:"N";s:3:"頻";s:1:"N";s:3:"並";s:1:"N";s:3:"况";s:1:"N";s:3:"全";s:1:"N";s:3:"侀";s:1:"N";s:3:"充";s:1:"N";s:3:"冀";s:1:"N";s:3:"勇";s:1:"N";s:3:"勺";s:1:"N";s:3:"喝";s:1:"N";s:3:"啕";s:1:"N";s:3:"喙";s:1:"N";s:3:"嗢";s:1:"N";s:3:"塚";s:1:"N";s:3:"墳";s:1:"N";s:3:"奄";s:1:"N";s:3:"奔";s:1:"N";s:3:"婢";s:1:"N";s:3:"嬨";s:1:"N";s:3:"廒";s:1:"N";s:3:"廙";s:1:"N";s:3:"彩";s:1:"N";s:3:"徭";s:1:"N";s:3:"惘";s:1:"N";s:3:"慎";s:1:"N";s:3:"愈";s:1:"N";s:3:"憎";s:1:"N";s:3:"慠";s:1:"N";s:3:"懲";s:1:"N";s:3:"戴";s:1:"N";s:3:"揄";s:1:"N";s:3:"搜";s:1:"N";s:3:"摒";s:1:"N";s:3:"敖";s:1:"N";s:3:"晴";s:1:"N";s:3:"朗";s:1:"N";s:3:"望";s:1:"N";s:3:"杖";s:1:"N";s:3:"歹";s:1:"N";s:3:"殺";s:1:"N";s:3:"流";s:1:"N";s:3:"滛";s:1:"N";s:3:"滋";s:1:"N";s:3:"漢";s:1:"N";s:3:"瀞";s:1:"N";s:3:"煮";s:1:"N";s:3:"瞧";s:1:"N";s:3:"爵";s:1:"N";s:3:"犯";s:1:"N";s:3:"猪";s:1:"N";s:3:"瑱";s:1:"N";s:3:"甆";s:1:"N";s:3:"画";s:1:"N";s:3:"瘝";s:1:"N";s:3:"瘟";s:1:"N";s:3:"益";s:1:"N";s:3:"盛";s:1:"N";s:3:"直";s:1:"N";s:3:"睊";s:1:"N";s:3:"着";s:1:"N";s:3:"磌";s:1:"N";s:3:"窱";s:1:"N";s:3:"節";s:1:"N";s:3:"类";s:1:"N";s:3:"絛";s:1:"N";s:3:"練";s:1:"N";s:3:"缾";s:1:"N";s:3:"者";s:1:"N";s:3:"荒";s:1:"N";s:3:"華";s:1:"N";s:3:"蝹";s:1:"N";s:3:"襁";s:1:"N";s:3:"覆";s:1:"N";s:3:"視";s:1:"N";s:3:"調";s:1:"N";s:3:"諸";s:1:"N";s:3:"請";s:1:"N";s:3:"謁";s:1:"N";s:3:"諾";s:1:"N";s:3:"諭";s:1:"N";s:3:"謹";s:1:"N";s:3:"變";s:1:"N";s:3:"贈";s:1:"N";s:3:"輸";s:1:"N";s:3:"遲";s:1:"N";s:3:"醙";s:1:"N";s:3:"鉶";s:1:"N";s:3:"陼";s:1:"N";s:3:"難";s:1:"N";s:3:"靖";s:1:"N";s:3:"韛";s:1:"N";s:3:"響";s:1:"N";s:3:"頋";s:1:"N";s:3:"頻";s:1:"N";s:3:"鬒";s:1:"N";s:3:"龜";s:1:"N";s:3:"𢡊";s:1:"N";s:3:"𢡄";s:1:"N";s:3:"𣏕";s:1:"N";s:3:"㮝";s:1:"N";s:3:"䀘";s:1:"N";s:3:"䀹";s:1:"N";s:3:"𥉉";s:1:"N";s:3:"𥳐";s:1:"N";s:3:"𧻓";s:1:"N";s:3:"齃";s:1:"N";s:3:"龎";s:1:"N";s:3:"יִ";s:1:"N";s:3:"ײַ";s:1:"N";s:3:"שׁ";s:1:"N";s:3:"שׂ";s:1:"N";s:3:"שּׁ";s:1:"N";s:3:"שּׂ";s:1:"N";s:3:"אַ";s:1:"N";s:3:"אָ";s:1:"N";s:3:"אּ";s:1:"N";s:3:"בּ";s:1:"N";s:3:"גּ";s:1:"N";s:3:"דּ";s:1:"N";s:3:"הּ";s:1:"N";s:3:"וּ";s:1:"N";s:3:"זּ";s:1:"N";s:3:"טּ";s:1:"N";s:3:"יּ";s:1:"N";s:3:"ךּ";s:1:"N";s:3:"כּ";s:1:"N";s:3:"לּ";s:1:"N";s:3:"מּ";s:1:"N";s:3:"נּ";s:1:"N";s:3:"סּ";s:1:"N";s:3:"ףּ";s:1:"N";s:3:"פּ";s:1:"N";s:3:"צּ";s:1:"N";s:3:"קּ";s:1:"N";s:3:"רּ";s:1:"N";s:3:"שּ";s:1:"N";s:3:"תּ";s:1:"N";s:3:"וֹ";s:1:"N";s:3:"בֿ";s:1:"N";s:3:"כֿ";s:1:"N";s:3:"פֿ";s:1:"N";s:4:"𝅗𝅥";s:1:"N";s:4:"𝅘𝅥";s:1:"N";s:4:"𝅘𝅥𝅮";s:1:"N";s:4:"𝅘𝅥𝅯";s:1:"N";s:4:"𝅘𝅥𝅰";s:1:"N";s:4:"𝅘𝅥𝅱";s:1:"N";s:4:"𝅘𝅥𝅲";s:1:"N";s:4:"𝆹𝅥";s:1:"N";s:4:"𝆺𝅥";s:1:"N";s:4:"𝆹𝅥𝅮";s:1:"N";s:4:"𝆺𝅥𝅮";s:1:"N";s:4:"𝆹𝅥𝅯";s:1:"N";s:4:"𝆺𝅥𝅯";s:1:"N";s:4:"丽";s:1:"N";s:4:"丸";s:1:"N";s:4:"乁";s:1:"N";s:4:"𠄢";s:1:"N";s:4:"你";s:1:"N";s:4:"侮";s:1:"N";s:4:"侻";s:1:"N";s:4:"倂";s:1:"N";s:4:"偺";s:1:"N";s:4:"備";s:1:"N";s:4:"僧";s:1:"N";s:4:"像";s:1:"N";s:4:"㒞";s:1:"N";s:4:"𠘺";s:1:"N";s:4:"免";s:1:"N";s:4:"兔";s:1:"N";s:4:"兤";s:1:"N";s:4:"具";s:1:"N";s:4:"𠔜";s:1:"N";s:4:"㒹";s:1:"N";s:4:"內";s:1:"N";s:4:"再";s:1:"N";s:4:"𠕋";s:1:"N";s:4:"冗";s:1:"N";s:4:"冤";s:1:"N";s:4:"仌";s:1:"N";s:4:"冬";s:1:"N";s:4:"况";s:1:"N";s:4:"𩇟";s:1:"N";s:4:"凵";s:1:"N";s:4:"刃";s:1:"N";s:4:"㓟";s:1:"N";s:4:"刻";s:1:"N";s:4:"剆";s:1:"N";s:4:"割";s:1:"N";s:4:"剷";s:1:"N";s:4:"㔕";s:1:"N";s:4:"勇";s:1:"N";s:4:"勉";s:1:"N";s:4:"勤";s:1:"N";s:4:"勺";s:1:"N";s:4:"包";s:1:"N";s:4:"匆";s:1:"N";s:4:"北";s:1:"N";s:4:"卉";s:1:"N";s:4:"卑";s:1:"N";s:4:"博";s:1:"N";s:4:"即";s:1:"N";s:4:"卽";s:1:"N";s:4:"卿";s:1:"N";s:4:"卿";s:1:"N";s:4:"卿";s:1:"N";s:4:"𠨬";s:1:"N";s:4:"灰";s:1:"N";s:4:"及";s:1:"N";s:4:"叟";s:1:"N";s:4:"𠭣";s:1:"N";s:4:"叫";s:1:"N";s:4:"叱";s:1:"N";s:4:"吆";s:1:"N";s:4:"咞";s:1:"N";s:4:"吸";s:1:"N";s:4:"呈";s:1:"N";s:4:"周";s:1:"N";s:4:"咢";s:1:"N";s:4:"哶";s:1:"N";s:4:"唐";s:1:"N";s:4:"啓";s:1:"N";s:4:"啣";s:1:"N";s:4:"善";s:1:"N";s:4:"善";s:1:"N";s:4:"喙";s:1:"N";s:4:"喫";s:1:"N";s:4:"喳";s:1:"N";s:4:"嗂";s:1:"N";s:4:"圖";s:1:"N";s:4:"嘆";s:1:"N";s:4:"圗";s:1:"N";s:4:"噑";s:1:"N";s:4:"噴";s:1:"N";s:4:"切";s:1:"N";s:4:"壮";s:1:"N";s:4:"城";s:1:"N";s:4:"埴";s:1:"N";s:4:"堍";s:1:"N";s:4:"型";s:1:"N";s:4:"堲";s:1:"N";s:4:"報";s:1:"N";s:4:"墬";s:1:"N";s:4:"𡓤";s:1:"N";s:4:"売";s:1:"N";s:4:"壷";s:1:"N";s:4:"夆";s:1:"N";s:4:"多";s:1:"N";s:4:"夢";s:1:"N";s:4:"奢";s:1:"N";s:4:"𡚨";s:1:"N";s:4:"𡛪";s:1:"N";s:4:"姬";s:1:"N";s:4:"娛";s:1:"N";s:4:"娧";s:1:"N";s:4:"姘";s:1:"N";s:4:"婦";s:1:"N";s:4:"㛮";s:1:"N";s:4:"㛼";s:1:"N";s:4:"嬈";s:1:"N";s:4:"嬾";s:1:"N";s:4:"嬾";s:1:"N";s:4:"𡧈";s:1:"N";s:4:"寃";s:1:"N";s:4:"寘";s:1:"N";s:4:"寧";s:1:"N";s:4:"寳";s:1:"N";s:4:"𡬘";s:1:"N";s:4:"寿";s:1:"N";s:4:"将";s:1:"N";s:4:"当";s:1:"N";s:4:"尢";s:1:"N";s:4:"㞁";s:1:"N";s:4:"屠";s:1:"N";s:4:"屮";s:1:"N";s:4:"峀";s:1:"N";s:4:"岍";s:1:"N";s:4:"𡷤";s:1:"N";s:4:"嵃";s:1:"N";s:4:"𡷦";s:1:"N";s:4:"嵮";s:1:"N";s:4:"嵫";s:1:"N";s:4:"嵼";s:1:"N";s:4:"巡";s:1:"N";s:4:"巢";s:1:"N";s:4:"㠯";s:1:"N";s:4:"巽";s:1:"N";s:4:"帨";s:1:"N";s:4:"帽";s:1:"N";s:4:"幩";s:1:"N";s:4:"㡢";s:1:"N";s:4:"𢆃";s:1:"N";s:4:"㡼";s:1:"N";s:4:"庰";s:1:"N";s:4:"庳";s:1:"N";s:4:"庶";s:1:"N";s:4:"廊";s:1:"N";s:4:"𪎒";s:1:"N";s:4:"廾";s:1:"N";s:4:"𢌱";s:1:"N";s:4:"𢌱";s:1:"N";s:4:"舁";s:1:"N";s:4:"弢";s:1:"N";s:4:"弢";s:1:"N";s:4:"㣇";s:1:"N";s:4:"𣊸";s:1:"N";s:4:"𦇚";s:1:"N";s:4:"形";s:1:"N";s:4:"彫";s:1:"N";s:4:"㣣";s:1:"N";s:4:"徚";s:1:"N";s:4:"忍";s:1:"N";s:4:"志";s:1:"N";s:4:"忹";s:1:"N";s:4:"悁";s:1:"N";s:4:"㤺";s:1:"N";s:4:"㤜";s:1:"N";s:4:"悔";s:1:"N";s:4:"𢛔";s:1:"N";s:4:"惇";s:1:"N";s:4:"慈";s:1:"N";s:4:"慌";s:1:"N";s:4:"慎";s:1:"N";s:4:"慌";s:1:"N";s:4:"慺";s:1:"N";s:4:"憎";s:1:"N";s:4:"憲";s:1:"N";s:4:"憤";s:1:"N";s:4:"憯";s:1:"N";s:4:"懞";s:1:"N";s:4:"懲";s:1:"N";s:4:"懶";s:1:"N";s:4:"成";s:1:"N";s:4:"戛";s:1:"N";s:4:"扝";s:1:"N";s:4:"抱";s:1:"N";s:4:"拔";s:1:"N";s:4:"捐";s:1:"N";s:4:"𢬌";s:1:"N";s:4:"挽";s:1:"N";s:4:"拼";s:1:"N";s:4:"捨";s:1:"N";s:4:"掃";s:1:"N";s:4:"揤";s:1:"N";s:4:"𢯱";s:1:"N";s:4:"搢";s:1:"N";s:4:"揅";s:1:"N";s:4:"掩";s:1:"N";s:4:"㨮";s:1:"N";s:4:"摩";s:1:"N";s:4:"摾";s:1:"N";s:4:"撝";s:1:"N";s:4:"摷";s:1:"N";s:4:"㩬";s:1:"N";s:4:"敏";s:1:"N";s:4:"敬";s:1:"N";s:4:"𣀊";s:1:"N";s:4:"旣";s:1:"N";s:4:"書";s:1:"N";s:4:"晉";s:1:"N";s:4:"㬙";s:1:"N";s:4:"暑";s:1:"N";s:4:"㬈";s:1:"N";s:4:"㫤";s:1:"N";s:4:"冒";s:1:"N";s:4:"冕";s:1:"N";s:4:"最";s:1:"N";s:4:"暜";s:1:"N";s:4:"肭";s:1:"N";s:4:"䏙";s:1:"N";s:4:"朗";s:1:"N";s:4:"望";s:1:"N";s:4:"朡";s:1:"N";s:4:"杞";s:1:"N";s:4:"杓";s:1:"N";s:4:"𣏃";s:1:"N";s:4:"㭉";s:1:"N";s:4:"柺";s:1:"N";s:4:"枅";s:1:"N";s:4:"桒";s:1:"N";s:4:"梅";s:1:"N";s:4:"𣑭";s:1:"N";s:4:"梎";s:1:"N";s:4:"栟";s:1:"N";s:4:"椔";s:1:"N";s:4:"㮝";s:1:"N";s:4:"楂";s:1:"N";s:4:"榣";s:1:"N";s:4:"槪";s:1:"N";s:4:"檨";s:1:"N";s:4:"𣚣";s:1:"N";s:4:"櫛";s:1:"N";s:4:"㰘";s:1:"N";s:4:"次";s:1:"N";s:4:"𣢧";s:1:"N";s:4:"歔";s:1:"N";s:4:"㱎";s:1:"N";s:4:"歲";s:1:"N";s:4:"殟";s:1:"N";s:4:"殺";s:1:"N";s:4:"殻";s:1:"N";s:4:"𣪍";s:1:"N";s:4:"𡴋";s:1:"N";s:4:"𣫺";s:1:"N";s:4:"汎";s:1:"N";s:4:"𣲼";s:1:"N";s:4:"沿";s:1:"N";s:4:"泍";s:1:"N";s:4:"汧";s:1:"N";s:4:"洖";s:1:"N";s:4:"派";s:1:"N";s:4:"海";s:1:"N";s:4:"流";s:1:"N";s:4:"浩";s:1:"N";s:4:"浸";s:1:"N";s:4:"涅";s:1:"N";s:4:"𣴞";s:1:"N";s:4:"洴";s:1:"N";s:4:"港";s:1:"N";s:4:"湮";s:1:"N";s:4:"㴳";s:1:"N";s:4:"滋";s:1:"N";s:4:"滇";s:1:"N";s:4:"𣻑";s:1:"N";s:4:"淹";s:1:"N";s:4:"潮";s:1:"N";s:4:"𣽞";s:1:"N";s:4:"𣾎";s:1:"N";s:4:"濆";s:1:"N";s:4:"瀹";s:1:"N";s:4:"瀞";s:1:"N";s:4:"瀛";s:1:"N";s:4:"㶖";s:1:"N";s:4:"灊";s:1:"N";s:4:"災";s:1:"N";s:4:"灷";s:1:"N";s:4:"炭";s:1:"N";s:4:"𠔥";s:1:"N";s:4:"煅";s:1:"N";s:4:"𤉣";s:1:"N";s:4:"熜";s:1:"N";s:4:"𤎫";s:1:"N";s:4:"爨";s:1:"N";s:4:"爵";s:1:"N";s:4:"牐";s:1:"N";s:4:"𤘈";s:1:"N";s:4:"犀";s:1:"N";s:4:"犕";s:1:"N";s:4:"𤜵";s:1:"N";s:4:"𤠔";s:1:"N";s:4:"獺";s:1:"N";s:4:"王";s:1:"N";s:4:"㺬";s:1:"N";s:4:"玥";s:1:"N";s:4:"㺸";s:1:"N";s:4:"㺸";s:1:"N";s:4:"瑇";s:1:"N";s:4:"瑜";s:1:"N";s:4:"瑱";s:1:"N";s:4:"璅";s:1:"N";s:4:"瓊";s:1:"N";s:4:"㼛";s:1:"N";s:4:"甤";s:1:"N";s:4:"𤰶";s:1:"N";s:4:"甾";s:1:"N";s:4:"𤲒";s:1:"N";s:4:"異";s:1:"N";s:4:"𢆟";s:1:"N";s:4:"瘐";s:1:"N";s:4:"𤾡";s:1:"N";s:4:"𤾸";s:1:"N";s:4:"𥁄";s:1:"N";s:4:"㿼";s:1:"N";s:4:"䀈";s:1:"N";s:4:"直";s:1:"N";s:4:"𥃳";s:1:"N";s:4:"𥃲";s:1:"N";s:4:"𥄙";s:1:"N";s:4:"𥄳";s:1:"N";s:4:"眞";s:1:"N";s:4:"真";s:1:"N";s:4:"真";s:1:"N";s:4:"睊";s:1:"N";s:4:"䀹";s:1:"N";s:4:"瞋";s:1:"N";s:4:"䁆";s:1:"N";s:4:"䂖";s:1:"N";s:4:"𥐝";s:1:"N";s:4:"硎";s:1:"N";s:4:"碌";s:1:"N";s:4:"磌";s:1:"N";s:4:"䃣";s:1:"N";s:4:"𥘦";s:1:"N";s:4:"祖";s:1:"N";s:4:"𥚚";s:1:"N";s:4:"𥛅";s:1:"N";s:4:"福";s:1:"N";s:4:"秫";s:1:"N";s:4:"䄯";s:1:"N";s:4:"穀";s:1:"N";s:4:"穊";s:1:"N";s:4:"穏";s:1:"N";s:4:"𥥼";s:1:"N";s:4:"𥪧";s:1:"N";s:4:"𥪧";s:1:"N";s:4:"竮";s:1:"N";s:4:"䈂";s:1:"N";s:4:"𥮫";s:1:"N";s:4:"篆";s:1:"N";s:4:"築";s:1:"N";s:4:"䈧";s:1:"N";s:4:"𥲀";s:1:"N";s:4:"糒";s:1:"N";s:4:"䊠";s:1:"N";s:4:"糨";s:1:"N";s:4:"糣";s:1:"N";s:4:"紀";s:1:"N";s:4:"𥾆";s:1:"N";s:4:"絣";s:1:"N";s:4:"䌁";s:1:"N";s:4:"緇";s:1:"N";s:4:"縂";s:1:"N";s:4:"繅";s:1:"N";s:4:"䌴";s:1:"N";s:4:"𦈨";s:1:"N";s:4:"𦉇";s:1:"N";s:4:"䍙";s:1:"N";s:4:"𦋙";s:1:"N";s:4:"罺";s:1:"N";s:4:"𦌾";s:1:"N";s:4:"羕";s:1:"N";s:4:"翺";s:1:"N";s:4:"者";s:1:"N";s:4:"𦓚";s:1:"N";s:4:"𦔣";s:1:"N";s:4:"聠";s:1:"N";s:4:"𦖨";s:1:"N";s:4:"聰";s:1:"N";s:4:"𣍟";s:1:"N";s:4:"䏕";s:1:"N";s:4:"育";s:1:"N";s:4:"脃";s:1:"N";s:4:"䐋";s:1:"N";s:4:"脾";s:1:"N";s:4:"媵";s:1:"N";s:4:"𦞧";s:1:"N";s:4:"𦞵";s:1:"N";s:4:"𣎓";s:1:"N";s:4:"𣎜";s:1:"N";s:4:"舁";s:1:"N";s:4:"舄";s:1:"N";s:4:"辞";s:1:"N";s:4:"䑫";s:1:"N";s:4:"芑";s:1:"N";s:4:"芋";s:1:"N";s:4:"芝";s:1:"N";s:4:"劳";s:1:"N";s:4:"花";s:1:"N";s:4:"芳";s:1:"N";s:4:"芽";s:1:"N";s:4:"苦";s:1:"N";s:4:"𦬼";s:1:"N";s:4:"若";s:1:"N";s:4:"茝";s:1:"N";s:4:"荣";s:1:"N";s:4:"莭";s:1:"N";s:4:"茣";s:1:"N";s:4:"莽";s:1:"N";s:4:"菧";s:1:"N";s:4:"著";s:1:"N";s:4:"荓";s:1:"N";s:4:"菊";s:1:"N";s:4:"菌";s:1:"N";s:4:"菜";s:1:"N";s:4:"𦰶";s:1:"N";s:4:"𦵫";s:1:"N";s:4:"𦳕";s:1:"N";s:4:"䔫";s:1:"N";s:4:"蓱";s:1:"N";s:4:"蓳";s:1:"N";s:4:"蔖";s:1:"N";s:4:"𧏊";s:1:"N";s:4:"蕤";s:1:"N";s:4:"𦼬";s:1:"N";s:4:"䕝";s:1:"N";s:4:"䕡";s:1:"N";s:4:"𦾱";s:1:"N";s:4:"𧃒";s:1:"N";s:4:"䕫";s:1:"N";s:4:"虐";s:1:"N";s:4:"虜";s:1:"N";s:4:"虧";s:1:"N";s:4:"虩";s:1:"N";s:4:"蚩";s:1:"N";s:4:"蚈";s:1:"N";s:4:"蜎";s:1:"N";s:4:"蛢";s:1:"N";s:4:"蝹";s:1:"N";s:4:"蜨";s:1:"N";s:4:"蝫";s:1:"N";s:4:"螆";s:1:"N";s:4:"䗗";s:1:"N";s:4:"蟡";s:1:"N";s:4:"蠁";s:1:"N";s:4:"䗹";s:1:"N";s:4:"衠";s:1:"N";s:4:"衣";s:1:"N";s:4:"𧙧";s:1:"N";s:4:"裗";s:1:"N";s:4:"裞";s:1:"N";s:4:"䘵";s:1:"N";s:4:"裺";s:1:"N";s:4:"㒻";s:1:"N";s:4:"𧢮";s:1:"N";s:4:"𧥦";s:1:"N";s:4:"䚾";s:1:"N";s:4:"䛇";s:1:"N";s:4:"誠";s:1:"N";s:4:"諭";s:1:"N";s:4:"變";s:1:"N";s:4:"豕";s:1:"N";s:4:"𧲨";s:1:"N";s:4:"貫";s:1:"N";s:4:"賁";s:1:"N";s:4:"贛";s:1:"N";s:4:"起";s:1:"N";s:4:"𧼯";s:1:"N";s:4:"𠠄";s:1:"N";s:4:"跋";s:1:"N";s:4:"趼";s:1:"N";s:4:"跰";s:1:"N";s:4:"𠣞";s:1:"N";s:4:"軔";s:1:"N";s:4:"輸";s:1:"N";s:4:"𨗒";s:1:"N";s:4:"𨗭";s:1:"N";s:4:"邔";s:1:"N";s:4:"郱";s:1:"N";s:4:"鄑";s:1:"N";s:4:"𨜮";s:1:"N";s:4:"鄛";s:1:"N";s:4:"鈸";s:1:"N";s:4:"鋗";s:1:"N";s:4:"鋘";s:1:"N";s:4:"鉼";s:1:"N";s:4:"鏹";s:1:"N";s:4:"鐕";s:1:"N";s:4:"𨯺";s:1:"N";s:4:"開";s:1:"N";s:4:"䦕";s:1:"N";s:4:"閷";s:1:"N";s:4:"𨵷";s:1:"N";s:4:"䧦";s:1:"N";s:4:"雃";s:1:"N";s:4:"嶲";s:1:"N";s:4:"霣";s:1:"N";s:4:"𩅅";s:1:"N";s:4:"𩈚";s:1:"N";s:4:"䩮";s:1:"N";s:4:"䩶";s:1:"N";s:4:"韠";s:1:"N";s:4:"𩐊";s:1:"N";s:4:"䪲";s:1:"N";s:4:"𩒖";s:1:"N";s:4:"頋";s:1:"N";s:4:"頋";s:1:"N";s:4:"頩";s:1:"N";s:4:"𩖶";s:1:"N";s:4:"飢";s:1:"N";s:4:"䬳";s:1:"N";s:4:"餩";s:1:"N";s:4:"馧";s:1:"N";s:4:"駂";s:1:"N";s:4:"駾";s:1:"N";s:4:"䯎";s:1:"N";s:4:"𩬰";s:1:"N";s:4:"鬒";s:1:"N";s:4:"鱀";s:1:"N";s:4:"鳽";s:1:"N";s:4:"䳎";s:1:"N";s:4:"䳭";s:1:"N";s:4:"鵧";s:1:"N";s:4:"𪃎";s:1:"N";s:4:"䳸";s:1:"N";s:4:"𪄅";s:1:"N";s:4:"𪈎";s:1:"N";s:4:"𪊑";s:1:"N";s:4:"麻";s:1:"N";s:4:"䵖";s:1:"N";s:4:"黹";s:1:"N";s:4:"黾";s:1:"N";s:4:"鼅";s:1:"N";s:4:"鼏";s:1:"N";s:4:"鼖";s:1:"N";s:4:"鼻";s:1:"N";s:4:"𪘀";s:1:"N";s:2:"̀";s:1:"M";s:2:"́";s:1:"M";s:2:"̂";s:1:"M";s:2:"̃";s:1:"M";s:2:"̄";s:1:"M";s:2:"̆";s:1:"M";s:2:"̇";s:1:"M";s:2:"̈";s:1:"M";s:2:"̉";s:1:"M";s:2:"̊";s:1:"M";s:2:"̋";s:1:"M";s:2:"̌";s:1:"M";s:2:"̏";s:1:"M";s:2:"̑";s:1:"M";s:2:"̓";s:1:"M";s:2:"̔";s:1:"M";s:2:"̛";s:1:"M";s:2:"̣";s:1:"M";s:2:"̤";s:1:"M";s:2:"̥";s:1:"M";s:2:"̦";s:1:"M";s:2:"̧";s:1:"M";s:2:"̨";s:1:"M";s:2:"̭";s:1:"M";s:2:"̮";s:1:"M";s:2:"̰";s:1:"M";s:2:"̱";s:1:"M";s:2:"̸";s:1:"M";s:2:"͂";s:1:"M";s:2:"ͅ";s:1:"M";s:2:"ٓ";s:1:"M";s:2:"ٔ";s:1:"M";s:2:"ٕ";s:1:"M";s:3:"़";s:1:"M";s:3:"া";s:1:"M";s:3:"ৗ";s:1:"M";s:3:"ା";s:1:"M";s:3:"ୖ";s:1:"M";s:3:"ୗ";s:1:"M";s:3:"ா";s:1:"M";s:3:"ௗ";s:1:"M";s:3:"ౖ";s:1:"M";s:3:"ೂ";s:1:"M";s:3:"ೕ";s:1:"M";s:3:"ೖ";s:1:"M";s:3:"ാ";s:1:"M";s:3:"ൗ";s:1:"M";s:3:"්";s:1:"M";s:3:"ා";s:1:"M";s:3:"ෟ";s:1:"M";s:3:"ီ";s:1:"M";s:3:"ᅡ";s:1:"M";s:3:"ᅢ";s:1:"M";s:3:"ᅣ";s:1:"M";s:3:"ᅤ";s:1:"M";s:3:"ᅥ";s:1:"M";s:3:"ᅦ";s:1:"M";s:3:"ᅧ";s:1:"M";s:3:"ᅨ";s:1:"M";s:3:"ᅩ";s:1:"M";s:3:"ᅪ";s:1:"M";s:3:"ᅫ";s:1:"M";s:3:"ᅬ";s:1:"M";s:3:"ᅭ";s:1:"M";s:3:"ᅮ";s:1:"M";s:3:"ᅯ";s:1:"M";s:3:"ᅰ";s:1:"M";s:3:"ᅱ";s:1:"M";s:3:"ᅲ";s:1:"M";s:3:"ᅳ";s:1:"M";s:3:"ᅴ";s:1:"M";s:3:"ᅵ";s:1:"M";s:3:"ᆨ";s:1:"M";s:3:"ᆩ";s:1:"M";s:3:"ᆪ";s:1:"M";s:3:"ᆫ";s:1:"M";s:3:"ᆬ";s:1:"M";s:3:"ᆭ";s:1:"M";s:3:"ᆮ";s:1:"M";s:3:"ᆯ";s:1:"M";s:3:"ᆰ";s:1:"M";s:3:"ᆱ";s:1:"M";s:3:"ᆲ";s:1:"M";s:3:"ᆳ";s:1:"M";s:3:"ᆴ";s:1:"M";s:3:"ᆵ";s:1:"M";s:3:"ᆶ";s:1:"M";s:3:"ᆷ";s:1:"M";s:3:"ᆸ";s:1:"M";s:3:"ᆹ";s:1:"M";s:3:"ᆺ";s:1:"M";s:3:"ᆻ";s:1:"M";s:3:"ᆼ";s:1:"M";s:3:"ᆽ";s:1:"M";s:3:"ᆾ";s:1:"M";s:3:"ᆿ";s:1:"M";s:3:"ᇀ";s:1:"M";s:3:"ᇁ";s:1:"M";s:3:"ᇂ";s:1:"M";s:3:"ᬵ";s:1:"M";s:3:"゙";s:1:"M";s:3:"゚";s:1:"M";}' ); diff --git a/includes/normal/UtfNormalDataK.inc b/includes/normal/UtfNormalDataK.inc index ad1b4bf2..9d30f282 100644 --- a/includes/normal/UtfNormalDataK.inc +++ b/includes/normal/UtfNormalDataK.inc @@ -2,8 +2,9 @@ /** * This file was automatically generated -- do not edit! * Run UtfNormalGenerate.php to create this file again (make clean && make) + * + * @file */ -/** */ -global $utfCompatibilityDecomp; -$utfCompatibilityDecomp = unserialize( 'a:5516:{s:2:" ";s:1:" ";s:2:"¨";s:3:" ̈";s:2:"ª";s:1:"a";s:2:"¯";s:3:" ̄";s:2:"²";s:1:"2";s:2:"³";s:1:"3";s:2:"´";s:3:" ́";s:2:"µ";s:2:"μ";s:2:"¸";s:3:" ̧";s:2:"¹";s:1:"1";s:2:"º";s:1:"o";s:2:"¼";s:5:"1⁄4";s:2:"½";s:5:"1⁄2";s:2:"¾";s:5:"3⁄4";s:2:"À";s:3:"À";s:2:"Á";s:3:"Á";s:2:"Â";s:3:"Â";s:2:"Ã";s:3:"Ã";s:2:"Ä";s:3:"Ä";s:2:"Å";s:3:"Å";s:2:"Ç";s:3:"Ç";s:2:"È";s:3:"È";s:2:"É";s:3:"É";s:2:"Ê";s:3:"Ê";s:2:"Ë";s:3:"Ë";s:2:"Ì";s:3:"Ì";s:2:"Í";s:3:"Í";s:2:"Î";s:3:"Î";s:2:"Ï";s:3:"Ï";s:2:"Ñ";s:3:"Ñ";s:2:"Ò";s:3:"Ò";s:2:"Ó";s:3:"Ó";s:2:"Ô";s:3:"Ô";s:2:"Õ";s:3:"Õ";s:2:"Ö";s:3:"Ö";s:2:"Ù";s:3:"Ù";s:2:"Ú";s:3:"Ú";s:2:"Û";s:3:"Û";s:2:"Ü";s:3:"Ü";s:2:"Ý";s:3:"Ý";s:2:"à";s:3:"à";s:2:"á";s:3:"á";s:2:"â";s:3:"â";s:2:"ã";s:3:"ã";s:2:"ä";s:3:"ä";s:2:"å";s:3:"å";s:2:"ç";s:3:"ç";s:2:"è";s:3:"è";s:2:"é";s:3:"é";s:2:"ê";s:3:"ê";s:2:"ë";s:3:"ë";s:2:"ì";s:3:"ì";s:2:"í";s:3:"í";s:2:"î";s:3:"î";s:2:"ï";s:3:"ï";s:2:"ñ";s:3:"ñ";s:2:"ò";s:3:"ò";s:2:"ó";s:3:"ó";s:2:"ô";s:3:"ô";s:2:"õ";s:3:"õ";s:2:"ö";s:3:"ö";s:2:"ù";s:3:"ù";s:2:"ú";s:3:"ú";s:2:"û";s:3:"û";s:2:"ü";s:3:"ü";s:2:"ý";s:3:"ý";s:2:"ÿ";s:3:"ÿ";s:2:"Ā";s:3:"Ā";s:2:"ā";s:3:"ā";s:2:"Ă";s:3:"Ă";s:2:"ă";s:3:"ă";s:2:"Ą";s:3:"Ą";s:2:"ą";s:3:"ą";s:2:"Ć";s:3:"Ć";s:2:"ć";s:3:"ć";s:2:"Ĉ";s:3:"Ĉ";s:2:"ĉ";s:3:"ĉ";s:2:"Ċ";s:3:"Ċ";s:2:"ċ";s:3:"ċ";s:2:"Č";s:3:"Č";s:2:"č";s:3:"č";s:2:"Ď";s:3:"Ď";s:2:"ď";s:3:"ď";s:2:"Ē";s:3:"Ē";s:2:"ē";s:3:"ē";s:2:"Ĕ";s:3:"Ĕ";s:2:"ĕ";s:3:"ĕ";s:2:"Ė";s:3:"Ė";s:2:"ė";s:3:"ė";s:2:"Ę";s:3:"Ę";s:2:"ę";s:3:"ę";s:2:"Ě";s:3:"Ě";s:2:"ě";s:3:"ě";s:2:"Ĝ";s:3:"Ĝ";s:2:"ĝ";s:3:"ĝ";s:2:"Ğ";s:3:"Ğ";s:2:"ğ";s:3:"ğ";s:2:"Ġ";s:3:"Ġ";s:2:"ġ";s:3:"ġ";s:2:"Ģ";s:3:"Ģ";s:2:"ģ";s:3:"ģ";s:2:"Ĥ";s:3:"Ĥ";s:2:"ĥ";s:3:"ĥ";s:2:"Ĩ";s:3:"Ĩ";s:2:"ĩ";s:3:"ĩ";s:2:"Ī";s:3:"Ī";s:2:"ī";s:3:"ī";s:2:"Ĭ";s:3:"Ĭ";s:2:"ĭ";s:3:"ĭ";s:2:"Į";s:3:"Į";s:2:"į";s:3:"į";s:2:"İ";s:3:"İ";s:2:"IJ";s:2:"IJ";s:2:"ij";s:2:"ij";s:2:"Ĵ";s:3:"Ĵ";s:2:"ĵ";s:3:"ĵ";s:2:"Ķ";s:3:"Ķ";s:2:"ķ";s:3:"ķ";s:2:"Ĺ";s:3:"Ĺ";s:2:"ĺ";s:3:"ĺ";s:2:"Ļ";s:3:"Ļ";s:2:"ļ";s:3:"ļ";s:2:"Ľ";s:3:"Ľ";s:2:"ľ";s:3:"ľ";s:2:"Ŀ";s:3:"L·";s:2:"ŀ";s:3:"l·";s:2:"Ń";s:3:"Ń";s:2:"ń";s:3:"ń";s:2:"Ņ";s:3:"Ņ";s:2:"ņ";s:3:"ņ";s:2:"Ň";s:3:"Ň";s:2:"ň";s:3:"ň";s:2:"ʼn";s:3:"ʼn";s:2:"Ō";s:3:"Ō";s:2:"ō";s:3:"ō";s:2:"Ŏ";s:3:"Ŏ";s:2:"ŏ";s:3:"ŏ";s:2:"Ő";s:3:"Ő";s:2:"ő";s:3:"ő";s:2:"Ŕ";s:3:"Ŕ";s:2:"ŕ";s:3:"ŕ";s:2:"Ŗ";s:3:"Ŗ";s:2:"ŗ";s:3:"ŗ";s:2:"Ř";s:3:"Ř";s:2:"ř";s:3:"ř";s:2:"Ś";s:3:"Ś";s:2:"ś";s:3:"ś";s:2:"Ŝ";s:3:"Ŝ";s:2:"ŝ";s:3:"ŝ";s:2:"Ş";s:3:"Ş";s:2:"ş";s:3:"ş";s:2:"Š";s:3:"Š";s:2:"š";s:3:"š";s:2:"Ţ";s:3:"Ţ";s:2:"ţ";s:3:"ţ";s:2:"Ť";s:3:"Ť";s:2:"ť";s:3:"ť";s:2:"Ũ";s:3:"Ũ";s:2:"ũ";s:3:"ũ";s:2:"Ū";s:3:"Ū";s:2:"ū";s:3:"ū";s:2:"Ŭ";s:3:"Ŭ";s:2:"ŭ";s:3:"ŭ";s:2:"Ů";s:3:"Ů";s:2:"ů";s:3:"ů";s:2:"Ű";s:3:"Ű";s:2:"ű";s:3:"ű";s:2:"Ų";s:3:"Ų";s:2:"ų";s:3:"ų";s:2:"Ŵ";s:3:"Ŵ";s:2:"ŵ";s:3:"ŵ";s:2:"Ŷ";s:3:"Ŷ";s:2:"ŷ";s:3:"ŷ";s:2:"Ÿ";s:3:"Ÿ";s:2:"Ź";s:3:"Ź";s:2:"ź";s:3:"ź";s:2:"Ż";s:3:"Ż";s:2:"ż";s:3:"ż";s:2:"Ž";s:3:"Ž";s:2:"ž";s:3:"ž";s:2:"ſ";s:1:"s";s:2:"Ơ";s:3:"Ơ";s:2:"ơ";s:3:"ơ";s:2:"Ư";s:3:"Ư";s:2:"ư";s:3:"ư";s:2:"DŽ";s:4:"DŽ";s:2:"Dž";s:4:"Dž";s:2:"dž";s:4:"dž";s:2:"LJ";s:2:"LJ";s:2:"Lj";s:2:"Lj";s:2:"lj";s:2:"lj";s:2:"NJ";s:2:"NJ";s:2:"Nj";s:2:"Nj";s:2:"nj";s:2:"nj";s:2:"Ǎ";s:3:"Ǎ";s:2:"ǎ";s:3:"ǎ";s:2:"Ǐ";s:3:"Ǐ";s:2:"ǐ";s:3:"ǐ";s:2:"Ǒ";s:3:"Ǒ";s:2:"ǒ";s:3:"ǒ";s:2:"Ǔ";s:3:"Ǔ";s:2:"ǔ";s:3:"ǔ";s:2:"Ǖ";s:5:"Ǖ";s:2:"ǖ";s:5:"ǖ";s:2:"Ǘ";s:5:"Ǘ";s:2:"ǘ";s:5:"ǘ";s:2:"Ǚ";s:5:"Ǚ";s:2:"ǚ";s:5:"ǚ";s:2:"Ǜ";s:5:"Ǜ";s:2:"ǜ";s:5:"ǜ";s:2:"Ǟ";s:5:"Ǟ";s:2:"ǟ";s:5:"ǟ";s:2:"Ǡ";s:5:"Ǡ";s:2:"ǡ";s:5:"ǡ";s:2:"Ǣ";s:4:"Ǣ";s:2:"ǣ";s:4:"ǣ";s:2:"Ǧ";s:3:"Ǧ";s:2:"ǧ";s:3:"ǧ";s:2:"Ǩ";s:3:"Ǩ";s:2:"ǩ";s:3:"ǩ";s:2:"Ǫ";s:3:"Ǫ";s:2:"ǫ";s:3:"ǫ";s:2:"Ǭ";s:5:"Ǭ";s:2:"ǭ";s:5:"ǭ";s:2:"Ǯ";s:4:"Ǯ";s:2:"ǯ";s:4:"ǯ";s:2:"ǰ";s:3:"ǰ";s:2:"DZ";s:2:"DZ";s:2:"Dz";s:2:"Dz";s:2:"dz";s:2:"dz";s:2:"Ǵ";s:3:"Ǵ";s:2:"ǵ";s:3:"ǵ";s:2:"Ǹ";s:3:"Ǹ";s:2:"ǹ";s:3:"ǹ";s:2:"Ǻ";s:5:"Ǻ";s:2:"ǻ";s:5:"ǻ";s:2:"Ǽ";s:4:"Ǽ";s:2:"ǽ";s:4:"ǽ";s:2:"Ǿ";s:4:"Ǿ";s:2:"ǿ";s:4:"ǿ";s:2:"Ȁ";s:3:"Ȁ";s:2:"ȁ";s:3:"ȁ";s:2:"Ȃ";s:3:"Ȃ";s:2:"ȃ";s:3:"ȃ";s:2:"Ȅ";s:3:"Ȅ";s:2:"ȅ";s:3:"ȅ";s:2:"Ȇ";s:3:"Ȇ";s:2:"ȇ";s:3:"ȇ";s:2:"Ȉ";s:3:"Ȉ";s:2:"ȉ";s:3:"ȉ";s:2:"Ȋ";s:3:"Ȋ";s:2:"ȋ";s:3:"ȋ";s:2:"Ȍ";s:3:"Ȍ";s:2:"ȍ";s:3:"ȍ";s:2:"Ȏ";s:3:"Ȏ";s:2:"ȏ";s:3:"ȏ";s:2:"Ȑ";s:3:"Ȑ";s:2:"ȑ";s:3:"ȑ";s:2:"Ȓ";s:3:"Ȓ";s:2:"ȓ";s:3:"ȓ";s:2:"Ȕ";s:3:"Ȕ";s:2:"ȕ";s:3:"ȕ";s:2:"Ȗ";s:3:"Ȗ";s:2:"ȗ";s:3:"ȗ";s:2:"Ș";s:3:"Ș";s:2:"ș";s:3:"ș";s:2:"Ț";s:3:"Ț";s:2:"ț";s:3:"ț";s:2:"Ȟ";s:3:"Ȟ";s:2:"ȟ";s:3:"ȟ";s:2:"Ȧ";s:3:"Ȧ";s:2:"ȧ";s:3:"ȧ";s:2:"Ȩ";s:3:"Ȩ";s:2:"ȩ";s:3:"ȩ";s:2:"Ȫ";s:5:"Ȫ";s:2:"ȫ";s:5:"ȫ";s:2:"Ȭ";s:5:"Ȭ";s:2:"ȭ";s:5:"ȭ";s:2:"Ȯ";s:3:"Ȯ";s:2:"ȯ";s:3:"ȯ";s:2:"Ȱ";s:5:"Ȱ";s:2:"ȱ";s:5:"ȱ";s:2:"Ȳ";s:3:"Ȳ";s:2:"ȳ";s:3:"ȳ";s:2:"ʰ";s:1:"h";s:2:"ʱ";s:2:"ɦ";s:2:"ʲ";s:1:"j";s:2:"ʳ";s:1:"r";s:2:"ʴ";s:2:"ɹ";s:2:"ʵ";s:2:"ɻ";s:2:"ʶ";s:2:"ʁ";s:2:"ʷ";s:1:"w";s:2:"ʸ";s:1:"y";s:2:"˘";s:3:" ̆";s:2:"˙";s:3:" ̇";s:2:"˚";s:3:" ̊";s:2:"˛";s:3:" ̨";s:2:"˜";s:3:" ̃";s:2:"˝";s:3:" ̋";s:2:"ˠ";s:2:"ɣ";s:2:"ˡ";s:1:"l";s:2:"ˢ";s:1:"s";s:2:"ˣ";s:1:"x";s:2:"ˤ";s:2:"ʕ";s:2:"̀";s:2:"̀";s:2:"́";s:2:"́";s:2:"̓";s:2:"̓";s:2:"̈́";s:4:"̈́";s:2:"ʹ";s:2:"ʹ";s:2:"ͺ";s:3:" ͅ";s:2:";";s:1:";";s:2:"΄";s:3:" ́";s:2:"΅";s:5:" ̈́";s:2:"Ά";s:4:"Ά";s:2:"·";s:2:"·";s:2:"Έ";s:4:"Έ";s:2:"Ή";s:4:"Ή";s:2:"Ί";s:4:"Ί";s:2:"Ό";s:4:"Ό";s:2:"Ύ";s:4:"Ύ";s:2:"Ώ";s:4:"Ώ";s:2:"ΐ";s:6:"ΐ";s:2:"Ϊ";s:4:"Ϊ";s:2:"Ϋ";s:4:"Ϋ";s:2:"ά";s:4:"ά";s:2:"έ";s:4:"έ";s:2:"ή";s:4:"ή";s:2:"ί";s:4:"ί";s:2:"ΰ";s:6:"ΰ";s:2:"ϊ";s:4:"ϊ";s:2:"ϋ";s:4:"ϋ";s:2:"ό";s:4:"ό";s:2:"ύ";s:4:"ύ";s:2:"ώ";s:4:"ώ";s:2:"ϐ";s:2:"β";s:2:"ϑ";s:2:"θ";s:2:"ϒ";s:2:"Υ";s:2:"ϓ";s:4:"Ύ";s:2:"ϔ";s:4:"Ϋ";s:2:"ϕ";s:2:"φ";s:2:"ϖ";s:2:"π";s:2:"ϰ";s:2:"κ";s:2:"ϱ";s:2:"ρ";s:2:"ϲ";s:2:"ς";s:2:"ϴ";s:2:"Θ";s:2:"ϵ";s:2:"ε";s:2:"Ϲ";s:2:"Σ";s:2:"Ѐ";s:4:"Ѐ";s:2:"Ё";s:4:"Ё";s:2:"Ѓ";s:4:"Ѓ";s:2:"Ї";s:4:"Ї";s:2:"Ќ";s:4:"Ќ";s:2:"Ѝ";s:4:"Ѝ";s:2:"Ў";s:4:"Ў";s:2:"Й";s:4:"Й";s:2:"й";s:4:"й";s:2:"ѐ";s:4:"ѐ";s:2:"ё";s:4:"ё";s:2:"ѓ";s:4:"ѓ";s:2:"ї";s:4:"ї";s:2:"ќ";s:4:"ќ";s:2:"ѝ";s:4:"ѝ";s:2:"ў";s:4:"ў";s:2:"Ѷ";s:4:"Ѷ";s:2:"ѷ";s:4:"ѷ";s:2:"Ӂ";s:4:"Ӂ";s:2:"ӂ";s:4:"ӂ";s:2:"Ӑ";s:4:"Ӑ";s:2:"ӑ";s:4:"ӑ";s:2:"Ӓ";s:4:"Ӓ";s:2:"ӓ";s:4:"ӓ";s:2:"Ӗ";s:4:"Ӗ";s:2:"ӗ";s:4:"ӗ";s:2:"Ӛ";s:4:"Ӛ";s:2:"ӛ";s:4:"ӛ";s:2:"Ӝ";s:4:"Ӝ";s:2:"ӝ";s:4:"ӝ";s:2:"Ӟ";s:4:"Ӟ";s:2:"ӟ";s:4:"ӟ";s:2:"Ӣ";s:4:"Ӣ";s:2:"ӣ";s:4:"ӣ";s:2:"Ӥ";s:4:"Ӥ";s:2:"ӥ";s:4:"ӥ";s:2:"Ӧ";s:4:"Ӧ";s:2:"ӧ";s:4:"ӧ";s:2:"Ӫ";s:4:"Ӫ";s:2:"ӫ";s:4:"ӫ";s:2:"Ӭ";s:4:"Ӭ";s:2:"ӭ";s:4:"ӭ";s:2:"Ӯ";s:4:"Ӯ";s:2:"ӯ";s:4:"ӯ";s:2:"Ӱ";s:4:"Ӱ";s:2:"ӱ";s:4:"ӱ";s:2:"Ӳ";s:4:"Ӳ";s:2:"ӳ";s:4:"ӳ";s:2:"Ӵ";s:4:"Ӵ";s:2:"ӵ";s:4:"ӵ";s:2:"Ӹ";s:4:"Ӹ";s:2:"ӹ";s:4:"ӹ";s:2:"և";s:4:"եւ";s:2:"آ";s:4:"آ";s:2:"أ";s:4:"أ";s:2:"ؤ";s:4:"ؤ";s:2:"إ";s:4:"إ";s:2:"ئ";s:4:"ئ";s:2:"ٵ";s:4:"اٴ";s:2:"ٶ";s:4:"وٴ";s:2:"ٷ";s:4:"ۇٴ";s:2:"ٸ";s:4:"يٴ";s:2:"ۀ";s:4:"ۀ";s:2:"ۂ";s:4:"ۂ";s:2:"ۓ";s:4:"ۓ";s:3:"ऩ";s:6:"ऩ";s:3:"ऱ";s:6:"ऱ";s:3:"ऴ";s:6:"ऴ";s:3:"क़";s:6:"क़";s:3:"ख़";s:6:"ख़";s:3:"ग़";s:6:"ग़";s:3:"ज़";s:6:"ज़";s:3:"ड़";s:6:"ड़";s:3:"ढ़";s:6:"ढ़";s:3:"फ़";s:6:"फ़";s:3:"य़";s:6:"य़";s:3:"ো";s:6:"ো";s:3:"ৌ";s:6:"ৌ";s:3:"ড়";s:6:"ড়";s:3:"ঢ়";s:6:"ঢ়";s:3:"য়";s:6:"য়";s:3:"ਲ਼";s:6:"ਲ਼";s:3:"ਸ਼";s:6:"ਸ਼";s:3:"ਖ਼";s:6:"ਖ਼";s:3:"ਗ਼";s:6:"ਗ਼";s:3:"ਜ਼";s:6:"ਜ਼";s:3:"ਫ਼";s:6:"ਫ਼";s:3:"ୈ";s:6:"ୈ";s:3:"ୋ";s:6:"ୋ";s:3:"ୌ";s:6:"ୌ";s:3:"ଡ଼";s:6:"ଡ଼";s:3:"ଢ଼";s:6:"ଢ଼";s:3:"ஔ";s:6:"ஔ";s:3:"ொ";s:6:"ொ";s:3:"ோ";s:6:"ோ";s:3:"ௌ";s:6:"ௌ";s:3:"ై";s:6:"ై";s:3:"ೀ";s:6:"ೀ";s:3:"ೇ";s:6:"ೇ";s:3:"ೈ";s:6:"ೈ";s:3:"ೊ";s:6:"ೊ";s:3:"ೋ";s:9:"ೋ";s:3:"ൊ";s:6:"ൊ";s:3:"ോ";s:6:"ോ";s:3:"ൌ";s:6:"ൌ";s:3:"ේ";s:6:"ේ";s:3:"ො";s:6:"ො";s:3:"ෝ";s:9:"ෝ";s:3:"ෞ";s:6:"ෞ";s:3:"ำ";s:6:"ํา";s:3:"ຳ";s:6:"ໍາ";s:3:"ໜ";s:6:"ຫນ";s:3:"ໝ";s:6:"ຫມ";s:3:"༌";s:3:"་";s:3:"གྷ";s:6:"གྷ";s:3:"ཌྷ";s:6:"ཌྷ";s:3:"དྷ";s:6:"དྷ";s:3:"བྷ";s:6:"བྷ";s:3:"ཛྷ";s:6:"ཛྷ";s:3:"ཀྵ";s:6:"ཀྵ";s:3:"ཱི";s:6:"ཱི";s:3:"ཱུ";s:6:"ཱུ";s:3:"ྲྀ";s:6:"ྲྀ";s:3:"ཷ";s:9:"ྲཱྀ";s:3:"ླྀ";s:6:"ླྀ";s:3:"ཹ";s:9:"ླཱྀ";s:3:"ཱྀ";s:6:"ཱྀ";s:3:"ྒྷ";s:6:"ྒྷ";s:3:"ྜྷ";s:6:"ྜྷ";s:3:"ྡྷ";s:6:"ྡྷ";s:3:"ྦྷ";s:6:"ྦྷ";s:3:"ྫྷ";s:6:"ྫྷ";s:3:"ྐྵ";s:6:"ྐྵ";s:3:"ဦ";s:6:"ဦ";s:3:"ჼ";s:3:"ნ";s:3:"ᬆ";s:6:"ᬆ";s:3:"ᬈ";s:6:"ᬈ";s:3:"ᬊ";s:6:"ᬊ";s:3:"ᬌ";s:6:"ᬌ";s:3:"ᬎ";s:6:"ᬎ";s:3:"ᬒ";s:6:"ᬒ";s:3:"ᬻ";s:6:"ᬻ";s:3:"ᬽ";s:6:"ᬽ";s:3:"ᭀ";s:6:"ᭀ";s:3:"ᭁ";s:6:"ᭁ";s:3:"ᭃ";s:6:"ᭃ";s:3:"ᴬ";s:1:"A";s:3:"ᴭ";s:2:"Æ";s:3:"ᴮ";s:1:"B";s:3:"ᴰ";s:1:"D";s:3:"ᴱ";s:1:"E";s:3:"ᴲ";s:2:"Ǝ";s:3:"ᴳ";s:1:"G";s:3:"ᴴ";s:1:"H";s:3:"ᴵ";s:1:"I";s:3:"ᴶ";s:1:"J";s:3:"ᴷ";s:1:"K";s:3:"ᴸ";s:1:"L";s:3:"ᴹ";s:1:"M";s:3:"ᴺ";s:1:"N";s:3:"ᴼ";s:1:"O";s:3:"ᴽ";s:2:"Ȣ";s:3:"ᴾ";s:1:"P";s:3:"ᴿ";s:1:"R";s:3:"ᵀ";s:1:"T";s:3:"ᵁ";s:1:"U";s:3:"ᵂ";s:1:"W";s:3:"ᵃ";s:1:"a";s:3:"ᵄ";s:2:"ɐ";s:3:"ᵅ";s:2:"ɑ";s:3:"ᵆ";s:3:"ᴂ";s:3:"ᵇ";s:1:"b";s:3:"ᵈ";s:1:"d";s:3:"ᵉ";s:1:"e";s:3:"ᵊ";s:2:"ə";s:3:"ᵋ";s:2:"ɛ";s:3:"ᵌ";s:2:"ɜ";s:3:"ᵍ";s:1:"g";s:3:"ᵏ";s:1:"k";s:3:"ᵐ";s:1:"m";s:3:"ᵑ";s:2:"ŋ";s:3:"ᵒ";s:1:"o";s:3:"ᵓ";s:2:"ɔ";s:3:"ᵔ";s:3:"ᴖ";s:3:"ᵕ";s:3:"ᴗ";s:3:"ᵖ";s:1:"p";s:3:"ᵗ";s:1:"t";s:3:"ᵘ";s:1:"u";s:3:"ᵙ";s:3:"ᴝ";s:3:"ᵚ";s:2:"ɯ";s:3:"ᵛ";s:1:"v";s:3:"ᵜ";s:3:"ᴥ";s:3:"ᵝ";s:2:"β";s:3:"ᵞ";s:2:"γ";s:3:"ᵟ";s:2:"δ";s:3:"ᵠ";s:2:"φ";s:3:"ᵡ";s:2:"χ";s:3:"ᵢ";s:1:"i";s:3:"ᵣ";s:1:"r";s:3:"ᵤ";s:1:"u";s:3:"ᵥ";s:1:"v";s:3:"ᵦ";s:2:"β";s:3:"ᵧ";s:2:"γ";s:3:"ᵨ";s:2:"ρ";s:3:"ᵩ";s:2:"φ";s:3:"ᵪ";s:2:"χ";s:3:"ᵸ";s:2:"н";s:3:"ᶛ";s:2:"ɒ";s:3:"ᶜ";s:1:"c";s:3:"ᶝ";s:2:"ɕ";s:3:"ᶞ";s:2:"ð";s:3:"ᶟ";s:2:"ɜ";s:3:"ᶠ";s:1:"f";s:3:"ᶡ";s:2:"ɟ";s:3:"ᶢ";s:2:"ɡ";s:3:"ᶣ";s:2:"ɥ";s:3:"ᶤ";s:2:"ɨ";s:3:"ᶥ";s:2:"ɩ";s:3:"ᶦ";s:2:"ɪ";s:3:"ᶧ";s:3:"ᵻ";s:3:"ᶨ";s:2:"ʝ";s:3:"ᶩ";s:2:"ɭ";s:3:"ᶪ";s:3:"ᶅ";s:3:"ᶫ";s:2:"ʟ";s:3:"ᶬ";s:2:"ɱ";s:3:"ᶭ";s:2:"ɰ";s:3:"ᶮ";s:2:"ɲ";s:3:"ᶯ";s:2:"ɳ";s:3:"ᶰ";s:2:"ɴ";s:3:"ᶱ";s:2:"ɵ";s:3:"ᶲ";s:2:"ɸ";s:3:"ᶳ";s:2:"ʂ";s:3:"ᶴ";s:2:"ʃ";s:3:"ᶵ";s:2:"ƫ";s:3:"ᶶ";s:2:"ʉ";s:3:"ᶷ";s:2:"ʊ";s:3:"ᶸ";s:3:"ᴜ";s:3:"ᶹ";s:2:"ʋ";s:3:"ᶺ";s:2:"ʌ";s:3:"ᶻ";s:1:"z";s:3:"ᶼ";s:2:"ʐ";s:3:"ᶽ";s:2:"ʑ";s:3:"ᶾ";s:2:"ʒ";s:3:"ᶿ";s:2:"θ";s:3:"Ḁ";s:3:"Ḁ";s:3:"ḁ";s:3:"ḁ";s:3:"Ḃ";s:3:"Ḃ";s:3:"ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"Ḅ";s:3:"ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"Ḇ";s:3:"ḇ";s:3:"ḇ";s:3:"Ḉ";s:5:"Ḉ";s:3:"ḉ";s:5:"ḉ";s:3:"Ḋ";s:3:"Ḋ";s:3:"ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"Ḍ";s:3:"ḍ";s:3:"ḍ";s:3:"Ḏ";s:3:"Ḏ";s:3:"ḏ";s:3:"ḏ";s:3:"Ḑ";s:3:"Ḑ";s:3:"ḑ";s:3:"ḑ";s:3:"Ḓ";s:3:"Ḓ";s:3:"ḓ";s:3:"ḓ";s:3:"Ḕ";s:5:"Ḕ";s:3:"ḕ";s:5:"ḕ";s:3:"Ḗ";s:5:"Ḗ";s:3:"ḗ";s:5:"ḗ";s:3:"Ḙ";s:3:"Ḙ";s:3:"ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"Ḛ";s:3:"ḛ";s:3:"ḛ";s:3:"Ḝ";s:5:"Ḝ";s:3:"ḝ";s:5:"ḝ";s:3:"Ḟ";s:3:"Ḟ";s:3:"ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"Ḡ";s:3:"ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"Ḣ";s:3:"ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"Ḥ";s:3:"ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"Ḧ";s:3:"ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"Ḩ";s:3:"ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"Ḫ";s:3:"ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"Ḭ";s:3:"ḭ";s:3:"ḭ";s:3:"Ḯ";s:5:"Ḯ";s:3:"ḯ";s:5:"ḯ";s:3:"Ḱ";s:3:"Ḱ";s:3:"ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"Ḳ";s:3:"ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"Ḵ";s:3:"ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"Ḷ";s:3:"ḷ";s:3:"ḷ";s:3:"Ḹ";s:5:"Ḹ";s:3:"ḹ";s:5:"ḹ";s:3:"Ḻ";s:3:"Ḻ";s:3:"ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"Ḽ";s:3:"ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"Ḿ";s:3:"ḿ";s:3:"ḿ";s:3:"Ṁ";s:3:"Ṁ";s:3:"ṁ";s:3:"ṁ";s:3:"Ṃ";s:3:"Ṃ";s:3:"ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"Ṅ";s:3:"ṅ";s:3:"ṅ";s:3:"Ṇ";s:3:"Ṇ";s:3:"ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"Ṉ";s:3:"ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"Ṋ";s:3:"ṋ";s:3:"ṋ";s:3:"Ṍ";s:5:"Ṍ";s:3:"ṍ";s:5:"ṍ";s:3:"Ṏ";s:5:"Ṏ";s:3:"ṏ";s:5:"ṏ";s:3:"Ṑ";s:5:"Ṑ";s:3:"ṑ";s:5:"ṑ";s:3:"Ṓ";s:5:"Ṓ";s:3:"ṓ";s:5:"ṓ";s:3:"Ṕ";s:3:"Ṕ";s:3:"ṕ";s:3:"ṕ";s:3:"Ṗ";s:3:"Ṗ";s:3:"ṗ";s:3:"ṗ";s:3:"Ṙ";s:3:"Ṙ";s:3:"ṙ";s:3:"ṙ";s:3:"Ṛ";s:3:"Ṛ";s:3:"ṛ";s:3:"ṛ";s:3:"Ṝ";s:5:"Ṝ";s:3:"ṝ";s:5:"ṝ";s:3:"Ṟ";s:3:"Ṟ";s:3:"ṟ";s:3:"ṟ";s:3:"Ṡ";s:3:"Ṡ";s:3:"ṡ";s:3:"ṡ";s:3:"Ṣ";s:3:"Ṣ";s:3:"ṣ";s:3:"ṣ";s:3:"Ṥ";s:5:"Ṥ";s:3:"ṥ";s:5:"ṥ";s:3:"Ṧ";s:5:"Ṧ";s:3:"ṧ";s:5:"ṧ";s:3:"Ṩ";s:5:"Ṩ";s:3:"ṩ";s:5:"ṩ";s:3:"Ṫ";s:3:"Ṫ";s:3:"ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"Ṭ";s:3:"ṭ";s:3:"ṭ";s:3:"Ṯ";s:3:"Ṯ";s:3:"ṯ";s:3:"ṯ";s:3:"Ṱ";s:3:"Ṱ";s:3:"ṱ";s:3:"ṱ";s:3:"Ṳ";s:3:"Ṳ";s:3:"ṳ";s:3:"ṳ";s:3:"Ṵ";s:3:"Ṵ";s:3:"ṵ";s:3:"ṵ";s:3:"Ṷ";s:3:"Ṷ";s:3:"ṷ";s:3:"ṷ";s:3:"Ṹ";s:5:"Ṹ";s:3:"ṹ";s:5:"ṹ";s:3:"Ṻ";s:5:"Ṻ";s:3:"ṻ";s:5:"ṻ";s:3:"Ṽ";s:3:"Ṽ";s:3:"ṽ";s:3:"ṽ";s:3:"Ṿ";s:3:"Ṿ";s:3:"ṿ";s:3:"ṿ";s:3:"Ẁ";s:3:"Ẁ";s:3:"ẁ";s:3:"ẁ";s:3:"Ẃ";s:3:"Ẃ";s:3:"ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"Ẅ";s:3:"ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"Ẇ";s:3:"ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"Ẉ";s:3:"ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"Ẋ";s:3:"ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"Ẍ";s:3:"ẍ";s:3:"ẍ";s:3:"Ẏ";s:3:"Ẏ";s:3:"ẏ";s:3:"ẏ";s:3:"Ẑ";s:3:"Ẑ";s:3:"ẑ";s:3:"ẑ";s:3:"Ẓ";s:3:"Ẓ";s:3:"ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"Ẕ";s:3:"ẕ";s:3:"ẕ";s:3:"ẖ";s:3:"ẖ";s:3:"ẗ";s:3:"ẗ";s:3:"ẘ";s:3:"ẘ";s:3:"ẙ";s:3:"ẙ";s:3:"ẚ";s:3:"aʾ";s:3:"ẛ";s:3:"ṡ";s:3:"Ạ";s:3:"Ạ";s:3:"ạ";s:3:"ạ";s:3:"Ả";s:3:"Ả";s:3:"ả";s:3:"ả";s:3:"Ấ";s:5:"Ấ";s:3:"ấ";s:5:"ấ";s:3:"Ầ";s:5:"Ầ";s:3:"ầ";s:5:"ầ";s:3:"Ẩ";s:5:"Ẩ";s:3:"ẩ";s:5:"ẩ";s:3:"Ẫ";s:5:"Ẫ";s:3:"ẫ";s:5:"ẫ";s:3:"Ậ";s:5:"Ậ";s:3:"ậ";s:5:"ậ";s:3:"Ắ";s:5:"Ắ";s:3:"ắ";s:5:"ắ";s:3:"Ằ";s:5:"Ằ";s:3:"ằ";s:5:"ằ";s:3:"Ẳ";s:5:"Ẳ";s:3:"ẳ";s:5:"ẳ";s:3:"Ẵ";s:5:"Ẵ";s:3:"ẵ";s:5:"ẵ";s:3:"Ặ";s:5:"Ặ";s:3:"ặ";s:5:"ặ";s:3:"Ẹ";s:3:"Ẹ";s:3:"ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"Ẻ";s:3:"ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"Ẽ";s:3:"ẽ";s:3:"ẽ";s:3:"Ế";s:5:"Ế";s:3:"ế";s:5:"ế";s:3:"Ề";s:5:"Ề";s:3:"ề";s:5:"ề";s:3:"Ể";s:5:"Ể";s:3:"ể";s:5:"ể";s:3:"Ễ";s:5:"Ễ";s:3:"ễ";s:5:"ễ";s:3:"Ệ";s:5:"Ệ";s:3:"ệ";s:5:"ệ";s:3:"Ỉ";s:3:"Ỉ";s:3:"ỉ";s:3:"ỉ";s:3:"Ị";s:3:"Ị";s:3:"ị";s:3:"ị";s:3:"Ọ";s:3:"Ọ";s:3:"ọ";s:3:"ọ";s:3:"Ỏ";s:3:"Ỏ";s:3:"ỏ";s:3:"ỏ";s:3:"Ố";s:5:"Ố";s:3:"ố";s:5:"ố";s:3:"Ồ";s:5:"Ồ";s:3:"ồ";s:5:"ồ";s:3:"Ổ";s:5:"Ổ";s:3:"ổ";s:5:"ổ";s:3:"Ỗ";s:5:"Ỗ";s:3:"ỗ";s:5:"ỗ";s:3:"Ộ";s:5:"Ộ";s:3:"ộ";s:5:"ộ";s:3:"Ớ";s:5:"Ớ";s:3:"ớ";s:5:"ớ";s:3:"Ờ";s:5:"Ờ";s:3:"ờ";s:5:"ờ";s:3:"Ở";s:5:"Ở";s:3:"ở";s:5:"ở";s:3:"Ỡ";s:5:"Ỡ";s:3:"ỡ";s:5:"ỡ";s:3:"Ợ";s:5:"Ợ";s:3:"ợ";s:5:"ợ";s:3:"Ụ";s:3:"Ụ";s:3:"ụ";s:3:"ụ";s:3:"Ủ";s:3:"Ủ";s:3:"ủ";s:3:"ủ";s:3:"Ứ";s:5:"Ứ";s:3:"ứ";s:5:"ứ";s:3:"Ừ";s:5:"Ừ";s:3:"ừ";s:5:"ừ";s:3:"Ử";s:5:"Ử";s:3:"ử";s:5:"ử";s:3:"Ữ";s:5:"Ữ";s:3:"ữ";s:5:"ữ";s:3:"Ự";s:5:"Ự";s:3:"ự";s:5:"ự";s:3:"Ỳ";s:3:"Ỳ";s:3:"ỳ";s:3:"ỳ";s:3:"Ỵ";s:3:"Ỵ";s:3:"ỵ";s:3:"ỵ";s:3:"Ỷ";s:3:"Ỷ";s:3:"ỷ";s:3:"ỷ";s:3:"Ỹ";s:3:"Ỹ";s:3:"ỹ";s:3:"ỹ";s:3:"ἀ";s:4:"ἀ";s:3:"ἁ";s:4:"ἁ";s:3:"ἂ";s:6:"ἂ";s:3:"ἃ";s:6:"ἃ";s:3:"ἄ";s:6:"ἄ";s:3:"ἅ";s:6:"ἅ";s:3:"ἆ";s:6:"ἆ";s:3:"ἇ";s:6:"ἇ";s:3:"Ἀ";s:4:"Ἀ";s:3:"Ἁ";s:4:"Ἁ";s:3:"Ἂ";s:6:"Ἂ";s:3:"Ἃ";s:6:"Ἃ";s:3:"Ἄ";s:6:"Ἄ";s:3:"Ἅ";s:6:"Ἅ";s:3:"Ἆ";s:6:"Ἆ";s:3:"Ἇ";s:6:"Ἇ";s:3:"ἐ";s:4:"ἐ";s:3:"ἑ";s:4:"ἑ";s:3:"ἒ";s:6:"ἒ";s:3:"ἓ";s:6:"ἓ";s:3:"ἔ";s:6:"ἔ";s:3:"ἕ";s:6:"ἕ";s:3:"Ἐ";s:4:"Ἐ";s:3:"Ἑ";s:4:"Ἑ";s:3:"Ἒ";s:6:"Ἒ";s:3:"Ἓ";s:6:"Ἓ";s:3:"Ἔ";s:6:"Ἔ";s:3:"Ἕ";s:6:"Ἕ";s:3:"ἠ";s:4:"ἠ";s:3:"ἡ";s:4:"ἡ";s:3:"ἢ";s:6:"ἢ";s:3:"ἣ";s:6:"ἣ";s:3:"ἤ";s:6:"ἤ";s:3:"ἥ";s:6:"ἥ";s:3:"ἦ";s:6:"ἦ";s:3:"ἧ";s:6:"ἧ";s:3:"Ἠ";s:4:"Ἠ";s:3:"Ἡ";s:4:"Ἡ";s:3:"Ἢ";s:6:"Ἢ";s:3:"Ἣ";s:6:"Ἣ";s:3:"Ἤ";s:6:"Ἤ";s:3:"Ἥ";s:6:"Ἥ";s:3:"Ἦ";s:6:"Ἦ";s:3:"Ἧ";s:6:"Ἧ";s:3:"ἰ";s:4:"ἰ";s:3:"ἱ";s:4:"ἱ";s:3:"ἲ";s:6:"ἲ";s:3:"ἳ";s:6:"ἳ";s:3:"ἴ";s:6:"ἴ";s:3:"ἵ";s:6:"ἵ";s:3:"ἶ";s:6:"ἶ";s:3:"ἷ";s:6:"ἷ";s:3:"Ἰ";s:4:"Ἰ";s:3:"Ἱ";s:4:"Ἱ";s:3:"Ἲ";s:6:"Ἲ";s:3:"Ἳ";s:6:"Ἳ";s:3:"Ἴ";s:6:"Ἴ";s:3:"Ἵ";s:6:"Ἵ";s:3:"Ἶ";s:6:"Ἶ";s:3:"Ἷ";s:6:"Ἷ";s:3:"ὀ";s:4:"ὀ";s:3:"ὁ";s:4:"ὁ";s:3:"ὂ";s:6:"ὂ";s:3:"ὃ";s:6:"ὃ";s:3:"ὄ";s:6:"ὄ";s:3:"ὅ";s:6:"ὅ";s:3:"Ὀ";s:4:"Ὀ";s:3:"Ὁ";s:4:"Ὁ";s:3:"Ὂ";s:6:"Ὂ";s:3:"Ὃ";s:6:"Ὃ";s:3:"Ὄ";s:6:"Ὄ";s:3:"Ὅ";s:6:"Ὅ";s:3:"ὐ";s:4:"ὐ";s:3:"ὑ";s:4:"ὑ";s:3:"ὒ";s:6:"ὒ";s:3:"ὓ";s:6:"ὓ";s:3:"ὔ";s:6:"ὔ";s:3:"ὕ";s:6:"ὕ";s:3:"ὖ";s:6:"ὖ";s:3:"ὗ";s:6:"ὗ";s:3:"Ὑ";s:4:"Ὑ";s:3:"Ὓ";s:6:"Ὓ";s:3:"Ὕ";s:6:"Ὕ";s:3:"Ὗ";s:6:"Ὗ";s:3:"ὠ";s:4:"ὠ";s:3:"ὡ";s:4:"ὡ";s:3:"ὢ";s:6:"ὢ";s:3:"ὣ";s:6:"ὣ";s:3:"ὤ";s:6:"ὤ";s:3:"ὥ";s:6:"ὥ";s:3:"ὦ";s:6:"ὦ";s:3:"ὧ";s:6:"ὧ";s:3:"Ὠ";s:4:"Ὠ";s:3:"Ὡ";s:4:"Ὡ";s:3:"Ὢ";s:6:"Ὢ";s:3:"Ὣ";s:6:"Ὣ";s:3:"Ὤ";s:6:"Ὤ";s:3:"Ὥ";s:6:"Ὥ";s:3:"Ὦ";s:6:"Ὦ";s:3:"Ὧ";s:6:"Ὧ";s:3:"ὰ";s:4:"ὰ";s:3:"ά";s:4:"ά";s:3:"ὲ";s:4:"ὲ";s:3:"έ";s:4:"έ";s:3:"ὴ";s:4:"ὴ";s:3:"ή";s:4:"ή";s:3:"ὶ";s:4:"ὶ";s:3:"ί";s:4:"ί";s:3:"ὸ";s:4:"ὸ";s:3:"ό";s:4:"ό";s:3:"ὺ";s:4:"ὺ";s:3:"ύ";s:4:"ύ";s:3:"ὼ";s:4:"ὼ";s:3:"ώ";s:4:"ώ";s:3:"ᾀ";s:6:"ᾀ";s:3:"ᾁ";s:6:"ᾁ";s:3:"ᾂ";s:8:"ᾂ";s:3:"ᾃ";s:8:"ᾃ";s:3:"ᾄ";s:8:"ᾄ";s:3:"ᾅ";s:8:"ᾅ";s:3:"ᾆ";s:8:"ᾆ";s:3:"ᾇ";s:8:"ᾇ";s:3:"ᾈ";s:6:"ᾈ";s:3:"ᾉ";s:6:"ᾉ";s:3:"ᾊ";s:8:"ᾊ";s:3:"ᾋ";s:8:"ᾋ";s:3:"ᾌ";s:8:"ᾌ";s:3:"ᾍ";s:8:"ᾍ";s:3:"ᾎ";s:8:"ᾎ";s:3:"ᾏ";s:8:"ᾏ";s:3:"ᾐ";s:6:"ᾐ";s:3:"ᾑ";s:6:"ᾑ";s:3:"ᾒ";s:8:"ᾒ";s:3:"ᾓ";s:8:"ᾓ";s:3:"ᾔ";s:8:"ᾔ";s:3:"ᾕ";s:8:"ᾕ";s:3:"ᾖ";s:8:"ᾖ";s:3:"ᾗ";s:8:"ᾗ";s:3:"ᾘ";s:6:"ᾘ";s:3:"ᾙ";s:6:"ᾙ";s:3:"ᾚ";s:8:"ᾚ";s:3:"ᾛ";s:8:"ᾛ";s:3:"ᾜ";s:8:"ᾜ";s:3:"ᾝ";s:8:"ᾝ";s:3:"ᾞ";s:8:"ᾞ";s:3:"ᾟ";s:8:"ᾟ";s:3:"ᾠ";s:6:"ᾠ";s:3:"ᾡ";s:6:"ᾡ";s:3:"ᾢ";s:8:"ᾢ";s:3:"ᾣ";s:8:"ᾣ";s:3:"ᾤ";s:8:"ᾤ";s:3:"ᾥ";s:8:"ᾥ";s:3:"ᾦ";s:8:"ᾦ";s:3:"ᾧ";s:8:"ᾧ";s:3:"ᾨ";s:6:"ᾨ";s:3:"ᾩ";s:6:"ᾩ";s:3:"ᾪ";s:8:"ᾪ";s:3:"ᾫ";s:8:"ᾫ";s:3:"ᾬ";s:8:"ᾬ";s:3:"ᾭ";s:8:"ᾭ";s:3:"ᾮ";s:8:"ᾮ";s:3:"ᾯ";s:8:"ᾯ";s:3:"ᾰ";s:4:"ᾰ";s:3:"ᾱ";s:4:"ᾱ";s:3:"ᾲ";s:6:"ᾲ";s:3:"ᾳ";s:4:"ᾳ";s:3:"ᾴ";s:6:"ᾴ";s:3:"ᾶ";s:4:"ᾶ";s:3:"ᾷ";s:6:"ᾷ";s:3:"Ᾰ";s:4:"Ᾰ";s:3:"Ᾱ";s:4:"Ᾱ";s:3:"Ὰ";s:4:"Ὰ";s:3:"Ά";s:4:"Ά";s:3:"ᾼ";s:4:"ᾼ";s:3:"᾽";s:3:" ̓";s:3:"ι";s:2:"ι";s:3:"᾿";s:3:" ̓";s:3:"῀";s:3:" ͂";s:3:"῁";s:5:" ̈͂";s:3:"ῂ";s:6:"ῂ";s:3:"ῃ";s:4:"ῃ";s:3:"ῄ";s:6:"ῄ";s:3:"ῆ";s:4:"ῆ";s:3:"ῇ";s:6:"ῇ";s:3:"Ὲ";s:4:"Ὲ";s:3:"Έ";s:4:"Έ";s:3:"Ὴ";s:4:"Ὴ";s:3:"Ή";s:4:"Ή";s:3:"ῌ";s:4:"ῌ";s:3:"῍";s:5:" ̓̀";s:3:"῎";s:5:" ̓́";s:3:"῏";s:5:" ̓͂";s:3:"ῐ";s:4:"ῐ";s:3:"ῑ";s:4:"ῑ";s:3:"ῒ";s:6:"ῒ";s:3:"ΐ";s:6:"ΐ";s:3:"ῖ";s:4:"ῖ";s:3:"ῗ";s:6:"ῗ";s:3:"Ῐ";s:4:"Ῐ";s:3:"Ῑ";s:4:"Ῑ";s:3:"Ὶ";s:4:"Ὶ";s:3:"Ί";s:4:"Ί";s:3:"῝";s:5:" ̔̀";s:3:"῞";s:5:" ̔́";s:3:"῟";s:5:" ̔͂";s:3:"ῠ";s:4:"ῠ";s:3:"ῡ";s:4:"ῡ";s:3:"ῢ";s:6:"ῢ";s:3:"ΰ";s:6:"ΰ";s:3:"ῤ";s:4:"ῤ";s:3:"ῥ";s:4:"ῥ";s:3:"ῦ";s:4:"ῦ";s:3:"ῧ";s:6:"ῧ";s:3:"Ῠ";s:4:"Ῠ";s:3:"Ῡ";s:4:"Ῡ";s:3:"Ὺ";s:4:"Ὺ";s:3:"Ύ";s:4:"Ύ";s:3:"Ῥ";s:4:"Ῥ";s:3:"῭";s:5:" ̈̀";s:3:"΅";s:5:" ̈́";s:3:"`";s:1:"`";s:3:"ῲ";s:6:"ῲ";s:3:"ῳ";s:4:"ῳ";s:3:"ῴ";s:6:"ῴ";s:3:"ῶ";s:4:"ῶ";s:3:"ῷ";s:6:"ῷ";s:3:"Ὸ";s:4:"Ὸ";s:3:"Ό";s:4:"Ό";s:3:"Ὼ";s:4:"Ὼ";s:3:"Ώ";s:4:"Ώ";s:3:"ῼ";s:4:"ῼ";s:3:"´";s:3:" ́";s:3:"῾";s:3:" ̔";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:"‑";s:3:"‐";s:3:"‗";s:3:" ̳";s:3:"․";s:1:".";s:3:"‥";s:2:"..";s:3:"…";s:3:"...";s:3:" ";s:1:" ";s:3:"″";s:6:"′′";s:3:"‴";s:9:"′′′";s:3:"‶";s:6:"‵‵";s:3:"‷";s:9:"‵‵‵";s:3:"‼";s:2:"!!";s:3:"‾";s:3:" ̅";s:3:"⁇";s:2:"??";s:3:"⁈";s:2:"?!";s:3:"⁉";s:2:"!?";s:3:"⁗";s:12:"′′′′";s:3:" ";s:1:" ";s:3:"⁰";s:1:"0";s:3:"ⁱ";s:1:"i";s:3:"⁴";s:1:"4";s:3:"⁵";s:1:"5";s:3:"⁶";s:1:"6";s:3:"⁷";s:1:"7";s:3:"⁸";s:1:"8";s:3:"⁹";s:1:"9";s:3:"⁺";s:1:"+";s:3:"⁻";s:3:"−";s:3:"⁼";s:1:"=";s:3:"⁽";s:1:"(";s:3:"⁾";s:1:")";s:3:"ⁿ";s:1:"n";s:3:"₀";s:1:"0";s:3:"₁";s:1:"1";s:3:"₂";s:1:"2";s:3:"₃";s:1:"3";s:3:"₄";s:1:"4";s:3:"₅";s:1:"5";s:3:"₆";s:1:"6";s:3:"₇";s:1:"7";s:3:"₈";s:1:"8";s:3:"₉";s:1:"9";s:3:"₊";s:1:"+";s:3:"₋";s:3:"−";s:3:"₌";s:1:"=";s:3:"₍";s:1:"(";s:3:"₎";s:1:")";s:3:"ₐ";s:1:"a";s:3:"ₑ";s:1:"e";s:3:"ₒ";s:1:"o";s:3:"ₓ";s:1:"x";s:3:"ₔ";s:2:"ə";s:3:"₨";s:2:"Rs";s:3:"℀";s:3:"a/c";s:3:"℁";s:3:"a/s";s:3:"ℂ";s:1:"C";s:3:"℃";s:3:"°C";s:3:"℅";s:3:"c/o";s:3:"℆";s:3:"c/u";s:3:"ℇ";s:2:"Ɛ";s:3:"℉";s:3:"°F";s:3:"ℊ";s:1:"g";s:3:"ℋ";s:1:"H";s:3:"ℌ";s:1:"H";s:3:"ℍ";s:1:"H";s:3:"ℎ";s:1:"h";s:3:"ℏ";s:2:"ħ";s:3:"ℐ";s:1:"I";s:3:"ℑ";s:1:"I";s:3:"ℒ";s:1:"L";s:3:"ℓ";s:1:"l";s:3:"ℕ";s:1:"N";s:3:"№";s:2:"No";s:3:"ℙ";s:1:"P";s:3:"ℚ";s:1:"Q";s:3:"ℛ";s:1:"R";s:3:"ℜ";s:1:"R";s:3:"ℝ";s:1:"R";s:3:"℠";s:2:"SM";s:3:"℡";s:3:"TEL";s:3:"™";s:2:"TM";s:3:"ℤ";s:1:"Z";s:3:"Ω";s:2:"Ω";s:3:"ℨ";s:1:"Z";s:3:"K";s:1:"K";s:3:"Å";s:3:"Å";s:3:"ℬ";s:1:"B";s:3:"ℭ";s:1:"C";s:3:"ℯ";s:1:"e";s:3:"ℰ";s:1:"E";s:3:"ℱ";s:1:"F";s:3:"ℳ";s:1:"M";s:3:"ℴ";s:1:"o";s:3:"ℵ";s:2:"א";s:3:"ℶ";s:2:"ב";s:3:"ℷ";s:2:"ג";s:3:"ℸ";s:2:"ד";s:3:"ℹ";s:1:"i";s:3:"℻";s:3:"FAX";s:3:"ℼ";s:2:"π";s:3:"ℽ";s:2:"γ";s:3:"ℾ";s:2:"Γ";s:3:"ℿ";s:2:"Π";s:3:"⅀";s:3:"∑";s:3:"ⅅ";s:1:"D";s:3:"ⅆ";s:1:"d";s:3:"ⅇ";s:1:"e";s:3:"ⅈ";s:1:"i";s:3:"ⅉ";s:1:"j";s:3:"⅐";s:5:"1⁄7";s:3:"⅑";s:5:"1⁄9";s:3:"⅒";s:6:"1⁄10";s:3:"⅓";s:5:"1⁄3";s:3:"⅔";s:5:"2⁄3";s:3:"⅕";s:5:"1⁄5";s:3:"⅖";s:5:"2⁄5";s:3:"⅗";s:5:"3⁄5";s:3:"⅘";s:5:"4⁄5";s:3:"⅙";s:5:"1⁄6";s:3:"⅚";s:5:"5⁄6";s:3:"⅛";s:5:"1⁄8";s:3:"⅜";s:5:"3⁄8";s:3:"⅝";s:5:"5⁄8";s:3:"⅞";s:5:"7⁄8";s:3:"⅟";s:4:"1⁄";s:3:"Ⅰ";s:1:"I";s:3:"Ⅱ";s:2:"II";s:3:"Ⅲ";s:3:"III";s:3:"Ⅳ";s:2:"IV";s:3:"Ⅴ";s:1:"V";s:3:"Ⅵ";s:2:"VI";s:3:"Ⅶ";s:3:"VII";s:3:"Ⅷ";s:4:"VIII";s:3:"Ⅸ";s:2:"IX";s:3:"Ⅹ";s:1:"X";s:3:"Ⅺ";s:2:"XI";s:3:"Ⅻ";s:3:"XII";s:3:"Ⅼ";s:1:"L";s:3:"Ⅽ";s:1:"C";s:3:"Ⅾ";s:1:"D";s:3:"Ⅿ";s:1:"M";s:3:"ⅰ";s:1:"i";s:3:"ⅱ";s:2:"ii";s:3:"ⅲ";s:3:"iii";s:3:"ⅳ";s:2:"iv";s:3:"ⅴ";s:1:"v";s:3:"ⅵ";s:2:"vi";s:3:"ⅶ";s:3:"vii";s:3:"ⅷ";s:4:"viii";s:3:"ⅸ";s:2:"ix";s:3:"ⅹ";s:1:"x";s:3:"ⅺ";s:2:"xi";s:3:"ⅻ";s:3:"xii";s:3:"ⅼ";s:1:"l";s:3:"ⅽ";s:1:"c";s:3:"ⅾ";s:1:"d";s:3:"ⅿ";s:1:"m";s:3:"↉";s:5:"0⁄3";s:3:"↚";s:5:"↚";s:3:"↛";s:5:"↛";s:3:"↮";s:5:"↮";s:3:"⇍";s:5:"⇍";s:3:"⇎";s:5:"⇎";s:3:"⇏";s:5:"⇏";s:3:"∄";s:5:"∄";s:3:"∉";s:5:"∉";s:3:"∌";s:5:"∌";s:3:"∤";s:5:"∤";s:3:"∦";s:5:"∦";s:3:"∬";s:6:"∫∫";s:3:"∭";s:9:"∫∫∫";s:3:"∯";s:6:"∮∮";s:3:"∰";s:9:"∮∮∮";s:3:"≁";s:5:"≁";s:3:"≄";s:5:"≄";s:3:"≇";s:5:"≇";s:3:"≉";s:5:"≉";s:3:"≠";s:3:"≠";s:3:"≢";s:5:"≢";s:3:"≭";s:5:"≭";s:3:"≮";s:3:"≮";s:3:"≯";s:3:"≯";s:3:"≰";s:5:"≰";s:3:"≱";s:5:"≱";s:3:"≴";s:5:"≴";s:3:"≵";s:5:"≵";s:3:"≸";s:5:"≸";s:3:"≹";s:5:"≹";s:3:"⊀";s:5:"⊀";s:3:"⊁";s:5:"⊁";s:3:"⊄";s:5:"⊄";s:3:"⊅";s:5:"⊅";s:3:"⊈";s:5:"⊈";s:3:"⊉";s:5:"⊉";s:3:"⊬";s:5:"⊬";s:3:"⊭";s:5:"⊭";s:3:"⊮";s:5:"⊮";s:3:"⊯";s:5:"⊯";s:3:"⋠";s:5:"⋠";s:3:"⋡";s:5:"⋡";s:3:"⋢";s:5:"⋢";s:3:"⋣";s:5:"⋣";s:3:"⋪";s:5:"⋪";s:3:"⋫";s:5:"⋫";s:3:"⋬";s:5:"⋬";s:3:"⋭";s:5:"⋭";s:3:"〈";s:3:"〈";s:3:"〉";s:3:"〉";s:3:"①";s:1:"1";s:3:"②";s:1:"2";s:3:"③";s:1:"3";s:3:"④";s:1:"4";s:3:"⑤";s:1:"5";s:3:"⑥";s:1:"6";s:3:"⑦";s:1:"7";s:3:"⑧";s:1:"8";s:3:"⑨";s:1:"9";s:3:"⑩";s:2:"10";s:3:"⑪";s:2:"11";s:3:"⑫";s:2:"12";s:3:"⑬";s:2:"13";s:3:"⑭";s:2:"14";s:3:"⑮";s:2:"15";s:3:"⑯";s:2:"16";s:3:"⑰";s:2:"17";s:3:"⑱";s:2:"18";s:3:"⑲";s:2:"19";s:3:"⑳";s:2:"20";s:3:"⑴";s:3:"(1)";s:3:"⑵";s:3:"(2)";s:3:"⑶";s:3:"(3)";s:3:"⑷";s:3:"(4)";s:3:"⑸";s:3:"(5)";s:3:"⑹";s:3:"(6)";s:3:"⑺";s:3:"(7)";s:3:"⑻";s:3:"(8)";s:3:"⑼";s:3:"(9)";s:3:"⑽";s:4:"(10)";s:3:"⑾";s:4:"(11)";s:3:"⑿";s:4:"(12)";s:3:"⒀";s:4:"(13)";s:3:"⒁";s:4:"(14)";s:3:"⒂";s:4:"(15)";s:3:"⒃";s:4:"(16)";s:3:"⒄";s:4:"(17)";s:3:"⒅";s:4:"(18)";s:3:"⒆";s:4:"(19)";s:3:"⒇";s:4:"(20)";s:3:"⒈";s:2:"1.";s:3:"⒉";s:2:"2.";s:3:"⒊";s:2:"3.";s:3:"⒋";s:2:"4.";s:3:"⒌";s:2:"5.";s:3:"⒍";s:2:"6.";s:3:"⒎";s:2:"7.";s:3:"⒏";s:2:"8.";s:3:"⒐";s:2:"9.";s:3:"⒑";s:3:"10.";s:3:"⒒";s:3:"11.";s:3:"⒓";s:3:"12.";s:3:"⒔";s:3:"13.";s:3:"⒕";s:3:"14.";s:3:"⒖";s:3:"15.";s:3:"⒗";s:3:"16.";s:3:"⒘";s:3:"17.";s:3:"⒙";s:3:"18.";s:3:"⒚";s:3:"19.";s:3:"⒛";s:3:"20.";s:3:"⒜";s:3:"(a)";s:3:"⒝";s:3:"(b)";s:3:"⒞";s:3:"(c)";s:3:"⒟";s:3:"(d)";s:3:"⒠";s:3:"(e)";s:3:"⒡";s:3:"(f)";s:3:"⒢";s:3:"(g)";s:3:"⒣";s:3:"(h)";s:3:"⒤";s:3:"(i)";s:3:"⒥";s:3:"(j)";s:3:"⒦";s:3:"(k)";s:3:"⒧";s:3:"(l)";s:3:"⒨";s:3:"(m)";s:3:"⒩";s:3:"(n)";s:3:"⒪";s:3:"(o)";s:3:"⒫";s:3:"(p)";s:3:"⒬";s:3:"(q)";s:3:"⒭";s:3:"(r)";s:3:"⒮";s:3:"(s)";s:3:"⒯";s:3:"(t)";s:3:"⒰";s:3:"(u)";s:3:"⒱";s:3:"(v)";s:3:"⒲";s:3:"(w)";s:3:"⒳";s:3:"(x)";s:3:"⒴";s:3:"(y)";s:3:"⒵";s:3:"(z)";s:3:"Ⓐ";s:1:"A";s:3:"Ⓑ";s:1:"B";s:3:"Ⓒ";s:1:"C";s:3:"Ⓓ";s:1:"D";s:3:"Ⓔ";s:1:"E";s:3:"Ⓕ";s:1:"F";s:3:"Ⓖ";s:1:"G";s:3:"Ⓗ";s:1:"H";s:3:"Ⓘ";s:1:"I";s:3:"Ⓙ";s:1:"J";s:3:"Ⓚ";s:1:"K";s:3:"Ⓛ";s:1:"L";s:3:"Ⓜ";s:1:"M";s:3:"Ⓝ";s:1:"N";s:3:"Ⓞ";s:1:"O";s:3:"Ⓟ";s:1:"P";s:3:"Ⓠ";s:1:"Q";s:3:"Ⓡ";s:1:"R";s:3:"Ⓢ";s:1:"S";s:3:"Ⓣ";s:1:"T";s:3:"Ⓤ";s:1:"U";s:3:"Ⓥ";s:1:"V";s:3:"Ⓦ";s:1:"W";s:3:"Ⓧ";s:1:"X";s:3:"Ⓨ";s:1:"Y";s:3:"Ⓩ";s:1:"Z";s:3:"ⓐ";s:1:"a";s:3:"ⓑ";s:1:"b";s:3:"ⓒ";s:1:"c";s:3:"ⓓ";s:1:"d";s:3:"ⓔ";s:1:"e";s:3:"ⓕ";s:1:"f";s:3:"ⓖ";s:1:"g";s:3:"ⓗ";s:1:"h";s:3:"ⓘ";s:1:"i";s:3:"ⓙ";s:1:"j";s:3:"ⓚ";s:1:"k";s:3:"ⓛ";s:1:"l";s:3:"ⓜ";s:1:"m";s:3:"ⓝ";s:1:"n";s:3:"ⓞ";s:1:"o";s:3:"ⓟ";s:1:"p";s:3:"ⓠ";s:1:"q";s:3:"ⓡ";s:1:"r";s:3:"ⓢ";s:1:"s";s:3:"ⓣ";s:1:"t";s:3:"ⓤ";s:1:"u";s:3:"ⓥ";s:1:"v";s:3:"ⓦ";s:1:"w";s:3:"ⓧ";s:1:"x";s:3:"ⓨ";s:1:"y";s:3:"ⓩ";s:1:"z";s:3:"⓪";s:1:"0";s:3:"⨌";s:12:"∫∫∫∫";s:3:"⩴";s:3:"::=";s:3:"⩵";s:2:"==";s:3:"⩶";s:3:"===";s:3:"⫝̸";s:5:"⫝̸";s:3:"ⱼ";s:1:"j";s:3:"ⱽ";s:1:"V";s:3:"ⵯ";s:3:"ⵡ";s:3:"⺟";s:3:"母";s:3:"⻳";s:3:"龟";s:3:"⼀";s:3:"一";s:3:"⼁";s:3:"丨";s:3:"⼂";s:3:"丶";s:3:"⼃";s:3:"丿";s:3:"⼄";s:3:"乙";s:3:"⼅";s:3:"亅";s:3:"⼆";s:3:"二";s:3:"⼇";s:3:"亠";s:3:"⼈";s:3:"人";s:3:"⼉";s:3:"儿";s:3:"⼊";s:3:"入";s:3:"⼋";s:3:"八";s:3:"⼌";s:3:"冂";s:3:"⼍";s:3:"冖";s:3:"⼎";s:3:"冫";s:3:"⼏";s:3:"几";s:3:"⼐";s:3:"凵";s:3:"⼑";s:3:"刀";s:3:"⼒";s:3:"力";s:3:"⼓";s:3:"勹";s:3:"⼔";s:3:"匕";s:3:"⼕";s:3:"匚";s:3:"⼖";s:3:"匸";s:3:"⼗";s:3:"十";s:3:"⼘";s:3:"卜";s:3:"⼙";s:3:"卩";s:3:"⼚";s:3:"厂";s:3:"⼛";s:3:"厶";s:3:"⼜";s:3:"又";s:3:"⼝";s:3:"口";s:3:"⼞";s:3:"囗";s:3:"⼟";s:3:"土";s:3:"⼠";s:3:"士";s:3:"⼡";s:3:"夂";s:3:"⼢";s:3:"夊";s:3:"⼣";s:3:"夕";s:3:"⼤";s:3:"大";s:3:"⼥";s:3:"女";s:3:"⼦";s:3:"子";s:3:"⼧";s:3:"宀";s:3:"⼨";s:3:"寸";s:3:"⼩";s:3:"小";s:3:"⼪";s:3:"尢";s:3:"⼫";s:3:"尸";s:3:"⼬";s:3:"屮";s:3:"⼭";s:3:"山";s:3:"⼮";s:3:"巛";s:3:"⼯";s:3:"工";s:3:"⼰";s:3:"己";s:3:"⼱";s:3:"巾";s:3:"⼲";s:3:"干";s:3:"⼳";s:3:"幺";s:3:"⼴";s:3:"广";s:3:"⼵";s:3:"廴";s:3:"⼶";s:3:"廾";s:3:"⼷";s:3:"弋";s:3:"⼸";s:3:"弓";s:3:"⼹";s:3:"彐";s:3:"⼺";s:3:"彡";s:3:"⼻";s:3:"彳";s:3:"⼼";s:3:"心";s:3:"⼽";s:3:"戈";s:3:"⼾";s:3:"戶";s:3:"⼿";s:3:"手";s:3:"⽀";s:3:"支";s:3:"⽁";s:3:"攴";s:3:"⽂";s:3:"文";s:3:"⽃";s:3:"斗";s:3:"⽄";s:3:"斤";s:3:"⽅";s:3:"方";s:3:"⽆";s:3:"无";s:3:"⽇";s:3:"日";s:3:"⽈";s:3:"曰";s:3:"⽉";s:3:"月";s:3:"⽊";s:3:"木";s:3:"⽋";s:3:"欠";s:3:"⽌";s:3:"止";s:3:"⽍";s:3:"歹";s:3:"⽎";s:3:"殳";s:3:"⽏";s:3:"毋";s:3:"⽐";s:3:"比";s:3:"⽑";s:3:"毛";s:3:"⽒";s:3:"氏";s:3:"⽓";s:3:"气";s:3:"⽔";s:3:"水";s:3:"⽕";s:3:"火";s:3:"⽖";s:3:"爪";s:3:"⽗";s:3:"父";s:3:"⽘";s:3:"爻";s:3:"⽙";s:3:"爿";s:3:"⽚";s:3:"片";s:3:"⽛";s:3:"牙";s:3:"⽜";s:3:"牛";s:3:"⽝";s:3:"犬";s:3:"⽞";s:3:"玄";s:3:"⽟";s:3:"玉";s:3:"⽠";s:3:"瓜";s:3:"⽡";s:3:"瓦";s:3:"⽢";s:3:"甘";s:3:"⽣";s:3:"生";s:3:"⽤";s:3:"用";s:3:"⽥";s:3:"田";s:3:"⽦";s:3:"疋";s:3:"⽧";s:3:"疒";s:3:"⽨";s:3:"癶";s:3:"⽩";s:3:"白";s:3:"⽪";s:3:"皮";s:3:"⽫";s:3:"皿";s:3:"⽬";s:3:"目";s:3:"⽭";s:3:"矛";s:3:"⽮";s:3:"矢";s:3:"⽯";s:3:"石";s:3:"⽰";s:3:"示";s:3:"⽱";s:3:"禸";s:3:"⽲";s:3:"禾";s:3:"⽳";s:3:"穴";s:3:"⽴";s:3:"立";s:3:"⽵";s:3:"竹";s:3:"⽶";s:3:"米";s:3:"⽷";s:3:"糸";s:3:"⽸";s:3:"缶";s:3:"⽹";s:3:"网";s:3:"⽺";s:3:"羊";s:3:"⽻";s:3:"羽";s:3:"⽼";s:3:"老";s:3:"⽽";s:3:"而";s:3:"⽾";s:3:"耒";s:3:"⽿";s:3:"耳";s:3:"⾀";s:3:"聿";s:3:"⾁";s:3:"肉";s:3:"⾂";s:3:"臣";s:3:"⾃";s:3:"自";s:3:"⾄";s:3:"至";s:3:"⾅";s:3:"臼";s:3:"⾆";s:3:"舌";s:3:"⾇";s:3:"舛";s:3:"⾈";s:3:"舟";s:3:"⾉";s:3:"艮";s:3:"⾊";s:3:"色";s:3:"⾋";s:3:"艸";s:3:"⾌";s:3:"虍";s:3:"⾍";s:3:"虫";s:3:"⾎";s:3:"血";s:3:"⾏";s:3:"行";s:3:"⾐";s:3:"衣";s:3:"⾑";s:3:"襾";s:3:"⾒";s:3:"見";s:3:"⾓";s:3:"角";s:3:"⾔";s:3:"言";s:3:"⾕";s:3:"谷";s:3:"⾖";s:3:"豆";s:3:"⾗";s:3:"豕";s:3:"⾘";s:3:"豸";s:3:"⾙";s:3:"貝";s:3:"⾚";s:3:"赤";s:3:"⾛";s:3:"走";s:3:"⾜";s:3:"足";s:3:"⾝";s:3:"身";s:3:"⾞";s:3:"車";s:3:"⾟";s:3:"辛";s:3:"⾠";s:3:"辰";s:3:"⾡";s:3:"辵";s:3:"⾢";s:3:"邑";s:3:"⾣";s:3:"酉";s:3:"⾤";s:3:"釆";s:3:"⾥";s:3:"里";s:3:"⾦";s:3:"金";s:3:"⾧";s:3:"長";s:3:"⾨";s:3:"門";s:3:"⾩";s:3:"阜";s:3:"⾪";s:3:"隶";s:3:"⾫";s:3:"隹";s:3:"⾬";s:3:"雨";s:3:"⾭";s:3:"靑";s:3:"⾮";s:3:"非";s:3:"⾯";s:3:"面";s:3:"⾰";s:3:"革";s:3:"⾱";s:3:"韋";s:3:"⾲";s:3:"韭";s:3:"⾳";s:3:"音";s:3:"⾴";s:3:"頁";s:3:"⾵";s:3:"風";s:3:"⾶";s:3:"飛";s:3:"⾷";s:3:"食";s:3:"⾸";s:3:"首";s:3:"⾹";s:3:"香";s:3:"⾺";s:3:"馬";s:3:"⾻";s:3:"骨";s:3:"⾼";s:3:"高";s:3:"⾽";s:3:"髟";s:3:"⾾";s:3:"鬥";s:3:"⾿";s:3:"鬯";s:3:"⿀";s:3:"鬲";s:3:"⿁";s:3:"鬼";s:3:"⿂";s:3:"魚";s:3:"⿃";s:3:"鳥";s:3:"⿄";s:3:"鹵";s:3:"⿅";s:3:"鹿";s:3:"⿆";s:3:"麥";s:3:"⿇";s:3:"麻";s:3:"⿈";s:3:"黃";s:3:"⿉";s:3:"黍";s:3:"⿊";s:3:"黑";s:3:"⿋";s:3:"黹";s:3:"⿌";s:3:"黽";s:3:"⿍";s:3:"鼎";s:3:"⿎";s:3:"鼓";s:3:"⿏";s:3:"鼠";s:3:"⿐";s:3:"鼻";s:3:"⿑";s:3:"齊";s:3:"⿒";s:3:"齒";s:3:"⿓";s:3:"龍";s:3:"⿔";s:3:"龜";s:3:"⿕";s:3:"龠";s:3:" ";s:1:" ";s:3:"〶";s:3:"〒";s:3:"〸";s:3:"十";s:3:"〹";s:3:"卄";s:3:"〺";s:3:"卅";s:3:"が";s:6:"が";s:3:"ぎ";s:6:"ぎ";s:3:"ぐ";s:6:"ぐ";s:3:"げ";s:6:"げ";s:3:"ご";s:6:"ご";s:3:"ざ";s:6:"ざ";s:3:"じ";s:6:"じ";s:3:"ず";s:6:"ず";s:3:"ぜ";s:6:"ぜ";s:3:"ぞ";s:6:"ぞ";s:3:"だ";s:6:"だ";s:3:"ぢ";s:6:"ぢ";s:3:"づ";s:6:"づ";s:3:"で";s:6:"で";s:3:"ど";s:6:"ど";s:3:"ば";s:6:"ば";s:3:"ぱ";s:6:"ぱ";s:3:"び";s:6:"び";s:3:"ぴ";s:6:"ぴ";s:3:"ぶ";s:6:"ぶ";s:3:"ぷ";s:6:"ぷ";s:3:"べ";s:6:"べ";s:3:"ぺ";s:6:"ぺ";s:3:"ぼ";s:6:"ぼ";s:3:"ぽ";s:6:"ぽ";s:3:"ゔ";s:6:"ゔ";s:3:"゛";s:4:" ゙";s:3:"゜";s:4:" ゚";s:3:"ゞ";s:6:"ゞ";s:3:"ゟ";s:6:"より";s:3:"ガ";s:6:"ガ";s:3:"ギ";s:6:"ギ";s:3:"グ";s:6:"グ";s:3:"ゲ";s:6:"ゲ";s:3:"ゴ";s:6:"ゴ";s:3:"ザ";s:6:"ザ";s:3:"ジ";s:6:"ジ";s:3:"ズ";s:6:"ズ";s:3:"ゼ";s:6:"ゼ";s:3:"ゾ";s:6:"ゾ";s:3:"ダ";s:6:"ダ";s:3:"ヂ";s:6:"ヂ";s:3:"ヅ";s:6:"ヅ";s:3:"デ";s:6:"デ";s:3:"ド";s:6:"ド";s:3:"バ";s:6:"バ";s:3:"パ";s:6:"パ";s:3:"ビ";s:6:"ビ";s:3:"ピ";s:6:"ピ";s:3:"ブ";s:6:"ブ";s:3:"プ";s:6:"プ";s:3:"ベ";s:6:"ベ";s:3:"ペ";s:6:"ペ";s:3:"ボ";s:6:"ボ";s:3:"ポ";s:6:"ポ";s:3:"ヴ";s:6:"ヴ";s:3:"ヷ";s:6:"ヷ";s:3:"ヸ";s:6:"ヸ";s:3:"ヹ";s:6:"ヹ";s:3:"ヺ";s:6:"ヺ";s:3:"ヾ";s:6:"ヾ";s:3:"ヿ";s:6:"コト";s:3:"ㄱ";s:3:"ᄀ";s:3:"ㄲ";s:3:"ᄁ";s:3:"ㄳ";s:3:"ᆪ";s:3:"ㄴ";s:3:"ᄂ";s:3:"ㄵ";s:3:"ᆬ";s:3:"ㄶ";s:3:"ᆭ";s:3:"ㄷ";s:3:"ᄃ";s:3:"ㄸ";s:3:"ᄄ";s:3:"ㄹ";s:3:"ᄅ";s:3:"ㄺ";s:3:"ᆰ";s:3:"ㄻ";s:3:"ᆱ";s:3:"ㄼ";s:3:"ᆲ";s:3:"ㄽ";s:3:"ᆳ";s:3:"ㄾ";s:3:"ᆴ";s:3:"ㄿ";s:3:"ᆵ";s:3:"ㅀ";s:3:"ᄚ";s:3:"ㅁ";s:3:"ᄆ";s:3:"ㅂ";s:3:"ᄇ";s:3:"ㅃ";s:3:"ᄈ";s:3:"ㅄ";s:3:"ᄡ";s:3:"ㅅ";s:3:"ᄉ";s:3:"ㅆ";s:3:"ᄊ";s:3:"ㅇ";s:3:"ᄋ";s:3:"ㅈ";s:3:"ᄌ";s:3:"ㅉ";s:3:"ᄍ";s:3:"ㅊ";s:3:"ᄎ";s:3:"ㅋ";s:3:"ᄏ";s:3:"ㅌ";s:3:"ᄐ";s:3:"ㅍ";s:3:"ᄑ";s:3:"ㅎ";s:3:"ᄒ";s:3:"ㅏ";s:3:"ᅡ";s:3:"ㅐ";s:3:"ᅢ";s:3:"ㅑ";s:3:"ᅣ";s:3:"ㅒ";s:3:"ᅤ";s:3:"ㅓ";s:3:"ᅥ";s:3:"ㅔ";s:3:"ᅦ";s:3:"ㅕ";s:3:"ᅧ";s:3:"ㅖ";s:3:"ᅨ";s:3:"ㅗ";s:3:"ᅩ";s:3:"ㅘ";s:3:"ᅪ";s:3:"ㅙ";s:3:"ᅫ";s:3:"ㅚ";s:3:"ᅬ";s:3:"ㅛ";s:3:"ᅭ";s:3:"ㅜ";s:3:"ᅮ";s:3:"ㅝ";s:3:"ᅯ";s:3:"ㅞ";s:3:"ᅰ";s:3:"ㅟ";s:3:"ᅱ";s:3:"ㅠ";s:3:"ᅲ";s:3:"ㅡ";s:3:"ᅳ";s:3:"ㅢ";s:3:"ᅴ";s:3:"ㅣ";s:3:"ᅵ";s:3:"ㅤ";s:3:"ᅠ";s:3:"ㅥ";s:3:"ᄔ";s:3:"ㅦ";s:3:"ᄕ";s:3:"ㅧ";s:3:"ᇇ";s:3:"ㅨ";s:3:"ᇈ";s:3:"ㅩ";s:3:"ᇌ";s:3:"ㅪ";s:3:"ᇎ";s:3:"ㅫ";s:3:"ᇓ";s:3:"ㅬ";s:3:"ᇗ";s:3:"ㅭ";s:3:"ᇙ";s:3:"ㅮ";s:3:"ᄜ";s:3:"ㅯ";s:3:"ᇝ";s:3:"ㅰ";s:3:"ᇟ";s:3:"ㅱ";s:3:"ᄝ";s:3:"ㅲ";s:3:"ᄞ";s:3:"ㅳ";s:3:"ᄠ";s:3:"ㅴ";s:3:"ᄢ";s:3:"ㅵ";s:3:"ᄣ";s:3:"ㅶ";s:3:"ᄧ";s:3:"ㅷ";s:3:"ᄩ";s:3:"ㅸ";s:3:"ᄫ";s:3:"ㅹ";s:3:"ᄬ";s:3:"ㅺ";s:3:"ᄭ";s:3:"ㅻ";s:3:"ᄮ";s:3:"ㅼ";s:3:"ᄯ";s:3:"ㅽ";s:3:"ᄲ";s:3:"ㅾ";s:3:"ᄶ";s:3:"ㅿ";s:3:"ᅀ";s:3:"ㆀ";s:3:"ᅇ";s:3:"ㆁ";s:3:"ᅌ";s:3:"ㆂ";s:3:"ᇱ";s:3:"ㆃ";s:3:"ᇲ";s:3:"ㆄ";s:3:"ᅗ";s:3:"ㆅ";s:3:"ᅘ";s:3:"ㆆ";s:3:"ᅙ";s:3:"ㆇ";s:3:"ᆄ";s:3:"ㆈ";s:3:"ᆅ";s:3:"ㆉ";s:3:"ᆈ";s:3:"ㆊ";s:3:"ᆑ";s:3:"ㆋ";s:3:"ᆒ";s:3:"ㆌ";s:3:"ᆔ";s:3:"ㆍ";s:3:"ᆞ";s:3:"ㆎ";s:3:"ᆡ";s:3:"㆒";s:3:"一";s:3:"㆓";s:3:"二";s:3:"㆔";s:3:"三";s:3:"㆕";s:3:"四";s:3:"㆖";s:3:"上";s:3:"㆗";s:3:"中";s:3:"㆘";s:3:"下";s:3:"㆙";s:3:"甲";s:3:"㆚";s:3:"乙";s:3:"㆛";s:3:"丙";s:3:"㆜";s:3:"丁";s:3:"㆝";s:3:"天";s:3:"㆞";s:3:"地";s:3:"㆟";s:3:"人";s:3:"㈀";s:5:"(ᄀ)";s:3:"㈁";s:5:"(ᄂ)";s:3:"㈂";s:5:"(ᄃ)";s:3:"㈃";s:5:"(ᄅ)";s:3:"㈄";s:5:"(ᄆ)";s:3:"㈅";s:5:"(ᄇ)";s:3:"㈆";s:5:"(ᄉ)";s:3:"㈇";s:5:"(ᄋ)";s:3:"㈈";s:5:"(ᄌ)";s:3:"㈉";s:5:"(ᄎ)";s:3:"㈊";s:5:"(ᄏ)";s:3:"㈋";s:5:"(ᄐ)";s:3:"㈌";s:5:"(ᄑ)";s:3:"㈍";s:5:"(ᄒ)";s:3:"㈎";s:8:"(가)";s:3:"㈏";s:8:"(나)";s:3:"㈐";s:8:"(다)";s:3:"㈑";s:8:"(라)";s:3:"㈒";s:8:"(마)";s:3:"㈓";s:8:"(바)";s:3:"㈔";s:8:"(사)";s:3:"㈕";s:8:"(아)";s:3:"㈖";s:8:"(자)";s:3:"㈗";s:8:"(차)";s:3:"㈘";s:8:"(카)";s:3:"㈙";s:8:"(타)";s:3:"㈚";s:8:"(파)";s:3:"㈛";s:8:"(하)";s:3:"㈜";s:8:"(주)";s:3:"㈝";s:17:"(오전)";s:3:"㈞";s:14:"(오후)";s:3:"㈠";s:5:"(一)";s:3:"㈡";s:5:"(二)";s:3:"㈢";s:5:"(三)";s:3:"㈣";s:5:"(四)";s:3:"㈤";s:5:"(五)";s:3:"㈥";s:5:"(六)";s:3:"㈦";s:5:"(七)";s:3:"㈧";s:5:"(八)";s:3:"㈨";s:5:"(九)";s:3:"㈩";s:5:"(十)";s:3:"㈪";s:5:"(月)";s:3:"㈫";s:5:"(火)";s:3:"㈬";s:5:"(水)";s:3:"㈭";s:5:"(木)";s:3:"㈮";s:5:"(金)";s:3:"㈯";s:5:"(土)";s:3:"㈰";s:5:"(日)";s:3:"㈱";s:5:"(株)";s:3:"㈲";s:5:"(有)";s:3:"㈳";s:5:"(社)";s:3:"㈴";s:5:"(名)";s:3:"㈵";s:5:"(特)";s:3:"㈶";s:5:"(財)";s:3:"㈷";s:5:"(祝)";s:3:"㈸";s:5:"(労)";s:3:"㈹";s:5:"(代)";s:3:"㈺";s:5:"(呼)";s:3:"㈻";s:5:"(学)";s:3:"㈼";s:5:"(監)";s:3:"㈽";s:5:"(企)";s:3:"㈾";s:5:"(資)";s:3:"㈿";s:5:"(協)";s:3:"㉀";s:5:"(祭)";s:3:"㉁";s:5:"(休)";s:3:"㉂";s:5:"(自)";s:3:"㉃";s:5:"(至)";s:3:"㉄";s:3:"問";s:3:"㉅";s:3:"幼";s:3:"㉆";s:3:"文";s:3:"㉇";s:3:"箏";s:3:"㉐";s:3:"PTE";s:3:"㉑";s:2:"21";s:3:"㉒";s:2:"22";s:3:"㉓";s:2:"23";s:3:"㉔";s:2:"24";s:3:"㉕";s:2:"25";s:3:"㉖";s:2:"26";s:3:"㉗";s:2:"27";s:3:"㉘";s:2:"28";s:3:"㉙";s:2:"29";s:3:"㉚";s:2:"30";s:3:"㉛";s:2:"31";s:3:"㉜";s:2:"32";s:3:"㉝";s:2:"33";s:3:"㉞";s:2:"34";s:3:"㉟";s:2:"35";s:3:"㉠";s:3:"ᄀ";s:3:"㉡";s:3:"ᄂ";s:3:"㉢";s:3:"ᄃ";s:3:"㉣";s:3:"ᄅ";s:3:"㉤";s:3:"ᄆ";s:3:"㉥";s:3:"ᄇ";s:3:"㉦";s:3:"ᄉ";s:3:"㉧";s:3:"ᄋ";s:3:"㉨";s:3:"ᄌ";s:3:"㉩";s:3:"ᄎ";s:3:"㉪";s:3:"ᄏ";s:3:"㉫";s:3:"ᄐ";s:3:"㉬";s:3:"ᄑ";s:3:"㉭";s:3:"ᄒ";s:3:"㉮";s:6:"가";s:3:"㉯";s:6:"나";s:3:"㉰";s:6:"다";s:3:"㉱";s:6:"라";s:3:"㉲";s:6:"마";s:3:"㉳";s:6:"바";s:3:"㉴";s:6:"사";s:3:"㉵";s:6:"아";s:3:"㉶";s:6:"자";s:3:"㉷";s:6:"차";s:3:"㉸";s:6:"카";s:3:"㉹";s:6:"타";s:3:"㉺";s:6:"파";s:3:"㉻";s:6:"하";s:3:"㉼";s:15:"참고";s:3:"㉽";s:12:"주의";s:3:"㉾";s:6:"우";s:3:"㊀";s:3:"一";s:3:"㊁";s:3:"二";s:3:"㊂";s:3:"三";s:3:"㊃";s:3:"四";s:3:"㊄";s:3:"五";s:3:"㊅";s:3:"六";s:3:"㊆";s:3:"七";s:3:"㊇";s:3:"八";s:3:"㊈";s:3:"九";s:3:"㊉";s:3:"十";s:3:"㊊";s:3:"月";s:3:"㊋";s:3:"火";s:3:"㊌";s:3:"水";s:3:"㊍";s:3:"木";s:3:"㊎";s:3:"金";s:3:"㊏";s:3:"土";s:3:"㊐";s:3:"日";s:3:"㊑";s:3:"株";s:3:"㊒";s:3:"有";s:3:"㊓";s:3:"社";s:3:"㊔";s:3:"名";s:3:"㊕";s:3:"特";s:3:"㊖";s:3:"財";s:3:"㊗";s:3:"祝";s:3:"㊘";s:3:"労";s:3:"㊙";s:3:"秘";s:3:"㊚";s:3:"男";s:3:"㊛";s:3:"女";s:3:"㊜";s:3:"適";s:3:"㊝";s:3:"優";s:3:"㊞";s:3:"印";s:3:"㊟";s:3:"注";s:3:"㊠";s:3:"項";s:3:"㊡";s:3:"休";s:3:"㊢";s:3:"写";s:3:"㊣";s:3:"正";s:3:"㊤";s:3:"上";s:3:"㊥";s:3:"中";s:3:"㊦";s:3:"下";s:3:"㊧";s:3:"左";s:3:"㊨";s:3:"右";s:3:"㊩";s:3:"医";s:3:"㊪";s:3:"宗";s:3:"㊫";s:3:"学";s:3:"㊬";s:3:"監";s:3:"㊭";s:3:"企";s:3:"㊮";s:3:"資";s:3:"㊯";s:3:"協";s:3:"㊰";s:3:"夜";s:3:"㊱";s:2:"36";s:3:"㊲";s:2:"37";s:3:"㊳";s:2:"38";s:3:"㊴";s:2:"39";s:3:"㊵";s:2:"40";s:3:"㊶";s:2:"41";s:3:"㊷";s:2:"42";s:3:"㊸";s:2:"43";s:3:"㊹";s:2:"44";s:3:"㊺";s:2:"45";s:3:"㊻";s:2:"46";s:3:"㊼";s:2:"47";s:3:"㊽";s:2:"48";s:3:"㊾";s:2:"49";s:3:"㊿";s:2:"50";s:3:"㋀";s:4:"1月";s:3:"㋁";s:4:"2月";s:3:"㋂";s:4:"3月";s:3:"㋃";s:4:"4月";s:3:"㋄";s:4:"5月";s:3:"㋅";s:4:"6月";s:3:"㋆";s:4:"7月";s:3:"㋇";s:4:"8月";s:3:"㋈";s:4:"9月";s:3:"㋉";s:5:"10月";s:3:"㋊";s:5:"11月";s:3:"㋋";s:5:"12月";s:3:"㋌";s:2:"Hg";s:3:"㋍";s:3:"erg";s:3:"㋎";s:2:"eV";s:3:"㋏";s:3:"LTD";s:3:"㋐";s:3:"ア";s:3:"㋑";s:3:"イ";s:3:"㋒";s:3:"ウ";s:3:"㋓";s:3:"エ";s:3:"㋔";s:3:"オ";s:3:"㋕";s:3:"カ";s:3:"㋖";s:3:"キ";s:3:"㋗";s:3:"ク";s:3:"㋘";s:3:"ケ";s:3:"㋙";s:3:"コ";s:3:"㋚";s:3:"サ";s:3:"㋛";s:3:"シ";s:3:"㋜";s:3:"ス";s:3:"㋝";s:3:"セ";s:3:"㋞";s:3:"ソ";s:3:"㋟";s:3:"タ";s:3:"㋠";s:3:"チ";s:3:"㋡";s:3:"ツ";s:3:"㋢";s:3:"テ";s:3:"㋣";s:3:"ト";s:3:"㋤";s:3:"ナ";s:3:"㋥";s:3:"ニ";s:3:"㋦";s:3:"ヌ";s:3:"㋧";s:3:"ネ";s:3:"㋨";s:3:"ノ";s:3:"㋩";s:3:"ハ";s:3:"㋪";s:3:"ヒ";s:3:"㋫";s:3:"フ";s:3:"㋬";s:3:"ヘ";s:3:"㋭";s:3:"ホ";s:3:"㋮";s:3:"マ";s:3:"㋯";s:3:"ミ";s:3:"㋰";s:3:"ム";s:3:"㋱";s:3:"メ";s:3:"㋲";s:3:"モ";s:3:"㋳";s:3:"ヤ";s:3:"㋴";s:3:"ユ";s:3:"㋵";s:3:"ヨ";s:3:"㋶";s:3:"ラ";s:3:"㋷";s:3:"リ";s:3:"㋸";s:3:"ル";s:3:"㋹";s:3:"レ";s:3:"㋺";s:3:"ロ";s:3:"㋻";s:3:"ワ";s:3:"㋼";s:3:"ヰ";s:3:"㋽";s:3:"ヱ";s:3:"㋾";s:3:"ヲ";s:3:"㌀";s:15:"アパート";s:3:"㌁";s:12:"アルファ";s:3:"㌂";s:15:"アンペア";s:3:"㌃";s:9:"アール";s:3:"㌄";s:15:"イニング";s:3:"㌅";s:9:"インチ";s:3:"㌆";s:9:"ウォン";s:3:"㌇";s:18:"エスクード";s:3:"㌈";s:12:"エーカー";s:3:"㌉";s:9:"オンス";s:3:"㌊";s:9:"オーム";s:3:"㌋";s:9:"カイリ";s:3:"㌌";s:12:"カラット";s:3:"㌍";s:12:"カロリー";s:3:"㌎";s:12:"ガロン";s:3:"㌏";s:12:"ガンマ";s:3:"㌐";s:12:"ギガ";s:3:"㌑";s:12:"ギニー";s:3:"㌒";s:12:"キュリー";s:3:"㌓";s:18:"ギルダー";s:3:"㌔";s:6:"キロ";s:3:"㌕";s:18:"キログラム";s:3:"㌖";s:18:"キロメートル";s:3:"㌗";s:15:"キロワット";s:3:"㌘";s:12:"グラム";s:3:"㌙";s:18:"グラムトン";s:3:"㌚";s:18:"クルゼイロ";s:3:"㌛";s:12:"クローネ";s:3:"㌜";s:9:"ケース";s:3:"㌝";s:9:"コルナ";s:3:"㌞";s:12:"コーポ";s:3:"㌟";s:12:"サイクル";s:3:"㌠";s:15:"サンチーム";s:3:"㌡";s:15:"シリング";s:3:"㌢";s:9:"センチ";s:3:"㌣";s:9:"セント";s:3:"㌤";s:12:"ダース";s:3:"㌥";s:9:"デシ";s:3:"㌦";s:9:"ドル";s:3:"㌧";s:6:"トン";s:3:"㌨";s:6:"ナノ";s:3:"㌩";s:9:"ノット";s:3:"㌪";s:9:"ハイツ";s:3:"㌫";s:18:"パーセント";s:3:"㌬";s:12:"パーツ";s:3:"㌭";s:15:"バーレル";s:3:"㌮";s:18:"ピアストル";s:3:"㌯";s:12:"ピクル";s:3:"㌰";s:9:"ピコ";s:3:"㌱";s:9:"ビル";s:3:"㌲";s:18:"ファラッド";s:3:"㌳";s:12:"フィート";s:3:"㌴";s:18:"ブッシェル";s:3:"㌵";s:9:"フラン";s:3:"㌶";s:15:"ヘクタール";s:3:"㌷";s:9:"ペソ";s:3:"㌸";s:12:"ペニヒ";s:3:"㌹";s:9:"ヘルツ";s:3:"㌺";s:12:"ペンス";s:3:"㌻";s:15:"ページ";s:3:"㌼";s:12:"ベータ";s:3:"㌽";s:15:"ポイント";s:3:"㌾";s:12:"ボルト";s:3:"㌿";s:6:"ホン";s:3:"㍀";s:15:"ポンド";s:3:"㍁";s:9:"ホール";s:3:"㍂";s:9:"ホーン";s:3:"㍃";s:12:"マイクロ";s:3:"㍄";s:9:"マイル";s:3:"㍅";s:9:"マッハ";s:3:"㍆";s:9:"マルク";s:3:"㍇";s:15:"マンション";s:3:"㍈";s:12:"ミクロン";s:3:"㍉";s:6:"ミリ";s:3:"㍊";s:18:"ミリバール";s:3:"㍋";s:9:"メガ";s:3:"㍌";s:15:"メガトン";s:3:"㍍";s:12:"メートル";s:3:"㍎";s:12:"ヤード";s:3:"㍏";s:9:"ヤール";s:3:"㍐";s:9:"ユアン";s:3:"㍑";s:12:"リットル";s:3:"㍒";s:6:"リラ";s:3:"㍓";s:12:"ルピー";s:3:"㍔";s:15:"ルーブル";s:3:"㍕";s:6:"レム";s:3:"㍖";s:18:"レントゲン";s:3:"㍗";s:9:"ワット";s:3:"㍘";s:4:"0点";s:3:"㍙";s:4:"1点";s:3:"㍚";s:4:"2点";s:3:"㍛";s:4:"3点";s:3:"㍜";s:4:"4点";s:3:"㍝";s:4:"5点";s:3:"㍞";s:4:"6点";s:3:"㍟";s:4:"7点";s:3:"㍠";s:4:"8点";s:3:"㍡";s:4:"9点";s:3:"㍢";s:5:"10点";s:3:"㍣";s:5:"11点";s:3:"㍤";s:5:"12点";s:3:"㍥";s:5:"13点";s:3:"㍦";s:5:"14点";s:3:"㍧";s:5:"15点";s:3:"㍨";s:5:"16点";s:3:"㍩";s:5:"17点";s:3:"㍪";s:5:"18点";s:3:"㍫";s:5:"19点";s:3:"㍬";s:5:"20点";s:3:"㍭";s:5:"21点";s:3:"㍮";s:5:"22点";s:3:"㍯";s:5:"23点";s:3:"㍰";s:5:"24点";s:3:"㍱";s:3:"hPa";s:3:"㍲";s:2:"da";s:3:"㍳";s:2:"AU";s:3:"㍴";s:3:"bar";s:3:"㍵";s:2:"oV";s:3:"㍶";s:2:"pc";s:3:"㍷";s:2:"dm";s:3:"㍸";s:3:"dm2";s:3:"㍹";s:3:"dm3";s:3:"㍺";s:2:"IU";s:3:"㍻";s:6:"平成";s:3:"㍼";s:6:"昭和";s:3:"㍽";s:6:"大正";s:3:"㍾";s:6:"明治";s:3:"㍿";s:12:"株式会社";s:3:"㎀";s:2:"pA";s:3:"㎁";s:2:"nA";s:3:"㎂";s:3:"μA";s:3:"㎃";s:2:"mA";s:3:"㎄";s:2:"kA";s:3:"㎅";s:2:"KB";s:3:"㎆";s:2:"MB";s:3:"㎇";s:2:"GB";s:3:"㎈";s:3:"cal";s:3:"㎉";s:4:"kcal";s:3:"㎊";s:2:"pF";s:3:"㎋";s:2:"nF";s:3:"㎌";s:3:"μF";s:3:"㎍";s:3:"μg";s:3:"㎎";s:2:"mg";s:3:"㎏";s:2:"kg";s:3:"㎐";s:2:"Hz";s:3:"㎑";s:3:"kHz";s:3:"㎒";s:3:"MHz";s:3:"㎓";s:3:"GHz";s:3:"㎔";s:3:"THz";s:3:"㎕";s:3:"μl";s:3:"㎖";s:2:"ml";s:3:"㎗";s:2:"dl";s:3:"㎘";s:2:"kl";s:3:"㎙";s:2:"fm";s:3:"㎚";s:2:"nm";s:3:"㎛";s:3:"μm";s:3:"㎜";s:2:"mm";s:3:"㎝";s:2:"cm";s:3:"㎞";s:2:"km";s:3:"㎟";s:3:"mm2";s:3:"㎠";s:3:"cm2";s:3:"㎡";s:2:"m2";s:3:"㎢";s:3:"km2";s:3:"㎣";s:3:"mm3";s:3:"㎤";s:3:"cm3";s:3:"㎥";s:2:"m3";s:3:"㎦";s:3:"km3";s:3:"㎧";s:5:"m∕s";s:3:"㎨";s:6:"m∕s2";s:3:"㎩";s:2:"Pa";s:3:"㎪";s:3:"kPa";s:3:"㎫";s:3:"MPa";s:3:"㎬";s:3:"GPa";s:3:"㎭";s:3:"rad";s:3:"㎮";s:7:"rad∕s";s:3:"㎯";s:8:"rad∕s2";s:3:"㎰";s:2:"ps";s:3:"㎱";s:2:"ns";s:3:"㎲";s:3:"μs";s:3:"㎳";s:2:"ms";s:3:"㎴";s:2:"pV";s:3:"㎵";s:2:"nV";s:3:"㎶";s:3:"μV";s:3:"㎷";s:2:"mV";s:3:"㎸";s:2:"kV";s:3:"㎹";s:2:"MV";s:3:"㎺";s:2:"pW";s:3:"㎻";s:2:"nW";s:3:"㎼";s:3:"μW";s:3:"㎽";s:2:"mW";s:3:"㎾";s:2:"kW";s:3:"㎿";s:2:"MW";s:3:"㏀";s:3:"kΩ";s:3:"㏁";s:3:"MΩ";s:3:"㏂";s:4:"a.m.";s:3:"㏃";s:2:"Bq";s:3:"㏄";s:2:"cc";s:3:"㏅";s:2:"cd";s:3:"㏆";s:6:"C∕kg";s:3:"㏇";s:3:"Co.";s:3:"㏈";s:2:"dB";s:3:"㏉";s:2:"Gy";s:3:"㏊";s:2:"ha";s:3:"㏋";s:2:"HP";s:3:"㏌";s:2:"in";s:3:"㏍";s:2:"KK";s:3:"㏎";s:2:"KM";s:3:"㏏";s:2:"kt";s:3:"㏐";s:2:"lm";s:3:"㏑";s:2:"ln";s:3:"㏒";s:3:"log";s:3:"㏓";s:2:"lx";s:3:"㏔";s:2:"mb";s:3:"㏕";s:3:"mil";s:3:"㏖";s:3:"mol";s:3:"㏗";s:2:"PH";s:3:"㏘";s:4:"p.m.";s:3:"㏙";s:3:"PPM";s:3:"㏚";s:2:"PR";s:3:"㏛";s:2:"sr";s:3:"㏜";s:2:"Sv";s:3:"㏝";s:2:"Wb";s:3:"㏞";s:5:"V∕m";s:3:"㏟";s:5:"A∕m";s:3:"㏠";s:4:"1日";s:3:"㏡";s:4:"2日";s:3:"㏢";s:4:"3日";s:3:"㏣";s:4:"4日";s:3:"㏤";s:4:"5日";s:3:"㏥";s:4:"6日";s:3:"㏦";s:4:"7日";s:3:"㏧";s:4:"8日";s:3:"㏨";s:4:"9日";s:3:"㏩";s:5:"10日";s:3:"㏪";s:5:"11日";s:3:"㏫";s:5:"12日";s:3:"㏬";s:5:"13日";s:3:"㏭";s:5:"14日";s:3:"㏮";s:5:"15日";s:3:"㏯";s:5:"16日";s:3:"㏰";s:5:"17日";s:3:"㏱";s:5:"18日";s:3:"㏲";s:5:"19日";s:3:"㏳";s:5:"20日";s:3:"㏴";s:5:"21日";s:3:"㏵";s:5:"22日";s:3:"㏶";s:5:"23日";s:3:"㏷";s:5:"24日";s:3:"㏸";s:5:"25日";s:3:"㏹";s:5:"26日";s:3:"㏺";s:5:"27日";s:3:"㏻";s:5:"28日";s:3:"㏼";s:5:"29日";s:3:"㏽";s:5:"30日";s:3:"㏾";s:5:"31日";s:3:"㏿";s:3:"gal";s:3:"ꝰ";s:3:"ꝯ";s:3:"豈";s:3:"豈";s:3:"更";s:3:"更";s:3:"車";s:3:"車";s:3:"賈";s:3:"賈";s:3:"滑";s:3:"滑";s:3:"串";s:3:"串";s:3:"句";s:3:"句";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"契";s:3:"契";s:3:"金";s:3:"金";s:3:"喇";s:3:"喇";s:3:"奈";s:3:"奈";s:3:"懶";s:3:"懶";s:3:"癩";s:3:"癩";s:3:"羅";s:3:"羅";s:3:"蘿";s:3:"蘿";s:3:"螺";s:3:"螺";s:3:"裸";s:3:"裸";s:3:"邏";s:3:"邏";s:3:"樂";s:3:"樂";s:3:"洛";s:3:"洛";s:3:"烙";s:3:"烙";s:3:"珞";s:3:"珞";s:3:"落";s:3:"落";s:3:"酪";s:3:"酪";s:3:"駱";s:3:"駱";s:3:"亂";s:3:"亂";s:3:"卵";s:3:"卵";s:3:"欄";s:3:"欄";s:3:"爛";s:3:"爛";s:3:"蘭";s:3:"蘭";s:3:"鸞";s:3:"鸞";s:3:"嵐";s:3:"嵐";s:3:"濫";s:3:"濫";s:3:"藍";s:3:"藍";s:3:"襤";s:3:"襤";s:3:"拉";s:3:"拉";s:3:"臘";s:3:"臘";s:3:"蠟";s:3:"蠟";s:3:"廊";s:3:"廊";s:3:"朗";s:3:"朗";s:3:"浪";s:3:"浪";s:3:"狼";s:3:"狼";s:3:"郎";s:3:"郎";s:3:"來";s:3:"來";s:3:"冷";s:3:"冷";s:3:"勞";s:3:"勞";s:3:"擄";s:3:"擄";s:3:"櫓";s:3:"櫓";s:3:"爐";s:3:"爐";s:3:"盧";s:3:"盧";s:3:"老";s:3:"老";s:3:"蘆";s:3:"蘆";s:3:"虜";s:3:"虜";s:3:"路";s:3:"路";s:3:"露";s:3:"露";s:3:"魯";s:3:"魯";s:3:"鷺";s:3:"鷺";s:3:"碌";s:3:"碌";s:3:"祿";s:3:"祿";s:3:"綠";s:3:"綠";s:3:"菉";s:3:"菉";s:3:"錄";s:3:"錄";s:3:"鹿";s:3:"鹿";s:3:"論";s:3:"論";s:3:"壟";s:3:"壟";s:3:"弄";s:3:"弄";s:3:"籠";s:3:"籠";s:3:"聾";s:3:"聾";s:3:"牢";s:3:"牢";s:3:"磊";s:3:"磊";s:3:"賂";s:3:"賂";s:3:"雷";s:3:"雷";s:3:"壘";s:3:"壘";s:3:"屢";s:3:"屢";s:3:"樓";s:3:"樓";s:3:"淚";s:3:"淚";s:3:"漏";s:3:"漏";s:3:"累";s:3:"累";s:3:"縷";s:3:"縷";s:3:"陋";s:3:"陋";s:3:"勒";s:3:"勒";s:3:"肋";s:3:"肋";s:3:"凜";s:3:"凜";s:3:"凌";s:3:"凌";s:3:"稜";s:3:"稜";s:3:"綾";s:3:"綾";s:3:"菱";s:3:"菱";s:3:"陵";s:3:"陵";s:3:"讀";s:3:"讀";s:3:"拏";s:3:"拏";s:3:"樂";s:3:"樂";s:3:"諾";s:3:"諾";s:3:"丹";s:3:"丹";s:3:"寧";s:3:"寧";s:3:"怒";s:3:"怒";s:3:"率";s:3:"率";s:3:"異";s:3:"異";s:3:"北";s:3:"北";s:3:"磻";s:3:"磻";s:3:"便";s:3:"便";s:3:"復";s:3:"復";s:3:"不";s:3:"不";s:3:"泌";s:3:"泌";s:3:"數";s:3:"數";s:3:"索";s:3:"索";s:3:"參";s:3:"參";s:3:"塞";s:3:"塞";s:3:"省";s:3:"省";s:3:"葉";s:3:"葉";s:3:"說";s:3:"說";s:3:"殺";s:3:"殺";s:3:"辰";s:3:"辰";s:3:"沈";s:3:"沈";s:3:"拾";s:3:"拾";s:3:"若";s:3:"若";s:3:"掠";s:3:"掠";s:3:"略";s:3:"略";s:3:"亮";s:3:"亮";s:3:"兩";s:3:"兩";s:3:"凉";s:3:"凉";s:3:"梁";s:3:"梁";s:3:"糧";s:3:"糧";s:3:"良";s:3:"良";s:3:"諒";s:3:"諒";s:3:"量";s:3:"量";s:3:"勵";s:3:"勵";s:3:"呂";s:3:"呂";s:3:"女";s:3:"女";s:3:"廬";s:3:"廬";s:3:"旅";s:3:"旅";s:3:"濾";s:3:"濾";s:3:"礪";s:3:"礪";s:3:"閭";s:3:"閭";s:3:"驪";s:3:"驪";s:3:"麗";s:3:"麗";s:3:"黎";s:3:"黎";s:3:"力";s:3:"力";s:3:"曆";s:3:"曆";s:3:"歷";s:3:"歷";s:3:"轢";s:3:"轢";s:3:"年";s:3:"年";s:3:"憐";s:3:"憐";s:3:"戀";s:3:"戀";s:3:"撚";s:3:"撚";s:3:"漣";s:3:"漣";s:3:"煉";s:3:"煉";s:3:"璉";s:3:"璉";s:3:"秊";s:3:"秊";s:3:"練";s:3:"練";s:3:"聯";s:3:"聯";s:3:"輦";s:3:"輦";s:3:"蓮";s:3:"蓮";s:3:"連";s:3:"連";s:3:"鍊";s:3:"鍊";s:3:"列";s:3:"列";s:3:"劣";s:3:"劣";s:3:"咽";s:3:"咽";s:3:"烈";s:3:"烈";s:3:"裂";s:3:"裂";s:3:"說";s:3:"說";s:3:"廉";s:3:"廉";s:3:"念";s:3:"念";s:3:"捻";s:3:"捻";s:3:"殮";s:3:"殮";s:3:"簾";s:3:"簾";s:3:"獵";s:3:"獵";s:3:"令";s:3:"令";s:3:"囹";s:3:"囹";s:3:"寧";s:3:"寧";s:3:"嶺";s:3:"嶺";s:3:"怜";s:3:"怜";s:3:"玲";s:3:"玲";s:3:"瑩";s:3:"瑩";s:3:"羚";s:3:"羚";s:3:"聆";s:3:"聆";s:3:"鈴";s:3:"鈴";s:3:"零";s:3:"零";s:3:"靈";s:3:"靈";s:3:"領";s:3:"領";s:3:"例";s:3:"例";s:3:"禮";s:3:"禮";s:3:"醴";s:3:"醴";s:3:"隸";s:3:"隸";s:3:"惡";s:3:"惡";s:3:"了";s:3:"了";s:3:"僚";s:3:"僚";s:3:"寮";s:3:"寮";s:3:"尿";s:3:"尿";s:3:"料";s:3:"料";s:3:"樂";s:3:"樂";s:3:"燎";s:3:"燎";s:3:"療";s:3:"療";s:3:"蓼";s:3:"蓼";s:3:"遼";s:3:"遼";s:3:"龍";s:3:"龍";s:3:"暈";s:3:"暈";s:3:"阮";s:3:"阮";s:3:"劉";s:3:"劉";s:3:"杻";s:3:"杻";s:3:"柳";s:3:"柳";s:3:"流";s:3:"流";s:3:"溜";s:3:"溜";s:3:"琉";s:3:"琉";s:3:"留";s:3:"留";s:3:"硫";s:3:"硫";s:3:"紐";s:3:"紐";s:3:"類";s:3:"類";s:3:"六";s:3:"六";s:3:"戮";s:3:"戮";s:3:"陸";s:3:"陸";s:3:"倫";s:3:"倫";s:3:"崙";s:3:"崙";s:3:"淪";s:3:"淪";s:3:"輪";s:3:"輪";s:3:"律";s:3:"律";s:3:"慄";s:3:"慄";s:3:"栗";s:3:"栗";s:3:"率";s:3:"率";s:3:"隆";s:3:"隆";s:3:"利";s:3:"利";s:3:"吏";s:3:"吏";s:3:"履";s:3:"履";s:3:"易";s:3:"易";s:3:"李";s:3:"李";s:3:"梨";s:3:"梨";s:3:"泥";s:3:"泥";s:3:"理";s:3:"理";s:3:"痢";s:3:"痢";s:3:"罹";s:3:"罹";s:3:"裏";s:3:"裏";s:3:"裡";s:3:"裡";s:3:"里";s:3:"里";s:3:"離";s:3:"離";s:3:"匿";s:3:"匿";s:3:"溺";s:3:"溺";s:3:"吝";s:3:"吝";s:3:"燐";s:3:"燐";s:3:"璘";s:3:"璘";s:3:"藺";s:3:"藺";s:3:"隣";s:3:"隣";s:3:"鱗";s:3:"鱗";s:3:"麟";s:3:"麟";s:3:"林";s:3:"林";s:3:"淋";s:3:"淋";s:3:"臨";s:3:"臨";s:3:"立";s:3:"立";s:3:"笠";s:3:"笠";s:3:"粒";s:3:"粒";s:3:"狀";s:3:"狀";s:3:"炙";s:3:"炙";s:3:"識";s:3:"識";s:3:"什";s:3:"什";s:3:"茶";s:3:"茶";s:3:"刺";s:3:"刺";s:3:"切";s:3:"切";s:3:"度";s:3:"度";s:3:"拓";s:3:"拓";s:3:"糖";s:3:"糖";s:3:"宅";s:3:"宅";s:3:"洞";s:3:"洞";s:3:"暴";s:3:"暴";s:3:"輻";s:3:"輻";s:3:"行";s:3:"行";s:3:"降";s:3:"降";s:3:"見";s:3:"見";s:3:"廓";s:3:"廓";s:3:"兀";s:3:"兀";s:3:"嗀";s:3:"嗀";s:3:"塚";s:3:"塚";s:3:"晴";s:3:"晴";s:3:"凞";s:3:"凞";s:3:"猪";s:3:"猪";s:3:"益";s:3:"益";s:3:"礼";s:3:"礼";s:3:"神";s:3:"神";s:3:"祥";s:3:"祥";s:3:"福";s:3:"福";s:3:"靖";s:3:"靖";s:3:"精";s:3:"精";s:3:"羽";s:3:"羽";s:3:"蘒";s:3:"蘒";s:3:"諸";s:3:"諸";s:3:"逸";s:3:"逸";s:3:"都";s:3:"都";s:3:"飯";s:3:"飯";s:3:"飼";s:3:"飼";s:3:"館";s:3:"館";s:3:"鶴";s:3:"鶴";s:3:"侮";s:3:"侮";s:3:"僧";s:3:"僧";s:3:"免";s:3:"免";s:3:"勉";s:3:"勉";s:3:"勤";s:3:"勤";s:3:"卑";s:3:"卑";s:3:"喝";s:3:"喝";s:3:"嘆";s:3:"嘆";s:3:"器";s:3:"器";s:3:"塀";s:3:"塀";s:3:"墨";s:3:"墨";s:3:"層";s:3:"層";s:3:"屮";s:3:"屮";s:3:"悔";s:3:"悔";s:3:"慨";s:3:"慨";s:3:"憎";s:3:"憎";s:3:"懲";s:3:"懲";s:3:"敏";s:3:"敏";s:3:"既";s:3:"既";s:3:"暑";s:3:"暑";s:3:"梅";s:3:"梅";s:3:"海";s:3:"海";s:3:"渚";s:3:"渚";s:3:"漢";s:3:"漢";s:3:"煮";s:3:"煮";s:3:"爫";s:3:"爫";s:3:"琢";s:3:"琢";s:3:"碑";s:3:"碑";s:3:"社";s:3:"社";s:3:"祉";s:3:"祉";s:3:"祈";s:3:"祈";s:3:"祐";s:3:"祐";s:3:"祖";s:3:"祖";s:3:"祝";s:3:"祝";s:3:"禍";s:3:"禍";s:3:"禎";s:3:"禎";s:3:"穀";s:3:"穀";s:3:"突";s:3:"突";s:3:"節";s:3:"節";s:3:"練";s:3:"練";s:3:"縉";s:3:"縉";s:3:"繁";s:3:"繁";s:3:"署";s:3:"署";s:3:"者";s:3:"者";s:3:"臭";s:3:"臭";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"著";s:3:"著";s:3:"褐";s:3:"褐";s:3:"視";s:3:"視";s:3:"謁";s:3:"謁";s:3:"謹";s:3:"謹";s:3:"賓";s:3:"賓";s:3:"贈";s:3:"贈";s:3:"辶";s:3:"辶";s:3:"逸";s:3:"逸";s:3:"難";s:3:"難";s:3:"響";s:3:"響";s:3:"頻";s:3:"頻";s:3:"恵";s:3:"恵";s:3:"𤋮";s:4:"𤋮";s:3:"舘";s:3:"舘";s:3:"並";s:3:"並";s:3:"况";s:3:"况";s:3:"全";s:3:"全";s:3:"侀";s:3:"侀";s:3:"充";s:3:"充";s:3:"冀";s:3:"冀";s:3:"勇";s:3:"勇";s:3:"勺";s:3:"勺";s:3:"喝";s:3:"喝";s:3:"啕";s:3:"啕";s:3:"喙";s:3:"喙";s:3:"嗢";s:3:"嗢";s:3:"塚";s:3:"塚";s:3:"墳";s:3:"墳";s:3:"奄";s:3:"奄";s:3:"奔";s:3:"奔";s:3:"婢";s:3:"婢";s:3:"嬨";s:3:"嬨";s:3:"廒";s:3:"廒";s:3:"廙";s:3:"廙";s:3:"彩";s:3:"彩";s:3:"徭";s:3:"徭";s:3:"惘";s:3:"惘";s:3:"慎";s:3:"慎";s:3:"愈";s:3:"愈";s:3:"憎";s:3:"憎";s:3:"慠";s:3:"慠";s:3:"懲";s:3:"懲";s:3:"戴";s:3:"戴";s:3:"揄";s:3:"揄";s:3:"搜";s:3:"搜";s:3:"摒";s:3:"摒";s:3:"敖";s:3:"敖";s:3:"晴";s:3:"晴";s:3:"朗";s:3:"朗";s:3:"望";s:3:"望";s:3:"杖";s:3:"杖";s:3:"歹";s:3:"歹";s:3:"殺";s:3:"殺";s:3:"流";s:3:"流";s:3:"滛";s:3:"滛";s:3:"滋";s:3:"滋";s:3:"漢";s:3:"漢";s:3:"瀞";s:3:"瀞";s:3:"煮";s:3:"煮";s:3:"瞧";s:3:"瞧";s:3:"爵";s:3:"爵";s:3:"犯";s:3:"犯";s:3:"猪";s:3:"猪";s:3:"瑱";s:3:"瑱";s:3:"甆";s:3:"甆";s:3:"画";s:3:"画";s:3:"瘝";s:3:"瘝";s:3:"瘟";s:3:"瘟";s:3:"益";s:3:"益";s:3:"盛";s:3:"盛";s:3:"直";s:3:"直";s:3:"睊";s:3:"睊";s:3:"着";s:3:"着";s:3:"磌";s:3:"磌";s:3:"窱";s:3:"窱";s:3:"節";s:3:"節";s:3:"类";s:3:"类";s:3:"絛";s:3:"絛";s:3:"練";s:3:"練";s:3:"缾";s:3:"缾";s:3:"者";s:3:"者";s:3:"荒";s:3:"荒";s:3:"華";s:3:"華";s:3:"蝹";s:3:"蝹";s:3:"襁";s:3:"襁";s:3:"覆";s:3:"覆";s:3:"視";s:3:"視";s:3:"調";s:3:"調";s:3:"諸";s:3:"諸";s:3:"請";s:3:"請";s:3:"謁";s:3:"謁";s:3:"諾";s:3:"諾";s:3:"諭";s:3:"諭";s:3:"謹";s:3:"謹";s:3:"變";s:3:"變";s:3:"贈";s:3:"贈";s:3:"輸";s:3:"輸";s:3:"遲";s:3:"遲";s:3:"醙";s:3:"醙";s:3:"鉶";s:3:"鉶";s:3:"陼";s:3:"陼";s:3:"難";s:3:"難";s:3:"靖";s:3:"靖";s:3:"韛";s:3:"韛";s:3:"響";s:3:"響";s:3:"頋";s:3:"頋";s:3:"頻";s:3:"頻";s:3:"鬒";s:3:"鬒";s:3:"龜";s:3:"龜";s:3:"𢡊";s:4:"𢡊";s:3:"𢡄";s:4:"𢡄";s:3:"𣏕";s:4:"𣏕";s:3:"㮝";s:3:"㮝";s:3:"䀘";s:3:"䀘";s:3:"䀹";s:3:"䀹";s:3:"𥉉";s:4:"𥉉";s:3:"𥳐";s:4:"𥳐";s:3:"𧻓";s:4:"𧻓";s:3:"齃";s:3:"齃";s:3:"龎";s:3:"龎";s:3:"ff";s:2:"ff";s:3:"fi";s:2:"fi";s:3:"fl";s:2:"fl";s:3:"ffi";s:3:"ffi";s:3:"ffl";s:3:"ffl";s:3:"ſt";s:2:"st";s:3:"st";s:2:"st";s:3:"ﬓ";s:4:"մն";s:3:"ﬔ";s:4:"մե";s:3:"ﬕ";s:4:"մի";s:3:"ﬖ";s:4:"վն";s:3:"ﬗ";s:4:"մխ";s:3:"יִ";s:4:"יִ";s:3:"ײַ";s:4:"ײַ";s:3:"ﬠ";s:2:"ע";s:3:"ﬡ";s:2:"א";s:3:"ﬢ";s:2:"ד";s:3:"ﬣ";s:2:"ה";s:3:"ﬤ";s:2:"כ";s:3:"ﬥ";s:2:"ל";s:3:"ﬦ";s:2:"ם";s:3:"ﬧ";s:2:"ר";s:3:"ﬨ";s:2:"ת";s:3:"﬩";s:1:"+";s:3:"שׁ";s:4:"שׁ";s:3:"שׂ";s:4:"שׂ";s:3:"שּׁ";s:6:"שּׁ";s:3:"שּׂ";s:6:"שּׂ";s:3:"אַ";s:4:"אַ";s:3:"אָ";s:4:"אָ";s:3:"אּ";s:4:"אּ";s:3:"בּ";s:4:"בּ";s:3:"גּ";s:4:"גּ";s:3:"דּ";s:4:"דּ";s:3:"הּ";s:4:"הּ";s:3:"וּ";s:4:"וּ";s:3:"זּ";s:4:"זּ";s:3:"טּ";s:4:"טּ";s:3:"יּ";s:4:"יּ";s:3:"ךּ";s:4:"ךּ";s:3:"כּ";s:4:"כּ";s:3:"לּ";s:4:"לּ";s:3:"מּ";s:4:"מּ";s:3:"נּ";s:4:"נּ";s:3:"סּ";s:4:"סּ";s:3:"ףּ";s:4:"ףּ";s:3:"פּ";s:4:"פּ";s:3:"צּ";s:4:"צּ";s:3:"קּ";s:4:"קּ";s:3:"רּ";s:4:"רּ";s:3:"שּ";s:4:"שּ";s:3:"תּ";s:4:"תּ";s:3:"וֹ";s:4:"וֹ";s:3:"בֿ";s:4:"בֿ";s:3:"כֿ";s:4:"כֿ";s:3:"פֿ";s:4:"פֿ";s:3:"ﭏ";s:4:"אל";s:3:"ﭐ";s:2:"ٱ";s:3:"ﭑ";s:2:"ٱ";s:3:"ﭒ";s:2:"ٻ";s:3:"ﭓ";s:2:"ٻ";s:3:"ﭔ";s:2:"ٻ";s:3:"ﭕ";s:2:"ٻ";s:3:"ﭖ";s:2:"پ";s:3:"ﭗ";s:2:"پ";s:3:"ﭘ";s:2:"پ";s:3:"ﭙ";s:2:"پ";s:3:"ﭚ";s:2:"ڀ";s:3:"ﭛ";s:2:"ڀ";s:3:"ﭜ";s:2:"ڀ";s:3:"ﭝ";s:2:"ڀ";s:3:"ﭞ";s:2:"ٺ";s:3:"ﭟ";s:2:"ٺ";s:3:"ﭠ";s:2:"ٺ";s:3:"ﭡ";s:2:"ٺ";s:3:"ﭢ";s:2:"ٿ";s:3:"ﭣ";s:2:"ٿ";s:3:"ﭤ";s:2:"ٿ";s:3:"ﭥ";s:2:"ٿ";s:3:"ﭦ";s:2:"ٹ";s:3:"ﭧ";s:2:"ٹ";s:3:"ﭨ";s:2:"ٹ";s:3:"ﭩ";s:2:"ٹ";s:3:"ﭪ";s:2:"ڤ";s:3:"ﭫ";s:2:"ڤ";s:3:"ﭬ";s:2:"ڤ";s:3:"ﭭ";s:2:"ڤ";s:3:"ﭮ";s:2:"ڦ";s:3:"ﭯ";s:2:"ڦ";s:3:"ﭰ";s:2:"ڦ";s:3:"ﭱ";s:2:"ڦ";s:3:"ﭲ";s:2:"ڄ";s:3:"ﭳ";s:2:"ڄ";s:3:"ﭴ";s:2:"ڄ";s:3:"ﭵ";s:2:"ڄ";s:3:"ﭶ";s:2:"ڃ";s:3:"ﭷ";s:2:"ڃ";s:3:"ﭸ";s:2:"ڃ";s:3:"ﭹ";s:2:"ڃ";s:3:"ﭺ";s:2:"چ";s:3:"ﭻ";s:2:"چ";s:3:"ﭼ";s:2:"چ";s:3:"ﭽ";s:2:"چ";s:3:"ﭾ";s:2:"ڇ";s:3:"ﭿ";s:2:"ڇ";s:3:"ﮀ";s:2:"ڇ";s:3:"ﮁ";s:2:"ڇ";s:3:"ﮂ";s:2:"ڍ";s:3:"ﮃ";s:2:"ڍ";s:3:"ﮄ";s:2:"ڌ";s:3:"ﮅ";s:2:"ڌ";s:3:"ﮆ";s:2:"ڎ";s:3:"ﮇ";s:2:"ڎ";s:3:"ﮈ";s:2:"ڈ";s:3:"ﮉ";s:2:"ڈ";s:3:"ﮊ";s:2:"ژ";s:3:"ﮋ";s:2:"ژ";s:3:"ﮌ";s:2:"ڑ";s:3:"ﮍ";s:2:"ڑ";s:3:"ﮎ";s:2:"ک";s:3:"ﮏ";s:2:"ک";s:3:"ﮐ";s:2:"ک";s:3:"ﮑ";s:2:"ک";s:3:"ﮒ";s:2:"گ";s:3:"ﮓ";s:2:"گ";s:3:"ﮔ";s:2:"گ";s:3:"ﮕ";s:2:"گ";s:3:"ﮖ";s:2:"ڳ";s:3:"ﮗ";s:2:"ڳ";s:3:"ﮘ";s:2:"ڳ";s:3:"ﮙ";s:2:"ڳ";s:3:"ﮚ";s:2:"ڱ";s:3:"ﮛ";s:2:"ڱ";s:3:"ﮜ";s:2:"ڱ";s:3:"ﮝ";s:2:"ڱ";s:3:"ﮞ";s:2:"ں";s:3:"ﮟ";s:2:"ں";s:3:"ﮠ";s:2:"ڻ";s:3:"ﮡ";s:2:"ڻ";s:3:"ﮢ";s:2:"ڻ";s:3:"ﮣ";s:2:"ڻ";s:3:"ﮤ";s:4:"ۀ";s:3:"ﮥ";s:4:"ۀ";s:3:"ﮦ";s:2:"ہ";s:3:"ﮧ";s:2:"ہ";s:3:"ﮨ";s:2:"ہ";s:3:"ﮩ";s:2:"ہ";s:3:"ﮪ";s:2:"ھ";s:3:"ﮫ";s:2:"ھ";s:3:"ﮬ";s:2:"ھ";s:3:"ﮭ";s:2:"ھ";s:3:"ﮮ";s:2:"ے";s:3:"ﮯ";s:2:"ے";s:3:"ﮰ";s:4:"ۓ";s:3:"ﮱ";s:4:"ۓ";s:3:"ﯓ";s:2:"ڭ";s:3:"ﯔ";s:2:"ڭ";s:3:"ﯕ";s:2:"ڭ";s:3:"ﯖ";s:2:"ڭ";s:3:"ﯗ";s:2:"ۇ";s:3:"ﯘ";s:2:"ۇ";s:3:"ﯙ";s:2:"ۆ";s:3:"ﯚ";s:2:"ۆ";s:3:"ﯛ";s:2:"ۈ";s:3:"ﯜ";s:2:"ۈ";s:3:"ﯝ";s:4:"ۇٴ";s:3:"ﯞ";s:2:"ۋ";s:3:"ﯟ";s:2:"ۋ";s:3:"ﯠ";s:2:"ۅ";s:3:"ﯡ";s:2:"ۅ";s:3:"ﯢ";s:2:"ۉ";s:3:"ﯣ";s:2:"ۉ";s:3:"ﯤ";s:2:"ې";s:3:"ﯥ";s:2:"ې";s:3:"ﯦ";s:2:"ې";s:3:"ﯧ";s:2:"ې";s:3:"ﯨ";s:2:"ى";s:3:"ﯩ";s:2:"ى";s:3:"ﯪ";s:6:"ئا";s:3:"ﯫ";s:6:"ئا";s:3:"ﯬ";s:6:"ئە";s:3:"ﯭ";s:6:"ئە";s:3:"ﯮ";s:6:"ئو";s:3:"ﯯ";s:6:"ئو";s:3:"ﯰ";s:6:"ئۇ";s:3:"ﯱ";s:6:"ئۇ";s:3:"ﯲ";s:6:"ئۆ";s:3:"ﯳ";s:6:"ئۆ";s:3:"ﯴ";s:6:"ئۈ";s:3:"ﯵ";s:6:"ئۈ";s:3:"ﯶ";s:6:"ئې";s:3:"ﯷ";s:6:"ئې";s:3:"ﯸ";s:6:"ئې";s:3:"ﯹ";s:6:"ئى";s:3:"ﯺ";s:6:"ئى";s:3:"ﯻ";s:6:"ئى";s:3:"ﯼ";s:2:"ی";s:3:"ﯽ";s:2:"ی";s:3:"ﯾ";s:2:"ی";s:3:"ﯿ";s:2:"ی";s:3:"ﰀ";s:6:"ئج";s:3:"ﰁ";s:6:"ئح";s:3:"ﰂ";s:6:"ئم";s:3:"ﰃ";s:6:"ئى";s:3:"ﰄ";s:6:"ئي";s:3:"ﰅ";s:4:"بج";s:3:"ﰆ";s:4:"بح";s:3:"ﰇ";s:4:"بخ";s:3:"ﰈ";s:4:"بم";s:3:"ﰉ";s:4:"بى";s:3:"ﰊ";s:4:"بي";s:3:"ﰋ";s:4:"تج";s:3:"ﰌ";s:4:"تح";s:3:"ﰍ";s:4:"تخ";s:3:"ﰎ";s:4:"تم";s:3:"ﰏ";s:4:"تى";s:3:"ﰐ";s:4:"تي";s:3:"ﰑ";s:4:"ثج";s:3:"ﰒ";s:4:"ثم";s:3:"ﰓ";s:4:"ثى";s:3:"ﰔ";s:4:"ثي";s:3:"ﰕ";s:4:"جح";s:3:"ﰖ";s:4:"جم";s:3:"ﰗ";s:4:"حج";s:3:"ﰘ";s:4:"حم";s:3:"ﰙ";s:4:"خج";s:3:"ﰚ";s:4:"خح";s:3:"ﰛ";s:4:"خم";s:3:"ﰜ";s:4:"سج";s:3:"ﰝ";s:4:"سح";s:3:"ﰞ";s:4:"سخ";s:3:"ﰟ";s:4:"سم";s:3:"ﰠ";s:4:"صح";s:3:"ﰡ";s:4:"صم";s:3:"ﰢ";s:4:"ضج";s:3:"ﰣ";s:4:"ضح";s:3:"ﰤ";s:4:"ضخ";s:3:"ﰥ";s:4:"ضم";s:3:"ﰦ";s:4:"طح";s:3:"ﰧ";s:4:"طم";s:3:"ﰨ";s:4:"ظم";s:3:"ﰩ";s:4:"عج";s:3:"ﰪ";s:4:"عم";s:3:"ﰫ";s:4:"غج";s:3:"ﰬ";s:4:"غم";s:3:"ﰭ";s:4:"فج";s:3:"ﰮ";s:4:"فح";s:3:"ﰯ";s:4:"فخ";s:3:"ﰰ";s:4:"فم";s:3:"ﰱ";s:4:"فى";s:3:"ﰲ";s:4:"في";s:3:"ﰳ";s:4:"قح";s:3:"ﰴ";s:4:"قم";s:3:"ﰵ";s:4:"قى";s:3:"ﰶ";s:4:"قي";s:3:"ﰷ";s:4:"كا";s:3:"ﰸ";s:4:"كج";s:3:"ﰹ";s:4:"كح";s:3:"ﰺ";s:4:"كخ";s:3:"ﰻ";s:4:"كل";s:3:"ﰼ";s:4:"كم";s:3:"ﰽ";s:4:"كى";s:3:"ﰾ";s:4:"كي";s:3:"ﰿ";s:4:"لج";s:3:"ﱀ";s:4:"لح";s:3:"ﱁ";s:4:"لخ";s:3:"ﱂ";s:4:"لم";s:3:"ﱃ";s:4:"لى";s:3:"ﱄ";s:4:"لي";s:3:"ﱅ";s:4:"مج";s:3:"ﱆ";s:4:"مح";s:3:"ﱇ";s:4:"مخ";s:3:"ﱈ";s:4:"مم";s:3:"ﱉ";s:4:"مى";s:3:"ﱊ";s:4:"مي";s:3:"ﱋ";s:4:"نج";s:3:"ﱌ";s:4:"نح";s:3:"ﱍ";s:4:"نخ";s:3:"ﱎ";s:4:"نم";s:3:"ﱏ";s:4:"نى";s:3:"ﱐ";s:4:"ني";s:3:"ﱑ";s:4:"هج";s:3:"ﱒ";s:4:"هم";s:3:"ﱓ";s:4:"هى";s:3:"ﱔ";s:4:"هي";s:3:"ﱕ";s:4:"يج";s:3:"ﱖ";s:4:"يح";s:3:"ﱗ";s:4:"يخ";s:3:"ﱘ";s:4:"يم";s:3:"ﱙ";s:4:"يى";s:3:"ﱚ";s:4:"يي";s:3:"ﱛ";s:4:"ذٰ";s:3:"ﱜ";s:4:"رٰ";s:3:"ﱝ";s:4:"ىٰ";s:3:"ﱞ";s:5:" ٌّ";s:3:"ﱟ";s:5:" ٍّ";s:3:"ﱠ";s:5:" َّ";s:3:"ﱡ";s:5:" ُّ";s:3:"ﱢ";s:5:" ِّ";s:3:"ﱣ";s:5:" ّٰ";s:3:"ﱤ";s:6:"ئر";s:3:"ﱥ";s:6:"ئز";s:3:"ﱦ";s:6:"ئم";s:3:"ﱧ";s:6:"ئن";s:3:"ﱨ";s:6:"ئى";s:3:"ﱩ";s:6:"ئي";s:3:"ﱪ";s:4:"بر";s:3:"ﱫ";s:4:"بز";s:3:"ﱬ";s:4:"بم";s:3:"ﱭ";s:4:"بن";s:3:"ﱮ";s:4:"بى";s:3:"ﱯ";s:4:"بي";s:3:"ﱰ";s:4:"تر";s:3:"ﱱ";s:4:"تز";s:3:"ﱲ";s:4:"تم";s:3:"ﱳ";s:4:"تن";s:3:"ﱴ";s:4:"تى";s:3:"ﱵ";s:4:"تي";s:3:"ﱶ";s:4:"ثر";s:3:"ﱷ";s:4:"ثز";s:3:"ﱸ";s:4:"ثم";s:3:"ﱹ";s:4:"ثن";s:3:"ﱺ";s:4:"ثى";s:3:"ﱻ";s:4:"ثي";s:3:"ﱼ";s:4:"فى";s:3:"ﱽ";s:4:"في";s:3:"ﱾ";s:4:"قى";s:3:"ﱿ";s:4:"قي";s:3:"ﲀ";s:4:"كا";s:3:"ﲁ";s:4:"كل";s:3:"ﲂ";s:4:"كم";s:3:"ﲃ";s:4:"كى";s:3:"ﲄ";s:4:"كي";s:3:"ﲅ";s:4:"لم";s:3:"ﲆ";s:4:"لى";s:3:"ﲇ";s:4:"لي";s:3:"ﲈ";s:4:"ما";s:3:"ﲉ";s:4:"مم";s:3:"ﲊ";s:4:"نر";s:3:"ﲋ";s:4:"نز";s:3:"ﲌ";s:4:"نم";s:3:"ﲍ";s:4:"نن";s:3:"ﲎ";s:4:"نى";s:3:"ﲏ";s:4:"ني";s:3:"ﲐ";s:4:"ىٰ";s:3:"ﲑ";s:4:"ير";s:3:"ﲒ";s:4:"يز";s:3:"ﲓ";s:4:"يم";s:3:"ﲔ";s:4:"ين";s:3:"ﲕ";s:4:"يى";s:3:"ﲖ";s:4:"يي";s:3:"ﲗ";s:6:"ئج";s:3:"ﲘ";s:6:"ئح";s:3:"ﲙ";s:6:"ئخ";s:3:"ﲚ";s:6:"ئم";s:3:"ﲛ";s:6:"ئه";s:3:"ﲜ";s:4:"بج";s:3:"ﲝ";s:4:"بح";s:3:"ﲞ";s:4:"بخ";s:3:"ﲟ";s:4:"بم";s:3:"ﲠ";s:4:"به";s:3:"ﲡ";s:4:"تج";s:3:"ﲢ";s:4:"تح";s:3:"ﲣ";s:4:"تخ";s:3:"ﲤ";s:4:"تم";s:3:"ﲥ";s:4:"ته";s:3:"ﲦ";s:4:"ثم";s:3:"ﲧ";s:4:"جح";s:3:"ﲨ";s:4:"جم";s:3:"ﲩ";s:4:"حج";s:3:"ﲪ";s:4:"حم";s:3:"ﲫ";s:4:"خج";s:3:"ﲬ";s:4:"خم";s:3:"ﲭ";s:4:"سج";s:3:"ﲮ";s:4:"سح";s:3:"ﲯ";s:4:"سخ";s:3:"ﲰ";s:4:"سم";s:3:"ﲱ";s:4:"صح";s:3:"ﲲ";s:4:"صخ";s:3:"ﲳ";s:4:"صم";s:3:"ﲴ";s:4:"ضج";s:3:"ﲵ";s:4:"ضح";s:3:"ﲶ";s:4:"ضخ";s:3:"ﲷ";s:4:"ضم";s:3:"ﲸ";s:4:"طح";s:3:"ﲹ";s:4:"ظم";s:3:"ﲺ";s:4:"عج";s:3:"ﲻ";s:4:"عم";s:3:"ﲼ";s:4:"غج";s:3:"ﲽ";s:4:"غم";s:3:"ﲾ";s:4:"فج";s:3:"ﲿ";s:4:"فح";s:3:"ﳀ";s:4:"فخ";s:3:"ﳁ";s:4:"فم";s:3:"ﳂ";s:4:"قح";s:3:"ﳃ";s:4:"قم";s:3:"ﳄ";s:4:"كج";s:3:"ﳅ";s:4:"كح";s:3:"ﳆ";s:4:"كخ";s:3:"ﳇ";s:4:"كل";s:3:"ﳈ";s:4:"كم";s:3:"ﳉ";s:4:"لج";s:3:"ﳊ";s:4:"لح";s:3:"ﳋ";s:4:"لخ";s:3:"ﳌ";s:4:"لم";s:3:"ﳍ";s:4:"له";s:3:"ﳎ";s:4:"مج";s:3:"ﳏ";s:4:"مح";s:3:"ﳐ";s:4:"مخ";s:3:"ﳑ";s:4:"مم";s:3:"ﳒ";s:4:"نج";s:3:"ﳓ";s:4:"نح";s:3:"ﳔ";s:4:"نخ";s:3:"ﳕ";s:4:"نم";s:3:"ﳖ";s:4:"نه";s:3:"ﳗ";s:4:"هج";s:3:"ﳘ";s:4:"هم";s:3:"ﳙ";s:4:"هٰ";s:3:"ﳚ";s:4:"يج";s:3:"ﳛ";s:4:"يح";s:3:"ﳜ";s:4:"يخ";s:3:"ﳝ";s:4:"يم";s:3:"ﳞ";s:4:"يه";s:3:"ﳟ";s:6:"ئم";s:3:"ﳠ";s:6:"ئه";s:3:"ﳡ";s:4:"بم";s:3:"ﳢ";s:4:"به";s:3:"ﳣ";s:4:"تم";s:3:"ﳤ";s:4:"ته";s:3:"ﳥ";s:4:"ثم";s:3:"ﳦ";s:4:"ثه";s:3:"ﳧ";s:4:"سم";s:3:"ﳨ";s:4:"سه";s:3:"ﳩ";s:4:"شم";s:3:"ﳪ";s:4:"شه";s:3:"ﳫ";s:4:"كل";s:3:"ﳬ";s:4:"كم";s:3:"ﳭ";s:4:"لم";s:3:"ﳮ";s:4:"نم";s:3:"ﳯ";s:4:"نه";s:3:"ﳰ";s:4:"يم";s:3:"ﳱ";s:4:"يه";s:3:"ﳲ";s:6:"ـَّ";s:3:"ﳳ";s:6:"ـُّ";s:3:"ﳴ";s:6:"ـِّ";s:3:"ﳵ";s:4:"طى";s:3:"ﳶ";s:4:"طي";s:3:"ﳷ";s:4:"عى";s:3:"ﳸ";s:4:"عي";s:3:"ﳹ";s:4:"غى";s:3:"ﳺ";s:4:"غي";s:3:"ﳻ";s:4:"سى";s:3:"ﳼ";s:4:"سي";s:3:"ﳽ";s:4:"شى";s:3:"ﳾ";s:4:"شي";s:3:"ﳿ";s:4:"حى";s:3:"ﴀ";s:4:"حي";s:3:"ﴁ";s:4:"جى";s:3:"ﴂ";s:4:"جي";s:3:"ﴃ";s:4:"خى";s:3:"ﴄ";s:4:"خي";s:3:"ﴅ";s:4:"صى";s:3:"ﴆ";s:4:"صي";s:3:"ﴇ";s:4:"ضى";s:3:"ﴈ";s:4:"ضي";s:3:"ﴉ";s:4:"شج";s:3:"ﴊ";s:4:"شح";s:3:"ﴋ";s:4:"شخ";s:3:"ﴌ";s:4:"شم";s:3:"ﴍ";s:4:"شر";s:3:"ﴎ";s:4:"سر";s:3:"ﴏ";s:4:"صر";s:3:"ﴐ";s:4:"ضر";s:3:"ﴑ";s:4:"طى";s:3:"ﴒ";s:4:"طي";s:3:"ﴓ";s:4:"عى";s:3:"ﴔ";s:4:"عي";s:3:"ﴕ";s:4:"غى";s:3:"ﴖ";s:4:"غي";s:3:"ﴗ";s:4:"سى";s:3:"ﴘ";s:4:"سي";s:3:"ﴙ";s:4:"شى";s:3:"ﴚ";s:4:"شي";s:3:"ﴛ";s:4:"حى";s:3:"ﴜ";s:4:"حي";s:3:"ﴝ";s:4:"جى";s:3:"ﴞ";s:4:"جي";s:3:"ﴟ";s:4:"خى";s:3:"ﴠ";s:4:"خي";s:3:"ﴡ";s:4:"صى";s:3:"ﴢ";s:4:"صي";s:3:"ﴣ";s:4:"ضى";s:3:"ﴤ";s:4:"ضي";s:3:"ﴥ";s:4:"شج";s:3:"ﴦ";s:4:"شح";s:3:"ﴧ";s:4:"شخ";s:3:"ﴨ";s:4:"شم";s:3:"ﴩ";s:4:"شر";s:3:"ﴪ";s:4:"سر";s:3:"ﴫ";s:4:"صر";s:3:"ﴬ";s:4:"ضر";s:3:"ﴭ";s:4:"شج";s:3:"ﴮ";s:4:"شح";s:3:"ﴯ";s:4:"شخ";s:3:"ﴰ";s:4:"شم";s:3:"ﴱ";s:4:"سه";s:3:"ﴲ";s:4:"شه";s:3:"ﴳ";s:4:"طم";s:3:"ﴴ";s:4:"سج";s:3:"ﴵ";s:4:"سح";s:3:"ﴶ";s:4:"سخ";s:3:"ﴷ";s:4:"شج";s:3:"ﴸ";s:4:"شح";s:3:"ﴹ";s:4:"شخ";s:3:"ﴺ";s:4:"طم";s:3:"ﴻ";s:4:"ظم";s:3:"ﴼ";s:4:"اً";s:3:"ﴽ";s:4:"اً";s:3:"ﵐ";s:6:"تجم";s:3:"ﵑ";s:6:"تحج";s:3:"ﵒ";s:6:"تحج";s:3:"ﵓ";s:6:"تحم";s:3:"ﵔ";s:6:"تخم";s:3:"ﵕ";s:6:"تمج";s:3:"ﵖ";s:6:"تمح";s:3:"ﵗ";s:6:"تمخ";s:3:"ﵘ";s:6:"جمح";s:3:"ﵙ";s:6:"جمح";s:3:"ﵚ";s:6:"حمي";s:3:"ﵛ";s:6:"حمى";s:3:"ﵜ";s:6:"سحج";s:3:"ﵝ";s:6:"سجح";s:3:"ﵞ";s:6:"سجى";s:3:"ﵟ";s:6:"سمح";s:3:"ﵠ";s:6:"سمح";s:3:"ﵡ";s:6:"سمج";s:3:"ﵢ";s:6:"سمم";s:3:"ﵣ";s:6:"سمم";s:3:"ﵤ";s:6:"صحح";s:3:"ﵥ";s:6:"صحح";s:3:"ﵦ";s:6:"صمم";s:3:"ﵧ";s:6:"شحم";s:3:"ﵨ";s:6:"شحم";s:3:"ﵩ";s:6:"شجي";s:3:"ﵪ";s:6:"شمخ";s:3:"ﵫ";s:6:"شمخ";s:3:"ﵬ";s:6:"شمم";s:3:"ﵭ";s:6:"شمم";s:3:"ﵮ";s:6:"ضحى";s:3:"ﵯ";s:6:"ضخم";s:3:"ﵰ";s:6:"ضخم";s:3:"ﵱ";s:6:"طمح";s:3:"ﵲ";s:6:"طمح";s:3:"ﵳ";s:6:"طمم";s:3:"ﵴ";s:6:"طمي";s:3:"ﵵ";s:6:"عجم";s:3:"ﵶ";s:6:"عمم";s:3:"ﵷ";s:6:"عمم";s:3:"ﵸ";s:6:"عمى";s:3:"ﵹ";s:6:"غمم";s:3:"ﵺ";s:6:"غمي";s:3:"ﵻ";s:6:"غمى";s:3:"ﵼ";s:6:"فخم";s:3:"ﵽ";s:6:"فخم";s:3:"ﵾ";s:6:"قمح";s:3:"ﵿ";s:6:"قمم";s:3:"ﶀ";s:6:"لحم";s:3:"ﶁ";s:6:"لحي";s:3:"ﶂ";s:6:"لحى";s:3:"ﶃ";s:6:"لجج";s:3:"ﶄ";s:6:"لجج";s:3:"ﶅ";s:6:"لخم";s:3:"ﶆ";s:6:"لخم";s:3:"ﶇ";s:6:"لمح";s:3:"ﶈ";s:6:"لمح";s:3:"ﶉ";s:6:"محج";s:3:"ﶊ";s:6:"محم";s:3:"ﶋ";s:6:"محي";s:3:"ﶌ";s:6:"مجح";s:3:"ﶍ";s:6:"مجم";s:3:"ﶎ";s:6:"مخج";s:3:"ﶏ";s:6:"مخم";s:3:"ﶒ";s:6:"مجخ";s:3:"ﶓ";s:6:"همج";s:3:"ﶔ";s:6:"همم";s:3:"ﶕ";s:6:"نحم";s:3:"ﶖ";s:6:"نحى";s:3:"ﶗ";s:6:"نجم";s:3:"ﶘ";s:6:"نجم";s:3:"ﶙ";s:6:"نجى";s:3:"ﶚ";s:6:"نمي";s:3:"ﶛ";s:6:"نمى";s:3:"ﶜ";s:6:"يمم";s:3:"ﶝ";s:6:"يمم";s:3:"ﶞ";s:6:"بخي";s:3:"ﶟ";s:6:"تجي";s:3:"ﶠ";s:6:"تجى";s:3:"ﶡ";s:6:"تخي";s:3:"ﶢ";s:6:"تخى";s:3:"ﶣ";s:6:"تمي";s:3:"ﶤ";s:6:"تمى";s:3:"ﶥ";s:6:"جمي";s:3:"ﶦ";s:6:"جحى";s:3:"ﶧ";s:6:"جمى";s:3:"ﶨ";s:6:"سخى";s:3:"ﶩ";s:6:"صحي";s:3:"ﶪ";s:6:"شحي";s:3:"ﶫ";s:6:"ضحي";s:3:"ﶬ";s:6:"لجي";s:3:"ﶭ";s:6:"لمي";s:3:"ﶮ";s:6:"يحي";s:3:"ﶯ";s:6:"يجي";s:3:"ﶰ";s:6:"يمي";s:3:"ﶱ";s:6:"ممي";s:3:"ﶲ";s:6:"قمي";s:3:"ﶳ";s:6:"نحي";s:3:"ﶴ";s:6:"قمح";s:3:"ﶵ";s:6:"لحم";s:3:"ﶶ";s:6:"عمي";s:3:"ﶷ";s:6:"كمي";s:3:"ﶸ";s:6:"نجح";s:3:"ﶹ";s:6:"مخي";s:3:"ﶺ";s:6:"لجم";s:3:"ﶻ";s:6:"كمم";s:3:"ﶼ";s:6:"لجم";s:3:"ﶽ";s:6:"نجح";s:3:"ﶾ";s:6:"جحي";s:3:"ﶿ";s:6:"حجي";s:3:"ﷀ";s:6:"مجي";s:3:"ﷁ";s:6:"فمي";s:3:"ﷂ";s:6:"بحي";s:3:"ﷃ";s:6:"كمم";s:3:"ﷄ";s:6:"عجم";s:3:"ﷅ";s:6:"صمم";s:3:"ﷆ";s:6:"سخي";s:3:"ﷇ";s:6:"نجي";s:3:"ﷰ";s:6:"صلے";s:3:"ﷱ";s:6:"قلے";s:3:"ﷲ";s:8:"الله";s:3:"ﷳ";s:8:"اكبر";s:3:"ﷴ";s:8:"محمد";s:3:"ﷵ";s:8:"صلعم";s:3:"ﷶ";s:8:"رسول";s:3:"ﷷ";s:8:"عليه";s:3:"ﷸ";s:8:"وسلم";s:3:"ﷹ";s:6:"صلى";s:3:"ﷺ";s:33:"صلى الله عليه وسلم";s:3:"ﷻ";s:15:"جل جلاله";s:3:"﷼";s:8:"ریال";s:3:"︐";s:1:",";s:3:"︑";s:3:"、";s:3:"︒";s:3:"。";s:3:"︓";s:1:":";s:3:"︔";s:1:";";s:3:"︕";s:1:"!";s:3:"︖";s:1:"?";s:3:"︗";s:3:"〖";s:3:"︘";s:3:"〗";s:3:"︙";s:3:"...";s:3:"︰";s:2:"..";s:3:"︱";s:3:"—";s:3:"︲";s:3:"–";s:3:"︳";s:1:"_";s:3:"︴";s:1:"_";s:3:"︵";s:1:"(";s:3:"︶";s:1:")";s:3:"︷";s:1:"{";s:3:"︸";s:1:"}";s:3:"︹";s:3:"〔";s:3:"︺";s:3:"〕";s:3:"︻";s:3:"【";s:3:"︼";s:3:"】";s:3:"︽";s:3:"《";s:3:"︾";s:3:"》";s:3:"︿";s:3:"〈";s:3:"﹀";s:3:"〉";s:3:"﹁";s:3:"「";s:3:"﹂";s:3:"」";s:3:"﹃";s:3:"『";s:3:"﹄";s:3:"』";s:3:"﹇";s:1:"[";s:3:"﹈";s:1:"]";s:3:"﹉";s:3:" ̅";s:3:"﹊";s:3:" ̅";s:3:"﹋";s:3:" ̅";s:3:"﹌";s:3:" ̅";s:3:"﹍";s:1:"_";s:3:"﹎";s:1:"_";s:3:"﹏";s:1:"_";s:3:"﹐";s:1:",";s:3:"﹑";s:3:"、";s:3:"﹒";s:1:".";s:3:"﹔";s:1:";";s:3:"﹕";s:1:":";s:3:"﹖";s:1:"?";s:3:"﹗";s:1:"!";s:3:"﹘";s:3:"—";s:3:"﹙";s:1:"(";s:3:"﹚";s:1:")";s:3:"﹛";s:1:"{";s:3:"﹜";s:1:"}";s:3:"﹝";s:3:"〔";s:3:"﹞";s:3:"〕";s:3:"﹟";s:1:"#";s:3:"﹠";s:1:"&";s:3:"﹡";s:1:"*";s:3:"﹢";s:1:"+";s:3:"﹣";s:1:"-";s:3:"﹤";s:1:"<";s:3:"﹥";s:1:">";s:3:"﹦";s:1:"=";s:3:"﹨";s:1:"\\";s:3:"﹩";s:1:"$";s:3:"﹪";s:1:"%";s:3:"﹫";s:1:"@";s:3:"ﹰ";s:3:" ً";s:3:"ﹱ";s:4:"ـً";s:3:"ﹲ";s:3:" ٌ";s:3:"ﹴ";s:3:" ٍ";s:3:"ﹶ";s:3:" َ";s:3:"ﹷ";s:4:"ـَ";s:3:"ﹸ";s:3:" ُ";s:3:"ﹹ";s:4:"ـُ";s:3:"ﹺ";s:3:" ِ";s:3:"ﹻ";s:4:"ـِ";s:3:"ﹼ";s:3:" ّ";s:3:"ﹽ";s:4:"ـّ";s:3:"ﹾ";s:3:" ْ";s:3:"ﹿ";s:4:"ـْ";s:3:"ﺀ";s:2:"ء";s:3:"ﺁ";s:4:"آ";s:3:"ﺂ";s:4:"آ";s:3:"ﺃ";s:4:"أ";s:3:"ﺄ";s:4:"أ";s:3:"ﺅ";s:4:"ؤ";s:3:"ﺆ";s:4:"ؤ";s:3:"ﺇ";s:4:"إ";s:3:"ﺈ";s:4:"إ";s:3:"ﺉ";s:4:"ئ";s:3:"ﺊ";s:4:"ئ";s:3:"ﺋ";s:4:"ئ";s:3:"ﺌ";s:4:"ئ";s:3:"ﺍ";s:2:"ا";s:3:"ﺎ";s:2:"ا";s:3:"ﺏ";s:2:"ب";s:3:"ﺐ";s:2:"ب";s:3:"ﺑ";s:2:"ب";s:3:"ﺒ";s:2:"ب";s:3:"ﺓ";s:2:"ة";s:3:"ﺔ";s:2:"ة";s:3:"ﺕ";s:2:"ت";s:3:"ﺖ";s:2:"ت";s:3:"ﺗ";s:2:"ت";s:3:"ﺘ";s:2:"ت";s:3:"ﺙ";s:2:"ث";s:3:"ﺚ";s:2:"ث";s:3:"ﺛ";s:2:"ث";s:3:"ﺜ";s:2:"ث";s:3:"ﺝ";s:2:"ج";s:3:"ﺞ";s:2:"ج";s:3:"ﺟ";s:2:"ج";s:3:"ﺠ";s:2:"ج";s:3:"ﺡ";s:2:"ح";s:3:"ﺢ";s:2:"ح";s:3:"ﺣ";s:2:"ح";s:3:"ﺤ";s:2:"ح";s:3:"ﺥ";s:2:"خ";s:3:"ﺦ";s:2:"خ";s:3:"ﺧ";s:2:"خ";s:3:"ﺨ";s:2:"خ";s:3:"ﺩ";s:2:"د";s:3:"ﺪ";s:2:"د";s:3:"ﺫ";s:2:"ذ";s:3:"ﺬ";s:2:"ذ";s:3:"ﺭ";s:2:"ر";s:3:"ﺮ";s:2:"ر";s:3:"ﺯ";s:2:"ز";s:3:"ﺰ";s:2:"ز";s:3:"ﺱ";s:2:"س";s:3:"ﺲ";s:2:"س";s:3:"ﺳ";s:2:"س";s:3:"ﺴ";s:2:"س";s:3:"ﺵ";s:2:"ش";s:3:"ﺶ";s:2:"ش";s:3:"ﺷ";s:2:"ش";s:3:"ﺸ";s:2:"ش";s:3:"ﺹ";s:2:"ص";s:3:"ﺺ";s:2:"ص";s:3:"ﺻ";s:2:"ص";s:3:"ﺼ";s:2:"ص";s:3:"ﺽ";s:2:"ض";s:3:"ﺾ";s:2:"ض";s:3:"ﺿ";s:2:"ض";s:3:"ﻀ";s:2:"ض";s:3:"ﻁ";s:2:"ط";s:3:"ﻂ";s:2:"ط";s:3:"ﻃ";s:2:"ط";s:3:"ﻄ";s:2:"ط";s:3:"ﻅ";s:2:"ظ";s:3:"ﻆ";s:2:"ظ";s:3:"ﻇ";s:2:"ظ";s:3:"ﻈ";s:2:"ظ";s:3:"ﻉ";s:2:"ع";s:3:"ﻊ";s:2:"ع";s:3:"ﻋ";s:2:"ع";s:3:"ﻌ";s:2:"ع";s:3:"ﻍ";s:2:"غ";s:3:"ﻎ";s:2:"غ";s:3:"ﻏ";s:2:"غ";s:3:"ﻐ";s:2:"غ";s:3:"ﻑ";s:2:"ف";s:3:"ﻒ";s:2:"ف";s:3:"ﻓ";s:2:"ف";s:3:"ﻔ";s:2:"ف";s:3:"ﻕ";s:2:"ق";s:3:"ﻖ";s:2:"ق";s:3:"ﻗ";s:2:"ق";s:3:"ﻘ";s:2:"ق";s:3:"ﻙ";s:2:"ك";s:3:"ﻚ";s:2:"ك";s:3:"ﻛ";s:2:"ك";s:3:"ﻜ";s:2:"ك";s:3:"ﻝ";s:2:"ل";s:3:"ﻞ";s:2:"ل";s:3:"ﻟ";s:2:"ل";s:3:"ﻠ";s:2:"ل";s:3:"ﻡ";s:2:"م";s:3:"ﻢ";s:2:"م";s:3:"ﻣ";s:2:"م";s:3:"ﻤ";s:2:"م";s:3:"ﻥ";s:2:"ن";s:3:"ﻦ";s:2:"ن";s:3:"ﻧ";s:2:"ن";s:3:"ﻨ";s:2:"ن";s:3:"ﻩ";s:2:"ه";s:3:"ﻪ";s:2:"ه";s:3:"ﻫ";s:2:"ه";s:3:"ﻬ";s:2:"ه";s:3:"ﻭ";s:2:"و";s:3:"ﻮ";s:2:"و";s:3:"ﻯ";s:2:"ى";s:3:"ﻰ";s:2:"ى";s:3:"ﻱ";s:2:"ي";s:3:"ﻲ";s:2:"ي";s:3:"ﻳ";s:2:"ي";s:3:"ﻴ";s:2:"ي";s:3:"ﻵ";s:6:"لآ";s:3:"ﻶ";s:6:"لآ";s:3:"ﻷ";s:6:"لأ";s:3:"ﻸ";s:6:"لأ";s:3:"ﻹ";s:6:"لإ";s:3:"ﻺ";s:6:"لإ";s:3:"ﻻ";s:4:"لا";s:3:"ﻼ";s:4:"لا";s:3:"!";s:1:"!";s:3:""";s:1:""";s:3:"#";s:1:"#";s:3:"$";s:1:"$";s:3:"%";s:1:"%";s:3:"&";s:1:"&";s:3:"'";s:1:"\'";s:3:"(";s:1:"(";s:3:")";s:1:")";s:3:"*";s:1:"*";s:3:"+";s:1:"+";s:3:",";s:1:",";s:3:"-";s:1:"-";s:3:".";s:1:".";s:3:"/";s:1:"/";s:3:"0";s:1:"0";s:3:"1";s:1:"1";s:3:"2";s:1:"2";s:3:"3";s:1:"3";s:3:"4";s:1:"4";s:3:"5";s:1:"5";s:3:"6";s:1:"6";s:3:"7";s:1:"7";s:3:"8";s:1:"8";s:3:"9";s:1:"9";s:3:":";s:1:":";s:3:";";s:1:";";s:3:"<";s:1:"<";s:3:"=";s:1:"=";s:3:">";s:1:">";s:3:"?";s:1:"?";s:3:"@";s:1:"@";s:3:"A";s:1:"A";s:3:"B";s:1:"B";s:3:"C";s:1:"C";s:3:"D";s:1:"D";s:3:"E";s:1:"E";s:3:"F";s:1:"F";s:3:"G";s:1:"G";s:3:"H";s:1:"H";s:3:"I";s:1:"I";s:3:"J";s:1:"J";s:3:"K";s:1:"K";s:3:"L";s:1:"L";s:3:"M";s:1:"M";s:3:"N";s:1:"N";s:3:"O";s:1:"O";s:3:"P";s:1:"P";s:3:"Q";s:1:"Q";s:3:"R";s:1:"R";s:3:"S";s:1:"S";s:3:"T";s:1:"T";s:3:"U";s:1:"U";s:3:"V";s:1:"V";s:3:"W";s:1:"W";s:3:"X";s:1:"X";s:3:"Y";s:1:"Y";s:3:"Z";s:1:"Z";s:3:"[";s:1:"[";s:3:"\";s:1:"\\";s:3:"]";s:1:"]";s:3:"^";s:1:"^";s:3:"_";s:1:"_";s:3:"`";s:1:"`";s:3:"a";s:1:"a";s:3:"b";s:1:"b";s:3:"c";s:1:"c";s:3:"d";s:1:"d";s:3:"e";s:1:"e";s:3:"f";s:1:"f";s:3:"g";s:1:"g";s:3:"h";s:1:"h";s:3:"i";s:1:"i";s:3:"j";s:1:"j";s:3:"k";s:1:"k";s:3:"l";s:1:"l";s:3:"m";s:1:"m";s:3:"n";s:1:"n";s:3:"o";s:1:"o";s:3:"p";s:1:"p";s:3:"q";s:1:"q";s:3:"r";s:1:"r";s:3:"s";s:1:"s";s:3:"t";s:1:"t";s:3:"u";s:1:"u";s:3:"v";s:1:"v";s:3:"w";s:1:"w";s:3:"x";s:1:"x";s:3:"y";s:1:"y";s:3:"z";s:1:"z";s:3:"{";s:1:"{";s:3:"|";s:1:"|";s:3:"}";s:1:"}";s:3:"~";s:1:"~";s:3:"⦅";s:3:"⦅";s:3:"⦆";s:3:"⦆";s:3:"。";s:3:"。";s:3:"「";s:3:"「";s:3:"」";s:3:"」";s:3:"、";s:3:"、";s:3:"・";s:3:"・";s:3:"ヲ";s:3:"ヲ";s:3:"ァ";s:3:"ァ";s:3:"ィ";s:3:"ィ";s:3:"ゥ";s:3:"ゥ";s:3:"ェ";s:3:"ェ";s:3:"ォ";s:3:"ォ";s:3:"ャ";s:3:"ャ";s:3:"ュ";s:3:"ュ";s:3:"ョ";s:3:"ョ";s:3:"ッ";s:3:"ッ";s:3:"ー";s:3:"ー";s:3:"ア";s:3:"ア";s:3:"イ";s:3:"イ";s:3:"ウ";s:3:"ウ";s:3:"エ";s:3:"エ";s:3:"オ";s:3:"オ";s:3:"カ";s:3:"カ";s:3:"キ";s:3:"キ";s:3:"ク";s:3:"ク";s:3:"ケ";s:3:"ケ";s:3:"コ";s:3:"コ";s:3:"サ";s:3:"サ";s:3:"シ";s:3:"シ";s:3:"ス";s:3:"ス";s:3:"セ";s:3:"セ";s:3:"ソ";s:3:"ソ";s:3:"タ";s:3:"タ";s:3:"チ";s:3:"チ";s:3:"ツ";s:3:"ツ";s:3:"テ";s:3:"テ";s:3:"ト";s:3:"ト";s:3:"ナ";s:3:"ナ";s:3:"ニ";s:3:"ニ";s:3:"ヌ";s:3:"ヌ";s:3:"ネ";s:3:"ネ";s:3:"ノ";s:3:"ノ";s:3:"ハ";s:3:"ハ";s:3:"ヒ";s:3:"ヒ";s:3:"フ";s:3:"フ";s:3:"ヘ";s:3:"ヘ";s:3:"ホ";s:3:"ホ";s:3:"マ";s:3:"マ";s:3:"ミ";s:3:"ミ";s:3:"ム";s:3:"ム";s:3:"メ";s:3:"メ";s:3:"モ";s:3:"モ";s:3:"ヤ";s:3:"ヤ";s:3:"ユ";s:3:"ユ";s:3:"ヨ";s:3:"ヨ";s:3:"ラ";s:3:"ラ";s:3:"リ";s:3:"リ";s:3:"ル";s:3:"ル";s:3:"レ";s:3:"レ";s:3:"ロ";s:3:"ロ";s:3:"ワ";s:3:"ワ";s:3:"ン";s:3:"ン";s:3:"゙";s:3:"゙";s:3:"゚";s:3:"゚";s:3:"ᅠ";s:3:"ᅠ";s:3:"ᄀ";s:3:"ᄀ";s:3:"ᄁ";s:3:"ᄁ";s:3:"ᆪ";s:3:"ᆪ";s:3:"ᄂ";s:3:"ᄂ";s:3:"ᆬ";s:3:"ᆬ";s:3:"ᆭ";s:3:"ᆭ";s:3:"ᄃ";s:3:"ᄃ";s:3:"ᄄ";s:3:"ᄄ";s:3:"ᄅ";s:3:"ᄅ";s:3:"ᆰ";s:3:"ᆰ";s:3:"ᆱ";s:3:"ᆱ";s:3:"ᆲ";s:3:"ᆲ";s:3:"ᆳ";s:3:"ᆳ";s:3:"ᆴ";s:3:"ᆴ";s:3:"ᆵ";s:3:"ᆵ";s:3:"ᄚ";s:3:"ᄚ";s:3:"ᄆ";s:3:"ᄆ";s:3:"ᄇ";s:3:"ᄇ";s:3:"ᄈ";s:3:"ᄈ";s:3:"ᄡ";s:3:"ᄡ";s:3:"ᄉ";s:3:"ᄉ";s:3:"ᄊ";s:3:"ᄊ";s:3:"ᄋ";s:3:"ᄋ";s:3:"ᄌ";s:3:"ᄌ";s:3:"ᄍ";s:3:"ᄍ";s:3:"ᄎ";s:3:"ᄎ";s:3:"ᄏ";s:3:"ᄏ";s:3:"ᄐ";s:3:"ᄐ";s:3:"ᄑ";s:3:"ᄑ";s:3:"ᄒ";s:3:"ᄒ";s:3:"ᅡ";s:3:"ᅡ";s:3:"ᅢ";s:3:"ᅢ";s:3:"ᅣ";s:3:"ᅣ";s:3:"ᅤ";s:3:"ᅤ";s:3:"ᅥ";s:3:"ᅥ";s:3:"ᅦ";s:3:"ᅦ";s:3:"ᅧ";s:3:"ᅧ";s:3:"ᅨ";s:3:"ᅨ";s:3:"ᅩ";s:3:"ᅩ";s:3:"ᅪ";s:3:"ᅪ";s:3:"ᅫ";s:3:"ᅫ";s:3:"ᅬ";s:3:"ᅬ";s:3:"ᅭ";s:3:"ᅭ";s:3:"ᅮ";s:3:"ᅮ";s:3:"ᅯ";s:3:"ᅯ";s:3:"ᅰ";s:3:"ᅰ";s:3:"ᅱ";s:3:"ᅱ";s:3:"ᅲ";s:3:"ᅲ";s:3:"ᅳ";s:3:"ᅳ";s:3:"ᅴ";s:3:"ᅴ";s:3:"ᅵ";s:3:"ᅵ";s:3:"¢";s:2:"¢";s:3:"£";s:2:"£";s:3:"¬";s:2:"¬";s:3:" ̄";s:3:" ̄";s:3:"¦";s:2:"¦";s:3:"¥";s:2:"¥";s:3:"₩";s:3:"₩";s:3:"│";s:3:"│";s:3:"←";s:3:"←";s:3:"↑";s:3:"↑";s:3:"→";s:3:"→";s:3:"↓";s:3:"↓";s:3:"■";s:3:"■";s:3:"○";s:3:"○";s:4:"𑂚";s:8:"𑂚";s:4:"𑂜";s:8:"𑂜";s:4:"𑂫";s:8:"𑂫";s:4:"𝅗𝅥";s:8:"𝅗𝅥";s:4:"𝅘𝅥";s:8:"𝅘𝅥";s:4:"𝅘𝅥𝅮";s:12:"𝅘𝅥𝅮";s:4:"𝅘𝅥𝅯";s:12:"𝅘𝅥𝅯";s:4:"𝅘𝅥𝅰";s:12:"𝅘𝅥𝅰";s:4:"𝅘𝅥𝅱";s:12:"𝅘𝅥𝅱";s:4:"𝅘𝅥𝅲";s:12:"𝅘𝅥𝅲";s:4:"𝆹𝅥";s:8:"𝆹𝅥";s:4:"𝆺𝅥";s:8:"𝆺𝅥";s:4:"𝆹𝅥𝅮";s:12:"𝆹𝅥𝅮";s:4:"𝆺𝅥𝅮";s:12:"𝆺𝅥𝅮";s:4:"𝆹𝅥𝅯";s:12:"𝆹𝅥𝅯";s:4:"𝆺𝅥𝅯";s:12:"𝆺𝅥𝅯";s:4:"𝐀";s:1:"A";s:4:"𝐁";s:1:"B";s:4:"𝐂";s:1:"C";s:4:"𝐃";s:1:"D";s:4:"𝐄";s:1:"E";s:4:"𝐅";s:1:"F";s:4:"𝐆";s:1:"G";s:4:"𝐇";s:1:"H";s:4:"𝐈";s:1:"I";s:4:"𝐉";s:1:"J";s:4:"𝐊";s:1:"K";s:4:"𝐋";s:1:"L";s:4:"𝐌";s:1:"M";s:4:"𝐍";s:1:"N";s:4:"𝐎";s:1:"O";s:4:"𝐏";s:1:"P";s:4:"𝐐";s:1:"Q";s:4:"𝐑";s:1:"R";s:4:"𝐒";s:1:"S";s:4:"𝐓";s:1:"T";s:4:"𝐔";s:1:"U";s:4:"𝐕";s:1:"V";s:4:"𝐖";s:1:"W";s:4:"𝐗";s:1:"X";s:4:"𝐘";s:1:"Y";s:4:"𝐙";s:1:"Z";s:4:"𝐚";s:1:"a";s:4:"𝐛";s:1:"b";s:4:"𝐜";s:1:"c";s:4:"𝐝";s:1:"d";s:4:"𝐞";s:1:"e";s:4:"𝐟";s:1:"f";s:4:"𝐠";s:1:"g";s:4:"𝐡";s:1:"h";s:4:"𝐢";s:1:"i";s:4:"𝐣";s:1:"j";s:4:"𝐤";s:1:"k";s:4:"𝐥";s:1:"l";s:4:"𝐦";s:1:"m";s:4:"𝐧";s:1:"n";s:4:"𝐨";s:1:"o";s:4:"𝐩";s:1:"p";s:4:"𝐪";s:1:"q";s:4:"𝐫";s:1:"r";s:4:"𝐬";s:1:"s";s:4:"𝐭";s:1:"t";s:4:"𝐮";s:1:"u";s:4:"𝐯";s:1:"v";s:4:"𝐰";s:1:"w";s:4:"𝐱";s:1:"x";s:4:"𝐲";s:1:"y";s:4:"𝐳";s:1:"z";s:4:"𝐴";s:1:"A";s:4:"𝐵";s:1:"B";s:4:"𝐶";s:1:"C";s:4:"𝐷";s:1:"D";s:4:"𝐸";s:1:"E";s:4:"𝐹";s:1:"F";s:4:"𝐺";s:1:"G";s:4:"𝐻";s:1:"H";s:4:"𝐼";s:1:"I";s:4:"𝐽";s:1:"J";s:4:"𝐾";s:1:"K";s:4:"𝐿";s:1:"L";s:4:"𝑀";s:1:"M";s:4:"𝑁";s:1:"N";s:4:"𝑂";s:1:"O";s:4:"𝑃";s:1:"P";s:4:"𝑄";s:1:"Q";s:4:"𝑅";s:1:"R";s:4:"𝑆";s:1:"S";s:4:"𝑇";s:1:"T";s:4:"𝑈";s:1:"U";s:4:"𝑉";s:1:"V";s:4:"𝑊";s:1:"W";s:4:"𝑋";s:1:"X";s:4:"𝑌";s:1:"Y";s:4:"𝑍";s:1:"Z";s:4:"𝑎";s:1:"a";s:4:"𝑏";s:1:"b";s:4:"𝑐";s:1:"c";s:4:"𝑑";s:1:"d";s:4:"𝑒";s:1:"e";s:4:"𝑓";s:1:"f";s:4:"𝑔";s:1:"g";s:4:"𝑖";s:1:"i";s:4:"𝑗";s:1:"j";s:4:"𝑘";s:1:"k";s:4:"𝑙";s:1:"l";s:4:"𝑚";s:1:"m";s:4:"𝑛";s:1:"n";s:4:"𝑜";s:1:"o";s:4:"𝑝";s:1:"p";s:4:"𝑞";s:1:"q";s:4:"𝑟";s:1:"r";s:4:"𝑠";s:1:"s";s:4:"𝑡";s:1:"t";s:4:"𝑢";s:1:"u";s:4:"𝑣";s:1:"v";s:4:"𝑤";s:1:"w";s:4:"𝑥";s:1:"x";s:4:"𝑦";s:1:"y";s:4:"𝑧";s:1:"z";s:4:"𝑨";s:1:"A";s:4:"𝑩";s:1:"B";s:4:"𝑪";s:1:"C";s:4:"𝑫";s:1:"D";s:4:"𝑬";s:1:"E";s:4:"𝑭";s:1:"F";s:4:"𝑮";s:1:"G";s:4:"𝑯";s:1:"H";s:4:"𝑰";s:1:"I";s:4:"𝑱";s:1:"J";s:4:"𝑲";s:1:"K";s:4:"𝑳";s:1:"L";s:4:"𝑴";s:1:"M";s:4:"𝑵";s:1:"N";s:4:"𝑶";s:1:"O";s:4:"𝑷";s:1:"P";s:4:"𝑸";s:1:"Q";s:4:"𝑹";s:1:"R";s:4:"𝑺";s:1:"S";s:4:"𝑻";s:1:"T";s:4:"𝑼";s:1:"U";s:4:"𝑽";s:1:"V";s:4:"𝑾";s:1:"W";s:4:"𝑿";s:1:"X";s:4:"𝒀";s:1:"Y";s:4:"𝒁";s:1:"Z";s:4:"𝒂";s:1:"a";s:4:"𝒃";s:1:"b";s:4:"𝒄";s:1:"c";s:4:"𝒅";s:1:"d";s:4:"𝒆";s:1:"e";s:4:"𝒇";s:1:"f";s:4:"𝒈";s:1:"g";s:4:"𝒉";s:1:"h";s:4:"𝒊";s:1:"i";s:4:"𝒋";s:1:"j";s:4:"𝒌";s:1:"k";s:4:"𝒍";s:1:"l";s:4:"𝒎";s:1:"m";s:4:"𝒏";s:1:"n";s:4:"𝒐";s:1:"o";s:4:"𝒑";s:1:"p";s:4:"𝒒";s:1:"q";s:4:"𝒓";s:1:"r";s:4:"𝒔";s:1:"s";s:4:"𝒕";s:1:"t";s:4:"𝒖";s:1:"u";s:4:"𝒗";s:1:"v";s:4:"𝒘";s:1:"w";s:4:"𝒙";s:1:"x";s:4:"𝒚";s:1:"y";s:4:"𝒛";s:1:"z";s:4:"𝒜";s:1:"A";s:4:"𝒞";s:1:"C";s:4:"𝒟";s:1:"D";s:4:"𝒢";s:1:"G";s:4:"𝒥";s:1:"J";s:4:"𝒦";s:1:"K";s:4:"𝒩";s:1:"N";s:4:"𝒪";s:1:"O";s:4:"𝒫";s:1:"P";s:4:"𝒬";s:1:"Q";s:4:"𝒮";s:1:"S";s:4:"𝒯";s:1:"T";s:4:"𝒰";s:1:"U";s:4:"𝒱";s:1:"V";s:4:"𝒲";s:1:"W";s:4:"𝒳";s:1:"X";s:4:"𝒴";s:1:"Y";s:4:"𝒵";s:1:"Z";s:4:"𝒶";s:1:"a";s:4:"𝒷";s:1:"b";s:4:"𝒸";s:1:"c";s:4:"𝒹";s:1:"d";s:4:"𝒻";s:1:"f";s:4:"𝒽";s:1:"h";s:4:"𝒾";s:1:"i";s:4:"𝒿";s:1:"j";s:4:"𝓀";s:1:"k";s:4:"𝓁";s:1:"l";s:4:"𝓂";s:1:"m";s:4:"𝓃";s:1:"n";s:4:"𝓅";s:1:"p";s:4:"𝓆";s:1:"q";s:4:"𝓇";s:1:"r";s:4:"𝓈";s:1:"s";s:4:"𝓉";s:1:"t";s:4:"𝓊";s:1:"u";s:4:"𝓋";s:1:"v";s:4:"𝓌";s:1:"w";s:4:"𝓍";s:1:"x";s:4:"𝓎";s:1:"y";s:4:"𝓏";s:1:"z";s:4:"𝓐";s:1:"A";s:4:"𝓑";s:1:"B";s:4:"𝓒";s:1:"C";s:4:"𝓓";s:1:"D";s:4:"𝓔";s:1:"E";s:4:"𝓕";s:1:"F";s:4:"𝓖";s:1:"G";s:4:"𝓗";s:1:"H";s:4:"𝓘";s:1:"I";s:4:"𝓙";s:1:"J";s:4:"𝓚";s:1:"K";s:4:"𝓛";s:1:"L";s:4:"𝓜";s:1:"M";s:4:"𝓝";s:1:"N";s:4:"𝓞";s:1:"O";s:4:"𝓟";s:1:"P";s:4:"𝓠";s:1:"Q";s:4:"𝓡";s:1:"R";s:4:"𝓢";s:1:"S";s:4:"𝓣";s:1:"T";s:4:"𝓤";s:1:"U";s:4:"𝓥";s:1:"V";s:4:"𝓦";s:1:"W";s:4:"𝓧";s:1:"X";s:4:"𝓨";s:1:"Y";s:4:"𝓩";s:1:"Z";s:4:"𝓪";s:1:"a";s:4:"𝓫";s:1:"b";s:4:"𝓬";s:1:"c";s:4:"𝓭";s:1:"d";s:4:"𝓮";s:1:"e";s:4:"𝓯";s:1:"f";s:4:"𝓰";s:1:"g";s:4:"𝓱";s:1:"h";s:4:"𝓲";s:1:"i";s:4:"𝓳";s:1:"j";s:4:"𝓴";s:1:"k";s:4:"𝓵";s:1:"l";s:4:"𝓶";s:1:"m";s:4:"𝓷";s:1:"n";s:4:"𝓸";s:1:"o";s:4:"𝓹";s:1:"p";s:4:"𝓺";s:1:"q";s:4:"𝓻";s:1:"r";s:4:"𝓼";s:1:"s";s:4:"𝓽";s:1:"t";s:4:"𝓾";s:1:"u";s:4:"𝓿";s:1:"v";s:4:"𝔀";s:1:"w";s:4:"𝔁";s:1:"x";s:4:"𝔂";s:1:"y";s:4:"𝔃";s:1:"z";s:4:"𝔄";s:1:"A";s:4:"𝔅";s:1:"B";s:4:"𝔇";s:1:"D";s:4:"𝔈";s:1:"E";s:4:"𝔉";s:1:"F";s:4:"𝔊";s:1:"G";s:4:"𝔍";s:1:"J";s:4:"𝔎";s:1:"K";s:4:"𝔏";s:1:"L";s:4:"𝔐";s:1:"M";s:4:"𝔑";s:1:"N";s:4:"𝔒";s:1:"O";s:4:"𝔓";s:1:"P";s:4:"𝔔";s:1:"Q";s:4:"𝔖";s:1:"S";s:4:"𝔗";s:1:"T";s:4:"𝔘";s:1:"U";s:4:"𝔙";s:1:"V";s:4:"𝔚";s:1:"W";s:4:"𝔛";s:1:"X";s:4:"𝔜";s:1:"Y";s:4:"𝔞";s:1:"a";s:4:"𝔟";s:1:"b";s:4:"𝔠";s:1:"c";s:4:"𝔡";s:1:"d";s:4:"𝔢";s:1:"e";s:4:"𝔣";s:1:"f";s:4:"𝔤";s:1:"g";s:4:"𝔥";s:1:"h";s:4:"𝔦";s:1:"i";s:4:"𝔧";s:1:"j";s:4:"𝔨";s:1:"k";s:4:"𝔩";s:1:"l";s:4:"𝔪";s:1:"m";s:4:"𝔫";s:1:"n";s:4:"𝔬";s:1:"o";s:4:"𝔭";s:1:"p";s:4:"𝔮";s:1:"q";s:4:"𝔯";s:1:"r";s:4:"𝔰";s:1:"s";s:4:"𝔱";s:1:"t";s:4:"𝔲";s:1:"u";s:4:"𝔳";s:1:"v";s:4:"𝔴";s:1:"w";s:4:"𝔵";s:1:"x";s:4:"𝔶";s:1:"y";s:4:"𝔷";s:1:"z";s:4:"𝔸";s:1:"A";s:4:"𝔹";s:1:"B";s:4:"𝔻";s:1:"D";s:4:"𝔼";s:1:"E";s:4:"𝔽";s:1:"F";s:4:"𝔾";s:1:"G";s:4:"𝕀";s:1:"I";s:4:"𝕁";s:1:"J";s:4:"𝕂";s:1:"K";s:4:"𝕃";s:1:"L";s:4:"𝕄";s:1:"M";s:4:"𝕆";s:1:"O";s:4:"𝕊";s:1:"S";s:4:"𝕋";s:1:"T";s:4:"𝕌";s:1:"U";s:4:"𝕍";s:1:"V";s:4:"𝕎";s:1:"W";s:4:"𝕏";s:1:"X";s:4:"𝕐";s:1:"Y";s:4:"𝕒";s:1:"a";s:4:"𝕓";s:1:"b";s:4:"𝕔";s:1:"c";s:4:"𝕕";s:1:"d";s:4:"𝕖";s:1:"e";s:4:"𝕗";s:1:"f";s:4:"𝕘";s:1:"g";s:4:"𝕙";s:1:"h";s:4:"𝕚";s:1:"i";s:4:"𝕛";s:1:"j";s:4:"𝕜";s:1:"k";s:4:"𝕝";s:1:"l";s:4:"𝕞";s:1:"m";s:4:"𝕟";s:1:"n";s:4:"𝕠";s:1:"o";s:4:"𝕡";s:1:"p";s:4:"𝕢";s:1:"q";s:4:"𝕣";s:1:"r";s:4:"𝕤";s:1:"s";s:4:"𝕥";s:1:"t";s:4:"𝕦";s:1:"u";s:4:"𝕧";s:1:"v";s:4:"𝕨";s:1:"w";s:4:"𝕩";s:1:"x";s:4:"𝕪";s:1:"y";s:4:"𝕫";s:1:"z";s:4:"𝕬";s:1:"A";s:4:"𝕭";s:1:"B";s:4:"𝕮";s:1:"C";s:4:"𝕯";s:1:"D";s:4:"𝕰";s:1:"E";s:4:"𝕱";s:1:"F";s:4:"𝕲";s:1:"G";s:4:"𝕳";s:1:"H";s:4:"𝕴";s:1:"I";s:4:"𝕵";s:1:"J";s:4:"𝕶";s:1:"K";s:4:"𝕷";s:1:"L";s:4:"𝕸";s:1:"M";s:4:"𝕹";s:1:"N";s:4:"𝕺";s:1:"O";s:4:"𝕻";s:1:"P";s:4:"𝕼";s:1:"Q";s:4:"𝕽";s:1:"R";s:4:"𝕾";s:1:"S";s:4:"𝕿";s:1:"T";s:4:"𝖀";s:1:"U";s:4:"𝖁";s:1:"V";s:4:"𝖂";s:1:"W";s:4:"𝖃";s:1:"X";s:4:"𝖄";s:1:"Y";s:4:"𝖅";s:1:"Z";s:4:"𝖆";s:1:"a";s:4:"𝖇";s:1:"b";s:4:"𝖈";s:1:"c";s:4:"𝖉";s:1:"d";s:4:"𝖊";s:1:"e";s:4:"𝖋";s:1:"f";s:4:"𝖌";s:1:"g";s:4:"𝖍";s:1:"h";s:4:"𝖎";s:1:"i";s:4:"𝖏";s:1:"j";s:4:"𝖐";s:1:"k";s:4:"𝖑";s:1:"l";s:4:"𝖒";s:1:"m";s:4:"𝖓";s:1:"n";s:4:"𝖔";s:1:"o";s:4:"𝖕";s:1:"p";s:4:"𝖖";s:1:"q";s:4:"𝖗";s:1:"r";s:4:"𝖘";s:1:"s";s:4:"𝖙";s:1:"t";s:4:"𝖚";s:1:"u";s:4:"𝖛";s:1:"v";s:4:"𝖜";s:1:"w";s:4:"𝖝";s:1:"x";s:4:"𝖞";s:1:"y";s:4:"𝖟";s:1:"z";s:4:"𝖠";s:1:"A";s:4:"𝖡";s:1:"B";s:4:"𝖢";s:1:"C";s:4:"𝖣";s:1:"D";s:4:"𝖤";s:1:"E";s:4:"𝖥";s:1:"F";s:4:"𝖦";s:1:"G";s:4:"𝖧";s:1:"H";s:4:"𝖨";s:1:"I";s:4:"𝖩";s:1:"J";s:4:"𝖪";s:1:"K";s:4:"𝖫";s:1:"L";s:4:"𝖬";s:1:"M";s:4:"𝖭";s:1:"N";s:4:"𝖮";s:1:"O";s:4:"𝖯";s:1:"P";s:4:"𝖰";s:1:"Q";s:4:"𝖱";s:1:"R";s:4:"𝖲";s:1:"S";s:4:"𝖳";s:1:"T";s:4:"𝖴";s:1:"U";s:4:"𝖵";s:1:"V";s:4:"𝖶";s:1:"W";s:4:"𝖷";s:1:"X";s:4:"𝖸";s:1:"Y";s:4:"𝖹";s:1:"Z";s:4:"𝖺";s:1:"a";s:4:"𝖻";s:1:"b";s:4:"𝖼";s:1:"c";s:4:"𝖽";s:1:"d";s:4:"𝖾";s:1:"e";s:4:"𝖿";s:1:"f";s:4:"𝗀";s:1:"g";s:4:"𝗁";s:1:"h";s:4:"𝗂";s:1:"i";s:4:"𝗃";s:1:"j";s:4:"𝗄";s:1:"k";s:4:"𝗅";s:1:"l";s:4:"𝗆";s:1:"m";s:4:"𝗇";s:1:"n";s:4:"𝗈";s:1:"o";s:4:"𝗉";s:1:"p";s:4:"𝗊";s:1:"q";s:4:"𝗋";s:1:"r";s:4:"𝗌";s:1:"s";s:4:"𝗍";s:1:"t";s:4:"𝗎";s:1:"u";s:4:"𝗏";s:1:"v";s:4:"𝗐";s:1:"w";s:4:"𝗑";s:1:"x";s:4:"𝗒";s:1:"y";s:4:"𝗓";s:1:"z";s:4:"𝗔";s:1:"A";s:4:"𝗕";s:1:"B";s:4:"𝗖";s:1:"C";s:4:"𝗗";s:1:"D";s:4:"𝗘";s:1:"E";s:4:"𝗙";s:1:"F";s:4:"𝗚";s:1:"G";s:4:"𝗛";s:1:"H";s:4:"𝗜";s:1:"I";s:4:"𝗝";s:1:"J";s:4:"𝗞";s:1:"K";s:4:"𝗟";s:1:"L";s:4:"𝗠";s:1:"M";s:4:"𝗡";s:1:"N";s:4:"𝗢";s:1:"O";s:4:"𝗣";s:1:"P";s:4:"𝗤";s:1:"Q";s:4:"𝗥";s:1:"R";s:4:"𝗦";s:1:"S";s:4:"𝗧";s:1:"T";s:4:"𝗨";s:1:"U";s:4:"𝗩";s:1:"V";s:4:"𝗪";s:1:"W";s:4:"𝗫";s:1:"X";s:4:"𝗬";s:1:"Y";s:4:"𝗭";s:1:"Z";s:4:"𝗮";s:1:"a";s:4:"𝗯";s:1:"b";s:4:"𝗰";s:1:"c";s:4:"𝗱";s:1:"d";s:4:"𝗲";s:1:"e";s:4:"𝗳";s:1:"f";s:4:"𝗴";s:1:"g";s:4:"𝗵";s:1:"h";s:4:"𝗶";s:1:"i";s:4:"𝗷";s:1:"j";s:4:"𝗸";s:1:"k";s:4:"𝗹";s:1:"l";s:4:"𝗺";s:1:"m";s:4:"𝗻";s:1:"n";s:4:"𝗼";s:1:"o";s:4:"𝗽";s:1:"p";s:4:"𝗾";s:1:"q";s:4:"𝗿";s:1:"r";s:4:"𝘀";s:1:"s";s:4:"𝘁";s:1:"t";s:4:"𝘂";s:1:"u";s:4:"𝘃";s:1:"v";s:4:"𝘄";s:1:"w";s:4:"𝘅";s:1:"x";s:4:"𝘆";s:1:"y";s:4:"𝘇";s:1:"z";s:4:"𝘈";s:1:"A";s:4:"𝘉";s:1:"B";s:4:"𝘊";s:1:"C";s:4:"𝘋";s:1:"D";s:4:"𝘌";s:1:"E";s:4:"𝘍";s:1:"F";s:4:"𝘎";s:1:"G";s:4:"𝘏";s:1:"H";s:4:"𝘐";s:1:"I";s:4:"𝘑";s:1:"J";s:4:"𝘒";s:1:"K";s:4:"𝘓";s:1:"L";s:4:"𝘔";s:1:"M";s:4:"𝘕";s:1:"N";s:4:"𝘖";s:1:"O";s:4:"𝘗";s:1:"P";s:4:"𝘘";s:1:"Q";s:4:"𝘙";s:1:"R";s:4:"𝘚";s:1:"S";s:4:"𝘛";s:1:"T";s:4:"𝘜";s:1:"U";s:4:"𝘝";s:1:"V";s:4:"𝘞";s:1:"W";s:4:"𝘟";s:1:"X";s:4:"𝘠";s:1:"Y";s:4:"𝘡";s:1:"Z";s:4:"𝘢";s:1:"a";s:4:"𝘣";s:1:"b";s:4:"𝘤";s:1:"c";s:4:"𝘥";s:1:"d";s:4:"𝘦";s:1:"e";s:4:"𝘧";s:1:"f";s:4:"𝘨";s:1:"g";s:4:"𝘩";s:1:"h";s:4:"𝘪";s:1:"i";s:4:"𝘫";s:1:"j";s:4:"𝘬";s:1:"k";s:4:"𝘭";s:1:"l";s:4:"𝘮";s:1:"m";s:4:"𝘯";s:1:"n";s:4:"𝘰";s:1:"o";s:4:"𝘱";s:1:"p";s:4:"𝘲";s:1:"q";s:4:"𝘳";s:1:"r";s:4:"𝘴";s:1:"s";s:4:"𝘵";s:1:"t";s:4:"𝘶";s:1:"u";s:4:"𝘷";s:1:"v";s:4:"𝘸";s:1:"w";s:4:"𝘹";s:1:"x";s:4:"𝘺";s:1:"y";s:4:"𝘻";s:1:"z";s:4:"𝘼";s:1:"A";s:4:"𝘽";s:1:"B";s:4:"𝘾";s:1:"C";s:4:"𝘿";s:1:"D";s:4:"𝙀";s:1:"E";s:4:"𝙁";s:1:"F";s:4:"𝙂";s:1:"G";s:4:"𝙃";s:1:"H";s:4:"𝙄";s:1:"I";s:4:"𝙅";s:1:"J";s:4:"𝙆";s:1:"K";s:4:"𝙇";s:1:"L";s:4:"𝙈";s:1:"M";s:4:"𝙉";s:1:"N";s:4:"𝙊";s:1:"O";s:4:"𝙋";s:1:"P";s:4:"𝙌";s:1:"Q";s:4:"𝙍";s:1:"R";s:4:"𝙎";s:1:"S";s:4:"𝙏";s:1:"T";s:4:"𝙐";s:1:"U";s:4:"𝙑";s:1:"V";s:4:"𝙒";s:1:"W";s:4:"𝙓";s:1:"X";s:4:"𝙔";s:1:"Y";s:4:"𝙕";s:1:"Z";s:4:"𝙖";s:1:"a";s:4:"𝙗";s:1:"b";s:4:"𝙘";s:1:"c";s:4:"𝙙";s:1:"d";s:4:"𝙚";s:1:"e";s:4:"𝙛";s:1:"f";s:4:"𝙜";s:1:"g";s:4:"𝙝";s:1:"h";s:4:"𝙞";s:1:"i";s:4:"𝙟";s:1:"j";s:4:"𝙠";s:1:"k";s:4:"𝙡";s:1:"l";s:4:"𝙢";s:1:"m";s:4:"𝙣";s:1:"n";s:4:"𝙤";s:1:"o";s:4:"𝙥";s:1:"p";s:4:"𝙦";s:1:"q";s:4:"𝙧";s:1:"r";s:4:"𝙨";s:1:"s";s:4:"𝙩";s:1:"t";s:4:"𝙪";s:1:"u";s:4:"𝙫";s:1:"v";s:4:"𝙬";s:1:"w";s:4:"𝙭";s:1:"x";s:4:"𝙮";s:1:"y";s:4:"𝙯";s:1:"z";s:4:"𝙰";s:1:"A";s:4:"𝙱";s:1:"B";s:4:"𝙲";s:1:"C";s:4:"𝙳";s:1:"D";s:4:"𝙴";s:1:"E";s:4:"𝙵";s:1:"F";s:4:"𝙶";s:1:"G";s:4:"𝙷";s:1:"H";s:4:"𝙸";s:1:"I";s:4:"𝙹";s:1:"J";s:4:"𝙺";s:1:"K";s:4:"𝙻";s:1:"L";s:4:"𝙼";s:1:"M";s:4:"𝙽";s:1:"N";s:4:"𝙾";s:1:"O";s:4:"𝙿";s:1:"P";s:4:"𝚀";s:1:"Q";s:4:"𝚁";s:1:"R";s:4:"𝚂";s:1:"S";s:4:"𝚃";s:1:"T";s:4:"𝚄";s:1:"U";s:4:"𝚅";s:1:"V";s:4:"𝚆";s:1:"W";s:4:"𝚇";s:1:"X";s:4:"𝚈";s:1:"Y";s:4:"𝚉";s:1:"Z";s:4:"𝚊";s:1:"a";s:4:"𝚋";s:1:"b";s:4:"𝚌";s:1:"c";s:4:"𝚍";s:1:"d";s:4:"𝚎";s:1:"e";s:4:"𝚏";s:1:"f";s:4:"𝚐";s:1:"g";s:4:"𝚑";s:1:"h";s:4:"𝚒";s:1:"i";s:4:"𝚓";s:1:"j";s:4:"𝚔";s:1:"k";s:4:"𝚕";s:1:"l";s:4:"𝚖";s:1:"m";s:4:"𝚗";s:1:"n";s:4:"𝚘";s:1:"o";s:4:"𝚙";s:1:"p";s:4:"𝚚";s:1:"q";s:4:"𝚛";s:1:"r";s:4:"𝚜";s:1:"s";s:4:"𝚝";s:1:"t";s:4:"𝚞";s:1:"u";s:4:"𝚟";s:1:"v";s:4:"𝚠";s:1:"w";s:4:"𝚡";s:1:"x";s:4:"𝚢";s:1:"y";s:4:"𝚣";s:1:"z";s:4:"𝚤";s:2:"ı";s:4:"𝚥";s:2:"ȷ";s:4:"𝚨";s:2:"Α";s:4:"𝚩";s:2:"Β";s:4:"𝚪";s:2:"Γ";s:4:"𝚫";s:2:"Δ";s:4:"𝚬";s:2:"Ε";s:4:"𝚭";s:2:"Ζ";s:4:"𝚮";s:2:"Η";s:4:"𝚯";s:2:"Θ";s:4:"𝚰";s:2:"Ι";s:4:"𝚱";s:2:"Κ";s:4:"𝚲";s:2:"Λ";s:4:"𝚳";s:2:"Μ";s:4:"𝚴";s:2:"Ν";s:4:"𝚵";s:2:"Ξ";s:4:"𝚶";s:2:"Ο";s:4:"𝚷";s:2:"Π";s:4:"𝚸";s:2:"Ρ";s:4:"𝚹";s:2:"Θ";s:4:"𝚺";s:2:"Σ";s:4:"𝚻";s:2:"Τ";s:4:"𝚼";s:2:"Υ";s:4:"𝚽";s:2:"Φ";s:4:"𝚾";s:2:"Χ";s:4:"𝚿";s:2:"Ψ";s:4:"𝛀";s:2:"Ω";s:4:"𝛁";s:3:"∇";s:4:"𝛂";s:2:"α";s:4:"𝛃";s:2:"β";s:4:"𝛄";s:2:"γ";s:4:"𝛅";s:2:"δ";s:4:"𝛆";s:2:"ε";s:4:"𝛇";s:2:"ζ";s:4:"𝛈";s:2:"η";s:4:"𝛉";s:2:"θ";s:4:"𝛊";s:2:"ι";s:4:"𝛋";s:2:"κ";s:4:"𝛌";s:2:"λ";s:4:"𝛍";s:2:"μ";s:4:"𝛎";s:2:"ν";s:4:"𝛏";s:2:"ξ";s:4:"𝛐";s:2:"ο";s:4:"𝛑";s:2:"π";s:4:"𝛒";s:2:"ρ";s:4:"𝛓";s:2:"ς";s:4:"𝛔";s:2:"σ";s:4:"𝛕";s:2:"τ";s:4:"𝛖";s:2:"υ";s:4:"𝛗";s:2:"φ";s:4:"𝛘";s:2:"χ";s:4:"𝛙";s:2:"ψ";s:4:"𝛚";s:2:"ω";s:4:"𝛛";s:3:"∂";s:4:"𝛜";s:2:"ε";s:4:"𝛝";s:2:"θ";s:4:"𝛞";s:2:"κ";s:4:"𝛟";s:2:"φ";s:4:"𝛠";s:2:"ρ";s:4:"𝛡";s:2:"π";s:4:"𝛢";s:2:"Α";s:4:"𝛣";s:2:"Β";s:4:"𝛤";s:2:"Γ";s:4:"𝛥";s:2:"Δ";s:4:"𝛦";s:2:"Ε";s:4:"𝛧";s:2:"Ζ";s:4:"𝛨";s:2:"Η";s:4:"𝛩";s:2:"Θ";s:4:"𝛪";s:2:"Ι";s:4:"𝛫";s:2:"Κ";s:4:"𝛬";s:2:"Λ";s:4:"𝛭";s:2:"Μ";s:4:"𝛮";s:2:"Ν";s:4:"𝛯";s:2:"Ξ";s:4:"𝛰";s:2:"Ο";s:4:"𝛱";s:2:"Π";s:4:"𝛲";s:2:"Ρ";s:4:"𝛳";s:2:"Θ";s:4:"𝛴";s:2:"Σ";s:4:"𝛵";s:2:"Τ";s:4:"𝛶";s:2:"Υ";s:4:"𝛷";s:2:"Φ";s:4:"𝛸";s:2:"Χ";s:4:"𝛹";s:2:"Ψ";s:4:"𝛺";s:2:"Ω";s:4:"𝛻";s:3:"∇";s:4:"𝛼";s:2:"α";s:4:"𝛽";s:2:"β";s:4:"𝛾";s:2:"γ";s:4:"𝛿";s:2:"δ";s:4:"𝜀";s:2:"ε";s:4:"𝜁";s:2:"ζ";s:4:"𝜂";s:2:"η";s:4:"𝜃";s:2:"θ";s:4:"𝜄";s:2:"ι";s:4:"𝜅";s:2:"κ";s:4:"𝜆";s:2:"λ";s:4:"𝜇";s:2:"μ";s:4:"𝜈";s:2:"ν";s:4:"𝜉";s:2:"ξ";s:4:"𝜊";s:2:"ο";s:4:"𝜋";s:2:"π";s:4:"𝜌";s:2:"ρ";s:4:"𝜍";s:2:"ς";s:4:"𝜎";s:2:"σ";s:4:"𝜏";s:2:"τ";s:4:"𝜐";s:2:"υ";s:4:"𝜑";s:2:"φ";s:4:"𝜒";s:2:"χ";s:4:"𝜓";s:2:"ψ";s:4:"𝜔";s:2:"ω";s:4:"𝜕";s:3:"∂";s:4:"𝜖";s:2:"ε";s:4:"𝜗";s:2:"θ";s:4:"𝜘";s:2:"κ";s:4:"𝜙";s:2:"φ";s:4:"𝜚";s:2:"ρ";s:4:"𝜛";s:2:"π";s:4:"𝜜";s:2:"Α";s:4:"𝜝";s:2:"Β";s:4:"𝜞";s:2:"Γ";s:4:"𝜟";s:2:"Δ";s:4:"𝜠";s:2:"Ε";s:4:"𝜡";s:2:"Ζ";s:4:"𝜢";s:2:"Η";s:4:"𝜣";s:2:"Θ";s:4:"𝜤";s:2:"Ι";s:4:"𝜥";s:2:"Κ";s:4:"𝜦";s:2:"Λ";s:4:"𝜧";s:2:"Μ";s:4:"𝜨";s:2:"Ν";s:4:"𝜩";s:2:"Ξ";s:4:"𝜪";s:2:"Ο";s:4:"𝜫";s:2:"Π";s:4:"𝜬";s:2:"Ρ";s:4:"𝜭";s:2:"Θ";s:4:"𝜮";s:2:"Σ";s:4:"𝜯";s:2:"Τ";s:4:"𝜰";s:2:"Υ";s:4:"𝜱";s:2:"Φ";s:4:"𝜲";s:2:"Χ";s:4:"𝜳";s:2:"Ψ";s:4:"𝜴";s:2:"Ω";s:4:"𝜵";s:3:"∇";s:4:"𝜶";s:2:"α";s:4:"𝜷";s:2:"β";s:4:"𝜸";s:2:"γ";s:4:"𝜹";s:2:"δ";s:4:"𝜺";s:2:"ε";s:4:"𝜻";s:2:"ζ";s:4:"𝜼";s:2:"η";s:4:"𝜽";s:2:"θ";s:4:"𝜾";s:2:"ι";s:4:"𝜿";s:2:"κ";s:4:"𝝀";s:2:"λ";s:4:"𝝁";s:2:"μ";s:4:"𝝂";s:2:"ν";s:4:"𝝃";s:2:"ξ";s:4:"𝝄";s:2:"ο";s:4:"𝝅";s:2:"π";s:4:"𝝆";s:2:"ρ";s:4:"𝝇";s:2:"ς";s:4:"𝝈";s:2:"σ";s:4:"𝝉";s:2:"τ";s:4:"𝝊";s:2:"υ";s:4:"𝝋";s:2:"φ";s:4:"𝝌";s:2:"χ";s:4:"𝝍";s:2:"ψ";s:4:"𝝎";s:2:"ω";s:4:"𝝏";s:3:"∂";s:4:"𝝐";s:2:"ε";s:4:"𝝑";s:2:"θ";s:4:"𝝒";s:2:"κ";s:4:"𝝓";s:2:"φ";s:4:"𝝔";s:2:"ρ";s:4:"𝝕";s:2:"π";s:4:"𝝖";s:2:"Α";s:4:"𝝗";s:2:"Β";s:4:"𝝘";s:2:"Γ";s:4:"𝝙";s:2:"Δ";s:4:"𝝚";s:2:"Ε";s:4:"𝝛";s:2:"Ζ";s:4:"𝝜";s:2:"Η";s:4:"𝝝";s:2:"Θ";s:4:"𝝞";s:2:"Ι";s:4:"𝝟";s:2:"Κ";s:4:"𝝠";s:2:"Λ";s:4:"𝝡";s:2:"Μ";s:4:"𝝢";s:2:"Ν";s:4:"𝝣";s:2:"Ξ";s:4:"𝝤";s:2:"Ο";s:4:"𝝥";s:2:"Π";s:4:"𝝦";s:2:"Ρ";s:4:"𝝧";s:2:"Θ";s:4:"𝝨";s:2:"Σ";s:4:"𝝩";s:2:"Τ";s:4:"𝝪";s:2:"Υ";s:4:"𝝫";s:2:"Φ";s:4:"𝝬";s:2:"Χ";s:4:"𝝭";s:2:"Ψ";s:4:"𝝮";s:2:"Ω";s:4:"𝝯";s:3:"∇";s:4:"𝝰";s:2:"α";s:4:"𝝱";s:2:"β";s:4:"𝝲";s:2:"γ";s:4:"𝝳";s:2:"δ";s:4:"𝝴";s:2:"ε";s:4:"𝝵";s:2:"ζ";s:4:"𝝶";s:2:"η";s:4:"𝝷";s:2:"θ";s:4:"𝝸";s:2:"ι";s:4:"𝝹";s:2:"κ";s:4:"𝝺";s:2:"λ";s:4:"𝝻";s:2:"μ";s:4:"𝝼";s:2:"ν";s:4:"𝝽";s:2:"ξ";s:4:"𝝾";s:2:"ο";s:4:"𝝿";s:2:"π";s:4:"𝞀";s:2:"ρ";s:4:"𝞁";s:2:"ς";s:4:"𝞂";s:2:"σ";s:4:"𝞃";s:2:"τ";s:4:"𝞄";s:2:"υ";s:4:"𝞅";s:2:"φ";s:4:"𝞆";s:2:"χ";s:4:"𝞇";s:2:"ψ";s:4:"𝞈";s:2:"ω";s:4:"𝞉";s:3:"∂";s:4:"𝞊";s:2:"ε";s:4:"𝞋";s:2:"θ";s:4:"𝞌";s:2:"κ";s:4:"𝞍";s:2:"φ";s:4:"𝞎";s:2:"ρ";s:4:"𝞏";s:2:"π";s:4:"𝞐";s:2:"Α";s:4:"𝞑";s:2:"Β";s:4:"𝞒";s:2:"Γ";s:4:"𝞓";s:2:"Δ";s:4:"𝞔";s:2:"Ε";s:4:"𝞕";s:2:"Ζ";s:4:"𝞖";s:2:"Η";s:4:"𝞗";s:2:"Θ";s:4:"𝞘";s:2:"Ι";s:4:"𝞙";s:2:"Κ";s:4:"𝞚";s:2:"Λ";s:4:"𝞛";s:2:"Μ";s:4:"𝞜";s:2:"Ν";s:4:"𝞝";s:2:"Ξ";s:4:"𝞞";s:2:"Ο";s:4:"𝞟";s:2:"Π";s:4:"𝞠";s:2:"Ρ";s:4:"𝞡";s:2:"Θ";s:4:"𝞢";s:2:"Σ";s:4:"𝞣";s:2:"Τ";s:4:"𝞤";s:2:"Υ";s:4:"𝞥";s:2:"Φ";s:4:"𝞦";s:2:"Χ";s:4:"𝞧";s:2:"Ψ";s:4:"𝞨";s:2:"Ω";s:4:"𝞩";s:3:"∇";s:4:"𝞪";s:2:"α";s:4:"𝞫";s:2:"β";s:4:"𝞬";s:2:"γ";s:4:"𝞭";s:2:"δ";s:4:"𝞮";s:2:"ε";s:4:"𝞯";s:2:"ζ";s:4:"𝞰";s:2:"η";s:4:"𝞱";s:2:"θ";s:4:"𝞲";s:2:"ι";s:4:"𝞳";s:2:"κ";s:4:"𝞴";s:2:"λ";s:4:"𝞵";s:2:"μ";s:4:"𝞶";s:2:"ν";s:4:"𝞷";s:2:"ξ";s:4:"𝞸";s:2:"ο";s:4:"𝞹";s:2:"π";s:4:"𝞺";s:2:"ρ";s:4:"𝞻";s:2:"ς";s:4:"𝞼";s:2:"σ";s:4:"𝞽";s:2:"τ";s:4:"𝞾";s:2:"υ";s:4:"𝞿";s:2:"φ";s:4:"𝟀";s:2:"χ";s:4:"𝟁";s:2:"ψ";s:4:"𝟂";s:2:"ω";s:4:"𝟃";s:3:"∂";s:4:"𝟄";s:2:"ε";s:4:"𝟅";s:2:"θ";s:4:"𝟆";s:2:"κ";s:4:"𝟇";s:2:"φ";s:4:"𝟈";s:2:"ρ";s:4:"𝟉";s:2:"π";s:4:"𝟊";s:2:"Ϝ";s:4:"𝟋";s:2:"ϝ";s:4:"𝟎";s:1:"0";s:4:"𝟏";s:1:"1";s:4:"𝟐";s:1:"2";s:4:"𝟑";s:1:"3";s:4:"𝟒";s:1:"4";s:4:"𝟓";s:1:"5";s:4:"𝟔";s:1:"6";s:4:"𝟕";s:1:"7";s:4:"𝟖";s:1:"8";s:4:"𝟗";s:1:"9";s:4:"𝟘";s:1:"0";s:4:"𝟙";s:1:"1";s:4:"𝟚";s:1:"2";s:4:"𝟛";s:1:"3";s:4:"𝟜";s:1:"4";s:4:"𝟝";s:1:"5";s:4:"𝟞";s:1:"6";s:4:"𝟟";s:1:"7";s:4:"𝟠";s:1:"8";s:4:"𝟡";s:1:"9";s:4:"𝟢";s:1:"0";s:4:"𝟣";s:1:"1";s:4:"𝟤";s:1:"2";s:4:"𝟥";s:1:"3";s:4:"𝟦";s:1:"4";s:4:"𝟧";s:1:"5";s:4:"𝟨";s:1:"6";s:4:"𝟩";s:1:"7";s:4:"𝟪";s:1:"8";s:4:"𝟫";s:1:"9";s:4:"𝟬";s:1:"0";s:4:"𝟭";s:1:"1";s:4:"𝟮";s:1:"2";s:4:"𝟯";s:1:"3";s:4:"𝟰";s:1:"4";s:4:"𝟱";s:1:"5";s:4:"𝟲";s:1:"6";s:4:"𝟳";s:1:"7";s:4:"𝟴";s:1:"8";s:4:"𝟵";s:1:"9";s:4:"𝟶";s:1:"0";s:4:"𝟷";s:1:"1";s:4:"𝟸";s:1:"2";s:4:"𝟹";s:1:"3";s:4:"𝟺";s:1:"4";s:4:"𝟻";s:1:"5";s:4:"𝟼";s:1:"6";s:4:"𝟽";s:1:"7";s:4:"𝟾";s:1:"8";s:4:"𝟿";s:1:"9";s:4:"🄀";s:2:"0.";s:4:"🄁";s:2:"0,";s:4:"🄂";s:2:"1,";s:4:"🄃";s:2:"2,";s:4:"🄄";s:2:"3,";s:4:"🄅";s:2:"4,";s:4:"🄆";s:2:"5,";s:4:"🄇";s:2:"6,";s:4:"🄈";s:2:"7,";s:4:"🄉";s:2:"8,";s:4:"🄊";s:2:"9,";s:4:"🄐";s:3:"(A)";s:4:"🄑";s:3:"(B)";s:4:"🄒";s:3:"(C)";s:4:"🄓";s:3:"(D)";s:4:"🄔";s:3:"(E)";s:4:"🄕";s:3:"(F)";s:4:"🄖";s:3:"(G)";s:4:"🄗";s:3:"(H)";s:4:"🄘";s:3:"(I)";s:4:"🄙";s:3:"(J)";s:4:"🄚";s:3:"(K)";s:4:"🄛";s:3:"(L)";s:4:"🄜";s:3:"(M)";s:4:"🄝";s:3:"(N)";s:4:"🄞";s:3:"(O)";s:4:"🄟";s:3:"(P)";s:4:"🄠";s:3:"(Q)";s:4:"🄡";s:3:"(R)";s:4:"🄢";s:3:"(S)";s:4:"🄣";s:3:"(T)";s:4:"🄤";s:3:"(U)";s:4:"🄥";s:3:"(V)";s:4:"🄦";s:3:"(W)";s:4:"🄧";s:3:"(X)";s:4:"🄨";s:3:"(Y)";s:4:"🄩";s:3:"(Z)";s:4:"🄪";s:7:"〔S〕";s:4:"🄫";s:1:"C";s:4:"🄬";s:1:"R";s:4:"🄭";s:2:"CD";s:4:"🄮";s:2:"WZ";s:4:"🄱";s:1:"B";s:4:"🄽";s:1:"N";s:4:"🄿";s:1:"P";s:4:"🅂";s:1:"S";s:4:"🅆";s:1:"W";s:4:"🅊";s:2:"HV";s:4:"🅋";s:2:"MV";s:4:"🅌";s:2:"SD";s:4:"🅍";s:2:"SS";s:4:"🅎";s:3:"PPV";s:4:"🆐";s:2:"DJ";s:4:"🈀";s:6:"ほか";s:4:"🈐";s:3:"手";s:4:"🈑";s:3:"字";s:4:"🈒";s:3:"双";s:4:"🈓";s:6:"デ";s:4:"🈔";s:3:"二";s:4:"🈕";s:3:"多";s:4:"🈖";s:3:"解";s:4:"🈗";s:3:"天";s:4:"🈘";s:3:"交";s:4:"🈙";s:3:"映";s:4:"🈚";s:3:"無";s:4:"🈛";s:3:"料";s:4:"🈜";s:3:"前";s:4:"🈝";s:3:"後";s:4:"🈞";s:3:"再";s:4:"🈟";s:3:"新";s:4:"🈠";s:3:"初";s:4:"🈡";s:3:"終";s:4:"🈢";s:3:"生";s:4:"🈣";s:3:"販";s:4:"🈤";s:3:"声";s:4:"🈥";s:3:"吹";s:4:"🈦";s:3:"演";s:4:"🈧";s:3:"投";s:4:"🈨";s:3:"捕";s:4:"🈩";s:3:"一";s:4:"🈪";s:3:"三";s:4:"🈫";s:3:"遊";s:4:"🈬";s:3:"左";s:4:"🈭";s:3:"中";s:4:"🈮";s:3:"右";s:4:"🈯";s:3:"指";s:4:"🈰";s:3:"走";s:4:"🈱";s:3:"打";s:4:"🉀";s:9:"〔本〕";s:4:"🉁";s:9:"〔三〕";s:4:"🉂";s:9:"〔二〕";s:4:"🉃";s:9:"〔安〕";s:4:"🉄";s:9:"〔点〕";s:4:"🉅";s:9:"〔打〕";s:4:"🉆";s:9:"〔盗〕";s:4:"🉇";s:9:"〔勝〕";s:4:"🉈";s:9:"〔敗〕";s:4:"丽";s:3:"丽";s:4:"丸";s:3:"丸";s:4:"乁";s:3:"乁";s:4:"𠄢";s:4:"𠄢";s:4:"你";s:3:"你";s:4:"侮";s:3:"侮";s:4:"侻";s:3:"侻";s:4:"倂";s:3:"倂";s:4:"偺";s:3:"偺";s:4:"備";s:3:"備";s:4:"僧";s:3:"僧";s:4:"像";s:3:"像";s:4:"㒞";s:3:"㒞";s:4:"𠘺";s:4:"𠘺";s:4:"免";s:3:"免";s:4:"兔";s:3:"兔";s:4:"兤";s:3:"兤";s:4:"具";s:3:"具";s:4:"𠔜";s:4:"𠔜";s:4:"㒹";s:3:"㒹";s:4:"內";s:3:"內";s:4:"再";s:3:"再";s:4:"𠕋";s:4:"𠕋";s:4:"冗";s:3:"冗";s:4:"冤";s:3:"冤";s:4:"仌";s:3:"仌";s:4:"冬";s:3:"冬";s:4:"况";s:3:"况";s:4:"𩇟";s:4:"𩇟";s:4:"凵";s:3:"凵";s:4:"刃";s:3:"刃";s:4:"㓟";s:3:"㓟";s:4:"刻";s:3:"刻";s:4:"剆";s:3:"剆";s:4:"割";s:3:"割";s:4:"剷";s:3:"剷";s:4:"㔕";s:3:"㔕";s:4:"勇";s:3:"勇";s:4:"勉";s:3:"勉";s:4:"勤";s:3:"勤";s:4:"勺";s:3:"勺";s:4:"包";s:3:"包";s:4:"匆";s:3:"匆";s:4:"北";s:3:"北";s:4:"卉";s:3:"卉";s:4:"卑";s:3:"卑";s:4:"博";s:3:"博";s:4:"即";s:3:"即";s:4:"卽";s:3:"卽";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"𠨬";s:4:"𠨬";s:4:"灰";s:3:"灰";s:4:"及";s:3:"及";s:4:"叟";s:3:"叟";s:4:"𠭣";s:4:"𠭣";s:4:"叫";s:3:"叫";s:4:"叱";s:3:"叱";s:4:"吆";s:3:"吆";s:4:"咞";s:3:"咞";s:4:"吸";s:3:"吸";s:4:"呈";s:3:"呈";s:4:"周";s:3:"周";s:4:"咢";s:3:"咢";s:4:"哶";s:3:"哶";s:4:"唐";s:3:"唐";s:4:"啓";s:3:"啓";s:4:"啣";s:3:"啣";s:4:"善";s:3:"善";s:4:"善";s:3:"善";s:4:"喙";s:3:"喙";s:4:"喫";s:3:"喫";s:4:"喳";s:3:"喳";s:4:"嗂";s:3:"嗂";s:4:"圖";s:3:"圖";s:4:"嘆";s:3:"嘆";s:4:"圗";s:3:"圗";s:4:"噑";s:3:"噑";s:4:"噴";s:3:"噴";s:4:"切";s:3:"切";s:4:"壮";s:3:"壮";s:4:"城";s:3:"城";s:4:"埴";s:3:"埴";s:4:"堍";s:3:"堍";s:4:"型";s:3:"型";s:4:"堲";s:3:"堲";s:4:"報";s:3:"報";s:4:"墬";s:3:"墬";s:4:"𡓤";s:4:"𡓤";s:4:"売";s:3:"売";s:4:"壷";s:3:"壷";s:4:"夆";s:3:"夆";s:4:"多";s:3:"多";s:4:"夢";s:3:"夢";s:4:"奢";s:3:"奢";s:4:"𡚨";s:4:"𡚨";s:4:"𡛪";s:4:"𡛪";s:4:"姬";s:3:"姬";s:4:"娛";s:3:"娛";s:4:"娧";s:3:"娧";s:4:"姘";s:3:"姘";s:4:"婦";s:3:"婦";s:4:"㛮";s:3:"㛮";s:4:"㛼";s:3:"㛼";s:4:"嬈";s:3:"嬈";s:4:"嬾";s:3:"嬾";s:4:"嬾";s:3:"嬾";s:4:"𡧈";s:4:"𡧈";s:4:"寃";s:3:"寃";s:4:"寘";s:3:"寘";s:4:"寧";s:3:"寧";s:4:"寳";s:3:"寳";s:4:"𡬘";s:4:"𡬘";s:4:"寿";s:3:"寿";s:4:"将";s:3:"将";s:4:"当";s:3:"当";s:4:"尢";s:3:"尢";s:4:"㞁";s:3:"㞁";s:4:"屠";s:3:"屠";s:4:"屮";s:3:"屮";s:4:"峀";s:3:"峀";s:4:"岍";s:3:"岍";s:4:"𡷤";s:4:"𡷤";s:4:"嵃";s:3:"嵃";s:4:"𡷦";s:4:"𡷦";s:4:"嵮";s:3:"嵮";s:4:"嵫";s:3:"嵫";s:4:"嵼";s:3:"嵼";s:4:"巡";s:3:"巡";s:4:"巢";s:3:"巢";s:4:"㠯";s:3:"㠯";s:4:"巽";s:3:"巽";s:4:"帨";s:3:"帨";s:4:"帽";s:3:"帽";s:4:"幩";s:3:"幩";s:4:"㡢";s:3:"㡢";s:4:"𢆃";s:4:"𢆃";s:4:"㡼";s:3:"㡼";s:4:"庰";s:3:"庰";s:4:"庳";s:3:"庳";s:4:"庶";s:3:"庶";s:4:"廊";s:3:"廊";s:4:"𪎒";s:4:"𪎒";s:4:"廾";s:3:"廾";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"舁";s:3:"舁";s:4:"弢";s:3:"弢";s:4:"弢";s:3:"弢";s:4:"㣇";s:3:"㣇";s:4:"𣊸";s:4:"𣊸";s:4:"𦇚";s:4:"𦇚";s:4:"形";s:3:"形";s:4:"彫";s:3:"彫";s:4:"㣣";s:3:"㣣";s:4:"徚";s:3:"徚";s:4:"忍";s:3:"忍";s:4:"志";s:3:"志";s:4:"忹";s:3:"忹";s:4:"悁";s:3:"悁";s:4:"㤺";s:3:"㤺";s:4:"㤜";s:3:"㤜";s:4:"悔";s:3:"悔";s:4:"𢛔";s:4:"𢛔";s:4:"惇";s:3:"惇";s:4:"慈";s:3:"慈";s:4:"慌";s:3:"慌";s:4:"慎";s:3:"慎";s:4:"慌";s:3:"慌";s:4:"慺";s:3:"慺";s:4:"憎";s:3:"憎";s:4:"憲";s:3:"憲";s:4:"憤";s:3:"憤";s:4:"憯";s:3:"憯";s:4:"懞";s:3:"懞";s:4:"懲";s:3:"懲";s:4:"懶";s:3:"懶";s:4:"成";s:3:"成";s:4:"戛";s:3:"戛";s:4:"扝";s:3:"扝";s:4:"抱";s:3:"抱";s:4:"拔";s:3:"拔";s:4:"捐";s:3:"捐";s:4:"𢬌";s:4:"𢬌";s:4:"挽";s:3:"挽";s:4:"拼";s:3:"拼";s:4:"捨";s:3:"捨";s:4:"掃";s:3:"掃";s:4:"揤";s:3:"揤";s:4:"𢯱";s:4:"𢯱";s:4:"搢";s:3:"搢";s:4:"揅";s:3:"揅";s:4:"掩";s:3:"掩";s:4:"㨮";s:3:"㨮";s:4:"摩";s:3:"摩";s:4:"摾";s:3:"摾";s:4:"撝";s:3:"撝";s:4:"摷";s:3:"摷";s:4:"㩬";s:3:"㩬";s:4:"敏";s:3:"敏";s:4:"敬";s:3:"敬";s:4:"𣀊";s:4:"𣀊";s:4:"旣";s:3:"旣";s:4:"書";s:3:"書";s:4:"晉";s:3:"晉";s:4:"㬙";s:3:"㬙";s:4:"暑";s:3:"暑";s:4:"㬈";s:3:"㬈";s:4:"㫤";s:3:"㫤";s:4:"冒";s:3:"冒";s:4:"冕";s:3:"冕";s:4:"最";s:3:"最";s:4:"暜";s:3:"暜";s:4:"肭";s:3:"肭";s:4:"䏙";s:3:"䏙";s:4:"朗";s:3:"朗";s:4:"望";s:3:"望";s:4:"朡";s:3:"朡";s:4:"杞";s:3:"杞";s:4:"杓";s:3:"杓";s:4:"𣏃";s:4:"𣏃";s:4:"㭉";s:3:"㭉";s:4:"柺";s:3:"柺";s:4:"枅";s:3:"枅";s:4:"桒";s:3:"桒";s:4:"梅";s:3:"梅";s:4:"𣑭";s:4:"𣑭";s:4:"梎";s:3:"梎";s:4:"栟";s:3:"栟";s:4:"椔";s:3:"椔";s:4:"㮝";s:3:"㮝";s:4:"楂";s:3:"楂";s:4:"榣";s:3:"榣";s:4:"槪";s:3:"槪";s:4:"檨";s:3:"檨";s:4:"𣚣";s:4:"𣚣";s:4:"櫛";s:3:"櫛";s:4:"㰘";s:3:"㰘";s:4:"次";s:3:"次";s:4:"𣢧";s:4:"𣢧";s:4:"歔";s:3:"歔";s:4:"㱎";s:3:"㱎";s:4:"歲";s:3:"歲";s:4:"殟";s:3:"殟";s:4:"殺";s:3:"殺";s:4:"殻";s:3:"殻";s:4:"𣪍";s:4:"𣪍";s:4:"𡴋";s:4:"𡴋";s:4:"𣫺";s:4:"𣫺";s:4:"汎";s:3:"汎";s:4:"𣲼";s:4:"𣲼";s:4:"沿";s:3:"沿";s:4:"泍";s:3:"泍";s:4:"汧";s:3:"汧";s:4:"洖";s:3:"洖";s:4:"派";s:3:"派";s:4:"海";s:3:"海";s:4:"流";s:3:"流";s:4:"浩";s:3:"浩";s:4:"浸";s:3:"浸";s:4:"涅";s:3:"涅";s:4:"𣴞";s:4:"𣴞";s:4:"洴";s:3:"洴";s:4:"港";s:3:"港";s:4:"湮";s:3:"湮";s:4:"㴳";s:3:"㴳";s:4:"滋";s:3:"滋";s:4:"滇";s:3:"滇";s:4:"𣻑";s:4:"𣻑";s:4:"淹";s:3:"淹";s:4:"潮";s:3:"潮";s:4:"𣽞";s:4:"𣽞";s:4:"𣾎";s:4:"𣾎";s:4:"濆";s:3:"濆";s:4:"瀹";s:3:"瀹";s:4:"瀞";s:3:"瀞";s:4:"瀛";s:3:"瀛";s:4:"㶖";s:3:"㶖";s:4:"灊";s:3:"灊";s:4:"災";s:3:"災";s:4:"灷";s:3:"灷";s:4:"炭";s:3:"炭";s:4:"𠔥";s:4:"𠔥";s:4:"煅";s:3:"煅";s:4:"𤉣";s:4:"𤉣";s:4:"熜";s:3:"熜";s:4:"𤎫";s:4:"𤎫";s:4:"爨";s:3:"爨";s:4:"爵";s:3:"爵";s:4:"牐";s:3:"牐";s:4:"𤘈";s:4:"𤘈";s:4:"犀";s:3:"犀";s:4:"犕";s:3:"犕";s:4:"𤜵";s:4:"𤜵";s:4:"𤠔";s:4:"𤠔";s:4:"獺";s:3:"獺";s:4:"王";s:3:"王";s:4:"㺬";s:3:"㺬";s:4:"玥";s:3:"玥";s:4:"㺸";s:3:"㺸";s:4:"㺸";s:3:"㺸";s:4:"瑇";s:3:"瑇";s:4:"瑜";s:3:"瑜";s:4:"瑱";s:3:"瑱";s:4:"璅";s:3:"璅";s:4:"瓊";s:3:"瓊";s:4:"㼛";s:3:"㼛";s:4:"甤";s:3:"甤";s:4:"𤰶";s:4:"𤰶";s:4:"甾";s:3:"甾";s:4:"𤲒";s:4:"𤲒";s:4:"異";s:3:"異";s:4:"𢆟";s:4:"𢆟";s:4:"瘐";s:3:"瘐";s:4:"𤾡";s:4:"𤾡";s:4:"𤾸";s:4:"𤾸";s:4:"𥁄";s:4:"𥁄";s:4:"㿼";s:3:"㿼";s:4:"䀈";s:3:"䀈";s:4:"直";s:3:"直";s:4:"𥃳";s:4:"𥃳";s:4:"𥃲";s:4:"𥃲";s:4:"𥄙";s:4:"𥄙";s:4:"𥄳";s:4:"𥄳";s:4:"眞";s:3:"眞";s:4:"真";s:3:"真";s:4:"真";s:3:"真";s:4:"睊";s:3:"睊";s:4:"䀹";s:3:"䀹";s:4:"瞋";s:3:"瞋";s:4:"䁆";s:3:"䁆";s:4:"䂖";s:3:"䂖";s:4:"𥐝";s:4:"𥐝";s:4:"硎";s:3:"硎";s:4:"碌";s:3:"碌";s:4:"磌";s:3:"磌";s:4:"䃣";s:3:"䃣";s:4:"𥘦";s:4:"𥘦";s:4:"祖";s:3:"祖";s:4:"𥚚";s:4:"𥚚";s:4:"𥛅";s:4:"𥛅";s:4:"福";s:3:"福";s:4:"秫";s:3:"秫";s:4:"䄯";s:3:"䄯";s:4:"穀";s:3:"穀";s:4:"穊";s:3:"穊";s:4:"穏";s:3:"穏";s:4:"𥥼";s:4:"𥥼";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"竮";s:3:"竮";s:4:"䈂";s:3:"䈂";s:4:"𥮫";s:4:"𥮫";s:4:"篆";s:3:"篆";s:4:"築";s:3:"築";s:4:"䈧";s:3:"䈧";s:4:"𥲀";s:4:"𥲀";s:4:"糒";s:3:"糒";s:4:"䊠";s:3:"䊠";s:4:"糨";s:3:"糨";s:4:"糣";s:3:"糣";s:4:"紀";s:3:"紀";s:4:"𥾆";s:4:"𥾆";s:4:"絣";s:3:"絣";s:4:"䌁";s:3:"䌁";s:4:"緇";s:3:"緇";s:4:"縂";s:3:"縂";s:4:"繅";s:3:"繅";s:4:"䌴";s:3:"䌴";s:4:"𦈨";s:4:"𦈨";s:4:"𦉇";s:4:"𦉇";s:4:"䍙";s:3:"䍙";s:4:"𦋙";s:4:"𦋙";s:4:"罺";s:3:"罺";s:4:"𦌾";s:4:"𦌾";s:4:"羕";s:3:"羕";s:4:"翺";s:3:"翺";s:4:"者";s:3:"者";s:4:"𦓚";s:4:"𦓚";s:4:"𦔣";s:4:"𦔣";s:4:"聠";s:3:"聠";s:4:"𦖨";s:4:"𦖨";s:4:"聰";s:3:"聰";s:4:"𣍟";s:4:"𣍟";s:4:"䏕";s:3:"䏕";s:4:"育";s:3:"育";s:4:"脃";s:3:"脃";s:4:"䐋";s:3:"䐋";s:4:"脾";s:3:"脾";s:4:"媵";s:3:"媵";s:4:"𦞧";s:4:"𦞧";s:4:"𦞵";s:4:"𦞵";s:4:"𣎓";s:4:"𣎓";s:4:"𣎜";s:4:"𣎜";s:4:"舁";s:3:"舁";s:4:"舄";s:3:"舄";s:4:"辞";s:3:"辞";s:4:"䑫";s:3:"䑫";s:4:"芑";s:3:"芑";s:4:"芋";s:3:"芋";s:4:"芝";s:3:"芝";s:4:"劳";s:3:"劳";s:4:"花";s:3:"花";s:4:"芳";s:3:"芳";s:4:"芽";s:3:"芽";s:4:"苦";s:3:"苦";s:4:"𦬼";s:4:"𦬼";s:4:"若";s:3:"若";s:4:"茝";s:3:"茝";s:4:"荣";s:3:"荣";s:4:"莭";s:3:"莭";s:4:"茣";s:3:"茣";s:4:"莽";s:3:"莽";s:4:"菧";s:3:"菧";s:4:"著";s:3:"著";s:4:"荓";s:3:"荓";s:4:"菊";s:3:"菊";s:4:"菌";s:3:"菌";s:4:"菜";s:3:"菜";s:4:"𦰶";s:4:"𦰶";s:4:"𦵫";s:4:"𦵫";s:4:"𦳕";s:4:"𦳕";s:4:"䔫";s:3:"䔫";s:4:"蓱";s:3:"蓱";s:4:"蓳";s:3:"蓳";s:4:"蔖";s:3:"蔖";s:4:"𧏊";s:4:"𧏊";s:4:"蕤";s:3:"蕤";s:4:"𦼬";s:4:"𦼬";s:4:"䕝";s:3:"䕝";s:4:"䕡";s:3:"䕡";s:4:"𦾱";s:4:"𦾱";s:4:"𧃒";s:4:"𧃒";s:4:"䕫";s:3:"䕫";s:4:"虐";s:3:"虐";s:4:"虜";s:3:"虜";s:4:"虧";s:3:"虧";s:4:"虩";s:3:"虩";s:4:"蚩";s:3:"蚩";s:4:"蚈";s:3:"蚈";s:4:"蜎";s:3:"蜎";s:4:"蛢";s:3:"蛢";s:4:"蝹";s:3:"蝹";s:4:"蜨";s:3:"蜨";s:4:"蝫";s:3:"蝫";s:4:"螆";s:3:"螆";s:4:"䗗";s:3:"䗗";s:4:"蟡";s:3:"蟡";s:4:"蠁";s:3:"蠁";s:4:"䗹";s:3:"䗹";s:4:"衠";s:3:"衠";s:4:"衣";s:3:"衣";s:4:"𧙧";s:4:"𧙧";s:4:"裗";s:3:"裗";s:4:"裞";s:3:"裞";s:4:"䘵";s:3:"䘵";s:4:"裺";s:3:"裺";s:4:"㒻";s:3:"㒻";s:4:"𧢮";s:4:"𧢮";s:4:"𧥦";s:4:"𧥦";s:4:"䚾";s:3:"䚾";s:4:"䛇";s:3:"䛇";s:4:"誠";s:3:"誠";s:4:"諭";s:3:"諭";s:4:"變";s:3:"變";s:4:"豕";s:3:"豕";s:4:"𧲨";s:4:"𧲨";s:4:"貫";s:3:"貫";s:4:"賁";s:3:"賁";s:4:"贛";s:3:"贛";s:4:"起";s:3:"起";s:4:"𧼯";s:4:"𧼯";s:4:"𠠄";s:4:"𠠄";s:4:"跋";s:3:"跋";s:4:"趼";s:3:"趼";s:4:"跰";s:3:"跰";s:4:"𠣞";s:4:"𠣞";s:4:"軔";s:3:"軔";s:4:"輸";s:3:"輸";s:4:"𨗒";s:4:"𨗒";s:4:"𨗭";s:4:"𨗭";s:4:"邔";s:3:"邔";s:4:"郱";s:3:"郱";s:4:"鄑";s:3:"鄑";s:4:"𨜮";s:4:"𨜮";s:4:"鄛";s:3:"鄛";s:4:"鈸";s:3:"鈸";s:4:"鋗";s:3:"鋗";s:4:"鋘";s:3:"鋘";s:4:"鉼";s:3:"鉼";s:4:"鏹";s:3:"鏹";s:4:"鐕";s:3:"鐕";s:4:"𨯺";s:4:"𨯺";s:4:"開";s:3:"開";s:4:"䦕";s:3:"䦕";s:4:"閷";s:3:"閷";s:4:"𨵷";s:4:"𨵷";s:4:"䧦";s:3:"䧦";s:4:"雃";s:3:"雃";s:4:"嶲";s:3:"嶲";s:4:"霣";s:3:"霣";s:4:"𩅅";s:4:"𩅅";s:4:"𩈚";s:4:"𩈚";s:4:"䩮";s:3:"䩮";s:4:"䩶";s:3:"䩶";s:4:"韠";s:3:"韠";s:4:"𩐊";s:4:"𩐊";s:4:"䪲";s:3:"䪲";s:4:"𩒖";s:4:"𩒖";s:4:"頋";s:3:"頋";s:4:"頋";s:3:"頋";s:4:"頩";s:3:"頩";s:4:"𩖶";s:4:"𩖶";s:4:"飢";s:3:"飢";s:4:"䬳";s:3:"䬳";s:4:"餩";s:3:"餩";s:4:"馧";s:3:"馧";s:4:"駂";s:3:"駂";s:4:"駾";s:3:"駾";s:4:"䯎";s:3:"䯎";s:4:"𩬰";s:4:"𩬰";s:4:"鬒";s:3:"鬒";s:4:"鱀";s:3:"鱀";s:4:"鳽";s:3:"鳽";s:4:"䳎";s:3:"䳎";s:4:"䳭";s:3:"䳭";s:4:"鵧";s:3:"鵧";s:4:"𪃎";s:4:"𪃎";s:4:"䳸";s:3:"䳸";s:4:"𪄅";s:4:"𪄅";s:4:"𪈎";s:4:"𪈎";s:4:"𪊑";s:4:"𪊑";s:4:"麻";s:3:"麻";s:4:"䵖";s:3:"䵖";s:4:"黹";s:3:"黹";s:4:"黾";s:3:"黾";s:4:"鼅";s:3:"鼅";s:4:"鼏";s:3:"鼏";s:4:"鼖";s:3:"鼖";s:4:"鼻";s:3:"鼻";s:4:"𪘀";s:4:"𪘀";}' ); + +UtfNormal::$utfCompatibilityDecomp = unserialize( 'a:5405:{s:2:" ";s:1:" ";s:2:"¨";s:3:" ̈";s:2:"ª";s:1:"a";s:2:"¯";s:3:" ̄";s:2:"²";s:1:"2";s:2:"³";s:1:"3";s:2:"´";s:3:" ́";s:2:"µ";s:2:"μ";s:2:"¸";s:3:" ̧";s:2:"¹";s:1:"1";s:2:"º";s:1:"o";s:2:"¼";s:5:"1⁄4";s:2:"½";s:5:"1⁄2";s:2:"¾";s:5:"3⁄4";s:2:"À";s:3:"À";s:2:"Á";s:3:"Á";s:2:"Â";s:3:"Â";s:2:"Ã";s:3:"Ã";s:2:"Ä";s:3:"Ä";s:2:"Å";s:3:"Å";s:2:"Ç";s:3:"Ç";s:2:"È";s:3:"È";s:2:"É";s:3:"É";s:2:"Ê";s:3:"Ê";s:2:"Ë";s:3:"Ë";s:2:"Ì";s:3:"Ì";s:2:"Í";s:3:"Í";s:2:"Î";s:3:"Î";s:2:"Ï";s:3:"Ï";s:2:"Ñ";s:3:"Ñ";s:2:"Ò";s:3:"Ò";s:2:"Ó";s:3:"Ó";s:2:"Ô";s:3:"Ô";s:2:"Õ";s:3:"Õ";s:2:"Ö";s:3:"Ö";s:2:"Ù";s:3:"Ù";s:2:"Ú";s:3:"Ú";s:2:"Û";s:3:"Û";s:2:"Ü";s:3:"Ü";s:2:"Ý";s:3:"Ý";s:2:"à";s:3:"à";s:2:"á";s:3:"á";s:2:"â";s:3:"â";s:2:"ã";s:3:"ã";s:2:"ä";s:3:"ä";s:2:"å";s:3:"å";s:2:"ç";s:3:"ç";s:2:"è";s:3:"è";s:2:"é";s:3:"é";s:2:"ê";s:3:"ê";s:2:"ë";s:3:"ë";s:2:"ì";s:3:"ì";s:2:"í";s:3:"í";s:2:"î";s:3:"î";s:2:"ï";s:3:"ï";s:2:"ñ";s:3:"ñ";s:2:"ò";s:3:"ò";s:2:"ó";s:3:"ó";s:2:"ô";s:3:"ô";s:2:"õ";s:3:"õ";s:2:"ö";s:3:"ö";s:2:"ù";s:3:"ù";s:2:"ú";s:3:"ú";s:2:"û";s:3:"û";s:2:"ü";s:3:"ü";s:2:"ý";s:3:"ý";s:2:"ÿ";s:3:"ÿ";s:2:"Ā";s:3:"Ā";s:2:"ā";s:3:"ā";s:2:"Ă";s:3:"Ă";s:2:"ă";s:3:"ă";s:2:"Ą";s:3:"Ą";s:2:"ą";s:3:"ą";s:2:"Ć";s:3:"Ć";s:2:"ć";s:3:"ć";s:2:"Ĉ";s:3:"Ĉ";s:2:"ĉ";s:3:"ĉ";s:2:"Ċ";s:3:"Ċ";s:2:"ċ";s:3:"ċ";s:2:"Č";s:3:"Č";s:2:"č";s:3:"č";s:2:"Ď";s:3:"Ď";s:2:"ď";s:3:"ď";s:2:"Ē";s:3:"Ē";s:2:"ē";s:3:"ē";s:2:"Ĕ";s:3:"Ĕ";s:2:"ĕ";s:3:"ĕ";s:2:"Ė";s:3:"Ė";s:2:"ė";s:3:"ė";s:2:"Ę";s:3:"Ę";s:2:"ę";s:3:"ę";s:2:"Ě";s:3:"Ě";s:2:"ě";s:3:"ě";s:2:"Ĝ";s:3:"Ĝ";s:2:"ĝ";s:3:"ĝ";s:2:"Ğ";s:3:"Ğ";s:2:"ğ";s:3:"ğ";s:2:"Ġ";s:3:"Ġ";s:2:"ġ";s:3:"ġ";s:2:"Ģ";s:3:"Ģ";s:2:"ģ";s:3:"ģ";s:2:"Ĥ";s:3:"Ĥ";s:2:"ĥ";s:3:"ĥ";s:2:"Ĩ";s:3:"Ĩ";s:2:"ĩ";s:3:"ĩ";s:2:"Ī";s:3:"Ī";s:2:"ī";s:3:"ī";s:2:"Ĭ";s:3:"Ĭ";s:2:"ĭ";s:3:"ĭ";s:2:"Į";s:3:"Į";s:2:"į";s:3:"į";s:2:"İ";s:3:"İ";s:2:"IJ";s:2:"IJ";s:2:"ij";s:2:"ij";s:2:"Ĵ";s:3:"Ĵ";s:2:"ĵ";s:3:"ĵ";s:2:"Ķ";s:3:"Ķ";s:2:"ķ";s:3:"ķ";s:2:"Ĺ";s:3:"Ĺ";s:2:"ĺ";s:3:"ĺ";s:2:"Ļ";s:3:"Ļ";s:2:"ļ";s:3:"ļ";s:2:"Ľ";s:3:"Ľ";s:2:"ľ";s:3:"ľ";s:2:"Ŀ";s:3:"L·";s:2:"ŀ";s:3:"l·";s:2:"Ń";s:3:"Ń";s:2:"ń";s:3:"ń";s:2:"Ņ";s:3:"Ņ";s:2:"ņ";s:3:"ņ";s:2:"Ň";s:3:"Ň";s:2:"ň";s:3:"ň";s:2:"ʼn";s:3:"ʼn";s:2:"Ō";s:3:"Ō";s:2:"ō";s:3:"ō";s:2:"Ŏ";s:3:"Ŏ";s:2:"ŏ";s:3:"ŏ";s:2:"Ő";s:3:"Ő";s:2:"ő";s:3:"ő";s:2:"Ŕ";s:3:"Ŕ";s:2:"ŕ";s:3:"ŕ";s:2:"Ŗ";s:3:"Ŗ";s:2:"ŗ";s:3:"ŗ";s:2:"Ř";s:3:"Ř";s:2:"ř";s:3:"ř";s:2:"Ś";s:3:"Ś";s:2:"ś";s:3:"ś";s:2:"Ŝ";s:3:"Ŝ";s:2:"ŝ";s:3:"ŝ";s:2:"Ş";s:3:"Ş";s:2:"ş";s:3:"ş";s:2:"Š";s:3:"Š";s:2:"š";s:3:"š";s:2:"Ţ";s:3:"Ţ";s:2:"ţ";s:3:"ţ";s:2:"Ť";s:3:"Ť";s:2:"ť";s:3:"ť";s:2:"Ũ";s:3:"Ũ";s:2:"ũ";s:3:"ũ";s:2:"Ū";s:3:"Ū";s:2:"ū";s:3:"ū";s:2:"Ŭ";s:3:"Ŭ";s:2:"ŭ";s:3:"ŭ";s:2:"Ů";s:3:"Ů";s:2:"ů";s:3:"ů";s:2:"Ű";s:3:"Ű";s:2:"ű";s:3:"ű";s:2:"Ų";s:3:"Ų";s:2:"ų";s:3:"ų";s:2:"Ŵ";s:3:"Ŵ";s:2:"ŵ";s:3:"ŵ";s:2:"Ŷ";s:3:"Ŷ";s:2:"ŷ";s:3:"ŷ";s:2:"Ÿ";s:3:"Ÿ";s:2:"Ź";s:3:"Ź";s:2:"ź";s:3:"ź";s:2:"Ż";s:3:"Ż";s:2:"ż";s:3:"ż";s:2:"Ž";s:3:"Ž";s:2:"ž";s:3:"ž";s:2:"ſ";s:1:"s";s:2:"Ơ";s:3:"Ơ";s:2:"ơ";s:3:"ơ";s:2:"Ư";s:3:"Ư";s:2:"ư";s:3:"ư";s:2:"DŽ";s:4:"DŽ";s:2:"Dž";s:4:"Dž";s:2:"dž";s:4:"dž";s:2:"LJ";s:2:"LJ";s:2:"Lj";s:2:"Lj";s:2:"lj";s:2:"lj";s:2:"NJ";s:2:"NJ";s:2:"Nj";s:2:"Nj";s:2:"nj";s:2:"nj";s:2:"Ǎ";s:3:"Ǎ";s:2:"ǎ";s:3:"ǎ";s:2:"Ǐ";s:3:"Ǐ";s:2:"ǐ";s:3:"ǐ";s:2:"Ǒ";s:3:"Ǒ";s:2:"ǒ";s:3:"ǒ";s:2:"Ǔ";s:3:"Ǔ";s:2:"ǔ";s:3:"ǔ";s:2:"Ǖ";s:5:"Ǖ";s:2:"ǖ";s:5:"ǖ";s:2:"Ǘ";s:5:"Ǘ";s:2:"ǘ";s:5:"ǘ";s:2:"Ǚ";s:5:"Ǚ";s:2:"ǚ";s:5:"ǚ";s:2:"Ǜ";s:5:"Ǜ";s:2:"ǜ";s:5:"ǜ";s:2:"Ǟ";s:5:"Ǟ";s:2:"ǟ";s:5:"ǟ";s:2:"Ǡ";s:5:"Ǡ";s:2:"ǡ";s:5:"ǡ";s:2:"Ǣ";s:4:"Ǣ";s:2:"ǣ";s:4:"ǣ";s:2:"Ǧ";s:3:"Ǧ";s:2:"ǧ";s:3:"ǧ";s:2:"Ǩ";s:3:"Ǩ";s:2:"ǩ";s:3:"ǩ";s:2:"Ǫ";s:3:"Ǫ";s:2:"ǫ";s:3:"ǫ";s:2:"Ǭ";s:5:"Ǭ";s:2:"ǭ";s:5:"ǭ";s:2:"Ǯ";s:4:"Ǯ";s:2:"ǯ";s:4:"ǯ";s:2:"ǰ";s:3:"ǰ";s:2:"DZ";s:2:"DZ";s:2:"Dz";s:2:"Dz";s:2:"dz";s:2:"dz";s:2:"Ǵ";s:3:"Ǵ";s:2:"ǵ";s:3:"ǵ";s:2:"Ǹ";s:3:"Ǹ";s:2:"ǹ";s:3:"ǹ";s:2:"Ǻ";s:5:"Ǻ";s:2:"ǻ";s:5:"ǻ";s:2:"Ǽ";s:4:"Ǽ";s:2:"ǽ";s:4:"ǽ";s:2:"Ǿ";s:4:"Ǿ";s:2:"ǿ";s:4:"ǿ";s:2:"Ȁ";s:3:"Ȁ";s:2:"ȁ";s:3:"ȁ";s:2:"Ȃ";s:3:"Ȃ";s:2:"ȃ";s:3:"ȃ";s:2:"Ȅ";s:3:"Ȅ";s:2:"ȅ";s:3:"ȅ";s:2:"Ȇ";s:3:"Ȇ";s:2:"ȇ";s:3:"ȇ";s:2:"Ȉ";s:3:"Ȉ";s:2:"ȉ";s:3:"ȉ";s:2:"Ȋ";s:3:"Ȋ";s:2:"ȋ";s:3:"ȋ";s:2:"Ȍ";s:3:"Ȍ";s:2:"ȍ";s:3:"ȍ";s:2:"Ȏ";s:3:"Ȏ";s:2:"ȏ";s:3:"ȏ";s:2:"Ȑ";s:3:"Ȑ";s:2:"ȑ";s:3:"ȑ";s:2:"Ȓ";s:3:"Ȓ";s:2:"ȓ";s:3:"ȓ";s:2:"Ȕ";s:3:"Ȕ";s:2:"ȕ";s:3:"ȕ";s:2:"Ȗ";s:3:"Ȗ";s:2:"ȗ";s:3:"ȗ";s:2:"Ș";s:3:"Ș";s:2:"ș";s:3:"ș";s:2:"Ț";s:3:"Ț";s:2:"ț";s:3:"ț";s:2:"Ȟ";s:3:"Ȟ";s:2:"ȟ";s:3:"ȟ";s:2:"Ȧ";s:3:"Ȧ";s:2:"ȧ";s:3:"ȧ";s:2:"Ȩ";s:3:"Ȩ";s:2:"ȩ";s:3:"ȩ";s:2:"Ȫ";s:5:"Ȫ";s:2:"ȫ";s:5:"ȫ";s:2:"Ȭ";s:5:"Ȭ";s:2:"ȭ";s:5:"ȭ";s:2:"Ȯ";s:3:"Ȯ";s:2:"ȯ";s:3:"ȯ";s:2:"Ȱ";s:5:"Ȱ";s:2:"ȱ";s:5:"ȱ";s:2:"Ȳ";s:3:"Ȳ";s:2:"ȳ";s:3:"ȳ";s:2:"ʰ";s:1:"h";s:2:"ʱ";s:2:"ɦ";s:2:"ʲ";s:1:"j";s:2:"ʳ";s:1:"r";s:2:"ʴ";s:2:"ɹ";s:2:"ʵ";s:2:"ɻ";s:2:"ʶ";s:2:"ʁ";s:2:"ʷ";s:1:"w";s:2:"ʸ";s:1:"y";s:2:"˘";s:3:" ̆";s:2:"˙";s:3:" ̇";s:2:"˚";s:3:" ̊";s:2:"˛";s:3:" ̨";s:2:"˜";s:3:" ̃";s:2:"˝";s:3:" ̋";s:2:"ˠ";s:2:"ɣ";s:2:"ˡ";s:1:"l";s:2:"ˢ";s:1:"s";s:2:"ˣ";s:1:"x";s:2:"ˤ";s:2:"ʕ";s:2:"̀";s:2:"̀";s:2:"́";s:2:"́";s:2:"̓";s:2:"̓";s:2:"̈́";s:4:"̈́";s:2:"ʹ";s:2:"ʹ";s:2:"ͺ";s:3:" ͅ";s:2:";";s:1:";";s:2:"΄";s:3:" ́";s:2:"΅";s:5:" ̈́";s:2:"Ά";s:4:"Ά";s:2:"·";s:2:"·";s:2:"Έ";s:4:"Έ";s:2:"Ή";s:4:"Ή";s:2:"Ί";s:4:"Ί";s:2:"Ό";s:4:"Ό";s:2:"Ύ";s:4:"Ύ";s:2:"Ώ";s:4:"Ώ";s:2:"ΐ";s:6:"ΐ";s:2:"Ϊ";s:4:"Ϊ";s:2:"Ϋ";s:4:"Ϋ";s:2:"ά";s:4:"ά";s:2:"έ";s:4:"έ";s:2:"ή";s:4:"ή";s:2:"ί";s:4:"ί";s:2:"ΰ";s:6:"ΰ";s:2:"ϊ";s:4:"ϊ";s:2:"ϋ";s:4:"ϋ";s:2:"ό";s:4:"ό";s:2:"ύ";s:4:"ύ";s:2:"ώ";s:4:"ώ";s:2:"ϐ";s:2:"β";s:2:"ϑ";s:2:"θ";s:2:"ϒ";s:2:"Υ";s:2:"ϓ";s:4:"Ύ";s:2:"ϔ";s:4:"Ϋ";s:2:"ϕ";s:2:"φ";s:2:"ϖ";s:2:"π";s:2:"ϰ";s:2:"κ";s:2:"ϱ";s:2:"ρ";s:2:"ϲ";s:2:"ς";s:2:"ϴ";s:2:"Θ";s:2:"ϵ";s:2:"ε";s:2:"Ϲ";s:2:"Σ";s:2:"Ѐ";s:4:"Ѐ";s:2:"Ё";s:4:"Ё";s:2:"Ѓ";s:4:"Ѓ";s:2:"Ї";s:4:"Ї";s:2:"Ќ";s:4:"Ќ";s:2:"Ѝ";s:4:"Ѝ";s:2:"Ў";s:4:"Ў";s:2:"Й";s:4:"Й";s:2:"й";s:4:"й";s:2:"ѐ";s:4:"ѐ";s:2:"ё";s:4:"ё";s:2:"ѓ";s:4:"ѓ";s:2:"ї";s:4:"ї";s:2:"ќ";s:4:"ќ";s:2:"ѝ";s:4:"ѝ";s:2:"ў";s:4:"ў";s:2:"Ѷ";s:4:"Ѷ";s:2:"ѷ";s:4:"ѷ";s:2:"Ӂ";s:4:"Ӂ";s:2:"ӂ";s:4:"ӂ";s:2:"Ӑ";s:4:"Ӑ";s:2:"ӑ";s:4:"ӑ";s:2:"Ӓ";s:4:"Ӓ";s:2:"ӓ";s:4:"ӓ";s:2:"Ӗ";s:4:"Ӗ";s:2:"ӗ";s:4:"ӗ";s:2:"Ӛ";s:4:"Ӛ";s:2:"ӛ";s:4:"ӛ";s:2:"Ӝ";s:4:"Ӝ";s:2:"ӝ";s:4:"ӝ";s:2:"Ӟ";s:4:"Ӟ";s:2:"ӟ";s:4:"ӟ";s:2:"Ӣ";s:4:"Ӣ";s:2:"ӣ";s:4:"ӣ";s:2:"Ӥ";s:4:"Ӥ";s:2:"ӥ";s:4:"ӥ";s:2:"Ӧ";s:4:"Ӧ";s:2:"ӧ";s:4:"ӧ";s:2:"Ӫ";s:4:"Ӫ";s:2:"ӫ";s:4:"ӫ";s:2:"Ӭ";s:4:"Ӭ";s:2:"ӭ";s:4:"ӭ";s:2:"Ӯ";s:4:"Ӯ";s:2:"ӯ";s:4:"ӯ";s:2:"Ӱ";s:4:"Ӱ";s:2:"ӱ";s:4:"ӱ";s:2:"Ӳ";s:4:"Ӳ";s:2:"ӳ";s:4:"ӳ";s:2:"Ӵ";s:4:"Ӵ";s:2:"ӵ";s:4:"ӵ";s:2:"Ӹ";s:4:"Ӹ";s:2:"ӹ";s:4:"ӹ";s:2:"և";s:4:"եւ";s:2:"آ";s:4:"آ";s:2:"أ";s:4:"أ";s:2:"ؤ";s:4:"ؤ";s:2:"إ";s:4:"إ";s:2:"ئ";s:4:"ئ";s:2:"ٵ";s:4:"اٴ";s:2:"ٶ";s:4:"وٴ";s:2:"ٷ";s:4:"ۇٴ";s:2:"ٸ";s:4:"يٴ";s:2:"ۀ";s:4:"ۀ";s:2:"ۂ";s:4:"ۂ";s:2:"ۓ";s:4:"ۓ";s:3:"ऩ";s:6:"ऩ";s:3:"ऱ";s:6:"ऱ";s:3:"ऴ";s:6:"ऴ";s:3:"क़";s:6:"क़";s:3:"ख़";s:6:"ख़";s:3:"ग़";s:6:"ग़";s:3:"ज़";s:6:"ज़";s:3:"ड़";s:6:"ड़";s:3:"ढ़";s:6:"ढ़";s:3:"फ़";s:6:"फ़";s:3:"य़";s:6:"य़";s:3:"ো";s:6:"ো";s:3:"ৌ";s:6:"ৌ";s:3:"ড়";s:6:"ড়";s:3:"ঢ়";s:6:"ঢ়";s:3:"য়";s:6:"য়";s:3:"ਲ਼";s:6:"ਲ਼";s:3:"ਸ਼";s:6:"ਸ਼";s:3:"ਖ਼";s:6:"ਖ਼";s:3:"ਗ਼";s:6:"ਗ਼";s:3:"ਜ਼";s:6:"ਜ਼";s:3:"ਫ਼";s:6:"ਫ਼";s:3:"ୈ";s:6:"ୈ";s:3:"ୋ";s:6:"ୋ";s:3:"ୌ";s:6:"ୌ";s:3:"ଡ଼";s:6:"ଡ଼";s:3:"ଢ଼";s:6:"ଢ଼";s:3:"ஔ";s:6:"ஔ";s:3:"ொ";s:6:"ொ";s:3:"ோ";s:6:"ோ";s:3:"ௌ";s:6:"ௌ";s:3:"ై";s:6:"ై";s:3:"ೀ";s:6:"ೀ";s:3:"ೇ";s:6:"ೇ";s:3:"ೈ";s:6:"ೈ";s:3:"ೊ";s:6:"ೊ";s:3:"ೋ";s:9:"ೋ";s:3:"ൊ";s:6:"ൊ";s:3:"ോ";s:6:"ോ";s:3:"ൌ";s:6:"ൌ";s:3:"ේ";s:6:"ේ";s:3:"ො";s:6:"ො";s:3:"ෝ";s:9:"ෝ";s:3:"ෞ";s:6:"ෞ";s:3:"ำ";s:6:"ํา";s:3:"ຳ";s:6:"ໍາ";s:3:"ໜ";s:6:"ຫນ";s:3:"ໝ";s:6:"ຫມ";s:3:"༌";s:3:"་";s:3:"གྷ";s:6:"གྷ";s:3:"ཌྷ";s:6:"ཌྷ";s:3:"དྷ";s:6:"དྷ";s:3:"བྷ";s:6:"བྷ";s:3:"ཛྷ";s:6:"ཛྷ";s:3:"ཀྵ";s:6:"ཀྵ";s:3:"ཱི";s:6:"ཱི";s:3:"ཱུ";s:6:"ཱུ";s:3:"ྲྀ";s:6:"ྲྀ";s:3:"ཷ";s:9:"ྲཱྀ";s:3:"ླྀ";s:6:"ླྀ";s:3:"ཹ";s:9:"ླཱྀ";s:3:"ཱྀ";s:6:"ཱྀ";s:3:"ྒྷ";s:6:"ྒྷ";s:3:"ྜྷ";s:6:"ྜྷ";s:3:"ྡྷ";s:6:"ྡྷ";s:3:"ྦྷ";s:6:"ྦྷ";s:3:"ྫྷ";s:6:"ྫྷ";s:3:"ྐྵ";s:6:"ྐྵ";s:3:"ဦ";s:6:"ဦ";s:3:"ჼ";s:3:"ნ";s:3:"ᬆ";s:6:"ᬆ";s:3:"ᬈ";s:6:"ᬈ";s:3:"ᬊ";s:6:"ᬊ";s:3:"ᬌ";s:6:"ᬌ";s:3:"ᬎ";s:6:"ᬎ";s:3:"ᬒ";s:6:"ᬒ";s:3:"ᬻ";s:6:"ᬻ";s:3:"ᬽ";s:6:"ᬽ";s:3:"ᭀ";s:6:"ᭀ";s:3:"ᭁ";s:6:"ᭁ";s:3:"ᭃ";s:6:"ᭃ";s:3:"ᴬ";s:1:"A";s:3:"ᴭ";s:2:"Æ";s:3:"ᴮ";s:1:"B";s:3:"ᴰ";s:1:"D";s:3:"ᴱ";s:1:"E";s:3:"ᴲ";s:2:"Ǝ";s:3:"ᴳ";s:1:"G";s:3:"ᴴ";s:1:"H";s:3:"ᴵ";s:1:"I";s:3:"ᴶ";s:1:"J";s:3:"ᴷ";s:1:"K";s:3:"ᴸ";s:1:"L";s:3:"ᴹ";s:1:"M";s:3:"ᴺ";s:1:"N";s:3:"ᴼ";s:1:"O";s:3:"ᴽ";s:2:"Ȣ";s:3:"ᴾ";s:1:"P";s:3:"ᴿ";s:1:"R";s:3:"ᵀ";s:1:"T";s:3:"ᵁ";s:1:"U";s:3:"ᵂ";s:1:"W";s:3:"ᵃ";s:1:"a";s:3:"ᵄ";s:2:"ɐ";s:3:"ᵅ";s:2:"ɑ";s:3:"ᵆ";s:3:"ᴂ";s:3:"ᵇ";s:1:"b";s:3:"ᵈ";s:1:"d";s:3:"ᵉ";s:1:"e";s:3:"ᵊ";s:2:"ə";s:3:"ᵋ";s:2:"ɛ";s:3:"ᵌ";s:2:"ɜ";s:3:"ᵍ";s:1:"g";s:3:"ᵏ";s:1:"k";s:3:"ᵐ";s:1:"m";s:3:"ᵑ";s:2:"ŋ";s:3:"ᵒ";s:1:"o";s:3:"ᵓ";s:2:"ɔ";s:3:"ᵔ";s:3:"ᴖ";s:3:"ᵕ";s:3:"ᴗ";s:3:"ᵖ";s:1:"p";s:3:"ᵗ";s:1:"t";s:3:"ᵘ";s:1:"u";s:3:"ᵙ";s:3:"ᴝ";s:3:"ᵚ";s:2:"ɯ";s:3:"ᵛ";s:1:"v";s:3:"ᵜ";s:3:"ᴥ";s:3:"ᵝ";s:2:"β";s:3:"ᵞ";s:2:"γ";s:3:"ᵟ";s:2:"δ";s:3:"ᵠ";s:2:"φ";s:3:"ᵡ";s:2:"χ";s:3:"ᵢ";s:1:"i";s:3:"ᵣ";s:1:"r";s:3:"ᵤ";s:1:"u";s:3:"ᵥ";s:1:"v";s:3:"ᵦ";s:2:"β";s:3:"ᵧ";s:2:"γ";s:3:"ᵨ";s:2:"ρ";s:3:"ᵩ";s:2:"φ";s:3:"ᵪ";s:2:"χ";s:3:"ᵸ";s:2:"н";s:3:"ᶛ";s:2:"ɒ";s:3:"ᶜ";s:1:"c";s:3:"ᶝ";s:2:"ɕ";s:3:"ᶞ";s:2:"ð";s:3:"ᶟ";s:2:"ɜ";s:3:"ᶠ";s:1:"f";s:3:"ᶡ";s:2:"ɟ";s:3:"ᶢ";s:2:"ɡ";s:3:"ᶣ";s:2:"ɥ";s:3:"ᶤ";s:2:"ɨ";s:3:"ᶥ";s:2:"ɩ";s:3:"ᶦ";s:2:"ɪ";s:3:"ᶧ";s:3:"ᵻ";s:3:"ᶨ";s:2:"ʝ";s:3:"ᶩ";s:2:"ɭ";s:3:"ᶪ";s:3:"ᶅ";s:3:"ᶫ";s:2:"ʟ";s:3:"ᶬ";s:2:"ɱ";s:3:"ᶭ";s:2:"ɰ";s:3:"ᶮ";s:2:"ɲ";s:3:"ᶯ";s:2:"ɳ";s:3:"ᶰ";s:2:"ɴ";s:3:"ᶱ";s:2:"ɵ";s:3:"ᶲ";s:2:"ɸ";s:3:"ᶳ";s:2:"ʂ";s:3:"ᶴ";s:2:"ʃ";s:3:"ᶵ";s:2:"ƫ";s:3:"ᶶ";s:2:"ʉ";s:3:"ᶷ";s:2:"ʊ";s:3:"ᶸ";s:3:"ᴜ";s:3:"ᶹ";s:2:"ʋ";s:3:"ᶺ";s:2:"ʌ";s:3:"ᶻ";s:1:"z";s:3:"ᶼ";s:2:"ʐ";s:3:"ᶽ";s:2:"ʑ";s:3:"ᶾ";s:2:"ʒ";s:3:"ᶿ";s:2:"θ";s:3:"Ḁ";s:3:"Ḁ";s:3:"ḁ";s:3:"ḁ";s:3:"Ḃ";s:3:"Ḃ";s:3:"ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"Ḅ";s:3:"ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"Ḇ";s:3:"ḇ";s:3:"ḇ";s:3:"Ḉ";s:5:"Ḉ";s:3:"ḉ";s:5:"ḉ";s:3:"Ḋ";s:3:"Ḋ";s:3:"ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"Ḍ";s:3:"ḍ";s:3:"ḍ";s:3:"Ḏ";s:3:"Ḏ";s:3:"ḏ";s:3:"ḏ";s:3:"Ḑ";s:3:"Ḑ";s:3:"ḑ";s:3:"ḑ";s:3:"Ḓ";s:3:"Ḓ";s:3:"ḓ";s:3:"ḓ";s:3:"Ḕ";s:5:"Ḕ";s:3:"ḕ";s:5:"ḕ";s:3:"Ḗ";s:5:"Ḗ";s:3:"ḗ";s:5:"ḗ";s:3:"Ḙ";s:3:"Ḙ";s:3:"ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"Ḛ";s:3:"ḛ";s:3:"ḛ";s:3:"Ḝ";s:5:"Ḝ";s:3:"ḝ";s:5:"ḝ";s:3:"Ḟ";s:3:"Ḟ";s:3:"ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"Ḡ";s:3:"ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"Ḣ";s:3:"ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"Ḥ";s:3:"ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"Ḧ";s:3:"ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"Ḩ";s:3:"ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"Ḫ";s:3:"ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"Ḭ";s:3:"ḭ";s:3:"ḭ";s:3:"Ḯ";s:5:"Ḯ";s:3:"ḯ";s:5:"ḯ";s:3:"Ḱ";s:3:"Ḱ";s:3:"ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"Ḳ";s:3:"ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"Ḵ";s:3:"ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"Ḷ";s:3:"ḷ";s:3:"ḷ";s:3:"Ḹ";s:5:"Ḹ";s:3:"ḹ";s:5:"ḹ";s:3:"Ḻ";s:3:"Ḻ";s:3:"ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"Ḽ";s:3:"ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"Ḿ";s:3:"ḿ";s:3:"ḿ";s:3:"Ṁ";s:3:"Ṁ";s:3:"ṁ";s:3:"ṁ";s:3:"Ṃ";s:3:"Ṃ";s:3:"ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"Ṅ";s:3:"ṅ";s:3:"ṅ";s:3:"Ṇ";s:3:"Ṇ";s:3:"ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"Ṉ";s:3:"ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"Ṋ";s:3:"ṋ";s:3:"ṋ";s:3:"Ṍ";s:5:"Ṍ";s:3:"ṍ";s:5:"ṍ";s:3:"Ṏ";s:5:"Ṏ";s:3:"ṏ";s:5:"ṏ";s:3:"Ṑ";s:5:"Ṑ";s:3:"ṑ";s:5:"ṑ";s:3:"Ṓ";s:5:"Ṓ";s:3:"ṓ";s:5:"ṓ";s:3:"Ṕ";s:3:"Ṕ";s:3:"ṕ";s:3:"ṕ";s:3:"Ṗ";s:3:"Ṗ";s:3:"ṗ";s:3:"ṗ";s:3:"Ṙ";s:3:"Ṙ";s:3:"ṙ";s:3:"ṙ";s:3:"Ṛ";s:3:"Ṛ";s:3:"ṛ";s:3:"ṛ";s:3:"Ṝ";s:5:"Ṝ";s:3:"ṝ";s:5:"ṝ";s:3:"Ṟ";s:3:"Ṟ";s:3:"ṟ";s:3:"ṟ";s:3:"Ṡ";s:3:"Ṡ";s:3:"ṡ";s:3:"ṡ";s:3:"Ṣ";s:3:"Ṣ";s:3:"ṣ";s:3:"ṣ";s:3:"Ṥ";s:5:"Ṥ";s:3:"ṥ";s:5:"ṥ";s:3:"Ṧ";s:5:"Ṧ";s:3:"ṧ";s:5:"ṧ";s:3:"Ṩ";s:5:"Ṩ";s:3:"ṩ";s:5:"ṩ";s:3:"Ṫ";s:3:"Ṫ";s:3:"ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"Ṭ";s:3:"ṭ";s:3:"ṭ";s:3:"Ṯ";s:3:"Ṯ";s:3:"ṯ";s:3:"ṯ";s:3:"Ṱ";s:3:"Ṱ";s:3:"ṱ";s:3:"ṱ";s:3:"Ṳ";s:3:"Ṳ";s:3:"ṳ";s:3:"ṳ";s:3:"Ṵ";s:3:"Ṵ";s:3:"ṵ";s:3:"ṵ";s:3:"Ṷ";s:3:"Ṷ";s:3:"ṷ";s:3:"ṷ";s:3:"Ṹ";s:5:"Ṹ";s:3:"ṹ";s:5:"ṹ";s:3:"Ṻ";s:5:"Ṻ";s:3:"ṻ";s:5:"ṻ";s:3:"Ṽ";s:3:"Ṽ";s:3:"ṽ";s:3:"ṽ";s:3:"Ṿ";s:3:"Ṿ";s:3:"ṿ";s:3:"ṿ";s:3:"Ẁ";s:3:"Ẁ";s:3:"ẁ";s:3:"ẁ";s:3:"Ẃ";s:3:"Ẃ";s:3:"ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"Ẅ";s:3:"ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"Ẇ";s:3:"ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"Ẉ";s:3:"ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"Ẋ";s:3:"ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"Ẍ";s:3:"ẍ";s:3:"ẍ";s:3:"Ẏ";s:3:"Ẏ";s:3:"ẏ";s:3:"ẏ";s:3:"Ẑ";s:3:"Ẑ";s:3:"ẑ";s:3:"ẑ";s:3:"Ẓ";s:3:"Ẓ";s:3:"ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"Ẕ";s:3:"ẕ";s:3:"ẕ";s:3:"ẖ";s:3:"ẖ";s:3:"ẗ";s:3:"ẗ";s:3:"ẘ";s:3:"ẘ";s:3:"ẙ";s:3:"ẙ";s:3:"ẚ";s:3:"aʾ";s:3:"ẛ";s:3:"ṡ";s:3:"Ạ";s:3:"Ạ";s:3:"ạ";s:3:"ạ";s:3:"Ả";s:3:"Ả";s:3:"ả";s:3:"ả";s:3:"Ấ";s:5:"Ấ";s:3:"ấ";s:5:"ấ";s:3:"Ầ";s:5:"Ầ";s:3:"ầ";s:5:"ầ";s:3:"Ẩ";s:5:"Ẩ";s:3:"ẩ";s:5:"ẩ";s:3:"Ẫ";s:5:"Ẫ";s:3:"ẫ";s:5:"ẫ";s:3:"Ậ";s:5:"Ậ";s:3:"ậ";s:5:"ậ";s:3:"Ắ";s:5:"Ắ";s:3:"ắ";s:5:"ắ";s:3:"Ằ";s:5:"Ằ";s:3:"ằ";s:5:"ằ";s:3:"Ẳ";s:5:"Ẳ";s:3:"ẳ";s:5:"ẳ";s:3:"Ẵ";s:5:"Ẵ";s:3:"ẵ";s:5:"ẵ";s:3:"Ặ";s:5:"Ặ";s:3:"ặ";s:5:"ặ";s:3:"Ẹ";s:3:"Ẹ";s:3:"ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"Ẻ";s:3:"ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"Ẽ";s:3:"ẽ";s:3:"ẽ";s:3:"Ế";s:5:"Ế";s:3:"ế";s:5:"ế";s:3:"Ề";s:5:"Ề";s:3:"ề";s:5:"ề";s:3:"Ể";s:5:"Ể";s:3:"ể";s:5:"ể";s:3:"Ễ";s:5:"Ễ";s:3:"ễ";s:5:"ễ";s:3:"Ệ";s:5:"Ệ";s:3:"ệ";s:5:"ệ";s:3:"Ỉ";s:3:"Ỉ";s:3:"ỉ";s:3:"ỉ";s:3:"Ị";s:3:"Ị";s:3:"ị";s:3:"ị";s:3:"Ọ";s:3:"Ọ";s:3:"ọ";s:3:"ọ";s:3:"Ỏ";s:3:"Ỏ";s:3:"ỏ";s:3:"ỏ";s:3:"Ố";s:5:"Ố";s:3:"ố";s:5:"ố";s:3:"Ồ";s:5:"Ồ";s:3:"ồ";s:5:"ồ";s:3:"Ổ";s:5:"Ổ";s:3:"ổ";s:5:"ổ";s:3:"Ỗ";s:5:"Ỗ";s:3:"ỗ";s:5:"ỗ";s:3:"Ộ";s:5:"Ộ";s:3:"ộ";s:5:"ộ";s:3:"Ớ";s:5:"Ớ";s:3:"ớ";s:5:"ớ";s:3:"Ờ";s:5:"Ờ";s:3:"ờ";s:5:"ờ";s:3:"Ở";s:5:"Ở";s:3:"ở";s:5:"ở";s:3:"Ỡ";s:5:"Ỡ";s:3:"ỡ";s:5:"ỡ";s:3:"Ợ";s:5:"Ợ";s:3:"ợ";s:5:"ợ";s:3:"Ụ";s:3:"Ụ";s:3:"ụ";s:3:"ụ";s:3:"Ủ";s:3:"Ủ";s:3:"ủ";s:3:"ủ";s:3:"Ứ";s:5:"Ứ";s:3:"ứ";s:5:"ứ";s:3:"Ừ";s:5:"Ừ";s:3:"ừ";s:5:"ừ";s:3:"Ử";s:5:"Ử";s:3:"ử";s:5:"ử";s:3:"Ữ";s:5:"Ữ";s:3:"ữ";s:5:"ữ";s:3:"Ự";s:5:"Ự";s:3:"ự";s:5:"ự";s:3:"Ỳ";s:3:"Ỳ";s:3:"ỳ";s:3:"ỳ";s:3:"Ỵ";s:3:"Ỵ";s:3:"ỵ";s:3:"ỵ";s:3:"Ỷ";s:3:"Ỷ";s:3:"ỷ";s:3:"ỷ";s:3:"Ỹ";s:3:"Ỹ";s:3:"ỹ";s:3:"ỹ";s:3:"ἀ";s:4:"ἀ";s:3:"ἁ";s:4:"ἁ";s:3:"ἂ";s:6:"ἂ";s:3:"ἃ";s:6:"ἃ";s:3:"ἄ";s:6:"ἄ";s:3:"ἅ";s:6:"ἅ";s:3:"ἆ";s:6:"ἆ";s:3:"ἇ";s:6:"ἇ";s:3:"Ἀ";s:4:"Ἀ";s:3:"Ἁ";s:4:"Ἁ";s:3:"Ἂ";s:6:"Ἂ";s:3:"Ἃ";s:6:"Ἃ";s:3:"Ἄ";s:6:"Ἄ";s:3:"Ἅ";s:6:"Ἅ";s:3:"Ἆ";s:6:"Ἆ";s:3:"Ἇ";s:6:"Ἇ";s:3:"ἐ";s:4:"ἐ";s:3:"ἑ";s:4:"ἑ";s:3:"ἒ";s:6:"ἒ";s:3:"ἓ";s:6:"ἓ";s:3:"ἔ";s:6:"ἔ";s:3:"ἕ";s:6:"ἕ";s:3:"Ἐ";s:4:"Ἐ";s:3:"Ἑ";s:4:"Ἑ";s:3:"Ἒ";s:6:"Ἒ";s:3:"Ἓ";s:6:"Ἓ";s:3:"Ἔ";s:6:"Ἔ";s:3:"Ἕ";s:6:"Ἕ";s:3:"ἠ";s:4:"ἠ";s:3:"ἡ";s:4:"ἡ";s:3:"ἢ";s:6:"ἢ";s:3:"ἣ";s:6:"ἣ";s:3:"ἤ";s:6:"ἤ";s:3:"ἥ";s:6:"ἥ";s:3:"ἦ";s:6:"ἦ";s:3:"ἧ";s:6:"ἧ";s:3:"Ἠ";s:4:"Ἠ";s:3:"Ἡ";s:4:"Ἡ";s:3:"Ἢ";s:6:"Ἢ";s:3:"Ἣ";s:6:"Ἣ";s:3:"Ἤ";s:6:"Ἤ";s:3:"Ἥ";s:6:"Ἥ";s:3:"Ἦ";s:6:"Ἦ";s:3:"Ἧ";s:6:"Ἧ";s:3:"ἰ";s:4:"ἰ";s:3:"ἱ";s:4:"ἱ";s:3:"ἲ";s:6:"ἲ";s:3:"ἳ";s:6:"ἳ";s:3:"ἴ";s:6:"ἴ";s:3:"ἵ";s:6:"ἵ";s:3:"ἶ";s:6:"ἶ";s:3:"ἷ";s:6:"ἷ";s:3:"Ἰ";s:4:"Ἰ";s:3:"Ἱ";s:4:"Ἱ";s:3:"Ἲ";s:6:"Ἲ";s:3:"Ἳ";s:6:"Ἳ";s:3:"Ἴ";s:6:"Ἴ";s:3:"Ἵ";s:6:"Ἵ";s:3:"Ἶ";s:6:"Ἶ";s:3:"Ἷ";s:6:"Ἷ";s:3:"ὀ";s:4:"ὀ";s:3:"ὁ";s:4:"ὁ";s:3:"ὂ";s:6:"ὂ";s:3:"ὃ";s:6:"ὃ";s:3:"ὄ";s:6:"ὄ";s:3:"ὅ";s:6:"ὅ";s:3:"Ὀ";s:4:"Ὀ";s:3:"Ὁ";s:4:"Ὁ";s:3:"Ὂ";s:6:"Ὂ";s:3:"Ὃ";s:6:"Ὃ";s:3:"Ὄ";s:6:"Ὄ";s:3:"Ὅ";s:6:"Ὅ";s:3:"ὐ";s:4:"ὐ";s:3:"ὑ";s:4:"ὑ";s:3:"ὒ";s:6:"ὒ";s:3:"ὓ";s:6:"ὓ";s:3:"ὔ";s:6:"ὔ";s:3:"ὕ";s:6:"ὕ";s:3:"ὖ";s:6:"ὖ";s:3:"ὗ";s:6:"ὗ";s:3:"Ὑ";s:4:"Ὑ";s:3:"Ὓ";s:6:"Ὓ";s:3:"Ὕ";s:6:"Ὕ";s:3:"Ὗ";s:6:"Ὗ";s:3:"ὠ";s:4:"ὠ";s:3:"ὡ";s:4:"ὡ";s:3:"ὢ";s:6:"ὢ";s:3:"ὣ";s:6:"ὣ";s:3:"ὤ";s:6:"ὤ";s:3:"ὥ";s:6:"ὥ";s:3:"ὦ";s:6:"ὦ";s:3:"ὧ";s:6:"ὧ";s:3:"Ὠ";s:4:"Ὠ";s:3:"Ὡ";s:4:"Ὡ";s:3:"Ὢ";s:6:"Ὢ";s:3:"Ὣ";s:6:"Ὣ";s:3:"Ὤ";s:6:"Ὤ";s:3:"Ὥ";s:6:"Ὥ";s:3:"Ὦ";s:6:"Ὦ";s:3:"Ὧ";s:6:"Ὧ";s:3:"ὰ";s:4:"ὰ";s:3:"ά";s:4:"ά";s:3:"ὲ";s:4:"ὲ";s:3:"έ";s:4:"έ";s:3:"ὴ";s:4:"ὴ";s:3:"ή";s:4:"ή";s:3:"ὶ";s:4:"ὶ";s:3:"ί";s:4:"ί";s:3:"ὸ";s:4:"ὸ";s:3:"ό";s:4:"ό";s:3:"ὺ";s:4:"ὺ";s:3:"ύ";s:4:"ύ";s:3:"ὼ";s:4:"ὼ";s:3:"ώ";s:4:"ώ";s:3:"ᾀ";s:6:"ᾀ";s:3:"ᾁ";s:6:"ᾁ";s:3:"ᾂ";s:8:"ᾂ";s:3:"ᾃ";s:8:"ᾃ";s:3:"ᾄ";s:8:"ᾄ";s:3:"ᾅ";s:8:"ᾅ";s:3:"ᾆ";s:8:"ᾆ";s:3:"ᾇ";s:8:"ᾇ";s:3:"ᾈ";s:6:"ᾈ";s:3:"ᾉ";s:6:"ᾉ";s:3:"ᾊ";s:8:"ᾊ";s:3:"ᾋ";s:8:"ᾋ";s:3:"ᾌ";s:8:"ᾌ";s:3:"ᾍ";s:8:"ᾍ";s:3:"ᾎ";s:8:"ᾎ";s:3:"ᾏ";s:8:"ᾏ";s:3:"ᾐ";s:6:"ᾐ";s:3:"ᾑ";s:6:"ᾑ";s:3:"ᾒ";s:8:"ᾒ";s:3:"ᾓ";s:8:"ᾓ";s:3:"ᾔ";s:8:"ᾔ";s:3:"ᾕ";s:8:"ᾕ";s:3:"ᾖ";s:8:"ᾖ";s:3:"ᾗ";s:8:"ᾗ";s:3:"ᾘ";s:6:"ᾘ";s:3:"ᾙ";s:6:"ᾙ";s:3:"ᾚ";s:8:"ᾚ";s:3:"ᾛ";s:8:"ᾛ";s:3:"ᾜ";s:8:"ᾜ";s:3:"ᾝ";s:8:"ᾝ";s:3:"ᾞ";s:8:"ᾞ";s:3:"ᾟ";s:8:"ᾟ";s:3:"ᾠ";s:6:"ᾠ";s:3:"ᾡ";s:6:"ᾡ";s:3:"ᾢ";s:8:"ᾢ";s:3:"ᾣ";s:8:"ᾣ";s:3:"ᾤ";s:8:"ᾤ";s:3:"ᾥ";s:8:"ᾥ";s:3:"ᾦ";s:8:"ᾦ";s:3:"ᾧ";s:8:"ᾧ";s:3:"ᾨ";s:6:"ᾨ";s:3:"ᾩ";s:6:"ᾩ";s:3:"ᾪ";s:8:"ᾪ";s:3:"ᾫ";s:8:"ᾫ";s:3:"ᾬ";s:8:"ᾬ";s:3:"ᾭ";s:8:"ᾭ";s:3:"ᾮ";s:8:"ᾮ";s:3:"ᾯ";s:8:"ᾯ";s:3:"ᾰ";s:4:"ᾰ";s:3:"ᾱ";s:4:"ᾱ";s:3:"ᾲ";s:6:"ᾲ";s:3:"ᾳ";s:4:"ᾳ";s:3:"ᾴ";s:6:"ᾴ";s:3:"ᾶ";s:4:"ᾶ";s:3:"ᾷ";s:6:"ᾷ";s:3:"Ᾰ";s:4:"Ᾰ";s:3:"Ᾱ";s:4:"Ᾱ";s:3:"Ὰ";s:4:"Ὰ";s:3:"Ά";s:4:"Ά";s:3:"ᾼ";s:4:"ᾼ";s:3:"᾽";s:3:" ̓";s:3:"ι";s:2:"ι";s:3:"᾿";s:3:" ̓";s:3:"῀";s:3:" ͂";s:3:"῁";s:5:" ̈͂";s:3:"ῂ";s:6:"ῂ";s:3:"ῃ";s:4:"ῃ";s:3:"ῄ";s:6:"ῄ";s:3:"ῆ";s:4:"ῆ";s:3:"ῇ";s:6:"ῇ";s:3:"Ὲ";s:4:"Ὲ";s:3:"Έ";s:4:"Έ";s:3:"Ὴ";s:4:"Ὴ";s:3:"Ή";s:4:"Ή";s:3:"ῌ";s:4:"ῌ";s:3:"῍";s:5:" ̓̀";s:3:"῎";s:5:" ̓́";s:3:"῏";s:5:" ̓͂";s:3:"ῐ";s:4:"ῐ";s:3:"ῑ";s:4:"ῑ";s:3:"ῒ";s:6:"ῒ";s:3:"ΐ";s:6:"ΐ";s:3:"ῖ";s:4:"ῖ";s:3:"ῗ";s:6:"ῗ";s:3:"Ῐ";s:4:"Ῐ";s:3:"Ῑ";s:4:"Ῑ";s:3:"Ὶ";s:4:"Ὶ";s:3:"Ί";s:4:"Ί";s:3:"῝";s:5:" ̔̀";s:3:"῞";s:5:" ̔́";s:3:"῟";s:5:" ̔͂";s:3:"ῠ";s:4:"ῠ";s:3:"ῡ";s:4:"ῡ";s:3:"ῢ";s:6:"ῢ";s:3:"ΰ";s:6:"ΰ";s:3:"ῤ";s:4:"ῤ";s:3:"ῥ";s:4:"ῥ";s:3:"ῦ";s:4:"ῦ";s:3:"ῧ";s:6:"ῧ";s:3:"Ῠ";s:4:"Ῠ";s:3:"Ῡ";s:4:"Ῡ";s:3:"Ὺ";s:4:"Ὺ";s:3:"Ύ";s:4:"Ύ";s:3:"Ῥ";s:4:"Ῥ";s:3:"῭";s:5:" ̈̀";s:3:"΅";s:5:" ̈́";s:3:"`";s:1:"`";s:3:"ῲ";s:6:"ῲ";s:3:"ῳ";s:4:"ῳ";s:3:"ῴ";s:6:"ῴ";s:3:"ῶ";s:4:"ῶ";s:3:"ῷ";s:6:"ῷ";s:3:"Ὸ";s:4:"Ὸ";s:3:"Ό";s:4:"Ό";s:3:"Ὼ";s:4:"Ὼ";s:3:"Ώ";s:4:"Ώ";s:3:"ῼ";s:4:"ῼ";s:3:"´";s:3:" ́";s:3:"῾";s:3:" ̔";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:"‑";s:3:"‐";s:3:"‗";s:3:" ̳";s:3:"․";s:1:".";s:3:"‥";s:2:"..";s:3:"…";s:3:"...";s:3:" ";s:1:" ";s:3:"″";s:6:"′′";s:3:"‴";s:9:"′′′";s:3:"‶";s:6:"‵‵";s:3:"‷";s:9:"‵‵‵";s:3:"‼";s:2:"!!";s:3:"‾";s:3:" ̅";s:3:"⁇";s:2:"??";s:3:"⁈";s:2:"?!";s:3:"⁉";s:2:"!?";s:3:"⁗";s:12:"′′′′";s:3:" ";s:1:" ";s:3:"⁰";s:1:"0";s:3:"ⁱ";s:1:"i";s:3:"⁴";s:1:"4";s:3:"⁵";s:1:"5";s:3:"⁶";s:1:"6";s:3:"⁷";s:1:"7";s:3:"⁸";s:1:"8";s:3:"⁹";s:1:"9";s:3:"⁺";s:1:"+";s:3:"⁻";s:3:"−";s:3:"⁼";s:1:"=";s:3:"⁽";s:1:"(";s:3:"⁾";s:1:")";s:3:"ⁿ";s:1:"n";s:3:"₀";s:1:"0";s:3:"₁";s:1:"1";s:3:"₂";s:1:"2";s:3:"₃";s:1:"3";s:3:"₄";s:1:"4";s:3:"₅";s:1:"5";s:3:"₆";s:1:"6";s:3:"₇";s:1:"7";s:3:"₈";s:1:"8";s:3:"₉";s:1:"9";s:3:"₊";s:1:"+";s:3:"₋";s:3:"−";s:3:"₌";s:1:"=";s:3:"₍";s:1:"(";s:3:"₎";s:1:")";s:3:"ₐ";s:1:"a";s:3:"ₑ";s:1:"e";s:3:"ₒ";s:1:"o";s:3:"ₓ";s:1:"x";s:3:"ₔ";s:2:"ə";s:3:"₨";s:2:"Rs";s:3:"℀";s:3:"a/c";s:3:"℁";s:3:"a/s";s:3:"ℂ";s:1:"C";s:3:"℃";s:3:"°C";s:3:"℅";s:3:"c/o";s:3:"℆";s:3:"c/u";s:3:"ℇ";s:2:"Ɛ";s:3:"℉";s:3:"°F";s:3:"ℊ";s:1:"g";s:3:"ℋ";s:1:"H";s:3:"ℌ";s:1:"H";s:3:"ℍ";s:1:"H";s:3:"ℎ";s:1:"h";s:3:"ℏ";s:2:"ħ";s:3:"ℐ";s:1:"I";s:3:"ℑ";s:1:"I";s:3:"ℒ";s:1:"L";s:3:"ℓ";s:1:"l";s:3:"ℕ";s:1:"N";s:3:"№";s:2:"No";s:3:"ℙ";s:1:"P";s:3:"ℚ";s:1:"Q";s:3:"ℛ";s:1:"R";s:3:"ℜ";s:1:"R";s:3:"ℝ";s:1:"R";s:3:"℠";s:2:"SM";s:3:"℡";s:3:"TEL";s:3:"™";s:2:"TM";s:3:"ℤ";s:1:"Z";s:3:"Ω";s:2:"Ω";s:3:"ℨ";s:1:"Z";s:3:"K";s:1:"K";s:3:"Å";s:3:"Å";s:3:"ℬ";s:1:"B";s:3:"ℭ";s:1:"C";s:3:"ℯ";s:1:"e";s:3:"ℰ";s:1:"E";s:3:"ℱ";s:1:"F";s:3:"ℳ";s:1:"M";s:3:"ℴ";s:1:"o";s:3:"ℵ";s:2:"א";s:3:"ℶ";s:2:"ב";s:3:"ℷ";s:2:"ג";s:3:"ℸ";s:2:"ד";s:3:"ℹ";s:1:"i";s:3:"℻";s:3:"FAX";s:3:"ℼ";s:2:"π";s:3:"ℽ";s:2:"γ";s:3:"ℾ";s:2:"Γ";s:3:"ℿ";s:2:"Π";s:3:"⅀";s:3:"∑";s:3:"ⅅ";s:1:"D";s:3:"ⅆ";s:1:"d";s:3:"ⅇ";s:1:"e";s:3:"ⅈ";s:1:"i";s:3:"ⅉ";s:1:"j";s:3:"⅓";s:5:"1⁄3";s:3:"⅔";s:5:"2⁄3";s:3:"⅕";s:5:"1⁄5";s:3:"⅖";s:5:"2⁄5";s:3:"⅗";s:5:"3⁄5";s:3:"⅘";s:5:"4⁄5";s:3:"⅙";s:5:"1⁄6";s:3:"⅚";s:5:"5⁄6";s:3:"⅛";s:5:"1⁄8";s:3:"⅜";s:5:"3⁄8";s:3:"⅝";s:5:"5⁄8";s:3:"⅞";s:5:"7⁄8";s:3:"⅟";s:4:"1⁄";s:3:"Ⅰ";s:1:"I";s:3:"Ⅱ";s:2:"II";s:3:"Ⅲ";s:3:"III";s:3:"Ⅳ";s:2:"IV";s:3:"Ⅴ";s:1:"V";s:3:"Ⅵ";s:2:"VI";s:3:"Ⅶ";s:3:"VII";s:3:"Ⅷ";s:4:"VIII";s:3:"Ⅸ";s:2:"IX";s:3:"Ⅹ";s:1:"X";s:3:"Ⅺ";s:2:"XI";s:3:"Ⅻ";s:3:"XII";s:3:"Ⅼ";s:1:"L";s:3:"Ⅽ";s:1:"C";s:3:"Ⅾ";s:1:"D";s:3:"Ⅿ";s:1:"M";s:3:"ⅰ";s:1:"i";s:3:"ⅱ";s:2:"ii";s:3:"ⅲ";s:3:"iii";s:3:"ⅳ";s:2:"iv";s:3:"ⅴ";s:1:"v";s:3:"ⅵ";s:2:"vi";s:3:"ⅶ";s:3:"vii";s:3:"ⅷ";s:4:"viii";s:3:"ⅸ";s:2:"ix";s:3:"ⅹ";s:1:"x";s:3:"ⅺ";s:2:"xi";s:3:"ⅻ";s:3:"xii";s:3:"ⅼ";s:1:"l";s:3:"ⅽ";s:1:"c";s:3:"ⅾ";s:1:"d";s:3:"ⅿ";s:1:"m";s:3:"↚";s:5:"↚";s:3:"↛";s:5:"↛";s:3:"↮";s:5:"↮";s:3:"⇍";s:5:"⇍";s:3:"⇎";s:5:"⇎";s:3:"⇏";s:5:"⇏";s:3:"∄";s:5:"∄";s:3:"∉";s:5:"∉";s:3:"∌";s:5:"∌";s:3:"∤";s:5:"∤";s:3:"∦";s:5:"∦";s:3:"∬";s:6:"∫∫";s:3:"∭";s:9:"∫∫∫";s:3:"∯";s:6:"∮∮";s:3:"∰";s:9:"∮∮∮";s:3:"≁";s:5:"≁";s:3:"≄";s:5:"≄";s:3:"≇";s:5:"≇";s:3:"≉";s:5:"≉";s:3:"≠";s:3:"≠";s:3:"≢";s:5:"≢";s:3:"≭";s:5:"≭";s:3:"≮";s:3:"≮";s:3:"≯";s:3:"≯";s:3:"≰";s:5:"≰";s:3:"≱";s:5:"≱";s:3:"≴";s:5:"≴";s:3:"≵";s:5:"≵";s:3:"≸";s:5:"≸";s:3:"≹";s:5:"≹";s:3:"⊀";s:5:"⊀";s:3:"⊁";s:5:"⊁";s:3:"⊄";s:5:"⊄";s:3:"⊅";s:5:"⊅";s:3:"⊈";s:5:"⊈";s:3:"⊉";s:5:"⊉";s:3:"⊬";s:5:"⊬";s:3:"⊭";s:5:"⊭";s:3:"⊮";s:5:"⊮";s:3:"⊯";s:5:"⊯";s:3:"⋠";s:5:"⋠";s:3:"⋡";s:5:"⋡";s:3:"⋢";s:5:"⋢";s:3:"⋣";s:5:"⋣";s:3:"⋪";s:5:"⋪";s:3:"⋫";s:5:"⋫";s:3:"⋬";s:5:"⋬";s:3:"⋭";s:5:"⋭";s:3:"〈";s:3:"〈";s:3:"〉";s:3:"〉";s:3:"①";s:1:"1";s:3:"②";s:1:"2";s:3:"③";s:1:"3";s:3:"④";s:1:"4";s:3:"⑤";s:1:"5";s:3:"⑥";s:1:"6";s:3:"⑦";s:1:"7";s:3:"⑧";s:1:"8";s:3:"⑨";s:1:"9";s:3:"⑩";s:2:"10";s:3:"⑪";s:2:"11";s:3:"⑫";s:2:"12";s:3:"⑬";s:2:"13";s:3:"⑭";s:2:"14";s:3:"⑮";s:2:"15";s:3:"⑯";s:2:"16";s:3:"⑰";s:2:"17";s:3:"⑱";s:2:"18";s:3:"⑲";s:2:"19";s:3:"⑳";s:2:"20";s:3:"⑴";s:3:"(1)";s:3:"⑵";s:3:"(2)";s:3:"⑶";s:3:"(3)";s:3:"⑷";s:3:"(4)";s:3:"⑸";s:3:"(5)";s:3:"⑹";s:3:"(6)";s:3:"⑺";s:3:"(7)";s:3:"⑻";s:3:"(8)";s:3:"⑼";s:3:"(9)";s:3:"⑽";s:4:"(10)";s:3:"⑾";s:4:"(11)";s:3:"⑿";s:4:"(12)";s:3:"⒀";s:4:"(13)";s:3:"⒁";s:4:"(14)";s:3:"⒂";s:4:"(15)";s:3:"⒃";s:4:"(16)";s:3:"⒄";s:4:"(17)";s:3:"⒅";s:4:"(18)";s:3:"⒆";s:4:"(19)";s:3:"⒇";s:4:"(20)";s:3:"⒈";s:2:"1.";s:3:"⒉";s:2:"2.";s:3:"⒊";s:2:"3.";s:3:"⒋";s:2:"4.";s:3:"⒌";s:2:"5.";s:3:"⒍";s:2:"6.";s:3:"⒎";s:2:"7.";s:3:"⒏";s:2:"8.";s:3:"⒐";s:2:"9.";s:3:"⒑";s:3:"10.";s:3:"⒒";s:3:"11.";s:3:"⒓";s:3:"12.";s:3:"⒔";s:3:"13.";s:3:"⒕";s:3:"14.";s:3:"⒖";s:3:"15.";s:3:"⒗";s:3:"16.";s:3:"⒘";s:3:"17.";s:3:"⒙";s:3:"18.";s:3:"⒚";s:3:"19.";s:3:"⒛";s:3:"20.";s:3:"⒜";s:3:"(a)";s:3:"⒝";s:3:"(b)";s:3:"⒞";s:3:"(c)";s:3:"⒟";s:3:"(d)";s:3:"⒠";s:3:"(e)";s:3:"⒡";s:3:"(f)";s:3:"⒢";s:3:"(g)";s:3:"⒣";s:3:"(h)";s:3:"⒤";s:3:"(i)";s:3:"⒥";s:3:"(j)";s:3:"⒦";s:3:"(k)";s:3:"⒧";s:3:"(l)";s:3:"⒨";s:3:"(m)";s:3:"⒩";s:3:"(n)";s:3:"⒪";s:3:"(o)";s:3:"⒫";s:3:"(p)";s:3:"⒬";s:3:"(q)";s:3:"⒭";s:3:"(r)";s:3:"⒮";s:3:"(s)";s:3:"⒯";s:3:"(t)";s:3:"⒰";s:3:"(u)";s:3:"⒱";s:3:"(v)";s:3:"⒲";s:3:"(w)";s:3:"⒳";s:3:"(x)";s:3:"⒴";s:3:"(y)";s:3:"⒵";s:3:"(z)";s:3:"Ⓐ";s:1:"A";s:3:"Ⓑ";s:1:"B";s:3:"Ⓒ";s:1:"C";s:3:"Ⓓ";s:1:"D";s:3:"Ⓔ";s:1:"E";s:3:"Ⓕ";s:1:"F";s:3:"Ⓖ";s:1:"G";s:3:"Ⓗ";s:1:"H";s:3:"Ⓘ";s:1:"I";s:3:"Ⓙ";s:1:"J";s:3:"Ⓚ";s:1:"K";s:3:"Ⓛ";s:1:"L";s:3:"Ⓜ";s:1:"M";s:3:"Ⓝ";s:1:"N";s:3:"Ⓞ";s:1:"O";s:3:"Ⓟ";s:1:"P";s:3:"Ⓠ";s:1:"Q";s:3:"Ⓡ";s:1:"R";s:3:"Ⓢ";s:1:"S";s:3:"Ⓣ";s:1:"T";s:3:"Ⓤ";s:1:"U";s:3:"Ⓥ";s:1:"V";s:3:"Ⓦ";s:1:"W";s:3:"Ⓧ";s:1:"X";s:3:"Ⓨ";s:1:"Y";s:3:"Ⓩ";s:1:"Z";s:3:"ⓐ";s:1:"a";s:3:"ⓑ";s:1:"b";s:3:"ⓒ";s:1:"c";s:3:"ⓓ";s:1:"d";s:3:"ⓔ";s:1:"e";s:3:"ⓕ";s:1:"f";s:3:"ⓖ";s:1:"g";s:3:"ⓗ";s:1:"h";s:3:"ⓘ";s:1:"i";s:3:"ⓙ";s:1:"j";s:3:"ⓚ";s:1:"k";s:3:"ⓛ";s:1:"l";s:3:"ⓜ";s:1:"m";s:3:"ⓝ";s:1:"n";s:3:"ⓞ";s:1:"o";s:3:"ⓟ";s:1:"p";s:3:"ⓠ";s:1:"q";s:3:"ⓡ";s:1:"r";s:3:"ⓢ";s:1:"s";s:3:"ⓣ";s:1:"t";s:3:"ⓤ";s:1:"u";s:3:"ⓥ";s:1:"v";s:3:"ⓦ";s:1:"w";s:3:"ⓧ";s:1:"x";s:3:"ⓨ";s:1:"y";s:3:"ⓩ";s:1:"z";s:3:"⓪";s:1:"0";s:3:"⨌";s:12:"∫∫∫∫";s:3:"⩴";s:3:"::=";s:3:"⩵";s:2:"==";s:3:"⩶";s:3:"===";s:3:"⫝̸";s:5:"⫝̸";s:3:"ⱼ";s:1:"j";s:3:"ⱽ";s:1:"V";s:3:"ⵯ";s:3:"ⵡ";s:3:"⺟";s:3:"母";s:3:"⻳";s:3:"龟";s:3:"⼀";s:3:"一";s:3:"⼁";s:3:"丨";s:3:"⼂";s:3:"丶";s:3:"⼃";s:3:"丿";s:3:"⼄";s:3:"乙";s:3:"⼅";s:3:"亅";s:3:"⼆";s:3:"二";s:3:"⼇";s:3:"亠";s:3:"⼈";s:3:"人";s:3:"⼉";s:3:"儿";s:3:"⼊";s:3:"入";s:3:"⼋";s:3:"八";s:3:"⼌";s:3:"冂";s:3:"⼍";s:3:"冖";s:3:"⼎";s:3:"冫";s:3:"⼏";s:3:"几";s:3:"⼐";s:3:"凵";s:3:"⼑";s:3:"刀";s:3:"⼒";s:3:"力";s:3:"⼓";s:3:"勹";s:3:"⼔";s:3:"匕";s:3:"⼕";s:3:"匚";s:3:"⼖";s:3:"匸";s:3:"⼗";s:3:"十";s:3:"⼘";s:3:"卜";s:3:"⼙";s:3:"卩";s:3:"⼚";s:3:"厂";s:3:"⼛";s:3:"厶";s:3:"⼜";s:3:"又";s:3:"⼝";s:3:"口";s:3:"⼞";s:3:"囗";s:3:"⼟";s:3:"土";s:3:"⼠";s:3:"士";s:3:"⼡";s:3:"夂";s:3:"⼢";s:3:"夊";s:3:"⼣";s:3:"夕";s:3:"⼤";s:3:"大";s:3:"⼥";s:3:"女";s:3:"⼦";s:3:"子";s:3:"⼧";s:3:"宀";s:3:"⼨";s:3:"寸";s:3:"⼩";s:3:"小";s:3:"⼪";s:3:"尢";s:3:"⼫";s:3:"尸";s:3:"⼬";s:3:"屮";s:3:"⼭";s:3:"山";s:3:"⼮";s:3:"巛";s:3:"⼯";s:3:"工";s:3:"⼰";s:3:"己";s:3:"⼱";s:3:"巾";s:3:"⼲";s:3:"干";s:3:"⼳";s:3:"幺";s:3:"⼴";s:3:"广";s:3:"⼵";s:3:"廴";s:3:"⼶";s:3:"廾";s:3:"⼷";s:3:"弋";s:3:"⼸";s:3:"弓";s:3:"⼹";s:3:"彐";s:3:"⼺";s:3:"彡";s:3:"⼻";s:3:"彳";s:3:"⼼";s:3:"心";s:3:"⼽";s:3:"戈";s:3:"⼾";s:3:"戶";s:3:"⼿";s:3:"手";s:3:"⽀";s:3:"支";s:3:"⽁";s:3:"攴";s:3:"⽂";s:3:"文";s:3:"⽃";s:3:"斗";s:3:"⽄";s:3:"斤";s:3:"⽅";s:3:"方";s:3:"⽆";s:3:"无";s:3:"⽇";s:3:"日";s:3:"⽈";s:3:"曰";s:3:"⽉";s:3:"月";s:3:"⽊";s:3:"木";s:3:"⽋";s:3:"欠";s:3:"⽌";s:3:"止";s:3:"⽍";s:3:"歹";s:3:"⽎";s:3:"殳";s:3:"⽏";s:3:"毋";s:3:"⽐";s:3:"比";s:3:"⽑";s:3:"毛";s:3:"⽒";s:3:"氏";s:3:"⽓";s:3:"气";s:3:"⽔";s:3:"水";s:3:"⽕";s:3:"火";s:3:"⽖";s:3:"爪";s:3:"⽗";s:3:"父";s:3:"⽘";s:3:"爻";s:3:"⽙";s:3:"爿";s:3:"⽚";s:3:"片";s:3:"⽛";s:3:"牙";s:3:"⽜";s:3:"牛";s:3:"⽝";s:3:"犬";s:3:"⽞";s:3:"玄";s:3:"⽟";s:3:"玉";s:3:"⽠";s:3:"瓜";s:3:"⽡";s:3:"瓦";s:3:"⽢";s:3:"甘";s:3:"⽣";s:3:"生";s:3:"⽤";s:3:"用";s:3:"⽥";s:3:"田";s:3:"⽦";s:3:"疋";s:3:"⽧";s:3:"疒";s:3:"⽨";s:3:"癶";s:3:"⽩";s:3:"白";s:3:"⽪";s:3:"皮";s:3:"⽫";s:3:"皿";s:3:"⽬";s:3:"目";s:3:"⽭";s:3:"矛";s:3:"⽮";s:3:"矢";s:3:"⽯";s:3:"石";s:3:"⽰";s:3:"示";s:3:"⽱";s:3:"禸";s:3:"⽲";s:3:"禾";s:3:"⽳";s:3:"穴";s:3:"⽴";s:3:"立";s:3:"⽵";s:3:"竹";s:3:"⽶";s:3:"米";s:3:"⽷";s:3:"糸";s:3:"⽸";s:3:"缶";s:3:"⽹";s:3:"网";s:3:"⽺";s:3:"羊";s:3:"⽻";s:3:"羽";s:3:"⽼";s:3:"老";s:3:"⽽";s:3:"而";s:3:"⽾";s:3:"耒";s:3:"⽿";s:3:"耳";s:3:"⾀";s:3:"聿";s:3:"⾁";s:3:"肉";s:3:"⾂";s:3:"臣";s:3:"⾃";s:3:"自";s:3:"⾄";s:3:"至";s:3:"⾅";s:3:"臼";s:3:"⾆";s:3:"舌";s:3:"⾇";s:3:"舛";s:3:"⾈";s:3:"舟";s:3:"⾉";s:3:"艮";s:3:"⾊";s:3:"色";s:3:"⾋";s:3:"艸";s:3:"⾌";s:3:"虍";s:3:"⾍";s:3:"虫";s:3:"⾎";s:3:"血";s:3:"⾏";s:3:"行";s:3:"⾐";s:3:"衣";s:3:"⾑";s:3:"襾";s:3:"⾒";s:3:"見";s:3:"⾓";s:3:"角";s:3:"⾔";s:3:"言";s:3:"⾕";s:3:"谷";s:3:"⾖";s:3:"豆";s:3:"⾗";s:3:"豕";s:3:"⾘";s:3:"豸";s:3:"⾙";s:3:"貝";s:3:"⾚";s:3:"赤";s:3:"⾛";s:3:"走";s:3:"⾜";s:3:"足";s:3:"⾝";s:3:"身";s:3:"⾞";s:3:"車";s:3:"⾟";s:3:"辛";s:3:"⾠";s:3:"辰";s:3:"⾡";s:3:"辵";s:3:"⾢";s:3:"邑";s:3:"⾣";s:3:"酉";s:3:"⾤";s:3:"釆";s:3:"⾥";s:3:"里";s:3:"⾦";s:3:"金";s:3:"⾧";s:3:"長";s:3:"⾨";s:3:"門";s:3:"⾩";s:3:"阜";s:3:"⾪";s:3:"隶";s:3:"⾫";s:3:"隹";s:3:"⾬";s:3:"雨";s:3:"⾭";s:3:"靑";s:3:"⾮";s:3:"非";s:3:"⾯";s:3:"面";s:3:"⾰";s:3:"革";s:3:"⾱";s:3:"韋";s:3:"⾲";s:3:"韭";s:3:"⾳";s:3:"音";s:3:"⾴";s:3:"頁";s:3:"⾵";s:3:"風";s:3:"⾶";s:3:"飛";s:3:"⾷";s:3:"食";s:3:"⾸";s:3:"首";s:3:"⾹";s:3:"香";s:3:"⾺";s:3:"馬";s:3:"⾻";s:3:"骨";s:3:"⾼";s:3:"高";s:3:"⾽";s:3:"髟";s:3:"⾾";s:3:"鬥";s:3:"⾿";s:3:"鬯";s:3:"⿀";s:3:"鬲";s:3:"⿁";s:3:"鬼";s:3:"⿂";s:3:"魚";s:3:"⿃";s:3:"鳥";s:3:"⿄";s:3:"鹵";s:3:"⿅";s:3:"鹿";s:3:"⿆";s:3:"麥";s:3:"⿇";s:3:"麻";s:3:"⿈";s:3:"黃";s:3:"⿉";s:3:"黍";s:3:"⿊";s:3:"黑";s:3:"⿋";s:3:"黹";s:3:"⿌";s:3:"黽";s:3:"⿍";s:3:"鼎";s:3:"⿎";s:3:"鼓";s:3:"⿏";s:3:"鼠";s:3:"⿐";s:3:"鼻";s:3:"⿑";s:3:"齊";s:3:"⿒";s:3:"齒";s:3:"⿓";s:3:"龍";s:3:"⿔";s:3:"龜";s:3:"⿕";s:3:"龠";s:3:" ";s:1:" ";s:3:"〶";s:3:"〒";s:3:"〸";s:3:"十";s:3:"〹";s:3:"卄";s:3:"〺";s:3:"卅";s:3:"が";s:6:"が";s:3:"ぎ";s:6:"ぎ";s:3:"ぐ";s:6:"ぐ";s:3:"げ";s:6:"げ";s:3:"ご";s:6:"ご";s:3:"ざ";s:6:"ざ";s:3:"じ";s:6:"じ";s:3:"ず";s:6:"ず";s:3:"ぜ";s:6:"ぜ";s:3:"ぞ";s:6:"ぞ";s:3:"だ";s:6:"だ";s:3:"ぢ";s:6:"ぢ";s:3:"づ";s:6:"づ";s:3:"で";s:6:"で";s:3:"ど";s:6:"ど";s:3:"ば";s:6:"ば";s:3:"ぱ";s:6:"ぱ";s:3:"び";s:6:"び";s:3:"ぴ";s:6:"ぴ";s:3:"ぶ";s:6:"ぶ";s:3:"ぷ";s:6:"ぷ";s:3:"べ";s:6:"べ";s:3:"ぺ";s:6:"ぺ";s:3:"ぼ";s:6:"ぼ";s:3:"ぽ";s:6:"ぽ";s:3:"ゔ";s:6:"ゔ";s:3:"゛";s:4:" ゙";s:3:"゜";s:4:" ゚";s:3:"ゞ";s:6:"ゞ";s:3:"ゟ";s:6:"より";s:3:"ガ";s:6:"ガ";s:3:"ギ";s:6:"ギ";s:3:"グ";s:6:"グ";s:3:"ゲ";s:6:"ゲ";s:3:"ゴ";s:6:"ゴ";s:3:"ザ";s:6:"ザ";s:3:"ジ";s:6:"ジ";s:3:"ズ";s:6:"ズ";s:3:"ゼ";s:6:"ゼ";s:3:"ゾ";s:6:"ゾ";s:3:"ダ";s:6:"ダ";s:3:"ヂ";s:6:"ヂ";s:3:"ヅ";s:6:"ヅ";s:3:"デ";s:6:"デ";s:3:"ド";s:6:"ド";s:3:"バ";s:6:"バ";s:3:"パ";s:6:"パ";s:3:"ビ";s:6:"ビ";s:3:"ピ";s:6:"ピ";s:3:"ブ";s:6:"ブ";s:3:"プ";s:6:"プ";s:3:"ベ";s:6:"ベ";s:3:"ペ";s:6:"ペ";s:3:"ボ";s:6:"ボ";s:3:"ポ";s:6:"ポ";s:3:"ヴ";s:6:"ヴ";s:3:"ヷ";s:6:"ヷ";s:3:"ヸ";s:6:"ヸ";s:3:"ヹ";s:6:"ヹ";s:3:"ヺ";s:6:"ヺ";s:3:"ヾ";s:6:"ヾ";s:3:"ヿ";s:6:"コト";s:3:"ㄱ";s:3:"ᄀ";s:3:"ㄲ";s:3:"ᄁ";s:3:"ㄳ";s:3:"ᆪ";s:3:"ㄴ";s:3:"ᄂ";s:3:"ㄵ";s:3:"ᆬ";s:3:"ㄶ";s:3:"ᆭ";s:3:"ㄷ";s:3:"ᄃ";s:3:"ㄸ";s:3:"ᄄ";s:3:"ㄹ";s:3:"ᄅ";s:3:"ㄺ";s:3:"ᆰ";s:3:"ㄻ";s:3:"ᆱ";s:3:"ㄼ";s:3:"ᆲ";s:3:"ㄽ";s:3:"ᆳ";s:3:"ㄾ";s:3:"ᆴ";s:3:"ㄿ";s:3:"ᆵ";s:3:"ㅀ";s:3:"ᄚ";s:3:"ㅁ";s:3:"ᄆ";s:3:"ㅂ";s:3:"ᄇ";s:3:"ㅃ";s:3:"ᄈ";s:3:"ㅄ";s:3:"ᄡ";s:3:"ㅅ";s:3:"ᄉ";s:3:"ㅆ";s:3:"ᄊ";s:3:"ㅇ";s:3:"ᄋ";s:3:"ㅈ";s:3:"ᄌ";s:3:"ㅉ";s:3:"ᄍ";s:3:"ㅊ";s:3:"ᄎ";s:3:"ㅋ";s:3:"ᄏ";s:3:"ㅌ";s:3:"ᄐ";s:3:"ㅍ";s:3:"ᄑ";s:3:"ㅎ";s:3:"ᄒ";s:3:"ㅏ";s:3:"ᅡ";s:3:"ㅐ";s:3:"ᅢ";s:3:"ㅑ";s:3:"ᅣ";s:3:"ㅒ";s:3:"ᅤ";s:3:"ㅓ";s:3:"ᅥ";s:3:"ㅔ";s:3:"ᅦ";s:3:"ㅕ";s:3:"ᅧ";s:3:"ㅖ";s:3:"ᅨ";s:3:"ㅗ";s:3:"ᅩ";s:3:"ㅘ";s:3:"ᅪ";s:3:"ㅙ";s:3:"ᅫ";s:3:"ㅚ";s:3:"ᅬ";s:3:"ㅛ";s:3:"ᅭ";s:3:"ㅜ";s:3:"ᅮ";s:3:"ㅝ";s:3:"ᅯ";s:3:"ㅞ";s:3:"ᅰ";s:3:"ㅟ";s:3:"ᅱ";s:3:"ㅠ";s:3:"ᅲ";s:3:"ㅡ";s:3:"ᅳ";s:3:"ㅢ";s:3:"ᅴ";s:3:"ㅣ";s:3:"ᅵ";s:3:"ㅤ";s:3:"ᅠ";s:3:"ㅥ";s:3:"ᄔ";s:3:"ㅦ";s:3:"ᄕ";s:3:"ㅧ";s:3:"ᇇ";s:3:"ㅨ";s:3:"ᇈ";s:3:"ㅩ";s:3:"ᇌ";s:3:"ㅪ";s:3:"ᇎ";s:3:"ㅫ";s:3:"ᇓ";s:3:"ㅬ";s:3:"ᇗ";s:3:"ㅭ";s:3:"ᇙ";s:3:"ㅮ";s:3:"ᄜ";s:3:"ㅯ";s:3:"ᇝ";s:3:"ㅰ";s:3:"ᇟ";s:3:"ㅱ";s:3:"ᄝ";s:3:"ㅲ";s:3:"ᄞ";s:3:"ㅳ";s:3:"ᄠ";s:3:"ㅴ";s:3:"ᄢ";s:3:"ㅵ";s:3:"ᄣ";s:3:"ㅶ";s:3:"ᄧ";s:3:"ㅷ";s:3:"ᄩ";s:3:"ㅸ";s:3:"ᄫ";s:3:"ㅹ";s:3:"ᄬ";s:3:"ㅺ";s:3:"ᄭ";s:3:"ㅻ";s:3:"ᄮ";s:3:"ㅼ";s:3:"ᄯ";s:3:"ㅽ";s:3:"ᄲ";s:3:"ㅾ";s:3:"ᄶ";s:3:"ㅿ";s:3:"ᅀ";s:3:"ㆀ";s:3:"ᅇ";s:3:"ㆁ";s:3:"ᅌ";s:3:"ㆂ";s:3:"ᇱ";s:3:"ㆃ";s:3:"ᇲ";s:3:"ㆄ";s:3:"ᅗ";s:3:"ㆅ";s:3:"ᅘ";s:3:"ㆆ";s:3:"ᅙ";s:3:"ㆇ";s:3:"ᆄ";s:3:"ㆈ";s:3:"ᆅ";s:3:"ㆉ";s:3:"ᆈ";s:3:"ㆊ";s:3:"ᆑ";s:3:"ㆋ";s:3:"ᆒ";s:3:"ㆌ";s:3:"ᆔ";s:3:"ㆍ";s:3:"ᆞ";s:3:"ㆎ";s:3:"ᆡ";s:3:"㆒";s:3:"一";s:3:"㆓";s:3:"二";s:3:"㆔";s:3:"三";s:3:"㆕";s:3:"四";s:3:"㆖";s:3:"上";s:3:"㆗";s:3:"中";s:3:"㆘";s:3:"下";s:3:"㆙";s:3:"甲";s:3:"㆚";s:3:"乙";s:3:"㆛";s:3:"丙";s:3:"㆜";s:3:"丁";s:3:"㆝";s:3:"天";s:3:"㆞";s:3:"地";s:3:"㆟";s:3:"人";s:3:"㈀";s:5:"(ᄀ)";s:3:"㈁";s:5:"(ᄂ)";s:3:"㈂";s:5:"(ᄃ)";s:3:"㈃";s:5:"(ᄅ)";s:3:"㈄";s:5:"(ᄆ)";s:3:"㈅";s:5:"(ᄇ)";s:3:"㈆";s:5:"(ᄉ)";s:3:"㈇";s:5:"(ᄋ)";s:3:"㈈";s:5:"(ᄌ)";s:3:"㈉";s:5:"(ᄎ)";s:3:"㈊";s:5:"(ᄏ)";s:3:"㈋";s:5:"(ᄐ)";s:3:"㈌";s:5:"(ᄑ)";s:3:"㈍";s:5:"(ᄒ)";s:3:"㈎";s:8:"(가)";s:3:"㈏";s:8:"(나)";s:3:"㈐";s:8:"(다)";s:3:"㈑";s:8:"(라)";s:3:"㈒";s:8:"(마)";s:3:"㈓";s:8:"(바)";s:3:"㈔";s:8:"(사)";s:3:"㈕";s:8:"(아)";s:3:"㈖";s:8:"(자)";s:3:"㈗";s:8:"(차)";s:3:"㈘";s:8:"(카)";s:3:"㈙";s:8:"(타)";s:3:"㈚";s:8:"(파)";s:3:"㈛";s:8:"(하)";s:3:"㈜";s:8:"(주)";s:3:"㈝";s:17:"(오전)";s:3:"㈞";s:14:"(오후)";s:3:"㈠";s:5:"(一)";s:3:"㈡";s:5:"(二)";s:3:"㈢";s:5:"(三)";s:3:"㈣";s:5:"(四)";s:3:"㈤";s:5:"(五)";s:3:"㈥";s:5:"(六)";s:3:"㈦";s:5:"(七)";s:3:"㈧";s:5:"(八)";s:3:"㈨";s:5:"(九)";s:3:"㈩";s:5:"(十)";s:3:"㈪";s:5:"(月)";s:3:"㈫";s:5:"(火)";s:3:"㈬";s:5:"(水)";s:3:"㈭";s:5:"(木)";s:3:"㈮";s:5:"(金)";s:3:"㈯";s:5:"(土)";s:3:"㈰";s:5:"(日)";s:3:"㈱";s:5:"(株)";s:3:"㈲";s:5:"(有)";s:3:"㈳";s:5:"(社)";s:3:"㈴";s:5:"(名)";s:3:"㈵";s:5:"(特)";s:3:"㈶";s:5:"(財)";s:3:"㈷";s:5:"(祝)";s:3:"㈸";s:5:"(労)";s:3:"㈹";s:5:"(代)";s:3:"㈺";s:5:"(呼)";s:3:"㈻";s:5:"(学)";s:3:"㈼";s:5:"(監)";s:3:"㈽";s:5:"(企)";s:3:"㈾";s:5:"(資)";s:3:"㈿";s:5:"(協)";s:3:"㉀";s:5:"(祭)";s:3:"㉁";s:5:"(休)";s:3:"㉂";s:5:"(自)";s:3:"㉃";s:5:"(至)";s:3:"㉐";s:3:"PTE";s:3:"㉑";s:2:"21";s:3:"㉒";s:2:"22";s:3:"㉓";s:2:"23";s:3:"㉔";s:2:"24";s:3:"㉕";s:2:"25";s:3:"㉖";s:2:"26";s:3:"㉗";s:2:"27";s:3:"㉘";s:2:"28";s:3:"㉙";s:2:"29";s:3:"㉚";s:2:"30";s:3:"㉛";s:2:"31";s:3:"㉜";s:2:"32";s:3:"㉝";s:2:"33";s:3:"㉞";s:2:"34";s:3:"㉟";s:2:"35";s:3:"㉠";s:3:"ᄀ";s:3:"㉡";s:3:"ᄂ";s:3:"㉢";s:3:"ᄃ";s:3:"㉣";s:3:"ᄅ";s:3:"㉤";s:3:"ᄆ";s:3:"㉥";s:3:"ᄇ";s:3:"㉦";s:3:"ᄉ";s:3:"㉧";s:3:"ᄋ";s:3:"㉨";s:3:"ᄌ";s:3:"㉩";s:3:"ᄎ";s:3:"㉪";s:3:"ᄏ";s:3:"㉫";s:3:"ᄐ";s:3:"㉬";s:3:"ᄑ";s:3:"㉭";s:3:"ᄒ";s:3:"㉮";s:6:"가";s:3:"㉯";s:6:"나";s:3:"㉰";s:6:"다";s:3:"㉱";s:6:"라";s:3:"㉲";s:6:"마";s:3:"㉳";s:6:"바";s:3:"㉴";s:6:"사";s:3:"㉵";s:6:"아";s:3:"㉶";s:6:"자";s:3:"㉷";s:6:"차";s:3:"㉸";s:6:"카";s:3:"㉹";s:6:"타";s:3:"㉺";s:6:"파";s:3:"㉻";s:6:"하";s:3:"㉼";s:15:"참고";s:3:"㉽";s:12:"주의";s:3:"㉾";s:6:"우";s:3:"㊀";s:3:"一";s:3:"㊁";s:3:"二";s:3:"㊂";s:3:"三";s:3:"㊃";s:3:"四";s:3:"㊄";s:3:"五";s:3:"㊅";s:3:"六";s:3:"㊆";s:3:"七";s:3:"㊇";s:3:"八";s:3:"㊈";s:3:"九";s:3:"㊉";s:3:"十";s:3:"㊊";s:3:"月";s:3:"㊋";s:3:"火";s:3:"㊌";s:3:"水";s:3:"㊍";s:3:"木";s:3:"㊎";s:3:"金";s:3:"㊏";s:3:"土";s:3:"㊐";s:3:"日";s:3:"㊑";s:3:"株";s:3:"㊒";s:3:"有";s:3:"㊓";s:3:"社";s:3:"㊔";s:3:"名";s:3:"㊕";s:3:"特";s:3:"㊖";s:3:"財";s:3:"㊗";s:3:"祝";s:3:"㊘";s:3:"労";s:3:"㊙";s:3:"秘";s:3:"㊚";s:3:"男";s:3:"㊛";s:3:"女";s:3:"㊜";s:3:"適";s:3:"㊝";s:3:"優";s:3:"㊞";s:3:"印";s:3:"㊟";s:3:"注";s:3:"㊠";s:3:"項";s:3:"㊡";s:3:"休";s:3:"㊢";s:3:"写";s:3:"㊣";s:3:"正";s:3:"㊤";s:3:"上";s:3:"㊥";s:3:"中";s:3:"㊦";s:3:"下";s:3:"㊧";s:3:"左";s:3:"㊨";s:3:"右";s:3:"㊩";s:3:"医";s:3:"㊪";s:3:"宗";s:3:"㊫";s:3:"学";s:3:"㊬";s:3:"監";s:3:"㊭";s:3:"企";s:3:"㊮";s:3:"資";s:3:"㊯";s:3:"協";s:3:"㊰";s:3:"夜";s:3:"㊱";s:2:"36";s:3:"㊲";s:2:"37";s:3:"㊳";s:2:"38";s:3:"㊴";s:2:"39";s:3:"㊵";s:2:"40";s:3:"㊶";s:2:"41";s:3:"㊷";s:2:"42";s:3:"㊸";s:2:"43";s:3:"㊹";s:2:"44";s:3:"㊺";s:2:"45";s:3:"㊻";s:2:"46";s:3:"㊼";s:2:"47";s:3:"㊽";s:2:"48";s:3:"㊾";s:2:"49";s:3:"㊿";s:2:"50";s:3:"㋀";s:4:"1月";s:3:"㋁";s:4:"2月";s:3:"㋂";s:4:"3月";s:3:"㋃";s:4:"4月";s:3:"㋄";s:4:"5月";s:3:"㋅";s:4:"6月";s:3:"㋆";s:4:"7月";s:3:"㋇";s:4:"8月";s:3:"㋈";s:4:"9月";s:3:"㋉";s:5:"10月";s:3:"㋊";s:5:"11月";s:3:"㋋";s:5:"12月";s:3:"㋌";s:2:"Hg";s:3:"㋍";s:3:"erg";s:3:"㋎";s:2:"eV";s:3:"㋏";s:3:"LTD";s:3:"㋐";s:3:"ア";s:3:"㋑";s:3:"イ";s:3:"㋒";s:3:"ウ";s:3:"㋓";s:3:"エ";s:3:"㋔";s:3:"オ";s:3:"㋕";s:3:"カ";s:3:"㋖";s:3:"キ";s:3:"㋗";s:3:"ク";s:3:"㋘";s:3:"ケ";s:3:"㋙";s:3:"コ";s:3:"㋚";s:3:"サ";s:3:"㋛";s:3:"シ";s:3:"㋜";s:3:"ス";s:3:"㋝";s:3:"セ";s:3:"㋞";s:3:"ソ";s:3:"㋟";s:3:"タ";s:3:"㋠";s:3:"チ";s:3:"㋡";s:3:"ツ";s:3:"㋢";s:3:"テ";s:3:"㋣";s:3:"ト";s:3:"㋤";s:3:"ナ";s:3:"㋥";s:3:"ニ";s:3:"㋦";s:3:"ヌ";s:3:"㋧";s:3:"ネ";s:3:"㋨";s:3:"ノ";s:3:"㋩";s:3:"ハ";s:3:"㋪";s:3:"ヒ";s:3:"㋫";s:3:"フ";s:3:"㋬";s:3:"ヘ";s:3:"㋭";s:3:"ホ";s:3:"㋮";s:3:"マ";s:3:"㋯";s:3:"ミ";s:3:"㋰";s:3:"ム";s:3:"㋱";s:3:"メ";s:3:"㋲";s:3:"モ";s:3:"㋳";s:3:"ヤ";s:3:"㋴";s:3:"ユ";s:3:"㋵";s:3:"ヨ";s:3:"㋶";s:3:"ラ";s:3:"㋷";s:3:"リ";s:3:"㋸";s:3:"ル";s:3:"㋹";s:3:"レ";s:3:"㋺";s:3:"ロ";s:3:"㋻";s:3:"ワ";s:3:"㋼";s:3:"ヰ";s:3:"㋽";s:3:"ヱ";s:3:"㋾";s:3:"ヲ";s:3:"㌀";s:15:"アパート";s:3:"㌁";s:12:"アルファ";s:3:"㌂";s:15:"アンペア";s:3:"㌃";s:9:"アール";s:3:"㌄";s:15:"イニング";s:3:"㌅";s:9:"インチ";s:3:"㌆";s:9:"ウォン";s:3:"㌇";s:18:"エスクード";s:3:"㌈";s:12:"エーカー";s:3:"㌉";s:9:"オンス";s:3:"㌊";s:9:"オーム";s:3:"㌋";s:9:"カイリ";s:3:"㌌";s:12:"カラット";s:3:"㌍";s:12:"カロリー";s:3:"㌎";s:12:"ガロン";s:3:"㌏";s:12:"ガンマ";s:3:"㌐";s:12:"ギガ";s:3:"㌑";s:12:"ギニー";s:3:"㌒";s:12:"キュリー";s:3:"㌓";s:18:"ギルダー";s:3:"㌔";s:6:"キロ";s:3:"㌕";s:18:"キログラム";s:3:"㌖";s:18:"キロメートル";s:3:"㌗";s:15:"キロワット";s:3:"㌘";s:12:"グラム";s:3:"㌙";s:18:"グラムトン";s:3:"㌚";s:18:"クルゼイロ";s:3:"㌛";s:12:"クローネ";s:3:"㌜";s:9:"ケース";s:3:"㌝";s:9:"コルナ";s:3:"㌞";s:12:"コーポ";s:3:"㌟";s:12:"サイクル";s:3:"㌠";s:15:"サンチーム";s:3:"㌡";s:15:"シリング";s:3:"㌢";s:9:"センチ";s:3:"㌣";s:9:"セント";s:3:"㌤";s:12:"ダース";s:3:"㌥";s:9:"デシ";s:3:"㌦";s:9:"ドル";s:3:"㌧";s:6:"トン";s:3:"㌨";s:6:"ナノ";s:3:"㌩";s:9:"ノット";s:3:"㌪";s:9:"ハイツ";s:3:"㌫";s:18:"パーセント";s:3:"㌬";s:12:"パーツ";s:3:"㌭";s:15:"バーレル";s:3:"㌮";s:18:"ピアストル";s:3:"㌯";s:12:"ピクル";s:3:"㌰";s:9:"ピコ";s:3:"㌱";s:9:"ビル";s:3:"㌲";s:18:"ファラッド";s:3:"㌳";s:12:"フィート";s:3:"㌴";s:18:"ブッシェル";s:3:"㌵";s:9:"フラン";s:3:"㌶";s:15:"ヘクタール";s:3:"㌷";s:9:"ペソ";s:3:"㌸";s:12:"ペニヒ";s:3:"㌹";s:9:"ヘルツ";s:3:"㌺";s:12:"ペンス";s:3:"㌻";s:15:"ページ";s:3:"㌼";s:12:"ベータ";s:3:"㌽";s:15:"ポイント";s:3:"㌾";s:12:"ボルト";s:3:"㌿";s:6:"ホン";s:3:"㍀";s:15:"ポンド";s:3:"㍁";s:9:"ホール";s:3:"㍂";s:9:"ホーン";s:3:"㍃";s:12:"マイクロ";s:3:"㍄";s:9:"マイル";s:3:"㍅";s:9:"マッハ";s:3:"㍆";s:9:"マルク";s:3:"㍇";s:15:"マンション";s:3:"㍈";s:12:"ミクロン";s:3:"㍉";s:6:"ミリ";s:3:"㍊";s:18:"ミリバール";s:3:"㍋";s:9:"メガ";s:3:"㍌";s:15:"メガトン";s:3:"㍍";s:12:"メートル";s:3:"㍎";s:12:"ヤード";s:3:"㍏";s:9:"ヤール";s:3:"㍐";s:9:"ユアン";s:3:"㍑";s:12:"リットル";s:3:"㍒";s:6:"リラ";s:3:"㍓";s:12:"ルピー";s:3:"㍔";s:15:"ルーブル";s:3:"㍕";s:6:"レム";s:3:"㍖";s:18:"レントゲン";s:3:"㍗";s:9:"ワット";s:3:"㍘";s:4:"0点";s:3:"㍙";s:4:"1点";s:3:"㍚";s:4:"2点";s:3:"㍛";s:4:"3点";s:3:"㍜";s:4:"4点";s:3:"㍝";s:4:"5点";s:3:"㍞";s:4:"6点";s:3:"㍟";s:4:"7点";s:3:"㍠";s:4:"8点";s:3:"㍡";s:4:"9点";s:3:"㍢";s:5:"10点";s:3:"㍣";s:5:"11点";s:3:"㍤";s:5:"12点";s:3:"㍥";s:5:"13点";s:3:"㍦";s:5:"14点";s:3:"㍧";s:5:"15点";s:3:"㍨";s:5:"16点";s:3:"㍩";s:5:"17点";s:3:"㍪";s:5:"18点";s:3:"㍫";s:5:"19点";s:3:"㍬";s:5:"20点";s:3:"㍭";s:5:"21点";s:3:"㍮";s:5:"22点";s:3:"㍯";s:5:"23点";s:3:"㍰";s:5:"24点";s:3:"㍱";s:3:"hPa";s:3:"㍲";s:2:"da";s:3:"㍳";s:2:"AU";s:3:"㍴";s:3:"bar";s:3:"㍵";s:2:"oV";s:3:"㍶";s:2:"pc";s:3:"㍷";s:2:"dm";s:3:"㍸";s:3:"dm2";s:3:"㍹";s:3:"dm3";s:3:"㍺";s:2:"IU";s:3:"㍻";s:6:"平成";s:3:"㍼";s:6:"昭和";s:3:"㍽";s:6:"大正";s:3:"㍾";s:6:"明治";s:3:"㍿";s:12:"株式会社";s:3:"㎀";s:2:"pA";s:3:"㎁";s:2:"nA";s:3:"㎂";s:3:"μA";s:3:"㎃";s:2:"mA";s:3:"㎄";s:2:"kA";s:3:"㎅";s:2:"KB";s:3:"㎆";s:2:"MB";s:3:"㎇";s:2:"GB";s:3:"㎈";s:3:"cal";s:3:"㎉";s:4:"kcal";s:3:"㎊";s:2:"pF";s:3:"㎋";s:2:"nF";s:3:"㎌";s:3:"μF";s:3:"㎍";s:3:"μg";s:3:"㎎";s:2:"mg";s:3:"㎏";s:2:"kg";s:3:"㎐";s:2:"Hz";s:3:"㎑";s:3:"kHz";s:3:"㎒";s:3:"MHz";s:3:"㎓";s:3:"GHz";s:3:"㎔";s:3:"THz";s:3:"㎕";s:3:"μl";s:3:"㎖";s:2:"ml";s:3:"㎗";s:2:"dl";s:3:"㎘";s:2:"kl";s:3:"㎙";s:2:"fm";s:3:"㎚";s:2:"nm";s:3:"㎛";s:3:"μm";s:3:"㎜";s:2:"mm";s:3:"㎝";s:2:"cm";s:3:"㎞";s:2:"km";s:3:"㎟";s:3:"mm2";s:3:"㎠";s:3:"cm2";s:3:"㎡";s:2:"m2";s:3:"㎢";s:3:"km2";s:3:"㎣";s:3:"mm3";s:3:"㎤";s:3:"cm3";s:3:"㎥";s:2:"m3";s:3:"㎦";s:3:"km3";s:3:"㎧";s:5:"m∕s";s:3:"㎨";s:6:"m∕s2";s:3:"㎩";s:2:"Pa";s:3:"㎪";s:3:"kPa";s:3:"㎫";s:3:"MPa";s:3:"㎬";s:3:"GPa";s:3:"㎭";s:3:"rad";s:3:"㎮";s:7:"rad∕s";s:3:"㎯";s:8:"rad∕s2";s:3:"㎰";s:2:"ps";s:3:"㎱";s:2:"ns";s:3:"㎲";s:3:"μs";s:3:"㎳";s:2:"ms";s:3:"㎴";s:2:"pV";s:3:"㎵";s:2:"nV";s:3:"㎶";s:3:"μV";s:3:"㎷";s:2:"mV";s:3:"㎸";s:2:"kV";s:3:"㎹";s:2:"MV";s:3:"㎺";s:2:"pW";s:3:"㎻";s:2:"nW";s:3:"㎼";s:3:"μW";s:3:"㎽";s:2:"mW";s:3:"㎾";s:2:"kW";s:3:"㎿";s:2:"MW";s:3:"㏀";s:3:"kΩ";s:3:"㏁";s:3:"MΩ";s:3:"㏂";s:4:"a.m.";s:3:"㏃";s:2:"Bq";s:3:"㏄";s:2:"cc";s:3:"㏅";s:2:"cd";s:3:"㏆";s:6:"C∕kg";s:3:"㏇";s:3:"Co.";s:3:"㏈";s:2:"dB";s:3:"㏉";s:2:"Gy";s:3:"㏊";s:2:"ha";s:3:"㏋";s:2:"HP";s:3:"㏌";s:2:"in";s:3:"㏍";s:2:"KK";s:3:"㏎";s:2:"KM";s:3:"㏏";s:2:"kt";s:3:"㏐";s:2:"lm";s:3:"㏑";s:2:"ln";s:3:"㏒";s:3:"log";s:3:"㏓";s:2:"lx";s:3:"㏔";s:2:"mb";s:3:"㏕";s:3:"mil";s:3:"㏖";s:3:"mol";s:3:"㏗";s:2:"PH";s:3:"㏘";s:4:"p.m.";s:3:"㏙";s:3:"PPM";s:3:"㏚";s:2:"PR";s:3:"㏛";s:2:"sr";s:3:"㏜";s:2:"Sv";s:3:"㏝";s:2:"Wb";s:3:"㏞";s:5:"V∕m";s:3:"㏟";s:5:"A∕m";s:3:"㏠";s:4:"1日";s:3:"㏡";s:4:"2日";s:3:"㏢";s:4:"3日";s:3:"㏣";s:4:"4日";s:3:"㏤";s:4:"5日";s:3:"㏥";s:4:"6日";s:3:"㏦";s:4:"7日";s:3:"㏧";s:4:"8日";s:3:"㏨";s:4:"9日";s:3:"㏩";s:5:"10日";s:3:"㏪";s:5:"11日";s:3:"㏫";s:5:"12日";s:3:"㏬";s:5:"13日";s:3:"㏭";s:5:"14日";s:3:"㏮";s:5:"15日";s:3:"㏯";s:5:"16日";s:3:"㏰";s:5:"17日";s:3:"㏱";s:5:"18日";s:3:"㏲";s:5:"19日";s:3:"㏳";s:5:"20日";s:3:"㏴";s:5:"21日";s:3:"㏵";s:5:"22日";s:3:"㏶";s:5:"23日";s:3:"㏷";s:5:"24日";s:3:"㏸";s:5:"25日";s:3:"㏹";s:5:"26日";s:3:"㏺";s:5:"27日";s:3:"㏻";s:5:"28日";s:3:"㏼";s:5:"29日";s:3:"㏽";s:5:"30日";s:3:"㏾";s:5:"31日";s:3:"㏿";s:3:"gal";s:3:"ꝰ";s:3:"ꝯ";s:3:"豈";s:3:"豈";s:3:"更";s:3:"更";s:3:"車";s:3:"車";s:3:"賈";s:3:"賈";s:3:"滑";s:3:"滑";s:3:"串";s:3:"串";s:3:"句";s:3:"句";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"契";s:3:"契";s:3:"金";s:3:"金";s:3:"喇";s:3:"喇";s:3:"奈";s:3:"奈";s:3:"懶";s:3:"懶";s:3:"癩";s:3:"癩";s:3:"羅";s:3:"羅";s:3:"蘿";s:3:"蘿";s:3:"螺";s:3:"螺";s:3:"裸";s:3:"裸";s:3:"邏";s:3:"邏";s:3:"樂";s:3:"樂";s:3:"洛";s:3:"洛";s:3:"烙";s:3:"烙";s:3:"珞";s:3:"珞";s:3:"落";s:3:"落";s:3:"酪";s:3:"酪";s:3:"駱";s:3:"駱";s:3:"亂";s:3:"亂";s:3:"卵";s:3:"卵";s:3:"欄";s:3:"欄";s:3:"爛";s:3:"爛";s:3:"蘭";s:3:"蘭";s:3:"鸞";s:3:"鸞";s:3:"嵐";s:3:"嵐";s:3:"濫";s:3:"濫";s:3:"藍";s:3:"藍";s:3:"襤";s:3:"襤";s:3:"拉";s:3:"拉";s:3:"臘";s:3:"臘";s:3:"蠟";s:3:"蠟";s:3:"廊";s:3:"廊";s:3:"朗";s:3:"朗";s:3:"浪";s:3:"浪";s:3:"狼";s:3:"狼";s:3:"郎";s:3:"郎";s:3:"來";s:3:"來";s:3:"冷";s:3:"冷";s:3:"勞";s:3:"勞";s:3:"擄";s:3:"擄";s:3:"櫓";s:3:"櫓";s:3:"爐";s:3:"爐";s:3:"盧";s:3:"盧";s:3:"老";s:3:"老";s:3:"蘆";s:3:"蘆";s:3:"虜";s:3:"虜";s:3:"路";s:3:"路";s:3:"露";s:3:"露";s:3:"魯";s:3:"魯";s:3:"鷺";s:3:"鷺";s:3:"碌";s:3:"碌";s:3:"祿";s:3:"祿";s:3:"綠";s:3:"綠";s:3:"菉";s:3:"菉";s:3:"錄";s:3:"錄";s:3:"鹿";s:3:"鹿";s:3:"論";s:3:"論";s:3:"壟";s:3:"壟";s:3:"弄";s:3:"弄";s:3:"籠";s:3:"籠";s:3:"聾";s:3:"聾";s:3:"牢";s:3:"牢";s:3:"磊";s:3:"磊";s:3:"賂";s:3:"賂";s:3:"雷";s:3:"雷";s:3:"壘";s:3:"壘";s:3:"屢";s:3:"屢";s:3:"樓";s:3:"樓";s:3:"淚";s:3:"淚";s:3:"漏";s:3:"漏";s:3:"累";s:3:"累";s:3:"縷";s:3:"縷";s:3:"陋";s:3:"陋";s:3:"勒";s:3:"勒";s:3:"肋";s:3:"肋";s:3:"凜";s:3:"凜";s:3:"凌";s:3:"凌";s:3:"稜";s:3:"稜";s:3:"綾";s:3:"綾";s:3:"菱";s:3:"菱";s:3:"陵";s:3:"陵";s:3:"讀";s:3:"讀";s:3:"拏";s:3:"拏";s:3:"樂";s:3:"樂";s:3:"諾";s:3:"諾";s:3:"丹";s:3:"丹";s:3:"寧";s:3:"寧";s:3:"怒";s:3:"怒";s:3:"率";s:3:"率";s:3:"異";s:3:"異";s:3:"北";s:3:"北";s:3:"磻";s:3:"磻";s:3:"便";s:3:"便";s:3:"復";s:3:"復";s:3:"不";s:3:"不";s:3:"泌";s:3:"泌";s:3:"數";s:3:"數";s:3:"索";s:3:"索";s:3:"參";s:3:"參";s:3:"塞";s:3:"塞";s:3:"省";s:3:"省";s:3:"葉";s:3:"葉";s:3:"說";s:3:"說";s:3:"殺";s:3:"殺";s:3:"辰";s:3:"辰";s:3:"沈";s:3:"沈";s:3:"拾";s:3:"拾";s:3:"若";s:3:"若";s:3:"掠";s:3:"掠";s:3:"略";s:3:"略";s:3:"亮";s:3:"亮";s:3:"兩";s:3:"兩";s:3:"凉";s:3:"凉";s:3:"梁";s:3:"梁";s:3:"糧";s:3:"糧";s:3:"良";s:3:"良";s:3:"諒";s:3:"諒";s:3:"量";s:3:"量";s:3:"勵";s:3:"勵";s:3:"呂";s:3:"呂";s:3:"女";s:3:"女";s:3:"廬";s:3:"廬";s:3:"旅";s:3:"旅";s:3:"濾";s:3:"濾";s:3:"礪";s:3:"礪";s:3:"閭";s:3:"閭";s:3:"驪";s:3:"驪";s:3:"麗";s:3:"麗";s:3:"黎";s:3:"黎";s:3:"力";s:3:"力";s:3:"曆";s:3:"曆";s:3:"歷";s:3:"歷";s:3:"轢";s:3:"轢";s:3:"年";s:3:"年";s:3:"憐";s:3:"憐";s:3:"戀";s:3:"戀";s:3:"撚";s:3:"撚";s:3:"漣";s:3:"漣";s:3:"煉";s:3:"煉";s:3:"璉";s:3:"璉";s:3:"秊";s:3:"秊";s:3:"練";s:3:"練";s:3:"聯";s:3:"聯";s:3:"輦";s:3:"輦";s:3:"蓮";s:3:"蓮";s:3:"連";s:3:"連";s:3:"鍊";s:3:"鍊";s:3:"列";s:3:"列";s:3:"劣";s:3:"劣";s:3:"咽";s:3:"咽";s:3:"烈";s:3:"烈";s:3:"裂";s:3:"裂";s:3:"說";s:3:"說";s:3:"廉";s:3:"廉";s:3:"念";s:3:"念";s:3:"捻";s:3:"捻";s:3:"殮";s:3:"殮";s:3:"簾";s:3:"簾";s:3:"獵";s:3:"獵";s:3:"令";s:3:"令";s:3:"囹";s:3:"囹";s:3:"寧";s:3:"寧";s:3:"嶺";s:3:"嶺";s:3:"怜";s:3:"怜";s:3:"玲";s:3:"玲";s:3:"瑩";s:3:"瑩";s:3:"羚";s:3:"羚";s:3:"聆";s:3:"聆";s:3:"鈴";s:3:"鈴";s:3:"零";s:3:"零";s:3:"靈";s:3:"靈";s:3:"領";s:3:"領";s:3:"例";s:3:"例";s:3:"禮";s:3:"禮";s:3:"醴";s:3:"醴";s:3:"隸";s:3:"隸";s:3:"惡";s:3:"惡";s:3:"了";s:3:"了";s:3:"僚";s:3:"僚";s:3:"寮";s:3:"寮";s:3:"尿";s:3:"尿";s:3:"料";s:3:"料";s:3:"樂";s:3:"樂";s:3:"燎";s:3:"燎";s:3:"療";s:3:"療";s:3:"蓼";s:3:"蓼";s:3:"遼";s:3:"遼";s:3:"龍";s:3:"龍";s:3:"暈";s:3:"暈";s:3:"阮";s:3:"阮";s:3:"劉";s:3:"劉";s:3:"杻";s:3:"杻";s:3:"柳";s:3:"柳";s:3:"流";s:3:"流";s:3:"溜";s:3:"溜";s:3:"琉";s:3:"琉";s:3:"留";s:3:"留";s:3:"硫";s:3:"硫";s:3:"紐";s:3:"紐";s:3:"類";s:3:"類";s:3:"六";s:3:"六";s:3:"戮";s:3:"戮";s:3:"陸";s:3:"陸";s:3:"倫";s:3:"倫";s:3:"崙";s:3:"崙";s:3:"淪";s:3:"淪";s:3:"輪";s:3:"輪";s:3:"律";s:3:"律";s:3:"慄";s:3:"慄";s:3:"栗";s:3:"栗";s:3:"率";s:3:"率";s:3:"隆";s:3:"隆";s:3:"利";s:3:"利";s:3:"吏";s:3:"吏";s:3:"履";s:3:"履";s:3:"易";s:3:"易";s:3:"李";s:3:"李";s:3:"梨";s:3:"梨";s:3:"泥";s:3:"泥";s:3:"理";s:3:"理";s:3:"痢";s:3:"痢";s:3:"罹";s:3:"罹";s:3:"裏";s:3:"裏";s:3:"裡";s:3:"裡";s:3:"里";s:3:"里";s:3:"離";s:3:"離";s:3:"匿";s:3:"匿";s:3:"溺";s:3:"溺";s:3:"吝";s:3:"吝";s:3:"燐";s:3:"燐";s:3:"璘";s:3:"璘";s:3:"藺";s:3:"藺";s:3:"隣";s:3:"隣";s:3:"鱗";s:3:"鱗";s:3:"麟";s:3:"麟";s:3:"林";s:3:"林";s:3:"淋";s:3:"淋";s:3:"臨";s:3:"臨";s:3:"立";s:3:"立";s:3:"笠";s:3:"笠";s:3:"粒";s:3:"粒";s:3:"狀";s:3:"狀";s:3:"炙";s:3:"炙";s:3:"識";s:3:"識";s:3:"什";s:3:"什";s:3:"茶";s:3:"茶";s:3:"刺";s:3:"刺";s:3:"切";s:3:"切";s:3:"度";s:3:"度";s:3:"拓";s:3:"拓";s:3:"糖";s:3:"糖";s:3:"宅";s:3:"宅";s:3:"洞";s:3:"洞";s:3:"暴";s:3:"暴";s:3:"輻";s:3:"輻";s:3:"行";s:3:"行";s:3:"降";s:3:"降";s:3:"見";s:3:"見";s:3:"廓";s:3:"廓";s:3:"兀";s:3:"兀";s:3:"嗀";s:3:"嗀";s:3:"塚";s:3:"塚";s:3:"晴";s:3:"晴";s:3:"凞";s:3:"凞";s:3:"猪";s:3:"猪";s:3:"益";s:3:"益";s:3:"礼";s:3:"礼";s:3:"神";s:3:"神";s:3:"祥";s:3:"祥";s:3:"福";s:3:"福";s:3:"靖";s:3:"靖";s:3:"精";s:3:"精";s:3:"羽";s:3:"羽";s:3:"蘒";s:3:"蘒";s:3:"諸";s:3:"諸";s:3:"逸";s:3:"逸";s:3:"都";s:3:"都";s:3:"飯";s:3:"飯";s:3:"飼";s:3:"飼";s:3:"館";s:3:"館";s:3:"鶴";s:3:"鶴";s:3:"侮";s:3:"侮";s:3:"僧";s:3:"僧";s:3:"免";s:3:"免";s:3:"勉";s:3:"勉";s:3:"勤";s:3:"勤";s:3:"卑";s:3:"卑";s:3:"喝";s:3:"喝";s:3:"嘆";s:3:"嘆";s:3:"器";s:3:"器";s:3:"塀";s:3:"塀";s:3:"墨";s:3:"墨";s:3:"層";s:3:"層";s:3:"屮";s:3:"屮";s:3:"悔";s:3:"悔";s:3:"慨";s:3:"慨";s:3:"憎";s:3:"憎";s:3:"懲";s:3:"懲";s:3:"敏";s:3:"敏";s:3:"既";s:3:"既";s:3:"暑";s:3:"暑";s:3:"梅";s:3:"梅";s:3:"海";s:3:"海";s:3:"渚";s:3:"渚";s:3:"漢";s:3:"漢";s:3:"煮";s:3:"煮";s:3:"爫";s:3:"爫";s:3:"琢";s:3:"琢";s:3:"碑";s:3:"碑";s:3:"社";s:3:"社";s:3:"祉";s:3:"祉";s:3:"祈";s:3:"祈";s:3:"祐";s:3:"祐";s:3:"祖";s:3:"祖";s:3:"祝";s:3:"祝";s:3:"禍";s:3:"禍";s:3:"禎";s:3:"禎";s:3:"穀";s:3:"穀";s:3:"突";s:3:"突";s:3:"節";s:3:"節";s:3:"練";s:3:"練";s:3:"縉";s:3:"縉";s:3:"繁";s:3:"繁";s:3:"署";s:3:"署";s:3:"者";s:3:"者";s:3:"臭";s:3:"臭";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"著";s:3:"著";s:3:"褐";s:3:"褐";s:3:"視";s:3:"視";s:3:"謁";s:3:"謁";s:3:"謹";s:3:"謹";s:3:"賓";s:3:"賓";s:3:"贈";s:3:"贈";s:3:"辶";s:3:"辶";s:3:"逸";s:3:"逸";s:3:"難";s:3:"難";s:3:"響";s:3:"響";s:3:"頻";s:3:"頻";s:3:"並";s:3:"並";s:3:"况";s:3:"况";s:3:"全";s:3:"全";s:3:"侀";s:3:"侀";s:3:"充";s:3:"充";s:3:"冀";s:3:"冀";s:3:"勇";s:3:"勇";s:3:"勺";s:3:"勺";s:3:"喝";s:3:"喝";s:3:"啕";s:3:"啕";s:3:"喙";s:3:"喙";s:3:"嗢";s:3:"嗢";s:3:"塚";s:3:"塚";s:3:"墳";s:3:"墳";s:3:"奄";s:3:"奄";s:3:"奔";s:3:"奔";s:3:"婢";s:3:"婢";s:3:"嬨";s:3:"嬨";s:3:"廒";s:3:"廒";s:3:"廙";s:3:"廙";s:3:"彩";s:3:"彩";s:3:"徭";s:3:"徭";s:3:"惘";s:3:"惘";s:3:"慎";s:3:"慎";s:3:"愈";s:3:"愈";s:3:"憎";s:3:"憎";s:3:"慠";s:3:"慠";s:3:"懲";s:3:"懲";s:3:"戴";s:3:"戴";s:3:"揄";s:3:"揄";s:3:"搜";s:3:"搜";s:3:"摒";s:3:"摒";s:3:"敖";s:3:"敖";s:3:"晴";s:3:"晴";s:3:"朗";s:3:"朗";s:3:"望";s:3:"望";s:3:"杖";s:3:"杖";s:3:"歹";s:3:"歹";s:3:"殺";s:3:"殺";s:3:"流";s:3:"流";s:3:"滛";s:3:"滛";s:3:"滋";s:3:"滋";s:3:"漢";s:3:"漢";s:3:"瀞";s:3:"瀞";s:3:"煮";s:3:"煮";s:3:"瞧";s:3:"瞧";s:3:"爵";s:3:"爵";s:3:"犯";s:3:"犯";s:3:"猪";s:3:"猪";s:3:"瑱";s:3:"瑱";s:3:"甆";s:3:"甆";s:3:"画";s:3:"画";s:3:"瘝";s:3:"瘝";s:3:"瘟";s:3:"瘟";s:3:"益";s:3:"益";s:3:"盛";s:3:"盛";s:3:"直";s:3:"直";s:3:"睊";s:3:"睊";s:3:"着";s:3:"着";s:3:"磌";s:3:"磌";s:3:"窱";s:3:"窱";s:3:"節";s:3:"節";s:3:"类";s:3:"类";s:3:"絛";s:3:"絛";s:3:"練";s:3:"練";s:3:"缾";s:3:"缾";s:3:"者";s:3:"者";s:3:"荒";s:3:"荒";s:3:"華";s:3:"華";s:3:"蝹";s:3:"蝹";s:3:"襁";s:3:"襁";s:3:"覆";s:3:"覆";s:3:"視";s:3:"視";s:3:"調";s:3:"調";s:3:"諸";s:3:"諸";s:3:"請";s:3:"請";s:3:"謁";s:3:"謁";s:3:"諾";s:3:"諾";s:3:"諭";s:3:"諭";s:3:"謹";s:3:"謹";s:3:"變";s:3:"變";s:3:"贈";s:3:"贈";s:3:"輸";s:3:"輸";s:3:"遲";s:3:"遲";s:3:"醙";s:3:"醙";s:3:"鉶";s:3:"鉶";s:3:"陼";s:3:"陼";s:3:"難";s:3:"難";s:3:"靖";s:3:"靖";s:3:"韛";s:3:"韛";s:3:"響";s:3:"響";s:3:"頋";s:3:"頋";s:3:"頻";s:3:"頻";s:3:"鬒";s:3:"鬒";s:3:"龜";s:3:"龜";s:3:"𢡊";s:4:"𢡊";s:3:"𢡄";s:4:"𢡄";s:3:"𣏕";s:4:"𣏕";s:3:"㮝";s:3:"㮝";s:3:"䀘";s:3:"䀘";s:3:"䀹";s:3:"䀹";s:3:"𥉉";s:4:"𥉉";s:3:"𥳐";s:4:"𥳐";s:3:"𧻓";s:4:"𧻓";s:3:"齃";s:3:"齃";s:3:"龎";s:3:"龎";s:3:"ff";s:2:"ff";s:3:"fi";s:2:"fi";s:3:"fl";s:2:"fl";s:3:"ffi";s:3:"ffi";s:3:"ffl";s:3:"ffl";s:3:"ſt";s:2:"st";s:3:"st";s:2:"st";s:3:"ﬓ";s:4:"մն";s:3:"ﬔ";s:4:"մե";s:3:"ﬕ";s:4:"մի";s:3:"ﬖ";s:4:"վն";s:3:"ﬗ";s:4:"մխ";s:3:"יִ";s:4:"יִ";s:3:"ײַ";s:4:"ײַ";s:3:"ﬠ";s:2:"ע";s:3:"ﬡ";s:2:"א";s:3:"ﬢ";s:2:"ד";s:3:"ﬣ";s:2:"ה";s:3:"ﬤ";s:2:"כ";s:3:"ﬥ";s:2:"ל";s:3:"ﬦ";s:2:"ם";s:3:"ﬧ";s:2:"ר";s:3:"ﬨ";s:2:"ת";s:3:"﬩";s:1:"+";s:3:"שׁ";s:4:"שׁ";s:3:"שׂ";s:4:"שׂ";s:3:"שּׁ";s:6:"שּׁ";s:3:"שּׂ";s:6:"שּׂ";s:3:"אַ";s:4:"אַ";s:3:"אָ";s:4:"אָ";s:3:"אּ";s:4:"אּ";s:3:"בּ";s:4:"בּ";s:3:"גּ";s:4:"גּ";s:3:"דּ";s:4:"דּ";s:3:"הּ";s:4:"הּ";s:3:"וּ";s:4:"וּ";s:3:"זּ";s:4:"זּ";s:3:"טּ";s:4:"טּ";s:3:"יּ";s:4:"יּ";s:3:"ךּ";s:4:"ךּ";s:3:"כּ";s:4:"כּ";s:3:"לּ";s:4:"לּ";s:3:"מּ";s:4:"מּ";s:3:"נּ";s:4:"נּ";s:3:"סּ";s:4:"סּ";s:3:"ףּ";s:4:"ףּ";s:3:"פּ";s:4:"פּ";s:3:"צּ";s:4:"צּ";s:3:"קּ";s:4:"קּ";s:3:"רּ";s:4:"רּ";s:3:"שּ";s:4:"שּ";s:3:"תּ";s:4:"תּ";s:3:"וֹ";s:4:"וֹ";s:3:"בֿ";s:4:"בֿ";s:3:"כֿ";s:4:"כֿ";s:3:"פֿ";s:4:"פֿ";s:3:"ﭏ";s:4:"אל";s:3:"ﭐ";s:2:"ٱ";s:3:"ﭑ";s:2:"ٱ";s:3:"ﭒ";s:2:"ٻ";s:3:"ﭓ";s:2:"ٻ";s:3:"ﭔ";s:2:"ٻ";s:3:"ﭕ";s:2:"ٻ";s:3:"ﭖ";s:2:"پ";s:3:"ﭗ";s:2:"پ";s:3:"ﭘ";s:2:"پ";s:3:"ﭙ";s:2:"پ";s:3:"ﭚ";s:2:"ڀ";s:3:"ﭛ";s:2:"ڀ";s:3:"ﭜ";s:2:"ڀ";s:3:"ﭝ";s:2:"ڀ";s:3:"ﭞ";s:2:"ٺ";s:3:"ﭟ";s:2:"ٺ";s:3:"ﭠ";s:2:"ٺ";s:3:"ﭡ";s:2:"ٺ";s:3:"ﭢ";s:2:"ٿ";s:3:"ﭣ";s:2:"ٿ";s:3:"ﭤ";s:2:"ٿ";s:3:"ﭥ";s:2:"ٿ";s:3:"ﭦ";s:2:"ٹ";s:3:"ﭧ";s:2:"ٹ";s:3:"ﭨ";s:2:"ٹ";s:3:"ﭩ";s:2:"ٹ";s:3:"ﭪ";s:2:"ڤ";s:3:"ﭫ";s:2:"ڤ";s:3:"ﭬ";s:2:"ڤ";s:3:"ﭭ";s:2:"ڤ";s:3:"ﭮ";s:2:"ڦ";s:3:"ﭯ";s:2:"ڦ";s:3:"ﭰ";s:2:"ڦ";s:3:"ﭱ";s:2:"ڦ";s:3:"ﭲ";s:2:"ڄ";s:3:"ﭳ";s:2:"ڄ";s:3:"ﭴ";s:2:"ڄ";s:3:"ﭵ";s:2:"ڄ";s:3:"ﭶ";s:2:"ڃ";s:3:"ﭷ";s:2:"ڃ";s:3:"ﭸ";s:2:"ڃ";s:3:"ﭹ";s:2:"ڃ";s:3:"ﭺ";s:2:"چ";s:3:"ﭻ";s:2:"چ";s:3:"ﭼ";s:2:"چ";s:3:"ﭽ";s:2:"چ";s:3:"ﭾ";s:2:"ڇ";s:3:"ﭿ";s:2:"ڇ";s:3:"ﮀ";s:2:"ڇ";s:3:"ﮁ";s:2:"ڇ";s:3:"ﮂ";s:2:"ڍ";s:3:"ﮃ";s:2:"ڍ";s:3:"ﮄ";s:2:"ڌ";s:3:"ﮅ";s:2:"ڌ";s:3:"ﮆ";s:2:"ڎ";s:3:"ﮇ";s:2:"ڎ";s:3:"ﮈ";s:2:"ڈ";s:3:"ﮉ";s:2:"ڈ";s:3:"ﮊ";s:2:"ژ";s:3:"ﮋ";s:2:"ژ";s:3:"ﮌ";s:2:"ڑ";s:3:"ﮍ";s:2:"ڑ";s:3:"ﮎ";s:2:"ک";s:3:"ﮏ";s:2:"ک";s:3:"ﮐ";s:2:"ک";s:3:"ﮑ";s:2:"ک";s:3:"ﮒ";s:2:"گ";s:3:"ﮓ";s:2:"گ";s:3:"ﮔ";s:2:"گ";s:3:"ﮕ";s:2:"گ";s:3:"ﮖ";s:2:"ڳ";s:3:"ﮗ";s:2:"ڳ";s:3:"ﮘ";s:2:"ڳ";s:3:"ﮙ";s:2:"ڳ";s:3:"ﮚ";s:2:"ڱ";s:3:"ﮛ";s:2:"ڱ";s:3:"ﮜ";s:2:"ڱ";s:3:"ﮝ";s:2:"ڱ";s:3:"ﮞ";s:2:"ں";s:3:"ﮟ";s:2:"ں";s:3:"ﮠ";s:2:"ڻ";s:3:"ﮡ";s:2:"ڻ";s:3:"ﮢ";s:2:"ڻ";s:3:"ﮣ";s:2:"ڻ";s:3:"ﮤ";s:4:"ۀ";s:3:"ﮥ";s:4:"ۀ";s:3:"ﮦ";s:2:"ہ";s:3:"ﮧ";s:2:"ہ";s:3:"ﮨ";s:2:"ہ";s:3:"ﮩ";s:2:"ہ";s:3:"ﮪ";s:2:"ھ";s:3:"ﮫ";s:2:"ھ";s:3:"ﮬ";s:2:"ھ";s:3:"ﮭ";s:2:"ھ";s:3:"ﮮ";s:2:"ے";s:3:"ﮯ";s:2:"ے";s:3:"ﮰ";s:4:"ۓ";s:3:"ﮱ";s:4:"ۓ";s:3:"ﯓ";s:2:"ڭ";s:3:"ﯔ";s:2:"ڭ";s:3:"ﯕ";s:2:"ڭ";s:3:"ﯖ";s:2:"ڭ";s:3:"ﯗ";s:2:"ۇ";s:3:"ﯘ";s:2:"ۇ";s:3:"ﯙ";s:2:"ۆ";s:3:"ﯚ";s:2:"ۆ";s:3:"ﯛ";s:2:"ۈ";s:3:"ﯜ";s:2:"ۈ";s:3:"ﯝ";s:4:"ۇٴ";s:3:"ﯞ";s:2:"ۋ";s:3:"ﯟ";s:2:"ۋ";s:3:"ﯠ";s:2:"ۅ";s:3:"ﯡ";s:2:"ۅ";s:3:"ﯢ";s:2:"ۉ";s:3:"ﯣ";s:2:"ۉ";s:3:"ﯤ";s:2:"ې";s:3:"ﯥ";s:2:"ې";s:3:"ﯦ";s:2:"ې";s:3:"ﯧ";s:2:"ې";s:3:"ﯨ";s:2:"ى";s:3:"ﯩ";s:2:"ى";s:3:"ﯪ";s:6:"ئا";s:3:"ﯫ";s:6:"ئا";s:3:"ﯬ";s:6:"ئە";s:3:"ﯭ";s:6:"ئە";s:3:"ﯮ";s:6:"ئو";s:3:"ﯯ";s:6:"ئو";s:3:"ﯰ";s:6:"ئۇ";s:3:"ﯱ";s:6:"ئۇ";s:3:"ﯲ";s:6:"ئۆ";s:3:"ﯳ";s:6:"ئۆ";s:3:"ﯴ";s:6:"ئۈ";s:3:"ﯵ";s:6:"ئۈ";s:3:"ﯶ";s:6:"ئې";s:3:"ﯷ";s:6:"ئې";s:3:"ﯸ";s:6:"ئې";s:3:"ﯹ";s:6:"ئى";s:3:"ﯺ";s:6:"ئى";s:3:"ﯻ";s:6:"ئى";s:3:"ﯼ";s:2:"ی";s:3:"ﯽ";s:2:"ی";s:3:"ﯾ";s:2:"ی";s:3:"ﯿ";s:2:"ی";s:3:"ﰀ";s:6:"ئج";s:3:"ﰁ";s:6:"ئح";s:3:"ﰂ";s:6:"ئم";s:3:"ﰃ";s:6:"ئى";s:3:"ﰄ";s:6:"ئي";s:3:"ﰅ";s:4:"بج";s:3:"ﰆ";s:4:"بح";s:3:"ﰇ";s:4:"بخ";s:3:"ﰈ";s:4:"بم";s:3:"ﰉ";s:4:"بى";s:3:"ﰊ";s:4:"بي";s:3:"ﰋ";s:4:"تج";s:3:"ﰌ";s:4:"تح";s:3:"ﰍ";s:4:"تخ";s:3:"ﰎ";s:4:"تم";s:3:"ﰏ";s:4:"تى";s:3:"ﰐ";s:4:"تي";s:3:"ﰑ";s:4:"ثج";s:3:"ﰒ";s:4:"ثم";s:3:"ﰓ";s:4:"ثى";s:3:"ﰔ";s:4:"ثي";s:3:"ﰕ";s:4:"جح";s:3:"ﰖ";s:4:"جم";s:3:"ﰗ";s:4:"حج";s:3:"ﰘ";s:4:"حم";s:3:"ﰙ";s:4:"خج";s:3:"ﰚ";s:4:"خح";s:3:"ﰛ";s:4:"خم";s:3:"ﰜ";s:4:"سج";s:3:"ﰝ";s:4:"سح";s:3:"ﰞ";s:4:"سخ";s:3:"ﰟ";s:4:"سم";s:3:"ﰠ";s:4:"صح";s:3:"ﰡ";s:4:"صم";s:3:"ﰢ";s:4:"ضج";s:3:"ﰣ";s:4:"ضح";s:3:"ﰤ";s:4:"ضخ";s:3:"ﰥ";s:4:"ضم";s:3:"ﰦ";s:4:"طح";s:3:"ﰧ";s:4:"طم";s:3:"ﰨ";s:4:"ظم";s:3:"ﰩ";s:4:"عج";s:3:"ﰪ";s:4:"عم";s:3:"ﰫ";s:4:"غج";s:3:"ﰬ";s:4:"غم";s:3:"ﰭ";s:4:"فج";s:3:"ﰮ";s:4:"فح";s:3:"ﰯ";s:4:"فخ";s:3:"ﰰ";s:4:"فم";s:3:"ﰱ";s:4:"فى";s:3:"ﰲ";s:4:"في";s:3:"ﰳ";s:4:"قح";s:3:"ﰴ";s:4:"قم";s:3:"ﰵ";s:4:"قى";s:3:"ﰶ";s:4:"قي";s:3:"ﰷ";s:4:"كا";s:3:"ﰸ";s:4:"كج";s:3:"ﰹ";s:4:"كح";s:3:"ﰺ";s:4:"كخ";s:3:"ﰻ";s:4:"كل";s:3:"ﰼ";s:4:"كم";s:3:"ﰽ";s:4:"كى";s:3:"ﰾ";s:4:"كي";s:3:"ﰿ";s:4:"لج";s:3:"ﱀ";s:4:"لح";s:3:"ﱁ";s:4:"لخ";s:3:"ﱂ";s:4:"لم";s:3:"ﱃ";s:4:"لى";s:3:"ﱄ";s:4:"لي";s:3:"ﱅ";s:4:"مج";s:3:"ﱆ";s:4:"مح";s:3:"ﱇ";s:4:"مخ";s:3:"ﱈ";s:4:"مم";s:3:"ﱉ";s:4:"مى";s:3:"ﱊ";s:4:"مي";s:3:"ﱋ";s:4:"نج";s:3:"ﱌ";s:4:"نح";s:3:"ﱍ";s:4:"نخ";s:3:"ﱎ";s:4:"نم";s:3:"ﱏ";s:4:"نى";s:3:"ﱐ";s:4:"ني";s:3:"ﱑ";s:4:"هج";s:3:"ﱒ";s:4:"هم";s:3:"ﱓ";s:4:"هى";s:3:"ﱔ";s:4:"هي";s:3:"ﱕ";s:4:"يج";s:3:"ﱖ";s:4:"يح";s:3:"ﱗ";s:4:"يخ";s:3:"ﱘ";s:4:"يم";s:3:"ﱙ";s:4:"يى";s:3:"ﱚ";s:4:"يي";s:3:"ﱛ";s:4:"ذٰ";s:3:"ﱜ";s:4:"رٰ";s:3:"ﱝ";s:4:"ىٰ";s:3:"ﱞ";s:5:" ٌّ";s:3:"ﱟ";s:5:" ٍّ";s:3:"ﱠ";s:5:" َّ";s:3:"ﱡ";s:5:" ُّ";s:3:"ﱢ";s:5:" ِّ";s:3:"ﱣ";s:5:" ّٰ";s:3:"ﱤ";s:6:"ئر";s:3:"ﱥ";s:6:"ئز";s:3:"ﱦ";s:6:"ئم";s:3:"ﱧ";s:6:"ئن";s:3:"ﱨ";s:6:"ئى";s:3:"ﱩ";s:6:"ئي";s:3:"ﱪ";s:4:"بر";s:3:"ﱫ";s:4:"بز";s:3:"ﱬ";s:4:"بم";s:3:"ﱭ";s:4:"بن";s:3:"ﱮ";s:4:"بى";s:3:"ﱯ";s:4:"بي";s:3:"ﱰ";s:4:"تر";s:3:"ﱱ";s:4:"تز";s:3:"ﱲ";s:4:"تم";s:3:"ﱳ";s:4:"تن";s:3:"ﱴ";s:4:"تى";s:3:"ﱵ";s:4:"تي";s:3:"ﱶ";s:4:"ثر";s:3:"ﱷ";s:4:"ثز";s:3:"ﱸ";s:4:"ثم";s:3:"ﱹ";s:4:"ثن";s:3:"ﱺ";s:4:"ثى";s:3:"ﱻ";s:4:"ثي";s:3:"ﱼ";s:4:"فى";s:3:"ﱽ";s:4:"في";s:3:"ﱾ";s:4:"قى";s:3:"ﱿ";s:4:"قي";s:3:"ﲀ";s:4:"كا";s:3:"ﲁ";s:4:"كل";s:3:"ﲂ";s:4:"كم";s:3:"ﲃ";s:4:"كى";s:3:"ﲄ";s:4:"كي";s:3:"ﲅ";s:4:"لم";s:3:"ﲆ";s:4:"لى";s:3:"ﲇ";s:4:"لي";s:3:"ﲈ";s:4:"ما";s:3:"ﲉ";s:4:"مم";s:3:"ﲊ";s:4:"نر";s:3:"ﲋ";s:4:"نز";s:3:"ﲌ";s:4:"نم";s:3:"ﲍ";s:4:"نن";s:3:"ﲎ";s:4:"نى";s:3:"ﲏ";s:4:"ني";s:3:"ﲐ";s:4:"ىٰ";s:3:"ﲑ";s:4:"ير";s:3:"ﲒ";s:4:"يز";s:3:"ﲓ";s:4:"يم";s:3:"ﲔ";s:4:"ين";s:3:"ﲕ";s:4:"يى";s:3:"ﲖ";s:4:"يي";s:3:"ﲗ";s:6:"ئج";s:3:"ﲘ";s:6:"ئح";s:3:"ﲙ";s:6:"ئخ";s:3:"ﲚ";s:6:"ئم";s:3:"ﲛ";s:6:"ئه";s:3:"ﲜ";s:4:"بج";s:3:"ﲝ";s:4:"بح";s:3:"ﲞ";s:4:"بخ";s:3:"ﲟ";s:4:"بم";s:3:"ﲠ";s:4:"به";s:3:"ﲡ";s:4:"تج";s:3:"ﲢ";s:4:"تح";s:3:"ﲣ";s:4:"تخ";s:3:"ﲤ";s:4:"تم";s:3:"ﲥ";s:4:"ته";s:3:"ﲦ";s:4:"ثم";s:3:"ﲧ";s:4:"جح";s:3:"ﲨ";s:4:"جم";s:3:"ﲩ";s:4:"حج";s:3:"ﲪ";s:4:"حم";s:3:"ﲫ";s:4:"خج";s:3:"ﲬ";s:4:"خم";s:3:"ﲭ";s:4:"سج";s:3:"ﲮ";s:4:"سح";s:3:"ﲯ";s:4:"سخ";s:3:"ﲰ";s:4:"سم";s:3:"ﲱ";s:4:"صح";s:3:"ﲲ";s:4:"صخ";s:3:"ﲳ";s:4:"صم";s:3:"ﲴ";s:4:"ضج";s:3:"ﲵ";s:4:"ضح";s:3:"ﲶ";s:4:"ضخ";s:3:"ﲷ";s:4:"ضم";s:3:"ﲸ";s:4:"طح";s:3:"ﲹ";s:4:"ظم";s:3:"ﲺ";s:4:"عج";s:3:"ﲻ";s:4:"عم";s:3:"ﲼ";s:4:"غج";s:3:"ﲽ";s:4:"غم";s:3:"ﲾ";s:4:"فج";s:3:"ﲿ";s:4:"فح";s:3:"ﳀ";s:4:"فخ";s:3:"ﳁ";s:4:"فم";s:3:"ﳂ";s:4:"قح";s:3:"ﳃ";s:4:"قم";s:3:"ﳄ";s:4:"كج";s:3:"ﳅ";s:4:"كح";s:3:"ﳆ";s:4:"كخ";s:3:"ﳇ";s:4:"كل";s:3:"ﳈ";s:4:"كم";s:3:"ﳉ";s:4:"لج";s:3:"ﳊ";s:4:"لح";s:3:"ﳋ";s:4:"لخ";s:3:"ﳌ";s:4:"لم";s:3:"ﳍ";s:4:"له";s:3:"ﳎ";s:4:"مج";s:3:"ﳏ";s:4:"مح";s:3:"ﳐ";s:4:"مخ";s:3:"ﳑ";s:4:"مم";s:3:"ﳒ";s:4:"نج";s:3:"ﳓ";s:4:"نح";s:3:"ﳔ";s:4:"نخ";s:3:"ﳕ";s:4:"نم";s:3:"ﳖ";s:4:"نه";s:3:"ﳗ";s:4:"هج";s:3:"ﳘ";s:4:"هم";s:3:"ﳙ";s:4:"هٰ";s:3:"ﳚ";s:4:"يج";s:3:"ﳛ";s:4:"يح";s:3:"ﳜ";s:4:"يخ";s:3:"ﳝ";s:4:"يم";s:3:"ﳞ";s:4:"يه";s:3:"ﳟ";s:6:"ئم";s:3:"ﳠ";s:6:"ئه";s:3:"ﳡ";s:4:"بم";s:3:"ﳢ";s:4:"به";s:3:"ﳣ";s:4:"تم";s:3:"ﳤ";s:4:"ته";s:3:"ﳥ";s:4:"ثم";s:3:"ﳦ";s:4:"ثه";s:3:"ﳧ";s:4:"سم";s:3:"ﳨ";s:4:"سه";s:3:"ﳩ";s:4:"شم";s:3:"ﳪ";s:4:"شه";s:3:"ﳫ";s:4:"كل";s:3:"ﳬ";s:4:"كم";s:3:"ﳭ";s:4:"لم";s:3:"ﳮ";s:4:"نم";s:3:"ﳯ";s:4:"نه";s:3:"ﳰ";s:4:"يم";s:3:"ﳱ";s:4:"يه";s:3:"ﳲ";s:6:"ـَّ";s:3:"ﳳ";s:6:"ـُّ";s:3:"ﳴ";s:6:"ـِّ";s:3:"ﳵ";s:4:"طى";s:3:"ﳶ";s:4:"طي";s:3:"ﳷ";s:4:"عى";s:3:"ﳸ";s:4:"عي";s:3:"ﳹ";s:4:"غى";s:3:"ﳺ";s:4:"غي";s:3:"ﳻ";s:4:"سى";s:3:"ﳼ";s:4:"سي";s:3:"ﳽ";s:4:"شى";s:3:"ﳾ";s:4:"شي";s:3:"ﳿ";s:4:"حى";s:3:"ﴀ";s:4:"حي";s:3:"ﴁ";s:4:"جى";s:3:"ﴂ";s:4:"جي";s:3:"ﴃ";s:4:"خى";s:3:"ﴄ";s:4:"خي";s:3:"ﴅ";s:4:"صى";s:3:"ﴆ";s:4:"صي";s:3:"ﴇ";s:4:"ضى";s:3:"ﴈ";s:4:"ضي";s:3:"ﴉ";s:4:"شج";s:3:"ﴊ";s:4:"شح";s:3:"ﴋ";s:4:"شخ";s:3:"ﴌ";s:4:"شم";s:3:"ﴍ";s:4:"شر";s:3:"ﴎ";s:4:"سر";s:3:"ﴏ";s:4:"صر";s:3:"ﴐ";s:4:"ضر";s:3:"ﴑ";s:4:"طى";s:3:"ﴒ";s:4:"طي";s:3:"ﴓ";s:4:"عى";s:3:"ﴔ";s:4:"عي";s:3:"ﴕ";s:4:"غى";s:3:"ﴖ";s:4:"غي";s:3:"ﴗ";s:4:"سى";s:3:"ﴘ";s:4:"سي";s:3:"ﴙ";s:4:"شى";s:3:"ﴚ";s:4:"شي";s:3:"ﴛ";s:4:"حى";s:3:"ﴜ";s:4:"حي";s:3:"ﴝ";s:4:"جى";s:3:"ﴞ";s:4:"جي";s:3:"ﴟ";s:4:"خى";s:3:"ﴠ";s:4:"خي";s:3:"ﴡ";s:4:"صى";s:3:"ﴢ";s:4:"صي";s:3:"ﴣ";s:4:"ضى";s:3:"ﴤ";s:4:"ضي";s:3:"ﴥ";s:4:"شج";s:3:"ﴦ";s:4:"شح";s:3:"ﴧ";s:4:"شخ";s:3:"ﴨ";s:4:"شم";s:3:"ﴩ";s:4:"شر";s:3:"ﴪ";s:4:"سر";s:3:"ﴫ";s:4:"صر";s:3:"ﴬ";s:4:"ضر";s:3:"ﴭ";s:4:"شج";s:3:"ﴮ";s:4:"شح";s:3:"ﴯ";s:4:"شخ";s:3:"ﴰ";s:4:"شم";s:3:"ﴱ";s:4:"سه";s:3:"ﴲ";s:4:"شه";s:3:"ﴳ";s:4:"طم";s:3:"ﴴ";s:4:"سج";s:3:"ﴵ";s:4:"سح";s:3:"ﴶ";s:4:"سخ";s:3:"ﴷ";s:4:"شج";s:3:"ﴸ";s:4:"شح";s:3:"ﴹ";s:4:"شخ";s:3:"ﴺ";s:4:"طم";s:3:"ﴻ";s:4:"ظم";s:3:"ﴼ";s:4:"اً";s:3:"ﴽ";s:4:"اً";s:3:"ﵐ";s:6:"تجم";s:3:"ﵑ";s:6:"تحج";s:3:"ﵒ";s:6:"تحج";s:3:"ﵓ";s:6:"تحم";s:3:"ﵔ";s:6:"تخم";s:3:"ﵕ";s:6:"تمج";s:3:"ﵖ";s:6:"تمح";s:3:"ﵗ";s:6:"تمخ";s:3:"ﵘ";s:6:"جمح";s:3:"ﵙ";s:6:"جمح";s:3:"ﵚ";s:6:"حمي";s:3:"ﵛ";s:6:"حمى";s:3:"ﵜ";s:6:"سحج";s:3:"ﵝ";s:6:"سجح";s:3:"ﵞ";s:6:"سجى";s:3:"ﵟ";s:6:"سمح";s:3:"ﵠ";s:6:"سمح";s:3:"ﵡ";s:6:"سمج";s:3:"ﵢ";s:6:"سمم";s:3:"ﵣ";s:6:"سمم";s:3:"ﵤ";s:6:"صحح";s:3:"ﵥ";s:6:"صحح";s:3:"ﵦ";s:6:"صمم";s:3:"ﵧ";s:6:"شحم";s:3:"ﵨ";s:6:"شحم";s:3:"ﵩ";s:6:"شجي";s:3:"ﵪ";s:6:"شمخ";s:3:"ﵫ";s:6:"شمخ";s:3:"ﵬ";s:6:"شمم";s:3:"ﵭ";s:6:"شمم";s:3:"ﵮ";s:6:"ضحى";s:3:"ﵯ";s:6:"ضخم";s:3:"ﵰ";s:6:"ضخم";s:3:"ﵱ";s:6:"طمح";s:3:"ﵲ";s:6:"طمح";s:3:"ﵳ";s:6:"طمم";s:3:"ﵴ";s:6:"طمي";s:3:"ﵵ";s:6:"عجم";s:3:"ﵶ";s:6:"عمم";s:3:"ﵷ";s:6:"عمم";s:3:"ﵸ";s:6:"عمى";s:3:"ﵹ";s:6:"غمم";s:3:"ﵺ";s:6:"غمي";s:3:"ﵻ";s:6:"غمى";s:3:"ﵼ";s:6:"فخم";s:3:"ﵽ";s:6:"فخم";s:3:"ﵾ";s:6:"قمح";s:3:"ﵿ";s:6:"قمم";s:3:"ﶀ";s:6:"لحم";s:3:"ﶁ";s:6:"لحي";s:3:"ﶂ";s:6:"لحى";s:3:"ﶃ";s:6:"لجج";s:3:"ﶄ";s:6:"لجج";s:3:"ﶅ";s:6:"لخم";s:3:"ﶆ";s:6:"لخم";s:3:"ﶇ";s:6:"لمح";s:3:"ﶈ";s:6:"لمح";s:3:"ﶉ";s:6:"محج";s:3:"ﶊ";s:6:"محم";s:3:"ﶋ";s:6:"محي";s:3:"ﶌ";s:6:"مجح";s:3:"ﶍ";s:6:"مجم";s:3:"ﶎ";s:6:"مخج";s:3:"ﶏ";s:6:"مخم";s:3:"ﶒ";s:6:"مجخ";s:3:"ﶓ";s:6:"همج";s:3:"ﶔ";s:6:"همم";s:3:"ﶕ";s:6:"نحم";s:3:"ﶖ";s:6:"نحى";s:3:"ﶗ";s:6:"نجم";s:3:"ﶘ";s:6:"نجم";s:3:"ﶙ";s:6:"نجى";s:3:"ﶚ";s:6:"نمي";s:3:"ﶛ";s:6:"نمى";s:3:"ﶜ";s:6:"يمم";s:3:"ﶝ";s:6:"يمم";s:3:"ﶞ";s:6:"بخي";s:3:"ﶟ";s:6:"تجي";s:3:"ﶠ";s:6:"تجى";s:3:"ﶡ";s:6:"تخي";s:3:"ﶢ";s:6:"تخى";s:3:"ﶣ";s:6:"تمي";s:3:"ﶤ";s:6:"تمى";s:3:"ﶥ";s:6:"جمي";s:3:"ﶦ";s:6:"جحى";s:3:"ﶧ";s:6:"جمى";s:3:"ﶨ";s:6:"سخى";s:3:"ﶩ";s:6:"صحي";s:3:"ﶪ";s:6:"شحي";s:3:"ﶫ";s:6:"ضحي";s:3:"ﶬ";s:6:"لجي";s:3:"ﶭ";s:6:"لمي";s:3:"ﶮ";s:6:"يحي";s:3:"ﶯ";s:6:"يجي";s:3:"ﶰ";s:6:"يمي";s:3:"ﶱ";s:6:"ممي";s:3:"ﶲ";s:6:"قمي";s:3:"ﶳ";s:6:"نحي";s:3:"ﶴ";s:6:"قمح";s:3:"ﶵ";s:6:"لحم";s:3:"ﶶ";s:6:"عمي";s:3:"ﶷ";s:6:"كمي";s:3:"ﶸ";s:6:"نجح";s:3:"ﶹ";s:6:"مخي";s:3:"ﶺ";s:6:"لجم";s:3:"ﶻ";s:6:"كمم";s:3:"ﶼ";s:6:"لجم";s:3:"ﶽ";s:6:"نجح";s:3:"ﶾ";s:6:"جحي";s:3:"ﶿ";s:6:"حجي";s:3:"ﷀ";s:6:"مجي";s:3:"ﷁ";s:6:"فمي";s:3:"ﷂ";s:6:"بحي";s:3:"ﷃ";s:6:"كمم";s:3:"ﷄ";s:6:"عجم";s:3:"ﷅ";s:6:"صمم";s:3:"ﷆ";s:6:"سخي";s:3:"ﷇ";s:6:"نجي";s:3:"ﷰ";s:6:"صلے";s:3:"ﷱ";s:6:"قلے";s:3:"ﷲ";s:8:"الله";s:3:"ﷳ";s:8:"اكبر";s:3:"ﷴ";s:8:"محمد";s:3:"ﷵ";s:8:"صلعم";s:3:"ﷶ";s:8:"رسول";s:3:"ﷷ";s:8:"عليه";s:3:"ﷸ";s:8:"وسلم";s:3:"ﷹ";s:6:"صلى";s:3:"ﷺ";s:33:"صلى الله عليه وسلم";s:3:"ﷻ";s:15:"جل جلاله";s:3:"﷼";s:8:"ریال";s:3:"︐";s:1:",";s:3:"︑";s:3:"、";s:3:"︒";s:3:"。";s:3:"︓";s:1:":";s:3:"︔";s:1:";";s:3:"︕";s:1:"!";s:3:"︖";s:1:"?";s:3:"︗";s:3:"〖";s:3:"︘";s:3:"〗";s:3:"︙";s:3:"...";s:3:"︰";s:2:"..";s:3:"︱";s:3:"—";s:3:"︲";s:3:"–";s:3:"︳";s:1:"_";s:3:"︴";s:1:"_";s:3:"︵";s:1:"(";s:3:"︶";s:1:")";s:3:"︷";s:1:"{";s:3:"︸";s:1:"}";s:3:"︹";s:3:"〔";s:3:"︺";s:3:"〕";s:3:"︻";s:3:"【";s:3:"︼";s:3:"】";s:3:"︽";s:3:"《";s:3:"︾";s:3:"》";s:3:"︿";s:3:"〈";s:3:"﹀";s:3:"〉";s:3:"﹁";s:3:"「";s:3:"﹂";s:3:"」";s:3:"﹃";s:3:"『";s:3:"﹄";s:3:"』";s:3:"﹇";s:1:"[";s:3:"﹈";s:1:"]";s:3:"﹉";s:3:" ̅";s:3:"﹊";s:3:" ̅";s:3:"﹋";s:3:" ̅";s:3:"﹌";s:3:" ̅";s:3:"﹍";s:1:"_";s:3:"﹎";s:1:"_";s:3:"﹏";s:1:"_";s:3:"﹐";s:1:",";s:3:"﹑";s:3:"、";s:3:"﹒";s:1:".";s:3:"﹔";s:1:";";s:3:"﹕";s:1:":";s:3:"﹖";s:1:"?";s:3:"﹗";s:1:"!";s:3:"﹘";s:3:"—";s:3:"﹙";s:1:"(";s:3:"﹚";s:1:")";s:3:"﹛";s:1:"{";s:3:"﹜";s:1:"}";s:3:"﹝";s:3:"〔";s:3:"﹞";s:3:"〕";s:3:"﹟";s:1:"#";s:3:"﹠";s:1:"&";s:3:"﹡";s:1:"*";s:3:"﹢";s:1:"+";s:3:"﹣";s:1:"-";s:3:"﹤";s:1:"<";s:3:"﹥";s:1:">";s:3:"﹦";s:1:"=";s:3:"﹨";s:1:"\\";s:3:"﹩";s:1:"$";s:3:"﹪";s:1:"%";s:3:"﹫";s:1:"@";s:3:"ﹰ";s:3:" ً";s:3:"ﹱ";s:4:"ـً";s:3:"ﹲ";s:3:" ٌ";s:3:"ﹴ";s:3:" ٍ";s:3:"ﹶ";s:3:" َ";s:3:"ﹷ";s:4:"ـَ";s:3:"ﹸ";s:3:" ُ";s:3:"ﹹ";s:4:"ـُ";s:3:"ﹺ";s:3:" ِ";s:3:"ﹻ";s:4:"ـِ";s:3:"ﹼ";s:3:" ّ";s:3:"ﹽ";s:4:"ـّ";s:3:"ﹾ";s:3:" ْ";s:3:"ﹿ";s:4:"ـْ";s:3:"ﺀ";s:2:"ء";s:3:"ﺁ";s:4:"آ";s:3:"ﺂ";s:4:"آ";s:3:"ﺃ";s:4:"أ";s:3:"ﺄ";s:4:"أ";s:3:"ﺅ";s:4:"ؤ";s:3:"ﺆ";s:4:"ؤ";s:3:"ﺇ";s:4:"إ";s:3:"ﺈ";s:4:"إ";s:3:"ﺉ";s:4:"ئ";s:3:"ﺊ";s:4:"ئ";s:3:"ﺋ";s:4:"ئ";s:3:"ﺌ";s:4:"ئ";s:3:"ﺍ";s:2:"ا";s:3:"ﺎ";s:2:"ا";s:3:"ﺏ";s:2:"ب";s:3:"ﺐ";s:2:"ب";s:3:"ﺑ";s:2:"ب";s:3:"ﺒ";s:2:"ب";s:3:"ﺓ";s:2:"ة";s:3:"ﺔ";s:2:"ة";s:3:"ﺕ";s:2:"ت";s:3:"ﺖ";s:2:"ت";s:3:"ﺗ";s:2:"ت";s:3:"ﺘ";s:2:"ت";s:3:"ﺙ";s:2:"ث";s:3:"ﺚ";s:2:"ث";s:3:"ﺛ";s:2:"ث";s:3:"ﺜ";s:2:"ث";s:3:"ﺝ";s:2:"ج";s:3:"ﺞ";s:2:"ج";s:3:"ﺟ";s:2:"ج";s:3:"ﺠ";s:2:"ج";s:3:"ﺡ";s:2:"ح";s:3:"ﺢ";s:2:"ح";s:3:"ﺣ";s:2:"ح";s:3:"ﺤ";s:2:"ح";s:3:"ﺥ";s:2:"خ";s:3:"ﺦ";s:2:"خ";s:3:"ﺧ";s:2:"خ";s:3:"ﺨ";s:2:"خ";s:3:"ﺩ";s:2:"د";s:3:"ﺪ";s:2:"د";s:3:"ﺫ";s:2:"ذ";s:3:"ﺬ";s:2:"ذ";s:3:"ﺭ";s:2:"ر";s:3:"ﺮ";s:2:"ر";s:3:"ﺯ";s:2:"ز";s:3:"ﺰ";s:2:"ز";s:3:"ﺱ";s:2:"س";s:3:"ﺲ";s:2:"س";s:3:"ﺳ";s:2:"س";s:3:"ﺴ";s:2:"س";s:3:"ﺵ";s:2:"ش";s:3:"ﺶ";s:2:"ش";s:3:"ﺷ";s:2:"ش";s:3:"ﺸ";s:2:"ش";s:3:"ﺹ";s:2:"ص";s:3:"ﺺ";s:2:"ص";s:3:"ﺻ";s:2:"ص";s:3:"ﺼ";s:2:"ص";s:3:"ﺽ";s:2:"ض";s:3:"ﺾ";s:2:"ض";s:3:"ﺿ";s:2:"ض";s:3:"ﻀ";s:2:"ض";s:3:"ﻁ";s:2:"ط";s:3:"ﻂ";s:2:"ط";s:3:"ﻃ";s:2:"ط";s:3:"ﻄ";s:2:"ط";s:3:"ﻅ";s:2:"ظ";s:3:"ﻆ";s:2:"ظ";s:3:"ﻇ";s:2:"ظ";s:3:"ﻈ";s:2:"ظ";s:3:"ﻉ";s:2:"ع";s:3:"ﻊ";s:2:"ع";s:3:"ﻋ";s:2:"ع";s:3:"ﻌ";s:2:"ع";s:3:"ﻍ";s:2:"غ";s:3:"ﻎ";s:2:"غ";s:3:"ﻏ";s:2:"غ";s:3:"ﻐ";s:2:"غ";s:3:"ﻑ";s:2:"ف";s:3:"ﻒ";s:2:"ف";s:3:"ﻓ";s:2:"ف";s:3:"ﻔ";s:2:"ف";s:3:"ﻕ";s:2:"ق";s:3:"ﻖ";s:2:"ق";s:3:"ﻗ";s:2:"ق";s:3:"ﻘ";s:2:"ق";s:3:"ﻙ";s:2:"ك";s:3:"ﻚ";s:2:"ك";s:3:"ﻛ";s:2:"ك";s:3:"ﻜ";s:2:"ك";s:3:"ﻝ";s:2:"ل";s:3:"ﻞ";s:2:"ل";s:3:"ﻟ";s:2:"ل";s:3:"ﻠ";s:2:"ل";s:3:"ﻡ";s:2:"م";s:3:"ﻢ";s:2:"م";s:3:"ﻣ";s:2:"م";s:3:"ﻤ";s:2:"م";s:3:"ﻥ";s:2:"ن";s:3:"ﻦ";s:2:"ن";s:3:"ﻧ";s:2:"ن";s:3:"ﻨ";s:2:"ن";s:3:"ﻩ";s:2:"ه";s:3:"ﻪ";s:2:"ه";s:3:"ﻫ";s:2:"ه";s:3:"ﻬ";s:2:"ه";s:3:"ﻭ";s:2:"و";s:3:"ﻮ";s:2:"و";s:3:"ﻯ";s:2:"ى";s:3:"ﻰ";s:2:"ى";s:3:"ﻱ";s:2:"ي";s:3:"ﻲ";s:2:"ي";s:3:"ﻳ";s:2:"ي";s:3:"ﻴ";s:2:"ي";s:3:"ﻵ";s:6:"لآ";s:3:"ﻶ";s:6:"لآ";s:3:"ﻷ";s:6:"لأ";s:3:"ﻸ";s:6:"لأ";s:3:"ﻹ";s:6:"لإ";s:3:"ﻺ";s:6:"لإ";s:3:"ﻻ";s:4:"لا";s:3:"ﻼ";s:4:"لا";s:3:"!";s:1:"!";s:3:""";s:1:""";s:3:"#";s:1:"#";s:3:"$";s:1:"$";s:3:"%";s:1:"%";s:3:"&";s:1:"&";s:3:"'";s:1:"\'";s:3:"(";s:1:"(";s:3:")";s:1:")";s:3:"*";s:1:"*";s:3:"+";s:1:"+";s:3:",";s:1:",";s:3:"-";s:1:"-";s:3:".";s:1:".";s:3:"/";s:1:"/";s:3:"0";s:1:"0";s:3:"1";s:1:"1";s:3:"2";s:1:"2";s:3:"3";s:1:"3";s:3:"4";s:1:"4";s:3:"5";s:1:"5";s:3:"6";s:1:"6";s:3:"7";s:1:"7";s:3:"8";s:1:"8";s:3:"9";s:1:"9";s:3:":";s:1:":";s:3:";";s:1:";";s:3:"<";s:1:"<";s:3:"=";s:1:"=";s:3:">";s:1:">";s:3:"?";s:1:"?";s:3:"@";s:1:"@";s:3:"A";s:1:"A";s:3:"B";s:1:"B";s:3:"C";s:1:"C";s:3:"D";s:1:"D";s:3:"E";s:1:"E";s:3:"F";s:1:"F";s:3:"G";s:1:"G";s:3:"H";s:1:"H";s:3:"I";s:1:"I";s:3:"J";s:1:"J";s:3:"K";s:1:"K";s:3:"L";s:1:"L";s:3:"M";s:1:"M";s:3:"N";s:1:"N";s:3:"O";s:1:"O";s:3:"P";s:1:"P";s:3:"Q";s:1:"Q";s:3:"R";s:1:"R";s:3:"S";s:1:"S";s:3:"T";s:1:"T";s:3:"U";s:1:"U";s:3:"V";s:1:"V";s:3:"W";s:1:"W";s:3:"X";s:1:"X";s:3:"Y";s:1:"Y";s:3:"Z";s:1:"Z";s:3:"[";s:1:"[";s:3:"\";s:1:"\\";s:3:"]";s:1:"]";s:3:"^";s:1:"^";s:3:"_";s:1:"_";s:3:"`";s:1:"`";s:3:"a";s:1:"a";s:3:"b";s:1:"b";s:3:"c";s:1:"c";s:3:"d";s:1:"d";s:3:"e";s:1:"e";s:3:"f";s:1:"f";s:3:"g";s:1:"g";s:3:"h";s:1:"h";s:3:"i";s:1:"i";s:3:"j";s:1:"j";s:3:"k";s:1:"k";s:3:"l";s:1:"l";s:3:"m";s:1:"m";s:3:"n";s:1:"n";s:3:"o";s:1:"o";s:3:"p";s:1:"p";s:3:"q";s:1:"q";s:3:"r";s:1:"r";s:3:"s";s:1:"s";s:3:"t";s:1:"t";s:3:"u";s:1:"u";s:3:"v";s:1:"v";s:3:"w";s:1:"w";s:3:"x";s:1:"x";s:3:"y";s:1:"y";s:3:"z";s:1:"z";s:3:"{";s:1:"{";s:3:"|";s:1:"|";s:3:"}";s:1:"}";s:3:"~";s:1:"~";s:3:"⦅";s:3:"⦅";s:3:"⦆";s:3:"⦆";s:3:"。";s:3:"。";s:3:"「";s:3:"「";s:3:"」";s:3:"」";s:3:"、";s:3:"、";s:3:"・";s:3:"・";s:3:"ヲ";s:3:"ヲ";s:3:"ァ";s:3:"ァ";s:3:"ィ";s:3:"ィ";s:3:"ゥ";s:3:"ゥ";s:3:"ェ";s:3:"ェ";s:3:"ォ";s:3:"ォ";s:3:"ャ";s:3:"ャ";s:3:"ュ";s:3:"ュ";s:3:"ョ";s:3:"ョ";s:3:"ッ";s:3:"ッ";s:3:"ー";s:3:"ー";s:3:"ア";s:3:"ア";s:3:"イ";s:3:"イ";s:3:"ウ";s:3:"ウ";s:3:"エ";s:3:"エ";s:3:"オ";s:3:"オ";s:3:"カ";s:3:"カ";s:3:"キ";s:3:"キ";s:3:"ク";s:3:"ク";s:3:"ケ";s:3:"ケ";s:3:"コ";s:3:"コ";s:3:"サ";s:3:"サ";s:3:"シ";s:3:"シ";s:3:"ス";s:3:"ス";s:3:"セ";s:3:"セ";s:3:"ソ";s:3:"ソ";s:3:"タ";s:3:"タ";s:3:"チ";s:3:"チ";s:3:"ツ";s:3:"ツ";s:3:"テ";s:3:"テ";s:3:"ト";s:3:"ト";s:3:"ナ";s:3:"ナ";s:3:"ニ";s:3:"ニ";s:3:"ヌ";s:3:"ヌ";s:3:"ネ";s:3:"ネ";s:3:"ノ";s:3:"ノ";s:3:"ハ";s:3:"ハ";s:3:"ヒ";s:3:"ヒ";s:3:"フ";s:3:"フ";s:3:"ヘ";s:3:"ヘ";s:3:"ホ";s:3:"ホ";s:3:"マ";s:3:"マ";s:3:"ミ";s:3:"ミ";s:3:"ム";s:3:"ム";s:3:"メ";s:3:"メ";s:3:"モ";s:3:"モ";s:3:"ヤ";s:3:"ヤ";s:3:"ユ";s:3:"ユ";s:3:"ヨ";s:3:"ヨ";s:3:"ラ";s:3:"ラ";s:3:"リ";s:3:"リ";s:3:"ル";s:3:"ル";s:3:"レ";s:3:"レ";s:3:"ロ";s:3:"ロ";s:3:"ワ";s:3:"ワ";s:3:"ン";s:3:"ン";s:3:"゙";s:3:"゙";s:3:"゚";s:3:"゚";s:3:"ᅠ";s:3:"ᅠ";s:3:"ᄀ";s:3:"ᄀ";s:3:"ᄁ";s:3:"ᄁ";s:3:"ᆪ";s:3:"ᆪ";s:3:"ᄂ";s:3:"ᄂ";s:3:"ᆬ";s:3:"ᆬ";s:3:"ᆭ";s:3:"ᆭ";s:3:"ᄃ";s:3:"ᄃ";s:3:"ᄄ";s:3:"ᄄ";s:3:"ᄅ";s:3:"ᄅ";s:3:"ᆰ";s:3:"ᆰ";s:3:"ᆱ";s:3:"ᆱ";s:3:"ᆲ";s:3:"ᆲ";s:3:"ᆳ";s:3:"ᆳ";s:3:"ᆴ";s:3:"ᆴ";s:3:"ᆵ";s:3:"ᆵ";s:3:"ᄚ";s:3:"ᄚ";s:3:"ᄆ";s:3:"ᄆ";s:3:"ᄇ";s:3:"ᄇ";s:3:"ᄈ";s:3:"ᄈ";s:3:"ᄡ";s:3:"ᄡ";s:3:"ᄉ";s:3:"ᄉ";s:3:"ᄊ";s:3:"ᄊ";s:3:"ᄋ";s:3:"ᄋ";s:3:"ᄌ";s:3:"ᄌ";s:3:"ᄍ";s:3:"ᄍ";s:3:"ᄎ";s:3:"ᄎ";s:3:"ᄏ";s:3:"ᄏ";s:3:"ᄐ";s:3:"ᄐ";s:3:"ᄑ";s:3:"ᄑ";s:3:"ᄒ";s:3:"ᄒ";s:3:"ᅡ";s:3:"ᅡ";s:3:"ᅢ";s:3:"ᅢ";s:3:"ᅣ";s:3:"ᅣ";s:3:"ᅤ";s:3:"ᅤ";s:3:"ᅥ";s:3:"ᅥ";s:3:"ᅦ";s:3:"ᅦ";s:3:"ᅧ";s:3:"ᅧ";s:3:"ᅨ";s:3:"ᅨ";s:3:"ᅩ";s:3:"ᅩ";s:3:"ᅪ";s:3:"ᅪ";s:3:"ᅫ";s:3:"ᅫ";s:3:"ᅬ";s:3:"ᅬ";s:3:"ᅭ";s:3:"ᅭ";s:3:"ᅮ";s:3:"ᅮ";s:3:"ᅯ";s:3:"ᅯ";s:3:"ᅰ";s:3:"ᅰ";s:3:"ᅱ";s:3:"ᅱ";s:3:"ᅲ";s:3:"ᅲ";s:3:"ᅳ";s:3:"ᅳ";s:3:"ᅴ";s:3:"ᅴ";s:3:"ᅵ";s:3:"ᅵ";s:3:"¢";s:2:"¢";s:3:"£";s:2:"£";s:3:"¬";s:2:"¬";s:3:" ̄";s:3:" ̄";s:3:"¦";s:2:"¦";s:3:"¥";s:2:"¥";s:3:"₩";s:3:"₩";s:3:"│";s:3:"│";s:3:"←";s:3:"←";s:3:"↑";s:3:"↑";s:3:"→";s:3:"→";s:3:"↓";s:3:"↓";s:3:"■";s:3:"■";s:3:"○";s:3:"○";s:4:"𝅗𝅥";s:8:"𝅗𝅥";s:4:"𝅘𝅥";s:8:"𝅘𝅥";s:4:"𝅘𝅥𝅮";s:12:"𝅘𝅥𝅮";s:4:"𝅘𝅥𝅯";s:12:"𝅘𝅥𝅯";s:4:"𝅘𝅥𝅰";s:12:"𝅘𝅥𝅰";s:4:"𝅘𝅥𝅱";s:12:"𝅘𝅥𝅱";s:4:"𝅘𝅥𝅲";s:12:"𝅘𝅥𝅲";s:4:"𝆹𝅥";s:8:"𝆹𝅥";s:4:"𝆺𝅥";s:8:"𝆺𝅥";s:4:"𝆹𝅥𝅮";s:12:"𝆹𝅥𝅮";s:4:"𝆺𝅥𝅮";s:12:"𝆺𝅥𝅮";s:4:"𝆹𝅥𝅯";s:12:"𝆹𝅥𝅯";s:4:"𝆺𝅥𝅯";s:12:"𝆺𝅥𝅯";s:4:"𝐀";s:1:"A";s:4:"𝐁";s:1:"B";s:4:"𝐂";s:1:"C";s:4:"𝐃";s:1:"D";s:4:"𝐄";s:1:"E";s:4:"𝐅";s:1:"F";s:4:"𝐆";s:1:"G";s:4:"𝐇";s:1:"H";s:4:"𝐈";s:1:"I";s:4:"𝐉";s:1:"J";s:4:"𝐊";s:1:"K";s:4:"𝐋";s:1:"L";s:4:"𝐌";s:1:"M";s:4:"𝐍";s:1:"N";s:4:"𝐎";s:1:"O";s:4:"𝐏";s:1:"P";s:4:"𝐐";s:1:"Q";s:4:"𝐑";s:1:"R";s:4:"𝐒";s:1:"S";s:4:"𝐓";s:1:"T";s:4:"𝐔";s:1:"U";s:4:"𝐕";s:1:"V";s:4:"𝐖";s:1:"W";s:4:"𝐗";s:1:"X";s:4:"𝐘";s:1:"Y";s:4:"𝐙";s:1:"Z";s:4:"𝐚";s:1:"a";s:4:"𝐛";s:1:"b";s:4:"𝐜";s:1:"c";s:4:"𝐝";s:1:"d";s:4:"𝐞";s:1:"e";s:4:"𝐟";s:1:"f";s:4:"𝐠";s:1:"g";s:4:"𝐡";s:1:"h";s:4:"𝐢";s:1:"i";s:4:"𝐣";s:1:"j";s:4:"𝐤";s:1:"k";s:4:"𝐥";s:1:"l";s:4:"𝐦";s:1:"m";s:4:"𝐧";s:1:"n";s:4:"𝐨";s:1:"o";s:4:"𝐩";s:1:"p";s:4:"𝐪";s:1:"q";s:4:"𝐫";s:1:"r";s:4:"𝐬";s:1:"s";s:4:"𝐭";s:1:"t";s:4:"𝐮";s:1:"u";s:4:"𝐯";s:1:"v";s:4:"𝐰";s:1:"w";s:4:"𝐱";s:1:"x";s:4:"𝐲";s:1:"y";s:4:"𝐳";s:1:"z";s:4:"𝐴";s:1:"A";s:4:"𝐵";s:1:"B";s:4:"𝐶";s:1:"C";s:4:"𝐷";s:1:"D";s:4:"𝐸";s:1:"E";s:4:"𝐹";s:1:"F";s:4:"𝐺";s:1:"G";s:4:"𝐻";s:1:"H";s:4:"𝐼";s:1:"I";s:4:"𝐽";s:1:"J";s:4:"𝐾";s:1:"K";s:4:"𝐿";s:1:"L";s:4:"𝑀";s:1:"M";s:4:"𝑁";s:1:"N";s:4:"𝑂";s:1:"O";s:4:"𝑃";s:1:"P";s:4:"𝑄";s:1:"Q";s:4:"𝑅";s:1:"R";s:4:"𝑆";s:1:"S";s:4:"𝑇";s:1:"T";s:4:"𝑈";s:1:"U";s:4:"𝑉";s:1:"V";s:4:"𝑊";s:1:"W";s:4:"𝑋";s:1:"X";s:4:"𝑌";s:1:"Y";s:4:"𝑍";s:1:"Z";s:4:"𝑎";s:1:"a";s:4:"𝑏";s:1:"b";s:4:"𝑐";s:1:"c";s:4:"𝑑";s:1:"d";s:4:"𝑒";s:1:"e";s:4:"𝑓";s:1:"f";s:4:"𝑔";s:1:"g";s:4:"𝑖";s:1:"i";s:4:"𝑗";s:1:"j";s:4:"𝑘";s:1:"k";s:4:"𝑙";s:1:"l";s:4:"𝑚";s:1:"m";s:4:"𝑛";s:1:"n";s:4:"𝑜";s:1:"o";s:4:"𝑝";s:1:"p";s:4:"𝑞";s:1:"q";s:4:"𝑟";s:1:"r";s:4:"𝑠";s:1:"s";s:4:"𝑡";s:1:"t";s:4:"𝑢";s:1:"u";s:4:"𝑣";s:1:"v";s:4:"𝑤";s:1:"w";s:4:"𝑥";s:1:"x";s:4:"𝑦";s:1:"y";s:4:"𝑧";s:1:"z";s:4:"𝑨";s:1:"A";s:4:"𝑩";s:1:"B";s:4:"𝑪";s:1:"C";s:4:"𝑫";s:1:"D";s:4:"𝑬";s:1:"E";s:4:"𝑭";s:1:"F";s:4:"𝑮";s:1:"G";s:4:"𝑯";s:1:"H";s:4:"𝑰";s:1:"I";s:4:"𝑱";s:1:"J";s:4:"𝑲";s:1:"K";s:4:"𝑳";s:1:"L";s:4:"𝑴";s:1:"M";s:4:"𝑵";s:1:"N";s:4:"𝑶";s:1:"O";s:4:"𝑷";s:1:"P";s:4:"𝑸";s:1:"Q";s:4:"𝑹";s:1:"R";s:4:"𝑺";s:1:"S";s:4:"𝑻";s:1:"T";s:4:"𝑼";s:1:"U";s:4:"𝑽";s:1:"V";s:4:"𝑾";s:1:"W";s:4:"𝑿";s:1:"X";s:4:"𝒀";s:1:"Y";s:4:"𝒁";s:1:"Z";s:4:"𝒂";s:1:"a";s:4:"𝒃";s:1:"b";s:4:"𝒄";s:1:"c";s:4:"𝒅";s:1:"d";s:4:"𝒆";s:1:"e";s:4:"𝒇";s:1:"f";s:4:"𝒈";s:1:"g";s:4:"𝒉";s:1:"h";s:4:"𝒊";s:1:"i";s:4:"𝒋";s:1:"j";s:4:"𝒌";s:1:"k";s:4:"𝒍";s:1:"l";s:4:"𝒎";s:1:"m";s:4:"𝒏";s:1:"n";s:4:"𝒐";s:1:"o";s:4:"𝒑";s:1:"p";s:4:"𝒒";s:1:"q";s:4:"𝒓";s:1:"r";s:4:"𝒔";s:1:"s";s:4:"𝒕";s:1:"t";s:4:"𝒖";s:1:"u";s:4:"𝒗";s:1:"v";s:4:"𝒘";s:1:"w";s:4:"𝒙";s:1:"x";s:4:"𝒚";s:1:"y";s:4:"𝒛";s:1:"z";s:4:"𝒜";s:1:"A";s:4:"𝒞";s:1:"C";s:4:"𝒟";s:1:"D";s:4:"𝒢";s:1:"G";s:4:"𝒥";s:1:"J";s:4:"𝒦";s:1:"K";s:4:"𝒩";s:1:"N";s:4:"𝒪";s:1:"O";s:4:"𝒫";s:1:"P";s:4:"𝒬";s:1:"Q";s:4:"𝒮";s:1:"S";s:4:"𝒯";s:1:"T";s:4:"𝒰";s:1:"U";s:4:"𝒱";s:1:"V";s:4:"𝒲";s:1:"W";s:4:"𝒳";s:1:"X";s:4:"𝒴";s:1:"Y";s:4:"𝒵";s:1:"Z";s:4:"𝒶";s:1:"a";s:4:"𝒷";s:1:"b";s:4:"𝒸";s:1:"c";s:4:"𝒹";s:1:"d";s:4:"𝒻";s:1:"f";s:4:"𝒽";s:1:"h";s:4:"𝒾";s:1:"i";s:4:"𝒿";s:1:"j";s:4:"𝓀";s:1:"k";s:4:"𝓁";s:1:"l";s:4:"𝓂";s:1:"m";s:4:"𝓃";s:1:"n";s:4:"𝓅";s:1:"p";s:4:"𝓆";s:1:"q";s:4:"𝓇";s:1:"r";s:4:"𝓈";s:1:"s";s:4:"𝓉";s:1:"t";s:4:"𝓊";s:1:"u";s:4:"𝓋";s:1:"v";s:4:"𝓌";s:1:"w";s:4:"𝓍";s:1:"x";s:4:"𝓎";s:1:"y";s:4:"𝓏";s:1:"z";s:4:"𝓐";s:1:"A";s:4:"𝓑";s:1:"B";s:4:"𝓒";s:1:"C";s:4:"𝓓";s:1:"D";s:4:"𝓔";s:1:"E";s:4:"𝓕";s:1:"F";s:4:"𝓖";s:1:"G";s:4:"𝓗";s:1:"H";s:4:"𝓘";s:1:"I";s:4:"𝓙";s:1:"J";s:4:"𝓚";s:1:"K";s:4:"𝓛";s:1:"L";s:4:"𝓜";s:1:"M";s:4:"𝓝";s:1:"N";s:4:"𝓞";s:1:"O";s:4:"𝓟";s:1:"P";s:4:"𝓠";s:1:"Q";s:4:"𝓡";s:1:"R";s:4:"𝓢";s:1:"S";s:4:"𝓣";s:1:"T";s:4:"𝓤";s:1:"U";s:4:"𝓥";s:1:"V";s:4:"𝓦";s:1:"W";s:4:"𝓧";s:1:"X";s:4:"𝓨";s:1:"Y";s:4:"𝓩";s:1:"Z";s:4:"𝓪";s:1:"a";s:4:"𝓫";s:1:"b";s:4:"𝓬";s:1:"c";s:4:"𝓭";s:1:"d";s:4:"𝓮";s:1:"e";s:4:"𝓯";s:1:"f";s:4:"𝓰";s:1:"g";s:4:"𝓱";s:1:"h";s:4:"𝓲";s:1:"i";s:4:"𝓳";s:1:"j";s:4:"𝓴";s:1:"k";s:4:"𝓵";s:1:"l";s:4:"𝓶";s:1:"m";s:4:"𝓷";s:1:"n";s:4:"𝓸";s:1:"o";s:4:"𝓹";s:1:"p";s:4:"𝓺";s:1:"q";s:4:"𝓻";s:1:"r";s:4:"𝓼";s:1:"s";s:4:"𝓽";s:1:"t";s:4:"𝓾";s:1:"u";s:4:"𝓿";s:1:"v";s:4:"𝔀";s:1:"w";s:4:"𝔁";s:1:"x";s:4:"𝔂";s:1:"y";s:4:"𝔃";s:1:"z";s:4:"𝔄";s:1:"A";s:4:"𝔅";s:1:"B";s:4:"𝔇";s:1:"D";s:4:"𝔈";s:1:"E";s:4:"𝔉";s:1:"F";s:4:"𝔊";s:1:"G";s:4:"𝔍";s:1:"J";s:4:"𝔎";s:1:"K";s:4:"𝔏";s:1:"L";s:4:"𝔐";s:1:"M";s:4:"𝔑";s:1:"N";s:4:"𝔒";s:1:"O";s:4:"𝔓";s:1:"P";s:4:"𝔔";s:1:"Q";s:4:"𝔖";s:1:"S";s:4:"𝔗";s:1:"T";s:4:"𝔘";s:1:"U";s:4:"𝔙";s:1:"V";s:4:"𝔚";s:1:"W";s:4:"𝔛";s:1:"X";s:4:"𝔜";s:1:"Y";s:4:"𝔞";s:1:"a";s:4:"𝔟";s:1:"b";s:4:"𝔠";s:1:"c";s:4:"𝔡";s:1:"d";s:4:"𝔢";s:1:"e";s:4:"𝔣";s:1:"f";s:4:"𝔤";s:1:"g";s:4:"𝔥";s:1:"h";s:4:"𝔦";s:1:"i";s:4:"𝔧";s:1:"j";s:4:"𝔨";s:1:"k";s:4:"𝔩";s:1:"l";s:4:"𝔪";s:1:"m";s:4:"𝔫";s:1:"n";s:4:"𝔬";s:1:"o";s:4:"𝔭";s:1:"p";s:4:"𝔮";s:1:"q";s:4:"𝔯";s:1:"r";s:4:"𝔰";s:1:"s";s:4:"𝔱";s:1:"t";s:4:"𝔲";s:1:"u";s:4:"𝔳";s:1:"v";s:4:"𝔴";s:1:"w";s:4:"𝔵";s:1:"x";s:4:"𝔶";s:1:"y";s:4:"𝔷";s:1:"z";s:4:"𝔸";s:1:"A";s:4:"𝔹";s:1:"B";s:4:"𝔻";s:1:"D";s:4:"𝔼";s:1:"E";s:4:"𝔽";s:1:"F";s:4:"𝔾";s:1:"G";s:4:"𝕀";s:1:"I";s:4:"𝕁";s:1:"J";s:4:"𝕂";s:1:"K";s:4:"𝕃";s:1:"L";s:4:"𝕄";s:1:"M";s:4:"𝕆";s:1:"O";s:4:"𝕊";s:1:"S";s:4:"𝕋";s:1:"T";s:4:"𝕌";s:1:"U";s:4:"𝕍";s:1:"V";s:4:"𝕎";s:1:"W";s:4:"𝕏";s:1:"X";s:4:"𝕐";s:1:"Y";s:4:"𝕒";s:1:"a";s:4:"𝕓";s:1:"b";s:4:"𝕔";s:1:"c";s:4:"𝕕";s:1:"d";s:4:"𝕖";s:1:"e";s:4:"𝕗";s:1:"f";s:4:"𝕘";s:1:"g";s:4:"𝕙";s:1:"h";s:4:"𝕚";s:1:"i";s:4:"𝕛";s:1:"j";s:4:"𝕜";s:1:"k";s:4:"𝕝";s:1:"l";s:4:"𝕞";s:1:"m";s:4:"𝕟";s:1:"n";s:4:"𝕠";s:1:"o";s:4:"𝕡";s:1:"p";s:4:"𝕢";s:1:"q";s:4:"𝕣";s:1:"r";s:4:"𝕤";s:1:"s";s:4:"𝕥";s:1:"t";s:4:"𝕦";s:1:"u";s:4:"𝕧";s:1:"v";s:4:"𝕨";s:1:"w";s:4:"𝕩";s:1:"x";s:4:"𝕪";s:1:"y";s:4:"𝕫";s:1:"z";s:4:"𝕬";s:1:"A";s:4:"𝕭";s:1:"B";s:4:"𝕮";s:1:"C";s:4:"𝕯";s:1:"D";s:4:"𝕰";s:1:"E";s:4:"𝕱";s:1:"F";s:4:"𝕲";s:1:"G";s:4:"𝕳";s:1:"H";s:4:"𝕴";s:1:"I";s:4:"𝕵";s:1:"J";s:4:"𝕶";s:1:"K";s:4:"𝕷";s:1:"L";s:4:"𝕸";s:1:"M";s:4:"𝕹";s:1:"N";s:4:"𝕺";s:1:"O";s:4:"𝕻";s:1:"P";s:4:"𝕼";s:1:"Q";s:4:"𝕽";s:1:"R";s:4:"𝕾";s:1:"S";s:4:"𝕿";s:1:"T";s:4:"𝖀";s:1:"U";s:4:"𝖁";s:1:"V";s:4:"𝖂";s:1:"W";s:4:"𝖃";s:1:"X";s:4:"𝖄";s:1:"Y";s:4:"𝖅";s:1:"Z";s:4:"𝖆";s:1:"a";s:4:"𝖇";s:1:"b";s:4:"𝖈";s:1:"c";s:4:"𝖉";s:1:"d";s:4:"𝖊";s:1:"e";s:4:"𝖋";s:1:"f";s:4:"𝖌";s:1:"g";s:4:"𝖍";s:1:"h";s:4:"𝖎";s:1:"i";s:4:"𝖏";s:1:"j";s:4:"𝖐";s:1:"k";s:4:"𝖑";s:1:"l";s:4:"𝖒";s:1:"m";s:4:"𝖓";s:1:"n";s:4:"𝖔";s:1:"o";s:4:"𝖕";s:1:"p";s:4:"𝖖";s:1:"q";s:4:"𝖗";s:1:"r";s:4:"𝖘";s:1:"s";s:4:"𝖙";s:1:"t";s:4:"𝖚";s:1:"u";s:4:"𝖛";s:1:"v";s:4:"𝖜";s:1:"w";s:4:"𝖝";s:1:"x";s:4:"𝖞";s:1:"y";s:4:"𝖟";s:1:"z";s:4:"𝖠";s:1:"A";s:4:"𝖡";s:1:"B";s:4:"𝖢";s:1:"C";s:4:"𝖣";s:1:"D";s:4:"𝖤";s:1:"E";s:4:"𝖥";s:1:"F";s:4:"𝖦";s:1:"G";s:4:"𝖧";s:1:"H";s:4:"𝖨";s:1:"I";s:4:"𝖩";s:1:"J";s:4:"𝖪";s:1:"K";s:4:"𝖫";s:1:"L";s:4:"𝖬";s:1:"M";s:4:"𝖭";s:1:"N";s:4:"𝖮";s:1:"O";s:4:"𝖯";s:1:"P";s:4:"𝖰";s:1:"Q";s:4:"𝖱";s:1:"R";s:4:"𝖲";s:1:"S";s:4:"𝖳";s:1:"T";s:4:"𝖴";s:1:"U";s:4:"𝖵";s:1:"V";s:4:"𝖶";s:1:"W";s:4:"𝖷";s:1:"X";s:4:"𝖸";s:1:"Y";s:4:"𝖹";s:1:"Z";s:4:"𝖺";s:1:"a";s:4:"𝖻";s:1:"b";s:4:"𝖼";s:1:"c";s:4:"𝖽";s:1:"d";s:4:"𝖾";s:1:"e";s:4:"𝖿";s:1:"f";s:4:"𝗀";s:1:"g";s:4:"𝗁";s:1:"h";s:4:"𝗂";s:1:"i";s:4:"𝗃";s:1:"j";s:4:"𝗄";s:1:"k";s:4:"𝗅";s:1:"l";s:4:"𝗆";s:1:"m";s:4:"𝗇";s:1:"n";s:4:"𝗈";s:1:"o";s:4:"𝗉";s:1:"p";s:4:"𝗊";s:1:"q";s:4:"𝗋";s:1:"r";s:4:"𝗌";s:1:"s";s:4:"𝗍";s:1:"t";s:4:"𝗎";s:1:"u";s:4:"𝗏";s:1:"v";s:4:"𝗐";s:1:"w";s:4:"𝗑";s:1:"x";s:4:"𝗒";s:1:"y";s:4:"𝗓";s:1:"z";s:4:"𝗔";s:1:"A";s:4:"𝗕";s:1:"B";s:4:"𝗖";s:1:"C";s:4:"𝗗";s:1:"D";s:4:"𝗘";s:1:"E";s:4:"𝗙";s:1:"F";s:4:"𝗚";s:1:"G";s:4:"𝗛";s:1:"H";s:4:"𝗜";s:1:"I";s:4:"𝗝";s:1:"J";s:4:"𝗞";s:1:"K";s:4:"𝗟";s:1:"L";s:4:"𝗠";s:1:"M";s:4:"𝗡";s:1:"N";s:4:"𝗢";s:1:"O";s:4:"𝗣";s:1:"P";s:4:"𝗤";s:1:"Q";s:4:"𝗥";s:1:"R";s:4:"𝗦";s:1:"S";s:4:"𝗧";s:1:"T";s:4:"𝗨";s:1:"U";s:4:"𝗩";s:1:"V";s:4:"𝗪";s:1:"W";s:4:"𝗫";s:1:"X";s:4:"𝗬";s:1:"Y";s:4:"𝗭";s:1:"Z";s:4:"𝗮";s:1:"a";s:4:"𝗯";s:1:"b";s:4:"𝗰";s:1:"c";s:4:"𝗱";s:1:"d";s:4:"𝗲";s:1:"e";s:4:"𝗳";s:1:"f";s:4:"𝗴";s:1:"g";s:4:"𝗵";s:1:"h";s:4:"𝗶";s:1:"i";s:4:"𝗷";s:1:"j";s:4:"𝗸";s:1:"k";s:4:"𝗹";s:1:"l";s:4:"𝗺";s:1:"m";s:4:"𝗻";s:1:"n";s:4:"𝗼";s:1:"o";s:4:"𝗽";s:1:"p";s:4:"𝗾";s:1:"q";s:4:"𝗿";s:1:"r";s:4:"𝘀";s:1:"s";s:4:"𝘁";s:1:"t";s:4:"𝘂";s:1:"u";s:4:"𝘃";s:1:"v";s:4:"𝘄";s:1:"w";s:4:"𝘅";s:1:"x";s:4:"𝘆";s:1:"y";s:4:"𝘇";s:1:"z";s:4:"𝘈";s:1:"A";s:4:"𝘉";s:1:"B";s:4:"𝘊";s:1:"C";s:4:"𝘋";s:1:"D";s:4:"𝘌";s:1:"E";s:4:"𝘍";s:1:"F";s:4:"𝘎";s:1:"G";s:4:"𝘏";s:1:"H";s:4:"𝘐";s:1:"I";s:4:"𝘑";s:1:"J";s:4:"𝘒";s:1:"K";s:4:"𝘓";s:1:"L";s:4:"𝘔";s:1:"M";s:4:"𝘕";s:1:"N";s:4:"𝘖";s:1:"O";s:4:"𝘗";s:1:"P";s:4:"𝘘";s:1:"Q";s:4:"𝘙";s:1:"R";s:4:"𝘚";s:1:"S";s:4:"𝘛";s:1:"T";s:4:"𝘜";s:1:"U";s:4:"𝘝";s:1:"V";s:4:"𝘞";s:1:"W";s:4:"𝘟";s:1:"X";s:4:"𝘠";s:1:"Y";s:4:"𝘡";s:1:"Z";s:4:"𝘢";s:1:"a";s:4:"𝘣";s:1:"b";s:4:"𝘤";s:1:"c";s:4:"𝘥";s:1:"d";s:4:"𝘦";s:1:"e";s:4:"𝘧";s:1:"f";s:4:"𝘨";s:1:"g";s:4:"𝘩";s:1:"h";s:4:"𝘪";s:1:"i";s:4:"𝘫";s:1:"j";s:4:"𝘬";s:1:"k";s:4:"𝘭";s:1:"l";s:4:"𝘮";s:1:"m";s:4:"𝘯";s:1:"n";s:4:"𝘰";s:1:"o";s:4:"𝘱";s:1:"p";s:4:"𝘲";s:1:"q";s:4:"𝘳";s:1:"r";s:4:"𝘴";s:1:"s";s:4:"𝘵";s:1:"t";s:4:"𝘶";s:1:"u";s:4:"𝘷";s:1:"v";s:4:"𝘸";s:1:"w";s:4:"𝘹";s:1:"x";s:4:"𝘺";s:1:"y";s:4:"𝘻";s:1:"z";s:4:"𝘼";s:1:"A";s:4:"𝘽";s:1:"B";s:4:"𝘾";s:1:"C";s:4:"𝘿";s:1:"D";s:4:"𝙀";s:1:"E";s:4:"𝙁";s:1:"F";s:4:"𝙂";s:1:"G";s:4:"𝙃";s:1:"H";s:4:"𝙄";s:1:"I";s:4:"𝙅";s:1:"J";s:4:"𝙆";s:1:"K";s:4:"𝙇";s:1:"L";s:4:"𝙈";s:1:"M";s:4:"𝙉";s:1:"N";s:4:"𝙊";s:1:"O";s:4:"𝙋";s:1:"P";s:4:"𝙌";s:1:"Q";s:4:"𝙍";s:1:"R";s:4:"𝙎";s:1:"S";s:4:"𝙏";s:1:"T";s:4:"𝙐";s:1:"U";s:4:"𝙑";s:1:"V";s:4:"𝙒";s:1:"W";s:4:"𝙓";s:1:"X";s:4:"𝙔";s:1:"Y";s:4:"𝙕";s:1:"Z";s:4:"𝙖";s:1:"a";s:4:"𝙗";s:1:"b";s:4:"𝙘";s:1:"c";s:4:"𝙙";s:1:"d";s:4:"𝙚";s:1:"e";s:4:"𝙛";s:1:"f";s:4:"𝙜";s:1:"g";s:4:"𝙝";s:1:"h";s:4:"𝙞";s:1:"i";s:4:"𝙟";s:1:"j";s:4:"𝙠";s:1:"k";s:4:"𝙡";s:1:"l";s:4:"𝙢";s:1:"m";s:4:"𝙣";s:1:"n";s:4:"𝙤";s:1:"o";s:4:"𝙥";s:1:"p";s:4:"𝙦";s:1:"q";s:4:"𝙧";s:1:"r";s:4:"𝙨";s:1:"s";s:4:"𝙩";s:1:"t";s:4:"𝙪";s:1:"u";s:4:"𝙫";s:1:"v";s:4:"𝙬";s:1:"w";s:4:"𝙭";s:1:"x";s:4:"𝙮";s:1:"y";s:4:"𝙯";s:1:"z";s:4:"𝙰";s:1:"A";s:4:"𝙱";s:1:"B";s:4:"𝙲";s:1:"C";s:4:"𝙳";s:1:"D";s:4:"𝙴";s:1:"E";s:4:"𝙵";s:1:"F";s:4:"𝙶";s:1:"G";s:4:"𝙷";s:1:"H";s:4:"𝙸";s:1:"I";s:4:"𝙹";s:1:"J";s:4:"𝙺";s:1:"K";s:4:"𝙻";s:1:"L";s:4:"𝙼";s:1:"M";s:4:"𝙽";s:1:"N";s:4:"𝙾";s:1:"O";s:4:"𝙿";s:1:"P";s:4:"𝚀";s:1:"Q";s:4:"𝚁";s:1:"R";s:4:"𝚂";s:1:"S";s:4:"𝚃";s:1:"T";s:4:"𝚄";s:1:"U";s:4:"𝚅";s:1:"V";s:4:"𝚆";s:1:"W";s:4:"𝚇";s:1:"X";s:4:"𝚈";s:1:"Y";s:4:"𝚉";s:1:"Z";s:4:"𝚊";s:1:"a";s:4:"𝚋";s:1:"b";s:4:"𝚌";s:1:"c";s:4:"𝚍";s:1:"d";s:4:"𝚎";s:1:"e";s:4:"𝚏";s:1:"f";s:4:"𝚐";s:1:"g";s:4:"𝚑";s:1:"h";s:4:"𝚒";s:1:"i";s:4:"𝚓";s:1:"j";s:4:"𝚔";s:1:"k";s:4:"𝚕";s:1:"l";s:4:"𝚖";s:1:"m";s:4:"𝚗";s:1:"n";s:4:"𝚘";s:1:"o";s:4:"𝚙";s:1:"p";s:4:"𝚚";s:1:"q";s:4:"𝚛";s:1:"r";s:4:"𝚜";s:1:"s";s:4:"𝚝";s:1:"t";s:4:"𝚞";s:1:"u";s:4:"𝚟";s:1:"v";s:4:"𝚠";s:1:"w";s:4:"𝚡";s:1:"x";s:4:"𝚢";s:1:"y";s:4:"𝚣";s:1:"z";s:4:"𝚤";s:2:"ı";s:4:"𝚥";s:2:"ȷ";s:4:"𝚨";s:2:"Α";s:4:"𝚩";s:2:"Β";s:4:"𝚪";s:2:"Γ";s:4:"𝚫";s:2:"Δ";s:4:"𝚬";s:2:"Ε";s:4:"𝚭";s:2:"Ζ";s:4:"𝚮";s:2:"Η";s:4:"𝚯";s:2:"Θ";s:4:"𝚰";s:2:"Ι";s:4:"𝚱";s:2:"Κ";s:4:"𝚲";s:2:"Λ";s:4:"𝚳";s:2:"Μ";s:4:"𝚴";s:2:"Ν";s:4:"𝚵";s:2:"Ξ";s:4:"𝚶";s:2:"Ο";s:4:"𝚷";s:2:"Π";s:4:"𝚸";s:2:"Ρ";s:4:"𝚹";s:2:"Θ";s:4:"𝚺";s:2:"Σ";s:4:"𝚻";s:2:"Τ";s:4:"𝚼";s:2:"Υ";s:4:"𝚽";s:2:"Φ";s:4:"𝚾";s:2:"Χ";s:4:"𝚿";s:2:"Ψ";s:4:"𝛀";s:2:"Ω";s:4:"𝛁";s:3:"∇";s:4:"𝛂";s:2:"α";s:4:"𝛃";s:2:"β";s:4:"𝛄";s:2:"γ";s:4:"𝛅";s:2:"δ";s:4:"𝛆";s:2:"ε";s:4:"𝛇";s:2:"ζ";s:4:"𝛈";s:2:"η";s:4:"𝛉";s:2:"θ";s:4:"𝛊";s:2:"ι";s:4:"𝛋";s:2:"κ";s:4:"𝛌";s:2:"λ";s:4:"𝛍";s:2:"μ";s:4:"𝛎";s:2:"ν";s:4:"𝛏";s:2:"ξ";s:4:"𝛐";s:2:"ο";s:4:"𝛑";s:2:"π";s:4:"𝛒";s:2:"ρ";s:4:"𝛓";s:2:"ς";s:4:"𝛔";s:2:"σ";s:4:"𝛕";s:2:"τ";s:4:"𝛖";s:2:"υ";s:4:"𝛗";s:2:"φ";s:4:"𝛘";s:2:"χ";s:4:"𝛙";s:2:"ψ";s:4:"𝛚";s:2:"ω";s:4:"𝛛";s:3:"∂";s:4:"𝛜";s:2:"ε";s:4:"𝛝";s:2:"θ";s:4:"𝛞";s:2:"κ";s:4:"𝛟";s:2:"φ";s:4:"𝛠";s:2:"ρ";s:4:"𝛡";s:2:"π";s:4:"𝛢";s:2:"Α";s:4:"𝛣";s:2:"Β";s:4:"𝛤";s:2:"Γ";s:4:"𝛥";s:2:"Δ";s:4:"𝛦";s:2:"Ε";s:4:"𝛧";s:2:"Ζ";s:4:"𝛨";s:2:"Η";s:4:"𝛩";s:2:"Θ";s:4:"𝛪";s:2:"Ι";s:4:"𝛫";s:2:"Κ";s:4:"𝛬";s:2:"Λ";s:4:"𝛭";s:2:"Μ";s:4:"𝛮";s:2:"Ν";s:4:"𝛯";s:2:"Ξ";s:4:"𝛰";s:2:"Ο";s:4:"𝛱";s:2:"Π";s:4:"𝛲";s:2:"Ρ";s:4:"𝛳";s:2:"Θ";s:4:"𝛴";s:2:"Σ";s:4:"𝛵";s:2:"Τ";s:4:"𝛶";s:2:"Υ";s:4:"𝛷";s:2:"Φ";s:4:"𝛸";s:2:"Χ";s:4:"𝛹";s:2:"Ψ";s:4:"𝛺";s:2:"Ω";s:4:"𝛻";s:3:"∇";s:4:"𝛼";s:2:"α";s:4:"𝛽";s:2:"β";s:4:"𝛾";s:2:"γ";s:4:"𝛿";s:2:"δ";s:4:"𝜀";s:2:"ε";s:4:"𝜁";s:2:"ζ";s:4:"𝜂";s:2:"η";s:4:"𝜃";s:2:"θ";s:4:"𝜄";s:2:"ι";s:4:"𝜅";s:2:"κ";s:4:"𝜆";s:2:"λ";s:4:"𝜇";s:2:"μ";s:4:"𝜈";s:2:"ν";s:4:"𝜉";s:2:"ξ";s:4:"𝜊";s:2:"ο";s:4:"𝜋";s:2:"π";s:4:"𝜌";s:2:"ρ";s:4:"𝜍";s:2:"ς";s:4:"𝜎";s:2:"σ";s:4:"𝜏";s:2:"τ";s:4:"𝜐";s:2:"υ";s:4:"𝜑";s:2:"φ";s:4:"𝜒";s:2:"χ";s:4:"𝜓";s:2:"ψ";s:4:"𝜔";s:2:"ω";s:4:"𝜕";s:3:"∂";s:4:"𝜖";s:2:"ε";s:4:"𝜗";s:2:"θ";s:4:"𝜘";s:2:"κ";s:4:"𝜙";s:2:"φ";s:4:"𝜚";s:2:"ρ";s:4:"𝜛";s:2:"π";s:4:"𝜜";s:2:"Α";s:4:"𝜝";s:2:"Β";s:4:"𝜞";s:2:"Γ";s:4:"𝜟";s:2:"Δ";s:4:"𝜠";s:2:"Ε";s:4:"𝜡";s:2:"Ζ";s:4:"𝜢";s:2:"Η";s:4:"𝜣";s:2:"Θ";s:4:"𝜤";s:2:"Ι";s:4:"𝜥";s:2:"Κ";s:4:"𝜦";s:2:"Λ";s:4:"𝜧";s:2:"Μ";s:4:"𝜨";s:2:"Ν";s:4:"𝜩";s:2:"Ξ";s:4:"𝜪";s:2:"Ο";s:4:"𝜫";s:2:"Π";s:4:"𝜬";s:2:"Ρ";s:4:"𝜭";s:2:"Θ";s:4:"𝜮";s:2:"Σ";s:4:"𝜯";s:2:"Τ";s:4:"𝜰";s:2:"Υ";s:4:"𝜱";s:2:"Φ";s:4:"𝜲";s:2:"Χ";s:4:"𝜳";s:2:"Ψ";s:4:"𝜴";s:2:"Ω";s:4:"𝜵";s:3:"∇";s:4:"𝜶";s:2:"α";s:4:"𝜷";s:2:"β";s:4:"𝜸";s:2:"γ";s:4:"𝜹";s:2:"δ";s:4:"𝜺";s:2:"ε";s:4:"𝜻";s:2:"ζ";s:4:"𝜼";s:2:"η";s:4:"𝜽";s:2:"θ";s:4:"𝜾";s:2:"ι";s:4:"𝜿";s:2:"κ";s:4:"𝝀";s:2:"λ";s:4:"𝝁";s:2:"μ";s:4:"𝝂";s:2:"ν";s:4:"𝝃";s:2:"ξ";s:4:"𝝄";s:2:"ο";s:4:"𝝅";s:2:"π";s:4:"𝝆";s:2:"ρ";s:4:"𝝇";s:2:"ς";s:4:"𝝈";s:2:"σ";s:4:"𝝉";s:2:"τ";s:4:"𝝊";s:2:"υ";s:4:"𝝋";s:2:"φ";s:4:"𝝌";s:2:"χ";s:4:"𝝍";s:2:"ψ";s:4:"𝝎";s:2:"ω";s:4:"𝝏";s:3:"∂";s:4:"𝝐";s:2:"ε";s:4:"𝝑";s:2:"θ";s:4:"𝝒";s:2:"κ";s:4:"𝝓";s:2:"φ";s:4:"𝝔";s:2:"ρ";s:4:"𝝕";s:2:"π";s:4:"𝝖";s:2:"Α";s:4:"𝝗";s:2:"Β";s:4:"𝝘";s:2:"Γ";s:4:"𝝙";s:2:"Δ";s:4:"𝝚";s:2:"Ε";s:4:"𝝛";s:2:"Ζ";s:4:"𝝜";s:2:"Η";s:4:"𝝝";s:2:"Θ";s:4:"𝝞";s:2:"Ι";s:4:"𝝟";s:2:"Κ";s:4:"𝝠";s:2:"Λ";s:4:"𝝡";s:2:"Μ";s:4:"𝝢";s:2:"Ν";s:4:"𝝣";s:2:"Ξ";s:4:"𝝤";s:2:"Ο";s:4:"𝝥";s:2:"Π";s:4:"𝝦";s:2:"Ρ";s:4:"𝝧";s:2:"Θ";s:4:"𝝨";s:2:"Σ";s:4:"𝝩";s:2:"Τ";s:4:"𝝪";s:2:"Υ";s:4:"𝝫";s:2:"Φ";s:4:"𝝬";s:2:"Χ";s:4:"𝝭";s:2:"Ψ";s:4:"𝝮";s:2:"Ω";s:4:"𝝯";s:3:"∇";s:4:"𝝰";s:2:"α";s:4:"𝝱";s:2:"β";s:4:"𝝲";s:2:"γ";s:4:"𝝳";s:2:"δ";s:4:"𝝴";s:2:"ε";s:4:"𝝵";s:2:"ζ";s:4:"𝝶";s:2:"η";s:4:"𝝷";s:2:"θ";s:4:"𝝸";s:2:"ι";s:4:"𝝹";s:2:"κ";s:4:"𝝺";s:2:"λ";s:4:"𝝻";s:2:"μ";s:4:"𝝼";s:2:"ν";s:4:"𝝽";s:2:"ξ";s:4:"𝝾";s:2:"ο";s:4:"𝝿";s:2:"π";s:4:"𝞀";s:2:"ρ";s:4:"𝞁";s:2:"ς";s:4:"𝞂";s:2:"σ";s:4:"𝞃";s:2:"τ";s:4:"𝞄";s:2:"υ";s:4:"𝞅";s:2:"φ";s:4:"𝞆";s:2:"χ";s:4:"𝞇";s:2:"ψ";s:4:"𝞈";s:2:"ω";s:4:"𝞉";s:3:"∂";s:4:"𝞊";s:2:"ε";s:4:"𝞋";s:2:"θ";s:4:"𝞌";s:2:"κ";s:4:"𝞍";s:2:"φ";s:4:"𝞎";s:2:"ρ";s:4:"𝞏";s:2:"π";s:4:"𝞐";s:2:"Α";s:4:"𝞑";s:2:"Β";s:4:"𝞒";s:2:"Γ";s:4:"𝞓";s:2:"Δ";s:4:"𝞔";s:2:"Ε";s:4:"𝞕";s:2:"Ζ";s:4:"𝞖";s:2:"Η";s:4:"𝞗";s:2:"Θ";s:4:"𝞘";s:2:"Ι";s:4:"𝞙";s:2:"Κ";s:4:"𝞚";s:2:"Λ";s:4:"𝞛";s:2:"Μ";s:4:"𝞜";s:2:"Ν";s:4:"𝞝";s:2:"Ξ";s:4:"𝞞";s:2:"Ο";s:4:"𝞟";s:2:"Π";s:4:"𝞠";s:2:"Ρ";s:4:"𝞡";s:2:"Θ";s:4:"𝞢";s:2:"Σ";s:4:"𝞣";s:2:"Τ";s:4:"𝞤";s:2:"Υ";s:4:"𝞥";s:2:"Φ";s:4:"𝞦";s:2:"Χ";s:4:"𝞧";s:2:"Ψ";s:4:"𝞨";s:2:"Ω";s:4:"𝞩";s:3:"∇";s:4:"𝞪";s:2:"α";s:4:"𝞫";s:2:"β";s:4:"𝞬";s:2:"γ";s:4:"𝞭";s:2:"δ";s:4:"𝞮";s:2:"ε";s:4:"𝞯";s:2:"ζ";s:4:"𝞰";s:2:"η";s:4:"𝞱";s:2:"θ";s:4:"𝞲";s:2:"ι";s:4:"𝞳";s:2:"κ";s:4:"𝞴";s:2:"λ";s:4:"𝞵";s:2:"μ";s:4:"𝞶";s:2:"ν";s:4:"𝞷";s:2:"ξ";s:4:"𝞸";s:2:"ο";s:4:"𝞹";s:2:"π";s:4:"𝞺";s:2:"ρ";s:4:"𝞻";s:2:"ς";s:4:"𝞼";s:2:"σ";s:4:"𝞽";s:2:"τ";s:4:"𝞾";s:2:"υ";s:4:"𝞿";s:2:"φ";s:4:"𝟀";s:2:"χ";s:4:"𝟁";s:2:"ψ";s:4:"𝟂";s:2:"ω";s:4:"𝟃";s:3:"∂";s:4:"𝟄";s:2:"ε";s:4:"𝟅";s:2:"θ";s:4:"𝟆";s:2:"κ";s:4:"𝟇";s:2:"φ";s:4:"𝟈";s:2:"ρ";s:4:"𝟉";s:2:"π";s:4:"𝟊";s:2:"Ϝ";s:4:"𝟋";s:2:"ϝ";s:4:"𝟎";s:1:"0";s:4:"𝟏";s:1:"1";s:4:"𝟐";s:1:"2";s:4:"𝟑";s:1:"3";s:4:"𝟒";s:1:"4";s:4:"𝟓";s:1:"5";s:4:"𝟔";s:1:"6";s:4:"𝟕";s:1:"7";s:4:"𝟖";s:1:"8";s:4:"𝟗";s:1:"9";s:4:"𝟘";s:1:"0";s:4:"𝟙";s:1:"1";s:4:"𝟚";s:1:"2";s:4:"𝟛";s:1:"3";s:4:"𝟜";s:1:"4";s:4:"𝟝";s:1:"5";s:4:"𝟞";s:1:"6";s:4:"𝟟";s:1:"7";s:4:"𝟠";s:1:"8";s:4:"𝟡";s:1:"9";s:4:"𝟢";s:1:"0";s:4:"𝟣";s:1:"1";s:4:"𝟤";s:1:"2";s:4:"𝟥";s:1:"3";s:4:"𝟦";s:1:"4";s:4:"𝟧";s:1:"5";s:4:"𝟨";s:1:"6";s:4:"𝟩";s:1:"7";s:4:"𝟪";s:1:"8";s:4:"𝟫";s:1:"9";s:4:"𝟬";s:1:"0";s:4:"𝟭";s:1:"1";s:4:"𝟮";s:1:"2";s:4:"𝟯";s:1:"3";s:4:"𝟰";s:1:"4";s:4:"𝟱";s:1:"5";s:4:"𝟲";s:1:"6";s:4:"𝟳";s:1:"7";s:4:"𝟴";s:1:"8";s:4:"𝟵";s:1:"9";s:4:"𝟶";s:1:"0";s:4:"𝟷";s:1:"1";s:4:"𝟸";s:1:"2";s:4:"𝟹";s:1:"3";s:4:"𝟺";s:1:"4";s:4:"𝟻";s:1:"5";s:4:"𝟼";s:1:"6";s:4:"𝟽";s:1:"7";s:4:"𝟾";s:1:"8";s:4:"𝟿";s:1:"9";s:4:"丽";s:3:"丽";s:4:"丸";s:3:"丸";s:4:"乁";s:3:"乁";s:4:"𠄢";s:4:"𠄢";s:4:"你";s:3:"你";s:4:"侮";s:3:"侮";s:4:"侻";s:3:"侻";s:4:"倂";s:3:"倂";s:4:"偺";s:3:"偺";s:4:"備";s:3:"備";s:4:"僧";s:3:"僧";s:4:"像";s:3:"像";s:4:"㒞";s:3:"㒞";s:4:"𠘺";s:4:"𠘺";s:4:"免";s:3:"免";s:4:"兔";s:3:"兔";s:4:"兤";s:3:"兤";s:4:"具";s:3:"具";s:4:"𠔜";s:4:"𠔜";s:4:"㒹";s:3:"㒹";s:4:"內";s:3:"內";s:4:"再";s:3:"再";s:4:"𠕋";s:4:"𠕋";s:4:"冗";s:3:"冗";s:4:"冤";s:3:"冤";s:4:"仌";s:3:"仌";s:4:"冬";s:3:"冬";s:4:"况";s:3:"况";s:4:"𩇟";s:4:"𩇟";s:4:"凵";s:3:"凵";s:4:"刃";s:3:"刃";s:4:"㓟";s:3:"㓟";s:4:"刻";s:3:"刻";s:4:"剆";s:3:"剆";s:4:"割";s:3:"割";s:4:"剷";s:3:"剷";s:4:"㔕";s:3:"㔕";s:4:"勇";s:3:"勇";s:4:"勉";s:3:"勉";s:4:"勤";s:3:"勤";s:4:"勺";s:3:"勺";s:4:"包";s:3:"包";s:4:"匆";s:3:"匆";s:4:"北";s:3:"北";s:4:"卉";s:3:"卉";s:4:"卑";s:3:"卑";s:4:"博";s:3:"博";s:4:"即";s:3:"即";s:4:"卽";s:3:"卽";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"𠨬";s:4:"𠨬";s:4:"灰";s:3:"灰";s:4:"及";s:3:"及";s:4:"叟";s:3:"叟";s:4:"𠭣";s:4:"𠭣";s:4:"叫";s:3:"叫";s:4:"叱";s:3:"叱";s:4:"吆";s:3:"吆";s:4:"咞";s:3:"咞";s:4:"吸";s:3:"吸";s:4:"呈";s:3:"呈";s:4:"周";s:3:"周";s:4:"咢";s:3:"咢";s:4:"哶";s:3:"哶";s:4:"唐";s:3:"唐";s:4:"啓";s:3:"啓";s:4:"啣";s:3:"啣";s:4:"善";s:3:"善";s:4:"善";s:3:"善";s:4:"喙";s:3:"喙";s:4:"喫";s:3:"喫";s:4:"喳";s:3:"喳";s:4:"嗂";s:3:"嗂";s:4:"圖";s:3:"圖";s:4:"嘆";s:3:"嘆";s:4:"圗";s:3:"圗";s:4:"噑";s:3:"噑";s:4:"噴";s:3:"噴";s:4:"切";s:3:"切";s:4:"壮";s:3:"壮";s:4:"城";s:3:"城";s:4:"埴";s:3:"埴";s:4:"堍";s:3:"堍";s:4:"型";s:3:"型";s:4:"堲";s:3:"堲";s:4:"報";s:3:"報";s:4:"墬";s:3:"墬";s:4:"𡓤";s:4:"𡓤";s:4:"売";s:3:"売";s:4:"壷";s:3:"壷";s:4:"夆";s:3:"夆";s:4:"多";s:3:"多";s:4:"夢";s:3:"夢";s:4:"奢";s:3:"奢";s:4:"𡚨";s:4:"𡚨";s:4:"𡛪";s:4:"𡛪";s:4:"姬";s:3:"姬";s:4:"娛";s:3:"娛";s:4:"娧";s:3:"娧";s:4:"姘";s:3:"姘";s:4:"婦";s:3:"婦";s:4:"㛮";s:3:"㛮";s:4:"㛼";s:3:"㛼";s:4:"嬈";s:3:"嬈";s:4:"嬾";s:3:"嬾";s:4:"嬾";s:3:"嬾";s:4:"𡧈";s:4:"𡧈";s:4:"寃";s:3:"寃";s:4:"寘";s:3:"寘";s:4:"寧";s:3:"寧";s:4:"寳";s:3:"寳";s:4:"𡬘";s:4:"𡬘";s:4:"寿";s:3:"寿";s:4:"将";s:3:"将";s:4:"当";s:3:"当";s:4:"尢";s:3:"尢";s:4:"㞁";s:3:"㞁";s:4:"屠";s:3:"屠";s:4:"屮";s:3:"屮";s:4:"峀";s:3:"峀";s:4:"岍";s:3:"岍";s:4:"𡷤";s:4:"𡷤";s:4:"嵃";s:3:"嵃";s:4:"𡷦";s:4:"𡷦";s:4:"嵮";s:3:"嵮";s:4:"嵫";s:3:"嵫";s:4:"嵼";s:3:"嵼";s:4:"巡";s:3:"巡";s:4:"巢";s:3:"巢";s:4:"㠯";s:3:"㠯";s:4:"巽";s:3:"巽";s:4:"帨";s:3:"帨";s:4:"帽";s:3:"帽";s:4:"幩";s:3:"幩";s:4:"㡢";s:3:"㡢";s:4:"𢆃";s:4:"𢆃";s:4:"㡼";s:3:"㡼";s:4:"庰";s:3:"庰";s:4:"庳";s:3:"庳";s:4:"庶";s:3:"庶";s:4:"廊";s:3:"廊";s:4:"𪎒";s:4:"𪎒";s:4:"廾";s:3:"廾";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"舁";s:3:"舁";s:4:"弢";s:3:"弢";s:4:"弢";s:3:"弢";s:4:"㣇";s:3:"㣇";s:4:"𣊸";s:4:"𣊸";s:4:"𦇚";s:4:"𦇚";s:4:"形";s:3:"形";s:4:"彫";s:3:"彫";s:4:"㣣";s:3:"㣣";s:4:"徚";s:3:"徚";s:4:"忍";s:3:"忍";s:4:"志";s:3:"志";s:4:"忹";s:3:"忹";s:4:"悁";s:3:"悁";s:4:"㤺";s:3:"㤺";s:4:"㤜";s:3:"㤜";s:4:"悔";s:3:"悔";s:4:"𢛔";s:4:"𢛔";s:4:"惇";s:3:"惇";s:4:"慈";s:3:"慈";s:4:"慌";s:3:"慌";s:4:"慎";s:3:"慎";s:4:"慌";s:3:"慌";s:4:"慺";s:3:"慺";s:4:"憎";s:3:"憎";s:4:"憲";s:3:"憲";s:4:"憤";s:3:"憤";s:4:"憯";s:3:"憯";s:4:"懞";s:3:"懞";s:4:"懲";s:3:"懲";s:4:"懶";s:3:"懶";s:4:"成";s:3:"成";s:4:"戛";s:3:"戛";s:4:"扝";s:3:"扝";s:4:"抱";s:3:"抱";s:4:"拔";s:3:"拔";s:4:"捐";s:3:"捐";s:4:"𢬌";s:4:"𢬌";s:4:"挽";s:3:"挽";s:4:"拼";s:3:"拼";s:4:"捨";s:3:"捨";s:4:"掃";s:3:"掃";s:4:"揤";s:3:"揤";s:4:"𢯱";s:4:"𢯱";s:4:"搢";s:3:"搢";s:4:"揅";s:3:"揅";s:4:"掩";s:3:"掩";s:4:"㨮";s:3:"㨮";s:4:"摩";s:3:"摩";s:4:"摾";s:3:"摾";s:4:"撝";s:3:"撝";s:4:"摷";s:3:"摷";s:4:"㩬";s:3:"㩬";s:4:"敏";s:3:"敏";s:4:"敬";s:3:"敬";s:4:"𣀊";s:4:"𣀊";s:4:"旣";s:3:"旣";s:4:"書";s:3:"書";s:4:"晉";s:3:"晉";s:4:"㬙";s:3:"㬙";s:4:"暑";s:3:"暑";s:4:"㬈";s:3:"㬈";s:4:"㫤";s:3:"㫤";s:4:"冒";s:3:"冒";s:4:"冕";s:3:"冕";s:4:"最";s:3:"最";s:4:"暜";s:3:"暜";s:4:"肭";s:3:"肭";s:4:"䏙";s:3:"䏙";s:4:"朗";s:3:"朗";s:4:"望";s:3:"望";s:4:"朡";s:3:"朡";s:4:"杞";s:3:"杞";s:4:"杓";s:3:"杓";s:4:"𣏃";s:4:"𣏃";s:4:"㭉";s:3:"㭉";s:4:"柺";s:3:"柺";s:4:"枅";s:3:"枅";s:4:"桒";s:3:"桒";s:4:"梅";s:3:"梅";s:4:"𣑭";s:4:"𣑭";s:4:"梎";s:3:"梎";s:4:"栟";s:3:"栟";s:4:"椔";s:3:"椔";s:4:"㮝";s:3:"㮝";s:4:"楂";s:3:"楂";s:4:"榣";s:3:"榣";s:4:"槪";s:3:"槪";s:4:"檨";s:3:"檨";s:4:"𣚣";s:4:"𣚣";s:4:"櫛";s:3:"櫛";s:4:"㰘";s:3:"㰘";s:4:"次";s:3:"次";s:4:"𣢧";s:4:"𣢧";s:4:"歔";s:3:"歔";s:4:"㱎";s:3:"㱎";s:4:"歲";s:3:"歲";s:4:"殟";s:3:"殟";s:4:"殺";s:3:"殺";s:4:"殻";s:3:"殻";s:4:"𣪍";s:4:"𣪍";s:4:"𡴋";s:4:"𡴋";s:4:"𣫺";s:4:"𣫺";s:4:"汎";s:3:"汎";s:4:"𣲼";s:4:"𣲼";s:4:"沿";s:3:"沿";s:4:"泍";s:3:"泍";s:4:"汧";s:3:"汧";s:4:"洖";s:3:"洖";s:4:"派";s:3:"派";s:4:"海";s:3:"海";s:4:"流";s:3:"流";s:4:"浩";s:3:"浩";s:4:"浸";s:3:"浸";s:4:"涅";s:3:"涅";s:4:"𣴞";s:4:"𣴞";s:4:"洴";s:3:"洴";s:4:"港";s:3:"港";s:4:"湮";s:3:"湮";s:4:"㴳";s:3:"㴳";s:4:"滋";s:3:"滋";s:4:"滇";s:3:"滇";s:4:"𣻑";s:4:"𣻑";s:4:"淹";s:3:"淹";s:4:"潮";s:3:"潮";s:4:"𣽞";s:4:"𣽞";s:4:"𣾎";s:4:"𣾎";s:4:"濆";s:3:"濆";s:4:"瀹";s:3:"瀹";s:4:"瀞";s:3:"瀞";s:4:"瀛";s:3:"瀛";s:4:"㶖";s:3:"㶖";s:4:"灊";s:3:"灊";s:4:"災";s:3:"災";s:4:"灷";s:3:"灷";s:4:"炭";s:3:"炭";s:4:"𠔥";s:4:"𠔥";s:4:"煅";s:3:"煅";s:4:"𤉣";s:4:"𤉣";s:4:"熜";s:3:"熜";s:4:"𤎫";s:4:"𤎫";s:4:"爨";s:3:"爨";s:4:"爵";s:3:"爵";s:4:"牐";s:3:"牐";s:4:"𤘈";s:4:"𤘈";s:4:"犀";s:3:"犀";s:4:"犕";s:3:"犕";s:4:"𤜵";s:4:"𤜵";s:4:"𤠔";s:4:"𤠔";s:4:"獺";s:3:"獺";s:4:"王";s:3:"王";s:4:"㺬";s:3:"㺬";s:4:"玥";s:3:"玥";s:4:"㺸";s:3:"㺸";s:4:"㺸";s:3:"㺸";s:4:"瑇";s:3:"瑇";s:4:"瑜";s:3:"瑜";s:4:"瑱";s:3:"瑱";s:4:"璅";s:3:"璅";s:4:"瓊";s:3:"瓊";s:4:"㼛";s:3:"㼛";s:4:"甤";s:3:"甤";s:4:"𤰶";s:4:"𤰶";s:4:"甾";s:3:"甾";s:4:"𤲒";s:4:"𤲒";s:4:"異";s:3:"異";s:4:"𢆟";s:4:"𢆟";s:4:"瘐";s:3:"瘐";s:4:"𤾡";s:4:"𤾡";s:4:"𤾸";s:4:"𤾸";s:4:"𥁄";s:4:"𥁄";s:4:"㿼";s:3:"㿼";s:4:"䀈";s:3:"䀈";s:4:"直";s:3:"直";s:4:"𥃳";s:4:"𥃳";s:4:"𥃲";s:4:"𥃲";s:4:"𥄙";s:4:"𥄙";s:4:"𥄳";s:4:"𥄳";s:4:"眞";s:3:"眞";s:4:"真";s:3:"真";s:4:"真";s:3:"真";s:4:"睊";s:3:"睊";s:4:"䀹";s:3:"䀹";s:4:"瞋";s:3:"瞋";s:4:"䁆";s:3:"䁆";s:4:"䂖";s:3:"䂖";s:4:"𥐝";s:4:"𥐝";s:4:"硎";s:3:"硎";s:4:"碌";s:3:"碌";s:4:"磌";s:3:"磌";s:4:"䃣";s:3:"䃣";s:4:"𥘦";s:4:"𥘦";s:4:"祖";s:3:"祖";s:4:"𥚚";s:4:"𥚚";s:4:"𥛅";s:4:"𥛅";s:4:"福";s:3:"福";s:4:"秫";s:3:"秫";s:4:"䄯";s:3:"䄯";s:4:"穀";s:3:"穀";s:4:"穊";s:3:"穊";s:4:"穏";s:3:"穏";s:4:"𥥼";s:4:"𥥼";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"竮";s:3:"竮";s:4:"䈂";s:3:"䈂";s:4:"𥮫";s:4:"𥮫";s:4:"篆";s:3:"篆";s:4:"築";s:3:"築";s:4:"䈧";s:3:"䈧";s:4:"𥲀";s:4:"𥲀";s:4:"糒";s:3:"糒";s:4:"䊠";s:3:"䊠";s:4:"糨";s:3:"糨";s:4:"糣";s:3:"糣";s:4:"紀";s:3:"紀";s:4:"𥾆";s:4:"𥾆";s:4:"絣";s:3:"絣";s:4:"䌁";s:3:"䌁";s:4:"緇";s:3:"緇";s:4:"縂";s:3:"縂";s:4:"繅";s:3:"繅";s:4:"䌴";s:3:"䌴";s:4:"𦈨";s:4:"𦈨";s:4:"𦉇";s:4:"𦉇";s:4:"䍙";s:3:"䍙";s:4:"𦋙";s:4:"𦋙";s:4:"罺";s:3:"罺";s:4:"𦌾";s:4:"𦌾";s:4:"羕";s:3:"羕";s:4:"翺";s:3:"翺";s:4:"者";s:3:"者";s:4:"𦓚";s:4:"𦓚";s:4:"𦔣";s:4:"𦔣";s:4:"聠";s:3:"聠";s:4:"𦖨";s:4:"𦖨";s:4:"聰";s:3:"聰";s:4:"𣍟";s:4:"𣍟";s:4:"䏕";s:3:"䏕";s:4:"育";s:3:"育";s:4:"脃";s:3:"脃";s:4:"䐋";s:3:"䐋";s:4:"脾";s:3:"脾";s:4:"媵";s:3:"媵";s:4:"𦞧";s:4:"𦞧";s:4:"𦞵";s:4:"𦞵";s:4:"𣎓";s:4:"𣎓";s:4:"𣎜";s:4:"𣎜";s:4:"舁";s:3:"舁";s:4:"舄";s:3:"舄";s:4:"辞";s:3:"辞";s:4:"䑫";s:3:"䑫";s:4:"芑";s:3:"芑";s:4:"芋";s:3:"芋";s:4:"芝";s:3:"芝";s:4:"劳";s:3:"劳";s:4:"花";s:3:"花";s:4:"芳";s:3:"芳";s:4:"芽";s:3:"芽";s:4:"苦";s:3:"苦";s:4:"𦬼";s:4:"𦬼";s:4:"若";s:3:"若";s:4:"茝";s:3:"茝";s:4:"荣";s:3:"荣";s:4:"莭";s:3:"莭";s:4:"茣";s:3:"茣";s:4:"莽";s:3:"莽";s:4:"菧";s:3:"菧";s:4:"著";s:3:"著";s:4:"荓";s:3:"荓";s:4:"菊";s:3:"菊";s:4:"菌";s:3:"菌";s:4:"菜";s:3:"菜";s:4:"𦰶";s:4:"𦰶";s:4:"𦵫";s:4:"𦵫";s:4:"𦳕";s:4:"𦳕";s:4:"䔫";s:3:"䔫";s:4:"蓱";s:3:"蓱";s:4:"蓳";s:3:"蓳";s:4:"蔖";s:3:"蔖";s:4:"𧏊";s:4:"𧏊";s:4:"蕤";s:3:"蕤";s:4:"𦼬";s:4:"𦼬";s:4:"䕝";s:3:"䕝";s:4:"䕡";s:3:"䕡";s:4:"𦾱";s:4:"𦾱";s:4:"𧃒";s:4:"𧃒";s:4:"䕫";s:3:"䕫";s:4:"虐";s:3:"虐";s:4:"虜";s:3:"虜";s:4:"虧";s:3:"虧";s:4:"虩";s:3:"虩";s:4:"蚩";s:3:"蚩";s:4:"蚈";s:3:"蚈";s:4:"蜎";s:3:"蜎";s:4:"蛢";s:3:"蛢";s:4:"蝹";s:3:"蝹";s:4:"蜨";s:3:"蜨";s:4:"蝫";s:3:"蝫";s:4:"螆";s:3:"螆";s:4:"䗗";s:3:"䗗";s:4:"蟡";s:3:"蟡";s:4:"蠁";s:3:"蠁";s:4:"䗹";s:3:"䗹";s:4:"衠";s:3:"衠";s:4:"衣";s:3:"衣";s:4:"𧙧";s:4:"𧙧";s:4:"裗";s:3:"裗";s:4:"裞";s:3:"裞";s:4:"䘵";s:3:"䘵";s:4:"裺";s:3:"裺";s:4:"㒻";s:3:"㒻";s:4:"𧢮";s:4:"𧢮";s:4:"𧥦";s:4:"𧥦";s:4:"䚾";s:3:"䚾";s:4:"䛇";s:3:"䛇";s:4:"誠";s:3:"誠";s:4:"諭";s:3:"諭";s:4:"變";s:3:"變";s:4:"豕";s:3:"豕";s:4:"𧲨";s:4:"𧲨";s:4:"貫";s:3:"貫";s:4:"賁";s:3:"賁";s:4:"贛";s:3:"贛";s:4:"起";s:3:"起";s:4:"𧼯";s:4:"𧼯";s:4:"𠠄";s:4:"𠠄";s:4:"跋";s:3:"跋";s:4:"趼";s:3:"趼";s:4:"跰";s:3:"跰";s:4:"𠣞";s:4:"𠣞";s:4:"軔";s:3:"軔";s:4:"輸";s:3:"輸";s:4:"𨗒";s:4:"𨗒";s:4:"𨗭";s:4:"𨗭";s:4:"邔";s:3:"邔";s:4:"郱";s:3:"郱";s:4:"鄑";s:3:"鄑";s:4:"𨜮";s:4:"𨜮";s:4:"鄛";s:3:"鄛";s:4:"鈸";s:3:"鈸";s:4:"鋗";s:3:"鋗";s:4:"鋘";s:3:"鋘";s:4:"鉼";s:3:"鉼";s:4:"鏹";s:3:"鏹";s:4:"鐕";s:3:"鐕";s:4:"𨯺";s:4:"𨯺";s:4:"開";s:3:"開";s:4:"䦕";s:3:"䦕";s:4:"閷";s:3:"閷";s:4:"𨵷";s:4:"𨵷";s:4:"䧦";s:3:"䧦";s:4:"雃";s:3:"雃";s:4:"嶲";s:3:"嶲";s:4:"霣";s:3:"霣";s:4:"𩅅";s:4:"𩅅";s:4:"𩈚";s:4:"𩈚";s:4:"䩮";s:3:"䩮";s:4:"䩶";s:3:"䩶";s:4:"韠";s:3:"韠";s:4:"𩐊";s:4:"𩐊";s:4:"䪲";s:3:"䪲";s:4:"𩒖";s:4:"𩒖";s:4:"頋";s:3:"頋";s:4:"頋";s:3:"頋";s:4:"頩";s:3:"頩";s:4:"𩖶";s:4:"𩖶";s:4:"飢";s:3:"飢";s:4:"䬳";s:3:"䬳";s:4:"餩";s:3:"餩";s:4:"馧";s:3:"馧";s:4:"駂";s:3:"駂";s:4:"駾";s:3:"駾";s:4:"䯎";s:3:"䯎";s:4:"𩬰";s:4:"𩬰";s:4:"鬒";s:3:"鬒";s:4:"鱀";s:3:"鱀";s:4:"鳽";s:3:"鳽";s:4:"䳎";s:3:"䳎";s:4:"䳭";s:3:"䳭";s:4:"鵧";s:3:"鵧";s:4:"𪃎";s:4:"𪃎";s:4:"䳸";s:3:"䳸";s:4:"𪄅";s:4:"𪄅";s:4:"𪈎";s:4:"𪈎";s:4:"𪊑";s:4:"𪊑";s:4:"麻";s:3:"麻";s:4:"䵖";s:3:"䵖";s:4:"黹";s:3:"黹";s:4:"黾";s:3:"黾";s:4:"鼅";s:3:"鼅";s:4:"鼏";s:3:"鼏";s:4:"鼖";s:3:"鼖";s:4:"鼻";s:3:"鼻";s:4:"𪘀";s:4:"𪘀";}' ); diff --git a/includes/normal/UtfNormalDefines.php b/includes/normal/UtfNormalDefines.php index 419f6f8c..d759c64c 100644 --- a/includes/normal/UtfNormalDefines.php +++ b/includes/normal/UtfNormalDefines.php @@ -1,4 +1,10 @@ -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - /** * This script generates UniNormalData.inc from the Unicode Character Database * and supplementary files. * + * Copyright (C) 2004 Brion Vibber + * http://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file * @ingroup UtfNormal - * @access private */ -/** */ - if( php_sapi_name() != 'cli' ) { die( "Run me from the command line please.\n" ); } @@ -175,13 +173,14 @@ if( $out ) { /** * This file was automatically generated -- do not edit! * Run UtfNormalGenerate.php to create this file again (make clean && make) + * + * @file */ -/** */ -global \$utfCombiningClass, \$utfCanonicalComp, \$utfCanonicalDecomp, \$utfCheckNFC; -\$utfCombiningClass = unserialize( '$serCombining' ); -\$utfCanonicalComp = unserialize( '$serComp' ); -\$utfCanonicalDecomp = unserialize( '$serCanon' ); -\$utfCheckNFC = unserialize( '$serCheckNFC' ); + +UtfNormal::\$utfCombiningClass = unserialize( '$serCombining' ); +UtfNormal::\$utfCanonicalComp = unserialize( '$serComp' ); +UtfNormal::\$utfCanonicalDecomp = unserialize( '$serCanon' ); +UtfNormal::\$utfCheckNFC = unserialize( '$serCheckNFC' ); \n"; fputs( $out, $outdata ); fclose( $out ); @@ -199,10 +198,11 @@ if( $out ) { /** * This file was automatically generated -- do not edit! * Run UtfNormalGenerate.php to create this file again (make clean && make) + * + * @file */ -/** */ -global \$utfCompatibilityDecomp; -\$utfCompatibilityDecomp = unserialize( '$serCompat' ); + +UtfNormal::\$utfCompatibilityDecomp = unserialize( '$serCompat' ); \n"; fputs( $out, $outdata ); fclose( $out ); diff --git a/includes/normal/UtfNormalTest.php b/includes/normal/UtfNormalTest.php index ee1da4d0..f78775ce 100644 --- a/includes/normal/UtfNormalTest.php +++ b/includes/normal/UtfNormalTest.php @@ -1,29 +1,30 @@ -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - /** * Implements the conformance test at: * http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt + * + * Copyright © 2004 Brion Vibber + * http://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file * @ingroup UtfNormal */ -/** */ $verbose = true; #define( 'PRETTY_UTF8', true ); @@ -87,7 +88,7 @@ while( false !== ( $line = fgets( $in ) ) ) { $testedChars[$columns[1]] = true; $total++; - if( testNormals( $normalizer, $columns, $comment ) ) { + if( testNormals( $normalizer, $columns, $comment, $verbose ) ) { $success++; } else { $failure++; @@ -119,7 +120,7 @@ while( false !== ($line = fgets( $in ) ) ) { } if( empty( $testedChars[$char] ) ) { $total++; - if( testInvariant( $normalizer, $char, $desc ) ) { + if( testInvariant( $normalizer, $char, $desc, $verbose ) ) { $success++; } else { $failure++; @@ -154,17 +155,16 @@ function reportResults( &$total, &$success, &$failure ) { return $ok; } -function testNormals( &$u, $c, $comment, $reportFailure = false ) { +function testNormals( &$u, $c, $comment, $verbose, $reportFailure = false ) { $result = testNFC( $u, $c, $comment, $reportFailure ); $result = testNFD( $u, $c, $comment, $reportFailure ) && $result; $result = testNFKC( $u, $c, $comment, $reportFailure ) && $result; $result = testNFKD( $u, $c, $comment, $reportFailure ) && $result; $result = testCleanUp( $u, $c, $comment, $reportFailure ) && $result; - global $verbose; if( $verbose && !$result && !$reportFailure ) { print $comment; - testNormals( $u, $c, $comment, true ); + testNormals( $u, $c, $comment, $verbose, true ); } return $result; } @@ -232,16 +232,16 @@ function testNFKD( &$u, $c, $comment, $verbose ) { return $result; } -function testInvariant( &$u, $char, $desc, $reportFailure = false ) { +function testInvariant( &$u, $char, $desc, $verbose, $reportFailure = false ) { $result = verbosify( $char, $u->toNFC( $char ), 1, 'NFC', $reportFailure ); $result = verbosify( $char, $u->toNFD( $char ), 1, 'NFD', $reportFailure ) && $result; $result = verbosify( $char, $u->toNFKC( $char ), 1, 'NFKC', $reportFailure ) && $result; $result = verbosify( $char, $u->toNFKD( $char ), 1, 'NFKD', $reportFailure ) && $result; $result = verbosify( $char, $u->cleanUp( $char ), 1, 'cleanUp', $reportFailure ) && $result; - global $verbose; + if( $verbose && !$result && !$reportFailure ) { print $desc; - testInvariant( $u, $char, $desc, true ); + testInvariant( $u, $char, $desc, $verbose, true ); } return $result; } diff --git a/includes/normal/UtfNormalTest2.php b/includes/normal/UtfNormalTest2.php new file mode 100644 index 00000000..fafd5475 --- /dev/null +++ b/includes/normal/UtfNormalTest2.php @@ -0,0 +1,239 @@ +#!/usr/bin/php +> 6) . chr(0x80 | $c & 0x3F); + } else if ($c <= 0xFFFF) { + return chr(0xE0 | $c >> 12) . chr(0x80 | $c >> 6 & 0x3F) + . chr(0x80 | $c & 0x3F); + } else if ($c <= 0x10FFFF) { + return chr(0xF0 | $c >> 18) . chr(0x80 | $c >> 12 & 0x3F) + . chr(0x80 | $c >> 6 & 0x3F) + . chr(0x80 | $c & 0x3F); + } else { + return false; + } +} + +function unistr($c) { + return implode("", array_map("unichr", array_map("hexdec", explode(" ", $c)))); +} + +function getRow( $f ) { + $row = fgets( $f ); + if( $row === false ) return false; + $row = rtrim($row); + $pos = strpos( $row, COMMENT ); + $pos2 = strpos( $row, ")" ); + if( $pos === 0 ) return array($row); + $c = ""; + + if( $pos ) { + if($pos2) $c = substr( $row, $pos2 + 2 ); + else $c = substr( $row, $pos ); + $row = substr( $row, 0, $pos ); + } + + $ret = array(); + foreach( explode( SEPARATOR, $row ) as $ent ) { + if( trim( $ent ) !== "" ) { + $ret[] = unistr($ent); + } + } + $ret[] = $c; + + return $ret; +} diff --git a/includes/normal/UtfNormalUtil.php b/includes/normal/UtfNormalUtil.php index d772a203..0c78e5ec 100644 --- a/includes/normal/UtfNormalUtil.php +++ b/includes/normal/UtfNormalUtil.php @@ -1,31 +1,30 @@ -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - /** * Some of these functions are adapted from places in MediaWiki. * Should probably merge them for consistency. * + * Copyright © 2004 Brion Vibber + * http://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file * @ingroup UtfNormal - * @public */ -/** */ require_once dirname(__FILE__).'/UtfNormalDefines.php'; /** diff --git a/includes/parser/CoreLinkFunctions.php b/includes/parser/CoreLinkFunctions.php index d6d11880..913ec22b 100644 --- a/includes/parser/CoreLinkFunctions.php +++ b/includes/parser/CoreLinkFunctions.php @@ -1,4 +1,9 @@ setFunctionHook( 'int', array( __CLASS__, 'intFunction' ), SFH_NO_HASH ); @@ -81,7 +86,7 @@ class CoreParserFunctions { static function intFunction( $parser, $part1 = '' /*, ... */ ) { if ( strval( $part1 ) !== '' ) { $args = array_slice( func_get_args(), 2 ); - $message = wfMsgGetKey( $part1, true, false, false ); + $message = wfMsgGetKey( $part1, true, $parser->getOptions()->getUserLang(), false ); $message = wfMsgReplaceArgs( $message, $args ); $message = $parser->replaceVariables( $message ); // like $wgMessageCache->transform() return $message; @@ -95,7 +100,7 @@ class CoreParserFunctions { $date = trim( $date ); - $pref = $parser->mOptions->getDateFormat(); + $pref = $parser->getOptions()->getDateFormat(); // Specify a different default date format other than the the normal default // iff the user has 'default' for their setting @@ -124,8 +129,37 @@ class CoreParserFunctions { return wfUrlencode( str_replace( ' ', '_', self::ns( $parser, $part1 ) ) ); } - static function urlencode( $parser, $s = '' ) { - return urlencode( $s ); + /** + * urlencodes a string according to one of three patterns: (bug 22474) + * + * By default (for HTTP "query" strings), spaces are encoded as '+'. + * Or to encode a value for the HTTP "path", spaces are encoded as '%20'. + * For links to "wiki"s, or similar software, spaces are encoded as '_', + * + * @param $parser Parser object + * @param $s String: The text to encode. + * @param $arg String (optional): The type of encoding. + */ + static function urlencode( $parser, $s = '', $arg = null ) { + static $magicWords = null; + if ( is_null( $magicWords ) ) { + $magicWords = new MagicWordArray( array( 'url_path', 'url_query', 'url_wiki' ) ); + } + switch( $magicWords->matchStartToEnd( $arg ) ) { + + // Encode as though it's a wiki page, '_' for ' '. + case 'url_wiki': + return wfUrlencode( str_replace( ' ', '_', $s ) ); + + // Encode for an HTTP Path, '%20' for ' '. + case 'url_path': + return rawurlencode( $s ); + + // Encode for HTTP query, '+' for ' '. + case 'url_query': + default: + return urlencode( $s ); + } } static function lcfirst( $parser, $s = '' ) { @@ -214,7 +248,7 @@ class CoreParserFunctions { $user = User::newFromName( $user ); if ( $user ) { $gender = $user->getOption( 'gender' ); - } elseif ( $parser->mOptions->getInterfaceMessage() ) { + } elseif ( $parser->getOptions()->getInterfaceMessage() ) { global $wgUser; $gender = $wgUser->getOption( 'gender' ); } @@ -553,17 +587,14 @@ class CoreParserFunctions { } static function anchorencode( $parser, $text ) { - $a = urlencode( $text ); - $a = strtr( $a, array( '%' => '.', '+' => '_' ) ); - # leave colons alone, however - $a = str_replace( '.3A', ':', $a ); - return $a; + return substr( $parser->guessSectionNameFromWikiText( $text ), 1); } static function special( $parser, $text ) { - $title = SpecialPage::getTitleForAlias( $text ); - if ( $title ) { - return $title->getPrefixedText(); + list( $page, $subpage ) = SpecialPage::resolveAliasWithSubpage( $text ); + if ( $page ) { + $title = SpecialPage::getTitleFor( $page, $subpage ); + return $title; } else { return wfMsgForContent( 'nosuchspecialpage' ); } @@ -579,7 +610,7 @@ class CoreParserFunctions { return ''; else return( '' . - wfMsg( 'duplicate-defaultsort', + wfMsgForContent( 'duplicate-defaultsort', htmlspecialchars( $old ), htmlspecialchars( $text ) ) . '' ); @@ -602,7 +633,6 @@ class CoreParserFunctions { * Parser function to extension tag adaptor */ public static function tagObj( $parser, $frame, $args ) { - $xpath = false; if ( !count( $args ) ) { return ''; } @@ -617,7 +647,7 @@ class CoreParserFunctions { $stripList = $parser->getStripList(); if ( !in_array( $tagName, $stripList ) ) { return '' . - wfMsg( 'unknown_extension_tag', $tagName ) . + wfMsgForContent( 'unknown_extension_tag', $tagName ) . ''; } diff --git a/includes/parser/CoreTagHooks.php b/includes/parser/CoreTagHooks.php index 7cc8260e..33f3c824 100644 --- a/includes/parser/CoreTagHooks.php +++ b/includes/parser/CoreTagHooks.php @@ -1,5 +1,14 @@ armourMath( MathRenderer::renderMath( $content, $attributes ) ); + return $wgContLang->armourMath( MathRenderer::renderMath( $content, $attributes, $parser->getOptions() ) ); } static function gallery( $content, $attributes, $parser ) { diff --git a/includes/parser/DateFormatter.php b/includes/parser/DateFormatter.php index 602bcff3..cf510171 100644 --- a/includes/parser/DateFormatter.php +++ b/includes/parser/DateFormatter.php @@ -1,4 +1,9 @@ monthNames = $this->getMonthRegex(); @@ -116,6 +121,7 @@ class DateFormatter /** * @param $preference String: User preference * @param $text String: Text to reformat + * @param $options Array: can contain 'linked' and/or 'match-whole' */ function reformat( $preference, $text, $options = array('linked') ) { @@ -265,7 +271,7 @@ class DateFormatter $isoBits[] = $bits['y']; $isoBits[] = $bits['m']; $isoBits[] = $bits['d']; - $isoDate = implode( '-', $isoBits );; + $isoDate = implode( '-', $isoBits ); // Output is not strictly HTML (it's wikitext), but is whitelisted. $text = Html::rawElement( 'span', diff --git a/includes/parser/LinkHolderArray.php b/includes/parser/LinkHolderArray.php index 4f382a4f..19313b80 100644 --- a/includes/parser/LinkHolderArray.php +++ b/includes/parser/LinkHolderArray.php @@ -1,5 +1,13 @@ stubThreshold ) ) { - $this->stubThreshold = $wgUser->getOption('stubthreshold'); + $this->stubThreshold = $wgUser->getStubThreshold(); } return $this->stubThreshold; } @@ -132,7 +140,7 @@ class LinkHolderArray { global $wgContLang; $colours = array(); - $sk = $this->parent->getOptions()->getSkin(); + $sk = $this->parent->getOptions()->getSkin( $this->parent->mTitle ); $linkCache = LinkCache::singleton(); $output = $this->parent->getOutput(); @@ -144,12 +152,13 @@ class LinkHolderArray { # Sort by namespace ksort( $this->internals ); + $linkcolour_ids = array(); + # Generate query $query = false; $current = null; foreach ( $this->internals as $ns => $entries ) { - foreach ( $entries as $index => $entry ) { - $key = "$ns:$index"; + foreach ( $entries as $entry ) { $title = $entry['title']; $pdbk = $entry['pdbk']; @@ -162,16 +171,19 @@ class LinkHolderArray { # Check if it's a static known link, e.g. interwiki if ( $title->isAlwaysKnown() ) { $colours[$pdbk] = ''; + } elseif ( $ns == NS_SPECIAL ) { + $colours[$pdbk] = 'new'; } elseif ( ( $id = $linkCache->getGoodLinkID( $pdbk ) ) != 0 ) { $colours[$pdbk] = $sk->getLinkColour( $title, $threshold ); $output->addLink( $title, $id ); + $linkcolour_ids[$id] = $pdbk; } elseif ( $linkCache->isBadLink( $pdbk ) ) { $colours[$pdbk] = 'new'; } else { # Not in the link cache, add it to the query if ( !isset( $current ) ) { $current = $ns; - $query = "SELECT page_id, page_namespace, page_title, page_is_redirect, page_len"; + $query = "SELECT page_id, page_namespace, page_title, page_is_redirect, page_len, page_latest"; $query .= " FROM $page WHERE (page_namespace=$ns AND page_title IN("; } elseif ( $current != $ns ) { $current = $ns; @@ -191,11 +203,10 @@ class LinkHolderArray { # Fetch data and form into an associative array # non-existent = broken - $linkcolour_ids = array(); - while ( $s = $dbr->fetchObject($res) ) { + foreach ( $res as $s ) { $title = Title::makeTitle( $s->page_namespace, $s->page_title ); $pdbk = $title->getPrefixedDBkey(); - $linkCache->addGoodLinkObj( $s->page_id, $title, $s->page_len, $s->page_is_redirect ); + $linkCache->addGoodLinkObj( $s->page_id, $title, $s->page_len, $s->page_is_redirect, $s->page_latest ); $output->addLink( $title, $s->page_id ); # FIXME: convoluted data flow # The redirect status and length is passed to getLinkColour via the LinkCache @@ -205,6 +216,8 @@ class LinkHolderArray { $linkcolour_ids[$s->page_id] = $pdbk; } unset( $res ); + } + if ( count($linkcolour_ids) ) { //pass an array of page_ids to an extension wfRunHooks( 'GetLinkColours', array( $linkcolour_ids, &$colours ) ); } @@ -265,10 +278,12 @@ class LinkHolderArray { wfProfileIn( __METHOD__ ); # Make interwiki link HTML - $sk = $this->parent->getOptions()->getSkin(); + $sk = $this->parent->getOptions()->getSkin( $this->parent->mTitle ); + $output = $this->parent->getOutput(); $replacePairs = array(); foreach( $this->interwikis as $key => $link ) { $replacePairs[$key] = $sk->link( $link['title'], $link['text'] ); + $output->addInterwikiLink( $link['title'] ); } $replacer = new HashtableReplacer( $replacePairs, 1 ); @@ -288,30 +303,52 @@ class LinkHolderArray { $variantMap = array(); // maps $pdbkey_Variant => $keys (of link holders) $output = $this->parent->getOutput(); $linkCache = LinkCache::singleton(); - $sk = $this->parent->getOptions()->getSkin(); + $sk = $this->parent->getOptions()->getSkin( $this->parent->mTitle ); $threshold = $this->getStubThreshold(); - - // Add variants of links to link batch + $titlesToBeConverted = ''; + $titlesAttrs = array(); + + // Concatenate titles to a single string, thus we only need auto convert the + // single string to all variants. This would improve parser's performance + // significantly. foreach ( $this->internals as $ns => $entries ) { foreach ( $entries as $index => $entry ) { - $key = "$ns:$index"; $pdbk = $entry['pdbk']; - $title = $entry['title']; - $titleText = $title->getText(); - - // generate all variants of the link title text - $allTextVariants = $wgContLang->convertLinkToAllVariants($titleText); - - // if link was not found (in first query), add all variants to query - if ( !isset($colours[$pdbk]) ){ - foreach($allTextVariants as $textVariant){ - if($textVariant != $titleText){ - $variantTitle = Title::makeTitle( $ns, $textVariant ); - if(is_null($variantTitle)) continue; - $linkBatch->addObj( $variantTitle ); - $variantMap[$variantTitle->getPrefixedDBkey()][] = $key; - } + // we only deal with new links (in its first query) + if ( !isset( $colours[$pdbk] ) ) { + $title = $entry['title']; + $titleText = $title->getText(); + $titlesAttrs[] = array( + 'ns' => $ns, + 'key' => "$ns:$index", + 'titleText' => $titleText, + ); + // separate titles with \0 because it would never appears + // in a valid title + $titlesToBeConverted .= $titleText . "\0"; + } + } + } + + // Now do the conversion and explode string to text of titles + $titlesAllVariants = $wgContLang->autoConvertToAllVariants( $titlesToBeConverted ); + $allVariantsName = array_keys( $titlesAllVariants ); + foreach ( $titlesAllVariants as &$titlesVariant ) { + $titlesVariant = explode( "\0", $titlesVariant ); + } + $l = count( $titlesAttrs ); + // Then add variants of links to link batch + for ( $i = 0; $i < $l; $i ++ ) { + foreach ( $allVariantsName as $variantName ) { + $textVariant = $titlesAllVariants[$variantName][$i]; + extract( $titlesAttrs[$i] ); + if($textVariant != $titleText){ + $variantTitle = Title::makeTitle( $ns, $textVariant ); + if( is_null( $variantTitle ) ) { + continue; } + $linkBatch->addObj( $variantTitle ); + $variantMap[$variantTitle->getPrefixedDBkey()][] = $titlesAttrs[$i]['key']; } } } @@ -320,7 +357,7 @@ class LinkHolderArray { $categoryMap = array(); // maps $category_variant => $category (dbkeys) $varCategories = array(); // category replacements oldDBkey => newDBkey foreach( $output->getCategoryLinks() as $category ){ - $variants = $wgContLang->convertLinkToAllVariants($category); + $variants = $wgContLang->autoConvertToAllVariants( $category ); foreach($variants as $variant){ if($variant != $category){ $variantTitle = Title::newFromDBkey( Title::makeName(NS_CATEGORY,$variant) ); @@ -343,7 +380,7 @@ class LinkHolderArray { $linkcolour_ids = array(); // for each found variants, figure out link holders and replace - while ( $s = $dbr->fetchObject($varRes) ) { + foreach ( $varRes as $s ) { $variantTitle = Title::makeTitle( $s->page_namespace, $s->page_title ); $varPdbk = $variantTitle->getPrefixedDBkey(); @@ -403,8 +440,9 @@ class LinkHolderArray { /** * Replace link placeholders with plain text of links * (not HTML-formatted). - * @param string $text - * @return string + * + * @param $text String + * @return String */ function replaceText( $text ) { wfProfileIn( __METHOD__ ); @@ -419,7 +457,9 @@ class LinkHolderArray { } /** - * @param array $matches + * Callback for replaceText() + * + * @param $matches Array * @return string * @private */ diff --git a/includes/parser/Parser.php b/includes/parser/Parser.php index 4f672f5b..4a3aa03b 100644 --- a/includes/parser/Parser.php +++ b/includes/parser/Parser.php @@ -17,15 +17,17 @@ *
      * There are five main entry points into the Parser class:
      * parse()
    - *   produces HTML output
    + *     produces HTML output
      * preSaveTransform().
    - *   produces altered wiki markup.
    + *     produces altered wiki markup.
      * preprocess()
    - *   removes HTML comments and expands templates
    - * cleanSig()
    - *   Cleans a signature before saving it to preferences
    + *     removes HTML comments and expands templates
    + * cleanSig() / cleanSigInSig()
    + *     Cleans a signature before saving it to preferences
      * extractSections()
    - *   Extracts sections from an article for section editing
    + *     Extracts sections from an article for section editing
    + * getPreloadText()
    + *     Removes  sections, and  tags.
      *
      * Globals used:
      *    objects:   $wgLang, $wgContLang
    @@ -43,8 +45,7 @@
      *
      * @ingroup Parser
      */
    -class Parser
    -{
    +class Parser {
     	/**
     	 * Update this version number when the ParserOutput format
     	 * changes in an incompatible way, so the parser cache
    @@ -63,7 +64,7 @@ class Parser
     	const EXT_IMAGE_REGEX = '/^(http:\/\/|https:\/\/)([^][<>"\\x00-\\x20\\x7F]+)
     		\\/([A-Za-z0-9_.,~%\\-+&;#*?!=()@\\x80-\\xFF]+)\\.((?i)gif|png|jpg|jpeg)$/Sx';
     
    -	// State constants for the definition list colon extraction
    +	# State constants for the definition list colon extraction
     	const COLON_STATE_TEXT = 0;
     	const COLON_STATE_TAG = 1;
     	const COLON_STATE_TAGSTART = 2;
    @@ -73,27 +74,25 @@ class Parser
     	const COLON_STATE_COMMENTDASH = 6;
     	const COLON_STATE_COMMENTDASHDASH = 7;
     
    -	// Flags for preprocessToDom
    +	# Flags for preprocessToDom
     	const PTD_FOR_INCLUSION = 1;
     
    -	// Allowed values for $this->mOutputType
    -	// Parameter to startExternalParse().
    -	const OT_HTML = 1;
    -	const OT_WIKI = 2;
    -	const OT_PREPROCESS = 3;
    +	# Allowed values for $this->mOutputType
    +	# Parameter to startExternalParse().
    +	const OT_HTML = 1; # like parse()
    +	const OT_WIKI = 2; # like preSaveTransform()
    +	const OT_PREPROCESS = 3; # like preprocess()
     	const OT_MSG = 3;
    +	const OT_PLAIN = 4; # like extractSections() - portions of the original are returned unchanged.
     
    -	// Marker Suffix needs to be accessible staticly.
    +	# Marker Suffix needs to be accessible staticly.
     	const MARKER_SUFFIX = "-QINU\x7f";
     
    -	/**#@+
    -	 * @private
    -	 */
     	# Persistent:
    -	var $mTagHooks, $mTransparentTagHooks, $mFunctionHooks, $mFunctionSynonyms, $mVariables,
    -		$mSubstWords, $mImageParams, $mImageParamsMagicArray, $mStripList, $mMarkerIndex,
    -		$mPreprocessor, $mExtLinkBracketedRegex, $mUrlProtocols, $mDefaultStripList,
    -		$mVarCache, $mConf, $mFunctionTagHooks;
    +	var $mTagHooks, $mTransparentTagHooks, $mFunctionHooks, $mFunctionSynonyms, $mVariables;
    +	var $mSubstWords, $mImageParams, $mImageParamsMagicArray, $mStripList, $mMarkerIndex;
    +	var $mPreprocessor, $mExtLinkBracketedRegex, $mUrlProtocols, $mDefaultStripList;
    +	var $mVarCache, $mConf, $mFunctionTagHooks;
     
     
     	# Cleared with clearState():
    @@ -101,21 +100,19 @@ class Parser
     	var $mIncludeCount, $mArgStack, $mLastSection, $mInPre;
     	var $mLinkHolders, $mLinkID;
     	var $mIncludeSizes, $mPPNodeCount, $mDefaultSort;
    -	var $mTplExpandCache; // empty-frame expansion cache
    +	var $mTplExpandCache; # empty-frame expansion cache
     	var $mTplRedirCache, $mTplDomCache, $mHeadings, $mDoubleUnderscores;
    -	var $mExpensiveFunctionCount; // number of expensive parser function calls
    +	var $mExpensiveFunctionCount; # number of expensive parser function calls
     
     	# Temporary
     	# These are variables reset at least once per parse regardless of $clearState
    -	var $mOptions,      // ParserOptions object
    -		$mTitle,        // Title context, used for self-link rendering and similar things
    -		$mOutputType,   // Output type, one of the OT_xxx constants
    -		$ot,            // Shortcut alias, see setOutputType()
    -		$mRevisionId,   // ID to display in {{REVISIONID}} tags
    -		$mRevisionTimestamp, // The timestamp of the specified revision ID
    -		$mRevIdForTs;   // The revision ID which was used to fetch the timestamp
    -
    -	/**#@-*/
    +	var $mOptions;      # ParserOptions object
    +	var $mTitle;        # Title context, used for self-link rendering and similar things
    +	var $mOutputType;   # Output type, one of the OT_xxx constants
    +	var $ot;            # Shortcut alias, see setOutputType()
    +	var $mRevisionId;   # ID to display in {{REVISIONID}} tags
    +	var $mRevisionTimestamp; # The timestamp of the specified revision ID
    +	var $mRevIdForTs;   # The revision ID which was used to fetch the timestamp
     
     	/**
     	 * Constructor
    @@ -132,12 +129,12 @@ class Parser
     		$this->mDefaultStripList = $this->mStripList = array();
     		$this->mUrlProtocols = wfUrlProtocols();
     		$this->mExtLinkBracketedRegex = '/\[(\b(' . wfUrlProtocols() . ')'.
    -			'[^][<>"\\x00-\\x20\\x7F]+) *([^\]\\x0a\\x0d]*?)\]/S';
    +			'[^][<>"\\x00-\\x20\\x7F]+) *([^\]\\x00-\\x08\\x0a-\\x1F]*?)\]/S';
     		$this->mVarCache = array();
     		if ( isset( $conf['preprocessorClass'] ) ) {
     			$this->mPreprocessorClass = $conf['preprocessorClass'];
     		} elseif ( extension_loaded( 'domxml' ) ) {
    -			// PECL extension that conflicts with the core DOM extension (bug 13770)
    +			# PECL extension that conflicts with the core DOM extension (bug 13770)
     			wfDebug( "Warning: you have the obsolete domxml extension for PHP. Please remove it!\n" );
     			$this->mPreprocessorClass = 'Preprocessor_Hash';
     		} elseif ( extension_loaded( 'dom' ) ) {
    @@ -191,6 +188,7 @@ class Parser
     			$this->firstCallInit();
     		}
     		$this->mOutput = new ParserOutput;
    +		$this->mOptions->registerWatcher( array( $this->mOutput, 'recordOption' ) );
     		$this->mAutonumber = 0;
     		$this->mLastSection = '';
     		$this->mDTopen = false;
    @@ -213,7 +211,7 @@ class Parser
     		 * Must not consist of all title characters, or else it will change
     		 * the behaviour of  in a link.
     		 */
    -		#$this->mUniqPrefix = "\x07UNIQ" . Parser::getRandomString();
    +		# $this->mUniqPrefix = "\x07UNIQ" . Parser::getRandomString();
     		# Changed to \x7f to allow XML double-parsing -- TS
     		$this->mUniqPrefix = "\x7fUNIQ" . self::getRandomString();
     
    @@ -242,51 +240,6 @@ class Parser
     		wfProfileOut( __METHOD__ );
     	}
     
    -	function setOutputType( $ot ) {
    -		$this->mOutputType = $ot;
    -		// Shortcut alias
    -		$this->ot = array(
    -			'html' => $ot == self::OT_HTML,
    -			'wiki' => $ot == self::OT_WIKI,
    -			'pre' => $ot == self::OT_PREPROCESS,
    -		);
    -	}
    -
    -	/**
    -	 * Set the context title
    -	 */
    -	function setTitle( $t ) {
    - 		if ( !$t || $t instanceof FakeTitle ) {
    - 			$t = Title::newFromText( 'NO TITLE' );
    - 		}
    -
    -		if ( strval( $t->getFragment() ) !== '' ) {
    -			# Strip the fragment to avoid various odd effects
    -			$this->mTitle = clone $t;
    -			$this->mTitle->setFragment( '' );
    -		} else {
    -			$this->mTitle = $t;
    -		}
    -	}
    -
    -	/**
    -	 * Accessor for mUniqPrefix.
    -	 *
    -	 * @public
    -	 */
    -	function uniqPrefix() {
    -		if( !isset( $this->mUniqPrefix ) ) {
    -			// @todo Fixme: this is probably *horribly wrong*
    -			// LanguageConverter seems to want $wgParser's uniqPrefix, however
    -			// if this is called for a parser cache hit, the parser may not
    -			// have ever been initialized in the first place.
    -			// Not really sure what the heck is supposed to be going on here.
    -			return '';
    -			//throw new MWException( "Accessing uninitialized mUniqPrefix" );
    -		}
    -		return $this->mUniqPrefix;
    -	}
    -
     	/**
     	 * Convert wikitext to HTML
     	 * Do not call this function recursively.
    @@ -310,16 +263,16 @@ class Parser
     		wfProfileIn( __METHOD__ );
     		wfProfileIn( $fname );
     
    +		$this->mOptions = $options;
     		if ( $clearState ) {
     			$this->clearState();
     		}
     
    -		$this->mOptions = $options;
    -		$this->setTitle( $title ); // Page title has to be set for the pre-processor
    +		$this->setTitle( $title ); # Page title has to be set for the pre-processor
     
     		$oldRevisionId = $this->mRevisionId;
     		$oldRevisionTimestamp = $this->mRevisionTimestamp;
    -		if( $revid !== null ) {
    +		if ( $revid !== null ) {
     			$this->mRevisionId = $revid;
     			$this->mRevisionTimestamp = null;
     		}
    @@ -335,12 +288,12 @@ class Parser
     		$fixtags = array(
     			# french spaces, last one Guillemet-left
     			# only if there is something before the space
    -			'/(.) (?=\\?|:|;|!|%|\\302\\273)/' => '\\1 \\2',
    +			'/(.) (?=\\?|:|;|!|%|\\302\\273)/' => '\\1 \\2',
     			# french spaces, Guillemet-right
    -			'/(\\302\\253) /' => '\\1 ',
    -			'/ (!\s*important)/' => ' \\1', #Beware of CSS magic word !important, bug #11874.
    +			'/(\\302\\253) /' => '\\1 ',
    +			'/ (!\s*important)/' => ' \\1', # Beware of CSS magic word !important, bug #11874.
     		);
    -		$text = preg_replace( array_keys($fixtags), array_values($fixtags), $text );
    +		$text = preg_replace( array_keys( $fixtags ), array_values( $fixtags ), $text );
     
     		$text = $this->doBlockLevels( $text, $linestart );
     
    @@ -364,18 +317,11 @@ class Parser
     		}
     
     		/**
    -		 * A page get its title converted except:
    -		 * a) Language conversion is globally disabled
    -		 * b) Title convert is globally disabled
    -		 * c) The page is a redirect page
    -		 * d) User request with a "linkconvert" set to "no"
    -		 * e) A "nocontentconvert" magic word has been set
    -		 * f) A "notitleconvert" magic word has been set
    -		 * g) User sets "noconvertlink" in his/her preference
    -		 *
    -		 * Note that if a user tries to set a title in a conversion
    -		 * rule but content conversion was not done, then the parser
    -		 * won't pick it up.  This is probably expected behavior.
    +		 * A converted title will be provided in the output object if title and
    +		 * content conversion are enabled, the article text does not contain
    +		 * a conversion-suppressing double-underscore tag, and no
    +		 * {{DISPLAYTITLE:...}} is present. DISPLAYTITLE takes precedence over
    +		 * automatic link conversion.
     		 */
     		if ( !( $wgDisableLangConversion
     				|| $wgDisableTitleConversion
    @@ -401,14 +347,13 @@ class Parser
     		$uniq_prefix = $this->mUniqPrefix;
     		$matches = array();
     		$elements = array_keys( $this->mTransparentTagHooks );
    -		$text = self::extractTagsAndParams( $elements, $text, $matches, $uniq_prefix );
    +		$text = $this->extractTagsAndParams( $elements, $text, $matches, $uniq_prefix );
     
    -		foreach( $matches as $marker => $data ) {
    +		foreach ( $matches as $marker => $data ) {
     			list( $element, $content, $params, $tag ) = $data;
     			$tagName = strtolower( $element );
    -			if( isset( $this->mTransparentTagHooks[$tagName] ) ) {
    -				$output = call_user_func_array( $this->mTransparentTagHooks[$tagName],
    -					array( $content, $params, $this ) );
    +			if ( isset( $this->mTransparentTagHooks[$tagName] ) ) {
    +				$output = call_user_func_array( $this->mTransparentTagHooks[$tagName], array( $content, $params, $this ) );
     			} else {
     				$output = $tag;
     			}
    @@ -418,7 +363,7 @@ class Parser
     
     		$text = Sanitizer::normalizeCharReferences( $text );
     
    -		if ( ( $wgUseTidy && $this->mOptions->mTidy ) || $wgAlwaysUseTidy ) {
    +		if ( ( $wgUseTidy && $this->mOptions->getTidy() ) || $wgAlwaysUseTidy ) {
     			$text = MWTidy::tidy( $text );
     		} else {
     			# attempt to sanitize at least some nesting problems
    @@ -460,7 +405,7 @@ class Parser
     			$PFreport = "Expensive parser function count: {$this->mExpensiveFunctionCount}/$wgExpensiveParserFunctionLimit\n";
     			$limitReport =
     				"NewPP limit report\n" .
    -				"Preprocessor node count: {$this->mPPNodeCount}/{$this->mOptions->mMaxPPNodeCount}\n" .
    +				"Preprocessor node count: {$this->mPPNodeCount}/{$this->mOptions->getMaxPPNodeCount()}\n" .
     				"Post-expand include size: {$this->mIncludeSizes['post-expand']}/$max bytes\n" .
     				"Template argument size: {$this->mIncludeSizes['arg']}/$max bytes\n".
     				$PFreport;
    @@ -484,7 +429,7 @@ class Parser
     	 * If $frame is not provided, then template variables (e.g., {{{1}}}) within $text are not expanded
     	 *
     	 * @param $text String: text extension wants to have parsed
    -	 * @param PPFrame $frame: The frame to use for expanding any template variables
    +	 * @param $frame PPFrame: The frame to use for expanding any template variables
     	 */
     	function recursiveTagParse( $text, $frame=false ) {
     		wfProfileIn( __METHOD__ );
    @@ -499,13 +444,13 @@ class Parser
     	 * Expand templates and variables in the text, producing valid, static wikitext.
     	 * Also removes comments.
     	 */
    -	function preprocess( $text, $title, $options, $revid = null ) {
    +	function preprocess( $text, Title $title, ParserOptions $options, $revid = null ) {
     		wfProfileIn( __METHOD__ );
    +		$this->mOptions = $options;
     		$this->clearState();
     		$this->setOutputType( self::OT_PREPROCESS );
    -		$this->mOptions = $options;
     		$this->setTitle( $title );
    -		if( $revid !== null ) {
    +		if ( $revid !== null ) {
     			$this->mRevisionId = $revid;
     		}
     		wfRunHooks( 'ParserBeforeStrip', array( &$this, &$text, &$this->mStripState ) );
    @@ -516,21 +461,147 @@ class Parser
     		return $text;
     	}
     
    +	/**
    +	 * Process the wikitext for the ?preload= feature. (bug 5210)
    +	 *
    +	 * ,  etc. are parsed as for template transclusion,
    +	 * comments, templates, arguments, tags hooks and parser functions are untouched.
    +	 */
    +	public function getPreloadText( $text, Title $title, ParserOptions $options ) {
    +		# Parser (re)initialisation
    +		$this->mOptions = $options;
    +		$this->clearState();
    +		$this->setOutputType( self::OT_PLAIN );
    +		$this->setTitle( $title );
    +
    +		$flags = PPFrame::NO_ARGS | PPFrame::NO_TEMPLATES;
    +		$dom = $this->preprocessToDom( $text, self::PTD_FOR_INCLUSION );
    +		$text = $this->getPreprocessor()->newFrame()->expand( $dom, $flags );
    +		$text = $this->mStripState->unstripBoth( $text );
    +		return $text;
    +	}
    +
     	/**
     	 * Get a random string
     	 *
     	 * @private
     	 * @static
     	 */
    -	function getRandomString() {
    -		return dechex(mt_rand(0, 0x7fffffff)) . dechex(mt_rand(0, 0x7fffffff));
    +	static private function getRandomString() {
    +		return dechex( mt_rand( 0, 0x7fffffff ) ) . dechex( mt_rand( 0, 0x7fffffff ) );
    +	}
    +
    +	/**
    +	 * Accessor for mUniqPrefix.
    +	 *
    +	 * @return String
    +	 */
    +	public function uniqPrefix() {
    +		if ( !isset( $this->mUniqPrefix ) ) {
    +			# @todo Fixme: this is probably *horribly wrong*
    +			# LanguageConverter seems to want $wgParser's uniqPrefix, however
    +			# if this is called for a parser cache hit, the parser may not
    +			# have ever been initialized in the first place.
    +			# Not really sure what the heck is supposed to be going on here.
    +			return '';
    +			# throw new MWException( "Accessing uninitialized mUniqPrefix" );
    +		}
    +		return $this->mUniqPrefix;
    +	}
    +
    +	/**
    +	 * Set the context title
    +	 */
    +	function setTitle( $t ) {
    + 		if ( !$t || $t instanceof FakeTitle ) {
    + 			$t = Title::newFromText( 'NO TITLE' );
    + 		}
    +
    +		if ( strval( $t->getFragment() ) !== '' ) {
    +			# Strip the fragment to avoid various odd effects
    +			$this->mTitle = clone $t;
    +			$this->mTitle->setFragment( '' );
    +		} else {
    +			$this->mTitle = $t;
    +		}
    +	}
    +
    +	/**
    +	 * Accessor for the Title object
    +	 *
    +	 * @return Title object
    +	 */
    +	function getTitle() {
    +		return $this->mTitle;
    +	}
    +
    +	/**
    +	 * Accessor/mutator for the Title object
    +	 *
    +	 * @param $x New Title object or null to just get the current one
    +	 * @return Title object
    +	 */
    +	function Title( $x = null ) {
    +		return wfSetVar( $this->mTitle, $x );
    +	}
    +
    +	/**
    +	 * Set the output type
    +	 *
    +	 * @param $ot Integer: new value
    +	 */
    +	function setOutputType( $ot ) {
    +		$this->mOutputType = $ot;
    +		# Shortcut alias
    +		$this->ot = array(
    +			'html' => $ot == self::OT_HTML,
    +			'wiki' => $ot == self::OT_WIKI,
    +			'pre' => $ot == self::OT_PREPROCESS,
    +			'plain' => $ot == self::OT_PLAIN,
    +		);
     	}
     
    -	function &getTitle() { return $this->mTitle; }
    -	function getOptions() { return $this->mOptions; }
    -	function getRevisionId() { return $this->mRevisionId; }
    -	function getOutput() { return $this->mOutput; }
    -	function nextLinkID() { return $this->mLinkID++; }
    +	/**
    +	 * Accessor/mutator for the output type
    +	 *
    +	 * @param $x New value or null to just get the current one
    +	 * @return Integer
    +	 */
    +	function OutputType( $x = null ) {
    +		return wfSetVar( $this->mOutputType, $x );
    +	}
    +
    +	/**
    +	 * Get the ParserOutput object
    +	 *
    +	 * @return ParserOutput object
    +	 */
    +	function getOutput() {
    +		return $this->mOutput;
    +	}
    +
    +	/**
    +	 * Get the ParserOptions object
    +	 *
    +	 * @return ParserOptions object
    +	 */
    +	function getOptions() {
    +		return $this->mOptions;
    +	}
    +
    +	/**
    +	 * Accessor/mutator for the ParserOptions object
    +	 *
    +	 * @param $x New value or null to just get the current one
    +	 * @return Current ParserOptions object
    +	 */
    +	function Options( $x = null ) {
    +		return wfSetVar( $this->mOptions, $x );
    +	}
    +
    +	function nextLinkID() {
    +		return $this->mLinkID++;
    +	}
     
     	function getFunctionLang() {
     		global $wgLang, $wgContLang;
    @@ -545,6 +616,8 @@ class Parser
     
     	/**
     	 * Get a preprocessor object
    +	 *
    +	 * @return Preprocessor instance
     	 */
     	function getPreprocessor() {
     		if ( !isset( $this->mPreprocessor ) ) {
    @@ -567,12 +640,13 @@ class Parser
     	 *
     	 * @param $elements list of element names. Comments are always extracted.
     	 * @param $text Source text string.
    +	 * @param $matches Out parameter, Array: extracted tags
     	 * @param $uniq_prefix
    +	 * @return String: stripped text
     	 *
    -	 * @public
     	 * @static
     	 */
    -	function extractTagsAndParams($elements, $text, &$matches, $uniq_prefix = ''){
    +	public function extractTagsAndParams( $elements, $text, &$matches, $uniq_prefix = '' ) {
     		static $n = 1;
     		$stripped = '';
     		$matches = array();
    @@ -583,40 +657,40 @@ class Parser
     		while ( $text != '' ) {
     			$p = preg_split( $start, $text, 2, PREG_SPLIT_DELIM_CAPTURE );
     			$stripped .= $p[0];
    -			if( count( $p ) < 5 ) {
    +			if ( count( $p ) < 5 ) {
     				break;
     			}
    -			if( count( $p ) > 5 ) {
    -				// comment
    +			if ( count( $p ) > 5 ) {
    +				# comment
     				$element    = $p[4];
     				$attributes = '';
     				$close      = '';
     				$inside     = $p[5];
     			} else {
    -				// tag
    +				# tag
     				$element    = $p[1];
     				$attributes = $p[2];
     				$close      = $p[3];
     				$inside     = $p[4];
     			}
     
    -			$marker = "$uniq_prefix-$element-" . sprintf('%08X', $n++) . self::MARKER_SUFFIX;
    +			$marker = "$uniq_prefix-$element-" . sprintf( '%08X', $n++ ) . self::MARKER_SUFFIX;
     			$stripped .= $marker;
     
     			if ( $close === '/>' ) {
    -				// Empty element tag, 
    +				# Empty element tag, 
     				$content = null;
     				$text = $inside;
     				$tail = null;
     			} else {
    -				if( $element === '!--' ) {
    +				if ( $element === '!--' ) {
     					$end = '/(-->)/';
     				} else {
     					$end = "/(<\\/$element\\s*>)/i";
     				}
     				$q = preg_split( $end, $inside, 2, PREG_SPLIT_DELIM_CAPTURE );
     				$content = $q[0];
    -				if( count( $q ) < 3 ) {
    +				if ( count( $q ) < 3 ) {
     					# No end tag -- let it run out to the end of the text.
     					$tail = '';
     					$text = '';
    @@ -644,7 +718,7 @@ class Parser
     	/**
     	 * @deprecated use replaceVariables
     	 */
    -	function strip( $text, $state, $stripcomments = false , $dontstrip = array () ) {
    +	function strip( $text, $state, $stripcomments = false , $dontstrip = array() ) {
     		return $text;
     	}
     
    @@ -704,34 +778,35 @@ class Parser
     	 *
     	 * @private
     	 */
    -	function doTableStuff ( $text ) {
    +	function doTableStuff( $text ) {
     		wfProfileIn( __METHOD__ );
    -
    +		
     		$lines = StringUtils::explode( "\n", $text );
     		$out = '';
    -		$td_history = array (); // Is currently a td tag open?
    -		$last_tag_history = array (); // Save history of last lag activated (td, th or caption)
    -		$tr_history = array (); // Is currently a tr tag open?
    -		$tr_attributes = array (); // history of tr attributes
    -		$has_opened_tr = array(); // Did this table open a  element?
    -		$indent_level = 0; // indent level of the table
    +		$td_history = array(); # Is currently a td tag open?
    +		$last_tag_history = array(); # Save history of last lag activated (td, th or caption)
    +		$tr_history = array(); # Is currently a tr tag open?
    +		$tr_attributes = array(); # history of tr attributes
    +		$has_opened_tr = array(); # Did this table open a  element?
    +		$indent_level = 0; # indent level of the table
     
     		foreach ( $lines as $outLine ) {
     			$line = trim( $outLine );
     
    -			if( $line == '' ) { // empty line, go to next line
    +			if ( $line === '' ) { # empty line, go to next line			
     				$out .= $outLine."\n";
     				continue;
     			}
    +
     			$first_character = $line[0];
     			$matches = array();
     
     			if ( preg_match( '/^(:*)\{\|(.*)$/', $line , $matches ) ) {
    -				// First check if we are starting a new table
    +				# First check if we are starting a new table
     				$indent_level = strlen( $matches[1] );
     
     				$attributes = $this->mStripState->unstripBoth( $matches[2] );
    -				$attributes = Sanitizer::fixTagAttributes ( $attributes , 'table' );
    +				$attributes = Sanitizer::fixTagAttributes( $attributes , 'table' );
     
     				$outLine = str_repeat( '
    ' , $indent_level ) . ""; array_push( $td_history , false ); @@ -739,156 +814,152 @@ class Parser array_push( $tr_history , false ); array_push( $tr_attributes , '' ); array_push( $has_opened_tr , false ); - } else if ( count ( $td_history ) == 0 ) { - // Don't do any of the following + } elseif ( count( $td_history ) == 0 ) { + # Don't do any of the following $out .= $outLine."\n"; continue; - } else if ( substr ( $line , 0 , 2 ) === '|}' ) { - // We are ending a table - $line = '' . substr ( $line , 2 ); - $last_tag = array_pop ( $last_tag_history ); + } elseif ( substr( $line , 0 , 2 ) === '|}' ) { + # We are ending a table + $line = '' . substr( $line , 2 ); + $last_tag = array_pop( $last_tag_history ); - if ( !array_pop ( $has_opened_tr ) ) { + if ( !array_pop( $has_opened_tr ) ) { $line = "{$line}"; } - if ( array_pop ( $tr_history ) ) { + if ( array_pop( $tr_history ) ) { $line = "{$line}"; } - if ( array_pop ( $td_history ) ) { + if ( array_pop( $td_history ) ) { $line = "{$line}"; } - array_pop ( $tr_attributes ); + array_pop( $tr_attributes ); $outLine = $line . str_repeat( '
    ' , $indent_level ); - } else if ( substr ( $line , 0 , 2 ) === '|-' ) { - // Now we have a table row + } elseif ( substr( $line , 0 , 2 ) === '|-' ) { + # Now we have a table row $line = preg_replace( '#^\|-+#', '', $line ); - // Whats after the tag is now only attributes + # Whats after the tag is now only attributes $attributes = $this->mStripState->unstripBoth( $line ); $attributes = Sanitizer::fixTagAttributes( $attributes, 'tr' ); array_pop( $tr_attributes ); array_push( $tr_attributes, $attributes ); $line = ''; - $last_tag = array_pop ( $last_tag_history ); - array_pop ( $has_opened_tr ); - array_push ( $has_opened_tr , true ); + $last_tag = array_pop( $last_tag_history ); + array_pop( $has_opened_tr ); + array_push( $has_opened_tr , true ); - if ( array_pop ( $tr_history ) ) { + if ( array_pop( $tr_history ) ) { $line = ''; } - if ( array_pop ( $td_history ) ) { + if ( array_pop( $td_history ) ) { $line = "{$line}"; } $outLine = $line; - array_push ( $tr_history , false ); - array_push ( $td_history , false ); - array_push ( $last_tag_history , '' ); - } - else if ( $first_character === '|' || $first_character === '!' || substr ( $line , 0 , 2 ) === '|+' ) { - // This might be cell elements, td, th or captions - if ( substr ( $line , 0 , 2 ) === '|+' ) { + array_push( $tr_history , false ); + array_push( $td_history , false ); + array_push( $last_tag_history , '' ); + } elseif ( $first_character === '|' || $first_character === '!' || substr( $line , 0 , 2 ) === '|+' ) { + # This might be cell elements, td, th or captions + if ( substr( $line , 0 , 2 ) === '|+' ) { $first_character = '+'; - $line = substr ( $line , 1 ); + $line = substr( $line , 1 ); } - $line = substr ( $line , 1 ); + $line = substr( $line , 1 ); if ( $first_character === '!' ) { - $line = str_replace ( '!!' , '||' , $line ); + $line = str_replace( '!!' , '||' , $line ); } - // Split up multiple cells on the same line. - // FIXME : This can result in improper nesting of tags processed - // by earlier parser steps, but should avoid splitting up eg - // attribute values containing literal "||". + # Split up multiple cells on the same line. + # FIXME : This can result in improper nesting of tags processed + # by earlier parser steps, but should avoid splitting up eg + # attribute values containing literal "||". $cells = StringUtils::explodeMarkup( '||' , $line ); $outLine = ''; - // Loop through each table cell - foreach ( $cells as $cell ) - { + # Loop through each table cell + foreach ( $cells as $cell ) { $previous = ''; - if ( $first_character !== '+' ) - { - $tr_after = array_pop ( $tr_attributes ); - if ( !array_pop ( $tr_history ) ) { + if ( $first_character !== '+' ) { + $tr_after = array_pop( $tr_attributes ); + if ( !array_pop( $tr_history ) ) { $previous = "\n"; } - array_push ( $tr_history , true ); - array_push ( $tr_attributes , '' ); - array_pop ( $has_opened_tr ); - array_push ( $has_opened_tr , true ); + array_push( $tr_history , true ); + array_push( $tr_attributes , '' ); + array_pop( $has_opened_tr ); + array_push( $has_opened_tr , true ); } - $last_tag = array_pop ( $last_tag_history ); + $last_tag = array_pop( $last_tag_history ); - if ( array_pop ( $td_history ) ) { - $previous = "{$previous}"; + if ( array_pop( $td_history ) ) { + $previous = "\n{$previous}"; } if ( $first_character === '|' ) { $last_tag = 'td'; - } else if ( $first_character === '!' ) { + } elseif ( $first_character === '!' ) { $last_tag = 'th'; - } else if ( $first_character === '+' ) { + } elseif ( $first_character === '+' ) { $last_tag = 'caption'; } else { $last_tag = ''; } - array_push ( $last_tag_history , $last_tag ); + array_push( $last_tag_history , $last_tag ); - // A cell could contain both parameters and data - $cell_data = explode ( '|' , $cell , 2 ); + # A cell could contain both parameters and data + $cell_data = explode( '|' , $cell , 2 ); - // Bug 553: Note that a '|' inside an invalid link should not - // be mistaken as delimiting cell parameters + # Bug 553: Note that a '|' inside an invalid link should not + # be mistaken as delimiting cell parameters if ( strpos( $cell_data[0], '[[' ) !== false ) { $cell = "{$previous}<{$last_tag}>{$cell}"; - } else if ( count ( $cell_data ) == 1 ) + } elseif ( count( $cell_data ) == 1 ) { $cell = "{$previous}<{$last_tag}>{$cell_data[0]}"; - else { + } else { $attributes = $this->mStripState->unstripBoth( $cell_data[0] ); $attributes = Sanitizer::fixTagAttributes( $attributes , $last_tag ); $cell = "{$previous}<{$last_tag}{$attributes}>{$cell_data[1]}"; } $outLine .= $cell; - array_push ( $td_history , true ); + array_push( $td_history , true ); } } $out .= $outLine . "\n"; } - // Closing open td, tr && table - while ( count ( $td_history ) > 0 ) - { - if ( array_pop ( $td_history ) ) { + # Closing open td, tr && table + while ( count( $td_history ) > 0 ) { + if ( array_pop( $td_history ) ) { $out .= "\n"; } - if ( array_pop ( $tr_history ) ) { + if ( array_pop( $tr_history ) ) { $out .= "\n"; } - if ( !array_pop ( $has_opened_tr ) ) { + if ( !array_pop( $has_opened_tr ) ) { $out .= "\n" ; } $out .= "\n"; } - // Remove trailing line-ending (b/c) + # Remove trailing line-ending (b/c) if ( substr( $out, -1 ) === "\n" ) { $out = substr( $out, 0, -1 ); } - // special case: don't return empty table - if( $out === "\n\n
    " ) { + # special case: don't return empty table + if ( $out === "\n\n
    " ) { $out = ''; } @@ -914,29 +985,29 @@ class Parser return $text ; } - // if $frame is provided, then use $frame for replacing any variables - if ($frame) { - // use frame depth to infer how include/noinclude tags should be handled - // depth=0 means this is the top-level document; otherwise it's an included document - if( !$frame->depth ) + # if $frame is provided, then use $frame for replacing any variables + if ( $frame ) { + # use frame depth to infer how include/noinclude tags should be handled + # depth=0 means this is the top-level document; otherwise it's an included document + if ( !$frame->depth ) { $flag = 0; - else + } else { $flag = Parser::PTD_FOR_INCLUSION; + } $dom = $this->preprocessToDom( $text, $flag ); $text = $frame->expand( $dom ); - } - // if $frame is not provided, then use old-style replaceVariables - else { + } else { + # if $frame is not provided, then use old-style replaceVariables $text = $this->replaceVariables( $text ); } $text = Sanitizer::removeHTMLtags( $text, array( &$this, 'attributeStripCallback' ), false, array_keys( $this->mTransparentTagHooks ) ); wfRunHooks( 'InternalParseBeforeLinks', array( &$this, &$text, &$this->mStripState ) ); - // Tables need to come after variable replacement for things to work - // properly; putting them before other transformations should keep - // exciting things like link expansions from showing up in surprising - // places. + # Tables need to come after variable replacement for things to work + # properly; putting them before other transformations should keep + # exciting things like link expansions from showing up in surprising + # places. $text = $this->doTableStuff( $text ); $text = preg_replace( '/(^|\n)-----*/', '\\1
    ', $text ); @@ -944,17 +1015,17 @@ class Parser $text = $this->doDoubleUnderscore( $text ); $text = $this->doHeadings( $text ); - if( $this->mOptions->getUseDynamicDates() ) { + if ( $this->mOptions->getUseDynamicDates() ) { $df = DateFormatter::getInstance(); $text = $df->reformat( $this->mOptions->getDateFormat(), $text ); } - $text = $this->doAllQuotes( $text ); $text = $this->replaceInternalLinks( $text ); + $text = $this->doAllQuotes( $text ); $text = $this->replaceExternalLinks( $text ); # replaceInternalLinks may sometimes leave behind # absolute URLs, which have to be masked to hide them from replaceExternalLinks - $text = str_replace($this->mUniqPrefix.'NOPARSE', '', $text); + $text = str_replace( $this->mUniqPrefix.'NOPARSE', '', $text ); $text = $this->doMagicLinks( $text ); $text = $this->formatHeadings( $text, $origText, $isMain ); @@ -976,7 +1047,7 @@ class Parser $urlChar = self::EXT_LINK_URL_CLASS; $text = preg_replace_callback( '!(?: # Start cases - () | # m[1]: Skip link text + (].*?) | # m[1]: Skip link text (<.*?>) | # m[2]: Skip stuff inside HTML elements' . " (\\b(?:$prots)$urlChar+) | # m[3]: Free external links" . ' (?:RFC|PMID)\s+([0-9]+) | # m[4]: RFC or PMID, capture number @@ -1002,7 +1073,6 @@ class Parser return $this->makeFreeExternalLink( $m[0] ); } elseif ( isset( $m[4] ) && $m[4] !== '' ) { # RFC or PMID - $CssClass = ''; if ( substr( $m[0], 0, 3 ) === 'RFC' ) { $keyword = 'RFC'; $urlmsg = 'rfcurl'; @@ -1015,10 +1085,10 @@ class Parser $id = $m[4]; } else { throw new MWException( __METHOD__.': unrecognised match type "' . - substr($m[0], 0, 20 ) . '"' ); + substr( $m[0], 0, 20 ) . '"' ); } - $url = wfMsg( $urlmsg, $id); - $sk = $this->mOptions->getSkin(); + $url = wfMsgForContent( $urlmsg, $id); + $sk = $this->mOptions->getSkin( $this->mTitle ); $la = $sk->getExternalLinkAttributes( "external $CssClass" ); return "{$keyword} {$id}"; } elseif ( isset( $m[5] ) && $m[5] !== '' ) { @@ -1047,16 +1117,16 @@ class Parser global $wgContLang; wfProfileIn( __METHOD__ ); - $sk = $this->mOptions->getSkin(); + $sk = $this->mOptions->getSkin( $this->mTitle ); $trail = ''; # The characters '<' and '>' (which were escaped by # removeHTMLtags()) should not be included in # URLs, per RFC 2396. $m2 = array(); - if (preg_match('/&(lt|gt);/', $url, $m2, PREG_OFFSET_CAPTURE)) { - $trail = substr($url, $m2[0][1]) . $trail; - $url = substr($url, 0, $m2[0][1]); + if ( preg_match( '/&(lt|gt);/', $url, $m2, PREG_OFFSET_CAPTURE ) ) { + $trail = substr( $url, $m2[0][1] ) . $trail; + $url = substr( $url, 0, $m2[0][1] ); } # Move trailing punctuation to $trail @@ -1118,7 +1188,7 @@ class Parser foreach ( $lines as $line ) { $outtext .= $this->doQuotes( $line ) . "\n"; } - $outtext = substr($outtext, 0,-1); + $outtext = substr( $outtext, 0,-1 ); wfProfileOut( __METHOD__ ); return $outtext; } @@ -1128,89 +1198,84 @@ class Parser */ public function doQuotes( $text ) { $arr = preg_split( "/(''+)/", $text, -1, PREG_SPLIT_DELIM_CAPTURE ); - if ( count( $arr ) == 1 ) + if ( count( $arr ) == 1 ) { return $text; - else - { + } else { # First, do some preliminary work. This may shift some apostrophes from # being mark-up to being text. It also counts the number of occurrences # of bold and italics mark-ups. - $i = 0; $numbold = 0; $numitalics = 0; - foreach ( $arr as $r ) - { - if ( ( $i % 2 ) == 1 ) - { + for ( $i = 0; $i < count( $arr ); $i++ ) { + if ( ( $i % 2 ) == 1 ) { # If there are ever four apostrophes, assume the first is supposed to # be text, and the remaining three constitute mark-up for bold text. - if ( strlen( $arr[$i] ) == 4 ) - { + if ( strlen( $arr[$i] ) == 4 ) { $arr[$i-1] .= "'"; $arr[$i] = "'''"; - } - # If there are more than 5 apostrophes in a row, assume they're all - # text except for the last 5. - else if ( strlen( $arr[$i] ) > 5 ) - { + } elseif ( strlen( $arr[$i] ) > 5 ) { + # If there are more than 5 apostrophes in a row, assume they're all + # text except for the last 5. $arr[$i-1] .= str_repeat( "'", strlen( $arr[$i] ) - 5 ); $arr[$i] = "'''''"; } # Count the number of occurrences of bold and italics mark-ups. # We are not counting sequences of five apostrophes. - if ( strlen( $arr[$i] ) == 2 ) { $numitalics++; } - else if ( strlen( $arr[$i] ) == 3 ) { $numbold++; } - else if ( strlen( $arr[$i] ) == 5 ) { $numitalics++; $numbold++; } + if ( strlen( $arr[$i] ) == 2 ) { + $numitalics++; + } elseif ( strlen( $arr[$i] ) == 3 ) { + $numbold++; + } elseif ( strlen( $arr[$i] ) == 5 ) { + $numitalics++; + $numbold++; + } } - $i++; } # If there is an odd number of both bold and italics, it is likely # that one of the bold ones was meant to be an apostrophe followed # by italics. Which one we cannot know for certain, but it is more # likely to be one that has a single-letter word before it. - if ( ( $numbold % 2 == 1 ) && ( $numitalics % 2 == 1 ) ) - { + if ( ( $numbold % 2 == 1 ) && ( $numitalics % 2 == 1 ) ) { $i = 0; $firstsingleletterword = -1; $firstmultiletterword = -1; $firstspace = -1; - foreach ( $arr as $r ) - { - if ( ( $i % 2 == 1 ) and ( strlen( $r ) == 3 ) ) - { - $x1 = substr ($arr[$i-1], -1); - $x2 = substr ($arr[$i-1], -2, 1); - if ($x1 === ' ') { - if ($firstspace == -1) $firstspace = $i; - } else if ($x2 === ' ') { - if ($firstsingleletterword == -1) $firstsingleletterword = $i; + foreach ( $arr as $r ) { + if ( ( $i % 2 == 1 ) and ( strlen( $r ) == 3 ) ) { + $x1 = substr( $arr[$i-1], -1 ); + $x2 = substr( $arr[$i-1], -2, 1 ); + if ( $x1 === ' ' ) { + if ( $firstspace == -1 ) { + $firstspace = $i; + } + } elseif ( $x2 === ' ') { + if ( $firstsingleletterword == -1 ) { + $firstsingleletterword = $i; + } } else { - if ($firstmultiletterword == -1) $firstmultiletterword = $i; + if ( $firstmultiletterword == -1 ) { + $firstmultiletterword = $i; + } } } $i++; } # If there is a single-letter word, use it! - if ($firstsingleletterword > -1) - { - $arr [ $firstsingleletterword ] = "''"; - $arr [ $firstsingleletterword-1 ] .= "'"; - } - # If not, but there's a multi-letter word, use that one. - else if ($firstmultiletterword > -1) - { - $arr [ $firstmultiletterword ] = "''"; - $arr [ $firstmultiletterword-1 ] .= "'"; - } - # ... otherwise use the first one that has neither. - # (notice that it is possible for all three to be -1 if, for example, - # there is only one pentuple-apostrophe in the line) - else if ($firstspace > -1) - { - $arr [ $firstspace ] = "''"; - $arr [ $firstspace-1 ] .= "'"; + if ( $firstsingleletterword > -1 ) { + $arr[$firstsingleletterword] = "''"; + $arr[$firstsingleletterword-1] .= "'"; + } elseif ( $firstmultiletterword > -1 ) { + # If not, but there's a multi-letter word, use that one. + $arr[$firstmultiletterword] = "''"; + $arr[$firstmultiletterword-1] .= "'"; + } elseif ( $firstspace > -1 ) { + # ... otherwise use the first one that has neither. + # (notice that it is possible for all three to be -1 if, for example, + # there is only one pentuple-apostrophe in the line) + $arr[$firstspace] = "''"; + $arr[$firstspace-1] .= "'"; } } @@ -1219,71 +1284,70 @@ class Parser $buffer = ''; $state = ''; $i = 0; - foreach ($arr as $r) - { - if (($i % 2) == 0) - { - if ($state === 'both') + foreach ( $arr as $r ) { + if ( ( $i % 2 ) == 0 ) { + if ( $state === 'both' ) { $buffer .= $r; - else + } else { $output .= $r; - } - else - { - if (strlen ($r) == 2) - { - if ($state === 'i') - { $output .= ''; $state = ''; } - else if ($state === 'bi') - { $output .= ''; $state = 'b'; } - else if ($state === 'ib') - { $output .= ''; $state = 'b'; } - else if ($state === 'both') - { $output .= ''.$buffer.''; $state = 'b'; } - else # $state can be 'b' or '' - { $output .= ''; $state .= 'i'; } - } - else if (strlen ($r) == 3) - { - if ($state === 'b') - { $output .= ''; $state = ''; } - else if ($state === 'bi') - { $output .= ''; $state = 'i'; } - else if ($state === 'ib') - { $output .= ''; $state = 'i'; } - else if ($state === 'both') - { $output .= ''.$buffer.''; $state = 'i'; } - else # $state can be 'i' or '' - { $output .= ''; $state .= 'b'; } } - else if (strlen ($r) == 5) - { - if ($state === 'b') - { $output .= ''; $state = 'i'; } - else if ($state === 'i') - { $output .= ''; $state = 'b'; } - else if ($state === 'bi') - { $output .= ''; $state = ''; } - else if ($state === 'ib') - { $output .= ''; $state = ''; } - else if ($state === 'both') - { $output .= ''.$buffer.''; $state = ''; } - else # ($state == '') - { $buffer = ''; $state = 'both'; } + } else { + if ( strlen( $r ) == 2 ) { + if ( $state === 'i' ) { + $output .= ''; $state = ''; + } elseif ( $state === 'bi' ) { + $output .= ''; $state = 'b'; + } elseif ( $state === 'ib' ) { + $output .= ''; $state = 'b'; + } elseif ( $state === 'both' ) { + $output .= ''.$buffer.''; $state = 'b'; + } else { # $state can be 'b' or '' + $output .= ''; $state .= 'i'; + } + } elseif ( strlen( $r ) == 3 ) { + if ( $state === 'b' ) { + $output .= ''; $state = ''; + } elseif ( $state === 'bi' ) { + $output .= ''; $state = 'i'; + } elseif ( $state === 'ib' ) { + $output .= ''; $state = 'i'; + } elseif ( $state === 'both' ) { + $output .= ''.$buffer.''; $state = 'i'; + } else { # $state can be 'i' or '' + $output .= ''; $state .= 'b'; + } + } elseif ( strlen( $r ) == 5 ) { + if ( $state === 'b' ) { + $output .= ''; $state = 'i'; + } elseif ( $state === 'i' ) { + $output .= ''; $state = 'b'; + } elseif ( $state === 'bi' ) { + $output .= ''; $state = ''; + } elseif ( $state === 'ib' ) { + $output .= ''; $state = ''; + } elseif ( $state === 'both' ) { + $output .= ''.$buffer.''; $state = ''; + } else { # ($state == '') + $buffer = ''; $state = 'both'; + } } } $i++; } # Now close all remaining tags. Notice that the order is important. - if ($state === 'b' || $state === 'ib') + if ( $state === 'b' || $state === 'ib' ) { $output .= ''; - if ($state === 'i' || $state === 'bi' || $state === 'ib') + } + if ( $state === 'i' || $state === 'bi' || $state === 'ib' ) { $output .= ''; - if ($state === 'bi') + } + if ( $state === 'bi' ) { $output .= ''; + } # There might be lonely ''''', so make sure we have a buffer - if ($state === 'both' && $buffer) + if ( $state === 'both' && $buffer ) { $output .= ''.$buffer.''; + } return $output; } } @@ -1300,7 +1364,7 @@ class Parser global $wgContLang; wfProfileIn( __METHOD__ ); - $sk = $this->mOptions->getSkin(); + $sk = $this->mOptions->getSkin( $this->mTitle ); $bits = preg_split( $this->mExtLinkBracketedRegex, $text, -1, PREG_SPLIT_DELIM_CAPTURE ); $s = array_shift( $bits ); @@ -1316,9 +1380,9 @@ class Parser # removeHTMLtags()) should not be included in # URLs, per RFC 2396. $m2 = array(); - if (preg_match('/&(lt|gt);/', $url, $m2, PREG_OFFSET_CAPTURE)) { - $text = substr($url, $m2[0][1]) . ' ' . $text; - $url = substr($url, 0, $m2[0][1]); + if ( preg_match( '/&(lt|gt);/', $url, $m2, PREG_OFFSET_CAPTURE ) ) { + $text = substr( $url, $m2[0][1] ) . ' ' . $text; + $url = substr( $url, 0, $m2[0][1] ); } # If the link text is an image URL, replace it with an tag @@ -1331,12 +1395,12 @@ class Parser $dtrail = ''; # Set linktype for CSS - if URL==text, link is essentially free - $linktype = ($text === $url) ? 'free' : 'text'; + $linktype = ( $text === $url ) ? 'free' : 'text'; # No link text, e.g. [http://domain.tld/some.link] if ( $text == '' ) { # Autonumber if allowed. See bug #5918 - if ( strpos( wfUrlProtocols(), substr($protocol, 0, strpos($protocol, ':')) ) !== false ) { + if ( strpos( wfUrlProtocols(), substr( $protocol, 0, strpos( $protocol, ':' ) ) ) !== false ) { $langObj = $this->getFunctionLang(); $text = '[' . $langObj->formatNum( ++$this->mAutonumber ) . ']'; $linktype = 'autonumber'; @@ -1351,13 +1415,13 @@ class Parser list( $dtrail, $trail ) = Linker::splitTrail( $trail ); } - $text = $wgContLang->markNoConversion($text); + $text = $wgContLang->markNoConversion( $text ); $url = Sanitizer::cleanUrl( $url ); # Use the encoded URL # This means that users can paste URLs directly into the text - # Funny characters like ö aren't valid in URLs anyway + # Funny characters like ö aren't valid in URLs anyway # This was changed in August 2004 $s .= $sk->makeExternalLink( $url, $text, false, $linktype, $this->getExternalLinkAttribs( $url ) ) . $dtrail . $trail; @@ -1379,15 +1443,15 @@ class Parser * (depending on configuration, namespace, and the URL's domain) and/or a * target attribute (depending on configuration). * - * @param string $url Optional URL, to extract the domain from for rel => + * @param $url String: optional URL, to extract the domain from for rel => * nofollow if appropriate - * @return array Associative array of HTML attributes + * @return Array: associative array of HTML attributes */ function getExternalLinkAttribs( $url = false ) { $attribs = array(); global $wgNoFollowLinks, $wgNoFollowNsExceptions; $ns = $this->mTitle->getNamespace(); - if( $wgNoFollowLinks && !in_array($ns, $wgNoFollowNsExceptions) ) { + if ( $wgNoFollowLinks && !in_array( $ns, $wgNoFollowNsExceptions ) ) { $attribs['rel'] = 'nofollow'; global $wgNoFollowDomainExceptions; @@ -1395,8 +1459,7 @@ class Parser $bits = wfParseUrl( $url ); if ( is_array( $bits ) && isset( $bits['host'] ) ) { foreach ( $wgNoFollowDomainExceptions as $domain ) { - if( substr( $bits['host'], -strlen( $domain ) ) - == $domain ) { + if ( substr( $bits['host'], -strlen( $domain ) ) == $domain ) { unset( $attribs['rel'] ); break; } @@ -1413,9 +1476,10 @@ class Parser /** * Replace unusual URL escape codes with their equivalent characters - * @param string - * @return string - * @static + * + * @param $url String + * @return String + * * @todo This can merge genuinely required bits in the path or query string, * breaking legit URLs. A proper fix would treat the various parts of * the URL differently; as a workaround, just use the output for @@ -1429,18 +1493,16 @@ class Parser /** * Callback function used in replaceUnusualEscapes(). * Replaces unusual URL escape codes with their equivalent character - * @static - * @private */ private static function replaceUnusualEscapesCallback( $matches ) { $char = urldecode( $matches[0] ); $ord = ord( $char ); - // Is it an unsafe or HTTP reserved character according to RFC 1738? + # Is it an unsafe or HTTP reserved character according to RFC 1738? if ( $ord > 32 && $ord < 127 && strpos( '<>"#{}|\^~[]`;/?', $char ) === false ) { - // No, shouldn't be escaped + # No, shouldn't be escaped return $char; } else { - // Yes, leave it escaped + # Yes, leave it escaped return $matches[0]; } } @@ -1451,21 +1513,21 @@ class Parser * @private */ function maybeMakeExternalImage( $url ) { - $sk = $this->mOptions->getSkin(); + $sk = $this->mOptions->getSkin( $this->mTitle ); $imagesfrom = $this->mOptions->getAllowExternalImagesFrom(); - $imagesexception = !empty($imagesfrom); + $imagesexception = !empty( $imagesfrom ); $text = false; # $imagesfrom could be either a single string or an array of strings, parse out the latter - if( $imagesexception && is_array( $imagesfrom ) ) { + if ( $imagesexception && is_array( $imagesfrom ) ) { $imagematch = false; - foreach( $imagesfrom as $match ) { - if( strpos( $url, $match ) === 0 ) { + foreach ( $imagesfrom as $match ) { + if ( strpos( $url, $match ) === 0 ) { $imagematch = true; break; } } - } elseif( $imagesexception ) { - $imagematch = (strpos( $url, $imagesfrom ) === 0); + } elseif ( $imagesexception ) { + $imagematch = ( strpos( $url, $imagesfrom ) === 0 ); } else { $imagematch = false; } @@ -1476,14 +1538,15 @@ class Parser $text = $sk->makeExternalImage( $url ); } } - if( !$text && $this->mOptions->getEnableImageWhitelist() + if ( !$text && $this->mOptions->getEnableImageWhitelist() && preg_match( self::EXT_IMAGE_REGEX, $url ) ) { $whitelist = explode( "\n", wfMsgForContent( 'external_image_whitelist' ) ); - foreach( $whitelist as $entry ) { + foreach ( $whitelist as $entry ) { # Sanitize the regex fragment, make it case-insensitive, ignore blank entries/comments - if( strpos( $entry, '#' ) === 0 || $entry === '' ) + if ( strpos( $entry, '#' ) === 0 || $entry === '' ) { continue; - if( preg_match( '/' . str_replace( '/', '\\/', $entry ) . '/i', $url ) ) { + } + if ( preg_match( '/' . str_replace( '/', '\\/', $entry ) . '/i', $url ) ) { # Image matches a whitelist entry $text = $sk->makeExternalImage( $url ); break; @@ -1495,7 +1558,7 @@ class Parser /** * Process [[ ]] wikilinks - * @return processed text + * @return String: processed text * * @private */ @@ -1526,12 +1589,12 @@ class Parser $e1_img = "/^([{$tc}]+)\\|(.*)\$/sD"; } - $sk = $this->mOptions->getSkin(); + $sk = $this->mOptions->getSkin( $this->mTitle ); $holders = new LinkHolderArray( $this ); - #split the entire text string on occurences of [[ + # split the entire text string on occurences of [[ $a = StringUtils::explode( '[[', ' ' . $s ); - #get the first element (all text up to first [[), and remove the space we added + # get the first element (all text up to first [[), and remove the space we added $s = $a->current(); $a->next(); $line = $a->current(); # Workaround for broken ArrayIterator::next() that returns "void" @@ -1545,7 +1608,7 @@ class Parser $e2 = wfMsgForContent( 'linkprefix' ); } - if( is_null( $this->mTitle ) ) { + if ( is_null( $this->mTitle ) ) { wfProfileOut( __METHOD__.'-setup' ); wfProfileOut( __METHOD__ ); throw new MWException( __METHOD__.": \$this->mTitle is null\n" ); @@ -1563,10 +1626,10 @@ class Parser $prefix = ''; } - if($wgContLang->hasVariants()) { - $selflink = $wgContLang->convertLinkToAllVariants($this->mTitle->getPrefixedText()); + if ( $wgContLang->hasVariants() ) { + $selflink = $wgContLang->autoConvertToAllVariants( $this->mTitle->getPrefixedText() ); } else { - $selflink = array($this->mTitle->getPrefixedText()); + $selflink = array( $this->mTitle->getPrefixedText() ); } $useSubpages = $this->areSubpagesAllowed(); wfProfileOut( __METHOD__.'-setup' ); @@ -1590,7 +1653,7 @@ class Parser $prefix=''; } # first link - if($first_prefix) { + if ( $first_prefix ) { $prefix = $first_prefix; $first_prefix = false; } @@ -1610,25 +1673,25 @@ class Parser # Still some problems for cases where the ] is meant to be outside punctuation, # and no image is in sight. See bug 2095. # - if( $text !== '' && + if ( $text !== '' && substr( $m[3], 0, 1 ) === ']' && - strpos($text, '[') !== false + strpos( $text, '[' ) !== false ) { $text .= ']'; # so that replaceExternalLinks($text) works later $m[3] = substr( $m[3], 1 ); } # fix up urlencoded title texts - if( strpos( $m[1], '%' ) !== false ) { + if ( strpos( $m[1], '%' ) !== false ) { # Should anchors '#' also be rejected? - $m[1] = str_replace( array('<', '>'), array('<', '>'), urldecode($m[1]) ); + $m[1] = str_replace( array('<', '>'), array('<', '>'), urldecode( $m[1] ) ); } $trail = $m[3]; - } elseif( preg_match($e1_img, $line, $m) ) { # Invalid, but might be an image with a link in its caption + } elseif ( preg_match( $e1_img, $line, $m ) ) { # Invalid, but might be an image with a link in its caption $might_be_img = true; $text = $m[2]; if ( strpos( $m[1], '%' ) !== false ) { - $m[1] = urldecode($m[1]); + $m[1] = urldecode( $m[1] ); } $trail = ""; } else { # Invalid form; output directly @@ -1655,8 +1718,8 @@ class Parser $link = $m[1]; } - $noforce = (substr( $m[1], 0, 1 ) !== ':'); - if (!$noforce) { + $noforce = ( substr( $m[1], 0, 1 ) !== ':' ); + if ( !$noforce ) { # Strip off leading ':' $link = substr( $link, 1 ); } @@ -1676,10 +1739,10 @@ class Parser if ( $might_be_img ) { # if this is actually an invalid link wfProfileIn( __METHOD__."-might_be_img" ); - if ( $ns == NS_FILE && $noforce ) { #but might be an image + if ( $ns == NS_FILE && $noforce ) { # but might be an image $found = false; while ( true ) { - #look at the next 'line' to see if we can close it there + # look at the next 'line' to see if we can close it there $a->next(); $next_line = $a->current(); if ( $next_line === false || $next_line === null ) { @@ -1693,24 +1756,24 @@ class Parser $trail = $m[2]; break; } elseif ( count( $m ) == 2 ) { - #if there's exactly one ]] that's fine, we'll keep looking + # if there's exactly one ]] that's fine, we'll keep looking $text .= "[[{$m[0]}]]{$m[1]}"; } else { - #if $next_line is invalid too, we need look no further + # if $next_line is invalid too, we need look no further $text .= '[[' . $next_line; break; } } if ( !$found ) { # we couldn't find the end of this imageLink, so output it raw - #but don't ignore what might be perfectly normal links in the text we've examined + # but don't ignore what might be perfectly normal links in the text we've examined $holders->merge( $this->replaceInternalLinks2( $text ) ); $s .= "{$prefix}[[$link|$text"; # note: no $trail, because without an end, there *is* no trail wfProfileOut( __METHOD__."-might_be_img" ); continue; } - } else { #it's not an image, so output it raw + } else { # it's not an image, so output it raw $s .= "{$prefix}[[$link|$text"; # note: no $trail, because without an end, there *is* no trail wfProfileOut( __METHOD__."-might_be_img" ); @@ -1720,7 +1783,14 @@ class Parser } $wasblank = ( $text == '' ); - if ( $wasblank ) $text = $link; + if ( $wasblank ) { + $text = $link; + } else { + # Bug 4598 madness. Handle the quotes only if they come from the alternate part + # [[Lista d''e paise d''o munno]] -> Lista d''e paise d''o munno + # [[Criticism of Harry Potter|Criticism of ''Harry Potter'']] -> Criticism of Harry Potter + $text = $this->doQuotes($text); + } # Link not escaped by : , create the various objects if ( $noforce ) { @@ -1729,8 +1799,8 @@ class Parser wfProfileIn( __METHOD__."-interwiki" ); if ( $iw && $this->mOptions->getInterwikiMagic() && $nottalk && $wgContLang->getLanguageName( $iw ) ) { $this->mOutput->addLanguageLink( $nt->getFullText() ); - $s = rtrim($s . $prefix); - $s .= trim($trail, "\n") == '' ? '': $prefix . $trail; + $s = rtrim( $s . $prefix ); + $s .= trim( $trail, "\n" ) == '' ? '': $prefix . $trail; wfProfileOut( __METHOD__."-interwiki" ); continue; } @@ -1749,7 +1819,7 @@ class Parser # recursively parse links inside the image caption # actually, this will parse them in any other parameters, too, # but it might be hard to fix that, and it doesn't matter ATM - $text = $this->replaceExternalLinks($text); + $text = $this->replaceExternalLinks( $text ); $holders->merge( $this->replaceInternalLinks2( $text ) ); } # cloak any absolute URLs inside the image markup, so replaceExternalLinks() won't touch them @@ -1765,7 +1835,7 @@ class Parser if ( $ns == NS_CATEGORY ) { wfProfileIn( __METHOD__."-category" ); - $s = rtrim($s . "\n"); # bug 87 + $s = rtrim( $s . "\n" ); # bug 87 if ( $wasblank ) { $sortkey = $this->getDefaultSort(); @@ -1781,7 +1851,7 @@ class Parser * Strip the whitespace Category links produce, see bug 87 * @todo We might want to use trim($tmp, "\n") here. */ - $s .= trim($prefix . $trail, "\n") == '' ? '': $prefix . $trail; + $s .= trim( $prefix . $trail, "\n" ) == '' ? '': $prefix . $trail; wfProfileOut( __METHOD__."-category" ); continue; @@ -1789,8 +1859,8 @@ class Parser } # Self-link checking - if( $nt->getFragment() === '' && $ns != NS_SPECIAL ) { - if( in_array( $nt->getPrefixedText(), $selflink, true ) ) { + if ( $nt->getFragment() === '' && $ns != NS_SPECIAL ) { + if ( in_array( $nt->getPrefixedText(), $selflink, true ) ) { $s .= $prefix . $sk->makeSelfLinkObj( $nt, $text, '', $trail ); continue; } @@ -1798,7 +1868,7 @@ class Parser # NS_MEDIA is a pseudo-namespace for linking directly to a file # FIXME: Should do batch file existence checks, see comment below - if( $ns == NS_MEDIA ) { + if ( $ns == NS_MEDIA ) { wfProfileIn( __METHOD__."-media" ); # Give extensions a chance to select the file revision for us $skip = $time = false; @@ -1821,7 +1891,7 @@ class Parser # # FIXME: isAlwaysKnown() can be expensive for file links; we should really do # batch file existence checks for NS_FILE and NS_MEDIA - if( $iw == '' && $nt->isAlwaysKnown() ) { + if ( $iw == '' && $nt->isAlwaysKnown() ) { $this->mOutput->addLink( $nt ); $s .= $this->makeKnownLinkHolder( $nt, $text, '', $trail, $prefix ); } else { @@ -1853,17 +1923,17 @@ class Parser * breaking URLs in the following text without breaking trails on the * wiki links, it's been made into a horrible function. * - * @param Title $nt - * @param string $text - * @param string $query - * @param string $trail - * @param string $prefix - * @return string HTML-wikitext mix oh yuck + * @param $nt Title + * @param $text String + * @param $query String + * @param $trail String + * @param $prefix String + * @return String: HTML-wikitext mix oh yuck */ function makeKnownLinkHolder( $nt, $text = '', $query = '', $trail = '', $prefix = '' ) { list( $inside, $trail ) = Linker::splitTrail( $trail ); - $sk = $this->mOptions->getSkin(); - // FIXME: use link() instead of deprecated makeKnownLinkObj() + $sk = $this->mOptions->getSkin( $this->mTitle ); + # FIXME: use link() instead of deprecated makeKnownLinkObj() $link = $sk->makeKnownLinkObj( $nt, $text, $query, $inside, $prefix ); return $this->armorLinks( $link ) . $trail; } @@ -1875,8 +1945,8 @@ class Parser * Not needed quite as much as it used to be since free links are a bit * more sensible these days. But bracketed links are still an issue. * - * @param string more-or-less HTML - * @return string less-or-more HTML with NOPARSE bits + * @param $text String: more-or-less HTML + * @return String: less-or-more HTML with NOPARSE bits */ function armorLinks( $text ) { return preg_replace( '/\b(' . wfUrlProtocols() . ')/', @@ -1885,7 +1955,7 @@ class Parser /** * Return true if subpage links should be expanded on this page. - * @return bool + * @return Boolean */ function areSubpagesAllowed() { # Some namespaces don't allow subpages @@ -1894,12 +1964,13 @@ class Parser /** * Handle link to subpage if necessary - * @param string $target the source of the link - * @param string &$text the link text, modified as necessary + * + * @param $target String: the source of the link + * @param &$text String: the link text, modified as necessary * @return string the full name of the link * @private */ - function maybeDoSubpageLink($target, &$text) { + function maybeDoSubpageLink( $target, &$text ) { return Linker::normalizeSubpageLink( $this->mTitle, $target, $text ); } @@ -1907,7 +1978,7 @@ class Parser * Used by doBlockLevels() * @private */ - /* private */ function closeParagraph() { + function closeParagraph() { $result = ''; if ( $this->mLastSection != '' ) { $result = 'mLastSection . ">\n"; @@ -1916,42 +1987,64 @@ class Parser $this->mLastSection = ''; return $result; } - # getCommon() returns the length of the longest common substring - # of both arguments, starting at the beginning of both. - # - /* private */ function getCommon( $st1, $st2 ) { + + /** + * getCommon() returns the length of the longest common substring + * of both arguments, starting at the beginning of both. + * @private + */ + function getCommon( $st1, $st2 ) { $fl = strlen( $st1 ); $shorter = strlen( $st2 ); - if ( $fl < $shorter ) { $shorter = $fl; } + if ( $fl < $shorter ) { + $shorter = $fl; + } for ( $i = 0; $i < $shorter; ++$i ) { - if ( $st1{$i} != $st2{$i} ) { break; } + if ( $st1{$i} != $st2{$i} ) { + break; + } } return $i; } - # These next three functions open, continue, and close the list - # element appropriate to the prefix character passed into them. - # - /* private */ function openList( $char ) { + + /** + * These next three functions open, continue, and close the list + * element appropriate to the prefix character passed into them. + * @private + */ + function openList( $char ) { $result = $this->closeParagraph(); - if ( '*' === $char ) { $result .= '
    • '; } - elseif ( '#' === $char ) { $result .= '
      1. '; } - elseif ( ':' === $char ) { $result .= '
        '; } - elseif ( ';' === $char ) { + if ( '*' === $char ) { + $result .= '
        • '; + } elseif ( '#' === $char ) { + $result .= '
          1. '; + } elseif ( ':' === $char ) { + $result .= '
            '; + } elseif ( ';' === $char ) { $result .= '
            '; $this->mDTopen = true; + } else { + $result = ''; } - else { $result = ''; } return $result; } - /* private */ function nextItem( $char ) { - if ( '*' === $char || '#' === $char ) { return '
          2. '; } - elseif ( ':' === $char || ';' === $char ) { + /** + * TODO: document + * @param $char String + * @private + */ + function nextItem( $char ) { + if ( '*' === $char || '#' === $char ) { + return '
          3. '; + } elseif ( ':' === $char || ';' === $char ) { $close = '
        '; - if ( $this->mDTopen ) { $close = ''; } + if ( $this->mDTopen ) { + $close = ''; + } if ( ';' === $char ) { $this->mDTopen = true; return $close . '
        '; @@ -1963,18 +2056,26 @@ class Parser return ''; } - /* private */ function closeList( $char ) { - if ( '*' === $char ) { $text = '
    '; } - elseif ( '#' === $char ) { $text = '
  • '; } - elseif ( ':' === $char ) { + /** + * TODO: document + * @param $char String + * @private + */ + function closeList( $char ) { + if ( '*' === $char ) { + $text = ''; + } elseif ( '#' === $char ) { + $text = ''; + } elseif ( ':' === $char ) { if ( $this->mDTopen ) { $this->mDTopen = false; $text = ''; } else { $text = ''; } + } else { + return ''; } - else { return ''; } return $text."\n"; } /**#@-*/ @@ -1982,7 +2083,8 @@ class Parser /** * Make lists from lines starting with ':', '*', '#', etc. (DBL) * - * @param $linestart bool whether or not this is at the start of a line. + * @param $text String + * @param $linestart Boolean: whether or not this is at the start of a line. * @private * @return string the lists rendered as HTML */ @@ -2007,24 +2109,24 @@ class Parser $linestart = true; continue; } - // * = ul - // # = ol - // ; = dt - // : = dd + # * = ul + # # = ol + # ; = dt + # : = dd $lastPrefixLength = strlen( $lastPrefix ); - $preCloseMatch = preg_match('/<\\/pre/i', $oLine ); - $preOpenMatch = preg_match('/
     element, scan for and figure out what prefixes are there.
    +			$preCloseMatch = preg_match( '/<\\/pre/i', $oLine );
    +			$preOpenMatch = preg_match( '/
     element, scan for and figure out what prefixes are there.
     			if ( !$this->mInPre ) {
     				# Multiple prefixes may abut each other for nested lists.
     				$prefixLength = strspn( $oLine, '*#:;' );
     				$prefix = substr( $oLine, 0, $prefixLength );
     
     				# eh?
    -				// ; and : are both from definition-lists, so they're equivalent
    -				//  for the purposes of determining whether or not we need to open/close
    -				//  elements.
    +				# ; and : are both from definition-lists, so they're equivalent
    +				#  for the purposes of determining whether or not we need to open/close
    +				#  elements.
     				$prefix2 = str_replace( ';', ':', $prefix );
     				$t = substr( $oLine, $prefixLength );
     				$this->mInPre = (bool)$preOpenMatch;
    @@ -2036,7 +2138,7 @@ class Parser
     			}
     
     			# List generation
    -			if( $prefixLength && $lastPrefix === $prefix2 ) {
    +			if ( $prefixLength && $lastPrefix === $prefix2 ) {
     				# Same as the last item, so no need to deal with nesting or opening stuff
     				$output .= $this->nextItem( substr( $prefix, -1 ) );
     				$paragraphStack = false;
    @@ -2047,37 +2149,37 @@ class Parser
     					# So we check for : in the remainder text to split up the
     					# title and definition, without b0rking links.
     					$term = $t2 = '';
    -					if ($this->findColonNoLinks($t, $term, $t2) !== false) {
    +					if ( $this->findColonNoLinks( $t, $term, $t2 ) !== false ) {
     						$t = $t2;
     						$output .= $term . $this->nextItem( ':' );
     					}
     				}
    -			} elseif( $prefixLength || $lastPrefixLength ) {
    -				// We need to open or close prefixes, or both.
    +			} elseif ( $prefixLength || $lastPrefixLength ) {
    +				# We need to open or close prefixes, or both.
     
     				# Either open or close a level...
     				$commonPrefixLength = $this->getCommon( $prefix, $lastPrefix );
     				$paragraphStack = false;
     
    -				// Close all the prefixes which aren't shared.
    -				while( $commonPrefixLength < $lastPrefixLength ) {
    +				# Close all the prefixes which aren't shared.
    +				while ( $commonPrefixLength < $lastPrefixLength ) {
     					$output .= $this->closeList( $lastPrefix[$lastPrefixLength-1] );
     					--$lastPrefixLength;
     				}
     
    -				// Continue the current prefix if appropriate.
    +				# Continue the current prefix if appropriate.
     				if ( $prefixLength <= $commonPrefixLength && $commonPrefixLength > 0 ) {
     					$output .= $this->nextItem( $prefix[$commonPrefixLength-1] );
     				}
     
    -				// Open prefixes where appropriate.
    +				# Open prefixes where appropriate.
     				while ( $prefixLength > $commonPrefixLength ) {
     					$char = substr( $prefix, $commonPrefixLength, 1 );
     					$output .= $this->openList( $char );
     
     					if ( ';' === $char ) {
     						# FIXME: This is dupe of code above
    -						if ($this->findColonNoLinks($t, $term, $t2) !== false) {
    +						if ( $this->findColonNoLinks( $t, $term, $t2 ) !== false ) {
     							$t = $t2;
     							$output .= $term . $this->nextItem( ':' );
     						}
    @@ -2087,11 +2189,11 @@ class Parser
     				$lastPrefix = $prefix2;
     			}
     
    -			// If we have no prefixes, go to paragraph mode.
    -			if( 0 == $prefixLength ) {
    +			# If we have no prefixes, go to paragraph mode.
    +			if ( 0 == $prefixLength ) {
     				wfProfileIn( __METHOD__."-paragraph" );
     				# No prefix (not in list)--go to paragraph mode
    -				// XXX: use a stack for nestable elements like span, table and div
    +				# XXX: use a stack for nestable elements like span, table and div
     				$openmatch = preg_match('/(?:mInPre = true;
     					}
    -					if ( $closematch ) {
    -						$inBlockElem = false;
    -					} else {
    -						$inBlockElem = true;
    -					}
    -				} else if ( !$inBlockElem && !$this->mInPre ) {
    -					if ( ' ' == substr( $t, 0, 1 ) and ( $this->mLastSection === 'pre' or trim($t) != '' ) ) {
    -						// pre
    -						if ($this->mLastSection !== 'pre') {
    +					$inBlockElem = !$closematch;
    +				} elseif ( !$inBlockElem && !$this->mInPre ) {
    +					if ( ' ' == substr( $t, 0, 1 ) and ( $this->mLastSection === 'pre' || trim( $t ) != '' ) ) {
    +						# pre
    +						if ( $this->mLastSection !== 'pre' ) {
     							$paragraphStack = false;
     							$output .= $this->closeParagraph().'
    ';
     							$this->mLastSection = 'pre';
     						}
     						$t = substr( $t, 1 );
     					} else {
    -						// paragraph
    -						if ( trim($t) == '' ) {
    +						# paragraph
    +						if ( trim( $t ) === '' ) {
     							if ( $paragraphStack ) {
     								$output .= $paragraphStack.'
    '; $paragraphStack = false; $this->mLastSection = 'p'; } else { - if ($this->mLastSection !== 'p' ) { + if ( $this->mLastSection !== 'p' ) { $output .= $this->closeParagraph(); $this->mLastSection = ''; $paragraphStack = '

    '; @@ -2138,7 +2236,7 @@ class Parser $output .= $paragraphStack; $paragraphStack = false; $this->mLastSection = 'p'; - } else if ($this->mLastSection !== 'p') { + } elseif ( $this->mLastSection !== 'p' ) { $output .= $this->closeParagraph().'

    '; $this->mLastSection = 'p'; } @@ -2147,11 +2245,11 @@ class Parser } wfProfileOut( __METHOD__."-paragraph" ); } - // somewhere above we forget to get out of pre block (bug 785) - if($preCloseMatch && $this->mInPre) { + # somewhere above we forget to get out of pre block (bug 785) + if ( $preCloseMatch && $this->mInPre ) { $this->mInPre = false; } - if ($paragraphStack === false) { + if ( $paragraphStack === false ) { $output .= $t."\n"; } } @@ -2171,31 +2269,32 @@ class Parser /** * Split up a string on ':', ignoring any occurences inside tags * to prevent illegal overlapping. - * @param string $str the string to split - * @param string &$before set to everything before the ':' - * @param string &$after set to everything after the ':' - * return string the position of the ':', or false if none found + * + * @param $str String: the string to split + * @param &$before String: set to everything before the ':' + * @param &$after String: set to everything after the ':' + * return String: the position of the ':', or false if none found */ - function findColonNoLinks($str, &$before, &$after) { + function findColonNoLinks( $str, &$before, &$after ) { wfProfileIn( __METHOD__ ); $pos = strpos( $str, ':' ); - if( $pos === false ) { - // Nothing to find! + if ( $pos === false ) { + # Nothing to find! wfProfileOut( __METHOD__ ); return false; } $lt = strpos( $str, '<' ); - if( $lt === false || $lt > $pos ) { - // Easy; no tag nesting to worry about + if ( $lt === false || $lt > $pos ) { + # Easy; no tag nesting to worry about $before = substr( $str, 0, $pos ); $after = substr( $str, $pos+1 ); wfProfileOut( __METHOD__ ); return $pos; } - // Ugly state machine to walk through avoiding tags. + # Ugly state machine to walk through avoiding tags. $state = self::COLON_STATE_TEXT; $stack = 0; $len = strlen( $str ); @@ -2203,67 +2302,67 @@ class Parser $c = $str{$i}; switch( $state ) { - // (Using the number is a performance hack for common cases) - case 0: // self::COLON_STATE_TEXT: + # (Using the number is a performance hack for common cases) + case 0: # self::COLON_STATE_TEXT: switch( $c ) { case "<": - // Could be either a tag or an tag + # Could be either a tag or an tag $state = self::COLON_STATE_TAGSTART; break; case ":": - if( $stack == 0 ) { - // We found it! + if ( $stack == 0 ) { + # We found it! $before = substr( $str, 0, $i ); $after = substr( $str, $i + 1 ); wfProfileOut( __METHOD__ ); return $i; } - // Embedded in a tag; don't break it. + # Embedded in a tag; don't break it. break; default: - // Skip ahead looking for something interesting + # Skip ahead looking for something interesting $colon = strpos( $str, ':', $i ); - if( $colon === false ) { - // Nothing else interesting + if ( $colon === false ) { + # Nothing else interesting wfProfileOut( __METHOD__ ); return false; } $lt = strpos( $str, '<', $i ); - if( $stack === 0 ) { - if( $lt === false || $colon < $lt ) { - // We found it! + if ( $stack === 0 ) { + if ( $lt === false || $colon < $lt ) { + # We found it! $before = substr( $str, 0, $colon ); $after = substr( $str, $colon + 1 ); wfProfileOut( __METHOD__ ); return $i; } } - if( $lt === false ) { - // Nothing else interesting to find; abort! - // We're nested, but there's no close tags left. Abort! + if ( $lt === false ) { + # Nothing else interesting to find; abort! + # We're nested, but there's no close tags left. Abort! break 2; } - // Skip ahead to next tag start + # Skip ahead to next tag start $i = $lt; $state = self::COLON_STATE_TAGSTART; } break; - case 1: // self::COLON_STATE_TAG: - // In a + case 1: # self::COLON_STATE_TAG: + # In a switch( $c ) { case ">": $stack++; $state = self::COLON_STATE_TEXT; break; case "/": - // Slash may be followed by >? + # Slash may be followed by >? $state = self::COLON_STATE_TAGSLASH; break; default: - // ignore + # ignore } break; - case 2: // self::COLON_STATE_TAGSTART: + case 2: # self::COLON_STATE_TAGSTART: switch( $c ) { case "/": $state = self::COLON_STATE_CLOSETAG; @@ -2272,18 +2371,18 @@ class Parser $state = self::COLON_STATE_COMMENT; break; case ">": - // Illegal early close? This shouldn't happen D: + # Illegal early close? This shouldn't happen D: $state = self::COLON_STATE_TEXT; break; default: $state = self::COLON_STATE_TAG; } break; - case 3: // self::COLON_STATE_CLOSETAG: - // In a - if( $c === ">" ) { + case 3: # self::COLON_STATE_CLOSETAG: + # In a + if ( $c === ">" ) { $stack--; - if( $stack < 0 ) { + if ( $stack < 0 ) { wfDebug( __METHOD__.": Invalid input; too many close tags\n" ); wfProfileOut( __METHOD__ ); return false; @@ -2292,28 +2391,28 @@ class Parser } break; case self::COLON_STATE_TAGSLASH: - if( $c === ">" ) { - // Yes, a self-closed tag + if ( $c === ">" ) { + # Yes, a self-closed tag $state = self::COLON_STATE_TEXT; } else { - // Probably we're jumping the gun, and this is an attribute + # Probably we're jumping the gun, and this is an attribute $state = self::COLON_STATE_TAG; } break; - case 5: // self::COLON_STATE_COMMENT: - if( $c === "-" ) { + case 5: # self::COLON_STATE_COMMENT: + if ( $c === "-" ) { $state = self::COLON_STATE_COMMENTDASH; } break; case self::COLON_STATE_COMMENTDASH: - if( $c === "-" ) { + if ( $c === "-" ) { $state = self::COLON_STATE_COMMENTDASHDASH; } else { $state = self::COLON_STATE_COMMENT; } break; case self::COLON_STATE_COMMENTDASHDASH: - if( $c === ">" ) { + if ( $c === ">" ) { $state = self::COLON_STATE_TEXT; } else { $state = self::COLON_STATE_COMMENT; @@ -2323,8 +2422,9 @@ class Parser throw new MWException( "State machine error in " . __METHOD__ ); } } - if( $stack > 0 ) { + if ( $stack > 0 ) { wfDebug( __METHOD__.": Invalid input; not enough close tags (stack $stack, state $state)\n" ); + wfProfileOut( __METHOD__ ); return false; } wfProfileOut( __METHOD__ ); @@ -2337,8 +2437,8 @@ class Parser * @private */ function getVariableValue( $index, $frame=false ) { - global $wgContLang, $wgSitename, $wgServer, $wgServerName; - global $wgScriptPath, $wgStylePath; + global $wgContLang, $wgSitename, $wgServer; + global $wgArticlePath, $wgScriptPath, $wgStylePath; /** * Some of these require message or data lookups and can be @@ -2442,7 +2542,7 @@ class Parser $value = wfUrlEncode( str_replace( ' ', '_', $this->mTitle->getBaseText() ) ); break; case 'talkpagename': - if( $this->mTitle->canTalk() ) { + if ( $this->mTitle->canTalk() ) { $talkPage = $this->mTitle->getTalkPage(); $value = wfEscapeWikiText( $talkPage->getPrefixedText() ); } else { @@ -2450,7 +2550,7 @@ class Parser } break; case 'talkpagenamee': - if( $this->mTitle->canTalk() ) { + if ( $this->mTitle->canTalk() ) { $talkPage = $this->mTitle->getTalkPage(); $value = $talkPage->getPrefixedUrl(); } else { @@ -2466,62 +2566,69 @@ class Parser $value = $subjPage->getPrefixedUrl(); break; case 'revisionid': - // Let the edit saving system know we should parse the page - // *after* a revision ID has been assigned. + # Let the edit saving system know we should parse the page + # *after* a revision ID has been assigned. $this->mOutput->setFlag( 'vary-revision' ); wfDebug( __METHOD__ . ": {{REVISIONID}} used, setting vary-revision...\n" ); $value = $this->mRevisionId; break; case 'revisionday': - // Let the edit saving system know we should parse the page - // *after* a revision ID has been assigned. This is for null edits. + # Let the edit saving system know we should parse the page + # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag( 'vary-revision' ); wfDebug( __METHOD__ . ": {{REVISIONDAY}} used, setting vary-revision...\n" ); $value = intval( substr( $this->getRevisionTimestamp(), 6, 2 ) ); break; case 'revisionday2': - // Let the edit saving system know we should parse the page - // *after* a revision ID has been assigned. This is for null edits. + # Let the edit saving system know we should parse the page + # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag( 'vary-revision' ); wfDebug( __METHOD__ . ": {{REVISIONDAY2}} used, setting vary-revision...\n" ); $value = substr( $this->getRevisionTimestamp(), 6, 2 ); break; case 'revisionmonth': - // Let the edit saving system know we should parse the page - // *after* a revision ID has been assigned. This is for null edits. + # Let the edit saving system know we should parse the page + # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag( 'vary-revision' ); wfDebug( __METHOD__ . ": {{REVISIONMONTH}} used, setting vary-revision...\n" ); + $value = substr( $this->getRevisionTimestamp(), 4, 2 ); + break; + case 'revisionmonth1': + # Let the edit saving system know we should parse the page + # *after* a revision ID has been assigned. This is for null edits. + $this->mOutput->setFlag( 'vary-revision' ); + wfDebug( __METHOD__ . ": {{REVISIONMONTH1}} used, setting vary-revision...\n" ); $value = intval( substr( $this->getRevisionTimestamp(), 4, 2 ) ); break; case 'revisionyear': - // Let the edit saving system know we should parse the page - // *after* a revision ID has been assigned. This is for null edits. + # Let the edit saving system know we should parse the page + # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag( 'vary-revision' ); wfDebug( __METHOD__ . ": {{REVISIONYEAR}} used, setting vary-revision...\n" ); $value = substr( $this->getRevisionTimestamp(), 0, 4 ); break; case 'revisiontimestamp': - // Let the edit saving system know we should parse the page - // *after* a revision ID has been assigned. This is for null edits. + # Let the edit saving system know we should parse the page + # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag( 'vary-revision' ); wfDebug( __METHOD__ . ": {{REVISIONTIMESTAMP}} used, setting vary-revision...\n" ); $value = $this->getRevisionTimestamp(); break; case 'revisionuser': - // Let the edit saving system know we should parse the page - // *after* a revision ID has been assigned. This is for null edits. + # Let the edit saving system know we should parse the page + # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag( 'vary-revision' ); wfDebug( __METHOD__ . ": {{REVISIONUSER}} used, setting vary-revision...\n" ); $value = $this->getRevisionUser(); break; case 'namespace': - $value = str_replace('_',' ',$wgContLang->getNsText( $this->mTitle->getNamespace() ) ); + $value = str_replace( '_',' ',$wgContLang->getNsText( $this->mTitle->getNamespace() ) ); break; case 'namespacee': $value = wfUrlencode( $wgContLang->getNsText( $this->mTitle->getNamespace() ) ); break; case 'talkspace': - $value = $this->mTitle->canTalk() ? str_replace('_',' ',$this->mTitle->getTalkNsText()) : ''; + $value = $this->mTitle->canTalk() ? str_replace( '_',' ',$this->mTitle->getTalkNsText() ) : ''; break; case 'talkspacee': $value = $this->mTitle->canTalk() ? wfUrlencode( $this->mTitle->getTalkNsText() ) : ''; @@ -2545,8 +2652,8 @@ class Parser $value = $wgContLang->formatNum( gmdate( 'H', $ts ), true ); break; case 'currentweek': - // @bug 4594 PHP5 has it zero padded, PHP4 does not, cast to - // int to remove the padding + # @bug 4594 PHP5 has it zero padded, PHP4 does not, cast to + # int to remove the padding $value = $wgContLang->formatNum( (int)gmdate( 'W', $ts ) ); break; case 'currentdow': @@ -2565,8 +2672,8 @@ class Parser $value = $wgContLang->formatNum( $localHour, true ); break; case 'localweek': - // @bug 4594 PHP5 has it zero padded, PHP4 does not, cast to - // int to remove the padding + # @bug 4594 PHP5 has it zero padded, PHP4 does not, cast to + # int to remove the padding $value = $wgContLang->formatNum( (int)$localWeek ); break; case 'localdow': @@ -2588,7 +2695,7 @@ class Parser $value = $wgContLang->formatNum( SiteStats::pages() ); break; case 'numberofadmins': - $value = $wgContLang->formatNum( SiteStats::numberingroup('sysop') ); + $value = $wgContLang->formatNum( SiteStats::numberingroup( 'sysop' ) ); break; case 'numberofedits': $value = $wgContLang->formatNum( SiteStats::edits() ); @@ -2605,12 +2712,17 @@ class Parser case 'currentversion': $value = SpecialVersion::getVersion(); break; + case 'articlepath': + return $wgArticlePath; case 'sitename': return $wgSitename; case 'server': return $wgServer; case 'servername': - return $wgServerName; + wfSuppressWarnings(); # May give an E_WARNING in PHP < 5.3.3 + $serverName = parse_url( $wgServer, PHP_URL_HOST ); + wfRestoreWarnings(); + return $serverName ? $serverName : $wgServer; case 'scriptpath': return $wgScriptPath; case 'stylepath': @@ -2618,14 +2730,15 @@ class Parser case 'directionmark': return $wgContLang->getDirMark(); case 'contentlanguage': - global $wgContLanguageCode; - return $wgContLanguageCode; + global $wgLanguageCode; + return $wgLanguageCode; default: $ret = null; - if ( wfRunHooks( 'ParserGetVariableValueSwitch', array( &$this, &$this->mVarCache, &$index, &$ret, &$frame ) ) ) + if ( wfRunHooks( 'ParserGetVariableValueSwitch', array( &$this, &$this->mVarCache, &$index, &$ret, &$frame ) ) ) { return $ret; - else + } else { return null; + } } if ( $index ) @@ -2635,7 +2748,7 @@ class Parser } /** - * initialise the magic variables (like CURRENTMONTHNAME) and substitution modifiers + * initialise the magic variables (like CURRENTMONTHNAME) and substitution modifiers * * @private */ @@ -2653,8 +2766,8 @@ class Parser * Preprocess some wikitext and return the document tree. * This is the ghost of replace_variables(). * - * @param string $text The text to parse - * @param integer flags Bitwise combination of: + * @param $text String: The text to parse + * @param $flags Integer: bitwise combination of: * self::PTD_FOR_INCLUSION Handle / as if the text is being * included. Default is to assume a direct page view. * @@ -2671,12 +2784,12 @@ class Parser * * @private */ - function preprocessToDom ( $text, $flags = 0 ) { + function preprocessToDom( $text, $flags = 0 ) { $dom = $this->getPreprocessor()->preprocessToObj( $text, $flags ); return $dom; } - /* + /** * Return a three-element array: leading whitespace, string contents, trailing whitespace */ public static function splitWhitespace( $s ) { @@ -2702,11 +2815,11 @@ class Parser * self::OT_PREPROCESS: templates but not extension tags * self::OT_HTML: all templates and extension tags * - * @param string $tex The text to transform - * @param PPFrame $frame Object describing the arguments passed to the template. + * @param $text String: the text to transform + * @param $frame PPFrame Object describing the arguments passed to the template. * Arguments may also be provided as an associative array, as was the usual case before MW1.12. * Providing arguments this way may be useful for extensions wishing to perform variable replacement explicitly. - * @param bool $argsOnly Only do argument (triple-brace) expansion, not double-brace expansion + * @param $argsOnly Boolean: only do argument (triple-brace) expansion, not double-brace expansion * @private */ function replaceVariables( $text, $frame = false, $argsOnly = false ) { @@ -2720,7 +2833,7 @@ class Parser $frame = $this->getPreprocessor()->newFrame(); } elseif ( !( $frame instanceof PPFrame ) ) { wfDebug( __METHOD__." called using plain parameters instead of a PPFrame instance. Creating custom frame.\n" ); - $frame = $this->getPreprocessor()->newCustomFrame($frame); + $frame = $this->getPreprocessor()->newCustomFrame( $frame ); } $dom = $this->preprocessToDom( $text ); @@ -2731,11 +2844,11 @@ class Parser return $text; } - /// Clean up argument array - refactored in 1.9 so parserfunctions can use it, too. + # Clean up argument array - refactored in 1.9 so parserfunctions can use it, too. static function createAssocArgs( $args ) { $assocArgs = array(); $index = 1; - foreach( $args as $arg ) { + foreach ( $args as $arg ) { $eqpos = strpos( $arg, '=' ); if ( $eqpos === false ) { $assocArgs[$index++] = $arg; @@ -2758,15 +2871,22 @@ class Parser * Warn the user when a parser limitation is reached * Will warn at most once the user per limitation type * - * @param string $limitationType, should be one of: - * 'expensive-parserfunction' (corresponding messages: 'expensive-parserfunction-warning', 'expensive-parserfunction-category') - * 'post-expand-template-argument' (corresponding messages: 'post-expand-template-argument-warning', 'post-expand-template-argument-category') - * 'post-expand-template-inclusion' (corresponding messages: 'post-expand-template-inclusion-warning', 'post-expand-template-inclusion-category') - * @params int $current, $max When an explicit limit has been + * @param $limitationType String: should be one of: + * 'expensive-parserfunction' (corresponding messages: + * 'expensive-parserfunction-warning', + * 'expensive-parserfunction-category') + * 'post-expand-template-argument' (corresponding messages: + * 'post-expand-template-argument-warning', + * 'post-expand-template-argument-category') + * 'post-expand-template-inclusion' (corresponding messages: + * 'post-expand-template-inclusion-warning', + * 'post-expand-template-inclusion-category') + * @param $current Current value + * @param $max Maximum allowed, when an explicit limit has been * exceeded, provide the values (optional) */ function limitationWarn( $limitationType, $current=null, $max=null) { - //does no harm if $current and $max are present but are unnecessary for the message + # does no harm if $current and $max are present but are unnecessary for the message $warning = wfMsgExt( "$limitationType-warning", array( 'parsemag', 'escape' ), $current, $max ); $this->mOutput->addWarning( $warning ); $this->addTrackingCategory( "$limitationType-category" ); @@ -2776,12 +2896,12 @@ class Parser * Return the text of a template, after recursively * replacing any variables or templates within the template. * - * @param array $piece The parts of the template + * @param $piece Array: the parts of the template * $piece['title']: the title, i.e. the part before the | * $piece['parts']: the parameter array * $piece['lineStart']: whether the brace was at the start of a line - * @param PPFrame The current frame, contains template arguments - * @return string the text of the template + * @param $frame PPFrame The current frame, contains template arguments + * @return String: the text of the template * @private */ function braceSubstitution( $piece, $frame ) { @@ -2810,7 +2930,7 @@ class Parser $originalTitle = $part1; # $args is a list of argument nodes, starting from index 0, not including $part1 - $args = (null == $piece['parts']) ? array() : $piece['parts']; + $args = ( null == $piece['parts'] ) ? array() : $piece['parts']; wfProfileOut( __METHOD__.'-setup' ); # SUBST @@ -2846,8 +2966,9 @@ class Parser $id = $this->mVariables->matchStartToEnd( $part1 ); if ( $id !== false ) { $text = $this->getVariableValue( $id, $frame ); - if (MagicWord::getCacheTTL($id)>-1) - $this->mOutput->mContainsOldMagic = true; + if ( MagicWord::getCacheTTL( $id ) > -1 ) { + $this->mOutput->updateCacheExpiry( MagicWord::getCacheTTL( $id ) ); + } $found = true; } } @@ -2928,8 +3049,8 @@ class Parser unset( $result[0] ); } - // Extract flags into the local scope - // This allows callers to set flags such as nowiki, found, etc. + # Extract flags into the local scope + # This allows callers to set flags such as nowiki, found, etc. extract( $result ); } else { $text = $result; @@ -2950,21 +3071,23 @@ class Parser # Split the title into page and subpage $subpage = ''; $part1 = $this->maybeDoSubpageLink( $part1, $subpage ); - if ($subpage !== '') { + if ( $subpage !== '' ) { $ns = $this->mTitle->getNamespace(); } $title = Title::newFromText( $part1, $ns ); if ( $title ) { $titleText = $title->getPrefixedText(); # Check for language variants if the template is not found - if($wgContLang->hasVariants() && $title->getArticleID() == 0){ + if ( $wgContLang->hasVariants() && $title->getArticleID() == 0 ) { $wgContLang->findVariantLink( $part1, $title, true ); } # Do recursion depth check $limit = $this->mOptions->getMaxTemplateDepth(); if ( $frame->depth >= $limit ) { $found = true; - $text = '' . wfMsgForContent( 'parser-template-recursion-depth-warning', $limit ) . ''; + $text = '' + . wfMsgForContent( 'parser-template-recursion-depth-warning', $limit ) + . ''; } } } @@ -2973,15 +3096,18 @@ class Parser if ( !$found && $title ) { wfProfileIn( __METHOD__ . '-loadtpl' ); if ( !$title->isExternal() ) { - if ( $title->getNamespace() == NS_SPECIAL && $this->mOptions->getAllowSpecialInclusion() && $this->ot['html'] ) { + if ( $title->getNamespace() == NS_SPECIAL + && $this->mOptions->getAllowSpecialInclusion() + && $this->ot['html'] ) + { $text = SpecialPage::capturePath( $title ); if ( is_string( $text ) ) { $found = true; $isHTML = true; $this->disableCache(); } - } else if ( $wgNonincludableNamespaces && in_array( $title->getNamespace(), $wgNonincludableNamespaces ) ) { - $found = false; //access denied + } elseif ( $wgNonincludableNamespaces && in_array( $title->getNamespace(), $wgNonincludableNamespaces ) ) { + $found = false; # access denied wfDebug( __METHOD__.": template inclusion denied for " . $title->getPrefixedDBkey() ); } else { list( $text, $title ) = $this->getTemplateDom( $title ); @@ -2997,13 +3123,13 @@ class Parser $found = true; } } elseif ( $title->isTrans() ) { - // Interwiki transclusion + # Interwiki transclusion if ( $this->ot['html'] && !$forceRawInterwiki ) { $text = $this->interwikiTransclude( $title, 'render' ); $isHTML = true; } else { $text = $this->interwikiTransclude( $title, 'raw' ); - // Preprocess it like a template + # Preprocess it like a template $text = $this->preprocessToDom( $text, self::PTD_FOR_INCLUSION ); $isChildObj = true; } @@ -3058,22 +3184,31 @@ class Parser # immediately preceding headings if ( $isHTML ) { $text = "\n\n" . $this->insertStripItem( $text ); - } - # Escape nowiki-style return values - elseif ( $nowiki && ( $this->ot['html'] || $this->ot['pre'] ) ) { + } elseif ( $nowiki && ( $this->ot['html'] || $this->ot['pre'] ) ) { + # Escape nowiki-style return values $text = wfEscapeWikiText( $text ); - } - # Bug 529: if the template begins with a table or block-level - # element, it should be treated as beginning a new line. - # This behaviour is somewhat controversial. - elseif ( is_string( $text ) && !$piece['lineStart'] && preg_match('/^(?:{\\||:|;|#|\*)/', $text)) /*}*/{ + } elseif ( is_string( $text ) + && !$piece['lineStart'] + && preg_match( '/^(?:{\\||:|;|#|\*)/', $text ) ) + { + # Bug 529: if the template begins with a table or block-level + # element, it should be treated as beginning a new line. + # This behaviour is somewhat controversial. $text = "\n" . $text; } if ( is_string( $text ) && !$this->incrementIncludeSize( 'post-expand', strlen( $text ) ) ) { # Error, oversize inclusion - $text = "[[$originalTitle]]" . - $this->insertStripItem( '' ); + if ( $titleText !== false ) { + # Make a working, properly escaped link if possible (bug 23588) + $text = "[[:$titleText]]"; + } else { + # This will probably not be a working link, but at least it may + # provide some hint of where the problem is + preg_replace( '/^:/', '', $originalTitle ); + $text = "[[:$originalTitle]]"; + } + $text .= $this->insertStripItem( '' ); $this->limitationWarn( 'post-expand-template-inclusion' ); } @@ -3104,7 +3239,7 @@ class Parser return array( $this->mTplDomCache[$titleText], $title ); } - // Cache miss, go to the database + # Cache miss, go to the database list( $text, $title ) = $this->fetchTemplateAndTitle( $title ); if ( $text === false ) { @@ -3115,9 +3250,9 @@ class Parser $dom = $this->preprocessToDom( $text, self::PTD_FOR_INCLUSION ); $this->mTplDomCache[ $titleText ] = $dom; - if (! $title->equals($cacheTitle)) { + if ( !$title->equals( $cacheTitle ) ) { $this->mTplRedirCache[$cacheTitle->getPrefixedDBkey()] = - array( $title->getNamespace(),$cdb = $title->getDBkey() ); + array( $title->getNamespace(), $cdb = $title->getDBkey() ); } return array( $dom, $title ); @@ -3127,7 +3262,7 @@ class Parser * Fetch the unparsed text of a template and register a reference to it. */ function fetchTemplateAndTitle( $title ) { - $templateCb = $this->mOptions->getTemplateCallback(); + $templateCb = $this->mOptions->getTemplateCallback(); # Defaults to Parser::statelessFetchTemplate() $stuff = call_user_func( $templateCb, $title, $this ); $text = $stuff['text']; $finalTitle = isset( $stuff['finalTitle'] ) ? $stuff['finalTitle'] : $title; @@ -3136,11 +3271,11 @@ class Parser $this->mOutput->addTemplate( $dep['title'], $dep['page_id'], $dep['rev_id'] ); } } - return array($text,$finalTitle); + return array( $text, $finalTitle ); } function fetchTemplate( $title ) { - $rv = $this->fetchTemplateAndTitle($title); + $rv = $this->fetchTemplateAndTitle( $title ); return $rv[0]; } @@ -3153,13 +3288,13 @@ class Parser $finalTitle = $title; $deps = array(); - // Loop to fetch the article, with up to 1 redirect + # Loop to fetch the article, with up to 1 redirect for ( $i = 0; $i < 2 && is_object( $title ); $i++ ) { # Give extensions a chance to select the revision instead - $id = false; // Assume current + $id = false; # Assume current wfRunHooks( 'BeforeParserFetchTemplateAndtitle', array( $parser, &$title, &$skip, &$id ) ); - if( $skip ) { + if ( $skip ) { $text = false; $deps[] = array( 'title' => $title, @@ -3169,8 +3304,8 @@ class Parser } $rev = $id ? Revision::newFromId( $id ) : Revision::newFromTitle( $title ); $rev_id = $rev ? $rev->getId() : 0; - // If there is no current revision, there is no page - if( $id === false && !$rev ) { + # If there is no current revision, there is no page + if ( $id === false && !$rev ) { $linkCache = LinkCache::singleton(); $linkCache->addBadLinkObj( $title ); } @@ -3180,13 +3315,13 @@ class Parser 'page_id' => $title->getArticleID(), 'rev_id' => $rev_id ); - if( $rev ) { + if ( $rev ) { $text = $rev->getText(); - } elseif( $title->getNamespace() == NS_MEDIAWIKI ) { + } elseif ( $title->getNamespace() == NS_MEDIAWIKI ) { global $wgContLang; $message = $wgContLang->lcfirst( $title->getText() ); $text = wfMsgForContentNoTrans( $message ); - if( wfEmptyMsg( $message, $text ) ) { + if ( wfEmptyMsg( $message, $text ) ) { $text = false; break; } @@ -3196,7 +3331,7 @@ class Parser if ( $text === false ) { break; } - // Redirect? + # Redirect? $finalTitle = $title; $title = Title::newFromRedirect( $text ); } @@ -3212,35 +3347,39 @@ class Parser function interwikiTransclude( $title, $action ) { global $wgEnableScaryTranscluding; - if (!$wgEnableScaryTranscluding) - return wfMsg('scarytranscludedisabled'); + if ( !$wgEnableScaryTranscluding ) { + return wfMsgForContent('scarytranscludedisabled'); + } $url = $title->getFullUrl( "action=$action" ); - if (strlen($url) > 255) - return wfMsg('scarytranscludetoolong'); - return $this->fetchScaryTemplateMaybeFromCache($url); + if ( strlen( $url ) > 255 ) { + return wfMsgForContent( 'scarytranscludetoolong' ); + } + return $this->fetchScaryTemplateMaybeFromCache( $url ); } - function fetchScaryTemplateMaybeFromCache($url) { + function fetchScaryTemplateMaybeFromCache( $url ) { global $wgTranscludeCacheExpiry; - $dbr = wfGetDB(DB_SLAVE); + $dbr = wfGetDB( DB_SLAVE ); $tsCond = $dbr->timestamp( time() - $wgTranscludeCacheExpiry ); - $obj = $dbr->selectRow('transcache', array('tc_time', 'tc_contents'), - array('tc_url' => $url, "tc_time >= " . $dbr->addQuotes( $tsCond ) ) ); - if ($obj) { + $obj = $dbr->selectRow( 'transcache', array('tc_time', 'tc_contents' ), + array( 'tc_url' => $url, "tc_time >= " . $dbr->addQuotes( $tsCond ) ) ); + if ( $obj ) { return $obj->tc_contents; } - $text = Http::get($url); - if (!$text) - return wfMsg('scarytranscludefailed', $url); + $text = Http::get( $url ); + if ( !$text ) { + return wfMsgForContent( 'scarytranscludefailed', $url ); + } - $dbw = wfGetDB(DB_MASTER); - $dbw->replace('transcache', array('tc_url'), array( + $dbw = wfGetDB( DB_MASTER ); + $dbw->replace( 'transcache', array('tc_url'), array( 'tc_url' => $url, 'tc_time' => $dbw->timestamp( time() ), - 'tc_contents' => $text)); + 'tc_contents' => $text) + ); return $text; } @@ -3294,21 +3433,19 @@ class Parser * Return the text to be used for a given extension tag. * This is the ghost of strip(). * - * @param array $params Associative array of parameters: + * @param $params Associative array of parameters: * name PPNode for the tag name * attr PPNode for unparsed text where tag attributes are thought to be * attributes Optional associative array of parsed attributes * inner Contents of extension element * noClose Original text did not have a close tag - * @param PPFrame $frame + * @param $frame PPFrame */ function extensionSubstitution( $params, $frame ) { - global $wgRawHtml, $wgContLang; - $name = $frame->expand( $params['name'] ); $attrText = !isset( $params['attr'] ) ? null : $frame->expand( $params['attr'] ); $content = !isset( $params['inner'] ) ? null : $frame->expand( $params['inner'] ); - $marker = "{$this->mUniqPrefix}-$name-" . sprintf('%08X', $this->mMarkerIndex++) . self::MARKER_SUFFIX; + $marker = "{$this->mUniqPrefix}-$name-" . sprintf( '%08X', $this->mMarkerIndex++ ) . self::MARKER_SUFFIX; $isFunctionTag = isset( $this->mFunctionTagHooks[strtolower($name)] ) && ( $this->ot['html'] || $this->ot['pre'] ); @@ -3324,27 +3461,27 @@ class Parser $attributes = $attributes + $params['attributes']; } - if( isset( $this->mTagHooks[$name] ) ) { + if ( isset( $this->mTagHooks[$name] ) ) { # Workaround for PHP bug 35229 and similar if ( !is_callable( $this->mTagHooks[$name] ) ) { throw new MWException( "Tag hook for $name is not callable\n" ); } $output = call_user_func_array( $this->mTagHooks[$name], array( $content, $attributes, $this, $frame ) ); - } elseif( isset( $this->mFunctionTagHooks[$name] ) ) { + } elseif ( isset( $this->mFunctionTagHooks[$name] ) ) { list( $callback, $flags ) = $this->mFunctionTagHooks[$name]; - if( !is_callable( $callback ) ) + if ( !is_callable( $callback ) ) { throw new MWException( "Tag hook for $name is not callable\n" ); + } - $output = call_user_func_array( $callback, - array( &$this, $frame, $content, $attributes ) ); + $output = call_user_func_array( $callback, array( &$this, $frame, $content, $attributes ) ); } else { $output = 'Invalid tag extension name: ' . htmlspecialchars( $name ) . ''; } if ( is_array( $output ) ) { - // Extract flags to local scope (to override $markerType) + # Extract flags to local scope (to override $markerType) $flags = $output; $output = $flags[0]; unset( $flags[0] ); @@ -3368,7 +3505,7 @@ class Parser } } - if( $markerType === 'none' ) { + if ( $markerType === 'none' ) { return $output; } elseif ( $markerType === 'nowiki' ) { $this->mStripState->nowiki->setPair( $marker, $output ); @@ -3383,9 +3520,9 @@ class Parser /** * Increment an include size counter * - * @param string $type The type of expansion - * @param integer $size The size of the text - * @return boolean False if this inclusion would take it over the maximum, true otherwise + * @param $type String: the type of expansion + * @param $size Integer: the size of the text + * @return Boolean: false if this inclusion would take it over the maximum, true otherwise */ function incrementIncludeSize( $type, $size ) { if ( $this->mIncludeSizes[$type] + $size > $this->mOptions->getMaxIncludeSize( $type ) ) { @@ -3399,12 +3536,12 @@ class Parser /** * Increment the expensive function count * - * @return boolean False if the limit has been exceeded + * @return Boolean: false if the limit has been exceeded */ function incrementExpensiveFunctionCount() { global $wgExpensiveParserFunctionLimit; $this->mExpensiveFunctionCount++; - if($this->mExpensiveFunctionCount <= $wgExpensiveParserFunctionLimit) { + if ( $this->mExpensiveFunctionCount <= $wgExpensiveParserFunctionLimit ) { return true; } return false; @@ -3417,20 +3554,20 @@ class Parser function doDoubleUnderscore( $text ) { wfProfileIn( __METHOD__ ); - // The position of __TOC__ needs to be recorded + # The position of __TOC__ needs to be recorded $mw = MagicWord::get( 'toc' ); - if( $mw->match( $text ) ) { + if ( $mw->match( $text ) ) { $this->mShowToc = true; $this->mForceTocPosition = true; - // Set a placeholder. At the end we'll fill it in with the TOC. + # Set a placeholder. At the end we'll fill it in with the TOC. $text = $mw->replace( '', $text, 1 ); - // Only keep the first one. + # Only keep the first one. $text = $mw->replace( '', $text ); } - // Now match and remove the rest of them + # Now match and remove the rest of them $mwa = MagicWord::getDoubleUnderscoreArray(); $this->mDoubleUnderscores = $mwa->matchAndRemove( $text ); @@ -3441,21 +3578,25 @@ class Parser $this->mShowToc = false; } if ( isset( $this->mDoubleUnderscores['hiddencat'] ) && $this->mTitle->getNamespace() == NS_CATEGORY ) { - $this->mOutput->setProperty( 'hiddencat', 'y' ); $this->addTrackingCategory( 'hidden-category-category' ); } # (bug 8068) Allow control over whether robots index a page. # # FIXME (bug 14899): __INDEX__ always overrides __NOINDEX__ here! This # is not desirable, the last one on the page should win. - if( isset( $this->mDoubleUnderscores['noindex'] ) && $this->mTitle->canUseNoindex() ) { + if ( isset( $this->mDoubleUnderscores['noindex'] ) && $this->mTitle->canUseNoindex() ) { $this->mOutput->setIndexPolicy( 'noindex' ); $this->addTrackingCategory( 'noindex-category' ); } - if( isset( $this->mDoubleUnderscores['index'] ) && $this->mTitle->canUseNoindex() ){ + if ( isset( $this->mDoubleUnderscores['index'] ) && $this->mTitle->canUseNoindex() ) { $this->mOutput->setIndexPolicy( 'index' ); $this->addTrackingCategory( 'index-category' ); } + + # Cache all double underscores in the database + foreach ( $this->mDoubleUnderscores as $key => $val ) { + $this->mOutput->setProperty( $key, '' ); + } wfProfileOut( __METHOD__ ); return $text; @@ -3464,14 +3605,17 @@ class Parser /** * Add a tracking category, getting the title from a system message, * or print a debug message if the title is invalid. - * @param $msg String message key - * @return Bool whether the addition was successful + * + * @param $msg String: message key + * @return Boolean: whether the addition was successful */ - protected function addTrackingCategory( $msg ){ + protected function addTrackingCategory( $msg ) { $cat = wfMsgForContent( $msg ); # Allow tracking categories to be disabled by setting them to "-" - if( $cat === '-' ) return false; + if ( $cat === '-' ) { + return false; + } $containerCategory = Title::makeTitleSafe( NS_CATEGORY, $cat ); if ( $containerCategory ) { @@ -3493,25 +3637,21 @@ class Parser * It loops through all headlines, collects the necessary data, then splits up the * string and re-inserts the newly formatted headlines. * - * @param string $text - * @param string $origText Original, untouched wikitext - * @param boolean $isMain + * @param $text String + * @param $origText String: original, untouched wikitext + * @param $isMain Boolean * @private */ function formatHeadings( $text, $origText, $isMain=true ) { global $wgMaxTocLevel, $wgContLang, $wgHtml5, $wgExperimentalHtmlIds; $doNumberHeadings = $this->mOptions->getNumberHeadings(); - $showEditLink = $this->mOptions->getEditSection(); - - // Do not call quickUserCan unless necessary - if( $showEditLink && !$this->mTitle->quickUserCan( 'edit' ) ) { - $showEditLink = 0; - } - + # Inhibit editsection links if requested in the page - if ( isset( $this->mDoubleUnderscores['noeditsection'] ) || $this->mOptions->getIsPrintable() ) { + if ( isset( $this->mDoubleUnderscores['noeditsection'] ) ) { $showEditLink = 0; + } else { + $showEditLink = $this->mOptions->getEditSection(); } # Get all headlines for numbering them and adding funky stuff like [edit] @@ -3522,7 +3662,7 @@ class Parser # if there are fewer than 4 headlines in the article, do not show TOC # unless it's been explicitly enabled. $enoughToc = $this->mShowToc && - (($numMatches >= 4) || $this->mForceTocPosition); + ( ( $numMatches >= 4 ) || $this->mForceTocPosition ); # Allow user to stipulate that a page should have a "new section" # link added via __NEWSECTIONLINK__ @@ -3544,7 +3684,7 @@ class Parser } # We need this to perform operations on the HTML - $sk = $this->mOptions->getSkin(); + $sk = $this->mOptions->getSkin( $this->mTitle ); # headline counter $headlineCount = 0; @@ -3557,7 +3697,6 @@ class Parser $head = array(); $sublevelCount = array(); $levelCount = array(); - $toclevel = 0; $level = 0; $prevlevel = 0; $toclevel = 0; @@ -3571,23 +3710,23 @@ class Parser $node = $root->getFirstChild(); $byteOffset = 0; $tocraw = array(); + $refers = array(); - foreach( $matches[3] as $headline ) { + foreach ( $matches[3] as $headline ) { $isTemplate = false; $titleText = false; $sectionIndex = false; $numbering = ''; $markerMatches = array(); - if (preg_match("/^$markerRegex/", $headline, $markerMatches)) { + if ( preg_match("/^$markerRegex/", $headline, $markerMatches ) ) { $serial = $markerMatches[1]; list( $titleText, $sectionIndex ) = $this->mHeadings[$serial]; - $isTemplate = ($titleText != $baseTitleText); - $headline = preg_replace("/^$markerRegex/", "", $headline); + $isTemplate = ( $titleText != $baseTitleText ); + $headline = preg_replace( "/^$markerRegex/", "", $headline ); } - if( $toclevel ) { + if ( $toclevel ) { $prevlevel = $level; - $prevtoclevel = $toclevel; } $level = $matches[1][$headlineCount]; @@ -3595,30 +3734,30 @@ class Parser # Increase TOC level $toclevel++; $sublevelCount[$toclevel] = 0; - if( $toclevel<$wgMaxTocLevel ) { + if ( $toclevel<$wgMaxTocLevel ) { $prevtoclevel = $toclevel; $toc .= $sk->tocIndent(); $numVisible++; } - } - elseif ( $level < $prevlevel && $toclevel > 1 ) { + } elseif ( $level < $prevlevel && $toclevel > 1 ) { # Decrease TOC level, find level to jump to - for ($i = $toclevel; $i > 0; $i--) { + for ( $i = $toclevel; $i > 0; $i-- ) { if ( $levelCount[$i] == $level ) { # Found last matching level $toclevel = $i; break; - } - elseif ( $levelCount[$i] < $level ) { + } elseif ( $levelCount[$i] < $level ) { # Found first matching level below current level $toclevel = $i + 1; break; } } - if( $i == 0 ) $toclevel = 1; - if( $toclevel<$wgMaxTocLevel ) { - if($prevtoclevel < $wgMaxTocLevel) { + if ( $i == 0 ) { + $toclevel = 1; + } + if ( $toclevel<$wgMaxTocLevel ) { + if ( $prevtoclevel < $wgMaxTocLevel ) { # Unindent only if the previous toc level was shown :p $toc .= $sk->tocUnindent( $prevtoclevel - $toclevel ); $prevtoclevel = $toclevel; @@ -3626,10 +3765,9 @@ class Parser $toc .= $sk->tocLineEnd(); } } - } - else { + } else { # No change in level, end TOC line - if( $toclevel<$wgMaxTocLevel ) { + if ( $toclevel<$wgMaxTocLevel ) { $toc .= $sk->tocLineEnd(); } } @@ -3640,8 +3778,8 @@ class Parser @$sublevelCount[$toclevel]++; $dot = 0; for( $i = 1; $i <= $toclevel; $i++ ) { - if( !empty( $sublevelCount[$i] ) ) { - if( $dot ) { + if ( !empty( $sublevelCount[$i] ) ) { + if ( $dot ) { $numbering .= '.'; } $numbering .= $wgContLang->formatNum( $sublevelCount[$i] ); @@ -3662,15 +3800,14 @@ class Parser # Strip out HTML (other than plain and : bug 8393) $tocline = preg_replace( array( '#<(?!/?(sup|sub)).*?'.'>#', '#<(/?(sup|sub)).*?'.'>#' ), - array( '', '<$1>'), + array( '', '<$1>' ), $safeHeadline ); $tocline = trim( $tocline ); # For the anchor, strip out HTML-y stuff period $safeHeadline = preg_replace( '/<.*?'.'>/', '', $safeHeadline ); - $safeHeadline = preg_replace( '/[ _]+/', ' ', $safeHeadline ); - $safeHeadline = trim( $safeHeadline ); + $safeHeadline = Sanitizer::normalizeSectionNameWhitespace( $safeHeadline ); # Save headline for section edit hint before it's escaped $headlineHint = $safeHeadline; @@ -3700,9 +3837,10 @@ class Parser 'noninitial' ); } - # HTML names must be case-insensitively unique (bug 10721). FIXME: - # Does this apply to Unicode characters? Because we aren't - # handling those here. + # HTML names must be case-insensitively unique (bug 10721). + # This does not apply to Unicode characters per + # http://dev.w3.org/html5/spec/infrastructure.html#case-sensitivity-and-string-comparison + # FIXME: We may be changing them depending on the current locale. $arrayKey = strtolower( $safeHeadline ); if ( $legacyHeadline === false ) { $legacyArrayKey = false; @@ -3723,7 +3861,7 @@ class Parser } # Don't number the heading if it is the only one (looks silly) - if( $doNumberHeadings && count( $matches[3] ) > 1) { + if ( $doNumberHeadings && count( $matches[3] ) > 1) { # the two are different if the line contains a link $headline = $numbering . ' ' . $headline; } @@ -3737,9 +3875,9 @@ class Parser if ( $legacyHeadline !== false && $refers[$legacyArrayKey] > 1 ) { $legacyAnchor .= '_' . $refers[$legacyArrayKey]; } - if( $enoughToc && ( !isset($wgMaxTocLevel) || $toclevel<$wgMaxTocLevel ) ) { - $toc .= $sk->tocLine($anchor, $tocline, - $numbering, $toclevel, ($isTemplate ? false : $sectionIndex)); + if ( $enoughToc && ( !isset( $wgMaxTocLevel ) || $toclevel < $wgMaxTocLevel ) ) { + $toc .= $sk->tocLine( $anchor, $tocline, + $numbering, $toclevel, ( $isTemplate ? false : $sectionIndex ) ); } # Add the section to the section tree @@ -3747,8 +3885,9 @@ class Parser while ( $node && !$isTemplate ) { if ( $node->getName() === 'h' ) { $bits = $node->splitHeading(); - if ( $bits['i'] == $sectionIndex ) + if ( $bits['i'] == $sectionIndex ) { break; + } } $byteOffset += mb_strlen( $this->mStripState->unstripBoth( $frame->expand( $node, PPFrame::RECOVER_ORIG ) ) ); @@ -3759,20 +3898,20 @@ class Parser 'level' => $level, 'line' => $tocline, 'number' => $numbering, - 'index' => ($isTemplate ? 'T-' : '' ) . $sectionIndex, + 'index' => ( $isTemplate ? 'T-' : '' ) . $sectionIndex, 'fromtitle' => $titleText, 'byteoffset' => ( $isTemplate ? null : $byteOffset ), 'anchor' => $anchor, ); # give headline the correct tag - if( $showEditLink && $sectionIndex !== false ) { - if( $isTemplate ) { + if ( $showEditLink && $sectionIndex !== false ) { + if ( $isTemplate ) { # Put a T flag in the section identifier, to indicate to extractSections() # that sections inside should be counted. - $editlink = $sk->doEditSectionLink(Title::newFromText( $titleText ), "T-$sectionIndex"); + $editlink = $sk->doEditSectionLink( Title::newFromText( $titleText ), "T-$sectionIndex", null, $this->mOptions->getUserLang() ); } else { - $editlink = $sk->doEditSectionLink($this->mTitle, $sectionIndex, $headlineHint); + $editlink = $sk->doEditSectionLink( $this->mTitle, $sectionIndex, $headlineHint, $this->mOptions->getUserLang() ); } } else { $editlink = ''; @@ -3787,15 +3926,15 @@ class Parser $this->setOutputType( $oldType ); # Never ever show TOC if no headers - if( $numVisible < 1 ) { + if ( $numVisible < 1 ) { $enoughToc = false; } - if( $enoughToc ) { - if( $prevtoclevel > 0 && $prevtoclevel < $wgMaxTocLevel ) { + if ( $enoughToc ) { + if ( $prevtoclevel > 0 && $prevtoclevel < $wgMaxTocLevel ) { $toc .= $sk->tocUnindent( $prevtoclevel - 1 ); } - $toc = $sk->tocList( $toc ); + $toc = $sk->tocList( $toc, $this->mOptions->getUserLang() ); $this->mOutput->setTOCHTML( $toc ); } @@ -3808,8 +3947,8 @@ class Parser $blocks = preg_split( '/.*?<\/H[1-6]>/i', $text ); $i = 0; - foreach( $blocks as $block ) { - if( $showEditLink && $headlineCount > 0 && $i == 0 && $block !== "\n" ) { + foreach ( $blocks as $block ) { + if ( $showEditLink && $headlineCount > 0 && $i == 0 && $block !== "\n" ) { # This is the [edit] link that appears for the top block of text when # section editing is enabled @@ -3818,126 +3957,35 @@ class Parser # $full .= $sk->editSectionLink(0); } $full .= $block; - if( $enoughToc && !$i && $isMain && !$this->mForceTocPosition ) { + if ( $enoughToc && !$i && $isMain && !$this->mForceTocPosition ) { # Top anchor now in skin $full = $full.$toc; } - if( !empty( $head[$i] ) ) { + if ( !empty( $head[$i] ) ) { $full .= $head[$i]; } $i++; } - if( $this->mForceTocPosition ) { + if ( $this->mForceTocPosition ) { return str_replace( '', $toc, $full ); } else { return $full; } } - /** - * Merge $tree2 into $tree1 by replacing the section with index - * $section in $tree1 and its descendants with the sections in $tree2. - * Note that in the returned section tree, only the 'index' and - * 'byteoffset' fields are guaranteed to be correct. - * @param $tree1 array Section tree from ParserOutput::getSectons() - * @param $tree2 array Section tree - * @param $section int Section index - * @param $title Title Title both section trees come from - * @param $len2 int Length of the original wikitext for $tree2 - * @return array Merged section tree - */ - public static function mergeSectionTrees( $tree1, $tree2, $section, $title, $len2 ) { - global $wgContLang; - $newTree = array(); - $targetLevel = false; - $merged = false; - $lastLevel = 1; - $nextIndex = 1; - $numbering = array( 0 ); - $titletext = $title->getPrefixedDBkey(); - foreach ( $tree1 as $s ) { - if ( $targetLevel !== false ) { - if ( $s['level'] <= $targetLevel ) - // We've skipped enough - $targetLevel = false; - else - continue; - } - if ( $s['index'] != $section || - $s['fromtitle'] != $titletext ) { - self::incrementNumbering( $numbering, - $s['toclevel'], $lastLevel ); - - // Rewrite index, byteoffset and number - if ( $s['fromtitle'] == $titletext ) { - $s['index'] = $nextIndex++; - if ( $merged ) - $s['byteoffset'] += $len2; - } - $s['number'] = implode( '.', array_map( - array( $wgContLang, 'formatnum' ), - $numbering ) ); - $lastLevel = $s['toclevel']; - $newTree[] = $s; - } else { - // We're at $section - // Insert sections from $tree2 here - foreach ( $tree2 as $s2 ) { - // Rewrite the fields in $s2 - // before inserting it - $s2['toclevel'] += $s['toclevel'] - 1; - $s2['level'] += $s['level'] - 1; - $s2['index'] = $nextIndex++; - $s2['byteoffset'] += $s['byteoffset']; - - self::incrementNumbering( $numbering, - $s2['toclevel'], $lastLevel ); - $s2['number'] = implode( '.', array_map( - array( $wgContLang, 'formatnum' ), - $numbering ) ); - $lastLevel = $s2['toclevel']; - $newTree[] = $s2; - } - // Skip all descendants of $section in $tree1 - $targetLevel = $s['level']; - $merged = true; - } - } - return $newTree; - } - - /** - * Increment a section number. Helper function for mergeSectionTrees() - * @param $number array Array representing a section number - * @param $level int Current TOC level (depth) - * @param $lastLevel int Level of previous TOC entry - */ - private static function incrementNumbering( &$number, $level, $lastLevel ) { - if ( $level > $lastLevel ) - $number[$level - 1] = 1; - else if ( $level < $lastLevel ) { - foreach ( $number as $key => $unused ) - if ( $key >= $level ) - unset( $number[$key] ); - $number[$level - 1]++; - } else - $number[$level - 1]++; - } - /** * Transform wiki markup when saving a page by doing \r\n -> \n * conversion, substitting signatures, {{subst:}} templates, etc. * - * @param string $text the text to transform - * @param Title &$title the Title object for the current article - * @param User $user the User object describing the current user - * @param ParserOptions $options parsing options - * @param bool $clearState whether to clear the parser state first - * @return string the altered wiki markup - * @public + * @param $text String: the text to transform + * @param $title Title: the Title object for the current article + * @param $user User: the User object describing the current user + * @param $options ParserOptions: parsing options + * @param $clearState Boolean: whether to clear the parser state first + * @return String: the altered wiki markup */ - function preSaveTransform( $text, Title $title, $user, $options, $clearState = true ) { + public function preSaveTransform( $text, Title $title, $user, $options, $clearState = true ) { $this->mOptions = $options; $this->setTitle( $title ); $this->setOutputType( self::OT_WIKI ); @@ -3962,13 +4010,11 @@ class Parser function pstPass2( $text, $user ) { global $wgContLang, $wgLocaltimezone; - /* Note: This is the timestamp saved as hardcoded wikitext to - * the database, we use $wgContLang here in order to give - * everyone the same signature and use the default one rather - * than the one selected in each user's preferences. - * - * (see also bug 12815) - */ + # Note: This is the timestamp saved as hardcoded wikitext to + # the database, we use $wgContLang here in order to give + # everyone the same signature and use the default one rather + # than the one selected in each user's preferences. + # (see also bug 12815) $ts = $this->mOptions->getTimestamp(); if ( isset( $wgLocaltimezone ) ) { $tz = $wgLocaltimezone; @@ -3982,13 +4028,14 @@ class Parser $ts = date( 'YmdHis', $unixts ); $tzMsg = date( 'T', $unixts ); # might vary on DST changeover! - /* Allow translation of timezones trough wiki. date() can return - * whatever crap the system uses, localised or not, so we cannot - * ship premade translations. - */ + # Allow translation of timezones through wiki. date() can return + # whatever crap the system uses, localised or not, so we cannot + # ship premade translations. $key = 'timezone-' . strtolower( trim( $tzMsg ) ); $value = wfMsgForContent( $key ); - if ( !wfEmptyMsg( $key, $value ) ) $tzMsg = $value; + if ( !wfEmptyMsg( $key, $value ) ) { + $tzMsg = $value; + } date_default_timezone_set( $oldtz ); @@ -3998,6 +4045,9 @@ class Parser # Because mOutputType is OT_WIKI, this will only process {{subst:xxx}} type tags $text = $this->replaceVariables( $text ); + # This works almost by chance, as the replaceVariables are done before the getUserSig(), + # which may corrupt this parser instance via its wfMsgExt( parsemag ) call- + # Signatures $sigText = $this->getUserSig( $user ); $text = strtr( $text, array( @@ -4007,7 +4057,6 @@ class Parser ) ); # Context links: [[|name]] and [[name (context)|]] - # global $wgLegalTitleChars; $tc = "[$wgLegalTitleChars]"; $nc = '[ _0-9A-Za-z\x80-\xff-]'; # Namespaces can use non-ascii! @@ -4045,7 +4094,10 @@ class Parser * If you have pre-fetched the nickname or the fancySig option, you can * specify them here to save a database query. * - * @param User $user + * @param $user User + * @param $nickname String: nickname to use or false to use user's default nickname + * @param $fancySig Boolean: whether the nicknname is the complete signature + * or null to use default value * @return string */ function getUserSig( &$user, $nickname = false, $fancySig = null ) { @@ -4053,21 +4105,22 @@ class Parser $username = $user->getName(); - // If not given, retrieve from the user object. + # If not given, retrieve from the user object. if ( $nickname === false ) $nickname = $user->getOption( 'nickname' ); - if ( is_null( $fancySig ) ) + if ( is_null( $fancySig ) ) { $fancySig = $user->getBoolOption( 'fancysig' ); + } $nickname = $nickname == null ? $username : $nickname; - if( mb_strlen( $nickname ) > $wgMaxSigChars ) { + if ( mb_strlen( $nickname ) > $wgMaxSigChars ) { $nickname = $username; wfDebug( __METHOD__ . ": $username has overlong signature.\n" ); - } elseif( $fancySig !== false ) { + } elseif ( $fancySig !== false ) { # Sig. might contain markup; validate this - if( $this->validateSig( $nickname ) !== false ) { + if ( $this->validateSig( $nickname ) !== false ) { # Validated; clean up (if needed) and return it return $this->cleanSig( $nickname, true ); } else { @@ -4077,7 +4130,7 @@ class Parser } } - // Make sure nickname doesnt get a sig in a sig + # Make sure nickname doesnt get a sig in a sig $nickname = $this->cleanSigInSig( $nickname ); # If we're still here, make it a link to the user page @@ -4093,7 +4146,7 @@ class Parser /** * Check that the user's signature contains no bad XML * - * @param string $text + * @param $text String * @return mixed An expanded string, or false if invalid. */ function validateSig( $text ) { @@ -4106,16 +4159,16 @@ class Parser * 1) Strip ~~~, ~~~~ and ~~~~~ out of signatures @see cleanSigInSig * 2) Substitute all transclusions * - * @param string $text + * @param $text String * @param $parsing Whether we're cleaning (preferences save) or parsing - * @return string Signature text + * @return String: signature text */ function cleanSig( $text, $parsing = false ) { if ( !$parsing ) { global $wgTitle; + $this->mOptions = new ParserOptions; $this->clearState(); $this->setTitle( $wgTitle ); - $this->mOptions = new ParserOptions; $this->setOutputType = self::OT_PREPROCESS; } @@ -4145,8 +4198,9 @@ class Parser /** * Strip ~~~, ~~~~ and ~~~~~ out of signatures - * @param string $text - * @return string Signature text with /~{3,5}/ removed + * + * @param $text String + * @return String: signature text with /~{3,5}/ removed */ function cleanSigInSig( $text ) { $text = preg_replace( '/~{3,5}/', '', $text ); @@ -4156,9 +4210,8 @@ class Parser /** * Set up some variables which are usually set up in parse() * so that an external function can call some class members with confidence - * @public */ - function startExternalParse( &$title, $options, $outputType, $clearState = true ) { + public function startExternalParse( Title $title = null, ParserOptions $options, $outputType, $clearState = true ) { $this->setTitle( $title ); $this->mOptions = $options; $this->setOutputType( $outputType ); @@ -4170,12 +4223,11 @@ class Parser /** * Wrapper for preprocess() * - * @param string $text the text to preprocess - * @param ParserOptions $options options - * @return string - * @public + * @param $text String: the text to preprocess + * @param $options ParserOptions: options + * @return String */ - function transformMsg( $text, $options ) { + public function transformMsg( $text, $options ) { global $wgTitle; static $executing = false; @@ -4185,34 +4237,37 @@ class Parser } $executing = true; - wfProfileIn(__METHOD__); - $text = $this->preprocess( $text, $wgTitle, $options ); + wfProfileIn( __METHOD__ ); + $title = $wgTitle; + if ( !$title ) { + # It's not uncommon having a null $wgTitle in scripts. See r80898 + # Create a ghost title in such case + $title = Title::newFromText( 'Dwimmerlaik' ); + } + $text = $this->preprocess( $text, $title, $options ); $executing = false; - wfProfileOut(__METHOD__); + wfProfileOut( __METHOD__ ); return $text; } /** * Create an HTML-style tag, e.g. special text * The callback should have the following form: - * function myParserHook( $text, $params, &$parser ) { ... } + * function myParserHook( $text, $params, $parser ) { ... } * * Transform and return $text. Use $parser for any required context, e.g. use * $parser->getTitle() and $parser->getOptions() not $wgTitle or $wgOut->mParserOptions * - * @public - * - * @param mixed $tag The tag to use, e.g. 'hook' for - * @param mixed $callback The callback function (and object) to use for the tag - * + * @param $tag Mixed: the tag to use, e.g. 'hook' for + * @param $callback Mixed: the callback function (and object) to use for the tag * @return The old value of the mTagHooks array associated with the hook */ - function setHook( $tag, $callback ) { + public function setHook( $tag, $callback ) { $tag = strtolower( $tag ); $oldVal = isset( $this->mTagHooks[$tag] ) ? $this->mTagHooks[$tag] : null; $this->mTagHooks[$tag] = $callback; - if( !in_array( $tag, $this->mStripList ) ) { + if ( !in_array( $tag, $this->mStripList ) ) { $this->mStripList[] = $tag; } @@ -4251,11 +4306,9 @@ class Parser * nowiki Wiki markup in the return value should be escaped * isHTML The returned text is HTML, armour it against wikitext transformation * - * @public - * - * @param string $id The magic word ID - * @param mixed $callback The callback function (and object) to use - * @param integer $flags a combination of the following flags: + * @param $id String: The magic word ID + * @param $callback Mixed: the callback function (and object) to use + * @param $flags Integer: a combination of the following flags: * SFH_NO_HASH No leading hash, i.e. {{plural:...}} instead of {{#if:...}} * * SFH_OBJECT_ARGS Pass the template arguments as PPNode objects instead of text. This @@ -4279,7 +4332,7 @@ class Parser * * @return The old callback function for this name, if any */ - function setFunctionHook( $id, $callback, $flags = 0 ) { + public function setFunctionHook( $id, $callback, $flags = 0 ) { global $wgContLang; $oldVal = isset( $this->mFunctionHooks[$id] ) ? $this->mFunctionHooks[$id][0] : null; @@ -4287,7 +4340,7 @@ class Parser # Add to function cache $mw = MagicWord::get( $id ); - if( !$mw ) + if ( !$mw ) throw new MWException( __METHOD__.'() expecting a magic word identifier.' ); $synonyms = $mw->getSynonyms(); @@ -4314,7 +4367,7 @@ class Parser /** * Get all registered function hook identifiers * - * @return array + * @return Array */ function getFunctionHooks() { return array_keys( $this->mFunctionHooks ); @@ -4331,7 +4384,7 @@ class Parser $this->mFunctionTagHooks[$tag] : null; $this->mFunctionTagHooks[$tag] = array( $callback, $flags ); - if( !in_array( $tag, $this->mStripList ) ) { + if ( !in_array( $tag, $this->mStripList ) ) { $this->mStripList[] = $tag; } @@ -4351,8 +4404,9 @@ class Parser /** * Replace link placeholders with plain text of links * (not HTML-formatted). - * @param string $text - * @return string + * + * @param $text String + * @return String */ function replaceLinkHoldersText( $text ) { return $this->mLinkHolders->replaceText( $text ); @@ -4375,22 +4429,27 @@ class Parser $ig->setParser( $this ); $ig->setHideBadImages(); $ig->setAttributes( Sanitizer::validateTagAttributes( $params, 'table' ) ); - $ig->useSkin( $this->mOptions->getSkin() ); + $ig->useSkin( $this->mOptions->getSkin( $this->mTitle ) ); $ig->mRevisionId = $this->mRevisionId; - if( isset( $params['caption'] ) ) { + if ( isset( $params['showfilename'] ) ) { + $ig->setShowFilename( true ); + } else { + $ig->setShowFilename( false ); + } + if ( isset( $params['caption'] ) ) { $caption = $params['caption']; $caption = htmlspecialchars( $caption ); $caption = $this->replaceInternalLinks( $caption ); $ig->setCaptionHtml( $caption ); } - if( isset( $params['perrow'] ) ) { + if ( isset( $params['perrow'] ) ) { $ig->setPerRow( $params['perrow'] ); } - if( isset( $params['widths'] ) ) { + if ( isset( $params['widths'] ) ) { $ig->setWidths( $params['widths'] ); } - if( isset( $params['heights'] ) ) { + if ( isset( $params['heights'] ) ) { $ig->setHeights( $params['heights'] ); } @@ -4407,11 +4466,12 @@ class Parser continue; } - if ( strpos( $matches[0], '%' ) !== false ) + if ( strpos( $matches[0], '%' ) !== false ) { $matches[1] = urldecode( $matches[1] ); - $tp = Title::newFromText( $matches[1]/*, NS_FILE*/ ); + } + $tp = Title::newFromText( $matches[1] ); $nt =& $tp; - if( is_null( $nt ) ) { + if ( is_null( $nt ) ) { # Bogus title. Ignore these so we don't bomb out later. continue; } @@ -4440,7 +4500,7 @@ class Parser $handlerClass = ''; } if ( !isset( $this->mImageParams[$handlerClass] ) ) { - // Initialise static lists + # Initialise static lists static $internalParamNames = array( 'horizAlign' => array( 'left', 'right', 'center', 'none' ), 'vertAlign' => array( 'baseline', 'sub', 'super', 'top', 'text-top', 'middle', @@ -4459,7 +4519,7 @@ class Parser } } - // Add handler params + # Add handler params $paramMap = $internalParamMap; if ( $handler ) { $handlerParamMap = $handler->getParamMap(); @@ -4475,9 +4535,10 @@ class Parser /** * Parse image options text and use it to make an image - * @param Title $title - * @param string $options - * @param LinkHolderArray $holders + * + * @param $title Title + * @param $options String + * @param $holders LinkHolderArray */ function makeImage( $title, $options, $holders = false ) { # Check if the options text is of the form "options|alt text" @@ -4506,7 +4567,7 @@ class Parser # * text-bottom $parts = StringUtils::explode( "|", $options ); - $sk = $this->mOptions->getSkin(); + $sk = $this->mOptions->getSkin( $this->mTitle ); # Give extensions a chance to select the file revision for us $skip = $time = $descQuery = false; @@ -4517,7 +4578,6 @@ class Parser } # Get the file - $imagename = $title->getDBkey(); $file = wfFindFile( $title, array( 'time' => $time ) ); # Get parameter map $handler = $file ? $file->getHandler() : false; @@ -4528,15 +4588,15 @@ class Parser $caption = ''; $params = array( 'frame' => array(), 'handler' => array(), 'horizAlign' => array(), 'vertAlign' => array() ); - foreach( $parts as $part ) { + foreach ( $parts as $part ) { $part = trim( $part ); list( $magicName, $value ) = $mwArray->matchVariableStartToEnd( $part ); $validated = false; - if( isset( $paramMap[$magicName] ) ) { + if ( isset( $paramMap[$magicName] ) ) { list( $type, $paramName ) = $paramMap[$magicName]; - // Special case; width and height come in one variable together - if( $type === 'handler' && $paramName === 'width' ) { + # Special case; width and height come in one variable together + if ( $type === 'handler' && $paramName === 'width' ) { $m = array(); # (bug 13500) In both cases (width/height and width only), # permit trailing "px" for backward compatibility. @@ -4557,7 +4617,7 @@ class Parser $params[$type]['width'] = $width; $validated = true; } - } // else no validation -- bug 13436 + } # else no validation -- bug 13436 } else { if ( $type === 'handler' ) { # Validate handler parameter @@ -4567,9 +4627,9 @@ class Parser switch( $paramName ) { case 'manualthumb': case 'alt': - // @todo Fixme: possibly check validity here for - // manualthumb? downstream behavior seems odd with - // missing manual thumbs. + # @todo Fixme: possibly check validity here for + # manualthumb? downstream behavior seems odd with + # missing manual thumbs. $validated = true; $value = $this->stripAltText( $value, $holders ); break; @@ -4584,6 +4644,9 @@ class Parser if ( preg_match( "/^($prots)$chars+$/", $value, $m ) ) { $paramName = 'link-url'; $this->mOutput->addExternalLink( $value ); + if ( $this->mOptions->getExternalLinkTarget() ) { + $params[$type]['link-target'] = $this->mOptions->getExternalLinkTarget(); + } $validated = true; } } else { @@ -4597,7 +4660,7 @@ class Parser } break; default: - // Most other things appear to be empty or numeric... + # Most other things appear to be empty or numeric... $validated = ( $value === false || is_numeric( trim( $value ) ) ); } } @@ -4670,7 +4733,7 @@ class Parser wfRunHooks( 'ParserMakeImageParams', array( $title, $file, &$params ) ); # Linker does the rest - $ret = $sk->makeImageLink2( $title, $file, $params['frame'], $params['handler'], $time, $descQuery ); + $ret = $sk->makeImageLink2( $title, $file, $params['frame'], $params['handler'], $time, $descQuery, $this->mOptions->getThumbSize() ); # Give the handler a chance to modify the parser object if ( $handler ) { @@ -4705,15 +4768,17 @@ class Parser */ function disableCache() { wfDebug( "Parser output marked as uncacheable.\n" ); - $this->mOutput->mCacheTime = -1; + $this->mOutput->setCacheTime( -1 ); // old style, for compatibility + $this->mOutput->updateCacheExpiry( 0 ); // new style, for consistency } - /**#@+ + /** * Callback from the Sanitizer for expanding items found in HTML attribute * values, so they can be safely tested and escaped. - * @param string $text - * @param PPFrame $frame - * @return string + * + * @param $text String + * @param $frame PPFrame + * @return String * @private */ function attributeStripCallback( &$text, $frame = false ) { @@ -4722,22 +4787,12 @@ class Parser return $text; } - /**#@-*/ - - /**#@+ - * Accessor/mutator - */ - function Title( $x = null ) { return wfSetVar( $this->mTitle, $x ); } - function Options( $x = null ) { return wfSetVar( $this->mOptions, $x ); } - function OutputType( $x = null ) { return wfSetVar( $this->mOutputType, $x ); } - /**#@-*/ - - /**#@+ + /** * Accessor */ - function getTags() { return array_merge( array_keys($this->mTransparentTagHooks), array_keys( $this->mTagHooks ) ); } - /**#@-*/ - + function getTags() { + return array_merge( array_keys( $this->mTransparentTagHooks ), array_keys( $this->mTagHooks ) ); + } /** * Break wikitext input into sections, and either pull or replace @@ -4745,8 +4800,8 @@ class Parser * * External callers should use the getSection and replaceSection methods. * - * @param string $text Page wikitext - * @param string $section A section identifier string of the form: + * @param $text String: Page wikitext + * @param $section String: a section identifier string of the form: * - - ... -

    * * Currently the only recognised flag is "T", which means the target section number @@ -4759,21 +4814,21 @@ class Parser * pull the given section along with its lower-level subsections. If the section is * not found, $mode=get will return $newtext, and $mode=replace will return $text. * - * @param string $mode One of "get" or "replace" - * @param string $newText Replacement text for section data. - * @return string for "get", the extracted section text. - * for "replace", the whole page with the section replaced. + * @param $mode String: one of "get" or "replace" + * @param $newText String: replacement text for section data. + * @return String: for "get", the extracted section text. + * for "replace", the whole page with the section replaced. */ private function extractSections( $text, $section, $mode, $newText='' ) { global $wgTitle; - $this->clearState(); - $this->setTitle( $wgTitle ); // not generally used but removes an ugly failure mode $this->mOptions = new ParserOptions; - $this->setOutputType( self::OT_WIKI ); + $this->clearState(); + $this->setTitle( $wgTitle ); # not generally used but removes an ugly failure mode + $this->setOutputType( self::OT_PLAIN ); $outText = ''; $frame = $this->getPreprocessor()->newFrame(); - // Process section extraction flags + # Process section extraction flags $flags = 0; $sectionParts = explode( '-', $section ); $sectionIndex = array_pop( $sectionParts ); @@ -4782,23 +4837,23 @@ class Parser $flags |= self::PTD_FOR_INCLUSION; } } - // Preprocess the text + # Preprocess the text $root = $this->preprocessToDom( $text, $flags ); - // nodes indicate section breaks - // They can only occur at the top level, so we can find them by iterating the root's children + # nodes indicate section breaks + # They can only occur at the top level, so we can find them by iterating the root's children $node = $root->getFirstChild(); - // Find the target section + # Find the target section if ( $sectionIndex == 0 ) { - // Section zero doesn't nest, level=big + # Section zero doesn't nest, level=big $targetLevel = 1000; } else { - while ( $node ) { - if ( $node->getName() === 'h' ) { - $bits = $node->splitHeading(); + while ( $node ) { + if ( $node->getName() === 'h' ) { + $bits = $node->splitHeading(); if ( $bits['i'] == $sectionIndex ) { - $targetLevel = $bits['level']; + $targetLevel = $bits['level']; break; } } @@ -4810,7 +4865,7 @@ class Parser } if ( !$node ) { - // Not found + # Not found if ( $mode === 'get' ) { return $newText; } else { @@ -4818,7 +4873,7 @@ class Parser } } - // Find the end of the section, including nested sections + # Find the end of the section, including nested sections do { if ( $node->getName() === 'h' ) { $bits = $node->splitHeading(); @@ -4833,13 +4888,13 @@ class Parser $node = $node->getNextSibling(); } while ( $node ); - // Write out the remainder (in replace mode only) + # Write out the remainder (in replace mode only) if ( $mode === 'replace' ) { - // Output the replacement text - // Add two newlines on -- trailing whitespace in $newText is conventionally - // stripped by the editor, so we need both newlines to restore the paragraph gap - // Only add trailing whitespace if there is newText - if($newText != "") { + # Output the replacement text + # Add two newlines on -- trailing whitespace in $newText is conventionally + # stripped by the editor, so we need both newlines to restore the paragraph gap + # Only add trailing whitespace if there is newText + if ( $newText != "" ) { $outText .= $newText . "\n\n"; } @@ -4850,7 +4905,7 @@ class Parser } if ( is_string( $outText ) ) { - // Re-insert stripped tags + # Re-insert stripped tags $outText = rtrim( $this->mStripState->unstripBoth( $outText ) ); } @@ -4864,19 +4919,37 @@ class Parser * * If a section contains subsections, these are also returned. * - * @param string $text text to look in - * @param string $section section identifier - * @param string $deftext default to return if section is not found + * @param $text String: text to look in + * @param $section String: section identifier + * @param $deftext String: default to return if section is not found * @return string text of the requested section */ public function getSection( $text, $section, $deftext='' ) { return $this->extractSections( $text, $section, "get", $deftext ); } + /** + * This function returns $oldtext after the content of the section + * specified by $section has been replaced with $text. + * + * @param $text String: former text of the article + * @param $section Numeric: section identifier + * @param $text String: replacing text + * #return String: modified text + */ public function replaceSection( $oldtext, $section, $text ) { return $this->extractSections( $oldtext, $section, "replace", $text ); } + /** + * Get the ID of the revision we are parsing + * + * @return Mixed: integer or null + */ + function getRevisionId() { + return $this->mRevisionId; + } + /** * Get the timestamp associated with the current revision, adjusted for * the default server-local timestamp @@ -4889,18 +4962,18 @@ class Parser $timestamp = $dbr->selectField( 'revision', 'rev_timestamp', array( 'rev_id' => $this->mRevisionId ), __METHOD__ ); - // Normalize timestamp to internal MW format for timezone processing. - // This has the added side-effect of replacing a null value with - // the current time, which gives us more sensible behavior for - // previews. + # Normalize timestamp to internal MW format for timezone processing. + # This has the added side-effect of replacing a null value with + # the current time, which gives us more sensible behavior for + # previews. $timestamp = wfTimestamp( TS_MW, $timestamp ); - // The cryptic '' timezone parameter tells to use the site-default - // timezone offset instead of the user settings. - // - // Since this value will be saved into the parser cache, served - // to other users, and potentially even used inside links and such, - // it needs to be consistent for all visitors. + # The cryptic '' timezone parameter tells to use the site-default + # timezone offset instead of the user settings. + # + # Since this value will be saved into the parser cache, served + # to other users, and potentially even used inside links and such, + # it needs to be consistent for all visitors. $this->mRevisionTimestamp = $wgContLang->userAdjust( $timestamp, '' ); wfProfileOut( __METHOD__ ); @@ -4910,11 +4983,13 @@ class Parser /** * Get the name of the user that edited the last revision + * + * @return String: user name */ function getRevisionUser() { - // if this template is subst: the revision id will be blank, - // so just use the current user's name - if( $this->mRevisionId ) { + # if this template is subst: the revision id will be blank, + # so just use the current user's name + if ( $this->mRevisionId ) { $revision = Revision::newFromId( $this->mRevisionId ); $revuser = $revision->getUserText(); } else { @@ -4931,23 +5006,24 @@ class Parser */ public function setDefaultSort( $sort ) { $this->mDefaultSort = $sort; + $this->mOutput->setProperty( 'defaultsort', $sort ); } /** * Accessor for $mDefaultSort - * Will use the title/prefixed title if none is set + * Will use the empty string if none is set. + * + * This value is treated as a prefix, so the + * empty string is equivalent to sorting by + * page name. * * @return string */ public function getDefaultSort() { - global $wgCategoryPrefixedDefaultSortkey; - if( $this->mDefaultSort !== false ) { + if ( $this->mDefaultSort !== false ) { return $this->mDefaultSort; - } elseif ($this->mTitle->getNamespace() == NS_CATEGORY || - !$wgCategoryPrefixedDefaultSortkey) { - return $this->mTitle->getText(); } else { - return $this->mTitle->getPrefixedText(); + return ''; } } @@ -4969,19 +5045,23 @@ class Parser public function guessSectionNameFromWikiText( $text ) { # Strip out wikitext links(they break the anchor) $text = $this->stripSectionName( $text ); - $headline = Sanitizer::decodeCharReferences( $text ); - # strip out HTML - $headline = StringUtils::delimiterReplace( '<', '>', '', $headline ); - $headline = trim( $headline ); - $sectionanchor = '#' . urlencode( str_replace( ' ', '_', $headline ) ); - $replacearray = array( - '%3A' => ':', - '%' => '.' - ); - return str_replace( - array_keys( $replacearray ), - array_values( $replacearray ), - $sectionanchor ); + $text = Sanitizer::normalizeSectionNameWhitespace( $text ); + return '#' . Sanitizer::escapeId( $text, 'noninitial' ); + } + + /** + * Same as guessSectionNameFromWikiText(), but produces legacy anchors + * instead. For use in redirects, since IE6 interprets Redirect: headers + * as something other than UTF-8 (apparently?), resulting in breakage. + * + * @param $text String: The section name + * @return string An anchor + */ + public function guessLegacySectionNameFromWikiText( $text ) { + # Strip out wikitext links(they break the anchor) + $text = $this->stripSectionName( $text ); + $text = Sanitizer::normalizeSectionNameWhitespace( $text ); + return '#' . Sanitizer::escapeId( $text, array( 'noninitial', 'legacy' ) ); } /** @@ -4994,42 +5074,38 @@ class Parser * to create valid section anchors by mimicing the output of the * parser when headings are parsed. * - * @param $text string Text string to be stripped of wikitext + * @param $text String: text string to be stripped of wikitext * for use in a Section anchor * @return Filtered text string */ public function stripSectionName( $text ) { # Strip internal link markup - $text = preg_replace('/\[\[:?([^[|]+)\|([^[]+)\]\]/','$2',$text); - $text = preg_replace('/\[\[:?([^[]+)\|?\]\]/','$1',$text); + $text = preg_replace( '/\[\[:?([^[|]+)\|([^[]+)\]\]/', '$2', $text ); + $text = preg_replace( '/\[\[:?([^[]+)\|?\]\]/', '$1', $text ); # Strip external link markup (FIXME: Not Tolerant to blank link text # I.E. [http://www.mediawiki.org] will render as [1] or something depending # on how many empty links there are on the page - need to figure that out. - $text = preg_replace('/\[(?:' . wfUrlProtocols() . ')([^ ]+?) ([^[]+)\]/','$2',$text); + $text = preg_replace( '/\[(?:' . wfUrlProtocols() . ')([^ ]+?) ([^[]+)\]/', '$2', $text ); # Parse wikitext quotes (italics & bold) - $text = $this->doQuotes($text); + $text = $this->doQuotes( $text ); # Strip HTML tags $text = StringUtils::delimiterReplace( '<', '>', '', $text ); return $text; } - function srvus( $text ) { - return $this->testSrvus( $text, $this->mOutputType ); - } - /** * strip/replaceVariables/unstrip for preprocessor regression testing */ - function testSrvus( $text, $title, $options, $outputType = self::OT_HTML ) { + function testSrvus( $text, $title, ParserOptions $options, $outputType = self::OT_HTML ) { + $this->mOptions = $options; $this->clearState(); - if ( ! ( $title instanceof Title ) ) { + if ( !$title instanceof Title ) { $title = Title::newFromText( $title ); } $this->mTitle = $title; - $this->mOptions = $options; $this->setOutputType( $outputType ); $text = $this->replaceVariables( $text ); $text = $this->mStripState->unstripBoth( $text ); @@ -5039,14 +5115,14 @@ class Parser function testPst( $text, $title, $options ) { global $wgUser; - if ( ! ( $title instanceof Title ) ) { + if ( !$title instanceof Title ) { $title = Title::newFromText( $title ); } return $this->preSaveTransform( $text, $title, $wgUser, $options ); } function testPreprocess( $text, $title, $options ) { - if ( ! ( $title instanceof Title ) ) { + if ( !$title instanceof Title ) { $title = Title::newFromText( $title ); } return $this->testSrvus( $text, $title, $options, self::OT_PREPROCESS ); @@ -5080,11 +5156,13 @@ class Parser $data = array(); $data['text'] = $text; - // First, find all strip markers, and store their - // data in an array. + # First, find all strip markers, and store their + # data in an array. $stripState = new StripState; $pos = 0; - while( ( $start_pos = strpos( $text, $this->mUniqPrefix, $pos ) ) && ( $end_pos = strpos( $text, self::MARKER_SUFFIX, $pos ) ) ) { + while ( ( $start_pos = strpos( $text, $this->mUniqPrefix, $pos ) ) + && ( $end_pos = strpos( $text, self::MARKER_SUFFIX, $pos ) ) ) + { $end_pos += strlen( self::MARKER_SUFFIX ); $marker = substr( $text, $start_pos, $end_pos-$start_pos ); @@ -5103,17 +5181,17 @@ class Parser } $data['stripstate'] = $stripState; - // Now, find all of our links, and store THEIR - // data in an array! :) + # Now, find all of our links, and store THEIR + # data in an array! :) $links = array( 'internal' => array(), 'interwiki' => array() ); $pos = 0; - // Internal links - while( ( $start_pos = strpos( $text, '' ) ) ); $links['interwiki'][] = $this->mLinkHolders->interwiki[$key]; @@ -5137,22 +5215,29 @@ class Parser return $data; } - function unserialiseHalfParsedText( $data, $intPrefix = null /* Unique identifying prefix */ ) { - if (!$intPrefix) - $intPrefix = $this->getRandomString(); + /** + * TODO: document + * @param $data Array + * @param $intPrefix String unique identifying prefix + * @return String + */ + function unserialiseHalfParsedText( $data, $intPrefix = null ) { + if ( !$intPrefix ) { + $intPrefix = self::getRandomString(); + } - // First, extract the strip state. + # First, extract the strip state. $stripState = $data['stripstate']; $this->mStripState->general->merge( $stripState->general ); $this->mStripState->nowiki->merge( $stripState->nowiki ); - // Now, extract the text, and renumber links + # Now, extract the text, and renumber links $text = $data['text']; $links = $data['linkholder']; - // Internal... - foreach( $links['internal'] as $ns => $nsLinks ) { - foreach( $nsLinks as $key => $entry ) { + # Internal... + foreach ( $links['internal'] as $ns => $nsLinks ) { + foreach ( $nsLinks as $key => $entry ) { $newKey = $intPrefix . '-' . $key; $this->mLinkHolders->internals[$ns][$newKey] = $entry; @@ -5160,15 +5245,15 @@ class Parser } } - // Interwiki... - foreach( $links['interwiki'] as $key => $entry ) { + # Interwiki... + foreach ( $links['interwiki'] as $key => $entry ) { $newKey = "$intPrefix-$key"; $this->mLinkHolders->interwikis[$newKey] = $entry; $text = str_replace( "", "", $text ); } - // Should be good to go. + # Should be good to go. return $text; } } diff --git a/includes/parser/ParserCache.php b/includes/parser/ParserCache.php index 524d6be5..1e028ae5 100644 --- a/includes/parser/ParserCache.php +++ b/includes/parser/ParserCache.php @@ -1,9 +1,18 @@ mMemc = $memCached; } - function getKey( $article, $popts ) { + protected function getParserOutputKey( $article, $hash ) { global $wgRequest; - if( $popts instanceof User ) // It used to be getKey( &$article, &$user ) - $popts = ParserOptions::newFromUser( $popts ); - - $user = $popts->mUser; - $printable = ( $popts->getIsPrintable() ) ? '!printable=1' : ''; - $hash = $user->getPageRenderingHash(); - if( !$article->mTitle->quickUserCan( 'edit' ) ) { - // section edit links are suppressed even if the user has them on - $edit = '!edit=0'; - } else { - $edit = ''; - } + // idhash seem to mean 'page id' + 'rendering hash' (r3710) $pageid = $article->getID(); $renderkey = (int)($wgRequest->getVal('action') == 'render'); - $key = wfMemcKey( 'pcache', 'idhash', "{$pageid}-{$renderkey}!{$hash}{$edit}{$printable}" ); + + $key = wfMemcKey( 'pcache', 'idhash', "{$pageid}-{$renderkey}!{$hash}" ); return $key; } + protected function getOptionsKey( $article ) { + $pageid = $article->getID(); + return wfMemcKey( 'pcache', 'idoptions', "{$pageid}" ); + } + + /** + * Provides an E-Tag suitable for the whole page. Note that $article + * is just the main wikitext. The E-Tag has to be unique to the whole + * page, even if the article itself is the same, so it uses the + * complete set of user options. We don't want to use the preference + * of a different user on a message just because it wasn't used in + * $article. For example give a Chinese interface to a user with + * English preferences. That's why we take into account *all* user + * options. (r70809 CR) + */ function getETag( $article, $popts ) { - return 'W/"' . $this->getKey($article, $popts) . "--" . $article->mTouched. '"'; + return 'W/"' . $this->getParserOutputKey( $article, + $popts->optionsHash( ParserOptions::legacyOptions() ) ) . + "--" . $article->getTouched() . '"'; } - function getDirty( $article, $popts ) { - $key = $this->getKey( $article, $popts ); - wfDebug( "Trying parser cache $key\n" ); - $value = $this->mMemc->get( $key ); + /** + * Retrieve the ParserOutput from ParserCache, even if it's outdated. + */ + public function getDirty( $article, $popts ) { + $value = $this->get( $article, $popts, true ); return is_object( $value ) ? $value : false; } - function get( $article, $popts ) { + /** + * Used to provide a unique id for the PoolCounter. + * It would be preferable to have this code in get() + * instead of having Article looking in our internals. + */ + public function getKey( $article, $popts, $useOutdated = true ) { + global $wgCacheEpoch; + + if( $popts instanceof User ) { + wfWarn( "Use of outdated prototype ParserCache::getKey( &\$article, &\$user )\n" ); + $popts = ParserOptions::newFromUser( $popts ); + } + + // Determine the options which affect this article + $optionsKey = $this->mMemc->get( $this->getOptionsKey( $article ) ); + if ( $optionsKey != false ) { + if ( !$useOutdated && $optionsKey->expired( $article->getTouched() ) ) { + wfIncrStats( "pcache_miss_expired" ); + $cacheTime = $optionsKey->getCacheTime(); + wfDebug( "Parser options key expired, touched " . $article->getTouched() . ", epoch $wgCacheEpoch, cached $cacheTime\n" ); + return false; + } + + $usedOptions = $optionsKey->mUsedOptions; + wfDebug( "Parser cache options found.\n" ); + } else { + if ( !$useOutdated && !self::try116cache ) { + return false; + } + $usedOptions = ParserOptions::legacyOptions(); + } + + return $this->getParserOutputKey( $article, $popts->optionsHash( $usedOptions ) ); + } + + /** + * Retrieve the ParserOutput from ParserCache. + * false if not found or outdated. + */ + public function get( $article, $popts, $useOutdated = false ) { global $wgCacheEpoch; wfProfileIn( __METHOD__ ); - $value = $this->getDirty( $article, $popts ); + $canCache = $article->checkTouched(); + if ( !$canCache ) { + // It's a redirect now + wfProfileOut( __METHOD__ ); + return false; + } + + $touched = $article->getTouched(); + + $parserOutputKey = $this->getKey( $article, $popts, $useOutdated ); + if ( $parserOutputKey === false ) { + wfProfileOut( __METHOD__ ); + return false; + } + + $value = $this->mMemc->get( $parserOutputKey ); + if ( self::try116cache && !$value && strpos( $value, '*' ) !== -1 ) { + wfDebug( "New format parser cache miss.\n" ); + $parserOutputKey = $this->getParserOutputKey( $article, $popts->optionsHash( ParserOptions::legacyOptions() ) ); + $value = $this->mMemc->get( $parserOutputKey ); + } if ( !$value ) { wfDebug( "Parser cache miss.\n" ); wfIncrStats( "pcache_miss_absent" ); @@ -71,18 +150,11 @@ class ParserCache { } wfDebug( "Found.\n" ); - # Invalid if article has changed since the cache was made - $canCache = $article->checkTouched(); - $cacheTime = $value->getCacheTime(); - $touched = $article->mTouched; - if ( !$canCache || $value->expired( $touched ) ) { - if ( !$canCache ) { - wfIncrStats( "pcache_miss_invalid" ); - wfDebug( "Invalid cached redirect, touched $touched, epoch $wgCacheEpoch, cached $cacheTime\n" ); - } else { - wfIncrStats( "pcache_miss_expired" ); - wfDebug( "Key expired, touched $touched, epoch $wgCacheEpoch, cached $cacheTime\n" ); - } + + if ( !$useOutdated && $value->expired( $touched ) ) { + wfIncrStats( "pcache_miss_expired" ); + $cacheTime = $value->getCacheTime(); + wfDebug( "ParserOutput key expired, touched $touched, epoch $wgCacheEpoch, cached $cacheTime\n" ); $value = false; } else { if ( isset( $value->mTimestamp ) ) { @@ -95,31 +167,37 @@ class ParserCache { return $value; } - function save( $parserOutput, $article, $popts ){ - global $wgParserCacheExpireTime; - $key = $this->getKey( $article, $popts ); - if( $parserOutput->getCacheTime() != -1 ) { + public function save( $parserOutput, $article, $popts ) { + $expire = $parserOutput->getCacheExpiry(); + if( $expire > 0 ) { $now = wfTimestampNow(); + + $optionsKey = new CacheTime; + $optionsKey->mUsedOptions = $parserOutput->getUsedOptions(); + $optionsKey->updateCacheExpiry( $expire ); + + $optionsKey->setCacheTime( $now ); $parserOutput->setCacheTime( $now ); + $optionsKey->setContainsOldMagic( $parserOutput->containsOldMagic() ); + + $parserOutputKey = $this->getParserOutputKey( $article, $popts->optionsHash( $optionsKey->mUsedOptions ) ); + // Save the timestamp so that we don't have to load the revision row on view $parserOutput->mTimestamp = $article->getTimestamp(); - $parserOutput->mText .= "\n\n"; - wfDebug( "Saved in parser cache with key $key and timestamp $now\n" ); + $parserOutput->mText .= "\n\n"; + wfDebug( "Saved in parser cache with key $parserOutputKey and timestamp $now\n" ); - if( $parserOutput->containsOldMagic() ){ - $expire = 3600; # 1 hour - } else { - $expire = $wgParserCacheExpireTime; - } - $this->mMemc->set( $key, $parserOutput, $expire ); + // Save the parser output + $this->mMemc->set( $parserOutputKey, $parserOutput, $expire ); + // ...and its pointer + $this->mMemc->set( $this->getOptionsKey( $article ), $optionsKey, $expire ); } else { wfDebug( "Parser output was marked as uncacheable and has not been saved.\n" ); } } - } diff --git a/includes/parser/ParserOptions.php b/includes/parser/ParserOptions.php index 985bba28..9d8b3e4f 100644 --- a/includes/parser/ParserOptions.php +++ b/includes/parser/ParserOptions.php @@ -1,5 +1,11 @@ mUseDynamicDates; } function getInterwikiMagic() { return $this->mInterwikiMagic; } function getAllowExternalImages() { return $this->mAllowExternalImages; } function getAllowExternalImagesFrom() { return $this->mAllowExternalImagesFrom; } function getEnableImageWhitelist() { return $this->mEnableImageWhitelist; } - function getEditSection() { return $this->mEditSection; } - function getNumberHeadings() { return $this->mNumberHeadings; } + function getEditSection() { $this->optionUsed('editsection'); + return $this->mEditSection; } + function getNumberHeadings() { $this->optionUsed('numberheadings'); + return $this->mNumberHeadings; } function getAllowSpecialInclusion() { return $this->mAllowSpecialInclusion; } function getTidy() { return $this->mTidy; } function getInterfaceMessage() { return $this->mInterfaceMessage; } function getTargetLanguage() { return $this->mTargetLanguage; } function getMaxIncludeSize() { return $this->mMaxIncludeSize; } function getMaxPPNodeCount() { return $this->mMaxPPNodeCount; } + function getMaxPPExpandDepth() { return $this->mMaxPPExpandDepth; } function getMaxTemplateDepth() { return $this->mMaxTemplateDepth; } function getRemoveComments() { return $this->mRemoveComments; } function getTemplateCallback() { return $this->mTemplateCallback; } function getEnableLimitReport() { return $this->mEnableLimitReport; } function getCleanSignatures() { return $this->mCleanSignatures; } function getExternalLinkTarget() { return $this->mExternalLinkTarget; } + function getMath() { $this->optionUsed('math'); + return $this->mMath; } + function getThumbSize() { $this->optionUsed('thumbsize'); + return $this->mThumbSize; } + function getIsPreview() { return $this->mIsPreview; } function getIsSectionPreview() { return $this->mIsSectionPreview; } - function getIsPrintable() { return $this->mIsPrintable; } + function getIsPrintable() { $this->optionUsed('printable'); + return $this->mIsPrintable; } - function getSkin() { + function getSkin( $title = null ) { if ( !isset( $this->mSkin ) ) { - $this->mSkin = $this->mUser->getSkin(); + $this->mSkin = $this->mUser->getSkin( $title ); } return $this->mSkin; } function getDateFormat() { + $this->optionUsed('dateformat'); if ( !isset( $this->mDateFormat ) ) { $this->mDateFormat = $this->mUser->getDatePreference(); } @@ -79,6 +103,16 @@ class ParserOptions { return $this->mTimestamp; } + /** + * You shouldn't use this. Really. $parser->getFunctionLang() is all you need. + * Using this fragments the cache and is discouraged. Yes, {{int: }} uses this, + * producing inconsistent tables (Bug 14404). + */ + function getUserLang() { + $this->optionUsed('userlang'); + return $this->mUserLang; + } + function setUseDynamicDates( $x ) { return wfSetVar( $this->mUseDynamicDates, $x ); } function setInterwikiMagic( $x ) { return wfSetVar( $this->mInterwikiMagic, $x ); } function setAllowExternalImages( $x ) { return wfSetVar( $this->mAllowExternalImages, $x ); } @@ -101,17 +135,30 @@ class ParserOptions { function setTimestamp( $x ) { return wfSetVar( $this->mTimestamp, $x ); } function setCleanSignatures( $x ) { return wfSetVar( $this->mCleanSignatures, $x ); } function setExternalLinkTarget( $x ) { return wfSetVar( $this->mExternalLinkTarget, $x ); } + function setMath( $x ) { return wfSetVar( $this->mMath, $x ); } + function setUserLang( $x ) { return wfSetVar( $this->mUserLang, $x ); } + function setThumbSize( $x ) { return wfSetVar( $this->mThumbSize, $x ); } + function setIsPreview( $x ) { return wfSetVar( $this->mIsPreview, $x ); } function setIsSectionPreview( $x ) { return wfSetVar( $this->mIsSectionPreview, $x ); } function setIsPrintable( $x ) { return wfSetVar( $this->mIsPrintable, $x ); } + /** + * Extra key that should be present in the parser cache key. + */ + function addExtraKey( $key ) { + $this->mExtraKey .= '!' . $key; + } + function __construct( $user = null ) { $this->initialiseFromUser( $user ); } /** * Get parser options - * @static + * + * @param $user User object + * @return ParserOptions object */ static function newFromUser( $user ) { return new ParserOptions( $user ); @@ -122,7 +169,7 @@ class ParserOptions { global $wgUseDynamicDates, $wgInterwikiMagic, $wgAllowExternalImages; global $wgAllowExternalImagesFrom, $wgEnableImageWhitelist, $wgAllowSpecialInclusion, $wgMaxArticleSize; global $wgMaxPPNodeCount, $wgMaxTemplateDepth, $wgMaxPPExpandDepth, $wgCleanSignatures; - global $wgExternalLinkTarget; + global $wgExternalLinkTarget, $wgLang; wfProfileIn( __METHOD__ ); @@ -161,9 +208,131 @@ class ParserOptions { $this->mEnableLimitReport = false; $this->mCleanSignatures = $wgCleanSignatures; $this->mExternalLinkTarget = $wgExternalLinkTarget; + $this->mMath = $user->getOption( 'math' ); + $this->mUserLang = $wgLang->getCode(); + $this->mThumbSize = $user->getOption( 'thumbsize' ); + $this->mIsPreview = false; $this->mIsSectionPreview = false; + $this->mIsPrintable = false; wfProfileOut( __METHOD__ ); } + + /** + * Registers a callback for tracking which ParserOptions which are used. + * This is a private API with the parser. + */ + function registerWatcher( $callback ) { + $this->onAccessCallback = $callback; + } + + /** + * Called when an option is accessed. + */ + protected function optionUsed( $optionName ) { + if ( $this->onAccessCallback ) { + call_user_func( $this->onAccessCallback, $optionName ); + } + } + + /** + * Returns the full array of options that would have been used by + * in 1.16. + * Used to get the old parser cache entries when available. + */ + public static function legacyOptions() { + global $wgUseDynamicDates; + $legacyOpts = array( 'math', 'stubthreshold', 'numberheadings', 'userlang', 'thumbsize', 'editsection', 'printable' ); + if ( $wgUseDynamicDates ) { + $legacyOpts[] = 'dateformat'; + } + return $legacyOpts; + } + + /** + * Generate a hash string with the values set on these ParserOptions + * for the keys given in the array. + * This will be used as part of the hash key for the parser cache, + * so users sharign the options with vary for the same page share + * the same cached data safely. + * + * Replaces User::getPageRenderingHash() + * + * Extensions which require it should install 'PageRenderingHash' hook, + * which will give them a chance to modify this key based on their own + * settings. + * + * @since 1.17 + * @return \string Page rendering hash + */ + public function optionsHash( $forOptions ) { + global $wgContLang, $wgRenderHashAppend; + + $confstr = ''; + + if ( in_array( 'math', $forOptions ) ) + $confstr .= $this->mMath; + else + $confstr .= '*'; + + + // Space assigned for the stubthreshold but unused + // since it disables the parser cache, its value will always + // be 0 when this function is called by parsercache. + // The conditional is here to avoid a confusing 0 + if ( true || in_array( 'stubthreshold', $forOptions ) ) + $confstr .= '!0' ; + else + $confstr .= '!*' ; + + if ( in_array( 'dateformat', $forOptions ) ) + $confstr .= '!' . $this->getDateFormat(); + + if ( in_array( 'numberheadings', $forOptions ) ) + $confstr .= '!' . ( $this->mNumberHeadings ? '1' : '' ); + else + $confstr .= '!*'; + + if ( in_array( 'userlang', $forOptions ) ) + $confstr .= '!' . $this->mUserLang; + else + $confstr .= '!*'; + + if ( in_array( 'thumbsize', $forOptions ) ) + $confstr .= '!' . $this->mThumbSize; + else + $confstr .= '!*'; + + // add in language specific options, if any + // FIXME: This is just a way of retrieving the url/user preferred variant + $confstr .= $wgContLang->getExtraHashOptions(); + + // Since the skin could be overloading link(), it should be + // included here but in practice, none of our skins do that. + // $confstr .= "!" . $this->mSkin->getSkinName(); + + $confstr .= $wgRenderHashAppend; + + if ( !in_array( 'editsection', $forOptions ) ) { + $confstr .= '!*'; + } elseif ( !$this->mEditSection ) { + $confstr .= '!edit=0'; + } + + if ( $this->mIsPrintable && in_array( 'printable', $forOptions ) ) + $confstr .= '!printable=1'; + + if ( $this->mExtraKey != '' ) + $confstr .= $this->mExtraKey; + + // Give a chance for extensions to modify the hash, if they have + // extra options or other effects on the parser cache. + wfRunHooks( 'PageRenderingHash', array( &$confstr ) ); + + // Make it a valid memcached key fragment + $confstr = str_replace( ' ', '_', $confstr ); + + return $confstr; + } } diff --git a/includes/parser/ParserOutput.php b/includes/parser/ParserOutput.php index ea5840e6..1e4765db 100644 --- a/includes/parser/ParserOutput.php +++ b/includes/parser/ParserOutput.php @@ -1,34 +1,131 @@ mCacheTime; } + + function containsOldMagic() { return $this->mContainsOldMagic; } + function setContainsOldMagic( $com ) { return wfSetVar( $this->mContainsOldMagic, $com ); } + + /** + * setCacheTime() sets the timestamp expressing when the page has been rendered. + * This doesn not control expiry, see updateCacheExpiry() for that! + */ + function setCacheTime( $t ) { return wfSetVar( $this->mCacheTime, $t ); } + + + /** + * Sets the number of seconds after which this object should expire. + * This value is used with the ParserCache. + * If called with a value greater than the value provided at any previous call, + * the new call has no effect. The value returned by getCacheExpiry is smaller + * or equal to the smallest number that was provided as an argument to + * updateCacheExpiry(). + */ + function updateCacheExpiry( $seconds ) { + $seconds = (int)$seconds; + + if ( $this->mCacheExpiry === null || $this->mCacheExpiry > $seconds ) + $this->mCacheExpiry = $seconds; + + // hack: set old-style marker for uncacheable entries. + if ( $this->mCacheExpiry !== null && $this->mCacheExpiry <= 0 ) + $this->mCacheTime = -1; + } + + /** + * Returns the number of seconds after which this object should expire. + * This method is used by ParserCache to determine how long the ParserOutput can be cached. + * The timestamp of expiry can be calculated by adding getCacheExpiry() to getCacheTime(). + * The value returned by getCacheExpiry is smaller or equal to the smallest number + * that was provided to a call of updateCacheExpiry(), and smaller or equal to the + * value of $wgParserCacheExpireTime. + */ + function getCacheExpiry() { + global $wgParserCacheExpireTime; + + if ( $this->mCacheTime < 0 ) return 0; // old-style marker for "not cachable" + + $expire = $this->mCacheExpiry; + + if ( $expire === null ) + $expire = $wgParserCacheExpireTime; + else + $expire = min( $expire, $wgParserCacheExpireTime ); + + if( $this->containsOldMagic() ) { //compatibility hack + $expire = min( $expire, 3600 ); # 1 hour + } + + if ( $expire <= 0 ) return 0; // not cachable + else return $expire; + } + + + function isCacheable() { + return $this->getCacheExpiry() > 0; + } + + /** + * Return true if this cached output object predates the global or + * per-article cache invalidation timestamps, or if it comes from + * an incompatible older version. + * + * @param $touched String: the affected article's last touched timestamp + * @return Boolean + */ + public function expired( $touched ) { + global $wgCacheEpoch; + return !$this->isCacheable() || // parser says it's uncacheable + $this->getCacheTime() < $touched || + $this->getCacheTime() <= $wgCacheEpoch || + $this->getCacheTime() < wfTimestamp( TS_MW, time() - $this->getCacheExpiry() ) || // expiry period has passed + !isset( $this->mVersion ) || + version_compare( $this->mVersion, Parser::VERSION, "lt" ); + } +} + +class ParserOutput extends CacheTime { var $mText, # The output text $mLanguageLinks, # List of the full text of language links, in the order they appear $mCategories, # Map of category names to sort keys - $mContainsOldMagic, # Boolean variable indicating if the input contained variables like {{CURRENTDAY}} $mTitleText, # title text of the chosen language variant - $mCacheTime = '', # Time when this object was generated, or -1 for uncacheable. Used in ParserCache. - $mVersion = Parser::VERSION, # Compatibility check $mLinks = array(), # 2-D map of NS/DBK to ID for the links in the document. ID=zero for broken. $mTemplates = array(), # 2-D map of NS/DBK to ID for the template references. ID=zero for broken. $mTemplateIds = array(), # 2-D map of NS/DBK to rev ID for the template references. ID=zero for broken. $mImages = array(), # DB keys of the images used, in the array key only $mExternalLinks = array(), # External link URLs, in the key only + $mInterwikiLinks = array(), # 2-D map of prefix/DBK (in keys only) for the inline interwiki links in the document. $mNewSection = false, # Show a new section link? $mHideNewSection = false, # Hide the new section link? $mNoGallery = false, # No gallery on category page? (__NOGALLERY__) $mHeadItems = array(), # Items to put in the section + $mModules = array(), # Modules to be loaded by the resource loader $mOutputHooks = array(), # Hook tags as per $wgParserOutputHooks $mWarnings = array(), # Warning text to be returned to the user. Wikitext formatted, in the key only $mSections = array(), # Table of contents $mProperties = array(), # Name/value pairs to be cached in the DB $mTOCHTML = ''; # HTML of the TOC private $mIndexPolicy = ''; # 'index' or 'noindex'? Any other value will result in no change. + private $mAccessedOptions = null; # List of ParserOptions (stored in the keys) - function ParserOutput( $text = '', $languageLinks = array(), $categoryLinks = array(), + function __construct( $text = '', $languageLinks = array(), $categoryLinks = array(), $containsOldMagic = false, $titletext = '' ) { $this->mText = $text; @@ -40,9 +137,9 @@ class ParserOutput function getText() { return $this->mText; } function &getLanguageLinks() { return $this->mLanguageLinks; } + function getInterwikiLinks() { return $this->mInterwikiLinks; } function getCategoryLinks() { return array_keys( $this->mCategories ); } function &getCategories() { return $this->mCategories; } - function getCacheTime() { return $this->mCacheTime; } function getTitleText() { return $this->mTitleText; } function getSections() { return $this->mSections; } function &getLinks() { return $this->mLinks; } @@ -51,18 +148,17 @@ class ParserOutput function &getExternalLinks() { return $this->mExternalLinks; } function getNoGallery() { return $this->mNoGallery; } function getHeadItems() { return $this->mHeadItems; } + function getModules() { return $this->mModules; } function getSubtitle() { return $this->mSubtitle; } function getOutputHooks() { return (array)$this->mOutputHooks; } function getWarnings() { return array_keys( $this->mWarnings ); } function getIndexPolicy() { return $this->mIndexPolicy; } function getTOCHTML() { return $this->mTOCHTML; } - function containsOldMagic() { return $this->mContainsOldMagic; } function setText( $text ) { return wfSetVar( $this->mText, $text ); } function setLanguageLinks( $ll ) { return wfSetVar( $this->mLanguageLinks, $ll ); } function setCategoryLinks( $cl ) { return wfSetVar( $this->mCategories, $cl ); } - function setContainsOldMagic( $com ) { return wfSetVar( $this->mContainsOldMagic, $com ); } - function setCacheTime( $t ) { return wfSetVar( $this->mCacheTime, $t ); } + function setTitleText( $t ) { return wfSetVar( $this->mTitleText, $t ); } function setSections( $toc ) { return wfSetVar( $this->mSections, $toc ); } function setIndexPolicy( $policy ) { return wfSetVar( $this->mIndexPolicy, $policy ); } @@ -96,9 +192,16 @@ class ParserOutput $this->mExternalLinks[$url] = 1; } + /** + * Record a local or interwiki inline link for saving in future link tables. + * + * @param $title Title object + * @param $id Mixed: optional known page_id so we can skip the lookup + */ function addLink( $title, $id = null ) { if ( $title->isExternal() ) { // Don't record interwikis in pagelinks + $this->addInterwikiLink( $title ); return; } $ns = $title->getNamespace(); @@ -139,23 +242,20 @@ class ParserOutput } $this->mTemplateIds[$ns][$dbk] = $rev_id; // For versioning } - + /** - * Return true if this cached output object predates the global or - * per-article cache invalidation timestamps, or if it comes from - * an incompatible older version. - * - * @param string $touched the affected article's last touched timestamp - * @return bool - * @public + * @param $title Title object, must be an interwiki link + * @throws MWException if given invalid input */ - function expired( $touched ) { - global $wgCacheEpoch; - return $this->getCacheTime() == -1 || // parser says it's uncacheable - $this->getCacheTime() < $touched || - $this->getCacheTime() <= $wgCacheEpoch || - !isset( $this->mVersion ) || - version_compare( $this->mVersion, Parser::VERSION, "lt" ); + function addInterwikiLink( $title ) { + $prefix = $title->getInterwiki(); + if( $prefix == '' ) { + throw new MWException( 'Non-interwiki link passed, internal parser error.' ); + } + if (!isset($this->mInterwikiLinks[$prefix])) { + $this->mInterwikiLinks[$prefix] = array(); + } + $this->mInterwikiLinks[$prefix][$title->getDBkey()] = 1; } /** @@ -170,22 +270,27 @@ class ParserOutput $this->mHeadItems[] = $section; } } + + function addModules( $modules ) { + $this->mModules = array_merge( $this->mModules, (array) $modules ); + } /** * Override the title to be used for display * -- this is assumed to have been validated * (check equal normalisation, etc.) * - * @param string $text Desired title text + * @param $text String: desired title text */ public function setDisplayTitle( $text ) { $this->setTitleText( $text ); + $this->setProperty( 'displaytitle', $text ); } /** * Get the title to be used for display * - * @return string + * @return String */ public function getDisplayTitle() { $t = $this->getTitleText( ); @@ -223,4 +328,25 @@ class ParserOutput } return $this->mProperties; } + + + /** + * Returns the options from its ParserOptions which have been taken + * into account to produce this output or false if not available. + * @return mixed Array/false + */ + public function getUsedOptions() { + if ( !isset( $this->mAccessedOptions ) ) { + return false; + } + return array_keys( $this->mAccessedOptions ); + } + + /** + * Callback passed by the Parser to the ParserOptions to keep track of which options are used. + * @access private + */ + function recordOption( $option ) { + $this->mAccessedOptions[$option] = true; + } } diff --git a/includes/parser/Parser_DiffTest.php b/includes/parser/Parser_DiffTest.php index 608c883a..c6dd76e5 100644 --- a/includes/parser/Parser_DiffTest.php +++ b/includes/parser/Parser_DiffTest.php @@ -1,4 +1,9 @@ conf = $conf; - $this->dtUniqPrefix = "\x7fUNIQ" . Parser::getRandomString(); } function init() { @@ -102,14 +106,18 @@ class Parser_DiffTest function setFunctionHook( $id, $callback, $flags = 0 ) { $this->init(); - foreach ( $this->parsers as $i => $parser ) { + foreach ( $this->parsers as $parser ) { $parser->setFunctionHook( $id, $callback, $flags ); } } function onClearState( &$parser ) { // hack marker prefixes to get identical output - $parser->mUniqPrefix = $this->dtUniqPrefix; + if ( !isset( $this->dtUniqPrefix ) ) { + $this->dtUniqPrefix = $parser->uniqPrefix(); + } else { + $parser->mUniqPrefix = $this->dtUniqPrefix; + } return true; } } diff --git a/includes/parser/Parser_LinkHooks.php b/includes/parser/Parser_LinkHooks.php index 2b306933..7c17ce4e 100644 --- a/includes/parser/Parser_LinkHooks.php +++ b/includes/parser/Parser_LinkHooks.php @@ -1,4 +1,10 @@ mOptions->getSkin(); $holders = new LinkHolderArray( $this ); if( is_null( $this->mTitle ) ) { @@ -136,13 +139,7 @@ class Parser_LinkHooks extends Parser wfProfileOut( __METHOD__.'-setup' ); throw new MWException( __METHOD__.": \$this->mTitle is null\n" ); } - $nottalk = !$this->mTitle->isTalkPage(); - - if($wgContLang->hasVariants()) { - $selflink = $wgContLang->convertLinkToAllVariants($this->mTitle->getPrefixedText()); - } else { - $selflink = array($this->mTitle->getPrefixedText()); - } + wfProfileOut( __METHOD__.'-setup' ); $offset = 0; @@ -268,9 +265,10 @@ class Parser_LinkHooks extends Parser if( $return === false ) { # False (no link) was returned, output plain wikitext # Build it again as the hook is allowed to modify $paramText - return isset($paramText) ? "[[$titleText|$paramText]]" : "[[$titleText]]"; + $return = isset($paramText) ? "[[$titleText|$paramText]]" : "[[$titleText]]"; } # Content was returned, return it + wfProfileOut( __METHOD__ ); return $return; } diff --git a/includes/parser/Preprocessor.php b/includes/parser/Preprocessor.php index 9c417d23..c31f37bf 100644 --- a/includes/parser/Preprocessor.php +++ b/includes/parser/Preprocessor.php @@ -1,4 +1,9 @@ "; + + foreach ( $values as $k => $val ) { + + if ( is_int( $k ) ) { + $xml .= "" . htmlspecialchars( $val ) .""; + } else { + $xml .= "" . htmlspecialchars( $k ) . "=" . htmlspecialchars( $val ) . ""; + } + } + + $xml .= ""; + + $dom = new DOMDocument(); + $dom->loadXML( $xml ); + $root = $dom->documentElement; + + $node = new PPNode_DOM( $root->childNodes ); + return $node; + } + function memCheck() { if ( $this->memoryLimit === false ) { return; @@ -45,8 +75,8 @@ class Preprocessor_DOM implements Preprocessor { * Preprocess some wikitext and return the document tree. * This is the ghost of Parser::replace_variables(). * - * @param string $text The text to parse - * @param integer flags Bitwise combination of: + * @param $text String: the text to parse + * @param $flags Integer: bitwise combination of: * Parser::PTD_FOR_INCLUSION Handle / as if the text is being * included. Default is to assume a direct page view. * @@ -443,7 +473,7 @@ class Preprocessor_DOM implements Preprocessor { $count = $piece->count; $equalsLength = strspn( $revText, '=', strlen( $text ) - $searchStart ); if ( $equalsLength > 0 ) { - if ( $i - $equalsLength == $piece->startPos ) { + if ( $searchStart - $equalsLength == $piece->startPos ) { // This is just a single string of equals signs on its own line // Replicate the doHeadings behaviour /={count}(.+)={count}/ // First find out how many equals signs there really are (don't stop at 6) @@ -481,9 +511,7 @@ class Preprocessor_DOM implements Preprocessor { // another heading. Infinite loops are avoided because the next iteration MUST // hit the heading open case above, which unconditionally increments the // input pointer. - } - - elseif ( $found == 'open' ) { + } elseif ( $found == 'open' ) { # count opening brace characters $count = strspn( $text, $curChar, $i ); @@ -506,9 +534,7 @@ class Preprocessor_DOM implements Preprocessor { $accum .= htmlspecialchars( str_repeat( $curChar, $count ) ); } $i += $count; - } - - elseif ( $found == 'close' ) { + } elseif ( $found == 'close' ) { $piece = $stack->top; # lets check if there are enough characters for closing brace $maxCount = $piece->count; @@ -516,7 +542,6 @@ class Preprocessor_DOM implements Preprocessor { # check for maximum matching characters (if there are 5 closing # characters, we will probably need only 3 - depending on the rules) - $matchingCount = 0; $rule = $rules[$piece->open]; if ( $count > $rule['max'] ) { # The specified maximum exists in the callback array, unless the caller @@ -561,7 +586,7 @@ class Preprocessor_DOM implements Preprocessor { $element = "<$name$attr>"; $element .= "$title"; $argIndex = 1; - foreach ( $parts as $partIndex => $part ) { + foreach ( $parts as $part ) { if ( isset( $part->eqpos ) ) { $argName = substr( $part->out, 0, $part->eqpos ); $argValue = substr( $part->out, $part->eqpos + 1 ); @@ -822,7 +847,7 @@ class PPFrame_DOM implements PPFrame { /** * Construct a new preprocessor frame. - * @param Preprocessor $preprocessor The parent preprocessor + * @param $preprocessor Preprocessor: The parent preprocessor */ function __construct( $preprocessor ) { $this->preprocessor = $preprocessor; @@ -877,12 +902,12 @@ class PPFrame_DOM implements PPFrame { return $root; } - if ( ++$this->parser->mPPNodeCount > $this->parser->mOptions->mMaxPPNodeCount ) + if ( ++$this->parser->mPPNodeCount > $this->parser->mOptions->getMaxPPNodeCount() ) { return 'Node-count limit exceeded'; } - if ( $expansionDepth > $this->parser->mOptions->mMaxPPExpandDepth ) { + if ( $expansionDepth > $this->parser->mOptions->getMaxPPExpandDepth() ) { return 'Expansion depth limit exceeded'; } wfProfileIn( __METHOD__ ); @@ -932,7 +957,9 @@ class PPFrame_DOM implements PPFrame { $iteratorStack[$level] = false; } - if ( $contextNode instanceof PPNode_DOM ) $contextNode = $contextNode->node; + if ( $contextNode instanceof PPNode_DOM ) { + $contextNode = $contextNode->node; + } $newIterator = false; @@ -951,7 +978,7 @@ class PPFrame_DOM implements PPFrame { $titles = $xpath->query( 'title', $contextNode ); $title = $titles->item( 0 ); $parts = $xpath->query( 'part', $contextNode ); - if ( $flags & self::NO_TEMPLATES ) { + if ( $flags & PPFrame::NO_TEMPLATES ) { $newIterator = $this->virtualBracketedImplode( '{{', '|', '}}', $title, $parts ); } else { $lineStart = $contextNode->getAttribute( 'lineStart' ); @@ -972,7 +999,7 @@ class PPFrame_DOM implements PPFrame { $titles = $xpath->query( 'title', $contextNode ); $title = $titles->item( 0 ); $parts = $xpath->query( 'part', $contextNode ); - if ( $flags & self::NO_ARGS ) { + if ( $flags & PPFrame::NO_ARGS ) { $newIterator = $this->virtualBracketedImplode( '{{{', '|', '}}}', $title, $parts ); } else { $params = array( @@ -990,13 +1017,13 @@ class PPFrame_DOM implements PPFrame { # Remove it in HTML, pre+remove and STRIP_COMMENTS modes if ( $this->parser->ot['html'] || ( $this->parser->ot['pre'] && $this->parser->mOptions->getRemoveComments() ) - || ( $flags & self::STRIP_COMMENTS ) ) + || ( $flags & PPFrame::STRIP_COMMENTS ) ) { $out .= ''; } # Add a strip marker in PST mode so that pstPass2() can run some old-fashioned regexes on the result # Not in RECOVER_COMMENTS mode (extractSections) though - elseif ( $this->parser->ot['wiki'] && ! ( $flags & self::RECOVER_COMMENTS ) ) { + elseif ( $this->parser->ot['wiki'] && ! ( $flags & PPFrame::RECOVER_COMMENTS ) ) { $out .= $this->parser->insertStripItem( $contextNode->textContent ); } # Recover the literal comment in RECOVER_COMMENTS and pre+no-remove @@ -1008,7 +1035,7 @@ class PPFrame_DOM implements PPFrame { # OT_WIKI will only respect in substed templates. # The other output types respect it unless NO_IGNORE is set. # extractSections() sets NO_IGNORE and so never respects it. - if ( ( !isset( $this->parent ) && $this->parser->ot['wiki'] ) || ( $flags & self::NO_IGNORE ) ) { + if ( ( !isset( $this->parent ) && $this->parser->ot['wiki'] ) || ( $flags & PPFrame::NO_IGNORE ) ) { $out .= $contextNode->textContent; } else { $out .= ''; @@ -1112,7 +1139,9 @@ class PPFrame_DOM implements PPFrame { $first = true; $s = ''; foreach ( $args as $root ) { - if ( $root instanceof PPNode_DOM ) $root = $root->node; + if ( $root instanceof PPNode_DOM ) { + $root = $root->node; + } if ( !is_array( $root ) && !( $root instanceof DOMNodeList ) ) { $root = array( $root ); } @@ -1136,9 +1165,11 @@ class PPFrame_DOM implements PPFrame { $args = array_slice( func_get_args(), 1 ); $out = array(); $first = true; - if ( $root instanceof PPNode_DOM ) $root = $root->node; foreach ( $args as $root ) { + if ( $root instanceof PPNode_DOM ) { + $root = $root->node; + } if ( !is_array( $root ) && !( $root instanceof DOMNodeList ) ) { $root = array( $root ); } @@ -1163,7 +1194,9 @@ class PPFrame_DOM implements PPFrame { $first = true; foreach ( $args as $root ) { - if ( $root instanceof PPNode_DOM ) $root = $root->node; + if ( $root instanceof PPNode_DOM ) { + $root = $root->node; + } if ( !is_array( $root ) && !( $root instanceof DOMNodeList ) ) { $root = array( $root ); } @@ -1239,7 +1272,8 @@ class PPTemplateFrame_DOM extends PPFrame_DOM { var $numberedExpansionCache, $namedExpansionCache; function __construct( $preprocessor, $parent = false, $numberedArgs = array(), $namedArgs = array(), $title = false ) { - PPFrame_DOM::__construct( $preprocessor ); + parent::__construct( $preprocessor ); + $this->parent = $parent; $this->numberedArgs = $numberedArgs; $this->namedArgs = $namedArgs; @@ -1310,7 +1344,7 @@ class PPTemplateFrame_DOM extends PPFrame_DOM { } if ( !isset( $this->numberedExpansionCache[$index] ) ) { # No trimming for unnamed arguments - $this->numberedExpansionCache[$index] = $this->parent->expand( $this->numberedArgs[$index], self::STRIP_COMMENTS ); + $this->numberedExpansionCache[$index] = $this->parent->expand( $this->numberedArgs[$index], PPFrame::STRIP_COMMENTS ); } return $this->numberedExpansionCache[$index]; } @@ -1322,7 +1356,7 @@ class PPTemplateFrame_DOM extends PPFrame_DOM { if ( !isset( $this->namedExpansionCache[$name] ) ) { # Trim named arguments post-expand, for backwards compatibility $this->namedExpansionCache[$name] = trim( - $this->parent->expand( $this->namedArgs[$name], self::STRIP_COMMENTS ) ); + $this->parent->expand( $this->namedArgs[$name], PPFrame::STRIP_COMMENTS ) ); } return $this->namedExpansionCache[$name]; } @@ -1351,7 +1385,7 @@ class PPCustomFrame_DOM extends PPFrame_DOM { var $args; function __construct( $preprocessor, $args ) { - PPFrame_DOM::__construct( $preprocessor ); + parent::__construct( $preprocessor ); $this->args = $args; } diff --git a/includes/parser/Preprocessor_Hash.php b/includes/parser/Preprocessor_Hash.php index c5d69685..6cb2febc 100644 --- a/includes/parser/Preprocessor_Hash.php +++ b/includes/parser/Preprocessor_Hash.php @@ -1,5 +1,11 @@ $val ) { + $partNode = new PPNode_Hash_Tree( 'part' ); + $nameNode = new PPNode_Hash_Tree( 'name' ); + + if ( is_int( $k ) ) { + $nameNode->addChild( new PPNode_Hash_Attr( 'index', $k ) ); + $partNode->addChild( $nameNode ); + } else { + $nameNode->addChild( new PPNode_Hash_Text( $k ) ); + $partNode->addChild( $nameNode ); + $partNode->addChild( new PPNode_Hash_Text( '=' ) ); + } + + $valueNode = new PPNode_Hash_Tree( 'value' ); + $valueNode->addChild( new PPNode_Hash_Text( $val ) ); + $partNode->addChild( $valueNode ); + + $list[] = $partNode; + } + + $node = new PPNode_Hash_Array( $list ); + return $node; + } + /** * Preprocess some wikitext and return the document tree. * This is the ghost of Parser::replace_variables(). * - * @param string $text The text to parse - * @param integer flags Bitwise combination of: + * @param $text String: the text to parse + * @param $flags Integer: bitwise combination of: * Parser::PTD_FOR_INCLUSION Handle / as if the text is being * included. Default is to assume a direct page view. * @@ -401,7 +434,7 @@ class Preprocessor_Hash implements Preprocessor { $count = $piece->count; $equalsLength = strspn( $revText, '=', strlen( $text ) - $searchStart ); if ( $equalsLength > 0 ) { - if ( $i - $equalsLength == $piece->startPos ) { + if ( $searchStart - $equalsLength == $piece->startPos ) { // This is just a single string of equals signs on its own line // Replicate the doHeadings behaviour /={count}(.+)={count}/ // First find out how many equals signs there really are (don't stop at 6) @@ -479,7 +512,6 @@ class Preprocessor_Hash implements Preprocessor { # check for maximum matching characters (if there are 5 closing # characters, we will probably need only 3 - depending on the rules) - $matchingCount = 0; $rule = $rules[$piece->open]; if ( $count > $rule['max'] ) { # The specified maximum exists in the callback array, unless the caller @@ -526,7 +558,7 @@ class Preprocessor_Hash implements Preprocessor { $titleNode->lastChild = $titleAccum->lastNode; $element->addChild( $titleNode ); $argIndex = 1; - foreach ( $parts as $partIndex => $part ) { + foreach ( $parts as $part ) { if ( isset( $part->eqpos ) ) { // Find equals $lastNode = false; @@ -647,7 +679,7 @@ class Preprocessor_Hash implements Preprocessor { // Cache if ($cacheable) { - $cacheValue = sprintf( "%08d", self::CACHE_VERSION ) . serialize( $rootNode );; + $cacheValue = sprintf( "%08d", self::CACHE_VERSION ) . serialize( $rootNode ); $wgMemc->set( $cacheKey, $cacheValue, 86400 ); wfProfileOut( __METHOD__.'-cache-miss' ); wfProfileOut( __METHOD__.'-cacheable' ); @@ -804,7 +836,7 @@ class PPFrame_Hash implements PPFrame { /** * Construct a new preprocessor frame. - * @param Preprocessor $preprocessor The parent preprocessor + * @param $preprocessor Preprocessor: the parent preprocessor */ function __construct( $preprocessor ) { $this->preprocessor = $preprocessor; @@ -826,7 +858,6 @@ class PPFrame_Hash implements PPFrame { $title = $this->title; } if ( $args !== false ) { - $xpath = false; if ( $args instanceof PPNode_Hash_Array ) { $args = $args->value; } elseif ( !is_array( $args ) ) { @@ -855,11 +886,11 @@ class PPFrame_Hash implements PPFrame { return $root; } - if ( ++$this->parser->mPPNodeCount > $this->parser->mOptions->mMaxPPNodeCount ) + if ( ++$this->parser->mPPNodeCount > $this->parser->mOptions->getMaxPPNodeCount() ) { return 'Node-count limit exceeded'; } - if ( $expansionDepth > $this->parser->mOptions->mMaxPPExpandDepth ) { + if ( $expansionDepth > $this->parser->mOptions->getMaxPPExpandDepth() ) { return 'Expansion depth limit exceeded'; } ++$expansionDepth; @@ -915,7 +946,7 @@ class PPFrame_Hash implements PPFrame { if ( $contextNode->name == 'template' ) { # Double-brace expansion $bits = $contextNode->splitTemplate(); - if ( $flags & self::NO_TEMPLATES ) { + if ( $flags & PPFrame::NO_TEMPLATES ) { $newIterator = $this->virtualBracketedImplode( '{{', '|', '}}', $bits['title'], $bits['parts'] ); } else { $ret = $this->parser->braceSubstitution( $bits, $this ); @@ -928,7 +959,7 @@ class PPFrame_Hash implements PPFrame { } elseif ( $contextNode->name == 'tplarg' ) { # Triple-brace expansion $bits = $contextNode->splitTemplate(); - if ( $flags & self::NO_ARGS ) { + if ( $flags & PPFrame::NO_ARGS ) { $newIterator = $this->virtualBracketedImplode( '{{{', '|', '}}}', $bits['title'], $bits['parts'] ); } else { $ret = $this->parser->argSubstitution( $bits, $this ); @@ -943,13 +974,13 @@ class PPFrame_Hash implements PPFrame { # Remove it in HTML, pre+remove and STRIP_COMMENTS modes if ( $this->parser->ot['html'] || ( $this->parser->ot['pre'] && $this->parser->mOptions->getRemoveComments() ) - || ( $flags & self::STRIP_COMMENTS ) ) + || ( $flags & PPFrame::STRIP_COMMENTS ) ) { $out .= ''; } # Add a strip marker in PST mode so that pstPass2() can run some old-fashioned regexes on the result # Not in RECOVER_COMMENTS mode (extractSections) though - elseif ( $this->parser->ot['wiki'] && ! ( $flags & self::RECOVER_COMMENTS ) ) { + elseif ( $this->parser->ot['wiki'] && ! ( $flags & PPFrame::RECOVER_COMMENTS ) ) { $out .= $this->parser->insertStripItem( $contextNode->firstChild->value ); } # Recover the literal comment in RECOVER_COMMENTS and pre+no-remove @@ -961,7 +992,7 @@ class PPFrame_Hash implements PPFrame { # OT_WIKI will only respect in substed templates. # The other output types respect it unless NO_IGNORE is set. # extractSections() sets NO_IGNORE and so never respects it. - if ( ( !isset( $this->parent ) && $this->parser->ot['wiki'] ) || ( $flags & self::NO_IGNORE ) ) { + if ( ( !isset( $this->parent ) && $this->parser->ot['wiki'] ) || ( $flags & PPFrame::NO_IGNORE ) ) { $out .= $contextNode->firstChild->value; } else { //$out .= ''; @@ -1186,7 +1217,8 @@ class PPTemplateFrame_Hash extends PPFrame_Hash { var $numberedExpansionCache, $namedExpansionCache; function __construct( $preprocessor, $parent = false, $numberedArgs = array(), $namedArgs = array(), $title = false ) { - PPFrame_Hash::__construct( $preprocessor ); + parent::__construct( $preprocessor ); + $this->parent = $parent; $this->numberedArgs = $numberedArgs; $this->namedArgs = $namedArgs; @@ -1257,7 +1289,7 @@ class PPTemplateFrame_Hash extends PPFrame_Hash { } if ( !isset( $this->numberedExpansionCache[$index] ) ) { # No trimming for unnamed arguments - $this->numberedExpansionCache[$index] = $this->parent->expand( $this->numberedArgs[$index], self::STRIP_COMMENTS ); + $this->numberedExpansionCache[$index] = $this->parent->expand( $this->numberedArgs[$index], PPFrame::STRIP_COMMENTS ); } return $this->numberedExpansionCache[$index]; } @@ -1269,7 +1301,7 @@ class PPTemplateFrame_Hash extends PPFrame_Hash { if ( !isset( $this->namedExpansionCache[$name] ) ) { # Trim named arguments post-expand, for backwards compatibility $this->namedExpansionCache[$name] = trim( - $this->parent->expand( $this->namedArgs[$name], self::STRIP_COMMENTS ) ); + $this->parent->expand( $this->namedArgs[$name], PPFrame::STRIP_COMMENTS ) ); } return $this->namedExpansionCache[$name]; } @@ -1298,7 +1330,7 @@ class PPCustomFrame_Hash extends PPFrame_Hash { var $args; function __construct( $preprocessor, $args ) { - PPFrame_Hash::__construct( $preprocessor ); + parent::__construct( $preprocessor ); $this->args = $args; } diff --git a/includes/parser/Tidy.php b/includes/parser/Tidy.php index 95f83621..38f22fd8 100644 --- a/includes/parser/Tidy.php +++ b/includes/parser/Tidy.php @@ -1,4 +1,9 @@ '. 'test'.$text.''; - # Tidy is known to clobber tabs; convert them to entities - $wrappedtext = str_replace( "\t", ' ', $wrappedtext ); - if( $wgTidyInternal ) { $correctedtext = self::execInternalTidy( $wrappedtext ); } else { @@ -39,9 +41,6 @@ class MWTidy { return $text . "\n\n"; } - # Convert the tabs back from entities - $correctedtext = str_replace( ' ', "\t", $correctedtext ); - return $correctedtext; } @@ -71,7 +70,7 @@ class MWTidy { * @param $text String: HTML to check * @param $stderr Boolean: Whether to read from STDERR rather than STDOUT * @param &$retval Exit code (-1 on internal error) - * @retrun mixed String or null + * @return mixed String or null */ private static function execExternalTidy( $text, $stderr = false, &$retval = null ) { global $wgTidyConf, $wgTidyBin, $wgTidyOpts; @@ -119,15 +118,13 @@ class MWTidy { $retval = -1; } - wfProfileOut( __METHOD__ ); - if( !$stderr && $cleansource == '' && $text != '' ) { // Some kind of error happened, so we couldn't get the corrected text. // Just give up; we'll use the source text and append a warning. - return null; - } else { - return $cleansource; + $cleansource = null; } + wfProfileOut( __METHOD__ ); + return $cleansource; } /** @@ -137,7 +134,7 @@ class MWTidy { * 'pear install tidy' should be able to compile the extension module. */ private static function execInternalTidy( $text, $stderr = false, &$retval = null ) { - global $wgTidyConf, $IP, $wgDebugTidy; + global $wgTidyConf, $wgDebugTidy; wfProfileIn( __METHOD__ ); $tidy = new tidy; @@ -145,6 +142,7 @@ class MWTidy { if( $stderr ) { $retval = $tidy->getStatus(); + wfProfileOut( __METHOD__ ); return $tidy->errorBuffer; } else { $tidy->cleanRepair(); diff --git a/includes/proxy_check.php b/includes/proxy_check.php index 61995fea..2bc46c0d 100644 --- a/includes/proxy_check.php +++ b/includes/proxy_check.php @@ -1,6 +1,8 @@ getSkin(); + $lang = $context->getLanguage(); + + // Get file dependency information + $res = $dbr->select( 'module_deps', array( 'md_module', 'md_deps' ), array( + 'md_module' => $modules, + 'md_skin' => $context->getSkin() + ), __METHOD__ + ); + + // Set modules' dependencies + $modulesWithDeps = array(); + foreach ( $res as $row ) { + $this->getModule( $row->md_module )->setFileDependencies( $skin, + FormatJson::decode( $row->md_deps, true ) + ); + $modulesWithDeps[] = $row->md_module; + } + + // Register the absence of a dependency row too + foreach ( array_diff( $modules, $modulesWithDeps ) as $name ) { + $this->getModule( $name )->setFileDependencies( $skin, array() ); + } + + // Get message blob mtimes. Only do this for modules with messages + $modulesWithMessages = array(); + foreach ( $modules as $name ) { + if ( count( $this->getModule( $name )->getMessages() ) ) { + $modulesWithMessages[] = $name; + } + } + $modulesWithoutMessages = array_flip( $modules ); // Will be trimmed down by the loop below + if ( count( $modulesWithMessages ) ) { + $res = $dbr->select( 'msg_resource', array( 'mr_resource', 'mr_timestamp' ), array( + 'mr_resource' => $modulesWithMessages, + 'mr_lang' => $lang + ), __METHOD__ + ); + foreach ( $res as $row ) { + $this->getModule( $row->mr_resource )->setMsgBlobMtime( $lang, $row->mr_timestamp ); + unset( $modulesWithoutMessages[$row->mr_resource] ); + } + } + foreach ( array_keys( $modulesWithoutMessages ) as $name ) { + $this->getModule( $name )->setMsgBlobMtime( $lang, 0 ); + } + } + + /** + * Runs JavaScript or CSS data through a filter, caching the filtered result for future calls. + * + * Available filters are: + * - minify-js \see JavaScriptMinifier::minify + * - minify-css \see CSSMin::minify + * + * If $data is empty, only contains whitespace or the filter was unknown, + * $data is returned unmodified. + * + * @param $filter String: Name of filter to run + * @param $data String: Text to filter, such as JavaScript or CSS text + * @return String: Filtered data, or a comment containing an error message + */ + protected function filter( $filter, $data ) { + global $wgResourceLoaderMinifierStatementsOnOwnLine, $wgResourceLoaderMinifierMaxLineLength; + wfProfileIn( __METHOD__ ); + + // For empty/whitespace-only data or for unknown filters, don't perform + // any caching or processing + if ( trim( $data ) === '' + || !in_array( $filter, array( 'minify-js', 'minify-css' ) ) ) + { + wfProfileOut( __METHOD__ ); + return $data; + } + + // Try for cache hit + // Use CACHE_ANYTHING since filtering is very slow compared to DB queries + $key = wfMemcKey( 'resourceloader', 'filter', $filter, md5( $data ) ); + $cache = wfGetCache( CACHE_ANYTHING ); + $cacheEntry = $cache->get( $key ); + if ( is_string( $cacheEntry ) ) { + wfProfileOut( __METHOD__ ); + return $cacheEntry; + } + + // Run the filter - we've already verified one of these will work + try { + switch ( $filter ) { + case 'minify-js': + $result = JavaScriptMinifier::minify( $data, + $wgResourceLoaderMinifierStatementsOnOwnLine, + $wgResourceLoaderMinifierMaxLineLength + ); + break; + case 'minify-css': + $result = CSSMin::minify( $data ); + break; + } + + // Save filtered text to Memcached + $cache->set( $key, $result ); + } catch ( Exception $exception ) { + // Return exception as a comment + $result = "/*\n{$exception->__toString()}\n*/\n"; + } + + wfProfileOut( __METHOD__ ); + + return $result; + } + + /* Methods */ + + /** + * Registers core modules and runs registration hooks. + */ + public function __construct() { + global $IP, $wgResourceModules; + + wfProfileIn( __METHOD__ ); + + // Register core modules + $this->register( include( "$IP/resources/Resources.php" ) ); + // Register extension modules + wfRunHooks( 'ResourceLoaderRegisterModules', array( &$this ) ); + $this->register( $wgResourceModules ); + + wfProfileOut( __METHOD__ ); + } + + /** + * Registers a module with the ResourceLoader system. + * + * @param $name Mixed: Name of module as a string or List of name/object pairs as an array + * @param $info Module info array. For backwards compatibility with 1.17alpha, + * this may also be a ResourceLoaderModule object. Optional when using + * multiple-registration calling style. + * @throws MWException: If a duplicate module registration is attempted + * @throws MWException: If a module name contains illegal characters (pipes or commas) + * @throws MWException: If something other than a ResourceLoaderModule is being registered + * @return Boolean: False if there were any errors, in which case one or more modules were not + * registered + */ + public function register( $name, $info = null ) { + wfProfileIn( __METHOD__ ); + + // Allow multiple modules to be registered in one call + if ( is_array( $name ) ) { + foreach ( $name as $key => $value ) { + $this->register( $key, $value ); + } + wfProfileOut( __METHOD__ ); + return; + } + + // Disallow duplicate registrations + if ( isset( $this->moduleInfos[$name] ) ) { + // A module has already been registered by this name + throw new MWException( + 'ResourceLoader duplicate registration error. ' . + 'Another module has already been registered as ' . $name + ); + } + + // Check $name for illegal characters + if ( preg_match( '/[|,]/', $name ) ) { + throw new MWException( "ResourceLoader module name '$name' is invalid. Names may not contain pipes (|) or commas (,)" ); + } + + // Attach module + if ( is_object( $info ) ) { + // Old calling convention + // Validate the input + if ( !( $info instanceof ResourceLoaderModule ) ) { + throw new MWException( 'ResourceLoader invalid module error. ' . + 'Instances of ResourceLoaderModule expected.' ); + } + + $this->moduleInfos[$name] = array( 'object' => $info ); + $info->setName( $name ); + $this->modules[$name] = $info; + } else { + // New calling convention + $this->moduleInfos[$name] = $info; + } + + wfProfileOut( __METHOD__ ); + } + + /** + * Get a list of module names + * + * @return Array: List of module names + */ + public function getModuleNames() { + return array_keys( $this->moduleInfos ); + } + + /** + * Get the ResourceLoaderModule object for a given module name. + * + * @param $name String: Module name + * @return Mixed: ResourceLoaderModule if module has been registered, null otherwise + */ + public function getModule( $name ) { + if ( !isset( $this->modules[$name] ) ) { + if ( !isset( $this->moduleInfos[$name] ) ) { + // No such module + return null; + } + // Construct the requested object + $info = $this->moduleInfos[$name]; + if ( isset( $info['object'] ) ) { + // Object given in info array + $object = $info['object']; + } else { + if ( !isset( $info['class'] ) ) { + $class = 'ResourceLoaderFileModule'; + } else { + $class = $info['class']; + } + $object = new $class( $info ); + } + $object->setName( $name ); + $this->modules[$name] = $object; + } + + return $this->modules[$name]; + } + + /** + * Outputs a response to a resource load-request, including a content-type header. + * + * @param $context ResourceLoaderContext: Context in which a response should be formed + */ + public function respond( ResourceLoaderContext $context ) { + global $wgResourceLoaderMaxage, $wgCacheEpoch; + + // Buffer output to catch warnings. Normally we'd use ob_clean() on the + // top-level output buffer to clear warnings, but that breaks when ob_gzhandler + // is used: ob_clean() will clear the GZIP header in that case and it won't come + // back for subsequent output, resulting in invalid GZIP. So we have to wrap + // the whole thing in our own output buffer to be sure the active buffer + // doesn't use ob_gzhandler. + // See http://bugs.php.net/bug.php?id=36514 + ob_start(); + + wfProfileIn( __METHOD__ ); + $exceptions = ''; + + // Split requested modules into two groups, modules and missing + $modules = array(); + $missing = array(); + foreach ( $context->getModules() as $name ) { + if ( isset( $this->moduleInfos[$name] ) ) { + $modules[$name] = $this->getModule( $name ); + } else { + $missing[] = $name; + } + } + + // If a version wasn't specified we need a shorter expiry time for updates + // to propagate to clients quickly + if ( is_null( $context->getVersion() ) ) { + $maxage = $wgResourceLoaderMaxage['unversioned']['client']; + $smaxage = $wgResourceLoaderMaxage['unversioned']['server']; + } + // If a version was specified we can use a longer expiry time since changing + // version numbers causes cache misses + else { + $maxage = $wgResourceLoaderMaxage['versioned']['client']; + $smaxage = $wgResourceLoaderMaxage['versioned']['server']; + } + + // Preload information needed to the mtime calculation below + try { + $this->preloadModuleInfo( array_keys( $modules ), $context ); + } catch( Exception $e ) { + // Add exception to the output as a comment + $exceptions .= "/*\n{$e->__toString()}\n*/\n"; + } + + wfProfileIn( __METHOD__.'-getModifiedTime' ); + + $private = false; + // To send Last-Modified and support If-Modified-Since, we need to detect + // the last modified time + $mtime = wfTimestamp( TS_UNIX, $wgCacheEpoch ); + foreach ( $modules as $module ) { + try { + // Bypass Squid and other shared caches if the request includes any private modules + if ( $module->getGroup() === 'private' ) { + $private = true; + } + // Calculate maximum modified time + $mtime = max( $mtime, $module->getModifiedTime( $context ) ); + } catch ( Exception $e ) { + // Add exception to the output as a comment + $exceptions .= "/*\n{$e->__toString()}\n*/\n"; + } + } + + wfProfileOut( __METHOD__.'-getModifiedTime' ); + + if ( $context->getOnly() === 'styles' ) { + header( 'Content-Type: text/css; charset=utf-8' ); + } else { + header( 'Content-Type: text/javascript; charset=utf-8' ); + } + header( 'Last-Modified: ' . wfTimestamp( TS_RFC2822, $mtime ) ); + if ( $context->getDebug() ) { + // Do not cache debug responses + header( 'Cache-Control: private, no-cache, must-revalidate' ); + header( 'Pragma: no-cache' ); + } else { + if ( $private ) { + header( "Cache-Control: private, max-age=$maxage" ); + $exp = $maxage; + } else { + header( "Cache-Control: public, max-age=$maxage, s-maxage=$smaxage" ); + $exp = min( $maxage, $smaxage ); + } + header( 'Expires: ' . wfTimestamp( TS_RFC2822, $exp + time() ) ); + } + + // If there's an If-Modified-Since header, respond with a 304 appropriately + // Some clients send "timestamp;length=123". Strip the part after the first ';' + // so we get a valid timestamp. + $ims = $context->getRequest()->getHeader( 'If-Modified-Since' ); + if ( $ims !== false ) { + $imsTS = strtok( $ims, ';' ); + if ( $mtime <= wfTimestamp( TS_UNIX, $imsTS ) ) { + // There's another bug in ob_gzhandler (see also the comment at + // the top of this function) that causes it to gzip even empty + // responses, meaning it's impossible to produce a truly empty + // response (because the gzip header is always there). This is + // a problem because 304 responses have to be completely empty + // per the HTTP spec, and Firefox behaves buggily when they're not. + // See also http://bugs.php.net/bug.php?id=51579 + // To work around this, we tear down all output buffering before + // sending the 304. + // On some setups, ob_get_level() doesn't seem to go down to zero + // no matter how often we call ob_get_clean(), so instead of doing + // the more intuitive while ( ob_get_level() > 0 ) ob_get_clean(); + // we have to be safe here and avoid an infinite loop. + for ( $i = 0; $i < ob_get_level(); $i++ ) { + ob_end_clean(); + } + + header( 'HTTP/1.0 304 Not Modified' ); + header( 'Status: 304 Not Modified' ); + wfProfileOut( __METHOD__ ); + return; + } + } + + // Generate a response + $response = $this->makeModuleResponse( $context, $modules, $missing ); + + // Prepend comments indicating exceptions + $response = $exceptions . $response; + + // Capture any PHP warnings from the output buffer and append them to the + // response in a comment if we're in debug mode. + if ( $context->getDebug() && strlen( $warnings = ob_get_contents() ) ) { + $response = "/*\n$warnings\n*/\n" . $response; + } + + // Remove the output buffer and output the response + ob_end_clean(); + echo $response; + + wfProfileOut( __METHOD__ ); + } + + /** + * Generates code for a response + * + * @param $context ResourceLoaderContext: Context in which to generate a response + * @param $modules Array: List of module objects keyed by module name + * @param $missing Array: List of unavailable modules (optional) + * @return String: Response data + */ + public function makeModuleResponse( ResourceLoaderContext $context, + array $modules, $missing = array() ) + { + $out = ''; + $exceptions = ''; + if ( $modules === array() && $missing === array() ) { + return '/* No modules requested. Max made me put this here */'; + } + + wfProfileIn( __METHOD__ ); + // Pre-fetch blobs + if ( $context->shouldIncludeMessages() ) { + try { + $blobs = MessageBlobStore::get( $this, $modules, $context->getLanguage() ); + } catch ( Exception $e ) { + // Add exception to the output as a comment + $exceptions .= "/*\n{$e->__toString()}\n*/\n"; + } + } else { + $blobs = array(); + } + + // Generate output + foreach ( $modules as $name => $module ) { + wfProfileIn( __METHOD__ . '-' . $name ); + try { + // Scripts + $scripts = ''; + if ( $context->shouldIncludeScripts() ) { + // bug 27054: Append semicolon to prevent weird bugs + // caused by files not terminating their statements right + $scripts .= $module->getScript( $context ) . ";\n"; + } + + // Styles + $styles = array(); + if ( $context->shouldIncludeStyles() ) { + $styles = $module->getStyles( $context ); + } + + // Messages + $messagesBlob = isset( $blobs[$name] ) ? $blobs[$name] : '{}'; + + // Append output + switch ( $context->getOnly() ) { + case 'scripts': + $out .= $scripts; + break; + case 'styles': + $out .= self::makeCombinedStyles( $styles ); + break; + case 'messages': + $out .= self::makeMessageSetScript( new XmlJsCode( $messagesBlob ) ); + break; + default: + // Minify CSS before embedding in mediaWiki.loader.implement call + // (unless in debug mode) + if ( !$context->getDebug() ) { + foreach ( $styles as $media => $style ) { + $styles[$media] = $this->filter( 'minify-css', $style ); + } + } + $out .= self::makeLoaderImplementScript( $name, $scripts, $styles, + new XmlJsCode( $messagesBlob ) ); + break; + } + } catch ( Exception $e ) { + // Add exception to the output as a comment + $exceptions .= "/*\n{$e->__toString()}\n*/\n"; + + // Register module as missing + $missing[] = $name; + unset( $modules[$name] ); + } + wfProfileOut( __METHOD__ . '-' . $name ); + } + + // Update module states + if ( $context->shouldIncludeScripts() ) { + // Set the state of modules loaded as only scripts to ready + if ( count( $modules ) && $context->getOnly() === 'scripts' + && !isset( $modules['startup'] ) ) + { + $out .= self::makeLoaderStateScript( + array_fill_keys( array_keys( $modules ), 'ready' ) ); + } + // Set the state of modules which were requested but unavailable as missing + if ( is_array( $missing ) && count( $missing ) ) { + $out .= self::makeLoaderStateScript( array_fill_keys( $missing, 'missing' ) ); + } + } + + if ( !$context->getDebug() ) { + if ( $context->getOnly() === 'styles' ) { + $out = $this->filter( 'minify-css', $out ); + } else { + $out = $this->filter( 'minify-js', $out ); + } + } + + wfProfileOut( __METHOD__ ); + return $exceptions . $out; + } + + /* Static Methods */ + + /** + * Returns JS code to call to mediaWiki.loader.implement for a module with + * given properties. + * + * @param $name Module name + * @param $scripts Array: List of JavaScript code snippets to be executed after the + * module is loaded + * @param $styles Array: List of CSS strings keyed by media type + * @param $messages Mixed: List of messages associated with this module. May either be an + * associative array mapping message key to value, or a JSON-encoded message blob containing + * the same data, wrapped in an XmlJsCode object. + */ + public static function makeLoaderImplementScript( $name, $scripts, $styles, $messages ) { + if ( is_array( $scripts ) ) { + $scripts = implode( $scripts, "\n" ); + } + return Xml::encodeJsCall( + 'mediaWiki.loader.implement', + array( + $name, + new XmlJsCode( "function( $, mw ) {{$scripts}}" ), + (object)$styles, + (object)$messages + ) ); + } + + /** + * Returns JS code which, when called, will register a given list of messages. + * + * @param $messages Mixed: Either an associative array mapping message key to value, or a + * JSON-encoded message blob containing the same data, wrapped in an XmlJsCode object. + */ + public static function makeMessageSetScript( $messages ) { + return Xml::encodeJsCall( 'mediaWiki.messages.set', array( (object)$messages ) ); + } + + /** + * Combines an associative array mapping media type to CSS into a + * single stylesheet with @media blocks. + * + * @param $styles Array: List of CSS strings keyed by media type + */ + public static function makeCombinedStyles( array $styles ) { + $out = ''; + foreach ( $styles as $media => $style ) { + // Transform the media type based on request params and config + // The way that this relies on $wgRequest to propagate request params is slightly evil + $media = OutputPage::transformCssMedia( $media ); + + if ( $media === null ) { + // Skip + } else if ( $media === '' || $media == 'all' ) { + // Don't output invalid or frivolous @media statements + $out .= "$style\n"; + } else { + $out .= "@media $media {\n" . str_replace( "\n", "\n\t", "\t" . $style ) . "\n}\n"; + } + } + return $out; + } + + /** + * Returns a JS call to mediaWiki.loader.state, which sets the state of a + * module or modules to a given value. Has two calling conventions: + * + * - ResourceLoader::makeLoaderStateScript( $name, $state ): + * Set the state of a single module called $name to $state + * + * - ResourceLoader::makeLoaderStateScript( array( $name => $state, ... ) ): + * Set the state of modules with the given names to the given states + */ + public static function makeLoaderStateScript( $name, $state = null ) { + if ( is_array( $name ) ) { + return Xml::encodeJsCall( 'mediaWiki.loader.state', array( $name ) ); + } else { + return Xml::encodeJsCall( 'mediaWiki.loader.state', array( $name, $state ) ); + } + } + + /** + * Returns JS code which calls the script given by $script. The script will + * be called with local variables name, version, dependencies and group, + * which will have values corresponding to $name, $version, $dependencies + * and $group as supplied. + * + * @param $name String: Module name + * @param $version Integer: Module version number as a timestamp + * @param $dependencies Array: List of module names on which this module depends + * @param $group String: Group which the module is in. + * @param $script String: JavaScript code + */ + public static function makeCustomLoaderScript( $name, $version, $dependencies, $group, $script ) { + $script = str_replace( "\n", "\n\t", trim( $script ) ); + return Xml::encodeJsCall( + "( function( name, version, dependencies, group ) {\n\t$script\n} )", + array( $name, $version, $dependencies, $group ) ); + } + + /** + * Returns JS code which calls mediaWiki.loader.register with the given + * parameters. Has three calling conventions: + * + * - ResourceLoader::makeLoaderRegisterScript( $name, $version, $dependencies, $group ): + * Register a single module. + * + * - ResourceLoader::makeLoaderRegisterScript( array( $name1, $name2 ) ): + * Register modules with the given names. + * + * - ResourceLoader::makeLoaderRegisterScript( array( + * array( $name1, $version1, $dependencies1, $group1 ), + * array( $name2, $version2, $dependencies1, $group2 ), + * ... + * ) ): + * Registers modules with the given names and parameters. + * + * @param $name String: Module name + * @param $version Integer: Module version number as a timestamp + * @param $dependencies Array: List of module names on which this module depends + * @param $group String: group which the module is in. + */ + public static function makeLoaderRegisterScript( $name, $version = null, + $dependencies = null, $group = null ) + { + if ( is_array( $name ) ) { + return Xml::encodeJsCall( 'mediaWiki.loader.register', array( $name ) ); + } else { + $version = (int) $version > 1 ? (int) $version : 1; + return Xml::encodeJsCall( 'mediaWiki.loader.register', + array( $name, $version, $dependencies, $group ) ); + } + } + + /** + * Returns JS code which runs given JS code if the client-side framework is + * present. + * + * @param $script String: JavaScript code + */ + public static function makeLoaderConditionalScript( $script ) { + $script = str_replace( "\n", "\n\t", trim( $script ) ); + return "if ( window.mediaWiki ) {\n\t$script\n}\n"; + } + + /** + * Returns JS code which will set the MediaWiki configuration array to + * the given value. + * + * @param $configuration Array: List of configuration values keyed by variable name + */ + public static function makeConfigSetScript( array $configuration ) { + return Xml::encodeJsCall( 'mediaWiki.config.set', array( $configuration ) ); + } + + /** + * Convert an array of module names to a packed query string. + * + * For example, array( 'foo.bar', 'foo.baz', 'bar.baz', 'bar.quux' ) + * becomes 'foo.bar,baz|bar.baz,quux' + * @param $modules array of module names (strings) + * @return string Packed query string + */ + public static function makePackedModulesString( $modules ) { + $groups = array(); // array( prefix => array( suffixes ) ) + foreach ( $modules as $module ) { + $pos = strrpos( $module, '.' ); + $prefix = $pos === false ? '' : substr( $module, 0, $pos ); + $suffix = $pos === false ? $module : substr( $module, $pos + 1 ); + $groups[$prefix][] = $suffix; + } + + $arr = array(); + foreach ( $groups as $prefix => $suffixes ) { + $p = $prefix === '' ? '' : $prefix . '.'; + $arr[] = $p . implode( ',', $suffixes ); + } + return implode( '|', $arr ); + } + + /** + * Determine whether debug mode was requested + * Order of priority is 1) request param, 2) cookie, 3) $wg setting + * @return bool + */ + public static function inDebugMode() { + global $wgRequest, $wgResourceLoaderDebug; + static $retval = null; + if ( !is_null( $retval ) ) + return $retval; + return $retval = $wgRequest->getFuzzyBool( 'debug', + $wgRequest->getCookie( 'resourceLoaderDebug', '', $wgResourceLoaderDebug ) ); + } +} diff --git a/includes/resourceloader/ResourceLoaderContext.php b/includes/resourceloader/ResourceLoaderContext.php new file mode 100644 index 00000000..bf059b46 --- /dev/null +++ b/includes/resourceloader/ResourceLoaderContext.php @@ -0,0 +1,176 @@ +resourceLoader = $resourceLoader; + $this->request = $request; + + // Interpret request + // List of modules + $modules = $request->getVal( 'modules' ); + $this->modules = $modules ? self::expandModuleNames( $modules ) : array(); + // Various parameters + $this->skin = $request->getVal( 'skin' ); + $this->user = $request->getVal( 'user' ); + $this->debug = $request->getFuzzyBool( 'debug', $wgResourceLoaderDebug ); + $this->only = $request->getVal( 'only' ); + $this->version = $request->getVal( 'version' ); + + if ( !$this->skin ) { + $this->skin = $wgDefaultSkin; + } + } + + /** + * Expand a string of the form jquery.foo,bar|jquery.ui.baz,quux to + * an array of module names like array( 'jquery.foo', 'jquery.bar', + * 'jquery.ui.baz', 'jquery.ui.quux' ) + * @param $modules String Packed module name list + * @return array of module names + */ + public static function expandModuleNames( $modules ) { + $retval = array(); + $exploded = explode( '|', $modules ); + foreach ( $exploded as $group ) { + if ( strpos( $group, ',' ) === false ) { + // This is not a set of modules in foo.bar,baz notation + // but a single module + $retval[] = $group; + } else { + // This is a set of modules in foo.bar,baz notation + $pos = strrpos( $group, '.' ); + if ( $pos === false ) { + // Prefixless modules, i.e. without dots + $retval = explode( ',', $group ); + } else { + // We have a prefix and a bunch of suffixes + $prefix = substr( $group, 0, $pos ); // 'foo' + $suffixes = explode( ',', substr( $group, $pos + 1 ) ); // array( 'bar', 'baz' ) + foreach ( $suffixes as $suffix ) { + $retval[] = "$prefix.$suffix"; + } + } + } + } + return $retval; + } + + public function getResourceLoader() { + return $this->resourceLoader; + } + + public function getRequest() { + return $this->request; + } + + public function getModules() { + return $this->modules; + } + + public function getLanguage() { + if ( $this->language === null ) { + global $wgLang; + $this->language = $this->request->getVal( 'lang' ); + if ( !$this->language ) { + $this->language = $wgLang->getCode(); + } + } + return $this->language; + } + + public function getDirection() { + if ( $this->direction === null ) { + $this->direction = $this->request->getVal( 'dir' ); + if ( !$this->direction ) { + global $wgContLang; + $this->direction = $wgContLang->getDir(); + } + } + return $this->direction; + } + + public function getSkin() { + return $this->skin; + } + + public function getUser() { + return $this->user; + } + + public function getDebug() { + return $this->debug; + } + + public function getOnly() { + return $this->only; + } + + public function getVersion() { + return $this->version; + } + + public function shouldIncludeScripts() { + return is_null( $this->only ) || $this->only === 'scripts'; + } + + public function shouldIncludeStyles() { + return is_null( $this->only ) || $this->only === 'styles'; + } + + public function shouldIncludeMessages() { + return is_null( $this->only ) || $this->only === 'messages'; + } + + public function getHash() { + if ( !isset( $this->hash ) ) { + $this->hash = implode( '|', array( + $this->getLanguage(), $this->getDirection(), $this->skin, $this->user, + $this->debug, $this->only, $this->version + ) ); + } + return $this->hash; + } +} diff --git a/includes/resourceloader/ResourceLoaderFileModule.php b/includes/resourceloader/ResourceLoaderFileModule.php new file mode 100644 index 00000000..44967a2e --- /dev/null +++ b/includes/resourceloader/ResourceLoaderFileModule.php @@ -0,0 +1,509 @@ + array( [file-path], [file-path], ... ), ... ) + */ + protected $languageScripts = array(); + /** + * Array: List of JavaScript files to include when using a specific skin + * @example array( [skin-name] => array( [file-path], [file-path], ... ), ... ) + */ + protected $skinScripts = array(); + /** + * Array: List of paths to JavaScript files to include in debug mode + * @example array( [skin-name] => array( [file-path], [file-path], ... ), ... ) + */ + protected $debugScripts = array(); + /** + * Array: List of paths to JavaScript files to include in the startup module + * @example array( [file-path], [file-path], ... ) + */ + protected $loaderScripts = array(); + /** + * Array: List of paths to CSS files to always include + * @example array( [file-path], [file-path], ... ) + */ + protected $styles = array(); + /** + * Array: List of paths to CSS files to include when using specific skins + * @example array( [file-path], [file-path], ... ) + */ + protected $skinStyles = array(); + /** + * Array: List of modules this module depends on + * @example array( [file-path], [file-path], ... ) + */ + protected $dependencies = array(); + /** + * Array: List of message keys used by this module + * @example array( [message-key], [message-key], ... ) + */ + protected $messages = array(); + /** String: Name of group to load this module in */ + protected $group; + /** Boolean: Link to raw files in debug mode */ + protected $debugRaw = true; + /** + * Array: Cache for mtime + * @example array( [hash] => [mtime], [hash] => [mtime], ... ) + */ + protected $modifiedTime = array(); + /** + * Array: Place where readStyleFile() tracks file dependencies + * @example array( [file-path], [file-path], ... ) + */ + protected $localFileRefs = array(); + + /* Methods */ + + /** + * Constructs a new module from an options array. + * + * @param $options Array: List of options; if not given or empty, an empty module will be + * constructed + * @param $localBasePath String: Base path to prepend to all local paths in $options. Defaults + * to $IP + * @param $remoteBasePath String: Base path to prepend to all remote paths in $options. Defaults + * to $wgScriptPath + * + * @example $options + * array( + * // Base path to prepend to all local paths in $options. Defaults to $IP + * 'localBasePath' => [base path], + * // Base path to prepend to all remote paths in $options. Defaults to $wgScriptPath + * 'remoteBasePath' => [base path], + * // Equivalent of remoteBasePath, but relative to $wgExtensionAssetsPath + * 'remoteExtPath' => [base path], + * // Scripts to always include + * 'scripts' => [file path string or array of file path strings], + * // Scripts to include in specific language contexts + * 'languageScripts' => array( + * [language code] => [file path string or array of file path strings], + * ), + * // Scripts to include in specific skin contexts + * 'skinScripts' => array( + * [skin name] => [file path string or array of file path strings], + * ), + * // Scripts to include in debug contexts + * 'debugScripts' => [file path string or array of file path strings], + * // Scripts to include in the startup module + * 'loaderScripts' => [file path string or array of file path strings], + * // Modules which must be loaded before this module + * 'dependencies' => [modile name string or array of module name strings], + * // Styles to always load + * 'styles' => [file path string or array of file path strings], + * // Styles to include in specific skin contexts + * 'skinStyles' => array( + * [skin name] => [file path string or array of file path strings], + * ), + * // Messages to always load + * 'messages' => [array of message key strings], + * // Group which this module should be loaded together with + * 'group' => [group name string], + * ) + */ + public function __construct( $options = array(), $localBasePath = null, + $remoteBasePath = null ) + { + global $IP, $wgScriptPath; + $this->localBasePath = $localBasePath === null ? $IP : $localBasePath; + $this->remoteBasePath = $remoteBasePath === null ? $wgScriptPath : $remoteBasePath; + + if ( isset( $options['remoteExtPath'] ) ) { + global $wgExtensionAssetsPath; + $this->remoteBasePath = $wgExtensionAssetsPath . '/' . $options['remoteExtPath']; + } + + foreach ( $options as $member => $option ) { + switch ( $member ) { + // Lists of file paths + case 'scripts': + case 'debugScripts': + case 'loaderScripts': + case 'styles': + $this->{$member} = (array) $option; + break; + // Collated lists of file paths + case 'languageScripts': + case 'skinScripts': + case 'skinStyles': + if ( !is_array( $option ) ) { + throw new MWException( + "Invalid collated file path list error. " . + "'$option' given, array expected." + ); + } + foreach ( $option as $key => $value ) { + if ( !is_string( $key ) ) { + throw new MWException( + "Invalid collated file path list key error. " . + "'$key' given, string expected." + ); + } + $this->{$member}[$key] = (array) $value; + } + break; + // Lists of strings + case 'dependencies': + case 'messages': + $this->{$member} = (array) $option; + break; + // Single strings + case 'group': + case 'localBasePath': + case 'remoteBasePath': + $this->{$member} = (string) $option; + break; + // Single booleans + case 'debugRaw': + $this->{$member} = (bool) $option; + break; + } + } + // Make sure the remote base path is a complete valid url + $this->remoteBasePath = wfExpandUrl( $this->remoteBasePath ); + } + + /** + * Gets all scripts for a given context concatenated together. + * + * @param $context ResourceLoaderContext: Context in which to generate script + * @return String: JavaScript code for $context + */ + public function getScript( ResourceLoaderContext $context ) { + $files = array_merge( + $this->scripts, + self::tryForKey( $this->languageScripts, $context->getLanguage() ), + self::tryForKey( $this->skinScripts, $context->getSkin(), 'default' ) + ); + if ( $context->getDebug() ) { + $files = array_merge( $files, $this->debugScripts ); + if ( $this->debugRaw ) { + $script = ''; + foreach ( $files as $file ) { + $path = $this->getRemotePath( $file ); + $script .= "\n\t" . Xml::encodeJsCall( 'mediaWiki.loader.load', array( $path ) ); + } + return $script; + } + } + return $this->readScriptFiles( $files ); + } + + /** + * Gets loader script. + * + * @return String: JavaScript code to be added to startup module + */ + public function getLoaderScript() { + if ( count( $this->loaderScripts ) == 0 ) { + return false; + } + return $this->readScriptFiles( $this->loaderScripts ); + } + + /** + * Gets all styles for a given context concatenated together. + * + * @param $context ResourceLoaderContext: Context in which to generate styles + * @return String: CSS code for $context + */ + public function getStyles( ResourceLoaderContext $context ) { + // Merge general styles and skin specific styles, retaining media type collation + $styles = $this->readStyleFiles( $this->styles, $this->getFlip( $context ) ); + $skinStyles = $this->readStyleFiles( + self::tryForKey( $this->skinStyles, $context->getSkin(), 'default' ), + $this->getFlip( $context ) + ); + + foreach ( $skinStyles as $media => $style ) { + if ( isset( $styles[$media] ) ) { + $styles[$media] .= $style; + } else { + $styles[$media] = $style; + } + } + // Collect referenced files + $this->localFileRefs = array_unique( $this->localFileRefs ); + // If the list has been modified since last time we cached it, update the cache + if ( $this->localFileRefs !== $this->getFileDependencies( $context->getSkin() ) ) { + $dbw = wfGetDB( DB_MASTER ); + $dbw->replace( 'module_deps', + array( array( 'md_module', 'md_skin' ) ), array( + 'md_module' => $this->getName(), + 'md_skin' => $context->getSkin(), + 'md_deps' => FormatJson::encode( $this->localFileRefs ), + ) + ); + } + return $styles; + } + + /** + * Gets list of message keys used by this module. + * + * @return Array: List of message keys + */ + public function getMessages() { + return $this->messages; + } + + /** + * Gets the name of the group this module should be loaded in. + * + * @return String: Group name + */ + public function getGroup() { + return $this->group; + } + + /** + * Gets list of names of modules this module depends on. + * + * @return Array: List of module names + */ + public function getDependencies() { + return $this->dependencies; + } + + /** + * Get the last modified timestamp of this module. + * + * Last modified timestamps are calculated from the highest last modified + * timestamp of this module's constituent files as well as the files it + * depends on. This function is context-sensitive, only performing + * calculations on files relevant to the given language, skin and debug + * mode. + * + * @param $context ResourceLoaderContext: Context in which to calculate + * the modified time + * @return Integer: UNIX timestamp + * @see ResourceLoaderModule::getFileDependencies + */ + public function getModifiedTime( ResourceLoaderContext $context ) { + if ( isset( $this->modifiedTime[$context->getHash()] ) ) { + return $this->modifiedTime[$context->getHash()]; + } + wfProfileIn( __METHOD__ ); + + $files = array(); + + // Flatten style files into $files + $styles = self::collateFilePathListByOption( $this->styles, 'media', 'all' ); + foreach ( $styles as $styleFiles ) { + $files = array_merge( $files, $styleFiles ); + } + $skinFiles = self::tryForKey( + self::collateFilePathListByOption( $this->skinStyles, 'media', 'all' ), + $context->getSkin(), + 'default' + ); + foreach ( $skinFiles as $styleFiles ) { + $files = array_merge( $files, $styleFiles ); + } + + // Final merge, this should result in a master list of dependent files + $files = array_merge( + $files, + $this->scripts, + $context->getDebug() ? $this->debugScripts : array(), + self::tryForKey( $this->languageScripts, $context->getLanguage() ), + self::tryForKey( $this->skinScripts, $context->getSkin(), 'default' ), + $this->loaderScripts + ); + $files = array_map( array( $this, 'getLocalPath' ), $files ); + // File deps need to be treated separately because they're already prefixed + $files = array_merge( $files, $this->getFileDependencies( $context->getSkin() ) ); + + // If a module is nothing but a list of dependencies, we need to avoid + // giving max() an empty array + if ( count( $files ) === 0 ) { + wfProfileOut( __METHOD__ ); + return $this->modifiedTime[$context->getHash()] = 1; + } + + wfProfileIn( __METHOD__.'-filemtime' ); + $filesMtime = max( array_map( 'filemtime', $files ) ); + wfProfileOut( __METHOD__.'-filemtime' ); + $this->modifiedTime[$context->getHash()] = max( + $filesMtime, + $this->getMsgBlobMtime( $context->getLanguage() ) ); + + wfProfileOut( __METHOD__ ); + return $this->modifiedTime[$context->getHash()]; + } + + /* Protected Members */ + + protected function getLocalPath( $path ) { + return "{$this->localBasePath}/$path"; + } + + protected function getRemotePath( $path ) { + return "{$this->remoteBasePath}/$path"; + } + + /** + * Collates file paths by option (where provided). + * + * @param $list Array: List of file paths in any combination of index/path + * or path/options pairs + * @param $option String: option name + * @param $default Mixed: default value if the option isn't set + * @return Array: List of file paths, collated by $option + */ + protected static function collateFilePathListByOption( array $list, $option, $default ) { + $collatedFiles = array(); + foreach ( (array) $list as $key => $value ) { + if ( is_int( $key ) ) { + // File name as the value + if ( !isset( $collatedFiles[$default] ) ) { + $collatedFiles[$default] = array(); + } + $collatedFiles[$default][] = $value; + } else if ( is_array( $value ) ) { + // File name as the key, options array as the value + $optionValue = isset( $value[$option] ) ? $value[$option] : $default; + if ( !isset( $collatedFiles[$optionValue] ) ) { + $collatedFiles[$optionValue] = array(); + } + $collatedFiles[$optionValue][] = $key; + } + } + return $collatedFiles; + } + + /** + * Gets a list of element that match a key, optionally using a fallback key. + * + * @param $list Array: List of lists to select from + * @param $key String: Key to look for in $map + * @param $fallback String: Key to look for in $list if $key doesn't exist + * @return Array: List of elements from $map which matched $key or $fallback, + * or an empty list in case of no match + */ + protected static function tryForKey( array $list, $key, $fallback = null ) { + if ( isset( $list[$key] ) && is_array( $list[$key] ) ) { + return $list[$key]; + } else if ( is_string( $fallback ) + && isset( $list[$fallback] ) + && is_array( $list[$fallback] ) ) + { + return $list[$fallback]; + } + return array(); + } + + /** + * Gets the contents of a list of JavaScript files. + * + * @param $scripts Array: List of file paths to scripts to read, remap and concetenate + * @return String: Concatenated and remapped JavaScript data from $scripts + */ + protected function readScriptFiles( array $scripts ) { + if ( empty( $scripts ) ) { + return ''; + } + $js = ''; + foreach ( array_unique( $scripts ) as $fileName ) { + $localPath = $this->getLocalPath( $fileName ); + $contents = file_get_contents( $localPath ); + if ( $contents === false ) { + throw new MWException( __METHOD__.": script file not found: \"$localPath\"" ); + } + $js .= $contents . "\n"; + } + return $js; + } + + /** + * Gets the contents of a list of CSS files. + * + * @param $styles Array: List of file paths to styles to read, remap and concetenate + * @return Array: List of concatenated and remapped CSS data from $styles, + * keyed by media type + */ + protected function readStyleFiles( array $styles, $flip ) { + if ( empty( $styles ) ) { + return array(); + } + $styles = self::collateFilePathListByOption( $styles, 'media', 'all' ); + foreach ( $styles as $media => $files ) { + $uniqueFiles = array_unique( $files ); + $styles[$media] = implode( + "\n", + array_map( + array( $this, 'readStyleFile' ), + $uniqueFiles, + array_fill( 0, count( $uniqueFiles ), $flip ) + ) + ); + } + return $styles; + } + + /** + * Reads a style file. + * + * This method can be used as a callback for array_map() + * + * @param $path String: File path of script file to read + * @return String: CSS data in script file + */ + protected function readStyleFile( $path, $flip ) { + $localPath = $this->getLocalPath( $path ); + $style = file_get_contents( $localPath ); + if ( $style === false ) { + throw new MWException( __METHOD__.": style file not found: \"$localPath\"" ); + } + if ( $flip ) { + $style = CSSJanus::transform( $style, true, false ); + } + $dir = $this->getLocalPath( dirname( $path ) ); + $remoteDir = $this->getRemotePath( dirname( $path ) ); + // Get and register local file references + $this->localFileRefs = array_merge( + $this->localFileRefs, + CSSMin::getLocalFileReferences( $style, $dir ) ); + return CSSMin::remap( + $style, $dir, $remoteDir, true + ); + } +} diff --git a/includes/resourceloader/ResourceLoaderModule.php b/includes/resourceloader/ResourceLoaderModule.php new file mode 100644 index 00000000..77d230c9 --- /dev/null +++ b/includes/resourceloader/ResourceLoaderModule.php @@ -0,0 +1,239 @@ +name; + } + + /** + * Set this module's name. This is called by ResourceLodaer::register() + * when registering the module. Other code should not call this. + * + * @param $name String: Name + */ + public function setName( $name ) { + $this->name = $name; + } + + /** + * Get whether CSS for this module should be flipped + */ + public function getFlip( $context ) { + return $context->getDirection() === 'rtl'; + } + + /** + * Get all JS for this module for a given language and skin. + * Includes all relevant JS except loader scripts. + * + * @param $context ResourceLoaderContext: Context object + * @return String: JavaScript code + */ + public function getScript( ResourceLoaderContext $context ) { + // Stub, override expected + return ''; + } + + /** + * Get all CSS for this module for a given skin. + * + * @param $context ResourceLoaderContext: Context object + * @return Array: List of CSS strings keyed by media type + */ + public function getStyles( ResourceLoaderContext $context ) { + // Stub, override expected + return ''; + } + + /** + * Get the messages needed for this module. + * + * To get a JSON blob with messages, use MessageBlobStore::get() + * + * @return Array: List of message keys. Keys may occur more than once + */ + public function getMessages() { + // Stub, override expected + return array(); + } + + /** + * Get the group this module is in. + * + * @return String: Group name + */ + public function getGroup() { + // Stub, override expected + return null; + } + + /** + * Get the loader JS for this module, if set. + * + * @return Mixed: JavaScript loader code as a string or boolean false if no custom loader set + */ + public function getLoaderScript() { + // Stub, override expected + return false; + } + + /** + * Get a list of modules this module depends on. + * + * Dependency information is taken into account when loading a module + * on the client side. When adding a module on the server side, + * dependency information is NOT taken into account and YOU are + * responsible for adding dependent modules as well. If you don't do + * this, the client side loader will send a second request back to the + * server to fetch the missing modules, which kind of defeats the + * purpose of the resource loader. + * + * To add dependencies dynamically on the client side, use a custom + * loader script, see getLoaderScript() + * @return Array: List of module names as strings + */ + public function getDependencies() { + // Stub, override expected + return array(); + } + + /** + * Get the files this module depends on indirectly for a given skin. + * Currently these are only image files referenced by the module's CSS. + * + * @param $skin String: Skin name + * @return Array: List of files + */ + public function getFileDependencies( $skin ) { + // Try in-object cache first + if ( isset( $this->fileDeps[$skin] ) ) { + return $this->fileDeps[$skin]; + } + + $dbr = wfGetDB( DB_SLAVE ); + $deps = $dbr->selectField( 'module_deps', 'md_deps', array( + 'md_module' => $this->getName(), + 'md_skin' => $skin, + ), __METHOD__ + ); + if ( !is_null( $deps ) ) { + $this->fileDeps[$skin] = (array) FormatJson::decode( $deps, true ); + } else { + $this->fileDeps[$skin] = array(); + } + return $this->fileDeps[$skin]; + } + + /** + * Set preloaded file dependency information. Used so we can load this + * information for all modules at once. + * @param $skin String: Skin name + * @param $deps Array: Array of file names + */ + public function setFileDependencies( $skin, $deps ) { + $this->fileDeps[$skin] = $deps; + } + + /** + * Get the last modification timestamp of the message blob for this + * module in a given language. + * @param $lang String: Language code + * @return Integer: UNIX timestamp, or 0 if no blob found + */ + public function getMsgBlobMtime( $lang ) { + if ( !isset( $this->msgBlobMtime[$lang] ) ) { + if ( !count( $this->getMessages() ) ) + return 0; + + $dbr = wfGetDB( DB_SLAVE ); + $msgBlobMtime = $dbr->selectField( 'msg_resource', 'mr_timestamp', array( + 'mr_resource' => $this->getName(), + 'mr_lang' => $lang + ), __METHOD__ + ); + $this->msgBlobMtime[$lang] = $msgBlobMtime ? wfTimestamp( TS_UNIX, $msgBlobMtime ) : 0; + } + return $this->msgBlobMtime[$lang]; + } + + /** + * Set a preloaded message blob last modification timestamp. Used so we + * can load this information for all modules at once. + * @param $lang String: Language code + * @param $mtime Integer: UNIX timestamp or 0 if there is no such blob + */ + public function setMsgBlobMtime( $lang, $mtime ) { + $this->msgBlobMtime[$lang] = $mtime; + } + + /* Abstract Methods */ + + /** + * Get this module's last modification timestamp for a given + * combination of language, skin and debug mode flag. This is typically + * the highest of each of the relevant components' modification + * timestamps. Whenever anything happens that changes the module's + * contents for these parameters, the mtime should increase. + * + * @param $context ResourceLoaderContext: Context object + * @return Integer: UNIX timestamp + */ + public function getModifiedTime( ResourceLoaderContext $context ) { + // 0 would mean now + return 1; + } + + /** + * Check whether this module is known to be empty. If a child class + * has an easy and cheap way to determine that this module is + * definitely going to be empty, it should override this method to + * return true in that case. Callers may optimize the request for this + * module away if this function returns true. + * @param $context ResourceLoaderContext: Context object + * @return Boolean + */ + public function isKnownEmpty( ResourceLoaderContext $context ) { + return false; + } +} diff --git a/includes/resourceloader/ResourceLoaderSiteModule.php b/includes/resourceloader/ResourceLoaderSiteModule.php new file mode 100644 index 00000000..977d16bb --- /dev/null +++ b/includes/resourceloader/ResourceLoaderSiteModule.php @@ -0,0 +1,63 @@ + array( 'type' => 'script' ), + 'MediaWiki:Common.css' => array( 'type' => 'style' ), + 'MediaWiki:' . ucfirst( $context->getSkin() ) . '.js' => array( 'type' => 'script' ), + 'MediaWiki:' . ucfirst( $context->getSkin() ) . '.css' => array( 'type' => 'style' ), + 'MediaWiki:Print.css' => array( 'type' => 'style', 'media' => 'print' ), + ); + if ( $wgHandheldStyle ) { + $pages['MediaWiki:Handheld.css'] = array( + 'type' => 'style', + 'media' => 'handheld' ); + } + return $pages; + } + + /* Methods */ + + /** + * Gets group name + * + * @return String: Name of group + */ + public function getGroup() { + return 'site'; + } +} diff --git a/includes/resourceloader/ResourceLoaderStartUpModule.php b/includes/resourceloader/ResourceLoaderStartUpModule.php new file mode 100644 index 00000000..2a3ba343 --- /dev/null +++ b/includes/resourceloader/ResourceLoaderStartUpModule.php @@ -0,0 +1,225 @@ +separatorTransformTable(); + $separatorTransTable = $separatorTransTable ? $separatorTransTable : array(); + $compactSeparatorTransTable = array( + implode( "\t", array_keys( $separatorTransTable ) ), + implode( "\t", $separatorTransTable ), + ); + $digitTransTable = $wgContLang->digitTransformTable(); + $digitTransTable = $digitTransTable ? $digitTransTable : array(); + $compactDigitTransTable = array( + implode( "\t", array_keys( $digitTransTable ) ), + implode( "\t", $digitTransTable ), + ); + $mainPage = Title::newMainPage(); + + // Build list of variables + $vars = array( + 'wgLoadScript' => $wgLoadScript, + 'debug' => $context->getDebug(), + 'skin' => $context->getSkin(), + 'stylepath' => $wgStylePath, + 'wgUrlProtocols' => wfUrlProtocols(), + 'wgArticlePath' => $wgArticlePath, + 'wgScriptPath' => $wgScriptPath, + 'wgScriptExtension' => $wgScriptExtension, + 'wgScript' => $wgScript, + 'wgVariantArticlePath' => $wgVariantArticlePath, + 'wgActionPaths' => $wgActionPaths, + 'wgServer' => $wgServer, + 'wgUserLanguage' => $context->getLanguage(), + 'wgContentLanguage' => $wgContLang->getCode(), + 'wgVersion' => $wgVersion, + 'wgEnableAPI' => $wgEnableAPI, + 'wgEnableWriteAPI' => $wgEnableWriteAPI, + 'wgSeparatorTransformTable' => $compactSeparatorTransTable, + 'wgDigitTransformTable' => $compactDigitTransTable, + 'wgMainPageTitle' => $mainPage ? $mainPage->getPrefixedText() : null, + 'wgFormattedNamespaces' => $wgContLang->getFormattedNamespaces(), + 'wgNamespaceIds' => $wgContLang->getNamespaceIds(), + 'wgSiteName' => $wgSitename, + 'wgFileExtensions' => array_values( $wgFileExtensions ), + 'wgDBname' => $wgDBname, + 'wgExtensionAssetsPath' => $wgExtensionAssetsPath, + 'wgResourceLoaderMaxQueryLength' => $wgResourceLoaderMaxQueryLength, + ); + if ( $wgContLang->hasVariants() ) { + $vars['wgUserVariant'] = $wgContLang->getPreferredVariant(); + } + if ( $wgUseAjax && $wgEnableMWSuggest ) { + $vars['wgMWSuggestTemplate'] = SearchEngine::getMWSuggestTemplate(); + } + + wfRunHooks( 'ResourceLoaderGetConfigVars', array( &$vars ) ); + + return $vars; + } + + /** + * Gets registration code for all modules + * + * @param $context ResourceLoaderContext object + * @return String: JavaScript code for registering all modules with the client loader + */ + public static function getModuleRegistrations( ResourceLoaderContext $context ) { + global $wgCacheEpoch; + wfProfileIn( __METHOD__ ); + + $out = ''; + $registrations = array(); + $resourceLoader = $context->getResourceLoader(); + foreach ( $resourceLoader->getModuleNames() as $name ) { + $module = $resourceLoader->getModule( $name ); + // Support module loader scripts + $loader = $module->getLoaderScript(); + if ( $loader !== false ) { + $deps = $module->getDependencies(); + $group = $module->getGroup(); + $version = wfTimestamp( TS_ISO_8601_BASIC, + round( $module->getModifiedTime( $context ), -2 ) ); + $out .= ResourceLoader::makeCustomLoaderScript( $name, $version, $deps, $group, $loader ); + } + // Automatically register module + else { + $mtime = max( $module->getModifiedTime( $context ), wfTimestamp( TS_UNIX, $wgCacheEpoch ) ); + // Modules without dependencies or a group pass two arguments (name, timestamp) to + // mediaWiki.loader.register() + if ( !count( $module->getDependencies() && $module->getGroup() === null ) ) { + $registrations[] = array( $name, $mtime ); + } + // Modules with dependencies but no group pass three arguments + // (name, timestamp, dependencies) to mediaWiki.loader.register() + else if ( $module->getGroup() === null ) { + $registrations[] = array( + $name, $mtime, $module->getDependencies() ); + } + // Modules with dependencies pass four arguments (name, timestamp, dependencies, group) + // to mediaWiki.loader.register() + else { + $registrations[] = array( + $name, $mtime, $module->getDependencies(), $module->getGroup() ); + } + } + } + $out .= ResourceLoader::makeLoaderRegisterScript( $registrations ); + + wfProfileOut( __METHOD__ ); + return $out; + } + + /* Methods */ + + public function getScript( ResourceLoaderContext $context ) { + global $IP, $wgLoadScript; + + $out = file_get_contents( "$IP/resources/startup.js" ); + if ( $context->getOnly() === 'scripts' ) { + // Build load query for jquery and mediawiki modules + $query = array( + 'modules' => implode( '|', array( 'jquery', 'mediawiki' ) ), + 'only' => 'scripts', + 'lang' => $context->getLanguage(), + 'skin' => $context->getSkin(), + 'debug' => $context->getDebug() ? 'true' : 'false', + 'version' => wfTimestamp( TS_ISO_8601_BASIC, round( max( + $context->getResourceLoader()->getModule( 'jquery' )->getModifiedTime( $context ), + $context->getResourceLoader()->getModule( 'mediawiki' )->getModifiedTime( $context ) + ), -2 ) ) + ); + // Ensure uniform query order + ksort( $query ); + + // Startup function + $configuration = $this->getConfig( $context ); + $registrations = self::getModuleRegistrations( $context ); + $out .= "var startUp = function() {\n" . + "\t$registrations\n" . + "\t" . Xml::encodeJsCall( 'mediaWiki.config.set', array( $configuration ) ) . + "};\n"; + + // Conditional script injection + $scriptTag = Html::linkedScript( $wgLoadScript . '?' . wfArrayToCGI( $query ) ); + $out .= "if ( isCompatible() ) {\n" . + "\t" . Xml::encodeJsCall( 'document.write', array( $scriptTag ) ) . + "}\n" . + "delete isCompatible;"; + } + + return $out; + } + + public function getModifiedTime( ResourceLoaderContext $context ) { + global $IP, $wgCacheEpoch; + + $hash = $context->getHash(); + if ( isset( $this->modifiedTime[$hash] ) ) { + return $this->modifiedTime[$hash]; + } + + // Call preloadModuleInfo() on ALL modules as we're about + // to call getModifiedTime() on all of them + $loader = $context->getResourceLoader(); + $loader->preloadModuleInfo( $loader->getModuleNames(), $context ); + + $this->modifiedTime[$hash] = filemtime( "$IP/resources/startup.js" ); + // ATTENTION!: Because of the line above, this is not going to cause + // infinite recursion - think carefully before making changes to this + // code! + $time = wfTimestamp( TS_UNIX, $wgCacheEpoch ); + foreach ( $loader->getModuleNames() as $name ) { + $module = $loader->getModule( $name ); + $time = max( $time, $module->getModifiedTime( $context ) ); + } + return $this->modifiedTime[$hash] = $time; + } + + public function getFlip( $context ) { + global $wgContLang; + + return $wgContLang->getDir() !== $context->getDirection(); + } + + /* Methods */ + + public function getGroup() { + return 'startup'; + } +} diff --git a/includes/resourceloader/ResourceLoaderUserModule.php b/includes/resourceloader/ResourceLoaderUserModule.php new file mode 100644 index 00000000..c7186653 --- /dev/null +++ b/includes/resourceloader/ResourceLoaderUserModule.php @@ -0,0 +1,50 @@ +getUser() ) { + $username = $context->getUser(); + return array( + "User:$username/common.js" => array( 'type' => 'script' ), + "User:$username/" . $context->getSkin() . '.js' => + array( 'type' => 'script' ), + "User:$username/common.css" => array( 'type' => 'style' ), + "User:$username/" . $context->getSkin() . '.css' => + array( 'type' => 'style' ), + ); + } + return array(); + } + + /* Methods */ + + public function getGroup() { + return 'user'; + } +} diff --git a/includes/resourceloader/ResourceLoaderUserOptionsModule.php b/includes/resourceloader/ResourceLoaderUserOptionsModule.php new file mode 100644 index 00000000..ae654b8f --- /dev/null +++ b/includes/resourceloader/ResourceLoaderUserOptionsModule.php @@ -0,0 +1,121 @@ +getHash(); + if ( isset( $this->modifiedTime[$hash] ) ) { + return $this->modifiedTime[$hash]; + } + + global $wgUser; + + if ( $context->getUser() === $wgUser->getName() ) { + return $this->modifiedTime[$hash] = $wgUser->getTouched(); + } else { + return 1; + } + } + + /** + * Fetch the context's user options, or if it doesn't match current user, + * the default options. + * + * @param $context ResourceLoaderContext: Context object + * @return Array: List of user options keyed by option name + */ + protected function contextUserOptions( ResourceLoaderContext $context ) { + global $wgUser; + + // Verify identity -- this is a private module + if ( $context->getUser() === $wgUser->getName() ) { + return $wgUser->getOptions(); + } else { + return User::getDefaultOptions(); + } + } + + public function getScript( ResourceLoaderContext $context ) { + return Xml::encodeJsCall( 'mediaWiki.user.options.set', + array( $this->contextUserOptions( $context ) ) ); + } + + public function getStyles( ResourceLoaderContext $context ) { + global $wgAllowUserCssPrefs; + + if ( $wgAllowUserCssPrefs ) { + $options = $this->contextUserOptions( $context ); + + // Build CSS rules + $rules = array(); + if ( $options['underline'] < 2 ) { + $rules[] = "a { text-decoration: " . + ( $options['underline'] ? 'underline' : 'none' ) . "; }"; + } + if ( $options['highlightbroken'] ) { + $rules[] = "a.new, #quickbar a.new { color: #ba0000; }\n"; + } else { + $rules[] = "a.new, #quickbar a.new, a.stub, #quickbar a.stub { color: inherit; }"; + $rules[] = "a.new:after, #quickbar a.new:after { content: '?'; color: #ba0000; }"; + $rules[] = "a.stub:after, #quickbar a.stub:after { content: '!'; color: #772233; }"; + } + if ( $options['justify'] ) { + $rules[] = "#article, #bodyContent, #mw_content { text-align: justify; }\n"; + } + if ( !$options['showtoc'] ) { + $rules[] = "#toc { display: none; }\n"; + } + if ( !$options['editsection'] ) { + $rules[] = ".editsection { display: none; }\n"; + } + if ( $options['editfont'] !== 'default' ) { + $rules[] = "textarea { font-family: {$options['editfont']}; }\n"; + } + $style = implode( "\n", $rules ); + if ( $this->getFlip( $context ) ) { + $style = CSSJanus::transform( $style, true, false ); + } + return array( 'all' => $style ); + } + return array(); + } + + public function getFlip( $context ) { + global $wgContLang; + + return $wgContLang->getDir() !== $context->getDirection(); + } + + public function getGroup() { + return 'private'; + } +} diff --git a/includes/resourceloader/ResourceLoaderWikiModule.php b/includes/resourceloader/ResourceLoaderWikiModule.php new file mode 100644 index 00000000..93e66eb0 --- /dev/null +++ b/includes/resourceloader/ResourceLoaderWikiModule.php @@ -0,0 +1,171 @@ +getNamespace() === NS_MEDIAWIKI ) { + $dbkey = $title->getDBkey(); + return wfEmptyMsg( $dbkey ) ? '' : wfMsgExt( $dbkey, 'content' ); + } + if ( !$title->isCssJsSubpage() ) { + return null; + } + $revision = Revision::newFromTitle( $title ); + if ( !$revision ) { + return null; + } + return $revision->getRawText(); + } + + /* Methods */ + + public function getScript( ResourceLoaderContext $context ) { + $scripts = ''; + foreach ( $this->getPages( $context ) as $titleText => $options ) { + if ( $options['type'] !== 'script' ) { + continue; + } + $title = Title::newFromText( $titleText ); + if ( !$title ) { + continue; + } + $script = $this->getContent( $title ); + if ( strval( $script ) !== '' ) { + if ( strpos( $titleText, '*/' ) === false ) { + $scripts .= "/* $titleText */\n"; + } + $scripts .= $script . "\n"; + } + } + return $scripts; + } + + public function getStyles( ResourceLoaderContext $context ) { + global $wgScriptPath; + + $styles = array(); + foreach ( $this->getPages( $context ) as $titleText => $options ) { + if ( $options['type'] !== 'style' ) { + continue; + } + $title = Title::newFromText( $titleText ); + if ( !$title ) { + continue; + } + $media = isset( $options['media'] ) ? $options['media'] : 'all'; + $style = $this->getContent( $title ); + if ( strval( $style ) === '' ) { + continue; + } + if ( $this->getFlip( $context ) ) { + $style = CSSJanus::transform( $style, true, false ); + } + $style = CSSMin::remap( $style, false, $wgScriptPath, true ); + if ( !isset( $styles[$media] ) ) { + $styles[$media] = ''; + } + if ( strpos( $titleText, '*/' ) === false ) { + $styles[$media] .= "/* $titleText */\n"; + } + $styles[$media] .= $style . "\n"; + } + return $styles; + } + + public function getModifiedTime( ResourceLoaderContext $context ) { + $modifiedTime = 1; // wfTimestamp() interprets 0 as "now" + $mtimes = $this->getTitleMtimes( $context ); + if ( count( $mtimes ) ) { + $modifiedTime = max( $modifiedTime, max( $mtimes ) ); + } + return $modifiedTime; + } + + public function isKnownEmpty( ResourceLoaderContext $context ) { + return count( $this->getTitleMtimes( $context ) ) == 0; + } + + /** + * @param $context ResourceLoaderContext + * @return bool + */ + public function getFlip( $context ) { + global $wgContLang; + + return $wgContLang->getDir() !== $context->getDirection(); + } + + /** + * Get the modification times of all titles that would be loaded for + * a given context. + * @param $context ResourceLoaderContext: Context object + * @return array( prefixed DB key => UNIX timestamp ), nonexistent titles are dropped + */ + protected function getTitleMtimes( ResourceLoaderContext $context ) { + $hash = $context->getHash(); + if ( isset( $this->titleMtimes[$hash] ) ) { + return $this->titleMtimes[$hash]; + } + + $this->titleMtimes[$hash] = array(); + $batch = new LinkBatch; + foreach ( $this->getPages( $context ) as $titleText => $options ) { + $batch->addObj( Title::newFromText( $titleText ) ); + } + + if ( !$batch->isEmpty() ) { + $dbr = wfGetDB( DB_SLAVE ); + $res = $dbr->select( 'page', + array( 'page_namespace', 'page_title', 'page_touched' ), + $batch->constructSet( 'page', $dbr ), + __METHOD__ + ); + foreach ( $res as $row ) { + $title = Title::makeTitle( $row->page_namespace, $row->page_title ); + $this->titleMtimes[$hash][$title->getPrefixedDBkey()] = + wfTimestamp( TS_UNIX, $row->page_touched ); + } + } + return $this->titleMtimes[$hash]; + } +} diff --git a/includes/revisiondelete/RevisionDelete.php b/includes/revisiondelete/RevisionDelete.php new file mode 100644 index 00000000..00afb053 --- /dev/null +++ b/includes/revisiondelete/RevisionDelete.php @@ -0,0 +1,690 @@ +ids ); + return $db->select( array('revision','page'), '*', + array( + 'rev_page' => $this->title->getArticleID(), + 'rev_id' => $ids, + 'rev_page = page_id' + ), + __METHOD__, + array( 'ORDER BY' => 'rev_id DESC' ) + ); + } + + public function newItem( $row ) { + return new RevDel_RevisionItem( $this, $row ); + } + + public function getCurrent() { + if ( is_null( $this->currentRevId ) ) { + $dbw = wfGetDB( DB_MASTER ); + $this->currentRevId = $dbw->selectField( + 'page', 'page_latest', $this->title->pageCond(), __METHOD__ ); + } + return $this->currentRevId; + } + + public function getSuppressBit() { + return Revision::DELETED_RESTRICTED; + } + + public function doPreCommitUpdates() { + $this->title->invalidateCache(); + return Status::newGood(); + } + + public function doPostCommitUpdates() { + $this->title->purgeSquid(); + // Extensions that require referencing previous revisions may need this + wfRunHooks( 'ArticleRevisionVisibilitySet', array( &$this->title ) ); + return Status::newGood(); + } +} + +/** + * Item class for a revision table row + */ +class RevDel_RevisionItem extends RevDel_Item { + var $revision; + + public function __construct( $list, $row ) { + parent::__construct( $list, $row ); + $this->revision = new Revision( $row ); + } + + public function canView() { + return $this->revision->userCan( Revision::DELETED_RESTRICTED ); + } + + public function canViewContent() { + return $this->revision->userCan( Revision::DELETED_TEXT ); + } + + public function getBits() { + return $this->revision->mDeleted; + } + + public function setBits( $bits ) { + $dbw = wfGetDB( DB_MASTER ); + // Update revision table + $dbw->update( 'revision', + array( 'rev_deleted' => $bits ), + array( + 'rev_id' => $this->revision->getId(), + 'rev_page' => $this->revision->getPage(), + 'rev_deleted' => $this->getBits() + ), + __METHOD__ + ); + if ( !$dbw->affectedRows() ) { + // Concurrent fail! + return false; + } + // Update recentchanges table + $dbw->update( 'recentchanges', + array( + 'rc_deleted' => $bits, + 'rc_patrolled' => 1 + ), + array( + 'rc_this_oldid' => $this->revision->getId(), // condition + // non-unique timestamp index + 'rc_timestamp' => $dbw->timestamp( $this->revision->getTimestamp() ), + ), + __METHOD__ + ); + return true; + } + + public function isDeleted() { + return $this->revision->isDeleted( Revision::DELETED_TEXT ); + } + + public function isHideCurrentOp( $newBits ) { + return ( $newBits & Revision::DELETED_TEXT ) + && $this->list->getCurrent() == $this->getId(); + } + + /** + * Get the HTML link to the revision text. + * Overridden by RevDel_ArchiveItem. + */ + protected function getRevisionLink() { + global $wgLang; + $date = $wgLang->timeanddate( $this->revision->getTimestamp(), true ); + if ( $this->isDeleted() && !$this->canViewContent() ) { + return $date; + } + return $this->special->skin->link( + $this->list->title, + $date, + array(), + array( + 'oldid' => $this->revision->getId(), + 'unhide' => 1 + ) + ); + } + + /** + * Get the HTML link to the diff. + * Overridden by RevDel_ArchiveItem + */ + protected function getDiffLink() { + if ( $this->isDeleted() && !$this->canViewContent() ) { + return wfMsgHtml('diff'); + } else { + return + $this->special->skin->link( + $this->list->title, + wfMsgHtml('diff'), + array(), + array( + 'diff' => $this->revision->getId(), + 'oldid' => 'prev', + 'unhide' => 1 + ), + array( + 'known', + 'noclasses' + ) + ); + } + } + + public function getHTML() { + $difflink = $this->getDiffLink(); + $revlink = $this->getRevisionLink(); + $userlink = $this->special->skin->revUserLink( $this->revision ); + $comment = $this->special->skin->revComment( $this->revision ); + if ( $this->isDeleted() ) { + $revlink = "$revlink"; + } + return "
  • ($difflink) $revlink $userlink $comment
  • "; + } +} + +/** + * List for archive table items, i.e. revisions deleted via action=delete + */ +class RevDel_ArchiveList extends RevDel_RevisionList { + var $type = 'archive'; + var $idField = 'ar_timestamp'; + var $dateField = 'ar_timestamp'; + var $authorIdField = 'ar_user'; + var $authorNameField = 'ar_user_text'; + + public function doQuery( $db ) { + $timestamps = array(); + foreach ( $this->ids as $id ) { + $timestamps[] = $db->timestamp( $id ); + } + return $db->select( 'archive', '*', + array( + 'ar_namespace' => $this->title->getNamespace(), + 'ar_title' => $this->title->getDBkey(), + 'ar_timestamp' => $timestamps + ), + __METHOD__, + array( 'ORDER BY' => 'ar_timestamp DESC' ) + ); + } + + public function newItem( $row ) { + return new RevDel_ArchiveItem( $this, $row ); + } + + public function doPreCommitUpdates() { + return Status::newGood(); + } + + public function doPostCommitUpdates() { + return Status::newGood(); + } +} + +/** + * Item class for a archive table row + */ +class RevDel_ArchiveItem extends RevDel_RevisionItem { + public function __construct( $list, $row ) { + RevDel_Item::__construct( $list, $row ); + $this->revision = Revision::newFromArchiveRow( $row, + array( 'page' => $this->list->title->getArticleId() ) ); + } + + public function getId() { + # Convert DB timestamp to MW timestamp + return $this->revision->getTimestamp(); + } + + public function setBits( $bits ) { + $dbw = wfGetDB( DB_MASTER ); + $dbw->update( 'archive', + array( 'ar_deleted' => $bits ), + array( 'ar_namespace' => $this->list->title->getNamespace(), + 'ar_title' => $this->list->title->getDBkey(), + // use timestamp for index + 'ar_timestamp' => $this->row->ar_timestamp, + 'ar_rev_id' => $this->row->ar_rev_id, + 'ar_deleted' => $this->getBits() + ), + __METHOD__ ); + return (bool)$dbw->affectedRows(); + } + + protected function getRevisionLink() { + global $wgLang; + $undelete = SpecialPage::getTitleFor( 'Undelete' ); + $date = $wgLang->timeanddate( $this->revision->getTimestamp(), true ); + if ( $this->isDeleted() && !$this->canViewContent() ) { + return $date; + } + return $this->special->skin->link( $undelete, $date, array(), + array( + 'target' => $this->list->title->getPrefixedText(), + 'timestamp' => $this->revision->getTimestamp() + ) ); + } + + protected function getDiffLink() { + if ( $this->isDeleted() && !$this->canViewContent() ) { + return wfMsgHtml( 'diff' ); + } + $undelete = SpecialPage::getTitleFor( 'Undelete' ); + return $this->special->skin->link( $undelete, wfMsgHtml('diff'), array(), + array( + 'target' => $this->list->title->getPrefixedText(), + 'diff' => 'prev', + 'timestamp' => $this->revision->getTimestamp() + ) ); + } +} + +/** + * List for oldimage table items + */ +class RevDel_FileList extends RevDel_List { + var $type = 'oldimage'; + var $idField = 'oi_archive_name'; + var $dateField = 'oi_timestamp'; + var $authorIdField = 'oi_user'; + var $authorNameField = 'oi_user_text'; + var $storeBatch, $deleteBatch, $cleanupBatch; + + public function doQuery( $db ) { + $archiveNames = array(); + foreach( $this->ids as $timestamp ) { + $archiveNames[] = $timestamp . '!' . $this->title->getDBkey(); + } + return $db->select( 'oldimage', '*', + array( + 'oi_name' => $this->title->getDBkey(), + 'oi_archive_name' => $archiveNames + ), + __METHOD__, + array( 'ORDER BY' => 'oi_timestamp DESC' ) + ); + } + + public function newItem( $row ) { + return new RevDel_FileItem( $this, $row ); + } + + public function clearFileOps() { + $this->deleteBatch = array(); + $this->storeBatch = array(); + $this->cleanupBatch = array(); + } + + public function doPreCommitUpdates() { + $status = Status::newGood(); + $repo = RepoGroup::singleton()->getLocalRepo(); + if ( $this->storeBatch ) { + $status->merge( $repo->storeBatch( $this->storeBatch, FileRepo::OVERWRITE_SAME ) ); + } + if ( !$status->isOK() ) { + return $status; + } + if ( $this->deleteBatch ) { + $status->merge( $repo->deleteBatch( $this->deleteBatch ) ); + } + if ( !$status->isOK() ) { + // Running cleanupDeletedBatch() after a failed storeBatch() with the DB already + // modified (but destined for rollback) causes data loss + return $status; + } + if ( $this->cleanupBatch ) { + $status->merge( $repo->cleanupDeletedBatch( $this->cleanupBatch ) ); + } + return $status; + } + + public function doPostCommitUpdates() { + $file = wfLocalFile( $this->title ); + $file->purgeCache(); + $file->purgeDescription(); + return Status::newGood(); + } + + public function getSuppressBit() { + return File::DELETED_RESTRICTED; + } +} + +/** + * Item class for an oldimage table row + */ +class RevDel_FileItem extends RevDel_Item { + var $file; + + public function __construct( $list, $row ) { + parent::__construct( $list, $row ); + $this->file = RepoGroup::singleton()->getLocalRepo()->newFileFromRow( $row ); + } + + public function getId() { + $parts = explode( '!', $this->row->oi_archive_name ); + return $parts[0]; + } + + public function canView() { + return $this->file->userCan( File::DELETED_RESTRICTED ); + } + + public function canViewContent() { + return $this->file->userCan( File::DELETED_FILE ); + } + + public function getBits() { + return $this->file->getVisibility(); + } + + public function setBits( $bits ) { + # Queue the file op + # FIXME: move to LocalFile.php + if ( $this->isDeleted() ) { + if ( $bits & File::DELETED_FILE ) { + # Still deleted + } else { + # Newly undeleted + $key = $this->file->getStorageKey(); + $srcRel = $this->file->repo->getDeletedHashPath( $key ) . $key; + $this->list->storeBatch[] = array( + $this->file->repo->getVirtualUrl( 'deleted' ) . '/' . $srcRel, + 'public', + $this->file->getRel() + ); + $this->list->cleanupBatch[] = $key; + } + } elseif ( $bits & File::DELETED_FILE ) { + # Newly deleted + $key = $this->file->getStorageKey(); + $dstRel = $this->file->repo->getDeletedHashPath( $key ) . $key; + $this->list->deleteBatch[] = array( $this->file->getRel(), $dstRel ); + } + + # Do the database operations + $dbw = wfGetDB( DB_MASTER ); + $dbw->update( 'oldimage', + array( 'oi_deleted' => $bits ), + array( + 'oi_name' => $this->row->oi_name, + 'oi_timestamp' => $this->row->oi_timestamp, + 'oi_deleted' => $this->getBits() + ), + __METHOD__ + ); + return (bool)$dbw->affectedRows(); + } + + public function isDeleted() { + return $this->file->isDeleted( File::DELETED_FILE ); + } + + /** + * Get the link to the file. + * Overridden by RevDel_ArchivedFileItem. + */ + protected function getLink() { + global $wgLang, $wgUser; + $date = $wgLang->timeanddate( $this->file->getTimestamp(), true ); + if ( $this->isDeleted() ) { + # Hidden files... + if ( !$this->canViewContent() ) { + $link = $date; + } else { + $link = $this->special->skin->link( + $this->special->getTitle(), + $date, array(), + array( + 'target' => $this->list->title->getPrefixedText(), + 'file' => $this->file->getArchiveName(), + 'token' => $wgUser->editToken( $this->file->getArchiveName() ) + ) + ); + } + return '' . $link . ''; + } else { + # Regular files... + return Xml::element( 'a', array( 'href' => $this->file->getUrl() ), $date ); + } + } + /** + * Generate a user tool link cluster if the current user is allowed to view it + * @return string HTML + */ + protected function getUserTools() { + if( $this->file->userCan( Revision::DELETED_USER ) ) { + $link = $this->special->skin->userLink( $this->file->user, $this->file->user_text ) . + $this->special->skin->userToolLinks( $this->file->user, $this->file->user_text ); + } else { + $link = wfMsgHtml( 'rev-deleted-user' ); + } + if( $this->file->isDeleted( Revision::DELETED_USER ) ) { + return '' . $link . ''; + } + return $link; + } + + /** + * Wrap and format the file's comment block, if the current + * user is allowed to view it. + * + * @return string HTML + */ + protected function getComment() { + if( $this->file->userCan( File::DELETED_COMMENT ) ) { + $block = $this->special->skin->commentBlock( $this->file->description ); + } else { + $block = ' ' . wfMsgHtml( 'rev-deleted-comment' ); + } + if( $this->file->isDeleted( File::DELETED_COMMENT ) ) { + return "$block"; + } + return $block; + } + + public function getHTML() { + global $wgLang; + $data = + wfMsg( + 'widthheight', + $wgLang->formatNum( $this->file->getWidth() ), + $wgLang->formatNum( $this->file->getHeight() ) + ) . + ' (' . + wfMsgExt( 'nbytes', 'parsemag', $wgLang->formatNum( $this->file->getSize() ) ) . + ')'; + + return '
  • ' . $this->getLink() . ' ' . $this->getUserTools() . ' ' . + $data . ' ' . $this->getComment(). '
  • '; + } +} + +/** + * List for filearchive table items + */ +class RevDel_ArchivedFileList extends RevDel_FileList { + var $type = 'filearchive'; + var $idField = 'fa_id'; + var $dateField = 'fa_timestamp'; + var $authorIdField = 'fa_user'; + var $authorNameField = 'fa_user_text'; + + public function doQuery( $db ) { + $ids = array_map( 'intval', $this->ids ); + return $db->select( 'filearchive', '*', + array( + 'fa_name' => $this->title->getDBkey(), + 'fa_id' => $ids + ), + __METHOD__, + array( 'ORDER BY' => 'fa_id DESC' ) + ); + } + + public function newItem( $row ) { + return new RevDel_ArchivedFileItem( $this, $row ); + } +} + +/** + * Item class for a filearchive table row + */ +class RevDel_ArchivedFileItem extends RevDel_FileItem { + public function __construct( $list, $row ) { + RevDel_Item::__construct( $list, $row ); + $this->file = ArchivedFile::newFromRow( $row ); + } + + public function getId() { + return $this->row->fa_id; + } + + public function setBits( $bits ) { + $dbw = wfGetDB( DB_MASTER ); + $dbw->update( 'filearchive', + array( 'fa_deleted' => $bits ), + array( + 'fa_id' => $this->row->fa_id, + 'fa_deleted' => $this->getBits(), + ), + __METHOD__ + ); + return (bool)$dbw->affectedRows(); + } + + protected function getLink() { + global $wgLang, $wgUser; + $date = $wgLang->timeanddate( $this->file->getTimestamp(), true ); + $undelete = SpecialPage::getTitleFor( 'Undelete' ); + $key = $this->file->getKey(); + # Hidden files... + if( !$this->canViewContent() ) { + $link = $date; + } else { + $link = $this->special->skin->link( $undelete, $date, array(), + array( + 'target' => $this->list->title->getPrefixedText(), + 'file' => $key, + 'token' => $wgUser->editToken( $key ) + ) + ); + } + if( $this->isDeleted() ) { + $link = '' . $link . ''; + } + return $link; + } +} + +/** + * List for logging table items + */ +class RevDel_LogList extends RevDel_List { + var $type = 'logging'; + var $idField = 'log_id'; + var $dateField = 'log_timestamp'; + var $authorIdField = 'log_user'; + var $authorNameField = 'log_user_text'; + + public function doQuery( $db ) { + $ids = array_map( 'intval', $this->ids ); + return $db->select( 'logging', '*', + array( 'log_id' => $ids ), + __METHOD__, + array( 'ORDER BY' => 'log_id DESC' ) + ); + } + + public function newItem( $row ) { + return new RevDel_LogItem( $this, $row ); + } + + public function getSuppressBit() { + return Revision::DELETED_RESTRICTED; + } + + public function getLogAction() { + return 'event'; + } + + public function getLogParams( $params ) { + return array( + implode( ',', $params['ids'] ), + "ofield={$params['oldBits']}", + "nfield={$params['newBits']}" + ); + } +} + +/** + * Item class for a logging table row + */ +class RevDel_LogItem extends RevDel_Item { + public function canView() { + return LogEventsList::userCan( $this->row, Revision::DELETED_RESTRICTED ); + } + + public function canViewContent() { + return true; // none + } + + public function getBits() { + return $this->row->log_deleted; + } + + public function setBits( $bits ) { + $dbw = wfGetDB( DB_MASTER ); + $dbw->update( 'recentchanges', + array( + 'rc_deleted' => $bits, + 'rc_patrolled' => 1 + ), + array( + 'rc_logid' => $this->row->log_id, + 'rc_timestamp' => $this->row->log_timestamp // index + ), + __METHOD__ + ); + $dbw->update( 'logging', + array( 'log_deleted' => $bits ), + array( + 'log_id' => $this->row->log_id, + 'log_deleted' => $this->getBits() + ), + __METHOD__ + ); + return (bool)$dbw->affectedRows(); + } + + public function getHTML() { + global $wgLang; + + $date = htmlspecialchars( $wgLang->timeanddate( $this->row->log_timestamp ) ); + $paramArray = LogPage::extractParams( $this->row->log_params ); + $title = Title::makeTitle( $this->row->log_namespace, $this->row->log_title ); + + // Log link for this page + $loglink = $this->special->skin->link( + SpecialPage::getTitleFor( 'Log' ), + wfMsgHtml( 'log' ), + array(), + array( 'page' => $title->getPrefixedText() ) + ); + // Action text + if( !$this->canView() ) { + $action = '' . wfMsgHtml('rev-deleted-event') . ''; + } else { + $action = LogPage::actionText( $this->row->log_type, $this->row->log_action, $title, + $this->special->skin, $paramArray, true, true ); + if( $this->row->log_deleted & LogPage::DELETED_ACTION ) + $action = '' . $action . ''; + } + // User links + $userLink = $this->special->skin->userLink( $this->row->log_user, + User::WhoIs( $this->row->log_user ) ); + if( LogEventsList::isDeleted($this->row,LogPage::DELETED_USER) ) { + $userLink = '' . $userLink . ''; + } + // Comment + $comment = $wgLang->getDirMark() . $this->special->skin->commentBlock( $this->row->log_comment ); + if( LogEventsList::isDeleted($this->row,LogPage::DELETED_COMMENT) ) { + $comment = '' . $comment . ''; + } + return "
  • ($loglink) $date $userLink $action $comment
  • "; + } +} diff --git a/includes/revisiondelete/RevisionDeleteAbstracts.php b/includes/revisiondelete/RevisionDeleteAbstracts.php new file mode 100644 index 00000000..073c25ba --- /dev/null +++ b/includes/revisiondelete/RevisionDeleteAbstracts.php @@ -0,0 +1,454 @@ +special = $special; + $this->title = $title; + $this->ids = $ids; + } + + /** + * Get the internal type name of this list. Equal to the table name. + */ + public function getType() { + return $this->type; + } + + /** + * Get the DB field name associated with the ID list + */ + public function getIdField() { + return $this->idField; + } + + /** + * Get the DB field name storing timestamps + */ + public function getTimestampField() { + return $this->dateField; + } + + /** + * Get the DB field name storing user ids + */ + public function getAuthorIdField() { + return $this->authorIdField; + } + + /** + * Get the DB field name storing user names + */ + public function getAuthorNameField() { + return $this->authorNameField; + } + /** + * Set the visibility for the revisions in this list. Logging and + * transactions are done here. + * + * @param $params Associative array of parameters. Members are: + * value: The integer value to set the visibility to + * comment: The log comment. + * @return Status + */ + public function setVisibility( $params ) { + $bitPars = $params['value']; + $comment = $params['comment']; + + $this->res = false; + $dbw = wfGetDB( DB_MASTER ); + $this->doQuery( $dbw ); + $dbw->begin(); + $status = Status::newGood(); + $missing = array_flip( $this->ids ); + $this->clearFileOps(); + $idsForLog = array(); + $authorIds = $authorIPs = array(); + + for ( $this->reset(); $this->current(); $this->next() ) { + $item = $this->current(); + unset( $missing[ $item->getId() ] ); + + $oldBits = $item->getBits(); + // Build the actual new rev_deleted bitfield + $newBits = SpecialRevisionDelete::extractBitfield( $bitPars, $oldBits ); + + if ( $oldBits == $newBits ) { + $status->warning( 'revdelete-no-change', $item->formatDate(), $item->formatTime() ); + $status->failCount++; + continue; + } elseif ( $oldBits == 0 && $newBits != 0 ) { + $opType = 'hide'; + } elseif ( $oldBits != 0 && $newBits == 0 ) { + $opType = 'show'; + } else { + $opType = 'modify'; + } + + if ( $item->isHideCurrentOp( $newBits ) ) { + // Cannot hide current version text + $status->error( 'revdelete-hide-current', $item->formatDate(), $item->formatTime() ); + $status->failCount++; + continue; + } + if ( !$item->canView() ) { + // Cannot access this revision + $msg = ($opType == 'show') ? + 'revdelete-show-no-access' : 'revdelete-modify-no-access'; + $status->error( $msg, $item->formatDate(), $item->formatTime() ); + $status->failCount++; + continue; + } + // Cannot just "hide from Sysops" without hiding any fields + if( $newBits == Revision::DELETED_RESTRICTED ) { + $status->warning( 'revdelete-only-restricted', $item->formatDate(), $item->formatTime() ); + $status->failCount++; + continue; + } + + // Update the revision + $ok = $item->setBits( $newBits ); + + if ( $ok ) { + $idsForLog[] = $item->getId(); + $status->successCount++; + if( $item->getAuthorId() > 0 ) { + $authorIds[] = $item->getAuthorId(); + } else if( IP::isIPAddress( $item->getAuthorName() ) ) { + $authorIPs[] = $item->getAuthorName(); + } + } else { + $status->error( 'revdelete-concurrent-change', $item->formatDate(), $item->formatTime() ); + $status->failCount++; + } + } + + // Handle missing revisions + foreach ( $missing as $id => $unused ) { + $status->error( 'revdelete-modify-missing', $id ); + $status->failCount++; + } + + if ( $status->successCount == 0 ) { + $status->ok = false; + $dbw->rollback(); + return $status; + } + + // Save success count + $successCount = $status->successCount; + + // Move files, if there are any + $status->merge( $this->doPreCommitUpdates() ); + if ( !$status->isOK() ) { + // Fatal error, such as no configured archive directory + $dbw->rollback(); + return $status; + } + + // Log it + $this->updateLog( array( + 'title' => $this->title, + 'count' => $successCount, + 'newBits' => $newBits, + 'oldBits' => $oldBits, + 'comment' => $comment, + 'ids' => $idsForLog, + 'authorIds' => $authorIds, + 'authorIPs' => $authorIPs + ) ); + $dbw->commit(); + + // Clear caches + $status->merge( $this->doPostCommitUpdates() ); + return $status; + } + + /** + * Reload the list data from the master DB. This can be done after setVisibility() + * to allow $item->getHTML() to show the new data. + */ + function reloadFromMaster() { + $dbw = wfGetDB( DB_MASTER ); + $this->res = $this->doQuery( $dbw ); + } + + /** + * Record a log entry on the action + * @param $params Associative array of parameters: + * newBits: The new value of the *_deleted bitfield + * oldBits: The old value of the *_deleted bitfield. + * title: The target title + * ids: The ID list + * comment: The log comment + * authorsIds: The array of the user IDs of the offenders + * authorsIPs: The array of the IP/anon user offenders + */ + protected function updateLog( $params ) { + // Get the URL param's corresponding DB field + $field = RevisionDeleter::getRelationType( $this->getType() ); + if( !$field ) { + throw new MWException( "Bad log URL param type!" ); + } + // Put things hidden from sysops in the oversight log + if ( ( $params['newBits'] | $params['oldBits'] ) & $this->getSuppressBit() ) { + $logType = 'suppress'; + } else { + $logType = 'delete'; + } + // Add params for effected page and ids + $logParams = $this->getLogParams( $params ); + // Actually add the deletion log entry + $log = new LogPage( $logType ); + $logid = $log->addEntry( $this->getLogAction(), $params['title'], + $params['comment'], $logParams ); + // Allow for easy searching of deletion log items for revision/log items + $log->addRelations( $field, $params['ids'], $logid ); + $log->addRelations( 'target_author_id', $params['authorIds'], $logid ); + $log->addRelations( 'target_author_ip', $params['authorIPs'], $logid ); + } + + /** + * Get the log action for this list type + */ + public function getLogAction() { + return 'revision'; + } + + /** + * Get log parameter array. + * @param $params Associative array of log parameters, same as updateLog() + * @return array + */ + public function getLogParams( $params ) { + return array( + $this->getType(), + implode( ',', $params['ids'] ), + "ofield={$params['oldBits']}", + "nfield={$params['newBits']}" + ); + } + + /** + * Initialise the current iteration pointer + */ + protected function initCurrent() { + $row = $this->res->current(); + if ( $row ) { + $this->current = $this->newItem( $row ); + } else { + $this->current = false; + } + } + + /** + * Start iteration. This must be called before current() or next(). + * @return First list item + */ + public function reset() { + if ( !$this->res ) { + $this->res = $this->doQuery( wfGetDB( DB_SLAVE ) ); + } else { + $this->res->rewind(); + } + $this->initCurrent(); + return $this->current; + } + + /** + * Get the current list item, or false if we are at the end + */ + public function current() { + return $this->current; + } + + /** + * Move the iteration pointer to the next list item, and return it. + */ + public function next() { + $this->res->next(); + $this->initCurrent(); + return $this->current; + } + + /** + * Get the number of items in the list. + */ + public function length() { + if( !$this->res ) { + return 0; + } else { + return $this->res->numRows(); + } + } + + /** + * Clear any data structures needed for doPreCommitUpdates() and doPostCommitUpdates() + * STUB + */ + public function clearFileOps() { + } + + /** + * A hook for setVisibility(): do batch updates pre-commit. + * STUB + * @return Status + */ + public function doPreCommitUpdates() { + return Status::newGood(); + } + + /** + * A hook for setVisibility(): do any necessary updates post-commit. + * STUB + * @return Status + */ + public function doPostCommitUpdates() { + return Status::newGood(); + } + + /** + * Create an item object from a DB result row + * @param $row stdclass + */ + abstract public function newItem( $row ); + + /** + * Do the DB query to iterate through the objects. + * @param $db Database object to use for the query + */ + abstract public function doQuery( $db ); + + /** + * Get the integer value of the flag used for suppression + */ + abstract public function getSuppressBit(); +} + +/** + * Abstract base class for deletable items + */ +abstract class RevDel_Item { + /** The parent SpecialPage */ + var $special; + + /** The parent RevDel_List */ + var $list; + + /** The DB result row */ + var $row; + + /** + * @param $list RevDel_List + * @param $row DB result row + */ + public function __construct( $list, $row ) { + $this->special = $list->special; + $this->list = $list; + $this->row = $row; + } + + /** + * Get the ID, as it would appear in the ids URL parameter + */ + public function getId() { + $field = $this->list->getIdField(); + return $this->row->$field; + } + + /** + * Get the date, formatted with $wgLang + */ + public function formatDate() { + global $wgLang; + return $wgLang->date( $this->getTimestamp() ); + } + + /** + * Get the time, formatted with $wgLang + */ + public function formatTime() { + global $wgLang; + return $wgLang->time( $this->getTimestamp() ); + } + + /** + * Get the timestamp in MW 14-char form + */ + public function getTimestamp() { + $field = $this->list->getTimestampField(); + return wfTimestamp( TS_MW, $this->row->$field ); + } + + /** + * Get the author user ID + */ + public function getAuthorId() { + $field = $this->list->getAuthorIdField(); + return intval( $this->row->$field ); + } + + /** + * Get the author user name + */ + public function getAuthorName() { + $field = $this->list->getAuthorNameField(); + return strval( $this->row->$field ); + } + + /** + * Returns true if the item is "current", and the operation to set the given + * bits can't be executed for that reason + * STUB + */ + public function isHideCurrentOp( $newBits ) { + return false; + } + + /** + * Returns true if the current user can view the item + */ + abstract public function canView(); + + /** + * Returns true if the current user can view the item text/file + */ + abstract public function canViewContent(); + + /** + * Get the current deletion bitfield value + */ + abstract public function getBits(); + + /** + * Get the HTML of the list item. Should be include
  • tags. + * This is used to show the list in HTML form, by the special page. + */ + abstract public function getHTML(); + + /** + * Set the visibility of the item. This should do any necessary DB queries. + * + * The DB update query should have a condition which forces it to only update + * if the value in the DB matches the value fetched earlier with the SELECT. + * If the update fails because it did not match, the function should return + * false. This prevents concurrency problems. + * + * @return boolean success + */ + abstract public function setBits( $newBits ); +} diff --git a/includes/revisiondelete/RevisionDeleter.php b/includes/revisiondelete/RevisionDeleter.php new file mode 100644 index 00000000..d47fcecf --- /dev/null +++ b/includes/revisiondelete/RevisionDeleter.php @@ -0,0 +1,270 @@ + array(), 1 => array(), 2 => array() ); + // Build bitfield changes in language + self::checkItem( 'revdelete-content', + Revision::DELETED_TEXT, $diff, $n, $ret ); + self::checkItem( 'revdelete-summary', + Revision::DELETED_COMMENT, $diff, $n, $ret ); + self::checkItem( 'revdelete-uname', + Revision::DELETED_USER, $diff, $n, $ret ); + // Restriction application to sysops + if( $diff & Revision::DELETED_RESTRICTED ) { + if( $n & Revision::DELETED_RESTRICTED ) + $ret[2][] = 'revdelete-restricted'; + else + $ret[2][] = 'revdelete-unrestricted'; + } + return $ret; + } + + /** + * Gets a log message to describe the given revision visibility change. This + * message will be of the form "[hid {content, edit summary, username}]; + * [unhid {...}][applied restrictions to sysops] for $count revisions: $comment". + * + * @param $count Integer: The number of effected revisions. + * @param $nbitfield Integer: The new bitfield for the revision. + * @param $obitfield Integer: The old bitfield for the revision. + * @param $isForLog Boolean + * @param $forContent Boolean + */ + public static function getLogMessage( $count, $nbitfield, $obitfield, $isForLog = false, $forContent = false ) { + global $wgLang, $wgContLang; + + $lang = $forContent ? $wgContLang : $wgLang; + $msgFunc = $forContent ? "wfMsgForContent" : "wfMsg"; + + $changes = self::getChanges( $nbitfield, $obitfield ); + array_walk($changes, 'RevisionDeleter::expandMessageArray', $forContent); + + $changesText = array(); + + if( count( $changes[0] ) ) { + $changesText[] = $msgFunc( 'revdelete-hid', $lang->commaList( $changes[0] ) ); + } + if( count( $changes[1] ) ) { + $changesText[] = $msgFunc( 'revdelete-unhid', $lang->commaList( $changes[1] ) ); + } + + $s = $lang->semicolonList( $changesText ); + if( count( $changes[2] ) ) { + $s .= $s ? ' (' . $changes[2][0] . ')' : ' ' . $changes[2][0]; + } + + $msg = $isForLog ? 'logdelete-log-message' : 'revdelete-log-message'; + return wfMsgExt( $msg, $forContent ? array( 'parsemag', 'content' ) : array( 'parsemag' ), $s, $lang->formatNum($count) ); + } + + private static function expandMessageArray(& $msg, $key, $forContent) { + if ( is_array ($msg) ) { + array_walk($msg, 'RevisionDeleter::expandMessageArray', $forContent); + } else { + if ( $forContent ) { + $msg = wfMsgForContent($msg); + } else { + $msg = wfMsg($msg); + } + } + } + + // Get DB field name for URL param... + // Future code for other things may also track + // other types of revision-specific changes. + // @returns string One of log_id/rev_id/fa_id/ar_timestamp/oi_archive_name + public static function getRelationType( $typeName ) { + if ( isset( SpecialRevisionDelete::$deprecatedTypeMap[$typeName] ) ) { + $typeName = SpecialRevisionDelete::$deprecatedTypeMap[$typeName]; + } + if ( isset( SpecialRevisionDelete::$allowedTypes[$typeName] ) ) { + $class = SpecialRevisionDelete::$allowedTypes[$typeName]['list-class']; + $list = new $class( null, null, null ); + return $list->getIdField(); + } else { + return null; + } + } + + // Checks if a revision still exists in the revision table. + // If it doesn't, returns the corresponding ar_timestamp field + // so that this key can be used instead. + public static function checkRevisionExistence( $title, $revid ) { + $dbr = wfGetDB( DB_SLAVE ); + $exists = $dbr->selectField( 'revision', '1', + array( 'rev_id' => $revid ), __METHOD__ ); + + if ( $exists ) { + return true; + } + + $timestamp = $dbr->selectField( 'archive', 'ar_timestamp', + array( 'ar_namespace' => $title->getNamespace(), + 'ar_title' => $title->getDBkey(), + 'ar_rev_id' => $revid ), __METHOD__ ); + + return $timestamp; + } + + // Creates utility links for log entries. + public static function getLogLinks( $title, $paramArray, $skin, $messages ) { + global $wgLang; + + if( count($paramArray) >= 2 ) { + // Different revision types use different URL params... + $originalKey = $key = $paramArray[0]; + // $paramArray[1] is a CSV of the IDs + $Ids = explode( ',', $paramArray[1] ); + + $revert = array(); + + // For if undeleted revisions are found amidst deleted ones. + $undeletedRevisions = array(); + + // This is not going to work if some revs are deleted and some + // aren't. + if ($key == 'revision') { + foreach( $Ids as $k => $id ) { + $existResult = + self::checkRevisionExistence( $title, $id ); + + if ($existResult !== true) { + $key = 'archive'; + $Ids[$k] = $existResult; + } else { + // Undeleted revision amidst deleted ones + unset($Ids[$k]); + $undeletedRevisions[] = $id; + } + } + + if ( $key == $originalKey ) { + $Ids = $undeletedRevisions; + $undeletedRevisions = array(); + } + } + + // Diff link for single rev deletions + if( count($Ids) == 1 && !count($undeletedRevisions) ) { + // Live revision diffs... + if( in_array( $key, array( 'oldid', 'revision' ) ) ) { + $revert[] = $skin->link( + $title, + $messages['diff'], + array(), + array( + 'diff' => intval( $Ids[0] ), + 'unhide' => 1 + ), + array( 'known', 'noclasses' ) + ); + // Deleted revision diffs... + } else if( in_array( $key, array( 'artimestamp','archive' ) ) ) { + $revert[] = $skin->link( + SpecialPage::getTitleFor( 'Undelete' ), + $messages['diff'], + array(), + array( + 'target' => $title->getPrefixedDBKey(), + 'diff' => 'prev', + 'timestamp' => $Ids[0] + ), + array( 'known', 'noclasses' ) + ); + } + } + + // View/modify link... + if ( count($undeletedRevisions) ) { + // FIXME THIS IS A HORRIBLE HORRIBLE HACK AND SHOULD DIE + // It's not possible to pass a list of both deleted and + // undeleted revisions to SpecialRevisionDelete, so we're + // stuck with two links. See bug 23363. + $restoreLinks = array(); + + $restoreLinks[] = $skin->link( + SpecialPage::getTitleFor( 'Revisiondelete' ), + $messages['revdel-restore-visible'], + array(), + array( + 'target' => $title->getPrefixedText(), + 'type' => $originalKey, + 'ids' => implode(',', $undeletedRevisions), + ), + array( 'known', 'noclasses' ) + ); + + $restoreLinks[] = $skin->link( + SpecialPage::getTitleFor( 'Revisiondelete' ), + $messages['revdel-restore-deleted'], + array(), + array( + 'target' => $title->getPrefixedText(), + 'type' => $key, + 'ids' => implode(',', $Ids), + ), + array( 'known', 'noclasses' ) + ); + + $revert[] = $messages['revdel-restore'] . ' [' . + $wgLang->pipeList( $restoreLinks ) . ']'; + } else { + $revert[] = $skin->link( + SpecialPage::getTitleFor( 'Revisiondelete' ), + $messages['revdel-restore'], + array(), + array( + 'target' => $title->getPrefixedText(), + 'type' => $key, + 'ids' => implode(',', $Ids), + ), + array( 'known', 'noclasses' ) + ); + } + + // Pipe links + return wfMsg( 'parentheses', $wgLang->pipeList( $revert ) ); + } + return ''; + } +} \ No newline at end of file diff --git a/includes/search/SearchEngine.php b/includes/search/SearchEngine.php index f4ca700d..17482da2 100644 --- a/includes/search/SearchEngine.php +++ b/includes/search/SearchEngine.php @@ -1,11 +1,15 @@ db = $db; + } else { + $this->db = wfGetDB( DB_SLAVE ); + } + } + /** * Perform a full text search query and return a result set. * If title searches are not supported or disabled, return null. @@ -41,12 +53,12 @@ class SearchEngine { function searchTitle( $term ) { return null; } - + /** If this search backend can list/unlist redirects */ function acceptListRedirects() { return true; } - + /** * When overridden in derived class, performs database-specific conversions * on text to be used for searching or updating search index. @@ -56,7 +68,10 @@ class SearchEngine { * @return string */ public function normalizeText( $string ) { - return $string; + global $wgContLang; + + // Some languages such as Chinese require word segmentation + return $wgContLang->segmentByWord( $string ); } /** @@ -66,7 +81,7 @@ class SearchEngine { function transformSearchTerm( $term ) { return $term; } - + /** * If an exact title match can be found, or a very slightly close match, * return the title. If no match, returns NULL. @@ -76,41 +91,53 @@ class SearchEngine { */ public static function getNearMatch( $searchterm ) { $title = self::getNearMatchInternal( $searchterm ); - + wfRunHooks( 'SearchGetNearMatchComplete', array( $searchterm, &$title ) ); return $title; } + /** + * Do a near match (see SearchEngine::getNearMatch) and wrap it into a + * SearchResultSet. + * + * @param $searchterm string + * @return SearchResultSet + */ + public static function getNearMatchResultSet( $searchterm ) { + return new SearchNearMatchResultSet( self::getNearMatch( $searchterm ) ); + } + /** * Really find the title match. */ private static function getNearMatchInternal( $searchterm ) { global $wgContLang; - $allSearchTerms = array($searchterm); + $allSearchTerms = array( $searchterm ); if ( $wgContLang->hasVariants() ) { - $allSearchTerms = array_merge($allSearchTerms,$wgContLang->convertLinkToAllVariants($searchterm)); + $allSearchTerms = array_merge( $allSearchTerms, $wgContLang->autoConvertToAllVariants( $searchterm ) ); } - if( !wfRunHooks( 'SearchGetNearMatchBefore', array( $allSearchTerms, &$titleResult ) ) ) { + $titleResult = null; + if ( !wfRunHooks( 'SearchGetNearMatchBefore', array( $allSearchTerms, &$titleResult ) ) ) { return $titleResult; } - foreach($allSearchTerms as $term) { + foreach ( $allSearchTerms as $term ) { # Exact match? No need to look further. $title = Title::newFromText( $term ); - if (is_null($title)) + if ( is_null( $title ) ) return null; if ( $title->getNamespace() == NS_SPECIAL || $title->isExternal() || $title->exists() ) { return $title; } - + # See if it still otherwise has content is some sane sense $article = MediaWiki::articleFromTitle( $title ); - if( $article->hasViewableContent() ) { + if ( $article->hasViewableContent() ) { return $title; } @@ -136,14 +163,14 @@ class SearchEngine { } # Now try Word-Caps-Breaking-At-Word-Breaks, for hyphenated names etc - $title = Title::newFromText( $wgContLang->ucwordbreaks($term) ); + $title = Title::newFromText( $wgContLang->ucwordbreaks( $term ) ); if ( $title && $title->exists() ) { return $title; } // Give hooks a chance at better match variants $title = null; - if( !wfRunHooks( 'SearchGetNearMatch', array( $term, &$title ) ) ) { + if ( !wfRunHooks( 'SearchGetNearMatch', array( $term, &$title ) ) ) { return $title; } } @@ -151,7 +178,7 @@ class SearchEngine { $title = Title::newFromText( $searchterm ); # Entering an IP address goes to the contributions page - if ( ( $title->getNamespace() == NS_USER && User::isIP($title->getText() ) ) + if ( ( $title->getNamespace() == NS_USER && User::isIP( $title->getText() ) ) || User::isIP( trim( $searchterm ) ) ) { return SpecialPage::getTitleFor( 'Contributions', $title->getDBkey() ); } @@ -165,22 +192,22 @@ class SearchEngine { # Go to images that exist even if there's no local page. # There may have been a funny upload, or it may be on a shared # file repository such as Wikimedia Commons. - if( $title->getNamespace() == NS_FILE ) { + if ( $title->getNamespace() == NS_FILE ) { $image = wfFindFile( $title ); - if( $image ) { + if ( $image ) { return $title; } } # MediaWiki namespace? Page may be "implied" if not customized. # Just return it, with caps forced as the message system likes it. - if( $title->getNamespace() == NS_MEDIAWIKI ) { + if ( $title->getNamespace() == NS_MEDIAWIKI ) { return Title::makeTitle( NS_MEDIAWIKI, $wgContLang->ucfirst( $title->getText() ) ); } # Quoted term? Try without the quotes... $matches = array(); - if( preg_match( '/^"([^"]+)"$/', $searchterm, $matches ) ) { + if ( preg_match( '/^"([^"]+)"$/', $searchterm, $matches ) ) { return SearchEngine::getNearMatch( $matches[1] ); } @@ -219,28 +246,28 @@ class SearchEngine { * * @param $query String */ - function replacePrefixes( $query ){ + function replacePrefixes( $query ) { global $wgContLang; $parsed = $query; - if( strpos($query,':') === false ) { // nothing to do + if ( strpos( $query, ':' ) === false ) { // nothing to do wfRunHooks( 'SearchEngineReplacePrefixesComplete', array( $this, $query, &$parsed ) ); return $parsed; } - - $allkeyword = wfMsgForContent('searchall').":"; - if( strncmp($query, $allkeyword, strlen($allkeyword)) == 0 ){ + + $allkeyword = wfMsgForContent( 'searchall' ) . ":"; + if ( strncmp( $query, $allkeyword, strlen( $allkeyword ) ) == 0 ) { $this->namespaces = null; - $parsed = substr($query,strlen($allkeyword)); - } else if( strpos($query,':') !== false ) { - $prefix = substr($query,0,strpos($query,':')); - $index = $wgContLang->getNsIndex($prefix); - if($index !== false){ - $this->namespaces = array($index); - $parsed = substr($query,strlen($prefix)+1); + $parsed = substr( $query, strlen( $allkeyword ) ); + } else if ( strpos( $query, ':' ) !== false ) { + $prefix = substr( $query, 0, strpos( $query, ':' ) ); + $index = $wgContLang->getNsIndex( $prefix ); + if ( $index !== false ) { + $this->namespaces = array( $index ); + $parsed = substr( $query, strlen( $prefix ) + 1 ); } } - if(trim($parsed) == '') + if ( trim( $parsed ) == '' ) $parsed = $query; // prefix was the whole query wfRunHooks( 'SearchEngineReplacePrefixesComplete', array( $this, $query, &$parsed ) ); @@ -255,16 +282,16 @@ class SearchEngine { public static function searchableNamespaces() { global $wgContLang; $arr = array(); - foreach( $wgContLang->getNamespaces() as $ns => $name ) { - if( $ns >= NS_MAIN ) { + foreach ( $wgContLang->getNamespaces() as $ns => $name ) { + if ( $ns >= NS_MAIN ) { $arr[$ns] = $name; } } - + wfRunHooks( 'SearchableNamespaces', array( &$arr ) ); return $arr; } - + /** * Extract default namespaces to search from the given user's * settings, returning a list of index numbers. @@ -274,78 +301,78 @@ class SearchEngine { */ public static function userNamespaces( $user ) { global $wgSearchEverythingOnlyLoggedIn; - + // get search everything preference, that can be set to be read for logged-in users $searcheverything = false; - if( ( $wgSearchEverythingOnlyLoggedIn && $user->isLoggedIn() ) + if ( ( $wgSearchEverythingOnlyLoggedIn && $user->isLoggedIn() ) || !$wgSearchEverythingOnlyLoggedIn ) - $searcheverything = $user->getOption('searcheverything'); - - // searcheverything overrides other options - if( $searcheverything ) - return array_keys(SearchEngine::searchableNamespaces()); - + $searcheverything = $user->getOption( 'searcheverything' ); + + // searcheverything overrides other options + if ( $searcheverything ) + return array_keys( SearchEngine::searchableNamespaces() ); + $arr = Preferences::loadOldSearchNs( $user ); $searchableNamespaces = SearchEngine::searchableNamespaces(); - - $arr = array_intersect( $arr, array_keys($searchableNamespaces) ); // Filter - + + $arr = array_intersect( $arr, array_keys( $searchableNamespaces ) ); // Filter + return $arr; } - + /** * Find snippet highlight settings for a given user * * @param $user User - * @return Array contextlines, contextchars + * @return Array contextlines, contextchars */ - public static function userHighlightPrefs( &$user ){ - //$contextlines = $user->getOption( 'contextlines', 5 ); - //$contextchars = $user->getOption( 'contextchars', 50 ); + public static function userHighlightPrefs( &$user ) { + // $contextlines = $user->getOption( 'contextlines', 5 ); + // $contextchars = $user->getOption( 'contextchars', 50 ); $contextlines = 2; // Hardcode this. Old defaults sucked. :) $contextchars = 75; // same as above.... :P - return array($contextlines, $contextchars); + return array( $contextlines, $contextchars ); } - + /** * An array of namespaces indexes to be searched by default - * - * @return Array + * + * @return Array */ - public static function defaultNamespaces(){ + public static function defaultNamespaces() { global $wgNamespacesToBeSearchedDefault; - - return array_keys($wgNamespacesToBeSearchedDefault, true); + + return array_keys( $wgNamespacesToBeSearchedDefault, true ); } - + /** * Get a list of namespace names useful for showing in tooltips * and preferences * * @param $namespaces Array */ - public static function namespacesAsText( $namespaces ){ + public static function namespacesAsText( $namespaces ) { global $wgContLang; - - $formatted = array_map( array($wgContLang,'getFormattedNsText'), $namespaces ); - foreach( $formatted as $key => $ns ){ - if ( empty($ns) ) + + $formatted = array_map( array( $wgContLang, 'getFormattedNsText' ), $namespaces ); + foreach ( $formatted as $key => $ns ) { + if ( empty( $ns ) ) $formatted[$key] = wfMsg( 'blanknamespace' ); } return $formatted; } - + /** * Return the help namespaces to be shown on Special:Search - * - * @return Array + * + * @return Array */ public static function helpNamespaces() { global $wgNamespacesToBeSearchedHelp; - + return array_keys( $wgNamespacesToBeSearchedHelp, true ); } - + /** * Return a 'cleaned up' search string * @@ -364,14 +391,15 @@ class SearchEngine { */ public static function create() { global $wgSearchType; - $dbr = wfGetDB( DB_SLAVE ); - if( $wgSearchType ) { + $dbr = null; + if ( $wgSearchType ) { $class = $wgSearchType; } else { + $dbr = wfGetDB( DB_SLAVE ); $class = $dbr->getSearchEngine(); } $search = new $class( $dbr ); - $search->setLimitOffset(0,0); + $search->setLimitOffset( 0, 0 ); return $search; } @@ -399,34 +427,34 @@ class SearchEngine { function updateTitle( $id, $title ) { // no-op } - + /** * Get OpenSearch suggestion template - * + * * @return String */ public static function getOpenSearchTemplate() { - global $wgOpenSearchTemplate, $wgServer, $wgScriptPath; - if( $wgOpenSearchTemplate ) { + global $wgOpenSearchTemplate, $wgServer; + if ( $wgOpenSearchTemplate ) { return $wgOpenSearchTemplate; - } else { + } else { $ns = implode( '|', SearchEngine::defaultNamespaces() ); - if( !$ns ) $ns = "0"; - return $wgServer . $wgScriptPath . '/api.php?action=opensearch&search={searchTerms}&namespace='.$ns; + if ( !$ns ) $ns = "0"; + return $wgServer . wfScript( 'api' ) . '?action=opensearch&search={searchTerms}&namespace=' . $ns; } } - + /** - * Get internal MediaWiki Suggest template - * + * Get internal MediaWiki Suggest template + * * @return String */ public static function getMWSuggestTemplate() { - global $wgMWSuggestTemplate, $wgServer, $wgScriptPath; - if($wgMWSuggestTemplate) + global $wgMWSuggestTemplate, $wgServer; + if ( $wgMWSuggestTemplate ) return $wgMWSuggestTemplate; - else - return $wgServer . $wgScriptPath . '/api.php?action=opensearch&search={searchTerms}&namespace={namespaces}&suggest'; + else + return $wgServer . wfScript( 'api' ) . '?action=opensearch&search={searchTerms}&namespace={namespaces}&suggest'; } } @@ -486,27 +514,27 @@ class SearchResultSet { /** * @return String: suggested query, null if none */ - function getSuggestionQuery(){ + function getSuggestionQuery() { return null; } /** * @return String: HTML highlighted suggested query, '' if none */ - function getSuggestionSnippet(){ + function getSuggestionSnippet() { return ''; } - + /** * Return information about how and from where the results were fetched, - * should be useful for diagnostics and debugging + * should be useful for diagnostics and debugging * * @return String */ function getInfo() { return null; } - + /** * Return a result set of hits on other (multiple) wikis associated with this one * @@ -515,7 +543,7 @@ class SearchResultSet { function getInterwikiResults() { return null; } - + /** * Check if there are results on other wikis * @@ -524,7 +552,6 @@ class SearchResultSet { function hasInterwikiResults() { return $this->getInterwikiResults() != null; } - /** * Fetches next search result, or false. @@ -558,20 +585,27 @@ class SqlSearchResultSet extends SearchResultSet { } function numRows() { + if ( $this->mResultSet === false ) + return false; + return $this->mResultSet->numRows(); } function next() { - if ($this->mResultSet === false ) + if ( $this->mResultSet === false ) return false; $row = $this->mResultSet->fetchObject(); - if ($row === false) + if ( $row === false ) return false; - return new SearchResult($row); + + return SearchResult::newFromRow( $row ); } function free() { + if ( $this->mResultSet === false ) + return false; + $this->mResultSet->free(); } } @@ -580,7 +614,7 @@ class SqlSearchResultSet extends SearchResultSet { * @ingroup Search */ class SearchResultTooMany { - ## Some search engines may bail out if too many matches are found + # # Some search engines may bail out if too many matches are found } @@ -594,32 +628,78 @@ class SearchResult { var $mRevision = null; var $mImage = null; - function __construct( $row ) { - $this->mTitle = Title::makeTitle( $row->page_namespace, $row->page_title ); - if( !is_null($this->mTitle) ){ + /** + * Return a new SearchResult and initializes it with a title. + * + * @param $title Title + * @return SearchResult + */ + public static function newFromTitle( $title ) { + $result = new self(); + $result->initFromTitle( $title ); + return $result; + } + /** + * Return a new SearchResult and initializes it with a row. + * + * @param $row object + * @return SearchResult + */ + public static function newFromRow( $row ) { + $result = new self(); + $result->initFromRow( $row ); + return $result; + } + + public function __construct( $row = null ) { + if ( !is_null( $row ) ) { + // Backwards compatibility with pre-1.17 callers + $this->initFromRow( $row ); + } + } + + /** + * Initialize from a database row. Makes a Title and passes that to + * initFromTitle. + * + * @param $row object + */ + protected function initFromRow( $row ) { + $this->initFromTitle( Title::makeTitle( $row->page_namespace, $row->page_title ) ); + } + + /** + * Initialize from a Title and if possible initializes a corresponding + * Revision and File. + * + * @param $title Title + */ + protected function initFromTitle( $title ) { + $this->mTitle = $title; + if ( !is_null( $this->mTitle ) ) { $this->mRevision = Revision::newFromTitle( $this->mTitle ); - if( $this->mTitle->getNamespace() === NS_FILE ) + if ( $this->mTitle->getNamespace() === NS_FILE ) $this->mImage = wfFindFile( $this->mTitle ); } } - + /** * Check if this is result points to an invalid title * * @return Boolean */ - function isBrokenTitle(){ - if( is_null($this->mTitle) ) + function isBrokenTitle() { + if ( is_null( $this->mTitle ) ) return true; return false; } - + /** * Check if target page is missing, happens when index is out of date - * + * * @return Boolean */ - function isMissingRevision(){ + function isMissingRevision() { return !$this->mRevision && !$this->mImage; } @@ -640,36 +720,36 @@ class SearchResult { /** * Lazy initialization of article text from DB */ - protected function initText(){ - if( !isset($this->mText) ){ - if($this->mRevision != null) + protected function initText() { + if ( !isset( $this->mText ) ) { + if ( $this->mRevision != null ) $this->mText = $this->mRevision->getText(); else // TODO: can we fetch raw wikitext for commons images? $this->mText = ''; - + } } - + /** * @param $terms Array: terms to highlight - * @return String: highlighted text snippet, null (and not '') if not supported + * @return String: highlighted text snippet, null (and not '') if not supported */ - function getTextSnippet($terms){ + function getTextSnippet( $terms ) { global $wgUser, $wgAdvancedSearchHighlighting; $this->initText(); - list($contextlines,$contextchars) = SearchEngine::userHighlightPrefs($wgUser); + list( $contextlines, $contextchars ) = SearchEngine::userHighlightPrefs( $wgUser ); $h = new SearchHighlighter(); - if( $wgAdvancedSearchHighlighting ) + if ( $wgAdvancedSearchHighlighting ) return $h->highlightText( $this->mText, $terms, $contextlines, $contextchars ); else return $h->highlightSimple( $this->mText, $terms, $contextlines, $contextchars ); } - + /** * @param $terms Array: terms to highlight * @return String: highlighted title, '' if not supported */ - function getTitleSnippet($terms){ + function getTitleSnippet( $terms ) { return ''; } @@ -677,46 +757,46 @@ class SearchResult { * @param $terms Array: terms to highlight * @return String: highlighted redirect name (redirect to this page), '' if none or not supported */ - function getRedirectSnippet($terms){ + function getRedirectSnippet( $terms ) { return ''; } /** * @return Title object for the redirect to this page, null if none or not supported */ - function getRedirectTitle(){ + function getRedirectTitle() { return null; } /** * @return string highlighted relevant section name, null if none or not supported */ - function getSectionSnippet(){ + function getSectionSnippet() { return ''; } /** * @return Title object (pagename+fragment) for the section, null if none or not supported */ - function getSectionTitle(){ + function getSectionTitle() { return null; } /** * @return String: timestamp */ - function getTimestamp(){ - if( $this->mRevision ) + function getTimestamp() { + if ( $this->mRevision ) return $this->mRevision->getTimestamp(); - else if( $this->mImage ) + else if ( $this->mImage ) return $this->mImage->getTimestamp(); - return ''; + return ''; } /** * @return Integer: number of words */ - function getWordCount(){ + function getWordCount() { $this->initText(); return str_word_count( $this->mText ); } @@ -724,38 +804,63 @@ class SearchResult { /** * @return Integer: size in bytes */ - function getByteSize(){ + function getByteSize() { $this->initText(); return strlen( $this->mText ); } - + /** * @return Boolean if hit has related articles */ - function hasRelated(){ + function hasRelated() { return false; } - + /** * @return String: interwiki prefix of the title (return iw even if title is broken) */ - function getInterwikiPrefix(){ + function getInterwikiPrefix() { return ''; } } +/** + * A SearchResultSet wrapper for SearchEngine::getNearMatch + */ +class SearchNearMatchResultSet extends SearchResultSet { + private $fetched = false; + /** + * @param $match mixed Title if matched, else null + */ + public function __construct( $match ) { + $this->result = $match; + } + public function hasResult() { + return (bool)$this->result; + } + public function numRows() { + return $this->hasResults() ? 1 : 0; + } + public function next() { + if ( $this->fetched || !$this->result ) { + return false; + } + $this->fetched = true; + return SearchResult::newFromTitle( $this->result ); + } +} /** * Highlight bits of wikitext - * + * * @ingroup Search */ -class SearchHighlighter { +class SearchHighlighter { var $mCleanWikitext = true; - - function SearchHighlighter($cleanupWikitext = true){ + + function __construct( $cleanupWikitext = true ) { $this->mCleanWikitext = $cleanupWikitext; } - + /** * Default implementation of wikitext highlighting * @@ -766,23 +871,23 @@ class SearchHighlighter { * @return String */ public function highlightText( $text, $terms, $contextlines, $contextchars ) { - global $wgLang, $wgContLang; + global $wgContLang; global $wgSearchHighlightBoundaries; $fname = __METHOD__; - - if($text == '') + + if ( $text == '' ) return ''; - + // spli text into text + templates/links/tables $spat = "/(\\{\\{)|(\\[\\[[^\\]:]+:)|(\n\\{\\|)"; // first capture group is for detecting nested templates/links/tables/references $endPatterns = array( 1 => '/(\{\{)|(\}\})/', // template 2 => '/(\[\[)|(\]\])/', // image - 3 => "/(\n\\{\\|)|(\n\\|\\})/"); // table - + 3 => "/(\n\\{\\|)|(\n\\|\\})/" ); // table + // FIXME: this should prolly be a hook or something - if(function_exists('wfCite')){ + if ( function_exists( 'wfCite' ) ) { $spat .= '|()'; // references via cite extension $endPatterns[4] = '/()|(<\/ref>)/'; } @@ -791,213 +896,215 @@ class SearchHighlighter { $otherExt = array(); // other extracts wfProfileIn( "$fname-split" ); $start = 0; - $textLen = strlen($text); + $textLen = strlen( $text ); $count = 0; // sequence number to maintain ordering - while( $start < $textLen ){ + while ( $start < $textLen ) { // find start of template/image/table - if( preg_match( $spat, $text, $matches, PREG_OFFSET_CAPTURE, $start ) ){ - $epat = ''; - foreach($matches as $key => $val){ - if($key > 0 && $val[1] != -1){ - if($key == 2){ + if ( preg_match( $spat, $text, $matches, PREG_OFFSET_CAPTURE, $start ) ) { + $epat = ''; + foreach ( $matches as $key => $val ) { + if ( $key > 0 && $val[1] != - 1 ) { + if ( $key == 2 ) { // see if this is an image link - $ns = substr($val[0],2,-1); - if( $wgContLang->getNsIndex($ns) != NS_FILE ) + $ns = substr( $val[0], 2, - 1 ); + if ( $wgContLang->getNsIndex( $ns ) != NS_FILE ) break; - + } $epat = $endPatterns[$key]; - $this->splitAndAdd( $textExt, $count, substr( $text, $start, $val[1] - $start ) ); + $this->splitAndAdd( $textExt, $count, substr( $text, $start, $val[1] - $start ) ); $start = $val[1]; break; } } - if( $epat ){ + if ( $epat ) { // find end (and detect any nested elements) - $level = 0; + $level = 0; $offset = $start + 1; $found = false; - while( preg_match( $epat, $text, $endMatches, PREG_OFFSET_CAPTURE, $offset ) ){ - if( array_key_exists(2,$endMatches) ){ + while ( preg_match( $epat, $text, $endMatches, PREG_OFFSET_CAPTURE, $offset ) ) { + if ( array_key_exists( 2, $endMatches ) ) { // found end - if($level == 0){ - $len = strlen($endMatches[2][0]); + if ( $level == 0 ) { + $len = strlen( $endMatches[2][0] ); $off = $endMatches[2][1]; - $this->splitAndAdd( $otherExt, $count, + $this->splitAndAdd( $otherExt, $count, substr( $text, $start, $off + $len - $start ) ); $start = $off + $len; $found = true; break; - } else{ + } else { // end of nested element $level -= 1; } - } else{ + } else { // nested $level += 1; } - $offset = $endMatches[0][1] + strlen($endMatches[0][0]); + $offset = $endMatches[0][1] + strlen( $endMatches[0][0] ); } - if( ! $found ){ + if ( ! $found ) { // couldn't find appropriate closing tag, skip - $this->splitAndAdd( $textExt, $count, substr( $text, $start, strlen($matches[0][0]) ) ); - $start += strlen($matches[0][0]); + $this->splitAndAdd( $textExt, $count, substr( $text, $start, strlen( $matches[0][0] ) ) ); + $start += strlen( $matches[0][0] ); } continue; } } // else: add as text extract - $this->splitAndAdd( $textExt, $count, substr($text,$start) ); + $this->splitAndAdd( $textExt, $count, substr( $text, $start ) ); break; } - + $all = $textExt + $otherExt; // these have disjunct key sets - + wfProfileOut( "$fname-split" ); - + // prepare regexps - foreach( $terms as $index => $term ) { + foreach ( $terms as $index => $term ) { // manually do upper/lowercase stuff for utf-8 since PHP won't do it - if(preg_match('/[\x80-\xff]/', $term) ){ - $terms[$index] = preg_replace_callback('/./us',array($this,'caseCallback'),$terms[$index]); + if ( preg_match( '/[\x80-\xff]/', $term ) ) { + $terms[$index] = preg_replace_callback( '/./us', array( $this, 'caseCallback' ), $terms[$index] ); } else { $terms[$index] = $term; } } $anyterm = implode( '|', $terms ); - $phrase = implode("$wgSearchHighlightBoundaries+", $terms ); + $phrase = implode( "$wgSearchHighlightBoundaries+", $terms ); // FIXME: a hack to scale contextchars, a correct solution // would be to have contextchars actually be char and not byte // length, and do proper utf-8 substrings and lengths everywhere, // but PHP is making that very hard and unclean to implement :( - $scale = strlen($anyterm) / mb_strlen($anyterm); + $scale = strlen( $anyterm ) / mb_strlen( $anyterm ); $contextchars = intval( $contextchars * $scale ); - + $patPre = "(^|$wgSearchHighlightBoundaries)"; - $patPost = "($wgSearchHighlightBoundaries|$)"; - - $pat1 = "/(".$phrase.")/ui"; - $pat2 = "/$patPre(".$anyterm.")$patPost/ui"; - + $patPost = "($wgSearchHighlightBoundaries|$)"; + + $pat1 = "/(" . $phrase . ")/ui"; + $pat2 = "/$patPre(" . $anyterm . ")$patPost/ui"; + wfProfileIn( "$fname-extract" ); - + $left = $contextlines; $snippets = array(); - $offsets = array(); - + $offsets = array(); + // show beginning only if it contains all words $first = 0; $firstText = ''; - foreach($textExt as $index => $line){ - if(strlen($line)>0 && $line[0] != ';' && $line[0] != ':'){ + foreach ( $textExt as $index => $line ) { + if ( strlen( $line ) > 0 && $line[0] != ';' && $line[0] != ':' ) { $firstText = $this->extract( $line, 0, $contextchars * $contextlines ); $first = $index; break; } } - if( $firstText ){ + if ( $firstText ) { $succ = true; // check if first text contains all terms - foreach($terms as $term){ - if( ! preg_match("/$patPre".$term."$patPost/ui", $firstText) ){ + foreach ( $terms as $term ) { + if ( ! preg_match( "/$patPre" . $term . "$patPost/ui", $firstText ) ) { $succ = false; break; } } - if( $succ ){ + if ( $succ ) { $snippets[$first] = $firstText; - $offsets[$first] = 0; + $offsets[$first] = 0; } } - if( ! $snippets ) { - // match whole query on text - $this->process($pat1, $textExt, $left, $contextchars, $snippets, $offsets); + if ( ! $snippets ) { + // match whole query on text + $this->process( $pat1, $textExt, $left, $contextchars, $snippets, $offsets ); // match whole query on templates/tables/images - $this->process($pat1, $otherExt, $left, $contextchars, $snippets, $offsets); + $this->process( $pat1, $otherExt, $left, $contextchars, $snippets, $offsets ); // match any words on text - $this->process($pat2, $textExt, $left, $contextchars, $snippets, $offsets); + $this->process( $pat2, $textExt, $left, $contextchars, $snippets, $offsets ); // match any words on templates/tables/images - $this->process($pat2, $otherExt, $left, $contextchars, $snippets, $offsets); - - ksort($snippets); + $this->process( $pat2, $otherExt, $left, $contextchars, $snippets, $offsets ); + + ksort( $snippets ); } - + // add extra chars to each snippet to make snippets constant size - $extended = array(); - if( count( $snippets ) == 0){ + $extended = array(); + if ( count( $snippets ) == 0 ) { // couldn't find the target words, just show beginning of article - $targetchars = $contextchars * $contextlines; - $snippets[$first] = ''; - $offsets[$first] = 0; - } else{ - // if begin of the article contains the whole phrase, show only that !! - if( array_key_exists($first,$snippets) && preg_match($pat1,$snippets[$first]) - && $offsets[$first] < $contextchars * 2 ){ - $snippets = array ($first => $snippets[$first]); + if ( array_key_exists( $first, $all ) ) { + $targetchars = $contextchars * $contextlines; + $snippets[$first] = ''; + $offsets[$first] = 0; } - + } else { + // if begin of the article contains the whole phrase, show only that !! + if ( array_key_exists( $first, $snippets ) && preg_match( $pat1, $snippets[$first] ) + && $offsets[$first] < $contextchars * 2 ) { + $snippets = array ( $first => $snippets[$first] ); + } + // calc by how much to extend existing snippets - $targetchars = intval( ($contextchars * $contextlines) / count ( $snippets ) ); - } + $targetchars = intval( ( $contextchars * $contextlines ) / count ( $snippets ) ); + } - foreach($snippets as $index => $line){ + foreach ( $snippets as $index => $line ) { $extended[$index] = $line; - $len = strlen($line); - if( $len < $targetchars - 20 ){ + $len = strlen( $line ); + if ( $len < $targetchars - 20 ) { // complete this line - if($len < strlen( $all[$index] )){ - $extended[$index] = $this->extract( $all[$index], $offsets[$index], $offsets[$index]+$targetchars, $offsets[$index]); + if ( $len < strlen( $all[$index] ) ) { + $extended[$index] = $this->extract( $all[$index], $offsets[$index], $offsets[$index] + $targetchars, $offsets[$index] ); $len = strlen( $extended[$index] ); } - + // add more lines $add = $index + 1; - while( $len < $targetchars - 20 - && array_key_exists($add,$all) - && !array_key_exists($add,$snippets) ){ + while ( $len < $targetchars - 20 + && array_key_exists( $add, $all ) + && !array_key_exists( $add, $snippets ) ) { $offsets[$add] = 0; - $tt = "\n".$this->extract( $all[$add], 0, $targetchars - $len, $offsets[$add] ); + $tt = "\n" . $this->extract( $all[$add], 0, $targetchars - $len, $offsets[$add] ); $extended[$add] = $tt; $len += strlen( $tt ); - $add++; + $add++; } - } + } } - - //$snippets = array_map('htmlspecialchars', $extended); + + // $snippets = array_map('htmlspecialchars', $extended); $snippets = $extended; - $last = -1; + $last = - 1; $extract = ''; - foreach($snippets as $index => $line){ - if($last == -1) + foreach ( $snippets as $index => $line ) { + if ( $last == - 1 ) $extract .= $line; // first line - elseif($last+1 == $index && $offsets[$last]+strlen($snippets[$last]) >= strlen($all[$last])) - $extract .= " ".$line; // continous lines + elseif ( $last + 1 == $index && $offsets[$last] + strlen( $snippets[$last] ) >= strlen( $all[$last] ) ) + $extract .= " " . $line; // continous lines else $extract .= ' ... ' . $line; $last = $index; } - if( $extract ) + if ( $extract ) $extract .= ' ... '; - + $processed = array(); - foreach($terms as $term){ - if( ! isset($processed[$term]) ){ - $pat3 = "/$patPre(".$term.")$patPost/ui"; // highlight word + foreach ( $terms as $term ) { + if ( ! isset( $processed[$term] ) ) { + $pat3 = "/$patPre(" . $term . ")$patPost/ui"; // highlight word $extract = preg_replace( $pat3, "\\1\\2\\3", $extract ); $processed[$term] = true; } } - + wfProfileOut( "$fname-extract" ); - + return $extract; } - + /** * Split text into lines and add it to extracts array * @@ -1005,28 +1112,28 @@ class SearchHighlighter { * @param $count Integer * @param $text String */ - function splitAndAdd(&$extracts, &$count, $text){ - $split = explode( "\n", $this->mCleanWikitext? $this->removeWiki($text) : $text ); - foreach($split as $line){ - $tt = trim($line); - if( $tt ) + function splitAndAdd( &$extracts, &$count, $text ) { + $split = explode( "\n", $this->mCleanWikitext ? $this->removeWiki( $text ) : $text ); + foreach ( $split as $line ) { + $tt = trim( $line ); + if ( $tt ) $extracts[$count++] = $tt; } } - + /** * Do manual case conversion for non-ascii chars * * @param $matches Array */ - function caseCallback($matches){ + function caseCallback( $matches ) { global $wgContLang; - if( strlen($matches[0]) > 1 ){ - return '['.$wgContLang->lc($matches[0]).$wgContLang->uc($matches[0]).']'; + if ( strlen( $matches[0] ) > 1 ) { + return '[' . $wgContLang->lc( $matches[0] ) . $wgContLang->uc( $matches[0] ) . ']'; } else return $matches[0]; } - + /** * Extract part of the text from start to end, but by * not chopping up words @@ -1035,29 +1142,27 @@ class SearchHighlighter { * @param $end Integer * @param $posStart Integer: (out) actual start position * @param $posEnd Integer: (out) actual end position - * @return String + * @return String */ - function extract($text, $start, $end, &$posStart = null, &$posEnd = null ){ - global $wgContLang; - - if( $start != 0) + function extract( $text, $start, $end, &$posStart = null, &$posEnd = null ) { + if ( $start != 0 ) $start = $this->position( $text, $start, 1 ); - if( $end >= strlen($text) ) - $end = strlen($text); + if ( $end >= strlen( $text ) ) + $end = strlen( $text ); else $end = $this->position( $text, $end ); - - if(!is_null($posStart)) + + if ( !is_null( $posStart ) ) $posStart = $start; - if(!is_null($posEnd)) + if ( !is_null( $posEnd ) ) $posEnd = $end; - - if($end > $start) - return substr($text, $start, $end-$start); + + if ( $end > $start ) + return substr( $text, $start, $end - $start ); else return ''; - } - + } + /** * Find a nonletter near a point (index) in the text * @@ -1066,117 +1171,117 @@ class SearchHighlighter { * @param $offset Integer: offset to found index * @return Integer: nearest nonletter index, or beginning of utf8 char if none */ - function position($text, $point, $offset=0 ){ + function position( $text, $point, $offset = 0 ) { $tolerance = 10; $s = max( 0, $point - $tolerance ); - $l = min( strlen($text), $point + $tolerance ) - $s; + $l = min( strlen( $text ), $point + $tolerance ) - $s; $m = array(); - if( preg_match('/[ ,.!?~!@#$%^&*\(\)+=\-\\\|\[\]"\'<>]/', substr($text,$s,$l), $m, PREG_OFFSET_CAPTURE ) ){ + if ( preg_match( '/[ ,.!?~!@#$%^&*\(\)+=\-\\\|\[\]"\'<>]/', substr( $text, $s, $l ), $m, PREG_OFFSET_CAPTURE ) ) { return $m[0][1] + $s + $offset; - } else{ + } else { // check if point is on a valid first UTF8 char $char = ord( $text[$point] ); - while( $char >= 0x80 && $char < 0xc0 ) { + while ( $char >= 0x80 && $char < 0xc0 ) { // skip trailing bytes $point++; - if($point >= strlen($text)) - return strlen($text); + if ( $point >= strlen( $text ) ) + return strlen( $text ); $char = ord( $text[$point] ); } return $point; - + } } - + /** * Search extracts for a pattern, and return snippets * * @param $pattern String: regexp for matching lines - * @param $extracts Array: extracts to search + * @param $extracts Array: extracts to search * @param $linesleft Integer: number of extracts to make * @param $contextchars Integer: length of snippet * @param $out Array: map for highlighted snippets * @param $offsets Array: map of starting points of snippets * @protected */ - function process( $pattern, $extracts, &$linesleft, &$contextchars, &$out, &$offsets ){ - if($linesleft == 0) + function process( $pattern, $extracts, &$linesleft, &$contextchars, &$out, &$offsets ) { + if ( $linesleft == 0 ) return; // nothing to do - foreach($extracts as $index => $line){ - if( array_key_exists($index,$out) ) + foreach ( $extracts as $index => $line ) { + if ( array_key_exists( $index, $out ) ) continue; // this line already highlighted - + $m = array(); if ( !preg_match( $pattern, $line, $m, PREG_OFFSET_CAPTURE ) ) continue; - + $offset = $m[0][1]; - $len = strlen($m[0][0]); - if($offset + $len < $contextchars) - $begin = 0; - elseif( $len > $contextchars) + $len = strlen( $m[0][0] ); + if ( $offset + $len < $contextchars ) + $begin = 0; + elseif ( $len > $contextchars ) $begin = $offset; else - $begin = $offset + intval( ($len - $contextchars) / 2 ); - + $begin = $offset + intval( ( $len - $contextchars ) / 2 ); + $end = $begin + $contextchars; - + $posBegin = $begin; // basic snippet from this line - $out[$index] = $this->extract($line,$begin,$end,$posBegin); + $out[$index] = $this->extract( $line, $begin, $end, $posBegin ); $offsets[$index] = $posBegin; - $linesleft--; - if($linesleft == 0) + $linesleft--; + if ( $linesleft == 0 ) return; } } - - /** + + /** * Basic wikitext removal * @protected */ - function removeWiki($text) { + function removeWiki( $text ) { $fname = __METHOD__; wfProfileIn( $fname ); - - //$text = preg_replace("/'{2,5}/", "", $text); - //$text = preg_replace("/\[[a-z]+:\/\/[^ ]+ ([^]]+)\]/", "\\2", $text); - //$text = preg_replace("/\[\[([^]|]+)\]\]/", "\\1", $text); - //$text = preg_replace("/\[\[([^]]+\|)?([^|]]+)\]\]/", "\\2", $text); - //$text = preg_replace("/\\{\\|(.*?)\\|\\}/", "", $text); - //$text = preg_replace("/\\[\\[[A-Za-z_-]+:([^|]+?)\\]\\]/", "", $text); - $text = preg_replace("/\\{\\{([^|]+?)\\}\\}/", "", $text); - $text = preg_replace("/\\{\\{([^|]+\\|)(.*?)\\}\\}/", "\\2", $text); - $text = preg_replace("/\\[\\[([^|]+?)\\]\\]/", "\\1", $text); - $text = preg_replace_callback("/\\[\\[([^|]+\\|)(.*?)\\]\\]/", array($this,'linkReplace'), $text); - //$text = preg_replace("/\\[\\[([^|]+\\|)(.*?)\\]\\]/", "\\2", $text); - $text = preg_replace("/<\/?[^>]+>/", "", $text); - $text = preg_replace("/'''''/", "", $text); - $text = preg_replace("/('''|<\/?[iIuUbB]>)/", "", $text); - $text = preg_replace("/''/", "", $text); - + + // $text = preg_replace("/'{2,5}/", "", $text); + // $text = preg_replace("/\[[a-z]+:\/\/[^ ]+ ([^]]+)\]/", "\\2", $text); + // $text = preg_replace("/\[\[([^]|]+)\]\]/", "\\1", $text); + // $text = preg_replace("/\[\[([^]]+\|)?([^|]]+)\]\]/", "\\2", $text); + // $text = preg_replace("/\\{\\|(.*?)\\|\\}/", "", $text); + // $text = preg_replace("/\\[\\[[A-Za-z_-]+:([^|]+?)\\]\\]/", "", $text); + $text = preg_replace( "/\\{\\{([^|]+?)\\}\\}/", "", $text ); + $text = preg_replace( "/\\{\\{([^|]+\\|)(.*?)\\}\\}/", "\\2", $text ); + $text = preg_replace( "/\\[\\[([^|]+?)\\]\\]/", "\\1", $text ); + $text = preg_replace_callback( "/\\[\\[([^|]+\\|)(.*?)\\]\\]/", array( $this, 'linkReplace' ), $text ); + // $text = preg_replace("/\\[\\[([^|]+\\|)(.*?)\\]\\]/", "\\2", $text); + $text = preg_replace( "/<\/?[^>]+>/", "", $text ); + $text = preg_replace( "/'''''/", "", $text ); + $text = preg_replace( "/('''|<\/?[iIuUbB]>)/", "", $text ); + $text = preg_replace( "/''/", "", $text ); + wfProfileOut( $fname ); return $text; } - + /** * callback to replace [[target|caption]] kind of links, if * the target is category or image, leave it * * @param $matches Array */ - function linkReplace($matches){ - $colon = strpos( $matches[1], ':' ); - if( $colon === false ) + function linkReplace( $matches ) { + $colon = strpos( $matches[1], ':' ); + if ( $colon === false ) return $matches[2]; // replace with caption global $wgContLang; $ns = substr( $matches[1], 0, $colon ); - $index = $wgContLang->getNsIndex($ns); - if( $index !== false && ($index == NS_FILE || $index == NS_CATEGORY) ) - return $matches[0]; // return the whole thing + $index = $wgContLang->getNsIndex( $ns ); + if ( $index !== false && ( $index == NS_FILE || $index == NS_CATEGORY ) ) + return $matches[0]; // return the whole thing else return $matches[2]; - + } /** @@ -1190,11 +1295,11 @@ class SearchHighlighter { * @return String */ public function highlightSimple( $text, $terms, $contextlines, $contextchars ) { - global $wgLang, $wgContLang; + global $wgContLang; $fname = __METHOD__; $lines = explode( "\n", $text ); - + $terms = implode( '|', $terms ); $max = intval( $contextchars ) + 1; $pat1 = "/(.*)($terms)(.{0,$max})/i"; @@ -1213,7 +1318,7 @@ class SearchHighlighter { continue; } --$contextlines; - $pre = $wgContLang->truncate( $m[1], -$contextchars ); + $pre = $wgContLang->truncate( $m[1], - $contextchars ); if ( count( $m ) < 3 ) { $post = ''; @@ -1231,10 +1336,10 @@ class SearchHighlighter { $extract .= "${line}\n"; } wfProfileOut( "$fname-extract" ); - + return $extract; } - + } /** diff --git a/includes/search/SearchIBM_DB2.php b/includes/search/SearchIBM_DB2.php index d7587186..8cedd6f2 100644 --- a/includes/search/SearchIBM_DB2.php +++ b/includes/search/SearchIBM_DB2.php @@ -1,23 +1,25 @@ -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - /** + * IBM DB2 search engine + * + * Copyright © 2004 Brion Vibber + * http://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * * @file * @ingroup Search */ @@ -27,8 +29,13 @@ * @ingroup Search */ class SearchIBM_DB2 extends SearchEngine { + + /** + * Creates an instance of this class + * @param $db DatabaseIbm_db2: database object + */ function __construct($db) { - $this->db = $db; + parent::__construct( $db ); } /** @@ -102,8 +109,8 @@ class SearchIBM_DB2 extends SearchEngine { /** * Construct the full SQL query to do the search. * The guts shoulds be constructed in queryMain() - * @param string $filteredTerm String - * @param bool $fulltext Boolean + * @param $filteredTerm String + * @param $fulltext Boolean */ function getQuery( $filteredTerm, $fulltext ) { return $this->queryLimit($this->queryMain($filteredTerm, $fulltext) . ' ' . @@ -125,8 +132,8 @@ class SearchIBM_DB2 extends SearchEngine { /** * Get the base part of the search query. * - * @param string $filteredTerm String - * @param bool $fulltext Boolean + * @param $filteredTerm String + * @param $fulltext Boolean * @return String */ function queryMain( $filteredTerm, $fulltext ) { diff --git a/includes/search/SearchMssql.php b/includes/search/SearchMssql.php new file mode 100644 index 00000000..8b850fae --- /dev/null +++ b/includes/search/SearchMssql.php @@ -0,0 +1,254 @@ +db->resultObject( $this->db->query( $this->getQuery( $this->filter( $term ), true ) ) ); + return new MssqlSearchResultSet( $resultSet, $this->searchTerms ); + } + + /** + * Perform a title-only search query and return a result set. + * + * @param $term String: raw search term + * @return MssqlSearchResultSet + * @access public + */ + function searchTitle( $term ) { + $resultSet = $this->db->resultObject( $this->db->query( $this->getQuery( $this->filter( $term ), false ) ) ); + return new MssqlSearchResultSet( $resultSet, $this->searchTerms ); + } + + + /** + * Return a partial WHERE clause to exclude redirects, if so set + * + * @return String + * @private + */ + function queryRedirect() { + if ( $this->showRedirects ) { + return ''; + } else { + return 'AND page_is_redirect=0'; + } + } + + /** + * Return a partial WHERE clause to limit the search to the given namespaces + * + * @return String + * @private + */ + function queryNamespaces() { + $namespaces = implode( ',', $this->namespaces ); + if ( $namespaces == '' ) { + $namespaces = '0'; + } + return 'AND page_namespace IN (' . $namespaces . ')'; + } + + /** + * Return a LIMIT clause to limit results on the query. + * + * @return String + * @private + */ + function queryLimit( $sql ) { + return $this->db->limitResult( $sql, $this->limit, $this->offset ); + } + + /** + * Does not do anything for generic search engine + * subclasses may define this though + * + * @return String + * @private + */ + function queryRanking( $filteredTerm, $fulltext ) { + return ' ORDER BY ftindex.[RANK] DESC'; // return ' ORDER BY score(1)'; + } + + /** + * Construct the full SQL query to do the search. + * The guts shoulds be constructed in queryMain() + * + * @param $filteredTerm String + * @param $fulltext Boolean + * @private + */ + function getQuery( $filteredTerm, $fulltext ) { + return $this->queryLimit( $this->queryMain( $filteredTerm, $fulltext ) . ' ' . + $this->queryRedirect() . ' ' . + $this->queryNamespaces() . ' ' . + $this->queryRanking( $filteredTerm, $fulltext ) . ' ' ); + } + + + /** + * Picks which field to index on, depending on what type of query. + * + * @param $fulltext Boolean + * @return string + */ + function getIndexField( $fulltext ) { + return $fulltext ? 'si_text' : 'si_title'; + } + + /** + * Get the base part of the search query. + * + * @param $filteredTerm String + * @param $fulltext Boolean + * @return String + * @private + */ + function queryMain( $filteredTerm, $fulltext ) { + $match = $this->parseQuery( $filteredTerm, $fulltext ); + $page = $this->db->tableName( 'page' ); + $searchindex = $this->db->tableName( 'searchindex' ); + + return 'SELECT page_id, page_namespace, page_title, ftindex.[RANK]' . + "FROM $page,FREETEXTTABLE($searchindex , $match, LANGUAGE 'English') as ftindex " . + 'WHERE page_id=ftindex.[KEY] '; + } + + /** @todo document */ + function parseQuery( $filteredText, $fulltext ) { + global $wgContLang; + $lc = SearchEngine::legalSearchChars(); + $this->searchTerms = array(); + + # FIXME: This doesn't handle parenthetical expressions. + $m = array(); + $q = array(); + + if ( preg_match_all( '/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/', + $filteredText, $m, PREG_SET_ORDER ) ) { + foreach ( $m as $terms ) { + $q[] = $terms[1] . $wgContLang->normalizeForSearch( $terms[2] ); + + if ( !empty( $terms[3] ) ) { + $regexp = preg_quote( $terms[3], '/' ); + if ( $terms[4] ) + $regexp .= "[0-9A-Za-z_]+"; + } else { + $regexp = preg_quote( str_replace( '"', '', $terms[2] ), '/' ); + } + $this->searchTerms[] = $regexp; + } + } + + $searchon = $this->db->strencode( join( ',', $q ) ); + $field = $this->getIndexField( $fulltext ); + return "$field, '$searchon'"; + } + + /** + * Create or update the search index record for the given page. + * Title and text should be pre-processed. + * + * @param $id Integer + * @param $title String + * @param $text String + */ + function update( $id, $title, $text ) { + // We store the column data as UTF-8 byte order marked binary stream + // because we are invoking the plain text IFilter on it so that, and we want it + // to properly decode the stream as UTF-8. SQL doesn't support UTF8 as a data type + // but the indexer will correctly handle it by this method. Since all we are doing + // is passing this data to the indexer and never retrieving it via PHP, this will save space + $table = $this->db->tableName( 'searchindex' ); + $utf8bom = '0xEFBBBF'; + $si_title = $utf8bom . bin2hex( $title ); + $si_text = $utf8bom . bin2hex( $text ); + $sql = "DELETE FROM $table WHERE si_page = $id;"; + $sql .= "INSERT INTO $table (si_page, si_title, si_text) VALUES ($id, $si_title, $si_text)"; + return $this->db->query( $sql, 'SearchMssql::update' ); + } + + /** + * Update a search index record's title only. + * Title should be pre-processed. + * + * @param $id Integer + * @param $title String + */ + function updateTitle( $id, $title ) { + $table = $this->db->tableName( 'searchindex' ); + + // see update for why we are using the utf8bom + $utf8bom = '0xEFBBBF'; + $si_title = $utf8bom . bin2hex( $title ); + $sql = "DELETE FROM $table WHERE si_page = $id;"; + $sql .= "INSERT INTO $table (si_page, si_title, si_text) VALUES ($id, $si_title, 0x00)"; + return $this->db->query( $sql, 'SearchMssql::updateTitle' ); + } +} + +/** + * @ingroup Search + */ +class MssqlSearchResultSet extends SearchResultSet { + function __construct( $resultSet, $terms ) { + $this->mResultSet = $resultSet; + $this->mTerms = $terms; + } + + function termMatches() { + return $this->mTerms; + } + + function numRows() { + return $this->mResultSet->numRows(); + } + + function next() { + $row = $this->mResultSet->fetchObject(); + if ( $row === false ) + return false; + return new SearchResult( $row ); + } +} + + diff --git a/includes/search/SearchMySQL.php b/includes/search/SearchMySQL.php index 0c238be8..b92682ad 100644 --- a/includes/search/SearchMySQL.php +++ b/includes/search/SearchMySQL.php @@ -1,23 +1,25 @@ -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - /** + * MySQL search engine + * + * Copyright (C) 2004 Brion Vibber + * http://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * * @file * @ingroup Search */ @@ -30,9 +32,12 @@ class SearchMySQL extends SearchEngine { var $strictMatching = true; static $mMinSearchLength; - /** @todo document */ + /** + * Creates an instance of this class + * @param $db DatabaseMysql: database object + */ function __construct( $db ) { - $this->db = $db; + parent::__construct( $db ); } /** @@ -325,8 +330,7 @@ class SearchMySQL extends SearchEngine { wfProfileIn( __METHOD__ ); - // Some languages such as Chinese require word segmentation - $out = $wgContLang->wordSegmentation( $string ); + $out = parent::normalizeText( $string ); // MySQL fulltext index doesn't grok utf-8, so we // need to fold cases and convert to hex @@ -401,7 +405,7 @@ class SearchMySQL extends SearchEngine { * @ingroup Search */ class MySQLSearchResultSet extends SqlSearchResultSet { - function MySQLSearchResultSet( $resultSet, $terms, $totalHits=null ) { + function __construct( $resultSet, $terms, $totalHits=null ) { parent::__construct( $resultSet, $terms ); $this->mTotalHits = $totalHits; } @@ -409,4 +413,4 @@ class MySQLSearchResultSet extends SqlSearchResultSet { function getTotalHits() { return $this->mTotalHits; } -} \ No newline at end of file +} diff --git a/includes/search/SearchMySQL4.php b/includes/search/SearchMySQL4.php deleted file mode 100644 index 3e2bb2d1..00000000 --- a/includes/search/SearchMySQL4.php +++ /dev/null @@ -1,34 +0,0 @@ - -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - -/** - * @file - * @ingroup Search - */ - -/** - * Search engine hook for MySQL 4+ - * This class retained for backwards compatibility... - * The meat's been moved to SearchMySQL, since the 3.x variety is gone. - * @ingroup Search - * @deprecated - */ -class SearchMySQL4 extends SearchMySQL { - /* whee */ -} diff --git a/includes/search/SearchOracle.php b/includes/search/SearchOracle.php index e4c5deee..15c386ce 100644 --- a/includes/search/SearchOracle.php +++ b/includes/search/SearchOracle.php @@ -1,23 +1,25 @@ -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - /** + * Oracle search engine + * + * Copyright © 2004 Brion Vibber + * http://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * * @file * @ingroup Search */ @@ -54,9 +56,13 @@ class SearchOracle extends SearchEngine { 'TRSYN' => 1, 'TT' => 1, 'WITHIN' => 1); - + + /** + * Creates an instance of this class + * @param $db DatabasePostgres: database object + */ function __construct($db) { - $this->db = $db; + parent::__construct( $db ); } /** @@ -240,16 +246,24 @@ class SearchOracle extends SearchEngine { 'si_title' => $title, 'si_text' => $text ), 'SearchOracle::update' ); - $dbw->query("CALL ctx_ddl.sync_index('si_text_idx')"); - $dbw->query("CALL ctx_ddl.sync_index('si_title_idx')"); + + // Sync the index + // We need to specify the DB name (i.e. user/schema) here so that + // it can work from the installer, where + // ALTER SESSION SET CURRENT_SCHEMA = ... + // was used. + $dbw->query( "CALL ctx_ddl.sync_index(" . + $dbw->addQuotes( $dbw->getDBname() . '.' . trim( $dbw->tableName( 'si_text_idx' ), '"' ) ) . ")" ); + $dbw->query( "CALL ctx_ddl.sync_index(" . + $dbw->addQuotes( $dbw->getDBname() . '.' . trim( $dbw->tableName( 'si_title_idx' ), '"' ) ) . ")" ); } /** * Update a search index record's title only. * Title should be pre-processed. * - * @param int $id - * @param string $title + * @param $id Integer + * @param $title String */ function updateTitle($id, $title) { $dbw = wfGetDB(DB_MASTER); diff --git a/includes/search/SearchPostgres.php b/includes/search/SearchPostgres.php index 0006fa82..9d6d1539 100644 --- a/includes/search/SearchPostgres.php +++ b/includes/search/SearchPostgres.php @@ -1,23 +1,25 @@ -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - /** + * PostgreSQL search engine + * + * Copyright © 2006-2007 Greg Sabino Mullane + * http://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * * @file * @ingroup Search */ @@ -27,9 +29,12 @@ * @ingroup Search */ class SearchPostgres extends SearchEngine { - + /** + * Creates an instance of this class + * @param $db DatabaseSqlite: database object + */ function __construct( $db ) { - $this->db = $db; + parent::__construct( $db ); } /** @@ -129,24 +134,21 @@ class SearchPostgres extends SearchEngine { /** * Construct the full SQL query to do the search. - * @param $filteredTerm String + * @param $term String * @param $fulltext String + * @param $colname */ function searchQuery( $term, $fulltext, $colname ) { - global $wgDBversion; + $postgresVersion = $this->db->getServerVersion(); - if ( !isset( $wgDBversion ) ) { - $this->db->getServerVersion(); - $wgDBversion = $this->db->numeric_version; - } - $prefix = $wgDBversion < 8.3 ? "'default'," : ''; + $prefix = $postgresVersion < 8.3 ? "'default'," : ''; # Get the SQL fragment for the given term $searchstring = $this->parseQuery( $term ); ## We need a separate query here so gin does not complain about empty searches $SQL = "SELECT to_tsquery($prefix $searchstring)"; - $res = $this->db->doQuery($SQL); + $res = $this->db->query($SQL); if (!$res) { ## TODO: Better output (example to catch: one 'two) die ("Sorry, that was not a valid search string. Please go back and try again"); @@ -166,8 +168,8 @@ class SearchPostgres extends SearchEngine { } } - $rankscore = $wgDBversion > 8.2 ? 5 : 1; - $rank = $wgDBversion < 8.3 ? 'rank' : 'ts_rank'; + $rankscore = $postgresVersion > 8.2 ? 5 : 1; + $rank = $postgresVersion < 8.3 ? 'rank' : 'ts_rank'; $query = "SELECT page_id, page_namespace, page_title, ". "$rank($fulltext, to_tsquery($prefix $searchstring), $rankscore) AS score ". "FROM page p, revision r, pagecontent c WHERE p.page_latest = r.rev_id " . @@ -204,7 +206,7 @@ class SearchPostgres extends SearchEngine { $SQL = "UPDATE pagecontent SET textvector = NULL WHERE old_id IN ". "(SELECT rev_text_id FROM revision WHERE rev_page = " . intval( $pageid ) . " ORDER BY rev_text_id DESC OFFSET 1)"; - $this->db->doQuery($SQL); + $this->db->query($SQL); return true; } diff --git a/includes/search/SearchSqlite.php b/includes/search/SearchSqlite.php index fb55efec..6accc31b 100644 --- a/includes/search/SearchSqlite.php +++ b/includes/search/SearchSqlite.php @@ -1,22 +1,22 @@ db = $db; + parent::__construct( $db ); } /** @@ -42,18 +39,11 @@ class SearchSqlite extends SearchEngine { * @return Boolean */ function fulltextSearchSupported() { - if ( self::$fulltextSupported === null ) { - self::$fulltextSupported = $this->db->selectField( - 'updatelog', - 'ul_key', - array( 'ul_key' => 'fts3' ), - __METHOD__ ) !== false; - } - return self::$fulltextSupported; + return $this->db->checkForEnabledSearch(); } - /** - * Parse the user's query and transform it into an SQL fragment which will + /** + * Parse the user's query and transform it into an SQL fragment which will * become part of a WHERE clause */ function parseQuery( $filteredText, $fulltext ) { @@ -67,7 +57,7 @@ class SearchSqlite extends SearchEngine { $filteredText, $m, PREG_SET_ORDER ) ) { foreach( $m as $bits ) { @list( /* all */, $modifier, $term, $nonQuoted, $wildcard ) = $bits; - + if( $nonQuoted != '' ) { $term = $nonQuoted; $quote = ''; @@ -86,7 +76,7 @@ class SearchSqlite extends SearchEngine { } else { $variants = array( $term ); } - + // The low-level search index does some processing on input to work // around problems with minimum lengths and encoding in MySQL's // fulltext engine. @@ -94,12 +84,12 @@ class SearchSqlite extends SearchEngine { $strippedVariants = array_map( array( $wgContLang, 'normalizeForSearch' ), $variants ); - + // Some languages such as Chinese force all variants to a canonical // form when stripping to the low-level search index, so to be sure // let's check our variants list for unique items after stripping. $strippedVariants = array_unique( $strippedVariants ); - + $searchon .= $modifier; if( count( $strippedVariants) > 1 ) $searchon .= '('; @@ -114,7 +104,7 @@ class SearchSqlite extends SearchEngine { } if( count( $strippedVariants) > 1 ) $searchon .= ')'; - + // Match individual terms or quoted phrase in result highlighting... // Note that variants will be introduced in a later stage for highlighting! $regexp = $this->regexTerm( $term, $wildcard ); @@ -129,10 +119,10 @@ class SearchSqlite extends SearchEngine { $field = $this->getIndexField( $fulltext ); return " $field MATCH '$searchon' "; } - + function regexTerm( $string, $wildcard ) { global $wgContLang; - + $regex = preg_quote( $string, '/' ); if( $wgContLang->hasWordBreaks() ) { if( $wildcard ) { @@ -172,7 +162,7 @@ class SearchSqlite extends SearchEngine { function searchTitle( $term ) { return $this->searchInternal( $term, false ); } - + protected function searchInternal( $term, $fulltext ) { global $wgCountTotalSearchHits, $wgContLang; @@ -182,7 +172,7 @@ class SearchSqlite extends SearchEngine { $filteredTerm = $this->filter( $wgContLang->lc( $term ) ); $resultSet = $this->db->query( $this->getQuery( $filteredTerm, $fulltext ) ); - + $total = null; if( $wgCountTotalSearchHits ) { $totalResult = $this->db->query( $this->getCountQuery( $filteredTerm, $fulltext ) ); @@ -192,7 +182,7 @@ class SearchSqlite extends SearchEngine { } $totalResult->free(); } - + return new SqliteSearchResultSet( $resultSet, $this->searchTerms, $total ); } @@ -226,7 +216,7 @@ class SearchSqlite extends SearchEngine { /** * Returns a query with limit for number of results set. - * @param $sql String: + * @param $sql String: * @return String */ function limitResult( $sql ) { @@ -246,7 +236,7 @@ class SearchSqlite extends SearchEngine { $this->queryNamespaces() ); } - + /** * Picks which field to index on, depending on what type of query. * @param $fulltext Boolean @@ -300,7 +290,7 @@ class SearchSqlite extends SearchEngine { $dbw = wfGetDB( DB_MASTER ); $dbw->delete( 'searchindex', array( 'rowid' => $id ), __METHOD__ ); - + $dbw->insert( 'searchindex', array( 'rowid' => $id, @@ -333,7 +323,7 @@ class SearchSqlite extends SearchEngine { * @ingroup Search */ class SqliteSearchResultSet extends SqlSearchResultSet { - function SqliteSearchResultSet( $resultSet, $terms, $totalHits=null ) { + function __construct( $resultSet, $terms, $totalHits=null ) { parent::__construct( $resultSet, $terms ); $this->mTotalHits = $totalHits; } @@ -341,4 +331,4 @@ class SqliteSearchResultSet extends SqlSearchResultSet { function getTotalHits() { return $this->mTotalHits; } -} \ No newline at end of file +} diff --git a/includes/search/SearchUpdate.php b/includes/search/SearchUpdate.php index e30c70e6..5262faa4 100644 --- a/includes/search/SearchUpdate.php +++ b/includes/search/SearchUpdate.php @@ -1,6 +1,16 @@ mId = $id; @@ -29,23 +39,23 @@ class SearchUpdate { if( $wgDisableSearchUpdate || !$this->mId ) { return false; } - $fname = 'SearchUpdate::doUpdate'; - wfProfileIn( $fname ); + + wfProfileIn( __METHOD__ ); $search = SearchEngine::create(); $lc = SearchEngine::legalSearchChars() . '&#;'; if( $this->mText === false ) { $search->updateTitle($this->mId, - Title::indexTitle( $this->mNamespace, $this->mTitle )); - wfProfileOut( $fname ); + $search->normalizeText( Title::indexTitle( $this->mNamespace, $this->mTitle ) ) ); + wfProfileOut( __METHOD__ ); return; } # Language-specific strip/conversion $text = $wgContLang->normalizeForSearch( $this->mText ); - wfProfileIn( $fname.'-regexps' ); + wfProfileIn( __METHOD__ . '-regexps' ); $text = preg_replace( "/<\\/?\\s*[A-Za-z][^>]*?>/", ' ', $wgContLang->lc( " " . $text . " " ) ); # Strip HTML markup $text = preg_replace( "/(^|\\n)==\\s*([^\\n]+)\\s*==(\\s)/sD", @@ -92,20 +102,21 @@ class SearchUpdate { # Strip wiki '' and ''' $text = preg_replace( "/''[']*/", " ", $text ); - wfProfileOut( "$fname-regexps" ); + wfProfileOut( __METHOD__ . '-regexps' ); wfRunHooks( 'SearchUpdate', array( $this->mId, $this->mNamespace, $this->mTitle, &$text ) ); # Perform the actual update - $search->update($this->mId, Title::indexTitle( $this->mNamespace, $this->mTitle ), - $text); + $search->update($this->mId, $search->normalizeText( Title::indexTitle( $this->mNamespace, $this->mTitle ) ), + $search->normalizeText( $text ) ); - wfProfileOut( $fname ); + wfProfileOut( __METHOD__ ); } } /** * Placeholder class + * * @ingroup Search */ class SearchUpdateMyISAM extends SearchUpdate { diff --git a/includes/specials/SpecialActiveusers.php b/includes/specials/SpecialActiveusers.php index 7d907fb5..f016ab92 100644 --- a/includes/specials/SpecialActiveusers.php +++ b/includes/specials/SpecialActiveusers.php @@ -1,37 +1,40 @@ RCMaxAge = ceil( $wgRCMaxAge / ( 3600 * 24 ) ); // Constant - + global $wgRequest, $wgActiveUserDays; + $this->RCMaxAge = $wgActiveUserDays; $un = $wgRequest->getText( 'username' ); $this->requestedUser = ''; if ( $un != '' ) { @@ -40,15 +43,15 @@ class ActiveUsersPager extends UsersPager { $this->requestedUser = $username->getText(); } } - + $this->setupOptions(); - + parent::__construct(); } public function setupOptions() { global $wgRequest; - + $this->opts = new FormOptions(); $this->opts->add( 'hidebots', false, FormOptions::BOOL ); @@ -57,10 +60,12 @@ class ActiveUsersPager extends UsersPager { $this->opts->fetchValuesFromRequest( $wgRequest ); $this->groups = array(); - if ($this->opts->getValue('hidebots') == 1) + if ( $this->opts->getValue( 'hidebots' ) == 1 ) { $this->groups['bot'] = true; - if ($this->opts->getValue('hidesysops') == 1) + } + if ( $this->opts->getValue( 'hidesysops' ) == 1 ) { $this->groups['sysop'] = true; + } } function getIndexField() { @@ -72,7 +77,8 @@ class ActiveUsersPager extends UsersPager { $conds = array( 'rc_user > 0' ); // Users - no anons $conds[] = 'ipb_deleted IS NULL'; // don't show hidden names $conds[] = "rc_log_type IS NULL OR rc_log_type != 'newusers'"; - + $conds[] = "rc_timestamp >= '{$dbr->timestamp( wfTimestamp( TS_UNIX ) - $this->RCMaxAge*24*3600 )}'"; + if( $this->requestedUser != '' ) { $conds[] = 'rc_user_text >= ' . $dbr->addQuotes( $this->requestedUser ); } @@ -101,14 +107,15 @@ class ActiveUsersPager extends UsersPager { function formatRow( $row ) { global $wgLang; $userName = $row->user_name; - + $ulinks = $this->getSkin()->userLink( $row->user_id, $userName ); $ulinks .= $this->getSkin()->userToolLinks( $row->user_id, $userName ); $list = array(); foreach( self::getGroups( $row->user_id ) as $group ) { - if (isset($this->groups[$group])) + if ( isset( $this->groups[$group] ) ) { return; + } $list[] = self::buildGroupLink( $group ); } $groups = $wgLang->commaList( $list ); @@ -126,14 +133,14 @@ class ActiveUsersPager extends UsersPager { } function getPageHeader() { - global $wgScript, $wgRequest; + global $wgScript; $self = $this->getTitle(); - $limit = $this->mLimit ? Xml::hidden( 'limit', $this->mLimit ) : ''; + $limit = $this->mLimit ? Html::hidden( 'limit', $this->mLimit ) : ''; - $out = Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) ); # Form tag + $out = Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) ); # Form tag $out .= Xml::fieldset( wfMsg( 'activeusers' ) ) . "\n"; - $out .= Xml::hidden( 'title', $self->getPrefixedDBkey() ) . $limit . "\n"; + $out .= Html::hidden( 'title', $self->getPrefixedDBkey() ) . $limit . "\n"; $out .= Xml::inputLabel( wfMsg( 'activeusers-from' ), 'username', 'offset', 20, $this->requestedUser ) . '
    ';# Username field @@ -141,10 +148,10 @@ class ActiveUsersPager extends UsersPager { $out .= Xml::checkLabel( wfMsg('activeusers-hidesysops'), 'hidesysops', 'hidesysops', $this->opts->getValue( 'hidesysops' ) ) . '
    '; - $out .= Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . "\n";# Submit button and form bottom + $out .= Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . "\n";# Submit button and form bottom $out .= Xml::closeElement( 'fieldset' ); $out .= Xml::closeElement( 'form' ); - + return $out; } } @@ -157,7 +164,7 @@ class SpecialActiveUsers extends SpecialPage { /** * Constructor */ - public function __construct() { + public function __construct() { parent::__construct( 'Activeusers' ); } @@ -167,18 +174,19 @@ class SpecialActiveUsers extends SpecialPage { * @param $par Mixed: parameter passed to the page or null */ public function execute( $par ) { - global $wgOut, $wgLang, $wgRCMaxAge; + global $wgOut, $wgLang, $wgActiveUserDays; $this->setHeaders(); + $this->outputHeader(); $up = new ActiveUsersPager(); # getBody() first to check, if empty $usersbody = $up->getBody(); - $s = Html::rawElement( 'div', array( 'class' => 'mw-activeusers-intro' ), - wfMsgExt( 'activeusers-intro', array( 'parsemag', 'escape' ), $wgLang->formatNum( ceil( $wgRCMaxAge / 86400 ) ) ) - ); + $s = Html::rawElement( 'div', array( 'class' => 'mw-activeusers-intro' ), + wfMsgExt( 'activeusers-intro', array( 'parsemag', 'escape' ), $wgLang->formatNum( $wgActiveUserDays ) ) + ); $s .= $up->getPageHeader(); if( $usersbody ) { diff --git a/includes/specials/SpecialAllmessages.php b/includes/specials/SpecialAllmessages.php index 1745bf6c..296c6f50 100644 --- a/includes/specials/SpecialAllmessages.php +++ b/includes/specials/SpecialAllmessages.php @@ -1,6 +1,29 @@ 'get', 'action' => $wgScript, 'id' => 'mw-allmessages-form' ) ) . Xml::fieldset( wfMsg( 'allmessages-filter-legend' ) ) . - Xml::hidden( 'title', $this->getTitle() ) . + Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) . Xml::openElement( 'table', array( 'class' => 'mw-allmessages-table' ) ) . "\n" . ' ' . @@ -77,19 +100,19 @@ class SpecialAllmessages extends SpecialPage { 'filter', 'unmodified', 'mw-allmessages-form-filter-unmodified', - ( $this->filter == 'unmodified' ? true : false ) + ( $this->filter == 'unmodified' ) ) . Xml::radioLabel( wfMsg( 'allmessages-filter-all' ), 'filter', 'all', 'mw-allmessages-form-filter-all', - ( $this->filter == 'all' ? true : false ) + ( $this->filter == 'all' ) ) . Xml::radioLabel( wfMsg( 'allmessages-filter-modified' ), 'filter', 'modified', 'mw-allmessages-form-filter-modified', - ( $this->filter == 'modified' ? true : false ) + ( $this->filter == 'modified' ) ) . "\n @@ -101,7 +124,7 @@ class SpecialAllmessages extends SpecialPage { Xml::openElement( 'select', array( 'id' => 'mw-allmessages-form-lang', 'name' => 'lang' ) ); foreach( $languages as $lang => $name ) { - $selected = $lang == $this->langCode ? true : false; + $selected = $lang == $this->langCode; $out .= Xml::option( $lang . ' - ' . $name, $lang, $selected ) . "\n"; } $out .= Xml::closeElement( 'select' ) . @@ -134,10 +157,7 @@ class AllmessagesTablePager extends TablePager { $this->mPage = $page; $this->mConds = $conds; $this->mDefaultDirection = true; // always sort ascending - // We want to have an option for people to view *all* the messages, - // so they can use Ctrl+F to search them. 5000 is the maximum that - // will get through WebRequest::getLimitOffset(). - $this->mLimitsShown = array( 20, 50, 100, 250, 500, 5000 => wfMsg('limitall') ); + $this->mLimitsShown = array( 20, 50, 100, 250, 500, 5000 ); global $wgLang, $wgContLang, $wgRequest; @@ -182,8 +202,8 @@ class AllmessagesTablePager extends TablePager { // Normalise message names so they look like page titles $messageNames = array_map( array( $this->lang, 'ucfirst' ), $messageNames ); - wfProfileIn( __METHOD__ ); + wfProfileOut( __METHOD__ ); return $messageNames; } @@ -207,7 +227,7 @@ class AllmessagesTablePager extends TablePager { $pageFlags = $talkFlags = array(); - while( $s = $dbr->fetchObject( $res ) ) { + foreach ( $res as $s ) { if( $s->page_namespace == NS_MEDIAWIKI ) { if( $this->foreign ) { $title = explode( '/', $s->page_title ); @@ -223,7 +243,6 @@ class AllmessagesTablePager extends TablePager { $talkFlags[$s->page_title] = true; } } - $dbr->freeResult( $res ); wfProfileOut( __METHOD__ . '-db' ); @@ -327,7 +346,7 @@ class AllmessagesTablePager extends TablePager { $s .= Xml::openElement( 'tr', $this->getRowAttrs( $row, true ) ); $formatted = strval( $this->formatValue( 'am_actual', $row->am_actual ) ); if ( $formatted == '' ) { - $formatted = ' '; + $formatted = ' '; } $s .= Xml::tags( 'td', $this->getCellAttrs( 'am_actual', $row->am_actual ), $formatted ) . "\n"; @@ -375,43 +394,4 @@ class AllmessagesTablePager extends TablePager { return ''; } } -/* Overloads the relevant methods of the real ResultsWrapper so it - * doesn't go anywhere near an actual database. - */ -class FakeResultWrapper extends ResultWrapper { - - var $result = array(); - var $db = null; // And it's going to stay that way :D - var $pos = 0; - var $currentRow = null; - function __construct( $array ){ - $this->result = $array; - } - - function numRows() { - return count( $this->result ); - } - - function fetchRow() { - $this->currentRow = $this->result[$this->pos++]; - return $this->currentRow; - } - - function seek( $row ) { - $this->pos = $row; - } - - function free() {} - - // Callers want to be able to access fields with $this->fieldName - function fetchObject(){ - $this->currentRow = $this->result[$this->pos++]; - return (object)$this->currentRow; - } - - function rewind() { - $this->pos = 0; - $this->currentRow = null; - } -} diff --git a/includes/specials/SpecialAllpages.php b/includes/specials/SpecialAllpages.php index 19816dcd..5fa1aa47 100644 --- a/includes/specials/SpecialAllpages.php +++ b/includes/specials/SpecialAllpages.php @@ -1,7 +1,29 @@ 'namespaceoptions' ) ); $out .= Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) ); - $out .= Xml::hidden( 'title', $t->getPrefixedText() ); + $out .= Html::hidden( 'title', $t->getPrefixedText() ); $out .= Xml::openElement( 'fieldset' ); $out .= Xml::element( 'legend', null, wfMsg( 'allpages' ) ); $out .= Xml::openElement( 'table', array( 'id' => 'nsselect', 'class' => 'allpages' ) ); @@ -113,7 +136,9 @@ class SpecialAllpages extends IncludableSpecialPage { } /** - * @param integer $namespace (default NS_MAIN) + * @param $namespace Integer (default NS_MAIN) + * @param $from String: list all pages from this name + * @param $to String: list all pages to this name */ function showToplevel( $namespace = NS_MAIN, $from = '', $to = '' ) { global $wgOut; @@ -164,7 +189,8 @@ class SpecialAllpages extends IncludableSpecialPage { array ('LIMIT' => 2, 'OFFSET' => $maxPerSubpage - 1, 'ORDER BY' => 'page_title ASC') ); - if( $s = $dbr->fetchObject( $res ) ) { + $s = $dbr->fetchObject( $res ); + if( $s ) { array_push( $lines, $s->page_title ); } else { // Final chunk, but ended prematurely. Go back and find the end. @@ -174,7 +200,8 @@ class SpecialAllpages extends IncludableSpecialPage { array_push( $lines, $endTitle ); $done = true; } - if( $s = $res->fetchObject() ) { + $s = $res->fetchObject(); + if( $s ) { array_push( $lines, $s->page_title ); $lastTitle = $s->page_title; } else { @@ -234,9 +261,10 @@ class SpecialAllpages extends IncludableSpecialPage { /** * Show a line of "ABC to DEF" ranges of articles - * @param string $inpoint Lower limit of pagenames - * @param string $outpout Upper limit of pagenames - * @param integer $namespace (Default NS_MAIN) + * + * @param $inpoint String: lower limit of pagenames + * @param $outpoint String: upper limit of pagenames + * @param $namespace Integer (Default NS_MAIN) */ function showline( $inpoint, $outpoint, $namespace = NS_MAIN ) { global $wgContLang; @@ -258,9 +286,9 @@ class SpecialAllpages extends IncludableSpecialPage { } /** - * @param integer $namespace (Default NS_MAIN) - * @param string $from list all pages from this name (default FALSE) - * @param string $to list all pages to this name (default FALSE) + * @param $namespace Integer (Default NS_MAIN) + * @param $from String: list all pages from this name (default FALSE) + * @param $to String: list all pages to this name (default FALSE) */ function showChunk( $namespace = NS_MAIN, $from = false, $to = false ) { global $wgOut, $wgUser, $wgContLang, $wgLang; @@ -280,7 +308,7 @@ class SpecialAllpages extends IncludableSpecialPage { $namespace = NS_MAIN; } else { list( $namespace, $fromKey, $from ) = $fromList; - list( $namespace2, $toKey, $to ) = $toList; + list( , $toKey, $to ) = $toList; $dbr = wfGetDB( DB_SLAVE ); $conds = array( @@ -316,7 +344,7 @@ class SpecialAllpages extends IncludableSpecialPage { if( $n % 3 == 0 ) { $out .= ''; } - $out .= "$link"; + $out .= "$link"; $n++; if( $n % 3 == 0 ) { $out .= "\n"; @@ -437,8 +465,8 @@ class SpecialAllpages extends IncludableSpecialPage { } /** - * @param int $ns the namespace of the article - * @param string $text the name of the article + * @param $ns Integer: the namespace of the article + * @param $text String: the name of the article * @return array( int namespace, string dbkey, string pagename ) or NULL on error * @static (sort of) * @access private diff --git a/includes/specials/SpecialAncientpages.php b/includes/specials/SpecialAncientpages.php index 92192435..2d5047d2 100644 --- a/includes/specials/SpecialAncientpages.php +++ b/includes/specials/SpecialAncientpages.php @@ -1,11 +1,29 @@ tableName( 'page' ); $revision = $db->tableName( 'revision' ); - - switch ($wgDBtype) { - case 'mysql': - $epoch = 'UNIX_TIMESTAMP(rev_timestamp)'; - break; - case 'ibm_db2': - // TODO implement proper conversion to a Unix epoch - $epoch = 'rev_timestamp'; - break; - case 'oracle': - $epoch = '((trunc(rev_timestamp) - to_date(\'19700101\',\'YYYYMMDD\')) * 86400)'; - break; - case 'sqlite': - $epoch = 'rev_timestamp'; - break; - default: - $epoch = 'EXTRACT(epoch FROM rev_timestamp)'; - } + $epoch = $db->unixTimestamp( 'rev_timestamp' ); return "SELECT 'Ancientpages' as type, diff --git a/includes/specials/SpecialBlankpage.php b/includes/specials/SpecialBlankpage.php index e1fadd02..aaa45a80 100644 --- a/includes/specials/SpecialBlankpage.php +++ b/includes/specials/SpecialBlankpage.php @@ -1,4 +1,26 @@ readOnlyPage(); - return; - } - # Permission check - if( !$wgUser->isAllowed( 'block' ) ) { - $wgOut->permissionRequired( 'block' ); - return; + public function __construct() { + parent::__construct( 'Blockip', 'block' ); } - $ipb = new IPBlockForm( $par ); + public function execute( $par ) { + global $wgUser, $wgOut, $wgRequest; - $action = $wgRequest->getVal( 'action' ); - if( 'success' == $action ) { - $ipb->showSuccess(); - } elseif( $wgRequest->wasPosted() && 'submit' == $action && - $wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ) ) { - $ipb->doSubmit(); - } else { - $ipb->showForm( '' ); - } -} + # Can't block when the database is locked + if( wfReadOnly() ) { + $wgOut->readOnlyPage(); + return; + } + # Permission check + if( !$this->userCanExecute( $wgUser ) ) { + $wgOut->permissionRequired( 'block' ); + return; + } -/** - * Form object for the Special:Blockip page. - * - * @ingroup SpecialPage - */ -class IPBlockForm { - var $BlockAddress, $BlockExpiry, $BlockReason; - // The maximum number of edits a user can have and still be hidden - const HIDEUSER_CONTRIBLIMIT = 1000; + $this->setup( $par ); + + # bug 15810: blocked admins should have limited access here + if ( $wgUser->isBlocked() ) { + $status = IPBlockForm::checkUnblockSelf( $this->BlockAddress ); + if ( $status !== true ) { + throw new ErrorPageError( 'badaccess', $status ); + } + } - public function __construct( $par ) { + $action = $wgRequest->getVal( 'action' ); + if( 'success' == $action ) { + $this->showSuccess(); + } elseif( $wgRequest->wasPosted() && 'submit' == $action && + $wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ) ) { + $this->doSubmit(); + } else { + $this->showForm( '' ); + } + } + + private function setup( $par ) { global $wgRequest, $wgUser, $wgBlockAllowsUTEdit; $this->BlockAddress = $wgRequest->getVal( 'wpBlockAddress', $wgRequest->getVal( 'ip', $par ) ); @@ -105,7 +131,7 @@ class IPBlockForm { $msg = wfMsgReal( $key, $err ); $wgOut->setSubtitle( wfMsgHtml( 'formerror' ) ); $wgOut->addHTML( Xml::tags( 'p', array( 'class' => 'error' ), $msg ) ); - } elseif( $this->BlockAddress ) { + } elseif( $this->BlockAddress !== null ) { # Get other blocks, i.e. from GlobalBlocking or TorBlock extension wfRunHooks( 'OtherBlockLogLink', array( &$otherBlockedMsgs, $this->BlockAddress ) ); @@ -149,7 +175,7 @@ class IPBlockForm { # Username/IP is blocked already locally if( $alreadyBlocked ) { - $wgOut->addWikiMsg( 'ipb-needreblock', $this->BlockAddress ); + $wgOut->wrapWikiMsg( "
    \n$1\n
    ", array( 'ipb-needreblock', $this->BlockAddress ) ); } $scBlockExpiryOptions = wfMsgForContent( 'ipboptions' ); @@ -163,16 +189,15 @@ class IPBlockForm { list( $show, $value ) = explode( ':', $option ); $show = htmlspecialchars( $show ); $value = htmlspecialchars( $value ); - $blockExpiryFormOptions .= Xml::option( $show, $value, $this->BlockExpiry === $value ? true : false ) . "\n"; + $blockExpiryFormOptions .= Xml::option( $show, $value, $this->BlockExpiry === $value ) . "\n"; } $reasonDropDown = Xml::listDropDown( 'wpBlockReasonList', wfMsgForContent( 'ipbreason-dropdown' ), wfMsgForContent( 'ipbreasonotherlist' ), $this->BlockReasonList, 'wpBlockDropDown', 4 ); - global $wgStylePath, $wgStyleVersion; + $wgOut->addModules( 'mediawiki.legacy.block' ); $wgOut->addHTML( - Xml::tags( 'script', array( 'type' => 'text/javascript', 'src' => "$wgStylePath/common/block.js?$wgStyleVersion" ), '' ) . Xml::openElement( 'form', array( 'method' => 'post', 'action' => $titleObj->getLocalURL( 'action=submit' ), 'id' => 'blockip' ) ) . Xml::openElement( 'fieldset' ) . Xml::element( 'legend', null, wfMsg( 'blockip-legend' ) ) . @@ -242,7 +267,7 @@ class IPBlockForm { -   +   " . Xml::checkLabel( wfMsg( 'ipbanononly' ), 'wpAnonOnly', 'wpAnonOnly', $this->BlockAnonOnly, @@ -250,7 +275,7 @@ class IPBlockForm { -   +   " . Xml::checkLabel( wfMsg( 'ipbcreateaccount' ), 'wpCreateAccount', 'wpCreateAccount', $this->BlockCreateAccount, @@ -258,7 +283,7 @@ class IPBlockForm { -   +   " . Xml::checkLabel( wfMsg( 'ipbenableautoblock' ), 'wpEnableAutoblock', 'wpEnableAutoblock', $this->BlockEnableAutoblock, @@ -270,7 +295,7 @@ class IPBlockForm { if( self::canBlockEmail( $wgUser ) ) { $wgOut->addHTML(" -   +   " . Xml::checkLabel( wfMsg( 'ipbemailban' ), 'wpEmailBan', 'wpEmailBan', $this->BlockEmail, @@ -284,7 +309,7 @@ class IPBlockForm { if( $wgUser->isAllowed( 'hideuser' ) ) { $wgOut->addHTML(" -   +   " . Xml::checkLabel( wfMsg( 'ipbhidename' ), 'wpHideName', 'wpHideName', $this->BlockHideName, @@ -299,7 +324,7 @@ class IPBlockForm { if( $wgUser->isLoggedIn() ) { $wgOut->addHTML(" -   +   " . Xml::checkLabel( wfMsg( 'ipbwatchuser' ), 'wpWatchUser', 'wpWatchUser', $this->BlockWatchUser, @@ -314,7 +339,7 @@ class IPBlockForm { if( $wgBlockAllowsUTEdit ){ $wgOut->addHTML(" -   +   " . Xml::checkLabel( wfMsg( 'ipballowusertalk' ), 'wpAllowUsertalk', 'wpAllowUsertalk', $this->BlockAllowUsertalk, @@ -326,18 +351,18 @@ class IPBlockForm { $wgOut->addHTML(" -   +   " . Xml::submitButton( wfMsg( $alreadyBlocked ? 'ipb-change-block' : 'ipbsubmit' ), - array( 'name' => 'wpBlock', 'tabindex' => '13', 'accesskey' => 's' ) ) . " + array( 'name' => 'wpBlock', 'tabindex' => '13' ) + + $wgUser->getSkin()->tooltipAndAccessKeyAttribs( 'blockip-block' ) ). " " . Xml::closeElement( 'table' ) . - Xml::hidden( 'wpEditToken', $wgUser->editToken() ) . - ( $alreadyBlocked ? Xml::hidden( 'wpChangeBlock', 1 ) : "" ) . + Html::hidden( 'wpEditToken', $wgUser->editToken() ) . + ( $alreadyBlocked ? Html::hidden( 'wpChangeBlock', 1 ) : "" ) . Xml::closeElement( 'fieldset' ) . - Xml::closeElement( 'form' ) . - Xml::tags( 'script', array( 'type' => 'text/javascript' ), 'updateBlockOptions()' ) . "\n" + Xml::closeElement( 'form' ) ); $wgOut->addHTML( $this->getConvenienceLinks() ); @@ -353,13 +378,39 @@ class IPBlockForm { /** * Can we do an email block? - * @param User $user The sysop wanting to make a block - * @return boolean + * @param $user User: the sysop wanting to make a block + * @return Boolean */ public static function canBlockEmail( $user ) { global $wgEnableUserEmail, $wgSysopEmailBans; return ( $wgEnableUserEmail && $wgSysopEmailBans && $user->isAllowed( 'blockemail' ) ); } + + /** + * bug 15810: blocked admins should not be able to block/unblock + * others, and probably shouldn't be able to unblock themselves + * either. + * @param $user User, Int or String + */ + public static function checkUnblockSelf( $user ) { + global $wgUser; + if ( is_int( $user ) ) { + $user = User::newFromId( $user ); + } elseif ( is_string( $user ) ) { + $user = User::newFromName( $user ); + } + if( $user instanceof User && $user->getId() == $wgUser->getId() ) { + # User is trying to unblock themselves + if ( $wgUser->isAllowed( 'unblockself' ) ) { + return true; + } else { + return 'ipbnounblockself'; + } + } else { + # User is trying to block/unblock someone else + return 'ipbblocked'; + } + } /** * Backend block code. @@ -382,7 +433,7 @@ class IPBlockForm { $matches = array(); if( preg_match( "/^($rxIP4)\\/(\\d{1,2})$/", $this->BlockAddress, $matches ) ) { # IPv4 - if( $wgSysopRangeBans ) { + if( $wgSysopRangeBans && $wgBlockCIDRLimit['IPv4'] != 32 ) { if( !IP::isIPv4( $this->BlockAddress ) || $matches[2] > 32 ) { return array( 'ip_range_invalid' ); } elseif ( $matches[2] < $wgBlockCIDRLimit['IPv4'] ) { @@ -395,7 +446,7 @@ class IPBlockForm { } } elseif( preg_match( "/^($rxIP6)\\/(\\d{1,3})$/", $this->BlockAddress, $matches ) ) { # IPv6 - if( $wgSysopRangeBans ) { + if( $wgSysopRangeBans && $wgBlockCIDRLimit['IPv6'] != 128 ) { if( !IP::isIPv6( $this->BlockAddress ) || $matches[2] > 128 ) { return array( 'ip_range_invalid' ); } elseif( $matches[2] < $wgBlockCIDRLimit['IPv6'] ) { @@ -410,7 +461,7 @@ class IPBlockForm { # Username block if( $wgSysopUserBans ) { $user = User::newFromName( $this->BlockAddress ); - if( !is_null( $user ) && $user->getId() ) { + if( $user instanceof User && $user->getId() ) { # Use canonical name $userId = $user->getId(); $this->BlockAddress = $user->getName(); @@ -642,7 +693,7 @@ class IPBlockForm { ); // Add suppression block entries if allowed - if( $wgUser->isAllowed( 'hideuser' ) ) { + if( $wgUser->isAllowed( 'suppressionlog' ) ) { LogEventsList::showLogExtract( $out, 'suppress', $title->getPrefixedText(), '', array( 'lim' => 10, @@ -759,32 +810,20 @@ class IPBlockForm { * @return string */ private function getBlockListLink( $skin ) { - $list = SpecialPage::getTitleFor( 'Ipblocklist' ); - $query = array(); - - if( $this->BlockAddress ) { - $addr = strtr( $this->BlockAddress, '_', ' ' ); - $message = wfMsg( 'ipb-blocklist-addr', $addr ); - $query['ip'] = $this->BlockAddress; - } else { - $message = wfMsg( 'ipb-blocklist' ); - } - return $skin->linkKnown( - $list, - htmlspecialchars( $message ), - array(), - $query + SpecialPage::getTitleFor( 'Ipblocklist' ), + wfMsg( 'ipb-blocklist' ) ); } /** * Block a list of selected users - * @param array $users - * @param string $reason - * @param string $tag replaces user pages - * @param string $talkTag replaces user talk pages - * @returns array, list of html-safe usernames + * + * @param $users Array + * @param $reason String + * @param $tag String: replaces user pages + * @param $talkTag String: replaces user talk pages + * @return Array: list of html-safe usernames */ public static function doMassUserBlock( $users, $reason = '', $tag = '', $talkTag = '' ) { global $wgUser; diff --git a/includes/specials/SpecialBlockme.php b/includes/specials/SpecialBlockme.php index f222e3c6..f5131f5f 100644 --- a/includes/specials/SpecialBlockme.php +++ b/includes/specials/SpecialBlockme.php @@ -1,37 +1,59 @@ getText( 'ip' ) != md5( $ip . $wgProxyKey ) ) { - $wgOut->addWikiMsg( 'proxyblocker-disabled' ); - return; + function __construct() { + parent::__construct( 'Blockme' ); } - $blockerName = wfMsg( "proxyblocker" ); - $reason = wfMsg( "proxyblockreason" ); - - $u = User::newFromName( $blockerName ); - $id = $u->idForName(); - if ( !$id ) { - $u = User::newFromName( $blockerName ); - $u->addToDatabase(); - $u->setPassword( bin2hex( mt_rand(0, 0x7fffffff ) ) ); - $u->saveSettings(); - $id = $u->getID(); - } + function execute( $par ) { + global $wgRequest, $wgOut, $wgBlockOpenProxies, $wgProxyKey; + + $this->setHeaders(); + $this->outputHeader(); + + $ip = wfGetIP(); + if( !$wgBlockOpenProxies || $wgRequest->getText( 'ip' ) != md5( $ip . $wgProxyKey ) ) { + $wgOut->addWikiMsg( 'proxyblocker-disabled' ); + return; + } - $block = new Block( $ip, 0, $id, $reason, wfTimestampNow() ); - $block->insert(); + $user = User::newFromName( wfMsgForContent( 'proxyblocker' ) ); + if ( !$user->isLoggedIn() ) { + $user->addToDatabase(); + } + $id = $user->getId(); + $reason = wfMsg( 'proxyblockreason' ); - $wgOut->addWikiMsg( "proxyblocksuccess" ); + $block = new Block( $ip, 0, $id, $reason, wfTimestampNow() ); + $block->insert(); + + $wgOut->addWikiMsg( 'proxyblocksuccess' ); + } } diff --git a/includes/specials/SpecialBooksources.php b/includes/specials/SpecialBooksources.php index 8ee5467a..67fb5404 100644 --- a/includes/specials/SpecialBooksources.php +++ b/includes/specials/SpecialBooksources.php @@ -1,4 +1,25 @@ addHTML( $this->makeForm() ); if( strlen( $this->isbn ) > 0 ) { if( !self::isValidISBN( $this->isbn ) ) { - $wgOut->wrapWikiMsg( "
    \n$1
    ", 'booksources-invalid-isbn' ); + $wgOut->wrapWikiMsg( "
    \n$1\n
    ", 'booksources-invalid-isbn' ); } $this->showList(); } @@ -48,7 +69,6 @@ class SpecialBookSources extends SpecialPage { public static function isValidISBN( $isbn ) { $isbn = self::cleanIsbn( $isbn ); $sum = 0; - $check = -1; if( strlen( $isbn ) == 13 ) { for( $i = 0; $i < 12; $i++ ) { if($i % 2 == 0) { @@ -78,7 +98,6 @@ class SpecialBookSources extends SpecialPage { return false; } - /** * Trim ISBN and remove characters which aren't required * @@ -99,9 +118,9 @@ class SpecialBookSources extends SpecialPage { $title = self::getTitleFor( 'Booksources' ); $form = '
    ' . wfMsgHtml( 'booksources-search-legend' ) . ''; $form .= Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) ); - $form .= Xml::hidden( 'title', $title->getPrefixedText() ); + $form .= Html::hidden( 'title', $title->getPrefixedText() ); $form .= '

    ' . Xml::inputLabel( wfMsg( 'booksources-isbn' ), 'isbn', 'isbn', 20, $this->isbn ); - $form .= ' ' . Xml::submitButton( wfMsg( 'booksources-go' ) ) . '

    '; + $form .= ' ' . Xml::submitButton( wfMsg( 'booksources-go' ) ) . '

    '; $form .= Xml::closeElement( 'form' ); $form .= '
    '; return $form; @@ -147,6 +166,6 @@ class SpecialBookSources extends SpecialPage { */ private function makeListItem( $label, $url ) { $url = str_replace( '$1', $this->isbn, $url ); - return '
  • ' . htmlspecialchars( $label ) . '
  • '; + return '
  • ' . htmlspecialchars( $label ) . '
  • '; } } diff --git a/includes/specials/SpecialBrokenRedirects.php b/includes/specials/SpecialBrokenRedirects.php index b6ae2ada..98b02126 100644 --- a/includes/specials/SpecialBrokenRedirects.php +++ b/includes/specials/SpecialBrokenRedirects.php @@ -1,12 +1,30 @@ ' . $skin->link( $fromObj ) . ''; + return '' . $skin->link( $fromObj ) . ''; } $from = $skin->linkKnown( diff --git a/includes/specials/SpecialCategories.php b/includes/specials/SpecialCategories.php index eb49fdbc..c2dd40cd 100644 --- a/includes/specials/SpecialCategories.php +++ b/includes/specials/SpecialCategories.php @@ -1,29 +1,57 @@ setHeaders(); + $this->outputHeader(); + $wgOut->allowClickjacking(); - if( $par == '' ) { - $from = $wgRequest->getText( 'from' ); - } else { - $from = $par; + $from = $wgRequest->getText( 'from', $par ); + + $cap = new CategoryPager( $from ); + $cap->doQuery(); + + $wgOut->addHTML( + Html::openElement( 'div', array( 'class' => 'mw-spcontent' ) ) . + wfMsgExt( 'categoriespagetext', array( 'parse' ), $cap->getNumRows() ) . + $cap->getStartForm( $from ) . + $cap->getNavigationBar() . + '
      ' . $cap->getBody() . '
    ' . + $cap->getNavigationBar() . + Html::closeElement( 'div' ) + ); } - $wgOut->allowClickjacking(); - $cap = new CategoryPager( $from ); - $cap->doQuery(); - $wgOut->addHTML( - XML::openElement( 'div', array('class' => 'mw-spcontent') ) . - wfMsgExt( 'categoriespagetext', array( 'parse' ), $cap->getNumRows() ) . - $cap->getStartForm( $from ) . - $cap->getNavigationBar() . - '
      ' . $cap->getBody() . '
    ' . - $cap->getNavigationBar() . - XML::closeElement( 'div' ) - ); } /** @@ -77,7 +105,7 @@ class CategoryPager extends AlphabeticPager { $this->mResult->rewind(); - while ( $row = $this->mResult->fetchObject() ) { + foreach ( $this->mResult as $row ) { $batch->addObj( Title::makeTitleSafe( NS_CATEGORY, $row->cat_title ) ); } $batch->execute(); @@ -100,7 +128,7 @@ class CategoryPager extends AlphabeticPager { return Xml::tags( 'form', array( 'method' => 'get', 'action' => $wgScript ), - Xml::hidden( 'title', $t->getPrefixedText() ) . + Html::hidden( 'title', $t->getPrefixedText() ) . Xml::fieldset( wfMsg( 'categories' ), Xml::inputLabel( wfMsg( 'categoriesfrom' ), 'from', 'from', 20, $from ) . diff --git a/includes/specials/SpecialComparePages.php b/includes/specials/SpecialComparePages.php new file mode 100644 index 00000000..4650fc94 --- /dev/null +++ b/includes/specials/SpecialComparePages.php @@ -0,0 +1,170 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file + * @ingroup SpecialPage + */ + +/** + * Implements Special:ComparePages + * + * @ingroup SpecialPage + */ +class SpecialComparePages extends SpecialPage { + + // Stored objects + protected $opts, $skin; + + // Some internal settings + protected $showNavigation = false; + + public function __construct() { + parent::__construct( 'ComparePages' ); + } + + protected function setup( $par ) { + global $wgRequest, $wgUser; + + // Options + $opts = new FormOptions(); + $this->opts = $opts; // bind + $opts->add( 'page1', '' ); + $opts->add( 'page2', '' ); + $opts->add( 'rev1', '' ); + $opts->add( 'rev2', '' ); + $opts->add( 'action', '' ); + + // Set values + $opts->fetchValuesFromRequest( $wgRequest ); + + $title1 = Title::newFromText( $opts->getValue( 'page1' ) ); + $title2 = Title::newFromText( $opts->getValue( 'page2' ) ); + + if( $title1 && $title1->exists() && $opts->getValue( 'rev1' ) == '' ) { + $pda = new Article( $title1 ); + $pdi = $pda->getID(); + $pdLastRevision = Revision::loadFromPageId( wfGetDB( DB_SLAVE ), $pdi ); + $opts->setValue( 'rev1', $pdLastRevision->getId() ); + } elseif ( $opts->getValue( 'rev1' ) != '' ) { + $pdrev = Revision::newFromId( $opts->getValue( 'rev1' ) ); + if( $pdrev ) $opts->setValue( 'page1', $pdrev->getTitle()->getPrefixedText() ); + } + if( $title2 && $title2->exists() && $opts->getValue( 'rev2' ) == '' ) { + $pda = new Article( $title2 ); + $pdi = $pda->getID(); + $pdLastRevision = Revision::loadFromPageId( wfGetDB( DB_SLAVE ), $pdi ); + $opts->setValue('rev2', $pdLastRevision->getId() ); + } elseif ( $opts->getValue( 'rev2' ) != '' ) { + $pdrev = Revision::newFromId( $opts->getValue( 'rev2' ) ); + if( $pdrev ) $opts->setValue( 'page2', $pdrev->getTitle()->getPrefixedText() ); + } + + // Store some objects + $this->skin = $wgUser->getSkin(); + } + + /** + * Show a form for filtering namespace and username + * + * @param $par String + * @return String + */ + public function execute( $par ) { + $this->setHeaders(); + $this->outputHeader(); + + $this->setup( $par ); + + // Settings + $this->form(); + + if( $this->opts->getValue( 'rev1' ) && $this->opts->getValue( 'rev2' ) ) { + $de = new DifferenceEngine( null, + $this->opts->getValue( 'rev1' ), + $this->opts->getValue( 'rev2' ), + null, // rcid + ( $this->opts->getValue( 'action' ) == 'purge' ), + false ); + $de->showDiffPage( true ); + } + } + + protected function form() { + global $wgOut, $wgScript; + + // Consume values + $page1 = $this->opts->consumeValue( 'page1' ); + $page2 = $this->opts->consumeValue( 'page2' ); + $rev1 = $this->opts->consumeValue( 'rev1' ); + $rev2 = $this->opts->consumeValue( 'rev2' ); + + // Store query values in hidden fields so that form submission doesn't lose them + $hidden = array(); + foreach ( $this->opts->getUnconsumedValues() as $key => $value ) { + $hidden[] = Html::hidden( $key, $value ); + } + $hidden = implode( "\n", $hidden ); + + $form = Html::openElement( 'form', array( 'action' => $wgScript ) ) . + Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) . + Xml::fieldset( wfMsg( 'compare-selector' ) ) . + Html::openElement( 'table', array( 'id' => 'mw-diff-table', 'style' => 'width:100%' ) ) . + " + " . + Html::element( 'label', array( 'for' => 'page1' ), wfMsg( 'compare-page1' ) ) . + " + " . + Html::input( 'page1', $page1, 'text', array( 'size' => 40, 'id' => 'page1' ) ) . + " + " . + Html::element( 'label', array( 'for' => 'page2' ), wfMsg( 'compare-page2' ) ) . + " + " . + Html::input( 'page2', $page2, 'text', array( 'size' => 40, 'id' => 'page2' ) ) . + " + " . + " + " . + Html::element( 'label', array( 'for' => 'rev1' ), wfMsg( 'compare-rev1' ) ) . + " + " . + Html::input( 'rev1', $rev1, 'text', array( 'size' => 8, 'id' => 'rev1' ) ) . + " + " . + Html::element( 'label', array( 'for' => 'rev2' ), wfMsg( 'compare-rev2' ) ) . + " + " . + Html::input( 'rev2', $rev2, 'text', array( 'size' => 8, 'id' => 'rev2' ) ) . + " + " . + " + " . + Xml::submitButton( wfMsg( 'compare-submit' ) ) . + " + " . + Html::closeElement( 'table' ) . + Html::closeElement( 'fieldset' ) . + $hidden . + Html::closeElement( 'form' ); + + $wgOut->addHTML( $form ); + } +} diff --git a/includes/specials/SpecialConfirmemail.php b/includes/specials/SpecialConfirmemail.php index 372a574c..e556a60b 100644 --- a/includes/specials/SpecialConfirmemail.php +++ b/includes/specials/SpecialConfirmemail.php @@ -1,4 +1,25 @@ setHeaders(); + + if ( wfReadOnly() ) { + $wgOut->readOnlyPage(); + return; + } + if( empty( $code ) ) { if( $wgUser->isLoggedIn() ) { if( User::isValidEmailAddr( $wgUser->getEmail() ) ) { @@ -54,11 +81,11 @@ class EmailConfirmation extends UnlistedSpecialPage { function showRequestForm() { global $wgOut, $wgUser, $wgLang, $wgRequest; if( $wgRequest->wasPosted() && $wgUser->matchEditToken( $wgRequest->getText( 'token' ) ) ) { - $ok = $wgUser->sendConfirmationMail(); - if ( WikiError::isError( $ok ) ) { - $wgOut->addWikiMsg( 'confirmemail_sendfailed', $ok->toString() ); - } else { + $status = $wgUser->sendConfirmationMail(); + if ( $status->isGood() ) { $wgOut->addWikiMsg( 'confirmemail_sent' ); + } else { + $wgOut->addWikiText( $status->getWikiText( 'confirmemail_sendfailed' ) ); } } else { if( $wgUser->isEmailConfirmed() ) { @@ -71,11 +98,11 @@ class EmailConfirmation extends UnlistedSpecialPage { $wgOut->addWikiMsg( 'emailauthenticated', $time, $d, $t ); } if( $wgUser->isEmailConfirmationPending() ) { - $wgOut->wrapWikiMsg( "
    \n$1
    ", 'confirmemail_pending' ); + $wgOut->wrapWikiMsg( "
    \n$1\n
    ", 'confirmemail_pending' ); } $wgOut->addWikiMsg( 'confirmemail_text' ); $form = Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getTitle()->getLocalUrl() ) ); - $form .= Xml::hidden( 'token', $wgUser->editToken() ); + $form .= Html::hidden( 'token', $wgUser->editToken() ); $form .= Xml::submitButton( wfMsg( 'confirmemail_send' ) ); $form .= Xml::closeElement( 'form' ); $wgOut->addHTML( $form ); @@ -121,6 +148,13 @@ class EmailInvalidation extends UnlistedSpecialPage { function execute( $code ) { $this->setHeaders(); + + if ( wfReadOnly() ) { + global $wgOut; + $wgOut->readOnlyPage(); + return; + } + $this->attemptInvalidate( $code ); } diff --git a/includes/specials/SpecialContributions.php b/includes/specials/SpecialContributions.php index b5d6107a..cee01a7f 100644 --- a/includes/specials/SpecialContributions.php +++ b/includes/specials/SpecialContributions.php @@ -1,10 +1,32 @@ setHeaders(); $this->outputHeader(); @@ -34,6 +56,8 @@ class SpecialContributions extends SpecialPage { $this->opts['contribs'] = 'newbie'; } + $this->opts['deletedOnly'] = $wgRequest->getBool( 'deletedOnly' ); + if( !strlen( $target ) ) { $wgOut->addHTML( $this->getForm() ); return; @@ -41,6 +65,7 @@ class SpecialContributions extends SpecialPage { $this->opts['limit'] = $wgRequest->getInt( 'limit', $wgUser->getOption('rclimit') ); $this->opts['target'] = $target; + $this->opts['topOnly'] = $wgRequest->getBool( 'topOnly' ); $nt = Title::makeTitleSafe( NS_USER, $target ); if( !$nt ) { @@ -64,10 +89,10 @@ class SpecialContributions extends SpecialPage { $this->opts['namespace'] = ''; } - $this->opts['tagfilter'] = (string) $wgRequest->getVal( 'tagfilter' ); - + $this->opts['tagFilter'] = (string) $wgRequest->getVal( 'tagFilter' ); + // Allows reverts to have the bot flag in recent changes. It is just here to - // be passed in the form at the top of the page + // be passed in the form at the top of the page if( $wgUser->isAllowed( 'markbotedits' ) && $wgRequest->getBool( 'bot' ) ) { $this->opts['bot'] = '1'; } @@ -81,7 +106,7 @@ class SpecialContributions extends SpecialPage { $this->opts['year'] = $wgRequest->getIntOrNull( 'year' ); $this->opts['month'] = $wgRequest->getIntOrNull( 'month' ); } - + // Add RSS/atom links $this->setSyndicated(); $feedType = $wgRequest->getVal( 'feed' ); @@ -93,7 +118,14 @@ class SpecialContributions extends SpecialPage { $wgOut->addHTML( $this->getForm() ); - $pager = new ContribsPager( $target, $this->opts['namespace'], $this->opts['year'], $this->opts['month'] ); + $pager = new ContribsPager( array( + 'target' => $target, + 'namespace' => $this->opts['namespace'], + 'year' => $this->opts['year'], + 'month' => $this->opts['month'], + 'deletedOnly' => $this->opts['deletedOnly'], + 'topOnly' => $this->opts['topOnly'], + ) ); if( !$pager->getNumRows() ) { $wgOut->addWikiMsg( 'nocontribs', $target ); } else { @@ -132,7 +164,7 @@ class SpecialContributions extends SpecialPage { } } } - + protected function setSyndicated() { global $wgOut; $wgOut->setSyndicated( true ); @@ -141,8 +173,8 @@ class SpecialContributions extends SpecialPage { /** * Generates the subheading with links - * @param Title $nt @see Title object for the target - * @param integer $id User ID for the target + * @param $nt Title object for the target + * @param $id Integer: User ID for the target * @return String: appropriately-escaped HTML to be output literally * @todo Fixme: almost the same as getSubTitle in SpecialDeletedContributions.php. Could be combined. */ @@ -169,12 +201,12 @@ class SpecialContributions extends SpecialPage { wfMsgHtml( 'change-blocklink' ) ); $tools[] = $sk->linkKnown( # Unblock link - SpecialPage::getTitleFor( 'BlockList' ), + SpecialPage::getTitleFor( 'Ipblocklist' ), wfMsgHtml( 'unblocklink' ), array(), array( 'action' => 'unblock', - 'ip' => $nt->getDBkey() + 'ip' => $nt->getDBkey() ) ); } @@ -196,6 +228,14 @@ class SpecialContributions extends SpecialPage { ) ); } + # Uploads + $tools[] = $sk->linkKnown( + SpecialPage::getTitleFor( 'Listfiles' ), + wfMsgHtml( 'sp-contributions-uploads' ), + array(), + array( 'user' => $nt->getText() ) + ); + # Other logs link $tools[] = $sk->linkKnown( SpecialPage::getTitleFor( 'Log' ), @@ -236,7 +276,9 @@ class SpecialContributions extends SpecialPage { 'lim' => 1, 'showIfEmpty' => false, 'msgKey' => array( - 'sp-contributions-blocked-notice', + $userObj->isAnon() ? + 'sp-contributions-blocked-notice-anon' : + 'sp-contributions-blocked-notice', $nt->getText() # Support GENDER in 'sp-contributions-blocked-notice' ), 'offset' => '' # don't use $wgRequest parameter offset @@ -258,99 +300,103 @@ class SpecialContributions extends SpecialPage { /** * Generates the namespace selector form with hidden attributes. - * @param $this->opts Array: the options to be included. + * @return String: HTML fragment */ protected function getForm() { global $wgScript; - + $this->opts['title'] = $this->getTitle()->getPrefixedText(); if( !isset( $this->opts['target'] ) ) { $this->opts['target'] = ''; } else { $this->opts['target'] = str_replace( '_' , ' ' , $this->opts['target'] ); } - + if( !isset( $this->opts['namespace'] ) ) { $this->opts['namespace'] = ''; } - + if( !isset( $this->opts['contribs'] ) ) { $this->opts['contribs'] = 'user'; } - + if( !isset( $this->opts['year'] ) ) { $this->opts['year'] = ''; } - + if( !isset( $this->opts['month'] ) ) { $this->opts['month'] = ''; } - + if( $this->opts['contribs'] == 'newbie' ) { $this->opts['target'] = ''; } - if( !isset( $this->opts['tagfilter'] ) ) { - $this->opts['tagfilter'] = ''; + if( !isset( $this->opts['tagFilter'] ) ) { + $this->opts['tagFilter'] = ''; } - - $f = Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) ); - # Add hidden params for tracking + + if( !isset( $this->opts['topOnly'] ) ) { + $this->opts['topOnly'] = false; + } + + $f = Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'class' => 'mw-contributions-form' ) ); + + # Add hidden params for tracking except for parameters in $skipParameters + $skipParameters = array( 'namespace', 'deletedOnly', 'target', 'contribs', 'year', 'month', 'topOnly' ); foreach ( $this->opts as $name => $value ) { - if( in_array( $name, array( 'namespace', 'target', 'contribs', 'year', 'month' ) ) ) { + if( in_array( $name, $skipParameters ) ) { continue; } - $f .= "\t" . Xml::hidden( $name, $value ) . "\n"; + $f .= "\t" . Html::hidden( $name, $value ) . "\n"; } - $tagFilter = ChangeTags::buildTagFilterSelector( $this->opts['tagfilter'] ); - - $f .= '
    ' . - Xml::element( 'legend', array(), wfMsg( 'sp-contributions-search' ) ) . - Xml::radioLabel( wfMsgExt( 'sp-contributions-newbies', array( 'parsemag' ) ), - 'contribs', 'newbie' , 'newbie', $this->opts['contribs'] == 'newbie' ? true : false ) . '
    ' . - Xml::radioLabel( wfMsgExt( 'sp-contributions-username', array( 'parsemag' ) ), - 'contribs' , 'user', 'user', $this->opts['contribs'] == 'user' ? true : false ) . ' ' . + $tagFilter = ChangeTags::buildTagFilterSelector( $this->opts['tagFilter'] ); + + $f .= Xml::fieldset( wfMsg( 'sp-contributions-search' ) ) . + Xml::radioLabel( wfMsgExt( 'sp-contributions-newbies', array( 'parsemag' ) ), + 'contribs', 'newbie' , 'newbie', $this->opts['contribs'] == 'newbie' ) . '
    ' . + Xml::radioLabel( wfMsgExt( 'sp-contributions-username', array( 'parsemag' ) ), + 'contribs' , 'user', 'user', $this->opts['contribs'] == 'user' ) . ' ' . Html::input( 'target', $this->opts['target'], 'text', array( 'size' => '20', 'required' => '' ) + ( $this->opts['target'] ? array() : array( 'autofocus' ) ) ) . ' '. - '' . - Xml::label( wfMsg( 'namespace' ), 'namespace' ) . ' ' . - Xml::namespaceSelector( $this->opts['namespace'], '' ) . - '' . - ( $tagFilter ? Xml::tags( 'p', null, implode( ' ', $tagFilter ) ) : '' ) . - Xml::openElement( 'p' ) . - '' . - Xml::dateMenu( $this->opts['year'], $this->opts['month'] ) . - '' . ' ' . - Xml::submitButton( wfMsg( 'sp-contributions-submit' ) ) . - Xml::closeElement( 'p' ); - + Html::rawElement( 'span', array( 'style' => 'white-space: nowrap' ), + Xml::label( wfMsg( 'namespace' ), 'namespace' ) . ' ' . + Xml::namespaceSelector( $this->opts['namespace'], '' ) + ) . + Xml::checkLabel( wfMsg( 'history-show-deleted' ), + 'deletedOnly', 'mw-show-deleted-only', $this->opts['deletedOnly'] ) . '
    ' . + Xml::tags( 'p', null, Xml::checkLabel( wfMsg( 'sp-contributions-toponly' ), + 'topOnly', 'mw-show-top-only', $this->opts['topOnly'] ) ) . + ( $tagFilter ? Xml::tags( 'p', null, implode( ' ', $tagFilter ) ) : '' ) . + Html::rawElement( 'p', array( 'style' => 'white-space: nowrap' ), + Xml::dateMenu( $this->opts['year'], $this->opts['month'] ) . ' ' . + Xml::submitButton( wfMsg( 'sp-contributions-submit' ) ) + ) . ' '; $explain = wfMsgExt( 'sp-contributions-explain', 'parseinline' ); - if( !wfEmptyMsg( 'sp-contributions-explain', $explain ) ) + if( !wfEmptyMsg( 'sp-contributions-explain', $explain ) ) { $f .= "

    {$explain}

    "; - - $f .= '
    ' . + } + $f .= Xml::closeElement('fieldset' ) . Xml::closeElement( 'form' ); return $f; } - + /** * Output a subscription feed listing recent edits to this page. - * @param string $type + * @param $type String */ protected function feed( $type ) { - global $wgRequest, $wgFeed, $wgFeedClasses, $wgFeedLimit; + global $wgFeed, $wgFeedClasses, $wgFeedLimit, $wgOut; if( !$wgFeed ) { - global $wgOut; $wgOut->addWikiMsg( 'feed-unavailable' ); return; } if( !isset( $wgFeedClasses[$type] ) ) { - global $wgOut; $wgOut->addWikiMsg( 'feed-invalid' ); return; } @@ -360,19 +406,26 @@ class SpecialContributions extends SpecialPage { wfMsgExt( 'tagline', 'parsemag' ), $this->getTitle()->getFullUrl() . "/" . urlencode($this->opts['target']) ); - + // Already valid title $nt = Title::makeTitleSafe( NS_USER, $this->opts['target'] ); $target = $this->opts['target'] == 'newbies' ? 'newbies' : $nt->getText(); - - $pager = new ContribsPager( $target, $this->opts['namespace'], - $this->opts['year'], $this->opts['month'], $this->opts['tagfilter'] ); + + $pager = new ContribsPager( array( + 'target' => $target, + 'namespace' => $this->opts['namespace'], + 'year' => $this->opts['year'], + 'month' => $this->opts['month'], + 'tagFilter' => $this->opts['tagFilter'], + 'deletedOnly' => $this->opts['deletedOnly'], + 'topOnly' => $this->opts['topOnly'], + ) ); $pager->mLimit = min( $this->opts['limit'], $wgFeedLimit ); $feed->outHeader(); if( $pager->getNumRows() > 0 ) { - while( $row = $pager->mResult->fetchObject() ) { + foreach ( $pager->mResult as $row ) { $feed->outItem( $this->feedItem( $row ) ); } } @@ -380,10 +433,10 @@ class SpecialContributions extends SpecialPage { } protected function feedTitle() { - global $wgContLanguageCode, $wgSitename; + global $wgLanguageCode, $wgSitename; $page = SpecialPage::getPage( 'Contributions' ); $desc = $page->getDescription(); - return "$wgSitename - $desc [$wgContLanguageCode]"; + return "$wgSitename - $desc [$wgLanguageCode]"; } protected function feedItem( $row ) { @@ -413,7 +466,7 @@ class SpecialContributions extends SpecialPage { protected function feedItemDesc( $revision ) { if( $revision ) { return '

    ' . htmlspecialchars( $revision->getUserText() ) . wfMsgForContent( 'colon-separator' ) . - htmlspecialchars( FeedItem::stripComment( $revision->getComment() ) ) . + htmlspecialchars( FeedItem::stripComment( $revision->getComment() ) ) . "

    \n
    \n
    " . nl2br( htmlspecialchars( $revision->getText() ) ) . "
    "; } @@ -431,7 +484,7 @@ class ContribsPager extends ReverseChronologicalPager { var $namespace = '', $mDb; var $preventClickjacking = false; - function __construct( $target, $namespace = false, $year = false, $month = false, $tagFilter = false ) { + function __construct( $options ) { parent::__construct(); $msgs = array( 'uctop', 'diff', 'newarticle', 'rollbacklink', 'diff', 'hist', 'rev-delundel', 'pipe-separator' ); @@ -440,10 +493,15 @@ class ContribsPager extends ReverseChronologicalPager { $this->messages[$msg] = wfMsgExt( $msg, array( 'escapenoentities' ) ); } - $this->target = $target; - $this->namespace = $namespace; - $this->tagFilter = $tagFilter; + $this->target = isset( $options['target'] ) ? $options['target'] : ''; + $this->namespace = isset( $options['namespace'] ) ? $options['namespace'] : ''; + $this->tagFilter = isset( $options['tagFilter'] ) ? $options['tagFilter'] : false; + + $this->deletedOnly = !empty( $options['deletedOnly'] ); + $this->topOnly = !empty( $options['topOnly'] ); + $year = isset( $options['year'] ) ? $options['year'] : false; + $month = isset( $options['month'] ) ? $options['month'] : false; $this->getDateCond( $year, $month ); $this->mDb = wfGetDB( DB_SLAVE, 'contributions' ); @@ -458,7 +516,7 @@ class ContribsPager extends ReverseChronologicalPager { function getQueryInfo() { global $wgUser; list( $tables, $index, $userCond, $join_cond ) = $this->getUserCond(); - + $conds = array_merge( $userCond, $this->getNamespaceCond() ); // Paranoia: avoid brute force searches (bug 17342) if( !$wgUser->isAllowed( 'deletedhistory' ) ) { @@ -468,12 +526,12 @@ class ContribsPager extends ReverseChronologicalPager { ' != ' . Revision::SUPPRESSED_USER; } $join_cond['page'] = array( 'INNER JOIN', 'page_id=rev_page' ); - + $queryInfo = array( 'tables' => $tables, 'fields' => array( 'page_namespace', 'page_title', 'page_is_new', 'page_latest', 'page_is_redirect', - 'page_len','rev_id', 'rev_page', 'rev_text_id', 'rev_timestamp', 'rev_comment', + 'page_len','rev_id', 'rev_page', 'rev_text_id', 'rev_timestamp', 'rev_comment', 'rev_minor_edit', 'rev_user', 'rev_user_text', 'rev_parent_id', 'rev_deleted' ), 'conds' => $conds, @@ -510,6 +568,12 @@ class ContribsPager extends ReverseChronologicalPager { $condition['rev_user_text'] = $this->target; $index = 'usertext_timestamp'; } + if( $this->deletedOnly ) { + $condition[] = "rev_deleted != '0'"; + } + if( $this->topOnly ) { + $condition[] = "rev_id = page_latest"; + } return array( $tables, $index, $condition, $join_conds ); } @@ -552,7 +616,6 @@ class ContribsPager extends ReverseChronologicalPager { $classes = array(); $page = Title::newFromRow( $row ); - $page->resetArticleId( $row->rev_page ); // use process cache $link = $sk->link( $page, htmlspecialchars( $page->getPrefixedText() ), @@ -560,7 +623,7 @@ class ContribsPager extends ReverseChronologicalPager { $page->isRedirect() ? array( 'redirect' => 'no' ) : array() ); # Mark current revisions - $difftext = $topmarktext = ''; + $topmarktext = ''; if( $row->rev_id == $row->page_latest ) { $topmarktext .= '' . $this->messages['uctop'] . ''; # Add rollback link @@ -594,15 +657,18 @@ class ContribsPager extends ReverseChronologicalPager { $comment = $wgContLang->getDirMark() . $sk->revComment( $rev, false, true ); $date = $wgLang->timeanddate( wfTimestamp( TS_MW, $row->rev_timestamp ), true ); - if( $rev->isDeleted( Revision::DELETED_TEXT ) ) { - $d = '' . $date . ''; - } else { + if( $rev->userCan( Revision::DELETED_TEXT ) ) { $d = $sk->linkKnown( $page, htmlspecialchars($date), array(), array( 'oldid' => intval( $row->rev_id ) ) ); + } else { + $d = htmlspecialchars( $date ); + } + if( $rev->isDeleted( Revision::DELETED_TEXT ) ) { + $d = '' . $d . ''; } if( $this->target == 'newbies' ) { @@ -645,7 +711,7 @@ class ContribsPager extends ReverseChronologicalPager { $diffHistLinks = '(' . $difftext . $this->messages['pipe-separator'] . $histlink . ')'; $ret = "{$del}{$d} {$diffHistLinks} {$nflag}{$mflag} {$link}{$userlink} {$comment} {$topmarktext}"; - + # Denote if username is redacted for this edit if( $rev->isDeleted( Revision::DELETED_USER ) ) { $ret .= " " . wfMsgHtml('rev-deleted-user-contribs') . ""; @@ -674,6 +740,17 @@ class ContribsPager extends ReverseChronologicalPager { return $this->mDb; } + /** + * Overwrite Pager function and return a helpful comment + */ + function getSqlComment() { + if ( $this->namespace || $this->deletedOnly ) { + return 'contributions page filtered for namespace or RevisionDeleted edits'; // potentially slow, see CR r58153 + } else { + return 'contributions page unfiltered'; + } + } + protected function preventClickjacking() { $this->preventClickjacking = true; } diff --git a/includes/specials/SpecialDeadendpages.php b/includes/specials/SpecialDeadendpages.php index a8416c97..dfa053aa 100644 --- a/includes/specials/SpecialDeadendpages.php +++ b/includes/specials/SpecialDeadendpages.php @@ -1,10 +1,29 @@ setPageTitle( wfMsgExt( 'deletedcontributions-title', array( 'parsemag' ) ) ); @@ -328,8 +350,8 @@ class DeletedContributionsPage extends SpecialPage { /** * Generates the subheading with links - * @param Title $nt @see Title object for the target - * @param integer $id User ID for the target + * @param $nt Title object for the target + * @param $id Integer: User ID for the target * @return String: appropriately-escaped HTML to be output literally * @todo Fixme: almost the same as contributionsSub in SpecialContributions.php. Could be combined. */ @@ -445,7 +467,7 @@ class DeletedContributionsPage extends SpecialPage { * @param $options Array: the options to be included. */ function getForm( $options ) { - global $wgScript, $wgRequest; + global $wgScript; $options['title'] = SpecialPage::getTitleFor( 'DeletedContributions' )->getPrefixedText(); if ( !isset( $options['target'] ) ) { @@ -472,7 +494,7 @@ class DeletedContributionsPage extends SpecialPage { if ( in_array( $name, array( 'namespace', 'target', 'contribs' ) ) ) { continue; } - $f .= "\t" . Xml::hidden( $name, $value ) . "\n"; + $f .= "\t" . Html::hidden( $name, $value ) . "\n"; } $f .= Xml::openElement( 'fieldset' ) . diff --git a/includes/specials/SpecialDisambiguations.php b/includes/specials/SpecialDisambiguations.php index 1941112a..3e706189 100644 --- a/includes/specials/SpecialDisambiguations.php +++ b/includes/specials/SpecialDisambiguations.php @@ -1,10 +1,29 @@ $disPageObj->getNamespace(), 'page_title' => $disPageObj->getDBkey()), __METHOD__ ); - while ( $row = $dbr->fetchObject( $res ) ) { + foreach ( $res as $row ) { $linkBatch->addObj( Title::makeTitle( NS_TEMPLATE, $row->pl_title )); } - - $dbr->freeResult( $res ); } $set = $linkBatch->constructSet( 'lb.tl', $dbr ); @@ -64,12 +83,18 @@ class DisambiguationsPage extends PageQueryPage { list( $page, $pagelinks, $templatelinks) = $dbr->tableNamesN( 'page', 'pagelinks', 'templatelinks' ); + if ( $wgContentNamespaces ) { + $nsclause = 'IN (' . $dbr->makeList( $wgContentNamespaces ) . ')'; + } else { + $nsclause = '= ' . NS_MAIN; + } + $sql = "SELECT 'Disambiguations' AS \"type\", pb.page_namespace AS namespace," ." pb.page_title AS title, la.pl_from AS value" ." FROM {$templatelinks} AS lb, {$page} AS pb, {$pagelinks} AS la, {$page} AS pa" ." WHERE $set" # disambiguation template(s) .' AND pa.page_id = la.pl_from' - .' AND pa.page_namespace = ' . NS_MAIN # Limit to just articles in the main namespace + .' AND pa.page_namespace ' . $nsclause .' AND pb.page_id = lb.tl_from' .' AND pb.page_namespace = la.pl_namespace' .' AND pb.page_title = la.pl_title' diff --git a/includes/specials/SpecialDoubleRedirects.php b/includes/specials/SpecialDoubleRedirects.php index 893fee9e..c7f63210 100644 --- a/includes/specials/SpecialDoubleRedirects.php +++ b/includes/specials/SpecialDoubleRedirects.php @@ -1,5 +1,22 @@ query( $sql, $fname ); if ( $res ) { $result = $dbr->fetchObject( $res ); - $dbr->freeResult( $res ); } } if ( !$result ) { - return '' . $skin->link( $titleA, null, array(), array( 'redirect' => 'no' ) ) . ''; + return '' . $skin->link( $titleA, null, array(), array( 'redirect' => 'no' ) ) . ''; } $titleB = Title::makeTitle( $result->nsb, $result->tb ); diff --git a/includes/specials/SpecialEmailuser.php b/includes/specials/SpecialEmailuser.php index 48088ded..61271227 100644 --- a/includes/specials/SpecialEmailuser.php +++ b/includes/specials/SpecialEmailuser.php @@ -1,329 +1,303 @@ showErrorPage( 'nosuchspecialpage', 'nospecialpagetext' ); - return; - } - - $action = $wgRequest->getVal( 'action' ); - $target = isset($par) ? $par : $wgRequest->getVal( 'target' ); - $targetUser = EmailUserForm::validateEmailTarget( $target ); +class SpecialEmailUser extends UnlistedSpecialPage { + protected $mTarget; - if ( !( $targetUser instanceof User ) ) { - $wgOut->showErrorPage( $targetUser.'title', $targetUser.'text' ); - return; + public function __construct(){ + parent::__construct( 'Emailuser' ); } - $form = new EmailUserForm( $targetUser, - $wgRequest->getText( 'wpText' ), - $wgRequest->getText( 'wpSubject' ), - $wgRequest->getBool( 'wpCCMe' ) ); - if ( $action == 'success' ) { - $form->showSuccess(); - return; + protected function getFormFields(){ + global $wgUser; + return array( + 'From' => array( + 'type' => 'info', + 'raw' => 1, + 'default' => $wgUser->getSkin()->link( + $wgUser->getUserPage(), + htmlspecialchars( $wgUser->getName() ) + ), + 'label-message' => 'emailfrom', + 'id' => 'mw-emailuser-sender', + ), + 'To' => array( + 'type' => 'info', + 'raw' => 1, + 'default' => $wgUser->getSkin()->link( + $this->mTargetObj->getUserPage(), + htmlspecialchars( $this->mTargetObj->getName() ) + ), + 'label-message' => 'emailto', + 'id' => 'mw-emailuser-recipient', + ), + 'Target' => array( + 'type' => 'hidden', + 'default' => $this->mTargetObj->getName(), + ), + 'Subject' => array( + 'type' => 'text', + 'default' => wfMsgExt( 'defemailsubject', array( 'content', 'parsemag' ) ), + 'label-message' => 'emailsubject', + 'maxlength' => 200, + 'size' => 60, + 'required' => 1, + ), + 'Text' => array( + 'type' => 'textarea', + 'rows' => 20, + 'cols' => 80, + 'label-message' => 'emailmessage', + 'required' => 1, + ), + 'CCMe' => array( + 'type' => 'check', + 'label-message' => 'emailccme', + 'default' => $wgUser->getBoolOption( 'ccmeonemails' ), + ), + ); } - - $error = EmailUserForm::getPermissionsError( $wgUser, $wgRequest->getVal( 'wpEditToken' ) ); - if ( $error ) { + + public function execute( $par ) { + global $wgRequest, $wgOut, $wgUser; + + $this->setHeaders(); + $this->outputHeader(); + + $this->mTarget = is_null( $par ) + ? $wgRequest->getVal( 'wpTarget', $wgRequest->getVal( 'target', '' ) ) + : $par; + + $ret = self::getTarget( $this->mTarget ); + if( $ret instanceof User ){ + $this->mTargetObj = $ret; + } else { + $wgOut->showErrorPage( "{$ret}title", "{$ret}text" ); + return false; + } + + $error = self::getPermissionsError( $wgUser, $wgRequest->getVal( 'wpEditToken' ) ); switch ( $error ) { + case null: + # Wahey! + break; + case 'badaccess': + $wgOut->permissionRequired( 'sendemail' ); + return; case 'blockedemailuser': $wgOut->blockedPage(); return; case 'actionthrottledtext': $wgOut->rateLimited(); return; - case 'sessionfailure': - $form->showForm(); - return; case 'mailnologin': - $wgOut->showErrorPage( 'mailnologin', 'mailnologintext' ); + case 'usermaildisabled': + $wgOut->showErrorPage( $error, "{$error}text" ); return; default: - // It's a hook error + # It's a hook error list( $title, $msg, $params ) = $error; $wgOut->showErrorPage( $title, $msg, $params ); return; - } - } - - if ( "submit" == $action && $wgRequest->wasPosted() ) { - $result = $form->doSubmit(); - if ( !is_null( $result ) ) { - $wgOut->addHTML( wfMsg( "usermailererror" ) . - ' ' . htmlspecialchars( $result->getMessage() ) ); - } else { - $titleObj = SpecialPage::getTitleFor( "Emailuser" ); - $encTarget = wfUrlencode( $form->getTarget()->getName() ); - $wgOut->redirect( $titleObj->getFullURL( "target={$encTarget}&action=success" ) ); - } - } else { - $form->showForm(); - } -} - -/** - * Implements the Special:Emailuser web interface, and invokes userMailer for sending the email message. - * @ingroup SpecialPage - */ -class EmailUserForm { - - var $target; - var $text, $subject; - var $cc_me; // Whether user requested to be sent a separate copy of their email. - - /** - * @param User $target - */ - function EmailUserForm( $target, $text, $subject, $cc_me ) { - $this->target = $target; - $this->text = $text; - $this->subject = $subject; - $this->cc_me = $cc_me; - } - - function showForm() { - global $wgOut, $wgUser; - $skin = $wgUser->getSkin(); - - $wgOut->setPagetitle( wfMsg( "emailpage" ) ); - $wgOut->addWikiMsg( "emailpagetext" ); - - if ( $this->subject === "" ) { - $this->subject = wfMsgExt( 'defemailsubject', array( 'content', 'parsemag' ) ); - } - - $titleObj = SpecialPage::getTitleFor( "Emailuser" ); - $action = $titleObj->getLocalURL( "target=" . - urlencode( $this->target->getName() ) . "&action=submit" ); - - $wgOut->addHTML( - Xml::openElement( 'form', array( 'method' => 'post', 'action' => $action, 'id' => 'emailuser' ) ) . - Xml::openElement( 'fieldset' ) . - Xml::element( 'legend', null, wfMsgExt( 'email-legend', 'parsemag' ) ) . - Xml::openElement( 'table', array( 'class' => 'mw-emailuser-table' ) ) . - " - " . - Xml::label( wfMsg( 'emailfrom' ), 'emailfrom' ) . - " - " . - $skin->link( $wgUser->getUserPage(), htmlspecialchars( $wgUser->getName() ) ) . - " - - - " . - Xml::label( wfMsg( 'emailto' ), 'emailto' ) . - " - " . - $skin->link( $this->target->getUserPage(), htmlspecialchars( $this->target->getName() ) ) . - " - - - " . - Xml::label( wfMsg( 'emailsubject' ), 'wpSubject' ) . - " - " . - Xml::input( 'wpSubject', 60, $this->subject, array( 'type' => 'text', 'maxlength' => 200 ) ) . - " - - - " . - Xml::label( wfMsg( 'emailmessage' ), 'wpText' ) . - " - " . - Xml::textarea( 'wpText', $this->text, 80, 20, array( 'id' => 'wpText' ) ) . - " - - - - " . - Xml::checkLabel( wfMsg( 'emailccme' ), 'wpCCMe', 'wpCCMe', $wgUser->getBoolOption( 'ccmeonemails' ) ) . - " - - - - " . - Xml::submitButton( wfMsg( 'emailsend' ), array( 'name' => 'wpSend', 'accesskey' => 's' ) ) . - " - " . - Xml::hidden( 'wpEditToken', $wgUser->editToken() ) . - Xml::closeElement( 'table' ) . - Xml::closeElement( 'fieldset' ) . - Xml::closeElement( 'form' ) - ); - } - - /* - * Really send a mail. Permissions should have been checked using - * EmailUserForm::getPermissionsError. It is probably also a good idea to - * check the edit token and ping limiter in advance. - */ - function doSubmit() { - global $wgUser, $wgUserEmailUseReplyTo, $wgSiteName; - - $to = new MailAddress( $this->target ); - $from = new MailAddress( $wgUser ); - $subject = $this->subject; - - // Add a standard footer and trim up trailing newlines - $this->text = rtrim($this->text) . "\n\n-- \n" . wfMsgExt( 'emailuserfooter', - array( 'content', 'parsemag' ), array( $from->name, $to->name ) ); + $form = new HTMLForm( $this->getFormFields() ); + $form->addPreText( wfMsgExt( 'emailpagetext', 'parseinline' ) ); + $form->setSubmitText( wfMsg( 'emailsend' ) ); + $form->setTitle( $this->getTitle() ); + $form->setSubmitCallback( array( __CLASS__, 'submit' ) ); + $form->setWrapperLegend( wfMsgExt( 'email-legend', 'parsemag' ) ); + $form->loadData(); - if( wfRunHooks( 'EmailUser', array( &$to, &$from, &$subject, &$this->text ) ) ) { - - if( $wgUserEmailUseReplyTo ) { - // Put the generic wiki autogenerated address in the From: - // header and reserve the user for Reply-To. - // - // This is a bit ugly, but will serve to differentiate - // wiki-borne mails from direct mails and protects against - // SPF and bounce problems with some mailers (see below). - global $wgPasswordSender; - $mailFrom = new MailAddress( $wgPasswordSender ); - $replyTo = $from; - } else { - // Put the sending user's e-mail address in the From: header. - // - // This is clean-looking and convenient, but has issues. - // One is that it doesn't as clearly differentiate the wiki mail - // from "directly" sent mails. - // - // Another is that some mailers (like sSMTP) will use the From - // address as the envelope sender as well. For open sites this - // can cause mails to be flunked for SPF violations (since the - // wiki server isn't an authorized sender for various users' - // domains) as well as creating a privacy issue as bounces - // containing the recipient's e-mail address may get sent to - // the sending user. - $mailFrom = $from; - $replyTo = null; - } - - $mailResult = UserMailer::send( $to, $mailFrom, $subject, $this->text, $replyTo ); - - if( WikiError::isError( $mailResult ) ) { - return $mailResult; - - } else { - - // if the user requested a copy of this mail, do this now, - // unless they are emailing themselves, in which case one copy of the message is sufficient. - if ($this->cc_me && $to != $from) { - $cc_subject = wfMsg('emailccsubject', $this->target->getName(), $subject); - if( wfRunHooks( 'EmailUser', array( &$from, &$from, &$cc_subject, &$this->text ) ) ) { - $ccResult = UserMailer::send( $from, $from, $cc_subject, $this->text ); - if( WikiError::isError( $ccResult ) ) { - // At this stage, the user's CC mail has failed, but their - // original mail has succeeded. It's unlikely, but still, what to do? - // We can either show them an error, or we can say everything was fine, - // or we can say we sort of failed AND sort of succeeded. Of these options, - // simply saying there was an error is probably best. - return $ccResult; - } - } - } - - wfRunHooks( 'EmailUserComplete', array( $to, $from, $subject, $this->text ) ); - return; - } + if( !wfRunHooks( 'EmailUserForm', array( &$form ) ) ){ + return false; } - } - - function showSuccess( &$user = null ) { - global $wgOut; - if ( is_null($user) ) - $user = $this->target; - - $wgOut->setPagetitle( wfMsg( "emailsent" ) ); - $wgOut->addWikiMsg( 'emailsenttext' ); - - $wgOut->returnToMain( false, $user->getUserPage() ); - } - - function getTarget() { - return $this->target; - } - - static function userEmailEnabled() { - global $wgEnableEmail, $wgEnableUserEmail; - return $wgEnableEmail && $wgEnableUserEmail; + $wgOut->setPagetitle( wfMsg( 'emailpage' ) ); + $result = $form->show(); + if( $result === true || ( $result instanceof Status && $result->isGood() ) ){ + $wgOut->setPagetitle( wfMsg( 'emailsent' ) ); + $wgOut->addWikiMsg( 'emailsenttext' ); + $wgOut->returnToMain( false, $this->mTargetObj->getUserPage() ); + } } - static function validateEmailTarget ( $target ) { - if ( $target == "" ) { + + /** + * Validate target User + * + * @param $target String: target user name + * @return User object on success or a string on error + */ + public static function getTarget( $target ) { + if ( $target == '' ) { wfDebug( "Target is empty.\n" ); - return "notarget"; - } - - $nt = Title::newFromURL( $target ); - if ( is_null( $nt ) ) { - wfDebug( "Target is invalid title.\n" ); - return "notarget"; + return 'notarget'; } - - $nu = User::newFromName( $nt->getText() ); + + $nu = User::newFromName( $target ); if( !$nu instanceof User || !$nu->getId() ) { wfDebug( "Target is invalid user.\n" ); - return "notarget"; + return 'notarget'; } else if ( !$nu->isEmailConfirmed() ) { wfDebug( "User has no valid email.\n" ); - return "noemail"; + return 'noemail'; } else if ( !$nu->canReceiveEmail() ) { wfDebug( "User does not allow user emails.\n" ); - return "nowikiemail"; + return 'nowikiemail'; } - + return $nu; } - static function getPermissionsError ( $user, $editToken ) { - if( !$user->canSendEmail() ) { - wfDebug( "User can't send.\n" ); - // FIXME: this is also the error if user is in a group - // that is not allowed to send e-mail (no right - // 'sendemail'). Error messages should probably - // be more fine grained. - return "mailnologin"; + + /** + * Check whether a user is allowed to send email + * + * @param $user User object + * @param $editToken String: edit token + * @return null on success or string on error + */ + public static function getPermissionsError( $user, $editToken ) { + global $wgEnableEmail, $wgEnableUserEmail; + if( !$wgEnableEmail || !$wgEnableUserEmail ){ + return 'usermaildisabled'; + } + + if( !$user->isAllowed( 'sendemail' ) ) { + return 'badaccess'; } + if( !$user->isEmailConfirmed() ){ + return 'mailnologin'; + } + if( $user->isBlockedFromEmailuser() ) { wfDebug( "User is blocked from sending e-mail.\n" ); return "blockedemailuser"; } - + if( $user->pingLimiter( 'emailuser' ) ) { - wfDebug( "Ping limiter triggered.\n" ); + wfDebug( "Ping limiter triggered.\n" ); return 'actionthrottledtext'; } - - $hookErr = null; + + $hookErr = false; + wfRunHooks( 'UserCanSendEmail', array( &$user, &$hookErr ) ); wfRunHooks( 'EmailUserPermissionsErrors', array( $user, $editToken, &$hookErr ) ); - - if ($hookErr) { + if ( $hookErr ) { return $hookErr; } + + return null; + } + + /** + * Really send a mail. Permissions should have been checked using + * getPermissionsError(). It is probably also a good + * idea to check the edit token and ping limiter in advance. + * + * @return Mixed: Status object, or potentially a String on error + * or maybe even true on success if anything uses the EmailUser hook. + */ + public static function submit( $data ) { + global $wgUser, $wgUserEmailUseReplyTo; + + $target = self::getTarget( $data['Target'] ); + if( !$target instanceof User ){ + return wfMsgExt( $target . 'text', 'parse' ); + } + $to = new MailAddress( $target ); + $from = new MailAddress( $wgUser ); + $subject = $data['Subject']; + $text = $data['Text']; + + // Add a standard footer and trim up trailing newlines + $text = rtrim( $text ) . "\n\n-- \n"; + $text .= wfMsgExt( + 'emailuserfooter', + array( 'content', 'parsemag' ), + array( $from->name, $to->name ) + ); + + $error = ''; + if( !wfRunHooks( 'EmailUser', array( &$to, &$from, &$subject, &$text, &$error ) ) ) { + return $error; + } - if( !$user->matchEditToken( $editToken ) ) { - wfDebug( "Matching edit token failed.\n" ); - return 'sessionfailure'; + if( $wgUserEmailUseReplyTo ) { + // Put the generic wiki autogenerated address in the From: + // header and reserve the user for Reply-To. + // + // This is a bit ugly, but will serve to differentiate + // wiki-borne mails from direct mails and protects against + // SPF and bounce problems with some mailers (see below). + global $wgPasswordSender, $wgPasswordSenderName; + $mailFrom = new MailAddress( $wgPasswordSender, $wgPasswordSenderName ); + $replyTo = $from; + } else { + // Put the sending user's e-mail address in the From: header. + // + // This is clean-looking and convenient, but has issues. + // One is that it doesn't as clearly differentiate the wiki mail + // from "directly" sent mails. + // + // Another is that some mailers (like sSMTP) will use the From + // address as the envelope sender as well. For open sites this + // can cause mails to be flunked for SPF violations (since the + // wiki server isn't an authorized sender for various users' + // domains) as well as creating a privacy issue as bounces + // containing the recipient's e-mail address may get sent to + // the sending user. + $mailFrom = $from; + $replyTo = null; + } + + $status = UserMailer::send( $to, $mailFrom, $subject, $text, $replyTo ); + + if( !$status->isGood() ) { + return $status; + } else { + // if the user requested a copy of this mail, do this now, + // unless they are emailing themselves, in which case one + // copy of the message is sufficient. + if ( $data['CCMe'] && $to != $from ) { + $cc_subject = wfMsg( + 'emailccsubject', + $target->getName(), + $subject + ); + wfRunHooks( 'EmailUserCC', array( &$from, &$from, &$cc_subject, &$text ) ); + $ccStatus = UserMailer::send( $from, $from, $cc_subject, $text ); + $status->merge( $ccStatus ); + } + + wfRunHooks( 'EmailUserComplete', array( $to, $from, $subject, $text ) ); + return $status; } - } - - static function newFromURL( $target, $text, $subject, $cc_me ) - { - $nt = Title::newFromURL( $target ); - $nu = User::newFromName( $nt->getText() ); - return new EmailUserForm( $nu, $text, $subject, $cc_me ); } } diff --git a/includes/specials/SpecialExport.php b/includes/specials/SpecialExport.php index b9a44d48..eaed2393 100644 --- a/includes/specials/SpecialExport.php +++ b/includes/specials/SpecialExport.php @@ -1,56 +1,64 @@ -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html /** + * Implements Special:Export + * + * Copyright © 2003-2008 Brion Vibber + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * * @file * @ingroup SpecialPage */ +/** + * A special page that allows users to export pages in a XML file + * + * @ingroup SpecialPage + */ class SpecialExport extends SpecialPage { - + private $curonly, $doExport, $pageLinkDepth, $templates; private $images; - + public function __construct() { parent::__construct( 'Export' ); } - + public function execute( $par ) { global $wgOut, $wgRequest, $wgSitename, $wgExportAllowListContributors; global $wgExportAllowHistory, $wgExportMaxHistory, $wgExportMaxLinkDepth; - global $wgExportFromNamespaces; - + global $wgExportFromNamespaces, $wgUser; + $this->setHeaders(); $this->outputHeader(); - + // Set some variables $this->curonly = true; $this->doExport = false; $this->templates = $wgRequest->getCheck( 'templates' ); $this->images = $wgRequest->getCheck( 'images' ); // Doesn't do anything yet $this->pageLinkDepth = $this->validateLinkDepth( - $wgRequest->getIntOrNull( 'pagelink-depth' ) ); + $wgRequest->getIntOrNull( 'pagelink-depth' ) + ); $nsindex = ''; - + if ( $wgRequest->getCheck( 'addcat' ) ) { $page = $wgRequest->getText( 'pages' ); $catname = $wgRequest->getText( 'catname' ); - + if ( $catname !== '' && $catname !== null && $catname !== false ) { $t = Title::makeTitleSafe( NS_MAIN, $catname ); if ( $t ) { @@ -67,7 +75,7 @@ class SpecialExport extends SpecialPage { else if( $wgRequest->getCheck( 'addns' ) && $wgExportFromNamespaces ) { $page = $wgRequest->getText( 'pages' ); $nsindex = $wgRequest->getText( 'nsindex', '' ); - + if ( strval( $nsindex ) !== '' ) { /** * Same implementation as above, so same @todo @@ -80,11 +88,13 @@ class SpecialExport extends SpecialPage { $page = $wgRequest->getText( 'pages' ); $this->curonly = $wgRequest->getCheck( 'curonly' ); $rawOffset = $wgRequest->getVal( 'offset' ); + if( $rawOffset ) { $offset = wfTimestamp( TS_MW, $rawOffset ); } else { $offset = null; } + $limit = $wgRequest->getInt( 'limit' ); $dir = $wgRequest->getVal( 'dir' ); $history = array( @@ -93,6 +103,7 @@ class SpecialExport extends SpecialPage { 'limit' => $wgExportMaxHistory, ); $historyCheck = $wgRequest->getCheck( 'history' ); + if ( $this->curonly ) { $history = WikiExporter::CURRENT; } elseif ( !$historyCheck ) { @@ -106,93 +117,101 @@ class SpecialExport extends SpecialPage { $history['dir'] = 'desc'; } } - + if( $page != '' ) $this->doExport = true; } else { - // Default to current-only for GET requests + // Default to current-only for GET requests. $page = $wgRequest->getText( 'pages', $par ); $historyCheck = $wgRequest->getCheck( 'history' ); + if( $historyCheck ) { $history = WikiExporter::FULL; } else { $history = WikiExporter::CURRENT; } - + if( $page != '' ) $this->doExport = true; } - + if( !$wgExportAllowHistory ) { // Override $history = WikiExporter::CURRENT; } - + $list_authors = $wgRequest->getCheck( 'listauthors' ); if ( !$this->curonly || !$wgExportAllowListContributors ) $list_authors = false ; - + if ( $this->doExport ) { $wgOut->disable(); + // Cancel output buffering and gzipping if set // This should provide safer streaming for pages with history wfResetOutputBuffers(); - header( "Content-type: application/xml; charset=utf-8" ); + $wgRequest->response()->header( "Content-type: application/xml; charset=utf-8" ); + if( $wgRequest->getCheck( 'wpDownload' ) ) { // Provide a sane filename suggestion $filename = urlencode( $wgSitename . '-' . wfTimestampNow() . '.xml' ); $wgRequest->response()->header( "Content-disposition: attachment;filename={$filename}" ); } + $this->doExport( $page, $history, $list_authors ); + return; } - + $wgOut->addWikiMsg( 'exporttext' ); - + $form = Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getTitle()->getLocalUrl( 'action=submit' ) ) ); - $form .= Xml::inputLabel( wfMsg( 'export-addcattext' ) , 'catname', 'catname', 40 ) . ' '; + $form .= Xml::inputLabel( wfMsg( 'export-addcattext' ) , 'catname', 'catname', 40 ) . ' '; $form .= Xml::submitButton( wfMsg( 'export-addcat' ), array( 'name' => 'addcat' ) ) . '
    '; - + if ( $wgExportFromNamespaces ) { - $form .= Xml::namespaceSelector( $nsindex, null, 'nsindex', wfMsg( 'export-addnstext' ) ) . ' '; + $form .= Xml::namespaceSelector( $nsindex, null, 'nsindex', wfMsg( 'export-addnstext' ) ) . ' '; $form .= Xml::submitButton( wfMsg( 'export-addns' ), array( 'name' => 'addns' ) ) . '
    '; } - + $form .= Xml::element( 'textarea', array( 'name' => 'pages', 'cols' => 40, 'rows' => 10 ), $page, false ); $form .= '
    '; - + if( $wgExportAllowHistory ) { $form .= Xml::checkLabel( wfMsg( 'exportcuronly' ), 'curonly', 'curonly', true ) . '
    '; } else { $wgOut->addHTML( wfMsgExt( 'exportnohistory', 'parse' ) ); } + $form .= Xml::checkLabel( wfMsg( 'export-templates' ), 'templates', 'wpExportTemplates', false ) . '
    '; + if( $wgExportMaxLinkDepth || $this->userCanOverrideExportDepth() ) { $form .= Xml::inputLabel( wfMsg( 'export-pagelinks' ), 'pagelink-depth', 'pagelink-depth', 20, 0 ) . '
    '; } // Enable this when we can do something useful exporting/importing image information. :) //$form .= Xml::checkLabel( wfMsg( 'export-images' ), 'images', 'wpExportImages', false ) . '
    '; $form .= Xml::checkLabel( wfMsg( 'export-download' ), 'wpDownload', 'wpDownload', true ) . '
    '; - - $form .= Xml::submitButton( wfMsg( 'export-submit' ), array( 'accesskey' => 's' ) ); + + $form .= Xml::submitButton( wfMsg( 'export-submit' ), $wgUser->getSkin()->tooltipAndAccessKeyAttribs( 'export' ) ); $form .= Xml::closeElement( 'form' ); + $wgOut->addHTML( $form ); } - - private function userCanOverrideExportDepth() { - global $wgUser; + private function userCanOverrideExportDepth() { + global $wgUser; return $wgUser->isAllowed( 'override-export-depth' ); } - + /** * Do the actual page exporting - * @param string $page User input on what page(s) to export - * @param mixed $history one of the WikiExporter history export constants + * + * @param $page String: user input on what page(s) to export + * @param $history Mixed: one of the WikiExporter history export constants + * @param $list_authors Boolean: Whether to add distinct author list (when + * not returning full history) */ private function doExport( $page, $history, $list_authors ) { - global $wgExportMaxHistory; - $pageSet = array(); // Inverted index of all pages to look up - + // Split up and normalize input foreach( explode( "\n", $page ) as $pageName ) { $pageName = trim( $pageName ); @@ -202,32 +221,33 @@ class SpecialExport extends SpecialPage { $pageSet[$title->getPrefixedText()] = true; } } - + // Set of original pages to pass on to further manipulation... $inputPages = array_keys( $pageSet ); - + // Look up any linked pages if asked... if( $this->templates ) { $pageSet = $this->getTemplates( $inputPages, $pageSet ); } - - if( $linkDepth = $this->pageLinkDepth ) { + $linkDepth = $this->pageLinkDepth; + if( $linkDepth ) { $pageSet = $this->getPageLinks( $inputPages, $pageSet, $linkDepth ); } - + /* // Enable this when we can do something useful exporting/importing image information. :) if( $this->images ) ) { $pageSet = $this->getImages( $inputPages, $pageSet ); } */ - + $pages = array_keys( $pageSet ); // Normalize titles to the same format and remove dupes, see bug 17374 foreach( $pages as $k => $v ) { $pages[$k] = str_replace( " ", "_", $v ); } + $pages = array_unique( $pages ); /* Ok, let's get to it... */ @@ -240,15 +260,17 @@ class SpecialExport extends SpecialPage { $lb = wfGetLBFactory()->newMainLB(); $db = $lb->getConnection( DB_SLAVE ); $buffer = WikiExporter::STREAM; - + // This might take a while... :D wfSuppressWarnings(); set_time_limit(0); wfRestoreWarnings(); } + $exporter = new WikiExporter( $db, $history, $buffer ); $exporter->list_authors = $list_authors; $exporter->openStream(); + foreach( $pages as $page ) { /* if( $wgExportMaxHistory && !$this->curonly ) { @@ -266,11 +288,12 @@ class SpecialExport extends SpecialPage { $title = Title::newFromText( $page ); if( is_null( $title ) ) continue; #TODO: perhaps output an tag or something. if( !$title->userCanRead() ) continue; #TODO: perhaps output an tag or something. - + $exporter->pageByTitle( $title ); } - + $exporter->closeStream(); + if( $lb ) { $lb->closeAll(); } @@ -278,52 +301,59 @@ class SpecialExport extends SpecialPage { private function getPagesFromCategory( $title ) { global $wgContLang; - + $name = $title->getDBkey(); - + $dbr = wfGetDB( DB_SLAVE ); - $res = $dbr->select( array('page', 'categorylinks' ), - array( 'page_namespace', 'page_title' ), - array('cl_from=page_id', 'cl_to' => $name ), - __METHOD__, array('LIMIT' => '5000')); - + $res = $dbr->select( + array( 'page', 'categorylinks' ), + array( 'page_namespace', 'page_title' ), + array( 'cl_from=page_id', 'cl_to' => $name ), + __METHOD__, + array( 'LIMIT' => '5000' ) + ); + $pages = array(); - while ( $row = $dbr->fetchObject( $res ) ) { + + foreach ( $res as $row ) { $n = $row->page_title; if ($row->page_namespace) { $ns = $wgContLang->getNsText( $row->page_namespace ); $n = $ns . ':' . $n; } - + $pages[] = $n; } - $dbr->freeResult($res); - return $pages; } - + private function getPagesFromNamespace( $nsindex ) { global $wgContLang; - + $dbr = wfGetDB( DB_SLAVE ); - $res = $dbr->select( 'page', array('page_namespace', 'page_title'), - array('page_namespace' => $nsindex), - __METHOD__, array('LIMIT' => '5000') ); - + $res = $dbr->select( + 'page', + array( 'page_namespace', 'page_title' ), + array( 'page_namespace' => $nsindex ), + __METHOD__, + array( 'LIMIT' => '5000' ) + ); + $pages = array(); - while ( $row = $dbr->fetchObject( $res ) ) { + + foreach ( $res as $row ) { $n = $row->page_title; - if ($row->page_namespace) { + + if ( $row->page_namespace ) { $ns = $wgContLang->getNsText( $row->page_namespace ); $n = $ns . ':' . $n; } - + $pages[] = $n; } - $dbr->freeResult($res); - return $pages; } + /** * Expand a list of pages to include templates used in those pages. * @param $inputPages array, list of titles to look up @@ -332,24 +362,28 @@ class SpecialExport extends SpecialPage { */ private function getTemplates( $inputPages, $pageSet ) { return $this->getLinks( $inputPages, $pageSet, - 'templatelinks', - array( 'tl_namespace AS namespace', 'tl_title AS title' ), - array( 'page_id=tl_from' ) ); + 'templatelinks', + array( 'tl_namespace AS namespace', 'tl_title AS title' ), + array( 'page_id=tl_from' ) + ); } - + /** * Validate link depth setting, if available. */ private function validateLinkDepth( $depth ) { - global $wgExportMaxLinkDepth, $wgExportMaxLinkDepthLimit; + global $wgExportMaxLinkDepth; + if( $depth < 0 ) { return 0; } + if ( !$this->userCanOverrideExportDepth() ) { if( $depth > $wgExportMaxLinkDepth ) { return $wgExportMaxLinkDepth; } } + /* * There's a HARD CODED limit of 5 levels of recursion here to prevent a * crazy-big export from being done by someone setting the depth @@ -357,58 +391,73 @@ class SpecialExport extends SpecialPage { */ return intval( min( $depth, 5 ) ); } - + /** Expand a list of pages to include pages linked to from that page. */ private function getPageLinks( $inputPages, $pageSet, $depth ) { - for( $depth=$depth; $depth>0; --$depth ) { - $pageSet = $this->getLinks( $inputPages, $pageSet, 'pagelinks', - array( 'pl_namespace AS namespace', 'pl_title AS title' ), - array( 'page_id=pl_from' ) ); + for(; $depth > 0; --$depth ) { + $pageSet = $this->getLinks( + $inputPages, $pageSet, 'pagelinks', + array( 'pl_namespace AS namespace', 'pl_title AS title' ), + array( 'page_id=pl_from' ) + ); $inputPages = array_keys( $pageSet ); } + return $pageSet; } - + /** * Expand a list of pages to include images used in those pages. + * * @param $inputPages array, list of titles to look up * @param $pageSet array, associative array indexed by titles for output + * * @return array associative array index by titles */ private function getImages( $inputPages, $pageSet ) { - return $this->getLinks( $inputPages, $pageSet, - 'imagelinks', - array( NS_FILE . ' AS namespace', 'il_to AS title' ), - array( 'page_id=il_from' ) ); + return $this->getLinks( + $inputPages, + $pageSet, + 'imagelinks', + array( NS_FILE . ' AS namespace', 'il_to AS title' ), + array( 'page_id=il_from' ) + ); } - + /** * Expand a list of pages to include items used in those pages. - * @private */ private function getLinks( $inputPages, $pageSet, $table, $fields, $join ) { $dbr = wfGetDB( DB_SLAVE ); + foreach( $inputPages as $page ) { $title = Title::newFromText( $page ); + if( $title ) { $pageSet[$title->getPrefixedText()] = true; /// @todo Fixme: May or may not be more efficient to batch these /// by namespace when given multiple input pages. $result = $dbr->select( - array( 'page', $table ), - $fields, - array_merge( $join, - array( - 'page_namespace' => $title->getNamespace(), - 'page_title' => $title->getDBkey() ) ), - __METHOD__ ); + array( 'page', $table ), + $fields, + array_merge( + $join, + array( + 'page_namespace' => $title->getNamespace(), + 'page_title' => $title->getDBkey() + ) + ), + __METHOD__ + ); + foreach( $result as $row ) { $template = Title::makeTitle( $row->namespace, $row->title ); $pageSet[$template->getPrefixedText()] = true; } } } + return $pageSet; } -} - + +} \ No newline at end of file diff --git a/includes/specials/SpecialFewestrevisions.php b/includes/specials/SpecialFewestrevisions.php index 65d76a65..c265ed38 100644 --- a/includes/specials/SpecialFewestrevisions.php +++ b/includes/specials/SpecialFewestrevisions.php @@ -1,5 +1,22 @@ hash = $hash; $this->filename = $filename; } @@ -72,7 +85,7 @@ function wfSpecialFileDuplicateSearch( $par = null ) { $hash = ''; $filename = isset( $par ) ? $par : $wgRequest->getText( 'filename' ); - $title = Title::newFromText( $filename ); + $title = Title::makeTitleSafe( NS_FILE, $filename ); if( $title && $title->getText() != '' ) { $dbr = wfGetDB( DB_SLAVE ); $image = $dbr->tableName( 'image' ); @@ -83,13 +96,12 @@ function wfSpecialFileDuplicateSearch( $par = null ) { if( $row !== false ) { $hash = $row[0]; } - $dbr->freeResult( $res ); } # Create the input form $wgOut->addHTML( Xml::openElement( 'form', array( 'id' => 'fileduplicatesearch', 'method' => 'get', 'action' => $wgScript ) ) . - Xml::hidden( 'title', SpecialPage::getTitleFor( 'FileDuplicateSearch' )->getPrefixedDbKey() ) . + Html::hidden( 'title', SpecialPage::getTitleFor( 'FileDuplicateSearch' )->getPrefixedDbKey() ) . Xml::openElement( 'fieldset' ) . Xml::element( 'legend', null, wfMsg( 'fileduplicatesearch-legend' ) ) . Xml::inputLabel( wfMsg( 'fileduplicatesearch-filename' ), 'filename', 'filename', 50, $filename ) . ' ' . diff --git a/includes/specials/SpecialFilepath.php b/includes/specials/SpecialFilepath.php index 8bc1c68b..8bb0890c 100644 --- a/includes/specials/SpecialFilepath.php +++ b/includes/specials/SpecialFilepath.php @@ -1,53 +1,81 @@ getText( 'file' ); + function __construct() { + parent::__construct( 'Filepath' ); + } - $title = Title::makeTitleSafe( NS_FILE, $file ); + function execute( $par ) { + global $wgRequest, $wgOut; - if ( ! $title instanceof Title || $title->getNamespace() != NS_FILE ) { - $cform = new FilepathForm( $title ); - $cform->execute(); - } else { - $file = wfFindFile( $title ); - if ( $file && $file->exists() ) { - $wgOut->redirect( $file->getURL() ); - } else { - $wgOut->setStatusCode( 404 ); - $cform = new FilepathForm( $title ); - $cform->execute(); - } - } -} + $this->setHeaders(); + $this->outputHeader(); -/** - * @ingroup SpecialPage - */ -class FilepathForm { - var $mTitle; + $file = !is_null( $par ) ? $par : $wgRequest->getText( 'file' ); - function FilepathForm( &$title ) { - $this->mTitle =& $title; + $title = Title::makeTitleSafe( NS_FILE, $file ); + + if ( ! $title instanceof Title || $title->getNamespace() != NS_FILE ) { + $this->showForm( $title ); + } else { + $file = wfFindFile( $title ); + if ( $file && $file->exists() ) { + $url = $file->getURL(); + $width = $wgRequest->getInt( 'width', -1 ); + $height = $wgRequest->getInt( 'height', -1 ); + if ( $width != -1 ) { + $mto = $file->transform( array( 'width' => $width, 'height' => $height ) ); + if ( $mto && !$mto->isError() ) { + $url = $mto->getURL(); + } + } + $wgOut->redirect( $url ); + } else { + $wgOut->setStatusCode( 404 ); + $this->showForm( $title ); + } + } } - function execute() { + function showForm( $title ) { global $wgOut, $wgScript; $wgOut->addHTML( - Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'id' => 'specialfilepath' ) ) . - Xml::openElement( 'fieldset' ) . - Xml::element( 'legend', null, wfMsg( 'filepath' ) ) . - Xml::hidden( 'title', SpecialPage::getTitleFor( 'Filepath' )->getPrefixedText() ) . - Xml::inputLabel( wfMsg( 'filepath-page' ), 'file', 'file', 25, is_object( $this->mTitle ) ? $this->mTitle->getText() : '' ) . ' ' . + Html::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'id' => 'specialfilepath' ) ) . + Html::openElement( 'fieldset' ) . + Html::element( 'legend', null, wfMsg( 'filepath' ) ) . + Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) . + Xml::inputLabel( wfMsg( 'filepath-page' ), 'file', 'file', 25, is_object( $title ) ? $title->getText() : '' ) . ' ' . Xml::submitButton( wfMsg( 'filepath-submit' ) ) . "\n" . - Xml::closeElement( 'fieldset' ) . - Xml::closeElement( 'form' ) + Html::closeElement( 'fieldset' ) . + Html::closeElement( 'form' ) ); } } diff --git a/includes/specials/SpecialImport.php b/includes/specials/SpecialImport.php index 248709a8..7d1cf0dd 100644 --- a/includes/specials/SpecialImport.php +++ b/includes/specials/SpecialImport.php @@ -1,7 +1,8 @@ + * Implements Special:Import + * + * Copyright © 2003,2005 Brion Vibber * http://www.mediawiki.org/ * * This program is free software; you can redistribute it and/or modify @@ -23,6 +24,11 @@ * @ingroup SpecialPage */ +/** + * MediaWiki page data importer + * + * @ingroup SpecialPage + */ class SpecialImport extends SpecialPage { private $interwiki = false; @@ -51,7 +57,6 @@ class SpecialImport extends SpecialPage { $this->outputHeader(); if ( wfReadOnly() ) { - global $wgOut; $wgOut->readOnlyPage(); return; } @@ -97,7 +102,7 @@ class SpecialImport extends SpecialPage { $this->pageLinkDepth = $wgExportMaxLinkDepth == 0 ? 0 : $wgRequest->getIntOrNull( 'pagelink-depth' ); if ( !$wgUser->matchEditToken( $wgRequest->getVal( 'editToken' ) ) ) { - $source = new WikiErrorMsg( 'import-token-mismatch' ); + $source = Status::newFatal( 'import-token-mismatch' ); } elseif ( $sourceName == 'upload' ) { $isUpload = true; if( $wgUser->isAllowed( 'importupload' ) ) { @@ -111,7 +116,7 @@ class SpecialImport extends SpecialPage { } $this->interwiki = $wgRequest->getVal( 'interwiki' ); if ( !in_array( $this->interwiki, $wgImportSources ) ) { - $source = new WikiErrorMsg( "import-invalid-interwiki" ); + $source = Status::newFatal( "import-invalid-interwiki" ); } else { $this->history = $wgRequest->getCheck( 'interwikiHistory' ); $this->frompage = $wgRequest->getText( "frompage" ); @@ -124,30 +129,35 @@ class SpecialImport extends SpecialPage { $this->pageLinkDepth ); } } else { - $source = new WikiErrorMsg( "importunknownsource" ); + $source = Status::newFatal( "importunknownsource" ); } - if( WikiError::isError( $source ) ) { - $wgOut->wrapWikiMsg( '

    $1

    ', array( 'importfailed', $source->getMessage() ) ); + if( !$source->isGood() ) { + $wgOut->wrapWikiMsg( "

    \n$1\n

    ", array( 'importfailed', $source->getWikiText() ) ); } else { $wgOut->addWikiMsg( "importstart" ); - $importer = new WikiImporter( $source ); + $importer = new WikiImporter( $source->value ); if( !is_null( $this->namespace ) ) { $importer->setTargetNamespace( $this->namespace ); } $reporter = new ImportReporter( $importer, $isUpload, $this->interwiki , $this->logcomment); + $exception = false; $reporter->open(); - $result = $importer->doImport(); - $resultCount = $reporter->close(); + try { + $importer->doImport(); + } catch ( MWException $e ) { + $exception = $e; + } + $result = $reporter->close(); - if( WikiError::isError( $result ) ) { + if ( $exception ) { # No source or XML parse error - $wgOut->wrapWikiMsg( '

    $1

    ', array( 'importfailed', $result->getMessage() ) ); - } elseif( WikiError::isError( $resultCount ) ) { + $wgOut->wrapWikiMsg( "

    \n$1\n

    ", array( 'importfailed', $exception->getMessage() ) ); + } elseif( !$result->isGood() ) { # Zero revisions - $wgOut->wrapWikiMsg( '

    $1

    ', array( 'importfailed', $resultCount->getMessage() ) ); + $wgOut->wrapWikiMsg( "

    \n$1\n

    ", array( 'importfailed', $result->getWikiText() ) ); } else { # Success! $wgOut->addWikiMsg( 'importsuccess' ); @@ -157,7 +167,7 @@ class SpecialImport extends SpecialPage { } private function showForm() { - global $wgUser, $wgOut, $wgRequest, $wgImportSources, $wgExportMaxLinkDepth; + global $wgUser, $wgOut, $wgImportSources, $wgExportMaxLinkDepth; $action = $this->getTitle()->getLocalUrl( array( 'action' => 'submit' ) ); @@ -167,8 +177,8 @@ class SpecialImport extends SpecialPage { Xml::fieldset( wfMsg( 'import-upload' ) ). Xml::openElement( 'form', array( 'enctype' => 'multipart/form-data', 'method' => 'post', 'action' => $action, 'id' => 'mw-import-upload-form' ) ) . - Xml::hidden( 'action', 'submit' ) . - Xml::hidden( 'source', 'upload' ) . + Html::hidden( 'action', 'submit' ) . + Html::hidden( 'source', 'upload' ) . Xml::openElement( 'table', array( 'id' => 'mw-import-table' ) ) . " @@ -195,7 +205,7 @@ class SpecialImport extends SpecialPage { " " . Xml::closeElement( 'table' ). - Xml::hidden( 'editToken', $wgUser->editToken() ) . + Html::hidden( 'editToken', $wgUser->editToken() ) . Xml::closeElement( 'form' ) . Xml::closeElement( 'fieldset' ) ); @@ -223,9 +233,9 @@ class SpecialImport extends SpecialPage { Xml::fieldset( wfMsg( 'importinterwiki' ) ) . Xml::openElement( 'form', array( 'method' => 'post', 'action' => $action, 'id' => 'mw-import-interwiki-form' ) ) . wfMsgExt( 'import-interwiki-text', array( 'parse' ) ) . - Xml::hidden( 'action', 'submit' ) . - Xml::hidden( 'source', 'interwiki' ) . - Xml::hidden( 'editToken', $wgUser->editToken() ) . + Html::hidden( 'action', 'submit' ) . + Html::hidden( 'source', 'interwiki' ) . + Html::hidden( 'editToken', $wgUser->editToken() ) . Xml::openElement( 'table', array( 'id' => 'mw-import-table' ) ) . " " . @@ -280,7 +290,7 @@ class SpecialImport extends SpecialPage { " . - Xml::submitButton( wfMsg( 'import-interwiki-submit' ), array( 'accesskey' => 's' ) ) . + Xml::submitButton( wfMsg( 'import-interwiki-submit' ), $wgUser->getSkin()->tooltipAndAccessKeyAttribs( 'import' ) ) . " " . Xml::closeElement( 'table' ). @@ -297,9 +307,15 @@ class SpecialImport extends SpecialPage { */ class ImportReporter { private $reason=false; + private $mOriginalLogCallback = null; + private $mOriginalPageOutCallback = null; + private $mLogItemCount = 0; function __construct( $importer, $upload, $interwiki , $reason=false ) { - $importer->setPageOutCallback( array( $this, 'reportPage' ) ); + $this->mOriginalPageOutCallback = + $importer->setPageOutCallback( array( $this, 'reportPage' ) ); + $this->mOriginalLogCallback = + $importer->setLogItemCallback( array( $this, 'reportLogItem' ) ); $this->mPageCount = 0; $this->mIsUpload = $upload; $this->mInterwiki = $interwiki; @@ -310,9 +326,19 @@ class ImportReporter { global $wgOut; $wgOut->addHTML( "
      \n" ); } + + function reportLogItem( /* ... */ ) { + $this->mLogItemCount++; + if ( is_callable( $this->mOriginalLogCallback ) ) { + call_user_func_array( $this->mOriginalLogCallback, func_get_args() ); + } + } - function reportPage( $title, $origTitle, $revisionCount, $successCount ) { + function reportPage( $title, $origTitle, $revisionCount, $successCount, $pageInfo ) { global $wgOut, $wgUser, $wgLang, $wgContLang; + + $args = func_get_args(); + call_user_func_array( $this->mOriginalPageOutCallback, $args ); $skin = $wgUser->getSkin(); @@ -362,13 +388,18 @@ class ImportReporter { } function close() { - global $wgOut; - if( $this->mPageCount == 0 ) { + global $wgOut, $wgLang; + + if ( $this->mLogItemCount > 0 ) { + $msg = wfMsgExt( 'imported-log-entries', 'parseinline', + $wgLang->formatNum( $this->mLogItemCount ) ); + $wgOut->addHTML( Xml::tags( 'li', null, $msg ) ); + } elseif( $this->mPageCount == 0 && $this->mLogItemCount == 0 ) { $wgOut->addHTML( "
    \n" ); - return new WikiErrorMsg( "importnopages" ); + return Status::newFatal( 'importnopages' ); } $wgOut->addHTML( "\n" ); - return $this->mPageCount; + return Status::newGood( $this->mPageCount ); } } diff --git a/includes/specials/SpecialIpblocklist.php b/includes/specials/SpecialIpblocklist.php index dfdcf1a7..24d7f008 100644 --- a/includes/specials/SpecialIpblocklist.php +++ b/includes/specials/SpecialIpblocklist.php @@ -1,103 +1,134 @@ . - * @todo document + * A special page that lists existing blocks and allows users with the 'block' + * permission to remove blocks + * + * @ingroup SpecialPage */ -function wfSpecialIpblocklist( $ip = '' ) { - global $wgUser, $wgOut, $wgRequest; - $ip = $wgRequest->getVal( 'ip', $ip ); - $ip = trim( $wgRequest->getVal( 'wpUnblockAddress', $ip ) ); - $id = $wgRequest->getVal( 'id' ); - $reason = $wgRequest->getText( 'wpUnblockReason' ); - $action = $wgRequest->getText( 'action' ); - $successip = $wgRequest->getVal( 'successip' ); - - $ipu = new IPUnblockForm( $ip, $id, $reason ); - - if( $action == 'unblock' ) { - # Check permissions - if( !$wgUser->isAllowed( 'block' ) ) { - $wgOut->permissionRequired( 'block' ); - return; - } - # Check for database lock - if( wfReadOnly() ) { - $wgOut->readOnlyPage(); - return; - } - # Show unblock form - $ipu->showForm( '' ); - } elseif( $action == 'submit' && $wgRequest->wasPosted() - && $wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ) ) { - # Check permissions - if( !$wgUser->isAllowed( 'block' ) ) { - $wgOut->permissionRequired( 'block' ); - return; - } - # Check for database lock - if( wfReadOnly() ) { - $wgOut->readOnlyPage(); - return; - } - # Remove blocks and redirect user to success page - $ipu->doSubmit(); - } elseif( $action == 'success' ) { - # Inform the user of a successful unblock - # (No need to check permissions or locks here, - # if something was done, then it's too late!) - if ( substr( $successip, 0, 1) == '#' ) { - // A block ID was unblocked - $ipu->showList( $wgOut->parse( wfMsg( 'unblocked-id', $successip ) ) ); - } else { - // A username/IP was unblocked - $ipu->showList( $wgOut->parse( wfMsg( 'unblocked', $successip ) ) ); - } - } else { - # Just show the block list - $ipu->showList( '' ); +class IPUnblockForm extends SpecialPage { + var $ip, $reason, $id; + var $hideuserblocks, $hidetempblocks, $hideaddressblocks; + + function __construct() { + parent::__construct( 'Ipblocklist' ); } -} + /** + * Main execution point + * + * @param $ip part of title: Special:Ipblocklist/. + */ + function execute( $ip ) { + global $wgUser, $wgOut, $wgRequest; -/** - * implements Special:ipblocklist GUI - * @ingroup SpecialPage - */ -class IPUnblockForm { - var $ip, $reason, $id; + $this->setHeaders(); + $this->outputHeader(); - function IPUnblockForm( $ip, $id, $reason ) { - global $wgRequest; - $this->ip = strtr( $ip, '_', ' ' ); - $this->id = $id; - $this->reason = $reason; + $ip = $wgRequest->getVal( 'ip', $ip ); + $this->ip = trim( $wgRequest->getVal( 'wpUnblockAddress', $ip ) ); + $this->id = $wgRequest->getVal( 'id' ); + $this->reason = $wgRequest->getText( 'wpUnblockReason' ); $this->hideuserblocks = $wgRequest->getBool( 'hideuserblocks' ); $this->hidetempblocks = $wgRequest->getBool( 'hidetempblocks' ); $this->hideaddressblocks = $wgRequest->getBool( 'hideaddressblocks' ); + + $action = $wgRequest->getText( 'action' ); + $successip = $wgRequest->getVal( 'successip' ); + + if( $action == 'unblock' || $action == 'submit' && $wgRequest->wasPosted() ) { + # Check permissions + if( !$wgUser->isAllowed( 'block' ) ) { + $wgOut->permissionRequired( 'block' ); + return; + } + # Check for database lock + if( wfReadOnly() ) { + $wgOut->readOnlyPage(); + return; + } + + # bug 15810: blocked admins should have limited access here + if ( $wgUser->isBlocked() ) { + if ( $this->id ) { + # This doesn't pick up on autoblocks, but admins + # should have the ipblock-exempt permission anyway + $block = Block::newFromID( $this->id ); + $user = User::newFromName( $block->mAddress ); + } else { + $user = User::newFromName( $this->ip ); + } + $status = IPBlockForm::checkUnblockSelf( $user ); + if ( $status !== true ) { + throw new ErrorPageError( 'badaccess', $status ); + } + } + + if( $action == 'unblock' ){ + # Show unblock form + $this->showForm( '' ); + } elseif( $action == 'submit' + && $wgRequest->wasPosted() + && $wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ) ) + { + # Remove blocks and redirect user to success page + $this->doSubmit(); + } + + } elseif( $action == 'success' ) { + # Inform the user of a successful unblock + # (No need to check permissions or locks here, + # if something was done, then it's too late!) + if ( substr( $successip, 0, 1) == '#' ) { + // A block ID was unblocked + $this->showList( $wgOut->parse( wfMsg( 'unblocked-id', $successip ) ) ); + } else { + // A username/IP was unblocked + $this->showList( $wgOut->parse( wfMsg( 'unblocked', $successip ) ) ); + } + } else { + # Just show the block list + $this->showList( '' ); + } } /** * Generates the unblock form + * * @param $err string: error message * @return $out string: HTML form */ function showForm( $err ) { global $wgOut, $wgUser, $wgSysopUserBans; - $wgOut->setPagetitle( wfMsg( 'unblockip' ) ); $wgOut->addWikiMsg( 'unblockiptext' ); - $titleObj = SpecialPage::getTitleFor( "Ipblocklist" ); - $action = $titleObj->getLocalURL( "action=submit" ); + $action = $this->getTitle()->getLocalURL( 'action=submit' ); - if ( $err != "" ) { - $wgOut->setSubtitle( wfMsg( "formerror" ) ); - $wgOut->addWikiText( Xml::tags( 'span', array( 'class' => 'error' ), $err ) . "\n" ); + if ( $err != '' ) { + $wgOut->setSubtitle( wfMsg( 'formerror' ) ); + $wgOut->addWikiText( Html::rawElement( 'span', array( 'class' => 'error' ), $err ) . "\n" ); } $addressPart = false; @@ -106,7 +137,7 @@ class IPUnblockForm { if ( $block ) { $encName = htmlspecialchars( $block->getRedactedName() ); $encId = $this->id; - $addressPart = $encName . Xml::hidden( 'id', $encId ); + $addressPart = $encName . Html::hidden( 'id', $encId ); $ipa = wfMsgHtml( $wgSysopUserBans ? 'ipadressorusername' : 'ipaddress' ); } } @@ -116,10 +147,10 @@ class IPUnblockForm { } $wgOut->addHTML( - Xml::openElement( 'form', array( 'method' => 'post', 'action' => $action, 'id' => 'unblockip' ) ) . - Xml::openElement( 'fieldset' ) . - Xml::element( 'legend', null, wfMsg( 'ipb-unblock' ) ) . - Xml::openElement( 'table', array( 'id' => 'mw-unblock-table' ) ). + Html::openElement( 'form', array( 'method' => 'post', 'action' => $action, 'id' => 'unblockip' ) ) . + Html::openElement( 'fieldset' ) . + Html::element( 'legend', null, wfMsg( 'ipb-unblock' ) ) . + Html::openElement( 'table', array( 'id' => 'mw-unblock-table' ) ). " {$ipa} @@ -137,15 +168,15 @@ class IPUnblockForm { " -   +   " . Xml::submitButton( wfMsg( 'ipusubmit' ), array( 'name' => 'wpBlock', 'tabindex' => '3' ) ) . " " . - Xml::closeElement( 'table' ) . - Xml::closeElement( 'fieldset' ) . - Xml::hidden( 'wpEditToken', $wgUser->editToken() ) . - Xml::closeElement( 'form' ) . "\n" + Html::closeElement( 'table' ) . + Html::closeElement( 'fieldset' ) . + Html::hidden( 'wpEditToken', $wgUser->editToken() ) . + Html::closeElement( 'form' ) . "\n" ); } @@ -162,34 +193,35 @@ class IPUnblockForm { * case it contains the range $ip is part of. * @return array array(message key, parameters) on failure, empty array on success */ - - static function doUnblock(&$id, &$ip, &$reason, &$range = null, $blocker=null) { + public static function doUnblock( &$id, &$ip, &$reason, &$range = null, $blocker = null ) { if ( $id ) { $block = Block::newFromID( $id ); if ( !$block ) { - return array('ipb_cant_unblock', htmlspecialchars($id)); + return array( 'ipb_cant_unblock', htmlspecialchars( $id ) ); } $ip = $block->getRedactedName(); } else { - $block = new Block(); $ip = trim( $ip ); if ( substr( $ip, 0, 1 ) == "#" ) { $id = substr( $ip, 1 ); $block = Block::newFromID( $id ); if( !$block ) { - return array('ipb_cant_unblock', htmlspecialchars($id)); + return array( 'ipb_cant_unblock', htmlspecialchars( $id ) ); } $ip = $block->getRedactedName(); } else { + # FIXME: do proper sanitisation/cleanup here + $ip = str_replace( '_', ' ', $ip ); + $block = Block::newFromDB( $ip ); if ( !$block ) { - return array('ipb_cant_unblock', htmlspecialchars($id)); + return array( 'ipb_cant_unblock', htmlspecialchars( $id ) ); } if( $block->mRangeStart != $block->mRangeEnd && !strstr( $ip, "/" ) ) { /* If the specified IP is a single address, and the block is * a range block, don't unblock the range. */ $range = $block->mAddress; - return array('ipb_blocked_as_range', $ip, $range); + return array( 'ipb_blocked_as_range', $ip, $range ); } } } @@ -198,13 +230,13 @@ class IPUnblockForm { # If the name was hidden and the blocking user cannot hide # names, then don't allow any block removals... - if( $blocker && $block->mHideName && !$blocker->isAllowed('hideuser') ) { - return array('ipb_cant_unblock', htmlspecialchars($id)); + if( $blocker && $block->mHideName && !$blocker->isAllowed( 'hideuser' ) ) { + return array( 'ipb_cant_unblock', htmlspecialchars( $id ) ); } # Delete block if ( !$block->delete() ) { - return array('ipb_cant_unblock', htmlspecialchars($id)); + return array( 'ipb_cant_unblock', htmlspecialchars( $id ) ); } # Unset _deleted fields as needed @@ -220,23 +252,23 @@ class IPUnblockForm { function doSubmit() { global $wgOut, $wgUser; - $retval = self::doUnblock($this->id, $this->ip, $this->reason, $range, $wgUser); - if( !empty($retval) ) { - $key = array_shift($retval); - $this->showForm(wfMsgReal($key, $retval)); + + $retval = self::doUnblock( $this->id, $this->ip, $this->reason, $range, $wgUser ); + if( !empty( $retval ) ) { + $key = array_shift( $retval ); + $this->showForm( wfMsgReal( $key, $retval ) ); return; } + # Report to the user - $titleObj = SpecialPage::getTitleFor( "Ipblocklist" ); - $success = $titleObj->getFullURL( "action=success&successip=" . urlencode( $this->ip ) ); + $success = $this->getTitle()->getFullURL( 'action=success&successip=' . urlencode( $this->ip ) ); $wgOut->redirect( $success ); } function showList( $msg ) { global $wgOut, $wgUser; - $wgOut->setPagetitle( wfMsg( "ipblocklist" ) ); - if ( $msg != "" ) { + if ( $msg != '' ) { $wgOut->setSubtitle( $msg ); } @@ -246,7 +278,6 @@ class IPUnblockForm { } $conds = array(); - $matches = array(); // Is user allowed to see all the blocks? if ( !$wgUser->isAllowed( 'hideuser' ) ) $conds['ipb_deleted'] = 0; @@ -255,25 +286,26 @@ class IPUnblockForm { } elseif ( substr( $this->ip, 0, 1 ) == '#' ) { $conds['ipb_id'] = substr( $this->ip, 1 ); // Single IPs - } elseif ( IP::isIPAddress($this->ip) && strpos($this->ip,'/') === false ) { - if( $iaddr = IP::toHex($this->ip) ) { + } elseif ( IP::isIPAddress( $this->ip ) && strpos( $this->ip, '/' ) === false ) { + $iaddr = IP::toHex( $this->ip ); + if( $iaddr ) { # Only scan ranges which start in this /16, this improves search speed # Blocks should not cross a /16 boundary. $range = substr( $iaddr, 0, 4 ); // Fixme -- encapsulate this sort of query-building. $dbr = wfGetDB( DB_SLAVE ); - $encIp = $dbr->addQuotes( IP::sanitizeIP($this->ip) ); + $encIp = $dbr->addQuotes( IP::sanitizeIP( $this->ip ) ); $encAddr = $dbr->addQuotes( $iaddr ); $conds[] = "(ipb_address = $encIp) OR (ipb_range_start" . $dbr->buildLike( $range, $dbr->anyString() ) . " AND ipb_range_start <= $encAddr AND ipb_range_end >= $encAddr)"; } else { - $conds['ipb_address'] = IP::sanitizeIP($this->ip); + $conds['ipb_address'] = IP::sanitizeIP( $this->ip ); } $conds['ipb_auto'] = 0; // IP range - } elseif ( IP::isIPAddress($this->ip) ) { + } elseif ( IP::isIPAddress( $this->ip ) ) { $conds['ipb_address'] = Block::normaliseRange( $this->ip ); $conds['ipb_auto'] = 0; } else { @@ -315,7 +347,7 @@ class IPUnblockForm { if ( $pager->getNumRows() ) { $wgOut->addHTML( $pager->getNavigationBar() . - Xml::tags( 'ul', null, $pager->getBody() ) . + Html::rawElement( 'ul', null, $pager->getBody() ) . $pager->getNavigationBar() ); } elseif ( $this->ip != '') { @@ -338,7 +370,7 @@ class IPUnblockForm { } function searchForm() { - global $wgScript, $wgRequest, $wgLang; + global $wgScript, $wgLang; $showhide = array( wfMsg( 'show' ), wfMsg( 'hide' ) ); $nondefaults = array(); @@ -365,30 +397,32 @@ class IPUnblockForm { $hl = $wgLang->pipeList( $links ); return - Xml::tags( 'form', array( 'action' => $wgScript ), - Xml::hidden( 'title', SpecialPage::getTitleFor( 'Ipblocklist' )->getPrefixedDbKey() ) . - Xml::openElement( 'fieldset' ) . - Xml::element( 'legend', null, wfMsg( 'ipblocklist-legend' ) ) . + Html::rawElement( 'form', array( 'action' => $wgScript ), + Html::hidden( 'title', $this->getTitle()->getPrefixedDbKey() ) . + Html::openElement( 'fieldset' ) . + Html::element( 'legend', null, wfMsg( 'ipblocklist-legend' ) ) . Xml::inputLabel( wfMsg( 'ipblocklist-username' ), 'ip', 'ip', /* size */ false, $this->ip ) . - ' ' . + ' ' . Xml::submitButton( wfMsg( 'ipblocklist-submit' ) ) . '
    ' . $hl . - Xml::closeElement( 'fieldset' ) + Html::closeElement( 'fieldset' ) ); } /** * Makes change an option link which carries all the other options + * * @param $title see Title - * @param $override - * @param $options + * @param $override Array: special query string options, will override the + * ones in $options + * @param $options Array: query string options + * @param $active Boolean: whether to display the link in bold */ function makeOptionsLink( $title, $override, $options, $active = false ) { global $wgUser; $sk = $wgUser->getSkin(); $params = $override + $options; - $ipblocklist = SpecialPage::getTitleFor( 'Ipblocklist' ); - return $sk->link( $ipblocklist, htmlspecialchars( $title ), + return $sk->link( $this->getTitle(), htmlspecialchars( $title ), ( $active ? array( 'style'=>'font-weight: bold;' ) : array() ), $params, array( 'known' ) ); } @@ -453,11 +487,10 @@ class IPUnblockForm { $line = wfMsgReplaceArgs( $msg['blocklistline'], array( $formattedTime, $blocker, $target, $properties ) ); - $unblocklink = ''; $changeblocklink = ''; $toolLinks = ''; if ( $wgUser->isAllowed( 'block' ) ) { - $unblocklink = $sk->link( SpecialPage::getTitleFor( 'Ipblocklist' ), + $unblocklink = $sk->link( $this->getTitle(), $msg['unblocklink'], array(), array( 'action' => 'unblock', 'id' => $block->mId ), @@ -513,7 +546,7 @@ class IPBlocklistPager extends ReverseChronologicalPager { # Faster way # Usernames and titles are in fact related by a simple substitution of space -> underscore # The last few lines of Title::secureAndSplit() tell the story. - while ( $row = $this->mResult->fetchObject() ) { + foreach ( $this->mResult as $row ) { $name = str_replace( ' ', '_', $row->ipb_by_text ); $lb->add( NS_USER, $name ); $lb->add( NS_USER_TALK, $name ); diff --git a/includes/specials/SpecialLinkSearch.php b/includes/specials/SpecialLinkSearch.php index 70b2257a..9dee9d5a 100644 --- a/includes/specials/SpecialLinkSearch.php +++ b/includes/specials/SpecialLinkSearch.php @@ -1,11 +1,27 @@ getVal( 'target', $par ); $namespace = $GLOBALS['wgRequest']->getIntorNull( 'namespace', null ); @@ -44,19 +60,18 @@ function wfSpecialLinkSearch( $par ) { $protocol = ''; } - $wgOut->allowClickjacking(); - $self = Title::makeTitle( NS_SPECIAL, 'Linksearch' ); - + + $wgOut->allowClickjacking(); $wgOut->addWikiMsg( 'linksearch-text', '' . $wgLang->commaList( $wgUrlProtocols ) . '' ); - $s = Xml::openElement( 'form', array( 'id' => 'mw-linksearch-form', 'method' => 'get', 'action' => $GLOBALS['wgScript'] ) ) . - Xml::hidden( 'title', $self->getPrefixedDbKey() ) . + $s = Xml::openElement( 'form', array( 'id' => 'mw-linksearch-form', 'method' => 'get', 'action' => $GLOBALS['wgScript'] ) ) . + Html::hidden( 'title', $self->getPrefixedDbKey() ) . '
    ' . Xml::element( 'legend', array(), wfMsg( 'linksearch' ) ) . Xml::inputLabel( wfMsg( 'linksearch-pat' ), 'target', 'target', 50, $target ) . ' '; if ( !$wgMiserMode ) { $s .= Xml::label( wfMsg( 'linksearch-ns' ), 'namespace' ) . ' ' . - XML::namespaceSelector( $namespace, '' ); + Xml::namespaceSelector( $namespace, '' ); } $s .= Xml::submitButton( wfMsg( 'linksearch-ok' ) ) . '
    ' . @@ -73,6 +88,9 @@ function wfSpecialLinkSearch( $par ) { } } +/** + * @ingroup SpecialPage + */ class LinkSearchPage extends QueryPage { function setParams( $params ) { $this->mQuery = $params['query']; @@ -98,8 +116,9 @@ class LinkSearchPage extends QueryPage { $field = 'el_index'; $rv = LinkFilter::makeLikeArray( $query , $prot ); if ($rv === false) { - //makeLike doesn't handle wildcard in IP, so we'll have to munge here. + // LinkFilter doesn't handle wildcard in IP, so we'll have to munge here. if (preg_match('/^(:?[0-9]{1,3}\.)+\*\s*$|^(:?[0-9]{1,3}\.){3}[0-9]{1,3}:[0-9]*\*\s*$/', $query)) { + $dbr = wfGetDB( DB_SLAVE ); $rv = array( $prot . rtrim($query, " \t*"), $dbr->anyString() ); $field = 'el_to'; } @@ -162,7 +181,7 @@ class LinkSearchPage extends QueryPage { */ function doQuery( $offset, $limit, $shownavigation=true ) { global $wgOut; - list( $this->mMungedQuery, $clause ) = LinkSearchPage::mungeQuery( $this->mQuery, $this->mProt ); + list( $this->mMungedQuery, ) = LinkSearchPage::mungeQuery( $this->mQuery, $this->mProt ); if( $this->mMungedQuery === false ) { $wgOut->addWikiMsg( 'linksearch-error' ); } else { diff --git a/includes/specials/SpecialListfiles.php b/includes/specials/SpecialListfiles.php index b9332422..350e833b 100644 --- a/includes/specials/SpecialListfiles.php +++ b/includes/specials/SpecialListfiles.php @@ -1,16 +1,30 @@ getForm(); $body = $pager->getBody(); @@ -24,21 +38,32 @@ function wfSpecialListfiles() { class ImageListPager extends TablePager { var $mFieldNames = null; var $mQueryConds = array(); - - function __construct() { + var $mUserName = null; + + function __construct( $par = null ) { global $wgRequest, $wgMiserMode; if ( $wgRequest->getText( 'sort', 'img_date' ) == 'img_date' ) { $this->mDefaultDirection = true; } else { $this->mDefaultDirection = false; } + + $userName = $wgRequest->getText( 'user', $par ); + if ( $userName ) { + $nt = Title::newFromText( $userName, NS_USER ); + if ( !is_null( $nt ) ) { + $this->mUserName = $nt->getText(); + $this->mQueryConds['img_user_text'] = $this->mUserName; + } + } + $search = $wgRequest->getText( 'ilsearch' ); if ( $search != '' && !$wgMiserMode ) { $nt = Title::newFromURL( $search ); - if( $nt ) { + if ( $nt ) { $dbr = wfGetDB( DB_SLAVE ); - $this->mQueryConds = array( 'LOWER(img_name)' . $dbr->buildLike( $dbr->anyString(), - strtolower( $nt->getDBkey() ), $dbr->anyString() ) ); + $this->mQueryConds[] = 'LOWER(img_name)' . $dbr->buildLike( $dbr->anyString(), + strtolower( $nt->getDBkey() ), $dbr->anyString() ); } } @@ -49,6 +74,7 @@ class ImageListPager extends TablePager { if ( !$this->mFieldNames ) { global $wgMiserMode; $this->mFieldNames = array( + 'thumb' => wfMsg( 'listfiles_thumb' ), 'img_timestamp' => wfMsg( 'listfiles_date' ), 'img_name' => wfMsg( 'listfiles_name' ), 'img_user_text' => wfMsg( 'listfiles_user' ), @@ -63,7 +89,11 @@ class ImageListPager extends TablePager { } function isFieldSortable( $field ) { - static $sortable = array( 'img_timestamp', 'img_name', 'img_size' ); + static $sortable = array( 'img_timestamp', 'img_name' ); + if ( $field == 'img_size' ) { + # No index for both img_size and img_user_text + return !isset( $this->mQueryConds['img_user_text'] ); + } return in_array( $field, $sortable ); } @@ -71,6 +101,7 @@ class ImageListPager extends TablePager { $tables = array( 'image' ); $fields = array_keys( $this->getFieldNames() ); $fields[] = 'img_user'; + $fields[array_search('thumb', $fields)] = 'img_name as thumb'; $options = $join_conds = array(); # Depends on $wgMiserMode @@ -78,9 +109,11 @@ class ImageListPager extends TablePager { $tables[] = 'oldimage'; # Need to rewrite this one - foreach ( $fields as &$field ) - if ( $field == 'count' ) + foreach ( $fields as &$field ) { + if ( $field == 'count' ) { $field = 'COUNT(oi_archive_name) as count'; + } + } unset( $field ); $dbr = wfGetDB( DB_SLAVE ); @@ -110,7 +143,7 @@ class ImageListPager extends TablePager { if ( $this->mResult->numRows() ) { $lb = new LinkBatch; $this->mResult->seek( 0 ); - while ( $row = $this->mResult->fetchObject() ) { + foreach ( $this->mResult as $row ) { if ( $row->img_user ) { $lb->add( NS_USER, str_replace( ' ', '_', $row->img_user_text ) ); } @@ -124,14 +157,18 @@ class ImageListPager extends TablePager { function formatValue( $field, $value ) { global $wgLang; switch ( $field ) { + case 'thumb': + $file = wfLocalFile( $value ); + $thumb = $file->transform( array( 'width' => 180 ) ); + return $thumb->toHtml( array( 'desc-link' => true ) ); case 'img_timestamp': return htmlspecialchars( $wgLang->timeanddate( $value, true ) ); case 'img_name': static $imgfile = null; if ( $imgfile === null ) $imgfile = wfMsg( 'imgfile' ); - $name = $this->mCurrentRow->img_name; - $link = $this->getSkin()->linkKnown( Title::makeTitle( NS_FILE, $name ), $value ); + $filePage = Title::makeTitle( NS_FILE, $value ); + $link = $this->getSkin()->linkKnown( $filePage, htmlspecialchars( $filePage->getText() ) ); $image = wfLocalFile( $value ); $url = $image->getURL(); $download = Xml::element('a', array( 'href' => $url ), $imgfile ); @@ -158,21 +195,26 @@ class ImageListPager extends TablePager { function getForm() { global $wgRequest, $wgScript, $wgMiserMode; $search = $wgRequest->getText( 'ilsearch' ); - - $s = Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'id' => 'mw-listfiles-form' ) ) . - Xml::openElement( 'fieldset' ) . - Xml::element( 'legend', null, wfMsg( 'listfiles' ) ) . - Xml::tags( 'label', null, wfMsgHtml( 'table_pager_limit', $this->getLimitSelect() ) ); - + $inputForm = array(); + $inputForm['table_pager_limit_label'] = $this->getLimitSelect(); if ( !$wgMiserMode ) { - $s .= "
    \n" . - Xml::inputLabel( wfMsg( 'listfiles_search_for' ), 'ilsearch', 'mw-ilsearch', 20, $search ); + $inputForm['listfiles_search_for'] = Html::input( 'ilsearch', $search, 'text', array( + 'size' => '40', + 'maxlength' => '255', + 'id' => 'mw-ilsearch', + ) ); } - $s .= ' ' . - Xml::submitButton( wfMsg( 'table_pager_limit_submit' ) ) ."\n" . - $this->getHiddenFields( array( 'limit', 'ilsearch' ) ) . - Xml::closeElement( 'fieldset' ) . - Xml::closeElement( 'form' ) . "\n"; + $inputForm['username'] = Html::input( 'user', $this->mUserName, 'text', array( + 'size' => '40', + 'maxlength' => '255', + 'id' => 'mw-listfiles-user', + ) ); + $s = Html::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'id' => 'mw-listfiles-form' ) ) . + Xml::fieldset( wfMsg( 'listfiles' ) ) . + Xml::buildForm( $inputForm, 'table_pager_limit_submit' ) . + $this->getHiddenFields( array( 'limit', 'ilsearch', 'user' ) ) . + Html::closeElement( 'fieldset' ) . + Html::closeElement( 'form' ) . "\n"; return $s; } @@ -187,4 +229,25 @@ class ImageListPager extends TablePager { function getSortHeaderClass() { return 'listfiles_sort ' . parent::getSortHeaderClass(); } + + function getPagingQueries() { + $queries = parent::getPagingQueries(); + if ( !is_null( $this->mUserName ) ) { + # Append the username to the query string + foreach ( $queries as &$query ) { + $query['user'] = $this->mUserName; + } + } + return $queries; + } + + function getDefaultQuery() { + $queries = parent::getDefaultQuery(); + if ( !isset( $queries['user'] ) + && !is_null( $this->mUserName ) ) + { + $queries['user'] = $this->mUserName; + } + return $queries; + } } diff --git a/includes/specials/SpecialListgrouprights.php b/includes/specials/SpecialListgrouprights.php index 83724a4f..910ffd08 100644 --- a/includes/specials/SpecialListgrouprights.php +++ b/includes/specials/SpecialListgrouprights.php @@ -1,4 +1,25 @@ loadAllMessages(); $this->setHeaders(); $this->outputHeader(); @@ -40,8 +60,23 @@ class SpecialListGroupRights extends SpecialPage { '' ); - foreach( $wgGroupPermissions as $group => $permissions ) { - $groupname = ( $group == '*' ) ? 'all' : $group; // Replace * with a more descriptive groupname + $allGroups = array_unique( array_merge( + array_keys( $wgGroupPermissions ), + array_keys( $wgRevokePermissions ), + array_keys( $wgAddGroups ), + array_keys( $wgRemoveGroups ), + array_keys( $wgGroupsAddToSelf ), + array_keys( $wgGroupsRemoveFromSelf ) + ) ); + asort( $allGroups ); + + foreach ( $allGroups as $group ) { + $permissions = isset( $wgGroupPermissions[$group] ) + ? $wgGroupPermissions[$group] + : array(); + $groupname = ( $group == '*' ) // Replace * with a more descriptive groupname + ? 'all' + : $group; $msg = wfMsg( 'group-' . $groupname ); if ( wfEmptyMsg( 'group-' . $groupname, $msg ) || $msg == '' ) { @@ -59,11 +94,11 @@ class SpecialListGroupRights extends SpecialPage { if( $group == '*' ) { // Do not make a link for the generic * group - $grouppage = htmlspecialchars($groupnameLocalized); + $grouppage = htmlspecialchars( $groupnameLocalized ); } else { $grouppage = $this->skin->link( Title::newFromText( $grouppageLocalized ), - htmlspecialchars($groupnameLocalized) + htmlspecialchars( $groupnameLocalized ) ); } @@ -95,16 +130,15 @@ class SpecialListGroupRights extends SpecialPage { $addgroupsSelf = isset( $wgGroupsAddToSelf[$group] ) ? $wgGroupsAddToSelf[$group] : array(); $removegroupsSelf = isset( $wgGroupsRemoveFromSelf[$group] ) ? $wgGroupsRemoveFromSelf[$group] : array(); - $wgOut->addHTML( - ' - ' . - $grouppage . $grouplink . - ' - ' . + $id = $group == '*' ? false : Sanitizer::escapeId( $group ); + $wgOut->addHTML( Html::rawElement( 'tr', array( 'id' => $id ), + " + $grouppage$grouplink + " . self::formatPermissions( $permissions, $revoke, $addgroups, $removegroups, $addgroupsSelf, $removegroupsSelf ) . ' - ' - ); + ' + ) ); } $wgOut->addHTML( Xml::closeElement( 'table' ) . "\n

    \n" diff --git a/includes/specials/SpecialListredirects.php b/includes/specials/SpecialListredirects.php index bf594070..315047da 100644 --- a/includes/specials/SpecialListredirects.php +++ b/includes/specials/SpecialListredirects.php @@ -1,11 +1,27 @@ - * @copyright © 2006 Rob Church - * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later */ /** @@ -49,10 +65,10 @@ class ListredirectsPage extends QueryPage { $targetLink = $skin->link( $target ); return "$rd_link $arr $targetLink"; } else { - return "$rd_link"; + return "$rd_link"; } } else { - return "$rd_link"; + return "$rd_link"; } } } diff --git a/includes/specials/SpecialListusers.php b/includes/specials/SpecialListusers.php index bdb59980..abc0363a 100644 --- a/includes/specials/SpecialListusers.php +++ b/includes/specials/SpecialListusers.php @@ -1,27 +1,26 @@ -# -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html /** + * Implements Special:Listusers + * + * Copyright © 2004 Brion Vibber, lcrocker, Tim Starling, + * Domas Mituzas, Ashar Voultoiz, Jens Frank, Zhengzhu, + * 2006 Rob Church + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * * @file * @ingroup SpecialPage */ @@ -120,16 +119,18 @@ class UsersPager extends AlphabeticPager { function formatRow( $row ) { global $wgLang; + if ($row->user_id == 0) #Bug 16487 + return ''; + $userPage = Title::makeTitle( NS_USER, $row->user_name ); $name = $this->getSkin()->link( $userPage, htmlspecialchars( $userPage->getText() ) ); - if( $row->numgroups > 1 || ( $this->requestedGroup && $row->numgroups == 1 ) ) { + $groups_list = self::getGroups( $row->user_id ); + if( count( $groups_list ) > 0 ) { $list = array(); - foreach( self::getGroups( $row->user_id ) as $group ) + foreach( $groups_list as $group ) $list[] = self::buildGroupLink( $group ); $groups = $wgLang->commaList( $list ); - } elseif( $row->numgroups == 1 ) { - $groups = self::buildGroupLink( $row->singlegroup ); } else { $groups = ''; } @@ -166,7 +167,7 @@ class UsersPager extends AlphabeticPager { } $this->mResult->rewind(); $batch = new LinkBatch; - while ( $row = $this->mResult->fetchObject() ) { + foreach ( $this->mResult as $row ) { $batch->addObj( Title::makeTitleSafe( NS_USER, $row->user_name ) ); } $batch->execute(); @@ -175,13 +176,13 @@ class UsersPager extends AlphabeticPager { } function getPageHeader( ) { - global $wgScript, $wgRequest; + global $wgScript; $self = $this->getTitle(); # Form tag $out = Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'id' => 'mw-listusers-form' ) ) . Xml::fieldset( wfMsg( 'listusers' ) ) . - Xml::hidden( 'title', $self->getPrefixedDbKey() ); + Html::hidden( 'title', $self->getPrefixedDbKey() ); # Username field $out .= Xml::label( wfMsg( 'listusersfrom' ), 'offset' ) . ' ' . @@ -195,14 +196,14 @@ class UsersPager extends AlphabeticPager { $out .= Xml::option( $groupText, $group, $group == $this->requestedGroup ); $out .= Xml::closeElement( 'select' ) . '
    '; $out .= Xml::checkLabel( wfMsg('listusers-editsonly'), 'editsOnly', 'editsOnly', $this->editsOnly ); - $out .= ' '; + $out .= ' '; $out .= Xml::checkLabel( wfMsg('listusers-creationsort'), 'creationSort', 'creationSort', $this->creationSort ); $out .= '
    '; wfRunHooks( 'SpecialListusersHeaderForm', array( $this, &$out ) ); # Submit button and form bottom - $out .= Xml::hidden( 'limit', $this->mLimit ); + $out .= Html::hidden( 'limit', $this->mLimit ); $out .= Xml::submitButton( wfMsg( 'allpagessubmit' ) ); wfRunHooks( 'SpecialListusersHeader', array( $this, &$out ) ); $out .= Xml::closeElement( 'fieldset' ) . @@ -269,13 +270,13 @@ class UsersPager extends AlphabeticPager { * $par string (optional) A group to list users from */ function wfSpecialListusers( $par = null ) { - global $wgRequest, $wgOut; + global $wgOut; $up = new UsersPager($par); # getBody() first to check, if empty $usersbody = $up->getBody(); - $s = XML::openElement( 'div', array('class' => 'mw-spcontent') ); + $s = Xml::openElement( 'div', array('class' => 'mw-spcontent') ); $s .= $up->getPageHeader(); if( $usersbody ) { $s .= $up->getNavigationBar(); @@ -284,6 +285,6 @@ function wfSpecialListusers( $par = null ) { } else { $s .= '

    ' . wfMsgHTML('listusers-noresult') . '

    '; }; - $s .= XML::closeElement( 'div' ); + $s .= Xml::closeElement( 'div' ); $wgOut->addHTML( $s ); } diff --git a/includes/specials/SpecialLockdb.php b/includes/specials/SpecialLockdb.php index 8c701dd6..aad3cea4 100644 --- a/includes/specials/SpecialLockdb.php +++ b/includes/specials/SpecialLockdb.php @@ -1,97 +1,108 @@ isAllowed( 'siteadmin' ) ) { - $wgOut->permissionRequired( 'siteadmin' ); - return; + public function __construct() { + parent::__construct( 'Lockdb', 'siteadmin' ); } - # If the lock file isn't writable, we can do sweet bugger all - global $wgReadOnlyFile; - if( !is_writable( dirname( $wgReadOnlyFile ) ) ) { - DBLockForm::notWritable(); - return; - } + public function execute( $par ) { + global $wgUser, $wgOut, $wgRequest; - $action = $wgRequest->getVal( 'action' ); - $f = new DBLockForm(); + $this->setHeaders(); - if ( 'success' == $action ) { - $f->showSuccess(); - } else if ( 'submit' == $action && $wgRequest->wasPosted() && - $wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ) ) { - $f->doSubmit(); - } else { - $f->showForm( '' ); - } -} + if( !$wgUser->isAllowed( 'siteadmin' ) ) { + $wgOut->permissionRequired( 'siteadmin' ); + return; + } -/** - * A form to make the database readonly (eg for maintenance purposes). - * @ingroup SpecialPage - */ -class DBLockForm { - var $reason = ''; + $this->outputHeader(); - function DBLockForm() { - global $wgRequest; - $this->reason = $wgRequest->getText( 'wpLockReason' ); + # If the lock file isn't writable, we can do sweet bugger all + global $wgReadOnlyFile; + if( !is_writable( dirname( $wgReadOnlyFile ) ) ) { + self::notWritable(); + return; + } + + $action = $wgRequest->getVal( 'action' ); + $this->reason = $wgRequest->getVal( 'wpLockReason', '' ); + + if ( $action == 'success' ) { + $this->showSuccess(); + } else if ( $action == 'submit' && $wgRequest->wasPosted() && + $wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ) ) { + $this->doSubmit(); + } else { + $this->showForm(); + } } - function showForm( $err ) { + private function showForm( $err = '' ) { global $wgOut, $wgUser; - $wgOut->setPagetitle( wfMsg( 'lockdb' ) ); $wgOut->addWikiMsg( 'lockdbtext' ); - if ( $err != "" ) { + if ( $err != '' ) { $wgOut->setSubtitle( wfMsg( 'formerror' ) ); $wgOut->addHTML( '

    ' . htmlspecialchars( $err ) . "

    \n" ); } - $lc = htmlspecialchars( wfMsg( 'lockconfirm' ) ); - $lb = htmlspecialchars( wfMsg( 'lockbtn' ) ); - $elr = htmlspecialchars( wfMsg( 'enterlockreason' ) ); - $titleObj = SpecialPage::getTitleFor( 'Lockdb' ); - $action = $titleObj->escapeLocalURL( 'action=submit' ); - $reason = htmlspecialchars( $this->reason ); - $token = htmlspecialchars( $wgUser->editToken() ); - - $wgOut->addHTML( << -{$elr}: - - + + $wgOut->addHTML( + Html::openElement( 'form', array( 'id' => 'lockdb', 'method' => 'POST', + 'action' => $this->getTitle()->getLocalURL( 'action=submit' ) ) ). "\n" . + wfMsgHtml( 'enterlockreason' ) . ":\n" . + Html::textarea( 'wpLockReason', $this->reason, array( 'rows' => 4 ) ). " +
    - - + " . Html::openElement( 'td', array( 'style' => 'text-align:left' ) ) . + wfMsgHtml( 'lockconfirm' ) . " - - + " . Html::openElement( 'td', array( 'style' => 'text-align:left' ) ) . " + " . Html::input( 'wpLock', wfMsg( 'lockbtn' ), 'submit' ) . " -
    - + " . Html::openElement( 'td', array( 'style' => 'text-align:right' ) ) . " + " . Html::input( 'wpLockConfirm', null, 'checkbox' ) . " {$lc}
      - +  
    - - -HTML -); +\n" . + Html::hidden( 'wpEditToken', $wgUser->editToken() ) . "\n" . + Html::closeElement( 'form' ) + ); } - function doSubmit() { - global $wgOut, $wgUser, $wgLang, $wgRequest; + private function doSubmit() { + global $wgOut, $wgUser, $wgContLang, $wgRequest; global $wgReadOnlyFile; if ( ! $wgRequest->getCheck( 'wpLockConfirm' ) ) { @@ -109,14 +120,13 @@ HTML } fwrite( $fp, $this->reason ); fwrite( $fp, "\n

    (by " . $wgUser->getName() . " at " . - $wgLang->timeanddate( wfTimestampNow() ) . ")

    \n" ); + $wgContLang->timeanddate( wfTimestampNow() ) . ")

    \n" ); fclose( $fp ); - $titleObj = SpecialPage::getTitleFor( 'Lockdb' ); - $wgOut->redirect( $titleObj->getFullURL( 'action=success' ) ); + $wgOut->redirect( $this->getTitle()->getFullURL( 'action=success' ) ); } - function showSuccess() { + private function showSuccess() { global $wgOut; $wgOut->setPagetitle( wfMsg( 'lockdb' ) ); diff --git a/includes/specials/SpecialLog.php b/includes/specials/SpecialLog.php index d1ccc8c4..a2af8de5 100644 --- a/includes/specials/SpecialLog.php +++ b/includes/specials/SpecialLog.php @@ -1,86 +1,127 @@ getText( 'user' ); - } else if ( count( $parms ) == 2 ) { - $type = $parms[0]; - $user = $parms[1]; - } else { - $type = $wgRequest->getVal( 'type' ); - $user = ( $par != '' ) ? $par : $wgRequest->getText( 'user' ); +class SpecialLog extends SpecialPage { + + public function __construct() { + parent::__construct( 'Log' ); } - $title = $wgRequest->getText( 'page' ); - $pattern = $wgRequest->getBool( 'pattern' ); - $y = $wgRequest->getIntOrNull( 'year' ); - $m = $wgRequest->getIntOrNull( 'month' ); - $tagFilter = $wgRequest->getVal( 'tagfilter' ); - # Don't let the user get stuck with a certain date - $skip = $wgRequest->getText( 'offset' ) || $wgRequest->getText( 'dir' ) == 'prev'; - if( $skip ) { - $y = ''; - $m = ''; + + public function execute( $par ) { + global $wgRequest; + + $this->setHeaders(); + $this->outputHeader(); + + $opts = new FormOptions; + $opts->add( 'type', '' ); + $opts->add( 'user', '' ); + $opts->add( 'page', '' ); + $opts->add( 'pattern', false ); + $opts->add( 'year', null, FormOptions::INTNULL ); + $opts->add( 'month', null, FormOptions::INTNULL ); + $opts->add( 'tagfilter', '' ); + $opts->add( 'offset', '' ); + $opts->add( 'dir', '' ); + $opts->add( 'offender', '' ); + + // Set values + $opts->fetchValuesFromRequest( $wgRequest ); + if ( $par ) { + $this->parseParams( $opts, (string)$par ); + } + + # Don't let the user get stuck with a certain date + if ( $opts->getValue( 'offset' ) || $opts->getValue( 'dir' ) == 'prev' ) { + $opts->setValue( 'year', '' ); + $opts->setValue( 'month', '' ); + } + + # Handle type-specific inputs + $qc = array(); + if ( $opts->getValue( 'type' ) == 'suppress' ) { + $offender = User::newFromName( $opts->getValue( 'offender' ), false ); + if ( $offender && $offender->getId() > 0 ) { + $qc = array( 'ls_field' => 'target_author_id', 'ls_value' => $offender->getId() ); + } elseif ( $offender && IP::isIPAddress( $offender->getName() ) ) { + $qc = array( 'ls_field' => 'target_author_ip', 'ls_value' => $offender->getName() ); + } + } + + $this->show( $opts, $qc ); } - # Handle type-specific inputs - $qc = array(); - if( $type == 'suppress' ) { - $offender = User::newFromName( $wgRequest->getVal('offender'), false ); - if( $offender && $offender->getId() > 0 ) { - $qc = array( 'ls_field' => 'target_author_id', 'ls_value' => $offender->getId() ); - } else if( $offender && IP::isIPAddress( $offender->getName() ) ) { - $qc = array( 'ls_field' => 'target_author_ip', 'ls_value' => $offender->getName() ); + + private function parseParams( FormOptions $opts, $par ) { + global $wgLogTypes; + + # Get parameters + $parms = explode( '/', ($par = ( $par !== null ) ? $par : '' ) ); + $symsForAll = array( '*', 'all' ); + if ( $parms[0] != '' && ( in_array( $par, $wgLogTypes ) || in_array( $par, $symsForAll ) ) ) { + $opts->setValue( 'type', $par ); + } elseif ( count( $parms ) == 2 ) { + $opts->setValue( 'type', $parms[0] ); + $opts->setValue( 'user', $parms[1] ); + } elseif ( $par != '' ) { + $opts->setValue( 'user', $par ); } } - # Create a LogPager item to get the results and a LogEventsList item to format them... - $loglist = new LogEventsList( $wgUser->getSkin(), $wgOut, 0 ); - $pager = new LogPager( $loglist, $type, $user, $title, $pattern, $qc, $y, $m, $tagFilter ); - # Set title and add header - $loglist->showHeader( $pager->getType() ); - # Show form options - $loglist->showOptions( $pager->getType(), $pager->getUser(), $pager->getPage(), $pager->getPattern(), - $pager->getYear(), $pager->getMonth(), $pager->getFilterParams(), $tagFilter ); - # Insert list - $logBody = $pager->getBody(); - if( $logBody ) { - $wgOut->addHTML( - $pager->getNavigationBar() . - $loglist->beginLogEventsList() . - $logBody . - $loglist->endLogEventsList() . - $pager->getNavigationBar() - ); - } else { - $wgOut->addWikiMsg( 'logempty' ); + + private function show( FormOptions $opts, array $extraConds ) { + global $wgOut, $wgUser; + + # Create a LogPager item to get the results and a LogEventsList item to format them... + $loglist = new LogEventsList( $wgUser->getSkin(), $wgOut, 0 ); + $pager = new LogPager( $loglist, $opts->getValue( 'type' ), $opts->getValue( 'user' ), + $opts->getValue( 'page' ), $opts->getValue( 'pattern' ), $extraConds, $opts->getValue( 'year' ), + $opts->getValue( 'month' ), $opts->getValue( 'tagfilter' ) ); + + # Set title and add header + $loglist->showHeader( $pager->getType() ); + + # Show form options + $loglist->showOptions( $pager->getType(), $pager->getUser(), $pager->getPage(), $pager->getPattern(), + $pager->getYear(), $pager->getMonth(), $pager->getFilterParams(), $opts->getValue( 'tagfilter' ) ); + + # Insert list + $logBody = $pager->getBody(); + if ( $logBody ) { + $wgOut->addHTML( + $pager->getNavigationBar() . + $loglist->beginLogEventsList() . + $logBody . + $loglist->endLogEventsList() . + $pager->getNavigationBar() + ); + } else { + $wgOut->addWikiMsg( 'logempty' ); + } } } diff --git a/includes/specials/SpecialLonelypages.php b/includes/specials/SpecialLonelypages.php index 90da25fd..0788037f 100644 --- a/includes/specials/SpecialLonelypages.php +++ b/includes/specials/SpecialLonelypages.php @@ -1,5 +1,22 @@ - * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later */ /** @@ -18,7 +30,7 @@ class MIMEsearchPage extends QueryPage { var $major, $minor; - function MIMEsearchPage( $major, $minor ) { + function __construct( $major, $minor ) { $this->major = $major; $this->minor = $minor; } @@ -95,7 +107,7 @@ function wfSpecialMIMEsearch( $par = null ) { $wgOut->addHTML( Xml::openElement( 'form', array( 'id' => 'specialmimesearch', 'method' => 'get', 'action' => SpecialPage::getTitleFor( 'MIMEsearch' )->getLocalUrl() ) ) . Xml::openElement( 'fieldset' ) . - Xml::hidden( 'title', SpecialPage::getTitleFor( 'MIMEsearch' )->getPrefixedText() ) . + Html::hidden( 'title', SpecialPage::getTitleFor( 'MIMEsearch' )->getPrefixedText() ) . Xml::element( 'legend', null, wfMsg( 'mimesearch' ) ) . Xml::inputLabel( wfMsg( 'mimetype' ), 'mime', 'mime', 20, $mime ) . ' ' . Xml::submitButton( wfMsg( 'ilsubmit' ) ) . diff --git a/includes/specials/SpecialMergeHistory.php b/includes/specials/SpecialMergeHistory.php index 1b4ef30c..43b4ef6a 100644 --- a/includes/specials/SpecialMergeHistory.php +++ b/includes/specials/SpecialMergeHistory.php @@ -1,34 +1,42 @@ execute(); -} - -/** - * The HTML form for Special:MergeHistory, which allows users with the appropriate - * permissions to view and restore deleted content. + * Special page allowing users with the appropriate permissions to + * merge article histories, with some restrictions + * * @ingroup SpecialPage */ -class MergehistoryForm { +class SpecialMergeHistory extends SpecialPage { var $mAction, $mTarget, $mDest, $mTimestamp, $mTargetID, $mDestID, $mComment; var $mTargetObj, $mDestObj; - function MergehistoryForm( $request, $par = "" ) { - global $wgUser; + public function __construct() { + parent::__construct( 'MergeHistory', 'mergehistory' ); + } + private function loadRequestParams( $request ) { + global $wgUser; $this->mAction = $request->getVal( 'action' ); $this->mTarget = $request->getVal( 'target' ); $this->mDest = $request->getVal( 'dest' ); @@ -51,7 +59,6 @@ class MergehistoryForm { $this->mTargetObj = null; $this->mDestObj = null; } - $this->preCacheMessages(); } @@ -62,14 +69,27 @@ class MergehistoryForm { function preCacheMessages() { // Precache various messages if( !isset( $this->message ) ) { - $this->message['last'] = wfMsgExt( 'last', array( 'escape') ); + $this->message['last'] = wfMsgExt( 'last', array( 'escape' ) ); } } - function execute() { - global $wgOut; + function execute( $par ) { + global $wgOut, $wgRequest, $wgUser; + + if ( wfReadOnly() ) { + $wgOut->readOnlyPage(); + return; + } + + if( !$this->userCanExecute( $wgUser ) ) { + $this->displayRestrictionError(); + return; + } + + $this->loadRequestParams( $wgRequest ); - $wgOut->setPagetitle( wfMsgHtml( "mergehistory" ) ); + $this->setHeaders(); + $this->outputHeader(); if( $this->mTargetID && $this->mDestID && $this->mAction=="submit" && $this->mMerge ) { return $this->merge(); @@ -122,10 +142,9 @@ class MergehistoryForm { '
    ' . Xml::element( 'legend', array(), wfMsg( 'mergehistory-box' ) ) . - Xml::hidden( 'title', - SpecialPage::getTitleFor( 'Mergehistory' )->getPrefixedDbKey() ) . - Xml::hidden( 'submitted', '1' ) . - Xml::hidden( 'mergepoint', $this->mTimestamp ) . + Html::hidden( 'title', $this->getTitle()->getPrefixedDbKey() ) . + Html::hidden( 'submitted', '1' ) . + Html::hidden( 'mergepoint', $this->mTimestamp ) . Xml::openElement( 'table' ) . " ".Xml::label( wfMsg( 'mergehistory-from' ), 'target' )." @@ -142,7 +161,7 @@ class MergehistoryForm { } private function showHistory() { - global $wgLang, $wgUser, $wgOut; + global $wgUser, $wgOut; $this->sk = $wgUser->getSkin(); @@ -154,7 +173,7 @@ class MergehistoryForm { $revisions = new MergeHistoryPager( $this, array(), $this->mTargetObj, $this->mDestObj ); $haveRevisions = $revisions && $revisions->getNumRows() > 0; - $titleObj = SpecialPage::getTitleFor( "Mergehistory" ); + $titleObj = $this->getTitle(); $action = $titleObj->getLocalURL( array( 'action' => 'submit' ) ); # Start the form here $top = Xml::openElement( 'form', array( 'method' => 'post', 'action' => $action, 'id' => 'merge' ) ); @@ -177,7 +196,7 @@ class MergehistoryForm { " -   +   " . Xml::submitButton( wfMsg( 'mergehistory-submit' ), array( 'name' => 'merge', 'id' => 'mw-merge-submit' ) ) . " @@ -206,11 +225,11 @@ class MergehistoryForm { # When we submit, go by page ID to avoid some nasty but unlikely collisions. # Such would happen if a page was renamed after the form loaded, but before submit - $misc = Xml::hidden( 'targetID', $this->mTargetObj->getArticleID() ); - $misc .= Xml::hidden( 'destID', $this->mDestObj->getArticleID() ); - $misc .= Xml::hidden( 'target', $this->mTarget ); - $misc .= Xml::hidden( 'dest', $this->mDest ); - $misc .= Xml::hidden( 'wpEditToken', $wgUser->editToken() ); + $misc = Html::hidden( 'targetID', $this->mTargetObj->getArticleID() ); + $misc .= Html::hidden( 'destID', $this->mDestObj->getArticleID() ); + $misc .= Html::hidden( 'target', $this->mTarget ); + $misc .= Html::hidden( 'dest', $this->mDest ); + $misc .= Html::hidden( 'wpEditToken', $wgUser->editToken() ); $misc .= Xml::closeElement( 'form' ); $wgOut->addHTML( $misc ); @@ -419,7 +438,7 @@ class MergeHistoryPager extends ReverseChronologicalPager { $batch = new LinkBatch(); # Give some pointers to make (last) links $this->mForm->prevId = array(); - while( $row = $this->mResult->fetchObject() ) { + foreach ( $this->mResult as $row ) { $batch->addObj( Title::makeTitleSafe( NS_USER, $row->rev_user_text ) ); $batch->addObj( Title::makeTitleSafe( NS_USER_TALK, $row->rev_user_text ) ); @@ -440,7 +459,6 @@ class MergeHistoryPager extends ReverseChronologicalPager { } function formatRow( $row ) { - $block = new Block; return $this->mForm->formatRevisionRow( $row ); } diff --git a/includes/specials/SpecialMostcategories.php b/includes/specials/SpecialMostcategories.php index 1ba05626..124f0bd5 100644 --- a/includes/specials/SpecialMostcategories.php +++ b/includes/specials/SpecialMostcategories.php @@ -1,15 +1,32 @@ - * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason - * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later */ /** - * implements Special:Mostcategories + * A special page that list pages that have highest category count + * * @ingroup SpecialPage */ class MostcategoriesPage extends QueryPage { diff --git a/includes/specials/SpecialMostimages.php b/includes/specials/SpecialMostimages.php index 5cc100ba..411a281b 100644 --- a/includes/specials/SpecialMostimages.php +++ b/includes/specials/SpecialMostimages.php @@ -1,15 +1,32 @@ - * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason - * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later */ /** - * implements Special:Mostimages + * A special page page that list most used images + * * @ingroup SpecialPage */ class MostimagesPage extends ImageQueryPage { @@ -36,7 +53,7 @@ class MostimagesPage extends ImageQueryPage { function getCellHtml( $row ) { global $wgLang; - return wfMsgExt( 'nlinks', array( 'parsemag', 'escape' ), + return wfMsgExt( 'nimagelinks', array( 'parsemag', 'escape' ), $wgLang->formatNum( $row->value ) ) . '
    '; } diff --git a/includes/specials/SpecialMostlinked.php b/includes/specials/SpecialMostlinked.php index f112ae17..c731588a 100644 --- a/includes/specials/SpecialMostlinked.php +++ b/includes/specials/SpecialMostlinked.php @@ -1,20 +1,34 @@ + * @author Rob Church */ /** * A special page to show pages ordered by the number of pages linking to them. - * Implements Special:Mostlinked * * @ingroup SpecialPage - * - * @author Ævar Arnfjörð Bjarmason - * @author Rob Church - * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason - * @copyright © 2006 Rob Church - * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later */ class MostlinkedPage extends QueryPage { @@ -59,8 +73,9 @@ class MostlinkedPage extends QueryPage { function preprocessResults( $db, $res ) { if( $db->numRows( $res ) > 0 ) { $linkBatch = new LinkBatch(); - while( $row = $db->fetchObject( $res ) ) + foreach ( $res as $row ) { $linkBatch->add( $row->namespace, $row->title ); + } $db->dataSeek( $res, 0 ); $linkBatch->execute(); } diff --git a/includes/specials/SpecialMostlinkedcategories.php b/includes/specials/SpecialMostlinkedcategories.php index 20a35c97..e1fc1d95 100644 --- a/includes/specials/SpecialMostlinkedcategories.php +++ b/includes/specials/SpecialMostlinkedcategories.php @@ -1,17 +1,33 @@ */ /** * A querypage to show categories ordered in descending order by the pages in them * * @ingroup SpecialPage - * - * @author Ævar Arnfjörð Bjarmason - * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason - * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later */ class MostlinkedCategoriesPage extends QueryPage { @@ -42,8 +58,9 @@ class MostlinkedCategoriesPage extends QueryPage { */ function preprocessResults( $db, $res ) { $batch = new LinkBatch; - while ( $row = $db->fetchObject( $res ) ) + foreach ( $res as $row ) { $batch->add( $row->namespace, $row->title ); + } $batch->execute(); // Back to start for display diff --git a/includes/specials/SpecialMostlinkedtemplates.php b/includes/specials/SpecialMostlinkedtemplates.php index 71a6b539..822d6bc9 100644 --- a/includes/specials/SpecialMostlinkedtemplates.php +++ b/includes/specials/SpecialMostlinkedtemplates.php @@ -1,7 +1,25 @@ */ /** @@ -9,7 +27,6 @@ * transclusion links, i.e. "most used" templates * * @ingroup SpecialPage - * @author Rob Church */ class SpecialMostlinkedtemplates extends QueryPage { @@ -75,7 +92,7 @@ class SpecialMostlinkedtemplates extends QueryPage { */ public function preprocessResults( $db, $res ) { $batch = new LinkBatch(); - while( $row = $db->fetchObject( $res ) ) { + foreach ( $res as $row ) { $batch->add( $row->namespace, $row->title ); } $batch->execute(); @@ -110,8 +127,8 @@ class SpecialMostlinkedtemplates extends QueryPage { private function makeWlhLink( $title, $skin, $result ) { global $wgLang; $wlh = SpecialPage::getTitleFor( 'Whatlinkshere' ); - $label = wfMsgExt( 'nlinks', array( 'parsemag', 'escape' ), - $wgLang->formatNum( $result->value ) ); + $label = wfMsgExt( 'ntransclusions', array( 'parsemag', 'escape' ), + $wgLang->formatNum( $result->value ) ); return $skin->link( $wlh, $label, array(), array( 'target' => $title->getPrefixedText() ) ); } } diff --git a/includes/specials/SpecialMostrevisions.php b/includes/specials/SpecialMostrevisions.php index 414e8d97..f9bafabc 100644 --- a/includes/specials/SpecialMostrevisions.php +++ b/includes/specials/SpecialMostrevisions.php @@ -1,15 +1,32 @@ - * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason - * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later */ /** + * A special page to show pages with highest revision count + * * @ingroup SpecialPage */ class MostrevisionsPage extends QueryPage { diff --git a/includes/specials/SpecialMovepage.php b/includes/specials/SpecialMovepage.php index 02197b19..2f156c65 100644 --- a/includes/specials/SpecialMovepage.php +++ b/includes/specials/SpecialMovepage.php @@ -1,93 +1,104 @@ readOnlyPage(); - return; + private $watch = false; + + public function __construct() { + parent::__construct( 'Movepage' ); } - $target = isset( $par ) ? $par : $wgRequest->getVal( 'target' ); + public function execute( $par ) { + global $wgUser, $wgOut, $wgRequest; - // Yes, the use of getVal() and getText() is wanted, see bug 20365 - $oldTitleText = $wgRequest->getVal( 'wpOldTitle', $target ); - $newTitleText = $wgRequest->getText( 'wpNewTitle' ); + # Check for database lock + if ( wfReadOnly() ) { + $wgOut->readOnlyPage(); + return; + } - $oldTitle = Title::newFromText( $oldTitleText ); - $newTitle = Title::newFromText( $newTitleText ); + $this->setHeaders(); + $this->outputHeader(); - if( is_null( $oldTitle ) ) { - $wgOut->showErrorPage( 'notargettitle', 'notargettext' ); - return; - } - if( !$oldTitle->exists() ) { - $wgOut->showErrorPage( 'nopagetitle', 'nopagetext' ); - return; - } + $target = !is_null( $par ) ? $par : $wgRequest->getVal( 'target' ); - # Check rights - $permErrors = $oldTitle->getUserPermissionsErrors( 'move', $wgUser ); - if( !empty( $permErrors ) ) { - $wgOut->showPermissionsErrorPage( $permErrors ); - return; - } + // Yes, the use of getVal() and getText() is wanted, see bug 20365 + $oldTitleText = $wgRequest->getVal( 'wpOldTitle', $target ); + $newTitleText = $wgRequest->getText( 'wpNewTitle' ); - $form = new MovePageForm( $oldTitle, $newTitle ); + $this->oldTitle = Title::newFromText( $oldTitleText ); + $this->newTitle = Title::newFromText( $newTitleText ); - if ( 'submit' == $action && $wgRequest->wasPosted() - && $wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ) ) { - $form->doSubmit(); - } else { - $form->showForm( '' ); - } -} + if( is_null( $this->oldTitle ) ) { + $wgOut->showErrorPage( 'notargettitle', 'notargettext' ); + return; + } + if( !$this->oldTitle->exists() ) { + $wgOut->showErrorPage( 'nopagetitle', 'nopagetext' ); + return; + } -/** - * HTML form for Special:Movepage - * @ingroup SpecialPage - */ -class MovePageForm { - var $oldTitle, $newTitle; # Objects - var $reason; # Text input - var $moveTalk, $deleteAndMove, $moveSubpages, $fixRedirects, $leaveRedirect, $moveOverShared; # Checks + # Check rights + $permErrors = $this->oldTitle->getUserPermissionsErrors( 'move', $wgUser ); + if( !empty( $permErrors ) ) { + $wgOut->showPermissionsErrorPage( $permErrors ); + return; + } - private $watch = false; + $def = !$wgRequest->wasPosted(); - function __construct( $oldTitle, $newTitle ) { - global $wgRequest, $wgUser; - $target = isset($par) ? $par : $wgRequest->getVal( 'target' ); - $this->oldTitle = $oldTitle; - $this->newTitle = $newTitle; $this->reason = $wgRequest->getText( 'wpReason' ); - if ( $wgRequest->wasPosted() ) { - $this->moveTalk = $wgRequest->getBool( 'wpMovetalk', false ); - $this->fixRedirects = $wgRequest->getBool( 'wpFixRedirects', false ); - $this->leaveRedirect = $wgRequest->getBool( 'wpLeaveRedirect', false ); - } else { - $this->moveTalk = $wgRequest->getBool( 'wpMovetalk', true ); - $this->fixRedirects = $wgRequest->getBool( 'wpFixRedirects', true ); - $this->leaveRedirect = $wgRequest->getBool( 'wpLeaveRedirect', true ); - } + $this->moveTalk = $wgRequest->getBool( 'wpMovetalk', $def ); + $this->fixRedirects = $wgRequest->getBool( 'wpFixRedirects', $def ); + $this->leaveRedirect = $wgRequest->getBool( 'wpLeaveRedirect', $def ); $this->moveSubpages = $wgRequest->getBool( 'wpMovesubpages', false ); $this->deleteAndMove = $wgRequest->getBool( 'wpDeleteAndMove' ) && $wgRequest->getBool( 'wpConfirm' ); $this->moveOverShared = $wgRequest->getBool( 'wpMoveOverSharedFile', false ); $this->watch = $wgRequest->getCheck( 'wpWatch' ) && $wgUser->isLoggedIn(); + + if ( 'submit' == $wgRequest->getVal( 'action' ) && $wgRequest->wasPosted() + && $wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ) ) { + $this->doSubmit(); + } else { + $this->showForm( '' ); + } } /** * Show the form - * @param mixed $err Error message. May either be a string message name or - * array message name and parameters, like the second argument to - * OutputPage::wrapWikiMsg(). + * + * @param $err Mixed: error message. May either be a string message name or + * array message name and parameters, like the second argument to + * OutputPage::wrapWikiMsg(). */ function showForm( $err ) { global $wgOut, $wgUser, $wgContLang, $wgFixDoubleRedirects; @@ -134,7 +145,8 @@ class MovePageForm { if ($this->oldTitle->getNamespace() == NS_USER && !$this->oldTitle->isSubpage() ) { $wgOut->wrapWikiMsg( "
    \n$1\n
    ", 'moveuserpage-warning' ); } - $wgOut->addWikiMsg( 'movepagetext' ); + $wgOut->addWikiMsg( $wgFixDoubleRedirects ? 'movepagetext' : + 'movepagetext-noredirectfixer' ); $movepagebtn = wfMsg( 'movepagebtn' ); $submitVar = 'wpMove'; $confirm = false; @@ -145,14 +157,14 @@ class MovePageForm { $submitVar = 'wpMoveOverSharedFile'; $err = ''; } - + $oldTalk = $this->oldTitle->getTalkPage(); $considerTalk = ( !$this->oldTitle->isTalkPage() && $oldTalk->exists() ); $dbr = wfGetDB( DB_SLAVE ); if ( $wgFixDoubleRedirects ) { - $hasRedirects = $dbr->selectField( 'redirect', '1', - array( + $hasRedirects = $dbr->selectField( 'redirect', '1', + array( 'rd_namespace' => $this->oldTitle->getNamespace(), 'rd_title' => $this->oldTitle->getDBkey(), ) , __METHOD__ ); @@ -164,7 +176,6 @@ class MovePageForm { $wgOut->addWikiMsg( 'movepagetalktext' ); } - $titleObj = SpecialPage::getTitleFor( 'Movepage' ); $token = htmlspecialchars( $wgUser->editToken() ); if ( !empty($err) ) { @@ -174,7 +185,7 @@ class MovePageForm { $errMsg = "

    $hookErr

    \n"; $wgOut->addHTML( $errMsg ); } else { - $wgOut->wrapWikiMsg( '

    $1

    ', $err ); + $wgOut->wrapWikiMsg( "

    \n$1\n

    ", $err ); } } @@ -195,7 +206,7 @@ class MovePageForm { } $wgOut->addHTML( - Xml::openElement( 'form', array( 'method' => 'post', 'action' => $titleObj->getLocalURL( 'action=submit' ), 'id' => 'movepage' ) ) . + Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getTitle()->getLocalURL( 'action=submit' ), 'id' => 'movepage' ) ) . Xml::openElement( 'fieldset' ) . Xml::element( 'legend', null, wfMsg( 'move-page-legend' ) ) . Xml::openElement( 'table', array( 'border' => '0', 'id' => 'mw-movepage-table' ) ) . @@ -213,7 +224,7 @@ class MovePageForm { " " . Xml::input( 'wpNewTitle', 40, $wgContLang->recodeForEdit( $newTitle->getPrefixedText() ), array( 'type' => 'text', 'id' => 'wpNewTitle' ) ) . - Xml::hidden( 'wpOldTitle', $this->oldTitle->getPrefixedText() ) . + Html::hidden( 'wpOldTitle', $this->oldTitle->getPrefixedText() ) . " @@ -243,7 +254,7 @@ class MovePageForm { " . - Xml::checkLabel( wfMsg( 'move-leave-redirect' ), 'wpLeaveRedirect', + Xml::checkLabel( wfMsg( 'move-leave-redirect' ), 'wpLeaveRedirect', 'wpLeaveRedirect', $this->leaveRedirect ) . " " @@ -255,7 +266,7 @@ class MovePageForm { " . - Xml::checkLabel( wfMsg( 'fix-double-redirects' ), 'wpFixRedirects', + Xml::checkLabel( wfMsg( 'fix-double-redirects' ), 'wpFixRedirects', 'wpFixRedirects', $this->fixRedirects ) . " " @@ -277,7 +288,7 @@ class MovePageForm { # move and we aren't moving the talk page. $this->moveSubpages && ($this->oldTitle->hasSubpages() || $this->moveTalk), array( 'id' => 'wpMovesubpages' ) - ) . ' ' . + ) . ' ' . Xml::tags( 'label', array( 'for' => 'wpMovesubpages' ), wfMsgExt( ( $this->oldTitle->hasSubpages() @@ -294,7 +305,7 @@ class MovePageForm { ); } - $watchChecked = $wgUser->isLoggedIn() && ($this->watch || $wgUser->getBoolOption( 'watchmoves' ) + $watchChecked = $wgUser->isLoggedIn() && ($this->watch || $wgUser->getBoolOption( 'watchmoves' ) || $this->oldTitle->userIsWatching()); # Don't allow watching if user is not logged in if( $wgUser->isLoggedIn() ) { @@ -307,16 +318,16 @@ class MovePageForm { "); } - $wgOut->addHTML( " + $wgOut->addHTML( " {$confirm} -   +   " . Xml::submitButton( $movepagebtn, array( 'name' => $submitVar ) ) . " " . Xml::closeElement( 'table' ) . - Xml::hidden( 'wpEditToken', $token ) . + Html::hidden( 'wpEditToken', $token ) . Xml::closeElement( 'fieldset' ) . Xml::closeElement( 'form' ) . "\n" @@ -328,7 +339,7 @@ class MovePageForm { } function doSubmit() { - global $wgOut, $wgUser, $wgRequest, $wgMaximumMovedPages, $wgLang; + global $wgOut, $wgUser, $wgMaximumMovedPages, $wgLang; global $wgFixDoubleRedirects; if ( $wgUser->pingLimiter( 'move' ) ) { @@ -346,7 +357,7 @@ class MovePageForm { # Disallow deletions of big articles $bigHistory = $article->isBigDeletion(); if( $bigHistory && !$nt->userCan( 'bigdelete' ) ) { - global $wgLang, $wgDeleteRevisionsLimit; + global $wgDeleteRevisionsLimit; $this->showForm( array('delete-toobig', $wgLang->formatNum( $wgDeleteRevisionsLimit ) ) ); return; } @@ -368,16 +379,16 @@ class MovePageForm { } # Show a warning if the target file exists on a shared repo - if ( $nt->getNamespace() == NS_FILE + if ( $nt->getNamespace() == NS_FILE && !( $this->moveOverShared && $wgUser->isAllowed( 'reupload-shared' ) ) - && !RepoGroup::singleton()->getLocalRepo()->findFile( $nt ) + && !RepoGroup::singleton()->getLocalRepo()->findFile( $nt ) && wfFindFile( $nt ) ) { $this->showForm( array('file-exists-sharedrepo') ); return; - + } - + if ( $wgUser->isAllowed( 'suppressredirect' ) ) { $createRedirect = $this->leaveRedirect; } else { @@ -433,7 +444,7 @@ class MovePageForm { # would mean that you couldn't move them back in one operation, which # is bad. FIXME: A specific error message should be given in this # case. - + // FIXME: Use Title::moveSubpages() here $dbr = wfGetDB( DB_MASTER ); if( $this->moveSubpages && ( @@ -547,8 +558,8 @@ class MovePageForm { $wgUser->removeWatch( $ot ); $wgUser->removeWatch( $nt ); } - - # Re-clear the file redirect cache, which may have been polluted by + + # Re-clear the file redirect cache, which may have been polluted by # parsing in messages above. See CR r56745. # FIXME: needs a more robust solution inside FileRepo. if( $ot->getNamespace() == NS_FILE ) { diff --git a/includes/specials/SpecialNewimages.php b/includes/specials/SpecialNewimages.php index a39b56ee..cecd7dfd 100644 --- a/includes/specials/SpecialNewimages.php +++ b/includes/specials/SpecialNewimages.php @@ -1,10 +1,29 @@ freeResult( $res ); - $sql = ''; # If we were clever, we'd use this to cache. $latestTimestamp = wfTimestamp( TS_MW, $ts ); # Hardcode this for now. $limit = 48; - - if ( $parval = intval( $par ) ) { + $parval = intval( $par ); + if ( $parval ) { if ( $parval <= $limit && $parval > 0 ) { $limit = $parval; } @@ -75,14 +92,16 @@ function wfSpecialNewimages( $par, $specialPage ) { } $invertSort = false; - if( $until = $wgRequest->getVal( 'until' ) ) { + $until = $wgRequest->getVal( 'until' ); + if( $until ) { $where[] = "img_timestamp < '" . $dbr->timestamp( $until ) . "'"; } - if( $from = $wgRequest->getVal( 'from' ) ) { + $from = $wgRequest->getVal( 'from' ); + if( $from ) { $where[] = "img_timestamp >= '" . $dbr->timestamp( $from ) . "'"; $invertSort = true; } - $sql='SELECT img_size, img_name, img_user, img_user_text,'. + $sql = 'SELECT img_size, img_name, img_user, img_user_text,'. "img_description,img_timestamp FROM $image"; if( $hidebotsql ) { @@ -100,14 +119,13 @@ function wfSpecialNewimages( $par, $specialPage ) { * We have to flip things around to get the last N after a certain date */ $images = array(); - while ( $s = $dbr->fetchObject( $res ) ) { + foreach ( $res as $s ) { if( $invertSort ) { array_unshift( $images, $s ); } else { array_push( $images, $s ); } } - $dbr->freeResult( $res ); $gallery = new ImageGallery(); $firstTimestamp = null; @@ -214,9 +232,9 @@ function wfSpecialNewimages( $par, $specialPage ) { } $nextLink = wfMsgExt( 'pager-older-n', $opts, $wgLang->formatNum( $limit ) ); - if( $shownImages > $limit && $lastTimestamp ) { + if( $invertSort || ( $shownImages > $limit && $lastTimestamp ) ) { $query = array_merge( - array( 'until' => $lastTimestamp ), + array( 'until' => ( $lastTimestamp ? $lastTimestamp : "" ) ), $botpar, $searchpar ); diff --git a/includes/specials/SpecialNewpages.php b/includes/specials/SpecialNewpages.php index 903ddab0..3235436a 100644 --- a/includes/specials/SpecialNewpages.php +++ b/includes/specials/SpecialNewpages.php @@ -1,10 +1,32 @@ includable( true ); } protected function setup( $par ) { @@ -85,11 +106,11 @@ class SpecialNewpages extends SpecialPage { /** * Show a form for filtering namespace and username * - * @param string $par - * @return string + * @param $par String + * @return String */ public function execute( $par ) { - global $wgLang, $wgOut; + global $wgOut; $this->setHeaders(); $this->outputHeader(); @@ -136,6 +157,7 @@ class SpecialNewpages extends SpecialPage { ); // Disable some if needed + # FIXME: throws E_NOTICEs if not set; and doesn't obey hooks etc if ( $wgGroupPermissions['*']['createpage'] !== true ) unset($filters['hideliu']); @@ -174,7 +196,7 @@ class SpecialNewpages extends SpecialPage { // Store query values in hidden fields so that form submission doesn't lose them $hidden = array(); foreach ( $this->opts->getUnconsumedValues() as $key => $value ) { - $hidden[] = Xml::hidden( $key, $value ); + $hidden[] = Html::hidden( $key, $value ); } $hidden = implode( "\n", $hidden ); @@ -183,7 +205,7 @@ class SpecialNewpages extends SpecialPage { list( $tagFilterLabel, $tagFilterSelector ) = $tagFilter; $form = Xml::openElement( 'form', array( 'action' => $wgScript ) ) . - Xml::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) . + Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) . Xml::fieldset( wfMsg( 'newpages' ) ) . Xml::openElement( 'table', array( 'id' => 'mw-newpages-table' ) ) . " @@ -239,9 +261,8 @@ class SpecialNewpages extends SpecialPage { /** * Format a row, providing the timestamp, links to the page/history, size, user links, and a comment * - * @param $skin Skin to use * @param $result Result row - * @return string + * @return String */ public function formatRow( $result ) { global $wgLang, $wgContLang; @@ -251,7 +272,9 @@ class SpecialNewpages extends SpecialPage { $dm = $wgContLang->getDirMark(); $title = Title::makeTitleSafe( $result->rc_namespace, $result->rc_title ); - $time = htmlspecialchars( $wgLang->timeAndDate( $result->rc_timestamp, true ) ); + $time = Html::element( 'span', array( 'class' => 'mw-newpages-time' ), + $wgLang->timeAndDate( $result->rc_timestamp, true ) + ); $query = array( 'redirect' => 'no' ); @@ -261,38 +284,53 @@ class SpecialNewpages extends SpecialPage { $plink = $this->skin->linkKnown( $title, null, - array(), - $query + array( 'class' => 'mw-newpages-pagename' ), + $query, + array( 'known' ) // Set explicitly to avoid the default of 'known','noclasses'. This breaks the colouration for stubs ); - $hist = $this->skin->linkKnown( + $histLink = $this->skin->linkKnown( $title, wfMsgHtml( 'hist' ), array(), array( 'action' => 'history' ) ); - $length = wfMsgExt( 'nbytes', array( 'parsemag', 'escape' ), - $wgLang->formatNum( $result->length ) ); + $hist = Html::rawElement( 'span', array( 'class' => 'mw-newpages-history' ), wfMsg( 'parentheses', $histLink ) ); + + $length = Html::rawElement( 'span', array( 'class' => 'mw-newpages-length' ), + '[' . wfMsgExt( 'nbytes', array( 'parsemag', 'escape' ), $wgLang->formatNum( $result->length ) ) . + ']' + ); $ulink = $this->skin->userLink( $result->rc_user, $result->rc_user_text ) . ' ' . $this->skin->userToolLinks( $result->rc_user, $result->rc_user_text ); $comment = $this->skin->commentBlock( $result->rc_comment ); - if ( $this->patrollable( $result ) ) + if ( $this->patrollable( $result ) ) { $classes[] = 'not-patrolled'; + } - # Tags, if any. - list( $tagDisplay, $newClasses ) = ChangeTags::formatSummaryRow( $result->ts_tags, 'newpages' ); - $classes = array_merge( $classes, $newClasses ); + # Add a class for zero byte pages + if ( $result->length == 0 ) { + $classes[] = 'mw-newpages-zero-byte-page'; + } + + # Tags, if any. check for including due to bug 23293 + if ( !$this->including() ) { + list( $tagDisplay, $newClasses ) = ChangeTags::formatSummaryRow( $result->ts_tags, 'newpages' ); + $classes = array_merge( $classes, $newClasses ); + } else { + $tagDisplay = ''; + } $css = count($classes) ? ' class="'.implode( " ", $classes).'"' : ''; - return "{$time} {$dm}{$plink} ({$hist}) {$dm}[{$length}] {$dm}{$ulink} {$comment} {$tagDisplay}\n"; + return "{$time} {$dm}{$plink} {$hist} {$dm}{$length} {$dm}{$ulink} {$comment} {$tagDisplay}\n"; } /** * Should a specific result row provide "patrollable" links? * * @param $result Result row - * @return bool + * @return Boolean */ protected function patrollable( $result ) { global $wgUser; @@ -301,19 +339,18 @@ class SpecialNewpages extends SpecialPage { /** * Output a subscription feed listing recent edits to this page. - * @param string $type + * + * @param $type String */ protected function feed( $type ) { - global $wgFeed, $wgFeedClasses, $wgFeedLimit; + global $wgFeed, $wgFeedClasses, $wgFeedLimit, $wgOut; if ( !$wgFeed ) { - global $wgOut; $wgOut->addWikiMsg( 'feed-unavailable' ); return; } if( !isset( $wgFeedClasses[$type] ) ) { - global $wgOut; $wgOut->addWikiMsg( 'feed-invalid' ); return; } @@ -329,7 +366,7 @@ class SpecialNewpages extends SpecialPage { $feed->outHeader(); if( $pager->getNumRows() > 0 ) { - while( $row = $pager->mResult->fetchObject() ) { + foreach ( $pager->mResult as $row ) { $feed->outItem( $this->feedItem( $row ) ); } } @@ -337,10 +374,10 @@ class SpecialNewpages extends SpecialPage { } protected function feedTitle() { - global $wgContLanguageCode, $wgSitename; + global $wgLanguageCode, $wgSitename; $page = SpecialPage::getPage( 'Newpages' ); $desc = $page->getDescription(); - return "$wgSitename - $desc [$wgContLanguageCode]"; + return "$wgSitename - $desc [$wgLanguageCode]"; } protected function feedItem( $row ) { @@ -434,6 +471,9 @@ class NewPagesPager extends ReverseChronologicalPager { if ( $this->opts->getValue( 'hideredirs' ) ) { $conds['page_is_redirect'] = 0; } + + // Allow changes to the New Pages query + wfRunHooks('SpecialNewpagesConditions', array(&$this, $this->opts, &$conds)); $info = array( 'tables' => array( 'recentchanges', 'page' ), @@ -471,7 +511,7 @@ class NewPagesPager extends ReverseChronologicalPager { function getStartBody() { # Do a batch existence check on pages $linkBatch = new LinkBatch(); - while( $row = $this->mResult->fetchObject() ) { + foreach ( $this->mResult as $row ) { $linkBatch->add( NS_USER, $row->rc_user_text ); $linkBatch->add( NS_USER_TALK, $row->rc_user_text ); $linkBatch->add( $row->rc_namespace, $row->rc_title ); diff --git a/includes/specials/SpecialPopularpages.php b/includes/specials/SpecialPopularpages.php index 88b90bc3..375cefdf 100644 --- a/includes/specials/SpecialPopularpages.php +++ b/includes/specials/SpecialPopularpages.php @@ -1,11 +1,29 @@ showResetForm(); return; } - - $wgOut->addScriptFile( 'prefs.js' ); + + $wgOut->addModules( 'mediawiki.legacy.prefs' ); + $wgOut->addModules( 'mediawiki.special.preferences' ); if ( $wgRequest->getCheck( 'success' ) ) { $wgOut->wrapWikiMsg( - '
    $1
    ', + "
    \n$1\n
    ", 'savedprefs' ); } if ( $wgRequest->getCheck( 'eauth' ) ) { - $wgOut->wrapWikiMsg( "
    \n$1
    ", + $wgOut->wrapWikiMsg( "
    \n$1\n
    ", 'eauthentsent', $wgUser->getName() ); } diff --git a/includes/specials/SpecialPrefixindex.php b/includes/specials/SpecialPrefixindex.php index 8b5f0c93..09e7734c 100644 --- a/includes/specials/SpecialPrefixindex.php +++ b/includes/specials/SpecialPrefixindex.php @@ -1,7 +1,29 @@ outputHeader(); # GET values - $from = $wgRequest->getVal( 'from' ); + $from = $wgRequest->getVal( 'from', '' ); $prefix = $wgRequest->getVal( 'prefix', '' ); $namespace = $wgRequest->getInt( 'namespace' ); $namespaces = $wgContLang->getNamespaces(); @@ -32,12 +54,17 @@ class SpecialPrefixindex extends SpecialAllpages { : wfMsg( 'prefixindex' ) ); + $showme = ''; if( isset( $par ) ){ - $this->showPrefixChunk( $namespace, $par, $from ); - } elseif( isset( $prefix ) ){ - $this->showPrefixChunk( $namespace, $prefix, $from ); - } elseif( isset( $from ) ){ - $this->showPrefixChunk( $namespace, $from, $from ); + $showme = $par; + } elseif( $prefix != '' ){ + $showme = $prefix; + } elseif( $from != '' ){ + // For back-compat with Special:Allpages + $showme = $from; + } + if ($showme != '' || $namespace) { + $this->showPrefixChunk( $namespace, $showme, $from ); } else { $wgOut->addHTML( $this->namespacePrefixForm( $namespace, null ) ); } @@ -45,8 +72,8 @@ class SpecialPrefixindex extends SpecialAllpages { /** * HTML for the top form - * @param integer $namespace A namespace constant (default NS_MAIN). - * @param string $from dbKey we are starting listing at. + * @param $namespace Integer: a namespace constant (default NS_MAIN). + * @param $from String: dbKey we are starting listing at. */ function namespacePrefixForm( $namespace = NS_MAIN, $from = '' ) { global $wgScript; @@ -54,7 +81,7 @@ class SpecialPrefixindex extends SpecialAllpages { $out = Xml::openElement( 'div', array( 'class' => 'namespaceoptions' ) ); $out .= Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) ); - $out .= Xml::hidden( 'title', $t->getPrefixedText() ); + $out .= Html::hidden( 'title', $t->getPrefixedText() ); $out .= Xml::openElement( 'fieldset' ); $out .= Xml::element( 'legend', null, wfMsg( 'allpages' ) ); $out .= Xml::openElement( 'table', array( 'id' => 'nsselect', 'class' => 'allpages' ) ); @@ -83,8 +110,9 @@ class SpecialPrefixindex extends SpecialAllpages { } /** - * @param integer $namespace (Default NS_MAIN) - * @param string $from list all pages from this name (default FALSE) + * @param $namespace Integer, default NS_MAIN + * @param $prefix String + * @param $from String: list all pages from this name (default FALSE) */ function showPrefixChunk( $namespace = NS_MAIN, $prefix, $from = null ) { global $wgOut, $wgUser, $wgContLang, $wgLang; @@ -105,7 +133,7 @@ class SpecialPrefixindex extends SpecialAllpages { $namespace = NS_MAIN; } else { list( $namespace, $prefixKey, $prefix ) = $prefixList; - list( /* $fromNs */, $fromKey, $from ) = $fromList; + list( /* $fromNS */, $fromKey, ) = $fromList; ### FIXME: should complain if $fromNs != $namespace diff --git a/includes/specials/SpecialProtectedpages.php b/includes/specials/SpecialProtectedpages.php index 8229770c..c676aa00 100644 --- a/includes/specials/SpecialProtectedpages.php +++ b/includes/specials/SpecialProtectedpages.php @@ -1,24 +1,45 @@ setSubtitle( $msg ); - } + $this->setHeaders(); + $this->outputHeader(); // Purge expired entries on one in every 10 queries if( !mt_rand( 0, 10 ) ) { @@ -77,7 +98,6 @@ class ProtectedPagesForm { $description_items[] = wfMsg( 'protect-summary-cascade' ); } - $expiry_description = ''; $stxt = ''; if( $row->pr_expiry != 'infinity' && strlen($row->pr_expiry) ) { @@ -123,14 +143,14 @@ class ProtectedPagesForm { } /** - * @param $namespace int - * @param $type string - * @param $level string - * @param $minsize int - * @param $indefOnly bool - * @param $cascadeOnly bool - * @return string Input form - * @private + * @param $namespace Integer + * @param $type String: restriction type + * @param $level String: restriction level + * @param $sizetype String: "min" or "max" + * @param $size Integer + * @param $indefOnly Boolean: only indefinie protection + * @param $cascadeOnly Boolean: only cascading protection + * @return String: input form */ protected function showOptions( $namespace, $type='edit', $level, $sizetype, $size, $indefOnly, $cascadeOnly ) { global $wgScript; @@ -138,17 +158,17 @@ class ProtectedPagesForm { return Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) ) . Xml::openElement( 'fieldset' ) . Xml::element( 'legend', array(), wfMsg( 'protectedpages' ) ) . - Xml::hidden( 'title', $title->getPrefixedDBkey() ) . "\n" . - $this->getNamespaceMenu( $namespace ) . " \n" . - $this->getTypeMenu( $type ) . " \n" . - $this->getLevelMenu( $level ) . " \n" . + Html::hidden( 'title', $title->getPrefixedDBkey() ) . "\n" . + $this->getNamespaceMenu( $namespace ) . " \n" . + $this->getTypeMenu( $type ) . " \n" . + $this->getLevelMenu( $level ) . " \n" . "
    " . - $this->getExpiryCheck( $indefOnly ) . " \n" . - $this->getCascadeCheck( $cascadeOnly ) . " \n" . + $this->getExpiryCheck( $indefOnly ) . " \n" . + $this->getCascadeCheck( $cascadeOnly ) . " \n" . "
    " . - $this->getSizeLimit( $sizetype, $size ) . " \n" . + $this->getSizeLimit( $sizetype, $size ) . " \n" . "" . - " " . Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . "\n" . + " " . Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . "\n" . Xml::closeElement( 'fieldset' ) . Xml::closeElement( 'form' ); } @@ -157,12 +177,12 @@ class ProtectedPagesForm { * Prepare the namespace filter drop-down; standard namespace * selector, sans the MediaWiki namespace * - * @param mixed $namespace Pre-select namespace - * @return string + * @param $namespace Mixed: pre-select namespace + * @return String */ protected function getNamespaceMenu( $namespace = null ) { return "" . - Xml::label( wfMsg( 'namespace' ), 'namespace' ) . ' ' + Xml::label( wfMsg( 'namespace' ), 'namespace' ) . ' ' . Xml::namespaceSelector( $namespace, '' ) . ""; } @@ -190,11 +210,11 @@ class ProtectedPagesForm { return Xml::radioLabel( wfMsg('minimum-size'), 'sizetype', 'min', 'wpmin', !$max ) . - ' ' . + ' ' . Xml::radioLabel( wfMsg('maximum-size'), 'sizetype', 'max', 'wpmax', $max ) . - ' ' . + ' ' . Xml::input( 'size', 9, $size, array( 'id' => 'wpsize' ) ) . - ' ' . + ' ' . Xml::label( wfMsg('pagesize'), 'wpsize' ); } @@ -204,13 +224,11 @@ class ProtectedPagesForm { * @return string Formatted HTML */ protected function getTypeMenu( $pr_type ) { - global $wgRestrictionTypes; - $m = array(); // Temporary array $options = array(); // First pass to load the log names - foreach( $wgRestrictionTypes as $type ) { + foreach( Title::getFilteredRestrictionTypes( true ) as $type ) { $text = wfMsg("restriction-$type"); $m[$text] = $type; } @@ -222,7 +240,7 @@ class ProtectedPagesForm { } return "" . - Xml::label( wfMsg('restriction-type') , $this->IdType ) . ' ' . + Xml::label( wfMsg('restriction-type') , $this->IdType ) . ' ' . Xml::tags( 'select', array( 'id' => $this->IdType, 'name' => $this->IdType ), implode( "\n", $options ) ) . ""; @@ -288,7 +306,7 @@ class ProtectedPagesPager extends AlphabeticPager { function getStartBody() { # Do a link batch query $lb = new LinkBatch; - while( $row = $this->mResult->fetchObject() ) { + foreach ( $this->mResult as $row ) { $lb->add( $row->page_namespace, $row->page_title ); } $lb->execute(); @@ -334,11 +352,3 @@ class ProtectedPagesPager extends AlphabeticPager { return 'pr_id'; } } - -/** - * Constructor - */ -function wfSpecialProtectedpages() { - $ppForm = new ProtectedPagesForm(); - $ppForm->showList(); -} diff --git a/includes/specials/SpecialProtectedtitles.php b/includes/specials/SpecialProtectedtitles.php index d65b3f79..5b18d87f 100644 --- a/includes/specials/SpecialProtectedtitles.php +++ b/includes/specials/SpecialProtectedtitles.php @@ -1,24 +1,45 @@ setSubtitle( $msg ); - } + $this->setHeaders(); + $this->outputHeader(); // Purge expired entries on one in every 10 queries if ( !mt_rand( 0, 10 ) ) { @@ -33,7 +54,7 @@ class ProtectedTitlesForm { $pager = new ProtectedTitlesPager( $this, array(), $type, $level, $NS, $sizetype, $size ); - $wgOut->addHTML( $this->showOptions( $NS, $type, $level, $sizetype, $size ) ); + $wgOut->addHTML( $this->showOptions( $NS, $type, $level ) ); if ( $pager->getNumRows() ) { $s = $pager->getNavigationBar(); @@ -51,7 +72,7 @@ class ProtectedTitlesForm { * Callback function to output a restriction */ function formatRow( $row ) { - global $wgUser, $wgLang, $wgContLang; + global $wgUser, $wgLang; wfProfileIn( __METHOD__ ); @@ -69,7 +90,7 @@ class ProtectedTitlesForm { $description_items[] = $protType; - $expiry_description = ''; $stxt = ''; + $stxt = ''; if ( $row->pt_expiry != 'infinity' && strlen($row->pt_expiry) ) { $expiry = Block::decodeExpiry( $row->pt_expiry ); @@ -85,13 +106,12 @@ class ProtectedTitlesForm { } /** - * @param $namespace int + * @param $namespace Integer: * @param $type string * @param $level string - * @param $minsize int * @private */ - function showOptions( $namespace, $type='edit', $level, $sizetype, $size ) { + function showOptions( $namespace, $type='edit', $level ) { global $wgScript; $action = htmlspecialchars( $wgScript ); $title = SpecialPage::getTitleFor( 'Protectedtitles' ); @@ -99,10 +119,10 @@ class ProtectedTitlesForm { return "
    \n" . '
    ' . Xml::element( 'legend', array(), wfMsg( 'protectedtitles' ) ) . - Xml::hidden( 'title', $special ) . " \n" . - $this->getNamespaceMenu( $namespace ) . " \n" . - $this->getLevelMenu( $level ) . " \n" . - " " . Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . "\n" . + Html::hidden( 'title', $special ) . " \n" . + $this->getNamespaceMenu( $namespace ) . " \n" . + $this->getLevelMenu( $level ) . " \n" . + " " . Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . "\n" . "
    "; } @@ -110,12 +130,12 @@ class ProtectedTitlesForm { * Prepare the namespace filter drop-down; standard namespace * selector, sans the MediaWiki namespace * - * @param mixed $namespace Pre-select namespace + * @param $namespace Mixed: pre-select namespace * @return string */ function getNamespaceMenu( $namespace = null ) { return Xml::label( wfMsg( 'namespace' ), 'namespace' ) - . ' ' + . ' ' . Xml::namespaceSelector( $namespace, '' ); } @@ -147,7 +167,7 @@ class ProtectedTitlesForm { } return - Xml::label( wfMsg('restriction-level') , $this->IdLevel ) . ' ' . + Xml::label( wfMsg('restriction-level') , $this->IdLevel ) . ' ' . Xml::tags( 'select', array( 'id' => $this->IdLevel, 'name' => $this->IdLevel ), implode( "\n", $options ) ); @@ -158,7 +178,7 @@ class ProtectedTitlesForm { * @todo document * @ingroup Pager */ -class ProtectedtitlesPager extends AlphabeticPager { +class ProtectedTitlesPager extends AlphabeticPager { public $mForm, $mConds; function __construct( $form, $conds = array(), $type, $level, $namespace, $sizetype='', $size=0 ) { @@ -176,7 +196,7 @@ class ProtectedtitlesPager extends AlphabeticPager { $this->mResult->seek( 0 ); $lb = new LinkBatch; - while ( $row = $this->mResult->fetchObject() ) { + foreach ( $this->mResult as $row ) { $lb->add( $row->pt_namespace, $row->pt_title ); } @@ -208,12 +228,3 @@ class ProtectedtitlesPager extends AlphabeticPager { } } -/** - * Constructor - */ -function wfSpecialProtectedtitles() { - - $ppForm = new ProtectedTitlesForm(); - - $ppForm->showList(); -} diff --git a/includes/specials/SpecialRandompage.php b/includes/specials/SpecialRandompage.php index fd3f17f2..6299f384 100644 --- a/includes/specials/SpecialRandompage.php +++ b/includes/specials/SpecialRandompage.php @@ -1,11 +1,31 @@ , Ilmari Karonen + */ /** * Special page to direct the user to a random page * * @ingroup SpecialPage - * @author Rob Church , Ilmari Karonen - * @license GNU General Public Licence 2.0 or later */ class RandomPage extends SpecialPage { private $namespaces; // namespaces to select pages from @@ -33,7 +53,7 @@ class RandomPage extends SpecialPage { } public function execute( $par ) { - global $wgOut, $wgContLang; + global $wgOut, $wgContLang, $wgRequest; if ($par) { $this->setNamespace( $wgContLang->getNsIndex( $par ) ); @@ -48,7 +68,9 @@ class RandomPage extends SpecialPage { return; } - $query = $this->isRedirect() ? 'redirect=no' : ''; + $redirectParam = $this->isRedirect() ? array( 'redirect' => 'no' ) : array(); + $query = array_merge( $wgRequest->getValues(), $redirectParam ); + unset( $query['title'] ); $wgOut->redirect( $title->getFullUrl( $query ) ); } diff --git a/includes/specials/SpecialRandomredirect.php b/includes/specials/SpecialRandomredirect.php index 28cb2aae..88c81b31 100644 --- a/includes/specials/SpecialRandomredirect.php +++ b/includes/specials/SpecialRandomredirect.php @@ -1,11 +1,31 @@ , Ilmari Karonen + */ /** * Special page to direct the user to a random redirect page (minus the second redirect) * * @ingroup SpecialPage - * @author Rob Church , Ilmari Karonen - * @license GNU General Public Licence 2.0 or later */ class SpecialRandomredirect extends RandomPage { function __construct(){ diff --git a/includes/specials/SpecialRecentchanges.php b/includes/specials/SpecialRecentchanges.php index 283eeaf4..c012beca 100644 --- a/includes/specials/SpecialRecentchanges.php +++ b/includes/specials/SpecialRecentchanges.php @@ -1,15 +1,36 @@ includable( true ); + public function __construct( $name = 'Recentchanges' ) { + parent::__construct( $name ); } /** @@ -91,7 +112,7 @@ class SpecialRecentChanges extends SpecialPage { /** * Main execution point * - * @param $subpage string + * @param $subpage String */ public function execute( $subpage ) { global $wgRequest, $wgOut; @@ -142,7 +163,7 @@ class SpecialRecentChanges extends SpecialPage { /** * Return an array with a ChangesFeed object and ChannelFeed object * - * @return array + * @return Array */ public function getFeedObject( $feedFormat ){ $changesFeed = new ChangesFeed( $feedFormat, 'rcfeed' ); @@ -186,7 +207,7 @@ class SpecialRecentChanges extends SpecialPage { * update the timestamp * * @param $feedFormat String - * @return string or false + * @return String or false */ public function checkLastModified( $feedFormat ) { global $wgUseRCPatrol, $wgOut; @@ -275,7 +296,7 @@ class SpecialRecentChanges extends SpecialPage { /** * Process the query * - * @param $conds array + * @param $conds Array * @param $opts FormOptions * @return database result or false (for Recentchangeslinked only) */ @@ -290,6 +311,7 @@ class SpecialRecentChanges extends SpecialPage { $dbr = wfGetDB( DB_SLAVE ); $limit = $opts['limit']; $namespace = $opts['namespace']; + $select = '*'; $invert = $opts['invert']; // JOIN on watchlist for users @@ -302,14 +324,17 @@ class SpecialRecentChanges extends SpecialPage { $tables[] = 'page'; $join_conds['page'] = array('LEFT JOIN', 'rc_cur_id=page_id'); } - // Tag stuff. - $fields = array(); - // Fields are * in this case, so let the function modify an empty array to keep it happy. - ChangeTags::modifyDisplayQuery( - $tables, $fields, $conds, $join_conds, $query_options, $opts['tagfilter'] - ); + if ( !$this->including() ) { + // Tag stuff. + // Doesn't work when transcluding. See bug 23293 + $fields = array(); + // Fields are * in this case, so let the function modify an empty array to keep it happy. + ChangeTags::modifyDisplayQuery( + $tables, $fields, $conds, $join_conds, $query_options, $opts['tagfilter'] + ); + } - if ( !wfRunHooks( 'SpecialRecentChangesQuery', array( &$conds, &$tables, &$join_conds, $opts, &$query_options ) ) ) + if ( !wfRunHooks( 'SpecialRecentChangesQuery', array( &$conds, &$tables, &$join_conds, $opts, &$query_options, &$select ) ) ) return false; // Don't use the new_namespace_time timestamp index if: @@ -317,8 +342,8 @@ class SpecialRecentChanges extends SpecialPage { // (b) We want all pages NOT in a certain namespaces (inverted) // (c) There is a tag to filter on (use tag index instead) // (d) UNION + sort/limit is not an option for the DBMS - if( is_null($namespace) - || $invert + if( is_null( $namespace ) + || ( $invert && !is_null( $namespace ) ) || $opts['tagfilter'] != '' || !$dbr->unionSupportsOrderAndLimit() ) { @@ -329,7 +354,7 @@ class SpecialRecentChanges extends SpecialPage { // We have a new_namespace_time index! UNION over new=(0,1) and sort result set! } else { // New pages - $sqlNew = $dbr->selectSQLText( $tables, '*', + $sqlNew = $dbr->selectSQLText( $tables, $select, array( 'rc_new' => 1 ) + $conds, __METHOD__, array( 'ORDER BY' => 'rc_timestamp DESC', 'LIMIT' => $limit, @@ -354,7 +379,7 @@ class SpecialRecentChanges extends SpecialPage { /** * Send output to $wgOut, only called if not used feeds * - * @param $rows array of database rows + * @param $rows Array of database rows * @param $opts FormOptions */ public function webOutput( $rows, $opts ) { @@ -437,7 +462,8 @@ class SpecialRecentChanges extends SpecialPage { $defaults = $opts->getAllValues(); $nondefaults = $opts->getChangedValues(); - $opts->consumeValues( array( 'namespace', 'invert', 'tagfilter' ) ); + $opts->consumeValues( array( 'namespace', 'invert', 'tagfilter', + 'categories', 'categories_any' ) ); $panel = array(); $panel[] = $this->optionsPanel( $defaults, $nondefaults ); @@ -467,11 +493,11 @@ class SpecialRecentChanges extends SpecialPage { $unconsumed = $opts->getUnconsumedValues(); foreach( $unconsumed as $key => $value ) { - $out .= Xml::hidden( $key, $value ); + $out .= Html::hidden( $key, $value ); } $t = $this->getTitle(); - $out .= Xml::hidden( 'title', $t->getPrefixedText() ); + $out .= Html::hidden( 'title', $t->getPrefixedText() ); $form = Xml::tags( 'form', array( 'action' => $wgScript ), $out ); $panel[] = $form; $panelString = implode( "\n", $panel ); @@ -480,8 +506,6 @@ class SpecialRecentChanges extends SpecialPage { Xml::fieldset( wfMsg( 'recentchanges-legend' ), $panelString, array( 'class' => 'rcoptions' ) ) ); - $wgOut->addHTML( ChangesList::flagLegend() ); - $this->setBottomText( $wgOut, $opts ); } @@ -489,7 +513,7 @@ class SpecialRecentChanges extends SpecialPage { * Get options to be displayed in a form * * @param $opts FormOptions - * @return array + * @return Array */ function getExtraOptions( $opts ){ $extraOpts = array(); @@ -531,7 +555,7 @@ class SpecialRecentChanges extends SpecialPage { * Creates the choose namespace selection * * @param $opts FormOptions - * @return string + * @return String */ protected function namespaceFilterForm( FormOptions $opts ) { $nsSelect = Xml::namespaceSelector( $opts['namespace'], '' ); @@ -544,7 +568,7 @@ class SpecialRecentChanges extends SpecialPage { * Create a input to filter changes by categories * * @param $opts FormOptions - * @return array + * @return Array */ protected function categoryFilterForm( FormOptions $opts ) { list( $label, $input ) = Xml::inputLabelSep( wfMsg('rc_categories'), @@ -559,13 +583,13 @@ class SpecialRecentChanges extends SpecialPage { /** * Filter $rows by categories set in $opts * - * @param $rows array of database rows + * @param $rows Array of database rows * @param $opts FormOptions */ function filterByCategories( &$rows, FormOptions $opts ) { - $categories = array_map( 'trim', explode( "|" , $opts['categories'] ) ); + $categories = array_map( 'trim', explode( '|' , $opts['categories'] ) ); - if( empty($categories) ) { + if( !count( $categories ) ) { return; } @@ -573,32 +597,34 @@ class SpecialRecentChanges extends SpecialPage { $cats = array(); foreach( $categories as $cat ) { $cat = trim( $cat ); - if( $cat == "" ) continue; + if( $cat == '' ) continue; $cats[] = $cat; } # Filter articles $articles = array(); $a2r = array(); + $rowsarr = array(); foreach( $rows AS $k => $r ) { $nt = Title::makeTitle( $r->rc_namespace, $r->rc_title ); $id = $nt->getArticleID(); if( $id == 0 ) continue; # Page might have been deleted... - if( !in_array($id, $articles) ) { + if( !in_array( $id, $articles ) ) { $articles[] = $id; } - if( !isset($a2r[$id]) ) { + if( !isset( $a2r[$id] ) ) { $a2r[$id] = array(); } $a2r[$id][] = $k; + $rowsarr[$k] = $r; } # Shortcut? - if( !count($articles) || !count($cats) ) + if( !count( $articles ) || !count( $cats ) ) return ; # Look up - $c = new Categoryfinder ; + $c = new Categoryfinder; $c->seed( $articles, $cats, $opts['categories_any'] ? "OR" : "AND" ) ; $match = $c->run(); @@ -607,7 +633,7 @@ class SpecialRecentChanges extends SpecialPage { foreach( $match AS $id ) { foreach( $a2r[$id] AS $rev ) { $k = $rev; - $newrows[$k] = $rows[$k]; + $newrows[$k] = $rowsarr[$k]; } } $rows = $newrows; @@ -615,9 +641,11 @@ class SpecialRecentChanges extends SpecialPage { /** * Makes change an option link which carries all the other options - * @param $title see Title - * @param $override - * @param $options + * + * @param $title Title + * @param $override Array: options to override + * @param $options Array: current options + * @param $active Boolean: whether to show the link in bold */ function makeOptionsLink( $title, $override, $options, $active = false ) { global $wgUser; @@ -633,8 +661,9 @@ class SpecialRecentChanges extends SpecialPage { /** * Creates the options panel. - * @param $defaults array - * @param $nondefaults array + * + * @param $defaults Array + * @param $nondefaults Array */ function optionsPanel( $defaults, $nondefaults ) { global $wgLang, $wgUser, $wgRCLinkLimits, $wgRCLinkDays; diff --git a/includes/specials/SpecialRecentchangeslinked.php b/includes/specials/SpecialRecentchangeslinked.php index 3b549843..db0f554d 100644 --- a/includes/specials/SpecialRecentchangeslinked.php +++ b/includes/specials/SpecialRecentchangeslinked.php @@ -1,15 +1,36 @@ includable( true ); + parent::__construct( 'Recentchangeslinked' ); } public function getDefaultOptions() { @@ -52,7 +73,7 @@ class SpecialRecentchangeslinked extends SpecialRecentchanges { } $title = Title::newFromURL( $target ); if( !$title || $title->getInterwiki() != '' ){ - $wgOut->wrapWikiMsg( "
    \n$1

    ", 'allpagesbadtitle' ); + $wgOut->wrapWikiMsg( "
    \n$1\n

    ", 'allpagesbadtitle' ); return false; } @@ -78,7 +99,8 @@ class SpecialRecentchangeslinked extends SpecialRecentchanges { $query_options = array(); // left join with watchlist table to highlight watched rows - if( $uid = $wgUser->getId() ) { + $uid = $wgUser->getId(); + if( $uid ) { $tables[] = 'watchlist'; $select[] = 'wl_user'; $join_conds['watchlist'] = array( 'LEFT JOIN', "wl_user={$uid} AND wl_title=rc_title AND wl_namespace=rc_namespace" ); @@ -88,12 +110,13 @@ class SpecialRecentchangeslinked extends SpecialRecentchanges { $join_conds['page'] = array('LEFT JOIN', 'rc_cur_id=page_id'); $select[] = 'page_latest'; } + if ( !$this->including() ) { // bug 23293 + ChangeTags::modifyDisplayQuery( $tables, $select, $conds, $join_conds, + $query_options, $opts['tagfilter'] ); + } - ChangeTags::modifyDisplayQuery( $tables, $select, $conds, $join_conds, - $query_options, $opts['tagfilter'] ); - - // XXX: parent class does this, should we too? - // wfRunHooks('SpecialRecentChangesQuery', array( &$conds, &$tables, &$join_conds, $opts ) ); + if ( !wfRunHooks( 'SpecialRecentChangesQuery', array( &$conds, &$tables, &$join_conds, $opts, &$query_options, &$select ) ) ) + return false; if( $ns == NS_CATEGORY && !$showlinkedto ) { // special handling for categories diff --git a/includes/specials/SpecialRemoveRestrictions.php b/includes/specials/SpecialRemoveRestrictions.php deleted file mode 100644 index a3428a5a..00000000 --- a/includes/specials/SpecialRemoveRestrictions.php +++ /dev/null @@ -1,60 +0,0 @@ -getSkin(); - $title = SpecialPage::getTitleFor( 'RemoveRestrictions' ); - $id = $wgRequest->getVal( 'id' ); - if( !is_numeric( $id ) ) { - $wgOut->addWikiMsg( 'removerestrictions-noid' ); - return; - } - - UserRestriction::purgeExpired(); - $r = UserRestriction::newFromId( $id, true ); - if( !$r ) { - $wgOut->addWikiMsg( 'removerestrictions-wrongid' ); - return; - } - - $form = array(); - $form['removerestrictions-user'] = $sk->userLink( $r->getSubjectId(), $r->getSubjectText() ) . - $sk->userToolLinks( $r->getSubjectId(), $r->getSubjectText() ); - $form['removerestrictions-type'] = UserRestriction::formatType( $r->getType() ); - if( $r->isPage() ) - $form['removerestrictions-page'] = $sk->link( $r->getPage() ); - if( $r->isNamespace() ) - $form['removerestrictions-namespace'] = $wgLang->getDisplayNsText( $r->getNamespace() ); - $form['removerestrictions-reason'] = Xml::input( 'reason' ); - - $result = null; - if( $wgRequest->wasPosted() && $wgUser->matchEditToken( $wgRequest->getVal( 'edittoken' ) ) ) - $result = wfSpecialRemoveRestrictionsProcess( $r ); - - $wgOut->addWikiMsg( 'removerestrictions-intro' ); - $wgOut->addHTML( Xml::fieldset( wfMsgHtml( 'removerestrictions-legend' ) ) ); - if( $result ) - $wgOut->addHTML( '' . wfMsgExt( 'removerestrictions-success', - 'parseinline', $r->getSubjectText() ) . '' ); - $wgOut->addHTML( Xml::openElement( 'form', array( 'action' => $title->getLocalUrl( array( 'id' => $id ) ), - 'method' => 'post' ) ) ); - $wgOut->addHTML( Xml::buildForm( $form, 'removerestrictions-submit' ) ); - $wgOut->addHTML( Xml::hidden( 'id', $r->getId() ) ); - $wgOut->addHTML( Xml::hidden( 'title', $title->getPrefixedDbKey() ) ); - $wgOut->addHTML( Xml::hidden( 'edittoken', $wgUser->editToken() ) ); - $wgOut->addHTML( "
    " ); -} - -function wfSpecialRemoveRestrictionsProcess( $r ) { - global $wgRequest; - $reason = $wgRequest->getVal( 'reason' ); - $result = $r->delete(); - $log = new LogPage( 'restrict' ); - $params = array( $r->getType() ); - if( $r->isPage() ) - $params[] = $r->getPage()->getPrefixedDbKey(); - if( $r->isNamespace() ) - $params[] = $r->getNamespace(); - $log->addEntry( 'remove', Title::makeTitle( NS_USER, $r->getSubjectText() ), $reason, $params ); - return $result; -} diff --git a/includes/specials/SpecialResetpass.php b/includes/specials/SpecialResetpass.php index 967d2119..0af6fbf0 100644 --- a/includes/specials/SpecialResetpass.php +++ b/includes/specials/SpecialResetpass.php @@ -1,11 +1,29 @@ readOnlyPage(); + return; + } + $this->mUserName = $wgRequest->getVal( 'wpName' ); $this->mOldpass = $wgRequest->getVal( 'wpPassword' ); $this->mNewpass = $wgRequest->getVal( 'wpNewPassword' ); @@ -26,6 +49,7 @@ class SpecialResetpass extends SpecialPage { $this->setHeaders(); $this->outputHeader(); + $wgOut->disallowUserJs(); if( !$wgAuth->allowPasswordChange() ) { $this->error( wfMsg( 'resetpass_forbidden' ) ); @@ -84,18 +108,18 @@ class SpecialResetpass extends SpecialPage { function showForm() { global $wgOut, $wgUser, $wgRequest; - $wgOut->disallowUserJs(); - - $self = SpecialPage::getTitleFor( 'Resetpass' ); + $self = $this->getTitle(); if ( !$this->mUserName ) { $this->mUserName = $wgUser->getName(); } $rememberMe = ''; if ( !$wgUser->isLoggedIn() ) { + global $wgCookieExpiration, $wgLang; $rememberMe = '' . '' . '' . - Xml::checkLabel( wfMsg( 'remembermypassword' ), + Xml::checkLabel( + wfMsgExt( 'remembermypassword', 'parsemag', $wgLang->formatNum( ceil( $wgCookieExpiration / ( 3600 * 24 ) ) ) ), 'wpRemember', 'wpRemember', $wgRequest->getCheck( 'wpRemember' ) ) . '' . @@ -113,9 +137,9 @@ class SpecialResetpass extends SpecialPage { 'method' => 'post', 'action' => $self->getLocalUrl(), 'id' => 'mw-resetpass-form' ) ) . "\n" . - Xml::hidden( 'token', $wgUser->editToken() ) . "\n" . - Xml::hidden( 'wpName', $this->mUserName ) . "\n" . - Xml::hidden( 'returnto', $wgRequest->getVal( 'returnto' ) ) . "\n" . + Html::hidden( 'token', $wgUser->editToken() ) . "\n" . + Html::hidden( 'wpName', $this->mUserName ) . "\n" . + Html::hidden( 'returnto', $wgRequest->getVal( 'returnto' ) ) . "\n" . wfMsgExt( 'resetpass_text', array( 'parse' ) ) . "\n" . Xml::openElement( 'table', array( 'id' => 'mw-resetpass-table' ) ) . "\n" . $this->pretty( array( @@ -196,7 +220,6 @@ class SpecialResetpass extends SpecialPage { } catch( PasswordError $e ) { wfRunHooks( 'PrefsPasswordAudit', array( $user, $newpass, 'error' ) ); throw new PasswordError( $e->getMessage() ); - return; } $user->setCookies(); diff --git a/includes/specials/SpecialRevisiondelete.php b/includes/specials/SpecialRevisiondelete.php index b2db869c..f77fc347 100644 --- a/includes/specials/SpecialRevisiondelete.php +++ b/includes/specials/SpecialRevisiondelete.php @@ -1,12 +1,32 @@ addHTML( "
    ', +'upload-success-subj' => 'Cargata correctament', +'upload-success-msg' => 'A carga de [$2] ha surtiu con exito. Ye disponible aquí: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problema en a carga', +'upload-failure-msg' => 'I ha habiu un problema con o a suya carga dende [$2]: + +$1', +'upload-warning-subj' => 'Alvertencia de carga', +'upload-warning-msg' => 'I habió un problea con a carga de [$2]. Puede tornar ta [[Special:Upload/stash/$1|upload form]] pa correchir iste problema.', 'upload-proto-error' => 'Protocolo incorrecto', 'upload-proto-error-text' => 'Si quiere cargar fichers dende atra pachina, a URL ha de prencipiar por http:// u ftp://.', @@ -1537,6 +1560,7 @@ Fendo click en un encabezau de columna se cambia o criterio d'ordenación.", 'listfiles_search_for' => "Mirar por nombre d'o fichero:", 'imgfile' => 'fichero', 'listfiles' => 'Lista de imachens', +'listfiles_thumb' => 'Miniatura', 'listfiles_date' => 'Calendata:', 'listfiles_name' => 'Nombre', 'listfiles_user' => 'Usuario', @@ -1650,8 +1674,8 @@ Debaixo s'amuestra a descripción d'a suya [$2 pachina de descripción].", 'statistics-edits' => 'Edicions en pachinas dende que se debantó {{SITENAME}}', 'statistics-edits-average' => "Meya d'edicions por pachina", 'statistics-views-total' => 'Total de vesitas', +'statistics-views-total-desc' => "No s'inclui as vesitas a pachinas inexistents ni a pachinas especials", 'statistics-views-peredit' => 'Vesitas por edición', -'statistics-jobqueue' => "Longaria d'a [http://www.mediawiki.org/wiki/Manual:Job_queue coda de treballos]", 'statistics-users' => '[[Special:ListUsers|Usuarios]] rechistratos', 'statistics-users-active' => 'Usuarios activos', 'statistics-users-active-desc' => 'Usuarios que han feito qualsiquier acción en {{PLURAL:$1|o zaguer día|os zaguers $1 días}}', @@ -1664,7 +1688,7 @@ Ixos vinclos habrían de ir millor t'a pachina especifica apropiada.
    Una pachina se considera pachina de desambigación si fa servir una plantilla provenient de [[MediaWiki:Disambiguationspage]].", 'doubleredirects' => 'Reendreceras dobles', -'doubleredirectstext' => "En ista pachina s'amuestran as pachinas que son reendreceras enta atras pachinas reendrezatas. +'doubleredirectstext' => "En ista pachina s'amuestran as pachinas que son reendreceras enta atras pachinas reendrezatas. Cada ringlera contién o vinclo t'a primer y segunda reendreceras, y tamién o destino d'a segunda reendrecera, que ye a ormino a pachina obchectivo \"reyal\" a la que a primer pachina habría d'endrezar.", 'double-redirect-fixed-move' => "S'ha tresladau [[$1]], agora ye una endrecera ta [[$2]]", 'double-redirect-fixer' => 'Apanyador de reendreceras', @@ -1688,6 +1712,8 @@ Cada ringlera contién o vinclo t'a primer y segunda reendreceras, y tamién o d 'nmembers' => '$1 {{PLURAL:$1|miembro|miembros}}', 'nrevisions' => '$1 {{PLURAL:$1|versión|versions}}', 'nviews' => '$1 {{PLURAL:$1|vesita|vesitas}}', +'nimagelinks' => "S'emplega en $1 {{PLURAL:$1|pachina|pachinas}}", +'ntransclusions' => "s'emplega en $1 {{PLURAL:$1|pachina|pachinas}}", 'specialpage-empty' => 'Ista pachina ye bueda.', 'lonelypages' => 'Pachinas popiellas', 'lonelypagestext' => "As siguients pachinas no tienen vinclos dende atras pachinas ni s'incluyen en atras pachinas de {{SITENAME}}.", @@ -1843,34 +1869,40 @@ Protocolos suportados: $1', 'listgrouprights-removegroup-self-all' => 'Salir de todas as collas', # E-mail user -'mailnologin' => "No ninviar l'adreza", -'mailnologintext' => "Ha d'haber [[Special:UserLogin|encetato una sesión]] y tener una adreza conforme de correu-e en as suyas [[Special:Preferences|preferencias]] ta ninviar un correu electronico ta atros usuarios.", -'emailuser' => 'Ninviar un correu electronico ta iste usuario', -'emailpage' => "Ninviar correu ta l'usuario", -'emailpagetext' => 'Puede fer servir o formulario que bi ye contino ta ninviar un correu electronico a iste usuario. +'mailnologin' => "No ninviar l'adreza", +'mailnologintext' => "Ha d'haber [[Special:UserLogin|encetato una sesión]] y tener una adreza conforme de correu-e en as suyas [[Special:Preferences|preferencias]] ta ninviar un correu electronico ta atros usuarios.", +'emailuser' => 'Ninviar un correu electronico ta iste usuario', +'emailpage' => "Ninviar correu ta l'usuario", +'emailpagetext' => 'Puede fer servir o formulario que bi ye contino ta ninviar un correu electronico a iste usuario. L\'adreza de correu-e que endicó en as suyas [[Special:Preferences|preferencias d\'usuario]] amaneixerá en o campo "Remitent" ta que o destinatario pueda responder-le.', -'usermailererror' => "L'obchecto de correu retornó una error:", -'defemailsubject' => 'Correu de {{SITENAME}}', -'noemailtitle' => 'No bi ha garra adreza de correu electronico', -'noemailtext' => 'Iste usuario no ha especificato una adreza conforme de correu electronico.', -'nowikiemailtitle' => 'no se premiten os correus electronicos', -'nowikiemailtext' => "Iste usuario ha esleyiu de no recibir correus electronicos d'atros usuarios.", -'email-legend' => 'Ninviar un correu electronico ta atro usuario de {{SITENAME}}', -'emailfrom' => 'De:', -'emailto' => 'Ta:', -'emailsubject' => 'Afer:', -'emailmessage' => 'Mensache:', -'emailsend' => 'Ninviar', -'emailccme' => "Ninviar-me una copia d'o mío mensache.", -'emailccsubject' => "Copia d'o suyo mensache ta $1: $2", -'emailsent' => 'Mensache de correu ninviato', -'emailsenttext' => "S'ha ninviato o suyo correu.", -'emailuserfooter' => 'Iste correu-e s\'ha ninviato por $1 ta $2 fendo servir a función "Email user" de {{SITENAME}}.', +'usermailererror' => "L'obchecto de correu retornó una error:", +'defemailsubject' => 'Correu de {{SITENAME}}', +'usermaildisabled' => "S'ha desactivau o ninvío de correus electronicos a os usuarios", +'usermaildisabledtext' => 'En ista wiki no puet ninviar un correu-e a atros usuarios', +'noemailtitle' => 'No bi ha garra adreza de correu electronico', +'noemailtext' => 'Iste usuario no ha especificato una adreza conforme de correu electronico.', +'nowikiemailtitle' => 'no se premiten os correus electronicos', +'nowikiemailtext' => "Iste usuario ha esleyiu de no recibir correus electronicos d'atros usuarios.", +'email-legend' => 'Ninviar un correu electronico ta atro usuario de {{SITENAME}}', +'emailfrom' => 'De:', +'emailto' => 'Ta:', +'emailsubject' => 'Afer:', +'emailmessage' => 'Mensache:', +'emailsend' => 'Ninviar', +'emailccme' => "Ninviar-me una copia d'o mío mensache.", +'emailccsubject' => "Copia d'o suyo mensache ta $1: $2", +'emailsent' => 'Mensache de correu ninviato', +'emailsenttext' => "S'ha ninviato o suyo correu.", +'emailuserfooter' => 'Iste correu-e s\'ha ninviato por $1 ta $2 fendo servir a función "Email user" de {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Deixando un mensache de sistema.', +'usermessage-editor' => "Mensachero d'o sistema", # Watchlist 'watchlist' => 'Lista de seguimiento', 'mywatchlist' => 'Lista de seguimiento', -'watchlistfor' => "(de '''$1''')", +'watchlistfor2' => 'De $1 $2', 'nowatchlist' => 'No tien garra pachina en a lista de seguimiento.', 'watchlistanontext' => "Ha de $1 ta veyer u editar as dentradas d'a suya lista de seguimiento.", 'watchnologin' => 'No ha encetato a sesión', @@ -1985,7 +2017,10 @@ A zaguer edición d'a pachina la fació [[User:$3|$3]] ([[User talk:$3|descusió 'revertpage' => "S'han revertito as edicions de [[Special:Contributions/$2|$2]] ([[User talk:$2|Descusión]]); tornando t'a zaguera versión editada por [[User:$1|$1]]", 'revertpage-nouser' => "S'han revertito as edicions feitas por (nombre d'usuario eliminato) a la zaguera versión feita por [[User:$1|$1]]", 'rollback-success' => "Revertidas as edicions de $1; s'ha retornato t'a zaguer versión de $2.", -'sessionfailure' => "Pareix que bi ha un problema con a suya sesión; + +# Edit tokens +'sessionfailure-title' => 'Error de sesión', +'sessionfailure' => "Pareix que bi ha un problema con a suya sesión; s'ha anulato ista acción como mida de precura contra seqüestros de sesión. Torne t'a pachina anterior, recargue a pachina y torne a prebar alavez.", @@ -2109,18 +2144,21 @@ $1", 'month' => 'Dende o mes (y anteriors):', 'year' => "Dende l'anyo (y anteriors):", -'sp-contributions-newbies' => "Amostrar nomás as contrebucions d'os usuarios nuevos", -'sp-contributions-newbies-sub' => 'Por nuevos usuarios', -'sp-contributions-newbies-title' => "Contrebucions d'os nuevos usuarios", -'sp-contributions-blocklog' => 'Rechistro de bloqueyos', -'sp-contributions-deleted' => "contribucions d'usuario borradas", -'sp-contributions-logs' => 'rechistros', -'sp-contributions-talk' => 'descusión', -'sp-contributions-userrights' => "administración de dreitos d'usuario", -'sp-contributions-blocked-notice' => "Iste usuario ye bloqueyato en istos momentos. A zaguer dentrada d'o rechistro de bloqueyos se presienta debaixo ta más información:", -'sp-contributions-search' => 'Mirar contribucions', -'sp-contributions-username' => "Adreza IP u nombre d'usuario:", -'sp-contributions-submit' => 'Mirar', +'sp-contributions-newbies' => "Amostrar nomás as contrebucions d'os usuarios nuevos", +'sp-contributions-newbies-sub' => 'Por nuevos usuarios', +'sp-contributions-newbies-title' => "Contrebucions d'os nuevos usuarios", +'sp-contributions-blocklog' => 'Rechistro de bloqueyos', +'sp-contributions-deleted' => "contribucions d'usuario borradas", +'sp-contributions-logs' => 'rechistros', +'sp-contributions-talk' => 'descusión', +'sp-contributions-userrights' => "administración de dreitos d'usuario", +'sp-contributions-blocked-notice' => "Iste usuario ye bloqueyato en istos momentos. A zaguer dentrada d'o rechistro de bloqueyos se presienta debaixo ta más información:", +'sp-contributions-blocked-notice-anon' => "Ista adreza IP se troba acutalment bloqueyada. +Ta más información, s'amuestra contino a zaguera dentrada d'o rechistro de bloqueyos.", +'sp-contributions-search' => 'Mirar contribucions', +'sp-contributions-username' => "Adreza IP u nombre d'usuario:", +'sp-contributions-toponly' => 'Mostrar nomás as zagueras versions', +'sp-contributions-submit' => 'Mirar', # What links here 'whatlinkshere' => 'Pachinas que enlazan con ista', @@ -2183,7 +2221,6 @@ as pachinas que s'han vandalizato).", 'ipb-edit-dropdown' => "Editar as razons d'o bloqueyo", 'ipb-unblock-addr' => 'Desbloqueyar $1', 'ipb-unblock' => 'Desbloqueyar un usuario u una IP', -'ipb-blocklist-addr' => 'Bloqueyos actuals de $1', 'ipb-blocklist' => 'Amostrar bloqueyos actuals', 'ipb-blocklist-contribs' => 'Contrebucions de $1', 'unblockip' => 'Desbloqueyar usuario', @@ -2252,6 +2289,8 @@ $1 ya ye bloqueyato. Quiere cambiar as condicions d'o bloqueyo?", 'sorbs_create_account_reason' => 'A suya adreza IP ye en a lista de proxies ubiertos en a DNSBL de {{SITENAME}}. No puede creyar una cuenta', 'cant-block-while-blocked' => 'No puet bloqueyar a atros usuarios en o tiempo que ye bloqueyato.', 'cant-see-hidden-user' => "L'usuario a qui ye mirando de bloqueyar ya ye bloqueyau y amagau. Como que ye posible que vusté no tienga o dreito hideuser, no puede veyer ni editar os bloqueyos d'ixe usuario.", +'ipbblocked' => 'No puede bloqueyar ni desbloqueyar atros usuarios porque ya ye bloqueyau.', +'ipbnounblockself' => 'No tiene permiso ta sacar o suyo propio bloqueyo', # Developer tools 'lockdb' => 'Trancar a base de datos', @@ -2341,6 +2380,7 @@ A pachina de destino ("[[:$1]]") ya existe. Quiere borrar-la ta premitir o tresl 'immobile-source-page' => 'Ista pachina no se puet tresladar.', 'immobile-target-page' => 'No se puet tresladar ta ixe títol.', 'imagenocrossnamespace' => 'No se puede tresladar un fichero ta un espacio de nombres que no sía fichers', +'nonfile-cannot-move-to-file' => 'No ye posible de mover qualcosa que no siga un fichero ta o espacio de nombres fichers', 'imagetypemismatch' => 'A nueva estensión no concuerda con o tipo de fichero', 'imageinvalidfilename' => "O nombre d'o fichero obchectivo no ye conforme", 'fix-double-redirects' => 'Esviellar todas as reendreceras que plegan ta o títol orichinal', @@ -2416,6 +2456,7 @@ Todas as importacions interwiki se rechistran en o [[Special:Log/import|rechistr 'importstart' => 'Importando pachinas...', 'import-revision-count' => '$1 {{PLURAL:$1|versión|versions}}', 'importnopages' => 'No bi ha garra pachina ta importar.', +'imported-log-entries' => "S'ha importau {{PLURAL:$1|una dentrada d'o rechistro|S'han importau $1 dentradas d'o rechistro}}.", 'importfailed' => 'Ha fallato a importación: $1', 'importunknownsource' => "O tipo de fuent d'a importación ye esconoixito", 'importcantopen' => "No s'ha puesto importar iste fichero", @@ -2509,6 +2550,8 @@ Puede veyer-ne, manimenos, o codigo fuent.', 'tooltip-upload' => 'Prencipia a carga', 'tooltip-rollback' => '"Revertir" revierte todas as zagueras edicions d\'un mesmo usuario en ista pachina nomás con un clic.', 'tooltip-undo' => '"Desfer" revierte a edición trigata y ubre a pachina d\'edición en o modo de previsualización. Deixa escribir una razón en o resumen d\'edición.', +'tooltip-preferences-save' => 'Alzar as preferencias', +'tooltip-summary' => 'Escribir un breu resumen', # Metadata 'nodublincore' => 'Metadatos Dublin Core RDF desactivatos en iste servidor.', @@ -2605,19 +2648,22 @@ $1', 'nextdiff' => "Ir t'a edición siguient →", # Media information -'mediawarning' => "'''Pare cuenta!''': Iste tipo de fichero puet contener codigo endino. +'mediawarning' => "'''Pare cuenta!''': Iste tipo de fichero puet contener codigo endino. En executar-lo, podría meter en un contornillo a seguridat d'o suyo sistema.", 'imagemaxsize' => "Limite de grandaria d'as imáchens:
    ''(ta pachinas de descripción de fichers)''", 'thumbsize' => "Midas d'a miniatura:", 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|pachina|pachinas}}', -'file-info' => "(grandaria d'o fichero: $1; tipo MIME: $2)", -'file-info-size' => "($1 × $2 píxels; grandaria d'o fichero: $3; tipo MIME: $4)", +'file-info' => "grandaria d'o fichero: $1; tipo MIME: $2", +'file-info-size' => "$1 × $2 píxels; grandaria d'o fichero: $3; tipo MIME: $4", 'file-nohires' => 'No bi ha garra versión con resolución más gran.', -'svg-long-desc' => '(fichero SVG, nominalment $1 × $2 píxels, grandaria: $3)', +'svg-long-desc' => 'fichero SVG, nominalment $1 × $2 píxels, grandaria: $3', 'show-big-image' => 'Imachen en a maxima resolución', 'show-big-image-thumb' => "Grandaria d'ista anvista previa: $1 × $2 píxels", 'file-info-gif-looped' => 'embuclau', 'file-info-gif-frames' => '$1 {{PLURAL:$1|imachen|imáchens}}', +'file-info-png-looped' => 'embuclau', +'file-info-png-repeat' => 'reproducito $1 {{PLURAL:$1|vegada|vegadas}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|imáchens|imáchens}}', # Special:NewFiles 'newimages' => 'Galería de nuevas imachens', @@ -2926,24 +2972,24 @@ Nomás se consideran os elementos de lista (ringleras que escomienzan por *). O 'limitall' => 'Totz', # E-mail address confirmation -'confirmemail' => 'Confirmar adreza de correu-e', -'confirmemail_noemail' => "No tiene una adreza de correu-e conforme en as suyas [[Special:Preferences|preferencias d'usuario]].", -'confirmemail_text' => "{{SITENAME}} requiere que confirme a suya adreza de correu-e antis de poder usar as funcions de correu-e. Punche o botón de baxo ta ninviar un mensache de confirmación t'a suya adreza. O mensache incluirá un vinclo con un codigo. Escriba-lo ta confirmar que a suya adreza ye conforme.", -'confirmemail_pending' => "Ya se le ha ninviato un codigo de confirmación; si creyó una cuenta fa poco tiempo, puede que s'estime más d'aguardar bells menutos ta veyer si le plega antes de pedir un nuevo codigo.", -'confirmemail_send' => 'Ninviar un codigo de confirmación.', -'confirmemail_sent' => "S'ha ninviato un correu de confirmación.", -'confirmemail_oncreate' => "S'ha ninviato un codigo de confirmación t'a suya adreza de correu-e. +'confirmemail' => 'Confirmar adreza de correu-e', +'confirmemail_noemail' => "No tiene una adreza de correu-e conforme en as suyas [[Special:Preferences|preferencias d'usuario]].", +'confirmemail_text' => "{{SITENAME}} requiere que confirme a suya adreza de correu-e antis de poder usar as funcions de correu-e. Punche o botón de baxo ta ninviar un mensache de confirmación t'a suya adreza. O mensache incluirá un vinclo con un codigo. Escriba-lo ta confirmar que a suya adreza ye conforme.", +'confirmemail_pending' => "Ya se le ha ninviato un codigo de confirmación; si creyó una cuenta fa poco tiempo, puede que s'estime más d'aguardar bells menutos ta veyer si le plega antes de pedir un nuevo codigo.", +'confirmemail_send' => 'Ninviar un codigo de confirmación.', +'confirmemail_sent' => "S'ha ninviato un correu de confirmación.", +'confirmemail_oncreate' => "S'ha ninviato un codigo de confirmación t'a suya adreza de correu-e. Iste codigo no ye necesario ta dentrar, pero amenistará escribir-lo antis d'activar qualsiquier función d'o wiki basata en o correu electronico.", -'confirmemail_sendfailed' => "{{SITENAME}} no ha puesto ninviar-le o mensache de confirmación. Por favor, comprebe que no bi haiga carácters no conformes en l'adreza de correu electronico indicata. +'confirmemail_sendfailed' => "{{SITENAME}} no ha puesto ninviar-le o mensache de confirmación. Por favor, comprebe que no bi haiga carácters no conformes en l'adreza de correu electronico indicata. O programa retornó o siguient codigo d'error: $1", -'confirmemail_invalid' => 'O codigo de confirmación no ye conforme. Regular que o codigo sía circumducito.', -'confirmemail_needlogin' => 'Amenistar $1 ta confirmar a suya adreza de correu-e.', -'confirmemail_success' => 'A suya adreza de correu-e ya ye confirmata. Agora puede [[Special:UserLogin|dentrar]] en o wiki y gronxiar-se-ie.', -'confirmemail_loggedin' => 'A suya adreza de correu-e ya ye confirmata.', -'confirmemail_error' => 'Bella cosa falló en alzar a suya confirmación.', -'confirmemail_subject' => "confirmación de l'adreza de correu-e de {{SITENAME}}", -'confirmemail_body' => 'Belún, probablement vusté mesmo, ha rechistrato una cuenta "$2" con ista adreza de correu-e en {{SITENAME}} dende l\'adreza IP $1. +'confirmemail_invalid' => 'O codigo de confirmación no ye conforme. Regular que o codigo sía circumducito.', +'confirmemail_needlogin' => 'Amenistar $1 ta confirmar a suya adreza de correu-e.', +'confirmemail_success' => 'A suya adreza de correu-e ya ye confirmata. Agora puede [[Special:UserLogin|dentrar]] en o wiki y gronxiar-se-ie.', +'confirmemail_loggedin' => 'A suya adreza de correu-e ya ye confirmata.', +'confirmemail_error' => 'Bella cosa falló en alzar a suya confirmación.', +'confirmemail_subject' => "confirmación de l'adreza de correu-e de {{SITENAME}}", +'confirmemail_body' => 'Belún, probablement vusté mesmo, ha rechistrato una cuenta "$2" con ista adreza de correu-e en {{SITENAME}} dende l\'adreza IP $1. Ta confirmar que ista cuenta reyalment le perteneixe y activar as funcions de correu-e en {{SITENAME}}, ubra iste vinclo en o suyo navegador: @@ -2954,8 +3000,19 @@ Si a cuenta *no* ye suya, siga iste atro vinclo ta anular a confirmación d\'adr $5 Iste codigo de confirmación circumducirá en $4.', -'confirmemail_invalidated' => "Anular a confirmación d'adreza de correu-e", -'invalidateemail' => 'Anular a confirmación de correu-e', +'confirmemail_body_changed' => 'Belún, probablement vusté mesmo, dende l\'adreza IP $1, ha cambiato l\'adreza de correu-e d\'a cuenta "$2" ta ista adreza en {{SITENAME}}. + +Ta confirmar que ista cuenta reyalment le perteneix y ta reactivar as funcions de correu-e en {{SITENAME}}, ubra iste vinclo en o suyo navegador: + +$3 + +Si a cuenta *no* ye suya, siga iste atro vinclo ta anular a confirmación d\'adreza de correu-e: + +$5 + +Iste codigo de confirmación circumducirá en $4.', +'confirmemail_invalidated' => "Anular a confirmación d'adreza de correu-e", +'invalidateemail' => 'Anular a confirmación de correu-e', # Scary transclusion 'scarytranscludedisabled' => "[S'ha desactivato a transclusión interwiki]", @@ -2995,6 +3052,7 @@ Por favor, confirme que reyalment deseya tornar a creyar l'articlo.", 'table_pager_first' => 'Primera pachina', 'table_pager_last' => 'Zaguer pachina', 'table_pager_limit' => 'Amostrar $1 elementos por pachina', +'table_pager_limit_label' => 'Ítems por pachina:', 'table_pager_limit_submit' => 'Ir-ie', 'table_pager_empty' => 'No bi ha garra resultau', @@ -3062,6 +3120,13 @@ Tamién puede fer servir o [[Special:Watchlist/edit|editor estándar]].", 'version-hook-subscribedby' => 'Suscrito por', 'version-version' => '(Versión $1)', 'version-license' => 'Licencia', +'version-poweredby-credits' => "Iste wiki funciona gracias a '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'atros', +'version-license-info' => "MediaWiki ye software libre, puet redistribuyir-lo y/u modificar-lo baixo os terminos d'a Licencia Publica Cheneral GNU publicada por a Free Software Foundation, ya siga d'a suya versión 2 u (a la suya esleción) qualsiquier versión posterior. + +MediaWiki se distribuye con l'asperanza d'estar d'utilidat, pero SIN GARRA GUARANCIA; nian a guarancia implicita de COMERCIALIZACIÓN u ADEQUACIÓN TA UNA FINALIDAT DETERMINADA. En trobará más detalles en a Licencia Publica General GNU. + +Con iste programa ha d'haber recibiu [{{SERVER}}{{SCRIPTPATH}}/COPYING una copia d'a Licencia Publica Cheneral GNU]; si no ye asinas, endrece-se a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA u bien [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html la leiga en linia].", 'version-software' => 'Software instalato', 'version-software-product' => 'Producto', 'version-software-version' => 'Versión', @@ -3132,6 +3197,15 @@ Escriba o nombre d\'o fichero sin o prefixo "{{ns:file}}:".', 'tags-edit' => 'editar', 'tags-hitcount' => '$1 {{PLURAL:$1|cambeo|cambeos}}', +# Special:ComparePages +'comparepages' => 'Contimparar pachinas', +'compare-selector' => "Contimparar as versions d'as pachinas", +'compare-page1' => 'Pachina 1', +'compare-page2' => 'Pachina 2', +'compare-rev1' => 'Versión 1', +'compare-rev2' => 'Versión 2', +'compare-submit' => 'Contimparar', + # Database error messages 'dberr-header' => 'Iste wiki tiene un problema', 'dberr-problems' => 'Lo sentimos. Iste sitio ye experimentando dificultatz tecnicas.', @@ -3148,8 +3222,13 @@ Escriba o nombre d\'o fichero sin o prefixo "{{ns:file}}:".', 'htmlform-float-invalid' => 'A valura que ha especificato no ye un entero.', 'htmlform-int-toolow' => "A valura que ha especificato ye por debaixo d'o menimo de $1", 'htmlform-int-toohigh' => "A valura que ha especificato ye alto d'o maximo de $1", +'htmlform-required' => 'Ista valura ye necesaria', 'htmlform-submit' => 'Ninviar', 'htmlform-reset' => 'Desfer cambios', 'htmlform-selectorother-other' => 'Atros', +# SQLite database support +'sqlite-has-fts' => '$1, con soporte de busca de texto integro', +'sqlite-no-fts' => '$1, sin soporte de busca de texto integro', + ); diff --git a/languages/messages/MessagesAng.php b/languages/messages/MessagesAng.php index 2c071d9a..d8146c48 100644 --- a/languages/messages/MessagesAng.php +++ b/languages/messages/MessagesAng.php @@ -43,8 +43,7 @@ $messages = array( 'tog-editsection' => 'Dǣla ādihtende þafian bȳ [ādihtan] hlenċum', 'tog-editsectiononrightclick' => 'Þafa dǣla ādihtune þurh sƿenȝas þǣre sƿīðran healfe on dǣla titulum (þis þearf JavaScript)', 'tog-showtoc' => 'Innoðes tæfle sēon (for sīdum þe mā þonne 3 hēafodingas habbaþ)', -'tog-rememberpassword' => 'Mīne inmeldunge ȝemyndan on þissum spearcatelle', -'tog-editwidth' => 'Þone ādihtbox sprædan to fyllenne þæt fulānsīenēagþȳrl', +'tog-rememberpassword' => 'Mīne inmeldunge ȝemyndan on þissum spearcatelle (oþ $1 {{PLURAL:$1|dæȝ|dagas}})', 'tog-watchcreations' => 'Sīdan þe iċ scieppe ēacian tō mīnre ƿæccȝetale', 'tog-watchdefault' => 'Sīdan þe iċ ādihte ēacian tō mīnre ƿæccȝetale', 'tog-watchmoves' => 'Sīdan þe iċ hƿeorfe ēacian tō mīnre ƿæccȝetale', @@ -190,31 +189,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Mearcunge ēacian', -'vector-action-delete' => 'Forlēos', -'vector-action-move' => 'Ƿeȝ', -'vector-action-protect' => 'Beorȝa', -'vector-action-undelete' => 'Sciepe tramet eft', -'vector-action-unprotect' => 'Unbeorȝa', -'vector-namespace-category' => 'Flocc', -'vector-namespace-help' => 'Helpsīde', -'vector-namespace-image' => 'Ȝeƿithord', -'vector-namespace-main' => 'Sīde', -'vector-namespace-media' => 'Missenmiddelsīde', -'vector-namespace-mediawiki' => 'Ǣrend', -'vector-namespace-project' => 'Ƿeorcsīde', -'vector-namespace-special' => 'Syndriȝ sīde', -'vector-namespace-talk' => 'Talu', -'vector-namespace-template' => 'Bysen', -'vector-namespace-user' => 'Brūcendsīde', -'vector-view-create' => 'Sciepe', -'vector-view-edit' => 'Ādihte', -'vector-view-history' => 'Stǣr', -'vector-view-view' => 'Rǣd', -'vector-view-viewsource' => 'Sēo fruman', -'actions' => 'Fremmunga', -'namespaces' => 'Namstedas', -'variants' => 'Missenlicnessa', +'vector-action-addsection' => 'Mearcunge ēacian', +'vector-action-delete' => 'Forlēos', +'vector-action-move' => 'Ƿeȝ', +'vector-action-protect' => 'Beorȝa', +'vector-action-undelete' => 'Sciepe tramet eft', +'vector-action-unprotect' => 'Unbeorȝa', +'vector-simplesearch-preference' => 'Lǣt forðoda sēcunge tōtyhtinga (synderlīce for Vector scinne)', +'vector-view-create' => 'Sciepe', +'vector-view-edit' => 'Ādihte', +'vector-view-history' => 'Stǣr', +'vector-view-view' => 'Rǣd', +'vector-view-viewsource' => 'Sēo fruman', +'actions' => 'Fremmunga', +'namespaces' => 'Namstedas', +'variants' => 'Missenlicnessa', 'errorpagetitle' => 'Ƿōh', 'returnto' => 'Ȝā eft tō $1', @@ -388,7 +377,7 @@ Cnāw þæt sume sīdan cunnon gelǣstende ēowod wesan swā þū wǣre gīet in 'yourname' => 'Þīn brūcendnama', 'yourpassword' => 'Þafungƿord:', 'yourpasswordagain' => 'Þafungƿord edƿrītan:', -'remembermypassword' => 'Mīne inmeldunge ȝemyndan on þissum spearcatelle', +'remembermypassword' => 'Mīne inmeldunge ȝemyndan on þissum spearcatelle (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Þīn ȝeƿeald:', 'login' => 'Inmeldian', 'nav-login-createaccount' => 'Nīƿne hordcleofan scieppan oþþe inmeldian', @@ -401,6 +390,7 @@ Cnāw þæt sume sīdan cunnon gelǣstende ēowod wesan swā þū wǣre gīet in 'createaccount' => 'Hordcleofan scieppan', 'gotaccountlink' => 'Inmeldian', 'createaccountmail' => 'Þurh spearcenaǣrend', +'createaccountreason' => 'Racu:', 'badretype' => 'Þā þafungƿord þe ƿrite þū, bēoþ unȝemæcca.', 'userexists' => 'Hƿā hæfþ þæt brūcendnama. Bidde ōðer brūcendnama ċēosan.', @@ -498,9 +488,6 @@ Gif þu hider misfōn cōme, cnoca þā þīnne webbscēaweres '''on bæc''' cn Þū behǣtst ēac þæt þū selfa þis ƿrite, oþþe efenlǣhtest of sumre folcliċum āgnunge oþþe ȝelīċum frēom horde (sēo $1 for āscungum). '''Ne forþsend efenlǣhtscielded ƿeorc būtan þafunge!'''", -'longpagewarning' => 'WARNUNG: Þes tramet is $1 kilobyta lang; sume -webbscēaweras hæbben earfoðu mid þȳ þe hīe ādihtaþ trametas nēa oþþe lengran þonne 32kb. -Bidde behycge þæt þu bricst þone tramet intō smalrum dǣlum.', 'templatesused' => '{{PLURAL:$1|Bysen|Bysena}} brocen on þisre sīdan:', 'templatesusedpreview' => '{{PLURAL:$1|Bysen|Bysena}} brocen on þisre forescēaƿe:', 'template-protected' => '(borgen)', @@ -680,12 +667,8 @@ Bidde behycge þæt þu bricst þone tramet intō smalrum dǣlum.', 'recentchanges' => 'Nīƿe hƿearfas', 'recentchanges-legend' => 'Nīƿa hƿearfa forebearƿan', 'recentchanges-feed-description' => 'Þā mǣst nīƿoste hƿearfan huntan to þisse ƿiki in þissum strēame', -'recentchanges-label-legend' => 'Cǣȝ: $1.', -'recentchanges-legend-newpage' => '$1 - nīƿu sīde', 'recentchanges-label-newpage' => 'Þes ādiht macode nīƿa sīdan', -'recentchanges-legend-minor' => '$1 - lȳtl ādiht', 'recentchanges-label-minor' => 'Þes is lȳtl ādiht', -'recentchanges-legend-bot' => '$1 - searuþræles ādiht', 'recentchanges-label-bot' => 'Searuþræl fremmode þisne ādiht', 'rcnote' => "Under {{PLURAL:$1|... '''1''' ...|sind þā æftemestan '''$1''' hweorfunga}} in {{PLURAL:$2|...|þǣm æftemestum '''$2''' dagum}}, . . $5, $4.", 'rcnotefrom' => 'Under sind þā hweorfunga siþþan $2 (oþ $1 geīewed).', @@ -902,7 +885,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'Mīnu ƿæcceȝetalu', 'mywatchlist' => 'Mīnu ƿæcceȝetalu', -'watchlistfor' => "(for '''$1''')", 'addedwatch' => 'To ƿæcceȝetale ēacod', 'removedwatch' => 'Fornōm fram ƿæccȝetale', 'removedwatchtext' => 'Sēo sīde "[[:$1]]" ƿæs fram [[Special:Watchlist|þīnre ƿæccȝetale]] fornōm.', @@ -1178,9 +1160,9 @@ Bidde cēos ōðerne naman.', # Media information 'imagemaxsize' => 'Settan biliðu on biliþgemearcungtrametum tō:', 'thumbsize' => 'Þumannæglmicelnes:', -'file-info-size' => '($1 × $2 pixels, fīlmiċelu: $3, MIMEcynn: $4)', +'file-info-size' => '$1 × $2 pixels, fīlmiċelu: $3, MIMEcynn: $4', 'file-nohires' => 'Þǣr nis nǣniȝ mā miċelu.', -'svg-long-desc' => '(SVG fīl, rihte $1 × $2 pixels, fīlmiċelu: $3)', +'svg-long-desc' => 'SVG fīl, rihte $1 × $2 pixels, fīlmiċelu: $3', 'show-big-image' => 'Fulmiċelu', 'show-big-image-thumb' => 'Þēos forescēaƿe miċelu: $1 × $2 pixels', diff --git a/languages/messages/MessagesAr.php b/languages/messages/MessagesAr.php index c5d4de91..583696bb 100644 --- a/languages/messages/MessagesAr.php +++ b/languages/messages/MessagesAr.php @@ -21,6 +21,7 @@ * @author Gharbeia * @author Hakeem * @author Histolo2 + * @author Houcinee1 * @author Jak * @author Khaledhosny * @author Lord Anubis @@ -35,13 +36,17 @@ * @author OsamaK * @author Ouda * @author Oxydo + * @author Rami.Awad * @author Riadismet + * @author Samer * @author Sami Lab * @author Tarawneh * @author TheEgyptian * @author Uwe a + * @author Zanatos * @author ترجمان05 * @author عصام بايزيدي + * @author عمرو * @author نصوح */ @@ -113,7 +118,7 @@ $dateFormats = array( 'ymd time' => 'H:i', 'ymd date' => 'Y xg j', 'ymd both' => 'H:i، Y xg j', # Arabic comma - + 'hijri time' => 'H:i', 'hijri date' => 'xmj xmF xmY', 'hijri both' => 'H:i، xmj xmF xmY', @@ -220,6 +225,7 @@ $magicWords = array( 'subjectpagenamee' => array( '1', 'عنوان_صفحة_الموضوع', 'عنوان_صفحة_المقالة', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ), 'msg' => array( '0', 'رسالة:', 'MSG:' ), 'subst' => array( '0', 'نسخ:', 'SUBST:' ), + 'safesubst' => array( '0', 'نسخ_آمن:', 'SAFESUBST:' ), 'msgnw' => array( '0', 'رسالة_بدون_تهيئة:', 'MSGNW:' ), 'img_thumbnail' => array( '1', 'تصغير', 'thumbnail', 'thumb' ), 'img_manualthumb' => array( '1', 'تصغير=$1', 'مصغر=$1', 'thumbnail=$1', 'thumb=$1' ), @@ -230,8 +236,8 @@ $magicWords = array( 'img_center' => array( '1', 'مركز', 'center', 'centre' ), 'img_framed' => array( '1', 'إطار', 'بإطار', 'framed', 'enframed', 'frame' ), 'img_frameless' => array( '1', 'لاإطار', 'frameless' ), - 'img_page' => array( '1', 'صفحة=$1', 'صفحة $1', 'page=$1', 'page $1' ), - 'img_upright' => array( '1', 'معدول', 'معدول=$1', 'معدول $1', 'upright', 'upright=$1', 'upright $1' ), + 'img_page' => array( '1', 'صفحة=$1', 'صفحة_$1', 'page=$1', 'page $1' ), + 'img_upright' => array( '1', 'معدول', 'معدول=$1', 'معدول_$1', 'upright', 'upright=$1', 'upright $1' ), 'img_border' => array( '1', 'حدود', 'border' ), 'img_baseline' => array( '1', 'خط_أساسي', 'baseline' ), 'img_sub' => array( '1', 'فرعي', 'sub' ), @@ -249,6 +255,7 @@ $magicWords = array( 'nse' => array( '0', 'نطم:', 'NSE:' ), 'localurl' => array( '0', 'مسار_محلي:', 'LOCALURL:' ), 'localurle' => array( '0', 'عنوان_المسار_المحلي:', 'LOCALURLE:' ), + 'articlepath' => array( '0', 'مسار_المقالة', 'ARTICLEPATH' ), 'server' => array( '0', 'خادم', 'SERVER' ), 'servername' => array( '0', 'اسم_الخادم', 'SERVERNAME' ), 'scriptpath' => array( '0', 'مسار_السكريبت', 'مسار_سكريبت', 'SCRIPTPATH' ), @@ -265,6 +272,7 @@ $magicWords = array( 'revisionday' => array( '1', 'يوم_المراجعة', 'REVISIONDAY' ), 'revisionday2' => array( '1', 'يوم_المراجعة2', 'REVISIONDAY2' ), 'revisionmonth' => array( '1', 'شهر_المراجعة', 'REVISIONMONTH' ), + 'revisionmonth1' => array( '1', 'شهر_المراجعة1', 'REVISIONMONTH1' ), 'revisionyear' => array( '1', 'عام_المراجعة', 'REVISIONYEAR' ), 'revisiontimestamp' => array( '1', 'طابع_وقت_المراجعة', 'REVISIONTIMESTAMP' ), 'revisionuser' => array( '1', 'مستخدم_المراجعة', 'REVISIONUSER' ), @@ -306,6 +314,9 @@ $magicWords = array( 'staticredirect' => array( '1', '__تحويلة_إستاتيكية__', '__تحويلة_ساكنة__', '__STATICREDIRECT__' ), 'protectionlevel' => array( '1', 'مستوى_الحماية', 'PROTECTIONLEVEL' ), 'formatdate' => array( '0', 'تهيئة_التاريخ', 'تهيئة_تاريخ', 'formatdate', 'dateformat' ), + 'url_path' => array( '0', 'مسار', 'PATH' ), + 'url_wiki' => array( '0', 'ويكي', 'WIKI' ), + 'url_query' => array( '0', 'استعلام', 'QUERY' ), ); $specialPageAliases = array( @@ -319,6 +330,7 @@ $specialPageAliases = array( 'Watchlist' => array( 'قائمة_المراقبة' ), 'Recentchanges' => array( 'أحدث_التغييرات' ), 'Upload' => array( 'رفع' ), + 'UploadStash' => array( 'رفع_مخفي' ), 'Listfiles' => array( 'عرض_الملفات', 'قائمة_الملفات', 'قائمة_الصور' ), 'Newimages' => array( 'ملفات_جديدة', 'صور_جديدة' ), 'Listusers' => array( 'عرض_المستخدمين', 'قائمة_المستخدمين' ), @@ -353,6 +365,7 @@ $specialPageAliases = array( 'Allpages' => array( 'كل_الصفحات' ), 'Prefixindex' => array( 'فهرس_بادئة' ), 'Ipblocklist' => array( 'قائمة_المنع', 'عرض_المنع', 'قائمة_منع_أيبي' ), + 'Unblock' => array( 'رفع_منع' ), 'Specialpages' => array( 'صفحات_خاصة' ), 'Contributions' => array( 'مساهمات' ), 'Emailuser' => array( 'مراسلة_المستخدم' ), @@ -377,12 +390,14 @@ $specialPageAliases = array( 'FileDuplicateSearch' => array( 'بحث_ملف_مكرر' ), 'Unwatchedpages' => array( 'صفحات_غير_مراقبة' ), 'Listredirects' => array( 'عرض_التحويلات' ), - 'Revisiondelete' => array( 'حذف_نسخة' ), + 'Revisiondelete' => array( 'حذف_مراجعة' ), 'Unusedtemplates' => array( 'قوالب_غير_مستخدمة' ), 'Randomredirect' => array( 'تحويلة_عشوائية' ), 'Mypage' => array( 'صفحتي' ), 'Mytalk' => array( 'نقاشي' ), 'Mycontributions' => array( 'مساهماتي' ), + 'Myuploads' => array( 'رفوعاتي' ), + 'PermanentLink' => array( 'وصلة_دائمة', 'رابط_دائم' ), 'Listadmins' => array( 'عرض_الإداريين' ), 'Listbots' => array( 'عرض_البوتات' ), 'Popularpages' => array( 'صفحات_مشهورة' ), @@ -397,6 +412,9 @@ $specialPageAliases = array( 'DeletedContributions' => array( 'مساهمات_محذوفة' ), 'Tags' => array( 'وسوم' ), 'Activeusers' => array( 'مستخدمون_نشطون' ), + 'ComparePages' => array( 'مقارنة_الصفحات' ), + 'Badtitle' => array( 'عوان_سئ' ), + 'DisableAccount' => array( 'تعطيل_الحساب' ), ); /** @@ -430,8 +448,7 @@ $messages = array( 'tog-editsection' => 'مكن تعديل الأقسام عن طريق وصلات [عدل]', 'tog-editsectiononrightclick' => 'فعل تعديل الأقسام بواسطة كبسة الفأرة اليمين على عناوين الأقسام (جافاسكريبت)', 'tog-showtoc' => 'اعرض فهرس المحتويات (للصفحات التي تحتوي على أكثر من 3 عناوين)', -'tog-rememberpassword' => 'تذكر دخولي على هذا الحاسوب', -'tog-editwidth' => 'زد عرض صندوق التحرير لملء الشاشة كلها', +'tog-rememberpassword' => 'تذكر دخولي على هذا المتصفح (إلى {{PLURAL:$1||يوم واحد|يومين|$1 أيام|$1 يومًا|$1 يوم}} كحد أقصى)', 'tog-watchcreations' => 'أضف الصفحات التي أنشئها إلى قائمة مراقبتي', 'tog-watchdefault' => 'أضف الصفحات التي أعدلها إلى قائمة مراقبتي', 'tog-watchmoves' => 'أضف الصفحات التي أنقلها إلى قائمة مراقبتي', @@ -578,31 +595,21 @@ $messages = array( 'faqpage' => 'Project:أسئلة متكررة', # Vector skin -'vector-action-addsection' => 'أضف موضوعا', -'vector-action-delete' => 'احذف', -'vector-action-move' => 'انقل', -'vector-action-protect' => 'احم', -'vector-action-undelete' => 'استرجع الحذف', -'vector-action-unprotect' => 'أزل الحماية', -'vector-namespace-category' => 'تصنيف', -'vector-namespace-help' => 'صفحة مساعدة', -'vector-namespace-image' => 'ملف', -'vector-namespace-main' => 'صفحة', -'vector-namespace-media' => 'صفحة وسيط', -'vector-namespace-mediawiki' => 'رسالة', -'vector-namespace-project' => 'صفحة مشروع', -'vector-namespace-special' => 'صفحة خاصة', -'vector-namespace-talk' => 'نقاش', -'vector-namespace-template' => 'قالب', -'vector-namespace-user' => 'صفحة مستخدم', -'vector-view-create' => 'أنشئ', -'vector-view-edit' => 'عدل', -'vector-view-history' => 'اعرض التاريخ', -'vector-view-view' => 'اقرأ', -'vector-view-viewsource' => 'اعرض المصدر', -'actions' => 'أفعال', -'namespaces' => 'النطاقات', -'variants' => 'المتغيرات', +'vector-action-addsection' => 'أضف موضوعا', +'vector-action-delete' => 'احذف', +'vector-action-move' => 'انقل', +'vector-action-protect' => 'احم', +'vector-action-undelete' => 'استرجع الحذف', +'vector-action-unprotect' => 'أزل الحماية', +'vector-simplesearch-preference' => 'مكّن مقترحات البحث المُحسّنة (لواجهة فكتور فقط)', +'vector-view-create' => 'أنشئ', +'vector-view-edit' => 'عدل', +'vector-view-history' => 'اعرض التاريخ', +'vector-view-view' => 'اقرأ', +'vector-view-viewsource' => 'اعرض المصدر', +'actions' => 'أفعال', +'namespaces' => 'النطاقات', +'variants' => 'المتغيرات', 'errorpagetitle' => 'خطأ', 'returnto' => 'ارجع إلى $1.', @@ -663,6 +670,9 @@ $messages = array( من فضلك انتظر قليلا قبل أن تحاول الوصول إلى هذه الصفحة مجددا. $1', +'pool-timeout' => 'انتهاء الانتظار للقفل', +'pool-queuefull' => 'طابور الاقتراع ملئ', +'pool-errorunknown' => 'خطأ غير معروف', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'عن {{SITENAME}}', @@ -832,7 +842,8 @@ $2', 'yourname' => 'اسم المستخدم:', 'yourpassword' => 'كلمة السر:', 'yourpasswordagain' => 'أعد كتابة كلمة السر:', -'remembermypassword' => 'تذكر دخولي على هذا الحاسوب', +'remembermypassword' => 'تذكر دخولي على هذا الحاسوب (إلى {{PLURAL:$1||يوم واحد|يومين|$1 أيام|$1 يومًا|$1 يوم}} كحد أقصى)', +'securelogin-stick-https' => 'ابقَ في اتصال HTTPS بعد الدخول.', 'yourdomainname' => 'نطاقك:', 'externaldberror' => 'هناك إما خطأ في دخول قاعدة البيانات الخارجية أو أنه غير مسموح لك بتحديث حسابك الخارجي.', 'login' => 'ادخل', @@ -849,6 +860,7 @@ $2', 'gotaccount' => "تمتلك حسابا بالفعل؟ '''$1'''.", 'gotaccountlink' => 'لُج', 'createaccountmail' => 'بواسطة البريد الإلكتروني', +'createaccountreason' => 'السبب:', 'badretype' => 'كلمات السر التي أدخلتها لا تتطابق.', 'userexists' => 'اسم المستخدم الذي تم إدخاله مستعمل بالفعل. اختر اسما مختلفا.', @@ -877,6 +889,7 @@ $2', من فضلك حاول مرة أخرى.', 'passwordtooshort' => 'يجب أن تتكون كلمة السر على الأقل من {{PLURAL:$1|حرف واحد|حرفين|$1 حروف|$1 حرفا|$1 حرف}}.', 'password-name-match' => 'يجب أن تكون كلمة المرور مختلفة عن اسم المستخدم.', +'password-login-forbidden' => 'تم منع استخدام اسم المستخدم هذا وكلمة السر.', 'mailmypassword' => 'أرسل لي كلمة سر جديدة', 'passwordremindertitle' => 'كلمة سر مؤقتة جديدة ل{{SITENAME}}', 'passwordremindertext' => 'لقد طلب شخص ما (غالبا أنت، من عنوان الآيبي $1) كلمة سر جديدة ل{{SITENAME}} ($4). @@ -917,6 +930,9 @@ $2', 'loginlanguagelabel' => 'اللغة: $1', 'suspicious-userlogout' => 'رفض طلب خروجك لأنه يبدو كأنه أرسل عن طريق متصفح معطوب أو وسيط تخزين.', +# E-mail sending +'php-mail-error-unknown' => "خطأ غير معروف في وظيفة البريد PHP's mail()", + # Password reset dialog 'resetpass' => 'تغيير كلمة السر', 'resetpass_announce' => 'تم تسجيل دخولك بكلمة سر مؤقتة. @@ -968,11 +984,12 @@ $2', 'showdiff' => 'أظهر التغييرات', 'anoneditwarning' => "'''تحذير:''' لم تقم بالدخول. سيسجل عنوان الآيبي خاصتك في تاريخ هذه الصفحة.", +'anonpreviewwarning' => "''أنت غير مسجل الدخول. الحفظ سيسجل عنوان الأيبي الخاص بك في تاريخ هذه الصفحة.''", 'missingsummary' => "'''تنبيه:''' لم تقم بكتابة ملخص للتعديل. إذا قمت بضغط حفظ الصفحة مرة أخرى، فيتم حفظ تعديلك بدون ملخص.", 'missingcommenttext' => 'من فضلك أدخل تعليقا في الأسفل.', 'missingcommentheader' => "'''تنبيه:''' لم تقم بوضع موضوع/عنوان لهذا التعليق. -إذا قمت بالضغط على حفظ الصفحة مجددا، سيتم حفظ تعليقك بدون عنوان.", +إذا قمت بالضغط على \"{{int:savearticle}}\" مجددا، سيتم حفظ تعليقك بدون عنوان.", 'summary-preview' => 'معاينة الملخص:', 'subject-preview' => 'معاينة للموضوع/العنوان:', 'blockedtitle' => 'المستخدم ممنوع', @@ -1046,8 +1063,12 @@ $2', لم يتم حفظها بعد!'''", 'userjspreview' => "'''تذكر أنك فقط تجرب/تعاين جافاسكربت.''' '''لم يتم الحفظ بعد!'''", +'sitecsspreview' => "''' تذكر أنك فقط في وضع المعاينة لهذا CSS ''' +''' ولم يتم حفظ الصفحة بعد! '''", +'sitejspreview' => "''' تذكر أنك فقط في وضع المعاينة لكود JavaScript هذا''' +''' ولم يتم حفظه بعد! '''", 'userinvalidcssjstitle' => "'''تحذير:''' لا توجد واجهة \"\$1\". -تذكر أن ملفات ال.css و ال.js تستخدم حروف صغيرة في العنوان ، كمثال {{ns:user}}:Foo/monobook.css و ليس {{ns:user}}:Foo/Monobook.css.", +تذكر أن ملفات ال.css و ال.js تستخدم حروف صغيرة في العنوان ، كمثال {{ns:user}}:Foo/vector.css و ليس {{ns:user}}:Foo/Vector.css.", 'updated' => '(محدثة)', 'note' => "'''ملاحظة:'''", 'previewnote' => "'''تذكر أن هذه مجرد معاينة للصفحة؛'''' @@ -1089,9 +1110,6 @@ $2', إذا لم تكن ترغب أن تعدل مشاركاتك بهذا الشكل، لا تضعها هنا.
    أنت تقر أيضا أنك كتبت هذا بنفسك، أو نسخته من مصدر يخضع للملكية العامة، أو مصدر حر آخر (انظر $1 للتفاصيل). '''لا تضف أي عمل ذي حقوق محفوظة بدون تصريح!'''", -'longpagewarning' => "'''تحذير:''' حجم الصفحة $1 كيلوبايت؛ -قد تواجه بعض المتصفحات مشاكل عند تحرير صفحات يزيد حجمها عن 32 كيلوبايت. -يرجى تقسيم الصفحة إلى أقسام أصغر.", 'longpageerror' => "'''خطأ: النص الذي أدخلته حجمه $1 كيلوبايت، وهذا أكبر من الحد الأقصى وهو $2 كيلوبايت. لا يمكن حفظه.'''", 'readonlywarning' => "'''تحذير: لقد أغلقت قاعدة البيانات للصيانة، لذلك لن تتمكن من حفظ التعديلات التي قمت بها حاليا. @@ -1272,6 +1290,8 @@ $1", 'logdelete-failure' => "'''تعذر ضبط رؤية السجل:''' $1", 'revdel-restore' => 'تغيير الرؤية', +'revdel-restore-deleted' => 'مراجعات محذوفة', +'revdel-restore-visible' => 'مراجعات مرئية', 'pagehist' => 'تاريخ الصفحة', 'deletedhist' => 'التاريخ المحذوف', 'revdelete-content' => 'محتوى', @@ -1342,11 +1362,13 @@ $1", # Diffs 'history-title' => 'تاريخ مراجعة "$1"', 'difference' => '(الفرق بين المراجعتين)', +'difference-multipage' => '(الفرق بين الصفحتين)', 'lineno' => 'سطر $1:', 'compareselectedversions' => 'قارن بين النسختين المختارتين', 'showhideselectedversions' => 'أظهر/أخف المراجعات المختارة', 'editundo' => 'تراجع', -'diff-multi' => '({{PLURAL:$1|مراجعة واحدة متوسطة|$1 مراجعة متوسطة}} غير معروضة.)', +'diff-multi' => '({{PLURAL:$1||مراجعة واحدة متوسطة غير معروضة|مراجعتان متوسطتان غير معروضتان|$1 مراجعات متوسطة غير معروضة|$1 مراجعة متوسطة غير معروضة}} أجراها {{PLURAL:$2||مستخدم واحد|مستخدمان|$2 مستخدمين|$2 مستخدمًا|$2 مستخدم}}.)', +'diff-multi-manyusers' => '({{PLURAL:$1||مراجعة واحدة متوسطة غير معروضة أجراها|مراجعتان متوسطتان غير معروضتان أجراهما|$1 مراجعات متوسطة غير معروضة أجراها|$1 مراجعة متوسطة غير معروضة أجراها}} أكثر من {{PLURAL:$2||مستخدم واحد|مستخدمين|$2 مستخدمين|$2 مستخدمًا|$2 مستخدم}}.)', # Search results 'searchresults' => 'نتائج البحث', @@ -1381,6 +1403,7 @@ $1", 'searchprofile-everything-tooltip' => 'ابحث في كل المحتوى (شاملا صفحات النقاش)', 'searchprofile-advanced-tooltip' => 'ابحث في النطاقات المخصصة', 'search-result-size' => '$1 ({{PLURAL:$2|لا كلمات|كلمة واحدة|كلمتان|$2 كلمات|$2 كلمة}})', +'search-result-category-size' => '{{PLURAL:$1|لا أعضاء|عضو واحد|عضوان|$1 أعضاء|$1 عضوًا|$1 عضو}} ({{PLURAL:$2|لا تصانيف فرعية|تصنيف فرعي واحد|تصنيفان فرعيان|$2 تصنيفات فرعية|$2 تصنيفًا فرعيًا|$2 تصنيف فرعي}} و{{PLURAL:$3|لا ملفات|ملف واحد|ملفان|$3 ملفات|$3 ملفًا|$3 ملف}})', 'search-result-score' => 'الارتباط: $1%', 'search-redirect' => '(تحويلة $1)', 'search-section' => '(قسم $1)', @@ -1458,6 +1481,7 @@ $1", 'contextlines' => 'عدد الأسطر في كل نتيجة:', 'contextchars' => 'عدد الأحرف في كل سطر', 'stub-threshold' => 'الحد لتنسيق وصلة البذرة:', +'stub-threshold-disabled' => 'معطل', 'recentchangesdays' => 'عدد الأيام المعروضة في أحدث التغييرات:', 'recentchangesdays-max' => 'الحد الأقصى {{PLURAL:$1|أقل من يوم|يوم واحد|يومان|$1 أيام|$1 يوما|$1 يوم}}', 'recentchangescount' => 'عدد التعديلات الظاهرة مبدئيا:', @@ -1491,6 +1515,7 @@ $1", 'prefs-files' => 'ملفات', 'prefs-custom-css' => 'CSS مخصص', 'prefs-custom-js' => 'جافاسكربت مخصص', +'prefs-common-css-js' => 'CSS أو جافاسكربت مشتركة لجميع المظاهر:', 'prefs-reset-intro' => 'يمكنك استخدام هذه الصفحة لإعادة تفضيلاتك للحالة الافتراضية للموقع. لن تستطيع استرجاع الحالة السابقة.', 'prefs-emailconfirm-label' => 'تأكيد البريد الإلكتروني:', @@ -1529,9 +1554,15 @@ $1", 'prefs-advancedrendering' => 'خيارات متقدمة', 'prefs-advancedsearchoptions' => 'خيارات متقدمة', 'prefs-advancedwatchlist' => 'خيارات متقدمة', -'prefs-display' => 'خيارات العرض', +'prefs-displayrc' => 'خيارات العرض', +'prefs-displaysearchoptions' => 'خصائص العرض', +'prefs-displaywatchlist' => 'خصائص العرض', 'prefs-diffs' => 'فروقات', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'يبدو أن عنوان البريد الإلكتروني صالح', +'email-address-validity-invalid' => 'أدخل عنوان بريد إلكتروني صالح', + # User rights 'userrights' => 'إدارة صلاحيات المستخدم', 'userrights-lookup-user' => 'إدارة مجموعات المستخدم', @@ -1615,6 +1646,7 @@ $1", 'right-hideuser' => 'منع اسم مستخدم، مخفيا إياه عن العامة', 'right-ipblock-exempt' => 'تفادي عمليات منع الأيبي، المنع التلقائي ومنع النطاق', 'right-proxyunbannable' => 'تفادي عمليات المنع الأوتوماتيكية للبروكسيهات', +'right-unblockself' => 'رفع المنع عن أنفسهم', 'right-protect' => 'تغيير مستويات الحماية وتعديل الصفحات المحمية', 'right-editprotected' => 'تعديل الصفحات المحمية (بدون الحماية المضمنة)', 'right-editinterface' => 'تعديل واجهة المستخدم', @@ -1637,7 +1669,6 @@ $1", 'right-siteadmin' => 'غلق ورفع غلق قاعدة البيانات', 'right-reset-passwords' => 'إعادة ضبط كلمة السر للمستخدمين الآخرين', 'right-override-export-depth' => 'تصدير الصفحات متضمنة الصفحات الموصولة حتى عمق 5', -'right-versiondetail' => 'رؤية معلومات نسخة البرنامج الممتدة', 'right-sendemail' => 'إرسال رسائل بريد إلكتروني إلى مستخدمين آخرين', # User rights log @@ -1688,14 +1719,9 @@ $1", 'recentchanges-legend' => 'خيارات أحدث التغييرات', 'recentchangestext' => 'تابع آخر التغييرات في الويكي من هذه الصفحة.', 'recentchanges-feed-description' => 'تابع أحدث التغييرات للويكي عبر هذه التلقيمة.', -'recentchanges-label-legend' => 'المفتاح: $1.', -'recentchanges-legend-newpage' => '$1 - صفحة جديدة', 'recentchanges-label-newpage' => 'أنشأ هذا التعديل صفحة جديدة', -'recentchanges-legend-minor' => '$1 - تعديل طفيف', 'recentchanges-label-minor' => 'هذا تعديل طفيف', -'recentchanges-legend-bot' => '$1 - تعديل بوت', 'recentchanges-label-bot' => 'أجرى هذا التعديل بوت', -'recentchanges-legend-unpatrolled' => '$1 - تعديل غير مراجع', 'recentchanges-label-unpatrolled' => 'لم يراجع هذا التعديل إلى الآن', 'rcnote' => "بالأسفل {{PLURAL:$1|لا توجد تغييرات|التغيير الأخير|آخر تغييرين|آخر '''$1''' تغييرات|آخر '''$1''' تغييرا|آخر '''$1''' تغيير}} في {{PLURAL:$2||'''اليوم''' الماضي|'''اليومين''' الماضيين|ال'''$2''' أيام الماضية|ال'''$2''' يوما الماضيا|ال'''$2''' يوم الماضي}}، كما في $5، $4.", 'rcnotefrom' => "بالأسفل التغييرات منذ '''$2''' (إلى '''$1''' معروضة).", @@ -1743,6 +1769,9 @@ $1", 'upload_directory_missing' => 'مجلد الرفع ($1) مفقود ولم يمكن إنشاؤه بواسطة خادوم الوب.', 'upload_directory_read_only' => 'مجلد الرفع ($1) لا يمكن الكتابة عليه بواسطة خادوم الوب.', 'uploaderror' => 'خطأ في الرفع', +'upload-recreate-warning' => "'''تحذير: سبق حذف أو نقل ملف بهذا الاسم.''' + +سجلا الحذف والنقل لهذه الصفحة معروضان هنا للتيسير:", 'uploadtext' => "استخدم الاستمارة بالأسفل لرفع الملفات. لرؤية أو البحث في الملفات المرفوعة سابقا، راجع [[Special:FileList|قائمة الملفات المرفوعة]]، عمليات الرفع (وإعادة الرفع) مسجلة في [[Special:Log/upload|سجل الرفع]] وعمليات الحذف في [[Special:Log/delete|سجل الحذف]]. @@ -1778,6 +1807,17 @@ $1", 'filetype-banned-type' => "'''\".\$1\"''' ليس نوع ملف مسموح به. {{PLURAL:\$3|نوع الملف المسموح به هو|أنواع الملفات المسموح بها هي}} \$2.", 'filetype-missing' => 'الملف بدون امتداد (مثل ".jpg").', +'empty-file' => 'الملف الذي أرسلته كان فارغا.', +'file-too-large' => 'الملف الذي أرسلته كان كبيرا جدا.', +'filename-tooshort' => 'اسم الملف قصير جدا.', +'filetype-banned' => 'نوع الملف هذا ممنوع.', +'verification-error' => 'لم يجتز الملف تحقق صحة الملفات.', +'hookaborted' => 'التعديل الذي تحاول أن تقوم به أجهض من قبل تمديد هوك', +'illegal-filename' => 'لا يسمح باسم الملف هذا.', +'overwrite' => 'لا يسمح بالكتابة فوق ملف موجود.', +'unknown-error' => 'خطأ غير معروف حدث.', +'tmp-create-error' => 'تعذر إنشاء ملف مؤقت.', +'tmp-write-error' => 'خطأ أثناء كتابة الملف المؤقت.', 'large-file' => 'ينصح ألا تكون الملفات أكبر من $1؛ هذا الملف حجمه $2.', 'largefileserver' => 'حجم هذا الملف أكبر من المسموح به على هذا الخادوم.', 'emptyfile' => 'يبدو أن الملف الذي رفعته فارغ. @@ -1806,13 +1846,14 @@ $1", [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'هذا الملف مكرر {{PLURAL:$1|للملف|للملفات}} التالية:', 'file-deleted-duplicate' => 'ملف مطابق لهذه الملف ([[:$1]]) تم حذفه من قبل. ينبغي أن تتحقق من تاريخ الحذف لهذا الملف قبل المتابعة بإعادة رفعه.', -'successfulupload' => 'تم رفع الملف بنجاح', 'uploadwarning' => 'تحذير الرفع', 'uploadwarning-text' => 'من فضلك عدل وصف الملف أدناه وحاول مرة أخرى.', 'savefile' => 'احفظ الملف', 'uploadedimage' => 'رفع "[[$1]]"', 'overwroteimage' => 'رفع نسخة جديدة من "[[$1]]"', 'uploaddisabled' => 'تم تعطيل الرفع', +'copyuploaddisabled' => 'الرفع من مسار معطل.', +'uploadfromurl-queued' => 'رفعك قد أضيف إلى الطابور', 'uploaddisabledtext' => 'رفع الملفات معطل.', 'php-uploaddisabledtext' => 'رفع ملفات PHP معطل. من فضلك تحقق من إعدادات رفع الملفات.', 'uploadscripted' => 'هذا الملف يضم كود HTML أو كود آخر يمكن أن يفسره متصفح الوب بطريقة خاطئة.', @@ -1847,6 +1888,14 @@ JD # جينوبتيك MGP # بينتاكس PICT # متنوع #
    ', +'upload-success-subj' => 'تم رفع الملف بنجاح', +'upload-success-msg' => 'مرفوعك من [$2] قد نجح، وهو متوفر هنا: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'مشكلة رفع', +'upload-failure-msg' => 'توجد مشكلة في مرفوعك من [$2]: + +$1', +'upload-warning-subj' => 'تحذير رفع', +'upload-warning-msg' => 'ثمة مشكلة في مرفوعك من [$2]. يمكنك الرجوع إلى [[Special:Upload/stash/$1|نموذج الرفع]] لتصحيح المشكلة.', 'upload-proto-error' => 'بروتوكول غير صحيح', 'upload-proto-error-text' => 'الرفع عن بعد يتطلب مسارا يبدأ بـ http:// أو ftp://.', @@ -1913,6 +1962,7 @@ PICT # متنوع 'listfiles_search_for' => 'ابحث عن اسم الميديا:', 'imgfile' => 'ملف', 'listfiles' => 'قائمة الملفات', +'listfiles_thumb' => 'تصغير', 'listfiles_date' => 'تاريخ', 'listfiles_name' => 'اسم', 'listfiles_user' => 'مستخدم', @@ -1958,6 +2008,7 @@ PICT # متنوع 'shared-repo-from' => 'من $1', 'shared-repo' => 'مستودع مشترك', 'shared-repo-name-wikimediacommons' => 'ويكيميديا كومنز', +'filepage.css' => '/* CSS المعروض هنا سيضمن في صفحات وصف الملفات، أيضا على الويكيات الأجنبية */', # File reversion 'filerevert' => 'استرجع $1', @@ -2029,8 +2080,8 @@ PICT # متنوع 'statistics-edits' => 'تعديلات الصفحات منذ تنصيب {{SITENAME}}', 'statistics-edits-average' => 'متوسط التعديلات لكل صفحة', 'statistics-views-total' => 'إجمالي المشاهدات', +'statistics-views-total-desc' => 'مشاهدات الصفحات غير الموجودة والصفحات الخاصة غير مشمولة.', 'statistics-views-peredit' => 'المشاهدات لكل تعديل', -'statistics-jobqueue' => 'طول [http://www.mediawiki.org/wiki/Manual:Job_queue طابور الشغل]', 'statistics-users' => '[[Special:ListUsers|مستخدمون]] مسجلون', 'statistics-users-active' => 'مستخدمون نشطون', 'statistics-users-active-desc' => 'المستخدمون الذين قاموا بفعل في آخر {{PLURAL:$1|يوم|$1 يوم}}', @@ -2045,7 +2096,7 @@ PICT # متنوع 'doubleredirects' => 'تحويلات مزدوجة', 'doubleredirectstext' => 'هذه الصفحة تعرض الصفحات التي تحول إلى صفحات تحويل أخرى. كل سطر يحتوي على وصلات للتحويلة الأولى والثانية وهدف التحويلة الثانية، والذي عادة ما يشير إلى صفحة الهدف "الحقيقية"، التي من المفترض أن تحول إليها التحويلة الأولى. -المدخلات المشطوبة صححت.', +المدخلات المشطوبة صححت.', 'double-redirect-fixed-move' => '[[$1]] تم نقلها، هي الآن تحويلة إلى [[$2]]', 'double-redirect-fixer' => 'مصلح التحويل', @@ -2068,6 +2119,8 @@ PICT # متنوع 'nmembers' => '{{PLURAL:$1|لا أعضاء|عضو واحد|عضوان|$1 أعضاء|$1 عضوا|$1 عضو}}', 'nrevisions' => '{{PLURAL:$1|تعديل وحيد|تعديلان|$1 تعديلات|$1 تعديل|$1 تعديلا}}', 'nviews' => '{{PLURAL:$1|مشاهدة واحدة|مشاهدتان|$1 مشاهدات|$1 مشاهدة}}', +'nimagelinks' => 'مستخدم في {{PLURAL:$1||صفحة واحدة|صفحتين|$1 صفحات|$1 صفحة}}', +'ntransclusions' => 'مستخدم في {{PLURAL:$1||صفحة واحدة|صفحتين|$1 صفحات|$1 صفحة}}', 'specialpage-empty' => 'لا توجد نتائج لهذا التقرير.', 'lonelypages' => 'صفحات يتيمة', 'lonelypagestext' => 'الصفحات التالية غير موصولة من أو مضمنة في الصفحات الأخرى في {{SITENAME}}.', @@ -2226,34 +2279,40 @@ PICT # متنوع 'listgrouprights-removegroup-self-all' => 'يمكنه إزالة كل المجموعات من حسابه الخاص', # E-mail user -'mailnologin' => 'لا يوجد عنوان للإرسال', -'mailnologintext' => 'يجب أن تقوم [[Special:UserLogin|بتسجيل الدخول]] وإدخال بريد إلكتروني صالح في صفحة [[Special:Preferences|التفضيلات]] لتتمكن من إرسال الرسائل لمستخدمين آخرين.', -'emailuser' => 'إرسال رسالة لهذا المستخدم', -'emailpage' => 'إرسال رسالة للمستخدم', -'emailpagetext' => 'يمكنك استخدام الاستمارة بالأسفل لإرسال رسالة بريد إلكتروني إلى هذا المستخدم. +'mailnologin' => 'لا يوجد عنوان للإرسال', +'mailnologintext' => 'يجب أن تقوم [[Special:UserLogin|بتسجيل الدخول]] وإدخال بريد إلكتروني صالح في صفحة [[Special:Preferences|التفضيلات]] لتتمكن من إرسال الرسائل لمستخدمين آخرين.', +'emailuser' => 'إرسال رسالة لهذا المستخدم', +'emailpage' => 'إرسال رسالة للمستخدم', +'emailpagetext' => 'يمكنك استخدام الاستمارة بالأسفل لإرسال رسالة بريد إلكتروني إلى هذا المستخدم. عنوان البريد الإلكتروني الذي قمت أنت بإدخاله في [[Special:Preferences|تفضيلاتك]]، سيظهر كعنوان المرسل في البريد الإلكتروني، حتى يصبح المتلقي قادرا على الرد عليك مباشرة.', -'usermailererror' => 'جسم البريد أرجع خطأ:', -'defemailsubject' => 'رسالة من {{SITENAME}}', -'noemailtitle' => 'لا يوجد عنوان بريد إلكتروني', -'noemailtext' => 'لم يحدد هذا المستخدم عنوان بريد إلكتروني صحيح.', -'nowikiemailtitle' => 'لا بريد إلكتروني مسموح به', -'nowikiemailtext' => 'هذا المستخدم اختار ألا يستقبل البريد الإلكتروني من المستخدمين الآخرين.', -'email-legend' => 'إرسال بريد إلكتروني إلى مستخدم {{SITENAME}} آخر', -'emailfrom' => 'من:', -'emailto' => 'إلى:', -'emailsubject' => 'الموضوع:', -'emailmessage' => 'الرسالة:', -'emailsend' => 'أرسل', -'emailccme' => 'أرسل لي بنسخة من رسالتي.', -'emailccsubject' => 'نسخة من رسالتك إلى $1: $2', -'emailsent' => 'تم إرسال البريد الإلكتروني', -'emailsenttext' => 'تم إرسال رسالتك الإلكترونية.', -'emailuserfooter' => 'هذا البريد الإلكتروني تم إرساله بواسطة $1 إلى $2 بواسطة وظيفة "مراسلة المستخدم" في {{SITENAME}}.', +'usermailererror' => 'جسم البريد أرجع خطأ:', +'defemailsubject' => 'رسالة من {{SITENAME}}', +'usermaildisabled' => 'بريد المستخدم الإلكتروني معطل', +'usermaildisabledtext' => 'لا يمكنك إرسال بريد إلكتروني إلى مستخدمين آخرين على هذه الويكي', +'noemailtitle' => 'لا يوجد عنوان بريد إلكتروني', +'noemailtext' => 'لم يحدد هذا المستخدم عنوان بريد إلكتروني صحيح.', +'nowikiemailtitle' => 'لا بريد إلكتروني مسموح به', +'nowikiemailtext' => 'هذا المستخدم اختار ألا يستقبل البريد الإلكتروني من المستخدمين الآخرين.', +'email-legend' => 'إرسال بريد إلكتروني إلى مستخدم {{SITENAME}} آخر', +'emailfrom' => 'من:', +'emailto' => 'إلى:', +'emailsubject' => 'الموضوع:', +'emailmessage' => 'الرسالة:', +'emailsend' => 'أرسل', +'emailccme' => 'أرسل لي بنسخة من رسالتي.', +'emailccsubject' => 'نسخة من رسالتك إلى $1: $2', +'emailsent' => 'تم إرسال البريد الإلكتروني', +'emailsenttext' => 'تم إرسال رسالتك الإلكترونية.', +'emailuserfooter' => 'هذا البريد الإلكتروني تم إرساله بواسطة $1 إلى $2 بواسطة وظيفة "مراسلة المستخدم" في {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'ترك رسالة نظام.', +'usermessage-editor' => 'مراسل النظام', # Watchlist 'watchlist' => 'قائمة مراقبتي', 'mywatchlist' => 'قائمة مراقبتي', -'watchlistfor' => "(ل'''$1''')", +'watchlistfor2' => 'ل$1 $2', 'nowatchlist' => 'لا توجد مدخلات في قائمة مراقبتك.', 'watchlistanontext' => 'الرجاء $1 لعرض أو تعديل الصفحات في قائمة مراقبتك.', 'watchnologin' => 'غير مسجل', @@ -2295,32 +2354,32 @@ PICT # متنوع 'enotif_lastvisited' => 'انظر $1 لكل التغييرات منذ زيارتك الأخيرة.', 'enotif_lastdiff' => 'انظر $1 لرؤية هذا التغيير.', 'enotif_anon_editor' => 'مستخدم مجهول $1', -'enotif_body' => 'عزيزي $WATCHINGUSERNAME، - -$CHANGEDORCREATED صفحة $PAGETITLE في {{SITENAME}} من قبل $PAGEEDITOR، لرؤية النسخة الحالية من الصفحة راجع: $PAGETITLE_URL. +'enotif_body' => 'عزيزي $ WATCHINGUSERNAMEE +صفحة $PAGETITLE قد $ CHANGEDORCREATEDفي $PAGEEDITDATE ب$PAGEEDITOR, انظر$PAGETITLE_URL للمراجعة الحالية +موجز للمحرر: $PAGESUMMARY $PAGEMINOREDIT -$NEWPAGE -ملخص تعديل المحرر: $PAGESUMMARY $PAGEMINOREDIT +الاتصال بالمحرر: + البريد: $PAGEEDITOR_EMAIL + ويكي: $PAGEEDITOR_WIKI -اتصل بالمحرر: -عبر بريد إلكتروني: $PAGEEDITOR_EMAIL -عبر الويكي: $PAGEEDITOR_WIKI +لن يكون هناك لا إخطارات أخرى في حالة حدوث مزيد من التغييرات إلا إذا قمت بزيارة هذه الصفحة. +يمكن أيضا تعيين إشارات الإعلام لجميع صفحات شاهد على هيئة الرصد الخاصة بك. -لن يكون هنالك أي إخطارات أخرى عن أية تغييرات تتم في المستقبل إلا إذا زرت هذه الصفحة. -يمكنك أيضا أن تعيد تصفير عداد الإخطارات لجميع الصفحات التي تراقبها في قائمة مراقبتك. - - نظام إخطار {{SITENAME}} الودود + {{SITENAME}} إعلام النظام الخاص بك ودية -- -لتغيير إعدادات قائمة مراقبتك، اذهب إلى: -{{fullurl:{{#special:Watchlist}}/edit}} +لتغيير إعدادات إعلام البريد الإلكتروني الخاص بك، قم بزيارة +{{fullurl: {{# الخاص: تفضيلات}}}} + +لتغيير إعدادات الرصد الخاصة بك، قم بزيارة +{{fullurl: {{# الخاص: الرصد}}/تحرير}} -لحذف الصفحة من قائمة مراقبتك، زر -$UNWATCHURL +لحذف الصفحة من هيئة الرصد الخاصة بك، قم بزيارة +$ أونواتشورل -للاقتراحات وللحصول على مساعدة إضافية: -{{fullurl:{{MediaWiki:Helppage}}}}', +التغذية المرتدة، والحصول على مساعدة إضافية: +{{fullurl: {{MediaWiki:Helppage}}}}', # Delete 'deletepage' => 'حذف الصفحة', @@ -2374,7 +2433,10 @@ $UNWATCHURL 'revertpage-nouser' => 'استرجع التعديلات بواسطة (اسم المستخدم تمت إزالته) حتى آخر نسخة بواسطة [[User:$1|$1]]', 'rollback-success' => 'استرجع تعديلات $1؛ استرجع حتى آخر نسخة بواسطة $2.', -'sessionfailure' => 'يبدو أنه هناك مشكلة في هذه جلسة الدخول الخاصة بك؛ + +# Edit tokens +'sessionfailure-title' => 'فشل في الجلسة', +'sessionfailure' => 'يبدو أنه هناك مشكلة في هذه جلسة الدخول الخاصة بك؛ لذلك فقد ألغيت هذه العملية كإجراء احترازي ضد الاختراق. من فضلك اضغط على مفتاح "رجوع" لتحميل الصفحة التي جئت منها، ثم حاول مرة أخرى.', @@ -2511,19 +2573,23 @@ $1', 'month' => 'من شهر (وأقدم):', 'year' => 'من سنة (وأقدم):', -'sp-contributions-newbies' => 'اعرض مساهمات الحسابات الجديدة فقط', -'sp-contributions-newbies-sub' => 'للحسابات الجديدة', -'sp-contributions-newbies-title' => 'مساهمات المستخدم للحسابات الجديدة', -'sp-contributions-blocklog' => 'سجل المنع', -'sp-contributions-deleted' => 'مساهمات المستخدم المحذوفة', -'sp-contributions-logs' => 'سجلات', -'sp-contributions-talk' => 'نقاش', -'sp-contributions-userrights' => 'إدارة صلاحيات المستخدم', -'sp-contributions-blocked-notice' => 'هذا المستخدم ممنوع حاليا. +'sp-contributions-newbies' => 'اعرض مساهمات الحسابات الجديدة فقط', +'sp-contributions-newbies-sub' => 'للحسابات الجديدة', +'sp-contributions-newbies-title' => 'مساهمات المستخدم للحسابات الجديدة', +'sp-contributions-blocklog' => 'سجل المنع', +'sp-contributions-deleted' => 'مساهمات المستخدم المحذوفة', +'sp-contributions-uploads' => 'مرفوعات', +'sp-contributions-logs' => 'سجلات', +'sp-contributions-talk' => 'نقاش', +'sp-contributions-userrights' => 'إدارة صلاحيات المستخدم', +'sp-contributions-blocked-notice' => 'هذا المستخدم ممنوع حاليا. إن آخر مدخلة في سجل المنع موجودة أدناه كمرجع:', -'sp-contributions-search' => 'بحث عن مساهمات', -'sp-contributions-username' => 'عنوان أيبي أو اسم مستخدم:', -'sp-contributions-submit' => 'ابحث', +'sp-contributions-blocked-notice-anon' => 'عنوان الأيبي هذا ممنوع حاليا. +آخر مدخلة لسجل المنع معروضة هنا كمرجع:', +'sp-contributions-search' => 'بحث عن مساهمات', +'sp-contributions-username' => 'عنوان أيبي أو اسم مستخدم:', +'sp-contributions-toponly' => 'أظهر أعلى المراجعات فقط', +'sp-contributions-submit' => 'ابحث', # What links here 'whatlinkshere' => 'ماذا يصل هنا', @@ -2585,7 +2651,6 @@ $1', 'ipb-edit-dropdown' => 'عدل أسباب المنع', 'ipb-unblock-addr' => 'رفع منع $1', 'ipb-unblock' => 'رفع المنع عن مستخدم أو عنوان أيبي', -'ipb-blocklist-addr' => 'عمليات المنع الموجودة ل$1', 'ipb-blocklist' => 'عرض حالات المنع الحالية', 'ipb-blocklist-contribs' => 'مساهمات $1', 'unblockip' => 'رفع المنع عن المستخدم', @@ -2662,6 +2727,8 @@ $1 ممنوع بالفعل. هل تريد تغيير الإعدادات؟', لا يمكنك إنشاء حساب.', 'cant-block-while-blocked' => 'أنت لا يمكنك منع المستخدمين الآخرين بينما أنت ممنوع.', 'cant-see-hidden-user' => 'المستخدم الذي تحاول منعه تم منعه مسبقا وإخفائه. بما أنك لا تمتلك صلاحية إخفاء المستخدم ، لا يمكنك مشاهدة المنع أو تعديله.', +'ipbblocked' => 'لا يمكنك منع أو رفع منع مستخدمين آخرين لأنك ممنوع', +'ipbnounblockself' => 'لا يسمح لك برفع المنع عن نفسك', # Developer tools 'lockdb' => 'قفل قاعدة البيانات', @@ -2699,6 +2766,18 @@ $1 ممنوع بالفعل. هل تريد تغيير الإعدادات؟', '''تحذير!''' هذا قد يكون تغييرا كارثيا وغير متوقع لصفحة مشهورة؛ من فضلك تأكد من فهم عواقب هذا قبل المتابعة.", +'movepagetext-noredirectfixer' => "باستخدام الاستمارة بالأسفل بإمكانك أن تغير اسم الصفحة، وأن تنقل تاريخها للاسم الجديد. +العنوان القديم سيصبح تحويلة للعنوان الجديد. +يمكنك تحديث التحويلات التي تشير إلى العنوان الأصلي تلقائيا. +لو اخترت ألا تفعل، تأكد من عدم وجود تحويلات [[Special:DoubleRedirects|مزدوجة]] أو [[Special:BrokenRedirects|مكسورة]]. +أنت مسؤول عن التأكد من أن الوصلات تتصل مع بعضها بشكل مناسب. + +لاحظ أنه '''لن يتم''' نقل الصفحة إذا كان هناك صفحة بنفس العنوان الجديد، إلا إذا كانت فارغة، أو تحويلة ولا تاريخ لها. +هذا يعني أنك يمكنك استرجاع الصفحة لمكانها لو قمت بخطأ، وأنك لا يمكنك الكتابة على صفحة موجودة. + +'''تحذير!''' +هذا قد يكون تغييرا كارثيا وغير متوقع لصفحة مشهورة؛ +من فضلك تأكد من فهم عواقب هذا قبل المتابعة", 'movepagetalktext' => "صفحة النقاش المرفقة سيتم نقلها كذلك، '''إلا في حالة''': * توجد صفحة نقاش غير فارغة تحت العنوان الجديد، أو * قمت بإزالة اختيار الصندوق بالأسفل. @@ -2756,6 +2835,7 @@ $1 ممنوع بالفعل. هل تريد تغيير الإعدادات؟', 'immobile-source-page' => 'هذه الصفحة غير قابلة للنقل.', 'immobile-target-page' => 'غير قادر على النقل إلى العنوان الوجهة هذا.', 'imagenocrossnamespace' => 'لا يمكن نقل الملف إلى نطاق غير نطاق الملفات', +'nonfile-cannot-move-to-file' => 'لا يمكن نقل غير الملفات إلى نطاق الملفات', 'imagetypemismatch' => 'امتداد الملف الجديد لا يطابق نوعه', 'imageinvalidfilename' => 'اسم الملف الهدف غير صحيح', 'fix-double-redirects' => 'حدث أي تحويلات تشير إلى العنوان الأصلي', @@ -2835,6 +2915,7 @@ $1 ممنوع بالفعل. هل تريد تغيير الإعدادات؟', 'importstart' => 'استيراد صفحات...', 'import-revision-count' => '{{PLURAL:$1|لا مراجعات|مراجعة واحدة|مراجعتان|$1 مراجعات|$1 مراجعة}}', 'importnopages' => 'لا صفحات للاستيراد', +'imported-log-entries' => 'استورد {{PLURAL:$1||مدخلة سجل واحدة|مدخلتي سجل|$1 مدخلات سجل|$1 مدخل سجل}}.', 'importfailed' => 'فشل الاستيراد: $1', 'importunknownsource' => 'نوع مصدر استيراد مجهول', 'importcantopen' => 'لم يمكن فتح ملف الاستيراد', @@ -2931,6 +3012,8 @@ $1 ممنوع بالفعل. هل تريد تغيير الإعدادات؟', 'tooltip-upload' => 'ابدأ الرفع', 'tooltip-rollback' => '"استرجاع" تسترجع التعديل (التعديلات) في هذه الصفحة للمساهم الأخير بضغطة واحدة.', 'tooltip-undo' => '"رجوع" تسترجع هذا التعديل وتفتح نافذة التعديل في نمط العرض المسبق. تسمح بإضافة سبب في الملخص.', +'tooltip-preferences-save' => 'احفظ التغييرات', +'tooltip-summary' => 'أدخل ملخصا قصيرا', # Stylesheets 'common.css' => '/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على كل الواجهات */', @@ -3062,14 +3145,17 @@ $1', 'imagemaxsize' => "حد حجم الصور:
    ''(لصفحات وصف الملفات)''", 'thumbsize' => 'حجم العرض المصغر:', 'widthheightpage' => '$1×$2، $3 {{PLURAL:$3|صفحة|صفحة}}', -'file-info' => '(حجم الملف: $1، نوع MIME: $2)', -'file-info-size' => '($1 × $2 بكسل حجم الملف: $3، نوع MIME: $4)', +'file-info' => 'حجم الملف: $1، نوع MIME: $2', +'file-info-size' => '$1 × $2 بكسل حجم الملف: $3، نوع MIME: $4', 'file-nohires' => 'لا توجد دقة أعلى متوفرة.', -'svg-long-desc' => '(ملف SVG، أبعاده $1 × $2 بكسل، حجم الملف: $3)', +'svg-long-desc' => 'ملف SVG، أبعاده $1 × $2 بكسل، حجم الملف: $3', 'show-big-image' => 'دقة كاملة', 'show-big-image-thumb' => 'حجم هذا العرض: $1 × $2 بكسل', 'file-info-gif-looped' => 'ملفوف', 'file-info-gif-frames' => '{{PLURAL:$1||إطار واحد|إطاران|$1 إطارات|$1 إطارا|$1 إطار}}', +'file-info-png-looped' => 'ملفوف', +'file-info-png-repeat' => 'عرضت {{PLURAL:$1||مرة واحدة|مرتين|$1 مرات|$1 مرة}}', +'file-info-png-frames' => '{{PLURAL:$1||إطار واحد|إطاران|$1 إطارات|$1 إطارًا|$1 إطار}}', # Special:NewFiles 'newimages' => 'معرض الملفات الجديدة', @@ -3166,9 +3252,9 @@ $1', 'exif-spectralsensitivity' => 'الحساسية الطيفية', 'exif-isospeedratings' => 'تقييم سرعة أيزو', 'exif-oecf' => 'عامل التحويل الكهروضوئي', -'exif-shutterspeedvalue' => 'سرعة الغالق', -'exif-aperturevalue' => 'فتحة الغالق', -'exif-brightnessvalue' => 'السطوع', +'exif-shutterspeedvalue' => 'سرعة الغالق APEX', +'exif-aperturevalue' => 'فتحة الغالق APEX', +'exif-brightnessvalue' => 'سطوع APEX', 'exif-exposurebiasvalue' => 'تعويض التعرض', 'exif-maxaperturevalue' => 'أقصى غالق أرضي', 'exif-subjectdistance' => 'مسافة الجسم', @@ -3233,6 +3319,7 @@ $1', 'exif-gpsareainformation' => 'اسم مساحة GPS', 'exif-gpsdatestamp' => 'تاريخ GPS', 'exif-gpsdifferential' => 'تصحيح GPS التفاضلي', +'exif-objectname' => 'عنوان قصير', # EXIF attributes 'exif-compression-1' => 'غير مضغوط', @@ -3334,7 +3421,7 @@ $1', 'exif-sensingmethod-7' => 'مستشعر خطي ثلاثي', 'exif-sensingmethod-8' => 'مستشعر لون خطي متتابع', -'exif-filesource-3' => 'دي إس سي', +'exif-filesource-3' => 'كاميرا رقمية واقفة', 'exif-scenetype-1' => 'صورة ملتقطة بشكل مباشر', @@ -3412,31 +3499,31 @@ $1', 'limitall' => 'الكل', # E-mail address confirmation -'confirmemail' => 'تأكيد عنوان البريد الإلكتروني', -'confirmemail_noemail' => 'ليس لديك عنوان بريد إلكتروني صحيح مسجل في [[Special:Preferences|تفضيلاتك]].', -'confirmemail_text' => '{{SITENAME}} يتطلب تأكيد عنوانك الإلكتروني قبل استخدام خصائص البريد الإلكتروني. +'confirmemail' => 'تأكيد عنوان البريد الإلكتروني', +'confirmemail_noemail' => 'ليس لديك عنوان بريد إلكتروني صحيح مسجل في [[Special:Preferences|تفضيلاتك]].', +'confirmemail_text' => '{{SITENAME}} يتطلب تأكيد عنوانك الإلكتروني قبل استخدام خصائص البريد الإلكتروني. اضغط على زر التفعيل بالأسفل ليتم إرسال رسالة تأكيد لعنوانك. ستتضمن الرسالة رمز تفعيل؛ اضغط على الوصلة التي تحتوي الرمز لتأكيد أن عنوانك الإلكتروني صحيح.', -'confirmemail_pending' => 'تم إرسال كود التأكيد بالفعل من قبل إلى بريدك الإلكتروني؛ +'confirmemail_pending' => 'تم إرسال كود التأكيد بالفعل من قبل إلى بريدك الإلكتروني؛ إذا كان حسابك قد تم عمله حالا، ربما يجب أن تنتظر بضع دقائق قبل طلبك لكود آخر.', -'confirmemail_send' => 'أرسل كود تأكيد', -'confirmemail_sent' => 'تم إرسال رسالة التأكيد، شكرا لك.', -'confirmemail_oncreate' => 'تم إرسال كود تأكيد لعنوان بريدك الإلكتروني. +'confirmemail_send' => 'أرسل كود تأكيد', +'confirmemail_sent' => 'تم إرسال رسالة التأكيد، شكرا لك.', +'confirmemail_oncreate' => 'تم إرسال كود تأكيد لعنوان بريدك الإلكتروني. لا يشترط أن تستخدم الكود للدخول للموسوعة باسمك، ولكن يجب أن تقوم بإدخاله قبل استخدامك أيا من خواص البريد الإلكتروني المستخدمة هنا في الويكي.', -'confirmemail_sendfailed' => 'لم يتمكن {{SITENAME}} من إرسال رسالة التأكيد إليك. +'confirmemail_sendfailed' => 'لم يتمكن {{SITENAME}} من إرسال رسالة التأكيد إليك. من فضلك التمس عنوان بريدك الإلكتروني باحثا عن حروف غير صحيحة. أرجع خادم البريد: $1', -'confirmemail_invalid' => 'كود تأكيد غير صحيح. +'confirmemail_invalid' => 'كود تأكيد غير صحيح. ربما انتهت فترة صلاحيته.', -'confirmemail_needlogin' => 'يجب عليك $1 لتأكيد بريدك الإلكتروني.', -'confirmemail_success' => 'تم تأكيد بريدك الإلكتروني. +'confirmemail_needlogin' => 'يجب عليك $1 لتأكيد بريدك الإلكتروني.', +'confirmemail_success' => 'تم تأكيد بريدك الإلكتروني. يمكنك الآن [[Special:UserLogin|الدخول]] والتمتع بالويكي.', -'confirmemail_loggedin' => 'بريدك الإلكتروني تم تأكيده الآن.', -'confirmemail_error' => 'ثمة شيء خطأ عند محاولة حفظ تأكيدك.', -'confirmemail_subject' => 'رسالة تأكيد البريد من {{SITENAME}}', -'confirmemail_body' => 'شخص ما، من المحتمل أن يكون أنت، من عنوان الأيبي $1، +'confirmemail_loggedin' => 'بريدك الإلكتروني تم تأكيده الآن.', +'confirmemail_error' => 'ثمة شيء خطأ عند محاولة حفظ تأكيدك.', +'confirmemail_subject' => 'رسالة تأكيد البريد من {{SITENAME}}', +'confirmemail_body' => 'شخص ما، من المحتمل أن يكون أنت، من عنوان الأيبي $1، سجل حسابا "$2" بعنوان البريد الإلكتروني هذا في {{SITENAME}}. لتأكيد أن هذا الحساب ينتمي إليك فعلا وتفعيل خواص البريد الإلكتروني في {{SITENAME}}، افتح هذه الوصلة في متصفحك : @@ -3449,8 +3536,38 @@ $3 $5 كود التفعيل هذا سينتهي في $4.', -'confirmemail_invalidated' => 'تأكيد عنوان البريد الإلكتروني تم إلغاؤه', -'invalidateemail' => 'إلغاء تأكيد البريد الإلكتروني', +'confirmemail_body_changed' => 'شخص ما -من المحتمل أن يكون أنت- من عنوان الأيبي $1 غيّر عنوان البريد +الإلكتروني للحساب "$2" إلى عنوان البريد الإلكتروني هذا في +{{SITENAME}}. + +لتأكيد أن هذا الحساب لك فعلا ولتفعيل خواص البريد الإلكتروني في +{{SITENAME}}، افتح هذه الوصلة في متصفحك: + +$3 + +إذا كان هذا الحساب *ليس* لك، اتبع هذه الوصلة لإلغاء تأكيد عنوان البريد +الإلكتروني: + +$5 + +سينتهي رمز التفعيل هذا في $4.', +'confirmemail_body_set' => 'شخص ما -من المحتمل أن يكون أنت- من عنوان الأيبي $1 غيّر عنوان البريد +الإلكتروني للحساب "$2" إلى عنوان البريد الإلكتروني هذا في +{{SITENAME}}. + +لتأكيد أن هذا الحساب لك فعلا ولتفعيل خواص البريد الإلكتروني في +{{SITENAME}}، افتح هذه الوصلة في متصفحك: + +$3 + +إذا كان هذا الحساب *ليس* لك، اتبع هذه الوصلة لإلغاء تأكيد عنوان البريد +الإلكتروني: + +$5 + +سينتهي رمز التفعيل هذا في $4.', +'confirmemail_invalidated' => 'تأكيد عنوان البريد الإلكتروني تم إلغاؤه', +'invalidateemail' => 'إلغاء تأكيد البريد الإلكتروني', # Scary transclusion 'scarytranscludedisabled' => '[التضمين بالإنترويكي معطل]', @@ -3496,6 +3613,7 @@ $1', 'table_pager_first' => 'الصفحة الأولى', 'table_pager_last' => 'الصفحة الأخيرة', 'table_pager_limit' => 'اعرض $1 مدخلة في الصفحة', +'table_pager_limit_label' => 'العناصر لكل صفحة:', 'table_pager_limit_submit' => 'اذهب', 'table_pager_empty' => 'لا نتائج', @@ -3620,6 +3738,7 @@ $1', 'version-specialpages' => 'صفحات خاصة', 'version-parserhooks' => 'خطاطيف المحلل', 'version-variables' => 'المتغيرات', +'version-skins' => 'واجهات', 'version-other' => 'أخرى', 'version-mediahandlers' => 'متحكمات الميديا', 'version-hooks' => 'الخطاطيف', @@ -3632,6 +3751,13 @@ $1', 'version-version' => '(نسخة $1)', 'version-svn-revision' => '(&رلم;r$2)', 'version-license' => 'الرخصة', +'version-poweredby-credits' => "تدار هذه الويكي ب'''[http://www.mediawiki.org/ ميدياويكي]''', حقوق النشر © 2001-$1 $2.", +'version-poweredby-others' => 'آخرون', +'version-license-info' => "ميدياويكي برنامج حر، يحق لك توزيعه و/أو تعديله وفقاً لبنود رخصة غنو العمومية كما نشرتها مؤسسة البرمجيات الحرة، الإصدار الثاني أو (وفقا لاختيارك أنت) أي إصدار لاحق. + +هذا البرنامج يوزع على أمل أن يكون مفيداً، ولكن '''دون أية ضمانات'''، بما في ذلك ضمانات '''التسويق''' أو '''الملاءمة لغرض معين'''. انظر رخصة غنو العمومية لمزيد من التفاصيل. + +ينبغي أن تكون قد تلقيت نسخة من رخصة غنو العمومية إذا لم يتم ذلك، اكتب إلى: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA أو [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html اقرأ على الإنترنت].", 'version-software' => 'البرنامج المثبت', 'version-software-product' => 'المنتج', 'version-software-version' => 'النسخة', @@ -3702,6 +3828,15 @@ $1', 'tags-edit' => 'عدل', 'tags-hitcount' => '$1 {{PLURAL:$1|تغيير|تغيير}}', +# Special:ComparePages +'comparepages' => 'قارن صفحات', +'compare-selector' => 'قارن مراجعات الصفحة', +'compare-page1' => 'صفحة 1', +'compare-page2' => 'صفحة 2', +'compare-rev1' => 'مراجعة 1', +'compare-rev2' => 'مراجعة 2', +'compare-submit' => 'قارن', + # Database error messages 'dberr-header' => 'هذا الويكي به مشكلة', 'dberr-problems' => 'عذرا! هذا الموقع يعاني من صعوبات تقنية.', @@ -3718,8 +3853,13 @@ $1', 'htmlform-float-invalid' => 'القيمة التي حددتها ليست عددا.', 'htmlform-int-toolow' => 'القيمة التي حددتها أقل من الحد الأدنى وهو $1', 'htmlform-int-toohigh' => 'القيمة التي حددتها أكبر من الحد الأقصى وهو $1', +'htmlform-required' => 'هذه القيمة مطلوبة', 'htmlform-submit' => 'أرسل', 'htmlform-reset' => 'الرجوع عن التغييرات', 'htmlform-selectorother-other' => 'أخرى', +# SQLite database support +'sqlite-has-fts' => '$1 بدعم البحث في كامل النص', +'sqlite-no-fts' => '$1 بدون دعم البحث في كامل النص', + ); diff --git a/languages/messages/MessagesArc.php b/languages/messages/MessagesArc.php index 40238ca9..05d8484f 100644 --- a/languages/messages/MessagesArc.php +++ b/languages/messages/MessagesArc.php @@ -14,6 +14,31 @@ * @author The Thadman */ +$namespaceNames = array( + NS_MEDIA => 'ܡܝܕܝܐ', + NS_SPECIAL => 'ܕܝܠܢܝܐ', + NS_MAIN => '', + NS_TALK => 'ܡܡܠܠܐ', + NS_USER => 'ܡܦܠܚܢܐ', + NS_USER_TALK => 'ܡܡܠܠܐ_ܕܡܦܠܚܢܐ', + NS_PROJECT_TALK => 'ܡܡܠܠܐ_ܕ$1', + NS_FILE => 'ܠܦܦܐ', + NS_FILE_TALK => 'ܡܡܠܠܐ_ܕܠܦܦܐ', + NS_MEDIAWIKI => 'ܡܝܕܝܐܘܝܩܝ', + NS_MEDIAWIKI_TALK => 'ܡܡܠܠܐ_ܕܡܝܕܝܐܘܝܩܝ', + NS_TEMPLATE => 'ܩܠܒܐ', + NS_TEMPLATE_TALK => 'ܡܡܠܠܐ_ܕܩܠܒܐ', + NS_HELP => 'ܥܘܕܪܢܐ', + NS_HELP_TALK => 'ܡܡܠܠܐ_ܕܥܘܕܪܢܐ', + NS_CATEGORY => 'ܣܕܪܐ', + NS_CATEGORY_TALK => 'ܡܡܠܠܐ_ܕܣܕܪܐ', +); + +$namespaceAliases = array( + 'ܡܬܚܫܚܢܐ' => NS_USER, + 'ܡܡܠܠܐ_ܕܡܬܚܫܚܢܐ' => NS_USER_TALK, +); + $specialPageAliases = array( 'CreateAccount' => array( 'ܒܪܝ_ܚܘܫܒܢܐ' ), 'Preferences' => array( 'ܓܒܝܬ̈ܐ' ), @@ -24,10 +49,11 @@ $specialPageAliases = array( 'Longpages' => array( 'ܦܐܬܬ̈ܐ_ܐܪ̈ܝܟܬܐ' ), 'Newpages' => array( 'ܦܐܬܬ̈ܐ_ܚܕ̈ܬܬܐ' ), 'Protectedpages' => array( 'ܦܐܬܬ̈ܐ_ܢܛܝܪ̈ܬܐ' ), + 'Protectedtitles' => array( 'ܟܘܢܝ̈ܐ_ܢܛܝܪ̈ܐ' ), 'Allpages' => array( 'ܟܠ_ܦܐܬܬ̈ܐ' ), 'Specialpages' => array( 'ܦܐܬܬ̈ܐ_ܕ̈ܝܠܢܝܬܐ' ), 'Contributions' => array( 'ܫܘܬܦܘܝܬ̈ܐ' ), - 'Whatlinkshere' => array( 'ܡܐ_ܐܣܪ_ܠܟܐ' ), + 'Whatlinkshere' => array( 'ܡܐ_ܐܣܪ_ܠܗܪܟܐ' ), 'Movepage' => array( 'ܫܢܝ_ܦܐܬܐ' ), 'Categories' => array( 'ܣܕܪ̈ܐ' ), 'Allmessages' => array( 'ܟܠ_ܐܓܪ̈ܬܐ' ), @@ -45,16 +71,25 @@ $magicWords = array( 'numberofarticles' => array( '1', 'ܡܢܝܢܐ_ܕܡܠܘܐ̈ܐ', 'NUMBEROFARTICLES' ), 'numberoffiles' => array( '1', 'ܡܢܝܢܐ_ܕܠܦܦ̈ܐ', 'NUMBEROFFILES' ), 'pagename' => array( '1', 'ܫܡܐ_ܕܦܐܬܐ', 'PAGENAME' ), + 'pagenamee' => array( '1', 'ܟܘܢܝܐ_ܕܦܐܬܐ', 'PAGENAMEE' ), + 'namespace' => array( '1', 'ܚܩܠܐ', 'NAMESPACE' ), 'msg' => array( '0', 'ܐܓܪܬܐ:', 'MSG:' ), 'img_thumbnail' => array( '1', 'ܙܥܘܪܬܐ', 'thumbnail', 'thumb' ), 'img_manualthumb' => array( '1', 'ܙܥܘܪܬܐ=$1', 'thumbnail=$1', 'thumb=$1' ), 'img_right' => array( '1', 'ܝܡܝܢܐ', 'right' ), 'img_left' => array( '1', 'ܣܡܠܐ', 'left' ), - 'img_none' => array( '1', 'ܠܐ ܡܕܡ', 'none' ), + 'img_none' => array( '1', 'ܠܐ_ܡܕܡ', 'none' ), 'img_center' => array( '1', 'ܡܨܥܐ', 'center', 'centre' ), - 'grammar' => array( '0', 'ܬܘܪܨ_ܡܡܠܠܐ', 'GRAMMAR:' ), + 'img_page' => array( '1', 'ܦܐܬܐ=$1', 'ܦܐܬܐ $1', 'page=$1', 'page $1' ), + 'img_border' => array( '1', 'ܬܚܘܡܐ', 'border' ), + 'img_baseline' => array( '1', 'ܣܪܛܐ_ܫܪܫܝܐ', 'baseline' ), + 'img_sub' => array( '1', 'ܦܪܥܝܐ', 'sub' ), + 'grammar' => array( '0', 'ܬܘܪܨ_ܡܡܠܠܐ:', 'GRAMMAR:' ), + 'gender' => array( '0', 'ܓܢܣܐ:', 'GENDER:' ), 'language' => array( '0', '#ܠܫܢܐ:', '#LANGUAGE:' ), 'special' => array( '0', 'ܕܝܠܢܝܐ', 'special' ), + 'url_path' => array( '0', 'ܫܒܝܠܐ', 'PATH' ), + 'url_wiki' => array( '0', 'ܘܝܩܝ', 'WIKI' ), ); $rtl = true; @@ -64,32 +99,12 @@ $defaultUserOptionOverrides = array( 'quickbar' => 2, ); -$namespaceNames = array( - NS_MEDIA => 'ܡܝܕܝܐ', - NS_SPECIAL => 'ܕܝܠܢܝܐ', - NS_MAIN => '', - NS_TALK => 'ܡܡܠܠܐ', - NS_USER => 'ܡܬܚܫܚܢܐ', - NS_USER_TALK => 'ܡܡܠܠܐ_ܕܡܬܚܫܚܢܐ', - NS_PROJECT_TALK => 'ܡܡܠܠܐ_ܕ$1', - NS_FILE => 'ܠܦܦܐ', - NS_FILE_TALK => 'ܡܡܠܠܐ_ܕܠܦܦܐ', - NS_MEDIAWIKI => 'ܡܝܕܝܐܘܝܩܝ', - NS_MEDIAWIKI_TALK => 'ܡܡܠܠܐ_ܕܡܝܕܝܐܘܝܩܝ', - NS_TEMPLATE => 'ܩܠܒܐ', - NS_TEMPLATE_TALK => 'ܡܡܠܠܐ_ܕܩܠܒܐ', - NS_HELP => 'ܥܘܕܪܢܐ', - NS_HELP_TALK => 'ܡܡܠܠܐ_ܕܥܘܕܪܢܐ', - NS_CATEGORY => 'ܣܕܪܐ', - NS_CATEGORY_TALK => 'ܡܡܠܠܐ_ܕܣܕܪܐ', -); - $messages = array( # User preference toggles 'tog-underline' => 'ܪܫܘܡ ܣܪܛܐ ܬܚܝܬ ܐܣܘܪܐ:', 'tog-justify' => 'ܫܘܐ ܦܬܓܡ̈ܐ', 'tog-hideminor' => 'ܛܫܝ ܫܘܚܠܦ̈ܐ ܙܥܘܪ̈ܐ ܒܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ', -'tog-rememberpassword' => 'ܕܟܘܪ ܥܠܠܬܝ ܥܠ ܚܫܘܒܬܐ ܗܕܐ', +'tog-rememberpassword' => 'ܕܟܘܪ ܥܠܠܬܝ ܥܠ ܡܦܐܬܢܐ ܗܢܐ (ܠܡܬܚܐ ܥܠܝܐ ܕ $1 {{PLURAL:$1|ܝܘܡܐ|ܝܘܡܬ̈ܐ}})', 'tog-watchcreations' => 'ܐܘܣܦ ܦܐܬܬ̈ܐ ܕܒܪܐ ܐܢܐ ܠܪ̈ܗܝܬܝ', 'tog-watchdefault' => 'ܐܘܣܦ ܦܐܬܬ̈ܐ ܕܫܚܠܦ ܐܢܐ ܠܪ̈ܗܝܬܝ', 'tog-watchmoves' => 'ܐܘܣܦ ܦܐܬܬ̈ܐ ܕܫܢܐ ܐܢܐ ܠܪ̈ܗܝܬܝ', @@ -192,30 +207,19 @@ $messages = array( 'faqpage' => 'Project:ܫܘܐܠ̈ܐ ܬܢܝ̈ܐ', # Vector skin -'vector-action-addsection' => 'ܐܘܣܦ ܡܠܘܐܐ', -'vector-action-delete' => 'ܫܘܦ', -'vector-action-move' => 'ܫܢܝ', -'vector-action-protect' => 'ܢܛܘܪ', -'vector-action-undelete' => 'ܠܐ ܫܘܦ', -'vector-action-unprotect' => 'ܠܐ ܢܛܘܪ', -'vector-namespace-category' => 'ܣܕܪܐ', -'vector-namespace-help' => 'ܦܐܬܐ ܕܥܘܕܪܢܐ', -'vector-namespace-image' => 'ܠܦܦܐ', -'vector-namespace-main' => 'ܦܐܬܐ', -'vector-namespace-media' => 'ܦܐܬܐ ܕܡܝܕܝܐ', -'vector-namespace-mediawiki' => 'ܐܓܪܬܐ', -'vector-namespace-project' => 'ܦܐܬܐ ܕܬܪܡܝܬܐ', -'vector-namespace-special' => 'ܦܐܬܐ ܕܝܠܢܝܬܐ', -'vector-namespace-talk' => 'ܡܡܠܠܐ', -'vector-namespace-template' => 'ܩܠܒܐ', -'vector-namespace-user' => 'ܦܐܬܐ ܕܡܦܠܚܢܐ', -'vector-view-create' => 'ܒܪܝ', -'vector-view-edit' => 'ܫܚܠܦ', -'vector-view-history' => 'ܚܙܝ ܬܫܥܝܬܐ', -'vector-view-view' => 'ܩܪܝ', -'vector-view-viewsource' => 'ܚܙܝ ܡܒܘܥܐ', -'actions' => 'ܥܒܕ̈ܐ', -'namespaces' => 'ܚܩܠܬ̈ܐ', +'vector-action-addsection' => 'ܐܘܣܦ ܡܠܘܐܐ', +'vector-action-delete' => 'ܫܘܦ', +'vector-action-move' => 'ܫܢܝ', +'vector-action-protect' => 'ܢܛܘܪ', +'vector-action-undelete' => 'ܠܐ ܫܘܦ', +'vector-action-unprotect' => 'ܠܐ ܢܛܘܪ', +'vector-view-create' => 'ܒܪܝ', +'vector-view-edit' => 'ܫܚܠܦ', +'vector-view-history' => 'ܚܙܝ ܬܫܥܝܬܐ', +'vector-view-view' => 'ܩܪܝ', +'vector-view-viewsource' => 'ܚܙܝ ܡܒܘܥܐ', +'actions' => 'ܥܒܕ̈ܐ', +'namespaces' => 'ܚܩܠܬ̈ܐ', 'errorpagetitle' => 'ܦܘܕܐ', 'returnto' => 'ܕܥܘܪ ܠ$1.', @@ -270,6 +274,7 @@ $messages = array( 'jumpto' => 'ܫܘܪ ܠ:', 'jumptonavigation' => 'ܐܠܦܪܘܬܐ', 'jumptosearch' => 'ܒܨܝܐ', +'pool-errorunknown' => 'ܦܘܕܐ ܠܐ ܝܕܝܥܐ', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'ܡܢܘ {{SITENAME}}', @@ -351,7 +356,7 @@ $messages = array( 'yourname' => 'ܫܡܐ ܕܡܦܠܚܢܐ:', 'yourpassword' => 'ܡܠܬܐ ܕܥܠܠܐ:', 'yourpasswordagain' => 'ܟܬܘܒ ܡܠܬܐ ܕܥܠܠܐ ܙܒܢܬܐ ܐܚܪܬܐ:', -'remembermypassword' => 'ܕܟܘܪ ܥܠܠܬܝ ܥܠ ܚܫܘܒܬܐ ܗܕܐ', +'remembermypassword' => 'ܕܟܘܪ ܥܠܠܬܝ ܥܠ ܡܦܐܬܢܐ ܗܢܐ (ܠܡܬܚܐ ܥܠܝܐ ܕ $1 {{PLURAL:$1|ܝܘܡܐ|ܝܘܡܬ̈ܐ}})', 'login' => 'ܥܘܠ', 'nav-login-createaccount' => 'ܥܘܠ / ܒܪܝ ܚܘܫܒܢܐ', 'loginprompt' => 'ܐܠܨܐ ܠܡܦܐܬܢܐ ܕܝܠܟ ܕܣܡܟ ܠܩܘܩܝܙ (cookies) ܠܥܠܠܬܐ ܠ {{SITENAME}}.', @@ -366,6 +371,7 @@ $messages = array( 'gotaccount' => "ܐܝܬ ܠܟ ܚܘܫܒܢܐ؟ '''$1'''.", 'gotaccountlink' => 'ܥܘܠ', 'createaccountmail' => 'ܒܝܕ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ', +'createaccountreason' => 'ܥܠܬܐ', 'badretype' => 'ܡܠܬܐ ܕܥܠܠܐ ܟܬܒܬ ܐܢܬ ܠܐ ܐܘܝܢܬܐ.', 'userexists' => 'ܫܡܐ ܕܡܦܠܚܢܐ ܫܩܝܠܐ. ܓܒܝ ܫܡܐ ܐܚܪܢܐ.', @@ -419,6 +425,7 @@ $messages = array( 'showdiff' => 'ܚܘܝ ܫܘܚܠܦ̈ܐ', 'anoneditwarning' => "'''ܙܘܗܪܐ:''' ܠܐ ܐܝܬܝܟ ܥܠܝܠܐ. ܐܝ ܦܝ (IP) ܕܝܠܟ ܢܬܟܬܒ ܒܬܫܥܝܬܐ ܕܦܐܬܐ.", +'anonpreviewwarning' => '"ܠܐ ܐܝܬܝܟ ܥܠܝܠܐ. ܐܢ ܠܒܟ ܦܐܬܐ ܐܢܬ ܐܝ ܦܝ (IP) ܕܝܠܟ ܢܬܟܬܒ ܒܬܫܥܝܬܐ ܕܫܘܚܠܦܐ ܕܦܐܬܐ."', 'summary-preview' => 'ܚܝܪܐ ܩܕܡܝܐ ܕܦܣܝܩܬ̈ܐ :', 'blockedtitle' => 'ܡܦܠܚܢܐ ܗܘ ܡܚܪܡܐ', 'blockednoreason' => 'ܠܝܬ ܥܠܬܐ ܝܗܝܒܬܐ', @@ -496,6 +503,8 @@ $messages = array( 'revdelete-radio-unset' => 'ܠܐ', 'revdelete-log' => 'ܥܠܬܐ:', 'revdel-restore' => 'ܫܚܠܦ ܚܙܝܬܐ', +'revdel-restore-deleted' => 'ܬܢܝܬ̈ܐ ܫܝܦ̈ܐ', +'revdel-restore-visible' => 'ܬܢܝܬ̈ܐ ܡܬܚܙܝܢܝܬ̈ܐ', 'pagehist' => 'ܬܫܥܝܬܐ ܕܦܐܬܐ', 'deletedhist' => 'ܬܫܥܝܬܐ ܫܝܦܬܐ', 'revdelete-content' => 'ܚܒܝܫܬ̈ܐ', @@ -531,6 +540,8 @@ $messages = array( 'compareselectedversions' => 'ܦܚܘܡ ܒܝܬ ܬܪܝܢ ܬܢܝܬ̈ܐ ܓܒܝܬ̈ܐ', 'showhideselectedversions' => 'ܚܘܝ/ܛܫܝ ܬܢܝܬ̈ܐ ܓܒܝܬ̈ܐ', 'editundo' => 'ܠܐ ܬܥܒܕ', +'diff-multi' => '({{PLURAL:$1|ܚܕܐ ܬܢܝܬܐ ܡܨܥܝܬܐ|$1 ܬܢܝܬ̈ܐ ܡܨܥܝܬ̈ܐ}} ܒܝܕ {{PLURAL:$2|ܚܕ ܡܦܠܚܢܐ ܠܐ ܓܠܝܚܬܐ|$2 ܡܦܠܚܢ̈ܐ ܠܐ ܓܠܝܚܬ̈ܐ}})', +'diff-multi-manyusers' => '({{PLURAL:$1|One ܚܕܐ ܬܢܝܬܐ ܡܨܥܝܬܐ|$1 ܬܢܝܬ̈ܐ ܡܨܥܝܬ̈ܐ}} ܒܝܕ ܝܬܝܪ ܡܢ $2 {{PLURAL:$2|ܚܕ ܡܦܠܚܢܐ ܠܐ ܓܠܝܚܬܐ|ܡܦܠܚܢ̈ܐ ܠܐ ܓܠܝܚܬ̈ܐ}})', # Search results 'searchresults' => 'ܦܠܛ̈ܐ ܕܒܘܨܝܐ', @@ -655,7 +666,7 @@ $messages = array( 'prefs-advancedrendering' => 'ܓܒܝܬ̈ܐ ܡܬܩܕ̈ܡܢܐ', 'prefs-advancedsearchoptions' => 'ܓܒܝܬ̈ܐ ܡܬܩܕ̈ܡܢܐ', 'prefs-advancedwatchlist' => 'ܓܒܝܬ̈ܐ ܡܬܩܕ̈ܡܢܐ', -'prefs-display' => 'ܚܘܝ ܓܒܝܬ̈ܐ', +'prefs-displayrc' => 'ܚܘܝ ܓܒܝܬ̈ܐ', 'prefs-diffs' => 'ܦܪ̈ܝܫܘܝܬܐ', # User rights @@ -736,34 +747,30 @@ $messages = array( 'action-userrights' => 'ܫܚܠܦܬܐ ܕܟܠ ܙܕ̈ܩܐ ܕܡܦܠܚܢܐ', # Recent changes -'nchanges' => '$1 {{PLURAL:$1|ܫܘܚܠܦܐ|ܫܘܚܠܦ̈ܐ}}', -'recentchanges' => 'ܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ', -'recentchanges-legend' => 'ܓܒܝܬ̈ܐ ܕܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ', -'recentchangestext' => 'ܥܩܒ ܫܘܚܠܦ̈ܐ ܚܕܬ ܡܢ ܟܠ ܕܘܝܩܝ ܒܦܐܬܐ ܗܕܐ.', -'recentchanges-label-legend' => 'ܩܠܝܕܐ: $1.', -'recentchanges-legend-newpage' => '$1 - ܦܐܬܐ ܚܕܬܐ', -'recentchanges-label-newpage' => 'ܫܘܚܠܦܐ ܗܢܐ ܒܪܐ ܦܐܬܐ ܚܕܬܐ', -'recentchanges-legend-minor' => '$1 - ܫܘܚܠܦܐ ܙܥܘܪܐ', -'recentchanges-label-minor' => 'ܗܢܐ ܗܘ ܫܘܚܠܦܐ ܙܥܘܪܐ', -'recentchanges-legend-bot' => '$1 - ܫܘܚܠܦܐ ܕܒܘܬ (bot)', -'recentchanges-label-bot' => 'ܒܘܬ (bot) ܥܒܕ ܗܢܐ ܫܘܚܠܦܐ', -'rclistfrom' => 'ܚܘܝ ܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ ܡܢ $1', -'rcshowhideminor' => '$1 ܫܘܚܠܦ̈ܐ ܙܥܘܪ̈ܐ', -'rcshowhidebots' => '$1 ܒܘܬ̈ܐ (Bots)', -'rcshowhideliu' => '$1 ܡܦܠܚܢ̈ܐ ܥܠܝܠ̈ܐ', -'rcshowhideanons' => '$1 ܡܦܠܚܢܐ ܠܐ ܝܕܝܥܐ', -'rcshowhidemine' => '$1 ܫܘܚܠܦ̈ܝ', -'rclinks' => 'ܚܘܝ $1 ܫܘܚܠܦ̈ܐ ܐܚܪ̈ܝܐ ܒ $2 ܝܘܡܬ̈ܐ ܐܚܪ̈ܝܬܐ
    $3', -'diff' => 'ܦܪܝܫܘܬܐ', -'hist' => 'ܬܫܥܝܬܐ', -'hide' => 'ܛܫܝ', -'show' => 'ܚܘܝ', -'minoreditletter' => 'ܙ', -'newpageletter' => 'ܚ', -'boteditletter' => 'ܒ', -'newsectionsummary' => '/* $1 */ ܡܢܬܐ ܚܕܬܐ', -'rc-enhanced-expand' => 'ܚܘܝ ܐܪ̈ܝܟܬܐ (ܒܥܐ ܠܟ JavaScript)', -'rc-enhanced-hide' => 'ܛܫܝ ܐܪ̈ܝܟܬܐ', +'nchanges' => '$1 {{PLURAL:$1|ܫܘܚܠܦܐ|ܫܘܚܠܦ̈ܐ}}', +'recentchanges' => 'ܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ', +'recentchanges-legend' => 'ܓܒܝܬ̈ܐ ܕܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ', +'recentchangestext' => 'ܥܩܒ ܫܘܚܠܦ̈ܐ ܚܕܬ ܡܢ ܟܠ ܕܘܝܩܝ ܒܦܐܬܐ ܗܕܐ.', +'recentchanges-label-newpage' => 'ܫܘܚܠܦܐ ܗܢܐ ܒܪܐ ܦܐܬܐ ܚܕܬܐ', +'recentchanges-label-minor' => 'ܗܢܐ ܗܘ ܫܘܚܠܦܐ ܙܥܘܪܐ', +'recentchanges-label-bot' => 'ܒܘܬ (bot) ܥܒܕ ܗܢܐ ܫܘܚܠܦܐ', +'rclistfrom' => 'ܚܘܝ ܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ ܡܢ $1', +'rcshowhideminor' => '$1 ܫܘܚܠܦ̈ܐ ܙܥܘܪ̈ܐ', +'rcshowhidebots' => '$1 ܒܘܬ̈ܐ (Bots)', +'rcshowhideliu' => '$1 ܡܦܠܚܢ̈ܐ ܥܠܝܠ̈ܐ', +'rcshowhideanons' => '$1 ܡܦܠܚܢܐ ܠܐ ܝܕܝܥܐ', +'rcshowhidemine' => '$1 ܫܘܚܠܦ̈ܝ', +'rclinks' => 'ܚܘܝ $1 ܫܘܚܠܦ̈ܐ ܐܚܪ̈ܝܐ ܒ $2 ܝܘܡܬ̈ܐ ܐܚܪ̈ܝܐ
    $3', +'diff' => 'ܦܪܝܫܘܬܐ', +'hist' => 'ܬܫܥܝܬܐ', +'hide' => 'ܛܫܝ', +'show' => 'ܚܘܝ', +'minoreditletter' => 'ܙ', +'newpageletter' => 'ܚ', +'boteditletter' => 'ܒ', +'newsectionsummary' => '/* $1 */ ܡܢܬܐ ܚܕܬܐ', +'rc-enhanced-expand' => 'ܚܘܝ ܐܪ̈ܝܟܬܐ (ܒܥܐ ܠܟ JavaScript)', +'rc-enhanced-hide' => 'ܛܫܝ ܐܪ̈ܝܟܬܐ', # Recent changes linked 'recentchangeslinked' => 'ܫܘܚܠܦ̈ܐ ܕ̈ܡܝܐ', @@ -796,6 +803,12 @@ $messages = array( 'upload-description' => 'ܫܘܡܗܐ ܕܠܦܦܐ', 'upload-options' => 'ܓܒܝܬ̈ܐ ܕܐܣܩܬܐ ܕܠܦܦܐ', 'watchthisupload' => 'ܪܗܝ ܗܢܐ ܠܦܦܐ', +'upload-success-subj' => 'ܠܦܦܐ ܐܣܩܬ ܢܨܝܚܐܝܬ', +'upload-failure-subj' => 'ܩܛܪܐ ܒܐܣܩܬܐ ܕܠܦܦܐ', +'upload-failure-msg' => 'ܐܝܬ ܗܘܐ ܩܛܪܐ ܒܠܦܦܐ ܕܐܣܩܬ ܡܢ [$2]: + +$1', +'upload-warning-subj' => 'ܙܘܗܪܐ ܥܠ ܐܣܩܬܐ ܕܠܦܦܐ', 'upload-proto-error' => 'ܦܪܘܛܘܩܘܠ ܠܐ ܬܪܝܨܐ', 'upload-file-error' => 'ܦܘܕܐ ܓܘܝܐ', @@ -815,6 +828,7 @@ $messages = array( # Special:ListFiles 'imgfile' => 'ܠܦܦܐ', 'listfiles' => 'ܡܟܬܒܘܬܐ ܕܠܦܦ̈ܐ', +'listfiles_thumb' => 'ܙܘܥܪܐ', 'listfiles_date' => 'ܣܝܩܘܡܐ', 'listfiles_name' => 'ܫܡܐ', 'listfiles_user' => 'ܡܦܠܚܢܐ', @@ -993,7 +1007,7 @@ $messages = array( # Special:ActiveUsers 'activeusers' => 'ܡܟܬܒܘܬܐ ܕܗܕ̈ܡܐ ܟܫܝܪ̈ܐ', -'activeusers-count' => '$1 {{PLURAL:$1|ܫܘܚܠܦܐ ܚܕܬܐ|ܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ}} ܒ {{PLURAL:$3|ܝܘܡܐ ܐܚܪܝܐ|$3 ܝܘܡܬ̈ܐ ܐܚܪ̈ܝܬܐ}}', +'activeusers-count' => '$1 {{PLURAL:$1|ܫܘܚܠܦܐ ܚܕܬܐ|ܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ}} ܒ {{PLURAL:$3|ܝܘܡܐ ܐܚܪܝܐ|$3 ܝܘܡܬ̈ܐ ܐܚܪ̈ܝܐ}}', 'activeusers-from' => 'ܚܘܝ ܡܦܠܚܢ̈ܐ ܕܫܪܐ ܥܡ:', 'activeusers-hidebots' => 'ܛܫܝ ܒܘܬ̈ܐ (bots)', 'activeusers-hidesysops' => 'ܛܫܝ ܡܕܒܪ̈ܢܐ', @@ -1034,10 +1048,14 @@ $messages = array( 'emailccsubject' => 'ܨܚܚܐ ܕܐܓܪܬܟ ܠ $1: $2', 'emailsent' => 'ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܐܫܬܕܪ', +# User Messenger +'usermessage-summary' => 'ܫܒܩܐ ܐܓܪܬܐ ܕܛܟܣܐ', +'usermessage-editor' => 'ܡܫܕܪܢܐ ܕܛܟܣܐ', + # Watchlist 'watchlist' => 'ܪ̈ܗܝܬܝ', 'mywatchlist' => 'ܪ̈ܗܝܬܝ', -'watchlistfor' => "(ܠ'''$1''')", +'watchlistfor2' => 'ܠ $1 $2', 'nowatchlist' => 'ܠܝܬ ܠܟ ܡܕܡ ܒܪ̈ܗܝܬܐ ܕܝܠܟ', 'watchnologin' => 'ܠܝܬܝܟ ܥܠܝܠܐ', 'addedwatch' => 'ܐܘܣܦ ܠܪ̈ܗܝܬܐ', @@ -1047,7 +1065,7 @@ $messages = array( 'watchthispage' => 'ܪܗܝ ܗܕܐ ܦܐܬܐ', 'unwatch' => 'ܠܐ ܪܗܝ', 'unwatchthispage' => 'ܟܠܝ ܪܗܝܐ', -'wlshowlast' => 'ܚܘܝ $1 ܫܥܬ̈ܐ $2 ܝܘܡܬ̈ܐ ܐܚܪ̈ܝܬܐ $3', +'wlshowlast' => 'ܚܘܝ $1 ܫܥܬ̈ܐ $2 ܝܘܡܬ̈ܐ ܐܚܪ̈ܝܐ $3', 'watchlist-options' => 'ܓܒܝܬ̈ܐ ܕܪ̈ܗܝܬܐ', # Displayed when you click the "watch" button and it is in the process of watching @@ -1084,6 +1102,9 @@ $messages = array( 'rollbacklink' => 'ܐܦܢܝ', 'editcomment' => "ܦܣܝܩܬ̈ܐ ܕܫܘܚܠܦܐ ܗܘܐ: \"''\$1''\".", +# Edit tokens +'sessionfailure-title' => 'ܡܘܬܒܐ ܠܐ ܢܨܚܬ', + # Protect 'protectlogpage' => 'ܣܓܠܐ ܕܢܛܪܐ', 'protectedarticle' => 'ܢܛܝܪܐ "[[$1]]"', @@ -1297,12 +1318,6 @@ Do you want to change the settings?', 'import-logentry-upload-detail' => '$1 {{PLURAL:$1|ܬܢܝܬܐ |ܬܢܝܬ̈ܐ}}', 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|ܬܢܝܬܐ |ܬܢܝܬ̈ܐ}} ܡܢ $2', -# Tooltip help for the actions -'tooltip-pt-userpage' => '', -'tooltip-pt-mytalk' => '', -'tooltip-search' => 'Search {{SITENAME}}', -'tooltip-t-print' => 'Printable version of this page', - # Attribution 'anonymous' => '{{PLURAL:$1|ܡܦܠܚܢܐ ܠܐ ܝܕܝܥܐ|ܡܦܠܚܢ̈ܐ ܠܐ ܝܕ̈ܝܥܐ}} ܕ {{SITENAME}}', 'siteuser' => '{{SITENAME}} ܡܦܠܚܢܐ $1', @@ -1338,6 +1353,7 @@ $1', # Media information 'thumbsize' => 'ܥܓܪܐ ܕܨܘܪܬܐ ܙܥܘܪܬܐ:', +'file-info' => 'ܥܓܪܐ ܕܠܦܦܐ: $1, MIME ܐܕܫܐ: $2', 'file-nohires' => 'ܠܝܬ ܢܩܕܘܬܐ ܝܬܝܪ ܡܢ ܗܢܐ.', 'show-big-image' => 'ܢܩܕܘܬܐ ܓܡܝܪܬܐ', @@ -1448,6 +1464,7 @@ $1', 'table_pager_prev' => 'ܦܐܬܐ ܩܕܝܡܬܐ', 'table_pager_first' => 'ܦܐܬܐ ܩܕܡܝܬܐ', 'table_pager_last' => 'ܦܐܬܐ ܐܚܪܝܬܐ', +'table_pager_limit_label' => 'ܡܕܡ ܠܟܠ ܕܦܐ:', 'table_pager_limit_submit' => 'ܙܠ', 'table_pager_empty' => 'ܠܝܬ ܦܠܛ̈ܐ', @@ -1472,6 +1489,7 @@ $1', 'version-specialpages' => 'ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ', 'version-other' => 'ܐܚܪܢܐ', 'version-version' => '(ܨܚܚܐ $1)', +'version-poweredby-others' => 'ܐܚܪ̈ܢܐ', 'version-software-version' => 'ܨܚܚܐ', # Special:FilePath @@ -1504,6 +1522,13 @@ $1', 'tags-edit' => 'ܫܚܠܦ', 'tags-hitcount' => '$1 {{PLURAL:$1|ܫܘܚܠܦܐ|ܫܘܚܠܦ̈ܐ}}', +# Special:ComparePages +'compare-page1' => 'ܕܦܐ 1', +'compare-page2' => 'ܕܦܐ 2', +'compare-rev1' => 'ܬܢܝܬܐ 1', +'compare-rev2' => 'ܬܢܝܬܐ 2', +'compare-submit' => 'ܦܚܘܡ', + # HTML forms 'htmlform-submit' => 'ܫܕܪ', 'htmlform-reset' => 'ܠܐ ܬܥܒܕ ܫܘܚܠܦ̈ܐ', diff --git a/languages/messages/MessagesArn.php b/languages/messages/MessagesArn.php index ebd350f0..e6257b38 100644 --- a/languages/messages/MessagesArn.php +++ b/languages/messages/MessagesArn.php @@ -96,15 +96,11 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-delete' => 'Ñamümün', -'vector-namespace-main' => 'Pakina', -'vector-namespace-mediawiki' => 'Yefalzugu', -'vector-namespace-talk' => 'Nvxamkawvn', -'vector-namespace-user' => 'Kellufe', -'vector-view-create' => 'Zewmape', -'vector-view-edit' => 'Pepikan', -'vector-view-history' => 'Pegelpe rupañmael', -'vector-view-view' => 'Chillkatun', +'vector-action-delete' => 'Ñamümün', +'vector-view-create' => 'Zewmape', +'vector-view-edit' => 'Pepikan', +'vector-view-history' => 'Pegelpe rupañmael', +'vector-view-view' => 'Chillkatun', 'returnto' => 'Amutun $1 püle.', 'tagline' => '{{SITENAME}} mew', @@ -302,8 +298,6 @@ $messages = array( 'action-undelete' => 'Namümlay tüfachi pakina', # Recent changes -'recentchanges-legend-newpage' => '$1 - We Pakina', -'recentchanges-legend-minor' => '$1 pichi wirin', 'rcshowhideminor' => '$1 pichi wirin', 'rcshowhidemine' => '$1 tañi wirin', 'hist' => 'rupañ', @@ -388,7 +382,6 @@ $messages = array( 'emailsend' => 'Werkün', # Watchlist -'watchlistfor' => "('''$1''')", 'watchnologin' => 'Petu konlaymi', 'watch' => 'Llaytun', 'watchthispage' => 'Llaytun tüfachi pakina', diff --git a/languages/messages/MessagesAry.php b/languages/messages/MessagesAry.php new file mode 100644 index 00000000..3468cb77 --- /dev/null +++ b/languages/messages/MessagesAry.php @@ -0,0 +1,2099 @@ + 'Ṣetter l-lyanaṫ:', +'tog-highlightbroken' => 'L-Lyanaṫ le ṣefḫaṫ li ma mojodinċ ka iṫ\'afiċaw ḫomer (ola : bḫal haka?)', +'tog-justify' => 'Jusṫifyé l-paragrafaṫ', +'tog-hideminor' => 'Ĥebbi ṫ-ṫeĝdilaṫ l-leĥĥrin', +'tog-hidepatrolled' => 'Ĥebbi ṫ-ṫeĝdilaṫ l-mraqbin fe ṫ-ṫeĝdilaṫ l-leĥĥrin', +'tog-newpageshidepatrolled' => 'Ĥebbi ṣ-ṣefḫaṫ l-mraqbin men ṣ-ṣefḫaṫ j-jdad', +'tog-extendwatchlist' => 'Kebber l-lista dyal s-suivi baċ bano ṫ-ṫeġyiraṫ kamlin, maċi ġir l-leĥĥrin.', +'tog-usenewrc' => 'Sṫeĝmel ṫ-ṫeġyiraṫ l-leĥĥrin l-mezyanin (kayḫṫaj JavaScript)', +'tog-numberheadings' => 'Nemra otomaṫikiya dyal l-ĝanawin', +'tog-showtoolbar' => 'Werri l-barra dyal ṫ-ṫeĝdilaṫ (kayḫṫaj JavaScript)', +'tog-editondblclick' => 'Baċ ṫṣayeb ṣ-ṣefḫa ĥaṣek ṫbrek 2 merraṫ (kayḫṫaj JavaScript)', +'tog-editsection' => 'Aktivé ṫ-ṫeĝdilaṫ dyal s-seksyon be l-lyanaṫ « [Ĝeddel] »', +'tog-editsectiononrightclick' => 'Baċ ṫbeddel l-ĝonwan dyal ċi seksyon brek ĝlih be l-imniya (kayḫṫaj JavaScript)', +'tog-showtoc' => 'biyn lfahras dyal lmohtawayat (bnisba lsafahat li ktr mn 3 dlaanawin)', +'tog-rememberpassword' => 'Ĝqel ĝla smiyṫi fe had l-ordinaṫør (ġir limoddaṫ {{PLURAL:$1|yom waḫed|$1 iyyam}})', +'tog-watchcreations' => 'zid sfahi li nchatha f qaaimat lmoraqaba', +'tog-watchdefault' => 'zid sfahi li adltha f qaaimat lmoraqaba', +'tog-watchmoves' => 'zid sfahi li bdlt blasstha f qaaimat lmoraqaba', +'tog-watchdeletion' => 'zid sfahi li mshtha f qaaimat lmoraqaba', +'tog-minordefault' => 'alm jmia tadilat tafifa iftiradiyan', +'tog-previewontop' => 'biyn laard lmosbaq qbl sndoq thrir', +'tog-previewonfirst' => 'Ůbiyn moaayana maa awal tadil', +'tog-nocache' => 'attl takhzin lmotassafih lsfha', +'tog-enotifwatchlistpages' => 'sift liya barid electroni ila tbdlat chi sfha f qaaimat lmoraqaba diali', +'tog-enotifusertalkpages' => 'sift liya rissala electronia ila tbdlat sfht niqach dyali', +'tog-enotifminoredits' => 'sift liya risala electronia hta bnisba ltadilat tafifa', +'tog-enotifrevealaddr' => 'biyn lbarid lelectroni dyali f halat rassaail laikhtar', +'tog-shownumberswatching' => 'biyn aadad lmostakhdimin lmoraqibin', +'tog-oldsig' => 'moaayana litawqia lmawjod', +'tog-fancysig' => 'aaml nass bhal nass wiki (bla wsla otomatikia)', +'tog-externaleditor' => 'stakhdm moharrir khariji iftiradiyan(faqat lilkhobaraa, kaybghi iaadadat khassa f lordinator dyalk)', +'tog-externaldiff' => 'stakhdm farq khariji iftiradiyan(faqat lilkhobaraa, kaybghi iaadadat khassa f lordinator dyalk)', +'tog-showjumplinks' => 'mkkn wassalat "sir l" lmossaaida', +'tog-uselivepreview' => 'staml listiarad saria (khasso javascipt) (tjribi)', +'tog-forceeditsummary' => 'nbhni ila kandkhl molkhass taadil khawi', +'tog-watchlisthideown' => 'khbi tadilat dyali mn qaaimat lmoraqaba', +'tog-watchlisthidebots' => 'khbi tadilat lbot mn qaaimat lmoraqaba', +'tog-watchlisthideminor' => 'khbi tadilat tafifa mn qaaimat lmoraqaba', +'tog-watchlisthideliu' => 'khbi tadilat lmostkhdimin lmsjlin mn qaaimat lmoraqaba', +'tog-watchlisthideanons' => 'khbi taadilat lmostkhdimin lmjholin mn qaaimat lmoraqaba', +'tog-watchlisthidepatrolled' => 'khbi tadilat lmorajaaa mn qaaimat lmoraqaba', +'tog-nolangconversion' => 'attl thwil lahajat', +'tog-ccmeonemails' => 'sift liya noskha mn rasaail lbarid lelectroni likansiftha lmostkhdimin lkhrin', +'tog-diffonly' => 'matbiynch mohtawa sfha tht lforoqat', +'tog-showhiddencats' => 'biyn tsnifat lmkhfiya', +'tog-noconvertlink' => 'aattl thwil anwan lwslat', +'tog-norollbackdiff' => 'hiyd lfrq ila drt istirjaa', + +'underline-always' => 'Dima', +'underline-never' => 'Abadan', +'underline-default' => 'reglage dyal lmotassafih', + +# Font style option in Special:Preferences +'editfont-style' => 'namat lkht dyal mintaqat thrir', +'editfont-default' => 'reglage dyal lmotasafih', +'editfont-monospace' => 'ĥtt tabit lġarḍ', +'editfont-sansserif' => 'ĥtt ba ziyada', +'editfont-serif' => 'kht bzwayd', + +# Dates +'sunday' => 'L-Ḫed', +'monday' => 'Ṫ-Ṫnin', +'tuesday' => 'Ṫ-Ṫlaṫ', +'wednesday' => 'L-Arbeĝ', +'thursday' => 'L-Ĥmis', +'friday' => 'J-Jemĝa', +'saturday' => 'S-Sebṫ', +'sun' => 'Ḫed', +'mon' => 'Ṫnin', +'tue' => 'Ṫlaṫ', +'wed' => 'Arbeĝ', +'thu' => 'Ĥmis', +'fri' => 'Jemĝa', +'sat' => 'Sebṫ', +'january' => 'Yanayer', +'february' => 'Febrayer', +'march' => 'Mars', +'april' => 'Abril', +'may_long' => 'May', +'june' => 'Yonyo', +'july' => 'Yolyoz', +'august' => 'Ġoċṫ', +'september' => 'Ċoṫanbir', +'october' => 'Okṫober', +'november' => 'Nowanbir', +'december' => 'Dojanbir', +'january-gen' => 'Yanayer', +'february-gen' => 'Febrayer', +'march-gen' => 'Mars', +'april-gen' => 'Abril', +'may-gen' => 'May', +'june-gen' => 'Yonyo', +'july-gen' => 'Yolyoz', +'august-gen' => 'Ġoċṫ', +'september-gen' => 'Ċoṫambir', +'october-gen' => 'Okṫober', +'november-gen' => 'Nowanbir', +'december-gen' => 'Dojanbir', +'jan' => 'Yan', +'feb' => 'Feb', +'mar' => 'Mar', +'apr' => 'Abr', +'may' => 'May', +'jun' => 'Yon', +'jul' => 'Yol', +'aug' => 'Ġoċ', +'sep' => 'Ċoṫ', +'oct' => 'Okṫ', +'nov' => 'Now', +'dec' => 'Doj', + +# Categories related messages +'pagecategories' => '{{PLURAL:$1|Katégori|Katégoryaṫ}}', +'category_header' => 'ṣ-ṣefḫaṫ fe l-katégori "$1"', +'subcategories' => 'L-katégoriyaṫ ṫ-ṫeḫṫaniya', +'category-media-header' => 'L-fiċyé mulṫimédya li kaynin fe l-katégori "$1"', +'category-empty' => '" Had l-katégori ma fiha ḫṫa ċi ṣefḫa ola fiċyé mulṫimédya. "', +'hidden-categories' => '{{PLURAL:$1|Katégori mĥebya|Katégoryaṫ mĥebyin}}', +'hidden-category-category' => 'Katégoryaṫ mĥebyin', +'category-subcat-count' => 'Had l-katégori fiha {{PLURAL:$2|l-katégori l-ferĝiya|$2 katégoryaṫ ferĝiyin, menhom {{PLURAL:$1|hadi|$1}}}} li l-ṫeḫṫ.', +'category-subcat-count-limited' => 'Had l-katégori fiha {{PLURAL:$1|l-katégori l-ferĝiya|$1 katégoryaṫ ferĝiyin}} l-ṫeḫṫ.', +'category-article-count' => "Had l-katégori fiha {{PLURAL:$2|had 'ṣ-ṣefḫa|$2 ṣefḫaṫ, menhom {{PLURAL:$1|hadi|$1}} li l-ṫeḫṫ}}.", +'category-article-count-limited' => "{{PLURAL:$1|Had 'ṣ-ṣefḫa kayna|Had $1 dyal 'ṣ-ṣefḫaṫ kaynin}} fe had l-katégori.", +'category-file-count' => 'Had l-katégori fiha {{PLURAL:$2|had l-fiċyé|$2 fiċyé, menhom {{PLURAL:$1|hada|$1}} li l-ṫeḫṫ}}.', +'category-file-count-limited' => '{{PLURAL:$1|Had l-fiċyé kayen|Had $1 dyal l-fiċyé kaynin}} fe had l-katégori.', +'listingcontinuesabbrev' => 'L-Kmala', +'index-category' => 'sfahi mfhrssa', +'noindex-category' => 'shat mamfhtsach', + +'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD', +'mainpagetext' => "'''MediaWiki ṫ'instala be najaḫ.'''", +'mainpagedocfooter' => 'Ila bġiṫiw meĝlomaṫ ĥrin baċ ṫesṫeĝmlo had l-lojisyél siro ċofo [http://meta.wikimedia.org/wiki/Aide:Contenu Gid dyal l-mosṫeĥdim] + +== L-bdaya mĝa MediaWiki == +* [http://www.mediawiki.org/wiki/Manual:Configuration_settings Lista dyal l-paramétraṫ dyal l-konfigurasyon] +* [http://www.mediawiki.org/wiki/Manual:FAQ/fr FAQ fe MediaWiki] +* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista dyal l-modakaraṫ ĝla versyonaṫ jdad dyal MediaWiki]', + +'about' => 'ala', +'article' => 'sfht mohtawa', +'newwindow' => '(kayṫḫell fe ċerjem weḫdaĥor)', +'cancel' => 'Bettel', +'moredotdotdot' => 'Kṫer...', +'mypage' => "'Ṣ-Ṣefḫa dyali", +'mytalk' => 'Ṣefḫa dyal n-niqaċ', +'anontalk' => "hdr maa had l'ip", +'navigation' => 'Navigasyon', +'and' => ' o', + +# Cologne Blue skin +'qbfind' => 'Lqa', +'qbbrowse' => 'Qeleb', +'qbedit' => 'Ĝedel', +'qbpageoptions' => "Had 'ṣ-ṣefḫa", +'qbpageinfo' => 'L-Meḍmon', +'qbmyoptions' => "'Ṣ-Ṣefḫaṫ dyawli", +'qbspecialpages' => 'Ṣefḫaṫ ĥaṣṣin', +'faq' => 'asaila kaytaawdo bzaf', +'faqpage' => 'Project:asaila kaytaawdo', + +# Vector skin +'vector-action-addsection' => 'Zid topic', +'vector-action-delete' => 'Suprimi', +'vector-action-move' => 'Neqel', +'vector-action-protect' => 'Ḫami', +'vector-action-undelete' => 'rja lhadf', +'vector-action-unprotect' => 'Ḫiyed l-ḫimaya', +'vector-view-create' => 'Ĥṫareĝ', +'vector-view-edit' => 'Ĝedel', +'vector-view-history' => 'Ṫariĥ l-fiċyé', +'vector-view-view' => 'Qra', +'vector-view-viewsource' => 'Ċof l-masdar', +'actions' => 'afaal', +'namespaces' => 'Maḫel s-smiyyaṫ :', +'variants' => 'lhja:', + +'errorpagetitle' => "Ĥata'", +'returnto' => 'Rjeĝ le $1', +'tagline' => 'Men', +'help' => 'Mosaĝada', +'search' => 'Qelleb', +'searchbutton' => 'Qelleb', +'go' => 'Sir', +'searcharticle' => 'Sir', +'history' => 'Ṫariĥ ṣ-ṣefḫa', +'history_short' => 'Historik', +'updatedmarker' => 'tam thditha ala akhir ziyara liya', +'info_short' => 'maalomat', +'printableversion' => 'Vérsyon imkenliha ṫṫetbeĝ', +'permalink' => 'Lyan dayem', +'print' => 'Tbeĝ', +'edit' => 'Ṣayeb', +'create' => 'Ĥṫareĝ', +'editthispage' => 'Ĝeddel had ṣ-ṣefḫa', +'create-this-page' => "Ĥṫareĝ had 'ṣ-ṣefḫa", +'delete' => 'Mḫi', +'deletethispage' => "Suprimi had 'ṣ-ṣefḫa", +'undelete_short' => 'strjaa {{PLURAL:$1|wahd taadil|$1 taadil}}', +'protect' => 'Ḫami', +'protect_change' => 'Beddel', +'protectthispage' => "Ḫmi had 's-sefḫa", +'unprotect' => 'Ḫiyed l-ḫimaya', +'unprotectthispage' => 'Ḫiyd lḫimaya ĝla had sfha', +'newpage' => 'Ṣefḫa jdida', +'talkpage' => "Ṫnaqeċ fe had 'ṣ-ṣefḫa", +'talkpagelinktext' => 'Ṫnaqeċ', +'specialpage' => 'Ṣefḫa ĥaṣa', +'personaltools' => 'Adawaṫ ċeĥṣiya', +'postcomment' => 'Seksyon jdida', +'articlepage' => 'Ċof l-li fe ṣ-ṣefḫa', +'talk' => 'Modakara', +'views' => 'Afiċaj', +'toolbox' => "Ṣendoq l-'adawaṫ", +'userpage' => 'Ċof ṣ-ṣefḫa de l-mosṫeĥdim', +'projectpage' => 'Ċof ṣ-ṣefḫa de lmchroa', +'imagepage' => 'ċof ṣ-ṣefḫa dyal l-fiċyé', +'mediawikipage' => 'Ċof ṣ-ṣefḫa de risala', +'templatepage' => 'Ċof ṣ-ṣefḫa de l-modele', +'viewhelppage' => 'Ċof ṣ-ṣefḫa de l-mosaaada', +'categorypage' => 'Ċof l-katégori dyal ṣ-ṣefḫa', +'viewtalkpage' => 'Ċof tadakor', +'otherlanguages' => 'Be loġaṫ ĥrin', +'redirectedfrom' => '(Ṫḫowwlaṫ men $1)', +'redirectpagesub' => 'Ṣefḫa dyal ṫ-ṫeḫwil', +'lastmodifiedat' => 'L-merra l-leĥĥra li ṫsaybaṫ fiha had ṣ-ṣefḫa kaneṫ fe nhar $1, mĝa $2.', +'viewcount' => 'had sfha tchaft {{PLURAL:$1|wa7d lmrra|$1 mrra}}.', +'protectedpage' => 'Ṣefḫa mhmiya', +'jumpto' => 'Sir le:', +'jumptonavigation' => 'Navigasyon', +'jumptosearch' => 'Qelleb', +'view-pool-error' => 'smh lina serveurat ayana +bzzaf dlmostakhdimin bghaw iwslo lhad sfha +aafak hawl mn ba3d wahd chwiya + +$1', +'pool-timeout' => 'Daz l-weqṫ faċ konṫi kaṫṫsenna z-zeqron', +'pool-queuefull' => 'Ṣeff l-ĥedma ĝamṛa', +'pool-errorunknown' => 'khata mjhol', + +# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). +'aboutsite' => 'Kolċi ĝla {{SITENAME}}', +'aboutpage' => 'Project:Meĝlomaṫ', +'copyright' => 'L-moḫṫawa mojod fe $1', +'copyrightpage' => '{{ns:project}}:Copyrights', +'currentevents' => 'laahdath ljariya', +'currentevents-url' => 'Project:ahdat jariya', +'disclaimers' => 'Inḍaraṫ', +'disclaimerpage' => 'Project:Inḍaraṫ ĝammin', +'edithelp' => 'Mosaĝada', +'edithelppage' => 'Help:Kifaċ tṣayeb ċi ṣ-ṣefḫa', +'helppage' => 'Help:Meḍmon', +'mainpage' => 'Ṣ-Ṣefḫa l-owla', +'mainpage-description' => 'Ṣ-Ṣefḫa l-owla', +'policy-url' => 'Project:siyassa', +'portal' => 'bwabt lmojtamaaa', +'portal-url' => 'Project:bwabt lmojtamaaa', +'privacy' => 'Siyasa ĥoṣoṣiya', +'privacypage' => 'Project:Siyasa ĥoṣoṣiya', + +'badaccess' => 'Ġalat fe s-smaḫ', +'badaccess-group0' => 'mamsmohch lik tdkhl had ttbiq li bghiti', +'badaccess-groups' => 'had laction lli tlbtih msmoh ghir lmostkhdimin li kaynin f {{PLURAL:$2|group|wahd mn had les group}}: $1.', + +'versionrequired' => 'khassak version $1 dial mediawiki', +'versionrequiredtext' => 'noskha $1 dyal mediawiki mtloba bach tstaaml had sfha +chof [[Special:Version|sfht lversion]]', + +'ok' => 'Waĥĥa', +'pagetitle' => '$1 - {{SITENAME}}', +'pagetitle-view-mainpage' => '{{SITENAME}}', +'retrievedfrom' => 'Mrejjĝa men "$1"', +'youhavenewmessages' => 'Ĝendek $1 ($2).', +'newmessageslink' => 'méṣajaṫ jdad', +'newmessagesdifflink' => 'ṫ-ṫeġyir l-leĥĥer', +'youhavenewmessagesmulti' => 'Jawek méṣajaṫ jdad fe $1', +'editsection' => 'Ṣayeb', +'editsection-brackets' => '[$1]', +'editold' => 'ṣayeb', +'viewsourceold' => 'Ċof l-masdar', +'editlink' => 'ṣayeb', +'viewsourcelink' => 'Ċof l-ĝin', +'editsectionhint' => 'Ṣayeb s-séksyon : $1', +'toc' => 'L-Meḍmon', +'showtoc' => 'Werri', +'hidetoc' => 'Ḫebbi', +'thisisdeleted' => 'nĊof onstarjaa $1?', +'viewdeleted' => 'nchof $1?', +'restorelink' => '{{PLURAL:$1|wahd taadil tmsh|$1 taadilat tmshat}}', +'feedlinks' => 'tlqim:', +'feed-invalid' => 'nawaa ichtirak tlqim khata', +'feed-unavailable' => 'tlqimat makaynach', +'site-rss-feed' => 'L-flu RSS dyal $1', +'site-atom-feed' => 'Flu Atom dyal $1', +'page-rss-feed' => 'L-Flu RSS dyal $1', +'page-atom-feed' => 'L-Flu Atom dyal "$1"', +'feed-atom' => 'Atom', +'feed-rss' => 'RSS', +'red-link-title' => '$1 (ṣefḫa ma kaynaċ)', + +# Short words for each namespace, by default used in the namespace tab in monobook +'nstab-main' => 'Ṣefḫa', +'nstab-user' => 'Ṣ-Ṣefḫa dyal l-mosṫeĥdim', +'nstab-media' => 'sfha dyal media', +'nstab-special' => 'Ṣefḫa ĥaṣṣa', +'nstab-project' => 'Ṣefḫa dyal meċroĝ', +'nstab-image' => 'Fiċyé', +'nstab-mediawiki' => 'risala', +'nstab-template' => 'Modél', +'nstab-help' => 'sfhat lmosaaada', +'nstab-category' => 'Katégori', + +# Main script and global functions +'nosuchaction' => 'makaynch fiaal bhal hada', +'nosuchactiontext' => 'lfial li tlbti mashihch +imkn ghltti flktba dyal ladresse +hadchi imkn kadalik ichir lchi khataaa f {{SITENAME}}', +'nosuchspecialpage' => 'makaynach sfha bhad smiya', +'nospecialpagetext' => 'tlbti sfha khassa makaynach +lista dyal safahat lkhassa ghatlgaha f [[Special:SpecialPages|{{int:specialpages}}]]', + +# General errors +'error' => "Ĥata'", +'databaseerror' => 'khataaa f qaaaidat lbayanat', +'dberrortext' => 'khata fsight amr qaaaidat lbayanat +hadchi iqdr ikon raja lchi khataa f lbrnamaj +akhir amr dyal qaaidat lbayanat kan +
    $1
    +dakhl had dalla "$2". +qaaidat lbayant rddat bhad lkhataa "$3: $4".', +'dberrortextcl' => 'wqĝ waḫd lmoċkil f siġt istiĝlam qaĝidat lbayanat + +aĥir talab istiĝlam qaĝidat lbayanat kan + +"$1" + +li hwa mn daĥl ddala "$2". + +qaĝidat lbayanat rjĝat lĥata\' "$3: $4"', +'laggedslavemode' => "'''attansyo''' sfḫa iqdr mafihach aĥir tḫditaṫ", +'readonly' => 'qaĝidat lbayanat msdoda', +'enterlockreason' => 'dĥl sabab lli ĥllak tsdha, okadalik lwaqt li momkin thll bqdha', +'missing-article' => 'Ma ṫṫelqaċ n-neṣ dyal ċi ṣefḫa l-li kanṫ ĥaṣṣha ṫṫelqa, smiyṫha "$1" $2. + +Ĝomoman had ċ-ċi kay-iwqeĝ faċ kaṫ-ṫbeĝ ċi lyan le waḫed d-diff l-li daz ĝlih l-weqṫ ola le l-historik dyal ċi ṣefḫa memḫiya. + +Ila ma kanṫċ, imken ikon ċi bog fe l-program. +Ĝafak ĝlem [[Special:ListUsers/sysop|l-adminisṫrator]] bla ma ṫnsa ma ṫĝtih l-ĝonwan dyal l-lyan.', +'missingarticle-rev' => '(n-nemra dyal l-vérsyon : $1)', +'missingarticle-diff' => '(lfarq: $1, $2)', +'internalerror' => 'khataaa dakhili', +'internalerror_info' => 'khataaa dakhili : $1', +'fileappenderrorread' => 'manqdroch nqraw "$1" atna\' lidafa.', +'fileappenderror' => 'maymknch ncopie had lfichier "$1" l hada "$2".', +'filecopyerror' => 'maymknch ncopie had lfichier "$1" l hada "$2".', +'filerenameerror' => 'maymknch nsmiw had lfichier "$1" l hada "$2".', +'filedeleteerror' => 'maymknch had lfichier "$1" itmsh .', +'directorycreateerror' => 'maymknch had lmojllad itnchaa "$1".', +'filenotfound' => 'maymknch nlgaw had lfichier"$1".', +'unexpected' => 'qima mamtwqaach: "$1"="$2".', +'formerror' => "khata':listimara matqdrch tnfd", +'badarticleerror' => 'mamyknch tdir had lfiil ala had sfha', +'badtitle' => 'aanwan mamzyanch', +'badtitletext' => 'L-Ĝonwan li tlebṫi ġalet, ĥawi, ola waqila hada ĝonwan fe bezzaf de l-loġaṫ ola fe bezzaf de l-maċariĝ. Imken ikon fih ċi ḫrof li ma imken lekċ ṫesṫeĝmelhom fe l-ĝanawin.', +'viewsource' => 'Ċof l-ĝin', +'viewsourcefor' => 'l $1', +'protectedpagetext' => 'had sfha mhmiya bach mataadlch baqi', +'viewsourcetext' => 'imkn lik tchof otcopie lmasdar dyak had sfha', +'ns-specialprotected' => 'sfahi lkhassa maymknch taadlha', + +# Virus scanner +'virus-scanfailed' => 's-skan fċel (kod $1)', +'virus-unknownscanner' => 'antivirus mjhol :', + +# Login and logout pages +'logouttext' => "''' nta daba kharj.''' + +ila bghiti tqdr tstamr tstaml {{SITENAME}} kamjhol , olla ila bghiti [[Special:UserLogin|tdkhl aawtani]] bnafs smiya ola bsmiya khra. + +tqdr tchof baad sfahi bhal ila msjl hta tfrgh lcache dyalk", +'welcomecreation' => '== mrhba bik, $1! == +lcont dyalk raha mojoda +matnsach tbddl[[Special:Preferences|{{SITENAME}} tfdilat dyal]].', +'yourname' => 'Smiyṫ l-mosṫeĥdim:', +'yourpassword' => 'Saroṫ:', +'yourpasswordagain' => 'aaawd ktb lmot de passe dyalk', +'remembermypassword' => 'Ĝqel ĝla smiyṫ l-ḫsab dyali fe had l-ordinaṫør (ġir limoddaṫ {{PLURAL:$1|yom waḫed|$1 iyyam}})', +'yourdomainname' => 'domain dyalk', +'login' => 'Dĥel', +'nav-login-createaccount' => 'Ṫkonékta / Ĥṫareĝ ċi konṫ', +'userlogin' => 'Ṫkonnékta / Ṣayeb ċi ḫsab', +'userloginnocreate' => 'Ṫkonékta', +'logout' => 'Ṫdékonékta', +'userlogout' => 'Ĥrej', +'notloggedin' => 'nta mamkoniktich', +'nologin' => 'maandkch cont ? $1', +'nologinlink' => 'Ḫell ċi ḫsab', +'createaccount' => 'Ḫell ċi ḫsab', +'gotaccount' => 'aandk deja cont ? $1', +'gotaccountlink' => 'Ṫkonékta', +'createaccountmail' => "b l'email", +'createaccountreason' => 'S-Sbab:', +'loginerror' => 'khataa f dokhol', +'createaccounterror' => "kayn chi mchkil f incha' lcont : $1", +'noname' => 'Ma kṫebṫiċ ċi smiyṫ l-mosṫeĥdim mqadda.', +'loginsuccesstitle' => 'dkhlti mzyan', +'loginsuccess' => 'Dĥelṫi mezyan fe {{SITENAME}} be smiyṫ "$1".', +'nouserspecified' => 'khassk tdkhl ism lmostakhdim.', +'login-userblocked' => 'Had l-mosṫeĥdim meḫbos. Konnéksyon memnoĝa.', +'wrongpassword' => 'S-Saroṫ ĝendek ġalet. +Ĝafak ĝawed keṫbo.', +'wrongpasswordempty' => 'Ma kṫebṫiċ s-saroṫ. +Ĝafak ĝawed ketbo.', +'password-name-match' => 'lmot de pass khassha tkon mkhtalfa ala ism lmostakhdim dyalk', +'mailmypassword' => 'Ṣifet li saroṫ jdid', +'passwordremindertitle' => 'Saroṫ jdid {{SITENAME}} ġir bidman.', +'noemail' => 'L-Mosṫeĥdim "$1" mazal me deĥĥel ḫṫa ċi imayl.', +'noemailcreate' => 'Ĥaṣ l-imayl dyalek ykon ṣaleḫ.', +'passwordsent' => 'Siftna lek saroṫ jdid fe l-imayl dyal "$1". Ĝafak ĝawed dĥel le ḫsabek faċ ywṣel lek.', +'mailerror' => "khata' atna' irsal lbarid: $1", +'emailconfirmlink' => "konfirmasyon dyal l'email", +'accountcreated' => 'lcompt tkriyat', +'loginlanguagelabel' => 'Loġa: $1', + +# Password reset dialog +'resetpass' => 'tbdl lmot de passe', +'resetpass_text' => '', +'oldpassword' => 'lmot de passe qdima :', +'newpassword' => 'lmot de passe jdida :', +'retypenew' => 'aaawd ktb lmot de passe jdida :', +'resetpass_submit' => 'rigler lmot de pass odkhl', +'resetpass-submit-loggedin' => 'tbdl lmot de passe', +'resetpass-submit-cancel' => 'Bettel', +'resetpass-temp-password' => 'mot de passe moaqata', + +# Edit page toolbar +'bold_sample' => 'Kṫaba ġliḍa', +'bold_tip' => 'Kṫaba ġliḍa', +'italic_sample' => 'Kṫaba mayla', +'italic_tip' => 'Kṫaba mayla', +'link_sample' => 'Ĝonwan l-lyan', +'link_tip' => 'Lyan daĥili', +'extlink_sample' => 'http://www.example.com Ĝonwan l-lyan', +'extlink_tip' => 'Lyan ĥariji (ĝqel ĝla http:// préfiks)', +'headline_sample' => 'Neṣ de l-ĝonwan.', +'headline_tip' => 'Ĝonwan mosṫawa 2', +'math_sample' => 'Kṫeb ĝalaqa de l-mat hnaya', +'math_tip' => 'Ĝalaqa de l-mat (LaTeX)', +'nowiki_sample' => 'N-Neṣ li ma mformatéċ keṫbo hna', +'nowiki_tip' => 'Ĝti n-neĥĥal le l-formataj', +'image_sample' => 'Example.jpg', +'image_tip' => "Fiċyé m'inséré", +'media_sample' => 'Example.ogg', +'media_tip' => 'Lyan dyal ċi fiċyé médya', +'sig_tip' => 'Ṫ-Ṫowqiĝ dyalek be s-saĝa o ṫ-ṫariĥ', +'hr_tip' => 'Ĥett horizontal (ma ṫkeṫṫerċ menno)', + +# Edit pages +'summary' => 'Moleĥĥaṣ:', +'subject' => 'Mowḍoĝ/Ĝonwan', +'minoredit' => 'Hada ṫeĝdil sġir', +'watchthis' => 'Ṫebbeĝ had ṣ-ṣefḫa', +'savearticle' => 'Ċejjel ṣ-ṣefḫa', +'preview' => 'L-Prévizualizasyon', +'showpreview' => 'Werri l-prévizualizasyon', +'showlivepreview' => 'aard mobachir', +'showdiff' => 'Werri ṫ-ṫeġyiraṫ', +'anoneditwarning' => "'''Ĝendak:''' Ma mkonéktéċ. +Ġayṫċejjel l-ĝonwan IP dyalek fe ṫariĥ had ṣ-ṣefḫa.", +'missingcommenttext' => 'afak dkhl taaliq ltaht', +'summary-preview' => 'Prévizualizasyon dyal l-moleĥĥaṣ:', +'blockedtitle' => 'had lmostakhdim tbloka', +'blockednoreason' => 'ta sabab mamaatich', +'whitelistedittitle' => 'khassk tdkhl bach thrr', +'whitelistedittext' => 'khassk $1 bach taadl sfahi', +'nosuchsectiontitle' => 'maymknch nlgaw lqissm', +'loginreqtitle' => 'khassk tsjl dokhol', +'loginreqlink' => 'Ṫkonékta', +'accmailtitle' => 'lmot de passe tsaft.', +'newarticle' => '(jdid)', +'newarticletext' => "Ṫbeĝṫi waḫed l-lyan li kayddi le waḫed ṣ-ṣefḫa li ṫṫemḫaṫ. +Baċ ṫsayeb had ṣ-ṣefḫa, bda ṫekṫeb fe ṣ-ṣendoq li l-ṫeḫṫ (ċof ila bġiṫi [[{{MediaWiki:Helppage}}|ṣ-ṣefḫa de l-mosaĝada]] le l-mazid de l-meĝlomaṫ). +Ila wṣelṫi hnaya ĝla ġefla, brek ĝla l-boton '''rjeĝ''' dyal n-navigaṫør internet dyalek.", +'noarticletext' => 'Ma kayen fe had s-saĝa ḫṫa neṣ fe had ṣ-ṣefḫa. +Imken lek [[Special:Search/{{PAGENAME}}|ṫqelleb ĝla ṣefḫa be had l-ĝonwan]] fe ṣ-ṣefḫaṫ l-ĥrin, +[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ṫqelleb fe l-ĝamaliyaṫ l-mlaqyin] +ola [{{fullurl:{{FULLPAGENAME}}|action=edit}} ṫsayeb ṣ-ṣefḫa].', +'noarticletext-nopermission' => 'Ma kayen fe had s-saĝa ḫṫa neṣ fe had ṣ-ṣefḫa. +Imken lek [[Special:Search/{{PAGENAME}}|ṫqelleb ĝla ṣefḫa be had l-ĝonwan]] fe ṣ-ṣefḫaṫ l-ĥrin, +[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ṫqelleb fe l-ĝamaliyaṫ l-mlaqyin] +ola [{{fullurl:{{FULLPAGENAME}}|action=edit}} ṫsayeb ṣ-ṣefḫa].', +'userpage-userdoesnotexist-view' => 'L-Ḫsab dyal l-mosṫeĥdim "$1" ma mċejjelċ.', +'updated' => '(mohdata)', +'note' => "'''molahada:'''", +'previewnote' => "'''Dir fe balek belli hadċi ġir prévizualizasyon.''' +Dakċi li beddelṫi mazal ma ṫċejjel !", +'editing' => 'Ṫ-Ṫeĝdil dyal $1', +'editingsection' => 'Ṣayeb $1 (séksyon)', +'editingcomment' => 'Ṣayeb $1 (séksyon jdida)', +'editconflict' => 'mdarba f thrir: $1', +'yourtext' => 'N-Neṣ dyalek', +'storedversion' => 'noskha msjla', +'yourdiff' => 'lforoq', +'copyrightwarning' => "L-Mosahamaṫ le {{SITENAME}} kollhom meĝṫabrin bḫal menċorin be ṫetbiq $2 (ċof $1 le mazid l-meĝlomaṫ). Ila ma bġiṫiċ belli n-nṣoṣ dyawlek ma iṫwezzĝoċ o ma iṫṣayboċ ki mma jab L-Lah, ĝafak ġir ma ṫḫetthomċ hnaya.
    +Ġadi ṫwaĝedna ayḍan belli nṫa li kṫebṫi hadċi kollo, o ma nqelṫihċ men ċi ĝin jayya men ḍ-ḍamn l-ĝomomi ola men meṣder mefṫoḫ weḫdaĥor. +'''MA ṪESṪEĜMELĊ L-ĤEDMA DYAL N-NAS LI FIHOM COPYRIGHT BLA MA ṪṪAĤOD L-'IDN MENHOM'''", +'templatesused' => 'Had ṣ-ṣefḫa {{PLURAL:$1|kaṫsṫeĝmel had l-modél|kaysṫeĝmel had l-modélaṫ}}:', +'templatesusedpreview' => '{{PLURAL:$1|Modél l-mesṫeĝmel|Modélaṫ l-mesṫeĝmlin}} fe had l-prévizualizasyon:', +'template-protected' => 'Ḫimaya', +'template-semiprotected' => '(ḫimaya ma kamlaċ)', +'hiddencategories' => '{{PLURAL:$1|L-Katégori l-mĥebbya li kaṫmlek|L-Katégoriyaṫ l-mĥebbyin li kaymelko}} had ṣ-ṣefḫa :', +'edittools' => '', +'permissionserrors' => 'Ġalat fe s-smaḫ', +'permissionserrorstext-withaction' => "Ma ĝendekċ l-ḫaqq baċ $2, ĝlawed had {{PLURAL:$1|s-sabab|l-'asbiba}}", +'log-fulllog' => 'chod sijjil lkamil', +'edit-conflict' => 'mdarba f thrir', + +# Parser/template warnings +'parser-template-loop-warning' => 'tamm kachf halaqat qalab : [[$1]]', + +# Account creation failure +'cantcreateaccounttitle' => 'lcont maymknch tnchaa', + +# History pages +'viewpagelogs' => 'Ċof l-ĝamaliyaṫ dyal had ṣ-ṣefḫa', +'currentrev' => 'Ċof l-versyon l-leĥĥra', +'currentrev-asof' => 'L-Vérsyon l-leĥĥra nhar $2 mĝa s-saĝa $3', +'revisionasof' => 'Morajaĝa $1', +'previousrevision' => 'Morajaĝa qdem', +'nextrevision' => 'L-Vérsyon li mbeĝd →', +'currentrevisionlink' => 'Ċof l-versyon l-leĥĥra', +'cur' => 'daba', +'next' => 'li jay', +'last' => 'qbel', +'page_first' => 'lowla', +'page_last' => 'lkhra', +'histlegend' => 'Meĝlomaṫ ṫefsiriya : ({{MediaWiki:Cur}}) = l-ferq mĝa l-vérsyon dyal daba, ({{MediaWiki:Last}}) = l-ferq mĝa l-vérsyon li qbel, m = ṫeĝdil ma mohimċ bezzaf', +'history-fieldset-title' => 'Qelleb fe ṫ-ṫariĥ', +'history-show-deleted' => 'lmahdofa faqat', +'histfirst' => 'L-Owel', +'histlast' => 'L-Leĥĥer', +'historyempty' => '(khawi)', + +# Revision feed +'history-feed-title' => 'tarikh lmrajaaa', +'history-feed-item-nocomment' => 'Men $1 ḫṫal $2', + +# Revision deletion +'rev-deleted-comment' => '(taaliq thiyd)', +'rev-deleted-user' => '(ism lmostkhdim thiyd)', +'rev-delundel' => 'Biyyen/Ĥebbi', +'rev-showdeleted' => 'Werri', +'revdelete-nologtype-title' => 'la nawa sijil tamma iaataoho', +'revdelete-nologid-title' => 'modkhala sijjil ghayr sahiha', +'revdelete-show-file-submit' => 'iyih', +'revdelete-hide-text' => 'khbbi nass lmorajaa', +'revdelete-hide-image' => 'khbi lmohtawa dyal lfichier', +'revdelete-hide-name' => 'khbi lfiil olhadaf', +'revdelete-hide-comment' => 'khhbi taaliq taadil', +'revdelete-hide-user' => 'khbbi ism lmostakhdim/ip', +'revdelete-radio-same' => '(matghiyrch)', +'revdelete-radio-set' => 'iyih', +'revdelete-radio-unset' => 'la', +'revdelete-log' => 'S-Sbab:', +'revdel-restore' => 'Beddel ċ-ċofa', +'revdel-restore-deleted' => 'morajaaa mahdoufa', +'revdel-restore-visible' => "morajaat mar'iya", +'pagehist' => 'Ṫariĥ ṣ-ṣefḫa', +'deletedhist' => 'tarikh lmhdof', +'revdelete-content' => 'L-Meḍmon', +'revdelete-summary' => 'molkhass taadil', +'revdelete-uname' => 'Smiyṫ l-mosṫeĥdim:', +'revdelete-hid' => 'khbbi $1', +'revdelete-unhid' => 'biyn $1', +'revdelete-otherreason' => 'Sabab weḫdaĥor/zayed:', +'revdelete-reasonotherlist' => 'Sabab weḫdaĥor', +'revdelete-edit-reasonlist' => 'aadl asbab lhadf', +'revdelete-offender' => 'moallif lmorajaa', + +# Suppression log +'suppressionlog' => 'sijil likhfaaa', + +# History merging +'mergehistory' => 'dmj tawarikh sfha', +'mergehistory-from' => 'sfha lmasdar :', +'mergehistory-into' => 'sfha lhadaf :', +'mergehistory-submit' => 'dmj lmorajaat', +'mergehistory-reason' => 'S-Sbab:', + +# Merge log +'mergelog' => 'sjl damj', +'revertmerge' => 'Ḫiyyed ṫ-ṫeĥlat.', + +# Diffs +'history-title' => 'Ṫ-Ṫariĥ dyal lé-vérsyon dyal "$1"', +'difference' => '(Ferq mabin lé-vérsyon)', +'lineno' => 'Ṣter $1:', +'compareselectedversions' => 'Qaren lé-versyon li meĝzolin', +'editundo' => 'Rjeĝ', + +# Search results +'searchresults' => "N-Naṫa'ij dyal l-beḫṫ", +'searchresults-title' => 'N-Naṫa\'ij dyal l-beḫṫ ĝla "$1"', +'searchresulttext' => 'Ila bġiṫi kṫer de l-meĝlomaṫ ĝla {{SITENAME}}, ċof [[{{MediaWiki:Helppage}}|{{int:help}}]].', +'searchsubtitle' => "Qelebṫiw ĝla « '''[[:$1]]''' » ([[Special:Prefixindex/$1|ṣ-ṣefḫaṫ kolhom li badyin be « $1 »]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|ṣ-ṣefḫaṫ kolhom li mlaqyin mĝa « $1 »]])", +'searchsubtitleinvalid' => "Qellebṫi ĝla '''$1'''", +'titlematches' => 'onwan sfha yotabiq', +'notitlematches' => 'Ḫṫa ċi neṣ ma mlaqi mĝa dak ċ-ċi l-li kaṫ-qelleb ĝlih', +'textmatches' => 'neṣ sfha kaytabq', +'notextmatches' => 'Ḫṫa ċi neṣ ma mlaqi mĝa dakċi li kaṫqelleb ĝlih', +'prevn' => 'L-Li qbel {{PLURAL:$1|$1}}', +'nextn' => 'L-Li mbeĝd {{PLURAL:$1|$1}}', +'viewprevnext' => 'Ċof ($1 {{int:pipe-separator}} $2) ($3).', +'searchmenu-legend' => 'khiyarat lbaht', +'searchhelp-url' => 'Help:Meḍmon', +'searchprofile-articles' => 'sfht mohtawa', +'searchprofile-project' => 'sfhai dyal lmossada ol mchroa', +'searchprofile-images' => 'media', +'searchprofile-everything' => 'kolchi', +'searchprofile-advanced' => 'motaqaddim', +'searchprofile-articles-tooltip' => 'qllb f $1', +'searchprofile-project-tooltip' => 'qllb f $1', +'searchprofile-images-tooltip' => 'qllb f tsawr', +'search-result-size' => '$1 ({{PLURAL:$2|kelma weḫda|$2 kelmaṫ}})', +'search-result-score' => 'lirtibat: $1%', +'search-redirect' => '(Ṫeḫwil $1)', +'search-section' => '(seksyon $1)', +'search-suggest' => 'Waċ konṫi baġi ṫqol : $1', +'search-interwiki-caption' => 'Maċariĝ ĥĥoṫ', +'search-interwiki-default' => 'N-Naṫija dyal $1:', +'search-interwiki-more' => '(z-zyada)', +'search-mwsuggest-enabled' => 'be qṫiraḫaṫ', +'search-mwsuggest-disabled' => 'bla qṫiraḫaṫ', +'search-relatedarticle' => 'mortabita', +'mwsuggest-disable' => 'attl liqtirahat dyal AJAX', +'searcheverything-enable' => 'Qelleb fe maḫel s-smiyyaṫ', +'searchrelated' => 'mortabita', +'searchall' => 'kolċi', +'nonefound' => "'''Molaḫada''': Ma kayen ġir weḫdin men l-blaṣaṫ dyal s-smiyyaṫ li kanqellbo ĝlihom otomaṫikiyan. +Jerreb be l-préfiks \"all:\" baċ ṫqelleb ĝla l-meḍmon kollo (o ḫṫa ṣ-ṣefḫaṫ dyal n-niqaċ, l-modélaṫ, etc.) ola ṣṫeĝmel l-blaṣa dyal s-smiyya li bġiṫi bḫal ċi préfiks.", +'powersearch' => 'Ṫeqlab ṣĝib', +'powersearch-legend' => 'Ṫeqlab ṣĝib', +'powersearch-ns' => 'Qelleb fe maḫel s-smiyyaṫ', +'powersearch-redir' => "Lisṫaṫ 'ṫ-ṫeḫwilaṫ", +'powersearch-field' => 'Qeleb ĝla', +'powersearch-togglelabel' => 'Ĥṫar', +'powersearch-toggleall' => 'Kolċi', +'powersearch-togglenone' => 'Walo', +'search-external' => 'Qeleb ĝla bera', +'searchdisabled' => '{{SITENAME}} ma ĥedamċ. +Imken lik ṫqeleb fe google. +Laḫed ana imken ikono l-indexaṫ dial {{SITENAME}} qdam o ma bqaoċ ṣalḫin.', + +# Quickbar +'qbsettings' => "L-lawḫa 's-sariĝa", +'qbsettings-none' => 'Ma kaynċ', +'qbsettings-fixedleft' => "Meḫbos fe 'ċ-ċmal", +'qbsettings-fixedright' => "Meḫbos fe 'l-limin", +'qbsettings-floatingleft' => "Ḫor fe 'ċ-ċmal", +'qbsettings-floatingright' => "Ḫor fe 'l-limen", + +# Preferences page +'preferences' => 'Li kaṫfeḍḍel', +'mypreferences' => 'Ḫajaṫ li kanfeḍḍel', +'prefs-edits' => 'adad taadilat :', +'prefsnologin' => 'nta mamkoniktich', +'changepassword' => 'tbdl lmot de passe', +'prefs-skin' => 'frssada', +'skin-preview' => 'L-Prévizualizasyon', +'prefs-math' => 'mat', +'datedefault' => 'la tafdil', +'prefs-datetime' => 'tarikh o ssaa', +'prefs-personal' => 'milf lmostakhdim', +'prefs-rc' => 'Ṫ-Ṫeĝdilaṫ l-leĥĥra', +'prefs-watchlist' => 'qaimat lmoraqaba', +'prefs-watchlist-days' => 'adad kiyam alaard f qaimat lmoraqaba:', +'prefs-watchlist-days-max' => 'Maximmum 7 yam', +'prefs-watchlist-edits-max' => 'maximmum:1000', +'prefs-watchlist-token' => 'miftah qaimat lmoraqaba', +'prefs-misc' => 'motafarriqat', +'prefs-resetpass' => 'tbdl lmot de passe', +'prefs-email' => "reglage dyal l'email", +'prefs-rendering' => "l'apparence", +'saveprefs' => 'sjl', +'resetprefs' => 'hiyd tgyirat li mamsjlach', +'restoreprefs' => 'rjaa kaml liadadat liftiradiya', +'prefs-editing' => 'thrir', +'prefs-edit-boxsize' => 'hajm nafidat thrir', +'rows' => 'sofof:', +'columns' => 'aaamida:', +'searchresultshead' => 'Qelleb', +'resultsperpage' => 'adad nataij f sfha', +'contextlines' => 'adad lastor f kol natija', +'contextchars' => 'adad lahrof f satr:', +'stub-threshold-disabled' => 'makhdamch', +'timezonelegend' => 'lmintaqa zamaniya :', +'localtime' => 'Lwaqt lmahali :', +'timezoneuseserverdefault' => 'stakhdm iftirad serveur', +'timezoneuseoffset' => 'khor (hdd lfarq)', +'timezoneoffset' => 'Lfarq¹:', +'servertime' => 'wqt serveur', +'guesstimezone' => 'dkhl twqit mn navigateur', +'timezoneregion-africa' => 'Ifriqya', +'timezoneregion-america' => 'Mirikan', +'timezoneregion-antarctica' => 'Antarkṫik', +'timezoneregion-arctic' => 'Arkṫik', +'timezoneregion-asia' => 'Asya', +'timezoneregion-atlantic' => 'L-Moḫit L-Atlaṣi', +'timezoneregion-australia' => 'Osṫralya', +'timezoneregion-europe' => 'Oropa', +'timezoneregion-indian' => 'L-Moḫit L-Hindi', +'timezoneregion-pacific' => 'L-Moḫit L-Pasifik', +'allowemail' => "mkn tlqa l'email mn mostakhdimin khrin", +'prefs-searchoptions' => 'khiyarat lbaht', +'prefs-namespaces' => 'Maḫel s-smiyyaṫ :', +'defaultns' => 'olla qlb f had dominat :', +'default' => 'iftiradi', +'prefs-files' => 'Fiċyé', +'prefs-custom-css' => 'personalisé CSS', +'prefs-custom-js' => 'personalisé JavaScript', +'prefs-emailconfirm-label' => "konfirmi l'email:", +'prefs-textboxsize' => 'hajm nafidat tahrir', +'youremail' => 'I-Méyl', +'username' => 'Smiyṫ l-mosṫeĥdim:', +'uid' => 'raqm lmostakhdim :', +'prefs-memberingroups' => 'odw f {{PLURAL:$1|mjmoaa|mjmoaat}}:', +'prefs-registration' => 'wqt tasjil:', +'yourrealname' => 'smiytk lhaqiqiya:', +'yourlanguage' => 'Loġa', +'yourvariant' => 'lhja:', +'yournick' => 'sinyator jdid:', +'yourgender' => 'ljisn :', +'gender-unknown' => 'mamhddch', +'gender-male' => 'Dikr', +'gender-female' => "Mo'enaṫ", +'email' => 'I-Méyl', +'prefs-help-email-required' => "l'email darori", +'prefs-info' => "L-Meĝlomaṫ l-'asasiya", +'prefs-signature' => 'Sinyaṫur', +'prefs-dateformat' => 'sighat lwaqt', +'prefs-timeoffset' => 'lmintaqa zamaniya', +'prefs-advancedediting' => 'khiyarat motaqaddima', +'prefs-advancedrc' => 'khiyarat motaqaddima', +'prefs-advancedrendering' => 'khiyarat motaqaddima', +'prefs-advancedsearchoptions' => 'khiyarat motaqaddima', +'prefs-advancedwatchlist' => 'khiyarat motaqaddima', +'prefs-displayrc' => 'khiyarat laard', +'prefs-displaysearchoptions' => 'khiyarat laard', +'prefs-displaywatchlist' => 'khiyarat laard', +'prefs-diffs' => 'foroqat', + +# User rights +'userrights' => 'idarat salahiyat lmostakhdim', +'userrights-lookup-user' => 'idarat mjmoat lmostkhdim', +'userrights-user-editname' => 'dkhl ism mostakhdim :', +'editusergroup' => 'addl mjmoat lmostakhdim', +'userrights-editusergroup' => 'tadil mjmoaat lmostakhdim', +'saveusergroups' => 'hifd mjmoat lmotakhdim', +'userrights-groupsmember' => 'odw fi :', +'userrights-groupsmember-auto' => 'odw dimni f :', +'userrights-reason' => 'S-Sbab:', +'userrights-changeable-col' => 'lmojmoat li imkn li tghiyrha', +'userrights-unchangeable-col' => 'lmjmoat li maymknch lik tghyrha', +'userrights-irreversible-marker' => '$1*', + +# Groups +'group' => 'majmoaa:', +'group-user' => 'Mosṫeĥdimon', +'group-autoconfirmed' => 'mostakhdimon maakadon automatikiyan', +'group-bot' => 'botat', +'group-sysop' => 'Wébmodirin', +'group-bureaucrat' => 'bitoqratiyon', +'group-suppress' => 'noddar', +'group-all' => '(kolchi)', + +'group-user-member' => 'Mosṫeĥdim', +'group-autoconfirmed-member' => "Mosṫeĥdim moakkad tilqa'iyan", +'group-bot-member' => 'bot', +'group-sysop-member' => 'Wébmodirin', +'group-bureaucrat-member' => 'biroqrat', +'group-suppress-member' => 'nadhir', + +'grouppage-user' => '{{ns:project}}:mostakhdimon', +'grouppage-autoconfirmed' => '{{ns:project}}:mostakhdimon mofaalon tilqaiyan', +'grouppage-bot' => '{{ns:project}}:Botat', +'grouppage-sysop' => '{{ns:project}}:Wébmodirin', +'grouppage-bureaucrat' => '{{ns:project}}:biroqratiyon', +'grouppage-suppress' => '{{ns:project}}:Ouversayt', + +# Rights +'right-read' => 'qra safha', +'right-edit' => 'taadil sfahi', +'right-createpage' => 'inchaa sfahi (li hiya machi sfahi dyal niqach)', +'right-createtalk' => 'inchaa sfahi dyal niqach', +'right-createaccount' => 'inchaa ism mostakhdim jadid', +'right-minoredit' => 'taalim ala koll taadilat katafifa', +'right-move' => 'Neqqel ṣ-ṣefḫa', +'right-move-subpages' => 'naql sfahi maa sfahiha lfariya', +'right-move-rootuserpages' => 'naql sfahi d lmostakhdimin lassassiya', +'right-movefile' => 'naql lfichiyat', +'right-upload' => 'Ṣifet ċi fiċyé', +'right-delete' => "Mḫi had 'ṣ-ṣefḫa", +'right-undelete' => 'rj3 sfha', +'right-suppressionlog' => 'chouf sijillat sirriya', +'right-unblockself' => 'ihiydo lblokage ala ryoshom', +'right-protect' => 'taghyir mostawayat lhimaya wtadil sfahi li mhmiyin', +'right-rollback' => 'srtjaa taadilat akhr mostkhdim adl sfha mayana', +'right-noratelimit' => "mamt'atrch b hodod lmoaddal", +'right-import' => 'importé sfahi mn wikiat khrin', +'right-importupload' => 'importi sfahi mn fichier marfoa', +'right-patrol' => 'allm ala taadilat lkhrin kamorajaa', +'right-autopatrol' => 'alm taadilat lmostakhdim morajaa tilqaiya', +'right-patrolmarks' => 'chof alamat lmorajaa f ahdat tghyirat', +'right-unwatchedpages' => 'chof sfahi li mamraqbinch', +'right-trackback' => 'dir trackback', +'right-mergehistory' => 'dmj tarikh sfahi', +'right-userrights' => 'taadil kol salahiyat lmostkhdimin', +'right-userrights-interwiki' => 'taadil salahiyat lmostkhdim lmostkhdimin f lwikiyat lkhrin', +'right-siteadmin' => 'sd o zl qaidat lbayant', +'right-reset-passwords' => 'awd rigli lmot de passe dyal lmostkhdimin lkhrin', +'right-override-export-depth' => 'tsdir sfahi obinha sfahi lmawsola hta lomq 5', +'right-sendemail' => 'sift email lmostkhdimin lkhrin', + +# User rights log +'rightslog' => 'Ĝamaliyaṫ ḫoqoq l-mosṫeĥdim', +'rightslogtext' => 'hada sijil btaghyirat f salahiyat lmostkhdimin', +'rightslogentry' => 'ghyr salahiyat $1 mn $2 l $3', +'rightsnone' => '(walo)', + +# Associated actions - in the sentence "You do not have permission to X" +'action-read' => "Ĥṫareĝ had 'ṣ-ṣefḫa", +'action-edit' => 'Ṣayeb had ṣ-ṣefḫa', +'action-createpage' => 'inchaa sfahi jdad', +'action-createtalk' => 'inchaa sfahi dyal niqach', +'action-createaccount' => 'inchaa had ism mostakhdim', +'action-minoredit' => 'allm had tghyir katafif', +'action-move' => 'Neqqel had ṣ-ṣefḫa', +'action-move-subpages' => 'nql had sfha osfahi lfaraiya dyalha', +'action-move-rootuserpages' => 'naql sfahi d lmostakhdimin lassassiya', +'action-movefile' => 'Neqqel had lfichier', +'action-upload' => 'Ṣifet ċi fiċyé', +'action-reupload' => 'ktb ala had lfichier li deja kayn', +'action-reupload-shared' => 'ktb ala had lfichier f depot mochtarak', +'action-upload_by_url' => 'rfa had lfichier mn URL', +'action-writeapi' => 'stakhdem lkitaba API', +'action-delete' => 'Mḫi had ṣ-ṣefḫa', +'action-deleterevision' => 'mhi had lmorajaa', +'action-deletedhistory' => 'choof tarikh sfahi lmhdoufa', +'action-browsearchive' => 'qelleb f sfahi lmhdoufa', +'action-undelete' => 'rjaa had ṣ-ṣefḫa', +'action-suppressrevision' => 'reviem o sjl had lmorajaa lmkhfiya', +'action-suppressionlog' => 'chof had sijil lkhass', +'action-block' => 'mnaa had lmostkhdim mn taadil', +'action-protect' => 'ghiyr mostawayat lhimaya dyal had sfha', +'action-import' => 'importi had sfha mn wiki akhr', +'action-importupload' => 'amporti had sfha mn fichier mrfoa', +'action-patrol' => 'alm ala taadilat lkhrin kamorajaa', +'action-autopatrol' => 'alm taadil dualk kamorajaa', +'action-unwatchedpages' => 'chof lista dyal sfahi li mamraqbach', +'action-trackback' => 'dir trackback', +'action-mergehistory' => 'dmj tarikh had sfha', +'action-userrights' => 'taadil kol salahiyat lmostkhdimin', +'action-userrights-interwiki' => 'taadil salahiyat lmostkhdimin f lwikiyat lkhrin', +'action-siteadmin' => 'sd o7l qaidat lbayant', + +# Recent changes +'nchanges' => '{{PLURAL:$1|ṫeġyira weḫda|$1 dyal ṫ-ṫeġyiraṫ}}', +'recentchanges' => 'Ṫ-Ṫeĝdilaṫ l-leĥĥra', +'recentchanges-legend' => 'Opsyon dyal ṫ-ṫeġyiraṫ l-leĥĥra', +'recentchangestext' => 'Ṫebbeĝ ṫ-ṫeĝdilaṫ l-leĥĥrin dyal had l-wiki fe waḫed l-flu.', +'recentchanges-feed-description' => 'Ṫebbeĝ ṫ-ṫeĝdilaṫ l-leĥĥrin dyal had l-wiki fe waḫed l-flu.', +'recentchanges-label-newpage' => "anch' had tadil sfha jdida", +'recentchanges-label-minor' => 'Hada ṫeĝdil sġir', +'recentchanges-label-bot' => 'had taadil darou bot', +'recentchanges-label-unpatrolled' => 'had taadil matrajach', +'rcnote' => 'Hnaya ġaṫelqaw {{PLURAL:$1|ṫ-ṫeġyira l-leĥĥra li ṫdareṫ|l-$1 dyal ṫ-ṫeġyiraṫ l-leĥĥrin li ṫdaro}} tol {{PLURAL:$2|l-yom l-leĥĥer|l-$2 iyam l-leĥĥra}} ḫtal nhar $4 mĝa s-saĝa $5.', +'rcnotefrom' => "hna taghirat mn '''$2''' (tal '''$1''' maaroda).", +'rclistfrom' => 'Werri ṫeġyiraṫ jdad badyen men $1', +'rcshowhideminor' => '$1 Ṫeĝdilaṫ ma mohimminċ bezzaf', +'rcshowhidebots' => '$1 R-Robowaṫ', +'rcshowhideliu' => '$1 l-mosṫeĥdimin l-mċejjlin', +'rcshowhideanons' => '$1 mosṫeĥdimin mĥebbyin', +'rcshowhidepatr' => '$1 taadilat lmorajaa', +'rcshowhidemine' => '$1 ṫ-ṫeĝdilaṫ dyawli', +'rclinks' => 'Werri l-$1 dyal ṫ-ṫeġyiraṫ l-leĥĥrin li ṫdaro fe had l-$2 l-iyam l-leĥĥrin
    $3.', +'diff' => 'ferq', +'hist' => 'Ṫariĥ', +'hide' => 'Ĥebbi', +'show' => 'Werri', +'minoreditletter' => 'ṣ', +'newpageletter' => 'J', +'boteditletter' => 'b', +'sectionlink' => '→', +'number_of_watching_users_pageview' => '[$1 katchof {{PLURAL:$1|mostkhdim|mostkhdimin}}]', +'rc_categories' => 'limiti tsnifat (frqha b "|")', +'rc_categories_any' => 'ay wahd', +'rc-change-size' => '$1', +'newsectionsummary' => '/* $1 */ qism jdid', +'rc-enhanced-expand' => 'Werri ṫ-ṫafaṣil (kayḫṫaj JavaScript)', +'rc-enhanced-hide' => 'Ĥebbi ṫ-ṫafaṣil', + +# Recent changes linked +'recentchangeslinked' => 'L-mṫidad dyal ṣ-ṣefḫaṫ l-li mlaqyin', +'recentchangeslinked-feed' => 'L-mṫidad dyal ṣ-ṣefḫaṫ l-li mlaqyin', +'recentchangeslinked-toolbox' => 'L-mṫidad dyal ṣ-ṣefḫaṫ l-li mlaqyin', +'recentchangeslinked-title' => 'Ṫ-Ṫeġyiraṫ li mlaqyin mĝa "$1"', +'recentchangeslinked-backlink' => '← $1', +'recentchangeslinked-noresult' => 'ta tghyir f sfahi mrtabta f lmodda li drtiha', +'recentchangeslinked-summary' => "Hadi lista dial 'ṫ-ṫeġyiraṫ li ṫdaro mo'aĥarane le 'ṣ-ṣefḫaṫ li mlaqyin mĝa 'ṣ-ṣefḫa l-meĝniya (ola le 'aĝda' dial ċi ṣefa mĝayana). 'Ṣ-Ṣefḫaṫ li [[Special:Watchlist|mṫebeĝ]] mekṫobine be ḫrof ġlaḍ.", +'recentchangeslinked-page' => 'Smiyṫ ṣ-ṣefḫa', +'recentchangeslinked-to' => 'Ċof ṫ-ṫeġyiraṫ dyal ṣ-ṣefḫaṫ li fihom ċi lyan kayddik le ṣ-ṣefḫa li bġiṫi fe blaṣt ma ṫdir l-ĝeks', + +# Upload +'upload' => 'Ṣifet ċi fiċyé', +'uploadbtn' => 'Ṣifet ċi fiċyé', +'reuploaddesc' => "ilgha' rojoa orjaa l upload form", +'upload-tryagain' => 'fist lmodifikasyon', +'uploadnologin' => 'nta mamkoniktich', +'uploadnologintext' => 'khassk [[Special:UserLogin|tsjl]] bach tsift fichier.', +'uploadlog' => 'Øplowdaṫ', +'uploadlogpage' => 'Øplowdaṫ', +'filename' => 'smiyt lfichier', +'filedesc' => 'Moleĥĥaṣ:', +'fileuploadsummary' => 'Summary:', +'filereuploadsummary' => 'Ṫ-Ṫeġyiraṫ de l-fichier', +'filestatus' => 'halat hoqoq naskh:', +'filesource' => 'masdar :', +'uploadedfiles' => 'Ṣifet chi fiċyé', +'ignorewarnings' => 'tjahl thdirat', +'file-too-large' => 'lfichier kbir bzzaf', +'filename-tooshort' => 'smiyt lfichier qssira bzaf', +'filetype-banned' => 'had nawa lmilf mamnoa', +'verification-error' => 'had lfichier fih chi defout', +'hookaborted' => 'taadil li bghiti dirou ojhida mn tamdid lhook', +'illegal-filename' => 'had smiyt lmillaf mamnoaa', +'overwrite' => 'maymknch tktb fog fichier deja kayn', +'unknown-error' => "khata' mjhol wqaa", +'tmp-create-error' => 'maymknch nkriyiw fichier temporaire.', +'tmp-write-error' => "khata' f kitabat lmilaf lmo'aqqat", +'uploadwarning' => 'tahdir rafaa', +'uploadwarning-text' => 'afak bdl description dyal lmilaf ltaht ohawl awtani', +'savefile' => 'sjjl had lfichier', +'uploadedimage' => 'øplowda "[[$1]]"', +'overwroteimage' => 'sift noskha jdida dyal "[[$1]]"', +'uploaddisabled' => 'upload maatl', +'copyuploaddisabled' => 'sift b URL makhdamch', +'uploadfromurl-queued' => 'sift dyamlk tzad l servic', +'uploaddisabledtext' => 'sift dyal lfichier makhdamch', +'upload-source' => 'lmilffat lmasdariya', +'sourcefilename' => 'ism milf lmasdar :', +'sourceurl' => 'URL dyal lmasdar:', +'destfilename' => 'lmif lmostadhdaf:', +'upload-maxfilesize' => 'lhajm laqssa : $1', +'upload-description' => 'wasi lfichier', +'upload-options' => 'khiyarat rafa', +'watchthisupload' => 'Watch this file', +'filename-prefix-blacklist' => ' #
    +# sigha bhal hakka:
    +#   * aych haja mn  "#" tal akhir nass rah taaliq
    +#   * Every non-blank line is a prefix for typical file names assigned automatically by digital cameras
    +CIMG # Casio
    +DSC_ # Nikon
    +DSCF # Fuji
    +DSCN # Nikon
    +DUW # some mobile phones
    +IMG # generic
    +JD # Jenoptik
    +MGP # Pentax
    +PICT # misc.
    + #
    ', +'upload-failure-subj' => 'mochila f sift dyal lfichier', +'upload-warning-subj' => 'tahdir rafaa', + +'upload-proto-error' => 'protocol machi hwa hadak', +'upload-file-error' => 'khataaa dakhili', +'upload-unknown-size' => 'hakm mamaarofch', +'upload-http-error' => "lgina wahd khata' HTTP : $1", + +# img_auth script messages +'img-auth-accessdenied' => 'lwosol trfd', +'img-auth-streaming' => 'ard "$1".', + +# HTTP errors +'http-invalid-url' => 'URL makhdamch : $1', +'http-read-error' => "khata' qira'at HTTP.", +'http-timed-out' => 'salat moddat mohlat talab dyal HTTp.', +'http-curl-error' => "khata' f jalb lmassar: $1", +'http-host-unreachable' => 'manqdroch nwslo l had lmassar.', + +# Some likely curl errors. More could be added from +'upload-curl-error6' => 'manqdroch nwslo l had lmassar.', +'upload-curl-error28' => 'salat moddat rafa', + +'license' => 'tarkhiss :', +'license-header' => 'tarkhiss', +'nolicense' => 'ta wahd mamhddch', +'license-nopreview' => '(lpreview makaynch)', +'upload_source_url' => '(massar shih,imkn twssl lih)', +'upload_source_file' => '(fichier f lpc dyalk)', + +# Special:ListFiles +'imgfile' => 'Fiċyé', +'listfiles' => 'lista dyal lfichiyat', +'listfiles_date' => 'tarikh', +'listfiles_name' => 'smiya', +'listfiles_user' => 'Mosṫeĥdim', +'listfiles_size' => 'lhajm', +'listfiles_description' => 'wasf', +'listfiles_count' => 'naskh', + +# File description page +'file-anchor-link' => 'Fiċyé', +'filehist' => 'Ṫariĥ l-fiċyé', +'filehist-help' => 'Brek ĝla ṫ-ṫariĥ o s-saĝa baċ ṫċof l-fiċyé bḫal li kan fe hadik l-owqiṫa.', +'filehist-deleteall' => 'Suprimi kolchi', +'filehist-deleteone' => 'Suprimi', +'filehist-revert' => 'Rejjeĝ', +'filehist-current' => 'dyal daba', +'filehist-datetime' => 'Nhar/Saĝa', +'filehist-thumb' => 'Ṫeṣwira mṣeġġra', +'filehist-thumbtext' => 'Ṫ-Ṫeṣġir dyal l-vérsyon dyal nhar $2 mĝa s-saĝa $3', +'filehist-nothumb' => 'la tasghir', +'filehist-user' => 'Mosṫeĥdim', +'filehist-dimensions' => 'T-Tol o l-ĝerḍ', +'filehist-filesize' => 'hajm lfichier', +'filehist-comment' => 'Ĝelleq', +'filehist-missing' => 'fichier makaynch', +'imagelinks' => 'Lyanaṫ l-fiċyé', +'linkstoimage' => '{{PLURAL:$1|Had ṣ-ṣefḫa kaṫsṫeĝmel|Had l-$1 de ṣ-ṣefḫaṫ kaysṫeĝmlo}}:', +'sharedupload' => 'Had l-fiċyé jay men $1 o maċariĝ ĥrin imken lhom isṫeĝmloh.', +'uploadnewversion-linktext' => 'Øplowdi vérsyon jdida dyal had l-fiċyé', +'shared-repo-from' => 'mn $1', +'shared-repo' => 'depot mochtarak', + +# File reversion +'filerevert' => 'rjjea $1', +'filerevert-backlink' => '← $1', +'filerevert-legend' => 'rjjea lfichier', +'filerevert-comment' => 'S-Sbab:', +'filerevert-submit' => 'Rejjeĝ', + +# File deletion +'filedelete' => 'suprimi $1', +'filedelete-backlink' => '← $1', +'filedelete-legend' => 'quprimi kolchi', +'filedelete-comment' => 'S-Sbab:', +'filedelete-submit' => 'Suprimi', +'filedelete-otherreason' => 'Sabab weḫdaĥor/zayed:', +'filedelete-reason-otherlist' => 'Sabab weḫdaĥor', + +# MIME search +'mimetype' => 'nawa lmilf:', +'download' => 'telecharji', + +# Unwatched pages +'unwatchedpages' => 'sfahi mamraqbach', + +# List redirects +'listredirects' => "Lisṫaṫ 'ṫ-ṫeḫwilaṫ", + +# Unused templates +'unusedtemplates' => 'qwalb mamstkhmdach', +'unusedtemplateswlh' => 'wslat khrin', + +# Random page +'randompage' => 'sfahi achwaiya', + +# Statistics +'statistics' => 'Staṫisṫik', +'statistics-header-pages' => "ihsa'at sfahi", +'statistics-header-edits' => "ihsa'at taadilat", +'statistics-header-views' => "ihsa'at lmochahada", +'statistics-header-users' => "ihsa'at lmstkhdimin", +'statistics-header-hooks' => "ihsa'at khra", +'statistics-articles' => 'sfht mohtawa', +'statistics-pages' => 'Ṣefḫa', +'statistics-files' => 'Ṣifet ci fiċyé', +'statistics-edits-average' => 'otawassit taadilat lkol sfha', +'statistics-views-total' => 'chof total', +'statistics-views-peredit' => 'lmochahadat lkol taadil', +'statistics-users-active' => 'mostakhdimon nachtin', +'statistics-mostpopular' => 'aktar sfahi mochahada', + +'disambiguations' => 'sfahi dyal tawdih', +'disambiguationspage' => 'Template:tawdih', + +'double-redirect-fixer' => 'mosslih tahwil', + +'brokenredirects' => 'tahwilat makhddamach', +'brokenredirects-edit' => 'Ĝedel', +'brokenredirects-delete' => 'Suprimi', + +'withoutinterwiki-legend' => 'prifix', +'withoutinterwiki-submit' => 'Werri', + +# Miscellaneous special pages +'nbytes' => '$1 {{PLURAL:$1|okté|okté}}', +'nmembers' => "$1 {{PLURAL:$1|Ĝoḍw|Aĝḍa'}}", +'lonelypages' => 'sfahi itima', +'uncategorizedpages' => 'sfahi mamsnfinch', +'uncategorizedcategories' => 'tsnifat mamsnfinch', +'uncategorizedimages' => 'fichiyat mamsnfinch', +'uncategorizedtemplates' => 'qwalb mamsnfinch', +'unusedcategories' => 'tsnifat mabqatch mstaamla', +'unusedimages' => 'milfat mamstkhdmach', +'popularpages' => 'sfahi mchhora', +'wantedcategories' => 'tsnifat mtloba', +'wantedpages' => 'sfahi mtloba', +'wantedfiles' => 'milfat mtloba', +'wantedtemplates' => 'qwalb mtloba', +'mostlinked' => 'akta sfahi waslan', +'mostlinkedcategories' => 'aktar tsnifat irtibatan', +'mostlinkedtemplates' => 'aktar lqwalb waslan', +'mostcategories' => 'aktar sfahi tsnifan', +'mostimages' => 'aktar lmilfat irtibatan', +'mostrevisions' => 'aktar sfahi taadilan', +'prefixindex' => 'Ṣ-Ṣefḫaṫ kolhom be l-prefiks', +'shortpages' => 'sfahi qssar', +'longpages' => 'sfahi twila', +'deadendpages' => 'sfahi andha nihaya msdoda', +'protectedpages' => 'Ṣfaḫi mhmiya', +'protectedtitles' => 'Ĝanawin meḫmiya', +'listusers' => 'lista dyal lmostkhdimin', +'listusers-editsonly' => 'Werri ġir l-mosṫeĥdimin li fayeṫ sahmo.', +'listusers-creationsort' => 'Jmeĝ ĝla ḫsab ṫariĥ l-ĥṫiraĝ', +'usereditcount' => '$1 ṫeĝdil{{PLURAL:$1||aṫ}}', +'usercreated' => "tnch' f $1 saaa $2", +'newpages' => 'Ṣefḫaṫ jdad', +'newpages-username' => 'Smiyṫ l-mosṫeĥdim:', +'ancientpages' => 'aqdam sfahi', +'move' => 'Neqqel', +'movethispage' => 'Neqqel had ṣ-ṣefḫa', +'notargettitle' => 'makanch hadaf', +'notargettext' => 'mahdditch sfha lhadaf ola lmostkhdim bach tdir had lkhassiya', +'nopagetitle' => 'makaynach sfha hadaf bhal hadi', +'nopagetext' => 'sfha lhadaf li hdditiha makaynach', +'pager-newer-n' => '{{PLURAL:$1|l-leĥĥra|$1 l-leĥĥrin}}', +'pager-older-n' => '{{PLURAL:$1|l-qdima gaĝ|l-qdam gaĝ $1}}', +'suppress' => 'Oversight', + +# Book sources +'booksources' => 'Ĝyon l-kṫab', +'booksources-search-legend' => 'Qelleb ĝla l-kṫoba', +'booksources-isbn' => 'ISBN:', +'booksources-go' => 'Sir', + +# Special:Log +'specialloguserlabel' => 'Mosṫeĥdim:', +'speciallogtitlelabel' => "l'adresse:", +'log' => 'Ĝamaliyaṫ', +'all-logs-page' => 'kol sijillat laama', + +# Special:AllPages +'allpages' => 'Ṣ-Ṣefḫaṫ kamlin', +'alphaindexline' => 'Men $1 ḫṫal $2', +'nextpage' => 'sfha jaya ($1)', +'prevpage' => 'Ṣ-Ṣefḫa li qbel ($1)', +'allpagesfrom' => 'Werri ṣ-ṣefḫaṫ li badyin men:', +'allpagesto' => 'Werri ṣ-ṣefḫaṫ ḫṫal:', +'allarticles' => 'Ṣ-Ṣefḫaṫ kolhom', +'allinnamespace' => 'kol sfahi (f nitaq $1)', +'allnotinnamespace' => 'kol sfahi (machi f nitaq $1)', +'allpagesprev' => 'li sbq', +'allpagesnext' => 'li jay', +'allpagessubmit' => 'Sir', +'allpagesprefix' => 'biyn sfahi katbda b:', + +# Special:Categories +'categories' => 'tsnifat', +'special-categories-sort-count' => 'rttb bladad', +'special-categories-sort-abc' => 'rttb blhorof', + +# Special:DeletedContributions +'sp-deletedcontributions-contribs' => 'L-mosahamaṫ', + +# Special:LinkSearch +'linksearch' => 'L-lyanaṫ l-ĥarijiyin', +'linksearch-pat' => 'namat lbaht:', +'linksearch-ns' => 'Maḫel s-smiyyaṫ :', +'linksearch-ok' => 'Qelleb', + +# Special:ListUsers +'listusers-submit' => 'Werri', +'listusers-noresult' => 'ta mostakhdim matlgach.', +'listusers-blocked' => '(mbloki)', + +# Special:ActiveUsers +'activeusers' => 'lista dyal lmostkhdimin nachtin', +'activeusers-hidebots' => 'khbbi lbotat', +'activeusers-hidesysops' => 'Khbbi lidariyin', +'activeusers-noresult' => 'ta mostakhdim matlgach.', + +# Special:Log/newusers +'newuserlogpage' => 'Ṫariĥ dyal l-ḫsabaṫ j-jdad', +'newuserlog-byemail' => "lmot de passe raha tsiftat f l'email", +'newuserlog-create-entry' => 'Ḫsab jdid', +'newuserlog-create2-entry' => 'ĥṫareĝ ḫsab jdid $1', +'newuserlog-autocreate-entry' => 'lcont tnchad automatikmen', + +# Special:ListGroupRights +'listgrouprights' => 'salahiyat mjmoat lmostkhdimin', +'listgrouprights-group' => 'majmoaa', +'listgrouprights-rights' => 'salahiyat', +'listgrouprights-members' => "Lisṫa dyal l-aĝḍa'", +'listgrouprights-addgroup' => "Zid aĝḍa' fe l-mejmoĝa{{PLURAL:$2||ṫ}} : $1", +'listgrouprights-addgroup-all' => 'zid gaa lmjmoat', +'listgrouprights-removegroup-all' => 'hiyd gaa lmjmoat', + +# E-mail user +'mailnologin' => 'Ma kayenċ l-ĝonwan dyal l-morasil', +'emailuser' => 'Ṣifet imayl le had l-mosṫeĥdim', +'emailpage' => 'sift email lhad lmostkhdim', +'defemailsubject' => 'Imayl dyal {{SITENAME}}', +'usermaildisabled' => 'L-Mosṫeḫdim ma mĥeddemċ l-imayl dyalo.', +'usermaildisabledtext' => 'Ma ymken lekċ ṫṣifet ċi imayl le l-mosṫeĥdimin l-ĥrin fe had l-wiki', +'noemailtitle' => 'Ma kayen ḫṫa imayl', +'noemailtext' => 'Had l-mosṫeĥdim ma ĝendoċ imayl mqadd.', +'nowikiemailtitle' => 'makaynch email msmoh bih', +'nowikiemailtext' => 'Had l-mosṫeĥdim ma bġa iṫweṣṣel be ḫṫa ċi imayl men ay mosṫeḫdim.', +'email-legend' => 'Sifet ċi imayl le ċi mosṫeĥdim aĥor dyal {{SITENAME}}', +'emailfrom' => 'mn:', +'emailto' => 'l:', +'emailsubject' => 'lmawdoa:', +'emailmessage' => 'risala:', +'emailsend' => 'irssal', +'emailccme' => 'sift noskha mn rissala dyali.', +'emailccsubject' => 'copie rissala dyalk l $1: $2', +'emailsent' => "l'email tsfit", +'emailsenttext' => 'L-Imayl dyalek ṫṣifet mezyan.', +'emailuserfooter' => 'Had l-imayl ṣifto « $1 » le « $2 » be waṣitaṫ « Ṣifet ċi imayl le l-mosṫeḫdim » fe {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Ĥella waḫed l-meṣaj sistém.', +'usermessage-editor' => 'Morasil s-sistém', + +# Watchlist +'watchlist' => 'L-Lista de s-suivi dyalṫi', +'mywatchlist' => 'L-Lista dyal s-suivi', +'watchlistfor2' => 'Le $1 $2', +'nowatchlist' => 'Ma kayna ḫṫa ċi ṣefḫa fe l-lista dyal s-suivi dyalṫek.', +'watchlistanontext' => 'Ĝafak $1 baċ ṫċof ola baċ ṫṣayeb ṣ-ṣefḫaṫ li fe l-lista dyal s-suivi.', +'watchnologin' => 'nta mamkoniktich', +'watchnologintext' => 'Ĥaṣṣek ṫkon [[Special:UserLogin|dĥelṫi le ḫsabek]] baċ ṫṣayeb l-lista dyal s-suivi.', +'addedwatch' => 'Ṫzadeṫ le l-lista dyal s-suivi', +'addedwatchtext' => "Ṣ-Ṣefḫa \"[[:\$1]]\" ṫzadeṫ le [[Special:Watchlist|l-lista dyal s-suivi dyalṫek]]. +Ṫ-Ṫeġyiraṫ j-jayyin dyal had ṣ-ṣefḫa o dyal ṣ-ṣefḫa de n-niqaċ l-mnasba ġayṫċejjlo fiha. +L-Kṫaba dyal had ṣ-ṣefḫa ġaṫban '''ġliḍa''' fe [[Special:RecentChanges|l-lista dyal ṫ-ṫeĝdilaṫ l-leĥĥrin]] baċ ṫeshal ĝlik l-qadiya.", +'removedwatch' => 'Mmḫiya men l-lista dyal s-suivi', +'removedwatchtext' => 'Ṫemḫaṫ ṣ-ṣefḫa "[[:$1]]" men [[Special:Watchlist|ṣ-ṣefḫa de s-suivi dyalṫek]].', +'watch' => 'Ḫḍi', +'watchthispage' => 'Ṫebbeĝ had ṣ-ṣefḫa', +'unwatch' => 'Ma tbqaċ tḫḍi.', +'unwatchthispage' => 'hiyd mn list dyal s-suivi dyali', +'notanarticle' => 'Hadi maċi ṣefḫaṫ meḍmon', +'watchlist-details' => '{{PLURAL:$1|ṣefḫa weḫda|$1 de ṣ-ṣefḫaṫ}} kaynin fe l-lista dyal s-suivi dyalṫek, bla ma nḫesbo ṣ-ṣefḫaṫ dyal n-niqaċ.', +'wlshowlast' => 'Werri l-$1 de s-swayeĝ o l-$2 iyam l-leĥĥrin, ola werri $3', +'watchlist-options' => 'Lé-Opsyon de l-lista dyal s-suivi', + +# Displayed when you click the "watch" button and it is in the process of watching +'watching' => 'Kayraqeb...', +'unwatching' => "Nihayaṫ 's-suivi...", + +'enotif_mailer' => '{{SITENAME}} nidam lbaridi', +'enotif_reset' => 'Qiyyed ṣ-ṣefḫaṫ bḫal la zerṫihom kamlin', +'enotif_impersonal_salutation' => 'Mosṫeḫdim {{SITENAME}}', +'changed' => 'Beddel', +'created' => "tnch'at", +'enotif_subject' => 'Ṣ-Ṣefḫa $PAGETITLE dyal {{SITENAME}} $CHANGEDORCREATEDha $PAGEEDITOR', +'enotif_lastvisited' => 'Sir ċof $1 baċ ṫċof ṫ-ṫeġyiraṫ kamlin men ziyarṫek l-leĥĥraniya.', +'enotif_lastdiff' => 'Ċof $1 baċ ṫċof had ṫ-ṫeġyiraṫ.', +'enotif_anon_editor' => 'mosṫeĥdim ma mċejjelċ $1', + +# Delete +'deletepage' => "Mḫi had 'ṣ-ṣefḫa", +'confirm' => 'konfirmi', +'excontent' => 'lmohtawa kan : "$1"', +'exblank' => 'sfha kant khawya', +'delete-confirm' => 'suprimi "$1"', +'delete-backlink' => '← $1', +'delete-legend' => 'Suprimi', +'confirmdeletetext' => 'Ĝendak rah ġadi ṫemḫi ċi ṣefḫa ola fiċyé, o ḫṫa lé-vérsyon li fe ṫ-ṫariĥ. +Ĝafak ekked belli hadċi howa li baġi ṫdir, belli nṫa fahem l-ahammiya dyalo, o belli kaṫdir hadċi be ṫ-ṫowfiq dyal [[{{MediaWiki:Policy-url}}|l-qawaĝid d-daĥiliya]].', +'actioncomplete' => 'Ṫsalaṫ l-ĝamaliya', +'actionfailed' => 'Ma ṣeḍqaṫċ', +'deletedtext' => '« $1 » ṫemḫa. +Ċof $2 ila bġiṫi ċi lista dyal kolċi li ṫemḫa aĥiran.', +'deletedarticle' => 'memḫi "[[$1]]"', +'suppressedarticle' => 'mḫa "[[$1]]"', +'dellogpage' => 'Ṫ-Ṫariĥ dyal ṣ-ṣefḫaṫ li ṫṫemḫaw', +'dellogpagetext' => 'Ha hiya l-lista dyal dakċi li ĝad ṫṫemḫa.', +'deletionlog' => 'Ṫ-Ṫariĥ dyal ṣ-ṣefḫaṫ li ṫṫemḫaw', +'reverted' => 'L-Vérsyon li men qbel rejĝaṫ.', +'deletecomment' => 'S-Sbab:', +'deleteotherreason' => 'Sabab weḫdaĥor/zayed:', +'deletereasonotherlist' => 'Sabab weḫdaĥor', +'delete-edit-reasonlist' => 'aadl asbab lhadf', + +# Rollback +'rollback' => 'tjjea taadilat', +'rollback_short' => 'Rjeĝ l-lor', +'rollbacklink' => 'Rjeĝ l-lor', +'rollbackfailed' => 'rjoaa mankhch', + +# Protect +'protectlogpage' => 'Ṫariĥ l-ḫimaya', +'protectedarticle' => 'ḫma "[[$1]]"', +'modifiedarticleprotection' => 'beddel l-mosṫawa de l-ḫimaya dyal « [[$1]] »', +'unprotectedarticle' => 'ḫma "[[$1]]"', +'protect-backlink' => '← $1', +'protectcomment' => 'S-Sbab:', +'protectexpiry' => 'Ġayṫqada fe:', +'protect_expiry_invalid' => 'Daz ĝlih l-oqeṫ.', +'protect_expiry_old' => 'L-oqeṫ dyal n-nihaya fe l-maḍi.', +'protect-text' => "Hnaya ṫeqḍer tċof o ṫbeddel l-mostawa de l-ḫimaya dyal ṣ-ṣefḫa '''$1'''.", +'protect-locked-access' => "Ḫsabek ma ĝendoċ l-ḫaqq baċ ibeddel l-mosṫawa de l-ḫimaya dyal ṣ-ṣefḫa. +Hnaya ġadi ṫelqa lé-ééglaj l-leĥĥrin dyal ṣ-ṣefḫa '''$1''':", +'protect-cascadeon' => 'Had ṣ-ṣefḫa raha meḫmiya ḫiṫ hiya daĥel {{PLURAL:$1|had ṣ-ṣefḫa, li ṫṫeḫmaṫ|had ṣ-ṣefḫaṫ, li ṫṫeḫmaw}} be l-opsyon "ḫimaya moḍmana" ĥeddama. +Imken lek ṫbeddel l-mosṫawa de l-ḫimaya dyal had ṣ-ṣefḫa bla ma i\'eṫṫer hadċi l-ḫimaya l-moḍmana.', +'protect-default' => 'Ĥelli l-mosṫeĥdimin kolhom', +'protect-fallback' => "Tleb l-'idn $1", +'protect-level-autoconfirmed' => 'Bloki l-mosṫeĥdimin j-jdad o li ma mċejjlinċ', +'protect-level-sysop' => 'L-modirin boḫdhom', +'protect-summary-cascade' => 'Moḍmana', +'protect-expiring' => 'Ġayṫqada nhar $2 mĝa s-saĝa $3', +'protect-expiry-indefinite' => 'mamhddch', +'protect-cascade' => 'Ḫami ĝla ṣ-ṣefḫaṫ li fe had ṣ-ṣefḫa (ḫimaya moḍmana)', +'protect-cantedit' => 'Ma imken lekċ ṫbeddel l-mosṫawa de l-ḫimaya dyal had ṣ-ṣefḫa ḫiṫ ma ĝendekċ l-ḫeqq baċ ṫbeddlo.', +'protect-othertime' => 'waqt akhr:', +'protect-othertime-op' => 'waqt akhr', +'protect-otherreason' => 'Sabab weḫdaĥor/zayed:', +'protect-otherreason-op' => 'Sabab weḫdaĥor', +'restriction-type' => "L-'idn:", +'restriction-level' => 'Mosṫawa ḍ-ḍwabet', +'minimum-size' => 'L-Qyas ṣ-ṣġir gaĝ', +'maximum-size' => 'L-Qyas l-kbir gaĝ', +'pagesize' => '(okté)', + +# Restrictions (nouns) +'restriction-edit' => 'Ṣayeb', +'restriction-move' => 'Neqqel', +'restriction-create' => 'Ĥṫareĝ', +'restriction-upload' => 'Øplowdi', + +# Restriction levels +'restriction-level-sysop' => 'ḫimaya kamla', +'restriction-level-autoconfirmed' => 'ḫimaya ma kamlaċ', +'restriction-level-all' => 'ay mosṫawa', + +# Undelete +'undelete' => 'Ċof ṣ-ṣefḫaṫ l-memḫiyyin', +'undeletepage' => 'Ċof o qad ṣ-ṣefḫaṫ l-memḫiyyin', +'undeletepagetitle' => "'''Had l-lista fiha morajaĝaṫ memḫiya men [[:$1|$1]]'''", +'undelete-nodiff' => 'lam yatim lotor ala moraja sabiqa.', +'undeletebtn' => 'strjaa', +'undeletelink' => 'Biyyen/Ĥebbi', +'undeleteviewlink' => 'chof', +'undeletereset' => 'aawd regli', +'undeleteinvert' => 'Qleb dakċi li ĝzelṫi', +'undeletecomment' => 'S-Sabab', +'undeletedarticle' => 'sṫerjeĝ "[[$1]]"', +'undeletedrevisions' => '{{PLURAL:$1|vérsyon weḫda rejĝaṫ ki kaneṫ|$1 de lé-vérsyon rejĝo ki kano}}', +'undelete-search-box' => 'Qelleb ĝla ċi ṣ-ṣefḫaṫ memḫiya', +'undelete-search-submit' => 'Qelleb', +'undelete-error-short' => 'Tṛa waḫed l-ġalat fe sṫirjaĝ l-fiċyé : $1', +'undelete-show-file-submit' => 'iyih', + +# Namespace form on various pages +'namespace' => 'Maḫel s-smiyyaṫ :', +'invert' => "Qleb 's-séléksyon", +'blanknamespace' => "(Re'si)", + +# Contributions +'contributions' => 'L-mosahamaṫ dyal l-mosṫeĥdim', +'contributions-title' => 'L-Mosahamaṫ dyal $1', +'mycontris' => 'L-mosahamaṫ dyawli', +'contribsub2' => 'Le $1 ($2)', +'uctop' => '(l-foq)', +'month' => 'Men ċher (o qdem)', +'year' => 'Men ĝam (o men qbel)', + +'sp-contributions-newbies' => 'Werri ġir l-mosahamaṫ dyal l-mosṫeĥdimin j-jdad', +'sp-contributions-newbies-sub' => 'Le ḫsabaṫ jdad', +'sp-contributions-newbies-title' => 'mosahamat lmostkhdim lilhassabat jdida', +'sp-contributions-blocklog' => 'Ṫariĥ l-blokajaṫ', +'sp-contributions-deleted' => 'mosahamaṫ memḫiya', +'sp-contributions-talk' => 'ṫnaqeċ', +'sp-contributions-search' => 'Qelleb ĝla ċi mosahamaṫ', +'sp-contributions-username' => 'Ĝonwan IP ola smiyṫ l-mosṫeĥdim', +'sp-contributions-submit' => 'Qelleb', + +# What links here +'whatlinkshere' => 'Ṣefḫaṫ mlaqyin', +'whatlinkshere-title' => 'Ṣ-Ṣefḫaṫ li mlaqyin mĝa "$1"', +'whatlinkshere-page' => 'Ṣefḫa', +'whatlinkshere-backlink' => '← $1', +'linkshere' => "Had ṣ-ṣefḫaṫ kayddiw le '''[[:$1]]''':", +'isredirect' => 'Ṫeḫwil ṣ-ṣefḫa', +'istemplate' => 'Daĥel', +'isimage' => 'lyan ṫ-ṫeṣwira', +'whatlinkshere-prev' => '{{PLURAL:$1|li qbel|$1 li qbel}}', +'whatlinkshere-next' => '{{PLURAL:$1|li mbeĝd|$1 li mbeĝd}}', +'whatlinkshere-links' => '← lyanaṫ', +'whatlinkshere-hideredirs' => '$1 ṫ-ṫeḫwilaṫ', +'whatlinkshere-hidetrans' => '$1 ṫ-ṫeḍminaṫ', +'whatlinkshere-hidelinks' => '$1 l-lyanaṫ', +'whatlinkshere-filters' => 'Filter', + +# Block/unblock +'blockip' => 'Bloké l-mosṫeĥdim', +'blockip-title' => 'Bloki l-mosṫeḫdim', +'blockip-legend' => 'Bloki l-mosṫeḫdim', +'ipaddress' => 'Ĝonwan IP:', +'ipadressorusername' => 'Ĝonwan IP ola smiyṫ l-mosṫeĥdim', +'ipbexpiry' => 'Ġayṫqada fe :', +'ipbreason' => 'S-Sabab', +'ipbreasonotherlist' => 'Sabab weḫdaĥor', +'ipbanononly' => 'Bloki ġir l-mosṫeḫdimin li ma mċejjlinċ', +'ipbcreateaccount' => 'Mneĝ ĥṫiraĝ ċi ḫsab', +'ipbemailban' => 'Ma ṫĥelliċ l-mosṫeĥdim yṣifet ċi imayl', +'ipbenableautoblock' => 'Bloki otomaṫikiyan l-ĝonwan IP l-leĥĥrani li sṫeĝmlo l-mosṫeḫdim o l-ĝanawin IP li qbel mennha li ymken lo yĝawed ysṫeĝmelhom.', +'ipbsubmit' => 'Bloki had l-mosṫeĥdim', +'ipbother' => 'weqṫ aĥor :', +'ipboptions' => '2 swayeĝ:2 hours,nhar:1 day,3 iyam:3 days,ṣémana:1 week,2 ṣémanaṫ:2 weeks,ċher:1 month,3 ċhor:3 months,6 ċhor:6 months,ĝam:1 year,ma kayṫsalaċ:infinite', +'ipbotheroption' => 'ḫwayej ĥrin', +'ipbotherreason' => 'Sabab weḫdaĥor/zayed:', +'ipbhidename' => 'Ĥebbi smiyṫ l-mosṫeĥdim men ṫ-ṫeġyiraṫ o men l-listaṫ', +'ipbwatchuser' => 'Ṫbeĝ ṣ-ṣefḫaṫ dyal l-mosṫeḫdim o de n-niqaċ dyal had l-mosṫeĥdim', +'ipballowusertalk' => 'Ĥelli had l-mosṫeĥdim yṣayeb ṣfeḫṫo dyal n-niqaċ faċ ykon mbloki', +'ipb-change-block' => "Ĝawed bloki had l-mosṫeĥdim be had l-'iĝdadaṫ", +'badipaddress' => 'Ĝonwan IP ġalet', +'blockipsuccesssub' => 'Blokaj najeḫ', +'ipb-edit-dropdown' => 'Beddel asbab l-blokaj', +'ipb-unblock-addr' => 'Débloki $1', +'ipb-unblock' => 'Débloki ċi ḫsab dyal l-mosṫeĥdim ola ĝonwan IP', +'ipb-blocklist' => 'Ċof lé-blokaj li fayeṫ kaynin', +'ipb-blocklist-contribs' => 'L-Mosahamaṫ dyal $1', +'unblockip' => 'Débloki ċi mosṫeĥdim ola ċi ĝonwan IP', +'ipusubmit' => 'Mḫi l-blokaj', +'unblocked' => '[[User:$1|$1]] ma bqaċ mbloki', +'unblocked-id' => 'L-Blokaj $1 ṫṫemḫa', +'ipblocklist' => 'Ĝanawin IP o smiyyaṫ l-mosṫeĥdim meḫbosin', +'ipblocklist-legend' => 'Qelleb ĝla ċi mosṫeĥdim memḫi', +'ipblocklist-username' => 'Smiyṫ l-mosṫeĥdim ola l-ĝonwan IP', +'ipblocklist-sh-userblocks' => '$1 lé-blokaj dyal l-ḫsabaṫ', +'ipblocklist-sh-tempblocks' => "$1 lé-blokaj l-mo'eqqaṫa", +'ipblocklist-sh-addressblocks' => '$1 lé-blokaj dyal l-ĝanawin IP boḫdhom', +'ipblocklist-submit' => 'Qelleb', +'ipblocklist-localblock' => 'Blokaj maḫalli', +'ipblocklist-otherblocks' => 'Blokaj {{PLURAL:$1|weḫdaĥor|weḫdaĥrin}}', +'blocklistline' => '$1 : $2 bloka $3 ; $4', +'infiniteblock' => 'ma kayṫsalaċ', +'expiringblock' => 'ġayṫqada nhar $1 mĝa $2', +'anononlyblock' => 'ġir l-mosṫeĥdim li ma mċejjelċ', +'noautoblockblock' => 'blokaj otomaṫiki mḫiyyed', +'createaccountblock' => 'memnoĝ ṫsayeb ċi ḫsab', +'emailblock' => 'imayl mbloki', +'blocklist-nousertalk' => 'ma ymken loċ yṣayeb ṣfeḫṫo dyal n-niqaċ', +'ipblocklist-empty' => 'L-Lista dyal l-ĝanawin IP li mblokyin raha daba ĥawya.', +'ipblocklist-no-results' => 'L-Ĝonwan IP ola l-mosṫeĥdim li tlebṫiw ma mblokiċ.', +'blocklink' => 'Bloki', +'unblocklink' => 'Ḫiyyed l-manĝ', +'change-blocklink' => 'beddel l-manĝ', +'contribslink' => 'Mosahamaṫ', +'blocklogpage' => 'Ṫariĥ l-blokajaṫ', +'blocklogentry' => 'bloka [[$1]] limoddaṫ $2 $3', +'unblocklogentry' => 'débloka $1', +'block-log-flags-anononly' => 'Ġir l-mosṫeĥdimin li ma mċejjlinċ', +'block-log-flags-nocreate' => 'mmnoĝ ṫsayeb ċi ḫsab', +'block-log-flags-noautoblock' => 'blokaj otomaṫiki dyal l-ĝanawin IP mḫiyyed', +'block-log-flags-noemail' => 'imayl mbloki', +'block-log-flags-nousertalk' => 'ma ymken loċ yṣayeb ṣfeḫṫo dyal n-niqaċ', +'block-log-flags-angry-autoblock' => 'blokaj otomaṫiki mḫessen ĥeddam', +'block-log-flags-hiddenname' => 'smiyṫ l-mosṫeĥdim mĥebbya', +'ipb_expiry_invalid' => 'L-weqṫ li bqa ġalet.', +'ipb_expiry_temp' => 'L-Blokaj dyal s-smiyyaṫ dyal l-mosṫeĥdimin l-mĥebbyin ĥaṣṣo ybqa dima.', +'ipb_already_blocked' => '"$1" rah fayeṫ mbloki', +'ipb-otherblocks-header' => 'Blokaj {{PLURAL:$1|weḫdaĥor|weḫdaĥrin}}', +'sorbs' => 'DNSBL', + +# Developer tools +'lockconfirm' => "Ah, kan'ekked belli bġiṫ neġleq l-bazdødoné", +'unlockconfirm' => 'Ah, beṣṣeḫ bġiṫ nḫell l-bazdødoné.', +'lockbtn' => 'Ġleq l-bazdødoné', +'unlockbtn' => 'Ḫell l-bazdødoné', +'locknoconfirm' => "Ma qiyyedṫiċ sendok ṫ-ṫe'kid.", +'lockdbsuccesssub' => 'Iqfal l-bazdødoné njeḫ', +'unlockdbsuccesssub' => 'Iqfal l-bazdødoné ṫṫemḫa', +'unlockdbsuccesstext' => 'L-Bazdødoné raha ṫṫḫellaṫ.', +'databasenotlocked' => 'L-Bazdødoné raha ma meġloqaċ.', + +# Move page +'move-page' => 'Neqqel $1', +'move-page-backlink' => '← $1', +'move-page-legend' => 'Neqqel ṣ-ṣefḫa', +'movepagetext' => "Ila sṫeĝmelṫi l-formulér li l-ṫeḫṫ, ċi ṣefḫa ġadi ṫĝawed ṫṫsemma o ġadi ṫneqqel ṫ-ṫariĥ kollo le s-smiya j-jdida. +L-Ĝonwan l-qdim ġadi iwelli ṣefḫa jdida li ġadi ṫḫowwlek le l-ĝonwan j-jdid. +Imken lek ṫjedded otomaṫikiyan ṫ-ṫeḫwilaṫ li kayddiw le l-ĝonwan l-'aṣli. +Ila ma bġiṫiċ, ṫ'ekked ma ṫeḫḍi kolla [[Special:DoubleRedirects|dobl-ṫeḫwila]] ola koll [[Special:BrokenRedirects|ṫ-ṫeḫwilaṫ l-mherrsin]]. +Rak mes'ol baċ ṫraqeb ila l-lyanaṫ baqyin kayddiw le l-maḫel fin ĥaṣṣhom iddiwek. + +Laḫed belli ṣ-ṣefḫa '''ma ġadiċ''' ṫṫneqqel ila fayeṫ kayna ċi ṣefḫa be had l-ĝonwan, illa ila kaneṫ ĥawya ola ċi ṫeḫwil ma ĝendo ḫṫa ṫariĥ dyal ṫeĝdilaṫ fayeṫ. +Meĝniyṫha imken lek ṫĝawed ṫrejjeĝ l-ĝonwan l-'aṣli ila konṫi ġletṫi, o ma imken lekċ ṫekṫeb ĝla ṣefḫa mojoda. + +'''Ĝendak!''' +Imken hadċi y'eddi ṫeġyiraṫ hammin ila kaneṫ ċi ṣefḫa kayqrawha n-nas bezzaf; +Ĝafak kon mṫ'ekked belli nṫa ĝaref ċno kaṫdir qbel ma ṫebda ay ḫaja.", +'movepagetalktext' => "Ila kaneṫ ċi ṣefḫa dyal n-niqaċ mĝaha, ġadi ṫĝawed ṫṫsemma otomaṫikiyan '''illa ila:''' +* neqqelṫi ṣ-ṣefḫa le maḫel de s-smiyaṫ weḫdaĥor, ola +* ṣefḫa dyal n-niqaċ ma ĥawyaċ msemmya bḫal bḫal, ola +* brekṫi ĝla l-ĝalama li men l-ṫeḫṫ.", +'movearticle' => 'Neqqel ṣ-ṣefḫa', +'movenologin' => 'Mdékonnékti', +'movenotallowed' => 'Ma ĝendekċ l-heqq ṫneqqel ṣ-ṣefḫaṫ.', +'movenotallowedfile' => 'Ma ĝendekċ l-heqq ṫneqqel lé-fiċyé.', +'cant-move-user-page' => "Ma ĝendekċ l-ḫeqq ṫneqqel ṣ-ṣefḫaṫ r-ra'isiyya.", +'newtitle' => 'Le ċi ĝonwan jdid', +'move-watch' => 'Ṫebbeĝ had ṣ-ṣefḫa', +'movepagebtn' => 'Neqqel ṣ-ṣefḫa', +'pagemovedsub' => 'Neqqelna ṣfeḫṫek be najaḫ', +'movepage-moved' => '\'\'\'Neqqelna "$1" fe "$2"\'\'\'', +'movepage-moved-redirect' => 'Ṫeḫwil men s-smiya l-qidima ṫeĥṫarĝaṫ.', +'articleexists' => 'Fayeṫ kayna ṣefḫa be had s-smiyya, ola s-smiyya li ĥṫariṫi ma ṣalḫaċ. +Ĝafak ĥṫar smiyya weḫdaḫra.', +'talkexists' => "'''Ṣ-Ṣefḫa ṫṫneqqlaṫ be najaḫ, walayenni ṣ-ṣefḫa de l-modakara ma ṫṫneqqlaṫċ ḫiṫ fayeṫ kayna ċi weḫda be had l-ĝonwan. +Ĝafak fuzyonéhom be yiddek.'''", +'movedto' => 'ṫsemmaṫ', +'movetalk' => 'Neqqel ṣ-ṣefḫa dyal n-niqaċ li mlaqya mĝah', +'move-subpages' => 'Neqqel ṣ-ṣefḫaṫ l-ferĝiyya (ḫṫal $1)', +'move-talk-subpages' => 'Neqqel ṣ-ṣefḫaṫ l-ferĝiya dyal ṣ-ṣefḫa de n-niqaċ (ḫṫal $1)', +'movepage-page-exists' => 'Ṣ-Ṣefḫa $1 fayeṫ kayna o ma ymken lhaċ ṫṫemḫa otomaṫikiyan.', +'movepage-page-moved' => 'Ṣ-Ṣefḫa $1 wellaṫ smiyyṫha $2', +'movepage-page-unmoved' => 'Ṣ-Ṣefḫa $1 ma qeḍraṫċ ṫwelli $2.', +'1movedto2' => 'neqqel [[$1]] ḫṫal [[$2]]', +'1movedto2_redir' => 'neqqel [[$1]] le [[$2]] foq ṫ-ṫeḫwila dyalṫha', +'move-redirect-suppressed' => 'Ṫ-Ṫeḫwil ṫṫemḫa', +'movelogpage' => 'Ṫariĥ n-naql', +'movelogpagetext' => 'Ha hiya l-lista dyal ṣ-ṣefḫaṫ kamlin li ṫneqqlo.', +'movesubpage' => '{{PLURAL:$1|Ṣefḫa ferĝiyya|Ṣefḫaṫ ferĝiyya}}', +'movenosubpage' => 'Had ṣ-ṣefḫa ma fiha ḫṫa ċi ṣefḫa ferĝiyya.', +'movereason' => 'S-Sbab:', +'revertmove' => 'Rejjeĝ', +'delete_and_move' => 'Mḫi o neqqel', +'delete_and_move_confirm' => 'Ah, mḫi ṣ-ṣefḫa', + +# Export +'export' => 'Éxporté ċi ṣefḫaṫ', +'export-submit' => 'khrj', +'export-addcattext' => 'zid sfahi mn tsnif :', +'export-addcat' => 'zid', +'export-addnstext' => 'zid sfahi mn had nitaq:', +'export-addns' => 'zid', +'export-download' => 'sjjl had lfichier', +'export-templates' => 'dimn lqwalb', +'export-pagelinks' => 'dimn sfahi lmawsla lomq:', + +# Namespace 8 related +'allmessages' => "rasa'il nidam", +'allmessagesname' => 'smiya', +'allmessages-filter-legend' => 'Filter', +'allmessages-filter-unmodified' => 'mamaadlch', +'allmessages-filter-all' => 'Kolċi', +'allmessages-filter-modified' => 'lmoaddal', +'allmessages-prefix' => 'filtri hassab lprefix', +'allmessages-language' => 'Loġa:', +'allmessages-filter-submit' => 'Sir', + +# Thumbnails +'thumbnail-more' => 'Kebber', +'filemissing' => 'fichier makaynch', + +# Special:Import +'import' => 'Éxporté ċi ṣefḫaṫ', +'import-interwiki-submit' => 'importé', +'import-upload-filename' => 'smiyt lfichier:', +'import-comment' => 'taĜelleq:', + +# Import log +'importlogpage' => "sijjil dyal l'import", +'import-logentry-interwiki' => 'importé blwiki $1', + +# Tooltip help for the actions +'tooltip-pt-userpage' => 'Ṣ-Ṣefḫa de l-mosṫeĥdim dyalṫek', +'tooltip-pt-mytalk' => 'Ṣfeḫṫek dyal n-niqaċ', +'tooltip-pt-preferences' => 'Li kaṫfeddel', +'tooltip-pt-watchlist' => 'L-Lista dyal ṣ-ṣefḫaṫ li kaṫṫebbĝo', +'tooltip-pt-mycontris' => 'L-Lista dyal mosahamaṫek', +'tooltip-pt-login' => 'Ḫsen lik ṫṫkonékta{{GENDER:||e|(y)}}, walakin maċi ḍarori.', +'tooltip-pt-logout' => 'Ṫdékonékta', +'tooltip-ca-talk' => 'Modakara ĝla l-li fe had ṣ-ṣefḫa', +'tooltip-ca-edit' => 'Imkenlik ṫṣayeb had ṣ-ṣefḫa. +Ĝafak sṫeĝmel l-boton dyal l-prévizualizasyon qbel ma ṫċejjel', +'tooltip-ca-addsection' => 'Bda séksyon jdida', +'tooltip-ca-viewsource' => 'Had ṣ-ṣefḫa mḫamya. +Imken lek ṫċof l-ĝin dyalha.', +'tooltip-ca-history' => 'L-vérsyonaṫ l-qdam dyal had ṣ-ṣefḫa', +'tooltip-ca-protect' => 'Ḫami ĝla had ṣ-ṣefḫa', +'tooltip-ca-delete' => 'Mḫi had ṣ-ṣefḫa', +'tooltip-ca-move' => 'Neqqel had ṣ-ṣefḫa', +'tooltip-ca-watch' => 'Zid had ṣ-ṣefḫa le l-lista dyal s-suivi', +'tooltip-ca-unwatch' => 'Ḫiyyed had ṣ-ṣefḫa men l-lista dyal s-suivi dyalṫek', +'tooltip-search' => 'Qelleb fe {{SITENAME}}', +'tooltip-search-go' => 'Sir le ċi sefḫa l-li ĝendha nefs s-smiya, ila kaneṫ', +'tooltip-search-fulltext' => 'Qelleb ĝla ṣ-ṣefḫaṫ li fihom had n-neṣ', +'tooltip-p-logo' => 'ṣefḫaṫ l-sṫiqbal', +'tooltip-n-mainpage' => 'Sir le ṣ-ṣefḫa de l-sṫiqbal', +'tooltip-n-mainpage-description' => 'Sir le ṣefḫaṫ l-sṫiqbal', +'tooltip-n-portal' => 'Ĝel l-meċroĝ ; ċno imken lek ṫdir ; fin ṫelqa ḫajaṫ li ṫeḫṫajhom', +'tooltip-n-currentevents' => 'Ċof deġya aċ tari daba', +'tooltip-n-recentchanges' => 'Lisṫa dyal ṫ-ṫeġyiraṫ l-leĥrin fe l-wiki', +'tooltip-n-randompage' => 'Ċarji ċi ṣefḫa ĝe L-Lah', +'tooltip-n-help' => 'Mosaĝada', +'tooltip-t-whatlinkshere' => 'Lisṫa dyal ṣ-ṣefḫaṫ kamlin li mlaqyin mĝa hadi', +'tooltip-t-recentchangeslinked' => 'Lisṫa dyal ṫ-ṫeġyiraṫ l-leĥĥrin dyal ṣ-ṣefḫaṫ l-li mlaqyin mĝa hadi', +'tooltip-feed-rss' => 'L-Flu RSS dyal had ṣ-ṣefḫa', +'tooltip-feed-atom' => 'L-Flu Atom dyal had ṣ-ṣefḫa', +'tooltip-t-contributions' => 'Ċof l-lista dyal mosahamaṫ had l-mosṫeĝmil', +'tooltip-t-emailuser' => 'Ṣifet imayl le had l-mosṫeĥdim', +'tooltip-t-upload' => 'Ṣifet ci fiċyé', +'tooltip-t-specialpages' => 'Lisṫa dyal ṣ-sefḫaṫ l-ĥaṣin kollhom', +'tooltip-t-print' => 'Vérsyon dyal ṣ-ṣefḫa l-li imken lik ṫetbeĝ', +'tooltip-t-permalink' => 'Lyan dayem le had l-vérsyon dyal ṣ-ṣefḫa', +'tooltip-ca-nstab-main' => 'Ċof l-li fe ṣ-ṣefḫa', +'tooltip-ca-nstab-user' => 'Ċof ṣ-ṣefḫa de l-mosṫeĥdim', +'tooltip-ca-nstab-media' => 'tchof sfht lmedia', +'tooltip-ca-nstab-special' => 'Hadi ṣefḫa ĥaṣa, ma imkenlikċ ṫṣayebha', +'tooltip-ca-nstab-project' => 'Ċof ṣ-ṣefḫa dyal l-meċroĝ', +'tooltip-ca-nstab-image' => 'ċof ṣ-ṣefḫa dyal l-fiċyé', +'tooltip-ca-nstab-mediawiki' => "tcouf rasa'il nidam", +'tooltip-ca-nstab-template' => 'Ċof ṣ-ṣefḫa de l-meḍmon', +'tooltip-ca-nstab-help' => 'Ċof ṣ-ṣefḫa de l-mosaaada', +'tooltip-ca-nstab-category' => 'Ċof l-katégori dyal ṣ-ṣefḫa', +'tooltip-minoredit' => 'Ĝelmo bḫal ċi ṫeĝdil ma mohimċ', +'tooltip-save' => 'Ċejjel ṫ-ṫeġyiraṫ dyawlek', +'tooltip-preview' => 'Ċof ċno beddelti, ĝafak steĥdem hadi qbel ma ṫċejjel !', +'tooltip-diff' => 'Werri ċno li beddelṫi fe n-neṣ', +'tooltip-compareselectedversions' => 'Werri ṫ-ṫeġyiraṫ mabin lé-vérsyon l-meĝzolin dyal had ṣ-ṣefḫa', +'tooltip-watch' => 'Ḫḍi had s-sefḫa', +'tooltip-upload' => 'bda rafaa', +'tooltip-rollback' => '« Sṫerjeĝ » kaybettel be klik waḫed ṫeġyir(aṫ) dyal had ṣ-ṣefḫa be l-mosahim l-leĥĥer.', +'tooltip-undo' => '"Rejjeĝ ki \'ma kan" kaysṫerjeĝ li sayebṫi o kayḫell ċerjem weḫdaĥor ka prévizualizasyon. Kaṫĥellik ṫzid ċi sabab fe sendoq l-moleĥĥaṣaṫ.', +'tooltip-preferences-save' => 'sjjl taghyirat', +'tooltip-summary' => 'dkhl molkhass qssir', + +# Stylesheets +'common.css' => '/* CSS placed here will be applied to all skins */', + +# Attribution +'others' => 'khrin', +'creditspage' => 'ichadat sfha', + +# Spam protection +'spambot_username' => 'tandif spam mediawiki', + +# Info page +'numedits' => 'adad taadilat (sfha) : $1', +'numtalkedits' => 'adad taadilat (sfht niqach): $1', +'numwatchers' => 'adad lmmoraqibin: $1', + +# Math options +'mw_math_png' => 'dima biyn bhal PNG', + +# Math errors +'math_failure' => 'khata flmat', +'math_unknown_error' => 'khat mjhol', +'math_unknown_function' => 'wadifa mjhola', +'math_lexing_error' => 'khata fsigha', +'math_syntax_error' => 'khata fsiyagha', + +# Patrolling +'markaspatrolleddiff' => 'marki kamorajaaa', + +# Patrol log +'patrol-log-auto' => '(otomatik)', +'patrol-log-diff' => 'morajaa $1', +'log-show-hide-patrol' => '$1 sijjil lkhafr', + +# Browsing diffs +'previousdiff' => 'Ṫ-Ṫeĝdil li mbeĝd', +'nextdiff' => 'Ṫ-Ṫeĝdila li mbeĝd', + +# Media information +'widthheight' => '$1×$2', +'file-info-size' => '$1 × $2 piksel, ṫqel l-fiċyé: $3, ċkel MIME : $4', +'file-nohires' => 'Ma kayenċ ċi rézolusyon kber men hadi.', +'svg-long-desc' => 'Fiċyé SVG, rézolusyon $1 × $2 pikselaṫ, ḫajm : $3', +'show-big-image' => 'Rézolusyon kamla', +'show-big-image-thumb' => 'L-Ḫajm dyal had l-prévizualizasyon : $1 × $2 pikselaṫ', +'file-info-gif-looped' => 'mlfoof', +'file-info-png-looped' => 'mlfof', + +# Special:NewFiles +'newimages-legend' => 'Filter', +'newimages-label' => 'smiyt lfichier olla chwiya mnno:', +'showhidebots' => '($1 R-Robowaṫ)', +'noimages' => 'walo maytchaf.', +'ilsubmit' => 'Qelleb', +'bydate' => 'hassab tarikh', +'sp-newimages-showfrom' => 'biyn lmilfat mn $2, $1', + +# Video information, used by Language::formatTimePeriod() to format lengths in the above messages +'seconds-abbrev' => 's', +'minutes-abbrev' => 'm', +'hours-abbrev' => 'h', + +# Bad image list +'bad_image_list' => "L-forma howa ṫ-ṫali : + +L-lisṫaṫ dyal ṫ-ṫiĝdad (ṣ-ṣtor li badyin be *) homa l-li nĝṫabro. +L-lyan l-owwel dyal ċi ṣter ĥaṣṣo walabedda ikon dyal ċi ṫeṣwira ĥat'a. +L-lyanaṫ l-ĥrin l-li fe nefs ṣ-ṣter ka-nĝṫabrohom bḫal sṫiṫna'aṫ, maṫalan bḫal ċi ṣefḫaṫ l-li imken ṫban fihom ṫ-ṫeṣwira.", + +/* +Short names for language variants used for language conversion links. +To disable showing a particular link, set it to 'disable', e.g. +'variantname-zh-sg' => 'disable', +Variants for Chinese language +*/ +'variantname-zh-hans' => 'Kṫaba', +'variantname-zh-hant' => 'Kṫaba', +'variantname-zh-cn' => 'cn', +'variantname-zh-tw' => 'tw', +'variantname-zh-hk' => 'hk', +'variantname-zh-mo' => 'mo', +'variantname-zh-sg' => 'sg', +'variantname-zh-my' => 'my', +'variantname-zh' => 'zh', + +# Variants for Gan language +'variantname-gan-hans' => 'hans', +'variantname-gan' => 'gan', + +# Variants for Serbian language +'variantname-sr-ec' => 'sr-ec', +'variantname-sr-el' => 'sr-el', +'variantname-sr' => 'sr', + +# Variants for Kazakh language +'variantname-kk-kz' => 'kk-kz', +'variantname-kk-tr' => 'kk-tr', +'variantname-kk-cn' => 'kk-cn', +'variantname-kk-cyrl' => 'kk-cyrl', +'variantname-kk-latn' => 'kk-latn', +'variantname-kk-arab' => 'kk-arab', + +# Variants for Kurdish language +'variantname-ku' => 'ku', + +# Metadata +'metadata' => 'L-Métadoné', +'metadata-help' => "Had l-fiċyé fih l-mazid dyal l-meĝlomaṫ ; ikon zadhom s-scanér ola l-moṣewwira li ĥṫarĝohom. +Ila ṫbeddel l-fiċyé men ḫalṫo l-'aṣliya, kaynin ċi ṫafaṣil ma mnasbinċ kolliyan le l-fiċyé li mbeddel.", +'metadata-expand' => 'Werri ṫ-ṫafaṣil', +'metadata-collapse' => 'Ĥebbi ṫ-ṫafaṣil', +'metadata-fields' => "L-'itaraṫ dyal lé-métadoné EXIF li mlistyin fe had ṣ-ṣefḫa ġaykono fe ṣ-ṣefḫa de l-woṣf dyal ṫ-ṫeṣwira menni ṫṫṣeġġer l-lowḫa dyal lé-métadoné. L'itaraṫ l-ĥrin ġaykono mĥebbyin be tariqa otomaṫikiyan. +* make +* model +* datetimeoriginal +* exposuretime +* fnumber +* isospeedratings +* focallength", + +# EXIF tags +'exif-imagewidth' => 'laard', +'exif-imagelength' => 'lirtifaa', +'exif-bitspersample' => 'bit lkol mokawwin', +'exif-compression' => 'nidam daght', +'exif-photometricinterpretation' => 'tarkib lpixel', +'exif-orientation' => 'tawjih', +'exif-samplesperpixel' => 'adad lmokawwinat', +'exif-planarconfiguration' => 'tartib lbayanat', +'exif-ycbcrsubsampling' => 'nisbat laayina dyal Y l C', +'exif-ycbcrpositioning' => 'lwada dyal Y o C', +'exif-xresolution' => 'ddiqa lofoqia', +'exif-yresolution' => 'diqa raissia', +'exif-resolutionunit' => 'wihdat tahlil X o Y', +'exif-stripoffsets' => 'mawqiaa bayanat sora', +'exif-rowsperstrip' => 'adad sofof lkol chariha', +'exif-stripbytecounts' => 'byte lkol chariha mdghota', +'exif-jpeginterchangeformat' => 'lhad l JPEG SOI', +'exif-jpeginterchangeformatlength' => 'bytes dyal JPEG', +'exif-transferfunction' => 'wadifat naql', +'exif-whitepoint' => 'alwan noqta lbida', +'exif-primarychromaticities' => 'alwan assasia', +'exif-ycbcrcoefficients' => 'moamalat masfofa tahwil farigh lon', +'exif-referenceblackwhite' => 'zoj mn qiyam lmarjia lkhl olbid', +'exif-datetime' => 'tarikh owqt taghyir', +'exif-imagedescription' => 'onwan sora', +'exif-make' => 'manaa alat taswir', +'exif-model' => 'nawa alat taswir', +'exif-software' => 'logieciels li mstkhdmin', +'exif-artist' => 'lmoallif', +'exif-copyright' => 'malik lhoqoq', +'exif-exifversion' => 'noskha Exif', +'exif-flashpixversion' => 'noskha flash pix madoma', +'exif-colorspace' => 'farq lon', +'exif-componentsconfiguration' => 'maana kol mokawwin', +'exif-compressedbitsperpixel' => 'tor daght sora', +'exif-pixelydimension' => 'ard sora sahih', +'exif-pixelxdimension' => 'tol sora sahih', +'exif-makernote' => 'molahadat lmasnaa', +'exif-usercomment' => 'taaliqat lmostakhdim', +'exif-relatedsoundfile' => 'milf sawti mortabit', +'exif-datetimeoriginal' => 'tarikh o wqt tawlid lbayanat', +'exif-datetimedigitized' => 'tarikh tahwil raqmi', +'exif-subsectime' => 'tarikh tawani fariya', +'exif-subsectimeoriginal' => 'waqt tarikh asli tawani fariya', +'exif-subsectimedigitized' => 'waqt tarikh raqmi tawani fariya', +'exif-exposuretime' => 'zaman taarrod', +'exif-exposuretime-format' => '$1 taniya ($2)', +'exif-fnumber' => 'ladad lboaari', +'exif-exposureprogram' => 'barnamaj taarod', + +'exif-meteringmode-0' => 'mjhol', + +# Flash modes +'exif-flash-fired-1' => 'lflach bda', +'exif-flash-return-0' => 'makaynach dalat rojoa lwamid', +'exif-flash-return-2' => 'dow rojoa lwamid makchfch', +'exif-flash-return-3' => 'dow rojoa lwamid bad lkachf dyalo', +'exif-flash-mode-1' => 'flsash gh ijbari', +'exif-flash-mode-2' => 'flash ijbari', +'exif-flash-mode-3' => 'namat tilqai', +'exif-flash-function-1' => 'makaynch lflash', +'exif-flash-redeye-1' => 'namat ikhtizal laqin lhmra', + +'exif-focalplaneresolutionunit-2' => 'bossa', + +'exif-sensingmethod-1' => 'mahddch', +'exif-sensingmethod-2' => 'motchair lon lmissaha mn roqaqa whda', +'exif-sensingmethod-3' => 'mostchair lon lmissaha mn jouj d roqaqat', +'exif-sensingmethod-4' => 'mostchair lon lmissaha mn tlata d roqaqat', +'exif-sensingmethod-5' => 'motchair lon missaha motatabiaa', +'exif-sensingmethod-7' => 'mostachair khatti tolati', +'exif-sensingmethod-8' => 'mostchair lon khatti motatabi3', + +'exif-scenetype-1' => 'sora moltaqata bchkl mobachir', + +'exif-customrendered-0' => 'amaliya adiya', +'exif-customrendered-1' => 'amaliya hassab talab', + +'exif-exposuremode-0' => "tarod tilqa'i", +'exif-exposuremode-1' => 'taarod yadawi', +'exif-exposuremode-2' => 'aqwass tilqaiya', + +'exif-whitebalance-0' => "tawazon lbyin tilqa'i", +'exif-whitebalance-1' => "l'ekilibre dyal lon lbyid", + +'exif-scenecapturetype-0' => 'qiyassi', +'exif-scenecapturetype-1' => 'ardiyya', +'exif-scenecapturetype-2' => 'portrait', +'exif-scenecapturetype-3' => 'machhad layli', + +'exif-gaincontrol-0' => 'Walo', +'exif-gaincontrol-1' => 'tahakkom aala monkhafid', +'exif-gaincontrol-2' => 'tahakkom aala mortafi', +'exif-gaincontrol-3' => 'tahakkom asfal monkhafid', +'exif-gaincontrol-4' => 'tahakkom asfal mortafaa', + +'exif-contrast-0' => 'normaol', +'exif-contrast-1' => 'triyy', +'exif-contrast-2' => 'qassi', + +'exif-saturation-0' => 'normal', +'exif-saturation-1' => 'tachaboo qlil', +'exif-saturation-2' => 'tachaboo ali', + +'exif-sharpness-0' => 'normal', +'exif-sharpness-1' => 'triyy', +'exif-sharpness-2' => 'qassi', + +'exif-subjectdistancerange-0' => 'mjhol', +'exif-subjectdistancerange-1' => 'mavro', +'exif-subjectdistancerange-2' => "ro'ya qriba", +'exif-subjectdistancerange-3' => "ro'ya baida", + +# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef +'exif-gpslatitude-n' => 'dairat ard chamaliya', +'exif-gpslatitude-s' => 'dairat ard ljanobiya', + +# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef +'exif-gpslongitude-e' => 'khatt tol charqi', +'exif-gpslongitude-w' => 'khatt toll lgharbi', + +'exif-gpsstatus-a' => 'amaliyat lqiyas lhaliya', +'exif-gpsstatus-v' => 'chomol lqiyass', + +'exif-gpsmeasuremode-2' => 'amaliyat qiyas tonaiyat alabaad', +'exif-gpsmeasuremode-3' => 'amaliyat qiyas tolatiyat alabaad', + +# Pseudotags used for GPSSpeedRef +'exif-gpsspeed-k' => 'kilometr f saa', +'exif-gpsspeed-m' => 'mil f saa', +'exif-gpsspeed-n' => 'aqd', + +# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef +'exif-gpsdirection-t' => 'litijah lhaqiqi', +'exif-gpsdirection-m' => 'littijah lmighnatissi', + +# External editor support +'edit-externally' => 'Ṣayeb had l-fiċyé be ċi aplikasyon ĥarijiya', +'edit-externally-help' => '(Ċof [http://www.mediawiki.org/wiki/Manual:External_editors/fr les instructions d’installation] ila ḫṫajiṫi meĝlomaṫ ĥrin)', + +# 'all' in various places, this might be different for inflected languages +'recentchangesall' => 'kolċi', +'imagelistall' => 'kolċi', +'watchlistall2' => 'kolċi', +'namespacesall' => 'kolċi', +'monthsall' => 'kolhom', +'limitall' => 'kolċi', + +# E-mail address confirmation +'confirmemail' => "konfirmasyon dyal l'email", +'confirmemail_send' => 'sift code lkonfirmation', +'confirmemail_sent' => 'tam irssal rissala dyal lkonfirmation.', +'confirmemail_loggedin' => "l'email dyalk tkonfirma daba", +'confirmemail_error' => "khayn chi khata' mlli bghiti tsjl lkonfirmation dyalk", +'confirmemail_subject' => "rissala ta'kid mn {{SITENAME}}", +'confirmemail_invalidated' => "lkonfirmasyon dyal l'email tlgha", +'invalidateemail' => "lghi lkofirmasyon dyal l'email", + +# Scary transclusion +'scarytranscludedisabled' => '[tadmin dyal interwiki moattal]', +'scarytranscludefailed' => '[lbaht 3la lqalb fchl l $1]', +'scarytranscludetoolong' => '[URL twil bzzaf]', + +# Trackbacks +'trackbackremove' => '([$1 Suprimi])', +'trackbacklink' => 'lmotabaaa', +'trackbackdeleteok' => 'lmotabaa tmshat', + +# Delete conflict +'deletedwhileediting' => "'''attansyo''': had sfha tmshat bad ma bditi taadil dyalha", +'recreate' => "awd li'inchaa", + +# action=purge +'confirm_purge_button' => 'Waĥĥa', +'confirm-purge-top' => 'bghiti tmsh lcache dyal had sfha ?', + +# Multipage image navigation +'imgmultipageprev' => 'sfha li sbqat', +'imgmultipagenext' => 'sfha jaya →', +'imgmultigo' => 'sir !', +'imgmultigoto' => 'sir lsfha $1', + +# Table pager +'ascending_abbrev' => 'tassaaodi', +'descending_abbrev' => 'tanazoli', +'table_pager_next' => 'Ṣefḫa li jaya', +'table_pager_prev' => 'sfha li sbqat', +'table_pager_first' => 'sfha lowla', +'table_pager_last' => 'sfha lkhra', +'table_pager_limit' => 'biyn $1 onssor f sfha', +'table_pager_limit_label' => 'ada lanassir f sfha:', +'table_pager_limit_submit' => 'Sir', +'table_pager_empty' => 'la nataij', + +# Auto-summaries +'autosumm-blank' => 'khwi sfha', +'autosumm-replace' => 'bdl lmohtawa b "$1"', +'autoredircomment' => 'hwwl sfha l [[$1]]', +'autosumm-new' => 'dir chi ssfha b "$1"', + +# Live preview +'livepreview-loading' => 'tssna wa7d chwiya kaytcharja ....', +'livepreview-ready' => 'tssna wahd chwiya rah kaytcharja. .... safi ha hwa wajd', + +# Friendlier slave lag warnings +'lag-warn-normal' => 'tghiyrat jdad y3ni aqal mn $1 {{PLURAL:$1|taniya|tawani}} iqdr matbanch lik flista', + +# Watchlist editor +'watchlistedit-numitems' => 'lista d s-suivi dyalk fiha {{PLURAL:$1|1 onwan|$1 anawin}}, bla sfahi dniqach.', +'watchlistedit-noitems' => 'lista dyal ladressat dyalk mafihach ta onwan.', +'watchlistedit-normal-title' => 'Ṣayeb l-lista dyal s-suivi', +'watchlistedit-normal-legend' => 'Mmḫiya men l-lista dyal s-suivi', +'watchlistedit-normal-submit' => 'hiyd ladressat', +'watchlistedit-raw-title' => 'Ṣayeb l-lista dyal lkham', +'watchlistedit-raw-legend' => 'Ṣayeb l-lista dyal lkham', +'watchlistedit-raw-titles' => 'ladressat:', +'watchlistedit-raw-submit' => 'hddt qaimat lmoraqaba', + +# Watchlist editing tools +'watchlisttools-view' => 'Lista dyal s-suivi', +'watchlisttools-edit' => 'Ċof o ĝeddel l-lista dyal s-suivi', +'watchlisttools-raw' => 'Ṣayeb l-lista dyal s-suivi', + +# Special:Version +'version' => 'Noskha', +'version-extensions' => 'limtidadat lmotabbata', +'version-specialpages' => 'Ṣefḫa ĥaṣa', +'version-parserhooks' => 'khatatif lmohllil', +'version-variables' => 'lmotaghayyirat', +'version-other' => 'okhra', +'version-mediahandlers' => 'motahakkimat lmedia', +'version-hooks' => 'lkhtatif', +'version-extension-functions' => 'wadaif lmohallil', +'version-parser-extensiontags' => 'wossom imtidad lmohallil', +'version-parser-function-hooks' => 'khtatif dyal dalat lmohllil', +'version-skin-extension-functions' => 'fonctionat dyal lfrssada', +'version-hook-name' => 'smiyt lkhttaf', +'version-hook-subscribedby' => 'kaytstaml mn taraf', +'version-version' => '(Noskha $1)', +'version-license' => 'rokhssa', +'version-poweredby-others' => 'khrin', +'version-software' => "lbarnamaj li m'anstalli", +'version-software-product' => 'lmntoj', +'version-software-version' => 'noskha', + +# Special:FilePath +'filepath' => 'massar lfichier', +'filepath-page' => 'Fiċyé:', +'filepath-submit' => 'Sir', + +# Special:FileDuplicateSearch +'fileduplicatesearch-legend' => 'qllb ala lmdoublin', +'fileduplicatesearch-filename' => 'smiyt lfichier', +'fileduplicatesearch-submit' => 'Qelleb', + +# Special:SpecialPages +'specialpages' => 'Ṣefḫaṫ ĥaṣṣin', +'specialpages-group-maintenance' => 'taqarir siyana', +'specialpages-group-other' => 'sfahi khassin khrin', +'specialpages-group-login' => 'dkhl/tqiyd', +'specialpages-group-changes' => 'akhir taghiyrat osijillat', +'specialpages-group-media' => 'taqarir kmedia o rafa', +'specialpages-group-users' => 'lmostakhdimon o salahiyat', +'specialpages-group-highuse' => 'sfahi istikhdam ali', +'specialpages-group-pages' => 'listat dyal sfahi', +'specialpages-group-pagetools' => 'adawat sfahi', +'specialpages-group-wiki' => 'bayanat lwiki o adawat', +'specialpages-group-redirects' => 'sfhat khassa kathwwl', +'specialpages-group-spam' => 'adawat spam', + +# Special:BlankPage +'blankpage' => 'sfha khawiya', +'intentionallyblankpage' => 'had sfha trkat fargh a anwa', + +# Special:Tags +'tags' => 'wossom taghyir shiha', +'tag-filter-submit' => 'Filter', +'tags-title' => 'wossom', +'tags-tag' => 'smiyt lwasm', +'tags-display-header' => 'dohor f qawain tghiyrat', +'tags-description-header' => 'wasf kaml dyal lmana', +'tags-hitcount-header' => 'tghyirat mawssoma', +'tags-edit' => 'Ĝedel', +'tags-hitcount' => '{{PLURAL:$1|ṫeġyira weḫda|$1 dyal ṫ-ṫeġyiraṫ}}', + +# Special:ComparePages +'comparepages' => 'qarn sfahi', +'compare-selector' => 'qarn morajaat sfha', +'compare-page1' => 'sfha 1', +'compare-page2' => 'sfha 2', +'compare-rev1' => 'morajaa 1', +'compare-rev2' => 'morajaa 2', +'compare-submit' => 'qarn', + +# Database error messages +'dberr-header' => 'had lwiki fih chi mochkil', +'dberr-problems' => 'smh lina had lmawqia ando chi machakil tiqniya', +'dberr-again' => 'jrb tssna 5 dqayq oaawd thmil', +'dberr-info' => 'mayqdrch ittasl b qaaidat lbayanat : $1', +'dberr-usegoogle' => 'imkn lik tqllb f Google f lwaqt lhadir', +'dberr-outofdate' => 'khssk tlahd anna lfahadriss dyalhom l lmohtawa dyalna iqdr matkonch met a jour', +'dberr-cachederror' => 'hadchi rah ghir nskha msjla, o iqdr matkonch a jour', + +# HTML forms +'htmlform-invalid-input' => 'kayna chi mochkilat f chi modkhalat dyalk', +'htmlform-select-badoption' => 'lqima li drtiha masalhach ka khiyar', +'htmlform-int-invalid' => 'lqima li drtiha machi adad shih', +'htmlform-float-invalid' => 'lqima li drtiha machi adad', +'htmlform-int-toolow' => 'lwima li drtiha sghr mn lminimmun li hwa $1', +'htmlform-int-toohigh' => 'lqima li drtima lfog kbr mn lmaximmum li hwa $1', +'htmlform-required' => 'had lqima mtloba', +'htmlform-submit' => 'sift', +'htmlform-reset' => 'rojoa an taadilat', +'htmlform-selectorother-other' => 'okhra', + +# SQLite database support +'sqlite-has-fts' => '$1 maa imkaniyat lbaht f nass kaml', +'sqlite-no-fts' => '$1 imkaniyat lbaht f nass kaml', + +); diff --git a/languages/messages/MessagesArz.php b/languages/messages/MessagesArz.php index 90b0d44f..3c724eb6 100644 --- a/languages/messages/MessagesArz.php +++ b/languages/messages/MessagesArz.php @@ -115,6 +115,7 @@ $magicWords = array( 'subjectpagenamee' => array( '1', 'عنوان_صفحة_الموضوع', 'عنوان_صفحة_المقالة', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ), 'msg' => array( '0', 'رسالة:', 'MSG:' ), 'subst' => array( '0', 'نسخ:', 'إحلال:', 'SUBST:' ), + 'safesubst' => array( '0', 'نسخ_آمن:', 'SAFESUBST:' ), 'msgnw' => array( '0', 'مصدر:', 'مصدر_قالب:', 'رسالة_بدون_تهيئة:', 'MSGNW:' ), 'img_thumbnail' => array( '1', 'تصغير', 'مصغر', 'thumbnail', 'thumb' ), 'img_manualthumb' => array( '1', 'تصغير=$1', 'مصغر=$1', 'thumbnail=$1', 'thumb=$1' ), @@ -125,8 +126,8 @@ $magicWords = array( 'img_center' => array( '1', 'مركز', 'center', 'centre' ), 'img_framed' => array( '1', 'إطار', 'بإطار', 'framed', 'enframed', 'frame' ), 'img_frameless' => array( '1', 'لاإطار', 'frameless' ), - 'img_page' => array( '1', 'صفحة=$1', 'صفحة $1', 'page=$1', 'page $1' ), - 'img_upright' => array( '1', 'معدول', 'معدول=$1', 'معدول $1', 'upright', 'upright=$1', 'upright $1' ), + 'img_page' => array( '1', 'صفحة=$1', 'صفحة $1', 'صفحة_$1', 'page=$1', 'page $1' ), + 'img_upright' => array( '1', 'معدول', 'معدول=$1', 'معدول $1', 'معدول_$1', 'upright', 'upright=$1', 'upright $1' ), 'img_border' => array( '1', 'حد', 'حدود', 'border' ), 'img_baseline' => array( '1', 'خط_أساسى', 'خط_أساسي', 'baseline' ), 'img_sub' => array( '1', 'فرعى', 'فرعي', 'sub' ), @@ -160,6 +161,7 @@ $magicWords = array( 'revisionday' => array( '1', 'يوم_المراجعة', 'REVISIONDAY' ), 'revisionday2' => array( '1', 'يوم_المراجعة2', 'REVISIONDAY2' ), 'revisionmonth' => array( '1', 'شهر_المراجعة', 'REVISIONMONTH' ), + 'revisionmonth1' => array( '1', 'شهر_المراجعة1', 'REVISIONMONTH1' ), 'revisionyear' => array( '1', 'عام_المراجعة', 'REVISIONYEAR' ), 'revisiontimestamp' => array( '1', 'طابع_وقت_المراجعة', 'REVISIONTIMESTAMP' ), 'revisionuser' => array( '1', 'مستخدم_المراجعة', 'REVISIONUSER' ), @@ -193,7 +195,7 @@ $magicWords = array( 'filepath' => array( '0', 'مسار_الملف:', 'FILEPATH:' ), 'tag' => array( '0', 'وسم', 'tag' ), 'hiddencat' => array( '1', '__تصنيف_مخفي__', '__HIDDENCAT__' ), - 'pagesincategory' => array( '1', 'صفحات_فى_التصنيف', 'صفحات في التصنيف', 'صفحات_في_التصنيف', 'صفحات_في_تصنيف', 'PAGESINCATEGORY', 'PAGESINCAT' ), + 'pagesincategory' => array( '1', 'صفحات_في_التصنيف', 'صفحات_في_تصنيف', 'PAGESINCATEGORY', 'PAGESINCAT' ), 'pagesize' => array( '1', 'حجم_الصفحة', 'PAGESIZE' ), 'index' => array( '1', '__فهرسة__', '__INDEX__' ), 'noindex' => array( '1', '__لافهرسة__', '__NOINDEX__' ), @@ -201,97 +203,101 @@ $magicWords = array( 'staticredirect' => array( '1', '__تحويلة_إستاتيكية__', '__تحويلة_ساكنة__', '__STATICREDIRECT__' ), 'protectionlevel' => array( '1', 'مستوى_الحماية', 'PROTECTIONLEVEL' ), 'formatdate' => array( '0', 'تهيئة_التاريخ', 'تهيئة_تاريخ', 'formatdate', 'dateformat' ), + 'url_path' => array( '0', 'مسار', 'PATH' ), + 'url_wiki' => array( '0', 'ويكى', 'ويكي', 'WIKI' ), + 'url_query' => array( '0', 'استعلام', 'QUERY' ), ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'تحويلات_مزدوجة' ), - 'BrokenRedirects' => array( 'تحويلات_مكسورة' ), + 'DoubleRedirects' => array( 'تحويلات_دوبل' ), + 'BrokenRedirects' => array( 'تحويلات_مكسوره' ), 'Disambiguations' => array( 'توضيحات' ), 'Userlogin' => array( 'دخول_اليوزر' ), 'Userlogout' => array( 'خروج_اليوزر' ), - 'CreateAccount' => array( 'إنشاء_حساب' ), + 'CreateAccount' => array( 'ابتدى_حساب' ), 'Preferences' => array( 'تفضيلات' ), - 'Watchlist' => array( 'قايمة_المراقبة' ), - 'Recentchanges' => array( 'اخر_التعديلات' ), + 'Watchlist' => array( 'ليستة_المراقبه' ), + 'Recentchanges' => array( 'اخر_تعديلات' ), 'Upload' => array( 'رفع' ), - 'Listfiles' => array( 'عرض_الملفات', 'قايمة_الملفات', 'قايمة_الصور' ), - 'Newimages' => array( 'ملفات_جديدة', 'صور_جديدة' ), - 'Listusers' => array( 'عرض_المستخدمين', 'قايمة_المستخدمين' ), - 'Listgrouprights' => array( 'عرض_صلاحيات_المجموعات' ), - 'Statistics' => array( 'إحصائيات' ), - 'Randompage' => array( 'عشوائي', 'صفحة_عشوائية' ), - 'Lonelypages' => array( 'صفحات_وحيدة', 'صفحات_يتيمة' ), - 'Uncategorizedpages' => array( 'صفحات_مش_مصنفة' ), - 'Uncategorizedcategories' => array( 'تصنيفات_مش_مصنفة' ), - 'Uncategorizedimages' => array( 'ملفات_مش_مصنفة', 'صور_مش_مصنفة' ), - 'Uncategorizedtemplates' => array( 'قوالب_مش_مصنفة' ), - 'Unusedcategories' => array( 'تصنيفات_مش_مستخدمة' ), - 'Unusedimages' => array( 'ملفات_مش_مستخدمة', 'صور_مش_مستخدمة' ), - 'Wantedpages' => array( 'صفحات_مطلوبة', 'وصلات_مكسورة' ), - 'Wantedcategories' => array( 'تصنيفات_مطلوبة' ), - 'Wantedfiles' => array( 'ملفات_مطلوبة' ), - 'Wantedtemplates' => array( 'قوالب_مطلوبة' ), - 'Mostlinked' => array( 'أكثر_الصفحات_وصلا', 'الأكثر_وصلا' ), - 'Mostlinkedcategories' => array( 'أكثر_التصنيفات_وصلا', 'أكثر_التصنيفات_استخداما' ), - 'Mostlinkedtemplates' => array( 'أكثر_القوالب_وصلا', 'أكثر_القوالب_استخداما' ), - 'Mostimages' => array( 'أكثر_الملفات_وصلا', 'أكثر_الملفات', 'أكثر_الصور' ), - 'Mostcategories' => array( 'أكثر_التصنيفات' ), - 'Mostrevisions' => array( 'أكثر_المراجعات' ), - 'Fewestrevisions' => array( 'أقل_المراجعات' ), - 'Shortpages' => array( 'صفحات_قصيرة' ), - 'Longpages' => array( 'صفحات_طويلة' ), - 'Newpages' => array( 'صفحات_جديدة' ), - 'Ancientpages' => array( 'صفحات_قديمة' ), - 'Deadendpages' => array( 'صفحات_نهاية_مسدودة' ), - 'Protectedpages' => array( 'صفحات_محمية' ), - 'Protectedtitles' => array( 'عناوين_محمية' ), - 'Allpages' => array( 'كل_الصفحات' ), - 'Prefixindex' => array( 'فهرس_بادئة' ), - 'Ipblocklist' => array( 'قائمة_المنع', 'عرض_المنع', 'قائمة_منع_أيبى' ), - 'Specialpages' => array( 'صفحات_خاصة' ), + 'Listfiles' => array( 'عرض_الفايلات', 'ليستة_الفايلات', 'ليستة_الصور' ), + 'Newimages' => array( 'فايلات_جديده', 'صور_جديده' ), + 'Listusers' => array( 'عرض_اليوزرات', 'ليستة_اليوزرات' ), + 'Listgrouprights' => array( 'عرض_حقوق_الجروپات' ), + 'Statistics' => array( 'احصائيات' ), + 'Randompage' => array( 'عشوائى', 'صفحه_عشوائيه' ), + 'Lonelypages' => array( 'صفح_وحدانيه', 'صفح_يتيمه' ), + 'Uncategorizedpages' => array( 'صفح_مش_متصنفه' ), + 'Uncategorizedcategories' => array( 'تصانيف_مش_متصنفه' ), + 'Uncategorizedimages' => array( 'فايلات_مش_متصنفه', 'صور_مش_متصنفه' ), + 'Uncategorizedtemplates' => array( 'قوالب_مش_متصنفه' ), + 'Unusedcategories' => array( 'تصانيف_مش_مستعمله' ), + 'Unusedimages' => array( 'فايلات_مش_مستعمله', 'صور_مش_مستعمله' ), + 'Wantedpages' => array( 'صفح_مطلوبه', 'لينكات_مكسوره' ), + 'Wantedcategories' => array( 'تصانيف_مطلوبه' ), + 'Wantedfiles' => array( 'فايلات_مطلوبه' ), + 'Wantedtemplates' => array( 'قوالب_مطلوبه' ), + 'Mostlinked' => array( 'اكتر_صفح_معمول_ليها_لينك' ), + 'Mostlinkedcategories' => array( 'اكتر_تصانيف_معمول_ليها_لينك', 'اكتر_تصانيف_مستعمله' ), + 'Mostlinkedtemplates' => array( 'اكتر_قوالب_معمول_ليها_لينك', 'اكتر_قوالب_مستعمله' ), + 'Mostimages' => array( 'اكتر_فايلات_معمول_ليها_لينك', 'اكتر_فايلات', 'اكتر_صور' ), + 'Mostcategories' => array( 'اكتر_تصانيف' ), + 'Mostrevisions' => array( 'اكتر_مراجعات' ), + 'Fewestrevisions' => array( 'اقل_مراجعات' ), + 'Shortpages' => array( 'صفح_قصيره' ), + 'Longpages' => array( 'صفح_طويله' ), + 'Newpages' => array( 'صفح_جديده' ), + 'Ancientpages' => array( 'صفح_قديمه' ), + 'Deadendpages' => array( 'صفح_نهايه_مسدوده' ), + 'Protectedpages' => array( 'صفح_محميه' ), + 'Protectedtitles' => array( 'عناوين_محميه' ), + 'Allpages' => array( 'كل_الصفح' ), + 'Prefixindex' => array( 'فهرس_بدايه' ), + 'Ipblocklist' => array( 'ليستة_البلوك', 'بيّن_البلوك', 'ليستة_بلوك_IP' ), + 'Unblock' => array( 'رفع_منع' ), + 'Specialpages' => array( 'صفح_مخصوصه' ), 'Contributions' => array( 'مساهمات' ), - 'Emailuser' => array( 'مراسلة_المستخدم' ), - 'Confirmemail' => array( 'تأكيد_البريد' ), - 'Whatlinkshere' => array( 'ماذا_يصل_هنا' ), - 'Recentchangeslinked' => array( 'أحدث_التغييرات_الموصولة', 'تغييرات_مرتبطة' ), - 'Movepage' => array( 'نقل_صفحة' ), - 'Blockme' => array( 'منعى' ), + 'Emailuser' => array( 'ابعت_ايميل_لليوزر' ), + 'Confirmemail' => array( 'تأكيد_الايميل' ), + 'Whatlinkshere' => array( 'ايه_بيوصل_هنا' ), + 'Recentchangeslinked' => array( 'اجدد_التغييرات_اللى_معمول_ليها_لينك', 'تغييرات_مرتبطه' ), + 'Movepage' => array( 'نقل_صفحه' ), + 'Blockme' => array( 'بلوك_لنفسى' ), 'Booksources' => array( 'مصادر_كتاب' ), - 'Categories' => array( 'تصنيفات' ), + 'Categories' => array( 'تصانيف' ), 'Export' => array( 'تصدير' ), - 'Version' => array( 'إصدار' ), + 'Version' => array( 'نسخه' ), 'Allmessages' => array( 'كل_الرسايل' ), 'Log' => array( 'سجل', 'سجلات' ), - 'Blockip' => array( 'منع', 'منع_أيبى', 'منع_مستخدم' ), + 'Blockip' => array( 'بلوك', 'بلوك_IP', 'بلوك_يوزر' ), 'Undelete' => array( 'استرجاع' ), - 'Import' => array( 'استيراد' ), + 'Import' => array( 'استوراد' ), 'Lockdb' => array( 'قفل_قب' ), 'Unlockdb' => array( 'فتح_قب' ), - 'Userrights' => array( 'صلاحيات_المستخدم', 'ترقية_مدير_نظام', 'ترقية_بوت' ), - 'MIMEsearch' => array( 'بحث_ميم' ), - 'FileDuplicateSearch' => array( 'بحث_ملف_مكرر' ), - 'Unwatchedpages' => array( 'صفحات_مش_مراقبة' ), + 'Userrights' => array( 'حقوق_اليوزر', 'ترقية_سيسوپ', 'ترقية_بوت' ), + 'MIMEsearch' => array( 'تدوير_MIME' ), + 'FileDuplicateSearch' => array( 'تدوير_فايل_متكرر' ), + 'Unwatchedpages' => array( 'صفح_مش_متراقبه' ), 'Listredirects' => array( 'عرض_التحويلات' ), - 'Revisiondelete' => array( 'حذف_نسخة' ), - 'Unusedtemplates' => array( 'قوالب_مش_مستخدمة' ), - 'Randomredirect' => array( 'تحويلة_عشوائية' ), + 'Revisiondelete' => array( 'مسح_نسخه' ), + 'Unusedtemplates' => array( 'قوالب_مش_مستعمله' ), + 'Randomredirect' => array( 'تحويله_عشوائيه' ), 'Mypage' => array( 'صفحتى' ), - 'Mytalk' => array( 'نقاشى' ), + 'Mytalk' => array( 'مناقشتى' ), 'Mycontributions' => array( 'مساهماتى' ), - 'Listadmins' => array( 'عرض_الإداريين' ), + 'Listadmins' => array( 'عرض_الاداريين' ), 'Listbots' => array( 'عرض_البوتات' ), - 'Popularpages' => array( 'صفحات_مشهورة' ), - 'Search' => array( 'بحث' ), - 'Resetpass' => array( 'تغيير_كلمة_السر', 'ضبط_كلمة_السر' ), - 'Withoutinterwiki' => array( 'بدون_إنترويكى' ), + 'Popularpages' => array( 'صفح_مشهوره' ), + 'Search' => array( 'تدوير' ), + 'Resetpass' => array( 'تغيير_الپاسوورد', 'ظبط_الپاسوورد' ), + 'Withoutinterwiki' => array( 'من-غير_interwiki' ), 'MergeHistory' => array( 'دمج_التاريخ' ), 'Filepath' => array( 'مسار_ملف' ), - 'Invalidateemail' => array( 'تعطيل_البريد_الإلكترونى' ), - 'Blankpage' => array( 'صفحة_فارغة' ), - 'LinkSearch' => array( 'بحث_الوصلات' ), - 'DeletedContributions' => array( 'مساهمات_محذوفة' ), + 'Invalidateemail' => array( 'تعطيل_الايميل' ), + 'Blankpage' => array( 'صفحه_فارضيه' ), + 'LinkSearch' => array( 'تدوير_اللينكات' ), + 'DeletedContributions' => array( 'مساهمات_ممسوحه' ), 'Tags' => array( 'وسوم' ), - 'Activeusers' => array( 'مستخدمون_نشطون' ), + 'Activeusers' => array( 'يوزرات_نشطا' ), ); $messages = array( @@ -310,8 +316,7 @@ $messages = array( 'tog-editsection' => 'اسمح بـ تعديل الاجزاء عن طريق لينكات [تعديل]', 'tog-editsectiononrightclick' => 'اسمح بـ تعديل الاجزاء لما تعمل right-click بـ الماوس على عناوين الاجزاء (بيحتاج JavaScript)', 'tog-showtoc' => 'بين جدول المحتويات (بتاع الصفح اللى فيها اكتر من 3 عناوين)', -'tog-rememberpassword' => 'خليك فاكر دخولى على الكمبيوتر دا', -'tog-editwidth' => 'وسع صندوق التحرير عشان يملا للشاشه كلها.', +'tog-rememberpassword' => ' (لمدة $1 {{PLURAL:$1|يوم|يوم}})خليك فاكر دخولى على الكمبيوتر دا', 'tog-watchcreations' => 'زوّد الصفح اللى ابتديتها على ليستة الصفح اللى باراقبها', 'tog-watchdefault' => 'زوّد الصفح اللى باعدلها على ليستة الصفح اللى باراقبها', 'tog-watchmoves' => 'زوّد الصفح اللى بانقلها على ليستة الصفح اللى باراقبها', @@ -458,31 +463,20 @@ $messages = array( 'faqpage' => 'Project:اسئله بتتسئل كتير', # Vector skin -'vector-action-addsection' => 'ضيف موضوع', -'vector-action-delete' => 'مسح', -'vector-action-move' => 'نقل', -'vector-action-protect' => 'حمايه', -'vector-action-undelete' => 'الغى المسح', -'vector-action-unprotect' => 'الغى الحمايه', -'vector-namespace-category' => 'تصنيف', -'vector-namespace-help' => 'صفحة مساعده', -'vector-namespace-image' => 'ملف', -'vector-namespace-main' => 'صفحه', -'vector-namespace-media' => 'صفحة ميديا', -'vector-namespace-mediawiki' => 'رساله', -'vector-namespace-project' => 'صفحة مشروع', -'vector-namespace-special' => 'صفحه مخصوصه', -'vector-namespace-talk' => 'نقاش', -'vector-namespace-template' => 'قالب', -'vector-namespace-user' => 'صفحة يوزر', -'vector-view-create' => 'اعمل', -'vector-view-edit' => 'تعديل', -'vector-view-history' => 'استعراض التاريخ', -'vector-view-view' => 'قرايه', -'vector-view-viewsource' => 'استعراض المصدر', -'actions' => 'أعمال', -'namespaces' => 'النطاقات', -'variants' => 'المتغيرات', +'vector-action-addsection' => 'ضيف موضوع', +'vector-action-delete' => 'مسح', +'vector-action-move' => 'نقل', +'vector-action-protect' => 'حمايه', +'vector-action-undelete' => 'الغى المسح', +'vector-action-unprotect' => 'الغى الحمايه', +'vector-view-create' => 'اعمل', +'vector-view-edit' => 'تعديل', +'vector-view-history' => 'استعراض التاريخ', +'vector-view-view' => 'قرايه', +'vector-view-viewsource' => 'استعراض المصدر', +'actions' => 'أعمال', +'namespaces' => 'النطاقات', +'variants' => 'المتغيرات', 'errorpagetitle' => 'غلطه', 'returnto' => 'ارجع ل $1.', @@ -707,7 +701,7 @@ $2', 'yourname' => 'اليوزرنيم:', 'yourpassword' => 'الباسوورد:', 'yourpasswordagain' => 'اكتب الباسورد تاني:', -'remembermypassword' => 'افتكر بيانات دخولى على الكمبيوتر ده', +'remembermypassword' => ' (لمدة $1 {{PLURAL:$1|يوم|يوم}})خليك فاكر دخولى على الكمبيوتر دا', 'yourdomainname' => 'النطاق بتاعك:', 'externaldberror' => 'يا إما فى حاجة غلط فى الدخول على قاعدة البيانات الخارجية أو انت مش مسموح لك تعمل تحديث لحسابك الخارجي.', 'login' => 'دخول', @@ -724,6 +718,7 @@ $2', 'gotaccount' => "عندك حساب؟ '''$1'''.", 'gotaccountlink' => 'دخول', 'createaccountmail' => 'بـ الايميل', +'createaccountreason' => 'السبب:', 'badretype' => 'كلمتين السر اللى كتبتهم مش زى بعضهم', 'userexists' => 'اسم اليوزر اللى دخلته بيستعمله يوزر غيرك. دخل اسم تانى.', @@ -843,8 +838,8 @@ $2', 'missingsummary' => "'''خد بالك:''' انت ما كتبتش ملخص للتعديل. لو دوست على سييڤ الصفحه مرة تانية التعديل بتاعك ح يتحفظ من غير ملخص.", 'missingcommenttext' => 'لو سمحت اكتب تعليق تحت.', -'missingcommentheader' => "'''خد بالك:''' انت ما كتبتش عنوان\\موضوع للتعليق دا -لو دوست على سييڤ الصفحه مرة تانيه، تعليقك ح يتحفظ من غير عنوان.", +'missingcommentheader' => "'''.خد بالك:''' انت ما كتبتش عنوان\\موضوع للتعليق دا +لو دوست على {{int:savearticle}} مرة تانيه، تعليقك ح يتحفظ من غير عنوان.", 'summary-preview' => 'بروفه للملخص:', 'subject-preview' => 'بروفة للعنوان/للموضوع', 'blockedtitle' => 'اليوزر ممنوع', @@ -917,7 +912,7 @@ $2', هى لسه ماتسييڤتش!'''", 'userjspreview' => "'''أفتكر أنك بس بتجرب/بتعرض الجافا سكريبت بتاع اليوزر بتاعك، و انها لسة ماتحفظتش!'''", 'userinvalidcssjstitle' => "'''تحذير:'''مافيش واجهة \"\$1\". -افتكر أن ملفات ال.css و ال.js بتستخدم حروف صغيرة فى العنوان ، مثلا {{ns:user}}:Foo/monobook.css و مش {{ns:user}}:Foo/Monobook.css.", +افتكر أن ملفات ال.css و ال.js بتستخدم حروف صغيرة فى العنوان ، مثلا {{ns:user}}:Foo/vector.css و مش {{ns:user}}:Foo/Vector.css.", 'updated' => '(متحدثة)', 'note' => "'''ملحوظه:'''", 'previewnote' => "''' دى بروفه للصفحه بس، @@ -957,9 +952,6 @@ $2', 'copyrightwarning2' => "لو سمحت تعمل حسابك ان كل مشاركاتك فى {{SITENAME}} ممكن المشاركين التانيين يعدلوها،يغيروها، او يمسحوها خالص. لو مانتش حابب ان كتاباتك تتعدل و تتغير بالشكل دا، فياريت ما تنشرهاش هنا.
    . و كمان انت بتدينا كلمة شرف انك صاحب الكتابات دي، او انك نقلتها من مكان مش خاضع لحقوق النشر .(شوف التفاصيل فى $1 ). '''لو سمحت ما تحطش هنا اى نص خاضع لحقوق النشر من غير تصريح!'''.", -'longpagewarning' => "'''تحذير:''' الصفحه دى حجمها $1 ‏kilobyte;‏ -شوية براوزرات ممكن يبقى عندها مشاكل لما تحاول تعديل صفح بيزيد حجمها عن 32 ‏kb.‏ -لو سمحت فكر فى تقسيم الصفحه لاجزاء اصغر.", 'longpageerror' => "'''غلط: النص اللى دخلته حجمه $1 كيلوبايت، ودا أكبر من الحد الأقصى و اللى هو $2 كيلوبايت. مش ممكن يتحفظ.'''", 'readonlywarning' => "'''تحذير: قاعدة البيانات اتقفلت للصيانة، و علشان كدا انت مش ح تقدر تحفظ التعديلات اللى عملتها دلوقاي. @@ -1207,7 +1199,7 @@ $1", 'compareselectedversions' => 'قارن بين النسختين المختارتين', 'showhideselectedversions' => 'عرض/تخبية المراجعات المختاره.', 'editundo' => 'استرجاع', -'diff-multi' => '({{PLURAL:$1|نسخه واحده متوسطه|$1 نسخه متوسطه}} مش معروضه.)', +'diff-multi' => '({{PLURAL:$1|نسخه واحده متوسطه|$1 نسخ متوسطه}} by {{PLURAL:$2|يوزر واحد |$2 يوزرات}} مش معروضه)', # Search results 'searchresults' => 'نتايج التدوير', @@ -1319,6 +1311,7 @@ $1", 'contextlines' => 'عدد السطور فى كل نتيجة:', 'contextchars' => 'عدد الحروف فى كل سطر', 'stub-threshold' => 'الحد لتنسيق لينك البذرة:', +'stub-threshold-disabled' => 'معطل', 'recentchangesdays' => 'عدد الأيام المعروضة فى اخرالتغييرات:', 'recentchangesdays-max' => '(الحد الاقصى $1 {{PLURAL:$1|يوم|ايام}})', 'recentchangescount' => 'عدد التعديلات اللى بتظهر اوتوماتيكى فى اخر التغييرات, تواريخ الصفحه, و فى السجلات, :', @@ -1391,7 +1384,9 @@ $1", 'prefs-advancedrendering' => 'اختيارات متقدمه', 'prefs-advancedsearchoptions' => 'اختيارات متقدمه', 'prefs-advancedwatchlist' => 'اختيارات متقدمه', -'prefs-display' => 'اختيارات العرض', +'prefs-displayrc' => 'اختيارات العرض', +'prefs-displaysearchoptions' => 'اختيارات العرض', +'prefs-displaywatchlist' => 'اختيارات العرض', 'prefs-diffs' => 'التغيير', # User rights @@ -1499,7 +1494,6 @@ $1", 'right-siteadmin' => 'قفل وفتح قاعدة البيانات', 'right-reset-passwords' => 'تغيير الباوسورد بتاعة اليوزرات التانيين', 'right-override-export-depth' => 'تصدير الصفحات مع الصفحات الموصوله لحد عمق 5', -'right-versiondetail' => 'عرض معلومات نسخة السوفتوير المتوسعه', 'right-sendemail' => 'يبعت إيميل لليوزرز التانيين', # User rights log @@ -1550,14 +1544,9 @@ $1", 'recentchanges-legend' => 'اختيارات اخر التعديلات', 'recentchangestext' => 'تابع آخر التغييرات فى الويكى على الصفحة دى.', 'recentchanges-feed-description' => 'تابع اخر التعديلات للويكى ده عن طريق الفييد ده .', -'recentchanges-label-legend' => 'المفتاح: $1.', -'recentchanges-legend-newpage' => '$1 - صفحه جديده', 'recentchanges-label-newpage' => 'التعديل ده عمل صفحه جديده', -'recentchanges-legend-minor' => '$1 - تعديل صغير', 'recentchanges-label-minor' => 'ده تعديل صغير', -'recentchanges-legend-bot' => '$1 - تعديل بتاع بوت', 'recentchanges-label-bot' => 'التعديل ده عمله بوت', -'recentchanges-legend-unpatrolled' => '$1 - تعديل مش متراجع', 'recentchanges-label-unpatrolled' => 'التعديل ده مإتراجعش لسه', 'rcnote' => "فيه تحت {{PLURAL:$1|'''1''' تغيير|آخر '''$1''' تغيير}} فى آخر {{PLURAL:$2|يوم|'''$2''' يوم}}، بدءا من $5، $4.", 'rcnotefrom' => "دى التعديلات من '''$2''' (ل '''$1''' معروضه).", @@ -1667,7 +1656,6 @@ $1", [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'الملف دا تكرار {{PLURAL:$1|للملف|للملفات}} دي:', 'file-deleted-duplicate' => 'فى ملف مطابق للملف دا ([[:$1]]) اتمسح قبل كدا. انتا لازم تشيك على تاريخ المسح بتاع الملف دا قبل ما تحمله مرة تانية', -'successfulupload' => 'التحميل ناجح', 'uploadwarning' => 'تحذير التحميل', 'uploadwarning-text' => 'لو سمحت عدل وصف الملف اللى تحت وحاول تانى.', 'savefile' => 'حفظ الملف', @@ -1708,6 +1696,8 @@ JD # Jenoptik MGP # Pentax PICT # misc. #
    ', +'upload-success-subj' => 'التحميل ناجح', +'upload-warning-subj' => 'تحذير التحميل', 'upload-proto-error' => 'بروتوكول مش صحيح', 'upload-proto-error-text' => 'االتحميل عن بعد لازمله يوأرإل بيبتدى بـ http:// أو ftp://.', @@ -1891,7 +1881,6 @@ PICT # misc. 'statistics-edits-average' => 'متوسط التعديلات لكل صفحة', 'statistics-views-total' => 'إجمالى المشاهدات', 'statistics-views-peredit' => 'المشاهدات لكل تعديل', -'statistics-jobqueue' => 'طول [http://www.mediawiki.org/wiki/Manual:Job_queue طابور الشغل]', 'statistics-users' => '[[Special:ListUsers|يوزرز]] مسجلين', 'statistics-users-active' => 'يوزرز نشطين', 'statistics-users-active-desc' => 'اليوزرز اللى نفذو عمليه فى الـ {{PLURAL:$1|يوم|$1 ايام}} اللى فاتو', @@ -1906,7 +1895,7 @@ PICT # misc. 'doubleredirects' => 'تحويلات مزدوجه', 'doubleredirectstext' => 'الصفحة دى فيها لستة الصفحات اللى فيها تحويلة لصفحة تانية فيها تحويلة. كل سطر فى اللستة دى فيه لينك للتحويلة الأولانية والتانية و كمان للصفحة بتاعة التحويلة التانية و اللى غالبا هى الصفحة الاصلية اللى المفروض التحويلة الاولانية توصل ليها. -Crossed out اتحلت.', +Crossed out اتحلت.', 'double-redirect-fixed-move' => '[[$1]] اتنقلت، هى دلوقتى تحويله ل [[$2]]', 'double-redirect-fixer' => 'مصلح التحويل', @@ -2113,7 +2102,6 @@ PICT # misc. # Watchlist 'watchlist' => 'لستة الصفحات اللى باراقبها', 'mywatchlist' => 'لستة الصفح اللى باراقبها', -'watchlistfor' => "(ل '''$1''')", 'nowatchlist' => 'مافيش حاجة فى لستة مراقبتك.', 'watchlistanontext' => 'لو سمحت $1 لعرض أو تعديل الصفحات فى لستة مراقبتك.', 'watchnologin' => 'مش متسجل', @@ -2235,7 +2223,9 @@ $UNWATCHURL 'revertpage-nouser' => 'استرجع التعديلات بتاعه (اسم اليوزر اتمسح) لغايه آخر نسخه بتاعه [[User:$1|$1]]', 'rollback-success' => 'استرجع تعديلات $1؛ استرجع لآخر نسخة بواسطة $2.', -'sessionfailure' => 'الظاهر انه فى مشكلة فى جلسة دخولك دى ؛ + +# Edit tokens +'sessionfailure' => 'الظاهر انه فى مشكلة فى جلسة دخولك دى ؛ وعلشان كدا العملية دى اتلغت كإجراء احترازى ضد الاختراق. لو سمحت دوس على زرار"رجوع" علشان تحمل الصفحة اللى جيت منها مرة تانية، و بعدين حاول تاني.', @@ -2447,7 +2437,6 @@ $1', 'ipb-edit-dropdown' => 'عدل أسباب المنع', 'ipb-unblock-addr' => 'رفع منع $1', 'ipb-unblock' => 'رفع المنع عن يوزر أو عنوان أيبي', -'ipb-blocklist-addr' => 'عرض المنع الموجود دلوقتى ل$1', 'ipb-blocklist' => 'عرض حالات المنع الموجودة دلوقتي', 'ipb-blocklist-contribs' => 'مساهمات $1', 'unblockip' => 'رفع منع يوزر', @@ -2922,10 +2911,10 @@ $1', 'imagemaxsize' => "حد حجم الصوره:
    ''(لصفحات الوصف بتاع الملفات)''", 'thumbsize' => 'حجم العرض المتصغر:', 'widthheightpage' => '$1×$2، $3 {{PLURAL:$3|صفحة|صفحة}}', -'file-info' => '(حجم الملف: $1، نوع MIME: $2)', -'file-info-size' => '($1 × $2 بكسل حجم الفايل: $3، نوع MIME: $4)', +'file-info' => 'حجم الملف: $1، نوع MIME: $2', +'file-info-size' => '$1 × $2 بكسل حجم الفايل: $3، نوع MIME: $4', 'file-nohires' => 'مافيش ريزوليوشن اعلى متوفر.', -'svg-long-desc' => '(ملف SVG، اساسا $1 × $2 بكسل، حجم الملف: $3)', +'svg-long-desc' => 'ملف SVG، اساسا $1 × $2 بكسل، حجم الملف: $3', 'show-big-image' => 'الصورة بدقه كامله', 'show-big-image-thumb' => 'حجم البروفه دى: $1 × $2 بكسل', 'file-info-gif-looped' => 'ملفوف', @@ -3549,6 +3538,11 @@ $1', 'tags-edit' => 'تعديل', 'tags-hitcount' => '$1 {{PLURAL:$1|تغيير|تغيير}}', +# Special:ComparePages +'compare-page1' => 'صفحه 1', +'compare-page2' => 'صفحه 2', +'compare-submit' => 'قارن', + # Database error messages 'dberr-header' => 'الويكى دا فيه مشكله', 'dberr-problems' => 'متأسفين، السايت دا بيعانى من صعوبات فنيه', diff --git a/languages/messages/MessagesAs.php b/languages/messages/MessagesAs.php index 177964ae..a9f890cc 100644 --- a/languages/messages/MessagesAs.php +++ b/languages/messages/MessagesAs.php @@ -18,71 +18,81 @@ * @author Urhixidur */ -$fallback='bn'; +$fallback = 'bn'; $namespaceNames = array( NS_MEDIA => 'মাধ্যম', NS_SPECIAL => 'বিশেষ', - NS_TALK => 'বার্তা', + NS_TALK => 'বাৰ্তা', NS_USER => 'সদস্য', - NS_USER_TALK => 'সদস্য বার্তা', - NS_PROJECT_TALK => '$1 বার্তা', - NS_FILE => 'চিত্র', - NS_FILE_TALK => 'চিত্র বার্তা', - NS_MEDIAWIKI => 'MediaWiki', - NS_MEDIAWIKI_TALK => 'MediaWiki বার্তা', + NS_USER_TALK => 'সদস্য_বাৰ্তা', + NS_PROJECT_TALK => '$1_বাৰ্তা', + NS_FILE => 'চিত্ৰ', + NS_FILE_TALK => 'চিত্ৰ_বাৰ্তা', + NS_MEDIAWIKI => 'মেডিয়াৱিকি', + NS_MEDIAWIKI_TALK => 'মেডিয়াৱিকি_বাৰ্তা', NS_TEMPLATE => 'সাঁচ', - NS_TEMPLATE_TALK => 'সাঁচ বার্তা', + NS_TEMPLATE_TALK => 'সাঁচ_বাৰ্তা', NS_HELP => 'সহায়', - NS_HELP_TALK => 'সহায় বার্তা', - NS_CATEGORY => 'শ্রেণী', - NS_CATEGORY_TALK => 'শ্রেণী বার্তা', + NS_HELP_TALK => 'সহায়_বাৰ্তা', + NS_CATEGORY => 'শ্ৰেণী', + NS_CATEGORY_TALK => 'শ্ৰেণী_বাৰ্তা', ); $namespaceAliases = array( 'विशेष' => NS_SPECIAL, 'वार्ता' => NS_TALK, + 'বার্তা' => NS_TALK, 'सदस्य' => NS_USER, 'सदस्य_वार्ता' => NS_USER_TALK, + 'সদস্য বার্তা' => NS_USER_TALK, '$1_वार्ता' => NS_PROJECT_TALK, + '$1 বার্তা' => NS_PROJECT_TALK, 'चित्र' => NS_FILE, 'चित्र_वार्ता' => NS_FILE_TALK, + 'চিত্র' => NS_FILE, + 'চিত্র বার্তা' => NS_FILE_TALK, + 'MediaWiki বার্তা' => NS_MEDIAWIKI_TALK, 'साँचा' => NS_TEMPLATE, 'साँचा_वार्ता' => NS_TEMPLATE_TALK, + 'সাঁচ বার্তা' => NS_TEMPLATE_TALK, + 'সহায় বার্তা' => NS_HELP_TALK, 'श्रेणी' => NS_CATEGORY, 'श्रेणी_वार्ता' => NS_CATEGORY_TALK, + 'শ্রেণী' => NS_CATEGORY, + 'শ্রেণী বার্তা' => NS_CATEGORY_TALK, ); $specialPageAliases = array( - 'Userlogin' => array( 'সদস্যৰ প্রবেশ' ), - 'Userlogout' => array( 'সদস্যৰ প্রস্থান' ), + 'Userlogin' => array( 'সদস্যৰ_প্ৰবেশ' ), + 'Userlogout' => array( 'সদস্যৰ_প্ৰস্থান' ), 'CreateAccount' => array( 'সদস্যভুক্তি' ), 'Preferences' => array( 'পচন্দ' ), 'Watchlist' => array( 'লক্ষ্যতালিকা' ), - 'Recentchanges' => array( 'শেহতীয়া কাম' ), + 'Recentchanges' => array( 'শেহতীয়া_কাম' ), 'Upload' => array( 'বোজাই' ), - 'Listfiles' => array( 'চিত্র-তালিকা' ), - 'Newimages' => array( 'নতুন চিত্র' ), + 'Listfiles' => array( 'চিত্ৰ-তালিকা' ), + 'Newimages' => array( 'নতুন_চিত্ৰ' ), 'Listusers' => array( 'সদস্য-তালিকা' ), - 'Listgrouprights' => array( 'গোটৰ অধিকাৰসমুহ' ), + 'Listgrouprights' => array( 'গোটৰ_অধিকাৰসমূহ' ), 'Statistics' => array( 'পৰিসংখ্যা' ), 'Randompage' => array( 'আকস্মিক' ), - 'Lonelypages' => array( 'অকলশৰীয়া পৃষ্ঠা' ), - 'Uncategorizedpages' => array( 'অবিন্যস্ত পৃষ্ঠাসমুহ' ), - 'Uncategorizedcategories' => array( 'অবিন্যস্ত শ্ৰেণীসমূহ' ), - 'Uncategorizedimages' => array( 'অবিন্যস্ত চিত্ৰবোৰ' ), - 'Uncategorizedtemplates' => array( 'অবিন্যস্ত সাঁচবোৰ' ), - 'Unusedcategories' => array( 'অব্যৱহৃত শ্ৰেণীসমূহ' ), - 'Unusedimages' => array( 'অব্যৱহৃত চিত্ৰবোৰ' ), - 'Wantedpages' => array( 'আকাংক্ষিত পৃষ্ঠাসমূহ' ), - 'Wantedcategories' => array( 'আকাংক্ষিত শ্ৰেণীসমূহ' ), - 'Allpages' => array( 'সকলোবোৰ পৃষ্ঠা' ), - 'Specialpages' => array( 'বিশেষ পৃষ্ঠাবোৰ' ), + 'Lonelypages' => array( 'অকলশৰীয়া_পৃষ্ঠা' ), + 'Uncategorizedpages' => array( 'অবিন্যস্ত_পৃষ্ঠাসমূহ' ), + 'Uncategorizedcategories' => array( 'অবিন্যস্ত_শ্ৰেণীসমূহ' ), + 'Uncategorizedimages' => array( 'অবিন্যস্ত_চিত্ৰবোৰ' ), + 'Uncategorizedtemplates' => array( 'অবিন্যস্ত_সাঁচবোৰ' ), + 'Unusedcategories' => array( 'অব্যৱহৃত_শ্ৰেণীসমূহ' ), + 'Unusedimages' => array( 'অব্যৱহৃত_চিত্ৰবোৰ' ), + 'Wantedpages' => array( 'আকাংক্ষিত_পৃষ্ঠাসমূহ' ), + 'Wantedcategories' => array( 'আকাংক্ষিত_শ্ৰেণীসমূহ' ), + 'Allpages' => array( 'সকলোবোৰ_পৃষ্ঠা' ), + 'Specialpages' => array( 'বিশেষ_পৃষ্ঠাবোৰ' ), 'Contributions' => array( 'অৱদানবোৰ' ), - 'Mypage' => array( 'মোৰ পৃষ্ঠা' ), - 'Mytalk' => array( 'মোৰ কথোপকথন' ), - 'Mycontributions' => array( 'মোৰ অৱদান' ), - 'Popularpages' => array( 'জনপ্ৰিয় পৃষ্ঠাসমূহ' ), + 'Mypage' => array( 'মোৰ_পৃষ্ঠা' ), + 'Mytalk' => array( 'মোৰ_কথোপকথন' ), + 'Mycontributions' => array( 'মোৰ_অৱদান' ), + 'Popularpages' => array( 'জনপ্ৰিয়_পৃষ্ঠাসমূহ' ), ); $digitTransformTable = array( @@ -114,8 +124,7 @@ $messages = array( 'tog-editsection' => '[সম্পাদনা কৰক] সংযোগৰ দ্বাৰা সম্পাদনা কৰা সক্ৰীয় কৰক', 'tog-editsectiononrightclick' => 'বিষয়ৰ শিৰোণামাত সো-বুটাম টিপা মাৰি সম্পাদনা কৰাতো সক্ৰীয় কৰক (JavaScript)', 'tog-showtoc' => 'শিৰোণামাৰ সুচী দেখুৱাওক (যিবোৰ পৃষ্ঠাত তিনিতাতকৈ বেছি শিৰোণামা আছে)', -'tog-rememberpassword' => 'মোৰ প্ৰৱেশ এই কম্পিউটাৰত মনত ৰাখক', -'tog-editwidth' => 'সম্পাদনা বাকছ সম্পূৰ্ণ ৰূপে ভাবে বহল কৰক', +'tog-rememberpassword' => 'মোৰ প্ৰৱেশ এই কম্পিউটাৰত মনত ৰাখক (সৰ্বাধিক $1 {{PLURAL:$1|দিনলৈ|দিনলৈ}})', 'tog-watchcreations' => 'মই বনোৱা সকলো পৃষ্ঠা মোৰ লক্ষ্য-তালিকাত যোগ কৰক', 'tog-watchdefault' => 'মই সম্পাদনা কৰা সকলো পৃষ্ঠা মোৰ লক্ষ্য-তালিকাত যোগ কৰক', 'tog-watchmoves' => 'মই স্থানান্তৰ কৰা সকলো পৃষ্ঠা মোৰ লক্ষ্য-তালিকাত যোগ কৰক', @@ -259,31 +268,21 @@ $messages = array( 'faqpage' => 'Project:প্ৰায়ে উঠা প্ৰশ্ন', # Vector skin -'vector-action-addsection' => 'বিষয় যোগ', -'vector-action-delete' => 'মচি পেলাওক', -'vector-action-move' => 'স্থানান্তৰ কৰক', -'vector-action-protect' => 'সংৰক্ষিত কৰক', -'vector-action-undelete' => 'মচি পেলাওঁক', -'vector-action-unprotect' => 'অসংৰক্ষিত কৰক', -'vector-namespace-category' => 'বিষয়শ্ৰেণী', -'vector-namespace-help' => 'সহায় পৃষ্ঠা', -'vector-namespace-image' => 'ফাইল', -'vector-namespace-main' => 'পৃষ্ঠা', -'vector-namespace-media' => 'মেডিয়া পৃষ্ঠা', -'vector-namespace-mediawiki' => 'বাৰ্তা', -'vector-namespace-project' => 'প্ৰকল্প পৃষ্ঠা', -'vector-namespace-special' => 'বিশেষ পৃষ্ঠা', -'vector-namespace-talk' => 'কথা-বতৰা', -'vector-namespace-template' => 'টেম্পলেট', -'vector-namespace-user' => 'সদস্য পৃষ্ঠা', -'vector-view-create' => 'সৃষ্টি কৰক', -'vector-view-edit' => 'সম্পাদনা', -'vector-view-history' => 'ইতিহাস চাওঁক', -'vector-view-view' => 'পঢ়ক', -'vector-view-viewsource' => 'উৎস চাওঁক', -'actions' => 'কাৰ্য্যসমূহ', -'namespaces' => 'নামস্থান', -'variants' => 'বিকল্পসমূহ', +'vector-action-addsection' => 'বিষয় যোগ', +'vector-action-delete' => 'মচি পেলাওক', +'vector-action-move' => 'স্থানান্তৰ কৰক', +'vector-action-protect' => 'সংৰক্ষিত কৰক', +'vector-action-undelete' => 'মচি পেলাওঁক', +'vector-action-unprotect' => 'অসংৰক্ষিত কৰক', +'vector-simplesearch-preference' => 'উৎকৃষ্ট সন্ধানৰ দিহা-পোহা সক্ৰিয় কৰক (ভেক্টৰ স্কিনৰ বাবেহে)', +'vector-view-create' => 'সৃষ্টি কৰক', +'vector-view-edit' => 'সম্পাদনা', +'vector-view-history' => 'ইতিহাস চাওঁক', +'vector-view-view' => 'পঢ়ক', +'vector-view-viewsource' => 'উৎস চাওঁক', +'actions' => 'কাৰ্য্যসমূহ', +'namespaces' => 'নামস্থান', +'variants' => 'বিকল্পসমূহ', 'errorpagetitle' => 'ভুল', 'returnto' => '$1 লৈ ঘুৰি যাঁওক ।', @@ -344,6 +343,9 @@ $messages = array( অনুগ্ৰহ কৰি অলপ পাচত এই পৃষ্ঠা চাব প্ৰয়াস কৰক । $1', +'pool-timeout' => 'লকৰ বাবে অপেক্ষা কৰি সময় উকলি গৈছে', +'pool-queuefull' => 'পোল কিউ (pool queue) সমূল', +'pool-errorunknown' => 'অপৰিচিত ত্ৰুটি', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}}ৰ বৃত্তান্ত', @@ -391,6 +393,7 @@ $1', 'viewdeleted' => '$1 চাওক?', 'restorelink' => '{{PLURAL:$1| এটা বিলুপ্ত সম্পাদনা|$1 টা বিলুপ্ত সম্পাদনা}}', 'feedlinks' => 'ফিড:', +'feed-invalid' => 'অবৈধ গ্ৰাহক ফীড প্ৰকাৰ', 'feed-unavailable' => 'সিন্ডিকেশন ফিড মজুত নাই', 'site-rss-feed' => '$1 আৰ এস এস ফিড', 'site-atom-feed' => '$1 এটম ফিড', @@ -423,6 +426,17 @@ $1', # General errors 'error' => 'ভুল', 'databaseerror' => 'তথ্যকোষৰ ভুল', +'dberrortext' => 'এক ডাটাবেচ চিণ্টেক্স ত্ৰুটি ঘটিছে। +ছফ্টৱেৰত থকা কোনো বাগৰ বাবে এনে হব পাৰে। +অন্তিমবাৰ চেষ্টা কৰা ডাটাবেচ কুৱেৰীটো আছিল এনেধৰণৰ: +
    $1
    +"$2" ফাংচনৰ পৰা +ডাটাবেচে প্ৰেৰণ কৰা ত্ৰুটি: "$3: $4".', +'dberrortextcl' => 'এক ডাটাবেচ চিণ্টেক্স ত্ৰুটি ঘটিছে। +অন্তিমবাৰ চেষ্টা কৰা ডাটাবেচ কুৱেৰীটো আছিল এনেধৰণৰ: +"$1" +"$2" ফাংচনৰ পৰা +ডাটাবেচে প্ৰেৰণ কৰা ত্ৰুটি "$3: $4"', 'laggedslavemode' => 'সাবধান: ইয়াত সাম্প্ৰতিক সাল-সলনি নাথাকিব পাৰে', 'readonly' => 'তথ্যকোষ বন্ধ কৰা আছে', 'enterlockreason' => 'বন্ধ কৰাৰ কাৰণ দিয়ক, লগতে কেতিয়ামানে খোলা হব তাকো জনাব।', @@ -482,7 +496,8 @@ $1', 'yourname' => 'সদস্যনাম:', 'yourpassword' => 'আপোনাৰ গুপ্তশব্দ', 'yourpasswordagain' => 'গুপ্তশব্দ আকৌ এবাৰ লিখক', -'remembermypassword' => 'মোৰ প্ৰৱেশ এই কম্পিউটাৰত মনত ৰাখিব', +'remembermypassword' => 'মোৰ প্ৰৱেশ এই কম্পিউটাৰত মনত ৰাখিব (সৰ্বাধিক $1 {{PLURAL:$1|দিনলৈ|দিনলৈ}})', +'securelogin-stick-https' => 'প্ৰৱেশ কৰা পাছত HTTPS-ৰ দ্বাৰা সংযোগ ৰাখক', 'yourdomainname' => 'আপোনাৰ দমেইন:', 'login' => 'প্ৰৱেশ', 'nav-login-createaccount' => 'প্ৰৱেশ/সদস্যভুক্তি', @@ -498,6 +513,7 @@ $1', 'gotaccount' => "আপুনি সদস্য হয়নে? '''$1'''", 'gotaccountlink' => 'প্ৰবেশ', 'createaccountmail' => 'ই-মেইলেৰে', +'createaccountreason' => 'কাৰণ:', 'badretype' => 'আপুনি দিয়া গুপ্ত শব্দ দুটা মিলা নাই।', 'userexists' => 'আপুনি দিয়া সদস্যনাম আগৰে পৰাই ব্যৱহাৰ হৈ আছে। অনুগ্ৰহ কৰি বেলেগ সদস্যনাম এটা বাচনী কৰক।', @@ -524,6 +540,7 @@ $1', 'wrongpasswordempty' => 'দিয়া গুপ্তশব্দতো খালী; অনুগ্ৰহ কৰি আকৌ এবাৰ চেষ্টা কৰক। ।', 'passwordtooshort' => "গুপ্তশব্দ কমেও {{PLURAL:$1|১ তা|$1 তা}} আখৰ হ'ব লাগিব ।", 'password-name-match' => "আপুনাৰ গুপ্তশব্দ আৰু আপুনাৰ সদস্যনাম বেলেগ হ'ব লাগিব", +'password-login-forbidden' => 'এই সদস্যনাম আৰু গুপ্তসব্দৰ ব্যৱহাৰ নিষিদ্ধ কৰা হৈছে ।', 'mailmypassword' => 'ই-মেইলত গুপ্তশব্দ পঠাওক', 'passwordremindertitle' => '{{SITENAME}} ৰ কাৰণে নতুন অস্থায়ী গুপ্তশব্দ', 'passwordremindertext' => 'কোনোবাই (হয়তো আপুনি, $1 আই-পি ঠিকনাৰ পৰা) @@ -562,6 +579,9 @@ $1', অনুগ্ৰহ কৰি কিছু সময় অপেক্ষা কৰি আকৌ প্ৰয়াস কৰক ।', 'loginlanguagelabel' => 'ভাষা: $1', +# E-mail sending +'php-mail-error-unknown' => 'পি-এইছ-পি mail() ফলনত অজ্ঞাত ত্ৰুটি', + # Password reset dialog 'resetpass' => 'গুপ্তশব্দ শলনি', 'resetpass_announce' => 'আপুনি ই-মেইলত পোৱা অস্থায়ী গুপ্তশব্দৰে প্ৰৱেশ কৰিছে। @@ -612,11 +632,12 @@ $1', 'showdiff' => 'সালসলনিবোৰ দেখুৱাওক', 'anoneditwarning' => "'''সাৱধান:''' আপুনি প্ৰৱেশ কৰা নাই । এই পৃষ্ঠাৰ ইতিহাসত আপোনাৰ আই পি ঠিকনা সংৰক্ষিত কৰা হ'ব।", +'anonpreviewwarning' => "''আপুনি প্ৰৱেশ কৰা নাই । আপুনাৰ সম্পদনা সাঁচিলে আপুনাৰ আই-পি ঠিকনা এই পৃষ্ঠাৰ ইতিহাসত সংৰক্ষিত কৰা হব।\"", 'missingsummary' => "'''স্মাৰক:''' আপুনি সম্পাদনা সাৰাংশ দিয়া নাই। আপুনি আৰু এবাৰ সংৰক্ষণৰ বাবে ক্লীক কৰিলে সাৰাংশৰ অবিহনে সংৰক্ষিত হব।", 'missingcommenttext' => 'অনুগ্ৰহ কৰি তলত মন্তব্য এটা দিয়্ক।', 'missingcommentheader' => "'''স্মাৰক:''' আপুনি এই মন্তব্যটোত শিৰোণামা দিয়া নাই। -যদি আকৌ এবাৰ সংৰক্ষিত কৰে, তেনেহলে শিৰোণামা অবিহনে সংৰক্ষিত হব।", +যদি আকৌ এবাৰ যদি \"{{int:savearticle}}\" টিপে, তেনেহলে সম্পাদনা শিৰোণামা অবিহনে সংৰক্ষিত হব।", 'summary-preview' => 'সাৰাংশৰ খচৰা:', 'subject-preview' => 'বিষয়/শিৰোণামাৰ খচৰা:', 'blockedtitle' => 'সদস্যজনক অবৰোধ কৰা হৈছে', @@ -721,8 +742,6 @@ $1ৰ দ্বাৰ এই অবৰোধ কৰা হৈছে । ইয়াত আপোনাৰ লিখনি দিয়াৰ লগে লগে আপুনি আপোনা-আপুনি প্ৰতিশ্ৰুতি দিছে যে এই লিখনিটো আপোনাৰ মৌলিক লিখনি, বা কোনো স্বত্বাধিকাৰ নথকা বা কোনো ৰাজহুৱা ৱেবছাইট বা তেনে কোনো মুকলি উৎসৰ পৰা আহৰণ কৰা| (অধিক জানিবলৈ $1 চাঁওক) '''স্বত্বাধিকাৰযুক্ত কোনো সমল অনুমতি অবিহনে দাখিল নকৰে যেন!'''", -'longpagewarning' => "'''সাবধান: এই পৃষ্ঠাটো $1 কিলোবাইট আকাৰৰ; কিছুমান ব্ৰাউজাৰে ৩২ কিলোবাইটৰ বা তাতকৈ বেছি আকাৰৰ পৃষ্ঠা দেখুৱাবলৈ বা সম্পাদনা কৰিবলৈ অসুবিধা পাব পাৰে । -অনুগ্ৰহ কৰি এই পৃষ্ঠাটোক সৰু সৰু খণ্ডত বিভক্ত কৰাৰ কথা বিবেচনা কৰক ।'''", 'longpageerror' => "'''ভুল: আপুনি দিয়া লিখনী $1 কিলো-বাইট আকাৰৰ, যি $2 কিলো-বাইট সীমাটকৈ বেছি। ইয়াক সঞ্চিত কৰিব পৰা নাযাব।'''", 'protectedpagewarning' => "সকিয়নি: এই পৃষ্ঠা বন্ধ ৰখা হৈছে; কেৱল এডমিনিষ্ট্ৰেটৰ মৰ্যদাৰ সদস্যই হে সম্পাদনা কৰিব পাৰিব ।''' @@ -826,6 +845,8 @@ $1ৰ দ্বাৰ এই অবৰোধ কৰা হৈছে । 'revdelete-unsuppress' => 'পুনৰ্স্থাপন কৰা সংশোধনসমূহৰ সীমাবদ্ধতা আতৰাওঁক', 'revdelete-log' => 'কাৰণ:', 'revdel-restore' => 'দৃষ্টিপাত সালসলনি কৰক', +'revdel-restore-deleted' => 'বাতিল কৰা সংশোধনসমূহ', +'revdel-restore-visible' => 'দৃশ্যমান সংশোধনসমূহ', 'pagehist' => 'পৃষ্ঠা ইতিহাস', 'deletedhist' => 'মচি পেলোৱা ইতিহাস', 'revdelete-content' => 'বিষয়বস্তু', @@ -864,10 +885,13 @@ $1ৰ দ্বাৰ এই অবৰোধ কৰা হৈছে । # Diffs 'history-title' => '"$1" ৰ সাল-সলনিৰ ইতিহাস', 'difference' => 'বিভিন্ন সংস্কৰণৰ প্ৰভেদ', +'difference-multipage' => '(পৃষ্ঠাসমূহৰ মাজত তফাৎ)', 'lineno' => '$1 নং শাৰীঃ', 'compareselectedversions' => 'নিৰ্বাচিত কৰা সংকলন সমূহৰ মাজত পাৰ্থক্য চাঁওক ।', 'showhideselectedversions' => 'নিৰ্বাচিত সংশোধনসমূহ দেখোৱাওঁক/আঁৰ কৰক', 'editundo' => 'পূৰ্ববত কৰক', +'diff-multi' => '({{PLURAL:$2|এজন সদস্যৰ|$2জন সদস্যৰ}} দ্বাৰা {{PLURAL:$1|এটা মধ্যৱৰ্তী সংশোধন|$1-টা মধ্যৱৰ্তী সংশোধন}} দেখোৱা হোৱা নাই)', +'diff-multi-manyusers' => '({{PLURAL:$2|এজনতকৈ|$2-জনতকৈ}} অধিক সদস্যৰ দ্বাৰা {{PLURAL:$1|এটা মধ্যৱৰ্তী সংশোধন|$1-টা মধ্যৱৰ্তী সংশোধন}} দেখোৱা হোৱা নাই)', # Search results 'searchresults' => 'অনুসন্ধানৰ ফলাফল', @@ -972,6 +996,7 @@ $1ৰ দ্বাৰ এই অবৰোধ কৰা হৈছে । 'contextlines' => 'প্ৰতি শাৰী দৰ্শন:', 'contextchars' => 'প্ৰতি শাৰীত সন্দৰ্ভ:', 'stub-threshold' => 'আধাৰ সংযোগ ৰ সৰ্বোচ্চ আকাৰ (বাইটত):', +'stub-threshold-disabled' => 'নিস্ক্ৰিয়', 'recentchangesdays' => 'শেহতীয়া সাল-সলনীত দেখুৱাব লগা দিন:', 'recentchangesdays-max' => 'সৰ্বোচ্চ $1 {{PLURAL:$1|দিন|দিন}}', 'recentchangescount' => 'শেহতীয়া সাল-সলনী, ইতিহাস আৰু লগ পৃষ্ঠাত দেখুৱাব লগা সম্পাদনাৰ সংখ্যা:', @@ -1029,9 +1054,15 @@ $1ৰ দ্বাৰ এই অবৰোধ কৰা হৈছে । 'prefs-advancedrendering' => 'উচ্চতৰ উপায়ান্তৰ সমূহ', 'prefs-advancedsearchoptions' => 'উচ্চতৰ উপায়ান্তৰ সমূহ', 'prefs-advancedwatchlist' => 'উচ্চতৰ উপায়ান্তৰ সমূহ', -'prefs-display' => 'প্ৰদৰ্শনী উপায়ান্তৰ সমূহ', +'prefs-displayrc' => 'প্ৰদৰ্শনী উপায়ান্তৰ সমূহ', +'prefs-displaysearchoptions' => 'বিকল্প প্ৰদৰ্শন কৰক', +'prefs-displaywatchlist' => 'বিকল্প প্ৰদৰ্শন কৰক', 'prefs-diffs' => 'পাৰ্থক্য', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'ই-মেইল ঠিকনাটো সঠিক', +'email-address-validity-invalid' => 'সঠিক ই-মেইল ঠিকনা প্ৰদান কৰক', + # User rights 'userrights' => 'সদস্যৰ অধিকাৰ ব্যৱস্থাপনা', 'userrights-lookup-user' => 'সদস্য গোটবোৰ ব্যৱস্থাপনা কৰক', @@ -1170,7 +1201,9 @@ $1ৰ দ্বাৰ এই অবৰোধ কৰা হৈছে । 'ignorewarnings' => 'সকলো সতৰ্কবাণী আওকাণ কৰক', 'minlength1' => "ফাইলনাম কমেও এটা আখৰৰ হ'ব লাগে ।", 'badfilename' => 'ফাইলনাম "$1"-লৈ সলনি কৰা হ\'ল ।', -'successfulupload' => "আপলোড সফল হ'ল", +'empty-file' => 'আপুনি দাখিল কৰা ফাইলখন খালী ।', +'illegal-filename' => 'ফাইলৰ এই নামটো গ্ৰহনযোগ্য নহয় ।', +'tmp-create-error' => 'অস্থায়ী ফাইল তৈয়াৰ কৰিব পৰা নহ’ল |', 'uploadwarning' => 'আপলোড সতৰ্কবাণী', 'savefile' => 'সংৰক্ষণ', 'uploadedimage' => '"[[$1]]" আপলোড কৰা হ’ল', @@ -1180,6 +1213,8 @@ $1ৰ দ্বাৰ এই অবৰোধ কৰা হৈছে । 'upload-description' => 'ফাইলৰ বৰ্ণনা', 'upload-options' => "আপল'ড বিকল্পসমূহ", 'watchthisupload' => 'এই ফাইল লক্ষ্য কৰক', +'upload-success-subj' => "আপলোড সফল হ'ল", +'upload-warning-subj' => 'আপলোড সতৰ্কীকৰণ', # Special:ListFiles 'imgfile' => 'ফাইল', @@ -1346,19 +1381,19 @@ $1ৰ দ্বাৰ এই অবৰোধ কৰা হৈছে । 'listgrouprights-removegroup-all' => 'সমস্ত গোট আঁতৰাওক', # E-mail user -'emailuser' => 'এই সদস্যজনলৈ ই-মেইল পথাওক', -'emailfrom' => 'প্ৰেৰক', -'emailsubject' => 'বিষয়', -'emailmessage' => 'বাৰ্তা', -'emailsend' => 'প্ৰেৰণ কৰক', -'emailccme' => 'মোৰ বাৰ্তাৰ এটা প্ৰতিলিপি মোলৈ ই-মেইল কৰক', -'emailsent' => 'ই-মেইল প্ৰেৰণ কৰা হ’ল', -'emailsenttext' => 'আপোনাৰ ই-মেইল বাৰ্তা প্ৰেৰণ কৰা হৈছে', +'emailuser' => 'এই সদস্যজনলৈ ই-মেইল পথাওক', +'usermaildisabled' => 'ব্যৱহাৰকাৰীৰ ই-মেইল নিষ্ক্ৰিয়', +'emailfrom' => 'প্ৰেৰক', +'emailsubject' => 'বিষয়', +'emailmessage' => 'বাৰ্তা', +'emailsend' => 'প্ৰেৰণ কৰক', +'emailccme' => 'মোৰ বাৰ্তাৰ এটা প্ৰতিলিপি মোলৈ ই-মেইল কৰক', +'emailsent' => 'ই-মেইল প্ৰেৰণ কৰা হ’ল', +'emailsenttext' => 'আপোনাৰ ই-মেইল বাৰ্তা প্ৰেৰণ কৰা হৈছে', # Watchlist 'watchlist' => 'মই অনুসৰণ কৰা পৃষ্ঠাবিলাকৰ তালিকা', 'mywatchlist' => 'মই চকু ৰখা পৃষ্ঠাবোৰৰ তালিকা', -'watchlistfor' => "('''$1''' ৰ কাৰনে)", 'watchnologin' => 'প্ৰৱেশ কৰা নাই', 'addedwatch' => 'লক্ষ্য তালিকাত অন্তৰ্ভুক্তি কৰা হল', 'addedwatchtext' => 'আপোনাৰ [[Special:Watchlist|লক্ষ্য তালিকাত ]] "[[:$1]]" অন্তৰ্ভুক্তি কৰা হ\'ল । @@ -1478,11 +1513,13 @@ $1ৰ দ্বাৰ এই অবৰোধ কৰা হৈছে । 'sp-contributions-newbies-title' => 'সদস্যৰ বৰঙণি নতুন একাউন্টৰ বাবে', 'sp-contributions-blocklog' => 'বাৰণ সূচী', 'sp-contributions-deleted' => 'ৰদ কৰা সদস্যৰ বৰঙণিসমূহ', +'sp-contributions-uploads' => 'আপলোডসমূহ', 'sp-contributions-logs' => 'অভিলেখ', 'sp-contributions-talk' => 'আলোচনা', 'sp-contributions-userrights' => 'সদস্যৰ অধিকাৰ ব্যৱস্থাপনা', 'sp-contributions-search' => 'বৰঙণিসমূহৰ কাৰণে অনুসন্ধান কৰক', 'sp-contributions-username' => 'আইপি ঠিকনা অথবা ব্যৱহাৰকৰ্তাৰ নাম:', +'sp-contributions-toponly' => 'কেৱল সামপ্ৰতিক সংশোধনসমূহ দেখোৱাওঁক', 'sp-contributions-submit' => 'সন্ধান কৰক', # What links here @@ -1672,6 +1709,7 @@ $1ৰ দ্বাৰ এই অবৰোধ কৰা হৈছে । 'tooltip-compareselectedversions' => 'এই পৃষ্ঠাত নিৰ্বাচিত কৰা দুটা অৱতৰৰ মাজত পাৰ্থক্য দেখুৱাওক ।', 'tooltip-watch' => 'এই পৃষ্ঠাটো আপোনাৰ অনুসৰণতালিকাভুক্ত কৰক', 'tooltip-upload' => 'আপলোড আৰম্ভ কৰক', +'tooltip-summary' => 'চমু সাৰাংশ লিখক', # Attribution 'anonymous' => '{{SITENAME}}ৰ বেনামী {{PLURAL:$1|সদস্য|সদস্যসকল}}', @@ -1710,12 +1748,14 @@ $1ৰ দ্বাৰ এই অবৰোধ কৰা হৈছে । 'nextdiff' => 'নতুনতৰ সম্পাদনা →', # Media information -'file-info-size' => '($1 × $2 পিক্সেল, ফাইলৰ মাত্ৰা: $3, MIME প্ৰকাৰ: $4)', +'file-info' => 'ফাইল আকাৰ: $1, MIME ধৰণ: $2', +'file-info-size' => '$1 × $2 পিক্সেল, ফাইলৰ মাত্ৰা: $3, MIME প্ৰকাৰ: $4', 'file-nohires' => 'ইয়াতকৈ ডাঙৰকৈ দেখুৱাব নোৱাৰি ।', -'svg-long-desc' => '(SVG ফাইল, সাধাৰণতঃ $1 × $2 পিক্সেল, ফাইল মাত্ৰা: $3)', +'svg-long-desc' => 'SVG ফাইল, সাধাৰণতঃ $1 × $2 পিক্সেল, ফাইল মাত্ৰা: $3', 'show-big-image' => 'সম্পূৰ্ণ দৃশ্য', 'show-big-image-thumb' => 'এই খচৰাৰ আকাৰ: $1 × $2 পিক্সেল ', 'file-info-gif-frames' => '$1 {{PLURAL:$1|ফ্ৰেম|ফ্ৰেম}}', +'file-info-png-repeat' => "$1 {{PLURAL:$1|বাৰ|বাৰ}} চলোৱা হ'ল", # Special:NewFiles 'newimages' => 'নতুন ফাইলৰ বিথীকা', @@ -1749,6 +1789,7 @@ $1ৰ দ্বাৰ এই অবৰোধ কৰা হৈছে । 'exif-datetime' => 'ফাইল সলনিৰ তাৰিখ আৰু সময়', 'exif-imagedescription' => 'চিত্ৰ শিৰোনামা', 'exif-artist' => 'স্ৰষ্টা', +'exif-objectname' => 'চমু শীৰ্ষক', 'exif-orientation-1' => 'সাধাৰণ', @@ -1820,13 +1861,15 @@ $1ৰ দ্বাৰ এই অবৰোধ কৰা হৈছে । 'watchlisttools-raw' => 'কেঁচা লক্ষ্য-তালিকা সম্পাদনা কৰক', # Special:Version -'version' => 'সংস্কৰণ', -'version-specialpages' => 'বিশেষ পৃষ্ঠাসমূহ', -'version-other' => 'অন্য', -'version-version' => '(সংস্কৰণ $1)', -'version-license' => 'লাইচেঞ্চ', -'version-software-product' => 'পণ্য', -'version-software-version' => 'সংস্কৰণ', +'version' => 'সংস্কৰণ', +'version-specialpages' => 'বিশেষ পৃষ্ঠাসমূহ', +'version-other' => 'অন্য', +'version-version' => '(সংস্কৰণ $1)', +'version-license' => 'লাইচেঞ্চ', +'version-poweredby-credits' => "এই ৱিকি '''[http://www.mediawiki.org/ মিডিয়াৱিকিৰ]''' দ্বাৰা প্ৰচলিত , কপিৰাইট © ২০০১-$1 $2.", +'version-poweredby-others' => 'অন্য', +'version-software-product' => 'পণ্য', +'version-software-version' => 'সংস্কৰণ', # Special:FilePath 'filepath' => 'ফাইল পথ', @@ -1872,6 +1915,15 @@ $1ৰ দ্বাৰ এই অবৰোধ কৰা হৈছে । 'tags-edit' => 'সম্পাদনা', 'tags-hitcount' => '$1 {{PLURAL:$1|সাল-সলনি|সাল-সলনিসমূহ}}', +# Special:ComparePages +'comparepages' => 'পৃষ্ঠা তুলনা কৰক', +'compare-selector' => 'পৃষ্ঠা পুনৰীক্ষন তুলনা কৰক', +'compare-page1' => 'পৃষ্ঠা ১', +'compare-page2' => 'পৃষ্ঠা ২', +'compare-rev1' => 'পুনৰীক্ষন ১', +'compare-rev2' => 'পুনৰীক্ষন ২', +'compare-submit' => 'তুলনা কৰক', + # Database error messages 'dberr-header' => 'এই ৱিকিট কেতবোৰ জেং লাগিছে', @@ -1881,6 +1933,7 @@ $1ৰ দ্বাৰ এই অবৰোধ কৰা হৈছে । 'htmlform-float-invalid' => 'অপুনি ধায্য কৰা মান সংখ্যা নহয়', 'htmlform-int-toolow' => 'আপুনি ধায্য কৰা মান ন্যূনতম $1 তকৈ তলত', 'htmlform-int-toohigh' => 'আপুনি ধায্য কৰা মান অধিকতম $1 তকৈ ওপৰত', +'htmlform-required' => 'এই মান আৱশ্যক', 'htmlform-submit' => 'দাখিল কৰক', 'htmlform-reset' => 'সাল-সলনি পণ্ড কৰক', 'htmlform-selectorother-other' => 'অন্য', diff --git a/languages/messages/MessagesAst.php b/languages/messages/MessagesAst.php index 58b4d747..bbb488f5 100644 --- a/languages/messages/MessagesAst.php +++ b/languages/messages/MessagesAst.php @@ -49,6 +49,12 @@ $namespaceAliases = array( 'Categoría_discusión' => NS_CATEGORY_TALK, ); +$specialPageAliases = array( + 'Statistics' => array( 'Estadístiques' ), + 'Log' => array( 'Rexistru' ), + 'Blockip' => array( 'Bloquiar', 'BloquiarIP', 'BloquiarUsuariu' ), +); + $messages = array( # User preference toggles 'tog-underline' => 'Sorrayar enllaces:', @@ -65,8 +71,7 @@ $messages = array( 'tog-editsection' => "Activar la edición de seiciones per aciu d'enllaces [editar]", 'tog-editsectiononrightclick' => 'Activar la edición de seiciones calcando col botón
    drechu enriba los títulos de seición (JavaScript)', 'tog-showtoc' => 'Amosar índiz (pa páxines con más de 3 encabezaos)', -'tog-rememberpassword' => 'Recordar la clave ente sesiones', -'tog-editwidth' => "Estenderexar la caxa d'edición pa que ocupe tola pantalla.", +'tog-rememberpassword' => 'Recordar la mio identificación nesti ordenador (por un máximu de $1 {{PLURAL:$1|día|díes}})', 'tog-watchcreations' => 'Añader les páxines que creo a la mio llista de vixilancia', 'tog-watchdefault' => "Añader les páxines qu'edito a la mio llista de vixilancia", 'tog-watchmoves' => 'Añader les páxines que muevo a la mio llista de vixilancia', @@ -93,10 +98,10 @@ $messages = array( 'tog-watchlisthideliu' => "Ocultar ediciones d'usuarios rexistraos na llista de vixilancia", 'tog-watchlisthideanons' => "Ocultar ediciones d'usuarios anónimos na llista de vixilancia", 'tog-watchlisthidepatrolled' => 'Anubrir les ediciones patrullaes de la llista de vixilancia', -'tog-nolangconversion' => 'Deshabilitar la conversión de variantes de llingua', +'tog-nolangconversion' => 'Desactivar la conversión de variantes', 'tog-ccmeonemails' => 'Mandame copies de los correos que mando a otros usuarios', 'tog-diffonly' => 'Nun amosar el conteníu de la páxina embaxo de les diferencies', -'tog-showhiddencats' => 'Amosar categoríes ocultes', +'tog-showhiddencats' => 'Amosar categoríes anubríes', 'tog-norollbackdiff' => 'Desanicier les diferencies depués de restaurar', 'underline-always' => 'Siempre', @@ -212,31 +217,21 @@ $messages = array( 'faqpage' => 'Project:Entrugues más frecuentes', # Vector skin -'vector-action-addsection' => 'Amestar asuntu', -'vector-action-delete' => 'Desaniciar', -'vector-action-move' => 'Treslladar', -'vector-action-protect' => 'Protexer', -'vector-action-undelete' => 'Des-desaniciar', -'vector-action-unprotect' => 'Desprotexer', -'vector-namespace-category' => 'Categoría', -'vector-namespace-help' => "Páxina d'ayuda", -'vector-namespace-image' => 'Ficheru', -'vector-namespace-main' => 'Páxina', -'vector-namespace-media' => 'Páxina de multimedia', -'vector-namespace-mediawiki' => 'Mensaxe', -'vector-namespace-project' => 'Páxina de proyeutu', -'vector-namespace-special' => 'Páxina especial', -'vector-namespace-talk' => 'Alderique', -'vector-namespace-template' => 'Plantía', -'vector-namespace-user' => "Páxina d'usuariu", -'vector-view-create' => 'Crear', -'vector-view-edit' => 'Editar', -'vector-view-history' => 'Ver historial', -'vector-view-view' => 'Lleer', -'vector-view-viewsource' => 'Ver códigu fonte', -'actions' => 'Aiciones', -'namespaces' => 'Espacios de nome', -'variants' => 'Variantes', +'vector-action-addsection' => 'Amestar asuntu', +'vector-action-delete' => 'Desaniciar', +'vector-action-move' => 'Treslladar', +'vector-action-protect' => 'Protexer', +'vector-action-undelete' => 'Des-desaniciar', +'vector-action-unprotect' => 'Desprotexer', +'vector-simplesearch-preference' => 'Activar suxerencies de gueta enantaes (piel Vector namái)', +'vector-view-create' => 'Crear', +'vector-view-edit' => 'Editar', +'vector-view-history' => 'Ver historial', +'vector-view-view' => 'Lleer', +'vector-view-viewsource' => 'Ver códigu fonte', +'actions' => 'Aiciones', +'namespaces' => 'Espacios de nome', +'variants' => 'Variantes', 'errorpagetitle' => 'Error', 'returnto' => 'Tornar a $1.', @@ -297,6 +292,9 @@ Hai demasiaos usuarios intentando ver esta páxina. Espera un momentu enantes d'intentar acceder a esta páxina. $1", +'pool-timeout' => 'Tiempu escosáu esperando pol bloquéu', +'pool-queuefull' => "La cola d'agrupación ta llena", +'pool-errorunknown' => 'Error desconocíu', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Tocante a {{SITENAME}}', @@ -339,7 +337,7 @@ $1", 'editsectionhint' => 'Editar seición: $1', 'toc' => 'Tabla de conteníos', 'showtoc' => 'amosar', -'hidetoc' => 'esconder', +'hidetoc' => 'anubrir', 'thisisdeleted' => '¿Ver o restaurar $1?', 'viewdeleted' => '¿Ver $1?', 'restorelink' => '{{PLURAL:$1|una edición desaniciada|$1 ediciones desaniciaes}}', @@ -461,9 +459,10 @@ Ten en cuenta que dalgunes páxines puen siguir apaeciendo como si tovía tuvier Se creó la to cuenta. Nun t'escaezas d'escoyer les tos [[Special:Preferences|preferencies de {{SITENAME}}]].", 'yourname' => "Nome d'usuariu:", -'yourpassword' => 'Clave:', +'yourpassword' => 'Contraseña:', 'yourpasswordagain' => 'Reescribi la to clave:', -'remembermypassword' => 'Recordar la mio identificación nesti ordenador', +'remembermypassword' => 'Recordar la mio identificación nesti ordenador (por un máximu de $1 {{PLURAL:$1|día|díes}})', +'securelogin-stick-https' => "Siguir coneutáu al HTTPS dempués d'identificate", 'yourdomainname' => 'El to dominiu:', 'externaldberror' => "O hebo un error de l'autenticación esterna de la base de datos o nun tienes permisu p'actualizar la to cuenta esterna.", 'login' => 'Entrar', @@ -471,15 +470,16 @@ Nun t'escaezas d'escoyer les tos [[Special:Preferences|preferencies de {{SITENAM 'loginprompt' => "Has tener les ''cookies'' activaes pa entrar en {{SITENAME}}.", 'userlogin' => 'Entrar / Crear cuenta', 'userloginnocreate' => 'Entrar', -'logout' => 'Salir', -'userlogout' => 'Salir', +'logout' => 'Colar', +'userlogout' => 'Colar', 'notloggedin' => 'Non identificáu', 'nologin' => "¿Nun tienes una cuenta? '''$1'''.", 'nologinlink' => '¡Fai una!', -'createaccount' => 'Crear una nueva cuenta', +'createaccount' => 'Crear una cuenta', 'gotaccount' => "¿Ya tienes una cuenta? '''$1'''.", 'gotaccountlink' => '¡Identifícate!', 'createaccountmail' => 'per e-mail', +'createaccountreason' => 'Motivu:', 'badretype' => "Les claves qu'escribisti nun concuayen.", 'userexists' => "El nome d'usuariu conseñáu yá esiste. Por favor escueyi un nome diferente.", 'loginerror' => "Error d'identificación", @@ -500,6 +500,7 @@ Mira que tea bien escritu.', 'wrongpasswordempty' => 'La clave taba en blanco. Inténtalo otra vuelta.', 'passwordtooshort' => 'Les contraseñes han de tener a lo menos {{PLURAL:$1|1 caráuter|$1 caráuteres}}.', 'password-name-match' => "La contraseña tien de ser distinta del nome d'usuariu.", +'password-login-forbidden' => "Ta torgao usar esti nome d'usuariu y contraseña.", 'mailmypassword' => 'Unviar la clave nueva', 'passwordremindertitle' => 'Nueva clave provisional pa {{SITENAME}}', 'passwordremindertext' => 'Daquién (seique tu, dende la direición IP $1) solicitó una clave @@ -541,10 +542,14 @@ Por favor espera enantes d'intentalo otra vuelta.", 'loginlanguagelabel' => 'Llingua: $1', 'suspicious-userlogout' => "Se negó la petición de desconexón porque paez que vien d'un restolador frañáu o d'un proxy de caché.", +# E-mail sending +'php-mail-error-unknown' => 'Error desconocíu na función mail() de PHP', + # Password reset dialog 'resetpass' => 'Camudar la clave', 'resetpass_announce' => "T'identificasti con una clave temporal unviada per corréu. P'acabar d'identificate has d'escribir equí una clave nueva:", +'resetpass_text' => '', 'resetpass_header' => 'Camudar la clave de la cuenta', 'oldpassword' => 'Clave vieya:', 'newpassword' => 'Clave nueva:', @@ -593,6 +598,7 @@ Seique yá camudasti la clave temporal o que solicitasti otra nueva.", 'showlivepreview' => 'Vista rápida', 'showdiff' => 'Amosar cambeos', 'anoneditwarning' => "'''Avisu:''' Nun tas identificáu. La to IP va quedar grabada nel historial d'edición d'esta páxina.", +'anonpreviewwarning' => "''Nun tas identificáu. Al guardar se rexistrará la to direición IP nel historial d'edición d'esta páxina.''", 'missingsummary' => "'''Recordatoriu:''' Nun escribisti un resume d'edición. Si vuelves a calcar en \"{{int:savearticle}}\", la to edición se guardará ensin nengún resume.", 'missingcommenttext' => 'Por favor, escribi un comentariu embaxo.', @@ -670,7 +676,11 @@ La cabera entrada del rexistru de bloqueos s'ufre darréu pa referencia:", 'usercsspreview' => "'''Recuerda que namái tas previsualizando'l to CSS d'usuariu.''' '''¡Tovía nun ta guardáu!'''", 'userjspreview' => "'''¡Recuerda que namái tas probando/previsualizando'l to JavaScript d'usuariu, entá nun se grabó!'''", -'userinvalidcssjstitle' => "'''Avisu:''' Nun hai piel \"\$1\". Recuerda que les páxines personalizaes .css y .js usen un títulu en minúscules, p. ex. {{ns:user}}:Foo/monobook.css en cuenta de {{ns:user}}:Foo/Monobook.css.", +'sitecsspreview' => "'''Recuerda que namái tas previsualizando esti CSS.''' +'''¡Tovía nun ta guardáu!'''", +'sitejspreview' => "'''¡Recuerda que namái tas probando esti códigu JavaScript''' +'''¡Tovía nun tá guardáu!'''", +'userinvalidcssjstitle' => "'''Avisu:''' Nun hai piel \"\$1\". Recuerda que les páxines personalizaes .css y .js usen un títulu en minúscules, p. ex. {{ns:user}}:Foo/vector.css en cuenta de {{ns:user}}:Foo/Vector.css.", 'updated' => '(Actualizao)', 'note' => "'''Nota:'''", 'previewnote' => "'''¡Alcuérdate de qu'esto ye sólo una previsualización y los cambeos entá nun se grabaron!'''", @@ -705,9 +715,6 @@ Amás tas dexándonos afitao qu'escribisti esto tu mesmu o que lo copiasti d'una 'copyrightwarning2' => "Por favor, ten en cuenta que toles contribuciones de {{SITENAME}} se puen editar, alterar o desaniciar por otros usuarios. Si nun quies que'l to trabayu s'edite ensin midida, nun lu pongas equí.
    Amás tas dexándonos afitao qu'escribisti esto tu mesmu, o que lo copiasti d'una fonte llibre de dominiu públicu o asemeyao (ver $1 pa más detalles). '''¡Nun pongas trabayos con drechos d'autor ensin permisu!'''", -'longpagewarning' => "'''Avisu:''' Esta páxina tien más de $1 quilobytes; -dellos navegadores puen tener problemes pa editar páxines de 32 ó más kb. -Piensa en dixebrar la páxina en seiciones más pequeñes.", 'longpageerror' => "'''ERROR: El testu qu'unviasti tien $1 quilobytes, que ye más que'l máximu de $2 quilobytes.''' Nun se pue grabar.", 'readonlywarning' => "'''Avisu: La base de datos ta candada por mantenimientu, polo que nun vas poder guardar les tos ediciones nestos momentos.''' @@ -727,6 +734,7 @@ La cabera entrada del rexistru s'ufre darréu pa referencia:", 'template-protected' => '(protexida)', 'template-semiprotected' => '(semi-protexida)', 'hiddencategories' => 'Esta páxina pertenez a {{PLURAL:$1|una categoría oculta|$1 categoríes ocultes}}:', +'edittools' => "", 'nocreatetitle' => 'Creación de páxines limitada', 'nocreatetext' => '{{SITENAME}} tien restrinxida la capacidá de crear páxines nueves. Pues volver atrás y editar una páxina esistente, o bien [[Special:UserLogin|identificate o crear una cuenta]].', @@ -886,6 +894,8 @@ $1", 'logdelete-failure' => "'''Nun se pudo configurar la visibilidá del rexistru:''' $1", 'revdel-restore' => 'Camudar visibilidá', +'revdel-restore-deleted' => 'revisiones desaniciaes', +'revdel-restore-visible' => 'revisiones visibles', 'pagehist' => 'Historial de la páxina', 'deletedhist' => 'Historial elimináu', 'revdelete-content' => 'conteníu', @@ -907,6 +917,7 @@ Nun tienes accesu al mesmu.', 'revdelete-no-change' => "'''Avisu:''' l'elementu con data $2, $1 yá tien los axustes de visibilidá pidíos.", 'revdelete-concurrent-change' => "Error al camudar l'elementu con data $2, $1: paez que'l so estáu camudólu otra persona mientres tentabes camudalu tu. Comprueba los rexistros, por favor.", +'revdelete-only-restricted' => "Fallu al anubrir l'elementu con data $1, $2: nun se puen quitar elementos de la vista de los alministradores ensin escoyer tamién una de les otres opciones de visibilidá.", 'revdelete-reason-dropdown' => '*Razones comúnes de desaniciu ** Violación del Copyright ** Información personal non apropiada @@ -953,11 +964,13 @@ Asegúrate de qu'esti cambéu caltenga la continuidá del históricu de la páxi # Diffs 'history-title' => 'Historial de revisiones de "$1"', 'difference' => '(Diferencia ente revisiones)', +'difference-multipage' => '(Diferencia ente páxines)', 'lineno' => 'Llinia $1:', 'compareselectedversions' => 'Comparar les versiones seleicionaes', 'showhideselectedversions' => 'Amosar/anubrir les versiones seleicionaes', 'editundo' => 'esfacer', -'diff-multi' => '({{PLURAL:$1|1 revisión intermedia non amosada|$1 revisiones intermedies non amosaes}})', +'diff-multi' => "({{PLURAL:$1|Nun s'amuesa 1 revisión intermedia|Nun s'amuesen $1 revisiones intermedies}} {{PLURAL:$2|d'un usuariu|de $2 usuarios}} )", +'diff-multi-manyusers' => "({{PLURAL:$1|Nun s'amuesa una revisión intermedia|Nun s'amuesen $1 revisiones intermedies}} de más de $2 {{PLURAL:$2|usuariu|usuarios}})", # Search results 'searchresults' => 'Resultaos de la busca', @@ -992,6 +1005,7 @@ Asegúrate de qu'esti cambéu caltenga la continuidá del históricu de la páxi 'searchprofile-everything-tooltip' => "Buscar tol conteníu (incluyendo páxines d'alderique)", 'searchprofile-advanced-tooltip' => 'Buscar en namespaces personalizaos', 'search-result-size' => '$1 ({{PLURAL:$2|1 pallabra|$2 pallabres}})', +'search-result-category-size' => '{{PLURAL:$1|1 miembru|$1 miembros}} ({{PLURAL:$2|1 subcategoría|$2 subcategories}}, {{PLURAL:$3|1 ficheru|$3 ficheros}})', 'search-result-score' => 'Relevancia: $1%', 'search-redirect' => '(redireición a $1)', 'search-section' => '(seición $1)', @@ -1018,7 +1032,7 @@ Asegúrate de qu'esti cambéu caltenga la continuidá del históricu de la páxi 'powersearch-field' => 'Buscar', 'powersearch-togglelabel' => 'Comprobar:', 'powersearch-toggleall' => 'Toos', -'powersearch-togglenone' => 'Dengunu', +'powersearch-togglenone' => 'Dengún', 'search-external' => 'Busca esterna', 'searchdisabled' => "La busca en {{SITENAME}} ta desactivada. Mentanto, pues buscar en Google. Has fixate en que'l conteníu de los sos índices de {{SITENAME}} pue tar desfasáu.", @@ -1066,6 +1080,7 @@ Asegúrate de qu'esti cambéu caltenga la continuidá del históricu de la páxi 'contextlines' => "Llinies p'amosar per resultáu:", 'contextchars' => 'Carauteres de testu per llinia:', 'stub-threshold' => 'Llímite superior pa considerar como enllaz a entamu (bytes):', +'stub-threshold-disabled' => 'Desactivao', 'recentchangesdays' => "Díes qu'amosar nos cambeos recientes:", 'recentchangesdays-max' => '(máximo $1 {{PLURAL:$1|día|díes}})', 'recentchangescount' => "Númberu d'ediciones p'amosar de mou predetermináu:", @@ -1099,6 +1114,7 @@ Equí tienes un valor al debalu que pues usar: $1", 'prefs-files' => 'Archivos', 'prefs-custom-css' => 'CSS personalizada', 'prefs-custom-js' => 'JS personalizada', +'prefs-common-css-js' => 'CSS/JavaScript compartíu pa toles pieles:', 'prefs-reset-intro' => 'Pues usar esta páxina pa reaniciar les preferencies a los valores predeterminaos del sitiu. Esto nun se pue desfacer.', 'prefs-emailconfirm-label' => 'Confirmación del corréu:', @@ -1137,8 +1153,15 @@ Tamién pues escoyer permitir a los demás contautar contigo al traviés de la t 'prefs-advancedrendering' => 'Opciones avanzaes', 'prefs-advancedsearchoptions' => 'Opciones avanzaes', 'prefs-advancedwatchlist' => 'Opciones avanzaes', +'prefs-displayrc' => 'Opciones de vista', +'prefs-displaysearchoptions' => 'Opciones de vista', +'prefs-displaywatchlist' => 'Opciones de vista', 'prefs-diffs' => 'Diferencies', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'La direición de corréu paez válida', +'email-address-validity-invalid' => 'Escribi una direición de corréu válida', + # User rights 'userrights' => "Xestión de permisos d'usuariu", 'userrights-lookup-user' => 'Xestión de grupos del usuariu', @@ -1222,6 +1245,7 @@ Tamién pues escoyer permitir a los demás contautar contigo al traviés de la t 'right-hideuser' => "Bloquiar un nome d'usuariu ocultándolu al públicu", 'right-ipblock-exempt' => "Saltar los bloqueos d'IP, los autobloqueos y los bloqueos d'intervalu", 'right-proxyunbannable' => 'Saltar los bloqueos automáticos de los proxys', +'right-unblockself' => 'Desbloquiase ellos mesmos', 'right-protect' => 'Camudar los niveles de proteición y editar páxines protexíes', 'right-editprotected' => 'Editar les páxines protexíes (ensin proteición en cascada)', 'right-editinterface' => "Editar la interfaz d'usuariu", @@ -1310,7 +1334,7 @@ Tamién pues escoyer permitir a los demás contautar contigo al traviés de la t 'rclinks' => 'Amosar los caberos $1 cambeos nos caberos $2 díes
    $3', 'diff' => 'dif', 'hist' => 'hist', -'hide' => 'Esconder', +'hide' => 'Anubrir', 'show' => 'Amosar', 'minoreditletter' => 'm', 'newpageletter' => 'N', @@ -1342,6 +1366,9 @@ Tamién pues escoyer permitir a los demás contautar contigo al traviés de la t 'upload_directory_missing' => 'El direutoriu de xubida ($1) nun esiste y nun pudo ser creáu pol sirvidor de web.', 'upload_directory_read_only' => "El sirvidor nun pue modificar el direutoriu de xubida d'archivos ($1).", 'uploaderror' => 'Error de xubida', +'upload-recreate-warning' => "'''Avisu: Se desanició o treslladó un ficheru con esi nome.''' + +Equí s'ufre'l rexistru de desaniciu y treslláu d'esta páxina por comodidá:", 'uploadtext' => "Usa'l formulariu d'abaxo pa xubir archivos. Pa ver o buscar archivos xubíos previamente, vete a la [[Special:FileList|llista d'archivos xubíos]]. Les xubíes tamién queden conseñaos nel [[Special:Log/upload|rexistru de xubíes]], y los esborraos nel [[Special:Log/delete|rexistru d'esborraos]]. @@ -1368,13 +1395,25 @@ Mira la [[Special:NewFiles|galería d'archivos nuevos]] pa una güeyada más vis 'minlength1' => "Los nomes d'archivu han tener a lo menos una lletra.", 'illegalfilename' => 'El nome d\'archivu "$1" contién carauteres non permitíos en títulos de páxina. Por favor renoma l\'archivu y xúbilu otra vuelta.', 'badfilename' => 'Nome de la imaxe camudáu a "$1".', +'filetype-mime-mismatch' => 'La estensión del ficheru nun concasa cola triba MIME.', 'filetype-badmime' => 'Los ficheros de la triba MIME "$1" nun tienen permitida la xubida.', 'filetype-bad-ie-mime' => 'Nun se pue xubir esti ficheru porque Internet Explorer detectalu como "$1", que nun ta permitíu y pue ser una triba de ficheru peligrosa.', 'filetype-unwanted-type' => "'''\".\$1\"''' ye una triba de ficheru non recomendáu. {{PLURAL:\$3|La triba de ficheru preferida ye|Les tribes de ficheru preferíes son}} \$2.", -'filetype-banned-type' => "'''\".\$1\"''' nun ye una mena d'archivu permitida. -{{PLURAL:\$3|La mena d'archivu permitida ye|Les menes d'archivu permitíes son}} \$2.", +'filetype-banned-type' => "'''\".\$1\"''' nun ye una triba de ficheru permitida. +{{PLURAL:\$3|La triba de ficheru permitida ye|Les tribes de ficheru permitíes son}} \$2.", 'filetype-missing' => 'El ficheru nun tien estensión (como ".jpg").', +'empty-file' => "El ficheru qu'unviasti taba baleru.", +'file-too-large' => "El ficheru qu'unviasti yera demasiao grande.", +'filename-tooshort' => 'El nome de ficheru ye demasiao curtiu.', +'filetype-banned' => 'Esta triba de ficheru ta torgada.', +'verification-error' => 'Esti ficheru nun pasó la comprobación de ficheros.', +'hookaborted' => 'La conexón con una estensión encaboxó el cambéu que tentasti facer.', +'illegal-filename' => 'El nome de ficheru nun ta permitíu.', +'overwrite' => 'Nun ta permitío sobroscribir un ficheru esistente.', +'unknown-error' => 'Hebo un error desconocíu.', +'tmp-create-error' => 'Nun se pudo crear el ficheru temporal.', +'tmp-write-error' => 'Error al escribir nel ficheru temporal.', 'large-file' => 'Encamiéntase a que los ficheros nun pasen de $1; esti ficheru tien $2.', 'largefileserver' => 'Esti ficheru ye mayor de lo que permite la configuración del sirvidor.', @@ -1407,13 +1446,14 @@ Si tovía asina quies xubir el ficheru, por favor vuelvi atrás y usa otru nome. 'file-exists-duplicate' => 'Esti ficheru ye un duplicáu {{PLURAL:$1|del siguiente ficheru|de los siguientes ficheros}}:', 'file-deleted-duplicate' => 'Yá se desanició enantes un ficheru idénticu a esti ([[:$1]]). Deberíes revisar el historial de desaniciu del ficheru enantes de xubilu otra vuelta.', -'successfulupload' => 'Xubida correuta', 'uploadwarning' => 'Avisu de xubíes de ficheros', 'uploadwarning-text' => 'Por favor, camuda más abaxo la descripción del ficheru y vuelve a tentalo.', 'savefile' => 'Guardar ficheru', 'uploadedimage' => 'xubió "[[$1]]"', 'overwroteimage' => 'xubió una versión nueva de "[[$1]]"', 'uploaddisabled' => 'Deshabilitaes les xubíes', +'copyuploaddisabled' => 'Xubir por URL ta desactivao.', +'uploadfromurl-queued' => 'La to xubía ta na cola.', 'uploaddisabledtext' => 'Les xubíes de ficheros tán desactivaes.', 'php-uploaddisabledtext' => 'Les xubíes de ficheros tan desactivaes en PHP. Por favor, comprueba la configuración de file_uploads.', @@ -1436,6 +1476,28 @@ Habríes considerar si ye afechisco continuar xubiendo esti ficheru. Por comodidá s'amuesa equí'l rexistru de desaniciu d'esti ficheru:", 'filename-bad-prefix' => "El nome del ficheru que tas xubiendo entama con '''\"\$1\"''', que ye un nome non descriptivu que de vezu conseñen automáticamente les cámares dixitales. Por favor escueyi un nome más descriptivu pal to ficheru.", +'filename-prefix-blacklist' => ' #
    +# La sintaxis ye la siguiente:
    +#   * Lo que va del caráuter "#" al fin de llinia ye un comentariu
    +#   * Toa llinia non-balera ye un prefixu pa los nomes de ficheru típicos que ponen les cámares dixitales
    +CIMG # Casio
    +DSC_ # Nikon
    +DSCF # Fuji
    +DSCN # Nikon
    +DUW # dellos teléfonos móviles
    +IMG # xenéricu
    +JD # Jenoptik
    +MGP # Pentax
    +PICT # misc.
    + #
    ', +'upload-success-subj' => 'Xubida correuta', +'upload-success-msg' => 'La xubía de [$2] foi correuta. Ta disponible equí: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problema na xubía', +'upload-failure-msg' => 'Hebo un problema cola to xubía de [$2]: + +$1', +'upload-warning-subj' => 'Avisu de xubía', +'upload-warning-msg' => 'Hebo un problema cola to xubía de [$2]. Pues volver al [[Special:Upload/stash/$1|formulariu de xubía]] pa iguar esti problema.', 'upload-proto-error' => 'Protocolu incorreutu', 'upload-proto-error-text' => "La xubida remota requier que l'URL entame por http:// o ftp://.", @@ -1462,6 +1524,7 @@ Visita http://www.mediawiki.org/wiki/Manual:Image_Authorization.', 'img-auth-nofile' => 'El ficheru "$1" nun esiste.', 'img-auth-isdir' => 'Tas tentando acceder al direutoriu "$1". Namái se permite l\'accesu a ficheros.', +'img-auth-streaming' => 'Unviando "$1".', 'img-auth-public' => "La función de img_auth.php ye sacar ficheros d'una wiki privada. Esta wiki ta configurada como wiki pública. Pa una meyor seguridá, img_auth.php ta desactiváu.", @@ -1498,6 +1561,7 @@ Calcando na cabecera d'una columna camúdase l'orde acordies con ella.", 'listfiles_search_for' => "Buscar por nome d'archivu multimedia:", 'imgfile' => 'archivu', 'listfiles' => "Llista d'imáxenes", +'listfiles_thumb' => 'Miniatura', 'listfiles_date' => 'Fecha', 'listfiles_name' => 'Nome', 'listfiles_user' => 'Usuariu', @@ -1541,6 +1605,7 @@ La descripción de la [páxina de descripción del ficheru $2] s'amuesa darréu. 'uploadnewversion-linktext' => "Xubir una nueva versión d'esta imaxe", 'shared-repo-from' => 'de $1', 'shared-repo' => 'un repositoriu compartíu', +'filepage.css' => "/* El CSS allugáu equí s'incluye na páxina de descripción del ficheru, que tamién s'incluye nes wikis clientes foriates */", # File reversion 'filerevert' => 'Revertir $1', @@ -1611,8 +1676,8 @@ Alcuérdate de comprobar otros enllaces a les plantíes enantes d'esborrales.", 'statistics-edits' => "Ediciones de páxines dende qu'entamó {{SITENAME}}", 'statistics-edits-average' => "Media d'ediciones per páxina", 'statistics-views-total' => 'Visites totales', +'statistics-views-total-desc' => "Les vistes de páxines non-esistentes y especiales nun s'incluyen", 'statistics-views-peredit' => 'Visites por edición', -'statistics-jobqueue' => 'Llonxitú de la [http://www.mediawiki.org/wiki/Manual:Job_queue cola de xeres]', 'statistics-users' => '[[Special:ListUsers|Usuarios]] rexistraos', 'statistics-users-active' => 'Usuarios activos', 'statistics-users-active-desc' => 'Usuarios que realizaron una aición {{PLURAL:$1|nel caberu día|nos caberos $1 díes}}', @@ -1623,7 +1688,9 @@ Alcuérdate de comprobar otros enllaces a les plantíes enantes d'esborrales.", 'disambiguations-text' => "Les siguientes páxines enllacien a una '''páxina de dixebra'''. En cuenta d'ello habríen enllaciar al artículu apropiáu.
    Una páxina considérase de dixebra si usa una plantía que tea enllaciada dende [[MediaWiki:Disambiguationspage]]", 'doubleredirects' => 'Redireiciones dobles', -'doubleredirectstext' => 'Esta páxina llista páxines que redireicionen a otres páxines de redireición. Cada filera contién enllaces a la primer y segunda redireición, asina como al oxetivu de la segunda redireición, que normalmente ye la páxina oxetivu "real", aonde la primer redireición habría empobinar.', +'doubleredirectstext' => 'Esta páxina llista páxines que redireicionen a otres páxines de redireición. +Cada filera contién enllaces a la primer y segunda redireición, asina como al oxetivu de la segunda redireición, que de vezu ye la páxina oxetivu "real", onde tendría d\'empobinar la primer redireición. +Les entraes tachaes tan resueltes.', 'double-redirect-fixed-move' => '[[$1]] foi treslladáu, agora ye una redireición haza [[$2]]', 'double-redirect-fixer' => 'Iguador de redireiciones', @@ -1646,6 +1713,8 @@ Alcuérdate de comprobar otros enllaces a les plantíes enantes d'esborrales.", 'nmembers' => '$1 {{PLURAL:$1|miembru|miembros}}', 'nrevisions' => '$1 {{PLURAL:$1|revisión|revisiones}}', 'nviews' => '$1 {{PLURAL:$1|vista|vistes}}', +'nimagelinks' => 'Usao en $1 {{PLURAL:$1|páxina|páxines}}', +'ntransclusions' => 'usao en $1 {{PLURAL:$1|páxina|páxines}}', 'specialpage-empty' => 'Nun hai resultaos nestos momentos.', 'lonelypages' => 'Páxines güérfanes', 'lonelypagestext' => 'Les páxines siguientes nun tán enllaciaes nin trescluyíes dende otres páxines de {{SITENAME}}.', @@ -1801,36 +1870,42 @@ Pue haber [[{{MediaWiki:Listgrouprights-helppage}}|información adicional]] toca 'listgrouprights-removegroup-self-all' => 'Desaniciar tolos grupos de la cuenta propia', # E-mail user -'mailnologin' => "Ensin direición d'unviu", -'mailnologintext' => 'Has tar [[Special:UserLogin|identificáu]] +'mailnologin' => "Ensin direición d'unviu", +'mailnologintext' => 'Has tar [[Special:UserLogin|identificáu]] y tener una direición de corréu válida nes tos [[Special:Preferences|preferencies]] pa poder unviar correos a otros usuarios.', -'emailuser' => 'Manda-y un email a esti usuariu', -'emailpage' => "Corréu d'usuariu", -'emailpagetext' => "Pues usar el formulariu d'embaxo pa unviar un corréu electrónicu a esti usuariu. +'emailuser' => 'Manda-y un email a esti usuariu', +'emailpage' => "Corréu d'usuariu", +'emailpagetext' => "Pues usar el formulariu d'embaxo pa unviar un corréu electrónicu a esti usuariu. La direición de corréu electrónicu qu'especificasti nes [[Special:Preferences|tos preferencies d'usuariu]] va apaecer como la direición \"Dende\" del corréu, pa que'l que lo recibe seya quien a respondete direutamente a ti.", -'usermailererror' => "L'operador de corréu devolvió un error:", -'defemailsubject' => 'Corréu electrónicu de {{SITENAME}}', -'noemailtitle' => 'Ensin direición de corréu', -'noemailtext' => 'Esti usuariu nun especificó una direición de corréu válida.', -'nowikiemailtitle' => "Nun se permite'l corréu electrónicu", -'nowikiemailtext' => "Esti usuariu nun quier recibir correos d'otros usuarios.", -'email-legend' => 'Unviar un corréu electrónicu a otru usuariu de {{SITENAME}}', -'emailfrom' => 'De:', -'emailto' => 'A:', -'emailsubject' => 'Asuntu:', -'emailmessage' => 'Mensaxe:', -'emailsend' => 'Unviar', -'emailccme' => 'Unviame per corréu una copia del mio mensaxe.', -'emailccsubject' => 'Copia del to mensaxe a $1: $2', -'emailsent' => 'Corréu unviáu', -'emailsenttext' => 'El to corréu foi unviáu.', -'emailuserfooter' => 'Esti corréu electrónicu foi unviáu por $1 a $2 per acidu de la funxión "Manda-y un corréu a un usuariu" de {{SITENAME}}.', +'usermailererror' => "L'operador de corréu devolvió un error:", +'defemailsubject' => 'Corréu electrónicu de {{SITENAME}}', +'usermaildisabled' => 'Corréu del usuariu desactiváu', +'usermaildisabledtext' => "Nun pues unviar corréu a otros usuarios d'esta wiki", +'noemailtitle' => 'Ensin direición de corréu', +'noemailtext' => 'Esti usuariu nun especificó una direición de corréu válida.', +'nowikiemailtitle' => "Nun se permite'l corréu electrónicu", +'nowikiemailtext' => "Esti usuariu nun quier recibir correos d'otros usuarios.", +'email-legend' => 'Unviar un corréu electrónicu a otru usuariu de {{SITENAME}}', +'emailfrom' => 'De:', +'emailto' => 'A:', +'emailsubject' => 'Asuntu:', +'emailmessage' => 'Mensaxe:', +'emailsend' => 'Unviar', +'emailccme' => 'Unviame per corréu una copia del mio mensaxe.', +'emailccsubject' => 'Copia del to mensaxe a $1: $2', +'emailsent' => 'Corréu unviáu', +'emailsenttext' => 'El to corréu foi unviáu.', +'emailuserfooter' => 'Esti corréu electrónicu foi unviáu por $1 a $2 per acidu de la funxión "Manda-y un corréu a un usuariu" de {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Dexar un mensaxe del sistema.', +'usermessage-editor' => 'Mensaxería del sistema', # Watchlist 'watchlist' => 'La mio páxina de vixilancia', 'mywatchlist' => 'La mio páxina de vixilancia', -'watchlistfor' => "(pa '''$1''')", +'watchlistfor2' => 'Pa $1 $2', 'nowatchlist' => 'La to llista de vixilancia ta vacia.', 'watchlistanontext' => 'Por favor $1 pa ver o editar entraes na to llista de vixilancia.', 'watchnologin' => 'Non identificáu', @@ -1937,19 +2012,23 @@ Esborralu pue perturbar les operaciones de la base de datos de {{SITENAME}}; obra con precaución.", # Rollback -'rollback' => 'Revertir ediciones', -'rollback_short' => 'Revertir', -'rollbacklink' => 'revertir', -'rollbackfailed' => 'Falló la reversión', -'cantrollback' => "Nun se pue revertir la edición; el postrer collaborador ye l'únicu autor d'esta páxina.", -'alreadyrolled' => 'Nun se pue revertir la postrer edición de [[:$1]] fecha por [[User:$2|$2]] ([[User talk:$2|alderique]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); +'rollback' => 'Revertir ediciones', +'rollback_short' => 'Revertir', +'rollbacklink' => 'revertir', +'rollbackfailed' => 'Falló la reversión', +'cantrollback' => "Nun se pue revertir la edición; el postrer collaborador ye l'únicu autor d'esta páxina.", +'alreadyrolled' => 'Nun se pue revertir la postrer edición de [[:$1]] fecha por [[User:$2|$2]] ([[User talk:$2|alderique]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); daquién más yá editó o revirtió la páxina. La postrer edición foi fecha por [[User:$3|$3]] ([[User talk:$3|alderique]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).', -'editcomment' => "El resume de la edición yera: \"''\$1''\".", -'revertpage' => 'Revertíes les ediciones de [[Special:Contributions/$2|$2]] ([[User talk:$2|alderique]]) hasta la cabera versión de [[User:$1|$1]]', -'rollback-success' => 'Revertíes les ediciones de $1; camudáu a la última versión de $2.', -'sessionfailure' => 'Paez qu\'hai un problema cola to sesión; por precaución +'editcomment' => "El resume de la edición yera: \"''\$1''\".", +'revertpage' => 'Revertíes les ediciones de [[Special:Contributions/$2|$2]] ([[User talk:$2|alderique]]) hasta la cabera versión de [[User:$1|$1]]', +'revertpage-nouser' => "Revertíes les ediciones de (nome d'usuariu desaniciáu) a la cabera revisión de [[User:$1|$1]]", +'rollback-success' => 'Revertíes les ediciones de $1; camudáu a la última versión de $2.', + +# Edit tokens +'sessionfailure-title' => 'Fallu de sesión', +'sessionfailure' => 'Paez qu\'hai un problema cola to sesión; por precaución cancelóse l\'aición que pidisti. Da-y al botón "Atrás" del navegador pa cargar otra vuelta la páxina y vuelve a intentalo.', @@ -2081,19 +2160,23 @@ $1", 'month' => "Dende'l mes (y anteriores):", 'year' => "Dende l'añu (y anteriores):", -'sp-contributions-newbies' => 'Amosar namái les contribuciones de cuentes nueves', -'sp-contributions-newbies-sub' => 'Namái les cuentes nueves', -'sp-contributions-newbies-title' => "Contribuciones d'usuariu pa cuentes nueves", -'sp-contributions-blocklog' => 'Rexistru de bloqueos', -'sp-contributions-deleted' => "Contribuciones d'usuariu desaniciaes", -'sp-contributions-logs' => 'rexistros', -'sp-contributions-talk' => 'alderique', -'sp-contributions-userrights' => "xestión de permisos d'usuariu", -'sp-contributions-blocked-notice' => "Esti usuariu anguaño ta bloquiáu. +'sp-contributions-newbies' => 'Amosar namái les contribuciones de cuentes nueves', +'sp-contributions-newbies-sub' => 'Namái les cuentes nueves', +'sp-contributions-newbies-title' => "Contribuciones d'usuariu pa cuentes nueves", +'sp-contributions-blocklog' => 'Rexistru de bloqueos', +'sp-contributions-deleted' => "Contribuciones d'usuariu desaniciaes", +'sp-contributions-uploads' => 'xubes', +'sp-contributions-logs' => 'rexistros', +'sp-contributions-talk' => 'alderique', +'sp-contributions-userrights' => "xestión de permisos d'usuariu", +'sp-contributions-blocked-notice' => "Esti usuariu anguaño ta bloquiáu. La cabera entrada del rexistru de bloqueos s'ufre darréu pa referencia:", -'sp-contributions-search' => 'Buscar contribuciones', -'sp-contributions-username' => "Direición IP o nome d'usuariu:", -'sp-contributions-submit' => 'Guetar', +'sp-contributions-blocked-notice-anon' => "Esta IP anguaño ta bloquiada. +La cabera entrada del rexistru de bloqueos s'ufre darréu pa referencia:", +'sp-contributions-search' => 'Buscar contribuciones', +'sp-contributions-username' => "Direición IP o nome d'usuariu:", +'sp-contributions-toponly' => 'Amosar namái les ediciones que son les caberes revisiones', +'sp-contributions-submit' => 'Guetar', # What links here 'whatlinkshere' => "Lo qu'enllaza equí", @@ -2153,7 +2236,6 @@ Esto debería facese sólo pa prevenir vandalismu como indiquen les [[{{MediaWik 'ipb-edit-dropdown' => 'Editar motivos de bloquéu', 'ipb-unblock-addr' => 'Desbloquiar $1', 'ipb-unblock' => "Desbloquiar un nome d'usuariu o direición IP", -'ipb-blocklist-addr' => 'Bloqueos esistentes de $1', 'ipb-blocklist' => 'Ver los bloqueos esistentes', 'ipb-blocklist-contribs' => 'Contribuciones de $1', 'unblockip' => 'Desbloquiar usuariu', @@ -2223,6 +2305,10 @@ $1 yá ta bloquiáu. ¿Quies camudar los parámetros?', 'sorbsreason' => 'La to direición IP sal na llista de proxys abiertos en DNSBL usada por {{SITENAME}}.', 'sorbs_create_account_reason' => 'La to direición IP sal na llista de proxys abiertos en DNSBL usada por {{SITENAME}}. Nun pues crear una cuenta', 'cant-block-while-blocked' => 'Nun pues bloquiar a otros usuarios mentes tu teas bloquiáu.', +'cant-see-hidden-user' => "L'usuariu que tentes bloquiar yá ta bloquiáu y anubríu. +Como nun tienes permisos p'anubrir usuarios, nun pues ver o editar el bloquéu del usuariu.", +'ipbblocked' => 'Nun pues bloquiar o desbloquiar a otros usuarios, porque tas bloquiáu tu mesmu', +'ipbnounblockself' => 'Nun tienes permisu pa desbloquiate tu mesmu', # Developer tools 'lockdb' => 'Protexer la base de datos', @@ -2261,6 +2347,17 @@ Tu yes el responsable de facer que los enllaces queden apuntando aonde se supón Recuerda que la páxina '''nun''' va movese si yá hai una páxina col nuevu títulu, a nun ser que tea vacia o seya una redireición que nun tenga historial. Esto significa que pues volver a renomar una páxina col nome orixinal si t'enquivoques, y que nun pues sobreescribir una páxina yá esistente. +¡AVISU!''' +Esti pue ser un cambéu importante y inesperáu pa una páxina popular; +por favor, asegúrate d'entender les consecuencies de lo que vas facer enantes de siguir.", +'movepagetext-noredirectfixer' => "Usando'l siguiente formulariu vas renomar una páxina, treslladando'l so historial al nuevu nome. +El nome vieyu va convertise nuna redireición al nuevu. +Asegúrate de que nun dexes [[Special:DoubleRedirects|redireiciones dobles]] o [[Special:BrokenRedirects|rotes]]. +Tu yes el responsable de facer que los enllaces queden apuntando au se supón qu'han apuntar. + +Recuerda que la páxina '''nun''' va movese si yá hai una páxina col nuevu títulu, a nun ser que tea balera o seya una redireición que nun tenga historial. +Esto significa que pues volver a renomar una páxina col nome orixinal si t'enquivoques, y que nun pues sobreescribir una páxina yá esistente. + ¡AVISU!''' Esti pue ser un cambéu importante y inesperáu pa una páxina popular; por favor, asegúrate d'entender les consecuencies de lo que vas facer enantes de siguir.", @@ -2270,6 +2367,7 @@ por favor, asegúrate d'entender les consecuencies de lo que vas facer enantes d Nestos casos vas tener que treslladar o fusionar la páxina manualmente.", 'movearticle' => 'Treslladar la páxina:', +'moveuserpage-warning' => "'''Atención:''' Tas a piques de mover una páxina d'usuariu. Atalanta que namái se va mover la páxina y que ''nun'' se va renomar l'usuariu.", 'movenologin' => 'Non identificáu', 'movenologintext' => 'Tienes que ser un usuariu rexistráu y tar [[Special:UserLogin|identificáu]] pa treslladar una páxina.', 'movenotallowed' => 'Nun tienes permisu pa mover páxines.', @@ -2299,6 +2397,9 @@ Nestos casos vas tener que treslladar o fusionar la páxina manualmente.", 'move-redirect-suppressed' => 'redireición desaniciada', 'movelogpage' => 'Rexistru de tresllaos', 'movelogpagetext' => 'Esta ye la llista de páxines treslladaes.', +'movesubpage' => '{{PLURAL:$1|Subpáxina|Subpáxines}}', +'movesubpagetext' => "Esta páxina tien $1 {{PLURAL:$1|subpáxina|subpáxines}} que s'amuesen darréu.", +'movenosubpage' => 'Esta páxina nun tien subpáxines.', 'movereason' => 'Motivu:', 'revertmove' => 'revertir', 'delete_and_move' => 'Esborrar y treslladar', @@ -2314,6 +2415,7 @@ La páxina de destín "[[:$1]]" yá esiste. ¿Quies esborrala pa dexar sitiu pal 'immobile-source-page' => 'Esta páxina nun ye treslladable.', 'immobile-target-page' => 'Nun se pue treslladar a esi títulu de destín.', 'imagenocrossnamespace' => "Nun se pue treslladar una imaxe a nun espaciu de nomes que nun ye d'imáxenes", +'nonfile-cannot-move-to-file' => 'Nun se pue treslladar más que ficheros al espaciu de nomes de ficheros', 'imagetypemismatch' => 'La estensión nueva del archivu nun concueya cola so mena', 'imageinvalidfilename' => 'El nome del archivu oxetivu nun ye válidu', 'fix-double-redirects' => 'Actualizar cualesquier redireición que señale al títulu orixinal', @@ -2322,6 +2424,10 @@ La páxina de destín "[[:$1]]" yá esiste. ¿Quies esborrala pa dexar sitiu pal La cabera entrada del rexistru s'ufre darréu pa referencia:", 'semiprotectedpagemovewarning' => "'''Nota:''' Esta páxina ta candada pa que namái los usuarios rexistraos puedan treslladala. La cabera entrada del rexistru s'ufre darréu pa referencia:", +'move-over-sharedrepo' => '== Ficheru esistente == +[[:$1]] esiste nun repositoriu compartíu. Si mueves un ficheru a esti títulu se saltará el ficheru compartíu.', +'file-exists-sharedrepo' => "El nome de ficheru qu'escoyisti yá ta n'usu nun repositoriu compartíu. +Escueyi otru nome, por favor.", # Export 'export' => 'Esportar páxines', @@ -2339,7 +2445,7 @@ Por último, tamién pues usar un enllaz: p.e. [[{{#Special:Export}}/{{MediaWiki '''Nota:''' Desactivóse la esportación del historial completu de páxines al traviés d'esti formulariu por motivos de rendimientu.", 'export-submit' => 'Esportar', 'export-addcattext' => 'Añader páxines dende la categoría:', -'export-addcat' => 'Añader', +'export-addcat' => 'Amestar', 'export-addnstext' => 'Amestar páxines del espaciu de nomes:', 'export-addns' => 'Amestar', 'export-download' => 'Guardar como archivu', @@ -2393,6 +2499,7 @@ Guárdalu nel ordenador y xúbilu equí.", 'importstart' => 'Importando les páxines...', 'import-revision-count' => '$1 {{PLURAL:$1|revisión|revisiones}}', 'importnopages' => 'Nun hai páxines pa importar.', +'imported-log-entries' => 'Importao $1 {{PLURAL:$1|entrada del rexistru|entraes del rexistru}}.', 'importfailed' => 'Falló la importación: $1', 'importunknownsource' => "Triba d'orixe d'importación desconocida", 'importcantopen' => "Nun se pudo abrir l'archivu d'importación", @@ -2431,7 +2538,7 @@ Guárdalu nel ordenador y xúbilu equí.", 'tooltip-pt-mycontris' => 'Llista de les tos contribuciones', 'tooltip-pt-login' => 'Encamentámoste a identificate, anque nun ye obligatorio', 'tooltip-pt-anonlogin' => "Encamiéntasete que t'identifiques, anque nun ye obligatorio.", -'tooltip-pt-logout' => 'Salir', +'tooltip-pt-logout' => 'Colar', 'tooltip-ca-talk' => 'Alderique tocante al conteníu de la páxina', 'tooltip-ca-edit' => "Pues editar esta páxina. Por favor usa'l botón de previsualización enantes de guardar los cambeos.", 'tooltip-ca-addsection' => 'Emprima una seición nueva', @@ -2485,6 +2592,34 @@ Guárdalu nel ordenador y xúbilu equí.", 'tooltip-upload' => 'Empecipiar la xubida', 'tooltip-rollback' => '"Revertir" elimina la edición/es d\'esta páxina fecha/es pol postrer collaborador con un solu clic.', 'tooltip-undo' => '"Esfacer" revierte esta edición y abre\'l formulariu d\'edición en mou de previsualización. Permite añader un motivu nel resume.', +'tooltip-preferences-save' => 'Guardar les preferencies', +'tooltip-summary' => 'Escribi un resume curtiu', + +# Stylesheets +'common.css' => "/* Los CSS allugaos equí s'aplicarán a tolos aspeutos */", +'standard.css' => '/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Standard */', +'nostalgia.css' => '/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Nostalgia */', +'cologneblue.css' => '/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Cologne Blue */', +'monobook.css' => '/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Monobook */', +'myskin.css' => '/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu MySkin */', +'chick.css' => '/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Chick */', +'simple.css' => '/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Simple */', +'modern.css' => '/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Modern */', +'vector.css' => '/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Vector */', +'print.css' => '/* Los CSS allugaos equí afeutarán a la salida pola imprentadora */', +'handheld.css' => '/* Los CSS allugaos equí afeutarán a los preseos portátiles basaos nel aspeutu configuráu en $wgHandheldStyle */', + +# Scripts +'common.js' => '/* Cualesquier JavaScript que tea equí se cargará pa tolos usuarios en cada carga de páxina. */', +'standard.js' => '/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu Standard */', +'nostalgia.js' => '/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu Nostalgia */', +'cologneblue.js' => '/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu Cologne Blue */', +'monobook.js' => '/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu MonoBook */', +'myskin.js' => '/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu MySkin */', +'chick.js' => '/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu Chick */', +'simple.js' => '/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu Simple */', +'modern.js' => '/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu Modern */', +'vector.js' => '/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu Vector */', # Metadata 'nodublincore' => 'Metadatos RDF Dublin Core desactivaos pa esti sirvidor.', @@ -2574,18 +2709,22 @@ $1", 'nextdiff' => 'Diferencia más recién →', # Media information -'mediawarning' => "'''Avisu''': Esti archivu pue contener códigu maliciosu, pue ser comprometío executalu nel to sistema.", +'mediawarning' => "'''Avisu''': Esta triba de ficheru pue contener códigu maliciosu. +Al executalu pues comprometer el to sistema.", 'imagemaxsize' => "Llende del tamañu d'imaxe:
    ''(pa les páxines de descripción de ficheru)''", 'thumbsize' => 'Tamañu de la muestra:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|páxina|páxines}}', -'file-info' => "(tamañu d'archivu: $1, triba MIME: $2)", -'file-info-size' => "($1 × $2 píxeles, tamañu d'archivu: $3, triba MIME: $4)", +'file-info' => "tamañu d'archivu: $1, triba MIME: $2", +'file-info-size' => "$1 × $2 píxeles, tamañu d'archivu: $3, triba MIME: $4", 'file-nohires' => 'Nun ta disponible con mayor resolución.', -'svg-long-desc' => "(archivu SVG, $1 × $2 píxeles nominales, tamañu d'archivu: $3)", +'svg-long-desc' => "archivu SVG, $1 × $2 píxeles nominales, tamañu d'archivu: $3", 'show-big-image' => 'Resolución completa', 'show-big-image-thumb' => "Tamañu d'esta previsualización: $1 × $2 píxeles", 'file-info-gif-looped' => 'animáu', 'file-info-gif-frames' => '$1 {{PLURAL:$1|cuadru|cuadros}}', +'file-info-png-looped' => 'animáu', +'file-info-png-repeat' => 'reproducíu $1 {{PLURAL:$1|vez|veces}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|cuadru|cuadros}}', # Special:NewFiles 'newimages' => "Galería d'imáxenes nueves", @@ -2739,6 +2878,7 @@ tabla de metadatos tea recoyida. Los demás tarán escondíos por defeutu. 'exif-gpsareainformation' => "Nome de l'área GPS", 'exif-gpsdatestamp' => 'Fecha GPS', 'exif-gpsdifferential' => 'Correición diferencial de GPS', +'exif-objectname' => 'Títulu curtiu', # EXIF attributes 'exif-compression-1' => 'Non comprimida', @@ -2820,6 +2960,8 @@ tabla de metadatos tea recoyida. Los demás tarán escondíos por defeutu. 'exif-sensingmethod-7' => 'Sensor Trillinial', 'exif-sensingmethod-8' => 'Sensor llinial secuencial de color', +'exif-filesource-3' => 'Cámara fotográfica dixital', + 'exif-scenetype-1' => 'Una imaxe fotografiada direutamente', 'exif-customrendered-0' => 'Procesu normal', @@ -2896,30 +3038,30 @@ tabla de metadatos tea recoyida. Los demás tarán escondíos por defeutu. 'limitall' => 'toos', # E-mail address confirmation -'confirmemail' => 'Confirmar direición de corréu', -'confirmemail_noemail' => "Nun tienes una direición de corréu válida nes tos [[Special:Preferences|preferencies d'usuariu]].", -'confirmemail_text' => "{{SITENAME}} requier que valides la to direición de corréu enantes d'usar les +'confirmemail' => 'Confirmar direición de corréu', +'confirmemail_noemail' => "Nun tienes una direición de corréu válida nes tos [[Special:Preferences|preferencies d'usuariu]].", +'confirmemail_text' => "{{SITENAME}} requier que valides la to direición de corréu enantes d'usar les funcionalidaes de mensaxes. Da-y al botón que tienes equí embaxo pa unviar un avisu de confirmación a la to direición. Esti avisu va incluyir un enllaz con un códigu; carga l'enllaz nel to navegador pa confirmar la to direición de corréu electrónicu.", -'confirmemail_pending' => "Yá s'unvió un códigu de confirmación a la to direición de corréu; si creasti hai poco la to cuenta, pues esperar dellos minutos a que-y de tiempu a llegar enantes de pidir otru códigu nuevu.", -'confirmemail_send' => 'Unviar códigu de confirmación', -'confirmemail_sent' => 'Corréu de confirmación unviáu.', -'confirmemail_oncreate' => "Unvióse un códigu de confirmación a la to direición de corréu. +'confirmemail_pending' => "Yá s'unvió un códigu de confirmación a la to direición de corréu; si creasti hai poco la to cuenta, pues esperar dellos minutos a que-y de tiempu a llegar enantes de pidir otru códigu nuevu.", +'confirmemail_send' => 'Unviar códigu de confirmación', +'confirmemail_sent' => 'Corréu de confirmación unviáu.', +'confirmemail_oncreate' => "Unvióse un códigu de confirmación a la to direición de corréu. Esti códigu nun se necesita pa identificase, pero tendrás que lu conseñar enantes d'activar cualesquier funcionalidá de la wiki que tea rellacionada col corréu.", -'confirmemail_sendfailed' => '{{SITENAME}} nun pudo unviar el to corréu de confirmación. +'confirmemail_sendfailed' => '{{SITENAME}} nun pudo unviar el to corréu de confirmación. Por favor comprueba que nun punxeras carauteres non válidos na to direición de corréu. El sirvidor de corréu devolvió: $1', -'confirmemail_invalid' => 'Códigu de confirmación non válidu. El códigu seique tenga caducao.', -'confirmemail_needlogin' => 'Tienes que $1 pa confirmar el to corréu.', -'confirmemail_success' => 'El to corréu quedó confimáu. +'confirmemail_invalid' => 'Códigu de confirmación non válidu. El códigu seique tenga caducao.', +'confirmemail_needlogin' => 'Tienes que $1 pa confirmar el to corréu.', +'confirmemail_success' => 'El to corréu quedó confimáu. Agora yá pues [[Special:UserLogin|coneutate]] y esfrutar de la wiki.', -'confirmemail_loggedin' => 'Quedó confirmada la to direición de corréu.', -'confirmemail_error' => 'Hebo un problema al guardar la to confirmación.', -'confirmemail_subject' => 'Confirmación de la direición de corréu de {{SITENAME}}', -'confirmemail_body' => 'Daquién, seique tu dende la IP $1, rexistró la cuenta "$2" con +'confirmemail_loggedin' => 'Quedó confirmada la to direición de corréu.', +'confirmemail_error' => 'Hebo un problema al guardar la to confirmación.', +'confirmemail_subject' => 'Confirmación de la direición de corréu de {{SITENAME}}', +'confirmemail_body' => 'Daquién, seique tu dende la IP $1, rexistró la cuenta "$2" con esta direición de corréu en {{SITENAME}}. Pa confirmar qu\'esta cuenta ye tuya daveres y asina activar les funcionalidaes @@ -2933,8 +3075,36 @@ la confirmación de la direición de corréu electrónicu: $5 Esti códigu de confirmación caduca\'l $4.', -'confirmemail_invalidated' => 'Confirmación de direición de corréu electrónicu cancelada', -'invalidateemail' => 'Cancelar confirmación de corréu electrónicu', +'confirmemail_body_changed' => 'Daquién, seique tu dende la IP $1, camudó les señes de corréu de +la cuenta "$2" a esta direición de corréu en {{SITENAME}}. + +Pa confirmar qu\'esta cuenta ye tuya daveres y reactivar les funciones +de corréu en {{SITENAME}}, abri esti enllaz nel to navegador: + +$3 + +Si la cuenta *nun* ye de to, calca nesti enllaz pa encaboxar +la confirmación de les señes de corréu electrónicu: + +$5 + +Esti códigu de confirmación caduca\'l $4.', +'confirmemail_body_set' => 'Daquién, seique tu dende la IP $1, camudó les señes de corréu de +la cuenta "$2" a esta direición de corréu en {{SITENAME}}. + +Pa confirmar qu\'esta cuenta ye tuya daveres y reactivar les funciones +de corréu en {{SITENAME}}, abri esti enllaz nel to navegador: + +$3 + +Si la cuenta *nun* ye de to, calca nesti enllaz pa encaboxar +la confirmación de les señes de corréu electrónicu: + +$5 + +Esti códigu de confirmación caduca\'l $4.', +'confirmemail_invalidated' => 'Confirmación de direición de corréu electrónicu cancelada', +'invalidateemail' => 'Cancelar confirmación de corréu electrónicu', # Scary transclusion 'scarytranscludedisabled' => '[La tresclusión interwiki ta desactivada]', @@ -2974,6 +3144,7 @@ Por favor confirma que daveres quies volver a crear esta páxina.", 'table_pager_first' => 'Primer páxina', 'table_pager_last' => 'Postrer páxina', 'table_pager_limit' => 'Amosar $1 elementos per páxina', +'table_pager_limit_label' => 'Elementos por páxina:', 'table_pager_limit_submit' => 'Dir', 'table_pager_empty' => 'Nun hai resultaos', @@ -2983,6 +3154,9 @@ Por favor confirma que daveres quies volver a crear esta páxina.", 'autoredircomment' => 'Redirixendo a [[$1]]', 'autosumm-new' => "Páxina creada con '$1'", +# Size units +'size-gigabytes' => '$1 XB', + # Live preview 'livepreview-loading' => 'Cargando…', 'livepreview-ready' => 'Cargando… ¡Llisto!', @@ -3028,6 +3202,7 @@ Tamién pues [[Special:Watchlist/edit|usar l'editor estándar]].", 'version-specialpages' => 'Páxines especiales', 'version-parserhooks' => "Hooks d'análisis sintáuticu", 'version-variables' => 'Variables', +'version-skins' => 'Apariencia', 'version-other' => 'Otros', 'version-mediahandlers' => "Remanadores d'archivos multimedia", 'version-hooks' => 'Hooks', @@ -3039,6 +3214,13 @@ Tamién pues [[Special:Watchlist/edit|usar l'editor estándar]].", 'version-hook-subscribedby' => 'Suscritu por', 'version-version' => '(Versión $1)', 'version-license' => 'Llicencia', +'version-poweredby-credits' => "Esta wiki funciona con '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'otros', +'version-license-info' => "MediaWiki ye software llibre; pues redistribuilu y/o camudalu baxo los términos de la Llicencia Pública Xeneral GNU tal como ta asoleyada pola Free Software Foundation; o la versión 2 de la Llicencia, o (como prefieras) cualesquier versión posterior. + +MediaWiki se distribúi col envís de que seya afayadiza, pero ENSIN GARANTÍA DALA; ensin siquiera garantía implícita de COMERCIALIDÁ o ADAUTACIÓN A UN DETERMINÁU PROPÓSITU. Llee la Llicencia Pública Xeneral GNU pa más detalles. + +Tendríes d'haber recibío [{{SERVER}}{{SCRIPTPATH}}/COPYING una copia de la Llicencia Pública Xeneral GNU] xunto con esti programa; sinón, escribi a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html lleela en llinia].", 'version-software' => 'Software instaláu', 'version-software-product' => 'Productu', 'version-software-version' => 'Versión', @@ -3108,6 +3290,15 @@ Escribi\'l nome del archivu ensin el prefixu "{{ns:file}}:".', 'tags-edit' => 'editar', 'tags-hitcount' => '$1 {{PLURAL:$1|cambéu|cambeos}}', +# Special:ComparePages +'comparepages' => 'Comparar páxines', +'compare-selector' => 'Comparar revisiones de páxina', +'compare-page1' => 'Páxina 1', +'compare-page2' => 'Páxina 2', +'compare-rev1' => 'Revisión 1', +'compare-rev2' => 'Revisión 2', +'compare-submit' => 'Comparar', + # Database error messages 'dberr-header' => 'Esta wiki tien un problema', 'dberr-problems' => '¡Sentímoslo! Esti sitiu ta esperimentando dificultaes téuniques.', @@ -3119,8 +3310,18 @@ Escribi\'l nome del archivu ensin el prefixu "{{ns:file}}:".', # HTML forms 'htmlform-invalid-input' => 'Hai problemes con parte de la to entrada', +'htmlform-select-badoption' => 'El valor que conseñasti nun ye una opción válida.', +'htmlform-int-invalid' => 'El valor que conseñasti nun ye un númberu enteru.', +'htmlform-float-invalid' => 'El valor que conseñasti nun ye un númberu.', +'htmlform-int-toolow' => "El valor que conseñasti ye menor que'l mínimu de $1", +'htmlform-int-toohigh' => "El valor que conseñasti ye mayor que'l máximu de $1", +'htmlform-required' => 'Se requier esti valor', 'htmlform-submit' => 'Unviar', 'htmlform-reset' => 'Esfacer cambeos', 'htmlform-selectorother-other' => 'Otros', +# SQLite database support +'sqlite-has-fts' => '$1 con sofitu pa gueta en testu completu', +'sqlite-no-fts' => '$1 ensin sofitu pa gueta en testu completu', + ); diff --git a/languages/messages/MessagesAvk.php b/languages/messages/MessagesAvk.php index aaa10edf..ed7c1149 100644 --- a/languages/messages/MessagesAvk.php +++ b/languages/messages/MessagesAvk.php @@ -111,8 +111,7 @@ $messages = array( 'tog-editsection' => 'Betara va gabot kan "[Betara]" gluyasiki', 'tog-editsectiononrightclick' => 'Betara va gabot talton vulegason
    va gabotvergumvelt', 'tog-showtoc' => 'Nedira va ugak
    (icde teliz dem lo 3 gabot)', -'tog-rememberpassword' => 'Va jinaf remravlem setiker (cookie)', -'tog-editwidth' => 'Betaxo mantanhon nediwer', +'tog-rememberpassword' => 'Va jinaf remravlem setiker (cookie) (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Kosuzdasikira va jinon betayan bueem', 'tog-watchdefault' => 'Va jinon reduyun ik betayan telizeem suzdá', 'tog-watchmoves' => 'Kosuzdasikira va jinon arrundayan bueem', @@ -430,7 +429,7 @@ Me vulkul da rupeson va "Lodamaceem" bu va intaf {{SITENAME}} rotuilkal.', 'yourname' => 'Rinaf favesikyolt', 'yourpassword' => 'Rinaf remravlem', 'yourpasswordagain' => 'Va rinaf remravlem tolon bazel', -'remembermypassword' => 'Setikera va jinaf remravlem (cookie)', +'remembermypassword' => 'Setikera va jinaf remravlem (cookie) (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Rinaf ind', 'externaldberror' => 'Ont divefa origakrokla va pilkomodara ont va rinafa divefa pata me ronuskel.', 'login' => 'Pilkomodá', @@ -601,7 +600,6 @@ Dere, kan rinaf suteks ik suteks male sangiskafa nuyafa klita, anton webel ! 'copyrightwarning2' => "Vay stragal da kot webeks va {{SITENAME}} gan ar webesik zo robetar ike zo roataler ike zo rosular. Ede me djumel da rinaf suteks yo zo robetad, vaon batliz me staksel !
    Rin dere abdiplekul da va webeks miv suteyel ike mal sangiskafa ok gundafa nuyafa klita ksudal (va $1 loon wil). '''VA COPYRIGHT SUTEKS ARIEKON MERICTANON VOL WEBEL !'''", -'longpagewarning' => "'''WALZERA : batu bu tir kaikasu va $1 ko; konaki exulesiki va bu pokefu ok kaikefu gu 32 ko bak sutelara pofejed. Ton lopinaf gabot yo va bu rotir gosolparsal.'''", 'longpageerror' => "'''ROKLA : Atoen krent tir $1 kilobytes. Batcoba tir lodabrotcafa dam $2 kilobytes cuge. In tir merogiwan.'''", 'readonlywarning' => "'''OBRAL : batu bu kiewaginon zo abdinendar, acum va betara dure me rogiwatal. Ko iyeltak ta radimifa giwara va krent roksudal.'''", 'protectedpagewarning' => "'''WALZERA : batu bu zo nendar. Antaf ristus favesik vaon robetar.'''", @@ -1077,7 +1075,6 @@ Ede va man iyeltak soe co-djukalvajal, vay dimpil ise va warzaf yolt favel. 'fileexists-shared-forbidden' => 'Koe pakano iyeltakxo milyoltaf iyeltak ixam tir. Ede va man iyeltak soe co-djukalvajal, vay dimpil ise va warzaf yolt favel. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Bat iyeltak tir jontolaca ke {{PLURAL:$1|iyeltak|iyeltak}}:', -'successfulupload' => 'Ksudanhara', 'uploadwarning' => 'Obral !', 'savefile' => 'Giwara va iyeltak', 'uploadedimage' => '« [[$1]] » ksudayan mo zanisiko', @@ -1094,6 +1091,7 @@ Ede va man iyeltak soe co-djukalvajal, vay dimpil ise va warzaf yolt favel. [[Fi Gokrafial ede tolkalvajara va bat iyeltak tir vodanhafa. Sulara \"log\" va batu bu krafiason batlize zo nedir :", +'upload-success-subj' => 'Ksudanhara', 'upload-proto-error' => 'Kitsendaj', 'upload-file-error' => 'Koefa rokla', @@ -1379,7 +1377,6 @@ L'adresse électronique que vous avez indiquée dans vos préférences apparaît # Watchlist 'watchlist' => 'Suzdasiki', 'mywatchlist' => 'Jinafi suzdasiki', -'watchlistfor' => "(tori '''$1''')", 'nowatchlist' => 'Rinafi suzdasiki va nedoy teliz ruldar.', 'watchlistanontext' => 'Ta wira ik betara va ra ke rinafi suzdasiki vay $1.', 'watchnologin' => 'Dogluyariskaf', @@ -1639,7 +1636,6 @@ Va lazavanha (tulon ozwason va cidayanu bu se) vlevon bazel !', 'ipb-edit-dropdown' => 'Betara va elekaralazava', 'ipb-unblock-addr' => 'Va $1 dimelekara', 'ipb-unblock' => 'Dimelekara va favesikyolt ok IP mane', -'ipb-blocklist-addr' => 'Tis elekareem va $1', 'ipb-blocklist' => 'Wira va tis elekareem', 'ipb-blocklist-contribs' => 'Webereem ke $1', 'unblockip' => 'Grielekara va IP mane', @@ -1964,10 +1960,10 @@ $1', # Media information 'thumbsize' => 'Aluklum :', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|bu|bu}}', -'file-info' => '(iyeltakaldo : $1, MIME ord : $2)', -'file-info-size' => '($1 × $2 pixel, iyeltakaldo : $3, MIME ord : $4)', +'file-info' => 'iyeltakaldo : $1, MIME ord : $2', +'file-info-size' => '$1 × $2 pixel, iyeltakaldo : $3, MIME ord : $4', 'file-nohires' => 'Me roderaykan logijaf lum.', -'svg-long-desc' => '(SVG iyeltak, prekson $1 × $2 pixels, iyeltakaldo : $3)', +'svg-long-desc' => 'SVG iyeltak, prekson $1 × $2 pixels, iyeltakaldo : $3', 'show-big-image' => 'Geltraf lum', 'show-big-image-thumb' => 'Lum ke bata abdinedira : $1 × $2 pixels', diff --git a/languages/messages/MessagesAy.php b/languages/messages/MessagesAy.php index 30aa2b23..225d1758 100644 --- a/languages/messages/MessagesAy.php +++ b/languages/messages/MessagesAy.php @@ -30,8 +30,7 @@ $messages = array( 'tog-editsection' => '[Turkaña] sipitampi tuqitaki turkawi luräña', 'tog-editsectiononrightclick' => '(JavaScript munawiwa) titulxat tuqina kupi suxuqiñampi tuqitaki turkawi luräña', 'tog-showtoc' => 'Waruchataw uñachayaña (kimsa tituljampi uñstawitaki)', -'tog-rememberpassword' => "Akax jasanchirin imt'awija amtaña", -'tog-editwidth' => 'Akiptawit llataxa taqi anchuniwa', +'tog-rememberpassword' => "Akax jasanchirin imt'awija amtaña (for a maximum of $1 {{PLURAL:$1|day|days}})", 'tog-watchcreations' => "Unch'ukit waruchatajana nayaxa uñstawix uñstayawajata yapxataña", 'tog-watchdefault' => "Unch'ukit waruchatajana nayaxa uñstawix turkajata yapxataña", 'tog-watchmoves' => "Unch'ukit waruchatajana nayaxa uñstawix sutiyarajata yapxataña", diff --git a/languages/messages/MessagesAz.php b/languages/messages/MessagesAz.php index f5236b48..656f7c16 100644 --- a/languages/messages/MessagesAz.php +++ b/languages/messages/MessagesAz.php @@ -64,7 +64,13 @@ $specialPageAliases = array( 'Activeusers' => array( 'Aktivİstifadəçilər' ), ); -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$magicWords = array( + 'redirect' => array( '0', '#İSTİQAMƏTLƏNDİRMƏ', '#İSTİQAMƏTLƏNDİR', '#REDIRECT' ), + 'notoc' => array( '0', '__MÜNDƏRİCATYOX__', '__NOTOC__' ), + 'nogallery' => array( '0', '__QALEREYAYOX__', '__NOGALLERY__' ), +); + +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $messages = array( # User preference toggles @@ -82,8 +88,7 @@ $messages = array( 'tog-editsection' => 'Hər bir bölmə üçün [redaktə]ni mümkün et', 'tog-editsectiononrightclick' => 'Bölmələrin redaktəsini başlıqların üzərində sağ klik etməklə mümkün et (JavaScript)', 'tog-showtoc' => 'Mündəricat siyahısını göstər (3 başlıqdan artıq olan səhifələrdə)', -'tog-rememberpassword' => 'Parolu xatırla', -'tog-editwidth' => 'Yazma yeri maksimal geniş olsun', +'tog-rememberpassword' => 'Məni bu kompüterdə xatırla (maksimum $1 {{PLURAL:$1|gün|gün}})', 'tog-watchcreations' => 'Yaratdığım səhifələri izlədiyim səhifələrə əlavə et', 'tog-watchdefault' => 'Redaktə etdiyim səhifələri izlədiyim səhifələrə əlavə et', 'tog-watchmoves' => 'Adlarını dəyişdiyim səhifələri izlədiyim səhifələrə əlavə et', @@ -196,6 +201,7 @@ $messages = array( 'index-category' => 'İndeksləşdirilmiş səhifələr', 'noindex-category' => 'İndeksləşdirilməyən səhifələr', +'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD', 'mainpagetext' => "'''MediaWiki müvəffəqiyyətlə quraşdırıldı.'''", 'mainpagedocfooter' => 'Bu vikinin istifadəsi ilə bağlı məlumat almaq üçün [http://meta.wikimedia.org/wiki/Help:Contents İstifadəçi məlumat səhifəsinə] baxın. @@ -227,31 +233,21 @@ $messages = array( 'faqpage' => 'Project:TSS', # Vector skin -'vector-action-addsection' => 'Mövzu əlavə et', -'vector-action-delete' => 'Sil', -'vector-action-move' => 'Adını dəyişdir', -'vector-action-protect' => 'Mühafizə et', -'vector-action-undelete' => 'Bərpa et', -'vector-action-unprotect' => 'Mühafizəni kənarlaşdır', -'vector-namespace-category' => 'Kateqoriya', -'vector-namespace-help' => 'Kömək səhifəsi', -'vector-namespace-image' => 'Fayl', -'vector-namespace-main' => 'Səhifə', -'vector-namespace-media' => 'Media səhifəsi', -'vector-namespace-mediawiki' => 'Mesaj', -'vector-namespace-project' => 'Layihə haqqında', -'vector-namespace-special' => 'Xüsusi səhifə', -'vector-namespace-talk' => 'Müzakirə', -'vector-namespace-template' => 'Şablon', -'vector-namespace-user' => 'İstifadəçi səhifəsi', -'vector-view-create' => 'Yarat', -'vector-view-edit' => 'Redaktə', -'vector-view-history' => 'Tarixçə', -'vector-view-view' => 'Oxu', -'vector-view-viewsource' => 'Mənbəyə bax', -'actions' => 'Hərəkətlər', -'namespaces' => 'Adlar fəzası', -'variants' => 'Variantlar', +'vector-action-addsection' => 'Mövzu əlavə et', +'vector-action-delete' => 'Sil', +'vector-action-move' => 'Adını dəyişdir', +'vector-action-protect' => 'Mühafizə et', +'vector-action-undelete' => 'Bərpa et', +'vector-action-unprotect' => 'Mühafizəni kənarlaşdır', +'vector-simplesearch-preference' => 'İnkişaf etmiş axtarma təkliflərini gətir (yalnız Vector görünüşü üçün)', +'vector-view-create' => 'Yarat', +'vector-view-edit' => 'Redaktə', +'vector-view-history' => 'Tarixçə', +'vector-view-view' => 'Oxu', +'vector-view-viewsource' => 'Mənbəyə bax', +'actions' => 'Hərəkətlər', +'namespaces' => 'Adlar fəzası', +'variants' => 'Variantlar', 'errorpagetitle' => 'Xəta', 'returnto' => '$1 səhifəsinə qayıt.', @@ -312,6 +308,9 @@ Bu səhifəyə baxmaq üçün həddən artıq müraciət daxil olmuşdur. Zəhmət olmasa, bir müddət sonra yenidən cəhd edin. $1', +'pool-timeout' => 'Blokun gözləmə müddəti bitdi', +'pool-queuefull' => 'Çıxarış səhifəsi doludur', +'pool-errorunknown' => 'naməlum xəta', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} haqqında', @@ -342,12 +341,15 @@ $1', Bax: [[Special:Version|Versiyalar]].', 'ok' => 'OK', +'pagetitle' => '$1 - {{SITENAME}}', +'pagetitle-view-mainpage' => '{{SITENAME}}', 'retrievedfrom' => 'Mənbə — "$1"', 'youhavenewmessages' => 'Hal-hazırda $1 var. ($2)', 'newmessageslink' => 'yeni ismarıclar', 'newmessagesdifflink' => 'Sonuncu və əvvəlki versiya arasındakı fərq', 'youhavenewmessagesmulti' => '$1-də yeni mesajınız var.', 'editsection' => 'redaktə', +'editsection-brackets' => '[$1]', 'editold' => 'redaktə', 'viewsourceold' => 'başlanğıc kodu nəzərdən keçir', 'editlink' => 'redaktə', @@ -451,7 +453,12 @@ Sorğu: $2', 'protectedpagetext' => 'Bu səhifə redaktə üçün bağlıdır.', 'viewsourcetext' => 'Siz bu səhifənin məzmununu görə və köçürə bilərsiniz:', 'protectedinterface' => 'Bu səhifədə proqram təminatı üçün sistem məlumatları var və sui-istifadənin qarşısını almaq üçün mühafizə olunmalıdır.', +'editinginterface' => "'''Diqqət.''' Siz proqram təminatı interfeysinin mətn olan səhifəni redaktə edirsiniz. +Onun dəyişdirilməsi digər istifadəçilərin interfeysinin xarici görünüşünə təsir göstərir. +Tərcümə üçün daha yaxşı olar ki, MediaWiki-nin lokallaşması üçün olan [http://translatewiki.net/wiki/Main_Page?setlang=ru translatewiki.net] layihəsindən istifadə edəsiniz.", 'sqlhidden' => '(SQL gizli sorğu)', +'cascadeprotected' => 'Səhifə mühafizə olunub, çünki o kaskad mühafizə olunan {{PLURAL:$1|növbəti səhifəyə|növbəti səhifələrə}} qoşulub: +$2', 'namespaceprotected' => 'Sizin adlarında $1 olan məqalələrdə redaktə etməyə icazəniz yoxdur.', 'customcssjsprotected' => 'Sizin bu səhifədə redaktə etməyə icazəniz yoxdur. Çünki bu səhifədə başqa istifadəçinin şəxsi məlumatları var.', 'ns-specialprotected' => 'Xüsusi səhifələr redaktə oluna bilməz.', @@ -473,7 +480,8 @@ Hesabınız yaradıldı. 'yourname' => 'İstifadəçi adı', 'yourpassword' => 'Parol:', 'yourpasswordagain' => 'Parolu təkrar yazın:', -'remembermypassword' => 'Məni xatırla', +'remembermypassword' => 'Məni bu kompüterdə xatırla (maksimum $1 {{PLURAL:$1|gün|gün}})', +'securelogin-stick-https' => 'Loqini daxil etdikdən sonra HTTPS-lə əlaqədə qal', 'yourdomainname' => 'Sizin domain', 'externaldberror' => 'Ya verilənlər bazasının doğruluğunu yoxlamada xəta baş verib, yaxud da siz xarici akkauntu yeniləməyi bacarmırsınız.', 'login' => 'Daxil ol', @@ -490,11 +498,16 @@ Hesabınız yaradıldı. 'gotaccount' => "Giriş hesabınız varsa '''$1'''.", 'gotaccountlink' => 'daxil olun', 'createaccountmail' => 'e-məktub ilə', +'createaccountreason' => 'Səbəb:', 'badretype' => 'Daxil etdiyiniz parol uyğun gəlmir.', 'userexists' => 'Daxil edilmiş ad istifadədədir. Lütfən ayrı ad seçin.', 'loginerror' => 'Daxil olunma xətası', 'createaccounterror' => '$1 Hesab açılmadı', +'nocookiesnew' => 'İstifadəçi qeydiyyata düşüb, lakin təmsil olunmayıb. +{{SITENAME}} iştirakçıların təqdim olunması üçün kökələrdən istifadə olunur. +Siz kökələrin qəbuluna qadağa qoymusunuz. +Lütfən, onları qəbul etməyə icazə verdikdən sonra yeni istifadəçi adı və parolunuzla təmsil olunuz.', 'nocookieslogin' => '{{SITENAME}} saytında girmək üçün alətlərinizin açıq olması lazımdır. Alətləriniz bağlıdır. Zəhmət olmasa açın və bir daha yoxlayın.', 'noname' => 'İşlək istifadəçi adı daxil etməmişdiniz.', 'loginsuccesstitle' => 'Daxil olundu', @@ -510,12 +523,14 @@ Düzgün yazdığına əmin ol.', 'wrongpasswordempty' => 'Parol boş. Təkrar yazın.', 'passwordtooshort' => 'Parolda ən azı {{PLURAL:$1|1 hərf yaxud simvol|$1 hərf yaxud simvol}} olmalıdır.', 'password-name-match' => 'Parol adınızdan fərqli olmalıdır.', +'password-login-forbidden' => 'Bu istifadəçi adından və paroldan istifadə qadağan olunub.', 'mailmypassword' => 'E-mail ilə yeni parol göndər', 'passwordremindertitle' => '{{SITENAME}} parol xatırladıcı', 'noemail' => '"$1" adlı istifadəçi e-poçt ünvanını qeyd etməmişdir.', 'noemailcreate' => 'Düzgün e-mail ünvanı qeyd etməlisiniz', 'passwordsent' => 'Yeni parol "$1" üçün qeydiyyata alınan e-poçt ünvanına göndərilmişdir. Xahiş edirik, e-məktubu aldıqdan sonra yenidən daxil olasınız.', +'blocked-mailpassword' => 'İP ünvanınız bloklu olduğuna görə, yeni parol göndərmə mümkün deyil.', 'mailerror' => 'Məktub göndərmə xətası: $1', 'acct_creation_throttle_hit' => 'Sizin IP ünvanınızdan bu viki-də son bir gün ərzində {{PLURAL:$1|1 hesab|$1 hesab}} açılmışdır. Bu bir gün ərzində icazə verilən maksimum say olduğu üçün, indiki anda daha çox hesab aça bilməzsiniz.', 'emailauthenticated' => 'E-poçt ünvanınız $2 saat $3 tarixində təsdiq edilib.', @@ -534,6 +549,9 @@ Yeni cəhd etməzdən əvvəl bir qədər gözləyin.', 'loginlanguagelabel' => 'Dil: $1', 'suspicious-userlogout' => 'Sizin çıxış üçün cəhdiniz uğursuz alındı. Bu, brouzerin yaxud proksi-keşləmənin düzgün işləməməsindən qaynaqlanır.', +# E-mail sending +'php-mail-error-unknown' => 'PHP-nin mail() funksiyasında naməlum xəta', + # Password reset dialog 'resetpass' => 'Parolu dəyiş', 'resetpass_announce' => 'Siz sistemə müvəqqəti elektron poçt kodu ilə daxil olmusunuz. @@ -586,6 +604,7 @@ Ola bilər siz parolu müvəffəqiyyətlə dəyişmisiniz yaxud müvəqqəti par 'showlivepreview' => 'Canlı sınaq göstərişi', 'showdiff' => 'Dəyişiklikləri göstər', 'anoneditwarning' => "'''DİQQƏT!''' Siz özünüzü sistemə təqdim etməmisiniz. Sizin IP ünvanınız bu səhifənin tarixçəsinə qeyd olunacaq.", +'anonpreviewwarning' => 'Sistemə daxil olmamısınız. "Səhifəni qeyd et" düyməsini bassanız IP ünvanınız səhifənin tarixçəsində qeyd olunacaq.', 'missingsummary' => "'''Xatırlatma.''' Siz dəyişikliklərin qısa şərhini verməmisiniz. \"Səhifəni qeyd et\" düyməsinə təkrar basandan sonra sizin dəyişiklikləriniz şərhsiz qeyd olunacaq.", 'missingcommenttext' => 'Zəhmət olmasa, aşağıda şərhinizi yazın.', 'summary-preview' => 'Xülasə baxış', @@ -621,12 +640,19 @@ və ya səhifəni [{{fullurl:{{FULLPAGENAME}}|action=edit}} redaktə] ed və ya səhifəni [{{fullurl:{{FULLPAGENAME}}|action=edit}} redaktə] edə bilərsiniz.', 'userpage-userdoesnotexist' => '"$1" istifadəçi adı qeydiyyata alınmayıb. Əgər siz bu səhifəni yaratmaq/redaktə etmək istəyirsinizsə, xahiş edirik bunu yoxlayın.', +'userpage-userdoesnotexist-view' => '"$1" istifadəçi hesabı qeydiyyatda deyil', 'blocked-notice-logextract' => 'Bu istifadəçi hal-hazırda bloklanmışdır. Bloklama qeydlərinin sonuncusu aşağıda göstərilmişdir:', +'usercssyoucanpreview' => "'''İpucu:''' Qeyd etmədən əvvəl \"{{int:showpreview}}\"ə klikləyərək yeni CSSinizi yoxlayın.", +'userjsyoucanpreview' => "'''İpucu:''' Qeyd etmədən əvvəl \"{{int:showpreview}}\"ə klikləyərək yeni JavaScriptinizi yoxlayın.", 'usercsspreview' => "''Xatırladırıq ki, siz yalnız CSS-də sınaq göstərişi etmisiniz.''' '''Bu hələ yaddaşda saxlanılmayıb!'''", 'userjspreview' => "''Xatırladırıq ki, siz yalnız JavaScript-də test/sınaq göstərişi etmisiniz.''' '''Bu hələ yaddaşda saxlanılmayıb!'''", +'sitecsspreview' => "''Xatırladırıq ki, siz yalnız CSS-də sınaq göstərişi etmisiniz.''' +'''Bu hələ yaddaşda saxlanılmayıb!'''", +'sitejspreview' => "''Xatırladırıq ki, siz yalnız JavaScript kodunda sınaq göstərişi etmisiniz.''' +'''Bu hələ yaddaşda saxlanılmayıb!'''", 'updated' => '(yeniləndi)', 'note' => "'''Qeyd:'''", 'previewnote' => "'''Bu yalnız sınaq göstərişidir; dəyişikliklər hal-hazırda qeyd edilməmişdir!'''", @@ -647,7 +673,6 @@ Siz eyni zamanda söz verirsiniz ki, bu yazıları siz özünüz yazmısınız v ----
    MÜƏLLİF HÜQUQLARI İLƏ QORUNMUŞ HEÇ BİR İŞİ İCAZƏSİZ DƏRC ETMƏYİN!
    ', -'longpagewarning' => "'''DİQQƏT! Bu səhifənin həcmi $1 kb-dır; Həcmi 32 kb-a yaxın və ya daha artıq olan səhifələr bəzi brouzerlərdə redaktə ilə bağlı problemlər yarada bilər. Mümkünsə səhifəni daha kiçik bölmələrə bölün.'''", 'semiprotectedpagewarning' => "'''Qeyd:''' Bu səhifə mühafizəli olduğu üçün yalnız qeydiyyatdan keçmiş istifadəçilər redaktə edə bilərlər.", 'titleprotectedwarning' => "'''DİQQƏT! Bu səhifə mühafizəlidir, yalnız [[Special:ListGroupRights|icazəsi olan]] istifadəçilər onu redaktə edə bilərlər.'''", 'templatesused' => 'Bu səhifədə istifadə edilmiş {{PLURAL:$1|şablon|şablonlar}}:', @@ -657,6 +682,8 @@ Siz eyni zamanda söz verirsiniz ki, bu yazıları siz özünüz yazmısınız v 'template-semiprotected' => '(yarım-mühafizə)', 'hiddencategories' => 'Bu səhifə {{PLURAL:$1|1 gizli kateqoriyaya|$1 gizli kateqoriyaya}} aiddir:', 'nocreatetitle' => 'Səhifə yaratma məhdudlaşdırılıb.', +'nocreatetext' => '{{SITENAME}} saytında yeni səhifələrin yaradılması imkanları məhdudlaşdırılıb. +Siz geri qayıdıb mövcud səhifəni və ya [[Special:UserLogin|sistemə təqdim olunma və ya yeni hesab açmaq]] səhifəsini redaktə edə bilərsiniz.', 'nocreate-loggedin' => 'Sizin yeni səhifələr yaratmaq üçün icazəniz yoxdur.', 'sectioneditnotsupported-title' => 'Bölüm redaktəsi dəstəklənmir', 'sectioneditnotsupported-text' => 'Bölüm redaktəsi bu səhifədə dəstəklənmir.', @@ -670,6 +697,8 @@ Bu səhifə üçün silmə qeydləri aşağıda göstərilmişdir:", 'moveddeleted-notice' => 'Bu səhifə silinmişdir. Məlumat üçün aşağıda bu səhifənin tarixçəsindən müvafiq silmə qeydləri göstərilmişdir.', 'log-fulllog' => 'Bütöv məlumatı göstər', +'edit-hook-aborted' => 'Düzəlişlər qarmaq-prosedur tərəfindən geri qaytarılıb. +Əlavə izahat verilməyib.', 'edit-gone-missing' => 'Səhifəni yeniləmək mümkün deyil. Çox güman ki, səhifə silinmişdir.', 'edit-conflict' => 'Düzəlişlər münaqişəsi', @@ -678,12 +707,25 @@ Məlumat üçün aşağıda bu səhifənin tarixçəsindən müvafiq silmə qeyd Belə ki, bu adda səhifə artıq mövcuddur.', # Parser/template warnings +'expensive-parserfunction-category' => 'Kifayət qədər böyük sayda genişresurslu funksiyaların müraciət olunduğu səhifələr', 'post-expand-template-inclusion-warning' => "'''DİQQƏT!''' Daxil edilən şablonların həcmi həddindən artıq böyükdür. Bəzi şablonlar əlavə olunmayacaq.", 'post-expand-template-inclusion-category' => 'Şablonun daxil olduğu səhifələrin ölçüsü böyükdür.', +'post-expand-template-argument-category' => 'Şablonlarda buraxılmış arqumentlərin mövcud olduğu səhifələr', +'parser-template-loop-warning' => '[[$1]]: Şablonda düyün tapıldı', +'parser-template-recursion-depth-warning' => '($1) Şablonda dərinlik limiti keçildi', +'language-converter-depth-warning' => '($1) Dil konvertorunun limiti keçildi', + +# "Undo" feature +'undo-failure' => 'Dəyişikliklərin toqquşması nəticəsində geriyə qaytarma işi uğursuz oldu.', +'undo-norev' => 'Düzəlişlər geri qaytarıla bilinmir, çünki onlar ya mövcüd deyil, ya da silinib.', +'undo-summary' => '$1 dəyişikliyi [[Special:Contributions/$2|$2]] ([[User talk:$2|Müzakirə]]) tərəfindən geri alındı.', # Account creation failure 'cantcreateaccounttitle' => 'Hesab açılmır.', +'cantcreateaccount-text' => "Bu IP ünvanından ('''$1''') istifadəçi hesabı yaradılması [[User:$3|$3]] tərəfindən əngəllənmişdir. + +$3 tərəfindən verilən səbəb ''$2''", # History pages 'viewpagelogs' => 'Bu səhifə ilə bağlı qeydlərə bax', @@ -721,6 +763,7 @@ Vikidə buna bənzər səhifələri [[Special:Search|axtarmağa]] cəhd edin.', 'rev-deleted-comment' => '(şərhlər silindi)', 'rev-deleted-user' => '(İstifadəçi adı silindi)', 'rev-deleted-event' => '(qeyd silindi)', +'rev-deleted-user-contribs' => '[istifadəçi adı və ya IP ünvanı silindi - dəyişiklik fəaliyyətlərdən çıxarıldı]', 'rev-deleted-text-permission' => "Səhifənin bu versiyası''' silinib'''. Mümkündür ki, bunun səbəbi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} silmə qeydlərində] göstərilmişdir.", 'rev-suppressed-text-unhide' => "Səhifənin bu versiyası''' silinib'''. @@ -730,11 +773,15 @@ Siz idarəçi olduğunuza görə silinən [$1 bu versiyanı] nəzərdən keçir Siz idarəçi olduğunuza görə silinən bu versiyanı nəzərdən keçirə bilərsiniz. Mümkündür ki, silinmənin səbəbi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} silmə qeydlərində] göstərilmişdir.", 'rev-deleted-no-diff' => "Siz versiyalar arasındakı fərqi nəzərdən keçirə bilməzsiniz. Belə ki, versiyalardan biri '''silinib'''. Mümkündür ki, bununla bağlı təfərrüatlar [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} silmə qeydlərində] göstərilmişdir.", +'rev-suppressed-no-diff' => "Əvvəlki redaktələrin biri '''silinmiş''' fərqi görə bilməzsiniz.", 'rev-delundel' => 'göstər/gizlət', 'rev-showdeleted' => 'Göstər', 'revisiondelete' => 'Səhifənin versiyalarını sil/bərpa et', +'revdelete-nooldid-title' => 'Hədəf dəyişikliyi keçərsizdir', +'revdelete-nologtype-title' => 'Heç bir qeyd tipi verilmədi', 'revdelete-nologid-title' => 'Yanlış jurnal yazısı', 'revdelete-no-file' => 'Axtarılan fayl mövcud deyil', +'revdelete-show-file-confirm' => '"$1" faylının $2 $3 tarixli silinmiş bir redaktəsini görmək istədiyinizdən əminsizinizmi?', 'revdelete-show-file-submit' => 'Bəli', 'revdelete-selected' => "'''[[:$1]] səhifəsinin {{PLURAL:$2|seçilmiş versiyası|seçilmiş versiyaları}}:'''", 'logdelete-selected' => "'''Jurnalın {{PLURAL:$1|seçilmiş qeydi|seçilmiş qeydləri}}:'''", @@ -753,16 +800,27 @@ Mümkündür ki, bununla bağlı təfərrüatlar [{{fullurl:{{#Special:Log}}/del 'revdelete-log' => 'Səbəb:', 'revdelete-submit' => 'Seçilmiş {{PLURAL:$1|versiyaya|versiyayalara}} tətbiq et', 'revdelete-logentry' => '[[$1]] səhifəsinin versiyasının görünüşünü dəyişdirdi', +'logdelete-logentry' => '[[$1]] səhifəsinin versiyasının görünüşünü dəyişdirdi', 'revdelete-success' => "'''Versiyanın görünüşü yeniləndi.'''", +'revdelete-failure' => "'''Versiyanın görünüşü dəyişdirilə bilməz:''' +$1", +'logdelete-success' => "''' Gündəlik görünüşü uğurla tamamlandı.'''", +'logdelete-failure' => "'''Jurnalın görünüşü tənzimlənməyib:''' +$1", 'revdel-restore' => 'Görünüşü dəyiş', +'revdel-restore-deleted' => 'Silinmiş redaktələr', +'revdel-restore-visible' => 'görünən düzəlişlər', 'pagehist' => 'Səhifənin tarixçəsi', 'deletedhist' => 'Silmə qeydləri', 'revdelete-content' => 'məzmun', 'revdelete-summary' => 'redaktə xülasəsi', 'revdelete-uname' => 'istifadəçi adı', 'revdelete-restricted' => 'məhdudiyyətlər idarəçilərə tətbiq olunur', +'revdelete-unrestricted' => 'idarəçilər üçün götürülmüş məhdudiyyətlər', 'revdelete-hid' => 'gizlət $1', 'revdelete-unhid' => 'göstər $1', +'revdelete-log-message' => '$2 {{PLURAL:$2|dəyişiklik|dəyişiklik}} üçün $1', +'logdelete-log-message' => '$2 {{PLURAL:$2|hadisə|hadisə}} üçün $1', 'revdelete-reason-dropdown' => '*Ümumi silmə səbəbləri ** Müəllif hüquqları pozuntusu ** Uyğunsuz şəxsi məlumat', @@ -783,77 +841,94 @@ Mümkündür ki, bununla bağlı təfərrüatlar [{{fullurl:{{#Special:Log}}/del 'mergehistory-go' => 'Birləşdirilə bilən redaktələri göstər', 'mergehistory-submit' => 'Qarışıq düzəlişlər', 'mergehistory-empty' => 'Birləşdiriləcək redaktələr tapılmamışdır.', +'mergehistory-success' => '[[:$1]] səhifəsinin $3 {{PLURAL:$3|revizyonu|dəyişikliyi}} uğurla [[:$2]] -yə birləşdirildi.', 'mergehistory-no-source' => 'Mənbə $1 yoxdur.', 'mergehistory-no-destination' => 'Mənbə səhifəsi $1 mövcud deyil.', 'mergehistory-invalid-source' => 'Mənbənin düzgün başlığı olmalıdır.', 'mergehistory-invalid-destination' => 'Hədəf səhifəsinin düzgün başlığı olmalıdır.', 'mergehistory-autocomment' => '[[:$1]] səhifəsi [[:$2]] səhifəsinə birləşdirildi', +'mergehistory-comment' => '$3 [[:$1]] səhifəsi [[:$2]] səhifəsinə birləşdirildi', +'mergehistory-same-destination' => 'Mənbə və hədəf səhifələri eyni ola bilməz', 'mergehistory-reason' => 'Səbəb:', # Merge log -'mergelog' => 'Birləşdirmə qeydi', -'revertmerge' => 'Ayır', +'mergelog' => 'Birləşdirmə qeydi', +'pagemerge-logentry' => '[[$1]] [[$2]]-yə birləşdirildi ($3-ə qədər)', +'revertmerge' => 'Ayır', # Diffs 'history-title' => '"$1" səhifəsinin tarixçəsi', 'difference' => '(Versiyalar arasındakı fərq)', +'difference-multipage' => '(Səhifələr arasında fərq)', 'lineno' => 'Sətir $1:', 'compareselectedversions' => 'Seçilən versiyaları müqayisə et', 'showhideselectedversions' => 'Seçilən versiyaları göstər/gizlə', 'editundo' => 'əvvəlki halına qaytar', -'diff-multi' => '({{PLURAL:$1|bir aralıq dəyişiklik|$1 aralıq dəyişiklik}} göstərilməmişdir.)', +'diff-multi' => '({{PLURAL:$2|Bir istifadəçi|$2 istifadəçi}} tərəfindən edilən {{PLURAL:$1|bir ara redaktə|$1 ara redaktə}} göstərilmir)', +'diff-multi-manyusers' => '({{PLURAL:$2|Bir istifadəçi|$2 istifadəçi}} tərəfindən edilən {{PLURAL:$1|bir ara redaktə|$1 ara redaktə}} göstərilmir)', # Search results -'searchresults' => 'Axtarış nəticələri', -'searchresults-title' => "''$1'' üçün axtarış nəticələri", -'searchresulttext' => '{{SITENAME}}-nı axtarmaqla bağlı ətraflı məlumat üçün [[{{MediaWiki:Helppage}}|{{int:kömək}}]] səhifəsinə baş çək.', -'searchsubtitle' => '"[[:$1]]" üçün axtarış ([[Special:Prefixindex/$1|"$1" ilə başlayan bütün səhifələr]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" səhifəsi ilə əlaqəli olan bütün səhifələr]])', -'searchsubtitleinvalid' => 'Axtarılan: "$1"', -'titlematches' => 'Səhifə adı eynidir', -'notitlematches' => 'Uyğun gələn səhifə adı tapılmadı', -'textmatches' => 'Mətn eynidir', -'notextmatches' => 'Məqalələrdə uyğun məzmun tapılmadı', -'prevn' => 'əvvəlki {{PLURAL:$1|$1}}', -'nextn' => 'sonrakı {{PLURAL:$1|$1}}', -'viewprevnext' => 'Göstər ($1 {{int:pipe-separator}} $2) ($3).', -'searchmenu-legend' => 'Axtarış kriteriyaları', -'searchmenu-exists' => "'''Bu vikidə \"[[:\$1]]\" adında səhifə mövcutdur'''", -'searchmenu-new' => "'''Bu vikidə \"[[:\$1]]\" səhifəsini yarat!'''", -'searchhelp-url' => 'Help:Mündəricət', -'searchprofile-articles' => 'Məqalələr', -'searchprofile-project' => 'Kömək və Layihə səhifələri', -'searchprofile-images' => 'Multimedia', -'searchprofile-everything' => 'Hər şey', -'searchprofile-advanced' => 'Qabaqcıl', -'searchprofile-articles-tooltip' => 'Axtarış $1', -'searchprofile-project-tooltip' => 'Axtarış $1', -'searchprofile-images-tooltip' => 'Fayllar üçün axtarış', -'searchprofile-advanced-tooltip' => 'Ad aralığında axtar', -'search-result-size' => '$1 ({{PLURAL:$2|1 söz|$2 söz}})', -'search-result-score' => 'Uyğunluq: $1%', -'search-redirect' => '(yönləndirmə $1)', -'search-section' => '(bölmə $1)', -'search-suggest' => 'Bəlkə, bunu nəzərdə tuturdunuz: $1', -'search-interwiki-caption' => 'Qardaş layihələr', -'search-interwiki-default' => '$1 nəticə:', -'search-interwiki-more' => '(yenə)', -'search-mwsuggest-enabled' => 'təkliflərlə', -'search-mwsuggest-disabled' => 'təklif yoxdur', -'search-relatedarticle' => 'əlaqədar', -'searcheverything-enable' => 'Ad aralığında axtar:', -'searchrelated' => 'əlaqədar', -'searchall' => 'bütün', -'nonefound' => "'''Qeyd''': Əksər uğursuz axtarışlara səbəb indeksləşdirilməyən, geniş işlənən \"var\", \"və\" tipli sözlər və ya axtarışa bir sözdən artıq ifadələrin verilməsidir. Çalışıb axtardığınız ifadənin qarşısında ''all:'' (bütün) yazın. Bu halda axtarışınız istifadəçi səhifələrini, şablonları və s. da əhatə edəcək.", -'search-nonefound' => 'Sorğunuza uyğun nəticə tapılmadı.', -'powersearch' => 'Axtar', -'powersearch-legend' => 'Təkmil axtarış', -'powersearch-ns' => 'Ad aralığında axtar:', -'powersearch-redir' => 'Yönləndirmələri göstər', -'powersearch-field' => 'Axtar:', -'powersearch-togglelabel' => 'Yoxla:', -'powersearch-toggleall' => 'Hamısı', -'powersearch-togglenone' => 'Heç biri', -'search-external' => 'Xarici axtarış', +'searchresults' => 'Axtarış nəticələri', +'searchresults-title' => "''$1'' üçün axtarış nəticələri", +'searchresulttext' => '{{SITENAME}}-nı axtarmaqla bağlı ətraflı məlumat üçün [[{{MediaWiki:Helppage}}|{{int:kömək}}]] səhifəsinə baş çək.', +'searchsubtitle' => '"[[:$1]]" üçün axtarış ([[Special:Prefixindex/$1|"$1" ilə başlayan bütün səhifələr]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" səhifəsi ilə əlaqəli olan bütün səhifələr]])', +'searchsubtitleinvalid' => 'Axtarılan: "$1"', +'toomanymatches' => 'Üst-üstə düşən çoxlu hal tapılıb, lütfən yeni sorğu göndərin', +'titlematches' => 'Səhifə adı eynidir', +'notitlematches' => 'Uyğun gələn səhifə adı tapılmadı', +'textmatches' => 'Mətn eynidir', +'notextmatches' => 'Məqalələrdə uyğun məzmun tapılmadı', +'prevn' => 'əvvəlki {{PLURAL:$1|$1}}', +'nextn' => 'sonrakı {{PLURAL:$1|$1}}', +'prevn-title' => 'Əvvəlki bir $1 {{PLURAL:$1|nəticə|nəticə}}', +'nextn-title' => 'Əvvəlki bir $1 {{PLURAL:$1|nəticə|nəticə}}', +'shown-title' => 'Səhifə üçün $1 {{PLURAL:$1|nəticə|nəticəyə}} bax', +'viewprevnext' => 'Göstər ($1 {{int:pipe-separator}} $2) ($3).', +'searchmenu-legend' => 'Axtarış kriteriyaları', +'searchmenu-exists' => "'''Bu vikidə \"[[:\$1]]\" adında səhifə mövcutdur'''", +'searchmenu-new' => "'''Bu vikidə \"[[:\$1]]\" səhifəsini yarat!'''", +'searchhelp-url' => 'Help:Mündəricət', +'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Bu cür prefiksli səhifələri göstər]]', +'searchprofile-articles' => 'Məqalələr', +'searchprofile-project' => 'Kömək və Layihə səhifələri', +'searchprofile-images' => 'Multimedia', +'searchprofile-everything' => 'Hər şey', +'searchprofile-advanced' => 'Qabaqcıl', +'searchprofile-articles-tooltip' => 'Axtarış $1', +'searchprofile-project-tooltip' => 'Axtarış $1', +'searchprofile-images-tooltip' => 'Fayllar üçün axtarış', +'searchprofile-everything-tooltip' => 'Bütün daxili axtar (müzakirə səhifəsi daxil olmaqla)', +'searchprofile-advanced-tooltip' => 'Ad aralığında axtar', +'search-result-size' => '$1 ({{PLURAL:$2|1 söz|$2 söz}})', +'search-result-category-size' => '{{PLURAL:$1|$1 element|$1 elementlər}} ({{PLURAL:$2|$2 alt kateqoriya|$2 alt kateqoriyalar}}, {{PLURAL:$3|$3 fayl|$3 fayllar}})', +'search-result-score' => 'Uyğunluq: $1%', +'search-redirect' => '(yönləndirmə $1)', +'search-section' => '(bölmə $1)', +'search-suggest' => 'Bəlkə, bunu nəzərdə tuturdunuz: $1', +'search-interwiki-caption' => 'Qardaş layihələr', +'search-interwiki-default' => '$1 nəticə:', +'search-interwiki-more' => '(yenə)', +'search-mwsuggest-enabled' => 'təkliflərlə', +'search-mwsuggest-disabled' => 'təklif yoxdur', +'search-relatedarticle' => 'əlaqədar', +'mwsuggest-disable' => 'AJAX təkliflərini rədd et', +'searcheverything-enable' => 'Ad aralığında axtar:', +'searchrelated' => 'əlaqədar', +'searchall' => 'bütün', +'showingresults' => "Aşağıda #'''$2''' ilə başlayan {{PLURAL:$1|'''$1'''-ə qədər}} nəticə göstərilib.", +'showingresultsnum' => "Aşağıda #'''$2''' ilə başlayan {{PLURAL:$3|'''$3'''}} nəticə göstərilib.", +'showingresultsheader' => "'''$4''' üçün {{PLURAL:$5|'''$3'''-dən '''$1''' nəticə|'''$3'''-dən '''$1 - $2''' nəticə}}", +'nonefound' => "'''Qeyd''': Əksər uğursuz axtarışlara səbəb indeksləşdirilməyən, geniş işlənən \"var\", \"və\" tipli sözlər və ya axtarışa bir sözdən artıq ifadələrin verilməsidir. Çalışıb axtardığınız ifadənin qarşısında ''all:'' (bütün) yazın. Bu halda axtarışınız istifadəçi səhifələrini, şablonları və s. da əhatə edəcək.", +'search-nonefound' => 'Sorğunuza uyğun nəticə tapılmadı.', +'powersearch' => 'Axtar', +'powersearch-legend' => 'Təkmil axtarış', +'powersearch-ns' => 'Ad aralığında axtar:', +'powersearch-redir' => 'Yönləndirmələri göstər', +'powersearch-field' => 'Axtar:', +'powersearch-togglelabel' => 'Yoxla:', +'powersearch-toggleall' => 'Hamısı', +'powersearch-togglenone' => 'Heç biri', +'search-external' => 'Xarici axtarış', # Quickbar 'qbsettings' => 'Naviqasiya paneli', @@ -864,109 +939,127 @@ Mümkündür ki, bununla bağlı təfərrüatlar [{{fullurl:{{#Special:Log}}/del 'qbsettings-floatingright' => 'Sağa əyilir', # Preferences page -'preferences' => 'Nizamlamalar', -'mypreferences' => 'Nizamlamalarım', -'prefs-edits' => 'Redaktələrin sayı:', -'prefsnologin' => 'Daxil olmamısınız', -'prefsnologintext' => 'Nizamlamaları dəyişmək üçün [{{fullurl:{{#Special:UserLogin}}|returnto=$1}} daxil olmaq] zəruridir.', -'changepassword' => 'Parolu dəyiş', -'prefs-skin' => 'Üzlük', -'skin-preview' => 'Sınaq göstərişi', -'prefs-math' => 'Riyaziyyat', -'datedefault' => 'Seçim yoxdur', -'prefs-datetime' => 'Tarix və vaxt', -'prefs-personal' => 'İstifadəçi profili', -'prefs-rc' => 'Son dəyişikliklər', -'prefs-watchlist' => 'İzləmə siyahısı', -'prefs-watchlist-days' => 'İzləmə siyahısında göstərilən maksimal günlərin sayı:', -'prefs-watchlist-days-max' => 'Maksimum 7 gün', -'prefs-watchlist-edits' => 'İzləmə siyahısında göstərilən maksimal redaktələrin sayı:', -'prefs-watchlist-edits-max' => 'Maksimum say: 1000', -'prefs-watchlist-token' => 'İzləmə siyahısı nişanı:', -'prefs-misc' => 'Digər seçimlər', -'prefs-resetpass' => 'Parolu dəyiş', -'prefs-email' => 'E-mailin parametrləri', -'prefs-rendering' => 'Görünüş', -'saveprefs' => 'Qeyd et', -'resetprefs' => 'Yarat', -'restoreprefs' => 'Susmaya görə bütün nizamlamaları bərpa et', -'prefs-editing' => 'Redaktə', -'prefs-edit-boxsize' => 'Redaktə pəncərəsinin həcmi', -'rows' => 'Sıralar:', -'columns' => 'Sütunlar:', -'searchresultshead' => 'Axtar', -'resultsperpage' => 'Səhifəyə aid tapılmış nəticələr:', -'contextlines' => 'Nəticələrə aid sıralar:', -'contextchars' => 'Sıraya aid işarələr:', -'stub-threshold' => 'Keçidsiz linki format etmək üçün hüdud (baytlarla):', -'recentchangesdays' => 'Son dəyişiklərdə göstərilən günlərin miqdarı:', -'recentchangesdays-max' => 'Maksimum $1 {{PLURAL:$1|gün|gün}}', -'recentchangescount' => 'Son dəyişikliklərdə başlıq sayı:', -'prefs-help-watchlist-token' => 'Bu sahəni gizli parolla doldurmağınız sizin izləmə siyahınız üçün RSS yayım kanalı yaradacaqdır. +'preferences' => 'Nizamlamalar', +'mypreferences' => 'Nizamlamalarım', +'prefs-edits' => 'Redaktələrin sayı:', +'prefsnologin' => 'Daxil olmamısınız', +'prefsnologintext' => 'Nizamlamaları dəyişmək üçün [{{fullurl:{{#Special:UserLogin}}|returnto=$1}} daxil olmaq] zəruridir.', +'changepassword' => 'Parolu dəyiş', +'prefs-skin' => 'Cild', +'skin-preview' => 'Sınaq göstərişi', +'prefs-math' => 'Riyaziyyat', +'datedefault' => 'Seçim yoxdur', +'prefs-datetime' => 'Tarix və vaxt', +'prefs-personal' => 'İstifadəçi profili', +'prefs-rc' => 'Son dəyişikliklər', +'prefs-watchlist' => 'İzləmə siyahısı', +'prefs-watchlist-days' => 'İzləmə siyahısında göstərilən maksimal günlərin sayı:', +'prefs-watchlist-days-max' => 'Maksimum 7 gün', +'prefs-watchlist-edits' => 'İzləmə siyahısında göstərilən maksimal redaktələrin sayı:', +'prefs-watchlist-edits-max' => 'Maksimum say: 1000', +'prefs-watchlist-token' => 'İzləmə siyahısı nişanı:', +'prefs-misc' => 'Digər seçimlər', +'prefs-resetpass' => 'Parolu dəyiş', +'prefs-email' => 'E-mailin parametrləri', +'prefs-rendering' => 'Görünüş', +'saveprefs' => 'Qeyd et', +'resetprefs' => 'Yarat', +'restoreprefs' => 'Susmaya görə bütün nizamlamaları bərpa et', +'prefs-editing' => 'Redaktə', +'prefs-edit-boxsize' => 'Redaktə pəncərəsinin həcmi', +'rows' => 'Sıralar:', +'columns' => 'Sütunlar:', +'searchresultshead' => 'Axtar', +'resultsperpage' => 'Səhifəyə aid tapılmış nəticələr:', +'contextlines' => 'Nəticələrə aid sıralar:', +'contextchars' => 'Sıraya aid işarələr:', +'stub-threshold' => 'Keçidsiz linki format etmək üçün hüdud (baytlarla):', +'stub-threshold-disabled' => 'Kənarlaşdırılıb', +'recentchangesdays' => 'Son dəyişiklərdə göstərilən günlərin miqdarı:', +'recentchangesdays-max' => 'Maksimum $1 {{PLURAL:$1|gün|gün}}', +'recentchangescount' => 'Son dəyişikliklərdə başlıq sayı:', +'prefs-help-recentchangescount' => 'Buraya yeni dəyişikliklər, səhifələrin və jurnalların tarixçəsi daxildir.', +'prefs-help-watchlist-token' => 'Bu sahəni gizli parolla doldurmağınız sizin izləmə siyahınız üçün RSS yayım kanalı yaradacaqdır. Bu parolu bilən hər kəs izləmə siyahınızı oxuya bilər, bu səbəbdən etibarlı parol seçin. Təsadüfi yolla seçilmiş bu paroldan istifadə edə bilərsiniz: $1', -'savedprefs' => 'Seçiminiz qeyd edildi.', -'timezonelegend' => 'Vaxt zonası:', -'localtime' => 'Yerli vaxt:', -'timezoneuseserverdefault' => 'Susmaya görə serverdən istifadə', -'timezoneuseoffset' => 'Digər (fərqi göstərmək)', -'timezoneoffset' => 'Vaxt fərqi¹:', -'servertime' => 'Server vaxtı:', -'guesstimezone' => 'Brouzerdən götür', -'timezoneregion-africa' => 'Afrika', -'timezoneregion-america' => 'Amerika', -'timezoneregion-antarctica' => 'Antarktika', -'timezoneregion-arctic' => 'Arktik', -'timezoneregion-asia' => 'Asiya', -'timezoneregion-atlantic' => 'Atlantik Okean', -'timezoneregion-australia' => 'Avstraliya', -'timezoneregion-europe' => 'Avropa', -'timezoneregion-indian' => 'Hind Okeanı', -'timezoneregion-pacific' => 'Sakit Okean', -'allowemail' => 'Digər istifadəçilər mənə e-məktub göndərə bilər', -'prefs-searchoptions' => 'Axtarış kriteriyaları', -'prefs-namespaces' => 'Adlar fəzası', -'defaultns' => 'Yaxud bu adlar fəzasında axtar:', -'default' => 'boş', -'prefs-files' => 'Fayllar', -'prefs-custom-css' => 'Xüsusi CSS', -'prefs-custom-js' => 'Xüsusi JavaScript', -'prefs-emailconfirm-label' => 'E-mailin təsdiqlənməsi:', -'prefs-textboxsize' => 'Redaktə pəncərəsinin ölçüsü', -'youremail' => 'E-məktub *', -'username' => 'İstifadəçi adı:', -'uid' => 'İstifadəçi ID:', -'prefs-memberingroups' => 'Üzvü olduğu {{PLURAL:$1|qrup|qruplar}}:', -'prefs-memberingroups-type' => '$1', -'prefs-registration' => 'Qeydiyyat vaxtı:', -'prefs-registration-date-time' => '$1', -'yourrealname' => 'Əsl adınız:', -'yourlanguage' => 'Dil:', -'yourvariant' => 'Variant:', -'yournick' => 'Ləqəb:', -'badsig' => 'Səhv xam imza. +'savedprefs' => 'Seçiminiz qeyd edildi.', +'timezonelegend' => 'Vaxt zonası:', +'localtime' => 'Yerli vaxt:', +'timezoneuseserverdefault' => 'Susmaya görə serverdən istifadə', +'timezoneuseoffset' => 'Digər (fərqi göstərmək)', +'timezoneoffset' => 'Vaxt fərqi¹:', +'servertime' => 'Server vaxtı:', +'guesstimezone' => 'Brouzerdən götür', +'timezoneregion-africa' => 'Afrika', +'timezoneregion-america' => 'Amerika', +'timezoneregion-antarctica' => 'Antarktika', +'timezoneregion-arctic' => 'Arktik', +'timezoneregion-asia' => 'Asiya', +'timezoneregion-atlantic' => 'Atlantik Okean', +'timezoneregion-australia' => 'Avstraliya', +'timezoneregion-europe' => 'Avropa', +'timezoneregion-indian' => 'Hind Okeanı', +'timezoneregion-pacific' => 'Sakit Okean', +'allowemail' => 'Digər istifadəçilər mənə e-məktub göndərə bilər', +'prefs-searchoptions' => 'Axtarış kriteriyaları', +'prefs-namespaces' => 'Adlar fəzası', +'defaultns' => 'Yaxud bu adlar fəzasında axtar:', +'default' => 'boş', +'prefs-files' => 'Fayllar', +'prefs-custom-css' => 'Xüsusi CSS', +'prefs-custom-js' => 'Xüsusi JavaScript', +'prefs-common-css-js' => 'Bütün skinlər üçün ümumi CSS/JavaScript:', +'prefs-emailconfirm-label' => 'E-mailin təsdiqlənməsi:', +'prefs-textboxsize' => 'Redaktə pəncərəsinin ölçüsü', +'youremail' => 'E-məktub *', +'username' => 'İstifadəçi adı:', +'uid' => 'İstifadəçi ID:', +'prefs-memberingroups' => 'Üzvü olduğu {{PLURAL:$1|qrup|qruplar}}:', +'prefs-memberingroups-type' => '$1', +'prefs-registration' => 'Qeydiyyat vaxtı:', +'prefs-registration-date-time' => '$1', +'yourrealname' => 'Əsl adınız:', +'yourlanguage' => 'Dil:', +'yourvariant' => 'Variant:', +'yournick' => 'Ləqəb:', +'badsig' => 'Səhv xam imza. HTML kodu yoxla.', -'yourgender' => 'Cins:', -'gender-unknown' => 'göstərmə', -'gender-male' => 'kişi', -'gender-female' => 'qadın', -'email' => 'E-məktub', -'prefs-help-realname' => 'Həqiqi adınızı daxil etmək qeyri-məcburidir. +'badsiglength' => 'İmzanız çox uzundur. İmza $1 {{PLURAL:$1|character|simvoldan}} uzun olmamalıdır.', +'yourgender' => 'Cins:', +'gender-unknown' => 'göstərmə', +'gender-male' => 'kişi', +'gender-female' => 'qadın', +'email' => 'E-məktub', +'prefs-help-realname' => 'Həqiqi adınızı daxil etmək qeyri-məcburidir. Bu seçimi etdiyiniz halda, adınız işinizə görə müəlliflik hüququnuzun tanınması üçün istifadə ediləcək.', -'prefs-help-email' => 'E-məktub ünvanınızı daxil etmək qeyri-məcburidir. +'prefs-help-email' => 'E-məktub ünvanınızı daxil etmək qeyri-məcburidir. Bu parolunuzu unutduğunuz halda sizə yeni parol göndərməyə imkan verir. Həmçinin kimliyinizi gostərmədən belə, başqalarının sizinlə istifadəçi və ya istifadəçi müzakirəsi səhifələriniz vasitəsi ilə əlaqə yaratmalarını seçə bilərsiniz.', -'prefs-help-email-required' => 'Elektron ünvan tələb olunur.', -'prefs-info' => 'Əsas məlumatlar', -'prefs-i18n' => 'Beynəlxalqlaşdırma', -'prefs-signature' => 'İmza', -'prefs-dateformat' => 'Tarix formatı', -'prefs-advancedediting' => 'Ətraflı variantlar', -'prefs-advancedrc' => 'Ətraflı variantlar', -'prefs-advancedrendering' => 'Ətraflı variantlar', -'prefs-advancedsearchoptions' => 'Ətraflı variantlar', -'prefs-advancedwatchlist' => 'Ətraflı variantlar', -'prefs-diffs' => 'Fərqlər', +'prefs-help-email-required' => 'Elektron ünvan tələb olunur.', +'prefs-info' => 'Əsas məlumatlar', +'prefs-i18n' => 'Beynəlxalqlaşdırma', +'prefs-signature' => 'İmza', +'prefs-dateformat' => 'Tarix formatı', +'prefs-timeoffset' => 'Zaman ofseti + +Zaman ofseti + +Zaman ofseti + +Zaman ofseti', +'prefs-advancedediting' => 'Ətraflı variantlar', +'prefs-advancedrc' => 'Ətraflı variantlar', +'prefs-advancedrendering' => 'Ətraflı variantlar', +'prefs-advancedsearchoptions' => 'Ətraflı variantlar', +'prefs-advancedwatchlist' => 'Ətraflı variantlar', +'prefs-displayrc' => 'Görüntü variantları', +'prefs-displaysearchoptions' => 'Görüntü variantları', +'prefs-displaywatchlist' => 'Görüntü variantları', +'prefs-diffs' => 'Fərqlər', + +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'E-poçt ünvanı keçərlidir', +'email-address-validity-invalid' => 'Düzgünn e-mail ünvanına gir', # User rights 'userrights' => 'İstifadəçi hüququ idarəsi', @@ -977,7 +1070,12 @@ Həmçinin kimliyinizi gostərmədən belə, başqalarının sizinlə istifadə 'userrights-editusergroup' => 'İstifadəçi qruplarını redaktə et', 'saveusergroups' => 'İstifadəçi qrupunu qeyd et', 'userrights-groupsmember' => 'Daxil olduğu qruplar:', +'userrights-groupsmember-auto' => 'Güman edilən üzv:', 'userrights-reason' => 'Səbəb:', +'userrights-no-interwiki' => 'Sizə başqa vikilayihələrdəki istifadəçilərin statusunu dəyişməyə icazə verilməyib', +'userrights-nodatabase' => '$1 verilənlər bazası ya mövcud deyil, ya da lokal deyil.', +'userrights-nologin' => 'Siz istifadəçilərin hüquqlarını dəyişmək üçün idarəçi olaraq sistemə [[Special:UserLogin|Daxil olmalısınız]].', +'userrights-notallowed' => 'Sizin istifadəçi hesabınıza digər istifadəçilərə əlavə hüquq verməyə icazə verilməyib.', 'userrights-changeable-col' => 'Dəyişdirə bildiyiniz qruplar', 'userrights-unchangeable-col' => 'Dəyişdirə bilmədiyiniz qruplar', 'userrights-irreversible-marker' => '$1*', @@ -1004,6 +1102,7 @@ Həmçinin kimliyinizi gostərmədən belə, başqalarının sizinlə istifadə 'grouppage-bot' => '{{ns:project}}:Botlar', 'grouppage-sysop' => '{{ns:project}}:İdarəçilər', 'grouppage-bureaucrat' => '{{ns:project}}:Bürokratlar', +'grouppage-suppress' => '{{ns:project}}:Müfəttişlər', # Rights 'right-read' => 'Səhifələrin oxunması', @@ -1013,25 +1112,53 @@ Həmçinin kimliyinizi gostərmədən belə, başqalarının sizinlə istifadə 'right-createaccount' => 'Yeni istifadəçi hesabları açmaq', 'right-minoredit' => 'Redaktələri kiçik redaktə kimi nişanlamaq', 'right-move' => 'Səhifənin adını dəyişdir', +'right-move-subpages' => 'Səhifənin adının onların alt səhifələrin adı ilə dəyişdirilməsi', +'right-move-rootuserpages' => 'əsas istifadəçi səhifələrinin adını dəyişmək', 'right-movefile' => 'Faylın adını dəyişdir', +'right-suppressredirect' => 'Səhifənin adını dəyişən zaman kohnə addan istiqamətlənmə yaradıla bilinmir', 'right-upload' => 'Fayl yüklə', 'right-reupload' => 'Mövcud faylın yeni versiyasının yüklənməsi', 'right-reupload-own' => 'Mövcud faylın yeni versiyasının həmin istifadəçi tərəfindən yüklənməsi', +'right-reupload-shared' => 'ümumi anbarda olan faylın adının lokal adla dəyişdirilməsi', 'right-upload_by_url' => 'URL-dən fayl yüklə', 'right-autoconfirmed' => 'Yarım mühafizə edilmiş səhifənin redaktəsi', +'right-bot' => 'Avtomatik proses hesab edilir', +'right-apihighlimits' => 'API sorğularında yüksək həddən istifadə et', 'right-writeapi' => 'Redaktələrdən zamanı API-dən (İnterfeys proqramlaşdıran proqram) istifadə', 'right-delete' => 'Səhifələrin silinməsi', 'right-bigdelete' => 'Uzun tarixçəsi olan səhifələrin silinməsi', +'right-deleterevision' => 'səhifənin konkret versiyasının silinməsi və bərpası', +'right-deletedhistory' => 'silinmiş mətnə daxil olmadan silinmiş səhifələrin tarixçələrinə baxma', 'right-browsearchive' => 'Silinmiş səhifələri axtar', 'right-undelete' => 'Silinmiş səhifələrin bərpası', +'right-suppressrevision' => 'İdarəçilərdən gizlənmiş dəyişikliklərə bax və geri yüklə', 'right-suppressionlog' => 'Şəxsi qeydlərə bax', 'right-block' => 'Digər istifadəçilərin redaktə etməsinə qadağa qoy', 'right-blockemail' => 'İstifadəçinin e-poçt göndərməsinə qadağa qoy', 'right-hideuser' => 'İstifadəçi adına qadağa qoy və adın görünməsinin qarşısını al', +'right-ipblock-exempt' => 'IP bloklanmalarını, avtobloklanmalarını və diapazon bloklanmalarını keç', +'right-proxyunbannable' => 'Proksilərin avtomatik bloklanmalarını keç', +'right-unblockself' => 'Özünün blokunun qaldırılması', +'right-protect' => 'Mühafizə səviyyəsi dəyiş və mühafizə altında olan səhifəni redaktə et', +'right-editprotected' => 'Mühafizə olunmuş səhifələri redaktə (kaskad mühafizə daxil olmaqla)', 'right-editinterface' => 'İstifadəçi interfeysini dəyişmək', +'right-editusercssjs' => 'Digər istifadəçilərin CSS və JavaScript fayllarını redaktə', +'right-editusercss' => 'Digər istifadəçilərin CSS faylını redaktə', +'right-edituserjs' => 'Digər istifadəçilərin JavaScript faylını redaktə', +'right-markbotedits' => 'Geri qaytarılan dəyişikliklərin bot dəyişiklikləri kimi işarələnməsi', +'right-noratelimit' => 'Sürət limiti yoxdur', +'right-import' => 'Digər vikilərdən səhifələrin idxalı', +'right-importupload' => 'fayl yükləmə vasitəsilə səhifələrin idxalı', +'right-patrol' => 'Digərlərinin dəyişikliklərini patrullanmış olaraq işarələ', +'right-autopatrol' => 'Dəyişikliklər avtomatik patrullanmış kimi işarələnir', +'right-patrolmarks' => 'Bütün patrullanmış son dəyişikliklərə bax', +'right-unwatchedpages' => 'Müşahidə olunmayan səhifələrin siyahısına baxış', +'right-trackback' => 'Trackback göndər', +'right-mergehistory' => 'Səhifələrin tarixini birləşdirmək', 'right-userrights' => 'Bütün istifadəçi hüquqlarının redaktə edilməsi', 'right-userrights-interwiki' => 'Digər vikilərdəki istifadəçilərin istifadəçi hüquqlarını dəyişdir', 'right-siteadmin' => 'Məlumatlar bazasının bloklanması və blokun götürülməsi', +'right-reset-passwords' => 'Digər istifadəçi parollarını ləğv etmək', 'right-sendemail' => 'Digər istifadəçilərə elektron poçt göndər', # User rights log @@ -1041,22 +1168,39 @@ Həmçinin kimliyinizi gostərmədən belə, başqalarının sizinlə istifadə 'rightsnone' => '(heç biri)', # Associated actions - in the sentence "You do not have permission to X" -'action-read' => 'bu səhifənin oxunması', -'action-edit' => 'bu səhifəni redaktə etmək', -'action-createpage' => 'səhifələrin yaradılması', -'action-createtalk' => 'müzakirə səhifələrinin yaradılması', -'action-createaccount' => 'bu istifadəçi hesabının yaradılması', -'action-minoredit' => 'bunu kiçik redaktə kimi nişanla', -'action-move' => 'bu səhifənin adını dəyişmək', -'action-move-subpages' => 'bu səhifənin və onun altsəhifələrinin adını dəyişmək', -'action-move-rootuserpages' => 'əsas istifadəçi səhifələrinin adını dəyişmək', -'action-movefile' => 'bu faylın adını dəyişmək', -'action-upload' => 'bu faylı yüklə', -'action-delete' => 'bu səhifəni sil', -'action-deleterevision' => 'bu yoxlamaı ləğv et', -'action-browsearchive' => 'Silinmiş səhifələri axtar', -'action-undelete' => 'bu səhifəni silmə', -'action-userrights' => 'Bütün istifadəçi hüquqlarını redaktə et', +'action-read' => 'bu səhifənin oxunması', +'action-edit' => 'bu səhifəni redaktə etmək', +'action-createpage' => 'səhifələrin yaradılması', +'action-createtalk' => 'müzakirə səhifələrinin yaradılması', +'action-createaccount' => 'bu istifadəçi hesabının yaradılması', +'action-minoredit' => 'bunu kiçik redaktə kimi nişanla', +'action-move' => 'bu səhifənin adını dəyişmək', +'action-move-subpages' => 'bu səhifənin və onun altsəhifələrinin adını dəyişmək', +'action-move-rootuserpages' => 'əsas istifadəçi səhifələrinin adını dəyişmək', +'action-movefile' => 'bu faylın adını dəyişmək', +'action-upload' => 'bu faylı yüklə', +'action-reupload' => 'Mövcud faylın yeni versiyasının yüklənməsi', +'action-upload_by_url' => 'URL ünvanından bu faylı yükləmək', +'action-writeapi' => 'API yazıdan istifadə', +'action-delete' => 'bu səhifəni sil', +'action-deleterevision' => 'bu yoxlamaı ləğv et', +'action-deletedhistory' => 'səhifənin silinmə tarixinə bax', +'action-browsearchive' => 'Silinmiş səhifələri axtar', +'action-undelete' => 'bu səhifəni silmə', +'action-suppressrevision' => 'bu gizli redaktəyə bax və bərpa et', +'action-suppressionlog' => 'xüsusi gündəliyə baxış', +'action-block' => 'istifadəçinin redaktə etməsini əngəlləmək', +'action-protect' => 'bu səhifənin mühafizə səviyyəsini dəyişmək', +'action-import' => 'bu səhifəni başqa vikidən götürmək', +'action-importupload' => 'fayl yükləmə vasitəsilə səhifələrin idxalı', +'action-patrol' => 'Digərlərinin dəyişikliklərini patrullanmış olaraq işarələ', +'action-autopatrol' => 'öz redaktələrinizi patrullanmış olarq işarələmək', +'action-unwatchedpages' => 'müşahidə olunmayan səhifələrin siyahısına baxış', +'action-trackback' => 'Trackback göndər', +'action-mergehistory' => 'Bu səhifənin tarixini birləşdirmək', +'action-userrights' => 'Bütün istifadəçi hüquqlarını redaktə et', +'action-userrights-interwiki' => 'Digər vikilərdəki istifadəçilərin istifadəçi hüquqlarını dəyişdir', +'action-siteadmin' => 'Məlumatlar bazasının bloklanması və blokun götürülməsi', # Recent changes 'nchanges' => '$1 {{PLURAL:$1|dəyişiklik|dəyişiklik}}', @@ -1064,16 +1208,12 @@ Həmçinin kimliyinizi gostərmədən belə, başqalarının sizinlə istifadə 'recentchanges-legend' => 'Son dəyişiklik seçimləri', 'recentchangestext' => "'''Ən son dəyişiklikləri bu səhifədən izləyin:'''", 'recentchanges-feed-description' => 'Vikidəki ən son dəyişiklikləri bu yayım kanalından izləyin.', -'recentchanges-label-legend' => 'Şərh: $1.', -'recentchanges-legend-newpage' => '$1 - yeni səhifə', 'recentchanges-label-newpage' => 'Bu dəyişiklik yeni səhifə yaratdı', -'recentchanges-legend-minor' => '$1 - kiçik redaktə', 'recentchanges-label-minor' => 'Bu kiçik redaktədir', -'recentchanges-legend-bot' => '$1 - bot redaktəsi', 'recentchanges-label-bot' => 'Bu redaktə bot tərəfindən edilmişdir', -'recentchanges-legend-unpatrolled' => '$1 - nəzərdən keçirilməmiş redaktə', 'recentchanges-label-unpatrolled' => 'Bu redaktə hələ nəzərdən keçirilməmişdir', 'rcnote' => "Aşağıdakı {{PLURAL:$1|'''1''' dəyişiklik|'''$1''' dəyişiklik}} saat $5, $4 tarixinə qədər son {{PLURAL:$2|gün|'''$2''' gün}} ərzində edilmişdir.", +'rcnotefrom' => "Aşağıda '''$2'''-dən ('''$1'''-ə qədər) dəyişikliklər sadalanmışdır.", 'rclistfrom' => '$1 vaxtından başlayaraq yeni dəyişiklikləri göstər', 'rcshowhideminor' => 'Kiçik redaktələri $1', 'rcshowhidebots' => 'Botları $1', @@ -1091,6 +1231,7 @@ Həmçinin kimliyinizi gostərmədən belə, başqalarının sizinlə istifadə 'boteditletter' => 'b', 'sectionlink' => '→', 'number_of_watching_users_pageview' => '[$1 izləyən istifadəçi]', +'rc_categories' => 'Kateqoriyalara limit qoy ("|" ilə ayır)', 'rc_categories_any' => 'Hər', 'rc-change-size' => '$1', 'newsectionsummary' => '/* $1 */ yeni bölmə', @@ -1109,65 +1250,118 @@ Həmçinin kimliyinizi gostərmədən belə, başqalarının sizinlə istifadə 'recentchangeslinked-to' => 'Qeyd olunan səhifədəki deyil, ona daxili keçid verən səhifələrdəki dəyişiklikləri göstər', # Upload -'upload' => 'Fayl yüklə', -'uploadbtn' => 'Sənəd yüklə', -'reuploaddesc' => 'Return to the upload form.', -'uploadnologin' => 'Daxil olmamısınız', -'uploadnologintext' => 'Fayl yükləmək üçün [[Special:UserLogin|daxil olmalısınız]].', -'uploaderror' => 'Yükləmə xətası', -'upload-permitted' => 'İcazə verilən fayl tipləri: $1.', -'uploadlog' => 'yükləmə qeydi', -'uploadlogpage' => 'Yükləmə qeydi', -'uploadlogpagetext' => 'Aşağıda ən yeni yükləmə jurnal qeydləri verilmişdir.', -'filename' => 'Fayl adı', -'filedesc' => 'Xülasə', -'fileuploadsummary' => 'İzahat:', -'filereuploadsummary' => 'Fayl dəyişiklikləri:', -'filestatus' => 'Müəllif statusu:', -'filesource' => 'Mənbə:', -'uploadedfiles' => 'Yüklənmiş fayllar', -'ignorewarning' => 'Xəbərdarlıqlara əhəmiyyət vermə və faylı saxla', -'badfilename' => 'Faylın adı dəyişildi. Yeni adı: "$1".', -'emptyfile' => 'Yüklədiyiniz fayl boşdur. Bu faylın adında olan hərf səhvi ilə bağlı ola bilər. Xahiş olunur ki, doğurdan da bu faylı yükləmək istədiyinizi yoxlayasınız.', -'fileexists' => "Yükləmək istədiyiniz adda fayl mövcuddur. +'upload' => 'Fayl yüklə', +'uploadbtn' => 'Sənəd yüklə', +'reuploaddesc' => 'Return to the upload form.', +'upload-tryagain' => 'Dəyşdirilmiş fayl izahını göndər', +'uploadnologin' => 'Daxil olmamısınız', +'uploadnologintext' => 'Fayl yükləmək üçün [[Special:UserLogin|daxil olmalısınız]].', +'upload_directory_missing' => '($1) yükləmə qaydası axtarılır və vebserverdə yaradılması qeyri-mümkündür.', +'upload_directory_read_only' => '"$1" kataloqunun arxivi veb-server yazıları üçün qapalıdır.', +'uploaderror' => 'Yükləmə xətası', +'upload-permitted' => 'İcazə verilən fayl tipləri: $1.', +'upload-preferred' => 'İcazə verilən fayl tipləri: $1.', +'upload-prohibited' => 'İcazə verilməyən fayl tipləri: $1.', +'uploadlog' => 'yükləmə qeydi', +'uploadlogpage' => 'Yükləmə qeydi', +'uploadlogpagetext' => 'Aşağıda ən yeni yükləmə jurnal qeydləri verilmişdir.', +'filename' => 'Fayl adı', +'filedesc' => 'Xülasə', +'fileuploadsummary' => 'İzahat:', +'filereuploadsummary' => 'Fayl dəyişiklikləri:', +'filestatus' => 'Müəllif statusu:', +'filesource' => 'Mənbə:', +'uploadedfiles' => 'Yüklənmiş fayllar', +'ignorewarning' => 'Xəbərdarlıqlara əhəmiyyət vermə və faylı saxla', +'ignorewarnings' => 'Bütün xəbərdarlıqlara məhəl qoymamaq', +'badfilename' => 'Faylın adı dəyişildi. Yeni adı: "$1".', +'empty-file' => 'Göndərdiyiniz fayl boşdur.', +'file-too-large' => 'Göndərdiyiniz fayl çox böyükdür.', +'filename-tooshort' => 'Fayl adı qısadır.', +'filetype-banned' => 'Bu tip fayllar qadağandır.', +'verification-error' => 'Fayl təsdiqi baş tutmadı.', +'illegal-filename' => 'Fayl adına icazə yoxdur.', +'unknown-error' => 'Bilinməyən bir xəta yarandı.', +'tmp-create-error' => 'Müvəqqəti fayl yaradıla bilmədi.', +'tmp-write-error' => 'Müvəqqəti fayl yazılarkən xəta.', +'largefileserver' => 'Faylın ölçüsü yol verilən həddi aşır.', +'emptyfile' => 'Yüklədiyiniz fayl boşdur. Bu faylın adında olan hərf səhvi ilə bağlı ola bilər. Xahiş olunur ki, doğurdan da bu faylı yükləmək istədiyinizi yoxlayasınız.', +'fileexists' => "Yükləmək istədiyiniz adda fayl mövcuddur. Lütfən '''[[:$1]]''' keçidini yoxlayın və bu faylı yükləmək istədiyinizdən əmin olun. [[$1|thumb]]", -'successfulupload' => 'Yükləmə tamamlandı', -'uploadwarning' => 'Yükləmə xəbərdarlığı', -'savefile' => 'Faylı qeyd et', -'uploadedimage' => 'yükləndi "[[$1]]"', -'upload-source' => 'Mənbə faylı', -'sourcefilename' => 'Fayl adı mənbələri', -'sourceurl' => 'URL mənbəsi:', -'destfilename' => 'Fayl adı', -'upload-maxfilesize' => 'Faylın maksimum həcmi: $1', -'upload-description' => 'Faylın izahı', -'watchthisupload' => 'Bu faylı izlə', -'upload-wasdeleted' => "'''Diqqət! Siz əvvəl bu ad altında mövcud olmuş və silinmiş faylı yenidən yükləməkdəsiniz''' +'uploadwarning' => 'Yükləmə xəbərdarlığı', +'savefile' => 'Faylı qeyd et', +'uploadedimage' => 'yükləndi "[[$1]]"', +'overwroteimage' => '"[[$1]]"-in yeni versiyası yükləndi', +'uploaddisabled' => 'Yükləmə baş tutmadı', +'copyuploaddisabled' => 'URL-dən yükləmə baş tutmadı.', +'uploadfromurl-queued' => 'Yükləməniz növbə gözləyir', +'uploaddisabledtext' => 'Fayl yüklənməsi baş tutmadı.', +'upload-source' => 'Mənbə faylı', +'sourcefilename' => 'Fayl adı mənbələri', +'sourceurl' => 'URL mənbəsi:', +'destfilename' => 'Fayl adı', +'upload-maxfilesize' => 'Faylın maksimum həcmi: $1', +'upload-description' => 'Faylın izahı', +'upload-options' => 'Yükləmə parametrləri', +'watchthisupload' => 'Bu faylı izlə', +'upload-wasdeleted' => "'''Diqqət! Siz əvvəl bu ad altında mövcud olmuş və silinmiş faylı yenidən yükləməkdəsiniz''' Əvvəlcədən bu faylı yenidən yükləməyin nə dərəcədə lazımlı olduğunu müəyyənləşdirməyiniz məsləhətdir. Bu səhifənin silmə qeydləri aşağıda göstərilmişdir:", +'filename-prefix-blacklist' => ' #
    +# Sintaksis aşağıdakı kimi görünür:
    +#   * "#" simvolundan sətrin sonuna kimi yazılar şərhdir
    +#   * Tipik fayl adları üçün olan prefiksdəki hər bir boş olmayan sətir rəqəmli kamera trəfindən avtomatik qeydə alınır
    +CIMG # Casio
    +DSC_ # Nikon
    +DSCF # Fuji
    +DSCN # Nikon
    +DUW # digər mobil telefonlar
    +IMG # generic
    +JD # Jenoptik
    +MGP # Pentax
    +PICT # misc.
    + #
    ', +'upload-success-subj' => 'Yükləmə tamamlandı', +'upload-failure-subj' => 'Yükləmə problemi', +'upload-failure-msg' => 'Yüklədiyiniz [$2] forması ilə bağlı problem yaranıb: -'upload-file-error' => 'Daxili xəta', -'upload-unknown-size' => 'Naməlum həcm', +$1', +'upload-warning-subj' => 'Yükləmə xəbərdarlığı', + +'upload-proto-error' => 'Yanlış protokol', +'upload-file-error' => 'Daxili xəta', +'upload-misc-error' => 'Naməlum yükləmə xətası', +'upload-too-many-redirects' => 'URL-də xeyli yönləndirmə var', +'upload-unknown-size' => 'Naməlum həcm', +'upload-http-error' => ' HTTP xətası var : $1', # img_auth script messages 'img-auth-accessdenied' => 'Giriş qadağandır', +'img-auth-nofile' => 'Fayl "$1" mövcud deyil.', +'img-auth-streaming' => '"$1" axını.', +'img-auth-noread' => 'İstifadəçinin "$1"i oxumaq hüququ yoxdur.', # HTTP errors 'http-invalid-url' => 'Səhv URL: $1', 'http-read-error' => 'HTTP oxuma xətası', +'http-timed-out' => 'HTTP istəyinin vaxtı bitdi.', # Some likely curl errors. More could be added from 'upload-curl-error28' => 'Yükləmə vaxtı bitdi', -'license' => 'Lisenziya', -'license-header' => 'Lisenziya', -'nolicense' => 'Heç biri seçilməmişdir', +'license' => 'Lisenziya', +'license-header' => 'Lisenziya', +'nolicense' => 'Heç biri seçilməmişdir', +'upload_source_url' => ' (keçərli, hər kəsin daxil ola biləcəyi bir URL)', +'upload_source_file' => ' (kompyuterinizdəki bir fayl)', # Special:ListFiles +'listfiles_search_for' => 'Media adı üçün axtar:', 'imgfile' => 'fayl', 'listfiles' => 'Fayl siyahısı', +'listfiles_thumb' => 'Kiçik şəkil', 'listfiles_date' => 'Tarix', 'listfiles_name' => 'Ad', 'listfiles_user' => 'İstifadəçi', @@ -1176,26 +1370,28 @@ Bu səhifənin silmə qeydləri aşağıda göstərilmişdir:", 'listfiles_count' => 'Versiya', # File description page -'file-anchor-link' => 'Fayl', -'filehist' => 'Faylın tarixçəsi', -'filehist-help' => 'Faylın əvvəlki versiyasını görmək üçün gün/tarix bölməsindəki tarixləri tıqlayın.', -'filehist-deleteall' => 'hamısını sil', -'filehist-deleteone' => 'sil', -'filehist-revert' => 'əvvəlki vəziyyətinə', -'filehist-current' => 'indiki', -'filehist-datetime' => 'Tarix/Vaxt', -'filehist-thumb' => 'Kiçik şəkil', -'filehist-thumbtext' => '$1 tarixindəki versiyanın kiçildilmiş görüntüsü', -'filehist-user' => 'İstifadəçi', -'filehist-dimensions' => 'Ölçülər', -'filehist-filesize' => 'Faylın həcmi', -'filehist-comment' => 'Şərh', -'filehist-missing' => 'Şəkil gözlənilir', -'imagelinks' => 'Fayl keçidləri', -'linkstoimage' => '{{PLURAL:$1|səhifə|$1 səhifə}} bu fayla istinad edir:', -'sharedupload' => 'Bu fayl $1-dandır və ola bilsin ki, başqa layihələrdə də istifadə edilir.', -'uploadnewversion-linktext' => 'Bu faylın yeni versiyasını yüklə', -'shared-repo-from' => '$1-dan', +'file-anchor-link' => 'Fayl', +'filehist' => 'Faylın tarixçəsi', +'filehist-help' => 'Faylın əvvəlki versiyasını görmək üçün gün/tarix bölməsindəki tarixləri tıqlayın.', +'filehist-deleteall' => 'hamısını sil', +'filehist-deleteone' => 'sil', +'filehist-revert' => 'əvvəlki vəziyyətinə', +'filehist-current' => 'indiki', +'filehist-datetime' => 'Tarix/Vaxt', +'filehist-thumb' => 'Kiçik şəkil', +'filehist-thumbtext' => '$1 tarixindəki versiyanın kiçildilmiş görüntüsü', +'filehist-nothumb' => 'Miniatür yoxdur', +'filehist-user' => 'İstifadəçi', +'filehist-dimensions' => 'Ölçülər', +'filehist-filesize' => 'Faylın həcmi', +'filehist-comment' => 'Şərh', +'filehist-missing' => 'Şəkil gözlənilir', +'imagelinks' => 'Fayl keçidləri', +'linkstoimage' => '{{PLURAL:$1|səhifə|$1 səhifə}} bu fayla istinad edir:', +'sharedupload' => 'Bu fayl $1-dandır və ola bilsin ki, başqa layihələrdə də istifadə edilir.', +'uploadnewversion-linktext' => 'Bu faylın yeni versiyasını yüklə', +'shared-repo-from' => '$1-dan', +'shared-repo-name-wikimediacommons' => 'Wikimedia Commons', # File reversion 'filerevert' => '$1 faylını əvvəlki vəziyyətinə qaytar', @@ -1213,6 +1409,7 @@ Bu səhifənin silmə qeydləri aşağıda göstərilmişdir:", 'filedelete-submit' => 'Sil', 'filedelete-success' => "'''$1''' silinmişdir.", 'filedelete-success-old' => '\'\'\'[[Media:$1|$1]]\'\'\'-nin $3 və $2 versiyaları silinmişdir.', +'filedelete-nofile' => "'''$1''' mövcud deyil.", 'filedelete-otherreason' => 'Başqa/əlavə səbəb:', 'filedelete-reason-otherlist' => 'Başqa səbəb', 'filedelete-reason-dropdown' => '*Əsas silmə səbəbi @@ -1222,6 +1419,7 @@ Bu səhifənin silmə qeydləri aşağıda göstərilmişdir:", # MIME search 'mimesearch' => 'MIME axtar', +'mimetype' => 'MIME tipi:', 'download' => 'Yüklə', # Unwatched pages @@ -1254,8 +1452,8 @@ Bu səhifənin silmə qeydləri aşağıda göstərilmişdir:", 'statistics-edits' => '{{SITENAME}} yaranandan bəri edilən səhifə dəyişiklikləri', 'statistics-edits-average' => 'Hər səhifədəki orta hesabla dəyişiklik', 'statistics-views-total' => 'Cəmi göstərmə', +'statistics-views-total-desc' => 'Mövcud olmayan və xüsusi səhifələrin göstərilmələri daxil edilməmişdir.', 'statistics-views-peredit' => 'Redaktə başına göstərmə', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue İş sırası] uzunluğu', 'statistics-users' => 'Qeydiyyatdan keçmiş [[Special:ListUsers|istifadəçilər]]', 'statistics-users-active' => 'Aktiv istifadəçilər', 'statistics-users-active-desc' => 'Son {{PLURAL:$1|gün|$1 gündə}} iş görən istifadəçilər', @@ -1266,8 +1464,10 @@ Bu səhifənin silmə qeydləri aşağıda göstərilmişdir:", 'disambiguations-text' => "Aşağıdakı səhifələr '''dəqiqləşdirmə səhifələrinə''' keçid verir. Bunun əvəzinə onlar çox guman ki, müvafiq konkret bir məqaləni göstərməlidirlər.
    Səhifə o zaman dəqiqləşdirmə səhifəsi hesab edilir ki, onda [[MediaWiki:Disambiguationspage]]-dən keçid verilmiş şablon istifadə edilir.", -'doubleredirects' => 'İkiqat istiqamətləndirmələr', -'double-redirect-fixer' => 'Yönləndirmə səhvdir', +'doubleredirects' => 'İkiqat istiqamətləndirmələr', +'double-redirect-fixed-move' => '[[$1]] dəyişdirilib. +Hazırda [[$2]]-yə istiqamətlənib.', +'double-redirect-fixer' => 'Yönləndirmə səhvdir', 'brokenredirects' => 'Xətalı istiqamətləndirmə', 'brokenredirectstext' => 'Aşağıdakı istiqamətləndirmələr mövcud olmayan səhifələrə keçid verir:', @@ -1285,6 +1485,10 @@ Bu səhifənin silmə qeydləri aşağıda göstərilmişdir:", 'ncategories' => '$1 {{PLURAL:$1|kateqoriya|kateqoriya}}', 'nlinks' => '$1 {{PLURAL:$1|keçid|keçidlər}}', 'nmembers' => '$1 {{PLURAL:$1|üzv|üzv}}', +'nrevisions' => '$1 dəyişiklik', +'nviews' => '$1 baxış', +'nimagelinks' => '$1 səhifədə istifadə olunmur', +'ntransclusions' => '$1 səhifədə istifadə olunur', 'specialpage-empty' => 'Bu səhifə boşdur.', 'lonelypages' => 'Yetim səhifələr', 'uncategorizedpages' => 'Kateqoriyasız səhifələr', @@ -1296,10 +1500,12 @@ Bu səhifənin silmə qeydləri aşağıda göstərilmişdir:", 'popularpages' => 'Məşhur səhifələr', 'wantedcategories' => 'Təlabat olunan kateqoriyalar', 'wantedpages' => 'Tələb olunan səhifələr', +'wantedpages-badtitle' => 'Müraciət zamantı yanlış başlıq: $1', 'wantedfiles' => 'Tələb olunan fayllar', 'wantedtemplates' => 'Tələb olunan şablonlar', 'mostlinked' => 'Ən çox keçidlənən səhifələr', 'mostlinkedcategories' => 'Ən çox məqaləsi olan kateqoriyalar', +'mostlinkedtemplates' => 'Ən çox istifadə olunan şablonlar', 'mostcategories' => 'Kateqoriyası ən çox olan məqalələr', 'mostimages' => 'Ən çox istifadə edilmiş şəkillər', 'mostrevisions' => 'Ən çox nəzərdən keçirilmiş (versiyalı) məqalələr', @@ -1315,11 +1521,17 @@ Bu səhifənin silmə qeydləri aşağıda göstərilmişdir:", 'protectedpagesempty' => 'Hal-hazırda bu parametrə uyğun heç bir mühafizəli səhifə yoxdur', 'protectedtitles' => 'Mühafizəli başlıqlar', 'listusers' => 'İstifadəçi siyahısı', +'listusers-editsonly' => 'Yalnız redaktələri olan istifadəçiləri göstər', +'listusers-creationsort' => 'Yaranma tarixinə görə sırala', +'usereditcount' => '$1 {{PLURAL:$1|redaktə}}', +'usercreated' => '$1 $2 vaxtda yaradılıb', 'newpages' => 'Yeni səhifələr', 'newpages-username' => 'İstifadəçi adı:', 'ancientpages' => 'Ən köhnə səhifələr', 'move' => 'Adını dəyiş', 'movethispage' => 'Bu səhifənin adını dəyiş', +'notargettitle' => 'Verilməyib', +'nopagetitle' => 'Belə hədəf səhifəsi yoxdur', 'pager-newer-n' => '{{PLURAL:$1|1 daha yeni|$1 daha yeni}}', 'pager-older-n' => '{{PLURAL:$1|1 daha köhnə|$1 daha köhnə}}', 'suppress' => 'Təftişçi', @@ -1339,6 +1551,7 @@ Bu səhifənin silmə qeydləri aşağıda göstərilmişdir:", 'alllogstext' => '{{SITENAME}} üçün bütün mövcud qeydlərin birgə göstərişi. Qeyd növü, istifadəçi adı və ya təsir edilmiş səhifəni seçməklə daha spesifik ola bilərsiniz.', 'logempty' => 'Jurnalda uyğun qeyd tapılmadı.', +'log-title-wildcard' => 'Bu mətnlə başlayan başlıqları axtar', # Special:AllPages 'allpages' => 'Bütün səhifələr', @@ -1356,18 +1569,23 @@ Qeyd növü, istifadəçi adı və ya təsir edilmiş səhifəni seçməklə dah 'allpagesprefix' => 'Bu prefiksli səhifələri göstər:', # Special:Categories -'categories' => 'Kateqoriyalar', -'categoriespagetext' => 'Aşağıdakı {{PLURAL:$1|kateqoriyada|kateqoriyalarda}} səhifələr, yaxud media-fayllar var. +'categories' => 'Kateqoriyalar', +'categoriespagetext' => 'Aşağıdakı {{PLURAL:$1|kateqoriyada|kateqoriyalarda}} səhifələr, yaxud media-fayllar var. [[Special:UnusedCategories|İstifadə olunmayan kateqoriyalar]] burada göstərilməyib. Həmçinin, [[Special:WantedCategories|tələb olunan kateqoriyalara]] baxın.', +'special-categories-sort-count' => 'miqdara görə tənzimlə', +'special-categories-sort-abc' => 'əlifba sırası ilə düz', # Special:DeletedContributions +'deletedcontributions' => 'Silinmiş istifadəçi fəaliyyətləri', +'deletedcontributions-title' => 'Silinmiş istifadəçi fəaliyyətləri', 'sp-deletedcontributions-contribs' => 'köməklərim', # Special:LinkSearch -'linksearch' => 'Xarici keçidlər', -'linksearch-ns' => 'Adlar fəzası:', -'linksearch-ok' => 'Axtar', +'linksearch' => 'Xarici keçidlər', +'linksearch-pat' => 'Axtarış sxemi:', +'linksearch-ns' => 'Adlar fəzası:', +'linksearch-ok' => 'Axtar', # Special:ListUsers 'listusers-submit' => 'Göstər', @@ -1376,44 +1594,71 @@ Həmçinin, [[Special:WantedCategories|tələb olunan kateqoriyalara]] baxın.', # Special:ActiveUsers 'activeusers' => 'Aktiv istifadəçilərin siyahısı', +'activeusers-count' => '$1 {{PLURAL:$1|edit|redaktə}} son {{PLURAL:$3|day|$3 gün}}', 'activeusers-hidebots' => 'Botları gizlə', 'activeusers-hidesysops' => 'İdarəçiləri gizlə', 'activeusers-noresult' => 'İstifadəçi tapılmadı.', # Special:Log/newusers 'newuserlogpage' => 'Yeni istifadəçilərin qeydiyyatı', +'newuserlogpagetext' => 'Yeni qeydiyyatdan keçmiş istifadəçilərin siyahısı.', 'newuserlog-byemail' => 'parol e-maillə göndərildi', 'newuserlog-create-entry' => 'Yeni istifadəçi hesabı', +'newuserlog-create2-entry' => 'Yeri $1 hesabı açıldı', 'newuserlog-autocreate-entry' => 'Hesab avtomatik olaraq yaradıldı', # Special:ListGroupRights -'listgrouprights' => 'İstifadəçi qruplarının hüquqları', -'listgrouprights-summary' => 'Bu vikidə olan istifadəçi siyahıları və onların hüquqları aşağıda göstərilmişdir. +'listgrouprights' => 'İstifadəçi qruplarının hüquqları', +'listgrouprights-summary' => 'Bu vikidə olan istifadəçi siyahıları və onların hüquqları aşağıda göstərilmişdir. Fərdi hüquqlar haqqında əlavə məlumatı [[{{MediaWiki:Listgrouprights-helppage}}]] səhifəsində tapa bilərsiniz', -'listgrouprights-group' => 'Qrup', -'listgrouprights-rights' => 'Hüquqlar', -'listgrouprights-helppage' => 'Help:Qrup hüquqları', -'listgrouprights-members' => '(üzvləri)', +'listgrouprights-key' => '* Verilmiş hüquqlar +* Ləğv edilmiş hüquqlar', +'listgrouprights-group' => 'Qrup', +'listgrouprights-rights' => 'Hüquqlar', +'listgrouprights-helppage' => 'Help:Qrup hüquqları', +'listgrouprights-members' => '(üzvləri)', +'listgrouprights-right-display' => '$1 ($2)', +'listgrouprights-right-revoked' => '$1 ($2)', +'listgrouprights-addgroup' => '{{PLURAL:$2|Qrupu}} əlavə et: $1', +'listgrouprights-removegroup' => '{{PLURAL:$2|Qrupu}} sil: $1', +'listgrouprights-addgroup-all' => 'Bütün qrupları əlavə et', +'listgrouprights-removegroup-all' => 'Bütün qrupları sil', +'listgrouprights-addgroup-self' => 'Öz hesabına $1 {{PLURAL:$2|qrupunu|qruplarını}} əlavə et', +'listgrouprights-removegroup-self' => 'Öz hesabından $1 {{PLURAL:$2|qrupunu|qruplarını}} sil', +'listgrouprights-addgroup-self-all' => 'Bütün qrupları öz hesabına əlavə edə bilər', +'listgrouprights-removegroup-self-all' => 'Bütün qrupları öz hesabından çıxara bilər', # E-mail user -'mailnologin' => 'Ünvan yoxdur', -'emailuser' => 'İstifadəçiyə e-məktub yolla', -'emailpage' => 'İstifadəçiyə e-məktub yolla', -'defemailsubject' => '{{SITENAME}} e-məktub', -'noemailtitle' => 'E-məktub ünvanı yoxdur', -'noemailtext' => 'Bu istifadəçi işlək e-məktub ünvanını qeyd etməmişdir.', -'emailfrom' => 'Kimdən:', -'emailto' => 'Kimə', -'emailsubject' => 'Mövzu:', -'emailmessage' => 'Mesaj:', -'emailsend' => 'Göndər', -'emailsent' => 'E-məktub göndərildi', -'emailsenttext' => 'E-məktub mesajınız göndərildi.', +'mailnologin' => 'Ünvan yoxdur', +'emailuser' => 'İstifadəçiyə e-məktub yolla', +'emailpage' => 'İstifadəçiyə e-məktub yolla', +'usermailererror' => 'Elektron poçtla məlumat göndərilən zaman xəta baş vermişdir:', +'defemailsubject' => '{{SITENAME}} e-məktub', +'usermaildisabled' => 'İstifadəçi e-maili işləmir', +'noemailtitle' => 'E-məktub ünvanı yoxdur', +'noemailtext' => 'Bu istifadəçi işlək e-məktub ünvanını qeyd etməmişdir.', +'nowikiemailtitle' => 'E-poçtlara icazə verilmir', +'email-legend' => 'Digər {{SITENAME}} istifadəçilərinə ismarıc yollamaq', +'emailfrom' => 'Kimdən:', +'emailto' => 'Kimə', +'emailsubject' => 'Mövzu:', +'emailmessage' => 'Mesaj:', +'emailsend' => 'Göndər', +'emailccme' => 'Məktubun surətini elektron ünvanıma göndər.', +'emailccsubject' => ' $1: $2-yə olan ismarıclarınızın surəti', +'emailsent' => 'E-məktub göndərildi', +'emailsenttext' => 'E-məktub mesajınız göndərildi.', + +# User Messenger +'usermessage-summary' => 'Sistem mesajı qoyun.', +'usermessage-editor' => 'Sistem məlumatları', +'usermessage-template' => 'MediaWiki:İstifadəçi müzakirəsi', # Watchlist 'watchlist' => 'İzlədiyim səhifələr', 'mywatchlist' => 'İzlədiyim səhifələr', -'watchlistfor' => "('''$1''' üçün)", +'watchlistfor2' => '$1 $2 üçün', +'nowatchlist' => 'İzləmə siyahınız böşdur.', 'watchnologin' => 'Daxil olmamısınız', 'watchnologintext' => 'İzləmə siyahınızda dəyişiklik aparmaq üçün [[Special:UserLogin|daxil olmalısınız]].', 'addedwatch' => 'İzləmə siyahısına əlavə edildi.', @@ -1426,6 +1671,7 @@ Səhifəni izləmə sıyahınızdan çıxarmaq üçün yan lovhədəki "izləmə 'watchthispage' => 'Bu səhifəni izlə', 'unwatch' => 'İzləmə', 'unwatchthispage' => 'İzləmə', +'notanarticle' => 'Səhifə boşdur', 'watchnochange' => 'Verilən vaxt ərzində heç bir izlədiyiniz səhifə redaktə edilməmişdir.', 'watchlist-details' => 'Müzakirə səhifələrini çıxmaq şərtilə {{PLURAL:$1|$1 səhifəni|$1 səhifəni}} izləyirsiniz.', 'wlheader-enotif' => '* E-məktubla bildiriş aktivdir.', @@ -1507,11 +1753,17 @@ Sonuncu silinmələrə bax: $2.', 'delete-edit-reasonlist' => 'Silmə səbəblərinin redaktəsi', # Rollback -'rollback' => 'Əvvəlki versiya', -'rollbacklink' => 'əvvəlki halına qaytar', -'cantrollback' => 'Redaktə geri qaytarıla bilməz; axırıncı redaktə səhifədə olan yeganə fəaliyyətdir.', -'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|Müzakirə]]) tərəfindən edilmiş dəyişikliklər [[User:$1|$1]] tərəfindən edilmiş dəyişikliklərə qaytarıldı.', -'rollback-success' => '$1 tərəfindən edilmiş redaktələr geri qaytarıldı; $2 tərəfindən yaradılmış son versiya bərpa olundu.', +'rollback' => 'Əvvəlki versiya', +'rollback_short' => 'əvvəlki halına qaytar', +'rollbacklink' => 'əvvəlki halına qaytar', +'rollbackfailed' => 'Geri qaytarma uğursuz', +'cantrollback' => 'Redaktə geri qaytarıla bilməz; axırıncı redaktə səhifədə olan yeganə fəaliyyətdir.', +'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|Müzakirə]]) tərəfindən edilmiş dəyişikliklər [[User:$1|$1]] tərəfindən edilmiş dəyişikliklərə qaytarıldı.', +'revertpage-nouser' => '(istifadəçi adı çıxarılmış) tərəfindən edilən dəyişikliklər [[User:$1|$1]] tərəfindən edilən son dəyişikliyə geri alındı', +'rollback-success' => '$1 tərəfindən edilmiş redaktələr geri qaytarıldı; $2 tərəfindən yaradılmış son versiya bərpa olundu.', + +# Edit tokens +'sessionfailure-title' => 'Giriş səhvi', # Protect 'protectlogpage' => 'Mühafizə etmə qeydləri', @@ -1526,6 +1778,7 @@ Sonuncu silinmələrə bax: $2.', 'protectexpiry' => 'Vaxtı bitib', 'protect_expiry_invalid' => 'Mühafizənin bitmə vaxtı səhvdir.', 'protect_expiry_old' => 'Bitmə vaxtı keçmişdir.', +'protect-unchain-permissions' => 'Mühafizənin əlavə parametrlərini açmaq', 'protect-text' => "Siz '''$1''' səhifəsinin mühafizə səviyyəsini görə və dəyişə bilərsiniz.", 'protect-locked-blocked' => "Səhifənin bloklu olduğu müddətdə siz mühafizə səviyyəsini dəyişə bilməzsiniz. '''$1''' səhifəsində hal-hazırda edə biləcəyiniz əməliyyatlar bunlardır:", @@ -1545,8 +1798,10 @@ Sonuncu silinmələrə bax: $2.', 'protect-cantedit' => 'Bu səhifənin mühafizə dərəcəsini dəyişdirə bilməzsiniz, çünki bu dəyişiklik üçün hüququnuz yoxdur.', 'protect-othertime' => 'Başqa vaxt:', 'protect-othertime-op' => 'Başqa vaxt', +'protect-existing-expiry' => 'Mövcud bitiş zamanı: $3, $2', 'protect-otherreason' => 'Digər/əlavə səbəb:', 'protect-otherreason-op' => 'Digər səbəb', +'protect-edit-reasonlist' => 'Mühafizə səbəblərinin redaktəsi', 'protect-expiry-options' => '1 saat:1 hour,1 gün:1 day,1 həftə:1 week,2 həftə:2 weeks,1 ay:1 month,3 ay:3 months,6 ay:6 months,1 ill:1 year,Müddətsiz:infinite', 'restriction-type' => 'Hüquqlar:', 'restriction-level' => 'Məhdudiyyət dərəcəsi:', @@ -1566,24 +1821,35 @@ Sonuncu silinmələrə bax: $2.', 'restriction-level-all' => 'istənilən səviyyə', # Undelete -'undelete' => 'Silinmiş səhifələri göstər', -'undeletepage' => 'Silinmiş səhifələri göstər və ya bərpa et', -'viewdeletedpage' => 'Silinmiş səhifələri göstər', -'undeletebtn' => 'Bərpa et', -'undeletelink' => 'bax/bərpa et', -'undeleteviewlink' => 'görünüş', -'undeletereset' => 'Qur', -'undeleteinvert' => 'Seçilən xaricindəkiləri', -'undeletecomment' => 'Səbəb:', -'undeletedarticle' => '"[[$1]]" məqaləsi bərpa edilmişdir', -'cannotundelete' => 'Silməni ləğv etmə yetinə yetirilə bilmir; başqa birisi daha əvvəl səhifənin silinməsini ləğv etmiş ola bilər.', -'undeletedpage' => "'''$1 bərpa edildi''' +'undelete' => 'Silinmiş səhifələri göstər', +'undeletepage' => 'Silinmiş səhifələri göstər və ya bərpa et', +'undeletepagetitle' => "'''Aşağıdakı, [[:$1|$1]] səhifəsinin silinmiş dəyişikliklərindən ibarətdir'''.", +'viewdeletedpage' => 'Silinmiş səhifələri göstər', +'undelete-fieldset-title' => 'Dəyişiklikləri geri yüklə', +'undelete-revision' => '$3 tərəfindən $1 səhifəsinin silinmiş redaktəsi ($4 tarixinden bəri, $5 saatda):', +'undelete-nodiff' => 'Əvvəlki redaktə tapılmadı.', +'undeletebtn' => 'Bərpa et', +'undeletelink' => 'bax/bərpa et', +'undeleteviewlink' => 'görünüş', +'undeletereset' => 'Qur', +'undeleteinvert' => 'Seçilən xaricindəkiləri', +'undeletecomment' => 'Səbəb:', +'undeletedarticle' => '"[[$1]]" məqaləsi bərpa edilmişdir', +'cannotundelete' => 'Silməni ləğv etmə yetinə yetirilə bilmir; başqa birisi daha əvvəl səhifənin silinməsini ləğv etmiş ola bilər.', +'undeletedpage' => "'''$1 bərpa edildi''' Məqalələrin bərpa edilməsi və silinməsi haqqında son dəyişiklikləri nəzərdən keçirmək üçün [[Special:Log/delete|silmə qeydlərinə]] baxın.", -'undelete-header' => 'Son silinmiş səhifələrə baxmaq üçün [[Special:Log/delete|silmə qeydlərinə]] bax.', -'undelete-search-box' => 'Silinmiş səhifələri axtar.', -'undelete-search-submit' => 'Axtar', -'undelete-show-file-submit' => 'Bəli', +'undelete-header' => 'Son silinmiş səhifələrə baxmaq üçün [[Special:Log/delete|silmə qeydlərinə]] bax.', +'undelete-search-box' => 'Silinmiş səhifələri axtar.', +'undelete-search-prefix' => 'Bununla başlayan səhifəliri göstər:', +'undelete-search-submit' => 'Axtar', +'undelete-no-results' => 'Silmə arxivində birbiriylə örtüşən heç bir səhifə tapılmadı.', +'undelete-error-short' => 'Fayl silinərkən xəta: $1', +'undelete-error-long' => 'Fayl silinərkən üzə çıxan xətalar: + +$1', +'undelete-show-file-confirm' => '"$1" faylının $2 $3 tarixli silinmiş bir redaktəsini görmək istədiyinizdən əminsizinizmi?', +'undelete-show-file-submit' => 'Bəli', # Namespace form on various pages 'namespace' => 'Adlar fəzası:', @@ -1600,16 +1866,19 @@ Məqalələrin bərpa edilməsi və silinməsi haqqında son dəyişiklikləri n 'month' => 'Ay', 'year' => 'Axtarışa bu tarixdən etibarən başla:', -'sp-contributions-newbies' => 'Ancaq yeni istifadəçilərin fəaliyyətlərini göstər', -'sp-contributions-newbies-sub' => 'Yeni istifadəçilər üçün', -'sp-contributions-blocklog' => 'Bloklama qeydləri', -'sp-contributions-deleted' => 'silinmiş istifadəçi fəaliyyətləri', -'sp-contributions-logs' => 'Loqlar', -'sp-contributions-talk' => 'Müzakirə', -'sp-contributions-userrights' => 'istifadəçi hüquqları idarəsi', -'sp-contributions-search' => 'Fəaliyyətləri axtar', -'sp-contributions-username' => 'IP Ünvanı və ya istifadəçi adı:', -'sp-contributions-submit' => 'Axtar', +'sp-contributions-newbies' => 'Ancaq yeni istifadəçilərin fəaliyyətlərini göstər', +'sp-contributions-newbies-sub' => 'Yeni istifadəçilər üçün', +'sp-contributions-newbies-title' => 'Yeni hesablar üçün istifadəçi fəaliyyətləri', +'sp-contributions-blocklog' => 'Bloklama qeydləri', +'sp-contributions-deleted' => 'silinmiş istifadəçi fəaliyyətləri', +'sp-contributions-uploads' => 'yüklənənlər', +'sp-contributions-logs' => 'Loqlar', +'sp-contributions-talk' => 'Müzakirə', +'sp-contributions-userrights' => 'istifadəçi hüquqları idarəsi', +'sp-contributions-search' => 'Fəaliyyətləri axtar', +'sp-contributions-username' => 'IP Ünvanı və ya istifadəçi adı:', +'sp-contributions-toponly' => 'Yalnız ən son dəyişiklikləri göstər', +'sp-contributions-submit' => 'Axtar', # What links here 'whatlinkshere' => 'Bu səhifəyə bağlantılar', @@ -1617,6 +1886,8 @@ Məqalələrin bərpa edilməsi və silinməsi haqqında son dəyişiklikləri n 'whatlinkshere-page' => 'Səhifə:', 'whatlinkshere-backlink' => '← $1', 'linkshere' => "'''[[:$1]]''' səhifəsinə istinad edən səhifələr:", +'nolinkshere' => "'''[[:$1]]''' səhifəsinə keçid verən səhifə yoxdur.", +'nolinkshere-ns' => "Seçilmiş ad aralığında heç bir səhifə '''[[:$1]]''' səhifəsinə keçid vermir.", 'isredirect' => 'İstiqamətləndirmə səhifəsi', 'istemplate' => 'daxil olmuş', 'isimage' => 'şəkil üçün keçid', @@ -1638,6 +1909,15 @@ Məqalələrin bərpa edilməsi və silinməsi haqqında son dəyişiklikləri n 'ipbexpiry' => 'Bitmə müddəti:', 'ipbreason' => 'Səbəb:', 'ipbreasonotherlist' => 'Digər səbəb', +'ipbreason-dropdown' => '*Bloklama səbəbləri: +** Yalan məlumatların əlavə edilməsi +** Səhifənin məzmununun silinməsi +** Xarici saytlara spam-keçidlər +** Səhifəyə mənasız və yararsız əlavələrə görə +** Hədə və təqiblərə görə +** Təhqirə görə +** Çoxsaylı hesabdan sui istifadəyə görə +** Qadağan olunmuş istifadəçi adına görə', 'ipbanononly' => 'Yalnız anonim istifadəçiləri blokla', 'ipbcreateaccount' => 'Hesab açmanı məhdudlaşdır', 'ipbsubmit' => 'Bu istifadəçini blokla', @@ -1664,6 +1944,8 @@ Bax [[Special:IPBlockList|IP blok siyahısı]] bloklanmış IP-lər.', 'unblocked-id' => '$1-nin bloku götürüldü', 'ipblocklist' => 'Bloklanmış istifadəçilər', 'ipblocklist-legend' => 'Bloklanmış istifadəçini axtar', +'ipblocklist-username' => 'İstifadəçi adı və ya IP ünvanı:', +'ipblocklist-sh-addressblocks' => '$1 tək IP blokları', 'ipblocklist-submit' => 'Axtar', 'ipblocklist-localblock' => 'Yerli blok', 'ipblocklist-otherblocks' => 'Başqa {{PLURAL:$1|bloklama|bloklamalar}}', @@ -1709,10 +1991,24 @@ $1 artıq bloklanıb. Bloklama şərtlərini dəyişmək istəyirsiniz?', 'ipb-otherblocks-header' => 'Başqa {{PLURAL:$1|bloklama|bloklamalar}}', 'ipb_cant_unblock' => 'Xəta: Bloklama IDsi $1 tapılmadı. Bloklamanın götürülməsi mümkündür.', +'ip_range_invalid' => 'Yanlış IP', +'blockme' => 'Məni blokla', 'proxyblocker' => 'Proksi bloklayıcı', +'proxyblocker-disabled' => 'Bu funksiya əngəlləndi.', 'proxyblocksuccess' => 'Oldu.', 'sorbs' => 'DNSBL', +# Developer tools +'lockdb' => 'Verilənlər bazasını blokla', +'unlockdb' => 'Verilənlər bazasından bloku götür', +'lockconfirm' => 'Bəli, mən həqiqətən verilənlər bazasının bağlamaq istəyirəm.', +'unlockconfirm' => 'Bəli, mən həqiqətən verilənlər bazasının blokunu açmaq istəyirəm.', +'lockbtn' => 'Verilənlər bazasını blokla', +'unlockbtn' => 'Verilənlər bazasından bloku götür', +'lockdbsuccesssub' => 'Verilənlər bazası bloklanıb', +'unlockdbsuccesssub' => 'Bloklanma verilənlər bazası silinib', +'databasenotlocked' => 'Verilənlər bazası bloklanmayıb.', + # Move page 'move-page' => 'Dəyişdir $1', 'move-page-legend' => 'Səhifənin adını dəyiş', @@ -1733,19 +2029,30 @@ Bu yerdəyişmə populiyar səhifə üçün əsaslı və gözlənilməz ola bil Həmin hallarda , ehtiyac yaranarsa siz səhifələri əllə birləşdirmək məcburiyyətində qalacaqsınız", 'movearticle' => 'Səhifənin adını dəyişdir', 'movenologin' => 'Sistemdə deyilsiniz', +'movenotallowed' => 'Siz səhifələrin adını dəyişə bilməzsiniz.', +'movenotallowedfile' => 'Siz faylların adını dəyişə bilməzsiniz.', +'cant-move-user-page' => 'İstifadəçi səhifələrinin adını dəyişə bilməzsiniz (başlıqlardan başqa).', 'newtitle' => 'Yeni başlıq', 'move-watch' => 'Bu səhifəni izlə', 'movepagebtn' => 'Səhifənin adını dəyiş', 'pagemovedsub' => 'Yerdəyişmə edilmişdir', 'movepage-moved' => '\'\'\'"$1" səhifəsi "$2" səhifəsinə yerləşdirilmişdir\'\'\'', +'movepage-moved-redirect' => 'Yönləndirmə yaradıldı.', +'movepage-moved-noredirect' => 'Yönləndirmənin yaradılmasının qarşııs alındı.', 'articleexists' => 'Bu adda səhifə artıq mövcuddur və ya sizin seçdiyiniz ad uyğun deyil. Zəhmət olmasa başqa ad seçin.', 'talkexists' => "'''Səhifənin adı dəyişdi, lakin müzakirə səhifəsi yeni adla olduğu üçün dəyişə bilmir. Zəhmət olmasa, onun adını özünüz dəyişin.'''", 'movedto' => 'dəyişdi', 'movetalk' => 'Bu səhifənin müzakirə səhifəsinin də adını dəyişdir.', +'move-subpages' => 'Yarımsəhifələri köçür ($1-ə qədər)', +'move-talk-subpages' => 'Müzakirə səhifələrinin alt səhifələrini köçür ($1-ə qədər)', +'movepage-page-moved' => '$1 səhifəsi $2 səhifəsinə köçürülüb.', +'movepage-page-unmoved' => '$1 səhifəsi $2 səhifəsinə köçürülə bilinmir.', '1movedto2' => '[[$1]] adı dəyişildi. Yeni adı: [[$2]]', '1movedto2_redir' => '[[$1]] adı və istiqamətləndirmə dəyişildi: [[$2]]', +'move-redirect-suppressed' => 'yönləndirmənin qarşısı alındı', 'movelogpage' => 'Yerdəyişmə qeydləri', +'movesubpage' => '{{PLURAL:$1|alt səhifə}}', 'movenosubpage' => 'Bu səhifənin altsəhifəsi yoxdur.', 'movereason' => 'Səbəb:', 'revertmove' => 'Əvvəlki vəziyyətinə', @@ -1756,8 +2063,12 @@ Zəhmət olmasa başqa ad seçin.', 'delete_and_move_confirm' => 'Bəli, səhifəni sil', 'delete_and_move_reason' => 'Ad dəyişməyə yer açmaq üçün silinmişdir', 'selfmove' => 'Səhifənin hazırkı adı ilə dəyişmək istənilən ad eynidir. Bu əməliyyat yerinə yetirilə bilməz.', +'immobile-source-namespace' => '"$1" ad aralığında səhifə adları dəyişmir.', +'immobile-target-namespace' => 'Səhilərin "$1" ad aralığına daşınması qeyri-mümkündür', 'immobile-target-namespace-iw' => 'İntervikilər səhifə adının dəyişməsi üçün əsas ola bilməz.', 'immobile-source-page' => 'Bu səhifənin adı dəyişdirilə bilməz.', +'immobile-target-page' => 'Bu hədəf başlığına daşınmır.', +'imageinvalidfilename' => 'Hədəf fayl adı keçərsizdir.', 'protectedpagemovewarning' => "'''Xəbərdarlıq:''' Bu səhifə mühafizə edildiyi üçün onun adını yalnız idarəçilər dəyişə bilərlər.", # Export @@ -1771,34 +2082,54 @@ Zəhmət olmasa başqa ad seçin.', 'export-download' => 'Faylı qeyd et', # Namespace 8 related -'allmessages' => 'Sistem məlumatları', -'allmessagesname' => 'Ad', -'allmessagesdefault' => 'İlkin mətn', -'allmessagescurrent' => 'İndiki mətn', -'allmessagestext' => 'Bu MediaWiki-də olan sistem mesajlarının siyahısıdır. Əgər MediaWiki-ni lokallaşdırmaq işində kömək etmək isəyirsinizsə, lütfən [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] və [http://translatewiki.net translatewiki.net]-ə baş çəkin.', -'allmessages-filter-all' => 'Hamısı', -'allmessages-filter-modified' => 'Dəyişdirilmiş', -'allmessages-language' => 'Dil:', -'allmessages-filter-submit' => 'Keç', +'allmessages' => 'Sistem məlumatları', +'allmessagesname' => 'Ad', +'allmessagesdefault' => 'İlkin mətn', +'allmessagescurrent' => 'İndiki mətn', +'allmessagestext' => 'Bu MediaWiki-də olan sistem mesajlarının siyahısıdır. Əgər MediaWiki-ni lokallaşdırmaq işində kömək etmək isəyirsinizsə, lütfən [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] və [http://translatewiki.net translatewiki.net]-ə baş çəkin.', +'allmessages-filter-legend' => 'Filtr', +'allmessages-filter-unmodified' => 'Dəyişdirilməmiş', +'allmessages-filter-all' => 'Hamısı', +'allmessages-filter-modified' => 'Dəyişdirilmiş', +'allmessages-language' => 'Dil:', +'allmessages-filter-submit' => 'Keç', # Thumbnails 'thumbnail-more' => 'Böyüt', +'filemissing' => 'Şəkil gözlənilir', 'djvu_page_error' => 'DjVu səhifəsi əlçatmazdır', 'djvu_no_xml' => 'DjVu üçün XML faylı almaq mümkün deyil.', 'thumbnail_image-missing' => 'Belə görünür ki, $1 faylı yoxdur', # Special:Import -'import-interwiki-submit' => 'İdxal', -'import-upload-filename' => 'Fayl adı:', -'import-comment' => 'Şərh:', -'importnotext' => 'Boş və ya mətn yoxdur', -'import-noarticle' => 'Çıxarılacaq səhifə yoxdur!', -'import-token-mismatch' => 'Seans məlumatlarının itirilməsi. Lütfən, yenidən cəhd edin.', -'import-invalid-interwiki' => 'Göstərilən vikidən köçürmək mümkün deyil', +'import' => 'Səhifələri idxal et', +'importinterwiki' => 'Vikilərarası çıxarma', +'import-interwiki-source' => 'Mənbə viki/səhifə:', +'import-interwiki-history' => 'Səhifənin dəyişmə tarixçələrinin hamısını köçür', +'import-interwiki-templates' => 'Bütün şablonlarla birlikdə', +'import-interwiki-submit' => 'İdxal', +'import-upload-filename' => 'Fayl adı:', +'import-comment' => 'Şərh:', +'importstart' => 'Çıxarılacaq səhifələr...', +'import-revision-count' => '$1 {{PLURAL:$1|revision|dəyişiklik}}', +'importnopages' => 'Çıxarılacaq səhifə yoxdur.', +'importfailed' => 'Uğursuz çıxarış: $1', +'importcantopen' => 'Çıxarılacaq fayl açılmadı', +'importbadinterwiki' => 'Yanlış interviki keçidi', +'importnotext' => 'Boş və ya mətn yoxdur', +'importsuccess' => 'Çıxarma başa çatdı!', +'import-noarticle' => 'Çıxarılacaq səhifə yoxdur!', +'xml-error-string' => '$1 $2 sətrində, $3 sütünunda ($4 bayt): $5', +'import-upload' => 'XML-veriləni yüklə', +'import-token-mismatch' => 'Seans məlumatlarının itirilməsi. Lütfən, yenidən cəhd edin.', +'import-invalid-interwiki' => 'Göstərilən vikidən köçürmək mümkün deyil', # Import log -'importlogpage' => 'Çıxarılma gündəliyi', -'importlogpagetext' => 'Səhifələrin idarəçilər tərəfindən digər vikilərdən dəyişiklik tarixçəsi ilə birlikdə köçürülməsi', +'importlogpage' => 'Çıxarılma gündəliyi', +'importlogpagetext' => 'Səhifələrin idarəçilər tərəfindən digər vikilərdən dəyişiklik tarixçəsi ilə birlikdə köçürülməsi', +'import-logentry-upload-detail' => '$1 {{PLURAL:$1|revision|dəyişiklik}}', +'import-logentry-interwiki' => 'vikilərarası idxal $1', +'import-logentry-interwiki-detail' => '$2-dən $1 {{PLURAL:$1|dəyişiklik|dəyişikliklər}}', # Tooltip help for the actions 'tooltip-pt-userpage' => 'İstifadəçi səhifəniz', @@ -1864,6 +2195,31 @@ Zəhmət olmasa başqa ad seçin.', 'tooltip-upload' => 'Yükləməni başlat', 'tooltip-rollback' => 'Sonuncu istifadəçi tərəfindən edilmiş bütün dəyişiklikləri bir dəfəyə geri qaytar', 'tooltip-undo' => 'Edilmiş dəyişikliyi geri qaytar və geri qaytarma səbəbini qeyd etmək üçün sınaq göstərişini aç', +'tooltip-preferences-save' => 'Nizamlamaları saxla', + +# Stylesheets +'common.css' => '/* Burada yerləşən CSS bütün skinlərə tətbiq olunur */', +'standard.css' => '/* Burada yerləşən CSS Standard skin istifadəçilərinə tətbiq olunur */', +'nostalgia.css' => '/* Burada yerləşən CSS Nostalgia skin istifadəçilərinə tətbiq olunur */', +'cologneblue.css' => '/* Burada yerləşən CSS Cologne Blue skin istifadəçilərinə tətbiq olunur */', +'monobook.css' => '/* Burada yerləşən CSS Monobook skin istifadəçilərinə tətbiq olunur */', +'myskin.css' => '/* Burada yerləşən CSS MySkin skin istifadəçilərinə tətbiq olunur */', +'chick.css' => '/* Burada yerləşən CSS Chick skin istifadəçilərinə tətbiq olunur */', +'simple.css' => '/* Burada yerləşən CSS Simple skin istifadəçilərinə tətbiq olunur */', +'modern.css' => '/* Burada yerləşən CSS Modern skin istifadəçilərinə tətbiq olunur */', +'vector.css' => '/* Burada yerləşən CSS Vector istifadəçilərinə tətbiq olunur */', + +# Scripts +'common.js' => '/* Burada istifadəçilərin hamısı üçün bütün səhifələrdə istənilən JavaScript yüklənəcək */', +'standard.js' => '/* Burada Standard skin istifadəçiləri üçün istənilən JavaScript yüklənəcək */', +'nostalgia.js' => '/* Burada Nostalgia skin istifadəçiləri üçün istənilən JavaScript yüklənəcək */', +'cologneblue.js' => '/* Burada Cologne Blue skin istifadəçiləri üçün istənilən JavaScript yüklənəcək */', +'monobook.js' => '/* Burada MonoBook skin istifadəçiləri üçün istənilən JavaScript yüklənəcək */', +'myskin.js' => '/* Burada MySkin skin istifadəçiləri üçün istənilən JavaScript yüklənəcək */', +'chick.js' => '/* Burada Chick skin istifadəçiləri üçün istənilən JavaScript yüklənəcək */', +'simple.js' => '/* Burada Simple skin istifadəçiləri üçün istənilən JavaScript yüklənəcək */', +'modern.js' => '/* Burada Modern skin istifadəçiləri üçün istənilən JavaScript yüklənəcək */', +'vector.js' => '/* Burada Vector skin istifadəçiləri üçün istənilən JavaScript yüklənəcək */', # Metadata 'nodublincore' => 'Bu server üçün Dublin Core RDF metaməlumatları qadağandır.', @@ -1871,24 +2227,35 @@ Zəhmət olmasa başqa ad seçin.', 'notacceptable' => 'Viki-server məlumatları brauzerinizin oxuya biləcəyi formatda təqdim edə bilmir.', # Attribution -'anonymous' => '{{SITENAME}} saytının anonim {{PLURAL:$1|istifadəçisi|istifadəçiləri}}', -'siteuser' => '{{SITENAME}} istifadəçisi $1', -'anonuser' => '{{SITENAME}} anonim istifadəçisi $1', -'others' => 'digərləri', -'creditspage' => 'Səhifə kreditleri', +'anonymous' => '{{SITENAME}} saytının anonim {{PLURAL:$1|istifadəçisi|istifadəçiləri}}', +'siteuser' => '{{SITENAME}} istifadəçisi $1', +'anonuser' => '{{SITENAME}} anonim istifadəçisi $1', +'othercontribs' => '$1-in işinə əsaslanıb.', +'others' => 'digərləri', +'siteusers' => '{{SITENAME}} {{PLURAL:$2|user|istifadəçi}} $1', +'anonusers' => '{{SITENAME}} anonim {{PLURAL:$2|user|istifadəçi}} $1', +'creditspage' => 'Səhifə kreditleri', # Spam protection 'spamprotectiontitle' => 'Spam qoruma süzgəci', +'spambot_username' => 'MediaViki spam təmizləməsi', # Info page 'infosubtitle' => 'Səhifə üçün məlumat', +'numedits' => 'Redaktələrin sayı (səhifə): $1', +'numtalkedits' => 'Redaktələrin sayı (müzakirə səhifəsi): $1', +'numwatchers' => 'Baxış sayı: $1', # Skin names -'skinname-standard' => 'Klassik', -'skinname-nostalgia' => 'Nostalgia', -'skinname-monobook' => 'MonoBook', -'skinname-myskin' => 'MySkin', -'skinname-modern' => 'Müasir', +'skinname-standard' => 'Classic', +'skinname-nostalgia' => 'Nostalgia', +'skinname-cologneblue' => 'Cologne Blue', +'skinname-monobook' => 'MonoBook', +'skinname-myskin' => 'MySkin', +'skinname-chick' => 'Chick', +'skinname-simple' => 'Simple', +'skinname-modern' => 'Modern', +'skinname-vector' => 'Vector', # Math options 'mw_math_png' => 'Həmişə PNG formatında göstər', @@ -1904,13 +2271,18 @@ Zəhmət olmasa başqa ad seçin.', 'math_syntax_error' => 'sintaksis xətası', # Patrolling -'markaspatrolleddiff' => 'Yoxlannıldı', -'markedaspatrolled' => 'Yoxlannıldı', +'markaspatrolleddiff' => 'Yoxlannıldı', +'markaspatrolledtext' => 'Səhifəni patrullanmış kimi işarələ', +'markedaspatrolled' => 'Yoxlannıldı', +'rcpatroldisabled' => 'Son dəyişikliklərin patrullanması qadağandır', +'markedaspatrollederror' => 'Yoxlanmadı', # Patrol log -'patrol-log-page' => 'Patrul gündəliyi', -'patrol-log-auto' => '(avtomatik)', -'patrol-log-diff' => 'təftiş $1', +'patrol-log-page' => 'Patrul gündəliyi', +'patrol-log-header' => 'Bu yoxlanmış dəyişikliklərin gündəliyidir.', +'patrol-log-auto' => '(avtomatik)', +'patrol-log-diff' => 'təftiş $1', +'log-show-hide-patrol' => '$1 patrul gündəliyi', # Image deletion 'deletedrevision' => 'Köhnə versiyaları silindi $1.', @@ -1929,13 +2301,18 @@ $1', # Media information 'imagemaxsize' => "Şəkilin maksimal tutumu:
    ''(faylın təsviri səhifələri üçün)''", 'thumbsize' => 'Kiçik ölçü:', +'widthheight' => '$1×$2', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|səhifə|səhifələr}}', -'file-info-size' => '($1 × $2 piksel, fayl həcmi: $3, MIME növü: $4)', +'file-info' => 'faylın ölçüsü: $1, MIME tipi: $2', +'file-info-size' => '$1 × $2 piksel, fayl həcmi: $3, MIME növü: $4', 'file-nohires' => 'Daha dəqiq versiyası yoxdur.', -'svg-long-desc' => '(SVG fayl, nominal olaraq $1 × $2 piksel, faylın ölçüsü: $3)', +'svg-long-desc' => 'SVG fayl, nominal olaraq $1 × $2 piksel, faylın ölçüsü: $3', 'show-big-image' => 'Daha yüksək keyfiyyətli şəkil', 'show-big-image-thumb' => 'Sınaq göstərişi ölçüsü: $1 × $2 piksel', 'file-info-gif-looped' => 'ilmələnib', +'file-info-gif-frames' => '$1 {{PLURAL:$1|frame|çərçivə}}', +'file-info-png-looped' => 'ilmələnib', +'file-info-png-frames' => '$1 {{PLURAL:$1|frame|çərçivə}}', # Special:NewFiles 'newimages' => 'Yeni faylların siyahısı', @@ -1947,8 +2324,10 @@ $1', 'bydate' => 'tarixə görə', # Video information, used by Language::formatTimePeriod() to format lengths in the above messages -'seconds-abbrev' => 's', -'hours-abbrev' => 'h', +'video-dims' => '$1, $2×$3', +'seconds-abbrev' => 'san', +'minutes-abbrev' => 'd', +'hours-abbrev' => 'saat', # Bad image list 'bad_image_list' => 'Format bu şəkildə olmalıdır: @@ -1991,64 +2370,153 @@ Variants for Chinese language 'metadata-collapse' => 'Ətraflı məlumatları gizlə', # EXIF tags -'exif-imagewidth' => 'Genişlik', -'exif-imagelength' => 'Hündürlük', -'exif-artist' => 'Müəllif', -'exif-usercomment' => 'İstifadəçi şərhi', -'exif-exposuretime-format' => '$1 saniyə ($2)', -'exif-fnumber' => 'F nömrəsi', -'exif-aperturevalue' => 'Obyektiv gözü', -'exif-brightnessvalue' => 'Parlaqlıq', -'exif-lightsource' => 'İşıq mənbəsi', -'exif-flash' => 'Flaş', -'exif-subjectarea' => 'Subyekt sahəsi', -'exif-subjectlocation' => 'Subyekt yeri', -'exif-filesource' => 'Fayl mənbəsi', -'exif-contrast' => 'Kontrast', -'exif-gpslatituderef' => 'Şimal və ya cənub en dairəsi', -'exif-gpslatitude' => 'En dairəsi', -'exif-gpslongituderef' => 'Şəq və ya qərb uzunluq dairəsi', -'exif-gpslongitude' => 'Uzunluq dairəsi', -'exif-gpsaltitude' => 'Yüksəklik', -'exif-gpsstatus' => 'Statusu qəbul edən', -'exif-gpsmeasuremode' => 'Ölçmə üsulu', -'exif-gpsdestlatitude' => 'En dairəsinin təyin olunması', -'exif-gpsdestlongitude' => 'Uzunluq dairəsinin təyin olunması', -'exif-gpsdatestamp' => 'Zaman', +'exif-imagewidth' => 'Genişlik', +'exif-imagelength' => 'Hündürlük', +'exif-compression' => 'Sıxılmamış', +'exif-orientation' => 'Orientasiya', +'exif-samplesperpixel' => 'Rəng komponentlərinin sayı', +'exif-ycbcrpositioning' => 'Y və C komponetlərinə görə yerləşmə sırası', +'exif-xresolution' => 'Üfiqi xətt', +'exif-yresolution' => 'Şaquli xətt', +'exif-rowsperstrip' => 'Hər blokdakı sətirlərin sayı', +'exif-jpeginterchangeformatlength' => 'JPEG məlumat bazasının baytları', +'exif-transferfunction' => 'Transfer funksiyası', +'exif-datetime' => 'Faylın dəyişməsi tarixi və vaxtı', +'exif-imagedescription' => 'Şəkil başlığı', +'exif-make' => 'Kamera istehsalçısı', +'exif-model' => 'Kamera modeli', +'exif-software' => 'Proqram təminatı', +'exif-artist' => 'Müəllif', +'exif-copyright' => 'Sahibinin müəlliflik hüququ', +'exif-exifversion' => 'Exif versiyası', +'exif-colorspace' => 'Rəng sahəsi', +'exif-pixelydimension' => 'Şəkilin eni', +'exif-pixelxdimension' => 'Şəkilin hündürlüyü', +'exif-usercomment' => 'İstifadəçi şərhi', +'exif-exposuretime-format' => '$1 saniyə ($2)', +'exif-fnumber' => 'F nömrəsi', +'exif-exposureprogram' => 'Ekspozisiya proqramı', +'exif-spectralsensitivity' => 'Spektral həssaslıq', +'exif-isospeedratings' => 'ISO sürət reytinqi', +'exif-aperturevalue' => 'Obyektiv gözü', +'exif-brightnessvalue' => 'Parlaqlıq', +'exif-subjectdistance' => 'Obyektə qədər məsafə', +'exif-lightsource' => 'İşıq mənbəsi', +'exif-flash' => 'Flaş', +'exif-focallength' => 'Fokus məsafəsi', +'exif-subjectarea' => 'Subyekt sahəsi', +'exif-flashenergy' => 'Flaş enerjisi', +'exif-subjectlocation' => 'Subyekt yeri', +'exif-filesource' => 'Fayl mənbəsi', +'exif-scenetype' => 'Səhnə tipi', +'exif-whitebalance' => 'Ağ balansı', +'exif-gaincontrol' => 'Səhnə idarəsi', +'exif-contrast' => 'Kontrast', +'exif-saturation' => 'Doymuşluq', +'exif-sharpness' => 'Kəskinlik', +'exif-gpsversionid' => 'GPS etiket versiyası', +'exif-gpslatituderef' => 'Şimal və ya cənub en dairəsi', +'exif-gpslatitude' => 'En dairəsi', +'exif-gpslongituderef' => 'Şəq və ya qərb uzunluq dairəsi', +'exif-gpslongitude' => 'Uzunluq dairəsi', +'exif-gpsaltitude' => 'Yüksəklik', +'exif-gpstimestamp' => 'GPS vaxtı (atom saatı)', +'exif-gpsstatus' => 'Statusu qəbul edən', +'exif-gpsmeasuremode' => 'Ölçmə üsulu', +'exif-gpsdop' => 'Ölçünün dəqiqliyi', +'exif-gpsspeedref' => 'Sürət uniti', +'exif-gpsspeed' => 'GPS qəbuledicinin sürəti', +'exif-gpstrack' => 'İdarəetmə mexanizmi', +'exif-gpsimgdirection' => 'Şəklin istiqaməti', +'exif-gpsdestlatitude' => 'En dairəsinin təyin olunması', +'exif-gpsdestlongitude' => 'Uzunluq dairəsinin təyin olunması', +'exif-gpsdestbearing' => 'Obyektin pelenqi', +'exif-gpsdestdistance' => 'Məsafə', +'exif-gpsprocessingmethod' => 'GPS prosesinin adı', +'exif-gpsareainformation' => 'GPS sahənin adı', +'exif-gpsdatestamp' => 'Zaman', +'exif-gpsdifferential' => 'GPS diferensial korreksiya', +'exif-objectname' => 'Qısa başlıq', + +# EXIF attributes +'exif-compression-1' => 'Sıxılmış', 'exif-unknowndate' => 'Naməlum tarix', 'exif-orientation-1' => 'Normal', +'exif-orientation-2' => 'Üfüqi çevrilib', 'exif-orientation-3' => '180° döndərilib', +'exif-orientation-4' => 'Şaquli çevrilib', +'exif-orientation-5' => 'Saat əqrəbinin əksi istiqamətində 90° döndərilib və şaquli çevrilib', 'exif-orientation-6' => 'Saat əqrəbi istiqamətində 90° döndərilib', +'exif-orientation-7' => 'Saat əqrəbi istiqamətində 90° döndərilib və şaquli çevrilib', 'exif-orientation-8' => 'Saat əqrəbinin əksi istiqamətində 90° döndərilib', +'exif-planarconfiguration-1' => 'chunky format', +'exif-planarconfiguration-2' => 'planar format', + 'exif-componentsconfiguration-0' => 'mövcud deyil', +'exif-exposureprogram-0' => 'Tanınmadı', 'exif-exposureprogram-1' => 'Əl ilə', 'exif-exposureprogram-2' => 'Normal proqram', +'exif-exposureprogram-3' => 'Açıqlıq üstünlüyü', + +'exif-subjectdistance-value' => '$1 metr', 'exif-meteringmode-0' => 'Naməlum', 'exif-meteringmode-1' => 'Orta', 'exif-meteringmode-3' => 'Nöqtəli', +'exif-meteringmode-4' => 'Multi-Spot', 'exif-meteringmode-5' => 'Dizaynlı', +'exif-meteringmode-6' => 'Qismi', 'exif-meteringmode-255' => 'Digər', -'exif-lightsource-0' => 'Naməlum', -'exif-lightsource-1' => 'Sübh', -'exif-lightsource-4' => 'Flaş', -'exif-lightsource-9' => 'Gözəl hava', -'exif-lightsource-10' => 'Buludlu hava', -'exif-lightsource-11' => 'Kölgə', -'exif-lightsource-17' => 'A tipi standart işıq', -'exif-lightsource-18' => 'B tipi standart işıq', -'exif-lightsource-19' => 'C tipi standart işıq', +'exif-lightsource-0' => 'Naməlum', +'exif-lightsource-1' => 'Sübh', +'exif-lightsource-2' => 'Flüorosensiya', +'exif-lightsource-4' => 'Flaş', +'exif-lightsource-9' => 'Gözəl hava', +'exif-lightsource-10' => 'Buludlu hava', +'exif-lightsource-11' => 'Kölgə', +'exif-lightsource-12' => 'D tipli gündüz işığı lampası (5700 − 7100K)', +'exif-lightsource-13' => 'N tipli gündüz işığı lampası (4600 – 5400K)', +'exif-lightsource-14' => 'W tipli gündüz işığı lampası (3900 – 4500K)', +'exif-lightsource-15' => 'WW tipli gündüz işığı lampası (3200 – 3700K)', +'exif-lightsource-17' => 'A tipi standart işıq', +'exif-lightsource-18' => 'B tipi standart işıq', +'exif-lightsource-19' => 'C tipi standart işıq', +'exif-lightsource-24' => 'ISO studiya lampası', +'exif-lightsource-255' => 'Digər işıq mənbəyi', + +# Flash modes +'exif-flash-fired-0' => 'Flaş yandırılmadı', +'exif-flash-fired-1' => 'Flaş yandırıldı', +'exif-flash-mode-3' => 'avtomatik rejim', 'exif-focalplaneresolutionunit-2' => 'düymlər', +'exif-sensingmethod-1' => 'Tanınmadı', +'exif-sensingmethod-2' => 'Birkristallı matrisli rəngli sensor', +'exif-sensingmethod-3' => 'İkikristallı matrisli rəngli sensor', +'exif-sensingmethod-4' => 'Üçkristallı matrisli rəngli sensor', +'exif-sensingmethod-5' => 'Rəngin ardıcıl ölçülməsilə birlikdə matrisli sensor', +'exif-sensingmethod-7' => 'Üçrəngli xətti sensor', +'exif-sensingmethod-8' => 'Rəngin ardıcıl ölçülməsilə birlikdə xətti sensor', + 'exif-filesource-3' => 'Rəqəmsal fotoapparat', +'exif-scenetype-1' => 'Foto-təsvir birbaşa çəkilmişdir', + 'exif-customrendered-0' => 'Normal proses', +'exif-customrendered-1' => 'Xüsusi proses', + +'exif-exposuremode-0' => 'Avtomatik ekspozisiya', +'exif-exposuremode-1' => 'Əl ekspozisiyası', +'exif-exposuremode-2' => 'Avtomatik breketinq', + +'exif-whitebalance-0' => 'Bəyaz balansın avtomatik tənzimlənməsi', +'exif-whitebalance-1' => 'Bəyaz balansın əllə tənzimlənməsi', 'exif-scenecapturetype-0' => 'Standart', 'exif-scenecapturetype-1' => 'Mənzərə', @@ -2056,12 +2524,18 @@ Variants for Chinese language 'exif-scenecapturetype-3' => 'Gecə görünüşü', 'exif-gaincontrol-0' => 'Heç biri', +'exif-gaincontrol-1' => 'Bir az artırma', +'exif-gaincontrol-2' => 'Kəskin artırma', +'exif-gaincontrol-3' => ' Bir az azaltma', +'exif-gaincontrol-4' => 'Kəskin azaltma', 'exif-contrast-0' => 'Normal', 'exif-contrast-1' => 'Yumşaq', 'exif-contrast-2' => 'Ağır', 'exif-saturation-0' => 'Normal', +'exif-saturation-1' => 'Aşağı doyma dərəcəsi', +'exif-saturation-2' => 'Yuxarı doyma dərəcəsi', 'exif-sharpness-0' => 'Normal', 'exif-sharpness-1' => 'Yumşaq', @@ -2070,12 +2544,31 @@ Variants for Chinese language 'exif-subjectdistancerange-0' => 'Naməlum', 'exif-subjectdistancerange-1' => 'Makro', 'exif-subjectdistancerange-2' => 'Bağlı görünüş', +'exif-subjectdistancerange-3' => 'Uzaq məsafədən çəkiliş', + +# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef +'exif-gpslatitude-n' => 'Şimal en dairəsi', +'exif-gpslatitude-s' => 'Cənub en dairəsi', + +# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef +'exif-gpslongitude-e' => 'Qərb uzunluq dairəsi', +'exif-gpslongitude-w' => 'Şərq uzunluq dairəsi', + +'exif-gpsstatus-a' => 'Ölçmə yekunlaşmayıb', +'exif-gpsstatus-v' => 'Verilənləri ötürmək üçün hazırdır', + +'exif-gpsmeasuremode-2' => '2-ölçülü koordinat', +'exif-gpsmeasuremode-3' => '3-ölçülü koordinat', # Pseudotags used for GPSSpeedRef 'exif-gpsspeed-k' => 'km/saat', 'exif-gpsspeed-m' => 'Saatda mil', 'exif-gpsspeed-n' => 'Dəniz mili', +# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef +'exif-gpsdirection-t' => 'Doğru istiqamət', +'exif-gpsdirection-m' => 'Maqnit istiqaməti', + # External editor support 'edit-externally' => 'Bu faylı kənar proqram vasitəsilə redaktə et.', 'edit-externally-help' => '(Daha ətraflı məlumat üçün [http://www.mediawiki.org/wiki/Manual:External_editors tətbiqetmə qaydalarına] baxa bilərsiniz)', @@ -2089,17 +2582,25 @@ Variants for Chinese language 'limitall' => 'bütün', # E-mail address confirmation -'confirmemail' => 'E-məktubunu təsdiq et', -'confirmemail_send' => 'Təsdiq kodu göndər', -'confirmemail_sent' => 'Təsdiq e-məktubu göndərildi.', -'confirmemail_invalid' => 'Səhv təsdiqləmə kodu. Kodun vaxtı keçmiş ola bilər.', -'confirmemail_needlogin' => 'E-məktub ünvanınızın təsdiqlənməsi üçün $1 lazımdır.', -'confirmemail_success' => 'E-poçt ünvanınız indi təsdiq edildi. Siz indi [[Special:UserLogin|hesab açaraq]] vikidən həzz ala bilərsiz.', -'confirmemail_loggedin' => 'E-məktubunuz indi təsdiq edildi.', -'confirmemail_subject' => '{{SITENAME}} e-məktub təsdiq etmə', +'confirmemail' => 'E-məktubunu təsdiq et', +'confirmemail_send' => 'Təsdiq kodu göndər', +'confirmemail_sent' => 'Təsdiq e-məktubu göndərildi.', +'confirmemail_invalid' => 'Səhv təsdiqləmə kodu. Kodun vaxtı keçmiş ola bilər.', +'confirmemail_needlogin' => 'E-məktub ünvanınızın təsdiqlənməsi üçün $1 lazımdır.', +'confirmemail_success' => 'E-poçt ünvanınız indi təsdiq edildi. Siz indi [[Special:UserLogin|hesab açaraq]] vikidən həzz ala bilərsiz.', +'confirmemail_loggedin' => 'E-məktubunuz indi təsdiq edildi.', +'confirmemail_subject' => '{{SITENAME}} e-məktub təsdiq etmə', +'confirmemail_invalidated' => 'E-mail təsdiqlənməsi dayandırıldı', +'invalidateemail' => 'E-mail təsdiqlənməsindən imtina', + +# Scary transclusion +'scarytranscludedisabled' => '[«Interwiki transcluding»dən çıxılmışdır]', +'scarytranscludetoolong' => '[URL uzundur]', # Trackbacks -'trackbackremove' => '([$1 Sil])', +'trackbackremove' => '([$1 Sil])', +'trackbacklink' => 'Trackback', +'trackbackdeleteok' => 'Geri izləmə uğurla silindi.', # Delete conflict 'deletedwhileediting' => "'''Diqqət!''' Bu səhifə siz redaktə etməyə başladıqdan sonra silinmişdir!", @@ -2123,6 +2624,7 @@ Variants for Chinese language 'table_pager_first' => 'İlk səhifə', 'table_pager_last' => 'Son səhifə', 'table_pager_limit' => 'Səhifədə $1 mövqe sərgilə', +'table_pager_limit_label' => 'Səhifədəki mövqelər:', 'table_pager_limit_submit' => 'Seç', 'table_pager_empty' => 'Nəticə yoxdur', @@ -2140,30 +2642,48 @@ Variants for Chinese language 'watchlistedit-normal-title' => 'İzlədiyim səhifələri redaktə et', 'watchlistedit-normal-legend' => 'İzləmə siyahısından başlıqların silinməsi', 'watchlistedit-normal-submit' => 'Başlığın silinməsi', +'watchlistedit-normal-done' => '{{PLURAL:$1|$1 səhifə}} izləmə səhifələrinizdən silindi:', +'watchlistedit-raw-title' => 'Mətn kimi redaktə et', +'watchlistedit-raw-legend' => 'Mətn kimi redaktə et', 'watchlistedit-raw-titles' => 'Başlıqlar:', 'watchlistedit-raw-submit' => 'İzlədiyim səhifələrin siyahısının yenilənməsi', +'watchlistedit-raw-done' => 'İzləmə səhifələriniz qeyd olundu.', +'watchlistedit-raw-added' => '{{PLURAL:$1|1 title was|$1 başlıq}} əlavə edildi:', +'watchlistedit-raw-removed' => '{{PLURAL:$1|1 title was|$1 başlıq}} çıxarıldı:', # Watchlist editing tools 'watchlisttools-view' => 'Siyahıdakı səhifələrdə edilən dəyişikliklər', 'watchlisttools-edit' => 'İzlədiyim səhifələri göstər və redaktə et', 'watchlisttools-raw' => 'Mətn kimi redaktə et', +# Core parser functions +'unknown_extension_tag' => '"$1" Naməlum ayırma teqi', + # Special:Version -'version' => 'Versiya', -'version-specialpages' => 'Xüsusi səhifələr', -'version-variables' => 'Dəyişkənlər', -'version-other' => 'Digər', -'version-version' => '(Versiya $1)', -'version-license' => 'Lisenziya', -'version-software-product' => 'Məhsul', -'version-software-version' => 'Versiya', +'version' => 'Versiya', +'version-extensions' => 'NIzamlanmış genişlənmələr', +'version-specialpages' => 'Xüsusi səhifələr', +'version-variables' => 'Dəyişkənlər', +'version-skins' => 'Üzlük', +'version-other' => 'Digər', +'version-hooks' => 'Çəngəllər', +'version-extension-functions' => 'Əlavə fubksiyalar', +'version-hook-name' => 'Çəngəlin adı', +'version-version' => '(Versiya $1)', +'version-license' => 'Lisenziya', +'version-poweredby-credits' => "Bu wiki '''[http://www.mediawiki.org/ MediaWiki]''' proqramı istifadə edilərək yaradılmışdır, müəlliflik © 2001-$1 $2.", +'version-poweredby-others' => 'digərləri', +'version-software-product' => 'Məhsul', +'version-software-version' => 'Versiya', # Special:FilePath -'filepath' => 'Fayl yolu', -'filepath-page' => 'Fayl:', +'filepath' => 'Fayl yolu', +'filepath-page' => 'Fayl:', +'filepath-submit' => 'Get', # Special:FileDuplicateSearch 'fileduplicatesearch' => 'Dublikat fayl axtarışı', +'fileduplicatesearch-legend' => 'Dublikatı axtar', 'fileduplicatesearch-filename' => 'Fayl adı:', 'fileduplicatesearch-submit' => 'Axtar', @@ -2180,14 +2700,49 @@ Variants for Chinese language 'specialpages-group-pagetools' => 'Səhifə alətləri', 'specialpages-group-wiki' => 'Viki məlumatları və alətləri', 'specialpages-group-redirects' => 'Xüsusi istiqamətləndirmə səhifələri', +'specialpages-group-spam' => 'Spam alətləri', + +# Special:BlankPage +'blankpage' => 'Boş səhifə', +'intentionallyblankpage' => 'Bu səhifə xüsusilə boşdur.', # Special:Tags -'tag-filter-submit' => 'Filtrlər', -'tags-edit' => 'redaktə', +'tag-filter' => '[[Special:Tags|Etiket]] süzgəci:', +'tag-filter-submit' => 'Filtrlər', +'tags-title' => 'Etiketlər', +'tags-tag' => 'Etiket adı', +'tags-description-header' => 'Anlamının tam açıqlaması', +'tags-hitcount-header' => 'Etiketli dəyişikliklər', +'tags-edit' => 'redaktə', +'tags-hitcount' => '$1 {{PLURAL:$1|dəyişiklik|dəyişiklik}}', + +# Special:ComparePages +'comparepages' => 'Səhifələri qarşılaşdır', +'compare-selector' => 'Səhifə redaktələrini qarşılaşdır', +'compare-page1' => 'Səhifə 1', +'compare-page2' => 'Səhifə 2', +'compare-rev1' => 'Dəyişiklik 1', +'compare-rev2' => 'Dəyişiklik 2', +'compare-submit' => 'Qarşılaşdır', + +# Database error messages +'dberr-header' => 'Bu vikidə problem var', +'dberr-info' => '($1: Məlumat bazası ilə əlaqə yoxdur)', # HTML forms +'htmlform-invalid-input' => 'Girişinizin bir qismilə əlaqədəar problemlər var', +'htmlform-select-badoption' => 'İşarə etdiyiniz xüsus keçərli deyil.', +'htmlform-int-invalid' => 'Göstərdiyiniz ifadə tam ədəd deyil.', +'htmlform-float-invalid' => 'Göstərdiyiniz ifadə ədəd deyil.', +'htmlform-int-toolow' => 'Göstərdiyiniz $1 ifadəsi minimaldan aşağıdır.', +'htmlform-int-toohigh' => 'Göstərdiyiniz $1 ifadəsi maksimumdan yuxarıdır.', +'htmlform-required' => 'Bu digər gərəklidir', 'htmlform-submit' => 'Yolla', 'htmlform-reset' => 'Dəyişiklikləri geri qaytar', 'htmlform-selectorother-other' => 'Digər', +# SQLite database support +'sqlite-has-fts' => '$1 tam mətn axtarma ilə', +'sqlite-no-fts' => '$1 tam mətn axtarma olmadan', + ); diff --git a/languages/messages/MessagesBa.php b/languages/messages/MessagesBa.php index 687a0c59..9f22d207 100644 --- a/languages/messages/MessagesBa.php +++ b/languages/messages/MessagesBa.php @@ -11,6 +11,7 @@ * @author Comp1089 * @author Haqmar * @author Reedy + * @author Roustammr * @author Timming * @author Рустам Нурыев */ @@ -54,8 +55,7 @@ $messages = array( 'tog-editsection' => 'Һәр бүлек өсөн «үҙгәртеү» һылтанмаһын күрһәтергә', 'tog-editsectiononrightclick' => 'Бүлектәрҙе исемдәренә сысҡан менән сиртеп үҙгәртергә (JavaScript кәрәкле)', 'tog-showtoc' => 'Эстәлек күрһәтелһен (3-тән күп башлығы булған биттәрҙә)', -'tog-rememberpassword' => 'Был компьютерҙа иҫәп яҙыуым хәтерленһен', -'tog-editwidth' => 'Мөхәррирләү тәҙрәһен экрандың тулы киңлегендә', +'tog-rememberpassword' => 'Был браузерҙа (иң күбендә $1 {{PLURAL:$1|көнгә}}) иҫәп яҙыуым хәтерләнһен', 'tog-watchcreations' => 'Мин төҙөгән биттәрҙе күҙәтеү исемлегенә яҙырға', 'tog-watchdefault' => 'Үҙгәрткән биттәрем күҙәтеү исемлегемә өҫтәлһен', 'tog-watchmoves' => 'Исемен үҙгәрткән биттәрем күҙәтеү исемлегемә өҫтәлһен', @@ -113,42 +113,42 @@ $messages = array( 'thu' => 'Кесеаҙна', 'fri' => 'Йома', 'sat' => 'Шәмбе', -'january' => 'Ғинуар (Һыуығай)', -'february' => 'Февраль (Шаҡай)', -'march' => 'Март (Буранай)', -'april' => 'Апрель (Алағарай)', -'may_long' => 'Май (Һабанай)', -'june' => 'Июнь (Һөтай)', -'july' => 'Июль (Майай)', -'august' => 'Август (Урағай)', -'september' => 'Сентябрь (Һарысай)', -'october' => 'Октябрь (Ҡарасай)', -'november' => 'Ноябрь (Ҡырпағай)', -'december' => 'Декабрь (Аҡъюлай)', -'january-gen' => 'Ғинуар (Һыуығай)', -'february-gen' => 'Февраль (Шаҡай)', -'march-gen' => 'Март (Буранай)', -'april-gen' => 'Апрель (Алағарай)', -'may-gen' => 'Май (Һабанай)', -'june-gen' => 'Июнь (Һөтай)', -'july-gen' => 'Июль (Майай)', -'august-gen' => 'Август (Урағай)', -'september-gen' => 'Сентябрь (Һарысай)', -'october-gen' => 'Октябрь (Ҡарасай)', -'november-gen' => 'Ноябрь (Ҡырпағай)', -'december-gen' => 'Декабрь (Аҡъюлай)', -'jan' => 'Ғинуар (Һыуығай)', -'feb' => 'Февраль (Шаҡай)', -'mar' => 'Март (Буранай)', -'apr' => 'Апрель (Алағарай)', -'may' => 'Май (Һабанай)', -'jun' => 'Июнь (Һөтай)', -'jul' => 'Июль (Майай)', -'aug' => 'Август (Урағай)', -'sep' => 'Сентябрь (Һарысай)', -'oct' => 'Октябрь (Ҡарасай)', -'nov' => 'Ноябрь (Ҡырпағай)', -'dec' => 'Декабрь (Аҡъюлай)', +'january' => 'ғинуар (һыуығай)', +'february' => 'февраль (шаҡай)', +'march' => 'март (буранай)', +'april' => 'апрель (алағарай)', +'may_long' => 'май (һабанай)', +'june' => 'июнь (һөтай)', +'july' => 'июль (майай)', +'august' => 'август (урағай)', +'september' => 'сентябрь (һарысай)', +'october' => 'октябрь (ҡарасай)', +'november' => 'ноябрь (ҡырпағай)', +'december' => 'декабрь (аҡъюлай)', +'january-gen' => 'ғинуар (һыуығай)', +'february-gen' => 'февраль (шаҡай)', +'march-gen' => 'март (буранай)', +'april-gen' => 'апрель (алағарай)', +'may-gen' => 'май (һабанай)', +'june-gen' => 'июнь (һөтай)', +'july-gen' => 'июль (майай)', +'august-gen' => 'август (урағай)', +'september-gen' => 'сентябрь (һарысай)', +'october-gen' => 'октябрь (ҡарасай)', +'november-gen' => 'ноябрь (ҡырпағай)', +'december-gen' => 'декабрь (аҡъюлай)', +'jan' => 'ғинуар (һыуығай)', +'feb' => 'февраль (шаҡай)', +'mar' => 'март (буранай)', +'apr' => 'апрель (алағарай)', +'may' => 'май (һабанай)', +'jun' => 'июнь (һөтай)', +'jul' => 'июль (майай)', +'aug' => 'август (урағай)', +'sep' => 'сентябрь (һарысай)', +'oct' => 'октябрь (ҡарасай)', +'nov' => 'ноябрь (ҡырпағай)', +'dec' => 'декабрь (аҡъюлай)', # Categories related messages 'pagecategories' => '{{PLURAL:$1|Категория|Категория}}', @@ -199,31 +199,21 @@ $messages = array( 'faqpage' => 'Project:ЙБҺ', # Vector skin -'vector-action-addsection' => 'Тема өҫтәргә', -'vector-action-delete' => 'Юйырға', -'vector-action-move' => 'Исемен үҙгәртергә', -'vector-action-protect' => 'Һаҡларға', -'vector-action-undelete' => 'Тергеҙергә', -'vector-action-unprotect' => 'Һаҡлауҙы сисергә', -'vector-namespace-category' => 'Категория', -'vector-namespace-help' => 'Ярҙам бите', -'vector-namespace-image' => 'Файл', -'vector-namespace-main' => 'Бит', -'vector-namespace-media' => 'Медиа-бит', -'vector-namespace-mediawiki' => 'Хәбәр', -'vector-namespace-project' => 'Проект бите', -'vector-namespace-special' => 'Махсус бит', -'vector-namespace-talk' => 'Фекер алышыу', -'vector-namespace-template' => 'Ҡалып', -'vector-namespace-user' => 'Ҡулланыусы бите', -'vector-view-create' => 'Яһау', -'vector-view-edit' => 'Үҙгәртергә', -'vector-view-history' => 'Тарихты ҡарау', -'vector-view-view' => 'Уҡыу', -'vector-view-viewsource' => 'Сығанаҡты ҡарарға', -'actions' => 'Хәрәкәт', -'namespaces' => 'Исем арауыҡтары', -'variants' => 'Варианттар', +'vector-action-addsection' => 'Тема өҫтәргә', +'vector-action-delete' => 'Юйырға', +'vector-action-move' => 'Исемен үҙгәртергә', +'vector-action-protect' => 'Һаҡларға', +'vector-action-undelete' => 'Тергеҙергә', +'vector-action-unprotect' => 'Һаҡлауҙы сисергә', +'vector-simplesearch-preference' => 'Киңәйтелгән эҙләү тәҡдимдәрен ҡулланырға ("Векторлы" күренеш өсөн генә)', +'vector-view-create' => 'Яһау', +'vector-view-edit' => 'Үҙгәртергә', +'vector-view-history' => 'Тарихты ҡарау', +'vector-view-view' => 'Уҡыу', +'vector-view-viewsource' => 'Сығанаҡты ҡарарға', +'actions' => 'Хәрәкәт', +'namespaces' => 'Исем арауыҡтары', +'variants' => 'Варианттар', 'errorpagetitle' => 'Хата', 'returnto' => '$1 битенә ҡайтыу.', @@ -284,6 +274,9 @@ $messages = array( Зинһар был биткә һуңырак кереп ҡарағыҙ. $1', +'pool-timeout' => 'Блоклауҙы көтөү ваҡыты үтте', +'pool-queuefull' => 'Һорауҙар сираты тулы', +'pool-errorunknown' => 'Билдәһеҙ хата', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{grammar:genitive|{{SITENAME}}}} тураһында', @@ -450,7 +443,8 @@ $2', 'yourname' => 'Ҡатнашыусы исеме', 'yourpassword' => 'Һеҙҙең пароль', 'yourpasswordagain' => 'Паролде ҡабаттан яҙыу', -'remembermypassword' => 'Паролде хәтерҙә ҡалдырырға', +'remembermypassword' => 'Был компьютерҙа паролемде иҫләргә ($1 {{PLURAL:$1|көндән|көндән}} күп түгел)', +'securelogin-stick-https' => 'Танылғандан һуң HTTPS менән бәйләнеште ҡалдырырға', 'yourdomainname' => 'Һеҙҙең домен', 'externaldberror' => 'Тышҡы мәғлүмәт базаһы менән танылғанда хата барлыҡҡа килде йәки тышҡы үҙ көйләүҙәрегеҙҙе үҙгәртер өсөн хоҡуҡтарығыҙ етәрле түгел.', 'login' => 'Танышыу йәки теркәлеү', @@ -467,6 +461,7 @@ $2', 'gotaccount' => "Әгәр Һеҙ теркәлеү үткән булһағыҙ? '''$1'''.", 'gotaccountlink' => 'Үҙегеҙ менән таныштырығыҙ', 'createaccountmail' => 'эл. почта буйынса', +'createaccountreason' => 'Сәбәп:', 'badretype' => 'Һеҙ кереткән паролдәр тап килмәйҙәр.', 'userexists' => 'Керетелгән исем ҡулланыла. Зинһар, башҡа исем һайлағыҙ.', @@ -487,6 +482,7 @@ $2', 'wrongpasswordempty' => 'Зинһар, буш булмаған пароль керетегеҙ.', 'passwordtooshort' => 'Пароль кәмендә $1 {{PLURAL:$1|символдан}} торорға тейеш.', 'password-name-match' => 'Керетелгән пароль ҡулланыусы исеменән айырылырға тейеш.', +'password-login-forbidden' => 'Был ҡатнашыусы исемен һәм паролде ҡулланыу тыйылған', 'mailmypassword' => 'Яңы пароль ебәрергә', 'passwordremindertitle' => '{{SITENAME}} өсөн яңы ваҡытлыса пароль', 'passwordremindertext' => 'Кемдер (бәлки, һеҙ, IP-адресы: $1) {{SITENAME}} ($4) өсөн яңы пароль һоратты. $2 ҡатнашыусыһы өсөн ваҡытлыса яңы пароль яһалды: $3. Әгәр был һеҙ булһағыҙ, системага керегеҙ һәм паролде алмаштырығыҙ. Яңы пароль $5 {{PLURAL:$5|көн}} ғәмәлдә буласаҡ. @@ -521,6 +517,9 @@ $2', 'loginlanguagelabel' => 'Тел: $1', 'suspicious-userlogout' => 'Һеҙҙең сеансты тамамлау тураһында һорауығыҙ кире ҡағылды, сөнки ул төҙөк булмаған браузер йәки кэшлаусы прокси тарафынан ебәрелгән һорауға оҡшаған.', +# E-mail sending +'php-mail-error-unknown' => 'PHP-ның mail() функцияһында билдәһеҙ хата', + # Password reset dialog 'resetpass' => 'Паролде үҙгәртеү', 'resetpass_announce' => 'Һеҙ системала электрон почта аша алынған ваҡытлыса пароль менән танылдығыҙ. Системаға кереүҙә тамалау өсөн яңы пароль булдырығыҙ.', @@ -569,10 +568,11 @@ $2', 'showlivepreview' => 'Тиҙ алдан байҡау', 'showdiff' => 'Индерелгән үҙгәрештәр', 'anoneditwarning' => "'''Иғтибар''': Һеҙ танылмағанһығыҙ. IP-адресығыҙ был биттең үҙгәртеүҙәр тарихына яҙыласаҡ.", +'anonpreviewwarning' => "''Һеҙ танылмағанһығыҙ. Яҙҙырыу ваҡытында IP-адресығыҙ был биттең үҙгәртеүҙәр тарихына яҙыласаҡ.''", 'missingsummary' => "'''Иҫкәртеү.''' Һеҙ үҙгәртеүҙергә ҡыҫҡа тасуирлама яҙманығыҙ. Ҡабаттан «Битте һаҡларға» төймәһенә баҫһағыҙ, үҙгәртеүҙәрегеҙ тасуирламаһыҙ һаҡланасаҡ.", 'missingcommenttext' => 'Зинһар, аҫҡа үҙ тасуирламағыҙҙы керетегеҙ.', 'missingcommentheader' => "'''Иҫкәртеү:''' Һеҙ был комментарий өсөн тема/исем яҙманығыҙ. -«Битте һаҡларға» төймәһенә ҡабат баҫыу менән үҙгәртеүҙерегеҙ исемһеҙ яҙыласаҡ.", +«{{int:savearticle}}» төймәһенә ҡабат баҫыу менән үҙгәртеүҙерегеҙ исемһеҙ яҙыласаҡ.", 'summary-preview' => 'Буласаҡ тасуирлама:', 'subject-preview' => 'Тема/башлыҡты алдан ҡарау:', 'blockedtitle' => 'Ҡулланыусы блокланған', @@ -644,7 +644,11 @@ $2', 'userjsyoucanpreview' => "'''Кәңәш:''' Яңы JS-файлды һаҡларҙан алда тикшерер өсөн \"{{int:showpreview}}\" төймәһенә баҫығыҙ.", 'usercsspreview' => "'''Был бары тик CSS файлды алдан ҡарау ғына, ул әле һаҡланмаған!'''", 'userjspreview' => "'''Был бары тик JavaScript файлын алдан ҡарау ғына, ул әле һаҡланмаған!'''", -'userinvalidcssjstitle' => "'''Иғтибар:''' \"\$1\" биҙәү темаһы табылманы. Иҫтә тотоғоҙ, .css һәм .js ҡулланыусы биттәренең исемдәре тик бәләкәй хәрефтәрҙән генә торорға тейеш. Мәҫәлән: {{ns:user}}:Foo/monobook.css, ә {{ns:user}}:Foo/Monobook.css түгел!", +'sitecsspreview' => "'''Һеҙ CSS файлын алдан ҡарайһығыҙ ғына икәнен иҫегеҙҙә тотоғоҙ.''' +'''Ул әле һаҡланмаған!'''", +'sitejspreview' => "'''Һеҙ JavaScript кодын алдан ҡарайһығыҙ ғына икәнен иҫегеҙҙә тотоғоҙ.''' +'''Ул әле һаҡланмаған!'''", +'userinvalidcssjstitle' => "'''Иғтибар:''' \"\$1\" биҙәү темаһы табылманы. Иҫтә тотоғоҙ, .css һәм .js ҡулланыусы биттәренең исемдәре тик бәләкәй хәрефтәрҙән генә торорға тейеш. Мәҫәлән: {{ns:user}}:Foo/vector.css, ә {{ns:user}}:Foo/Vector.css түгел!", 'updated' => '(Яңыртылды)', 'note' => "'''Иҫкәрмә:'''", 'previewnote' => "'''Ҡарап сығыу өлгөһө, әлегә үҙгәрештәр яҙҙырылмаған!'''", @@ -682,9 +686,6 @@ $2', Әгәр кемдең дә булһа текстарығыҙҙы үҙгәртеүен теләмәһәгеҙ, уларҙы бында ҡуймағыҙ.
    Шулай уҡ, кереткән өҫтәмәләрҙең авторы булыуығыҙҙы йәки уларҙы, эстәлеге ирекле рәүештә таратылырға һәм үҙгәртелергә рөхсәт ителгән сығанаҡтан алыуығыҙҙы раҫлайһығыҙ (ҡарағыҙ: $1). '''РӨХСӘТҺЕҘ, АВТОРЛЫҠ ХОҠУҠТАРЫ МЕНӘН ҺАҠЛАНҒАН МАТЕРИАЛДАР ҠУЙМАҒЫҘ!'''", -'longpagewarning' => "'''КИҪӘТЕҮ:''' Был биттең күләме $1 килобайт. -32 Кб йәки унан ҙурыраҡ биттәр ҡайһы бер браузерҙарҙа дөрөҫ күренмәҫкә мөмкин. -Битте бер нисә өлөшкә бүлеп ҡарағыҙ.", 'longpageerror' => "'''ХАТА: һаҡланасаҡ текст күләме $1 килобайт, был иһә рөхсәт ителгән $2 килобайттан күп. Битте һаҡлап булмай.'''", 'readonlywarning' => "'''КИҪӘТЕҮ: Техник хеҙмәтләндереү сәбәпле мәғлүмәттәр базаһы блокланған, шунлыҡтан үҙгәртеүҙәрегеҙҙе хәҙер һаҡлай алмайһығыҙ.''' Тексты аҙаҡтан ҡулланыу өсөн файлда һаҡлап тора алаһығыҙ. @@ -864,6 +865,8 @@ $1", 'logdelete-failure' => "'''Яҙма күренеүсәнлеге көйләнмәгән:''' $1", 'revdel-restore' => 'Күренеүсәнлекте үҙгәртергә', +'revdel-restore-deleted' => 'юйылған өлгөләр', +'revdel-restore-visible' => 'ҡара алған өлгөләр', 'pagehist' => 'Бит тарихы', 'deletedhist' => 'Юйылған тарих', 'revdelete-content' => 'эстәлек', @@ -931,11 +934,13 @@ $1", # Diffs 'history-title' => '$1 битенең үҙгәртеү тарихы', 'difference' => '(Өлгөләр араһында айырма)', +'difference-multipage' => '(Биттәр араһындағы айырма)', 'lineno' => '$1 юл:', 'compareselectedversions' => 'Һайланған версияларҙы сағыштырыу', 'showhideselectedversions' => 'Һайланған версияларҙы күрһәтергә/йәшерергә', 'editundo' => 'кире алыу', -'diff-multi' => '({{PLURAL:$1|Бер ваҡытлы версия|$1 ваҡытлы версия}} күрһәтелмәгән)', +'diff-multi' => '({{PLURAL:$2|$2 ҡатнашыусының}} {{PLURAL:$1|ваҡытлы версияһы}} күрһәтелмәгән)', +'diff-multi-manyusers' => '(Кәмендә {{PLURAL:$2|$2 ҡатнашыусының}} {{PLURAL:$1|ваҡытлы версияһы}} күрһәтелмәгән)', # Search results 'searchresults' => 'Эҙләү һөҙөмтәләре', @@ -970,6 +975,7 @@ $1", 'searchprofile-everything-tooltip' => 'Бар биттәрҙә эҙләү (фекер алышыу биттәрендә лә)', 'searchprofile-advanced-tooltip' => 'Махсус исем арауыҡтарында эҙләргә', 'search-result-size' => '$1 ({{PLURAL:$2|$2 һүҙ|$2 һүҙ}})', +'search-result-category-size' => '{{PLURAL:$1|$1 ағза}} ({{PLURAL:$2|$2 эске категория}}, {{PLURAL:$3|$3 файл}})', 'search-result-score' => 'Тап килеүсәнлек: $1%', 'search-redirect' => '(йүнәлтеү $1)', 'search-section' => '($1 бүлеге)', @@ -1046,6 +1052,7 @@ $1", 'contextlines' => 'Һәр бер һөҙөмтәнең күрһәтеләсәк юл һаны:', 'contextchars' => 'Бер юлдағы билдәләр һаны:', 'stub-threshold' => 'Материалдарға һылтанмалар форматлау сиге (байттарҙа)', +'stub-threshold-disabled' => 'Һүндерелгән', 'recentchangesdays' => 'Күҙәтеү исемлегендә күренгән көндәр һаны:', 'recentchangesdays-max' => 'Иң күбендә $1 {{PLURAL:$1|көн}}', 'recentchangescount' => 'Ғәҙәттә күрһәтелгән үҙгәртеүҙәр һаны:', @@ -1079,6 +1086,7 @@ $1", 'prefs-files' => 'Файлдар', 'prefs-custom-css' => 'Үҙ CSS', 'prefs-custom-js' => 'Үҙ JS', +'prefs-common-css-js' => 'Бөтә күренештәр өсөн дөйөм CSS/JS:', 'prefs-reset-intro' => 'Был битте, көйләүҙәрегеҙҙе ғәҙәттәге көйләүҙәргә ташлатыу өсөн ҡулланып була. Раҫлағандан һуң ғәмәлде кире ҡайтарып булмаясаҡ.', 'prefs-emailconfirm-label' => 'Электрон почтаны раҫлау:', @@ -1117,9 +1125,15 @@ $1", 'prefs-advancedrendering' => 'Киңәйтелгән көйләүҙәр', 'prefs-advancedsearchoptions' => 'Киңәйтелгән көйләүҙәр', 'prefs-advancedwatchlist' => 'Киңәйтелгән көйләүҙәр', -'prefs-display' => 'Күренеш көйләүҙәре', +'prefs-displayrc' => 'Күренеш көйләүҙәре', +'prefs-displaysearchoptions' => 'Күренеш көйләүҙәре', +'prefs-displaywatchlist' => 'Күренеш көйләүҙәре', 'prefs-diffs' => 'Айырмалар', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'E-mail адрес дөрөҫ булғанға оҡшаған', +'email-address-validity-invalid' => 'Дөрөҫ e-mail адресын керетегеҙ', + # User rights 'userrights' => 'Ҡулланыусы хоҡуҡтарын идаралау', 'userrights-lookup-user' => 'Ҡулланыусы төркөмдәрен идаралау', @@ -1203,6 +1217,7 @@ $1", 'right-hideuser' => 'Ҡатнашыусы исемен тыйыу һәм йәшереү', 'right-ipblock-exempt' => 'IP адрестарҙы бикләүҙе, авто-бикләүҙәрҙе, арауыҡтарҙы бикләүҙе урап үтеү', 'right-proxyunbannable' => 'Прокси серверҙарҙы авто-бикләүҙе урап үтеү', +'right-unblockself' => 'Үҙҙәренең биген асыу', 'right-protect' => 'Биттәрҙең һаҡланыу дәрәжәһен үҙгәртеү һәм һаҡланған биттәрҙе мөхәррирләү', 'right-editprotected' => 'Һаҡланған биттәрҙе мөхәррирләү(эҙмә-эҙлекле һаҡлауһыҙ)', 'right-editinterface' => 'Ҡулланыусы интерфейсын үҙгәртеү', @@ -1225,7 +1240,6 @@ $1", 'right-siteadmin' => 'Мәғлүмәттәр базаһын асыу һәм ябыу', 'right-reset-passwords' => 'Башҡа ҡатнашыусыларҙың паролен яңыртыу', 'right-override-export-depth' => '5-се тәрәнлеккә тиклем бәйле биттәре менән бергә биттәрҙе сығарыу', -'right-versiondetail' => 'Программаның өлгөһө тураһында киңәйтелгән мәғлүмәтте ҡарау', 'right-sendemail' => 'Башҡа ҡатнашыусыларға электрон почта аша хат ебәреү', # User rights log @@ -1276,14 +1290,9 @@ $1", 'recentchanges-legend' => 'Һуңғы үҙгәртеүҙәр көйләүҙәре', 'recentchangestext' => '{{grammar:genitive|{{SITENAME}}}}. биттәрендә индерелгән һуңғы үҙгәртеүҙәр исемлеге', 'recentchanges-feed-description' => 'Был таҫмалағы һуңғы үҙгәртеүҙәрҙе күҙәтеп барырға', -'recentchanges-label-legend' => 'Легенда: $1.', -'recentchanges-legend-newpage' => '$1 — яңы бит', 'recentchanges-label-newpage' => 'Был үҙгәртеү яңы бит яһаны', -'recentchanges-legend-minor' => '$1 — әҙ үҙгәреш', 'recentchanges-label-minor' => 'Был әҙ үҙгәреш', -'recentchanges-legend-bot' => '$1 — бот төҙәтеүе', 'recentchanges-label-bot' => 'Был төҙәтеү бот тарафынан башҡарылды', -'recentchanges-legend-unpatrolled' => '$1 — ҡаралмаған төҙәтеү', 'recentchanges-label-unpatrolled' => 'Был төҙәтеү ҡаралмаған әле', 'rcnote' => 'Аҫта $4 $5 тиклем эшләнгән, һуңғы {{PLURAL:$2|1|$2}} көн эсендәге һуңғы {{PLURAL:$1|1|$1}} үҙгәртеү күрһәтелгән.', 'rcnotefrom' => "Түбәндә '''$2''' башлап ('''$1''' тиклем) үҙгәртеүҙәр күрһәтелгән.", @@ -1330,6 +1339,8 @@ $1", 'upload_directory_missing' => 'Тейәү өсөн директория ($1) юҡ йәки веб-сервер уны булдыра алмай.', 'upload_directory_read_only' => 'Тейәү өсөн директорияға ($1) веб-сервер яҙҙыра алмай.', 'uploaderror' => 'Тейәү хатаһы', +'upload-recreate-warning' => "'''Иғтибар. Бындай исемле файл юйылған йәки күсерелгән. ''' +Был биттең юйыуҙары һәм күсереүҙәре яҙмалары журналы түбәндә килтерелгән:", 'uploadtext' => "Файл тейәү өсөн түбәндәге форманы ҡулланығыҙ. Элек тейәлгән файлдарҙы байҡар өсөн [[Special:FileList|тейәлгән файлдар исемлеген]] ҡарағыҙ. Файл тейәүҙәр шулай уҡ [[Special:Log/upload|тейәү яҙмаларына]], юйыуҙар иһә [[Special:Log/delete|юйыу яҙмаларына]] яҙылып баралар. @@ -1365,6 +1376,17 @@ $1", 'filetype-banned-type' => "'''\".\$1\"''' — тыйылған файл тибы. {{PLURAL:\$3|Рөхсәт ителгән файл тибы|Рөхсәт ителгән файл типтары:}} \$2.", 'filetype-missing' => 'Файлдың киңәйтелмәһе юҡ (мәҫәлән, ".jpg").', +'empty-file' => 'Һеҙ ебәргән файл буш.', +'file-too-large' => 'Һеҙ ебәргән файл бигерәк ҙур.', +'filename-tooshort' => 'Файлдың исеме бигерәк ҡыҫҡа.', +'filetype-banned' => 'Был файл төрө рөхсәт ителмәй.', +'verification-error' => 'Был файл тикшереү үтмәгән.', +'hookaborted' => 'Һеҙ керетергә теләгән үҙгәртеүҙәр киңәйтелмә эшкәртеү ҡоралы тарафынан кире алынды.', +'illegal-filename' => 'Ярамаған файл исеме.', +'overwrite' => 'Булған файлды алыштырыу мөмкин түгел.', +'unknown-error' => 'Билдәһеҙ хата.', +'tmp-create-error' => 'Ваҡытлы файл булдырыу мөмкин түгел.', +'tmp-write-error' => 'Ваҡытлы файлға яҙҙырыу хатаһы.', 'large-file' => 'Дәүмәле $1 байттан артмаған файлдар ҡулланырға кәңәш ителә (был файлдың дәүмәле $2 байт тәшкил итә).', 'largefileserver' => 'Был файлдың дәүмәле рөхсәт ителгәндән ҙурыраҡ.', 'emptyfile' => 'Һеҙ тейәгән файл буш булырға тейеш. @@ -1395,13 +1417,14 @@ $1", [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Был файл түбәндәге {{PLURAL:$1|файл|файлдар}} менән тап килә:', 'file-deleted-duplicate' => 'Оҡшаш файл ([[:$1]]) юйылғайны инде. Уны ҡайтанан тейәр алдынан, зинһар, файлды юйыу тарихын ҡарағыҙ.', -'successfulupload' => 'Тейәү уңышлы тамамланды', 'uploadwarning' => 'Киҫәтеү', 'uploadwarning-text' => 'Зинһар, түбәндәге файл тасуирламаһын үҙгәртегеҙ һәм яңынан ҡабатлап ҡарағыҙ.', 'savefile' => 'Һөҙгөстө яҙҙырып ҡуйырға', 'uploadedimage' => '«[[$1]]» тейәлгән', 'overwroteimage' => '"[[$1]]" файлының яңы өлгөһө тейәлде', 'uploaddisabled' => 'Тейәү рөхсәт ителмәй', +'copyuploaddisabled' => 'URL адрес аша тейәү рөхсәт ителмәй.', +'uploadfromurl-queued' => 'Һеҙҙең тейәүегеҙ сиратҡа ҡуйылды.', 'uploaddisabledtext' => 'Файлдар тейәү рөхсәт ителмәй.', 'php-uploaddisabledtext' => 'Файлдар тейәү PHP көйләүҙәрендә рөхсәт ителмәй. Зинһар, file_uploads көйләүен тикшерегеҙ.', 'uploadscripted' => 'Файлда булған HTML-кодты йәки скриптты браузер дөрөҫ эшкәртмәүе мөмкин.', @@ -1422,6 +1445,13 @@ $1", Түбәндә файлдың юйыу яҙмалары килтерелә:", 'filename-bad-prefix' => "Тейәлә торған файлдың исеме ''«$1»''' менән башлана һәм ул цифрлы камераларҙа файлдарға уҙенән-үҙе бирелә торған исемгә оҡшаған. Зинһар, файлды яҡшыраҡ тасуирлаған исем һайлағыҙ.", +'upload-success-subj' => 'Файл тейәү уңышлы тамамланды', +'upload-success-msg' => 'Һеҙҙең [$2] адресынан тейәүегеҙ уңышлы тамаланды. Файлды ошонда ҡарай алаһығыҙ: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Тейәү уңышлы түгел', +'upload-failure-msg' => '[$2] адресынан тейәгән ваҡытта ҡыйынлыҡтар тыуҙы: +$1', +'upload-warning-subj' => 'Тейәү ваҡытында киҫәтеү', +'upload-warning-msg' => '[$2] адресынан тейәгән ваҡытта ҡыйынлыҡтар тыуҙы. Хатаны төҙәтеү өсөн [[Special:Upload/stash/$1|файл тейәү формаһына]] кире ҡайта алаһығыҙ.', 'upload-proto-error' => 'Протокол дөрөҫ түгел', 'upload-proto-error-text' => 'Алыҫтан тейәү өсөн http:// йәки ftp:// менән башланған адрес кәрәк.', @@ -1489,6 +1519,7 @@ $1", 'listfiles_search_for' => 'Файл исеме буйынса эҙләү:', 'imgfile' => 'файл', 'listfiles' => 'Файлдар исемлеге', +'listfiles_thumb' => 'Шартлы рәсем', 'listfiles_date' => 'Көнө', 'listfiles_name' => 'Исем', 'listfiles_user' => 'Ҡатнашыусы', @@ -1603,8 +1634,8 @@ $1", 'statistics-edits' => '{{SITENAME}} проекты булдырылған ваҡыттан башлап үҙгәртеүҙәр һаны', 'statistics-edits-average' => 'Уртаса бер биткә тура килгән төҙәтеүҙәр һаны', 'statistics-views-total' => 'Ҡарап сығыуҙар', +'statistics-views-total-desc' => 'Булмаған биттәрҙе һәм махсус биттәрҙе ҡарап сығыуҙарҙы үҙ эсенә алмай', 'statistics-views-peredit' => 'Бер үҙгәртеүгә ҡарап сығыуҙар', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Эштәр сираты] оҙонлоғо', 'statistics-users' => 'Теркәлгән [[Special:ListUsers|ҡатнашыусылар]]', 'statistics-users-active' => 'Әүҙем ҡатнашыусылар', 'statistics-users-active-desc' => 'Һуңғы {{PLURAL:$1|көндә|$1 көндә}} ниндәйҙер эшмәкәрлек башҡарған ҡатнашыусылар', @@ -1618,8 +1649,8 @@ $1", 'doubleredirects' => 'Икеле йүнәлтеүҙәр', 'doubleredirectstext' => 'Был биттә икенсе йүнәлтеү биттәренә йүнәлткән биттәр исемлеге килтерелгән. -Һәр юл беренсе һәм икенсе йүнәлтеүгә һылтанманан, шулай уҡ икенсе һылтанма йүнәлткән һәм беренсе йүнәлтмә һылтанма яһарға тейеш булған биттән тора. -Һыҙылған яҙыуҙар төҙәтелгән.', +Һәр юл беренсе һәм икенсе йүнәлтеүгә һылтанманан, шулай уҡ икенсе һылтанма йүнәлткән һәм беренсе йүнәлтмә һылтанма яһарға тейеш булған биттән тора. +Һыҙылған яҙыуҙар төҙәтелгән.', 'double-redirect-fixed-move' => '[[$1]] битенең исеме үҙгәртелгән. Хәҙер ул [[$2]] битенә йүнәлтелгән.', 'double-redirect-fixer' => 'Йүнәлтеүҙәрҙе төҙәтеүсе', @@ -1643,6 +1674,8 @@ $1", 'nmembers' => '$1 {{PLURAL:$1|объект}}', 'nrevisions' => '$1 {{PLURAL:$1|өлгө|өлгө}}', 'nviews' => '$1 {{PLURAL:$1|ҡарап сығыу}}', +'nimagelinks' => '$1 {{PLURAL:$1|биттә}} ҡулланыла', +'ntransclusions' => '$1 {{PLURAL:$1|биттә}} ҡулланыла', 'specialpage-empty' => 'Был һорау өсөн һөҙөмтәләр юҡ.', 'lonelypages' => 'Етем биттәр', 'lonelypagestext' => 'Түбәндәге биттәргә {{SITENAME}} проектының башҡа биттәренән һылтанмалар юҡ һәм улар башҡа биттәргә индерелмәгән.', @@ -1799,34 +1832,40 @@ $1", 'listgrouprights-removegroup-self-all' => 'Үҙенең иҫәп яҙмаһынан бөтә төркөмдәрҙе юйыу', # E-mail user -'mailnologin' => 'Хат ебәреү өсөн адрес юҡ', -'mailnologintext' => 'Башҡа ҡатнашыусыларға хат ебәреү өсөн, һеҙ [[Special:UserLogin|танылырға]] һәм [[Special:Preferences|көйләүҙәрегеҙҙә]] ысын электрон адрес почтаһы кереткән булырға тейешһегеҙ.', -'emailuser' => 'Ҡатнашыусыға хат', -'emailpage' => 'Ҡатнашыусыға хат', -'emailpagetext' => 'Был ҡатнашыусыға электрон почта аша хат ебәреү өсөн, һеҙ түбәндәге форманы ҡуллана алаһығыҙ. +'mailnologin' => 'Хат ебәреү өсөн адрес юҡ', +'mailnologintext' => 'Башҡа ҡатнашыусыларға хат ебәреү өсөн, һеҙ [[Special:UserLogin|танылырға]] һәм [[Special:Preferences|көйләүҙәрегеҙҙә]] ысын электрон адрес почтаһы кереткән булырға тейешһегеҙ.', +'emailuser' => 'Ҡатнашыусыға хат', +'emailpage' => 'Ҡатнашыусыға хат', +'emailpagetext' => 'Был ҡатнашыусыға электрон почта аша хат ебәреү өсөн, һеҙ түбәндәге форманы ҡуллана алаһығыҙ. Яуап өсөн адрес булараҡ һеҙ [[Special:Preferences|көйләүҙәрегеҙҙә]] күрһәткән электрон почта адресы күрһәтеләсәк, шулай итеп, хатты алыусы һеҙгә тура яуап ебәрә аласаҡ.', -'usermailererror' => 'Хат ебәргән ваҡытта хата килеп сыҡты:', -'defemailsubject' => '{{SITENAME}} проектынан хат', -'noemailtitle' => 'Электрон почта адресы юҡ', -'noemailtext' => 'Был ҡатнашыусы дөрөҫ электрон почта адресы күрһәтмәгән', -'nowikiemailtitle' => 'Электрон хат ебәреү өсөн рөхсәт юҡ', -'nowikiemailtext' => 'Был ҡатнашыусы башҡа ҡатнашыусыларҙан электрон хат алырға теләмәүен күрһәткән.', -'email-legend' => '{{SITENAME}} проектының башҡа ҡатнашыусыһына электрон хат ебәрергә', -'emailfrom' => 'Кемдән:', -'emailto' => 'Кемгә:', -'emailsubject' => 'Тема:', -'emailmessage' => 'Хәбәр:', -'emailsend' => 'Ебәреү', -'emailccme' => 'Хаттың күсермәһен миңә ебәрергә', -'emailccsubject' => '$1 өсөн хатығыҙҙың күсермәһе: $2', -'emailsent' => 'Хат ебәрелде', -'emailsenttext' => 'Һеҙҙең электрон хатығыҙ ебәрелде.', -'emailuserfooter' => 'Был электрон хат $1 ҡатнашыусыһынан $2 ҡатнашыусыһына {{SITENAME}} проектының "Ҡатнашыусыға хат" формаһы аша ебәрелде.', +'usermailererror' => 'Хат ебәргән ваҡытта хата килеп сыҡты:', +'defemailsubject' => '{{SITENAME}} проектынан хат', +'usermaildisabled' => 'Ҡатнашыусының электрон почтаһы һүндерелгән', +'usermaildisabledtext' => 'Һеҙ был вики-проекттың башҡа ҡатнашыусыларына электрон хат ебәрә алмайһығыҙ', +'noemailtitle' => 'Электрон почта адресы юҡ', +'noemailtext' => 'Был ҡатнашыусы дөрөҫ электрон почта адресы күрһәтмәгән', +'nowikiemailtitle' => 'Электрон хат ебәреү өсөн рөхсәт юҡ', +'nowikiemailtext' => 'Был ҡатнашыусы башҡа ҡатнашыусыларҙан электрон хат алырға теләмәүен күрһәткән.', +'email-legend' => '{{SITENAME}} проектының башҡа ҡатнашыусыһына электрон хат ебәрергә', +'emailfrom' => 'Кемдән:', +'emailto' => 'Кемгә:', +'emailsubject' => 'Тема:', +'emailmessage' => 'Хәбәр:', +'emailsend' => 'Ебәреү', +'emailccme' => 'Хаттың күсермәһен миңә ебәрергә', +'emailccsubject' => '$1 өсөн хатығыҙҙың күсермәһе: $2', +'emailsent' => 'Хат ебәрелде', +'emailsenttext' => 'Һеҙҙең электрон хатығыҙ ебәрелде.', +'emailuserfooter' => 'Был электрон хат $1 ҡатнашыусыһынан $2 ҡатнашыусыһына {{SITENAME}} проектының "Ҡатнашыусыға хат" формаһы аша ебәрелде.', + +# User Messenger +'usermessage-summary' => 'Система хәбәрен ҡалдырырға.', +'usermessage-editor' => 'Система хәбәрсеһе', # Watchlist 'watchlist' => 'Күҙәтеү исемлеге', 'mywatchlist' => 'Күҙәтеү исемлеге', -'watchlistfor' => "('''$1''' өсөн)", +'watchlistfor2' => '$1 $2 өсөн', 'nowatchlist' => 'Һеҙҙең күҙәтеү исемлегегеҙ буш.', 'watchlistanontext' => 'Күҙәтеү исемлеген ҡарау йәки мөхәррирләү өсөн $1 кәрәк.', 'watchnologin' => 'Үҙегеҙҙе танытырға кәрәк', @@ -1944,7 +1983,10 @@ $UNWATCHURL 'revertpage-nouser' => '(Ҡатнашыусының исеме юйылған) уҙгәртеүҙәре [[User:$1|$1]] өлгөһөнә ҡайтарылды', 'rollback-success' => '$1 уҙгәртеүҙәре кире алдынды; $2 өлгөһөнә ҡайтыу.', -'sessionfailure' => 'Хәҙерге сеанста хаталар килеп сыҡҡан, булырға тейеш; + +# Edit tokens +'sessionfailure-title' => 'Сеанс хатаһы', +'sessionfailure' => 'Хәҙерге сеанста хаталар килеп сыҡҡан, булырға тейеш; "сеансты баҫып алыу"ға юл ҡуймау өсөн был ғәмәл үтәлмәне. Алдағы биткә кире ҡайтығыҙ, битте яңыртығыҙ һәм яңынан ҡабатлап ҡарағыҙ.', @@ -2079,19 +2121,23 @@ $1', 'month' => 'Айҙан башлап (һәм элегерәк):', 'year' => 'Йылдан башлап (һәм элегерәк):', -'sp-contributions-newbies' => 'Яңы иҫәп яҙмалары кереткән өлөштө генә күрһәтергә', -'sp-contributions-newbies-sub' => 'Яңы иҫәп яҙмалары өсөн', -'sp-contributions-newbies-title' => 'Яңы иҫәп яҙмалары өсөн ҡатнашыусы өлөшө', -'sp-contributions-blocklog' => 'блоклау яҙмалары', -'sp-contributions-deleted' => 'ҡулланыусының юйылған өлөшө', -'sp-contributions-logs' => 'журналдар', -'sp-contributions-talk' => 'фекер алышыу', -'sp-contributions-userrights' => 'ҡатнашыусы хоҡуҡтарын идаралау', -'sp-contributions-blocked-notice' => 'Әлеге ваҡытта был ҡатнашыусы бикле. +'sp-contributions-newbies' => 'Яңы иҫәп яҙмалары кереткән өлөштө генә күрһәтергә', +'sp-contributions-newbies-sub' => 'Яңы иҫәп яҙмалары өсөн', +'sp-contributions-newbies-title' => 'Яңы иҫәп яҙмалары өсөн ҡатнашыусы өлөшө', +'sp-contributions-blocklog' => 'блоклау яҙмалары', +'sp-contributions-deleted' => 'ҡулланыусының юйылған өлөшө', +'sp-contributions-uploads' => 'тейәүҙәр', +'sp-contributions-logs' => 'журналдар', +'sp-contributions-talk' => 'фекер алышыу', +'sp-contributions-userrights' => 'ҡатнашыусы хоҡуҡтарын идаралау', +'sp-contributions-blocked-notice' => 'Әлеге ваҡытта был ҡатнашыусы бикле. Түбәндә бикләү яҙмаларынан һуңғы ҡатнашыусыны бикләү яҙмаһы килтерелгән:', -'sp-contributions-search' => 'Өлөштәрҙе эҙләү', -'sp-contributions-username' => 'Ҡулланыусының IP-адресы йәки исеме:', -'sp-contributions-submit' => 'Эҙлә', +'sp-contributions-blocked-notice-anon' => 'Әлеге ваҡытта был IP адрес бикле. +Түбәндә бикләү яҙмаларынан һуңғы адресты бикләү яҙмаһы килтерелгән:', +'sp-contributions-search' => 'Өлөштәрҙе эҙләү', +'sp-contributions-username' => 'Ҡулланыусының IP-адресы йәки исеме:', +'sp-contributions-toponly' => 'Һуңғы өлгөләрҙе генә күрһәтергә', +'sp-contributions-submit' => 'Эҙлә', # What links here 'whatlinkshere' => 'Бында һылтанмалар', @@ -2113,9 +2159,9 @@ $1', 'whatlinkshere-filters' => 'Һайлау', # Block/unblock -'blockip' => 'Ҡатнашыусыны ябыу', -'blockip-title' => 'Ҡатнашыусыны ябыу', -'blockip-legend' => 'Ҡатнашыусыны ябыу', +'blockip' => 'Ҡатнашыусыны бикләү', +'blockip-title' => 'Ҡатнашыусыны бикләү', +'blockip-legend' => 'Ҡатнашыусыны бикләү', 'blockiptext' => 'Билдәләнгән IP адрестан яҙыу мөмкинлеген бикләү өсөн, түбәндәге форманы ҡулланығыҙ. Был бары тик вандаллыҡҡа юл ҡуймау өсөн генә һәм [[{{MediaWiki:Policy-url}}|ҡағиҙәләр]] буйынса ғына эшләнергә тейеш. Түбәндә бикләү сәбәбен күрһәтегеҙ (мәҫәлән, вандаллыҡ эҙҙәре булған бер нисә биттең цитатаһын килтерегеҙ).', @@ -2152,7 +2198,6 @@ $1', 'ipb-edit-dropdown' => 'Бикләү сәбәптәрен мөхәррирләргә', 'ipb-unblock-addr' => '$1 биген алырға', 'ipb-unblock' => 'Ҡатнашыусының йәки IP адрестың биген алырға', -'ipb-blocklist-addr' => '$1 өсөн бикләүҙәр', 'ipb-blocklist' => 'Булған бикләүҙәрҙе күрһәтергә', 'ipb-blocklist-contribs' => '$1 ҡатнашыусыһының кереткән өлөшө', 'unblockip' => 'Ҡатнашыусының биген алырға', @@ -2230,6 +2275,8 @@ $1 бикләнгән инде. 'cant-block-while-blocked' => 'Үҙегеҙ бикләнгән ваҡытта һеҙ башҡа ҡатнашыусыларҙы бикләй алмайһығыҙ.', 'cant-see-hidden-user' => 'Һеҙ бикләргә тырышҡан ҡатнашыусы әлеге ваҡытта бикләнгән һәм йәшерелгән. Ҡатнашыусыларҙы йәшереү хоҡуғығыҙ булмағанға күрә, һеҙ был бикләүҙе ҡарай йәки үҙгәртә алмайһығыҙ.', +'ipbblocked' => 'Үҙегеҙ бикләнгән ваҡытта һеҙ башҡа ҡатнашыусыларҙы бикләй йәки бикте ала алмайһығыҙ.', +'ipbnounblockself' => 'Һеҙ үҙегеҙҙән бикте ала алмайһығыҙ.', # Developer tools 'lockdb' => 'Мәғлүмәттәр базаһын бикләргә', @@ -2267,6 +2314,18 @@ $1 бикләнгән инде. '''Иғтибар!''' Популяр биттәрҙең исемен үҙгәртеү көтмәгән һөҙөмтәләргә килтерергә мөмкин. Дауам итерҙән алда, бөтә буласаҡ һөҙөмтәләрҙе аңлауығыҙҙы уйлағыҙ.", +'movepagetext-noredirectfixer' => "Аҫтағы форманы ҡулланыу биттең исемен үҙгәртә һәм уның үҙгәртеүҙәр яҙмаһын яңы урынға күсерә. +Биттең элекке исеме яңы биткә йүнәлтеү булып ҡаласаҡ. +Һеҙ элекке исемгә булған йүнәлтеүҙәрҙе автоматик рәүештә яңы исемгә күсерә алаһығыз. +Әгәр быны эшләмәһәгеҙ, [[Special:DoubleRedirects|икеле]] һәм [[Special:BrokenRedirects|өҙөлгән йүнәлтеүҙәрҙе]] тикшерегеҙ. +Һылтанмаларҙың кәрәкле урынға күрһәтеүҙәренең дауам итеүе өсөн һеҙ яуаплы. + +Иғтибар итегеҙ, әгәр яңы исемле бит бар икән, биттең исеме '''үҙгәртелмәйәсәк'''; элекке бит йүнәлтеү, буш һәм үҙгәртеү тарихына эйә булмаған осраҡтарҙан башҡа. +Был шуны аңлата: бит исемен яңылыш үҙгәртһәгеҙ, битте кире ҡайтара алаһығыҙ, ләкин булған битте юя алмайһығыҙ. + +'''Иғтибар!''' +Популяр биттәрҙең исемен үҙгәртеү көтмәгән һөҙөмтәләргә килтерүе мөмкин. +Дауам итерҙән алда, бөтә буласаҡ һөҙөмтәләрҙе аңлауығыҙҙы уйлағыҙ.", 'movepagetalktext' => "Фекер алышыу битенең исеме лә үҙгәртеләсәк, '''киләһе осраҡтарҙан тыш''': *Бындай исемле фекер алышыу бите бар, йәки *Аҫтағы юлды билдәләмәгәнһегеҙ. @@ -2321,6 +2380,7 @@ $1 бикләнгән инде. 'immobile-source-page' => 'Был биттең исемен үҙгәртеү мөмкин түгел.', 'immobile-target-page' => 'Биткә был исемде биреү мөмкин түгел.', 'imagenocrossnamespace' => 'Файлға башҡа исемдәр арауығындағы исемде биреү мөмкин түгел.', +'nonfile-cannot-move-to-file' => 'Файл булмаған есемгә файл исемдәре арауығындағы исемде биреү мөмкин түгел.', 'imagetypemismatch' => 'Яңы файл киңәйтеүе уның төрө менән тап килмәй', 'imageinvalidfilename' => 'Файл исеме дөрөҫ түгел', 'fix-double-redirects' => 'Элекке исемгә һылтанған йүнәлтеүҙәрҙе төҙәтергә', @@ -2397,6 +2457,7 @@ $1 бикләнгән инде. 'importstart' => 'Биттәрҙе тейәү...', 'import-revision-count' => '$1 {{PLURAL:$1|өлгө|өлгө}}', 'importnopages' => 'Тейәү өсөн биттәр юҡ.', +'imported-log-entries' => 'Журналдан $1 {{PLURAL:$1|яҙма}} тейәлде.', 'importfailed' => 'Тейәү хатаһы: $1', 'importunknownsource' => 'Сығанаҡ биттең төрө билдәһеҙ', 'importcantopen' => 'Тейәлә торған битте асып булмай', @@ -2494,6 +2555,8 @@ $1 бикләнгән инде. 'tooltip-upload' => 'Күсерә башларға', 'tooltip-rollback' => 'Бер баҫыу менән аҙаҡҡы мөхәррирләүсенең үҙгәртеүҙәрен кире ала.', 'tooltip-undo' => '"Кире ал" төҙәтеүҙе кире ала һәм төҙәтеү формаһын "алдан байҡау"ҙа күрһәтә. Һәм кире алыуҙың сәбәбен белдерергә була.', +'tooltip-preferences-save' => 'Көйләүҙәрҙе һаҡларға', +'tooltip-summary' => 'Ҡыҫҡаса тасуирлама керетегеҙ', # Metadata 'nodublincore' => 'Dublin Core RDF мета-мәғлүмәт был сервер өсөн рөхсәт ителмәй.', @@ -2599,14 +2662,17 @@ $1', 'imagemaxsize' => "Рәсем дәүмәле өсөн сик:
    ''(файл тасуирламаһы биттәре өсөн)''", 'thumbsize' => 'Шартлы рәсем дәүмәле:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|бит}}', -'file-info' => '(файлдың дәүмәле: $1, MIME төрө: $2)', -'file-info-size' => '($1 × $2 нөктә, файл күләме: $3, MIME-төр: $4)', +'file-info' => 'файлдың дәүмәле: $1, MIME төрө: $2', +'file-info-size' => '$1 × $2 нөктә, файлдың дәүмәле: $3, MIME төрө: $4', 'file-nohires' => 'Юғары асыҡлыҡтағы өлгө юҡ.', -'svg-long-desc' => '(SVG файлы, номиналь $1 × $2 нөктә, файл күләме: $3)', +'svg-long-desc' => 'SVG файлы, номиналь $1 × $2 нөктә, файлдың дәүмәле: $3', 'show-big-image' => 'Тулы асыҡлыҡ', 'show-big-image-thumb' => 'Алдан байҡау дәүмәле: $1 × $2 нөктә', 'file-info-gif-looped' => 'әйләнешле', 'file-info-gif-frames' => '$1 {{PLURAL:$1|фрейм}}', +'file-info-png-looped' => 'әйләнешле', +'file-info-png-repeat' => '$1 {{PLURAL:$1|тапҡыр}} уйнала', +'file-info-png-frames' => '$1 {{PLURAL:$1|фрейм}}', # Special:NewFiles 'newimages' => 'Яңы файлдар йыйылмаһы', @@ -2760,6 +2826,7 @@ $1', 'exif-gpsareainformation' => 'GPS өлкәһенең исеме', 'exif-gpsdatestamp' => 'GPS ваҡыты', 'exif-gpsdifferential' => 'GPS мәғлүмәтте дифференциаль төҙәтеү', +'exif-objectname' => 'Ҡыҫҡа исем', # EXIF attributes 'exif-compression-1' => 'Ҡыҫылмаған', @@ -2917,28 +2984,28 @@ $1', 'limitall' => 'бөтә', # E-mail address confirmation -'confirmemail' => 'Электрон почта адресын раҫлау', -'confirmemail_noemail' => 'Һеҙҙең [[Special:Preferences|көйләүҙәрегеҙҙә]] дөрөҫ электрон почта адресы юҡ.', -'confirmemail_text' => '{{SITENAME}} проекты электрон почта мөмкинлектәрен ҡулланыр алдынан электрон почта адресының раҫланыуын талап итә. +'confirmemail' => 'Электрон почта адресын раҫлау', +'confirmemail_noemail' => 'Һеҙҙең [[Special:Preferences|көйләүҙәрегеҙҙә]] дөрөҫ электрон почта адресы юҡ.', +'confirmemail_text' => '{{SITENAME}} проекты электрон почта мөмкинлектәрен ҡулланыр алдынан электрон почта адресының раҫланыуын талап итә. Электрон адресты раҫлау хаты һеҙҙең почтағыҙға ебәрелһен өсөн, түбәндәге төймәгә баҫығыҙ. Хатта махсус биткә һылтанма буласаҡ, был һылтанманы браузерығыҙҙа асҡандан һуң, һеҙҙең электрон почта адресығыҙ раҫланған, тип һаналасаҡ.', -'confirmemail_pending' => 'Электрон почта адресын раҫлау хаты һеҙгә ебәрелгән ине инде. +'confirmemail_pending' => 'Электрон почта адресын раҫлау хаты һеҙгә ебәрелгән ине инде. Әгәр һеҙ иҫәп яҙмаһын яңыраҡ булдырһағыҙ, һеҙгә был хатты яңынан һорар алдынан, хат килгәнсе, бер нисә минут көтөргә кәрәк.', -'confirmemail_send' => 'Электрон почта адресын раҫлау хатын ебәрергә', -'confirmemail_sent' => 'Электрон почта адресын раҫлау хаты ебәрелде.', -'confirmemail_oncreate' => 'Электрон почта адресын раҫлау хаты һеҙ күрһәткән адрес буйынса ебәрелде. +'confirmemail_send' => 'Электрон почта адресын раҫлау хатын ебәрергә', +'confirmemail_sent' => 'Электрон почта адресын раҫлау хаты ебәрелде.', +'confirmemail_oncreate' => 'Электрон почта адресын раҫлау хаты һеҙ күрһәткән адрес буйынса ебәрелде. Хатта күрһәтелгән һылтанма системала танылыу талап итмәй, ләкин элетрон почта мөмкинлектәрен вики проектта ҡулланыр өсөн, һеҙгә танылырға кәрәк.', -'confirmemail_sendfailed' => '{{SITENAME}} электрон почта адресын раҫлау хатын ебәрә алмай. +'confirmemail_sendfailed' => '{{SITENAME}} электрон почта адресын раҫлау хатын ебәрә алмай. Зинһар, адресығыҙҙың дөрөҫлөгөн тикшерегеҙ. Почта хеҙмәтенең яуабы: $1', -'confirmemail_invalid' => 'Раҫлау коды дөрөҫ түгел йәки уның ҡүлланыу ваҡыты үткән.', -'confirmemail_needlogin' => 'Электрон почта адресын раҫлау өсөн $1 кәрәк.', -'confirmemail_success' => 'Һеҙҙең электрон почта адресығыҙ раҫланды. +'confirmemail_invalid' => 'Раҫлау коды дөрөҫ түгел йәки уның ҡүлланыу ваҡыты үткән.', +'confirmemail_needlogin' => 'Электрон почта адресын раҫлау өсөн $1 кәрәк.', +'confirmemail_success' => 'Һеҙҙең электрон почта адресығыҙ раҫланды. Хәҙер һеҙ [[Special:UserLogin|танылыу үтеп]], вики проект менән ҡуллана алаһығыҙ.', -'confirmemail_loggedin' => 'Һеҙҙең электрон почта адресығыҙ раҫланды.', -'confirmemail_error' => 'Электрон почта адресын раҫлаған ваҡытта хата килеп сыҡты.', -'confirmemail_subject' => '{{SITENAME}} электрон почта адресын раҫлау', -'confirmemail_body' => 'Кемдер, бәлки һеҙҙер, $1 IP адресынан +'confirmemail_loggedin' => 'Һеҙҙең электрон почта адресығыҙ раҫланды.', +'confirmemail_error' => 'Электрон почта адресын раҫлаған ваҡытта хата килеп сыҡты.', +'confirmemail_subject' => '{{SITENAME}} электрон почта адресын раҫлау', +'confirmemail_body' => 'Кемдер, бәлки һеҙҙер, $1 IP адресынан {{SITENAME}} проектында ошо электрон почта адресы менән "$2" иҫәп яҙмаһын теркәгән. Был иҫәп яҙмаһы ысынлап та һеҙҙеке икәнен раҫлау өсөн һәм @@ -2952,8 +3019,36 @@ $3 $5 Был раҫлау коды $4 ғәмәлдән сыға.', -'confirmemail_invalidated' => 'Электрон почта адресын раҫлау туҡтатылды', -'invalidateemail' => 'Электрон почта адресын раҫлауҙы туҡтатыу', +'confirmemail_body_changed' => 'Кемдер, бәлки һеҙҙер, $1 IP адресынан +{{SITENAME}} проектында "$2" иҫәп яҙмаһының электрон почта адресын ошо адресҡа үҙгәрткән. + +Был иҫәп яҙмаһы ысынлап та һеҙҙеке икәнен раҫлау өсөн һәм +{{SITENAME}} проектында элетрон почта мөмкинлектәрен яңынан тоҡандырыу өсөн, браузерығыҙҙа түбәндәге һылтанманы асығыҙ: + +$3 + +Әгәр һеҙ иҫәп яҙмаһын *булдырмағанһығыҙ* икән, +электрон почта адресын раҫлауҙы үтҡәрмәү өсөн т үбәндәге һылтанманы асығыҙ: + +$5 + +Был раҫлау коды $4 ғәмәлдән сыға.', +'confirmemail_body_set' => 'Кемдер, бәлки һеҙҙер, $1 IP адресынан +{{SITENAME}} проектында "$2" иҫәп яҙмаһының электрон почта адресын ошо адрес итеп билдәләгән. + +Был иҫәп яҙмаһы ысынлап та һеҙҙеке икәнен раҫлау өсөн һәм +{{SITENAME}} проектында элетрон почта мөмкинлектәрен яңынан тоҡандырыу өсөн, браузерығыҙҙа түбәндәге һылтанманы асығыҙ: + +$3 + +Әгәр иҫәп яҙмаһы һеҙҙеке *түгел* икән, +электрон почта адресын раҫлауҙы үтҡәрмәү өсөн т үбәндәге һылтанманы асығыҙ: + +$5 + +Был раҫлау коды $4 ғәмәлдән сыға.', +'confirmemail_invalidated' => 'Электрон почта адресын раҫлау туҡтатылды', +'invalidateemail' => 'Электрон почта адресын раҫлауҙы туҡтатыу', # Scary transclusion 'scarytranscludedisabled' => '[Интервики индереү мөмкинлеге һүндерелгән]', @@ -2993,6 +3088,7 @@ $1', 'table_pager_first' => 'Беренсе бит', 'table_pager_last' => 'Һуңғы бит', 'table_pager_limit' => 'Бер биткә $1 есем күрһәтергә', +'table_pager_limit_label' => 'Бер биттә есемдәр һаны:', 'table_pager_limit_submit' => 'Күсеү', 'table_pager_empty' => 'Табылманы', @@ -3050,6 +3146,7 @@ $1', 'version-specialpages' => 'Махсус биттәр', 'version-parserhooks' => 'Уҡыу ҡоралдары', 'version-variables' => 'Үҙгәреүсән дәүмәлдәр', +'version-skins' => 'Күренештәр', 'version-other' => 'Башҡалар', 'version-mediahandlers' => 'Медиа эшкәртеүсе ҡоралдар', 'version-hooks' => 'Эләктереп алыусылар', @@ -3061,6 +3158,13 @@ $1', 'version-hook-subscribedby' => 'Яҙҙырылған', 'version-version' => '($1 өлгөһө)', 'version-license' => 'Рөхсәтнамә', +'version-poweredby-credits' => "Был вики проект '''[http://www.mediawiki.org/ MediaWiki]''' нигеҙендә эшләй, copyright © 2001-$1 $2.", +'version-poweredby-others' => 'башҡалар', +'version-license-info' => 'MediaWiki — ирекле программа, һеҙ уны Ирекле программалар фонды тарафынан баҫтырылған GNU General Public License рөхсәтнамәһенә ярашлы тарата һәм/йәки үҙгәртә алаһығыҙ (рөхсәтнамәнең йә исенсе өлгөһө, йә унан һуңғы өлгөләре). + +MediaWiki файҙалы булыр, тигән өмөттә, ләкин БЕР НИДӘЙ ҘӘ ЯУАПЛЫЛЫҠ ЙӨКЛӘМӘҺЕҘ, хатта фараз ителгән ҺАТЫУ ӨСӨН ЯРАҠЛЫЛЫҠ йәки БИЛДӘЛӘНГӘН МАҠСАТ ӨСӨН ЯРАҠЛЫТЫҠ тураһында яуаплылыҡ йөкләмәһеҙ таратыла. Ентекле мәғлүмәт алыр өсөн, GNU General Public License рөхсәтнамәһе тураһында уҡығыҙ. + +Был программа менән ҡуша һеҙ [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General Public License рөхсәтнамәһенең күсермәһен] алырға тейеш инегеҙ, әгәр юҡ икән, Ирекле программалар фондына 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA адресы буйынса яҙығыҙ, йәки рөхсәтнамәнең [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html онлайн өлгөһөн] уҡығыҙ.', 'version-software' => 'Ҡуйылған программалар', 'version-software-product' => 'Продукт', 'version-software-version' => 'Өлгөһө', @@ -3131,6 +3235,15 @@ $1', 'tags-edit' => 'үҙгәртергә', 'tags-hitcount' => '$1 {{PLURAL:$1|үҙгәртеү|үҙгәртеү}}', +# Special:ComparePages +'comparepages' => 'Биттәрҙе сағыштырыу', +'compare-selector' => 'Биттәрҙең өлгөләрен сағыштырыу', +'compare-page1' => 'Беренсе бит', +'compare-page2' => 'Икенсе бит', +'compare-rev1' => 'Беренсе өлгө', +'compare-rev2' => 'Икенсе өлгө', +'compare-submit' => 'Сағыштырырға', + # Database error messages 'dberr-header' => 'Был вики проектта ҡыйынлыҡтар бар', 'dberr-problems' => 'Ғәфү итегеҙ! @@ -3148,8 +3261,13 @@ $1', 'htmlform-float-invalid' => 'Һеҙ һан керетмәгәнһегеҙ.', 'htmlform-int-toolow' => 'Һеҙ кереткән мәғәнә аҫҡы сиктән түбәнерәк — $1', 'htmlform-int-toohigh' => 'Һеҙ кереткән мәғәнә өҫкө сиктән юғарыраҡ — $1', +'htmlform-required' => 'Был мәғәнә билдәләнгән булырға тейеш', 'htmlform-submit' => 'Ебәрергә', 'htmlform-reset' => 'Үҙгәртеүҙәрҙе кире алырға', 'htmlform-selectorother-other' => 'Башҡа', +# SQLite database support +'sqlite-has-fts' => '$1, тулы текст буйынса эҙләү мөмкинлеге менән', +'sqlite-no-fts' => '$1, тулы текст буйынса эҙләү мөмкинлекһеҙ', + ); diff --git a/languages/messages/MessagesBar.php b/languages/messages/MessagesBar.php index 9a110b53..ba9144d4 100644 --- a/languages/messages/MessagesBar.php +++ b/languages/messages/MessagesBar.php @@ -12,6 +12,8 @@ * @author Merlissimo * @author Metalhead64 * @author Mucalexx + * @author The Evil IP address + * @author Wikifan * @author bar.wikipedia.org administrators * @author ✓ */ @@ -34,7 +36,7 @@ $messages = array( 'tog-editsection' => 'Links zum beorweiten vo dé oazlnen Obschnitt åzoang', 'tog-editsectiononrightclick' => 'Oazlne Obschnitt mid am Rechtsdruckerrer beorweiten (JavaScript werd braucht)', 'tog-showtoc' => 'Ozeign vum Inhaltsvazeichnis bei Saitn mid mer ois drei Übaschriftn', -'tog-editwidth' => "Eingåbeföid erweitan, damid's in gãnzn Büidschiam ausfüid", +'tog-rememberpassword' => 'Mid dem Browser drauerhoft ågmoydt bleim (maximaal $1 {{PLURAL:$1|Tog|Tog}})', 'tog-watchcreations' => 'Vo mir soywer eigstoyde Seiten autómaatisch bówochten', 'tog-watchdefault' => 'Vo mir soywer genderde Seiten autómaatisch bówochten', 'tog-watchmoves' => 'Vo mir soywer vaschówane Seiten autómaatisch bówochten', @@ -159,30 +161,29 @@ $messages = array( 'mytalk' => 'Aigane Diskussion', 'anontalk' => 'Dischkrirsaiten vo derer IP-Adress', 'navigation' => 'Navigazion', -'and' => ' und', # Cologne Blue skin 'qbfind' => 'Finden', 'qbedit' => 'werkln', 'qbmyoptions' => 'Maine Saiten', 'qbspecialpages' => 'Speziaalsaiten', -'faq' => 'FAQ', # Vector skin -'vector-action-addsection' => 'Obschnit dazuafyng', -'vector-action-delete' => 'leschn', -'vector-action-move' => 'Vaschiam', -'vector-action-protect' => 'Schytzen', -'vector-action-undelete' => 'Wiaderherstöin', -'vector-action-unprotect' => 'Fraigeem', -'vector-view-create' => 'Erstöin', -'vector-view-edit' => 'Werkln', -'vector-view-history' => 'Versionsgschicht', -'vector-view-view' => 'Leesn', -'vector-view-viewsource' => 'Quöitext åzong', -'actions' => 'Akzionen', -'namespaces' => 'Nåmensraim', -'variants' => 'Variantn', +'vector-action-addsection' => 'Obschnit dazuafyng', +'vector-action-delete' => 'leschn', +'vector-action-move' => 'Vaschiam', +'vector-action-protect' => 'Schytzen', +'vector-action-undelete' => 'Wiaderherstöin', +'vector-action-unprotect' => 'Fraigeem', +'vector-simplesearch-preference' => 'Daweiterte Suachvurschläg aktivirn (netter Vector)', +'vector-view-create' => 'Erstöin', +'vector-view-edit' => 'Werkln', +'vector-view-history' => 'Versionsgschicht', +'vector-view-view' => 'Leesn', +'vector-view-viewsource' => 'Quöitext åzong', +'actions' => 'Akzionen', +'namespaces' => 'Nåmensraim', +'variants' => 'Variantn', 'errorpagetitle' => 'Feeler', 'returnto' => 'Zruck zur Saiten $1.', @@ -358,7 +359,7 @@ Vagiss bittschee ned, daine [[Special:Preferences|{{SITENAME}}-Aistellungen]] å 'yourname' => 'Benytzernåm:', 'yourpassword' => 'Posswort:', 'yourpasswordagain' => 'Posswort no amoi', -'remembermypassword' => 'auf dem Computer dauerhoft åmöiden', +'remembermypassword' => 'Mid dem Browser dauerhoft ågmöidt blaim (maximaal $1 {{PLURAL:$1|Dog|Dog}})', 'yourdomainname' => 'Eanerne Domain:', 'externaldberror' => 'Entweder es ligt a Feeler bai da externen Authentifiziarung vur oder du derfst dai externs Benytzerkonto ned aktualisirn.', 'login' => 'Åmöiden', @@ -375,6 +376,7 @@ Vagiss bittschee ned, daine [[Special:Preferences|{{SITENAME}}-Aistellungen]] å 'gotaccount' => "Du host scho a Benutzerkonto? '''$1'''.", 'gotaccountlink' => 'Åmöiden', 'createaccountmail' => 'per E-Mäil', +'createaccountreason' => 'Grund', 'badretype' => 'De zwoa Posswerter stimman ned ywerai.', 'userexists' => 'Da Benytzernåm is scho vageem. Bittschee nimm an åndern her.', 'loginerror' => 'Feeler bai da Åmöidung', @@ -456,7 +458,6 @@ Du kååst an Titl vo derer Saiten auf de åndern Saiten [[Special:Search/{{PAGE 'blocked-notice-logextract' => "{{GENDER:$1|Der Benutzer|De Benutzarin|Der Benutzer do}} is zurzeid gesperrd. Zua da Informazion foigt a aktueller Auszug aus 'm Benutzersperr-Logbiache:", 'updated' => '(Gendert)', -'note' => "'''Hinweis:'''", 'previewnote' => "'''Des is netter a Vurschau, d' Saiten is nu ned gspaichert worn!'''", 'previewconflict' => "De Vurschau gibt an Inhoit vom owern Textföidl wiader. So werd d' Saiten ausschaun, wånn du jetzad spaichertst.", 'session_fail_preview' => "'''Daine Beorwaitungen håm ned gspaichert wern kenna, wail Sitzungsdaaten valurn gånga san.''' @@ -476,8 +477,6 @@ Bittschee fiag daine Enderungen ins owere Textföidl ai. Du gibst uns dodamid dai Zuasog, dass du dén Text '''söiwer vafosst''' host, das da Text a Oigmoaguat '''(public domain)''' is, óder das da '''Urhéwer''' sai '''Zuastimmung''' geem hod. Fois der Text beraits irngdwó ånderst vaéffmtlécht worn is, moch bittschee an Hiwais in da Diskussiónssaitn. Bittschee beochtt, das olle {{SITENAME}}-Baitrég autómaatésch unter da „$2“ steengan (schau unter $1 fyr Details). Fois du néd mechst, das dai Orwait do vo ånderne vaéndert und vabroatt werd, dånn druck néd auf „Saiten spaichern“.", -'longpagewarning' => "'''Wornung:''' De Saiten is $1 kB grouss; ned a jeeder Browser kå Saiten beorwaiten, de greesser ois wia 32 kB san. -Ywerleeg da bittschee, ob a Auftailung vo derer Saiten in koanare Obschnit meglich is.", 'semiprotectedpagewarning' => "'''Hoibsperrung:''' De Saiten is aso gsperrt worn, das netter registriarde Benytzer de endern kenna.", 'titleprotectedwarning' => "'''Ochtung: De Saitenerstöiung is aso gschytzt worn, das netter Benytzer mid [[Special:ListGroupRights|speziöie Rechte]] de Saiten erstöin kennan.''' Zur Informazion foigt da aktuöie Logbuachaitrog:", @@ -609,17 +608,11 @@ Mid ånderne Benutzer kåst du aa ywer de Benutzerdischkrirsaiten an Kontakt auf 'group-user-member' => 'Benutza', 'group-autoconfirmed-member' => 'Bestätigta Benutza', -'group-bot-member' => 'Bot', -'group-sysop-member' => 'Administrator', -'group-bureaucrat-member' => 'Bürokrat', -'group-suppress-member' => 'Oversighter', 'grouppage-user' => '{{ns:project}}:Benutza', 'grouppage-autoconfirmed' => '{{ns:project}}:Bestätigte Benutza', -'grouppage-bot' => '{{ns:project}}:Bots', 'grouppage-sysop' => '{{ns:project}}:Administratoan', 'grouppage-bureaucrat' => '{{ns:project}}:Bürokratn', -'grouppage-suppress' => '{{ns:project}}:Oversighter', # Rights 'right-read' => 'Seitn lesn', @@ -666,26 +659,26 @@ Mid ånderne Benutzer kåst du aa ywer de Benutzerdischkrirsaiten an Kontakt auf 'recentchangeslinked-to' => 'Zoagt Éndarungen auf Saiten, dé doher valinken', # Upload -'upload' => 'Auffeloon', -'uploadnologin' => 'Ned ågmöidt', -'uploadnologintext' => "Sie miassn [[Special:UserLogin|ogmeidt sei]], wenn S' Dateien hoachladn wolln.", -'uploadlog' => 'Datei-Logbuach', -'uploadlogpage' => 'Datei-Logbuach', -'uploadlogpagetext' => 'Des is des Logbuach vo de hoachgladna Dateien, schaug aa unta [[Special:NewFiles|neie Dateien]].', -'uploadedfiles' => 'Hoachgladene Dateien', -'badfilename' => "Da Dateinam is in „$1“ g'ändat won.", -'large-file' => 'De Dateigreß sollat nach Möglichkeit $1 net überschreitn. De Datei is $2 groaß.', -'emptyfile' => "De hochgladene Datei is laar. Da Grund konn a Tippfehler im Dateinam sei. Bitte kontrollieren'S, ob Sie de Datei wirklich hochladn woin.", -'successfulupload' => 'Erfolgreich hoachgladn', -'uploadwarning' => 'Obacht', -'uploadedimage' => 'håd „[[$1]]“ aufeglådn', -'uploaddisabled' => "'tschuldigung, as Hochladn is deaktiviert.", -'uploadscripted' => 'De Datei enthalt HTML- oda Scriptcode, der irrtümlichaweis von am Webbrowser ausgführt wern kinnat.', -'watchthisupload' => 'De Saiten beowochten', -'filewasdeleted' => 'A Datei mit dem Nama is scho oamoi hochgladn worn und zwischenzeitlich wieda glöscht worn. Bitte schaug erscht den Eintrag im $1 oo, bevor du de Datei wirklich speicherst.', -'upload-wasdeleted' => "'''Obacht: Du ladst aa Datei hoach, de scho friara glöscht worn is.''' +'upload' => 'Auffeloon', +'uploadnologin' => 'Ned ågmöidt', +'uploadnologintext' => "Sie miassn [[Special:UserLogin|ogmeidt sei]], wenn S' Dateien hoachladn wolln.", +'uploadlog' => 'Datei-Logbuach', +'uploadlogpage' => 'Datei-Logbuach', +'uploadlogpagetext' => 'Des is des Logbuach vo de hoachgladna Dateien, schaug aa unta [[Special:NewFiles|neie Dateien]].', +'uploadedfiles' => 'Hoachgladene Dateien', +'badfilename' => "Da Dateinam is in „$1“ g'ändat won.", +'large-file' => 'De Dateigreß sollat nach Möglichkeit $1 net überschreitn. De Datei is $2 groaß.', +'emptyfile' => "De hochgladene Datei is laar. Da Grund konn a Tippfehler im Dateinam sei. Bitte kontrollieren'S, ob Sie de Datei wirklich hochladn woin.", +'uploadwarning' => 'Obacht', +'uploadedimage' => 'håd „[[$1]]“ aufeglådn', +'uploaddisabled' => "'tschuldigung, as Hochladn is deaktiviert.", +'uploadscripted' => 'De Datei enthalt HTML- oda Scriptcode, der irrtümlichaweis von am Webbrowser ausgführt wern kinnat.', +'watchthisupload' => 'De Saiten beowochten', +'filewasdeleted' => 'A Datei mit dem Nama is scho oamoi hochgladn worn und zwischenzeitlich wieda glöscht worn. Bitte schaug erscht den Eintrag im $1 oo, bevor du de Datei wirklich speicherst.', +'upload-wasdeleted' => "'''Obacht: Du ladst aa Datei hoach, de scho friara glöscht worn is.''' Bittschee prüf gnau, ob as erneite Hoachladn de Richtlinien entspricht. Zu deina Information folgt des Lösch-Logbuach mit da Begründung fia de vorherige Löschung:", +'upload-success-subj' => 'Erfolgreich hoachgladn', # Some likely curl errors. More could be added from 'upload-curl-error6' => 'URL is net erreichbar', @@ -743,7 +736,6 @@ A [[Special:WhatLinksHere/$2|voiständige Listn]] gibt's aa.", 'statistics' => 'Statistik', 'statistics-mostpopular' => 'Am meistn bsuachte Seitn', -'disambiguationspage' => 'Template:Begriffsklärung', 'disambiguations-text' => 'De folgenden Seitn valinkn auf a Seitn zur Begriffsklärung. Sie solltn stattdessn auf de eigentlich gemoante Seitn valinkn.
    A Seitn werd ois Begriffsklärungsseitn behandelt, wenn [[MediaWiki:Disambiguationspage]] auf sie valinkt.
    Links aus Namensräume wern da net aufglistet.', @@ -826,7 +818,6 @@ Links aus Namensräume wern da net aufglistet.', # Watchlist 'watchlist' => 'Beobachtungslistn', 'mywatchlist' => 'Beowochtungslisten', -'watchlistfor' => "(fia '''$1''')", 'watchlistanontext' => 'Sie miaßn si $1, um Eanane Beobachtungslistn zum seng oda Einträge auf ihr zum bearbatn.', 'watchnologin' => 'Sie san net ogmeidt', 'addedwatch' => 'Zua Beobachtungslistn dazuado', @@ -1001,7 +992,6 @@ Zur da Aufheewung vo da Sperrn schau unter da [[Special:IPBlockList|Listen vo ol 'ipb-edit-dropdown' => 'Sperrgrynd beorwaiten', 'ipb-unblock-addr' => '„$1“ fraigeem', 'ipb-unblock' => 'IP-Adress/Benytzer fraigeem', -'ipb-blocklist-addr' => 'Aktuelle Sperrn fyr „$1“ åzoang', 'ipb-blocklist' => 'Olle aktuöin Sperrn åzaang', 'ipb-blocklist-contribs' => 'Benytzerbaiträg vo „$1“', 'unblockip' => 'IP-Adress fraigeem', @@ -1180,9 +1170,9 @@ Vorschau der Änderungen an dieser Seite. Bitte vor dem Speichern benutzen!", 'nextdiff' => 'zum nextn Untaschied in de Veasionen →', # Media information -'file-info-size' => '($1 × $2 Pixl, Dateigreßn: $3, MIME-Typ: $4)', +'file-info-size' => '$1 × $2 Pixl, Dateigreßn: $3, MIME-Typ: $4', 'file-nohires' => 'Es gibt ka hechane Auflösung.', -'svg-long-desc' => '(SVG-Datei, Basisgreß: $1 × $2 Pixl, Dateigreß: $3)', +'svg-long-desc' => 'SVG-Datei, Basisgreß: $1 × $2 Pixl, Dateigreß: $3', 'show-big-image' => 'Version in hechana Auflösung', 'show-big-image-thumb' => 'Greßn vu da Voaãnsicht: $1 × $2 Pixl', diff --git a/languages/messages/MessagesBat_smg.php b/languages/messages/MessagesBat_smg.php index 7cf68a27..d32e58ac 100644 --- a/languages/messages/MessagesBat_smg.php +++ b/languages/messages/MessagesBat_smg.php @@ -1,5 +1,8 @@ 'Medėjė', - NS_SPECIAL => 'Specēlos', - NS_TALK => 'Aptarėms', - NS_USER => 'Nauduotuos', - NS_USER_TALK => 'Nauduotuojė_aptarėms', - NS_PROJECT_TALK => '$1_aptarėms', - NS_FILE => 'Abruozdielis', - NS_FILE_TALK => 'Abruozdielė_aptarėms', - NS_MEDIAWIKI => 'MediaWiki', - NS_MEDIAWIKI_TALK => 'MediaWiki_aptarėms', - NS_TEMPLATE => 'Šabluons', - NS_TEMPLATE_TALK => 'Šabluona_aptarėms', - NS_HELP => 'Pagelba', - NS_HELP_TALK => 'Pagelbas_aptarėms', - NS_CATEGORY => 'Kateguorėjė', - NS_CATEGORY_TALK => 'Kateguorėjės_aptarėms', -); - -/** - * Aliases from the fallback language 'lt' to avoid breakage of links - */ - -$namespaceAliases = array( - 'Specialus' => NS_SPECIAL, - 'Aptarimas' => NS_TALK, - 'Naudotojas' => NS_USER, - 'Naudotojo_aptarimas' => NS_USER_TALK, - '$1_aptarimas' => NS_PROJECT_TALK, - 'Vaizdas' => NS_FILE, - 'Vaizdo_aptarimas' => NS_FILE_TALK, - 'MediaWiki_aptarimas' => NS_MEDIAWIKI_TALK, - 'Šablonas' => NS_TEMPLATE, - 'Šablono_aptarimas' => NS_TEMPLATE_TALK, - 'Pagalba' => NS_HELP, - 'Pagalbos_aptarimas' => NS_HELP_TALK, - 'Kategorija' => NS_CATEGORY, - 'Kategorijos_aptarimas' => NS_CATEGORY_TALK, -); - -$messages = array( -# User preference toggles -'tog-underline' => 'Pabrauktė nūruodas:', -'tog-highlightbroken' => 'Fuormoutė nasontiu poslapiu nūruodas šėtēp (prīšėngā - šėtēp ?).', -'tog-justify' => 'Līgintė pastraipas palē abi poses', -'tog-hideminor' => 'Pakavuotė mažus pataisėmus vielībūju taisīmu sārašė', -'tog-extendwatchlist' => 'Ėšpliestė keravuojamu sāraša, kū ruodītu vėsus tėnkamus pakeitėmus', -'tog-usenewrc' => 'Pažongē ruodomė vielibė̅jė pakeitėmā (JavaScript)', -'tog-numberheadings' => 'Autuomatėškā numeroutė skėrsnelios', -'tog-showtoolbar' => 'Ruodītė redagavėma rakondinė (JavaScript)', -'tog-editondblclick' => 'Poslapiu redagavėms dvėgobu paspaudėmu (JavaScript)', -'tog-editsection' => 'Ijongtė skėrsneliu redagavėma nauduojant nūruodas [taisītė]', -'tog-editsectiononrightclick' => 'Ijongtė skėrsneliu redagavėma paspaudos skėrsnelė pavadėnėma
    dešėniouju pelies klavėšu (JavaScript)', -'tog-showtoc' => 'Ruodītė torėni, jē poslapī daugiau kāp 3 skėrsnelē', -'tog-rememberpassword' => 'Atmintė prėsėjongėma infuormacėjė šėtom kuompioterī', -'tog-editwidth' => 'Pėlna pluotė redagavėma lauks', -'tog-watchcreations' => 'Pridietė poslapius, katrūs sokorio, i keravuojamu sāraša', -'tog-watchdefault' => 'Pridietė poslapius, katrūs taisau, i keravuojamu sāraša', -'tog-watchmoves' => 'Pridietė poslapius, katrūs parkelio, i keravuojamu sāraša', -'tog-watchdeletion' => 'Pridietė poslapius, katrūs ėštrino, i keravuojamu sāraša', -'tog-minordefault' => 'Palē nutīliejėma pažīmietė redagavėmus kāp mažus', -'tog-previewontop' => 'Ruodītė parvaiza vėrš redagavėma lauka', -'tog-previewonfirst' => 'Ruodītė straipsnė parvėiza pėrmu redagavėmu', -'tog-nocache' => "Nenauduotė poslapiu kaupėma (''caching'')", -'tog-enotifwatchlistpages' => 'Siōstė mon gromata, kūmet pakeitams poslapis, katra stebiu', -'tog-enotifusertalkpages' => 'Siōstė mon gromata, kūmet pakaitams mona nauduotuojė aptarėma poslapis', -'tog-enotifminoredits' => 'Siōstė mon gromata, kūmet poslapė keitėms īr mažos', -'tog-enotifrevealaddr' => 'Ruodītė mona el. pašta adresa primėnėma gromatuos', -'tog-shownumberswatching' => 'Ruodītė keravuojantiu nauduotuoju skatliu', -'tog-fancysig' => 'Parašos ba autuomatėniu nūruodu', -'tog-externaleditor' => 'Palē nutīliejėma nauduotė ėšuorini radaktuoriu', -'tog-externaldiff' => 'Palē nutīliejėma nauduotė ėšuorinė skėrtomu ruodīma pruograma', -'tog-showjumplinks' => 'Ijongtė „paršuoktė i“ pasėikiamoma nūruodas', -'tog-uselivepreview' => 'Nauduotė tėisiogėne parvėiza (JavaScript) (Eksperimentėnis)', -'tog-forceeditsummary' => 'Klaustė, kumet palėiku toščē pakeitėma kuomentara', -'tog-watchlisthideown' => 'Kavuotė mona pakeitėmos keravuojamu sarašė', -'tog-watchlisthidebots' => 'Kavuotė robotu pakeitėmos keravuojamu sārašė', -'tog-watchlisthideminor' => 'Kavuotė mažos pakeitėmos keravuojamu sarašė', -'tog-watchlisthideliu' => 'Kavuotė prisėjongosium nauduotuojum keitėmus keravuojamu sārošė', -'tog-watchlisthideanons' => 'Kavuotė anonimėniu nauduotuoju keitėmus keravuojamu sarašė', -'tog-nolangconversion' => 'Ėšjongtė variantu keitėma', -'tog-ccmeonemails' => 'Siōstė mon gromatu kopėjės, katros siontiu kėtėims nauduotojams', -'tog-diffonly' => 'Neruodītė poslapė torėnė puo skėrtomās', -'tog-showhiddencats' => 'Ruodītė pakavuotas kateguorėjės', -'tog-norollbackdiff' => 'Nekrēptė diemesė i skėrtoma atlėkus atmetėma', - -'underline-always' => 'Visumet', -'underline-never' => 'Nikumet', -'underline-default' => 'Palē naršīklės nostatīmos', - -# Dates -'sunday' => 'sekma dėina', -'monday' => 'pėrmadėinis', -'tuesday' => 'ontradėinis', -'wednesday' => 'trečiadėinis', -'thursday' => 'ketvėrtadėinis', -'friday' => 'pėnktadėinis', -'saturday' => 'subata', -'sun' => 'Sekm', -'mon' => 'Pėrm', -'tue' => 'Ontr', -'wed' => 'Treč', -'thu' => 'Ketv', -'fri' => 'Pėnk', -'sat' => 'Sub', -'january' => 'sausė', -'february' => 'vasarė', -'march' => 'kuova', -'april' => 'balondė', -'may_long' => 'gegožės', -'june' => 'bėrželė', -'july' => 'lėipas', -'august' => 'rogpjūtė', -'september' => 'siejės', -'october' => 'spalė', -'november' => 'lapkrėstė', -'december' => 'groudė', -'january-gen' => 'Sausis', -'february-gen' => 'Vasaris', -'march-gen' => 'Kuovs', -'april-gen' => 'Balondis', -'may-gen' => 'Gegožė', -'june-gen' => 'Bėrželis', -'july-gen' => 'Lėipa', -'august-gen' => 'Rogpjūtis', -'september-gen' => 'Siejė', -'october-gen' => 'Spalis', -'november-gen' => 'Lapkrėstis', -'december-gen' => 'Groudis', -'jan' => 'sau', -'feb' => 'vas', -'mar' => 'kuo', -'apr' => 'bal', -'may' => 'geg', -'jun' => 'bėr', -'jul' => 'lėi', -'aug' => 'rgp', -'sep' => 'sie', -'oct' => 'spa', -'nov' => 'lap', -'dec' => 'grd', - -# Categories related messages -'pagecategories' => '{{PLURAL:$1|Kateguorėjė|Kateguorėjės|Kateguorėju}}', -'category_header' => 'Kateguorėjės „$1“ straipsnē', -'subcategories' => 'Subkateguorėjės', -'category-media-header' => 'Abruozdielis kateguorėjuo „$1“', -'category-empty' => "''Šėta kateguorėjė nūnā netor nė vėina straipsnė a faila.''", -'hidden-categories' => '{{PLURAL:$1|Pakavuota kateguorėjė|Pakavuotas kateguorėjės}}', -'hidden-category-category' => 'Pakavuotas kateguorėjės', -'category-subcat-count' => '{{PLURAL:$2|Tuo kateguorėjuo īr vėina subkateguorėjė.|{{PLURAL:$1|Ruodoma|Ruodomas|Ruodoma}} $1 {{PLURAL:$1|subkateguorėjė|subkateguorėjės|subkateguorėju}} (ėš vėsa īr $2 {{PLURAL:$2|subkateguorėjė|subkateguorėjės|subkateguorėju}}).}}', -'category-article-count' => '{{PLURAL:$2|Tuo kateguorėjuo īr vėins poslapis.|{{PLURAL:$1|Ruodoms|Ruodomė|Ruodoma}} $1 tuos kateguorėjės {{PLURAL:$1|poslapis|poslapē|poslapiu}} (ėš vėsa kateguorėjuo īr $2 {{PLURAL:$2|poslapis|poslapē|poslapiu}}).}}', -'listingcontinuesabbrev' => 'tes.', - -'about' => 'Aple', -'article' => 'Straipsnis', -'newwindow' => '(īr atverams naujam longė)', -'cancel' => 'Nutrauktė', -'moredotdotdot' => 'Daugiau...', -'mypage' => 'Mona poslapis', -'mytalk' => 'Mona aptarėms', -'anontalk' => 'Šėta IP aptarėms', -'navigation' => 'Naršīms', -'and' => ' ėr', - -# Cologne Blue skin -'qbfind' => 'Ėiškuotė', -'qbbrowse' => 'Naršītė', -'qbedit' => 'Taisītė', -'qbpageoptions' => 'Tas poslapis', -'qbpageinfo' => 'Konteksts', -'qbmyoptions' => 'Mona poslapē', -'qbspecialpages' => 'Specēlė̅jė poslapē', -'faq' => 'DOK', -'faqpage' => 'Project:DOK', - -# Vector skin -'vector-action-addsection' => 'Pridietė tema', -'vector-action-delete' => 'Trintė', -'vector-action-move' => 'Parvadintė', -'vector-action-protect' => 'Ožrakintė', -'vector-action-undelete' => 'Atkortė', -'vector-action-unprotect' => 'Atrakintė', -'vector-namespace-category' => 'Kateguorėjė', -'vector-namespace-help' => 'Pagelbas poslapis', -'vector-namespace-image' => 'Fails', -'vector-namespace-main' => 'Poslapis', -'vector-namespace-media' => 'Abruozdielė poslapis', -'vector-namespace-mediawiki' => 'Pranešims', -'vector-namespace-project' => 'Pruojekta poslapis', -'vector-namespace-special' => 'Specēlos poslapis', -'vector-namespace-talk' => 'Aptarėms', -'vector-namespace-template' => 'Šabluons', -'vector-namespace-user' => 'Nauduotuojė poslapis', -'vector-view-create' => 'Sokortė', -'vector-view-edit' => 'Taisītė', -'vector-view-history' => 'Veizietė istuorėjė', -'vector-view-view' => 'Skaitītė', -'vector-view-viewsource' => 'Veizietė kuoda', -'actions' => 'Vēksmā', -'namespaces' => 'Vardū srėtīs', -'variants' => 'Variantā', - -'errorpagetitle' => 'Klaida', -'returnto' => 'Grīžtė i $1.', -'tagline' => 'Straipsnis ėš {{SITENAME}}.', -'help' => 'Pagelba', -'search' => 'Ėiškuotė', -'searchbutton' => 'Ėiškuok', -'go' => 'Ēk', -'searcharticle' => 'Ēk', -'history' => 'Poslapė istuorėjė', -'history_short' => 'Istuorėjė', -'updatedmarker' => 'atnaujėnta nu paskotėnė mona apsėlonkīma', -'info_short' => 'Infuormacėjė', -'printableversion' => 'Versėjė spausdintė', -'permalink' => 'Nulatėnė nūruoda', -'print' => 'Spausdėntė', -'edit' => 'Taisītė', -'create' => 'Sokortė', -'editthispage' => 'Taisītė ton poslapė', -'create-this-page' => 'Sokortė ta poslapi', -'delete' => 'Trintė', -'deletethispage' => 'Trintė ton poslapė', -'protect' => 'Ožrakintė', -'protect_change' => 'pakeistė', -'protectthispage' => 'Ožrakintė šėta poslapi', -'unprotect' => 'Atrakintė', -'unprotectthispage' => 'Atrakintė šėta poslapi', -'newpage' => 'Naus poslapis', -'talkpage' => 'Aptartė šėta poslapi', -'talkpagelinktext' => 'Aptarėms', -'specialpage' => 'Specēlosis poslapis', -'personaltools' => 'Persuonalėnē rakondā', -'postcomment' => 'Rašītė kuomentara', -'articlepage' => 'Veizietė straipsnė', -'talk' => 'Aptarėms', -'views' => 'Parveizėtė', -'toolbox' => 'Rakondā', -'userpage' => 'Ruodītė nauduotoja poslapi', -'projectpage' => 'Ruodītė pruojekta poslapi', -'imagepage' => 'Veizietė abruozdielė poslapi', -'mediawikipage' => 'Ruodītė pranešėma poslapi', -'templatepage' => 'Ruodītė šabluona poslapi', -'viewhelppage' => 'Ruodītė pagelbuos poslapi', -'categorypage' => 'Ruodītė kateguorėjės poslapi', -'viewtalkpage' => 'Ruodītė aptarėma poslapi', -'otherlanguages' => 'Kėtuom kalbuom', -'redirectedfrom' => '(Nokreipta ėš $1)', -'redirectpagesub' => 'Nokreipėma poslapis', -'lastmodifiedat' => 'Šėts poslapis paskotini karta pakeists $1 $2.', -'viewcount' => 'Tas poslapis bova atverts $1 {{PLURAL:$1|čiesa|čiesus|čiesu}}.', -'protectedpage' => 'Ožrakints poslapis', -'jumpto' => 'Paršuoktė i:', -'jumptonavigation' => 'navėgacėjė', -'jumptosearch' => 'paėiška', - -# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). -'aboutsite' => 'Aple {{SITENAME}}', -'aboutpage' => 'Project:Aple', -'copyright' => 'Turinīs pateikts so $1 licencėjė.', -'copyrightpage' => '{{ns:project}}:Autuoriu teisės', -'currentevents' => '** Vielībė̅jė ivīkē **', -'currentevents-url' => 'Project:Vielībė̅jė ivīkē', -'disclaimers' => 'Atsakuomībės aprėbuojims', -'disclaimerpage' => 'Project:Atsakuomībės aprėbuojims', -'edithelp' => 'Kāp redagoutė', -'edithelppage' => 'Help:Redagavėms', -'helppage' => 'Help:Torėnīs', -'mainpage' => 'Pėrms poslapis', -'mainpage-description' => 'Pėrms poslapis', -'policy-url' => 'Project:Puolitėka', -'portal' => 'Kuolektīvs', -'portal-url' => 'Project:Kuolektīvs', -'privacy' => 'Privatoma puolitėka', -'privacypage' => 'Project:Privatoma puolitėka', - -'badaccess' => 'Privėlėju klaida', -'badaccess-group0' => 'Tomstā nelēdama ivīkdītė veiksma, katruo prašiet.', - -'ok' => 'Gerā', -'retrievedfrom' => 'Gautė ėš „$1“', -'youhavenewmessages' => 'Tamsta toret $1 ($2).', -'newmessageslink' => 'naujū žėnotiu', -'newmessagesdifflink' => 'paskotinis pakeitėms', -'youhavenewmessagesmulti' => 'Toret naujū žėnotiu $1', -'editsection' => 'taisītė', -'editold' => 'taisītė', -'viewsourceold' => 'veizietė šaltėni', -'editlink' => 'keistė', -'viewsourcelink' => 'veizietė kuoda', -'editsectionhint' => 'Redagoutė skirsneli: $1', -'toc' => 'Torėnīs', -'showtoc' => 'ruodītė', -'hidetoc' => 'kavuotė', -'thisisdeleted' => 'Veizėtė a atkortė $1?', -'viewdeleted' => 'Ruodītė $1?', -'restorelink' => '$1 {{PLURAL:$1|ėštrinta keitėma|ėštrintos keitėmos|ėštrintū keitėmu}}', -'feedlinks' => 'Šaltėnis:', -'site-rss-feed' => '$1 RSS šaltėnis', -'site-atom-feed' => '$1 Atom šaltėnis', -'page-rss-feed' => '„$1“ RSS šaltėnis', -'page-atom-feed' => '„$1“ Atom šaltėnis', -'red-link-title' => '$1 (poslapis da neparašīts)', - -# Short words for each namespace, by default used in the namespace tab in monobook -'nstab-main' => 'Poslapis', -'nstab-user' => 'Nauduotuojė poslapis', -'nstab-media' => 'Abruozdielė poslapis', -'nstab-special' => 'Specēlos poslapis', -'nstab-project' => 'Proujekta poslapis', -'nstab-image' => 'Fails', -'nstab-mediawiki' => 'Teksts', -'nstab-template' => 'Šabluons', -'nstab-help' => 'Pagelbuos poslapis', -'nstab-category' => 'Kateguorėjė', - -# Main script and global functions -'nosuchaction' => 'Nier tuokė veiksma', -'nosuchspecialpage' => 'Nier tuokė specēlėjė poslapė', -'nospecialpagetext' => 'Tamsta prašiet nelaistėna specēlė̅jė poslapė, laistėnū specēliūju poslapiu sōraša rasėt [[Special:SpecialPages|specēliūju poslapiu sārošė]].', - -# General errors -'error' => 'Klaida', -'databaseerror' => 'Doumenū bazės klaida', -'laggedslavemode' => 'Diemesė: Poslapī gal nesmatītė naujausiu pakeitėmu.', -'readonly' => 'Doumenū bazė ožrakėnta', -'enterlockreason' => 'Iveskėt ožrakėnėma prižasti, tēpuogi kumet daugmaž bus atrokėnta', -'readonlytext' => 'Doumenū bazė daba īr ožrakėnta naujėm irašam a kėtėm keitėmam, -mažo doumenū bazės techninē pruofilaktėkā, -puo tuo vėsks griš i sava viežes. -Ožrakėnusiuojo admėnėstratuoriaus pateikts rakėnima paaiškėnims: $1', -'missing-article' => 'Doumenū bazė nerada poslapė teksta, katra ana torietu rastė, pavadėnta „$1“ $2. - -Paprastā tas būn dielē pasenosės skėrtoma vuo istuorėjės nūruodas i poslapi, katros bova ėštrėnts. - -Jēgo tas nie šėts varėjants, Tamsta mažo raduot klaida pruogramėnė ironguo. -Prašuom aple šėtā paskelbtė [[Special:ListUsers/sysop|adminėstratoriō]], nepamėršdamė nuruodītė nūruoda.', -'missingarticle-rev' => '(versėjė#: $1)', -'missingarticle-diff' => '(Skėrt.: $1, $2)', -'readonly_lag' => 'Doumenū bazė bova autuomatėškā ožrakėnta, kuol pagelbinės doumenū bazės pasvīs pagrėndine', -'internalerror' => 'Vėdėnė klaida', -'internalerror_info' => 'Vėdėnė klaida: $1', -'filecopyerror' => 'Nepavīkst kopėjoutė faila ėš „$1“ i „$2“.', -'filerenameerror' => 'Nepavīkst parvardėntė faila ėš „$1“ i „$2“.', -'filenotfound' => 'Nepavīkst rastė faila „$1“.', -'fileexistserror' => 'Nepavīkst irašītė i faila „$1“: tas fails jau īr', -'unexpected' => 'Natėkieta raikšmie: „$1“=„$2“.', -'cannotdelete' => 'Nepavīka ėštrintė nuruodīta poslapė a faila. (Mažo kažkas padarė pėrmesnis šėta)', -'badtitle' => 'Bluogs pavadėnėms', -'badtitletext' => 'Nuruodīts poslapė pavadėnėms bova neleistėns, toščės a neteisėngā sojongts terpkalbinis a terppruojektėnis pavadėnėms. Anamė gal būtė vėins a daugiau sėmbuoliu, neleistėnū pavadėnėmūs', -'perfcachedts' => 'Ruodoma ėšsauguota doumenū kopėjė, katra bova atnaujėnta $1.', -'querypage-no-updates' => 'Atnaujėnėmā tam poslapiō nūnā ėšjongtė īr. Doumenīs nūnā čė nebus atnaujėntė.', -'wrong_wfQuery_params' => 'Netaisingė parametrā i funkcėjė wfQuery()
    -Funkcėjė: $1
    -Ožklausėms: $2', -'viewsource' => 'Veizėtė kuoda', -'viewsourcefor' => 'poslapiō $1', -'protectedpagetext' => 'Šėts poslapis īr ožrakints, saugont anū nū redagavėma.', -'viewsourcetext' => 'Tomsta galėt veizietė ėr kopėjoutė poslapė kuoda:', -'protectedinterface' => 'Šėtom poslapi īr pruogramėnės ironguos sasajuos teksts katros īr apsauguots, kū neprietelē anū nasogadėntu.', -'editinginterface' => "'''Diemesė:''' Tamsta keitat poslapi, katros īr nauduojams programėnės irongas sōsajės tekstė. Pakeitėmā tamė poslapū tēpuogi pakeis nauduotuojė sōsajės ėšruoda ė kėtėims nauduotujams. Jēgo nuorėt pargoldītė, siūluom pasėnauduotė [http://translatewiki.net/wiki/Main_Page?setlang=bat-smg „translatewiki.net“], „MediaWiki“ lokalėzacėjės pruojėktu.", -'sqlhidden' => '(SQL ožklausa pakavuota)', -'namespaceprotected' => "Tamsta netorėt teisiu keistė poslapiu '''$1''' srėtī.", -'ns-specialprotected' => 'Specēlė̅ jė poslapē negal būtė keitamė.', - -# Login and logout pages -'logouttext' => "'''Daba Tamsta esat atsėjongės.''' - -Galėt ė tuoliau nauduotė {{SITENAME}} anuonimėškā aba prisėjonkėt ėš naujė šėtuo patiu a kėto nauduotuojė vardu. -Pastebiejims: katruos nekatruos poslapiuos ė tuoliau gal ruodītė būktā būtomiet prisėjongės lėgė tuol, kumet ėšvalīsėt sava naršīklės dietovė (''cache'').", -'welcomecreation' => '== Svēkė, $1! == - -Tamstas paskīra bova sokorta. Neožmėrškėt pakeistė sava {{SITENAME}} nustatīmu.', -'yourname' => 'Nauduotuojė vards:', -'yourpassword' => 'Slaptažuodis:', -'yourpasswordagain' => 'Pakartuoket slaptažuodė:', -'remembermypassword' => 'Atmintė šėta infuormacėjė šėtom kuompioteri', -'yourdomainname' => 'Tamstas domens:', -'login' => 'Prisėjongtė', -'nav-login-createaccount' => 'Prėsėjongtė / sokortė paskīra', -'loginprompt' => 'Ijonkėt pakavukus, jēgo nuorėt prisėjongtė pri {{SITENAME}}.', -'userlogin' => 'Prėsėjongtė / sokortė paskīra', -'logout' => 'Atsėjongtė', -'userlogout' => 'Atsėjongtė', -'notloggedin' => 'Neprisėjongis', -'nologin' => "Netorėt prisėjongėma varda? '''$1'''.", -'nologinlink' => 'Sokorkėt paskīra', -'createaccount' => 'Sokortė paskīra', -'gotaccount' => "Jau torėt paskīra? '''$1'''.", -'gotaccountlink' => 'Prisėjonkėt', -'badretype' => 'Ivestė slaptažuodē nesotamp.', -'userexists' => 'Irašīts nauduotuojė vards jau īr nauduojams. -Prašuom pasėrėnktė kėtuoki varda.', -'loginerror' => 'Prisėjongėma klaida', -'nocookiesnew' => 'Nauduotuojė paskīra bova sokurta, ale Tamsta nēsot prisėjongis. {{SITENAME}} nauduo pakavukus, kū prijongtu nauduotuojus. Tamsta esot ėšjongis anūs. Prašuom ijongtė pakavukus, tumet prisėjonkėt so sava nauju nauduotuojė vardu ė slaptažuodiu.', -'nocookieslogin' => "Vikipedėjė nauduo pakavukus (''cookies''), kū prijongtu nauduotuojus. Tamsta esat ėšjongės anūs. Prašuom ijongtė pakavukus ė pamiegītė viel.", -'loginsuccesstitle' => 'Siekmingā prisėjongiet.', -'loginsuccess' => "'''Nūnā Tamsta esot prisėjongės pri {{SITENAME}} kāp „$1“.'''", -'nosuchuser' => 'Nier anėjuokė nauduotuojė pavadėnta „$1“. -Patikrėnkėt rašība, aba [[Special:UserLogin/signup|sokorkėt naujė paskīra]].', -'nosuchusershort' => 'Nier juokė nauduotuojė, pavadėnta „$1“. Patėkrinkėt rašība.', -'nouserspecified' => 'Tamstā rēk nuruodītė nauduotuojė varda.', -'wrongpassword' => 'Ivests neteisings slaptažuodis. Pameginket dā karta.', -'wrongpasswordempty' => 'Ivests slaptažuodis īr tošts. Pameginket vielėk.', -'passwordtooshort' => 'Tamstas slaptažuodis nier laistėns aba par tromps īr. Ans tor būtė nuors {{PLURAL:$1|1 sėmbuolė|$1 sėmbuoliu}} ėlgoma ė skėrtės nū Tamstas nauduotuojė varda.', -'mailmypassword' => 'Atsiōstė naujė slaptažuodi pašto', -'passwordremindertitle' => 'Laikėns {{SITENAME}} slaptažuodis', -'passwordremindertext' => 'Kažkastā (tėkriausē Tamsta, IP adreso $1) -paprašė, kū atsiōstomiet naujė slaptažuodi pruojektō {{SITENAME}} ($4). -Laikėns slaptažuodis nauduotuojō „$2“ bova sokorts ėr nustatīts kāp „$3“. -Jēgo Tamsta nuoriejot ana pakeistė tūmet torietomiet prisėjongtė ė daba pakeistė sava slaptažuodi. - -Jēgo kažkas kėts atlėka ta prašīma aba Tamsta prisėmėniet sava slaptažuodi ė -nebnuorėt ana pakeistė, Tamsta galėt tėisiuog nekreiptė diemiesė ė šėta gruomata ė tuoliau -nauduotis sava senu slaptažuodžiu.', -'noemail' => 'Nier anėjuokė el. pašta adresa ivesta nauduotuojō „$1“.', -'passwordsent' => 'Naus slaptažuodis bova nusiōsts i el. pašta adresa, -ožregėstrouta nauduotuojė „$1“. -Prašuom prisėjongtė vielē, kumet Tamsta gausėt anū.', -'blocked-mailpassword' => 'Tamstas IP adresos īr ožblokouts nū redagavėma, tudie neleidama nauduotė slaptažuodė priminėma funkcėjės, kū apsėsauguotomė nū pėktnaudžēvėma.', -'eauthentsent' => 'Patvėrtėnėma gruomata bova nusiōsta i paskėrta el. pašta adresa. -Prīš ėšsiontiant kėta gruomata i Tamstas diežote, Tamsta torėt vīkdītė nuruodīmus gruomatuo, kū patvėrtėntomiet, kū diežotė tėkrā īr Tamstas.', -'throttled-mailpassword' => 'Slaptažuodžė priminims jau bova ėšsiōsts, par paskotėnes $1 adīnas. Nuorint apsėsauguotė nū pėktnaudžēvėma, slaptažuodė priminims gal būt ėšsiōsts tėk kas $1 adīnas.', -'mailerror' => 'Klaida siontiant pašta: $1', -'acct_creation_throttle_hit' => 'Tamsta jau sokūriet $1 prisėjongėma varda. Daugiau nebgalėma.', -'emailauthenticated' => 'Tamstas el. pašta adresos bova ožtvirtėnts $1.', -'emailnotauthenticated' => 'Tamstas el. pašta adresos da nier patvėrtėnts. Anėjuokės gruomatas -nebus siontamas ni vėinam žemiau ėšvardėntam puoslaugiō.', -'noemailprefs' => 'Nuruodėkīt el. pašta adresa, kū vėiktu šėtos funkcėjės.', -'emailconfirmlink' => 'Patvėrtinkėt sava el. pašta adresa', -'accountcreated' => 'Nauduotuos sokorts', -'accountcreatedtext' => 'Nauduotuos $1 sokorts.', -'createaccount-title' => '{{SITENAME}} paskīruos kūrėms', -'loginlanguagelabel' => 'Kalba: $1', - -# Password reset dialog -'resetpass' => 'Keistė slaptažuodi', -'resetpass_header' => 'Keistė paskīruos slaptažuodi', -'oldpassword' => 'Sens slaptažuodis:', -'newpassword' => 'Naus slaptažuodis:', -'retypenew' => 'Pakartuokėt nauja slaptažuodi:', -'resetpass_submit' => 'Nostatītė slaptažuodi ė prėsėjongtė', -'resetpass_success' => 'Tamstas slaptažuodis pakeists siekmėngā! Daba prėsėjongiama...', -'resetpass-temp-password' => 'Laikėns slaptažuodis:', - -# Edit page toolbar -'bold_sample' => 'Pastuorints teksts', -'bold_tip' => 'Pastuorintė teksta', -'italic_sample' => 'Teksts kursīvu', -'italic_tip' => 'Teksts kursīvu', -'link_sample' => 'Nūruodas pavadinėms', -'link_tip' => 'Vėdinė nūruoda', -'extlink_sample' => 'http://www.example.com nūruodas pavadėnėms', -'extlink_tip' => 'Ėšuorėnė nūruoda (nepamėrškėt http:// priraša)', -'headline_sample' => 'Skīrė pavadėnėms', -'headline_tip' => 'Ontra līgė skīrė pavadėnėms', -'math_sample' => 'Iveskėt fuormolė', -'math_tip' => 'Matematinė fuormolė (LaTeX fuormato)', -'nowiki_sample' => 'Iterpkėt nefuormouta teksta čė', -'nowiki_tip' => 'Ėgnoroutė wiki fuormata', -'image_sample' => 'Pavīzdīs.jpg', -'image_tip' => 'Idietė abruozdieli', -'media_sample' => 'Pavīzdīs.ogg', -'media_tip' => 'Nūruoda i media faila', -'sig_tip' => 'Tomstas parašos ėr čiesos', -'hr_tip' => 'Guorizuontali linėjė (nenauduokėt ba reikala)', - -# Edit pages -'summary' => 'Kuomentars:', -'subject' => 'Tema/ontraštė:', -'minoredit' => 'Mažos pataisims', -'watchthis' => 'Keravuotė šėta poslapė', -'savearticle' => 'Ėšsauguotė poslapė', -'preview' => 'Parveiza', -'showpreview' => 'Ruodītė parveiza', -'showlivepreview' => 'Tėisiuogėnė parvaiza', -'showdiff' => 'Ruodītė skėrtomus', -'anoneditwarning' => "'''Diemesė:''' Tomsta nesat prisėjungės. Jūsa IP adresos būs irašīts i šiuo poslapė istuorėjė.", -'missingsummary' => "'''Priminėms:''' Tamsta nenuruodiet pakeitėma kuomentara. Jēgo viel paspausėt ''Ėšsauguotė'', Tamstas pakeitėms bus ėšsauguots ba anuo.", -'missingcommenttext' => 'Prašuom ivestė kuomentara.', -'summary-preview' => 'Kuomentara parvaiza:', -'subject-preview' => 'Skėrsnelė/ontraštės parvaiza:', -'blockedtitle' => 'Nauduotuos īr ožblokouts', -'blockedtext' => "'''Tamstas nauduotuojė vards a IP adresos īr ožblokouts.''' - -Ožbluokava $1. -Nuruodīta prižastis īr ''$2''. - -* Bluokavėma pradžia: $8 -* Bluokavėma pabenga: $6 -* Numatīts bluokoujamasės: $7 - -Tamsta galėt sosėsėiktė so $1 a kėtu -[[{{MediaWiki:Grouppage-sysop}}|adminėstratuoriom]], kū aptartė ožbluokavėma. -Tamsta negalėt nauduotės funkcėjė „Rašītė laiška tam nauduotuojō“, jēgo nesot pateikis tėkra sava el. pašta adresa sava [[Special:Preferences|paskīruos nustatīmūs]] ė nesot ožblokouts nu anuos nauduojėma. -Tamstas dabartėnis IP adresos īr $3, a bluokavėma ID īr #$5. Prašuom nuruodītė šėtā, kumet kreipiatės diel atbluokavėma.", -'autoblockedtext' => "Tamstas IP adresos bova autuomatėškā ožblokouts, kadongi ana nauduojė kėts nauduotuos, katra ožbluokava $1. -Nuruodīta prīžastis īr tuokė: - -:''$2'' - -* Bluokavėma pradžė: $8 -* Bluokavėma pabenga: $6 -* Numatuoms bluokavėma čiesos: $7 - -Tamsta galėt sosėsėiktė so $1 aba kėtu [[{{MediaWiki:Grouppage-sysop}}|adminėstratuoriom]], kū aprokoutomėt biedas diel bluokavėma. - -Tamsta negalėt nauduotės fonkcėjė „Rašītė gruomata tam nauduotuojō“, jēgo nesot nuruode tėkra el. pašta adresa sava [[Special:Preferences|nauduotuojė nustatīmūs]]. Tēpuogi Tamsta negalat nauduotės ta fonkcėjė, jēgo Tamstā ožblokouts anuos nauduojėms. - -Tamstas IP adresos īr $3, bluokavėma ID īr $5. -Prašuom nuruodītė šėtūs doumenis visūmet, kumet kreipiatės diel bluokavėma.", -'blockednoreason' => 'prīžastis nier nuruodīta', -'blockedoriginalsource' => "Žemiau īr ruodoms '''$1''' torėnīs:", -'blockededitsource' => "''Tamstas keitimu'' teksts poslapiui '''$1''' īr ruodoms žemiau:", -'whitelistedittitle' => 'Nuorėnt redagoutė rēk prisėjongtė', -'whitelistedittext' => 'Tamsta torėt $1, kū keistomėt poslapius.', -'nosuchsectiontitle' => 'Nier tuokė skīrė', -'loginreqlink' => 'prisėjongtė', -'accmailtitle' => 'Slaptažuodis ėšsiūsts īr.', -'accmailtext' => "Nauduotuojė '$1' slaptažuodis nusiūsts i $2 īr.", -'newarticle' => '(Naus)', -'newarticletext' => "Tamsta pakliovuot i nūnā neesoti poslapi. -Nuoriedamė sokortė poslapi, pradiekėt rašītė žemiau esontiamė ivedima pluotė -(platiau [[{{MediaWiki:Helppage}}|pagelbas poslapī]]). -Jēgo pakliovuot čė netīčiuom, paprastiausē paspauskėt naršīklės mīgtoka '''atgal'''.", -'anontalkpagetext' => "----''Tas īr anonimėnė nauduotuojė, katros nier sosėkūrės aba nenauduo paskīruos, aptarėmu poslapis. -Dielē tuo nauduojams IP adresos anuo atpažėnėmō. -Tas IP adresos gal būtė dalinams keletō nauduotuoju. -Jēgo Tamsta esat anonimėnis nauduotuos ėr veizėt, kū kuomentarā nier skėrtė Tamstā, [[Special:UserLogin/signup|sokorkėt paskīra]] aba [[Special:UserLogin|prisėjonkėt]], ė nebūsėt maišuoms so kėtās anonimėnēs nauduotuojās.''", -'noarticletext' => 'Tuo čiesu tamė poslapī nier juokė teksta. -Tamsta galėt [[Special:Search/{{PAGENAME}}|ėiškuotė šėta poslapė pavadėnėma]] kėtūs poslapiūs, -[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ėiškuotė sosėjosiu regėstru], -aba [{{fullurl:{{FULLPAGENAME}}|action=edit}} keistė ta poslapi].', -'userpage-userdoesnotexist' => 'Nauduotuojė paskīra „$1“ nier ožregėstrouta. Prašuom patikrėntė, a Tamsta nuorėt kortė/keistė ta poslapi.', -'clearyourcache' => "'''Diemesė:''' ėšsauguojus Tamstā gal prireiktė ėšvalītė Tamstas naršīklės rėnktovė, kū paveizėtomėt pakeitėmus. '''Mozilla / Safari / Konqueror:''' laikīdami ''Shift'' pasėrinkėt ''Atsiōstė ėš nauja'', a paspauskėt ''Ctrl-Shift-R'' (sėstemuo Apple Mac ''Cmd-Shift-R''); '''IE:''' laikīdamė ''Ctrl'' paspauskėt ''Atnaujėntė'', o paspauskėt ''Ctrl-F5''; '''Konqueror:''' paprastiausē paspauskėt ''Perkrautė'' mīgtoka, o paspauskėt ''F5''; '''Opera''' nauduotuojam gal prireiktė pėlnā ėšvalītė anū rėnktovė ''Rakondā→Nustatīmā''.", -'usercssyoucanpreview' => "'''Patarėms:''' Nauduokit „Ruodītė parvaiza“ mīgtoka, kū ėšmiegintomiet sava naujaji CSS priš ėšsaugont.", -'userjsyoucanpreview' => "'''Patarėms:''' Nauduokit „Ruodītė parvaiza“ mīgtoka, kū ėšmiegintomiet sava naujaji JS priš ėšsaugont.", -'usercsspreview' => "'''Napamirškėt, kū Tamsta tėk parveizėt sava nauduotoja CSS, ans da nabova ėšsauguots!'''", -'userjspreview' => "'''Nepamirškėt, kū Tamsta tėk testoujat/parvaizėt sava nauduotoja ''JavaScript'', ans da nabova ėšsauguots!'''", -'userinvalidcssjstitle' => "'''Diemesė:''' Nė juokės ėšruodos „$1“. Napamirškėt, kū sava .css ėr .js poslapē nauduo pavadėnėma mažuosiomės raidiemis, pvz., Nauduotuos:Foo/monobook.css, o ne Nauduotuos:Foo/Monobook.css.", -'updated' => '(Atnaujėnta)', -'note' => "'''Pastebiejims:'''", -'previewnote' => "'''Nepamėrškėt, kū tas tėktās pervaiza, pakeitėmā da nier ėšsauguotė!'''", -'previewconflict' => 'Šėta parvaiza paruod teksta ėš vėršotinėjė teksta redagavėma lauka tēp, kāp ans bus ruodoms, jei pasirinksėt anū ėšsauguotė.', -'session_fail_preview' => "'''Atsiprašuom! Mes nagalėm vīkdītė Tamstas keitėma diel sesėjės doumenū praradima. -Prašuom pamiegintė vielēk. Jei šėtā napaded, pamieginkėt atsėjongtė ėr prėsėjongtė atgal.'''", -'session_fail_preview_html' => "'''Atsėprašuom! Mes nagalėm apdoroutė Tamstas keitėma diel sesėjės doumenū praradėma.''' -''Kadaogi šėtom pruojekte grīnasės HTML īr ijongts, parveiza īr pasliepta kāp atsargoma prėimonė priš JavaScript atakas.'' -'''Jei tā teisiets keitėma bandīms, prašuom pamiegint viel. Jei šėtā napaded, pamieginkėt atsėjongtė ėr prėsėjongtė atgal.'''", -'editing' => 'Taisuoms straipsnis - $1', -'editingsection' => 'Taisuoms $1 (skėrsnelis)', -'editingcomment' => 'Taisuoms $1 (naus skīrius)', -'editconflict' => 'Ėšpreskėt kuonflėkta: $1', -'explainconflict' => "Kažėn kas kėts jau pakeitė poslapi nū tuo čiesa, kumet Tamsta pradiejuot ana redagoutė. -Vėršotėniamė tekstėniamė laukė pateikta šėtu čiesu esontė poslapė versėjė. -Tamstas pakeitėmā pateiktė žemiau esontiamė laukė. -Tamstā rēk sojongtė Tamstas pakeitėmus so esontė versėjė. -Kumet paspausėte „Irašītė“, bus irašīts '''tėktās''' teksts vėršotėniam tekstėniam laukė.", -'yourtext' => 'Tamstas teksts', -'storedversion' => 'Ėšsauguota versėjė', -'editingold' => "'''ISPIEJIMS: Tamsta keitat ne naujausė poslapė versėjė. -Jēgo ėšsauguosėt sava pakeitėmus, paskum darītė pakeitėmā prapols.'''", -'yourdiff' => 'Skėrtomā', -'copyrightwarning' => "Primenam, kū vėsks, kas patenk i {{SITENAME}}, īr laikuoma pavėišėnto palē $2 (platiau - $1). Jēgo nenuorit, kū Tamstas duovis būtou ba pasėgailiejėma keitams ė platėnams, nerašīkėt čė.
    -Tamsta tēpuogi pasėžadat, kū tas īr Tamstas patėis rašīts torėnīs a kuopėjouts ėš vėišū a panašiū valnū šaltėniu. -'''NEKOPĖJOUKĖT AUTUORĖNIEM TEISIEM APSAUGUOTU DARBŪ BA LEIDĖMA!'''", -'copyrightwarning2' => "Primenam, kū vėsks, kas patenk i {{SITENAME}} gal būtė keitama, perdaruoma, a pašalėnama kėtū nauduotuoju. Jēgo nenuorėt, kū Tamstas duovis būtu ba pasėgailiejėma keitams, čiuonās nerašīkėt.
    -Tēpuogi Tamsta pasėžadat, kū tas īr Tamstas rašīts teksts aba kuopėjouts -ėš vėišū liousū šaltėniu (detaliau - $1). -'''NEKUOPĖJOUKAT AUTUORĖNIEM TEISIEM APSAUGUOTU DARBŪ BA LEIDĖMA!'''", -'longpagewarning' => "'''DIEMESĖ: Tas poslapis īr $1 kilobaitu ėlgoma; katruos nekatruos -naršīklės gal torietė biedū redagounant poslapius bavēk a vėrš 32 kB. -Prašuom pamiegītė poslapi padalėntė i keleta smolkesniū daliū.'''", -'readonlywarning' => "'''DIEMESĖ: Doumenū bazė bova ožrakėnta teknėnē pruofilaktėkā, -tudie negaliesėt ėšsauguotė sava pakeitėmu daba. Tamsta galėt nosėkopėjoutė teksta i tekstėni faila -ė paskum ikeltė ana čė.'''", -'protectedpagewarning' => "'''DIEMESĖ: Šėts poslapis īr ožrakints ėr anū redagoutė gal tėk admėnėstratuorė teises torėntīs prietelē.'''", -'semiprotectedpagewarning' => "'''Pastebiejėms:''' Šėts poslapis bova ožrakėnts ėr anuo gal redagoutė tėk regėstroutė nauduotojā.", -'titleprotectedwarning' => "'''DIEMESĖ: Tas poslapis bova ožrakėnts tēp, ka tėktās kāpkatrė nauduotuojē galietu ana sokortė.'''", -'templatesused' => '{{PLURAL:$1|Šabluons|Šabluonā}}, katrėi īr nauduojamė poslapī:', -'templatesusedpreview' => '{{PLURAL:$1|Šabluons|Šabluonā}}, nauduotė šėtuo parvaizuo:', -'templatesusedsection' => 'Šabluonā, nauduotė šėtom skėrsnelī:', -'template-protected' => '(apsauguots)', -'template-semiprotected' => '(posiau apsauguots)', -'hiddencategories' => 'Tas poslapis prėklausa $1 {{PLURAL:$1|pakavuotā kateguorėjē|pakavuotoms kateguorėjėms|pakavuotu kateguorėju}}:', -'nocreatetitle' => 'Poslapiu kūrims aprėbuots', -'nocreatetext' => '{{SITENAME}} aprėbuojė galėmībe kortė naujus poslapius. -Tamsta galėt grīžtė ė redagoutė nūnā esonti poslapi, a [[Special:UserLogin|prėsėjongtė a sokortė paskīra]].', -'permissionserrors' => 'Teisiu klaida', -'permissionserrorstext' => 'Tamsta netorėt teisiu šėta darītė diel {{PLURAL:$1|tuos prīžastėis|tū prīžastiū}}:', -'permissionserrorstext-withaction' => 'Tamsta netorėt leidėma $2 dielē {{PLURAL:$1|tos prīžastėis|tū prīžastiu}}:', -'recreate-moveddeleted-warn' => "'''Diemesė: Tomsta atkoriat poslapi, katros onkstiau bova ėštrints.''' - -Tomsta torėt nosprēst, a pritėnk tuoliau redagoutė šėta poslapi. -Šėta poslapė šalėnėmu istuorėjė īr pateikta patuogoma vardan:", -'moveddeleted-notice' => 'Tas poslapis bova ėštrėnts. -Ėštrėnta poslapė versėju sārašos īr pateikts paveiziejėmō žemiau.', -'edit-conflict' => 'Redagavėma kuonflėktos', - -# "Undo" feature -'undo-success' => 'Keitėms gal būtė atšaukts. Prašuom patėkrėntė palīgėnėma, asonti žemiau, kū patvėrtėntomiet, kū Tamsta šėta ė nuorėt padarītė, ė tumet ėšsauguokit pakeitėmos, asontios žemiau, kū ožbėngtomiet keitėma atšaukėma.', -'undo-failure' => 'Keitėms nagal būt atšaukts diel konflėktounantiu tarpėniu pakeitėmu.', -'undo-summary' => 'Atšauktė [[Special:Contributions/$2|$2]] ([[User talk:$2|Aptarėms]]) versėje $1', - -# Account creation failure -'cantcreateaccount-text' => "Paskīrū kūrėma ėš šėta IP adresa ('''$1''') ožbluokava [[User:$3|$3]]. - -$3 nuruodīta prīžastis īr ''$2''", - -# History pages -'viewpagelogs' => 'Ruodītė šėtuo poslapė specēliōsios vaiksmos', -'nohistory' => 'Šėts poslapis netor keitėmu istuorėjės.', -'currentrev' => 'Dabartėnė versėjė', -'currentrev-asof' => 'Dabartėnė $1 versėjė', -'revisionasof' => '$1 versėjė', -'revision-info' => '$1 versėjė nauduotuojė $2', -'previousrevision' => '←Onkstesnė versėjė', -'nextrevision' => 'Paskesnė versėjė→', -'currentrevisionlink' => 'Dabartėnė versėjė', -'cur' => 'dab', -'next' => 'kėts', -'last' => 'pask', -'page_first' => 'pėrm', -'page_last' => 'pask', -'histlegend' => "Skėrtomā terp versėju: pažīmiekit līginamas versėjės ė spauskėt ''Enter'' klavėša a mīgtuka apatiuo.
    -Žīmiejimā: (dab) = palīginims so vielibiausė versėjė, -(pask) = palīginims so priš ta bovosia versėjė, S = mažos pataisims.", -'history-fieldset-title' => 'Naršītė istuorėjuo', -'histfirst' => 'Seniausė', -'histlast' => 'Vielibė̅jė', -'historysize' => '($1 {{PLURAL:$1|baits|baitā|baitu}})', -'historyempty' => '(nieka nier)', - -# Revision feed -'history-feed-title' => 'Versėju istuorėjė', -'history-feed-item-nocomment' => '$1 $2', -'history-feed-empty' => 'Prašuoms poslapis nēgzėstuo. -Ans galiejė būtė ėštrėnts ėš pruojekta, aba parvardėnts. -Pamiegīkėt [[Special:Search|ėiškoutė pruojektė]] sosėjosiu naujū poslapiu.', - -# Revision deletion -'rev-delundel' => 'ruodītė/kavuotė', -'revisiondelete' => 'Trintė/atkortė versėjės', -'logdelete-selected' => "{{PLURAL:$2|Pasėrinkts|Pasėrinktė|Pasėrinktė}} '''$1''' istuorėjės {{PLURAL:$2|atėtėkims|atsėtėkimā|atsėtėkimā}}:", -'revdelete-text' => "'''Ėštrintuos versėjės ėr ivīkē vistėik da bus ruodomė poslapė istuorėjuo ėr specēliūju veiksmū istuorėjuo, no anū torėnė dalīs nabus vėišā pasėikiamos.''' -Kėtė admėnėstratuorē šėtom pruojekte vėsdar galės pasėiktė pasliepta torėni ėr galės ana atkortė viel par šėta pate sasaja, nabent īr nostatītė papėlduomė aprėbuojėmā.", -'revdelete-unsuppress' => 'Šalėntė apribuojėmos atkortuos versėjės', -'logdelete-logentry' => 'pakeists [[$1]] atsėtėkima veiziemoms', -'revdel-restore' => 'Keistė veizėmuma', -'revdelete-edit-reasonlist' => 'Keistė trīnėma prīžastis', - -# Suppression log -'suppressionlog' => 'Trīnėma istuorėjė', - -# History merging -'mergehistory-success' => '$3 [[:$1]] versėju siekmėngā sojongta so [[:$2]].', - -# Merge log -'revertmerge' => 'Atskėrtė', - -# Diffs -'history-title' => 'Poslapė „$1“ istuorėjė', -'difference' => '(Skėrtomā terp versėju)', -'lineno' => 'Eilotė $1:', -'compareselectedversions' => 'Palīgintė pasėrinktas versėjės', -'editundo' => 'atšauktė', -'diff-multi' => '($1 {{PLURAL:$1|tarpėnis keitėms nier ruoduoms|tarpėnē keitėmā nier ruoduomė|tarpėniu keitėmu nier ruoduoma}}.)', - -# Search results -'searchresults' => 'Paėiškuos rezoltatā', -'searchresults-title' => 'Paėiškuos rezoltatā "$1"', -'searchresulttext' => 'Daugiau infuormacėjės aple paėiška pruojektė {{SITENAME}} rasėt [[{{MediaWiki:Helppage}}|{{int:help}}]].', -'searchsubtitle' => 'Tamsta ėiškuojot \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|vėsė poslapē katrėi prasėded so "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|vėsė poslapē katrėi ruod i "$1"]])', -'searchsubtitleinvalid' => 'Jėškuom „$1“', -'titlematches' => 'Straipsniu pavadėnėmu atitėkmenīs', -'notitlematches' => 'Juokiū pavadinėma atitikmenū', -'textmatches' => 'Poslapė torėnė atėtikmenīs', -'notextmatches' => 'Juokiū poslapė teksta atitikmenū', -'prevn' => 'onkstesnius {{PLURAL:$1|$1}}', -'nextn' => 'paskesnius {{PLURAL:$1|$1}}', -'viewprevnext' => 'Veizėtė ($1 {{int:pipe-separator}} $2) ($3).', -'searchmenu-legend' => 'Paėiškuos nustatīmā', -'searchmenu-exists' => "'''Poslapis pavadėnts „[[$1]]“ šėtuo wiki'''", -'searchmenu-new' => "'''Sokortė poslapi „[[:$1]]“ šėtuo wiki!'''", -'searchhelp-url' => 'Help:Torėnīs', -'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Ėiškuotė poslapiu so šėtuom prīšdielio]]', -'searchprofile-articles' => 'Torėnė poslapē', -'searchprofile-project' => 'Pruojėkta poslapē', -'searchprofile-images' => 'Failā', -'searchprofile-everything' => 'Vėsks', -'searchprofile-advanced' => 'Prapliesta', -'searchprofile-articles-tooltip' => 'Ėiškuotė čiuonās: $1', -'searchprofile-project-tooltip' => 'Ėiškuotė čiuonās: $1', -'searchprofile-images-tooltip' => 'Ėiškuotė failu', -'searchprofile-everything-tooltip' => 'Ėiškuotė vėsuo torėnė (tuom patėm ėr aptarėma poslapiu)', -'search-result-size' => '$1 ({{PLURAL:$2|1 žuodis|$2 žuodē|$2 žuodiu}})', -'search-result-score' => 'Tėnkamoms: $1%', -'search-redirect' => '(paradresavėms $1)', -'search-section' => '(skīrios $1)', -'search-suggest' => 'Mažo nuoriejot $1', -'search-interwiki-caption' => 'Dokterėnē pruojektā', -'search-interwiki-default' => '$1 rezoltatā:', -'search-interwiki-more' => '(daugiau)', -'search-mwsuggest-enabled' => 'so pasiūlīmās', -'search-mwsuggest-disabled' => 'nie pasiūlīmu', -'search-relatedarticle' => 'Sosėjėn', -'mwsuggest-disable' => 'Kavuotė AJAX pasiūlīmus', -'searchrelated' => 'sosėjėn', -'searchall' => 'vėsė', -'showingresults' => "Žemiau ruodoma lėgė '''$1''' {{PLURAL:$1|rezoltata|rezoltatu|rezoltatu}} pradedont #'''$2'''.", -'showingresultsnum' => "Žemiau ruodoma '''$3''' {{PLURAL:$3|rezoltata|rezoltatu|rezoltatu}} pradedant #'''$2'''.", -'nonefound' => "'''Pastebiejėms''': Palē nutīliejėma ėiškuoma tėktās kāp katruosė vardū srėtīsė. Pamiegīkėt prirašītė prėišdieli ''all:'', jēgo nuorėt ėiškiuotė vėsa torėnė (tamė tarpė aptarėma poslapius, šabluonus ė tēp tuoliau), aba nauduokėt nuorėma vardū srėti kāp prėišdieli.", -'search-nonefound' => 'Nier rezoltatu, katrėi atitėktu ožklausėma.', -'powersearch' => 'Ėiškuotė', -'powersearch-legend' => 'Prapliesta paėiška', -'powersearch-ns' => 'Ėiškoutė vardū srėtīsė:', -'powersearch-redir' => 'Itrauktė paradresavėmus', -'powersearch-field' => 'Ėiškoutė', -'search-external' => 'Ėšuorėnė paėiška', - -# Quickbar -'qbsettings' => 'Greitasā pasėrėnkėms', -'qbsettings-none' => 'Neruodītė', - -# Preferences page -'preferences' => 'Nustatīmā', -'mypreferences' => 'Mona nustatīmā', -'prefs-edits' => 'Keitėmu skaitlius:', -'prefsnologin' => 'Naprisėjongis', -'prefsnologintext' => 'Tamstā rēk būtė [{{fullurl:{{#Special:UserLogin}}|returnto=$1}} prisėjongosam], kū galietomiet keistė sava nustatīmus.', -'changepassword' => 'Pakeistė slaptažuodė', -'prefs-skin' => 'Ėšruoda', -'skin-preview' => 'Parveiza', -'prefs-math' => 'Matematėka', -'datedefault' => 'Juokė pasėrėnkėma', -'prefs-datetime' => 'Data ė čiesos', -'prefs-personal' => 'Nauduotuojė pruopilis', -'prefs-rc' => 'Vielībė̅jė pakeitėmā', -'prefs-watchlist' => 'Keravuojamu sārašos', -'prefs-watchlist-days' => 'Kėik dėinū ruodītė keravuojamu sārašė:', -'prefs-watchlist-days-max' => '(daugiausē 7 dėinas)', -'prefs-watchlist-edits' => 'Kėik pakeitėmu ruodītė ėšpliestiniam keravuojamu sārašė:', -'prefs-watchlist-edits-max' => '(dėdliausias skaitlius: 1000)', -'prefs-misc' => 'Ivairė nustatīmā', -'prefs-resetpass' => 'Keistė slaptažuodi', -'saveprefs' => 'Ėšsauguotė', -'resetprefs' => 'Atstatītė nostatīmos', -'restoreprefs' => 'Atstatītė vėsus numatītūsius nustatīmus', -'prefs-editing' => 'Redagavėms', -'prefs-edit-boxsize' => 'Redagavėma longa dėdoms.', -'rows' => 'Eilotės:', -'columns' => 'Štolpalē:', -'searchresultshead' => 'Paėiškuos nostatīmā', -'resultsperpage' => 'Rezoltatu poslapie:', -'contextlines' => 'Eilotiu rezoltatė:', -'contextchars' => 'Konteksta sėmbuoliu eilotie:', -'stub-threshold' => 'Minimums nabėngta poslapė fuormatavėmō:', -'recentchangesdays' => 'Ruodomas dėinas vielībūju pakeitėmu sārašė:', -'recentchangesdays-max' => '(daugiausē $1 {{PLURAL:$1|dėina|dėinū|dėinas}})', -'recentchangescount' => 'Numatītasā keitėmu skaitlius, ruodoms vielībūju keitėmu, poslapiu istuorėjėsė ė notėkėmu sarašūsė:', -'savedprefs' => 'Nostatīmā siekmėngā ėšsauguotė.', -'timezonelegend' => 'Čiesa zuona', -'localtime' => 'Vėitinis čiesos:', -'timezoneuseserverdefault' => 'Nauduotė palē nutīliejėma ėš serverė', -'timezoneuseoffset' => 'Kėta (patikslėntė skėrtoma)', -'timezoneoffset' => 'Skėrtoms¹:', -'servertime' => 'Serverė čiesos:', -'guesstimezone' => 'Paimtė ėš naršīklės', -'timezoneregion-africa' => 'Afrėka', -'timezoneregion-america' => 'Amerėka', -'timezoneregion-antarctica' => 'Antarktėda', -'timezoneregion-asia' => 'Azėjė', -'timezoneregion-atlantic' => 'Atlanta ondenīns', -'timezoneregion-australia' => 'Australėjė', -'timezoneregion-europe' => 'Euruopa', -'timezoneregion-indian' => 'Indėjės ondenīns', -'timezoneregion-pacific' => 'Ramosis ondenīns', -'allowemail' => 'Lēstė siūstė el. gramuotelės ėš kėtū nauduotuoju', -'prefs-searchoptions' => 'Paėiškuos nustatīmā', -'prefs-namespaces' => 'Vardū srėtīs', -'defaultns' => 'Palē nutīliejėma ėiškuotė šėtuosė vardū srėtīsė:', -'default' => 'palē nūtīliejėma', -'prefs-files' => 'Failā', -'youremail' => 'El. pašts:', -'username' => 'Nauduotuojė vards:', -'uid' => 'Nauduotuojė ID:', -'prefs-memberingroups' => '{{PLURAL:$1|Gropės|Gropiu}} narīs:', -'yourrealname' => 'Tėkros vards:', -'yourlanguage' => 'Aplėnkuos kalba:', -'yourvariant' => 'Variants', -'yournick' => 'Pasėrinkts slapīvardis:', -'badsig' => 'Neteisings parašas; patėkrinkėt HTML žīmės.', -'badsiglength' => 'Tamstas parašos īr par ėlgs. -Ana gal sodarītė ne daugiau kāp $1 {{PLURAL:$1|sėmbuolis|sėmbuolē|sėmbuoliu}}.', -'yourgender' => 'Lītis:', -'gender-unknown' => 'Nier nuruodīta', -'gender-male' => 'Vīrs', -'gender-female' => 'Muoterėška', -'email' => 'El. pašts', -'prefs-help-realname' => 'Tėkrs vards nier privaluoms, vuo jēgo Tamsta ana ivesėt, ons bus nauduojams Tamstas darba pažīmiejėmō.', -'prefs-help-email' => 'El. pašta adresos nier privaloms, ale uns leid Tamstā gautė nauja slaptažuodi, jēgo pamėršuot kuoks uns bova, ė tēpuogi Tamsta galėt leistė kėtėims pasėiktė Tamsta par Tamstas nauduotuojė a nauduotuojė aptarėma poslapi neatsklėidont Tamstas tapatoma.', - -# User rights -'userrights' => 'Nauduotuoju teisiu valdīms', -'userrights-lookup-user' => 'Tvarkītė nauduotuojė gropės', -'userrights-user-editname' => 'Iveskėt nauduotuojė varda:', -'editusergroup' => 'Redagoutė nauduotuojė gropes', -'editinguser' => "Taisuoms nauduotuos '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])", -'userrights-editusergroup' => 'Keistė nauduotuoju gropes', -'saveusergroups' => 'Sauguotė nauduotuoju gropes', -'userrights-groupsmember' => 'Narīs:', -'userrights-reason' => 'Prīžastis:', - -# Groups -'group' => 'Gropė:', -'group-user' => 'Nauduotuojē', -'group-autoconfirmed' => 'Autuomatėškā patvirtėntė nauduotuojē', -'group-bot' => 'Buotā', -'group-sysop' => 'Adminėstratuorē', -'group-bureaucrat' => 'Biorokratā', -'group-all' => '(vėsė)', - -'group-user-member' => 'Nauduotuos', -'group-bot-member' => 'Buots', -'group-sysop-member' => 'Adminėstratuorius', -'group-bureaucrat-member' => 'Biorokrats', - -'grouppage-user' => '{{ns:project}}:Nauduotuojē', -'grouppage-autoconfirmed' => '{{ns:project}}:Automatėškā patvėrtintė nauduotuojē', -'grouppage-bot' => '{{ns:project}}:Robuotā', -'grouppage-sysop' => '{{ns:project}}:Adminėstratuorē', -'grouppage-bureaucrat' => '{{ns:project}}:Biorokratā', - -# Rights -'right-read' => 'Skaitītė poslapius', -'right-edit' => 'Keistė poslapius', - -# User rights log -'rightslog' => 'Nauduotuoju teisiu istuorėjė', -'rightslogtext' => 'Pateikiams nauduotuoju teisiu pakeitėmu sārašos.', -'rightslogentry' => 'pakeista $1 gropės narīstė ėš $2 i $3. Sveikėnam!', -'rightsnone' => '(juokiū)', - -# Associated actions - in the sentence "You do not have permission to X" -'action-edit' => 'redagoutė ta poslapi', -'action-undelete' => 'atkortė ta poslapi', -'action-patrol' => 'pažīmietė kėtū keitėmus kāp patikrėntus', -'action-userrights' => 'keistė vėsū nauduotuoju teises', - -# Recent changes -'nchanges' => '$1 {{PLURAL:$1|pakeitėms|pakeitėmā|pakeitėmu}}', -'recentchanges' => 'Vielībė̅jė pakeitėmā', -'recentchanges-legend' => 'Vielībuju pakeitėmu pasėrinkėmā', -'recentchangestext' => 'Tamė poslapī īr patīs vielībė̅ jė paketėmā tom pruojėktė.', -'recentchanges-feed-description' => 'Keravuokėt patius vielībiausius pakeitėmus pruojektō tamė šaltėnī.', -'rcnote' => "Žemiau īr '''$1''' {{PLURAL:$1|paskotinis pakeitims|paskotinē pakeitimā|paskotiniu pakeitimu}} par $2 {{PLURAL:$2|paskotinė̅jė dėina|paskotėniasės '''$2''' dėinas|paskotėniuju '''$2''' dėinū}} skaitlioujant nū $4, $5.", -'rcnotefrom' => 'Žemiau īr pakeitėma pradedant nū $2 (ruodom lėgė $1 pakeitėmu).', -'rclistfrom' => 'Ruodītė naujus pakeitėmus pradedant nū $1', -'rcshowhideminor' => '$1 mažus pakeitėmus', -'rcshowhidebots' => '$1 robuotus', -'rcshowhideliu' => '$1 prėsėjongusiūm nauduotuojūm pakeitėmus', -'rcshowhideanons' => '$1 anuonimėnius nauduotuojus', -'rcshowhidepatr' => '$1 patikrėntus pakeitėmus', -'rcshowhidemine' => '$1 mona pakeitėmus', -'rclinks' => 'Ruodītė paskotėnius $1 pakeitėmu par paskotėnė̅sēs $2 dėinū
    $3', -'diff' => 'skėrt', -'hist' => 'ist', -'hide' => 'Kavuotė', -'show' => 'Ruodītė', -'minoreditletter' => 'm', -'newpageletter' => 'N', -'boteditletter' => 'r', -'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|keravuojontis nauduotuos|keravuojontīs nauduotuojē|keravuojontiu nauduotuoju}}]', -'rc_categories' => 'Ruodītė tėk šėtas kateguorėjės (atskirkit nauduodamė „|“)', -'rc_categories_any' => 'Bikuokė', -'newsectionsummary' => '/* $1 */ naus skėrsnelis', -'rc-enhanced-expand' => 'Ruodītė detales (rēk JavaScript)', -'rc-enhanced-hide' => 'Kavuotė detales', - -# Recent changes linked -'recentchangeslinked' => 'Sosėjėn pakeitėmā', -'recentchangeslinked-feed' => 'Sosėjėn pakeitėmā', -'recentchangeslinked-toolbox' => 'Sosėjėn pakeitėmā', -'recentchangeslinked-title' => 'So $1 sosėje pakeitimā', -'recentchangeslinked-noresult' => 'Nier juokiū pakeitėmu sosėitous poslapious douto čieso.', -'recentchangeslinked-summary' => "Šėtom specēliajam poslapi ruodomė vielībė̅jė pakeitėmā poslapiūs, i katrūs īr nuruodoma. Poslapē ėš Tamstas [[Special:Watchlist|keravuojamu sāraša]] īr '''pastuorėntė'''.", -'recentchangeslinked-page' => 'Poslapė pavadinėms:', -'recentchangeslinked-to' => 'Ruodītė so doutu poslapiu sosėjosiu puslapiu pakeitėmus', - -# Upload -'upload' => 'Ikeltė faila', -'uploadbtn' => 'Ikeltė faila', -'reuploaddesc' => 'Sogrīžtė i ikielima fuorma.', -'uploadnologin' => 'Naprėsėjongis', -'uploadnologintext' => 'Nuoriedamė ikeltė faila, torėt būt [[Special:UserLogin|prėsėjongis]].', -'upload_directory_read_only' => 'Tėnklapė serveris nagal rašītė i ikielima papke ($1).', -'uploaderror' => 'Ikielima soklīdims', -'uploadtext' => "Nauduokėtės žemiau pateikta skvarma kū ikeltomėt failus. -Nuoriedamė parveizietė ar ėiškuotė unkstiau ikeltū abruozdieliu, ēkėt i [[Special:FileList|ikeltū failu saraša]], ikielėmā ėr ėštrīnėmā īr ožregėstroujamė [[Special:Log/upload|ikielėmu istuorėjuo]], trīnėmā - [[Special:Log/delete|trīnėmu istuorėjuo]]. - -Nuoriedamė panauduotė ikelta faila poslapī, nauduokėt tuokės nūoruodas: -* '''[[{{ns:file}}:File.jpg]]''' -* '''[[{{ns:file}}:File.png|200px|thumb|left|alt text]]''' aba -* '''[[{{ns:media}}:File.ogg]]''' tėisiuogėnē nūruodā i faila.", -'upload-permitted' => 'Laistėnė failu tėpā: $1.', -'upload-preferred' => 'Pageidajamė failu tėpā: $1.', -'upload-prohibited' => 'Oždraustė failu tėpā: $1.', -'uploadlog' => 'ikielimu istuorėjė', -'uploadlogpage' => 'Ikielimu istuorėjė', -'uploadlogpagetext' => 'Žemiau pateikiam paskotėniu failu ikielima istuorėjė.', -'filename' => 'Faila vards', -'filedesc' => 'Kuomentars', -'fileuploadsummary' => 'Kuomentars:', -'uploadedfiles' => 'Ikeltė failā', -'ignorewarning' => 'Nekrėiptė diemiesė i parspiejėma ėr ėšauguotė faila vėsvėin.', -'ignorewarnings' => 'Nekrėiptė diemesė i vėsuokius perspiejimos', -'minlength1' => 'Faila pavadinėms tor būtė nuors vėina raidie.', -'illegalfilename' => 'Faila vardė „$1“ īr sėmbuoliu, katrėi nier leidami poslapė pavadinėmūs. Prašuom parvadėntė faila ė miegītė ikeltė ana par naujė.', -'badfilename' => 'Faila pavadinėms pakeists i „$1“.', -'filetype-missing' => 'Fails netor galūnės (kāp pavīzdīs „.jpg“).', -'emptyfile' => 'Panašu, ka fails, katra ikieliet īr toščias. Tas gal būtė diel klaiduos faila pavadėnėmė. Pasėtėkrinkėt a tėkrā nuorėt ikeltė šėta faila.', -'fileexists' => "Fails so tuokiu vardu jau īr, prašuom paveizėtė '''[[:$1]]''', jēgo nesat ožtėkrėnts, a nuorit ana parrašītė. -[[$1|thumb]]", -'fileexists-extension' => "Fails so pavėdiu pavadinėmu jau īr: [[$2|thumb]] -* Ikeliama faila pavadinėms: '''[[:$1]]''' -* Jau esontė faila pavadinėms: '''[[:$2]]''' -Prašuom ėšsėrėnktė kėta varda.", -'file-exists-duplicate' => 'Tas fails īr {{PLURAL:$1|šėta faila|šėtū failu}} doblėkats:', -'successfulupload' => 'Ikelt siekmėngā', -'uploadwarning' => 'Diemesė', -'savefile' => 'Ėšsauguotė faila', -'uploadedimage' => 'ikielė „[[$1]]“', -'overwroteimage' => 'ikruovė nauja „[[$1]]“ versėjė', -'uploaddisabledtext' => 'Failu ikielėmā oždraustė īr.', -'uploadscripted' => 'Šėts failos tor HTML a programėni kuoda, katros gal būtė klaidėngā soprasts interneta naršīklės.', -'uploadvirus' => 'Šėtom faile īr virosas! Ėšsamiau: $1', -'sourcefilename' => 'Ikeliams fails', -'destfilename' => 'Nuorims faila pavadinims', -'upload-maxfilesize' => 'Dėdliausias faila dėdoms: $1', -'watchthisupload' => 'Keravuotė šėta poslapė', -'upload-wasdeleted' => "'''Parspiejėms: Tamsta ikeliat faila, katros unkstiau bova ėštrėnts.''' - -Tamsta torietomiet nusprēstė, a īr naudėnga tuoliau ikeldinietė ta faila. -Tuo faila pašalinėma istuorėjė īr pateikta dielē patuogoma:", - -'upload-proto-error' => 'Nateisėngs protuokols', -'upload-proto-error-text' => 'Nutuolinē ikielims raikalaun, kū URL prasėdietu http:// o ftp://.', -'upload-file-error' => 'Vėdėnė klaida', -'upload-file-error-text' => 'Ivīka vėdėnė klaida bandont sokortė laikinaji faila serverī. Prašuom sosėsėiktė so sistemuos admėnėstratuoriom.', -'upload-misc-error' => 'Nažėnuoma ikielėma klaida', -'upload-misc-error-text' => 'Ivīka nežėnuoma klaida vīkstont ikielėmō. Prašuom patėkrėnt, kū URL teisėngs teipuogi pasėikiams ėr pamiegīkit viel. Jē bieda ėšlėik, sosėsėikėt so sistemuos admėnėstratuoriom.', - -# Some likely curl errors. More could be added from -'upload-curl-error6' => 'Napavīkst pasėiktė URL', -'upload-curl-error6-text' => 'Pataikts URL nagal būt pasėikts. Prašuom patėkrėntė, kū URL īr teisings ėr svetainė veik.', -'upload-curl-error28' => 'Par ėlgā ikeliama', -'upload-curl-error28-text' => 'Atsakontė svetainė ožtronk par ėlgā. Patėkrėnkėt, a svetainė veik, palaukėt tropoti ė vielē pamiegīkit. Mažo Tamstā rēktu pamiegītė ne tuokio apkrauto čieso.', - -'license' => 'Licensėjė', -'license-header' => 'Licensėjė', -'nolicense' => 'Nepasėrėnkt', -'license-nopreview' => '(Parveiza negalėma)', -'upload_source_url' => ' (tėkrs, vėišā priėinams URL)', -'upload_source_file' => ' (fails Tamstas kompioterī)', - -# Special:ListFiles -'listfiles-summary' => 'Tas specēlus poslapis ruod vėsus ikeltus failus. -Palē numatīma paskiausē ikeltė failā īr ruoduomė sāroša vėršou. -Paspaude ont štolpelė ontraštės pakeisėt ėšruokavėma.', -'imgfile' => 'fails', -'listfiles' => 'Failu sārašos', -'listfiles_name' => 'Pavadinėms', -'listfiles_user' => 'Nauduotuos', -'listfiles_size' => 'Dėdoms', -'listfiles_description' => 'Aprašīms', -'listfiles_count' => 'Versėjės', - -# File description page -'file-anchor-link' => 'Fails', -'filehist' => 'Abruozdielė istuorėjė', -'filehist-help' => 'Paspauskėt ont datas/čiesa, ka paveizietomėt faila tuoki, kokis ons bova tū čiesu.', -'filehist-deleteall' => 'trintė vėsus', -'filehist-deleteone' => 'trintė šėta', -'filehist-revert' => 'sogōžėntė', -'filehist-current' => 'dabartėnis', -'filehist-datetime' => 'Data/Čiesos', -'filehist-thumb' => 'Miniatiūra', -'filehist-thumbtext' => 'Versėjės $1 miniatiūra', -'filehist-user' => 'Nauduotuos', -'filehist-dimensions' => 'Mierā', -'filehist-filesize' => 'Faila dėdoms', -'filehist-comment' => 'Kuomentars', -'imagelinks' => 'Faila nūruodas', -'linkstoimage' => '{{PLURAL:$1|Šėts poslapis|Šėtė poslapē}} nuruod i šėta faila:', -'nolinkstoimage' => 'I faila neruod anėjuoks poslapis.', -'sharedupload' => 'Tas fails īr ėš $1 ė gal būtė nauduojams kėtūs pruojektūs.', -'uploadnewversion-linktext' => 'Ikeltė nauja faila versėje', - -# File reversion -'filerevert' => 'Sogrōžėntė $1', -'filerevert-legend' => 'Faila sogrōžinėms', -'filerevert-intro' => 'Tamsta grōžėnat \'\'\'[[Media:$1|$1]]\'\'\' i versėje $4 ($2, $3).', -'filerevert-comment' => 'Kuomentars:', -'filerevert-submit' => 'Grōžėntė', - -# File deletion -'filedelete' => 'Trintė $1', -'filedelete-legend' => 'Trintė faila', -'filedelete-intro' => "Tamsta roušeties ėštrėntė faila '''[[Media:$1|$1]]''' so vėsa anuo istuorėjė.", -'filedelete-comment' => 'Prīžastis:', -'filedelete-submit' => 'Trintė', -'filedelete-success' => "'''$1''' bova ėštrints.", -'filedelete-nofile' => "'''$1''' nēsa.", -'filedelete-otherreason' => 'Kėta/papėlduoma prīžastis:', -'filedelete-reason-otherlist' => 'Kėta prīžastis', -'filedelete-reason-dropdown' => '*Dažnas trīnėma prīžastīs -** Autorīstės teisiu pažeidėmā -** Pasėkartuojontis fails', -'filedelete-edit-reasonlist' => 'Keistė trīnėma prīžastis', - -# MIME search -'mimesearch' => 'MIME paėiška', -'mimesearch-summary' => 'Šėts poslapis laid ruodīti failus vagol anū MIME tipa. Iveskėt: torėnėtips/potipis, pvz. image/jpeg.', -'mimetype' => 'MIME tips:', -'download' => 'parsėsiūstė', - -# Unwatched pages -'unwatchedpages' => 'Nekeravuojėmė poslapē', - -# List redirects -'listredirects' => 'Paradresavėmu sārašos', - -# Unused templates -'unusedtemplates' => 'Nenauduojamė šabluonā', -'unusedtemplatestext' => 'Šėts poslapis ruod sāraša poslapiu, esontiu šabluonu vardū srėtī, katrė nė iterptė i juoki kėta poslapi. Nepamėrškėt patėkrėntė kėtū nūruodu priš anūs ėštrėnont.', -'unusedtemplateswlh' => 'kėtas nūruodas', - -# Random page -'randompage' => 'Bikuoks poslapis', -'randompage-nopages' => 'Šėtuo vardū srėti nier anėjuokiu poslapiu.', - -# Random redirect -'randomredirect' => 'Bikuoks paradresavėms', -'randomredirect-nopages' => 'Šėtuo vardū srėti nier anėjuokiū paradresavėmu.', - -# Statistics -'statistics' => 'Statėstėka', -'statistics-header-pages' => 'Poslapiu statėstėka', -'statistics-header-edits' => 'Redagavėmu statėstėka', -'statistics-header-views' => 'Parveizu statistėka', -'statistics-header-users' => 'Nauduotuoju statėstėka', -'statistics-articles' => 'Torėnė poslapē', -'statistics-pages' => 'Poslapē', -'statistics-files' => 'Ikeltė failā', -'statistics-edits' => 'Poslapiu redagavėmu skaitlius nū {{SITENAME}} sokūrėma', -'statistics-edits-average' => 'Vėdotėnis keitėmu skaitlius poslapiō', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Oždoutiū eilės] ėlgoms', -'statistics-users' => 'Ožsėregėstravosiu [[Special:ListUsers|nauduotuoju]]', -'statistics-users-active' => 'Aktīviu nauduotuoju', -'statistics-mostpopular' => 'Daugiausē ruodītė poslapē', - -'disambiguations' => 'Daugiareikšmiu žuodiu poslapē', - -'doubleredirects' => 'Dvėgobė paradresavėmā', -'doubleredirectstext' => 'Tėi paradresavėmā ruod i kėtus paradresavėma poslapius. Kuožnuo eilotē pamėnavuots pėrmasā ėr ontrasā paradresavėmā, tēpuogi ontrojė paradresavėma paskėrtis, katra paprastā ė paruod i tėkraji poslapi, i katra pėrmasā paradresavėms ė torietu ruodītė.', -'double-redirect-fixed-move' => '[[$1]] bova parkelts, daba tas īr paradresavėms i [[$2]]', - -'brokenredirects' => 'Neveikiantīs paradresavėmā', -'brokenredirectstext' => 'Žemiau ėšvardintė paradresavėma poslapē ruod i nasontius poslapius:', -'brokenredirects-edit' => 'redagoutė', -'brokenredirects-delete' => 'trintė', - -'withoutinterwiki' => 'Poslapē ba kalbū nūruodu', -'withoutinterwiki-summary' => 'Šėtė poslapē neruod i kėtū kalbū versėjės:', -'withoutinterwiki-submit' => 'Ruodītė', - -'fewestrevisions' => 'Straipsnē so mažiausė pakeitėmu', - -# Miscellaneous special pages -'nbytes' => '$1 {{PLURAL:$1|baits|baitā|baitu}}', -'ncategories' => '$1 {{PLURAL:$1|kateguorėjė|kateguorėjės|kateguorėju}}', -'nlinks' => '$1 {{PLURAL:$1|nūruoda|nūruodas|nūruodu}}', -'nmembers' => '$1 {{PLURAL:$1|narīs|narē|nariū}}', -'nrevisions' => '$1 {{PLURAL:$1|pakeitėms|pakeitėmā|pakeitėmu}}', -'nviews' => '$1 {{PLURAL:$1|paruodīms|paruodīmā|paruodīmu}}', -'specialpage-empty' => 'Šėtā ataskaitā nie rezoltatu.', -'lonelypages' => 'Vėinišė straipsnē', -'lonelypagestext' => 'I šėtuos poslapius nier nūruodu ėš kėtū šėta pruojekta poslapiu.', -'uncategorizedpages' => 'Poslapē, napriskėrtė juokē kateguorėjē', -'uncategorizedcategories' => 'Kateguorėjės, naprėskėrtas juokē kateguorėjē', -'uncategorizedimages' => 'Abruozdielē, nepriskėrtė juokē kateguorėjē', -'uncategorizedtemplates' => 'Šabluonā, nepriskėrtė juokē kateguorėjē', -'unusedcategories' => 'Nenauduojamas kateguorėjės', -'unusedimages' => 'Nenauduojamė failā', -'wantedcategories' => 'Nuorėmiausės kateguorėjės', -'wantedpages' => 'Nuorėmiausē poslapē', -'wantedfiles' => 'Nuorėmė failā', -'wantedtemplates' => 'Nuorėmė šabluonā', -'mostlinked' => 'Daugiausē ruodomė straipsnē', -'mostlinkedcategories' => 'Daugiausē ruodomas kateguorėjės', -'mostlinkedtemplates' => 'Daugiausē ruodomė šabluonā', -'mostcategories' => 'Straipsnē so daugiausē kateguorėju', -'mostimages' => 'Daugiausē ruodomė abruozdielē', -'mostrevisions' => 'Straipsnē so daugiausē keitėmu', -'prefixindex' => 'Vėsė poslapē so prīšdielio', -'shortpages' => 'Trompiausė poslapē', -'longpages' => 'Ėlgiausė poslapē', -'deadendpages' => 'Straipsnē-aklavėitės', -'deadendpagestext' => 'Tė poslapē netor nūruodu i kėtus poslapius šėtom pruojektė.', -'protectedpages' => 'Apsauguotė poslapē', -'protectedpagestext' => 'Šėtē poslapē īr apsauguotė nū parkielėma a redagavėma', -'protectedpagesempty' => 'Šėtu čiesu nier apsauguots anėjuoks fails so šėtās parametrās.', -'protectedtitles' => 'Apsauguotė pavadinėmā', -'protectedtitlesempty' => 'Šėtou čieso nier anėjuokė pavadinėma, katros apsauguots tās parametrās.', -'listusers' => 'Sārašos nauduotuoju', -'listusers-editsonly' => 'Ruodītė tėktās nauduotuojus katrėi īr atlėkė pakeitėmus', -'newpages' => 'Naujausė straipsnē', -'newpages-username' => 'Nauduotuojė vards:', -'ancientpages' => 'Seniausė poslapē', -'move' => 'Parvadintė', -'movethispage' => 'Parvadintė šėta poslapi', -'unusedimagestext' => 'Primenam, kū kėtas svetainės gal būtė nuruodiosės i abruozdieli tėisiogėniu URL, no vėstėik gal būtė šėtom sārašė, nuors ėr īr aktīvē naudounams.', -'unusedcategoriestext' => 'Šėtū kateguorėju poslapē sokortė, nuors juoks kėts straipsnis a kateguorėjė ana nenauduo.', -'notargettitle' => 'Nenuruodīts objekts', -'notargettext' => 'Tamsta nenuruodiet nuorima poslapė a nauduotuojė, -katram ivīkdītė šėta funkcėjė.', -'pager-newer-n' => '$1 {{PLURAL:$1|paskesnis|paskesni|paskesniū}}', -'pager-older-n' => '{{PLURAL:$1|senesnis|senesni|senesniū}}', - -# Book sources -'booksources' => 'Knīngu šaltinē', -'booksources-search-legend' => 'Knīngu šaltiniu paėiška', -'booksources-go' => 'Ēk!', - -# Special:Log -'specialloguserlabel' => 'Nauduotuos:', -'speciallogtitlelabel' => 'Pavadėnims:', -'log' => 'Specēliūju veiksmū istuorėjė', -'all-logs-page' => 'Vėsos istuorėjės', -'alllogstext' => 'Bėndra idietu failu, ėštrīnėmu, ožrakėnėmu, bluokavėmu ė prėvėlėju soteikėmu istuorėjė. -Īr galėmībė somažintė rezoltatu skaitliu patėkslėnont vēksma tėpa, nauduotuojė a sosėjosė poslapė.', -'logempty' => 'Istuorėjuo nier anėjuokiū atitinkontiu atsėtėkimu.', -'log-title-wildcard' => 'Ėiškuotė pavadinėmu, katrė prasėded šėtuo teksto', - -# Special:AllPages -'allpages' => 'Vėsė straipsnē', -'alphaindexline' => 'Nu $1 lėg $2', -'nextpage' => 'Kėts poslapis ($1)', -'prevpage' => 'Unkstesnis poslapis ($1)', -'allpagesfrom' => 'Ruodītė poslapius pradedont nu:', -'allpagesto' => 'Ruodītė poslapius, basėbengėnčios so:', -'allarticles' => 'Vėsė straipsnē', -'allinnamespace' => 'Vėsė poslapē (srėtis - $1)', -'allnotinnamespace' => 'Vėsė poslapē (nesontīs šiuo srėtie - $1)', -'allpagesprev' => 'Onkstesnis', -'allpagesnext' => 'Sekontis', -'allpagessubmit' => 'Tink', -'allpagesprefix' => 'Ruodītė poslapios so prīdelēs:', -'allpagesbadtitle' => 'Douts poslapė pavadėnėms īr neteisings a tor terpkalbėnė a terppruojektėnė prīdielė. Anamė īr vėns a kelė žėnklā, katrū negal nauduotė pavadėnėmūs.', -'allpages-bad-ns' => '{{SITENAME}} netor „$1“ vardū srėtėis.', - -# Special:Categories -'categories' => 'Kateguorėjės', -'categoriespagetext' => 'Pruojekte īr šėtuos kateguorėjės.', -'categoriesfrom' => 'Ruodītė kateguorėjės pradedont nu:', - -# Special:DeletedContributions -'deletedcontributions' => 'Panaikėnts nauduotuojė duovis', -'deletedcontributions-title' => 'Ėštrėnts nauduotuojė duovis', - -# Special:LinkSearch -'linksearch' => 'Ėšuorėnės nūruodas', -'linksearch-ns' => 'Vardū srėtis:', -'linksearch-ok' => 'Ėiškuotė', - -# Special:ListUsers -'listusersfrom' => 'Ruodītė nauduotuojus pradedont nū:', -'listusers-submit' => 'Ruodītė', -'listusers-noresult' => 'Nerast anėjuokiū nauduotuoju.', - -# Special:Log/newusers -'newuserlogpage' => 'Nauduotuojė kūrėma regėstros', -'newuserlog-byemail' => 'slaptažuodis ėšsiōsts par el. pašta', -'newuserlog-create-entry' => 'Naus nauduotuos', - -# Special:ListGroupRights -'listgrouprights' => 'Nauduotuoju gropiu teisės', -'listgrouprights-group' => 'Gropė', -'listgrouprights-members' => '(nariū sārošos)', - -# E-mail user -'mailnologin' => 'Nier adresa', -'mailnologintext' => 'Tamstā reik būtė [[Special:UserLogin|prisėjongosiam]] -ė tor būtė ivests teisings el. pašta adresos Tamstas [[Special:Preferences|nustatīmuos]], -kū siōstomiet el. gruomatas kėtėm nauduotuojam.', -'emailuser' => 'Rašītė gruomata šėtam nauduotuojō', -'emailpage' => 'Siūstė el. gruomata nauduotuojui', -'usermailererror' => 'Pašta objekts grōžėna klaida:', -'noemailtitle' => 'Nier el. pašta adreso', -'noemailtext' => 'Šėts nauduotuos nier nuruodės teisėnga el.pašta adresa a īr pasėrinkės negautė el. pašta ėš kėtū nauduotuoju.', -'email-legend' => 'Siūstė elektruonėne gruomata kėtam {{SITENAME}} nauduotuojō', -'emailfrom' => 'Nū:', -'emailmessage' => 'Pranešėms:', -'emailsend' => 'Siōstė', -'emailccme' => 'Siōstė monei mona gruomatas kuopėjė.', -'emailccsubject' => 'Gruomatas kuopėjė nauduotuojō $1: $2', -'emailsent' => 'El. gruomata ėšsiōsta', -'emailsenttext' => 'Tamstas el. pašta žėnotė ėšsiōsta.', - -# Watchlist -'watchlist' => 'Keravuojamė straipsnē', -'mywatchlist' => 'Keravuojamė poslapē', -'watchlistfor' => "(nauduotuojė '''$1''')", -'nowatchlist' => 'Netorėt anėvėina keravuojama poslapė.', -'watchlistanontext' => 'Prašuom $1, ka parveizietomėt a pakeistomiet elementus sava keravuojamu sārašė.', -'watchnologin' => 'Neprisėjongės', -'watchnologintext' => 'Tamstā rēk būtė [[Special:UserLogin|prisėjongosiam]], ka pakeistomiet sava keravuojamu sāraša.', -'addedwatch' => 'Pridieta pri keravuojamu', -'addedwatchtext' => "Poslapis \"[[\$1]]\" idiets i [[Special:Watchlist|keravuojamu sāraša]]. -Būsantīs poslapė ėr atėtinkama aptarėma poslapė pakeitėmā bus paruoduomė keravuojamu poslapiu sārašė, -tēpuogi bus '''parīškintė''' [[Special:RecentChanges|vielībūju pakeitėmu sārašė]], kū ėšsėskėrtom ėš kėtū straipsniu. -Jēgo bikumet ožsėnuorietomiet liautėis keravuotė straipsnė, spauskat \"nebkeravuotė\" vėršotėniam meniū.", -'removedwatch' => 'Pašalėntė ėš keravuojamu', -'removedwatchtext' => 'Poslapis „[[:$1]]“ pašalėnts ėš [[Special:Watchlist|Tamstas keravuojamu sāraša]].', -'watch' => 'Keravuotė', -'watchthispage' => 'Keravuotė šėta poslapė', -'unwatch' => 'Nebkeravuotė', -'unwatchthispage' => 'Nustuotė keravuotė', -'notanarticle' => 'Ne torėnė poslapis', -'watchnochange' => 'Pasėrėnkto čieso nebova redagouts nė vėins keravuojams straipsnis.', -'watchlist-details' => 'Keravuojama $1 {{PLURAL:$1|poslapis|$1 poslapē|$1 poslapiu}} neskaitlioujant aptarėmu poslapiu.', -'wlheader-enotif' => '* El. pašta primėnėmā ijongtė īr.', -'wlheader-showupdated' => "* Poslapē, katrėi pakeistė nu Tamstas paskotėnė apsėlonkėma čiesa anūs, īr pažīmietė '''pastuorintā'''", -'watchmethod-recent' => 'tėkrėnamė vielībė̅jė pakeitėmā keravuojamiems poslapiams', -'watchmethod-list' => 'Ėiškuoma vielībūju pakeitėmu keravuojamūs poslapiūs', -'watchlistcontains' => 'Tamstas kervuojamu sārašė īr $1 {{PLURAL:$1|poslapis|poslapē|poslapiu}}.', -'wlnote' => "Ruoduoma '''$1''' paskotėniu pakeitėmu, atlėktū par '''$2''' paskotėniu adīnu.", -'wlshowlast' => 'Ruodītė paskotėniu $1 adīnu, $2 dėinū a $3 pakeitėmus', -'watchlist-options' => 'Keravuojamu sāroša pasėrinkėmā', - -# Displayed when you click the "watch" button and it is in the process of watching -'watching' => 'Itraukiama i keravuojamu sāraša...', -'unwatching' => 'Šalėnama ėš keravuojamu sāraša...', - -'enotif_reset' => 'Pažīmietė vėsus poslapius kāp aplonkītus', -'enotif_newpagetext' => 'Tas īr naus poslapis.', -'changed' => 'pakeitė', -'created' => 'sokūrė', -'enotif_anon_editor' => 'anuonėminis nauduotuos $1', - -# Delete -'deletepage' => 'Trintė poslapi', -'confirm' => 'Ožtvėrtinu', -'excontent' => 'boves torinīs: „$1“', -'excontentauthor' => 'boves torinīs: „$1“ (redagava tėktās „[[Special:Contributions/$2|$2]]“)', -'exbeforeblank' => 'priš ėštrinant torinīs bova: „$1“', -'exblank' => 'poslapis bova tuščes', -'delete-confirm' => 'Ėštrėnta "$1"', -'delete-legend' => 'Trīnėms', -'historywarning' => 'Diemesė: Trėnams poslapis tor istuorėjė:', -'confirmdeletetext' => 'Tamsta pasėrėnkuot ėštrėntė poslapi a abruozdieli draugum so vėsa anuo istuorėjė. -Prašuom patvėrtėntė, kū Tamsta tėkrā nuorėt šėtu padarītė, žėnuot aple galėmus padarėnius, ė kū Tamsta šėtā daruot atsėžvelgdamė i [[{{MediaWiki:Policy-url}}|puolitėka]].', -'actioncomplete' => 'Vēksmos atlėkts īr', -'deletedtext' => '„$1“ ėštrints. -Paskotiniu pašalinėmu istuorėjė - $2.', -'deletedarticle' => 'ėštrīnė „[[$1]]“', -'suppressedarticle' => 'apžabuots „[[$1]]“', -'dellogpage' => 'Pašalinėmu istuorėjė', -'dellogpagetext' => 'Žemiau īr pateikiams paskotiniu ėštrīnimu sārašos.', -'deletionlog' => 'pašalinėmu istuorėjė', -'reverted' => 'Atkorta i onkstesne versėje', -'deletecomment' => 'Prīžastis:', -'deleteotherreason' => 'Kėta/papėlduoma prižastis:', -'deletereasonotherlist' => 'Kėta prižastis', -'deletereason-dropdown' => '*Dažnas trīnėma prižastīs -** Autorė prašīms -** Autorėniu teisiu pažeidėms -** Vandalėzmos', -'delete-edit-reasonlist' => 'Keistė trėnėma prīžastis', - -# Rollback -'rollback' => 'Atmestė pakeitėmos', -'rollback_short' => 'Atmestė', -'rollbacklink' => 'atmestė', -'rollbackfailed' => 'Atmetims napavīka', -'cantrollback' => 'Negalėma atmestė redagavėma; paskotinis keitės nauduotuos īr tuo poslapė autorius.', -'alreadyrolled' => 'Nepavīka atmestė paskotėnė [[User:$2|$2]] ([[User talk:$2|Aptarėms]]) darīta straipsnė [[$1]] keitėma; -kažkas jau pakeitė straipsnė arba sospiejė pėrmiesnis atmestė keitėma. - -Galėnis keitėms dėrbts nauduotuojė [[User:$3|$3]] ([[User talk:$3|Aptarėms]]).', -'editcomment' => "Redagavėma kuomentars bova: „''$1''“.", -'revertpage' => 'Atmests [[Special:Contributions/$2|$2]] ([[User talk:$2|Aptarėms]]) pakeitėms; sogrōžėnta nauduotuojė [[User:$1|$1]] versėjė', -'rollback-success' => 'Atmestė $1 keitėmā; grōžėnta i paskotėne $2 versėje.', -'sessionfailure' => 'Atruod kū īr biedū so Tamstas prėsėjongėma sesėjė; šėts veiksmos bova atšaukts kāp atsargoma prėimonė priš sesėjės vuogėma. -Prašoum paspaustė „atgal“ ėr parkrautė poslapi ėš katruo atiejot, ė pamieginkėt vielē.', - -# Protect -'protectlogpage' => 'Rakinėmu istuorėjė', -'protectlogtext' => 'Žemiau īr poslapė ožrakinėmu tēpuogi atrakinėmu istuorėjė. Nūnā veikiantiu poslapiu apsaugū sāraša sorasėt [[Special:ProtectedPages|apsauguotu poslapiu sarašė]].', -'protectedarticle' => 'ožrakina „[[$1]]“', -'modifiedarticleprotection' => 'pakeists „[[$1]]“ apsauguos līgis', -'unprotectedarticle' => 'atrakėna „[[$1]]“', -'protect-title' => 'Nustatuoms apsauguojėma līgis poslapiō „$1“', -'prot_1movedto2' => 'Straipsnis [[$1]] parvadints i [[$2]]', -'protect-legend' => 'Ožrakinėma patvėrtinėms', -'protectcomment' => 'Prīžastis:', -'protectexpiry' => 'Beng galiuotė:', -'protect_expiry_invalid' => 'Galiuojėma čiesos īr nateisėngs.', -'protect_expiry_old' => 'Galiuojėma čiesos īr praėitī.', -'protect-text' => "Čė Tamsta galėt paveizėtė ė pakeistė apsauguos līgi šėtuo poslapio '''$1'''.", -'protect-locked-access' => "Tamstas paskīra netor teisiu keistė poslapiu apsauguos līgiu. -Čė īr dabartėnē nustatīmā poslapiō '''$1''':", -'protect-cascadeon' => 'Tas poslapis nūnā īr apsauguots, kadongi ons īr itraukts i {{PLURAL:$1|ta poslapi, apsauguota|tūs poslapiūs, apsauguotus}} „pakuopėnės apsauguos“ pasėrėnkėmu. Tamsta galėt pakeistė šėta poslapė apsauguos līgi, no tas nepaveiks pakuopėnės apsauguos.', -'protect-default' => 'Leistė vėsėms nauduotuojams', -'protect-fallback' => 'Rēkalautė „$1“ teisės', -'protect-level-autoconfirmed' => 'Blokoutė naujē prisėregėstravosius ė neregėstroutus nauduotuojus', -'protect-level-sysop' => 'Tėktās adminėstratuorē', -'protect-summary-cascade' => 'pakuopėnė apsauga', -'protect-expiring' => 'beng galiuotė $1 (UTC)', -'protect-expiry-indefinite' => 'nerėbuotā', -'protect-cascade' => 'Apsaugotė poslapius, itrauktus i šėta poslapi (pakuopėnė apsauga).', -'protect-cantedit' => 'Tamsta negalėt keistė šėta poslapė apsauguojėma līgiu, kagongi netorėt teisiu anuo redagoutė.', -'protect-othertime' => 'Kėts čiesos:', -'protect-othertime-op' => 'kėts čiesos', -'protect-existing-expiry' => 'Esams rakėnėma ožsėbengėma čiesos: $3, $2', -'protect-otherreason' => 'Kėta/papėlduoma prīžastis:', -'protect-otherreason-op' => 'kėta/papėlduoma prīžastis', -'protect-dropdown' => '*Iprastas ožrakinėma prīžastīs -** Intensīvus vandalėzmos -** Intensīvus nūruodu reklamavėms -** Neproduktīvi redagavėma vaina -** Dėdlė svarboma poslapis', -'protect-edit-reasonlist' => 'Keistė ožrakinėma prīžastis', -'protect-expiry-options' => '1 adīna:1 hour,1 dėina:1 day,1 nedielė:1 week,2 nedielės:2 weeks,1 mienou:1 month,3 mieniesē:3 months,6 mieniesē:6 months,1 metā:1 year,par omžius:infinite', -'restriction-type' => 'Laidėms:', -'restriction-level' => 'Aprėbuojėma līgis:', -'minimum-size' => 'Minėmalus dėdoms', -'maximum-size' => 'Dėdliausis dėdoms', -'pagesize' => '(baitās)', - -# Restrictions (nouns) -'restriction-edit' => 'Redagavėms', -'restriction-move' => 'Parvadėnėms', -'restriction-create' => 'Sokortė', -'restriction-upload' => 'Ikeltė', - -# Restriction levels -'restriction-level-sysop' => 'pėlnā apsauguota', -'restriction-level-autoconfirmed' => 'posiau apsauguota', -'restriction-level-all' => 'bikuoks', - -# Undelete -'undelete' => 'Atstatītė ėštrinta poslapi', -'undeletepage' => 'Ruodītė ė atkortė ėštrintos poslapios', -'viewdeletedpage' => 'Ruodītė ėštrintos poslapios', -'undeletepagetext' => 'Žemiau ėšvardėntė poslapē īr ėštrėntė, no da laikuomi -arkīve, tudie anie gal būt atstatītė. Arkīvs gal būt perēodėškā valuoms.', -'undeleteextrahelp' => "Nuoriedamė atkortė vėsa poslapi, palikit vėsas varnales napažīmietas ėr -spauskėt '''''Atkortė'''''. Nuoriedamiė atlėktė pasirėnktini atstatīma, pažīmiekit varnales šėtū versėju, katras nuorietomiet atstatītė, ėr spauskėt '''''Atkortė'''''. Paspaudus -'''''Ėš naujė''''' bos ėšvalītuos vėsos varnalės ėr kuomentara lauks.", -'undeleterevisions' => '$1 {{PLURAL:$1|versėjė|versėjės|versėju}} soarkīvouta', -'undeletehistory' => 'Jē atstatīsėt straipsni, istuorėjuo bos atstatītuos vėsos versėjės. -Jē puo ėštrīnima bova sokuots straipsnis tuokiuo patio pavadėnėmo, -atstatītuos versėjės atsiras onkstesnie istuorėjuo, o dabartėnė -versėjė lėks napakeista. Atkoriant īr prarondamė apribuojimā failu versėjuom.', -'undeleterevdel' => 'Atkorėms nebus ivīkdīts, jē šėtā nulems paskotėnės poslapė versėjės dalini ėštrīnima. -Tuokēs atvejās, Tamstā rēk atžīmietė a atkavuotė naujausēs ėštrintas versėjės. -Failu versėjės, katrū netorėt teisiu veizėtė, nebus atkortas.', -'undeletehistorynoadmin' => 'Šėts straipsnis bova ėštrints. Trīnima prižastis -ruodoma žemiau, teipuogi kas redagava poslapi -lėgė trīnima. Ėštrintū poslapiu tekstos īr galėmas tėk admėnėstratuoriam.', -'undelete-revision' => 'Ėštrėnta $1 versėjė, katra $4 d. $5 padėrba $3:', -'undeleterevision-missing' => 'Neteisėnga a dėngosė versėjė. Tamsta mažo torėt bluoga nūruoda, a versėjė bova atkorta a pašalėnta ėš arkīva.', -'undeletebtn' => 'Atkortė', -'undeletelink' => 'veizietė/atstatītė', -'undeletereset' => 'Ėš naujė', -'undeleteinvert' => 'Žīmietė prīšėngā', -'undeletecomment' => 'Kuomentars:', -'undeletedarticle' => 'atkorta „[[$1]]“', -'undeletedrevisions' => 'atkorta $1 {{PLURAL:$1|versėjė|versėjės|versėju}}', -'undeletedrevisions-files' => 'atkorta $1 {{PLURAL:$1|versėjė|versėjės|versėju}} ėr $2 {{PLURAL:$2|fails|failā|failu}}', -'undeletedfiles' => 'atkorta $1 {{PLURAL:$1|fails|failā|failu}}', -'undeletedpage' => "'''$1 bova atkurts''' -Parveizėkiet [[Special:Log/delete|trīnimu sāraša]], nuoriedamė rastė paskotėniu trīnimu ėr atkorėmu sāraša.", -'undelete-header' => 'Veizėkit [[Special:Log/delete|trīnima istuorėjuo]] paskoteniausē ėštrintū poslapiu.', -'undelete-search-box' => 'Ėiškuotė ėštrintū poslapiu', -'undelete-search-prefix' => 'Ruodītė poslapios pradedant so:', -'undelete-search-submit' => 'Ėiškuotė', -'undelete-no-results' => 'Nabova rasta juokė atėtėnkontė poslapė ėštrīnima arkīve.', -'undelete-show-file-confirm' => 'A ėš tėkrā nuorėt parveizietė ėštrėnta faila „$1“ $2 $3 versėjė?', -'undelete-show-file-submit' => 'Tēp', - -# Namespace form on various pages -'namespace' => 'Vardū srėtis:', -'invert' => 'Žīmietė prīšėngā', -'blanknamespace' => '(Pagrėndinė)', - -# Contributions -'contributions' => 'Nauduotuojė duovis', -'contributions-title' => 'Nauduotuojė $1 duovis', -'mycontris' => 'Mona duovis', -'contribsub2' => 'Nauduotuojė $1 ($2)', -'uctop' => ' (paskotinis)', -'month' => 'Nu mienėsė (ėr onkstiau):', -'year' => 'Nu metu (ėr onkstiau):', - -'sp-contributions-newbies' => 'Ruodītė tėk naujū prieteliu duovios', -'sp-contributions-newbies-sub' => 'Naujuoms paskīruoms', -'sp-contributions-newbies-title' => 'Nauduotuoju keitėmā naujuoms paskīruoms', -'sp-contributions-blocklog' => 'Bluokavėmu istuorėjė', -'sp-contributions-deleted' => 'Panaikėnts nauduotuojė duovis', -'sp-contributions-talk' => 'Aptarėms', -'sp-contributions-userrights' => 'Nauduotuoju teisiu valdīms', -'sp-contributions-search' => 'Ėiškuotė duovė', -'sp-contributions-username' => 'IP adresos a nauduotuojė vards:', -'sp-contributions-submit' => 'Ėiškuotė', - -# What links here -'whatlinkshere' => 'Sosėjėn straipsnē', -'whatlinkshere-title' => 'Poslapē, katrėi ruod i "$1"', -'whatlinkshere-page' => 'Poslapis:', -'linkshere' => "Šėtė poslapē ruod i '''[[:$1]]''':", -'nolinkshere' => "I '''[[:$1]]''' nūruodu nier.", -'nolinkshere-ns' => "Nurodītuo vardū srėtī anė vėins poslapis neruod i '''[[:$1]]'''.", -'isredirect' => 'nukreipēmasės poslapis', -'istemplate' => 'iterpims', -'isimage' => 'abruozdielė nūruoda', -'whatlinkshere-prev' => '$1 {{PLURAL:$1|onkstesnis|onkstesni|onkstesniū}}', -'whatlinkshere-next' => '$1 {{PLURAL:$1|kėts|kėtė|kėtū}}', -'whatlinkshere-links' => '← nūruodas', -'whatlinkshere-hideredirs' => '$1 nukreipėmus', -'whatlinkshere-hidetrans' => '$1 itraukėmus', -'whatlinkshere-hidelinks' => '$1 nūruodas', -'whatlinkshere-hideimages' => '$1 abruozdieliu nūruodas', -'whatlinkshere-filters' => 'Fėltrā', - -# Block/unblock -'blockip' => 'Ožblokoutė nauduotuoja', -'blockip-legend' => 'Blokoutė nauduotuoja', -'blockiptext' => 'Nauduokėt šėta fuorma noriedamė oždraustė redagavėma teises nuruodīto IP adreso a nauduotuojo. Tas torietu būt atlėikama tam, kū sostabdītomiet vandalėzma, ė vagol [[{{ns:project}}:Puolitėka|puolitėka]]. -Žemiau nuruodīkėt tėkslē prižastė.', -'ipaddress' => 'IP adresos', -'ipadressorusername' => 'IP adresos a nauduotuojė vards', -'ipbexpiry' => 'Galiuojėma čiesos', -'ipbreason' => 'Prīžastis:', -'ipbreasonotherlist' => 'Kėta prīžastis', -'ipbreason-dropdown' => '*Dažniausės bluokavėma prižastīs -** Melagėngas infuormacėjės rašīms -** Torėnė trīnims ėš poslapiu -** Spaminims -** Zaunu/bikuo rašīms i poslapios -** Gondinėmā/Pėktžuodiavėmā -** Pėktnaudžiavėms paskėruomis -** Netėnkams nauduotuojė vards', -'ipbanononly' => 'Blokoutė tėktās anuonimėnius nauduotuojus', -'ipbcreateaccount' => 'Nelaistė kortė paskīrū', -'ipbemailban' => 'Nelaistė nauduotuojō siōstė el. gruomatas', -'ipbenableautoblock' => 'Autuomatėškā blokoutė tuo nauduotuojė paskiausē nauduota IP adresa, ė bikuokius paskesnius IP adresus, ėš katrū ons miegin redagoutė', -'ipbsubmit' => 'Blokoutė šėta nauduotuoja', -'ipbother' => 'Kėtuoks čiesos', -'ipboptions' => '2 adīnas:2 hours,1 dėina:1 day,3 dėinas:3 days,1 nedielė:1 week,2 nedielės:2 weeks,1 mienou:1 month,3 mienesē:3 months,6 mienesē:6 months,1 metā:1 year,omžėms:infinite', -'ipbotheroption' => 'kėta', -'ipbotherreason' => 'Kėta/papėlduoma prižastis', -'ipbwatchuser' => 'Keravuotė tuo nauduotuojė poslapi ėr anuo aptarėma poslapi', -'ipb-change-block' => 'Parblokoutė ta nauduotuoja so šėtās nustatīmās', -'badipaddress' => 'Nelaistėns IP adresos', -'blockipsuccesssub' => 'Ožblokavėms pavīka', -'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] bova ožblokouts. -
    Aplonkīkėt [[Special:IPBlockList|IP blokavėmu istuorėjė]] noriedamė ana parveizėtė.', -'ipb-edit-dropdown' => 'Redagoutė blokavėmu prīžastis', -'ipb-unblock-addr' => 'Atblokoutė $1', -'ipb-unblock' => 'Atblokoutė nauduotuojė varda a IP adresa', -'ipb-blocklist-addr' => 'Ruodītė esontius $1 bluokavėmus', -'ipb-blocklist' => 'Ruodītė asontius bluokavėmus', -'ipb-blocklist-contribs' => '$1 duovis', -'unblockip' => 'Atbluokoutė nauduotuoja', -'unblockiptext' => 'Nauduokėt šėta fuorma, kū atkortomiet rašīma teises -onkstiau ožbluokoutam IP adresō a nauduotuojō.', -'ipusubmit' => 'Atblokoutė šėta adresa', -'unblocked' => '[[User:$1|$1]] bova atbluokouts', -'unblocked-id' => 'Bluokavėms $1 bova pašalėnts', -'ipblocklist' => 'Blokoutė IP adresā ė nauduotuojē', -'ipblocklist-legend' => 'Rastė ožblokouta nauduotuoja', -'ipblocklist-username' => 'Nauduotuos a IP adresos:', -'ipblocklist-submit' => 'Ėiškuotė', -'blocklistline' => '$1, $2 ožblokava $3 ($4)', -'infiniteblock' => 'neribuotā', -'expiringblock' => 'beng galiuotė $1 $2', -'anononlyblock' => 'vėn anuonėmā', -'noautoblockblock' => 'autuomatinis blokavėms ėšjongts', -'createaccountblock' => 'paskīrū korėms oždrausts īr', -'emailblock' => 'el. pašts ožblokouts', -'ipblocklist-empty' => 'Blokavėmu sarašos toščias.', -'ipblocklist-no-results' => 'Prašuoms IP adresos a nauduotuojė vards ožblokouts nier.', -'blocklink' => 'ožblokoutė', -'unblocklink' => 'atbluokoutė', -'change-blocklink' => 'keistė bluokavėma nustatīmus', -'contribslink' => 'duovis', -'autoblocker' => 'Autuomatėnis ožbluokavėms, nes dalėnaties IP adreso so nauduotuojo "$1". Prīžastės - "$2".', -'blocklogpage' => 'Ožblokavėmu istuorėjė', -'blocklogentry' => 'ožblokava „[[$1]]“, blokavėma čiesos - $2 $3', -'reblock-logentry' => 'pakeistė [[$1]] bluokavėma nustatīmā, naus bluokavėma čiesos īr $2 $3', -'blocklogtext' => 'Čė īr nauduotuoju blokavėma ėr atblokavėma sārašos. Autuomatėškā blokoutė IP adresā nier ėšvardėntė. Jeigu nuorėt paveizėtė nūnā blokoujamus adresus, veizėkėt [[Special:IPBlockList|IP ožbluokavėmu istuorėjė]].', -'unblocklogentry' => 'atbluokava $1', -'block-log-flags-anononly' => 'vėn anonėmėnē nauduotuojē', -'block-log-flags-nocreate' => 'privėlėju kūrėms ėšjungts', -'block-log-flags-noautoblock' => 'automatėnis blokavėms ėšjungts', -'block-log-flags-noemail' => 'e-pašts bluokouts īr', -'ipb_expiry_invalid' => 'Galiuojėma čiesos nelaistėns.', -'ipb_already_blocked' => '„$1“ jau ožblokouts', -'ipb-needreblock' => '== Jau ožblokouts == -$1 jau īr ožblokouts. A nuorėt pakeistė nustatīmus?', -'proxyblocksuccess' => 'Padarīt.', - -# Developer tools -'unlockdbtext' => 'Atrakėnos doumenū baze grōžėns galimībe vėsėm -nauduotuojam redagoutė poslapios, keistė anū nostatīmos, keistė anū keravuojamu sāraša ė -kėtos dalīkos, rēkalaujontios pakeitėmu doumenū bazė. -Prašuom patvėrtėntė šėtā, kū ketinat padarītė.', -'locknoconfirm' => 'Tamsta neoždiejot patvėrtinėma varnalės.', -'unlockdbsuccesstext' => 'Doumenū bazė bova atrakėnta.', - -# Move page -'move-page' => 'Pervadėntė $1', -'move-page-legend' => 'Poslapė pervadėnims', -'movepagetext' => "Nauduodamė žemiau pateikta fuorma, parvadinsėt poslapi neprarasdamė anuo istuorėjės. -Senasā pavadinėms pataps nukrēpiamouju - ruodīs i naujīji. -Tamsta esat atsakėngs ož šėta, kū nūruodas ruodītu i ten, kor ė nuorieta. - -Primenam, kū poslapis '''nebus''' parvadints, jēgo jau īr poslapis naujo pavadinėmo, nebent tas poslapis īr tuščės a nukreipēmasis ė netor redagavėma istuorėjės. -Tumet, Tamsta galėt parvadintė poslapi seniau nauduota vardu, jēgo priš šėta ons bova par klaida parvadints, a egzėstounantiu poslapiu sogadintė negalėt. - -'''DIEMESĖ!''' -Jēgo parvadinat puopoliaru poslapi, tas gal sokeltė nepagēdaunamu šalotiniu efektu, tudie šėta veiksma vīkdīkit tėk isitėkine, -kū soprantat vėsas pasiekmes.", -'movepagetalktext' => "Sosėits aptarėma poslapis bus autuomatėškā parkelts draugom so ano, '''ėšskīrus:''': -*Poslapis nauju pavadinėmo tor netoštė aptarėma poslapi, a -*Paliksėt žemiau asontė varnale nepažīmieta. -Šėtās atviejās Tamsta sava nužiūra torėt parkeltė a apjongtė aptarėma poslapi.", -'movearticle' => 'Parvadintė poslapi:', -'movenologin' => 'Neprisėjongės', -'movenologintext' => 'Nuoriedamė parvadintė poslapi, torėt būtė ožsėregėstravės nauduotuos ė tēpuogi būtė [[Special:UserLogin|prisėjongės]].', -'newtitle' => 'Naus pavadėnėms:', -'move-watch' => 'Keravuotė šėta poslapi', -'movepagebtn' => 'Parvadintė poslapė', -'pagemovedsub' => 'Parvadinta siekmingā', -'movepage-moved' => '\'\'\'"$1" bova parvadints i "$2"\'\'\'', -'movepage-moved-redirect' => 'Nukreipims bova sokorts.', -'articleexists' => 'Straipsnis so tuokiu vardo jau īr -a parinktāsis vards īr bluogs. -Parinkat kėta varda.', -'talkexists' => "'''Patsā poslapis bova siekmėngā parvadints, no aptarėmu poslapis nabova parkelts, kadongi nauja -pavadėnėma straipsnis jau tor aptarėmu poslapi. -Prašuom sojongtė šėtuos poslapios.'''", -'movedto' => 'parvadints i', -'movetalk' => 'Parkeltė sosėta aptarėma poslapi.', -'1movedto2' => 'Straipsnis [[$1]] parvadints i [[$2]]', -'1movedto2_redir' => '[[$1]] parvadints i [[$2]] (onkstiau bova nukrēpamāsis)', -'movelogpage' => 'Parvardinėmu istuorėjė', -'movelogpagetext' => 'Sārašos parvadintu poslapiu.', -'movereason' => 'Prīžastis:', -'revertmove' => 'atmestė', -'delete_and_move' => 'Ėštrintė ė parkeltė', -'delete_and_move_text' => '==Rēkalings ėštrīnims== -Paskėrties straipsnis „[[:$1]]“ jau īr. A nuorėt ana ėštrintė, kū galietomiet parvadintė?', -'delete_and_move_confirm' => 'Tēp, trintė poslapi', -'delete_and_move_reason' => 'Ėštrinta diel parkielima', -'move-leave-redirect' => 'Parvadėnant paliktė nukreipėma', - -# Export -'export' => 'Ekspuortoutė poslapius', -'exportcuronly' => 'Eksportoutė tėktās dabartėne versėjė, neitraukiant istuorėjės', -'export-submit' => 'Eksportoutė', -'export-addcattext' => 'Pridietė poslapius ėš kateguorėjės:', -'export-addcat' => 'Pridietė', -'export-download' => 'Sauguotė kāp faila', - -# Namespace 8 related -'allmessages' => 'Vėsė sėstemas tekstā ė pranešėmā', -'allmessagesname' => 'Pavadėnėms', -'allmessagesdefault' => 'Pradėnis teksts', -'allmessagescurrent' => 'Dabartėnis teksts', -'allmessagestext' => 'Čė pateikamė sėstemėniu pranešėmu sārašos, esontis MediaWiki srėtie.', -'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' nepalaikuoms īr, nes nustatīms '''\$wgUseDatabaseMessages''' ėšjungts īr.", - -# Thumbnails -'thumbnail-more' => 'Padėdintė', -'thumbnail_error' => 'Klaida koriant somažėnta pavēkslieli: $1', -'thumbnail_invalid_params' => 'Nalaistieni miniatiūras parametrā', -'thumbnail_dest_directory' => 'Nepavīkst sokortė paskėrtėis papkes', - -# Special:Import -'import' => 'Importoutė poslapius', -'import-revision-count' => '$1 {{PLURAL:$1|versėjė|versėjės|versėju}}', - -# Import log -'importlogpage' => 'Impuorta istuorėjė', -'import-logentry-upload-detail' => '$1 {{PLURAL:$1|keitims|keitimā|keitimu}}', -'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|keitims|keitimā|keitimu}} ėš $2', - -# Tooltip help for the actions -'tooltip-pt-userpage' => 'Tamstas nauduotuojė poslapis', -'tooltip-pt-anonuserpage' => 'Nauduotuojė poslapis Tamstas IP adresō', -'tooltip-pt-mytalk' => 'Tamstas aptarėma poslapis', -'tooltip-pt-preferences' => 'Mona nostatīmā', -'tooltip-pt-watchlist' => 'Poslapiu sārašos, katrūs Tamsta pasėrėnkuot keravuotė.', -'tooltip-pt-mycontris' => 'Tamstas darītu keitimu sārašos', -'tooltip-pt-login' => 'Rekuomendoujam prėsėjongtė, nuors tas nėr privaluoma.', -'tooltip-pt-logout' => 'Atsėjongtė', -'tooltip-ca-talk' => 'Poslapė torėnė aptarėms', -'tooltip-ca-edit' => 'Tamsta galėt keistė ta poslapi. Nepamėrškėt paspaustė parvaizuos mīgtoka priš ėšsauguodamė.', -'tooltip-ca-addsection' => 'Pradietė nauja skīriu', -'tooltip-ca-viewsource' => 'Poslapis īr ožrakints. Galėt parveizėt torini.', -'tooltip-ca-history' => 'Unkstesnės poslapė versėjės.', -'tooltip-ca-protect' => 'Ožrakintė šėta poslapi', -'tooltip-ca-delete' => 'Trėntė ta poslapi', -'tooltip-ca-move' => 'Parvadėntė poslapi', -'tooltip-ca-watch' => 'Pridietė poslapi i keravuojamu sāraša', -'tooltip-ca-unwatch' => 'Pašalėntė poslapi ėš keravuojamu sāraša', -'tooltip-search' => 'Ėiškuotė šėtom pruojektė', -'tooltip-search-go' => 'Ētė i poslapi su tuokiu pavadėnėmu jēgo tuoks īr', -'tooltip-search-fulltext' => 'Ėiškuotė poslapiu so tuokiu tekstu', -'tooltip-p-logo' => 'Pėrms poslapis', -'tooltip-n-mainpage' => 'Aplonkītė pėrma poslapi', -'tooltip-n-mainpage-description' => 'Ētė i pėrma poslapi', -'tooltip-n-portal' => 'Aple pruojekta, ka galėma vēktė, kamė ka rastė', -'tooltip-n-currentevents' => 'Raskėt naujausė infuormacėjė', -'tooltip-n-recentchanges' => 'Vielībūju pakeitėmu sārašos tamė projektė.', -'tooltip-n-randompage' => 'Atidarītė bikuoki straipsni', -'tooltip-n-help' => 'Vėita, katruo rasėt rūpėmus atsakīmus.', -'tooltip-t-whatlinkshere' => 'Poslapiu sārašos, ruodantiu i čė', -'tooltip-t-recentchangeslinked' => 'Paskotėnē pakeitėmā straipsnious, pasėikiamous ėš šėta straipsnė', -'tooltip-feed-rss' => 'Šėta poslapė RSS šaltėnis', -'tooltip-feed-atom' => 'Šėta poslapė Atom šaltėnis', -'tooltip-t-contributions' => 'Ruodītė šėta nauduotuojė keitėmu sāraša', -'tooltip-t-emailuser' => 'Siōstė gromata šėtom prietėliō', -'tooltip-t-upload' => 'Idietė abruozdielios a medėjės failos', -'tooltip-t-specialpages' => 'Specēliūju poslapiu sārašos', -'tooltip-t-print' => 'Šėta poslapė versėjė spausdėnėmō', -'tooltip-t-permalink' => 'Vėslaikėnė nūruoda i šėta poslapė versėje', -'tooltip-ca-nstab-main' => 'Ruodītė poslapė torėni', -'tooltip-ca-nstab-user' => 'Ruodītė nauduotuojė poslapi', -'tooltip-ca-nstab-special' => 'Šėts poslapis īr specēlosis - anuo nagalėm redagoutė.', -'tooltip-ca-nstab-project' => 'Ruodītė pruojekta poslapi', -'tooltip-ca-nstab-image' => 'Ruodītė abruozdielė poslapi', -'tooltip-ca-nstab-template' => 'Ruodītė šabluona', -'tooltip-ca-nstab-help' => 'Ruodītė pagelbas poslapi', -'tooltip-ca-nstab-category' => 'Ruodītė kateguorėjės poslapi', -'tooltip-minoredit' => 'Pažīmietė pakeitėma kāp maža', -'tooltip-save' => 'Ėšsauguotė pakeitėmos', -'tooltip-preview' => 'Pakeitėmu parveiza, prašuom parveizėt priš ėšsaugont!', -'tooltip-diff' => 'Ruod, kuokios pakeitėmos padariet tekste.', -'tooltip-compareselectedversions' => 'Veizėtė abodvėju pasėrėnktū poslapė versėju skėrtomos.', -'tooltip-watch' => 'Pridietė šėta poslapi i keravuojamu sāraša', -'tooltip-recreate' => 'Atkortė poslapi napaisant šėto, kū ans bova ėštrints', -'tooltip-rollback' => 'Atšauktė atmestus šėta poslapė keitėmus i vielībiause versėje par vėina paspaudėma', -'tooltip-undo' => '"Anolioutė" atmeta ta keitėma ėr atidara unkstesnies versėjės redagavėma skvarma. Leid pridietė atmetėma prīžasti kuomentarūsė.', - -# Attribution -'anonymous' => 'Neregėstrouts nauduotuos', -'siteuser' => '{{SITENAME}} nauduotuos $1', -'lastmodifiedatby' => 'Šėta poslapi paskotini karta redagava $3 $2, $1.', -'others' => 'kėtė', -'siteusers' => '{{SITENAME}} {{PLURAL:$2|nauduotuos|nauduotuojē}} $1', -'creditspage' => 'Poslapė kūriejē', - -# Spam protection -'spamprotectiontitle' => 'Prišreklamėnis fėltros', -'spamprotectiontext' => 'Poslapis, katra nuoriejot ėšsauguotė bova ožblokouts prišreklamėnė fėltra. Šėtā tėkriausē sokielė nūruoda i kėta svetaine. Ėšėmkit nūruoda ė pamieginkėt viel.', -'spamprotectionmatch' => 'Šėts tekstos bova atpažėnts prišreklamėnė fėltra: $1', -'spambot_username' => "''MediaWiki'' reklamu šalėnėms", -'spam_reverting' => 'Atkoriama i onkstesne versėje, katra nator nūruodu i $1', -'spam_blanking' => 'Vėsos versėjės toriejė nūruodu i $1. Ėšvaluoma', - -# Info page -'numedits' => 'Pakeitimu skaitlius (straipsnis): $1', -'numtalkedits' => 'Pakeitėmu skaitlius (aptarėma poslapis): $1', -'numwatchers' => 'Keravuojantiu skaitlius: $1', - -# Math options -'mw_math_png' => 'Vėsumet fuormuotė PNG', -'mw_math_simple' => 'HTML paprastās atvejās, kėtēp - PNG', -'mw_math_html' => 'HTML kumet imanuoma, kėtēp - PNG', -'mw_math_source' => 'Paliktė TeX fuormata (tekstinems naršīklems)', -'mw_math_modern' => 'Rekomendounama muodernioms naršīklems', -'mw_math_mathml' => 'MathML jēgo imanuoma (ekspermentinis)', - -# Math errors -'math_failure' => 'Nepavīka apdoruotė', -'math_unknown_error' => 'nežinuoma klaida', -'math_unknown_function' => 'nežinuoma funkcėjė', - -# Patrolling -'markaspatrolleddiff' => 'Žīmietė, kū patikrėnta', -'markaspatrolledtext' => 'Pažīmietė, ka poslapis patėkrėnts īr', -'markedaspatrolled' => 'Pažīmiets kāp patėkrints', -'markedaspatrolledtext' => 'Pasėrinkta versėjė siekmingā pažīmieta kāp patėkrinta', - -# Patrol log -'patrol-log-page' => 'Patikrinėma istuorėjė', -'patrol-log-line' => 'Poslapė „$2“ $1 pažīmieta kāp patėkrinta $3', -'patrol-log-auto' => '(autuomatėškā)', -'patrol-log-diff' => 'versėjė $1', -'log-show-hide-patrol' => '$1 patvirtėnėmu saraša', - -# Image deletion -'deletedrevision' => 'Ėštrinta sena versėjė $1.', -'filedeleteerror-short' => 'Klaida trėnont faila: $1', - -# Browsing diffs -'previousdiff' => '← Onkstesnis pakeitėms', -'nextdiff' => 'Paskesinis pakeitėms →', - -# Media information -'mediawarning' => "'''Diemesė''': Šėts fails gal torietė kenksmėnga kuoda, anū palaidus Tamstas sėstėma gal būtė sogadinta.", -'imagemaxsize' => 'Rėbuotė abruozdieliu dėdoma anū aprašīma poslapī lėgė:', -'thumbsize' => 'Somažėntu pavēkslieliu didums:', -'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|poslapis|poslapē|poslapiu}}', -'file-info' => '(faila dėdoms: $1, MIME tips: $2)', -'file-info-size' => '($1 × $2 taškū, faila dėdoms: $3, MIME tips: $4)', -'file-nohires' => 'Geresnis ėšraiškėms negalėms.', -'svg-long-desc' => '(SVG fails, fuormalē $1 × $2 puškiu, faila dėdoms: $3)', -'show-big-image' => 'Pėlns ėšraiškėms', -'show-big-image-thumb' => 'Šėtuos parvaizos dėdums: $1 × $2 puškiu', - -# Special:NewFiles -'newimages' => 'Naujausiu abruozdieliu galerėjė', -'imagelisttext' => "Žemiau īr '''$1''' failu sārašos, sorūšiouts $2.", -'newimages-label' => 'Faila vards (ar anuo dalis):', -'showhidebots' => '($1 robotos)', -'ilsubmit' => 'Ėiškoutė', -'bydate' => 'palē data', -'sp-newimages-showfrom' => 'Ruodītė naujus abruozdielius pradedant nū $2, $1', - -# Bad image list -'bad_image_list' => 'Fuormats tuoks īr: - -Tėk eilotės, prasėdedantės *, īr itraukiamas. Pėrmuojė nūruoda eilotie tor būtė nūruoda i bluoga abruozdieli. -Vėsas kėtas nūoruodas tuo patiuo eilotie īr laikomas ėšėmtim, tas rēšk ka poslapē, katrūs leidama iterptė abruozdieli.', - -# Metadata -'metadata' => 'Metadoumenīs', -'metadata-help' => 'Šėtom failė īr papėlduomos infuormacėjės, tikriausē pridietos skaitmeninės kameruos a skanėrė, katros bova nauduots anam sokortė a parkeltė i skaitmenėni fuormata. Jēgo fails bova pakeists ėš pradėnės versėjės, katruos nekatruos datalės gal nepėlnā atspėndietė nauja faila.', -'metadata-expand' => 'Ruodītė ėšpliestinė infuormacėjė', -'metadata-collapse' => 'Kavuotė ėšpliestinė infuormacėjė', -'metadata-fields' => 'EXIF metadoumenū laukā, nuruodītė tamė pranešėmė, bus itrauktė i abruozdielė poslapi, kumet metadoumenū lentelė bus suskleista. Palē nutīliejėma kėtė laukā bus pakavuotė. -* make -* model -* datetimeoriginal -* exposuretime -* fnumber -* isospeedratings -* focallength', - -# EXIF tags -'exif-imagewidth' => 'Platoms', -'exif-imagelength' => 'Aukštoms', -'exif-orientation' => 'Pasokims', -'exif-xresolution' => 'Gorizuontalus ėšraiškėms', -'exif-datetime' => 'Faila keitėma data ė čiesos', -'exif-imagedescription' => 'Abruozdielė pavadėnėms', -'exif-make' => 'Kameras gamėntuos', -'exif-model' => 'Kameras muodelis', -'exif-colorspace' => 'Spalvū pristatīms', -'exif-compressedbitsperpixel' => 'Abruozdielė sospaudėma rėžėms', -'exif-datetimeoriginal' => 'Doumenū generavėma data ė čiesos', -'exif-exposuretime' => 'Ėšlaikīma čiesos', -'exif-fnumber' => 'F skaitlius', -'exif-brightnessvalue' => 'Švėisoms', -'exif-lightsource' => 'Švėisuos šaltėnis', -'exif-flash' => 'Blėcos', -'exif-focallength' => 'Žėdinė nutuolėms', -'exif-flashenergy' => 'Blėca energėjė', -'exif-contrast' => 'Kuontrasts', - -'exif-orientation-1' => 'Standartėšks', - -'exif-xyresolution-i' => '$1 puškē cuolī', -'exif-xyresolution-c' => '$1 puškē centėmetrė', - -'exif-componentsconfiguration-0' => 'nēsa', - -'exif-exposureprogram-0' => 'Nenūruodīta', - -'exif-contrast-0' => 'Paprasts', -'exif-contrast-1' => 'Mažos', -'exif-contrast-2' => 'Dėdlis', - -# External editor support -'edit-externally' => 'Atdarītė ėšuoriniam redaktuorio', -'edit-externally-help' => 'Nuoriedamė gautė daugiau infuormacėjės, veiziekėt [http://www.mediawiki.org/wiki/Manual:External_editors kruovėma instrokcėjės].', - -# 'all' in various places, this might be different for inflected languages -'recentchangesall' => 'vėsos', -'imagelistall' => 'vėsė', -'watchlistall2' => 'vėsos', -'namespacesall' => 'vėsas', -'monthsall' => 'vėsė', - -# E-mail address confirmation -'confirmemail' => 'Patvirtėnkėt el. pašta adresa', -'confirmemail_noemail' => 'Tamsta netorėt nuruodės teisėnga el. pašta adresa [[Special:Preferences|sava nustatīmūs]].', -'confirmemail_text' => 'Šėtom pruojektė īr rēkalėnga patvirtėntė el. pašta adresa prīš nauduojont el. pašta funkcėjės. Spauskėt žemiau esonti mīgtoka, -kū Tamstas el. pašta adresu būtom ėšsiōsts patvirtėnėma kods. -Gruomatuo bus atsiōsta nūruoda so kodu, katra nuējus, el. pašta adresos bus patvirtėnts.', -'confirmemail_send' => 'Ėšsiōstė patvirtėnėma koda', -'confirmemail_sent' => 'Patvirtėnėma gruomata ėšsiōsta.', -'confirmemail_needlogin' => 'Tamstā rēk $1, kū patvirtėntomiet sava el. pašta adresa.', -'confirmemail_loggedin' => 'Tamstas el. pašta adresos ožtvėrtints īr.', -'confirmemail_body' => 'Kažėnkas, mosiet Tamsta IP adreso $1, ožregėstrava -paskīra „$2“ sosėita so šėtuom el. pašta adresu pruojektė {{SITENAME}}. - -Kū patvirtėntomiet, kū ta diežotė ėš tėkrā prėklausa Tamstā, ėr aktīvoutomiet -el. pašta puoslaugi pruojėktė {{SITENAME}}, atdarīkiet ta nūruoda sava naršīklie: - -$3 - -Jēgo paskīra regėstravuot *ne* Tamsta, tumet ēkėt ta nūruoda, -kū atšauktomiet el. pašta adresa patvirtėnėma: - -$5 - -Patvirtėnėma kods bengs galiuotė $4.', -'invalidateemail' => 'El. pašta patvirtėnėma atšaukėms', - -# Trackbacks -'trackbackremove' => '([$1 Trintė])', - -# Delete conflict -'deletedwhileediting' => 'Diemesė: Šėts poslapis ėštrints po šėta, kumet pradiejot redagoutė!', -'recreate' => 'Atkortė', - -# action=purge -'confirm_purge_button' => 'Tink', - -# Multipage image navigation -'imgmultipageprev' => '← unkstesnis poslapis', -'imgmultipagenext' => 'kėts poslapis →', -'imgmultigo' => 'Ētė!', -'imgmultigoto' => 'Ētė i poslapi $1', - -# Table pager -'ascending_abbrev' => 'dėdiejėma tvarka', -'descending_abbrev' => 'mažiejontė tvarka', -'table_pager_next' => 'Kėts poslapis', -'table_pager_prev' => 'Onkstesnis poslapis', -'table_pager_first' => 'Pėrms poslapis', -'table_pager_last' => 'Paskotėnis poslapis', -'table_pager_limit' => 'Ruodītė $1 elementu par poslapi', -'table_pager_limit_submit' => 'Ruodītė', -'table_pager_empty' => 'Juokiū rezoltatu', - -# Auto-summaries -'autosumm-blank' => 'Šalėnams ciels torėnīs ėš poslapė', -'autosumm-replace' => "Poslapis keitams so '$1'", -'autoredircomment' => 'Nukreipama i [[$1]]', -'autosumm-new' => 'Naus poslapis: $1', - -# Live preview -'livepreview-loading' => 'Kraunama īr…', -'livepreview-ready' => 'Ikeliama… Padarīta!', - -# Friendlier slave lag warnings -'lag-warn-normal' => 'Pakeitėmā, naujesnė kāp $1 {{PLURAL:$1|sekondė|sekondės|sekondiu}}, tamė sārašė gal būtė neruodomė.', -'lag-warn-high' => 'Dielē dėdlė doumenū bazės pasėlikėma pakeitėmā, naujesnė nēgo $1 {{PLURAL:$1|sekondė|sekondės|sekondiu}}, tamė sarašė gal būtė neruodomė.', - -# Watchlist editor -'watchlistedit-numitems' => 'Tamstas keravuojamu sārašė īr $1 poslapiu neskaitliuojant aptarėmu poslapiu.', -'watchlistedit-noitems' => 'Tamstas keravuojamu sārašė nė juokiū poslapiu.', -'watchlistedit-normal-title' => 'Keistė keravuojamu sāroša', -'watchlistedit-normal-legend' => 'Šalėntė poslapios ėš keravuojamu sāraša', -'watchlistedit-normal-explain' => 'Žemiau īr ruodomė poslapē Tamstas keravuojamu sārašė. -Nuoriedamė pašalėntė poslapi, pri anuo oždiekėt varnale ė paspauskėt „Šalėntė poslapios“. -Tamsta tēpuogi galėt [[Special:Watchlist/raw|redagoutė grīnaji keravuojamu sāraša]].', -'watchlistedit-normal-submit' => 'Šalėntė poslapios', -'watchlistedit-normal-done' => '$1 {{PLURAL:$1|poslapis bova pašalėnts|poslapē bova pašalėntė|poslapiu bova pašalėnta}} ėš Tamstas keravuojamu saraša:', -'watchlistedit-raw-title' => 'Keistė grīnōjė keravuojamu sāraša', -'watchlistedit-raw-legend' => 'Keistė grīnōjė keravuojamu sāraša', -'watchlistedit-raw-explain' => 'Žemiau ruodomė poslapē Tamstas keravuojamu sārašė, ė gal būtė pridietė i a pašalėntė ėš sāraša; vėins poslapis eilotie. Bėngė paspauskėt „Atnaujėntė keravuojamu sāraša“. Tamsta tēpuogi galėt [[Special:Watchlist/edit|nauduotė standartėni radaktuoriu]].', -'watchlistedit-raw-titles' => 'Poslapē:', -'watchlistedit-raw-submit' => 'Atnaujėntė keravuojamu sāraša', -'watchlistedit-raw-done' => 'Tamstas keravuojamu sārošos bova atnaujėnts.', -'watchlistedit-raw-added' => '$1 {{PLURAL:$1|poslapis bova pridiets|poslapē bova pridietė|poslapiu bova pridieta}}:', -'watchlistedit-raw-removed' => '$1 {{PLURAL:$1|poslapis bova pašalėnts|poslapē bova pašalėntė|poslapiu bova pašalėnta}}:', - -# Watchlist editing tools -'watchlisttools-view' => 'Veizietė sosėjosius pakeitėmus', -'watchlisttools-edit' => 'Veizietė ėr keistė keravuojamu straipsniu sāraša', -'watchlisttools-raw' => 'Keistė nebėngta keravuojamu straipsniu sāraša', - -# Special:Version -'version' => 'Versėjė', -'version-license' => 'Licenzėjė', - -# Special:FilePath -'filepath' => 'Faila maršrots', -'filepath-page' => 'Fails:', - -# Special:FileDuplicateSearch -'fileduplicatesearch' => 'Ėiškuotė doblikoutu failu', -'fileduplicatesearch-legend' => 'Ėiškuotė doblėkatu', -'fileduplicatesearch-filename' => 'Faila vards:', -'fileduplicatesearch-submit' => 'Ėiškuotė', -'fileduplicatesearch-info' => '$1 × $2 pėkseliu
    Faila dėdoms: $3
    MIME tėps: $4', - -# Special:SpecialPages -'specialpages' => 'Specēlė̅jė poslapē', -'specialpages-note' => '---- -* Normalūs specēlė̅jė puslapē. -* Apribuotė specēlė̅jė puslapē.', -'specialpages-group-maintenance' => 'Sėstemas palaikīma pranešėmā', -'specialpages-group-other' => 'Kėtė specēlė̅jė poslapē', -'specialpages-group-login' => 'Prisėjongėms / Registracėjė', -'specialpages-group-changes' => 'Vielībiė̅ jė pakeitėmā ė regėstrā', -'specialpages-group-media' => 'Infuormacėjė aple failus ėr anū pakruovėms', -'specialpages-group-users' => 'Nauduotuojē ė teisės', -'specialpages-group-highuse' => 'Platē nauduojamė poslapē', -'specialpages-group-pages' => 'Poslapiu sarašas', -'specialpages-group-pagetools' => 'Poslapiu rakondā', -'specialpages-group-wiki' => 'Wiki doumenīs ė rakondā', -'specialpages-group-redirects' => 'Specēlė̅jė nukreipėma poslapē', -'specialpages-group-spam' => 'Šlamšta valdīma rakondā', - -# Special:BlankPage -'blankpage' => 'Toščias poslapis', - -# Special:Tags -'tags-edit' => 'taisītė', - -); +$fallback = 'sgs'; diff --git a/languages/messages/MessagesBcc.php b/languages/messages/MessagesBcc.php index c2ea2591..d6cbb565 100644 --- a/languages/messages/MessagesBcc.php +++ b/languages/messages/MessagesBcc.php @@ -7,6 +7,7 @@ * @ingroup Language * @file * + * @author Huji * @author Mostafadaneshvar * @author ZxxZxxZ */ @@ -153,8 +154,7 @@ $messages = array( 'tog-editsection' => 'فعال کتن کسمت اصلاح از طریق لینکان [edit]', 'tog-editsectiononrightclick' => 'فعال کتن اصلاح کسمت گون کلیک راست اور کسمت عناوین(جاوا)', 'tog-showtoc' => 'جدول محتوای‌ء پیش دار( په صفحیانی که گیش چه 3 عنوانش هست)', -'tog-rememberpassword' => 'منی وارد بیگ ته ای کامپیوتر هیال کن', -'tog-editwidth' => 'جعبه اصلاح مزنی کن تا کل صفحه بگریت', +'tog-rememberpassword' => 'من ورود ته ای کامپیوتر هیال بکن (په $1 {{PLURAL:$1|روچ|روچ}})', 'tog-watchcreations' => 'هور کن منی صفحاتی که من ته لیست چارگ شرکتت', 'tog-watchdefault' => 'هورکن صفحاتی که من اصلاح کتن ته منی لیست چارگ', 'tog-watchmoves' => 'هور کن صفحاتی که من جاه په جاه کت ته منی لیست چارگ', @@ -289,31 +289,20 @@ $messages = array( 'faqpage' => 'Project:ب.ج.س', # Vector skin -'vector-action-addsection' => 'هور کتن عنوان', -'vector-action-delete' => 'زورگ', -'vector-action-move' => 'جاه په جاه', -'vector-action-protect' => 'حفاظت', -'vector-action-undelete' => 'ترینگ', -'vector-action-unprotect' => 'حفاظت درگیزگ', -'vector-namespace-category' => 'دسته', -'vector-namespace-help' => 'تاک راهنما', -'vector-namespace-image' => 'فایل', -'vector-namespace-main' => 'تاک', -'vector-namespace-media' => 'تاک مدیا', -'vector-namespace-mediawiki' => 'کوله', -'vector-namespace-project' => 'تاک پروژه', -'vector-namespace-special' => 'حاصین تاک', -'vector-namespace-talk' => 'گپ', -'vector-namespace-template' => 'تمپلت', -'vector-namespace-user' => 'کاربر تاک', -'vector-view-create' => 'شرکتن', -'vector-view-edit' => 'اصلاح', -'vector-view-history' => 'چارتن تاریح', -'vector-view-view' => 'وانتن', -'vector-view-viewsource' => 'پیشدارگ بن جاه', -'actions' => 'کاران', -'namespaces' => 'فضانامان', -'variants' => 'گوشگان', +'vector-action-addsection' => 'هور کتن عنوان', +'vector-action-delete' => 'زورگ', +'vector-action-move' => 'جاه په جاه', +'vector-action-protect' => 'حفاظت', +'vector-action-undelete' => 'ترینگ', +'vector-action-unprotect' => 'حفاظت درگیزگ', +'vector-view-create' => 'شرکتن', +'vector-view-edit' => 'اصلاح', +'vector-view-history' => 'چارتن تاریح', +'vector-view-view' => 'وانتن', +'vector-view-viewsource' => 'پیشدارگ بن جاه', +'actions' => 'کاران', +'namespaces' => 'فضانامان', +'variants' => 'گوشگان', 'errorpagetitle' => 'حطا', 'returnto' => 'تررگ به $1.', @@ -539,7 +528,7 @@ $2', 'yourname' => 'نام کاربری', 'yourpassword' => 'کلمه رمز', 'yourpasswordagain' => 'کلمه رمز دگه نویس', -'remembermypassword' => 'می ورود ته ای کامپیوتر په حاطر بدار', +'remembermypassword' => 'می ورودءَ ته ای کامپیوتر بدار (په $1 {{PLURAL:$1|روچ|روچ}})', 'yourdomainname' => 'شمی دامین', 'externaldberror' => 'یک حطا دیتابیس تصدیق هویت دراییگی هست یا شما را اجازت نیست وتی حساب درایی په روچ کنیت.', 'login' => 'ورود', @@ -732,7 +721,7 @@ $2', 'usercsspreview' => "''''بزان که شما فقط وتی CSS کاربری بازبینی کنین. هنگنت آیی ذخیره نه بوتت!''''", 'userjspreview' => "''''په یاد دار که شما فقط وتی کاربری JavaScript بازبینی/آزمایش کنگیت، هنگت ذخیره نه بوتت!''''", 'userinvalidcssjstitle' => "'''هوژاری:''هچ جلدی نیست\"\$1\". -بزان که صفحات .css و .js چه عناوین گون هوردین حرف استفاده کننت، مثلا {{ns:user}}:Foo/monobook.css بدل به په {{ns:user}}:Foo/Monobook.css.", +بزان که صفحات .css و .js چه عناوین گون هوردین حرف استفاده کننت، مثلا {{ns:user}}:Foo/vector.css بدل به په {{ns:user}}:Foo/Vector.css.", 'updated' => '(په روچ بیتگین)', 'note' => "'''یادداشت:'''", 'previewnote' => "'''شی فقط یک بازبینی انت; @@ -771,9 +760,6 @@ $2', اگر شما نه لوٹیت شمی نوشتاک گون بی رحمی اصلاح مه بنت، اچه شما آیء ادان دیم مه دهیت.
    شما هنچوش ما را قول دهیت که شما شی وت نوشتت یا ایء چه یک دامین عمومی یا هنچوشین آزاتین منبع کپی کتیت.(بچار $1 په جزییات). ''' نوشتاکی که حق کپی دارنت بی اجازت دیم مه دهیت!'''", -'longpagewarning' => "'''هوژاری. ای صفحه $1 کیلوبایت نت; -لهتی چه بروزران شاید مشکلاتی چه دست رسی و اصلاح صفحات گیش چه 32ک.ب داشته بنت. -لطفا توجه کنیت په هورد کتن صفحه په هوردترین چنٹ. '''", 'longpageerror' => "'''حطا: متنی که شما دیم داتت $1 کیلو بایتت، که چه گیشترین حد $2 کیلوبایت مزن آی نه تونیت ذخیره بوت.'''", 'readonlywarning' => "'''هوژاری: دیتابیس به تعمیرات کبلنت، اچه شما نه تونیت وتی اصلاحات هنو ذخیره کنیت. @@ -1157,7 +1143,7 @@ $1", 'prefs-advancedrendering' => 'پیشرفتگین گزینه', 'prefs-advancedsearchoptions' => 'پیشرفتگین گزینه', 'prefs-advancedwatchlist' => 'پیشرفتگین گزینه', -'prefs-display' => 'پیشدارگ گزینه هان', +'prefs-displayrc' => 'پیشدارگ گزینه هان', 'prefs-diffs' => 'پرک', # User rights @@ -1263,7 +1249,6 @@ $1", 'right-siteadmin' => 'کبل و پچ دیتابیس', 'right-reset-passwords' => 'کلمه رمز چه دگه کاربران ءَ عوض کن', 'right-override-export-depth' => 'درگیزگ صفحات گون صفحاتی لینک بوتگین ته سطح ۵', -'right-versiondetail' => 'اطلاعات نسخه برنامه گیشترین پیشدار', # User rights log 'rightslog' => 'ورودان حقوق کاربر', @@ -1416,7 +1401,6 @@ $1", لطفا برگردیت و ای فایل گون نوکین نامی آپلود کنیت.[[File:$1|انگشتی|مرکز|$1]]', 'file-exists-duplicate' => 'ای فایل کپیء چه جهلیگین {{PLURAL:$1|فایل|فایلان}}:', 'file-deleted-duplicate' => 'یک فایلی په داب ای فایل ([[:$1]]) پیسرتر حذف بوتگت. شما بایدن تاریح حذف آ فایلء دگه بچاریت', -'successfulupload' => 'آپلود موفق', 'uploadwarning' => 'هوژاری آپلود', 'savefile' => 'ذخیره فایل', 'uploadedimage' => 'اپلود بوت "[[$1]]"', @@ -1452,6 +1436,7 @@ JD # Jenoptik MGP # Pentax PICT # misc. # ', +'upload-success-subj' => 'آپلود موفق', 'upload-proto-error' => 'اشتباه پروتوکل', 'upload-proto-error-text' => 'آپلود دراین نیاز په URL آنی داریت که شروع بیت گون http:// یا ftp://.', @@ -1506,8 +1491,8 @@ PICT # misc. 'filehist-current' => 'هنو', 'filehist-datetime' => 'تاریح/زمان', 'filehist-thumb' => 'بند انگشت', -'filehist-thumbtext' => 'بند انگشتی عکس چه $1', -'filehist-nothumb' => 'بی بند انگشتی', +'filehist-thumbtext' => 'بندانگشتی از نسخهٔ مورخ $1', +'filehist-nothumb' => 'فاقد بندانگشتی', 'filehist-user' => 'کاربر', 'filehist-dimensions' => 'جنبه یان', 'filehist-filesize' => 'اندازه فایل', @@ -1602,7 +1587,6 @@ PICT # misc. 'statistics-edits-average' => 'میانگین اصلاحات ته هر صفحه ای', 'statistics-views-total' => 'چارگان کل', 'statistics-views-peredit' => 'چارگ ته هر اصلاح', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue طول کار] ای', 'statistics-users' => 'ثبت نامی [[Special:ListUsers|users]]', 'statistics-users-active' => 'فعالین کاربر', 'statistics-users-active-desc' => 'کاربرانی که ته پیشگین {{PLURAL:$1|روچ|$1 روچان}} کاری اش کتت', @@ -1819,7 +1803,6 @@ PICT # misc. # Watchlist 'watchlist' => 'منی لیست چارگ', 'mywatchlist' => 'منی لیست چارگ', -'watchlistfor' => "(په '''$1''')", 'nowatchlist' => 'شما را هچ چیزی ته وتی لیست چارگ نیست.', 'watchlistanontext' => 'لطفا $1 په دیستن یا اصلاح ایتیمان ته وتی لیست چارگء', 'watchnologin' => 'وارد نه بی تگیت', @@ -1936,7 +1919,9 @@ $NEWPAGE 'revertpage' => 'ترینت اصلاحات توسط [[Special:Contributions/$2|$2]] ([[User talk:$2|گپ کن]])په آهری بازبینی گون [[User:$1|$1]]', 'rollback-success' => 'اصلاحات ترینگ بوتت گون $1; په آهری نسخه ترینگ بوتنت گون $2.', -'sessionfailure' => 'چوش جاه کیت که گون شمی نند وارد بییگ مشکلی هست; + +# Edit tokens +'sessionfailure' => 'چوش جاه کیت که گون شمی نند وارد بییگ مشکلی هست; ای کار په خاطر سوء استفاده چه نندگ کنسل بوت. لطفا بجنیت "back" و صفحه ای که چه آیء اتکگیت دگه بار کنیت او راندء دگه تلاش کنیت.', @@ -2141,7 +2126,6 @@ $1', 'ipb-edit-dropdown' => 'اصلاح کن دلایل محدودیت', 'ipb-unblock-addr' => 'رفع محدودیت $1', 'ipb-unblock' => 'نام کاربری یا آدرس آی پی رفع محدودیت کن', -'ipb-blocklist-addr' => 'به گند هستین محدودیت په $1', 'ipb-blocklist' => 'به گند هنوکین محدودیتان', 'ipb-blocklist-contribs' => 'مشارکت په $1', 'unblockip' => 'کاربر رفع محدودیت کن', @@ -2574,10 +2558,10 @@ $1', 'imagemaxsize' => "محدودیت تصاویر:
    ''(په صفحات توضیح فایل)''", 'thumbsize' => 'اندازه پیج انگشتی', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|صفحه|صفحات}}', -'file-info' => '(اندازه فایل: $1, مایم نوع: $2)', -'file-info-size' => '($1 × $2 پیکسل, اندازه فایل: $3, مایم نوع: $4)', +'file-info' => 'اندازه فایل: $1, مایم نوع: $2', +'file-info-size' => '$1 × $2 پیکسل, اندازه فایل: $3, مایم نوع: $4', 'file-nohires' => 'مزنترین رزلوشن نیست.', -'svg-long-desc' => '(اس وی جی فایل, معمولا $1 × $2 پیکسل, فایل اندازه: $3)', +'svg-long-desc' => 'اس وی جی فایل, معمولا $1 × $2 پیکسل, فایل اندازه: $3', 'show-big-image' => 'کل صفحه', 'show-big-image-thumb' => 'اندازه ای بازبین:$1× $2 pixels', diff --git a/languages/messages/MessagesBcl.php b/languages/messages/MessagesBcl.php index 1ff744dc..655ad38a 100644 --- a/languages/messages/MessagesBcl.php +++ b/languages/messages/MessagesBcl.php @@ -106,8 +106,7 @@ $messages = array( 'tog-editsection' => 'Togótan an paghirá kan seksyon sa paági kan mga takód na [hirá]', 'tog-editsectiononrightclick' => 'Togotan an paghirá kan seksyon sa pag-lagatik sa walá sa mga titulo nin seksyon (JavaScript)', 'tog-showtoc' => 'Ipahilíng an indise kan mga laog (para sa mga pahinang igwang sobra sa 3 pamayohan)', -'tog-rememberpassword' => 'Giromdomón an mga paglaóg ko sa kompyuter na iní', -'tog-editwidth' => 'Nasa pinakahalakbáng na sokol an kahon nin paghirá', +'tog-rememberpassword' => 'Giromdomón an mga paglaóg ko sa kompyuter na iní (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Idúgang an mga pahinang ginigíbo ko sa pigbabantayan ko', 'tog-watchdefault' => 'Idúgang an mga pahinang pighíhirá ko sa pigbabantayan ko', 'tog-watchmoves' => 'Idúgang an mga pahinang piglilípat ko sa pigbabantayan ko', @@ -236,12 +235,11 @@ $messages = array( 'faqpage' => 'Project:HD', # Vector skin -'vector-action-delete' => 'paráon', -'vector-action-move' => 'Ibalyó', -'vector-namespace-main' => 'Pahina', -'vector-view-create' => 'Maggíbo', -'vector-view-edit' => 'Liwatón', -'vector-view-view' => 'Basáhon', +'vector-action-delete' => 'paráon', +'vector-action-move' => 'Ibalyó', +'vector-view-create' => 'Maggíbo', +'vector-view-edit' => 'Liwatón', +'vector-view-view' => 'Basáhon', 'errorpagetitle' => 'Salâ', 'returnto' => 'Magbwelta sa $1.', @@ -444,7 +442,7 @@ Nagibo na an ''account'' mo. Giromdomon tabi na ribayán an saimong mga kabôtan 'yourname' => 'Pangaran kan paragamit:', 'yourpassword' => 'Sekretong panlaog:', 'yourpasswordagain' => 'Itaták giraray an sekretong panlaog:', -'remembermypassword' => 'Giromdomon an paglaog ko sa kompyuter na ini', +'remembermypassword' => 'Giromdomon an paglaog ko sa kompyuter na ini(for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => "An saimong ''domain'':", 'externaldberror' => "Igwang nin salang panluwas pantunay kan base nin datos o dai ka pigtotogotan na bâgohon an saimong panluwas na ''account''.", 'login' => 'Maglaog', @@ -608,7 +606,7 @@ Kun dai tinuyong nakaabot ka digdi, pindoton sana an back sa browser mo.', 'userjsyoucanpreview' => "'''Tip:''' Gamiton an 'Show preview' para testingon an bâgong JS bago magtagama.", 'usercsspreview' => "'''Giromdomon tabî na pigpapatânaw sana saimo an CSS nin parágamit, dai pa ini nakatagama!'''", 'userjspreview' => "'''Giromdomon tabi na pigtetest/pighihiling mo sana an patanaw kan saimong JavaScript nin paragamit, dai pa ini naitagama!'''", -'userinvalidcssjstitle' => "'''Patanid:''' Mayong ''skin'' na \"\$1\". Giromdomon tabî na an .css asin .js na mga páhina naggagamit nin titulong nakasurat sa sadit na letras, halimbawa {{ns:user}}:Foo/monobook.css bakong {{ns:user}}:Foo/Monobook.css.", +'userinvalidcssjstitle' => "'''Patanid:''' Mayong ''skin'' na \"\$1\". Giromdomon tabî na an .css asin .js na mga páhina naggagamit nin titulong nakasurat sa sadit na letras, halimbawa {{ns:user}}:Foo/vector.css bakong {{ns:user}}:Foo/Vector.css.", 'updated' => '(Binàgo)', 'note' => "'''Paisi:'''", 'previewnote' => "'''Patànaw sana ini; dai pa naitagama an mga pagbabàgo!'''", @@ -643,8 +641,6 @@ Pigpropromesa mo man samuyà na ika an kagsurat kaini, o kinopya mo ini sa domin '''DAI TABÌ MAGSUMITIR NIN MGA GIBONG IPINAPANGALAD NA KOPYAHON NIN MAYONG PERMISO!'''", 'copyrightwarning2' => "Giromdomon tabì na an gabos na kontribusyon sa {{SITENAME}} pwedeng hirahón, bàgohon o halion kan ibang mga parágamit. Kun habô mong mahirá an saimomg sinurat na mayong pakimàno, pues, dai tabì isumitir iyan digdi.
    Pigpapangakò mo man samuyà na ika an nagsurat kaini, o pigkopya mo ini sa dominiong panpubliko o sarong parehong libreng rekurso (hilingon an $1 para sa mga detalye). '''DAI TABÌ MAGSUMITIR NIN MGA GIBONG IPINAPANGALAD NA KOPYAHON NIN MAYONG PERMISO!'''", -'longpagewarning' => "'''PATANID: $1 na kilobytes na kalabà an pahinang ini; an ibang mga browser pwedeng magkaproblema sa paghirá nin mga pahinang haros o sobra sa 32 kb. -Paki bangâ ini sa saradit na seksyon.'''", 'longpageerror' => "'''SALÀ: $1 na kilobytes na kalabà an pahinang isinumitir mo, na mas halabà sa hanggan nin $2 na kilobytes. Dai pwede ining itagama.'''", 'readonlywarning' => "'''PATANID: Nakakandado an base nin datos para sa pagmantinir, pues, dai mo mûna pwede na itagama an mga paghirá mo. Pwede mo pa man na arogon dangan ipaskil ang teksto sa sarong dokumento arog kan MS Word asbp. asin itagama ini para sa atyan.'''", 'protectedpagewarning' => "'''PATANID: Nakakandado ining pahina tangarig an mga parágamit na may priblehiyo nin ''sysop'' sana an pwedeng maghira kaini.'''", @@ -969,7 +965,6 @@ Kun an sinosog na ''file'' iyo an parehong ladawan na nasa dating sokol, dai na Kun igwa ka nin ladawan na may resolusyón na maximo ikarga tabî ini, kun dai, bâgohon tabî an pangaran nin ''file''.", 'fileexists-forbidden' => "Igwa nang ''file'' na may parehong pangaran; bumalik tabi asin ikarga an ''file'' sa bâgong pangaran [[File:$1|thumb|center|$1]]", 'fileexists-shared-forbidden' => "Igwa nang ''file'' na may parehong pangaran sa repositoryo nin mga bakas na ''file''; bumalik tabî asin ikarga an ''file'' sa bâgong pangaran. [[File:$1|thumb|center|$1]]", -'successfulupload' => 'Nakarga na', 'uploadwarning' => 'Patanid sa pagkarga', 'savefile' => "Itagama an ''file''", 'uploadedimage' => 'Ikinarga "[[$1]]"', @@ -987,6 +982,7 @@ Kun igwa ka nin ladawan na may resolusyón na maximo ikarga tabî ini, kun dai, Isipon tabi kun maninigo an pagkarga giraray kaini. An historial nin pagparâ kan ''file'' nakakaag digdi para sa konbenyensya:", 'filename-bad-prefix' => "An pangaran nin ''file'' na pigkakarga mo nagpopoon sa '''\"\$1\"''', sarong pangaran na dai makapaladawan na normalmente enseguidang pigtatao kan mga kamerang digital. Magpili tabî nin pangaran nin ''file'' na mas makapaladawan.", +'upload-success-subj' => 'Nakarga na', 'upload-proto-error' => 'Salang protocolo', 'upload-proto-error-text' => 'An pagkargang panharayo kaipuhan nin mga URLs na nagpopoon sa http:// o ftp://.', @@ -1239,7 +1235,6 @@ o habo magresibo nin e-surat sa ibang paragamit.', # Watchlist 'watchlist' => 'Pigbabantayan ko', 'mywatchlist' => 'Pigbabantayan ko', -'watchlistfor' => "(para sa '''$1''')", 'nowatchlist' => 'Mayo ka man na mga bagay saimong lista nin pigbabantayan.', 'watchlistanontext' => 'Mag $1 tabi para mahiling o maghira nin mga bagay saimong lista nin mga pigbabantayan.', 'watchnologin' => 'Mayô sa laog', @@ -1343,7 +1338,9 @@ Huring hirá ni [[User:$3|$3]] ([[User talk:$3|Olay]]).', 'editcomment' => "Ini an nakakaag na komentaryo sa paghirá: \"''\$1''\".", 'revertpage' => 'Binawî na mga paghirá kan [[Special:Contributions/$2|$2]] ([[User talk:$2|Magtaram]]); pigbalik sa dating bersyón ni [[User:$1|$1]]', 'rollback-success' => 'Binawî na mga paghirá ni $1; pigbalik sa dating bersyón ni $2.', -'sessionfailure' => "Garo may problema sa paglaog mo; + +# Edit tokens +'sessionfailure' => "Garo may problema sa paglaog mo; kinanselár ining aksyón bilang sarong paglikay kontra sa ''session hijacking''. Pindotón tabî an \"back\" asin ikarga giraray an páhinang ginikanan mo, dangan probarán giraray.", @@ -1507,7 +1504,6 @@ Magkaag nin espisipikong rason (halimbawa, magtao nin ehemplo kan mga páhinang 'ipb-edit-dropdown' => 'Hirahón an mga rasón sa pagbabagát', 'ipb-unblock-addr' => 'Paagihon $1', 'ipb-unblock' => 'Bawion an pagbagat nin ngaran nin paragamit o direccion nin IP', -'ipb-blocklist-addr' => 'Hilingón an mga presenteng pagbagat ki $1', 'ipb-blocklist' => 'Hilingon an mga presenteng binagat', 'unblockip' => 'Paagihon an parâgamit', 'unblockiptext' => 'Gamiton an pormulario sa baba para puede giraray suratan an dating binagat na direccion nin IP address o ngaran nin paragamit.', @@ -1832,10 +1828,10 @@ $1", 'imagemaxsize' => 'Limitaran an mga ladawan sa mga páhinang deskripsyon kan ladawan sa:', 'thumbsize' => 'Sokol nin retratito:', 'widthheightpage' => '$1×$2, $3 mga pahina', -'file-info' => "(sokol kan ''file'': $1, tipo nin MIME: $2)", -'file-info-size' => "($1 × $2 na pixel, sokol kan ''file'': $3, tipo nin MIME: $4)", +'file-info' => "sokol kan ''file'': $1, tipo nin MIME: $2", +'file-info-size' => "$1 × $2 na pixel, sokol kan ''file'': $3, tipo nin MIME: $4", 'file-nohires' => 'Mayong mas halangkaw na resolusyón.', -'svg-long-desc' => '(file na SVG, haros $1 × $2 pixels, sokol kan file: $3)', +'svg-long-desc' => 'file na SVG, haros $1 × $2 pixels, sokol kan file: $3', 'show-big-image' => 'Todong resolusyon', 'show-big-image-thumb' => 'Sokol kan patânaw: $1 × $2 na pixel', diff --git a/languages/messages/MessagesBe.php b/languages/messages/MessagesBe.php index cac6f5a8..4528886e 100644 --- a/languages/messages/MessagesBe.php +++ b/languages/messages/MessagesBe.php @@ -59,7 +59,11 @@ $namespaceNames = array( NS_CATEGORY_TALK => 'Размовы_пра_катэгорыю', ); -$separatorTransformTable = array(',' => '.', '.' => ',' ); +# Per discussion on http://translatewiki.net/wiki/Thread:Support/Customization_of number format +$separatorTransformTable = array( + ',' => "\xc2\xa0", # nbsp + '.' => ',' +); $linkTrail = '/^([абвгґджзеёжзійклмнопрстуўфхцчшыьэюяćčłńśšŭźža-z]+)(.*)$/sDu'; @@ -79,8 +83,7 @@ $messages = array( 'tog-editsection' => 'Праўка падраздзелаў праз спасылкі "[правіць]"', 'tog-editsectiononrightclick' => 'Праўка падраздзелаў па правым пстрыку на загалоўку (Яваскрыпт)', 'tog-showtoc' => 'Паказваць змест (для старонак, дзе больш за 3 падзагалоўкі)', -'tog-rememberpassword' => 'Памятаць ад сеансу да сеансу', -'tog-editwidth' => 'Пашыраць рэдактарскае акно да поўнай шырыні экрана', +'tog-rememberpassword' => 'Памятаць уваходныя даныя ў гэтым браўзеры (не даўжэй за $1 {{PLURAL:$1|дзень|дні|дзён}})', 'tog-watchcreations' => 'Старонкі, створаныя мной, дадаюцца да назіранага', 'tog-watchdefault' => 'Старонкі, праўленыя мной, дадаюцца да назіранага', 'tog-watchmoves' => 'Старонкі, перанесеныя мной, дадаюцца да назіранага', @@ -226,31 +229,21 @@ $messages = array( 'faqpage' => 'Project:ЧАПЫ', # Vector skin -'vector-action-addsection' => 'Дадаць тэму', -'vector-action-delete' => 'Сцерці', -'vector-action-move' => 'Перанесці', -'vector-action-protect' => 'Ахова', -'vector-action-undelete' => 'Аднавіць', -'vector-action-unprotect' => 'Зняць ахову', -'vector-namespace-category' => 'Катэгорыя', -'vector-namespace-help' => 'Старонка даведкі', -'vector-namespace-image' => 'Файл', -'vector-namespace-main' => 'Старонка', -'vector-namespace-media' => 'Мультымедыя', -'vector-namespace-mediawiki' => 'Паведамленне', -'vector-namespace-project' => 'Аб праекце', -'vector-namespace-special' => 'Адмысловая старонка', -'vector-namespace-talk' => 'Размовы', -'vector-namespace-template' => 'Шаблон', -'vector-namespace-user' => 'Старонка', -'vector-view-create' => 'Стварыць', -'vector-view-edit' => 'Правіць', -'vector-view-history' => 'Паказаць гісторыю', -'vector-view-view' => 'Чытаць', -'vector-view-viewsource' => 'Паказаць выточны тэкст', -'actions' => 'Дзеянні', -'namespaces' => 'Прасторы імёнаў', -'variants' => 'Варыянты', +'vector-action-addsection' => 'Дадаць тэму', +'vector-action-delete' => 'Сцерці', +'vector-action-move' => 'Перанесці', +'vector-action-protect' => 'Ахова', +'vector-action-undelete' => 'Аднавіць', +'vector-action-unprotect' => 'Зняць ахову', +'vector-simplesearch-preference' => 'Уключыць пашыраны пошук прапаноў (толькі для тэмы Vector)', +'vector-view-create' => 'Стварыць', +'vector-view-edit' => 'Правіць', +'vector-view-history' => 'Паказаць гісторыю', +'vector-view-view' => 'Чытаць', +'vector-view-viewsource' => 'Паказаць выточны тэкст', +'actions' => 'Дзеянні', +'namespaces' => 'Прасторы імёнаў', +'variants' => 'Варыянты', 'errorpagetitle' => 'Памылка', 'returnto' => 'Вярнуцца да $1.', @@ -311,6 +304,9 @@ $messages = array( Калі ласка, трохі пачакайце, перш чым адкрываць гэтую старонку ізноў. $1', +'pool-timeout' => 'Выйшаў час чакання блакіроўкі', +'pool-queuefull' => 'Чарга запытаў перапоўнена', +'pool-errorunknown' => 'Невядомая памылка', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Пра {{GRAMMAR:вінавальны|{{SITENAME}}}}', @@ -473,7 +469,8 @@ $2', 'yourname' => 'Імя ўдзельніка', 'yourpassword' => 'Пароль', 'yourpasswordagain' => 'Паўтарыце пароль', -'remembermypassword' => 'Памятаць мяне', +'remembermypassword' => "Памятаць мяне на гэтым камп'ютары (не даўжэй за $1 {{PLURAL:$1|дзень|дзён}})", +'securelogin-stick-https' => 'Працягваць злучэнне па HTTPS пасля ўвахода', 'yourdomainname' => 'Ваш дамен', 'externaldberror' => 'Або памылка вонкавай аўтэнтыкацыі ў базе дадзеных, або вам не дазволена абнаўляць свой вонкавы рахунак.', 'login' => 'Увайсці ў сістэму', @@ -490,6 +487,7 @@ $2', 'gotaccount' => "Ужо маеце рахунак? '''$1'''.", 'gotaccountlink' => 'Увайсці ў сістэму', 'createaccountmail' => 'праз эл.пошту', +'createaccountreason' => 'Прычына:', 'badretype' => 'Уведзеныя паролі не аднолькавыя.', 'userexists' => 'Такое імя ўдзельніка ўжо занятае. Трэба выбраць іншае імя.', @@ -508,6 +506,7 @@ $2', 'wrongpasswordempty' => 'Быў уведзены пусты пароль. Паспрабуйце нанова.', 'passwordtooshort' => 'Трэба, каб у паролі было найменей {{PLURAL:$1|1 знак|$1 знакаў}}.', 'password-name-match' => 'Ваш пароль павінен адрознівацца ад імя карыстальніка.', +'password-login-forbidden' => 'Выкарыстанне гэтага імя карыстальніка і пароля было забаронена.', 'mailmypassword' => 'Адаслаць новы пароль эл.поштай', 'passwordremindertitle' => 'Нагаданне пра пароль ад {{SITENAME}}', 'passwordremindertext' => 'Нехта (магчыма, што вы, з адрасу IP $1) папрасіў выслаць новы пароль для пляцоўкі {{SITENAME}} ($4). Для ўдзельніка "$2" быў створаны тымчасовы пароль: "$3". @@ -541,6 +540,9 @@ $2', 'loginlanguagelabel' => 'Мова: $1', 'suspicious-userlogout' => 'Ваш запыт на выхад быў адмоўлены, паколькі ён выглядае як накіраваны са зламанага браўзера або кэшаванне проксі-сервераў.', +# E-mail sending +'php-mail-error-unknown' => 'Невядомая памылка ў функцыі PHP-пошты', + # Password reset dialog 'resetpass' => 'Змяніць пароль', 'resetpass_announce' => 'Вы ўвайшлі ў сістэму пад тымчасовым паролем, прысланым эл.поштай. Каб правільна аформіць уваход, належыць вызначыць новы пароль вось тут:', @@ -591,9 +593,10 @@ $2', 'showlivepreview' => 'Жывы перадпаказ', 'showdiff' => 'Розніца', 'anoneditwarning' => 'Вы не ўвайшлі ў сістэму. Таму, калі вы запішаце старонку, у яе гісторыю трапіць ваш адрас IP.', +'anonpreviewwarning' => "''Вы не прайшлі ідэнтыфікацыю Захаванне будзе запісана з вашым IP адрасам у гісторыі правак гэтай старонкі.''", 'missingsummary' => "'''Нагадваем''': вы не ўпісалі тлумачэння для сваёй праўкі. Калі націснуць Запісаць яшчэ раз, праўка будзе замацавана без тлумачэння.", 'missingcommenttext' => 'Калі ласка, увядзіце ніжэй каментарый.', -'missingcommentheader' => "'''Увага:''' вы нічога не ўпісалі ў полі тэмы/загалоўку гэтай заўвагі. Націсканне '{{:{{ns:mediawiki}}:savearticle/be}}' замацуе вашую праўку з пустым полем тэмы/загалоўку.", +'missingcommentheader' => "'''Увага:''' вы нічога не ўпісалі ў тэму/загаловак гэтай заўвагі. Націсканне '{{int:savearticle}}' замацуе вашую праўку з пустой тэмай/загалоўкам.", 'summary-preview' => 'Перадпаказ апісання:', 'subject-preview' => 'Перадпаказ тэмы/загалоўка:', 'blockedtitle' => 'Удзельнік заблакаваны', @@ -655,7 +658,11 @@ $2', 'userjsyoucanpreview' => "'''Парада:''' Карыстайцеся кнопкай \"''{{int:showpreview}}''\" для выпрабоўвання новага коду JS ''перад тым'', як яго запісваць.", 'usercsspreview' => "'''Памятайце, што гэта толькі папярэдні паказ вашага ўласнага CSS. Праўкі яшчэ не замацаваныя!'''", 'userjspreview' => "'''Памятайце, што гэта выпрабаванне/папярэдні паказ вашага ўласнага Яваскрыпту, які яшчэ не быў замацаваны!'''", -'userinvalidcssjstitle' => "'''Увага:''' Няма вокладкі з назвай \"\$1\". Памятайце, што свае старонкі .css і .js называюцца толькі малымі літарамі, такім чынам, напр., {{ns:user}}:Foo/monobook.css, а не {{ns:user}}:Foo/Monobook.css.", +'sitecsspreview' => "'''Памятайце, што гэта толькі папярэдні паказ вашага CSS.''' +'''Праўкі яшчэ не замацаваныя!'''", +'sitejspreview' => "'''Памятайце, што гэта толькі папярэдні паказ вашага JavaScript.''' +'''Праўкі яшчэ не замацаваныя!'''", +'userinvalidcssjstitle' => "'''Увага:''' Няма вокладкі з назвай \"\$1\". Памятайце, што свае старонкі .css і .js называюцца толькі малымі літарамі, такім чынам, напр., {{ns:user}}:Foo/vector.css, а не {{ns:user}}:Foo/Vector.css.", 'updated' => '(абноўлена)', 'note' => "'''Заўвага:'''", 'previewnote' => "'''Гэта папярэдні паказ; праўкі яшчэ не замацаваныя!'''", @@ -690,8 +697,6 @@ $2', 'copyrightwarning2' => "Заўважце, што кожны ўклад на {{SITENAME}} можа быць папраўлены, зменены або выдалены іншымі ўдзельнікамі. Калі вы не жадаеце, каб вашыя матэрыялы бязлітасна правіліся, то і не давайце іх сюды.
    Таксама вы нам абяцаеце, што напісалі гэта самі, або скапіравалі з рэсурсу, які знаходзіцца ў публічнай уласнасці, або з аналагічнага свабоднага рэсурсу (бач падрабязнасці на $1). '''НЕ КЛАДЗІЦЕ СЮДЫ, БЕЗ АДПАВЕДНАГА ДАЗВОЛУ, МАТЭРЫЯЛУ, ЯКІ АХОЎВАЕЦЦА АЎТАРСКІМ ПРАВАМ!'''", -'longpagewarning' => "'''УВАГА: Старонка дасягае аб'ёму $1 кілабайтаў; некаторыя браўзеры не адольваюць старонак з аб'ёмам, блізкім ці большым за 32 kб. -Падумайце, ці можна падзяліць старонку на некалькі меншых.'''", 'longpageerror' => "'''ПАМЫЛКА: немагчыма запісаць ваш тэкст, бо яго аб'ём $1 кілабайтаў, а дазволены максімум — $2 кілабайтаў.'''", 'readonlywarning' => "'''УВАГА: зараз вы не можаце запісаць свае праўкі, таму што база даных зачынена на абслугоўванне. Магчыма, варта перанесці ваш тэкст у асобны файл і запісаць на потым. @@ -852,6 +857,8 @@ $2', $1", 'logdelete-success' => "'''Бачнасць падзеі настаўленая паспяхова.'''", 'revdel-restore' => 'Памяняць бачнасць', +'revdel-restore-deleted' => 'Выдаленыя змены', +'revdel-restore-visible' => 'Бачныя змены', 'pagehist' => 'Гісторыя старонкі', 'deletedhist' => 'Сцёртая гісторыя', 'revdelete-content' => 'змест', @@ -924,7 +931,7 @@ $1", 'compareselectedversions' => 'Параўнаць азначаныя версіі', 'showhideselectedversions' => 'Паказаць/схаваць выбраныя версіі', 'editundo' => 'адкат', -'diff-multi' => '(Не паказан{{PLURAL:$1|а адна прамежкавая версія|ы $1 прамежкавых версій}}.)', +'diff-multi' => '(не паказан{{PLURAL:$1|а адна прамежкавая версія|ы $1 прамежкавых версій}}, зроблен{{PLURAL:$2|ая ўдзельнікам|ыя $2 удзельнікамі}})', # Search results 'searchresults' => 'Вынікі пошуку', @@ -1031,6 +1038,7 @@ $1", 'contextlines' => 'Радкоў на вынік:', 'contextchars' => 'Кантэксту на радок:', 'stub-threshold' => 'Парог для паказу спасылкі як на пачатковы артыкул (у байтах):', +'stub-threshold-disabled' => 'Не ўключана', 'recentchangesdays' => 'За колькі дзён паказваць {{lc:{{:{{ns:mediawiki}}:recentchanges/be}}}}:', 'recentchangesdays-max' => '(найбольш $1 {{PLURAL:$1|дзень|дзён}})', 'recentchangescount' => 'Прадвызначаная колькасць правак дзеля паказу:', @@ -1064,6 +1072,7 @@ $1", 'prefs-files' => 'Файлы', 'prefs-custom-css' => 'Уласны CSS', 'prefs-custom-js' => 'Уласны JS', +'prefs-common-css-js' => 'Агульны CSS/JavaScript для ўсіх вокладак:', 'prefs-reset-intro' => 'Тут можна вярнуць свае настаўленні да прадвызначэнняў, прынятых на гэтай пляцоўцы. Адкаціць гэтае дзеянне нельга.', 'prefs-emailconfirm-label' => 'Пацверджанне адрасу эл.пошты:', @@ -1100,9 +1109,14 @@ $1", 'prefs-advancedrendering' => 'Ускладненыя настаўленні', 'prefs-advancedsearchoptions' => 'Ускладненыя настаўленні', 'prefs-advancedwatchlist' => 'Ускладненыя настаўленні', -'prefs-display' => 'Паказ', +'prefs-displayrc' => 'Паказ', +'prefs-displaysearchoptions' => 'Паказ', +'prefs-displaywatchlist' => 'Паказ', 'prefs-diffs' => 'Розніцы', +# User preference: e-mail validation using jQuery +'email-address-validity-invalid' => 'Увядзіце слушны адрас электроннай пошты', + # User rights 'userrights' => 'Распараджэнне правамі ўдзельніка', 'userrights-lookup-user' => 'Распараджацца групамі ўдзельнікаў', @@ -1186,6 +1200,7 @@ $1", 'right-hideuser' => 'Забараняць імя ўдзельніка і рабіць яго нябачным', 'right-ipblock-exempt' => 'Перамагаць забароны на IP, аўта- і дыяпазонныя забароны', 'right-proxyunbannable' => 'Перамагаць аўтаматычныя забароны на проксі', +'right-unblockself' => 'Разблакаваць іх', 'right-protect' => 'Мяняць узроўні аховы і правіць старонкі, што пад аховай', 'right-editprotected' => 'Правіць старонкі, што пад аховай (але без каскаднай аховы)', 'right-editinterface' => 'Правіць карыстальніцкі інтэрфейс', @@ -1258,14 +1273,9 @@ $1", 'recentchanges-legend' => 'Магчымасці паказу', 'recentchangestext' => 'Гэта апошнія мены на пляцоўцы {{SITENAME}}.', 'recentchanges-feed-description' => 'Сачыць за найбольш актуальнымі змяненнямі ў віксе праз гэты струмень навін.', -'recentchanges-label-legend' => 'Азначэнні: $1.', -'recentchanges-legend-newpage' => '$1 - новая старонка', 'recentchanges-label-newpage' => 'Гэтай праўкай была створана новая старонка', -'recentchanges-legend-minor' => '$1 - дробная праўка', 'recentchanges-label-minor' => 'Гэта дробная па значэнні праўка', -'recentchanges-legend-bot' => '$1 - праўка робата', 'recentchanges-label-bot' => 'Праўка была зробленая праграмай-робатам', -'recentchanges-legend-unpatrolled' => '$1 - няўхваленая праўка', 'recentchanges-label-unpatrolled' => 'Праўка яшчэ не атрымала адзнакі ўхваленасці (за ёй не сочыць "патруль")', 'rcnote' => "Ніжэй паказан{{PLURAL:$1|а '''1''' змяненне|ыя апошнія '''$1''' змяненняў}} за апошні{{PLURAL:$2| дзень|я '''$2''' дзён}}, паводле стану на $5, $4.", 'rcnotefrom' => 'Ніжэй знаходзяцца змены з $2 (да $1 на старонку).', @@ -1312,6 +1322,9 @@ $1", 'upload_directory_missing' => 'Няма каталога для ўкладаў ($1), і серверу не ўдалося яго стварыць.', 'upload_directory_read_only' => 'Немагчыма для веб-сервера запісаць у каталог укладаў ($1).', 'uploaderror' => 'Памылка пры ўкладанні', +'upload-recreate-warning' => "'''Увага''': файл з такім імем быў выдалены або перамешчаны.''' + +Журнал выдалення і перамяшчэння гэтай старонкі прыводзіцца тут для зручнасці:", 'uploadtext' => "Тут можна ўкласці файлы ў вікі. Прагляд або пошук раней укладзенага [[Special:FileList|робіцца тут]]; апроч таго, усе ўкладанні і сціранні адзначаюцца ў журналах [[Special:Log/upload|укладання]] і [[Special:Log/delete|сцірання]], адпаведна. @@ -1343,6 +1356,14 @@ $1", 'filetype-unwanted-type' => "'''\".\$1\"''' належыць да нежаданых тыпаў файлаў. Пажаданы{{PLURAL:\$3| тып файла|я тыпы файлаў}}: \$2.", 'filetype-banned-type' => "'''\".\$1\"''' належыць да недазволеных тыпаў файлаў. Дазволены{{PLURAL:\$3| тып файла|я тыпы файлаў}}: \$2.", 'filetype-missing' => 'Назва файла без суфіксу (напрыклад, ".jpg").', +'empty-file' => 'Файл, які вы прадставілі, быў пусты.', +'file-too-large' => 'Файл, які вы прадставілі быў занадта вялікі.', +'filename-tooshort' => 'Імя файла занадта кароткае.', +'filetype-banned' => 'Гэты тып файлаў забаронены.', +'verification-error' => 'Гэты файл не прайшоў файлавую праверку.', +'illegal-filename' => 'Імя файла не дапускаецца.', +'unknown-error' => 'Невядомая памылка.', +'tmp-create-error' => 'Не атрымалася стварыць часовы файл', 'large-file' => 'Рэкамендуецца, каб файлы былі не большыя за $1; гэты файл ёміць $2.', 'largefileserver' => "Гэты файл большага аб'ёму, чым дазваляе канфігурацыя сервера.", 'emptyfile' => 'Здаецца, што файл, укладзены вамі, пусты. Магчыма, здарылася памылка ў назве файла? Праверце, ці вы сапраўды хацелі ўкласці менавіта гэты файл.', @@ -1366,7 +1387,6 @@ $1", Калі вы жадаеце ўсё ж укласці свой файл, паўтарыце працэдуру ўкладання, але з іншай назвай. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => "Гэты файл з'яўляецца дублікатам наступн{{PLURAL:$1|ага файла|ых файлаў}}:", 'file-deleted-duplicate' => 'Файл, падобны да гэтага ([[:$1]]), быў сцёрты некалі раней. Трэба праверыць гісторыю таго файла перад тым, як укладваць яго нанова.', -'successfulupload' => 'Паспяховае ўкладанне', 'uploadwarning' => 'Папярэджанне пра ўкладанне', 'savefile' => 'Запісаць файл', 'uploadedimage' => 'укладзена "[[$1]]"', @@ -1390,6 +1410,9 @@ $1", Трэба падумаць, ці варта ўкладваць такі файл. Вось, дзеля даведкі, журнал сціранняў:", 'filename-bad-prefix' => "Назва файла, які вы ўкладаеце, пачынаецца з '''\"\$1\"''', што падобна на аўтаматычныя, неінфарматыўныя назвы файлаў, якія робяць лічбавыя фотаапараты. Калі ласка, змяніце назву на больш зразумелую.", +'upload-success-subj' => 'Паспяховае ўкладанне', +'upload-failure-subj' => 'Праблема загрузкі', +'upload-warning-subj' => 'Дадаць папярэджанне', 'upload-proto-error' => 'Няправільны пратакол', 'upload-proto-error-text' => 'Укладанне файла зводдаль патрабуе URL, які пачынаецца з http:// або ftp://.', @@ -1541,7 +1564,6 @@ $1", 'statistics-edits-average' => 'Колькасць правак на 1 старонку', 'statistics-views-total' => 'Усе паказы', 'statistics-views-peredit' => 'Колькасць паказаў на 1 праўку', -'statistics-jobqueue' => 'Даўжыня [http://www.mediawiki.org/wiki/Manual:Job_queue чаргі задач]', 'statistics-users' => 'Registered [[Special:ListUsers|users]]', 'statistics-users-active' => 'Актыўныя ўдзельнікі', 'statistics-users-active-desc' => 'Удзельнікі, якія хоць нешта зрабілі за апошн{{PLURAL:$1|і дзень|ія $1 дзён}}', @@ -1556,7 +1578,7 @@ $1", 'doubleredirects' => 'Падвойныя перасылкі', 'doubleredirectstext' => 'Тут пералічаныя старонкі-перасылкі, якія паказваюць на іншыя перасылкі. Кожны радок утрымлівае спасылкі на першую і другую перасылкі, а таксама мэту другой перасылкі, якая звычайна і ёсць "сапраўдная" мэтавая старонка, на якую павінна была паказваць першая перасылка. -Закрэсленыя складнікі ўжо былі папраўленыя.', +Закрэсленыя складнікі ўжо былі папраўленыя.', 'double-redirect-fixed-move' => 'Назва [[$1]] была перанесена, і зараз перасылае да [[$2]]', 'double-redirect-fixer' => 'Выпраўляльнік перасылак', @@ -1731,34 +1753,35 @@ $1", 'listgrouprights-removegroup-self-all' => 'Выдаліць усе групы са свайго акаунта', # E-mail user -'mailnologin' => 'Няма эл.адрасу', -'mailnologintext' => 'Трэба [[Special:UserLogin|ўвайсці ў сістэму]] і мець пацверджаны адрас эл.пошты ў сваіх [[Special:Preferences|настáўленнях]], каб слаць эл.пошту іншым удзельнікам.', -'emailuser' => 'Эл.пошта ўдзельніка', -'emailpage' => 'Зварот да ўдзельніка праз эл.пошту', -'emailpagetext' => 'Тут можна выслаць эл.пошту гэтаму ўдзельніку. +'mailnologin' => 'Няма эл.адрасу', +'mailnologintext' => 'Трэба [[Special:UserLogin|ўвайсці ў сістэму]] і мець пацверджаны адрас эл.пошты ў сваіх [[Special:Preferences|настáўленнях]], каб слаць эл.пошту іншым удзельнікам.', +'emailuser' => 'Эл.пошта ўдзельніка', +'emailpage' => 'Зварот да ўдзельніка праз эл.пошту', +'emailpagetext' => 'Тут можна выслаць эл.пошту гэтаму ўдзельніку. Адрас эл.пошты, уведзены вамі ў [[Special:Preferences|сваіх настаўленнях]], з\'явіцца ў полі "From" вашага ліста, і атрымальнік зможа адказаць на ваш ліст.', -'usermailererror' => "Паштовы аб'ект паведамляе пра памылку:", -'defemailsubject' => 'эл.пошта {{SITENAME}}', -'noemailtitle' => 'Няма адраса электроннай пошты', -'noemailtext' => 'Удзельнік не паведаміў карэктнага адрасу эл.пошты.', -'nowikiemailtitle' => 'Не дазволеная эл.пошта', -'nowikiemailtext' => 'Гэты ўдзельнік не жадае атрымліваць эл.пошты ад іншых удзельнікаў.', -'email-legend' => 'Адаслаць эл.ліст іншаму ўдзельніку праекта {{SITENAME}}', -'emailfrom' => 'Ад каго:', -'emailto' => 'Каму:', -'emailsubject' => 'Тэма:', -'emailmessage' => 'Тэкст:', -'emailsend' => 'Адаслаць', -'emailccme' => 'Атрымаць копію свайго ліста.', -'emailccsubject' => 'Копія Вашага ліста да $1: $2', -'emailsent' => 'Эл.пошта адаслана', -'emailsenttext' => 'Ваш ліст эл.пошты быў адасланы.', -'emailuserfooter' => 'Гэты эл.ліст быў высланы ад $1 да $2 праз функцыю "{{:{{ns:mediawiki}}:emailuser/be}}" пляцоўкі {{SITENAME}}.', +'usermailererror' => "Паштовы аб'ект паведамляе пра памылку:", +'defemailsubject' => 'эл.пошта {{SITENAME}}', +'usermaildisabled' => 'Электронная пошта ўдзельніка не працуе', +'usermaildisabledtext' => 'Вы не можаце адпраўляць паведамленні электроннай пошты іншым карыстальнікам гэтай вікі', +'noemailtitle' => 'Няма адраса электроннай пошты', +'noemailtext' => 'Удзельнік не паведаміў карэктнага адрасу эл.пошты.', +'nowikiemailtitle' => 'Не дазволеная эл.пошта', +'nowikiemailtext' => 'Гэты ўдзельнік не жадае атрымліваць эл.пошты ад іншых удзельнікаў.', +'email-legend' => 'Адаслаць эл.ліст іншаму ўдзельніку праекта {{SITENAME}}', +'emailfrom' => 'Ад каго:', +'emailto' => 'Каму:', +'emailsubject' => 'Тэма:', +'emailmessage' => 'Тэкст:', +'emailsend' => 'Адаслаць', +'emailccme' => 'Атрымаць копію свайго ліста.', +'emailccsubject' => 'Копія Вашага ліста да $1: $2', +'emailsent' => 'Эл.пошта адаслана', +'emailsenttext' => 'Ваш ліст эл.пошты быў адасланы.', +'emailuserfooter' => 'Гэты эл.ліст быў высланы ад $1 да $2 праз функцыю "{{:{{ns:mediawiki}}:emailuser/be}}" пляцоўкі {{SITENAME}}.', # Watchlist 'watchlist' => 'Мой спіс назіранага', 'mywatchlist' => 'Назіранае', -'watchlistfor' => "(для '''$1''')", 'nowatchlist' => 'Ваш спіс назіранага зараз пусты.', 'watchlistanontext' => 'Каб бачыць або правіць складнікі назіранага, трэба $1.', 'watchnologin' => 'Без прадстаўлення', @@ -1872,7 +1895,9 @@ $NEWPAGE 'editcomment' => "Тлумачэнне праўкі было: \"''\$1''\".", 'revertpage' => 'Праўкі аўтарства [[Special:Contributions/$2|$2]] ([[User talk:$2|размова]]) адкочаныя; вернута апошняя версія аўтарства [[User:$1|$1]]', 'rollback-success' => 'Адкочаны праўкі $1; вернута апошняя версія $2.', -'sessionfailure' => 'Магчыма, ёсць праблемы з вашым сеансам працы ў сістэме. Таму вам было адмоўлена ў выкананні дзеяння, каб засцерагчыся ад захопу сеанса. Націсніце "Назад", і перачытайце старонку, з якой вы сюды прыйшлі, тады паспрабуйце нанова.', + +# Edit tokens +'sessionfailure' => 'Магчыма, ёсць праблемы з вашым сеансам працы ў сістэме. Таму вам было адмоўлена ў выкананні дзеяння, каб засцерагчыся ад захопу сеанса. Націсніце "Назад", і перачытайце старонку, з якой вы сюды прыйшлі, тады паспрабуйце нанова.', # Protect 'protectlogpage' => 'Журнал аховы', @@ -2066,7 +2091,6 @@ $1', 'ipb-edit-dropdown' => 'Прычыны пастаноўкі блока', 'ipb-unblock-addr' => 'Зняць блок з $1', 'ipb-unblock' => 'Зняць блок з імя ўдзельніка або адрасу IP', -'ipb-blocklist-addr' => 'Наяўныя блокі для $1', 'ipb-blocklist' => 'Паказаць наяўныя блокі', 'ipb-blocklist-contribs' => 'Уклад $1', 'unblockip' => 'Зняць блок з удзельніка', @@ -2489,14 +2513,17 @@ $1', 'imagemaxsize' => "Мяжа памеру выяваў:
    ''(на тлумачальных старонках)''", 'thumbsize' => 'Памеры драбніцы:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|старонка|старонак}}', -'file-info' => "(аб'ём файла: $1, тып MIME: $2)", -'file-info-size' => "($1 × $2 кропак, аб'ём файла: $3, тып MIME: $4)", +'file-info' => "аб'ём файла: $1, тып MIME: $2", +'file-info-size' => "$1 × $2 кропак, аб'ём файла: $3, тып MIME: $4", 'file-nohires' => 'Без версіі ў лепшым разрозненні.', -'svg-long-desc' => "(файл SVG, намінальна $1 × $2 кропак, аб'ём файла: $3)", +'svg-long-desc' => "файл SVG, намінальна $1 × $2 кропак, аб'ём файла: $3", 'show-big-image' => 'Найлепшае разрозненне', 'show-big-image-thumb' => 'Памеры гэтага перадпаказу: $1 × $2 кропак', 'file-info-gif-looped' => 'закальцаваныя', 'file-info-gif-frames' => '$1 {{PLURAL:$1|кадр|кадраў}}', +'file-info-png-looped' => 'бясконца', +'file-info-png-repeat' => 'паўтараецца $1 {{PLURAL:$1|раз|разоў}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|кадр|кадраў}}', # Special:NewFiles 'newimages' => 'Новыя файлы', @@ -2793,24 +2820,24 @@ $1', 'limitall' => 'усе', # E-mail address confirmation -'confirmemail' => 'Пацвердзіць адрас эл.пошты', -'confirmemail_noemail' => 'У [[Special:Preferences|вашых настаўленнях]] няма дапушчальнага адрасу эл.пошты.', -'confirmemail_text' => 'На пляцоўцы {{SITENAME}} патрабуецца праверка адрасу эл.пошты перад тым, як карыстацца магчымасцямі эл.пошты. Націсніце кнопку, што ніжэй, каб адаслаць сабе пацвярджальны ліст. У лісце будзе спасылка на спецыяльную пацвярджальную старонку, якую трэба будзе адкрыць у браўзеры, каб пацвердзіць правільнасць свайго адрасу эл.пошты.', -'confirmemail_pending' => 'Вам ужо быў адасланы пацвярджальны код; калі ваш рахунак створаны нядаўна, то магчыма, што трэба пачакаць атрымання пацвярджальнага коду колькі мінут, перад тым як звяртацца па наступны.', -'confirmemail_send' => 'Адаслаць код пацверджання', -'confirmemail_sent' => 'Адасланы ліст эл.пошты з пацверджаннем.', -'confirmemail_oncreate' => 'Пацвярджальны код быў адасланы на ваш адрас эл.пошты. +'confirmemail' => 'Пацвердзіць адрас эл.пошты', +'confirmemail_noemail' => 'У [[Special:Preferences|вашых настаўленнях]] няма дапушчальнага адрасу эл.пошты.', +'confirmemail_text' => 'На пляцоўцы {{SITENAME}} патрабуецца праверка адрасу эл.пошты перад тым, як карыстацца магчымасцямі эл.пошты. Націсніце кнопку, што ніжэй, каб адаслаць сабе пацвярджальны ліст. У лісце будзе спасылка на спецыяльную пацвярджальную старонку, якую трэба будзе адкрыць у браўзеры, каб пацвердзіць правільнасць свайго адрасу эл.пошты.', +'confirmemail_pending' => 'Вам ужо быў адасланы пацвярджальны код; калі ваш рахунак створаны нядаўна, то магчыма, што трэба пачакаць атрымання пацвярджальнага коду колькі мінут, перад тым як звяртацца па наступны.', +'confirmemail_send' => 'Адаслаць код пацверджання', +'confirmemail_sent' => 'Адасланы ліст эл.пошты з пацверджаннем.', +'confirmemail_oncreate' => 'Пацвярджальны код быў адасланы на ваш адрас эл.пошты. Гэты код непатрэбны, каб уваходзіць у сістэму, але яго трэба будзе паказаць перад тым, як дазволіць сабе якія-колечы магчымасці эл.пошты гэтай Вікі.', -'confirmemail_sendfailed' => 'Не ўдалося адаслаць пацвярджальны эл.ліст з пляцоўкі {{SITENAME}}. Праверце, ці ў адрасе няма недапушчальных знакаў. +'confirmemail_sendfailed' => 'Не ўдалося адаслаць пацвярджальны эл.ліст з пляцоўкі {{SITENAME}}. Праверце, ці ў адрасе няма недапушчальных знакаў. Вынік паштовага адсылання: $1', -'confirmemail_invalid' => 'Няправільны код пацверджання. Магчыма, неактуальны код.', -'confirmemail_needlogin' => 'Вам трэба зрабіць $1 каб пацвердзіць свой адрас эл.пошты.', -'confirmemail_success' => 'Ваш адрас эл.пошты быў пацверджаны. Можаце [[Special:UserLogin|ўваходзіць у сістэму]] і працаваць з вікі.', -'confirmemail_loggedin' => 'Зараз ваш адрас эл.пошты стаўся пацверджаным.', -'confirmemail_error' => 'Неакрэсленая памылка пры запісванні пацверджання.', -'confirmemail_subject' => 'Пацверджанне адрасу эл.пошты для {{SITENAME}}', -'confirmemail_body' => 'Нехта (магчыма, што і вы — з адрасу IP $1) завёў рахунак "$2" на пляцоўцы {{SITENAME}}, паказваючы гэты адрас эл.пошты як свой. +'confirmemail_invalid' => 'Няправільны код пацверджання. Магчыма, неактуальны код.', +'confirmemail_needlogin' => 'Вам трэба зрабіць $1 каб пацвердзіць свой адрас эл.пошты.', +'confirmemail_success' => 'Ваш адрас эл.пошты быў пацверджаны. Можаце [[Special:UserLogin|ўваходзіць у сістэму]] і працаваць з вікі.', +'confirmemail_loggedin' => 'Зараз ваш адрас эл.пошты стаўся пацверджаным.', +'confirmemail_error' => 'Неакрэсленая памылка пры запісванні пацверджання.', +'confirmemail_subject' => 'Пацверджанне адрасу эл.пошты для {{SITENAME}}', +'confirmemail_body' => 'Нехта (магчыма, што і вы — з адрасу IP $1) завёў рахунак "$2" на пляцоўцы {{SITENAME}}, паказваючы гэты адрас эл.пошты як свой. Дзеля таго, каб пацвердзіць, што рахунак сапраўды ваш, і каб актываваць магчымасці эл.пошты для {{SITENAME}}, адкрыйце ў браўзеры гэтую спасылку: @@ -2821,8 +2848,19 @@ $3 $5 Гэты пацвярджальны код згасне $4.', -'confirmemail_invalidated' => 'Пацверджанне эл.пошты скасаванае', -'invalidateemail' => 'Адмовіцца ад пацверджання эл.пошты', +'confirmemail_body_changed' => 'Нехта з IP-адрасу "$1" (магчыма, што Вы) змяніў адрас эл.пошты для рахунку "$2" на пляцоўцы {{SITENAME}}. + +Каб пацвердзіць, што рахунак сапраўды належыць вам, і каб ізноў уключыць працу з эл.поштай для рахунку на пляцоўцы {{SITENAME}}, адкрыйце гэтую спасылку ў браўзеры: + +$3 + +Калі рахунак вам *не належыць*, адкрыйце ніжэй паказаную спасылку, каб адмовіцца ад пацверджання адрасу эл.пошты: + +$5 + +Гэты квіток на пацверджанне будзе дзейсны не далей за $4.', +'confirmemail_invalidated' => 'Пацверджанне эл.пошты скасаванае', +'invalidateemail' => 'Адмовіцца ад пацверджання эл.пошты', # Scary transclusion 'scarytranscludedisabled' => '[Устаўлянне з іншых вікі не дазволена]', @@ -2864,6 +2902,7 @@ $1', 'table_pager_first' => 'Першая старонка', 'table_pager_last' => 'Апошняя старонка', 'table_pager_limit' => 'Па $1 складнікаў на старонцы', +'table_pager_limit_label' => 'Запісаў на старонку:', 'table_pager_limit_submit' => 'Пераход', 'table_pager_empty' => 'Без вынікаў', @@ -2915,6 +2954,7 @@ $1', 'version-specialpages' => 'Адмысловыя старонкі', 'version-parserhooks' => 'Хукі парсера', 'version-variables' => 'Зменныя', +'version-skins' => 'Вокладкі', 'version-other' => 'Рознае', 'version-mediahandlers' => 'Апрацоўнікі мультымедый', 'version-hooks' => 'Хукі', @@ -2926,6 +2966,13 @@ $1', 'version-hook-subscribedby' => 'Сюды падпісаныя', 'version-version' => '(Версія $1)', 'version-license' => 'Ліцэнзія', +'version-poweredby-credits' => "Пляцоўка працуе на '''[http://www.mediawiki.org/ MediaWiki]''', капірайт © 2001-$1 $2.", +'version-poweredby-others' => 'іншыя', +'version-license-info' => "MediaWiki з'яўляецца свабодным праграмным забеспячэннем. Такім чынам, вы можаце паўторна распаўсюджваць прадукт і(або) змяняць яго на ўмовах пагаднення GNU General Public License у тым выглядзе, у якім яно публікуецца фондам Free Software Foundation; сілу мае версія (выпуск) 2 гэтага пагаднення або, на ваш выбар, навейшая версія (выпуск) пагаднення. + +MediaWiki распаўсюджваецца, спадзеючыся на прыдатнасць прадукта, але БЕЗ ЯКІХ-НЕБУДЗЬ ГАРАНТЫЙ, у тым ліку, без імплікаваных гарантый СПАЖЫВЕЦКАЙ ВАРТАСЦІ або ПРЫДАТНАСЦІ ДЛЯ ЯКОЙ-НЕБУДЗЬ МЭТЫ. Больш падрабязна гл. пагадненне GNU General Public License. + +Разам з гэтым праграмным забеспячэннем вы павінны былі атрымаць [{{SERVER}}{{SCRIPTPATH}}/COPYING копію пагаднення GNU General Public License]. Калі гэта не так, паведамце аб гэтым у фонд Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA або [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html атрымайце яе з Інтэрнэту].", 'version-software' => 'Устаноўленыя праграмныя прадукты', 'version-software-product' => 'Прадукт', 'version-software-version' => 'Версія', @@ -2996,6 +3043,15 @@ $1', 'tags-edit' => 'правіць', 'tags-hitcount' => '$1 {{PLURAL:$1|мена|менаў}}', +# Special:ComparePages +'comparepages' => 'Параўнанне старонак', +'compare-selector' => 'Параўнанне версій старонкі', +'compare-page1' => 'Старонка 1', +'compare-page2' => 'Старонка 2', +'compare-rev1' => 'Версія 1', +'compare-rev2' => 'Версія 2', +'compare-submit' => 'Параўнаць', + # Database error messages 'dberr-header' => 'Праблема на пляцоўцы', 'dberr-problems' => 'Прабачце, на пляцоўцы здарыліся тэхнічныя цяжкасці.', @@ -3012,8 +3068,13 @@ $1', 'htmlform-float-invalid' => "Пададзенае значэнне не з'яўляецца лікам.", 'htmlform-int-toolow' => 'Пададзенае значэнне меншае за мінімум $1', 'htmlform-int-toohigh' => 'Пададзенае значэнне большае за максімум $1', +'htmlform-required' => 'Гэтае значэнне неабходнае', 'htmlform-submit' => 'Падаць', 'htmlform-reset' => 'Адкаціць змяненні', 'htmlform-selectorother-other' => 'Рознае', +# SQLite database support +'sqlite-has-fts' => '$1 з падтрымкай поўна-тэкставага пошуку', +'sqlite-no-fts' => '$1 без падтрымкі поўна-тэкставага пошуку', + ); diff --git a/languages/messages/MessagesBe_tarask.php b/languages/messages/MessagesBe_tarask.php index 03d49474..2721332b 100644 --- a/languages/messages/MessagesBe_tarask.php +++ b/languages/messages/MessagesBe_tarask.php @@ -236,7 +236,10 @@ $specialPageAliases = array( 'DeletedContributions' => array( 'Выдалены_ўнёсак' ), ); -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( + ',' => "\xc2\xa0", # nbsp + '.' => ',' +); $linkTrail = '/^([абвгґджзеёжзійклмнопрстуўфхцчшыьэюяćčłńśšŭźža-z]+)(.*)$/sDu'; @@ -262,8 +265,7 @@ $messages = array( 'tog-editsection' => 'Дазволіць рэдагаваньне асобных сэкцыяў па спасылках [рэдагаваць]', 'tog-editsectiononrightclick' => 'Рэдагаваць сэкцыі па правым шчоўканьні мышкай на загалоўку (JavaScript)', 'tog-showtoc' => 'Паказваць зьмест (для старонак з колькасьцю сэкцый болей за 3)', -'tog-rememberpassword' => 'Запомніць мяне на гэтым кампутары', -'tog-editwidth' => 'Пашыраць поле рэдагаваньня ў поўную шырыню экрана', +'tog-rememberpassword' => 'Запомніць мяне ў гэтым браўзэры (ня больш за $1 {{PLURAL:$1|дзень|дні|дзён}})', 'tog-watchcreations' => 'Дадаваць у мой сьпіс назіраньня старонкі, якія я буду ствараць', 'tog-watchdefault' => 'Дадаваць у мой сьпіс назіраньня старонкі, якія я буду рэдагаваць', 'tog-watchmoves' => 'Дадаваць у мой сьпіс назіраньня старонкі, якія я буду пераносіць', @@ -408,31 +410,21 @@ $messages = array( 'faqpage' => 'Project:Частыя пытаньні', # Vector skin -'vector-action-addsection' => 'Дадаць тэму', -'vector-action-delete' => 'Выдаліць', -'vector-action-move' => 'Перанесьці', -'vector-action-protect' => 'Абараніць', -'vector-action-undelete' => 'Аднавіць', -'vector-action-unprotect' => 'Зьняць абарону', -'vector-namespace-category' => 'Катэгорыя', -'vector-namespace-help' => 'Старонка дапамогі', -'vector-namespace-image' => 'Файл', -'vector-namespace-main' => 'Старонка', -'vector-namespace-media' => 'Старонка мэдыя', -'vector-namespace-mediawiki' => 'Паведамленьне', -'vector-namespace-project' => 'Старонка праекту', -'vector-namespace-special' => 'Спэцыяльная старонка', -'vector-namespace-talk' => 'Абмеркаваньне', -'vector-namespace-template' => 'Шаблён', -'vector-namespace-user' => 'Старонка ўдзельніка', -'vector-view-create' => 'Стварыць', -'vector-view-edit' => 'Рэдагаваць', -'vector-view-history' => 'Паказаць гісторыю', -'vector-view-view' => 'Чытаць', -'vector-view-viewsource' => 'Паказаць крыніцу', -'actions' => 'Дзеяньні', -'namespaces' => 'Прасторы назваў', -'variants' => 'Варыянты', +'vector-action-addsection' => 'Дадаць тэму', +'vector-action-delete' => 'Выдаліць', +'vector-action-move' => 'Перанесьці', +'vector-action-protect' => 'Абараніць', +'vector-action-undelete' => 'Аднавіць', +'vector-action-unprotect' => 'Зьняць абарону', +'vector-simplesearch-preference' => 'Уключыць палепшаныя пошукавыя падказкі (толькі для афармленьня «Вэктар»)', +'vector-view-create' => 'Стварыць', +'vector-view-edit' => 'Рэдагаваць', +'vector-view-history' => 'Паказаць гісторыю', +'vector-view-view' => 'Чытаць', +'vector-view-viewsource' => 'Паказаць крыніцу', +'actions' => 'Дзеяньні', +'namespaces' => 'Прасторы назваў', +'variants' => 'Варыянты', 'errorpagetitle' => 'Памылка', 'returnto' => 'Вярнуцца да старонкі $1.', @@ -493,6 +485,9 @@ $messages = array( Калі ласка, пачакайце і паспрабуйце зайсьці пазьней. $1', +'pool-timeout' => 'Скончыўся час чаканьня блякаваньня', +'pool-queuefull' => 'Чарга запытаў поўная', +'pool-errorunknown' => 'Невядомая памылка', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Пра {{GRAMMAR:вінавальны|{{SITENAME}}}}', @@ -657,7 +652,8 @@ $2', 'yourname' => 'Імя ўдзельніка:', 'yourpassword' => 'Пароль:', 'yourpasswordagain' => 'Паўтарыце пароль:', -'remembermypassword' => 'Запомніць мяне на гэтым кампутары', +'remembermypassword' => 'Запомніць мяне на гэтым кампутары (ня больш за $1 {{PLURAL:$1|дзень|дні|дзён}})', +'securelogin-stick-https' => 'Утрымліваць злучэньне праз HTTPS пасьля ўваходу ў сыстэму', 'yourdomainname' => 'Ваш дамэн:', 'externaldberror' => 'Адбылася памылка аўтэнтыфікацыі з дапамогай вонкавай базы зьвестак, ці Вам не дазволена абнаўляць свой рахунак.', 'login' => 'Увайсьці', @@ -674,6 +670,7 @@ $2', 'gotaccount' => "Ужо маеце рахунак? '''$1'''.", 'gotaccountlink' => 'Увайдзіце', 'createaccountmail' => 'па электроннай пошце', +'createaccountreason' => 'Прычына:', 'badretype' => 'Уведзеныя Вамі паролі не супадаюць.', 'userexists' => 'Выбранае Вамі імя ўдзельніка ўжо выкарыстоўваецца кімсьці іншым. Выберыце іншае імя.', 'loginerror' => 'Памылка ўваходу', @@ -698,6 +695,7 @@ $2', 'wrongpasswordempty' => 'Быў уведзены пусты пароль. Калі ласка, паспрабуйце яшчэ раз.', 'passwordtooshort' => 'Паролі павінны ўтрымліваць ня менш за $1 {{PLURAL:$1|сымбаль|сымбалі|сымбаляў}}.', 'password-name-match' => 'Ваш пароль павінен адрозьнівацца ад Вашага імя ўдзельніка.', +'password-login-forbidden' => 'Выкарыстаньне гэтага імя ўдзельніка і пароля было забароненае.', 'mailmypassword' => 'Даслаць новы пароль па электроннай пошце', 'passwordremindertitle' => 'Новы часовы пароль для {{GRAMMAR:родны|{{SITENAME}}}}', 'passwordremindertext' => 'Нехта (магчыма Вы, з IP-адрасу $1) запытаў нас даслаць новы пароль для {{GRAMMAR:родны|{{SITENAME}}}} ($4). Для ўдзельніка «$2» быў створаны часовы пароль і ён цяпер «$3». Калі гэта была Вашая ініцыятыва, Вам трэба ўвайсьці ў сыстэму і адразу зьмяніць пароль. Тэрмін дзеяньня Вашага часовага паролю — $5 {{PLURAL:$5|дзень|дні|дзён}}. @@ -734,6 +732,9 @@ $2', 'loginlanguagelabel' => 'Мова: $1', 'suspicious-userlogout' => 'Ваш запыт на выхад з сыстэмы быў адхілены, таму што выглядае, што ён быў дасланы пашкоджаным браўзэрам альбо кэшаваным проксі-сэрвэрам.', +# E-mail sending +'php-mail-error-unknown' => 'Узьнікла невядомая памылка ў функцыі PHP mail()', + # Password reset dialog 'resetpass' => 'Зьмяніць пароль', 'resetpass_announce' => 'Вы ўвайшлі з дапамогай часовага паролю, дасланага праз электронную пошту. @@ -784,12 +785,13 @@ $2', 'showpreview' => 'Праглядзець', 'showlivepreview' => 'Хуткі папярэдні прагляд', 'showdiff' => 'Паказаць зьмены', -'anoneditwarning' => "'''Папярэджаньне:''' Вы не ўвайшлі. Ваш IP-адрас будзе запісаны ў гісторыі гэтай старонкі.", +'anoneditwarning' => "'''Папярэджаньне:''' Вы не ўвайшлі ў сыстэму. Ваш IP-адрас будзе запісаны ў гісторыі гэтай старонкі.", +'anonpreviewwarning' => "''Вы не ўвайшлі ў сыстэму. Падчас захаваньня Ваш IP-адрас будзе дададзены ў гісторыю рэдагаваньняў старонкі.''", 'missingsummary' => "'''Напамін:''' Вы не пазначылі кароткае апісаньне зьменаў. Калі Вы націсьніце кнопку «Запісаць» яшчэ раз, Вашае рэдагаваньне будзе запісанае без апісаньня.", 'missingcommenttext' => 'Калі ласка, увядзіце камэнтар ніжэй.', -'missingcommentheader' => "'''Напамін:''' Вы не пазначылі тэмы гэтага камэнтара. -Калі Вы націсьніце кнопку «Захаваць» яшчэ раз, Ваш камэнтар захаваецца бяз тэмы.", +'missingcommentheader' => "'''Напамін:''' Вы не пазначылі загаловак камэнтара. +Калі Вы націсьніце кнопку «{{int:savearticle}}» яшчэ раз, Ваш камэнтар захаваецца бяз тэмы.", 'summary-preview' => 'Папярэдні прагляд апісаньня:', 'subject-preview' => 'Папярэдні прагляд загалоўку:', 'blockedtitle' => 'Удзельнік заблякаваны', @@ -855,8 +857,12 @@ $2', 'userjsyoucanpreview' => "'''Падказка:''' выкарыстоўвайце кнопку «{{int:showpreview}}», каб паспрабаваць новы код JavaScript перад тым як яго запісаць.", 'usercsspreview' => "'''Памятайце, што гэта толькі папярэдні прагляд Вашага CSS. Ён яшчэ не запісаны!'''", 'userjspreview' => "'''Памятайце, што гэта толькі папярэдні прагляд Вашага JavaScript, ён яшчэ не запісаны!'''", -'userinvalidcssjstitle' => "'''Увага:''' няма тэмы афармленьня «$1». -Памятайце, што ўласныя старонкі .css і .js павінны мець назву, якая складаецца з малых літараў, напрыклад, {{ns:user}}:Хтосьці/monobook.css, а не {{ns:user}}:Хтосьці/Monobook.css.", +'sitecsspreview' => "'''Памятайце, што гэта толькі папярэдні прагляд гэтага CSS.''' +'''Ён яшчэ не захаваны!'''", +'sitejspreview' => "'''Памятайце, што гэта толькі папярэдні прагляд гэтага коду JavaScript.''' +'''Ён яшчэ не захаваны!'''", +'userinvalidcssjstitle' => "'''Папярэджаньне:''' няма тэмы афармленьня «$1». +Памятайце, што ўласныя старонкі .css і .js павінны мець назву, якая складаецца з малых літараў, напрыклад, {{ns:user}}:Хтосьці/vector.css, а не {{ns:user}}:Хтосьці/Vector.css.", 'updated' => '(Абноўлена)', 'note' => "'''Заўвага: '''", 'previewnote' => "'''Гэта толькі папярэдні прагляд і зьмены яшчэ не былі захаваныя!'''", @@ -895,8 +901,6 @@ $2', Разьмяшчэньнем тут тэкстаў, Вы дэкляруеце, што Вы зьяўляецеся іх аўтарам, ці Вы скапіявалі іх з крыніцы, якая дазваляе вольнае выкарыстаньне сваіх тэкстаў (дзеля падрабязнасьцяў глядзіце $1). '''КАЛІ ЛАСКА, НЕ ЗЬМЯШЧАЙЦЕ ТУТ БЕЗ ДАЗВОЛУ МАТЭРЫЯЛЫ, ЯКІЯ АХОЎВАЮЦЦА АЎТАРСКІМ ПРАВАМ!'''", -'longpagewarning' => "'''ПАПЯРЭДЖАНЬНЕ: Гэтая старонка ўтрымлівае $1 {{PLURAL:$1|кілябайт|кілябайты|кілябайтаў}}; некаторыя браўзэры могуць мець праблемы пры адлюстраваньні старонак аб'ёмам болей за 32 кб. -Калі гэта магчыма, паспрабуйце падзяліць зьмест старонкі на больш дробныя часткі.'''", 'longpageerror' => "'''ПАМЫЛКА: Аб'ём тэксту, які Вы спрабуеце запісаць складае $1 {{PLURAL:$1|кілябайт|кілябайты|кілябайтаў}}. Аб'ём старонкі ня можа перавышаць $2 {{PLURAL:$2|кілябайт|кілябайты|кілябайтаў}}. Старонка ня можа быць захаваная.'''", 'readonlywarning' => "'''ПАПЯРЭДЖАНЬНЕ: База зьвестак была заблякаваная для тэхнічнага абслугоўваньня, таму немагчыма зараз захаваць Вашыя зьмены. Вы можаце скапіяваць тэкст у файл на Вашым кампутары, а пазьней захаваць сюды.''' @@ -1072,6 +1076,8 @@ $1", 'logdelete-failure' => "'''Немагчыма ўстанавіць бачнасьць у журнале:''' $1", 'revdel-restore' => 'Зьмяніць бачнасьць', +'revdel-restore-deleted' => 'выдаленыя вэрсіі', +'revdel-restore-visible' => 'бачныя вэрсіі', 'pagehist' => 'Гісторыя старонкі', 'deletedhist' => 'Выдаленая гісторыя', 'revdelete-content' => 'зьмест', @@ -1141,11 +1147,13 @@ $1", # Diffs 'history-title' => 'Гісторыя зьменаў старонкі «$1»', 'difference' => '(Адрозьненьні паміж вэрсіямі)', +'difference-multipage' => '(Розьніца паміж старонкамі)', 'lineno' => 'Радок $1:', 'compareselectedversions' => 'Параўнаць выбраныя вэрсіі', 'showhideselectedversions' => 'Паказаць/схаваць вызначаныя вэрсіі', 'editundo' => 'скасаваць', -'diff-multi' => '($1 {{PLURAL:$1|прамежная вэрсія не паказаная|прамежныя вэрсіі не паказаныя|прамежных вэрсіяў не паказаныя}})', +'diff-multi' => '($1 {{PLURAL:$1|прамежная вэрсія|прамежныя вэрсіі|прамежных вэрсіяў}} $2 {{PLURAL:$2|удзельніка|удзельнікаў|удзельнікаў}} {{PLURAL:$1|не паказаная|не паказаныя|не паказаныя}})', +'diff-multi-manyusers' => '($1 {{PLURAL:$1|прамежная вэрсія|прамежныя вэрсіі|прамежных вэрсіяў}} $2 {{PLURAL:$2|удзельніка|удзельнікаў|удзельнікаў}} {{PLURAL:$1|не паказаная|не паказаныя|не паказаныя}})', # Search results 'searchresults' => 'Вынікі пошуку', @@ -1180,6 +1188,7 @@ $1", 'searchprofile-everything-tooltip' => 'Шукаць усюды (уключна са старонкамі абмеркаваньня)', 'searchprofile-advanced-tooltip' => 'Шукаць у дадатковых прасторах назваў', 'search-result-size' => '$1 ($2 {{PLURAL:$2|слова|словы|словаў}})', +'search-result-category-size' => '$1 {{PLURAL:$1|элемэнт|элемэнты|элемэнтаў}} ($2 {{PLURAL:$2|падкатэгорыя|падкатэгорыі|падкатэгорыяў}}, $3 {{PLURAL:|файл|файлы|файлаў}})', 'search-result-score' => 'Адпаведнасьць: $1%', 'search-redirect' => '(перанакіраваньне $1)', 'search-section' => '(сэкцыя $1)', @@ -1255,6 +1264,7 @@ $1", 'contextlines' => 'Колькасьць радкоў для паказу:', 'contextchars' => 'Колькасьць сымбаляў на радок:', 'stub-threshold' => 'Максымальны памер старонкі для паказу спасылак як на накід (у байтах):', +'stub-threshold-disabled' => 'Выключаны', 'recentchangesdays' => 'Колькасьць дзён для паказу ў апошніх зьменах:', 'recentchangesdays-max' => '(максымальна $1 {{PLURAL:$1|дзень|дні|дзён}})', 'recentchangescount' => 'Колькасьць рэдагаваньняў для паказу па змоўчваньні:', @@ -1288,6 +1298,7 @@ $1", 'prefs-files' => 'Файлы', 'prefs-custom-css' => 'Індывідуальны CSS', 'prefs-custom-js' => 'Індывідуальны JS', +'prefs-common-css-js' => 'Агульны CSS/JS для ўсіх афармленьняў:', 'prefs-reset-intro' => 'Вы можаце выкарыстоўваць гэтую старонку для замены Вашых наладаў на налады сайта па змоўчваньні. Гэтае дзеяньне не можа быць адмененае.', 'prefs-emailconfirm-label' => 'Пацьверджаньне адрасу электроннай пошты:', @@ -1324,9 +1335,15 @@ $1", 'prefs-advancedrendering' => 'Дадатковыя налады', 'prefs-advancedsearchoptions' => 'Дадатковыя налады', 'prefs-advancedwatchlist' => 'Дадатковыя налады', -'prefs-display' => 'Устаноўкі паказу', +'prefs-displayrc' => 'Налады паказу', +'prefs-displaysearchoptions' => 'Налады паказу', +'prefs-displaywatchlist' => 'Налады паказу', 'prefs-diffs' => 'Розьніцы вэрсіяў', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Выглядзіць слушна', +'email-address-validity-invalid' => 'Неабходны слушны адрас!', + # User rights 'userrights' => 'Кіраваньне правамі ўдзельнікаў і ўдзельніц', 'userrights-lookup-user' => 'Кіраваньне групамі ўдзельнікаў і ўдзельніц', @@ -1337,10 +1354,10 @@ $1", 'saveusergroups' => 'Захаваць групы ўдзельнікаў і ўдзельніц', 'userrights-groupsmember' => 'Уваходзіць у:', 'userrights-groupsmember-auto' => 'Няяўны чалец:', -'userrights-groups-help' => 'Тут можна мяняць групы да якіх належыць гэты ўдзельнік: -* Вызначанае поле азначае прыналежнасьць удзельніка да гэтай групы. -* Ня вызначанае поле азначае, што ўдзельнік не належыць гэтай групе. -* Знак * азначае што Вы ня зможаце выдаліць удзельніка з групы, калі дададзіце яго да яе і наадварот.', +'userrights-groups-help' => 'Тут можна зьмяняць групы, да якіх належыць гэты ўдзельнік: +* Адзначанае поле побач з назвай групы пазначае прыналежнасьць удзельніка да групы. +* Пустое поле азначае, што ўдзельнік не належыць да групы. +* Знак * азначае, што Вы ня зможаце выдаліць удзельніка з групы, калі дададзіце яго да яе, і наадварот.', 'userrights-reason' => 'Прычына:', 'userrights-no-interwiki' => 'Вы ня маеце дазволу зьмяняць правы ўдзельнікаў іншых вікаў.', 'userrights-nodatabase' => 'Базы зьвестак $1 не існуе альбо яна не зьяўляецца лякальнай.', @@ -1410,6 +1427,7 @@ $1", 'right-hideuser' => 'блякаваньне рахунку ўдзельніка і яго хаваньне', 'right-ipblock-exempt' => 'абход блякаваньняў IP-адрасоў, аўта-блякаваньняў і блякаваньняў дыяпазонаў', 'right-proxyunbannable' => 'абход аўтаматычных блякаваньняў проксі', +'right-unblockself' => 'разблякаваньне самога сябе', 'right-protect' => 'зьмена ўзроўню абароны старонак і рэдагаваньне абароненых старонак', 'right-editprotected' => 'рэдагаваньне абароненых старонак (без каскаднай абароны)', 'right-editinterface' => 'рэдагаваньне інтэрфэйса карыстальніка', @@ -1432,7 +1450,6 @@ $1", 'right-siteadmin' => 'блякаваньне і разблякаваньне базы зьвестак', 'right-reset-passwords' => 'ачыстка пароляў іншых удзельнікаў', 'right-override-export-depth' => 'экспартаваньне старонак, уключаючы зьвязаныя старонкі з глыбінёй да 5', -'right-versiondetail' => 'Паказваць пашыраную інфармацыю пра вэрсію праграмнага забесьпячэньня', 'right-sendemail' => 'адпраўка электронных лістоў іншым удзельнікам', # User rights log @@ -1483,14 +1500,9 @@ $1", 'recentchanges-legend' => 'Налады апошніх зьменаў', 'recentchangestext' => 'Сачыце за апошнімі зьменамі ў {{GRAMMAR:месны|{{SITENAME}}}} на гэтай старонцы.', 'recentchanges-feed-description' => 'Сачыць за апошнімі зьменамі ў {{GRAMMAR:месны|{{SITENAME}}}} праз гэтую стужку.', -'recentchanges-label-legend' => 'Легенда: $1.', -'recentchanges-legend-newpage' => '$1 — новая старонка', 'recentchanges-label-newpage' => 'Гэтым рэдагаваньнем была створаная новая старонка', -'recentchanges-legend-minor' => '$1 — дробнае рэдагаваньне', 'recentchanges-label-minor' => 'Гэтае рэдагаваньне — дробнае', -'recentchanges-legend-bot' => '$1 — рэдагаваньне робата', 'recentchanges-label-bot' => 'Гэтае рэдагаваньне зробленае робатам', -'recentchanges-legend-unpatrolled' => '$1 — не патруляванае рэдагаваньне', 'recentchanges-label-unpatrolled' => 'Гэтае рэдагаваньне яшчэ не было адпатруляваным', 'rcnote' => "Ніжэй {{PLURAL:$1|пададзена '''$1''' апошняя зьмена|пададзеныя '''$1''' апошнія зьмены|пададзеныя '''$1''' апошніх зьменаў}} за {{PLURAL:$2|апошні '''$2''' дзень|апошнія '''$2''' дні|апошнія '''$2''' дзён}}, па стане на $5, $4.", 'rcnotefrom' => "Ніжэй знаходзяцца зьмены з '''$2''' (да '''$1''' на старонку).", @@ -1537,6 +1549,9 @@ $1", 'upload_directory_missing' => 'Загрузачная дырэкторыя ($1) адсутнічае і ня можа быць створаная сэрвэрам.', 'upload_directory_read_only' => 'Сэрвэр ня мае правоў на запіс у дырэкторыю загружаных файлаў ($1).', 'uploaderror' => 'Памылка загрузкі', +'upload-recreate-warning' => "'''Увага: файл з такой назвай быў выдалены альбо перанесены.''' + +Журнал выдаленьняў і пераносаў гэтай старонкі для зручнасьці пададзены тут:", 'uploadtext' => "Ужывайце форму ніжэй для загрузкі файлаў. Каб паглядзець ці адшукаць раней загружаныя файлы, глядзіце [[Special:FileList|сьпіс загружаных файлаў]], загрузкі таксама запісваюцца ў [[Special:Log/upload|журнал загрузак]], а выдаленьні — у [[Special:Log/delete|журнал выдаленьняў]]. @@ -1569,6 +1584,17 @@ $1", {{PLURAL:$3|Пажаданым тыпам файла зьяўляецца|Пажаданымі тыпамі файлаў зьяўляюцца}} $2.", 'filetype-banned-type' => "'''«.$1»''' — забаронены тып файлаў. {{PLURAL:$3|Дазволеным тыпам файла зьяўляецца|Дазволенымі тыпамі файлаў зьяўляюцца}} $2.", 'filetype-missing' => 'Файл ня мае пашырэньня (напрыклад, «.jpg»).', +'empty-file' => 'Дасланы Вамі файл пусты.', +'file-too-large' => 'Дасланы Вамі файл занадта вялікі.', +'filename-tooshort' => 'Назва файла занадта кароткая.', +'filetype-banned' => 'Гэты тып файла забаронены.', +'verification-error' => 'Гэты файл не прайшоў вэрыфікацыю.', +'hookaborted' => 'Прапанаваная Вамі зьмена была адхіленая апрацоўшчыкам пашырэньня.', +'illegal-filename' => 'Недазволеная назва файла.', +'overwrite' => 'Замена існуючага файла забароненая.', +'unknown-error' => 'Узьнікла невядомая памылка.', +'tmp-create-error' => 'Немагчыма стварыць часовы файл.', +'tmp-write-error' => 'Памылка запісу часовага файла.', 'large-file' => 'Рэкамэндаваны памер файлаў — ня болей $1; памер гэтага файла — $2.', 'largefileserver' => 'Памер гэтага файла перавышае максымальна дазволены.', @@ -1597,13 +1623,14 @@ $1", Калі Вы жадаеце загрузіць Ваш файл, вярніцеся назад і загрузіце гэты файл з новай назвай. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Гэты файл дублюе {{PLURAL:$1|наступны файл|наступныя файлы}}:', 'file-deleted-duplicate' => 'Падобны файл ([[:$1]]) ужо выдаляўся. Калі ласка, паглядзіце гісторыю выдаленьняў гэтага файла перад яго паўторнай загрузкай.', -'successfulupload' => 'Загрузка пасьпяхова скончылася', 'uploadwarning' => 'Папярэджаньне', 'uploadwarning-text' => 'Калі ласка, зьмяніце апісаньне файла ніжэй і паспрабуйце ізноў.', 'savefile' => 'Захаваць файл', 'uploadedimage' => 'загружаная «[[$1]]»', 'overwroteimage' => 'загружаная новая вэрсія «[[$1]]»', 'uploaddisabled' => 'Загрузка файлаў забароненая', +'copyuploaddisabled' => 'Загрузка праз URL-адрас адключаная.', +'uploadfromurl-queued' => 'Ваша загрузка далучаная да чаргі.', 'uploaddisabledtext' => 'Загрузка файлаў забароненая.', 'php-uploaddisabledtext' => 'Загрузка файлаў была адключаная ў парамэтрах канфігурацыі PHP. Калі ласка, праверце значэньне парамэтра «file_uploads».', 'uploadscripted' => 'Гэты файл утрымлівае HTML-код альбо скрыпт, які можа памылкова апрацоўвацца браўзэрам.', @@ -1623,6 +1650,14 @@ $1", Упэўніцеся ў неабходнасьці загрузкі гэтага файла. Журнал выдаленьняў для гэтага файла знаходзіцца ніжэй:", 'filename-bad-prefix' => "Назва файла, які Вы загружаеце, пачынаецца з '''«$1»'''. Падобныя бессэнсоўныя назвы звычайна ствараюцца аўтаматычна лічбавымі фотаапаратамі. Калі ласка, абярыце больш зразумелую назву для Вашага файла.", +'upload-success-subj' => 'Загрузка пасьпяхова скончылася', +'upload-success-msg' => 'Вашая загрузка з [$2] была пасьпяховая. Яна даступная тут: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Праблема загрузкі', +'upload-failure-msg' => 'Узьнікла праблема пад час Вашай загрузкі з [$2]: + +$1', +'upload-warning-subj' => 'Папярэджаньне загрузкі', +'upload-warning-msg' => 'Узьнікла праблема з Вашай загрузкай з [$2]. Вы можаце вярнуцца на [[Special:Upload/stash/$1|форму загрузкі]] для вырашэньня гэтай праблемы.', 'upload-proto-error' => 'Няслушны пратакол', 'upload-proto-error-text' => 'Аддаленая загрузка файлаў патрабуе URL-адрас, які пачынаецца з http:// альбо ftp://.', @@ -1689,6 +1724,7 @@ $1", 'listfiles_search_for' => 'Пошук па назьве файла:', 'imgfile' => 'файл', 'listfiles' => 'Сьпіс файлаў', +'listfiles_thumb' => 'Мініятура', 'listfiles_date' => 'Дата', 'listfiles_name' => 'Назва', 'listfiles_user' => 'Удзельнік', @@ -1803,8 +1839,8 @@ $1", 'statistics-edits' => 'Агульная колькасьць рэдагаваньняў', 'statistics-edits-average' => 'Сярэдняя колькасьць рэдагаваньняў на старонку', 'statistics-views-total' => 'Агульная колькасьць праглядаў', +'statistics-views-total-desc' => 'Прагляды неіснуючых старонак і спэцыяльных старонак не ўлічаныя', 'statistics-views-peredit' => 'Колькасьць праглядаў на рэдагаваньне', -'statistics-jobqueue' => 'Даўжыня [http://www.mediawiki.org/wiki/Manual:Job_queue чаргі заданьняў]', 'statistics-users' => '[[Special:ListUsers|Зарэгістраваныя ўдзельнікі]]', 'statistics-users-active' => 'Актыўныя ўдзельнікі', 'statistics-users-active-desc' => 'Удзельнікі, якія выканалі нейкае дзеяньне цягам {{PLURAL:$1|апошняга $1 дня|апошніх $1 дзён|апошніх $1 дзён}}', @@ -1817,8 +1853,8 @@ $1", Старонка лічыцца шматзначнай, калі яна ўтрымлівае шаблён назва якога знаходзіцца на старонцы [[MediaWiki:Disambiguationspage]]", 'doubleredirects' => 'Двайныя перанакіраваньні', -'doubleredirectstext' => 'На гэтай старонцы знаходзіцца сьпіс перанакіраваньняў на іншыя перанакіраваньні. Кожны радок утрымлівае спасылкі на першае і другое перанакіраваньне, а таксама першы радок старонкі другога перанакіраваньня, у якім звычайна знаходзіцца назва старонкі, куды павіннае спасылацца першае перанакіраваньне. -Закрэсьленыя элемэнты былі выпраўленыя.', +'doubleredirectstext' => 'На гэтай старонцы пададзены сьпіс перанакіраваньняў на іншыя перанакіраваньні. Кожны радок утрымлівае спасылкі на першае і другое перанакіраваньне, а таксама мэтавую старонку другога перанакіраваньня, якая звычайна зьяўляецца «сапраўднай» мэтавай старонкай, куды павіннае спасылацца першае перанакіраваньне. +Закрэсьленыя элемэнты былі выпраўленыя.', 'double-redirect-fixed-move' => '[[$1]] была перанесеная, яна цяпер перанакіроўвае на [[$2]]', 'double-redirect-fixer' => 'Выпраўленьне перанакіраваньняў', @@ -1841,6 +1877,8 @@ $1", 'nmembers' => '$1 {{PLURAL:$1|элемэнт|элемэнты|элемэнтаў}}', 'nrevisions' => '$1 {{PLURAL:$1|вэрсія|вэрсіі|вэрсій}}', 'nviews' => '$1 {{PLURAL:$1|прагляд|прагляды|праглядаў}}', +'nimagelinks' => 'Выкарыстоўваецца на $1 {{PLURAL:$1|старонцы|старонках|старонках}}', +'ntransclusions' => 'выкарыстоўваецца на $1 {{PLURAL:$1|старонцы|старонках|старонках}}', 'specialpage-empty' => 'Гэтая старонка — пустая.', 'lonelypages' => 'Старонкі-сіраціны', 'lonelypagestext' => 'На наступныя старонкі няма спасылак і яны ня ўлучаныя ў іншыя старонкі {{GRAMMAR:родны|{{SITENAME}}}}.', @@ -1932,7 +1970,7 @@ $1", # Special:Categories 'categories' => 'Катэгорыі', -'categoriespagetext' => '{{PLURAL:$1|Наступная катэгорыя зьмяшчае|Наступныя катэгорыі зьмяшчаюць}} старонкі і/альбо мэдыя-файлы. +'categoriespagetext' => '{{PLURAL:$1|Наступная катэгорыя зьмяшчае|Наступныя катэгорыі зьмяшчаюць}} старонкі і/альбо мэдыяфайлы. Тут не паказаныя [[Special:UnusedCategories|катэгорыі, якія не выкарыстоўваюцца]]. Глядзіце таксама [[Special:WantedCategories|сьпіс запатрабаваных катэгорыяў]].', 'categoriesfrom' => 'Паказаць катэгорыі, пачынаючы з:', @@ -1997,34 +2035,40 @@ $1", 'listgrouprights-removegroup-self-all' => 'Можа выдаліць уласны рахунак з ўсіх груп', # E-mail user -'mailnologin' => 'Няма адрасу атрымальніка', -'mailnologintext' => 'Вам неабходна [[Special:UserLogin|ўвайсьці ў сыстэму]] і мець пацьверджаны адрас электроннай пошты ў Вашых [[Special:Preferences|наладах]], каб дасылаць лісты іншым удзельнікам.', -'emailuser' => 'Даслаць ліст', -'emailpage' => 'Даслаць ліст ўдзельніку ці ўдзельніцы па электроннай пошце', -'emailpagetext' => 'Вы можаце выкарыстоўваць форму ніжэй, каб даслаць гэтаму ўдзельніку ліст па электроннай пошце. +'mailnologin' => 'Няма адрасу атрымальніка', +'mailnologintext' => 'Вам неабходна [[Special:UserLogin|ўвайсьці ў сыстэму]] і мець пацьверджаны адрас электроннай пошты ў Вашых [[Special:Preferences|наладах]], каб дасылаць лісты іншым удзельнікам.', +'emailuser' => 'Даслаць ліст', +'emailpage' => 'Даслаць ліст ўдзельніку ці ўдзельніцы па электроннай пошце', +'emailpagetext' => 'Вы можаце выкарыстоўваць форму ніжэй, каб даслаць гэтаму ўдзельніку ліст па электроннай пошце. Адрас электроннай пошты, які Вы пазначалі ў [[Special:Preferences|сваіх наладах]], будзе пазначаны ў полі ліста «Ад», і ўдзельнік зможа даслаць на гэты адрас адказ.', -'usermailererror' => 'Пры адсыланьні пошты адбылася памылка:', -'defemailsubject' => 'Электронная пошта {{GRAMMAR:родны|{{SITENAME}}}}', -'noemailtitle' => 'Адрас электроннай пошты адсутнічае', -'noemailtext' => 'Гэты удзельнік не пазначыў слушны адрас электроннай пошты.', -'nowikiemailtitle' => 'Атрыманьне лістоў па электроннай пошце забароненае', -'nowikiemailtext' => 'Гэты ўдзельнік не дазволіў атрымліваць лісты па электроннай пошце ад іншых удзельнікаў.', -'email-legend' => 'Даслаць ліст электроннай пошты іншаму ўдзельніку {{GRAMMAR:родны|{{SITENAME}}}}', -'emailfrom' => 'Ад:', -'emailto' => 'Да:', -'emailsubject' => 'Тэма:', -'emailmessage' => 'Паведамленьне:', -'emailsend' => 'Даслаць', -'emailccme' => 'Даслаць мне копію ліста.', -'emailccsubject' => 'Копія Вашага ліста да $1: $2', -'emailsent' => 'Ліст адасланы', -'emailsenttext' => 'Ваш ліст быў адасланы.', -'emailuserfooter' => 'Гэты ліст быў дасланы ўдзельнікам $1 да ўдзельніка $2 з дапамогай функцыі «Даслаць ліст» праекту {{SITENAME}}.', +'usermailererror' => 'Пры адсыланьні пошты адбылася памылка:', +'defemailsubject' => 'Электронная пошта {{GRAMMAR:родны|{{SITENAME}}}}', +'usermaildisabled' => 'Электронная пошта ўдзельніка адключаная', +'usermaildisabledtext' => 'Вы ня можаце дасылаць электронныя лісты іншым удзельнікам {{GRAMMAR:родны|{{SITENAME}}}}', +'noemailtitle' => 'Адрас электроннай пошты адсутнічае', +'noemailtext' => 'Гэты удзельнік не пазначыў слушны адрас электроннай пошты.', +'nowikiemailtitle' => 'Атрыманьне лістоў па электроннай пошце забароненае', +'nowikiemailtext' => 'Гэты ўдзельнік не дазволіў атрымліваць лісты па электроннай пошце ад іншых удзельнікаў.', +'email-legend' => 'Даслаць ліст электроннай пошты іншаму ўдзельніку {{GRAMMAR:родны|{{SITENAME}}}}', +'emailfrom' => 'Ад:', +'emailto' => 'Да:', +'emailsubject' => 'Тэма:', +'emailmessage' => 'Паведамленьне:', +'emailsend' => 'Даслаць', +'emailccme' => 'Даслаць мне копію ліста.', +'emailccsubject' => 'Копія Вашага ліста да $1: $2', +'emailsent' => 'Ліст адасланы', +'emailsenttext' => 'Ваш ліст быў адасланы.', +'emailuserfooter' => 'Гэты ліст быў дасланы ўдзельнікам $1 да ўдзельніка $2 з дапамогай функцыі «Даслаць ліст» праекту {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Паведамленьне пра выхад з сыстэмы.', +'usermessage-editor' => 'Дастаўка сыстэмных паведамленьняў', # Watchlist 'watchlist' => 'Мой сьпіс назіраньня', 'mywatchlist' => 'Сьпіс назіраньня', -'watchlistfor' => "(для '''$1''')", +'watchlistfor2' => 'Для $1 $2', 'nowatchlist' => 'Ваш сьпіс назіраньня пусты.', 'watchlistanontext' => 'Вам патрэбна $1, каб праглядаць альбо рэдагаваць сьпіс назіраньня.', 'watchnologin' => 'Вы не ўвайшлі ў сыстэму', @@ -2085,7 +2129,13 @@ $NEWPAGE Сыстэма паведамленьняў {{GRAMMAR:родны|{{SITENAME}}}} -- +Каб зьмяніць налады абвяшчэньня праз электронную пошту, наведайце: +{{fullurl:{{#special:Preferences}}}} + Каб зьмяніць налады сьпісу назіраньня, наведайце: +{{fullurl:{{#special:Preferences}}}} + +Каб выдаліць старонку з Вашага сьпісу назіраньня, наведайце: $UNWATCHURL Зваротная сувязь і дапамога: @@ -2140,7 +2190,10 @@ $UNWATCHURL 'revertpage-nouser' => 'Рэдагаваньні (імя ўдзельніка выдаленае) скасаваныя да папярэдняй вэрсіі [[User:$1|$1]]', 'rollback-success' => 'Адмененыя рэдагаваньні $1; вернутая папярэдняя вэрсія $2.', -'sessionfailure' => 'Магчыма ўзьніклі праблемы ў Вашым цяперашнім сэансе працы; + +# Edit tokens +'sessionfailure-title' => 'Памылка сэсіі', +'sessionfailure' => 'Магчыма ўзьніклі праблемы ў Вашым цяперашнім сэансе працы; гэта дзеяньне было скасавана для прадухіленьня перахопу сэансу. Калі ласка, націсьніце «назад» і перазагрузіце старонку, зь якой Вы прыйшлі, і паспрабуйце ізноў.', @@ -2275,18 +2328,22 @@ $1', 'month' => 'Ад месяца (і раней):', 'year' => 'Ад году (і раней):', -'sp-contributions-newbies' => 'Паказаць унёсак толькі з новых рахункаў', -'sp-contributions-newbies-sub' => 'Унёсак пачынаючых', -'sp-contributions-newbies-title' => 'Унёсак удзельнікаў з новых рахункаў', -'sp-contributions-blocklog' => 'журнал блякаваньняў', -'sp-contributions-deleted' => 'выдалены ўнёсак удзельніка', -'sp-contributions-logs' => 'журналы падзеяў', -'sp-contributions-talk' => 'гутаркі', -'sp-contributions-userrights' => 'кіраваньне правамі ўдзельнікаў і ўдзельніц', -'sp-contributions-blocked-notice' => '{{GENDER:$1|Гэты ўдзельнік у дадзены момант заблякаваны|Гэтая ўдзельніца ў дадзены момант заблякаваная}}. Апошні запіс з журнала блякаваньняў пададзены ніжэй для даведкі:', -'sp-contributions-search' => 'Пошук унёску', -'sp-contributions-username' => 'IP-адрас альбо імя ўдзельніка/ўдзельніцы:', -'sp-contributions-submit' => 'Шукаць', +'sp-contributions-newbies' => 'Паказаць унёсак толькі з новых рахункаў', +'sp-contributions-newbies-sub' => 'Унёсак пачынаючых', +'sp-contributions-newbies-title' => 'Унёсак удзельнікаў з новых рахункаў', +'sp-contributions-blocklog' => 'журнал блякаваньняў', +'sp-contributions-deleted' => 'выдалены ўнёсак удзельніка', +'sp-contributions-uploads' => 'загрузкі', +'sp-contributions-logs' => 'журналы падзеяў', +'sp-contributions-talk' => 'гутаркі', +'sp-contributions-userrights' => 'кіраваньне правамі ўдзельнікаў і ўдзельніц', +'sp-contributions-blocked-notice' => '{{GENDER:$1|Гэты ўдзельнік у дадзены момант заблякаваны|Гэтая ўдзельніца ў дадзены момант заблякаваная}}. Апошні запіс з журнала блякаваньняў пададзены ніжэй для даведкі:', +'sp-contributions-blocked-notice-anon' => 'Гэты IP-адрас у дадзены момант заблякаваны. +Апошні запіс з журнала блякаваньняў пададзены ніжэй для даведкі:', +'sp-contributions-search' => 'Пошук унёску', +'sp-contributions-username' => 'IP-адрас альбо імя ўдзельніка/ўдзельніцы:', +'sp-contributions-toponly' => 'Паказваць толькі зьмены, якія зьяўляюцца апошнімі вэрсіямі', +'sp-contributions-submit' => 'Шукаць', # What links here 'whatlinkshere' => 'Спасылкі на старонку', @@ -2345,7 +2402,6 @@ $1', 'ipb-edit-dropdown' => 'Рэдагаваць прычыны блякіровак', 'ipb-unblock-addr' => 'Разблякаваць $1', 'ipb-unblock' => 'Разблякаваць рахунак ўдзельніка ці IP-адрас', -'ipb-blocklist-addr' => 'Наяўныя блякаваньні для $1', 'ipb-blocklist' => 'Паказаць існуючыя блякаваньні', 'ipb-blocklist-contribs' => 'Унёсак $1', 'unblockip' => 'Разблякаваць удзельніка', @@ -2415,6 +2471,8 @@ $1 ужо заблякаваны. Вы жадаеце зьмяніць пара Вы ня зможаце стварыць рахунак', 'cant-block-while-blocked' => 'Вы ня можаце блякаваць іншых удзельнікаў, пакуль Вы самі заблякаваныя.', 'cant-see-hidden-user' => 'Удзельнік, якога Вы спрабуеце заблякаваць, ужо заблякаваны і схаваны. З-за таго, што Вы ня маеце правоў хаваньня ўдзельнікаў, Вы ня можаце бачыць альбо зьмяняць блякаваньне удзельніка.', +'ipbblocked' => 'Вы ня можаце блякаваць ці раблякоўваць іншых удзельнікаў, таму што заблякаваныя самі', +'ipbnounblockself' => 'Вы ня можаце раблякоўваць сябе', # Developer tools 'lockdb' => 'Заблякаваць базу зьвестак', @@ -2451,6 +2509,17 @@ $1 ужо заблякаваны. Вы жадаеце зьмяніць пара '''ПАПЯРЭДЖАНЬНЕ!''' Зьмена назвы можа прывесьці да нечаканых зьменаў папулярных старонак; калі ласка, упэўніцеся, што Вы разумееце наступствы такіх зьменаў.", +'movepagetext-noredirectfixer' => "Скарыстаўшыся гэтай формай, Вы перанесяце старонку з усёй гісторыяй зьменаў да новай назвы. +Старонка са старой назвай будзе перанакіроўваць на старонку з новай. +Калі ласка, праверце існаваньне [[Special:DoubleRedirects|падвоеных]] і [[Special:BrokenRedirects|няслушных перанакіраваньняў]]. +Вы адказныя за тое, каб спасылкі працягвалі весьці туды, куды яны павінны. + +Заўважце, калі ласка, што старонка '''ня будзе''' перанесеная, калі ўжо існуе старонка з новай назвай, акрамя выпадкаў, калі яна пустая ці зьмяшчае перанакіраваньне, а таксама ня мае папярэдняй гісторыі рэдагаваньняў. +Гэта значыць, што Вы можаце перанесьці старонку назад, калі зробіце памылку, але ня можаце выпадкова перазапісаць існуючую старонку. + +'''Папярэджаньне!''' +Перанос можа быць маштабным і нечаканым для ''папулярных'' старонак. +Упэўніцеся, калі ласка, што Вы разумееце ўсе магчымыя наступствы пераносу.", 'movepagetalktext' => "Старонка абмеркаваньня будзе перанесеная разам з асноўнай старонкай, '''за выключэньнем:''' * Не пустая старонка абмеркаваньня ўжо існуе пад новай назвай, альбо * Вы не паставілі адзнаку ў полі ніжэй. @@ -2506,6 +2575,7 @@ $1 ужо заблякаваны. Вы жадаеце зьмяніць пара 'immobile-source-page' => 'Гэтую старонку нельга пераносіць.', 'immobile-target-page' => 'Немагчыма перанесьці старонку пад гэтую назву.', 'imagenocrossnamespace' => 'Нельга перанесьці файл у ня-файлавую прастору назваў', +'nonfile-cannot-move-to-file' => 'Нельга перанесьці ня файл у прастору назваў файлаў', 'imagetypemismatch' => 'Новае пашырэньне файла не адпавядае яго тыпу', 'imageinvalidfilename' => 'Няслушная назва мэтавага файла', 'fix-double-redirects' => 'Абнавіць усе перанакіраваньні на першапачатковую назву', @@ -2587,6 +2657,7 @@ $1 ужо заблякаваны. Вы жадаеце зьмяніць пара 'importstart' => 'Імпартаваньне старонак…', 'import-revision-count' => '$1 {{PLURAL:$1|вэрсія|вэрсіі|вэрсій}}', 'importnopages' => 'Няма старонак для імпартаваньня.', +'imported-log-entries' => '{{PLURAL:$1|Імпартаваны $1 запіс журнала|Імпартаваныя $1 запісы журнала|Імпартаваныя $1 запісаў журнала}}.', 'importfailed' => 'Немагчыма імпартаваць: $1', 'importunknownsource' => 'Невядомы тып крыніцы імпарту', 'importcantopen' => 'Немагчыма адкрыць файл імпарту', @@ -2664,7 +2735,7 @@ $1 ужо заблякаваны. Вы жадаеце зьмяніць пара 'tooltip-t-permalink' => 'Сталая спасылка на гэтую вэрсію старонкі', 'tooltip-ca-nstab-main' => 'Паказаць зьмест старонкі', 'tooltip-ca-nstab-user' => 'Паказаць старонку ўдзельніка', -'tooltip-ca-nstab-media' => 'Паказаць старонку мэдыя-файла', +'tooltip-ca-nstab-media' => 'Паказаць старонку мэдыяфайла', 'tooltip-ca-nstab-special' => 'Гэта спэцыяльная старонка, і Вы ня можаце яе рэдагаваць', 'tooltip-ca-nstab-project' => 'Паказаць старонку праекту', 'tooltip-ca-nstab-image' => 'Паказаць старонку файла', @@ -2683,6 +2754,8 @@ $1 ужо заблякаваны. Вы жадаеце зьмяніць пара 'tooltip-rollback' => '«Адкат» вяртае рэдагаваньні папярэдняга ўдзельніка адным клікам.', 'tooltip-undo' => '«Скасаваць» — скасоўвае гэтае рэдагаваньне і адкрывае акно рэдагаваньня ў рэжыме прагляду. Дазваляе дадаваць прычыну адкату ў апісаньне зьменаў.', +'tooltip-preferences-save' => 'Захаваць налады', +'tooltip-summary' => 'Увядзіце кароткае апісаньне', # Metadata 'nodublincore' => 'Мэтазьвесткі Dublin Core RDF забароненыя на гэтым сэрвэры.', @@ -2789,14 +2862,17 @@ $1', 'imagemaxsize' => "Абмежаваньне памеру выяваў:
    ''(для старонак апісаньня файлаў)''", 'thumbsize' => 'Памер паменшанай вэрсіі выявы:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|старонка|старонкі|старонак}}', -'file-info' => '(памер файла: $1, тып MIME: $2)', -'file-info-size' => '($1 × $2 {{PLURAL:$2|піксэль|піксэлі|піксэляў}}, памер файла: $3, тып MIME: $4)', +'file-info' => 'памер файла: $1, тып MIME: $2', +'file-info-size' => '$1 × $2 {{PLURAL:$2|піксэль|піксэлі|піксэляў}}, памер файла: $3, тып MIME: $4', 'file-nohires' => 'Няма вэрсіі зь лепшым разрозьненьнем.', -'svg-long-desc' => '(SVG-файл, намінальна $1 × $2 {{PLURAL:$2|піксэль|піксэлі|піксэляў}}, памер файла: $3).', +'svg-long-desc' => 'SVG-файл, намінальна $1 × $2 {{PLURAL:$2|піксэль|піксэлі|піксэляў}}, памер файла: $3.', 'show-big-image' => 'Найлепшае разрозьненьне', 'show-big-image-thumb' => 'Памер пры папярэднім праглядзе: $1 × $2 {{PLURAL:$2|піксэль|піксэлі|піксэляў}}', 'file-info-gif-looped' => 'паўтараючыся', 'file-info-gif-frames' => '$1 {{PLURAL:$1|кадар|кадры|кадраў}}', +'file-info-png-looped' => 'паўтараючыся', +'file-info-png-repeat' => 'паўтораны $1 {{PLURAL:$1|раз|разы|разоў}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|кадар|кадры|кадраў}}', # Special:NewFiles 'newimages' => 'Галерэя новых файлаў', @@ -2955,6 +3031,7 @@ $1', 'exif-gpsareainformation' => 'Назва GPS-зоны', 'exif-gpsdatestamp' => 'Дата GPS', 'exif-gpsdifferential' => 'Дыфэрэнцыяльная папраўка GPS', +'exif-objectname' => 'Кароткая назва', # EXIF attributes 'exif-compression-1' => 'Нясьціснуты', @@ -3114,23 +3191,23 @@ $1', 'limitall' => 'усе', # E-mail address confirmation -'confirmemail' => 'Пацьвердзіць адрас электроннай пошты', -'confirmemail_noemail' => 'Вы не пазначылі слушны адрас электроннай пошты ў Вашых [[Special:Preferences|наладах удзельніка]].', -'confirmemail_text' => '{{SITENAME}} патрабуе, каб Вы пацьвердзілі Ваш адрас электроннай пошты перад ўжываньнем магчымасьцяў электроннай пошты. Актывізуйце кнопку ніжэй, каб даслаць ліст з пацьверджаньнем на Ваш адрас. Ліст будзе ўтрымліваць спасылку з кодам; загрузіце спасылку ў Вашым браўзэры, каб пацьвердзіць, што Ваш адрас электроннай пошты зьяўляецца слушным.', -'confirmemail_pending' => 'Код пацьверджаньня ужо быў дасланы Вам праз электронную пошту; калі Вы нядаўна стварылі рахунак, Вам варта пачакаць код некалькі хвілінаў перад спробай запыту новага коду.', -'confirmemail_send' => 'Даслаць код пацьверджаньня', -'confirmemail_sent' => 'Ліст для пацьверджаньня дасланы.', -'confirmemail_oncreate' => 'Код пацьверджаньня быў адпраўлены на Ваш адрас электроннай пошты. Гэты код не патрэбны, каб увайсьці, але Вам трэба будзе падаць яго перад ужываньнем магчымасьцяў, заснаваных на электроннай пошце, у {{GRAMMAR:месны|{{SITENAME}}}}.', -'confirmemail_sendfailed' => '{{SITENAME}} ня можа даслаць пацьвярджальны ліст. Праверце адрас на наяўнасьць няслушных сымбаляў. +'confirmemail' => 'Пацьвердзіць адрас электроннай пошты', +'confirmemail_noemail' => 'Вы не пазначылі слушны адрас электроннай пошты ў Вашых [[Special:Preferences|наладах удзельніка]].', +'confirmemail_text' => '{{SITENAME}} патрабуе, каб Вы пацьвердзілі Ваш адрас электроннай пошты перад ўжываньнем магчымасьцяў электроннай пошты. Актывізуйце кнопку ніжэй, каб даслаць ліст з пацьверджаньнем на Ваш адрас. Ліст будзе ўтрымліваць спасылку з кодам; загрузіце спасылку ў Вашым браўзэры, каб пацьвердзіць, што Ваш адрас электроннай пошты зьяўляецца слушным.', +'confirmemail_pending' => 'Код пацьверджаньня ужо быў дасланы Вам праз электронную пошту; калі Вы нядаўна стварылі рахунак, Вам варта пачакаць код некалькі хвілінаў перад спробай запыту новага коду.', +'confirmemail_send' => 'Даслаць код пацьверджаньня', +'confirmemail_sent' => 'Ліст для пацьверджаньня дасланы.', +'confirmemail_oncreate' => 'Код пацьверджаньня быў адпраўлены на Ваш адрас электроннай пошты. Гэты код не патрэбны, каб увайсьці, але Вам трэба будзе падаць яго перад ужываньнем магчымасьцяў, заснаваных на электроннай пошце, у {{GRAMMAR:месны|{{SITENAME}}}}.', +'confirmemail_sendfailed' => '{{SITENAME}} ня можа даслаць пацьвярджальны ліст. Праверце адрас на наяўнасьць няслушных сымбаляў. Адказ паштовага сэрвэра: $1', -'confirmemail_invalid' => 'Няслушны код пацьверджаньня. Магчыма, скончыўся яго тэрмін дзеяньня.', -'confirmemail_needlogin' => 'Вам трэба $1, каб пацьвердзіць Ваш адрас электроннай пошты.', -'confirmemail_success' => 'Ваш адрас электроннай пошты быў пацьверджаны. Зараз Вы можаце ўвайсьці.', -'confirmemail_loggedin' => 'Ваш адрас электроннай пошты быў пацьверджаны.', -'confirmemail_error' => 'Нешта пайшло ня так у часе захаваньня вашага пацьверджаньня.', -'confirmemail_subject' => '{{SITENAME}}: Пацьверджаньне адрасу электроннай пошты', -'confirmemail_body' => 'Нехта, магчыма Вы, з IP-адрасу $1, стварыў рахунак «$2» з гэтым адрасам электроннай пошты ў праекце {{SITENAME}}. +'confirmemail_invalid' => 'Няслушны код пацьверджаньня. Магчыма, скончыўся яго тэрмін дзеяньня.', +'confirmemail_needlogin' => 'Вам трэба $1, каб пацьвердзіць Ваш адрас электроннай пошты.', +'confirmemail_success' => 'Ваш адрас электроннай пошты быў пацьверджаны. Зараз Вы можаце ўвайсьці.', +'confirmemail_loggedin' => 'Ваш адрас электроннай пошты быў пацьверджаны.', +'confirmemail_error' => 'Нешта пайшло ня так у часе захаваньня вашага пацьверджаньня.', +'confirmemail_subject' => '{{SITENAME}}: Пацьверджаньне адрасу электроннай пошты', +'confirmemail_body' => 'Нехта, магчыма Вы, з IP-адрасу $1, стварыў рахунак «$2» з гэтым адрасам электроннай пошты ў праекце {{SITENAME}}. Каб пацьвердзіць, што гэты рахунак належыць Вам і актывізаваць магчымасьці электроннай пошты ў {{GRAMMAR:месны|{{SITENAME}}}}, адкрыйце гэтую спасылку у Вашым браўзэры: @@ -3141,8 +3218,32 @@ $3 $5 Код дзейнічае да $4.', -'confirmemail_invalidated' => 'Пацьверджаньне адрасу электроннай пошты адмененае', -'invalidateemail' => 'Скасаваць пацьверджаньне адрасу электроннай пошты', +'confirmemail_body_changed' => 'Нехта, магчыма Вы, з IP-адрасу $1, зьмяніў адрас электроннай пошты рахунку «$2» у праекце {{SITENAME}}. + +Каб пацьвердзіць, што гэты рахунак належыць Вам і актывізаваць магчымасьці электроннай пошты ў {{GRAMMAR:месны|{{SITENAME}}}} зноў, адкрыйце гэтую спасылку у Вашым браўзэры: + +$3 + +Калі рахунак належыць *ня* Ваш, адкрыйце наступную спасылку для таго, каб не пацьвердзіць адрас электроннай пошты: + +$5 + +Код дзейнічае да $4.', +'confirmemail_body_set' => 'Нехта, магчыма Вы, з IP-адраса $1, +устанавіў адрас электроннай пошты для рахунку «$2» у {{GRAMMAR:месны|{{SITENAME}}}}. + +Каб пацьвердзіць, што гэты рахунак сапраўды належыць Вам, і каб актывізаваць новы магчымасьці электроннай пошты ў {{GRAMMAR:месны|{{SITENAME}}}}, адкрыйце гэтую спасылку у Вашым браўзэры: + +$3 + +Калі рахунак Вам *не* належыць, перайдзіце па гэтай спасылцы +каб скасаваць пацьверджаньне па электроннай пошце: + +$5 + +Гэты код пацьверджаньня дзейнічае да $4.', +'confirmemail_invalidated' => 'Пацьверджаньне адрасу электроннай пошты адмененае', +'invalidateemail' => 'Скасаваць пацьверджаньне адрасу электроннай пошты', # Scary transclusion 'scarytranscludedisabled' => '[Улучэньне інтэрвікі было адключанае]', @@ -3184,6 +3285,7 @@ $1', 'table_pager_first' => 'Першая старонка', 'table_pager_last' => 'Апошняя старонка', 'table_pager_limit' => 'Паказваць $1 элемэнтаў на старонцы', +'table_pager_limit_label' => 'Запісаў на старонку:', 'table_pager_limit_submit' => 'Перайсьці', 'table_pager_empty' => 'Ня знойдзена', @@ -3248,6 +3350,7 @@ $1', 'version-specialpages' => 'Спэцыяльныя старонкі', 'version-parserhooks' => 'Працэдуры-перахопнікі парсэра', 'version-variables' => 'Зьменныя', +'version-skins' => 'Афармленьні', 'version-other' => 'Іншыя', 'version-mediahandlers' => 'Апрацоўшчыкі мэдыя', 'version-hooks' => 'Працэдуры-перахопнікі', @@ -3259,6 +3362,13 @@ $1', 'version-hook-subscribedby' => 'Падпісаны на', 'version-version' => '(Вэрсія $1)', 'version-license' => 'Ліцэнзія', +'version-poweredby-credits' => "{{SITENAME}} працуе на праграмным забесьпячэньні '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'іншыя', +'version-license-info' => 'MediaWiki зьяўляецца вольным праграмным забесьпячэньнем, якое Вы можаце распаўсюджваць і/ці зьмяняць на ўмовах ліцэнзіі GNU General Public License вэрсіі 2 ці болей позьняй, апублікаванай Фундацыяй вольнага праграмнага забесьпячэньня (Free Software Foundation). + +MediaWiki распаўсюджваецца з надзеяй, што будзе карысным, але БЕЗ АНІЯКІХ ГАРАНТЫЯЎ, нават без меркаваных гарантыяў КАМЭРЦЫЙНАЙ КАШТОЎНАСЬЦІ ці ПРЫДАТНАСЬЦІ ДА ПЭЎНАЙ МЭТЫ. Глядзіце ліцэнзію GNU General Public License для болей падрабязных зьвестак. + +Вы мусілі атрымаць [{{SERVER}}{{SCRIPTPATH}}/COPYING копію GNU General Public License] разам з гэтым праграмным забесьпячэньнем. Калі не, напішыце Free Software Foundation, Inc. па адрасе 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, альбо прачытайце [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html он-лайн копію ліцэнзіі].', 'version-software' => 'Усталяванае праграмнае забесьпячэньне', 'version-software-product' => 'Прадукт', 'version-software-version' => 'Вэрсія', @@ -3293,7 +3403,7 @@ $1', 'specialpages-group-other' => 'Іншыя спэцыяльныя старонкі', 'specialpages-group-login' => 'Уваход / стварэньне рахунку', 'specialpages-group-changes' => 'Апошнія зьмены і журналы падзеяў', -'specialpages-group-media' => 'Справаздачы пра мэдыя-файлы і загрузка', +'specialpages-group-media' => 'Справаздачы пра мэдыяфайлы і загрузка', 'specialpages-group-users' => 'Удзельнікі і правы', 'specialpages-group-highuse' => 'Частаўжываныя старонкі', 'specialpages-group-pages' => 'Сьпісы старонак', @@ -3329,6 +3439,15 @@ $1', 'tags-edit' => 'рэдагаваць', 'tags-hitcount' => '$1 {{PLURAL:$1|зьмена|зьмены|зьменаў}}', +# Special:ComparePages +'comparepages' => 'Параўнаньне старонак', +'compare-selector' => 'Параўнаньне вэрсіяў старонак', +'compare-page1' => 'Старонка 1', +'compare-page2' => 'Старонка 2', +'compare-rev1' => 'Вэрсія 1', +'compare-rev2' => 'Вэрсія 2', +'compare-submit' => 'Параўнаць', + # Database error messages 'dberr-header' => 'Гэтая вікі не функцыянуе спраўна', 'dberr-problems' => 'Прабачце! На гэтым сайце ўзьніклі тэхнічныя цяжкасьці.', @@ -3345,8 +3464,13 @@ $1', 'htmlform-float-invalid' => 'Значэньне, якое Вы выбралі, не зьяўляецца лікам.', 'htmlform-int-toolow' => 'Значэньне, якое вы выбралі, менш за $1', 'htmlform-int-toohigh' => 'Значэньне, якое Вы выбралі, больш за $1', +'htmlform-required' => 'Гэтае значэньне — неабходнае', 'htmlform-submit' => 'Захаваць', 'htmlform-reset' => 'Адмяніць зьмены', 'htmlform-selectorother-other' => 'Іншае', +# SQLite database support +'sqlite-has-fts' => '$1 з падтрымкай поўнатэкстнага пошуку', +'sqlite-no-fts' => '$1 без падтрымкі поўнатэкстнага пошуку', + ); diff --git a/languages/messages/MessagesBg.php b/languages/messages/MessagesBg.php index 8570c1e5..de5e4bb8 100644 --- a/languages/messages/MessagesBg.php +++ b/languages/messages/MessagesBg.php @@ -224,7 +224,7 @@ $specialPageAliases = array( $linkTrail = '/^([a-zабвгдежзийклмнопрстуфхцчшщъыьэюя]+)(.*)$/sDu'; -$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' ); +$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' ); $messages = array( # User preference toggles @@ -242,8 +242,7 @@ $messages = array( 'tog-editsection' => 'Възможност за редактиране на раздел чрез препратка [редактиране]', 'tog-editsectiononrightclick' => 'Възможност за редактиране на раздел при щракване с десния бутон върху заглавие на раздел (изисква Джаваскрипт)', 'tog-showtoc' => 'Показване на съдържание (за страници с повече от три раздела)', -'tog-rememberpassword' => 'Запомняне между сесиите', -'tog-editwidth' => 'Максимална ширина на кутията за редактиране', +'tog-rememberpassword' => 'Запомяне на паролата ми в този браузър (за не повече от $1 {{PLURAL:$1|ден|дни}})', 'tog-watchcreations' => 'Добавяне на създадените от мен страници към списъка ми за наблюдение', 'tog-watchdefault' => 'Добавяне на редактираните от мен страници към списъка ми за наблюдение', 'tog-watchmoves' => 'Добавяне на преместените от мен страници към списъка ми за наблюдение', @@ -391,31 +390,21 @@ $messages = array( 'faqpage' => 'Project:ЧЗВ', # Vector skin -'vector-action-addsection' => 'Добавяне на тема', -'vector-action-delete' => 'Изтриване', -'vector-action-move' => 'Преместване', -'vector-action-protect' => 'Защита', -'vector-action-undelete' => 'Възстановяване', -'vector-action-unprotect' => 'Сваляне на защитата', -'vector-namespace-category' => 'Категория', -'vector-namespace-help' => 'Помощ', -'vector-namespace-image' => 'Файл', -'vector-namespace-main' => 'Страница', -'vector-namespace-media' => 'Медия', -'vector-namespace-mediawiki' => 'Съобщение', -'vector-namespace-project' => 'Проект', -'vector-namespace-special' => 'Специална страница', -'vector-namespace-talk' => 'Беседа', -'vector-namespace-template' => 'Шаблон', -'vector-namespace-user' => 'Потребител', -'vector-view-create' => 'Създаване', -'vector-view-edit' => 'Редактиране', -'vector-view-history' => 'История', -'vector-view-view' => 'Преглед', -'vector-view-viewsource' => 'Преглед на кода', -'actions' => 'Действия', -'namespaces' => 'Именни пространства', -'variants' => 'Варианти', +'vector-action-addsection' => 'Добавяне на тема', +'vector-action-delete' => 'Изтриване', +'vector-action-move' => 'Преместване', +'vector-action-protect' => 'Защита', +'vector-action-undelete' => 'Възстановяване', +'vector-action-unprotect' => 'Сваляне на защитата', +'vector-simplesearch-preference' => 'Включване на предложениия при търсене (само за изгледа Vector)', +'vector-view-create' => 'Създаване', +'vector-view-edit' => 'Редактиране', +'vector-view-history' => 'История', +'vector-view-view' => 'Преглед', +'vector-view-viewsource' => 'Преглед на кода', +'actions' => 'Действия', +'namespaces' => 'Именни пространства', +'variants' => 'Варианти', 'errorpagetitle' => 'Грешка', 'returnto' => 'Обратно към $1.', @@ -476,6 +465,9 @@ $messages = array( Моля, изчакайте малко преди отново да пробвате да отворите страницата. $1', +'pool-timeout' => 'Изтичане на времето за заключване на страницата', +'pool-queuefull' => 'Опашката за заявки е пълна', +'pool-errorunknown' => 'Непозната грешка', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'За {{SITENAME}}', @@ -640,7 +632,8 @@ $2', 'yourname' => 'Потребителско име:', 'yourpassword' => 'Парола:', 'yourpasswordagain' => 'Парола (повторно):', -'remembermypassword' => 'Запомняне на паролата', +'remembermypassword' => 'Запомняне на паролата на този компютър (най-много за $1 {{PLURAL:$1|ден|дни}})', +'securelogin-stick-https' => 'Запазване на връзката през HTTPS след влизане', 'yourdomainname' => 'Домейн:', 'externaldberror' => 'Или е станала грешка в базата от данни при външното удостоверяване, или не ви е позволено да обновявате външната си сметка.', 'login' => 'Влизане', @@ -659,6 +652,7 @@ $2', 'gotaccount' => "Имате ли вече сметка? '''$1'''.", 'gotaccountlink' => 'Влизане', 'createaccountmail' => 'с писмо по електронната поща', +'createaccountreason' => 'Причина:', 'badretype' => 'Въведените пароли не съвпадат.', 'userexists' => 'Въведеното потребителско име вече се използва. Изберете друго име.', @@ -679,6 +673,7 @@ $2', 'wrongpasswordempty' => 'Въведената парола е празна. Опитайте отново.', 'passwordtooshort' => 'Необходимо е паролата да съдържа поне {{PLURAL:$1|1 знак|$1 знака}}.', 'password-name-match' => 'Паролата ви трябва да се различава от потребителското ви име.', +'password-login-forbidden' => 'Използването на това потребителско име и парола е забранено.', 'mailmypassword' => 'Изпращане на нова парола', 'passwordremindertitle' => 'Напомняне за парола от {{SITENAME}}', 'passwordremindertext' => 'Някой (най-вероятно вие, от IP-адрес $1) е пожелал нова парола за влизане в {{SITENAME}} ($4). @@ -715,6 +710,9 @@ $2', 'loginlanguagelabel' => 'Език: $1', 'suspicious-userlogout' => 'Заявката ви за излизане от системата беше отхвърлена, тъй като изглежда е била изпратена погрешка от браузъра или кеширащото прокси.', +# E-mail sending +'php-mail-error-unknown' => 'Неизвестна грешка в mail() функцията на PHP', + # Password reset dialog 'resetpass' => 'Промяна на парола', 'resetpass_announce' => 'Влязохте с временен код, получен по електронната поща. Сега е нужно да си изберете нова парола:', @@ -766,9 +764,11 @@ $2', 'showlivepreview' => 'Бърз предварителен преглед', 'showdiff' => 'Показване на промените', 'anoneditwarning' => "'''Внимание:''' Не сте влезли в системата. В историята на страницата ще бъде записан вашият IP-адрес.", +'anonpreviewwarning' => 'Внимание: Не сте влезли в системата. Ако съхраните редакцията си, тя ще бъде записана в историята на страницата с вашият IP-адрес.', 'missingsummary' => "'''Напомняне:''' Не е въведено кратко описание на промените. При повторно натискане на бутона „Съхраняване“, редакцията ще бъде съхранена без резюме.", 'missingcommenttext' => 'По-долу въведете вашето съобщение.', -'missingcommentheader' => "'''Напомняне:''' Не е въведено заглавие на коментара. При повторно натискане на бутона „Съхраняване“, редакцията ще бъде записана без такова.", +'missingcommentheader' => "'''Напомняне:''' Не е въведено заглавие на коментара. +При повторно натискане на \"{{int:savearticle}}\", редакцията ще бъде записана без такова.", 'summary-preview' => 'Предварителен преглед на резюмето:', 'subject-preview' => 'Предварителен преглед на заглавието:', 'blockedtitle' => 'Потребителят е блокиран', @@ -839,7 +839,11 @@ $2', 'userjsyoucanpreview' => "'''Съвет:''' Използвайте бутона „{{int:showpreview}}“, за да изпробвате новия код на Джаваскрипт преди съхранението.", 'usercsspreview' => "'''Не забравяйте, че това е само предварителен преглед на кода на CSS. Страницата все още не е съхранена!'''", 'userjspreview' => "'''Не забравяйте, че това е само изпробване/предварителен преглед на кода на Джаваскрипт. Страницата все още не е съхранена!'''", -'userinvalidcssjstitle' => "'''Внимание:''' Не съществува облик „$1“. Необходимо е да се знае, че имената на потребителските ви страници за CSS и Джаваскрипт трябва да се състоят от малки букви, например: „{{ns:user}}:Иван/monobook.css“ (а не „{{ns:user}}:Иван/Monobook.css“).", +'sitecsspreview' => "'''Не забравяйте, че това е само предварителен преглед на този CSS.''' +'''Той все още не е съхранен!'''", +'sitejspreview' => "'''Не забравяйте, че това е само предварителен преглед на този Джаваскрипт код.''' +'''Той все още не е съхранен!'''", +'userinvalidcssjstitle' => "'''Внимание:''' Не съществува облик „$1“. Необходимо е да се знае, че имената на потребителските ви страници за CSS и Джаваскрипт трябва да се състоят от малки букви, например: „{{ns:user}}:Иван/vector.css“ (а не „{{ns:user}}:Иван/Vector.css“).", 'updated' => '(обновена)', 'note' => "'''Забележка:'''", 'previewnote' => "'''Това е само предварителен преглед. Промените все още не са съхранени!'''", @@ -877,8 +881,6 @@ $2', Ако сте ползвали чужди материали, за които имате разрешение, непременно посочете източника.
    '''Не публикувайте произведения с авторски права без разрешение!'''
    ", -'longpagewarning' => "'''ВНИМАНИЕ: Страницата има размер $1 килобайта; някои браузъри могат да имат проблеми при редактиране на страници по-големи от 32 kB. -Обмислете дали страницата не може да се раздели на няколко по-малки части.'''", 'longpageerror' => "'''ГРЕШКА: Текстът, който пращате, е с големина $1 килобайта, което надвишава позволения максимум от $2 килобайта. Заради това не може да бъде съхранен.'''", 'readonlywarning' => "'''ВНИМАНИЕ: Базата от данни беше затворена за поддръжка, затова в момента промените ви не могат да бъдат съхранени. Ако желаете, можете да съхраните страницата като текстов файл и да се опитате да я публикувате по-късно.''' @@ -1051,6 +1053,8 @@ $1", 'logdelete-failure' => "'''Данните не могат да се видят:''' $1", 'revdel-restore' => 'Промяна на видимостта', +'revdel-restore-deleted' => 'изтрити версии', +'revdel-restore-visible' => 'видими редакции', 'pagehist' => 'История на страницата', 'deletedhist' => 'Изтрита история', 'revdelete-content' => 'съдържание', @@ -1118,11 +1122,13 @@ $1", # Diffs 'history-title' => 'Преглед на историята на „$1“', 'difference' => '(Разлики между версиите)', +'difference-multipage' => '(Разлики между страниците)', 'lineno' => 'Ред $1:', 'compareselectedversions' => 'Сравнение на избраните версии', 'showhideselectedversions' => 'Показване/скриване на избрани версии', 'editundo' => 'връщане', -'diff-multi' => '({{PLURAL:$1|Една междинна версия не е показана|$1 междинни версии не са показани}}.)', +'diff-multi' => '({{PLURAL:$1|Не е показана една междинна версия|Не са показани $1 междинни версии}} от {{PLURAL:$2|един потребител|$2 потребителя}}.)', +'diff-multi-manyusers' => '({{PLURAL:$1|Не е показана една междинна версия|Не са показани $1 междинни версии}} от повече от $2 {{PLURAL:$2|потребител|потребителя}})', # Search results 'searchresults' => 'Резултати от търсенето', @@ -1157,6 +1163,7 @@ $1", 'searchprofile-everything-tooltip' => 'Търсене в цялото съдържание (вкл. беседи)', 'searchprofile-advanced-tooltip' => 'Търсене в избрани именни пространства', 'search-result-size' => '$1 ({{PLURAL:$2|една дума|$2 думи}})', +'search-result-category-size' => '{{PLURAL:$1|1 член|$1 члена}} ({{PLURAL:$2|1 подкатегория|$2 подкатегории}}, {{PLURAL:$3|1 файл|$3 файла}})', 'search-result-score' => 'Релевантност: $1%', 'search-redirect' => '(пренасочване $1)', 'search-section' => '(раздел $1)', @@ -1232,6 +1239,7 @@ $1", 'contextlines' => 'Редове за резултат:', 'contextchars' => 'Знаци от контекста на ред:', 'stub-threshold' => 'Праг за форматиране на препратки към мъничета:', +'stub-threshold-disabled' => 'Изключено', 'recentchangesdays' => 'Брой дни в последни промени:', 'recentchangesdays-max' => '(най-много $1 {{PLURAL:$1|ден|дни}})', 'recentchangescount' => 'Брой показвани редакции по подразбиране:', @@ -1265,6 +1273,7 @@ $1", 'prefs-files' => 'Файлове', 'prefs-custom-css' => 'Личен CSS', 'prefs-custom-js' => 'Личен JS', +'prefs-common-css-js' => 'Общи настройки на CSS/JS за всички облици:', 'prefs-reset-intro' => 'Тази страница може да се използва за възстановяване на потребителските настройки към стандартните за сайта. Това действие е необратимо.', 'prefs-emailconfirm-label' => 'Потвърждаване на адрес за е-поща:', @@ -1301,9 +1310,15 @@ $1", 'prefs-advancedrendering' => 'Разширени настройки', 'prefs-advancedsearchoptions' => 'Разширени настройки', 'prefs-advancedwatchlist' => 'Разширени настройки', -'prefs-display' => 'Настройки за показване на списъка', +'prefs-displayrc' => 'Настройки за показване на списъка', +'prefs-displaysearchoptions' => 'Настройки на изгледа', +'prefs-displaywatchlist' => 'Видими настройки', 'prefs-diffs' => 'Разлики', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Адресът за е-поща изглежда валиден', +'email-address-validity-invalid' => 'Въведете валиден адрес за е-поща', + # User rights 'userrights' => 'Управление на потребителските права', 'userrights-lookup-user' => 'Управляване на потребителските групи', @@ -1387,6 +1402,7 @@ $1", 'right-hideuser' => 'блокиране и скриване на потребителско име', 'right-ipblock-exempt' => 'пренебрегване на блокирания по IP blocks, автоматични блокирания и блокирани IP интервали', 'right-proxyunbannable' => 'пренебрегване на автоматичното блокиране на проксита', +'right-unblockself' => 'Собствено отблокиране', 'right-protect' => 'променяне на нивото на защита и редактиране на защитени страници', 'right-editprotected' => 'редактиране на защитени страници (без каскадна защита)', 'right-editinterface' => 'редактиране на интерфейса', @@ -1409,7 +1425,6 @@ $1", 'right-siteadmin' => 'заключване и отключване на базата от данни', 'right-reset-passwords' => 'Смяна на паролите на други потребители', 'right-override-export-depth' => 'Изнасяне на страници, включително свързаните с тях в дълбочина до пето ниво', -'right-versiondetail' => 'Показване на подробна информация за версията на софтуера', 'right-sendemail' => 'Изпращане на е-писма до другите потребители', # User rights log @@ -1463,14 +1478,9 @@ $1", Легенда: '''тек''' = разлика на текущата версия, '''ист''' = история на версиите", 'recentchanges-feed-description' => 'Проследяване на последните промени в {{SITENAME}}.', -'recentchanges-label-legend' => 'Легенда: $1.', -'recentchanges-legend-newpage' => '$1 - нова страница', 'recentchanges-label-newpage' => 'С тази редакция беше създадена нова страница', -'recentchanges-legend-minor' => '$1 - малка промяна', 'recentchanges-label-minor' => 'Това е малка промяна', -'recentchanges-legend-bot' => '$1 - редакция от бот', 'recentchanges-label-bot' => 'Тази редакция е извършена от робот', -'recentchanges-legend-unpatrolled' => '$1 - непроверена редакция', 'recentchanges-label-unpatrolled' => 'Тази редакция все още не е проверена', 'rcnote' => "{{PLURAL:$1|Показана е '''1''' промяна|Показани са последните '''$1''' промени}} през {{PLURAL:$2|последния ден|последните '''$2''' дни}}, към $5, $4.", 'rcnotefrom' => 'Дадени са промените от $2 (до $1 показани).', @@ -1520,6 +1530,9 @@ $1", 'upload_directory_missing' => 'Директорията за качване ($1) липсва и не може да бъде създадена на сървъра.', 'upload_directory_read_only' => 'Сървърът няма достъп за писане в директорията за качване „$1“.', 'uploaderror' => 'Грешка при качване', +'upload-recreate-warning' => "'''Внимание: Файл с това име вече е бил изтрит или преместен.''' + +За повече информация можете да прегледате записите от дневниците на изтриванията и преместванията:", 'uploadtext' => "Формулярът по-долу служи за качване на файлове, които ще могат да се използват в страниците. За преглеждане и търсене на вече качените файлове може да се използва [[Special:FileList|списъка с качени файлове]]. Качванията и изтриванията се записват в [[Special:Log/upload|дневника на качванията]] и [[Special:Log/delete|дневник на изтриванията]]. @@ -1551,6 +1564,17 @@ $1", 'filetype-unwanted-type' => "'''„.$1“''' е нежелан файлов формат. {{PLURAL:$3|Преопръчителният файлов формат е|Препоръчителните файлови формати са}} $2.", 'filetype-banned-type' => "'''„.$1“''' не е позволен файлов формат. {{PLURAL:$3|Позволеният файлов формат е|Позволените файлови формати са}} $2.", 'filetype-missing' => 'Файлът няма разширение (напр. „.jpg“).', +'empty-file' => 'Подаденият от вас файл беше празен.', +'file-too-large' => 'Подаденият от вас файл беше твърде голям.', +'filename-tooshort' => 'Името на файла е твърде кратко.', +'filetype-banned' => 'Този тип файл е забранен.', +'verification-error' => 'Файлът не премина процедурата по верификация.', +'hookaborted' => 'Промените, които опитахте, бяха отменени от разширение.', +'illegal-filename' => 'Непозволено файлово име.', +'overwrite' => 'Не се позволява презаписване на съществуващ файл.', +'unknown-error' => 'Възникна неизвестна грешка.', +'tmp-create-error' => 'Грешка при създаването на временен файл.', +'tmp-write-error' => 'Грешка при записа на временен файл.', 'large-file' => 'Не се препоръчва файловете да се по-големи от $1; този файл е $2.', 'largefileserver' => 'Файлът е по-голям от допустимия от сървъра размер.', 'emptyfile' => 'Каченият от вас файл е празен. Това може да е предизвикано от грешка в името на файла. Уверете се дали наистина желаете да го качите.', @@ -1573,13 +1597,14 @@ $1", Ако все още желаете да качите вашия файл, върнете се и качете файла с ново име. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Този файл се повтаря със {{PLURAL:$1|следния файл|следните файлове}}:', 'file-deleted-duplicate' => 'Идентичен с този файл ([[:$1]]) вече е бил изтриван. Историята на изтриването на файла следва да се провери, преди да се пристъпи към повторното му качване.', -'successfulupload' => 'Качването беше успешно', 'uploadwarning' => 'Предупреждение при качване', 'uploadwarning-text' => 'Необходимо е да промените описанието на файла по-долу и да опитате отново.', 'savefile' => 'Съхраняване на файл', 'uploadedimage' => 'качи „[[$1]]“', 'overwroteimage' => 'качи нова версия на „[[$1]]“', 'uploaddisabled' => 'Качванията са забранени.', +'copyuploaddisabled' => 'Спряно е качването на файлове чрез URL.', +'uploadfromurl-queued' => 'Каченият от вас файл беше добавен в опашката.', 'uploaddisabledtext' => 'Качването на файлове е забранено.', 'php-uploaddisabledtext' => 'Качванията на файлове са спрени през PHP. Проверете настройката file_uploads.', 'uploadscripted' => 'Файлът съдържа HTML или скриптов код, който може да бъде погрешно интерпретиран от браузъра.', @@ -1597,6 +1622,14 @@ $1", Преценете дали е удачно да продължите с качването на файла. За ваше удобство, ето записа за него в дневника на изтриванията:", 'filename-bad-prefix' => "Името на файла, който качвате, започва с '''„$1“''', което е неописателно име, типично задавано по автоматичен начин от цифровите камери или апарати. Изберете по-описателно име на файла.", +'upload-success-subj' => 'Качването беше успешно', +'upload-success-msg' => 'Качването ви от [$2] е успешно. Достъпно е тук: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Проблем при качване', +'upload-failure-msg' => 'Имаше проблем с вашето качване от [$2]: + +$1', +'upload-warning-subj' => 'Предупреждение за качването', +'upload-warning-msg' => 'Имаше проблем с качването ви от [$2]. Може да се върнете към [[Special:Upload/stash/$1|страницата за качване]], за да поправите проблема.', 'upload-proto-error' => 'Неправилен протокол', 'upload-proto-error-text' => 'Изисква се адрес започващ с http:// или ftp://.', @@ -1656,6 +1689,7 @@ $1", 'listfiles_search_for' => 'Търсене по име на файла:', 'imgfile' => 'файл', 'listfiles' => 'Списък на файловете', +'listfiles_thumb' => 'Миникартинка', 'listfiles_date' => 'Дата', 'listfiles_name' => 'Име на файла', 'listfiles_user' => 'Потребител', @@ -1768,8 +1802,8 @@ $1", 'statistics-edits' => 'Брой редакции по страници от началото на {{SITENAME}}', 'statistics-edits-average' => 'Средно редакции на страница', 'statistics-views-total' => 'Общо прегледи', +'statistics-views-total-desc' => 'Не са включени прегледите на несъществуващи и специални страници', 'statistics-views-peredit' => 'Прегледи на редакция', -'statistics-jobqueue' => 'Дължина на [http://www.mediawiki.org/wiki/Manual:Job_queue работната опашка]', 'statistics-users' => 'Регистрирани [[Special:ListUsers|потребители]]', 'statistics-users-active' => 'Активни потребители', 'statistics-users-active-desc' => 'Потребители, направили редакция през {{PLURAL:$1|последния ден|последните $1 дни}}', @@ -1782,7 +1816,7 @@ $1", 'doubleredirects' => 'Двойни пренасочвания', 'doubleredirectstext' => 'Тази страница съдържа списък със страници, които пренасочват към друга пренасочваща страница. Всеки ред съдържа препратки към първото и второто пренасочване, както и целта на второто пренасочване, която обикновено е „истинската“ целева страница, към която първото пренасочване би трябвало да сочи. -Задрасканите записи са коригирани.', +Задрасканите записи са коригирани.', 'double-redirect-fixed-move' => 'Оправяне на двойно пренасочване след преместването на [[$1]] като [[$2]]', 'double-redirect-fixer' => 'Redirect fixer', @@ -1805,6 +1839,8 @@ $1", 'nmembers' => '$1 {{PLURAL:$1|член|члена}}', 'nrevisions' => '$1 {{PLURAL:$1|версия|версии}}', 'nviews' => '$1 {{PLURAL:$1|преглед|прегледа}}', +'nimagelinks' => 'Използва се в $1 {{PLURAL:$1|страница|страници}}', +'ntransclusions' => 'използва се в $1 {{PLURAL:$1|страница|страници}}', 'specialpage-empty' => 'Страницата е празна.', 'lonelypages' => 'Страници сираци', 'lonelypagestext' => 'Към следващите страници няма препратки или не са включени в други страници в {{SITENAME}}.', @@ -1959,34 +1995,40 @@ $1", 'listgrouprights-removegroup-self-all' => 'Може да премахва всички групи от собствената сметка', # E-mail user -'mailnologin' => 'Няма електронна поща', -'mailnologintext' => 'Необходимо е да [[Special:UserLogin|влезете]] и да посочите валидна електронна поща в [[Special:Preferences|настройките]] си, за да може да пращате писма на други потребители.', -'emailuser' => 'Писмо до потребителя', -'emailpage' => 'Пращане писмо на потребител', -'emailpagetext' => 'Можете да използвате формуляра по-долу, за да изпратите електронно писмо на този потребител. +'mailnologin' => 'Няма електронна поща', +'mailnologintext' => 'Необходимо е да [[Special:UserLogin|влезете]] и да посочите валидна електронна поща в [[Special:Preferences|настройките]] си, за да може да пращате писма на други потребители.', +'emailuser' => 'Писмо до потребителя', +'emailpage' => 'Пращане писмо на потребител', +'emailpagetext' => 'Можете да използвате формуляра по-долу, за да изпратите електронно писмо на този потребител. Адресът, който се въвели в [[Special:Preferences|настройките си]], ще се появи в полето „От“ на писмото, така че получателят ще е в състояние да ви отговори.', -'usermailererror' => 'Пощенският обект даде грешка:', -'defemailsubject' => 'Писмо от {{SITENAME}}', -'noemailtitle' => 'Няма електронна поща', -'noemailtext' => 'Този потребител не е посочил валиден адрес за електронна поща.', -'nowikiemailtitle' => 'Непозволена електронна поща', -'nowikiemailtext' => 'Този потребител е избрал да не получава електронна поща от други потребители.', -'email-legend' => 'Изпращане на електронно писмо до друг потребител на {{SITENAME}}', -'emailfrom' => 'От:', -'emailto' => 'До:', -'emailsubject' => 'Относно:', -'emailmessage' => 'Съобщение:', -'emailsend' => 'Изпращане', -'emailccme' => 'Изпращане на копие на писмото до автора.', -'emailccsubject' => 'Копие на писмото ви до $1: $2', -'emailsent' => 'Писмото е изпратено', -'emailsenttext' => 'Писмото ви беше изпратено.', -'emailuserfooter' => 'Това писмо беше изпратено от $1 на $2 чрез функцията „Изпращане на писмо до потребителя“ на {{SITENAME}}.', +'usermailererror' => 'Пощенският обект даде грешка:', +'defemailsubject' => 'Писмо от {{SITENAME}}', +'usermaildisabled' => 'Потребителят не е разрешил да получава електронна поща', +'usermaildisabledtext' => 'Не можете да изпращате електронна поща на други потребители от това уики', +'noemailtitle' => 'Няма електронна поща', +'noemailtext' => 'Този потребител не е посочил валиден адрес за електронна поща.', +'nowikiemailtitle' => 'Непозволена електронна поща', +'nowikiemailtext' => 'Този потребител е избрал да не получава електронна поща от други потребители.', +'email-legend' => 'Изпращане на електронно писмо до друг потребител на {{SITENAME}}', +'emailfrom' => 'От:', +'emailto' => 'До:', +'emailsubject' => 'Относно:', +'emailmessage' => 'Съобщение:', +'emailsend' => 'Изпращане', +'emailccme' => 'Изпращане на копие на писмото до автора.', +'emailccsubject' => 'Копие на писмото ви до $1: $2', +'emailsent' => 'Писмото е изпратено', +'emailsenttext' => 'Писмото ви беше изпратено.', +'emailuserfooter' => 'Това писмо беше изпратено от $1 на $2 чрез функцията „Изпращане на писмо до потребителя“ на {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Оставяне на системно съобщение.', +'usermessage-editor' => 'Системни съобщения', # Watchlist 'watchlist' => 'Моят списък за наблюдение', 'mywatchlist' => 'Моят списък за наблюдение', -'watchlistfor' => "(за '''$1''')", +'watchlistfor2' => 'За $1 $2', 'nowatchlist' => 'Списъкът ви за наблюдение е празен.', 'watchlistanontext' => 'За преглеждане и редактиране на списъка за наблюдение се изисква $1 в системата.', 'watchnologin' => 'Не сте влезли', @@ -2030,7 +2072,7 @@ $1", 'enotif_anon_editor' => 'анонимен потребител $1', 'enotif_body' => 'Уважаеми(а) $WATCHINGUSERNAME, -Страницата $PAGETITLE в {{SITENAME}} е била $CHANGEDORCREATED на $PAGEEDITDATE от $PAGEEDITOR. За текущата версия на страницата вижте $PAGETITLE_URL. +Страницата $PAGETITLE в {{SITENAME}} е била $CHANGEDORCREATED на $PAGEEDITDATE от $PAGEEDITOR. За текущата версия на страницата, вижте $PAGETITLE_URL. $NEWPAGE @@ -2046,6 +2088,9 @@ $NEWPAGE Системата за известяване на {{SITENAME}} -- +За да промените настройките си за известявания чрез електронна поща, посетете +{{fullurl:{{#special:Preferences}}}} + За да промените настройките на списъка си за наблюдение, посетете {{fullurl:{{#special:Watchlist}}/edit}} @@ -2100,7 +2145,10 @@ $UNWATCHURL 'revertpage' => 'Премахване на [[Special:Contributions/$2|редакции на $2]] ([[User talk:$2|беседа]]); възвръщане към последната версия на [[User:$1|$1]]', 'revertpage-nouser' => 'Премахнати редакции на (отстранено потребителско име) и връщане към последната версия на [[User:$1|$1]]', 'rollback-success' => 'Отменени редакции на $1; възвръщане към последната версия на $2.', -'sessionfailure' => 'Изглежда има проблем със сесията ви; действието беше отказано като предпазна мярка срещу крадене на сесията. Натиснете бутона за връщане на браузъра, презаредете страницата, от която сте дошли, и опитайте отново.', + +# Edit tokens +'sessionfailure-title' => 'Прекъсната сесия', +'sessionfailure' => 'Изглежда има проблем със сесията ви; действието беше отказано като предпазна мярка срещу крадене на сесията. Натиснете бутона за връщане на браузъра, презаредете страницата, от която сте дошли, и опитайте отново.', # Protect 'protectlogpage' => 'Дневник на защитата', @@ -2224,19 +2272,23 @@ $1', 'month' => 'Месец:', 'year' => 'Година:', -'sp-contributions-newbies' => 'Показване само на приносите на нови потребители', -'sp-contributions-newbies-sub' => 'на нови потребители', -'sp-contributions-newbies-title' => 'Потребителски приноси за нови сметки', -'sp-contributions-blocklog' => 'Дневник на блокиранията', -'sp-contributions-deleted' => 'изтрити приноси на потребител', -'sp-contributions-logs' => 'дневници', -'sp-contributions-talk' => 'беседа', -'sp-contributions-userrights' => 'управление на потребителските права', -'sp-contributions-blocked-notice' => 'Потребителят понастоящем е блокиран. +'sp-contributions-newbies' => 'Показване само на приносите на нови потребители', +'sp-contributions-newbies-sub' => 'на нови потребители', +'sp-contributions-newbies-title' => 'Потребителски приноси за нови сметки', +'sp-contributions-blocklog' => 'Дневник на блокиранията', +'sp-contributions-deleted' => 'изтрити приноси на потребител', +'sp-contributions-uploads' => 'качвания', +'sp-contributions-logs' => 'дневници', +'sp-contributions-talk' => 'беседа', +'sp-contributions-userrights' => 'управление на потребителските права', +'sp-contributions-blocked-notice' => 'Потребителят понастоящем е блокиран. За справка по-долу е показан последния запис за него от дневника на блокиранията:', -'sp-contributions-search' => 'Търсене на приноси', -'sp-contributions-username' => 'IP-адрес или потребителско име:', -'sp-contributions-submit' => 'Търсене', +'sp-contributions-blocked-notice-anon' => 'Този IP адрес понастоящем е блокиран. +За повече информация можете да прегледате последният запис в Дневника на блокиранията:', +'sp-contributions-search' => 'Търсене на приноси', +'sp-contributions-username' => 'IP-адрес или потребителско име:', +'sp-contributions-toponly' => 'Показване само на последните редакции', +'sp-contributions-submit' => 'Търсене', # What links here 'whatlinkshere' => 'Какво сочи насам', @@ -2299,7 +2351,6 @@ $1', 'ipb-edit-dropdown' => 'Причини за блокиране', 'ipb-unblock-addr' => 'Отблокиране на $1', 'ipb-unblock' => 'Отблокиране на потребителско име IP-адрес', -'ipb-blocklist-addr' => 'Преглед на текущите блокирания на $1', 'ipb-blocklist' => 'Преглед на текущите блокирания', 'ipb-blocklist-contribs' => 'Приноси на $1', 'unblockip' => 'Отблокиране на потребител', @@ -2370,6 +2421,8 @@ $1 е вече блокиран. Желаете ли да промените н 'sorbs_create_account_reason' => 'IP-адресът ви е записан като анонимно достъпен междинен сървър в DNSBL на {{SITENAME}}. Не може да създадете сметка.', 'cant-block-while-blocked' => 'Не можете да блокирате други потребители, докато сам(а) сте блокиран(а).', 'cant-see-hidden-user' => 'Потребителят, който опитвате да блокирате, вече е блокиран и скрит. Тъй като нямате права да скривате потребители, не можете да видите или редактирате блокирането на потребителя.', +'ipbblocked' => 'Не можете да блокирате и разблокирате други потребители, защото вие самият (самата) сте блокиран(а).', +'ipbnounblockself' => 'Нямате право да се разблокирате сам(а).', # Developer tools 'lockdb' => 'Заключване на базата от данни', @@ -2402,6 +2455,17 @@ $1 е вече блокиран. Желаете ли да промените н '''ВНИМАНИЕ!''' Това може да е голяма и неочаквана промяна за известна страница. Уверете се, че разбирате последствията, преди да продължите.", +'movepagetext-noredirectfixer' => "С помощта на формуляра по-долу се преименува страница, като цялата ѝ редакционна история се премества под новото име. +Старото име ще остане като пренасочваща страница към новото заглавие. +Желателно е преди преместването да се извърши проверка за [[Special:DoubleRedirects|двойни]] или [[Special:BrokenRedirects|невалидни пренасочвания]]. +Добре е да се направи проверка дали препратките продължават да сочат там, където се предполага. + +Важно е да се знае, че страницата '''няма''' да бъде преместена, ако вече съществува страница с новото име, освен ако не е празна или пренасочваща страница и няма налична редакционна история. +Това означава, че ако една страница бъде преименувана по погрешка, тя може да се премести обратно със старото си заглавие, но не може да се замести съществуваща страница. + +'''Предупреждение!''' +Това може да е драстична или неочаквана промяна за някоя популярна страница; +необходимо е да се уверите, че разбирате последствията от това преди да предприемете действието.", 'movepagetalktext' => "Ако съществува, съответната дискусионна страница ще бъде преместена автоматично заедно с нея, '''освен ако:''' * не местите страницата от едно именно пространство в друго, * вече съществува непразна дискусионна страница с това име или @@ -2457,6 +2521,7 @@ $1 е вече блокиран. Желаете ли да промените н 'immobile-source-page' => 'Тази страница не може да бъде премествана.', 'immobile-target-page' => 'Не може да се извърши преместване върху това целево заглавие.', 'imagenocrossnamespace' => 'Невъзможно е да се преместват картинки извън това именно пространство', +'nonfile-cannot-move-to-file' => 'Не може да се премести във файл нещо, което не е файл.', 'imagetypemismatch' => 'Новото разширение на файла не съвпада с типа му', 'imageinvalidfilename' => 'Целевото име на файл е невалидно', 'fix-double-redirects' => 'Обновяване на всички двойни пренасочвания, които сочат към оригиналното заглавие', @@ -2535,6 +2600,7 @@ $1 е вече блокиран. Желаете ли да промените н 'importstart' => 'Внасяне на страници…', 'import-revision-count' => '$1 {{PLURAL:$1|версия|версии}}', 'importnopages' => 'Няма страници за внасяне.', +'imported-log-entries' => '{{PLURAL:$1|Внесен е $1 запис|Внесени са $1 записа}} в дневника.', 'importfailed' => 'Внасянето беше неуспешно: $1', 'importunknownsource' => 'Непознат тип файл', 'importcantopen' => 'Не е възможно да се отвори файла за внасяне', @@ -2628,6 +2694,8 @@ $1 е вече блокиран. Желаете ли да промените н 'tooltip-rollback' => 'Чрез „отмяна“ ще премахнете наведнъж всички промени, нанесени от последния редактор', 'tooltip-undo' => 'Препратката „връщане“ премахва тази редакция и отваря страницата за редактиране в режим на предварителен преглед. В полето за резюме може да се впише причина за връщането.', +'tooltip-preferences-save' => 'Съхраняване на предпочитанията', +'tooltip-summary' => 'Въведете кратко резюме', # Stylesheets 'common.css' => '/* Чрез редактиране на този файл ще промените всички облици */', @@ -2738,14 +2806,17 @@ $1', 'imagemaxsize' => "Ограничение на размерите на картинките:
    ''(само за описателните страници)''", 'thumbsize' => 'Размери на миникартинките:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|страница|страници}}', -'file-info' => '(големина на файла: $1, MIME-тип: $2)', -'file-info-size' => '($1 × $2 пиксела, големина на файла: $3, MIME-тип: $4)', +'file-info' => 'големина на файла: $1, MIME-тип: $2', +'file-info-size' => '$1 × $2 пиксела, големина на файла: $3, MIME-тип: $4', 'file-nohires' => 'Не е налична версия с по-висока разделителна способност.', -'svg-long-desc' => '(Файл във формат SVG, основен размер: $1 × $2 пиксела, големина на файла: $3)', +'svg-long-desc' => 'Файл във формат SVG, основен размер: $1 × $2 пиксела, големина на файла: $3', 'show-big-image' => 'Пълна разделителна способност', 'show-big-image-thumb' => 'Размер на предварителния преглед: $1 × $2 пиксела', 'file-info-gif-looped' => 'зациклен', 'file-info-gif-frames' => '$1 {{PLURAL:$1|кадър|кадъра}}', +'file-info-png-looped' => 'зациклен', +'file-info-png-repeat' => 'изпълнено $1 {{PLURAL:$1|път|пъти}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|кадър|кадъра}}', # Special:NewFiles 'newimages' => 'Галерия на новите файлове', @@ -2897,6 +2968,7 @@ $1', 'exif-gpsareainformation' => 'Име на GPS зоната', 'exif-gpsdatestamp' => 'GPS дата', 'exif-gpsdifferential' => 'Диференциална корекция на GPS', +'exif-objectname' => 'Кратко заглавие', # EXIF attributes 'exif-compression-1' => 'Некомпресиран', @@ -3057,23 +3129,23 @@ $1', 'limitall' => 'всички', # E-mail address confirmation -'confirmemail' => 'Потвърждаване на адрес за електронна поща', -'confirmemail_noemail' => 'Не сте посочили валиден адрес за електронна поща в [[Special:Preferences|настройки си]].', -'confirmemail_text' => '{{SITENAME}} изисква да потвърдите адреса си за електронна поща преди да използвате възможностите за е-поща. Натиснете долния бутон, за да ви бъде изпратено писмо, съдържащо специално генерирана препратка, чрез която ще можете да потвърдите валидността на адреса си.', -'confirmemail_pending' => 'Кодът за потвърждение вече е изпратен. Ако току-що сте се регистрирали, изчакайте няколко минути да пристигне писмото, преди да поискате нов код.', -'confirmemail_send' => 'Изпращане на код за потвърждение', -'confirmemail_sent' => 'Кодът за потвърждение беше изпратен.', -'confirmemail_oncreate' => 'Код за потвърждение беше изпратен на електронната ви поща. +'confirmemail' => 'Потвърждаване на адрес за електронна поща', +'confirmemail_noemail' => 'Не сте посочили валиден адрес за електронна поща в [[Special:Preferences|настройки си]].', +'confirmemail_text' => '{{SITENAME}} изисква да потвърдите адреса си за електронна поща преди да използвате възможностите за е-поща. Натиснете долния бутон, за да ви бъде изпратено писмо, съдържащо специално генерирана препратка, чрез която ще можете да потвърдите валидността на адреса си.', +'confirmemail_pending' => 'Кодът за потвърждение вече е изпратен. Ако току-що сте се регистрирали, изчакайте няколко минути да пристигне писмото, преди да поискате нов код.', +'confirmemail_send' => 'Изпращане на код за потвърждение', +'confirmemail_sent' => 'Кодът за потвърждение беше изпратен.', +'confirmemail_oncreate' => 'Код за потвърждение беше изпратен на електронната ви поща. Този код не е необходим за влизане, но ще ви трябва при активирането на функциите в {{SITENAME}}, изискващи валидна електронна поща.', -'confirmemail_sendfailed' => '{{SITENAME}} не можа да изпрати писмо с код за потвърждение. Проверете адреса си за недопустими знаци. +'confirmemail_sendfailed' => '{{SITENAME}} не можа да изпрати писмо с код за потвърждение. Проверете адреса си за недопустими знаци. Изпращачът на е-поща отвърна: $1', -'confirmemail_invalid' => 'Грешен код за потвърждение. Възможно е кодът да е остарял.', -'confirmemail_needlogin' => 'Необходимо е да $1, за потвърждаване на адреса за електронна поща.', -'confirmemail_success' => 'Адресът ви за електронна поща беше потвърден. Вече можете да влезете и да се наслаждавате на уикито.', -'confirmemail_loggedin' => 'Адресът ви за електронна поща беше потвърден.', -'confirmemail_error' => 'Станала е грешка при потвърждаването на адреса ви.', -'confirmemail_subject' => '{{SITENAME}} — Потвърждаване на адрес за е-поща', -'confirmemail_body' => 'Някой, вероятно вие, от IP-адрес $1, е регистрирал потребител „$2“ в {{SITENAME}}, като е посочил този адрес за електронна поща. +'confirmemail_invalid' => 'Грешен код за потвърждение. Възможно е кодът да е остарял.', +'confirmemail_needlogin' => 'Необходимо е да $1, за потвърждаване на адреса за електронна поща.', +'confirmemail_success' => 'Адресът ви за електронна поща беше потвърден. Вече можете да влезете и да се наслаждавате на уикито.', +'confirmemail_loggedin' => 'Адресът ви за електронна поща беше потвърден.', +'confirmemail_error' => 'Станала е грешка при потвърждаването на адреса ви.', +'confirmemail_subject' => '{{SITENAME}} — Потвърждаване на адрес за е-поща', +'confirmemail_body' => 'Някой, вероятно вие, от IP-адрес $1, е регистрирал потребител „$2“ в {{SITENAME}}, като е посочил този адрес за електронна поща. За да потвърдите, че сметката в {{SITENAME}} и настоящият пощенски адрес са ваши, заредете долната препратка в браузъра си: @@ -3084,8 +3156,32 @@ $3 $5 Кодът за потвърждение ще загуби валидност след $4.', -'confirmemail_invalidated' => 'Отменено потвърждение за електронна поща', -'invalidateemail' => 'Отмяна на потвърждението за електронна поща', +'confirmemail_body_changed' => 'Някой, вероятно вие, от IP адрес $1, +е променил с този адрес електронната поща, асоциирана с потребителска сметка "$2" в {{SITENAME}}. + +За да потвърдите, че тази потребителска сметка ви принадлежи и да активирате отново функциите, свързани с електронната поща в {{SITENAME}}, отворете във вашия браузър следната връзка: + +$3 + +Ако потребителската сметка *не* ви принадлежи, моля, откажете потвърждението, като последвате следната връзка: + +$5 + +Валидността на този код за потвърждение ще важи до $4.', +'confirmemail_body_set' => 'Някой, вероятно вие, от IP адрес $1, +е посочил този адрес за електронната поща, свързан с потребителска сметка "$2" в {{SITENAME}}. + +За потвърждаване, че тази потребителска сметка наистина ви принадлежи и за да активирате отново функциите, свързани с електронна поща в {{SITENAME}}, необходимо е да отворите във вашия браузър следната препратка: + +$3 + +Ако потребителската сметка *не* ви принадлежи, можете да откажете потвърждението, като последвате следната препратка: + +$5 + +Валидността на този код за потвърждение изтича на $4.', +'confirmemail_invalidated' => 'Отменено потвърждение за електронна поща', +'invalidateemail' => 'Отмяна на потвърждението за електронна поща', # Scary transclusion 'scarytranscludedisabled' => '[Включването между уикита е деактивирано]', @@ -3125,6 +3221,7 @@ $1', 'table_pager_first' => 'Първа страница', 'table_pager_last' => 'Последна страница', 'table_pager_limit' => 'Показване на $1 записа на страница', +'table_pager_limit_label' => 'Записи на страница:', 'table_pager_limit_submit' => 'Отваряне', 'table_pager_empty' => 'Няма резултати', @@ -3179,6 +3276,7 @@ $1', 'version-specialpages' => 'Специални страници', 'version-parserhooks' => 'Куки в парсера', 'version-variables' => 'Променливи', +'version-skins' => 'Облици', 'version-other' => 'Други', 'version-mediahandlers' => 'Обработчици на медия', 'version-hooks' => 'Куки', @@ -3190,6 +3288,13 @@ $1', 'version-hook-subscribedby' => 'Ползвана от', 'version-version' => '(Версия $1)', 'version-license' => 'Лиценз', +'version-poweredby-credits' => "Това уики се задвиждва от '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'други', +'version-license-info' => 'MediaWiki е свободен софтуер, можете да го разпространявате и/или променяте съгласно условията на GNU General Public License, както е публикуван от Free Software Foundation, версия 2 на лиценза или (по ваше усмотрение) която и да е следваща версия. + +MediaWiki се разпространява с надеждата, че ще бъде полезен, но БЕЗ НИКАКВИ ГАРАНЦИИ, без дори косвена гаранция за ПРОДАВАЕМОСТ или ПРИГОДНОСТ ЗА КОНКРЕТНА УПОТРЕБА. Вижте GNU General Public License за повече подробности. + +Трябва да сте получили [{{SERVER}}{{SCRIPTPATH}}/COPYING копие на GNU General Public License] заедно с тази програма. Ако не сте, пишете на Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA или го [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html прочетете в мрежата].', 'version-software' => 'Инсталиран софтуер', 'version-software-product' => 'Продукт', 'version-software-version' => 'Версия', @@ -3257,6 +3362,15 @@ $1', 'tags-edit' => 'редактиране', 'tags-hitcount' => '$1 {{PLURAL:$1|промяна|промени}}', +# Special:ComparePages +'comparepages' => 'Сравняване на страници', +'compare-selector' => 'Сравняване версиите на страници', +'compare-page1' => 'Страница 1', +'compare-page2' => 'Страница 2', +'compare-rev1' => 'Версия 1', +'compare-rev2' => 'Версия 2', +'compare-submit' => 'Сравняване', + # Database error messages 'dberr-header' => 'Това уики има проблем', 'dberr-problems' => 'Съжаляваме! Сайтът изпитва технически затруднения.', @@ -3273,8 +3387,13 @@ $1', 'htmlform-float-invalid' => 'Посочената стойност не е число.', 'htmlform-int-toolow' => 'Посочената от вас стойност е под минимално допустимата $1.', 'htmlform-int-toohigh' => 'Посочената от вас стойност надхвърля максимално допустимата $1.', +'htmlform-required' => 'Тази стойност се изисква', 'htmlform-submit' => 'Изпращане', 'htmlform-reset' => 'Отказване на промените', 'htmlform-selectorother-other' => 'Друга', +# SQLite database support +'sqlite-has-fts' => '$1 с поддръжка на пълнотекстово търсене', +'sqlite-no-fts' => '$1 без поддръжка на пълнотекстово търсене', + ); diff --git a/languages/messages/MessagesBh.php b/languages/messages/MessagesBh.php index c1e06c50..a96d268b 100644 --- a/languages/messages/MessagesBh.php +++ b/languages/messages/MessagesBh.php @@ -10,6 +10,25 @@ * @author Ganesh */ +$namespaceNames = array( + NS_MEDIA => 'मीडिया', + NS_SPECIAL => 'विशेष', + NS_TALK => 'वार्तालाप', + NS_USER => 'प्रयोगकर्ता', + NS_USER_TALK => 'प्रयोगकर्ता_वार्ता', + NS_PROJECT_TALK => '$1_वार्ता', + NS_FILE => 'चित्र', + NS_FILE_TALK => 'चित्र_वार्ता', + NS_MEDIAWIKI => 'मीडियाविकि', + NS_MEDIAWIKI_TALK => 'मीडियाविकि_वार्ता', + NS_TEMPLATE => 'टेम्पलेट', + NS_TEMPLATE_TALK => 'टेम्पलेट_वार्ता', + NS_HELP => 'मदद', + NS_HELP_TALK => 'मदद_वार्ता', + NS_CATEGORY => 'श्रेणी', + NS_CATEGORY_TALK => 'श्रेणी_वार्ता', +); + $digitTransformTable = array( '0' => '०', # ० '1' => '१', # १ @@ -30,7 +49,7 @@ $messages = array( 'tog-justify' => 'पैराग्राफ जस्टीफाई', 'tog-hideminor' => 'हाल के परिवर्तन में मामूली संपादन छुपाईं', 'tog-numberheadings' => 'स्वयं-सांख्यिकी शिर्षक', -'tog-rememberpassword' => 'ई कम्पयुटर पर हमार खाता हर दम सक्रिय रहे', +'tog-rememberpassword' => 'इ ब्राउजर पर हमार प्रवेश जारी रहे (अधिकतम $1 {{PLURAL:$1|दिन|दिन}})', 'tog-previewonfirst' => 'पहिलका सम्पादन पर पूर्वावलोकन देखीं', 'underline-always' => 'हमेशा', @@ -329,9 +348,10 @@ $1', 'showlivepreview' => 'सीधा पूर्वावलोकन', 'showdiff' => 'परिवर्तन देखाईं', 'anoneditwarning' => "'''चेतावनी:''' रउआ आपन खाता में प्रवेश नईखीं कईले। ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज कईल जाई।", +'anonpreviewwarning' => "''रउआ खाता में प्रवेश नईखीं भईल। सुरक्षित करेब त ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज हो जाई।\"", 'missingsummary' => "'''स्मरणपत्र:'''रउआ एगो सारांश के सम्पादन नईखीं प्रदान कईले। अगर रउआ \"फिर से सुरक्षित करीं\" पर क्लिक करेब, त राउर सम्पादन बिना एगो सारांश के सुरक्षित हो जाई।", 'missingcommenttext' => 'कृपया निचे एगो टिप्पणी करीं।', -'missingcommentheader' => "'''स्मरणपत्र:''' रउआ ई टिप्पणी खातिर कौनो विषय/शिर्षक प्रदान नईखीं कईले। यदि रउआ फिर से सुरक्षित करब त राउर सम्पादन बिना कौनो शिर्षक के सुरक्षित हो जाई।", +'missingcommentheader' => "'''स्मरणपत्र:''' रउआ ई टिप्पणी खातिर कौनो विषय/शिर्षक प्रदान नईखीं कईले। \"{{int:savearticle}}\" यदि रउआ फिर से सुरक्षित करब त राउर सम्पादन बिना कौनो शिर्षक के सुरक्षित हो जाई।", 'summary-preview' => 'सारांश पूर्वावलोकन:', 'subject-preview' => 'विषय/शिर्षक पूर्वावलोकन:', 'blockedtitle' => 'निष्क्रिय प्रयोगकर्ता', @@ -384,6 +404,8 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा मेटावल जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} डिलेशन लॉग] में मिली।", 'rev-delundel' => 'दिखाईं/छुपाईं', 'revdel-restore' => 'दूश्यता बदलीं', +'revdel-restore-deleted' => 'मिटल संसोधन', +'revdel-restore-visible' => 'दृश्यमान संसोधन', 'pagehist' => 'पन्ना के इतिहास', 'deletedhist' => 'मिटावल इतिहास', 'revdelete-content' => 'सामग्री', @@ -405,6 +427,7 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा 'compareselectedversions' => 'चुनल गईल संशोधन में अन्तर देखीं', 'showhideselectedversions' => 'चुनल गईल संशोधन दिखाईं/छुपाईं', 'editundo' => 'पूर्ववत', +'diff-multi' => '({{PLURAL:$1|एगो मध्यम संशोधन|$1 गो मध्यम संशोधन}} नईखे दिखावल)', # Search results 'searchresults' => 'खोज परिणाम', @@ -672,10 +695,12 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा # Media information 'file-nohires' => ' उच्च गुणवत्ता उपलब्ध नईखे। ', +'svg-long-desc' => 'एस वी जी फाईल, नॉमिनल्ली $1 x $2 पिक्सल्स, फाईल के आकार $3', 'show-big-image' => 'पुरा गुणवत्ता', 'show-big-image-thumb' => ' इ पुर्वावलोकन के आकार: $1 x $2 पिक्सल्स', 'file-info-gif-looped' => 'लूप्ड', 'file-info-gif-frames' => '$1 {{PLURAL:$1|फ्रेम}}', +'file-info-png-looped' => 'लूप्ड', # Bad image list 'bad_image_list' => 'फोर्मेट निम्न अनुसार बा: diff --git a/languages/messages/MessagesBjn.php b/languages/messages/MessagesBjn.php new file mode 100644 index 00000000..935e5fc5 --- /dev/null +++ b/languages/messages/MessagesBjn.php @@ -0,0 +1,2432 @@ + 'Garisi di bawah tautan', +'tog-highlightbroken' => 'Bantuk tautan pagat nangkaya ini (pilihan: nangkaya ini?)', +'tog-justify' => 'Ratakan paragraf', +'tog-hideminor' => 'Sungkupakan babakan sapalih dalam parubahan tahanyar', +'tog-hidepatrolled' => 'Sungkupakan babakan taawasi dalam parubahan tahanyar', +'tog-newpageshidepatrolled' => 'Sungkupakan tungkaran nang diitihi matan daptar tungkaran hanyar', +'tog-extendwatchlist' => 'Singkaiakan daptar itihan hagan manampaiakan samunyaan parubahan, kada nang hanyar haja.', +'tog-usenewrc' => 'Purukakan panampaian parubahan tahanyar tingkat tinggi (parlu ada JavaScript)', +'tog-numberheadings' => 'Bari numur judul utumatis', +'tog-showtoolbar' => 'Tampaiakan bilah-pakakas babak (parlu ada JavaScript)', +'tog-editondblclick' => 'Babak tutungkaran wan klik ganda (parlu ada JavaScript)', +'tog-editsection' => "Kawa'akan pambabakan sub-hagian malalui tautan [babak]", +'tog-editsectiononrightclick' => "Kawa'akan mambabak sub-hagian lawan mang-klik kanan pada judul hagian (parlu ada JavaScript)", +'tog-showtoc' => 'Tampaiakan tabil isi (gasan tungkaran-tungkaran awan judul kapala labih pada 3)', +'tog-rememberpassword' => 'Ingatakan babuat log ulun pada panjalajah web ini (gasan salawas $1{{PLURAL:$1|hari|hahari}})', +'tog-watchcreations' => 'Tambahi tungkaran nang ulun ulah ka daptar itihan', +'tog-watchdefault' => 'Tambahi tungkaran nang ulun babak ka daptar itihan ulun', +'tog-watchmoves' => 'Tambahi tungkaran nang ulun pindah ka daptar itihan ulun', +'tog-watchdeletion' => 'Tambahi tungkaran nang ulun hapus ka daptar itihan ulun', +'tog-minordefault' => 'Tandai samunyaan babakan sawagai babakan sapalih sacara baku', +'tog-previewontop' => 'Tampaiakan titilikan sabalum kutak babak', +'tog-previewonfirst' => 'Tampaiakan titilikan pada babakan kaasa', +'tog-nocache' => "Kada kawa'akan tambuluk panjalajahan web tungkaran", +'tog-enotifwatchlistpages' => 'Surili ulun amun sabuah tungkaran dalam daptar itihan ulun baubah', +'tog-enotifusertalkpages' => 'Surili ulun amun tungkaran pamandiran ulun baubah', +'tog-enotifminoredits' => 'Surili ulun jua amun ada babakan sapalih matan tungkaran-tungkaran', +'tog-enotifrevealaddr' => 'Timbulakan alamat suril ulun pada suril pamadahan', +'tog-shownumberswatching' => 'Tampaiakan barapa papamuruk nang maitihi', +'tog-oldsig' => 'Titilikan tandatangan:', +'tog-fancysig' => 'Tapsirakan tandatangan sawagai naskah wiki (kada batautan utumatis)', +'tog-externaleditor' => 'Puruk pambabak luar sawagai default (hagan nang harat haja, musti ada setélan istimiwa pada komputer Pian.[http://www.mediawiki.org/wiki/Manual:External_editors More information.])', +'tog-externaldiff' => 'Puruk palainan luar sawagai default (hagan nang harat haja, musti ada setélan istimiwa pada komputer Pian. [http://www.mediawiki.org/wiki/Manual:External_editors More information.])', +'tog-showjumplinks' => 'Kawa\'akan "lacung ka" tautan kakawaan-masuk', +'tog-uselivepreview' => 'Puruk titilikan langsung (parlu ada JavaScript) (cacubaan)', +'tog-forceeditsummary' => 'Ingatakan ulun wayah babuat sabuah kasimpulan babakan kusung', +'tog-watchlisthideown' => 'Sungkupakan babakan ulun di daptar itihan', +'tog-watchlisthidebots' => 'Sungkupakan babakan bot di daptar itihan', +'tog-watchlisthideminor' => 'Sungkupakan babakan sapalih di daptar itihan', +'tog-watchlisthideliu' => 'Sungkupakan babakan pamuruk babuat log di daptar itihan', +'tog-watchlisthideanons' => 'Sungkupakan babakan pamuruk kada bangaran di daptar itihan', +'tog-watchlisthidepatrolled' => 'Sungkupakan babakan taawasi di daptar itihan', +'tog-ccmeonemails' => 'Surili ulun salinan susuril nang ulun kirim ka pamuruk lain', +'tog-diffonly' => 'Kada usah manampaiakan isi tungkaran di bawah balain', +'tog-showhiddencats' => 'Tampaiakan tutumbung tasungkup', +'tog-norollbackdiff' => 'Kada usah manampaiakan lainan imbah mambulikakan', + +'underline-always' => 'Salalu', +'underline-never' => 'Kada suah', +'underline-default' => 'Default Panjalajahan web', + +# Font style option in Special:Preferences +'editfont-style' => 'Babak wilayah gaya tulisan', +'editfont-default' => 'Default Panjalajahan web', +'editfont-monospace' => 'Tulisan Monospace', +'editfont-sansserif' => 'Tulisan Sans-serif', +'editfont-serif' => 'Tulisan Serif', + +# Dates +'sunday' => 'Ahat', +'monday' => 'Sanayan', +'tuesday' => 'Salasa', +'wednesday' => 'Arba', +'thursday' => 'Kemés', +'friday' => 'Jumahat', +'saturday' => 'Saptu', +'sun' => 'Aha', +'mon' => 'San', +'tue' => 'Sal', +'wed' => 'Arb', +'thu' => 'Kem', +'fri' => 'Jum', +'sat' => 'Sap', +'january' => 'Januari', +'february' => 'Pibuari', +'march' => 'Marat', +'april' => 'April', +'may_long' => 'Mai', +'june' => 'Juni', +'july' => 'Juli', +'august' => 'Agustus', +'september' => 'Siptimbir', +'october' => 'Uktubir', +'november' => 'Nupimbir', +'december' => 'Disimbir', +'january-gen' => 'Januari', +'february-gen' => 'Pibuari', +'march-gen' => 'Marat', +'april-gen' => 'April', +'may-gen' => 'Mai', +'june-gen' => 'Juni', +'july-gen' => 'Juli', +'august-gen' => 'Agustus', +'september-gen' => 'Siptimbir', +'october-gen' => 'Uktubir', +'november-gen' => 'Nopember', +'december-gen' => 'Disimbir', +'jan' => 'Jan', +'feb' => 'Pib', +'mar' => 'Mar', +'apr' => 'Apr', +'may' => 'Mai', +'jun' => 'Jun', +'jul' => 'Jul', +'aug' => 'Agu', +'sep' => 'Sip', +'oct' => 'Ukt', +'nov' => 'Nup', +'dec' => 'Dis', + +# Categories related messages +'pagecategories' => '{{PLURAL:$1|Tumbung|Tutumbung}}', +'category_header' => "Tutungkaran dalam tumbung ''$1''", +'subcategories' => 'Sub-tumbung', +'category-media-header' => 'Média dalam tumbung "$1"', +'category-empty' => '"Kada tadapat artikal maupun média dalam tumbung ini."', +'hidden-categories' => '{{PLURAL:$1|Tumbung tasungkup|Tutumbung tasungkup}}', +'hidden-category-category' => 'Tumbung tasungkup', +'category-subcat-count' => '{{PLURAL:$2|Tumbung ini baisi asa sub-tumbung barikut.|Tumbung ini baisi {{PLURAL:$1|sub-tumbung|$1 sub-tutumbung}} barikut, matan sabarataan $2.}}', +'category-subcat-count-limited' => 'Tumbung ini baisi {{PLURAL:$1|sub-tumbung|$1 sub-tutumbung}} barikut.', +'category-article-count' => '{{PLURAL:$2|Tumbung ni baisi asa tungkaran barikut haja.|Tutumbung ini baisi {{PLURAL:$1|tungkaran|$1 tutungkaran}}, matan $2 sabarataan.}}', +'category-article-count-limited' => 'Tumbung ini baisi {{PLURAL:$1|asa tungkaran|$1 tutungkaran}} barikut.', +'category-file-count' => '{{PLURAL:$2|Tumbung ini hanya baisi asa barakas barikut.|Tumbung ini baisi {{PLURAL:$1|barakas|$1 babarakas}} barikut, matan $2 sabarataan.}}', +'category-file-count-limited' => 'Tumbung ini baisi {{PLURAL:$1|barakas|$1 barakas}} barikut.', +'listingcontinuesabbrev' => 'samb.', +'index-category' => 'Tungkaran tasusun bapadalakan kata', +'noindex-category' => 'Tungkaran kada tasusun bapadalakan kata', + +'mainpagetext' => "'''MediaWiki sudah tapasang awan sukses'''.", +'mainpagedocfooter' => 'Carii panjalasan [http://meta.wikimedia.org/wiki/Help:Contents Panduan Pamuruk] gasan mamuruk parangkat lunak wiki + +== Gasan bamula == +* [http://www.mediawiki.org/wiki/Manual:Configuration_settings Daptar konpigurasi setélan] +* [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki nang rancak ditakunakan] +* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki rilis milis]', + +'about' => 'Pasal', +'article' => 'Tungkaran isi', +'newwindow' => '(buka di lalungkang hanyar)', +'cancel' => 'Walangi', +'moredotdotdot' => 'Lainnya...', +'mypage' => 'Tungkaran ulun', +'mytalk' => 'Pamandiran ulun', +'anontalk' => 'Pamandiran hagan alamat IP ini', +'navigation' => 'Napigasi', +'and' => ' wan', + +# Cologne Blue skin +'qbfind' => 'Paugaian', +'qbbrowse' => 'Tangadahi', +'qbedit' => 'Babak', +'qbpageoptions' => 'Tungkaran ini', +'qbpageinfo' => 'Naskah aluran', +'qbmyoptions' => 'Tungkaran ulun', +'qbspecialpages' => 'Tungkaran istimiwa', +'faq' => 'FAQ', +'faqpage' => 'Project:FAQ', + +# Vector skin +'vector-action-addsection' => 'Tambahi tupik', +'vector-action-delete' => 'Hapus', +'vector-action-move' => 'Pindahakan', +'vector-action-protect' => 'Lindungi', +'vector-action-undelete' => 'Pawalangan pahapusan', +'vector-action-unprotect' => 'Kada dilindungi', +'vector-simplesearch-preference' => 'Kawa-akan saran panggagaian tingkat lanjut (Vector skin haja)', +'vector-view-create' => 'Ulah', +'vector-view-edit' => 'Babak', +'vector-view-history' => 'Tiringi halam', +'vector-view-view' => 'Baca', +'vector-view-viewsource' => 'Tiringi asal mula', +'actions' => 'Tindakan', +'namespaces' => 'Ngarankamar', +'variants' => 'Macam', + +'errorpagetitle' => 'Kasalahan', +'returnto' => 'Bulik ka $1.', +'tagline' => 'Matan {{SITENAME}}', +'help' => 'Patulung', +'search' => 'Gagai', +'searchbutton' => 'Gagai', +'go' => 'Tulak', +'searcharticle' => 'Tulak', +'history' => 'Tungkaran halam', +'history_short' => 'Tungkaran halam', +'updatedmarker' => 'Dihanyari tumatan ilangan pauncitan ulun', +'info_short' => 'Panjalasan', +'printableversion' => 'Nang kawa dicitak', +'permalink' => 'Tautan tatap', +'print' => 'Citak', +'edit' => 'Babak', +'create' => 'Ulah', +'editthispage' => 'Babak tungkaran ini', +'create-this-page' => 'Ulah tungkaran ini', +'delete' => 'Hapus', +'deletethispage' => 'Hapus tungkaran ini', +'undelete_short' => 'Walang mahapus {{PLURAL:$1|asa babakan|$1 bababakan}}', +'protect' => 'Lindungi', +'protect_change' => 'ubah', +'protectthispage' => 'Lindungi tungkaran ini', +'unprotect' => 'Kada dilindungi', +'unprotectthispage' => 'Kada dilindungi tungkaran ini', +'newpage' => 'Tungkaran hanyar', +'talkpage' => 'Pandirakan tungkaran ini', +'talkpagelinktext' => 'Pandir', +'specialpage' => 'Tungkaran istimiwa', +'personaltools' => 'Pakakas surang', +'postcomment' => 'Palih hanyar', +'articlepage' => 'Tiringi isi tungkaran', +'talk' => 'Pamandiran', +'views' => 'Titiringan', +'toolbox' => 'Wadah pakakas', +'userpage' => 'Tiringi tungkaran pamuruk', +'projectpage' => 'Tiringi tungkaran rangka gawian', +'imagepage' => 'Tiringi tungkaran barakas', +'mediawikipage' => 'Tiringi tungkaran pasan sistim', +'templatepage' => 'Tiringi tungkaran citakan', +'viewhelppage' => 'Tiringi tungkaran patulung', +'categorypage' => 'Tiringi tungkaran tumbung', +'viewtalkpage' => 'Tiringi tungkaran pamandiran', +'otherlanguages' => 'Dalam bahasa lain', +'redirectedfrom' => '(Diugahakan matan $1)', +'redirectpagesub' => 'Tungkaran paugahan', +'lastmodifiedat' => 'Tungkaran ini tauncit diubah pada $1, $2.', +'viewcount' => 'Tungkaran ini sudah diungkai {{PLURAL:$1|kali|$1 kali}}.', +'protectedpage' => 'Tungkaran nang dilindungi', +'jumpto' => 'Malacung ka', +'jumptonavigation' => 'napigasi', +'jumptosearch' => 'gagai', +'view-pool-error' => 'Ampuni, server lagi limpuar kabaratan wayah ini. +Kabanyakan pamuruk nang handak maniringi tungkaran ini. +Muhun hadangi ha sapandang sabalum Pian cubai pulang maungkai tungkaran ini. + +$1', +'pool-timeout' => 'Habis waktu mahadangi gasan tasunduk', +'pool-queuefull' => 'Antrian hibak', +'pool-errorunknown' => 'Kada tahu napa nang salah', + +# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). +'aboutsite' => 'Pasal {{SITENAME}}', +'aboutpage' => 'Project:Pasal', +'copyright' => 'Isi tasadia sasuai lawan $1.', +'copyrightpage' => '{{ns:project}}:Hak cipta', +'currentevents' => 'Paristiwa damini', +'currentevents-url' => 'Project:Paristiwa damini', +'disclaimers' => 'Panyangkalan', +'disclaimerpage' => 'Project:Panyangkalan umum', +'edithelp' => 'Patulung mambabak', +'edithelppage' => 'Help:Pambabakan', +'helppage' => 'Help:Isi', +'mainpage' => 'Tungkaran Tatambaian', +'mainpage-description' => 'Tungkaran Tatambaian', +'policy-url' => 'Project:Kaaripan', +'portal' => 'Saképéng bubuhan', +'portal-url' => 'Project:Saképéng bubuhan', +'privacy' => 'Kaaripan paribadi', +'privacypage' => 'Project:Kaaripan paribadi', + +'badaccess' => 'Parijinan tasalah', +'badaccess-group0' => 'Pian kadada ijin hagan malakuakan nang Pian mintai.', +'badaccess-groups' => 'Tindakan nang Pian mintai dibatasi hagan pamuruk dalam {{PLURAL:$2|galambang|salah asa matan galambang}}: $1.', + +'versionrequired' => 'Parlu MediaWiki mudil $1', +'versionrequiredtext' => 'MediaWiki mudil $1 diparluakan hagan mamuruk tungkaran ini. +Lihati [[Special:Version|Tungkaran mudil]]', + +'ok' => 'OK', +'retrievedfrom' => 'Dijumput matan "$1"', +'youhavenewmessages' => 'Pian baisi $1 ($2)', +'newmessageslink' => 'pasan hanyar', +'newmessagesdifflink' => 'parubahan tauncit', +'youhavenewmessagesmulti' => 'Pian baisi pasan hanyar dalam $1', +'editsection' => 'babak', +'editold' => 'babak', +'viewsourceold' => 'tiringi asal mulanya', +'editlink' => 'babak', +'viewsourcelink' => 'tiringi asal mulanya', +'editsectionhint' => 'Babak hagian: $1', +'toc' => 'Isi', +'showtoc' => 'tampaiakan', +'hidetoc' => 'sungkupakan', +'thisisdeleted' => 'Tiringi atawa mambulikakan $1?', +'viewdeleted' => 'Tiringi $1?', +'restorelink' => '$1 {{PLURAL:$1|babakan|babakan}} nang sudah dihapus', +'feedlinks' => 'Kitihan', +'feed-invalid' => 'Macam pamintaan kitihan kada pas.', +'feed-unavailable' => 'Kitihan sindikasi kadada', +'site-rss-feed' => 'Kitihan RSS $1', +'site-atom-feed' => 'Kitihan Atum $1', +'page-rss-feed' => "Kitihan RSS ''$1''", +'page-atom-feed' => "Kitihan Atum ''$1''", +'red-link-title' => '$1 (tungkaran baluman ada)', + +# Short words for each namespace, by default used in the namespace tab in monobook +'nstab-main' => 'Tungkaran', +'nstab-user' => 'Pamuruk', +'nstab-media' => 'Média', +'nstab-special' => 'Tungkaran istimiwa', +'nstab-project' => 'Tungkaran rangka gawian', +'nstab-image' => 'Barakas', +'nstab-mediawiki' => 'Pasan', +'nstab-template' => 'Citakan', +'nstab-help' => 'Patulung', +'nstab-category' => 'Tumbung', + +# Main script and global functions +'nosuchaction' => 'Kadada palakuan nangkaitu', +'nosuchactiontext' => 'Palakuan nang diminta URL kada sah. +Pian pinanya salah katik URL, atawa maumpati sabuah tautan nang kada bujur. +Ini jua bisa ai ada bug di parangkat lunak nang dipuruk {{SITENAME}}.', +'nosuchspecialpage' => 'Kadada tungkaran istimiwa nangitu', +'nospecialpagetext' => 'Pian maminta tungkaran istimiwa nang kada sah. +Daptar tungkaran istimiwa sah kawa diugai pada [[Special:SpecialPages|{{int:specialpages}}]].', + +# General errors +'error' => 'Kasalahan', +'databaseerror' => 'Kasalahan Basisdata', +'dberrortext' => 'Ada kasalahan sintaks pada parmintaan basisdata. +Kasalahan ini pina manandai adanya sabuah bug dalam parangkat lunak. +Parmintaan basisdata yang tadudi adalah: +
    $1
    +matan dalam pungsi "$2". +Basisdata kasalahan babulik "$3: $4".', +'dberrortextcl' => 'Ada kasalahan sintaks pada parmintaan basisdata. +Parmintaan basisdata nang tadudi adalah: +"$1" +matan dalam pungsi "$2". +Basisdata kasalahan babulik "$3: $4".', +'laggedslavemode' => "'''Paringatan:''' Tungkaran ini pinanya kada baisi parubahan tahanyar.", +'readonly' => 'Basisdata tasunduk', +'enterlockreason' => 'Buati sabuah alasan manyunduk, tamasuk jua wayah apa handak dibuka pulang sundukannya.', +'readonlytext' => 'Basisdata lagi basunduk hagan masukan hanyar wan parubahan lain, pinanya pang lagi ada jadwal paharaguan basis data, imbah ini akan babulik nangkaya biasa. + +Pambakal nang manyunduk mamadahi nangkaini: $1', +'missing-article' => 'Basisdata kada ulihan manggagai kata matan tungkaran nang saharusnya ada, bangaran "$1" $2. + +Nangkaini biasanya dimargakan tautan lawas ka sabuah tungkaran nang halamnya sudah dihapus. + +Munnya lainan ini pasalnya, Pian mungkin batamu bug dalam perangkat lunak. +Silakan lapurakan ini ka saurang [[Special:ListUsers/sysop|pambakal]], ulah catatan URL nang ditulaki', +'missingarticle-rev' => '(ralatan#: $1)', +'missingarticle-diff' => '(Lain: $1, $2)', +'readonly_lag' => 'Basisdata sudah utumatis tasunduk pas server basisdata dua lagi marungkuti basisdata tatambaian', +'internalerror' => 'Kasalahan di dalam', +'internalerror_info' => 'Kasalahan di dalam: $1', +'fileappenderrorread' => 'Kada kawa mambaca "$1" parhatan manambahi.', +'fileappenderror' => 'Kada kawa mamasukakan "$1" ka "$2".', +'filecopyerror' => 'Kada kawa manyalin "$1" ka "$2".', +'filerenameerror' => 'Kada kawa maubah ngaran barakas "$1" manjadi "$2".', +'filedeleteerror' => 'Kada kawa mahapus barakas "$1".', +'directorycreateerror' => 'Kada kawa maulah direktori "$1".', +'filenotfound' => 'Kada kawa maugai barakas "$1".', +'fileexistserror' => 'Kada kawa manulis ka barakas "$1": barakas sudah ada', +'unexpected' => 'Nilai kada sasuai harapan: "$1"="$2".', +'formerror' => 'Kasalahan: kada kawa mangirim purmulir', +'badarticleerror' => 'Palakuan ini kada kawa dicungulakan pada tungkaran ini.', +'cannotdelete' => "Tungkaran atawa barakas ''$1'' kada kawa dihapus. Pinanya sudah dihapus urang lain badahulu.", +'badtitle' => 'Judul buruk', +'badtitletext' => 'Judul tungkaran nang diminta kada sah, kada baisi, atawa kada pasnya tautan judul antar-bahasa atawa antar-wiki. +Nangini bisa baisi satu atawa labih hurup nang saharusnya kadada di judul.', +'perfcached' => 'Data barikut adalah timbuluk wan pina kada mutakhir.', +'perfcachedts' => 'Data nang dudi ini adalah timbuluk, wan tauncit dihahanyari pada $1.', +'querypage-no-updates' => 'Pamugaan matan tungkaran ini rahat dipajahkan. Data nang ada di sia wayahini kada akan dimuat ulang.', +'wrong_wfQuery_params' => 'Kada bujur ukuran ka wfQuery ()
    +Pungsi: $1
    +Parmintaan: $2', +'viewsource' => 'Tiringi asal mulanya', +'viewsourcefor' => 'gasan $1', +'actionthrottled' => 'Kalakuan dikiripi', +'actionthrottledtext' => 'Sawagai sabuah takaran anti-spam, Pian dibabatasi hagan balalaku kababanyakan dalam parhatan handap, wan Pian sudah limpuari batasan ini. +Muhun cubai pulang dalam babarapa minit.', +'protectedpagetext' => 'Tungkaran ini sudah dilindungi hagan mancagah babakan.', +'viewsourcetext' => 'Pian kawa maniringi wan manyalin asal mula tungkaran ini:', +'protectedinterface' => 'Tungkaran ini manyadiakan naskah antarmuha gasan parangkat lunak, wan dilindungi hagan mancagah tasalah puruk.', +'editinginterface' => "'''Paringatan:''' Pian mambabak sabuah tungkaran nang dipuruk hagan manyadiakan naskah antarmuha gasan parangkat lunak. +Parubahan ka tungkaran ini akan bapangaruh matan tampaian antarmuha gasan pamuruk lain. +Gasan tarjamahan, muhun puruk [http://translatewiki.net/wiki/Main_Page?setlang=bjn translatewiki.net], rangka gawian palokalan MediaWiki.", +'sqlhidden' => '(Parmintaan SQL disungkupakan)', +'cascadeprotected' => 'Tungkaran ini sudah dilindungi matan pambabakan, marga nangini tamasuk dalam {{PLURAL:$1|tungkaran|tutungkaran}} dudi nang dilindungi "barénténg": $2', +'namespaceprotected' => "Pian kada baisi ijin hagan mambabak tutungkaran dalam ngaran kamar '''$1'''.", +'customcssjsprotected' => 'Pian kada baisi ijin hagan mambabak tungkaran ini, karana ini mangandung setélan paribadi pamuruk lain.', +'ns-specialprotected' => 'Tungkaran istimiwa kada kawa dibabak', +'titleprotected' => "Judul ini dilindungi matan paulahan ulih [[User:$1|$1]]. +Alasan nang dibariakan adalah ''$2''.", + +# Virus scanner +'virus-badscanner' => "Konpigurasi buruk: pamindai virus kada dipinandui: ''$1''", +'virus-scanfailed' => 'Pamindaian kada bakulihan (kudi $1)', +'virus-unknownscanner' => 'Antivirus kada dipinandui:', + +# Login and logout pages +'logouttext' => "'''Pian parhatan ini sudah kaluar log.''' + +Pian kawa manyambung hagan mamuruk {{SITENAME}} kada bangaran, atawa Pian kawa [[Special:UserLogin|babuat log pulang]] sawagai pamuruk nang sama atawa sawagai pamuruk balain. +Catatan bahwasa babarapa tungkaran pinanya masih ha tarus manampaiakan Pian masih babuat log, sampai Pian mahabisakan timbuluk panjalajah web Pian.", +'welcomecreation' => '==Salamat datang, $1!== +Akun Pian sudah diulah. +Jangan kada ingat hagan maubah [[Special:Preferences|preferensi {{SITENAME}}]] Pian.', +'yourname' => 'Ngaran pamuruk', +'yourpassword' => 'Katasunduk:', +'yourpasswordagain' => 'Katik pulang katasunduk:', +'remembermypassword' => 'Ingatan log babuat ulun dalam komputer ini (salawas $1{{PLURAL:$1|hari|hari}})', +'securelogin-stick-https' => 'Bagana tasambung awan HTTPS imbah babuat-log', +'yourdomainname' => 'Dumain Pian:', +'externaldberror' => 'Ada kasalahan apakah kacucukan basis data atawa Pian kada bulih mamutakhirakan akun luar.', +'login' => 'Babuat', +'nav-login-createaccount' => 'Babuat log / ulah akun', +'loginprompt' => "Pian harus mengaktipakan ''cookies'' hagan kawa babuat log ka {{SITENAME}}.", +'userlogin' => 'Babuat log / ulah akun', +'userloginnocreate' => 'Babuat log', +'logout' => 'Kaluar', +'userlogout' => 'Kaluar', +'notloggedin' => 'Balum babuat log', +'nologin' => 'Kada baisi sabuah akun? $1.', +'nologinlink' => 'Daptarkan akun hanyar', +'createaccount' => 'Ulah akun', +'gotaccount' => 'Sudah baisi sabuah akun? $1.', +'gotaccountlink' => 'Babuat log', +'createaccountmail' => 'Lung suril', +'createaccountreason' => 'Alasan:', +'badretype' => 'Katasunduk nang Pian buati kada pas.', +'userexists' => 'Ngaran pamuruk nang dibuati sudah dipuruk. +Muhun pilih sabuah ngaran lain.', +'loginerror' => 'Kasalahan babuat log', +'createaccounterror' => 'Kada kawa maulah akun: $1', +'nocookiesnew' => "Akun pamuruk sudah diulah, tagal Pian kada babuat log lagi. +{{SITENAME}} mamuruk ''cookies'' hagan pamuruk babuat log. +''Cookies'' Pian lagi kada kawa. +Muhun kawa'akan nangitu, hanyar babuat log awan ngaran pamuruk hanyar wan katasunduk Pian.", +'nocookieslogin' => "{{SITENAME}} mamuruk ''cookies'' hagan pamuruk babuat log. +''Cookies'' Pian lagi kada kawa. +Muhun kawa'akan nang itu wan cubai pulang.", +'noname' => 'Ngaran pamuruk nang Pian ajuakan kada sah.', +'loginsuccesstitle' => 'Kulihan babuat log', +'loginsuccess' => "'''Pian parhatan ini babuat log dalam {{SITENAME}} sawagai \"\$1\".'''", +'nosuchuser' => 'Kadada pamuruk bangaran "$1". +Ngaran pamuruk adalah kasus marinci. +Lihati pulang ijaan, atawa [[Special:UserLogin/signup|ulah sabuah akun hanyar]]', +'nosuchusershort' => 'Kadada pamuruk bangaran "$1". +Lihati pulang hijaan Pian.', +'nouserspecified' => "Pian harus ma'ajuakan sabuah ngaran pamuruk.", +'login-userblocked' => 'Pamuruk ini diblukir. Babuat log kada dibulihakan.', +'wrongpassword' => 'Kada sunduk kada bujur nang dibuati. +Muhun cubai pulang.', +'wrongpasswordempty' => 'Kata sunduk nang dibuati kusung. +Muhun cubai pulang.', +'passwordtooshort' => 'Kata sunduk musti paling sadikit {{PLURAL:$1|1 karaktir|$1 karaktir}}.', +'password-name-match' => 'Kata sunduk Pian musri aabida lawan ngaran pamuruk Pian.', +'password-login-forbidden' => 'Mamuruk ngaran wan katasunduk nangini sudah dtangati.', +'mailmypassword' => 'Kirimi kata sunduk hanyar', +'passwordremindertitle' => 'Kata sunduk samantara gasan {{SITENAME}}', +'passwordremindertext' => 'Ada urang (pinanya Pian, matan alamat IP $1) maminta sabuah katasunduk hanyar gasan {{SITENAME}} ($4). sabuah katasunduk samantara gasan pamuruk "$2" sudah diulah wan disetel ka "$3". Amun bujur Pian nang maminta, Pian parlu babuat log wan mamilih katasunduk hanyar wayah ini jua. Katasunduk samantara Pian akan kadaluarsa dalam {{PLURAL:$5|satu hari|$5 hahari}}. + +Amun urang lain nang maminta ini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada mahuwal pasan ini wan manyambung mamuruk katasunduk lawas Pian.', +'noemail' => 'Kadada alamat suril tarakam gasan pamuruk "$1".', +'noemailcreate' => 'Pian parlu manyadiakan sabuah alamat suril nang sah', +'passwordsent' => 'Sabuah kata sunduk hanyar sudah dikirim ka suril tadaptar gasan "$1". +muhun babuat log pulang habis Pian manarima nangini.', +'blocked-mailpassword' => 'Alamat IP Pian diblukir hagan mambabak, wan kada dibulihakan mamuruk pungsi pamulihan kata sunduk hagan mancagah salah puruk.', +'eauthentsent' => 'Sabuah suril peyakinan sudah dikirim ka alamat suril. +Sabalum ada suril lain nang takirim ka akun, Pian akan parlu maumpati anjuran dalam suril nangitu, hagan mayakinakan bahwasanya akun nangitu bujur-bujur ampun Pian.', +'throttled-mailpassword' => 'Sabuah pangingat kata sunduk sudah takirim, dalam {{PLURAL:$1|jam|$1 jam}} tauncit. Hagan mancagah salah puruk, asa pangingat kata sunduk haja nang dikirim satiap {{PLURAL:$1|jam|$1 jam}}.', +'mailerror' => 'Kasalahan pangiriman suril: $1', +'acct_creation_throttle_hit' => 'Pailang wiki nangini mamuruk alamat IP Pian sudah maulah {{PLURAL:$1|1 akun|$1 akun}} dalam asa harian ini, dimana nangitu jumlah paling banyak nang diijinakan. Sawagai kulihan, pailang awan alamat IP nangini kada kawa maulah akun pulang samantara.', +'emailauthenticated' => 'Alamat suril Pian cucuk pada $2, $3', +'emailnotauthenticated' => 'Alamat suril Pian baluman dicucukan. +Kadada suril nang akan dikirim maumpati pitur.', +'noemailprefs' => 'Ajuakan sabuah alamat suril dalam kakatujuan Pian gasan pitur-pitur ini bagawi.', +'emailconfirmlink' => 'Yakinakan alamat suril Pian', +'invalidemailaddress' => 'Alamat suril ini kada kawa ditarima karana pormat kada sah. +Muhun buati sabuah alamat suril nang bujur pormatnya atawa kusungakan haja isian itu.', +'accountcreated' => 'Akun diulah', +'accountcreatedtext' => 'Akun pamuruk gasan $1 sudah diulah.', +'createaccount-title' => 'Paulahan akun gasan {{SITENAME}}', +'createaccount-text' => 'Ada urang nang maulah akun gasan alam suril Pian pada {{SITENAME}} ($4) bangaran "$2", awan kata sunduk "$3". +Pian dianjurakan babuat log wan maubah kata sunduk Pian parhatan ini. + +Pian kawa kada mahual pasan ini, amun paulahan akun ini adalah kasalahan.', +'usernamehasherror' => 'Ngaran pamuruk kada kawa mangandung tanda kurung', +'login-throttled' => 'Pian sudah kabanyakan mancuba babuat log. +Muhun hadangi dahulu sapandang hanyar cubai pulang.', +'loginlanguagelabel' => 'Bahasa: $1', +'suspicious-userlogout' => 'Parmintaan Pian hagan kaluar log kada ditarima karana nangkaya dikirim matan panjalajah web rakai atawa tatangkap proxy.', + +# E-mail sending +'php-mail-error-unknown' => 'Kasalahan kada dipinandui dalam pungsi surat () PHP', + +# Password reset dialog +'resetpass' => 'Ubah katasunduk', +'resetpass_announce' => 'Pian babuat log awan sabuah kudi samantara nang disurili. +Hagan manuntungakan babuat log, Pian musti manyetel sabuah katasunduk hanyar di sia:', +'resetpass_header' => 'Ubah katasunduk akun', +'oldpassword' => 'Katasunduk lawas:', +'newpassword' => 'Katasunduk hanyar:', +'retypenew' => 'Katik pulang katasunduk hanyar:', +'resetpass_submit' => 'Setel katasunduk wan babuat log', +'resetpass_success' => 'Katasunduk Pian bahasil diubah! +Wayah ini Pian sudah babuat log...', +'resetpass_forbidden' => 'Katasunduk kada kawa diubah', +'resetpass-no-info' => 'Pian musti babuat log hagan babuat ka tungkaran ini langsung.', +'resetpass-submit-loggedin' => 'Ubah katasunduk', +'resetpass-submit-cancel' => 'Walangi', +'resetpass-wrong-oldpass' => 'Katasunduk samantara atawa wayah ini kada sah. +Pian pinanya sudah bahasil maubah katasunduk Pian atawa maminta sabuah katasunduk samantara hanyar.', +'resetpass-temp-password' => 'Katasunduk samantara:', + +# Edit page toolbar +'bold_sample' => 'Naskah kandal', +'bold_tip' => 'Naskah kandal', +'italic_sample' => 'Naskah hiring', +'italic_tip' => 'Naskah hiring', +'link_sample' => 'Judul tautan', +'link_tip' => 'Tautan dalam', +'extlink_sample' => 'http://www.example.com judul tautan', +'extlink_tip' => 'Tautan luar (Ingatakan bamula wan http://)', +'headline_sample' => 'Naskah judul', +'headline_tip' => 'Judul tingkat 2', +'math_sample' => 'Masukakan rumus di sia', +'math_tip' => 'Rumus matamatika (LaTeX)', +'nowiki_sample' => 'Masukakan naskah kada babantuk di sia', +'nowiki_tip' => 'Halinakan pambantukan/purmat wiki', +'image_tip' => "Maktub'akan barakas", +'media_tip' => 'Tautan barakas', +'sig_tip' => 'Tandatangan Pian lawan tanda waktu', +'hr_tip' => 'Garis horisontal', + +# Edit pages +'summary' => 'Kasimpulan:', +'subject' => 'Subyek/judul:', +'minoredit' => 'Ini adalah babakan sapalih', +'watchthis' => 'Itihi tungkaran ini', +'savearticle' => 'Simpan tungkaran', +'preview' => 'Tilik', +'showpreview' => 'Tampaiakan titilikan', +'showlivepreview' => 'Titilikan langsung', +'showdiff' => 'Tampaiakan parubahan', +'anoneditwarning' => "'''Paringatan:''' Pian baluman babuat log. +Alamat IP Pian akan dirakam dalam tungkaran babakan halam", +'anonpreviewwarning' => "''Pian baluman babuat log. Manyimpan akan tarakam alamat IP Pian pada sajarah bahari tungkaran ini.''", +'missingsummary' => "'''Pangingat:''' Pian kada manyadiakan sabuah kasimpulan babakan. +Amun Pian klik \"{{int:savearticle}}\" pulang, babakan Pian tasimpan kada bakasimpulan.", +'missingcommenttext' => 'Muhun buati sabuah kumintar di bawah ini.', +'missingcommentheader' => "'''Pangingat:''' Pian kada manyadiakan sabuah subjek/judul gasan kumin ini. +Amun Pian klik \"{{int:savearticle}}\" pulang, babakan Pian tasimpan kada basubjek/bajudul.", +'summary-preview' => 'Tilikan kasimpulan:', +'subject-preview' => 'Titilikan subyek/judul:', +'blockedtitle' => 'Pamuruk diblukir', +'blockedtext' => "'''Ngaran pamuruk Pian atawa alamat IP sudah diblukir.''' + +Pamblukiran diulah ulih $1. +Alasannya ''$2''. + +* Mulai diblukir: $8 +* Kadaluarsa blukir: $6 +* Tujuan pamblukiran: $7 + +Pian kawa mangiwau $1 atawa nang lain [[{{MediaWiki:Grouppage-sysop}}|pambakal]] hagan mamandirakan pamblukiran nangini. +Pian kada kawa mamuruk pitur 'surili pamuruk ini' amun kadada sabuah alamat suril nang sah nang diajukan dalam [[Special:Preferences|kakatujuan akun]] Pian wan Pian kada lagi diblukir mamuruk nangini. +Alamat IP Pian parhatan ini $3, wan ID nang diblukir adalah $5. +Muhun sampaiakan samunyaan rarinci di atas dalam parmintaan nag Pian ulah.", +'autoblockedtext' => "Alamat IP Pian sudah utumatis diblukir karana dipuruk ulih pamuruk lain, nang diblukir ulih $1. +Alasannya: ''$2''. + +* Mulai diblukir: $8 +* Kadaluarsa blukir: $6 +* Tujuan pamblukiran: $7 + +Pian kawa mangiwau $1 atawa nang lain [[{{MediaWiki:Grouppage-sysop}}|pambakal]] hagan mamandirakan pamblukiran nangini. + +Catatan Pian kada kawa mamuruk pitur 'surili pamuruk ini' amun kadada sabuah alamat suril nang sah nang tadaptar dalam [[Special:Preferences|kakatujuan akun]] Pian wan Pian kada lagi diblukir mamuruk nangini. + +Alamat IP Pian parhatan ini $3, wan ID nang diblukir adalah $5. +Muhun sampaiakan samunyaan rarinci di atas dalam parmintaan nag Pian ulah.", +'blockednoreason' => 'kadada alasan nang diunjukakan', +'blockedoriginalsource' => "Asal mula matan '''$1''' ditampaiakan di bawah:", +'blockededitsource' => "Naskah nang '''babakan Pian''' awan '''$1''' ditampaiakan di bawah:", +'whitelistedittitle' => 'Parlu babuat log hagan mambabak', +'whitelistedittext' => 'Pian harus $1 hagan mambabak tungkaran.', +'confirmedittext' => 'Pian musti mayakinakan alamat suril Pian sabalum mambabak tungkaran-tungkaran. Muhun disetel wan disakakan alamat suril Pian tumatan [[Special:Preferences|kakatujuan pamuruk]] Pian.', +'nosuchsectiontitle' => 'Hagian kada tadapat', +'nosuchsectiontext' => 'Pian habis mancuba mambabak sabuting hagian nang kadada. +Pinanya ini sudah diugahakan atawa dihapus parhatan Pian maniringi tungkaran nangitu.', +'loginreqtitle' => 'Parlu babuat log', +'loginreqlink' => 'Babuat log', +'loginreqpagetext' => 'Pian musti $1 hagan maniringi rungkaran-tungkaran lain.', +'accmailtitle' => 'Katasunduk takirim.', +'accmailtext' => "Sabuah katasunduk babarang gasan [[User talk:$1|$1]] sudah dikirim ka $2. + +Katasunduk gasan pamuruk hanyar nangini kawa diubah pintang tungkaran ''[[Special:ChangePassword|ubah katasunduk]]'' wayah babuat log.", +'newarticle' => '(Hanyar)', +'newarticletext' => "Pian maumpati sabuah tautan ka tungkaran nang baluman ada lagi. Gasan maulah tungkaran, mulai ja mangatik pada kutak di bawah (lihati [[{{MediaWiki:Helppage}}|tungkaran patulung]] gasan panjalasan labih). Amun Pian ka sia cagaran tasalah, klik picikan '''back''' di panjalajah web Pian.", +'anontalkpagetext' => "----''Ini adalah tungkaran pamandiran gasan pamuruk kada bangaran nang baluman maulah akun pulang, atawa kada mamuruknya. Kami tapaksa mamuruk numurik alamat IP hagan maminanduinya. +Alamat IP nangkaini kawaai dipuruk ulih babarapa pamuruk. +Amun Pian adalah pamuruk kada bangaran wan marasa kumin nang kada pas ta ka Pian, muhun [[Special:UserLogin/signup|ulah sabuah akun]] or [[Special:UserLogin|babuat log]] hagan mahindari kabingungan awan pamuruk kada bangaran lain kaina.", +'noarticletext' => 'Parhatan ini kadada naskah di tungkaran ini. +Pian kawa [[Special:Search/{{PAGENAME}}|manggagai gasan judul ini]] pintang tungkaran lain, +[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} manggagai log barait]., +atawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} mambabak tungkaran ini]
    .', +'noarticletext-nopermission' => 'Parhatan ini kadada naskah di tungkaran ini. +Pian kawa [[Special:Search/{{PAGENAME}}|manggagai gasan judul ini]] pintang tungkaran lain, +[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} manggagai log barait]..', +'userpage-userdoesnotexist' => 'Akun pamuruk "$1" kada tadaptar. +Muhun pariksa amun Pian handak maulah/mambabak tungkaran ini.', +'userpage-userdoesnotexist-view' => 'Akun pamuruk "$1" kada tadaptar.', +'blocked-notice-logextract' => 'Pamuruk nangini parhatan ini diblukir. +Log blukir pahabisannya tasadia di bawah ini gasan rujukan:', +'clearyourcache' => "'''Catatan: Habis manyimpan, Pian harus malingarakan cache panjalajah web Pian hagan malihat parubahan.''' +'''Mozilla/Firefox/Safari:''' tahan ''Shift'' parhatan klik ''Reload'', atawa picik ''Ctrl-F5'' atawa ''Ctrl-R'' (''Command-R'' pada sabuah Macintosh); +'''Opera:''' barasihakan cache pada ''Tools → Preferences''; +'''Internet Explorer:''' tahan ''Ctrl'' parhatan klik ''Refresh,'' atawa picik ''Ctrl-F5''.", +'usercssyoucanpreview' => "'''Tip:''' Puruk picikan \"{{int:showpreview}}\" hagan tis CSS hanyar Pian sabalum manyimpan.", +'userjsyoucanpreview' => "'''Tip:''' Puruk picikan \"{{int:showpreview}}\" hagan tis JavaScript hanyar Pian sabalum manyimpan.", +'usercsspreview' => "'''Ingatakan bahwasa Pian manilik pamuruk CSS Pian haja.''' +'''Nangini baluman tasimpan pulang!'''", +'userjspreview' => "'''Ingatakan bahwasa Pian tis/manilik pamuruk JavaScript Pian.''' +'''Nangini baluman tasimpan pulang!'''", +'sitecsspreview' => "'''Ingatakan bahwasa Pian manilik CSS ini haja.''' +'''Nangini lagi baluman tasimpan!'''", +'sitejspreview' => "'''Ingatakan bahwasa Pian manilik JavaScript code ini haja.''' +'''Nangini lagi baluman tasimpan!'''", +'userinvalidcssjstitle' => "'''Paringatan:''' Kadada kulit \"\$1\". +Inatakan bahwasa saragam tungkaran-tungkaran .css wan .js mamuruk aksara halus, cuntuh {{ns:user}}:Foo/vector.css sawagai tandingan {{ns:user}}:Foo/Vector.css.", +'updated' => '(Dihanyarakan)', +'note' => "'''Catatan:'''", +'previewnote' => "'''Ingatakanlah bahwasa ini titilikan haja nang balum disimpan!'''", +'previewconflict' => 'Titilikan ini mancarminakan naskah dalam naskah wilayah atas babakan sawagai mana ini akan mancungul amun disimpan.', +'session_fail_preview' => "'''Ampun! Kami kada kawa manarusakan babakan Pian karana kahilangan sési data.''' +Cubai pang sa'asa pulang. +Amun magun kada kulihan, cubai [[Special:UserLogout|kaluar log]] wan imbah itu babuat log pulang.", +'session_fail_preview_html' => "'''Kami kada kawa manarusakan babakan Pian karana kahilangan wayah data.''' + +''Marga {{SITENAME}} mangkawa'akan HTML mantah, titilikan disungkupakan sawagai pancahagahan sarangan Javascript.'' + +'''Amun nangini adalah sabuah parcubaan babakan nang sabujurnya, muhun cubai lagi.''' +Amun ini masih haja kada bagawi, cubai [[Special:UserLogout|kaluar log]] wan babuat log pulang.", +'token_suffix_mismatch' => "'''Babakan Pian sudah kada ditarima karana aplikasi Pian mahancuri tanda baca pada babakan token.''' +Babakan ini kada ditarima hagan mancagah kasalahan pada naskah tungkaran. +Nangini ambahanu tajadi amun Pian mamuruk sabuah layanan proxy buggy bapandal web kada bangaran.", +'editing' => 'Mambabak $1', +'editingsection' => 'Mambabak $1 (hagian)', +'editingcomment' => 'Mambabak $1 (hagian hanyar)', +'editconflict' => 'Babakan bacakut: $1', +'explainconflict' => "Ada urang lain nang sudah maubah tungkaran ini parhatan Pian mula mambabak ini. +Naskah atas baisi naskah tungkaran sawagai dimapa ini ada hahanyaran ini. +Parubahan Pian ditampaiakan pada naskah di bawah. +Pian pinanya harus manggabungakan parubahan Pian ka dalam naskah nang ada. +Naskah nang di atas '''haja''' nang akan tasimpan amung Pian manikin \"{{int:savearticle}}\".", +'yourtext' => 'Naskah Pian', +'storedversion' => 'Ralatan tasimpan', +'nonunicodebrowser' => "'''Paringatan: Panjalajah web Pian kada manyukung unicode.''' +Sabuah pambulatan gawian di wadah ini mambulihakan Pian aman mambabak tutungkaran: karaktir non-ASCII akan cungul pada kutak babakan sawagai kudi hiksadisimal.", +'editingold' => "'''Paringatan: Pian lagi mambabak ralatan lawas matan tungkaran ini.''' +Amun Pian manyimpan ini, babarapa paparubahan dulah imbah ralatan nangini akan tanggal.", +'yourdiff' => 'Nang balain', +'copyrightwarning' => "Muhun dicatat bahwasanya samunyaan sumbangan ka {{SITENAME}} adalah sudah dipartimbangkan disabarakan di bawah $2 (lihati $1 gasan rincian). Amun Pian kada handak tulisan Pian dibabak wan disabarakan, kada usah mangirim ini ka sia.
    +Pian jua bajanji ka kami amun Pian manulis ini saurangan, atawa manjumput ini matan sabuah asal mula ampun umum atawa asal mula lainnya nang samacam. +'''Jangan kirimkan gawian bahak cipta kada baijin!'''", +'copyrightwarning2' => "Muhun dicatat bahwasanya samunyaan sumbangan ka {{SITENAME}} kawa dibabak, diubah, atawa dibuang awan panyumbang lainnya. +Amun Pian kada hakun tulisan Pian dibabak kada baumpat lalu, lalu ai kada usah manyumbang di sia.
    +Pian jua bajanji ka kami amun Pian manulis ini saurangan, atawa manjumput ini matan sabuah asal mula ampun umum atawa nang samacam asal mula bibas (lihati $1 gasan rarincian). +'''Jangan kirimkan gawian bahak cipta kada baijin!'''", +'longpageerror' => "'''Kasalahan: Naskah nang Pian kirim panjangnya $1 kilubita, nangapa tapanjang pada pamanjangnya nang kawa $2 kilubita.''' +Nangini kada kawa disimpan.", +'readonlywarning' => "'''Paringatan: Basis data sudah tasunduk gasan diharagu, jadinya Pian kada kawa manyimpan babakab Pian parhatan ini.''' +Pian kawa amun handak cut-n-paste naskah ka sabuah barakas naskah wan simpan ini gasan kaina. + +Pambakal nang manyunduk manjalasakan kaini: $1", +'protectedpagewarning' => "'''Paringatan: Tungkaran ini sudah dilindungi laluai pamuruk awan hak istimiwa pambakal nang kawa mambabak ini.''' +Log masuk pauncitan disadiakan di bawah gasan rujukan:", +'semiprotectedpagewarning' => "'''Catatan:''' Tungkaran ini sudah dilindungi laluai pamuruk tadaptar haja nang kawa mambabak. +Log masuk pauncitan disadiakan di bawah gasan rujukan:", +'cascadeprotectedwarning' => "'''Paringatan:''' Tungkaran ini sudah dilindungi laluai pamuruk awan hak istimiwa pambakal haja nang kawa mambabak, karana ini tamasuk dalam baumpat parlindungan barénténg {{PLURAL: $1|tungkaran|tutungkaran}}:", +'titleprotectedwarning' => "'''Paringatan: Tungkaran ini sudah dilindungi laluai [[Special:ListGroupRights|hak khas]] diparluakan hagan maulah ini.''' +Log masuk pauncitan disadiakan di bawah gasan rujukan:", +'templatesused' => '{{PLURAL:$1|Citakan|Citakan}} nang digunakan di tungkaran ini:', +'templatesusedpreview' => '{{PLURAL:$1|Citakan|Citakan}} nang digunakan di titilikan ini:', +'templatesusedsection' => "{{PLURAL:$1|Citakan|Cicitakan}} nang diguna'akan di hagian ini:", +'template-protected' => '(dilindungi)', +'template-semiprotected' => '(semi-dilindungi)', +'hiddencategories' => 'Tungkaran ini adalah angguta matan {{PLURAL:$1|1 tumbung tasungkup|$1 tumbung tasungkup}}:', +'nocreatetitle' => 'Maulah tungkaran dibatasi', +'nocreatetext' => '{{SITENAME}} lagi mambatasi kakawaan maulah tungkaran hanyar. +Pian kawa babulik wan mambabak sabuah tungkaran nag ada, atawa [[Special:UserLogin|lbabuat log atawa baulah sabuah akun]]', +'nocreate-loggedin' => 'Pian kada baisi ijin hagan maulah tungkaran-tungkaran hanyar.', +'sectioneditnotsupported-title' => 'Pambabakan hagian kada didukung', +'sectioneditnotsupported-text' => 'Pambabakan hagian kada didukung pada tungkaran ini.', +'permissionserrors' => 'Parijinan tasalah', +'permissionserrorstext' => 'Pian kada baisi ijin gasan malakuakan itu, karana {{PLURAL:$1|alasan|alasan}} ini:', +'permissionserrorstext-withaction' => 'Pian kada baisi ijin gasan $2, karana {{PLURAL:$1|alasan|alasan}} ini:', +'recreate-moveddeleted-warn' => "'''Paringatan: Pian maulah pulang sabuah tungkaran nang sabalumnya dihapus.''' + +Pian partimbangakan dahulu sasuaikah hagan manarusakan pambabakan tungkaran ini. +Log pahapusan wan paugahan gasan tungkaran ini disadiakan di sia:", +'moveddeleted-notice' => 'Tungkaran ini sudah dihapus. +Log pahapusan wan paugahan gasan tungkaran ini disadiakan di bawah ini gasan rujukan.', +'log-fulllog' => 'Tiringi samunyaan log', +'edit-hook-aborted' => 'Babakan ditinggalakan ulih kakait parser. +Ini kadada panjalasan.', +'edit-gone-missing' => 'Kada kawa mamutakhirakan tungkaran ini. +Ini cungul pinanya sudah tahapus.', +'edit-conflict' => 'Babakan bacakut.', +'edit-no-change' => 'Babakan Pian diabaiakan, karana kadada parubahan diulah ka naskah ini.', +'edit-already-exists' => 'Kada kawa maulah sabuah tungkaran hanyar. +Nangini sudah ada.', + +# Parser/template warnings +'expensive-parserfunction-warning' => "'''Paringatan:''' Tungkaran ini mangandung kabanyakan pungsi parser kiauan. + +Nangini harusnya takurang matan $2 {{PLURAL:$2|kiauan|kiauan-kiauan}}, ada {{PLURAL:$1|wayah ini $1 kiauan|wayah ini $1 kiauan-kiauan}}.", +'expensive-parserfunction-category' => 'Tungkaran-tungkaran awan pungsi parser kiauan-kiauan kabanyakan', +'post-expand-template-inclusion-warning' => "'''Paringatan:''' Citakan nang diumpatakan takarannya kaganalan. +Babarapa citakan akan kada taumpatakan.", +'post-expand-template-inclusion-category' => 'Tungkaran-tungkaran nang citakan baumpat limpuar', +'post-expand-template-argument-warning' => "'''Paringatan:''' Tungkaran ini mangandung paling kada sabuah kalimat citakan wan ukuran panyingkaiannya kaganalan. Kalimat-kalimat nangitu sudah diabaiakan.", +'post-expand-template-argument-category' => 'Tungkaran-tungkaran nang mangandung kalimat-kalimat citakan diabaiakan', +'parser-template-loop-warning' => 'Citakan baulang takantup: [[$1]]', +'parser-template-recursion-depth-warning' => 'Citakan batas kadalaman recursi limpuar ($1)', +'language-converter-depth-warning' => 'Batas kadalaman pakonversi bahasa limpuar ($1)', + +# "Undo" feature +'undo-success' => 'Babakan kawa diwalangi. +Muhun pariksa panandingan di bawah hagan mayakinakan ini apa nang Pian handak gawi, wan imbah itu simpan parubahan di bawah hagan manuntungakan pawalangan babakan.', +'undo-failure' => 'Babakan ini kada kawa diwalangi karana ada cakutan di tangah babakan-babakan.', +'undo-norev' => 'Babakan kada kawa diwalangi karana ini kadada atawa tahapus.', +'undo-summary' => '←Mawalangakan ralatan $1 ulih [[Special:Contributions/$2|$2]] ([[User talk:$2|Pandir]])', + +# Account creation failure +'cantcreateaccounttitle' => 'Akun kada kawa diulah', +'cantcreateaccount-text' => "Paulahan akun matan alamat IP ('''$1''') sudah diblukir ulih [[User:$3|$3]]. + +Alasan nang dibari ulih $3 adalah ''$2''", + +# History pages +'viewpagelogs' => 'Tiringi log tungkaran ini', +'nohistory' => 'Kadada halam babakan gasan tungkaran ini.', +'currentrev' => 'Ralatan pahabisannya', +'currentrev-asof' => 'Ralatan pahanyarnya pada $1', +'revisionasof' => 'Ralatan matan $1', +'revision-info' => 'Ralatan pada $1 ulih $2', +'previousrevision' => '←Ralatan talawas', +'nextrevision' => 'Ralatan salanjutnya→', +'currentrevisionlink' => 'Ralatan wayahini', +'cur' => 'dmn', +'next' => 'dudi', +'last' => 'sblm', +'page_first' => 'Panambaian', +'page_last' => 'Pauncitan', +'histlegend' => "Pilihan mananding: tandai kutak-kutak radiu ralatan-ralatan nang handak ditanding wan picik enter atawa picikan di bawah.
    Legend: '''({{int:cur}})''' =lainnya awan ralatan pahanyarnya, '''({{int:last}})''' = lainnya awan ralatan sabalumnya, '''{{int:minoreditletter}}''' = babakan sapalih.", +'history-fieldset-title' => 'Tangadahi halam', +'history-show-deleted' => 'Nang dihapus haja', +'histfirst' => 'Palawasnya', +'histlast' => 'Pahanyarnya', +'historysize' => '($1 {{PLURAL:$1|bita|bibita}})', +'historyempty' => '(kusung)', + +# Revision feed +'history-feed-title' => 'Ralatan halam', +'history-feed-description' => 'Ralatan halam gasan tungkaran ini pada wiki', +'history-feed-item-nocomment' => '$1 wayah $2', +'history-feed-empty' => 'Tungkaran nang diminta kadada. +Ini pinanya sudah dihapus matan wiki ini, atawa dingarani lain. +Cubai [[Special:Search|gagai di wiki ini]] gasan tungkaran hanyar bakarabat.', + +# Revision deletion +'rev-deleted-comment' => '(kasimpulan babakan dibuang)', +'rev-deleted-user' => '(ngaran pamuruk dibuang)', +'rev-deleted-event' => '(log palakuan dibuang)', +'rev-deleted-user-contribs' => '[ngaran pamuruk atawa alamat IP dibuang - babakan disungkupakan matan daptar sumbangan]', +'rev-deleted-text-permission' => "Ralatan tungkaran ini sudah '''dihapus'''. +Rarincian kawa diugai dalam [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pahapusan].", +'rev-deleted-text-unhide' => "Ralatan tungkaran ini sudah '''dihapus'''. +Rarincian kawa diugai dalam [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pahapusan]. +Sawagai pambakal Pian masih kawa [$1 maniringi ralatan ini] amun Pian hakun manarusakan.", +'rev-suppressed-text-unhide' => "Ralatan tungkaran ini sudah '''ditikin'''. +Rarincian kawa diugai dalam [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log panikinan]. +Sawagai pambakal Pian masih kawa [$1 maniringi ralatan ini] amun Pian hakun manarusakan.", +'rev-deleted-text-view' => "Ralatan tungkaran ini sudah '''dihapus'''. +Sawagai saurang pambakal Pian kawa maniringi ini, rarincian kawa diugai dalam [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pahapusan].", +'rev-suppressed-text-view' => "Ralatan tungkaran ini sudah '''ditikin'''. +Sawagai saurang pambakal Pian kawa maniringi ini, rarincian kawa diugai dalam [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log panikinan].", +'rev-deleted-no-diff' => "Pian kada kawa maniringi nang balain ini karana asa matan ralatan-ralatan sudah '''dihapus'''. +Rarincian kawa diugai dalam [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pahapusan].", +'rev-suppressed-no-diff' => "Pian kada kawa maniringi nang balain ini karana asa matan ralatan-ralatan sudah '''dihapus'''.", +'rev-deleted-unhide-diff' => "Asa matan ralatan-ralatan nang balain ini sudah '''dihapus'''. +Rarincian kawa diugai dalam [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pahapusan]. +Sawagai pambakal Pian masih kawa [$1 maniringi nang balain ini] amun Pian hakun manarusakan.", +'rev-suppressed-unhide-diff' => "Asa matan ralatan-ralatan nang balain ini sudah '''ditikin'''. +Rarincian kawa diugai dalam [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log panikinan]. +Sawagai pambakal Pian masih kawa [$1 maniringi nang balain ini] amun Pian hakun manarusakan.", +'rev-deleted-diff-view' => "Asa matan ralatan-ralatan nang balain ini sudah '''dihapus'''. +Sawagai saurang pambakal Pian kawa nang balain ini; rarincian kawa diugai dalam [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pahapusan].", +'rev-suppressed-diff-view' => "Asa matan ralatan-ralatan nang balain ini sudah '''ditikin'''. +Sawagai saurang pambakal Pian kawa nang balain ini; rarincian kawa diugai dalam [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log panikinan].", +'rev-delundel' => 'tampaiakan/sungkupakan', +'rev-showdeleted' => 'tampaiakan', +'revisiondelete' => 'Hapus/kada mahapus ralatan-ralatan', +'revdelete-nooldid-title' => 'Ralatan nag dituju kada sah', +'revdelete-nooldid-text' => 'Pian kada maajuakan sabuah ralatan(-ralatan) tatuju hagan malakuakan pungsi ini, ralatan nang dituju kadada, atawa Pian mancuba manyungkupakan ralatan parhatan ini.', +'revdelete-nologtype-title' => 'Kadada macam log dibari', +'revdelete-nologtype-text' => 'Pian kada maajuakan sabuah macam log hagan malakuakan palakuan ini.', +'revdelete-nologid-title' => 'Log buat kada sah', +'revdelete-nologid-text' => 'Pian kada maajuakan sabuah log kajadian tatuju hagan malakuakan pungsi ini atawa buat nang diajuakan kadada.', +'revdelete-no-file' => 'Barakas nang diajuakan kadada.', +'revdelete-show-file-confirm' => 'Pian bujurkah handak maniringi sabuah ralatan tahapus matan barakas "$1" $2 pada $3?', +'revdelete-show-file-submit' => 'Iya-ai', +'revdelete-selected' => "'''{{PLURAL:$2|Ralatan tapilih|Raralatan tapilih}} matan [[:$1]]:'''", +'logdelete-selected' => "'''{{PLURAL:$1|Log kajadian tapilih|Log kakajadian tapilih}}:'''", +'revdelete-text' => "'''Raralatan tahapus wan kakajadian akan magun cungul dalam halam tungkaran wan log, tagal hagian matan isinya akan kada kawa diungkai umum.''' +Pambakal lain pada {{SITENAME}} akan magun kawa maungkai isi tasungkup wan kawa mambulikakan hapusan pulang mangguna'akan antarmuha sama, kacuali ada panambahan pahalatan lain nang disetél.", +'revdelete-confirm' => 'Muhun yakinakan bahwasa Pian handak manggawi ini, bahwasa Pian paham sabab akibat, wan bahwasa Pian manggawi ini bapandal awan [[{{MediaWiki:Policy-url}}|kaaripan]].', +'revdelete-suppress-text' => "Panikinan parlu dipuruk gasan kakasus baumpat ini: +* Pina kawa jadi panjalasan pitnah +* balalabihan panjalasan kada sasuai paribadi +*: ''alamat badiam wan numur talipun, numur kaamanan susial, dll.''", +'revdelete-legend' => 'Setel panampaian tabatas', +'revdelete-hide-text' => 'Sungkupakan naskah ralatan', +'revdelete-hide-image' => 'Sungkupakan isi barakas', +'revdelete-hide-name' => 'Sungkupakan palakuan wan nang dituju', +'revdelete-hide-comment' => 'Sungkupakan kasimpulan babakan', +'revdelete-hide-user' => 'Sungkupakan ngaran pamuruk/alamat IP pambabak', +'revdelete-hide-restricted' => 'Sungkupakan data matan pambakal nangkaya nang lain', +'revdelete-radio-same' => '(Ditangati maubah)', +'revdelete-radio-set' => 'Iya-ai', +'revdelete-radio-unset' => 'Kada', +'revdelete-suppress' => 'Sungkupakan data matan pambakal nangkaya nang lain', +'revdelete-unsuppress' => 'Buang pambatasan pada ralatan-ralatan nang dibulikakan', +'revdelete-log' => 'Alasan:', +'revdelete-submit' => 'Lamar hagan mamilih {{PLURAL:$1|ralatan|ralatan-ralatan}}', +'revdelete-logentry' => 'Ubah panampaian ralatan matan "[[$1]]"', +'logdelete-logentry' => 'Ubah panampaian kajadian matan "[[$1]]"', +'revdelete-success' => "'''Panampaian ralatan bakulihan dimutakhirakan.'''", +'revdelete-failure' => "'''Panampaian ralatan kada kawa dimutakhirakan:''' +$1", +'logdelete-success' => "'''Log panampaian bahasil disetel.'''", +'logdelete-failure' => "'''Log panampaian kada kawa disetel:''' +$1", +'revdel-restore' => 'Ubah tampilan', +'revdel-restore-deleted' => 'Ralatan-ralatan tahapus', +'revdel-restore-visible' => 'Ralatan-ralatan kalihatan', +'pagehist' => 'Sajarah tungkaran', +'deletedhist' => 'Halam tahapus', +'revdelete-content' => 'Isi', +'revdelete-summary' => 'Kasimpulan babakan', +'revdelete-uname' => 'ngaran pamuruk', +'revdelete-restricted' => 'Talamar pambatasan hagan pambakal-pambakal', +'revdelete-unrestricted' => 'Buang pambatasan gasan pambakal-pambakal', +'revdelete-hid' => 'Sung $1', +'revdelete-unhid' => 'Singkai $1', +'revdelete-log-message' => '$1 gasan $2 {{PLURAL:$2|ralatan|ralatan-ralatan}}', +'logdelete-log-message' => '$1 gasan $2 {{PLURAL:$2|kajadian|kajadian-kajadian}}', +'revdelete-hide-current' => 'Tasalah manyungkupakan nang batanggal $1, $2: ini adalah ralatan tahanyar. +Ini kada kawa disungkupakan.', +'revdelete-show-no-access' => 'Tasalah manampaiakan nang batanggal $1, $2: nangini sudah ditandai "tabatas". +Pian kada kawa malihati ini.', +'revdelete-modify-no-access' => 'Tasalah magaganti nang batanggal $1, $2: nangini sudah ditandai "tabatas". +Pian kada kawa maungkai ini.', +'revdelete-modify-missing' => 'Kasalahan magaganti nang ba-ID $1: Ini bahilang matan basis data!', +'revdelete-no-change' => "'''Paringatan:''' nang batanggal $1, $2 sudah baisi setélan kakawaan-dilihati.", +'revdelete-concurrent-change' => 'Kasalahan magaganti nang batanggal $1, $2: nangini cungulnya suah diubah ulih urang lain pas Pian handak magaganti ini. +Muhun pariksa lolog.', +'revdelete-only-restricted' => 'Kasalahan manyungkup ngan batanggal $1, $2: Pian kada kawa manikin matan tiringan ulih papambakal kadada jua mamilih asa matan pilihan kawa-malihati.', +'revdelete-reason-dropdown' => '*Aalasan umum pahapusan +** Palangaran hak cipta +** Kakadasasuaian panjalasan paribadi +** Pina kawa jadi panjalasan pitnah', +'revdelete-otherreason' => 'Alasan lain/tatambahan:', +'revdelete-reasonotherlist' => 'Alasan lain', +'revdelete-edit-reasonlist' => 'Aalasan pahapusan babakan', +'revdelete-offender' => 'Ralatan panulis:', + +# Suppression log +'suppressionlog' => 'Log panikinan', +'suppressionlogtext' => 'Nang di bawah adalah sabuah daptar matan pahahapusan wan Pamblublukiran tamasuk isi tasungkup matan papambakal. Lihati [[Special:IPBlockList|Daptar IP diblukir]] gasan daptar matan uprasi tahanyar tatangatan wan blublukir.', + +# History merging +'mergehistory' => 'Gabungakan hahalam tungkaran', +'mergehistory-header' => 'Tungkaran ngini mambulihakan Pian manggabungakan raralatan matan asa tungkaran asal mula ka sabuah tungkaran tahanyar. +Yakini bahwasa parubahan ngini masih maharagu tarus halam lawas tungkaran.', +'mergehistory-box' => 'Gabungakan raralatan matan dua tungkaran:', +'mergehistory-from' => 'Tungkaran asal mula:', +'mergehistory-into' => 'Tungkaran tatuju:', +'mergehistory-list' => 'Halam babakan nang kawa digabungakan', +'mergehistory-merge' => 'Raralatan barikut matan [[:$1]] kawa digabungakan ka[[:$2]]. +Puruk picikan radiu hagan manggabungakan raralatan nang diulah pada wan sabalum wayah tartantu haja. +Catatan bahwasa mamuruk tautan napigasi akan mambulikakan setelan kolum ngini.', +'mergehistory-go' => 'Tampaiakan bababakan nang kawa digabungakan', +'mergehistory-submit' => 'Gabungakan raralatan', +'mergehistory-empty' => 'Kadada raralatan nang kawa digabungakan', +'mergehistory-success' => '$3 {{PLURAL:$3|ralatan|raralatan}} matan [[:$1]] ruhui digabungakan ka [[:$2]].', +'mergehistory-fail' => 'Kada kawa manggabungakan halam, muhun pariksa pulang tungkaran wan parameter wayah.', +'mergehistory-no-source' => 'Tungkaran asal mula $1 kadada.', +'mergehistory-no-destination' => 'Tungkaran tatuju $1 kadada.', +'mergehistory-invalid-source' => 'Asal mula tungkaran musti sabuah judul sah.', +'mergehistory-invalid-destination' => 'Tungkaran tatuju musti sabuah judul sah.', +'mergehistory-autocomment' => 'Sudah digabungakan [[:$1]] ka dalam [[:$2]]', +'mergehistory-comment' => 'Sudah digabungakan [[:$1]] ka dalam [[:$2]]: $3', +'mergehistory-same-destination' => 'Tungkaran-tungkaran asal mula wan tatuju kada kawa sama', +'mergehistory-reason' => 'Alasan:', + +# Merge log +'mergelog' => 'Log panggabungan', +'pagemerge-logentry' => 'Sudah digabungakan [[$1]] ka dalam [[$2]] (ralatan-ralatan sampai $3)', +'revertmerge' => 'Walang panggabungan', +'mergelogpagetext' => 'Di bawah adalah daptar nang paling hanyar panggabungan matan sabuah tungkaran halam ka dalam nang lain.', + +# Diffs +'history-title' => "Ralatan halam matan ''$1''", +'difference' => '(Nang balain antar ralatan)', +'difference-multipage' => '(Nang balain antar tungkaran-tungkaran)', +'lineno' => 'Baris $1:', +'compareselectedversions' => 'Tandingakan ralatan nang dipilih', +'showhideselectedversions' => 'Tampaiakan/sungkupakan ralatan-ralatan', +'editundo' => 'walangi', +'diff-multi' => '({{PLURAL:$1|Asa ralatan tangah|$1 raralatan tangah}} ulih {{PLURAL:$2|asa pamuruk|$2 papamuruk}} kada ditampaiakan)', +'diff-multi-manyusers' => '({{PLURAL:$1|Asa ralatan tangah|$1 raralatan tangah}} ulih labih pada $2 {{PLURAL:$2|pamuruk|papamuruk}} kada ditampaiakan)', + +# Search results +'searchresults' => 'Kulihan panggagaian', +'searchresults-title' => 'Kulihan gagai gasan "$1"', +'searchresulttext' => 'Gasan panjalasan labih lanjut pasal panggagaian pintangan {{SITENAME}}, lihati [[{{MediaWiki:Helppage}}|tungkaran patulung]].', +'searchsubtitle' => 'Pian manggagai \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|samunyaan tungkaran bamula wan "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|samunyaan tungkaran nang bataut ka "$1"]])', +'searchsubtitleinvalid' => "Pian manggagai '''$1'''", +'toomanymatches' => 'Kabanyakan nang cucuk kulihan, muhun cubai parmintaan lain', +'titlematches' => 'Judul tungkaran pas', +'notitlematches' => 'Kadada tungkaran bajudul pas', +'textmatches' => 'Naskah tungkaran pas', +'notextmatches' => 'Kadada tungkaran banaskah pas', +'prevn' => '{{PLURAL:$1|$1}} tadahulu', +'nextn' => '{{PLURAL:$1|$1}} dudinya', +'prevn-title' => 'Tadahulu $1 {{PLURAL:$1|kulihan|kulihan-kulihan}}', +'nextn-title' => 'Tadudi $1 {{PLURAL:$1|kulihan|kulihan-kulihan}}', +'shown-title' => 'Tampaiakan $1 {{PLURAL:$ 1|kulihan|kukulihan}} par tungkatan', +'viewprevnext' => 'Tiringi ($1 {{int:pipe-separator}} $2) ($3)', +'searchmenu-legend' => 'Papilihan manggagai', +'searchmenu-exists' => "'''Ada tungkaran bangaran \"[[:\$1]]\" dalam wiki ini.'''", +'searchmenu-new' => "'''Maulah tungkaran \"[[:\$1]]\" dalam wiki ini!'''", +'searchhelp-url' => 'Help:Isi', +'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Janaki daptar tungkaran lawan awalan ngini]]', +'searchprofile-articles' => 'Tungkaran isi', +'searchprofile-project' => 'Tutungkaran Patulung wan Rangka gawian', +'searchprofile-images' => 'Multimadia', +'searchprofile-everything' => 'Samunyaan', +'searchprofile-advanced' => 'Haratan', +'searchprofile-articles-tooltip' => 'Panggagaian pada $1', +'searchprofile-project-tooltip' => 'Panggagaian pada $1', +'searchprofile-images-tooltip' => 'Panggagaian barakas', +'searchprofile-everything-tooltip' => 'Panggagaian sabarataan isi (tamasuk tutungkaran pamandiran)', +'searchprofile-advanced-tooltip' => 'Panggagaian pada ragam ngaran kakamar', +'search-result-size' => '$1 ({{PLURAL:$2|1 ujar|$2 uujar}})', +'search-result-category-size' => '{{PLURAL:$1|1 angguta|$1 aangguta}} ({{PLURAL:$2|1 subtumbung|$2 subtutumbung}}, {{PLURAL:$3|1 barakas|$3 babarakas}})', +'search-result-score' => 'Kacucukan: $1%', +'search-redirect' => '(Paugahan $1)', +'search-section' => '(hagian $1)', +'search-suggest' => 'Inikah maksud Pian: $1', +'search-interwiki-caption' => 'Dingsanak rangka gawian', +'search-interwiki-default' => 'Kulihan $1', +'search-interwiki-more' => '(lagi)', +'search-mwsuggest-enabled' => 'awan saran', +'search-mwsuggest-disabled' => 'kadada saran', +'search-relatedarticle' => 'Bakulaan', +'mwsuggest-disable' => "Kada kawa'akan sasaran AJAX", +'searcheverything-enable' => 'Panggagaian pada samunyaan ngaran kakamar', +'searchrelated' => 'bakulaan', +'searchall' => 'samunyaan', +'showingresults' => "Di bawah ngini ditampaiakan hingga {{PLURAL:$1|'''1''' kulihan|'''$1''' kukulihan}}, dimulai matan #'''$2'''.", +'showingresultsnum' => "Di bawah ngini ditampaiakan hingga {{PLURAL:$3|'''1''' kulihan|'''$3''' kukulihan}}, dimulai matan #'''$2'''.", +'showingresultsheader' => "{{PLURAL:$5|Kulihan '''$1''' matan '''$3'''|Kukulihan '''$1 - $2''' matan '''$3'''}} gasan '''$4'''", +'nonefound' => "'''Catatan''': babarapa ngaran kamar haja nang baku digagai. +Tarai pamintaan Pian lawan ''all:'' gasan manggagai samunyaan isi (tamasuk tungkaran pamandiran, citakan, dll), atawa puruk ngaran kamar nang dihandaki sabagai awalan.", +'search-nonefound' => 'Kadada kulihan nang pas awan parmintaan.', +'powersearch' => 'Panggagaian mahir', +'powersearch-legend' => 'Panggagaian mahir', +'powersearch-ns' => 'Manggagai di ngaran kamar:', +'powersearch-redir' => 'Daptar paugahan', +'powersearch-field' => 'Manggagai', +'powersearch-togglelabel' => 'Pilihi:', +'powersearch-toggleall' => 'Samunyaan', +'powersearch-togglenone' => 'Kadada', +'search-external' => 'Panggagaian luar', +'searchdisabled' => '{{SITENAME}} panggagaian kada kawa +Pian kawa manggagai lung Google parhatan ini. +Catatan nang dihaharnya matan isi {{SITENAME}} kawa-ai sudah kadaluarsa.', + +# Quickbar +'qbsettings' => 'Bilahhancap', +'qbsettings-none' => 'Kadada', +'qbsettings-fixedleft' => 'Tatap di kiwa', +'qbsettings-fixedright' => 'Tatap di kanan', +'qbsettings-floatingleft' => 'Mangambang sabalah kiwa', +'qbsettings-floatingright' => 'Mangambang sabalah kanan', + +# Preferences page +'preferences' => 'Kakatujuan', +'mypreferences' => 'Nang ulun katuju', +'prefs-edits' => 'Rikinan babakan-babakan:', +'prefsnologin' => 'Balum babuat log', +'prefsnologintext' => 'Pian harus [{{fullurl:{{#Special:UserLogin}}|returnto=$1}} babuat log] gasat mengeset kakatujuan Pian.', +'changepassword' => 'Ubah katasunduk', +'prefs-skin' => 'Kulimbit', +'skin-preview' => 'Titilikan', +'prefs-math' => 'Matik', +'datedefault' => 'Kadada katujuan', +'prefs-datetime' => 'Tanggal wan waktu', +'prefs-personal' => 'Data awak', +'prefs-rc' => 'Parubahan tahanyar', +'prefs-watchlist' => 'Paitihan', +'prefs-watchlist-days' => 'Rikinan hari-hari ditampaiakan di daptar itihan:', +'prefs-watchlist-days-max' => 'Paling lawas 7 hari-hari', +'prefs-watchlist-edits' => 'Rikinan paningginya matan parubahan hagan ditampaiakan pada singkaian daptar itihan:', +'prefs-watchlist-edits-max' => 'Rikinan paningginya:1000', +'prefs-watchlist-token' => 'Token itihan:', +'prefs-misc' => 'Balalain', +'prefs-resetpass' => 'Ubah katasunduk', +'prefs-email' => 'Pipilihan suril', +'prefs-rendering' => 'Pancungulan', +'saveprefs' => 'Simpan', +'resetprefs' => 'Kusungakan paparubahan kada tasimpan', +'restoreprefs' => 'Bulikakan samunyaan sesetélan default', +'prefs-editing' => 'Pambabakan', +'prefs-edit-boxsize' => 'Ukuran lalungkang babakan', +'rows' => 'Baris:', +'columns' => 'Kolom:', +'searchresultshead' => 'Gagai', +'resultsperpage' => 'Hantukan par tungkaran:', +'contextlines' => 'Baris par hantukan:', +'contextchars' => 'Isi par baris:', +'stub-threshold' => 'Ambang watas gasan pormat taautan rintisan:', +'stub-threshold-disabled' => 'Kada kawa-akan', +'recentchangesdays' => 'Hahari nang manampaiakan parubahan tahanyar:', +'recentchangesdays-max' => 'Paling lawas $1 {{PLURAL:$1|hari|hahari}}', +'recentchangescount' => 'Rikinan babakan nang ditampaiakan default:', +'prefs-help-recentchangescount' => 'Ini tamasuk parubahan tahanyar, halam-halam tungkaran, wan log-log.', +'prefs-help-watchlist-token' => 'Maisi kutak ngini lawan kunci rahasia (PIN) akan mahasilakan sindikasi RSS hagan daptar pantauan Anda. Siapa gin nang tahu kunci ngini kawa mambaca daptar itihan Pian, jadi pilihi nilainya bahati-hati +Barikut ngini adalah nilai acak nang kawa Pian puruk: $1', +'savedprefs' => 'Kakatujuan Pian sudah ham disimpan.', +'timezonelegend' => 'Waktu banua:', +'localtime' => 'Waktu damintu:', +'timezoneuseserverdefault' => 'Purukan Server default', +'timezoneuseoffset' => 'Nang lain (ajuakan nang luput setel)', +'timezoneoffset' => 'Luput setel¹:', +'servertime' => 'Waktu server:', +'guesstimezone' => 'Isiakan matan panjalajah web', +'timezoneregion-africa' => 'Aprika', +'timezoneregion-america' => 'Amirika', +'timezoneregion-antarctica' => 'Antarktika', +'timezoneregion-arctic' => 'Arktik', +'timezoneregion-asia' => 'Asia', +'timezoneregion-atlantic' => 'Lalautan Atlantik', +'timezoneregion-australia' => 'Australia', +'timezoneregion-europe' => 'Irupa', +'timezoneregion-indian' => 'Lalautan Hindia', +'timezoneregion-pacific' => 'Lalautan Pasipik', +'allowemail' => "Kawa'akan pamuruk lain mangirim suril", +'prefs-searchoptions' => 'Papilihan manggagai', +'prefs-namespaces' => 'Ngaran kamar', +'defaultns' => 'Atawa-lah manggagai dalam ngaran kakamar nangini:', +'default' => 'default', +'prefs-files' => 'Barakas', +'prefs-custom-css' => 'Saragamakan CSS', +'prefs-custom-js' => 'Saraganakan JavaScript', +'prefs-common-css-js' => 'Babagi CSS/JavaScript gasan samunyaan skin:', +'prefs-reset-intro' => 'Pian kawa mamuruk tungkaran ini hagan setel bulik kakatujuan Pian ka default situs. +Ini kada kawa diwalangi.', +'prefs-emailconfirm-label' => 'Payakinakan suril:', +'prefs-textboxsize' => 'Ukuran kutak ubahan', +'youremail' => 'Suril:', +'username' => 'Ngaran pamuruk:', +'uid' => 'ID pamuruk:', +'prefs-memberingroups' => 'Angguta matan {{PLURAL:$1|galambang|gagalambang}}:', +'prefs-registration' => 'Waktu pandaptaran:', +'yourrealname' => 'Ngaran asli:', +'yourlanguage' => 'Bahasa:', +'yournick' => 'Tandatangan:', +'prefs-help-signature' => 'Kumintar pada tungkaran pamandiran parlu ditandatangani awan "~~~~" nangapa akan taubah jadi tandatangan Pian wan waktu wayahini.', +'badsig' => 'Tandatangan mantah kada sah. +Pariksa tag HTML.', +'badsiglength' => 'Tapak tangan Sampian talalu panjang. Jangan malabihi pada $1 {{PLURAL:$1|karakter|karakter}}.', +'yourgender' => 'Janis kalamin:', +'gender-unknown' => 'Kada diajuakan', +'gender-male' => 'Lalakian', +'gender-female' => 'Bibinian', +'prefs-help-gender' => 'Opsional: dipuruk gasan mambaiki manyambat gindir ulih parangkat lunak. Panjalasan ngini akan tasingkai hagan umum.', +'email' => 'Suril', +'prefs-help-realname' => 'Ngaran bujur adalah pilihan haja. +Amun Pian mamilih manyadiakan ini, ini akan dipuruk gasan paminanduan kulihan gawian Pian.', +'prefs-help-email-required' => 'Alamat suril diparluakan.', +'prefs-info' => 'Panjalasan pandal', +'prefs-i18n' => 'Intarnasionalisasi', +'prefs-signature' => 'Tandatangan', +'prefs-dateformat' => 'Purmat tanggal', +'prefs-timeoffset' => 'Setélan waktu', +'prefs-advancedediting' => 'Pilihan harat', +'prefs-advancedrc' => 'Pilihan harat', +'prefs-advancedrendering' => 'Pilihan harat', +'prefs-advancedsearchoptions' => 'Pilihan harat', +'prefs-advancedwatchlist' => 'Pilihan harat', +'prefs-displayrc' => 'Pilihan tampilan', +'prefs-displaysearchoptions' => 'Pilihan tampilan', +'prefs-displaywatchlist' => 'Pilihan tampilan', +'prefs-diffs' => 'Bida', + +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Alamat suril tacungul sah', +'email-address-validity-invalid' => 'Buati sabuah alamat suril nang sah', + +# User rights +'userrights' => 'Pangalulaan hak-hak pamuruk', +'userrights-lookup-user' => 'Mangalula gagalambang pamuruk', +'userrights-user-editname' => 'Buati sabuah ngaran pamuruk:', +'editusergroup' => 'Babak galambang pamuruk', +'editinguser' => "Mangganti hak akses pamuruk '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])", +'userrights-editusergroup' => 'Babak galambang pamuruk', +'saveusergroups' => 'Simpan galambang pamuruk', +'userrights-groupsmember' => 'Angguta matan:', +'userrights-groupsmember-auto' => 'Angguta tasirat matan:', +'userrights-groups-help' => 'Pian kawa maubah galambang pamuruk ngini: +* Kutak awan tanda cek artnya galambang pamuruk nang basangkutan +* Kutak kada batanda cek artinya pamuruk ngini lainan angguta galambang ngitu +* Tanda * manandai bahwasa Pian kada kawa mawalangi galambang ngitu amun Pian sudah manambahinya, atawa kabalikannya.', +'userrights-reason' => 'Alasan:', +'userrights-no-interwiki' => 'Pian kada baisi ijin hagan mambabak hak pamuruk di wiki lain.', +'userrights-nodatabase' => 'Basis data $1 kadada atawa lainan lukal.', +'userrights-nologin' => 'Pian musti [[Special:UserLogin|lbabuat log]] awan sabuah akun pambakal hagan mambari hak pamuruk.', +'userrights-notallowed' => 'Akun Pian kada baisi ijin hagan mambari hak pamuruk.', +'userrights-changeable-col' => 'Gagalambang nang Pian kawa ubah', +'userrights-unchangeable-col' => 'Gagalambang nang Pian kada kawa ubah', + +# Groups +'group' => 'Galambang:', +'group-user' => 'Pamuruk', +'group-autoconfirmed' => 'Pamuruk utumatis diyakinakan', +'group-bot' => 'Bot', +'group-sysop' => 'Pambakal', +'group-bureaucrat' => 'Birukrat', +'group-suppress' => 'Pangawas', +'group-all' => '(samunyaan)', + +'group-user-member' => 'Pamuruk', +'group-autoconfirmed-member' => 'pamuruk utumatis diyakinakan', +'group-bot-member' => 'Bot', +'group-sysop-member' => 'Pambakal', +'group-bureaucrat-member' => 'Birukrat', +'group-suppress-member' => 'pangawas', + +'grouppage-user' => '{{ns:project}}: Pamuruk', +'grouppage-autoconfirmed' => '{{ns:project}}: Pamuruk utumatis diyakinakan', +'grouppage-bot' => '{{ns:project}}:Bot', +'grouppage-sysop' => '{{ns:project}}:Pambakal', +'grouppage-bureaucrat' => '{{ns:project}}:Birukrat', +'grouppage-suppress' => '{{ns:project}}:Pangawas', + +# Rights +'right-read' => 'Mambaca tungkaran', +'right-edit' => 'Mambaiki tungkaran', +'right-createpage' => 'Ulah tutungkaran (nang lainan tutungkaran pamandiran)', +'right-createtalk' => 'Maulah tutungkaran pamandiran', +'right-createaccount' => 'Ulah akun pamuruk hanyar', +'right-minoredit' => 'Tandai bababakan sawagai sapalih', +'right-move' => 'Mamindahakan tungkaran', +'right-move-subpages' => 'Ugahakan tutungkaran awan subtumgkaran-nya', +'right-move-rootuserpages' => 'Ugahakan akar tutungkaran pamuruk', +'right-movefile' => 'Mamindahakan barakas', +'right-suppressredirect' => 'Kada maulah paugahan matan tutungkaran asal mula parhatan tutungkan pindahan', +'right-upload' => 'Unggahakan barakas', +'right-reupload' => 'Manulistindih barakas nang ada', +'right-reupload-own' => 'Manulistindih barakas nang ada unggahan ulih urang nang sama', +'right-reupload-shared' => 'Manulak babarakas pada panyimpanan media lokal basamaan', +'right-upload_by_url' => 'Hunggahakan babarakas matan sabuah URL', +'right-purge' => 'Limpuarakan timbuluk situs gasan asa tungkaran kada pambaritahuan', +'right-autoconfirmed' => 'Mambabak tutungkaran sami-dilindungi', +'right-bot' => 'Ditindak sawagai sabuah proses utumatis', +'right-nominornewtalk' => 'Kadada babakan sapalih di tutungkaran pamandiran nang mancungulakan tampaian pasan puga', +'right-apihighlimits' => 'Mamuruk watas kueri API tatinggi', +'right-writeapi' => 'Puruk panulisan API', +'right-delete' => 'Mahapus tungkaran', +'right-bigdelete' => 'Hapus tutungkaran awan hahalam ganal', +'right-deleterevision' => 'Mahapus wan mawalangi hapus raralatan tatantu matan tutungkaran', +'right-deletedhistory' => 'Tiringi mamasukan halam tahapus, kada banaskah tarait', +'right-deletedtext' => 'Tiringi naskah tahapus wan parubahan antar raralatan tahapus', +'right-browsearchive' => 'Manggagai tungkaran nang sudah dihapus', +'right-undelete' => 'Mambulikakan sabuah tungkaran tahapus', +'right-suppressrevision' => 'Maniring pulang wan mambulikakan raralatan matan papambakal', +'right-suppressionlog' => 'Tiringi log paribadi', +'right-block' => 'Blukir pamuruk lain mambabak', +'right-blockemail' => 'Blukir saurang pamuruk mangirimi suril', +'right-hideuser' => 'Blukir sabuah ngaranpamuruk, sungkupakan ini matan umum', +'right-ipblock-exempt' => 'Liwati blukir IP, blukir-utumatis wan aria blukir', +'right-proxyunbannable' => 'Liwati utumatis blukir matan pruksi', +'right-unblockself' => 'Lapas blukirnya surang', +'right-protect' => 'Ubah tingkat parlindungan wan babakan tutungkaran nang diindungi', +'right-editprotected' => 'Babak tungkaran nang dilindungi (kada parlindungan barenteng)', +'right-editinterface' => 'Babak antarmuha pamuruk ini', +'right-editusercssjs' => 'Babak pamuruk lain babarakas CSS wan JavaScript', +'right-editusercss' => 'Babak pamruk lain babarakas CSS', +'right-edituserjs' => 'Babak pamuruk lain babarakas JavaScript', +'right-rollback' => 'Mambulikakan hancap bababakan matan pamuruk tauncit nang mambabak sabuah tungkaran tatantu', +'right-markbotedits' => 'Tandai bababakan dibulikakan sawagai bababakan bot', +'right-noratelimit' => 'Kada pangaruh awan watas rating', +'right-import' => 'Impur tutungkaran matan wiwiki lain', +'right-importupload' => 'Iimpur tutungkaran matan sabuah barakas hunggahan', +'right-patrol' => "Tandai bababakan nang lain sawagai ta'awasi", +'right-autopatrol' => "Babakan ampun surang utumatis ditandai sawagai ta'awasi", +'right-patrolmarks' => 'Tiringi tanda parubahan tahanyar', +'right-unwatchedpages' => 'Tiringi sabuah daptar tutungkaran nang kada diitihi', +'right-trackback' => 'Mangirimakan sabuah panjajakan balik', +'right-mergehistory' => 'Gabungakan halam matan tutungkaran', +'right-userrights' => 'Babak sabarataan hak pamuruk', +'right-userrights-interwiki' => 'Babak hahak pamuruk matan papamuruk wiwiki balain', +'right-siteadmin' => 'Sunduk wan buka sunduk basis data', +'right-reset-passwords' => 'Risit katasunduk pamuruk lain', +'right-override-export-depth' => 'Ekspur tutungkaran tamasuk tutungkaran tataut sampai kadalaman 5', +'right-sendemail' => 'Mangirim suril ka papamuruk lain', + +# User rights log +'rightslog' => 'Log parubahan hak masuk', +'rightslogtext' => 'Nangini adalah sabuah log paparubahan ka hahak pamuruk.', +'rightslogentry' => 'Ubah galambang angguta gasan $1 matan $2 ka $3', +'rightsnone' => '(kadada)', + +# Associated actions - in the sentence "You do not have permission to X" +'action-read' => 'baca tungkaran ini', +'action-edit' => 'babak tungkaran ini', +'action-createpage' => 'ulah tutungkaran', +'action-createtalk' => 'ulah tutungkaran pamandiran', +'action-createaccount' => 'ulah akun pamuruk ini', +'action-minoredit' => 'tandai babakan ini sawagai sapalih', +'action-move' => 'pindahakan tungkaran ini', +'action-move-subpages' => 'pindahakan tungkaran ini, wan sub-tutungkarannya', +'action-move-rootuserpages' => 'mamindahakan akar tutungkaran pamuruk', +'action-movefile' => 'pindahakan barakas ini', +'action-upload' => 'hunggahakan barakas ini', +'action-reupload' => 'manimpa barakas nang ada', +'action-reupload-shared' => 'manindih barakas nang sudah ada di wadah payimpanan barakas basamaan', +'action-upload_by_url' => 'hunggahakan barakas ini matan sabuah URL', +'action-writeapi' => 'puruk panulisan API', +'action-delete' => 'hapus tungkaran ini', +'action-deleterevision' => 'hapus ralatan ini', +'action-deletedhistory' => 'tiringi halam tahapus tungkaran ini', +'action-browsearchive' => 'gagai tutungkaran tahapus', +'action-undelete' => 'kada jadi mahapus tungkaran ini', +'action-suppressrevision' => 'tilik wan bulikakan ralatan tasungkup ini', +'action-suppressionlog' => 'tiringi log paribadi ini', +'action-block' => 'blukir pamuruk ini matan mambabak', +'action-protect' => 'Ubah tingkat parlindungan tungkaran ngini', +'action-import' => 'Impur tungkaran ngini matan wiki lain', +'action-importupload' => 'Impur tungkaran ngini matan sabuah barakas hunggahan', +'action-patrol' => "tandai babakan nang lain sawagai ta'awasi", +'action-autopatrol' => "Tandai babakan Pian sawagai ta'awasi", +'action-unwatchedpages' => 'tiringi daptar tutungkaran nang kada diitihi', +'action-trackback' => 'kirim sabuah jajakbulik', +'action-mergehistory' => 'gabungakan halam matan tungkaran ngini', +'action-userrights' => 'babak sabarataan hak pamuruk', +'action-userrights-interwiki' => 'babak hak pamuruk matan papamuruk dalam wiwiki lain', +'action-siteadmin' => 'sunduk atawa bukasunduk basisdata', + +# Recent changes +'nchanges' => '$1 {{PLURAL:$1|parubahan|parubahan}}', +'recentchanges' => 'Parubahan tahanyar', +'recentchanges-legend' => 'Pilihan parubahan tahanyar', +'recentchangestext' => 'Jajak parubahan wiki pahanyarnya pada tungkaran ngini', +'recentchanges-feed-description' => 'Susuri parubahan pahanyarnya dalam wiki di kitihan ini', +'recentchanges-label-newpage' => 'Babakan ini maulah sabuah tungkaran hanyar', +'recentchanges-label-minor' => 'Ini adalah sabuah babakan sapalih', +'recentchanges-label-bot' => 'Babakan ini digawi ulih saikung bot', +'recentchanges-label-unpatrolled' => "Babakan ini baluman ta'awasi", +'rcnote' => "Di bawah ni {{PLURAL:$1|'''1'''|'''$1'''}} parubahan tahanyar dalam {{PLURAL:$2|'''1''' hari|'''$2''' hari}} tauncit, sampai $4 pukul $5.", +'rcnotefrom' => "Di bawah ngini parubahan tumatan '''$2''' (ditampaiakan sampai '''$1''' parubahan)", +'rclistfrom' => 'Tampaiakan parubahan tahanyar matan $1', +'rcshowhideminor' => '$1 pambabakan sapalih', +'rcshowhidebots' => '$1 bot', +'rcshowhideliu' => '$1 pamuruk nang babuat di log', +'rcshowhideanons' => '$1 pamuruk kada bangaran', +'rcshowhidepatr' => "$1 babakan ta'awasi", +'rcshowhidemine' => '$1 babakan ulun', +'rclinks' => 'Tampaiakan $1 parubahan tahanyar dalam $2 hari tauncit
    $3', +'diff' => 'bida', +'hist' => 'halam', +'hide' => 'Sungkupakan', +'show' => 'Tampaiakan', +'minoreditletter' => 's', +'newpageletter' => 'H', +'boteditletter' => 'b', +'number_of_watching_users_pageview' => "[$1 {{PLURAL:$1|pa'itihi|papa'itihi}}]", +'rc_categories' => 'Watasi tutumbung (pisahakan lawan "|")', +'rc_categories_any' => 'Napa gin', +'newsectionsummary' => '/* $1 */ hagian hanyar', +'rc-enhanced-expand' => 'Tampaiakan rincian (parlu ada JavaScript)', +'rc-enhanced-hide' => 'Sungkupakan ririncian', + +# Recent changes linked +'recentchangeslinked' => 'Parubahan tarait', +'recentchangeslinked-feed' => 'Parubahan tarait', +'recentchangeslinked-toolbox' => 'Parubahan tarait', +'recentchangeslinked-title' => 'Parubahan nang tarait lawan "$1"', +'recentchangeslinked-noresult' => 'Kadada parubahan pada tautan tutungkaran salawas wayah ditantuakan', +'recentchangeslinked-summary' => "Ini adalah sabuah daptar parubahan nang diulah hahanyar ini pada tungkaran batautan matan sabuah tungkaran tartantu (atawa ka angguta matan sabuah tumbung tartantu). +Tutungkaran dalam [[Special:Watchlist|daptar itihan Pian]] ditandai '''kandal'''.", +'recentchangeslinked-page' => 'Ngaran tungkaran:', +'recentchangeslinked-to' => 'Tampaiakan parubahan matan tungkaran-tungkaran nang tataut lawan tungkaran nang disurungakan', + +# Upload +'upload' => 'Hunggahakan barakas', +'uploadbtn' => 'Hunggahakan barakas', +'reuploaddesc' => 'Walang mahunggah wan babulik ka purmulir hunggahan', +'upload-tryagain' => 'Kirim katarangan barakas taubah', +'uploadnologin' => 'Baluman babuat log', +'uploadnologintext' => 'Pian musti [[Special:UserLogin|babuat log]] amun handak mahunggah babarakas.', +'upload_directory_missing' => 'Direktori hunggahan ($1) hilang wan kada kawa diulah ulih webserver.', +'upload_directory_read_only' => 'Direktori hunggahan ($1) kada kawa ditulisi ulih webserver.', +'uploaderror' => 'Hunggah tasalah', +'upload-recreate-warning' => "'''Paringatan: Sabuah barakas bangaran ngini sudah dihapus atawa dipindahakan.''' +Log pahapusan wan pamindahan hagan tungkarran ngini adalah sawagai barikut:", +'uploadtext' => "Puruk purmulir di bawah gasan mahunggah barakas. +Gasan manampaiakan atawa manggagai barakas nang sabalumnya dimuat, puruk [[Special:FileList|daptar barakas]]. Pahunggahan (lagi) jua tacatat dalam [[Special:Log/upload|log pahunggahan]], samantara pahapusan tacatat dalam [[Special:Log/delete|log pahapusan]]. + +Gasan manampaiakn atawa maumpatakan barakas di dalam suatu tungkaran, puruk tautan lawan salah asa purmat di bawah ngini: +* '''[[{{ns:file}}:Barakas.jpg]]''' hagan manampaiakan barakas dalam takaran aslinya +* '''[[{{ns:file}}:Barakas.png|200px|thumb|left|naskah alternatip]]''' hagan manampaiakan barakas lawan libar 200px dalam sabuah kutak di kiwa tungkaran lawan 'naskah alternatip' sawagai katarangan gambar +* '''[[{{ns:media}}:Barakas.ogg]]''' sawagai tautan langsung ka barakas nang dimaksud kada batampaiakan barakas ngitu lung wiki", +'upload-permitted' => 'Macam barakas nang diijinakan: $1.', +'upload-preferred' => 'Macam barakas nang dikatujui: $1.', +'upload-prohibited' => 'Macam barakas nang ditangati: $1.', +'uploadlog' => 'log hunggah', +'uploadlogpage' => 'Log mambuati', +'uploadlogpagetext' => 'Di bawah ngini adalah sabuah daptar matan barakas nang hanyar dihuhunggah. +Janaki [[Special:NewFiles|galeri babarakas hanyar]] gasan tampaian visual.', +'filename' => 'Ngaran barakas', +'filedesc' => 'Kasimpulan', +'fileuploadsummary' => 'Kasimpulan:', +'filereuploadsummary' => 'Parubahan barakas:', +'filestatus' => 'Satatus hakcipta:', +'filesource' => 'Asal mula:', +'uploadedfiles' => 'Babarakas tahunggah', +'ignorewarning' => 'Kada mahuwal paringatan wan simpan haja barakas langsung.', +'ignorewarnings' => 'Kada mahuwal apapun paringatan', +'minlength1' => 'Ngaran barakas musti sahikitnya asa abjad.', +'illegalfilename' => 'Ngaran barakas "$1" mangandung karaktir nang kada dibulihakan dalam tungkaran jujudul. +Muhan ganti ngaran barakas wan cubai mahunggah pulang.', +'badfilename' => 'Ngaran barakas sudah diganti ka "$1".', +'filetype-badmime' => 'Babarakas macam MIME "$1" kada bulih dihunggah.', +'filetype-bad-ie-mime' => 'Kada kawa mahunggah barakas ngini karana Internet Explorer manangguh ngini sawagai "$1", nang kada dibulihakan wan samacam barakas babahaya.', +'filetype-unwanted-type' => "'''\".\$1\"''' adalah samacam barakas nagn kada dihandaki. +Dikatujui {{PLURAL:\$3|macam barakas|mamacam barakas}} \$2.", +'filetype-missing' => 'Barakas kada baisi ekstensi (nangkaya ",jpg").', +'empty-file' => 'Barakas nang Pian buatakan puang.', +'file-too-large' => 'Barakas nang Pian buatakan kaganalan.', +'filename-tooshort' => 'Ngaran barakas kahandapan.', +'filetype-banned' => 'Macam barakas ini ditangati.', +'verification-error' => 'Barakas nangini kada lulus paitihan.', +'hookaborted' => 'Parubahan nang Pian cuba ulah sudah digagalakan ulih unjun ekstensi.', +'illegal-filename' => 'Ngaranbarakas kada dibulihakan.', +'overwrite' => 'Manindih tulis sabuah barakas nang ada kada dibulihakan.', +'unknown-error' => 'Kasalahan kada dipinandui tajadi.', +'tmp-create-error' => 'Kada kawa maulah barakas pahadangan.', +'tmp-write-error' => 'Kasalahan sawaktu manulis barakas pahadangan.', +'large-file' => 'Disaranakan babarakas kada tapanjang pada $1; +barakas ngini $2.', +'largefileserver' => 'Barakas ngini taganal pada nang dibulihakan server.', +'emptyfile' => 'Barakas nang Pian hunggah kusung pinanya, +Ngini pinanya ada salah katik ngaran barakas. +Muhun pariksa apa bubujuran Pian handak mahunggah barakas ngini.', +'fileexists' => "Sabuah barakas bangaran ngin sudah ada, muhun pariksa '''[[:$1]]''' amun Pian kada musti amun Pian handak mangganti ngini. +[[$1|thumb]]", +'filepageexists' => "Tungkaran diskripsi gasan barakas ngini suda diulah di '''[[:$1]]''', tagal kadada barakas bangaran ngini tasadia. +Kasimpulan nang Pian masukakan kada ham cungul pada tungkran diskripsi. +Hagan maulah kasimpulan Pian cungul di sana, Pian musti mambabaknya manual. +[[$1|thumb]]", +'fileexists-extension' => "Sabuah barakas bangaran sama sudah tasadia: [[$2|thumb]] +*Ngaran barakas hunggahan: '''[[:$1]]''' +* Ngaran barakas sudah tasadia: '''[[:$2]]''' +Muhun pilihi sabuah ngaran babida.", +'fileexists-thumbnail-yes' => "Barakas ngini kajanakannya sabuah pancitraan nang dihalusi takarannya ''(thumbnail)''. +[[$1|thumb]] +Muhun pariksa barakas '''[[:$1]]'''. +Amun barakas dipariksa sama awan pancitraan takaran aslinya kada parlu mahunggah sabuah tambahan thumbnail.", +'file-thumbnail-no' => "Ngaran barakas bamula awan '''$1'''. +Ngini kajanakannya sabuah pancitraan nang dihalusi takaran ''(thumbnail)''. +Amun Pian baisi pancitraan ngini barisulusi hibak hunggah nang ngini, amun kada muhun ubah ngaran barakas.", +'fileexists-forbidden' => 'Sabuah barakas bangaran sama sudah tasadia, wan kada kawa ditindihtulis. +Amun Pian handak jua mahunggah barakas Pian, muhun babulik wan puruk sabuah ngaran hanyar. +[[File:$1|thumb|center|$1]]', +'fileexists-shared-forbidden' => 'Sabuah barakas bangaran ngini sudah tasadia di repositori barakas babagi +Amun Pian handak jua mahunggah barakas Pian, muhun babulik wan puruk sabuah ngaran hanyar. +[[File:$1|thumb|center|$1]]', +'file-exists-duplicate' => 'Barakas ngini adalah sabuah duplikat matan {{PLURAL:$1|barakas|babarakas}} barikut:', +'file-deleted-duplicate' => 'Sabuah barakas identik awan barakas ngini ([[:$1]]) suah dihapus sabalumnya. +Pian musti mamariksa halam pahapusan barakas ngitu hanyar manarusakan mahunggah pulang ngini.', +'uploadwarning' => 'Paringatan hunggah', +'uploadwarning-text' => 'Muhun mangganti katarangan barakas di bawah wan cubai pulang.', +'savefile' => 'Simpan barakas', +'uploadedimage' => 'mamuat "[[$1]]"', +'overwroteimage' => 'mahunggah sabuah pérsi hanyar matan "[[$1]]"', +'uploaddisabled' => 'Pahunggahan dipajahakan.', +'copyuploaddisabled' => 'Hunggah lawan URL pajah.', +'uploadfromurl-queued' => "Pahunggahan Pian sudah ba'antri.", +'uploaddisabledtext' => 'Hunggah barakas kada kawa.', +'php-uploaddisabledtext' => 'Mahunggah barakas di PHP dipajahakan. +Muhun pariksa setelan file_uploads.', +'uploadscripted' => 'Barakas ngini mangandung HTML atawa kudi script nang kawa ditarjamahakan tasalah ulih sabuah panjalajah web.', +'uploadvirus' => 'Barakas baisi pirus! +Ririncian: $1', +'upload-source' => 'Asal mula barakas', +'sourcefilename' => 'Ngaranbarakas asal mula:', +'sourceurl' => 'Asal mula URL:', +'destfilename' => 'Ngaranbarakas tujuan:', +'upload-maxfilesize' => 'Takaran barakas maksimum: $1', +'upload-description' => 'Diskripsi barakas', +'upload-options' => 'Pilihan hunggah', +'watchthisupload' => 'Itihi barakas ini', +'filewasdeleted' => 'Sabuah barakas bangaran ngini suah dihunggah wan abis tu dihapus. +Pian musti pariksa $1 hanyar mahunggah ngini pulang.', +'upload-wasdeleted' => "'''Paringatan: Pian mahunggah sabuah barakas nang suah dihapus.''' + +Pian partimbangakan dahulu sasuaikah hagan manarusakan pahunggahan barakas ngini. +Log pahapusan gasan barakas ngini disadiakan di sia:", +'filename-bad-prefix' => "Ngaran barakas nang Pian hunggah bamula lawan '''\"\$1\"''', nang lainan-ngaran diskriptip biasanya utumatis dibari ulih kudakan digital. +Muhun pilih ngaran labih diskriptip lain gasan barakas Pian.", +'upload-success-subj' => 'Kulihan mahunggah', +'upload-success-msg' => 'Hunggahan Pian matan [$2] ruhui. Ngini tasadia di sia: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Hunggah bamasalah', +'upload-failure-msg' => 'Ada sabauah masalah tadi tu pas Pian hunggah matan [$2]: +$1', +'upload-warning-subj' => 'Paringatan mahunggah', +'upload-warning-msg' => 'Ada masalah lawan hunggahan Pian matan [$2]. Pian bulih babulik ka [[Special:Upload/stash/$1|purmulir hunggah]] hagan mambujuri masalah ngini.', + +'upload-proto-error' => 'Protokol kada bujur', +'upload-proto-error-text' => 'Hunggahan rimut parlu URL bamula lawan http:// atawa ftp://.', +'upload-file-error' => 'Kasalahan di dalam', +'upload-file-error-text' => 'Sabuah kasalahan dalam tajadi wayah mancubai maulah sabuah barakas samantara dalam server. +Muhun kiau saurang [[Special:ListUsers/sysop|pambakal]].', +'upload-misc-error' => 'Tasalah buat nang kada dipinandui', +'upload-misc-error-text' => 'Nyunyuk kada dikatahui tajadi pas mahunggah. +Muhun pastiakan URL sah wan kawa diuangkai wan cubai pulang. +Amun masih haja bamasalah, kiau saurang [[Special:ListUsers/sysop|pambakal]].', +'upload-too-many-redirects' => 'URL mangandung kabanyakan paugahan.', +'upload-unknown-size' => 'Ukuran kada dikatahui', +'upload-http-error' => 'Sabuah kasalahan HTTP tajadi: $1', + +# img_auth script messages +'img-auth-accessdenied' => 'Ungkaian ditolak', +'img-auth-nopathinfo' => 'PATH_INFO hilang. +Server Pian kada disetel hagan malimpatakan panjalasan ngini. +Ngini karana CGI-based wan kada manyukung img_auth. +Janaki http://www.mediawiki.org/wiki/Manual:Image_Authorization.', +'img-auth-notindir' => "Jalur nang diminta kada ta'atur lawan direktori hunggahan.", +'img-auth-badtitle' => 'Kada kawa mambangun sabuah judul sah matan "$1".', +'img-auth-nologinnWL' => 'Pian kada kawa babuat log wan \'$1" kadada dalam daptar putih.', +'img-auth-nofile' => 'Barakas "$1" kadada.', +'img-auth-isdir' => 'Pian mancuba hagan maungkai sabuah direktori "$1". +Hanya maungkai barakas dibulihakan.', +'img-auth-streaming' => 'Streaming "$1".', +'img-auth-public' => 'Pungsi img_auth.php mangaluarakan babarakas matan sabuah wiki paribadi. +Wiki ngini diatur sawagai wiki umum. +Gasan kaamanan baik, img_auth.php dipajahakan.', +'img-auth-noread' => 'Pamuruk kada baisi hak ungkai hagan mambaca "$1".', +'img-auth-bad-query-string' => 'URL baisi sabuah string kueri kada sah.', + +# HTTP errors +'http-invalid-url' => 'URL kada sah: $1', +'http-invalid-scheme' => 'URL lawan skema "$1" kada disukung.', +'http-request-error' => 'Parmintaan HTTP gagal karana kasalah kada dikatahui.', +'http-read-error' => 'Kasalahan baca HTTP.', +'http-timed-out' => 'Parmintaan HTTP habis wayahnya.', +'http-curl-error' => 'Kasalahan pas maambil URL: $1', +'http-host-unreachable' => 'Kada kawa mancapai URL.', +'http-bad-status' => 'Ada sabuah masalah pas maminta HTTP: $1 $2', + +# Some likely curl errors. More could be added from +'upload-curl-error6' => 'Kada kawa mancapai URL.', +'upload-curl-error6-text' => 'URL tasadia kada kawa dicapai. +Muhun pariksa ganda bahwasa URL bujur wan situs nyala.', +'upload-curl-error28' => 'Wayah pahunggahan habis', +'upload-curl-error28-text' => 'Situs ngini kalawasan mananggapi. +Muhun pariksa manyalakah situs ngini, hadangi satumat wan cubai pulang. +Pian amun handak cubai pas wayah kada tapi haur.', + +'license' => 'Lisensi:', +'license-header' => 'Lisensi', +'nolicense' => 'Kadada mamilih', +'license-nopreview' => '(titilikan kada tasadia)', +'upload_source_url' => '(sabuah URL sah umum nang kawa diungkai)', +'upload_source_file' => '(sabuah barakas pada kumputir Pian)', + +# Special:ListFiles +'listfiles-summary' => "Tungkaran istimiwa ngini manampaiakan samunyaan barakas hunggahan. +Baku babarakas hunggahan ta'uncit ditampaiakan di puncak daptar. +Sabuah klik pada sabuah kolum kapalaan hagan maubah surtiran urut.", +'listfiles_search_for' => 'Gagai ngaran barakas:', +'imgfile' => 'barakas', +'listfiles' => 'Daptar barakas', +'listfiles_thumb' => 'Pahalusan', +'listfiles_date' => 'Tanggal', +'listfiles_name' => 'Ngaran', +'listfiles_user' => 'Pamuruk', +'listfiles_size' => 'Ukuran', +'listfiles_description' => 'Pamaparan', +'listfiles_count' => 'Janis', + +# File description page +'file-anchor-link' => 'Barakas', +'filehist' => 'Barakas halam', +'filehist-help' => 'Klik pada tanggal/waktu gasan maniringi barakas ini pada wayah itu.', +'filehist-deleteall' => 'hapus samunyaan', +'filehist-deleteone' => 'hapus', +'filehist-revert' => 'bulikakan', +'filehist-current' => 'daminian', +'filehist-datetime' => 'Tanggal/Waktu', +'filehist-thumb' => 'Pahalusan', +'filehist-thumbtext' => 'Pahalusan gasan bantuk per $1', +'filehist-nothumb' => 'Kadada thumbnail', +'filehist-user' => 'Pamuruk', +'filehist-dimensions' => 'Matra', +'filehist-filesize' => 'Ukuran barakas', +'filehist-comment' => 'Ulasan', +'filehist-missing' => 'Barakas hilang', +'imagelinks' => 'Tautan barakas', +'linkstoimage' => '{{PLURAL:$1|tautan tungkaran|$1 tautan tungkaran}} dudi ka barakas ini:', +'linkstoimage-more' => 'Labihan pada $1 {{PLURAL:$1|tatautan tungkaran|tautan tutungkaran}} ka barakas ngini. +Daptar barikut manampaiakan {{PLURAL:$1|tautan panambaian tungkaran|$1 panambaian tatautan tungkaran}} ka barakas ngini haja. +Sabuah [[Special:WhatLinksHere/$2|daptar hibak]] tasadia.', +'nolinkstoimage' => 'Kadada tutungkaran nang bataut ka barakas ngini.', +'morelinkstoimage' => 'Tiringi [[Special:WhatLinksHere/$1|tautan lagi]] ka barakas ngini.', +'redirectstofile' => 'Barakas barikut {{PLURAL:$1|diugahakan|$1 diugahakan}} ka barakas ngini:', +'sharedupload' => 'Barakas ini matan $1 wan mungkin dipuruk rangka-rangka gawian lain.', +'filepage-nofile' => 'Kadada barakas bangaran ngini.', +'filepage-nofile-link' => 'Kadada barakas bangaran ngini tasadia, tagal Pian kawa [$1 mahunggah ngini].', +'uploadnewversion-linktext' => 'Buatakan bantuk nang labih hanyar matan barakas ini', +'shared-repo-from' => 'matan $1', +'shared-repo' => 'suatu repositori basama', + +# File reversion +'filerevert' => 'Bulikakan $1', +'filerevert-legend' => 'Bulikakan barakas', +'filerevert-intro' => "Pian mambulikakan '''[[Media:$1|$1]]''' ka macam [$4 pada $3, $2].", +'filerevert-comment' => 'Alasan:', +'filerevert-defaultcomment' => 'Dibulikakan ka macam pada $2, $1', +'filerevert-submit' => 'Bulikakan', +'filerevert-success' => "'''[[Media:$1|$1]]''' sudah dibulikakan ka macam [$4 pada $3, $2]", +'filerevert-badversion' => 'Kadada janis lokal bahari tumatan barakas ini lawan bacap waktu nang dimaksud.', + +# File deletion +'filedelete' => 'Mahapus $1', +'filedelete-legend' => 'Hapus barakas', +'filedelete-intro' => "Pian huwal mahapus barakas '''[[Media:$1|$1]]''' awan barataan halamnya.", +'filedelete-intro-old' => "Pian mahapus pirsi matan '''[[Media:$1|$1]]''' sawagai matan [$4 $3, $2].", +'filedelete-comment' => 'Alasan:', +'filedelete-submit' => 'Hapus', +'filedelete-success' => "'''$1''' sudah tahapus.", +'filedelete-success-old' => "Pirsi matan '''[[Media:$1|$1]]''' sawagai matan $3, $2 sudah tahapus.", +'filedelete-nofile' => "'''$1''' kadada.", +'filedelete-nofile-old' => "Kadada arsip pirsi matan '''$1''' lawan atribut diajuakan.", +'filedelete-otherreason' => 'Alasan lain/tambahan:', +'filedelete-reason-otherlist' => 'Alasan nang lain', +'filedelete-reason-dropdown' => '*Alasan pahapusan +** Palanggaran hak cipta +** Barakas duplikat', +'filedelete-edit-reasonlist' => 'Aalasan pahapusan babakan', + +# MIME search +'mimesearch' => 'Panggagaian MIME', +'mimetype' => 'Macam MIME', +'download' => 'hunduh', + +# Unwatched pages +'unwatchedpages' => 'Tungkaran nang kada diitihi', + +# List redirects +'listredirects' => 'Daptar paugahan', + +# Unused templates +'unusedtemplates' => 'Citakan nang kada dipuruk', +'unusedtemplatestext' => "Daptar barikut adalah samua tungkaran pada ngaran kamar {{ns:template}} nang kada dipuruk di tungkaran manapun. +Pariksa 'hulu tautan lain ka citakan itu sabalum mahapusnya.", +'unusedtemplateswlh' => 'tautan lain', + +# Random page +'randompage' => 'Tungkaran babarang', +'randompage-nopages' => 'Kadada tungkaran pada {{PLURAL:$2||}}kamar ngaran ini: $1.', + +# Random redirect +'randomredirect' => 'Paugahan babarang', +'randomredirect-nopages' => 'Kada tadapat paugahan pada ngaran kamar "$1".', + +# Statistics +'statistics' => 'Statistik', +'statistics-header-pages' => 'Statistik tungkaran', +'statistics-header-edits' => 'Statistik babakan', +'statistics-header-views' => 'Statistik panampaian', +'statistics-header-users' => 'Statistik pamuruk', +'statistics-header-hooks' => 'Statistik lainnya', +'statistics-articles' => 'Tungkaran isi', +'statistics-pages' => 'Jumlah tungkaran', +'statistics-pages-desc' => 'Sabarataan tungkaran di wiki ini, tamasuk tungkaran pamandiran, paugahan, wan lain-lain.', +'statistics-files' => 'Barakas nang dihunggahakan', +'statistics-edits' => 'Jumlah babakan tumatan {{SITENAME}} dimulai', +'statistics-edits-average' => 'Rata-rata babakan par tungkaran', +'statistics-views-total' => 'Jumlah panampaian tungkaran', +'statistics-views-peredit' => 'Jumlah panampaian par babakan', +'statistics-users' => 'Jumlah [[Special:ListUsers|pamuruk tadaptar]]', +'statistics-users-active' => 'Jumlah pamuruk aktip', +'statistics-users-active-desc' => 'Pamuruk nang sudah malakukan suatu aksi dalam {{PLURAL:$1|sahari|$1 hari}} tauncit.', +'statistics-mostpopular' => 'Tungkaran nang paling banyak ditampaiakan', + +'doubleredirects' => 'Paugahan ganda', +'double-redirect-fixed-move' => '[[$1]] sudah dipindahakan. +Ngini wayah ini sudah diugahakan ka [[$2]].', +'double-redirect-fixer' => 'Pambaiki paugahan', + +'brokenredirects' => 'Papaugahan pagat', +'brokenredirectstext' => 'Tautan paugahab barikut manuju ka tutungkaran non-tasadia:', +'brokenredirects-edit' => 'babak', +'brokenredirects-delete' => 'hapus', + +'withoutinterwiki' => 'Tutungkaran kada batatautan bahasa', +'withoutinterwiki-summary' => 'Tutungkaran barikut kada batautan ka pipirsi bahasa lain.', +'withoutinterwiki-legend' => 'Mulaan', +'withoutinterwiki-submit' => 'Tampaiakan', + +'fewestrevisions' => 'Tutungkaran lawanan raralatan pandikitnya.', + +# Miscellaneous special pages +'nbytes' => '$1 {{PLURAL:$1|bit|bit}}', +'ncategories' => '{{PLURAL:$1|tumbung|tutumbung}}', +'nlinks' => '$1 {{PLURAL:$1|tautan|tautan}}', +'nmembers' => '$1 {{PLURAL:$1|angguta|angguta}}', +'nrevisions' => '$1 {{PLURAL:$1|ralatan|raralatan}}', +'nviews' => 'dilihat $1 {{PLURAL:$1|kali|kali}}', +'nimagelinks' => "Diguna'akan pada $1 {{PLURAL:$1|tungkaran|tutungkaran}}", +'ntransclusions' => 'dipuruk pada $1 {{PLURAL:$1|tungkaran|tutungkaran}}', +'specialpage-empty' => 'Kadada kulihan gasan lapuran ngini.', +'lonelypages' => 'Tutungkaran yatim', +'lonelypagestext' => 'Tutungkaran barikut kada bataut matab atawa ditranklusi ka dalam tutungkaran lain pada {{SITENAME}}.', +'uncategorizedpages' => 'Tutungkaran kada batumbung', +'uncategorizedcategories' => 'Tutumbung kada batumbung', +'uncategorizedimages' => 'Babarakas kada batumbung', +'uncategorizedtemplates' => 'Cicitakan kada batumbung', +'unusedcategories' => 'Tutumbung kada tapuruk', +'unusedimages' => 'Babarakas kada tapuruk', +'popularpages' => 'Tutungkaran populir', +'wantedcategories' => 'Tutumbung naang dihandaki', +'wantedpages' => 'Tutungkaran nang dihandaki', +'wantedpages-badtitle' => 'Judul kada sah dalam setelan kulihan: $1', +'wantedfiles' => 'Babarakas nang dihandaki', +'wantedtemplates' => 'Cicitakan nang dihandaki', +'mostlinked' => 'Tutungkaran tatuju tautan pambanyaknya', +'mostlinkedcategories' => 'Tutumbung tatuju tautan pambanyaknya', +'mostlinkedtemplates' => 'Cicitakan tatuju tautan pambanyaknya', +'mostcategories' => 'Tutungkaran lawan pambanyaknya tutumbung', +'mostimages' => 'Babarakas tatuju tautan pambanyaknya', +'mostrevisions' => 'Tutungkaran lawan raralatan pambnyaknya', +'prefixindex' => 'Samunyaan tungkaran wan awalan', +'shortpages' => 'tutungkaran handap', +'longpages' => 'Tutungkaran panjang', +'deadendpages' => 'Tutungkaran buntu', +'deadendpagestext' => 'Tutungkaran barikut kada bataut ka tutungkaran lain pada {{SITENAME}}.', +'protectedpages' => 'Tutungkaran nang dilindungi', +'protectedpages-indef' => 'Parlindungan kada bawatas haja', +'protectedpages-cascade' => 'Parlindungan barenteng haja', +'listusers' => 'Daptar pamuruk', +'listusers-editsonly' => 'Tiringi papamuruk awan babakan', +'listusers-creationsort' => 'Susun ulih tanggal paulahan', +'usereditcount' => '$1 {{PLURAL:$1|babakan|bababakan}}', +'usercreated' => 'Diulah pada $1, $2', +'newpages' => 'Tungkaran hanyar', +'newpages-username' => 'Ngaran pamuruk:', +'ancientpages' => 'Tutungkaran panuhanya', +'move' => 'Pindahakan', +'movethispage' => 'Pindahakan tungkaran ini', +'notargettitle' => 'Kadada tujuan', +'pager-newer-n' => '{{PLURAL:$1|tahanyar 1|tahanyar $1}}', +'pager-older-n' => '{{PLURAL:$1|talawas 1|talawas $1}}', + +# Book sources +'booksources' => 'Buku bamula', +'booksources-search-legend' => 'Gagai gasan buku asal mula', +'booksources-go' => 'Tulak ka', + +# Special:Log +'specialloguserlabel' => 'Pamuruk:', +'speciallogtitlelabel' => 'Judul:', +'log' => 'Log', +'all-logs-page' => 'Samunyaan log umum', + +# Special:AllPages +'allpages' => 'Samunyaan tungkaran', +'alphaindexline' => '$1 sampai $2', +'nextpage' => 'Tungkaran salanjutnya ($1)', +'prevpage' => 'Tungkaran sabalumnya ($1)', +'allpagesfrom' => 'Manampaiakan tungkaran mulai matan:', +'allpagesto' => 'Manampaiakan ujung pahabisan tungkaran:', +'allarticles' => 'Samunyaan tungkaran', +'allinnamespace' => 'Sabarataan tutungkaran (ngaran-kamar $1)', +'allnotinnamespace' => 'Sabarataan tutungkaran (lainan di ngaran-kamar $1)', +'allpagesprev' => 'Sabalumnya', +'allpagesnext' => 'Dudi', +'allpagessubmit' => 'Tulak', +'allpagesprefix' => 'Tampilakan tutungkaran bamula lawan:', + +# Special:Categories +'categories' => 'Tutumbung', +'special-categories-sort-count' => 'susun ulih rikinan', +'special-categories-sort-abc' => 'susun abjad', + +# Special:DeletedContributions +'deletedcontributions' => 'Hapus sumbangan pamuruk', +'deletedcontributions-title' => 'Hapus sumbangan pamuruk', +'sp-deletedcontributions-contribs' => 'Sumbangan', + +# Special:LinkSearch +'linksearch' => 'Tautan luar', +'linksearch-pat' => 'Gagai bapola:', +'linksearch-ns' => 'Ngaran-kamar:', +'linksearch-ok' => 'Gagai', +'linksearch-line' => '$1 ditautakan matan $2', + +# Special:ListUsers +'listusersfrom' => 'Manampaiakan papamuruk mulai matan:', +'listusers-submit' => 'Tampaiakan', +'listusers-noresult' => 'Kadada pamuruk tatamu.', +'listusers-blocked' => '(diblukir)', + +# Special:ActiveUsers +'activeusers' => 'Daptar pamuruk aktip', +'activeusers-intro' => 'Ngini adalah sabuah daptar papamuruk sabuah bantuk kagiatan dalam tauncit $1 {{PLURAL:$1|hari|hahari}}.', +'activeusers-count' => '$1 {{PLURAL:$1|babak|babakan}} dalam tauncit {{PLURAL:$3|hari|$3 hahari}}', +'activeusers-from' => 'Manampaiakan papamuruk mulai matan:', +'activeusers-hidebots' => 'Sungkupakan bot', +'activeusers-hidesysops' => 'Sungkupakan pambakal', +'activeusers-noresult' => 'Kadada papamuruk tatamu.', + +# Special:Log/newusers +'newuserlogpage' => 'Log pamuruk hanyar', +'newuserlogpagetext' => 'Ngini adalah sabuah log paulahan pamuruk.', +'newuserlog-byemail' => 'Katasunduk dikirimakan lung suril.', +'newuserlog-create-entry' => 'mandaptar sabagai pamuruk', +'newuserlog-create2-entry' => 'Maulah akun hanyar $1', +'newuserlog-autocreate-entry' => 'Akun diulah utumatis', + +# Special:ListGroupRights +'listgrouprights' => 'Galambang hak pamuruk', +'listgrouprights-key' => '* Hak nang balaku +* Hak nang dicukut', +'listgrouprights-group' => 'Galambang', +'listgrouprights-rights' => 'Hak', +'listgrouprights-helppage' => 'Help:Galambang hak', +'listgrouprights-members' => '(daptar angguta)', +'listgrouprights-addgroup' => 'Tambahi {{PLURAL:$2|galambang|gagalambang}}: $1', +'listgrouprights-removegroup' => 'Hapus {{PLURAL:$2|galambang|gagalambang}}: $1', +'listgrouprights-addgroup-all' => 'Tambahi samunyaan gagalambang', +'listgrouprights-removegroup-all' => 'Hapus samunyaan gagalambang', +'listgrouprights-addgroup-self' => 'Tambahi {{PLURAL:$2|galambang|gagalambang}} ka akun surang: $1', +'listgrouprights-removegroup-self' => 'Hapus {{PLURAL:$2|galambang|gagalambang}} matan akun surang: $1', +'listgrouprights-addgroup-self-all' => 'Tambahi samunyaan gagalambang ka akun surang', +'listgrouprights-removegroup-self-all' => 'Hapus samunyaan gagalambang matan akun surang', + +# E-mail user +'mailnologin' => 'Kadada alamat kirim', +'emailuser' => 'Surel pamuruk', +'emailpage' => 'Surili pamuruk', +'usermailererror' => 'Objek surat ada kasalahan dibulikakan:', +'defemailsubject' => 'Suril {{SITENAME}}', +'usermaildisabled' => 'Suril pamuruk dipajahakan', +'usermaildisabledtext' => 'Pian kada kawa mangirim suril ka papamuruk lain di wiki ngini', +'noemailtitle' => 'Kadada alamat suril', +'noemailtext' => 'Pamuruk ngini kada baisi sabuah alamat suril sah nang diajuakan.', +'nowikiemailtitle' => 'Kadada suril dibulihakan.', +'nowikiemailtext' => 'Pamuruk ngini sudah mamilih kada manarima suril matan papamuruk lain.', +'email-legend' => 'Kirimi sabuah suril ka pamuruk {{SITENAME}} lain', +'emailfrom' => 'Matan:', +'emailto' => 'Hagan:', +'emailsubject' => 'Parihal:', +'emailmessage' => 'Pasan:', +'emailsend' => 'Kirim', +'emailccme' => 'Surili ulun sabuah salinan pasan ulun.', +'emailccsubject' => 'Salinan pasan Pian hagan: $1: $2', +'emailsent' => 'Suril takirim', +'emailsenttext' => 'Suril pasan Pian sudah takirim.', +'emailuserfooter' => 'Suril ngini dikirim ulih $1 hagan $2 lung pungsi "Suril pamuruk" pada {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Tinggalakan sistim pasan.', +'usermessage-editor' => ' Sistim panyampai pasan', + +# Watchlist +'watchlist' => 'Daptar itihan ulun', +'mywatchlist' => 'Daptar itihan ulun', +'watchlistfor2' => 'Gasan $1 $2', +'nowatchlist' => 'Pian kada baisi apa pun pada daptar itihan Pian.', +'watchlistanontext' => 'Muhun $1 hagan maniringi atawa mambabak nang dalam daptar itihan Pian.', +'watchnologin' => 'Baluman babuat log', +'watchnologintext' => 'Pian musti [[Special:UserLogin|babuat log]] amun handak magaganti daptar itihan Pian.', +'addedwatch' => 'Sudah ditambahakan ka daptar itihan', +'addedwatchtext' => "Tungkaran \"[[:\$1]]\" sudah ditambahakan ke [[Special:Watchlist|daptar itihan]] Pian. +Parubahan-parubahan salanjutnya pada tungkaran ini dan tungkaran pamandiran taraitnya akan takambit di sia, wan tungkaran itu akan ditampaiakan '''kandal''' pada [[Special:RecentChanges|daptar parubahan tahanyar]] cagar labih mudah diitihi.", +'removedwatch' => 'Sudah dibuang matan daptar itihan', +'removedwatchtext' => 'Tungkaran "[[:$1]]" sudah dihapus matan [[Special:Watchlist|daptar itihan]] Pian.', +'watch' => 'Itih', +'watchthispage' => 'Itihi tungkaran ini', +'unwatch' => 'walang maitihi', +'unwatchthispage' => 'Mandak maitihi', +'notanarticle' => 'Lainan sabuah tungkaran isi', +'notvisiblerev' => 'Ralatan tauncit ulih saurang pamuruk babida sudah dihapus', +'watchlist-details' => '{{PLURAL:$1|$1 tungkaran|$1 tungkaran}} dalam daptar itihan Pian, kada mahitung tungkaran pamandiran.', +'wlheader-enotif' => 'Suril pamadahan dipajahi.', +'wlshowlast' => 'Tampaiakan $1 jam $2 hari pahabisan $3', +'watchlist-options' => 'Pilihan daptar itihan', + +# Displayed when you click the "watch" button and it is in the process of watching +'watching' => 'Maitihi...', +'unwatching' => 'Kada jadi maitihi...', + +'enotif_mailer' => 'Panyurili pamadahan {{SITENAME}}', +'enotif_reset' => 'Tandai samunyaan tutungkaran sudah diilangi', +'enotif_newpagetext' => 'Ngini adalah sabuah tungkaran hanyar.', +'enotif_impersonal_salutation' => 'Pamuruk {{SITENAME}}', +'changed' => "ta'ubah", +'created' => "ta'ulah", +'enotif_lastvisited' => 'Janaki $1 gasan samunyaan parubahan mula Pian pauncitan tadi bailang.', +'enotif_lastdiff' => 'Janaki $1 hagaan maniringi parubahan ngini.', + +# Delete +'deletepage' => 'Hapus tungkaran', +'confirm' => 'Yakinakan', +'excontent' => "isi sabalumnya: '$1'", +'excontentauthor' => "isinya: '$1' haja (wan aasaannya panyumbang adalah '[[Special:Contributions/$2|$2]]')", +'exbeforeblank' => "isi sabalum dikusungakan: '$1'", +'exblank' => 'tungkaran dikusungakan', +'delete-confirm' => 'Hapus "$1"', +'delete-legend' => 'Hapus', +'confirmdeletetext' => 'Pian handak mahapus sabuah tungkaran awan samunyaan halamnya. +Muhun mamastiakan amun Pian handak manggawi ini, bahwasa Pian paham akibatnya, wan apa nang Pian gawi ini sasuai awan [[{{MediaWiki:Policy-url}}|kabijakan {{SITENAME}}]].', +'actioncomplete' => 'Pangulahan tuntung', +'deletedtext' => '"$1" sudah tahapus. Lihati $2 sabuah rakaman gasan nang hanyar ni tahapus.', +'deletedarticle' => 'mahapus "[[$1]]"', +'dellogpage' => 'Log pahapusan', +'deletionlog' => 'log pahapusan', +'deletecomment' => 'Alasan:', +'deleteotherreason' => 'Alasan lain/tambahan:', +'deletereasonotherlist' => 'Alasan lain', + +# Rollback +'rollbacklink' => 'bulikakan', +'alreadyrolled' => 'Kada kawa malakukan pambulikan ka ralatan tauncit [[:$1]] ulih [[User:$2|$2]] ([[User talk:$2|pandir]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); +pamuruk lain sudah mambabak atawa malakukan pambulikan lawan tungkaran ini. + +Babakan tauncit dilakukan ulih [[User:$3|$3]] ([[User talk:$3|pandir]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).', +'editcomment' => "Kumintar pambabakan adalah: \"''\$1''\".", +'revertpage' => '←Babakan [[Special:Contributions/$2|$2]] ([[User talk:$2|pandir]]) dibulikakan ka ralatan tauncit ulih [[User:$1|$1]]', +'revertpage-nouser' => 'Pambulikan babakan ulih (pamuruk dihapus) ka babakan tauncit ulih [[User:$1|$1]]', + +# Protect +'protectlogpage' => 'Log palindungan', +'protectedarticle' => "malindungi ''[[$1]]''", +'modifiedarticleprotection' => 'maubah tingkat perlindungan "[[$1]]"', +'unprotectedarticle' => 'mahilangakan palindungan "[[$1]]"', +'movedarticleprotection' => 'mamindahakan pangaturan protéksi matan "[[$2]]" ka "[[$1]]"', +'protect-title' => 'Malindungi "$1"', +'prot_1movedto2' => '[[$1]] dipindahakan ka [[$2]]', +'protect-legend' => 'Konpirmasi palindungan', +'protectcomment' => 'Alasan:', +'protectexpiry' => 'Kadaluwarsa:', +'protect_expiry_invalid' => 'Waktu kadaluwarsa kada sah.', +'protect_expiry_old' => 'Waktu kadaluwarsa adalah pada masa bahari.', +'protect-text' => "Pian kawa maniring atawa mangganti tingkatan parlindungan gasan tungkaran '''$1''' di sia.", +'protect-locked-access' => "Akun Pian kada baisi ijin gasan maubah tingkatan palindungan tungkaran. +Di sia adalah pangaturan wayah ini gasan tungkaran '''$1''':", +'protect-cascadeon' => 'Tungkaran ini rahatan dilindungi lantaran diumpatakan dalam {{PLURAL:$1|tungkaran|tungkaran-tungkaran}} barikut nang sudah aktip palindungan barénténgnya. +Pian kawa maubah tingkatan palindungan gasan tungkaran ini, tagal ini kada pacang mangaruhi palindungan barénténg.', +'protect-default' => 'Bulihakan samua pamuruk', +'protect-fallback' => 'Mamarluakan ijin "$1"', +'protect-level-autoconfirmed' => 'Blukir pamuruk hanyar wan kada tadaptar', +'protect-level-sysop' => 'Hanya pambakal', +'protect-summary-cascade' => 'barénténg', +'protect-expiring' => 'kadaluwarsa $1 (UTC)', +'protect-expiry-indefinite' => 'kada bawatas', +'protect-cascade' => 'Lindungi tungkaran-tungkaran nang tamasuk dalam tungkaran ini (palindungan barénténg)', +'protect-cantedit' => 'Pian kada kawa maubah tingkatan parlindungan tungkaran ini karana Pian kada baisi hak gasan itu.', +'protect-othertime' => 'Wayah lain:', +'protect-othertime-op' => 'wayah lain', +'protect-existing-expiry' => 'Wayah kadaluwarsa nang ada: $2, $3', +'protect-otherreason' => 'Alasan lain/tambahan:', +'protect-otherreason-op' => 'Alasan nang lain', +'protect-edit-reasonlist' => 'Aalasan parlindungan babakan', +'protect-expiry-options' => '1 jam:1 hour,1 hari:1 day,1 minggu:1 week,2 minggu:2 weeks,1 bulan:1 month,3 bulan:3 months,6 bulan:6 months,1 tahun:1 year,salawasan:infinite', +'restriction-type' => 'Parijinan:', +'restriction-level' => 'Tingkatan hinggan:', +'minimum-size' => 'Ukuran minimum', +'maximum-size' => 'Ukuran maksimum', +'pagesize' => '(bita)', + +# Restrictions (nouns) +'restriction-edit' => 'Babak', +'restriction-move' => 'Pindahakan', +'restriction-create' => 'Ulah', +'restriction-upload' => 'Unggah', + +# Restriction levels +'restriction-level-sysop' => 'palindungan hibak', +'restriction-level-autoconfirmed' => '(semi-dilindungi)', +'restriction-level-all' => 'samunyaan tingkatan', + +# Undelete +'undelete' => 'Tiringi tutungkaran tahapus', +'undeletepage' => 'Tiringi wan bulikakan tutungkaran tahapus', +'viewdeletedpage' => 'Tiringi tutungkaran tahapus', +'undelete-fieldset-title' => 'Mambulikakan ralatan', +'undeleterevisions' => "$1 {{PLURAL:$1|ralatan|raralatan}} ta'arsip", +'undelete-revision' => 'Ralatan tahapus matan $1 (pada $4, $5) ulih $3:', +'undelete-nodiff' => 'Kadada ralatan sabalumnya tatamu.', +'undeletebtn' => 'Bulikakan', +'undeletelink' => 'tiring/bulikakan', +'undeleteviewlink' => 'tiringi', +'undeletereset' => 'Bulikakan setelan', +'undeleteinvert' => 'Bulikakan pilihan', +'undeletecomment' => 'Alasan:', +'undeletedarticle' => "''[[$1]]'' sudah dibulikakan", +'undeletedrevisions' => '{{PLURAL:$1|1 ralatan|$1 raralatan}} dibulikakan', +'undeletedrevisions-files' => '{{PLURAL:$1|1 ralatan|$1 raralatan}} and {{PLURAL:$2|1 barakas|$2 babarakas}} dibulikakan', +'undeletedfiles' => '$1 {{PLURAL:$1|barakas|babarakas}} dibulikakan', +'cannotundelete' => 'Walang mahapus gagal; +ada urang lain nang badahulu mawalangi pahapusan tungkaran ngini.', +'undelete-header' => 'Janaki [[Special:Log/delete|log pahapusan]] gasan tutungkaran hanyar tahapus.', +'undelete-search-box' => 'Gagai tutungkaran tahapus', +'undelete-search-prefix' => 'Tampaiakan tutungkaran bamula lawan:', +'undelete-search-submit' => 'Gagai', +'undelete-show-file-submit' => 'Iya-ai', + +# Namespace form on various pages +'namespace' => 'Ngaran-kamar:', +'invert' => 'Bulikakan pilihan', +'blanknamespace' => '(Tatambaian)', + +# Contributions +'contributions' => 'Sumbangan pamuruk', +'contributions-title' => 'Sumbangan pamuruk gasan $1', +'mycontris' => 'Sumbangan ulun', +'contribsub2' => 'Gasan $1 ($2)', +'uctop' => ' (atas)', +'month' => 'Matan bulan (wan sabalumnya):', +'year' => 'Matan tahun (wan sabalumnya):', + +'sp-contributions-newbies' => 'Tampaiakan sumbangan pamuruk-pamuruk hanyar haja', +'sp-contributions-newbies-sub' => 'Gasan akun hanyar', +'sp-contributions-newbies-title' => 'Sumbangan pamuruk gasan akun hanyar', +'sp-contributions-blocklog' => 'Log blukir', +'sp-contributions-deleted' => 'Tahapus sumbangan pamuruk', +'sp-contributions-uploads' => 'hunggahan', +'sp-contributions-logs' => 'log', +'sp-contributions-talk' => 'pandir', +'sp-contributions-userrights' => 'pangalulaan hak-hak pamuruk', +'sp-contributions-blocked-notice-anon' => 'Alamat IP ngini parhatan ini diblukir. +Log blukir pahabisannya tasadia di bawah ngini gasan rujukan:', +'sp-contributions-search' => 'Gagai gasan sumbangan', +'sp-contributions-username' => 'Alamat IP atawa ngaran pamuruk:', +'sp-contributions-toponly' => 'Tampaiakan hanya ralatan tauncit', +'sp-contributions-submit' => 'Gagai', + +# What links here +'whatlinkshere' => 'Tautan apa di sia', +'whatlinkshere-title' => "Tungkaran-tungkaran nang batautan ka ''$1''", +'whatlinkshere-page' => 'Tungkaran:', +'linkshere' => "Tungkaran-tungkaran barikut batautan ka '''[[:$1]]''':", +'nolinkshere' => "Kadada tutungkaran tataut ka '''[[:$1]]'''.", +'nolinkshere-ns' => "Kadada tutungkaran tataut ka '''[[:$1]]''' dalam ngaran-kamar nang dipilih.", +'isredirect' => 'tungkaran paugahan', +'istemplate' => 'transklusi', +'isimage' => 'Tautan barakas', +'whatlinkshere-prev' => '$1 {{PLURAL:$1|sabalumnya|sabalumnya}}', +'whatlinkshere-next' => '{{PLURAL:$1|dudi|dudi $1}}', +'whatlinkshere-links' => '← tautan', +'whatlinkshere-hideredirs' => '$1 paugahan', +'whatlinkshere-hidetrans' => '$1 transklusi', +'whatlinkshere-hidelinks' => '$1 tautan', +'whatlinkshere-hideimages' => '$1 tautan pancitraan', +'whatlinkshere-filters' => 'Saringan', + +# Block/unblock +'blockip' => 'Blukir pamuruk', +'blockip-title' => 'Blukir pamuruk', +'blockip-legend' => 'Blukir pamuruk', +'ipadressorusername' => 'Alamat IP atawa ngaran pamuruk:', +'ipbexpiry' => 'Kadaluwarsa:', +'ipbreason' => 'Alasan:', +'ipbreasonotherlist' => 'Alasan nang lain', +'ipbcreateaccount' => 'Tangkal paulahan akun', +'ipbemailban' => 'Tangkal pamuruk mangirimi suril', +'ipbenableautoblock' => 'Utumatis blukir alamat IP tauncit dipuruk ulih pamuruk ngini, wan sabarataan aalamat IP nang cuba dipuruk matan', +'ipbsubmit' => 'Blukir pamuruk ngini', +'ipbother' => 'Wayah lain:', +'ipboptions' => '2 jam:2 hours,1 hari:1 day,3 hari:3 days,1 minggu:1 week,2 minggu:2 weeks,1 bulan:1 month,3 bulan:3 months,6 bulan:6 months,1 tahun:1 year,salawasan:infinite', +'ipbotheroption' => 'lainnya', +'ipbotherreason' => 'Alasan lain/tambahan:', +'ipbhidename' => 'Sungkupakan ngaranpamuruk matan babakan wan dadaptar', +'ipbwatchuser' => 'Itihi tutungkaran pamuruk wan pamandiran pamuruk ngini', +'ipb-change-block' => 'Blukir pulang pamuruk lawan setelan ngingini', +'badipaddress' => 'Alamat IP kada sah', +'blockipsuccesssub' => 'Pamblukiran ruhui', +'ipb-edit-dropdown' => 'Aalasan pamblukiran babakan', +'ipb-unblock-addr' => 'Mahilangakan blukir $1', +'ipb-unblock' => 'Lapas blukir sabuah ngaranpamuruk atawa alamat IP', +'ipb-blocklist' => 'Tiringi blukir nang ada', +'ipb-blocklist-contribs' => 'Sumbangan gasan $1', +'unblockip' => 'Lapas blukir pamuruk', +'ipusubmit' => 'Buang blukir ngini', +'unblocked' => '[[User:$1|$1]] sudah dicabut blukirnya', +'unblocked-id' => 'Blukir $1 sudah dibuang', +'ipblocklist' => 'Pamuruk tablukir', +'ipblocklist-legend' => 'Ugai saurang pamuruk tablukir', +'ipblocklist-submit' => 'Gagai', +'ipblocklist-localblock' => 'Blukir lokal', +'ipblocklist-otherblocks' => '{{PLURAL:$1|pamblukiran|papamblukiran}} lain', +'infiniteblock' => 'Kada bawatas', +'expiringblock' => 'kadaluwarsa pada $1, $2', +'anononlyblock' => 'kadabangaran haja', +'noautoblockblock' => 'pamblukiran utumatis dipajahakan', +'createaccountblock' => 'paulahan akun diblukir', +'emailblock' => 'suril diblukir', +'blocklist-nousertalk' => 'kada kawa mambabak tungkaran pamandiran surang', +'ipblocklist-empty' => 'Daptar pamblukiran kusung.', +'ipblocklist-no-results' => 'Alamat IP nang diminta atawa ngaran pamuruk kada diblukir.', +'blocklink' => 'blukir', +'unblocklink' => 'hilangakan blukir', +'change-blocklink' => 'ubah blukir', +'contribslink' => 'sumbangan', +'blocklogpage' => 'Log blukir', +'blocklogentry' => 'mamblukir [[$1]] sampai wayah $2 $3', +'unblocklogentry' => 'Mahilangakan blukir "$1"', +'block-log-flags-anononly' => 'papamuruk kada bangaran haja', +'block-log-flags-nocreate' => 'Paulahan akun dipajahakan', +'block-log-flags-noautoblock' => 'pamblukiran utumatis dipajahakan', +'block-log-flags-noemail' => 'suril diblukir', +'block-log-flags-nousertalk' => 'kada kawa mambabak tungkaran pamandiran surang', +'block-log-flags-hiddenname' => 'ngaran-pamuruk tasungkup', +'ipb_expiry_invalid' => 'Wayah kadaluwarsa kada sah.', +'ipb_expiry_temp' => 'Pamblukiran ngaran-pamuruk tasungkup musti tatap.', +'ipb_already_blocked' => '"$1" sudah diblukir', +'ipb-otherblocks-header' => '{{PLURAL:$1|pamblukiran|papamblukiran}} lain', +'ip_range_invalid' => 'Jarak IP kada sah.', +'ip_range_toolarge' => 'Jarak blukir taganal pada /$1 kada dibulihakan.', +'blockme' => 'Blokir ulun', +'proxyblocker' => 'Pamblukir pruksi', +'proxyblocker-disabled' => 'Pungsi ngini dipajahakan.', +'proxyblocksuccess' => 'Sudah.', +'sorbsreason' => 'Alamat IP Pian tadaptar sawagai pruksi tabuka dalam DNSBL dipuruk ulih {{SITENAME}}.', +'sorbs_create_account_reason' => 'Alamat IP Pian tadaptar sawagai pruksi tabuka dalam DNSBL dipuruk ulih {{SITENAME}}. +Pian kada kawa maulah sabuah akun', +'cant-block-while-blocked' => 'Pian kada kawa mamblukir pamuruk lain parhatan Pian diblukir.', +'cant-see-hidden-user' => 'Pamuruk nang Pian cuba blukir sudah diblukir wan tasungkup. +Tumatan Pian kada baisi hak mnyungkupakan pamuruk, Pian kada kawa manjanaki atawa mambabak pamblukiran pamuruk.', +'ipbblocked' => 'Pian kada kawa mamblukir atau malapas blukir pamuruk lain, karana Pian surang diblukir', +'ipbnounblockself' => 'Pian kada dibulihakan malapas blukir Pian surang', + +# Developer tools +'lockdb' => 'Sunduk basisdata', +'unlockdb' => 'Lapas sunduk basisdata', +'lockconfirm' => "I'ih, ulun bujuran handak manyunduk basisdata.", +'unlockconfirm' => "I'ih, ulun bujuran handak malapas sunduk basisdata.", +'lockbtn' => 'Sunduk basisdata', +'unlockbtn' => 'Lapas sunduk basisdata', +'locknoconfirm' => 'Pian kada mamariksa kutak payakinan.', +'lockdbsuccesssub' => 'Basisdata ruhui disunduk', +'unlockdbsuccesssub' => 'Sunduk basisdata dibuang', +'unlockdbsuccesstext' => 'Basisdata sudah dilapas sunduknya.', + +# Move page +'move-page' => 'Pindahakan $1', +'move-page-legend' => 'Pindahakan tungkaran', +'movepagetext' => "Mamuruk purmulir di bawah akan mangganti ngaran sabuah tungkaran, mamindahakan samunyaan halam ka ngaran nang hanyar. Judul lawas akan jadi sabuah tungkaran paugahan ka judul hanyar. Pian kawa mahanyari bahwasanya paugahan-paugahan manuju ka judul nang samustinya langsung. Amun kada, pastiakan cuntring gasan [[Special:DoubleRedirects|ganda]] atawa [[Special:BrokenRedirects|paugahan pagat]]. Pian batanggung jawab gasan mamastiakan tautan-tautan tatarusan manuju ka mana nang samustinya. + +Catatan bahwasanya tungkaran '''kada''' akan tapindah amun sudah ada tungkaran nang bangaran hanyar itu, kacuali amun tungkaran itu puang atawa sabuah paugahan wan kadada halam babakan. + +'''Paringatan!''' +Ini kawa maakibatakan parubahan kada taduga wan drastis gasan sabuah tungkaran rami; muhun mamastiakan Pian paham akibatnya sabalum manarusakan.", +'movepagetalktext' => "Tungkaran pamandiran tarait akan langsung dipindahakan baimbai wan ini '''kacuali amun:''' +*Sabuah tungkaran pamandiran nang kada puang sudah baisi awan judul hanyar, atawa +*Pian kada manyuntring kutak di bawah.", +'movearticle' => 'Pindahakan tungkaran:', +'newtitle' => 'Ka judul hanyar:', +'move-watch' => 'Itihi tungkaran asal mula wan tungkaran tujuan', +'movepagebtn' => 'Pindahakan tungkaran', +'pagemovedsub' => 'Pamindahan ruhui', +'movepage-moved' => '\'\'\'"$1" sudah dipindahakan ka "$2"\'\'\'', +'movepage-moved-redirect' => 'Tungkaran paugahan sudah diulah.', +'articleexists' => 'Tungkaran lawan ngaran itu sudah ada atawa ngaran nang dipilih kada sah. Silakan pilih ngaran lain.', +'talkexists' => "'''Tungkaran itu sudah ruhui dipindahakan, tapi tungkaran pamandirannya kada kawa tapindah karana sudah ada tungkaran pamandiran bajudul hanyar. Muhun gabungakan manual haja tungkaran-tungkaran itu.'''", +'movedto' => 'dipindahakan ka', +'movetalk' => 'Pindahakan tungkaran pamandiran nang tarait', +'1movedto2' => 'mamindahakan [[$1]] ka [[$2]]', +'1movedto2_redir' => 'mamindahakan [[$1]] ka [[$2]] malalui paugahan', +'move-redirect-suppressed' => 'paugahan ditikin', +'movelogpage' => 'Log pamindahan', +'movelogpagetext' => 'Di bawah ngini adalah sabuah daptar matan samunyaan pamindahan tungkaran.', +'movesubpage' => '{{PLURAL:$1|Subtungkaran|Subtutungkaran}}', +'movesubpagetext' => 'Tungkaran ngini baisi $1 {{PLURAL:$1|subtungkaran|subtutungkaran}} ditampaiakan di bawah.', +'movenosubpage' => 'Tungkaran ngini kada baisi subtutungkaran.', +'movereason' => 'Alasan:', +'revertmove' => 'bulikakan', +'delete_and_move' => 'Hapus wan pindahakan', +'delete_and_move_text' => '==pahapusan diparluakan== +Tungkaran tatuju"[[:$1]]" sadauh tasadia. +Pian handakkah hagan mahapus ngini maulah jalan gasan pamindahan?', +'delete_and_move_confirm' => "I'ih, hapus tungkaran ngini", +'delete_and_move_reason' => 'Dihapus hagan maulah jalan gasan pamindahan', +'selfmove' => 'Asal mula wan tujuan bajudul sama; +kada kawa mamindah sabuah tungkaran ka tungkaran ngitu jua.', +'immobile-source-namespace' => 'Kada kawa mamindahakan tutungkaran pada ngarankamar "$1"', +'immobile-target-namespace' => 'Kada kawa mamindahakan tutungkaran ka ngarankamar "$1"', +'immobile-target-namespace-iw' => 'Tautan interwiki adalah lainan sabuah tujuan sah gasan mamindahakan tungkaran.', +'immobile-source-page' => 'Tungkaran ngini kada kawa dipindahakan.', +'immobile-target-page' => 'Kada kawa mamindahakan ka judul tujuan ngitu.', +'imagenocrossnamespace' => 'Kada kawa mamindahakan barakas ka ngaran-kamar lainan-barakas.', +'nonfile-cannot-move-to-file' => 'Kada kawa mamindahakan lainan-barakas ka ngaran-kamar barakas', +'imagetypemismatch' => 'Ekstensi barakas hanyar kada cucuk lawa macamnya.', +'imageinvalidfilename' => 'Ngaran barakas tujuan kada sah', +'fix-double-redirects' => 'Mutakhirakan babarapa paugahan nang manitik ka judul asli', +'move-leave-redirect' => 'Ulah paugahan ka judul hanyar', + +# Export +'export' => 'Kirimi tungkaran ka luar', +'export-submit' => 'Pangaluar', +'export-addcat' => 'Tambahi', +'export-addnstext' => 'Tambahi tutungkaran matan ngaran-kamar:', +'export-addns' => 'Tambahi', +'export-download' => 'Simpan sawagai barakas', +'export-templates' => 'Tamasuk cicitakan', +'export-pagelinks' => 'Tamasuk tutungkaran tataut sampai kadalaman:', + +# Namespace 8 related +'allmessages' => ' Sistim papasanan', +'allmessagesname' => 'Ngaran', +'allmessagesdefault' => 'Naskah baku pasan', +'allmessagescurrent' => 'Naskah pasan wayahini.', +'allmessages-filter-legend' => 'Saringan', +'allmessages-filter' => 'Saringan lawan kaadaan kustom:', +'allmessages-filter-unmodified' => 'Kada digaganti', +'allmessages-filter-all' => 'Samunyaan', +'allmessages-filter-modified' => 'Digaganti', +'allmessages-prefix' => 'Sarinngan lawan mulaan:', +'allmessages-language' => 'Bahasa:', +'allmessages-filter-submit' => 'Tulak', + +# Thumbnails +'thumbnail-more' => 'Ganali', +'filemissing' => 'Barakas hilang', +'thumbnail_error' => 'Kasalahan maulah thumbnail: $1', +'djvu_page_error' => 'Tungkaran DJVu di luar jarak', +'djvu_no_xml' => 'Kada kawa kulihan XML gasan barakas DJVu', +'thumbnail_invalid_params' => 'Takaran thumbnail kada sah', +'thumbnail_dest_directory' => 'Kada kawa maulah direktori tujuan', +'thumbnail_image-type' => 'Macam pancitraan kada disukung', +'thumbnail_image-missing' => 'Barakas janakannya hilang: $1', + +# Special:Import +'import' => 'Pamasuk tungkaran', +'importinterwiki' => 'Impur transwiki', +'import-interwiki-source' => 'Wiki/tungkaran asal mula:', +'import-interwiki-history' => 'Salin sabarataan halam raralatan gasan tungkaran ngini', +'import-interwiki-templates' => 'Tamasuk samunyaan cicitakan', +'import-interwiki-submit' => 'Impur', +'import-interwiki-namespace' => 'Ngaran-kamar tujuan:', +'import-upload-filename' => 'Ngaran barakas:', +'import-comment' => 'Kumintar:', +'importstart' => 'Mangimpur tutungkaran...', +'import-revision-count' => '$1 {{PLURAL:$1|ralatan|raralatan}}', +'importnopages' => 'Kadada tutungkaran hagan diimpur.', +'importfailed' => 'Impur gagal: $1', +'importunknownsource' => 'Macam asal mula impur kada ditahui', +'importcantopen' => 'Kada kawa mambuka barakas impur', +'importbadinterwiki' => 'Tautan interwiki buruk', +'importnotext' => 'Kusung atawa kadada naskah', +'importsuccess' => 'Impur tuntung!', +'importhistoryconflict' => 'Halam ralatan nang ada bacakut (pina suah diimpur tungkaran ngini sabalumnya)', +'importnosources' => 'Kadada asal mula traswiki impur nang diulah wan halam hunggahan langsung dipajahakan.', +'importnofile' => 'Kadada barakas impur tahunggah.', +'importuploaderrorsize' => 'Hunggahan barakas impur gagal. +Barakas ngini kaganalan pada takaran hunggahan nang dibulihakan.', +'importuploaderrorpartial' => 'Hunggahan barakas impur gagal. +Barakas ngini tahunggah sapalih haja.', +'importuploaderrortemp' => 'Hunggahan barakas impur gagal. +Sabuah puldar samantara hilang.', +'import-parse-failure' => 'Kagagalan prusis impur XML', +'import-noarticle' => 'Kadada tungkaran hagan diimpur!', +'import-nonewrevisions' => 'Sabarataan raralatan suah diimpur sabalumnya.', +'import-upload' => 'Hunggah data XML', +'import-token-mismatch' => 'Kahilangan sesi data. +Muhun cubai pulang.', +'import-invalid-interwiki' => 'Kada kawa maimpur matan wiki nang diajuakan.', + +# Import log +'importlogpage' => 'Log impur', +'import-logentry-upload' => '[[$1]] diimpur lung hunggah barakas', +'import-logentry-upload-detail' => '$1 {{PLURAL:$1|ralatan|raralatan}}', +'import-logentry-interwiki' => 'ditranswiki $1', +'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|ralatan|raralatan}} matan $2', + +# Tooltip help for the actions +'tooltip-pt-userpage' => 'Tungkaran pamuruk Pian', +'tooltip-pt-anonuserpage' => 'Tungkaran pamuruk matan alamat IP Pian mambabak sawagai', +'tooltip-pt-mytalk' => 'Tungkaran pamandiran Pian', +'tooltip-pt-preferences' => 'Nang Pian katuju', +'tooltip-pt-watchlist' => 'Daptar tungkaran-tungkaran nang Pian itihi parubahannya', +'tooltip-pt-mycontris' => 'Daptar sumbangan Pian', +'tooltip-pt-login' => 'Pian sabaiknya babuat ka dalam log; tagal ini kada kawajiban pang', +'tooltip-pt-logout' => 'Kaluar', +'tooltip-ca-talk' => 'Pamandiran pasal isi tungkaran', +'tooltip-ca-edit' => 'Pian kawa mambabak tungkaran ini. Tabéngkéng amun mamuruk picikan titilikan sabalum manyimpan', +'tooltip-ca-addsection' => 'Mulai hagian hanyar', +'tooltip-ca-viewsource' => 'Tungkaran ini dilindungi. Pian kawa maniring asal mulanya.', +'tooltip-ca-history' => 'Raralatan bahari tungkaran ini', +'tooltip-ca-protect' => 'Lindungi tungkaran ini', +'tooltip-ca-unprotect' => 'Buka palindungan tungkaran ini', +'tooltip-ca-delete' => 'Hapus tungkaran ini', +'tooltip-ca-undelete' => 'Bulikakan babakan ka tungkaran ini sabalum tungkaran ini dihapus', +'tooltip-ca-move' => 'Pindahakan tungkaran ini', +'tooltip-ca-watch' => 'Tambahi tungkaran ini ka daptar itihan Pian', +'tooltip-ca-unwatch' => 'Buang tungkaran ini matan daptar itihan Pian', +'tooltip-search' => 'Gagai {{SITENAME}}', +'tooltip-search-go' => 'Tulak ka sabuah tungkaran bangaran sama munnya sudah ada', +'tooltip-search-fulltext' => 'Gagai tungkaran nang baisi naskah nangkaya ini', +'tooltip-p-logo' => 'Ilangi tungkaran tatambaian', +'tooltip-n-mainpage' => 'Ilangi tungkaran tatambaian', +'tooltip-n-mainpage-description' => 'Ilangi Tungkaran Tatambaian', +'tooltip-n-portal' => 'Pasal rangka-gawian, apa nang kawa pian gawi, di mana maugai sasuatu', +'tooltip-n-currentevents' => 'Gagai panjalasan prihal paristiwa damini', +'tooltip-n-recentchanges' => 'Daptar parubahan tahanyar dalam wiki', +'tooltip-n-randompage' => 'Tampaiakan sabuah babarang tungkaran', +'tooltip-n-help' => 'Wadah maugai patulung', +'tooltip-t-whatlinkshere' => 'Daptar samunyaan tungkaran wiki nang ada tautan ka sia', +'tooltip-t-recentchangeslinked' => 'Parubahan tahanyar dalam tutungkaran tataut matan tungkaran ini', +'tooltip-feed-rss' => 'Kitihan RSS gasan tungkaran ini', +'tooltip-feed-atom' => 'Kitihan Atum gasan tungkaran ini', +'tooltip-t-contributions' => 'Tiringi daptar sumbangan pamuruk ini', +'tooltip-t-emailuser' => 'Kirimi surel ka pamuruk ini', +'tooltip-t-upload' => 'Hunggahakan babarakas', +'tooltip-t-specialpages' => 'Daptar samunyaan tungkaran istimiwa', +'tooltip-t-print' => 'Nang kawa dicitaknya tungkaran ini', +'tooltip-t-permalink' => 'Tautan tatap ka raralatan tungkaran ini', +'tooltip-ca-nstab-main' => 'Tiringi tungkaran isi', +'tooltip-ca-nstab-user' => 'Tiring tungkaran pamuruk', +'tooltip-ca-nstab-media' => 'Tiringi tungkaran media', +'tooltip-ca-nstab-special' => 'Nangini sabuah tungkaran istimiwa nang kada kawa dibabak.', +'tooltip-ca-nstab-project' => 'Tiringi tungkaran rangka gawian', +'tooltip-ca-nstab-image' => 'Tiringi barakas tungkaran', +'tooltip-ca-nstab-mediawiki' => 'Tiring sistim pasan', +'tooltip-ca-nstab-template' => 'Tiringi citakan', +'tooltip-ca-nstab-help' => 'Tiringi tungkaran patulung', +'tooltip-ca-nstab-category' => 'Lihati tungkaran tumbung', +'tooltip-minoredit' => 'Tandai ini sabagai sabuah pambabakan sapalih', +'tooltip-save' => 'Simpan parubahan Pian', +'tooltip-preview' => 'Tilik parubahan Pian, muhun puruk ini sabalum manyimpan!', +'tooltip-diff' => 'Tampaiakan nang apa parubahan nang Pian ulah', +'tooltip-compareselectedversions' => 'Lihati nang balain antara dua ralatan tungkaran tapilih ini', +'tooltip-watch' => 'Tambahakan tungkaran ini ka daptar itihan Pian', +'tooltip-recreate' => 'Ulah pulang tungkaran biar gin suah dihapus', +'tooltip-upload' => 'Mulai pangunggahan', +'tooltip-rollback' => 'Bulikakan ka babakan-babakan tungkaran ini matan panyumbang tauncit dalam sakali klik.', +'tooltip-undo' => 'Mamantukakan ralatan ini wan mambuka kutak pambabakan lawan mode tilik. Alasan kawa ditambahakan di kutak kasimpulan.', +'tooltip-preferences-save' => 'Simpan kakatujuan', +'tooltip-summary' => 'Buati sabuah kasimpulan handap', + +# Metadata +'notacceptable' => 'Server wiki kada kawa manyadiakan data dalam sabuah purmat nang client Pian kawa baca.', + +# Attribution +'siteuser' => 'Pamuruk {{SITENAME}} $1', +'anonuser' => 'Pamuruk kada bangaran {{SITENAME}} $1', +'lastmodifiedatby' => 'Tungkaran ngini tauncit diubah pada $1, $2 ulih $3', +'othercontribs' => 'Dipandalakan pada gawian ulih $1.', +'others' => 'lainnya', +'siteusers' => '{{PLURAL:$2|pamuruk|papamuruk}} {{SITENAME}} $1', +'anonusers' => '{{PLURAL:$2|pamuruk|papamuruk}} kada bangaran {{SITENAME}} $1', +'creditspage' => 'Tungkaran kridit', +'nocredits' => 'Kadada panjalasan kridit tasadia gasan tungkaran ngini.', + +# Info page +'infosubtitle' => 'Panjalasan gasan tungkaran', +'numedits' => 'Rikinan babakan (tungkaran): $1', + +# Patrol log +'patrol-log-diff' => 'Ralatan $1', + +# Image deletion +'deletedrevision' => 'Raralatan lawas tahapus: $1', + +# Browsing diffs +'previousdiff' => '← Ralatan talawas', +'nextdiff' => 'Ralatan tahanyar →', + +# Media information +'file-info-size' => '$1 × $2 piksel, ukuran barakas: $3, tipe MIME: $4', +'file-nohires' => ' kadada tasadia resolusi tapancau.', +'svg-long-desc' => 'Barakas SVG, nominal $1 × $2 piksel, basar barakas: $3', +'show-big-image' => 'Ukuran hibak', +'show-big-image-thumb' => 'Ukurannya tilikan ini: $1 × $2 piksel', + +# Special:NewFiles +'newimages-legend' => 'Saringan', +'noimages' => 'Kadada nang dijanaki.', +'ilsubmit' => 'Gagai', +'bydate' => 'ulih tanggal', + +# Bad image list +'bad_image_list' => "Purmatnya nangkaya di bawah ni: + +Daptar buting (baris bamula wan *) haja nang dipartimbangkan. +Tautan ta'asa dalam sabuah baris mustinya sabuah tautan ka barakas nang buruk. +Tautan-tautan abis tu pada baris sama dipartimbangkan sabagai pangacualian, nangkaya tungkaran-tungkaran di mana barakas itu ada.", + +# Metadata +'metadata' => 'Metadata', +'metadata-help' => 'Barakas ini mangandung panjalasan tambahan, mungkin ditambahakan ulih kudakan atawa paundai nang dipurukakan gasan maulah atawa digitalisasi barakas. Amun barakas ini sudah diubah, parincian nang ada mungkin kada sapanuhnya sasuai lawan barakas nang diubah.', +'metadata-expand' => 'Tampaiakan tambahan rincian', +'metadata-collapse' => 'Sungkupakan tambahan rincian', +'metadata-fields' => 'EXIF metadata tadaptar dalam pasan ini akan masuk dalam tungkaran pancitraan wayah tabel metadata tasungkup. Nang lainnya cagaran babaku tasungkup. +* make +* model +* datetimeoriginal +* exposuretime +* fnumber +* isospeedratings +* focallength', + +# EXIF tags +'exif-jpeginterchangeformat' => 'Ofset ka JPEG SOI', +'exif-usercomment' => 'Kumintar pamuruk', + +# External editor support +'edit-externally' => 'Babak barakas ini puruk sabuah aplikasi luar', +'edit-externally-help' => '(Lihati [http://www.mediawiki.org/wiki/Manual:External_editors setup instructions] untuk panjalasan labih)', + +# 'all' in various places, this might be different for inflected languages +'watchlistall2' => 'samunyaan', +'namespacesall' => 'samunyaan', +'monthsall' => 'samunyaan', + +# Trackbacks +'trackbackremove' => '([$1 Hapus])', + +# Delete conflict +'recreate' => 'Ulah pulang', + +# action=purge +'confirm_purge_button' => 'OK', + +# Multipage image navigation +'imgmultigo' => 'Tulak!', +'imgmultigoto' => 'Tulak ka tungkaran $1', + +# Table pager +'table_pager_limit_submit' => 'Tulak ka', + +# Watchlist editor +'watchlistedit-normal-title' => 'Babak daptar itihan', + +# Watchlist editing tools +'watchlisttools-view' => 'Tampaiakan parubahan tarait', +'watchlisttools-edit' => 'Tiringi wan babak daptar itihan', +'watchlisttools-raw' => 'Babak daptar itihan mantah', + +# Special:Version +'version-specialpages' => 'Tungkaran istimiwa', +'version-other' => 'Lain-lain', +'version-hook-name' => 'Ngaran kait', + +# Special:FilePath +'filepath' => 'Wadah barakas', +'filepath-page' => 'Barakas:', +'filepath-submit' => 'Gagai', + +# Special:FileDuplicateSearch +'fileduplicatesearch-submit' => 'Gagai', + +# Special:SpecialPages +'specialpages' => 'Tungkaran istimiwa', +'specialpages-note' => '---- +Pamaparan tampaian: +* Tungkaran istimiwa normal +* Tungkaran istimiwa tahinggan', +'specialpages-group-maintenance' => 'Lapuran pamaliharaan', +'specialpages-group-other' => 'Tungkaran istimiwa lainnya', +'specialpages-group-login' => 'Babuat log / mandaptar', +'specialpages-group-changes' => 'Parubahan tahanyar wan log', +'specialpages-group-media' => 'Lapuran wan pamuatan barakas', +'specialpages-group-users' => 'Pamuruk wan hak pamuruk', +'specialpages-group-highuse' => 'Tungkaran pamakaian tinggi', +'specialpages-group-pages' => 'Daptar tungkaran', +'specialpages-group-pagetools' => 'Pakakas tungkaran', +'specialpages-group-wiki' => 'Data wan pakakas wiki', +'specialpages-group-redirects' => 'Maugahakan tungkaran istimiwa', +'specialpages-group-spam' => 'Pakakas spam', + +# Special:BlankPage +'blankpage' => 'Tungkaran puang', +'intentionallyblankpage' => "Tungkaran ini kurinah dibiarakan puang wan diguna'akan di antaranya gasan paukuran kinerja, wan lain-lain.", + +# Special:Tags +'tags' => 'Tag parubahan sah', +'tag-filter' => 'Saringan [[Special:Tags|Tag]]:', +'tag-filter-submit' => 'Saringan', +'tags-title' => 'Gantungan', +'tags-tag' => 'Gantungan ngaran', +'tags-display-header' => 'Pancungulan pada daptar parubahan.', +'tags-edit' => 'babak', + +# Special:ComparePages +'comparepages' => 'Bandingakan tutungkaran', +'compare-page1' => 'Tungkaran 1', +'compare-page2' => 'Tungkaran 2', +'compare-rev1' => 'Ralatan 1', +'compare-rev2' => 'Ralatan 2', + +# HTML forms +'htmlform-selectorother-other' => 'Lain-lain', + +); diff --git a/languages/messages/MessagesBn.php b/languages/messages/MessagesBn.php index 824eb1d3..0a7335fd 100644 --- a/languages/messages/MessagesBn.php +++ b/languages/messages/MessagesBn.php @@ -13,6 +13,8 @@ * @author Jayantanth * @author Prometheus.pyrphoros * @author Reedy + * @author Samritmaity + * @author Usarker * @author Wikitanvir * @author Zaheen * @author לערי ריינהארט @@ -73,8 +75,7 @@ $messages = array( 'tog-editsection' => '[সম্পাদনা] সংযোগের সাহায্যে পরিচ্ছেদ সম্পাদনা করার ক্ষমতা দেয়া হোক', 'tog-editsectiononrightclick' => 'পরিচ্ছেদের শিরোনামে ডান ক্লিকের মাধ্যমে
    পরিচ্ছেদ সম্পাদনা করার ক্ষমতা দেয়া হোক (জাভাস্ক্রিপ্ট)', 'tog-showtoc' => 'সূচিপত্র দেখানো হোক (৩টির বেশি পরিচ্ছেদের শিরোনামবিশিষ্ট পাতার জন্য)', -'tog-rememberpassword' => 'একাধিক সেশনের জন্য শব্দচাবি মনে রাখা হোক', -'tog-editwidth' => 'পুরো পর্দা ভরতে সম্পাদনা বাক্সটি প্রসস্ত করো', +'tog-rememberpassword' => 'এই ব্রাউজারে আমার লগ ইন তথ্য (শব্দচাবি) মনে রাখো (সর্বোচ্চ $1 {{PLURAL:$1|দিনের|দিনের}} জন্য)', 'tog-watchcreations' => 'আমার তৈরি পাতাগুলি আমার নজরতালিকায় যোগ করা হোক', 'tog-watchdefault' => 'আমার সম্পাদিত পাতাগুলি আমার নজরতালিকায় যোগ করা হোক', 'tog-watchmoves' => 'আমার সরিয়ে ফেলা পাতাগুলি আমার নজরতালিকায় যোগ করা হোক', @@ -219,31 +220,21 @@ $messages = array( 'faqpage' => 'Project:প্রাজিপ্র', # Vector skin -'vector-action-addsection' => 'বিষয় যোগ', -'vector-action-delete' => 'অপসারণ', -'vector-action-move' => 'স্থানান্তর', -'vector-action-protect' => 'সুরক্ষা', -'vector-action-undelete' => 'পুনরুদ্ধার', -'vector-action-unprotect' => 'অরক্ষা', -'vector-namespace-category' => 'বিষয়শ্রেণী', -'vector-namespace-help' => 'সাহায্য', -'vector-namespace-image' => 'ফাইল', -'vector-namespace-main' => 'পাতা', -'vector-namespace-media' => 'মিডিয়া পাতা', -'vector-namespace-mediawiki' => 'বার্তা', -'vector-namespace-project' => 'প্রকল্প পাতা', -'vector-namespace-special' => 'বিশেষ পাতা', -'vector-namespace-talk' => 'আলাপ', -'vector-namespace-template' => 'টেম্পলেট', -'vector-namespace-user' => 'ব্যবহারকারী পাতা', -'vector-view-create' => 'তৈরি করুন', -'vector-view-edit' => 'সম্পাদনা', -'vector-view-history' => 'ইতিহাস', -'vector-view-view' => 'পড়ুন', -'vector-view-viewsource' => 'সোর্স দেখুন', -'actions' => 'কার্যক্রম', -'namespaces' => 'নামস্থান', -'variants' => 'বিকল্পসমূহ', +'vector-action-addsection' => 'বিষয় যোগ', +'vector-action-delete' => 'অপসারণ', +'vector-action-move' => 'স্থানান্তর', +'vector-action-protect' => 'সুরক্ষা', +'vector-action-undelete' => 'পুনরুদ্ধার', +'vector-action-unprotect' => 'অরক্ষা', +'vector-simplesearch-preference' => 'আরও সমৃদ্ধ অনুসন্ধান পরামর্শ সক্রিয় করুন (শুধুমাত্র ভেক্টর স্কিনের জন্য)', +'vector-view-create' => 'তৈরি করুন', +'vector-view-edit' => 'সম্পাদনা', +'vector-view-history' => 'ইতিহাস', +'vector-view-view' => 'পড়ুন', +'vector-view-viewsource' => 'সোর্স দেখুন', +'actions' => 'কার্যক্রম', +'namespaces' => 'নামস্থান', +'variants' => 'বিকল্পসমূহ', 'errorpagetitle' => 'ত্রুটি', 'returnto' => '$1 শিরোনামের পাতায় ফেরত যান।', @@ -304,6 +295,9 @@ $messages = array( নতুন করে এ পাতাটি দেখার চেষ্টা করার আগে কিছুক্ষণ অপেক্ষা করুন। $1', +'pool-timeout' => 'সময় উত্তির্ণ লক-এর জন্য অপেক্ষারত', +'pool-queuefull' => 'পুলের লাইন পূর্ণ', +'pool-errorunknown' => 'অজানা ত্রুটি', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} বৃত্তান্ত', @@ -466,7 +460,8 @@ $2', 'yourname' => 'ব্যবহারকারীর নাম (Username)', 'yourpassword' => 'শব্দচাবি (Password)', 'yourpasswordagain' => 'শব্দচাবিটি (password) আবার লিখুন', -'remembermypassword' => 'আমাকে পরবর্তীতে মনে রাখা হোক', +'remembermypassword' => 'একাধিক সেশনের জন্য শব্দচাবি মনে রাখা হোক (সর্বোচ্চ $1 {{PLURAL:$1|দিনের|দিনের}} জন্য)', +'securelogin-stick-https' => 'লগইনের পর এইচটিটিপিএস-এর সাথে সংযোগকৃত থাকুন', 'yourdomainname' => 'আপনার ডোমেইন', 'externaldberror' => 'হয় কোন বহিঃস্থ যাচাইকরণ ডাটাবেজ ত্রুটি ঘটেছে অথবা আপনার বহিঃস্থ অ্যাকাউন্ট হালনাগাদ করার অনুমতি নেই।', 'login' => 'প্রবেশ করুন', @@ -483,6 +478,7 @@ $2', 'gotaccount' => "আপনার কি ইতিমধ্যে একটি অ্যাকাউন্ট তৈরি করা আছে? '''$1''' করুন।", 'gotaccountlink' => 'প্রবেশ', 'createaccountmail' => 'ই-মেইলের মাধ্যমে', +'createaccountreason' => 'কারণ:', 'badretype' => 'শব্দচাবি (password) দুটি মিলছেনা।', 'userexists' => 'এই ব্যবহারকারী নামটি অন্য কেঊ আগেই ব্যবহার করেছে। দয়া করে অন্য নাম বেছে নিন।', 'loginerror' => 'লগ-ইন করতে সমস্যা হয়েছে', @@ -502,6 +498,7 @@ $2', 'wrongpasswordempty' => 'শব্দচাবি (password) প্রবেশের ঘরটি খালি ছিল। দয়াকরে আবার চেষ্টা করুন।', 'passwordtooshort' => 'শব্দচাবি অবশ্যই {{PLURAL:$1|১ অক্ষরের|$1 অক্ষরের}} হতে হবে।', 'password-name-match' => 'আপনার শব্দচাবি আপনার ব্যবহারকারী নাম থেকে আলাদা হতে হবে।', +'password-login-forbidden' => 'এই ব্যবহারকারীর নাম এবং শব্দচাবিটি ব্যবহার নিষিদ্ধ করা হয়েছে।', 'mailmypassword' => 'নতুন শব্দচাবি ই-মেইলে পাঠানো হোক', 'passwordremindertitle' => '{{SITENAME}}-এর জন্য নতুন সাময়িক শব্দচাবি', 'passwordremindertext' => 'কেউ একজন ($1 আইপি ঠিকানাটি থেকে সম্ভবত আপনি) অনুরোধ করেছেন যেন আমরা আপনাকে {{SITENAME}} ($4) এর জন্য একটি নতুন শব্দচাবি পাঠাই। @@ -536,6 +533,9 @@ $2', 'loginlanguagelabel' => 'ভাষা: $1', 'suspicious-userlogout' => 'আপনার প্রস্থানের অনুরোধ বাতিল হয়েছে কারণ অনুমিত যে আপনার ব্রাউজার অসম্পূর্ণ অথবা পূবর্বতী তথ্য প্রেরণ করেছে।', +# E-mail sending +'php-mail-error-unknown' => 'পিএইচপি এর মেইল () কার্যে অজ্ঞাত ভুল', + # Password reset dialog 'resetpass' => 'শব্দচাবি পরিবর্তন', 'resetpass_announce' => 'আপন ই-মেইলকৃত সংকেত দ্বারা লগ-ইন আছেন। লগ-ইন পদ্ধতি সম্পূর্ণ করতে আপনাকে অবশ্যই একটি নতুন শব্দচাবি গ্রহণ করতে হবে:', @@ -585,9 +585,10 @@ $2', 'showlivepreview' => 'তাৎক্ষণিক প্রাকদর্শন', 'showdiff' => 'পরিবর্তনসমূহ', 'anoneditwarning' => 'আপনি লগ ইন করেননি। এই পাতার সম্পাদনার ইতিহাসে আপনার আইপি সংখ্যা সংরক্ষিত হবে।', +'anonpreviewwarning' => 'আপনি লগ ইন করেননি। এই পাতার সম্পাদনার ইতিহাসে আপনার আইপি সংখ্যা সংরক্ষিত হবে।', 'missingsummary' => "'''খেয়াল করুন''': আপনি কিন্তু সম্পাদনার সারাংশ দেননি। আবার যদি \"সংরক্ষণ\" বোতামে ক্লিক করেন, তাহলে ঐ সারাংশ বাক্যটি ছাড়াই আপনার সম্পাদনা সংরক্ষিত হবে।", 'missingcommenttext' => 'দয়াকরে নিচে মন্তব্য যোগ করুন।', -'missingcommentheader' => "'''মনে রাখবেন:''' আপনি এই মন্তব্যের জন্য কোন বিষয়/শিরোনাম দেননি। আপনি যদি সংরক্ষণ বোতাম ক্লিক করেন, তাহলে আপনার সম্পাদনা কোন বিষয়/শিরোনাম ছাড়াই সংরক্ষিত হবে।", +'missingcommentheader' => "'''খেয়াল করুন:''' আপনি এই মন্তব্যের জন্য কোন বিষয়/শিরোনাম দেননি। সংরক্ষণ বোতামে ক্লিক করলে, আপনার এই সম্পাদনা কোন বিষয়/শিরোনাম ছাড়াই সংরক্ষিত হবে।", 'summary-preview' => 'সারাংশ প্রাকদর্শন:', 'subject-preview' => 'বিষয়/শিরোনাম প্রাকদর্শন:', 'blockedtitle' => 'ব্যবহারকারীকে বাধা দেয়া হয়েছে', @@ -663,7 +664,11 @@ $1 নিষেধাজ্ঞা আরোপ করেছেন। নিষ 'usercsspreview' => "'''মনে রাখবেন আপনি আপনার জন্য বরাদ্ধকৃত সিএসএস প্রাকদর্শন করছেন। এটা এখনও সংরক্ষণ করা হয়নি!'''", 'userjspreview' => "'''মনে রাখুন আপনি আপনার ব্যবহারকারী জাভাস্ক্রিপ্ট কেবলমাত্র পরীক্ষা/প্রাকদর্শন করছেন। এটা এখনও সংরক্ষণ করা হয়নি!'''", -'userinvalidcssjstitle' => "'''সতর্কীকরণ:''' \"\$1\" নামে কোন আবরণ নেই। মনে রাখবেন, পছন্দমাফিক .css এবং .js পাতাগুলি ছোট হাতের শিরোনাম ব্যবহার করে, যেমন {{ns:user}}:Foo/monobook.css; কিন্তু এরকম শিরোনাম নয়: {{ns:user}}:Foo/Monobook.css", +'sitecsspreview' => "'''মনে রাখবেন আপনি আপনার জন্য বরাদ্ধকৃত সিএসএস প্রাকদর্শন করছেন। +এটা এখনও সংরক্ষণ করা হয়নি!'''", +'sitejspreview' => "'''মনে রাখুন আপনি আপনার ব্যবহারকারী জাভাস্ক্রিপ্ট কেবলমাত্র প্রাকদর্শন করছেন।''' +'''এটা এখনও সংরক্ষণ করা হয়নি!'''", +'userinvalidcssjstitle' => "'''সতর্কীকরণ:''' \"\$1\" নামে কোন আবরণ নেই। মনে রাখবেন, পছন্দমাফিক .css এবং .js পাতাগুলি ছোট হাতের শিরোনাম ব্যবহার করে, যেমন {{ns:user}}:Foo/vector.css; কিন্তু এরকম শিরোনাম নয়: {{ns:user}}:Foo/Vector.css", 'updated' => '(হালনাগাদ)', 'note' => "'''নোট:'''", 'previewnote' => "'''এটি প্রাকদর্শন মাত্র। কোনো পরিবর্তন এখনও সংরক্ষণ করা হয়নি!'''", @@ -694,8 +699,6 @@ $1 নিষেধাজ্ঞা আরোপ করেছেন। নিষ আপনি আরো প্রতিজ্ঞা করছেন যে, এই লেখাগুলো আপনি নিজে লিখেছেন, বা সাধারণের ব্যবহারের জন্য উন্মুক্ত কোন উৎস থেকে সংগ্রহ করেছেন। '''স্বত্ব সংরক্ষিত কোন লেখা স্বত্বাধিকারীর অনুমতি ছাড়া এখানে জমা দেবেন না!'''", 'copyrightwarning2' => "অনুগ্রহ করে লক্ষ করুন: {{SITENAME}}-এর এই ভুক্তিতে আপনার লেখা বা অবদান অন্যান্য ব্যবহারকারীরা পরিবর্তন বা পরিবর্ধন করতে, এমনকি মুছে ফেলতে পারবেন। {{SITENAME}} এ আপনার সকল লেখালেখি/অবদান গনু ফ্রি ডকুমেন্টেশনের ($1) আওতায় বিনামূল্যে প্রাপ্য ও হস্তান্তরযোগ্য। আপনার জমা দেয়া লেখা যে কেউ হৃদয়হীনভাবে সম্পাদনা করতে এবং যথেচ্ছভাবে ব্যবহার করতে পারেন। আপনি যদি এ ব্যাপারে একমত না হন, তাহলে এখানে আপনার লেখা জমা দেবেন না। আপনি আরো প্রতিজ্ঞা করছেন যে, এই লেখাগুলো আপনি নিজে লিখেছেন (তবে কোন মৌলিক গবেষণা নয়) বা সাধারণের ব্যবহারের জন্য উন্মুক্ত কোন উৎস থেকে সংগ্রহ করেছেন। '''স্বত্ব সংরক্ষিত কোন লেখা স্বত্বাধিকারীর অনুমতি ছাড়া এখানে জমা দেবেন না।'''", -'longpagewarning' => "'''সতর্কীকরণ: এই পাতাটি $1 কিলোবাইট দীর্ঘ; কিছু ব্রাউজারে ৩২ কিলোবাইটের চেয়ে দীর্ঘ পাতা সম্পাদনা করতে সমস্যা হতে পারে। -অনুগ্রহ করে পাতাটিকে একাধিক ক্ষুদ্রতর অংশে ভাগ করার চেষ্টা করুন।'''", 'longpageerror' => "'''ত্রুটি: আপনার জমা দেয়া টেক্সটের পরিমাণ $1 কিলোবাইট, যা সর্বোচ্চ সীমা $2 কিলোবাইটের চেয়ে বেশি। এটি সংরক্ষণ করা সম্ভব নয়।'''", 'readonlywarning' => "'''সতর্কীকরণ: রক্ষণাবেক্ষণের জন্য ডাটাবেজ অবরুদ্ধ রাখা হয়েছে, তাই এই মুহূর্তে আপনার সম্পাদনা সংরক্ষণ করতে পারবেন না। আপনি চাইলে লেখাটি কাট এবং পেষ্ট করে ভবিষ্যতের জন্য কোন টেক্সট ফাইলে সংরক্ষণ করতে পারেন।''' @@ -794,6 +797,7 @@ $3-এর দেয়া কারণ হল ''$2''", 'rev-deleted-comment' => '(সম্পাদনা সারাংশ অপসারিত)', 'rev-deleted-user' => '(ব্যবহারকারীর নাম সরিয়ে নেওয়া হয়েছে)', 'rev-deleted-event' => '(লগ অ্যাকশন সরানো হয়েছে)', +'rev-deleted-user-contribs' => 'ব্যবহারকারীর নাম অথবা আইপি ঠিকানা অপসারিত হয়েছে - অবদান থেকে সম্পাদনা আড়াল করা হয়েছে', 'rev-deleted-text-permission' => "পাতার এই সংস্করণটি '''অপসারিত''' হয়েছে। বিস্তারিত কারণ এর [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অপসারণ লগে] পাওয়া যেতে পারে।", 'rev-deleted-text-unhide' => "পাতার এই সংস্করণটি '''অপসারিত''' হয়েছে। @@ -810,7 +814,7 @@ $3-এর দেয়া কারণ হল ''$2''", 'revdelete-nologid-title' => 'ভুল লগ ভুক্তি', 'revdelete-no-file' => 'নির্ধারিত ফাইলটি নেই।', 'revdelete-show-file-submit' => 'হ্যাঁ', -'revdelete-selected' => "'''[[:$1]]-এর {{PLURAL:$2|টি নির্বাচিত সংশোধন|টি নির্বাচিত সংশোধন}}:'''", +'revdelete-selected' => "'''[[:$1]] পাতার {{PLURAL:$2|নির্বাচিত সংশোধন|নির্বাচিত সংশোধনসমূহ}}:'''", 'logdelete-selected' => "'''{{PLURAL:$1|টি নির্বাচিত লগ-ঘটনা|টি নির্বাচিত লগ-ঘটনা}}:'''", 'revdelete-text' => "'''মুছে ফেলা সংশোধনগুলো এবং ঘটনাগুলি এখনও পাতার ইতিহাস ও লগগুলোতে দেখাবে, কিন্তু তাদের বিষয়বস্তুর অংশবিশেষ সর্বোসাধারণের জন্য উন্মুক্ত থাকবে না।''' @@ -819,7 +823,7 @@ $3-এর দেয়া কারণ হল ''$2''", 'revdelete-hide-text' => 'সংশোধিত লেখা আড়াল করো', 'revdelete-hide-image' => 'ফাইলের বিষয়বস্তু আড়াল করো', 'revdelete-hide-name' => 'কাজ এবং লক্ষ্য আড়াল করো', -'revdelete-hide-comment' => 'সম্পাদনা মন্তব্য আড়াল করো', +'revdelete-hide-comment' => 'সম্পাদনা সারাংশ আড়াল করো', 'revdelete-hide-user' => 'সম্পাদকে ব্যবহারকারীর নাম/আইপি আড়াল করো', 'revdelete-hide-restricted' => 'প্রশাসকবৃন্দ এবং অন্যদের ক্ষেত্রে এই ডাটা রোধ করো', 'revdelete-radio-same' => 'পরিবর্তন নয়', @@ -829,11 +833,13 @@ $3-এর দেয়া কারণ হল ''$2''", 'revdelete-unsuppress' => 'সংশোধন পুনঃস্থাপনের উপর সীমাবদ্ধতা দূর করো', 'revdelete-log' => 'কারণ:', 'revdelete-submit' => 'নির্বাচিত {{PLURAL:$1|সংশোধনে|সংশোধসমূহে}} প্রয়োগ করো', -'revdelete-logentry' => '[[$1]]-এর সংশোধন দৃশ্যমানতা পরিবর্তন করা হয়েছে', -'logdelete-logentry' => '[[$1]]-এর ঘটনা দৃশ্যমানতা পরিবর্তন করা হয়েছে', +'revdelete-logentry' => '[[$1]] পাতার সংশোধন দৃশ্যমানতা পরিবর্তন করেছেন', +'logdelete-logentry' => '[[$1]] পাতার ঘটনা দৃশ্যমানতা পরিবর্তন করেছে', 'revdelete-success' => "'''সংশোধন দৃশ্যমানতা সফলভাবে হালনাগাদ করা হয়েছে।'''", 'logdelete-success' => "'''ঘটনা দৃশ্যমানতা সফলভাবে স্থাপন করা হয়েছে।'''", -'revdel-restore' => 'দৃষ্টিপাত পরিবর্তন করো', +'revdel-restore' => 'দৃশ্যমানতা পরিবর্তন করো', +'revdel-restore-deleted' => 'অপসারিত সংস্করণ', +'revdel-restore-visible' => 'প্রদর্শনযোগ্য সংস্করণ', 'pagehist' => 'পাতার ইতিহাস', 'deletedhist' => 'ইতিহাস মুছে ফেলো', 'revdelete-content' => 'বিষয়বস্তু', @@ -843,7 +849,7 @@ $3-এর দেয়া কারণ হল ''$2''", 'revdelete-unrestricted' => 'এই সীমাবদ্ধতা প্রশাসকের ক্ষেত্রে তুলে নাও', 'revdelete-hid' => '$1 আড়াল করা হয়েছে', 'revdelete-unhid' => '$1 প্রকাশ করা হয়েছে', -'revdelete-log-message' => '{{PLURAL:$2|টি সংশোধনের|টি সংশোধনের}} $1', +'revdelete-log-message' => '$2{{PLURAL:$2|টি সংশোধনের|টি সংশোধনের}} $1', 'logdelete-log-message' => '$1 এর জন্য $2 {{PLURAL:$2|ঘটনা|ঘটনা সমূহ}}', 'revdelete-reason-dropdown' => '*সাধারণ অপসারণের কারণসমূহ ** কপিরাইট লঙ্ঘন @@ -889,11 +895,12 @@ $3-এর দেয়া কারণ হল ''$2''", # Diffs 'history-title' => '"$1" এর সংশোধনের ইতিহাস', 'difference' => '(সংস্করণগুলোর মধ্যে পার্থক্য)', +'difference-multipage' => 'পাতাগুলোর মধ্যে পার্থক্য', 'lineno' => '$1 নং লাইন:', 'compareselectedversions' => 'নির্বাচিত সংস্করণগুলো তুলনা করো', 'showhideselectedversions' => 'নির্বাচিত সংশোধনগুলো দেখাও/লুকাও', 'editundo' => 'বাতিল', -'diff-multi' => '({{PLURAL:$1|একটি অন্তর্বর্তীকালীন সংশোধন|$1টি অন্তর্বর্তীকালীন সংশোধন}} দেখানো হয়নি।)', +'diff-multi' => '({{PLURAL:$2|একজন ব্যবহারকারী |$2 জন ব্যবহারকারী}} সম্পাদিত {{PLURAL:$1|একটি অন্তর্বর্তীকালীন সংশোধন|$1টি অন্তর্বর্তীকালীন সংশোধন}} দেখানো হয়নি।)', # Search results 'searchresults' => 'অনুসন্ধানের ফলাফল', @@ -901,6 +908,7 @@ $3-এর দেয়া কারণ হল ''$2''", 'searchresulttext' => '{{SITENAME}} এ অনুসন্ধানের ব্যাপারে আরও তথ্যের জন্য [[{{MediaWiki:Helppage}}|{{int:help}}]] দেখুন।', 'searchsubtitle' => 'আপনি অনুসন্ধান করেছেন \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|"$1" দিয়ে শুরু হওয়া সকল পাতাসমূহ]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" এর সাথে সংযুক্ত সকল পাতা]])', 'searchsubtitleinvalid' => "আপনি অনুসন্ধান করেছেন '''$1'''", +'toomanymatches' => 'একই রকম অনেকগুলো উত্তর এসেছে, অনুগ্রহ করে অন্য কোন কুয়েরি দিন', 'titlematches' => 'নিবন্ধের শিরোনাম মিলেছে', 'notitlematches' => 'কোন পাতার শিরোনামের সাথে মিলে নেই', 'textmatches' => 'পাতার লেখার সাথে মিলেছে', @@ -966,127 +974,140 @@ $3-এর দেয়া কারণ হল ''$2''", 'qbsettings-floatingright' => 'ভাসমান ডান', # Preferences page -'preferences' => 'আমার পছন্দ', -'mypreferences' => 'আমার পছন্দ', -'prefs-edits' => 'সম্পাদনার সংখ্যা:', -'prefsnologin' => 'আপনি লগ-ইন করেননি', -'prefsnologintext' => 'ব্যবহারকারীর পছন্দ ঠিক করতে হলে আপনাকে অবশ্যই [{{fullurl:{{#Special:UserLogin}}|returnto=$1}} লগইন] করা অবস্থায় থাকতে হবে।', -'changepassword' => 'শব্দচাবি (password) পরিবর্তন', -'prefs-skin' => 'আবরণ (Skin)', -'skin-preview' => 'প্রাকদর্শন', -'prefs-math' => 'গণিত', -'datedefault' => 'কোন পছন্দ নেই', -'prefs-datetime' => 'তারিখ ও সময়', -'prefs-personal' => 'ব্যবহারকারীর বৃত্তান্ত', -'prefs-rc' => 'সাম্প্রতিক পরিবর্তনসমূহ', -'prefs-watchlist' => 'নজর তালিকা', -'prefs-watchlist-days' => 'যত দিনের নজরতালিকা দেখানো হবে:', -'prefs-watchlist-days-max' => 'সর্বোচ্চ ৭ দিন', -'prefs-watchlist-edits' => 'সম্প্রসারিত নজর তালিকায় সর্বোচ্চ সংখ্যার পরিবর্তন দেখানোর জন্য:', -'prefs-watchlist-edits-max' => 'সর্বোচ্চ নাম্বার: ১০০০', -'prefs-watchlist-token' => 'নজরতালিকা টোকেন:', -'prefs-misc' => 'বিবিধ', -'prefs-resetpass' => 'শব্দচাবি পরিবর্তন', -'prefs-email' => 'ই-মেইল অপশন', -'prefs-rendering' => 'অবয়ব', -'saveprefs' => 'সংরক্ষণ করো', -'resetprefs' => 'অসংরক্ষিত পরিবর্তনগুলো পরিস্কার করো', -'restoreprefs' => 'সকল পূর্বনির্ধারিত সেটিং ফিরিয়ে আনো', -'prefs-editing' => 'সম্পাদনা', -'prefs-edit-boxsize' => 'সম্পাদনা উইন্ডোর আকার।', -'rows' => 'সারি:', -'columns' => 'কলাম:', -'searchresultshead' => 'অনুসন্ধান', -'resultsperpage' => 'প্রতি পাতায় হিট:', -'contextlines' => 'লাইন প্রতি হিটে:', -'contextchars' => 'প্রতি লাইনে কন্‌টেক্সট সংখ্যা:', -'stub-threshold' => 'অসম্পূর্ণ নিবন্ধের সংযোগগুলির বিশেষ ফরম্যাটিঙের সীমা (বাইটে):', -'recentchangesdays' => 'সাম্প্রতিক পরিবর্তনে দিনসমূহ দেখানোর জন্য:', -'recentchangesdays-max' => 'সর্বোচ্চ $1 {{PLURAL:$1|দিন|দিন}}', -'recentchangescount' => 'সাম্প্রতিক পরিবর্তনে প্রদর্শিত সম্পাদনার সংখ্যা:', -'savedprefs' => 'আপনার পছন্দগুলো সংরক্ষণ করা হয়েছে।', -'timezonelegend' => 'সময় বলয়:', -'localtime' => 'স্থানীয় সময়:', -'timezoneuseserverdefault' => 'ব্যবহারকারী সার্ভার পূর্বনির্ধারিত', -'timezoneuseoffset' => 'অন্য (অফসেট নির্দিষ্ট করুন)', -'timezoneoffset' => 'সময়পার্থক্য¹:', -'servertime' => 'সার্ভারের সময়:', -'guesstimezone' => 'ব্রাউজার থেকে পূরণ করো', -'timezoneregion-africa' => 'আফ্রিকা', -'timezoneregion-america' => 'আমেরিকা', -'timezoneregion-antarctica' => 'এন্টার্টিকা', -'timezoneregion-arctic' => 'আর্কটিক', -'timezoneregion-asia' => 'এশিয়া', -'timezoneregion-atlantic' => 'আটলান্টিক মহাসাগর', -'timezoneregion-australia' => 'অস্ট্রেলিয়া', -'timezoneregion-europe' => 'ইউরোপ', -'timezoneregion-indian' => 'ভারত মহাসাগর', -'timezoneregion-pacific' => 'প্রশান্ত মহাসাগর', -'allowemail' => 'অন্য ব্যবহারকারীদেরকে আপনাকে ই-মেইল পাঠানোর অনুমতি দিন।', -'prefs-searchoptions' => 'অনুসন্ধানের পছন্দসমূহ', -'prefs-namespaces' => 'নামস্থানসমূহ', -'defaultns' => 'নতুবা এই নামস্থানগুলিতে অনুসন্ধান করো:', -'default' => 'আদি অবস্থা', -'prefs-files' => 'ফাইল', -'prefs-custom-css' => 'স্বনির্ধারিত CSS', -'prefs-custom-js' => 'স্বনির্ধারিত JS', -'prefs-emailconfirm-label' => 'ই-মেইল নিশ্চিতকরণ:', -'prefs-textboxsize' => 'সম্পাদনা উইন্ডোর আকার', -'youremail' => 'ইমেইল *', -'username' => 'ব্যবহারকারীর নাম:', -'uid' => 'ব্যবহারকারী নং (ID):', -'prefs-memberingroups' => '{{PLURAL:$1|দলের|দলসমূহের}} সদস্য:', -'prefs-registration' => 'নিবন্ধের সময়:', -'yourrealname' => 'আসল নাম *', -'yourlanguage' => 'ভাষা:', -'yourvariant' => 'বিকল্প:', -'yournick' => 'স্বাক্ষর:', -'prefs-help-signature' => 'আলাপ পাতায় আপনার মন্তব্য অবশ্যই "~~~~" চিহ্ন দ্বারা স্বাক্ষরিত হতে হবে, যা স্বয়ংক্রিয়ভাবে আপনার স্বাক্ষর ও সময় সংযুক্ত করবে।', -'badsig' => 'অবৈধ স্বাক্ষর; এইচটিএমএল ট্যাগ পরীক্ষা করুন।', -'badsiglength' => 'আপনার স্বাক্ষরটি বেশ লম্বা। +'preferences' => 'আমার পছন্দ', +'mypreferences' => 'আমার পছন্দ', +'prefs-edits' => 'সম্পাদনার সংখ্যা:', +'prefsnologin' => 'আপনি লগ-ইন করেননি', +'prefsnologintext' => 'ব্যবহারকারীর পছন্দ ঠিক করতে হলে আপনাকে অবশ্যই [{{fullurl:{{#Special:UserLogin}}|returnto=$1}} লগইন] করা অবস্থায় থাকতে হবে।', +'changepassword' => 'শব্দচাবি (password) পরিবর্তন', +'prefs-skin' => 'আবরণ (Skin)', +'skin-preview' => 'প্রাকদর্শন', +'prefs-math' => 'গণিত', +'datedefault' => 'কোন পছন্দ নেই', +'prefs-datetime' => 'তারিখ ও সময়', +'prefs-personal' => 'ব্যবহারকারীর বৃত্তান্ত', +'prefs-rc' => 'সাম্প্রতিক পরিবর্তনসমূহ', +'prefs-watchlist' => 'নজর তালিকা', +'prefs-watchlist-days' => 'যত দিনের নজরতালিকা দেখানো হবে:', +'prefs-watchlist-days-max' => 'সর্বোচ্চ ৭ দিন', +'prefs-watchlist-edits' => 'সম্প্রসারিত নজর তালিকায় সর্বোচ্চ সংখ্যার পরিবর্তন দেখানোর জন্য:', +'prefs-watchlist-edits-max' => 'সর্বোচ্চ নাম্বার: ১০০০', +'prefs-watchlist-token' => 'নজরতালিকা টোকেন:', +'prefs-misc' => 'বিবিধ', +'prefs-resetpass' => 'শব্দচাবি পরিবর্তন', +'prefs-email' => 'ই-মেইল অপশন', +'prefs-rendering' => 'অবয়ব', +'saveprefs' => 'সংরক্ষণ করো', +'resetprefs' => 'অসংরক্ষিত পরিবর্তনগুলো পরিস্কার করো', +'restoreprefs' => 'সকল পূর্বনির্ধারিত সেটিং ফিরিয়ে আনো', +'prefs-editing' => 'সম্পাদনা', +'prefs-edit-boxsize' => 'সম্পাদনা উইন্ডোর আকার।', +'rows' => 'সারি:', +'columns' => 'কলাম:', +'searchresultshead' => 'অনুসন্ধান', +'resultsperpage' => 'প্রতি পাতায় হিট:', +'contextlines' => 'লাইন প্রতি হিটে:', +'contextchars' => 'প্রতি লাইনে কন্‌টেক্সট সংখ্যা:', +'stub-threshold' => 'অসম্পূর্ণ নিবন্ধের সংযোগগুলির বিশেষ ফরম্যাটিঙের সীমা (বাইটে):', +'stub-threshold-disabled' => 'নিস্ক্রিয়', +'recentchangesdays' => 'সাম্প্রতিক পরিবর্তনে দিনসমূহ দেখানোর জন্য:', +'recentchangesdays-max' => 'সর্বোচ্চ $1 {{PLURAL:$1|দিন|দিন}}', +'recentchangescount' => 'সাম্প্রতিক পরিবর্তনে প্রদর্শিত সম্পাদনার সংখ্যা:', +'prefs-help-recentchangescount' => 'এতে সাম্প্রতিক পরিবর্তনসমূহ, পাতার ইতিহাস এবং লগ অন্তর্ভুক্ত।', +'prefs-help-watchlist-token' => 'এই ঘরটি একটি গোপন শব্দ চাবি দ্বারা পূরণ করলে আপনার নজর তালিকার জন্য একটি আরএসএস ফিড তৈরী হবে। যারা এই ঘরের চাবি জানবে তারা আপনার নজর তালিকা দেখতে পারবে, তাই একটি গোপন মান ব্যবহার করুন। এখানে এলোমেলোভাবে তৈরী একটি মান দেখানো হয়েছে যা আপনি ব্যবহার করতে পারেন: $1', +'savedprefs' => 'আপনার পছন্দগুলো সংরক্ষণ করা হয়েছে।', +'timezonelegend' => 'সময় বলয়:', +'localtime' => 'স্থানীয় সময়:', +'timezoneuseserverdefault' => 'ব্যবহারকারী সার্ভার পূর্বনির্ধারিত', +'timezoneuseoffset' => 'অন্য (অফসেট নির্দিষ্ট করুন)', +'timezoneoffset' => 'সময়পার্থক্য¹:', +'servertime' => 'সার্ভারের সময়:', +'guesstimezone' => 'ব্রাউজার থেকে পূরণ করো', +'timezoneregion-africa' => 'আফ্রিকা', +'timezoneregion-america' => 'আমেরিকা', +'timezoneregion-antarctica' => 'এন্টার্টিকা', +'timezoneregion-arctic' => 'আর্কটিক', +'timezoneregion-asia' => 'এশিয়া', +'timezoneregion-atlantic' => 'আটলান্টিক মহাসাগর', +'timezoneregion-australia' => 'অস্ট্রেলিয়া', +'timezoneregion-europe' => 'ইউরোপ', +'timezoneregion-indian' => 'ভারত মহাসাগর', +'timezoneregion-pacific' => 'প্রশান্ত মহাসাগর', +'allowemail' => 'অন্য ব্যবহারকারীদেরকে আপনাকে ই-মেইল পাঠানোর অনুমতি দিন।', +'prefs-searchoptions' => 'অনুসন্ধানের পছন্দসমূহ', +'prefs-namespaces' => 'নামস্থানসমূহ', +'defaultns' => 'নতুবা এই নামস্থানগুলিতে অনুসন্ধান করো:', +'default' => 'আদি অবস্থা', +'prefs-files' => 'ফাইল', +'prefs-custom-css' => 'স্বনির্ধারিত CSS', +'prefs-custom-js' => 'স্বনির্ধারিত JS', +'prefs-common-css-js' => 'সকল ক্ষেত্রের জন্য সিএসএস/জাভাস্ক্রিপ্ট', +'prefs-reset-intro' => 'আপনি এই পাতা ব্যবহার করে আপনার পছন্দসমূহকে সাইটের পূর্বপ্রদত্ত সেটিংসে পরিবর্তন করতে পারেন। +পরিবর্তন করার পর এটা আর ফিরিয়ে আনা যাবে না।', +'prefs-emailconfirm-label' => 'ই-মেইল নিশ্চিতকরণ:', +'prefs-textboxsize' => 'সম্পাদনা উইন্ডোর আকার', +'youremail' => 'ইমেইল *', +'username' => 'ব্যবহারকারীর নাম:', +'uid' => 'ব্যবহারকারী নং (ID):', +'prefs-memberingroups' => '{{PLURAL:$1|দলের|দলসমূহের}} সদস্য:', +'prefs-registration' => 'নিবন্ধের সময়:', +'yourrealname' => 'আসল নাম *', +'yourlanguage' => 'ভাষা:', +'yourvariant' => 'বিকল্প:', +'yournick' => 'স্বাক্ষর:', +'prefs-help-signature' => 'আলাপ পাতায় আপনার মন্তব্য অবশ্যই "~~~~" চিহ্ন দ্বারা স্বাক্ষরিত হতে হবে, যা স্বয়ংক্রিয়ভাবে আপনার স্বাক্ষর ও সময় সংযুক্ত করবে।', +'badsig' => 'অবৈধ স্বাক্ষর; এইচটিএমএল ট্যাগ পরীক্ষা করুন।', +'badsiglength' => 'আপনার স্বাক্ষরটি বেশ লম্বা। যা অবশ্যই $1 {{PLURAL:$1|অক্ষরের|অক্ষরের}} বেশী হতে পারবে না।', -'yourgender' => 'লিঙ্গ:', -'gender-unknown' => 'অনুল্লেখিত', -'gender-male' => 'পুরুষ', -'gender-female' => 'মহিলা', -'email' => 'ই-মেইল', -'prefs-help-realname' => 'আসল নাম দেওয়া অনাবশ্যক। যদি আসল নাম দেন, তবে আপনার কাজের স্বীকৃতি দানে তা ব্যবহার করা হবে।', -'prefs-help-email' => 'ই-মেইল ঠিকানা ঐচ্ছিক, কিন্তু শব্দচাবি ভুলে গেলে, এটি নতুন শব্দচাবি পেতে আপনাকে সুযোগ করে দেবে। +'yourgender' => 'লিঙ্গ:', +'gender-unknown' => 'অনুল্লেখিত', +'gender-male' => 'পুরুষ', +'gender-female' => 'মহিলা', +'email' => 'ই-মেইল', +'prefs-help-realname' => 'আসল নাম দেওয়া অনাবশ্যক। যদি আসল নাম দেন, তবে আপনার কাজের স্বীকৃতি দানে তা ব্যবহার করা হবে।', +'prefs-help-email' => 'ই-মেইল ঠিকানা ঐচ্ছিক, কিন্তু শব্দচাবি ভুলে গেলে, এটি নতুন শব্দচাবি পেতে আপনাকে সুযোগ করে দেবে। আপনার পরিচয় উন্মোচন ছাড়াই অন্যরা আপনার ব্যবহারকারী পাতা অথবা ব্যবহাকারী_আলাপ পাতার মাধ্যমে আপনার সাথে যোগাযোগ করতে পারে, এমনটিও আপনি পছন্দ করতে পারেন।', -'prefs-help-email-required' => 'ই-মেইল ঠিকানা আবশ্যক।', -'prefs-info' => 'সাধারণ তথ্য', -'prefs-i18n' => 'আন্তর্জাতিকিকরণ', -'prefs-signature' => 'স্বাক্ষর', -'prefs-dateformat' => 'তারিখ বিন্যাস', -'prefs-timeoffset' => 'সময় অফসেট', -'prefs-advancedediting' => 'উচ্চতর অপশন', -'prefs-advancedrc' => 'উচ্চতর অপশন', -'prefs-advancedrendering' => 'উচ্চতর অপশন', -'prefs-advancedsearchoptions' => 'উচ্চতর অপশন', -'prefs-advancedwatchlist' => 'উচ্চতর অপশন', -'prefs-display' => 'প্রদর্শনী অপশন', -'prefs-diffs' => 'পার্থক্য', +'prefs-help-email-required' => 'ই-মেইল ঠিকানা আবশ্যক।', +'prefs-info' => 'সাধারণ তথ্য', +'prefs-i18n' => 'আন্তর্জাতিকিকরণ', +'prefs-signature' => 'স্বাক্ষর', +'prefs-dateformat' => 'তারিখ বিন্যাস', +'prefs-timeoffset' => 'সময় অফসেট', +'prefs-advancedediting' => 'উচ্চতর অপশন', +'prefs-advancedrc' => 'উচ্চতর অপশন', +'prefs-advancedrendering' => 'উচ্চতর অপশন', +'prefs-advancedsearchoptions' => 'উচ্চতর অপশন', +'prefs-advancedwatchlist' => 'উচ্চতর অপশন', +'prefs-displayrc' => 'প্রদর্শনী অপশন', +'prefs-displaysearchoptions' => 'প্রদর্শনী অপশন', +'prefs-displaywatchlist' => 'প্রদর্শনী অপশন', +'prefs-diffs' => 'পার্থক্য', + +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'ইমেইল ঠিকানাটি সঠিক', +'email-address-validity-invalid' => 'সঠিক ইমেই ঠিকানা প্রদান করুন', # User rights -'userrights' => 'ব্যবহারকারী অধিকার ব্যবস্থাপনা', -'userrights-lookup-user' => 'ব্যবহারকারী দল ব্যবস্থাপনা করুন', -'userrights-user-editname' => 'ব্যবহারকারীর নাম লিখুন:', -'editusergroup' => 'ব্যবহারকারীর দল সম্পাদনা করো', -'editinguser' => "ব্যবহারকারী সম্পাদনা করছেন '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])", -'userrights-editusergroup' => 'ব্যবহারকারীর দল সম্পাদনা করো', -'saveusergroups' => 'ব্যবহারকারীর দল সংরক্ষণ করো', -'userrights-groupsmember' => 'সদস্য:', -'userrights-groups-help' => 'আপনি এই ব্যবহারকারীর বর্তমান দল পরিবর্তন করতে পারবেন: +'userrights' => 'ব্যবহারকারী অধিকার ব্যবস্থাপনা', +'userrights-lookup-user' => 'ব্যবহারকারী দল ব্যবস্থাপনা করুন', +'userrights-user-editname' => 'ব্যবহারকারীর নাম লিখুন:', +'editusergroup' => 'ব্যবহারকারীর দল সম্পাদনা করো', +'editinguser' => "ব্যবহারকারী সম্পাদনা করছেন '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])", +'userrights-editusergroup' => 'ব্যবহারকারীর দল সম্পাদনা করো', +'saveusergroups' => 'ব্যবহারকারীর দল সংরক্ষণ করো', +'userrights-groupsmember' => 'সদস্য:', +'userrights-groupsmember-auto' => 'শর্তহীন সদস্য', +'userrights-groups-help' => 'আপনি এই ব্যবহারকারীর বর্তমান দল পরিবর্তন করতে পারবেন: * টিক চিহ্ন দেওয়া ঘরের অর্থ ব্যবহারকারী এখন ঐ দলের অন্তর্ভুক্ত। * টিক চিহ্ন বিহীন ঘরের অর্থ ব্যবহারকারী ঐ দলের অন্তর্ভুক্ত নন। * একটি তারকা চিহ্ন (*) দ্বারা বোঝানো হচ্ছে এই দলের অন্তর্ভুক্তির পর আপনি আর তা বাতিল করতে পারবেন না।', -'userrights-reason' => 'কারণ:', -'userrights-no-interwiki' => 'আপনার অন্য উইকিতে ব্যবহারকারী অধিকার সম্পাদনা করার অনুমতি নেই।', -'userrights-nodatabase' => '$1 ডাটাবেজটির হয় কোন অস্তিত্ব নেই অথবা এটি স্থানীয় ডাটাবেজ নয়।', -'userrights-nologin' => 'ব্যবহারকারী অধিকার প্রযুক্ত করতে হলে আপনাকে কোন প্রশাসকের অ্যাকাউন্টে [[Special:UserLogin|প্রবেশ]] করতে হবে।', -'userrights-notallowed' => 'আপনার অ্যাকাউন্ট থেকে ব্যবহারকারী অধিকার প্রযুক্ত করার অনুমতি নেই।', -'userrights-changeable-col' => 'দল যা আপনি পরিবর্তন করতে পারেন', -'userrights-unchangeable-col' => 'দল যা আপনি পরিবর্তন করতে পারবেন না', +'userrights-reason' => 'কারণ:', +'userrights-no-interwiki' => 'আপনার অন্য উইকিতে ব্যবহারকারী অধিকার সম্পাদনা করার অনুমতি নেই।', +'userrights-nodatabase' => '$1 ডাটাবেজটির হয় কোন অস্তিত্ব নেই অথবা এটি স্থানীয় ডাটাবেজ নয়।', +'userrights-nologin' => 'ব্যবহারকারী অধিকার প্রযুক্ত করতে হলে আপনাকে কোন প্রশাসকের অ্যাকাউন্টে [[Special:UserLogin|প্রবেশ]] করতে হবে।', +'userrights-notallowed' => 'আপনার অ্যাকাউন্ট থেকে ব্যবহারকারী অধিকার প্রযুক্ত করার অনুমতি নেই।', +'userrights-changeable-col' => 'দল যা আপনি পরিবর্তন করতে পারেন', +'userrights-unchangeable-col' => 'দল যা আপনি পরিবর্তন করতে পারবেন না', # Groups 'group' => 'দল:', @@ -1156,6 +1177,7 @@ $3-এর দেয়া কারণ হল ''$2''", 'right-mergehistory' => 'পাতার ইতিহাস একীকরণ করুন।', 'right-userrights' => 'সকল ব্যবহারকারী অধিকার সম্পাদনা করুন', 'right-userrights-interwiki' => 'অন্যান্য উইকির ব্যবহারকারীদের অধিকারসমূহ সম্পাদনা করুন।', +'right-siteadmin' => 'ডাটাবেজ বন্ধ এবং খুলুন', 'right-reset-passwords' => 'অন্য ব্যবহারকারীদের শব্দচাবি পুনরায় নির্ধারণ করুন', 'right-override-export-depth' => '৫ম স্তর পর্যন্ত সংযুক্তিসহ একটি পাতা রপ্তানী করুন', 'right-sendemail' => 'অন্য ব্যবহারকারীকে ইমেইল পাঠান', @@ -1205,14 +1227,9 @@ $3-এর দেয়া কারণ হল ''$2''", 'recentchanges-legend' => 'সাম্প্রতিক পরিবর্তনের পছন্দসমূহ', 'recentchangestext' => 'এই পাতায় উইকিটির সবচেয়ে সাম্প্রতিক পরিবর্তনগুলি অনুসরণ করুন।', 'recentchanges-feed-description' => 'এই ফিডে উইকিটির সবচেয়ে সাম্প্রতিক পরিবর্তনগুলি অনুসরণ করুন।', -'recentchanges-label-legend' => 'লিজেন্ড: $1।', -'recentchanges-legend-newpage' => '$1 - নতুন পাতা', 'recentchanges-label-newpage' => 'এই সম্পাদনায় একটি নতুন পাতা তৈরি হয়েছে', -'recentchanges-legend-minor' => '$1 - অনুল্লেখিত সম্পাদনা', 'recentchanges-label-minor' => 'এটি একটি অনুল্লেখিত সম্পাদনা', -'recentchanges-legend-bot' => '$1 - বট সম্পাদনা', 'recentchanges-label-bot' => 'এটি বট দ্বারা সম্পাদিত', -'recentchanges-legend-unpatrolled' => '$1 - অপরীক্ষিত সম্পাদনা', 'recentchanges-label-unpatrolled' => 'এই সম্পাদনাটি এখনও পরীক্ষিত নয়', 'rcnote' => "বিগত {{PLURAL:$2|দিনে|'''$2''' দিনে}} সংঘটিত {{PLURAL:$1|'''১'''|'''$1'''}}টি পরিবর্তন নীচে দেখানো হল (যেখানে বর্তমান সময় ও তারিখ $5, $4)।", 'rcnotefrom' => "'''$2'''-এর পরে সংঘটিত পরিবর্তনগুলো নিচে দেখানো হল ('''$1'''টি)।", @@ -1291,6 +1308,13 @@ $3-এর দেয়া কারণ হল ''$2''", পছন্দনীয় {{PLURAL:\$3|ফাইলের ধরন|ফাইলের ধরনগুলো}} হলো \$2।", 'filetype-banned-type' => "'''\".\$1\"''' ফাইল ধরনটি অনুমোদিত নয়। অনুমোদিত {{PLURAL:\$3|ফাইলের ধরণ|ফাইলের ধরনগুলো}} হল \$2।", 'filetype-missing' => 'এই ফাইলটির কোন এক্সটেনশন নেই (যেমন ".jpg")।', +'empty-file' => 'আপনার জমাকৃত ফাইলটি খালি।', +'file-too-large' => 'আপনার জমাকৃত ফাইলটি অনেক বড়।', +'filename-tooshort' => 'ফাইল নামটি খুব ছোট।', +'illegal-filename' => 'ফাইলের এই নামটি গ্রহণযোগ্য নয়।', +'unknown-error' => 'একটি অজানা ত্রুটি দেখা দিয়েছে।', +'tmp-create-error' => 'অস্থায়ী ফাইল তৈরি করা যাবে না।', +'tmp-write-error' => 'অস্থায়ী ফাইলে লিখতে সমস্যা হয়েছে।', 'large-file' => '$1-এর চেয়ে বড় আকারের ফাইল সুপারিশ করা হয় না; এই ফাইলটি $2।', 'largefileserver' => 'সার্ভারে যতখানি অনুমোদিত তার চেয়ে এই ফাইলের আকার বড়।', 'emptyfile' => 'আপনি যে ফাইলটি আপলোড করেছেন, তা খালি মনে হচ্ছে। ফাইলের নামে টাইপিং ত্রুটির কারণে এরকম হতে পারে। অনুগ্রহ করে পরীক্ষা করে দেখুন আপনি আসলেই এই ফাইলটি আপলোড করতে চান কি না।', @@ -1311,13 +1335,13 @@ $3-এর দেয়া কারণ হল ''$2''", 'fileexists-shared-forbidden' => 'অংশীদারী ফাইল ভাণ্ডারে এই নামের একটি ফাইল ইতিমধ্যেই বিদ্যমান। আপনি যদি এখনো ফাইলটি আপলোড করতে চান, তবে অনুগ্রহপূর্বক পেছনে গিয়ে একটি নতুন নামে ফাইলটি আপলোড করুন।[[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'এই ফাইলটি নিচের {{PLURAL:$1|ফাইল|ফাইলগুলির}} অনুলিপি:', -'successfulupload' => 'আপলোড সফল হয়েছে', 'uploadwarning' => 'আপলোড সতর্কবাণী', 'uploadwarning-text' => 'অনুগ্রহ করে নিচে ফাইলের বর্ণনা পরিবর্তন করে আবার চেষ্টা করুন।', 'savefile' => 'সংরক্ষণ', 'uploadedimage' => '"[[$1]]" আপলোড করা হয়েছে।', 'overwroteimage' => '"[[$1]]"-এর একটি নতুন সংস্করণ আপলোড করা হয়েছে', 'uploaddisabled' => 'আপলোড নিষ্ক্রিয় আছে', +'copyuploaddisabled' => 'ইউআরএল এর মাধ্যমে আপলোড নিস্ক্রিয় রয়েছে।', 'uploaddisabledtext' => 'ফাইল আপলোড নিষ্ক্রিয়।', 'php-uploaddisabledtext' => 'পিএইপি -এ ফাইল আপলোড নিস্ক্রিয় রয়েছে। অনুগ্রহ করে file_uploads সেটিং পরীক্ষা করুন।', @@ -1337,6 +1361,9 @@ $3-এর দেয়া কারণ হল ''$2''", এই ফাইলটি আপলোড করা উচিত কি না বিবেচনা করে দেখুন। ফাইলটির অবলুপ্তি লগ আপনার সুবিধার্থে এখানে দেওয়া হল:", 'filename-bad-prefix' => "আপনি যে ফাইলটি আপলোড করছেন, তার নাম '''\"\$1\"''' দিয়ে শুরু হয়েছে। এ ধরনের নাম সাধারণত ডিজিটাল ক্যামেরাগুলি স্বয়ংক্রিয়ভাবে দিয়ে থাকে এবং এগুলি ব্যাখ্যামূলক নয়। অনুগ্রহ করে আপনার ফাইলের জন্য আরও ব্যাখ্যামূলক একটি নাম পছন্দ করুন।", +'upload-success-subj' => 'আপলোড সফল হয়েছে', +'upload-failure-subj' => 'আপলোড সমস্যা', +'upload-warning-subj' => 'আপলোড সতর্কীকরণ', 'upload-proto-error' => 'ভুল প্রোটোকল', 'upload-proto-error-text' => 'দূরবর্তী আপলোডের জন্য URLগুলি http:// বা ftp:// দিয়ে শুরু হওয়া আবশ্যক।', @@ -1382,6 +1409,7 @@ $3-এর দেয়া কারণ হল ''$2''", 'listfiles_search_for' => 'ছবির নাম অনুসন্ধান:', 'imgfile' => 'ফাইল', 'listfiles' => 'ছবির তালিকা', +'listfiles_thumb' => 'সংক্ষেপচিত্র', 'listfiles_date' => 'তারিখ', 'listfiles_name' => 'নাম', 'listfiles_user' => 'ব্যবহারকারী', @@ -1484,7 +1512,6 @@ $3-এর দেয়া কারণ হল ''$2''", 'statistics-edits-average' => 'প্রতি পাতার গড় সম্পাদনা', 'statistics-views-total' => 'সর্বোমোট প্রদর্শন', 'statistics-views-peredit' => 'প্রতি সম্পাদনায় প্রদর্শন', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue জব কিউয়ের] দৈর্ঘ্য', 'statistics-users' => 'নিবন্ধিত [[Special:ListUsers|ব্যবহারকারী]]', 'statistics-users-active' => 'সক্রিয় ব্যবহারকারী', 'statistics-users-active-desc' => 'ব্যবহারকারী যারা বিগত {{PLURAL:$1|দিনে|$1 দিনে}} একটি কাজ করেছেন।', @@ -1495,7 +1522,8 @@ $3-এর দেয়া কারণ হল ''$2''", 'disambiguations-text' => "নিচের পাতাগুলি থেকে একটি '''দ্ব্যর্থতা নিরসন পাতা'''-তে সংযোগ আছে। এর পরিবর্তে এগুলি থেকে একটি উপযুক্ত বিষয়ে সংযোগ থাকা আবশ্যক।
    যদি কোন পাতায় এমন কোন টেমপ্লেট থাকে যেটিতে [[MediaWiki:Disambiguationspage]] থেকে সংযোগ আছে, তবে সেই পাতাটিকে একটি দ্ব্যর্থতা নিরসন পাতা হিসেবে গণ্য করা হয়।", 'doubleredirects' => 'দুইবার করা পুনর্নির্দেশনাগুলি', -'doubleredirectstext' => 'এই পাতায় এমন পাতাগুলির তালিকা আছে, যেগুলি অন্য পুনর্নির্দেশনা পাতায় পুনর্নির্দেশ করেছে। প্রতিটি সারিতে প্রথম ও দ্বিতীয় পুনর্নির্দেশনার জন্য সংযোগ আছে এবং দ্বিতীয় পুনর্নির্দেশনাটির লক্ষ্য সংযোগটিও দেওয়া আছে। এই লক্ষ্য সংযোগটিই সাধারণত "আসল" লক্ষ্য পাতা, যেটিতে প্রথম পুনর্নির্দেশনাটি থেকে সংযোগ থাকা উচিত।', +'doubleredirectstext' => 'এই পাতায় এমন পাতাগুলোর তালিকা আছে, যেগুলো অন্য কোন পুনর্নির্দেশনা পাতায় পুনর্নির্দেশিত হয়েছে। প্রতিটি সারিতে প্রথম ও দ্বিতীয় পুনর্নির্দেশনার জন্য সংযোগ আছে এবং দ্বিতীয় পুনর্নির্দেশনাটির লক্ষ্য সংযোগটিও দেওয়া আছে। এই লক্ষ্য সংযোগটিই সাধারণত "আসল" লক্ষ্য পাতা, যেটিতে প্রথম পুনর্নির্দেশনাটি থেকে সংযোগ থাকা উচিত। +কেটে দেওয়া ভুক্তিগুলো ঠিক করা হয়েছে।', 'double-redirect-fixed-move' => '[[$1]] সরিয়ে নেওয়া হয়েছে। এটি এখন [[$2]] এ পুনঃনির্দেশিত হয়েছে।', 'double-redirect-fixer' => 'পুনঃনির্দেশনা মেরামতকারী', @@ -1519,6 +1547,8 @@ $3-এর দেয়া কারণ হল ''$2''", 'nmembers' => '$1 {{PLURAL:$1|সদস্য|সদস্যবৃন্দ}}', 'nrevisions' => '$1 {{PLURAL:$1|সংশোধন|সংশোধনসমূহ}}', 'nviews' => '$1 {{PLURAL:$1|বার দেখা হয়েছে|বার দেখা হয়েছে}}', +'nimagelinks' => '$1 {{PLURAL:$1|টি পাতায়| টি পাতায়}} ব্যবহৃত', +'ntransclusions' => '$1 {{PLURAL:$1|টি পাতায়| টি পাতায়}} ব্যবহৃত', 'specialpage-empty' => 'এই রিপোর্টের জন্য কোন ফলাফল নেই।', 'lonelypages' => 'পিতৃহীন পাতা', 'lonelypagestext' => 'নিচের পাতাগুলো {{SITENAME}} থেকে সংযোগকৃত বা প্রতিলিপ্ত হয়নি।', @@ -1670,6 +1700,7 @@ $3-এর দেয়া কারণ হল ''$2''", আপনি [[Special:Preferences|আপনার ব্যবহারকারী পছন্দে]] যে ই-মেইল ঠিকানাটি প্রবেশ করিয়েছেন সেটিকে ই-মেইলের প্রেরক হিসেবে দেখানো হবে, যেনো মেইলের প্রাপক আপনাকে উত্তর দিতে পারেন।', 'usermailererror' => 'মেইল অবজেক্ট ত্রুটি পাঠিয়েছে:', 'defemailsubject' => '{{SITENAME}} ই-মেইল', +'usermaildisabled' => 'ব্যবহারকারী ই-মেইল নিস্ক্রিয়', 'noemailtitle' => 'ই-মেইল ঠিকানা নেই', 'noemailtext' => 'এই ব্যবহারকারী কোন বৈধ ই-মেইল ঠিকানা জানাননি।', 'nowikiemailtitle' => 'কোন ইমেইল অনুমোদিত নয়', @@ -1685,10 +1716,14 @@ $3-এর দেয়া কারণ হল ''$2''", 'emailsenttext' => 'আপনার ই-মেইল বার্তা প্রেরণ করা হয়েছে।', 'emailuserfooter' => 'এই ই-মেইলটি {{SITENAME}} সাইটের "ই-মেইল করুন" সুবিধা ব্যবহার করে $1-এর পক্ষ থেকে $2-এর নিকট পাঠানো হয়েছে।', +# User Messenger +'usermessage-summary' => 'বাদবাকি সিস্টেম বার্তা', +'usermessage-editor' => 'সিস্টেম ম্যাসেঞ্জার', + # Watchlist 'watchlist' => 'আমার নজর তালিকা', 'mywatchlist' => 'আমার নজর তালিকা', -'watchlistfor' => "('''$1''' এর জন্য)", +'watchlistfor2' => '$1 ($2)-এর জন্য', 'nowatchlist' => 'আপনার নজরতালিকা খালি।', 'watchlistanontext' => 'আপনার নজরতালিকার আইটেমগুলি দেখতে বা সম্পাদনা করতে অনুগ্রহ করে $1।', 'watchnologin' => 'আপনি এখনও লগ-ইন করেননি।', @@ -1815,7 +1850,10 @@ $UNWATCHURL 'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|আলাপ]]) এর সম্পাদিত সংস্করণ হতে [[User:$1|$1]] এর সম্পাদিত সর্বশেষ সংস্করণে ফেরত যাওয়া হয়েছে।', 'revertpage-nouser' => '(ব্যবহারকারী নাম অপসারিত) কর্তৃক সম্পাদিত সম্পাদনাটি বাতিলপূর্বক [[User:$1|$1]]-এর সর্বশেষ সম্পাদনায় ফেরত যাওয়া হয়েছে।', 'rollback-success' => '$1-এর সম্পাদনাগুলি পূর্বাবস্থায় ফিরিয়ে নেওয়া হয়েছে; $2-এর করা শেষ সংস্করণে পাতাটি ফেরত নেওয়া হয়েছে।', -'sessionfailure' => 'আপনার লগ ইন সেশনে একটি সমস্যা হয়েছে বলে মনে হচ্ছে; + +# Edit tokens +'sessionfailure-title' => 'সেশন পরিত্যক্ত', +'sessionfailure' => 'আপনার লগ ইন সেশনে একটি সমস্যা হয়েছে বলে মনে হচ্ছে; সেশন হাইজ্যাক প্রতিরোধের উপায় হিসেবে এই কাজটি বাতিল করা হয়েছে। অনুগ্রহ ব্রাউজারের "back" বোতাম চাপুন এবং যে পাতা থেকে এসেছিলেন, তা রিলোড করুন এবং আবার চেষ্টা করুন।', @@ -1937,19 +1975,23 @@ $1', 'month' => 'এই মাস (বা তার আগে) থেকে:', 'year' => 'এই বছর (এবং তার আগে) থেকে:', -'sp-contributions-newbies' => 'শুধু নতুন অ্যাকাউন্টের অবদানসমূহ দেখাও', -'sp-contributions-newbies-sub' => 'নতুন অ্যাকাউন্টের জন্য', -'sp-contributions-newbies-title' => 'নতুন অ্যাকাউন্টের ব্যবহারকারী অবদান', -'sp-contributions-blocklog' => 'বাধা দানের লগ', -'sp-contributions-deleted' => 'মুছে ফেলা ব্যবহারকারী অবদান', -'sp-contributions-logs' => 'লগসমূহ', -'sp-contributions-talk' => 'আলোচনা', -'sp-contributions-userrights' => 'ব্যবহারকারী অধিকার ব্যবস্থাপনা', -'sp-contributions-blocked-notice' => 'এই ব্যবহারকারী বর্তমানে বাধাদানকৃত অবস্থায় রয়েছেন। +'sp-contributions-newbies' => 'শুধু নতুন অ্যাকাউন্টের অবদানসমূহ দেখাও', +'sp-contributions-newbies-sub' => 'নতুন অ্যাকাউন্টের জন্য', +'sp-contributions-newbies-title' => 'নতুন অ্যাকাউন্টের ব্যবহারকারী অবদান', +'sp-contributions-blocklog' => 'বাধা দানের লগ', +'sp-contributions-deleted' => 'মুছে ফেলা ব্যবহারকারী অবদান', +'sp-contributions-uploads' => 'আপলোডসমূহ', +'sp-contributions-logs' => 'লগসমূহ', +'sp-contributions-talk' => 'আলোচনা', +'sp-contributions-userrights' => 'ব্যবহারকারী অধিকার ব্যবস্থাপনা', +'sp-contributions-blocked-notice' => 'এই ব্যবহারকারী বর্তমানে বাধাদানকৃত অবস্থায় রয়েছেন। তথ্যসূত্র হিসেবে সাম্প্রতিক বাধাদান লগে ভুক্তিটি নিচে দেওয়া হলো:', -'sp-contributions-search' => 'অবদানসমূহের জন্য অনুসন্ধান', -'sp-contributions-username' => 'আইপি (IP) ঠিকানা অথবা ব্যবহারকারীর নাম:', -'sp-contributions-submit' => 'অনুসন্ধান', +'sp-contributions-blocked-notice-anon' => 'এই আইপি ঠিকানাটি বর্তমানে বাধাদানকৃত অবস্থায় রয়েছে। +তথ্যসূত্র হিসেবে সাম্প্রতিক বাধাদান লগের ভুক্তিটি নিচে দেওয়া হলো:', +'sp-contributions-search' => 'অবদানসমূহের জন্য অনুসন্ধান', +'sp-contributions-username' => 'আইপি (IP) ঠিকানা অথবা ব্যবহারকারীর নাম:', +'sp-contributions-toponly' => 'শুধুমাত্র সেই সম্পাদনাগুলি দেখেও যেগুলো সাম্প্রতিক সংস্করণের অন্তর্ভুক্ত।', +'sp-contributions-submit' => 'অনুসন্ধান', # What links here 'whatlinkshere' => 'সংযোগকারী পাতাসমূহ', @@ -2010,7 +2052,6 @@ $1', 'ipb-edit-dropdown' => 'বাধাদানের কারণ সম্পাদনা করুন', 'ipb-unblock-addr' => '$1-এর উপর থেকে বাধা তুলে নেওয়া হোক', 'ipb-unblock' => 'ব্যবহারকারী বা আইপি ঠিকানার উপর থেকে বাধা তুলে নেওয়া হোক', -'ipb-blocklist-addr' => '$1-এর জন্য বিদ্যমান ব্লকগুলো দেখুন', 'ipb-blocklist' => 'বিদ্যমান বাধাগুলি দেখুন', 'ipb-blocklist-contribs' => '$1 এর অবদানসমূহ', 'unblockip' => 'ব্যবহারকারীর উপর থেকে বাধা তুলে নেওয়া হোক', @@ -2293,6 +2334,8 @@ $1', 'tooltip-upload' => 'আপলোড শুরু করো', 'tooltip-rollback' => '"পুনর্বহাল" এই পাতায় সর্বশেষ অবদানকারীর সম্পাদনাসমূহ বাতিল করে পাতাটিকে পূর্বাবস্থায় ফিরিয়ে দেয়', 'tooltip-undo' => '"বাতিল" এই সম্পাদনাকে পূর্ববস্থায় ফিরত নিবে এবং প্রাকদর্শন সহ সম্পাদনা ফরমটি খুলবে। এটি সম্পাদনা সারাংশতে এর কারণ যোগ করার সুযোগ দিবে।', +'tooltip-preferences-save' => 'পছন্দ সংরক্ষণ', +'tooltip-summary' => 'একটি সংক্ষিপ্ত সারাংশ দিন', # Metadata 'nodublincore' => 'Dublin Core RDF metadata এই সার্ভারের জন্য নিষ্ক্রিয়।', @@ -2384,10 +2427,10 @@ $1', 'imagemaxsize' => 'ছবির বিবরণ পাতায় প্রদর্শিত ছবির আকারের সর্বোচ্চ সীমা:', 'thumbsize' => 'থাম্বনেইল আকার:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$1|পাতাট|পাতাগুলো}}', -'file-info' => '(ফাইলের আকার: $1, MIME ধরণ: $2)', -'file-info-size' => '($1 × $2 pixel, ফাইলের আকার: $3, MIME ধরণ: $4)', +'file-info' => 'ফাইলের আকার: $1, MIME ধরণ: $2', +'file-info-size' => '$1 × $2 pixel, ফাইলের আকার: $3, MIME ধরণ: $4', 'file-nohires' => 'এর চেয়ে বেশি রেজোলিউশন লভ্য নয়।', -'svg-long-desc' => '(SVG ফাইল, সাধারণত $1 × $2 pixels, ফাইলের আকার: $3)', +'svg-long-desc' => 'SVG ফাইল, সাধারণত $1 × $2 pixels, ফাইলের আকার: $3', 'show-big-image' => 'পূর্ণ রেজোলিউশন', 'show-big-image-thumb' => 'আকারের প্রাকদর্শন: $1 × $2 pixels', 'file-info-gif-frames' => '$1 {{PLURAL:$1|ফ্রেম|ফ্রেম}}', @@ -2543,6 +2586,7 @@ $1', 'exif-gpsareainformation' => 'GPS এলাকার নাম', 'exif-gpsdatestamp' => 'GPS তারিখ', 'exif-gpsdifferential' => 'GPS ডিফারেনশিয়াল সংশোধন', +'exif-objectname' => 'সংক্ষিপ্ত শিরোনাম', # EXIF attributes 'exif-compression-1' => 'অসংকুচিত', @@ -2818,6 +2862,7 @@ $1', 'version-specialpages' => 'বিশেষ পাতাসমূহ', 'version-parserhooks' => 'পার্সার হুক', 'version-variables' => 'চলক', +'version-skins' => 'আবরণসমূহ (Skin)', 'version-other' => 'অন্য', 'version-hooks' => 'হুক', 'version-extension-functions' => 'এক্সটেনশনের কাজ', @@ -2828,6 +2873,8 @@ $1', 'version-hook-subscribedby' => 'সাবস্ক্রাইব করেছেন', 'version-version' => '(সংস্করণ $1)', 'version-license' => 'লাইসেন্স', +'version-poweredby-credits' => "এইক উইকিটি পরিচালিত হচ্ছে '''[http://www.mediawiki.org/ মিডিয়াউইকি]'''-এর মাধ্যমে, কপিরাইট © ২০০১-$1 $2।", +'version-poweredby-others' => 'অন্যান্য', 'version-software' => 'ইনস্টলকৃত সফটওয়্যার', 'version-software-product' => 'পণ্য', 'version-software-version' => 'সংস্করণ', @@ -2877,6 +2924,15 @@ $1', 'tags-edit' => 'সম্পাদনা', 'tags-hitcount' => '$1 {{PLURAL:$1|পরিবর্তন|পরিবর্তনসমূহ}}', +# Special:ComparePages +'comparepages' => 'পাতার তুলনা', +'compare-selector' => 'পাতার সংশোধন তুলনা', +'compare-page1' => 'পাতা ১', +'compare-page2' => 'পাতা ২', +'compare-rev1' => 'সংশোধন ১', +'compare-rev2' => 'সংশোধন ২', +'compare-submit' => 'তুলনা', + # Database error messages 'dberr-header' => 'এই উইকিতে কোন সমস্যা রয়েছে', 'dberr-problems' => 'দুঃখিত! @@ -2889,6 +2945,7 @@ $1', # HTML forms 'htmlform-invalid-input' => 'আপনার প্রদানকৃত ইনপুটে সমস্যা রয়েছে', +'htmlform-required' => 'মান প্রদান করা আবশ্যক।', 'htmlform-submit' => 'জমা দাও', 'htmlform-reset' => 'পরিবর্তন বাতিল', 'htmlform-selectorother-other' => 'অন্য', diff --git a/languages/messages/MessagesBo.php b/languages/messages/MessagesBo.php index 5a3d6ba7..1c7aba1a 100644 --- a/languages/messages/MessagesBo.php +++ b/languages/messages/MessagesBo.php @@ -35,6 +35,7 @@ $messages = array( 'tog-usenewrc' => 'ཡར་རྒྱས་ཅན་གྱི་ཉེ་བའི་བཟོ་བཅོས་བེད་སྤྱོད་པ།(Java ཡི་བརྡ་ཆད་དགོས)', 'tog-showtoolbar' => 'རྩོམ་སྒྲིག་ལག་ཆ་སྟོན།(Java ཡི་བརྡ་ཆད་དགོས།)', 'tog-editondblclick' => 'ཤོག་ངོས་རྩོམ་སྒྲིག་བྱེད་པར་ལན་གཉིས་རྡེབ།(Java ཡི་བརྡ་ཆད་དགོས།)', +'tog-rememberpassword' => 'ངའི་ནང་འཛུལ་བཤར་ལྟ་ཆས་འདི་རུ་མང་མཐའ་ཉིན $1 {{PLURAL:$1}} དྲན་པར་མཛོད།', 'tog-watchcreations' => 'ངའི་ལྟ་ཐོའི་གྲས་སུ་གསར་བཟོ་བྱས་པ་ལ་ཤོག་ངོས་ཁ་སྣོན།', 'tog-watchdefault' => 'ངའི་ལྟ་ཐོའི་གྲས་སུ་རྩོམ་སྒྲིག་བྱས་པ་ལ་ཤོག་ངོས་ཁ་སྣོན།', 'tog-watchmoves' => 'ངའི་ལྟ་ཐོའི་གྲས་སུ་སྤོར་བ་ལ་ཤོག་ངོས་ཁ་སྣོན།', @@ -123,6 +124,7 @@ $messages = array( 'hidden-category-category' => 'སྦས་བའི་སྡེ་ཚན།', 'about' => 'སྐོར།', +'article' => 'ནང་དོན་ཤོག་ངོས།', 'newwindow' => '(སྒེའུ་ཁུང་གསར་བར་ཕྱེ་བ།)', 'cancel' => 'རྩིས་མེད།', 'moredotdotdot' => 'དེ་ལས་མང་བ་་་', @@ -135,6 +137,7 @@ $messages = array( 'qbfind' => 'འཚོལ་བ།', 'qbedit' => 'རྩོམ་སྒྲིག', 'qbpageoptions' => 'ཤོག་ངོས་འདི།', +'qbpageinfo' => 'འབྲེལ་ཆགས།', 'qbmyoptions' => 'ངའི་ཤོག་ངོས།', 'qbspecialpages' => 'དམིཊ་བསལ་གྱི་བཟོ་བཅོས།', 'faq' => 'རྒྱུན་ལྡན་དྲི་བ།', @@ -180,6 +183,7 @@ $messages = array( 'protect' => 'སྲུང་བ།', 'protect_change' => 'སྒྱུར་བཅོས།', 'protectthispage' => 'ཤོག་ངོས་འདི་སྲུང་བ།', +'unprotect' => 'ཉེན་སྲུང་མེད་པ།', 'unprotectthispage' => 'ཤོག་ངོས་འདི་སྲུང་བ་དོར་བ།', 'newpage' => 'ཤོག་ངོས་གསར་བ།', 'talkpage' => 'ཤོག་ངོས་འདིར་གྲོས་སྡུར།', @@ -187,6 +191,7 @@ $messages = array( 'specialpage' => 'དམིགས་གསལ་ཤོག་ངོས།', 'personaltools' => 'སྒེར་ཀྱི་ལག་ཆ།', 'postcomment' => 'སྡེ་ཚན་གསར་བ།', +'articlepage' => 'ནང་དོན་ཤོག་ངོས་ལ་ལྟ་བ།', 'talk' => 'གྲོས་བསྡུར།', 'views' => 'མཐོང་རིས།', 'toolbox' => 'ལག་ཆའི་སྒྲོམ།', @@ -200,11 +205,13 @@ $messages = array( 'viewtalkpage' => 'གྲོས་མོལ་ལ་ལྟ་བ།', 'otherlanguages' => 'སྐད་རིགས་གཞན།', 'redirectedfrom' => '$1 ནས་ཁ་ཕྱོགས་བསྐྱར་དུ་བཟོས་པ།', +'redirectpagesub' => 'རིམ་འགྲེམ་ཤོག་ངོས།', 'lastmodifiedat' => 'དྲ་ངོས་འདི་ཡི་བཟོ་བཅོས་མཐའ་མ་$1$2སྟེང་རེད།', 'protectedpage' => 'སྲུང་སྐྱོབ་བྱས་པའི་ཤོག་ངོས།', 'jumpto' => 'གནས་སྤོ།', 'jumptonavigation' => 'ཕྱོགས་ཁྲིད།', 'jumptosearch' => 'འཚོལ།', +'pool-errorunknown' => 'ངོས་མ་ཟིན་པའི་ནོར་འཁྲུལ།', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}}ངེད་ཀྱི་སྐོར།', @@ -244,6 +251,8 @@ $messages = array( 'viewdeleted' => ' $1 ལ་ལྟའམ།', 'site-rss-feed' => '$1 ཡི་RSS འབྱུང་ཁུངས།', 'site-atom-feed' => '$1 ཡི་Atom འབྱུང་ཁུངས།', +'page-rss-feed' => '$1 ཡི་RSS འབྱུང་ཁུངས།', +'page-atom-feed' => '$1 ཡི་Atom འབྱུང་ཁུངས།', 'red-link-title' => '$1 ( ཤོག་ངོས་མེད་པ།)', # Short words for each namespace, by default used in the namespace tab in monobook @@ -258,18 +267,23 @@ $messages = array( 'nstab-category' => 'དཀར་ཆག', # Main script and global functions -'nosuchaction' => 'བྱ་འགུལ་འདི་འདྲ་མེད།', +'nosuchaction' => 'བྱ་འགུལ་འདི་འདྲ་མེད།', +'nosuchspecialpage' => 'དམིགས་བསལ་ཤོག་ངོས་འདི་འདྲ་ཞིག་མི་འདུག', # General errors -'error' => 'ནོར་འཁྲུལ།', -'readonly' => 'གཞི་གྲངས་མཛོད་ཟྭ་བརྒྱབ་པ།', -'internalerror' => 'ནང་ལོག་ནོར་སྐྱོན།', -'internalerror_info' => 'ནང་ལོགས་ནོར་སྐྱོན། $1', -'filecopyerror' => '"$1" "$2"ལ་འདྲ་བཤུ་བྱེད་མ་ཐུབ།', -'filedeleteerror' => '"$1"ཟེར་བ་སུབ་མ་ཐུབ།', -'filenotfound' => '"$1"ཟེར་བའི་ཡིག་ཆ་མ་རྙེད་པ།', -'badtitle' => 'ཁ་བྱང་སྐྱོན་ཅན།', -'viewsource' => 'ཁོངས་ལ་ལྟ་བ།', +'error' => 'ནོར་འཁྲུལ།', +'readonly' => 'གཞི་གྲངས་མཛོད་ཟྭ་བརྒྱབ་པ།', +'internalerror' => 'ནང་ལོག་ནོར་སྐྱོན།', +'internalerror_info' => 'ནང་ལོགས་ནོར་སྐྱོན། $1', +'filecopyerror' => '"$1" "$2"ལ་འདྲ་བཤུ་བྱེད་མ་ཐུབ།', +'filedeleteerror' => '"$1"ཟེར་བ་སུབ་མ་ཐུབ།', +'filenotfound' => '"$1"ཟེར་བའི་ཡིག་ཆ་མ་རྙེད་པ།', +'badtitle' => 'ཁ་བྱང་སྐྱོན་ཅན།', +'viewsource' => 'ཁོངས་ལ་ལྟ་བ།', +'actionthrottled' => 'བྱ་འགུལ་ཁེགས་སོང་།', +'namespaceprotected' => "ཁྱེད་ལ་'''$1''' མིང་གནས་ནང་གི་ཤོག་ངོས་བཟོ་བཅོས་ཀྱི་ཆོག་མཆན་མེད།", +'customcssjsprotected' => 'ཤོག་ངོས་འདིར་སྤྱོད་མི་གཞན་པའི་སྒེར་གྱི་སྒྲིག་འཇུག་ཚུད་ཡོད་པས་ཁྱེད་ལ་བཟོ་བཅོས་ཀྱི་ཆོག་མཆན་མེད།', +'ns-specialprotected' => 'དམིགས་བསམ་ཤོག་ངོས་རྣམས་བཟོ་བཅོས་བྱེད་མི་ཐུབ།', # Virus scanner 'virus-unknownscanner' => 'ངོས་མ་ཟིན་པའི་དྲ་འབུ།', @@ -278,7 +292,7 @@ $messages = array( 'yourname' => 'སྤྱོད་མིང་།', 'yourpassword' => 'ལམ་ཡིག', 'yourpasswordagain' => 'ལམ་ཡིག་སྐྱར་གཏགས་བྱོས།', -'remembermypassword' => 'ངའི་དྲ་མིང་འདིར་གསོག་པ།', +'remembermypassword' => 'ངའི་ལམ་ཡིག་འདིར་(མང་མཐའ་ཉིན $1 {{PLURAL:$1}}) དྲན་པར་བྱས།', 'login' => 'ནང་འཛུལ།', 'nav-login-createaccount' => 'ནང་འཛུལ། / ཐོ་འགོད།', 'userlogin' => 'ནང་འཛུལ། / ཐོ་འགོད།', @@ -290,6 +304,7 @@ $messages = array( 'createaccount' => 'ཐོ་འགོད།', 'gotaccountlink' => 'ནང་འཛུལ།', 'createaccountmail' => 'གློག་འཕྲིན་སྤྱད་དེ།', +'createaccountreason' => 'རྒྱུ་མཚན།', 'badretype' => 'ལམ་ཡིག་གང་བཅུག་པ་ཐོ་ཐུག་མ་བྱུང་།', 'userexists' => 'མིང་འདི་བེད་སྤྱོད་བྱས་ཟིན་པས་མིང་གཞན་ཞིག་གདམ་རོགས།', 'loginerror' => 'ནང་འཛུལ་ནོར་སྐྱོན།', @@ -341,6 +356,7 @@ $messages = array( 'showlivepreview' => 'ད་ཡོད་སྔོན་ལྟ།', 'showdiff' => 'བཟོས་བཅོས་སྟོན།', 'anoneditwarning' => "'''གསལ་བརྡ།''' ཁྱེད་ཐོ་འཛུལ་བྱས་མི་འདུག ཁྱེད་ཀྱི་ IP ཁ་བྱང་ཤོག་ངོས་འདིའི་རྩོམ་སྒྲིག་ལོ་རྒྱུས་སུ་ཉར་ཚགས་བྱས་པར་འགྱུར།", +'anonpreviewwarning' => '༼ཁྱེད་རང་ཐོ་འཛུལ་བྱས་མི་འདུག ཉར་ཚགས་ཀྱིས་ཁྱེད་ཀྱི་ IP ཁ་བྱང་ཤོག་ངོས་འདིའི་རྩོམ་སྒྲིག་ལོ་རྒྱུས་སུ་ཉར་ཚགས་བྱས་པར་འགྱུར།༽', 'summary-preview' => 'བསྡུས་དོན་སྔོན་ལྟ།', 'subject-preview' => 'བརྗོད་གཞི་དང་འགོ་བརྗོད་སྔོན་ལྟ།', 'blockedtitle' => 'སྤྱོད་མི་བཀག་ཟིན།', @@ -409,7 +425,7 @@ $messages = array( 'searchprofile-project-tooltip' => '$1ནང་དུ་འཚོལ་བ།', 'searchprofile-images-tooltip' => 'ཡིག་ཆ་འཚོལ་བ།', 'search-result-size' => '$1({{PLURAL:$2|1 word|$2 words}})', -'search-redirect' => 'ཁ་ཕྱོགས་བསྐྱར་བཟོ།', +'search-redirect' => '($1རིམ་འགྲེམ།)', 'search-section' => '(ཚན་པ $1)', 'search-suggest' => '$1 ལ་ཟེར་བ་ཡིན་ནམ།', 'search-interwiki-caption' => 'སྲིང་མོའི་ལས་འཆར།', @@ -502,6 +518,7 @@ $messages = array( 'rclistfrom' => '$1 ལས་འགོ་བཙུགས་ཏེ་འགྱུར་བཅོས་གསར་བ་སྟོན་ཅིག', 'rcshowhideminor' => '$1 རྩོམ་སྒྲིག་ཕལ་བ།', 'rcshowhideliu' => 'ཐོ་འཛུལ་བྱས་པའི་སྤྱོད་མི་ $1', +'rcshowhideanons' => 'མིང་མེད་སྤྱོད་མི $1', 'rcshowhidemine' => '$1ངའི་རྩོམ་སྒྲིག', 'rclinks' => 'འདས་བའི་ཉིན་ $2
    $3 ནང་ཚུན་གྱི་བཟོ་བཅོས་གཞུག་མ་ $1 སྟོན་ཅིག', 'diff' => 'མི་འདྲ་ས།', @@ -536,6 +553,9 @@ $messages = array( 'ignorewarning' => 'ཉེན་བརྡ་སྣང་མེད་བཏང་ནས་ཡིག་ཆ་ཉོར་ཅིག', 'ignorewarnings' => 'ཉེན་བརྡ་ཅི་ཡོད་སྣང་མེད་ཐོངས་ཤིག', 'badfilename' => 'ཡིག་ཆའི་མིང་"$1"ལ་བསྒྱུར་ཟིན།', +'filename-tooshort' => 'ཡིག་ཆའི་མིང་ཐུང་དྲགས་འདུག', +'filetype-banned' => 'ཡིག་ཆ་འདིའི་རིགས་བཀག་སྡོམ་བྱས་འདུག', +'illegal-filename' => 'ཡིག་ཆའི་མིང་འདི་ལ་ཆོག་མཆན་མི་འདུག', 'uploadwarning' => 'ཡར་འཇུག་སྔོན་བརྡ།', 'savefile' => 'ཡིག་ཆ་ཉོར་ཅིག', 'uploadedimage' => '"[[$1]]"ཡར་འཇུག་བྱས་ཟིན།', @@ -675,6 +695,7 @@ $messages = array( 'protect-level-sysop' => 'དོ་དམ་པ་ཁོ་ནར།', 'protect-cantedit' => 'ཁྱོད་ལ་ཤོག་ངོས་འདི་རྩོམ་སྒྲིག་གི་ཆོག་མཆན་མེད་པས་ངོས་འདི་ཡི་སྲུང་སྐྱོབ་རིམ་པ་ལ་བཟོ་བཅོས་བྱེད་མི་ཆོག', 'restriction-type' => 'ཆོག་མཆན།', +'restriction-level' => 'དམ་བསྒྲགས་ཚད་རིམ།', # Restrictions (nouns) 'restriction-edit' => 'རྩོམ་སྒྲིག', @@ -771,6 +792,8 @@ $messages = array( 'tooltip-n-help' => 'གང་དུ་འཚོལ་བའི་གནས།', 'tooltip-t-whatlinkshere' => 'འདི་ལ་སྦྲེལ་བའི་ཝེ་ཁེ་ཤོག་ངོས་ཡོངས་རྫོགས།', 'tooltip-t-recentchangeslinked' => 'ངོས་འདི་དང་འབྲེལ་བའི་ཉེ་བའི་བཟོ་བཅོས།', +'tooltip-feed-rss' => 'ཤོག་ངོས་འདིའི་RSS འབྱུང་ཁུངས།', +'tooltip-feed-atom' => 'ཤོག་ངོས་འདིའི་Atom འབྱུང་ཁུངས།', 'tooltip-t-contributions' => 'བཀོལ་མི་འདིའི་བྱས་རྗེས་སྟོན།', 'tooltip-t-emailuser' => 'སྤྱོད་མི་འདིར་དྲ་འཕྲིན་སྐུར་བ།', 'tooltip-t-upload' => 'ཡིག་ཆ་ཡར་འཇུག', @@ -793,6 +816,9 @@ $messages = array( 'previousdiff' => '← རྩོམ་སྒྲིག་རྙིང་བ།', 'nextdiff' => 'རྩོམ་སྒྲིག་གསར་གྲས། →', +# Media information +'show-big-image' => 'གཏན་འབེབ་ཆ་ཚང་།', + # Special:NewFiles 'ilsubmit' => 'འཚོལ།', diff --git a/languages/messages/MessagesBpy.php b/languages/messages/MessagesBpy.php index 22bec868..348048e1 100644 --- a/languages/messages/MessagesBpy.php +++ b/languages/messages/MessagesBpy.php @@ -11,7 +11,7 @@ * @author Uttam Singha, Dec 2006 */ -$fallback='bn'; +$fallback = 'bn'; $digitTransformTable = array( '0' => '০', @@ -61,8 +61,7 @@ $messages = array( 'tog-editsection' => '[পতিক] লিঙ্ক এহান্ন পরিচ্ছদ পতানি অক', 'tog-editsectiononrightclick' => 'পরিচ্ছদ পতানির য়্যাথাঙহান বাতেদের গোথামগ
    পরিচ্ছদর চিঙনাঙর গজে যাতিলে দে (জাভাস্ক্রিপ্ট)', 'tog-showtoc' => 'বিষয়র মাঠেলহানি দেহাদে (যে পাতারতা ৩হানর গজে চিঙনাঙ আসে)', -'tog-rememberpassword' => 'কম্পিউটার এহাত মর লগইন নিঙশিঙে থ', -'tog-editwidth' => 'আস্তা পর্দাহান বুজানিরকা পতানির বাক্সগ সালকর', +'tog-rememberpassword' => 'আহার গজে সেশনর কা খন্তাচাবি মনে থ(সর্বোচ্চ $1 {{PLURAL:$1|দিনর|দিনর}} কা)', 'tog-watchcreations' => 'যে পতাহানি মি ইকরিসু অতা মর তালাবির তালিকাত থ', 'tog-watchdefault' => 'যে পতাহানি মি পতাসু অতা মর তালাবির তালিকাত থ', 'tog-watchmoves' => 'যে পতাহানি মি থেইকরিসু অতা মর তালাবির তালিকাত থ', @@ -208,31 +207,21 @@ $messages = array( 'faqpage' => 'Project:আঙলাক', # Vector skin -'vector-action-addsection' => 'বিষয় তিলকর', -'vector-action-delete' => 'পুসে বেলা', -'vector-action-move' => 'থেইকর', -'vector-action-protect' => 'লুকর', -'vector-action-undelete' => 'নাপুসি', -'vector-action-unprotect' => 'নালুকরি', -'vector-namespace-category' => 'বিষয়র থাক', -'vector-namespace-help' => 'পাঙলাক পাতা', -'vector-namespace-image' => 'ফাইল', -'vector-namespace-main' => 'পাতা', -'vector-namespace-media' => 'মিডিয়া পাতা', -'vector-namespace-mediawiki' => 'পৌ', -'vector-namespace-project' => 'প্রকল্প পাতা', -'vector-namespace-special' => 'বিশেষ পাতা', -'vector-namespace-talk' => 'য়্যারি', -'vector-namespace-template' => 'মডেল', -'vector-namespace-user' => 'আতাকুরার পাতা', -'vector-view-create' => 'হঙকরিক', -'vector-view-edit' => 'পতানি', -'vector-view-history' => 'ইতিহাস চেইক', -'vector-view-view' => 'পাকরিক', -'vector-view-viewsource' => 'সোর্স চেইক', -'actions' => 'কার্যক্রম', -'namespaces' => 'নাঙরলাম', -'variants' => 'ভেরিয়েন্টহানি', +'vector-action-addsection' => 'বিষয় তিলকর', +'vector-action-delete' => 'পুসে বেলা', +'vector-action-move' => 'থেইকর', +'vector-action-protect' => 'লুকর', +'vector-action-undelete' => 'নাপুসি', +'vector-action-unprotect' => 'নালুকরি', +'vector-simplesearch-preference' => 'বিসারানির কা পরামর্শ থা করেই (হুদ্দা ভেক্টর স্কিনর কা)', +'vector-view-create' => 'হঙকরিক', +'vector-view-edit' => 'পতানি', +'vector-view-history' => 'ইতিহাস চেইক', +'vector-view-view' => 'পাকরিক', +'vector-view-viewsource' => 'সোর্স চেইক', +'actions' => 'কার্যক্রম', +'namespaces' => 'নাঙরলাম', +'variants' => 'ভেরিয়েন্টহানি', 'errorpagetitle' => 'লাল', 'returnto' => '$1-ত আলথকে যাগা।', @@ -453,7 +442,7 @@ $2', 'yourname' => 'আতাকুরার নাংহান (Username)', 'yourpassword' => 'খন্তাচাবিগ (password)', 'yourpasswordagain' => 'খন্তাচাবিগ (password) আরাকমু ইকর', -'remembermypassword' => 'এরে কম্পিউটার এহাত্ত সাইট এহাত মর হমানিহান মনে থ', +'remembermypassword' => 'আহার গজে সেশনর কা খন্তাচাবি মনে থ(সর্বোচ্চ $1 {{PLURAL:$1|দিনর|দিনর}} কা)', 'yourdomainname' => 'তর ডোমেইনগ', 'externaldberror' => 'ডাটেবেজর মা বেসেপ আহান ইসে নাইলে তরতা বারেদের একাউন্ট বদালানির য়্যাথাং নেই।', 'login' => 'হমানি', @@ -470,6 +459,7 @@ $2', 'gotaccount' => "মান্নাপা একাউন্ট আহান আগেত্তর আসে? '''$1'''।", 'gotaccountlink' => 'লগইন', 'createaccountmail' => 'ই-মেইলন', +'createaccountreason' => 'কারণ:', 'badretype' => 'খন্তাচাবি (password) দ্বিয়গি না মিলের।', 'userexists' => 'এরে আতাকুরার নাঙ এহান আরাক আগই আগে ব্যবহার করিসে। তি আরাক নাঙ আহান বাছ।', 'loginerror' => 'লগইনে লালুইসে', @@ -649,7 +639,7 @@ $2', 'userjspreview' => "'''তি মনে থইস এহান তর জাভাস্ক্রিপ্টর পরীক্ষা/আগচাহান।''' '''এহান এপাগাউ ইতু নাইসে!'''", 'userinvalidcssjstitle' => "'''সিঙুইস:''' \"\$1\" নাঙর কোন সর নেই। -মনে থইস .css বারো .js পাতার নাঙ এতা রূহিবৃত্তির মাতুঙে হুরকা আতর ইকার মেয়েকল অরতাহে, যেসাদে {{ns:user}}:Foo/monobook.css; কিন্তু এসাদে চিঙনাঙ নাইব: {{ns:user}}:Foo/Monobook.css", +মনে থইস .css বারো .js পাতার নাঙ এতা রূহিবৃত্তির মাতুঙে হুরকা আতর ইকার মেয়েকল অরতাহে, যেসাদে {{ns:user}}:Foo/vector.css; কিন্তু এসাদে চিঙনাঙ নাইব: {{ns:user}}:Foo/Vector.css", 'updated' => '(আপডেট)', 'note' => "'''নোট:'''", 'previewnote' => "'''এহান হুদ্দা আগচাহান; @@ -681,8 +671,6 @@ $2', 'copyrightwarning' => "দয়া করিয়া খিয়াল কর {{SITENAME}}-ত হারি অবদান $2-র মাতুঙে পাসিতা (আরাকউ হবাকরে $1-ত চা)। তর জমা দিয়াসত লেখা যেগউ বে-রিদয় ইয়া পতিতে পারে বারো যেসারে খুশি অসারে বিলিতে পারে। তি যদি এহানর বারে একমত নার, অতা ইলে তর লেখা এহাত জমা নাদি।
    তি আরাকউ ৱাশাক করর যে, এরে লেখা এহান তি নিজে ইকিসতহান, নাইলে হাব্বির কা উন্মুক্ত কোন উৎস আহাত্ত পাসতহান। '''স্বত্ব সংরক্ষিত অসে অসাদে কোন লেখা স্বত্বাধিকারীর য়্যাথাঙ না লুইয়া এহাত জমা না দিস!'''", -'longpagewarning' => "'''সিঙুইস: এরে পাতা এহান $1 কিলোবাইট ডাঙর; ব্রাউজার আকেইগত ৩২ কিলোবাইটর গজে ডাঙর পাতানিত বেরা ইতে পারে। -দয়া করিয়া পাতা এহানরে হুরকা হুরকা কত অংশত খেইকরানির হতনা কর।'''", 'templatesused' => 'পাতাহাত বরাসি {{PLURAL:$1|মডেল|মডেলহানি}}:', 'templatesusedpreview' => 'আগচা এহানাত মিহিসে {{PLURAL:$1|মডেল|মডেলহানি}}:', 'templatesusedsection' => 'এহাত {{PLURAL:$1|মডেল|মডেলহানি}} তিলুইসে:', @@ -921,6 +909,7 @@ $2', 'prefs-files' => 'ফাইল', 'prefs-custom-css' => 'স্বনির্ধারিত CSS', 'prefs-custom-js' => 'স্বনির্ধারিত JS', +'prefs-common-css-js' => 'হাব্বি স্কিনর কা শেয়ারড CSS/JavaScript:', 'youremail' => 'ই-মেইল *:', 'yourrealname' => 'আৱৈপা নাংহান *:', 'yourlanguage' => 'ঠারহান:', @@ -934,7 +923,7 @@ $2', 'prefs-advancedrc' => 'উচ্চতর অপশন', 'prefs-advancedrendering' => 'উচ্চতর অপশন', 'prefs-advancedwatchlist' => 'উচ্চতর অপশন', -'prefs-display' => 'দেহাদেনার অপশন', +'prefs-displayrc' => 'দেহাদেনার অপশন', 'prefs-diffs' => 'ফারাক', # User rights @@ -1247,7 +1236,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'মর তালাবি', 'mywatchlist' => 'মর তালাবি', -'watchlistfor' => "('''$1'''-র কা)", 'addedwatch' => 'তালাবির তালিকাহাত থনা ইল', 'addedwatchtext' => "\"\$1\" পাতা এহান তর [[Special:Watchlist|আহির-আরুম তালিকা]]-ত তিলকরানি ইল। পিসেদে এরে পাতা এহান বারো পাতা এহানর লগে সাকেই আসে য়্যারী পাতাত অইতই হারি জাতর পতানি এহানাত তিলকরানি অইতই। অতাবাদেউ [[Special:RecentChanges|হাদি এহানর পতানিহানি]]-ত পাতা এহানরে '''গাঢ়করা''' মেয়েকে দেহা দেনা অইতই যাতে তি নুঙিকরে পাতা এহান চিনে পারবেতা। @@ -1561,9 +1549,9 @@ Also see [[Special:WantedCategories|wanted categories]].', 'nextdiff' => 'নুৱা পতা →', # Media information -'file-info-size' => '($1 × $2 পিক্সেল, ফাইলর সাইজহান: $3, এমআইএমই-র অংতা: $4)', +'file-info-size' => '$1 × $2 পিক্সেল, ফাইলর সাইজহান: $3, এমআইএমই-র অংতা: $4', 'file-nohires' => 'এহাত্ত গজর রিজরিউশন নেই।', -'svg-long-desc' => '(SVG ফাইল, সাধারনত $1 × $2 পিক্সেল, ফাইলর সাইজহান: $3)', +'svg-long-desc' => 'SVG ফাইল, সাধারনত $1 × $2 পিক্সেল, ফাইলর সাইজহান: $3', 'show-big-image' => 'পুল্লাপ রিজলিউশন', 'show-big-image-thumb' => 'আগচা হানর সাইজহান: $1 × $2 পিক্সেলস', diff --git a/languages/messages/MessagesBqi.php b/languages/messages/MessagesBqi.php index 9c10929a..b1d4c588 100644 --- a/languages/messages/MessagesBqi.php +++ b/languages/messages/MessagesBqi.php @@ -28,8 +28,7 @@ $messages = array( 'tog-editsection' => 'امکان اصلاح یه قسمت زه راه لینکها', 'tog-editsectiononrightclick' => 'امکان اصلاح یه قسمت زه راه راست کلیک کردن رو عنوان اوقسمت- جاوااسکریپت', 'tog-showtoc' => 'نشودادن فهرست محتوا سی صفحاتی که بیشتر زه سه سرخط دارن', -'tog-rememberpassword' => 'به حافظه کامپیوتر دادن نحوه ورودی خوم', -'tog-editwidth' => 'اصلاح جعبه یا کادری که عرضا پر وابیده', +'tog-rememberpassword' => 'به حافظه کامپیوتر دادن نحوه ورودی خوم (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'اضاف کردن اوصفحاتی که خوم درست کردم به فهرست نمایشی', 'tog-watchdefault' => 'اضاف کردن اوصفحاتی که خوم اصلاح کردم به فهرست نمایشی', 'tog-watchmoves' => 'اضاف کردن صفحاتی که خوم جابجا کردم به فهرست نمایشی', @@ -258,7 +257,7 @@ $1', # Login and logout pages 'yourname' => 'نام کاربر:', 'yourpassword' => 'رمز:', -'remembermypassword' => 'رمز اویدن به سیستم را دراین رایانه به خاطر بسپار', +'remembermypassword' => 'رمز اویدن به سیستم را دراین رایانه به خاطر بسپار (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'اویدن به سیستم', 'nav-login-createaccount' => 'اویدن به سیستم', 'loginprompt' => 'ایسا وا کوکی ها رافعال کنین سی اویدن به {{SITENAME}}.', @@ -360,9 +359,6 @@ $1', ایر نه خوین نوشته‌هاتو بی‌رحمانه اصلاح بوه و به دلخواه ارسال بوه، ایچو نفرستن.
    درضمن ایسادارین به ایما قول ادین که خودتو یونه نوشتین یا هونه زه یک منبع آزاد با مالکیت عمومی یا مثل هو ورداشتین. '''کارهای دارای کارهای دارای حق کپی رایت را بی‌اجازه نفرستین!'''',", -'longpagewarning' => "'''هشدار: ای صفحه $1 کیلوبایت طول داره؛ -بعضی زه مرورگرها ممکنه با اصلاح صفحات نزدیک به ۳۲ کیلوبایت یا طولانی‌تر زه آن مشکلاتی داشته بون. -لطفاً درمورد خرد کردن ای صفحه به قسمت‌های کوچکتر فکر کنین.'''", 'templatesused' => 'قالبهای استفاده شده من ای صفحه:', 'templatesusedpreview' => 'قالبها یا الگوهای استفاده وابیده در ای پیش نمایش:', 'template-protected' => '(تحت حمایت)', @@ -560,7 +556,6 @@ $2', # Watchlist 'watchlist' => 'لیست پیگیریهای مو', 'mywatchlist' => 'لیست پیگیریهای مو', -'watchlistfor' => "(سی '''$1''')", 'addedwatch' => 'اضاف وابید به لیست پیگیری', 'addedwatchtext' => "صفحه «$1» به [[Special:Watchlist|لیست پی‌گیری‌های ]] ایسا اضاف وابید. @@ -776,9 +771,9 @@ $2', 'nextdiff' => 'تفاوت بعدی→', # Media information -'file-info-size' => '($1 × $2 پیکسل, اندازه فایل: $3, MIME نوع: $4)', +'file-info-size' => '$1 × $2 پیکسل, اندازه فایل: $3, MIME نوع: $4', 'file-nohires' => 'قابلیت تفکیک بالاتری در دسترس نه.', -'svg-long-desc' => '(SVG فایل, تقریبا$1 × $2 پیکسل, اندازه فایل: $3)', +'svg-long-desc' => 'SVG فایل, تقریبا$1 × $2 پیکسل, اندازه فایل: $3', 'show-big-image' => 'تصویر با قابلیت تفکیک کامل', 'show-big-image-thumb' => '<کوچیک>اندازه پیش نمایش: $1 × $2 پیکسلها', diff --git a/languages/messages/MessagesBr.php b/languages/messages/MessagesBr.php index 52726b3a..fbb9d60c 100644 --- a/languages/messages/MessagesBr.php +++ b/languages/messages/MessagesBr.php @@ -24,8 +24,8 @@ $namespaceNames = array( NS_USER => 'Implijer', NS_USER_TALK => 'Kaozeadenn_Implijer', NS_PROJECT_TALK => 'Kaozeadenn_$1', - NS_FILE => 'Skeudenn', - NS_FILE_TALK => 'Kaozeadenn_Skeudenn', + NS_FILE => 'Restr', + NS_FILE_TALK => 'Kaozeadenn_Restr', NS_MEDIAWIKI => 'MediaWiki', NS_MEDIAWIKI_TALK => 'Kaozeadenn_MediaWiki', NS_TEMPLATE => 'Patrom', @@ -36,50 +36,124 @@ $namespaceNames = array( NS_CATEGORY_TALK => 'Kaozeadenn_Rummad', ); +$namespaceAliases = array( + 'Skeudenn' => NS_FILE, + 'Kaozeadenn_Skeudenn' => NS_FILE_TALK, +); + $specialPageAliases = array( 'DoubleRedirects' => array( 'AdksaoùDoubl' ), 'BrokenRedirects' => array( 'AdkasoùTorr' ), - 'Disambiguations' => array( 'Digejañ' ), + 'Disambiguations' => array( 'Disheñvelout' ), + 'Userlogin' => array( 'KevreañImplijer' ), + 'Userlogout' => array( 'DigevreañImplijer' ), 'CreateAccount' => array( 'KrouiñKont' ), 'Preferences' => array( 'Penndibaboù' ), - 'Watchlist' => array( 'Roll evezhiañ' ), + 'Watchlist' => array( 'Roll_evezhiañ' ), 'Recentchanges' => array( 'KemmoùDiwezhañ' ), 'Upload' => array( 'Pellgargañ' ), 'Listfiles' => array( 'RollSkeudennoù' ), - 'Newimages' => array( 'SkeudennoùNevez' ), + 'Newimages' => array( 'RestroùNevez', 'SkeudennoùNevez' ), + 'Listusers' => array( 'RollImplijerien' ), + 'Listgrouprights' => array( 'RollGwirioùStrollad' ), 'Statistics' => array( 'Stadegoù' ), + 'Randompage' => array( 'DreZegouezh' ), + 'Lonelypages' => array( 'PajennoùEnoUnan' ), + 'Uncategorizedpages' => array( 'PajennoùDirumm' ), + 'Uncategorizedcategories' => array( 'RummadoùDirumm' ), + 'Uncategorizedimages' => array( 'RestroùDirumm' ), + 'Uncategorizedtemplates' => array( 'PatromoùDirumm' ), + 'Unusedcategories' => array( 'RummadoùDizimplij' ), + 'Unusedimages' => array( 'RestroùDizimplij' ), + 'Wantedpages' => array( 'LiammoùTorr' ), + 'Wantedcategories' => array( 'RummadoùGoulennet' ), + 'Wantedfiles' => array( 'RestroùGoulennet' ), + 'Wantedtemplates' => array( 'PatromoùGoulennet' ), + 'Mostlinkedtemplates' => array( 'PatromoùImplijetañ' ), + 'Shortpages' => array( 'PajennoùBerr' ), + 'Longpages' => array( 'PajennoùHir' ), 'Newpages' => array( 'PajennoùNevez' ), 'Ancientpages' => array( 'PajennoùKozh' ), + 'Protectedpages' => array( 'PajennoùGwarezet' ), + 'Protectedtitles' => array( 'TitloùGwarezet' ), 'Allpages' => array( 'AnHollBajennoù' ), + 'Unblock' => array( 'Distankañ' ), 'Specialpages' => array( 'PajennoùDibar' ), + 'Contributions' => array( 'Degasadennoù' ), + 'Emailuser' => array( 'PostelImplijer' ), + 'Confirmemail' => array( 'KadarnaatPostel' ), + 'Whatlinkshere' => array( 'PetraGasBetekAmañ' ), + 'Recentchangeslinked' => array( 'KemmoùKar' ), + 'Movepage' => array( 'AdkasPajenn' ), + 'Blockme' => array( 'MaStankañ' ), + 'Booksources' => array( 'MammennoùLevr' ), 'Categories' => array( 'Rummadoù' ), 'Export' => array( 'Ezporzhiañ' ), 'Version' => array( 'Stumm' ), + 'Allmessages' => array( 'HollGemennadennoù' ), + 'Log' => array( 'Marilh' ), + 'Blockip' => array( 'Stankañ' ), 'Undelete' => array( 'Diziverkañ' ), 'Import' => array( 'Enporzhiañ' ), + 'Userrights' => array( 'GwirioùImplijer' ), + 'Unwatchedpages' => array( 'PajennoùNannEvezhiet' ), + 'Listredirects' => array( 'RollañAdkasoù' ), + 'Unusedtemplates' => array( 'PatromoùDizimplij' ), 'Mypage' => array( 'MaFajenn' ), 'Mytalk' => array( 'MaC\'haozeadennoù' ), + 'Mycontributions' => array( 'MaDegasadennoù' ), + 'Listadmins' => array( 'RollMerourien' ), + 'Listbots' => array( 'RollBotoù' ), + 'Popularpages' => array( 'PajennoùPoblek' ), 'Search' => array( 'Klask' ), + 'Resetpass' => array( 'KemmañGer-tremen' ), + 'Withoutinterwiki' => array( 'HepEtrewiki' ), + 'MergeHistory' => array( 'KendeuziñIstor' ), + 'LinkSearch' => array( 'KlaskLiamm' ), + 'Tags' => array( 'Balizennoù' ), + 'Activeusers' => array( 'ImplijerienOberiant' ), + 'ComparePages' => array( 'KeñveriañPajennoù' ), + 'Badtitle' => array( 'TitlFall' ), ); $magicWords = array( 'redirect' => array( '0', '#ADKAS', '#REDIRECT' ), + 'numberofpages' => array( '1', 'NIVERABAJENNOU', 'NUMBEROFPAGES' ), + 'numberofarticles' => array( '1', 'NIVERABENNADOU', 'NUMBEROFARTICLES' ), + 'numberoffiles' => array( '1', 'NIVERARESTROU', 'NUMBEROFFILES' ), + 'numberofusers' => array( '1', 'NIVERAIMPLIJERIEN', 'NUMBEROFUSERS' ), + 'numberofactiveusers' => array( '1', 'NIVERAIMPLIJERIENOBERIANT', 'NUMBEROFACTIVEUSERS' ), + 'numberofedits' => array( '1', 'NIVERAZEGASEDENNOU', 'NUMBEROFEDITS' ), + 'numberofviews' => array( '1', 'NIVERALENNADENNOU', 'NUMBEROFVIEWS' ), 'pagename' => array( '1', 'ANVPAJENN', 'PAGENAME' ), + 'pagenamee' => array( '1', 'ANVPAJENNSK', 'PAGENAMEE' ), + 'namespace' => array( '1', 'ESAOUENNANV', 'NAMESPACE' ), + 'namespacee' => array( '1', 'ESAOUENNANVSK', 'NAMESPACEE' ), + 'fullpagename' => array( '1', 'ANVPAJENNKLOK', 'FULLPAGENAME' ), + 'fullpagenamee' => array( '1', 'ANVPAJENNKLOKSK', 'FULLPAGENAMEE' ), + 'subpagename' => array( '1', 'ANVISPAJENN', 'SUBPAGENAME' ), 'img_right' => array( '1', 'dehou', 'right' ), 'img_left' => array( '1', 'kleiz', 'left' ), 'img_none' => array( '1', 'netra', 'none' ), - 'img_center' => array( '1', 'kreiz', 'center', 'centre' ), + 'img_center' => array( '1', 'kreizenn', 'center', 'centre' ), + 'img_page' => array( '1', 'pajenn=$1', 'pajenn $1', 'page=$1', 'page $1' ), + 'img_sub' => array( '1', 'is', 'sub' ), 'img_top' => array( '1', 'krec\'h', 'top' ), + 'img_middle' => array( '1', 'kreiz', 'middle' ), 'img_bottom' => array( '1', 'traoñ', 'bottom' ), + 'img_link' => array( '1', 'liamm=$1', 'link=$1' ), 'sitename' => array( '1', 'ANVLEC\'HIENN', 'SITENAME' ), 'server' => array( '0', 'SERVIJER', 'SERVER' ), 'servername' => array( '0', 'ANVSERVIJER', 'SERVERNAME' ), 'grammar' => array( '0', 'YEZHADUR:', 'GRAMMAR:' ), + 'gender' => array( '0', 'JENER:', 'GENDER:' ), 'plural' => array( '0', 'LIESTER:', 'PLURAL:' ), + 'fullurl' => array( '0', 'URLKLOK:', 'FULLURL:' ), 'currentversion' => array( '1', 'STUMMRED', 'CURRENTVERSION' ), 'language' => array( '0', '#YEZH:', '#LANGUAGE:' ), 'special' => array( '0', 'dibar', 'special' ), 'pagesize' => array( '1', 'MENTPAJENN', 'PAGESIZE' ), + 'url_path' => array( '0', 'HENT', 'PATH' ), ); $bookstoreList = array( @@ -97,7 +171,7 @@ $dateFormats = array( 'dmy both' => 'j M Y "da" H:i', ); -$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' ); +$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' ); $linkTrail = "/^((?:c\'h|C\'H|C\'h|c’h|C’H|C’h|[a-zA-ZàâçéèêîôûäëïöüùñÇÉÂÊÎÔÛÄËÏÖÜÀÈÙÑ])+)(.*)$/sDu"; $messages = array( @@ -116,8 +190,7 @@ $messages = array( 'tog-editsection' => 'Kemmañ ur rann dre al liammoù [kemmañ]', 'tog-editsectiononrightclick' => 'Kemmañ ur rann dre glikañ a-zehou
    war titl ar rann', 'tog-showtoc' => 'Diskouez an daolenn
    (evit ar pennadoù zo ouzhpenn 3 rann enno)', -'tog-rememberpassword' => "Derc'hel soñj eus ma ger-tremen (toupin)", -'tog-editwidth' => 'Digeriñ ar prenestr skridaozañ betek leuniañ ar skramm gantañ penn-da-benn', +'tog-rememberpassword' => "Derc'hel soñj eus ma ger-tremen war an urzhiataer-mañ (evit $1 devezh{{PLURAL:$1||}} d'ar muiañ)", 'tog-watchcreations' => 'Evezhiañ ar pajennoù krouet ganin', 'tog-watchdefault' => 'Evezhiañ ar pennadoù savet pe kemmet ganin', 'tog-watchmoves' => "Ouzhpennañ da'm roll evezhiañ ar pajennoù adanvet ganin", @@ -264,31 +337,21 @@ $messages = array( 'faqpage' => 'Project:FAG', # Vector skin -'vector-action-addsection' => 'Rannbennad nevez', -'vector-action-delete' => 'Diverkañ', -'vector-action-move' => 'Adenvel', -'vector-action-protect' => 'Gwareziñ', -'vector-action-undelete' => 'Diziverkañ', -'vector-action-unprotect' => 'Diwareziñ', -'vector-namespace-category' => 'Rummad', -'vector-namespace-help' => 'Skoazell', -'vector-namespace-image' => 'Restr', -'vector-namespace-main' => 'Pennad', -'vector-namespace-media' => 'Pajenn vedia', -'vector-namespace-mediawiki' => 'Kemennadenn', -'vector-namespace-project' => 'Pajenn ar raktres', -'vector-namespace-special' => 'Pajenn dibar', -'vector-namespace-talk' => 'Kaozeal', -'vector-namespace-template' => 'Patrom', -'vector-namespace-user' => 'Pajenn implijer', -'vector-view-create' => 'Krouiñ', -'vector-view-edit' => 'Kemmañ', -'vector-view-history' => 'Gwelet an istor', -'vector-view-view' => 'Lenn', -'vector-view-viewsource' => 'Sellet ouzh tarzh an destenn', -'actions' => 'Oberoù', -'namespaces' => 'Esaouennoù anv', -'variants' => 'Adstummoù', +'vector-action-addsection' => 'Rannbennad nevez', +'vector-action-delete' => 'Diverkañ', +'vector-action-move' => 'Adenvel', +'vector-action-protect' => 'Gwareziñ', +'vector-action-undelete' => 'Diziverkañ', +'vector-action-unprotect' => 'Diwareziñ', +'vector-simplesearch-preference' => "Aotren ar c'hinnigoù klask gwellaet (gant Vektor nemetken)", +'vector-view-create' => 'Krouiñ', +'vector-view-edit' => 'Kemmañ', +'vector-view-history' => 'Gwelet an istor', +'vector-view-view' => 'Lenn', +'vector-view-viewsource' => 'Sellet ouzh tarzh an destenn', +'actions' => 'Oberoù', +'namespaces' => 'Esaouennoù anv', +'variants' => 'Adstummoù', 'errorpagetitle' => 'Fazi', 'returnto' => "Distreiñ d'ar bajenn $1.", @@ -349,6 +412,9 @@ Re a implijerien a glask mont war ar bajenn-mañ war un dro. Gortozit ur pennadig a-raok klask mont war ar bjann-mañ en-dro. $1', +'pool-timeout' => "Aet eur dreist d'an termen gortoz evit ar stankadenn", +'pool-queuefull' => 'Soulgarget eo ar servijerioù', +'pool-errorunknown' => 'Fazi dianav', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Diwar-benn {{SITENAME}}', @@ -405,7 +471,7 @@ $1', 'red-link-title' => "$1 (n'eus ket eus ar bajenn-mañ)", # Short words for each namespace, by default used in the namespace tab in monobook -'nstab-main' => 'Page', +'nstab-main' => 'Pajenn', 'nstab-user' => 'Pajenn implijer', 'nstab-media' => 'Media', 'nstab-special' => 'Pajenn dibar', @@ -511,7 +577,8 @@ Na zisoñjit ket resisaat ho [[Special:Preferences|penndibaboù evit {{SITENAME} 'yourname' => "Hoc'h anv implijer", 'yourpassword' => 'Ho ker-tremen', 'yourpasswordagain' => 'Skrivit ho ker-tremen en-dro', -'remembermypassword' => "Derc'hel soñj eus ma ger-tremen (toupin)", +'remembermypassword' => "Derc'hel soñj eus ma ger-tremen war an urzhiataer-mañ (evit $1 devezh{{PLURAL:$1||}} d'ar muiañ)", +'securelogin-stick-https' => 'Chom kevreet da HTTPS goude bezañ bet kevreet', 'yourdomainname' => 'Ho tomani', 'externaldberror' => "Pe ez eus bet ur fazi gwiriekaat diavaez er bank titouroù pe n'oc'h ket aotreet da nevesaat ho kont diavaez.", 'login' => 'Kevreañ', @@ -528,10 +595,11 @@ Na zisoñjit ket resisaat ho [[Special:Preferences|penndibaboù evit {{SITENAME} 'gotaccount' => "Ur gont zo ganeoc'h dija ? '''$1'''.", 'gotaccountlink' => 'Kevreañ', 'createaccountmail' => 'dre bostel', +'createaccountreason' => 'Abeg :', 'badretype' => 'Ne glot ket ar gerioù-tremen an eil gant egile.', 'userexists' => "Implijet eo an anv implijer lakaet ganeoc'h dija. Dibabit un anv all mar plij.", -'loginerror' => 'Kudenn kevreañ', +'loginerror' => 'Kudenn gevreañ', 'createaccounterror' => 'Dibosupl krouiñ ar gont : $1', 'nocookiesnew' => "Krouet eo bet ar gont implijer met n'oc'h ket kevreet. {{SITENAME}} a implij toupinoù evit ar c'hevreañ met diweredekaet eo an toupinoù ganeoc'h. Trugarez da weredekaat anezho ha da gevreañ en-dro.", 'nocookieslogin' => "{{SITENAME}} a implij toupinoù evit kevreañ met diweredekaet eo an toupinoù ganeoc'h. Trugarez da weredekaat anezho ha da gevreañ en-dro.", @@ -548,6 +616,7 @@ Gwiriit eo bet skrivet mat an anv ganeoc\'h pe [[Special:UserLogin/signup|krouit 'wrongpasswordempty' => 'Ger-tremen ebet. Lakait unan mar plij.', 'passwordtooshort' => '{{PLURAL:$1|1 arouezenn|$1 arouezenn}} hir a rank bezañ ar gerioù-tremen da nebeutañ.', 'password-name-match' => "Rankout a ra ho ker-tremen bezañ disheñvel diouzh hoc'h anv implijer.", +'password-login-forbidden' => 'Berzet eo ober gant an anv-implijer hag ar ger-tremen-mañ.', 'mailmypassword' => 'Kasit din ur ger-tremen nevez', 'passwordremindertitle' => 'Ho ker-tremen berrbad nevez evit {{SITENAME}}', 'passwordremindertext' => "Unan bennak (c'hwi moarvat gant ar chomlec'h IP \$1) @@ -587,6 +656,9 @@ Gortozit a-raok klask en-dro.", 'loginlanguagelabel' => 'Yezh : $1', 'suspicious-userlogout' => 'Distaolet eo bet ho koulenn digevreañ rak kaset e oa bet gant ur merdeer direizhet pe krubuilhadenn ur proksi, evit doare.', +# E-mail sending +'php-mail-error-unknown' => "Fazi dianav en arc'hwel postel () PHP", + # Password reset dialog 'resetpass' => 'Cheñch ar ger-tremen', 'resetpass_announce' => "Enskrivet oc’h bet dre ur ger-tremen da c'hortoz kaset deoc'h dre bostel. A-benn bezañ enrollet da vat e rankit spisaat ur ger-tremen nevez amañ :", @@ -638,9 +710,11 @@ Gortozit a-raok klask en-dro.", 'showdiff' => "Diskouez ar c'hemmoù", 'anoneditwarning' => "'''Diwallit :''' N'oc'h ket kevreet. Ho chomlec'h IP eo a vo enrollet war istor kemmoù ar bajenn-mañ.", +'anonpreviewwarning' => "''N'oc'h ket kevreet. Enrollañ a lakao war-wel ho chomlec'h IP e istor kemmoù ar bajenn.''", 'missingsummary' => "'''Taolit evezh:''' N'hoc'h eus ket lakaet tamm testenn diverrañ ebet evit ho kemmoù. Mar klikit war enrollañ en-dro, e vo enrollet ho testenn evel m'emañ hepmuiken.", 'missingcommenttext' => "Skrivit hoc'h evezhiadenn a-is.", -'missingcommentheader' => "'''Taolit evezh:''' N'hoc'h eus ket lakaet tamm danvez/titl ebet evit hoc'h evezhiadenn. Mar klikit war enrollañ en-dro, e vo enrollet ho testenn evel m'emañ hepmuiken.", +'missingcommentheader' => "'''Taolit evezh :''' N'hoc'h eus lakaet tamm danvez/titl ebet d'hoc'h evezhiadenn. +Mar klikit war \"{{int:savearticle}}\" en-dro, e vo enrollet ho testenn evel m'emañ hepmuiken.", 'summary-preview' => 'Rakwelet an diverrañ :', 'subject-preview' => 'Rakwelet danvez/titl :', 'blockedtitle' => 'Implijer stanket', @@ -714,7 +788,11 @@ Dindan emañ merket moned diwezhañ marilh ar stankadennoù, d'ho kelaouiñ :", 'usercsspreview' => "'''Dalc'hit soñj n'emaoc'h ken nemet o rakwelet ho follenn CSS deoc'h.''' '''N'eo ket bet enrollet evit c'hoazh!'''", 'userjspreview' => "'''Dalc'hit soñj emaoc'h o rakwelet pe o testiñ ho kod javascript deoc'h ha n'eo ket bet enrollet c'hoazh!'''", -'userinvalidcssjstitle' => "'''Diwallit:''' N'eus tamm gwiskadur \"\$1\" ebet. Ho pez soñj e vez implijet lizherennoù bihan goude an anv implijer hag ar veskell / gant ar pajennoù personel dezho un astenn .css ha .js; da skouer eo mat ar follenn stil {{ns:user}}:Foo/monobook.css ha faziek an hini {{ns:user}}:Foo/Monobook.css.", +'sitecsspreview' => "'''Dalc'hit soñj n'emaoc'h ken nemet o rakwelet ar follenn CSS-mañ.''' +'''N'eo ket bet enrollet evit c'hoazh!'''", +'sitejspreview' => "'''Dalc'hit soñj n'emaoc'h ken nemet o rakwelet ar c'hod JavaScript-mañ.''' +'''N'eo ket bet enrollet evit c'hoazh!'''", +'userinvalidcssjstitle' => "'''Diwallit:''' N'eus tamm gwiskadur \"\$1\" ebet. Ho pez soñj e vez implijet lizherennoù bihan goude an anv implijer hag ar veskell / gant ar pajennoù personel dezho un astenn .css ha .js; da skouer eo mat ar follenn stil {{ns:user}}:Foo/vector.css ha faziek an hini {{ns:user}}:Foo/Vector.css.", 'updated' => '(Hizivaet)', 'note' => "'''Notenn :'''", 'previewnote' => "'''Diwallit mat, n'eus ken ur rakweled eus an destenn-mañ.''' @@ -749,9 +827,6 @@ N'eus '''nemet''' an destenn zo en takad krec'h a vo saveteet pa klikot war \"{{ Heñveldra, prometiñ a rit kemer perzh dre zegas skridoù savet ganeoc'h hepken pe tennet eus ur vammenn frank a wirioù. '''NA IMPLIJIT KET LABOURIOÙ GANT GWIRIOÙ AOZER (COPYRIGHT) HEP AOTRE D'OBER KEMENT-SE!'''", 'copyrightwarning2' => "Notit mat e c'hall kement degasadenn graet ganeoc'h war {{SITENAME}} bezañ kemmet, adaozet pe lamet kuit gant an implijerien all. Mar ne fell ket deoc'h e vije kemmet-digemmet ar pezh hoc'h eus skrivet na gemerit ket perzh er raktres-mañ.
    Gouestlañ a rit ivez eo bet savet ar boued spered ganeoc'h pe eilet diwar ur vammenn frank a wirioù pe en domani foran (gwelet $1 evit gouzout hiroc'h). '''NA IMPLIJIT KET LABOURIOÙ GANT GWIRIOÙ AOZER HEP AOTRE D'OBER KEMENT-SE!'''", -'longpagewarning' => "'''KEMENN DIWALL: $1 ko eo hed ar bajenn-mañ; -merdeerioù zo o deus poan da verañ ar pajennoù tro-dro pe en tu all da 32 ko pa vezont savet. -Marteze e c'hallfec'h rannañ ar bajenn e rannoù bihanoc'h.'''", 'longpageerror' => "'''FAZI: $1 kilobit hir eo an destenn lakaet ganeoc'h, ar pezh zo hiroc'h eget $2 kilobit, ar vent vrasañ aotreet. N'haller ket enrollañ.'''", 'readonlywarning' => "'''KEMENN DIWALL : stanket eo an diaz titouroù a-benn bezañ trezalc'het; setu ne viot ket evit enrollañ ho kemmoù diouzhtu-diouzhtu eta. Gallout a rit eilañ-pegañ an destenn en ur restr skrid all hag enrollañ anezhi a-benn diwezhatoc'hik.''' @@ -928,6 +1003,8 @@ $1", 'logdelete-failure' => "'''N'eus ket bet gallet termeniñ gweluster ar marilh :''' $1", 'revdel-restore' => 'Cheñch ar gweluster', +'revdel-restore-deleted' => 'adweladennoù bet diverket', +'revdel-restore-visible' => "adweladennoù a c'heller gwelet", 'pagehist' => 'Istor ar bajenn', 'deletedhist' => 'Diverkañ an istor', 'revdelete-content' => 'danvez', @@ -993,14 +1070,16 @@ Gwiriit ne vo ket torret red istor ar bajenn gant ar c'hemm-mañ.", # Diffs 'history-title' => 'Istor stummoù disheñvel "$1"', 'difference' => "(Diforc'hioù etre ar stummoù)", +'difference-multipage' => "(diforc'h etre ar pajennoù)", 'lineno' => 'Linenn $1:', 'compareselectedversions' => 'Keñveriañ ar stummoù diuzet', 'showhideselectedversions' => 'Diskouez/Kuzhat ar stummoù diuzet', 'editundo' => 'disteuler', -'diff-multi' => "({{PLURAL:$1|Ur reizhadenn da c'hortoz|$1 reizhadenn da c'hortoz}} kuzhet.)", +'diff-multi' => "({{PLURAL:$1|Ur reizhadenn da c'hortoz|$1 reizhadenn da c'hortoz}} gant {{PLURAL:$2|un implijer|$2 implijer}} kuzhet.)", +'diff-multi-manyusers' => "({{PLURAL:$1|Ur reizhadenn da c'hortoz|$1 reizhadenn da c'hortoz}} gant muioc'h eget $2 {{PLURAL:$2|implijer|implijer}} kuzhet.)", # Search results -'searchresults' => "Disoc'h ar c'hlask", +'searchresults' => "Disoc'hoù enklask", 'searchresults-title' => 'Disoc\'hoù klask evit "$1"', 'searchresulttext' => "Evit gouzout hiroc'h diwar-benn ar c'hlask e {{SITENAME}}, sellet ouzh [[{{MediaWiki:Helppage}}|{{int:help}}]].", 'searchsubtitle' => 'Klasket hoc\'h eus \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|an holl bajennoù a grog gant "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|an holl bajennoù enno ul liamm war-du "$1"]])', @@ -1032,6 +1111,7 @@ Gwiriit ne vo ket torret red istor ar bajenn gant ar c'hemm-mañ.", 'searchprofile-everything-tooltip' => "Klask e pep lec'h (er pajennoù kaozeal ivez)", 'searchprofile-advanced-tooltip' => 'Klask en esaouennoù anv personelaet', 'search-result-size' => '$1 ({{PLURAL:$2|1 ger|$2 ger}})', +'search-result-category-size' => '{{PLURAL:$1|1|$1}} ezel ({{PLURAL:$2|1|$2}} is-rummad, {{PLURAL:$3|1|$3}} restr)', 'search-result-score' => 'Klotadusted : $1%', 'search-redirect' => '(adkas $1)', 'search-section' => '(rann $1)', @@ -1106,6 +1186,7 @@ Gwiriit ne vo ket torret red istor ar bajenn gant ar c'hemm-mañ.", 'contextlines' => 'Niver a linennoù dre respont', 'contextchars' => 'Niver a arouezennoù kendestenn dre linenn', 'stub-threshold' => 'Bevenn uhelañ evit al liammoù war-du an danvez pennadoù (okted) :', +'stub-threshold-disabled' => 'Diweredekaet', 'recentchangesdays' => "Niver a zevezhioù da ziskouez er c'hemmoù diwezhañ :", 'recentchangesdays-max' => "(d'ar muiañ $1 {{PLURAL:$1|deiz|deiz}})", 'recentchangescount' => 'Niver a gemmoù da ziskouez dre ziouer', @@ -1139,6 +1220,7 @@ Setu aze un dalvoudenn ganet dre zegouezh hag a c'hallfec'h implijout : $1", 'prefs-files' => 'Restroù', 'prefs-custom-css' => 'CSS personelaet', 'prefs-custom-js' => 'JS personelaet', +'prefs-common-css-js' => 'JavaScript ha CSS kenrannet evit an holl wiskadurioù :', 'prefs-reset-intro' => "Ober gant ar bajenn-mañ a c'hallit evit adlakaat ho penndibaboù dre ziouer evit al lec'hienn-mañ. Kement-se n'hallo ket bezañ disc'hraet da c'houde.", 'prefs-emailconfirm-label' => 'Kadarnaat ar postel :', 'prefs-textboxsize' => 'Ment ar prenestr skridaozañ', @@ -1177,9 +1259,15 @@ Gallout a rit lezel tud all da vont e darempred ganeoc'h dre ho pajennoù implij 'prefs-advancedrendering' => 'Dibarzhioù araokaet', 'prefs-advancedsearchoptions' => 'Dibarzhioù araokaet', 'prefs-advancedwatchlist' => 'Dibarzhioù araokaet', -'prefs-display' => 'Dibarzhioù diskwel', +'prefs-displayrc' => 'Dibarzhioù diskwel', +'prefs-displaysearchoptions' => 'Dibarzhioù diskwel', +'prefs-displaywatchlist' => 'Dibarzhioù diskwel', 'prefs-diffs' => "Diforc'hioù", +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => "Reizh eo ar chomlec'h postel war a seblant", +'email-address-validity-invalid' => "Ebarzhit ur chomlec'h postel reizh", + # User rights 'userrights' => 'Merañ statud an implijerien', 'userrights-lookup-user' => 'Merañ strolladoù an implijer', @@ -1263,6 +1351,7 @@ Gallout a rit lezel tud all da vont e darempred ganeoc'h dre ho pajennoù implij 'right-hideuser' => 'Stankañ un implijer, en ur guzhat anezhañ diouzh ar re all', 'right-ipblock-exempt' => "Tremen dreist an IPoù stanket, ar stankadennoù emgefre hag ar bloc'hadennoù IP stanket", 'right-proxyunbannable' => 'Temen dreist stankadennoù emgefre ar proksioù', +'right-unblockself' => 'En em zistankañ drezo o unan', 'right-protect' => 'Kemmañ live gwareziñ ar pajennoù ha kemmañ ar pajennoù gwarezet', 'right-editprotected' => 'Kemmañ ar pajennoù gwarezet (hep gwarez dre skalierad)', 'right-editinterface' => 'Degas kemmoù war an etrefas implijer', @@ -1285,7 +1374,6 @@ Gallout a rit lezel tud all da vont e darempred ganeoc'h dre ho pajennoù implij 'right-siteadmin' => 'Prennañ ha dibrennañ ar bank-titouroù', 'right-reset-passwords' => 'Kemmañ ger-tremen implijerien all', 'right-override-export-depth' => 'Ezporzhiañ ar pajennoù en ur lakaat e-barzh ar pajennoù liammet betek un donder a 5 live', -'right-versiondetail' => 'Sellet ouzh an titouroù ouzhpenn diwar-benn stummoù ar meziantoù', 'right-sendemail' => "Kas ur postel d'an implijerien all", # User rights log @@ -1336,14 +1424,9 @@ Gallout a rit lezel tud all da vont e darempred ganeoc'h dre ho pajennoù implij 'recentchanges-legend' => "Dibarzhioù ar c'hemmoù diwezhañ", 'recentchangestext' => "Dre ar bajenn-mañ e c'hallit heuliañ ar c'hemmoù diwezhañ bet degaset d'ar wiki.", 'recentchanges-feed-description' => "Heuilhit ar c'hemmoù diwezhañ er wiki el lusk-mañ.", -'recentchanges-label-legend' => "Alc'hwez : $1.", -'recentchanges-legend-newpage' => '$1 - pajenn nevez', 'recentchanges-label-newpage' => "Gant ar c'hemm-mañ e vo krouet ur bajenn nevez.", -'recentchanges-legend-minor' => '$1 - kemm dister', 'recentchanges-label-minor' => "Ur c'hemm dister eo hemañ", -'recentchanges-legend-bot' => '$1 - kemm degaset gant ur robot', 'recentchanges-label-bot' => "Gant ur bot eo bet degaset ar c'hemm-mañ.", -'recentchanges-legend-unpatrolled' => "$1 - kemm n'eo ket bet gwiriet", 'recentchanges-label-unpatrolled' => "N'eo ket bet gwiriet ar c'hemm-mañ evit c'hoazh.", 'rcnote' => "Setu aze an {{PLURAL:$1|'''1''' change|'''$1''' kemm diwezhañ}} bet c'hoarvezet e-pad an {{PLURAL:$2|deiz|'''$2''' deiz}} diwezhañ, savet d'an $4 da $5.", 'rcnotefrom' => "Setu aze roll ar c'hemmoù c'hoarvezet abaoe an '''$2''' ('''$1''' d'ar muiañ).", @@ -1390,6 +1473,9 @@ E '''tev''' emañ ar pajennoù zo war ho [[Special:Watchlist|roll evezhiañ]].", 'upload_directory_missing' => "Mankout a ra ar c'havlec'h enporzhiañ ($1) ha n'eo ket bet ar servijer Web evit e grouiñ.", 'upload_directory_read_only' => "N'hall ket ar servijer skrivañ e renkell ar c'hargadennoù ($1).", 'uploaderror' => 'Fazi', +'upload-recreate-warning' => "'''Diwallit''' : Diverket pe dilec'hiet ez eus bet ur restr gant an anv-se.''' + +Deoc'h da c'houzout, setu aze marilh an diverkañ hag an dilec'hiañ evit ar bajenn-mañ.", 'uploadtext' => "Grit gant ar furmskrid a-is evit enporzhiañ restroù war ar servijer. Evit sellet pe klask skeudennoù bet enporzhiet a-raok sellit ouzh [[Special:FileList|roll ar skeudennoù]]. Kavet e vo ar skeudennoù enporzhiet war [[Special:Log/upload|marilh ar pajennoù enporzhiet]] hag an diverkadennoù war [[Special:Log/delete|istor an diverkadennoù]]. @@ -1423,6 +1509,17 @@ S.o [[Special:NewFiles|rann ar skeudennoù nevez]] evit kaout ur sell gwiroc'h", 'filetype-banned-type' => "'''N'eo ket \".\$1\"''' eus ar seurt restroù aotreet. \$2 eo {{PLURAL:\$3|ar seurt restroù|ar seurt restroù}} degemeret.", 'filetype-missing' => 'N\'eus astenn ebet stag ouzh ar restr (evel ".jpg").', +'empty-file' => "Ar restr hoc'h eus roet a oa goullo.", +'file-too-large' => "Ar restr hoc'h eus roet a oa re vras.", +'filename-tooshort' => 'Re verr eo anv ar restr.', +'filetype-banned' => 'Difennet eo ar seurt restroù', +'verification-error' => 'Korbellet eo bet ar restr-mañ gant ar gwiriañ restroù.', +'hookaborted' => "Ar c'hemm hoc'h eus klasket degas zo bet harzet gant ur c'hrog astenn.", +'illegal-filename' => "N'eo ket aotreet anv ar restr.", +'overwrite' => "N'eo ket aotreet frikañ ur restr zo anezhi c'hoazh.", +'unknown-error' => "C'hoarvezet ez eus ur gudenn dianav.", +'tmp-create-error' => 'Dibosupl eo krouiñ ur restr padennek.', +'tmp-write-error' => 'Ur gudenn skrivañ a zo bet evit ar restr padennek.', 'large-file' => "Erbediñ a reer ne vefe ket brasoc'h ar restroù eget $1; $2 eo ment ar restr-mañ.", 'largefileserver' => "Brasoc'h eo ar restr-mañ eget ar pezh a c'hall ar servijer aotren.", 'emptyfile' => "Evit doare eo goullo ar restr bet karget ganeoc'h. Moarvat eo abalamour d'an tipo en anv ar restr. Gwiriit mat e fell deoc'h pellgargañ ar restr-mañ.", @@ -1449,13 +1546,14 @@ Mar fell deoc'h enporzhiañ ho restr memes tra, kit war ho kiz ha grit gant un a Mar fell deoc'h enporzhiañ ar restr-mañ da vat, kit war ho kiz hag enporzhiit anezhi adarre dindan un anv all. [[File:$1|thumb|center|$1]]", 'file-exists-duplicate' => 'Un eil eus ar {{PLURAL:$1|restr|restroù}} da-heul eo ar restr-mañ :', 'file-deleted-duplicate' => "Diverket ez eus bet c'hoazh ur restr heñvel-poch ouzh ar restr-mañ ([[:$1]]). Gwelloc'h e vefe deoc'h teuler ur sell war istor diverkadenn ar bajenn-se a-raok hec'h enporzhiañ en-dro.", -'successfulupload' => 'Eiladenn kaset da benn vat', 'uploadwarning' => 'Diwallit!', 'uploadwarning-text' => 'Cheñchit deskrivadur ar restr a-is ha klaskit en-dro.', 'savefile' => 'Enrollañ ar restr', 'uploadedimage' => '"[[$1]]" enporzhiet', 'overwroteimage' => 'enporzhiet ur stumm nevez eus "[[$1]]"', 'uploaddisabled' => 'Ho tigarez, diweredekaet eo bet kas ar restr-mañ.', +'copyuploaddisabled' => 'Diweredekaet eo bet ar pellgargañ dre URL.', +'uploadfromurl-queued' => 'Lakaet eo bet ho pellgargadenn er roll gortoz.', 'uploaddisabledtext' => 'Diweredekaet eo an enporzhiañ restroù.', 'php-uploaddisabledtext' => 'Diweredekaet eo bet ar pellgargañ e PHP. Gwiriit an dibarzh arventennoù file_uploads.', 'uploadscripted' => "Er restr-mañ ez eus kodoù HTML pe skriptoù a c'hallfe bezañ kammgomprenet gant ur merdeer Kenrouedad.", @@ -1488,6 +1586,14 @@ JD # Jenoptik MGP # Pentax PICT # misc. # ", +'upload-success-subj' => 'Eiladenn kaset da benn vat', +'upload-success-msg' => 'Ho kargadenn eus [$2] a zo bet graet. Gellout a rit kavout anezhi amañ : [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Kudenn kargañ', +'upload-failure-msg' => "Ur gudenn 'zo bet e-pad ho kargadenn adalek [$2] : + +$1", +'upload-warning-subj' => "Kemmen diwall e-pad ar c'hargañ", +'upload-warning-msg' => "Ur gudenn zo bet e-kerzh hoc'h ezporzhiadur eus [$2]. Gallout a c'heller distreiñ d'ar [[Special:Upload/stash/$1|furmskrid ezporzhiañ]] evit renkañ ar gudenn.", 'upload-proto-error' => 'Protokol direizh', 'upload-proto-error-text' => 'Rekis eo an URLoù a grog gant http:// pe ftp:// evit enporzhiañ.', @@ -1551,6 +1657,7 @@ Klikañ e penn ar bann a cheñch an urzh kinnig.', 'listfiles_search_for' => 'Klask anv ar skeudenn :', 'imgfile' => 'restr', 'listfiles' => 'Roll ar skeudennoù', +'listfiles_thumb' => 'Munud', 'listfiles_date' => 'Deiziad', 'listfiles_name' => 'Anv', 'listfiles_user' => 'Implijer', @@ -1663,8 +1770,8 @@ Diskouezet eo deskrivadur he [$2 fajenn zeskrivañ] amañ dindan.', 'statistics-edits' => 'Kemmoù war ar pajennoù abaoe krouidigezh {{SITENAME}}', 'statistics-edits-average' => "Keidenn ar c'hemmoù dre bajenn", 'statistics-views-total' => 'Hollad ar selladennoù', +'statistics-views-total-desc' => "N'haller ket mont war ar pajennoù n'eus ket anezho pe war ar pajennoù dibar.", 'statistics-views-peredit' => 'Keidenn gweladenniñ dre gemmoù', -'statistics-jobqueue' => 'Hirder ar [http://www.mediawiki.org/wiki/Manual:Job_queue roll gortoz evit an tretiñ]', 'statistics-users' => '[[Special:ListUsers|Implijerien]] enrollet', 'statistics-users-active' => 'Implijerien oberiant', 'statistics-users-active-desc' => "Implijerien o deus degaset da nebeutañ ur c'hemm {{PLURAL:$1|an deiz paseet|e-kerzh an $1 deiz diwezhañ}}", @@ -1679,7 +1786,7 @@ Sellet e vez ouzh ur bajenn evel ouzh ur bajenn disheñvelout ma ra gant ur patr 'doubleredirects' => 'Adkasoù doubl', 'doubleredirectstext' => 'Rollañ a ra ar bajenn-mañ ar pajennoù a adkas da bajennoù adkas all. War bep linenn ez eus liammoù war-du pajennoù an adkas kentañ hag en eil adkas, hag ivez war-du pajenn-dal an eil adkas zo sañset bezañ ar pal "gwirion" a zlefe an adkas kentañ kas di. -Diskoulmet eo bet an enmontoù barrennet.', +Diskoulmet eo bet an enmontoù barrennet.', 'double-redirect-fixed-move' => 'Adanvet eo bet [[$1]], adkaset eo war-du [[$2]] bremañ', 'double-redirect-fixer' => 'Reizher adkasoù', @@ -1703,6 +1810,8 @@ $1 {{PLURAL:$1|rummad|rummad}}', 'nmembers' => '$1 {{PLURAL:$1|elfenn|elfenn}}', 'nrevisions' => '$1 {{PLURAL:$1|stumm|stumm}}', 'nviews' => '$1 {{PLURAL:$1|selladenn|selladenn}}', +'nimagelinks' => 'Implijet e $1 {{PLURAL:$1|pajenn|pajenn}}', +'ntransclusions' => 'implijet e $1 {{PLURAL:$1|pajenn|pajenn}}', 'specialpage-empty' => 'Goullo eo ar bajenn-mañ.', 'lonelypages' => 'Pajennoù hep liamm daveto', 'lonelypagestext' => "N'eo ket liammet pe enframmet ar pajennoù da-heul ouzh pajenn all ebet eus {{SITENAME}}.", @@ -1860,36 +1969,42 @@ Gallout a ra bezañ [[{{MediaWiki:Listgrouprights-helppage}}|titouroù ouzhpenn] 'listgrouprights-removegroup-self-all' => 'Gallout a ra tennañ kuit an holl strolladoù eus kont an-unan.', # E-mail user -'mailnologin' => "Chomlec'h ebet", -'mailnologintext' => "Ret eo deoc'h bezañ [[Special:UserLogin|kevreet]] +'mailnologin' => "Chomlec'h ebet", +'mailnologintext' => "Ret eo deoc'h bezañ [[Special:UserLogin|kevreet]] ha bezañ merket ur chomlec'h postel reizh en ho [[Special:Preferences|penndibaboù]] evit gallout kas ur postel d'un implijer all.", -'emailuser' => "Kas ur postel d'an implijer-mañ", -'emailpage' => 'Postel implijer', -'emailpagetext' => "Gallout a rit ober gant ar furmskrid a-is a-benn kas ur postel d'an implijer-mañ. +'emailuser' => "Kas ur postel d'an implijer-mañ", +'emailpage' => 'Postel implijer', +'emailpagetext' => "Gallout a rit ober gant ar furmskrid a-is a-benn kas ur postel d'an implijer-mañ. E maezienn \"Kaser\" ho postel e vo merket ar chomlec'h postel resisaet ganeoc'h-c'hwi en ho [[Special:Preferences|Penndibaboù]], d'ar resever da c'hallout respont deoc'h war-eeun ma kar.", -'usermailererror' => 'Fazi postel :', -'defemailsubject' => 'postel kaset eus {{SITENAME}}', -'noemailtitle' => "Chomlec'h postel ebet", -'noemailtext' => "N'en deus ket an implijer-mañ resisaet chomlec'h postel reizh ebet.", -'nowikiemailtitle' => 'Berzet kas posteloù', -'nowikiemailtext' => 'Dibabet ez eus bet gant an implijerien-mañ chom hep resev posteloù a-berzh implijerien all.', -'email-legend' => "Kas ur postel d'un implijer all eus {{SITENAME}}", -'emailfrom' => 'Kaser :', -'emailto' => 'Resever :', -'emailsubject' => 'Danvez :', -'emailmessage' => 'Postel :', -'emailsend' => 'Kas', -'emailccme' => "Kas din un eilskrid eus ma c'hemennadenn dre bostel.", -'emailccsubject' => 'Eilenn eus ho kemennadenn da $1: $2', -'emailsent' => 'Postel kaset', -'emailsenttext' => 'Kaset eo bet ho postel.', -'emailuserfooter' => 'Kaset eo bet ar postel-mañ gant $1 da $2 dre an arc\'hwel "Kas ur postel d\'an implijer" war {{SITENAME}}.', +'usermailererror' => 'Fazi postel :', +'defemailsubject' => 'postel kaset eus {{SITENAME}}', +'usermaildisabled' => "Diweredekaet eo ar c'has posteloù etre an implijerien.", +'usermaildisabledtext' => "Ne c'helloc'h ket kas posteloù da implijerien all er wiki-mañ", +'noemailtitle' => "Chomlec'h postel ebet", +'noemailtext' => "N'en deus ket an implijer-mañ resisaet chomlec'h postel reizh ebet.", +'nowikiemailtitle' => 'Berzet kas posteloù', +'nowikiemailtext' => 'Dibabet ez eus bet gant an implijerien-mañ chom hep resev posteloù a-berzh implijerien all.', +'email-legend' => "Kas ur postel d'un implijer all eus {{SITENAME}}", +'emailfrom' => 'Kaser :', +'emailto' => 'Resever :', +'emailsubject' => 'Danvez :', +'emailmessage' => 'Postel :', +'emailsend' => 'Kas', +'emailccme' => "Kas din un eilskrid eus ma c'hemennadenn dre bostel.", +'emailccsubject' => 'Eilenn eus ho kemennadenn da $1: $2', +'emailsent' => 'Postel kaset', +'emailsenttext' => 'Kaset eo bet ho postel.', +'emailuserfooter' => 'Kaset eo bet ar postel-mañ gant $1 da $2 dre an arc\'hwel "Kas ur postel d\'an implijer" war {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'En deus laosket ur gemennadenn sistem.', +'usermessage-editor' => 'Kemennerezh ar reizhiad', # Watchlist 'watchlist' => 'Roll evezhiañ', 'mywatchlist' => 'Ma roll evezhiañ', -'watchlistfor' => "(evit '''$1''')", +'watchlistfor2' => 'Evit $1 $2', 'nowatchlist' => "N'eus pennad ebet en ho roll evezhiañ.", 'watchlistanontext' => "Ret eo deoc'h $1 evit gwelet pe kemmañ an elfennoù zo en ho roll evezhiañ.", 'watchnologin' => 'Digevreet', @@ -1936,7 +2051,7 @@ Evit tennañ ar bajenn-mañ a-ziwar ho rollad evezhiañ. klikit war "Paouez da e 'enotif_anon_editor' => 'implijer dizanv $1', 'enotif_body' => '$WATCHINGUSERNAME ker, -$CHANGEDORCREATED eo bet ar bajenn {{SITENAME}} evit $PAGETITLE gant $PAGEEDITOR d\'an $PAGEEDITDATE, gwelet $PAGETITLE_URL evit gwelet ar stumm red. +$CHANGEDORCREATED eo bet pajenn $PAGETITLE {{SITENAME}} gant $PAGEEDITOR d\'an $PAGEEDITDATE gwelet $PAGETITLE_URL evit gwelet ar stumm red. $NEWPAGE @@ -1952,6 +2067,9 @@ Gallout a rit nevesaat doare ar pennadoù evezhiet ganeoc\'h en ho rollad evezhi Ho reizhiad kemenn {{SITENAME}} muiañ karet -- +A-benn kemmañ arventennoù ho kemennoù dre bostel, sellit ouzh +{{fullurl:{{#special:Preferences}}}} + A-benn kemmañ doare ho rollad evezhiañ, sellit ouzh {{fullurl:{{#special:Watchlist}}/edit}} @@ -2010,7 +2128,10 @@ Ar c'hemm diwezhañ d'ar bajenn-mañ a oa bet graet gant [[User:$3|$3]] ([[User 'revertpage' => "Kemmoù distaolet gant [[Special:Contributions/$2|$2]] ([[User talk:$2|Kaozeal]]); adlakaet d'ar stumm diwezhañ a-gent gant [[User:$1|$1]]", 'revertpage-nouser' => "Disteuler kemmoù (anv implijer distaolet) ha distreiñ d'ar stumm diwezhañ gant [[User:$1|$1]]", 'rollback-success' => 'Disteuler kemmoù $1; distreiñ da stumm diwezhañ $2.', -'sessionfailure' => 'Evit doare ez eus ur gudenn gant ho talc\'h; + +# Edit tokens +'sessionfailure-title' => "Fazi dalc'h", +'sessionfailure' => 'Evit doare ez eus ur gudenn gant ho talc\'h; Nullet eo bet an ober-mañ a-benn en em wareziñ diouzh an tagadennoù preizhañ. Klikit war "kent" hag adkargit ar bajenn oc\'h deuet drezi; goude klaskit en-dro.', @@ -2139,18 +2260,22 @@ $1', 'month' => 'Abaoe miz (hag a-raok) :', 'year' => 'Abaoe bloaz (hag a-raok) :', -'sp-contributions-newbies' => "Diskouez hepken degasadennoù ar c'hontoù nevez", -'sp-contributions-newbies-sub' => 'Evit an implijerien nevez', -'sp-contributions-newbies-title' => "Degasadennoù implijer evit ar c'hontoù nevez", -'sp-contributions-blocklog' => 'Roll ar stankadennoù', -'sp-contributions-deleted' => 'Degasadennoù diverket', -'sp-contributions-logs' => 'marilhoù', -'sp-contributions-talk' => 'kaozeal', -'sp-contributions-userrights' => 'Merañ ar gwirioù', -'sp-contributions-blocked-notice' => "Stanket eo an implijer-mañ evit poent. Dindan emañ merket moned diwezhañ marilh ar stankadennoù, d'ho kelaouiñ :", -'sp-contributions-search' => 'Klask degasadennoù', -'sp-contributions-username' => "Anv implijer pe chomlec'h IP :", -'sp-contributions-submit' => 'Klask', +'sp-contributions-newbies' => "Diskouez hepken degasadennoù ar c'hontoù nevez", +'sp-contributions-newbies-sub' => 'Evit an implijerien nevez', +'sp-contributions-newbies-title' => "Degasadennoù implijer evit ar c'hontoù nevez", +'sp-contributions-blocklog' => 'Roll ar stankadennoù', +'sp-contributions-deleted' => 'Degasadennoù diverket', +'sp-contributions-uploads' => 'Enporzhiadennoù', +'sp-contributions-logs' => 'marilhoù', +'sp-contributions-talk' => 'kaozeal', +'sp-contributions-userrights' => 'Merañ ar gwirioù', +'sp-contributions-blocked-notice' => "Stanket eo an implijer-mañ evit poent. Dindan emañ merket moned diwezhañ marilh ar stankadennoù, d'ho kelaouiñ :", +'sp-contributions-blocked-notice-anon' => "Stanket eo ar chomlec'h IP-mañ evit ar mare. +Dindan emañ merket enmont diwezhañ marilh ar stankadennoù, d'ho kelaouiñ :", +'sp-contributions-search' => 'Klask degasadennoù', +'sp-contributions-username' => "Anv implijer pe chomlec'h IP :", +'sp-contributions-toponly' => 'Na ziskouez nemet an adweladennoù diwezhañ', +'sp-contributions-submit' => 'Klask', # What links here 'whatlinkshere' => 'Pajennoù liammet', @@ -2214,7 +2339,6 @@ Sellit ouzh [[Special:IPBlockList|roll ar chomlec\'hioù IP ha kontoù stanket]] 'ipb-edit-dropdown' => 'Kemmañ an abegoù stankañ', 'ipb-unblock-addr' => 'Distankañ $1', 'ipb-unblock' => "Distankañ un implijer pe ur chomlec'h IP", -'ipb-blocklist-addr' => 'Stankadennoù zo evit $1', 'ipb-blocklist' => 'Teuler ur sell ouzh roll an dud stanket evit poent', 'ipb-blocklist-contribs' => 'Degasadennoù evit $1', 'unblockip' => "Distankañ ur chomlec'h IP", @@ -2282,6 +2406,8 @@ Stanket eo $1 c'hoazh. Kemmañ an arventennoù a fell deoc'h ?", 'sorbs_create_account_reason' => "Rollet eo ho chomlec'h IP evel ur proksi digor war an DNSBL implijet gant {{SITENAME}}. N'hallit ket krouiñ ur gont", 'cant-block-while-blocked' => "N'hallit ket stankañ implijerien all ma'z oc'h stanket c'hwi hoc'h-unan.", 'cant-see-hidden-user' => "Stanket ha kuzhet eo bet dija an implijer emaoc'h o klask stankañ. Dre ma n'emañ ket ganeoc'h ar gwir hideuser, n'hallit ket gwelet pe kemmañ stankadenn an implijer.", +'ipbblocked' => "Ne c'hellit ket stankañ pe distankañ implijerien all, dre ma 'z oc'h stanket", +'ipbnounblockself' => "N'oc'h ket aotreet d'en em zistankañ ho unan", # Developer tools 'lockdb' => 'Prennañ ar bank', @@ -2314,6 +2440,15 @@ Ne vo ket kemmet liammoù an titl kozh ha ne vo ket dilec'hiet ar bajenn gaozeal '''DIWALLIT!''' Gallout a ra kement-se bezañ ur c'hemm bras ha dic'hortoz evit ur pennad a vez sellet outi alies; bezit sur e komprenit mat an heuliadoù a-raok kenderc'hel ganti.", +'movepagetext-noredirectfixer' => "Grit gant ar furmskrid a-is evit adenvel ur bajenn hag adkas an istor anezhi war-zu an anv nevez. +Dont a raio an titl kozh da vezañ ur bajenn adkas war-zu an titl nevez. +Gwiriit mat an [[Special:DoubleRedirects|adkasoù doubl]] hag an [[Special:BrokenRedirects|adkasoù torr]]. +Ennoc'h emañ fiziet gwiriañ e kendalc'h al liammoù da gas war-zu ar bajenn a rankont kas daveti. + +Notit mat ne vo '''ket''' dilec'hiet ar bajenn ma'z eus dija unan gant an titl nevez nemet e vefe goullo istor ar c'hemmoù degaset enni hag e vefe pe goullo ar bajenn pe e vefe un adkas anezhi. Gant se e c'haller adenvel ur bajenn war-zu he lec'h orin mard eo faziek an dilec'hiañ ha dibosupl eo frikañ ur bajenn zo anezhi c'hoazh. + +'''Diwallit !''' +Ur c'hemm bras ha dic'hortoz e c'hall bezañ evit ur bajenn a vez sellet outi alies ; bezit sur hoc'h eus komprenet mat an heuliadoù a-raok kenderc'hel ganti.", 'movepagetalktext' => "Gant se e vo adanvet ent emgefre ar bajenn gaozeal stag, ma'z eus anezhi '''nemet ma:''' *ec'h adanvit ur bajenn war-du ul lec'h all, *ez eus ur bajenn gaozeal c'hoazh gant an anv nevez, pe @@ -2371,6 +2506,7 @@ Diverkañ anezhañ a fell deoc'h ober evit reiñ lec'h d'an adkas ?", 'immobile-source-page' => "N'haller ket adenvel ar bajenn-mañ.", 'immobile-target-page' => "N'haller ket kas ar bajenn-mañ war-du an titl-se.", 'imagenocrossnamespace' => "N'haller ket dilec'hiañ ur skeudenn war-du un esaouenn anv n'eo ket hini ur skeudenn.", +'nonfile-cannot-move-to-file' => "N'haller ket dilec'hiañ un dra ha n'eo ket ur restr war-du an esaouenn anv restr", 'imagetypemismatch' => 'Ne glot ket astenn nevez ar restr gant ar furmad-mañ.', 'imageinvalidfilename' => 'Fall eo anv ar restr tal', 'fix-double-redirects' => 'Hizivaat an holl adkasoù a gas war-du an titl orin', @@ -2449,6 +2585,7 @@ Enrollit ar bajenn war hoc'h urzhiataer ha kargit anezhi amañ.", 'importstart' => "Oc'h enporzhiañ pajennoù...", 'import-revision-count' => '$1 {{PLURAL:$1|stumm|stumm}}', 'importnopages' => 'Pajenn ebet da enporzhiañ.', +'imported-log-entries' => '$1 moned{{PLURAL:$1||}} eus ar marilh enporzhiet{{PLURAL:$1||}}.', 'importfailed' => "C'hwitet eo an enporzhiadenn: $1", 'importunknownsource' => 'Dianav eo seurt ar vammenn enporzhiañ', 'importcantopen' => "N'eus ket bet gallet digeriñ ar restr enporzhiet", @@ -2542,6 +2679,8 @@ Enrollit ar bajenn war hoc'h urzhiataer ha kargit anezhi amañ.", 'tooltip-rollback' => "\"Disteuler\" a zistaol en ur c'hlik ar c'hemm(où) bet degaset d'ar bajenn-mañ gant an implijer diwezhañ.", 'tooltip-undo' => '"Dizober" a zistaol ar c\'hemm-mañ hag a zigor ar prenestr skridaozañ er mod rakwelet. Talvezout a ra da ouzhpennañ un displegadenn er c\'hombod diverrañ.', +'tooltip-preferences-save' => 'Enrollañ ar penndibaboù', +'tooltip-summary' => 'Skrivit un diveradenn verr', # Stylesheets 'common.css' => '/** Talvezout a raio ar CSS lakaet amañ evit an holl gwiskadurioù */', @@ -2668,19 +2807,22 @@ $1', 'nextdiff' => "Stumm nevesoc'h →", # Media information -'mediawarning' => "'''Diwallit :''' Kodoù siek a c'hall bezañ er seurt restr-mañ. +'mediawarning' => "'''Diwallit :''' Kodoù siek a c'hall bezañ er seurt restr-mañ. Ma vez erounezet ganeoc'h e c'hallje tagañ ho reizhiad.", 'imagemaxsize' => "Bevenn ment vrasañ ar skeudennoù :
    ''(evit ar pajennoù deskrivañ)''", 'thumbsize' => 'Ment an alberz :', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|pajenn|pajenn}}', -'file-info' => '(ment ar restr : $1, seurt MIME : $2)', -'file-info-size' => '($1 × $2 piksel, ment ar restr : $3, seurt MIME : $4)', +'file-info' => 'ment ar restr : $1, seurt MIME : $2', +'file-info-size' => '$1 × $2 piksel, ment ar restr : $3, seurt MIME : $4', 'file-nohires' => "N'haller ket gwellaat ar pizhder.", -'svg-long-desc' => '(restr SVG file, pizhder $1 × $2 piksel, ment ar restr : $3)', +'svg-long-desc' => 'restr SVG file, pizhder $1 × $2 piksel, ment ar restr : $3', 'show-big-image' => 'Pizhder leun', 'show-big-image-thumb' => 'Ment ar rakweled-mañ : $1 × $2 piksel', 'file-info-gif-looped' => "e kelc'h", 'file-info-gif-frames' => '$1 {{PLURAL:$1|skeudenn|skeudenn}}', +'file-info-png-looped' => "e kelc'h", +'file-info-png-repeat' => 'lennet $1 {{PLURAL:$1|wezh|gwezh}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|skeudenn|skeudenn}}', # Special:NewFiles 'newimages' => 'Roll ar restroù nevez', @@ -2833,6 +2975,7 @@ Kement liamm all war an hevelep linenn a seller outañ evel un nemedenn, da skou 'exif-gpsareainformation' => 'Anv an takad GPS', 'exif-gpsdatestamp' => 'Deiziad GPS', 'exif-gpsdifferential' => "Reizhadenn diforc'hadus GPS", +'exif-objectname' => 'Titl berr', # EXIF attributes 'exif-compression-1' => 'Hep gwaskañ', @@ -2866,7 +3009,7 @@ Kement liamm all war an hevelep linenn a seller outañ evel un nemedenn, da skou 'exif-subjectdistance-value' => '$1 metr', 'exif-meteringmode-0' => 'Dianav', -'exif-meteringmode-1' => 'Keitat', +'exif-meteringmode-1' => 'Keidenn', 'exif-meteringmode-2' => 'Muzul kreiz keitat', 'exif-meteringmode-3' => 'Spot', 'exif-meteringmode-4' => 'Liesspot', @@ -2992,26 +3135,26 @@ Kement liamm all war an hevelep linenn a seller outañ evel un nemedenn, da skou 'limitall' => 'An holl', # E-mail address confirmation -'confirmemail' => "Kadarnaat ar chomlec'h postel", -'confirmemail_noemail' => "N'hoc'h eus ket spisaet chomlec'h postel mat ebet en ho [[Special:Preferences|penndibaboù implijer]].", -'confirmemail_text' => "Rankout a ra ar wiki-mañ bezañ gwiriet ho chomlec'h postel a-raok gallout implijout nep arc'hwel postel. Implijit ar bouton a-is evit kas ur postel kadarnaat d'ho chomlec'h. Ul liamm ennañ ur c'hod a vo er postel. Kargit al liamm-se en o merdeer evit kadarnaat ho chomlec'h.", -'confirmemail_pending' => "Ur c'hod kadarnaat zo bet kaset deoc'h dre bostel c'hoazh; +'confirmemail' => "Kadarnaat ar chomlec'h postel", +'confirmemail_noemail' => "N'hoc'h eus ket spisaet chomlec'h postel mat ebet en ho [[Special:Preferences|penndibaboù implijer]].", +'confirmemail_text' => "Rankout a ra ar wiki-mañ bezañ gwiriet ho chomlec'h postel a-raok gallout implijout nep arc'hwel postel. Implijit ar bouton a-is evit kas ur postel kadarnaat d'ho chomlec'h. Ul liamm ennañ ur c'hod a vo er postel. Kargit al liamm-se en o merdeer evit kadarnaat ho chomlec'h.", +'confirmemail_pending' => "Ur c'hod kadarnaat zo bet kaset deoc'h dre bostel c'hoazh; a-raok klask goulenn unan nevez, m'emaoc'h o paouez krouiñ ho kont, e vo fur eus ho perzh gortoz un nebeud munutoù ha leuskel amzer dezhañ d'en em gavout betek ennoc'h.", -'confirmemail_send' => "Kas ur c'hod kadarnaat", -'confirmemail_sent' => 'Postel kadarnaat kaset.', -'confirmemail_oncreate' => "Kaset ez eus bet ur c'hod kadarnaat d'ho chomlec'h postel. +'confirmemail_send' => "Kas ur c'hod kadarnaat", +'confirmemail_sent' => 'Postel kadarnaat kaset.', +'confirmemail_oncreate' => "Kaset ez eus bet ur c'hod kadarnaat d'ho chomlec'h postel. N'eus ket ezhomm eus ar c'hod-mañ evit kevreañ met ret e vo deoc'h ober gantañ evit aotren hini pe hini eus arc'hwelioù postel ar wiki.", -'confirmemail_sendfailed' => "Dibosupl kas ar postel kadarnaat deoc'h gant {{SITENAME}}. +'confirmemail_sendfailed' => "Dibosupl kas ar postel kadarnaat deoc'h gant {{SITENAME}}. Gwiriit ha n'eus ket arouezennoù direizh en ho chomlec'h. Distro ar posteler : $1", -'confirmemail_invalid' => "Kod kadarnaat kamm. Marteze eo aet ar c'hod d'e dermen", -'confirmemail_needlogin' => "Ret eo deoc'h $1 evit kadarnaat ho chomlec'h postel.", -'confirmemail_success' => "Kadarnaet eo ho chomlec'h postel. A-benn bremañ e c'hallit [[Special:UserLogin|kevreañ]] hag ober ho mad eus ar wiki.", -'confirmemail_loggedin' => "Kadarnaet eo ho chomlec'h bremañ", -'confirmemail_error' => 'Ur gudenn zo bet e-ser enrollañ ho kadarnadenn', -'confirmemail_subject' => "Kadarnadenn chomlec'h postel evit {{SITENAME}}", -'confirmemail_body' => "Unan bennak, c'hwi moarvat, gant ar chomlec'h IP \$1, +'confirmemail_invalid' => "Kod kadarnaat kamm. Marteze eo aet ar c'hod d'e dermen", +'confirmemail_needlogin' => "Ret eo deoc'h $1 evit kadarnaat ho chomlec'h postel.", +'confirmemail_success' => "Kadarnaet eo ho chomlec'h postel. A-benn bremañ e c'hallit [[Special:UserLogin|kevreañ]] hag ober ho mad eus ar wiki.", +'confirmemail_loggedin' => "Kadarnaet eo ho chomlec'h bremañ", +'confirmemail_error' => 'Ur gudenn zo bet e-ser enrollañ ho kadarnadenn', +'confirmemail_subject' => "Kadarnadenn chomlec'h postel evit {{SITENAME}}", +'confirmemail_body' => "Unan bennak, c'hwi moarvat, gant ar chomlec'h IP \$1, en deus enrollet ur gont \"\$2\" gant ar chomlec'h postel-mañ war lec'hienn {{SITENAME}}. A-benn kadarnaat eo deoc'h ar gont-se ha gweredekaat @@ -3025,8 +3168,36 @@ evit nullañ kadarnaat ar chomlec'h postel : \$5 Mont a raio ar c'hod-mañ d'e dermen d'ar \$4.", -'confirmemail_invalidated' => "Nullet eo bet kadarnaat ar chomlec'h postel", -'invalidateemail' => 'Nullañ kadarnaat ar postel', +'confirmemail_body_changed' => "Unan bennak, c'hwi sur a-walc'h, gant ar chomlec'h IP \$1, +en deus cheñchet chomlec'h postel ar gont \"\$2\" gant ar chomlec'h postel-mañ war lec'hienn {{SITENAME}}. + +A-benn kadarnaat eo deoc'h ar gont-se hag adgweredekaat +ar perzhioù postel war {{SITENAME}}, digorit al liamm-mañ en ho merdeer : + +\$3 + +Ma n'eo *ket* deoc'h ar gont, heuilhit al liamm-mañ +evit nullañ kadarnaat ar chomlec'h postel : + +\$5 + +Mont a raio ar c'hod kadarnaat-mañ d'e dermen d'ar \$4.", +'confirmemail_body_set' => "Unan bennak, c'hwi moarvat, gant ar chomlec'h IP \$1, +en deus enrollet ur gont \"\$2\" gant ar chomlec'h postel-mañ war lec'hienn {{SITENAME}}. + +Evit kadarnaat eo deoc'h ar gont-se ha gweredekaat en-dro +an arc'hwelioù postelerezh war {{SITENAME}}, digorit al liamm-mañ en ho merdeer : + +\$3 + +Ma n'eo *ket* deoc'h ar gont heuilhit al liamm-mañ +evit nullañ kadarnaat ar chomlec'h postel : + +\$5 + +Mont a raio ar c'hod-mañ d'e dermen d'ar \$4.", +'confirmemail_invalidated' => "Nullet eo bet kadarnaat ar chomlec'h postel", +'invalidateemail' => 'Nullañ kadarnaat ar postel', # Scary transclusion 'scarytranscludedisabled' => '[Diweredekaet eo an treuzkludañ etrewiki]', @@ -3066,6 +3237,7 @@ Kadarnait mar plij e fell deoc'h krouiñ ar pennad-mañ da vat.", 'table_pager_first' => 'Pajenn gentañ', 'table_pager_last' => 'Pajenn ziwezhañ', 'table_pager_limit' => 'Diskouez $1 elfenn dre bajenn', +'table_pager_limit_label' => "Disoc'hoù dre bajenn :", 'table_pager_limit_submit' => 'Mont', 'table_pager_empty' => "Disoc'h ebet", @@ -3142,6 +3314,7 @@ Gallout a rit [[Special:Watchlist/edit|implijout an aozer boutin ivez]].', 'version-specialpages' => 'Pajennoù dibar', 'version-parserhooks' => 'Galvoù dielfennañ', 'version-variables' => 'Argemmoù', +'version-skins' => 'Gwiskadurioù', 'version-other' => 'Diseurt', 'version-mediahandlers' => 'Merer danvez liesvedia', 'version-hooks' => 'Galvoù', @@ -3153,6 +3326,13 @@ Gallout a rit [[Special:Watchlist/edit|implijout an aozer boutin ivez]].', 'version-hook-subscribedby' => 'Termenet gant', 'version-version' => '(Stumm $1)', 'version-license' => 'Aotre-implijout', +'version-poweredby-credits' => "Mont a ra ar wiki-mañ en-dro a-drugarez da '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 're all', +'version-license-info' => "Ur meziant frank eo MediaWiki; gallout a rit skignañ anezhañ ha/pe kemmañ anezhañ dindan termenoù ar GNU Aotre implijout Foran Hollek evel m'emañ embannet gant Diazezadur ar Meziantoù Frank; pe diouzh stumm 2 an aotre implijout, pe (evel mar karit) ne vern pe stumm nevesoc'h. + +Ingalet eo MediaWiki gant ar spi e vo talvoudus met n'eus TAMM GWARANT EBET; hep zoken gwarant empleg ar VARC'HADUSTED pe an AZASTER OUZH UR PAL BENNAK. Gwelet ar GNU Aotre Implijout Foran Hollek evit muioc'h a ditouroù. + +Sañset oc'h bezañ resevet [{{SERVER}}{{SCRIPTPATH}}/COPYING un eilskrid eus ar GNU Aotre implijout Foran Hollek] a-gevret gant ar programm-mañ; ma n'hoc'h eus ket, skrivit da Diazezadur ar Meziantoù Frank/Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, SUA pe [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html lennit anezhañ enlinenn].", 'version-software' => 'Meziant staliet', 'version-software-product' => 'Produ', 'version-software-version' => 'Stumm', @@ -3222,6 +3402,15 @@ Merkañ anv ar restr hep ar rakger "{{ns:file}}:"', 'tags-edit' => 'aozañ', 'tags-hitcount' => '$1 {{PLURAL:$1|kemm|kemm}}', +# Special:ComparePages +'comparepages' => 'Keñveriañ pajennoù', +'compare-selector' => 'Keñveriañ stummoù ar pajennoù', +'compare-page1' => 'Pajenn 1', +'compare-page2' => 'Pajenn 2', +'compare-rev1' => 'Adweladenn 1', +'compare-rev2' => 'Adweladenn 2', +'compare-submit' => 'Keñveriañ', + # Database error messages 'dberr-header' => 'Ur gudenn zo gant ar wiki-mañ', 'dberr-problems' => "Ho tigarez ! Kudennoù teknikel zo gant al lec'hienn-mañ.", @@ -3238,8 +3427,13 @@ Merkañ anv ar restr hep ar rakger "{{ns:file}}:"', 'htmlform-float-invalid' => "An dalvoudenn bet lakaet ganeoc'h n'eo ket un niver.", 'htmlform-int-toolow' => "Skrivet hoc'h eus un dalvoudenn zo dindan an niver bihanañ aotreet a $1", 'htmlform-int-toohigh' => "Skrivet hoc'h eus un dalvoudenn a ya dreist d'an niver uhelañ aotreet a $1", +'htmlform-required' => 'An talvoudenn-mañ a zo ret', 'htmlform-submit' => 'Kas', 'htmlform-reset' => "Dizober ar c'hemmoù", 'htmlform-selectorother-other' => 'Unan all', +# SQLite database support +'sqlite-has-fts' => '$1 gant enklask eus an destenn a-bezh embreget', +'sqlite-no-fts' => '$1 hep enklask eus an destenn a-bezh embreget', + ); diff --git a/languages/messages/MessagesBs.php b/languages/messages/MessagesBs.php index 82281604..f9795f0d 100644 --- a/languages/messages/MessagesBs.php +++ b/languages/messages/MessagesBs.php @@ -12,6 +12,7 @@ * @author Fulup * @author Kal-El * @author Malafaya + * @author Palapa * @author Seha * @author Smooth O * @author לערי ריינהארט @@ -89,6 +90,7 @@ $specialPageAliases = array( 'Allpages' => array( 'SveStranice' ), 'Prefixindex' => array( 'IndeksPrefiksa' ), 'Ipblocklist' => array( 'ListaBlokiranjaPrekoIP' ), + 'Unblock' => array( 'Deblokada' ), 'Specialpages' => array( 'SpecijalneStranice' ), 'Contributions' => array( 'Doprinos' ), 'Emailuser' => array( 'EmailKorisnika' ), @@ -133,6 +135,8 @@ $specialPageAliases = array( 'DeletedContributions' => array( 'ObrisaniDoprinosi' ), 'Tags' => array( 'Oznake' ), 'Activeusers' => array( 'AktivniKorisnici' ), + 'ComparePages' => array( 'UporedjivanjeStranica' ), + 'Badtitle' => array( 'Losnaslov' ), ); $magicWords = array( @@ -201,14 +205,14 @@ $magicWords = array( 'img_width' => array( '1', '$1piksel', '$1p', '$1px' ), 'img_center' => array( '1', 'centar', 'c', 'center', 'centre' ), 'img_framed' => array( '1', 'okvir', 'ram', 'framed', 'enframed', 'frame' ), - 'img_frameless' => array( '1', 'bez okvira', 'frameless' ), + 'img_frameless' => array( '1', 'bez_okvira', 'frameless' ), 'img_page' => array( '1', 'stranica=$1', 'stranica $1', 'page=$1', 'page $1' ), - 'img_upright' => array( '1', 'na gore', 'na gore=$1', 'na gore$1', 'upright', 'upright=$1', 'upright $1' ), + 'img_upright' => array( '1', 'na_gore', 'na_gore=$1', 'na_gore_$1', 'upright', 'upright=$1', 'upright $1' ), 'img_border' => array( '1', 'granica', 'border' ), - 'img_baseline' => array( '1', 'pocetna linija', 'baseline' ), + 'img_baseline' => array( '1', 'pocetna_linija', 'baseline' ), 'img_sub' => array( '1', 'odjeljak', 'sub' ), 'img_top' => array( '1', 'vrh', 'top' ), - 'img_text_top' => array( '1', 'vrh teksta', 'text-top' ), + 'img_text_top' => array( '1', 'vrh_teksta', 'text-top' ), 'img_middle' => array( '1', 'sredina', 'middle' ), 'img_bottom' => array( '1', 'dugme', 'bottom' ), 'img_text_bottom' => array( '1', 'tekst-dugme', 'text-bottom' ), @@ -260,10 +264,12 @@ $magicWords = array( 'staticredirect' => array( '1', '__STATISTICNOPREUSMJERENJE__', '__STATICREDIRECT__' ), 'protectionlevel' => array( '1', 'NIVOZASTITE', 'PROTECTIONLEVEL' ), 'formatdate' => array( '0', 'formatdatuma', 'formatdate', 'dateformat' ), + 'url_path' => array( '0', 'PUTANJA', 'PATH' ), + 'url_query' => array( '0', 'UPIT', 'QUERY' ), ); $fallback8bitEncoding = "iso-8859-2"; -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $linkTrail = '/^([a-zćčžšđž]+)(.*)$/sDu'; $messages = array( @@ -282,8 +288,7 @@ $messages = array( 'tog-editsection' => 'Omogući da mijenjam pojedinačne odjeljke putem [uredi] linka', 'tog-editsectiononrightclick' => 'Uključite uređivanje odjeljka sa pritiskom na desno dugme miša u naslovu odjeljka (JavaScript)', 'tog-showtoc' => 'Prikaži sadržaj (u svim stranicama sa više od tri podnaslova)', -'tog-rememberpassword' => 'Zapamti šifru za iduće posjete', -'tog-editwidth' => 'Proširi kutiju za uređivanje da ispuni cijeli ekran', +'tog-rememberpassword' => 'Zapamti moju šifru u ovom pregledniku (najviše $1 {{PLURAL:$1|dan|dana}})', 'tog-watchcreations' => 'Dodaj stranice koje ja napravim u moj spisak praćenih članaka', 'tog-watchdefault' => 'Dodaj stranice koje uređujem u moj spisak praćenih članaka', 'tog-watchmoves' => 'Stranice koje premjestim dodaj na spisak praćenja', @@ -429,31 +434,21 @@ $messages = array( 'faqpage' => 'Project:NPP', # Vector skin -'vector-action-addsection' => 'Dodaj temu', -'vector-action-delete' => 'Brisanje', -'vector-action-move' => 'Preusmjeri', -'vector-action-protect' => 'Zaštiti', -'vector-action-undelete' => 'Vrati obrisano', -'vector-action-unprotect' => 'Oslobodi zaštitu', -'vector-namespace-category' => 'Kategorija', -'vector-namespace-help' => 'Stranica pomoći', -'vector-namespace-image' => 'Datoteka', -'vector-namespace-main' => 'Stranica', -'vector-namespace-media' => 'Stranica medije', -'vector-namespace-mediawiki' => 'Poruka', -'vector-namespace-project' => 'Stranica projekta', -'vector-namespace-special' => 'Posebna stranica', -'vector-namespace-talk' => 'Razgovor', -'vector-namespace-template' => 'Šablon', -'vector-namespace-user' => 'Korisnička stranica', -'vector-view-create' => 'Napravi', -'vector-view-edit' => 'Uređivanje', -'vector-view-history' => 'Pregled historije', -'vector-view-view' => 'Čitanje', -'vector-view-viewsource' => 'Pogledaj izvor', -'actions' => 'Akcije', -'namespaces' => 'Imenski prostori', -'variants' => 'Varijante', +'vector-action-addsection' => 'Dodaj temu', +'vector-action-delete' => 'Brisanje', +'vector-action-move' => 'Preusmjeri', +'vector-action-protect' => 'Zaštiti', +'vector-action-undelete' => 'Vrati obrisano', +'vector-action-unprotect' => 'Oslobodi zaštitu', +'vector-simplesearch-preference' => 'Omogući napredne sugestije pretrage (samo vector koža)', +'vector-view-create' => 'Napravi', +'vector-view-edit' => 'Uređivanje', +'vector-view-history' => 'Pregled historije', +'vector-view-view' => 'Čitanje', +'vector-view-viewsource' => 'Pogledaj izvor', +'actions' => 'Akcije', +'namespaces' => 'Imenski prostori', +'variants' => 'Varijante', 'errorpagetitle' => 'Greška', 'returnto' => 'Povratak na $1.', @@ -514,6 +509,9 @@ Previše korisnika pokušava da pregleda ovu stranicu. Molimo pričekajte trenutak prije nego što ponovno pokušate pristupiti ovoj stranici. $1', +'pool-timeout' => 'Zaustavi čekanje na zaključavanje', +'pool-queuefull' => 'Red na pool je prenapunjen', +'pool-errorunknown' => 'Nepoznata greška', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'O projektu {{SITENAME}}', @@ -679,7 +677,8 @@ Ne zaboravite da prilagodite sebi svoja [[Special:Preferences|{{SITENAME}} pode 'yourname' => 'Korisničko ime:', 'yourpassword' => 'Šifra:', 'yourpasswordagain' => 'Ponovite šifru:', -'remembermypassword' => 'Zapamti šifru za iduće posjete', +'remembermypassword' => 'Zapamti moju šifru na ovom računaru (najviše $1 {{PLURAL:$1|dan|dana|dana}})', +'securelogin-stick-https' => 'Ostani povezan na HTTPS nakon prijave', 'yourdomainname' => 'Vaš domen:', 'externaldberror' => 'Došlo je do greške pri vanjskoj autorizaciji baze podataka ili vam nije dopušteno osvježavanje Vašeg vanjskog korisničkog računa.', 'login' => 'Prijavi se', @@ -696,6 +695,7 @@ Ne zaboravite da prilagodite sebi svoja [[Special:Preferences|{{SITENAME}} pode 'gotaccount' => "Imate nalog? '''$1'''.", 'gotaccountlink' => 'Prijavi se', 'createaccountmail' => 'e-poštom', +'createaccountreason' => 'Razlog:', 'badretype' => 'Šifre koje ste unijeli se ne poklapaju.', 'userexists' => 'Korisničko ime koje ste unijeli je već u upotrebi. Molimo Vas da izaberete drugo ime.', @@ -719,6 +719,7 @@ Molimo Vas da pokušate ponovno.', Molimo Vas da pokušate ponovno.', 'passwordtooshort' => 'Šifra mora imati najmanje {{PLURAL:$1|1 znak|$1 znaka|$1 znakova}}.', 'password-name-match' => 'Vaša šifra mora biti različita od Vašeg korisničkog imena.', +'password-login-forbidden' => 'Korištenje ovih korisničkih imena i šifara je zabranjeo.', 'mailmypassword' => 'Pošalji mi novu šifru', 'passwordremindertitle' => 'Nova privremena šifra za {{SITENAME}}', 'passwordremindertext' => 'Neko (vjerovatno Vi, sa IP adrese $1) je zahtjevao da vam pošaljemo novu šifru za {{SITENAME}} ($4). Privremena šifra za korisnika "$2" je napravljena i glasi "$3". Ako ste to željeli, sad treba da se prijavite i promjenite šifru. @@ -757,6 +758,9 @@ Molimo Vas da sačekate prije nego što pokušate ponovo.', 'loginlanguagelabel' => 'Jezik: $1', 'suspicious-userlogout' => 'Vaš zahtjev za odjavu je odbijen jer je poslan preko pokvarenog preglednika ili keširanog proksija.', +# E-mail sending +'php-mail-error-unknown' => 'Nepoznata greška u PHP funkciji mail()', + # Password reset dialog 'resetpass' => 'Promijeni korisničku šifru', 'resetpass_announce' => 'Prijavili ste se sa privremenim kodom koji ste dobili na e-mail. @@ -809,6 +813,7 @@ Možda ste već uspješno promijenili Vašu šifru ili ste tražili novu privrem 'showlivepreview' => 'Pregled uživo', 'showdiff' => 'Prikaži izmjene', 'anoneditwarning' => 'Niste prijavljeni. Vaša IP adresa će biti zapisana.', +'anonpreviewwarning' => "''Niste prijavljeni. Nakon spremanja izmjena vaša IP adresa će biti zapisana u historiji uređivanja ove stranice.''", 'missingsummary' => "'''Napomena:''' Niste unijeli sažetak izmjene. Ako kliknete na Sačuvaj, Vaša izmjena će biti sačuvana bez sažetka.", 'missingcommenttext' => 'Molimo unesite komentar ispod.', @@ -892,8 +897,12 @@ Posljednje stavke zapisnika blokiranja možete pogledati ispod:', 'usercsspreview' => "'''Zapamtite ovo je samo izgled Vašeg CSS-a.''' '''Ovaj pregled još uvijek nije sačuvan!'''", 'userjspreview' => "'''Zapamtite ovo je samo izgled vaše JavaScript-e, još uvijek nije sačuvan!'''", +'sitecsspreview' => "'''Zapamtite ovo je samo izgled ovog CSS-a.''' +'''Još uvijek nije sačuvan!'''", +'sitejspreview' => "'''Zapamtite ovo je samo izgled ovog koda JavaScripte.''' +'''Još uvijek nije sačuvan!'''", 'userinvalidcssjstitle' => "'''Upozorenje:''' Ne postoji interfejs pod imenom \"\$1\". -Ne zaboravite da imena stranica s .css i .js kodom počinju malim slovom, npr. {{ns:user}}:Foo/monobook.css, a ne {{ns:user}}:Foo/Monobook.css.", +Ne zaboravite da imena stranica s .css i .js kodom počinju malim slovom, npr. {{ns:user}}:Foo/vector.css, a ne {{ns:user}}:Foo/Vector.css.", 'updated' => '(Osvježeno)', 'note' => "'''Pažnja:'''", 'previewnote' => "'''Ovo je samo pregled; izmjene stranice nisu još sačuvane!'''", @@ -934,9 +943,6 @@ nemojte ih slati ovdje. Takođe, slanje članka podrazumijeva i vašu izjavu da 'copyrightwarning2' => "Zapamtite da svi doprinosi na stranici {{SITENAME}} može biti izmijenjen, promijenjen ili uklonjen od strane ostalih korisnika. Ako ne želite da ovo desi sa Vašim tekstom, onda ga nemojte slati ovdje.
    Također nam garantujete da ste ovo Vi napisali, ili da ste ga kopirali iz javne domene ili sličnog slobodnog izvora informacija (pogledajte $1 za više detalja). '''NE ŠALJITE AUTORSKIM PRAVOM ZAŠTIĆENE TEKSTOVE BEZ DOZVOLE!'''", -'longpagewarning' => "'''Pažnja''': Ova stranica ima $1 kilobajta; -neki preglednici mogu imati problema kad uređujete stranice skoro ili veće od 32 kilobajta. -Molimo Vas da razmotrite razbijanje stranice na manje dijelove.", 'longpageerror' => "'''Greška: Tekst, koji ste poslali, je dug $1 kilobajta, što je veće od maksimuma, koji iznosi $2 kilobajta. Stranica ne može biti spremljena.'''", 'readonlywarning' => "'''PAŽNJA: Baza je zaključana zbog održavanja, tako da nećete moći da sačuvate svoje izmjene za sada. @@ -1116,6 +1122,8 @@ $1", 'logdelete-failure' => "'''Zapisnik vidljivosti nije mogao biti postavljen:''' $1", 'revdel-restore' => 'Promijeni dostupnost', +'revdel-restore-deleted' => 'obrisane revizije', +'revdel-restore-visible' => 'vidljive revizije', 'pagehist' => 'Historija stranice', 'deletedhist' => 'Izbrisana historija', 'revdelete-content' => 'sadržaj', @@ -1183,11 +1191,13 @@ Korištenje navigacionih linkova će resetovati ovaj stupac.', # Diffs 'history-title' => 'Historija izmjena stranice "$1"', 'difference' => '(Razlika između revizija)', +'difference-multipage' => '(Razlika između stranica)', 'lineno' => 'Linija $1:', 'compareselectedversions' => 'Uporedite označene verzije', 'showhideselectedversions' => 'Pokaži/sakrij odabrane verzije', 'editundo' => 'ukloni ovu izmjenu', -'diff-multi' => '({{plural:$1|Nije prikazana jedna međuverzija|Nisu prikazane $1 međuverzije|Nije prikazano $1 međuverzija}})', +'diff-multi' => '({{plural:$1|Nije prikazana jedna međurevizija|Nisu prikazane $1 međurevizije|Nije prikazano $1 međurevizija}} od {{PLURAL:$2|jednog korisnika|$2 korisnika}})', +'diff-multi-manyusers' => '({{PLURAL:$1|Jedna međurevizija|$1 međurevizije|$1 međurevizija}} od više od $2 {{PLURAL:$2|korisnika|korisnika}} {{PLURAL:$1|nije prikazana|nisu prikazane}})', # Search results 'searchresults' => 'Rezultati pretrage', @@ -1222,6 +1232,7 @@ Korištenje navigacionih linkova će resetovati ovaj stupac.', 'searchprofile-everything-tooltip' => 'Pretraži sve sadržaje (ukljujući i stranice za razgovor)', 'searchprofile-advanced-tooltip' => 'Traži u ostalim imenskim prostorima', 'search-result-size' => '$1 ({{PLURAL:$2|$2 riječ|$2 riječi}})', +'search-result-category-size' => '{{PLURAL:$1|1 član|$1 člana|$1 članova}} ({{PLURAL:$2|1 podkategorija|$2 podkategorije|$2 podkategorija}}, {{PLURAL:$3|1 datoteka|$3 datoteke|$3 datoteka}})', 'search-result-score' => 'Relevantnost: $1%', 'search-redirect' => '(preusmjeravanje $1)', 'search-section' => '(sekcija $1)', @@ -1297,6 +1308,7 @@ Pokušajte u Vaš upit uključiti prefiks ''all:'' da bi ste pretražili sav sad 'contextlines' => 'Linija po pogotku:', 'contextchars' => 'Karaktera konteksta po liniji:', 'stub-threshold' => 'Formatiranje linkova stranica u začetku (bajtova):', +'stub-threshold-disabled' => 'Isključen/a', 'recentchangesdays' => 'Broj dana za prikaz u nedavnim izmjenama:', 'recentchangesdays-max' => '(najviše $1 {{PLURAL:$1|dan|dana}})', 'recentchangescount' => 'Broj uređivanja za prikaz po pretpostavkama:', @@ -1330,6 +1342,7 @@ Ovdje su navedene neke nasumično odabrane vrijednosti koje možete koristiti: $ 'prefs-files' => 'Datoteke', 'prefs-custom-css' => 'Prilagođeni CSS', 'prefs-custom-js' => 'Prilagođeni JS', +'prefs-common-css-js' => 'Dijeljeni CSS/JS za sve kože:', 'prefs-reset-intro' => 'Možete koristiti ovu stranicu da poništite Vaše postavke na ovom sajtu na pretpostavljene vrijednosti. Ovo se ne može vratiti unazad.', 'prefs-emailconfirm-label' => 'E-mail potvrda:', @@ -1369,9 +1382,15 @@ Također omogućuje drugim korisnicima da vas kontaktiraju preko Vaše korisnič 'prefs-advancedrendering' => 'Napredne opcije', 'prefs-advancedsearchoptions' => 'Napredne opcije', 'prefs-advancedwatchlist' => 'Napredne opcije', -'prefs-display' => 'Postavke izgleda', +'prefs-displayrc' => 'Postavke izgleda', +'prefs-displaysearchoptions' => 'Postavke izgleda', +'prefs-displaywatchlist' => 'Postavke izgleda', 'prefs-diffs' => 'Razlike', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Izgleda valjano', +'email-address-validity-invalid' => 'Neophodna valjana adresa!', + # User rights 'userrights' => 'Postavke korisničkih prava', 'userrights-lookup-user' => 'Menadžment korisničkih grupa', @@ -1455,6 +1474,7 @@ Također omogućuje drugim korisnicima da vas kontaktiraju preko Vaše korisnič 'right-hideuser' => 'Blokiranje korisničkog imena, i njegovo sakrivanje od javnosti', 'right-ipblock-exempt' => 'Zaobilaženje IP blokada, autoblokada i blokada IP grupe', 'right-proxyunbannable' => 'Zaobilaženje automatskih blokada proxy-ja', +'right-unblockself' => 'Deblokiranje samog sebe', 'right-protect' => 'Promjena nivoa zaštite i uređivanje zaštićenih stranica', 'right-editprotected' => 'Uređivanje zaštićenih stranica (bez povezanih zaštita)', 'right-editinterface' => 'Uređivanje korisničkog interfejsa', @@ -1477,7 +1497,6 @@ Također omogućuje drugim korisnicima da vas kontaktiraju preko Vaše korisnič 'right-siteadmin' => 'Zaključavanje i otključavanje baze podataka', 'right-reset-passwords' => 'Resetuje šifre drugih korisnika', 'right-override-export-depth' => 'Izvoz stranica uključujući povezane stranice do dubine od 5 linkova', -'right-versiondetail' => 'Pregledavanje proširenih informacija o verzijama softvera', 'right-sendemail' => 'Slanje e-maila drugim korisnicima', # User rights log @@ -1528,14 +1547,9 @@ Također omogućuje drugim korisnicima da vas kontaktiraju preko Vaše korisnič 'recentchanges-legend' => 'Postavke nedavnih izmjena', 'recentchangestext' => 'Na ovoj stranici možete pratiti nedavne izmjene.', 'recentchanges-feed-description' => 'Na ovoj stranici možete pratiti nedavne izmjene.', -'recentchanges-label-legend' => 'Legenda: $1.', -'recentchanges-legend-newpage' => '$1 - nova stranica', 'recentchanges-label-newpage' => 'Ovom izmjenom se pravi nova stranica', -'recentchanges-legend-minor' => '$1 - mala izmjena', 'recentchanges-label-minor' => 'Ovo je mala izmjena', -'recentchanges-legend-bot' => '$1 - izmjena bota', 'recentchanges-label-bot' => 'Ova izmjenu je načinio bot', -'recentchanges-legend-unpatrolled' => '$1 - nepatrolirana izmjena', 'recentchanges-label-unpatrolled' => 'Ova izmjena još nije patrolirana', 'rcnote' => "Ispod {{PLURAL:$1|je '''$1''' promjena|su '''$1''' zadnje promjene|su '''$1''' zadnjih promjena}} u {{PLURAL:$2|posljednjem '''$2''' danu|posljednja '''$2''' dana|posljednjih '''$2''' dana}}, od $4, $5.", 'rcnotefrom' => 'Ispod su izmjene od $2 (do $1 prikazano).', @@ -1582,6 +1596,8 @@ Stranice koje su na vašem [[Special:Watchlist|spisku praćenja]] su '''podeblja 'upload_directory_missing' => 'Folder za postavljanje ($1) nedostaje i webserver ga ne može napraviti.', 'upload_directory_read_only' => 'Folder za postavljanje ($1) na webserveru je postavljen samo za čitanje.', 'uploaderror' => 'Greška pri slanju', +'upload-recreate-warning' => "'''Upozorenje: Datoteka s tim imenom je obrisana ili premještena.''' +Zapisnik brisanja i premještanja za ovu stranicu je dostupan ovdje na uvid:", 'uploadtext' => "Koristite formu ispod za postavljanje datoteka. Da bi ste vidjeli ili pretražili ranije postavljene datoteke, pogledajte [[Special:FileList|spisak postavljenih datoteka]], ponovna postavljanja su također zapisana u [[Special:Log/upload|zapisnik postavljanja]], a brisanja u [[Special:Log/delete|zapisnik brisanja]]. @@ -1616,6 +1632,17 @@ Molimo Vas da promijenite ime datoteke i pokušate da je ponovo postavite.', 'filetype-banned-type' => "'''\".\$1\"''' nije dopuštena vrsta datoteke. {{PLURAL:\$3|Dopuštena vrsta datoteke je|Dopuštene vrste datoteka su}} \$2.", 'filetype-missing' => 'Datoteka nema ekstenziju (poput ".jpg").', +'empty-file' => 'Datoteka koju ste poslali je bila prazna.', +'file-too-large' => 'Datoteka koju ste poslali je bila prevelika.', +'filename-tooshort' => 'Ime datoteke je prekratko.', +'filetype-banned' => 'Ova vrsta datoteke je zabranjena.', +'verification-error' => 'Ova datoteka nije prošla provjeru.', +'hookaborted' => 'Izmjena koji ste pokušali načiniti je obustavljena preko kuke proširenja.', +'illegal-filename' => 'Ime datoteke nije dopušteno.', +'overwrite' => 'Pisanje preko postojeće datoteke nije dopušteno.', +'unknown-error' => 'Desila se nepoznata greška.', +'tmp-create-error' => 'Nije moguće napraviti privremenu datoteku.', +'tmp-write-error' => 'Greška pri pisanju privremene datoteke.', 'large-file' => 'Preporučeno je da datoteke nisu veće od $1; Ova datoteka je velika $2.', 'largefileserver' => 'Ova datoteka je veća nego što server dopušta.', @@ -1642,13 +1669,14 @@ Ako i dalje želite da postavite ovu datoteku, molimo Vas da se vratite i pošal 'fileexists-shared-forbidden' => 'Datoteka sa ovim imenom već postoji u zajedničkoj ostavi; molimo Vas da se vratite i pošaljete ovu datoteku pod novim imenom. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Ova datoteka je dvojnik {{PLURAL:$1|slijedećoj datoteci|slijedećim datotekama}}:', 'file-deleted-duplicate' => 'Datoteka koje je identična ovoj datoteci ([[:$1]]) je ranije bila obrisana. Trebate provjeriti historiju brisanja te datoteke prije nego što nastavite sa njenim ponovnim postavljanjem.', -'successfulupload' => 'Uspješno slanje', 'uploadwarning' => 'Upozorenje pri slanju', 'uploadwarning-text' => 'Molimo izmijeniti opis datoteke ispod i pokušajte kasnije.', 'savefile' => 'Sačuvaj datoteku', 'uploadedimage' => 'poslato "[[$1]]"', 'overwroteimage' => 'postavljena nova verzija datoteke "[[$1]]"', 'uploaddisabled' => 'Slanje fajlova je isključeno', +'copyuploaddisabled' => 'Postavljanje putem URL nije omogućeno.', +'uploadfromurl-queued' => 'Vaše postavljanje je na čekanju.', 'uploaddisabledtext' => 'Postavljanje datoteka je onemogućeno.', 'php-uploaddisabledtext' => 'Postavljanje datoteka preko PHP je onemogućeno. Molimo provjerite postavku file_uploads.', 'uploadscripted' => 'Ova datoteka sadrži HTML ili skriptni kod koji može izazvati grešku kod internet preglednika.', @@ -1683,6 +1711,14 @@ JD # Jenoptik MGP # Pentax PICT # razni # ', +'upload-success-subj' => 'Uspješno slanje', +'upload-success-msg' => 'Vaša datoteka iz [$2] je uspješno postavljena. Dostupna je ovdje: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problem pri postavljanju', +'upload-failure-msg' => 'Nastao je problem s Vašim postavljanjem sa [$2]: + +$1', +'upload-warning-subj' => 'Upozorenje pri slanju', +'upload-warning-msg' => 'Nastao je problem sa vašim postavljanjem sa [$2]. Morate se vratiti na [[Special:Upload/stash/$1|formu za postavljanje]] kako biste riješili ovaj problem.', 'upload-proto-error' => 'Pogrešan protokol', 'upload-proto-error-text' => 'Postavljanje sa vanjske lokacije zahtjeva URL-ove koji počinju sa http:// ili ftp://.', @@ -1749,6 +1785,7 @@ Klikom na zaglavlje kolone možete promjeniti način sortiranja.', 'listfiles_search_for' => 'Traži medije po imenu:', 'imgfile' => 'datoteka', 'listfiles' => 'Spisak slika', +'listfiles_thumb' => 'Smanjeni pregled', 'listfiles_date' => 'Datum', 'listfiles_name' => 'Naziv', 'listfiles_user' => 'Korisnik', @@ -1863,8 +1900,8 @@ Prije brisanja provjerite da li druge stranice vode na te šablone.', 'statistics-edits' => 'Broj izmjena od kako je instalirana {{SITENAME}}', 'statistics-edits-average' => 'Prosječno izmjena po stranici', 'statistics-views-total' => 'Ukupno pregleda', +'statistics-views-total-desc' => 'Pregledi nepostojećih stranica i posebnih stranica nisu uključeni', 'statistics-views-peredit' => 'Pogleda po izmjeni', -'statistics-jobqueue' => 'Dužina [http://www.mediawiki.org/wiki/Manual:Job_queue akcija na čekanju]', 'statistics-users' => 'Registrovani [[Special:ListUsers|korisnici]]', 'statistics-users-active' => 'Aktivni korisnici', 'statistics-users-active-desc' => 'Korisnici koju su izvršili akciju u toku {{PLURAL:$1|zadnjeg dana|zadnja $1 dana|zadnjih $1 dana}}', @@ -1877,9 +1914,9 @@ Po pravilu, one se trebaju povezati sa konkretnim člankom.
    Stranica se smatra čvorom, ukoliko koristi šablon koji je povezan sa spiskom [[MediaWiki:Disambiguationspage|čvor stranica]]", 'doubleredirects' => 'Dvostruka preusmjerenja', -'doubleredirectstext' => 'Ova stranica prikazuje stranice koje preusmjeravaju na druga preusmjerenja. +'doubleredirectstext' => 'Ova stranica prikazuje stranice koje preusmjeravaju na druga preusmjerenja. Svaki red sadrži veze na prvo i drugo preusmjerenje, kao i na prvu liniju teksta drugog preusmjerenja, što obično daje "pravi" ciljni članak, na koji bi prvo preusmjerenje i trebalo da pokazuje. -Precrtane stavke su riješene.', +Precrtane stavke su riješene.', 'double-redirect-fixed-move' => '[[$1]] je premješten, sada je preusmjerenje na [[$2]]', 'double-redirect-fixer' => 'Popravljač preusmjerenja', @@ -1902,6 +1939,8 @@ Svaki red sadrži veze na prvo i drugo preusmjerenje, kao i na prvu liniju tekst 'nmembers' => '$1 {{PLURAL:$1|član|članova}}', 'nrevisions' => '$1 {{PLURAL:$1|revizija|revizije|revizija}}', 'nviews' => '$1 {{PLURAL:$1|pregled|pregleda}}', +'nimagelinks' => 'Koristi se na $1 {{PLURAL:$1|stranici|stranice|stranica}}', +'ntransclusions' => 'koristi se na $1 {{PLURAL:$1|stranici|stranice|stranica}}', 'specialpage-empty' => 'Nepostoje rezultati za ovaj izvještaj.', 'lonelypages' => 'Siročići', 'lonelypagestext' => 'Slijedeće stranice nemaju linkove na ostalim stranicama na ovoj {{SITENAME}}.', @@ -2060,36 +2099,42 @@ O svakoj od njih postoje i [[{{MediaWiki:Listgrouprights-helppage}}|dodatne info 'listgrouprights-removegroup-self-all' => 'Može ukloniti sve grupe sa svog računa', # E-mail user -'mailnologin' => 'Nema adrese za slanje', -'mailnologintext' => 'Morate biti [[Special:UserLogin|prijavljeni]] +'mailnologin' => 'Nema adrese za slanje', +'mailnologintext' => 'Morate biti [[Special:UserLogin|prijavljeni]] i imati ispravnu adresu e-pošte u vašim [[Special:Preferences|podešavanjima]] da biste slali e-poštu drugim korisnicima.', -'emailuser' => 'Pošalji e-poštu ovom korisniku', -'emailpage' => 'Pošalji e-mail korisniku', -'emailpagetext' => 'Možete korisiti formu ispod za slanje e-mail poruka ovom korisniku. +'emailuser' => 'Pošalji e-poštu ovom korisniku', +'emailpage' => 'Pošalji e-mail korisniku', +'emailpagetext' => 'Možete korisiti formu ispod za slanje e-mail poruka ovom korisniku. E-mail adresa koju ste unijeli u [[Special:Preferences|Vašim korisničkim postavkama]] će biti prikazana kao adresa pošiljaoca, tako da će primaoc poruke moći da Vam odgovori.', -'usermailererror' => 'Objekat pošte je vratio grešku:', -'defemailsubject' => '{{SITENAME}} e-pošta', -'noemailtitle' => 'Nema adrese e-pošte', -'noemailtext' => 'Ovaj korisnik nije naveo ispravnu adresu e-pošte.', -'nowikiemailtitle' => 'E-mail nije dopušten', -'nowikiemailtext' => 'Ovaj korisnik je odabrao da ne prima e-mail poštu od drugih korisnika.', -'email-legend' => 'Slanje e-maila drugom {{SITENAME}} korisniku', -'emailfrom' => 'Od:', -'emailto' => 'Za:', -'emailsubject' => 'Tema:', -'emailmessage' => 'Poruka:', -'emailsend' => 'Pošalji', -'emailccme' => 'Pošalji mi kopiju moje poruke.', -'emailccsubject' => 'Kopiraj Vašu poruku za $1: $2', -'emailsent' => 'Poruka poslata', -'emailsenttext' => 'Vaša poruka je poslata e-poštom.', -'emailuserfooter' => 'Ovaj e-mail je poslao $1 korisniku $2 putem funkcije "Pošalji e-mail korisniku" sa {{SITENAME}}.', +'usermailererror' => 'Objekat pošte je vratio grešku:', +'defemailsubject' => '{{SITENAME}} e-pošta', +'usermaildisabled' => 'Korisnički e-mail onemogućen', +'usermaildisabledtext' => 'Ne možete poslati e-mail drugim korisnicima na ovoj wiki', +'noemailtitle' => 'Nema adrese e-pošte', +'noemailtext' => 'Ovaj korisnik nije naveo ispravnu adresu e-pošte.', +'nowikiemailtitle' => 'E-mail nije dopušten', +'nowikiemailtext' => 'Ovaj korisnik je odabrao da ne prima e-mail poštu od drugih korisnika.', +'email-legend' => 'Slanje e-maila drugom {{SITENAME}} korisniku', +'emailfrom' => 'Od:', +'emailto' => 'Za:', +'emailsubject' => 'Tema:', +'emailmessage' => 'Poruka:', +'emailsend' => 'Pošalji', +'emailccme' => 'Pošalji mi kopiju moje poruke.', +'emailccsubject' => 'Kopiraj Vašu poruku za $1: $2', +'emailsent' => 'Poruka poslata', +'emailsenttext' => 'Vaša poruka je poslata e-poštom.', +'emailuserfooter' => 'Ovaj e-mail je poslao $1 korisniku $2 putem funkcije "Pošalji e-mail korisniku" sa {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Ostavljanje sistemske poruke.', +'usermessage-editor' => 'Sistem za poruke', # Watchlist 'watchlist' => 'Moji praćeni članci', 'mywatchlist' => 'Moji praćeni članci', -'watchlistfor' => "(korisnika '''$1''')", +'watchlistfor2' => 'Za $1 $2', 'nowatchlist' => 'Nemate ništa na svom spisku praćenih članaka.', 'watchlistanontext' => 'Molimo da $1 da možete vidjeti ili urediti stavke na Vašem spisku praćenja.', 'watchnologin' => 'Niste prijavljeni', @@ -2134,30 +2179,33 @@ Ako kasnije želite da uklonite stranicu sa vašeg spiska praćenih članaka, kl 'enotif_anon_editor' => 'anonimni korisnik $1', 'enotif_body' => 'Poštovani $WATCHINGUSERNAME, -{{SITENAME}} strana $PAGETITLE je bila $CHANGEDORCREATED $PAGEEDITDATE od strane $PAGEEDITOR, -pogledajte $PAGETITLE_URL za trenutnu verziju. + +Stranica {{SITENAME}} sa naslovom $PAGETITLE je bila $CHANGEDORCREATED dana $PAGEEDITDATE od strane $PAGEEDITOR, pogledajte $PAGETITLE_URL za trenutnu reviziju. $NEWPAGE -Sažetak editora: $PAGESUMMARY $PAGEMINOREDIT +Sažetak urednika: $PAGESUMMARY $PAGEMINOREDIT -Kontaktirajte editora: -pošta: $PAGEEDITOR_EMAIL +Kontaktirajte urednika: +mail: $PAGEEDITOR_EMAIL wiki: $PAGEEDITOR_WIKI -Neće biti drugih obaviještenja u slučaju daljih izmjena ukoliko ne posjetite ovu stranu. -Također možete da resetujete zastavice za obaviještenja za sve Vaše praćene stranice na vašem spisku praćenih članaka. +Neće biti drugih obavještenja u slučaju daljnjih izmjena osima ako posjetite stranicu. +Također možete poništiti oznake obavijesti za sve praćene stranice koje imate na vašem spisku praćenja. - Vaš prijateljski {{SITENAME}} sistem obaviještavanja + Vaš prijateljski {{SITENAME}} sistem obavještavanja -- -Da promjenite podešavanja vezana za spisak praćenih članaka posjetite +Za promjenu vaših postavki e-mail obavijesti, posjetite +{{fullurl:{{#special:Preferences}}}} + +Za promjenu postavki vašeg praćenja, posjetite {{fullurl:{{#special:Watchlist}}/edit}} -Da obrišete stranicu iz Vašeg spiska praćenja posjetite +Da obrišete stranicu sa vašeg spiska praćenja, posjetite $UNWATCHURL -Fidbek i dalja pomoć: +Povratne informacije i daljnja pomoć: {{fullurl:{{MediaWiki:Helppage}}}}', # Delete @@ -2210,7 +2258,10 @@ Posljednja izmjena je bila od korisnika [[User:$3|$3]] ([[User talk:$3|razgovor] 'revertpage-nouser' => 'Vraćene izmjene korisnika (korisničko ime uklonjeno) na posljednju reviziju koju je načinio [[User:$1|$1]]', 'rollback-success' => 'Poništene izmjene korisnika $1; vraćeno na posljednju verziju koju je sačuvao $2.', -'sessionfailure' => "Izgleda da postoji problem sa vašom sesijom; ova akcija je otkazana kao prevencija protiv napadanja sesija. Kliknite \"back\" (''nazad'') i osvježite stranicu sa koje ste došli, i opet pokušajte.", + +# Edit tokens +'sessionfailure-title' => 'Greška u sesiji', +'sessionfailure' => "Izgleda da postoji problem sa vašom sesijom; ova akcija je otkazana kao prevencija protiv napadanja sesija. Kliknite \"back\" (''nazad'') i osvježite stranicu sa koje ste došli, i opet pokušajte.", # Protect 'protectlogpage' => 'Protokol zaključavanja', @@ -2342,18 +2393,22 @@ $1', 'month' => 'Od mjeseca (i ranije):', 'year' => 'Od godine (i ranije):', -'sp-contributions-newbies' => 'Prikaži samo doprinose novih korisnika', -'sp-contributions-newbies-sub' => 'Za nove korisnike', -'sp-contributions-newbies-title' => 'Doprinosi novih korisnika', -'sp-contributions-blocklog' => 'Evidencija blokiranja', -'sp-contributions-deleted' => 'obrisani doprinosi korisnika', -'sp-contributions-logs' => 'zapisnici', -'sp-contributions-talk' => 'razgovor', -'sp-contributions-userrights' => 'postavke korisničkih prava', -'sp-contributions-blocked-notice' => 'Ovaj korisnik je trenutno blokiran. Posljednje stavke zapisnika blokiranja možete pogledati ispod:', -'sp-contributions-search' => 'Pretraga doprinosa', -'sp-contributions-username' => 'IP adresa ili korisničko ime:', -'sp-contributions-submit' => 'Traži', +'sp-contributions-newbies' => 'Prikaži samo doprinose novih korisnika', +'sp-contributions-newbies-sub' => 'Za nove korisnike', +'sp-contributions-newbies-title' => 'Doprinosi novih korisnika', +'sp-contributions-blocklog' => 'Evidencija blokiranja', +'sp-contributions-deleted' => 'obrisani doprinosi korisnika', +'sp-contributions-uploads' => 'postavljanja', +'sp-contributions-logs' => 'zapisnici', +'sp-contributions-talk' => 'razgovor', +'sp-contributions-userrights' => 'postavke korisničkih prava', +'sp-contributions-blocked-notice' => 'Ovaj korisnik je trenutno blokiran. Posljednje stavke zapisnika blokiranja možete pogledati ispod:', +'sp-contributions-blocked-notice-anon' => 'Ova IP adresa je trenutno blokirana. +Posljednje stavke zapisnika blokiranja možete pogledati ispod:', +'sp-contributions-search' => 'Pretraga doprinosa', +'sp-contributions-username' => 'IP adresa ili korisničko ime:', +'sp-contributions-toponly' => 'Prikaži samo izmjene koje su posljednje revizije', +'sp-contributions-submit' => 'Traži', # What links here 'whatlinkshere' => 'Šta je povezano ovdje', @@ -2412,7 +2467,6 @@ $1', 'ipb-edit-dropdown' => 'Uredi razloge blokiranja', 'ipb-unblock-addr' => 'Deblokiraj $1', 'ipb-unblock' => 'Deblokiraj korisničko ime ili IP adresu', -'ipb-blocklist-addr' => 'Postojeće blokade za $1', 'ipb-blocklist' => 'Vidi postojeće blokade', 'ipb-blocklist-contribs' => 'Doprinosi za $1', 'unblockip' => 'Odblokiraj korisnika', @@ -2487,6 +2541,8 @@ Međutim, možda je blokirana kao dio bloka $2, koji se ne može deblokirati.', Ne možete napraviti račun', 'cant-block-while-blocked' => 'Ne možete blokirati druge korisnike dok ste blokirani.', 'cant-see-hidden-user' => 'Korisnik kojeg pokušavate blokirati je već blokiran i sakriven. Pošto nemate prava hideuser (sakrivanje korisnika), ne možete vidjeti ni urediti korisnikovu blokadu.', +'ipbblocked' => 'Ne možete blokirati ili deblokirati druge korisnike, jer ste i sami blokirani', +'ipbnounblockself' => 'Nije Vam dopušteno da deblokirate samog sebe', # Developer tools 'lockdb' => 'Zaključajte bazu', @@ -2533,6 +2589,17 @@ preusmjerite. '''Pažnja!''' Imajte na umu da preusmjeravanje popularnog članka može biti drastična i neočekivana promjena za korisnike.", +'movepagetext-noredirectfixer' => "Koristeći obrazac ispod ćete preimenovati stranicu i premjestiti cijelu njenu historiju na novi naziv. +Stari naziv će postati preusmjerenje na novi naziv. +Molimo provjerite da li postoje [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|nedovršena preusmjerenja]]. +Vi ste za to odgovorni te morate provjeriti da li su linkovi ispravni i da li vode tamo gdje bi trebali. + +Imajte na umu da stranica '''neće''' biti premještena ako već postoji stranica s tim imenom, osim ako je prazna ili je preusmjerenje ili nema ranije historije. +Ovo znali da možete preimenovati stranicu nazad gdje je ranije bila preimenovana ako ste pogriješili a ne možete ponovo preimenovati postojeću stranicu. + +'''Pažnja!''' +Imajte na umu da preusmjeravanje popularnog članka može biti +drastična i neočekivana promjena za korisnike; molimo budite sigurni da ste shvatili posljedice prije nego što nastavite.", 'movepagetalktext' => "Odgovarajuća stranica za razgovor, ako postoji, će automatski biti premještena istovremeno '''osim:''' *Ako premještate stranicu preko imenskih prostora, *Neprazna stranica za razgovor već postoji pod novim imenom, ili @@ -2589,6 +2656,7 @@ Da li je želite obrisati kako bi ste mogli izvršiti premještanje?', 'immobile-source-page' => 'Ova stranica se ne može premještati.', 'immobile-target-page' => 'Ne može se preusmjeriti na taj odredišni naslov.', 'imagenocrossnamespace' => 'Ne može se premjestiti datoteka u nedatotečni imenski prostor', +'nonfile-cannot-move-to-file' => 'Ne mogu se premjestiti podaci u datotečni imenski prostor', 'imagetypemismatch' => 'Ekstenzija nove datoteke ne odgovara njenom tipu', 'imageinvalidfilename' => 'Ciljno ime datoteke nije valjano', 'fix-double-redirects' => 'Ažuriraj sva preusmjerenja koja vode ka originalnom naslovu', @@ -2669,6 +2737,7 @@ Sačuvajte je na Vašem računaru i pošaljite ovdje.', 'importstart' => 'Uvoz stranica...', 'import-revision-count' => '$1 {{PLURAL:$1|revizija|revizije|revizija}}', 'importnopages' => 'Nema stranica za uvoz.', +'imported-log-entries' => '{{PLURAL:$1|Uvezena $1 stavka zapisnika|Uvezene $1 stavke zapisnika|Uvezeno $1 stavki zapisnika}}.', 'importfailed' => 'Uvoz nije uspjeo: $1', 'importunknownsource' => 'Nepoznat izvorni tip uvoza', 'importcantopen' => 'Ne može se otvoriti uvozna datoteka', @@ -2765,6 +2834,8 @@ Nedostaje privremeni folder.', 'tooltip-rollback' => 'Brzo vraćanje izmjene(izmjena) ove stranice posljednjeg uređivača jednim klikom.', 'tooltip-undo' => 'Vraća posljednju izmjenu i otvara formu za uređivanje u modu pregleda. Dopušta unos razloga u sažetak.', +'tooltip-preferences-save' => 'Sačuvaj podešavanja', +'tooltip-summary' => 'Unesite kratki sažetak', # Stylesheets 'common.css' => '/* CSS umetnut ovdje primijenit će se na sve skinove */', @@ -2892,14 +2963,17 @@ $1', 'imagemaxsize' => "Ograničenje veličine slike:
    ''(za stranice opisa datoteke)''", 'thumbsize' => 'Veličina umanjenog prikaza:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|stranica|stranice|stranica}}', -'file-info' => '(veličina datoteke: $1, MIME tip: $2)', -'file-info-size' => '($1 × $2 piksela, veličina datoteke: $3, MIME tip: $4)', +'file-info' => 'veličina datoteke: $1, MIME tip: $2', +'file-info-size' => '$1 × $2 piksela, veličina datoteke: $3, MIME tip: $4', 'file-nohires' => 'Veća rezolucija nije dostupna.', -'svg-long-desc' => '(SVG fajl, dozvoljeno $1 × $2 piksela, veličina fajla: $3)', +'svg-long-desc' => 'SVG fajl, dozvoljeno $1 × $2 piksela, veličina fajla: $3', 'show-big-image' => 'Vidi sliku u punoj veličini (rezoluciji)', 'show-big-image-thumb' => 'Veličina ovoga prikaza: $1 × $2 piksela', 'file-info-gif-looped' => 'stalno iznova', 'file-info-gif-frames' => '$1 {{PLURAL:$1|sličica|sličice|sličica}}', +'file-info-png-looped' => 'stalno iznova', +'file-info-png-repeat' => 'pregledano $1 {{PLURAL:$1|put|puta}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|sličica|sličice|sličica}}', # Special:NewFiles 'newimages' => 'Galerija novih slika', @@ -3053,6 +3127,7 @@ Svi drugi linkovi u istoj liniji se smatraju izuzecima, npr. kod stranica gdje s 'exif-gpsareainformation' => 'Naziv GPS područja', 'exif-gpsdatestamp' => 'GPS datum', 'exif-gpsdifferential' => 'GPS diferencijalna korekcija', +'exif-objectname' => 'Kratki naslov', # EXIF attributes 'exif-compression-1' => 'Nekompresovano', @@ -3216,25 +3291,25 @@ Svi drugi linkovi u istoj liniji se smatraju izuzecima, npr. kod stranica gdje s 'limitall' => 'sve', # E-mail address confirmation -'confirmemail' => 'Potvrdite adresu e-pošte', -'confirmemail_noemail' => 'Niste unijeli tačnu e-mail adresu u Vaše [[Special:Preferences|korisničke postavke]].', -'confirmemail_text' => 'Ova viki zahtjeva da potvrdite adresu Vaše e-pošte prije nego što koristite mogućnosti e-pošte. Aktivirajte dugme ispod kako bi ste poslali poštu za potvrdu na Vašu adresu. Pošta uključuje link koji sadrži kod; učitajte link u Vaš preglednik da bi ste potvrdili da je adresa Vaše e-pošte validna.', -'confirmemail_pending' => 'Konfirmacioni kod Vam je već poslan putem e-maila; +'confirmemail' => 'Potvrdite adresu e-pošte', +'confirmemail_noemail' => 'Niste unijeli tačnu e-mail adresu u Vaše [[Special:Preferences|korisničke postavke]].', +'confirmemail_text' => 'Ova viki zahtjeva da potvrdite adresu Vaše e-pošte prije nego što koristite mogućnosti e-pošte. Aktivirajte dugme ispod kako bi ste poslali poštu za potvrdu na Vašu adresu. Pošta uključuje link koji sadrži kod; učitajte link u Vaš preglednik da bi ste potvrdili da je adresa Vaše e-pošte validna.', +'confirmemail_pending' => 'Konfirmacioni kod Vam je već poslan putem e-maila; ako ste nedavno otvorili Vaš račun, trebali bi pričekati par minuta da poslana pošta stigne, prije nego što ponovno zahtijevate novi kod.', -'confirmemail_send' => 'Pošaljite kod za potvrdu', -'confirmemail_sent' => 'E-pošta za potvrđivanje poslata.', -'confirmemail_oncreate' => 'Kod za potvrđivanje Vam je poslat na Vašu e-mail adresu. +'confirmemail_send' => 'Pošaljite kod za potvrdu', +'confirmemail_sent' => 'E-pošta za potvrđivanje poslata.', +'confirmemail_oncreate' => 'Kod za potvrđivanje Vam je poslat na Vašu e-mail adresu. Taj kod nije neophodan za prijavljivanje, ali Vam ne potreban kako bi ste omogućili funkcije wikija zasnovane na e-mailu.', -'confirmemail_sendfailed' => '{{SITENAME}} Vam ne može poslati poštu za potvrđivanje. Provjerite adresu zbog nepravilnih karaktera. +'confirmemail_sendfailed' => '{{SITENAME}} Vam ne može poslati poštu za potvrđivanje. Provjerite adresu zbog nepravilnih karaktera. Povratna pošta: $1', -'confirmemail_invalid' => 'Netačan kod za potvrdu. Moguće je da je kod istekao.', -'confirmemail_needlogin' => 'Morate $1 da bi ste potvrdili Vašu e-mail adresu.', -'confirmemail_success' => 'Adresa vaše e-pošte je potvrđena. Možete sad da se prijavite i uživate u viki.', -'confirmemail_loggedin' => 'Adresa Vaše e-pošte je potvrđena.', -'confirmemail_error' => 'Nešto je pošlo po zlu prilikom sačuvavanja vaše potvrde.', -'confirmemail_subject' => 'Vikiriječnik adresa e-pošte za potvrđivanje', -'confirmemail_body' => 'Neko, vjerovatno Vi, je sa IP adrese $1 registrovao nalog "$2" sa ovom adresom e-pošte na {{SITENAME}}. +'confirmemail_invalid' => 'Netačan kod za potvrdu. Moguće je da je kod istekao.', +'confirmemail_needlogin' => 'Morate $1 da bi ste potvrdili Vašu e-mail adresu.', +'confirmemail_success' => 'Adresa vaše e-pošte je potvrđena. Možete sad da se prijavite i uživate u viki.', +'confirmemail_loggedin' => 'Adresa Vaše e-pošte je potvrđena.', +'confirmemail_error' => 'Nešto je pošlo po zlu prilikom sačuvavanja vaše potvrde.', +'confirmemail_subject' => 'Vikiriječnik adresa e-pošte za potvrđivanje', +'confirmemail_body' => 'Neko, vjerovatno Vi, je sa IP adrese $1 registrovao nalog "$2" sa ovom adresom e-pošte na {{SITENAME}}. Da potvrdite da ovaj nalog stvarno pripada vama i da aktivirate mogućnost e-pošte na {{SITENAME}}, otvorite ovaj link u vašem pregledniku: @@ -3244,8 +3319,32 @@ Ako ovo niste vi, pratite ovaj link da prekinete prijavu: $5 Ovaj kod za potvrdu će isteći u $4.', -'confirmemail_invalidated' => 'Potvrda e-mail adrese otkazana', -'invalidateemail' => 'Odustani od e-mail potvrde', +'confirmemail_body_changed' => 'Neko, vjerovatno Vi, je sa IP adrese $1 +je promijenio adresu e-pošte računa "$2" na ovu adresu za {{SITENAME}}. + +Da potvrdite da ovaj nalog stvarno pripada Vama i da reaktivirate mogućnosti e-pošte na {{SITENAME}}, otvorite ovaj link u Vašem pregledniku: + +$3 + +Ako ovaj račun *ne* pripada Vama, pratite ovaj link da prekinete odobravanje adrese e-pošte: + +$5 + +Ovaj kod za potvrdu će isteći u $4.', +'confirmemail_body_set' => 'Neko, vjerovatno Vi, je sa IP adrese $1 +je postavio adresu e-pošte računa "$2" na ovu adresu za {{SITENAME}}. + +Da potvrdite da ovaj nalog stvarno pripada Vama i da reaktivirate mogućnosti e-pošte na {{SITENAME}}, otvorite ovaj link u Vašem pregledniku: + +$3 + +Ako ovaj račun *ne* pripada Vama, pratite ovaj link da prekinete odobravanje adrese e-pošte: + +$5 + +Ovaj kod za potvrdu će isteći u $4.', +'confirmemail_invalidated' => 'Potvrda e-mail adrese otkazana', +'invalidateemail' => 'Odustani od e-mail potvrde', # Scary transclusion 'scarytranscludedisabled' => '[Međuwiki umetanje je isključeno]', @@ -3288,6 +3387,7 @@ Molimo Vas da potvrdite da stvarno želite da ponovo napravite ovaj članak.", 'table_pager_first' => 'Prva stranica', 'table_pager_last' => 'Zadnja stranica', 'table_pager_limit' => 'Pokaži $1 stavki po stranici', +'table_pager_limit_label' => 'Stavke po stranici:', 'table_pager_limit_submit' => 'Idi', 'table_pager_empty' => 'Bez rezultata', @@ -3411,6 +3511,7 @@ Također možete [[Special:Watchlist/edit|koristiti standardni uređivač]].', 'version-specialpages' => 'Posebne stranice', 'version-parserhooks' => 'Kuke parsera', 'version-variables' => 'Promjenjive', +'version-skins' => 'Kože', 'version-other' => 'Ostalo', 'version-mediahandlers' => 'Upravljači medije', 'version-hooks' => 'Kuke', @@ -3422,6 +3523,13 @@ Također možete [[Special:Watchlist/edit|koristiti standardni uređivač]].', 'version-hook-subscribedby' => 'Pretplaćeno od', 'version-version' => '(Verzija $1)', 'version-license' => 'Licenca', +'version-poweredby-credits' => "Ova wiki je zasnovana na '''[http://www.mediawiki.org/ MediaWiki]''', autorska prava zadržana © 2001-$1 $2.", +'version-poweredby-others' => 'ostali', +'version-license-info' => 'Mediawiki je slobodni softver, možete ga redistribuirati i/ili mijenjati pod uslovima GNU opće javne licence kao što je objavljeno od strane Fondacije Slobodnog Softvera, bilo u verziji 2 licence, ili (po vašoj volji) nekoj od kasniji verzija. + +Mediawiki se distriburia u nadi da će biti korisna, ali BEZ IKAKVIH GARANCIJA, čak i bez ikakvih posrednih garancija o KOMERCIJALNOSTI ili DOSTUPNOSTI ZA ODREĐENU SVRHU. Pogledajte GNU opću javnu licencu za više detalja. + +Trebali biste dobiti [{{SERVER}}{{SCRIPTPATH}}/KOPIJU GNU opće javne licence] zajedno s ovim programom, ako niste, pišite Fondaciji Slobodnog Softvera na adresu Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ili je pročitajte [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html online].', 'version-software' => 'Instalirani softver', 'version-software-product' => 'Proizvod', 'version-software-version' => 'Verzija', @@ -3492,6 +3600,15 @@ Unesite ime datoteke bez "{{ns:file}}:" prefiksa.', 'tags-edit' => 'uređivanje', 'tags-hitcount' => '$1 {{PLURAL:$1|izmjena|izmjene|izmjena}}', +# Special:ComparePages +'comparepages' => 'Usporedi stranice', +'compare-selector' => 'Usporedi ispravljanje stranica', +'compare-page1' => 'Stranica 1', +'compare-page2' => 'Stranica 2', +'compare-rev1' => 'Ispravljanje 1', +'compare-rev2' => 'Ispravljanje 2', +'compare-submit' => 'Usporedi', + # Database error messages 'dberr-header' => 'Ovaj wiki ima problem', 'dberr-problems' => 'Žao nam je! Ova stranica ima određene tehničke poteškoće.', @@ -3508,8 +3625,13 @@ Unesite ime datoteke bez "{{ns:file}}:" prefiksa.', 'htmlform-float-invalid' => 'Vrijednost koju ste unijeli nije broj.', 'htmlform-int-toolow' => 'Vrijednost koju ste naveli je ispod minimuma od $1', 'htmlform-int-toohigh' => 'Vrijednost koju ste naveli je iznad maksimuma od $1', +'htmlform-required' => 'Ova vrijednost je obavezna', 'htmlform-submit' => 'Pošalji', 'htmlform-reset' => 'Vrati izmjene', 'htmlform-selectorother-other' => 'Ostalo', +# SQLite database support +'sqlite-has-fts' => '$1 sa podrškom pretrage cijelog teksta', +'sqlite-no-fts' => '$1 bez podrške pretrage cijelog teksta', + ); diff --git a/languages/messages/MessagesCa.php b/languages/messages/MessagesCa.php index fe5a316e..dc6819e2 100644 --- a/languages/messages/MessagesCa.php +++ b/languages/messages/MessagesCa.php @@ -11,6 +11,7 @@ * @author BroOk * @author Cedric31 * @author Davidpar + * @author El libre * @author Iradigalesc * @author Jordi Roqué * @author Juanpabl @@ -61,7 +62,7 @@ $namespaceAliases = array( 'Imatge_Discussió' => NS_FILE_TALK, ); -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $dateFormats = array( 'mdy time' => 'H:i', @@ -197,8 +198,7 @@ $messages = array( 'tog-editsection' => 'Activa la modificació de seccions mitjançant els enllaços [modifica]', 'tog-editsectiononrightclick' => "Habilita l'edició per seccions en clicar amb el botó dret sobre els títols de les seccions (cal JavaScript)", 'tog-showtoc' => 'Mostra la taula de continguts (per pàgines amb més de 3 seccions)', -'tog-rememberpassword' => 'Recorda la contrasenya entre sessions', -'tog-editwidth' => "Amplia el quadre d'edició per encabir tota la pantalla", +'tog-rememberpassword' => 'Recorda la sessió al navegador (per un màxim de {{PLURAL:$1|dia|dies}})', 'tog-watchcreations' => 'Vigila les pàgines que he creat', 'tog-watchdefault' => 'Afegeix les pàgines que edito a la meua llista de seguiment', 'tog-watchmoves' => 'Afegeix les pàgines que reanomeni a la llista de seguiment', @@ -344,31 +344,21 @@ $messages = array( 'faqpage' => 'Project:PMF', # Vector skin -'vector-action-addsection' => 'Nova secció', -'vector-action-delete' => 'Esborra', -'vector-action-move' => 'Reanomena', -'vector-action-protect' => 'Protegeix', -'vector-action-undelete' => 'Restaura', -'vector-action-unprotect' => 'Desprotegeix', -'vector-namespace-category' => 'Categoria', -'vector-namespace-help' => 'Ajuda', -'vector-namespace-image' => 'Fitxer', -'vector-namespace-main' => 'Pàgina', -'vector-namespace-media' => 'Pàgina de fitxer', -'vector-namespace-mediawiki' => 'Missatge', -'vector-namespace-project' => 'Pàgina del projecte', -'vector-namespace-special' => 'Pàgina especial', -'vector-namespace-talk' => 'Discussió', -'vector-namespace-template' => 'Plantilla', -'vector-namespace-user' => "Pàgina d'usuari", -'vector-view-create' => 'Inicia', -'vector-view-edit' => 'Modifica', -'vector-view-history' => "Mostra l'historial", -'vector-view-view' => 'Mostra', -'vector-view-viewsource' => 'Mostra la font', -'actions' => 'Accions', -'namespaces' => 'Espais de noms', -'variants' => 'Variants', +'vector-action-addsection' => 'Nova secció', +'vector-action-delete' => 'Esborra', +'vector-action-move' => 'Reanomena', +'vector-action-protect' => 'Protegeix', +'vector-action-undelete' => 'Restaura', +'vector-action-unprotect' => 'Desprotegeix', +'vector-simplesearch-preference' => 'Habilitar suggeriments de recerca millorats (només aparença Vector)', +'vector-view-create' => 'Inicia', +'vector-view-edit' => 'Modifica', +'vector-view-history' => "Mostra l'historial", +'vector-view-view' => 'Mostra', +'vector-view-viewsource' => 'Mostra la font', +'actions' => 'Accions', +'namespaces' => 'Espais de noms', +'variants' => 'Variants', 'errorpagetitle' => 'Error', 'returnto' => 'Torna cap a $1.', @@ -429,6 +419,9 @@ Massa usuaris estan tractant d'accedir a aquesta pàgina. Per favor, esperau una mica abans de tornar a accedir a aquesta pàgina. $1", +'pool-timeout' => "Temps d'espera per al blocatge", +'pool-queuefull' => 'La cua de treball és plena', +'pool-errorunknown' => 'Error desconegut', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Quant al projecte {{SITENAME}}', @@ -592,7 +585,8 @@ No oblideu de canviar les vostres [[Special:Preferences|preferències de {{SITEN 'yourname' => "Nom d'usuari", 'yourpassword' => 'Contrasenya', 'yourpasswordagain' => 'Escriviu una altra vegada la contrasenya', -'remembermypassword' => 'Recorda la contrasenya entre sessions', +'remembermypassword' => 'Recorda la contrasenya entre sessions (per un màxim de $1 {{PLURAL:$1|dia|dies}})', +'securelogin-stick-https' => "Roman connectat via HTTPS desprès d'autenticar-se", 'yourdomainname' => 'El vostre domini', 'externaldberror' => "Hi ha hagut una fallida en el servidor d'autenticació externa de la base de dades i no teniu permís per a actualitzar el vostre compte d'accès extern.", 'login' => 'Inici de sessió', @@ -609,6 +603,7 @@ No oblideu de canviar les vostres [[Special:Preferences|preferències de {{SITEN 'gotaccount' => 'Ja teniu un compte? $1.', 'gotaccountlink' => 'Inicia una sessió', 'createaccountmail' => 'per correu electrònic', +'createaccountreason' => 'Motiu:', 'badretype' => 'Les contrasenyes que heu introduït no coincideixen.', 'userexists' => 'El nom que heu entrat ja és en ús. Escolliu-ne un de diferent.', 'loginerror' => "Error d'inici de sessió", @@ -627,6 +622,7 @@ Reviseu-ne l'ortografia (recordeu que es distingeixen les majúscules i minúscu 'wrongpasswordempty' => "La contrasenya que s'ha introduït estava en blanc. Torneu-ho a provar.", 'passwordtooshort' => "La contrasenya ha de tenir un mínim {{PLURAL:$1|d'un caràcter|de $1 caràcters}}.", 'password-name-match' => "La contrasenya ha de ser diferent al vostre nom d'usuari.", +'password-login-forbidden' => "No és permès d'utilitzar aquest nom d'usuari i contrasenya.", 'mailmypassword' => "Envia'm una nova contrasenya per correu electrònic", 'passwordremindertitle' => 'Nova contrasenya temporal per al projecte {{SITENAME}}', 'passwordremindertext' => "Algú (vós mateix segurament, des de l'adreça l'IP $1) ha soŀlicitat que us enviéssim una nova contrasenya per a iniciar la sessió al projecte {{SITENAME}} ($4). @@ -664,6 +660,9 @@ Si us plau, esperi abans de tornar-ho a intentar.", 'loginlanguagelabel' => 'Llengua: $1', 'suspicious-userlogout' => "S'ha denegat la vostra petició per tancar la sessió ja què sembla que va ser enviada per un navegador defectuós o un proxy cau.", +# E-mail sending +'php-mail-error-unknown' => 'Error desconegut en la funció mail() de PHP', + # Password reset dialog 'resetpass' => 'Canvia la contrasenya', 'resetpass_announce' => 'Heu iniciat la sessió amb un codi temporal enviat per correu electrònic. Per a finalitzar-la, heu de definir una nova contrasenya ací:', @@ -715,9 +714,10 @@ Deveu haver canviat la vostra contrasenya o demanat una nova contrasenya tempora 'showlivepreview' => 'Vista ràpida', 'showdiff' => 'Mostra els canvis', 'anoneditwarning' => "'''Avís:''' No esteu identificats amb un compte d'usuari. Es mostrarà la vostra adreça IP en l'historial d'aquesta pàgina.", +'anonpreviewwarning' => "''No us heu identificat amb un compte d'usuari. La vostra adreça IP quedarà registrada a l'historial d'aquesta pàgina.''", 'missingsummary' => "'''Recordatori''': Heu deixat en blanc el resum de l'edició. Si torneu a clicar al botó de desar, l'edició es guardarà sense resum.", 'missingcommenttext' => 'Introduïu un comentari a continuació.', -'missingcommentheader' => "'''Recordatori:''' No heu proporcionat un assumpte/encapçalament per al comentari. Si cliqueu al botó Torna a desar, la vostra contribució se desarà sense cap.", +'missingcommentheader' => "'''Recordatori:''' No heu proporcionat un assumpte/encapçalament per al comentari. Si cliqueu de nou al botó \"{{int:savearticle}}\", la vostra contribució se desarà sense cap.", 'summary-preview' => 'Previsualització del resum:', 'subject-preview' => 'Previsualització de tema/capçalera:', 'blockedtitle' => "L'usuari està blocat", @@ -787,7 +787,11 @@ Per més detalls, la darrera entrada del registre es mostra a continuació:", 'usercsspreview' => "'''Recordeu que esteu previsualitzant el vostre CSS d'usuari.''' '''Encara no s'ha desat!'''", 'userjspreview' => "'''Recordeu que només estau provant/previsualitzant el vostre JavaScript, encara no ho heu desat!'''", -'userinvalidcssjstitle' => "'''Atenció:''' No existeix l'aparença «$1». Recordeu que les subpàgines personalitzades amb extensions .css i .js utilitzen el títol en minúscules, per exemple, {{ns:user}}:NOM/monobook.css no és el mateix que {{ns:user}}:NOM/Monobook.css.", +'sitecsspreview' => "'''Adoneu-vos que esteu veient una vista prèvia d'aquest full d'estil CSS.''' +'''No n'hi ha estat encara gravada!'''", +'sitejspreview' => "'''Adoneu-vos que esteu veient una vista prèvia d'aquest codi Javascript.''' +'''No n'hi ha estat encara gravat!'''", +'userinvalidcssjstitle' => "'''Atenció:''' No existeix l'aparença «$1». Recordeu que les subpàgines personalitzades amb extensions .css i .js utilitzen el títol en minúscules, per exemple, {{ns:user}}:NOM/vector.css no és el mateix que {{ns:user}}:NOM/Vector.css.", 'updated' => '(Actualitzat)', 'note' => "'''Nota:'''", 'previewnote' => "'''Açò només és una previsualització, els canvis de la qual encara no s'han desat!'''", @@ -823,7 +827,6 @@ A més a més, en enviar el vostre text, doneu fe que és vostra l'autoria, o b 'copyrightwarning2' => "Si us plau, tingueu en compte que totes les contribucions al projecte {{SITENAME}} poden ser corregides, alterades o esborrades per altres usuaris. Si no desitgeu la modificació i distribució lliure dels vostres escrits sense el vostre consentiment, no els poseu ací.
    A més a més, en enviar el vostre text, doneu fe que és vostra l'autoria, o bé de fonts en el domini públic o altres recursos lliures similars (consulteu $1 per a més detalls). '''No feu servir textos amb drets d'autor sense permís!'''", -'longpagewarning' => "'''ATENCIÓ: Aquesta pàgina fa $1 kB; hi ha navegadors que poden presentar problemes editant pàgines que s'acostin o sobrepassin els 32 kB. Intenteu, si és possible, dividir la pàgina en seccions més petites.'''", 'longpageerror' => "'''ERROR: El text que heu introduït és de $1 kB i sobrepassa el màxim permès de $2 kB. Per tant, no es desarà.'''", 'readonlywarning' => "'''ADVERTÈNCIA: La base de dades està tancada per manteniment i no podeu desar les vostres contribucions en aquests moments. Podeu retallar i enganxar el codi @@ -1001,6 +1004,8 @@ $1", 'logdelete-failure' => "'''No s'ha pogut establir la visibilitat del registre:''' $1", 'revdel-restore' => "Canvia'n la visibilitat", +'revdel-restore-deleted' => 'revisions esborrades', +'revdel-restore-visible' => 'revisions visibles', 'pagehist' => 'Historial', 'deletedhist' => "Historial d'esborrat", 'revdelete-content' => 'el contingut', @@ -1069,11 +1074,13 @@ Assegureu-vos que aquest canvi mantindrà la continuïtat històrica de la pàgi # Diffs 'history-title' => 'Historial de versions de «$1»', 'difference' => '(Diferència entre revisions)', +'difference-multipage' => '(Diferència entre pàgines)', 'lineno' => 'Línia $1:', 'compareselectedversions' => 'Compara les versions seleccionades', 'showhideselectedversions' => 'Mostra/oculta les versions seleccionades', 'editundo' => 'desfés', -'diff-multi' => '(Hi ha {{PLURAL:$1|una revisió intermèdia|$1 revisions intermèdies}})', +'diff-multi' => '({{PLURAL:$1|Hi ha una revisió intermèdia |Hi ha $1 revisions intermèdies}} sense mostrar fetes per {{PLURAL:$2|un usuari|$2 usuaris}})', +'diff-multi-manyusers' => "({{PLURAL:$1|Hi ha una revisió intermèdia|Hi ha $1 revisions intermèdies}} sense mostrar fetes per més {{PLURAL:$2|d'un usuari|de $2 usuaris}})", # Search results 'searchresults' => 'Resultats de la cerca', @@ -1108,6 +1115,7 @@ Assegureu-vos que aquest canvi mantindrà la continuïtat històrica de la pàgi 'searchprofile-everything-tooltip' => "Cerca tot tipus de contingut (s'hi inclouen pàgines de discussió)", 'searchprofile-advanced-tooltip' => 'Cerca als espais de noms predefinits', 'search-result-size' => '$1 ({{PLURAL:$2|1 paraula|$2 paraules}})', +'search-result-category-size' => '{{PLURAL:$1|1 membre|$1 membres}} ({{PLURAL:$2|1 subcategoria|$2 subcategories}}, {{PLURAL:$3|1 fitxer|$3 fitxers}})', 'search-result-score' => 'Rellevància: $1%', 'search-redirect' => '(redirigit des de $1)', 'search-section' => '(secció $1)', @@ -1182,6 +1190,7 @@ Assegureu-vos que aquest canvi mantindrà la continuïtat històrica de la pàgi 'contextlines' => 'Línies a mostrar per resultat', 'contextchars' => 'Caràcters de context per línia', 'stub-threshold' => 'Límit per a formatar l\'enllaç com esborrany (en octets):', +'stub-threshold-disabled' => 'Deshabilitat', 'recentchangesdays' => 'Dies a mostrar en els canvis recents:', 'recentchangesdays-max' => '(màxim $1 {{PLURAL:$1|dia|dies}})', 'recentchangescount' => "Nombre d'edicions a mostrar per defecte:", @@ -1215,6 +1224,7 @@ A continuació es mostra un valor generat de forma aleatòria que podeu fer serv 'prefs-files' => 'Fitxers', 'prefs-custom-css' => 'CSS personalitzat', 'prefs-custom-js' => 'JS personalitzat', +'prefs-common-css-js' => 'CSS/JS compartit per tots els skins:', 'prefs-reset-intro' => 'Podeu usar aquesta pàgina per a restablir les vostres preferències als valors per defecte. No es podrà desfer el canvi.', 'prefs-emailconfirm-label' => 'Confirmació de correu electrònic:', @@ -1252,9 +1262,15 @@ També podeu contactar amb altres usuaris a través de la vostra pàgina d'usuar 'prefs-advancedrendering' => 'Opcions avançades', 'prefs-advancedsearchoptions' => 'Opcions avançades', 'prefs-advancedwatchlist' => 'Opcions avançades', -'prefs-display' => "Opcions d'aparença", +'prefs-displayrc' => "Opcions d'aparença", +'prefs-displaysearchoptions' => 'Opcions de visualització', +'prefs-displaywatchlist' => 'Opcions de visualització', 'prefs-diffs' => 'Difs', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => "L'adreça de correu electrònic sembla vàlida", +'email-address-validity-invalid' => 'Escriviu una adreça vàlida de correu electrònic', + # User rights 'userrights' => "Gestió dels permisos d'usuari", 'userrights-lookup-user' => "Gestiona els grups d'usuari", @@ -1338,6 +1354,7 @@ També podeu contactar amb altres usuaris a través de la vostra pàgina d'usuar 'right-hideuser' => "Blocar un nom d'usuari amagant-lo del públic", 'right-ipblock-exempt' => "Evitar blocatges d'IP, de rang i automàtics", 'right-proxyunbannable' => 'Evitar els blocatges automàtics a proxies', +'right-unblockself' => 'Desblocar-se a si mateixos', 'right-protect' => 'Canviar el nivell de protecció i modificar pàgines protegides', 'right-editprotected' => 'Editar pàgines protegides (sense protecció de cascada)', 'right-editinterface' => "Editar la interfície d'usuari", @@ -1360,7 +1377,6 @@ També podeu contactar amb altres usuaris a través de la vostra pàgina d'usuar 'right-siteadmin' => 'Blocar i desblocar la base de dades', 'right-reset-passwords' => "Reiniciar la contrasenya d'altres usuaris", 'right-override-export-depth' => 'Exportar pàgines incloent aquelles enllaçades fins a una fondària de 5', -'right-versiondetail' => 'Veure la informació addicional de la versió del programari', 'right-sendemail' => 'Enviar missatges de correu electrònic a altres usuaris', # User rights log @@ -1411,14 +1427,9 @@ També podeu contactar amb altres usuaris a través de la vostra pàgina d'usuar 'recentchanges-legend' => 'Opcions de canvis recents', 'recentchangestext' => 'Seguiu els canvis recents del projecte {{SITENAME}} en aquesta pàgina.', 'recentchanges-feed-description' => 'Segueix en aquest canal els canvis més recents del wiki.', -'recentchanges-label-legend' => 'Llegenda: $1.', -'recentchanges-legend-newpage' => '$1 - nova pàgina', 'recentchanges-label-newpage' => 'Aquesta modificació inicià una pàgina', -'recentchanges-legend-minor' => '$1 - modificació menor', 'recentchanges-label-minor' => 'Aquesta és una modificació menor', -'recentchanges-legend-bot' => "$1 - modificació d'un bot", 'recentchanges-label-bot' => 'Aquesta modificació fou feta per un bot', -'recentchanges-legend-unpatrolled' => '$1 - modificació sense patrullar', 'recentchanges-label-unpatrolled' => 'Aquesta modificació encara no ha estat patrullada', 'rcnote' => 'A continuació hi ha {{PLURAL:$1|el darrer canvi|els darrers $1 canvis}} en {{PLURAL:$2|el darrer dia|els darrers $2 dies}}, actualitzats a les $5 del $4.', 'rcnotefrom' => 'A sota hi ha els canvis des de $2 (es mostren fins $1).', @@ -1466,6 +1477,9 @@ per a penjar-hi fitxers.", 'upload_directory_missing' => "No s'ha trobat el directori de càrrega ($1) i tampoc no ha pogut ser creat pel servidor web.", 'upload_directory_read_only' => 'El servidor web no pot escriure al directori de càrrega ($1)', 'uploaderror' => "S'ha produït un error en l'intent de carregar", +'upload-recreate-warning' => "'''Atenció: S'ha eliminat o reanomenat un fitxer amb aquest mateix nom.''' + +A continuació es mostren els registres de supressió i reanomenament d'aquesta pàgina:", 'uploadtext' => "Feu servir el formulari de sota per a carregar fitxers. Per a visualitzar o cercar fitxers que s'hagen carregat prèviament, aneu a la [[Special:FileList|llista de fitxers carregats]]. Les càrregues es registren en el [[Special:Log/upload|registre de càrregues]] i els fitxers esborrats en el [[Special:Log/delete|registre d'esborrats]]. @@ -1498,6 +1512,17 @@ Vegeu la [[Special:NewFiles|galeria de nous fitxers]] per a una presentació mé 'filetype-unwanted-type' => "Els fitxers del tipus «'''.$1'''» no són desitjats. {{PLURAL:$3|Es prefereix el tipus de fitxer|Els tipus de fitxer preferits són}} $2.", 'filetype-banned-type' => "Els fitxers del tipus «'''.$1'''» no estan permesos. {{PLURAL:$3|Només s'admeten els fitxers del tipus|Els tipus de fitxer permesos són}} $2.", 'filetype-missing' => 'El fitxer no té extensió (com ara «.jpg»).', +'empty-file' => 'El fitxer que heu tramès està buit.', +'file-too-large' => 'El fitxer que heu tramès és massa gran.', +'filename-tooshort' => 'El nom del fitxer és massa curt.', +'filetype-banned' => 'Aquest tipus de fitxer està prohibit.', +'verification-error' => 'Aquest fitxer no ha passat la verificació de fitxers.', +'hookaborted' => "La modificació que vau tractar de fer ha estat canceŀlada per un lligam d'extensió.", +'illegal-filename' => 'El nom del fitxer no està permès.', +'overwrite' => 'No es permet sobreescriure un fitxer existent.', +'unknown-error' => "S'ha produït un error desconegut.", +'tmp-create-error' => "No s'ha pogut crear el fitxer temporal.", +'tmp-write-error' => 'Error en escriure el fitxer temporal.', 'large-file' => 'Els fitxers importants no haurien de ser més grans de $1; aquest fitxer ocupa $2.', 'largefileserver' => 'Aquest fitxer és més gran del que el servidor permet.', 'emptyfile' => 'El fitxer que heu carregat sembla estar buit. @@ -1523,13 +1548,14 @@ Si us plau, torneu enrere i carregueu aquest fitxer sota un altre nom. [[File:$1 Si us plau, si encara desitgeu carregar el vostre fitxer, torneu enrera i carregueu-ne una còpia amb un altre nom. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Aquest fitxer és un duplicat {{PLURAL:$1|del fitxer |dels següents fitxers:}}', 'file-deleted-duplicate' => "Un fitxer idèntic a aquest ([[:$1]]) ha estat esborrat amb anterioritat. Hauríeu de comprovar el registre d'esborrat del fitxer abans de tornar-lo a carregar.", -'successfulupload' => "El fitxer s'ha carregat amb èxit", 'uploadwarning' => 'Avís de càrrega', 'uploadwarning-text' => 'Modifiqueu la descripció de la imatge i torneu a intentar-ho.', 'savefile' => 'Desa el fitxer', 'uploadedimage' => 'ha carregat [[$1]]', 'overwroteimage' => 'ha carregat una nova versió de «[[$1]]»', 'uploaddisabled' => "S'ha inhabilitat la càrrega", +'copyuploaddisabled' => 'Càrrega per URL deshabilitada.', +'uploadfromurl-queued' => "S'ha encuat la vostra càrrega.", 'uploaddisabledtext' => "S'ha inhabilitat la càrrega de fitxers.", 'php-uploaddisabledtext' => 'La càrrega de fitxer està desactivada al PHP. Comproveu les opcions del fitxer file_uploads.', 'uploadscripted' => 'Aquest fitxer conté codi HTML o de seqüències que pot ser interpretat equivocadament per un navegador.', @@ -1548,6 +1574,14 @@ Si us plau, si encara desitgeu carregar el vostre fitxer, torneu enrera i carreg Hauríeu de considerar si és realment adequat continuar carregant aquest fitxer, perquè potser també acaba eliminat. A continuació teniu el registre d'eliminació per a que pugueu comprovar els motius que van portar a la seua eliminació:", 'filename-bad-prefix' => "El nom del fitxer que esteu penjant comença amb '''«$1»''', que és un nom no descriptiu que les càmeres digitals normalment assignen de forma automàtica. Trieu un de més descriptiu per al vostre fitxer.", +'upload-success-subj' => "El fitxer s'ha carregat amb èxit", +'upload-success-msg' => 'El material carregat de [$2] està disponible ací: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problema en la càrrega', +'upload-failure-msg' => 'Hi ha hagut un problema amb la vostra càrrega des de [$2]: + +$1', +'upload-warning-subj' => 'Avís de càrrega', +'upload-warning-msg' => 'Hi ha hagut un problema amb la teva càrrega de [$2]. Pots tornar a [[Special:Upload/stash/$1|formulari de càrrega]] per corregir aquest problema.', 'upload-proto-error' => 'El protocol és incorrecte', 'upload-proto-error-text' => 'Per a les càrregues remotes cal que els URL comencin amb http:// o ftp://.', @@ -1608,6 +1642,7 @@ Clicant al capdamunt de les columnes podeu canviar-ne l'ordenació.", 'listfiles_search_for' => "Cerca el nom d'un fitxer de medis:", 'imgfile' => 'fitxer', 'listfiles' => 'Llista de fitxers', +'listfiles_thumb' => 'Miniatura', 'listfiles_date' => 'Data', 'listfiles_name' => 'Nom', 'listfiles_user' => 'Usuari', @@ -1720,8 +1755,8 @@ La descripció de la seva [$2 pàgina de descripció] es mostra a continuació.' 'statistics-edits' => 'Edicions en pàgines des que el projecte {{SITENAME}} fou instaŀlat', 'statistics-edits-average' => 'Edicions per pàgina de mitjana', 'statistics-views-total' => 'Visualitzacions totals', +'statistics-views-total-desc' => "No hom inclou l'accès a pàgines inexistents o pàgines especials", 'statistics-views-peredit' => 'Visualitzacions per modificació', -'statistics-jobqueue' => 'Longitud de la [http://www.mediawiki.org/wiki/Manual:Job_queue cua de treballs]', 'statistics-users' => '[[Special:ListUsers|Usuaris]] registrats', 'statistics-users-active' => 'Usuaris actius', 'statistics-users-active-desc' => "Usuaris que han dut a terme alguna acció en {{PLURAL:$1|l'últim dia|els últims $1 dies}}", @@ -1736,7 +1771,7 @@ Una pàgina es tracta com de desambiguació si utilitza una plantilla que està 'doubleredirects' => 'Redireccions dobles', 'doubleredirectstext' => 'Aquesta pàgina llista les pàgines que redirigeixen a altres pàgines de redirecció. Cada fila conté enllaços a la primera i segona redireccions, així com el destí de la segona redirecció, què generalment és la pàgina destí "real", a la què hauria d\'apuntar la primera redirecció. -Les entrades ratllades s\'han resolt.', +Les entrades ratllades s\'han resolt.', 'double-redirect-fixed-move' => "S'ha reanomenat [[$1]], ara és una redirecció a [[$2]]", 'double-redirect-fixer' => 'Supressor de dobles redireccions', @@ -1759,6 +1794,8 @@ Les entrades ratllades s\'han resolt.', 'nmembers' => '$1 {{PLURAL:$1|membre|membres}}', 'nrevisions' => '$1 {{PLURAL:$1|revisió|revisions}}', 'nviews' => '$1 {{PLURAL:$1|visita|visites}}', +'nimagelinks' => "S'utilitza en {{PLURAL:$1|una pàgina|$1 pàgines}}", +'ntransclusions' => 'utilitzada en {{PLURAL:$1|una pàgina|$1 pàgines}}', 'specialpage-empty' => 'Aquesta pàgina és buida.', 'lonelypages' => 'Pàgines òrfenes', 'lonelypagestext' => "Les següents pàgines no s'enllacen ni s'inclouen en cap altra pàgina del projecte {{SITENAME}}.", @@ -1914,36 +1951,42 @@ Pot ser que hi hagi més informació sobre drets individuals [[{{MediaWiki:Listg 'listgrouprights-removegroup-self-all' => 'Abandona tots els grups', # E-mail user -'mailnologin' => "No enviïs l'adreça", -'mailnologintext' => "Heu d'haver [[Special:UserLogin|entrat]] +'mailnologin' => "No enviïs l'adreça", +'mailnologintext' => "Heu d'haver [[Special:UserLogin|entrat]] i tenir una direcció electrònica vàlida en les vostres [[Special:Preferences|preferències]] per enviar un correu electrònic a altres usuaris.", -'emailuser' => 'Envia un missatge de correu electrònic a aquest usuari', -'emailpage' => 'Correu electrònic a usuari', -'emailpagetext' => "Podeu usar el següent formulari per a enviar un missatge de correu electrònic a aquest usuari. +'emailuser' => 'Envia un missatge de correu electrònic a aquest usuari', +'emailpage' => 'Correu electrònic a usuari', +'emailpagetext' => "Podeu usar el següent formulari per a enviar un missatge de correu electrònic a aquest usuari. L'adreça electrònica que heu entrat en [[Special:Preferences|les vostres preferències d'usuari]] apareixerà com a remitent del correu electrònic, de manera que el destinatari us podrà respondre directament.", -'usermailererror' => "L'objecte de correu ha retornat un error:", -'defemailsubject' => 'Adreça correl de {{SITENAME}}', -'noemailtitle' => 'No hi ha cap adreça electrònica', -'noemailtext' => 'Aquest usuari no ha especificat una adreça electrònica vàlida.', -'nowikiemailtitle' => 'No es permet el correu electrònic', -'nowikiemailtext' => "Aquest usuari ha escollit no rebre missatges electrònics d'altres usuaris.", -'email-legend' => 'Enviar un correu electrònic a un altre usuari de {{SITENAME}}', -'emailfrom' => 'De:', -'emailto' => 'Per a:', -'emailsubject' => 'Assumpte:', -'emailmessage' => 'Missatge:', -'emailsend' => 'Envia', -'emailccme' => "Envia'm una còpia del meu missatge.", -'emailccsubject' => 'Còpia del vostre missatge a $1: $2', -'emailsent' => 'Correu electrònic enviat', -'emailsenttext' => 'El vostre correu electrònic ha estat enviat.', -'emailuserfooter' => "Aquest missatge de correu electrònic l'ha enviat $1 a $2 amb la funció «e-mail» del projecte {{SITENAME}}.", +'usermailererror' => "L'objecte de correu ha retornat un error:", +'defemailsubject' => 'Adreça correl de {{SITENAME}}', +'usermaildisabled' => "Correu electrònic d'usuaris deshabilitat", +'usermaildisabledtext' => 'No podeu enviar correus electrònics a altres usuaris en aquest wiki', +'noemailtitle' => 'No hi ha cap adreça electrònica', +'noemailtext' => 'Aquest usuari no ha especificat una adreça electrònica vàlida.', +'nowikiemailtitle' => 'No es permet el correu electrònic', +'nowikiemailtext' => "Aquest usuari ha escollit no rebre missatges electrònics d'altres usuaris.", +'email-legend' => 'Enviar un correu electrònic a un altre usuari de {{SITENAME}}', +'emailfrom' => 'De:', +'emailto' => 'Per a:', +'emailsubject' => 'Assumpte:', +'emailmessage' => 'Missatge:', +'emailsend' => 'Envia', +'emailccme' => "Envia'm una còpia del meu missatge.", +'emailccsubject' => 'Còpia del vostre missatge a $1: $2', +'emailsent' => 'Correu electrònic enviat', +'emailsenttext' => 'El vostre correu electrònic ha estat enviat.', +'emailuserfooter' => "Aquest missatge de correu electrònic l'ha enviat $1 a $2 amb la funció «e-mail» del projecte {{SITENAME}}.", + +# User Messenger +'usermessage-summary' => 'Deixant missatges de sistema.', +'usermessage-editor' => 'Missatger del sistema', # Watchlist 'watchlist' => 'Llista de seguiment', 'mywatchlist' => 'Llista de seguiment', -'watchlistfor' => "(per a '''$1''')", +'watchlistfor2' => 'Per $1 $2', 'nowatchlist' => 'No teniu cap element en la vostra llista de seguiment.', 'watchlistanontext' => 'Premeu $1 per a visualitzar o modificar elements de la vostra llista de seguiment.', 'watchnologin' => 'No heu iniciat la sessió', @@ -2063,7 +2106,10 @@ La darrera modificació ha estat feta per l'usuari [[User:$3|$3]] ([[User talk:$ 'revertpage' => "Revertides les edicions de [[Special:Contributions/$2|$2]] ([[User talk:$2|discussió]]). S'ha recuperat la darrera versió de l'usuari [[User:$1|$1]]", 'revertpage-nouser' => "Desfetes les edicions de (nom d'usuari eliminat) a l'última revisió feta per [[User:$1|$1]]", 'rollback-success' => "Edicions revertides de $1; s'ha canviat a la darrera versió de $2.", -'sessionfailure' => "Sembla que hi ha problema amb la vostra sessió. Aquesta acció ha estat anuŀlada en prevenció de pirateig de sessió. Si us plau, pitgeu «Torna», i recarregueu la pàgina des d'on veniu, després intenteu-ho de nou.", + +# Edit tokens +'sessionfailure-title' => 'Error de sessió', +'sessionfailure' => "Sembla que hi ha problema amb la vostra sessió. Aquesta acció ha estat anuŀlada en prevenció de pirateig de sessió. Si us plau, pitgeu «Torna», i recarregueu la pàgina des d'on veniu, després intenteu-ho de nou.", # Protect 'protectlogpage' => 'Registre de protecció', @@ -2195,19 +2241,23 @@ $1", 'month' => 'Mes (i anteriors):', 'year' => 'Any (i anteriors):', -'sp-contributions-newbies' => 'Mostra les contribucions dels usuaris novells', -'sp-contributions-newbies-sub' => 'Per a novells', -'sp-contributions-newbies-title' => "Contribucions dels comptes d'usuari més nous", -'sp-contributions-blocklog' => 'Registre de bloquejos', -'sp-contributions-deleted' => "contribucions d'usuari esborrades", -'sp-contributions-logs' => 'registres', -'sp-contributions-talk' => 'discussió', -'sp-contributions-userrights' => "gestió de drets d'usuari", -'sp-contributions-blocked-notice' => "En aquests moments, aquest compte d'usuari es troba blocat. +'sp-contributions-newbies' => 'Mostra les contribucions dels usuaris novells', +'sp-contributions-newbies-sub' => 'Per a novells', +'sp-contributions-newbies-title' => "Contribucions dels comptes d'usuari més nous", +'sp-contributions-blocklog' => 'Registre de bloquejos', +'sp-contributions-deleted' => "contribucions d'usuari esborrades", +'sp-contributions-uploads' => 'pujades', +'sp-contributions-logs' => 'registres', +'sp-contributions-talk' => 'discussió', +'sp-contributions-userrights' => "gestió de drets d'usuari", +'sp-contributions-blocked-notice' => "En aquests moments, aquest compte d'usuari es troba blocat. Per més detalls, la última entrada del registre es mostra a continuació:", -'sp-contributions-search' => 'Cerca les contribucions', -'sp-contributions-username' => "Adreça IP o nom d'usuari:", -'sp-contributions-submit' => 'Cerca', +'sp-contributions-blocked-notice-anon' => 'En aquests moments, aquesta adreça IP es troba blocada. +Per més detalls, la última entrada del registre es mostra a continuació:', +'sp-contributions-search' => 'Cerca les contribucions', +'sp-contributions-username' => "Adreça IP o nom d'usuari:", +'sp-contributions-toponly' => 'Mostra només revisions superiors', +'sp-contributions-submit' => 'Cerca', # What links here 'whatlinkshere' => 'Què hi enllaça', @@ -2271,7 +2321,6 @@ quines pàgines en concret estan sent vandalitzades).", 'ipb-edit-dropdown' => 'Edita les raons per a blocar', 'ipb-unblock-addr' => 'Desbloca $1', 'ipb-unblock' => 'Desbloca un usuari o una adreça IP', -'ipb-blocklist-addr' => 'Bloquejos existents per $1', 'ipb-blocklist' => 'Llista els bloquejos existents', 'ipb-blocklist-contribs' => 'Contribucions de $1', 'unblockip' => "Desbloca l'usuari", @@ -2342,6 +2391,8 @@ L'usuari $1 ja està blocat. Voleu canviar-ne els paràmetres del blocatge?", 'sorbs_create_account_reason' => "La vostra adreça IP està llistada com a servidor intermediari (''proxy'') obert a la llista negra de DNS que utilitza el projecte {{SITENAME}}. No podeu crear-vos-hi un compte", 'cant-block-while-blocked' => 'No podeu blocar altres usuaris quan esteu bloquejat.', 'cant-see-hidden-user' => "L'usuari que esteu intentant blocar ja ha estat blocat i ocultat. Com que no teniu el permís hideuser no podeu veure ni modificar el seu blocatge.", +'ipbblocked' => 'No podeu blocar o desblocar altres usuaris, perquè vós {{GENDER:|mateix|mateixa|mateix}} esteu {{GENDER:|blocat|blocada|blocat}}.', +'ipbnounblockself' => 'No teniu permís per a treure el vostre bloqueig', # Developer tools 'lockdb' => 'Bloca la base de dades', @@ -2379,6 +2430,17 @@ Això significa que podeu reanomenar de nou una pàgina al seu títol original s '''ADVERTÈNCIA!''' Açò pot ser un canvi dràstic i inesperat en una pàgina que sigui popular; assegureu-vos d'entendre les conseqüències que comporta abans de seguir endavant.", +'movepagetext-noredirectfixer' => "El títol anterior es convertirà en un redireccionament al nou títol. + +Assegureu-vos de verificar els redireccionaments [[Special:DoubleRedirects|doble]]s i els [[Special:BrokenRedirects|trencat]]s. + +Sigueu responsable de fer que els enllaços continuen apuntant cap a on se suposa que han d'anar. + +Tingueu en compte que la pàgina '''no''' serà traslladada si ja existeix una pàgina amb el títol nou proposat, tret del cas que la pàgina és buida o no n'hi ha un historial de redireccionaments. + +Això significa que si reanomeneu per equivocació una pàgina amb el seu nom anterior no ho podreu fer, ja que no es pot sobreescriure una pàgina existent. + +'''Avís:''' Això pot ser un canvi dràstic i inesperat per una pàgina popular; si us plau, assegureu-vos que sabeu el que féu abans de continuar.", 'movepagetalktext' => "La pàgina de discussió associada, si existeix, serà traslladada automàticament '''tret dels següents casos''': * Ja hi existeix una pàgina de discussió no buida amb el nou nom, o si * la opció de davall es troba desactivada @@ -2437,6 +2499,7 @@ La pàgina de destinació, «[[:$1]]», ja existeix. Voleu eliminar-la per a fer 'immobile-source-page' => 'Aquesta pàgina no es pot moure.', 'immobile-target-page' => 'No es pot moure cap a una destinació amb aquest títol.', 'imagenocrossnamespace' => 'No es pot moure la imatge a un espai de noms on no li correspon', +'nonfile-cannot-move-to-file' => 'No es pot moure la imatge a un espai de noms on no li correspon', 'imagetypemismatch' => 'La nova extensió de fitxer no coincideix amb el seu tipus', 'imageinvalidfilename' => 'El nom de fitxer indicat no és vàlid', 'fix-double-redirects' => "Actualitza també les redireccions que apuntin a l'article original", @@ -2514,6 +2577,7 @@ Deseu-lo al vostre ordinador i carregueu-ne una còpia ací.", 'importstart' => "S'estan important pàgines...", 'import-revision-count' => '$1 {{PLURAL:$1|revisió|revisions}}', 'importnopages' => 'No hi ha cap pàgina per importar.', +'imported-log-entries' => "{{PLURAL:$1|S'ha importat una entrada del registre|S'han importat $1 entrades del registre}}.", 'importfailed' => 'La importació ha fallat: $1', 'importunknownsource' => "No es reconeix el tipus de la font d'importació", 'importcantopen' => "No ha estat possible d'obrir el fitxer a importar", @@ -2607,6 +2671,8 @@ Deseu-lo al vostre ordinador i carregueu-ne una còpia ací.", 'tooltip-rollback' => "«Rollback» reverteix les edicions del darrer contribuïdor d'aquesta pàgina en un clic.", 'tooltip-undo' => '«Desfés» reverteix aquesta modificació i obre un formulari de previsualització. Permet afegir un motiu al resum.', +'tooltip-preferences-save' => 'Desa preferències', +'tooltip-summary' => 'Afegiu un breu resum', # Stylesheets 'common.css' => '/* Editeu aquest fitxer per personalitzar totes les aparences per al lloc sencer */', @@ -2713,14 +2779,17 @@ Si l'executeu, podeu comprometre la seguretat del vostre sistema.", 'imagemaxsize' => "Límit de mida d'imatges:
    ''(per a pàgines de descripció de fitxers)''", 'thumbsize' => 'Mida de la miniatura:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|pàgina|pàgines}}', -'file-info' => '(mida: $1, tipus MIME: $2)', -'file-info-size' => '($1 × $2 píxels, mida del fitxer: $3, tipus MIME: $4)', +'file-info' => 'mida: $1, tipus MIME: $2', +'file-info-size' => '$1 × $2 píxels, mida del fitxer: $3, tipus MIME: $4', 'file-nohires' => 'No hi ha cap versió amb una resolució més gran.', -'svg-long-desc' => '(fitxer SVG, nominalment $1 × $2 píxels, mida del fitxer: $3)', +'svg-long-desc' => 'fitxer SVG, nominalment $1 × $2 píxels, mida del fitxer: $3', 'show-big-image' => 'Imatge en màxima resolució', 'show-big-image-thumb' => "Mida d'aquesta previsualització: $1 × $2 píxels", 'file-info-gif-looped' => 'embuclat', 'file-info-gif-frames' => '$1 {{PLURAL:$1|fotograma|fotogrames}}', +'file-info-png-looped' => 'embuclat', +'file-info-png-repeat' => "s'ha reproduït $1 {{PLURAL:$1|vegada|vegades}}", +'file-info-png-frames' => '$1 {{PLURAL:$1|fotograma|fotogrames}}', # Special:NewFiles 'newimages' => 'Galeria de nous fitxers', @@ -2876,6 +2945,7 @@ La resta d'enllaços de la línia són les excepcions, és a dir, les pàgines o 'exif-gpsareainformation' => "Nom de l'àrea GPS", 'exif-gpsdatestamp' => 'Data GPS', 'exif-gpsdifferential' => 'Correcció diferencial GPS', +'exif-objectname' => 'Títol abreujat', # EXIF attributes 'exif-compression-1' => 'Sense compressió', @@ -2960,6 +3030,8 @@ La resta d'enllaços de la línia són les excepcions, és a dir, les pàgines o 'exif-sensingmethod-7' => 'Sensor trilineal', 'exif-sensingmethod-8' => 'Sensor linear de color per seqüències', +'exif-filesource-3' => 'Càmera fotogràfica digital', + 'exif-scenetype-1' => 'Una imatge fotografiada directament', 'exif-customrendered-0' => 'Procés normal', @@ -3036,33 +3108,33 @@ La resta d'enllaços de la línia són les excepcions, és a dir, les pàgines o 'limitall' => 'tots', # E-mail address confirmation -'confirmemail' => "Confirma l'adreça de correu electrònic", -'confirmemail_noemail' => "No heu introduït una direcció vàlida de correu electrònic en les vostres [[Special:Preferences|preferències d'usuari]].", -'confirmemail_text' => "El projecte {{SITENAME}} necessita que valideu la vostra adreça de correu +'confirmemail' => "Confirma l'adreça de correu electrònic", +'confirmemail_noemail' => "No heu introduït una direcció vàlida de correu electrònic en les vostres [[Special:Preferences|preferències d'usuari]].", +'confirmemail_text' => "El projecte {{SITENAME}} necessita que valideu la vostra adreça de correu electrònic per a poder gaudir d'algunes facilitats. Cliqueu el botó inferior per a enviar un codi de confirmació a la vostra adreça. Seguiu l'enllaç que hi haurà al missatge enviat per a confirmar que el vostre correu és correcte.", -'confirmemail_pending' => "Ja s'ha enviat el vostre codi de confirmació per correu electrònic; si +'confirmemail_pending' => "Ja s'ha enviat el vostre codi de confirmació per correu electrònic; si fa poc hi heu creat el vostre compte, abans de mirar de demanar un nou codi, primer hauríeu d'esperar alguns minuts per a rebre'l.", -'confirmemail_send' => 'Envia per correu electrònic un codi de confirmació', -'confirmemail_sent' => "S'ha enviat un missatge de confirmació.", -'confirmemail_oncreate' => "S'ha enviat un codi de confirmació a la vostra adreça de correu electrònic. +'confirmemail_send' => 'Envia per correu electrònic un codi de confirmació', +'confirmemail_sent' => "S'ha enviat un missatge de confirmació.", +'confirmemail_oncreate' => "S'ha enviat un codi de confirmació a la vostra adreça de correu electrònic. No es requereix aquest codi per a autenticar-s'hi, però vos caldrà proporcionar-lo abans d'activar qualsevol funcionalitat del wiki basada en missatges de correu electrònic.", -'confirmemail_sendfailed' => "{{SITENAME}} no ha pogut enviar el vostre missatge de confirmació. +'confirmemail_sendfailed' => "{{SITENAME}} no ha pogut enviar el vostre missatge de confirmació. Comproveu que l'adreça no tingui caràcters no vàlids. El programari de correu retornà el següent missatge: $1", -'confirmemail_invalid' => 'El codi de confirmació no és vàlid. Aquest podria haver vençut.', -'confirmemail_needlogin' => 'Necessiteu $1 per a confirmar la vostra adreça electrònica.', -'confirmemail_success' => "S'ha confirmat la vostra adreça electrònica. +'confirmemail_invalid' => 'El codi de confirmació no és vàlid. Aquest podria haver vençut.', +'confirmemail_needlogin' => 'Necessiteu $1 per a confirmar la vostra adreça electrònica.', +'confirmemail_success' => "S'ha confirmat la vostra adreça electrònica. Ara podeu [[Special:UserLogin|iniciar una sessió]] i gaudir del wiki.", -'confirmemail_loggedin' => "Ja s'ha confirmat la vostra adreça electrònica.", -'confirmemail_error' => 'Quelcom ha fallat en desar la vostra confirmació.', -'confirmemail_subject' => "Confirmació de l'adreça electrònica del projecte {{SITENAME}}", -'confirmemail_body' => "Algú, segurament vós, ha registrat el compte «$2» al projecte {{SITENAME}} +'confirmemail_loggedin' => "Ja s'ha confirmat la vostra adreça electrònica.", +'confirmemail_error' => 'Quelcom ha fallat en desar la vostra confirmació.', +'confirmemail_subject' => "Confirmació de l'adreça electrònica del projecte {{SITENAME}}", +'confirmemail_body' => "Algú, segurament vós, ha registrat el compte «$2» al projecte {{SITENAME}} amb aquesta adreça electrònica des de l'adreça IP $1. Per a confirmar que aquesta adreça electrònica us pertany realment @@ -3075,8 +3147,34 @@ Si *no* heu estat qui ho ha fet, seguiu aquest altre enllaç per a canceŀlar la $5 Aquest codi de confirmació caducarà a $4.", -'confirmemail_invalidated' => "Confirmació d'adreça electrònica canceŀlada", -'invalidateemail' => "Canceŀlació d'adreça electrònica", +'confirmemail_body_changed' => 'Algú, segurament vós, des de l\'adreça IP $1, ha canviat al projecte {{SITENAME}} l\'adreça de correu del compte "$2" a aquesta adreça. + +Per confirmar que aquest compte realment us pertany i per reactivar +les opcions de correu a {{SITENAME}}, obriu el següent enllaç al vostre navegador: + +$3 + +Si el compte *no* us pertany, seguiu l\'enllaç següent +per a cancel·lar la confirmació d\'adreça de correu: + +$5 + +Aquest codi de confirmació expirarà el $4.', +'confirmemail_body_set' => "Algú, probablement vós, des de l'adreça IP $1, +ha establert aquesta adreça de correu electrònic com la del compte «$2» del lloc {{SITENAME}}. + +Per confirmar que aquest compte realment us pertany i reactivar +les facilitats de correu electrònic a {{SITENAME}}, cal que obriu al navegador aquest enllaç: + +$3 + +Si el compte *no* us pertany, canceŀleu l'adreça de correu electrònic seguint aquest enllaç: + +$5 + +Aquest codi de confirmació caducarà el $4.", +'confirmemail_invalidated' => "Confirmació d'adreça electrònica canceŀlada", +'invalidateemail' => "Canceŀlació d'adreça electrònica", # Scary transclusion 'scarytranscludedisabled' => "[S'ha inhabilitat la transclusió interwiki]", @@ -3116,6 +3214,7 @@ Confirmeu que realment voleu tornar-la a crear.", 'table_pager_first' => 'Primera pàgina', 'table_pager_last' => 'Darrera pàgina', 'table_pager_limit' => 'Mostra $1 elements per pàgina', +'table_pager_limit_label' => 'Ítems per pàgina:', 'table_pager_limit_submit' => 'Vés-hi', 'table_pager_empty' => 'Sense resultats', @@ -3173,6 +3272,7 @@ També podeu [[Special:Watchlist/edit|utilitzar l'editor estàndard]].", 'version-specialpages' => 'Pàgines especials', 'version-parserhooks' => "Extensions de l'analitzador", 'version-variables' => 'Variables', +'version-skins' => 'Aparences', 'version-other' => 'Altres', 'version-mediahandlers' => 'Connectors multimèdia', 'version-hooks' => 'Lligams', @@ -3184,6 +3284,13 @@ També podeu [[Special:Watchlist/edit|utilitzar l'editor estàndard]].", 'version-hook-subscribedby' => 'Subscrit per', 'version-version' => '(Versió $1)', 'version-license' => 'Llicència', +'version-poweredby-credits' => "El wiki funciona gràcies a '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'altres', +'version-license-info' => "MediaWiki és programari lliure, podeu redistribuir-lo i/o modificar-lo sota els termes de la Llicència Pública General GNU publicada per la Free Software Foundation, ja sigui de la seva versió 2 o (a elecció vostra) qualsevol versió posterior. + +MediaWiki es distribueix en l'esperança de ser d'utilitat, però SENSE CAP GARANTIA; ni tan sols la garantia implícita de COMERCIALITZACIÓ o ADEQUACIÓ A UNA FINALITAT DETERMINADA. En trobareu més detalls a la Llicència Pública General GNU. + +Amb aquest programa heu d'haver rebut [{{SERVER}}{{SCRIPTPATH}}/COPYING una còpia de la Llicència Pública General GNU]; si no és així, adreceu-vos a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o bé [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html llegiu-la en línia].", 'version-software' => 'Programari instaŀlat', 'version-software-product' => 'Producte', 'version-software-version' => 'Versió', @@ -3254,6 +3361,15 @@ Introduïu el nom del fitxer sense el prefix «{{ns:file}}:».", 'tags-edit' => 'modifica', 'tags-hitcount' => '$1 {{PLURAL:$1|canvi|canvis}}', +# Special:ComparePages +'comparepages' => 'Comparar pàgines', +'compare-selector' => 'Comparar revisions de pàgines', +'compare-page1' => 'Pàgina 1', +'compare-page2' => 'Pàgina 2', +'compare-rev1' => 'Revisió 1', +'compare-rev2' => 'Revisió 2', +'compare-submit' => 'Compara', + # Database error messages 'dberr-header' => 'Aquest wiki té un problema', 'dberr-problems' => 'Ho sentim. Aquest lloc web està experimentant dificultats tècniques.', @@ -3270,8 +3386,13 @@ Introduïu el nom del fitxer sense el prefix «{{ns:file}}:».", 'htmlform-float-invalid' => 'El valor especificat no és un nombre.', 'htmlform-int-toolow' => 'El valor que heu especifcat està per sota del mínim de $1', 'htmlform-int-toohigh' => 'El valor que heu especificat està per sobre del màxim de $1', +'htmlform-required' => 'Aquest valor és necessari', 'htmlform-submit' => 'Tramet', 'htmlform-reset' => 'Desfés els canvis', 'htmlform-selectorother-other' => 'Altres', +# SQLite database support +'sqlite-has-fts' => '$1, amb suport de búsqueda de text íntegre', +'sqlite-no-fts' => '$1, sense supor de búsqueda de text íntegre', + ); diff --git a/languages/messages/MessagesCdo.php b/languages/messages/MessagesCdo.php index 70646ac6..7dc5c627 100644 --- a/languages/messages/MessagesCdo.php +++ b/languages/messages/MessagesCdo.php @@ -22,7 +22,7 @@ $dateFormats = array( $messages = array( # User preference toggles -'tog-rememberpassword' => 'Giéu cī gá diêng-nō̤ gé diâng nguāi gì dióng-hô̤ gâe̤ng mĭk-mā', +'tog-rememberpassword' => 'Giéu cī gá diêng-nō̤ gé diâng nguāi gì dióng-hô̤ gâe̤ng mĭk-mā (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Gă-tiĕng nguāi kŭi gì hiĕk-miêng gáu nguāi gì gáng-sê-dăng', 'tog-watchdefault' => 'Gă-tiĕng nguāi siŭ-gāi gì hiĕk-miêng gáu nguāi gì gáng-sê-dăng', 'tog-watchmoves' => 'Gă-tiĕng nguāi iè-dông gì hiĕk-miêng gáu nguāi gì gáng-sê-dăng', @@ -220,7 +220,7 @@ Nṳ̄ gì dióng-hô̤ ī-gĭng kŭi hō̤ lāu. Dāng nṳ̄ â̤-sāi siŭ-g 'yourname' => 'Ê̤ṳng-hô-miàng', 'yourpassword' => 'Mĭk-mā', 'yourpasswordagain' => 'Dṳ̀ng-sĭng páh diē mĭk-mā', -'remembermypassword' => 'Giéu cī gá diêng-nō̤ gé diâng nguāi gì dióng-hô̤ gâe̤ng mĭk-mā.', +'remembermypassword' => 'Giéu cī gá diêng-nō̤ gé diâng nguāi gì dióng-hô̤ gâe̤ng mĭk-mā (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'Láuk-diē', 'loginprompt' => 'Páh kŭi cookies ciáh â̤ diē {{SITENAME}}.', 'userlogin' => 'Láuk-diē / kŭi dióng-hô̤', @@ -302,7 +302,6 @@ Iŏk-guō nṳ̄ dĭk-ciék áik \"{{int:savearticle}}\", '''nâ ô''' gà̤-dē 'yourtext' => 'Nṳ̄ gì ùng-cê', 'editingold' => "'''GĪNG-GÓ̤: Nṳ̄ hiêng-câi lā̤ siŭ-gāi ciā hiĕk-miêng ī-gĭng guó-gĭ gì bēng-buōng. Nṳ̄ nâ bō̤-còng ĭ, cī ciáh gô bēng-buōng cĭ-hâiu gì siŭ-gāi cêu mò̤ lāu.'''", 'yourdiff' => 'Chă-biék', -'longpagewarning' => "'''Gīng-gó̤: Buōng hiĕk ô $1 chiĕng-cê-ciék (''kilobyte'') dòng; ô siŏh piĕ báuk-lāng-ké (''browser'') mò̤ nièng-ngài piĕng-cĭk 32 chiĕng-cê-ciék cō̤-êu hĕ̤k-ciā gă dòng gì hiĕk. Chiāng sṳ̆-liòng ciŏng ciā hiĕk tiáh có̤ gă dōi gì dâung.'''", 'readonlywarning' => "'''Gīng-gó̤: Ôi lāu mì-hô buōng câng, só-gé̤ṳ-kó ké̤ṳk sō̤ kī lāu, gó-chṳ̄ cī-lùng nṳ̄ mò̤ nièng-ngài bō̤-còng nṳ̄ gì siŭ-gāi. Chiāng sĕng bō̤-còng diŏh nṳ̄ diêng-nō̤ buōng-dê, dīng nék-gū mâing gái ché.'''", 'protectedpagewarning' => "'''GĪNG-GÓ̤: Ciā hiĕk ī-gĭng ké̤ṳk sō̤ kī go̤ lāu, nâ ô guāng-lī-uòng â̤ siŭ-gāi ĭ.'''", 'semiprotectedpagewarning' => "'''Cé̤ṳ-é:''' Ciā hiĕk-miêng ī-gĭng ké̤ṳk bō̤-hô, gó-chṳ̄ nâ ô láuk-diē gì ê̤ṳng-hô â̤-sāi siŭ-gāi ĭ.", @@ -439,32 +438,32 @@ Siók-mìng: (dāng) = gâe̤ng dék sĭng bēng-buōng bī-piâng, (sèng) = g 'recentchangeslinked-toolbox' => 'Siŏng-guăng gì gāi-biéng', # Upload -'upload' => 'Siông-duòng ùng-giông', -'uploadbtn' => 'Siông-duòng ùng-giông', -'reuploaddesc' => 'Duōng kó̤ siông-duòng dăng-dăng.', -'uploadnologin' => 'Mò̤ láuk-diē', -'uploadnologintext' => 'Sĕng [[Special:UserLogin|láuk-diē]] ciáh â̤-sāi siông-duòng ùng-giông.', -'uploaderror' => 'Siông-duòng ô dâng', -'uploadlog' => 'siông-duòng nĭk-cé', -'uploadlogpage' => 'Siông-duòng nĭk-cé', -'uploadlogpagetext' => 'Â-dā̤ sê gé-luŏh cī-bŏng ùng-giông siông-duòng gì dăng-dăng.', -'filename' => 'Ùng-giông-miàng', -'filedesc' => 'Cūng-giék', -'fileuploadsummary' => 'Cūng-giék:', -'filesource' => 'Lài-nguòng:', -'uploadedfiles' => 'Siông-duòng ùng-giông', -'ignorewarning' => 'Mò̤ sê̤ṳ gīng-gó̤ bō̤-còng ùng-giông.', -'ignorewarnings' => 'Mò̤ sê̤ṳ gīng-gó̤', -'fileexists' => "Ī-gĭng ô siŏh bĭk dè̤ng miàng ùng-giông, nṳ̄ nâ mâ̤ káuk-dêng nṳ̄ sê-ng-sê dŏng-cĭng páh-sáung gāi-biéng ĭ, chiāng giēng-chă '''[[:$1]]'''. +'upload' => 'Siông-duòng ùng-giông', +'uploadbtn' => 'Siông-duòng ùng-giông', +'reuploaddesc' => 'Duōng kó̤ siông-duòng dăng-dăng.', +'uploadnologin' => 'Mò̤ láuk-diē', +'uploadnologintext' => 'Sĕng [[Special:UserLogin|láuk-diē]] ciáh â̤-sāi siông-duòng ùng-giông.', +'uploaderror' => 'Siông-duòng ô dâng', +'uploadlog' => 'siông-duòng nĭk-cé', +'uploadlogpage' => 'Siông-duòng nĭk-cé', +'uploadlogpagetext' => 'Â-dā̤ sê gé-luŏh cī-bŏng ùng-giông siông-duòng gì dăng-dăng.', +'filename' => 'Ùng-giông-miàng', +'filedesc' => 'Cūng-giék', +'fileuploadsummary' => 'Cūng-giék:', +'filesource' => 'Lài-nguòng:', +'uploadedfiles' => 'Siông-duòng ùng-giông', +'ignorewarning' => 'Mò̤ sê̤ṳ gīng-gó̤ bō̤-còng ùng-giông.', +'ignorewarnings' => 'Mò̤ sê̤ṳ gīng-gó̤', +'fileexists' => "Ī-gĭng ô siŏh bĭk dè̤ng miàng ùng-giông, nṳ̄ nâ mâ̤ káuk-dêng nṳ̄ sê-ng-sê dŏng-cĭng páh-sáung gāi-biéng ĭ, chiāng giēng-chă '''[[:$1]]'''. [[$1|thumb]]", -'successfulupload' => 'Siông-diòng sìng-gŭng', -'uploadwarning' => 'Siông-duòng gīng-gó̤', -'savefile' => 'Bō̤-còng ùng-giông', -'uploadedimage' => 'siông-duòng "[[$1]]"', -'uploadvirus' => 'Ciā ùng-giông ô bêng-dŭk! Sá̤-ciék: $1', -'sourcefilename' => 'Nguòng-sṳ̄ ùng-giông-miàng:', -'destfilename' => 'Mŭk-biĕu ùng-giông-miàng:', -'watchthisupload' => 'Gáng-sê ciā hiĕk', +'uploadwarning' => 'Siông-duòng gīng-gó̤', +'savefile' => 'Bō̤-còng ùng-giông', +'uploadedimage' => 'siông-duòng "[[$1]]"', +'uploadvirus' => 'Ciā ùng-giông ô bêng-dŭk! Sá̤-ciék: $1', +'sourcefilename' => 'Nguòng-sṳ̄ ùng-giông-miàng:', +'destfilename' => 'Mŭk-biĕu ùng-giông-miàng:', +'watchthisupload' => 'Gáng-sê ciā hiĕk', +'upload-success-subj' => 'Siông-diòng sìng-gŭng', # Special:ListFiles 'imgfile' => 'ùng-giông', @@ -590,7 +589,6 @@ Siók-mìng: (dāng) = gâe̤ng dék sĭng bēng-buōng bī-piâng, (sèng) = g # Watchlist 'watchlist' => 'Nguāi gì gáng-sê-dăng', 'mywatchlist' => 'Nguāi gì gáng-sê-dăng', -'watchlistfor' => "('''$1''' gì)", 'nowatchlist' => 'Nṳ̄ gì gáng-sê-dăng gà̤-dēng mò̤ dèu-mĕ̤k.', 'watchnologin' => 'Mò̤ láuk diē', 'addedwatch' => 'Gă-tiĕng gáu gáng-sê-dăng', @@ -735,7 +733,6 @@ Có̤i âu gì siŭ-gāi sê [[User:$3|$3]] ([[User talk:$3|Tō̤-lâung]]) sū 'ipb-edit-dropdown' => 'Siŭ-gāi hŭng-sō̤ nguòng-ĭng', 'ipb-unblock-addr' => 'Gāi-hŭng $1', 'ipb-unblock' => 'Gāi-hŭng siŏh ciáh ê̤ṳng-hô hĕ̤k IP dê-cī', -'ipb-blocklist-addr' => 'Káng dó̤i $1 gì hŭng-sō̤ dăng-dăng', 'ipb-blocklist' => 'Káng hŭng-sō̤ dăng-dăng', 'unblockip' => 'Gāi-hŭng ê̤ṳng-hô', 'ipusubmit' => 'Gāi-hŭng ciā dê-cī', diff --git a/languages/messages/MessagesCe.php b/languages/messages/MessagesCe.php index 70d3b717..de33574c 100644 --- a/languages/messages/MessagesCe.php +++ b/languages/messages/MessagesCe.php @@ -17,29 +17,192 @@ $fallback = 'ru'; $namespaceNames = array( - NS_MEDIA => 'Медйа', - NS_SPECIAL => 'Башхо', - NS_TALK => 'Дийца', - NS_USER => 'Юзер', - NS_USER_TALK => 'Юзери_дийца', - NS_PROJECT_TALK => '$1_Дийца', - NS_FILE => 'Сурт', - NS_FILE_TALK => 'Сурти_дийца', - NS_MEDIAWIKI => 'МедйаВики', - NS_MEDIAWIKI_TALK => 'МедйаВики_дийца', - NS_TEMPLATE => 'Дакъа', - NS_TEMPLATE_TALK => 'Дакъан_дийца', - NS_HELP => 'ГІо', - NS_HELP_TALK => 'ГІодан_дийца', - NS_CATEGORY => 'Тоба', - NS_CATEGORY_TALK => 'Тобан_дийца', + NS_MEDIA => 'Медиа', + NS_SPECIAL => 'Белхан', + NS_TALK => 'Дийцаре', + NS_USER => 'Декъашхо', + NS_USER_TALK => 'Декъашхон_дийцаре', + NS_PROJECT_TALK => '{{GRAMMAR:genitive|$1}}_дийцаре', + NS_FILE => 'Хlум', + NS_FILE_TALK => 'Хlуман_дийцаре', + NS_MEDIAWIKI => 'MediaWiki', + NS_MEDIAWIKI_TALK => 'MediaWiki_дийцаре', + NS_TEMPLATE => 'Куцкеп', + NS_TEMPLATE_TALK => 'Куцкеп_дийцаре', + NS_HELP => 'Гlо', + NS_HELP_TALK => 'Гlон_дийцаре', + NS_CATEGORY => 'Кадегар', + NS_CATEGORY_TALK => 'Кадегар_дийцаре', +); + +$namespaceAliases = array( + 'Медйа' => NS_MEDIA, + 'Башхо' => NS_SPECIAL, + 'Дийца' => NS_TALK, + 'Юзер' => NS_USER, + 'Юзери_дийца' => NS_USER_TALK, + 'Дийцаре_декъашхо' => NS_USER_TALK, + '$1_Дийца' => NS_PROJECT_TALK, + 'Дийцаре_{{GRAMMAR:genitive|$1}}' => NS_PROJECT_TALK, + 'Сурт' => NS_FILE, + 'Сурти_дийца' => NS_FILE_TALK, + 'Дийцаре_хlуман' => NS_FILE_TALK, + 'МедйаВики' => NS_MEDIAWIKI, + 'МедйаВики_дийца' => NS_MEDIAWIKI_TALK, + 'MediaWiki_Дийцаре' => NS_MEDIAWIKI_TALK, + 'Дакъан' => NS_TEMPLATE, + 'Дакъан_дийца' => NS_TEMPLATE_TALK, + 'ГІо' => NS_HELP, + 'ГІодан_дийца' => NS_HELP_TALK, + 'Тоба' => NS_CATEGORY, + 'Тобан_дийца' => NS_CATEGORY_TALK ); $magicWords = array( - 'notoc' => array( '0', '__СДЖдац__', '__БЕЗ_ОГЛ__', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__NOTOC__' ), - 'nogallery' => array( '0', '__ГалерйЯц__', '__БЕЗ_ГАЛЕРЕИ__', '__NOGALLERY__' ), + 'redirect' => array( '0', '#дlасахьажайар\'', '\'#хьажайо\'', '\'#REDIRECT', '#перенаправление', '#перенапр', '#REDIRECT' ), + 'notoc' => array( '0', '__БАЦ_ЧУЛАЦАМ__', '__БАЦ_ЧУЛ__', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__БЕЗ_ОГЛ__', '__NOTOC__' ), + 'nogallery' => array( '0', '__ЙАЦ_УЧЕ__', '__БЕЗ_ГАЛЕРЕИ__', '__NOGALLERY__' ), + 'forcetoc' => array( '0', '__ТlЕДУЬЛЛУ_ЧУЛАЦАМБАР__', '__ТlЕДУЬЛ_ЧУЛ__', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__ОБЯЗ_ОГЛ__', '__FORCETOC__' ), + 'toc' => array( '0', '__ЧУЛАЦАМ__', '__ЧУЛ__', '__ОГЛАВЛЕНИЕ__', '__ОГЛ__', '__TOC__' ), + 'noeditsection' => array( '0', '__ЦАМЕГ_РЕДАККХА_АГlОН__', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ), + 'noheader' => array( '0', '__КОЬРТА_ЙОЦАШ__', '__БЕЗ_ЗАГОЛОВКА__', '__NOHEADER__' ), + 'currentmonth' => array( '1', 'КАРАРА_БУТТ', 'КАРАРА_БУТТ_2', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ), + 'currentmonth1' => array( '1', 'КАРАРА_БУТТ_1', 'ТЕКУЩИЙ_МЕСЯЦ_1', 'CURRENTMONTH1' ), + 'currentmonthname' => array( '1', 'КАРАРАЧУ_БЕТТА_ЦlЕ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ), + 'currentmonthnamegen' => array( '1', 'КАРАРАЧУ_БЕТТА_ЦlЕ_МУХ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_РОД', 'CURRENTMONTHNAMEGEN' ), + 'currentmonthabbrev' => array( '1', 'КАРАРАЧУ_БЕТТА_ЦlЕ_АБР', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_АБР', 'CURRENTMONTHABBREV' ), + 'currentday' => array( '1', 'КАРАРА_ДЕ', 'ТЕКУЩИЙ_ДЕНЬ', 'CURRENTDAY' ), + 'currentday2' => array( '1', 'КАРАРА_ДЕ_2', 'ТЕКУЩИЙ_ДЕНЬ_2', 'CURRENTDAY2' ), + 'currentdayname' => array( '1', 'КАРАРАЧУ_ДЕ_ЦlЕ', 'НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ', 'CURRENTDAYNAME' ), + 'currentyear' => array( '1', 'КАРАРА_ШО', 'ТЕКУЩИЙ_ГОД', 'CURRENTYEAR' ), + 'currenttime' => array( '1', 'КАРАРА_ХАН', 'ТЕКУЩЕЕ_ВРЕМЯ', 'CURRENTTIME' ), + 'currenthour' => array( '1', 'КАРАРА_САХЬТ', 'ТЕКУЩИЙ_ЧАС', 'CURRENTHOUR' ), + 'localmonth' => array( '1', 'МЕТТИГАН_БУТТ', 'МЕСТНЫЙ_МЕСЯЦ_2', 'МЕСТНЫЙ_МЕСЯЦ', 'LOCALMONTH', 'LOCALMONTH2' ), + 'localmonth1' => array( '1', 'МЕТТИГАН_БУТТ_1', 'МЕСТНЫЙ_МЕСЯЦ_1', 'LOCALMONTH1' ), + 'localmonthname' => array( '1', 'МЕТТИГАН_БЕТТА_ЦlЕ', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА', 'LOCALMONTHNAME' ), + 'localmonthnamegen' => array( '1', 'МЕТТИГАН_БЕТТА_ЦlЕ_МУХ', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_РОД', 'LOCALMONTHNAMEGEN' ), + 'localmonthabbrev' => array( '1', 'МЕТТИГАН_БЕТТА_ЦlЕ_АБР', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_АБР', 'LOCALMONTHABBREV' ), + 'localday' => array( '1', 'МЕТТИГАН_ДЕ', 'МЕСТНЫЙ_ДЕНЬ', 'LOCALDAY' ), + 'localday2' => array( '1', 'МЕТТИГАН_ДЕ_2', 'МЕСТНЫЙ_ДЕНЬ_2', 'LOCALDAY2' ), + 'localdayname' => array( '1', 'МЕТТИГАН_ДЕ_ЦlЕ', 'НАЗВАНИЕ_МЕСТНОГО_ДНЯ', 'LOCALDAYNAME' ), + 'localyear' => array( '1', 'МЕТТИГАН_ШО', 'МЕСТНЫЙ_ГОД', 'LOCALYEAR' ), + 'localtime' => array( '1', 'МЕТТИГАН_ХАН', 'МЕСТНОЕ_ВРЕМЯ', 'LOCALTIME' ), + 'localhour' => array( '1', 'МЕТТИГАН_САХЬТ', 'МЕСТНЫЙ_ЧАС', 'LOCALHOUR' ), + 'numberofpages' => array( '1', 'АГlОНИЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_СТРАНИЦ', 'NUMBEROFPAGES' ), + 'numberofarticles' => array( '1', 'ЯЗЗАМАШИ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_СТАТЕЙ', 'NUMBEROFARTICLES' ), + 'numberoffiles' => array( '1', 'ХlУМНИЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_ФАЙЛОВ', 'NUMBEROFFILES' ), + 'numberofusers' => array( '1', 'ДЕКЪАШХОЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_УЧАСТНИКОВ', 'NUMBEROFUSERS' ), + 'numberofactiveusers' => array( '1', 'ДУКХАЛЛА_ЖИГАРА_ДЕКЪАШХОЙ', 'КОЛИЧЕСТВО_АКТИВНЫХ_УЧАСТНИКОВ', 'NUMBEROFACTIVEUSERS' ), + 'numberofedits' => array( '1', 'НИСДАРШИЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_ПРАВОК', 'NUMBEROFEDITS' ), + 'numberofviews' => array( '1', 'ХЬАЖАРИЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_ПРОСМОТРОВ', 'NUMBEROFVIEWS' ), + 'pagename' => array( '1', 'АГlОН_ЦlЕ', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ), + 'pagenamee' => array( '1', 'АГlОН_ЦlЕ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_2', 'PAGENAMEE' ), + 'namespace' => array( '1', 'ЦlЕРИ_АНА', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ), + 'namespacee' => array( '1', 'ЦlЕРИ_АНА_2', 'ПРОСТРАНСТВО_ИМЁН_2', 'NAMESPACEE' ), + 'talkspace' => array( '1', 'ДИЙЦАРШИ_АНА', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ', 'TALKSPACE' ), + 'talkspacee' => array( '1', 'ДИЙЦАРШИ_АНА_2', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ_2', 'TALKSPACEE' ), + 'subjectspace' => array( '1', 'ЯЗЗАМАШИ_АНА', 'ПРОСТРАНСТВО_СТАТЕЙ', 'SUBJECTSPACE', 'ARTICLESPACE' ), + 'subjectspacee' => array( '1', 'ЯЗЗАМАШИ_АНА_2', 'ПРОСТРАНСТВО_СТАТЕЙ_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ), + 'fullpagename' => array( '1', 'ЮЬЗЗИНА_АГlОН_ЦlЕ', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ', 'FULLPAGENAME' ), + 'fullpagenamee' => array( '1', 'ЮЬЗЗИНА_АГlОН_ЦlЕ_2', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ_2', 'FULLPAGENAMEE' ), + 'subpagename' => array( '1', 'АГlОН_КlЕЛАРА_ЦlЕ', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ', 'SUBPAGENAME' ), + 'subpagenamee' => array( '1', 'АГlОН_КlЕЛАРА_ЦlЕ_2', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ_2', 'SUBPAGENAMEE' ), + 'basepagename' => array( '1', 'АГlОН_ЦlЕРА_БУХ', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ', 'BASEPAGENAME' ), + 'basepagenamee' => array( '1', 'АГlОН_ЦlЕРА_БУХ_2', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ_2', 'BASEPAGENAMEE' ), + 'talkpagename' => array( '1', 'ДИЙЦАРЕ_АГlОН_ЦlЕ', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ', 'TALKPAGENAME' ), + 'talkpagenamee' => array( '1', 'ДИЙЦАРЕ_АГlОН_ЦlЕ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ_2', 'TALKPAGENAMEE' ), + 'subjectpagename' => array( '1', 'АГlОН_ЯЗЗАМАН_ЦlЕ', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ), + 'subjectpagenamee' => array( '1', 'АГlОН_ЯЗЗАМАН_ЦlЕ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ), + 'msg' => array( '0', 'ХААМ:', 'СООБЩЕНИЕ:', 'СООБЩ:', 'MSG:' ), + 'subst' => array( '0', 'ХlОТТОР:', 'ХlОТТ:', 'ПОДСТАНОВКА:', 'ПОДСТ:', 'SUBST:' ), + 'msgnw' => array( '0', 'ВИКИ_ХААМ_БОЦАШ:', 'СООБЩ_БЕЗ_ВИКИ:', 'MSGNW:' ), + 'img_thumbnail' => array( '1', 'жима', 'жимо', 'мини', 'миниатюра', 'thumbnail', 'thumb' ), + 'img_manualthumb' => array( '1', 'жима=$1', 'жимо=$1', 'мини=$1', 'миниатюра=$1', 'thumbnail=$1', 'thumb=$1' ), + 'img_right' => array( '1', 'бакъхьа', 'справа', 'right' ), + 'img_left' => array( '1', 'харцхьа', 'слева', 'left' ), + 'img_none' => array( '1', 'йоцуш', 'без', 'none' ), + 'img_width' => array( '1', '$1цинт', '$1пкс', '$1px' ), + 'img_center' => array( '1', 'юккъ', 'центр', 'center', 'centre' ), + 'img_framed' => array( '1', 'гурабе', 'обрамить', 'framed', 'enframed', 'frame' ), + 'img_frameless' => array( '1', 'гурабоцаш', 'безрамки', 'frameless' ), + 'img_page' => array( '1', 'агlо=$1', 'агlо_$1', 'page_$1', 'страница=$1', 'страница $1', 'page=$1', 'page $1' ), + 'img_upright' => array( '1', 'бакъхьалакхо', 'бакъхьалакхо=$1', 'бакъхьалакхо_$1', 'upright_$1', 'сверхусправа', 'сверхусправа=$1', 'сверхусправа $1', 'upright', 'upright=$1', 'upright $1' ), + 'img_border' => array( '1', 'доза', 'граница', 'border' ), + 'img_baseline' => array( '1', 'бух', 'основание', 'baseline' ), + 'img_sub' => array( '1', 'буха', 'под', 'sub' ), + 'img_super' => array( '1', 'тlе', 'над', 'super', 'sup' ), + 'img_top' => array( '1', 'лакхахь', 'сверху', 'top' ), + 'img_text_top' => array( '1', 'лакххьара-йоза', 'текст-сверху', 'text-top' ), + 'img_middle' => array( '1', 'юккъе', 'посередине', 'middle' ), + 'img_bottom' => array( '1', 'бухар', 'снизу', 'bottom' ), + 'img_text_bottom' => array( '1', 'бухара-йоза', 'текст-снизу', 'text-bottom' ), + 'img_link' => array( '1', 'хьажориг=$1', 'ссылка=$1', 'link=$1' ), + 'img_alt' => array( '1', 'альт=$1', 'alt=$1' ), + 'int' => array( '0', 'ЧУЬРА:', 'ВНУТР:', 'INT:' ), + 'sitename' => array( '1', 'МЕТТИГ_ЦlЕ', 'НАЗВАНИЕ_САЙТА', 'SITENAME' ), + 'ns' => array( '0', 'БО:', 'ПИ:', 'NS:' ), + 'nse' => array( '0', 'БОХЬ:', 'ПИК:', 'NSE:' ), + 'localurl' => array( '0', 'ХlОТТАЕЛЛА_МЕТТИГ:', 'ЛОКАЛЬНЫЙ_АДРЕС:', 'LOCALURL:' ), + 'localurle' => array( '0', 'ХlОТТАЕЛЛА_МЕТТИГ_2:', 'ЛОКАЛЬНЫЙ_АДРЕС_2:', 'LOCALURLE:' ), + 'server' => array( '0', 'ГlУЛКХДИРИГ', 'СЕРВЕР', 'SERVER' ), + 'servername' => array( '0', 'ГlУЛКХДЕЧУЬНА_ЦlЕ', 'НАЗВАНИЕ_СЕРВЕРА', 'SERVERNAME' ), + 'scriptpath' => array( '0', 'НЕКЪ_ОЦ_МЕТТАКЕПА', 'ПУТЬ_К_СКРИПТУ', 'SCRIPTPATH' ), + 'stylepath' => array( '0', 'ЙОМАНХАТl', 'ПУТЬ_К_СТИЛЮ', 'STYLEPATH' ), + 'grammar' => array( '0', 'ДОЖАР:', 'ПАДЕЖ:', 'GRAMMAR:' ), + 'gender' => array( '0', 'ВУ_ЙУ:', 'GENDER', 'ПОЛ:', 'GENDER:' ), + 'notitleconvert' => array( '0', '__ХИЙЦАР_ДОЦУШ_КОЬРТЕ__', '__БЕЗ_ПРЕОБРАЗОВАНИЯ_ЗАГОЛОВКА__', '__NOTITLECONVERT__', '__NOTC__' ), + 'nocontentconvert' => array( '0', '__ЙОЗА_ХИЙЦАР_ДОЦУШ__', '__БЕЗ_ПРЕОБРАЗОВАНИЯ_ТЕКСТА__', '__NOCONTENTCONVERT__', '__NOCC__' ), + 'currentweek' => array( '1', 'КАРАРА_КlИР', 'ТЕКУЩАЯ_НЕДЕЛЯ', 'CURRENTWEEK' ), + 'currentdow' => array( '1', 'КАРАРА_КlИРАН_ДЕ', 'ТЕКУЩИЙ_ДЕНЬ_НЕДЕЛИ', 'CURRENTDOW' ), + 'localweek' => array( '1', 'МЕТТИГЕРА_КlИРА', 'МЕСТНАЯ_НЕДЕЛЯ', 'LOCALWEEK' ), + 'localdow' => array( '1', 'МЕТТИГАН_КlИРАН_ДЕ', 'МЕСТНЫЙ_ДЕНЬ_НЕДЕЛИ', 'LOCALDOW' ), + 'revisionid' => array( '1', 'ЦУЬНА_БАШХО', 'ИД_ВЕРСИИ', 'REVISIONID' ), + 'revisionday' => array( '1', 'ДЕ_БАШХО', 'ДЕНЬ_ВЕРСИИ', 'REVISIONDAY' ), + 'revisionday2' => array( '1', 'ДЕ_БАШХО_2', 'ДЕНЬ_ВЕРСИИ_2', 'REVISIONDAY2' ), + 'revisionmonth' => array( '1', 'БЕТТА_БАШХО', 'МЕСЯЦ_ВЕРСИИ', 'REVISIONMONTH' ), + 'revisionyear' => array( '1', 'ШО_БАШХО', 'ГОД_ВЕРСИИ', 'REVISIONYEAR' ), + 'revisiontimestamp' => array( '1', 'КЪАСТАМ_ХЕНА_БАШХО', 'ОТМЕТКА_ВРЕМЕНИ_ВЕРСИИ', 'REVISIONTIMESTAMP' ), + 'revisionuser' => array( '1', 'ДЕКЪАШХОН_БАШХО', 'ВЕРСИЯ_УЧАСНИКА', 'REVISIONUSER' ), + 'plural' => array( '0', 'ДУКХАЛЛИН_ТЕРАХЬ:', 'МНОЖЕСТВЕННОЕ_ЧИСЛО:', 'PLURAL:' ), + 'fullurl' => array( '0', 'МАЙАРРА_МЕТТИГ:', 'ПОЛНЫЙ_АДРЕС:', 'FULLURL:' ), + 'fullurle' => array( '0', 'МАЙАРРА_МЕТТИГ_2:', 'ПОЛНЫЙ_АДРЕС_2:', 'FULLURLE:' ), + 'lcfirst' => array( '0', 'ХЬАЛХАР_ЭЛП_ЖИМА:', 'ПЕРВАЯ_БУКВА_МАЛЕНЬКАЯ:', 'LCFIRST:' ), + 'ucfirst' => array( '0', 'ХЬАЛХАР_ЭЛП_ДОККХА:', 'ПЕРВАЯ_БУКВА_БОЛЬШАЯ:', 'UCFIRST:' ), + 'lc' => array( '0', 'КЕГИЙЧУ_ЭЛПАШЦА:', 'МАЛЕНЬКИМИ_БУКВАМИ:', 'LC:' ), + 'uc' => array( '0', 'ДАККХИЙЧУ_ЭЛПАШЦА:', 'БОЛЬШИМИ_БУКВАМИ:', 'UC:' ), + 'raw' => array( '0', 'ТАЙАНЗА:', 'НЕОБРАБ:', 'RAW:' ), + 'displaytitle' => array( '1', 'ГАЙТА_КОЬРТАМОГl', 'ПОКАЗАТЬ_ЗАГОЛОВОК', 'DISPLAYTITLE' ), + 'rawsuffix' => array( '1', 'Т', 'Н', 'R' ), + 'newsectionlink' => array( '1', '__ХЬАЖОРИГ_ОЦ_КЕРЛАЧУ_ДЕКЪАН__', '__ССЫЛКА_НА_НОВЫЙ_РАЗДЕЛ__', '__NEWSECTIONLINK__' ), + 'nonewsectionlink' => array( '1', '__ЙОЦАШ_ХЬАЖОРИГ_ОЦ_КЕРЛАЧУ_ДЕКЪАН__', '__БЕЗ_ССЫЛКИ_НА_НОВЫЙ_РАЗДЕЛ__', '__NONEWSECTIONLINK__' ), + 'currentversion' => array( '1', 'ЙОЛШЙОЛУ_БАШХО', 'ТЕКУЩАЯ_ВЕРСИЯ', 'CURRENTVERSION' ), + 'urlencode' => array( '0', 'ИШАРЙИНА_МЕТТИГ:', 'ЗАКОДИРОВАННЫЙ_АДРЕС:', 'URLENCODE:' ), + 'anchorencode' => array( '0', 'ИШАРЙАР_МЕТТИГАН', 'КОДИРОВАТЬ_МЕТКУ', 'ANCHORENCODE' ), + 'currenttimestamp' => array( '1', 'КЪАСТАМ_ЙОЛУЧУ_ХАННА', 'ОТМЕТКА_ТЕКУЩЕГО_ВРЕМЕНИ', 'CURRENTTIMESTAMP' ), + 'localtimestamp' => array( '1', 'КЪАСТАМ_МЕТТИГА_ХАННА', 'ОТМЕТКА_МЕСТНОГО_ВРЕМЕНИ', 'LOCALTIMESTAMP' ), + 'directionmark' => array( '1', 'ХЬАЖОЧЕ_ХААМ', 'НАПРАВЛЕНИЕ_ПИСЬМА', 'DIRECTIONMARK', 'DIRMARK' ), 'language' => array( '0', '#МОТТ', '#ЯЗЫК:', '#LANGUAGE:' ), - 'special' => array( '0', 'башхо', 'служебная', 'special' ), + 'contentlanguage' => array( '1', 'МОТТ_ЧУЛАЦАМ', 'ЯЗЫК_СОДЕРЖАНИЯ', 'CONTENTLANGUAGE', 'CONTENTLANG' ), + 'pagesinnamespace' => array( '1', 'АГlОНАШ_ОЦ_ЦlЕРАШКАХЬ:', 'СТРАНИЦ_В_ПРОСТРАНСТВЕ_ИМЁН:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ), + 'numberofadmins' => array( '1', 'АДМАНКУЬГАЛХОЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_АДМИНИСТРАТОРОВ', 'NUMBEROFADMINS' ), + 'formatnum' => array( '0', 'ТЕРАХЬАН_БАРАМХlОТТОР', 'ФОРМАТИРОВАТЬ_ЧИСЛО', 'FORMATNUM' ), + 'padleft' => array( '0', 'ЙУЗА_ХАРЦЕ', 'ЗАПОЛНИТЬ_СЛЕВА', 'PADLEFT' ), + 'padright' => array( '0', 'ЙУЗА_БАКЪЕ', 'ЗАПОЛНИТЬ_СПРАВА', 'PADRIGHT' ), + 'special' => array( '0', 'белхан', 'гlуллакхан', 'служебная', 'special' ), + 'defaultsort' => array( '1', 'ЛИСТАР_ЦАХЬЕХОР', 'ДОГlА_ЛИСТАРАН', 'СОРТИРОВКА_ПО_УМОЛЧАНИЮ', 'КЛЮЧ_СОРТИРОВКИ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ), + 'filepath' => array( '0', 'ОЦ_ХlУМАНТlЕ_НЕКЪ:', 'ПУТЬ_К_ФАЙЛУ:', 'FILEPATH:' ), + 'tag' => array( '0', 'къастам', 'къасто', 'къаст', 'метка', 'тег', 'тэг', 'tag' ), + 'hiddencat' => array( '1', '__КЪАЙЛАХЙОЛУ_КАДЕГАР__', '__СКРЫТАЯ_КАТЕГОРИЯ__', '__HIDDENCAT__' ), + 'pagesincategory' => array( '1', 'АГlОНАШ_ОЦУ_КАДЕГАРШЧОХЬ', 'СТРАНИЦ_В_КАТЕГОРИИ', 'PAGESINCATEGORY', 'PAGESINCAT' ), + 'pagesize' => array( '1', 'АГlОН_БАРАМ', 'РАЗМЕР_СТРАНИЦЫ', 'PAGESIZE' ), + 'index' => array( '1', '__МЕТТИГТЕРАХЬ__', '__ИНДЕКС__', '__INDEX__' ), + 'noindex' => array( '1', '__МЕТТИГТЕРАХЬ_ЙОЦАШ__', '__БЕЗ_ИНДЕКСА__', '__NOINDEX__' ), + 'numberingroup' => array( '1', 'ТЕРАХЬ_ОЦ_ТОБАНЦА', 'ЧИСЛО_В_ГРУППЕ', 'NUMBERINGROUP', 'NUMINGROUP' ), + 'staticredirect' => array( '1', '__БУХЕХЬДЕРГ_ДlАСХЬАЖАЙАР__', '__СТАТИЧЕСКОЕ_ПЕРЕНАПРАВЛЕНИЕ__', '__STATICREDIRECT__' ), + 'protectionlevel' => array( '1', 'ГlАРОЛЛИ_БАРАМ', 'УРОВЕНЬ_ЗАЩИТЫ', 'PROTECTIONLEVEL' ), + 'formatdate' => array( '0', 'терахьибарам', 'форматдаты', 'formatdate', 'dateformat' ), + 'url_path' => array( '0', 'ЙОМА', 'ПУТЬ', 'PATH' ), + 'url_wiki' => array( '0', 'ЧЕХКА', 'ВИКИ', 'WIKI' ), ); $messages = array( @@ -58,7 +221,7 @@ $messages = array( 'tog-editsection' => 'Гайта хьажориг «нисйе» аьлла хlора агlона', 'tog-editsectiononrightclick' => 'Нисде дакъа шозза бакъехьар дахка тlетаlийча оцу кортан (JavaScript)', 'tog-showtoc' => 'Гойти коьртнаш (оцу агlонашна лаххара 3 коьртнашца)', -'tog-rememberpassword' => 'Даглаца сан дlавазвалар хlокху гlулкхдечу гlирса тlяхь', +'tog-rememberpassword' => 'Даглаца сан дlавазвалар хlокху гlулкхдечу гlирса тlяхь (цхьан $1 {{PLURAL:$1|де|ден|динахь}})', 'tog-watchcreations' => 'Тlетоха ас кхоллина агlонаш тергаме могlам чу', 'tog-watchdefault' => 'Тlетоха ас нисйина агlонаш тергаме могlам чу', 'tog-watchmoves' => 'Тlетоха ас цlераш хийцина агlонаш тергаме могlам чу', @@ -205,31 +368,21 @@ $messages = array( 'faqpage' => 'Project:СиХХ', # Vector skin -'vector-action-addsection' => 'Тlетоха хьедар', -'vector-action-delete' => 'Дlадайá', -'vector-action-move' => 'Цlе хийца', -'vector-action-protect' => 'Гlаролла дé', -'vector-action-undelete' => 'Меттахlоттадé', -'vector-action-unprotect' => 'Гlароллех къаста', -'vector-namespace-category' => 'Кадегар', -'vector-namespace-help' => 'Нисвохааман агlо', -'vector-namespace-image' => 'Хlум', -'vector-namespace-main' => 'Агlо', -'vector-namespace-media' => 'Медиа-агlо', -'vector-namespace-mediawiki' => 'Хаам', -'vector-namespace-project' => 'Кхолламех', -'vector-namespace-special' => 'Белха агlо', -'vector-namespace-talk' => 'Дийцаре', -'vector-namespace-template' => 'Куцкеп', -'vector-namespace-user' => 'Декъашхон агlо', -'vector-view-create' => 'Кхоллар', -'vector-view-edit' => 'Нисйé', -'vector-view-history' => 'Хьажа исторе', -'vector-view-view' => 'Éшар', -'vector-view-viewsource' => 'Билглонашка хьажа', -'actions' => 'Дийраш', -'namespaces' => 'Цlерийн ана', -'variants' => 'Кепараш', +'vector-action-addsection' => 'Тlетоха хьедар', +'vector-action-delete' => 'Дlадайá', +'vector-action-move' => 'Цlе хийца', +'vector-action-protect' => 'Гlаролла дé', +'vector-action-undelete' => 'Меттахlоттадé', +'vector-action-unprotect' => 'Гlароллех къаста', +'vector-simplesearch-preference' => 'Шуьйра лахаран хьехар лата де (декъа «Хьушйерг» кечйарца)', +'vector-view-create' => 'Кхоллар', +'vector-view-edit' => 'Нисйé', +'vector-view-history' => 'Хьажа исторе', +'vector-view-view' => 'Éшар', +'vector-view-viewsource' => 'Билглонашка хьажа', +'actions' => 'Дийраш', +'namespaces' => 'Цlерийн ана', +'variants' => 'Кепараш', 'errorpagetitle' => 'Гlалат', 'returnto' => 'Юхагlо оцу агlоне $1.', @@ -290,6 +443,9 @@ $messages = array( Дехар до, собардеш а йуха хьажа хlокху агlонтlе жим тlаьхьо. $1', +'pool-timeout' => 'Сацо веза хан тlех йаьлла', +'pool-queuefull' => 'Дехаршан чоь йуззина йу', +'pool-errorunknown' => 'Дойзаш доцу гlалат', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{grammar:genitive|{{SITENAME}}}} лаьцна', @@ -391,7 +547,7 @@ $1', 'yourname' => 'Декъашхон цlе:', 'yourpassword' => 'Ишар:', 'yourpasswordagain' => 'Юха язъйе ишар:', -'remembermypassword' => 'Даглаца сан дlавазвалар хlокху гlулкхдечу гlирса тlяхь', +'remembermypassword' => 'Даглаца сан дlавазвалар хlокху гlулкхдечу гlирса тlяхь (цхьан $1 {{PLURAL:$1|ден|динахь|динахь}})', 'yourdomainname' => 'Хьан машан меттиг:', 'login' => 'Вовзийта хьой гlирсан', 'nav-login-createaccount' => 'Вовзийта хьой / дlавазло', @@ -692,7 +848,6 @@ $1', 'recentchanges' => 'Керла нисдарш', 'recentchanges-legend' => 'Гlирс нисбарна керла нисдарш', 'recentchanges-feed-description' => 'Тергам бе тlаьхьара вики хийцаман хlокху ларца.', -'recentchanges-legend-newpage' => '$1 — керла агlо', 'recentchanges-label-newpage' => 'Оцу нисдарца кхоллина керла агlо.', 'recentchanges-label-minor' => 'Хlара нисдинарг къастийна жимо долушсан', 'rcnote' => "{{PLURAL:$1|Тlаьххьара '''$1''' хийцам|Тlаьххьара '''$1''' хийцамаш|Тlаьххьара '''$1''' хийцамаш}} за '''$2''' {{PLURAL:$2|де|дийнахь|дийнахь}}, оцу хан чохь $5 $4.", @@ -937,7 +1092,6 @@ PICT # тайп тайпан # Watchlist 'watchlist' => 'Тергаме могlам', 'mywatchlist' => 'Тергаме могlам', -'watchlistfor' => "(декъашхона '''$1''')", 'watchnologin' => 'Хьо вовзита веза гlирсан', 'addedwatch' => 'Юькъатоьхна тергаме могlамна', 'addedwatchtext' => 'Хlар агlо «[[:$1]]» тlетоьхна хьан [[Special:Watchlist|тидаме могlам чу]]. @@ -1247,9 +1401,9 @@ PICT # тайп тайпан # Media information 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|агlо|агlонаш|агlонаш}}', -'file-info-size' => '($1 × $2 сиртакх, хlуман барам: $3, MIME-тайп: $4)', +'file-info-size' => '$1 × $2 сиртакх, хlуман барам: $3, MIME-тайп: $4', 'file-nohires' => 'Кхи йоккха гlоле башхо яц.', -'svg-long-desc' => '(SVG-хlума, хlоттамца $1 × $2 цинташ, хlуман барам: $3)', +'svg-long-desc' => 'SVG-хlума, хlоттамца $1 × $2 цинташ, хlуман барам: $3', 'show-big-image' => 'Сурт цlанал лаккхара бакъонца', 'show-big-image-thumb' => 'Хьажарна барам: $1 × $2 цинташ', diff --git a/languages/messages/MessagesCeb.php b/languages/messages/MessagesCeb.php index ff2d3407..a7567d2c 100644 --- a/languages/messages/MessagesCeb.php +++ b/languages/messages/MessagesCeb.php @@ -79,8 +79,7 @@ $messages = array( 'tog-editsection' => 'Mausab ang mga seksiyon gamit ang [usba] nga sumpay', 'tog-editsectiononrightclick' => 'Mahimo ang pag-usab sa seksyon pinaagi sa pag-right click sa titulo sa seksyon (JavaScript kinahanglan)', 'tog-showtoc' => 'Ipakita ang talaan sa sulod (alang sa mga panid nga may daghan pa sa 3 ka heading)', -'tog-rememberpassword' => 'Hinumdomi ako sa kining kompyuter', -'tog-editwidth' => 'Palapdan ang kahon sa pag-usab aron mapuno sa tibuok screen', +'tog-rememberpassword' => 'Hinumdomi ako sa kining kompyuter (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Bantayi ang akong gisugdang mga panid', 'tog-watchdefault' => 'Bantayi ang akong giusab nga mga panid', 'tog-watchmoves' => 'Bantayi ang akong gibalhin nga mga panid', @@ -222,31 +221,20 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Pagdugang og topiko', -'vector-action-delete' => 'Papasa', -'vector-action-move' => 'Ibalhin', -'vector-action-protect' => 'Protektahi', -'vector-action-undelete' => 'Ayaw papasa', -'vector-action-unprotect' => 'Ayaw protektahi', -'vector-namespace-category' => 'Kategoriya', -'vector-namespace-help' => 'Panid sa tabang', -'vector-namespace-image' => 'Payl', -'vector-namespace-main' => 'Panid', -'vector-namespace-media' => 'Panid sa medya', -'vector-namespace-mediawiki' => 'Mensahe', -'vector-namespace-project' => 'Panid sa proyekto', -'vector-namespace-special' => 'Espesyal nga panid', -'vector-namespace-talk' => 'Panaghisgot-hisgot', -'vector-namespace-template' => 'Plantilya', -'vector-namespace-user' => 'Panid sa tiggamit', -'vector-view-create' => 'Himoa', -'vector-view-edit' => 'Usba', -'vector-view-history' => 'Tan-awa ang kaagi', -'vector-view-view' => 'Basaha', -'vector-view-viewsource' => 'Tan-awa ang ginikanan', -'actions' => 'Mga lihok', -'namespaces' => 'Mga ngalang espasyo', -'variants' => 'Mga baryant', +'vector-action-addsection' => 'Pagdugang og topiko', +'vector-action-delete' => 'Papasa', +'vector-action-move' => 'Ibalhin', +'vector-action-protect' => 'Protektahi', +'vector-action-undelete' => 'Ayaw papasa', +'vector-action-unprotect' => 'Ayaw protektahi', +'vector-view-create' => 'Himoa', +'vector-view-edit' => 'Usba', +'vector-view-history' => 'Tan-awa ang kaagi', +'vector-view-view' => 'Basaha', +'vector-view-viewsource' => 'Tan-awa ang ginikanan', +'actions' => 'Mga lihok', +'namespaces' => 'Mga ngalang espasyo', +'variants' => 'Mga baryant', 'errorpagetitle' => 'Sayop', 'returnto' => 'Balik sa $1.', @@ -470,7 +458,7 @@ Ayaw kalimot sa pag-usab sa imong [[Special:Preferences|{{SITENAME}} mga prepere 'yourname' => 'Ngalan sa tiggamit:', 'yourpassword' => 'Pasword:', 'yourpasswordagain' => 'Itayp og usab ang pasword:', -'remembermypassword' => 'Hinumdomi ako niini nga kompyuter', +'remembermypassword' => 'Hinumdomi ako niining brawser (sa kadugayon nga $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}})', 'yourdomainname' => 'Ang imong domain:', 'externaldberror' => 'May nahitabong authentication database error o kaha wala ka tugoti nga mag-update sa imong eksternal nga akawnt.', 'login' => 'Sulod', @@ -1026,7 +1014,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'Akong gibantayan', 'mywatchlist' => 'Akong gibantayan', -'watchlistfor' => "(para kang '''$1''')", 'addedwatch' => 'Nadugang sa gibantayan', 'addedwatchtext' => "Ang panid \"[[:\$1]]\" nadugang na sa imong [[Special:Watchlist|gibantayan]]. Ang mga pag-usab puhon sa kining panid ug ang kaubang panid sa hisgot dinhi maitala, ug ang panid mopakita nga '''nakalugom''' sa [[Special:RecentChanges|talaan sa mga bag-ong pag-usab]] aron dali kini pilion.", @@ -1240,9 +1227,9 @@ Puyde dugangan og rason sa mubong sugid.', 'nextdiff' => 'Mas bag-ong pag-usab →', # Media information -'file-info-size' => '($1 × $2 pixels, size sa payl: $3, MIME type: $4)', +'file-info-size' => '$1 × $2 pixels, size sa payl: $3, MIME type: $4', 'file-nohires' => 'Walay mas taas nga resolusyon.', -'svg-long-desc' => '(SVG nga payl, nominally $1 × $2 pixels, size sa payl: $3)', +'svg-long-desc' => 'SVG nga payl, nominally $1 × $2 pixels, size sa payl: $3', 'show-big-image' => 'Tibuok resolusyon', 'show-big-image-thumb' => 'Size niining preview: $1 × $2 pixels', diff --git a/languages/messages/MessagesCh.php b/languages/messages/MessagesCh.php index fbb001a0..f1a43f18 100644 --- a/languages/messages/MessagesCh.php +++ b/languages/messages/MessagesCh.php @@ -37,7 +37,7 @@ $messages = array( 'tog-extendwatchlist' => "Na'ladångkolu i listan pinilan para u na'annok i manaplikayon na tinilaika siha", 'tog-usenewrc' => "I manmana'lamaolek na tinilaika (JavaScript)", 'tog-showtoc' => "Na'annok i fañodda'an (annai guåha mas ki 3 na titulo gi påhina)", -'tog-rememberpassword' => 'Hasso iyo-ku login gi este na komputadora.', +'tog-rememberpassword' => 'Hasso iyo-ku login gi este na komputadora (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => "Po'lo i påhina siha ni fina'tinas-hu gi iyo-ku listan pinilan.", 'tog-watchdefault' => "Po'lo i påhina siha ni hu tulaika gi iyo-ku listan pinilan.", 'tog-watchmoves' => "Po'lo i påhina siha ni hu muebi gi iyo-ku listan pinilan.", @@ -151,9 +151,6 @@ $messages = array( 'qbmyoptions' => 'Påhina-hu siha', 'qbspecialpages' => 'Manespesiat na påhina', -# Vector skin -'vector-namespace-template' => 'Plantiya', - 'errorpagetitle' => 'Linachi', 'returnto' => 'Hånao tåtte para $1.', 'tagline' => 'Ginen {{SITENAME}}', @@ -316,7 +313,7 @@ Munga mamalefa tumulaika ga'ña-mu {{SITENAME}}.", 'yourname' => "Nå'an ni muna'setbi:", 'yourpassword' => 'Password:', 'yourpasswordagain' => "Taip ta'lo i password:", -'remembermypassword' => "Na'hasso iyo-ku login gi este na komputer", +'remembermypassword' => "Na'hasso iyo-ku login gi este na komputer (for a maximum of $1 {{PLURAL:$1|day|days}})", 'yourdomainname' => 'Lugat-mu:', 'login' => 'Log in', 'nav-login-createaccount' => "Hålom / fa'tinas kuenta-mu", @@ -911,7 +908,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'Listan pinilan-hu', 'mywatchlist' => 'Listan pinilan-hu', -'watchlistfor' => "(para '''$1''')", 'addedwatch' => "Mapo'lo gi listan pinilan", 'addedwatchtext' => "Mana'suha i påhina \"[[:\$1]]\" para iyo-mu [[Special:Watchlist|Listan pinilan]]. I tinilaika siha mo'na gi tiempo kontodu i påhinan kombetsasion siha para u fana'lista guihi, yan para u '''na'potpot''' i påhina gi halom [[Special:RecentChanges|i listan tinilaika gi halacha]] para un ayek ha' mas libianu.", @@ -1119,9 +1115,9 @@ Ayek fan otru nå'an-ña.", 'nextdiff' => "Mamaila' na dif →", # Media information -'file-info-size' => '($1 × $2 na pixel, mineddong atkibu: $3, MIME klåsi: $4)', +'file-info-size' => '$1 × $2 na pixel, mineddong atkibu: $3, MIME klåsi: $4', 'file-nohires' => "Tåya' mas takhilo' na risolusion.", -'svg-long-desc' => '(Atkibu SVG, $1 × $2 na pixels, mineddong atkibu: $3)', +'svg-long-desc' => 'Atkibu SVG, $1 × $2 na pixels, mineddong atkibu: $3', 'show-big-image' => 'Magåhet mineddong-ña', 'show-big-image-thumb' => 'Mineddong i ripasu: $1 × $2 pixels', diff --git a/languages/messages/MessagesCkb.php b/languages/messages/MessagesCkb.php index e91f6633..93c4c786 100644 --- a/languages/messages/MessagesCkb.php +++ b/languages/messages/MessagesCkb.php @@ -7,6 +7,7 @@ * @ingroup Language * @file * + * @author Aras Noori * @author Arastein * @author Asoxor * @author Cyrus abdi @@ -15,7 +16,137 @@ * @author رزگار */ -$fallback = 'ckb-arab'; +$linkPrefixExtension = true; +$fallback8bitEncoding = 'windows-1256'; + +$rtl = true; +$defaultUserOptionOverrides = array( + # Swap sidebar to right side by default + 'quickbar' => 2, + # Underlines seriously harm legibility. Force off: + 'underline' => 0, +); + +$digitTransformTable = array( + '0' => '٠', # ٠ + '1' => '١', # ١ + '2' => '٢', # ٢ + '3' => '٣', # ٣ + '4' => '٤', # ٤ + '5' => '٥', # ٥ + '6' => '٦', # ٦ + '7' => '٧', # ٧ + '8' => '٨', # ٨ + '9' => '٩', # ٩ + '.' => '٫', # ٫ wrong table ? + ',' => '٬', # ٬ +); + +$namespaceNames = array( + NS_MEDIA => 'میدیا', + NS_SPECIAL => 'تایبەت', + NS_MAIN => '', + NS_TALK => 'وتووێژ', + NS_USER => 'بەکارھێنەر', + NS_USER_TALK => 'لێدوانی_بەکارھێنەر', + NS_PROJECT_TALK => 'لێدوانی_$1', + NS_FILE => 'پەڕگە', + NS_FILE_TALK => 'وتووێژی_پەڕگە', + NS_MEDIAWIKI => 'میدیاویکی', + NS_MEDIAWIKI_TALK => 'وتووێژی_میدیاویکی', + NS_TEMPLATE => 'داڕێژە', + NS_TEMPLATE_TALK => 'وتووێژی_داڕێژە', + NS_HELP => 'یارمەتی', + NS_HELP_TALK => 'وتووێژی_یارمەتی', + NS_CATEGORY => 'پۆل', + NS_CATEGORY_TALK => 'وتووێژی_پۆل', +); + +$namespaceAliases = array( + 'لێدوان' => NS_TALK, + 'قسەی_بەکارھێنەر' => NS_USER_TALK, + 'لێدوانی_پەڕگە' => NS_FILE_TALK, + 'لێدوانی_میدیاویکی' => NS_MEDIAWIKI_TALK, + 'قاڵب' => NS_TEMPLATE, + 'لێدوانی_قاڵب' => NS_TEMPLATE_TALK, + 'لێدوانی_داڕێژە' => NS_TEMPLATE_TALK, + 'لێدوانی_یارمەتی' => NS_HELP_TALK, + 'لێدوانی_پۆل' => NS_CATEGORY_TALK, +); + +$specialPageAliases = array( + 'DoubleRedirects' => array( 'ڕەوانکەرە_دووپاتکراوەکان' ), + 'BrokenRedirects' => array( 'ڕەوانکەرە_شکاوەکان' ), + 'Userlogin' => array( 'چوونەژوورەوەی_بەکارھێنەر' ), + 'CreateAccount' => array( 'ھەژمار_دروستکردن' ), + 'Preferences' => array( 'ھەڵبژاردەکان' ), + 'Watchlist' => array( 'لیستی_چاودێری' ), + 'Recentchanges' => array( 'دوایین_گۆڕانکارییەکان' ), + 'Upload' => array( 'بارکردن' ), + 'Listfiles' => array( 'لیستی_پەڕگەکان' ), + 'Newimages' => array( 'پەڕگە_نوێکان' ), + 'Listusers' => array( 'لیستی_بەکارھێنەران' ), + 'Statistics' => array( 'ئامارەکان' ), + 'Randompage' => array( 'ھەڵکەوت،پەڕەی_بە_ھەرمەکی' ), + 'Lonelypages' => array( 'پەڕە_تاکەکان،_پەڕە_ھەتیوکراوەکان' ), + 'Uncategorizedpages' => array( 'پەڕە_پۆلێننەکراوەکان' ), + 'Uncategorizedcategories' => array( 'پۆلە_پۆلێننەکراوەکان' ), + 'Uncategorizedimages' => array( 'پەڕگە_پۆلێننەکراوەکان،_وێنە_پۆلێننەکراوەکان' ), + 'Uncategorizedtemplates' => array( 'داڕێژە_پۆلێننەکراوەکان' ), + 'Unusedcategories' => array( 'پۆلە_بەکارنەھێنراوەکان' ), + 'Unusedimages' => array( 'پەڕگە_بەکارنەھێنراوەکان،_وێنە_بەکارنەھێنراوەکان' ), + 'Wantedpages' => array( 'پەڕە_پێویستەکان،_بەستەرە_شکاوەکان' ), + 'Wantedcategories' => array( 'پۆلە_پێویستەکان' ), + 'Wantedfiles' => array( 'پەڕگە_پێویستەکان' ), + 'Wantedtemplates' => array( 'داڕێژە_پێویستەکان' ), + 'Mostlinked' => array( 'پەڕەکانی_زیاترین_بەستەردراون،_زیاترین_بەستەردراون' ), + 'Mostlinkedcategories' => array( 'پۆلەکانی_زیاترین_بەستەردراون،_پۆلەکانی_زیاترین_بەکارھێنراون' ), + 'Mostlinkedtemplates' => array( 'داڕێژەکانی_زیاترین_بەستەردراون،_داڕێژەکانی_زیاترین_بەکارھێنراون' ), + 'Mostimages' => array( 'پەڕگەکانی_زیاترین_بەستەردراون،_زیاترین_پەڕگەکان،_زیاترین_وێنەکان' ), + 'Mostcategories' => array( 'زیاترین_پۆلەکان' ), + 'Mostrevisions' => array( 'زیاترین_پێداچوونەوەکان' ), + 'Fewestrevisions' => array( 'کەمترین__پێداچوونەوەکان' ), + 'Shortpages' => array( 'پەڕە‌_کورتەکان' ), + 'Longpages' => array( 'پەڕە_درێژەکان' ), + 'Newpages' => array( 'پەڕە_نوێکان' ), + 'Ancientpages' => array( 'پەڕە_کۆنەکان' ), + 'Deadendpages' => array( 'پەڕە_بەربەستراوەکان' ), + 'Protectedpages' => array( 'پەڕە_پارێزراوەکان' ), + 'Protectedtitles' => array( 'بابەتە_پارێزراوەکان' ), + 'Allpages' => array( 'ھەموو_پەڕەکان' ), + 'Unblock' => array( 'کردنەوە' ), + 'Specialpages' => array( 'پەڕە_تایبەتەکان' ), + 'Contributions' => array( 'بەشدارییەکان' ), + 'Emailuser' => array( 'ئیمەیل_بەکارھێنەر' ), + 'Confirmemail' => array( 'بڕواکردن_ئیمەیل' ), + 'Whatlinkshere' => array( 'چی_بەستەری_داوە_بێرە' ), + 'Movepage' => array( 'پەڕە_گواستنەوە' ), + 'Categories' => array( 'پۆلەکان' ), + 'Export' => array( 'ھەناردن' ), + 'Version' => array( 'وەشان' ), + 'Allmessages' => array( 'ھەموو_پەیامەکان' ), + 'Log' => array( 'لۆگ' ), + 'Mypage' => array( 'پەڕەکەم' ), + 'Mytalk' => array( 'لێدوانەکانم' ), + 'Mycontributions' => array( 'بەشدارییەکانم' ), + 'Listadmins' => array( 'لیستی_بەڕێوبەران' ), + 'Listbots' => array( 'لیستی_بۆتەکان' ), + 'Popularpages' => array( 'پەڕە_ناودارەکان' ), + 'Search' => array( 'گەڕان' ), + 'Resetpass' => array( 'تێپەڕوشەگۆڕان،_تێپەڕەوشە_ڕێکخستنەوە' ), + 'Activeusers' => array( 'بەکارھێنەرە_چالاکەکان' ), +); + +$magicWords = array( + 'img_thumbnail' => array( '1', 'وێنۆک', 'thumbnail', 'thumb' ), + 'img_right' => array( '1', 'ڕاست', 'right' ), + 'img_left' => array( '1', 'چەپ', 'left' ), + 'img_width' => array( '1', '$1پیکسڵ', '$1px' ), + 'img_center' => array( '1', 'ناوەڕاست', 'center', 'centre' ), + 'img_framed' => array( '1', 'چوارچێوە', 'framed', 'enframed', 'frame' ), + 'img_frameless' => array( '1', 'بێچوارچێوە', 'frameless' ), + 'img_border' => array( '1', 'سنوور', 'border' ), +); $messages = array( # User preference toggles @@ -33,8 +164,7 @@ $messages = array( 'tog-editsection' => 'ڕێگە بدە بۆ دەستکاری کردنی بەشەکان لە ڕێگەی بەستەرەکانی [دەستکاری]', 'tog-editsectiononrightclick' => 'ڕێگە بدە بۆ دەستکاری کردنی بەشەکان لە ڕێگەی کلیکی ڕاست کردن لەسەر سەردێڕی بەشەکان (JavaScript پێویستە)', 'tog-showtoc' => 'پێرستی ناوەڕۆک نیشان بدە (بۆ ئەو پەڕانە کە زیاتر لە ٣ سەردێڕیان تێدایە)', -'tog-rememberpassword' => 'چوونەژوورەوەم لەسەر ئەم کۆمپییتەرە لەبیرت ببێ', -'tog-editwidth' => 'چوراچێوە دەستکاری پان کەرەوە تا سەرانسەری شاشەکە پڕ کاتەوە', +'tog-rememberpassword' => 'چوونە ژوورەوەم لەسەر ئەم وێبگەڕە پاشەکەوت بکە (ئەو پەڕی $1 {{PLURAL:$1|ڕۆژ|ڕۆژ}}ە)', 'tog-watchcreations' => 'ئەو پەڕانە کە من دروستم کردوون زیاد بکە بە لیستی چاودێڕییەکەم', 'tog-watchdefault' => 'ئەو پەڕانە کە من دەستکاریم کردوون زیاد بکە بە لیستی چاودێڕییەکەم', 'tog-watchmoves' => 'ئەو پەڕانە کە من گواستومنەتەوە زیاد بکە بە لیستی چاودێڕییەکەم', @@ -178,31 +308,21 @@ $messages = array( 'faqpage' => 'Project:پرسیار و وەڵام', # Vector skin -'vector-action-addsection' => 'بابەت دابنێ', -'vector-action-delete' => 'بیسڕەوە', -'vector-action-move' => 'بیگوازەوە', -'vector-action-protect' => 'بیپارێزە', -'vector-action-undelete' => 'سڕینەوە بگەڕێنەوە', -'vector-action-unprotect' => 'مەیپارێزە', -'vector-namespace-category' => 'پۆل', -'vector-namespace-help' => 'پەڕەی یارمەتی', -'vector-namespace-image' => 'پەڕگە', -'vector-namespace-main' => 'پەڕە', -'vector-namespace-media' => 'پەڕەی میدیا', -'vector-namespace-mediawiki' => 'پەیام', -'vector-namespace-project' => 'پەڕەی پرۆژە', -'vector-namespace-special' => 'پەڕەی تایبەت', -'vector-namespace-talk' => 'وتووێژ', -'vector-namespace-template' => 'داڕێژە', -'vector-namespace-user' => 'پەڕەی بەکارھێنەر', -'vector-view-create' => 'درووستکردن', -'vector-view-edit' => 'دەستکاریی بکە', -'vector-view-history' => 'مێژووەکەی ببینە', -'vector-view-view' => 'بیخوێنەوە', -'vector-view-viewsource' => 'سەرچاوەکەی ببینە', -'actions' => 'کردارەکان', -'namespaces' => 'شوێنناوەکان', -'variants' => 'شێوەزارەکان', +'vector-action-addsection' => 'بابەت دابنێ', +'vector-action-delete' => 'بیسڕەوە', +'vector-action-move' => 'بیگوازەوە', +'vector-action-protect' => 'بیپارێزە', +'vector-action-undelete' => 'سڕینەوە بگەڕێنەوە', +'vector-action-unprotect' => 'مەیپارێزە', +'vector-simplesearch-preference' => 'ڕێگە بدە بە پێشنیارەکانی گەڕانی پێشکەوتوو (تەنیا بۆ پێستەی ڤێکتۆر)', +'vector-view-create' => 'درووستکردن', +'vector-view-edit' => 'دەستکاریی بکە', +'vector-view-history' => 'مێژووەکەی ببینە', +'vector-view-view' => 'بیخوێنەوە', +'vector-view-viewsource' => 'سەرچاوەکەی ببینە', +'actions' => 'کردارەکان', +'namespaces' => 'شوێنناوەکان', +'variants' => 'شێوەزارەکان', 'errorpagetitle' => 'ھەڵە', 'returnto' => 'بگەڕێوە بۆ $1.', @@ -430,6 +550,7 @@ $2', 'yourname' => 'ناوی بەکارھێنەری:', 'yourpassword' => 'تێپەڕوشە:', 'yourpasswordagain' => 'تێپه‌ڕه‌وشه‌ دووباره:‌', +'remembermypassword' => 'چوونە ژوورەوەم لەسەر ئەم کۆمپیوتەرە پاشەکەوت بکە (ئەو پەڕی $1 {{PLURAL:$1|ڕۆژ|ڕۆژ}}ە)', 'yourdomainname' => 'ناوی دۆمه‌ینی خۆت', 'externaldberror' => 'یان هەڵەی ڕێگەپێدانی بنکەدراو هەیە یان ڕێگات پێ نادرێت بۆ نوێ کردنی هەژماری دەرەکیت.', 'login' => 'بچۆ ژوورەوە', @@ -446,6 +567,7 @@ $2', 'gotaccount' => "خاوه‌نی هه‌ژماری خۆتی؟ '''$1'''.", 'gotaccountlink' => 'چوونه‌ ژووره‌وه‌', 'createaccountmail' => 'بە ئیمەیل', +'createaccountreason' => 'هۆکار:', 'badretype' => 'تێپەڕوشەکان لەیەک ناچن.', 'userexists' => 'ئەو ناوەی تۆ داوتە پێشتر کەسێکی دیکە بەکاری بردووە. ناوێکی دیکە ھەڵبژێرە.', @@ -559,9 +681,12 @@ $2', 'showdiff' => 'گۆڕانکارییەکان نیشان بدە', 'anoneditwarning' => "'''ھۆشیار بە:''' نەچوویتەتە ژوورەوە. ئەدرەسی IPی تۆ لە مێژووی دەستکارییەکانی ئەم پەڕەدا تۆماردەکرێت.", +'anonpreviewwarning' => '«نەڕۆشتوویتە ژوورەوە. پاشەکەوتکردن، ئەدرەسی IPەکەت لە مێژووی دەستکاریی ئەم پەڕە تۆمار دەکات.»', 'missingsummary' => "'''وە بیر خستنەوە:''' پوختەیەکت نەنووسیوە بۆ چۆنیەتی گۆڕانکارییەکەت. ئەگەر جارێکی تر پاشکەوت کردن لێبدەی، بێ پوختە تۆمار دەکرێ.", 'missingcommenttext' => 'تکایە لە خوارەوە شرۆڤەیەک بنووسە.', +'missingcommentheader' => "'''بیرهێنانەوە:''' بۆ ئەم بۆچوونەت سەردێڕ\\بابەت ڕاچاو نەکردووە. +ئەگەر دیسان «{{int:savearticle}}» لێبدەی، دەستکاریەکەت بێ سەردێڕ یان بابەت پاشەکەوت دەبێ.", 'summary-preview' => 'پێشبینینی کورتە:', 'subject-preview' => 'پێشبینینی بابەت\\سەردێڕ :', 'blockedtitle' => 'به‌کار هینه‌ر له‌کار خراوه', @@ -633,6 +758,12 @@ $2', '''هێشتا پاشه‌که‌وت نه‌بووه !'''", 'userjspreview' => "'''لەیادت بێ کە ئێستە تەنها پێشبینین\\تاقی‌کردنەوەی جاڤاسکریپتی بەکارهێنەریەکەت دەکەی.''' '''هێشتا پاشەکەوت نەبووه !'''", +'sitecsspreview' => "'''له‌یادت بێ که‌ ئێسته‌ ته‌نها پێشبینینی ئەم CSS ده‌که‌ی.''' +'''هێشتا پاشه‌که‌وت نه‌کراوە !'''", +'sitejspreview' => "'''له‌یادت بێ که‌ ئێسته‌ ته‌نها پێشبینینی ئەم کۆدی جاڤاسکریپتە ده‌که‌ی.''' +'''هێشتا پاشه‌که‌وت نه‌کراوە !'''", +'userinvalidcssjstitle' => "'''ئاگادارکردنەوە:''' پێست نیە بۆ \"\$1\". +لەیادت بێ کە لاپەڕەکانی‌ .css و .js لە بابەت بە پیتی بچووک کەڵک وەر ئەگرن. وەک {{ns:user}}:Foo/vector.css نە وەک {{ns:user}}:Foo/Vector.css .", 'updated' => '(نوێ‌کراوە)', 'note' => "'''تێبینی:'''", 'previewnote' => "'''لە بیرت بێت کە ئەمە تەنھا پێشبینینە.''' @@ -674,9 +805,6 @@ $2', ئەگەر ناتەوێ نووسراوەکانت بێبەزەیی دەستکاری بکرێن، ھەر مەینێرە بۆ ئێرە.
    ھەروەھا تۆ بەڵێنمان پێدەدەی کە خۆت ئەمەت نووسیوە یان لە پاوانێکی گشتی (public domain) یان سەرچاوە ئازادەکانی وەک ئەو وەرتگرتووە (سەیری $1 بکە بۆ وردەکاریەکان). '''ئەو کارانە کە مافی لەبەرگرتنەوەیان پارێزراوەکان بە بێ وەرگرتنی ئیجازە مەنێرە!'''", -'longpagewarning' => "'''ئاگاداری:''' درێژاییی ئەم پەڕە $1 کیلوبایتە؛ -بڕێ لە وێبگەڕەکان لەگەڵ دەستکاری کردنی ئەو پەڕانە کە نزیک یان درێژتر لە ٣٢ کیلوبایتن کێشەیان ھەیە. -تکایە لەت کردنی ئەم پەڕە بۆ چەند بەشی چکۆلەترتان لەبەرچاو بێت.", 'longpageerror' => "'''هەڵە: ئەو دەقی ناردووتە $1 کیلوبایت درێژەی هەیە، کە لە زۆرینەی $2 کیلۆبایت درێژترە.'''
    پاشەکەوت ناکرێت.", 'readonlywarning' => "'''ئاگاداری: بنکەدراوە بۆ چاکردنەوە داخراوە، بۆیە ئێستا ناتوانی دەستکاریەکانت پاشەکەوت بکەیت.'''
    @@ -842,6 +970,8 @@ $1", 'logdelete-failure' => "'''بیندرانی لۆگ داناندرێت:''' $1", 'revdel-restore' => 'چۆنیەتی دەرکەوتن بگۆڕە', +'revdel-restore-deleted' => 'پێداچوونەوە سڕاوەکان', +'revdel-restore-visible' => 'پێداچوونەوە دەرکەوتووەکان', 'pagehist' => 'مێژووی پەڕە', 'deletedhist' => 'مێژوو بسڕەوە', 'revdelete-content' => 'ناوەڕۆک', @@ -906,10 +1036,12 @@ $1", # Diffs 'history-title' => 'مێژووی پیاچوونەوەکانی «$1»', 'difference' => '(جیاوازی نێوان پیاچوونەوەکان)', +'difference-multipage' => '(جیاوازی نێوان پەڕەکان)', 'lineno' => 'ھێڵی $1:', 'compareselectedversions' => 'پیاچوونەوە ھەڵبژێردراوەکان ھەڵسەنگێنە', 'showhideselectedversions' => 'پیاچوونەوە ھەڵبژێردراوەکان نیشانبدە/بشارەوە', 'editundo' => 'پووچەڵ‌کردنەوە', +'diff-multi' => '({{PLURAL:$1|پیاچوونەوەیەکی نێوانی|$1 پیاچوونەوەی نێوانی}}ی {{PLURAL:$2|بەکارھێنەرێک|$2 بەکارھێنەر}} نیشان نەدراوە)', # Search results 'searchresults' => 'ئەنجامەکانی گەڕان', @@ -1093,7 +1225,7 @@ $1", 'prefs-advancedrendering' => 'هەڵبژاردە پێشکەوتووەکان', 'prefs-advancedsearchoptions' => 'هەڵبژاردە پێشکەوتووەکان', 'prefs-advancedwatchlist' => 'هەڵبژاردە پێشکەوتووەکان', -'prefs-display' => 'ھەڵبژاردەکان نیشانبدە', +'prefs-displayrc' => 'هەڵبژاردەکانی نیشان‌دان', 'prefs-diffs' => 'جیاوازییەکان', # User rights @@ -1199,7 +1331,6 @@ $1", 'right-siteadmin' => 'داخستن و کردنەوەی بنکەدراو', 'right-reset-passwords' => 'ڕیکخستنەوەی تێپەڕوشەی بەکارهێنەرانی دیکە', 'right-override-export-depth' => 'هەناردنی لاپەڕەکان کە لاپەڕەکانی بەستەر پێ‌دراو تا قووڵایی 5 لەخۆ بگرێت', -'right-versiondetail' => 'نیشان‌دانی زانیاریەکانی وەشانی بڵاوەی نەرم‌ئامێر', # User rights log 'rightslog' => 'لۆگی مافەکانی بەکارھێنەر', @@ -1249,14 +1380,9 @@ $1", 'recentchanges-legend' => 'ھەڵبژاردەکانی دوایین گۆڕانکارییەکان', 'recentchangestext' => 'دواکەوتنی دوایین گۆڕانکارییەکان لەسەر ویکی لەم لاپەڕەدا.', 'recentchanges-feed-description' => 'دوای دوایین گۆڕانکارییەکانی ئەم ویکیە بکەوە لەم «فید»ەوە.', -'recentchanges-label-legend' => 'پێرست: $1.', -'recentchanges-legend-newpage' => '$1 - لاپەڕەی نوێ', 'recentchanges-label-newpage' => 'ئەم دەستکاریە لاپەڕەیەکی نوێی درووست‌کرد', -'recentchanges-legend-minor' => '$1 - دەستکاریی بچووک', 'recentchanges-label-minor' => 'ئەمە دەستکاریەکی بچووکە', -'recentchanges-legend-bot' => '$1 - دەستکاریی بۆت', 'recentchanges-label-bot' => 'ئەم دەستکاریە لە لایەن بۆتەوە پێک هاتووە', -'recentchanges-legend-unpatrolled' => '$1 - دەستکاری چاودێری‌نەکراو', 'recentchanges-label-unpatrolled' => 'ئەم دەستکاریە هێشتا نەڕۆشتەتە ژێر چاودێری', 'rcnote' => "لە خوارەوەدا {{PLURAL:$1|'''۱''' گۆڕانکاری |دوایین '''$1''' گۆڕانکارییەکان}} لە دوایین {{PLURAL:$2|ڕۆژ|'''$2''' ڕۆژەوە}} ، تا $5، $4 دەبینن.", 'rcnotefrom' => "ئەوی‌ خوارەوە گۆڕانکارییەکانە لە '''$2'''ەوە (ھەتا '''$1''' نیشاندراو).", @@ -1303,6 +1429,9 @@ $1", 'upload_directory_missing' => 'لقی بارکردن ($1) ون بووە و ڕاژەکاری‌وێب بۆی درووست ناکرێت.', 'upload_directory_read_only' => 'ڕاژەکاری‌وێب دەسەڵاتی نووسینی سەر لقی بارکردنی ($1) نیە.', 'uploaderror' => 'ھەڵە لە بارکردن دا', +'upload-recreate-warning' => "'''ھۆشیار بە: پەرگەیەک بەو ناوەوە سڕاوەتەوە یان گوێزاوەتەوە.''' + +لۆگی سڕینەوە یان گواستنەوەی ئەم پەڕە لێرە لەبەردەستدایە:", 'uploadtext' => "فۆرمی خوارەوە بەکاربێنە بۆ بارکردنی پەڕگەکان. بۆ بینینی و گەڕان لەو پەڕگانەی پێشتر بار کراون، بڕۆ بۆ [[Special:FileList|لیستی پەڕگە بارکراوەکان]]، ھەروەھا [[Special:Log/upload|ڕەشنووسی بارکردنەکان]] و [[Special:Log/delete|ڕەشنووسی سڕینەوەکان]]. @@ -1337,6 +1466,10 @@ $1", 'filetype-banned-type' => "'''\".\$1\"''' جۆرە پەڕگەی ڕێگە پێ‌نەدراوە‌. \$2، ئەو جۆرە {{PLURAL:\$3|پەڕگەیە|پەڕگانەیە}} وا ڕێگە دراوە.", 'filetype-missing' => 'پەڕگەکە پاشگری نییە (وەک ".jpg").', +'empty-file' => 'ئەو پەڕگەیە کە ناردووتە ڤاڵا بوو.', +'file-too-large' => 'ئەو پەڕگەیە ناردووتە زۆر گەورەیە.', +'filename-tooshort' => 'ناوی پەڕگە زۆر کورتە.', +'filetype-banned' => 'ئەم جۆرە پەڕگەیە قەدەغەیە.', 'large-file' => 'پێشنیار دەکرێت قەبارەی پەڕگەکان زیاتر لە $1 نەبێت؛ قەبارەی ئەم پەڕگە $2.', 'largefileserver' => 'ئەم پەڕگە گەورەتر لەوەیە کە ڕاژەکار ڕێگەدەدات.', @@ -1393,6 +1526,12 @@ $1", لۆگی سڕینەوەی ئەم پەڕگە بۆ ئاسوودەیی لێرە دانراوە:", 'filename-bad-prefix' => "دەستپێکی ناوی ئەو پەڕگەی باری دەکەی '''\"\$1\"'''، کە ناوێکی ناسێنەر نیە؛ ئەو جۆرە ناوە زۆربەی کات کامێرا دیجیتاڵەکان خۆکار بەکاری‌دەبەن. تکایە ناوێک هەڵبژێرە کە زانیاریی زیاتر بدات سەبارەت بە پەڕگەکەت.", +'upload-success-subj' => 'بارکردنی سەرکەوتوو', +'upload-success-msg' => 'بارکردنی [$2] سەرکەوتووانە جێبەجێکرا. لێرە لەبەردەستدایە: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'کێشەی بارکردن', +'upload-failure-msg' => 'کێشەیەک لەگەڵ بارکردنی [$2]دا ھەبوو: + +$1', 'upload-proto-error' => 'پرۆتۆکۆڵی هەڵە', 'upload-proto-error-text' => 'بۆ بارکردن لە تۆڕ، URL دەبێ بە http:// یان ftp:// دەست‌پێ‌بکات.', @@ -1435,6 +1574,7 @@ $1", 'listfiles_search_for' => 'بگەڕێ بۆ ناوی میدیای:', 'imgfile' => 'پەڕگە', 'listfiles' => 'لیستی پەرگەکان', +'listfiles_thumb' => 'وێنۆک', 'listfiles_date' => 'ڕێکەوت', 'listfiles_name' => 'ناو', 'listfiles_user' => 'بەکارھێنەر', @@ -1551,7 +1691,6 @@ $1", 'statistics-edits-average' => 'نێونجی ژمارەی دەستکارییەکان لە پەڕەیەک دا', 'statistics-views-total' => 'دیتنی هەموو', 'statistics-views-peredit' => 'دیتنی هەر دەستکارییەک', -'statistics-jobqueue' => 'درێژی [http://www.mediawiki.org/wiki/Manual:Job_queue ڕیزی کار]', 'statistics-users' => '[[Special:ListUsers|بەکارھێنەر]]ە تۆمارکراوەکان', 'statistics-users-active' => 'ئەندامە چالاکەکان', 'statistics-users-active-desc' => 'ئەو بەکارھێنەرانە کە لە {{PLURAL:$1|ڕۆژ|$1 ڕۆژ}}ی ڕابردوودا کارێکیان جێبەجێ کردبێت.', @@ -1564,6 +1703,9 @@ $1", ئەگەر پەڕەیەک لە داڕێژەیەک کەڵک وەرگرێت کە بەستەری ھەیە بۆ [[MediaWiki:Disambiguationspage]]، وەک پەڕەی ڕوونکردنەوە مامەڵەی لەگەڵدا دەکرێ.", 'doubleredirects' => 'دووجار ڕەوانەکراوەکان', +'doubleredirectstext' => 'ئەم پەڕە لیستی ئەو پەڕانەیە کە ڕەوانەکراون بۆ پەڕەیەکی ڕەوانەکراوی دیکە. +هەر ڕیزێک، بەستەرەکانی یەکەم و دووەم ڕەوانەکراو و ھەروەھا ئامانجی ڕەوانەکراوی دووەم کە زۆربەی کات مەبەستی «ڕاستی»یە کە ڕەوانەکراوی یەکەمیش دەبێ بۆ ئەوێ ڕەوانە بکاتی لەخۆگرتووە. +دراوە هێڵ بەسەردا کێشراوەکان چارەسەر کراون.', 'double-redirect-fixed-move' => '[[$1]] گوێسترایەوە. ئێستا ڕەوانکەرە بۆ [[$2]].', 'double-redirect-fixer' => 'چارەسەرکەری ڕەوانکەر', @@ -1768,7 +1910,6 @@ $1", # Watchlist 'watchlist' => 'لیستی چاودێرییەکانم', 'mywatchlist' => 'لیستی چاودێرییەکانم', -'watchlistfor' => "(بۆ '''$1''')", 'nowatchlist' => 'لە لیستی چاودێڕییەکانتدا ھیچ نیە.', 'watchlistanontext' => 'تکایە بۆ دیتن و دەستکاری بابەتەکانی لە ناو لیستی چاودێریەکەت‌دا $1.', 'watchnologin' => 'لە ژوورەوە نیت.', @@ -1887,7 +2028,9 @@ $UNWATCHURL 'revertpage' => 'گەڕاندنەوەی دەستکارییەکان لەلایەن [[Special:Contributions/$2|$2]] ([[User talk:$2|لێدوان]]) بۆ دوایین دەستکاریی [[User:$1|$1]]', 'rollback-success' => 'دەستکارییەکانی $1 وەرگێرایەوە؛
    گۆڕدرا بۆ دوایین دەستکاریی $2.', -'sessionfailure' => 'لەوەدەچی کێشەیەک لە دانیشتنی چوونەژوورەوەت (login session)دا ببێت. + +# Edit tokens +'sessionfailure' => 'لەوەدەچی کێشەیەک لە دانیشتنی چوونەژوورەوەت (login session)دا ببێت. ئەم کردەوە هەڵوەشێندرایەوە بۆ بەرگری لە دزینی دراوەکانی دانیشتن. تکایە بگەڕێوە بۆ پەڕەی پێشوو و نوێی بکەوە، ئینجا دیسان تاقیی بکەوە.', @@ -2025,11 +2168,13 @@ $1', 'sp-contributions-newbies-title' => 'هاوبەشیەکانی بەکارهێنەر بۆ هەژمارە نوێکان', 'sp-contributions-blocklog' => 'لۆگی بەربەستن', 'sp-contributions-deleted' => 'بەشدارییە سڕاوەکان', +'sp-contributions-uploads' => 'بارکردنەکان', 'sp-contributions-logs' => 'تۆمارەکان', 'sp-contributions-talk' => 'لێدوان', 'sp-contributions-userrights' => 'بەڕێوبەرایەتی مافەکانی بەکارهێنەر', 'sp-contributions-search' => 'گەڕین بۆ بەشدارییەکان', 'sp-contributions-username' => 'ناونیشانی ئای‌پی یان ناوی‌ بەکارھێنەری:', +'sp-contributions-toponly' => 'تەنیا ئەو دەستکارییانە نیشانبدە کە دوایین پیاچوونەوەن', 'sp-contributions-submit' => 'بگەڕێ', # What links here @@ -2090,7 +2235,6 @@ $1', 'ipb-edit-dropdown' => 'دەستکاری هۆکارەکانی بەربەست', 'ipb-unblock-addr' => 'لە بەربەست‌دەرهێنانی $1', 'ipb-unblock' => 'لە بەربەست‌دەرهێنانی ناوی بەکارهێنەریەک یا ناونیشانێکی ئای‌پی', -'ipb-blocklist-addr' => 'ئەو بەربەستانەی بۆ $1 هەیە', 'ipb-blocklist' => 'دیتنی ئەو بەربەستانەی وا هەیە', 'ipb-blocklist-contribs' => 'هاوبەشیەکان بۆ $1', 'unblockip' => 'لە بەربەست‌دەرهێنانی بەکارهێنەر', @@ -2192,6 +2336,17 @@ $1', دەبێت بزانی کە پەڕەکە '''ناگوازرێتەوە''' ئەگەر پێشتر پەڕەیەک بە ناوە نوێکەوە ھەبێت، مەگەر ئەوەی کە پەڕەکە واڵا یان ڕەوانەکراوەیەک بێت و ھیچ مێژووی گۆڕاندنی پێشووی نەبێت. ئەمە بەو واتایە کە ئەگەر ھەڵەیەک بکەی دەتوانی ناوی پەڕەکە دیسانەوە بگۆڕی بۆ ناوی پێشووی، و ناتوانی بیخەیتە جێگەی پەڕەیەک کە ھەنووکە ھەیە. +'''ھۆشیار بە!''' +ئەمە دەتوانێت گۆڕانێکی زۆر نابەجێ و چاوەڕێنەکراو بێت بۆ پەڕەیەکی بەناوبانگ؛ +تکایە پێش گۆڕینی ناو باش بیر لە ئاکامەکەی بکەوە.", +'movepagetext-noredirectfixer' => "بەکارھێنانی ئەم فۆرمەی خوارەوە ناوی پەڕەیەک دەگۆڕێت، بە گواستنەوەی ھەموو مێژووەکەی بۆ ناوی نوێ. +ناوە کۆنەکە دەبێتە پەڕەیەکی ڕەوانەکردنەوە بۆ ناوە نوێکە. +دڵنیا بە کە [[Special:DoubleRedirects|دووجار ڕەوانەکراوەکان]] یان [[Special:BrokenRedirects|ڕەوانەکراوە شکاوەکان]] تاقی بکەیتەوە. +تۆ بەرپرسیاری لەوەی کە دڵنیا ببیتەوە بەستەرەکان ھەر پێوەندییان ھەیە بەو شوێنە کە چاوەڕوان دەکرێت. + +دەبێت بزانی کە پەڕەکە '''ناگوازرێتەوە''' ئەگەر پێشتر پەڕەیەک بە ناوە نوێکەوە ھەبێت، مەگەر ئەوەی کە پەڕەکە واڵا یان ڕەوانەکراوەیەک بێت و ھیچ مێژووی گۆڕاندنی پێشووی نەبێت. +ئەمە بەو واتایە کە ئەگەر ھەڵەیەک بکەی دەتوانی ناوی پەڕەکە دیسانەوە بگۆڕی بۆ ناوی پێشووی، و ناتوانی بیخەیتە جێگەی پەڕەیەک کە ھەنووکە ھەیە. + '''ھۆشیار بە!''' ئەمە دەتوانێت گۆڕانێکی زۆر نابەجێ و چاوەڕێنەکراو بێت بۆ پەڕەیەکی بەناوبانگ؛ تکایە پێش گۆڕینی ناو باش بیر لە ئاکامەکەی بکەوە.", @@ -2504,7 +2659,10 @@ $1', # Media information 'thumbsize' => 'قەبارەی وێنۆک:', +'file-info' => 'قه‌باره‌: $1, جۆر: $2', +'file-info-size' => '$1 × $2 پیکسێل، قەبارەی پەڕگە: $3، جۆری MIME: $4', 'file-nohires' => 'رەزۆلوشنی سەرتر لەمە لە بەردەست دا نیە.', +'svg-long-desc' => 'پەڕگەی SVG، بە ناو $1 × $2 پیکسەڵ، قەبارەی پەڕگە: $3', 'show-big-image' => 'گەورە کردنەوە', 'show-big-image-thumb' => 'قەبارەی ئەم پێشبینینە: $1 × $2 خاڵە', @@ -2689,30 +2847,30 @@ $1', 'limitall' => 'ھەموو', # E-mail address confirmation -'confirmemail' => 'بڕواپێکردنی ناونیشانی ئیمەیل', -'confirmemail_noemail' => 'لە [[Special:Preferences|هەڵبژاردەکانی بەکارهێنەر]] ناونیشانی ئی‌مەیلی گونجاوت دیاری نەکردووە.', -'confirmemail_text' => '{{SITENAME}} بە پێویستی دەزانێ پێش کەڵک وەرگرتن لە تایبەتمەندیەکانی ئی‌مەیل، ناونیشانی ئی‌مەیلی خۆت ڕاچاو بکەیت. +'confirmemail' => 'بڕواپێکردنی ناونیشانی ئیمەیل', +'confirmemail_noemail' => 'لە [[Special:Preferences|هەڵبژاردەکانی بەکارهێنەر]] ناونیشانی ئی‌مەیلی گونجاوت دیاری نەکردووە.', +'confirmemail_text' => '{{SITENAME}} بە پێویستی دەزانێ پێش کەڵک وەرگرتن لە تایبەتمەندیەکانی ئی‌مەیل، ناونیشانی ئی‌مەیلی خۆت ڕاچاو بکەیت. ئەو دوکمەی خوارەوە چالاک بکە تاکوو ئی‌مەیلێکی بڕوا پێ‌کردن بنێردرێت بۆ ناونیشانی ئی‌مەیلەکەت. ئەو ئی‌مەیلە بەستەرەکی تێدایە؛ لە وێبگەڕەکەت ئەو بەستەرە ببینە تاکوو ناونیشانی ئی‌مەیلەکەت بڕوادار بێت.', -'confirmemail_pending' => 'کۆدی بڕواپێ‌کردن لە پێش‌دا ئی‌مەیل کراوە بۆت. +'confirmemail_pending' => 'کۆدی بڕواپێ‌کردن لە پێش‌دا ئی‌مەیل کراوە بۆت. ئەگەر بە تازەیی هەژمارەت درووست‌کردووە، لەوانەیە باشتربێت چەن خۆلکێک بوەستی بۆ گەیشتنی ئەو ئەمەیلی، پێش دیسان داواکردنەوەی کۆدی نوێ.', -'confirmemail_send' => 'ئی‌مەیل‌کردنی کۆدی بڕواپێ‌کردن', -'confirmemail_sent' => 'ئی‌مەیلی بڕواپێ‌کردن ناردرا.', -'confirmemail_oncreate' => 'کۆدی بڕواپێ‌کردنی ناردرا بۆ ناونیشانی ئی‌مەیلت. +'confirmemail_send' => 'ئی‌مەیل‌کردنی کۆدی بڕواپێ‌کردن', +'confirmemail_sent' => 'ئی‌مەیلی بڕواپێ‌کردن ناردرا.', +'confirmemail_oncreate' => 'کۆدی بڕواپێ‌کردنی ناردرا بۆ ناونیشانی ئی‌مەیلت. پێویست نیە بڕۆیتە ژوورەوە، تەنها پێویستە پێش کەڵک وەرگرتن لە تایبەتمەندیەکان ئی‌مەیلیی ویکی ئەوە جێبەجێ بکەیت.', -'confirmemail_sendfailed' => '{{SITENAME}} ناتوانێ ئی‌مەیلی برواکردن بنێرێت بۆ تۆ. +'confirmemail_sendfailed' => '{{SITENAME}} ناتوانێ ئی‌مەیلی برواکردن بنێرێت بۆ تۆ. تکایە ئەرخەیان بە هەموو پیتەکانی ناونیشانەکەت گونجاوە. مەیلکەر ئەوەی گەڕاندەوە: $1', -'confirmemail_invalid' => 'کۆدی بڕواپێ‌کردنی نەگونجاو. +'confirmemail_invalid' => 'کۆدی بڕواپێ‌کردنی نەگونجاو. لەوانەیە ئەو کۆدە ماوەی بەسەر چووبێت.', -'confirmemail_needlogin' => 'بۆ بڕواپێ‌کردنی ناونیشانی ئی‌مەیلەکەت، دەبێ $1.', -'confirmemail_success' => 'ناونیشانی ئی‌میلەکەت بڕوای‌پێ‌کرا. +'confirmemail_needlogin' => 'بۆ بڕواپێ‌کردنی ناونیشانی ئی‌مەیلەکەت، دەبێ $1.', +'confirmemail_success' => 'ناونیشانی ئی‌میلەکەت بڕوای‌پێ‌کرا. ئێستە دەتوانی [[Special:UserLogin|بڕۆیتە ژوورەوە]] و لە ویکی کەڵک بگری.', -'confirmemail_loggedin' => 'ئێستا بڕواکراوە بە ئیمەیلەکەت.', -'confirmemail_error' => 'کێشەیەک هەیە لە پاشەکەوت‌کردنی بڕواپێ‌کردنی تۆدا.', -'confirmemail_subject' => 'بڕوا پێ‌کردنی ناونیشانی ئی‌مەیلی {{SITENAME}}', -'confirmemail_body' => 'کەسێک، لەوانەیە خۆت، لە ناونیشانی ئای‌پی $1، +'confirmemail_loggedin' => 'ئێستا بڕواکراوە بە ئیمەیلەکەت.', +'confirmemail_error' => 'کێشەیەک هەیە لە پاشەکەوت‌کردنی بڕواپێ‌کردنی تۆدا.', +'confirmemail_subject' => 'بڕوا پێ‌کردنی ناونیشانی ئی‌مەیلی {{SITENAME}}', +'confirmemail_body' => 'کەسێک، لەوانەیە خۆت، لە ناونیشانی ئای‌پی $1، لە {{SITENAME}} بەم ناونیشانی ئی‌مەیلە، هەژمارەیەکی تۆمارکردووە "$2" . بۆ ئەوەی بڕا بکرێت کە ئەم هەژمارە لە ڕاستیدا بۆتۆیە و بۆ چالاک‌کردنی تایبەتمەندیەکانی ئی‌مەیل لە {{SITENAME}}دا، ئەو بەستەرەی خوارەوە لە وێبگەڕەکەت‌دا بکەوە: @@ -2724,8 +2882,32 @@ $3 $5 ئەم کۆدی بڕواپێ‌کردنە لە $4 ماوەی بەسەردێت.', -'confirmemail_invalidated' => 'بڕواپی‌کردنی ناونیشانی ئی‌مەیل هەڵوەشێندراوە', -'invalidateemail' => 'هەڵوەشاندنەوەی بڕواپێ‌کردنی ئی‌مەیل', +'confirmemail_body_changed' => 'کەسێک، لەوانەیە خۆت، لە ئای‌پی ئەدرەسی $1، +ئەدرەسی ئەیمەیلی ھەژماری «$2» لە {{SITENAME}}دا گۆڕاوە بۆ ئەم ئەدرەسە. + +بۆ ئەوەی بڕوا بکرێت کە ئەم ھەژمارە لە ڕاستیدا بۆتۆیە و بۆ چالاککردنەوەی تایبەتمەندیەکانی ئیمەیل لە {{SITENAME}}دا، ئەم بەستەرەی خوارەوە لە وێبگەڕەکەتدا بکەوە: + +$3 + +ئەگەر ھەژمارە ھی تۆ *نییە*، بۆ هەڵوەشاندنەوەی بڕوا‌پێکردنی ئەدرەسی ئیمەیل بەدوای ئەم بەستەرە بکەوە: + +$5 + +ئەم کۆدی بڕواپێکردنە لە $4 ماوەی بەسەردێت.', +'confirmemail_body_set' => 'کەسێک، لەوانەیە خۆت، لە ئای‌پی ئەدرەسی $1، +ئەدرەسی ئەیمەیلی ھەژماری «$2» لە {{SITENAME}}دا کردووە بەم ئەدرەسە. + +بۆ ئەوەی بڕوا بکرێت کە ئەم ھەژمارە لە ڕاستیدا بۆتۆیە و بۆ چالاککردنەوەی تایبەتمەندیەکانی ئیمەیل لە {{SITENAME}}دا، ئەم بەستەرەی خوارەوە لە وێبگەڕەکەتدا بکەوە: + +$3 + +ئەگەر ھەژمارە ھی تۆ *نییە*، بۆ هەڵوەشاندنەوەی بڕوا‌پێکردنی ئەدرەسی ئیمەیل بەدوای ئەم بەستەرە بکەوە: + +$5 + +ئەم کۆدی بڕواپێکردنە لە $4 ماوەی بەسەردێت.', +'confirmemail_invalidated' => 'بڕواپی‌کردنی ناونیشانی ئی‌مەیل هەڵوەشێندراوە', +'invalidateemail' => 'هەڵوەشاندنەوەی بڕواپێ‌کردنی ئی‌مەیل', # Scary transclusion 'scarytranscludetoolong' => '[URL زۆر درێژە]', @@ -2840,6 +3022,7 @@ $5 'version-specialpages' => 'پەڕە تایبەتەکان', 'version-parserhooks' => 'قولاپە لێککەرەکان', 'version-variables' => 'گۆڕاوەکان', +'version-skins' => 'پێستەکان', 'version-other' => 'ھی دیکە', 'version-mediahandlers' => 'بایەخ‌دەرانی مێدیا', 'version-hooks' => 'قولاپەکان', @@ -2911,6 +3094,15 @@ $5 'tags-edit' => 'دەستکاری', 'tags-hitcount' => '$1 {{PLURAL:$1|گۆڕان|گۆڕانکاری}}', +# Special:ComparePages +'comparepages' => 'پەڕەکان ھەڵسەنگێنە', +'compare-selector' => 'پیاچوونەوەکانی پەڕە ھەڵسەنگێنە', +'compare-page1' => 'پەڕەی ١', +'compare-page2' => 'پەڕەی ٢', +'compare-rev1' => 'پێداچوونەوەی ١', +'compare-rev2' => 'پێداچوونەوەی ٢', +'compare-submit' => 'ھەڵسەنگاندن', + # Database error messages 'dberr-header' => 'ئەم ویکی‌یە کێشەی هەیە', 'dberr-problems' => 'ببورە! ئەم ماڵپەڕە ئێستا خەریک ئەزموونێکی کێشەی تەکنیکیە.', diff --git a/languages/messages/MessagesCkb_arab.php b/languages/messages/MessagesCkb_arab.php deleted file mode 100644 index f53591a0..00000000 --- a/languages/messages/MessagesCkb_arab.php +++ /dev/null @@ -1,2997 +0,0 @@ - 2, - # Underlines seriously harm legibility. Force off: - 'underline' => 0, -); - -$digitTransformTable = array( - '0' => '٠', # ٠ - '1' => '١', # ١ - '2' => '٢', # ٢ - '3' => '٣', # ٣ - '4' => '٤', # ٤ - '5' => '٥', # ٥ - '6' => '٦', # ٦ - '7' => '٧', # ٧ - '8' => '٨', # ٨ - '9' => '٩', # ٩ - '.' => '٫', # ٫ wrong table ? - ',' => '٬', # ٬ -); - -$namespaceNames = array( - NS_MEDIA => 'میدیا', - NS_SPECIAL => 'تایبەت', - NS_MAIN => '', - NS_TALK => 'لێدوان', - NS_USER => 'بەکارھێنەر', - NS_USER_TALK => 'لێدوانی_بەکارھێنەر', - NS_PROJECT_TALK => 'لێدوانی_$1', - NS_FILE => 'پەڕگە', - NS_FILE_TALK => 'لێدوانی_پەڕگە', - NS_MEDIAWIKI_TALK => 'لێدوانی_میدیاویکی', - NS_TEMPLATE => 'داڕێژە', - NS_TEMPLATE_TALK => 'لێدوانی_داڕێژە', - NS_HELP => 'یارمەتی', - NS_HELP_TALK => 'لێدوانی_یارمەتی', - NS_CATEGORY => 'پۆل', - NS_CATEGORY_TALK => 'لێدوانی_پۆل', -); - -$namespaceAliases = array( - 'قسەی_بەکارھێنەر' => NS_USER_TALK, - 'قاڵب' => NS_TEMPLATE, - 'لێدوانی_قاڵب' => NS_TEMPLATE_TALK, -); - -$specialPageAliases = array( - 'CreateAccount' => array( 'ھەژماردروستکردن' ), - 'Preferences' => array( 'ھەڵبژاردەکان' ), - 'Recentchanges' => array( 'دوایین‌گۆڕانکارییەکان' ), - 'Upload' => array( 'بارکردن' ), - 'Listfiles' => array( 'لیستی‌پەڕگەکان' ), - 'Newimages' => array( 'پەڕگەنوێکان' ), - 'Listusers' => array( 'لیستی‌بەکارھێنەران' ), - 'Statistics' => array( 'ئامارەکان' ), - 'Randompage' => array( 'بەھەڵکەوت' ), - 'Shortpages' => array( 'پەڕە‌کورتەکان' ), - 'Newpages' => array( 'پەڕەنوێکان' ), - 'Ancientpages' => array( 'پەڕەکۆنەکان' ), - 'Protectedpages' => array( 'پەڕەپارێزراوەکان' ), - 'Allpages' => array( 'ھەمووپەڕەکان' ), - 'Specialpages' => array( 'پەڕەتایبەتەکان' ), - 'Contributions' => array( 'بەشدارییەکان' ), - 'Movepage' => array( 'پەڕەگواستنەوە' ), - 'Categories' => array( 'پۆلەکان' ), - 'Export' => array( 'ھەناردن' ), - 'Version' => array( 'وەشان' ), - 'Allmessages' => array( 'ھەمووپەیامەکان' ), - 'Log' => array( 'لۆگ' ), - 'Mypage' => array( 'پەڕەکەم' ), - 'Mycontributions' => array( 'بەشدارییەکانم' ), - 'Listadmins' => array( 'لیستی‌بەڕێوبەران' ), - 'Search' => array( 'گەڕان' ), - 'Resetpass' => array( 'تێپەڕوشەگۆڕان' ), - 'Activeusers' => array( 'بەکارھێنەرەچالاکەکان' ), -); - -$magicWords = array( - 'img_thumbnail' => array( '1', 'وێنۆک', 'thumbnail', 'thumb' ), - 'img_right' => array( '1', 'ڕاست', 'right' ), - 'img_left' => array( '1', 'چەپ', 'left' ), - 'img_width' => array( '1', '$1پیکسڵ', '$1px' ), - 'img_center' => array( '1', 'ناوەڕاست', 'center', 'centre' ), - 'img_framed' => array( '1', 'چوارچێوە', 'framed', 'enframed', 'frame' ), - 'img_frameless' => array( '1', 'بێچوارچێوە', 'frameless' ), - 'img_border' => array( '1', 'سنوور', 'border' ), -); - -$messages = array( -# User preference toggles -'tog-underline' => 'ھێڵ ھێنان بەژێر بەستەرەکان:', -'tog-highlightbroken' => 'بەستەرە شکاوەکان بەم جۆرە بڕازێنەوە (یان: بەەم جۆرە؟)', -'tog-justify' => 'پەرەگرافەکان پڕاوپر نیشان بدە', -'tog-hideminor' => 'دەستکارییە بچوکەکان بشارەوە لە دوا گۆڕانکارییەکاندا', -'tog-hidepatrolled' => 'لە دوایین گۆڕانکاریەکان، دەستکاریە پارێزراوەکان داشارە', -'tog-newpageshidepatrolled' => 'لە لیستی لاپەڕە نوێکان، لاپەڕە پارێزراوەکان داشارە', -'tog-extendwatchlist' => 'لیستی چاودێری درێژبکەرەوە بۆ نیشان دانی ھەموو گۆڕانکارییەکان، نەک تەنھا دوایینەکان.', -'tog-usenewrc' => 'دوا گۆڕانکارییە پەرە پێدراوەکان بەکار ببە (پێویستی بە جاڤاسکریپتە)', -'tog-numberheadings' => 'ژمارەکردنی خۆکاری سەردێڕەکان', -'tog-showtoolbar' => 'شریتی ئامرازەکانی دەستکاری نیشان بدە (JavaScript پێویستە)', -'tog-editondblclick' => 'دەستکاریی پەڕە بە دووکلیک لەسەر دەق (JavaScript پێویستە)', -'tog-editsection' => 'ڕێگە بدە بۆ دەستکاری کردنی بەشەکان لە ڕێگه‌ی به‌سته‌رەکانی [دەستکاری]', -'tog-editsectiononrightclick' => 'ڕێگە بدە بۆ دەستکاری کردنی بەشەکان لە ڕێگەی کلیکی ڕاست کردن لەسەر سەردێڕی بەشەکان (JavaScript پێویستە)', -'tog-showtoc' => 'پێرستی ناوەڕۆک نیشان بدە (بۆ ئەو پەڕانە کە زیاتر لە ٣ سەردێڕیان تێدایە)', -'tog-rememberpassword' => 'چوونەژوورەوەم بەبیربهێنەوە لەسەر ئەم کۆمپیوتەرە', -'tog-editwidth' => 'چوراچێوە دەستکاری پان کەرەوە تا سەرانسەری شاشەکە پڕ کاتەوە', -'tog-watchcreations' => 'ئەو پەڕانە کە من دروستم کردوون زیاد بکە بە لیستی چاودێڕییەکەم', -'tog-watchdefault' => 'ئەو پەڕانە کە من دەستکاریم کردوون زیاد بکە بە لیستی چاودێڕییەکەم', -'tog-watchmoves' => 'ئەو پەڕانە کە من گواستومنەتەوە زیاد بکە بە لیستی چاودێڕییەکەم', -'tog-watchdeletion' => 'ئەو پەڕانە کە‌ من سڕیومنەتەوە زیاد بکە‌ بە لیستی چاودێڕییەکەم', -'tog-minordefault' => 'ھەموو دەستکارییەکان بە ورد نیشان بکە لە حاڵەتی دیفاڵت', -'tog-previewontop' => 'پێشبینین بەرلە چوارچێوەی دەستکاری نیشان بدە‌', -'tog-previewonfirst' => 'لە یەکەم دەستکاری دا پێشبینین نیشان بدە', -'tog-nocache' => 'کەش کردنی (cach) پەڕەکان لە کار بخە', -'tog-enotifwatchlistpages' => 'ئەگەر پەڕەیەکی لە لیستی چاودێڕییەکانم گۆڕدرا ئیمەیلم بۆ بنێرە', -'tog-enotifusertalkpages' => 'ئەگەر پەڕەی وتووێژەکەم گۆڕدرا ئیمەیلم بۆ بنێرە', -'tog-enotifminoredits' => 'بۆ گۆڕانکارییە بچووکەکانی پەڕەکانیش ئیمەیلم بۆ بنێرە', -'tog-enotifrevealaddr' => 'ئەدرەسی ئیمەیلەکەم لە ئیمەیلە ئاگاداریدەرەکان دا نیشان بدە', -'tog-shownumberswatching' => 'ژمارەی بەکارھێنەرە چاودێڕەکان نیشان بدە', -'tog-oldsig' => 'پێش‌بینینی ئەو واژۆی وا هەیە:', -'tog-fancysig' => 'وەک دەقی ویکی ئیمزا بەرچاو خە (بێ بەستەری خۆکار بۆ پەڕەی بەکارھێنەر)', -'tog-externaleditor' => 'دەستکاریکەری دەرەکی بە کار بێنە لە حاڵەتی دیفاڵتدا (تەنھا بۆ شارەزایان، تەنزیماتی تایبەتی پێویستە لە سەر کۆمپیوتەرەکەت)', -'tog-externaldiff' => 'کەڵک وەرگرتن لە پرۆگرامێکی دەرەکی بۆ دیتنی جیاوازیەکان لە بنەڕەتەوە (تەنها بۆ بەکارهێنانی پێشکەوتوو، پێویستی بە ئامرازی تایبەت لە سەر کۆمپیوتەرت هەیە)', -'tog-showjumplinks' => 'ڕێگە بدە بۆ بەستەرەکانی «{{int:jumpto}}»', -'tog-uselivepreview' => 'لە پێشبینینی زیندوو کەڵک وەرگرە (جاڤاسکریپت پێویستە) (تاقیکاری‌)', -'tog-forceeditsummary' => 'ئەگەر پوختەی دەستکاریم نەنووسی پێم بڵێ', -'tog-watchlisthideown' => 'دەستکارییەکانم بشارەوە لە لیستی چاودێری', -'tog-watchlisthidebots' => 'دەستکارییەکانی بات بشارەوە لە لیستی چاودێری', -'tog-watchlisthideminor' => 'دەستکارییە بچووکەکان لە لیستی چاودێریدا بشارەوە', -'tog-watchlisthideliu' => 'دەستکارییەکانی ئەو بەکارهێنەرانەی لە ژوورەوەن بشارەوە لە لیستی چاودێری', -'tog-watchlisthideanons' => 'دەستکارییەکانی بەکارهێنەرانی نەناسراو بشارەوە لە لیستی چاودێری', -'tog-watchlisthidepatrolled' => 'لە لیستی چاودێریەکان، دەستکاریە پارێزراوەکان داشارە', -'tog-nolangconversion' => 'لەکارخستنی ئاڵوگۆڕەکانی شێوەزار', -'tog-ccmeonemails' => 'کۆپییەکانی ئەو ئیمەیلانە کە بۆ بەکارھێنەرانی ترم ناردووە بۆ خۆشم بنێرە', -'tog-diffonly' => 'ناوەڕۆکی پەڕە لەژێر جیاوازییەکان نیشان مەدە', -'tog-showhiddencats' => 'ھاوپۆلە شاراوەکان نیشان بدە', -'tog-noconvertlink' => 'لەکارخستنی ئاڵوگۆڕی سەرناوی بەستەر', -'tog-norollbackdiff' => 'لە دوای گەڕاندنەوە جیاوازی نیشان مەدە', - -'underline-always' => 'ھەمیشە', -'underline-never' => 'ھەرگیز', -'underline-default' => 'دیفاڵتی وێبگەڕەکە', - -# Font style option in Special:Preferences -'editfont-style' => 'شێوازی جۆرەپیتی بەشی دەستکاری:', -'editfont-default' => 'بنچینەی وێبگەڕ', -'editfont-monospace' => 'جۆرەپیتی تاکەبۆشایی (Monospaced)', -'editfont-sansserif' => 'جۆرەپیتی Sans-serif', -'editfont-serif' => 'جۆرەپیتی Serif', - -# Dates -'sunday' => 'یەکشەممە', -'monday' => 'دووشەممە', -'tuesday' => 'سێشەممە', -'wednesday' => 'چوارشه‌ممه‌', -'thursday' => 'پێنجشه‌ممه‌', -'friday' => 'هه‌ینی', -'saturday' => 'شه‌ممه‌', -'sun' => 'یەکشەممە', -'mon' => 'دووشەممە', -'tue' => 'سێشەممە', -'wed' => 'چوارشەممە', -'thu' => 'پێنجشەممە', -'fri' => 'ھەینی', -'sat' => 'شه‌ممه‌', -'january' => 'کانوونی دووەم', -'february' => 'شوبات', -'march' => 'ئازار', -'april' => 'نیسان', -'may_long' => 'ئایار', -'june' => 'حوزەیران', -'july' => 'تەمموز', -'august' => 'ئاب', -'september' => 'ئەیلوول', -'october' => 'تشرینی یەکەم', -'november' => 'تشرینی دووەم', -'december' => 'کانونی یەکەم', -'january-gen' => 'کانونی دووەمی', -'february-gen' => 'شوباتی', -'march-gen' => 'مارتی', -'april-gen' => 'نیسانی', -'may-gen' => 'مایسی', -'june-gen' => 'حوزەیرانی', -'july-gen' => 'تەمموزی', -'august-gen' => 'ئابی', -'september-gen' => 'ئەیلولی', -'october-gen' => 'تشرینی یەکەمی', -'november-gen' => 'تشرینی دووەمی', -'december-gen' => 'كانونی یەکەمی', -'jan' => 'كا١', -'feb' => 'شوب', -'mar' => 'مارت', -'apr' => 'ئب', -'may' => 'مای', -'jun' => 'حزن', -'jul' => 'ته‌م', -'aug' => 'ئاب', -'sep' => 'ئه‌ی', -'oct' => 'ت١', -'nov' => 'ت٢', -'dec' => 'كا١', - -# Categories related messages -'pagecategories' => '{{PLURAL:$1|ھاوپۆل|ھاوپۆلەکان}}', -'category_header' => 'پەڕە ھاوپۆلەکانی "$1"', -'subcategories' => 'ژێرھاوپۆلەکان', -'category-media-header' => 'میدیا له‌ هاوپۆلی "$1" دا', -'category-empty' => "''ئەم ھاوپۆلە ھەنووکە ھیچ پەڕە یان پەڕگەیەک لە خۆ ناگرێت.‌''", -'hidden-categories' => '{{PLURAL:$1|ھاوپۆلی شاراوە|ھاوپۆلی شاراوە}}', -'hidden-category-category' => 'هاوپۆلە شاردراوەکان', -'category-subcat-count' => '{{PLURAL:$2|ئەم پۆلە تەنھا ژێرپۆلی خوارەوەی تێدایە.| ئەم پۆلە ئەم {{PLURAL:$1|ژێرپۆلەی|$1 ژێرپۆلانەی}} خوارەوەی تێدایە، لە کۆی سەرجەم $2 دانە.}}', -'category-subcat-count-limited' => 'ئەم هاوپۆلە {{PLURAL:$1|ژێرهاوپۆلی}} لەخۆ گرتووە.', -'category-article-count' => '{{PLURAL:$2|ئەم پۆلە تەنھا ئەم پەڕەی لەخۆگرتووە.|{{PLURAL:$1|پەڕە|$1 پەڕە}} لەم پۆلەدا، لە سەرجەم $2 پەڕە.}}', -'category-article-count-limited' => 'ئەم {{PLURAL:$1|لاپەڕە|$1 لاپەڕانە}}، لەم هاوپۆلەدان.', -'category-file-count' => '{{PLURAL:$2|ئەم هاوپۆلە تەنها ئەم پەڕگەی لەخۆ گرتووە.|ئەم‌ {{PLURAL:$1|پەڕگەیە}} کە بەشێکە لە هەموو $2پەڕگەی ئەم هاوپۆلە‌ دەیبینی.}}', -'category-file-count-limited' => 'ئەم {{PLURAL:$1|پەڕگە|پەڕگانە}} لەم هاوپۆلەدایە.', -'listingcontinuesabbrev' => '(درێژە)', - -'mainpagetext' => "'''ویكیمیدیا به‌سه‌ركه‌وتووی دامه‌زرا.'''", -'mainpagedocfooter' => 'بكه‌ [http://meta.wikimedia.org/wiki/Help:ناوه‌ڕۆكی چۆنێتی به‌كارهێنان] بۆ وه‌ده‌ست هێنانی زانیاریی له‌سه‌ر چۆنێتی كارگێڕی نه‌رمه‌كاڵای ویكی، سه‌ردانی. - -== ده‌ست به‌ كاركردن == - -* [http://www.mediawiki.org/wiki/Manual:Configuration_settings لیسته‌ی هه‌ڵبژاردنه‌كان و ڕێكخستنه‌كان] -* [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ] -* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce لیستی وه‌شانه‌كانی ویكیمیدیا]', - -'about' => 'سه‌باره‌ت', -'article' => 'بابەت', -'newwindow' => '(لە پەڕەیەکی نوێ دەکرێتەوە)', -'cancel' => 'ھەڵوەشاندنەوە', -'moredotdotdot' => 'زیاتر', -'mypage' => 'په‌ڕه‌ی من', -'mytalk' => 'لێدوانەکەم', -'anontalk' => 'وتووێژ بۆ ئەم ئای‌پی یە', -'navigation' => 'ڕێدۆزی', -'and' => ' و', - -# Cologne Blue skin -'qbfind' => 'بدۆزەرەوە', -'qbbrowse' => 'بگه‌ڕێ', -'qbedit' => 'دەستکاری', -'qbpageoptions' => 'ئەم پەڕەیە', -'qbpageinfo' => 'زانیاریی په‌ڕه‌', -'qbmyoptions' => 'پەڕەکانم', -'qbspecialpages' => 'پەڕە تایبەتەکان', -'faq' => 'پرسیار و وەڵام (FAQ)', -'faqpage' => 'Project:پرسیار و وەڵام', - -# Vector skin -'vector-action-addsection' => 'زیادکردنی بابەت', -'vector-action-delete' => 'سڕینەوە', -'vector-action-move' => 'گواستنەوە', -'vector-action-protect' => 'پاراستن', -'vector-action-undelete' => 'گەڕاندنەوەی سڕین', -'vector-action-unprotect' => 'نەپاراستن', -'vector-namespace-category' => 'پۆل', -'vector-namespace-help' => 'پەڕەی یارمەتی', -'vector-namespace-image' => 'پەڕگە', -'vector-namespace-main' => 'پەڕە', -'vector-namespace-media' => 'پەڕەی میدیا', -'vector-namespace-mediawiki' => 'پەیام', -'vector-namespace-project' => 'پەڕەی پرۆژە', -'vector-namespace-special' => 'پەڕەی تایبەت', -'vector-namespace-talk' => 'لێدوان', -'vector-namespace-template' => 'قاڵب', -'vector-namespace-user' => 'پەڕەی بەکارھێنەر', -'vector-view-create' => 'دروست‌کردن', -'vector-view-edit' => 'دەستکاری', -'vector-view-history' => 'بینینی مێژوو', -'vector-view-view' => 'خوێندنەوە', -'vector-view-viewsource' => 'بینینی سەرچاوە', -'actions' => 'کردارەکان', -'namespaces' => 'بۆشایی‌ناوەکان', -'variants' => 'شێوەزارەکان', - -'errorpagetitle' => 'ھەڵە', -'returnto' => 'بگەڕێوە بۆ $1.', -'tagline' => 'لە {{SITENAME}}', -'help' => 'یارمەتی', -'search' => 'گەڕان', -'searchbutton' => 'بگەڕێ', -'go' => 'بڕۆ', -'searcharticle' => 'بڕۆ', -'history' => 'مێژووی پەڕە', -'history_short' => 'مێژووی پەڕە', -'updatedmarker' => 'لە دوای دواسەردانم نوێکراوەتەوە', -'info_short' => 'زانیاری', -'printableversion' => 'وەشانی ئامادەی چاپ', -'permalink' => 'بەستەری ھەمیشەیی', -'print' => 'چاپ', -'edit' => 'دەستکاری', -'create' => 'دروستکردن', -'editthispage' => 'دەستکاری ئەم پەڕەیە بکە‌', -'create-this-page' => 'ئەم پەڕە دروست بکە', -'delete' => 'سڕینەوە', -'deletethispage' => 'سڕینه‌وه‌ی ئه‌م په‌ڕه‌یه‌', -'undelete_short' => '{{PLURAL:$1|یەک گۆڕانکاریی|$1 گۆڕانکاریی}} سڕاوە بەجێبھێنەرەوە', -'protect' => 'پاراستن', -'protect_change' => 'گۆڕین', -'protectthispage' => 'ئه‌م په‌ڕه‌یه‌ بپارێزه‌', -'unprotect' => 'مه‌پارێزه‌', -'unprotectthispage' => 'ئه‌م په‌ڕه‌یه‌ مه‌پارێزه‌', -'newpage' => 'پەڕەی نوێ', -'talkpage' => 'باس لەسەر ئەم پەڕە بکە‌', -'talkpagelinktext' => 'لێدوان', -'specialpage' => 'په‌ڕه‌ی تایبه‌ت', -'personaltools' => 'ئامڕازە تاکەکەسییەکان', -'postcomment' => 'بەشی نوێ', -'articlepage' => 'ناوه‌ڕۆكی بابه‌ت ببینه‌', -'talk' => 'لێدوان', -'views' => 'بینینەکان', -'toolbox' => 'ئامرازدان', -'userpage' => 'په‌ڕه‌ی به‌كارهێنه‌ر نیشانبده‌', -'projectpage' => 'په‌ڕه‌ی پرۆژه‌ نیشانبده‌', -'imagepage' => 'پەڕەی پەڕگە نیشان بدە', -'mediawikipage' => 'په‌ڕه‌ی په‌یام نیشانبده‌', -'templatepage' => 'په‌ڕه‌ی قاڵب نیشانبده‌', -'viewhelppage' => 'په‌ڕه‌ی یارمه‌تی نیشانبده‌', -'categorypage' => 'په‌ڕه‌ی هاوپۆل نیشانبده‌', -'viewtalkpage' => 'بینینی لێدوان', -'otherlanguages' => 'بە زمانەکانی تر', -'redirectedfrom' => '(ڕەوانەکراوە لە $1 ەوە)', -'redirectpagesub' => 'پەڕەی ڕەوانەکردن', -'lastmodifiedat' => 'ئەم پەڕەیە دواجار لە $2ی $1 نوێکراوەتەوە.', -'viewcount' => 'ئەم پەڕەیە {{PLURAL:$1|یەکجار|$1 جار}} بینراوە.', -'protectedpage' => 'پەڕەی پارێزراو', -'jumpto' => 'باز بدە بۆ:', -'jumptonavigation' => 'ڕێدۆزی', -'jumptosearch' => 'گەڕان', -'view-pool-error' => 'ببورە، لەم کاتەدا ڕاژەکارەکان زیاباریان لە سەرە.
    -ژمارەیەکی زۆر لە بەکارهێنەران هاوکات هەوڵی دیتنی ئەم لاپەرەیان داوە.
    -تکایە پێش هەوڵی دووبارە بۆ دیتنی ئەم لاپەڕە، نەختێک بوەستە.

    - -$1', - -# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). -'aboutsite' => 'دەربارەی {{SITENAME}}', -'aboutpage' => 'Project:دەربارە', -'copyright' => 'ناوەڕۆک ئامادەیە لە ژێر $1.', -'copyrightpage' => '{{ns:project}}:مافەکانی لەبەرگرتنەوە', -'currentevents' => 'ڕووداوە ھەنووکەییەکان', -'currentevents-url' => 'Project:ڕووداوە بەردەوامەکان', -'disclaimers' => 'نابەرپرسییەکان', -'disclaimerpage' => 'Project:بەرپرس‌نەبوون', -'edithelp' => 'ڕێنمایی بۆ دەستکاریکردن', -'edithelppage' => 'Help:دەستکاریکردن', -'helppage' => 'Help:ناوەڕۆک', -'mainpage' => 'دەستپێک', -'mainpage-description' => 'دەستپێک', -'policy-url' => 'Project: سیاسەت', -'portal' => 'دەروازەی بەکارھێنەران', -'portal-url' => 'Project: دەروازەی بەکارھێنەران', -'privacy' => 'ڕێبازی تایبەتێتی', -'privacypage' => 'Project:پاراستنی زانیارییەکان', - -'badaccess' => 'ھەڵە لە بە دەست ھێنان', -'badaccess-group0' => 'ڕێگەت پێ نەدراوە بۆ بەجێهێنای ئەو ئەنجامە وا داخوازیت کردووه.', -'badaccess-groups' => 'ئەو ئەنجامەی وا داخوازیت کردووه مەحدود کراوە بۆ بەکارهێنەرانی {{PLURAL:$2|دەستەی|یەکێک لە دەستەکانی}}: $1', - -'versionrequired' => 'وەشانی $1ی‌ میدیاویکی پێویستە', -'versionrequiredtext' => 'پێویستیت بە وەشانی $1ی ویکیمیدیا ھەیە بۆ بەکاربردنی ئەم پەڕەیە. -تەماشای [[Special:Version|پەڕەی وەشان]] بکە.', - -'ok' => 'باشه‌', -'retrievedfrom' => 'وەرگیراو لە «$1»', -'youhavenewmessages' => '$1ت ھەیە ($2).', -'newmessageslink' => 'پەیامی نوێ', -'newmessagesdifflink' => 'دوا گۆڕانکارییەکان', -'youhavenewmessagesmulti' => 'لە $1 دا پەیامی نوێت ھەیە', -'editsection' => 'دەستکاری', -'editold' => 'دەستکاری', -'viewsourceold' => 'بینینی سەرچاوە', -'editlink' => 'دەستکاری', -'viewsourcelink' => 'بینینی سەرچاوە', -'editsectionhint' => 'دەستکاری کردنی بەشی: $1', -'toc' => 'ناوەڕۆک', -'showtoc' => 'نیشاندان', -'hidetoc' => 'شاردنەوە', -'thisisdeleted' => 'نیشاندان یا گەڕاندنەوەی $1؟', -'viewdeleted' => '$1 نیشان بده‌؟', -'restorelink' => '{{PLURAL:$1|گۆڕانکاریی سڕاو|$1 یەک گۆڕانکاریی سڕاو}}', -'feedlinks' => 'خۆراک:', -'feed-invalid' => 'ئەندام بوونی ئەو جۆرە خۆراکە نەناسراوە.', -'feed-unavailable' => 'پەیوەندی فییدەکان ئامادەی کەڵک وەرگرتن نیە', -'site-rss-feed' => 'فیدی RSS بۆ $1', -'site-atom-feed' => 'فیدی Atom بۆ $1', -'page-rss-feed' => 'فیدی RSS بۆ «$1»', -'page-atom-feed' => 'Atom Feed ـی "$1"', -'red-link-title' => '$1 (پەڕە بوونی نییە)', - -# Short words for each namespace, by default used in the namespace tab in monobook -'nstab-main' => 'پەڕە', -'nstab-user' => 'پەڕەی بەکارھێنەر', -'nstab-media' => 'میدیا', -'nstab-special' => 'پەڕەی تایبەت', -'nstab-project' => 'پەڕەی پرۆژە', -'nstab-image' => 'پەڕگە', -'nstab-mediawiki' => 'پەیام', -'nstab-template' => 'قاڵب', -'nstab-help' => 'پەڕەی یارمەتی', -'nstab-category' => 'ھاوپۆل', - -# Main script and global functions -'nosuchaction' => 'كرداری به‌م شێوه‌یه‌ نییه‌', -'nosuchactiontext' => 'ئەو چالاکییەی لە لایەن بەستەرەوە دیاریکراوە ناتەواوە. -لەوانەیە بە هەڵە بەستەرەکەت نووسیبێت، یان بەستەرێکی هەڵەی بە دواوە بێت. -لەوانەیە ئەمە نیشانەی هەڵەیەک بێت لەو نەرمەکاڵایەی کە بەکاردێت لە لایەن {{SITENAME}}.', -'nosuchspecialpage' => 'په‌ڕه‌ی تایبه‌تی له‌و شێوه‌یه‌ نییه‌', -'nospecialpagetext' => 'پەڕەیەکی تایبەت دەخوازیت کە بوونی نیە. - -لیستێکی پەڕە تایبەتە دروستەکان لە [[Special:SpecialPages|{{int:specialpages}}]] لە بەردەست‌دایە.', - -# General errors -'error' => 'هه‌ڵه‌', -'databaseerror' => 'هه‌ڵه‌ له‌ بنكه‌دراوه‌دا هه‌یه‌', -'dberrortext' => 'ھەڵەیەکی ڕستەنووسی لە داواکاریی بنکەیدراو ڕووی داوە. -لەوانەیە ئەوە نیشاندەری کەلێنێک لە نەرمامێرەکەدا بێت. -دوایین تێکۆشان بۆ داواکاری بنکەیدراو: -
    $1
    . -لە نێو کرداری "$2". -بنکەیدراو ھەڵەی"$3: $4" گەڕاندووتەوە.', -'dberrortextcl' => 'هەڵەیەکی ڕستەنووسی لە داواکاریی بنکە‌یدراو ڕوویداوە. -دوایین تێکۆشان بۆ داواکاری بنکەیدراو ئەمە بووە: -"$1" -لە نێو کرداری "$2". -بنکەیدراو ھەڵەی "$3: $4" گەڕاندووەتەوە', -'laggedslavemode' => 'ئاگاداری: لەوانەیە لاپەڕەکە نوێکردنەکان لە بەر نەگرێت.', -'readonly' => 'بنکەدراوە داخراوە', -'enterlockreason' => 'هۆیەک بۆ قوفڵ‌کردنەکە بنووسە کە تێیدا کاتی کردنەوەی قۆفڵەکە باس کرابێت', -'readonlytext' => 'بنکەدراوەکە لەم کاتەدا لەبەر چاکسازی ئاسایی بۆ نوسینی نوێ و دەستکاری قوفڵ کراوه. دوای ئەوە ئەگرێتەوە بۆ ئاستی خۆی. - -ئەو بەڕێوبەرەی کە قوفڵی کردووه ئەم ڕوون‌کردنەوەی نووسیوە : $1', -'missing-article' => 'دانەگە (دەیتابەیس) نەیتوانی دەقی پەڕەیەک بدۆزێتەوە کە دەبوا بیدۆزایەتوە، بەناوی "$1" $2 . - -ئەمە کاتێ ڕوو ئەدات کە بەدواچوونی بەستەری پەڕەیکی سڕاوە یان جیاوازیەکانی مێژوو تێپەڕبووی دەکەی. - -ئەگەر وا نەبێت، ئەوا ڕەنگە گرفتێکت لەم نەرمامێرە دا ھەبێت، کە تۆ پێت زانیوە.. -تکایە ئەمە بە یەکێک لە ئەندامانی [[Special:ListUsers/sysop|بەڕێوبەر]] ڕاپۆرت بدە، و ناونیشانی URLـەکەی پێ بدە.', -'missingarticle-rev' => '(پیاچوونەوە#: $1)', -'missingarticle-diff' => '(جیاوازی: $1، $2)', -'readonly_lag' => 'بنكه‌دراوه‌كه‌ به‌شێوه‌ی خۆكار به‌ندكراوه‌، له‌كاتێكدا بنكه‌دراوه‌ی ڕاژه‌كاره‌كه‌ ڕۆڵی له‌خۆگرتن ده‌گێڕێت', -'internalerror' => 'هه‌ڵه‌یه‌كی ناوخۆیی ڕویدا', -'internalerror_info' => 'هه‌ڵه‌ی ناوخۆیی: $1', -'fileappenderror' => 'نه‌تواندرا "$1" بخرێته‌سه‌ر "$2".', -'filecopyerror' => 'په‌ڕگه‌ی „$1“ ڕوونوس نابێت بۆ „$2“ .', -'filerenameerror' => 'ناوی په‌ڕگه‌ی "$1" نه‌گۆڕدرا بۆ "$2".', -'filedeleteerror' => 'بسڕدرێته‌وه‌"$1" نه‌توانرا په‌ڕگه‌ی', -'directorycreateerror' => 'نەتوانرا بوخچەی "$1"دروست بکرێت.', -'filenotfound' => 'په‌ڕگه‌ی "$1" نه‌دۆزرایه‌وه‌', -'fileexistserror' => 'ناتوانی لەسەر پەڕگەی "$1" بنووسیت: ئەو پەڕگەیە هەیە.', -'unexpected' => 'نرخی چاوەڕوان نەکراو: "$1"="$2" .', -'formerror' => 'هەڵە: فورمەکە نانێردرێت.', -'badarticleerror' => 'ئەو ئاماژە لەم لاپەڕەدا پێک‌نایە.', -'cannotdelete' => 'نەتوانرا پەڕە یان پەڕگەی «$1» بسڕدرێتەوە. -لەوانەیە پێشتر لە لایەن کەسێکی ترەوە سڕابێتەوە.', -'badtitle' => 'ناونیشانی خراپ', -'badtitletext' => 'سەرناوی ئەو لاپەڕەی کە دەتەوێت پووچە، بەتاڵە، یان سەرناوێکی نێوان-زمانی یان نێوانی-ویکییە کە بە شێوەیەکی ھەڵە لکێندراوە. -ڕەنگە یەک یان چەند کاراکتێری تێدا بێت کە ناشێت لە نێو سەرناوەکان دا بەکار بھێنرێت.', -'perfcached' => 'ئەم داتای خوارەوە پاشەکەوتی کەشە وە ناکرێ تازەی بکەیەوە.', -'perfcachedts' => 'ئەم داتای خوارەوە کەش کراوە، و دوایین جار لە $1 تازە کراوەتەوە', -'querypage-no-updates' => 'تازەکردنەوەی ئەم لاپەڕە لە حاڵی ئێستا دا ناچالاک کراو. -داتای ئەم شوێنە بەم زووانە تازە ناکرێتەوە.', -'wrong_wfQuery_params' => 'پارامێتری ھەڵە بۆ wfQuery()
    -کردار: $1
    -داواکاری: $2', -'viewsource' => 'بینینی سەرچاوە', -'viewsourcefor' => 'بۆ $1', -'actionthrottled' => 'چالاکی پێشی پێ گیرا', -'actionthrottledtext' => 'بە مەبەستی پێشگریی لە سپەم، ڕێگە نادرێت تۆ لە ماوەیەکی کورت دا لە سەر یەک ئەمە زۆر جار ئەنجام بدەی، وە ئیستا تۆ لە ڕادە بەدەرت کردووە. -تکایە پاش چەند خولەک دووبارە تاقی بکەوە.', -'protectedpagetext' => 'بە مەبەستی پێشگریی لە دەستکاریی، ئەم لاپەڕە قوفڵ کراوە.', -'viewsourcetext' => 'تۆ دەتوانی سەرچاوەی ئەم لاپەڕە ببینی و کۆپی بکەی:', -'protectedinterface' => 'ئەم لاپەڕە دەقی ڕوواڵەتی نەرم‌ئامێرەکە نیشان ئەدات، وە بۆ پێشگریی لە خراپکاریی قوفڵ کراوە.', -'editinginterface' => "'''ئاگاداریی:''' تۆ خەریکی دەستکاریی لاپەڕەیەکی کە بۆ دابینکردنی دەقی ڕوواڵەتی نەرم‌ئامێر بە کار دەھێنرێت. -گۆڕانکاریی لە ئەم لاپەڕە کاریگەر دەبێت لە سەر ڕواڵەتی لاپەڕەکانی بەکارھێنەرانی دیکە. -بۆ وەرگێڕان تکایە [http://translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net] بەکار بھێنە، واتە پرۆژەی خۆجێیی‌کردنی مێدیاویکی.", -'sqlhidden' => '(داواکاریی SQL شاراوەیە)', -'cascadeprotected' => 'ئەم لاپەڕە پارێزراوە لە دەستکاریی، چونکا خراوەتە سەر ڕیزی ئەم {{PLURAL:$1|لاپەڕانه‌، کە}} که‌ به‌ هه‌ڵکردنی بژارده‌ی داڕژان هه‌ڵکراوه‌: -$2', -'namespaceprotected' => "تۆ ناتوانی لاپەڕەکانی ناو نەیمسپەیسی '''$1''' بگۆڕی.", -'customcssjsprotected' => 'تۆ ناتوانی ئەم لاپەڕە دەستکاریی بکەی، چونکا ڕێکراوە تاکەکەسییەکانی بەکارھێنەرێکی دیکەی تێدایە.', -'ns-specialprotected' => 'تۆ ناتوانی لاپەڕە تایبەتەکان دەستکاریی بکەی.', -'titleprotected' => 'ئەم سەرناوە پارێزراوە لە دروستکران لە لایەن [[User:$1|$1]]. -ھۆکاری ئەمە بریتیە لە "\'\'$2\'\'".', - -# Virus scanner -'virus-badscanner' => "پێکەربەندیی نابەجێ: ڤایرس سکەنێری نەناسراو: ''$1''", -'virus-scanfailed' => 'سکەن ئەنجام نەدرا(کۆد $1)', -'virus-unknownscanner' => 'دژەڤایرس نەناسراوە:', - -# Login and logout pages -'logouttext' => "'''ئێستا تۆ لە ھەژمارەکەت ھاتوویتە دەرەوە.''' - -تۆ دەتوانی درێژە بدەی بە بەرکارھێنانی {{SITENAME}} بە شێوەی بێناو، یان دەتوانی [[Special:UserLogin|دیسانەوە بچیتەوە ژوورەوە]] بە ھەمان ناو یان بە ناوی بەکارھێنەرێکی جیاوازەوە. -ئاگادار بە کە سەرەڕای چوونەدەرەوەی تۆ لە ھەژمارەکەت ھەندێک لە پەڕەکان ھەر بە شێوەیەک نیشان ئەدرێن کە گوایە تۆ ھێشتا لە ژوورەوەیت. ئەمە بەردەوام دەبێت ھەتا کاتێک کە تۆ کەشی وێبگەڕەکەت دەسڕیتەوە.", -'welcomecreation' => '== بەخێربێی، $1! == -ھەژمارەکەت دروست کرا. -لە بیرت نەچێت کە گۆڕانکاری لە [[Special:Preferences|ھەڵبژاردەکانی {{SITENAME}}]]ی تایبەتی خۆت بدەی.', -'yourname' => 'ناوی بەکارھێنەر:', -'yourpassword' => 'تێپەڕوشە:', -'yourpasswordagain' => 'تێپه‌ڕه‌وشه‌ دووباره:‌', -'remembermypassword' => 'زانیاریی چوونە ژوورەوەم لەسەر ئەم کۆمپیوتەرە پاشەکەوت بکە‌', -'yourdomainname' => 'ناوی دۆمه‌ینی خۆت', -'externaldberror' => 'یان هەڵەی ڕێگەپێدانی بنکەدراو هەیە یان ڕێگات پێ نادرێت بۆ نوێ کردنی هەژماری دەرەکیت.', -'login' => 'چوونەژوورەوە', -'nav-login-createaccount' => 'چوونەژوورەوە / دروستکردنی هەژمار', -'loginprompt' => 'بۆ چونەژوورەوه لە {{SITENAME}}، ئەشێ ڕێگە بدەی بە کووکی‌یەکان.', -'userlogin' => 'دروست کردنی ھەژمار \\ چوونە ژورەوە', -'userloginnocreate' => 'چوونەژوورەوە', -'logout' => 'دەرچوون', -'userlogout' => 'دەرچوون', -'notloggedin' => 'له‌ ژووره‌وه‌ نیت', -'nologin' => "ھەژمارت نییە؟ '''$1'''.", -'nologinlink' => 'ھەژمارێک دروست بکە', -'createaccount' => 'ھەژمار دروست بکە', -'gotaccount' => "خاوه‌نی هه‌ژماری خۆتی؟ '''$1'''.", -'gotaccountlink' => 'چوونه‌ ژووره‌وه‌', -'createaccountmail' => 'بە ئیمەیل', -'badretype' => 'تێپەڕوشەکان لەیەک ناچن.', -'userexists' => 'ئەو ناوەی تۆ داوتە پێشتر کەسێکی دیکە بەکاری بردووە. -ناوێکی دیکە ھەڵبژێرە.', -'loginerror' => 'ھەڵە لە چوونە ژوورەوەدا', -'nocookiesnew' => 'هەژماری بەکارهێنەر درووست‌کرا، بەڵام بە سەرکەوتوویی نەچوویتەوە ژوورەوە. -{{SITENAME}} بۆ چوونەوە ژووری بەکارهێنەر لە شەکرۆکە کەڵک وەر دەگرێت. -تۆ بەکار‌هێنانی شەکرۆکەت لەکارخستە. -تکایە شەکرۆکە کارا بکە و بە ناو و وشەی تێپەڕبوونی بەکارهێنەر بچۆ ژوورەوە.', -'nocookieslogin' => '{{SITENAME}} بۆ چوونەژوورەوە لە کووکی‌یەکان کەڵک وەرئەگرێت. -ڕێگەت نەداوە بە کووکی‌یەکان. -ڕێگەیان پێ بدەو و دیسان تێبکۆشە.', -'noname' => 'ناوی بەکارهێنەری گۆنجاوت دابین‌ نەکردووه.', -'loginsuccesstitle' => 'سەرکەوتی بۆ چوونە ژوورەوە', -'loginsuccess' => "'''ئێستا لە {{SITENAME}} چوویتەوە ژوورەوە وەک \"\$1\".'''", -'nosuchuser' => 'بەکارھێنەرێک بە ناوی «$1» نیە. -ناوی بەکارھێنەر بە گەورە و بچووک بوونی پیتەکان ھەستیارە. -ڕێنووسەکەت چاولێکەرەوە، یان [[Special:UserLogin/signup|ھەژمارێکی نوێ دروست بکە]].', -'nosuchusershort' => 'بەکارهێنەر بە ناوی "$1" نیە. -چاو لە ڕێنووسەکە بکە.', -'nouserspecified' => 'دەبێ ناوی بەکارهێنەر دابین‌ بکەی.', -'wrongpassword' => 'تێپەڕوشەی ھەڵە. -تکایە دووبارە تێبکۆشە.', -'wrongpasswordempty' => 'تێپەڕەوشەی لێدراو بەتاڵبوو. -تکایە هەوڵ بدەوە.', -'passwordtooshort' => 'تێپەڕوشەکەت لانی کەم دەبێ {{PLURAL:$1|١ پیت|$1 پیت}} بێت.', -'password-name-match' => 'تێپەڕوشەکەت ئەبێ جیاواز بێت لە ناوی بەکارهێنەریت.', -'mailmypassword' => 'تێپەڕوشەیەکی نوێ بنێرە بۆ ئیمەیلەکەم', -'passwordremindertitle' => 'تێپەڕوشەیەکی نوێی کاتی بۆ {{SITENAME}}', -'passwordremindertext' => 'کەسێک (لەوانەیە خۆت، لە ناونیشانی ئای‌پی $1) داخوازی تێپەڕوشەیەکی نوێی کردووە بۆ {{SITENAME}} ($4) .تێپەڕوشەیەکی کاتی بۆ بەکارهێنەر «$2» درووست‌کراوە و وەک «$3» دانراوه. ئەگەر داواکاری تۆ بووە، دەبێ هەر ئێستا بڕۆیتە ژوورەوە و تێپەڕوشەیەکی نوێ هەڵبژێریت. تێپەڕوشەی کاتی لە {{PLURAL:$5|ڕۆژدا|$5 ڕۆژدا}} ماوەی‌ بەسەر دەچێت. - -ئەگەر کەسێکی دی ئەو داخوازیەی کردە یان وشە نهێنیەکەت بیر هاتەوە و چی‌تر پێویستت بە گۆڕانی نەبوو، ئەم پەیامە بەتاڵ‌کەوە و لە وشە نهێنیە کۆنەکەت کەڵک وەربگرە.', -'noemail' => 'ھیچ ئەدرەسێکی ئیمەیل تۆمار نەکراوە بۆ بەکارھێنەر « $1 ».', -'passwordsent' => 'وشەی نهێنی نوێ بۆ ئەدرەسی ئی‌مێڵغ تۆمار کراو بۆ "$1"، ناردرا. -تکایە دوای وەرگرتنی دووبارە بچۆ ژوورەوە.', -'blocked-mailpassword' => 'ئادرەسی ئای‌پی تۆ بۆ دەستکاری کردن بەستراوه بۆیە بۆ بەرگری لە بەکارهێنانی نابەجێ ئەنجامی گەڕانەوەی تێپەڕوشە ڕیگە نەدراوە.', -'eauthentsent' => 'ئی‌مەیلێکی بڕواپێکردن ناردرا بۆ ئەدرەسی ئی‌مەیلی پاڵێوراو.
    -پێش ئەوەی ئی‌مەیلی‌تر بنێردرێ بۆ ئەم هەژمارە، بۆ ئەوەی بڕوات پێ‌بکرێ کە ئەو هەژمارە بەڕاستی هین تۆیە، دەبێ ڕێنوماییەکانی ناو ئەو ئی‌مەیلە هەنگاو بە هەنگاو ئەنجام بدەیت.', -'throttled-mailpassword' => 'بیرهێنەرەوەیەکی وشەی نهێنی پێش ئەمە لە {{PLURAL:$1|کاتژمێر}}ی ڕابردوودا ناردراوە. -بۆ بەرگری لە بەکارهێنانی خراپ، تاکە یەک بیرهێنەرەوەی وشەی نهێنی هەر {{PLURAL:$1|کاتژمێر}} دەنێردرێت.', -'mailerror' => 'هەڵە ڕوویدا لە ناردنی ئیمەیل: $1', -'acct_creation_throttle_hit' => 'بینەرانی ویکی بەکەڵک وەرگرتن لەم ئای‌پی ئەدرەسەی تۆ لە ڕۆژانی ڕابردوودا، دەستیان کردە بە درووست‌کردنی {{PLURAL:$1|هەژمارە}}، کە زۆرینە ڕیگەپێدان لە یەک ماوە‌دایە. -وەک ئەنجامی ئەو ڕووداوە، ئەو بینەرانی لەم ئای‌پی ئەدرەسە کەڵک وەر دەگرن لەم کاتەدا ناتوانن هەژماری دیکە درووست‌بکەن.', -'emailauthenticated' => 'ئیمەیلەکەت بە ڕاست ناسرا لە $3ی $2 دا', -'emailnotauthenticated' => 'ئیمەیلەکەت ھێشتا نەناسراوە. -ھیچ ئیمەیلێک بۆ ئەم بابەتانەی خوارەوە نانێردرێت.', -'noemailprefs' => 'بۆ کەوتنە کاری ئەو تایبەتمەندیانە، لە هەڵبژاردەکانت ئەدرەسەکی ئی‌مێڵ دابین بکە.', -'emailconfirmlink' => 'ئیمەیلەکەت پشت‌ڕاست بکەرەوە', -'invalidemailaddress' => 'ئەو ئەدرەسی ئی‌مێڵە لەبەر ئەوەی بە شێوازێکی نەناسراوە، پەسند نەکرا. -تکایە ئەدرەسێک بە شێوازی ناسراو بنووسە یان ئەو خانەیە بەتاڵ بهێڵەوە.', -'accountcreated' => 'ھەژمار دروست کرا', -'accountcreatedtext' => 'هەژماری بەکارهێنەر بۆ $1 درووست‌کرا.', -'createaccount-title' => 'درووست‌کردنی هەژمارە بۆ {{SITENAME}}', -'createaccount-text' => 'کەسێک هەژمارەیەکی بۆ ئی‌مێڵ ئەدرەسەکی تۆ لەسەر {{SITENAME}} ($4) بەناوی "$2"، بە وشەی نهێنی "$3". -ئێستا دەبێ بڕۆیتە ژوورەوە و وشەی نهێنی بگۆڕیت. - -ئەگەر ئەو هەژمارە بە هەڵە درووست‌کراوە، ئەم برووسکە لە بەرچاو مەگرە.', -'login-throttled' => 'ژمارەیەکی زۆر هەوڵت داوە بۆ چوونە ژوورەوە. -تکایە پێش هەوڵی دووبارە، نەختێک بوەستە.', -'loginlanguagelabel' => 'زمان: $1', - -# Password reset dialog -'resetpass' => 'گۆڕینی تێپەڕوشە', -'resetpass_announce' => 'بە کۆدی کاتیی ئیمەیل‌کراو ھاتوویتە ژوورەوە. -بۆ دوایی ھاتنی چوونە ژوورەوە، ئەشێ تێپەڕوشەیەکی نوێ ھەڵبژێری لێرە:', -'resetpass_text' => '', -'resetpass_header' => 'گۆڕینی تێپەڕوشەی ھەژمار', -'oldpassword' => 'تێپەڕوشەی پێشو:', -'newpassword' => 'تێپەڕوشەی نوێ:', -'retypenew' => 'تێپەڕوشەی نوێ دوبارە بنووسەوە:', -'resetpass_submit' => 'تێپەڕوشە رێکخە و بچۆ ژوورەوە', -'resetpass_success' => 'تێپەروشەکەت بە سەرکەوتوویی گۆڕدرا. ئێستا چوونە ژوورەوەت...', -'resetpass_forbidden' => 'تێپەڕوشەکە ناگۆڕدرێت', -'resetpass-no-info' => 'بۆ گەیشتنی راستەوخۆ بەم پەڕە ئەشێ بچیتە ژوورەوە.', -'resetpass-submit-loggedin' => 'گۆڕینی تێپەڕوشە', -'resetpass-submit-cancel' => 'ھەڵوەشاندنەوە', -'resetpass-wrong-oldpass' => 'تێپەڕوشەی ھەنووکەیی یان تێپەڕوشەی کاتی ھەڵەیە. -وا دیارە تێپەڕوشەکەت بە سەرکەوتوویی گۆڕدراوە یان داوای تێپەڕوشەیەکی نوێت کردووە.', -'resetpass-temp-password' => 'تێپەڕوشەی کاتی:', - -# Edit page toolbar -'bold_sample' => 'دەقی ئەستوور', -'bold_tip' => 'دەقی ئەستوور', -'italic_sample' => 'دەقی لار', -'italic_tip' => 'دەقی لار', -'link_sample' => 'نێوی بەستەر', -'link_tip' => 'بەستەری ناوخۆ', -'extlink_sample' => 'http://www.example.com سەردێڕی بەستەر', -'extlink_tip' => 'بەستەری دەرەکی (لەبیرت بێ نووسینی پێشگری http:// )', -'headline_sample' => 'دەقی سەردێڕ', -'headline_tip' => 'سەردێڕی ئاست ۲', -'math_sample' => 'فۆرموول لێرە بنووسە', -'math_tip' => 'فۆرموولی بیرکاری (LaTeX)', -'nowiki_sample' => 'لەگەرە دەقی نەڕازراو تێ‌بخە', -'nowiki_tip' => 'لەبەرچاو نەگرتنی دارشتنەکانی ویکی', -'image_sample' => 'نموونە.jpg', -'image_tip' => 'وێنەی نێو دەق', -'media_sample' => 'نموونە.ogg', -'media_tip' => 'لینکی پەڕگە', -'sig_tip' => 'ئیمزاکەت بە مۆری ڕێکەوتەوە', -'hr_tip' => 'هێڵی ئاسۆیی (دەگمەن بەکاری بێنە)', - -# Edit pages -'summary' => 'پوختە:', -'subject' => 'بابەت/سەردێڕ:', -'minoredit' => 'ئەم گۆڕانکارییە بچووکە', -'watchthis' => 'چاودێری ئەم پەڕەیە بکە', -'savearticle' => 'پاشەکەوتکردنی پەرە', -'preview' => 'پێشبینین', -'showpreview' => 'پێشبینینی پەڕە', -'showlivepreview' => 'پێشبینینی ڕاسته‌وخۆ', -'showdiff' => 'گۆڕانکارییەکان نیشان بدە', -'anoneditwarning' => "'''وشیار بە:''' نەچوویتەتە ژوورەوە. -ئەدرەسی ئەکەت لە مێژووی ئەم پەڕە دا تۆمار دەکرێ.", -'missingsummary' => "'''وە بیر خستنەوە:''' پوختەیەکت نەنووسیوە بۆ چۆنیەتی گۆڕانکارییەکەت. -ئەگەر جارێکی تر پاشکەوت کردن لێبدەی، بێ پوختە تۆمار دەکرێ.", -'missingcommenttext' => 'تکایە لە خوارەوە شرۆڤەیەک بنووسە.', -'missingcommentheader' => "'''بیرهێنانەوە:''' بۆ ئەم بۆچوونەت سەردێڕ\\بابەت ڕاچاو نەکردووە.
    -ئەگەر دیسان پاشەکەوت لێدەی، دەستکاریەکەت بێ سەردێڕ یان بابەت پاشەکەوت ئەبێ.", -'summary-preview' => 'پێشبینینی کورتە:', -'subject-preview' => 'پێشبینینی بابەت\\سەردێڕ :', -'blockedtitle' => 'به‌کار هینه‌ر له‌کار خراوه', -'blockedtext' => '\'\'\'ناوی بەکارهێنەری یان ئای‌پی ئەدرەسی تۆ بەربەست‌ کراوە.\'\'\'

    -بەربەست لە لایەن $1 کراوە.
    -هۆکاری بەربەست کردن \'\'$2\'\'.

    -* دەستپێکی بەربەست‌کران: $8
    -* کۆتایی هاتنی بەربەست‌کران: $6
    -* بابەتی بەربەست: $7

    -دەبێ پەیوەندی بکەی بە $1 یان یەکێ دی لە [[{{MediaWiki:Grouppage-sysop}}|بەڕێوبەران]] بۆ وتووێژ سەبارەت بە بەربەست‌کرانەکە.

    -لە بیرت بێ تاکوو ئەمەیل ئەدرەسێکی بڕوا پێ‌کراو لە [[Special:Preferences|ھەڵبژاردەکانی بەکارھێنەر]] ڕاچاو نەکەی، نابێت لە هەلی "ئی‌مەیل ناردن بۆ ئەم بەکارهێنەرە" کەڵک وەر بگری؛ کەڵک وەرگرتن لەوە بەربەست نەکراوە بۆت.

    -ئای‌پی ئەدرەسی ئێستای تۆ $3 و پەێناسەی بەربەست‌کراو #$5.
    -تکایە لە هەر پرس و داواکاریەکت‌دا هەموو وردەکاریەکانی سەرەوە بگونجێنە.', -'autoblockedtext' => 'ئای‌پی ئەدرەسی تۆ بە شێوەی خۆکار بەربەست کراوە چونکە لە لایەن بەکارهێنەرێکی دی کەڵکی لێ وەرگیراوە کە لە لایەن $1 بەربەست کراوە.
    -ئەمە هۆکارەکەیەتی:

    -:\'\'$2\'\'

    -* دەستپێکی بەربەست‌کران: $8
    -* کۆتایی هاتنی بەربەست‌کران: $6
    -* بابەتی بەربەست: $7

    - -دەبێ پەیوەندی بکەی بە $1 یان یەکێ دی لە [[{{MediaWiki:Grouppage-sysop}}|بەڕێوبەران]] بۆ وتووێژ سەبارەت بە بەربەست‌کرانەکە.

    - -لە بیرت بێ تاکوو ئەمەیل ئەدرەسێکی بڕوا پێ‌کراو لە [[Special:Preferences|ھەڵبژاردەکانی بەکارھێنەر]] ڕاچاو نەکەی، نابێت لە هەلی "ئی‌مەیل ناردن بۆ ئەم بەکارهێنەرە" کەڵک وەر بگری؛ کەڵک وەرگرتن لەوە بەربەست نەکراوە بۆت.

    - -ئای‌پی ئەدرەسی ئێستای تۆ $3 و پەێناسەی بەربەست‌کراو #$5.
    -تکایە لە هەر پرس و داواکاریەکت‌دا هەموو وردەکاریەکانی سەرەوە بگونجێنە.', -'blockednoreason' => 'هیچ هۆکارێک نەدراوە', -'blockedoriginalsource' => "سەرچاوەی '''$1''' لەخوارەوە پیشاندراوە:", -'blockededitsource' => "دەقی '''دەستکاریەکانی تۆ''' بۆ '''$1''' لە خوارەوە نیشان‌دراوە:", -'whitelistedittitle' => 'بۆ دەستکاریکردن پێویستە لەژوورەوە بیت', -'whitelistedittext' => 'بۆ دەستکاری کردنی لاپەڕەکان دەبێ $1.', -'confirmedittext' => 'پێویستە پێش هەرجۆرە دەستکاریەکی لاپەڕەکان ئەدرەسی ئیمەیلت ڕاچاو کردبێت .
    -تکایە لە [[Special:Preferences|ھەڵبژاردەکانی بەکارھێنەر]] ئی‌مەیلەکەت دانێ و بڕواپێکراوی بکە.', -'nosuchsectiontitle' => 'بەش نەدۆزرایەوە', -'nosuchsectiontext' => 'هەوڵی دەستکاریکردنی بەشێکت داوە کە بوونی نیە. -لەوانەیە لەو کاتە خەریکی بینینی پەڕە بوویت گۆزرابێتەوە یان سڕابێتەوە.', -'loginreqtitle' => 'پێویستە بچیه ژور', -'loginreqlink' => 'چونە‌ژوور', -'loginreqpagetext' => 'بۆ دیتنی لاپەڕەکانی دیکە دەبێ $1 .', -'accmailtitle' => 'وشه‌ی نهێنی ناردرا.', -'accmailtext' => "تێپەڕوشەیەکی هەرەمەکی درووست‌کراو بۆ [[User talk:$1|$1]] ناردرا بۆ $2 . - -کاتێ چوویتە ‌ژوورەوە، لە ''[[Special:ChangePassword|گۆڕینی تێپەڕوشە]]'' دەتوانی وشەی تێپەڕبوون بۆ ئەم هەژمارە نوێیە بگۆڕی.", -'newarticle' => '(نوێ)', -'newarticletext' => "بە دوای بەستەری پەڕەیەک کەوتووی کە ھێشتا دروست نەکراوە. -بۆ دروست کردنی پەڕەکە، لە چوارچێوەکەی خوارەوە دەست بکە بە تایپ کردن. (بۆ زانیاری زورتر -[[{{MediaWiki:Helppage}}|یارمەتی]] ببینە). -ئەگەر بە ھەڵەوە ھاتویتە ئێرە، لە سەر دوگمەی '''back'''ی وێبگەڕەکەت کلیک بکە.", -'anontalkpagetext' => "----''ئەمە لاپەڕەی وتووێژە بۆ بەکارهێنەرێکی نەناسراوە کە هێشتا هەژمارەی درووست‌نەکردووه یان کەڵکی‌ لێ وەرناگرێ . -لەبەر ئەوە مەجبوورین ئای‌پی ئەدرەسەکی ژمارەیی بۆ ناساندنی بەکار بێنین. -ئای‌پی ئەدرەسی وا لەوانەیه لە لایەن چەندین بەکارهێنەروە بەکاربێت. -ئەگەر تۆ بەکارهێنەرێکی نەناسراوی و هەست ئەکەی ئەم لێدوانە پەیوەندی بە تۆوە نیە تکایە [[Special:UserLogin/signup|ھەژمارێکی نوێ دروست بکە]] یان [[Special:UserLogin|بچۆ ژوورەوە]] لەبەر ئەوەی لەداهاتوودا دەگەڵ بەکارهێنەرانی‌ نەناسراوی دی تێکەڵ نەکرێیت. ''", -'noarticletext' => 'ھەنووکە لەم پەڕەدا ھیچ دەقێک نیە. -دەتوانی بۆ ئەم ناوە لە [[Special:Search/{{PAGENAME}}|پەڕەکانی تر دا بگەڕێی]] ،[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} لە لۆگەکاندا بگەڕی ], -یان [{{fullurl:{{FULLPAGENAME}}|action=edit}} ئەم پەڕە دەستکاری بکەیت. ].', -'userpage-userdoesnotexist' => 'هەژماری بەکارهێنەری "$1" تۆمار نەکراوە.
    -گەر دەتەوێ ئەم لاپەڕە درووست‌کەی یان دەستکاری بکەی تکایە تاقی‌بکەوە .', -'clearyourcache' => "'''ئاگاداری - دوای پەشەکەوت‌کردن، بۆ بینینی گۆڕانکارییەکان دەبێ کاشی وێبگەڕەکەت دەور لێ‌دەیتەوە.'''
    -'''Mozilla / Firefox / Safari:'''کاتێ لەسەر ''Reload'' کرتە دەکەی، دەست لەسەر''Shift'' ڕاگرە، یان ''Ctrl-F5'' لێدە یا ''Ctrl-R''. (لە ماکینتاش ''Command-R'' ئەبێ لێدەی)
    -'''Konqueror: ''' لەسەر ''Reload'' کرتە بکە یا ''F5'' لێدە ؛
    -'''Opera:''' کاشەکەت لە ''Tools → Preferences'' بسڕەوە ؛
    -'''Internet Explorer:''' کاتێ ''Refresh'' لێ‌ئەدەی ''Ctrl'' ڕاگرە، یان ''Ctrl-F5'' لێدە .", -'usercssyoucanpreview' => "'''سەرچەشن:''' «{{int:showpreview}}» بەکاربێنە بۆ تاقی‌کردنەوەی CSS نوێ‌کەت، پێش پاشەکەوت‌کردن.", -'userjsyoucanpreview' => "'''سەرچەشن:''' «{{int:showpreview}}» بەکاربێنە بۆ تاقی‌کردنەوەی جاڤاسکریپتە نوێ‌کەت، پێش پاشەکەوت‌کردن.", -'usercsspreview' => "'''له‌یادت بێ که‌ ئێسته‌ ته‌نها پێشبینینی CSS به‌کارهێنه‌ریه‌که‌ت ده‌که‌ی.''' -'''هێشتا پاشه‌که‌وت نه‌بووه !'''", -'userjspreview' => "'''لەیادت بێ کە ئێستە تەنها پێشبینین\\تاقی‌کردنەوەی جاڤاسکریپتی بەکارهێنەریەکەت دەکەی.''' -'''هێشتا پاشەکەوت نەبووه !'''", -'userinvalidcssjstitle' => "'''ئاگادارکردنەوە:''' پێست نیە بۆ \"\$1\". -لەیادت بێ کە لاپەڕەکانی‌ .css و .js لە بابەت بە پیتی بچووک کەڵک وەر ئەگرن. وەک {{ns:user}}:Foo/monobook.css نە وەک {{ns:user}}:Foo/Monobook.css .", -'updated' => '(نوێ‌کراوە)', -'note' => "'''تێبینی:'''", -'previewnote' => "'''لە بیرت بێت کە ئەمە تەنھا پێشبینینە.''' -گۆڕانکارییەکانت ھێشتا پاشەکەوت نەکراون!", -'previewconflict' => 'ئەم پێشبینینە بە تۆ نیشان ئەدات ئەو دەقەی لە شوێنی دەستکاری سەرەوە داتناوە چۆن بەرچاو ئەکەوێت ئەگەر پاشەکەوتی بکەیت.', -'session_fail_preview' => "'''ببوورە! لەبەر ون‌بوونی هێندێ دراوە ناتوانین دەستکاریەکەت چارەسەر کەین.'''
    -تکایە دیسان تاقی‌ بکەوە.
    -ئەگەر هێشتا کار ناکات بکۆشە [[Special:UserLogout|بچیتە دەرەوە]] و بگەڕێیتەوە ژوورەوە.", -'session_fail_preview_html' => "'''ببوورە! لەبەر ون‌بوونی هێندێ دراوە ناتوانین دەستکاریەکەت چارەسەر کەین.'''

    -''لەبەر ئەوەی {{SITENAME}} HTMLـی چاک توانا نەدراوە، پێشبینین بۆ بەرگری لە هێرشەکانی جاڤاسکریپتی داشاردراوە.''

    -'''ئەگەر ئەمە هەوڵێکی ڕەوا بۆ دەستکاری‌کردنە، تکایە دیسان تاقی‌ بکەوە.'''
    -ئەگەر هێشتا کار ناکات بکۆشە [[Special:UserLogout|بچیتە دەرەوە]] و بگەڕێیتەوە ژوورەوە.", -'token_suffix_mismatch' => "'''دەستکاریەکەت پەسەند نەکرا لەبەر ئەوەی ڕاژەخواز یان وێبگەڕەکەت نووسەکانی خاڵبەندی لەیەک پچڕاندوە.'''
    -دەستکاریەکەت بۆ بەرگری لە تێکەڵ‌بوونی دەقی لاپەڕەکە وەر نەگیرا.
    -ئەمە بڕێ‌جار کاتێ ڕوو ئەدات کە لە خزمەتی پرۆکسی سەر وێب کەڵک وەر بگریت.", -'editing' => 'دەستکاریکردنی $1', -'editingsection' => 'گۆڕاندنی: $1 (بەش)', -'editingcomment' => 'گۆڕاندنی $1 (بەشی نوێ)', -'editconflict' => 'دەستکاری کێشە : $1', -'explainconflict' => "لەو ماوەی تۆ خەریک دەستکاری‌کردنی ئەم لاپەڕە بووی‌، کەسێکی‌تر گۆڕانکاری‌ تێدا کردووە.
    -بەشی سەرەوەی دەق، شێوازی ئێستای لاپەڕەکە لە خۆ ئەگرێت.
    -گۆڕانکاریەکانی تۆش لە بەشی خوارەوەی دەق نیشان‌دراوە.
    -دەبێ گۆڕانکاریەکانی خۆت لەگەڵ ئێستەی لاپەڕەکەدا یەک‌بخەی.
    -کاتێ \"پاشەکەوتی لاپەڕە\" لێدەی، '''تەنها''' ئەو دەقەی بەشی سەرەوە پاشەکەوت دەبێت.", -'yourtext' => 'نوسراوی تۆ', -'storedversion' => 'پێداچوونەوەی پاشەکەوت‌کراو', -'nonunicodebrowser' => "'''ئاگاداری: وێبگەڕەکەت لە یوونی‌کۆد پاڵپشتی ناکات .'''
    -پرۆسەی چارەسەرکردن لە کاردایە بۆ ئەوەی ڕیگەت پێ بدا بە پاراوی دەستکاری لاپەڕەکان بکەیت: ئەو پیتانەی وا ASCII نین لە چوارچێوەی دەستکاری‌کردن‌دا وەک کۆدی ژمارە‌شازدەیی(hexadecimal) نیشان ئەدرێن.", -'editingold' => "'''ئاگاداری: تۆ خەریکی دەستکاری‌ پێداچوونەوەیەکی کات‌بەسەرچووی ئەم لاپەڕەی.'''
    -ئەگەر پاشەکەوتی بکەیت، هەموو گۆڕانکاریەکانی پێش ئەم پێداچوونەوە لەدەست ئەڕوا.", -'yourdiff' => 'جیاوازیەکان', -'copyrightwarning' => "تکایە ئاگادار بن کە ھەموو بەشدارییەک بۆ {{SITENAME}} وا فەرز ئەکرێت کە لە ژێر «$2» بڵاو دەبێتەوە (بۆ ئاگاداری زۆرتر $1 سەیر کە). ئەگەر ناتەوێ نوسراوەکەت بێ‌ڕەحمانە دەستکاری بکرێت و بە دڵخواز دیسان بڵاو ببێتەوە، لێرە پێشکەشی مەکە. ھەروەھا بەڵین ئەدەی کە خۆت ئەمەت نووسیوە، یان لە سەرچاوەیەکی بە دەسەڵاتی گشتی ''(public domain)'' یان سەرچاوەیەکی ھاوتا لەبەرت‌گرتوەتەو. -'''«بەرھەمێک کە مافی لەبەرگرتنەوەی پارێزراوە، بێ ئیجازە بڵاو مەکەرەوە.»'''", -'copyrightwarning2' => "لە یادتان بێت کە هەموو بەشداریەکان لە {{SITENAME}} لەوانەیە لەلایەن بەشداربووەکانی‌تر دەستکاری بکرێن، بگۆڕدرێن یا بسڕێنەوە.
    -ئەگەر ناتەوێ نووسراوەکانت بێ‌بەزەیی دەستکاری بکرێن، هەر مەینێرە بۆ ئێرە.
    -هەروا تۆ بڕیارمان پێ‌ئەدوی کە ئەمە خۆت نووسیوتە یان لە شوێنێکی گشتی یا سەرچاوەیەکی ئازاد وەک ئەو کۆپی‌ هەڵت‌ گرتووە (بۆ وردەکاریەکان ئەمە ببینە $1) .
    -'''بێ وەرگرتنی یارمەتی‌، کارە ماف‌پارێزراوەکان مەنێرە !'''", -'longpagewarning' => "'''ئاگاداری:''' درێژاییی ئەم پەڕە $1 کیلوبایتە؛ -بڕێ لە وێبگەڕەکان لەگەڵ دەستکاری کردنی ئەو پەڕانە کە نزیک یان درێژتر لە ٣٢ کیلوبایتن کێشەیان ھەیە. -تکایە لەت کردنی ئەم پەڕە بۆ چەند بەشی چکۆلەترتان لەبەرچاو بێت.", -'longpageerror' => "'''هەڵە: ئەو دەقی ناردووتە $1 کیلوبایت درێژەی هەیە، کە لە زۆرینەی $2 کیلۆبایت درێژترە.'''
    -پاشەکەوت ناکرێت.", -'readonlywarning' => "'''ئاگاداری: بنکەدراوە بۆ چاکردنەوە داخراوە، بۆیە ئێستا ناتوانی دەستکاریەکانت پاشەکەوت بکەیت.'''
    -باشتر وایە دەقەکە cut و paste بکەیتە ناو پەڕگەیەکی دەق و پاشەکەوتی بکەی بۆ دوایی.

    -ئەو بەڕێوبەرەی کە دایخستوە، ئەم هۆکارەی بەردەست خستووە: $1", -'protectedpagewarning' => "'''ئاگاداری: ئەم پەڕە داخراوە بۆ ئەوی تەنیا ئەو بەکارھێنەرانە کە مافی بەڕێوەبەرایەتییان ھەیە بتوانن دەستکاریی بکەن.''' -بۆ چاوانە دوایین لۆگ لە خوارەوەدا ھاتووە:", -'semiprotectedpagewarning' => "'''ئاگاداری: ئەم پەڕە داخراوە بۆ ئەوی تەنھا بەکارھێنەرە تۆمارکراوەکان بتوانن دەستکاریی بکەن.''' -بۆ چاوانە دوایین لۆگ لە خوارەوەدا ھاتووە:", -'cascadeprotectedwarning' => "'''ئاگاداری:''' ئەم لاپەڕە داخراوە بۆیە تەنها ئەو کەسانەی مافی بەڕێوبەرایەتی‌یان هەیە ئەتوانن دەستکاری بکەن، چۆنکا ئەمە {{PLURAL:$1|لاپه‌ڕه‌|لاپه‌ڕانه‌}} لە زنجیرەی پارێزراوەکانی لە خۆ گرتووە‌:", -'titleprotectedwarning' => "'''ئاگاداری: ئەم پەڕە داخراوە، بۆئەوەی بۆ درووست‌کردنی [[Special:ListGroupRights|مافە تایبەتەکانت]] پێویستن.''' -بۆ چاوانە دوایین لۆگ لە خوارەوەدا ھاتووە:", -'templatesused' => 'ئەو {{PLURAL:$1|قاڵبە کە لەم پەڕەیەدا بە کارھێنراوە|قاڵبانە کە لەم پەڕەیەدا بە کارھێنراون}}:', -'templatesusedpreview' => 'ئەو {{PLURAL:$1|قاڵبە کە لەم پێشبینینەدا بە کارھێنراوە|قاڵبانە کە لەم پێشبینینەدا بە کارھێنراون}}:', -'templatesusedsection' => 'ئەو {{PLURAL:$1|داڕێژە|داڕێژانە}} کە لەم بەشەدا بە کارھێنراون:', -'template-protected' => '(پارێزراو)', -'template-semiprotected' => '(نیوەپارێزراو)', -'hiddencategories' => 'ئەم پەڕە ئەندامێکی {{PLURAL:$1|١ ھاوپۆلی شاراوەیە|$1 ھاوپۆلی شاراوەیە}}:', -'nocreatetitle' => 'درووست‌کردنی لاپەڕە سنووردار کراوە', -'nocreatetext' => '{{SITENAME}} توانای درووست‌کردنی لاپەڕە نوێکانی داخستووە.
    -ئەتوانی بگەڕێتەوە دواوە و یەکێک لەو لاپەڕانەی وا هەن دەستکاری بکەیت ، یان [[Special:UserLogin|بچۆ ژوورەوە یان هەژمارێک درووست‌بکە]]', -'nocreate-loggedin' => 'ئیجازەی دروست کردنی پەڕەی نوێت نیە.', -'sectioneditnotsupported-title' => 'بەش دەستکاریکردنی پشتیوانی ناکرێ', -'permissionserrors' => 'ھەڵەی ئیجازەکان', -'permissionserrorstext' => 'مافی ئەنجامی ئەوەت نیە لەبەر ئەم {{PLURAL:$1|هۆکار|هۆکارانە}} :', -'permissionserrorstext-withaction' => 'دەسەڵاتت نییە بۆ $2 لەبەر ئەم {{PLURAL:$1|هۆکارە|هۆکارانە}}ی خوارەوە:', -'recreate-moveddeleted-warn' => "'''ئاگاداری: خەریکی دووبارە لاپەڕەیەک درووست‌ ئەکەیته‌وه کە لە پێشدا سڕدراوەتەوە. '''

    -دەبێ ئاگات لەوە بێت کە دەستکاری‌کردنی ئەم لاپەڕە قازانجی هەیە یا نا.
    -لۆگی سڕینەوە و جێبەجێ کردنی ئەم لاپەڕە بۆ ئاسان‌کاری لێرەدا هاتووە:", -'moveddeleted-notice' => 'ئەم پەڕەیە سڕاوەتەوە. -لۆگی سڕینەوە و گواستنەوە بۆ پەڕەکە لە خوارەوە دابینکراوە.', -'log-fulllog' => 'دیتنی لۆگی تەواو', -'edit-hook-aborted' => 'دەستکاری لە لایەن قولاپەوە هەڵوەشێندرایەوە.
    -هۆکاری ئەوەی بەردەست نەخستووە.', -'edit-gone-missing' => 'توانای نوێ‌کردنەوەی لاپەڕەکە نیە.
    -لەوە دەچی سڕدرابێتەوه.‌', -'edit-conflict' => 'کێشەی دەستکاری.', -'edit-no-change' => 'دەستکاریەکەت بەرچاو نەخرا، لەبەر ئەوەی هیچ گۆڕانکارییەکت لەسەر دەقەکە نەکردووە.', -'edit-already-exists' => 'توانای درووست‌کردنی لاپەڕەی نوێ نیە.
    -ئەوە لەپێش‌دا هەبوو.', - -# Parser/template warnings -'expensive-parserfunction-warning' => "'''ئاگاداری:''' ئەم لاپەڕە ژمارەیەکی زۆر بانگ‌کەری فەنکشێنی لێک‌کەرەوەی لەخۆ گرتوو.

    -ئەوە دەبێ کەمتر بێت لە $2 {{PLURAL:$2|بانگ‌کەردن|بانگ‌کەردن}} کە ئێستا {{PLURAL:$1|بانگ‌کردنی|بانگ‌کردنی}} تێدایە.", -'expensive-parserfunction-category' => 'ئەو لاپەڕانەی ژمارەیەکی زۆر بانگ‌کەری فەنکشێنی لێک‌کەرەوەیان لەخۆ گرتووە.', -'post-expand-template-inclusion-warning' => "'''ئاگاداری:''' قەبارەی داڕێژەکە زۆر گەورەیە.
    -لەوانەیە هێندێ لە داڕێژەکان لەخۆ نەگرێت.", -'post-expand-template-inclusion-category' => 'ئەو لاپەڕانەی وا داڕێژە تیێدا قەبارەی تێپەڕیوە', -'post-expand-template-argument-warning' => "'''ئاگاداری:''' ئەم لاپەڕە لانیکەم یەک بەڵگەی داڕێژە لە خۆ گرتوو کە قەبارەی کردنەوەی زۆر گەورەیە.
    -ئەم بەڵگە بەکار نەخراوە.", -'post-expand-template-argument-category' => 'ئەو لاپەڕانەی بەڵگەی داڕێژەی بەکار نەخراوی لەخۆ گرتووە', -'parser-template-loop-warning' => 'ئەڵقەی داڕێژە دۆزرایەوە: [[$1]]', -'parser-template-recursion-depth-warning' => 'سنووری قووڵی گەڕانەوەی داڕێژە تێپەڕیوە ($1)', - -# "Undo" feature -'undo-success' => 'دەستکاریەکە ئەتوانێ ئەنجام‌نەدراو بێت.
    -تکایە بۆ ئەوەی ئەرخەیان بیت ئەمەیە ئەوەی‌ دەتویست بیکەی چاو لەو هەڵسەنگاندنەی خوارەوە بکە و دواتر بۆ تەواوکردنی ئەنجام‌نەدراو، گۆڕانکارییەکان پاشەکەوت بکە.', -'undo-failure' => 'لەبەر کێشەی دەست‌تێ‌وەردان، ناتوانی دەستکاریەکە ئەنجام‌نەدراو بکەیت.', -'undo-norev' => 'ناتوانی دەستکاریەکە ئەنجام‌نەدراو بکەی لەبەر ئەوەی بوونی نیە یا سڕدراوەتەوە.', -'undo-summary' => 'پووچەڵ‌کرنەوەی پێداچوونەوەی $1 لەلایەن [[Special:Contributions/$2|$2]] ([[User talk:$2|وتووێژ]])', - -# Account creation failure -'cantcreateaccounttitle' => 'ناتوانرێت هەژمار دروست بکرێت', -'cantcreateaccount-text' => 'درووست‌کردنی هەژمارە بۆ ناونیشانی ئای‌پی (\'\'\'$1\'\'\') لە لایەن [[User:$3|$3]] داخراوە.

    -$3 هۆکاری "$2" خستوەتەڕوو', - -# History pages -'viewpagelogs' => 'لۆگەکانی ئەم پەڕەیە ببینە', -'nohistory' => 'هیچ مێژوویەکی دەستکاری نییە بۆ ئەم پەڕەیە.', -'currentrev' => 'پێداچوونەوی ئێستا', -'currentrev-asof' => 'بینینەوی ھەنووکە تا $1', -'revisionasof' => 'وەک بینینەوەی $1', -'revision-info' => 'پێداچوونەوی $1 لە لایەن $2', -'previousrevision' => '→پیاچوونەوەی کۆنتر', -'nextrevision' => 'پیاچوونەوەی نوێتر←', -'currentrevisionlink' => 'پیاچوونەوەی ئێستا', -'cur' => 'ئێستا', -'next' => 'پاش', -'last' => 'پێشوو', -'page_first' => 'یەکەمین', -'page_last' => 'دوایین', -'histlegend' => "وەشانەکان بۆ ھەڵسەنگاندن دیاری بکە و ئەم دوگمەی خوارەوە لێبدە.
    -ڕێنمایی: ('''ئێستا''') = جیاوازی لەگەڵ وەشانی ئێستا، ('''پێشوو''') =جیاوازی لەگەڵ وەشانی پێشوو، '''ب''' = گۆڕانکاریی بچووک.", -'history-fieldset-title' => 'گەشتی مێژوو', -'histfirst' => 'کۆنترین', -'histlast' => 'نوێترین', -'historysize' => '({{PLURAL:$1|1 بایت|$1 بایت}})', -'historyempty' => '(پووچ)', - -# Revision feed -'history-feed-title' => 'مێژووی پیاچوونەوە', -'history-feed-description' => 'مێژووی پیاچوونەوە بۆ ئەم پەڕە لە ویکییەکە', -'history-feed-item-nocomment' => '$1 لە $2', -'history-feed-empty' => 'لاپەڕەی داخوازی‌کراو بوونی نیە.
    -لەوانەیە لەسەر ویکی سڕدرابێتەوە یان ناوی گۆڕدرابێت.
    -بۆ لاپەڕەی وەک ئەوە هەوڵی [[Special:Search|گەڕان لەسەر ویکی]] بدە.', - -# Revision deletion -'rev-deleted-comment' => '(بۆچوون سڕایەوە)', -'rev-deleted-user' => '(ناوی بەکارهێنەر سڕایەوە)', -'rev-deleted-event' => '(لۆگی کردەوە سڕایەوە)', -'rev-deleted-text-permission' => "پێداچوونەوەی ئەم لاپەڕە '''سڕدراوەتەوە'''.
    -لەوانەیە وردەکاری سەبارەت بەوە لێرەدا دەست کەوێ : [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی بەرگری]", -'rev-deleted-text-unhide' => "پێداچوونەوەی ئەم لاپەڕە '''سڕدراوەتەوە'''.
    -لەوانەیە وردەکاری سەبارەت بەوە لێرەدا دەست کەوێ : [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی بەرگری]
    -وەک بەڕێوبەر هێشتا دەتوانی [$1 ئەم پێداچوونەوە] ببینی، گەر دەتەوێ پێشتر بڕۆی.", -'rev-suppressed-text-unhide' => "پێداچوونەوی ئەم لاپەڕە '''بەرگری''' لێ‌کراوە. -لەوانەیە وردەکاری سەبارەت بەوە لێرەدا دەست کەوێ : [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی بەرگری]. -وەک بەڕێوبەر هێشتا دەتوانی [$1 ئەم پێداچوونەوە] ببینی، گەر دەتەوێ پێشتر بڕۆی.", -'rev-deleted-text-view' => "پێداچوونەوەی ئەم لاپەڕە '''سڕدراوەتەوە'''.
    -وەک بەڕێوبەر هێشتا دەتوانی چاوی لێ‌بکەی؛ لەوانەیە وردەکاری سەبارەت بەوە لێرەدا دەست کەوێ : [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی بەرگری].", -'rev-suppressed-text-view' => "پێداچوونەوی ئەم لاپەڕە '''بەرگری''' لێ‌کراوە. -وەک بەڕێوبەر دەتوانی بیبینی؛ لەوانەیە وردەکاری سەبارەت بەوە لێرەدا دەست کەوێ : [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی بەرگری].", -'rev-deleted-no-diff' => "ناتوانی ئەم جیاوازیە ببینی لەبەر ئەوەی یەکێک لە پێداچوونەوەکان '''سڕدراوەتەوه'''‌.
    -لەوانەیە وردەکاری سەبارەت بەوە لێرەدا دەست کەوێ : [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی بەرگری].", -'rev-deleted-unhide-diff' => "یەکێک لە پێداچوونەوەکانی ئەم جیاوازیە '''سڕدراوەتەوه'''.
    -لەوانەیە وردەکاری سەبارەت بەوە لێرەدا دەست کەوێ : [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی بەرگری].
    -وەک بەڕێوبەر هێشتا دەتوانی [$1 ئەم جیاوزیە‌] ببینی، گەر دەتەوێ پێشتر بڕۆی.", -'rev-delundel' => 'پیشاندان/شاردنەوە', -'rev-showdeleted' => 'نیشان بدە', -'revisiondelete' => 'سڕینەوە\\هاوردنەوەی پێداچوونەوەکان', -'revdelete-nooldid-title' => 'مەبەستی پێداچوونەوەی نادیار', -'revdelete-nooldid-text' => 'پێداچوەنەوەی مەبەستت ڕاچاو نەکردە بۆ ئەنجامی ئەم فەنکشێنە یان ئەو پێداچوونەوەی ڕاچاوت کردە بوونی نیە، یا خەریکی هەوڵی داشاردنی پێداچوونەوهی ئێستا‌ ئەدەی.', -'revdelete-nologtype-title' => 'جۆری لۆگ ڕاچاو نەکراوە', -'revdelete-nologtype-text' => 'جۆری لۆگت ڕاچاو نەکردە بۆ خستنە‌کاری ئەم کردەوە.', -'revdelete-nologid-title' => 'پێ‌دراوەی لۆگی نەناسراو', -'revdelete-nologid-text' => 'بۆ ئەنجامی ئەم فەنکشێنە یا لۆگی ڕووداوی مەبەستت ڕاچاو نەکردووە یان ئەو پێ‌دراوەی ڕاچاوت کردە بوونی نیە.', -'revdelete-no-file' => 'ئەو پەڕگەی ڕاچاوت کردووە بوونی نیە.', -'revdelete-show-file-confirm' => 'ئایا دڵنیایت دەتەوێ پێداچوونەوەی سڕاوەی پەڕگەی "$1" لە $2، لە $3دا ببیینی؟', -'revdelete-show-file-submit' => 'بەڵێ', -'revdelete-selected' => "'''{{PLURAL:$2|پێداچوونەوەی هەڵبژێراوی|پێداچوونەوەکانی هەڵبژێراوی}} [[:$1]]:'''", -'logdelete-selected' => "'''{{PLURAL:$1|لۆگی ڕووداوەی هەڵبژێراو|لۆگی ڕووداوە هەڵبژێراوەکان}}:'''", -'revdelete-text' => "'''پێداچوون و ڕووداوە سڕاوەکان هێشتا لە لاپەڕەی مێژوو و لۆگەکان دەست دەکەون،ن بەڵام ناوەڕۆکی ھێندێکیان بەرچاوی گشتیی ناکەون.'''
    -بەڕێوبەرانی دیکە لە {{SITENAME}}دا، هێشتا دەتوانن دەستکارییە شاراوەکان ببینن و لە ڕێگەی ھەر ئەم فۆڕمەوە بیانگەڕێننەوە، مەگەر ئەوەی بەربەستی دیکە داندرابێت.", -'revdelete-confirm' => 'تکایە بەڵێن بدە کە دەتەوێ ئەوە بکەی و لە ئەنجامەکانی ئەوە ئاگاداریت و بە پێی [[{{MediaWiki:Policy-url}}|سیاسەتنامە]] ئەنجامی ئەدەی.', -'revdelete-suppress-text' => "بەرگری دەبێ '''تەنها''' بۆ ئەم بابەتانە بەکاربهێندرێت:
    -* سووکایەتیکردن بە کەسایەتییەک
    -* بڵاوکردنەوەی زانیاریی تاکەکەسی نەگونجاو
    -*: '' ناونیشانی ماڵ یا ژمارە تەلەفۆن و وەک ئەمانە.''
    ", -'revdelete-legend' => 'دانانی بەربەستەکانی بەرچاوکەوتن', -'revdelete-hide-text' => 'داشاردنی دەقی پێداچوونەوە', -'revdelete-hide-image' => 'ناوەڕۆکی پەڕگە بشارەوە', -'revdelete-hide-name' => 'داشاردنی مەبەست و کردەوە', -'revdelete-hide-comment' => 'داشاردنی پوختەی دەستکاری', -'revdelete-hide-user' => 'شاردنەوەی ناوی بەکارهێنەری\\ئای-‌پی دەستکاریکەر', -'revdelete-hide-restricted' => 'بەرگری دراوە لە بەڕێوبەران هەر وەک ئەوانی دیکە', -'revdelete-radio-same' => '(مەیگۆڕە)', -'revdelete-radio-set' => 'بەڵێ', -'revdelete-radio-unset' => 'نا', -'revdelete-suppress' => 'بەرگری دراوە لە بەڕێوبەران هەر وەک ئەوانی دیکە', -'revdelete-unsuppress' => 'لابردنی بەربەستەکان لە سەر پێداچوونەوە گەڕێندراوەکان', -'revdelete-log' => 'هۆکار:', -'revdelete-submit' => 'خستنەکار بۆ سەر پێداچوونەوە {{PLURAL:$1|ھەڵبژێردراوەکە|ھەڵبژێردراوەکان}}', -'revdelete-logentry' => 'گۆڕانی بەرچاوکەوتنی دەستکارییەکی [[$1]]', -'logdelete-logentry' => 'بیندرانی ڕووداوە‌ گۆڕاوەکەی [[$1]]', -'revdelete-success' => "'''چۆنیەتی بیندرانی پێداچوونەوە بە سەرکەوتوویی نوێکراوە.'''", -'revdelete-failure' => "'''ناکرێ دەرکەوتنی پێداچوونەوە نوێبکرێتەوە:''' -$1", -'logdelete-success' => "'''بیندرانی لۆگ‌ بە سەرکەوتوویی داندرا.'''", -'logdelete-failure' => "'''بیندرانی لۆگ داناندرێت:''' -$1", -'revdel-restore' => 'چۆنیەتی دەرکەوتن بگۆڕە', -'pagehist' => 'مێژووی پەڕە', -'deletedhist' => 'مێژوو بسڕەوە', -'revdelete-content' => 'ناوەڕۆک', -'revdelete-summary' => 'پوختەی دەستکاری', -'revdelete-uname' => 'ناوی بەکارهێنەر', -'revdelete-restricted' => 'ئەو سنووری بەرگریانەی خستراوەتە سەر بەڕێوبەران', -'revdelete-unrestricted' => 'ئەو سنووری بەرگریانەی لابردراوە لە سەر بەڕێوبەران', -'revdelete-hid' => '$1ـی داشارد', -'revdelete-unhid' => '$1ـی ئاشکرا کرد', -'revdelete-log-message' => '$1 بۆ {{PLURAL:$2|پێداچوونەوەی|پێداچوونەوەکانی}} $2', -'logdelete-log-message' => '$1 بۆ {{PLURAL:$2|ڕووداوی|ڕووداوەکانی}} $2', -'revdelete-hide-current' => 'هەڵە لە شاردنەوەی بابەتی ڕیکەوتی $2، کات $1: ئەمە پێداچوونەوی ئێستا لەکاردایە. -ناکرێ داشاردرێت.', -'revdelete-show-no-access' => 'هەڵە لە نیشان‌دانی بابەتی ڕیکەوتی $2، کات $1: ئەم بابەتە وەک "بەرگیراو"‌. نیشان‌ کراوە. -دەسەڵاتی دەست‌پێ‌گەیشتنی ئەوەت نیە.', -'revdelete-modify-no-access' => 'هەڵە لە چاکسازی بابەتی ڕیکەوتی $2، کات $1: ئەم بابەتە وەک "بەرگیراو"‌. نیشان‌ کراوە. -دەسەڵاتی دەست‌پێ‌گەیشتنی ئەوەت نیە.', -'revdelete-modify-missing' => 'هەڵە لە چاکسازی بابەت خاوەن پێناسەی $1: لە بنکەدراو ون بووە !', -'revdelete-no-change' => "'''ئاگاداری:''' بابەتی ڕێکەوتی $2، کات $1، لە پێش‌دا خاوەن داخوازی هەلبژاردەکانی بیندرانە.", -'revdelete-concurrent-change' => 'هەڵە لە چاکسازی بابەتی ڕێکەوتی $2 کات $1: لەوانەیە کاتێ تۆ هەوڵی چاکسازیت ئەدا، کەسێکی‌تر دۆخەکەی گۆڕابێت. -تکایە چاو لە لۆگەکەی بکە.', -'revdelete-only-restricted' => 'ناتوانی لە دیتنی بابەتەکان لە لایەن بەڕێوبەرانەوە بەرگری بکەیت، مەگەر یەکێک‌تر لە هەڵبژاردەکانی بەرگری هەڵبژێریت.', -'revdelete-edit-reasonlist' => 'دەستکاری هۆکارەکانی سڕینەوە', - -# Suppression log -'suppressionlog' => 'لۆگی بەرگری‌کردن', -'suppressionlogtext' => 'لە خوارەوە لیستێک لە سڕاوە و بەرگری‌کراوانەی وا ناوەڕۆکیان لە چاو بەڕێوبەران داشاردراوە دەبینیت. -بۆ دیتنی ئەو بەرگریانەی ئێستا لە کاردایە چاو لە [[Special:IPBlockList|لیستی بەرگری ئای‌پی]] بکە.', - -# History merging -'mergehistory' => 'یەک‌خستنی مێژووەکانی لاپەڕە', -'mergehistory-header' => 'ئەم لاپەڕە دەسەڵاتی ئەوەت پێ‌دەدا پێداچوونەوەکانی مێژووی لاپەڕەیەکی مەبەستت بخەیتە سەر لاپەڕەیەکی نوێ. -ئەرخەیان ببە ئەم گۆڕان‌کاریە لاپەڕە مێژوویەکە بەردەوام دەهێڵێتەوە.', -'mergehistory-box' => 'سەر یەک‌خستنی پێداچوونەوەکانی دوو لاپەڕە:', -'mergehistory-from' => 'سەرچاوەی پەڕە', -'mergehistory-into' => 'پەڕەی مەبەست:', -'mergehistory-list' => 'ئەو مێژووی لاپەڕانە وا توانای سەر یەک‌خستنیان هەیە', -'mergehistory-merge' => 'ئەم پێداچوونەوانەی [[:$1]] دەتواندرێ بخرێتە سەر [[:$2]]. -دەتوانی لە ستوونی دوکمە ڕادیۆیەکە بۆ تەنها خستنە‌سەر پێداچوونەوەکانی ڕێکەوتێکی تایبەت یا پێش ئەوە کەڵک وەر بگریت. -لەیادت بێت کە بەکارهێنانی بەستەرەکانی ڕێن‌نیشاندەر، ستوونەکە وەک ئەوەڵ لێ‌دەکاتەوە.', -'mergehistory-go' => 'نیشان‌دانی ئەو دەستکاریانە وا توانای خستنەسەر یەکیان هەیە', -'mergehistory-submit' => 'خستنەسەریەکی پێداچوونەوەکان', -'mergehistory-empty' => 'ناتواندرێت هیچ یەک لە پێداچوونەوەکان بخرێتە ‌سەریەک.', -'mergehistory-success' => '$3 {{PLURAL:$3|پێداچوونەوەی|پێداچوونەوەی}} [[:$1]] بە سەرکەوتوویەوە خرایە سەر [[:$2]].', -'mergehistory-fail' => 'سەریەک خستنی مێژوو پێک‌نایەت، تکایە دیسان دیاریکەرەکانی لاپەڕە و کات چاو لێ بکەوە.', -'mergehistory-no-source' => 'لاپەڕەی سەرچاوەی $1 بوونی نیە.', -'mergehistory-no-destination' => 'لاپەڕەی مەبەستی $1 بوونی نیە.', -'mergehistory-invalid-source' => 'لاپەڕەی سەرچاوە دەبێ سەردێڕێکی گونجاو بێت.', -'mergehistory-invalid-destination' => 'لاپەڕەی مەبەست دەبێ سەردێڕێکی گونجاو بێت.', -'mergehistory-autocomment' => '[[:$1]] خرایە سەر [[:$2]]', -'mergehistory-comment' => '[[:$1]] خرایە سەر [[:$2]]: $3', -'mergehistory-same-destination' => 'لاپەڕەی سەرچاوە و مەبەست نابێ یەکێک بن.', -'mergehistory-reason' => 'هۆکار:', - -# Merge log -'mergelog' => 'لۆگی یەککردن', -'pagemerge-logentry' => '[[$1]] خرایە سەر [[$2]] (پێداچوونەوەکان تا $3)', -'revertmerge' => 'لەیەک جیاکردنەوە', -'mergelogpagetext' => 'لە خوارەوە دوایین مێژووی‌لاپەڕە خستنە سەر لاپەڕەیەکی‌تر، دەبینی.', - -# Diffs -'history-title' => 'مێژووی پیاچوونەوەکانی "$1"', -'difference' => '(جیاوازی نێوان پێداچوونەوەکان)', -'lineno' => 'ھێڵی $1:', -'compareselectedversions' => 'ھەڵسەنگاندنی وەشانە ھەڵبژێردراوەکان', -'showhideselectedversions' => 'نیشان‌دان\\داشاردنی پێداچوونەوەکانی هەڵبژێردراو', -'editundo' => 'پووچەڵ‌کردنەوە', -'diff-multi' => '({{PLURAL:$1|پێداچوونەوەیەکی نێوانیی|$1 پێداچوونەوەی نێوانیی}} نیشان نەدراوە)', - -# Search results -'searchresults' => 'ئەنجامەکانی گەڕان', -'searchresults-title' => 'ئەنجامەکانی گەڕان بۆ "$1"', -'searchresulttext' => 'بۆ زانیاری زیاتر دەربارەی گەڕان {{SITENAME}} ، بڕوانە لە [[{{MediaWiki:Helppage}}|{{int:help}}]].', -'searchsubtitle' => 'گەڕایت بۆ \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|هەموو ئەو پەڕانەی دەستپێدەکەن بە "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|هەموو ئەو پەڕانەی بەستەرکراون بۆ "$1"]])', -'searchsubtitleinvalid' => "گەڕایت بۆ '''$1'''", -'toomanymatches' => 'هاوتای ئەوەی داوات کرد، زۆر هەیە. تکایە داوای‌تر تاقی بکەوە.', -'titlematches' => 'سەردێڕی پەڕە پێی ئەخوا', -'notitlematches' => 'لە نێو سەردێڕەکان نەبینرا', -'textmatches' => 'هاوتاکانی دەقی لاپەڕە', -'notextmatches' => 'لە دەقی نووسراوەکان دا نەبینرا', -'prevn' => '{{PLURAL:$1|$1}}ی پێشوو', -'nextn' => '{{PLURAL:$1|$1}}ی دواتر', -'prevn-title' => '$1 {{PLURAL:$1|ئەنجامی|ئەنجامی}} پێشو', -'nextn-title' => '$1 {{PLURAL:$1|ئەنجامی|ئەنجامی}} دواتر', -'shown-title' => 'لە هەر لاپەڕە $1 {{PLURAL:$1|ئەنجام|ئەنجام}} نیشان‌ بدە', -'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) ببینە', -'searchmenu-legend' => 'ھەڵبژاردەکانی گەڕان', -'searchmenu-exists' => "'''لەم ویکیە‌دا لاپەڕەیەک هەیە کە بە \"[[:\$1]]\" ناونراوە.'''", -'searchmenu-new' => "'''لەم ویکییەدا پەڕەی « [[:$1]] » دروست بکە!'''", -'searchhelp-url' => 'Help:پێرست', -'searchmenu-prefix' => '[[Special:PrefixIndex/$1|گەڕیان لە پەڕەکانی بەم پێشگرەوە]]', -'searchprofile-articles' => 'پەڕە بە ناوەڕۆکەکان', -'searchprofile-project' => 'پەڕەکانی یارمەتی و پڕۆژە', -'searchprofile-images' => 'ڕەنگاڵە', -'searchprofile-everything' => 'ھەموو شتێک', -'searchprofile-advanced' => 'پێشکەوتوو', -'searchprofile-articles-tooltip' => 'بگەڕێ لە $1', -'searchprofile-project-tooltip' => 'بگەڕێ لە $1', -'searchprofile-images-tooltip' => 'بگەڕێ بۆ پەڕگەکان', -'searchprofile-everything-tooltip' => 'لە هەموو ناوەڕۆک بگەڕێ (تەنانەت پەڕەی وتەکانیش)', -'searchprofile-advanced-tooltip' => 'گەڕان لەناو بۆشایی‌ناوە دڵخوازەکان', -'search-result-size' => '$1 ({{PLURAL:$2|یەک وشە|$2 وشە}})', -'search-result-score' => 'پەیوەندی: $1%', -'search-redirect' => '(ئاڵوگۆڕ $1)', -'search-section' => '(بەشی $1)', -'search-suggest' => 'ئایا مەبەستت ئەمە بوو: $1', -'search-interwiki-caption' => 'پرۆژە خوشکەکان', -'search-interwiki-default' => '$1 ئەنجام:', -'search-interwiki-more' => '(زیاتر)', -'search-mwsuggest-enabled' => 'بە پێشنیارەکانەوە', -'search-mwsuggest-disabled' => 'بێ پێشنیار', -'search-relatedarticle' => 'پەیوەست', -'mwsuggest-disable' => 'پێشنیارەکانی AJAX نیشان مەدە', -'searcheverything-enable' => 'لە ھەموو بۆشایی‌‌ناوەکان دا بگەڕە', -'searchrelated' => 'پەیوەست', -'searchall' => 'هەموو', -'showingresults' => "لە خوارەوە {{PLURAL:$1|'''یەک''' ئەنجام|'''$1''' ئەنجام}} نیشان دراوە، بە دەست پێ کردن لە ژمارەی '''$2'''ەوە.", -'showingresultsnum' => "لە خوارەوە {{PLURAL:$3|'''١''' ئەنجام|'''$3''' ئەنجام}} دەبینن کە لە ئەنجامی ژمارە '''$2'''ەوە دەست{{PLURAL:$3|پێدەکات|پێدەکەن}}", -'showingresultsheader' => "{{PLURAL:$5|ئەنجامی '''$1''' لە '''$3'''|ئەنجامەکانی '''$1 - $2''' لە '''$3'''}} بۆ '''$4'''", -'nonefound' => "'''تێبینی''': لە حاڵەتی بنچینەیی تەنھا لە ھەندێک لە شوێن-‌ناوەکان گەڕان دەکرێت.
    -پێشگری ''all:'' بەکاربێنە بۆ گەڕان لە نێو ھەموو کەرستەکان (وەک پەڕەکانی وتووێژ، داڕێژەکان و هتد)، یان شوێن-‌ناوێکی دڵخواز وەک پێشگر بەکار بێنە.", -'search-nonefound' => 'ھیچ ئەنجامێک کە بە داواکارییەکەت بخوا نەدۆزرایەوە.', -'powersearch' => 'بە ھێز بگەڕە', -'powersearch-legend' => 'گەڕانی پێشکەوتوو', -'powersearch-ns' => 'گەڕان لە بۆشایی‌ناوەکانی:', -'powersearch-redir' => 'ڕەوانەکراوەکان لیست بکرێن', -'powersearch-field' => 'گەڕان بۆ', -'powersearch-togglelabel' => 'پشکنینی:', -'powersearch-toggleall' => 'ھەموو', -'powersearch-togglenone' => 'ھیچیان', -'search-external' => 'گەڕانی دەرەکی', -'searchdisabled' => 'گەڕانی {{SITENAME}} ئێستە کار ناکات. -دەتوانی بۆ ئێستا لە گەڕانی گووگڵ کەڵک وەرگری. -لەیادت بێت لەوانەیە پێرستەکانیان بۆ گەڕانی ناو {{SITENAME}}، کات‌بەسەرچوو بێت.', - -# Quickbar -'qbsettings' => 'خێرا-تووڵ', -'qbsettings-none' => 'هیچ', -'qbsettings-fixedleft' => 'چەپ‌ سەپێندراو', -'qbsettings-fixedright' => 'ڕاست سەپێندراو', -'qbsettings-floatingleft' => 'سەراوی چەپ', -'qbsettings-floatingright' => 'سەراوی ڕاست', - -# Preferences page -'preferences' => 'ھەڵبژاردەکان', -'mypreferences' => 'ھەڵبژاردەکانم', -'prefs-edits' => 'ژمارەی گۆڕانکارییەکان:', -'prefsnologin' => 'لەژوورەوە نیت', -'prefsnologintext' => 'بۆ دانانی هەڵبژاردەکانی بەکارهێنەر دەبێ [{{fullurl:{{#Special:UserLogin}}|returnto=$1}} بچیتە ژوورەوە].', -'changepassword' => 'تێپەڕوشە بگۆڕە', -'prefs-skin' => 'پێستە', -'skin-preview' => 'پێش بینین', -'prefs-math' => 'بیرکاری', -'datedefault' => 'ھەڵنەبژێردراو', -'prefs-datetime' => 'کات و ڕێکەوت', -'prefs-personal' => 'پرۆفایلی بەکارھێنەر', -'prefs-rc' => 'دوایین گۆڕانکارییەکان', -'prefs-watchlist' => 'لیستی چاودێڕییەکان', -'prefs-watchlist-days' => 'ژمارەی ڕۆژە نیشاندراوەکان لە لیستی چاودێڕییەکان:', -'prefs-watchlist-days-max' => '(ئه‌وپه‌ڕی ٧ ڕۆژە)', -'prefs-watchlist-edits' => 'ئەوپەڕی ژمارەی گۆڕانکارییەکان بۆ نیشان دان لە لیستی پەرە پێدراوی چاودێڕی:', -'prefs-watchlist-edits-max' => '(ئەوپەڕی ژمارە: ١٠٠٠)', -'prefs-watchlist-token' => 'ڕەمزی لیستی چاودێری:', -'prefs-misc' => 'جۆراوجۆر', -'prefs-resetpass' => 'تێپەڕوشە بگۆڕە', -'prefs-email' => 'ھەڵبژاردەکانی ئیمەیل', -'prefs-rendering' => 'ڕواڵەت', -'saveprefs' => 'پاشەکەوت', -'resetprefs' => 'گۆڕانکارییە پاشەکەوت نەکراوەکان پاک بکەرەوە', -'restoreprefs' => 'ھەموو تەنزیمەکان ببەرەوە بۆ حاڵەتی بنچینەیی', -'prefs-editing' => 'دەستکاریکردن', -'prefs-edit-boxsize' => 'قەبارەی پەنجەرەی گۆڕانکاری.', -'rows' => 'ڕیزەکان:', -'columns' => 'ستوونەکان:', -'searchresultshead' => 'گەڕان', -'resultsperpage' => 'ژمارەی ئەنجامەکان لە ھەر پەڕەیەک:', -'contextlines' => 'ژمارەی دێڕەکانی ھەر ئەنجام:', -'contextchars' => 'ژمارەی پیتەکانی ھەر دێڕ:', -'stub-threshold' => 'بەربەرە بۆ داڕێژانی(بایت) بەستەری ناتەواو:', -'recentchangesdays' => 'ژمارە ڕۆژە نیشاندراوەکان لە دوایین گۆڕانکارییەکان:', -'recentchangesdays-max' => '(ئەوپەڕی $1 {{PLURAL:$1|ڕۆژە|ڕۆژە}})', -'recentchangescount' => 'ژمارەی گۆڕانکارییەکان کە نیشان ئەدرێن لە حاڵەتی دیفاڵت:', -'prefs-help-recentchangescount' => 'ئەمە دوایین گۆڕانکارییەکان، مێژووی پەڕەکان و لۆگەکانیش لەبەردەگرێت.', -'prefs-help-watchlist-token' => 'بە پڕ کردنەوەی ئەم شوێنە بۆشاییە بە وشەیەکی نهێنی، فیدی RSS بۆ لیستی چاودێریەکەت درووست دەکرێت. - هەر کەس ئەو وشە نهێنیەی هەبێ دەتوانێ چاو لە لیستی چاودێریەکەت بکات، بۆیە دراوەیەکی پارێزراو هەڵیبژێرە. -فەرموو ئەمە دراوەیەکی بە هەڵکەوت درووست‌کراو کە دەتوانی کەڵکی لێ‌وەرگری: $1', -'savedprefs' => 'ھەڵبژاردەکانت پاشەکەوت کران', -'timezonelegend' => 'ناوچەکات:', -'localtime' => 'کاتی ناوچەیی:', -'timezoneuseserverdefault' => 'کەڵک وەرگرتن لە بنچینەی ڕاژەکار', -'timezoneuseoffset' => 'دیکە (ناتەواویەکان دیاری بکە)', -'timezoneoffset' => 'جیاوازی¹:', -'servertime' => 'کاتی server:', -'guesstimezone' => 'لە وێبگەڕەکە بیگرە', -'timezoneregion-africa' => 'ئەفریقا', -'timezoneregion-america' => 'ئەمریکا', -'timezoneregion-antarctica' => 'پۆڵی باشوور', -'timezoneregion-arctic' => 'پۆڵی باکوور', -'timezoneregion-asia' => 'ئاسیا', -'timezoneregion-atlantic' => 'زەریای ئەتڵەسی', -'timezoneregion-australia' => 'ئوستڕاڵیا', -'timezoneregion-europe' => 'ئەورووپا', -'timezoneregion-indian' => 'زەریای هندی', -'timezoneregion-pacific' => 'زەریای هێمن', -'allowemail' => 'ڕێگە بدە بە بەکارھێنەرانی تر کە ئیمەیلم بۆ بنێرن', -'prefs-searchoptions' => 'ھەڵبژاردەکانی گەڕان', -'prefs-namespaces' => 'بۆشایی‌ناوەکان', -'defaultns' => 'ئەگەرنا لەم بۆشایی ناوانەدا بگەڕە:', -'default' => 'بنچینەیی', -'prefs-files' => 'پەڕگەکان', -'prefs-custom-css' => 'CSSی دڵخواز', -'prefs-custom-js' => 'JSی دڵخواز', -'prefs-reset-intro' => 'دەتوانی لەم لاپەڕە بۆ گەڕانەوەی هەڵبژاردەکانت بۆ بنچینەیی ماڵپەر کەڵک وەرگریت. -گەر ئەوە بکەی ئیتر گۆڕانەکەت ناگەڕێتەوە.', -'prefs-emailconfirm-label' => 'پشتڕاست کردنەوەی ئیمەیل:', -'prefs-textboxsize' => 'قەبارەی پەنجەرەی گۆڕانکاری', -'youremail' => 'ئی‌مەیل:', -'username' => 'ناوی به‌كارهێنه‌ر:', -'uid' => 'ژمارەی بەکارھێنەر:', -'prefs-memberingroups' => 'ئەندامی {{PLURAL:$1|گرووپی|گرووپەکانی}}:', -'prefs-registration' => 'کاتی خۆتۆمارکردن:', -'yourrealname' => 'ناوی ڕاستی:', -'yourlanguage' => 'زمان', -'yourvariant' => 'زاراوە:', -'yournick' => 'نازناو', -'prefs-help-signature' => 'بۆچوونەکان لە لاپەڕەکانی وتووێژدا دەبێ بە "~~~~" دیاری بکرێن، کە دواتر خۆکار دەگۆڕێ بە واژۆکەت و مۆری کاتی.', -'badsig' => 'ئیمزاكه‌ هه‌ڵه‌یه‌، ته‌ماشای كۆدی HTML بكه‌‌', -'badsiglength' => 'واژۆکەت زۆر درێژە. -واژۆ نابێ لە $1 {{PLURAL:$1|نووسە|نووسە}} درێژتر بێت.', -'yourgender' => 'جنس:', -'gender-unknown' => 'ئاشکرا نەکراو', -'gender-male' => 'پیاو', -'gender-female' => 'ژن', -'prefs-help-gender' => 'دڵخواز: بۆ بانگ کردنی دروست بە دەستی نەرمامێر. -ئەم زانیارییە گشتی ئەبێ.', -'email' => 'ئی‌مەیل', -'prefs-help-realname' => 'ناوی ڕاستی دڵخوازە. -ئەگەر پێت خۆش بێت بیدەی، زۆرتر ڕاتدەکێشێت بۆ کارەکانت.', -'prefs-help-email' => 'دانانی ناونیشانی ئیمەیل دڵخوازانەیە، بەڵام ئەگەر تێپەڕوشەکەت لەیادکرد، بۆ نوێ کردنەوەی ئیمەیل پێویست دەبێت.
    -ھەروا دەتوانی ھەڵبژێری کە بەکارھێنەرانی دیکە بێ تێگەیشتن لە کەسایەتیت، لە پەڕەی لێدوان پێوەندیت لەگەڵ بگرن.', -'prefs-help-email-required' => 'ناونیشانی ئیمەیل پێویستە.', -'prefs-info' => 'زانیاریی سەرەتایی', -'prefs-i18n' => 'نێونەتەویی کردن', -'prefs-signature' => 'واژۆ', -'prefs-dateformat' => 'ڕازاندنەوەی ڕێکەوت', -'prefs-timeoffset' => 'قەرەبووکەری کات', -'prefs-advancedediting' => 'ھەڵبژاردەکانی پێشکەوتوو', -'prefs-advancedrc' => 'ھەڵبژاردەکانی پێشکەوتوو', -'prefs-advancedrendering' => 'هەڵبژاردە پێشکەوتووەکان', -'prefs-advancedsearchoptions' => 'هەڵبژاردە پێشکەوتووەکان', -'prefs-advancedwatchlist' => 'هەڵبژاردە پێشکەوتووەکان', -'prefs-display' => 'هەڵبژاردەکانی نیشان‌دان', -'prefs-diffs' => 'جیاوازییەکان', - -# User rights -'userrights' => 'بەڕێوەبردنی مافەکانی بەکارهێنەران', -'userrights-lookup-user' => 'بەڕێوەبردنی گرووپەکانی بەکارهێنەران', -'userrights-user-editname' => 'ناوی بەکارهێنەرێک بنووسە:', -'editusergroup' => 'گرووپەکانی بەکارهێنەر بگۆڕە', -'editinguser' => "گۆڕینی مافەکانی بەکارهێنەر بۆ '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])", -'userrights-editusergroup' => 'دەستکاری کردنی گرووپەکانی بەکارهێنەران', -'saveusergroups' => 'گرووپی بەکارهێنەران پاشەکەوت بکە', -'userrights-groupsmember' => 'ئەندامە لە:', -'userrights-groups-help' => 'دەتوانی ئەو گرووپانەی ئەم بەکار‌هێنەرە تێیدایە بگۆڕیت: -* چوارچێوەی نیشان‌کراو مانای ئەوەیە لەو گرووپەدا هەیە. -* چوارچێوەی نیشان‌نەکراو مانای ئەوەیە لەو گرووپەدا نیە. -* A * پێت‌دەڵێ ناتوانی ئەو گرووپی جارێکی دی زیادت کردووە لای‌بەری.', -'userrights-reason' => 'هۆکار:', -'userrights-no-interwiki' => 'دەسەڵاتی گۆڕینی مافەکانی بەکارهێنەر لە ویکی‌یەکانی دیکەت نیە.', -'userrights-nodatabase' => 'بنکەدراوی $1 بوونی نیە یا لەم شوێنە نیە.', -'userrights-nologin' => 'بۆ دانانی مافەکانی بەکارهێنەر دەبێ بە هەژماری بەڕێوبەری [[Special:UserLogin|بچیتە ژووروە]].', -'userrights-notallowed' => 'هەژمارەکەی تۆ دەسەڵاتی دانانی مافەکانی بەکارهێنەری نیە.', -'userrights-changeable-col' => 'ئەو گرووپانە بۆت ئەگۆڕدرێن', -'userrights-unchangeable-col' => 'ئەو گرووپانە بۆت ناگۆڕدرێن', - -# Groups -'group' => 'گرووپ:', -'group-user' => 'بەکارهێنەران', -'group-autoconfirmed' => 'بەکارھێنەرە خۆکار پەسندکراوەکان', -'group-bot' => 'بۆتەکان', -'group-sysop' => 'بەڕێوبەران', -'group-bureaucrat' => 'بورووکراتەکان', -'group-suppress' => 'چاودێرەکان', -'group-all' => '(هەموو)', - -'group-user-member' => 'بەکارھێنەر', -'group-autoconfirmed-member' => 'بەکارھێنەری خۆکار پەسەندکراو', -'group-bot-member' => 'بۆت', -'group-sysop-member' => 'بەڕێوەبەر', -'group-bureaucrat-member' => 'بورووکرات', -'group-suppress-member' => 'چاودێر', - -'grouppage-user' => '{{ns:project}}:بەکارھێنەران', -'grouppage-autoconfirmed' => '{{ns:project}}:بەکارهێنەرانی خۆکار-بڕواکراو', -'grouppage-bot' => '{{ns:project}}:بۆتەکان', -'grouppage-sysop' => '{{ns:project}}:بەڕێوبەران', -'grouppage-bureaucrat' => '{{ns:project}}:بورووکراتەکان', -'grouppage-suppress' => '{{ns:project}}:چاودێر', - -# Rights -'right-read' => 'خوێندنەوەی پەڕەکان', -'right-edit' => 'دەستکاری کردنی پەڕەکان', -'right-createpage' => 'دروست کردنی پەڕەکان (کە پەڕەی لێدوان نین)', -'right-createtalk' => 'دروست کردنی پەڕەکانی لێدوان', -'right-createaccount' => 'دروست کردنی ھەژماری بەکارھێنەریی نوێ', -'right-minoredit' => 'بچووک دیاری کردنی گۆڕانکارییەکان', -'right-move' => 'گواستنەوەی پەڕەکان', -'right-move-subpages' => 'گواستنەوەی لاپەڕەکان دەگەڵ ژێرلاپەڕەکانی', -'right-move-rootuserpages' => 'گواستنەوەی بنەرەتی لاپەڕەکانی بەکارهێنەر', -'right-movefile' => 'گواستنەوەی پەڕگەکان', -'right-suppressredirect' => 'درووست‌ نەکردنی رەوانەکەر لە لاپەڕەی سەرچاوە کاتی گواستنەوەی لاپەڕەکان', -'right-upload' => 'بارکردنی پەڕگەکان', -'right-reupload' => 'سەرنووسینی ئەو پەڕگانەی وا هەن', -'right-reupload-own' => 'سەرنووسینی ئەو پەڕگانەی وا هەن کاتێ کەسێ خۆی باریان دەکات', -'right-reupload-shared' => 'بەتاڵ‌کردنەوەی پەڕگە لە سەر میدیا هاوبەشە ناوخۆکان', -'right-upload_by_url' => 'بارکردنی پەرگە لە ئەدرەسێکی سەر تۆڕەوە', -'right-purge' => 'خاڵی‌کردنی کاشی وێبگە بۆ لاپەڕەیەک بێ بڕواپێ‌کران', -'right-autoconfirmed' => 'دەستکاری لاپەڕەکانی‌ نیوەپارێزراو', -'right-bot' => 'هەڵسوکەوت لەگەڵ‌کران وەک پرۆسەیەکی خۆکار', -'right-nominornewtalk' => 'دەستکاری بچووکی لاپەڕەی وتووێژ بەو شێوەی نەبێتە هۆی درووست‌بوونی پەیامی نوێ', -'right-apihighlimits' => 'خستنە‌کاری سنووری زیاتر بۆ داخوازیەکانی API', -'right-writeapi' => 'کەڵک وەر گرتن لە نووسینی API', -'right-delete' => 'سڕینەوەی پەڕەکان', -'right-bigdelete' => 'سڕینەوە و هاوردنەوەی پێداچوونەوەیکی تایبەتی لاپەڕەکان', -'right-deleterevision' => 'سڕینەوە و هاوردنەوەی پێداچوونەوەیکی تایبەتی لاپەڕەکان', -'right-deletedhistory' => 'دیتنی دراوە سڕاوەکانی مێژوو بێ دەقە هەڵواسراوەکانی', -'right-browsearchive' => 'گەڕانی ناو لاپەڕە سڕاوەکان', -'right-undelete' => 'هاوەردنەوەی لاپەڕەیەک', -'right-suppressrevision' => 'چاوپێداخشان و هاردنوەی ئەو لاپەڕانەی لە بەڕێوبەران داشاردرابوو.', -'right-suppressionlog' => 'دیتنی لۆگە ئەهلیەکان', -'right-block' => 'بەربەستنی بەکارھێنەرانی تر لە دەستکاری کردن', -'right-blockemail' => 'بەرگری‌کردنی بەکارهێنەرێک لە ناردنی ئی‌مەیل', -'right-hideuser' => 'بەربەست‌کردنی ناوێکی بەکارهێنەری، داشاردنی لە بەرچاوی هەموان', -'right-ipblock-exempt' => 'لادان لە بەرگریەکانی ئای‌پی، بەرگریە خۆکارەکان و بەرگریە ڕیزەکان', -'right-proxyunbannable' => 'لادان لە بەرگری خۆکاری پرۆکسیەکان', -'right-protect' => 'گۆڕانی ئاستی پارێزراوی و دەستکاری لاپەڕە پارێزراوەکان', -'right-editprotected' => 'دەستکاری لاپەڕە پارێزراوەکان (بێ پاراستنی زنجیری)', -'right-editinterface' => 'گۆڕانی ڕووکاری بەکارهێنەر', -'right-editusercssjs' => 'دەستکاری پەڕگەکانی CSS و JSـی بەکارهێنەرانی دیکە', -'right-editusercss' => 'گۆڕانی پەڕگەکانی CSSـی دیکەی بەکارهێنەر', -'right-edituserjs' => 'گۆڕانی پەڕگەکانی JSـی دیکەی بەکارهێنەر', -'right-rollback' => 'بەخێرایی گەڕانەوەی دەستکاریەکانی دوایین بەکارهێنەر کە لاپەڕەیەکی تایبەتی دەستکاری کردە', -'right-markbotedits' => 'نیشان‌کردنی دەستکاریە گەڕێنراوەکان وەک دەستکاریەکانی بۆت (bot)', -'right-noratelimit' => 'کاریگەری وەرنەگرتن لە سنوورەکانی ئاست', -'right-import' => 'هێنانەناوەی لاپەڕە لە ویکی‌یەکانی دیکە', -'right-importupload' => 'هێنانەناوەی لاپەڕە لە پەڕگەیەکی بارکراو', -'right-patrol' => 'لەژێرچاودێری نیشان‌کردنی دەستکاریەکانی کەسانی‌تر', -'right-autopatrol' => 'خۆکار لەژێرچاودێری نیشان‌کردنی دەستکاریەکانی کەسێک بۆخۆی', -'right-patrolmarks' => 'دیتنی دوایین دەستکاریەکان وا لەژێرچاودێری نیشان‌کراون', -'right-unwatchedpages' => 'دیتنی لیستێک لەو لاپەڕانەی چاودێری ناکرێن', -'right-trackback' => 'ناردنی ڕێچکەیەک', -'right-mergehistory' => 'سەریەک‌خستنی میژووی لاپەڕەکان', -'right-userrights' => 'دەستکاری مافەکانی هەموو بەکارهێنەران', -'right-userrights-interwiki' => 'دەستکاری مافەکانی بەکارهێنەریی بەکارهێنەران لە ویکی‌یەکانی دیکە‌دا', -'right-siteadmin' => 'داخستن و کردنەوەی بنکەدراو', -'right-reset-passwords' => 'ڕیکخستنەوەی تێپەڕوشەی بەکارهێنەرانی دیکە', -'right-override-export-depth' => 'هەناردنی لاپەڕەکان کە لاپەڕەکانی بەستەر پێ‌دراو تا قووڵایی 5 لەخۆ بگرێت', -'right-versiondetail' => 'نیشان‌دانی زانیاریەکانی وەشانی بڵاوەی نەرم‌ئامێر', - -# User rights log -'rightslog' => 'لۆگی مافەکانی بەکارهێنەر', -'rightslogtext' => 'ئەمە لۆگی دەستکاری مافەکانی بەکار‌هێنەرە.', -'rightslogentry' => 'بۆ $1 ئەندامەتی گرووپی $2 گۆڕدرا بۆ $3', -'rightsnone' => '(ھیچ)', - -# Associated actions - in the sentence "You do not have permission to X" -'action-read' => 'خوێندنەوەی ئەم پەڕە', -'action-edit' => 'دەستکاری ئەم پەڕە', -'action-createpage' => 'درووست‌کردنی لاپەڕە', -'action-createtalk' => 'درووست‌کردنی لەپەڕەکانی وتووێژ', -'action-createaccount' => 'درووست‌کردنی هەژمارەی ئەم بەکارهێنەرە', -'action-minoredit' => 'نیشان‌کردنی ئەم دەستکاریە وەک بچووک', -'action-move' => 'گواستنەوەی ئەم پەڕە', -'action-move-subpages' => 'گواستنەوەی ئەم لاپەڕە و ژێرلاپەڕەکانی', -'action-move-rootuserpages' => 'گواستنەوەی بنەرەتی لاپەڕەکانی بەکارهێنەر', -'action-movefile' => 'ئەم پەڕگەیە بگوازەوە', -'action-upload' => 'ئەم پەڕەیە بار بکە', -'action-reupload' => 'سەرنووسینی ئەم پەڕگە وا هەیە', -'action-reupload-shared' => 'بەتاڵ‌کردنی ئەم پەڕگە لە‌سەر شوێنێکی هاوبەش', -'action-upload_by_url' => 'بارکردنی ئەم پەرگە لە ئەدرەسێکی سەر تۆڕەوە', -'action-writeapi' => 'کەڵک وەر گرتن لە نووسینی API', -'action-delete' => 'ئەم پەڕەیە بسڕەوە', -'action-deleterevision' => 'سڕینی ئەم پێداچوونەوە', -'action-deletedhistory' => 'دیتنی مێژووی سڕاوەی ئەم لاپەڕە', -'action-browsearchive' => 'گەران لە نێو لاپەڕە سڕاوەکان', -'action-undelete' => 'گەڕانەوەی ئەم لاپەڕە', -'action-suppressrevision' => 'چاوپێداخشان و هاردنوەی ئەم لاپەڕە شاراوە', -'action-suppressionlog' => 'دیتنی ئەم لۆگە ئەهلیە', -'action-block' => 'بەربەست کردنی ئەم بەکارهێنەرە بۆ دەستکاری‌کردن', -'action-protect' => 'گۆڕانی ئاستی پارێزراوی بۆ ئەم لاپەڕە', -'action-import' => 'هێنانەناوەی ئەم لاپەڕە لە ویکی‌یەکی دیکە', -'action-importupload' => 'هێنانەناوەی ئەم لاپەڕە لە پەڕگەیەکی بارکراو', -'action-patrol' => 'لەژێرچاودێری نیشان‌کردنی دەستکاریەکانی کەسانی‌تر', -'action-autopatrol' => 'دەستکاریەکانت وەک لەژێرچاودێری نیشان کراون', -'action-unwatchedpages' => 'دیتنی لیستێک لەو لاپەڕانەی چاودێری ناکرێن', -'action-trackback' => 'ناردنی ڕێچکەیەک', -'action-mergehistory' => 'سەریەک‌خستنی میژووی ئەم لاپەڕە', -'action-userrights' => 'دەستکاری مافەکانی هەموو بەکارهێنەران', -'action-userrights-interwiki' => 'دەستکاری مافەکانی بەکارهێنەریی بەکارهێنەران لە ویکی‌یەکانی دیکە‌دا', -'action-siteadmin' => 'داخستن یا کردنەوەی بنکەدراو', - -# Recent changes -'nchanges' => '$1 {{PLURAL:$1|گۆڕانکاری|گۆڕانکاری}}', -'recentchanges' => 'دوایین گۆڕانکارییەکان', -'recentchanges-legend' => 'هەڵبژاردنەکانی دوا گۆڕانکارییەکان', -'recentchangestext' => 'دواکەوتنی دوایین گۆڕانکارییەکان لەسەر ویکی لەم لاپەڕەدا.', -'recentchanges-feed-description' => 'دوای دوایین گۆڕانکارییەکانی ئەم ویکیە بکەوە لەم «فید»ەوە.', -'recentchanges-label-legend' => 'پێرست: $1.', -'recentchanges-legend-newpage' => '$1 - لاپەڕەی نوێ', -'recentchanges-label-newpage' => 'ئەم دەستکاریە لاپەڕەیەکی نوێی درووست‌کرد', -'recentchanges-legend-minor' => '$1 - دەستکاریی بچووک', -'recentchanges-label-minor' => 'ئەمە دەستکاریەکی بچووکە', -'recentchanges-legend-bot' => '$1 - دەستکاریی بۆت', -'recentchanges-label-bot' => 'ئەم دەستکاریە لە لایەن بۆتەوە پێک هاتووە', -'recentchanges-legend-unpatrolled' => '$1 - دەستکاری چاودێری‌نەکراو', -'recentchanges-label-unpatrolled' => 'ئەم دەستکاریە هێشتا نەڕۆشتەتە ژێر چاودێری', -'rcnote' => "لە خوارەوەدا {{PLURAL:$1|'''۱''' گۆڕانکاری |دوایین '''$1''' گۆڕانکارییەکان}} لە دوایین {{PLURAL:$2|ڕۆژ|'''$2''' ڕۆژەوە}} ، تا $5، $4 دەبینن.", -'rcnotefrom' => "ئەوی‌ خوارەوە گۆڕانکارییەکانە لە '''$2''' بۆ ئێستا (هەتا '''$1''' نمایشت).", -'rclistfrom' => 'گۆڕانکارییە نوێکان کە لە $1ەوە دەست پێدەکەن نیشان بدە.', -'rcshowhideminor' => 'دەستکارییە بچووکەکان $1', -'rcshowhidebots' => 'بۆتەکان $1', -'rcshowhideliu' => 'بەکارھێنەرە لە ژوورەکان $1', -'rcshowhideanons' => 'بەکارھێنەرە نەناسراوەکان $1', -'rcshowhidepatr' => 'گۆرانکارییە کۆنترۆڵکراوەکان $1', -'rcshowhidemine' => 'دەستکارییەکانی من $1', -'rclinks' => 'دوایین $1 گۆڕانکارییەکانی دوایین $2 ڕۆژی
    $3', -'diff' => 'جیاوازی', -'hist' => 'مێژوو', -'hide' => 'بشارەوە', -'show' => 'نیشان بدە', -'minoreditletter' => 'ب', -'newpageletter' => 'ن', -'boteditletter' => '.بۆت', -'number_of_watching_users_pageview' => '[$1 چاودێر لەسەر {{PLURAL:$1|بەکارهێنەر|بەکارهێنەر}}]', -'rc_categories' => 'بەرتەسک‌کردنەوە بە هاوپۆلەکان (به "|" جودای بکەوە‌)', -'rc_categories_any' => 'هەرکام', -'newsectionsummary' => '/* $1 */ بەشی نوێ', -'rc-enhanced-expand' => 'وردەکارییەکان پیشان بدە (پێویستی بە جاڤاسکریپتە)', -'rc-enhanced-hide' => 'وردەکارییەکان بشارەوە', - -# Recent changes linked -'recentchangeslinked' => 'گۆڕانکارییە پەیوەندیدارەکان', -'recentchangeslinked-feed' => 'گۆڕانکارییە پەیوەندیدارەکان', -'recentchangeslinked-toolbox' => 'گۆڕانکارییە پەیوەندیدارەکان', -'recentchangeslinked-title' => 'گۆڕانکارییە پەیوەندیدارەکان بە "$1" ـەوە', -'recentchangeslinked-noresult' => 'هیچ گۆڕانکارییەک لە لاپەڕەکانی بەستەر پێ‌دراو، لە درێژەی ماوەی دراوە.', -'recentchangeslinked-summary' => "ئەم لاپەڕە تایبەتە، دوایین گۆڕانکارییەکان لەو لاپەڕانە نیشان ئەدا کە بەستەریان داوە بەم لاپەڕە. -لاپەڕەکانی ناو [[Special:Watchlist|لیستی چاودێڕییەکانت]] '''ئەستوورن'''.", -'recentchangeslinked-page' => 'ناوی پەڕە:', -'recentchangeslinked-to' => 'نیشاندانی گۆڕانکارییەکانی ئەو پەڕگانە کە لینک دراون بەم پەڕگەوە', - -# Upload -'upload' => 'پەڕگەیەک بار بکە', -'uploadbtn' => 'پەڕگە بار بکە', -'reuploaddesc' => 'هەڵوەشانەوەی بارکردن و گەڕانەوە بۆ فۆرمی بارکردن', -'upload-tryagain' => 'پێناسەی گۆڕدراوی پەڕگە بنێرە', -'uploadnologin' => 'لەژوورەوە نیت', -'uploadnologintext' => 'بۆ بارکردنی پەڕگەکان ئەشێ [[Special:UserLogin|لە ژوورەوە بیت]].', -'upload_directory_missing' => 'لقی بارکردن ($1) ون بووە و ڕاژەکاری‌وێب بۆی درووست ناکرێت.', -'upload_directory_read_only' => 'ڕاژەکاری‌وێب دەسەڵاتی نووسینی سەر لقی بارکردنی ($1) نیە.', -'uploaderror' => 'ھەڵە لە بارکردن دا', -'uploadtext' => "فۆرمی خوارەوە بەکاربێنە بۆ بارکردنی پەڕگەکان.
    -بۆ بینینی و گەڕان لەو پەڕگانەی پێشتر بار کراون، بڕۆ بۆ [[Special:FileList|لیستی پەڕگە بارکراوەکان]]، ھەروەھا [[Special:Log/upload|ڕەشنووسی بارکردنەکان]] و [[Special:Log/delete|ڕەشنووسی سڕینەوەکان]].

    - -بۆ بەکارھێنانی پەڕگەیەک لە پەڕەیەکدا، بەستەرێک بە یەکێک لەم شێوازانەی خوارەوە بە کار بێنە: -* '''[[{{ns:file}}:File.jpg]]''' بۆ بەکارهێنانی وەشانی تەواوی پەڕگە -* '''[[{{ns:file}}:File.png|200px|thumb|left|alt text]]''' بۆ بەکارهێنانی بە پانتایی ٢٠٠ پیکسەل لە چوارچێوەیەک لە لێواری چەپ بە 'alt text' وەک شرۆڤە -* '''[[{{ns:media}}:File.ogg]]''' بۆ بەستەرپێدان بە پەڕگەیەک بێ نیشاندانی خۆی پەڕگەکە", -'upload-permitted' => 'جۆرە پەڕگە ڕێگەپێدراوەکان: $1.', -'upload-preferred' => 'جۆرە پەڕگانەی بە باشتر دەزانرێن: $1.', -'upload-prohibited' => 'جۆرە پەڕگانەی قەدەغە کراون: $1.', -'uploadlog' => 'لۆگی بارکردن', -'uploadlogpage' => 'لۆگی بارکردن', -'uploadlogpagetext' => 'لەخوارەوە لیستی دوایین بارکراوەکان دەبینی. -بۆ ئەوەی چاوێکیان لێ بکەی، [[Special:NewFiles|گالەری پەڕگە نوێکان]] ببینە.', -'filename' => 'ناوی پەڕگە', -'filedesc' => 'پوختە', -'fileuploadsummary' => 'پوختە:', -'filereuploadsummary' => 'گۆرانکارییەکانی پەڕگە:', -'filestatus' => 'بارودۆخی مافی لەبەرگرتنەوە:', -'filesource' => 'سەرچاوە:', -'uploadedfiles' => 'پەڕگە بارکراوەکان', -'ignorewarning' => 'چاوپۆشان لە ئاگادارییەکان و پاشەکەوت کردن بە هەر شێوەیەک', -'ignorewarnings' => 'گوێ مەدە بە ئاگادارییەکان', -'minlength1' => 'ناوی پەڕگەکان دەبێ لانیکەم یەک پیت ببێت.', -'illegalfilename' => 'ناوی‌پەڕگەی "$1" پیتێکی تێدایە کە ڕێگەنەدراوە بۆ سەردێڕی لاپەڕە بەکاربێت. -تکایە ناوی پەڕگەکە بگۆڕە و دیسان باری بکەوە.', -'badfilename' => 'ناوی پەڕگە بە "$1" گۆڕا .', -'filetype-badmime' => 'ڕێگە نەدراوە پەڕگەی "$1" جۆری MIME بار بکرێت.', -'filetype-bad-ie-mime' => 'ناتوانین ئەم پەڕگە باربکەین لەبەر ئەوەی وێبگەڕی Internet Explore ئەوە وەک "$1" دەناسێت کە ڕێگەنەدراوەیە و جۆرە پەڕگەیەکی مەترسی‌دارە.', -'filetype-unwanted-type' => "'''\".\$1\"''' جۆرە پەڕگەی نەخوازراوە. -\$2، ئەو جۆرە {{PLURAL:\$3|پەڕگەیە|پەڕگانەیە}} وا بە باش‌ دازاندرێت.", -'filetype-banned-type' => "'''\".\$1\"''' جۆرە پەڕگەی ڕێگە پێ‌نەدراوە‌. -\$2، ئەو جۆرە {{PLURAL:\$3|پەڕگەیە|پەڕگانەیە}} وا ڕێگە دراوە.", -'filetype-missing' => 'پەڕگەکە پاشگری نییە (وەک ".jpg").', -'large-file' => 'پێشنیار دەکرێت قەبارەی پەڕگەکان زیاتر لە $1 نەبێت؛ -قەبارەی ئەم پەڕگە $2.', -'largefileserver' => 'ئەم پەڕگە گەورەتر لەوەیە کە ڕاژەکار ڕێگەدەدات.', -'emptyfile' => 'ئەو پەڕگەی بارت‌کرد لەوەدەچێ بەتاڵ و خاڵی بێت. -شایەد ئەوە جۆرە هەڵەیەک لە ناوی لاپەڕەکە بێت. -گەر بە ڕاستی دەتەوێ ئەو پەڕگە باربکەی جارێکی‌کە چاوی لێ‌بکەوە.', -'fileexists' => "پەڕگەیەک هەر بەو ناوە‌ لە پێش‌دا هەیە، تکایە گەر ئەرخەیان نیت بۆ گۆڕینی، چاوێک لە '''[[:$1]]''' بکە. -[[$1|thumb]]", -'filepageexists' => "پەڕەی ناساندن بۆ ئەم پەڕگە پێشتر لە '''[[:$1]]''' درووستکراوە، بەڵام پەڕگەیەک بەو ناوەوە ئێستا نادۆزرێتەوە. -ئەو پوختەی کە نووسیوتە لە پەڕەی ناساندن بەرچاو ناکەوێت. -گەر دەتەوێ پوختەکەت بەرچاو کەوێت دەبێ خۆت دەستی دەستکاری بکەی. -[[$1|thumb]]", -'fileexists-extension' => "پەڕگەیەک هەر بەو ناوە هەیە: [[$2|thumb]] -* ناوی ئەو پەڕگەی باری ئەکەی:'''[[:$1]]''' -* ناوی ئەو پەڕگەی ئێستا هەیە:'''[[:$2]]''' -تکایە ناوێکی دیکە هەڵبژێرە.", -'fileexists-thumbnail-yes' => "لەوە دەچێ ئەم پەڕگە وێنەیەکی بچووک‌کراوە بێت ''(هێما)''. [[$1|thumb]] -تکایە چاو لە پەڕگەی '''[[:$1]]''' بکه.‌ -گەر ئەوەی چاوت لێ‌کرد قەبارەی ڕەسەنی هەر ئەو وێنەیە، پێویست ناکات دیسان هێماکەی باربکەی.", -'file-thumbnail-no' => "دەستپێکی ناوی ئەم پەڕگە ئەوەیە: '''$1''' -لەوە دەچێ ئەم پەڕگە وێنەیەکی بچووک‌کراوە بێت ''(هێما)''. -گەر ئەو وێنەت لە قەبارەی ڕەسەنی‌ خۆی‌دا هەیه،‌ تکایە ئەوە بار بکه،‌ دەنا ناوی پەڕگەکە بگۆڕە.", -'fileexists-forbidden' => 'پەڕگەیەک بەو ناوە لە پێش‌دا هەیە و سەرنووسین ناکرێت. -گەر هێشتا دەتەوێ پەڕگەکەت باربکەی، تکایە بگەڕێ دواوە و ناوێکی نوێ بەکاربهێنە. -[[File:$1|thumb|center|$1]]', -'fileexists-shared-forbidden' => 'پەڕگەیەک بەو ناوە لە پێش‌دا لە شوێنی پەڕگە هاوبەشەکان هەیه. -گەر هێشتا دەتەوێ پەڕگەکەت باربکەی، تکایە بگەڕێ دواوە و ناوێکی نوێ بەکاربهێنە. -[[File:$1|thumb|center|$1]]', -'file-exists-duplicate' => 'ئەم پەڕگەیە لێ‌گرتنەوەی ئەم {{PLURAL:$1|پەڕگەیە|پەڕگانەیە}}:', -'file-deleted-duplicate' => 'ئەم پەڕگەیە ڕێک وەک ئەم پەڕگە ([[$1]]) دەچێت کە لەم دواییانەدا سڕاوەتەوە. -پێش دەست‌پێ‌کردنی دیسان بارکردنەوەی، تکایە چاو لە مێژووی سڕینەوەی ئەو پەڕگە بکە.', -'successfulupload' => 'بارکردنی سەرکەوتوو', -'uploadwarning' => 'ئاگادارییەکانی بارکردن', -'savefile' => 'پەڕگە پاشەکەوت بکە', -'uploadedimage' => '«[[$1]]» بار کرا', -'overwroteimage' => 'وەشانێکی نوێی «[[$1]]» بار کرد', -'uploaddisabled' => 'بارکردن قەدەخە کراوە', -'uploaddisabledtext' => 'بارکردنی پەڕگەکان لە کار خستراوە.', -'php-uploaddisabledtext' => 'بارکردنی پەڕگەکان لە PHPدا لە کار خستراوە. -تکایە چاو لە هەڵبژاردەکانی بارکردنی_پەڕگەکان بکە.', -'uploadscripted' => 'ئەم پەڕگە HTML یان کۆدی سکریپتی لەخۆگرتووە کە لەوانەیە ببێتە هۆی هەڵە تێگەیشتنی هێندێ وێبگەڕەکان.', -'uploadvirus' => 'ئەم پەڕگە ڤایرۆسی هەیە! وردەکاری: $1', -'upload-source' => 'پەڕگەی سەرچاوە', -'sourcefilename' => 'ناوی پەڕگەی سەرچاوە:', -'destfilename' => 'ناوی مەبەست:', -'upload-maxfilesize' => 'ئەو پەری قەبارەی فایل: $1', -'upload-description' => 'پێناسەی پەڕگە', -'upload-options' => 'ھەڵبژاردەکانی بارکردن', -'watchthisupload' => 'چاودێریی ئەم پەڕگە بکە', -'filewasdeleted' => 'پەڕگەیەک بەم ناوە لەم دواییانەدا بارکرا و بە خێرایی سڕایەوە. -باشتر وایە پێش هەوڵی دووبارە بۆ بارکردن سەرنجی $1 بدەی.', -'upload-wasdeleted' => "'''ئاگاداری: خەریکی پەڕگەیەک باردەکەی کە لەم دواییانەدا سڕاوەتەوە.''' - -پێش بارکردن ئەرخەیان ببە کە بارکردنی ئەو پەڕگە بەسوودە. -لۆگی سڕینەوەی ئەم پەڕگە بۆ ئاسوودەیی لێرە دانراوە:", -'filename-bad-prefix' => "دەستپێکی ناوی ئەو پەڕگەی باری دەکەی '''\"\$1\"'''، کە ناوێکی ناسێنەر نیە؛ ئەو جۆرە ناوە زۆربەی کات کامێرا دیجیتاڵەکان خۆکار بەکاری‌دەبەن. -تکایە ناوێک هەڵبژێرە کە زانیاریی زیاتر بدات سەبارەت بە پەڕگەکەت.", - -'upload-proto-error' => 'پرۆتۆکۆڵی هەڵە', -'upload-proto-error-text' => 'بۆ بارکردن لە تۆڕ، URL دەبێ بە http:// یان ftp:// دەست‌پێ‌بکات.', -'upload-file-error' => 'ھەڵەی ناوخۆیی', -'upload-file-error-text' => 'کێشەیەکی ناوخۆ ڕووی‌دا وەختێ هەوڵی درووست‌کردنی پەڕگەی کاتی ئەدرا لە سەر ڕاژەکار. -تکایە پەیوەندی بکە بە [[Special:ListUsers/sysop|بەڕێوبەر]].', -'upload-misc-error' => 'هەڵەیەکی نەناسراوی بارکردن', -'upload-misc-error-text' => 'هەڵەیەکی نەناسراو لە کاتی بارکردن ڕووی‌دا. -تکایە لە درووست‌بوون و دەست‌پێ گەیشتنی URL ئەرخەیان ببە و دیسان تاقی‌بکەوە. -گەر کێشەکە هەر بەردەوام بوو پەیوەندی بکە بە [[Special:ListUsers/sysop|بەڕێوبەر]].', -'upload-too-many-redirects' => 'URL ڕەوانەکەری زۆری لەخۆ گرتووە', -'upload-unknown-size' => 'قەبارەی نادیار', -'upload-http-error' => 'هەڵەیەکی HTTP ڕووئ داوە: $1', - -# img_auth script messages -'img-auth-accessdenied' => 'تێپه‌ربوون ره‌تکرایه‌وه‌', -'img-auth-nofile' => 'فایلی "$1" بوونی نیه‌', -'img-auth-isdir' => 'هه‌وڵ ده‌ده‌ی بۆ کردنه‌وه‌ی بوخچه‌ی "$1" له‌ کاتێکدا ته‌نیا کردنه‌وه‌ی فایل رێپێدراوه‌', - -# Some likely curl errors. More could be added from -'upload-curl-error6' => 'توانای دەست‌پێ‌گەیشتنی URL نیە', -'upload-curl-error6-text' => 'ئەو URL کە ڕاچاوت کردووە توانای دەست‌پێ‌گەیشتنی نییە. -تکایە دیسان سەرنجی بدەوە کە URL درووست‌ نووسراوە و ماڵپەڕەکە بەردەوام کار دەکات.', -'upload-curl-error28' => 'کات‌بەسەرچوونی بارکردن', -'upload-curl-error28-text' => 'ئەو ماڵپەرە کاتی زۆری خایاند بۆ وەڵام دانەوە. -تکایە ئەرخەیان بە کە ماڵپەڕ بەردەوامە لە کارکردن، نەختێک ڕاوەستە و دیسان تاقی کەوە. -لەوانەیە لە کاتێ کە کەمتر سەرقاڵ بێت تاقی بکەیتەوە باشتر بێت.', - -'license' => 'بەڵگەنامە:', -'license-header' => 'بەڵگەنامە', -'nolicense' => 'هیچ‌کام هەڵنەبژاردراوە', -'license-nopreview' => '(پێشبینین ئامادەی کەڵک وەرگرتن نییە)', -'upload_source_url' => ' (URLـی بەکار، بۆ دەست‌پێگەیشتنی گشتی)', -'upload_source_file' => ' (پەڕگەیەک لەسەر کۆمپیوتەرەکەت)', - -# Special:ListFiles -'listfiles-summary' => 'ئەم لاپەڕە تایبەتە هەموو لاپەڕە بارکراوەکانت نیشان ئەدات. -لەسەر نمای بنچینەیی، دوایین بارکراوەکان لە سەرووی لیستەکە دەبیندرێن. -بە کرتە لەسەر سەرپەڕی ستوونەکانی دەتوانی شێوازی چنینەکەیان بگۆڕیت.', -'listfiles_search_for' => 'گەڕان بۆ ناوی مێدیا:', -'imgfile' => 'پەڕگە', -'listfiles' => 'لیستی پەرگەکان', -'listfiles_date' => 'ڕێکەوت', -'listfiles_name' => 'ناو', -'listfiles_user' => 'بەکارھێنەر', -'listfiles_size' => 'قەبارە', -'listfiles_description' => 'پەسن', -'listfiles_count' => 'وەشانەکان', - -# File description page -'file-anchor-link' => 'پەڕگە', -'filehist' => 'مێژووی پەڕگە', -'filehist-help' => 'کرتە بکەسەر ڕێکەوت\\کات بۆ بینینی پەڕگەکە بەو شێوەی لەو کاتەدا بووە.', -'filehist-deleteall' => 'هەمووی بسڕەوە', -'filehist-deleteone' => 'سڕینەوە', -'filehist-revert' => 'پێچەوانەکردنەوە', -'filehist-current' => 'هەنووکە', -'filehist-datetime' => 'ڕێکەوت/کات', -'filehist-thumb' => 'ھێما', -'filehist-thumbtext' => 'ھێما بۆ وەشانی $1', -'filehist-nothumb' => 'هێما نییه', -'filehist-user' => 'بەکارهێنەر', -'filehist-dimensions' => 'دوورییەکان', -'filehist-filesize' => 'قەبارەی پەڕگە', -'filehist-comment' => 'لێدوان', -'filehist-missing' => 'ون‌بوونی پەڕه', -'imagelinks' => 'بەستەرەکانی پەڕگە', -'linkstoimage' => 'لەم {{PLURAL:$1|پەڕەی خوارەوە بەستەر دراوە|$1 پەڕەی خوارەوە بەستەر دراوە}} بۆ ئەم پەڕگە:', -'linkstoimage-more' => 'زیاتر لە $1 {{PLURAL:$1|بەستەری لاپەڕە|بەستەری لاپەڕە}} بۆ ئەم پەڕگه. -ئەم لیستە {{PLURAL:$1|یەکەم لاپەڕەی بەستەرە|یەکەم لاپەڕە $1 بەستەرە}} بۆ تەنها یەم پەڕگە. -هەروا [[Special:WhatLinksHere/$2|لیستی تەواو]] ئامادەی کەڵک وەرگرتنە.', -'nolinkstoimage' => '‌لاپەڕەیەک نەدۆزرایەوە کە بەستەری هەبێ بۆ ئەم پەڕگە.', -'morelinkstoimage' => '[[Special:WhatLinksHere/$1|بەستەری زیاتر]] ببینە بۆ ئەم پەڕگە.', -'redirectstofile' => 'ئەم {{PLURAL:$1|پەڕگە ڕەوانکەرە|پەڕگانە ڕەوانکەرن}} بۆ ئەم پەڕگە:', -'duplicatesoffile' => 'ئەم {{PLURAL:$1|پەڕگە دووبارەکرنەوەیەکی|پەڕگانە دووبارەکردنەوەی}} ئەم پەڕگەن ([[Special:FileDuplicateSearch/$2|وردەکاری زیاتر]]):', -'sharedupload' => 'ئەم پەڕگە لە $1ەوەیە و لەوە دەچێ لە پرۆژەکانی دیکەش بەکار ببرێت.', -'sharedupload-desc-there' => 'ئەم پەڕگە لە $1ەوەیە و لەوە دەچێ لە پرۆژەکانی دیکەش بەکار ببرێت. -تکایە بۆ زانیاریی زیاتر چاو بکە لە [$2 لاپەڕەی ناساندنی پەڕگە].', -'sharedupload-desc-here' => 'ئەم پەڕگە لە $1ەوەیە و لەوە دەچێ لە پرۆژەکانی دیکەش بەکار ببرێت. -لە خوارەوە پێناسەکەی کە لە [$2 لاپەڕەی ناساندنی پەڕگە] هەیە، دەبینیت.', -'filepage-nofile' => 'پەڕگەیەک بەم ناوە نیە.', -'filepage-nofile-link' => 'پەڕگەیەک بەم ناوە نیە بەڵام دەتوانی [$1 باری بکەی].', -'uploadnewversion-linktext' => 'وەشانێکی نوێی ئەم پەڕەیە بار بکە', -'shared-repo-from' => 'لە لایەن $1', -'shared-repo' => 'شوێنێکی هاوبەشی', - -# File reversion -'filerevert' => 'پێچەوانەکردنەوەی $1', -'filerevert-backlink' => '→ $1', -'filerevert-legend' => 'پێچەوانەکردنەوەی پەڕگە', -'filerevert-intro' => "خەریکی پەڕگەی '''[[Media:$1|$1]]''' دەگەڕینیتەوە بۆ [$4 وەشانی $3، $2].", -'filerevert-comment' => 'هۆکار:', -'filerevert-defaultcomment' => 'گەڕێندراوە بۆ وەشانی $2، $1', -'filerevert-submit' => 'گەڕاندنەوە', -'filerevert-success' => "'''[[Media:$1|$1]]''' گەڕێندراوەتەوە بۆ [$4 وەشانی $3، $2].", -'filerevert-badversion' => 'وەشانێکی پێشووی ئەم پەڕگە بەو کاتە ڕاچاوکراوه ‌نەدۆزرایەوە.', - -# File deletion -'filedelete' => 'سڕینەوەی $1', -'filedelete-backlink' => '→ $1', -'filedelete-legend' => 'سڕینەوەی پەڕگە', -'filedelete-intro' => "خەریکی پەڕگەی '''[[Media:$1|$1]]''' دەگەڵ هەموو مێژووی دەسڕیتەوە.", -'filedelete-intro-old' => "خەریکی وەشانی [$4 $3، $2] لە '''[[Media:$1|$1]]''' دەسڕیتەوە.", -'filedelete-comment' => 'هۆکار:', -'filedelete-submit' => 'بسڕەوە', -'filedelete-success' => "'''$1''' سڕاوەتەوە.", -'filedelete-success-old' => "وەشانی $3، $2 لە '''[[Media:$1|$1]]''' سڕاوەتەوە.", -'filedelete-nofile' => "'''$1''' بوونی نییە.", -'filedelete-nofile-old' => "وەشانێکی ئەرشیڤ‌کراوی '''$1''' بەو تایبەتمەندییە دیاری‌کراوانە نییە.", -'filedelete-otherreason' => 'هۆکاری دیکە\\زیادی:', -'filedelete-reason-otherlist' => 'هۆکاری دیکە', -'filedelete-reason-dropdown' => '*هوکارە هاوبەشەکانی سڕینەوە -**لادان لە مافەکانی بڵاوکردنەوە -***پەڕگەی دووبارەکراوە', -'filedelete-edit-reasonlist' => 'دەستکاری هۆکارەکانی سڕینەوە', - -# MIME search -'mimesearch' => 'گەڕانی MIME', -'mimesearch-summary' => 'ئەم لاپەڕە پاڵێوتنی هەیە بۆ جۆرەکانی MIME. -ناودراو: جۆرەی ناوەڕۆک\\ژێرجۆرە، وەک image/jpeg.', -'mimetype' => 'جۆرەی MIME:', -'download' => 'داگرتن', - -# Unwatched pages -'unwatchedpages' => 'لاپەڕە چاودێری‌نەکراوەکان', - -# List redirects -'listredirects' => 'لیستی ئاڕاستەکراوەکان', - -# Unused templates -'unusedtemplates' => 'داڕێژە بەکارنەھێنراوەکان', -'unusedtemplatestext' => 'ئەم لاپەڕە هەموو لاپەڕەکانی ناوبۆشایی {{ns:template}} کە نەکەوتوونەتە لاپەڕەی دیکە. -لە یادت بێ سەرنج بدەی بۆ بەستەری دیکە بۆ داڕێژەکان، پێش سڕینەوەیان.', -'unusedtemplateswlh' => 'بەستەرەکانی تر', - -# Random page -'randompage' => 'پەڕەیەک بە هەڵکەوت', -'randompage-nopages' => 'هیچ لاپەڕەیەک لەم {{PLURAL:$2|ناوبۆشاییەدا|ناوبۆشاییانەدا}} نیە: $1.', - -# Random redirect -'randomredirect' => 'ڕەوانکەری هەرمەکی', -'randomredirect-nopages' => 'لە ناوبۆشایی "$1" هیچ ڕەوانکەرێک نییە.', - -# Statistics -'statistics' => 'ئامارەکان', -'statistics-header-pages' => 'ئامارەکانی پەڕەکان', -'statistics-header-edits' => 'ئامارەکانی گۆڕانکارییەکان', -'statistics-header-views' => 'ئامارەکانی سەردانەکان', -'statistics-header-users' => 'ئامارەکانی بەکارھێنەران', -'statistics-header-hooks' => 'ئامارەکانی دیکە', -'statistics-articles' => 'پەڕە بە ناوەڕۆکەکان', -'statistics-pages' => 'پەڕەکان', -'statistics-pages-desc' => 'گشت پەڕەکانی ویکی، بە لەخۆگرتنی پەڕەکانی وتووێژ، ڕەوانەکراوەکان و ھتد.', -'statistics-files' => 'پەڕگە بارکراوەکان', -'statistics-edits' => 'دەستکارییەکانی لاپەڕە لە کاتی دامەزراندنی {{SITENAME}}', -'statistics-edits-average' => 'نێونجی ژمارەی دەستکارییەکان لە پەڕەیەک دا', -'statistics-views-total' => 'دیتنی هەموو', -'statistics-views-peredit' => 'دیتنی هەر دەستکارییەک', -'statistics-jobqueue' => 'درێژی [http://www.mediawiki.org/wiki/Manual:Job_queue ڕیزی کار]', -'statistics-users' => '[[Special:ListUsers|بەکارھێنەر]]ە تۆمارکراوەکان', -'statistics-users-active' => 'ئەندامە چالاکەکان', -'statistics-users-active-desc' => 'ئەو بەکارھێنەرانە کە لە دوایین {{PLURAL:$1|ڕۆژ|$1 ڕۆژ}}دا کارێکیان جێبەجێ کربێت.', -'statistics-mostpopular' => 'زۆرترین لاپەڕە بینراوەکان', - -'disambiguations' => 'پەڕەکانی جوداکردنەوە', -'disambiguationspage' => 'Template: خاوێن‌کردنەوەی ناوەڕۆک', -'disambiguations-text' => "ئەم لاپەڕانە بەستەرن بۆ '''لاپەڕەی خاوێن‌کردنەوەی ناوەڕۆک'''. -ئەوانە دەبێ لە جیاتی ئەوە بەستەر بن بۆ بابەتی گونجاو.
    -هەر لاپەڕەیەک کە لە داڕێژی بەستەر پێ‌دراو لە [[MediaWiki:Disambiguationspage]] کەڵک وەرگرێت وەک لاپەڕەی خاوێن‌کردنەوەی نوەڕۆک دەناسرێت.", - -'doubleredirects' => 'دووجار ڕەوانەکراوەکان', -'doubleredirectstext' => 'ئەم لاپەڕە لیستی ئەو لاپەڕانەن وا ڕەوانکەرن بۆ لاپەڕەی ڕەوانکەر دیکە. -هەر ڕیزێک، بەستەرەکان بۆ یەکەم و دووهەم ڕەوانکەری لەخۆ گرتووە. ئامانجی ڕەوانکەری دووهەم کە زۆربەی کات مەبەستی ڕاستیییە و ڕەوانکەری یەکەمیش هەر دەبێ بۆ ئەوێ ڕەوان بکات. -دراوەکانی هێڵ بەسەردا کێشراو چارەسەر کرا.', -'double-redirect-fixed-move' => '[[$1]] گوێسترایەوە. -ئێستا ڕەوانکەرە بۆ [[$2]].', -'double-redirect-fixer' => 'چارەسەرکەری ڕەوانکەر', - -'brokenredirects' => 'ڕەوانەکراوە خراپەکان', -'brokenredirectstext' => 'ئەم ڕەوانکەرانە بەستەرن بۆ لاپەڕەهایەک کە بوونیان نیە:', -'brokenredirects-edit' => 'دەستکاری', -'brokenredirects-delete' => 'سڕینەوە', - -'withoutinterwiki' => 'پەڕەکانی بێ بەستەرەکانی زمان', -'withoutinterwiki-summary' => 'ئەم پەڕانە بەستەریان بۆ وەشانەکانی زمانەکانی تر نیە.', -'withoutinterwiki-legend' => 'پێشگر', -'withoutinterwiki-submit' => 'پیشاندان', - -'fewestrevisions' => 'پەڕەکان بە کەمترین پیاچوونەوەوە', - -# Miscellaneous special pages -'nbytes' => '$1 {{PLURAL:$1|بایت|بایت}}', -'ncategories' => '$1 {{PLURAL:$1|ھاوپۆل|ھاوپۆل}}', -'nlinks' => '$1 {{PLURAL:$1|بەستەر|بەستەر}}', -'nmembers' => '$1 {{PLURAL:$1|ئەندام|ئەندام}}', -'nrevisions' => '$1 {{PLURAL:$1|پیاچوونەوە|پیاچوونەوە}}', -'nviews' => '$1 جار {{PLURAL:$1|بینراو|بینراو}}', -'specialpage-empty' => 'ئەنجامێک بۆ ئەم ڕاپۆرتە نییە.', -'lonelypages' => 'پەڕە ھەتیوەکان', -'lonelypagestext' => 'بەم لاپەڕانە لە هیچ لاپەڕەیەک‌دا لە {{SITENAME}} بەستەر نەدراوە یا هیچ لاپەڕەیەک لەخۆیانی نەگرتووە.', -'uncategorizedpages' => 'پەڕە پۆلێن نەکراوەکان', -'uncategorizedcategories' => 'پۆلە پۆلێن نەکراوەکان', -'uncategorizedimages' => 'پەڕگە پۆلێن نەکراوەکان', -'uncategorizedtemplates' => 'داڕێژە پۆلێن نەکراوەکان', -'unusedcategories' => 'پۆلە بەکارنەھێنراوەکان', -'unusedimages' => 'پەڕگە بەکارنەھێنراوەکان', -'popularpages' => 'پەڕە مەحبووبەکان', -'wantedcategories' => 'پۆلە داواکراوەکان', -'wantedpages' => 'پەڕە داواکراوەکان', -'wantedpages-badtitle' => 'سەردێڕی نەگونجاو لە سەرجەمی ئەنجامەکان: $1', -'wantedfiles' => 'پەڕگە داواکراوەکان', -'wantedtemplates' => 'قاڵبە داواکراوەکان', -'mostlinked' => 'زیاترین لاپەڕە بەستەر دراوەکان', -'mostlinkedcategories' => 'زیاترین هاوپۆلە‌ بەستەر دراوەکان', -'mostlinkedtemplates' => 'زیاترین داڕێژە‌ بەستەر دراوەکان', -'mostcategories' => 'پەڕەکان بە زۆرترین ھاوپۆلەوە', -'mostimages' => 'زیاترین پەڕگە‌ بەستەر دراوەکان', -'mostrevisions' => 'لاپەڕەکان بە زیاترین پێداچوونەوە', -'prefixindex' => 'گشت پەڕەکان بە پێشگرەوە', -'shortpages' => 'پەڕە کورتەکان', -'longpages' => 'پەڕە دڕێژەکان', -'deadendpages' => 'لاپەڕەکانی دوایین بەستراو', -'deadendpagestext' => 'ئەم لاپەرانە بە هیچ لاپەڕەیەکی دیکە لە {{SITENAME}}دا بەستەری نەداوە.', -'protectedpages' => 'پەڕە پارێزراوەکان', -'protectedpages-indef' => 'تەنها پاراستنە زۆرەکان', -'protectedpages-cascade' => 'تەنها پاراستنە زنجیرییەکان', -'protectedpagestext' => 'ئەم لاپەڕانە لە گواستنەوە و دەستکاری‌کردن پارێزراون', -'protectedpagesempty' => 'هیچ لاپەڕەیک ئێستا بەم دیاریکراوانە نەپارێزراوە.', -'protectedtitles' => 'سەرناوە پارێزراوەکان', -'protectedtitlestext' => 'ئەم سەردێڕانە لە درووست‌کردن پارێزراون', -'protectedtitlesempty' => 'هیچ سەردێڕیك ئێستا بەم دیاریکراوانە نەپارێزراوە.', -'listusers' => 'لیستی بەکارھێنەران', -'listusers-editsonly' => 'تەنھا ئەو بەکارھێنەرانە نیشان بدە کە دەستکارییان کردووە', -'listusers-creationsort' => 'ڕیز کردن بە پێی ڕێکەوتی دروست کردن', -'usereditcount' => '$1 {{PLURAL:$1|دەستکاری|دەستکاری}}', -'usercreated' => 'دروست کراو لە $2ی $1', -'newpages' => 'پەڕە نوێکان', -'newpages-username' => 'ناوی بەکارھێنەر:', -'ancientpages' => 'کۆنترین پەڕەکان', -'move' => 'گواستنەوە', -'movethispage' => 'ئەم پەڕەیە بگوازەوە', -'unusedimagestext' => 'تکایە ئاگادار بە کە لەوانەیە ماڵپەڕێک بە URLـی ڕاستەوەخۆ بەستەری دابێت بە پەڕگەیەک و هەر بۆیە لەوانەیە ئێستا لە وەک چالاک لێرەدا لیست‌کرابێت.', -'unusedcategoriestext' => 'ئەم پەڕەی پۆلانە ھەن، ئەگەرچی ھیچ پەڕە یان پۆلێکی تر کەڵکیان لێ وەرناگرێ.', -'notargettitle' => 'بێ مەبەست', -'notargettext' => 'لاپەڕە یان بەکارهێنەرێکت دیاری نەکردوو تاکەە ئەو فەنکشێنە لەسەر بهێنیتە کار.', -'nopagetitle' => 'چاودێری', -'nopagetext' => 'لاپەڕەی مەبەست وا ڕاچاوت کردووە بوونی نییە.', -'pager-newer-n' => '{{PLURAL:$1|یەکێکی نوێتر|$1ی نوێتر}}', -'pager-older-n' => '{{PLURAL:$1|یەکێک کۆنتر|$1ی کۆنتر}}', -'suppress' => 'چاودێری', - -# Book sources -'booksources' => 'سەرچاوەکانی کتێب', -'booksources-search-legend' => 'بۆ سەرچاوەی کتێب بگەڕێ', -'booksources-go' => 'بڕۆ', -'booksources-text' => 'لە خوارەوە لیستێک لە بەستەر بۆ ماڵپەڕهایەک کە کتێبی نوێ و بەکارهێنراو دەفرۆشێت و لەوانەیە لەوێ زانیاریی زیاترت دەست‌کەوێت سەبارەت بەو کتێبانەی لە دووی دەگەڕیت:', -'booksources-invalid-isbn' => 'ISBN دراو لەوە ناچی بەکار بێت، سەرنج بدە لە کاتی کۆپی کردن لە سەرچاوە تووشی هەڵە نوبوبێت.', - -# Special:Log -'specialloguserlabel' => 'بەکارھێنەر:', -'speciallogtitlelabel' => 'ناونیشان:', -'log' => 'لۆگەکان', -'all-logs-page' => 'ھەموو لۆگە گشتییەکان', -'alllogstext' => 'پیشاندانی تێکەڵ‌کراوی هەموو لۆگەکانی بەردەستی {{SITENAME}}. -بۆ وردبوونەوەی زیاتر دەتوانی جۆری لۆگ، ناوی بەکارهێنەر یا لاپەڕە گۆراوەکان هەڵبژێریت (هەستیار بە گەورە و بچووکی پیتەکان).', -'logempty' => 'هیچ بابەتێکی هاوتا لە لۆگەکاندا نەدۆزرایەوە.', -'log-title-wildcard' => 'گەڕانی ئەو سەرناوانە بەم دەقەوە دەست پێدەکەن', - -# Special:AllPages -'allpages' => 'ھەموو پەڕەکان', -'alphaindexline' => '$1 تا $2', -'nextpage' => 'پەڕەی پاشەوە ($1)', -'prevpage' => 'پەڕەی پێشەوە ($1)', -'allpagesfrom' => 'بینینی پەڕەکان بە دەست پێ کردن لە:', -'allpagesto' => 'بینینی پەڕەکان بە دوایی ھاتن بە:', -'allarticles' => 'ھەمووی وتارەکان', -'allinnamespace' => 'ھەموو پەڕەکان (بۆشایی-ناوی $1)', -'allnotinnamespace' => 'ھەموو پەڕەکان (ئەوانەی لە بۆشایی-ناوی $1دا نین)', -'allpagesprev' => 'پێش', -'allpagesnext' => 'پاش', -'allpagessubmit' => 'بڕۆ', -'allpagesprefix' => 'نیشاندانی پەڕەکان بە پێشگری:', -'allpagesbadtitle' => 'سەردێڕی لاپەڕە گونجاو نەبوو یان پێشگڕێکی بەینی‌زمانی یان بەینی‌ویکی هەبوو. -لەوانەیە یەک یان زیاتر پیتی نەگونجاو بۆ سەردێڕی لەخۆ گرتبێ.', -'allpages-bad-ns' => '{{SITENAME}} ناوبۆشایی نیە "$1".', - -# Special:Categories -'categories' => 'پۆلەكان', -'categoriespagetext' => 'ئەم {{PLURAL:$1|پۆلە پەڕە یان پەڕگەی|پۆلانە پەڕە یان پەڕگەیان}} لەخۆگرتە.
    -[[Special:UnusedCategories|پۆلە بەکارنەھێنراوەکان]] لێرەدا نیشان نەدراون.
    -ھەروا دەتوانی [[Special:WantedCategories|پۆلە خوازراوەکان]] ببینی.', -'categoriesfrom' => 'پیشان‌دانی هاوپۆلەکان بە دەست‌پێ‌کردن لە :', -'special-categories-sort-count' => 'ڕیز کردن بە پێی ژمارە', -'special-categories-sort-abc' => 'ڕیز کردن بە پێی ئەلفابێت', - -# Special:DeletedContributions -'deletedcontributions' => 'بەشدارییە سڕاوەکان', -'deletedcontributions-title' => 'هاوبەشییەکانی سڕاوەی بەکارهێنەر', -'sp-deletedcontributions-contribs' => 'بەشدارییەکان', - -# Special:LinkSearch -'linksearch' => 'بەستەرە دەرەکییەکان', -'linksearch-pat' => 'گەڕان بۆ نواندن:', -'linksearch-ns' => 'بۆشاییی ناو:', -'linksearch-ok' => 'گەڕان', -'linksearch-line' => '$1 بەستەرپێ‌دراو لە $2', - -# Special:ListUsers -'listusersfrom' => 'نیشاندانی بەکارھێنەران بە دست پێکردن لە:', -'listusers-submit' => 'نیشاندان', -'listusers-noresult' => 'ھیچ بەکارھێنەرێک نەدۆزرایەوە.', -'listusers-blocked' => '(بەربەست‌کراو)', - -# Special:ActiveUsers -'activeusers' => 'لیستی بەکارھێنەرە چالاکەکان', -'activeusers-count' => '$1 گۆڕانکاری لە دوایین {{PLURAL:$3|ڕۆژدا|$3 ڕۆژدا}}', -'activeusers-from' => 'نیشاندانی بەکارھێنەران بە دست پێکردن لە:', -'activeusers-hidebots' => 'بۆتەکان بشارەوە', -'activeusers-noresult' => 'هیچ بەکارهێنەرێک نەدۆزرایەوە', - -# Special:Log/newusers -'newuserlogpage' => 'لۆگی دروست کردنی بەکارھێنەر', -'newuserlogpagetext' => 'ئەمە لۆگێکی درووست‌کردنی بەکارهێنەرە.', -'newuserlog-byemail' => 'تێپەڕوشە بە ئیمەیل نێردرا.', -'newuserlog-create-entry' => 'بەکارھێنەری نوێ', -'newuserlog-create2-entry' => 'ھەژماری $1ی دروست کرد', -'newuserlog-autocreate-entry' => 'هەژمارە بە جۆری خۆکار درووست‌کرا', - -# Special:ListGroupRights -'listgrouprights' => 'مافەکانی گرووپە بەکارھێنەرییەکان', -'listgrouprights-summary' => 'ئەمە لیستێکە لە گرووپەکانی بەکارهێنەر لەسەر ئەم ویکی‌یە، دەگەڵ مافەکانی دەست‌پێ‌گەیشتنی هاوپەیوەندیان. -لێرەدا لەوانەیە [[{{MediaWiki:Listgrouprights-helppage}}|زانیاری زیاترت]] دەست‌کەوێت سەبارەت بە مافە تاکەکەسیەکان.', -'listgrouprights-key' => '* مافی دراوە -* مافی سەندراوە', -'listgrouprights-group' => 'گرووپ', -'listgrouprights-rights' => 'مافەکان', -'listgrouprights-helppage' => 'Help:مافەکانی گرووپ', -'listgrouprights-members' => '(لیستی ئەندامەکان)', -'listgrouprights-addgroup' => 'زیادکردنی {{PLURAL:$2|گرووپ|گرووپ}}: $1', -'listgrouprights-removegroup' => 'لابردنی {{PLURAL:$2|گرووپ|گرووپ}}: $1', -'listgrouprights-addgroup-all' => 'زیادکردنی هەموو گرووپەکان', -'listgrouprights-removegroup-all' => 'لابردنی هەموو گرووپەکان', -'listgrouprights-addgroup-self' => 'زیادکردنی {{PLURAL:$2|گرووپ|گرووپه‌کان}} بۆ سه‌ر هه‌ژماری خۆ: $1', -'listgrouprights-removegroup-self' => 'لابردنی {{PLURAL:$2|گرووپ|گرووپه‌کان}} له‌ سه‌ر هه‌ژماری خۆ: $1', -'listgrouprights-addgroup-self-all' => 'زیادکردنی هەموو گرووپەکان بۆ سه‌ر هه‌ژماری خۆ', -'listgrouprights-removegroup-self-all' => 'لابردنی هەموو گرووپەکان له‌ سه‌ر هه‌ژماری خۆ', - -# E-mail user -'mailnologin' => 'ناونیشان بۆ ناردن نییه‌', -'mailnologintext' => 'ده‌بێ له‌ [[Special:UserLogin|ژووره‌وه‌]] بیت و ناونیشانێکی بڕواپێ‌کراوی ئی‌مه‌یلت له‌ ناو [[Special:Preferences|هه‌ڵبژارده‌کان]] دیاری کردبێت تا بتوانی ئی‌مه‌یل بنێریت بۆ به‌کارهێنه‌رانی دیکه‌.', -'emailuser' => 'ئیمەیل بنێرە بۆ ئەم بەکارھێنەرە', -'emailpage' => 'ئیمەیل بۆ بەکارھێنەر', -'emailpagetext' => 'ده‌توانی له‌م فۆرمه‌ی خواره‌وه‌ که‌ڵک وه‌رگریت بۆ ناردنی په‌یامێکی ئی‌مه‌یل بنێریت بۆ ئه‌م به‌کارهێنه‌ره‌. -ناونیشانی ئی‌مه‌یلت وا له‌ ناو [[Special:Preferences|هه‌ڵبژارده‌کانی به‌کارهێنه‌ر‌دا]] نووسیوته‌، بۆ ئه‌دره‌سی "له‌لایه‌ن" ئی‌مه‌یل نیشان ئه‌درێت، هه‌ر بۆیه‌ وه‌گر ده‌توانێ ڕاسته‌وخۆ وه‌ڵامت بداته‌وه‌.', -'defemailsubject' => 'ئیمەیلی {{SITENAME}}', -'noemailtitle' => 'هیچ ناونیشانێکی ئی‌مەیل نییە', -'noemailtext' => 'ئەم بەکارهێنەرە ناونێشانێکی بڕوا پێکراوی ئی‌مەیلی دانەناوە.', -'nowikiemailtitle' => 'ڕێگە بۆ ئی‌مەیل نەدراوە', -'nowikiemailtext' => 'ئەم بەکارهێنەرە تایبەتمەندیی وەرنەگرتنی ئی‌مەیل لە بەکارهێنەرانی دیکەی هەلبژاردووە.', -'email-legend' => 'ناردنی ئیمەیلێک بۆ بەکارهێنەرێکی دیکەی {{SITENAME}}', -'emailfrom' => 'لە:', -'emailto' => 'بۆ:', -'emailsubject' => 'بابەت:', -'emailmessage' => 'نامە:', -'emailsend' => 'بینێرە', -'emailccme' => 'کۆپییەک لە نامەکە بنێرە بۆ ئیمەیلەکەم.', -'emailccsubject' => 'کۆپیی نامەکەت بۆ $1: $2', -'emailsent' => 'نامەکەت ناردرا', -'emailsenttext' => 'نامەکەت ناردرا', -'emailuserfooter' => 'ئەم ئیمەیلە لە $1ەوە ناردرا بۆ $2 بە "Email user" لە {{SITENAME}}ەوە.', - -# Watchlist -'watchlist' => 'لیستی چاودێڕییەکانی من', -'mywatchlist' => 'لیستی چاودێرییەکانم', -'watchlistfor' => "(بۆ '''$1''')", -'nowatchlist' => 'لە لیستی چاودێڕییەکانتدا ھیچ نیە.', -'watchlistanontext' => 'تکایە بۆ دیتن و دەستکاری بابەتەکانی لە ناو لیستی چاودێریەکەت‌دا $1.', -'watchnologin' => 'لە ژوورەوە نیت.', -'watchnologintext' => 'دەبی لە [[Special:UserLogin|ژوورەوە]] بیت بۆ ئەوەی بتوانی گۆڕانکاری بکەیت لە لیستی چاودێریەکەت‌دا.', -'addedwatch' => 'بە لیستی چاودێڕییەکانت زێدە کرا', -'addedwatchtext' => 'پەڕەی "[[:$1]]" خرایە سەر [[Special:Watchlist|لیستی چاودێرییەکەت]]. -گۆڕانکارییەکانی داھاتووی ئەم پەڕە و پەڕەی وتووێژەکەی، لەوێدا ڕیزدەکرێ و پەڕەکە لە [[Special:RecentChanges|لیستی دوایین گۆڕانکارییەکاندا]] ئەستوورکراو دەردەکەوێت بۆ ئەوەی ئاسانتر دەستکەوێت.', -'removedwatch' => 'لە لیستی چاودێڕییەکانت لابرا', -'removedwatchtext' => 'پەڕەی "[[:$1]]" لە [[Special:Watchlist|لیستی چاودێڕیەکانت]] لابرا.', -'watch' => 'چاودێری بکە', -'watchthispage' => 'چاودێڕیی ئەم پەڕە بکە', -'unwatch' => 'لابردنی چاودێری', -'unwatchthispage' => 'ئیتر چاودێری مەکە', -'notanarticle' => 'پەڕەی بێ ناوەڕۆک', -'notvisiblerev' => 'پیاچوونەوە سڕاوەتەوە', -'watchnochange' => 'لە کاتی دیاری کراو دا، بابەتە چاودێڕی کراوەکانت، دەستکاری نەکراون', -'watchlist-details' => '{{PLURAL:$1|$1 پەڕە|$1 پەڕە}} لە لیستی چاودێڕیەکەت دایە، بێجگە پەڕەکانی لێدوان.', -'wlheader-enotif' => '* ئەکرێ بە E-mail ئاگاداری بدەی', -'wlheader-showupdated' => "* ‏ئەو پەڕانە کە لە پاش دواین سەردانت دەستکاری کراون بە '''ئەستوور''' نیشان دراون", -'watchmethod-recent' => 'سەرنج‌دانی دوایین دەستکاریەکان بۆ لاپەڕە چاودێری‌کراوەکان', -'watchmethod-list' => 'سەرنج‌دانی لاپەڕە چاودێری‌کراوەکان بۆ دوایین دەستکاریەکان', -'watchlistcontains' => 'لیستی چاودێڕییەکانت $1 {{PLURAL:$1|پەڕە|پەڕە}}ی تێدایە.', -'iteminvalidname' => "ھەڵە لەگەڵ بابەتی '$1'، ناوی نادروست...", -'wlnote' => "خوارەوە {{PLURAL:$1|دوایین گۆڕانکاریە|دوایین '''$1''' گۆڕانکارییەکانن}} لە دواین {{PLURAL:$2|کاتژمێر|'''$2''' کاتژمێر}} دا.", -'wlshowlast' => 'نیشان دانی دوایین $1 کاتژمێری، $2 ڕۆژ لە $3', -'watchlist-options' => 'ھەڵبژاردەکانی لیستی چاودێڕییەکان', - -# Displayed when you click the "watch" button and it is in the process of watching -'watching' => 'چاودێری...', -'unwatching' => 'لابردنی چاودێری...', - -'enotif_mailer' => 'سیستەمی ئاگاداری بە ئی‌مەیلی {{SITENAME}}', -'enotif_reset' => 'ھەمووی پەڕەکان وەک بینراو دیاری بکە', -'enotif_newpagetext' => 'ئەمە پەڕەیەکی تازەیە.', -'enotif_impersonal_salutation' => 'بەکارهێنەری {{SITENAME}}', -'changed' => 'گۆڕدراو', -'created' => 'دروستکراو', -'enotif_subject' => '$PAGETITLE ـی لاپەڕەی {{SITENAME}} لە لایەن $PAGEEDITOR $CHANGEDORCREATED', -'enotif_lastvisited' => 'بۆ دیتنی هەموو گۆرانکارییەکانی پاش دوایین چاوپێکەوتنت $1 ببینە.', -'enotif_lastdiff' => 'بۆ دیتنی ئەم گۆڕانە $1 ببینە.', -'enotif_anon_editor' => 'بەکارهێنەری نەناسراو $1', -'enotif_body' => '$WATCHINGUSERNAMEی بەڕێز، -پەڕەی $PAGETITLE لە {{SITENAME}} دا لە ڕێکەوتی $PAGEEDITDATE بە دەستی $PAGEEDITOR $CHANGEDORCREATEDە، سەردانی $PAGETITLE_URL بکە بۆ وەشانی ھەنووکەی ئەو پەڕە. - -$NEWPAGE - -پوختەی دەستکارییەکەی: $PAGESUMMARY $PAGEMINOREDIT - -پەیوەندی لەگەڵ دەستکاریکەر: -ئیمەیڵ: $PAGEEDITOR_EMAIL -ویکی: $PAGEEDITOR_WIKI - -تا سەردانی ئەو پەڕە نەکەی، ئەگەر گۆڕانکارییەکی تری تێدا ڕووی دا خەبەر پێ نادرێ. -هەروا دەتوانی نیشانەکانی ئاگاداری بۆ هەموو لاپەڕەکانی ناو لیستی چاودێریت ببیتەوەنووک - - - بە سوپاسەوە، سیستەمی ڕاگەیاندنی {{SITENAME}} --- -بۆ گۆڕینی تەنزیماتی لیستی چاودێرییەکانت، سەربدە لە -{{fullurl:{{#special:Watchlist}}/edit}} - -بۆ لابردنی پەڕەکە لە لیستی چاودێرییەکانت، سەربدە لە -$UNWATCHURL - -رێنوێنیی زۆرتر و دەربڕینی بیروڕا: -{{fullurl:{{MediaWiki:Helppage}}}}', - -# Delete -'deletepage' => 'پەڕە بسڕەوەو', -'confirm' => 'پشتدار بکەرەوە', -'excontent' => "ناوەڕۆک ئەمە بو: '$1'", -'excontentauthor' => "ناوەڕۆک ئەمە بو: '$1'(و تەنھا بەشداریکەر '[[Special:Contributions/$2|$2]]' بوو)", -'exbeforeblank' => "ناوەڕۆک بەر لە بەتاڵ کردنەوە ئەمە بوو: '$1'", -'exblank' => 'پەڕە خاڵی بوو', -'delete-confirm' => 'سڕینەوەی "$1"', -'delete-backlink' => '→ $1', -'delete-legend' => 'سڕینەوە', -'historywarning' => "'''ئاگاداری:''' ئەم لاپەڕە کە دەتەوێت بیسڕیتەوە پێشتر $1 {{PLURAL:$1|revision|پێداچوونەوەی }} لەسەر کراوە.", -'confirmdeletetext' => 'تۆ خەریکی پەڕەیەک بە هەموو مێژووەکەیەوە دەسڕیتەو. -تکایە دووپاتی بکەوە کە دەتەوێت ئەم کارە بکەی، لە ئاکامەکەی تێدەگەی، و ئەم کارە بە پێی [[{{MediaWiki:Policy-url}}|سیاسەتنامە]] ئەنجام ئەدەی.', -'actioncomplete' => 'کردەوە بە ئاکام گەیشت', -'actionfailed' => 'کردارەکە سەرنەکەوت', -'deletedtext' => '"$1" سڕایەوە. -سەیری $2 بکە بۆ تۆمارێکی دوایین سڕینەوەکان.', -'deletedarticle' => '«[[$1]]» سڕایەوە', -'suppressedarticle' => '"[[$1]]" بەرگری‌کراو', -'dellogpage' => 'لۆگی سڕینەوە', -'dellogpagetext' => 'ئەوەی خوارەوە لیستێكە لە دوایین سڕینەوەکان', -'deletionlog' => 'لۆگی سڕینەوە', -'reverted' => 'گەڕێندراوە بۆ پێداچوونەوەی پێشووتر', -'deletecomment' => 'هۆکار:', -'deleteotherreason' => 'ھۆکاری دیکە:', -'deletereasonotherlist' => 'ھۆکاری دیکە', -'deletereason-dropdown' => '* ھۆکاری سڕینەوە -** داواکاریی نووسەر -** تێکدانی مافی لەبەرگرتنەوە -** خراپکاری', -'delete-edit-reasonlist' => 'دەستکاری کردنی ھۆکارەکانی سڕینەوە', -'delete-toobig' => 'ئەم لاپەڕە مێژوویەکی دەستکاری زۆر گەورەی هەیە، زیاتر لە $1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}}. -بۆ بەرگری لە خراپ‌بوونی چاوەڕوان نەکراوی {{SITENAME}}، سڕینەوەی لاپەڕەی وا بەربەست‌کراوە.', -'delete-warning-toobig' => 'ئەم لاپەڕە مێژوویەکی دەستکاری زۆر گەورەی هەیە، زیاتر لە $1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}}. -سڕینەوی ئەوە لە وانەیە کارەکانی بنکەدراوی {{SITENAME}} تووشی کێشە بکات؛ -دوورنواڕانە جێ‌بەجێی بکە.', - -# Rollback -'rollback' => 'گەڕاندنەوەی دەستکارییەکان', -'rollback_short' => 'گەڕاندنەوە', -'rollbacklink' => 'گەڕاندنەوە', -'rollbackfailed' => 'گەڕاندنەوە سەرکەوتوو نەبوو', -'cantrollback' => 'دەستکاریەکان ناگەڕێندرێتەوە؛ -دوایین هاوبەش تەنها ڕێکخەری ئەم لاپەڕەیە.', -'alreadyrolled' => 'دوایین گۆڕانکاریەکانی لەسەر [[:$1]] لە لایەن [[User:$2|$2]] ناگەڕێندرێنەوە ([[User talk:$2|وتووێژ]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])؛ کەسێکی دیکە لە پێش‌دا دەستکاری کردووە یان گەڕاندوویەتەوە. - -دوایین دەستکاری ئەم لاپەڕە [[User:$3|$3]] کردوویە ([[User talk:$3|وتووێژ]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).', -'editcomment' => "پوختەی دەستکاری \"''\$1''\" بوو.", -'revertpage' => 'گەڕاندنەوەی دەستکارییەکان لەلایەن [[Special:Contributions/$2|$2]] ([[User talk:$2|لێدوان]]) بۆ دوایین دەستکاریی [[User:$1|$1]]', -'rollback-success' => 'دەستکارییەکانی $1 وەرگێرایەوە؛
    -گۆڕدرا بۆ دوایین دەستکاریی $2.', -'sessionfailure' => 'لەوەدەچی بەشی چوونەژوورەوەت تووشی کێشە بووبێت. -ئەم کردەوە بۆ بەرگری لە ئاڵۆزی و مەترسی دزینی دراوەکان هەڵوەشێندراوە. -تکایە دوکمەی "back" لێدە و ئەو لاپەڕەی لێیەوە هاتوویتە ئێرە، نوێ بکەوە، ئینجا دیسان تاقی‌بکەوە.', - -# Protect -'protectlogpage' => 'لۆگی پاراستن', -'protectlogtext' => 'لەخوارەوە لیستێک لە لاپەڕە داخراوەکان و کراوەکان دەبینی. -بۆ دیتنی لیستی ئەو لاپەرانەی ئێستە پاراستنیان لە ئارادایە [[Special:ProtectedPages|لیستی لاپەڕە پارێزراوەکان ]] ببینە.', -'protectedarticle' => 'پارێزراو "[[$1]]"', -'modifiedarticleprotection' => 'ئاستی پاراستنی "[[$1]]"ی گۆڕا', -'unprotectedarticle' => '"[[$1]]" لە حاڵی ئێستا دا نەپازراوە', -'movedarticleprotection' => 'ڕێککارییەکانی پاراستن لە "[[$2]]" گوازرایەوە بۆ "[[$1]]"', -'protect-title' => 'گۆڕینی ئاستی پاراستنی "$1"', -'prot_1movedto2' => '[[$1]] گوازراوەتەوە بۆ [[$2]]', -'protect-backlink' => '← $1', -'protect-legend' => 'پاراستن تەیید بکە', -'protectcomment' => 'هۆکار:', -'protectexpiry' => 'ھەتا:', -'protect_expiry_invalid' => 'کاتی بەسەرچوون نادروستە:', -'protect_expiry_old' => 'کاتی بەسەرچوون ڕابردووە', -'protect-text' => "تۆ دەتوانی لێرە ئاستی پاراستنی لاپەڕەکە ببینی وە بیگۆڕی '''$1''' .", -'protect-locked-blocked' => "ناتوانیت ئاستی پاراستن بگۆڕیت کاتێ بەستراوە. -ئەوە هەڵبژاردەکانی ئێستای ڕێکخستنی بۆ لاپەڕە '''$1''':", -'protect-locked-dblock' => "ئاستەکانی پاراستن ناگۆڕدرێن کاتێ بنکەدراوی چالاک داخرابێت. -ئەوە هەڵبژاردەکانی ئێستای ڕێکخستنی بۆ لاپەڕە '''$1''':", -'protect-locked-access' => "ھەژمارەکەت ڕێگەی ئەوەی پێ نەدراوە کە بتوانێت ئاستی پاراستنی پەڕە بگۆڕێت. -ڕێککارییەکانی ئێستای پەڕەی '''$1''' ئەمەتە:", -'protect-cascadeon' => 'ئەم لاپەڕە لە حاڵی ئێستا دا پارێزراوە چونکا لە نێو ئەم {{PLURAL:$1|لاپەڕ(ان)ە دایە کە }} حاڵەتی پاراستنی تاڤگەیی ئەو(ان) ھەڵکراوە - -تۆ دەتوانی ئاستی پاراستنی ئەم لاپەڕە بگۆڕی، بەڵام ئەم گۆڕانە ھیچ کاریگەر نابێت لە سەر پاراستنی تاڤگەیی', -'protect-default' => 'بە ھەموو بەکارھێنەران ڕێگە بدە', -'protect-fallback' => 'پێویستی بە ئیزنی «$1» ھەیە', -'protect-level-autoconfirmed' => 'بەکارھێنەرانی نوێ و تۆمارنەکراو ئاستەنگ بکە', -'protect-level-sysop' => 'تەنھا بەڕێوەبەران', -'protect-summary-cascade' => 'تاڤگەیی', -'protect-expiring' => 'تا ڕێکەوتی $1 (UTC)', -'protect-expiry-indefinite' => 'زۆر\\نەناسراو', -'protect-cascade' => 'لاپەڕەکانی نێو ئەم لاپەتە بپارێزە (پاراستنی تاڤگەیی)', -'protect-cantedit' => 'ناتوانی ئاستی پاراستنی ئەم پەڕە بگۆڕی، چونکوو تۆ ئیجازەی ئەم کارەت نیە.', -'protect-othertime' => 'کاتی دیکە:', -'protect-othertime-op' => 'کاتی دیکە', -'protect-existing-expiry' => 'ئەم کاتی بەسەرچوونی ماوە کە هەیە: $3، $2', -'protect-otherreason' => 'هۆکاری زیادکراو\\دیکە:', -'protect-otherreason-op' => 'ھۆکاری دیکە', -'protect-dropdown' => '*ھۆکارە باوەکانی پاراستن -** خراپکاریی لەڕادەبەدەر -** سپامی لەڕادەبەدەر -** شەڕە دەستکاریی بێ‌سوود -** پەڕەی زۆربینەردار', -'protect-edit-reasonlist' => 'دەستکاری کردنی ھۆکارەکانی پاراستن', -'protect-expiry-options' => '١ کاتژمێر:1 hour,١ ڕۆژ:1 day,١ ھەفتە:1 week,٢ ھەفتە:2 weeks,١ مانگ:1 month,٣ مانگ:3 months,٦ مانگ:6 months,١ ساڵ:1 year,بی‌بڕانەوە:infinite', -'restriction-type' => 'ئیزن:', -'restriction-level' => 'ئاستی سنووردارکردن:', -'minimum-size' => 'کەمترین قەبارە', -'maximum-size' => 'زۆرترین قەبارە:', -'pagesize' => '(بایت)', - -# Restrictions (nouns) -'restriction-edit' => 'دەستکاری', -'restriction-move' => 'گواستنەوە', -'restriction-create' => 'دروستکردن', -'restriction-upload' => 'بارکردن', - -# Restriction levels -'restriction-level-sysop' => 'تەواو پارێزراو', -'restriction-level-autoconfirmed' => 'نیوە پارێزراو', -'restriction-level-all' => 'هەر ئاستێک', - -# Undelete -'undelete' => 'دیتنی لاپەڕە سڕاوەکان', -'undeletepage' => 'دیتنی و گەڕاندنەوەی لاپەڕە سڕاوەکان', -'undeletepagetitle' => "'''ئەمە تێکەڵ‌کراوەی پێداچوونەوە سڕدراوەکانی [[:$1|$1]]'''.", -'viewdeletedpage' => 'دیتنی لاپەڕە سڕاوەکان', -'undeletepagetext' => 'ئەم {{PLURAL:$1|سڕاوەتەوە|$1 لاپەڕە سڕاونەتەوە}} بەڵام لەبەر ئەوەی لە ئەرشیڤ‌دا هەن هێشتا دەتوانی بیانهێنیتەوە. -ئەرشیڤ چەن‌وەخت جارێ لە کاتی دیاری‌کراودا خاوێن‌دەکرێتەوە.', -'undelete-fieldset-title' => 'هێنانەوەی پێداچوونەوەکان', -'undeleteextrahelp' => "بۆ هێنانەوەی هەموو مێژووی لاپەڕەیەک، تەواوی چوارچێوەکانی نیشان‌کردن بەتاڵ بهێڵەوە و کرتە بکە سەر '''''هێنانەوە'''''. -بۆ ئەنجامی گەڕانەوەیەکی هەڵبژاردوو، چوارچێوەی بەرامبەر ئەو پێداچوونەوی دەتەوێ بیهێنیتەوە، نیشان‌بکە و کرتە بکە سەر '''''هێنانەوە'''''. -کرتەکردن سەر '''''بردنەوە نووک''''' ئەبێتە هۆی سڕینەوەی شوێنی بۆچوونەکان و بەتاڵ بوونەوەی چوارچێوەکان.", -'undeleterevisions' => '$1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}} ئەرشیڤ‌کرا', -'undeletehistory' => 'ئەگەر لاپەڕەیەک بهێنیتەوە، هەموو پێداچوونەوەکانی دەگەڕێنەوە بۆ لاپەڕەی مێژوو. -ئەگەر لە کاتی سڕاوەبوون، لاپەڕەیەک هەر بەو ناوە درووست‌کرابێت، پێداچوونەوە هێنراوەکان لە لاپەڕەی مێژووی کۆن‌دا نیشان ئەدرێت.', -'undeletehistorynoadmin' => 'ئەم لاپەڕە سڕاوەتەوە. -لەو پۆختەی لە خوارەوە دەیبینی، هۆکاری سڕینەوە و هەروا وردەکاریەکان سەبارە بەو کەسەی پێش سڕینەوە دەستکاری لاپەڕەکەی کردووە، دەست‌دەکەوێ. -دەقی ڕاستی ئەم پێداچوونەوە سڕاوانە تەنها بۆ بەڕێوبەران دەست‌پێ‌گەیشتنی هەیە.', -'undelete-revision' => 'پێداچوونەوەی سڕاوەی $1 (لە $4، $5) لەلایەن $3:', -'undeleterevision-missing' => 'پێداچوونەوەی نادیار یا نەناسراو. -لەوانەیە خەریکی لە بەستەرێکی خراپ کەڵک وەر ئەگری ئا لەوانەیە پێداچوونەوەکە لە ئەرشیڤ لابرابێت.', -'undelete-nodiff' => 'هیچ پێداچوونەوەیەکی پێشو نەدۆزرایەوە.', -'undeletebtn' => 'هێنانەوە', -'undeletelink' => 'بینین/گەڕاندنەوە', -'undeleteviewlink' => 'دیتن', -'undeletereset' => 'بردنەوە نووک', -'undeleteinvert' => 'هەڵگێڕانەوەی هەڵبژاردن', -'undeletecomment' => 'هۆکار:', -'undeletedarticle' => '«[[$1]]» گێڕایەوە', -'undeletedrevisions' => '{{PLURAL:$1|1 پێداچوونەوە|$1 پێداچوونەوە}} هێنرایەوە', -'undeletedrevisions-files' => '{{PLURAL:$1|1 پێداچوونەوە|$1 پێداچوونەوە}} و {{PLURAL:$2|1 پەڕگە|$2 پەڕگە}} هێنرایەوە', -'undeletedfiles' => '{{PLURAL:$1|1 پەڕگە|$1 پەڕگە}} هێنرایەوه', -'cannotundelete' => 'لە سڕین گەڕانەوە سەرکەوتوو نەبوو؛ -کەسێکی دیکە پێش تۆ گەڕاندوویەتەوە.', -'undeletedpage' => "'''$1 هێنراوەتەوە''' - -بۆ دیتنی پێشینەی دوایین سڕینەوەکان و هێنانەوەکان سەرنجی [[Special:Log/delete|لۆگی سڕینەوە]] بدە.", -'undelete-header' => 'بۆ دیتنی ئەو لاپەڕانەی لەم داییانەدا سڕاونەتەوە چاو لە [[Special:Log/delete|لۆگی سڕینەوە]] بکە.', -'undelete-search-box' => 'گەڕان بۆ لاپەڕە سڕاوەکان', -'undelete-search-prefix' => 'نیشان‌دانی ئەو لاپەڕانەی دەستپێکیان ئەمەیە:', -'undelete-search-submit' => 'گەڕان', -'undelete-no-results' => 'لە ئەرشیڤی سڕاوەکانی لاپەڕەیەکی هاوتا نەدۆزرایەوە.', -'undelete-cleanup-error' => 'هەڵە لە سڕینەوەی ئەرشیڤی بەکەڵک نەهاتووی پەڕگە "$1".', -'undelete-missing-filearchive' => 'ناکرێ ئەرشیڤی پەڕگە بە پێناسەی $1 بهێنیتەوە لەبەر ئەوەی لە ناو بنکەی دراوە‌دا نییە. -لەوانەیە لە‌پێش‌دا هێنرابێتەوە.', -'undelete-error-short' => 'هەڵە لە گەڕاندنەوەی سڕینەوەی پەڕگە: $1', -'undelete-error-long' => 'هەڵەیەک لە کاتی گەڕاندنەوەی سڕینەوەی پەڕگە ڕووی‌دا: - -$1', -'undelete-show-file-confirm' => 'ئایا ئەرخەیانی کە دەتەوێ پێداچوونەوە سراوەکەی پەڕگەی "$1" لە $2 لە $3 ببینی؟', -'undelete-show-file-submit' => 'بەڵێ', - -# Namespace form on various pages -'namespace' => 'بۆشاییی ناو', -'invert' => 'ھەڵبژاردەکان پێچەوانە بکە', -'blanknamespace' => '(سەرەکی)', - -# Contributions -'contributions' => 'بەشدارییەکانی بەکارھێنەر', -'contributions-title' => 'بەشدارییەکانی بەکارھێنەر $1', -'mycontris' => 'بەشدارییەکانم', -'contribsub2' => 'بۆ $1 ($2)', -'nocontribs' => 'هیچ گۆڕانکاریەکی هاوتای ئەم پێوەرانە نودۆزرایەوە', -'uctop' => '(سەر)', -'month' => 'لە مانگی (و پێشترەوە):', -'year' => 'لە ساڵی (و پێشترەوە):', - -'sp-contributions-newbies' => 'تەنھا بەشدارییەکانی بەکارھێنەرە تازەکان نیشان بدە', -'sp-contributions-newbies-sub' => 'لە بەکارھێنەرە تازەکانەوە', -'sp-contributions-newbies-title' => 'هاوبەشیەکانی بەکارهێنەر بۆ هەژمارە نوێکان', -'sp-contributions-blocklog' => 'لۆگی بەربەستن', -'sp-contributions-deleted' => 'بەشدارییە سڕاوەکان', -'sp-contributions-logs' => 'تۆمارەکان', -'sp-contributions-talk' => 'لێدوان', -'sp-contributions-userrights' => 'بەڕێوبەرایەتی مافەکانی بەکارهێنەر', -'sp-contributions-search' => 'گەڕین بۆ بەشدارییەکان', -'sp-contributions-username' => 'ناونیشانی ئای-پی یا ناوی بەکارهێنەری:', -'sp-contributions-submit' => 'بگەڕە', - -# What links here -'whatlinkshere' => 'بەسراوەکان بە ئێرەوە', -'whatlinkshere-title' => 'ئەو پەڕانەی بەستەرکراون بۆ "$1"', -'whatlinkshere-page' => 'پەڕە:', -'linkshere' => "ئەم پەڕانە بەستەریان ھەیە بۆ '''[[:$1]]''':", -'nolinkshere' => "هیچ لاپەڕەیەک بەستەری نەداوە بە '''[[:$1]]'''.", -'nolinkshere-ns' => "هیچ لاپەڕەیەک بەستەری نەداوە بە '''[[:$1]]''' لە بۆشایی‌ناوی هەڵبژێردراو.", -'isredirect' => 'پەڕە ڕەوان بکە', -'istemplate' => 'بەکارھێنراو', -'isimage' => 'بەستەری وێنە', -'whatlinkshere-prev' => '{{PLURAL:$1|پێشتر|$1 ی پێشتر}}', -'whatlinkshere-next' => '{{PLURAL:$1|دیکە|$1 ی دیکە}}', -'whatlinkshere-links' => '← بەستەرەکان', -'whatlinkshere-hideredirs' => 'ڕەوانەکراوەکان $1', -'whatlinkshere-hidetrans' => 'ترانسکلوژنه‌کانی $1', -'whatlinkshere-hidelinks' => '$1 بەستەر', -'whatlinkshere-hideimages' => 'بەستەرەکانی وێنەی $1', -'whatlinkshere-filters' => 'پاڵێوەرەکان', - -# Block/unblock -'blockip' => 'بەربەستنی بەکارھێنەر', -'blockip-legend' => 'بەربەست‌کردنی بەکارهێنەر', -'blockiptext' => 'لەم فۆرمەی خوارەوە دەتوانی بۆ بەربەست‌کردنی دەست‌پێ‌گەیشتنی نووسین لە ناونیشانێکی ئای‌پی تایبەت یا ناوی بەکارهێنەریەک، کەڵک وەرگریت. -ئەمە تەنها دەبێ بۆ بەرگری لە خراپکاری بەکاربێت و ڕێکەوتنی هەبێ دەگەڵ [[{{MediaWiki:Policy-url}}|سیاسەتەکان]]. -لە خوارەوە هۆکارێک بە ڕوونی بنووسە (بۆ نموونە بە وردی ئەو لاپەڕانە و خراپکاری تێدا کراوە وەک، وەک بەڵگە، بنووسە).', -'ipaddress' => 'ناونیشانی IP:', -'ipadressorusername' => 'ناونیشانی ئای‌پی یان ناوی‌ بەکارهێنەری:', -'ipbexpiry' => 'بەسەرچوون:', -'ipbreason' => 'هۆکار:', -'ipbreasonotherlist' => 'هۆکاری تر', -'ipbreason-dropdown' => '*هۆکارە هاوبەشەکانی بەربست‌کران -**دانانی زانیاریی هەڵە -**لابردنی ناوەڕۆکی لاپەڕەکان -**بەستەر بۆ لاپەڕەی دەرەکی نەگونجاو -**نووسینی قسەی بێ‌مانا و بێ‌سوود -**هەڵسووکەوت یان وتاری هاندەر بۆ توندوتیژی -**بەکارهێنانی چەن هەژمارە پێکەوە -**ناوی بەکارهێنەریی نەگونجاو', -'ipbanononly' => 'تەنها بەربەست‌کردنی بەکارهێنەرانی نەناسراو', -'ipbcreateaccount' => 'بەرگری لە درووست‌کردنی هەژمارە', -'ipbemailban' => 'بەرگری لە ئی‌مەیل ناردنی بەکارهێنەر', -'ipbenableautoblock' => 'خۆکار بەربەست‌کردنی ئەو ناونیشانی‌ ئای‌پیە وا ئەم بەکار‌هێنەرە کەڵکی لێ‌وەرگرتووە و ئەو ئای‌پی‌یانەی دیکە وا لەوێوە هەوڵی دەستکاری ئەدەن.', -'ipbsubmit' => 'بەربەست‌کردنی ئەم بەکارهێنەرە', -'ipbother' => 'کاتی‌ دیکە:', -'ipboptions' => '2 کاتژمێر:2 hours,1 ڕۆژ:1 day,3 ڕۆژ:3 days,1 ھەفتە:1 week,2 ھەفتە:2 weeks,1 مانگ:1 month,3 مانگ:3 months,6 مانگ:6 months,1 ساڵ:1 year,بێ سنوور:infinite', -'ipbotheroption' => 'دیکە', -'ipbotherreason' => 'هۆکاری زیادکراو\\دیکە:', -'ipbhidename' => 'شاردنەوەی ناوی‌ بەکارهێنەر لە دەستکاری و لیستەکان', -'ipbwatchuser' => 'دیتنی لاپەڕەی بەکارهێنەر و وتووێژی ئەم بەکارهێنەرە', -'ipballowusertalk' => 'ڕێگەدان بە ئەم بەکارهێنەرە کە لاپەڕەی وتووێژی خۆی دەستکاری بکات، کاتێ بەربەست‌کراوە', -'ipb-change-block' => 'دیسان بەربەست‌کردنەوەی ئەم بەکارهێنەرە بەم هەڵبژاردانە', -'badipaddress' => 'ناونیشانی ئای‌پی نەگونجاو', -'blockipsuccesssub' => 'بەربەست کردن سەرکەوتوو بوو', -'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] بەربەست‌کراوە.
    -بۆ دیتنی بەربەست‌کراوەکان، چاو لە [[Special:IPBlockList|لیستی بەربەستی ئای‌پی]] بکە.', -'ipb-edit-dropdown' => 'دەستکاری هۆکارەکانی بەربەست', -'ipb-unblock-addr' => 'لە بەربەست‌دەرهێنانی $1', -'ipb-unblock' => 'لە بەربەست‌دەرهێنانی ناوی بەکارهێنەریەک یا ناونیشانێکی ئای‌پی', -'ipb-blocklist-addr' => 'ئەو بەربەستانەی بۆ $1 هەیە', -'ipb-blocklist' => 'دیتنی ئەو بەربەستانەی وا هەیە', -'ipb-blocklist-contribs' => 'هاوبەشیەکان بۆ $1', -'unblockip' => 'لە بەربەست‌دەرهێنانی بەکارهێنەر', -'unblockiptext' => 'بۆ گەڕاندنەوەی دەست‌پی‌گەیشتنی نووسین بۆ ئەو دوایین ئای‌پی یان بەکارهێنەری بەربەست کراوە، لەو فۆرمەی خوارەوە کەڵک وەرگرە.', -'ipusubmit' => 'لابردنی ئەم بەربەستە', -'unblocked' => '[[User:$1|$1]] لە بەربەست دەرهێنرا', -'unblocked-id' => 'بەربەستی $1 لابرا', -'ipblocklist' => 'IP ئەدرەس و بەکارھێنەرە بەربەستراوەکان', -'ipblocklist-legend' => 'دۆزینەوەی بەکارهێنەرێکی بەربەست‌کراو', -'ipblocklist-username' => 'ناوی‌ بەکارهێنەری یان ناونیشانی ئای‌پی:', -'ipblocklist-sh-userblocks' => '$1 بەربەستی هەژمارە', -'ipblocklist-sh-tempblocks' => '$1 بەربەستی کاتی', -'ipblocklist-sh-addressblocks' => '$1 بەربەستی تاکە ئای‌پی', -'ipblocklist-submit' => 'گەڕان', -'blocklistline' => '$1، $2 بەربەستی کرد $3 ($4)', -'infiniteblock' => 'زۆر\\نەپێوراو', -'expiringblock' => 'لە $2، $1 ماوەی بەسەر دەچێ', -'anononlyblock' => 'تەنها بۆ چەن سات', -'noautoblockblock' => 'بەربەستی خۆکار لەکار خسترا', -'createaccountblock' => 'درووست‌کردنی هەژمارە بەربەست کرا', -'emailblock' => 'ئی‌مەیل بەربەست‌کرا', -'blocklist-nousertalk' => 'دەستکاری لاپەڕەی وتووێژی خۆ ناکرێت', -'ipblocklist-empty' => 'لیستی بەربەستەکان بەتاڵە', -'ipblocklist-no-results' => 'ئای‌پی ئەدرەس یان ناوی‌ بەکارهێنەری داواکراو بەربەست نەکراوە.', -'blocklink' => 'بەربەستن', -'unblocklink' => 'لابردنی بەرگری', -'change-blocklink' => 'گۆڕینی بەرگری', -'contribslink' => 'بەشداری', -'autoblocker' => 'خۆکار بەربەست‌کراوە لەبەر ئەوەی ناونیشانی ئای‌پی تۆ لەم دواییانەدا لە لایەن "[[User:$1|$1]]" بەکار هاتووە. -هۆکاری بەربەست‌کرانی $1 ئەمەیە: "$2"', -'blocklogpage' => 'لۆگی بەربەستن', -'blocklogentry' => '[[$1]] ئاستەنگ کرا بۆ ماوەی $2 $3', -'reblock-logentry' => 'دۆخی ئاستەنگ کردنی [[$1]] بۆ گۆڕدرا بۆ ماوەی $2 $3', -'blocklogtext' => 'ئەمە لۆگی کردەوەکانی بەربەست‌کران یا لابردنی بەربەستی بەکارهێنەرە. -بەربەست‌کرانی خۆکاری ئای‌پی لەم لیستەدا نەهاتوون. -بۆ دیتنی ئەو بەربەستانە ئێستە لە ئارادان چاو لە [[Special:IPBlockList|لیستی بەربەستی ئای‌پی]] بکە.', -'unblocklogentry' => 'بەربەستنی "$1" بەتاڵ کرا', -'block-log-flags-anononly' => 'تەنها بەکارهێنەرە نەناسراوەکان', -'block-log-flags-nocreate' => 'دروستکردنی هەژمار ناچالاککراوە', -'block-log-flags-noautoblock' => 'بەربست‌کردنی خۆکار لە کار خسترا', -'block-log-flags-noemail' => 'ئی‌مەیل بەربەست‌کراوە', -'block-log-flags-nousertalk' => 'دەستکاری لاپەڕەی وتووێژی خۆ ناکرێت', -'block-log-flags-angry-autoblock' => 'بەربەستی خۆکاری پێشکەوتوو خستراوەتە کار', -'block-log-flags-hiddenname' => 'شاردنەوەی ناوی‌بەکارهێنەری', -'range_block_disabled' => 'تایبەتمەندی بەڕێوەبەر بۆ بەربەست‌کردنی زنجیرە لە کارخستراوە.', -'ipb_expiry_invalid' => 'کاتی بەسەرچوونی نەگونجاو.', -'ipb_expiry_temp' => 'بەربەستی ناوی‌بەکارهێنەرە شاراوەکان دەبێ پایەدار بێت.', -'ipb_hide_invalid' => 'بەرگری لەم هەژمارە ناکرێت، لەوانەیە دەستکاری زۆری هەبێت.', -'ipb_already_blocked' => '"$1" لە پێش‌دا بەربەست‌‌کراوە', -'ipb-needreblock' => '== لەپێش‌دا بەربەست‌کراو == -"$1" لە پێش‌دا بەربەست‌‌کراوە. -ئایا دەتەو‌ێ هەڵبژاردەکانی بگۆڕیت؟', -'ipb_cant_unblock' => 'پێناسەی بەربەست‌کردنی $1 نەدۆزرایەوە. -لەوانەیە لە بەربەستی لابرابێت.', -'ipb_blocked_as_range' => 'هەڵە: ئای‌پی $1 ڕاستەوخۆ بەربەست نەکراوە بۆیە ناکڕێت لە بەربەست لای‌ بەیت. -ئەوە وەک بەشێک لە زنجیرە ئای‌پیی $2 بەربەست کراوە و هەر بەو شێوە دەکرێ لە بەربەست دەرچێ.', -'ip_range_invalid' => 'زنجیرە ئای‌پی نەگونجاو.', -'blockme' => 'بەربەست‌کردنی من', -'proxyblocker' => 'بەربەست‌کەری پرۆکسی', -'proxyblocker-disabled' => 'ئەم فەنکشێنە لەکار خستراوە.', -'proxyblockreason' => 'ناونیشانی ئای‌پی تۆ بەربەست‌کراوە لەبەر ئەوەی پرۆکسیەکی کراوەیە. -تکایە پەیوەندی بکە بە دابینکەری خزمەتی ئینتەرنەتی خۆت یان پاڵپشتی تەکنیکی و ئاگادریان کەوە لەو کێشە ئەمنیە گرینگە.', -'proxyblocksuccess' => 'جێ‌بەجێ‌کرا.', -'sorbsreason' => 'ناونیشانی ئای‌پی تۆ لە DNSBLدا کە {{SITENAME}} کەڵکی لێ‌وەر دەگرێ، وەک پرۆکسیەکی کراوە لیست کراوە.', -'sorbs_create_account_reason' => 'ناونیشانی ئای‌پی تۆ لە DNSBLدا کە {{SITENAME}} کەڵکی لێ‌وەر دەگرێ، وەک پرۆکسیەکی کراوە لیست کراوە. -بۆیە ناتوانی هەژمارە درووست‌بکەی.', -'cant-block-while-blocked' => 'کاتێ خۆت بەربەست‌کراوی، ناتوانی بەکارهێنەرانی دیکە بەربەست بکەی.', - -# Developer tools -'lockdb' => 'داخستنی بنکەدراوە', -'unlockdb' => 'کردنەوەی بنکەدراوە', -'lockdbtext' => 'داخستنی بنکەدراوە ئەبێتە هۆی ڕاگرتنی توانای هەموو بەکارهێنەران بۆ دەستکاری لاپەڕەکان، گۆڕانی هەڵبژاردەکانیان، دەستکاری لیستی چاودێرییەکانیان و هەموو ئەموو ئەو شتانە وا پێویستی بە گۆرانکاری لە بنکەدراوە هەیە. -تکایە ئەرخەیان بە ئەمە هەر ئەوەیە کە دەتەوێ بیکەی و دوای چاکسازیەکەت لەیادت بێ کە بنکەدراوەکە بکەیتەوە.', -'unlockdbtext' => 'کردنەوەی بنکەدراوە ئەبێتە هۆی گەڕاندنەوەی توانای هەموو بەکارهێنەران بۆ دەستکاری لاپەڕەکان، گۆڕانی هەڵبژاردەکانیان، دەستکاری لیستی چاودێرییەکانیان و هەموو ئەموو ئەو شتانە وا پێویستی بە گۆرانکاری لە بنکەدراوە هەیە. -تکایە ئەرخەیان بە ئەمە هەر ئەوەیە کە دەتەوێ بیکەی.', -'lockconfirm' => 'بەڵێ، ئەرخەیانم دەمەوێ بنکەدراو داخەم.', -'unlockconfirm' => 'بەڵێ، ئەرخەیانم دەمەوێ بنکەدراو بکەمەوە.', -'lockbtn' => 'داخستنی بنکەدراو', -'unlockbtn' => 'کردنەوەی بنکەدراو', -'locknoconfirm' => 'چوارچێوەی ئەرخەیانیت نیشان‌ نەکرد.', -'lockdbsuccesssub' => 'داخستنی بنکەدراو بەسەرکەوتوویی جێبەجێ کرا', -'unlockdbsuccesssub' => 'بنکەدراو کرایەوە', -'lockdbsuccesstext' => 'بنکەدراو داخرا.
    -لەیادت بێ دوای تەواوبوونی چاکسازی [[Special:UnlockDB|بنکەدراو بکەیتەوە]].', -'unlockdbsuccesstext' => 'بنکەدراو کرایەوە.', -'lockfilenotwritable' => 'پەڕگەی داخستنی بنکەدراو سەرنووس ناکرێت. -بۆ کردنەوە یا داخستنی بنکەدراو، پێویستە ڕاژەکار بتوانێ ئەو پەڕگە سەرنووس بکات.', -'databasenotlocked' => 'بنکەدراو دانەخراوە.', - -# Move page -'move-page' => '$1 بگوازەوە', -'move-page-legend' => 'گواستنەوەی پەڕە', -'movepagetext' => "بەکارھێنانی ئەم فۆرمەی خوارەوە ناوی پەڕەیەک دەگۆڕێت، بە گواستنەوەی ھەموو مێژووەکەی بۆ ناوی نوێ.
    -
    ناوە کۆنەکە دەبێتە پەڕەیەکی ئاڕاستەکردنەوە بۆ ناوە نوێکە. -دەتوانی ئاڕاستەکان بۆ پەڕەی سەرەکی بەشێوەی خۆکار نوێ بکەیتەوە.
    -ئەگەر ناتەوێت ئەم کارە بکەی، دڵنیا بە کە [[Special:DoubleRedirects|ئاڕاستە دووبارەکراوەکان]] یان [[Special:BrokenRedirects|شکاوەکان]] تاقی بکەیتەوە.
    -تۆ بەرپرسیاری دڵنیا ببیتەوە لەوەی کە بەستەرەکان دەچنە سەر خاڵێک کە چاوەروان دەکرێت بچنە ئەوێ.

    -دەبێت بزانی کە پەڕەکە '''ناگوازرێتەوە''' ئەگەر پێشتر پەڕەیەک بە ناوە نوێکەوە ھەبێت، مەگەر ئەوەی کە پەڕەکە واڵا یان ئاڕاستەیەک بێت و ھیچ مێژووی گۆڕاندنی پێشووی نەبێت.
    -ئەمە بەو واتایە کە ئەگەر ھەڵەیەک بکەی دەتوانی ناوی پەڕەکە دیسانەوە بگۆڕی بۆ ناوی پێشووی، و ناتوانی بیخەیتە جێگەی پەڕەیەک کە ھەنووکە ھەیە.

    -'''ئاگاداری!'''
    -ئەمە دەتوانێت گۆڕانێکی زۆر نابەجێ و چاوەڕێنەکراو بێت بۆ پەڕەیەکی بەناوبانگ؛
    -تکایە پێش گۆڕینی ناو باش بیر لە ئاکامەکەی بکەوە.", -'movepagetalktext' => "پەڕەی وتووێژی پەیوەندیدار بە شێوەی خۆکار لەگەڵیدا دەگوازرێتەوە، '''مەگەر:''' -*پەڕەیەکی لێدوانی ناواڵا پێشتر ھەبێت لە ژێر ناوە نوێکەدا، یان -*ئەم بۆکسەی خوارەوەت لێنەداوە بکەی. -

    -لەو حاڵەتانەدا، ئەگەر بتەوێت بیگوازیتەوە ناچار دەبیت بە شێوەی دەستی بیگوازیتەوە یان تێکەڵیان بکەی.", -'movearticle' => 'ئەم پەڕە بگوازەوە:', -'movenologin' => 'نەچوویتەتە ژوورەوە', -'movenologintext' => 'بۆ گواستنەوەی پەڕەیەک، ئەشێ ببی بە ئەندام و [[Special:UserLogin|لە ژوورەوە]] بیت.', -'movenotallowed' => 'ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی لاپەڕەکان.', -'movenotallowedfile' => 'ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی پەڕگەکان.', -'cant-move-user-page' => 'ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی لاپەڕەکانی بەکارهێنەر (جیاواز لە ژێرلاپەڕەکان).', -'cant-move-to-user-page' => 'ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی لاپەڕەیەک بۆ لاپەڕەی بەکارهێنەر (غەیری بۆ ژێرلاپەڕەی بەکارهێنەر).', -'newtitle' => 'بۆ ناوی نوێی:', -'move-watch' => 'ئەم پەڕە چاودێری بکە', -'movepagebtn' => 'ئەم پەڕە بگوازەوە', -'pagemovedsub' => 'گواستنەوە بە سەرکەوتوویی جێبەجێ کرا', -'movepage-moved' => '\'\'\'"$1" گوازراوەتەوە بۆ "$2"\'\'\'', -'movepage-moved-redirect' => 'ڕەوانکەرێک درووست‌کرا.', -'movepage-moved-noredirect' => 'لە دانانی ڕەوانەکەر بەرگری کرا.', -'articleexists' => 'لاپەڕەیەک بەم ناوە ھەیە، یان ئەو ناوەی تۆ ھەڵتبژاردووە بایەخدار نیە. -تکایە ناوێکی دیکە ھەڵبژێرە', -'cantmove-titleprotected' => 'ناتوانی لاپەڕەیەک بگوێزیتەوە بۆ ئەم شوێنە، لەبەر ئەوەی سەردێڕی نوێ لە درووست‌کردن پارێزراوە.', -'talkexists' => "'''خودی پەڕەکە بە سەرکەوتوویی گوازرایەوە، بەڵام پەڕەی وتووێژەکەی ناگوازرێتەوە چونکو پێشتر بە سەردێرە نوێکەوە، یەکێک ھەیە. -تکایە بە دەستی تێکەڵیان بکە.'''", -'movedto' => 'بوو بە', -'movetalk' => 'پەڕەی لێدوانی پەیوەندیدار بگوازەوە', -'move-subpages' => 'ژێرپەڕەکانی بگۆزەرەوە (بە ئەندازەی $1)', -'move-talk-subpages' => 'ژێرپەڕەکانی پەڕەی لێدوانی بگۆزەرەوە (بە ئەندارەی $1)', -'movepage-page-exists' => 'پەڕەی $1 هەیە و ناتوانرێت خۆکار بخرێتە جێی.', -'movepage-page-moved' => 'پەڕەی $1 گۆزرایەوە بۆ $2.', -'movepage-page-unmoved' => 'ناکرێ پەڕەی $1 بگوێزرێتەوە بۆ $2.', -'movepage-max-pages' => 'زۆرینەی ژمارەی $1 {{PLURAL:$1|لاپەڕە|لاپەڕە}} گوێستراوەتەوە و لەوە زیاتر خۆکار ناگوێسترێتەوە.', -'1movedto2' => '[[$1]] گۆزرایەوە بۆ [[$2]]', -'1movedto2_redir' => 'بە ڕەوانکردنەوە، [[$1]] گۆزرایەوە بۆ [[$2]]', -'move-redirect-suppressed' => 'ڕەوانەکردن بەرگری‌کراوە', -'movelogpage' => 'لۆگی گواستنەوە', -'movelogpagetext' => 'لە خوارەوەدا لیستی ھەموو پەڕە گواستنەوەکان دەبینن.', -'movesubpage' => '{{PLURAL:$1|ژێرپەڕە|ژێرپەڕە}}', -'movesubpagetext' => 'ئەم لاپەڕە $1 {{PLURAL:$1|ژێرلاپەڕەی‌|ژێرلاپەڕەی}} هەیە کە لەخوارە نیشان دراوە.', -'movenosubpage' => 'ئەم پەڕە ھیچ ژێرپەڕەیەکی نییە.', -'movereason' => 'هۆکار:', -'revertmove' => 'پێچەوانەکردنەوە', -'delete_and_move' => 'بیسڕەوە و بیگوازەوە', -'delete_and_move_text' => '== پێویستییەکانی سڕینەوە == -لاپەڕەی مەبەست "[[:$1]]" لە پێش‌دا هەیە. -ئایا دەتەوێ ئەوە بسڕیتەوە تا ڕێگە بۆ گواستنەوەی بکەیتەوە؟', -'delete_and_move_confirm' => 'بەڵێ، لاپەڕەکە بسڕەوه', -'delete_and_move_reason' => 'بۆ کردنەوەی ڕیگە بۆ گواستنەوەی لاپەڕە، سڕایەوە', -'selfmove' => 'سەردێڕەکانی سەرچاوە و مەبەست یەکێکن؛ -ناکرێ لاپەڕەیەک بۆ سەر خۆی‌ بگوازرێتەوە.', -'immobile-source-namespace' => 'گواستنەوەی لاپەڕە لە بۆشایی‌ناو "$1" ناکرێت.', -'immobile-target-namespace' => 'گواستنەوەی لاپەڕە بۆناو بۆشایی‌ناو "$1" ناکرێت.', -'immobile-target-namespace-iw' => 'بەستەرێکی نێوان‌ویکی ئامانجێکی گونجاو نیە بۆ گواستنەوەی لاپەڕە.', -'immobile-source-page' => 'ئەمە لاپەڕە بۆ گواستنەوە نابێت.', -'immobile-target-page' => 'بۆ ئەم سەردێڕی ئامانجە جێگۆڕ ناکرێ.', -'imagenocrossnamespace' => 'گواستنەوەی پەڕگە بۆ بۆشایی‌نوێکی غەیری پەڕگە گونجاو نیە.', -'imagetypemismatch' => 'پاشگری ئەو پەڕگە نوێیە هاوتای جۆری پەڕگەکە نیە.', -'imageinvalidfilename' => 'ناوی پەڕگەی ئامانج گونجاو نیە', -'fix-double-redirects' => 'نوێ‌کەردنەوەی هەموو ڕەوانکەرەکان وا ئاماژە بە سەردێڕە سەرەکیەکە دەکەن', -'move-leave-redirect' => 'لە پاشەوە ڕەوانکەرێک دابنە', -'protectedpagemovewarning' => "'''ئاگاداری: '''ئەم لاپەڕە داخراوە بۆیە تەنها ئەو بەکارهێنەرانەی مافی بەڕێوبەرایەتیان هەیە دەتوانن جێگۆڕی بکەن.", -'semiprotectedpagemovewarning' => "'''ئاگاداری: '''ئەم لاپەڕە داخراوە بۆیە تەنها ئەو بەکارهێنەرانەی هەژمارەکەیان تۆمار کراوە دەتوانن جێگۆڕی بکەن.", - -# Export -'export' => 'ھەناردنی پەڕەکان', -'exporttext' => 'دەتوانی دەق و مێژووی دەستکاری لاپەڕەیەکی تایبەت یان دەستە لاپەڕەیەک بۆ ناو پەڕگەیەکی XML هەناردن بکەیت. -دواتر بە کەڵک‌وەرگرتن لە [[Special:Import|لاپەڕەی هێنانەناوە]] لە مێدیاویکی‌دا، دەتوانی بیهێنیتە ناو ویکی‌یەکانی دیکە. - -بۆ هەناردنی لاپەڕەکان، سەردێڕەکان لە چوارچێوەی دەقی خوارەوە بنووسە، هەر هێڵێک یەک سەردێڕ. هەروا هەڵبژێرە ئایا پێداچوونەوەی ئێستا و هەموو پێداچوونەوە کۆنەکانت دەوێ یان هەر پێداچوونەوەی ئێستا و زانیاریی سەبارەت بە دوایین دەستکاری. - -لە بابەتی دواتر هەروەها دەتوانی لە بەستەرێک کەڵک وەرگریت، بۆ نموونە [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] بۆ لەپەڕەی "[[{{MediaWiki:Mainpage}}]]".', -'exportcuronly' => 'تەنها پێداچوونەوەی ئێستا لەخۆ بگرێت نەک هەموو مێژوو', -'exportnohistory' => "---- -'''ئاگاداربە: '''ھەناردنی ھەموو مێژووی پەڕەکان لەم فۆرمەوە لەبەر ھۆکاری ڕێخستن، داخراوە.", -'export-submit' => 'هەناردن', -'export-addcattext' => 'زیادکردنی لاپەڕەکان لە هاوپۆل:', -'export-addcat' => 'زیادکردن', -'export-addnstext' => 'زیادکردنی لاپەڕەکان لە بۆشایی‌ناو:', -'export-addns' => 'زیادکردن', -'export-download' => 'پاشەکەوت‌کردن وە پەڕگە', -'export-templates' => 'داڕێژەکانیش لە خۆگرێت', -'export-pagelinks' => 'لەخۆگرتنی لاپەڕەکانی بەستەر پێ‌دراو هەتا قووڵایی:', - -# Namespace 8 related -'allmessages' => 'پەیامەکانی سیستەم', -'allmessagesname' => 'ناو', -'allmessagesdefault' => 'دەقی بنەڕەتی', -'allmessagescurrent' => 'دەقی ھەنووکە', -'allmessagestext' => 'ئەمە لیستێکە لە پەیامەکانی بەردەست لە بۆشایی‌ناوی مێدیاویکی. -بۆ هاوبەشی لە ناوچەیی‌کردنی مێدیاویکی، تکایە سەرنجی [http://www.mediawiki.org/wiki/Localisation ناوچەیی‌کردن] و [http://translatewiki.net translatewiki.net] بدە.', -'allmessagesnotsupportedDB' => "ئەم لاپەڕە ناتوانی بەکاربێت لەبەر ئەوەی '''\$wgUseDatabaseMessages''' لەکار خستراوە.", -'allmessages-filter-legend' => 'پاڵێو', -'allmessages-filter-unmodified' => 'چاکسازی نەکراو', -'allmessages-filter-all' => 'هەموو', -'allmessages-filter-modified' => 'چاکسازی‌کراو', -'allmessages-prefix' => 'پاڵێو بە پێشگر:', -'allmessages-language' => 'زمان:', -'allmessages-filter-submit' => 'ڕۆشتن', - -# Thumbnails -'thumbnail-more' => 'گەورە کردنەوە', -'filemissing' => 'ون‌بوونی پەڕگە', -'thumbnail_error' => 'هەڵە کاتی درووست‌کردنی هێما: $1', -'djvu_page_error' => 'لاپەڕەی DjVu لەدەرۆی ڕیز', -'djvu_no_xml' => 'XML بۆ پەڕگەی DjVu ناکێشرێتەوە', -'thumbnail_invalid_params' => 'دیاریکەری نەگونجاوی هێما', -'thumbnail_dest_directory' => 'پێرستی مەبەست درووست‌ناکرێت', -'thumbnail_image-type' => 'جۆرەی وێنە پاڵپشت نەکراوە', -'thumbnail_gd-library' => 'شێوەپێدانی‌ ناتەواوی ژێدەرگەی GD: ون‌بوونی فەنکشێن $1', -'thumbnail_image-missing' => 'لەوە دەچێ پەڕگە ون بوبێت: $1', - -# Special:Import -'import' => 'هێنانەناوەی لاپەڕەکان', -'importinterwiki' => 'هێنانەناوەی ترانس‌ویکی', -'import-interwiki-text' => 'بۆ هێنانە‌ناوە ویکی‌یەک و سەردێڕێکی لاپەڕە هەڵبژێرە. -ڕێکەوتەکانی پێداچوونەوە و ناوی دەستکاری‌کەرەکان دەپارێزدرێت. -هەموو کردوەکانی هێنانەناوەی ترانس‌ویکی لە [[Special:Log/import|لۆگی هێنانەناوە]] لۆگ دەکرێت.', -'import-interwiki-source' => 'سەرچاوەی ویکی\\لاپەڕە :', -'import-interwiki-history' => 'ڕوونووس‌کردنی هەموو مێژووی پێداچوونەوەکانی ئەم لاپەڕە', -'import-interwiki-templates' => 'لەخۆگرتنی هەموو داڕێژەکان', -'import-interwiki-submit' => 'هاوردن', -'import-interwiki-namespace' => 'بۆشایی‌ناوی مەبەست:', -'import-upload-filename' => 'پەڕگە‌ناو:', -'import-comment' => 'بۆچوون:', -'importtext' => 'تکایە هەناردنی پەڕگە لە سەرچاوەی ویکی‌یەوە بە کەڵک وەرگرتن لە [[Special:Export|ئامێری هەناردن]] بکە. -لەسەر کۆمپیۆتەرەکەت پاشەکەوتی بکە و باری‌بكە ئێرە.', -'importstart' => 'هێنانەناوەی لاپەڕەکان', -'import-revision-count' => '$1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}}', -'importnopages' => 'هیچ لاپەڕەیەک نیە بۆ هێنانەناوە.', -'importfailed' => 'هێنانەناوە سەرکەوتوو نەبوو: $1', -'importunknownsource' => 'جۆرەی سەرچاوەی هێنانەناوەی نەناسراو', -'importcantopen' => 'پەڕگەی هێنانەناوە ناکرێتەوە', -'importbadinterwiki' => 'بەستەری خراپی نێوان‌ویکی', -'importnotext' => 'بەتاڵ لە دەق', -'importsuccess' => 'هێنانەناوە تەواو بوو!', -'importhistoryconflict' => 'کێشە لەو مێژووی پێداچوونەوانە وا هەیە (لەوانەیە ئەم لاپەڕە لەپێش‌دا هێنرابێتەناوە)', -'importnosources' => 'هیچ سەرچاوەیەکی هێنانەناوەی نێوان‌ویکی دیاری‌نەکراوە و بارکردنی ڕاستەوخۆی مێژوو لەکارخستراوە.', -'importnofile' => 'هیچ پەڕگەیەکی هێنانەناوە بارنەکرا.', -'importuploaderrorsize' => 'بارکردنی پەڕگەی هێنانەناوە سەرکەوتوو نەبوو. -پەڕگەکە لەو قەبارەی بۆ بارکردن ڕێگەدراوە گەورەترە.', -'importuploaderrorpartial' => 'بارکردنی پەڕگەی هێنانەناوە سەرکەوتوو نەبوو. -تەنها بەشێک لە پەڕگەکە بارکرا.', -'importuploaderrortemp' => 'بارکردنی پەڕگەی هێنانەناوە سەرکەوتوو نەبوو. -بوخچەیەکی کاتی ون‌بووە.', -'import-parse-failure' => 'سەرنەکەوتن لە هێنانەناوەی XML', -'import-noarticle' => 'هیچ لاپەڕەیەک نیە بۆ هێنانەناوە', -'import-nonewrevisions' => 'هەموو پێداچوونەوەکان لە پێش‌دا هێنراونەتەناوە.', -'import-upload' => 'بارکردنی دراوەی XML', -'import-token-mismatch' => 'لەدەست‌ڕۆشتنی دراوەکانی ئەو بەشە. -تکایە دیسان تاقی‌بکەوە.', -'import-invalid-interwiki' => 'لە ویکی‌ دیاری‌کراوە ناهێنڕێتەوە ناوە.', - -# Import log -'importlogpage' => 'هێنانەناوەی لۆگ', -'importlogpagetext' => 'هێنانەناوەی لاپەڕەکان دەگەل مێژووی دەستکاری لە ویکی‌یەکانی دیکەی لە لایەن بەرێوبەرایەتی.', -'import-logentry-upload' => 'هێنراوەناوەی [[$1]] بە بارکردنی پەڕگە', -'import-logentry-upload-detail' => '$1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}}', -'import-logentry-interwiki' => 'ترانس‌ویکی‌کراو $1', -'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}} لە $2', - -# Tooltip help for the actions -'tooltip-pt-userpage' => 'پەڕە بەکارھێنەریی تۆ', -'tooltip-pt-anonuserpage' => 'پەڕەی بەکارھێنەری بۆ ئای‌پی یەکە کە بەناویەوە خەریکی دەستکاری کردنی', -'tooltip-pt-mytalk' => 'پەڕەی وتوبێژی تۆ', -'tooltip-pt-anontalk' => 'لێدوان لەسەر دەستکارییەکان لەم ئایپی ئەدرەسەوە', -'tooltip-pt-preferences' => 'بژاردەکانت', -'tooltip-pt-watchlist' => 'لیستی ئەو پەڕانە کە چاودێری گۆڕانکارییەکانیانی دەکەی', -'tooltip-pt-mycontris' => 'لیستی بەشدارییەکانت', -'tooltip-pt-login' => 'هاندەدرێیت کە بچیتە ژوورەوە؛ هەرچەندە، پێویست نییە', -'tooltip-pt-anonlogin' => 'پێشنیار دەکەین بڕۆیتەژوورەوە، ئەگەرچی ئەوە زۆرەملیی نیە', -'tooltip-pt-logout' => 'دەرچوون', -'tooltip-ca-talk' => 'لێدوان دەربارەی ناوەڕۆکی پەرە', -'tooltip-ca-edit' => 'ئەتوانی دەستکاری ئەم پەڕەیە بکەیت. -تکایە دوگمەی پێشبینین بەکارببە پێش پاشەکەوتکردن.', -'tooltip-ca-addsection' => 'بەشێکی نوێ دەست پێ بکە', -'tooltip-ca-viewsource' => 'ئەم پەڕەیە پارێزراوە. -ئەتوانی سەرچاوەکەی ببینیت', -'tooltip-ca-history' => 'وەشانەکانی پێشووی ئەم پەڕەیە', -'tooltip-ca-protect' => 'ئەم پەڕەیە بپارێزە', -'tooltip-ca-delete' => 'ئەم پەڕەیە بسڕەوە', -'tooltip-ca-undelete' => 'هێنانەوەی دەستکاریەکانی پیش سڕینەوە وا لەسەر ئەم لاپەڕە ڕووی‌داوە', -'tooltip-ca-move' => 'ئەم پەڕەیە بگوازەوە', -'tooltip-ca-watch' => 'ئەم پەڕە بخە سەر لیستی چاودێریت', -'tooltip-ca-unwatch' => 'ئەم پەڕە لە لیستی چاودێڕییەکەت لابە', -'tooltip-search' => 'لە {{SITENAME}} بگەڕێ', -'tooltip-search-go' => 'بڕۆ بۆ پەڕەیەک کە بە تەواوەتی ئەم ناوەی تیادایە ئەگەر هەبێت', -'tooltip-search-fulltext' => 'لە پەڕەکاندا بگەڕێ بۆ ئەم دەقە', -'tooltip-p-logo' => 'بینینی پەڕەی دەستپێک', -'tooltip-n-mainpage' => 'بینینی پەڕەی دەستپێک', -'tooltip-n-mainpage-description' => 'سەردانی پەڕەی سەرەکی بکە', -'tooltip-n-portal' => 'دەربارەی پڕۆژەکە، چی ئەتوانی بکەیت، لە کوێ شتەکان بدۆزیتەوە', -'tooltip-n-currentevents' => 'زانیاری پێشینە بەدەست بھێنە دەربارەی بۆنە ھەنووکەییەکان', -'tooltip-n-recentchanges' => 'لیستی دوایین گۆڕانکارییەکان لەم ویکییەدا', -'tooltip-n-randompage' => 'پەڕەیەک بە هەڵکەوت نیشان بدە', -'tooltip-n-help' => 'شوێنێک بۆ دۆزینەوەی', -'tooltip-t-whatlinkshere' => 'لیستی هەموو ئەو پەڕانەی ویکی کە بەستەرکراون بۆ ئێرە', -'tooltip-t-recentchangeslinked' => 'دوایین گۆڕانکارییەکان لەو پەڕانە کە بەگرەوە گرێ دراون', -'tooltip-feed-rss' => 'RSS بۆ ئەم گۆڕانکارییەکانی ئەم پەڕە', -'tooltip-feed-atom' => 'Atom feed بۆ ئەم گۆڕانکارییەکانی ئەم پەڕە', -'tooltip-t-contributions' => 'بینینی بەشدارییەکانی ئەم بەکارھێنەرە', -'tooltip-t-emailuser' => 'ئیمەیلێک بنێرە بۆ ئەم بەکارھێنەرە', -'tooltip-t-upload' => 'پەڕگەیەک (فایل) بار بکە', -'tooltip-t-specialpages' => 'لیستی ھەموو پەڕە تایبەتەکان', -'tooltip-t-print' => 'وەشانی چاپی ئەم پەڕەیە', -'tooltip-t-permalink' => 'گرێدەری ھەمیشەیی بۆ ئەم وەشانەی ئەم پەڕەیە', -'tooltip-ca-nstab-main' => 'بینینی پەڕەی ناوەڕۆک', -'tooltip-ca-nstab-user' => 'پەڕەی بەکارھێنەر تەماشا بکە', -'tooltip-ca-nstab-media' => 'پەڕەی میدیا چاو لێ بکە', -'tooltip-ca-nstab-special' => 'ئەمە پەڕەیەکی تایبەتە، ناتوانی خودی ئەم پەڕە دەستکاری بکەیت', -'tooltip-ca-nstab-project' => 'بینینی پەڕەی پرۆژە', -'tooltip-ca-nstab-image' => 'بینینی پەڕەی پەڕگە', -'tooltip-ca-nstab-mediawiki' => 'بینینی پەیامی سیستەم', -'tooltip-ca-nstab-template' => 'بینینی قاڵبەکە', -'tooltip-ca-nstab-help' => 'بینینی پەڕەی رێنمایی', -'tooltip-ca-nstab-category' => 'بینینی پەڕەی ھاوپۆلەکان', -'tooltip-minoredit' => 'ئەمە وەک گۆڕانکارییەکی بچووک دیاری بکە', -'tooltip-save' => 'گۆڕانکارییەکانی خۆت پاشکەوت بکە', -'tooltip-preview' => 'پێش بینینی گۆڕانکارییەکان، تکایە پێش پاشکەوت کردن ئەمە بەکار بھێنە', -'tooltip-diff' => 'نیشان دانی گۆڕانکارییەکانت لە دەقەکەدا', -'tooltip-compareselectedversions' => 'جیاوازییەکانی دوو وەشانە دیاریکراوەی ئەم پەڕە ببینە.', -'tooltip-watch' => 'ئەم پەڕە بخەرە سەر لیستی چاودێڕیەکەت', -'tooltip-recreate' => 'درووست‌کردنەوەی لاپەڕە ئەگەرچی سڕاوەتەوە', -'tooltip-upload' => 'دەستپێکردنی بارکردن', -'tooltip-rollback' => "''گەڕاندنەوە'' بە یەک کلیک گۆڕانکاری (گۆڕانکارییەکانی) ئەم پەڕە ئەباتەوە بۆ ھی دواین بەشدار", -'tooltip-undo' => '"پاشگەزبوونەوە" گۆڕانکارییەکان دەگەڕەنێتەوە و فۆرمی دەستکاری کردن لە حاڵەتی پێشبینین دەکاتەوە. بەم شێوە دەکرێ ھۆکارێک لە بەشی پوختە دا بنووسرێت.', - -# Metadata -'notacceptable' => 'ڕاژەکاری ویکی ناتوانێت داتا بەوشێوەی بۆ ڕاژەخوازی تۆ بخوێندرێتەوە، ئامادە بکات.', - -# Attribution -'anonymous' => '{{PLURAL:$1|بەکارهێنەری|بەکارهێنەرانی}} نەناسراوی {{SITENAME}}', -'siteuser' => 'بەکارھێنەری {{SITENAME}}، $1', -'lastmodifiedatby' => 'ئەم پەڕە دواجار لە $2ی $1 بە دەستی $3 گۆڕدراوە.', -'othercontribs' => 'لەسەر بنەمای کاری $1.', -'others' => 'ئەوانی دیکە', -'siteusers' => '{{PLURAL:$2|بەکارهێنەری|بەکارهێنەرانی}} {{SITENAME}} $1', -'creditspage' => 'بایەخەکانی لاپەڕە', -'nocredits' => 'هیچ زانیارییەکی بایەخ لەبەردەست‌دا نیە بۆ ئەم لاپەڕە.', - -# Spam protection -'spamprotectiontitle' => 'پاڵێوی پاراستن لە سپام', -'spamprotectiontext' => 'ئەو لاپەڕەی دەتویست پاشەکەوتی بکەی، بە پاڵێوی سپام بەربەست‌کرا -لەوانەیە هۆکاری ئەوە بەستەرەک بووە بۆ ماڵپەڕەکی دەرەکی کە لەناو ڕەش‌لیست‌دایە.', -'spamprotectionmatch' => 'ئەم دەقە ئەوەیە کە پاڵێوی سپامەکە دەبزوێنێ: $1', -'spambot_username' => 'خاوێن‌کردنەوەی سپامی مێدیاویکی', -'spam_reverting' => 'گەڕانەوە بۆ دوایین پێداچوونەوە کە بەستەری لەخۆگرتووە بۆ $1', - -# Info page -'infosubtitle' => 'زانیاریی لاپەڕە', -'numedits' => 'ژمارەی دەستکارییەکان (پەڕە): $1', -'numtalkedits' => 'ژمارە گۆڕانکارییەکان (پەڕەی لێدوان): $1', -'numwatchers' => 'ژمارەی چاودێران: $1', -'numauthors' => 'ژمارەی نووسەری جودا (لاپەڕە): $1', - -# Skin names -'skinname-standard' => 'کلاسیک', -'skinname-nostalgia' => 'غەریبی', -'skinname-cologneblue' => 'شینی کۆلۆن', -'skinname-monobook' => 'مۆنۆ', -'skinname-myskin' => 'پێستی خۆم', -'skinname-chick' => 'جوجه‌', -'skinname-simple' => 'ساده‌', -'skinname-modern' => 'مۆدێڕن', -'skinname-vector' => 'ڤێکتۆر', - -# Math options -'mw_math_png' => 'ھەموو جارێک وەک PNG نیشان بدە', -'mw_math_simple' => 'HTML ئەگەر ساکار بێت, ئەگەرنا PNG', -'mw_math_html' => 'ئەگەر بکرێ بە HTML ، ئەگەرنا بە PNG', -'mw_math_source' => 'وەک TeX بمێنێتەوە (بۆ وێبگەڕە دەقی‌یەکان)', -'mw_math_modern' => 'بۆ وێبگەڕە مۆدێڕنەکان باشترە', - -# Math errors -'math_unknown_error' => 'هەڵەیەکی نەزانراو', -'math_unknown_function' => 'فەرمانێکی نەناسراو', -'math_syntax_error' => 'ڕستەکار هەڵەیە', - -# Patrolling -'markaspatrolleddiff' => 'وەک چاودێری‌کراو نیشان‌کردن', -'markaspatrolledtext' => 'ئەم لاپەڕە وەک چاودێری‌کراو نیشان بکە', -'markedaspatrolled' => 'وەک چاودێری‌کراو نیشان‌کرا', -'markedaspatrolledtext' => 'پێداچوونەوەی هەڵبژێراو وەک چاودێری‌کراو نیشان‌کرا.', -'rcpatroldisabled' => 'چاودێری دوایین گۆڕانکاریەکان لەکار خسترا', -'rcpatroldisabledtext' => 'تایبەتمەندی چاودێری دوایین گۆڕانکاریەکان ئێستا لەکار خستراوە.', -'markedaspatrollederror' => 'ناکرێ وه‌ک چاودێری‌کراو نیشان بکرێت', -'markedaspatrollederror-noautopatrol' => 'ڕێگەت پێ‌نەدراوە گۆڕانکاریەکانی خۆت وەک چاودێری‌کراو نیشان بکەیت.', - -# Patrol log -'patrol-log-page' => 'لۆگی چاودێری', -'patrol-log-header' => 'ئەمە لۆگێکی چاودێری پێداچوونەوەکانە.', -'patrol-log-auto' => '(خۆکار)', -'patrol-log-diff' => 'پێداچوونەوە $1', -'log-show-hide-patrol' => 'لۆگی چاودێری $1', - -# Image deletion -'deletedrevision' => 'پێداچوونەوەی کۆنی سڕاوە $1', -'filedeleteerror-short' => 'هەڵە لە سڕینەوەی پەڕگە: $1', -'filedeleteerror-long' => 'کاتی سڕینەوەی ئەم پەڕگەی ڕووبەڕووی کێشە بووینەوە: - -$1', -'filedelete-missing' => 'فایلی "$1" ناتوانرێت بسردرێته‌وه‌ ،له‌به‌ر ئه‌وه‌ی بونی نیه‌', - -# Browsing diffs -'previousdiff' => '→ گۆڕانکاریی کۆنتر', -'nextdiff' => 'گۆڕانکاریی نوێتر ←', - -# Media information -'thumbsize' => 'قەبارەی وێنۆک:', -'file-info' => '(قه‌باره‌: $1, جۆر: $2)', -'file-info-size' => '($1 × $2 پیکسێل، قەبارەی پەڕگە: $3، جۆری MIME: $4)', -'file-nohires' => 'رەزۆلوشنی سەرتر لەمە لە بەردەست دا نیە.', -'svg-long-desc' => '(پەڕگەی SVG، بە ناو $1 × $2 خاڵ، قەبارەی پەڕگە: $3)', -'show-big-image' => 'گەورە کردنەوە', -'show-big-image-thumb' => 'قەبارەی ئەم پێشبینینە: $1 × $2 خاڵە', - -# Special:NewFiles -'newimages' => 'پێشانگای پەڕگە نوێکان', -'newimages-legend' => 'پاڵاوتن', -'noimages' => 'هیچ بۆ دیتن نیە.', -'ilsubmit' => 'گەڕان', -'bydate' => 'بەپێی ڕێکەوت', - -# Bad image list -'bad_image_list' => 'فۆرمات بەم شێوەی خوارەوەیە: - -تەنھا ئەو بابەتانەی کە کە لیست کراون (واتە ئەو دێڕانەی بە * دەست پێ دەکەن) لێک ئەدرێتەوە. -یەکەم بەستەر لە سەر دێڕێک دەبێت بەستەری فایلێکی خراپ بێت. -ھەموو بەستەرەکانی دوای ئەو کە لەسەر ھەمان دێڕن وەکوو نائاسایی دێتە ھەژمار، واتە ئەو لاپەڕانەی کە ڕەنگە تێدا فایل بە شێوەی ئینلاین بێت', - -# Variants for Kurdish language -'variantname-ku-arab' => 'ئەلفوبێی عەرەبی', -'variantname-ku-latn' => 'ئەلفوبێی لاتینی', - -# Metadata -'metadata' => 'دراوی مێتا', -'metadata-help' => 'ئەم پەڕگە زانیاری زێدەی ھەیە، کە لەوە دەچێت کامێرا یان ھێماگر (scanner) خستبێتیە سەری. ئەگەر پەڕگەکە لە حاڵەتی سەرەتاییەکەیەوە دەستکاری کرابێ، شایەد بڕێ لە بڕگەکان بە تەواوی زانیارەکانی وێنە گۆڕدراوەکە نیشان نەدەن.', -'metadata-expand' => 'وردەکارییە درێژکراوەکان پیشان بدە', -'metadata-collapse' => 'وردەکارییە درێژکراوەکان بشارەوە', -'metadata-fields' => 'ئەو کێڵگە EXIFانە لەم پەیامە بە ڕیز کراون، کاتێک خشتەی metadata کۆ کراوەش بێ ھەر نیشان ئەدرێت. کێڵگەکانی تر تا خشتەکە باز نەکرێ، شاراوەن. -* make -* model -* datetimeoriginal -* exposuretime -* fnumber -* isospeedratings -* focallength', - -# EXIF tags -'exif-imagewidth' => 'پانی', -'exif-imagelength' => 'بەرزی', -'exif-imagedescription' => 'ناونیشانی وێنە', -'exif-model' => 'جۆری کامێرا', -'exif-artist' => 'نووسەر', -'exif-colorspace' => 'بۆشایی ره‌نگ', -'exif-usercomment' => 'بۆچوونەکانی بەکارهێنەر', -'exif-relatedsoundfile' => 'فایلی ده‌نگی لێکچوو', -'exif-lightsource' => 'سەرچاوەی ڕووناکی', -'exif-flash' => 'فلاش', -'exif-filesource' => 'سەرچاوەی پەڕگە', -'exif-saturation' => 'تێربوون', -'exif-gpslatitude' => 'پانی', -'exif-gpslongitude' => 'درێژی', -'exif-gpsmeasuremode' => 'جۆری پێوان', -'exif-gpsdop' => 'وردی پێوان', -'exif-gpsspeedref' => 'یەکەی خێرایی', -'exif-gpsspeed' => 'خێرایی وەرگری GPS', -'exif-gpstrack' => 'ئاڕاستەی جوڵان', -'exif-gpsimgdirection' => 'ئاڕاستەی وێنە', -'exif-gpsdatestamp' => 'ڕێکەوتی GPS', - -# EXIF attributes -'exif-compression-1' => 'نەپەستێنراو', - -'exif-unknowndate' => 'ڕێکەوتی نەزانراو', - -'exif-orientation-1' => 'ئاسایی', -'exif-orientation-2' => 'ئاسۆیی هەڵگێڕدراوەتەوە', -'exif-orientation-3' => '١٨٠° سوڕاوەتەوە', -'exif-orientation-4' => 'ستوونی هەڵگێڕدراوەتەوە', - -'exif-componentsconfiguration-0' => 'بوونی نییە', - -'exif-exposureprogram-1' => 'دەستکار', - -'exif-meteringmode-0' => 'نەزانراو', -'exif-meteringmode-1' => 'تێکڕا', -'exif-meteringmode-5' => 'شێوە', -'exif-meteringmode-6' => 'بەش بەش', -'exif-meteringmode-255' => 'هیتر', - -'exif-lightsource-0' => 'نەزانراو', -'exif-lightsource-1' => 'ڕووناکی ڕۆژ', -'exif-lightsource-2' => 'فلۆرسەنت', -'exif-lightsource-3' => 'تانگەستەن', -'exif-lightsource-4' => 'فلاش', -'exif-lightsource-9' => 'ئاسمانی ڕوون', -'exif-lightsource-10' => 'ئاسمانی هەوری', -'exif-lightsource-11' => 'سێبەر', -'exif-lightsource-12' => 'فلۆرسەنتی ڕووناکیی‌ڕۆژ (D 5700 – 7100K)', -'exif-lightsource-13' => 'فلۆرسەنتی سپیی ڕۆژ (N 4600 – 5400K)', -'exif-lightsource-14' => 'فلۆرسەنتی سپیی فێنک (W 3900 – 4500K)', -'exif-lightsource-15' => 'فلۆرسەنتی سپی (WW 3200 – 3700K)', -'exif-lightsource-17' => 'ڕووناکی ستانداردی A', -'exif-lightsource-18' => 'ڕووناکی ستانداردی B', -'exif-lightsource-19' => 'ڕووناکی ستانداردی C', -'exif-lightsource-24' => 'ISOـی تانگەستەنی ستۆدیۆ', -'exif-lightsource-255' => 'سەرچاوەی دیکە ڕووناکی', - -# Flash modes -'exif-flash-fired-0' => 'فلاش کاری نەکرد', -'exif-flash-fired-1' => 'فلاش کاری کرد', -'exif-flash-return-0' => 'فەنکشێنی بینینەوەی گەڕانەوەی ڕووناکی فلاش نیە', -'exif-flash-return-2' => 'گەڕانەوەی ڕووناکی فلاش نەبینرایەوە', -'exif-flash-return-3' => 'گەڕانەوەی ڕووناکی فلاش بینرایەوە', -'exif-flash-mode-1' => 'کارکردنی ناچاریی فلاش', -'exif-flash-mode-2' => 'بەرگری ناچاری لە کارکردنی فلاش', -'exif-flash-mode-3' => 'شێوازی خۆکار', -'exif-flash-function-1' => 'فەنکشێنی فلاش نیە', -'exif-flash-redeye-1' => 'شێوازی کەم‌کردنەوەی سوور-چاو', - -'exif-focalplaneresolutionunit-2' => 'ئینج', - -'exif-sensingmethod-1' => 'دیاری نەکراو', -'exif-sensingmethod-2' => 'یەک چیپی هەستەوەری بەشی ڕەنگ', -'exif-sensingmethod-3' => 'دوو چیپی هەستەوەری بەشی ڕەنگ', -'exif-sensingmethod-4' => 'سێ چیپی هەستەوەری بەشی ڕەنگ', -'exif-sensingmethod-5' => 'هەستەوەری بەشی ڕەنگی زنجیری', -'exif-sensingmethod-7' => 'هەستەوەری سێ‌هێڵی', -'exif-sensingmethod-8' => 'هەستەوەری هێڵی ڕەنگی زنجیری', - -'exif-scenetype-1' => 'وێنەیەکی ڕاستەوخۆ وێنەگیراو', - -'exif-customrendered-0' => 'پرۆسەی ئاسایی', -'exif-customrendered-1' => 'پرۆسەی دڵخواز', - -'exif-exposuremode-0' => 'بەرچاو خستنی خۆکار', -'exif-exposuremode-1' => 'بەرچاو خستنی دەستی', -'exif-exposuremode-2' => 'زنجیرە گرتنی خۆکار', - -'exif-whitebalance-0' => 'خۆکار یەکسان‌کردنی سپیایی', -'exif-whitebalance-1' => 'دەستی یەکسان‌کردنی سپیایی', - -'exif-scenecapturetype-0' => 'ستاندارد', -'exif-scenecapturetype-1' => 'دیمەن', -'exif-scenecapturetype-2' => 'پۆرترە', -'exif-scenecapturetype-3' => 'وێنەی شەو', - -'exif-gaincontrol-0' => 'هیچ', - -'exif-contrast-0' => 'ئاسایی', -'exif-contrast-1' => 'نەرم', -'exif-contrast-2' => 'ڕەق', - -'exif-saturation-0' => 'ئاسایی', -'exif-saturation-1' => 'تێرکردنی کەم', -'exif-saturation-2' => 'تێرکردنی زۆر', - -'exif-sharpness-0' => 'ئاسایی', -'exif-sharpness-1' => 'نەرم', -'exif-sharpness-2' => 'ڕەق', - -'exif-subjectdistancerange-0' => 'نەزانراو', -'exif-subjectdistancerange-1' => 'گەورە', -'exif-subjectdistancerange-2' => 'دیمەنی نزیک', -'exif-subjectdistancerange-3' => 'دیمەنی دوور', - -# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef -'exif-gpslatitude-n' => 'پانیی جوگرافیایی باکوور', -'exif-gpslatitude-s' => 'پانیی جوگرافیایی باشوور', - -# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef -'exif-gpslongitude-e' => 'پانیی جوگرافیایی ڕۆژهەڵات', -'exif-gpslongitude-w' => 'پانیی جوگرافیایی ڕۆژئاوا', - -# Pseudotags used for GPSSpeedRef -'exif-gpsspeed-k' => 'کیلۆمەتر هەر کاتژمێر', -'exif-gpsspeed-m' => 'مایل هەر کاتژمێر', - -# External editor support -'edit-externally' => 'دەستکاری ئەم پەڕەیە بکە بە بەکارهێنانی پڕۆگرامێکی دەرەکی', -'edit-externally-help' => '(بۆ زانیاریی زیاتر سەیری [http://www.mediawiki.org/wiki/Manual:External_editors ڕێنماییەکانی دامەزراندن] بکە)', - -# 'all' in various places, this might be different for inflected languages -'recentchangesall' => 'ھەموو', -'imagelistall' => 'ھەموو', -'watchlistall2' => 'ھەموو', -'namespacesall' => 'ھەموو', -'monthsall' => 'ھەموو', - -# E-mail address confirmation -'confirmemail' => 'بڕواپێ‌کردنی ناونیشانی ئی‌مەیل', -'confirmemail_noemail' => 'لە [[Special:Preferences|هەڵبژاردەکانی بەکارهێنەر]] ناونیشانی ئی‌مەیلی گونجاوت دیاری نەکردووە.', -'confirmemail_text' => '{{SITENAME}} بە پێویستی دەزانێ پێش کەڵک وەرگرتن لە تایبەتمەندیەکانی ئی‌مەیل، ناونیشانی ئی‌مەیلی خۆت ڕاچاو بکەیت. -ئەو دوکمەی خوارەوە چالاک بکە تاکوو ئی‌مەیلێکی بڕوا پێ‌کردن بنێردرێت بۆ ناونیشانی ئی‌مەیلەکەت. -ئەو ئی‌مەیلە بەستەرەکی تێدایە؛ لە وێبگەڕەکەت ئەو بەستەرە ببینە تاکوو ناونیشانی ئی‌مەیلەکەت بڕوادار بێت.', -'confirmemail_pending' => 'کۆدی بڕواپێ‌کردن لە پێش‌دا ئی‌مەیل کراوە بۆت. -ئەگەر بە تازەیی هەژمارەت درووست‌کردووە، لەوانەیە باشتربێت چەن خۆلکێک بوەستی بۆ گەیشتنی ئەو ئەمەیلی، پێش دیسان داواکردنەوەی کۆدی نوێ.', -'confirmemail_send' => 'ئی‌مەیل‌کردنی کۆدی بڕواپێ‌کردن', -'confirmemail_sent' => 'ئی‌مەیلی بڕواپێ‌کردن ناردرا.', -'confirmemail_oncreate' => 'کۆدی بڕواپێ‌کردنی ناردرا بۆ ناونیشانی ئی‌مەیلت. -پێویست نیە بڕۆیتە ژوورەوە، تەنها پێویستە پێش کەڵک وەرگرتن لە تایبەتمەندیەکان ئی‌مەیلیی ویکی ئەوە جێبەجێ بکەیت.', -'confirmemail_sendfailed' => '{{SITENAME}} ناتوانێ ئی‌مەیلی برواکردن بنێرێت بۆ تۆ. -تکایە ئەرخەیان بە هەموو پیتەکانی ناونیشانەکەت گونجاوە. - -مەیلکەر ئەوەی گەڕاندەوە: $1', -'confirmemail_invalid' => 'کۆدی بڕواپێ‌کردنی نەگونجاو. -لەوانەیە ئەو کۆدە ماوەی بەسەر چووبێت.', -'confirmemail_needlogin' => 'بۆ بڕواپێ‌کردنی ناونیشانی ئی‌مەیلەکەت، دەبێ $1.', -'confirmemail_success' => 'ناونیشانی ئی‌میلەکەت بڕوای‌پێ‌کرا. -ئێستە دەتوانی [[Special:UserLogin|بڕۆیتە ژوورەوە]] و لە ویکی کەڵک بگری.', -'confirmemail_loggedin' => 'ناونیشانی ئی‌مەیلەکەت ئێستا بڕوای پێ‌کرا.', -'confirmemail_error' => 'کێشەیەک هەیە لە پاشەکەوت‌کردنی بڕواپێ‌کردنی تۆدا.', -'confirmemail_subject' => 'بڕوا پێ‌کردنی ناونیشانی ئی‌مەیلی {{SITENAME}}', -'confirmemail_body' => 'کەسێک، لەوانەیە خۆت، لە ناونیشانی ئای‌پی $1، -لە {{SITENAME}} بەم ناونیشانی ئی‌مەیلە، هەژمارەیەکی تۆمارکردووە "$2" . - -بۆ ئەوەی بڕا بکرێت کە ئەم هەژمارە لە ڕاستیدا بۆتۆیە و بۆ چالاک‌کردنی تایبەتمەندیەکانی ئی‌مەیل لە {{SITENAME}}دا، ئەو بەستەرەی خوارەوە لە وێبگەڕەکەت‌دا بکەوە: - -$3 - -ئەگەر تۆ ئەو هەژمارەت تۆمار *نەکردووە*، بۆ هەڵوەشاندنەوەی بڕوا‌پێ‌کردنی ناونیشانی ئی‌مەیل بڕۆ بۆ ئەم بەستەرە: - -$5 - -ئەم کۆدی بڕواپێ‌کردنە لە $4 ماوەی بەسەردێت.', -'confirmemail_invalidated' => 'بڕواپی‌کردنی ناونیشانی ئی‌مەیل هەڵوەشێندراوە', -'invalidateemail' => 'هەڵوەشاندنەوەی بڕواپێ‌کردنی ئی‌مەیل', - -# Scary transclusion -'scarytranscludetoolong' => '[URL زۆر درێژە]', - -# Trackbacks -'trackbackremove' => '([سڕینەوە $1])', - -# Delete conflict -'recreate' => 'درووست‌کردنەوە', - -# action=purge -'confirm_purge_button' => 'باشە', - -# Separators for various lists, etc. -'semicolon-separator' => '؛ ', -'comma-separator' => '، ', - -# Multipage image navigation -'imgmultipageprev' => '← پەڕەی پێشوو', -'imgmultipagenext' => 'پەڕەی داهاتوو →', -'imgmultigo' => 'بڕۆ!', -'imgmultigoto' => 'بڕۆ بۆ پەڕەی $1', - -# Table pager -'table_pager_next' => 'پەڕەی داهاتوو', -'table_pager_prev' => 'پەڕەی پێشوو', -'table_pager_first' => 'پەرەی یەکەم', -'table_pager_last' => 'دوا پەڕە', -'table_pager_limit' => '$1 دانە پیشان بدە بۆ هەر پەڕەیەک', -'table_pager_limit_submit' => 'بڕۆ', -'table_pager_empty' => 'هیچ ئەنجامێک نییە', - -# Auto-summaries -'autosumm-blank' => 'پەڕەکەی واڵا کردەوە', -'autoredircomment' => 'ڕەوانە کرا بۆ [[$1]]', -'autosumm-new' => "پەڕەیەک دروست کرا بە '$1'", - -# Size units -'size-bytes' => '$1 بایت', -'size-kilobytes' => '$1 کیلۆبایت', -'size-megabytes' => '$1 مێگابایت', - -# Live preview -'livepreview-loading' => 'له‌باركردنایه‌ ...', -'livepreview-ready' => 'ئاماده‌یه‌', - -# Friendlier slave lag warnings -'lag-warn-normal' => 'گۆڕانکاریەکانی نوێ‌تر لە $1 {{PLURAL:$1|چرکە|چرکە}} لەوانەیە لەم لیستەدا نیشان نەدرێن.', -'lag-warn-high' => 'لەبەر زۆر دواکەوتنی ڕاژەکاری بنکەدراو، گۆڕانکاریەکانی نوێ‌تر لە $1 {{PLURAL:$1|چرکە|چرکە}} لەوانەیە لەم لیستەدا نیشان نەدرێن.', - -# Watchlist editor -'watchlistedit-numitems' => 'بێجگە لە پەڕەی وتووێژەکان، لیستی چاودێڕییەکانت {{PLURAL:$1|1 بابەت|$1 بابەت}}ی تێدایە،', -'watchlistedit-noitems' => 'لیستی چاودێڕییەکانت ھیچ بابەتێکی تێدا نییە.', -'watchlistedit-normal-title' => 'دە‌ستکاری لیستی چاودێری', -'watchlistedit-normal-legend' => 'لابردنی سەردێڕەکان لە لیستی چاودێری', -'watchlistedit-normal-explain' => 'سەردێڕی بڕگەکانی لیستی چاودێریەکەت لە خوارەوە نیشان‌دراون.
    -بۆ لابردنی هەرکام، چوارچێوەی بەرامبەری نیشان بکە و کرتە بکە سەر لابردنی سەردێڕەکان.
    -هەروا دەتوانی [[Special:Watchlist/raw|دەستکاری لیستی خاو]]بکەیت.', -'watchlistedit-normal-submit' => 'ناونیشانەکان لاببە', -'watchlistedit-normal-done' => '{{PLURAL:$1|1 سەردێڕ |$1 سەردێڕ}} لە لیستی چاودێریت سڕایەوە:', -'watchlistedit-raw-title' => 'دەستکاری لیستی خاوی چاودێری', -'watchlistedit-raw-legend' => 'دەستکاری لیستی خاوی چاودێری', -'watchlistedit-raw-explain' => 'سەردێڕی بەڕگەکانی لیستی چاودێریەکەت لە خوارەوە نیشان‌دراون و دەتوانی بە زیادکردن و لابردن دەستکاری بکەیت؛
    -هەر هێڵێک، سەردێڕێک.
    -کاتێ تەواوت‌کرد، کرتە بکە سەر نوێ‌کردنەوەی لیستی چاودێری.
    -هەروا دەتوانی لە [[Special:Watchlist/edit|دەستکاریکەری ستاندارد]] کەڵک‌وەرگریت.', -'watchlistedit-raw-titles' => 'ناونیشانەکان:', -'watchlistedit-raw-submit' => 'نوێکردنەوەی لیستی چاودێری', -'watchlistedit-raw-done' => 'لیستی چاودێریەکەت نوێ‌کرایەوە', -'watchlistedit-raw-added' => '{{PLURAL:$1|1 سەردێڕ|$1 سەردێڕ}} زیادکرا:', -'watchlistedit-raw-removed' => '{{PLURAL:$1|1 سەردێڕ|$1 سەردێڕ}} لابرا:', - -# Watchlist editing tools -'watchlisttools-view' => 'دیتنی گۆڕانکارییە پەیوەندیدارەکان', -'watchlisttools-edit' => 'بینین و دەستکاری کردنی لیستی چاودێڕییەکان', -'watchlisttools-raw' => 'دەستکاری کردنی لیستی خامی چاودێڕییەکان', - -# Iranian month names -'iranian-calendar-m1' => 'خاکەلێوە', -'iranian-calendar-m2' => 'گوڵان', -'iranian-calendar-m3' => 'جۆزەردان', -'iranian-calendar-m4' => 'پووشپەڕ', -'iranian-calendar-m5' => 'گەلاوێژ', -'iranian-calendar-m6' => 'خەرمانان', - -# Core parser functions -'unknown_extension_tag' => 'تاگی درێژکراوەی نەناسراو "$1"', - -# Special:Version -'version' => 'وەشان', -'version-extensions' => 'پێوەکراوە دامەزراوەکان', -'version-specialpages' => 'پەڕە تایبەتەکان', -'version-parserhooks' => 'قولاپە لێککەرەکان', -'version-variables' => 'گۆڕاوەکان', -'version-other' => 'ھی دیکە', -'version-mediahandlers' => 'بایەخ‌دەرانی مێدیا', -'version-hooks' => 'قولاپەکان', -'version-extension-functions' => 'فەنکشێنەکانی درێژەکراو', -'version-parser-extensiontags' => 'تاگەکانی درێژکراوی لێککەرەوە', -'version-parser-function-hooks' => 'قولاپەکانی فەنکشێنی لێککەرەوە', -'version-skin-extension-functions' => 'فەنکشێنەکانی درێژکراوی ڕووبەرگ', -'version-hook-name' => 'ناوی قولاپ', -'version-hook-subscribedby' => 'بەشداربوو لە لایەن', -'version-version' => '(وەشانی $1)', -'version-license' => 'مۆڵەت', -'version-software' => 'نەرمەکاڵای دامەزراو', -'version-software-product' => 'بەرهەم', -'version-software-version' => 'وەشان', - -# Special:FilePath -'filepath' => 'ڕێڕەوی پەڕگە', -'filepath-page' => 'پەڕگە:', -'filepath-submit' => 'بڕۆ', -'filepath-summary' => 'ئەم لاپەڕە تایبەتە ڕێڕەوی تەواو بۆ پەڕگەیەک دەگەڕێنێتەوە. -وێنەکان لە قەبارەی تەواو‌دا نیشان‌ دەدرێن و جۆرە پەڕگەکانی دیکە بە پڕۆگرامی هاوپەیوەندی خۆی ڕاستەوخۆ دەست‌پێ‌دەکات. - -ناوی پەڕگەکە بێ پێشگری "{{ns:file}}" بنووسە.', - -# Special:FileDuplicateSearch -'fileduplicatesearch' => 'گەڕان بۆ پەڕگە دووپات کراوەکان', -'fileduplicatesearch-summary' => 'گەڕان بۆ پەڕگە دووبارەکراوەکان لەسەر بنەمای نرخی hash. - -ناوی پەڕگەکە بێ پێشگری "{{ns:file}}" بنووسە.', -'fileduplicatesearch-legend' => 'گەڕان بۆ دووبارەکردنێک', -'fileduplicatesearch-filename' => 'ناوی پەرگە:', -'fileduplicatesearch-submit' => 'گەڕان', -'fileduplicatesearch-info' => '$1 × $2 پیکسەل
    قەبارەی پەڕگە: $3
    MIME جۆری: $4', -'fileduplicatesearch-result-1' => 'پەڕگەی "$1" دووپاتکراوەیەکی کوتوموتی نییە.', -'fileduplicatesearch-result-n' => 'پەڕگەی «$1» {{PLURAL:$2|١ دووپاتکراوەی کوتوموتی|$2 دووپاتکراوەی کوتوموتی}} ھەیە.', - -# Special:SpecialPages -'specialpages' => 'پەڕە تایبەتەکان', -'specialpages-note' => '---- -* لاپەڕە تایبەتە ئاساییەکان -* لاپەڕە تایبەتە بەربەست‌کراوەکان.', -'specialpages-group-maintenance' => 'ڕاپۆرتەکانی چاکسازی', -'specialpages-group-other' => 'پەڕە تایبەتەکانی دیکە', -'specialpages-group-login' => 'چوونە ژوورەوە/ناونووسین', -'specialpages-group-changes' => 'دوایین گۆڕانکارییەکان و ڕەشنووسەکان', -'specialpages-group-media' => 'گوزارشتەکان و بارکردنەکانی مێدیا', -'specialpages-group-users' => 'بەکارھێنەران و مافەکان', -'specialpages-group-highuse' => 'پەڕە زۆر بەکار ھێنراوەکان', -'specialpages-group-pages' => 'لیستەکانی پەڕەکان', -'specialpages-group-pagetools' => 'ئامرازەکانی پەڕە', -'specialpages-group-wiki' => 'داتا و ئامرازەکانی ویکی', -'specialpages-group-redirects' => 'پەڕە تایبەتەکانی رەوانکردنەوە', -'specialpages-group-spam' => 'ئامرازەکانی سپەم', - -# Special:BlankPage -'blankpage' => 'پەڕەی واڵا', -'intentionallyblankpage' => 'ئەم لاپەڕە بەقەستی بەتاڵ هێڵراوەتەوە', - -# Special:Tags -'tags' => 'گۆڕانکاری گونجاوی تاگەکان', -'tag-filter' => 'پاڵێوی [[Special:Tags|تاگ]]:', -'tag-filter-submit' => 'پاڵاوتن', -'tags-title' => 'تاگەکان', -'tags-intro' => 'ئەم لاپەڕە ئەو تاگانەی لیست دەکات کە لەوانەیە نەرمامێر دەستکاریەکی بۆ نیشان بکات و مەبەستی نیشان بدات.', -'tags-tag' => 'ناوی تاگ', -'tags-display-header' => 'دیمەن لەسەر لیستەکانی گۆڕان', -'tags-description-header' => 'پێناسەی تەواوی مەبەست', -'tags-hitcount-header' => 'گۆڕانکاریە تاگ‌کراوەکان', -'tags-edit' => 'دەستکاری', -'tags-hitcount' => '$1 {{PLURAL:$1|گۆڕان|گۆڕانکاری}}', - -# Database error messages -'dberr-header' => 'ئەم ویکی‌یە کێشەی هەیە', -'dberr-problems' => 'ببورە! ئەم ماڵپەڕە ئێستا خەریک ئەزموونێکی کێشەی تەکنیکیە.', -'dberr-again' => 'چەن خولک ڕاوەستە و نوێی بکەوە.', -'dberr-info' => '(پەیوەندی دەگەڵ ڕاژەکاری بنکەدراو پێک‌نایەت: $1)', -'dberr-usegoogle' => 'دەتوانی هاوکات هەوڵی گەڕان بە گووگڵ بدەیت.', -'dberr-outofdate' => 'لەیادت بێ لەوانەیە پێرستەکەیان سەبارەت نە ناوەڕۆک ئەم ماڵپەڕە ماوە بەسەرچوو بێت.', -'dberr-cachederror' => 'ئەمە ڕوونووسێکی کاش‌کراوی لاپەڕەی داواکراوە و لەوانەیە بەڕۆژ نەبێت.', - -# HTML forms -'htmlform-invalid-input' => 'هێندێ کێشە هەیە لە بڕێک لە ناودراوەکانت', -'htmlform-select-badoption' => 'ئەو نرخەی دیاریت‌کردووە هەڵبژاردەیەکی گونجاو نیە.', -'htmlform-int-invalid' => 'ئەو نرخەی دیاریت‌کردووه ژمارەیەکی تەواو نیە.', -'htmlform-float-invalid' => 'ئەو نرخەی دیاریت‌کردووه ژمارە نیە.', -'htmlform-int-toolow' => 'ئەو نرخەی دیاریت‌کردووه کەمترە لە ئەمپەڕی $1.', -'htmlform-int-toohigh' => 'ئەو نرخەی دیاریت‌کردووه زیاترە لە ئەوپەڕی $1.', -'htmlform-submit' => 'ناردن', -'htmlform-reset' => 'پووچەڵکردنەوەی دەستکارییەکان', -'htmlform-selectorother-other' => 'دیکە', - -); diff --git a/languages/messages/MessagesCkb_latn.php b/languages/messages/MessagesCkb_latn.php deleted file mode 100644 index 25e5dbde..00000000 --- a/languages/messages/MessagesCkb_latn.php +++ /dev/null @@ -1,12 +0,0 @@ - 'Invià', # Watchlist -'watchlist' => 'Articuli seguitati', -'mywatchlist' => 'Articuli seguitati', -'watchlistfor' => "(di l'ultizatore '''$1''')", -'addedwatch' => "Aghjuntu à u listinu di l'articuli seguitati", -'watch' => 'Seguità', +'watchlist' => 'Articuli seguitati', +'mywatchlist' => 'Articuli seguitati', +'addedwatch' => "Aghjuntu à u listinu di l'articuli seguitati", +'watch' => 'Seguità', 'enotif_reset' => 'Marcà tutte e pagine visitate', 'enotif_newpagetext' => 'Ista hè una pagina nova.', @@ -463,7 +462,7 @@ U to indirizzu IP serà registratu indu a cronolugia di ista pagina.", 'tooltip-ca-nstab-user' => 'Vede a pagina di utilizatore', # Attribution -'anonymous' => 'Utilizatore(/i) anonimu(/i) di {{SITENAME}}', +'anonymous' => '{{PLURAL:$1|Utilizatore anonimu|Utilizatori anonimi}} di {{SITENAME}}', 'others' => 'altri', # Math errors diff --git a/languages/messages/MessagesCps.php b/languages/messages/MessagesCps.php index 29693c63..a8bfc3d6 100644 --- a/languages/messages/MessagesCps.php +++ b/languages/messages/MessagesCps.php @@ -28,8 +28,7 @@ $messages = array( 'tog-editsection' => 'Pasugtan ang pagilis sang mga seksyon pamaagi sa mga [ilis] nga link', 'tog-editsectiononrightclick' => 'Pasugtan ang pag-ilis sang mga bahin pama-agi sa tu-o nga pagpindot sa mga titulo sang pahina {kinanglan ang JavaScript}', 'tog-showtoc' => 'Ipakita ang listahan sang mga kaundan (sa mga pahina nga may madamu pa sa 3 ka titulo)', -'tog-rememberpassword' => 'Dumdumon ang akon pagsulod sa mini nga kompyuter', -'tog-editwidth' => 'Palapadun ang kahon sang pang-ilis para masudlan ang bilog nga screen', +'tog-rememberpassword' => 'Dumdumon ang akon pagsulod sa mini nga kompyuter (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Idugang sa akon balantayan ang mga pahina nga gin-ubra ko.', 'tog-watchdefault' => 'Idugang sa akon balantayan ang mga pahina nga akon na-islan', 'tog-watchmoves' => 'Idugang sa akon balantayan ang mga pahina nga akon ginsaylo', @@ -174,31 +173,20 @@ $messages = array( 'faqpage' => "Project:Mga perme napamangkot (''FAQ'')", # Vector skin -'vector-action-addsection' => 'Magdugang sang topiko', -'vector-action-delete' => 'Panason', -'vector-action-move' => 'Isdogon', -'vector-action-protect' => 'Protektahan', -'vector-action-undelete' => 'Indi pag panason', -'vector-action-unprotect' => 'Indi pag protektahan', -'vector-namespace-category' => 'Kategorya', -'vector-namespace-help' => 'Pahina sang pagtabang', -'vector-namespace-image' => 'File', -'vector-namespace-main' => 'Pahina', -'vector-namespace-media' => 'Pahina sang midya', -'vector-namespace-mediawiki' => 'Mensahe', -'vector-namespace-project' => 'Pahina sang proyekto', -'vector-namespace-special' => 'Pinasahi nga pahina', -'vector-namespace-talk' => 'Diskusyon', -'vector-namespace-template' => 'Templeyt', -'vector-namespace-user' => 'Pahina sang manug-usar', -'vector-view-create' => 'Mag-ubra', -'vector-view-edit' => 'Liwaton', -'vector-view-history' => 'Ipakita ang kasaysayan', -'vector-view-view' => 'Basahon', -'vector-view-viewsource' => 'Lantawon ang ginhalinan', -'actions' => 'Mga aksyon', -'namespaces' => 'Espasyo sang pangalan', -'variants' => 'Mga variant', +'vector-action-addsection' => 'Magdugang sang topiko', +'vector-action-delete' => 'Panason', +'vector-action-move' => 'Isdogon', +'vector-action-protect' => 'Protektahan', +'vector-action-undelete' => 'Indi pag panason', +'vector-action-unprotect' => 'Indi pag protektahan', +'vector-view-create' => 'Mag-ubra', +'vector-view-edit' => 'Liwaton', +'vector-view-history' => 'Ipakita ang kasaysayan', +'vector-view-view' => 'Basahon', +'vector-view-viewsource' => 'Lantawon ang ginhalinan', +'actions' => 'Mga aksyon', +'namespaces' => 'Espasyo sang pangalan', +'variants' => 'Mga variant', 'errorpagetitle' => 'Sala/Error', 'returnto' => 'Balik sa $1.', @@ -408,7 +396,7 @@ Indi pagkalimtan nga islan ang imo [[Special:Preferences|mga uyon mo sa {{SITENA 'yourname' => 'Hayo (username):', 'yourpassword' => 'Password:', 'yourpasswordagain' => 'Liwata ka pindot ang password:', -'remembermypassword' => 'Dumduma ang pagsulod ko sa mini nga kompyuter', +'remembermypassword' => 'Dumduma ang pagsulod ko sa mini nga kompyuter (pinakadamu na ang $1 {{PLURAL:$1|adlaw|mga adlaw}})', 'yourdomainname' => 'Imo domain:', 'login' => 'Mag sulod', 'nav-login-createaccount' => 'Magsulod / maghimo account', @@ -684,7 +672,6 @@ Mga Pahina sa [[Special:Watchlist|imo watchlist]] '''madukot'''.", # Watchlist 'watchlist' => 'Mga akon ginabantayan', 'mywatchlist' => 'Akon ginabantayan', -'watchlistfor' => "(para sa '''$1''')", 'addedwatch' => 'Gindugang sa lista sang ginabantayan', 'addedwatchtext' => "Ang pahina nga \"[[:\$1]]\" gindugang na sa imo [[Special:Watchlist|ginabantayan]]. Ang mga pagbag-o sa buwas-damlag kag mga kaangot nga pahina sang istoryahanay pagalistahon diya, kag ang pahina maggwa nga '''madukot''' sa [[Special:RecentChanges|lista sang mga nagligad nga pagbag-o]] para mas mahapos makita.", @@ -898,9 +885,9 @@ Ginapasugtan sa pagdugang sang rason sa kabilugan.', 'nextdiff' => 'Mas bag-o nga gin-islan →', # Media information -'file-info-size' => '($1 × $2 piksel, kadakuon sang file: $3, klase sang MIME: $4)', +'file-info-size' => '$1 × $2 piksel, kadakuon sang file: $3, klase sang MIME: $4', 'file-nohires' => 'Wala na sang mas mataas pa nga resolusyon (katin-aw).', -'svg-long-desc' => '(SVG file, nga ara sa $1 × $2 ka piksels, kadakuon sang file: $3)', +'svg-long-desc' => 'SVG file, nga ara sa $1 × $2 ka piksels, kadakuon sang file: $3', 'show-big-image' => 'Bilog nga resolusyon (katin-aw)', 'show-big-image-thumb' => 'Kadakuon sang mini nga prebyu: $1 × $2 piksels', diff --git a/languages/messages/MessagesCrh_cyrl.php b/languages/messages/MessagesCrh_cyrl.php index 2791e41d..e53903e1 100644 --- a/languages/messages/MessagesCrh_cyrl.php +++ b/languages/messages/MessagesCrh_cyrl.php @@ -17,7 +17,7 @@ $fallback = 'ru'; $fallback8bitEncoding = 'windows-1251'; -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $linkTrail = '/^([a-zâçğıñöşüа-яё“»]+)(.*)$/sDu'; @@ -119,8 +119,7 @@ $messages = array( 'tog-editsection' => 'Болюклерни [денъиштир] багълантыларны иле денъиштирме акъкъы бер', 'tog-editsectiononrightclick' => 'Болюк серлевасына онъ басып болюкте денъишикликке рухсет бер. (JavaScript)', 'tog-showtoc' => 'Мундеридже джедвели косьтер (3 данеден зияде серлевасы олгъан саифелер ичюн)', -'tog-rememberpassword' => 'Парольни хатырла', -'tog-editwidth' => 'Язув пенджересини бутюн экранны толдураджакъ шекильде кенишлет', +'tog-rememberpassword' => 'Киришимни бу браузерде хатырла (энъ чокъ $1 {{PLURAL:$1|кунь|кунь}} ичюн)', 'tog-watchcreations' => 'Мен яраткъан саифелерни козетюв джедвелиме кирсет', 'tog-watchdefault' => 'Мен денъиштирген саифелерни козетюв джедвелиме кирсет', 'tog-watchmoves' => 'Меним тарафымдан ады денъиштирильген саифелерни козетюв джедвелиме кирсет', @@ -266,31 +265,21 @@ $messages = array( 'faqpage' => 'Project:Сыкъ берильген суаллер', # Vector skin -'vector-action-addsection' => 'Мевзу къош', -'vector-action-delete' => 'Ёкъ эт', -'vector-action-move' => 'Адыны денъиштир', -'vector-action-protect' => 'Къорчала', -'vector-action-undelete' => 'Янъыдан ярат', -'vector-action-unprotect' => 'Къорчалавны чыкъар', -'vector-namespace-category' => 'Категория', -'vector-namespace-help' => 'Ярдым саифеси', -'vector-namespace-image' => 'Файл', -'vector-namespace-main' => 'Саифе', -'vector-namespace-media' => 'Медиа саифеси', -'vector-namespace-mediawiki' => 'Беянат', -'vector-namespace-project' => 'Лейха саифеси', -'vector-namespace-special' => 'Махсус саифе', -'vector-namespace-talk' => 'Музакере', -'vector-namespace-template' => 'Шаблон', -'vector-namespace-user' => 'Къулланыджы саифеси', -'vector-view-create' => 'Ярат', -'vector-view-edit' => 'Денъиштир', -'vector-view-history' => 'Кечмишини косьтер', -'vector-view-view' => 'Окъу', -'vector-view-viewsource' => 'Менба кодуны косьтер', -'actions' => 'Арекетлер', -'namespaces' => 'Исим фезалары', -'variants' => 'Вариантлар', +'vector-action-addsection' => 'Мевзу къош', +'vector-action-delete' => 'Ёкъ эт', +'vector-action-move' => 'Адыны денъиштир', +'vector-action-protect' => 'Къорчала', +'vector-action-undelete' => 'Янъыдан ярат', +'vector-action-unprotect' => 'Къорчалавны чыкъар', +'vector-simplesearch-preference' => 'Тафсилятлы къыдырув теклифлерини ишлет (тек Вектор ресимлемеси ичюн)', +'vector-view-create' => 'Ярат', +'vector-view-edit' => 'Денъиштир', +'vector-view-history' => 'Кечмишини косьтер', +'vector-view-view' => 'Окъу', +'vector-view-viewsource' => 'Менба кодуны косьтер', +'actions' => 'Арекетлер', +'namespaces' => 'Исим фезалары', +'variants' => 'Вариантлар', 'errorpagetitle' => 'Хата', 'returnto' => '$1.', @@ -349,6 +338,8 @@ $messages = array( 'view-pool-error' => 'Афу этинъиз, сервер шимди адден-ашыр юкленди. Пек чокъ къулланыджы бу саифени ачмагъа тырыша. Лютфен, бу саифени бир даа ачмакътан эвель бираз бекленъиз. $1', +'pool-timeout' => 'Килит ичюн вакъыт битиши беклене', +'pool-errorunknown' => 'Билинмеген хата', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} акъкъында', @@ -508,7 +499,8 @@ $2', 'yourname' => 'Къулланыджы адынъыз', 'yourpassword' => 'Паролинъиз', 'yourpasswordagain' => 'Парольни бир даа язынъыз:', -'remembermypassword' => 'Бу компьютерде мени хатырла', +'remembermypassword' => 'Киришимни бу компьютерде хатырла (энъ чокъ $1 {{PLURAL:$1|кунь|кунь}} ичюн)', +'securelogin-stick-https' => 'Кирген сонъ HTTPS-ге багъланып тур', 'yourdomainname' => 'Домен адынъыз', 'externaldberror' => 'Отурымынъыз ачылгъанда бир хата олды. Бу тыш эсабынъызгъа денъишиклик япмагъа акъкъынъыз олмаювындан мейдангъа келип ола.', 'login' => 'Кириш', @@ -525,6 +517,7 @@ $2', 'gotaccount' => "Даа эвель эсап ачкъан эдинъизми? '''$1'''.", 'gotaccountlink' => 'Отурым ачынъыз', 'createaccountmail' => 'e-mail вастасынен', +'createaccountreason' => 'Себеп:', 'badretype' => 'Кирсеткен пароллеринъиз айны дегиль.', 'userexists' => 'Кирсеткен къулланыджы адынъыз энди къулланыла. Башкъа бир къулланыджы ады сайланъыз.', @@ -630,9 +623,10 @@ $2 къулланыджысына вакътынджа $3 паро 'showlivepreview' => 'Тез бакъып чыкъув', 'showdiff' => 'Денъишикликлерни косьтер', 'anoneditwarning' => "'''Дикъкъат''': Отурым ачмагъанынъыздан себеп денъишиклик тарихына сизинъ IP адресинъиз язылыр.", +'anonpreviewwarning' => 'Отурым ачмадынъыз. Саифени сакъласанъыз, денъишиклик тарихына сизинъ IP адресинъиз язылыр.', 'missingsummary' => "'''Хатырлатма.''' Денъиштирмелеринъизни къыскъадан тариф этмединъиз. «Саифени сакъла» дёгмесине текрар басув иле денъиштирмелеринъиз тефсирсиз сакъланаджакълар.", 'missingcommenttext' => 'Лютфен, ашагъыда тефсир язынъыз.', -'missingcommentheader' => "'''Хатырлатма:''' Тефсир серлевасыны язмадынъыз. «Саифени сакъла» дёгмесине текрар баскъан сонъ тефсиринъиз серлевасыз сакъланыр.", +'missingcommentheader' => "'''Хатырлатма:''' Тефсир мевзусыны/серлевасыны язмадынъыз. «{{int:savearticle}}» дёгмесине текрар баскъан сонъ тефсиринъиз серлевасыз сакъланыр.", 'summary-preview' => 'Бакъып чыкъув тасвири:', 'subject-preview' => 'Бакъып чыкъув серлевасы:', 'blockedtitle' => 'Къулланыджы блок этильди.', @@ -695,7 +689,7 @@ $2 къулланыджысына вакътынджа $3 паро 'userjsyoucanpreview' => "'''Тевсие:''' Янъы JavaScript-инъизни тешкермек ичюн саифени сакъламаздан эвель «{{int:showpreview}}» дёгмесине басынъыз.", 'usercsspreview' => "'''Унутманъыз, бу тек бакъып чыкъув - къулланыджы CSS файлынъыз аля даа сакъланмады!'''", 'userjspreview' => "'''Унутманъыз, сиз шимди тек тест этесинъиз я да бакъып чыкъув коресинъиз - къулланыджы JavaScript'и шимдилик сакъланмады.'''", -'userinvalidcssjstitle' => "'''Ихтар:''' \"\$1\" адынен бир тема ёкътыр. тема-ады.css ве .js файлларынынъ адлары кичик афир иле язмакъ керек, яни {{ns:user}}:Темель/'''M'''onobook.css дегиль, {{ns:user}}:Темель/'''m'''onobook.css.", +'userinvalidcssjstitle' => "'''Ихтар:''' \"\$1\" адынен бир тема ёкътыр. тема-ады.css ве .js файлларынынъ адлары кичик афир иле язмакъ керек, яни {{ns:user}}:Темель/'''V'''ector.css дегиль, {{ns:user}}:Темель/'''v'''ector.css.", 'updated' => '(Янъарды)', 'note' => "'''Ихтар:'''", 'previewnote' => "'''Бу тек бакъып чыкъув, метин аля даа сакъланмагъан!'''", @@ -728,7 +722,6 @@ $2 къулланыджысына вакътынджа $3 паро 'copyrightwarning2' => "'''Лютфен, дикъкъат:''' {{SITENAME}} сайтына сиз къошкъан бутюн исселер башкъа бир къулланыджы тарафындан денъиштирилип я да ёкъ этилип олур. Къошкъан иссенъизнинъ башкъа инсанлар тарафындан аджымасызджа денъиштирильмесини я да азат тарзда ве сынъырсызджа башкъа ерлерге дагъытылмасыны истемесенъиз, иссе къошманъыз.
    Айрыджа, мында иссе къошып, бу иссенинъ озюнъиз тарафындан язылгъанына, я да джемааткъа ачыкъ бир менбадан я да башкъа бир азат менбадан копиялангъанына гарантия берген оласынъыз ($1 бакъынъыз).
    '''МУЭЛЛИФЛИК АКЪКЪЫНЕН КЪОРЧАЛАНГЪАН ИЧ БИР МЕТИННИ МЫНДА РУХСЕТСИЗ КЪОШМАНЪЫЗ!'''", -'longpagewarning' => "'''ТЕНБИ: Бу саифе $1 килобайт буюклигиндедир; базы браузерлер денъишиклик япкъан вакъытта 32 kb ве устю буюкликлерде проблемалар яшап олур. Саифени парчаларгъа айырмагъа тырышынъыз.'''", 'longpageerror' => "'''ТЕНБИ: Бу саифе $1 килобайт буюклигиндедир. Азамий (максималь) изинли буюклик исе $2 килобайт. Бу саифе сакъланып оламаз.'''", 'readonlywarning' => "'''ТЕНБИ: Бакъым себеби иле малюмат базасы шимди килитлидир. Бу себептен денъишикликлеринъиз шимди сакълап оламасынъыз. Язгъанларынъызны башкъа бир эдитор программасына алып сакълап олур ве даа сонъ текрар мында кетирип сакълап олурсынъыз''' @@ -835,11 +828,13 @@ $3 мына бу себепни бильдирди: ''$2''", # Diffs 'history-title' => '$1 саифесининъ денъишиклик тарихы', 'difference' => '(Версиялар арасы фаркълар)', +'difference-multipage' => '(Саифелер арасындаки фаркъ)', 'lineno' => '$1 сатыр:', 'compareselectedversions' => 'Сайлангъан версияларны тенъештир', 'showhideselectedversions' => 'Сайлангъан версияларны косьтер/гизле', 'editundo' => 'лягъу эт', -'diff-multi' => '({{PLURAL:$1|1 арадаки версия|$1 арадаки версия}} косьтерильмеди.)', +'diff-multi' => '({{PLURAL:$2|Бир къулланыджы|$2 къулланыджы}}нынъ япкъан {{PLURAL:$1|бир ара версиясы|$1 ара версиясы}} косьтерильмей)', +'diff-multi-manyusers' => '($2-ден зияде {{PLURAL:$2|къулланыджы|къулланыджы}}нынъ япкъан {{PLURAL:$1|бир ара версиясы|$1 ара версиясы}} косьтерильмей)', # Search results 'searchresults' => 'Къыдырув нетиджелери', @@ -1005,7 +1000,9 @@ $3 мына бу себепни бильдирди: ''$2''", 'prefs-advancedrendering' => 'Иляве сазламалар', 'prefs-advancedsearchoptions' => 'Иляве сазламалар', 'prefs-advancedwatchlist' => 'Иляве сазламалар', -'prefs-display' => 'Косьтерилюв сазламалары', +'prefs-displayrc' => 'Косьтерилюв сазламалары', +'prefs-displaysearchoptions' => 'Косьтерилюв сазламалары', +'prefs-displaywatchlist' => 'Косьтерилюв сазламалары', 'prefs-diffs' => 'Фаркълар', # User rights @@ -1054,14 +1051,9 @@ $3 мына бу себепни бильдирди: ''$2''", 'recentchanges-legend' => 'Сонъки денъишикликлер сазламалары', 'recentchangestext' => 'Япылгъан энъ сонъки денъишикликлерни бу саифеде корип оласынъыз.', 'recentchanges-feed-description' => 'Бу лента вастасынен викиде сонъки денъишикликлерни козет.', -'recentchanges-label-legend' => 'Изаат: $1.', -'recentchanges-legend-newpage' => '$1 - янъы саифе', 'recentchanges-label-newpage' => 'Бу денъишиклик янъы бир саифе яратты', -'recentchanges-legend-minor' => '$1 - кичик денъишиклик', 'recentchanges-label-minor' => 'Бу кичик бир денъишиклик', -'recentchanges-legend-bot' => '$1 - бот денъишиклиги', 'recentchanges-label-bot' => 'Бу бир ботнынъ япкъан денъишиклиги', -'recentchanges-legend-unpatrolled' => '$1 - тешкерильмеген денъишиклик', 'recentchanges-label-unpatrolled' => 'Бу денъишиклик аля даа тешкерильмеген', 'rcnote' => "$4 $5 тарихында сонъки {{PLURAL:$2|куньде|'''$2''' куньде}} япылгъан '''{{PLURAL:$1|1|$1}}''' денъишиклик:", 'rcnotefrom' => "'''$2''' тарихындан итибарен япылгъан денъишикликлер ашагъыдадыр (энъ чокъ '''$1''' дане саифе косьтериле).", @@ -1168,7 +1160,6 @@ $3 мына бу себепни бильдирди: ''$2''", Эгер бу файлны эп бир юклемеге истесенъиз, кери къайтынъыз ве файл исмини денъиштирип янъыдан юкленъиз. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Бу файл ашагъыдаки {{PLURAL:$1|файлнынъ|файлларнынъ}} дубликаты ола:', -'successfulupload' => 'Юкленюв беджерильди', 'uploadwarning' => 'Тенби', 'savefile' => 'Файлны сакъла', 'uploadedimage' => 'Юкленген: "[[$1]]"', @@ -1187,6 +1178,7 @@ $3 мына бу себепни бильдирди: ''$2''", Эр алда бу файлны юклемеге девам этмеге истейсинъизми? Бу файл ичюн ёкъ этювнинъ журналыны мында бакъып оласынъыз:", 'filename-bad-prefix' => "Сиз юклеген файлнынъ ады '''\"\$1\"'''-нен башлана. Бу, адетиндже, ракъамлы фотоаппаратлардан файл адына язылгъан манасыз ишаретлердир. Лютфен, бу файл ичюн анълыджа бир ад сайлап язынъыз.", +'upload-success-subj' => 'Юкленюв беджерильди', 'upload-proto-error' => 'Янълыш протокол', 'upload-proto-error-text' => 'Интернеттен бир ресим файлы юклемеге истесенъиз адрес http:// я да ftp://нен башламалы.', @@ -1296,7 +1288,7 @@ $3 мына бу себепни бильдирди: ''$2''", 'doubleredirects' => 'Ёлламагъа олгъан ёлламалар', 'doubleredirectstext' => 'Бу саифеде дигер ёллама саифелерине ёлланма олгъан саифелери косьтериле. Эр сатырда биринджи ве экинджи ёлламагъа багълантылар да, экинджи ёлламанынъ макъсат саифеси (адетиндже о биринджи ёлламанынъ керекли макъсады ола) да бар. -Устю сызылгъан меселелер энди чезильген.', +Устю сызылгъан меселелер энди чезильген.', 'double-redirect-fixed-move' => '[[$1]] авуштырылды, шимди [[$2]] саифесине ёллап тура.', 'brokenredirects' => 'Бар олмагъан саифеге япылгъан ёлламалар', @@ -1439,7 +1431,6 @@ $3 мына бу себепни бильдирди: ''$2''", # Watchlist 'watchlist' => 'Козетюв джедвели', 'mywatchlist' => 'Козетюв джедвелим', -'watchlistfor' => "('''$1''' ичюн)", 'nowatchlist' => 'Сизинъ козетюв джедвелинъиз боштыр.', 'watchlistanontext' => 'Козетюв джедвелини бакъмакъ я да денъиштирмек ичюн $1 борджлусынъыз.', 'watchnologin' => 'Отурым ачмакъ керек', @@ -1909,10 +1900,10 @@ MediaWiki интерфейсининъ чешит тиллерге терджи 'imagemaxsize' => "Ресим ольчюси сынъыры:
    ''(файл малюмат саифелери ичюн)''", 'thumbsize' => 'Кичик ольчю:', 'widthheightpage' => '$1 × $2, {{PLURAL:$3|1|$3}} саифе', -'file-info' => '(файл буюклиги: $1, MIME чешити: $2)', -'file-info-size' => '($1 × $2 пиксель, файл буюклиги: $3, MIME чешити: $4)', +'file-info' => 'файл буюклиги: $1, MIME чешити: $2', +'file-info-size' => '$1 × $2 пиксель, файл буюклиги: $3, MIME чешити: $4', 'file-nohires' => 'Даа юксек чезинирликке саип версия ёкъ.', -'svg-long-desc' => '(SVG файлы, номиналь $1 × $2 пиксель, файл буюклиги: $3)', +'svg-long-desc' => 'SVG файлы, номиналь $1 × $2 пиксель, файл буюклиги: $3', 'show-big-image' => 'Там чезинирлик', 'show-big-image-thumb' => 'Бакъып чыкъувда ресим буюклиги: $1 × $2 пиксель', diff --git a/languages/messages/MessagesCrh_latn.php b/languages/messages/MessagesCrh_latn.php index 3d3bc549..d355c8a8 100644 --- a/languages/messages/MessagesCrh_latn.php +++ b/languages/messages/MessagesCrh_latn.php @@ -14,7 +14,7 @@ $fallback8bitEncoding = 'windows-1254'; -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $namespaceNames = array( NS_MEDIA => 'Media', @@ -116,8 +116,7 @@ $messages = array( 'tog-editsection' => 'Bölüklerni [deñiştir] bağlantılarnı ile deñiştirme aqqı ber', 'tog-editsectiononrightclick' => 'Bölük serlevasına oñ basıp bölükte deñişiklikke ruhset ber. (JavaScript)', 'tog-showtoc' => 'Münderice cedveli köster (3 daneden ziyade serlevası olğan saifeler içün)', -'tog-rememberpassword' => 'Parolni hatırla', -'tog-editwidth' => 'Yazuv penceresini bütün ekrannı tolduracaq şekilde kenişlet', +'tog-rememberpassword' => 'Kirişinmi bu brauzerde hatırla (eñ çoq $1 {{PLURAL:$1|kün|kün}} içün)', 'tog-watchcreations' => 'Men yaratqan saifelerni közetüv cedvelime kirset', 'tog-watchdefault' => 'Men deñiştirgen saifelerni közetüv cedvelime kirset', 'tog-watchmoves' => 'Menim tarafımdan adı deñiştirilgen saifelerni közetüv cedvelime kirset', @@ -263,31 +262,21 @@ $messages = array( 'faqpage' => 'Project:Sıq berilgen sualler', # Vector skin -'vector-action-addsection' => 'Mevzu qoş', -'vector-action-delete' => 'Yoq et', -'vector-action-move' => 'Adını deñiştir', -'vector-action-protect' => 'Qorçala', -'vector-action-undelete' => 'Yañıdan yarat', -'vector-action-unprotect' => 'Qorçalavnı çıqar', -'vector-namespace-category' => 'Kategoriya', -'vector-namespace-help' => 'Yardım saifesi', -'vector-namespace-image' => 'Fayl', -'vector-namespace-main' => 'Saife', -'vector-namespace-media' => 'Media saifesi', -'vector-namespace-mediawiki' => 'Beyanat', -'vector-namespace-project' => 'Leyha saifesi', -'vector-namespace-special' => 'Mahsus saife', -'vector-namespace-talk' => 'Muzakere', -'vector-namespace-template' => 'Şablon', -'vector-namespace-user' => 'Qullanıcı saifesi', -'vector-view-create' => 'Yarat', -'vector-view-edit' => 'Deñiştir', -'vector-view-history' => 'Keçmişini köster', -'vector-view-view' => 'Oqu', -'vector-view-viewsource' => 'Menba kodunı köster', -'actions' => 'Areketler', -'namespaces' => 'İsim fezaları', -'variants' => 'Variantlar', +'vector-action-addsection' => 'Mevzu qoş', +'vector-action-delete' => 'Yoq et', +'vector-action-move' => 'Adını deñiştir', +'vector-action-protect' => 'Qorçala', +'vector-action-undelete' => 'Yañıdan yarat', +'vector-action-unprotect' => 'Qorçalavnı çıqar', +'vector-simplesearch-preference' => 'Tafsilâtlı qıdıruv tekliflerini işlet (tek Vektor resimlemesi içün)', +'vector-view-create' => 'Yarat', +'vector-view-edit' => 'Deñiştir', +'vector-view-history' => 'Keçmişini köster', +'vector-view-view' => 'Oqu', +'vector-view-viewsource' => 'Menba kodunı köster', +'actions' => 'Areketler', +'namespaces' => 'İsim fezaları', +'variants' => 'Variantlar', 'errorpagetitle' => 'Hata', 'returnto' => '$1.', @@ -346,6 +335,8 @@ $messages = array( 'view-pool-error' => 'Afu etiñiz, server şimdi adden-aşır yüklendi. Pek çoq qullanıcı bu saifeni açmağa tırışa. Lütfen, bu saifeni bir daa açmaqtan evel biraz bekleñiz. $1', +'pool-timeout' => 'Kilit içün vaqıt bitişi beklene', +'pool-errorunknown' => 'Bilinmegen hata', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} aqqında', @@ -505,7 +496,8 @@ Bu saytnıñ [[Special:Preferences|sazlamalarını]] şahsıñızğa köre deñi 'yourname' => 'Qullanıcı adıñız', 'yourpassword' => 'Paroliñiz', 'yourpasswordagain' => 'Parolni bir daa yazıñız:', -'remembermypassword' => 'Bu kompyuterde meni hatırla', +'remembermypassword' => 'Kirişimni bu kompyuterde hatırla (eñ çoq $1 {{PLURAL:$1|kün|kün}} içün)', +'securelogin-stick-https' => 'Kirgen soñ HTTPS-ge bağlanıp tur', 'yourdomainname' => 'Domen adıñız', 'externaldberror' => 'Oturımıñız açılğanda bir hata oldı. Bu tış esabıñızğa deñişiklik yapmağa aqqıñız olmayuvından meydanğa kelip ola.', 'login' => 'Kiriş', @@ -522,6 +514,7 @@ Bu saytnıñ [[Special:Preferences|sazlamalarını]] şahsıñızğa köre deñi 'gotaccount' => "Daa evel esap açqan ediñizmi? '''$1'''.", 'gotaccountlink' => 'Oturım açıñız', 'createaccountmail' => 'e-mail vastasınen', +'createaccountreason' => 'Sebep:', 'badretype' => 'Kirsetken parolleriñiz aynı degil.', 'userexists' => 'Kirsetken qullanıcı adıñız endi qullanıla. Başqa bir qullanıcı adı saylañız.', @@ -628,9 +621,10 @@ Parоliñizni endi muvafaqiyetnen deñiştirdiñiz ya da yañı bir muvaqqat par 'showlivepreview' => 'Tez baqıp çıquv', 'showdiff' => 'Deñişikliklerni köster', 'anoneditwarning' => "'''Diqqat''': Oturım açmağanıñızdan sebep deñişiklik tarihına siziñ IP adresiñiz yazılır.", +'anonpreviewwarning' => 'Oturım açmadıñız. Saifeni saqlasañız deñişiklik tarihına siziñ IP adresiñiz yazılır.', 'missingsummary' => "'''Hatırlatma.''' Deñiştirmeleriñizni qısqadan tarif etmediñiz. \"Saifeni saqla\" dögmesine tekrar basuv ile deñiştirmeleriñiz tefsirsiz saqlanacaqlar.", 'missingcommenttext' => 'Lütfen, aşağıda tefsir yazıñız.', -'missingcommentheader' => "'''Hatırlatma:''' Tefsir serlevasını yazmadıñız. \"Saifeni saqla\" dögmesine tekrar basqan soñ tefsiriñiz serlevasız saqlanır.", +'missingcommentheader' => "'''Hatırlatma:''' Tefsir mevzusını/serlevasını yazmadıñız. \"{{int:savearticle}}\" dögmesine tekrar basqan soñ tefsiriñiz serlevasız saqlanır.", 'summary-preview' => 'Baqıp çıquv tasviri:', 'subject-preview' => 'Baqıp çıquv serlevası:', 'blockedtitle' => 'Qullanıcı blok etildi.', @@ -693,7 +687,7 @@ Blok etüv jurnalınıñ soñki yazısı aşağıda kösterilgen:', 'userjsyoucanpreview' => "'''Tevsiye:''' Yañı JavaScript-iñizni teşkermek içün saifeni saqlamazdan evel \"{{int:showpreview}}\" dögmesine basıñız.", 'usercsspreview' => "'''Unutmañız, bu tek baqıp çıquv - qullanıcı CSS faylıñız alâ daa saqlanmadı!'''", 'userjspreview' => "'''Unutmañız, siz şimdi tek test etesiñiz ya da baqıp çıquv köresiñiz - qullanıcı JavaScript'i şimdilik saqlanmadı.'''", -'userinvalidcssjstitle' => "'''İhtar:''' \"\$1\" adınen bir tema yoqtır. tema-adı.css ve .js fayllarınıñ adları kiçik afir ile yazmaq kerek, yani {{ns:user}}:Temel/'''M'''onobook.css degil, {{ns:user}}:Temel/'''m'''onobook.css.", +'userinvalidcssjstitle' => "'''İhtar:''' \"\$1\" adınen bir tema yoqtır. tema-adı.css ve .js fayllarınıñ adları kiçik afir ile yazmaq kerek, yani {{ns:user}}:Temel/'''V'''ector.css degil, {{ns:user}}:Temel/'''v'''ector.css.", 'updated' => '(Yañardı)', 'note' => "'''İhtar:'''", 'previewnote' => "'''Bu tek baqıp çıquv, metin alâ daa saqlanmağan!'''", @@ -726,7 +720,6 @@ Ayrıca, mında isse qoşıp, bu isseniñ özüñiz tarafından yazılğanına, 'copyrightwarning2' => "'''Lütfen, diqqat:''' {{SITENAME}} saytına siz qoşqan bütün isseler başqa bir qullanıcı tarafından deñiştirilip ya da yoq etilip olur. Qoşqan isseñizniñ başqa insanlar tarafından acımasızca deñiştirilmesini ya da azat tarzda ve sıñırsızca başqa yerlerge dağıtılmasını istemeseñiz, isse qoşmañız.
    Ayrıca, mında isse qoşıp, bu isseniñ özüñiz tarafından yazılğanına, ya da cemaatqa açıq bir menbadan ya da başqa bir azat menbadan kopiyalanğanına garantiya bergen olasıñız ($1 baqıñız).
    '''MÜELLİFLİK AQQINEN QORÇALANĞAN İÇ BİR METİNNİ MINDA RUHSETSİZ QOŞMAÑIZ!'''", -'longpagewarning' => "'''TENBİ: Bu saife $1 kilobayt büyükligindedir; bazı brauzerler deñişiklik yapqan vaqıtta 32 kb ve üstü büyükliklerde problemalar yaşap olur. Saifeni parçalarğa ayırmağa tırışıñız.'''", 'longpageerror' => "'''TENBİ: Bu saife $1 kilobayt büyükligindedir. Azamiy (maksimal) izinli büyüklik ise $2 kilobayt. Bu saife saqlanıp olamaz.'''", 'readonlywarning' => "'''TENBİ: Baqım sebebi ile malümat bazası şimdi kilitlidir. Bu sebepten deñişiklikleriñiz şimdi saqlap olamasıñız. Yazğanlarıñıznı başqa bir editor programmasına alıp saqlap olur ve daa soñ tekrar mında ketirip saqlap olursıñız''' @@ -833,11 +826,13 @@ Vikide bu saifege oşağan saifelerni [[Special:Search|tapıp baqıñız]].', # Diffs 'history-title' => '"$1" saifesiniñ deñişiklik tarihı', 'difference' => '(Versiyalar arası farqlar)', +'difference-multipage' => '(Saifeler arasındaki farq)', 'lineno' => '$1 satır:', 'compareselectedversions' => 'Saylanğan versiyalarnı teñeştir', 'showhideselectedversions' => 'Saylanğan versiyalarnı köster/gizle', 'editundo' => 'lâğu et', -'diff-multi' => '({{PLURAL:$1|1 aradaki versiya|$1 aradaki versiya}} kösterilmedi.)', +'diff-multi' => '({{PLURAL:$2|Bir qullanıcı|$2 qullanıcı}}nıñ yapqan {{PLURAL:$1|bir ara versiyası|$1 ara versiyası}} kösterilmey)', +'diff-multi-manyusers' => '($2-den ziyade {{PLURAL:$2|qullanıcı|qullanıcı}}nıñ yapqan {{PLURAL:$1|bir ara versiyası|$1 ara versiyası}} kösterilmey)', # Search results 'searchresults' => 'Qıdıruv neticeleri', @@ -1003,7 +998,9 @@ Bundan ğayrı bu vikideki saifeñizden başqa qullanıcılarğa siznen bağlanm 'prefs-advancedrendering' => 'İlâve sazlamalar', 'prefs-advancedsearchoptions' => 'İlâve sazlamalar', 'prefs-advancedwatchlist' => 'İlâve sazlamalar', -'prefs-display' => 'Kösterilüv sazlamaları', +'prefs-displayrc' => 'Kösterilüv sazlamaları', +'prefs-displaysearchoptions' => 'Kösterilüv sazlamaları', +'prefs-displaywatchlist' => 'Kösterilüv sazlamaları', 'prefs-diffs' => 'Farqlar', # User rights @@ -1052,14 +1049,9 @@ Bundan ğayrı bu vikideki saifeñizden başqa qullanıcılarğa siznen bağlanm 'recentchanges-legend' => 'Soñki deñişiklikler sazlamaları', 'recentchangestext' => 'Yapılğan eñ soñki deñişikliklerni bu saifede körip olasıñız.', 'recentchanges-feed-description' => 'Bu lenta vastasınen vikide soñki deñişikliklerni közet.', -'recentchanges-label-legend' => 'İzaat: $1.', -'recentchanges-legend-newpage' => '$1 - yañı saife', 'recentchanges-label-newpage' => 'Bu deñişiklik yañı bir saife yarattı', -'recentchanges-legend-minor' => '$1 - kiçik deñişiklik', 'recentchanges-label-minor' => 'Bu kiçik bir deñişiklik', -'recentchanges-legend-bot' => '$1 - bot deñişikligi', 'recentchanges-label-bot' => 'Bu bir botnıñ yapqan deñişikligi', -'recentchanges-legend-unpatrolled' => '$1 - teşkerilmegen deñişiklik', 'recentchanges-label-unpatrolled' => 'Bu deñişiklik alâ daa teşkerilmegen', 'rcnote' => "$4 $5 tarihında soñki {{PLURAL:$2|künde|'''$2''' künde}} yapılğan '''{{PLURAL:$1|1|$1}}''' deñişiklik:", 'rcnotefrom' => "'''$2''' tarihından itibaren yapılğan deñişiklikler aşağıdadır (eñ çоq '''$1''' dane saife kösterile).", @@ -1165,7 +1157,6 @@ Faylıñıznı yañıdan yüklemege isteseñiz, lütfen, keri qaytıp yañı bir Eger bu faylnı ep bir yüklemege isteseñiz, keri qaytıñız ve fayl ismini deñiştirip yañıdan yükleñiz. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Bu fayl aşağıdaki {{PLURAL:$1|faylnıñ|fayllarnıñ}} dublikatı ola:', -'successfulupload' => 'Yüklenüv becerildi', 'uploadwarning' => 'Tenbi', 'savefile' => 'Faylnı saqla', 'uploadedimage' => 'Yüklengen: "[[$1]]"', @@ -1184,6 +1175,7 @@ Eger bu faylnı ep bir yüklemege isteseñiz, keri qaytıñız ve fayl ismini de Er alda bu faylnı yüklemege devam etmege isteysiñizmi? Bu fayl içün yoq etüvniñ jurnalını mında baqıp olasıñız:", 'filename-bad-prefix' => "Siz yüklegen faylnıñ adı '''\"\$1\"'''-nen başlana. Bu, adetince, raqamlı fotoapparatlardan fayl adına yazılğan manasız işaretlerdir. Lütfen, bu fayl içün añlıca bir ad saylap yazıñız.", +'upload-success-subj' => 'Yüklenüv becerildi', 'upload-proto-error' => 'Yañlış protokol', 'upload-proto-error-text' => 'İnternetten bir resim faylı yüklemege isteseñiz adres http:// ya da ftp://nen başlamalı.', @@ -1293,7 +1285,7 @@ Eger saifede, [[MediaWiki:Disambiguationspage]] saifesinde adı keçken şablon 'doubleredirects' => 'Yollamağa olğan yollamalar', 'doubleredirectstext' => 'Bu saifede diger yollama saifelerine yollanma olğan saifeleri kösterile. Er satırda birinci ve ekinci yollamağa bağlantılar da, ekinci yollamanıñ maqsat saifesi (adetince o birinci yollamanıñ kerekli maqsadı ola) da bar. -Üstü sızılğan meseleler endi çezilgen.', +Üstü sızılğan meseleler endi çezilgen.', 'double-redirect-fixed-move' => '[[$1]] avuştırıldı, şimdi [[$2]] saifesine yollap tura.', 'brokenredirects' => 'Bar olmağan saifege yapılğan yollamalar', @@ -1436,7 +1428,6 @@ Ayrıca [[Special:WantedCategories|talap etilgen kategoriyalarnıñ cedveline]] # Watchlist 'watchlist' => 'Közetüv cedveli', 'mywatchlist' => 'Közetüv cedvelim', -'watchlistfor' => "('''$1''' içün)", 'nowatchlist' => 'Siziñ közetüv cedveliñiz boştır.', 'watchlistanontext' => 'Közetüv cedvelini baqmaq ya da deñiştirmek içün $1 borclusıñız.', 'watchnologin' => 'Oturım açmaq kerek', @@ -1904,10 +1895,10 @@ Faylnı işletip işletim sistemañızğa zarar ketirip olursıñız.", 'imagemaxsize' => "Resim ölçüsi sıñırı:
    ''(fayl malümat saifeleri içün)''", 'thumbsize' => 'Kiçik ölçü:', 'widthheightpage' => '$1 × $2, {{PLURAL:$3|1|$3}} saife', -'file-info' => '(fayl büyükligi: $1, MIME çeşiti: $2)', -'file-info-size' => '($1 × $2 piksel, fayl büyükligi: $3, MIME çeşiti: $4)', +'file-info' => 'fayl büyükligi: $1, MIME çeşiti: $2', +'file-info-size' => '$1 × $2 piksel, fayl büyükligi: $3, MIME çeşiti: $4', 'file-nohires' => 'Daa yüksek çezinirlikke saip versiya yoq.', -'svg-long-desc' => '(SVG faylı, nominal $1 × $2 piksel, fayl büyükligi: $3)', +'svg-long-desc' => 'SVG faylı, nominal $1 × $2 piksel, fayl büyükligi: $3', 'show-big-image' => 'Tam çezinirlik', 'show-big-image-thumb' => 'Baqıp çıquvda resim büyükligi: $1 × $2 piksel', diff --git a/languages/messages/MessagesCs.php b/languages/messages/MessagesCs.php index 8cacc800..0eb62aa1 100644 --- a/languages/messages/MessagesCs.php +++ b/languages/messages/MessagesCs.php @@ -30,18 +30,31 @@ $namespaceNames = array( NS_SPECIAL => 'Speciální', NS_TALK => 'Diskuse', NS_USER => 'Uživatel', - NS_USER_TALK => 'Uživatel_diskuse', - NS_PROJECT_TALK => '$1_diskuse', + NS_USER_TALK => 'Diskuse_s_uživatelem', + NS_PROJECT_TALK => 'Diskuse_k_{{grammar:3sg|$1}}', NS_FILE => 'Soubor', - NS_FILE_TALK => 'Soubor_diskuse', + NS_FILE_TALK => 'Diskuse_k_souboru', NS_MEDIAWIKI => 'MediaWiki', - NS_MEDIAWIKI_TALK => 'MediaWiki_diskuse', + NS_MEDIAWIKI_TALK => 'Diskuse_k_MediaWiki', NS_TEMPLATE => 'Šablona', - NS_TEMPLATE_TALK => 'Šablona_diskuse', + NS_TEMPLATE_TALK => 'Diskuse_k_šabloně', NS_HELP => 'Nápověda', - NS_HELP_TALK => 'Nápověda_diskuse', + NS_HELP_TALK => 'Diskuse_k_nápovědě', NS_CATEGORY => 'Kategorie', - NS_CATEGORY_TALK => 'Kategorie_diskuse', + NS_CATEGORY_TALK => 'Diskuse_ke_kategorii', +); + +$namespaceAliases = array( + 'Uživatelka' => NS_USER, # female complement + 'Diskuse_s_uživatelkou' => NS_USER_TALK, # female complement + 'Uživatel_diskuse' => NS_USER_TALK, # old literal translation backward compatibility + 'Uživatelka_diskuse' => NS_USER_TALK, # female complement to old literal translation style + '$1_diskuse' => NS_PROJECT_TALK, # old literal translation backward compatibility + 'Soubor_diskuse' => NS_FILE_TALK, # old literal translation backward compatibility + 'MediaWiki_diskuse' => NS_MEDIAWIKI_TALK, # old literal translation backward compatibility + 'Šablona_diskuse' => NS_TEMPLATE_TALK, # old literal translation backward compatibility + 'Nápověda_diskuse' => NS_HELP_TALK, # old literal translation backward compatibility + 'Kategorie_diskuse' => NS_CATEGORY_TALK, # old literal translation backward compatibility ); /** @@ -59,7 +72,7 @@ $datePreferences = array( ); /** - * Default date format to be used + * Default date format to be used */ $defaultDateFormat = 'ČSN basic dt'; @@ -107,7 +120,7 @@ $dateFormats = array( * Hledání knihy podle ISBN */ $bookstoreList = array( - 'Národní knihovna' => 'http://sigma.nkp.cz/F/?func=find-a&find_code=ISN&request=$1', + 'Národní knihovna' => 'http://aleph.nkp.cz/F/?func=find-a&find_code=ISN&request=$1', 'Státní technická knihovna' => 'http://www.stk.cz/cgi-bin/dflex/CZE/STK/BROWSE?A=01&V=$1', 'inherit' => true, ); @@ -237,96 +250,96 @@ $magicWords = array( # Písmena, která se mají objevit jako část odkazu ve formě '[[jazyk]]y' atd: $linkTrail = '/^([a-záčďéěíňóřšťúůýž]+)(.*)$/sDu'; -$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' ); +$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'Dvojitá přesměrování', 'Dvojita presmerovani' ), - 'BrokenRedirects' => array( 'Přerušená přesměrování', 'Prerusena presmerovani' ), + 'DoubleRedirects' => array( 'Dvojitá_přesměrování', 'Dvojita_presmerovani' ), + 'BrokenRedirects' => array( 'Přerušená_přesměrování', 'Prerusena_presmerovani' ), 'Disambiguations' => array( 'Rozcestníky', 'Rozcestniky' ), 'Userlogin' => array( 'Přihlásit', 'Prihlasit' ), 'Userlogout' => array( 'Odhlásit', 'Odhlasit' ), - 'CreateAccount' => array( 'Vytvořit účet', 'Vytvorit ucet' ), + 'CreateAccount' => array( 'Vytvořit_účet', 'Vytvorit_ucet' ), 'Preferences' => array( 'Nastavení', 'Nastaveni' ), - 'Watchlist' => array( 'Sledované stránky', 'Sledovane stranky' ), - 'Recentchanges' => array( 'Poslední změny', 'Posledni zmeny' ), - 'Upload' => array( 'Načíst soubor', 'Nacist soubor', 'Načíst obrázek' ), - 'Listfiles' => array( 'Seznam souborů', 'Seznam souboru' ), - 'Newimages' => array( 'Nové obrázky', 'Galerie nových obrázků', 'Nove obrazky' ), - 'Listusers' => array( 'Uživatelé', 'Uzivatele', 'Seznam uživatelů', 'Seznam uzivatelu' ), - 'Listgrouprights' => array( 'Seznam uživatelských práv', 'Seznam uzivatelskych prav' ), - 'Statistics' => array( 'Statistiky' ), - 'Randompage' => array( 'Náhodná stránka', 'Nahodna stranka' ), - 'Lonelypages' => array( 'Sirotčí stránky', 'Sirotci stranky' ), - 'Uncategorizedpages' => array( 'Nekategorizované stránky', 'Nekategorizovane stranky' ), - 'Uncategorizedcategories' => array( 'Nekategorizované kategorie', 'Nekategorizovane kategorie' ), - 'Uncategorizedimages' => array( 'Nekategorizované soubory', 'Nekategorizovane soubory' ), - 'Uncategorizedtemplates' => array( 'Nekategorizované šablony', 'Nekategorizovane sablony' ), - 'Unusedcategories' => array( 'Nepoužívané kategorie', 'Nepouzivane kategorie' ), - 'Unusedimages' => array( 'Nepoužívané soubory', 'Nepouzivane soubory' ), - 'Wantedpages' => array( 'Požadované stránky', 'Pozadovane stranky', 'Chybějící stránky' ), - 'Wantedcategories' => array( 'Požadované kategorie', 'Pozadovane kategorie', 'Chybějící kategorie' ), - 'Wantedfiles' => array( 'Požadované soubory', 'Pozadovane soubory', 'Chybějící soubory' ), - 'Wantedtemplates' => array( 'Požadované šablony', 'Pozadovane sablony', 'Chybějící šablony' ), - 'Mostlinked' => array( 'Nejodkazovanější stránky', 'Nejodkazovanejsi stranky' ), - 'Mostlinkedcategories' => array( 'Nejpoužívanější kategorie', 'Nejpouzivanejsi kategorie' ), - 'Mostlinkedtemplates' => array( 'Nejpoužívanější šablony', 'Nejpouzivanejsi sablony' ), - 'Mostimages' => array( 'Nejpoužívanější soubory', 'Nejpouzivanejsi soubory' ), - 'Mostcategories' => array( 'Stránky s nejvíce kategoriemi', 'Stranky s nejvice kategoriemi', 'Stránky s nejvyšším počtem kategorií' ), - 'Mostrevisions' => array( 'Stránky s nejvíce editacemi', 'Stranky s nejvice editacemi', 'Stránky s nejvyšším počtem editací' ), - 'Fewestrevisions' => array( 'Stránky s nejméně editacemi', 'Stranky s nejmene editacemi', 'Stránky s nejmenším počtem editací' ), - 'Shortpages' => array( 'Nejkratší stránky', 'Nejkratsi stranky' ), - 'Longpages' => array( 'Nejdelší stránky', 'Nejdelsi stranky' ), - 'Newpages' => array( 'Nové stránky', 'Nove stranky', 'Nejnovější stránky', 'Nejnovejsi stranky' ), - 'Ancientpages' => array( 'Staré stránky', 'Stare stranky', 'Nejstarší stránky' ), - 'Deadendpages' => array( 'Slepé stránky', 'Slepe stranky' ), - 'Protectedpages' => array( 'Zamčené stránky', 'Zamcene stranky' ), - 'Protectedtitles' => array( 'Zamčené názvy', 'Zamcene nazvy', 'Stránky které nelze vytvořit' ), - 'Allpages' => array( 'Všechny stránky', 'Vsechny stranky' ), - 'Ipblocklist' => array( 'Blokovaní uživatelé', 'Blokovani uzivatele' ), - 'Specialpages' => array( 'Speciální stránky', 'Specialni stranky' ), + 'Watchlist' => array( 'Sledované_stránky', 'Sledovane_stranky' ), + 'Recentchanges' => array( 'Poslední_změny', 'Posledni_zmeny' ), + 'Upload' => array( 'Načíst_soubor', 'Nacist_soubor', 'Načíst_obrázek' ), + 'Listfiles' => array( 'Seznam_souborů', 'Seznam_souboru' ), + 'Newimages' => array( 'Nové_obrázky', 'Galerie_nových_obrázků', 'Nove_obrazky' ), + 'Listusers' => array( 'Uživatelé', 'Uzivatele', 'Seznam_uživatelů', 'Seznam_uzivatelu' ), + 'Listgrouprights' => array( 'Seznam_uživatelských_práv', 'Seznam_uzivatelskych_prav' ), + 'Statistics' => array( 'Statistika', 'Statistiky' ), + 'Randompage' => array( 'Náhodná_stránka', 'Nahodna_stranka' ), + 'Lonelypages' => array( 'Sirotčí_stránky', 'Sirotci_stranky' ), + 'Uncategorizedpages' => array( 'Nekategorizované_stránky', 'Nekategorizovane_stranky' ), + 'Uncategorizedcategories' => array( 'Nekategorizované_kategorie', 'Nekategorizovane_kategorie' ), + 'Uncategorizedimages' => array( 'Nekategorizované_soubory', 'Nekategorizovane_soubory' ), + 'Uncategorizedtemplates' => array( 'Nekategorizované_šablony', 'Nekategorizovane_sablony' ), + 'Unusedcategories' => array( 'Nepoužívané_kategorie', 'Nepouzivane_kategorie' ), + 'Unusedimages' => array( 'Nepoužívané_soubory', 'Nepouzivane_soubory' ), + 'Wantedpages' => array( 'Chybějící_stránky', 'Požadované_stránky', 'Pozadovane_stranky' ), + 'Wantedcategories' => array( 'Chybějící_kategorie', 'Požadované_kategorie', 'Pozadovane_kategorie' ), + 'Wantedfiles' => array( 'Chybějící_soubory', 'Požadované_soubory', 'Pozadovane_soubory' ), + 'Wantedtemplates' => array( 'Chybějící_šablony', 'Požadované_šablony', 'Pozadovane_sablony' ), + 'Mostlinked' => array( 'Nejodkazovanější_stránky', 'Nejodkazovanejsi_stranky' ), + 'Mostlinkedcategories' => array( 'Nejpoužívanější_kategorie', 'Nejpouzivanejsi_kategorie' ), + 'Mostlinkedtemplates' => array( 'Nejpoužívanější_šablony', 'Nejpouzivanejsi_sablony' ), + 'Mostimages' => array( 'Nejpoužívanější_soubory', 'Nejpouzivanejsi_soubory' ), + 'Mostcategories' => array( 'Stránky_s_nejvíce_kategoriemi', 'Stranky_s_nejvice_kategoriemi', 'Stránky_s_nejvyšším_počtem_kategorií' ), + 'Mostrevisions' => array( 'Stránky_s_nejvíce_editacemi', 'Stranky_s_nejvice_editacemi', 'Stránky_s_nejvyšším_počtem_editací' ), + 'Fewestrevisions' => array( 'Stránky_s_nejméně_editacemi', 'Stranky_s_nejmene_editacemi', 'Stránky_s_nejmenším_počtem_editací' ), + 'Shortpages' => array( 'Nejkratší_stránky', 'Nejkratsi_stranky' ), + 'Longpages' => array( 'Nejdelší_stránky', 'Nejdelsi_stranky' ), + 'Newpages' => array( 'Nové_stránky', 'Nove_stranky', 'Nejnovější_stránky', 'Nejnovejsi_stranky' ), + 'Ancientpages' => array( 'Nejstarší_stránky', 'Staré_stránky', 'Stare_stranky' ), + 'Deadendpages' => array( 'Slepé_stránky', 'Slepe_stranky' ), + 'Protectedpages' => array( 'Zamčené_stránky', 'Zamcene_stranky' ), + 'Protectedtitles' => array( 'Zamčené_názvy', 'Zamcene_nazvy', 'Stránky_které_nelze_vytvořit' ), + 'Allpages' => array( 'Všechny_stránky', 'Vsechny_stranky' ), + 'Ipblocklist' => array( 'Blokovaní_uživatelé', 'Blokovani_uzivatele' ), + 'Specialpages' => array( 'Speciální_stránky', 'Specialni_stranky' ), 'Contributions' => array( 'Příspěvky', 'Prispevky' ), 'Emailuser' => array( 'E-mail' ), - 'Confirmemail' => array( 'Potvrdit e-mail' ), - 'Whatlinkshere' => array( 'Co odkazuje na', 'Odkazuje sem' ), - 'Recentchangeslinked' => array( 'Související změny', 'Souvisejici zmeny' ), - 'Movepage' => array( 'Přesunout stránku' ), - 'Blockme' => array( 'Zablokuj mě', 'Zablokuj me' ), - 'Booksources' => array( 'Zdroje knih' ), + 'Confirmemail' => array( 'Potvrdit_e-mail' ), + 'Whatlinkshere' => array( 'Co_odkazuje_na', 'Odkazuje_sem' ), + 'Recentchangeslinked' => array( 'Související_změny', 'Souvisejici_zmeny' ), + 'Movepage' => array( 'Přesunout_stránku' ), + 'Blockme' => array( 'Zablokuj_mě', 'Zablokuj_me' ), + 'Booksources' => array( 'Zdroje_knih' ), 'Categories' => array( 'Kategorie' ), - 'Export' => array( 'Exportovat stránky' ), + 'Export' => array( 'Exportovat_stránky' ), 'Version' => array( 'Verze' ), - 'Allmessages' => array( 'Všechny zprávy' ), - 'Log' => array( 'Protokolovací záznamy', 'Protokoly', 'Protokol', 'Protokolovaci zaznamy' ), - 'Blockip' => array( 'Blokovat uživatele', 'Blokovat IP', 'Blokovat uzivatele' ), - 'Undelete' => array( 'Smazané stránky', 'Smazane stranky' ), - 'Import' => array( 'Importovat stránky' ), - 'Lockdb' => array( 'Zamknout databázi', 'Zamknout databazi' ), - 'Unlockdb' => array( 'Odemknout databázi', 'Odemknout databazi' ), - 'Userrights' => array( 'Uživatelská práva', 'Správa uživatelů', 'Uzivatelska prava' ), - 'MIMEsearch' => array( 'Hledání podle MIME', 'Hledani podle MIME', 'Hledat podle MIME typu' ), - 'FileDuplicateSearch' => array( 'Hledání duplicitních souborů', 'Hledani duplicitnich souboru' ), - 'Unwatchedpages' => array( 'Unwatchedpages', 'Nesledované stránky' ), - 'Listredirects' => array( 'Seznam přesměrování', 'Seznam presmerovani' ), - 'Revisiondelete' => array( 'Smazat revizi' ), - 'Unusedtemplates' => array( 'Nepoužívané šablony', 'Nepouzivane sablony' ), - 'Randomredirect' => array( 'Náhodné přesměrování', 'Nahodne presmerovani' ), - 'Mypage' => array( 'Moje stránka', 'Moje stranka' ), - 'Mytalk' => array( 'Moje diskuse', 'Moje diskuze' ), - 'Mycontributions' => array( 'Mé příspěvky', 'Me prispevky' ), - 'Listadmins' => array( 'Seznam správců', 'Seznam spravcu' ), - 'Listbots' => array( 'Seznam botů', 'Seznam botu' ), - 'Popularpages' => array( 'Nejnavštěvovanější stránky', 'Nejnavstevovanejsi stranky' ), + 'Allmessages' => array( 'Všechny_zprávy' ), + 'Log' => array( 'Protokolovací_záznamy', 'Protokoly', 'Protokol', 'Protokolovaci_zaznamy' ), + 'Blockip' => array( 'Blokovat_uživatele', 'Blokovat_IP', 'Blokovat_uzivatele' ), + 'Undelete' => array( 'Smazané_stránky', 'Smazane_stranky' ), + 'Import' => array( 'Importovat_stránky' ), + 'Lockdb' => array( 'Zamknout_databázi', 'Zamknout_databazi' ), + 'Unlockdb' => array( 'Odemknout_databázi', 'Odemknout_databazi' ), + 'Userrights' => array( 'Uživatelská_práva', 'Správa_uživatelů', 'Uzivatelska_prava' ), + 'MIMEsearch' => array( 'Hledání_podle_MIME', 'Hledani_podle_MIME', 'Hledat_podle_MIME_typu' ), + 'FileDuplicateSearch' => array( 'Hledání_duplicitních_souborů', 'Hledani_duplicitnich_souboru' ), + 'Unwatchedpages' => array( 'Nesledované_stránky' ), + 'Listredirects' => array( 'Seznam_přesměrování', 'Seznam_presmerovani' ), + 'Revisiondelete' => array( 'Smazat_revizi' ), + 'Unusedtemplates' => array( 'Nepoužívané_šablony', 'Nepouzivane_sablony' ), + 'Randomredirect' => array( 'Náhodné_přesměrování', 'Nahodne_presmerovani' ), + 'Mypage' => array( 'Moje_stránka', 'Moje_stranka' ), + 'Mytalk' => array( 'Moje_diskuse', 'Moje_diskuze' ), + 'Mycontributions' => array( 'Mé_příspěvky', 'Me_prispevky' ), + 'Listadmins' => array( 'Seznam_správců', 'Seznam_spravcu' ), + 'Listbots' => array( 'Seznam_botů', 'Seznam_botu' ), + 'Popularpages' => array( 'Nejnavštěvovanější_stránky', 'Nejnavstevovanejsi_stranky' ), 'Search' => array( 'Hledání', 'Hledani' ), - 'Resetpass' => array( 'Změna hesla', 'Zmena hesla', 'Resetovat heslo' ), - 'Withoutinterwiki' => array( 'Bez interwiki', 'Stránky bez interwiki odkazů' ), - 'MergeHistory' => array( 'Sloučení historie', 'Slouceni historie', 'Sloučit historii' ), - 'Filepath' => array( 'Cesta k souboru' ), - 'Invalidateemail' => array( 'Zneplatnit e-mail', 'Zrušit potvrzení e-mailu' ), - 'Blankpage' => array( 'Prázdná stránka' ), - 'LinkSearch' => array( 'Hledání odkazů', 'Hledani odkazu' ), - 'DeletedContributions' => array( 'Smazané příspěvky', 'Smazane prispevky' ), + 'Resetpass' => array( 'Změna_hesla', 'Zmena_hesla', 'Resetovat_heslo' ), + 'Withoutinterwiki' => array( 'Bez_interwiki', 'Stránky_bez_interwiki_odkazů' ), + 'MergeHistory' => array( 'Sloučení_historie', 'Slouceni_historie', 'Sloučit_historii' ), + 'Filepath' => array( 'Cesta_k_souboru' ), + 'Invalidateemail' => array( 'Zneplatnit_e-mail', 'Zrušit_potvrzení_e-mailu' ), + 'Blankpage' => array( 'Prázdná_stránka' ), + 'LinkSearch' => array( 'Hledání_odkazů', 'Hledani_odkazu' ), + 'DeletedContributions' => array( 'Smazané_příspěvky', 'Smazane_prispevky' ), 'Tags' => array( 'Značky', 'Znacky' ), - 'Activeusers' => array( 'Aktivní uživatelé', 'Aktivni uzivatele' ), + 'Activeusers' => array( 'Aktivní_uživatelé', 'Aktivni_uzivatele' ), ); $messages = array( @@ -345,8 +358,7 @@ $messages = array( 'tog-editsection' => 'Zapnout možnost editace části stránky pomocí odkazu [editovat]', 'tog-editsectiononrightclick' => 'Zapnout možnost editace části stránky pomocí kliknutí pravým tlačítkem na nadpisy stránky (JavaScript)', 'tog-showtoc' => 'Zobrazovat obsah (na stránkách s více než třemi nadpisy)', -'tog-rememberpassword' => 'Pamatovat si mé heslo mezi návštěvami', -'tog-editwidth' => 'Roztáhnout editační okno na celou šířku obrazovky', +'tog-rememberpassword' => 'Zapamatovat si mé přihlášení v tomto prohlížeči (maximálně $1 {{PLURAL:$1|den|dny|dní}})', 'tog-watchcreations' => 'Přidávat mnou založené stránky ke sledovaným', 'tog-watchdefault' => 'Přidávat mnou editované stránky ke sledovaným', 'tog-watchmoves' => 'Přidávat přesouvané stránky mezi sledované', @@ -493,31 +505,21 @@ $messages = array( 'faqpage' => 'Project:Často kladené otázky', # Vector skin -'vector-action-addsection' => 'Přidat téma', -'vector-action-delete' => 'Smazat', -'vector-action-move' => 'Přesunout', -'vector-action-protect' => 'Zamknout', -'vector-action-undelete' => 'Obnovit', -'vector-action-unprotect' => 'Odemknout', -'vector-namespace-category' => 'Kategorie', -'vector-namespace-help' => 'Nápověda', -'vector-namespace-image' => 'Soubor', -'vector-namespace-main' => 'Stránka', -'vector-namespace-media' => 'Stránka souboru', -'vector-namespace-mediawiki' => 'Hlášení', -'vector-namespace-project' => 'Projektová stránka', -'vector-namespace-special' => 'Speciální stránka', -'vector-namespace-talk' => 'Diskuse', -'vector-namespace-template' => 'Šablona', -'vector-namespace-user' => 'Uživatelská stránka', -'vector-view-create' => 'Založit', -'vector-view-edit' => 'Editovat', -'vector-view-history' => 'Zobrazit historii', -'vector-view-view' => 'Číst', -'vector-view-viewsource' => 'Zobrazit zdrojový kód', -'actions' => 'Akce', -'namespaces' => 'Jmenné prostory', -'variants' => 'Varianty', +'vector-action-addsection' => 'Přidat téma', +'vector-action-delete' => 'Smazat', +'vector-action-move' => 'Přesunout', +'vector-action-protect' => 'Zamknout', +'vector-action-undelete' => 'Obnovit', +'vector-action-unprotect' => 'Odemknout', +'vector-simplesearch-preference' => 'Zapnout rozšířené návrhy hledání (pouze vzhled Vektor)', +'vector-view-create' => 'Založit', +'vector-view-edit' => 'Editovat', +'vector-view-history' => 'Zobrazit historii', +'vector-view-view' => 'Číst', +'vector-view-viewsource' => 'Zobrazit zdrojový kód', +'actions' => 'Akce', +'namespaces' => 'Jmenné prostory', +'variants' => 'Varianty', 'errorpagetitle' => 'Chyba', 'returnto' => 'Návrat na stránku „$1“.', @@ -578,6 +580,9 @@ Tuto stránku si právě prohlíží příliš mnoho uživatelů. Před tím, než ji zkusíte načíst znovu, chvíli počkejte. $1', +'pool-timeout' => 'Při čekání na zámek vypršel časový limit', +'pool-queuefull' => 'Fronta ve fondu je plná', +'pool-errorunknown' => 'Neznámá chyba', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'O {{grammar:6sg|{{SITENAME}}}}', @@ -739,7 +744,8 @@ Nezapomeňte si upravit své [[Special:Preferences|nastavení {{grammar:2sg|{{SI 'yourname' => 'Uživatelské jméno:', 'yourpassword' => 'Vaše heslo', 'yourpasswordagain' => 'Zopakujte heslo:', -'remembermypassword' => 'Trvalé přihlášení', +'remembermypassword' => 'Zapamatovat si mé přihlášení na tomto počítači (maximálně $1 {{PLURAL:$1|den|dny|dní}})', +'securelogin-stick-https' => 'Zůstat po přihlášení připojen přes HTTPS', 'yourdomainname' => 'Vaše doména', 'externaldberror' => 'Buď nastala chyba externí autentizační databáze, nebo nemáte dovoleno měnit svůj externí účet.', 'login' => 'Přihlaste se', @@ -756,6 +762,7 @@ Nezapomeňte si upravit své [[Special:Preferences|nastavení {{grammar:2sg|{{SI 'gotaccount' => "Už jste registrováni? '''$1'''.", 'gotaccountlink' => 'Přihlaste se', 'createaccountmail' => 'pomocí e-mailu', +'createaccountreason' => 'Důvod:', 'badretype' => 'Vámi napsaná hesla nesouhlasí.', 'userexists' => 'Uživatel se stejným jménem je už registrován. Zvolte jiné jméno.', 'loginerror' => 'Chyba při přihlašování', @@ -773,6 +780,7 @@ Nezapomeňte si upravit své [[Special:Preferences|nastavení {{grammar:2sg|{{SI 'wrongpasswordempty' => 'Bylo zadáno prázdné heslo. Zkuste to znovu.', 'passwordtooshort' => 'Heslo musí být dlouhé nejméně $1 {{PLURAL:$1|znak|znaky|znaků}}.', 'password-name-match' => 'Vaše heslo nesmí být stejné jako uživatelské jméno.', +'password-login-forbidden' => 'Použití tohoto uživatelského jména a hesla byla zakázáno.', 'mailmypassword' => 'Poslat e-mailem nové heslo', 'passwordremindertitle' => 'Nové dočasné heslo na {{grammar:4sg|{{SITENAME}}}}', 'passwordremindertext' => 'Někdo (patrně vy, z IP adresy $1) požádal, abychom o nové heslo @@ -814,6 +822,9 @@ Počkejte chvíli, než to zkusíte znovu.', 'loginlanguagelabel' => 'Jazyk: $1', 'suspicious-userlogout' => 'Váš požadavek na odhlášení byl odmítnut, neboť to vypadá, že ho poslal rozbitý prohlížeč nebo cachující proxy.', +# E-mail sending +'php-mail-error-unknown' => 'Neznámá chyba v PHP funkci mail()', + # Password reset dialog 'resetpass' => 'Změna hesla', 'resetpass_announce' => 'Přihlašujete se dočasným heslem zaslaným e-mailem. Přihlášení lze dokončit po nastavení nového trvalého hesla.', @@ -865,9 +876,11 @@ Možná jste si již úspěšně heslo změnili, nebo jste si vyžádali nové d 'showlivepreview' => 'Rychlý náhled', 'showdiff' => 'Ukázat změny', 'anoneditwarning' => "'''Varování:''' Nejste přihlášen(a). Vaše IP adresa bude zveřejněna v historii této stránky.", +'anonpreviewwarning' => "''Nejste přihlášen(a). Uložením zveřejníte svou IP adresu v historii této stránky.''", 'missingsummary' => "'''Připomenutí:''' Nezadali jste shrnutí editace. Pokud ještě jednou kliknete na Uložit změny, bude vaše editace zapsána bez shrnutí.", 'missingcommenttext' => 'Zadejte komentář', -'missingcommentheader' => "'''Připomenutí:''' Nezadali jste předmět/nadpis pro tento komentář. Pokud ještě jednou kliknete na Uložit změny, bude vaše editace zapsána i bez toho.", +'missingcommentheader' => "'''Připomenutí:''' Nezadali jste předmět/nadpis pro tento komentář. +Pokud ještě jednou kliknete na „{{int:savearticle}}“, bude vaše editace zapsána i bez toho.", 'summary-preview' => 'Náhled shrnutí:', 'subject-preview' => 'Náhled předmětu/nadpisu:', 'blockedtitle' => 'Uživatel zablokován', @@ -933,7 +946,11 @@ Zde je pro přehled zobrazen nejnovější záznam z knihy zablokování:', 'usercsspreview' => "'''Pamatujte, že si prohlížíte jen náhled vašeho uživatelského CSS.''' '''Zatím nebylo uloženo!'''", 'userjspreview' => "'''Pamatujte, že testujete a prohlížíte pouze náhled vašeho uživatelského JavaScriptu, dosud nebyl uložen!'''", -'userinvalidcssjstitle' => "'''Varování:''' Vzhled „$1“ neexistuje. Nezapomeňte, že uživatelské .css a .js soubory používají malá písmena, např. {{ns:user}}:{{BASEPAGENAME}}/monobook.css, nikoli {{ns:user}}:{{BASEPAGENAME}}/Monobook.css.", +'sitecsspreview' => "'''Pamatujte, že si prohlížíte jen náhled tohoto CSS.''' +'''Zatím nebylo uloženo!'''", +'sitejspreview' => "'''Pamatujte, že testujete a prohlížíte pouze náhled tohoto JavaScriptu.''' +'''Dosud nebyl uložen!'''", +'userinvalidcssjstitle' => "'''Varování:''' Vzhled „$1“ neexistuje. Nezapomeňte, že uživatelské .css a .js soubory používají malá písmena, např. {{ns:user}}:{{BASEPAGENAME}}/vector.css, nikoli {{ns:user}}:{{BASEPAGENAME}}/Vector.css.", 'updated' => '(Změna uložena)', 'note' => "'''Poznámka:''' ", 'previewnote' => "'''Pamatujte, že toto je pouze náhled, změny zatím nebyly uloženy!'''", @@ -969,7 +986,6 @@ Uložením příspěvku se zavazujete, že je vaším dílem nebo je zkopírová '''NEVKLÁDEJTE DÍLA CHRÁNĚNÁ AUTORSKÝM PRÁVEM BEZ DOVOLENÍ!'''", 'copyrightwarning2' => "Uvědomte si, že všechny příspěvky do {{grammar:2sg|{{SITENAME}}}} mohou být ostatními uživateli upraveny, pozměněny či odstraněny. Pokud si nepřejete, aby váš text byl nemilosrdně upravován, pak ho do {{grammar:2sg|{{SITENAME}}}} neukládejte.
    Uložením příspěvku se zavazujete, že je vaším dílem nebo je zkopírován ze zdrojů, které nejsou chráněny autorským právem (tzv. public domain), podrobnosti najdete na $1. '''Nekopírujte díla chráněná autorským právem bez dovolení!'''", -'longpagewarning' => 'VAROVÁNÍ: Tato stránka je $1 KiB dlouhá; některé prohlížeče mohou mít problémy s editováním stran, které se blíží nebo jsou delší než 32 KiB. Prosíme, zvažte rozdělení stránky na více částí.', 'longpageerror' => "'''CHYBA: Pokoušíte se uložit text o velikosti $1 KiB, přičemž dovolené maximum je $2 KiB. Vaše editace nemůže být uložena.'''", 'readonlywarning' => "'''VAROVÁNÍ: Databáze byla uzamčena kvůli údržbě, takže nebudete moci uložit své změny. Můžete si okopírovat text do souboru a uložit ho na později.''' @@ -1144,6 +1160,8 @@ $1", 'logdelete-failure' => "'''Nepodařilo se nastavit viditelnost protokolu:''' $1", 'revdel-restore' => 'Změnit viditelnost', +'revdel-restore-deleted' => 'smazané revize', +'revdel-restore-visible' => 'viditelné revize', 'pagehist' => 'Historie stránky', 'deletedhist' => 'Smazaná historie', 'revdelete-content' => 'obsah', @@ -1211,11 +1229,13 @@ Ujistěte se, že tato změna udrží souvislost a posloupnost verzí v historii # Diffs 'history-title' => 'Historie verzí stránky „$1“', 'difference' => '(Rozdíly mezi verzemi)', +'difference-multipage' => '(Rozdíly mezi stránkami)', 'lineno' => 'Řádka $1:', 'compareselectedversions' => 'Porovnat vybrané verze', 'showhideselectedversions' => 'Zobrazit/skrýt vybrané revize', 'editundo' => 'zrušit editaci', -'diff-multi' => '({{PLURAL:$1|Není zobrazena jedna mezilehlá verze|Nejsou zobrazeny $1 mezilehlé verze|Není zobrazeno $1 mezilehlých verzí}}.)', +'diff-multi' => '({{PLURAL:$1|Není zobrazena 1 mezilehlá verze|Nejsou zobrazeny $1 mezilehlé verze|Není zobrazeno $1 mezilehlých verzí}} od {{PLURAL:$2|1 uživatele|$2 uživatelů}}.)', +'diff-multi-manyusers' => '(Není zobrazeno $1 mezilehlých verzí od více než $2 {{PLURAL:$2|uživatele|uživatelů}}.)', # Search results 'searchresults' => 'Výsledky hledání', @@ -1250,6 +1270,7 @@ Ujistěte se, že tato změna udrží souvislost a posloupnost verzí v historii 'searchprofile-everything-tooltip' => 'Prohledávat veškerý obsah (včetně diskusních stránek)', 'searchprofile-advanced-tooltip' => 'Nastavit jmenné prostory, ve kterých se má hledat', 'search-result-size' => '$1 ({{PLURAL:$2|1 slovo|$2 slova|$2 slov}})', +'search-result-category-size' => '{{PLURAL:$1|1 položka|$1 položky|$1 položek}} ({{PLURAL:$2|1 podkategorie|$2 podkategorie|$2 podkategorií}}, {{PLURAL:$3|1 soubor|$3 soubory|$3 souborů}})', 'search-result-score' => 'Relevantnost: $1 %', 'search-redirect' => '(přesměrování $1)', 'search-section' => '(část $1)', @@ -1325,6 +1346,7 @@ Pokud na začátek dotazu přidáte ''all:'', bude se hledat všude (včetně di 'contextlines' => 'Počet řádků u každého výsledku:', 'contextchars' => 'Kontext na každé řádce:', 'stub-threshold' => 'Limit pro formátování odkazu jako pahýl (v bajtech):', +'stub-threshold-disabled' => 'Vypnuto', 'recentchangesdays' => 'Počet dní zobrazených v posledních změnách:', 'recentchangesdays-max' => '(maximálně $1 {{PLURAL:$1|den|dny|dní}})', 'recentchangescount' => 'Počet implicitně zobrazovaných záznamů:', @@ -1358,6 +1380,7 @@ Můžete použít tuto náhodně vygenerovanou hodnotu: $1', 'prefs-files' => 'Soubory', 'prefs-custom-css' => 'Vlastní CSS', 'prefs-custom-js' => 'Vlastní JS', +'prefs-common-css-js' => 'Sdílené CSS/JS pro všechny styly:', 'prefs-reset-intro' => 'Pomocí této stránky můžete všechna nastavení vrátit na implicitní hodnoty. Tuto operaci nelze vrátit zpět.', 'prefs-emailconfirm-label' => 'Ověření e-mailu:', @@ -1394,9 +1417,15 @@ Také můžete dovolit ostatním uživatelům vás prostřednictvím uživatelsk 'prefs-advancedrendering' => 'Rozšířené možnosti', 'prefs-advancedsearchoptions' => 'Rozšířené možnosti', 'prefs-advancedwatchlist' => 'Rozšířené možnosti', -'prefs-display' => 'Nastavení vzhledu', +'prefs-displayrc' => 'Možnosti zobrazení', +'prefs-displaysearchoptions' => 'Možnosti zobrazení', +'prefs-displaywatchlist' => 'Možnosti zobrazení', 'prefs-diffs' => 'Porovnání verzí', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'E-mailová adresa vypadá platně', +'email-address-validity-invalid' => 'Zadejte platnou e-mailovou adresu', + # User rights 'userrights' => 'Správa uživatelských skupin', 'userrights-lookup-user' => 'Spravovat uživatelské skupiny', @@ -1480,6 +1509,7 @@ Také můžete dovolit ostatním uživatelům vás prostřednictvím uživatelsk 'right-hideuser' => 'Blokování uživatelského jména a jeho skrytí', 'right-ipblock-exempt' => 'Obcházení blokování IP adres, jejich rozsahů a autobloků', 'right-proxyunbannable' => 'Obcházení automatického blokování proxy serverů', +'right-unblockself' => 'Odblokování sebe sama', 'right-protect' => 'Měnění úrovně zámku a editace zamčených stránek', 'right-editprotected' => 'Editace zamčených stránek (bez kaskádového zámku)', 'right-editinterface' => 'Editace zpráv uživatelského rozhraní', @@ -1502,7 +1532,6 @@ Také můžete dovolit ostatním uživatelům vás prostřednictvím uživatelsk 'right-siteadmin' => 'Zamykání a odemykání databáze', 'right-reset-passwords' => 'Nastavování hesel jiným uživatelům', 'right-override-export-depth' => 'Exportovat stránky včetně odkazovaných stránek až do hloubky 5', -'right-versiondetail' => 'Prohlížení podrobných informací o verzích nainstalovaného software.', 'right-sendemail' => 'Odesílání e-mailů ostatním uživatelům', # User rights log @@ -1553,14 +1582,9 @@ Také můžete dovolit ostatním uživatelům vás prostřednictvím uživatelsk 'recentchanges-legend' => 'Možnosti posledních změn', 'recentchangestext' => 'Sledujte poslední změny na {{grammar:6sg|{{SITENAME}}}} na této stránce.', 'recentchanges-feed-description' => 'Na tomto kanále sledujte poslední změny na {{grammar:6sg|{{SITENAME}}}}.', -'recentchanges-label-legend' => 'Legenda: $1', -'recentchanges-legend-newpage' => '$1 – nová stránka', 'recentchanges-label-newpage' => 'Touto editací byla založena nová stránka', -'recentchanges-legend-minor' => '$1 – malá editace', 'recentchanges-label-minor' => 'Toto je malá editace', -'recentchanges-legend-bot' => '$1 – editace bota', 'recentchanges-label-bot' => 'Tuto editaci provedl bot', -'recentchanges-legend-unpatrolled' => '$1 – neprověřená editace', 'recentchanges-label-unpatrolled' => 'Tato změna dosud nebyla prověřena', 'rcnote' => 'Níže {{plural:$1|je poslední|jsou poslední|je posledních}} $1 {{plural:$1|změna|změny|změn}} za {{PLURAL:$2|poslední|poslední|posledních}} $2 {{plural:$2|den|dny|dnů}} před $4, $5.', 'rcnotefrom' => 'Níže {{PLURAL:$1|je|jsou|je}} nejvýše $1 {{PLURAL:$1|změna|změny|změn}} od $2.', @@ -1607,6 +1631,9 @@ $3', 'upload_directory_missing' => 'Adresář pro nahrávání souborů ($1) chybí a webový server ho nedokáže vytvořit.', 'upload_directory_read_only' => 'Do adresáře pro načítané soubory ($1) nemá webserver právo zápisu.', 'uploaderror' => 'Při načítání došlo k chybě', +'upload-recreate-warning' => "'''Upozornění: Soubor pod tímto názvem byl dříve smazán či přejmenován.''' + +Zde je pro přehled zobrazen soupis mazání a přesunů této stránky:", 'uploadtext' => "Níže uvedený formulář slouží k načtení souborů. Již načtené soubory si můžete prohlížet a hledat pomocí [[Special:FileList|seznamu načtených souborů]], každé načtení se také zaznamenává do [[Special:Log/upload|knihy načtení]], smazání jsou v [[Special:Log/delete|knize smazaných stránek]]. Pro vložení obrázku do stránky použijte jeden z následujících způsobů zápisu: @@ -1637,6 +1664,17 @@ Pro vložení obrázku do stránky použijte jeden z následujících způsobů 'filetype-unwanted-type' => "„.$1“''' je nežádoucí formát souborů. {{plural:$3|Upřednostňovaný formát souborů je|Upřednostňované formáty souborů jsou}} $2.", 'filetype-banned-type' => "'''„.$1“''' je nedovolený formát souborů. {{plural:$3|Povolený formát souborů je|Povolené formáty souborů jsou}} $2.", 'filetype-missing' => 'Soubor nemá příponu (např. ".jpg").', +'empty-file' => 'Načtený soubor je prázdný.', +'file-too-large' => 'Načtený soubor je příliš velký.', +'filename-tooshort' => 'Název souboru je příliš krátký.', +'filetype-banned' => 'Tento typ souboru je zakázán.', +'verification-error' => 'Soubor nevyhověl při ověřování.', +'hookaborted' => 'Požadovaná úprava byla zamítnuta některým rozšířením.', +'illegal-filename' => 'Tento název souboru není dovolen.', +'overwrite' => 'Není dovoleno přepsat existující soubor.', +'unknown-error' => 'Došlo k neznámé chybě.', +'tmp-create-error' => 'Nepodařilo se vytvořit dočasný soubor.', +'tmp-write-error' => 'Chyba při zápisu do dočasného souboru.', 'large-file' => 'Doporučuje se, aby délka souboru nepřesahovala $1, tento soubor má $2.', 'largefileserver' => 'Velikost tohoto souboru překračuje limit nastavený na serveru.', 'emptyfile' => 'Soubor, který jste vložili, se zdá být prázdný. Mohl to způsobit překlep v názvu souboru. Prosím zkontrolujte, zda jste opravdu chtěli vložit tento soubor.', @@ -1661,13 +1699,14 @@ Pokud chcete přesto soubor načíst, vraťte se a zvolte jiný název. 'fileexists-shared-forbidden' => 'Soubor s tímto názvem již existuje ve sdíleném úložišti. Pokud přesto chcete váš soubor načíst, vraťte se a zvolte jiný název. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Tento soubor je duplikát {{PLURAL:$1|následujícího souboru|následujících souborů}}:', 'file-deleted-duplicate' => 'Identický soubor k tomuto ([[:$1]]) byl již dříve smazán. Před tím, než soubor znovu nahrajete, byste měli zkontrolovat záznamy o předchozím smazání.', -'successfulupload' => 'Načtení úspěšně provedeno!', 'uploadwarning' => 'Upozornění k načítání', 'uploadwarning-text' => 'Prosíme, upravte popis souboru níže a zkuste to znovu.', 'savefile' => 'Uložit soubor', 'uploadedimage' => 'načítá „[[$1]]“', 'overwroteimage' => 'načtena nová verze "[[$1]]"', 'uploaddisabled' => 'Načítání souborů vypnuto.', +'copyuploaddisabled' => 'Načítání souborů prostřednictvím URL je vypnuto.', +'uploadfromurl-queued' => 'Váš požadavek na načtení souboru byl uložen do fronty.', 'uploaddisabledtext' => 'Načítání souborů je vypnuto.', 'php-uploaddisabledtext' => 'V PHP je vypnuto načítání souborů. Prosím, zkontrolujte nastavení file_uploads.', 'uploadscripted' => 'Tento soubor obsahuje HTML nebo kód skriptu, který by mohl být prohlížečem chybně interpretován.', @@ -1700,6 +1739,14 @@ JD # Jenoptik MGP # Pentax PICT # různé # ', +'upload-success-subj' => 'Načtení úspěšně provedeno!', +'upload-success-msg' => 'Soubor vámi načtený z [$2] je dostupný na [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problém s načítaným souborem', +'upload-failure-msg' => 'U souboru vámi načítaného z [$2] se vyskytl problém: + +$1', +'upload-warning-subj' => 'Upozornění k načítání', +'upload-warning-msg' => 'Při vašem načítání souboru z [$2] nastal problém. Pokud ho chcete vyřešit, můžete se vrátit do [[Special:Upload/stash/$1|načítacího formuláře]].', 'upload-proto-error' => 'Neplatný protokol', 'upload-proto-error-text' => 'Nahrání vzdáleného souboru vyžaduje zadání URLs začínající na http:// nebo ftp://.', @@ -1761,6 +1808,7 @@ Kliknutím na hlavičku sloupce můžete změnit řazení.', 'listfiles_search_for' => 'Hledat soubor podle názvu:', 'imgfile' => 'soubor', 'listfiles' => 'Seznam souborů', +'listfiles_thumb' => 'Náhled', 'listfiles_date' => 'Datum', 'listfiles_name' => 'Název', 'listfiles_user' => 'Uživatel', @@ -1874,8 +1922,8 @@ Vstup: typ obsahu/podtyp, např. image/jpeg.', 'statistics-edits' => 'Počet editací od založení wiki', 'statistics-edits-average' => 'Průměrný počet editací na stránku', 'statistics-views-total' => 'Celkový počet zobrazení', +'statistics-views-total-desc' => 'Zobrazení neexistujících a speciálních stránek se nepočítají', 'statistics-views-peredit' => 'Počet zobrazení na editaci', -'statistics-jobqueue' => 'Délka [http://www.mediawiki.org/wiki/Manual:Job_queue fronty údržby]', 'statistics-users' => 'Registrovaní [[Special:ListUsers|uživatelé]]', 'statistics-users-active' => 'Aktivní uživatelé', 'statistics-users-active-desc' => 'Uživatelé, kteří v {{plural:$1|posledním dni|posledních $1 dnech}} provedli nějakou operaci', @@ -1888,7 +1936,7 @@ Vstup: typ obsahu/podtyp, např. image/jpeg.', 'doubleredirects' => 'Dvojitá přesměrování', 'doubleredirectstext' => 'Na této stránce je seznam přesměrování vedoucích na další přesměrování. Každý řádek obsahuje odkaz na první a druhé přesměrování a k tomu cíl druhého přesměrování, který obvykle ukazuje jméno „skutečné“ cílové stránky, na kterou by mělo první přesměrování odkazovat. -Přeškrtnuté položky již byly vyřešeny.', +Přeškrtnuté položky již byly vyřešeny.', 'double-redirect-fixed-move' => 'Stránka [[$1]] byla přesunuta, nyní přesměrovává na [[$2]]', 'double-redirect-fixer' => 'Opravář přesměrování', @@ -1911,6 +1959,8 @@ Každý řádek obsahuje odkaz na první a druhé přesměrování a k tomu cíl 'nmembers' => '$1 {{PLURAL:$1|stránka|stránky|stránek}}', 'nrevisions' => '$1 {{PLURAL:$1|revize|revize|revizí}}', 'nviews' => '$1 {{PLURAL:$1|návšteva|návštevy|návštev}}', +'nimagelinks' => 'Použit na $1 {{PLURAL:$1|stránce|stránkách}}', +'ntransclusions' => 'použita na $1 {{PLURAL:$1|stránce|stránkách}}', 'specialpage-empty' => 'Tomuto požadavku neodpovídají žádné záznamy.', 'lonelypages' => 'Sirotčí stránky', 'lonelypagestext' => 'Následující stránky nejsou odkazovány z jiných stránek na {{grammar:6sg|{{SITENAME}}}} ani do nich vloženy.', @@ -2068,34 +2118,40 @@ Podporované protokoly: $1', 'listgrouprights-removegroup-self-all' => 'Vyřazení svého účtu z libovolné skupiny', # E-mail user -'mailnologin' => 'Bez odesílací adresy', -'mailnologintext' => 'Pokud chcete posílat e-maily jiným uživatelům, musíte se [[Special:UserLogin|přihlásit]] a mít platnou e-mailovou adresu ve svém [[Special:Preferences|nastavení]].', -'emailuser' => 'Poslat e-mail', -'emailpage' => 'Poslat e-mail', -'emailpagetext' => 'Pomocí níže zobrazeného formuláře můžete tomuto uživateli poslat zprávu e-mailem. +'mailnologin' => 'Bez odesílací adresy', +'mailnologintext' => 'Pokud chcete posílat e-maily jiným uživatelům, musíte se [[Special:UserLogin|přihlásit]] a mít platnou e-mailovou adresu ve svém [[Special:Preferences|nastavení]].', +'emailuser' => 'Poslat e-mail', +'emailpage' => 'Poslat e-mail', +'emailpagetext' => 'Pomocí níže zobrazeného formuláře můžete tomuto uživateli poslat zprávu e-mailem. E-mailová adresa, kterou máte uvedenu v [[Special:Preferences|nastavení]], se objeví jako adresa odesílatele pošty, aby vám adresát mohl odpovědět přímo.', -'usermailererror' => 'Chyba poštovního programu:', -'defemailsubject' => 'E-mail z {{grammar:2sg|{{SITENAME}}}}', -'noemailtitle' => 'Bez e-mailové adresy', -'noemailtext' => 'Tento uživatel nezadal platnou e-mailovou adresu.', -'nowikiemailtitle' => 'E-mail není povolen', -'nowikiemailtext' => 'Tento uživatel si nepřeje dostávat e-maily od ostatních uživatelů.', -'email-legend' => 'Odeslání e-mailu jinému uživateli {{GRAMMAR:2sg|{{SITENAME}}}}', -'emailfrom' => 'Od:', -'emailto' => 'Komu:', -'emailsubject' => 'Předmět:', -'emailmessage' => 'Zpráva:', -'emailsend' => 'Odeslat', -'emailccme' => 'Poslat kopii zprávy na můj e-mail', -'emailccsubject' => 'Kopie Vaší zprávy pro uživatele $1: $2', -'emailsent' => 'Zpráva odeslána', -'emailsenttext' => 'Váš e-mail byl odeslán.', -'emailuserfooter' => 'Tento e-mail byl odeslán z {{grammar:2sg|{{SITENAME}}}} pomocí funkce „Poslat e-mail“; odeslal ho uživatel $1 uživateli $2', +'usermailererror' => 'Chyba poštovního programu:', +'defemailsubject' => 'E-mail z {{grammar:2sg|{{SITENAME}}}}', +'usermaildisabled' => 'Posílání e-mailů je vypnuto', +'usermaildisabledtext' => 'Nemáte oprávnění odesílat e-maily ostatním uživatelům této wiki', +'noemailtitle' => 'Bez e-mailové adresy', +'noemailtext' => 'Tento uživatel nezadal platnou e-mailovou adresu.', +'nowikiemailtitle' => 'E-mail není povolen', +'nowikiemailtext' => 'Tento uživatel si nepřeje dostávat e-maily od ostatních uživatelů.', +'email-legend' => 'Odeslání e-mailu jinému uživateli {{GRAMMAR:2sg|{{SITENAME}}}}', +'emailfrom' => 'Od:', +'emailto' => 'Komu:', +'emailsubject' => 'Předmět:', +'emailmessage' => 'Zpráva:', +'emailsend' => 'Odeslat', +'emailccme' => 'Poslat kopii zprávy na můj e-mail', +'emailccsubject' => 'Kopie Vaší zprávy pro uživatele $1: $2', +'emailsent' => 'Zpráva odeslána', +'emailsenttext' => 'Váš e-mail byl odeslán.', +'emailuserfooter' => 'Tento e-mail byl odeslán z {{grammar:2sg|{{SITENAME}}}} pomocí funkce „Poslat e-mail“; odeslal ho uživatel $1 uživateli $2', + +# User Messenger +'usermessage-summary' => 'Doručena zpráva od systému.', +'usermessage-editor' => 'Systémový poslíček', # Watchlist 'watchlist' => 'Sledované stránky', 'mywatchlist' => 'Sledované stránky', -'watchlistfor' => "(uživatele '''$1''')", +'watchlistfor2' => '{{GENDER:$1|Uživatele|Uživatelky|Uživatele}} $1 $2', 'nowatchlist' => 'Na svém seznamu sledovaných stránek nemáte žádné položky.', 'watchlistanontext' => 'Pro prohlížení či úpravu seznamu sledovaných stránek se musíte $1.', 'watchnologin' => 'Nejste přihlášen(a)', @@ -2148,11 +2204,15 @@ Uživatele, který změnu provedl, můžete kontaktovat: e-mailem: $PAGEEDITOR_EMAIL na wiki: $PAGEEDITOR_WIKI -Dokud stránku nenavštívíte, nebudou vám zasílána další oznámení o změnách této stránky, případně si můžete vynulovat příznaky ve svém seznamu sledovaných stránek. +Dokud stránku nenavštívíte, nebudou vám zasílána další oznámení o změnách této stránky. +Případně si můžete vynulovat příznaky ve svém seznamu sledovaných stránek. S pozdravem váš zasílač hlášení {{grammar:2sg|{{SITENAME}}}} -- +Změnit nastavení e-mailových oznámení můžete na +{{fullurl:{{#special:Preferences}}}} + Nastavení sledovaných stránek může změnit na {{fullurl:Special:Watchlist/edit}} @@ -2206,7 +2266,10 @@ Poslední editaci této stránky provedl(a) [[User:$3|$3]] ([[User talk:$3|disku 'revertpage' => 'Editace uživatele „[[Special:Contributions/$2|$2]]“ ([[User talk:$2|diskuse]]) vráceny do předchozího stavu, jehož autorem je „[[User:$1|$1]]“', 'revertpage-nouser' => 'Editace uživatele (uživatelské jméno skryto) vráceny do předchozího stavu, jehož autorem je „[[User:$1|$1]]“', 'rollback-success' => 'Editace uživatele $1 byla vrácena na poslední verzi od uživatele $2.', -'sessionfailure' => 'Zřejmě je nějaký problém s vaším přihlášením; + +# Edit tokens +'sessionfailure-title' => 'Chyba sezení', +'sessionfailure' => 'Zřejmě je nějaký problém s vaším přihlášením; vámi požadovaná činnost byla stornována jako prevence před neoprávněným přístupem. Stiskněte tlačítko „zpět“, obnovte stránku, ze které jste přišli a zkuste činnost znovu.', @@ -2331,18 +2394,22 @@ $1', 'month' => 'Do měsíce:', 'year' => 'Do roku:', -'sp-contributions-newbies' => 'Zobrazit příspěvky nově založených účtů', -'sp-contributions-newbies-sub' => 'Noví uživatelé', -'sp-contributions-newbies-title' => 'Příspěvky nových uživatelů', -'sp-contributions-blocklog' => 'kniha zablokování', -'sp-contributions-deleted' => 'smazané editace uživatele', -'sp-contributions-logs' => 'protokolovací záznamy', -'sp-contributions-talk' => 'diskuse', -'sp-contributions-userrights' => 'správa uživatelských práv', -'sp-contributions-blocked-notice' => 'Tento uživatel je momentálně zablokován. Zde je pro přehled zobrazen nejnovější záznam z knihy zablokování:', -'sp-contributions-search' => 'Zobrazení příspěvků', -'sp-contributions-username' => 'IP adresa nebo uživatelské jméno:', -'sp-contributions-submit' => 'Zobrazit', +'sp-contributions-newbies' => 'Zobrazit příspěvky nově založených účtů', +'sp-contributions-newbies-sub' => 'Noví uživatelé', +'sp-contributions-newbies-title' => 'Příspěvky nových uživatelů', +'sp-contributions-blocklog' => 'kniha zablokování', +'sp-contributions-deleted' => 'smazané editace uživatele', +'sp-contributions-uploads' => 'načtené soubory', +'sp-contributions-logs' => 'protokolovací záznamy', +'sp-contributions-talk' => 'diskuse', +'sp-contributions-userrights' => 'správa uživatelských práv', +'sp-contributions-blocked-notice' => 'Tento uživatel je momentálně zablokován. Zde je pro přehled zobrazen nejnovější záznam z knihy zablokování:', +'sp-contributions-blocked-notice-anon' => 'Tato IP adresa je momentálně zablokována. +Zde je pro přehled zobrazen nejnovější záznam z knihy zablokování:', +'sp-contributions-search' => 'Zobrazení příspěvků', +'sp-contributions-username' => 'IP adresa nebo uživatelské jméno:', +'sp-contributions-toponly' => 'Zobrazit pouze aktuální revize', +'sp-contributions-submit' => 'Zobrazit', # What links here 'whatlinkshere' => 'Odkazuje sem', @@ -2403,7 +2470,6 @@ Můžete si prohlédnout [[Special:IPBlockList|seznam zablokovaných uživatelů 'ipb-edit-dropdown' => 'Editace seznamu důvodů zablokování', 'ipb-unblock-addr' => 'Odblokovat uživatele nebo IP $1', 'ipb-unblock' => 'Odblokovat uživatele nebo IP adresu', -'ipb-blocklist-addr' => 'Probíhající bloky uživatele $1', 'ipb-blocklist' => 'Zobrazit probíhající bloky', 'ipb-blocklist-contribs' => 'Příspěvky uživatele $1', 'unblockip' => 'Odblokovat uživatele', @@ -2471,6 +2537,8 @@ $1 je již zablokován(a). Chcete změnit nastavení bloku?', 'sorbs_create_account_reason' => 'Vaše IP adresa je uvedena na seznamu DNSBL jako otevřený proxy server. Z této adresy si nemůžete založit účet', 'cant-block-while-blocked' => 'Nemůžete blokovat jiné uživatele, když jste zablokován(a).', 'cant-see-hidden-user' => 'Uživatel, kterého se snažíte blokovat, už byl zablokován a skryt. Jelikož nemáte oprávnění hideuser, nemůžete si nastavení bloku tohoto uživatele prohlédnout ani ho změnit.', +'ipbblocked' => 'Nemůžete blokovat nebo odblokovávat jiné uživatele, {{GENDER:|sám|sama|sám}} jste {{GENDER:|zablokován|zablokována|zablokován}}', +'ipbnounblockself' => 'Nemáte dovoleno odblokovat {{GENDER:|sám|sama|sám}} sebe', # Developer tools 'lockdb' => 'Zamknout databázi', @@ -2502,6 +2570,16 @@ Je na vaší zodpovědnosti zajistit, aby odkazy stále vedly tam, kam mají. Stránku '''není možno''' přejmenovat, pokud pod cílovým názvem již nějaká stránka existuje, s výjimkou situace, kdy je cílová stránka prázdná nebo je přesměrováním na tuto stránku a nemá žádnou historii editací. To znamená, že stránku můžete přesunout zpět na původní název, pokud uděláte chybu, a že nemůžete přepsat existující stránku. +'''Upozornění!''' +Přejmenování oblíbené stránky může být drastická a nečekaná změna; ujistěte se, prosím, že chápete důsledky svého kroku před tím, než změnu provedete.", +'movepagetext-noredirectfixer' => "Použitím tohoto formuláře změníte název stránky a přesunete i celou její historii na nový název. +Původní název se stane přesměrováním na nový název. +Nezapomeňte poté zkontrolovat [[Special:DoubleRedirects|dvojitá]] nebo [[Special:BrokenRedirects|přerušená]] přesměrování. +Je na vaší zodpovědnosti zajistit, aby odkazy stále vedly tam, kam mají. + +Stránku '''není možno''' přejmenovat, pokud pod cílovým názvem již nějaká stránka existuje, s výjimkou situace, kdy je cílová stránka prázdná nebo je přesměrováním na tuto stránku a nemá žádnou historii editací. +To znamená, že stránku můžete přesunout zpět na původní název, pokud uděláte chybu, a že nemůžete přepsat existující stránku. + '''Upozornění!''' Přejmenování oblíbené stránky může být drastická a nečekaná změna; ujistěte se, prosím, že chápete důsledky svého kroku před tím, než změnu provedete.", 'movepagetalktext' => "Přidružená diskusní stránka, pokud existuje, bude automaticky přesunuta společně se stránkou, '''pokud:''' @@ -2558,6 +2636,7 @@ Cílová stránka „[[:$1]]“ již existuje. Přejete si ji smazat pro uvolně 'immobile-source-page' => 'Tuto stránku nelze přesouvat.', 'immobile-target-page' => 'Stránku nelze přesunout na zadaný název.', 'imagenocrossnamespace' => 'Nelze přesunout mimo jmenný prostor Soubor:', +'nonfile-cannot-move-to-file' => 'Do jmenného prostoru {{ns:file}} nelze přesouvat stránky nepřináležející k souboru', 'imagetypemismatch' => 'Nová přípona souboru neodpovídá jeho typu', 'imageinvalidfilename' => 'Název cílového souboru není platný', 'fix-double-redirects' => 'Opravit všechna přesměrování směřující na původní název', @@ -2635,6 +2714,7 @@ Uložte jej na svůj disk a nahrajte ho sem.', 'importstart' => 'Stránky se importují…', 'import-revision-count' => '$1 {{PLURAL:$1|revize|revize|revizí}}', 'importnopages' => 'Není co importovat.', +'imported-log-entries' => '{{PLURAL:$1|Naimportován 1 protokolovací záznam|Naimportovány $1 protokolovací záznamy|Naimportováno $1 protokolovacích záznamů}}.', 'importfailed' => 'Import selhal: $1', 'importunknownsource' => 'Neznámý typ zdroje importu', 'importcantopen' => 'Nepodařilo se otevřít importní soubor', @@ -2727,6 +2807,8 @@ Uložte jej na svůj disk a nahrajte ho sem.', 'tooltip-upload' => 'Odesílání souboru', 'tooltip-rollback' => '„Vrácení zpět“ jedním kliknutím zruší všechny editace provedené posledním uživatelem.', 'tooltip-undo' => '„Zrušit editaci“ otevře okno editace, které neobsahuje změny provedené v rušené editaci. Je možné doplnit zdůvodnění do shrnutí editace.', +'tooltip-preferences-save' => 'Uložit nastavení', +'tooltip-summary' => 'Zadejte stručné shrnutí', # Stylesheets 'common.css' => '/* Zde uvedené CSS bude ovlivňovat všechny styly */', @@ -2857,14 +2939,17 @@ Otevřením souboru můžete ohrozit svůj počítač.", ''(na stránce s popisem souboru)''", 'thumbsize' => 'Velikost náhledu:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|stránka|stránky|stránek}}', -'file-info' => '(velikost souboru: $1, MIME typ: $2)', -'file-info-size' => '(rozměr: $1 × $2 pixelů, velikost souboru: $3, MIME typ: $4)', +'file-info' => 'velikost souboru: $1, MIME typ: $2', +'file-info-size' => '$1 × $2 pixelů, velikost souboru: $3, MIME typ: $4', 'file-nohires' => 'Větší rozlišení není k dispozici.', -'svg-long-desc' => '(soubor SVG, nominální rozměr: $1 × $2 pixelů, velikost souboru: $3)', +'svg-long-desc' => 'soubor SVG, nominální rozměr: $1 × $2 pixelů, velikost souboru: $3', 'show-big-image' => 'Obrázek ve vyšším rozlišení', 'show-big-image-thumb' => 'Velikost tohoto náhledu je: $1 × $2 pixelů', 'file-info-gif-looped' => 've smyčce', 'file-info-gif-frames' => '$1 {{PLURAL:$1|snímek|snímky|snímků}}', +'file-info-png-looped' => 've smyčce', +'file-info-png-repeat' => 'opakováno $1{{PLURAL:$1|krát|krát}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|snímek|snímky|snímků}}', # Special:NewFiles 'newimages' => 'Galerie nových souborů', @@ -3016,6 +3101,7 @@ Obsahuje pouze seznam s odrážkami (řádka začíná s *). První odkaz na ř 'exif-gpsareainformation' => 'Označení GPS oblasti', 'exif-gpsdatestamp' => 'Datum podle GPS', 'exif-gpsdifferential' => 'Diferenciální korekce GPS', +'exif-objectname' => 'Krátký název', # EXIF attributes 'exif-compression-1' => 'Nekomprimovaný', @@ -3175,25 +3261,25 @@ Obsahuje pouze seznam s odrážkami (řádka začíná s *). První odkaz na ř 'limitall' => 'vše', # E-mail address confirmation -'confirmemail' => 'Potvrzení e-mailové adresy', -'confirmemail_noemail' => 'Ve svém [[Special:Preferences|uživatelském nastavení]] jste nezadali platnou e-mailovou adresu.', -'confirmemail_text' => 'Tato wiki vyžaduje, abyste před využíváním některých funkcí potvrdili svoji e-mailovou adresu. Kliknutím na tlačítko níže odešlete potvrzovací e-mail na vámi uvedenou adresu. Tento e-mail obsahuje odkaz a potvrzovací kód; zobrazením odkazované stránky ve svém internetovém prohlížeči potvrdíte, že zadaná adresa je platná.', -'confirmemail_pending' => 'Potvrzovací kód vám byl již zaslán na váš e-mail. +'confirmemail' => 'Potvrzení e-mailové adresy', +'confirmemail_noemail' => 'Ve svém [[Special:Preferences|uživatelském nastavení]] jste nezadali platnou e-mailovou adresu.', +'confirmemail_text' => 'Tato wiki vyžaduje, abyste před využíváním některých funkcí potvrdili svoji e-mailovou adresu. Kliknutím na tlačítko níže odešlete potvrzovací e-mail na vámi uvedenou adresu. Tento e-mail obsahuje odkaz a potvrzovací kód; zobrazením odkazované stránky ve svém internetovém prohlížeči potvrdíte, že zadaná adresa je platná.', +'confirmemail_pending' => 'Potvrzovací kód vám byl již zaslán na váš e-mail. Pokud jste si účet založili před chvílí, zkuste na doručení kódu několik minut počkat, než požádáte o nový.', -'confirmemail_send' => 'Odeslat potvrzovací kód', -'confirmemail_sent' => 'Potvrzovací e-mail byl odeslán', -'confirmemail_oncreate' => 'Na vaši e-mailovou adresu byl zaslán potvrzovací kód. +'confirmemail_send' => 'Odeslat potvrzovací kód', +'confirmemail_sent' => 'Potvrzovací e-mail byl odeslán', +'confirmemail_oncreate' => 'Na vaši e-mailovou adresu byl zaslán potvrzovací kód. Tento kód není zapotřebí k přihlášení, ale budete ho potřebovat k aktivaci některých funkcí založených na využití e-mailu.', -'confirmemail_sendfailed' => '{{GRAMMAR:3sg|{{SITENAME}}}} se nepodařilo odeslat potvrzovací e-mail. Zkontrolujte, zda e-mailová adresa neobsahuje chybné znaky. +'confirmemail_sendfailed' => '{{GRAMMAR:3sg|{{SITENAME}}}} se nepodařilo odeslat potvrzovací e-mail. Zkontrolujte, zda e-mailová adresa neobsahuje chybné znaky. Poštovní program hlásí: $1', -'confirmemail_invalid' => 'Neplatný potvrzovací kód. Možná již vypršela platnost kódu.', -'confirmemail_needlogin' => 'Pro potvrzení své e-mailové adresy se musíte $1.', -'confirmemail_success' => 'Vaše e-mailová adresa byla potvrzena. Nyní se můžete přihlásit a používat wiki.', -'confirmemail_loggedin' => 'Vaše e-mailová adresa byla potvrzena.', -'confirmemail_error' => 'Nepodařilo se uložit vaše potvrzení.', -'confirmemail_subject' => 'Potvrzení e-mailové adresy pro {{grammar:4sg|{{SITENAME}}}}', -'confirmemail_body' => 'Někdo (patrně vy, z IP adresy $1) si registroval účet se jménem "$2" a touto e-mailovou adresou na {{grammar:6sg|{{SITENAME}}}}. +'confirmemail_invalid' => 'Neplatný potvrzovací kód. Možná již vypršela platnost kódu.', +'confirmemail_needlogin' => 'Pro potvrzení své e-mailové adresy se musíte $1.', +'confirmemail_success' => 'Vaše e-mailová adresa byla potvrzena. Nyní se můžete přihlásit a používat wiki.', +'confirmemail_loggedin' => 'Vaše e-mailová adresa byla potvrzena.', +'confirmemail_error' => 'Nepodařilo se uložit vaše potvrzení.', +'confirmemail_subject' => 'Potvrzení e-mailové adresy pro {{grammar:4sg|{{SITENAME}}}}', +'confirmemail_body' => 'Někdo (patrně vy, z IP adresy $1) si registroval účet se jménem "$2" a touto e-mailovou adresou na {{grammar:6sg|{{SITENAME}}}}. Pokud si přejete aktivovat e-mailové funkce na {{grammar:6sg|{{SITENAME}}}}, tak pro potvrzení, že tato adresa opravdu patří vám, přejděte svým internetovým prohlížečem na následující adresu: @@ -3204,8 +3290,38 @@ Pokud jste o toto potvrzení *nežádali*, klikněte na následující odkaz, č $5 Platnost tohoto potvrzovacího kódu vyprší $4.', -'confirmemail_invalidated' => 'Potvrzení e-mailové adresy bylo zrušeno', -'invalidateemail' => 'Zrušit potvrzení e-mailové adresy', +'confirmemail_body_changed' => 'Někdo (patrně vy, z IP adresy $1) +změnil e-mailovou adresu k účtu "$2" na {{grammar:6sg|{{SITENAME}}}} na tuto adresu. + +Pokud si přejete aktivovat e-mailové funkce na {{grammar:6sg|{{SITENAME}}}}, +tak pro potvrzení, že tato adresa opravdu patří vám, přejděte svým +internetovým prohlížečem na následující adresu: + +$3 + +Pokud jste o toto potvrzení *nežádali*, klikněte na následující odkaz, +čímž potvrzení zrušíte: + +$5 + +Platnost tohoto potvrzovacího kódu vyprší $4.', +'confirmemail_body_set' => 'Někdo (patrně vy, z IP adresy $1) nastavil e-mailovou adresu +účtu „$2“ na {{grammar:6sg|{{SITENAME}}}} na tuto adresu. + +Pokud si přejete znovu aktivovat e-mailové funkce na +{{grammar:6sg|{{SITENAME}}}}, tak pro potvrzení, že tato adresa opravdu +patří vám, přejděte svým internetovým prohlížečem na následující adresu: + +$3 + +Pokud vám tento účet *nepatří*, klikněte na následující +odkaz, čímž potvrzení zrušíte: + +$5 + +Platnost tohoto potvrzovacího kódu vyprší $4.', +'confirmemail_invalidated' => 'Potvrzení e-mailové adresy bylo zrušeno', +'invalidateemail' => 'Zrušit potvrzení e-mailové adresy', # Scary transclusion 'scarytranscludedisabled' => '[Vkládání šablon mezi wiki je vypnuto]', @@ -3248,6 +3364,7 @@ Opravdu si přejete znovu tuto stránku založit?', 'table_pager_first' => 'První stránka', 'table_pager_last' => 'Poslední stránka', 'table_pager_limit' => 'Zobrazit $1 položek na stránku', +'table_pager_limit_label' => 'Položek na stránce:', 'table_pager_limit_submit' => 'Zobrazit', 'table_pager_empty' => 'Nic nebylo nalezeno', @@ -3361,6 +3478,7 @@ Seznam editovaných stránek můžete také [[Special:Watchlist/edit|editovat ve 'version-specialpages' => 'Speciální stránky', 'version-parserhooks' => 'Přípojné body parseru', 'version-variables' => 'Proměnné', +'version-skins' => 'Vzhledy', 'version-other' => 'Jiné', 'version-mediahandlers' => 'Obsluha médií', 'version-hooks' => 'Přípojné body', @@ -3372,6 +3490,13 @@ Seznam editovaných stránek můžete také [[Special:Watchlist/edit|editovat ve 'version-hook-subscribedby' => 'Volán z', 'version-version' => '(Verze $1)', 'version-license' => 'Licence', +'version-poweredby-credits' => "Tato wiki běží na '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001–$1 $2.", +'version-poweredby-others' => 'další', +'version-license-info' => 'MediaWiki je svobodný software; můžete jej šířit nebo modifikovat podle podmínek GNU General Public License, vydávané Free Software Foundation; buď verze 2 této licence anebo (podle vašeho uvážení) kterékoli pozdější verze. + +MediaWiki je distribuována v naději, že bude užitečná, avšak BEZ JAKÉKOLI ZÁRUKY; neposkytují se ani odvozené záruky PRODEJNOSTI anebo VHODNOSTI PRO URČITÝ ÚČEL. Podrobnosti se dočtete v textu GNU General Public License. + +[{{SERVER}}{{SCRIPTPATH}}/COPYING Kopii GNU General Public License] jste měli obdržet spolu s tímto programem, pokud ne, napište na Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA nebo [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html si ji přečtěte online].', 'version-software' => 'Nainstalovaný software', 'version-software-product' => 'Název', 'version-software-version' => 'Verze', @@ -3441,6 +3566,15 @@ Zadejte jméno souboru bez označení "{{ns:file}}:".', 'tags-edit' => 'editovat', 'tags-hitcount' => '$1 {{PLURAL:$1|změna|změny|změn}}', +# Special:ComparePages +'comparepages' => 'Porovnání stránek', +'compare-selector' => 'Porovnání revizí stránek', +'compare-page1' => 'Stránka 1', +'compare-page2' => 'Stránka 2', +'compare-rev1' => 'Revize 1', +'compare-rev2' => 'Revize 2', +'compare-submit' => 'Porovnat', + # Database error messages 'dberr-header' => 'Tato wiki má nějaké potíže', 'dberr-problems' => 'Promiňte! Tento server má v tuto chvíli technické problémy.', @@ -3457,8 +3591,13 @@ Zadejte jméno souboru bez označení "{{ns:file}}:".', 'htmlform-float-invalid' => 'Uvedená hodnota není číslo.', 'htmlform-int-toolow' => 'Vámi zadaná hodnota je menší než dovolené minimum $1', 'htmlform-int-toohigh' => 'Vámi zadaná hodnota je větší než dovolené maximum $1', +'htmlform-required' => 'Tato položka je povinná', 'htmlform-submit' => 'Odeslat', 'htmlform-reset' => 'Vrátit změny', 'htmlform-selectorother-other' => 'Jiná hodnota', +# SQLite database support +'sqlite-has-fts' => '$1 s podporou plnotextového vyhledávání', +'sqlite-no-fts' => '$1 bez podpory plnotextového vyhledávání', + ); diff --git a/languages/messages/MessagesCsb.php b/languages/messages/MessagesCsb.php index dd78a347..fc006ada 100644 --- a/languages/messages/MessagesCsb.php +++ b/languages/messages/MessagesCsb.php @@ -7,6 +7,7 @@ * @ingroup Language * @file * + * @author Iketsi * @author Kaszeba * @author Kuvaly * @author Leinad @@ -15,6 +16,8 @@ * @author לערי ריינהארט */ +$fallback = 'pl'; + $namespaceNames = array( NS_MEDIA => 'Media', NS_SPECIAL => 'Specjalnô', @@ -50,8 +53,7 @@ $messages = array( 'tog-editsection' => 'Włączô edicëjã dzélów starnë przez lënczi [edicëjô]', 'tog-editsectiononrightclick' => 'Włączë edicëjã sekcëji bez klëkniãcé prawą knąpą mëszë
    na titlu sekcëji (JavaScript)', 'tog-showtoc' => 'Pòkażë spisënk zamkłoscë (dlô starnów z wicy jak 3 nôgłówkama)', -'tog-rememberpassword' => 'Wdôrzë mòjé miono brëkòwnika na tim kòmpùtrze', -'tog-editwidth' => 'Kastka edicëji mô fùl szérz', +'tog-rememberpassword' => 'Spamiãtôj mòją parolã na tim kòmpùtrze (maksymalno przez $1 {{PLURAL:$1|dzéń|dni|dniów}})', 'tog-watchcreations' => 'Dodôwôj starnë, chtërné ùsôdzã, do mòji lëstë ùzérónëch artiklów', 'tog-watchdefault' => 'Dodôwôj starnë, chtërné editëjã do mòji lëstë ùzérónëch artiklów', 'tog-watchmoves' => 'Dodôwôj starnë jaczé przenoszã do mòji lëstë ùzérónëch artiklów', @@ -186,31 +188,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Dodôj témã', -'vector-action-delete' => 'Rëmôj', -'vector-action-move' => 'Przeniesë', -'vector-action-protect' => 'Zazychrëjë', -'vector-action-undelete' => 'Doprowôdzë nazôd', -'vector-action-unprotect' => 'Òdzychrëjë', -'vector-namespace-category' => 'Kategòrëjô', -'vector-namespace-help' => 'Pòmòc', -'vector-namespace-image' => 'Lopk', -'vector-namespace-main' => 'Artikel', -'vector-namespace-media' => 'Starna lopka', -'vector-namespace-mediawiki' => 'Wiadło', -'vector-namespace-project' => 'Starna ùdbë', -'vector-namespace-special' => 'Specjalnô starna', -'vector-namespace-talk' => 'Diskùsëjô', -'vector-namespace-template' => 'Szablóna', -'vector-namespace-user' => 'Starna brëkòwnika', -'vector-view-create' => 'Ùsôdzë', -'vector-view-edit' => 'Edicëjô', -'vector-view-history' => 'Historëjô lopka', -'vector-view-view' => 'Czëtôj', -'vector-view-viewsource' => 'Zdrojowi tekst', -'actions' => 'Dzéjania', -'namespaces' => 'Rum mionów:', -'variants' => 'Wariantë', +'vector-action-addsection' => 'Dodôj témã', +'vector-action-delete' => 'Rëmôj', +'vector-action-move' => 'Przeniesë', +'vector-action-protect' => 'Zazychrëjë', +'vector-action-undelete' => 'Doprowôdzë nazôd', +'vector-action-unprotect' => 'Òdzychrëjë', +'vector-simplesearch-preference' => 'Włączë awansowóné pòdpòwiescë szëkbë (blós dlô skórczi Wektor)', +'vector-view-create' => 'Ùsôdzë', +'vector-view-edit' => 'Edicëjô', +'vector-view-history' => 'Historëjô lopka', +'vector-view-view' => 'Czëtôj', +'vector-view-viewsource' => 'Zdrojowi tekst', +'actions' => 'Dzéjania', +'namespaces' => 'Rum mionów:', +'variants' => 'Wariantë', 'errorpagetitle' => 'Fela', 'returnto' => 'Nazôd do starnë $1.', @@ -275,7 +267,7 @@ $messages = array( 'currentevents' => 'Aktualné wëdarzenia', 'currentevents-url' => 'Project:Aktualné wëdarzenia', 'disclaimers' => 'Prawné zastrzedżi', -'disclaimerpage' => 'Project:General_disclaimer', +'disclaimerpage' => 'Project:Prawné zastrzedżi', 'edithelp' => 'Pòmòc do edicëji', 'edithelppage' => 'Help:Editowanié starnë', 'helppage' => 'Help:Spisënk zamkłoscë', @@ -329,7 +321,7 @@ $messages = array( 'nstab-special' => 'Specjalnô starna', 'nstab-project' => 'meta-starna', 'nstab-image' => 'Òbrôzk', -'nstab-mediawiki' => 'ògłosënk', +'nstab-mediawiki' => 'Òłosënk', 'nstab-template' => 'Szablóna', 'nstab-help' => 'Pòmòc', 'nstab-category' => 'Kategòrëjô', @@ -376,7 +368,7 @@ Nie zbëjë zmienic swòjich nastôwów na [[Special:Preferences|{{SITENAME}}]]. 'yourname' => 'Miono brëkòwnika', 'yourpassword' => 'Twòja parola', 'yourpasswordagain' => 'Pòwtórzë parolã', -'remembermypassword' => 'Wdôrzë mòjé miono brëkòwnika na tim kòmpùtrze', +'remembermypassword' => 'Spamiãtôj mòją parolã na tim kòmpùtrze (maksymalno przez $1 {{PLURAL:$1|dzéń|dni|dniów}})', 'yourdomainname' => 'Twòjô domena', 'login' => 'Wlogùjë mie', 'nav-login-createaccount' => 'Logòwanié', @@ -556,23 +548,27 @@ Administrator, chtëren jã zablokòwôł, pòdôł przëczënã: $1", 'history-feed-item-nocomment' => '$1 ò $2', # Revision deletion -'rev-delundel' => 'pòkażë/zatacë', -'revdelete-radio-set' => 'Jo', -'revdelete-radio-unset' => 'Nié', -'revdel-restore' => 'Zjinaczë widzawnotã', -'pagehist' => 'Historëjô starnë', -'deletedhist' => 'Rëmniãtô historëjô edicëji', -'revdelete-content' => 'zamkłosc', -'revdelete-summary' => 'òpisënk zjinaczi', -'revdelete-uname' => 'miono brëkòwnika', -'revdelete-restricted' => 'nastôwi ògrańczenia dlô sprôwników', -'revdelete-unrestricted' => 'rëmôj ògrańczenia dlô sprôwników', -'revdelete-hid' => 'zatacë $1', -'revdelete-unhid' => 'nie tacë $1', -'revdelete-log-message' => '$1 - $2 {{PLURAL:$2|wersëjô|wersëji}}', -'logdelete-log-message' => '$1 – $2 {{PLURAL:$2|zdarzenié|zdarzenia|zdarzeniów}}', -'revdelete-hide-current' => 'Pòkôza sã fela przë taceniu wersëji datowóny na $2, $1. To je nônowszô wersëjô starnë, chtërnô ni mòże bëc zataconô.', -'revdelete-show-no-access' => 'Pòkôza sã fela przë próbie wëskrzënieniô elementu datowónegò na $2, $1. Widzawnota negò elementu òsta ògrańczonô - ni môsz przëstãpù.', +'rev-delundel' => 'pòkażë/zatacë', +'rev-showdeleted' => 'pokôż', +'revdelete-show-file-submit' => 'Jo', +'revdelete-radio-set' => 'Jo', +'revdelete-radio-unset' => 'Nié', +'revdel-restore' => 'Zjinaczë widzawnotã', +'revdel-restore-deleted' => 'rëmniãté wersëje', +'revdel-restore-visible' => 'widzawné wersëje', +'pagehist' => 'Historëjô starnë', +'deletedhist' => 'Rëmniãtô historëjô edicëji', +'revdelete-content' => 'zamkłosc', +'revdelete-summary' => 'òpisënk zjinaczi', +'revdelete-uname' => 'miono brëkòwnika', +'revdelete-restricted' => 'nastôwi ògrańczenia dlô sprôwników', +'revdelete-unrestricted' => 'rëmôj ògrańczenia dlô sprôwników', +'revdelete-hid' => 'zatacë $1', +'revdelete-unhid' => 'nie tacë $1', +'revdelete-log-message' => '$1 - $2 {{PLURAL:$2|wersëjô|wersëji}}', +'logdelete-log-message' => '$1 – $2 {{PLURAL:$2|zdarzenié|zdarzenia|zdarzeniów}}', +'revdelete-hide-current' => 'Pòkôza sã fela przë taceniu wersëji datowóny na $2, $1. To je nônowszô wersëjô starnë, chtërnô ni mòże bëc zataconô.', +'revdelete-show-no-access' => 'Pòkôza sã fela przë próbie wëskrzënieniô elementu datowónegò na $2, $1. Widzawnota negò elementu òsta ògrańczonô - ni môsz przëstãpù.', # Merge log 'revertmerge' => 'Rozdzélë', @@ -595,6 +591,7 @@ Administrator, chtëren jã zablokòwôł, pòdôł przëczënã: $1", 'prevn' => 'wczasniészé {{PLURAL:$1|$1}}', 'nextn' => 'nôslédné {{PLURAL:$1|$1}}', 'viewprevnext' => 'Òbaczë ($1 {{int:pipe-separator}} $2) ($3).', +'searchprofile-advanced' => 'Awansowóné', 'search-result-size' => '$1 ({{PLURAL:$2|1 słowò|$2 słowa|$2 słów}})', 'search-redirect' => '(przeczérowanié $1)', 'search-section' => '(dzél $1)', @@ -604,6 +601,7 @@ Administrator, chtëren jã zablokòwôł, pòdôł przëczënã: $1", 'search-interwiki-more' => '(wicy)', 'search-mwsuggest-enabled' => 'z sugestëjama', 'search-mwsuggest-disabled' => 'bez sugestëjów', +'searchall' => 'wszëtczé', 'nonefound' => "'''Bôczënk''':Dlô szëkbë są domëslno przistãpné blós niejedné rumë mionów. Spróbùjë szëkbë z przëdôwkã ''all:'' dlô całowny zamkłoscë starnów (zamëkający w se starnë diskùsëji, szablónë, ëtp), abò ùżëje przëdôwka wëbrónegò ruma mionów.", 'powersearch' => 'Szëkba', @@ -670,6 +668,7 @@ Spróbùjë szëkbë z przëdôwkã ''all:'' dlô całowny zamkłoscë starnów 'prefs-files' => 'Lopczi', 'prefs-custom-css' => 'swój CSS', 'prefs-custom-js' => 'swój JavaScript', +'prefs-common-css-js' => 'Wespólny CSS/JS dlô wszëtczich skórków:', 'prefs-reset-intro' => 'Na ti starnie mòże doprowôdzëc nazôd domëslné nastôwë dlô ti starnë. Negò dzéjaniô ni mòżé pòzdze ju copnąc.', 'prefs-emailconfirm-label' => 'Pòcwierdzenié e-mailowi adresë:', @@ -753,6 +752,7 @@ Mòżesz zezwòlëc jinszim brëkòwniką na łączbã z Tobą przez Twòją sta 'recentchanges-legend' => 'Òptacëje slédnych zjinaków', 'recentchangestext' => 'Na starna prezentérëje historëjã slédnëch edicëjów w {{SITENAME}}.', 'recentchanges-feed-description' => 'Pòdstrzegô slédny zmianë w tim pòwrózkù.', +'recentchanges-label-minor' => 'To je drobnô edicëjô', 'rcnote' => "Niżi {{PLURAL:$1|nachôdô sã '''1''' slédnô zjinaka zrobionô|nachôdają sã '''$1''' slédné zjinaczi zrobioné|nachôdô sã '''$1''' slédnych zjinaków zrobionëch}} w {{PLURAL:$2|slédnégò dnia|slédnych '''$2''' dniach}}, rëchùjąc òd $5 dnia $4.", 'rcnotefrom' => "Niżi są zmianë òd '''$2''' (pòkazóné do '''$1''').", 'rclistfrom' => 'Pòkażë nowé zmianë òd $1', @@ -785,31 +785,31 @@ Starnë z [[Special:Watchlist|lëstë ùzérónëch artiklów]] są '''pògrëbi 'recentchangeslinked-to' => 'Wëskrzëni zjinaczi nié na lënkòwónëch starnach, blós na starnach lënkùjącëch do pòdóny starnë', # Upload -'upload' => 'Wladënk lopka', -'uploadbtn' => 'Wladëjë lopk', -'uploadnologin' => 'Felënk logòwaniô', -'uploadtext' => "Brëkùjë negò fòrmùlara do wladënkù lopków. +'upload' => 'Wladënk lopka', +'uploadbtn' => 'Wladëjë lopk', +'uploadnologin' => 'Felënk logòwaniô', +'uploadtext' => "Brëkùjë negò fòrmùlara do wladënkù lopków. Jeżlë chcesz przezdrzec abò szëkac w dotenczas wladowónëch lopkach, biéj do [[Special:FileList|lësta lopków]]. Kòżdi wladënk je registrowóny w [[Special:Log/upload|registrze wladënkù]], a rëmniãcé w [[Special:Log/delete|registrze rëmaniô]]. Abë dodac lopk do starnë, ùżëjë ùniższegò lënka wedle nôslédnëch mùstrów: * '''[[{{ns:file}}:Lopk.jpg]]''' wëskrzëni całi lopk * '''[[{{ns:file}}:Lopk.png|200px|thumb|left|pòdpisënk òbrôzka]]''' wëskrzëni z lewi starnë, przë ùbrzégù, miniaturkã w szérzë 200 pikslów w ramie, z nôdpisã 'pòdpisënk òbrôzka' * '''[[{{ns:media}}:Lopk.ogg]]''' òtemknie prosti lënk do lopka bez wëskrzënianiô sómegò lopka", -'uploadlog' => 'Lësta wladënków', -'uploadlogpage' => 'Dołączoné', -'uploadlogpagetext' => 'Hewò je lësta slédno wladowónëch lopków. +'uploadlog' => 'Lësta wladënków', +'uploadlogpage' => 'Dołączoné', +'uploadlogpagetext' => 'Hewò je lësta slédno wladowónëch lopków. Wszëtczé gòdzënë tikają conë ùniwersalnégò czasë.', -'filename' => 'Miono lopka', -'filedesc' => 'Òpisënk', -'fileuploadsummary' => 'Pòdrechòwanié:', -'filesource' => 'Zdrój:', -'uploadedfiles' => 'Wladowóné lopczi', -'badfilename' => 'Miono òbrôzka zmienioné na "$1".', -'successfulupload' => 'Wladënk darzëł sã', -'uploadwarning' => 'Òstrzega ò wladënkù', -'savefile' => 'Zapiszë lôpk', -'uploadedimage' => 'wladënk: "$1"', -'uploaddisabled' => 'Przeprôszómë! Mòżlëwòta wladënkù lopków na nen serwer òsta wëłączonô.', +'filename' => 'Miono lopka', +'filedesc' => 'Òpisënk', +'fileuploadsummary' => 'Pòdrechòwanié:', +'filesource' => 'Zdrój:', +'uploadedfiles' => 'Wladowóné lopczi', +'badfilename' => 'Miono òbrôzka zmienioné na "$1".', +'uploadwarning' => 'Òstrzega ò wladënkù', +'savefile' => 'Zapiszë lôpk', +'uploadedimage' => 'wladënk: "$1"', +'uploaddisabled' => 'Przeprôszómë! Mòżlëwòta wladënkù lopków na nen serwer òsta wëłączonô.', +'upload-success-subj' => 'Wladënk darzëł sã', # Special:ListFiles 'listfiles' => 'Lësta òbrôzków', @@ -819,6 +819,7 @@ Wszëtczé gòdzënë tikają conë ùniwersalnégò czasë.', 'file-anchor-link' => 'Òbrôzk', 'filehist' => 'Historëjô lopka', 'filehist-help' => 'Klëkni na datum/czas, abë òbaczëc jak wëzdrzôł lopk w tim czasu.', +'filehist-revert' => 'copnij', 'filehist-current' => 'aktualny', 'filehist-datetime' => 'Datum/Czas', 'filehist-thumb' => 'Miniatura', @@ -936,7 +937,6 @@ Mòżesz zawãżëc wëszłosc przez wëbranié ôrtu registru, miona brëkòwni # Watchlist 'watchlist' => 'Lësta ùzérónëch artiklów', 'mywatchlist' => 'Lësta ùzérónëch artiklów', -'watchlistfor' => "(dlô '''$1''')", 'watchnologin' => 'Felënk logòwóniô', 'addedwatch' => 'Dodónô do lëstë ùzérónëch', 'addedwatchtext' => "Starna \"[[:\$1]]\" òsta dodónô do twòji [[Special:Watchlist|lëstë ùzérónëch artiklów]]. @@ -970,6 +970,7 @@ Czej chcesz remôc starnã z lëste ùzéronëch artiklów, klikni ''Òprzestôj 'deletepage' => 'Rëmôj starnã', 'confirm' => 'Pòcwierdzë', 'excontent' => 'Zamkłosc starnë "$1"', +'delete-legend' => 'Rëmôj', 'confirmdeletetext' => 'Chcesz rëmnąc starnã do grëpë z ji całowną historëją. Ùgwësni sã, czë na gwës chcesz to zrobic, rozmiejąc kònsekwencëje ti òperacëji ë że robisz to zgòdno z [[{{MediaWiki:Policy-url}}|reglama]].', 'actioncomplete' => 'Òperacëjô wëkònónô', @@ -1018,10 +1019,11 @@ Mòżesz zmienic légã zazychrowaniô, nie bãdze to równak miało cëskù na 'restriction-level' => 'Léga bezpieczi:', # Undelete -'viewdeletedpage' => 'Òbaczë rëmóne starnë', -'undeletebtn' => 'Doprowôdzë nazôd', -'undeletelink' => 'wëskrzëni abò doprowôdzë nazôd', -'undeletedarticle' => 'dobëté nazôd "[[$1]]"', +'viewdeletedpage' => 'Òbaczë rëmóne starnë', +'undeletebtn' => 'Doprowôdzë nazôd', +'undeletelink' => 'wëskrzëni abò doprowôdzë nazôd', +'undeletedarticle' => 'dobëté nazôd "[[$1]]"', +'undelete-show-file-submit' => 'Jo', # Namespace form on various pages 'namespace' => 'Rum mionów:', @@ -1040,7 +1042,7 @@ Mòżesz zmienic légã zazychrowaniô, nie bãdze to równak miało cëskù na 'sp-contributions-newbies' => 'Pòkażë edicëjã blós nowich brëkòwników', 'sp-contributions-newbies-sub' => 'Dlô nowich brëkòwników', 'sp-contributions-blocklog' => 'historëjô blokòwaniô', -'sp-contributions-talk' => 'Diskùsëjô', +'sp-contributions-talk' => 'diskùsëjô', 'sp-contributions-search' => 'Szëkba za edicëjama', 'sp-contributions-username' => 'Adresa IP abò miono brëkòwnika:', 'sp-contributions-submit' => 'Szëkôj', @@ -1205,6 +1207,8 @@ Mòżesz òbaczëc ji zdrój.', 'tooltip-rollback' => '"Copni" jednym klëkniãcem copô wszëtczé zjinaczi zrëchtowóny na ti starnie przez slédno editëjãcegò', 'tooltip-undo' => '"anulëjë" copô nã edicëjã ë òtmëkô edicjowé òkno w tribie pòdzérkù. Zezwôlô na dodanié przëczënë zjinaczi w òpisënkù.', +'tooltip-preferences-save' => 'Zapiszë nastôwë', +'tooltip-summary' => 'Wpiszë wãzłowati òpisënk', # Attribution 'anonymous' => 'Anonimòwi {{PLURAL:$1|brëkòwnik|brëkòwnicë}} na {{SITENAME}}', @@ -1234,8 +1238,9 @@ Zezwôlô na dodanié przëczënë zjinaczi w òpisënkù.', # Media information 'imagemaxsize' => 'Ògrańczë na starnie òpisënkù òbrôzków jich miarã do:', 'thumbsize' => 'Miara miniaturków:', -'file-info-size' => '($1 × $2 pikslów, miara lopka: $3, ôrt MIME: $4)', +'file-info-size' => '$1 × $2 pikslów, miara lopka: $3, ôrt MIME: $4', 'file-nohires' => 'Felëje wikszô miara.', +'svg-long-desc' => 'Lopk SVG, nominalno $1 × $2 pikslów, miara lopka: $3', 'show-big-image' => 'Fùl miara', 'show-big-image-thumb' => 'Miara pòdzérkù: $1 × $2 pikslów', @@ -1277,10 +1282,14 @@ Jinszé pòla bãdą domëslno zataconé. 'watchlistall2' => 'wszëtczé', 'namespacesall' => 'wszëtczé', 'monthsall' => 'wszëtczé', +'limitall' => 'wszëtczé', # E-mail address confirmation 'confirmemail_loggedin' => 'Twòjô adresa e-mail òsta pòcwierdzona.', +# action=purge +'confirm_purge_button' => 'Jo!', + # Multipage image navigation 'imgmultigo' => 'Biéj!', diff --git a/languages/messages/MessagesCu.php b/languages/messages/MessagesCu.php index f7df422e..08d3c32d 100644 --- a/languages/messages/MessagesCu.php +++ b/languages/messages/MessagesCu.php @@ -89,7 +89,7 @@ $linkTrail = '/^([a-zабвгдеєжѕзїіıићклмнопсстѹфхѡѿ $messages = array( # Dates -'sunday' => 'нєдѣ́лꙗ', +'sunday' => 'нєдѣлꙗ', 'monday' => 'понедѣл҄ьникъ', 'tuesday' => 'въторьникъ', 'wednesday' => 'срѣда', @@ -103,35 +103,35 @@ $messages = array( 'thu' => 'ч҃т', 'fri' => 'п҃т', 'sat' => 'с҃б', -'january' => 'їаноуа́рїи', -'february' => 'февроуа́рїи', +'january' => 'їаноуарїи', +'february' => 'фєвроуарїи', 'march' => 'мартїи', -'april' => 'апрі́лїи', -'may_long' => 'ма́їи', -'june' => 'їоу́нїи', -'july' => 'їоу́лїи', -'august' => 'аѵ́гоустъ', -'september' => 'сєптє́мврїи', -'october' => 'октѡ́врїи', -'november' => 'ноє́мврїи', -'december' => 'дєкє́мврїи', -'january-gen' => 'їаноуа́рїꙗ', -'february-gen' => 'фєвроуа́рїꙗ', -'march-gen' => 'ма́ртїꙗ', -'april-gen' => 'апрі́лїꙗ', -'may-gen' => 'ма́їꙗ', -'june-gen' => 'їоу́нїꙗ', -'july-gen' => 'їоу́лїꙗ', -'august-gen' => 'аѵ́гоуста', -'september-gen' => 'сєптє́мврїꙗ', -'october-gen' => 'октѡ́врїꙗ', -'november-gen' => 'ноє́мврїꙗ', -'december-gen' => 'дєкє́мврїꙗ', +'april' => 'апрїлїи', +'may_long' => 'маїи', +'june' => 'їоунїи', +'july' => 'їоулїи', +'august' => 'аѷгоустъ', +'september' => 'сєптємврїи', +'october' => 'октѡврїи', +'november' => 'ноємврїи', +'december' => 'дєкємврїи', +'january-gen' => 'їаноуарїꙗ', +'february-gen' => 'фєвроуарїꙗ', +'march-gen' => 'мартїꙗ', +'april-gen' => 'апрїлїꙗ', +'may-gen' => 'маїꙗ', +'june-gen' => 'їоунїꙗ', +'july-gen' => 'їоулїꙗ', +'august-gen' => 'аѷгоуста', +'september-gen' => 'сєптємврїꙗ', +'october-gen' => 'октѡврїꙗ', +'november-gen' => 'ноємврїꙗ', +'december-gen' => 'дєкємврїꙗ', 'jan' => 'ꙗ҃н', 'feb' => 'фє҃в', 'mar' => 'ма҃р', 'apr' => 'ап҃р', -'may' => 'маи', +'may' => 'маїи', 'jun' => 'їо҃ун', 'jul' => 'їо҃ул', 'aug' => 'аѵ҃г', @@ -141,575 +141,626 @@ $messages = array( 'dec' => 'дє҃к', # Categories related messages -'pagecategories' => '{{PLURAL:$1|Катигорі́ꙗ|Катигорі́и|Катигорі́ѩ|Катигорі́ѩ}}', -'category_header' => 'катигорі́ѩ ⁖ $1 ⁖ страни́цѧ', -'subcategories' => 'соубкатигорі́ѩ', -'listingcontinuesabbrev' => '· вѧ́щє', +'pagecategories' => '{{PLURAL:$1|Катигорїꙗ|Катигорїи|Катигорїѩ|Катигорїѩ}}', +'category_header' => 'катигорїѩ ⁖ $1 ⁖ страницѧ', +'subcategories' => 'подъкатигорїѩ', +'hidden-categories' => '{{PLURAL:$1|съкрꙑта катигорїꙗ|съкрꙑти катигорїи|съкрꙑтꙑ катигорїѩ}}', +'listingcontinuesabbrev' => '· вѧщє', 'linkprefix' => '/^(.*?)(„|«)$/sD', -'about' => 'опьса́ниѥ', -'article' => 'члѣ́нъ', -'moredotdotdot' => 'вѧ́щє ···', -'mypage' => 'моꙗ́ страни́ца', -'mytalk' => 'моꙗ́ бєсѣ́да', -'navigation' => 'пла́ваниѥ', +'about' => 'опьсаниѥ', +'article' => 'члѣнъ', +'newwindow' => '(иномь окънѣ)', +'moredotdotdot' => 'вѧщє ···', +'mypage' => 'моꙗ страница', +'mytalk' => 'моꙗ бєсѣда', +'navigation' => 'плаваниѥ', 'and' => ' и', # Cologne Blue skin -'qbedit' => 'испра́ви', +'qbedit' => 'исправи', 'qbpageoptions' => 'си страни́ца', -'qbmyoptions' => 'моꙗ́ страни́цѧ', -'qbspecialpages' => 'наро́чьнꙑ страни́цѧ', +'qbmyoptions' => 'моꙗ страницѧ', +'qbspecialpages' => 'нарочьнꙑ страницѧ', # Vector skin -'vector-action-delete' => 'поничьжє́ниѥ', -'vector-action-move' => 'прѣимєнова́ниѥ', -'vector-action-protect' => 'ꙁабранѥ́ниѥ', -'vector-action-unprotect' => 'поущє́ниѥ', -'vector-namespace-category' => 'катигорі́ꙗ', -'vector-namespace-help' => 'по́мощь', -'vector-namespace-image' => 'дѣ́ло', -'vector-namespace-main' => 'члѣ́нъ', -'vector-namespace-media' => 'срѣ́дьства', -'vector-namespace-mediawiki' => 'напьса́ниѥ', -'vector-namespace-project' => 'съвѣ́тъ', -'vector-namespace-special' => 'наро́чьна', -'vector-namespace-talk' => 'бєсѣ́да', -'vector-namespace-template' => 'обраꙁь́ць', -'vector-namespace-user' => 'по́льꙃєватєл҄ь', -'vector-view-create' => 'сътворѥ́ниѥ', -'vector-view-edit' => 'испра́ви', -'vector-view-history' => 'їсторі́ꙗ', -'vector-view-view' => 'чьтѥ́ниѥ', -'vector-view-viewsource' => 'страни́цѧ исто́чьнъ о́браꙁъ', -'actions' => 'дѣ́иства', -'namespaces' => 'имє́нъ просто́рꙑ', - -'errorpagetitle' => 'блаꙁна', -'tagline' => '{{grammar:genitive|{{SITENAME}}}} страни́ца', -'help' => 'по́мощь', -'search' => 'иска́ниѥ', -'searchbutton' => 'ищи́', -'go' => 'прѣиди́', -'searcharticle' => 'прѣиди́', -'history' => 'страни́цѧ їсторі́ꙗ', -'history_short' => 'їсторі́ꙗ', -'printableversion' => 'пєча́тьнъ о́браꙁъ', -'permalink' => 'въи́ньна съвѧ́ꙁь', -'print' => 'пєча́таниѥ', -'edit' => 'испра́ви', -'create' => 'сътворѥ́ниѥ', -'editthispage' => 'си страни́цѧ исправлѥ́ниѥ', -'create-this-page' => 'си страни́цѧ сътворѥ́ниѥ', -'delete' => 'поничьжє́ниѥ', -'deletethispage' => 'си страни́цѧ поничьжє́ниѥ', -'protect' => 'ꙁабранѥ́ниѥ', -'protectthispage' => 'си страни́цѧ ꙁабранє́ниѥ', -'unprotect' => 'поущє́ниѥ', -'newpage' => 'но́ва страни́ца', -'talkpage' => 'си страни́цѧ бєсѣ́да', -'talkpagelinktext' => 'бєсѣ́да', -'specialpage' => 'наро́чьна страни́ца', -'personaltools' => 'моꙗ́ орѫ́диꙗ', -'talk' => 'бєсѣ́да', -'toolbox' => 'орѫ́диꙗ', -'otherlanguages' => 'ДРОУГꙐ́ ѨꙀꙐКꙐ́', -'redirectedfrom' => '(прѣнаправлѥ́ниѥ о́тъ ⁖ $1 ⁖)', -'redirectpagesub' => 'прѣнаправлѥ́ниѥ', -'lastmodifiedat' => 'страни́цѧ послѣ́дьнꙗ мѣ́на сътворѥна́ $2 · $1 бѣ ⁙', -'jumpto' => 'прѣиди́ къ :', -'jumptonavigation' => 'пла́ваниѥ', -'jumptosearch' => 'иска́ниѥ', +'vector-action-delete' => 'поничьжєниѥ', +'vector-action-move' => 'прѣимєнованиѥ', +'vector-action-protect' => 'ꙁабранѥниѥ', +'vector-action-unprotect' => 'поущєниѥ', +'vector-view-create' => 'сътворѥниѥ', +'vector-view-edit' => 'исправи', +'vector-view-history' => 'їсторїꙗ', +'vector-view-view' => 'чьтѥниѥ', +'vector-view-viewsource' => 'страницѧ источьнъ обраꙁъ', +'actions' => 'дѣиства', +'namespaces' => 'имєнъ просторꙑ', + +'errorpagetitle' => 'блаꙁна', +'tagline' => '{{grammar:genitive|{{SITENAME}}}} страница', +'help' => 'помощь', +'search' => 'исканиѥ', +'searchbutton' => 'ищи', +'go' => 'прѣиди', +'searcharticle' => 'прѣиди', +'history' => 'страницѧ їсторїꙗ', +'history_short' => 'їсторїꙗ', +'info_short' => 'плирофорїꙗ', +'printableversion' => 'пєчатьнъ обраꙁъ', +'permalink' => 'въиньна съвѧꙁь', +'print' => 'пєчатаниѥ', +'edit' => 'исправи', +'create' => 'сътворѥниѥ', +'editthispage' => 'си страницѧ исправлѥниѥ', +'create-this-page' => 'си страницѧ сътворѥниѥ', +'delete' => 'поничьжєниѥ', +'deletethispage' => 'си страницѧ поничьжєниѥ', +'protect' => 'ꙁабранѥниѥ', +'protect_change' => 'иꙁмѣнѥниѥ', +'protectthispage' => 'си страницѧ ꙁабранєниѥ', +'unprotect' => 'поущєниѥ', +'newpage' => 'нова страница', +'talkpage' => 'си страницѧ бєсѣда', +'talkpagelinktext' => 'бєсѣда', +'specialpage' => 'нарочьна страница', +'personaltools' => 'моꙗ орѫдиꙗ', +'postcomment' => 'нова чѧсть', +'talk' => 'бєсѣда', +'toolbox' => 'орѫдиꙗ', +'otherlanguages' => 'дроугꙑ ѩꙁꙑкꙑ', +'redirectedfrom' => '(прѣнаправлѥниѥ отъ ⁖ $1 ⁖)', +'redirectpagesub' => 'прѣнаправлѥниѥ', +'lastmodifiedat' => 'страницѧ послѣдьнꙗ мѣна сътворѥна $2 · $1 бѣ ⁙', +'jumpto' => 'прѣиди къ :', +'jumptonavigation' => 'плаваниѥ', +'jumptosearch' => 'исканиѥ', +'pool-errorunknown' => 'нєвѣдома блаꙁна', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'О {{grammar:instrumental|{{SITENAME}}}}', -'aboutpage' => 'Project:О сѥ́мь опꙑтьствова́нии', -'copyright' => 'по́дъ прощє́ниѥмь $1 пьса́но ѥ́стъ', -'copyrightpage' => '{{ns:project}}:Творь́цъ права́', -'currentevents' => 'сѫ́щѧѩ вѣ́щи', -'currentevents-url' => 'Project:Сѫ́щѧѩ вѣ́щи', -'edithelp' => 'по́мощь по исправлѥ́ниѭ', -'edithelppage' => 'Help:Исправлѥ́ниѥ страни́цѧ', -'helppage' => 'Help:Ката́логъ', -'mainpage' => 'гла́вьна страни́ца', -'mainpage-description' => 'гла́вьна страни́ца', -'portal' => 'обьщє́ниꙗ съвѣ́тъ', -'portal-url' => 'Project:Обьщє́ниꙗ съвѣ́тъ', - +'aboutpage' => 'Project:О сѥмь опꙑтьствовании', +'copyright' => 'подъ прощєниѥмь $1 пьсано ѥстъ', +'copyrightpage' => '{{ns:project}}:Творьцъ права', +'currentevents' => 'сѫщѧѩ вѣщи', +'currentevents-url' => 'Project:Сѫщѧѩ вѣщи', +'edithelp' => 'помощь по исправлѥниѭ', +'edithelppage' => 'Help:Исправлѥниѥ страницѧ', +'helppage' => 'Help:Каталогъ', +'mainpage' => 'главьна страница', +'mainpage-description' => 'главьна страница', +'policy-url' => 'Project:Полїтїка', +'portal' => 'обьщєниꙗ съвѣтъ', +'portal-url' => 'Project:Обьщєниꙗ съвѣтъ', + +'retrievedfrom' => 'поѩто иꙁ ⁖ $1 ⁖', 'youhavenewmessages' => '$1 тєбѣ напьсанꙑ сѫтъ ($2)', -'newmessageslink' => 'но́ви напь́саниꙗ', -'newmessagesdifflink' => 'послѣ́дьнꙗ мѣ́на', -'editsection' => 'испра́ви', -'editold' => 'испра́ви', -'viewsourceold' => 'страни́цѧ исто́чьнъ о́браꙁъ', -'editlink' => 'испра́ви', -'viewsourcelink' => 'страни́цѧ исто́чьнъ о́браꙁъ', -'editsectionhint' => 'исправлѥ́ниѥ чѧ́сти : $1', -'toc' => 'ката́логъ', -'showtoc' => 'ви́ждь', +'newmessageslink' => 'нови напьсаниꙗ', +'newmessagesdifflink' => 'послѣдьнꙗ мѣна', +'editsection' => 'исправи', +'editold' => 'исправи', +'viewsourceold' => 'страницѧ источьнъ обраꙁъ', +'editlink' => 'исправи', +'viewsourcelink' => 'страницѧ источьнъ обраꙁъ', +'editsectionhint' => 'исправлѥниѥ чѧсти : $1', +'toc' => 'каталогъ', +'showtoc' => 'виждь', 'hidetoc' => 'съкрꙑи', -'viewdeleted' => '$1 ви́дєти хо́щєши ;', -'red-link-title' => '$1 (си страни́цѧ нѣ́стъ)', +'viewdeleted' => '$1 видєти хощєши ;', +'red-link-title' => '$1 (си страницѧ нѣстъ)', # Short words for each namespace, by default used in the namespace tab in monobook -'nstab-main' => 'члѣ́нъ', -'nstab-user' => 'по́льꙃєватєл҄ь', -'nstab-media' => 'срѣ́дьства', -'nstab-special' => 'наро́чьна', -'nstab-project' => 'съвѣ́тъ', -'nstab-image' => 'ви́дъ', -'nstab-mediawiki' => 'напьса́ниѥ', -'nstab-template' => 'обраꙁь́ць', -'nstab-help' => 'страни́ца по́мощи', -'nstab-category' => 'катигорі́ꙗ', +'nstab-main' => 'члѣнъ', +'nstab-user' => 'польꙃєватєл҄ь', +'nstab-media' => 'срѣдьства', +'nstab-special' => 'нарочьна', +'nstab-project' => 'съвѣтъ', +'nstab-image' => 'дѣло', +'nstab-mediawiki' => 'напьсаниѥ', +'nstab-template' => 'обраꙁьць', +'nstab-help' => 'страница помощи', +'nstab-category' => 'катигорїꙗ', # General errors 'error' => 'блаꙁна', -'viewsource' => 'страни́цѧ исто́чьнъ о́браꙁъ', +'viewsource' => 'страницѧ источьнъ обраꙁъ', 'viewsourcefor' => '$1 дѣлꙗ', # Login and logout pages -'yourname' => 'твоѥ́ и́мѧ', -'yourpassword' => 'Таино слово напиши', -'yourpasswordagain' => 'Опакы таиноѥ слово напиши', -'login' => 'Въниди', -'nav-login-createaccount' => 'въниди / съꙁи́жди си мѣ́сто', -'userlogin' => 'въниди / съꙁи́жди си мѣ́сто', +'yourname' => 'твоѥ имѧ', +'yourpassword' => 'таино слово напиши', +'yourpasswordagain' => 'опакꙑ таиноѥ слово напиши', +'login' => 'въниди', +'nav-login-createaccount' => 'въниди / съꙁижди си мѣсто', +'userlogin' => 'въниди / съꙁижди си мѣсто', 'userloginnocreate' => 'въниди', -'logout' => 'ис̾хо́дъ', -'userlogout' => 'ис̾хо́дъ', -'nologinlink' => 'съꙁи́жди си мѣ́сто', -'createaccount' => 'съꙁи́жди си мѣ́сто', -'gotaccount' => "Мѣсто ти ѥстъ ли? '''$1'''.", -'gotaccountlink' => 'Въниди', -'userexists' => 'сѫщє по́льꙃєватєлꙗ и́мѧ пьса ⁙ ино иꙁобрѧщи', +'logout' => 'ис̾ходъ', +'userlogout' => 'ис̾ходъ', +'nologin' => 'мѣсто ти нѣстъ ли ? $1', +'nologinlink' => 'съꙁижди си мѣсто', +'createaccount' => 'съꙁижди си мѣсто', +'gotaccount' => 'мѣсто ти ѥстъ ли? $1', +'gotaccountlink' => 'въниди', +'createaccountreason' => 'какъ съмꙑслъ :', +'userexists' => 'сѫщє польꙃєватєлꙗ имѧ пьса ⁙ ино иꙁобрѧщи', 'loginerror' => 'въхода блаꙁна', -'accountcreated' => 'мѣ́сто сътворєно́ ѥ́стъ', -'loginlanguagelabel' => 'ѩꙁꙑ́къ : $1', +'accountcreated' => 'мѣсто сътворєно ѥстъ', +'loginlanguagelabel' => 'ѩꙁꙑкъ : $1', # Password reset dialog -'resetpass' => 'таина словєсє иꙁмѣнѥ́ниѥ', +'resetpass' => 'таина словєсє иꙁмѣнѥниѥ', 'oldpassword' => 'старо таино слово :', 'newpassword' => 'ново таино слово :', -'resetpass-submit-loggedin' => 'таина словєсє иꙁмѣнѥ́ниѥ', +'resetpass-submit-loggedin' => 'таина словєсє иꙁмѣнѥниѥ', # Edit page toolbar -'link_sample' => 'съвѧ́ꙁи и́мѧ', -'extlink_sample' => 'http://www.example.com съвѧ́ꙁи и́мѧ', +'link_sample' => 'съвѧꙁи имѧ', +'link_tip' => 'вънѫтрьнꙗ съвѧꙁь', +'extlink_sample' => 'http://www.example.com съвѧꙁи имѧ', +'extlink_tip' => 'вънѣщьнꙗ съвѧꙁь (помьни о http://)', 'math_tip' => 'маѳиматїчьна формоула (LaTeX)', -'sig_tip' => 'твои аѵто́графъ и нꙑ́нѣшьна врѣ́мѧ и дьнь', +'sig_tip' => 'твои аѵтографъ и нꙑнѣшьна врѣмѧ и дьнь', # Edit pages -'summary' => 'опьса́ниѥ :', -'minoredit' => 'ма́лаꙗ мѣ́на', -'watchthis' => 'си страни́цѧ блюдє́ниѥ', -'savearticle' => 'съхранѥ́ниѥ', -'showpreview' => 'мѣ́нꙑ поꙁьрѣ́ниѥ (бєꙁ съхранѥ́ниꙗ)', -'loginreqlink' => 'Въниди', -'newarticle' => '(но́въ)', -'noarticletext' => 'нꙑнѣ с̑ьдє́ ничєсожє нє напьсано ѥ́стъ ⁙ -[[Special:Search/{{PAGENAME}}|си страни́цѧ имѧ искати]] дроугꙑ страни́цѧ · -[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} съвѧ́ꙁанꙑ їсторі́ѩ видѣти] · -или [{{fullurl:{{FULLPAGENAME}}|action=edit}} ѭ́жє исправити] можєши', -'noarticletext-nopermission' => 'нꙑнѣ с̑ьдє́ ничєсожє нє напьсано ѥ́стъ ⁙ -[[Special:Search/{{PAGENAME}}|си страни́цѧ имѧ искати]] дроугы страни́цѧ или -[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} съвѧ́ꙁанꙑ їсторі́ѩ видѣти] можєши', -'clearyourcache' => 'НАРОЧИ́ТО: По съхранѥ́нии мо́жєши обити́ своѥго́ съмотри́ла съхра́нъ да ви́дѣлъ би мѣ́нꙑ ⁙ Mozilla ли Firefox ли Safari ли жьмꙑ́и Shift а мꙑ́шиѭ жьми́ Reload и́ли жьми́ Ctrl-Shift-R (Cmd-Shift-R вън Apple Mac) ⁙ Konqueror ли жьми́ кро́мѣ Reload и́ли F5 ⁙ О́пєрꙑ по́льꙃєватєльмъ мо́жєть бꙑ́ти ноужда́ пльнѣ пони́чьжити и́хъ съмотри́ла съхра́нъ въ Tools > Preferences ⁙ IE ли жьмꙑ́и Ctrl а мꙑ́шиѭ жьми́ Refresh и́ли жьми́ Ctrl-F5', -'note' => "'''НАРОЧИ́ТО:'''", -'editing' => 'исправлѥ́ниѥ: $1', -'editingsection' => 'исправлѥ́ниѥ ⁖ $1 ⁖ (чѧ́сть)', -'templatesused' => 'сѥѩ страни́цѧ {{PLURAL:$1|сь обраꙁь́ць по́льꙃоуѥтъ сѧ ѥ́стъ|с҄и обраꙁьца́ по́льꙃоуѭтъ сѧ ѥстє́|с҄и обраꙁьци́ по́льꙃоуѭтъ сѧ сѫ́тъ}} :', -'template-protected' => '(ꙁабранєно ѥ́стъ)', +'summary' => 'опьсаниѥ :', +'minoredit' => 'малаꙗ мѣна', +'watchthis' => 'си страницѧ блюдєниѥ', +'savearticle' => 'съхранѥниѥ', +'showpreview' => 'мѣнꙑ поꙁьрѣниѥ (бєꙁ съхранѥниꙗ)', +'blockedtitle' => 'польꙃєватєл҄ь ꙁаграждєнъ ѥстъ', +'loginreqlink' => 'въниди', +'newarticle' => '(новъ)', +'noarticletext' => 'нꙑнѣ с̑ьдє ничєсожє нє напьсано ѥстъ ⁙ +[[Special:Search/{{PAGENAME}}|си страницѧ имѧ искати]] дроугꙑ страницѧ · +[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} съвѧꙁанꙑ їсторїѩ видѣти] · +или [{{fullurl:{{FULLPAGENAME}}|action=edit}} ѭжє исправити] можєши', +'noarticletext-nopermission' => 'нꙑнѣ с̑ьдє ничєсожє нє напьсано ѥстъ ⁙ +[[Special:Search/{{PAGENAME}}|си страницѧ имѧ искати]] дроугꙑ страницѧ или +[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} съвѧꙁанꙑ їсторїѩ видѣти] можєши', +'clearyourcache' => 'НАРОЧИТО: По съхранѥнии можєши обити своѥго съмотрила съхранъ да видѣлъ би мѣнꙑ ⁙ Mozilla ли Firefox ли Safari ли жьмꙑи Shift а мꙑшиѭ жьми Reload или жьми Ctrl-Shift-R (Cmd-Shift-R вън Apple Mac) ⁙ Konqueror ли жьми кромѣ Reload или F5 ⁙ Опєрꙑ польꙃєватєльмъ можєть бꙑти ноужда пльнѣ поничьжити ихъ съмотрила съхранъ въ Tools > Preferences ⁙ IE ли жьмꙑи Ctrl а мꙑшиѭ жьми Refresh или жьми Ctrl-F5', +'note' => "'''НАРОЧИТО:'''", +'editing' => 'исправлѥниѥ: $1', +'editingsection' => 'исправлѥниѥ ⁖ $1 ⁖ (чѧсть)', +'editingcomment' => 'исправлѥниѥ ⁖ $1 ⁖ (нова чѧсть)', +'templatesused' => 'сѥѩ страницѧ {{PLURAL:$1|сь обраꙁьць польꙃоуѥтъ сѧ ѥстъ|с҄и обраꙁьца польꙃоуѭтъ сѧ ѥстє|с҄и обраꙁьци польꙃоуѭтъ сѧ сѫтъ}} :', +'template-protected' => '(ꙁабранєно ѥстъ)', # History pages -'viewpagelogs' => 'си страни́цѧ їсторі́ѩ', +'viewpagelogs' => 'си страницѧ їсторїѩ', 'cur' => 'нꙑ҃н', 'last' => 'пс҃лд', -'page_first' => 'прь́ва страни́ца', -'page_last' => 'послѣ́дьнꙗ страни́ца', -'histlast' => 'послѣ́дьнꙗ', -'historyempty' => '(поу́сто)', +'page_first' => 'прьва страница', +'page_last' => 'послѣдьнꙗ страница', +'histfirst' => 'прьвꙑ', +'histlast' => 'послѣдьнꙗ', +'historysize' => '{{PLURAL:$1|1 баитъ|$1 баита|$1 баитъ}}', +'historyempty' => '(поусто)', # Revision feed -'history-feed-title' => 'мѣ́нъ їсторі́ꙗ', +'history-feed-title' => 'мѣнъ їсторїꙗ', 'history-feed-item-nocomment' => '$1 при $2', # Revision deletion -'rev-delundel' => 'каꙁаниѥ / съкрꙑ́тиѥ', -'rev-showdeleted' => 'ви́ждь', +'rev-delundel' => 'каꙁаниѥ / съкрꙑтиѥ', +'rev-showdeleted' => 'виждь', 'revdelete-show-file-submit' => 'да', 'revdelete-radio-set' => 'да', -'revdelete-radio-unset' => 'нѣ́тъ', -'revdelete-uname' => 'по́льꙃєватєлꙗ и́мѧ', +'revdelete-radio-unset' => 'нѣтъ', +'revdelete-log' => 'какъ съмꙑслъ :', +'pagehist' => 'страницѧ їсторїꙗ', +'deletedhist' => 'поничьжєна їсторїꙗ', +'revdelete-summary' => 'мѣнꙑ опьсаниѥ', +'revdelete-uname' => 'польꙃєватєлꙗ имѧ', +'revdelete-otherreason' => 'инъ или допльнитєл҄ьнъ съмꙑслъ :', +'revdelete-reasonotherlist' => 'инъ съмꙑслъ', + +# History merging +'mergehistory-reason' => 'какъ съмꙑслъ :', # Search results -'searchresults' => 'иска́ниꙗ слѣдьствиѥ', -'searchresults-title' => 'иска́ниꙗ ⁖ $1 ⁖ слѣдьствиѥ', +'searchresults' => 'исканиꙗ слѣдьствиѥ', +'searchresults-title' => 'исканиꙗ ⁖ $1 ⁖ слѣдьствиѥ', 'viewprevnext' => 'виждь ($1 {{int:pipe-separator}} $2) ($3)', -'searchmenu-new' => "'''страни́цѫ ⁖ [[:$1]] ⁖ сътвори́ти мо́жєши'''", -'searchhelp-url' => 'Help:Ката́логъ', -'searchprofile-articles' => 'члѣ́ни', -'searchprofile-images' => 'дѣла́', -'searchprofile-everything' => 'вьсѩ́ страни́цѧ', +'searchmenu-new' => "'''страницѫ ⁖ [[:$1]] ⁖ сътворити можєши'''", +'searchhelp-url' => 'Help:Каталогъ', +'searchprofile-articles' => 'члѣни', +'searchprofile-project' => 'опꙑтьствовании и помощи страницѧ', +'searchprofile-images' => 'дѣла', +'searchprofile-everything' => 'вьсѩ страницѧ', 'searchprofile-articles-tooltip' => 'ищи въ $1', -'search-result-size' => '$1 ({{PLURAL:$2|$2 сло́во|$2 сло́ва|$2 словє́съ}})', -'search-redirect' => '(прѣнаправлє́ниѥ $1)', -'search-section' => '(чѧ́сть $1)', -'search-interwiki-caption' => 'ро́дьствьна опꙑтьствова́ниꙗ', -'search-interwiki-more' => '(вѧ́щє)', -'searchall' => 'вьсꙗ́', -'powersearch' => 'ищи́', +'search-result-size' => '$1 ({{PLURAL:$2|$2 слово|$2 слова|$2 словєсъ}})', +'search-redirect' => '(прѣнаправлєниѥ $1)', +'search-section' => '(чѧсть $1)', +'search-interwiki-caption' => 'родьствьна опꙑтьствованиꙗ', +'search-interwiki-more' => '(вѧщє)', +'searchall' => 'вьсꙗ', +'powersearch' => 'ищи', +'powersearch-redir' => 'прѣнаправлѥниꙗ', # Preferences page -'preferences' => 'строи', -'mypreferences' => 'мои строи', -'changepassword' => 'таина словєсє иꙁмѣнѥ́ниѥ', -'prefs-rc' => 'послѣ́дьнѩ мѣ́нꙑ', -'prefs-watchlist' => 'блюдє́ниꙗ', -'prefs-resetpass' => 'таина словєсє иꙁмѣнѥ́ниѥ', -'searchresultshead' => 'иска́ниѥ', -'prefs-searchoptions' => 'иска́ниꙗ строи́', -'prefs-files' => 'дѣла́', -'username' => 'по́льꙃєватєлꙗ и́мѧ :', -'uid' => 'по́льꙃєватєлꙗ число́ :', -'yourrealname' => 'и́стиньно и́мѧ :', -'yourlanguage' => 'ѩꙁꙑ́къ :', -'yournick' => 'аѵто́графъ :', -'gender-male' => 'мѫжъ', -'gender-female' => 'жєна', +'preferences' => 'строи', +'mypreferences' => 'мои строи', +'changepassword' => 'таина словєсє иꙁмѣнѥниѥ', +'prefs-rc' => 'послѣдьнѩ мѣнꙑ', +'prefs-watchlist' => 'блюдєниꙗ', +'prefs-resetpass' => 'таина словєсє иꙁмѣнѥниѥ', +'saveprefs' => 'съхранѥниѥ', +'prefs-editing' => 'исправлѥниѥ', +'rows' => 'рѧдꙑ :', +'searchresultshead' => 'исканиѥ', +'timezoneregion-africa' => 'Афрїка', +'timezoneregion-america' => 'Амєрїка', +'timezoneregion-antarctica' => 'Антарктїка', +'timezoneregion-arctic' => 'Арктїка', +'timezoneregion-asia' => 'Асїꙗ', +'timezoneregion-atlantic' => 'Атлантїчьскъ ѡкєанъ', +'timezoneregion-australia' => 'Аѵстралїꙗ', +'timezoneregion-europe' => 'Єѵрѡпа', +'timezoneregion-indian' => 'Їндїискъ ѡкєанъ', +'timezoneregion-pacific' => 'Тихꙑи ѡкєанъ', +'prefs-searchoptions' => 'исканиꙗ строи', +'prefs-namespaces' => 'имєнъ просторꙑ', +'prefs-files' => 'дѣла', +'username' => 'польꙃєватєлꙗ имѧ :', +'uid' => 'польꙃєватєлꙗ число :', +'yourrealname' => 'истиньно имѧ :', +'yourlanguage' => 'ѩꙁꙑкъ :', +'yournick' => 'аѵтографъ :', +'yourgender' => 'полъ :', +'gender-male' => 'мѫжъ', +'gender-female' => 'жєна', +'prefs-signature' => 'аѵтографъ', + +# User rights +'userrights-reason' => 'какъ съмꙑслъ :', # Groups -'group-user' => 'по́льꙃєватєлє', -'group-bot' => 'аѵтома́ти', -'group-sysop' => 'съмотри́тєлє', -'group-bureaucrat' => 'чинода́тєлє', - -'group-user-member' => 'по́льꙃєватєл҄ь', -'group-bot-member' => 'аѵтома́тъ', -'group-sysop-member' => 'съмотри́тєл҄ь', -'group-bureaucrat-member' => 'чинода́тєл҄ь', - -'grouppage-user' => '{{ns:project}}:По́льꙃєватєлє', -'grouppage-bot' => '{{ns:project}}:Аѵтома́ти', -'grouppage-sysop' => '{{ns:project}}:Съмотри́тєлє', -'grouppage-bureaucrat' => '{{ns:project}}:Чинода́тєлє', +'group' => 'чинъ :', +'group-user' => 'польꙃєватєлє', +'group-bot' => 'аѵтомати', +'group-sysop' => 'съмотритєлє', +'group-bureaucrat' => 'чинодатєлє', + +'group-user-member' => 'польꙃєватєл҄ь', +'group-bot-member' => 'аѵтоматъ', +'group-sysop-member' => 'съмотритєл҄ь', +'group-bureaucrat-member' => 'чинодатєл҄ь', + +'grouppage-user' => '{{ns:project}}:Польꙃєватєлє', +'grouppage-bot' => '{{ns:project}}:Аѵтомати', +'grouppage-sysop' => '{{ns:project}}:Съмотритєлє', +'grouppage-bureaucrat' => '{{ns:project}}:Чинодатєлє', # User rights log -'rightslog' => 'чинода́тєльства їсторі́ꙗ', +'rightslog' => 'чинодатєльства їсторїꙗ', # Associated actions - in the sentence "You do not have permission to X" -'action-edit' => 'си страни́цѧ исправлє́ниѥ', +'action-edit' => 'си страницѧ исправлєниѥ', # Recent changes -'nchanges' => '$1 {{PLURAL:$1|мѣ́на|мѣ́нꙑ|мѣ́нъ}}', -'recentchanges' => 'послѣ́дьнѩ мѣ́нꙑ', +'nchanges' => '$1 {{PLURAL:$1|мѣна|мѣнꙑ|мѣнъ}}', +'recentchanges' => 'послѣдьнѩ мѣнꙑ', 'recentchanges-legend' => 'послѣдьн҄ь мѣнъ строи', 'recentchangestext' => 'с҄ьдє послѣдьнѩ мѣнꙑ сѥѩ викиопꙑтьствованиꙗ видѣти можєши', 'recentchanges-label-newpage' => 'по сѥи мѣнꙑ нова страница сътворѥна ѥстъ', -'recentchanges-label-minor' => 'ма́лаꙗ мѣ́на', +'recentchanges-label-minor' => 'малаꙗ мѣна', 'recentchanges-label-bot' => 'сѭ мѣноу аѵтоматъ сътворихъ', -'rcnote' => "нижѣ {{PLURAL:$1|'''1''' послѣ́дьнѭ мѣ́нѫ|'''$1''' послѣ́дьни мѣ́нꙑ|'''$1''' послѣ́дьнъ мѣ́нъ|'''$1''' послѣ́дьнъ мѣ́нъ}} ꙁа {{PLURAL:$2|дьнь|'''$2''' дьнꙗ|'''$2''' дьнъ|'''$2''' дьнъ}} · ꙗко нꙑнѣ $5 · $4 лѣ́та", -'rcshowhideminor' => '$1 ма́лꙑ мѣ́нꙑ', -'rcshowhidebots' => '$1 аѵтома́тъ', -'rcshowhideliu' => '$1 по́льꙃєватєлъ · ѩжє съꙁижьдє сѥ мѣ́сто · мѣ́нꙑ', -'rcshowhideanons' => '$1 анѡнѷмьнъ по́льꙃєватєлъ мѣ́нꙑ', -'rcshowhidemine' => '$1 моꙗ́ мѣ́нꙑ', +'rcnote' => "нижѣ {{PLURAL:$1|'''1''' послѣдьнѭ мѣнѫ|'''$1''' послѣдьни мѣнꙑ|'''$1''' послѣдьнъ мѣнъ|'''$1''' послѣдьнъ мѣнъ}} ꙁа {{PLURAL:$2|дьнь|'''$2''' дьнꙗ|'''$2''' дьнъ|'''$2''' дьнъ}} · ꙗко нꙑнѣ $5 · $4 лѣта", +'rcshowhideminor' => '$1 малꙑ мѣнꙑ', +'rcshowhidebots' => '$1 аѵтоматъ', +'rcshowhideliu' => '$1 польꙃєватєлъ · ѩжє съꙁижьдє сѥ мѣсто · мѣнꙑ', +'rcshowhideanons' => '$1 анѡнѷмьнъ польꙃєватєлъ мѣнꙑ', +'rcshowhidemine' => '$1 моꙗ мѣнꙑ', 'rclinks' => '$1 послѣдьн҄ь мѣнъ · ѩжє $2 послѣдьни дьни створѥнꙑ сѫтъ · каꙁаниѥ
    $3', 'diff' => 'ра҃ꙁн', 'hist' => 'їс҃т', 'hide' => 'съкрꙑи', -'show' => 'ви́ждь', +'show' => 'виждь', 'minoreditletter' => 'м҃л', 'newpageletter' => 'н҃в', 'boteditletter' => 'а҃ѵ', # Recent changes linked -'recentchangeslinked' => 'съвѧ́ꙁанꙑ страни́цѧ', -'recentchangeslinked-feed' => 'съвѧ́ꙁанꙑ страни́цѧ', -'recentchangeslinked-toolbox' => 'съвѧ́ꙁанꙑ страни́цѧ', -'recentchangeslinked-page' => 'страни́цѧ и́мѧ :', +'recentchangeslinked' => 'съвѧꙁанꙑ страницѧ', +'recentchangeslinked-feed' => 'съвѧꙁанꙑ страницѧ', +'recentchangeslinked-toolbox' => 'съвѧꙁанꙑ страницѧ', +'recentchangeslinked-page' => 'страницѧ имѧ :', # Upload -'upload' => 'положє́ниѥ дѣ́ла', -'uploadbtn' => 'положє́ниѥ дѣ́ла', -'uploadlog' => 'дѣ́лъ положє́ниꙗ їсторі́ꙗ', -'uploadlogpage' => 'дѣ́лъ положє́ниꙗ їсторі́ꙗ', -'filename' => 'дѣ́ла и́мѧ', -'filedesc' => 'опьса́ниѥ', -'fileuploadsummary' => 'опьса́ниѥ:', -'successfulupload' => 'дѣ́ло положєно ѥ́стъ', -'uploadedimage' => '⁖ [[$1]] ⁖ положє́нъ ѥ́стъ', -'watchthisupload' => 'си дѣ́ла блюдє́ниѥ', +'upload' => 'положєниѥ дѣла', +'uploadbtn' => 'положєниѥ дѣла', +'uploadlog' => 'дѣлъ положєниꙗ їсторїꙗ', +'uploadlogpage' => 'дѣлъ положєниꙗ їсторїꙗ', +'filename' => 'дѣла имѧ', +'filedesc' => 'опьсаниѥ', +'fileuploadsummary' => 'опьсаниѥ:', +'uploadedimage' => '⁖ [[$1]] ⁖ положєнъ ѥстъ', +'watchthisupload' => 'си дѣла блюдєниѥ', +'upload-success-subj' => 'дѣло положєно ѥстъ', 'license' => 'прощєниѥ :', 'license-header' => 'прощєниѥ', # Special:ListFiles -'imgfile' => 'дѣ́ло', -'listfiles' => 'дѣ́лъ ката́логъ', +'imgfile' => 'дѣло', +'listfiles' => 'дѣлъ каталогъ', 'listfiles_name' => 'и́мѧ', -'listfiles_user' => 'по́льꙃєватєл҄ь', -'listfiles_size' => 'мѣ́ра', +'listfiles_user' => 'польꙃєватєл҄ь', +'listfiles_size' => 'мѣра', # File description page -'file-anchor-link' => 'ви́дъ', -'filehist' => 'дѣ́ла їсторі́ꙗ', -'filehist-deleteone' => 'поничьжє́ниѥ', -'filehist-current' => 'нꙑнѣщьн҄ь о́браꙁъ', -'filehist-datetime' => 'дьнь / врѣ́мѧ', -'filehist-user' => 'по́льꙃєватєл҄ь', -'imagelinks' => 'дѣ́ла съвѧ́ꙁи', -'sharedupload' => 'сѥ дѣ́ло въ $1 съхранѥ́но ѥ́стъ дѣ́ла · ѥгожє дроугꙑ́ опꙑтьствова́ниѩ по́льꙃєвати мо́гѫтъ', +'file-anchor-link' => 'дѣло', +'filehist' => 'дѣла їсторїꙗ', +'filehist-deleteone' => 'поничьжєниѥ', +'filehist-current' => 'нꙑнѣщьн҄ь обраꙁъ', +'filehist-datetime' => 'дьнь / врѣмѧ', +'filehist-user' => 'польꙃєватєл҄ь', +'filehist-filesize' => 'дѣла мѣра', +'filehist-comment' => 'опьсаниѥ', +'imagelinks' => 'дѣла съвѧꙁи', +'sharedupload' => 'сѥ дѣло въ $1 съхранѥно ѥстъ дѣла · ѥгожє дроугꙑ опꙑтьствованиѩ польꙃєвати могѫтъ', + +# File reversion +'filerevert-comment' => 'какъ съмꙑслъ :', # File deletion -'filedelete-submit' => 'поничьжє́ниѥ', +'filedelete' => 'поничьжєниѥ $1', +'filedelete-legend' => 'дѣла поничьжєниѥ', +'filedelete-comment' => 'какъ съмꙑслъ :', +'filedelete-submit' => 'поничьжєниѥ', # MIME search -'mimetype' => 'MIME тѵ́пъ :', -'download' => 'поѩ́ти', +'mimetype' => 'MIME тѷпъ :', +'download' => 'поѩти', # List redirects -'listredirects' => 'прѣнаправлѥ́ниꙗ', +'listredirects' => 'прѣнаправлѥниꙗ', # Random page -'randompage' => 'страни́ца въ нєꙁаа́пѫ', +'randompage' => 'страница въ нєꙁаапѫ', # Random redirect -'randomredirect' => 'прѣнаправлѥ́ниє въ нєꙁаа́пѫ', +'randomredirect' => 'прѣнаправлѥниє въ нєꙁаапѫ', # Statistics -'statistics' => 'Статїстїка', -'statistics-header-pages' => 'страни́цѧ статїстїка', -'statistics-header-edits' => 'мѣ́нъ статїстїка', -'statistics-header-users' => 'по́льꙃєватєлъ статїстїка', -'statistics-articles' => 'истиньнꙑ члѣ́ни', -'statistics-pages' => 'страни́цѧ', -'statistics-files' => 'положєнꙑ дѣла́', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Дѣ́иствъ чрѣ́дꙑ] дльгота', +'statistics' => 'статїстїка', +'statistics-header-pages' => 'страницѧ статїстїка', +'statistics-header-edits' => 'мѣнъ статїстїка', +'statistics-header-users' => 'польꙃєватєлъ статїстїка', +'statistics-articles' => 'истиньнꙑ члѣни', +'statistics-pages' => 'страницѧ', +'statistics-files' => 'положєнꙑ дѣла', -'disambiguations' => 'мъногосъмꙑ́слиꙗ', -'disambiguationspage' => 'Template:мъногосъмꙑ́слиѥ', +'disambiguations' => 'мъногосъмꙑслиꙗ', +'disambiguationspage' => 'Template:мъногосъмꙑслиѥ', -'brokenredirects-edit' => 'испра́ви', -'brokenredirects-delete' => 'поничьжє́ниѥ', +'brokenredirects-edit' => 'исправи', +'brokenredirects-delete' => 'поничьжєниѥ', # Miscellaneous special pages -'nbytes' => '$1 {{PLURAL:$1|ба́итъ|ба́ита|ба́итъ}}', -'nlinks' => '$1 {{PLURAL:$1|съвѧ́ꙁь|съвѧ́ꙁѧ|съвѧ́ꙁи}}', -'shortpages' => 'кратъкꙑ страни́цѧ', -'listusers' => 'по́льꙃєватєлъ ката́логъ', -'newpages' => 'но́ви члѣ́ни', -'newpages-username' => 'по́льꙃєватєлꙗ и́мѧ :', -'move' => 'прѣимєнова́ниѥ', -'movethispage' => 'си страни́цѧ прѣимєнова́ниѥ', +'nbytes' => '$1 {{PLURAL:$1|баитъ|баита|баитъ}}', +'nlinks' => '$1 {{PLURAL:$1|съвѧꙁь|съвѧꙁи|съвѧꙁии}}', +'shortpages' => 'кратъкꙑ страницѧ', +'listusers' => 'польꙃєватєлъ каталогъ', +'newpages' => 'нови члѣни', +'newpages-username' => 'польꙃєватєлꙗ имѧ :', +'move' => 'прѣимєнованиѥ', +'movethispage' => 'си страницѧ прѣимєнованиѥ', # Book sources -'booksources-go' => 'прѣиди́', +'booksources-go' => 'прѣиди', # Special:Log -'specialloguserlabel' => 'по́льꙃєватєл҄ь:', -'speciallogtitlelabel' => 'страни́цѧ и́мѧ :', -'log' => 'їсторі́ѩ', -'all-logs-page' => 'вьсѩ́ їсторі́ѩ', +'specialloguserlabel' => 'польꙃєватєл҄ь:', +'speciallogtitlelabel' => 'страницѧ имѧ :', +'log' => 'їсторїѩ', +'all-logs-page' => 'вьсѩ обьщѧ їсторїѩ', # Special:AllPages -'allpages' => 'вьсѩ́ страни́цѧ', -'alphaindexline' => 'о́тъ $1 до $2', -'allpagesfrom' => 'страни́цѧ видѣ́ти хощѫ́ съ начѧ́льнами боу́къвами :', -'allarticles' => 'вьсѩ́ страни́цѧ', -'allpagessubmit' => 'прѣиди́', +'allpages' => 'вьсѩ страницѧ', +'alphaindexline' => 'отъ $1 до $2', +'allpagesfrom' => 'страницѧ видѣти хощѫ съ начѧльнами боукъвами :', +'allarticles' => 'вьсѩ страницѧ', +'allpagessubmit' => 'прѣиди', # Special:Categories -'categories' => 'катигорі́ѩ', +'categories' => 'катигорїѩ', # Special:DeletedContributions -'deletedcontributions' => 'пони́чьжєнꙑ добродѣꙗ́ниꙗ', -'deletedcontributions-title' => 'пони́чьжєнꙑ добродѣꙗ́ниꙗ', +'deletedcontributions' => 'поничьжєнꙑ добродѣꙗниꙗ', +'deletedcontributions-title' => 'поничьжєнꙑ добродѣꙗниꙗ', # Special:LinkSearch -'linksearch' => 'вънѣщьнѩ съвѧ́ꙁи', -'linksearch-ok' => 'ищи́', +'linksearch' => 'вънѣщьнѩ съвѧꙁи', +'linksearch-ok' => 'ищи', # Special:ListUsers -'listusers-submit' => 'ви́ждь', +'listusers-submit' => 'виждь', # Special:Log/newusers -'newuserlogpage' => 'но́въ мѣ́стъ сътворѥ́ниꙗ їсторі́ꙗ', -'newuserlog-create-entry' => 'но́въ по́льꙃєватєл҄ь', -'newuserlog-autocreate-entry' => 'по́льꙃєватєлꙗ мѣ́сто аѵтомати́чьно сътворєно́ ѥ́стъ', +'newuserlogpage' => 'новъ мѣстъ сътворѥниꙗ їсторїꙗ', +'newuserlog-create-entry' => 'новъ польꙃєватєл҄ь', +'newuserlog-autocreate-entry' => 'польꙃєватєлꙗ мѣсто аѵтоматичьно сътворєно ѥстъ', # E-mail user 'emailuser' => 'посъли єпїстолѫ', # Watchlist -'watchlist' => 'моꙗ́ блюдє́ниꙗ', -'mywatchlist' => 'моꙗ́ блюдє́ниꙗ', -'watchlistfor' => "(по́льꙃєватєлꙗ и́мѧ '''$1''' ѥ́стъ)", -'addedwatch' => 'страни́ца нꙑнѣ по́дъ твоимь блюдє́ниѥмь ѥ́стъ', -'addedwatchtext' => "страни́ца ⁖ [[:$1]] ⁖ нꙑнѣ по́дъ твоимь [[Special:Watchlist|блюдє́ниѥмь]] ѥ́стъ ⁙ -всꙗ ѥѩ и ѥѩжє бєсѣдꙑ мѣ́нꙑ страни́цѧ ⁖ [[Special:Watchlist|моꙗ́ блюдє́ниꙗ]] ⁖ покаꙁанꙑ сѫ́тъ и [[Special:RecentChanges|послѣ́дьнъ мѣ́нъ]] ката́лоꙃѣ '''чрьнꙑимъ''' сѧ авлꙗѭтъ", -'removedwatchtext' => 'страни́ца ⁖ [[:$1]] ⁖ нꙑнѣ твоѥго [[Special:Watchlist|блюдє́ниꙗ]] иꙁнєсєна ѥ́стъ', -'watch' => 'блюдє́ниѥ', -'watchthispage' => 'си страни́цѧ блюдє́ниѥ', -'unwatch' => 'оста́ви блюдє́ниѥ', +'watchlist' => 'моꙗ блюдєниꙗ', +'mywatchlist' => 'моꙗ блюдєниꙗ', +'addedwatch' => 'страница нꙑнѣ подъ твоимь блюдєниѥмь ѥстъ', +'addedwatchtext' => "страница ⁖ [[:$1]] ⁖ нꙑнѣ подъ твоимь [[Special:Watchlist|блюдєниѥмь]] ѥстъ ⁙ +всꙗ ѥѩ и ѥѩжє бєсѣдꙑ мѣнꙑ страницѧ ⁖ [[Special:Watchlist|моꙗ блюдєниꙗ]] ⁖ покаꙁанꙑ сѫтъ и [[Special:RecentChanges|послѣдьнъ мѣнъ]] каталоꙃѣ '''чрьнꙑимъ''' сѧ авлꙗѭтъ", +'removedwatchtext' => 'страница ⁖ [[:$1]] ⁖ нꙑнѣ твоѥго [[Special:Watchlist|блюдєниꙗ]] иꙁнєсєна ѥстъ', +'watch' => 'блюдєниѥ', +'watchthispage' => 'си страницѧ блюдєниѥ', +'unwatch' => 'остави блюдєниѥ', # Displayed when you click the "watch" button and it is in the process of watching -'watching' => 'блюдє́ниѥ ...', -'unwatching' => 'оставьлє́ниѥ блюдє́ниꙗ ...', +'watching' => 'блюдєниѥ ...', +'unwatching' => 'оставьлєниѥ блюдєниꙗ ...', -'created' => 'сътворѥ́нъ ѥ́стъ', +'created' => 'сътворѥнъ ѥстъ', # Delete -'deletepage' => 'поничьжє́ниѥ', +'deletepage' => 'поничьжєниѥ', 'excontent' => "вънѫтри бѣ: '$1'", -'excontentauthor' => "вънѫтри́ бѣ : '$1' (и послѣ́дьн҄ии дѣ́тєл҄ь бѣ '[[Special:Contributions/$2|$2]]')", -'delete-legend' => 'поничьжє́ниѥ', -'actioncomplete' => 'дѣ́иство сътворєно́ ѥ́стъ', -'deletedtext' => 'страни́ца ⁖ $1 ⁖ поничьжєна ѥ́стъ ⁙ -виждь ⁖ $2 ⁖ послѣ́дьнъ поничьжє́ниѩ дѣлꙗ́', -'deletedarticle' => '⁖ [[$1]] ⁖ поничьжє́нъ ѥ́стъ', -'dellogpage' => 'поничьжє́ниꙗ їсторі́ꙗ', -'deletionlog' => 'поничьжє́ниꙗ їсторі́ꙗ', +'excontentauthor' => "вънѫтри бѣ : '$1' (и послѣдьн҄ии дѣтєл҄ь бѣ '[[Special:Contributions/$2|$2]]')", +'delete-legend' => 'поничьжєниѥ', +'actioncomplete' => 'дѣиство сътворєно ѥстъ', +'deletedtext' => 'страница ⁖ $1 ⁖ поничьжєна ѥстъ ⁙ +виждь ⁖ $2 ⁖ послѣдьнъ поничьжєниѩ дѣлꙗ', +'deletedarticle' => '⁖ [[$1]] ⁖ поничьжєнъ ѥстъ', +'dellogpage' => 'поничьжєниꙗ їсторїꙗ', +'deletionlog' => 'поничьжєниꙗ їсторїꙗ', +'deletecomment' => 'какъ съмꙑслъ :', # Protect -'protectlogpage' => 'ꙁабранѥ́ниꙗ їсторі́ꙗ', -'protectedarticle' => '⁖ [[$1]] ⁖ ꙁабранѥна ѥ́стъ', -'prot_1movedto2' => '⁖ [[$1]] ⁖ нарєчє́нъ ⁖ [[$2]] ⁖ ѥ́стъ', -'protect-level-sysop' => 'то́лико съмотри́тєлє', +'protectlogpage' => 'ꙁабранѥниꙗ їсторїꙗ', +'protectedarticle' => '⁖ [[$1]] ⁖ ꙁабранѥна ѥстъ', +'prot_1movedto2' => '⁖ [[$1]] ⁖ нарєчєнъ ⁖ [[$2]] ⁖ ѥстъ', +'protectcomment' => 'какъ съмꙑслъ :', +'protect-level-sysop' => 'толико съмотритєлє', # Restrictions (nouns) -'restriction-edit' => 'испра́ви', -'restriction-move' => 'прѣимєнова́ниѥ', -'restriction-upload' => 'положє́ниѥ', +'restriction-edit' => 'исправи', +'restriction-move' => 'прѣимєнованиѥ', +'restriction-upload' => 'положєниѥ', # Undelete -'undelete-search-submit' => 'ищи́', +'undeletecomment' => 'какъ съмꙑслъ :', +'undelete-search-submit' => 'ищи', # Namespace form on various pages -'namespace' => 'имє́нъ просто́ръ:', -'blanknamespace' => '(гла́вьно)', +'namespace' => 'имєнъ просторъ:', +'blanknamespace' => '(главьно)', # Contributions -'contributions' => 'по́льꙃєватєлꙗ добродѣꙗ́ниꙗ', -'contributions-title' => 'по́льꙃєватєлꙗ ⁖ $1 ⁖ добродѣꙗ́ниꙗ', -'mycontris' => 'моꙗ́ добродѣꙗ́ниꙗ', -'contribsub2' => 'по́льꙃєватєлꙗ и́мѧ ⁖ $1 ⁖ ѥ́стъ ($2)', -'uctop' => '(послѣ́дьнꙗ мѣ́на)', - -'sp-contributions-blocklog' => 'ꙁаграждє́ниꙗ їсторі́ꙗ', -'sp-contributions-deleted' => 'пони́чьжєнꙑ добродѣꙗ́ниꙗ', -'sp-contributions-talk' => 'бєсѣ́да', -'sp-contributions-username' => 'IP число или по́льꙃєватєлꙗ и́мѧ :', -'sp-contributions-submit' => 'ищи́', +'contributions' => 'польꙃєватєлꙗ добродѣꙗниꙗ', +'contributions-title' => 'польꙃєватєлꙗ ⁖ $1 ⁖ добродѣꙗниꙗ', +'mycontris' => 'моꙗ добродѣꙗниꙗ', +'contribsub2' => 'польꙃєватєлꙗ имѧ ⁖ $1 ⁖ ѥстъ ($2)', +'uctop' => '(послѣдьнꙗ мѣна)', + +'sp-contributions-blocklog' => 'ꙁаграждєниꙗ їсторїꙗ', +'sp-contributions-deleted' => 'поничьжєнꙑ добродѣꙗниꙗ', +'sp-contributions-talk' => 'бєсѣда', +'sp-contributions-username' => 'IP число или польꙃєватєлꙗ имѧ :', +'sp-contributions-submit' => 'ищи', # What links here -'whatlinkshere' => 'дос̑ьдє́щьнѩ съвѧ́ꙁи', -'whatlinkshere-title' => 'страни́цѧ ижє съ ⁖ $1 ⁖ съвѧ́ꙁи имѫтъ', -'whatlinkshere-page' => 'страни́ца :', -'isredirect' => 'прѣнаправлѥ́ниѥ', -'whatlinkshere-links' => '← съвѧ́ꙁи', -'whatlinkshere-hideredirs' => '$1 прѣнаправлѥ́ниꙗ', -'whatlinkshere-hidelinks' => '$1 съвѧ́ꙁи', +'whatlinkshere' => 'дос̑ьдєщьнѩ съвѧꙁи', +'whatlinkshere-title' => 'страницѧ ижє съ ⁖ $1 ⁖ съвѧꙁи имѫтъ', +'whatlinkshere-page' => 'страница :', +'isredirect' => 'прѣнаправлѥниѥ', +'istemplate' => 'внѫтри страницѧ', +'whatlinkshere-links' => '← съвѧꙁи', +'whatlinkshere-hideredirs' => '$1 прѣнаправлѥниꙗ', +'whatlinkshere-hidelinks' => '$1 съвѧꙁи', # Block/unblock -'blockip' => 'ꙁагради́ по́льꙃєватєл҄ь', -'ipadressorusername' => 'IP число или по́льꙃєватєлꙗ и́мѧ :', -'ipblocklist-submit' => 'иска́ниѥ', -'blocklink' => 'ꙁагради́', -'contribslink' => 'добродѣꙗ́ниꙗ', -'blocklogpage' => 'ꙁаграждє́ниꙗ їсторі́ꙗ', +'blockip' => 'ꙁагради польꙃєватєл҄ь', +'ipadressorusername' => 'IP число или польꙃєватєлꙗ имѧ :', +'ipbreason' => 'какъ съмꙑслъ :', +'ipblocklist' => 'ꙁаграждєнꙑ польꙃєватєлє', +'ipblocklist-submit' => 'исканиѥ', +'blocklink' => 'ꙁагради', +'contribslink' => 'добродѣꙗниꙗ', +'blocklogpage' => 'ꙁаграждєниꙗ їсторїꙗ', # Move page -'move-page' => 'прѣимєнова́ниѥ ⁖ $1 ⁖', -'move-page-legend' => 'страни́цѧ прѣимєнова́ниѥ', -'movearticle' => 'страни́ца :', -'newtitle' => 'но́во и́мѧ :', -'move-watch' => 'си страни́цѧ блюдє́ниѥ', -'movepagebtn' => 'прѣимєнова́ниѥ', -'pagemovedsub' => 'прѣимєнова́ниѥ сътворѥно́ ѥ́стъ', -'movepage-moved' => "'''⁖ $1 ⁖ нарєчє́нъ ⁖ $2⁖ ѥ́стъ'''", -'movepage-moved-redirect' => 'прѣнаправлѥ́ниѥ сътворѥно́ бѣ', +'move-page' => 'прѣимєнованиѥ ⁖ $1 ⁖', +'move-page-legend' => 'страницѧ прѣимєнованиѥ', +'movearticle' => 'страница :', +'newtitle' => 'ново имѧ :', +'move-watch' => 'си страницѧ блюдєниѥ', +'movepagebtn' => 'прѣимєнованиѥ', +'pagemovedsub' => 'прѣимєнованиѥ сътворѥно ѥстъ', +'movepage-moved' => "'''⁖ $1 ⁖ нарєчєнъ ⁖ $2⁖ ѥстъ'''", +'movepage-moved-redirect' => 'прѣнаправлѥниѥ сътворѥно бѣ', 'movedto' => 'прѣимєновано въ', -'movetalk' => 'си страни́цѧ бєсѣ́дꙑ прѣимєнова́ниѥ', -'1movedto2' => '⁖ [[$1]] ⁖ нарєчє́нъ ⁖ [[$2]] ⁖ ѥ́стъ', -'1movedto2_redir' => '[[$1]] нарєчє́нъ [[$2]] врьхоу́ прѣнаправлѥ́ниꙗ ѥ́стъ.', -'movelogpage' => 'прѣимєнова́ниꙗ їсторі́ꙗ', +'movetalk' => 'си страницѧ бєсѣдꙑ прѣимєнованиѥ', +'1movedto2' => '⁖ [[$1]] ⁖ нарєчєнъ ⁖ [[$2]] ⁖ ѥстъ', +'1movedto2_redir' => '[[$1]] нарєчєнъ [[$2]] врьхоу прѣнаправлѥниꙗ ѥстъ.', +'movelogpage' => 'прѣимєнованиꙗ їсторїꙗ', +'movereason' => 'какъ съмꙑслъ :', +'move-leave-redirect' => 'прѣнаправлѥниꙗ сътворѥниѥ', # Namespace 8 related -'allmessages' => 'сѷсти́мьнꙑ напьса́ниꙗ', -'allmessagesname' => 'и́мѧ', +'allmessages' => 'сѷстимьнꙑ напьсаниꙗ', +'allmessagesname' => 'имѧ', # Tooltip help for the actions -'tooltip-pt-userpage' => 'твоꙗ́ по́льꙃєватєл҄ьска страни́ца', -'tooltip-pt-mytalk' => 'твоꙗ́ бєсѣ́дꙑ страни́ца', +'tooltip-pt-userpage' => 'твоꙗ польꙃєватєл҄ьска страница', +'tooltip-pt-mytalk' => 'твоꙗ бєсѣдꙑ страница', 'tooltip-pt-preferences' => 'твои строи', -'tooltip-pt-mycontris' => 'твоꙗ́ добродѣꙗ́ниѩ ката́логъ', -'tooltip-pt-logout' => 'ис̾хо́дъ', -'tooltip-ca-talk' => 'си страни́цѧ бєсѣ́да', -'tooltip-ca-viewsource' => 'си страни́ца ꙁабранєна́ ѥ́стъ ⁙ -ѥѩ исто́чьнъ о́браꙁъ ви́дєти мо́жєщи', -'tooltip-ca-protect' => 'си страни́цѧ ꙁабранє́ниѥ', -'tooltip-ca-delete' => 'си страни́цѧ поничьжє́ниѥ', -'tooltip-ca-move' => 'си страни́цѧ прѣимєнова́ниѥ', -'tooltip-ca-watch' => 'си страни́цѧ блюдє́ниѥ', -'tooltip-search' => 'ищи {{{grammar:genitive|{{SITENAME}}}}} страни́цѧ', -'tooltip-p-logo' => 'гла́вьна страни́ца', -'tooltip-n-mainpage' => 'ви́ждь гла́вьнѫ страни́цѫ', -'tooltip-n-mainpage-description' => 'ви́ждь гла́вьнѫ страни́цѫ', -'tooltip-n-recentchanges' => 'послѣ́дьн҄ь мѣ́нъ ката́логъ', -'tooltip-t-upload' => 'положє́ниѥ дѣ́лъ', -'tooltip-t-specialpages' => 'вьсѣѩ наро́чьнъ страни́цѧ ката́логъ', -'tooltip-t-print' => 'сѥѩ страни́цѧ пєча́тьнъ о́браꙁъ', -'tooltip-ca-nstab-special' => 'си наро́чьна страни́ца ѥ́стъ · ѥѩжє иꙁмѣнꙗ́ти нє можєши', -'tooltip-watch' => 'си страни́цѧ блюдє́ниѥ', +'tooltip-pt-mycontris' => 'твоѩ добродѣꙗнии каталогъ', +'tooltip-pt-logout' => 'ис̾ходъ', +'tooltip-ca-talk' => 'си страницѧ бєсѣда', +'tooltip-ca-viewsource' => 'си страница ꙁабранєна ѥстъ ⁙ +ѥѩ источьнъ обраꙁъ видєти можєши', +'tooltip-ca-protect' => 'си страницѧ ꙁабранєниѥ', +'tooltip-ca-delete' => 'си страницѧ поничьжєниѥ', +'tooltip-ca-move' => 'си страницѧ прѣимєнованиѥ', +'tooltip-ca-watch' => 'си страницѧ блюдєниѥ', +'tooltip-search' => 'ищи {{{grammar:genitive|{{SITENAME}}}}} страницѧ', +'tooltip-p-logo' => 'главьна страница', +'tooltip-n-mainpage' => 'виждь главьноу страницѫ', +'tooltip-n-mainpage-description' => 'виждь главьноу страницѫ', +'tooltip-n-recentchanges' => 'послѣдьн҄ь мѣнъ каталогъ', +'tooltip-t-contributions' => 'виждь польꙃєватєлꙗ добродѣꙗнии каталогъ', +'tooltip-t-upload' => 'положєниѥ дѣлъ', +'tooltip-t-specialpages' => 'вьсѣѩ нарочьнъ страницѧ каталогъ', +'tooltip-t-print' => 'сѥѩ страницѧ пєчатьнъ обраꙁъ', +'tooltip-ca-nstab-special' => 'си нарочьна страница ѥстъ · ѥѩжє иꙁмѣнꙗти нє можєши', +'tooltip-watch' => 'си страницѧ блюдєниѥ', # Media information -'file-info-size' => '($1 × $2 п҃ѯ · дѣ́ла мѣ́ра : $3 · MIME тѵ́пъ : $4)', -'svg-long-desc' => '(дѣ́ло SVG · обꙑ́чьнъ о́браꙁъ : $1 × $2 п҃ѯ · дѣ́ла мѣ́ра : $3)', -'show-big-image' => 'пль́нъ ви́да о́браꙁъ', +'file-info-size' => '$1 × $2 п҃ѯ · дѣла мѣра : $3 · MIME тѷпъ : $4', +'svg-long-desc' => 'дѣло SVG · обꙑчьнъ обраꙁъ : $1 × $2 п҃ѯ · дѣла мѣра : $3', +'show-big-image' => 'пльнъ вида обраꙁъ', # Special:NewFiles -'ilsubmit' => 'ищи́', +'ilsubmit' => 'ищи', # EXIF tags -'exif-artist' => 'творь́ць', +'exif-artist' => 'творьць', # 'all' in various places, this might be different for inflected languages -'watchlistall2' => 'вьсꙗ́', -'namespacesall' => 'вьсꙗ́', -'monthsall' => 'вьсѩ́', +'watchlistall2' => 'вьсꙗ', +'namespacesall' => 'вьсꙗ', +'monthsall' => 'вьсѩ', 'unit-pixel' => 'п҃ѯ', # Multipage image navigation -'imgmultigo' => 'прѣиди́', +'imgmultigo' => 'прѣиди', # Table pager -'table_pager_limit_submit' => 'прѣиди́', +'table_pager_limit_submit' => 'прѣиди', # Auto-summaries -'autosumm-new' => 'но́ва страни́ца сътворєна́ мѣ́роѭ $1 ѥ́стъ', +'autosumm-new' => 'нова страница ⁖ $1 ⁖ сътворєна ѥстъ', # Size units 'size-bytes' => '$1 Б҃', # Special:Version -'version' => 'MediaWiki о́браꙁъ', -'version-version' => '(о́браꙁъ $1)', -'version-license' => 'прощє́ниѥ', -'version-software-version' => 'о́браꙁъ', +'version' => 'MediaWiki обраꙁъ', +'version-version' => '(обраꙁъ $1)', +'version-license' => 'прощєниѥ', +'version-software-version' => 'обраꙁъ', # Special:FilePath -'filepath-page' => 'дѣ́ло :', +'filepath-page' => 'дѣло :', # Special:FileDuplicateSearch -'fileduplicatesearch-submit' => 'ищи́', +'fileduplicatesearch-submit' => 'ищи', # Special:SpecialPages -'specialpages' => 'наро́чьнꙑ страни́цѧ', +'specialpages' => 'нарочьнꙑ страницѧ', # Special:Tags -'tags-edit' => 'испра́ви', +'tags-edit' => 'исправи', ); diff --git a/languages/messages/MessagesCv.php b/languages/messages/MessagesCv.php index c5bcf1a4..861f9708 100644 --- a/languages/messages/MessagesCv.php +++ b/languages/messages/MessagesCv.php @@ -53,8 +53,7 @@ $messages = array( 'tog-editsection' => '«Тӳрлет» ссылкăна кашни пайра кăтартмалла', 'tog-editsectiononrightclick' => 'Шăшин сылтăм пускăчне пуссан статья пайне тӳрлетмелле (JavaScript)', 'tog-showtoc' => 'Тупмаллине кăтартмалла (3, е ытларах заголовок пулсан)', -'tog-rememberpassword' => 'Мана ку компьютер çинче астуса хăвармалла', -'tog-editwidth' => 'Тӳрлетмелли чӳречене браузерăн пĕтĕм сарлакăшĕпе кăтартмалла', +'tog-rememberpassword' => 'Мана ку компьютер çинче астуса хăвармалла (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Эпĕ тунă страницăсене сăнав списокне кĕртмелле', 'tog-watchdefault' => 'Тӳрлетнĕ страницăсене сăнав списокне кĕртмелле', 'tog-watchmoves' => 'Страница ятне эпĕ улаштарсан вĕсене сăнав списокне кĕртмелле', @@ -185,24 +184,14 @@ $messages = array( 'faqpage' => 'Project:ЫйХу', # Vector skin -'vector-action-addsection' => 'Тема хуш', -'vector-action-delete' => 'Кăларса пăрах', -'vector-action-move' => 'Ятне улăштар', -'vector-action-protect' => 'Хӳтĕле', -'vector-namespace-category' => 'Категори', -'vector-namespace-help' => 'Пулăшу страници', -'vector-namespace-image' => 'Файл', -'vector-namespace-main' => 'Страница', -'vector-namespace-mediawiki' => 'Пĕлтерӳ', -'vector-namespace-project' => 'Проект çинчен', -'vector-namespace-special' => 'Ятарлă страницă', -'vector-namespace-talk' => 'Сӳтсе яв', -'vector-namespace-template' => 'Шаблон', -'vector-namespace-user' => 'Хутшăнакан страници', -'vector-view-create' => 'Çĕннине ту', -'vector-view-edit' => 'Тӳрлет', -'vector-view-history' => 'Кун-çул', -'vector-view-view' => 'Вула', +'vector-action-addsection' => 'Тема хуш', +'vector-action-delete' => 'Кăларса пăрах', +'vector-action-move' => 'Ятне улăштар', +'vector-action-protect' => 'Хӳтĕле', +'vector-view-create' => 'Çĕннине ту', +'vector-view-edit' => 'Тӳрлет', +'vector-view-history' => 'Кун-çул', +'vector-view-view' => 'Вула', 'errorpagetitle' => 'Йăнăш', 'returnto' => '$1 страницăна таврăн.', @@ -407,7 +396,7 @@ $1', 'yourname' => 'Сирĕн ят', 'yourpassword' => 'Вăрттăн сăмах:', 'yourpasswordagain' => 'Вăрттăн сăмах тепре çырăр:', -'remembermypassword' => 'Ку компьютер çинче мана астуса хăвармалла', +'remembermypassword' => 'Ку компьютер çинче мана астуса хăвармалла (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Сирĕн домен', 'login' => 'Сайта кĕр', 'nav-login-createaccount' => 'Сайта кĕр / регистрацилен', @@ -694,30 +683,26 @@ $1 хутшăнакан патне, е ытти [[{{MediaWiki:Grouppage-sysop}}| 'rightsnone' => '(çук)', # Recent changes -'recentchanges' => 'Улшăнусем', -'recentchanges-legend' => 'Çĕнĕ улшăнусен ĕнерлевĕ', -'recentchanges-legend-newpage' => '$1 — çĕнĕ страница', -'recentchanges-legend-minor' => '$1 — пĕчĕк улшăну', -'recentchanges-legend-bot' => '$1 — бот улăштарни', -'recentchanges-label-bot' => 'Ку улшăнăва бот тунă', -'recentchanges-legend-unpatrolled' => '$1 — тĕрĕслемен улшăну', -'rcnote' => 'Юлашки $2 кун хушшинчи $1 улшăнусем. Халě пěтěмпе {{NUMBEROFARTICLES}} статья.', -'rclistfrom' => 'Юлашки улшăнусене $1 вăхăтран пуçласа кăтартнă', -'rcshowhideminor' => 'пĕчĕк тӳрлетӳсене $1', -'rcshowhidebots' => 'ботсене $1', -'rcshowhideliu' => 'сайта кĕнĕскерсене $1', -'rcshowhideanons' => 'ячĕсене палăртманскерсене $1', -'rcshowhidepatr' => 'тĕрĕсленĕ тӳрлетӳсене $1', -'rcshowhidemine' => 'хăвăн тӳрлетӳсене $1', -'rclinks' => 'Юлашки $2 кун хушшинче тунă $1 улшăнусене кăтартмалла
    $3', -'diff' => 'танл.', -'hist' => 'истори', -'hide' => 'кăтартмалла мар', -'show' => 'кăтартмалла', -'minoreditletter' => 'п', -'newpageletter' => 'Ç', -'rc_categories_any' => 'Кашни', -'newsectionsummary' => '/* $1 */ Çĕнĕ тема', +'recentchanges' => 'Улшăнусем', +'recentchanges-legend' => 'Çĕнĕ улшăнусен ĕнерлевĕ', +'recentchanges-label-bot' => 'Ку улшăнăва бот тунă', +'rcnote' => 'Юлашки $2 кун хушшинчи $1 улшăнусем. Халě пěтěмпе {{NUMBEROFARTICLES}} статья.', +'rclistfrom' => 'Юлашки улшăнусене $1 вăхăтран пуçласа кăтартнă', +'rcshowhideminor' => 'пĕчĕк тӳрлетӳсене $1', +'rcshowhidebots' => 'ботсене $1', +'rcshowhideliu' => 'сайта кĕнĕскерсене $1', +'rcshowhideanons' => 'ячĕсене палăртманскерсене $1', +'rcshowhidepatr' => 'тĕрĕсленĕ тӳрлетӳсене $1', +'rcshowhidemine' => 'хăвăн тӳрлетӳсене $1', +'rclinks' => 'Юлашки $2 кун хушшинче тунă $1 улшăнусене кăтартмалла
    $3', +'diff' => 'танл.', +'hist' => 'истори', +'hide' => 'кăтартмалла мар', +'show' => 'кăтартмалла', +'minoreditletter' => 'п', +'newpageletter' => 'Ç', +'rc_categories_any' => 'Кашни', +'newsectionsummary' => '/* $1 */ Çĕнĕ тема', # Recent changes linked 'recentchangeslinked' => 'Çыхăннă улшăнусем', @@ -726,36 +711,36 @@ $1 хутшăнакан патне, е ытти [[{{MediaWiki:Grouppage-sysop}}| 'recentchangeslinked-page' => 'Страница ячĕ:', # Upload -'upload' => 'Файла кĕртесси', -'uploadbtn' => 'Файла кĕрт', -'uploadnologin' => 'Эсир сайта кĕмен.', -'uploadnologintext' => 'Файла кĕртес умĕн сирĕн малтан [[Special:UserLogin|сайта кĕмелле]].', -'uploaderror' => 'Файла кĕртне чухне йăнăш пулчĕ', -'uploadlog' => 'Файлсене кĕртнин логĕ', -'uploadlogpage' => 'Файлсене кĕртнине кăтартакан журнал', -'uploadlogpagetext' => 'Аяларах эсир юлашкинчен кĕртнĕ файлсене куратăр. +'upload' => 'Файла кĕртесси', +'uploadbtn' => 'Файла кĕрт', +'uploadnologin' => 'Эсир сайта кĕмен.', +'uploadnologintext' => 'Файла кĕртес умĕн сирĕн малтан [[Special:UserLogin|сайта кĕмелле]].', +'uploaderror' => 'Файла кĕртне чухне йăнăш пулчĕ', +'uploadlog' => 'Файлсене кĕртнин логĕ', +'uploadlogpage' => 'Файлсене кĕртнине кăтартакан журнал', +'uploadlogpagetext' => 'Аяларах эсир юлашкинчен кĕртнĕ файлсене куратăр. Пур çĕрте те сервер вăхăтне (Гринвич тăрăх, UTC) кăтартнă.', -'filedesc' => 'Кĕскен ăнлантарни', -'fileuploadsummary' => 'Кĕске ăнлантару:', -'filestatus' => 'Усă курмалли майсем', -'filesource' => 'Çăлкуç', -'uploadedfiles' => 'Кĕртнĕ файлсем', -'ignorewarning' => 'Асăрхаттарусене пăхмасăр файла çав-çавах çырса хумалла.', -'ignorewarnings' => 'Асăрхаттарусене шута илмелле мар', -'badfilename' => 'Файл ятне $1 çине улăштарнă', -'filetype-badmime' => '"$1" MIME-тĕслĕ файлсене кĕртейместпĕр.', -'filetype-missing' => 'Файлăн хушма ячĕ тупăнмарĕ (тĕслĕхрен, «.jpg»).', -'largefileserver' => 'Файл пысăкăшĕ юрăхлинчен пысăкрах (пĕчĕклетĕр).', -'successfulupload' => 'Файла ăнăçлă тултартăмăр', -'uploadwarning' => 'Асăрхаттару', -'savefile' => 'Файла çырса хур', -'uploadedimage' => '«[[$1]]» кĕртрĕмĕр', -'uploaddisabled' => 'Каçарăр та сайта халĕ нимĕн те кĕртме юрамаст.', -'uploaddisabledtext' => 'Ку вики-сайтра файлсене кĕртме чарнă.', -'uploadvirus' => 'Файл ăшĕнче вирус пур! $1 пăхăр.', -'sourcefilename' => 'Файлăн чăн ячĕ', -'watchthisupload' => 'Ку файла сăнав списокне кĕртмелле', -'filewasdeleted' => 'Ку ятла файл малтан пулнă, анчах та ăна кăларса пăрахнă. Тархасшăн, $1 кĕртес умĕн тĕрĕслĕр.', +'filedesc' => 'Кĕскен ăнлантарни', +'fileuploadsummary' => 'Кĕске ăнлантару:', +'filestatus' => 'Усă курмалли майсем', +'filesource' => 'Çăлкуç', +'uploadedfiles' => 'Кĕртнĕ файлсем', +'ignorewarning' => 'Асăрхаттарусене пăхмасăр файла çав-çавах çырса хумалла.', +'ignorewarnings' => 'Асăрхаттарусене шута илмелле мар', +'badfilename' => 'Файл ятне $1 çине улăштарнă', +'filetype-badmime' => '"$1" MIME-тĕслĕ файлсене кĕртейместпĕр.', +'filetype-missing' => 'Файлăн хушма ячĕ тупăнмарĕ (тĕслĕхрен, «.jpg»).', +'largefileserver' => 'Файл пысăкăшĕ юрăхлинчен пысăкрах (пĕчĕклетĕр).', +'uploadwarning' => 'Асăрхаттару', +'savefile' => 'Файла çырса хур', +'uploadedimage' => '«[[$1]]» кĕртрĕмĕр', +'uploaddisabled' => 'Каçарăр та сайта халĕ нимĕн те кĕртме юрамаст.', +'uploaddisabledtext' => 'Ку вики-сайтра файлсене кĕртме чарнă.', +'uploadvirus' => 'Файл ăшĕнче вирус пур! $1 пăхăр.', +'sourcefilename' => 'Файлăн чăн ячĕ', +'watchthisupload' => 'Ку файла сăнав списокне кĕртмелле', +'filewasdeleted' => 'Ку ятла файл малтан пулнă, анчах та ăна кăларса пăрахнă. Тархасшăн, $1 кĕртес умĕн тĕрĕслĕр.', +'upload-success-subj' => 'Файла ăнăçлă тултартăмăр', 'upload-proto-error' => 'Йăнăш протокол', 'upload-file-error' => 'Шалти йăнăш', @@ -1162,8 +1147,8 @@ Also see [[Special:WantedCategories|wanted categories]].', 'nextdiff' => 'Малаллахи тӳрлетӳ →', # Media information -'file-info' => '(файл пысăкăшĕ: $1, MIME-тĕсĕ: $2)', -'file-info-size' => '($1 × $2 пиксел, файл пысăкăше: $3, MIME-тĕсĕ: $4)', +'file-info' => 'файл пысăкăшĕ: $1, MIME-тĕсĕ: $2', +'file-info-size' => '$1 × $2 пиксел, файл пысăкăше: $3, MIME-тĕсĕ: $4', 'file-nohires' => 'Пысăкрах калăпăшли çук.', # Special:NewFiles diff --git a/languages/messages/MessagesCy.php b/languages/messages/MessagesCy.php index 049fa42d..ac542792 100644 --- a/languages/messages/MessagesCy.php +++ b/languages/messages/MessagesCy.php @@ -7,6 +7,7 @@ * @ingroup Language * @file * + * @author Arwel Parry * @author Lloffiwr * @author Malafaya * @author Reedy @@ -130,8 +131,7 @@ $messages = array( 'tog-editsection' => 'Galluogi golygu adran trwy ddolennau [golygu] uwchben yr adran', 'tog-editsectiononrightclick' => 'Galluogi golygu adran drwy dde-glicio ar bennawd yr adran (JavaScript)', 'tog-showtoc' => 'Dangos y daflen gynnwys (ar gyfer tudalennau sydd â mwy na 3 pennawd)', -'tog-rememberpassword' => "Y cyfrifiadur hwn i gofio'r cyfrinair", -'tog-editwidth' => "Chwyddo'r blwch golygu i lanw'r sgrîn", +'tog-rememberpassword' => "Y porwr hwn i gofio'r manylion mewngofnodi (hyd at $1 {{PLURAL:$1||diwrnod|ddiwrnod|diwrnod|diwrnod|diwrnod}})", 'tog-watchcreations' => 'Ychwanegu tudalennau at fy rhestr wylio wrth i mi eu creu', 'tog-watchdefault' => 'Ychwanegu tudalennau at fy rhestr wylio wrth i mi eu golygu', 'tog-watchmoves' => 'Ychwanegu tudalennau at fy rhestr wylio wrth i mi eu symud', @@ -276,31 +276,21 @@ $messages = array( 'faqpage' => 'Project:Cwestiynau cyffredin', # Vector skin -'vector-action-addsection' => 'Ychwanegu adran', -'vector-action-delete' => 'Dileu', -'vector-action-move' => 'Symud', -'vector-action-protect' => 'Diogelu', -'vector-action-undelete' => 'Adfer', -'vector-action-unprotect' => 'Dad-ddiogelu', -'vector-namespace-category' => 'Categori', -'vector-namespace-help' => 'Tudalen gymorth', -'vector-namespace-image' => 'Ffeil', -'vector-namespace-main' => 'Tudalen', -'vector-namespace-media' => 'Tudalen cyfrwng', -'vector-namespace-mediawiki' => 'Neges', -'vector-namespace-project' => 'Tudalen brosiect', -'vector-namespace-special' => 'Tudalen arbennig', -'vector-namespace-talk' => 'Sgwrs', -'vector-namespace-template' => 'Nodyn', -'vector-namespace-user' => 'Tudalen defnyddiwr', -'vector-view-create' => 'Dechrau', -'vector-view-edit' => 'Golygu', -'vector-view-history' => 'Gweld yr hanes', -'vector-view-view' => 'Darllen', -'vector-view-viewsource' => 'Dangos côd y dudalen', -'actions' => 'Gweithrediadau', -'namespaces' => 'Parthau', -'variants' => 'Amrywiolion', +'vector-action-addsection' => 'Ychwanegu adran', +'vector-action-delete' => 'Dileu', +'vector-action-move' => 'Symud', +'vector-action-protect' => 'Diogelu', +'vector-action-undelete' => 'Adfer', +'vector-action-unprotect' => 'Dad-ddiogelu', +'vector-simplesearch-preference' => 'Galluogi awgrymiadau chwilio uwch (gwedd Vector yn unig)', +'vector-view-create' => 'Dechrau', +'vector-view-edit' => 'Golygu', +'vector-view-history' => 'Gweld yr hanes', +'vector-view-view' => 'Darllen', +'vector-view-viewsource' => 'Dangos côd y dudalen', +'actions' => 'Gweithrediadau', +'namespaces' => 'Parthau', +'variants' => 'Amrywiolion', 'errorpagetitle' => 'Gwall', 'returnto' => 'Dychwelyd at $1.', @@ -361,6 +351,9 @@ Mae gormod o ddefnyddwyr am weld y dudalen hon ar unwaith. Arhoswch ychydig cyn ceisio mynd at y dudalen hon eto. $1', +'pool-timeout' => 'Cafwyd goroedi wrth aros am y clo', +'pool-queuefull' => 'Mae cwt y gronfa brosesu yn llawn', +'pool-errorunknown' => 'Gwall anhysbys', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Ynglŷn â {{SITENAME}}', @@ -524,7 +517,8 @@ Cofiwch osod y [[Special:Preferences|dewisiadau]] sydd fwyaf hwylus i chi ar {{S 'yourname' => 'Eich enw defnyddiwr:', 'yourpassword' => 'Eich cyfrinair:', 'yourpasswordagain' => 'Ail-deipiwch y cyfrinair:', -'remembermypassword' => "Y cyfrifiadur hwn i gofio'r cyfrinair", +'remembermypassword' => "Y porwr hwn i gofio'r manylion mewngofnodi (am hyd at $1 {{PLURAL:$1||diwrnod|ddiwrnod|diwrnod|diwrnod|diwrnod}})", +'securelogin-stick-https' => "Cadw'r cyswllt â HTTPS ar ôl mewngofnodi", 'yourdomainname' => 'Eich parth', 'externaldberror' => "Naill ai: cafwyd gwall dilysu allanol ar databas neu: ar y llaw arall efallai nad oes hawl gennych chi i ddiwygio'ch cyfrif allanol.", 'login' => 'Mewngofnodi', @@ -541,6 +535,7 @@ Cofiwch osod y [[Special:Preferences|dewisiadau]] sydd fwyaf hwylus i chi ar {{S 'gotaccount' => "Oes cyfrif gennych eisoes? '''$1'''.", 'gotaccountlink' => 'Mewngofnodwch', 'createaccountmail' => 'trwy e-bost', +'createaccountreason' => 'Rheswm:', 'badretype' => "Nid yw'r cyfrineiriau'n union yr un fath.", 'userexists' => 'Mae rhywun arall wedi dewis yr enw defnyddiwr hwn. Dewiswch un arall os gwelwch yn dda.', 'loginerror' => 'Problem mewngofnodi', @@ -550,7 +545,7 @@ Cofiwch osod y [[Special:Preferences|dewisiadau]] sydd fwyaf hwylus i chi ar {{S 'noname' => 'Dydych chi ddim wedi cynnig enw defnyddiwr dilys.', 'loginsuccesstitle' => 'Llwyddodd y mewngofnodi', 'loginsuccess' => "'''Yr ydych wedi mewngofnodi i {{SITENAME}} fel \"\$1\".'''", -'nosuchuser' => "Does yna'r un defnyddiwr â'r enw \"\$1\". +'nosuchuser' => "Does dim defnyddiwr o'r enw \"\$1\". Mae'r rhaglen yn gwahaniaethu rhwng llythrennau bach a mawr. Sicrhewch eich bod chi wedi sillafu'r enw'n gywir, neu [[Special:UserLogin/signup|crëwch gyfrif newydd]].", 'nosuchusershort' => 'Does dim defnyddiwr o\'r enw "$1". Gwiriwch eich sillafu.', @@ -560,6 +555,7 @@ Sicrhewch eich bod chi wedi sillafu'r enw'n gywir, neu [[Special:UserLogin/signu 'wrongpasswordempty' => 'Roedd y cyfrinair yn wag. Rhowch gynnig arall arni.', 'passwordtooshort' => "Mae'n rhaid fod gan gyfrinair o leia $1 {{PLURAL:$1|nod}}.", 'password-name-match' => "Rhaid i'ch cyfrinair a'ch enw defnyddiwr fod yn wahanol i'w gilydd.", +'password-login-forbidden' => "Gwaharddwyd defnyddio'r enw defnyddiwr a'r cyfrinair hwn.", 'mailmypassword' => 'Anfoner cyfrinair newydd ataf trwy e-bost', 'passwordremindertitle' => 'Hysbysu cyfrinair dros dro newydd ar gyfer {{SITENAME}}', 'passwordremindertext' => 'Mae rhywun (chi mwy na thebyg, o\'r cyfeiriad IP $1) wedi gofyn i ni anfon cyfrinair newydd atoch ar gyfer {{SITENAME}} ($4). @@ -594,6 +590,9 @@ Oedwch ychydig cyn mentro eto.', 'loginlanguagelabel' => 'Iaith: $1', 'suspicious-userlogout' => 'Gwrthodwyd eich cais i allgofnodi oherwydd ei fod yn ymddangos mai gweinydd wedi torri neu ddirprwy gelc a anfonodd y cais.', +# E-mail sending +'php-mail-error-unknown' => 'Gwall anhysbys yng ngweithrediad post() PHP', + # Password reset dialog 'resetpass' => 'Newid cyfrinair y cyfrif', 'resetpass_announce' => "Fe wnaethoch fewngofnodi gyda chôd dros dro oddi ar e-bost. @@ -645,10 +644,11 @@ Gall fod eich bod wedi llwyddo newid eich cyfrinair eisoes neu eich bod wedi gof 'showlivepreview' => 'Rhagolwg byw', 'showdiff' => 'Dangos newidiadau', 'anoneditwarning' => "'''Dalier sylw''': Nid ydych wedi mewngofnodi. Fe fydd eich cyfeiriad IP yn ymddangos ar hanes golygu'r dudalen hon. Gallwch ddewis cuddio'ch cyfeiriad IP drwy greu cyfrif (a mewngofnodi) cyn golygu.", +'anonpreviewwarning' => "''Nid ydych wedi mewngofnodi. Os y cadwch eich newidiadau caiff eich cyfeiriad IP ei gofnodi yn hanes golygu'r dudalen hon.''", 'missingsummary' => "'''Sylwer:''' Nid ydych wedi gosod nodyn yn y blwch 'Crynodeb'. Os y pwyswch eto ar 'Cadw'r dudalen' caiff y golygiad ei gadw heb nodyn.", 'missingcommenttext' => 'Rhowch eich sylwadau isod.', -'missingcommentheader' => "'''Nodyn:''' Nid ydych wedi cynnig unrhywbeth yn y blwch 'Pwnc/Pennawd:'. Os y cliciwch 'Cadw'r dudalen' eto fe gedwir y golygiad heb bennawd.", +'missingcommentheader' => "'''Nodyn:''' Nid ydych wedi cynnig unrhywbeth yn y blwch 'Pwnc/Pennawd:'. Os y cliciwch \"{{int:savearticle}}\" eto fe gedwir y golygiad heb bennawd.", 'summary-preview' => "Rhagolwg o'r crynodeb:", 'subject-preview' => 'Rhagolwg pwnc/pennawd:', 'blockedtitle' => "Mae'r defnyddiwr hwn wedi cael ei flocio", @@ -716,8 +716,12 @@ Dyma'r cofnod lòg diweddaraf, er gwybodaeth:", 'usercsspreview' => "'''Cofiwch - dim ond rhagolwg o'ch CSS defnyddiwr yw hwn.''' '''Nid yw wedi'i gadw eto!'''", 'userjspreview' => "'''Cofiwch -- dim ond rhagolwg o'ch JavaScript yw hwn; nid yw wedi'i gadw eto!'''", +'sitecsspreview' => "'''Cofiwch - dim ond rhagolwg o'ch CSS yw hwn.''' +'''Nid yw wedi'i gadw eto!'''", +'sitejspreview' => "'''Cofiwch - dim ond rhagolwg o'ch côd JavaScript yw hwn.''' +'''Nid yw wedi'i rhoi ar gadw eto!'''", 'userinvalidcssjstitle' => "'''Rhybudd:''' Nid oes gwedd o'r enw \"\$1\". -Cofiwch bod y tudalennau .css a .js yn defnyddio llythrennau bach, e.e. {{ns:user}}:Foo/monobook.css yn hytrach na {{ns:user}}:Foo/Monobook.css.", +Cofiwch bod y tudalennau .css a .js yn defnyddio llythrennau bach, e.e. {{ns:user}}:Foo/vector.css yn hytrach na {{ns:user}}:Foo/Vector.css.", 'updated' => '(Diweddariad)', 'note' => "'''Dalier sylw:'''", 'previewnote' => "'''Cofiwch taw rhagolwg yw hwn; nid yw'r dudalen wedi ei chadw eto.'''", @@ -755,8 +759,6 @@ Rydych chi'n cadarnhau mai chi yw awdur y cyfraniad, neu eich bod chi wedi'i gop Os nad ydych chi'n fodlon i'ch gwaith gael ei olygu heb drugaredd, neu i gopïau ymddangos ar draws y we, peidiwch a'i gyfrannu yma.
    Rydych chi'n cadarnhau mai chi yw awdur y cyfraniad, neu eich bod chi wedi'i gopïo o'r parth cyhoeddus (''public domain'') neu rywle rhydd tebyg.
    '''PEIDIWCH Â CHYFRANNU GWAITH O DAN HAWLFRAINT HEB GANIATÂD!'''", -'longpagewarning' => "'''RHYBUDD: Mae'r dudalen hon yn $1 cilobeit o hyd; mae rhai porwyr yn cael trafferth wrth lwytho tudalennau sy'n hirach na 32 kb. -Byddai'n dda o beth llunio sawl tudalen llai o hyd o ddeunydd y dudalen hon.'''", 'longpageerror' => "'''GWALL: Mae'r testun yr ydych wedi ei osod yma yn $1 cilobeit o hyd, ac yn hwy na'r hyd eithaf o $2 cilobeit. Ni ellir ei roi ar gadw.'''", 'readonlywarning' => "'''RHYBUDD: Mae'r databas wedi'i gloi am gyfnod er mwyn cynnal a chadw, felly fyddwch chi ddim yn gallu cadw'ch golygiadau ar hyn o bryd. Rydyn ni'n argymell eich bod chi'n copïo a gludo'r testun i ffeil a'i gadw ar eich disg tan bod y sustem yn weithredol eto.''' @@ -804,9 +806,9 @@ Mae ar gael yn barod.', Dylai fod llai na $2 {{PLURAL:$2|galwad|alwad|alwad|galwad|galwad|galwad}} yn y dudalen, ond ar hyn o bryd mae $1 {{PLURAL:$1|galwad|alwad|alwad|galwad|galwad|galwad}} ynddi.", 'expensive-parserfunction-category' => "Tudalennau a gormod o alwadau ar ffwythiannau dosrannu sy'n dreth ar adnoddau", -'post-expand-template-inclusion-warning' => "Rhybudd: Mae'r maint cynnwys nodyn yn rhy fawr. +'post-expand-template-inclusion-warning' => "'''Rhybudd:''' Mae maint y nodiadau ar ôl eu chwyddo yn rhy fawr. Ni chaiff rhai nodiadau eu cynnwys.", -'post-expand-template-inclusion-category' => "Tudalennau a phatrymlun ynddynt sy'n fwy na chyfyngiad y meddalwedd", +'post-expand-template-inclusion-category' => "Tudalennau a nodiadau ynddynt sy'n fwy na chyfyngiad y meddalwedd", 'post-expand-template-argument-warning' => "'''Rhybudd:''' Mae gan y dudalen hon o leiaf un arg nodyn sydd a maint ehangu rhy fawr. Cafodd yr argiau hyn eu hepgor.", 'post-expand-template-argument-category' => 'Tudalennau lle ceir argiau nodiadau coll', @@ -932,6 +934,8 @@ $1", 'logdelete-failure' => "'''Ni ellid gosod cyfyngiadau ar y gallu i weld y cofnod lòg:''' $1", 'revdel-restore' => 'Newid gwelededd', +'revdel-restore-deleted' => 'diwygiadau dilëedig', +'revdel-restore-visible' => 'diwygiadau gweladwy', 'pagehist' => 'Hanes y dudalen', 'deletedhist' => 'Hanes dilëedig', 'revdelete-content' => 'cynnwys', @@ -999,11 +1003,13 @@ Pan yn gwneud hyn dylid sicrhau nad yw dilyniant hanes tudalennau yn cael ei ddi # Diffs 'history-title' => "Hanes golygu '$1'", 'difference' => '(Gwahaniaethau rhwng diwygiadau)', +'difference-multipage' => '(Y gwahaniaeth rhwng y tudalennau)', 'lineno' => 'Llinell $1:', 'compareselectedversions' => 'Cymharer y fersiynau dewisedig', 'showhideselectedversions' => 'Dangos/cuddio y diwygiadau dewisedig', 'editundo' => 'dadwneud', -'diff-multi' => '(Ni ddangosir {{PLURAL:$1|yr $1 diwygiad|yr $1 diwygiad|y $1 ddiwygiad|y $1 diwygiad|y $1 diwygiad|y $1 diwygiad}} rhyngol.)', +'diff-multi' => '(Ni ddangosir {{PLURAL:$1|yr $1 diwygiad|yr $1 diwygiad|y $1 ddiwygiad|y $1 diwygiad|y $1 diwygiad|y $1 diwygiad}} rhyngol gan {{PLURAL:$2||un defnyddiwr|$2 ddefnyddiwr|$2 defnyddiwr|$2 o ddefnyddwyr|$2 o ddefnyddwyr}}.)', +'diff-multi-manyusers' => '(Ni ddangosir {{PLURAL:$1|yr $1 diwygiad|yr $1 diwygiad|y $1 ddiwygiad|y $1 diwygiad|y $1 diwygiad|y $1 diwygiad}} rhyngol gan mwy na $2 {{PLURAL:$2|o ddefnyddwyr}}.)', # Search results 'searchresults' => "Canlyniadau'r chwiliad", @@ -1038,6 +1044,7 @@ Pan yn gwneud hyn dylid sicrhau nad yw dilyniant hanes tudalennau yn cael ei ddi 'searchprofile-everything-tooltip' => "Chwilio'r cynnwys gyfan (gan gynnwys tudalennau sgwrs)", 'searchprofile-advanced-tooltip' => 'Chwilio drwy parthau dewisol', 'search-result-size' => '$1 ({{PLURAL:$2|dim geiriau|$2 gair|$2 air|$2 gair|$2 gair|$2 gair|}})', +'search-result-category-size' => '{{PLURAL:$1|$1 aelod}} ({{PLURAL:$2|$2 is-gategori}}, {{PLURAL:$3|$3 ffeil}})', 'search-result-score' => 'Perthnasedd: $1%', 'search-redirect' => '(ailgyfeiriad $1)', 'search-section' => '(adran $1)', @@ -1114,6 +1121,7 @@ Cofiwch y gall mynegeion Google o gynnwys {{SITENAME}} fod ar ei hôl hi.", 'contextlines' => "Nifer y llinellau i'w dangos ar gyfer pob hit:", 'contextchars' => 'Nifer y llythrennau a nodau eraill i bob llinell:', 'stub-threshold' => 'Trothwy ar gyfer fformatio cyswllt eginyn (beitiau):', +'stub-threshold-disabled' => 'Analluogwyd', 'recentchangesdays' => "Nifer y diwrnodau i'w dangos yn 'newidiadau diweddar':", 'recentchangesdays-max' => '(hyd at $1 {{PLURAL:$1||diwrnod|ddiwrnod|diwrnod|diwrnod|diwrnod}})', 'recentchangescount' => "Nifer y golygiadau i'w dangos yn ddiofyn:", @@ -1147,6 +1155,7 @@ Dyma allwedd wedi ei chreu ar hap y gallwch ei defnyddio: $1", 'prefs-files' => 'Ffeiliau', 'prefs-custom-css' => 'CSS o hunan-ddewis', 'prefs-custom-js' => 'JS o hunan-ddewis', +'prefs-common-css-js' => 'CSS/JS ar y cyd ar gyfer pob gwedd:', 'prefs-reset-intro' => "Gallwch ddefnyddio'r dudalen hon i ailosod eich dewisiadau i'r rhai diofyn. Ni allwch ddadwneud y weithred hon.", 'prefs-emailconfirm-label' => "Cadarnhau'r e-bost:", @@ -1185,9 +1194,15 @@ Gallwch hefyd adael i eraill anfon e-bost atoch trwy'r cyswllt ar eich tudalen d 'prefs-advancedrendering' => 'Dewisiadau uwch', 'prefs-advancedsearchoptions' => 'Dewisiadau uwch', 'prefs-advancedwatchlist' => 'Dewisiadau uwch', -'prefs-display' => 'Dewisiadau arddangos', +'prefs-displayrc' => 'Dewisiadau arddangos', +'prefs-displaysearchoptions' => 'Dewisiadau arddangos', +'prefs-displaywatchlist' => 'Dewisiadau arddangos', 'prefs-diffs' => "Cymharu golygiadau ('gwahan')", +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Y cyfeiriad e-bost yn ymddangos yn un dilys', +'email-address-validity-invalid' => 'Rhowch gyfeiriad e-bost dilys', + # User rights 'userrights' => 'Rheoli galluoedd defnyddwyr', 'userrights-lookup-user' => 'Rheoli grwpiau defnyddiwr', @@ -1271,6 +1286,7 @@ Gallwch hefyd adael i eraill anfon e-bost atoch trwy'r cyswllt ar eich tudalen d 'right-hideuser' => "Atal enw defnyddiwr rhag i'r cyhoedd ei weld", 'right-ipblock-exempt' => 'Mynd heibio i flociau IP, blociau awtomatig a blociau amrediad', 'right-proxyunbannable' => 'Mynd heibio i flociau awtomatig gan weinyddion dirprwyol', +'right-unblockself' => 'Dad-flocio eu hunain', 'right-protect' => 'Newid lefelau diogelu a golygu tudalennau wedi eu diogelu', 'right-editprotected' => 'Golygu tudalennau sydd wedi eu diogelu (ond bod hebddynt ddiogelu sgydol)', 'right-editinterface' => "Golygu'r rhyngwyneb", @@ -1293,7 +1309,6 @@ Gallwch hefyd adael i eraill anfon e-bost atoch trwy'r cyswllt ar eich tudalen d 'right-siteadmin' => "Cloi a datgloi'r databas", 'right-reset-passwords' => 'Ailosod cyfrinair defnyddwyr eraill', 'right-override-export-depth' => 'Allforio tudalennau gan gynnwys tudalennau cysylltiedig hyd at ddyfnder o 5', -'right-versiondetail' => "Gweld y manylion estynedig am y fersiwn hwn o'r meddalwedd", 'right-sendemail' => 'Anfon e-bost at ddefnyddwyr eraill', # User rights log @@ -1316,7 +1331,7 @@ Gallwch hefyd adael i eraill anfon e-bost atoch trwy'r cyswllt ar eich tudalen d 'action-upload' => "uwchlwytho'r ffeil", 'action-reupload' => 'trosysgrifo ffeil sydd eisoes ar gael', 'action-reupload-shared' => "Uwchlwytho ffeil ar wici lleol, gyda'r un teitl â ffeil yn y storfa gyfrannol", -'action-upload_by_url' => "uuchlwytho'r ffeil o gyfeiriad URL", +'action-upload_by_url' => "uwchlwytho'r ffeil o gyfeiriad URL", 'action-writeapi' => "defnyddio'r API i ysgrifennu a thrin y tudalennau", 'action-delete' => "dileu'r dudalen", 'action-deleterevision' => "dileu'r golygiad", @@ -1344,14 +1359,9 @@ Gallwch hefyd adael i eraill anfon e-bost atoch trwy'r cyswllt ar eich tudalen d 'recentchanges-legend' => "Dewisiadau'r newidiadau diweddar", 'recentchangestext' => "Dilynwch y newidiadau diweddaraf i'r wici ar y dudalen hon.", 'recentchanges-feed-description' => "Dilynwch y newidiadau diweddaraf i'r wici gyda'r porthiant hwn.", -'recentchanges-label-legend' => 'Eglurhad: $1.', -'recentchanges-legend-newpage' => '$1 - tudalen newydd', 'recentchanges-label-newpage' => 'Dechreuwyd tudalen newydd wrth olygu', -'recentchanges-legend-minor' => '$1 - mân olygiad', 'recentchanges-label-minor' => 'Mân olygiad', -'recentchanges-legend-bot' => '$1 - golygiad gan fot', 'recentchanges-label-bot' => 'Golygwyd gan fot', -'recentchanges-legend-unpatrolled' => '$1 - golygiad heb dderbyn ymweliad patrôl eto', 'recentchanges-label-unpatrolled' => "Nid yw'r golygiad hwn wedi derbyn ymweliad patrôl eto", 'rcnote' => "Isod mae'r '''$1''' newid diweddaraf yn ystod y {{PLURAL:$2|diwrnod|diwrnod|deuddydd|tridiau|'''$2''' diwrnod|'''$2''' diwrnod}} diwethaf, hyd at $5, $4.", 'rcnotefrom' => "Isod rhestrir pob newid ers '''$2''' (hyd at '''$1''' ohonynt).", @@ -1397,6 +1407,9 @@ Gallwch hefyd adael i eraill anfon e-bost atoch trwy'r cyswllt ar eich tudalen d 'upload_directory_missing' => "Mae'r cyfeiriadur uwchlwytho ($1) yn eisiau, ac ni allai'r gweinydd gwe ei greu.", 'upload_directory_read_only' => "Ni all y gweinydd ysgrifennu i'r cyfeiriadur uwchlwytho ($1).", 'uploaderror' => "Gwall tra'n uwchlwytho ffeil", +'upload-recreate-warning' => "'''Rhybudd: Cafodd ffeil o'r enw hwn ei dileu neu ei symud.''' + +Dyma'r lòg dileu a symud ar gyfer y dudalen hon, er gwybodaeth:", 'uploadtext' => "Defnyddiwch y ffurflen isod i uwchlwytho ffeiliau. I weld a chwilio am ffeiliau sydd eisoes wedi eu huwchlwytho, ewch at y [[Special:FileList|rhestr o'r ffeiliau sydd wedi eu huwchlwytho]]. I weld cofnodion uwchlwytho a dileu ffeiliau, ewch at y [[Special:Log/upload|lòg uwchlwytho]] neu'r [[Special:Log/delete|lòg dileu]]. @@ -1415,7 +1428,7 @@ Gweler [[Special:NewFiles|oriel y ffeiliau newydd]] i fwrw golwg drostynt.", 'filedesc' => 'Crynodeb', 'fileuploadsummary' => 'Crynodeb:', 'filereuploadsummary' => "Newidiadau i'r ffeil:", -'filestatus' => 'Statws hawlfraint:', +'filestatus' => 'Statws yr hawlfraint:', 'filesource' => 'Ffynhonnell:', 'uploadedfiles' => 'Ffeiliau a uwchlwythwyd', 'ignorewarning' => "Anwybydder y rhybudd, a rhoi'r dudalen ar gadw beth bynnag", @@ -1429,6 +1442,17 @@ Gweler [[Special:NewFiles|oriel y ffeiliau newydd]] i fwrw golwg drostynt.", 'filetype-unwanted-type' => "Mae'r math '''\".\$1\"''' o ffeil yn anghymeradwy. Mae'n well defnyddio ffeil {{PLURAL:\$3|o'r math|o'r math|o'r mathau|o'r mathau|o'r mathau|o'r mathau}} \$2.", 'filetype-banned-type' => "Ni chaniateir ffeiliau o'r math '''\".\$1\"'''. \$2 yw'r {{PLURAL:\$3|math|math|mathau|mathau|mathau|mathau}} o ffeil a ganiateir.", 'filetype-missing' => "Nid oes gan y ffeil hon estyniad (megis '.jpg').", +'empty-file' => "Mae'r ffeil a gyflwynwyd gennych yn wag.", +'file-too-large' => "Mae'r ffeil a gyflwynwyd gennych yn rhy fawr.", +'filename-tooshort' => "Mae enw'r ffeil yn rhy fyr.", +'filetype-banned' => "Mae'r math hwn o ffeil wedi ei wahardd.", +'verification-error' => "Nid yw'r ffeil hon wedi ei derbyn wrth ei gwirio.", +'hookaborted' => 'Cafodd y darpar newid ei derfynu gan fachyn estyniad.', +'illegal-filename' => "Nid yw'r enw ffeil hwn yn cael ei ganiatáu.", +'overwrite' => 'Ni chaniateir trosysgrifo ffeil sydd eisoes yn bod.', +'unknown-error' => 'Cafwyd gwall anhysbys.', +'tmp-create-error' => 'Wedi methu llunio ffeil dros dro.', +'tmp-write-error' => "Cafwyd gwall wrth ysgrifennu'r ffeil dros dro.", 'large-file' => "Argymhellir na ddylai ffeil fod yn fwy na $1. Mae'r ffeil hwn yn $2 o faint.", 'largefileserver' => "Mae'r ffeil yn fwy na'r hyn mae'r gweinydd yn ei ganiatau.", 'emptyfile' => "Ymddengys fod y ffeil a uwchlwythwyd yn wag. Efallai bod gwall teipio yn enw'r ffeil. Sicrhewch eich bod wir am uwchlwytho'r ffeil.", @@ -1457,19 +1481,20 @@ Ewch nôl ac uwchlwythwch y ffeil gydag enw gwahanol iddo. 'file-exists-duplicate' => "Dyblgeb yw'r ffeil hwn o'r {{PLURAL:$1|ffeil|ffeil|ffeiliau|ffeiliau|ffeiliau|ffeiliau}} sy'n dilyn:", 'file-deleted-duplicate' => "Mae ffeil union debyg i hon ([[:$1]]) eisoes wedi cael ei dileu. Dylech edrych ar hanes dileu'r ffeil honno cyn bwrw ati i'w llwytho unwaith eto.", -'successfulupload' => 'Wedi llwyddo uwchlwytho', 'uploadwarning' => 'Rhybudd uwchlwytho', 'uploadwarning-text' => 'Newidiwch ddisgrifiad y ffeil isod ac yna ceisiwch ei huwchlwytho eto, os gwelwch yn dda.', 'savefile' => "Cadw'r ffeil", 'uploadedimage' => 'wedi llwytho "[[$1]]"', 'overwroteimage' => 'wedi uwchlwytho fersiwn newydd o "[[$1]]"', 'uploaddisabled' => "Ymddiheurwn; mae uwchlwytho wedi'i analluogi.", +'copyuploaddisabled' => 'Analluogwyd uwchlwytho gan URL.', +'uploadfromurl-queued' => "Mae'r ffeil mewn ciw, yn disgwyl cael ei huwchlwytho.", 'uploaddisabledtext' => 'Analluogwyd uwchlwytho ffeiliau ar y wefan hon.', 'php-uploaddisabledtext' => 'Anablwyd uwchlwytho ffeiliau yn PHP. Gwiriwch y gosodiad ar file_uploads.', 'uploadscripted' => "Mae'r ffeil hon yn cynnwys HTML neu sgript a all achosi problemau i borwyr gwe.", 'uploadvirus' => 'Mae firws gan y ffeil hon! Manylion: $1', -'upload-source' => 'Y ffeil gwreiddiol', +'upload-source' => 'Y ffeil wreiddiol', 'sourcefilename' => "Enw'r ffeil wreiddiol:", 'sourceurl' => 'URL y gwreiddiol:', 'destfilename' => 'Enw ffeil y cyrchfan:', @@ -1484,6 +1509,14 @@ Dylech ddarllen y $1 cyn bwrw ati i'w uwchlwytho unwaith eto.", Ail-feddyliwch a ddylech barhau i uwchlwytho'r ffel hon. Dyma'r lòg dileu ar gyfer y ffeil i chi gael gweld:", 'filename-bad-prefix' => "Mae'r enw ar y ffeil yr ydych yn ei uwchlwytho yn dechrau gyda '''\"\$1\"'''. Mae'r math hwn o enw diystyr fel arfer yn cael ei osod yn awtomatig gan gamerâu digidol. Mae'n well gosod enw sy'n disgrifio'r ffeil arno.", +'upload-success-subj' => 'Wedi llwyddo uwchlwytho', +'upload-success-msg' => "Llwyddwyd i uwchlwytho'r ffeil o [$2]. Mae ar gael yma: [[:{{ns:file}}:$1]]", +'upload-failure-subj' => 'Cafwyd problem wrth uwchlwytho', +'upload-failure-msg' => 'Cafwyd problem wrth uwchlwytho o [$2]: + +$1', +'upload-warning-subj' => 'Rhybudd uwchlwytho', +'upload-warning-msg' => 'Cafwyd problem wrth uwchlwytho o [$2]. Gallwch ddychwelyd at y [[Special:Upload/stash/$1|ffurflen uwchlwytho]] i ddatrys y broblem.', 'upload-proto-error' => 'Protocol gwallus', 'upload-proto-error-text' => "Rhaid cael URLs yn dechrau gyda http:// neu ftp:// wrth uwchlwytho'n bell.", @@ -1550,6 +1583,7 @@ Gallwch newid trefn y rhestr trwy bwyso ar bennawd colofn.", 'listfiles_search_for' => "Chwilio am enw'r ddelwedd:", 'imgfile' => 'ffeil', 'listfiles' => "Rhestr o'r holl ffeiliau", +'listfiles_thumb' => 'Mân-lun', 'listfiles_date' => 'Dyddiad', 'listfiles_name' => 'Enw', 'listfiles_user' => 'Defnyddiwr', @@ -1664,8 +1698,8 @@ Cofiwch chwilio am gysylltiadau eraill at nodyn a'u hystyried cyn ei ddileu.", 'statistics-edits' => 'Golygiadau ers y dechrau ar {{SITENAME}}', 'statistics-edits-average' => "Golygiadau'r dudalen, ar gyfartaledd", 'statistics-views-total' => 'Cyfanswm yr ymweliadau', +'statistics-views-total-desc' => 'Ni chynhwysir ymweliadau â thudalennau nad ydynt yn bod na thudalennau arbennig', 'statistics-views-peredit' => 'Ymweliadau i bob golygiad:', -'statistics-jobqueue' => 'Hyd y [http://www.mediawiki.org/wiki/Manual:Job_queue llinell tasgau]', 'statistics-users' => '[[Special:ListUsers|Defnyddwyr]] cofrestredig', 'statistics-users-active' => 'Defnyddwyr gweithgar', 'statistics-users-active-desc' => 'Defnyddwyr sydd wedi gweithredu unwaith neu ragor yn ystod y {{PLURAL:$1||diwrnod|deuddydd|tridiau|$1 diwrnod|$1 diwrnod}} diwethaf', @@ -1673,11 +1707,12 @@ Cofiwch chwilio am gysylltiadau eraill at nodyn a'u hystyried cyn ei ddileu.", 'disambiguations' => 'Tudalennau gwahaniaethu', 'disambiguationspage' => 'Template:Gwahaniaethu', -'disambiguations-text' => "Mae'r tudalennau canlynol yn cysylltu â thudalennau gwahaniaethu. Yn hytrach dylent gysylltu'n syth â'r erthygl briodol.
    Diffinir tudalen yn dudalen gwahaniaethu pan mae'n cynnwys un o'r nodiadau '[[MediaWiki:Disambiguationspage|tudalen gwahaniaethu]]'.", +'disambiguations-text' => "Mae'r tudalennau canlynol yn cynnwys un neu ragor o gysylltau wici, sydd yn cysylltu â '''thudalennau gwahaniaethu'''. Yn hytrach dylent arwain yn syth at yr erthygl briodol.
    +Diffinir tudalen yn dudalen gwahaniaethu pan mae'n cynnwys un o'r nodiadau '[[MediaWiki:Disambiguationspage|tudalen gwahaniaethu]]'.", 'doubleredirects' => 'Ailgyfeiriadau dwbl', 'doubleredirectstext' => "Mae pob rhes yn cynnwys cysylltiad i'r ddau ail-gyfeiriad cyntaf, ynghyd â chyrchfan yr ail ailgyfeiriad. Fel arfer bydd hyn yn rhoi'r gwir dudalen y dylai'r tudalennau cynt gyfeirio ati. -Gosodwyd llinell drwy'r eitemau sydd eisoes wedi eu datrys.", +Gosodwyd llinell drwy'r eitemau sydd eisoes wedi eu datrys.", 'double-redirect-fixed-move' => "Symudwyd [[$1]], a'i droi'n ailgyfeiriad at [[$2]]", 'double-redirect-fixer' => 'Y bot ailgyfeirio', @@ -1700,6 +1735,8 @@ Gosodwyd llinell drwy'r eitemau sydd eisoes wedi eu datrys.", 'nmembers' => '$1 {{PLURAL:$1|aelod|aelod|aelod|aelod|aelod|aelod}}', 'nrevisions' => '$1 {{PLURAL:$1|diwygiad|diwygiad|ddiwygiad|diwygiad|diwygiad|diwygiad}}', 'nviews' => '$1 {{PLURAL:$1|ymweliad|ymweliad|ymweliad|ymweliad|ymweliad|ymweliad}}', +'nimagelinks' => 'Defnyddir ar {{PLURAL:$1||$1 dudalen|$1 dudalen|$1 tudalen|$1 thudalen|$1 tudalen}}', +'ntransclusions' => 'defnyddir ar {{PLURAL:$1||$1 dudalen|$1 dudalen|$1 tudalen|$1 thudalen|$1 tudalen}}', 'specialpage-empty' => "Ni chafwyd canlyniadau i'w hadrodd.", 'lonelypages' => 'Erthyglau heb gysylltiadau iddynt', 'lonelypagestext' => 'Nid oes cysylltiad yn arwain at y tudalennau canlynol oddi wrth unrhyw dudalen arall yn {{SITENAME}}. Nid ydynt wedi eu trawsgynnwys ar unrhyw dudalen yn {{SITENAME}}, chwaith.', @@ -1856,36 +1893,42 @@ Protocoliau sy\'n cael eu cynnal: $1', 'listgrouprights-removegroup-self-all' => "Yn gallu tynnu'r holl grwpiau oddi ar eich cyfrif eich hunan", # E-mail user -'mailnologin' => "Does dim cyfeiriad i'w anfon iddo", -'mailnologintext' => 'Rhaid eich bod wedi [[Special:UserLogin|mewngofnodi]] +'mailnologin' => "Does dim cyfeiriad i'w anfon iddo", +'mailnologintext' => 'Rhaid eich bod wedi [[Special:UserLogin|mewngofnodi]] a bod cyfeiriad e-bost dilys yn eich [[Special:Preferences|dewisiadau]] er mwyn medru anfon e-bost at ddefnyddwyr eraill.', -'emailuser' => 'Anfon e-bost at y defnyddiwr hwn', -'emailpage' => 'Anfon e-bost at ddefnyddiwr', -'emailpagetext' => "Os yw'r cyfeiriad e-bost sydd yn newisiadau'r defnyddiwr hwn yn un dilys, gellir anfon neges ato o'i ysgrifennu ar y ffurflen isod. +'emailuser' => 'Anfon e-bost at y defnyddiwr hwn', +'emailpage' => 'Anfon e-bost at ddefnyddiwr', +'emailpagetext' => "Os yw'r cyfeiriad e-bost sydd yn newisiadau'r defnyddiwr hwn yn un dilys, gellir anfon neges ato o'i ysgrifennu ar y ffurflen isod. Bydd y cyfeiriad e-bost a osodoch yn eich [[Special:Preferences|dewisiadau chithau]] yn ymddangos ym maes \"Oddi wrth\" yr e-bost, fel bod y defnyddiwr arall yn gallu anfon ateb atoch.", -'usermailererror' => 'Dychwelwyd gwall gan y rhaglen e-bost:', -'defemailsubject' => 'E-bost {{SITENAME}}', -'noemailtitle' => 'Dim cyfeiriad e-bost', -'noemailtext' => "Nid yw'r defnyddiwr hwn wedi gosod cyfeiriad e-bost dilys.", -'nowikiemailtitle' => 'Ni chaniateir e-bostio', -'nowikiemailtext' => "Mae'r defnyddiwr hwn wedi dewis peidio derbyn e-byst oddi wrth ddefnyddwyr eraill.", -'email-legend' => 'Anfon e-bost at ddefnyddiwr {{SITENAME}} arall', -'emailfrom' => 'Oddi wrth:', -'emailto' => 'At:', -'emailsubject' => 'Pwnc:', -'emailmessage' => 'Neges:', -'emailsend' => 'Anfon', -'emailccme' => "Anfoner gopi o'r neges e-bost ataf.", -'emailccsubject' => "Copi o'ch neges at $1: $2", -'emailsent' => "Neges e-bost wedi'i hanfon", -'emailsenttext' => 'Mae eich neges e-bost wedi cael ei hanfon.', -'emailuserfooter' => 'Anfonwyd yr e-bost hwn oddi wrth $1 at $2 trwy ddefnyddio\'r teclyn "Anfon e-bost at ddefnyddiwr" ar {{SITENAME}}.', +'usermailererror' => 'Dychwelwyd gwall gan y rhaglen e-bost:', +'defemailsubject' => 'E-bost {{SITENAME}}', +'usermaildisabled' => 'Dim modd anfon e-bost at ddefnyddwyr', +'usermaildisabledtext' => 'Ni allwch anfon e-bost at ddefnyddwyr eraill y wici hwn', +'noemailtitle' => 'Dim cyfeiriad e-bost', +'noemailtext' => "Nid yw'r defnyddiwr hwn wedi gosod cyfeiriad e-bost dilys.", +'nowikiemailtitle' => 'Ni chaniateir e-bostio', +'nowikiemailtext' => "Mae'r defnyddiwr hwn wedi dewis peidio derbyn e-byst oddi wrth ddefnyddwyr eraill.", +'email-legend' => 'Anfon e-bost at ddefnyddiwr {{SITENAME}} arall', +'emailfrom' => 'Oddi wrth:', +'emailto' => 'At:', +'emailsubject' => 'Pwnc:', +'emailmessage' => 'Neges:', +'emailsend' => 'Anfon', +'emailccme' => "Anfoner gopi o'r neges e-bost ataf.", +'emailccsubject' => "Copi o'ch neges at $1: $2", +'emailsent' => "Neges e-bost wedi'i hanfon", +'emailsenttext' => 'Mae eich neges e-bost wedi cael ei hanfon.', +'emailuserfooter' => 'Anfonwyd yr e-bost hwn oddi wrth $1 at $2 trwy ddefnyddio\'r teclyn "Anfon e-bost at ddefnyddiwr" ar {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Yn gadael neges am ddigwyddiad yn y sustem.', +'usermessage-editor' => 'Golygydd neges y system', # Watchlist 'watchlist' => 'Fy rhestr wylio', 'mywatchlist' => 'Fy rhestr wylio', -'watchlistfor' => "(ar gyfer '''$1''')", +'watchlistfor2' => 'Yn ôl gofyn $1 $2', 'nowatchlist' => "Mae eich rhestr wylio'n wag.", 'watchlistanontext' => "Rhaid $1 er mwyn gweld neu ddiwygio'ch rhestr wylio.", 'watchnologin' => 'Nid ydych wedi mewngofnodi', @@ -1946,10 +1989,13 @@ Os digwydd mwy o olygiadau i\'r dudalen cyn i chi ymweld â hi, ni chewch ragor Sustem hysbysu {{SITENAME}} -- -I newid eich gosodiadau gwylio, ymwelwch â +I newid eich gosodiadau negeseuon hysbysu, ewch i +{{fullurl:{{#special:Preferences}}}} + +I newid eich gosodiadau gwylio, ewch i {{fullurl:{{#special:Watchlist}}/edit}} -I dynnu\'r dudalen oddi ar eich rhestr wylio, ewch at +I dynnu\'r dudalen oddi ar eich rhestr wylio, ewch i $UNWATCHURL Am fwy o gymorth ac adborth: @@ -1973,7 +2019,7 @@ Os gwelwch yn dda, cadarnhewch eich bod chi wir yn bwriadu gwneud hyn, eich bod Gwelwch y $2 am gofnod o\'r dileuon diweddar.', 'deletedarticle' => 'wedi dileu "[[$1]]"', 'suppressedarticle' => 'cuddiwyd "[[$1]]"', -'dellogpage' => 'Log dileuon', +'dellogpage' => 'Lòg dileuon', 'dellogpagetext' => "Ceir rhestr isod o'r dileadau diweddaraf.", 'deletionlog' => 'lòg dileuon', 'reverted' => "Wedi gwrthdroi i'r golygiad cynt", @@ -2005,7 +2051,10 @@ mae rhywun arall eisoes wedi dadwneud y golygiad neu wedi golygu'r dudalen. 'revertpage-nouser' => 'Wedi gwrthdroi golygiadau gan (enw wedi ei guddio); wedi adfer y golygiad diweddaraf gan [[User:$1|$1]]', 'rollback-success' => "Gwrthdrowyd y golygiadau gan $1; wedi gwrthdroi i'r golygiad olaf gan $2.", -'sessionfailure' => "Mae'n debyg fod yna broblem gyda'ch sesiwn mewngofnodi; diddymwyd y weithred er mwyn diogelu'r sustem rhag ddefnyddwyr maleisus. Gwasgwch botwm 'nôl' eich porwr ac ail-lwythwch y dudalen honno, yna ceisiwch eto.", + +# Edit tokens +'sessionfailure-title' => 'Sesiwn wedi methu', +'sessionfailure' => "Mae'n debyg fod yna broblem gyda'ch sesiwn mewngofnodi; diddymwyd y weithred er mwyn diogelu'r sustem rhag ddefnyddwyr maleisus. Gwasgwch botwm 'nôl' eich porwr ac ail-lwythwch y dudalen honno, yna ceisiwch eto.", # Protect 'protectlogpage' => 'Lòg diogelu', @@ -2084,7 +2133,7 @@ Os oes tudalen newydd o'r un enw wedi cael ei chreu ers y dilëad, fe ddangosir 'undeleterevdel' => "Ni fydd yr adfer yn cael ei chyflawni pe byddai peth o'r diwygiad blaen i'r dudalen neu'r ffeil yn cael ei dileu oherwydd yr adfer. Os hynny, rhaid i chi dad-ticio'r diwygiad dilëedig diweddaraf neu ei ddatguddio.", 'undeletehistorynoadmin' => "Mae'r dudalen hon wedi'i dileu. Dangosir y rheswm am y dileu isod, gyda manylion o'r holl ddefnyddwyr sydd wedi golygu'r dudalen cyn y dileu. Dim ond gweinyddwyr sydd yn gallu gweld testun y diwygiadau i'r dudalen.", -'undelete-revision' => 'Testun y golygiad gan $3 o $1 (fel ag yr oedd am $5 ar $4), a ddilëwyd:', +'undelete-revision' => 'Y golygiad gan $3 o $1 (fel ag yr oedd am $5 ar $4), a ddilëwyd:', 'undeleterevision-missing' => "Y diwygiad yn annilys neu yn eisiau. Mae'n bosib bod nam ar y cyswllt, neu fod y diwygiad eisoes wedi ei adfer neu wedi ei ddileu o'r archif.", 'undelete-nodiff' => 'Ni chafwyd hyd i olygiad cynharach.', @@ -2135,18 +2184,22 @@ $1', 'month' => 'Cyfraniadau hyd at fis:', 'year' => 'Cyfraniadau hyd at y flwyddyn:', -'sp-contributions-newbies' => 'Dangos cyfraniadau gan gyfrifon newydd yn unig', -'sp-contributions-newbies-sub' => 'Ar gyfer cyfrifon newydd', -'sp-contributions-newbies-title' => 'Cyfraniadau defnyddwyr newydd', -'sp-contributions-blocklog' => 'Lòg blocio', -'sp-contributions-deleted' => 'cyfraniadau defnyddiwr i dudalennau dilëedig', -'sp-contributions-logs' => 'logiau', -'sp-contributions-talk' => 'sgwrs', -'sp-contributions-userrights' => 'rheoli galluoedd defnyddwyr', -'sp-contributions-blocked-notice' => "Mae'r defnyddiwr hwn wedi ei atal rhag golygu ar hyn o bryd. Mae'r cofnod diweddaraf yn y lòg blocio i'w weld isod:", -'sp-contributions-search' => 'Chwilio am gyfraniadau', -'sp-contributions-username' => 'Cyfeiriad IP neu enw defnyddiwr:', -'sp-contributions-submit' => 'Chwilier', +'sp-contributions-newbies' => 'Dangos cyfraniadau gan gyfrifon newydd yn unig', +'sp-contributions-newbies-sub' => 'Ar gyfer cyfrifon newydd', +'sp-contributions-newbies-title' => 'Cyfraniadau defnyddwyr newydd', +'sp-contributions-blocklog' => 'Lòg blocio', +'sp-contributions-deleted' => 'cyfraniadau defnyddiwr i dudalennau dilëedig', +'sp-contributions-uploads' => 'Llwythiadau', +'sp-contributions-logs' => 'logiau', +'sp-contributions-talk' => 'sgwrs', +'sp-contributions-userrights' => 'rheoli galluoedd defnyddwyr', +'sp-contributions-blocked-notice' => "Mae'r defnyddiwr hwn wedi ei atal rhag golygu ar hyn o bryd. Mae'r cofnod diweddaraf yn y lòg blocio i'w weld isod:", +'sp-contributions-blocked-notice-anon' => "Mae'r gallu i olygu o'r cyfeiriad IP hwn wedi ei atal ar hyn o bryd. +Mae'r cofnod diweddaraf yn y lòg blocio i'w weld isod:", +'sp-contributions-search' => 'Chwilio am gyfraniadau', +'sp-contributions-username' => 'Cyfeiriad IP neu enw defnyddiwr:', +'sp-contributions-toponly' => 'Dangos y diwygiadau diweddaraf yn unig', +'sp-contributions-submit' => 'Chwilier', # What links here 'whatlinkshere' => "Beth sy'n cysylltu yma", @@ -2205,7 +2258,6 @@ $1', 'ipb-edit-dropdown' => "Golygu'r rhesymau dros flocio", 'ipb-unblock-addr' => 'Datflocio $1', 'ipb-unblock' => 'Datflocio enw defnyddiwr neu cyfeiriad IP', -'ipb-blocklist-addr' => 'Y blociau cyfredol ar gyfer $1', 'ipb-blocklist' => 'Dangos y blociau cyfredol', 'ipb-blocklist-contribs' => 'Cyfraniadau $1', 'unblockip' => 'Dadflocio defnyddiwr', @@ -2277,6 +2329,8 @@ Ni allwch greu cyfrif.', 'cant-block-while-blocked' => 'Ni allwch flocio defnyddwyr eraill tra bod bloc arnoch chithau.', 'cant-see-hidden-user' => "Mae'r defnyddiwr yr ydych am ei flocio eisoes wedi ei flocio a'i guddio. Gan nad yw'r gallu \"hideuser\" gennych, ni allwch weld y bloc ar y defnyddiwr na'i olygu.", +'ipbblocked' => 'Ni allwch flocio na dad-flocio defnyddwyr eraill, oherwydd eich bod chi eich hunan wedi eich blocio', +'ipbnounblockself' => "Nid yw'r gallu gennych i ddad-flocio'ch hunan", # Developer tools 'lockdb' => "Cloi'r databas", @@ -2310,6 +2364,18 @@ Sylwch '''na fydd''' y dudalen yn symud os oes yna dudalen o'r enw newydd ar gae Felly, os y gwnewch gamgymeriad wrth ail-enwi tudalen dylai fod yn bosibl ei hail-enwi eto ar unwaith wrth yr enw gwreiddiol. Hefyd, mae'n amhosibl ysgrifennu dros ben tudalen sydd ar gael yn barod. +'''Dalier Sylw!''' +Gall hwn fod yn newid sydyn a llym i dudalen boblogaidd; +gwnewch yn siwr eich bod chi'n deall y canlyniadau cyn mynd ati.", +'movepagetext-noredirectfixer' => "Wrth ddefnyddio'r ffurflen isod byddwch yn ail-enwi tudalen, gan symud ei hanes gyfan i'r enw newydd. +Bydd yr hen deitl yn troi'n dudalen ailgyfeirio i'r teitl newydd. +Byddwch gystal â thrwsio [[Special:DoubleRedirects|ailgyfeiriadau dwbl]] ac [[Special:BrokenRedirects|ailgyfeiriadau tor]]. +Eich cyfrifoldeb chi yw sicrhau bod cysylltiadau wici'n dal i arwain at y man iawn. + +Sylwch '''na fydd''' y dudalen yn symud os oes yna dudalen o'r enw newydd ar gael yn barod (heblaw ei bod hi'n wag neu'n ailgyfeiriad heb unrhyw hanes golygu). +Felly, os y gwnewch gamgymeriad wrth ail-enwi tudalen dylai fod yn bosibl ei hail-enwi eto ar unwaith wrth yr enw gwreiddiol. +Hefyd, mae'n amhosibl ysgrifennu dros ben tudalen sydd yn bodoli'n barod. + '''Dalier Sylw!''' Gall hwn fod yn newid sydyn a llym i dudalen boblogaidd; gwnewch yn siwr eich bod chi'n deall y canlyniadau cyn mynd ati.", @@ -2369,6 +2435,7 @@ nid yw'n bosib cyflawnu'r symud.", 'immobile-source-page' => 'Ni ellir symud y dudalen hon.', 'immobile-target-page' => "Ddim yn gallu symud i'r teitl newydd hwn.", 'imagenocrossnamespace' => 'Ni ellir symud ffeil i barth arall', +'nonfile-cannot-move-to-file' => 'Ni ellir symud unrhywbeth heblaw ffeil i barth y ffeiliau', 'imagetypemismatch' => "Nid yw'r estyniad ffeil newydd yn cyfateb i'r math o ffeil", 'imageinvalidfilename' => "Mae enw'r ffeil darged yn annilys", 'fix-double-redirects' => "Yn diwygio unrhyw ailgyfeiriadau sy'n cysylltu i'r teitl gwreiddiol", @@ -2443,10 +2510,11 @@ Mae cofnod o bob weithred o fewnforio i'w gweld ar y [[Special:Log/import|lòg m 'import-interwiki-namespace' => 'Parth y cyrchir ato:', 'import-upload-filename' => "Enw'r ffeil:", 'import-comment' => 'Sylw:', -'importtext' => "Os gwelwch yn dda, allforiwch y ffeil o'r wici gwreiddiol trwy ddefnyddio'r nodwedd [[Special:Export|allforio]]. Rhowch hi ar gadw ar eich cyfrifiadur, ac yna ei huwchlwytho fan hyn.", +'importtext' => "Allforiwch y ffeil o'r wici gwreiddiol trwy ddefnyddio'r [[Special:Export|nodwedd allforio]]. Rhowch hi ar gadw ar eich cyfrifiadur, ac wedyn ei huwchlwytho fan hyn.", 'importstart' => "Wrthi'n mewnforio...", 'import-revision-count' => '$1 {{PLURAL:$1|diwygiad|diwygiad|ddiwygiad|diwygiad|diwygiad|diwygiad}}', 'importnopages' => "Dim tudalennau i gael i'w mewnforio.", +'imported-log-entries' => 'Mewnforiwyd $1 {{PLURAL:$1|cofnod|cofnod|gofnod|cofnod|cofnod|o gofnodion}} lòg.', 'importfailed' => 'Y mewnforio wedi methu: $1', 'importunknownsource' => "Y gwreiddiol i'w fewnforio o fath anhysbys", 'importcantopen' => "Ni ellid agor y ffeil i'w fewnforio", @@ -2543,6 +2611,8 @@ Mae ffolder dros dro yn eisiau.', 'tooltip-rollback' => "Yn troi golygiad(au) y defnyddiwr diwethaf i'r dudalen hon yn ôl gydag un clic.", 'tooltip-undo' => 'Mae "dadwneud" yn troi\'r golygiad hwn yn ôl ac yn dangos rhagolwg o\'r golygiad adferedig. Gellir ychwanegu rheswm dros y dadwneud yn y crynodeb.', +'tooltip-preferences-save' => "Rhoi'r dewisiadau ar gadw", +'tooltip-summary' => 'Rhowch grynodeb byr', # Metadata 'nodublincore' => "Mae metadata RDF 'Dublin Core' wedi cael ei analluogi ar y gwasanaethwr hwn.", @@ -2637,19 +2707,22 @@ $1", 'nextdiff' => 'Y fersiwn dilynol →', # Media information -'mediawarning' => "'''Rhybudd''': Gallasai'r math hwn o ffeil gynnwys côd maleisus. +'mediawarning' => "'''Rhybudd''': Gallasai'r math hwn o ffeil gynnwys côd maleisus. Mae'n bosib y bydd eich cyfrifiadur yn cael ei danseilio wrth ddefnyddio'r ffeil.", 'imagemaxsize' => "Maint mwyaf y delweddau:
    ''(ar y tudalennau disgrifiad)''", 'thumbsize' => 'Maint mân-lun :', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|tudalen|dudalen|dudalen|tudalen|thudalen|tudalen}}', -'file-info' => '(maint y ffeil: $1, ffurf MIME: $2)', -'file-info-size' => '($1 × $2 picsel, maint y ffeil: $3, ffurf MIME: $4)', +'file-info' => 'maint y ffeil: $1, ffurf MIME: $2', +'file-info-size' => '$1 × $2 picsel, maint y ffeil: $3, ffurf MIME: $4', 'file-nohires' => 'Wedi ei chwyddo hyd yr eithaf.', -'svg-long-desc' => '(Ffeil SVG, maint mewn enw $1 × $2 picsel, maint y ffeil: $3)', +'svg-long-desc' => 'Ffeil SVG, maint mewn enw $1 × $2 picsel, maint y ffeil: $3', 'show-big-image' => 'Maint llawn', 'show-big-image-thumb' => 'Maint y rhagolwg: $1 × $2 picsel', 'file-info-gif-looped' => 'dolennog', 'file-info-gif-frames' => '$1 {{PLURAL:$1|ffrâm}}', +'file-info-png-looped' => 'dolennog', +'file-info-png-repeat' => "wedi'i chwarae {{PLURAL:$1||unwaith|ddwywaith|deirgwaith|$1 gwaith|$1 gwaith}}", +'file-info-png-frames' => '$1 {{PLURAL:$1|ffrâm}}', # Special:NewFiles 'newimages' => 'Oriel y ffeiliau newydd', @@ -2810,6 +2883,7 @@ Ymateb yr amledd gofodol', 'exif-gpsareainformation' => "Enw'r parth GPS", 'exif-gpsdatestamp' => 'Dyddiad GPS', 'exif-gpsdifferential' => 'cywiriad differol y GPS', +'exif-objectname' => 'Teitl byr', # EXIF attributes 'exif-compression-1' => 'Heb ei gywasgu', @@ -2891,6 +2965,8 @@ Ymateb yr amledd gofodol', 'exif-sensingmethod-7' => 'Synhwyrydd trillinol', 'exif-sensingmethod-8' => 'Synhwyrydd lliw llinellol dilyniannol', +'exif-filesource-3' => 'Camera digidol lluniau llonydd', + 'exif-scenetype-1' => "Delwedd wedi ei dynnu'n uniongyrchol", 'exif-customrendered-0' => 'Proses normal', @@ -2967,25 +3043,25 @@ Ymateb yr amledd gofodol', 'limitall' => 'oll', # E-mail address confirmation -'confirmemail' => "Cadarnhau'r cyfeiriad e-bost", -'confirmemail_noemail' => 'Does dim cyfeiriad e-bost dilys wedi ei osod yn eich [[Special:Preferences|dewisiadau defnyddiwr]].', -'confirmemail_text' => "Cyn i chi allu defnyddio'r nodweddion e-bost, mae'n rhaid i {{SITENAME}} ddilysu'ch cyfeiriad e-bost. Pwyswch y botwm isod er mwyn anfon côd cadarnhau i'ch cyfeiriad e-bost. Bydd yr e-bost yn cynnwys cyswllt gyda chôd ynddi; llwythwch y cyswllt ar eich porwr er mwyn cadarnhau dilysrwydd eich cyfeiriad e-bost.", -'confirmemail_pending' => "Mae côd cadarnhau eisoes wedi ei anfon atoch; os ydych newydd greu'ch cyfrif, hwyrach y gallech ddisgwyl rhai munudau amdano cyn gofyn yr eilwaith am gôd newydd.", -'confirmemail_send' => 'Postiwch gôd cadarnhau', -'confirmemail_sent' => "Wedi anfon e-bost er mwyn cadarnhau'r cyfeiriad.", -'confirmemail_oncreate' => "Anfonwyd côd cadarnhau at eich cyfeiriad e-bost. +'confirmemail' => "Cadarnhau'r cyfeiriad e-bost", +'confirmemail_noemail' => 'Does dim cyfeiriad e-bost dilys wedi ei osod yn eich [[Special:Preferences|dewisiadau defnyddiwr]].', +'confirmemail_text' => "Cyn i chi allu defnyddio'r nodweddion e-bost, mae'n rhaid i {{SITENAME}} ddilysu'ch cyfeiriad e-bost. Pwyswch y botwm isod er mwyn anfon côd cadarnhau i'ch cyfeiriad e-bost. Bydd yr e-bost yn cynnwys cyswllt gyda chôd ynddi; llwythwch y cyswllt ar eich porwr er mwyn cadarnhau dilysrwydd eich cyfeiriad e-bost.", +'confirmemail_pending' => "Mae côd cadarnhau eisoes wedi ei anfon atoch; os ydych newydd greu'ch cyfrif, hwyrach y gallech ddisgwyl rhai munudau amdano cyn gofyn yr eilwaith am gôd newydd.", +'confirmemail_send' => 'Postiwch gôd cadarnhau', +'confirmemail_sent' => "Wedi anfon e-bost er mwyn cadarnhau'r cyfeiriad.", +'confirmemail_oncreate' => "Anfonwyd côd cadarnhau at eich cyfeiriad e-bost. Nid oes rhaid wrth y côd wrth fewngofnodi, ond rhaid ei ddefnyddio er mwyn galluogi offer ar y wici sy'n defnyddio e-bost.", -'confirmemail_sendfailed' => "Ni fu'n bosibl danfon yr e-bost cadarnháu oddi wrth {{SITENAME}}. Gwiriwch eich cyfeiriad e-bost am nodau annilys. +'confirmemail_sendfailed' => "Ni fu'n bosibl danfon yr e-bost cadarnháu oddi wrth {{SITENAME}}. Gwiriwch eich cyfeiriad e-bost am nodau annilys. Dychwelodd yr ebostydd: $1", -'confirmemail_invalid' => 'Côd cadarnhau annilys. Efallai fod y côd wedi dod i ben.', -'confirmemail_needlogin' => 'Rhaid $1 er mwyn cadarnhau eich cyfeiriad e-bost.', -'confirmemail_success' => "Mae eich cyfeiriad e-bost wedi'i gadarnhau. +'confirmemail_invalid' => 'Côd cadarnhau annilys. Efallai fod y côd wedi dod i ben.', +'confirmemail_needlogin' => 'Rhaid $1 er mwyn cadarnhau eich cyfeiriad e-bost.', +'confirmemail_success' => "Mae eich cyfeiriad e-bost wedi'i gadarnhau. Cewch [[Special:UserLogin|fewngofnodi]] a mwynhau'r wici.", -'confirmemail_loggedin' => 'Cadarnhawyd eich cyfeiriad e-bost.', -'confirmemail_error' => 'Cafwyd gwall wrth ddanfon eich cadarnhad.', -'confirmemail_subject' => 'Cadarnhâd cyfeiriad e-bost ar {{SITENAME}}', -'confirmemail_body' => 'Mae rhywun (chi, yn fwy na thebyg, o\'r cyfeiriad IP $1) wedi cofrestru\'r cyfrif "$2" ar {{SITENAME}} gyda\'r cyfeiriad e-bost hwn. +'confirmemail_loggedin' => 'Cadarnhawyd eich cyfeiriad e-bost.', +'confirmemail_error' => 'Cafwyd gwall wrth ddanfon eich cadarnhad.', +'confirmemail_subject' => 'Cadarnhâd cyfeiriad e-bost ar {{SITENAME}}', +'confirmemail_body' => 'Mae rhywun (chi, yn fwy na thebyg, o\'r cyfeiriad IP $1) wedi cofrestru\'r cyfrif "$2" ar {{SITENAME}} gyda\'r cyfeiriad e-bost hwn. I gadarnhau mai chi yn wir yw perchennog y cyfrif hwn, ac i alluogi nodweddion e-bost ar {{SITENAME}}, agorwch y cyswllt hwn yn eich porwr: @@ -2996,8 +3072,30 @@ Os *nad* chi sydd berchen y cyfrif hwn, dilynwch y cyswllt hwn er mwyn diddymu c $5 Bydd y côd cadarnhau yn dod i ben am $4.', -'confirmemail_invalidated' => "Diddymwyd y weithred o gadarnhau'r cyfeiriad e-bost", -'invalidateemail' => 'Diddymu cadarnhad y cyfeiriad e-bost.', +'confirmemail_body_changed' => 'Mae rhywun (chi, yn fwy na thebyg, o\'r cyfeiriad IP $1) wedi newid cyfeiriad e-bost y cyfrif "$2" ar {{SITENAME}} i\'r cyfeiriad e-bost hwn. + +I gadarnhau mai chi yn wir yw perchennog y cyfrif hwn, ac i ail-alluogi nodweddion e-bost ar {{SITENAME}}, agorwch y cyswllt hwn yn eich porwr: + +$3 + +Os *nad* chi sydd berchen y cyfrif hwn, dilynwch y cyswllt hwn er mwyn diddymu cadarnhad y cyfeiriad e-bost: + +$5 + +Bydd y côd cadarnhau yn dod i ben am $4.', +'confirmemail_body_set' => 'Mae rhywun (chi, yn fwy na thebyg, o\'r cyfeiriad IP $1) wedi gosod cyfeiriad e-bost y cyfrif "$2" ar {{SITENAME}} i\'r cyfeiriad e-bost hwn. + +I gadarnhau mai chi yn wir yw perchennog y cyfrif hwn, ac i ail-alluogi nodweddion e-bost ar {{SITENAME}}, agorwch y cyswllt hwn yn eich porwr: + +$3 + +Os *nad* chi sydd berchen y cyfrif hwn, dilynwch y cyswllt hwn er mwyn diddymu cadarnhad y cyfeiriad e-bost: + +$5 + +Bydd y côd cadarnhau yn dod i ben am $4.', +'confirmemail_invalidated' => "Diddymwyd y weithred o gadarnhau'r cyfeiriad e-bost", +'invalidateemail' => 'Diddymu cadarnhad y cyfeiriad e-bost.', # Scary transclusion 'scarytranscludedisabled' => '[Analluogwyd cynhwysiad rhyng-wici]', @@ -3037,6 +3135,7 @@ Cadarnhewch eich bod chi wir am ail-greu'r dudalen.", 'table_pager_first' => 'Tudalen gyntaf', 'table_pager_last' => 'Tudalen olaf', 'table_pager_limit' => 'Dangos $1 eitem y dudalen', +'table_pager_limit_label' => 'Eitemau ar bob tudalen:', 'table_pager_limit_submit' => 'Eler', 'table_pager_empty' => 'Dim canlyniadau', @@ -3092,6 +3191,7 @@ Gallwch hefyd [[Special:Watchlist/edit|ddefnyddio\'r rhestr arferol]].', 'version-specialpages' => 'Tudalennau arbennig', 'version-parserhooks' => 'Bachau dosrannydd', 'version-variables' => 'Newidynnau', +'version-skins' => 'Gweddau', 'version-other' => 'Arall', 'version-mediahandlers' => 'Trinyddion cyfryngau', 'version-hooks' => 'Bachau', @@ -3103,6 +3203,13 @@ Gallwch hefyd [[Special:Watchlist/edit|ddefnyddio\'r rhestr arferol]].', 'version-hook-subscribedby' => 'Tanysgrifwyd gan', 'version-version' => '(Fersiwn $1)', 'version-license' => 'Trwydded', +'version-poweredby-credits' => "Mae'r wici hwn wedi'i nerthu gan '''[http://www.mediawiki.org/ MediaWiki]''', hawlfraint © 2001 - $1 $2.", +'version-poweredby-others' => 'eraill', +'version-license-info' => "Meddalwedd rhydd yw MediaWiki; gallwch ei ddefnyddio a'i addasu yn ôl termau'r GNU General Public License a gyhoeddir gan Free Software Foundation; naill ai fersiwn 2 o'r Drwydded, neu unrhyw fersiwn diweddarach o'ch dewis. + +Cyhoeddir MediaWiki yn y gobaith y bydd o ddefnydd, ond HEB UNRHYW WARANT; heb hyd yn oed gwarant ymhlyg o FARCHNADWYEDD nag o FOD YN ADDAS AT RYW BWRPAS ARBENNIG. Gweler y GNU General Public License am fanylion pellach. + +Dylech fod wedi derbyn [{{SERVER}}{{SCRIPTPATH}}/COPYING gopi o GNU General Public License] gyda'r rhaglen hon; os nad ydych, ysgrifennwch at Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, neu [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html gallwch ei ddarllen ar y we].", 'version-software' => 'Meddalwedd gosodedig', 'version-software-product' => 'Cynnyrch', 'version-software-version' => 'Fersiwn', @@ -3173,6 +3280,15 @@ Rhowch enw\'r ffeil heb y rhagddodiad "{{ns:file}}:".', 'tags-edit' => 'golygu', 'tags-hitcount' => '$1 {{PLURAL:$1|newid}}', +# Special:ComparePages +'comparepages' => 'Cymharu tudalennau', +'compare-selector' => "Cymharu diwygiadau gwahanol o'r dudalen", +'compare-page1' => 'Tudalen 1', +'compare-page2' => 'Tudalen 2', +'compare-rev1' => 'Diwygiad 1', +'compare-rev2' => 'Diwygiad 2', +'compare-submit' => 'Cymharer', + # Database error messages 'dberr-header' => 'Mae problem gan y wici hwn', 'dberr-problems' => "Mae'n ddrwg gennym! Mae'r wefan hon yn dioddef anawsterau technegol.", @@ -3189,8 +3305,13 @@ Rhowch enw\'r ffeil heb y rhagddodiad "{{ns:file}}:".', 'htmlform-float-invalid' => "Nid yw'r gwerth a bennwyd gennych yn rif.", 'htmlform-int-toolow' => "Mae'r gwerth a bennwyd gennych yn llai na'r isafswm $1", 'htmlform-int-toohigh' => "Mae'r gwerth a bennwyd gennych yn fwy na'r uchafswm $1", +'htmlform-required' => "Rhaid llanw'r blwch hwn", 'htmlform-submit' => 'Gosoder', 'htmlform-reset' => 'Datod y newidiadau', 'htmlform-selectorother-other' => 'Arall', +# SQLite database support +'sqlite-has-fts' => '$1 gyda chymorth chwilio yr holl destun', +'sqlite-no-fts' => '$1 heb gymorth chwiliad yr holl destun', + ); diff --git a/languages/messages/MessagesDa.php b/languages/messages/MessagesDa.php index d0766ad2..87826fe3 100644 --- a/languages/messages/MessagesDa.php +++ b/languages/messages/MessagesDa.php @@ -9,6 +9,7 @@ * * @author Amjaabc * @author Anders Wegge Jakobsen + * @author Aputtu * @author Boivie * @author Byrial * @author Christian List @@ -47,22 +48,25 @@ $namespaceNames = array( NS_TALK => 'Diskussion', NS_USER => 'Bruger', NS_USER_TALK => 'Brugerdiskussion', - NS_PROJECT_TALK => '$1-diskussion', + NS_PROJECT_TALK => '$1_diskussion', NS_FILE => 'Fil', NS_FILE_TALK => 'Fildiskussion', NS_MEDIAWIKI => 'MediaWiki', - NS_MEDIAWIKI_TALK => 'MediaWiki-diskussion', + NS_MEDIAWIKI_TALK => 'MediaWiki_diskussion', NS_TEMPLATE => 'Skabelon', NS_TEMPLATE_TALK => 'Skabelondiskussion', NS_HELP => 'Hjælp', - NS_HELP_TALK => 'Hjælp-diskussion', + NS_HELP_TALK => 'Hjælp_diskussion', NS_CATEGORY => 'Kategori', NS_CATEGORY_TALK => 'Kategoridiskussion', ); $namespaceAliases = array( - 'Billede' => NS_FILE, - 'Billeddiskussion' => NS_FILE_TALK, + '$1-diskussion' => NS_PROJECT_TALK, + 'Billede' => NS_FILE, + 'Billeddiskussion' => NS_FILE_TALK, + 'MediaWiki-diskussion' => NS_MEDIAWIKI_TALK, + 'Hjælp-diskussion' => NS_HELP_TALK, ); $bookstoreList = array( @@ -71,65 +75,65 @@ $bookstoreList = array( 'inherit' => true, ); -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $linkTrail = '/^([a-zæøå]+)(.*)$/sDu'; $specialPageAliases = array( - 'DoubleRedirects' => array( 'Dobbelte omdirigeringer' ), - 'BrokenRedirects' => array( 'Defekte omdirigeringer' ), - 'Disambiguations' => array( 'Flertydige sider' ), - 'Userlogin' => array( 'Log på', 'Brugerlogind' ), - 'Userlogout' => array( 'Brugerlogud' ), - 'CreateAccount' => array( 'Opret konto' ), + 'DoubleRedirects' => array( 'Dobbelte_omdirigeringer' ), + 'BrokenRedirects' => array( 'Defekte_omdirigeringer' ), + 'Disambiguations' => array( 'Flertydige_sider' ), + 'Userlogin' => array( 'Log_på', 'Brugerlogind' ), + 'Userlogout' => array( 'Log_ud', 'Brugerlogud' ), + 'CreateAccount' => array( 'Opret_konto' ), 'Preferences' => array( 'Indstillinger' ), 'Watchlist' => array( 'Overvågningsliste' ), - 'Recentchanges' => array( 'Seneste ændringer' ), + 'Recentchanges' => array( 'Seneste_ændringer' ), 'Listfiles' => array( 'Filer', 'Filliste' ), - 'Newimages' => array( 'Nye filer' ), + 'Newimages' => array( 'Nye_filer' ), 'Listusers' => array( 'Brugerliste', 'Bruger' ), 'Listgrouprights' => array( 'Grupperettighedsliste' ), 'Statistics' => array( 'Statistik' ), - 'Randompage' => array( 'Tilfældig side' ), - 'Lonelypages' => array( 'Forældreløse sider' ), - 'Uncategorizedpages' => array( 'Ukategoriserede sider' ), - 'Uncategorizedcategories' => array( 'Ukategoriserede kategorier' ), - 'Uncategorizedimages' => array( 'Ukategoriserede filer' ), - 'Uncategorizedtemplates' => array( 'Ukategoriserede skabeloner' ), - 'Unusedcategories' => array( 'Ubrugte kategorier' ), - 'Unusedimages' => array( 'Ubrugte filer' ), - 'Wantedpages' => array( 'Ønskede sider' ), - 'Wantedcategories' => array( 'Ønskede kategorier' ), - 'Mostlinked' => array( 'Sider med flest henvisninger' ), - 'Mostlinkedcategories' => array( 'Kategorier med flest sider' ), - 'Mostlinkedtemplates' => array( 'Hyppigst brugte skabeloner' ), - 'Mostimages' => array( 'Mest brugte filer' ), - 'Mostcategories' => array( 'Sider med flest kategorier' ), - 'Mostrevisions' => array( 'Sider med flest redigeringer' ), - 'Fewestrevisions' => array( 'Sider med færrest redigeringer' ), - 'Shortpages' => array( 'Korteste sider' ), - 'Longpages' => array( 'Længste sider' ), - 'Newpages' => array( 'Nye sider' ), - 'Ancientpages' => array( 'Ældste sider' ), + 'Randompage' => array( 'Tilfældig_side' ), + 'Lonelypages' => array( 'Forældreløse_sider' ), + 'Uncategorizedpages' => array( 'Ukategoriserede_sider' ), + 'Uncategorizedcategories' => array( 'Ukategoriserede_kategorier' ), + 'Uncategorizedimages' => array( 'Ukategoriserede_filer' ), + 'Uncategorizedtemplates' => array( 'Ukategoriserede_skabeloner' ), + 'Unusedcategories' => array( 'Ubrugte_kategorier' ), + 'Unusedimages' => array( 'Ubrugte_filer' ), + 'Wantedpages' => array( 'Ønskede_sider' ), + 'Wantedcategories' => array( 'Ønskede_kategorier' ), + 'Mostlinked' => array( 'Sider_med_flest_henvisninger' ), + 'Mostlinkedcategories' => array( 'Kategorier_med_flest_sider' ), + 'Mostlinkedtemplates' => array( 'Hyppigst_brugte_skabeloner' ), + 'Mostimages' => array( 'Mest_brugte_filer' ), + 'Mostcategories' => array( 'Sider_med_flest_kategorier' ), + 'Mostrevisions' => array( 'Sider_med_flest_redigeringer' ), + 'Fewestrevisions' => array( 'Sider_med_færrest_redigeringer' ), + 'Shortpages' => array( 'Korteste_sider' ), + 'Longpages' => array( 'Længste_sider' ), + 'Newpages' => array( 'Nye_sider' ), + 'Ancientpages' => array( 'Ældste_sider' ), 'Deadendpages' => array( 'Blindgydesider' ), - 'Protectedpages' => array( 'Beskyttede sider' ), - 'Protectedtitles' => array( 'Beskyttede titler' ), - 'Allpages' => array( 'Alle sider' ), + 'Protectedpages' => array( 'Beskyttede_sider' ), + 'Protectedtitles' => array( 'Beskyttede_titler' ), + 'Allpages' => array( 'Alle_sider' ), 'Prefixindex' => array( 'Præfiksindeks' ), - 'Ipblocklist' => array( 'Blokerede adresser' ), + 'Ipblocklist' => array( 'Blokerede_adresser' ), 'Specialpages' => array( 'Specialsider' ), 'Contributions' => array( 'Bidrag' ), 'Emailuser' => array( 'E-mail' ), - 'Confirmemail' => array( 'Bekræft e-mail' ), - 'Whatlinkshere' => array( 'Hvad linker hertil' ), - 'Recentchangeslinked' => array( 'Relaterede ændringer' ), - 'Movepage' => array( 'Flyt side' ), + 'Confirmemail' => array( 'Bekræft_e-mail' ), + 'Whatlinkshere' => array( 'Hvad_linker_hertil' ), + 'Recentchangeslinked' => array( 'Relaterede_ændringer' ), + 'Movepage' => array( 'Flyt_side' ), 'Blockme' => array( 'Proxyspærring' ), 'Booksources' => array( 'ISBN-søgning' ), 'Categories' => array( 'Kategorier' ), 'Export' => array( 'Eksporter' ), 'Allmessages' => array( 'MediaWiki-systemmeddelelser' ), 'Log' => array( 'Loglister' ), - 'Blockip' => array( 'Bloker adresse' ), + 'Blockip' => array( 'Bloker_adresse' ), 'Undelete' => array( 'Gendannelse' ), 'Import' => array( 'Importere' ), 'Lockdb' => array( 'Databasespærring' ), @@ -137,24 +141,28 @@ $specialPageAliases = array( 'Userrights' => array( 'Brugerrettigheder' ), 'MIMEsearch' => array( 'MIME-type-søgning' ), 'FileDuplicateSearch' => array( 'Filduplikatsøgning' ), - 'Unwatchedpages' => array( 'Uovervågede sider' ), + 'Unwatchedpages' => array( 'Uovervågede_sider' ), 'Listredirects' => array( 'Henvisninger' ), 'Revisiondelete' => array( 'Versionssletning' ), - 'Unusedtemplates' => array( 'Ubrugte skabeloner' ), - 'Randomredirect' => array( 'Tilfældig henvisning' ), - 'Mypage' => array( 'Min brugerside' ), - 'Mytalk' => array( 'Min diskussionsside' ), - 'Mycontributions' => array( 'Mine bidrag' ), + 'Unusedtemplates' => array( 'Ubrugte_skabeloner' ), + 'Randomredirect' => array( 'Tilfældig_henvisning' ), + 'Mypage' => array( 'Min_brugerside' ), + 'Mytalk' => array( 'Min_diskussionsside' ), + 'Mycontributions' => array( 'Mine_bidrag' ), 'Listadmins' => array( 'Administratorer' ), 'Listbots' => array( 'Robotter' ), - 'Popularpages' => array( 'Populære sider' ), + 'Popularpages' => array( 'Populære_sider' ), 'Search' => array( 'Søgning' ), - 'Resetpass' => array( 'Nulstil kodeord' ), - 'Withoutinterwiki' => array( 'Manglende interwikilinks' ), - 'MergeHistory' => array( 'Sammenfletning af historikker' ), + 'Resetpass' => array( 'Nulstil_kodeord' ), + 'Withoutinterwiki' => array( 'Manglende_interwikilinks' ), + 'MergeHistory' => array( 'Sammenfletning_af_historikker' ), 'Filepath' => array( 'Filsti' ), - 'Invalidateemail' => array( 'Ugyldiggør e-mail' ), - 'DeletedContributions' => array( 'Slettede bidrag' ), + 'Invalidateemail' => array( 'Ugyldiggør_e-mail' ), + 'Blankpage' => array( 'Tom_Side' ), + 'LinkSearch' => array( 'Link_Søgning' ), + 'DeletedContributions' => array( 'Slettede_bidrag' ), + 'Activeusers' => array( 'Aktive_Brugere' ), + 'ComparePages' => array( 'Sammenlign_Sider' ), ); $dateFormats = array( @@ -187,8 +195,7 @@ $messages = array( 'tog-editsection' => 'Redigér afsnit ved hjælp af [redigér]-henvisninger', 'tog-editsectiononrightclick' => 'Redigér afsnit ved at højreklikke på deres titler (JavaScript)', 'tog-showtoc' => 'Vis indholdsfortegnelse (på sider med mere end tre afsnit)', -'tog-rememberpassword' => 'Husk adgangskode til næste besøg fra denne computer', -'tog-editwidth' => 'Udvid redigeringsboksen til at fylde hele skærmen', +'tog-rememberpassword' => 'Husk mit login på denne computer (højst $1 {{PLURAL:$1|dag|dage}})', 'tog-watchcreations' => 'Tilføj sider jeg opretter til min overvågningsliste', 'tog-watchdefault' => 'Tilføj sider jeg redigerer til min overvågningsliste', 'tog-watchmoves' => 'Tilføj sider jeg flytter til min overvågningsliste', @@ -328,31 +335,21 @@ $messages = array( 'faqpage' => 'Project:OSS', # Vector skin -'vector-action-addsection' => 'Nyt emne', -'vector-action-delete' => 'Slet', -'vector-action-move' => 'Flyt', -'vector-action-protect' => 'Beskyt', -'vector-action-undelete' => 'Gendan', -'vector-action-unprotect' => 'Fjern beskyttelse', -'vector-namespace-category' => 'Kategori', -'vector-namespace-help' => 'Hjælpeside', -'vector-namespace-image' => 'Fil', -'vector-namespace-main' => 'Side', -'vector-namespace-media' => 'Medieside', -'vector-namespace-mediawiki' => 'Besked', -'vector-namespace-project' => 'Projektside', -'vector-namespace-special' => 'Specialside', -'vector-namespace-talk' => 'Diskussion', -'vector-namespace-template' => 'Skabelon', -'vector-namespace-user' => 'Brugerside', -'vector-view-create' => 'Opret', -'vector-view-edit' => 'Redigér', -'vector-view-history' => 'Se historik', -'vector-view-view' => 'Vis', -'vector-view-viewsource' => 'Se kilden', -'actions' => 'Handlinger', -'namespaces' => 'Navnerum', -'variants' => 'Varianter', +'vector-action-addsection' => 'Nyt emne', +'vector-action-delete' => 'Slet', +'vector-action-move' => 'Flyt', +'vector-action-protect' => 'Beskyt', +'vector-action-undelete' => 'Gendan', +'vector-action-unprotect' => 'Fjern beskyttelse', +'vector-simplesearch-preference' => 'Aktivér forbedrede søgeforslag (kun Vector-udseendet)', +'vector-view-create' => 'Opret', +'vector-view-edit' => 'Redigér', +'vector-view-history' => 'Se historik', +'vector-view-view' => 'Vis', +'vector-view-viewsource' => 'Se kilden', +'actions' => 'Handlinger', +'namespaces' => 'Navnerum', +'variants' => 'Varianter', 'errorpagetitle' => 'Fejl', 'returnto' => 'Tilbage til $1.', @@ -413,6 +410,9 @@ For mange brugere prøver at vise denne side. Vent et øjeblik, før du prøver at vise denne side ige. $1', +'pool-timeout' => 'Timeout mens man venter på låsningen', +'pool-queuefull' => 'Pool køen er fuld', +'pool-errorunknown' => 'Ukendt fejl', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Om {{SITENAME}}', @@ -574,7 +574,8 @@ Din konto er blevet oprettet. Glem ikke at personliggøre dine [[Special:Prefere 'yourname' => 'Dit brugernavn:', 'yourpassword' => 'Din adgangskode:', 'yourpasswordagain' => 'Gentag adgangskode', -'remembermypassword' => 'Husk min adgangskode til næste gang.', +'remembermypassword' => 'Husk mit brugernavn på denne computer (højst $1 {{PLURAL:$1|dag|dage}})', +'securelogin-stick-https' => 'Behold forbindelsen til HTTPS efter login', 'yourdomainname' => 'Dit domænenavn', 'externaldberror' => 'Der er opstået en fejl i en ekstern adgangsdatabase, eller du har ikke rettigheder til at opdatere denne.', 'login' => 'Log på', @@ -591,6 +592,7 @@ Din konto er blevet oprettet. Glem ikke at personliggøre dine [[Special:Prefere 'gotaccount' => "Du har allerede en brugerkonto? '''$1'''.", 'gotaccountlink' => 'Log på', 'createaccountmail' => 'via e-mail', +'createaccountreason' => 'Begrundelse:', 'badretype' => 'De indtastede adgangskoder er ikke ens.', 'userexists' => 'Det brugernavn du har valgt er allerede i brug. Vælg venligst et andet brugernavn.', 'loginerror' => 'Logon mislykket', @@ -610,6 +612,7 @@ Kontrollér stavemåden, eller [[Special:UserLogin/signup|opret en ny konto]].', 'wrongpasswordempty' => 'Du glemte at indtaste password. Prøv igen.', 'passwordtooshort' => 'Adgangskoden skal mindst være på $1 {{PLURAL:$1|tegn|tegn}}.', 'password-name-match' => 'Kodeordet må ikke være det samme som brugernavnet.', +'password-login-forbidden' => 'Brugen af dette brugernavn og adgangskode er blevet forbudt.', 'mailmypassword' => 'Send nyt password', 'passwordremindertitle' => 'Nyt password til {{SITENAME}}', 'passwordremindertext' => 'Nogen (sandsynligvis dig, fra IP-adressen $1) @@ -651,6 +654,9 @@ Vent venligst før du prøver igen.', 'loginlanguagelabel' => 'Sprog: $1', 'suspicious-userlogout' => 'Din anmodning om at logge ud blev nægtet, fordi det ser ud som den blev sendt af en ødelagt browser eller caching proxy.', +# E-mail sending +'php-mail-error-unknown' => "Ukendt fejl i PHP's mail()-funtion", + # Password reset dialog 'resetpass' => 'Skift adgangskode', 'resetpass_announce' => 'Log på med den via e-mail tilsendte password. For at afslutte tilmeldingen, skal du nu vælge et nyt password.', @@ -702,9 +708,10 @@ Du har muligvis allerede skiftet din adgangskode eller anmodet om en ny midlerti 'showlivepreview' => 'Live-forhåndsvisning', 'showdiff' => 'Vis ændringer', 'anoneditwarning' => 'Du arbejder uden at være logget på. Istedet for brugernavn vises din IP-adresse i versionshistorikken.', +'anonpreviewwarning' => "''Du er ikke logget ind. Hvis du gemmer, registreres din IP-adresse i versionshistorikken.''", 'missingsummary' => "'''Påmindelse:''' Du har ikke angivet en redigeringsbeskrivelse. Hvis du igen trykker på \"Gem\", gemmes ændringerne uden en beskrivelse.", 'missingcommenttext' => 'Indtast venligst et resume.', -'missingcommentheader' => "'''BEMÆRK:''' du har ikke angivet en overskrift i feltet „Emne:“. Hvis du igen trykker på „Gem side“, gemmes bearbejdningen uden overskrift.", +'missingcommentheader' => "'''Bemærk:''' Du har ikke angivet en overskrift i feltet „Emne:“ for denne kommentar. Hvis du trykker „Gem side“ én gang til, gemmes dine ændringer uden overskrift.", 'summary-preview' => 'Forhåndsvisning af beskrivelsen:', 'subject-preview' => 'Forhåndsvisning af emnet:', 'blockedtitle' => 'Brugeren er blokeret', @@ -783,7 +790,11 @@ Loggen over den seneste blokering ses nedenfor:', 'usercsspreview' => "'''Husk at dette kun er en forhåndsvisning af dit eget css. '''Det er ikke gemt endnu!'''", 'userjspreview' => "'''Husk at du kun tester/forhåndsviser dit eget javascript, det er ikke gemt endnu!'''", -'userinvalidcssjstitle' => "'''Advarsel:''' Der findes intet skin „$1“. Tænk på, at brugerspecifikke .css- og .js-sider begynder med små bogstaver, altså f.eks. ''{{ns:user}}:Hansen/monobook.css'' og ikke ''{{ns:user}}:Hansen/Monobook.css''.", +'sitecsspreview' => "'''Husk, at dette kun er en forhåndsvisning af denne CSS.''' +'''Det er endnu ikke gemt!'''", +'sitejspreview' => "'''Husk, at du kun ser en forhåndsvisning af denne JavaScriptkode.''' +'''Det er endnu ikke gemt!'''", +'userinvalidcssjstitle' => "'''Advarsel:''' Der findes intet skin „$1“. Tænk på, at brugerspecifikke .css- og .js-sider begynder med små bogstaver, altså f.eks. ''{{ns:user}}:Hansen/vector.css'' og ikke ''{{ns:user}}:Hansen/Vector.css''.", 'updated' => '(Opdateret)', 'note' => "'''Bemærk:'''", 'previewnote' => 'Husk at dette er kun en forhåndsvisning, siden er ikke gemt endnu!', @@ -820,8 +831,6 @@ Læg ingen tekster ind, hvis du ikke kan acceptere at disse kan ændres. Du bekræfter hermed også, at du selv har skrevet denne tekst eller kopieret den fra en fri kilde (se $1 for detaljer). '''OVERFØR IKKE OPHAVSRETSLIGT BESKYTTET INDHOLD UDEN TILLADELSE!'''", -'longpagewarning' => "'''ADVARSEL: Denne side er $1 kilobyte stor; nogle browsere kan have problemer med at redigere sider der nærmer sig eller er større end 32 kb. -Overvej om siden kan opdeles i mindre dele.'''", 'longpageerror' => "'''FEJL: Teksten, som du ville gemme, er $1 kB stor. Det er større end det tilladet maksimum på $2 kB. Det er ikke muligt at gemme.'''", 'readonlywarning' => "'''ADVARSEL: Databasen er låst på grund af vedligeholdelse, så du kan ikke gemme dine ændringer lige nu. Det kan godt være en god ide at kopiere din tekst til en tekstfil, så du kan gemme den til senere.''' @@ -990,6 +999,8 @@ $1", 'logdelete-failure' => "'''Kunne ikke ændre logsynligheden.''' $1", 'revdel-restore' => 'Ændre synlighed', +'revdel-restore-deleted' => 'slettede redigeringer', +'revdel-restore-visible' => 'synlige ændringer', 'pagehist' => 'Sidehistorik', 'deletedhist' => 'Slettet historik', 'revdelete-content' => 'indhold', @@ -1059,11 +1070,13 @@ Vær opmæksom på at bevare kontinuiteten i sidehistorikken. # Diffs 'history-title' => 'Versionshistorik for "$1"', 'difference' => '(Forskel mellem versioner)', +'difference-multipage' => '(Forskel mellem sider)', 'lineno' => 'Linje $1:', 'compareselectedversions' => 'Sammenlign valgte versioner', 'showhideselectedversions' => 'Vis/skjul udvalgte versioner', 'editundo' => 'fjern redigering', -'diff-multi' => '(Versionssammenligningen medtager {{plural:$1|en mellemliggende version|$1 mellemliggende versioner}}.)', +'diff-multi' => '({{PLURAL:$1|En mellemliggende version|$1 mellemliggende versioner}} af {{PLURAL:$2|en bruger|$2 brugere}} ikke vist)', +'diff-multi-manyusers' => '({{PLURAL:$1|En mellemliggende version|$1 mellemliggende versioner}} af mere end $2 {{PLURAL:$2|bruger|brugere}} ikke vist)', # Search results 'searchresults' => 'Søgeresultater', @@ -1098,6 +1111,7 @@ Vær opmæksom på at bevare kontinuiteten i sidehistorikken. 'searchprofile-everything-tooltip' => 'Søg i alt indhold (inklusive diskussionssider)', 'searchprofile-advanced-tooltip' => 'Søg i bestemte navnerum', 'search-result-size' => '$1 ({{PLURAL:$2|et ord|$2 ord}})', +'search-result-category-size' => '{{PLURAL:$1|1 medlem|$1 medlemmer}} ({{PLURAL:$2|1 underkategori|$2 underkategorier}}, {{PLURAL:$3|1 fil|$3 filer}})', 'search-result-score' => 'Relevans: $1%', 'search-redirect' => '(omdiriger $1)', 'search-section' => '(sektion $1)', @@ -1173,6 +1187,7 @@ Du kan prøve at bruge \"all:\" som præfiks for at søge i alt indhold (inkl. d 'contextlines' => 'Linjer pr. resultat', 'contextchars' => 'Tegn pr. linje i resultatet', 'stub-threshold' => 'Grænse for visning af henvisning som artikelstump:', +'stub-threshold-disabled' => 'Deaktiveret', 'recentchangesdays' => 'Antal dage som skal vises i seneste ændringer:', 'recentchangesdays-max' => '(maks. $1 {{PLURAL:$1|dag|dage}})', 'recentchangescount' => 'Antal redigeringer som skal vises som standard:', @@ -1206,6 +1221,7 @@ Her er en tilfældig genereret værdi som du kan bruge: $1', 'prefs-files' => 'Filer', 'prefs-custom-css' => 'Personlig CSS', 'prefs-custom-js' => 'Personlig JavaScript', +'prefs-common-css-js' => 'Fælles CSS/JS for alle udseender:', 'prefs-reset-intro' => 'Du kan bruge denne side til at tilbagestille alle dine indstillinger til standardindstillingerne. Det kan ikke gøres om.', 'prefs-emailconfirm-label' => 'Bekræftelse af e-mail:', @@ -1221,7 +1237,7 @@ Det kan ikke gøres om.', 'yournick' => 'Signatur:', 'prefs-help-signature' => 'Kommentarer på diskussionssider bør signeres med "~~~~" som vil blive konverteret til din signatur og et tidsstempel.', 'badsig' => 'Syntaksen i underskriften er ugyldig; kontroller venligst den brugte HTML.', -'badsiglength' => 'Din sigantur er for lang. Den må højst indeholde {{PLURAL:$1|}}$1 tegn.', +'badsiglength' => 'Din signatur er for lang. Den må højst indeholde {{PLURAL:$1|}}$1 tegn.', 'yourgender' => 'Køn:', 'gender-unknown' => 'Uspecificeret', 'gender-male' => 'Mand', @@ -1243,9 +1259,15 @@ Du kan også vælge at lade andre brugere kontakte dig gennem din bruger- eller 'prefs-advancedrendering' => 'Avancerede indstillinger', 'prefs-advancedsearchoptions' => 'Avancerede indstillinger', 'prefs-advancedwatchlist' => 'Avancerede indstillinger', -'prefs-display' => 'Indstillinger for visning', +'prefs-displayrc' => 'Indstillinger for visning', +'prefs-displaysearchoptions' => 'Visningsmuligheder', +'prefs-displaywatchlist' => 'Visningsmuligheder', 'prefs-diffs' => 'Forskelle', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'E-mailadressen ser ud til at være gyldig', +'email-address-validity-invalid' => 'Indtast en gyldig e-mail adresse', + # User rights 'userrights' => 'Håndtering af brugerrettigheder', 'userrights-lookup-user' => 'Administrér brugergrupper', @@ -1329,6 +1351,7 @@ Du kan også vælge at lade andre brugere kontakte dig gennem din bruger- eller 'right-hideuser' => 'Blokere et brugernavn og skjule navnet', 'right-ipblock-exempt' => 'Redigere fra blokerede IP-adresser', 'right-proxyunbannable' => 'Redigere gennem automatisk blokeret proxy', +'right-unblockself' => 'Fjerne blokering af dem selv', 'right-protect' => 'Ændre beskyttelse og redigere beskyttede sider', 'right-editprotected' => 'Ændre beskyttede sider (uden nedarvet sidebeskyttelse)', 'right-editinterface' => 'Ændre brugergrænsefladens tekster', @@ -1351,7 +1374,6 @@ Du kan også vælge at lade andre brugere kontakte dig gennem din bruger- eller 'right-siteadmin' => 'Låse og frigive databasen', 'right-reset-passwords' => 'Ændre andre brugeres adgangskode', 'right-override-export-depth' => 'Eksportere sider inkl. henviste sider op til en dybde på 5', -'right-versiondetail' => 'Se den udvidede information om programversion', 'right-sendemail' => 'Sende e-mail til andre brugere', # User rights log @@ -1402,14 +1424,9 @@ Du kan også vælge at lade andre brugere kontakte dig gennem din bruger- eller 'recentchanges-legend' => 'Indstillinger for seneste ændringer', 'recentchangestext' => "På denne side kan du følge de seneste ændringer på '''{{SITENAME}}'''.", 'recentchanges-feed-description' => 'Med dette feed kan du følge de seneste ændringer på {{SITENAME}}.', -'recentchanges-label-legend' => 'Tegnforklaring: $1.', -'recentchanges-legend-newpage' => '$1 – ny side', 'recentchanges-label-newpage' => 'Denne redigering oprettede en ny side', -'recentchanges-legend-minor' => '$1 – mindre ændring', 'recentchanges-label-minor' => 'Dette er en mindre ændring', -'recentchanges-legend-bot' => '$1 – botændring', 'recentchanges-label-bot' => 'Denne redigering blev udført af en bot', -'recentchanges-legend-unpatrolled' => '$1 – upatruljeret ændring', 'recentchanges-label-unpatrolled' => 'Denne redigering er endnu ikke blevet patruljeret', 'rcnote' => "Herunder ses {{PLURAL:$1|'''1''' ændring|de sidste '''$1''' ændringer}} fra {{PLURAL:$2|i dag|de sidste '''$2''' dage}} fra den $4, kl. $5.", 'rcnotefrom' => "Nedenfor er op til '''$1''' ændringer siden '''$2''' vist.", @@ -1456,6 +1473,9 @@ Du kan også vælge at lade andre brugere kontakte dig gennem din bruger- eller 'upload_directory_missing' => 'upload-kataloget ($1) findes ikke. Webserveren har ikke mulighed for at oprette kataloget.', 'upload_directory_read_only' => 'Webserveren har ingen skriverettigheder for upload-kataloget ($1).', 'uploaderror' => 'Fejl under oplægning af fil', +'upload-recreate-warning' => "'''Advarsel: En fil med det navn, er blevet slettet eller flyttet.''' + +Sletnings- og flytnings-loggen for denne side leveres her for nemheds skyld:", 'uploadtext' => "Brug formularen herunder til at lægge filer op. Gå til [[Special:FileList|listen over filer]] for at se eller søge i eksisterende filer. (Gen-)oplægnigner logges i [[Special:Log/upload|oplægningsloggen]], sletninger i [[Special:Log/delete|sletteloggen]]. @@ -1487,6 +1507,17 @@ Brug en henvisning af en de følgende typer for at bruge en fil på en side: 'filetype-unwanted-type' => "'''\".\$1\"''' er ikke en foretrukken filtype. {{PLURAL:\$3|Den foretrukne filtype|De foretrukne filtyper}} er \$2.", 'filetype-banned-type' => "'''\".\$1\"''' er en uønsket filtype. {{PLURAL:\$3|Den tilladte filtype|De tillatdte filtyper}} er \$2.", 'filetype-missing' => 'Filen der skal uploades har ingen endelse (f.eks. „.jpg“).', +'empty-file' => 'Den fil du indsendte var tom.', +'file-too-large' => 'Den fil du indsendte var for stor.', +'filename-tooshort' => 'Filnavnet er for kort.', +'filetype-banned' => 'Denne type fil er ikke tilladt', +'verification-error' => 'Denne fil bestod ikke fil verifikationen.', +'hookaborted' => 'Ændringen du forsøgte at gøre blev afbrudt af en udvidelses hook.', +'illegal-filename' => 'Filnavnet er ikke tilladt.', +'overwrite' => 'Overskrivning af en eksisterende fil er ikke tilladt.', +'unknown-error' => 'En ukendt fejl opstod.', +'tmp-create-error' => 'Kunne ikke oprette temporær fil.', +'tmp-write-error' => 'Fejl ved skrivning af temporær fil.', 'large-file' => 'Filstørrelsen skal så vidt muligt ikke overstige $1. Denne fil er $2 stor.', 'largefileserver' => 'Filen er større end den på serveren indstillede maksimale størrelse.', 'emptyfile' => 'Filen du lagde op lader til at være tom. Det kan skyldes en slåfejl i filnavnet. Kontroller om du virkelig ønsker at lægge denne fil op.', @@ -1514,13 +1545,14 @@ Hvis du fortsat vil lægge filen op, bedes du gå tilbage og bruge et nyt navn. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Denne fil er en bublet af {{PLURAL:$1|den nedenstående fil|de nedenstående $1 filer}}:', 'file-deleted-duplicate' => 'En fil identisk med denne fil ([[:$1]]) er tidligere blevet slettet. Du bør tjekke den fils sletningshistorik før du prøver at genoplægge den.', -'successfulupload' => 'Oplægningen er gennemført', 'uploadwarning' => 'Advarsel', 'uploadwarning-text' => 'Vær venlig at ændre filbeskrivelsen nedenfor og prøv igen.', 'savefile' => 'Gem fil', 'uploadedimage' => 'lagde "[[$1]]" op', 'overwroteimage' => 'lagde en ny version af "[[$1]]" op', 'uploaddisabled' => 'Desværre er funktionen til at lægge filer op afbrudt på denne server.', +'copyuploaddisabled' => 'Upload via URL er slået fra.', +'uploadfromurl-queued' => 'Din upload er blevet sat i kø.', 'uploaddisabledtext' => 'Oplægning af filer er deaktiveret.', 'php-uploaddisabledtext' => 'Oplægning af filer er forhindret i PHP. Tjek indstillingen for file_uploads.', 'uploadscripted' => 'Denne fil indeholder HTML eller script-kode, der i visse tilfælde can fejlfortolkes af en browser.', @@ -1539,6 +1571,14 @@ Hvis du fortsat vil lægge filen op, bedes du gå tilbage og bruge et nyt navn. Overvej om det er passende at fortsætte med uploadet. Sletningsloggen for denne fil er gengivet herunder.", 'filename-bad-prefix' => "Navnet på filen du er ved at lægge op begynder med '''\"\$1\"'''. Dette er et ikkebeskrivende navn, der typisk er skabt automatisk af et digitalkamera. Vær venlig at vælge et mere beskrivende navn på dit billede.", +'upload-success-subj' => 'Oplægningen er gennemført', +'upload-success-msg' => 'Din upload fra [$2] lykkedes. Den er tilgængelig her: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Upload problem', +'upload-failure-msg' => 'Der var et problem med din upload fra [$2]: + +$1', +'upload-warning-subj' => 'Uploadadvarsel', +'upload-warning-msg' => 'Der var et problem med din upload fra [$2]. Du kan vende tilbage til [[Special:Upload/stash/$1|upload form]] for at løse dette problem.', 'upload-proto-error' => 'Forkert protokol', 'upload-proto-error-text' => 'Adressen skal begynde med http:// eller ftp://.', @@ -1598,6 +1638,7 @@ For optimal sikkerhed er img_auth.php deaktiveret.", 'listfiles_search_for' => 'Søge efter fil:', 'imgfile' => 'Fil', 'listfiles' => 'Filliste', +'listfiles_thumb' => 'Thumbnail', 'listfiles_date' => 'Dato', 'listfiles_name' => 'Navn', 'listfiles_user' => 'Bruger', @@ -1712,8 +1753,8 @@ Husk at kontrollere for andre henvisninger til skabelonerne før de slettes.', 'statistics-edits' => 'Redigeringer siden {{SITENAME}} blev oprettet', 'statistics-edits-average' => 'Gennemsnitligt antal redigeringer per side', 'statistics-views-total' => 'Visninger i alt', +'statistics-views-total-desc' => 'Visninger på ikke-eksisterende sider og special sider er ikke inkluderet', 'statistics-views-peredit' => 'Visninger per redigering', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Jobkøens] længde', 'statistics-users' => 'Registrerede [[Special:ListUsers|brugere]]', 'statistics-users-active' => 'Aktive brugere', 'statistics-users-active-desc' => 'Brugere som har udført handlinger i {{PLURAL:$1|det sidste døgn|de sidste $1 dage}}', @@ -1726,7 +1767,7 @@ Husk at kontrollere for andre henvisninger til skabelonerne før de slettes.', 'doubleredirects' => 'Dobbelte omdirigeringer', 'doubleredirectstext' => 'Dette er en liste over sider som omdirigerer til andre omdirigeringssider. Hver linje indeholder henvisninger til den første og den anden omdirigering, såvel som til målet for den anden omdirigering som sædvanligvis er den "rigtige" målside som den første omdirigering burde henvise til. -Overstregede poster er rettede.', +Overstregede poster er rettede.', 'double-redirect-fixed-move' => '[[$1]] blev flyttet og er nu en omdirigering til [[$2]]', 'double-redirect-fixer' => 'Omdirigerings-retter', @@ -1749,6 +1790,8 @@ Hver linje indeholder henvisninger til den første og den anden omdirigering, s 'nmembers' => '$1 {{PLURAL:$1|medlem|medlemmer}}', 'nrevisions' => '{{PLURAL:$1|1 ændring|$1 ændringer}}', 'nviews' => '{{PLURAL:$1|1 visning|$1 visninger}}', +'nimagelinks' => 'Brugt på $1 {{PLURAL:$1|side|sider}}', +'ntransclusions' => 'brugt på $1 {{PLURAL:$1|side|sider}}', 'specialpage-empty' => 'Der er ingen resultater at vise.', 'lonelypages' => 'Forældreløse sider', 'lonelypagestext' => 'Følgende sider er ikke henvist til eller inkluderet på andre sider på {{SITENAME}}:', @@ -1905,34 +1948,40 @@ Der findes muligvis [[{{MediaWiki:Listgrouprights-helppage}}|yderligere informat 'listgrouprights-removegroup-self-all' => 'Kan fjerne alle grupper fra egen konto', # E-mail user -'mailnologin' => 'Du er ikke logget på', -'mailnologintext' => 'Du skal være [[Special:UserLogin|logget på]] og have en gyldig e-mailadresse sat i dine [[Special:Preferences|indstillinger]] for at sende e-mail til andre brugere.', -'emailuser' => 'E-mail til denne bruger', -'emailpage' => 'E-mail bruger', -'emailpagetext' => 'Du kan bruge formularen nedenfor til at sende en e-mail til denne bruger. +'mailnologin' => 'Du er ikke logget på', +'mailnologintext' => 'Du skal være [[Special:UserLogin|logget på]] og have en gyldig e-mailadresse sat i dine [[Special:Preferences|indstillinger]] for at sende e-mail til andre brugere.', +'emailuser' => 'E-mail til denne bruger', +'emailpage' => 'E-mail bruger', +'emailpagetext' => 'Du kan bruge formularen nedenfor til at sende en e-mail til denne bruger. Den e-mail-adresse du har angivet i [[Special:Preferences|dine indstillinger]] vil dukke op i "fra"-feltet på e-mailen, så modtageren kan svare dig.', -'usermailererror' => 'E-mail-modulet returnerede en fejl:', -'defemailsubject' => 'E-mail fra {{SITENAME}}', -'noemailtitle' => 'Ingen e-mail-adresse', -'noemailtext' => 'Denne bruger har ikke angivet en gyldig e-mail-adresse.', -'nowikiemailtitle' => 'E-mail er ikke tilladt', -'nowikiemailtext' => 'Denne bruger har valgt ikke at modtage e-mail fra andre brugere.', -'email-legend' => 'Send e-post til en anden {{SITENAME}}-bruger.', -'emailfrom' => 'Fra:', -'emailto' => 'Til:', -'emailsubject' => 'Emne:', -'emailmessage' => 'Besked:', -'emailsend' => 'Send', -'emailccme' => 'Send en kopi af denne e-mail til mig', -'emailccsubject' => 'Kopi sendes til $1: $2', -'emailsent' => 'E-mail sendt', -'emailsenttext' => 'Din e-mail er blevet sendt.', -'emailuserfooter' => 'Denne e-mail er sendt af $1 til $2 ved hjælp af funktionen "E-mail til denne bruger" på {{SITENAME}}.', +'usermailererror' => 'E-mail-modulet returnerede en fejl:', +'defemailsubject' => 'E-mail fra {{SITENAME}}', +'usermaildisabled' => 'Bruger-e-mail deaktiveret', +'usermaildisabledtext' => 'Du kan ikke sende e-mails til andre brugere på denne wiki', +'noemailtitle' => 'Ingen e-mail-adresse', +'noemailtext' => 'Denne bruger har ikke angivet en gyldig e-mail-adresse.', +'nowikiemailtitle' => 'E-mail er ikke tilladt', +'nowikiemailtext' => 'Denne bruger har valgt ikke at modtage e-mail fra andre brugere.', +'email-legend' => 'Send e-post til en anden {{SITENAME}}-bruger.', +'emailfrom' => 'Fra:', +'emailto' => 'Til:', +'emailsubject' => 'Emne:', +'emailmessage' => 'Besked:', +'emailsend' => 'Send', +'emailccme' => 'Send en kopi af denne e-mail til mig', +'emailccsubject' => 'Kopi sendes til $1: $2', +'emailsent' => 'E-mail sendt', +'emailsenttext' => 'Din e-mail er blevet sendt.', +'emailuserfooter' => 'Denne e-mail er sendt af $1 til $2 ved hjælp af funktionen "E-mail til denne bruger" på {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Efterlader system besked.', +'usermessage-editor' => 'System messenger', # Watchlist 'watchlist' => 'Overvågningsliste', 'mywatchlist' => 'Min overvågningsliste', -'watchlistfor' => "(for '''$1''')", +'watchlistfor2' => 'For $1 $2', 'nowatchlist' => 'Du har ingenting i din overvågningsliste.', 'watchlistanontext' => 'Du skal $1, for at se din overvågningsliste eller ændre indholdet af den.', 'watchnologin' => 'Ikke logget på', @@ -1991,6 +2040,9 @@ På din overvågningsliste kan du også nulstille alle markeringer på de sider, Med venlig hilsen {{SITENAME}}s informationssystem -- +For at ændre dine indstillinger for e-mail-notifikationer, besøg +{{fullurl:{{#special:Preferences}}}} + For at ændre indstillingerne for din overvågningsliste, besøg {{fullurl:{{#special:Watchlist}}/edit}} @@ -2029,7 +2081,7 @@ Bekræft venligst at du virkelig vil gøre dette, at du forstår konsekvenserne, ** Efter forfatters ønske ** Overtrædelse af ophavsret ** Hærværk', -'delete-edit-reasonlist' => 'Rediger sletningsårsagerrette', +'delete-edit-reasonlist' => 'Rediger sletningsårsager', 'delete-toobig' => 'Denne side har en stor historik, over {{PLURAL:$1|en version|$1 versioner}}. Sletning af sådanne sider er begrænset blevet for at forhindre utilsigtet forstyrrelse af {{SITENAME}}.', 'delete-warning-toobig' => 'Denne side har en stor historik, over {{PLURAL:$1|en version|$1 versioner}} versioner, slettes den kan det forstyrre driften af {{SITENAME}}, gå forsigtigt frem.', @@ -2048,7 +2100,10 @@ Den seneste redigering er foretaget af [[User:$3|$3]] ([[User talk:$3|diskussion 'revertpage-nouser' => 'Gendannet til seneste version af [[User:$1|$1]], ændringer fra (brugernavn fjernet) fjernet', 'rollback-success' => 'Ændringerne fra $1 er fjernet, og den seneste version af $2 er gendannet.', -'sessionfailure' => 'Der lader til at være et problem med din loginsession; denne handling blev annulleret som en sikkerhedsforanstaltning mod kapring af sessionen. Tryk på "tilbage"-knappen og genindlæs den side du kom fra, og prøv dernæst igen.', + +# Edit tokens +'sessionfailure-title' => 'Sessionsfejl', +'sessionfailure' => 'Der lader til at være et problem med din loginsession; denne handling blev annulleret som en sikkerhedsforanstaltning mod kapring af sessionen. Tryk på "tilbage"-knappen og genindlæs den side du kom fra, og prøv dernæst igen.', # Protect 'protectlogpage' => 'Skrivebeskyttelseslog', @@ -2176,18 +2231,22 @@ $1', 'month' => 'Måned:', 'year' => 'År:', -'sp-contributions-newbies' => 'Vis kun bidrag fra nye brugere', -'sp-contributions-newbies-sub' => 'Fra nye kontoer', -'sp-contributions-newbies-title' => 'Brugerbidrag fra nye konti', -'sp-contributions-blocklog' => 'blokeringslog', -'sp-contributions-deleted' => 'slettede brugerbidrag', -'sp-contributions-logs' => 'loglister', -'sp-contributions-talk' => 'diskussion', -'sp-contributions-userrights' => 'håndtering af brugerrettigheder', -'sp-contributions-blocked-notice' => 'Denne bruger er i øjeblikket blokeret. Loggen over den seneste blokering kan ses nedenfor:', -'sp-contributions-search' => 'Søg efter bidrag', -'sp-contributions-username' => 'IP-adresse eller brugernavn:', -'sp-contributions-submit' => 'Søg', +'sp-contributions-newbies' => 'Vis kun bidrag fra nye brugere', +'sp-contributions-newbies-sub' => 'Fra nye kontoer', +'sp-contributions-newbies-title' => 'Brugerbidrag fra nye konti', +'sp-contributions-blocklog' => 'blokeringslog', +'sp-contributions-deleted' => 'slettede brugerbidrag', +'sp-contributions-uploads' => 'uploads', +'sp-contributions-logs' => 'loglister', +'sp-contributions-talk' => 'diskussion', +'sp-contributions-userrights' => 'håndtering af brugerrettigheder', +'sp-contributions-blocked-notice' => 'Denne bruger er i øjeblikket blokeret. Loggen over den seneste blokering kan ses nedenfor:', +'sp-contributions-blocked-notice-anon' => 'Denne IP-adresse er i øjeblikket blokeret. +Den seneste post i blokeringsloggen vises nedenfor:', +'sp-contributions-search' => 'Søg efter bidrag', +'sp-contributions-username' => 'IP-adresse eller brugernavn:', +'sp-contributions-toponly' => 'Vis kun redigeringer, der er aktuelle versioner', +'sp-contributions-submit' => 'Søg', # What links here 'whatlinkshere' => 'Hvad henviser hertil', @@ -2248,7 +2307,6 @@ Se [[Special:IPBlockList|IP-blokeringslisten]] for alle blokeringer.', 'ipb-edit-dropdown' => 'Ændre spærreårsager', 'ipb-unblock-addr' => 'Ophæv blokeringen af "$1"', 'ipb-unblock' => 'Frigive IP-adresse/bruger', -'ipb-blocklist-addr' => 'Aktuelle blokeringer af "$1"', 'ipb-blocklist' => 'Vis alle blokeringer som er i kraft', 'ipb-blocklist-contribs' => 'Bidrag fra $1', 'unblockip' => 'Ophæv blokering af bruger', @@ -2318,6 +2376,8 @@ $1 er allerede blokkeret. Vil du ændre indstillingene?', 'sorbs_create_account_reason' => 'IP-adressen er opført i DNSBL på {{SITENAME}} som åben PROXY. Oprettelse af nye brugere er ikke mulig.', 'cant-block-while-blocked' => 'Du kan ikke blokkere andre brugere mens du selv er blokkeret.', 'cant-see-hidden-user' => 'Brugeren du prøver at blokerer er allerede blokeret og skjult. Siden du ikke har rettigheden til at skjule brugere, kan du ikke se eller ændre brugerens blokering.', +'ipbblocked' => 'Du kan ikke ændre blokeringer, da du selv er blokeret', +'ipbnounblockself' => 'Du kan ikke ophæve blokeringen af dig selv', # Developer tools 'lockdb' => 'Lås database', @@ -2340,6 +2400,17 @@ $1 er allerede blokkeret. Vil du ændre indstillingene?', 'move-page' => 'Flyt $1', 'move-page-legend' => 'Flyt side', 'movepagetext' => "Når du bruger formularen herunder vil du få omdøbt en side og flyttet hele sidens historie til det nye navn. Den gamle titel vil blive en omdirigeringsside til den nye titel. Henvisninger til den gamle titel vil ikke blive ændret. Sørg for at tjekke for dobbelte eller dårlige omdirigeringer. Du er ansvarlig for, at alle henvisninger stadig peger derhen, hvor det er meningen de skal pege. Bemærk at siden '''ikke''' kan flyttes hvis der allerede er en side med den nye titel, medmindre den side er tom eller er en omdirigering uden nogen historie. Det betyder at du kan flytte en side tilbage hvor den kom fra, hvis du kommer til at lave en fejl. ADVARSEL! Dette kan være en drastisk og uventet ændring for en populær side; vær sikker på, at du forstår konsekvenserne af dette før du fortsætter.", +'movepagetext-noredirectfixer' => "Brug formularen herunder du vil omdøbe en side og flyttet hele sidens historie til det nye navn. +Den gamle titel vil blive en omdirigeringsside til den nye titel. +Vær sikker på at tjekke for [[Special:DoubleRedirects|dobbelte]] eller [[Special:BrokenRedirects|ødelagte omdirigeringer]]. +Du er ansvarlig for at sikre, at alle henvisninger stadig peger på et sted hvor det giver meningen at gå. + +Bemærk, at siden '''ikke''' kan flyttes hvis der allerede er en side med den nye titel, medmindre den er tom eller er en omdirigering, og har ingen historie. +Det betyder at du kan omdøbe en side tilbage hvor den kom fra, hvis du laver en fejl, og du kan ikke overskrive en eksisterende side. + +'''Advarsel!''' +Dette kan være en drastisk og uventet ændring for en populær side; +du skal være sikker på at du forstår konsekvenserne af dette før du fortsætter.", 'movepagetalktext' => "Den tilhørende diskussionsside, hvis der er en, vil automatisk blive flyttet med siden '''medmindre:''' *Du flytter siden til et andet navnerum, *En ikke-tom diskussionsside allerede eksisterer under det nye navn, eller *Du fjerner markeringen i boksen nedenunder. @@ -2395,6 +2466,7 @@ Artiklen "[[:$1]]" eksisterer allerede. Vil du slette den for at gøre plads til 'immobile-source-page' => 'Denne side kan ikke flyttes.', 'immobile-target-page' => 'Kan ikke flytte til det navn.', 'imagenocrossnamespace' => 'Filer kan ikke flyttes til et navnerum der ikke indeholder filer', +'nonfile-cannot-move-to-file' => 'Kan ikke flytte ikke-filer til fil-navnerummet', 'imagetypemismatch' => 'Den nye filendelse passer ikke til filtypen', 'imageinvalidfilename' => 'Destinationsnavnet er ugyldigt', 'fix-double-redirects' => 'Opdater henvisninger til det oprindelige navn', @@ -2473,6 +2545,7 @@ Alle Transwiki import-aktioner protokolleres i [[Special:Log/import|import-logge 'importstart' => 'Importerer sider …', 'import-revision-count' => '– {{PLURAL:$1|1 version|$1 versioner}}', 'importnopages' => 'Ingen sider fundet til import.', +'imported-log-entries' => 'Importere $1 {{PLURAL:$1|log post|log poster}}.', 'importfailed' => 'Importering fejlede: $1', 'importunknownsource' => 'Ukendt fejlkilde', 'importcantopen' => 'Importfil kunne ikke åbnes', @@ -2567,6 +2640,8 @@ Du kan se på kildeteksten.', 'tooltip-rollback' => '"Rul tilbage" fjerner den sidste bidragsyders redigering(er) af denne side med et klik', 'tooltip-undo' => '"Fjern redigering" fjerner denne redigering og åbner redigeringssiden med forhåndsvisning. Det giver mulighed for at tilføje en begrundelse i beskrivelsen.', +'tooltip-preferences-save' => 'Gem indstillinger', +'tooltip-summary' => 'Indtast en kort opsummering', # Stylesheets 'common.css' => '/** CSS inkluderet her vil være aktivt for alle brugere. */', @@ -2674,19 +2749,22 @@ $1', 'nextdiff' => 'Gå til næste ændring →', # Media information -'mediawarning' => "'''Advarsel''': Denne filtype kan muligvis indeholde skadelig kode. +'mediawarning' => "'''Advarsel''': Denne filtype kan muligvis indeholde skadelig kode. Du kan beskadige dit system hvis du udfører den.", 'imagemaxsize' => "Maksimal billedstørrelse
    ''(på filbeskrivelsessider)''", 'thumbsize' => 'Thumbnailstørrelse :', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|side|sider}}', -'file-info' => '(Filstørrelse: $1, MIME-Type: $2)', -'file-info-size' => '($1 × $2 punkter, filstørrelse: $3, MIME-Type: $4)', +'file-info' => 'Filstørrelse: $1, MIME-Type: $2', +'file-info-size' => '$1 × $2 punkter, filstørrelse: $3, MIME-Type: $4', 'file-nohires' => 'Ingen højere opløsning fundet.', -'svg-long-desc' => '(SVG fil, basisstørrelse $1 × $2 punkters, størrelse: $3)', +'svg-long-desc' => 'SVG fil, basisstørrelse $1 × $2 punkters, størrelse: $3', 'show-big-image' => 'Version i større opløsning', 'show-big-image-thumb' => 'Størrelse af forhåndsvisning: $1 × $2 pixel', 'file-info-gif-looped' => 'gentaget', 'file-info-gif-frames' => '$1 {{PLURAL:$1|ramme|rammer}}', +'file-info-png-looped' => 'gentaget', +'file-info-png-repeat' => 'afspillede $1 {{PLURAL:$1|gang|gange}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|billede|billeder}}', # Special:NewFiles 'newimages' => 'Galleri med de nyeste billeder', @@ -2841,6 +2919,7 @@ Kun indholdet af lister (linjer startende med *) bliver brugt. Den første henvi 'exif-gpsareainformation' => 'GPS-områdets navn', 'exif-gpsdatestamp' => 'GPS-dato', 'exif-gpsdifferential' => 'GPS-differentialkorrektur', +'exif-objectname' => 'Kort titel', # EXIF attributes 'exif-compression-1' => 'Ukomprimeret', @@ -2922,6 +3001,8 @@ Kun indholdet af lister (linjer startende med *) bliver brugt. Den første henvi 'exif-sensingmethod-7' => 'Triliniær sensor', 'exif-sensingmethod-8' => 'Farvesekventiel liniarsensor', +'exif-filesource-3' => 'Digitalt stillbilledekamera', + 'exif-scenetype-1' => 'Normal', 'exif-customrendered-0' => 'Standard', @@ -2998,23 +3079,23 @@ Kun indholdet af lister (linjer startende med *) bliver brugt. Den første henvi 'limitall' => 'alle', # E-mail address confirmation -'confirmemail' => 'Bekræft e-mail-adressen', -'confirmemail_noemail' => 'Du har ikke angivet en gyldig e-mail-adresse i din [[Special:Preferences|brugerprofil]].', -'confirmemail_text' => '{{SITENAME}} kræver, at du bekræfter en e-mail-adresse (autentificering), før du kan bruge de udvidede e-mail-funktioner. Med et klik på kontrolfeltet forneden sendes en e-mail til dig. Denne e-mail indeholder et link med en bekræftelseskode. Med et klik på dette link bekræftes, at e-mail-adressen er gyldig.', -'confirmemail_pending' => 'En bekræftelsesmail er allerede sendt til dig. Hvis du først for nylig har oprettet brugerkontoen, vent da et par minutter på denne e-mail, før du bestiller en ny kode.', -'confirmemail_send' => 'Send bekræftelseskode', -'confirmemail_sent' => 'Bekræftelses-e-mail afsendt.', -'confirmemail_oncreate' => 'En bekræftelseskode er sendt til din e-mail-adresse. Denne kode skal ikke bruges til anmeldelsen, den kræves dog til aktiveringen af e-mail-funktionerne indenfor Wikien.', -'confirmemail_sendfailed' => 'Bekræftelsesmailen kunne ikke afsendes. Kontroller at e-mail-adressen er korrekt. +'confirmemail' => 'Bekræft e-mail-adressen', +'confirmemail_noemail' => 'Du har ikke angivet en gyldig e-mail-adresse i din [[Special:Preferences|brugerprofil]].', +'confirmemail_text' => '{{SITENAME}} kræver, at du bekræfter en e-mail-adresse (autentificering), før du kan bruge de udvidede e-mail-funktioner. Med et klik på kontrolfeltet forneden sendes en e-mail til dig. Denne e-mail indeholder et link med en bekræftelseskode. Med et klik på dette link bekræftes, at e-mail-adressen er gyldig.', +'confirmemail_pending' => 'En bekræftelsesmail er allerede sendt til dig. Hvis du først for nylig har oprettet brugerkontoen, vent da et par minutter på denne e-mail, før du bestiller en ny kode.', +'confirmemail_send' => 'Send bekræftelseskode', +'confirmemail_sent' => 'Bekræftelses-e-mail afsendt.', +'confirmemail_oncreate' => 'En bekræftelseskode er sendt til din e-mail-adresse. Denne kode skal ikke bruges til anmeldelsen, den kræves dog til aktiveringen af e-mail-funktionerne indenfor Wikien.', +'confirmemail_sendfailed' => 'Bekræftelsesmailen kunne ikke afsendes. Kontroller at e-mail-adressen er korrekt. Svarbesked fra mailserveren: $1', -'confirmemail_invalid' => 'Ugyldig bekræftelseskode. Kodens gyldighed er muligvis udløbet.', -'confirmemail_needlogin' => 'Du skal $1 for at bekræfte e-mail-adressen.', -'confirmemail_success' => 'E-mail-adressen er nu bekræftet. Du kan nu logge på.', -'confirmemail_loggedin' => 'E-mail-adressen er nu bekræftet.', -'confirmemail_error' => 'Der skete en fejl ved bekræftelsen af e-mail-adressen.', -'confirmemail_subject' => '[{{SITENAME}}] - bekræftelse af e-mail-adressen', -'confirmemail_body' => 'Hej, +'confirmemail_invalid' => 'Ugyldig bekræftelseskode. Kodens gyldighed er muligvis udløbet.', +'confirmemail_needlogin' => 'Du skal $1 for at bekræfte e-mail-adressen.', +'confirmemail_success' => 'E-mail-adressen er nu bekræftet. Du kan nu logge på.', +'confirmemail_loggedin' => 'E-mail-adressen er nu bekræftet.', +'confirmemail_error' => 'Der skete en fejl ved bekræftelsen af e-mail-adressen.', +'confirmemail_subject' => '[{{SITENAME}}] - bekræftelse af e-mail-adressen', +'confirmemail_body' => 'Hej, Nogen med IP-adresse $1, sandsynligvis dig, har bestilt en bekræftelse af denne e-mail-adresse til brugerkontoen "$2" på {{SITENAME}}. @@ -3026,8 +3107,33 @@ Hvis denne e-mail-adresse *ikke* hører til den anførte brugerkonto, skal du i -- {{SITENAME}}: {{fullurl:{{Mediawiki:mainpage}}}}', -'confirmemail_invalidated' => 'E-mail-bekræftelse afvist', -'invalidateemail' => 'Cancel e-mail confirmation', +'confirmemail_body_changed' => 'Der er nogen, sandsynligvis dig, fra ip-adressen $1, der har ændret emailadressen for kontoen "$2" til denne adresse på {{SITENAME}}. + +For at bekræfte, at denne konto virkeligt tilhører dig og for at genaktivere emailfunktionerne på {{SITENAME}}, bedes du åbne følgende link i en browser: + +$3 + +Hvis denne konto *ikke* tilhører dig, bedes du åbne følgende link, for at afbryde ændringen + +$5 + +Denne bekræftelseskode udløber $4', +'confirmemail_body_set' => 'En person, sandsynligvis dig, har fra IP-adressen $1, +angivet denne e-mail-adresse til kontoen "$2" på {{SITENAME}}. + +For at bekræfte, at denne konto virkelig tilhører dig og genaktivere +e-mail-funktioner på {{SITENAME}}, åbn dette link i din browser: + +$3 + +Hvis kontoen ikke *ikke* tilhører dig, så følg dette link +for at annullere e-mail-adressens bekræftelse: + +$5 + +Denne bekræftelseskode vil udløbe den $4.', +'confirmemail_invalidated' => 'E-mail-bekræftelse afvist', +'invalidateemail' => 'Cancel e-mail confirmation', # Scary transclusion 'scarytranscludedisabled' => '[Interwiki-tilkobling er deaktiveret]', @@ -3069,6 +3175,7 @@ Bekræft venligst, at du virkelig vil oprette denne side igen.", 'table_pager_first' => 'Første side', 'table_pager_last' => 'Sidste side', 'table_pager_limit' => 'Vis $1 indførsler pr. side', +'table_pager_limit_label' => 'Elementer pr. side:', 'table_pager_limit_submit' => 'Start', 'table_pager_empty' => 'Ingen resultater', @@ -3116,7 +3223,7 @@ Du kan også [[Special:Watchlist/edit|bruge standard editoren]].', 'watchlisttools-raw' => 'Rediger rå overvågningsliste', # Core parser functions -'unknown_extension_tag' => 'Unknown extension tag "$1"', +'unknown_extension_tag' => 'Ukendt tag "$1"', 'duplicate-defaultsort' => 'Advarsel: Standardsorteringsnøglen "$2" tilsidesætter den tidligere sorteringsnøgle "$1".', # Special:Version @@ -3125,6 +3232,7 @@ Du kan også [[Special:Watchlist/edit|bruge standard editoren]].', 'version-specialpages' => 'Specialsider', 'version-parserhooks' => 'Oversætter-funktioner', 'version-variables' => 'Variabler', +'version-skins' => 'Udseender', 'version-other' => 'Andet', 'version-mediahandlers' => 'Specialhåndtering af mediefiler', 'version-hooks' => 'Funktionstilføjelser', @@ -3136,6 +3244,13 @@ Du kan også [[Special:Watchlist/edit|bruge standard editoren]].', 'version-hook-subscribedby' => 'Brugt af', 'version-version' => '(Version $1)', 'version-license' => 'Licens', +'version-poweredby-credits' => "Denne wiki er drevet af'''[http://www.mediawiki.org/ MediaWiki ]''', copyright © 2001 - $1 $2.", +'version-poweredby-others' => 'andre', +'version-license-info' => 'MediaWiki er gratis software; du kan redistribuere det og/eller ændre det under betingelserne i GNU General Public License som offentliggjort af Free Software Foundation; enten version 2 af licensen eller (efter eget valg) enhver senere version. + +MediaWiki distribueres i håb om at det vil være nyttigt, men UDEN NOGEN GARANTI; uden selv de underforståede garantier SALGBARHED eller EGNETHED TIL ET BESTEMT FORMÅL. Se GNU General Public License for yderligere detaljer. + +Du skulle have modtaget [{{SERVER}}{{SCRIPTPATH}}/COPYING en kopi af GNU General Public License] sammen med dette program; og hvis ikke, så skriv til Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA or [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html læs den online].', 'version-software' => 'Installeret software', 'version-software-product' => 'Produkt', 'version-software-version' => 'Version', @@ -3207,6 +3322,15 @@ Denne side oplister de tags som programmet kan mærke en redigering med, og dere 'tags-edit' => 'Redigér', 'tags-hitcount' => '{{PLURAL:$1|en ændring|$1 ændringer}}', +# Special:ComparePages +'comparepages' => 'Sammenlign sider', +'compare-selector' => 'Sammenlign sideversioner', +'compare-page1' => 'Side 1', +'compare-page2' => 'Side 2', +'compare-rev1' => 'Version 1', +'compare-rev2' => 'Version 2', +'compare-submit' => 'Sammenlign', + # Database error messages 'dberr-header' => 'Wikien har et problem', 'dberr-problems' => 'Undskyld! Siden har tekniske problemer.', @@ -3223,8 +3347,13 @@ Denne side oplister de tags som programmet kan mærke en redigering med, og dere 'htmlform-float-invalid' => 'Den angivne værdi er ikke et tal.', 'htmlform-int-toolow' => 'Den angivne værdi er under minimumsværdien på $1', 'htmlform-int-toohigh' => 'Den angivne værdi er over maksimumsværdien på $1', +'htmlform-required' => 'Denne værdi skal angives', 'htmlform-submit' => 'Gem', 'htmlform-reset' => 'Annuller ændringer', 'htmlform-selectorother-other' => 'Anden', +# SQLite database support +'sqlite-has-fts' => '$1 med fuld-tekst søgnings support', +'sqlite-no-fts' => '$1 uden fuld-tekst søgnings support', + ); diff --git a/languages/messages/MessagesDe.php b/languages/messages/MessagesDe.php index e6b0ec7a..e5f4c606 100644 --- a/languages/messages/MessagesDe.php +++ b/languages/messages/MessagesDe.php @@ -57,7 +57,7 @@ $capitalizeAllNouns = true; $namespaceNames = array( - NS_MEDIA => 'Media', + NS_MEDIA => 'Medium', NS_SPECIAL => 'Spezial', NS_TALK => 'Diskussion', NS_USER => 'Benutzer', @@ -89,60 +89,61 @@ $bookstoreList = array( 'Lehmanns Fachbuchhandlung' => 'http://www.lob.de/cgi-bin/work/suche?flag=new&stich1=$1' ); -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $linkTrail = '/^([äöüßa-z]+)(.*)$/sDu'; $specialPageAliases = array( - 'DoubleRedirects' => array( 'Doppelte Weiterleitungen' ), - 'BrokenRedirects' => array( 'Kaputte Weiterleitungen' ), + 'DoubleRedirects' => array( 'Doppelte_Weiterleitungen' ), + 'BrokenRedirects' => array( 'Kaputte_Weiterleitungen' ), 'Disambiguations' => array( 'Begriffsklärungsverweise' ), 'Userlogin' => array( 'Anmelden' ), 'Userlogout' => array( 'Abmelden' ), - 'CreateAccount' => array( 'Benutzerkonto anlegen' ), + 'CreateAccount' => array( 'Benutzerkonto_anlegen' ), 'Preferences' => array( 'Einstellungen' ), 'Watchlist' => array( 'Beobachtungsliste' ), - 'Recentchanges' => array( 'Letzte Änderungen' ), + 'Recentchanges' => array( 'Letzte_Änderungen' ), 'Upload' => array( 'Hochladen' ), 'Listfiles' => array( 'Dateien', 'Dateiliste' ), - 'Newimages' => array( 'Neue Dateien' ), + 'Newimages' => array( 'Neue_Dateien' ), 'Listusers' => array( 'Benutzer', 'Benutzerliste' ), 'Listgrouprights' => array( 'Gruppenrechte' ), 'Statistics' => array( 'Statistik' ), - 'Randompage' => array( 'Zufällige Seite' ), - 'Lonelypages' => array( 'Verwaiste Seiten' ), - 'Uncategorizedpages' => array( 'Nicht kategorisierte Seiten' ), - 'Uncategorizedcategories' => array( 'Nicht kategorisierte Kategorien' ), - 'Uncategorizedimages' => array( 'Nicht kategorisierte Dateien' ), - 'Uncategorizedtemplates' => array( 'Nicht kategorisierte Vorlagen' ), - 'Unusedcategories' => array( 'Unbenutzte Kategorien' ), - 'Unusedimages' => array( 'Unbenutzte Dateien' ), - 'Wantedpages' => array( 'Gewünschte Seiten' ), - 'Wantedcategories' => array( 'Gewünschte Kategorien' ), - 'Wantedfiles' => array( 'Fehlende Dateien' ), - 'Wantedtemplates' => array( 'Fehlende Vorlagen' ), - 'Mostlinked' => array( 'Meistverlinkte Seiten' ), - 'Mostlinkedcategories' => array( 'Meistbenutzte Kategorien' ), - 'Mostlinkedtemplates' => array( 'Meistbenutzte Vorlagen' ), - 'Mostimages' => array( 'Meistbenutzte Dateien' ), - 'Mostcategories' => array( 'Meistkategorisierte Seiten' ), - 'Mostrevisions' => array( 'Meistbearbeitete Seiten' ), - 'Fewestrevisions' => array( 'Wenigstbearbeitete Seiten' ), - 'Shortpages' => array( 'Kürzeste Seiten' ), - 'Longpages' => array( 'Längste Seiten' ), - 'Newpages' => array( 'Neue Seiten' ), - 'Ancientpages' => array( 'Älteste Seiten' ), + 'Randompage' => array( 'Zufällige_Seite' ), + 'Lonelypages' => array( 'Verwaiste_Seiten' ), + 'Uncategorizedpages' => array( 'Nicht_kategorisierte_Seiten' ), + 'Uncategorizedcategories' => array( 'Nicht_kategorisierte_Kategorien' ), + 'Uncategorizedimages' => array( 'Nicht_kategorisierte_Dateien' ), + 'Uncategorizedtemplates' => array( 'Nicht_kategorisierte_Vorlagen' ), + 'Unusedcategories' => array( 'Unbenutzte_Kategorien' ), + 'Unusedimages' => array( 'Unbenutzte_Dateien' ), + 'Wantedpages' => array( 'Gewünschte_Seiten' ), + 'Wantedcategories' => array( 'Gewünschte_Kategorien' ), + 'Wantedfiles' => array( 'Fehlende_Dateien' ), + 'Wantedtemplates' => array( 'Fehlende_Vorlagen' ), + 'Mostlinked' => array( 'Meistverlinkte_Seiten' ), + 'Mostlinkedcategories' => array( 'Meistbenutzte_Kategorien' ), + 'Mostlinkedtemplates' => array( 'Meistbenutzte_Vorlagen' ), + 'Mostimages' => array( 'Meistbenutzte_Dateien' ), + 'Mostcategories' => array( 'Meistkategorisierte_Seiten' ), + 'Mostrevisions' => array( 'Meistbearbeitete_Seiten' ), + 'Fewestrevisions' => array( 'Wenigstbearbeitete_Seiten' ), + 'Shortpages' => array( 'Kürzeste_Seiten' ), + 'Longpages' => array( 'Längste_Seiten' ), + 'Newpages' => array( 'Neue_Seiten' ), + 'Ancientpages' => array( 'Älteste_Seiten' ), 'Deadendpages' => array( 'Sackgassenseiten' ), - 'Protectedpages' => array( 'Geschützte Seiten' ), - 'Protectedtitles' => array( 'Gesperrte Titel' ), - 'Allpages' => array( 'Alle Seiten' ), + 'Protectedpages' => array( 'Geschützte_Seiten' ), + 'Protectedtitles' => array( 'Geschützte_Titel', 'Gesperrte_Titel' ), + 'Allpages' => array( 'Alle_Seiten' ), 'Prefixindex' => array( 'Präfixindex' ), - 'Ipblocklist' => array( 'Liste der Sperren', 'Gesperrte IPs' ), + 'Ipblocklist' => array( 'Liste_der_Sperren', 'Gesperrte_IP-Adressen', 'Gesperrte_IPs' ), + 'Unblock' => array( 'Freigeben' ), 'Specialpages' => array( 'Spezialseiten' ), 'Contributions' => array( 'Beiträge' ), 'Emailuser' => array( 'E-Mail' ), - 'Confirmemail' => array( 'E-Mail bestaetigen', 'E-Mail bestätigen' ), + 'Confirmemail' => array( 'E-Mail_bestaetigen', 'E-Mail_bestätigen' ), 'Whatlinkshere' => array( 'Linkliste', 'Verweisliste' ), - 'Recentchangeslinked' => array( 'Änderungen an verlinkten Seiten' ), + 'Recentchangeslinked' => array( 'Änderungen_an_verlinkten_Seiten' ), 'Movepage' => array( 'Verschieben' ), 'Blockme' => array( 'Proxy-Sperre' ), 'Booksources' => array( 'ISBN-Suche' ), @@ -153,33 +154,38 @@ $specialPageAliases = array( 'Blockip' => array( 'Sperren' ), 'Undelete' => array( 'Wiederherstellen' ), 'Import' => array( 'Importieren' ), - 'Lockdb' => array( 'Datenbank sperren' ), - 'Unlockdb' => array( 'Datenbank entsperren' ), + 'Lockdb' => array( 'Datenbank_sperren' ), + 'Unlockdb' => array( 'Datenbank_entsperren' ), 'Userrights' => array( 'Benutzerrechte' ), 'MIMEsearch' => array( 'MIME-Typ-Suche' ), 'FileDuplicateSearch' => array( 'Datei-Duplikat-Suche' ), - 'Unwatchedpages' => array( 'Ignorierte Seiten', 'Unbeobachtete Seiten' ), + 'Unwatchedpages' => array( 'Ignorierte_Seiten', 'Unbeobachtete_Seiten' ), 'Listredirects' => array( 'Weiterleitungen' ), 'Revisiondelete' => array( 'Versionslöschung' ), - 'Unusedtemplates' => array( 'Unbenutzte Vorlagen' ), - 'Randomredirect' => array( 'Zufällige Weiterleitung' ), - 'Mypage' => array( 'Meine Benutzerseite' ), - 'Mytalk' => array( 'Meine Diskussionsseite' ), - 'Mycontributions' => array( 'Meine Beiträge' ), + 'Unusedtemplates' => array( 'Unbenutzte_Vorlagen' ), + 'Randomredirect' => array( 'Zufällige_Weiterleitung' ), + 'Mypage' => array( 'Meine_Benutzerseite' ), + 'Mytalk' => array( 'Meine_Diskussionsseite' ), + 'Mycontributions' => array( 'Meine_Beiträge' ), + 'Myuploads' => array( 'Meine_hochgeladenen_Dateien' ), + 'PermanentLink' => array( 'Permanenter_Link' ), 'Listadmins' => array( 'Administratoren' ), 'Listbots' => array( 'Bots' ), - 'Popularpages' => array( 'Beliebteste Seiten' ), + 'Popularpages' => array( 'Beliebteste_Seiten' ), 'Search' => array( 'Suche' ), - 'Resetpass' => array( 'Passwort ändern', 'Passwort zurücksetzen' ), - 'Withoutinterwiki' => array( 'Fehlende Interwikis' ), - 'MergeHistory' => array( 'Versionsgeschichten vereinen' ), + 'Resetpass' => array( 'Passwort_ändern', 'Passwort_zurücksetzen' ), + 'Withoutinterwiki' => array( 'Fehlende_Interwikis' ), + 'MergeHistory' => array( 'Versionsgeschichten_vereinen' ), 'Filepath' => array( 'Dateipfad' ), - 'Invalidateemail' => array( 'E-Mail nicht bestaetigen', 'E-Mail nicht bestätigen' ), - 'Blankpage' => array( 'Leerseite', 'Leere Seite' ), + 'Invalidateemail' => array( 'E-Mail_nicht_bestaetigen', 'E-Mail_nicht_bestätigen' ), + 'Blankpage' => array( 'Leerseite', 'Leere_Seite' ), 'LinkSearch' => array( 'Weblink-Suche' ), - 'DeletedContributions' => array( 'Gelöschte Beiträge' ), + 'DeletedContributions' => array( 'Gelöschte_Beiträge' ), 'Tags' => array( 'Markierungen' ), - 'Activeusers' => array( 'Aktive Benutzer' ), + 'Activeusers' => array( 'Aktive_Benutzer' ), + 'ComparePages' => array( 'Seiten_vergleichen' ), + 'Badtitle' => array( 'Ungültiger_Titel' ), + 'DisableAccount' => array( 'Benutzerkonto_deaktivieren' ), ); $datePreferences = array( @@ -289,6 +295,7 @@ $magicWords = array( 'int' => array( '0', 'NACHRICHT:', 'INT:' ), 'sitename' => array( '1', 'PROJEKTNAME', 'SITENAME' ), 'ns' => array( '0', 'NR:', 'NS:' ), + 'nse' => array( '0', 'NR_URL:', 'NSE:' ), 'localurl' => array( '0', 'LOKALE_URL:', 'LOCALURL:' ), 'scriptpath' => array( '0', 'SKRIPTPFAD', 'SCRIPTPATH' ), 'stylepath' => array( '0', 'STYLEPFAD', 'STYLEPATH' ), @@ -362,8 +369,7 @@ $messages = array( 'tog-editsection' => 'Links zum Bearbeiten einzelner Abschnitte anzeigen', 'tog-editsectiononrightclick' => 'Einzelne Abschnitte per Rechtsklick bearbeiten (benötigt JavaScript)', 'tog-showtoc' => 'Anzeigen eines Inhaltsverzeichnisses bei Seiten mit mehr als drei Überschriften', -'tog-rememberpassword' => 'Auf diesem Computer dauerhaft angemeldet bleiben', -'tog-editwidth' => 'Eingabefeld erweitern, um den ganzen Bildschirm auszufüllen', +'tog-rememberpassword' => 'Mit diesem Browser dauerhaft angemeldet bleiben (maximal $1 {{PLURAL:$1|Tag|Tage}})', 'tog-watchcreations' => 'Selbst erstellte Seiten automatisch beobachten', 'tog-watchdefault' => 'Selbst geänderte Seiten automatisch beobachten', 'tog-watchmoves' => 'Selbst verschobene Seiten automatisch beobachten', @@ -374,16 +380,16 @@ $messages = array( 'tog-nocache' => 'Seitencache des Browsers deaktivieren', 'tog-enotifwatchlistpages' => 'Bei Änderungen an beobachteten Seiten E-Mails senden', 'tog-enotifusertalkpages' => 'Bei Änderungen an meiner Benutzer-Diskussionsseite E-Mails senden', -'tog-enotifminoredits' => 'Auch bei kleinen Änderungen an beobachteten Seiten E-Mails senden', +'tog-enotifminoredits' => 'Auch bei kleinen Änderungen an Seiten E-Mails senden', 'tog-enotifrevealaddr' => 'Meine E-Mail-Adresse in Benachrichtigungs-E-Mails anzeigen', 'tog-shownumberswatching' => 'Anzahl der beobachtenden Benutzer anzeigen', 'tog-oldsig' => 'Vorschau der aktuellen Signatur:', 'tog-fancysig' => 'Signatur als Wikitext behandeln (ohne automatische Verlinkung)', -'tog-externaleditor' => 'Externen Editor als Standard benutzen (nur für Experten, erfordert spezielle Einstellungen auf dem eigenen Computer. [http://www.mediawiki.org/wiki/Manual:External_editors Weitere Informationen hierzu.])', -'tog-externaldiff' => 'Externes Programm für Versionsunterschiede als Standard benutzen (nur für Experten, erfordert spezielle Einstellungen auf dem eigenen Computer. [http://www.mediawiki.org/wiki/Manual:External_editors Weitere Informationen hierzu.])', +'tog-externaleditor' => 'Externen Editor standardmäßig nutzen (nur für Experten, erfordert spezielle Einstellungen auf dem eigenen Computer. [http://www.mediawiki.org/wiki/Manual:External_editors Weitere Informationen hierzu.])', +'tog-externaldiff' => 'Externes Programm für Versionsunterschiede standardmäßig nutzen (nur für Experten, erfordert spezielle Einstellungen auf dem eigenen Computer. [http://www.mediawiki.org/wiki/Manual:External_editors Weitere Informationen hierzu.])', 'tog-showjumplinks' => '„Wechseln zu“-Links aktivieren', 'tog-uselivepreview' => 'Live-Vorschau nutzen (benötigt JavaScript) (experimentell)', -'tog-forceeditsummary' => 'Warnen, wenn beim Speichern die Zusammenfassung fehlt', +'tog-forceeditsummary' => 'Warnen, sofern beim Speichern die Zusammenfassung fehlt', 'tog-watchlisthideown' => 'Eigene Bearbeitungen in der Beobachtungsliste ausblenden', 'tog-watchlisthidebots' => 'Bearbeitungen durch Bots in der Beobachtungsliste ausblenden', 'tog-watchlisthideminor' => 'Kleine Bearbeitungen in der Beobachtungsliste ausblenden', @@ -392,7 +398,7 @@ $messages = array( 'tog-watchlisthidepatrolled' => 'Kontrollierte Änderungen in der Beobachtungsliste ausblenden', 'tog-nolangconversion' => 'Konvertierung von Sprachvarianten deaktivieren', 'tog-ccmeonemails' => 'Schicke mir Kopien der E-Mails, die ich anderen Benutzern sende', -'tog-diffonly' => 'Zeige beim Versionsvergleich nur die Unterschiede, nicht die vollständige Seite', +'tog-diffonly' => 'Zeige beim Versionsvergleich nur die Unterschiede und nicht die vollständige Seite', 'tog-showhiddencats' => 'Zeige versteckte Kategorien', 'tog-noconvertlink' => 'Konvertierung des Titels deaktivieren', 'tog-norollbackdiff' => 'Unterschied nach dem Zurücksetzen unterdrücken', @@ -510,31 +516,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Abschnitt hinzufügen', -'vector-action-delete' => 'Löschen', -'vector-action-move' => 'Verschieben', -'vector-action-protect' => 'Schützen', -'vector-action-undelete' => 'Wiederherstellen', -'vector-action-unprotect' => 'Freigeben', -'vector-namespace-category' => 'Kategorie', -'vector-namespace-help' => 'Hilfeseite', -'vector-namespace-image' => 'Datei', -'vector-namespace-main' => 'Seite', -'vector-namespace-media' => 'Medienseite', -'vector-namespace-mediawiki' => 'MediaWiki-Systemnachricht', -'vector-namespace-project' => 'Projektseite', -'vector-namespace-special' => 'Spezialseite', -'vector-namespace-talk' => 'Diskussion', -'vector-namespace-template' => 'Vorlage', -'vector-namespace-user' => 'Benutzerseite', -'vector-view-create' => 'Erstellen', -'vector-view-edit' => 'Bearbeiten', -'vector-view-history' => 'Versionsgeschichte', -'vector-view-view' => 'Lesen', -'vector-view-viewsource' => 'Quelltext anzeigen', -'actions' => 'Aktionen', -'namespaces' => 'Namensräume', -'variants' => 'Varianten', +'vector-action-addsection' => 'Abschnitt hinzufügen', +'vector-action-delete' => 'Löschen', +'vector-action-move' => 'Verschieben', +'vector-action-protect' => 'Schützen', +'vector-action-undelete' => 'Wiederherstellen', +'vector-action-unprotect' => 'Freigeben', +'vector-simplesearch-preference' => 'Erweiterte Suchvorschläge aktivieren (nur Vector)', +'vector-view-create' => 'Erstellen', +'vector-view-edit' => 'Bearbeiten', +'vector-view-history' => 'Versionsgeschichte', +'vector-view-view' => 'Lesen', +'vector-view-viewsource' => 'Quelltext anzeigen', +'actions' => 'Aktionen', +'namespaces' => 'Namensräume', +'variants' => 'Varianten', 'errorpagetitle' => 'Fehler', 'returnto' => 'Zurück zur Seite $1.', @@ -595,6 +591,9 @@ Zu viele Benutzer versuchen, diese Seite zu besuchen. Bitte warte einige Minuten, bevor du es noch einmal versuchst. $1', +'pool-timeout' => 'Zeitablauf während des Wartens auf die Sperrung', +'pool-queuefull' => 'Poolwarteschlange ist voll', +'pool-errorunknown' => 'Unbekannter Fehler', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Über {{SITENAME}}', @@ -760,7 +759,8 @@ Vergiss nicht, deine [[Special:Preferences|{{SITENAME}}-Einstellungen]] anzupass 'yourname' => 'Benutzername:', 'yourpassword' => 'Passwort:', 'yourpasswordagain' => 'Passwort wiederholen:', -'remembermypassword' => 'dauerhaft anmelden', +'remembermypassword' => 'Mit diesem Browser dauerhaft angemeldet bleiben (maximal $1 {{PLURAL:$1|Tag|Tage}})', +'securelogin-stick-https' => 'Nach dem Anmelden mit HTTPS verbunden bleiben', 'yourdomainname' => 'Deine Domain:', 'externaldberror' => 'Entweder es liegt ein Fehler bei der externen Authentifizierung vor oder du darfst dein externes Benutzerkonto nicht aktualisieren.', 'login' => 'Anmelden', @@ -777,6 +777,7 @@ Vergiss nicht, deine [[Special:Preferences|{{SITENAME}}-Einstellungen]] anzupass 'gotaccount' => "Du hast bereits ein Benutzerkonto? '''$1'''.", 'gotaccountlink' => 'Anmelden', 'createaccountmail' => 'per E-Mail', +'createaccountreason' => 'Grund:', 'badretype' => 'Die beiden Passwörter stimmen nicht überein.', 'userexists' => 'Dieser Benutzername ist schon vergeben. Bitte wähle einen anderen.', 'loginerror' => 'Fehler bei der Anmeldung', @@ -795,6 +796,7 @@ Vergiss nicht, deine [[Special:Preferences|{{SITENAME}}-Einstellungen]] anzupass 'wrongpasswordempty' => 'Es wurde kein Passwort eingegeben. Bitte versuche es erneut.', 'passwordtooshort' => 'Passwörter müssen mindestens {{PLURAL:$1|1 Zeichen|$1 Zeichen}} lang sein.', 'password-name-match' => 'Dein Passwort muss sich von deinem Benutzernamen unterscheiden.', +'password-login-forbidden' => 'Die Verwendung dieses Benutzernamens und Passwortes ist nicht erlaubt.', 'mailmypassword' => 'Neues Passwort zusenden', 'passwordremindertitle' => 'Neues Passwort für ein {{SITENAME}}-Benutzerkonto', 'passwordremindertext' => 'Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat ein neues Passwort für die Anmeldung bei {{SITENAME}} ($4) angefordert. @@ -835,6 +837,9 @@ Bitte warte, bevor du es erneut probierst.', 'loginlanguagelabel' => 'Sprache: $1', 'suspicious-userlogout' => 'Deine Abmeldeanfrage wurde verweigert, da sie vermutlich von einem defekten Browser oder einem Cache-Proxy gesendet wurde.', +# E-mail sending +'php-mail-error-unknown' => 'Unbekannter Fehler mit der Funktion mail() von PHP', + # Password reset dialog 'resetpass' => 'Passwort ändern', 'resetpass_announce' => 'Anmeldung mit dem per E-Mail zugesandten Code. Um die Anmeldung abzuschließen, musst du jetzt ein neues Passwort wählen.', @@ -886,9 +891,10 @@ Möglicherweise hast du dein Passwort bereits erfolgreich geändert oder ein neu 'showlivepreview' => 'Live-Vorschau', 'showdiff' => 'Änderungen zeigen', 'anoneditwarning' => "Du bearbeitest diese Seite unangemeldet. Wenn du speicherst, wird deine aktuelle IP-Adresse in der Versionsgeschichte aufgezeichnet und ist damit unwiderruflich '''öffentlich''' einsehbar.", +'anonpreviewwarning' => "''Du bist nicht angemeldet. Beim Speichern wird deine IP-Adresse in der Versionsgeschichte aufgezeichnet.''", 'missingsummary' => "'''Hinweis:''' Du hast keine Zusammenfassung angegeben. Wenn du erneut auf „{{int:savearticle}}“ klickst, wird deine Änderung ohne Zusammenfassung übernommen.", 'missingcommenttext' => 'Dein Abschnitt enthält keinen Text.', -'missingcommentheader' => "'''ACHTUNG:''' Du hast keine Überschrift im Feld „Betreff:“ eingegeben. Wenn du erneut auf „Seite speichern“ klickst, wird deine Bearbeitung ohne Überschrift gespeichert.", +'missingcommentheader' => "'''Achtung:''' Du hast kein Betreff/Überschrift eingegeben. Wenn du erneut auf „{{int:savearticle}}“ klickst, wird deine Bearbeitung ohne Überschrift gespeichert.", 'summary-preview' => 'Vorschau der Zusammenfassungszeile:', 'subject-preview' => 'Vorschau des Betreffs:', 'blockedtitle' => 'Benutzer ist gesperrt', @@ -959,7 +965,11 @@ Zur Information folgt ein aktueller Auszug aus dem Benutzersperr-Logbuch:', '''Es wurde noch nicht gespeichert!'''", 'userjspreview' => "'''Beachte, dass du nur eine Vorschau deines Benutzer-JavaScript betrachtest.''' '''Es wurde noch nicht gespeichert!'''", -'userinvalidcssjstitle' => "'''Achtung:''' Skin „$1“ existiert nicht. Bedenke, dass benutzerspezifische .css- und .js-Seiten mit einem Kleinbuchstaben anfangen müssen, also beispielsweise ''{{ns:user}}:Mustermann/monobook.css'' an Stelle von ''{{ns:user}}:Mustermann/Monobook.css''.", +'sitecsspreview' => "'''Beachte, dass du nur eine Vorschau dieses CSS betrachtest.''' +'''Es wurde noch nicht gespeichert!'''", +'sitejspreview' => "'''Beachte, dass du nur eine Vorschau dieses JavaScript betrachtest.''' +'''Es wurde noch nicht gespeichert!'''", +'userinvalidcssjstitle' => "'''Achtung:''' Die Benutzeroberfläche „$1“ existiert nicht. Bedenke, dass benutzerspezifische .css- und .js-Seiten mit einem Kleinbuchstaben anfangen müssen, also beispielsweise ''{{ns:user}}:Mustermann/vector.css'' an Stelle von ''{{ns:user}}:Mustermann/Vector.css''.", 'updated' => '(Geändert)', 'note' => "'''Hinweis:'''", 'previewnote' => "'''Dies ist nur eine Vorschau, die Seite wurde noch nicht gespeichert!'''", @@ -997,8 +1007,6 @@ Reiche hier keine Texte ein, falls du nicht willst, dass diese ohne Einschränku Du bestätigst hiermit auch, dass du diese Texte selbst geschrieben hast oder diese von einer gemeinfreien Quelle kopiert hast (siehe $1 für weitere Details). '''ÜBERTRAGE OHNE GENEHMIGUNG KEINE URHEBERRECHTLICH GESCHÜTZTEN INHALTE!'''", -'longpagewarning' => "'''Warnung:''' Diese Seite ist $1 KB groß; einige Browser könnten Probleme haben, Seiten zu bearbeiten, die größer als 32 KB sind. -Überlege bitte, ob eine Aufteilung der Seite in kleinere Abschnitte möglich ist.", 'longpageerror' => "'''Fehler: Der Text, den du zu speichern versuchst, ist $1 KB groß. Dies ist größer als das erlaubte Maximum von $2 KB.''' Er kann nicht gespeichert werden.", 'readonlywarning' => "'''Achtung: Die Datenbank wurde für Wartungsarbeiten gesperrt, so dass deine Änderungen derzeit nicht gespeichert werden können. @@ -1172,6 +1180,8 @@ $1", 'logdelete-failure' => "'''Logbuchsichtbarkeit kann nicht geändert werden:''' $1", 'revdel-restore' => 'Sichtbarkeit ändern', +'revdel-restore-deleted' => 'gelöschte Versionen', +'revdel-restore-visible' => 'sichtbare Versionen', 'pagehist' => 'Versionsgeschichte', 'deletedhist' => 'Gelöschte Versionen', 'revdelete-content' => 'Seiteninhalt', @@ -1239,11 +1249,13 @@ Stelle sicher, dass die Versionsgeschichte einer Seite historisch korrekt ist.', # Diffs 'history-title' => 'Versionsgeschichte von „$1“', 'difference' => '(Unterschied zwischen Versionen)', +'difference-multipage' => '(Unterschied zwischen Seiten)', 'lineno' => 'Zeile $1:', 'compareselectedversions' => 'Gewählte Versionen vergleichen', 'showhideselectedversions' => 'Gewählte Versionen zeigen/verstecken', 'editundo' => 'rückgängig', -'diff-multi' => '(Der Versionsvergleich bezieht {{PLURAL:$1|1 dazwischenliegende Version|$1 dazwischenliegende Versionen}} mit ein.)', +'diff-multi' => '({{PLURAL:$1|Eine dazwischenliegende Version|$1 dazwischenliegende Versionen}} von {{PLURAL:$2|einem Benutzer|$2 Benutzern}} {{PLURAL:$1|wird|werden}} nicht angezeigt)', +'diff-multi-manyusers' => '({{PLURAL:$1|$1 dazwischenliegende Versionen}} von mehr als {{PLURAL:$2|$2 Benutzern}}, die nicht angezeigt werden)', # Search results 'searchresults' => 'Suchergebnisse', @@ -1278,6 +1290,7 @@ Stelle sicher, dass die Versionsgeschichte einer Seite historisch korrekt ist.', 'searchprofile-everything-tooltip' => 'Gesamten Inhalt durchsuchen (inklusive Diskussionsseiten)', 'searchprofile-advanced-tooltip' => 'Suche in weiteren Namensräumen', 'search-result-size' => '$1 ({{PLURAL:$2|1 Wort|$2 Wörter}})', +'search-result-category-size' => '{{PLURAL:$1|1 Seite|$1 Seiten}} ({{PLURAL:$2|1 Unterkategorie|$2 Unterkategorien}}, {{PLURAL:$3|1 Datei|$3 Dateien}})', 'search-result-score' => 'Relevanz: $1 %', 'search-redirect' => '(Weiterleitung von „$1“)', 'search-section' => '(Abschnitt $1)', @@ -1352,6 +1365,7 @@ Stelle sicher, dass die Versionsgeschichte einer Seite historisch korrekt ist.', 'contextlines' => 'Zeilen pro Treffer:', 'contextchars' => 'Zeichen pro Zeile:', 'stub-threshold' => 'Linkformatierung kleiner Seiten (in Byte):', +'stub-threshold-disabled' => 'Deaktiviert', 'recentchangesdays' => 'Anzahl der Tage, die die Liste der „Letzten Änderungen“ standardmäßig umfassen soll:', 'recentchangesdays-max' => 'Maximal $1 {{PLURAL:$1|Tag|Tage}}', 'recentchangescount' => 'Anzahl der standardmäßig angezeigten Bearbeitungen:', @@ -1385,6 +1399,7 @@ Hier ein zufällig generierter Wert, den du verwenden kannst: $1', 'prefs-files' => 'Dateien', 'prefs-custom-css' => 'Benutzerdefinierte CSS', 'prefs-custom-js' => 'Benutzerdefiniertes JavaScript', +'prefs-common-css-js' => 'Gemeinsames CSS/JavaScript aller Benutzeroberflächen:', 'prefs-reset-intro' => 'Du kannst diese Seite verwenden, um die Einstellungen auf die Standards zurückzusetzen. Dies kann nicht mehr rückgängig gemacht werden.', 'prefs-emailconfirm-label' => 'E-Mail-Bestätigung:', @@ -1423,9 +1438,15 @@ Mit anderen Benutzern kannst du auch über die Benutzerdiskussionsseiten Kontakt 'prefs-advancedrendering' => 'Erweiterte Optionen', 'prefs-advancedsearchoptions' => 'Erweiterte Optionen', 'prefs-advancedwatchlist' => 'Erweiterte Optionen', -'prefs-display' => 'Anzeigeoptionen', +'prefs-displayrc' => 'Anzeigeoptionen', +'prefs-displaysearchoptions' => 'Anzeigeoptionen', +'prefs-displaywatchlist' => 'Anzeigeoptionen', 'prefs-diffs' => 'Versionsvergleich', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'E-Mail-Adresse scheint gültig zu sein', +'email-address-validity-invalid' => 'Eine gültige E-Mail-Adresse ist erforderlich.', + # User rights 'userrights' => 'Benutzerrechteverwaltung', 'userrights-lookup-user' => 'Gruppenzugehörigkeit verwalten', @@ -1508,6 +1529,7 @@ Mit anderen Benutzern kannst du auch über die Benutzerdiskussionsseiten Kontakt 'right-hideuser' => 'Benutzernamen sperren und verbergen', 'right-ipblock-exempt' => 'Ausnahme von IP-Sperren, Autoblocks und Rangesperren', 'right-proxyunbannable' => 'Ausnahme von automatischen Proxysperren', +'right-unblockself' => 'Sich selbst entsperren', 'right-protect' => 'Seitenschutzstatus ändern', 'right-editprotected' => 'Geschützte Seiten bearbeiten (ohne Kaskadenschutz)', 'right-editinterface' => 'Benutzeroberfläche bearbeiten', @@ -1530,7 +1552,6 @@ Mit anderen Benutzern kannst du auch über die Benutzerdiskussionsseiten Kontakt 'right-siteadmin' => 'Datenbank sperren und entsperren', 'right-reset-passwords' => 'Passwort eines anderen Benutzers zurücksetzen', 'right-override-export-depth' => 'Exportiere Seiten einschließlich verlinkter Seiten bis zu einer Tiefe von 5', -'right-versiondetail' => 'Detailinformation über die Software und ihre Versionsdaten einsehen', 'right-sendemail' => 'E-Mails an andere Benutzer senden', # User rights log @@ -1581,14 +1602,9 @@ Mit anderen Benutzern kannst du auch über die Benutzerdiskussionsseiten Kontakt 'recentchanges-legend' => 'Anzeigeoptionen', 'recentchangestext' => "Auf dieser Seite kannst du die letzten Änderungen auf '''{{SITENAME}}''' nachverfolgen.", 'recentchanges-feed-description' => 'Verfolge mit diesem Feed die letzten Änderungen in {{SITENAME}}.', -'recentchanges-label-legend' => 'Legende: $1.', -'recentchanges-legend-newpage' => '$1 - neue Seite', 'recentchanges-label-newpage' => 'Neue Seite', -'recentchanges-legend-minor' => '$1 - kleine Änderung', 'recentchanges-label-minor' => 'Kleine Änderung', -'recentchanges-legend-bot' => '$1 - Änderung durch einen Bot', 'recentchanges-label-bot' => 'Änderung durch einen Bot', -'recentchanges-legend-unpatrolled' => '$1 - nicht-kontrollierte Änderung', 'recentchanges-label-unpatrolled' => 'Nicht-kontrollierte Änderung', 'rcnote' => "{{PLURAL:$1|'''1''' Änderung|'''$1''' Änderungen}} in den {{PLURAL:$2|letzten 24 Stunden|letzten '''$2''' Tagen}}. Stand: $4, $5 Uhr.", @@ -1636,6 +1652,9 @@ Stand: $4, $5 Uhr.", 'upload_directory_missing' => 'Das Upload-Verzeichnis ($1) fehlt und konnte durch den Webserver auch nicht erstellt werden.', 'upload_directory_read_only' => 'Der Webserver hat keine Schreibrechte für das Upload-Verzeichnis ($1).', 'uploaderror' => 'Fehler beim Hochladen', +'upload-recreate-warning' => "'''Achtung: Eine Datei dieses Namens wurde bereits gelöscht oder verschoben.''' + +Es folgt ein Auszug aus dem Lösch- und Verschiebungs-Logbuch dieser Datei.", 'uploadtext' => "Benutze dieses Formular, um neue Dateien hochzuladen. Gehe zu der [[Special:FileList|Liste hochgeladener Dateien]], um vorhandene Dateien zu suchen und anzuzeigen. Siehe auch das [[Special:Log/upload|Datei-]] und [[Special:Log/delete|Lösch-Logbuch]]. @@ -1668,6 +1687,17 @@ Um ein '''Bild''' in einer Seite zu verwenden, nutze einen Link in der folgenden 'filetype-unwanted-type' => "'''„.$1“''' ist ein unerwünschtes Dateiformat. Erlaubt {{PLURAL:$3|ist das Dateiformat|sind die Dateiformate}}: $2.", 'filetype-banned-type' => "'''„.$1“''' ist ein nicht erlaubtes Dateiformat. Erlaubt {{PLURAL:$3|ist das Dateiformat|sind die Dateiformate}}: $2.", 'filetype-missing' => 'Die hochzuladende Datei hat keine Erweiterung (z. B. „.jpg“).', +'empty-file' => 'Die übertragene Datei ist leer', +'file-too-large' => 'Die übertragene Datei ist zu groß', +'filename-tooshort' => 'Der Dateiname ist zu kurz', +'filetype-banned' => 'Diese Dateiendung ist gesperrt.', +'verification-error' => 'Diese Datei hat die Dateiprüfung nicht bestanden.', +'hookaborted' => 'Der Versuch, die Änderung durchzuführen, ist aufgrund eines Extension-Hooks fehlgeschlagen', +'illegal-filename' => 'Der Dateiname ist nicht erlaubt', +'overwrite' => 'Das Überschreiben einer existierenden Datei ist nicht erlaubt', +'unknown-error' => 'Ein unbekannter Fehler ist aufgetreten.', +'tmp-create-error' => 'Temporäre Datei konnte nicht erstellt werden', +'tmp-write-error' => 'Fehler beim Schreiben der temporären Datei', 'large-file' => 'Die Dateigröße sollte nach Möglichkeit $1 nicht überschreiten. Diese Datei ist $2 groß.', 'largefileserver' => 'Die Datei ist größer als die vom Server eingestellte Maximalgröße.', 'emptyfile' => 'Die hochgeladene Datei ist leer. Der Grund kann ein Tippfehler im Dateinamen sein. Bitte kontrolliere, ob du die Datei wirklich hochladen willst.', @@ -1693,13 +1723,14 @@ Wenn du diese Datei trotzdem hochladen möchtest, gehe bitte zurück und ändere [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Diese Datei ist ein Duplikat der folgenden {{PLURAL:$1|Datei|$1 Dateien}}:', 'file-deleted-duplicate' => 'Eine mit dieser identische Datei ([[:$1]]) wurde früher gelöscht. Sieh das Lösch-Logbuch ein, bevor du sie hochlädst.', -'successfulupload' => 'Erfolgreich hochgeladen', 'uploadwarning' => 'Warnung', 'uploadwarning-text' => 'Bitte ändere unten die Dateibeschreibung und versuche es erneut.', 'savefile' => 'Datei speichern', 'uploadedimage' => 'hat „[[$1]]“ hochgeladen', 'overwroteimage' => 'hat eine neue Version von „[[$1]]“ hochgeladen', 'uploaddisabled' => 'Hochladen deaktiviert', +'copyuploaddisabled' => 'Das Hochladen von URLs ist deaktiviert', +'uploadfromurl-queued' => 'Dein Upload befindet sich nun in der Warteschlange.', 'uploaddisabledtext' => 'Das Hochladen von Dateien ist deaktiviert.', 'php-uploaddisabledtext' => 'Das Hochladen von Dateien wurde in PHP deaktiviert. Bitte überprüfe die file_uploads-Einstellung.', @@ -1734,6 +1765,14 @@ JD # Jenoptik MGP # Pentax PICT # verschiedene # ', +'upload-success-subj' => 'Erfolgreich hochgeladen', +'upload-success-msg' => 'Das Hochladen von [$2] war erfolgreich. Sie ist hier verfügbar: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Hochladefehler', +'upload-failure-msg' => 'Es gab ein Problem mit deiner hochgeladenen Datei von [$2]: + +$1', +'upload-warning-subj' => 'Hochladewarnung', +'upload-warning-msg' => 'Es gab ein Problem beim Hochladen von [$2]. Bitte zum [[Special:Upload/stash/$1|Hochladeformular]] zurückkehren, um dieses Problem zu beheben.', 'upload-proto-error' => 'Falsches Protokoll', 'upload-proto-error-text' => 'Die URL muss mit http:// oder ftp:// beginnen.', @@ -1795,6 +1834,7 @@ Aus Sicherheitsgründen ist img_auth.php deaktiviert.', 'listfiles_search_for' => 'Suche nach Datei:', 'imgfile' => 'Datei', 'listfiles' => 'Dateiliste', +'listfiles_thumb' => 'Vorschaubild', 'listfiles_date' => 'Datum', 'listfiles_name' => 'Name', 'listfiles_user' => 'Benutzer', @@ -1836,6 +1876,7 @@ Eine [[Special:WhatLinksHere/$2|vollständige Liste]] ist verfügbar.', 'uploadnewversion-linktext' => 'Eine neue Version dieser Datei hochladen', 'shared-repo-from' => 'aus $1', 'shared-repo' => 'einem gemeinsam genutzten Medienarchiv', +'filepage.css' => '/* Das folgende CSS wird auf Dateibeschreibungsseiten, auch auf fremden Client-Wikis, geladen. */', # File reversion 'filerevert' => 'Zurücksetzen von „$1“', @@ -1907,8 +1948,8 @@ Eine [[Special:WhatLinksHere/$2|vollständige Liste]] ist verfügbar.', 'statistics-edits' => 'Seitenbearbeitungen', 'statistics-edits-average' => 'Bearbeitungen pro Seite im Durchschnitt', 'statistics-views-total' => 'Seitenaufrufe gesamt', +'statistics-views-total-desc' => 'Aufrufe nicht vorhandener Seiten und von Spezialseiten werden nicht berücksichtigt', 'statistics-views-peredit' => 'Seitenaufrufe pro Bearbeitung', -'statistics-jobqueue' => 'Länge der [http://www.mediawiki.org/wiki/Manual:Job_queue Auftragswarteschlange]', 'statistics-users' => 'Registrierte [[Special:ListUsers|Benutzer]]', 'statistics-users-active' => 'Aktive Benutzer', 'statistics-users-active-desc' => 'Benutzer mit Bearbeitungen {{PLURAL:$1|in den letzten 24 Stunden|in den vergangenen $1 Tagen}}', @@ -1924,7 +1965,7 @@ Links aus Namensräumen werden hier nicht aufgelistet.', 'doubleredirects' => 'Doppelte Weiterleitungen', 'doubleredirectstext' => 'Diese Liste enthält Weiterleitungen, die auf weitere Weiterleitungen verlinken. Jede Zeile enthält Links zu der ersten und zweiten Weiterleitung sowie das Ziel der zweiten Weiterleitung, welches für gewöhnlich die gewünschte Zielseite ist, auf die bereits die erste Weiterleitung zeigen sollte. -Durchgestrichene Einträge wurden bereits erledigt.', +Durchgestrichene Einträge wurden bereits erledigt.', 'double-redirect-fixed-move' => '[[$1]] wurde verschoben und leitet nun nach [[$2]] weiter.', 'double-redirect-fixer' => 'RedirectBot', @@ -1947,6 +1988,8 @@ Jede Zeile enthält Links zu der ersten und zweiten Weiterleitung sowie das Ziel 'nmembers' => '{{PLURAL:$1|1 Eintrag|$1 Einträge}}', 'nrevisions' => '{{PLURAL:$1|1 Bearbeitung|$1 Bearbeitungen}}', 'nviews' => '{{PLURAL:$1|1 Abfrage|$1 Abfragen}}', +'nimagelinks' => 'Verwendet auf $1 {{PLURAL:$1|Seite|Seiten}}', +'ntransclusions' => 'verwendet auf $1 {{PLURAL:$1|Seite|Seiten}}', 'specialpage-empty' => 'Die Seite enthält aktuell keine Einträge.', 'lonelypages' => 'Verwaiste Seiten', 'lonelypagestext' => 'Die folgenden Seiten werden nicht eingebunden oder es wird nicht auf sie in {{SITENAME}} verwiesen.', @@ -2051,7 +2094,7 @@ Siehe auch die Liste der [[Special:WantedCategories|gewünschten Kategorien]].', 'sp-deletedcontributions-contribs' => 'Benutzerbeiträge', # Special:LinkSearch -'linksearch' => 'Weblink-Suche', +'linksearch' => 'Weblinksuche', 'linksearch-pat' => 'Suchmuster:', 'linksearch-ns' => 'Namensraum:', 'linksearch-ok' => 'Suchen', @@ -2083,7 +2126,7 @@ Siehe auch die Liste der [[Special:WantedCategories|gewünschten Kategorien]].', 'newuserlog-autocreate-entry' => 'Benutzerkonto wurde automatisch erstellt', # Special:ListGroupRights -'listgrouprights' => 'Benutzergruppen-Rechte', +'listgrouprights' => 'Benutzergruppenrechte', 'listgrouprights-summary' => 'Dies ist eine Liste der in diesem Wiki definierten Benutzergruppen und der damit verbundenen Rechte. Zusätzliche Informationen über einzelne Rechte können [[{{MediaWiki:Listgrouprights-helppage}}|hier]] gefunden werden.', 'listgrouprights-key' => '* Gewährtes Recht @@ -2102,34 +2145,41 @@ Zusätzliche Informationen über einzelne Rechte können [[{{MediaWiki:Listgroup 'listgrouprights-removegroup-self-all' => 'Kann alle Gruppen vom eigenen Konto entfernen', # E-mail user -'mailnologin' => 'Fehler beim E-Mail-Versand', -'mailnologintext' => 'Du musst [[Special:UserLogin|angemeldet sein]] und eine bestätigte E-Mail-Adresse in deinen [[Special:Preferences|Einstellungen]] eingetragen haben, um anderen Benutzern E-Mails schicken zu können.', -'emailuser' => 'E-Mail an diesen Benutzer', -'emailpage' => 'E-Mail an Benutzer', -'emailpagetext' => 'Du kannst dem Benutzer mit dem unten stehenden Formular eine E-Mail senden. +'mailnologin' => 'Fehler beim E-Mail-Versand', +'mailnologintext' => 'Du musst [[Special:UserLogin|angemeldet sein]] und eine bestätigte E-Mail-Adresse in deinen [[Special:Preferences|Einstellungen]] eingetragen haben, um anderen Benutzern E-Mails schicken zu können.', +'emailuser' => 'E-Mail an diesen Benutzer', +'emailpage' => 'E-Mail an Benutzer', +'emailpagetext' => 'Du kannst dem Benutzer mit dem unten stehenden Formular eine E-Mail senden. Als Absender wird die E-Mail-Adresse aus deinen [[Special:Preferences|Einstellungen]] eingetragen, damit der Benutzer dir antworten kann.', -'usermailererror' => 'Das E-Mail-Objekt gab einen Fehler zurück:', -'defemailsubject' => '{{SITENAME}}-E-Mail', -'noemailtitle' => 'Keine E-Mail-Adresse', -'noemailtext' => 'Dieser Benutzer hat keine gültige E-Mail-Adresse angegeben.', -'nowikiemailtitle' => 'E-Mail-Versand nicht möglich', -'nowikiemailtext' => 'Dieser Benutzer möchte keine E-Mails von anderen Benutzern erhalten.', -'email-legend' => 'E-Mail an einen anderen {{SITENAME}}-Benutzer senden', -'emailfrom' => 'Von:', -'emailto' => 'An:', -'emailsubject' => 'Betreff:', -'emailmessage' => 'Nachricht:', -'emailsend' => 'Senden', -'emailccme' => 'Sende eine Kopie der E-Mail an mich', -'emailccsubject' => 'Kopie deiner Nachricht an $1: $2', -'emailsent' => 'E-Mail verschickt', -'emailsenttext' => 'Deine E-Mail wurde verschickt.', -'emailuserfooter' => 'Diese E-Mail wurde von {{SITENAME}}-Benutzer „$1“ an „$2“ gesendet.', +'usermailererror' => 'Das E-Mail-Objekt gab einen Fehler zurück:', +'defemailsubject' => '{{SITENAME}}-E-Mail', +'usermaildisabled' => 'E-Mail-Empfang deaktiviert', +'usermaildisabledtext' => 'Du kannst in diesem Wiki keine E-Mails an andere Benutzer senden', +'noemailtitle' => 'Keine E-Mail-Adresse', +'noemailtext' => 'Dieser Benutzer hat keine gültige E-Mail-Adresse angegeben.', +'nowikiemailtitle' => 'E-Mail-Versand nicht möglich', +'nowikiemailtext' => 'Dieser Benutzer möchte keine E-Mails von anderen Benutzern erhalten.', +'email-legend' => 'E-Mail an einen anderen {{SITENAME}}-Benutzer senden', +'emailfrom' => 'Von:', +'emailto' => 'An:', +'emailsubject' => 'Betreff:', +'emailmessage' => 'Nachricht:', +'emailsend' => 'Senden', +'emailccme' => 'Sende eine Kopie der E-Mail an mich', +'emailccsubject' => 'Kopie deiner Nachricht an $1: $2', +'emailsent' => 'E-Mail verschickt', +'emailsenttext' => 'Deine E-Mail wurde verschickt.', +'emailuserfooter' => 'Diese E-Mail wurde von {{SITENAME}}-Benutzer „$1“ an „$2“ gesendet.', + +# User Messenger +'usermessage-summary' => 'Systemnachricht gespeichert.', +'usermessage-editor' => 'System-Messenger', +'usermessage-template' => 'MediaWiki:Benutzernachricht', # Watchlist 'watchlist' => 'Beobachtungsliste', 'mywatchlist' => 'Beobachtungsliste', -'watchlistfor' => "(von '''$1''')", +'watchlistfor2' => 'Von $1 $2', 'nowatchlist' => 'Du hast keine Einträge auf deiner Beobachtungsliste.', 'watchlistanontext' => 'Du musst dich $1, um deine Beobachtungsliste zu sehen oder Einträge auf ihr zu bearbeiten.', 'watchnologin' => 'Du bist nicht angemeldet', @@ -2192,6 +2242,8 @@ Es werden dir solange keine weiteren Benachrichtigungs-E-Mails gesendet, bis du Dein freundliches {{SITENAME}}-Benachrichtigungssystem -- +Um die Einstellungen der E-Mail-Benachrichtigung anzupassen, besuche {{fullurl:{{#special:Preferences}}}} + Um die Einstellungen deiner Beobachtungsliste anzupassen, besuche {{fullurl:{{#special:Watchlist}}/edit}} Um die Seite von deiner Beobachtungsliste herunterzunehmen, besuche $UNWATCHURL @@ -2242,7 +2294,10 @@ Die letzte Änderung stammt von [[User:$3|$3]] ([[User talk:$3|Diskussion]]{{int 'revertpage' => 'Änderungen von [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussion]]) rückgängig gemacht und letzte Version von [[User:$1|$1]] wiederhergestellt', 'revertpage-nouser' => 'Änderungen von (Benutzername entfernt) rückgängig gemacht und letzte Version von [[User:$1|$1]] wiederhergestellt', 'rollback-success' => 'Die Änderungen von $1 wurden rückgängig gemacht und die letzte Version von $2 wurde wiederhergestellt.', -'sessionfailure' => 'Es gab ein Problem mit der Übertragung deiner Benutzerdaten. + +# Edit tokens +'sessionfailure-title' => 'Sitzungsfehler', +'sessionfailure' => 'Es gab ein Problem mit der Übertragung deiner Benutzerdaten. Diese Aktion wurde daher sicherheitshalber abgebrochen, um eine falsche Zuordnung deiner Änderungen zu einem anderen Benutzer zu verhindern. Bitte gehe zurück und versuche den Vorgang erneut auszuführen.', @@ -2329,7 +2384,7 @@ Der aktuelle Text der gelöschten Seite ist nur Administratoren zugänglich.', 'undeletebtn' => 'Wiederherstellen', 'undeletelink' => 'ansehen/wiederherstellen', 'undeleteviewlink' => 'ansehen', -'undeletereset' => 'Abbrechen', +'undeletereset' => 'Zurücksetzen', 'undeleteinvert' => 'Auswahl umkehren', 'undeletecomment' => 'Grund:', 'undeletedarticle' => 'hat „[[$1]]“ wiederhergestellt', @@ -2371,18 +2426,22 @@ $1', 'month' => 'und Monat:', 'year' => 'bis Jahr:', -'sp-contributions-newbies' => 'Zeige nur Beiträge neuer Benutzer', -'sp-contributions-newbies-sub' => 'Für Neulinge', -'sp-contributions-newbies-title' => 'Benutzerbeiträge von neuen Benutzern', -'sp-contributions-blocklog' => 'Sperr-Logbuch', -'sp-contributions-deleted' => 'Gelöschte Beiträge', -'sp-contributions-logs' => 'Logbücher', -'sp-contributions-talk' => 'Diskussion', -'sp-contributions-userrights' => 'Benutzerrechteverwaltung', -'sp-contributions-blocked-notice' => '{{GENDER:$1|Dieser Benutzer|Diese Benutzerin|Dieser Benutzer}} ist derzeit gesperrt. Es folgt der aktuelle Eintrag aus dem Benutzersperr-Logbuch:', -'sp-contributions-search' => 'Suche nach Benutzerbeiträgen', -'sp-contributions-username' => 'IP-Adresse oder Benutzername:', -'sp-contributions-submit' => 'Suchen', +'sp-contributions-newbies' => 'Zeige nur Beiträge neuer Benutzer', +'sp-contributions-newbies-sub' => 'Für Neulinge', +'sp-contributions-newbies-title' => 'Benutzerbeiträge von neuen Benutzern', +'sp-contributions-blocklog' => 'Sperr-Logbuch', +'sp-contributions-deleted' => 'Gelöschte Beiträge', +'sp-contributions-uploads' => 'Hochgeladene Dateien', +'sp-contributions-logs' => 'Logbücher', +'sp-contributions-talk' => 'Diskussion', +'sp-contributions-userrights' => 'Benutzerrechteverwaltung', +'sp-contributions-blocked-notice' => '{{GENDER:$1|Dieser Benutzer|Diese Benutzerin|Dieser Benutzer}} ist derzeit gesperrt. Es folgt der aktuelle Eintrag aus dem Benutzersperr-Logbuch:', +'sp-contributions-blocked-notice-anon' => 'Diese IP-Adresse ist zurzeit gesperrt. +Zur Information folgt der aktuelle Auszug aus dem Sperr-Logbuch:', +'sp-contributions-search' => 'Suche nach Benutzerbeiträgen', +'sp-contributions-username' => 'IP-Adresse oder Benutzername:', +'sp-contributions-toponly' => 'Nur aktuelle Versionen zeigen', +'sp-contributions-submit' => 'Suchen', # What links here 'whatlinkshere' => 'Links auf diese Seite', @@ -2443,7 +2502,6 @@ Zur Aufhebung der Sperre siehe die [[Special:IPBlockList|Liste aller aktiven Spe 'ipb-edit-dropdown' => 'Sperrgründe bearbeiten', 'ipb-unblock-addr' => '„$1“ freigeben', 'ipb-unblock' => 'IP-Adresse/Benutzer freigeben', -'ipb-blocklist-addr' => 'Aktuelle Sperre für „$1“ anzeigen', 'ipb-blocklist' => 'Alle aktuellen Sperren anzeigen', 'ipb-blocklist-contribs' => 'Benutzerbeiträge von „$1“', 'unblockip' => 'IP-Adresse freigeben', @@ -2513,6 +2571,8 @@ Siehe die [[Special:IPBlockList|Liste der gesperrten IP-Adressen und Benutzernam 'sorbs_create_account_reason' => 'Die IP-Adresse ist in der DNSBL von {{SITENAME}} als offener PROXY gelistet. Das Anlegen neuer Benutzer ist nicht möglich.', 'cant-block-while-blocked' => 'Du kannst keine anderen Benutzer sperren, während du selbst gesperrt bist.', 'cant-see-hidden-user' => 'Der Benutzer, den du versuchst zu sperren, wurde bereits gesperrt und verborgen. Da du das „hideuser“-Recht nicht hast, kannst du die Benutzersperre nicht sehen und nicht bearbeiten.', +'ipbblocked' => 'Du kannst keine anderen Benutzer sperren oder entsperren, da du selbst gesperrt bist', +'ipbnounblockself' => 'Du hast nicht die Berechtigung, dich selbst zu entsperren', # Developer tools 'lockdb' => 'Datenbank sperren', @@ -2543,6 +2603,17 @@ Du bist dafür verantwortlich, dass Links weiterhin auf das korrekte Ziel verwei Die Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, diese ist leer oder eine Weiterleitung ohne Versionsgeschichte. Dies bedeutet, dass du die Umbenennung rückgängig machen kannst, sofern du einen Fehler gemacht hast. Du kannst hingegen keine Seite überschreiben. +'''Warnung!''' +Die Verschiebung kann weitreichende und unerwartete Folgen für häufig besuchte Seiten haben. +Du solltest daher die Konsequenzen verstanden haben, bevor du jetzt fortfährst.", +'movepagetext-noredirectfixer' => "Mit untenstehendem Formular kannst du eine Seite umbenennen, indem du sie mitsamt allen Versionen auf einen neuen Titel verschiebst. +Der alte Titel wird danach zum neuen weiterleiten. +Stelle sicher, dass du im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|kaputten Weiterleitungen]] überprüfst. +Du bist dafür verantwortlich, dass Links weiterhin auf das korrekte Ziel verweisen. + +Die Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, diese ist leer oder eine Weiterleitung ohne Versionsgeschichte. +Dies bedeutet, dass du die Umbenennung rückgängig machen kannst, sofern du einen Fehler gemacht hast. Du kannst hingegen keine Seite überschreiben. + '''Warnung!''' Die Verschiebung kann weitreichende und unerwartete Folgen für häufig besuchte Seiten haben. Du solltest daher die Konsequenzen verstanden haben, bevor du jetzt fortfährst.", @@ -2572,7 +2643,7 @@ Bitte den '''neuen''' Titel unter '''Ziel''' eintragen, darunter die Umbenennung 'cantmove-titleprotected' => 'Die Verschiebung kann nicht durchgeführt werden, da der Zieltitel zur Erstellung gesperrt ist.', 'talkexists' => 'Die Seite selbst wurde erfolgreich verschoben, aber die zugehörige Diskussionsseite nicht, da bereits eine mit dem neuen Titel existiert. Bitte gleiche die Inhalte von Hand ab.', 'movedto' => 'verschoben nach', -'movetalk' => 'Die Diskussionsseite mitverschieben, wenn möglich', +'movetalk' => 'Sofern möglich die Diskussionsseite mitverschieben', 'move-subpages' => 'Unterseiten verschieben (bis zu $1)', 'move-talk-subpages' => 'Unterseiten der Diskussionsseite verschieben (bis zu $1)', 'movepage-page-exists' => 'Die Seite „$1“ ist bereits vorhanden und kann nicht automatisch überschrieben werden.', @@ -2602,6 +2673,7 @@ Die Seite „[[:$1]]“ existiert bereits. Möchtest du diese löschen, um die S 'immobile-source-page' => 'Diese Seite ist nicht verschiebbar.', 'immobile-target-page' => 'Es kann nicht auf diese Zielseite verschoben werden.', 'imagenocrossnamespace' => 'Dateien können nicht aus dem {{ns:file}}-Namensraum heraus verschoben werden', +'nonfile-cannot-move-to-file' => 'Nichtdateien können nicht in den {{ns:file}}-Namensraum hinein verschoben werden', 'imagetypemismatch' => 'Die neue Dateierweiterung ist nicht mit der alten identisch', 'imageinvalidfilename' => 'Der Ziel-Dateiname ist ungültig', 'fix-double-redirects' => 'Nach dem Verschieben alle Weiterleitungen auf die Ursprungsseite bereinigen', @@ -2636,12 +2708,12 @@ Alternativ ist der Export auch mit der Syntax [[{{#Special:Export}}/{{MediaWiki: 'export-pagelinks' => 'Verlinkte Seiten automatisch mit exportieren, bis zur Rekursionstiefe von:', # Namespace 8 related -'allmessages' => 'MediaWiki-Systemtexte', +'allmessages' => 'MediaWiki-Systemnachrichten', 'allmessagesname' => 'Name', 'allmessagesdefault' => 'Standardtext', 'allmessagescurrent' => 'Aktueller Text', 'allmessagestext' => 'Dies ist eine Liste der MediaWiki-Systemtexte. -Besuche die Seiten [http://www.mediawiki.org/wiki/Localisation MediaWiki-Lokalisierung] und [http://translatewiki.net translatewiki.net], wenn du dich an der Lokalisierung von MediaWiki beteiligen möchtest.', +Bitte besuche die Seiten [http://www.mediawiki.org/wiki/Localisation MediaWiki-Lokalisierung] und [http://translatewiki.net translatewiki.net], sofern du dich an der Lokalisierung von MediaWiki beteiligen möchtest.', 'allmessagesnotsupportedDB' => 'Diese Spezialseite steht nicht zur Verfügung, da sie über den Parameter $wgUseDatabaseMessages deaktiviert wurde.', 'allmessages-filter-legend' => 'Filter', 'allmessages-filter' => 'Filter für angepassten Zustand:', @@ -2682,6 +2754,7 @@ Diese auf dem lokalen Rechner speichern und danach hier hochladen.', 'importstart' => 'Importiere Seite …', 'import-revision-count' => '– {{PLURAL:$1|1 Version|$1 Versionen}}', 'importnopages' => 'Keine Seite zum Importieren vorhanden.', +'imported-log-entries' => '$1 {{PLURAL:$1|lLogbucheintrag|Logbucheinträge}} importiert.', 'importfailed' => 'Import fehlgeschlagen: $1', 'importunknownsource' => 'Unbekannte Importquelle', 'importcantopen' => 'Importdatei konnte nicht geöffnet werden', @@ -2774,6 +2847,8 @@ Diese auf dem lokalen Rechner speichern und danach hier hochladen.', 'tooltip-upload' => 'Hochladen starten', 'tooltip-rollback' => 'Macht alle letzten Änderungen der Seite, die vom gleichen Benutzer vorgenommen worden sind, durch nur einen Klick rückgängig.', 'tooltip-undo' => 'Macht lediglich diese eine Änderung rückgängig und zeigt das Resultat in der Vorschau an, damit in der Zusammenfassungszeile eine Begründung angegeben werden kann.', +'tooltip-preferences-save' => 'Einstellungen speichern', +'tooltip-summary' => 'Gib eine kurze Zusammenfassung ein', # Stylesheets 'common.css' => '/* Das folgende CSS wird für alle Benutzeroberflächen geladen. */', @@ -2914,14 +2989,17 @@ Durch das Herunterladen und Öffnen der Datei kann dein Computer beschädigt wer 'imagemaxsize' => "Maximale Bildgröße:
    ''(für Dateibeschreibungsseiten)''", 'thumbsize' => 'Standardgröße der Vorschaubilder (Thumbnails):', 'widthheightpage' => '$1×$2, {{PLURAL:$3|1 Seite|$3 Seiten}}', -'file-info' => '(Dateigröße: $1, MIME-Typ: $2)', -'file-info-size' => '($1 × $2 Pixel, Dateigröße: $3, MIME-Typ: $4)', +'file-info' => 'Dateigröße: $1, MIME-Typ: $2', +'file-info-size' => '$1 × $2 Pixel, Dateigröße: $3, MIME-Typ: $4', 'file-nohires' => 'Keine höhere Auflösung vorhanden.', -'svg-long-desc' => '(SVG-Datei, Basisgröße: $1 × $2 Pixel, Dateigröße: $3)', +'svg-long-desc' => 'SVG-Datei, Basisgröße: $1 × $2 Pixel, Dateigröße: $3', 'show-big-image' => 'Version in höherer Auflösung', 'show-big-image-thumb' => 'Größe der Voransicht: $1 × $2 Pixel', 'file-info-gif-looped' => 'Endlosschleife', 'file-info-gif-frames' => '$1 {{PLURAL:$1|Bild|Bilder}}', +'file-info-png-looped' => 'Endlosschleife', +'file-info-png-repeat' => '$1-{{PLURAL:$1|mal|mal}} abgespielt', +'file-info-png-frames' => '$1 {{PLURAL:$1|Bild|Bilder}}', # Special:NewFiles 'newimages' => 'Neue Dateien', @@ -3074,6 +3152,7 @@ Darauf folgende Seitenlinks in derselben Zeile definieren Ausnahmen, in deren Ko 'exif-gpsareainformation' => 'Name des GPS-Gebietes', 'exif-gpsdatestamp' => 'GPS-Datum', 'exif-gpsdifferential' => 'GPS-Differentialkorrektur', +'exif-objectname' => 'Kurztitel', # EXIF attributes 'exif-compression-1' => 'Unkomprimiert', @@ -3233,25 +3312,25 @@ Darauf folgende Seitenlinks in derselben Zeile definieren Ausnahmen, in deren Ko 'limitall' => 'alle', # E-mail address confirmation -'confirmemail' => 'E-Mail-Adresse bestätigen (Authentifizierung)', -'confirmemail_noemail' => 'Du hast keine gültige E-Mail-Adresse in deinen [[Special:Preferences|persönlichen Einstellungen]] eingetragen.', -'confirmemail_text' => '{{SITENAME}} erfordert, dass du deine E-Mail-Adresse bestätigst (authentifizieren), bevor du die erweiterten E-Mail-Funktionen benutzen kannst. Klicke bitte auf die unten stehende, mit „Bestätigungscode zuschicken“ beschriftete Schaltfläche, damit eine automatisch erstellte E-Mail an die angegebene Adresse geschickt wird. Diese E-Mail enthält eine Web-Adresse mit einem Bestätigungscode. Indem du diese Webseite in deinem Webbrowser öffnest, bestätigst du, dass die angegebene E-Mail-Adresse korrekt und gültig ist.', -'confirmemail_pending' => 'Es wurde dir bereits ein Bestätigungscode per E-Mail zugeschickt. +'confirmemail' => 'E-Mail-Adresse bestätigen (Authentifizierung)', +'confirmemail_noemail' => 'Du hast keine gültige E-Mail-Adresse in deinen [[Special:Preferences|persönlichen Einstellungen]] eingetragen.', +'confirmemail_text' => '{{SITENAME}} erfordert, dass du deine E-Mail-Adresse bestätigst (authentifizieren), bevor du die erweiterten E-Mail-Funktionen benutzen kannst. Klicke bitte auf die unten stehende, mit „Bestätigungscode zuschicken“ beschriftete Schaltfläche, damit eine automatisch erstellte E-Mail an die angegebene Adresse geschickt wird. Diese E-Mail enthält eine Web-Adresse mit einem Bestätigungscode. Indem du diese Webseite in deinem Webbrowser öffnest, bestätigst du, dass die angegebene E-Mail-Adresse korrekt und gültig ist.', +'confirmemail_pending' => 'Es wurde dir bereits ein Bestätigungscode per E-Mail zugeschickt. Wenn du dein Benutzerkonto erst vor kurzem erstellt hast, warte bitte noch ein paar Minuten auf die E-Mail, bevor du einen neuen Code anforderst.', -'confirmemail_send' => 'Bestätigungscode zuschicken', -'confirmemail_sent' => 'Bestätigungs-E-Mail wurde verschickt.', -'confirmemail_oncreate' => 'Ein Bestätigungs-Code wurde an deine E-Mail-Adresse gesandt. Dieser Code wird für die Anmeldung nicht benötigt, jedoch wird er zur Aktivierung der E-Mail-Funktionen innerhalb des Wikis gebraucht.', -'confirmemail_sendfailed' => '{{SITENAME}} konnte die Bestätigungs-E-Mail nicht an dich versenden. +'confirmemail_send' => 'Bestätigungscode zuschicken', +'confirmemail_sent' => 'Bestätigungs-E-Mail wurde verschickt.', +'confirmemail_oncreate' => 'Ein Bestätigungs-Code wurde an deine E-Mail-Adresse gesandt. Dieser Code wird für die Anmeldung nicht benötigt, jedoch wird er zur Aktivierung der E-Mail-Funktionen innerhalb des Wikis gebraucht.', +'confirmemail_sendfailed' => '{{SITENAME}} konnte die Bestätigungs-E-Mail nicht an dich versenden. Bitte prüfe die E-Mail-Adresse auf ungültige Zeichen. Rückmeldung des Mailservers: $1', -'confirmemail_invalid' => 'Ungültiger Bestätigungscode. Möglicherweise ist der Bestätigungszeitraum verstrichen. Versuche bitte, die Bestätigung zu wiederholen.', -'confirmemail_needlogin' => 'Du musst dich $1, um deine E-Mail-Adresse zu bestätigen.', -'confirmemail_success' => 'Deine E-Mail-Adresse wurde erfolgreich bestätigt. Du kannst dich jetzt [[Special:UserLogin|anmelden]].', -'confirmemail_loggedin' => 'Deine E-Mail-Adresse wurde erfolgreich bestätigt.', -'confirmemail_error' => 'Es gab einen Fehler bei der Bestätigung deiner E-Mail-Adresse.', -'confirmemail_subject' => '[{{SITENAME}}] Bestätigung der E-Mail-Adresse', -'confirmemail_body' => 'Hallo, +'confirmemail_invalid' => 'Ungültiger Bestätigungscode. Möglicherweise ist der Bestätigungszeitraum verstrichen. Versuche bitte, die Bestätigung zu wiederholen.', +'confirmemail_needlogin' => 'Du musst dich $1, um deine E-Mail-Adresse zu bestätigen.', +'confirmemail_success' => 'Deine E-Mail-Adresse wurde erfolgreich bestätigt. Du kannst dich jetzt [[Special:UserLogin|anmelden]].', +'confirmemail_loggedin' => 'Deine E-Mail-Adresse wurde erfolgreich bestätigt.', +'confirmemail_error' => 'Es gab einen Fehler bei der Bestätigung deiner E-Mail-Adresse.', +'confirmemail_subject' => '[{{SITENAME}}] Bestätigung der E-Mail-Adresse', +'confirmemail_body' => 'Hallo, jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat das Benutzerkonto „$2“ in {{SITENAME}} registriert. @@ -3267,8 +3346,36 @@ Wenn du das genannte Benutzerkonto *nicht* registriert hast, folge diesem Link, $5 Dieser Bestätigungscode ist gültig bis $6, $7 Uhr.', -'confirmemail_invalidated' => 'E-Mail-Adressbestätigung abbrechen', -'invalidateemail' => 'E-Mail-Adressbestätigung abbrechen', +'confirmemail_body_changed' => 'Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, +hat die E-Mail-Adresse des Benutzerkontos „$2“ zu dieser Adresse auf {{SITENAME}} geändert. + +Um zu bestätigen, dass dieses Benutzerkonto wirklich dir gehört +und um die E-Mail-Features auf {{SITENAME}} zu reaktivieren, öffne diesen Link in deinem Browser: + +$3 + +Falls das Konto *nicht* dir gehört, folge diesem Link, +um die E-Mail-Adress-Bestätigung abzubrechen: + +$5 + +Dieser Bestätigungscode ist gültig bis $4.', +'confirmemail_body_set' => 'Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, +hat die E-Mail-Adresse des Benutzerkontos „$2“ auf {{SITENAME}} zu dieser E-Mail-Adresse abgeändert. + +Um zu bestätigen, dass dieses Benutzerkonto wirklich zu dir gehört +und um die E-Mail-Funktionen auf {{SITENAME}} wieder zu aktivieren, öffne bitte den folgenden Link in deinem Browser: + +$3 + +Falls das Konto *nicht* zu dir gehört, bitte den nachfolgenden Link öffnen, +um die Bestätigung der E-Mail-Adresse abzubrechen: + +$5 + +Dieser Bestätigungscode ist gültig bis $4.', +'confirmemail_invalidated' => 'E-Mail-Adressbestätigung abbrechen', +'invalidateemail' => 'E-Mail-Adressbestätigung abbrechen', # Scary transclusion 'scarytranscludedisabled' => '[Interwiki-Einbindung ist deaktiviert]', @@ -3313,6 +3420,7 @@ Bitte bestätige, dass du diese Seite wirklich neu erstellen möchten.", 'table_pager_first' => 'Erste Seite', 'table_pager_last' => 'Letzte Seite', 'table_pager_limit' => 'Zeige $1 Einträge pro Seite', +'table_pager_limit_label' => 'Positionen pro Seite:', 'table_pager_limit_submit' => 'Los', 'table_pager_empty' => 'Keine Ergebnisse', @@ -3382,18 +3490,26 @@ Du kannst auch die [[Special:Watchlist/edit|Standard-Bearbeitungsseite]] benutze 'version-specialpages' => 'Spezialseiten', 'version-parserhooks' => 'Parser-Hooks', 'version-variables' => 'Variablen', +'version-skins' => 'Benutzeroberflächen', 'version-other' => 'Anderes', -'version-mediahandlers' => 'Medien-Handler', +'version-mediahandlers' => 'Mediennutzung', 'version-hooks' => "Schnittstellen ''(Hooks)''", 'version-extension-functions' => 'Funktionsaufrufe', -'version-parser-extensiontags' => "Parser-Erweiterungen ''(tags)''", -'version-parser-function-hooks' => 'Parser-Funktionen', +'version-parser-extensiontags' => "Parsererweiterungen ''(tags)''", +'version-parser-function-hooks' => 'Parserfunktionen', 'version-skin-extension-functions' => 'Benutzeroberflächen-Erweiterungs-Funktionen', 'version-hook-name' => 'Schnittstellenname', 'version-hook-subscribedby' => 'Aufruf von', 'version-version' => '(Version $1)', 'version-svn-revision' => '(Version $2)', 'version-license' => 'Lizenz', +'version-poweredby-credits' => "Diese Website nutzt '''[http://www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.", +'version-poweredby-others' => 'andere', +'version-license-info' => "MediaWiki ist freie Software, d. h. sie kann, gemäß den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/ oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden. + +MediaWiki wird in der Hoffnung verteilt, dass es nützlich sein wird, allerdings OHNE JEGLICHE GARANTIE und sogar ohne die implizierte Garantie einer MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Hierzu sind weitere Hinweise in der ''GNU General Public License'' enthalten. + +Eine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License''] sollte zusammen mit diesem Programm verteilt worden sein. Sofern dies nicht der Fall war, kann eine Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich angefordert oder auf deren Website [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html online gelesen] werden.", 'version-software' => 'Installierte Software', 'version-software-product' => 'Produkt', 'version-software-version' => 'Version', @@ -3407,7 +3523,7 @@ Du kannst auch die [[Special:Watchlist/edit|Standard-Bearbeitungsseite]] benutze Die Eingabe muss ohne den Zusatz „{{ns:file}}:“ erfolgen.', # Special:FileDuplicateSearch -'fileduplicatesearch' => 'Datei-Duplikat-Suche', +'fileduplicatesearch' => 'Dateiduplikatsuche', 'fileduplicatesearch-summary' => 'Suche nach Datei-Duplikaten auf Basis ihres Hash-Wertes. Die Eingabe muss ohne den Zusatz „{{ns:file}}:“ erfolgen.', @@ -3463,6 +3579,15 @@ Die Eingabe muss ohne den Zusatz „{{ns:file}}:“ erfolgen.', 'tags-edit' => 'bearbeiten', 'tags-hitcount' => '$1 {{PLURAL:$1|Änderung|Änderungen}}', +# Special:ComparePages +'comparepages' => 'Seiten vergleichen', +'compare-selector' => 'Seitenversionen vergleichen', +'compare-page1' => 'Seite 1', +'compare-page2' => 'Seite 2', +'compare-rev1' => 'Version 1', +'compare-rev2' => 'Version 2', +'compare-submit' => 'Vergleichen', + # Database error messages 'dberr-header' => 'Dieses Wiki hat ein Problem', 'dberr-problems' => 'Entschuldigung. Diese Seite hat momentan technische Schwierigkeiten.', @@ -3479,8 +3604,13 @@ Die Eingabe muss ohne den Zusatz „{{ns:file}}:“ erfolgen.', 'htmlform-float-invalid' => 'Der angegebene Wert ist keine Zahl.', 'htmlform-int-toolow' => 'Der angegebene Wert ist unter dem Minimum von $1', 'htmlform-int-toohigh' => 'Der angegebene Wert ist über dem Maximum von $1', +'htmlform-required' => 'Dieser Wert wird benötigt', 'htmlform-submit' => 'Speichern', 'htmlform-reset' => 'Änderungen rückgängig machen', 'htmlform-selectorother-other' => 'Andere', +# SQLite database support +'sqlite-has-fts' => 'Version $1 mit Unterstützung für die Volltextsuche', +'sqlite-no-fts' => 'Version $1 ohne Unterstützung für die Volltextsuche', + ); diff --git a/languages/messages/MessagesDe_at.php b/languages/messages/MessagesDe_at.php index 7dde115c..cf91692a 100644 --- a/languages/messages/MessagesDe_at.php +++ b/languages/messages/MessagesDe_at.php @@ -10,6 +10,7 @@ * @author Laximilian scoken * @author Mucalexx * @author Revolus + * @author Wdwd * @author ✓ */ @@ -18,7 +19,7 @@ $fallback = 'de'; $messages = array( # Dates 'january' => 'Jänner', -'february' => 'Feber', +'february' => 'Februar', 'december' => 'Dezember', 'january-gen' => 'Jänners', 'february-gen' => 'Febers', diff --git a/languages/messages/MessagesDe_ch.php b/languages/messages/MessagesDe_ch.php index 8fc373e8..36328c91 100644 --- a/languages/messages/MessagesDe_ch.php +++ b/languages/messages/MessagesDe_ch.php @@ -7,6 +7,7 @@ * @ingroup Language * @file * + * @author Kghbln * @author MichaelFrey * @author SVG * @author The Evil IP address @@ -28,9 +29,7 @@ Bitte versuche es in ein paar Minuten erneut.', 'resetpass_announce' => 'Anmeldung mit dem per E-Mail zugesandten Code. Um die Anmeldung abzuschliessen, musst du jetzt ein neues Passwort wählen.', # Edit pages -'longpagewarning' => "'''Warnung:''' Diese Seite ist $1 KB gross; einige Browser könnten Probleme haben, Seiten zu bearbeiten, die grösser als 32 KB sind. -Überlege bitte, ob eine Aufteilung der Seite in kleinere Abschnitte möglich ist.", -'longpageerror' => "'''Fehler: Der Text, den du zu speichern versuchst, ist $1 KB gross. Dies ist grösser als das erlaubte Maximum von $2 KB.''' +'longpageerror' => "'''Fehler: Der Text, den du zu speichern versuchst, ist $1 KB gross. Dies ist grösser als das erlaubte Maximum von $2 KB.''' Er kann nicht gespeichert werden.", # Parser/template warnings @@ -59,6 +58,7 @@ Er kann nicht gespeichert werden.", 'right-override-export-depth' => 'Exportiere Seiten einschliesslich verlinkter Seiten bis zu einer Tiefe von 5', # Upload +'file-too-large' => 'Die übertragene Datei ist zu gross', 'large-file' => 'Die Dateigrösse sollte nach Möglichkeit $1 nicht überschreiten. Diese Datei ist $2 gross.', 'largefileserver' => 'Die Datei ist grösser als die vom Server eingestellte Maximalgrösse.', 'fileexists-extension' => "Eine Datei mit ähnlichem Namen existiert bereits: [[$2|thumb]] @@ -94,17 +94,7 @@ Die Ausgabe kann durch die Auswahl des Logbuchtyps, des Benutzers oder des Seite 'maximum-size' => 'Maximalgrösse:', # Block/unblock -'ipbreason-dropdown' => '* Allgemeine Sperrgründe -** Löschen von Seiten -** Einstellen unsinniger Seiten -** Fortgesetzte Verstösse gegen die Richtlinien für Weblinks -** Verstoss gegen den Grundsatz „Keine persönlichen Angriffe“ -* Benutzerspezifische Sperrgründe -** Ungeeigneter Benutzername -** Neuanmeldung eines unbeschränkt gesperrten Benutzers -* IP-spezifische Sperrgründe -** Proxy, wegen Vandalismus einzelner Benutzer längerfristig gesperrt', -'ip_range_toolarge' => 'Adressbereiche, die größer als /$1 sind, sind nicht erlaubt.', +'ip_range_toolarge' => 'Adressbereiche, die größer als /$1 sind, sind nicht erlaubt.', # Thumbnails 'thumbnail-more' => 'vergrössern', @@ -117,8 +107,9 @@ Die Ausgabe kann durch die Auswahl des Logbuchtyps, des Benutzers oder des Seite # Media information 'imagemaxsize' => "Maximale Bildgrösse:
    ''(für Dateibeschreibungsseiten)''", 'thumbsize' => 'Standardgrösse der Vorschaubilder (Thumbnails):', -'file-info' => '(Dateigrösse: $1, MIME-Typ: $2)', -'file-info-size' => '($1 × $2 Pixel, Dateigrösse: $3, MIME-Typ: $4)', +'file-info' => 'Dateigrösse: $1, MIME-Typ: $2', +'file-info-size' => '$1 × $2 Pixel, Dateigrösse: $3, MIME-Typ: $4', +'svg-long-desc' => 'SVG-Datei, Basisgrösse: $1 × $2 Pixel, Dateigrösse: $3', 'show-big-image-thumb' => 'Grösse der Voransicht: $1 × $2 Pixel', # Metadata @@ -143,6 +134,13 @@ Die Ausgabe kann durch die Auswahl des Logbuchtyps, des Benutzers oder des Seite 'exif-lightsource-14' => 'Kaltweiss fluoreszierend (W 3900–4500 K)', 'exif-lightsource-15' => 'Weiss fluoreszierend (WW 3200–3700 K)', +# Special:Version +'version-license-info' => "MediaWiki ist freie Software, d. h. sie kann, gemäss den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/ oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden. + +MediaWiki wird in der Hoffnung verteilt, dass es nützlich sein wird, allerdings OHNE JEGLICHE GARANTIE und sogar ohne die implizierte Garantie einer MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Hierzu sind weitere Hinweise in der ''GNU General Public License'' enthalten. + +Eine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License''] sollte zusammen mit diesem Programm verteilt worden sein. Sofern dies nicht der Fall war, kann eine Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich angefordert oder auf deren Website [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html online gelesen] werden.", + # Special:FileDuplicateSearch 'fileduplicatesearch-info' => '$1 × $2 Pixel
    Dateigrösse: $3
    MIME-Typ: $4', diff --git a/languages/messages/MessagesDe_formal.php b/languages/messages/MessagesDe_formal.php index 3d30f038..0d20961a 100644 --- a/languages/messages/MessagesDe_formal.php +++ b/languages/messages/MessagesDe_formal.php @@ -138,7 +138,7 @@ Möglicherweise haben Sie Ihr Passwort bereits erfolgreich geändert oder ein ne 'anoneditwarning' => "Sie bearbeiten diese Seite unangemeldet. Wenn Sie speichern, wird Ihre aktuelle IP-Adresse in der Versionsgeschichte aufgezeichnet und ist damit unwiderruflich '''öffentlich''' einsehbar.", 'missingsummary' => "'''Hinweis:''' Sie haben keine Zusammenfassung angegeben. Wenn Sie erneut auf „{{int:savearticle}}“ klicken, wird Ihre Änderung ohne Zusammenfassung übernommen.", 'missingcommenttext' => 'Ihr Abschnitt enthält keinen Text.', -'missingcommentheader' => "'''ACHTUNG:''' Sie haben keine Überschrift im Feld „Betreff:“ eingegeben. Wenn Sie erneut auf „Seite speichern“ klicken, wird Ihre Bearbeitung ohne Überschrift gespeichert.", +'missingcommentheader' => "'''Achtung:''' Sie haben kein Betreff/Überschrift eingegeben. Wenn Sie erneut auf „{{int:savearticle}}“ klicken, wird Ihre Bearbeitung ohne Überschrift gespeichert.", 'blockedtext' => "'''Ihr Benutzername oder Ihre IP-Adresse wurde gesperrt.''' Die Sperrung wurde von $1 durchgeführt. @@ -191,7 +191,11 @@ oder in den zugehörigen [{{fullurl:{{#special:Log}}|pa '''Es wurde noch nicht gespeichert!'''", 'userjspreview' => "'''Beachten Sie, dass Sie nur eine Vorschau Ihres Benutzer-JavaScript betrachten.''' '''Es wurde noch nicht gespeichert!'''", -'userinvalidcssjstitle' => "'''Warnung:''' Es existiert kein Skin „$1“. Bitte bedenken Sie, dass benutzerspezifische .css- und .js-Seiten mit einem Kleinbuchstaben anfangen müssen, also z.B. ''{{ns:user}}:Mustermann/monobook.css'' an Stelle von ''{{ns:user}}:Mustermann/Monobook.css''.", +'sitecsspreview' => "'''Beachten Sie, dass Sie nur eine Vorschau dieses CSS betrachten.''' +'''Es wurde noch nicht gespeichert!'''", +'sitejspreview' => "'''Beachten Sie, dass Sie nur eine Vorschau dieses JavaScript betrachten.''' +'''Es wurde noch nicht gespeichert!'''", +'userinvalidcssjstitle' => "'''Achtung:''' Die Benutzeroberfläche „$1“ existiert nicht. Bedenken Sie, dass benutzerspezifische .css- und .js-Seiten mit einem Kleinbuchstaben anfangen müssen, also beispielsweise ''{{ns:user}}:Mustermann/vector.css'' an Stelle von ''{{ns:user}}:Mustermann/Vector.css''.", 'previewconflict' => 'Diese Vorschau gibt den Inhalt des oberen Textfeldes wieder. So wird die Seite aussehen, wenn Sie jetzt speichern.', 'session_fail_preview' => "'''Ihre Bearbeitung konnte nicht gespeichert werden, da Sitzungsdaten verloren gegangen sind. Bitte versuchen Sie es erneut, indem Sie unter der folgenden Textvorschau nochmals auf „Seite speichern“ klicken. @@ -220,8 +224,6 @@ Reichen Sie keine Texte ein, falls Sie nicht wollen, dass diese ohne Einschränk Sie bestätigen hiermit auch, dass Sie diese Texte selbst geschrieben haben oder diese von einer gemeinfreien Quelle kopiert haben (siehe $1 für weitere Details). '''ÜBERTRAGEN SIE OHNE GENEHMIGUNG KEINE URHEBERRECHTLICH GESCHÜTZTEN INHALTE!'''", -'longpagewarning' => "'''Warnung:''' Diese Seite ist $1 kB groß; einige Browser könnten Probleme haben, Seiten zu bearbeiten, die größer als 32 kB sind. -Überlegen Sie bitte, ob eine Aufteilung der Seite in kleinere Abschnitte möglich ist.", 'longpageerror' => "'''Fehler: Der Text, den Sie zu speichern versuchen, ist $1 KB groß. Dies ist größer als das erlaubte Maximum von $2 KB.''' Er kann nicht gespeichert werden.", 'readonlywarning' => "'''Achtung: Die Datenbank wurde für Wartungsarbeiten gesperrt, so dass Ihre Änderungen derzeit nicht gespeichert werden können. @@ -360,6 +362,7 @@ Wenn Sie diese Datei trotzdem hochladen möchten, gehen Sie bitte zurück und ä [[File:$1|thumb|center|$1]]', 'file-deleted-duplicate' => 'Eine mit dieser identische Datei ([[:$1]]) wurde früher gelöscht. Sehen Sie das Lösch-Logbuch ein, bevor Sie sie hochladen.', 'uploadwarning-text' => 'Bitte ändern Sie unten die Dateibeschreibung und versuchen Sie es erneut.', +'uploadfromurl-queued' => 'Ihr Upload befindet sich nun in der Warteschlange.', 'php-uploaddisabledtext' => 'Das Hochladen von Dateien wurde in PHP deaktiviert. Bitte überprüfen Sie die file_uploads-Einstellung.', 'filewasdeleted' => 'Eine Datei mit diesem Namen wurde schon einmal hochgeladen und zwischenzeitlich wieder gelöscht. Bitte prüfen Sie zuerst den Eintrag im $1, bevor Sie die Datei wirklich speichern.', @@ -454,7 +457,9 @@ Es werden Ihnen solange keine weiteren Benachrichtigungs-E-Mails gesendet, bis S Das freundliche {{SITENAME}}-Benachrichtigungssystem -- -Um die Einstellungen Ihrer Beobachtungsliste anzupassen, besuchen Sie: {{fullurl:{{#special:Watchlist}}/edit}} +Um die Einstellungen der E-Mail-Benachrichtigung anzupassen, besuchen Sie {{fullurl:{{#special:Preferences}}}} + +Um die Einstellungen Ihrer Beobachtungsliste anzupassen, besuchen Sie {{fullurl:{{#special:Watchlist}}/edit}} Um diese Seite von Ihrer Beobachtungsliste zu entfernen, besuchen Sie $UNWATCHURL @@ -465,7 +470,7 @@ Rückmeldungen und weitere Hilfe: {{fullurl:{{MediaWiki:Helppage}}}}', 'confirmdeletetext' => 'Sie sind dabei, eine Seite mit allen zugehörigen älteren Versionen zu löschen. Bitte bestätigen Sie, dass Sie sich der Konsequenzen bewusst sind, und dass Sie in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]] handeln.', 'deletedtext' => '„$1“ wurde gelöscht. Im $2 finden Sie eine Liste der letzten Löschungen.', -# Rollback +# Edit tokens 'sessionfailure' => 'Es gab ein Problem mit der Übertragung Ihrer Benutzerdaten. Diese Aktion wurde daher sicherheitshalber abgebrochen, um eine falsche Zuordnung Ihrer Änderungen zu einem anderen Benutzer zu verhindern. Bitte gehen Sie zurück und versuchen Sie den Vorgang erneut auszuführen.', @@ -501,13 +506,15 @@ Bitte geben Sie den Grund für die Sperre an.', 'proxyblockreason' => 'Ihre IP-Adresse wurde gesperrt, da sie ein offener Proxy ist. Bitte kontaktieren Sie Ihren Internet-Provider oder Ihre Systemadministratoren und informieren Sie sie über dieses mögliche Sicherheitsproblem.', 'cant-block-while-blocked' => 'Sie können keine anderen Benutzer sperren, während Sie selbst gesperrt sind.', 'cant-see-hidden-user' => 'Der Benutzer, den Sie versuchen zu sperren, wurde bereits gesperrt und verborgen. Da Sie das „hideuser“-Recht nicht haben, können Sie die Benutzersperre nicht sehen und nicht bearbeiten.', +'ipbblocked' => 'Sie können keine anderen Benutzer sperren oder entsperren, da Sie selbst gesperrt sind', +'ipbnounblockself' => 'Sie haben nicht die Berechtigung, sich selbst zu entsperren', # Developer tools 'locknoconfirm' => 'Sie haben das Bestätigungsfeld nicht markiert.', 'lockdbsuccesstext' => 'Die {{SITENAME}}-Datenbank wurde gesperrt.
    Bitte geben Sie die Datenbank [[Special:UnlockDB|wieder frei]], sobald die Wartung abgeschlossen ist.', # Move page -'movepagetext' => "Mit untenstehendem Formular können Sie eine Seite umbenennen, indem Sie sie mitsamt allen Versionen auf einen neuen Titel verschieben. +'movepagetext' => "Mit untenstehendem Formular können Sie eine Seite umbenennen, indem Sie sie mitsamt allen Versionen auf einen neuen Titel verschieben. Der alte Titel wird danach zum neuen weiterleiten. Sie können Weiterleitungen, die auf den Originaltitel verlinken, automatisch korrigieren lassen. Stellen Sie sicher, dass Sie im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|kaputten Weiterleitungen]] überprüfen. @@ -519,26 +526,37 @@ Dies bedeutet, dass Sie die Umbenennung rückgängig machen können, sofern Sie '''Warnung!''' Die Verschiebung kann weitreichende und unerwartete Folgen für häufig besuchte Seiten haben. Sie sollten daher die Konsequenzen verstanden haben, bevor Sie jetzt fortfahren.", -'movepagetalktext' => "Die dazugehörige Diskussionsseite wird, sofern vorhanden, mitverschoben, '''es sei denn:''' +'movepagetext-noredirectfixer' => "Mit untenstehendem Formular können Sie eine Seite umbenennen, indem Sie sie mitsamt allen Versionen auf einen neuen Titel verschieben. +Der alte Titel wird danach zum neuen weiterleiten. +Stellen Sie sicher, dass Sie im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|kaputten Weiterleitungen]] überprüfen. +Sie sind dafür verantwortlich, dass Links weiterhin auf das korrekte Ziel verweisen. + +Die Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, diese ist leer oder eine Weiterleitung ohne Versionsgeschichte. +Dies bedeutet, dass Sie die Umbenennung rückgängig machen können, sofern Sie einen Fehler gemacht haben. Sie können hingegen keine Seite überschreiben. + +'''Warnung!''' +Die Verschiebung kann weitreichende und unerwartete Folgen für häufig besuchte Seiten haben. +Sie sollten daher die Konsequenzen verstanden haben, bevor Sie jetzt fortfahren.", +'movepagetalktext' => "Die dazugehörige Diskussionsseite wird, sofern vorhanden, mitverschoben, '''es sei denn:''' *Es existiert bereits eine Diskussionsseite mit diesem Namen, oder *Sie wählen die unten stehende Option ab. In diesen Fällen müssen Sie, falls gewünscht, den Inhalt der Seite von Hand verschieben oder zusammenführen. Bitte den '''neuen''' Titel unter '''Ziel''' eintragen, darunter die Umbenennung bitte '''begründen.'''", -'moveuserpage-warning' => "'''Warnung:''' Sie sind dabei, eine Benutzerseite zu verschieben. Bitte bedenken Sie, dass dadurch nur die Benutzerseite verschoben, '''nicht''' aber der Benutzer umbenannt wird.", -'movenologin' => 'Sie sind nicht angemeldet', -'movenologintext' => 'Sie müssen ein registrierter Benutzer und [[Special:UserLogin|angemeldet]] sein, um eine Seite zu verschieben.', -'movenotallowed' => 'Sie haben keine Berechtigung, Seiten zu verschieben.', -'movenotallowedfile' => 'Sie haben keine Berechtigung, Dateien zu verschieben.', -'cant-move-user-page' => 'Sie haben keine Berechtigung, Benutzerhauptseiten zu verschieben.', -'cant-move-to-user-page' => 'Sie haben nicht die Berechtigung, Seiten auf eine Benutzerseite zu verschieben (mit Ausnahme von Benutzerunterseiten).', -'articleexists' => 'Unter diesem Namen existiert bereits eine Seite. Bitte wählen Sie einen anderen Namen.', -'talkexists' => 'Die Seite selbst wurde erfolgreich verschoben, aber die zugehörige Diskussionsseite nicht, da bereits eine mit dem neuen Titel existiert. Bitte gleichen Sie die Inhalte von Hand ab.', -'delete_and_move_text' => '== Löschung erforderlich == +'moveuserpage-warning' => "'''Warnung:''' Sie sind dabei, eine Benutzerseite zu verschieben. Bitte bedenken Sie, dass dadurch nur die Benutzerseite verschoben, '''nicht''' aber der Benutzer umbenannt wird.", +'movenologin' => 'Sie sind nicht angemeldet', +'movenologintext' => 'Sie müssen ein registrierter Benutzer und [[Special:UserLogin|angemeldet]] sein, um eine Seite zu verschieben.', +'movenotallowed' => 'Sie haben keine Berechtigung, Seiten zu verschieben.', +'movenotallowedfile' => 'Sie haben keine Berechtigung, Dateien zu verschieben.', +'cant-move-user-page' => 'Sie haben keine Berechtigung, Benutzerhauptseiten zu verschieben.', +'cant-move-to-user-page' => 'Sie haben nicht die Berechtigung, Seiten auf eine Benutzerseite zu verschieben (mit Ausnahme von Benutzerunterseiten).', +'articleexists' => 'Unter diesem Namen existiert bereits eine Seite. Bitte wählen Sie einen anderen Namen.', +'talkexists' => 'Die Seite selbst wurde erfolgreich verschoben, aber die zugehörige Diskussionsseite nicht, da bereits eine mit dem neuen Titel existiert. Bitte gleichen Sie die Inhalte von Hand ab.', +'delete_and_move_text' => '== Löschung erforderlich == Die Seite „[[:$1]]“ existiert bereits. Möchten Sie diese löschen, um die Seite verschieben zu können?', -'file-exists-sharedrepo' => 'Der gewählte Dateiname wird bereits in einem gemeinsam genutzten Repositorium verwendet. +'file-exists-sharedrepo' => 'Der gewählte Dateiname wird bereits in einem gemeinsam genutzten Repositorium verwendet. Bitte wählen Sie einen anderen Namen.', # Export @@ -551,7 +569,7 @@ Alternativ ist der Export auch mit der Syntax [[{{#Special:Export}}/{{MediaWiki: # Namespace 8 related 'allmessagestext' => 'Dies ist eine Liste der MediaWiki-Systemtexte. -Besuchen Sie die Seiten [http://www.mediawiki.org/wiki/Localisation MediaWiki-Lokalisierung] und [http://translatewiki.net translatewiki.net], wenn Sie sich an der Lokalisierung von MediaWiki beteiligen möchten.', +Bitte besuchen Sie die Seiten [http://www.mediawiki.org/wiki/Localisation MediaWiki-Lokalisierung] und [http://translatewiki.net translatewiki.net], sofern Sie sich an der Lokalisierung von MediaWiki beteiligen möchten.', # Special:Import 'import-interwiki-text' => 'Wählen Sie ein Wiki und eine Seite zum Importieren aus. @@ -614,6 +632,20 @@ Wenn Sie das genannte Benutzerkonto *nicht* registriert haben, folgen Sie diesem $5 Dieser Bestätigungscode ist gültig bis $6, $7 Uhr.', +'confirmemail_body_set' => 'Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, +hat die E-Mail-Adresse des Benutzerkontos „$2“ auf {{SITENAME}} zu dieser E-Mail-Adresse abgeändert. + +Um zu bestätigen, dass dieses Benutzerkonto wirklich zu Ihnen gehört +und um die E-Mail-Funktionen auf {{SITENAME}} wieder zu aktivieren, öffnen Sie bitte den folgenden Link in Ihrem Browser: + +$3 + +Falls das Konto *nicht* zu Ihnen gehört, bitte den nachfolgenden Link öffnen, +um die Bestätigung der E-Mail-Adresse abzubrechen: + +$5 + +Dieser Bestätigungscode ist gültig bis $4.', # Delete conflict 'deletedwhileediting' => 'Achtung: Diese Seite wurde gelöscht, nachdem Sie angefangen haben sie zu bearbeiten! diff --git a/languages/messages/MessagesDiq.php b/languages/messages/MessagesDiq.php index bc20abb3..723e8f91 100644 --- a/languages/messages/MessagesDiq.php +++ b/languages/messages/MessagesDiq.php @@ -30,8 +30,7 @@ $messages = array( 'tog-editsection' => 'Vurnayışê qısımi be gıreyanê [bıvurne] ra feal ke', 'tog-editsectiononrightclick' => 'Qısıman be tıknayışê serrêze ra ebe gocega raşte bıvurne (JavaScript lazımo)', 'tog-showtoc' => 'Tabloyê tedeesteyan bımocne (de pelanê be hirê sernuşteyan ra vêşêri de)', -'tog-rememberpassword' => 'Parola mı bia xo viri', -'tog-editwidth' => 'Warey nuştey hera ke, ke verıniya pela cıdayışê nuştey tam baso', +'tog-rememberpassword' => 'Parola mı nê cıgeyraoği de bia xo viri (seba tewr zêde $1 {{PLURAL:$1|roce|rocan}}).', 'tog-watchcreations' => 'Pelê ke mı afernayê, lista mına seyrkerdışi ke', 'tog-watchdefault' => 'Pelê ke mı vurnayê, lista mına seyrkerdışi ke', 'tog-watchmoves' => 'Pelê ke mı kırışnayê, lista mına seyrkerdışi ke', @@ -177,31 +176,21 @@ $messages = array( 'faqpage' => 'Project: PZP', # Vector skin -'vector-action-addsection' => 'Qal berze cı', -'vector-action-delete' => 'Bestere', -'vector-action-move' => 'Bere', -'vector-action-protect' => 'Bıpawe', -'vector-action-undelete' => 'Esterıtışi peyser bıgê', -'vector-action-unprotect' => 'Ake', -'vector-namespace-category' => 'Kategoriye', -'vector-namespace-help' => 'Pela peşti (yardımi)', -'vector-namespace-image' => 'Dosya', -'vector-namespace-main' => 'Pele', -'vector-namespace-media' => 'Pela medya', -'vector-namespace-mediawiki' => 'Mesac', -'vector-namespace-project' => 'Pela procey', -'vector-namespace-special' => 'Pela xase', -'vector-namespace-talk' => 'Werênayış', -'vector-namespace-template' => 'Şablon', -'vector-namespace-user' => 'Pela karberi', -'vector-view-create' => 'Vıraze', -'vector-view-edit' => 'Bıvurne', -'vector-view-history' => 'Tarixi bımocne', -'vector-view-view' => 'Bıwane', -'vector-view-viewsource' => 'Çımey bıvêne', -'actions' => 'Karê kerdey', -'namespaces' => 'Cayê namey', -'variants' => 'Varyanti', +'vector-action-addsection' => 'Qal berze cı', +'vector-action-delete' => 'Bestere', +'vector-action-move' => 'Bere', +'vector-action-protect' => 'Bıpawe', +'vector-action-undelete' => 'Esterıtışi peyser bıgê', +'vector-action-unprotect' => 'Ake', +'vector-simplesearch-preference' => 'Tewsiyanê cıgeyrayışiê raverberdeyan ake (Tenya vector skin de)', +'vector-view-create' => 'Vıraze', +'vector-view-edit' => 'Bıvurne', +'vector-view-history' => 'Tarixi bımocne', +'vector-view-view' => 'Bıwane', +'vector-view-viewsource' => 'Çımey bıvêne', +'actions' => 'Karê kerdey', +'namespaces' => 'Cayê namey', +'variants' => 'Varyanti', 'errorpagetitle' => 'Xeta', 'returnto' => 'Peyser şo $1.', @@ -262,6 +251,9 @@ Hedê xo ra zêde karberi kenê ke seyrê na pele bıkerê. Şıma rê zehmet, tenê vınderên, heta ke reyna kenê ke ena pele kewê. $1', +'pool-timeout' => 'Kılitbiyayışi sero wextê vınetışi', +'pool-queuefull' => 'Rêza hewze pırra', +'pool-errorunknown' => 'Xeta nêzanıtiye', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Heqa {{SITENAME}} de', @@ -429,7 +421,7 @@ Hesabê şıma biyo a. 'yourname' => 'Namey karberi', 'yourpassword' => 'Parola', 'yourpasswordagain' => 'Parola reyna bınusne:', -'remembermypassword' => 'Na/In komputer de mı biya xo viri', +'remembermypassword' => 'Parola mı biya xo viri (heta $1 {{PLURAL:$1|roc|roci}}).', 'yourdomainname' => 'Nameyê şıma yo meydani', 'externaldberror' => 'Ya database de xeta esta ya zi heqê şıma çino şıma no hesab bıvurni.', 'login' => 'Cıkewe', @@ -446,6 +438,7 @@ Hesabê şıma biyo a. 'gotaccount' => "Hesabê şıma esto? '''$1'''.", 'gotaccountlink' => 'Cıkewe', 'createaccountmail' => 'mı rê e-mail sera parola bırışe', +'createaccountreason' => 'Sebeb:', 'badretype' => 'Parolayê ke şıma nuşti yewbini nêtepışneni.', 'userexists' => 'No name ey yewna teno, yewna name bınuse.', 'loginerror' => 'Xetayê hesab ekerdışi', @@ -556,10 +549,12 @@ Bıne vındere u newe ra dest pê bıkere.', 'showlivepreview' => 'Live preview', 'showdiff' => 'Vurnayışan bımocne', 'anoneditwarning' => 'Teme!: Şıma bı hesabê xo nıkewtê cı. Hurêndiya namey şıma dı IP-adresa şıma qeyd bena u asena.', +'anonpreviewwarning' => "''Ti hama nicikewte. Qeyd kerdiş zerre tarixê pele de adresê IP yê tu keyd keno.''", 'missingsummary' => "'''DİQET:''' Şıma kılmnuşte nıkerd. Eke şıma reyna butonê qaydker ser a ne pel bê kılmnuşte qayd beno.", 'missingcommenttext' => 'Cêr de yew xulasa binuse.', -'missingcommentheader' => "'''Vir ardoğ:''' Şıma qey na mesela sername nuşte nênuşt eke şıma reyna buton3e qayd ker bıtıkni pel bê sername qayd beno.", +'missingcommentheader' => "Vir ardoğ:''' Şıma qey na mesela sername nuşte nênuşt. +Eke şıma reyna \"{{int:savearticle}}\" qayd ker bıtıkni pel bê sername qayd beno.", 'summary-preview' => 'Verqeydê qıssa:', 'subject-preview' => 'Mesela/Sername verqayd seyr kerdış:', 'blockedtitle' => 'Karber (eza) blok biyo', @@ -628,7 +623,8 @@ Cıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:', 'userjsyoucanpreview' => "'''Yardim:''' Ser \"{{int:showpreview}}\" sima eskeni CSSe newe test bikeri.", 'usercsspreview' => "'''şıma tena verqaydê dosyayê CSS vineni.''' '''Dosyayê Karberi CSS hema qayd nebiyo!'''", 'userjspreview' => "'''şıma tena test keni ya ziverqayn seyr keni - karberê JavaScript'i hema qayd nebiyo.'''", -'userinvalidcssjstitle' => "''Hişyari:''' \"\$1\" no name de yew tema çino. tema- nameyê ey.css u .js ney dosyayi gani pê herfa hurdiye bınusiye , yani {{ns:user}}:bıngeh/'''M'''onobook.css ney, {{ns:user}}:bıngeh/'''m'''onobook.css.", +'userinvalidcssjstitle' => "'''Teme:''' Mewzuyê \"\$1\" çıniyo. +Dosyanê be namey .css u .js'i de herfa werdiye bıgurêne, mesela herında {{ns:user}}:Foo/Vector.css'i de {{ns:user}}:Foo/vector.css bınuse.", 'updated' => '(Biyo rocane)', 'note' => "'''Not:'''", 'previewnote' => "'''Teme! ena teyna verqeyda.''' @@ -662,7 +658,6 @@ Tı ma ri soz dano ki tı nuşte xo oricinali nuşt, ya zi tı yew dokumantê um '''İTİYA DI METARİYALÊ \"COPYRIGHT\"İ NINUSİ!.'''", 'copyrightwarning2' => 'Ney bızane ke nuşteyê ke şıma ruşneni (şaweni) keyepelê {{SITENAME}} herkes eşkeno nê nuşteyanê şıma ser kay bıkero. Eke şıma qayil niye kes bıvurno, nuşetyanê xo meerze ita.
    Wexta ke şıma nuşte zi erzeni ita; şıma gani taahhud bıde koti ra ardo (qey teferruati referans: $1).', -'longpagewarning' => "'''DİQET: Gırdêyê no pel $1 kilobayto; tayê browsers 32 kb u zêdê ney gırdêyan de rey rey xeta keno. No sebeb ra pel qısm qısm kere.'''", 'longpageerror' => "'''XETA: Dergêyê nuşteyi şıma benate (mabeynê) $1 kilobyte, u $2 kilobyte ra zêdo. Qayd biyayişê ey mumkin niyo..'''", 'readonlywarning' => "'''DİQET: Semedê mıqayti, database kılit biyo. No sebeb ra vurnayişê şıma qayd nêbeno. Nuşteyanê şıma yewna serkar eşkeno wedaro u pey ra şıma eşkeni reyna ita de qayd bıker''' @@ -838,6 +833,8 @@ $1", 'logdelete-failure' => "'''Esayişê rocaneyi eyar nêbı:''' $1", 'revdel-restore' => 'asayışi bıvurne', +'revdel-restore-deleted' => 'revizyonê wedariyaye', +'revdel-restore-visible' => 'revizyonanê esani', 'pagehist' => 'vere cûyê peli', 'deletedhist' => 'tarixê hewna şiyaye', 'revdelete-content' => 'mebhes', @@ -942,6 +939,7 @@ no vurnayişo ke şıma keni kontrol bıkere yew pelo kehen nêbo.', 'searchprofile-everything-tooltip' => 'Tedeestey hemine cı geyre (pelanê mınaqeşey zi tey)', 'searchprofile-advanced-tooltip' => 'qe cayê nimeyî bigêre', 'search-result-size' => '$1 ({{PLURAL:$2|1 çekuye|$2 çekuy}})', +'search-result-category-size' => '{{PLURAL:$1|1 eza|$1 ezayan}} ({{PLURAL:$2|1 ketegoriyê bini|$2 kategiryanê binan}}, {{PLURAL:$3|1 dosya|$3 dosyayan}})', 'search-result-score' => 'Eleqa: $1%', 'search-redirect' => '(ber $1)', 'search-section' => '(qısmê $1)', @@ -1050,6 +1048,7 @@ Etıya şıma rê yew kılito raştameo ke şıma şenê bıgurenê/bıxebetnê: 'prefs-files' => 'Dosyey', 'prefs-custom-css' => 'CSSê xasi', 'prefs-custom-js' => 'JSê xasi', +'prefs-common-css-js' => 'CSS/JavaScript pê şablonanê peran de pay biya:', 'prefs-reset-intro' => 'ena pele de şıma tercihanê xo şenê bıçarnê be tercihanê keyepelê ke verê coy eyar biy. Na game tepeya nêerziyena.', 'prefs-emailconfirm-label' => 'Konfirmasyonê e-maili', @@ -1087,7 +1086,7 @@ Eka tu wazene ke nameyo raşt xo bide, ma nameyo raşt ti iştirakanê ti de moc 'prefs-advancedrendering' => 'Tercihê raverberdey', 'prefs-advancedsearchoptions' => 'Tercihê raverberdey', 'prefs-advancedwatchlist' => 'Tercihê raverberdey', -'prefs-display' => 'Tercihan bımocne', +'prefs-displayrc' => 'Tercihan bımocne', 'prefs-diffs' => 'Diffs', # User rights @@ -1173,6 +1172,7 @@ Eka tu wazene ke nameyo raşt xo bide, ma nameyo raşt ti iştirakanê ti de moc 'right-hideuser' => 'Yew namey karberi şari ra dızdeni/miyanki bloke bıke', 'right-ipblock-exempt' => 'Blokanê IPi, oto-blokan u blokanê menzıli ra ravêre', 'right-proxyunbannable' => 'Blokanê otomatikiê proksiyan ra ravêre', +'right-unblockself' => 'Inan a bike', 'right-protect' => 'Sewiyanê pawıtışi (mıhafezey) bıvurne u pelanê kılitbiyaiyan sero bıgureye.', 'right-editprotected' => 'Pelanê pawıtiyan sero bıgureye (bê pawıtena kaskadi (game be game))', 'right-editinterface' => 'Interfaceê karberi sero bıgureye', @@ -1195,7 +1195,6 @@ Eka tu wazene ke nameyo raşt xo bide, ma nameyo raşt ti iştirakanê ti de moc 'right-siteadmin' => 'Database kilit bike u a bike', 'right-reset-passwords' => 'Parolayê karberanê binî reset bike', 'right-override-export-depth' => 'Peleyanê ke tede linkanê 5 ra zafyer estê ay export bike', -'right-versiondetail' => 'Enformasyonê versiyonê software yê detayî bimocne', 'right-sendemail' => 'Karberanê binî ra e-mail bişirav', # User rights log @@ -1246,14 +1245,9 @@ Eka tu wazene ke nameyo raşt xo bide, ma nameyo raşt ti iştirakanê ti de moc 'recentchanges-legend' => 'Tercihê vurnayışanê peniyan', 'recentchangestext' => 'eno pele de ser wîkî de vurnayîşî penîyî teqib bike', 'recentchanges-feed-description' => 'Ena feed dı vurnayişanê tewr peniyan teqip bık.', -'recentchanges-label-legend' => 'Nişan: $1.', -'recentchanges-legend-newpage' => '$1 - pela newi', 'recentchanges-label-newpage' => 'Ena edît yew pela newî viraşt', -'recentchanges-legend-minor' => '$1 - vurnayışo qıckek', 'recentchanges-label-minor' => 'Eno yew edîto qickek o', -'recentchanges-legend-bot' => '$1 - vurnayışê boti', 'recentchanges-label-bot' => 'Eno vurnayış terefê yew boti ra vıraziyo', -'recentchanges-legend-unpatrolled' => '$1 - edîto patrol nibiyo', 'recentchanges-label-unpatrolled' => 'Eno edît patrol nibiyo', 'rcnote' => "Bıni dı {{PLURAL:$1|is '''1''' vurnayış|peni '''$1''' vurnayışan estê}} {{PLURAL:$2|roc|'''$2''' roci}}, hetani $5, $4.", 'rcnotefrom' => "Cêr de vurnayîşê esto ke '''$2''' ra raver (heta '''$1''' mucnayiyo).", @@ -1300,6 +1294,9 @@ Eka tu wazene ke nameyo raşt xo bide, ma nameyo raşt ti iştirakanê ti de moc 'upload_directory_missing' => 'Direktorê dosyayê ($1)î biyo vînî u webserver de nieşkeno viraziye.', 'upload_directory_read_only' => 'Direktorê dosyayê ($1)î webserver de nieşkeno binuse.', 'uploaderror' => 'Ğeletê bar kerdişî', +'upload-recreate-warning' => "'''Diqet: Yew dosya pê ena name wedariya ya zi vurniya.''' + +Logê wedariyayiş u berdişi seba ena pele a ti ra xezir kerda:", 'uploadtext' => "Qey barkerdişê dosyayî, formê cêrinî bişuxulne. Dosyayê ke vera cû bar biyê eke şima qayîl e ney dosyayan bivînê ya zî bigerî biewnê[[Special:FileList|listeyê dosyayê bar bîyaye]] (tekrar) bar bîyaye [[Special:Log/upload|rocaneyê barkerdişî]] de, hewn a şîyaye zî tîya de [[Special:Log/delete|rocaneyê hewn a kerdişî]] pawiyene. @@ -1331,6 +1328,17 @@ wexta şima qayîl e yew peli re dosya bierzî, formanê cêrinan ra yewi bişux 'filetype-unwanted-type' => "'''\".\$1\"''' na tewırê dosyayi nêwazyena. pêşniyaz biyaye {{PLURAL:\$3|tewırê dosyayi|tewırê dosyayi}} \$2.", 'filetype-banned-type' => "'''\".\$1\"''' na tewırê dosyayi re destur çino. nê tewıran de destur esto {{PLURAL:\$3|tewırê dosyayi|tewırê dosyayi}} \$2.", 'filetype-missing' => 'Ena dosya de extention (ze ".jpg") çini yo.', +'empty-file' => 'Dosya ke ti şawit veng biy.', +'file-too-large' => 'Dosya ke ti şawit zaf gird biy.', +'filename-tooshort' => 'Namayê dosyayi zaf kilm a.', +'filetype-banned' => 'Tipê ena dosya qedexe biya.', +'verification-error' => 'Ena dosya taramayê dosyayi temam nikena.', +'hookaborted' => 'Vurnayişê tu ke ti deneme kerd pê yew extensiyon ra iptal biya.', +'illegal-filename' => 'Ena nameyê dosyayi kebul nibena.', +'overwrite' => 'Ser yew dosyayê ke hama esta, ser ey qeyd nibena.', +'unknown-error' => 'Yew xeteyê nizanyeni biya.', +'tmp-create-error' => 'Yew dosyayê gecici niviraziyeya.', +'tmp-write-error' => 'Dosyayê gecici de xeta biya.', 'large-file' => 'gırdîyê dosyayan re, na gırdî $1 ra wet pêşniyazi çino; gırdîyê na dosyayi $2.', 'largefileserver' => 'Ena dosya zaf girde ke server kebul nikeno.', @@ -1356,13 +1364,14 @@ eke şıma hhene zi qayili dosyaya xo bar keri ager3e u newe yew name bışuxuln 'file-exists-duplicate' => 'Ena pel yew kopyayê ena {{PLURAL:$1|pel|pelan}} o:', 'file-deleted-duplicate' => 'Jû dosya be zey na dosya ([[:$1]]) verê coy esteriyawa. Semedê ancia barkerdışi dewamkerdış ra ver tarixê esterışê dosya gani qontrol kerê.', -'successfulupload' => 'bar biyo', 'uploadwarning' => 'Îkazê bar kerdişî', 'uploadwarning-text' => 'Bînê de deskripyonê dosyayî bivurne u reyna qeyd bike.', 'savefile' => 'Dosya qeyd ke', 'uploadedimage' => '"[[$1]]" bar bi', 'overwroteimage' => 'yew versiyonê newvî ye "[[$1]]"î bar bike', 'uploaddisabled' => 'bar kerdişî iptal biyo', +'copyuploaddisabled' => 'URL bar kerdiş kefiliyeyo.', +'uploadfromurl-queued' => 'Bar kerdişê tu ha sira de vindeno.', 'uploaddisabledtext' => 'Bar kerdişê dosyayî iptal biyo', 'php-uploaddisabledtext' => 'barkerdışê dosyayê PHP nıka çino. kerem kere eyarê file_uploads korol bıkerê.', 'uploadscripted' => 'Ena dosya de yew HTML ya zi kodê scriptî este ke belki browserê webî fam nikeno.', @@ -1382,6 +1391,13 @@ bar kerdış munasibo munasib niyo diqqet bıkerê. qaydê hewna biyayeyan tiya de pêşkeş biya:", 'filename-bad-prefix' => "name yo ke şıma bar keni zey nameyê kamerayê dijital î, pê ney '''\"\$1\"''' destpêkeno . kerem kere yewna nameyo eşkera bıvicinê.", +'upload-success-subj' => 'bar biyo', +'upload-success-msg' => 'Bar kerdişê tu itiya de esta: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problem bar bike', +'upload-failure-msg' => 'Bar kerdişê tu de yew problem esta: + +$1', +'upload-warning-subj' => 'İqazê barkerdışi', 'upload-proto-error' => 'Porotokol raşt ni yo.', 'upload-proto-error-text' => 'Bar kerdişê durî gani URLî estbiye ke pe http:// ya zi ftp:// başli beno.', @@ -1556,7 +1572,6 @@ listeya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocn 'statistics-edits-average' => 'Ser her pele de amarê vurnayîşîyê averageyî', 'statistics-views-total' => 'Yekunî bivîne', 'statistics-views-peredit' => 'Ser her vurnayîşî de vînayîşî', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Derganiyê sirayê gure]', 'statistics-users' => 'Qeyd biye [[Special:ListUsers|karberî]]', 'statistics-users-active' => 'Karberê aktifi', 'statistics-users-active-desc' => '{{PLURAL:$1|roco peyin de|$1 roco peyin de}} karber ê ke kar kerdê.', @@ -1569,7 +1584,7 @@ listeya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocn 'doubleredirects' => 'redireksiyonê herdi', 'doubleredirectstext' => 'no pel pelê ray motışani liste keno. gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto. -serê ey nuşteyi safi biye.', +serê ey nuşteyi safi biye.', 'double-redirect-fixed-move' => '[[$1]] kırışiya, hıni ray dana [[$2]] no pel', 'double-redirect-fixer' => 'Fixerî redirek bike', @@ -1748,34 +1763,40 @@ qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed 'listgrouprights-removegroup-self-all' => 'şıma hesabê xo ra eşkeni heme gruban bıveci', # E-mail user -'mailnologin' => 'adresa erşawıtışi/ruşnayişi çina.', -'mailnologintext' => 'qey karberanê binan re e-posta erşawıtış de gani şıma [[Special:UserLogin|hesab aker]]ê [[Special:Preferences|pelê tercihani]] de gani yew e-postayo meqbul bıbo.', -'emailuser' => 'Ena karberi rê email bırışe', -'emailpage' => 'karberi re e-mail bışaw', -'emailpagetext' => 'no/na karberi re e-posta erşawıtışi de şıma pê forma cêrıni eşkeni kar bıkerî. +'mailnologin' => 'adresa erşawıtışi/ruşnayişi çina.', +'mailnologintext' => 'qey karberanê binan re e-posta erşawıtış de gani şıma [[Special:UserLogin|hesab aker]]ê [[Special:Preferences|pelê tercihani]] de gani yew e-postayo meqbul bıbo.', +'emailuser' => 'Ena karberi rê email bırışe', +'emailpage' => 'karberi re e-mail bışaw', +'emailpagetext' => 'no/na karberi re e-posta erşawıtışi de şıma pê forma cêrıni eşkeni kar bıkerî. [[Special:Preferences|tercihanê şıma ye karberi]] de adresa e-posta ya ke şıma dayo, na adres qısmê adresa e-postayi de "From (kam ra)" asena, no sebebi ra gırewtox/e eşkeno/a direk cewab bıdo şıma.', -'usermailererror' => 'xizmetê e-postayi xeta da:', -'defemailsubject' => '{{SITENAME}} e-posta', -'noemailtitle' => 'adresa e-postayi çina', -'noemailtext' => 'no/na karber yew e-postayo meqbul nêdawa/o', -'nowikiemailtitle' => 'E-postayan re destur çino', -'nowikiemailtext' => 'no/na karber/e, karberanê binani ra gırewtışê e-postayi tercih nêkerd.', -'email-legend' => 'karberê {{SITENAME}} binan re e-posta bıerşaw', -'emailfrom' => 'Kam ra', -'emailto' => 'Kam rê', -'emailsubject' => 'behs/mesela:', -'emailmessage' => 'Mesaj', -'emailsend' => 'bıerşawê/bıruşnê', -'emailccme' => 'kopyayekê mesaji mı re bıerşaw', -'emailccsubject' => '$2 kopyaya mesaj a ke şıma erşawıto/a $1:', -'emailsent' => 'e-mail erşawiya/ruşiya', -'emailsenttext' => 'e-mailê şıma erşawiya/ruşiya', -'emailuserfooter' => 'na e-posta hetê ıney ra $1 erşawiya $2 no/na karberi/e re. pê fonksiyonê "Karberi/e re e-posta bıerşaw" no {{SITENAME}} keyepeli erşawiya.', +'usermailererror' => 'xizmetê e-postayi xeta da:', +'defemailsubject' => '{{SITENAME}} e-posta', +'usermaildisabled' => 'E-mailê karberani kafiliyeya', +'usermaildisabledtext' => 'Ti nieşkena ena wiki de karberanê binan rê e-mail bişave', +'noemailtitle' => 'adresa e-postayi çina', +'noemailtext' => 'no/na karber yew e-postayo meqbul nêdawa/o', +'nowikiemailtitle' => 'E-postayan re destur çino', +'nowikiemailtext' => 'no/na karber/e, karberanê binani ra gırewtışê e-postayi tercih nêkerd.', +'email-legend' => 'karberê {{SITENAME}} binan re e-posta bıerşaw', +'emailfrom' => 'Kam ra', +'emailto' => 'Kam rê', +'emailsubject' => 'behs/mesela:', +'emailmessage' => 'Mesaj', +'emailsend' => 'bıerşawê/bıruşnê', +'emailccme' => 'kopyayekê mesaji mı re bıerşaw', +'emailccsubject' => '$2 kopyaya mesaj a ke şıma erşawıto/a $1:', +'emailsent' => 'e-mail erşawiya/ruşiya', +'emailsenttext' => 'e-mailê şıma erşawiya/ruşiya', +'emailuserfooter' => 'na e-posta hetê ıney ra $1 erşawiya $2 no/na karberi/e re. pê fonksiyonê "Karberi/e re e-posta bıerşaw" no {{SITENAME}} keyepeli erşawiya.', + +# User Messenger +'usermessage-summary' => 'Mesajê sistemi caverd.', +'usermessage-editor' => 'Mesaj berdoxe sistemi', # Watchlist 'watchlist' => 'lista mına seyr-kerdışi', 'mywatchlist' => 'Lista mına seyr-kerdışi', -'watchlistfor' => "(semedê '''$1''')", +'watchlistfor2' => 'Semedê $1 ($2)', 'nowatchlist' => 'listeya temaşa kerdıişê şıma de yew madde zi çina.', 'watchlistanontext' => 'qey vurnayişê maddeya listeya temaşakerdişi $1.', 'watchnologin' => 'hesab akerde niyo', @@ -1894,7 +1915,10 @@ oyo ke vurnayişo peyin kerdo: [[User:$3|$3]] ([[User talk:$3|Talk]]{{int:pipe-s 'revertpage-nouser' => '(nameyê karberi veteyo) no keso ke vuriyayiş kerdo vuriyayişê no kesi hetê no [[User:$1|$1]] kesi ra tepiya anciyayo', 'rollback-success' => 'vurnayişê no kesi $1 tepiya geriyayo u hetê no $2 kesi ra cıwa ver o ke revizyon biyo no revizyon tepiya anciyayo.', -'sessionfailure' => 'cıkewtışê hesabê şıma de yew problem aseno; + +# Edit tokens +'sessionfailure-title' => 'Seans xeripiya', +'sessionfailure' => 'cıkewtışê hesabê şıma de yew problem aseno; no kar semedê dızdiyê hesabi ibtal biyo. kerem kerê "tepiya" şiyerê u pel o ke şıma tera ameyî u o pel newe ra bar kerê , newe ra tesel/cereb kerê.', @@ -2025,19 +2049,22 @@ $1', 'month' => 'Aşm ra (u verniyer):', 'year' => 'Serre ra (u verênêr):', -'sp-contributions-newbies' => 'Tenya iştıraqanê karberanê neweyan bımocne', -'sp-contributions-newbies-sub' => 'Qe hesebê newe', -'sp-contributions-newbies-title' => 'Îştîrakê karberî ser hesabê neweyî', -'sp-contributions-blocklog' => 'Cıkewtışê kılit-kerdışi', -'sp-contributions-deleted' => 'vurnayîşê karberî wedariyayê', -'sp-contributions-logs' => 'logî', -'sp-contributions-talk' => 'werênayış', -'sp-contributions-userrights' => 'Îdarayê heqqanê karberan', -'sp-contributions-blocked-notice' => 'verniyê no/na karber/e geriyayo/a +'sp-contributions-newbies' => 'Tenya iştıraqanê karberanê neweyan bımocne', +'sp-contributions-newbies-sub' => 'Qe hesebê newe', +'sp-contributions-newbies-title' => 'Îştîrakê karberî ser hesabê neweyî', +'sp-contributions-blocklog' => 'Cıkewtışê kılit-kerdışi', +'sp-contributions-deleted' => 'vurnayîşê karberî wedariyayê', +'sp-contributions-logs' => 'logî', +'sp-contributions-talk' => 'werênayış', +'sp-contributions-userrights' => 'Îdarayê heqqanê karberan', +'sp-contributions-blocked-notice' => 'verniyê no/na karber/e geriyayo/a qê referansi qeydê vernigrewtışi cêr de eşkera biyo:', -'sp-contributions-search' => 'Ser iştariqi bıgeyr', -'sp-contributions-username' => 'Adresa IPy ya ki namey karberi:', -'sp-contributions-submit' => 'Cıgeyre', +'sp-contributions-blocked-notice-anon' => 'Eno adresê IPi bloke biyo. +Cıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:', +'sp-contributions-search' => 'Ser iştariqi bıgeyr', +'sp-contributions-username' => 'Adresa IPy ya ki namey karberi:', +'sp-contributions-toponly' => 'Teyna revizyonanê tewr peniyan bimocne', +'sp-contributions-submit' => 'Cıgeyre', # What links here 'whatlinkshere' => 'Çı tiyay rê gırê beno', @@ -2096,7 +2123,6 @@ qê referansi qeydê vernigrewtışi cêr de eşkera biyo:', 'ipb-edit-dropdown' => 'Sebebê blokî bivurne', 'ipb-unblock-addr' => '$1 a bik', 'ipb-unblock' => 'Yew adresê IPî ya zi nameyê karberî blok bike', -'ipb-blocklist-addr' => 'Ser $1, blokî ke hama hebityeno', 'ipb-blocklist' => 'Blokî ke hama estê ey bivîne', 'ipb-blocklist-contribs' => 'Ser $1 îştîrakî', 'unblockip' => 'Hesabê karberî a bike', @@ -2169,6 +2195,8 @@ labele parçeya benateyê na $2 adresibi u ey ra ver-geryayo u şıma eşkeni no şıma neeşkeni hesab bıvırazi', 'cant-block-while-blocked' => 'Ê ye ke verniyê şıma gırewtî şıma nêeşkeni verniyê ninan bıgeri', 'cant-see-hidden-user' => 'karber o ke şıma gêreni verniyê ey bıgeri ca ra verniyê ey gırewteyo u pinani kerdeyo.', +'ipbblocked' => 'Ti nieşkena karberanê binan bloke bike ya zi a bike cunki ti bloke biya', +'ipbnounblockself' => 'Ti nieşkena xo a bike', # Developer tools 'lockdb' => 'Database kilit bik', @@ -2338,6 +2366,7 @@ karê zerredayişê benateyê wikiyani[[Special:Log/import|zerreyê rocaneyê k 'importstart' => 'Pelan împort kenî', 'import-revision-count' => '$1 {{PLURAL:$1|revizyon|revizyon}}', 'importnopages' => 'Pel çino ke import bike', +'imported-log-entries' => ' $1 {{PLURAL:$1|logê dekerdişi|loganê dekerdişan}} ard.', 'importfailed' => 'Împort nebiy: $1', 'importunknownsource' => 'Çimeyê tip ê împortî nizanyano', 'importcantopen' => 'Nieşkenî dosyayê împortî a bike', @@ -2437,6 +2466,8 @@ Kerem ke, qeydkerdış ra ver gocega verqayti bıxebetne.', 'tooltip-rollback' => '"Peyser biya" be yew tik pela îştirak(an)ê peyên|i(an) peyser ano.', 'tooltip-undo' => '"Undo" ena vurnayışê newi iptal kena u vurnayışê verni a kena. Tı eşkeno yew sebeb bınus.', +'tooltip-preferences-save' => 'Tercihê mı qeyd ke', +'tooltip-summary' => 'Yew xulasaya kilm binuse', # Metadata 'nodublincore' => 'medadatayi Dublin Core RDFyi qey ıney pêşkeşwani teber de verdiyayo.', @@ -2527,19 +2558,22 @@ $1', 'nextdiff' => 'Vurnayışo newêr →', # Media information -'mediawarning' => "''Hişyari!''': Na dosya de belka kodê niyetxırabi estî. -Beno ke zerar bıdo sistemê şuxulnayişê şıma.", +'mediawarning' => "'''Teme''': Na dosya de belkia kodê xırabıni estê. +Gurênayışê nae de, beno ke sistemê şıma zerar bıvêno.", 'imagemaxsize' => "Limitê ebat ê resimi:
    ''(qe pela deskripsiyonê dosyayan)''", 'thumbsize' => 'Ebadê Thumbnaili', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|pele|peleyi}}', -'file-info' => '(ebatê dosyayi: $1, MIME tip: $2)', -'file-info-size' => '($1 × $2 pixelan, ebatê dosya: $3, MIME type: $4)', +'file-info' => 'ebatê dosyayi: $1, MIME tip: $2', +'file-info-size' => '$1 × $2 pixelan, ebatê dosya: $3, MIME type: $4', 'file-nohires' => 'Resolosyonê detayeri çino .', -'svg-long-desc' => '(SVG dosya, nominalin $1 × $2 piksels, ebatê dosya: $3)', +'svg-long-desc' => 'SVG dosya, nominalin $1 × $2 piksels, ebatê dosya: $3', 'show-big-image' => 'Resolosyonê temami', 'show-big-image-thumb' => 'Ebatê ena verqeyd: $1 × $2 pixels', 'file-info-gif-looped' => 'viyariye biyo', 'file-info-gif-frames' => '$1 {{PLURAL:$1|çerçeve|çerçeveyi}}', +'file-info-png-looped' => 'atlama biyo', +'file-info-png-repeat' => '$1 {{PLURAL:$1|hew|hew}} kay biyê', +'file-info-png-frames' => '$1 {{PLURAL:$1|çerçeve|çerçeveyi}}', # Special:NewFiles 'newimages' => 'Galeyê dosyayanê newe', @@ -2853,30 +2887,30 @@ Ma aya bini numnen. 'limitall' => 'hemi', # E-mail address confirmation -'confirmemail' => 'Adresê emaîlî xo konfirme bike', -'confirmemail_noemail' => 'Yew emaîlê tu raştîyê çin o ke [[Special:Preferences|tercihê karberî]] ayar bike.', -'confirmemail_text' => 'qey şuxulnayişê e-postayê wikiyi gani ewwil e-posyaê şıma tesdiq bıbo. +'confirmemail' => 'Adresê emaîlî xo konfirme bike', +'confirmemail_noemail' => 'Yew emaîlê tu raştîyê çin o ke [[Special:Preferences|tercihê karberî]] ayar bike.', +'confirmemail_text' => 'qey şuxulnayişê e-postayê wikiyi gani ewwil e-posyaê şıma tesdiq bıbo. adresa şıma re qey erşawıtışê e-postayê tesdiqi, butonê cêrıni bıtıknê. e-posta yo ke erşawiyeno tede gıreyê kodê tesdiqi esto, gıreyi bıtıkne akerê u e-postayê xo tesdiq kerê.', -'confirmemail_pending' => 'Yew codê konfirmasyonî ma ti ra şiravt; +'confirmemail_pending' => 'Yew codê konfirmasyonî ma ti ra şiravt; Eka ti newe hesabê xo viraşt, ti gani yew di dekika vindero u email xo kontrol bike, yani reyna yew hesab meviraz.', -'confirmemail_send' => 'Yew kodê konfirmasyonî email mina bişirave', -'confirmemail_sent' => 'Emailê konfirmasyonî şiravt', -'confirmemail_oncreate' => 'Yew codê konfirmasyonî ma ti ra şiravt; +'confirmemail_send' => 'Yew kodê konfirmasyonî email mina bişirave', +'confirmemail_sent' => 'Emailê konfirmasyonî şiravt', +'confirmemail_oncreate' => 'Yew codê konfirmasyonî ma ti ra şiravt; Ena kod semed ci kewtîşî lazim niyo, feqat ti gani sistem rê eno kod bimocne ke ti opsiyonê emailî wîkî a bike.', -'confirmemail_sendfailed' => '{{SITENAME}} nieşkenî ti ra yew emailê konfirmasyonî bişiravî. +'confirmemail_sendfailed' => '{{SITENAME}} nieşkenî ti ra yew emailê konfirmasyonî bişiravî. Rica keno ke adresê emailî xo kontrol bike. Email şawitoğ eno reyna ard: $1', -'confirmemail_invalid' => 'Kodê konfirmasyonî raşt niyo. +'confirmemail_invalid' => 'Kodê konfirmasyonî raşt niyo. Wextê kod ê konfirmasyonî viyerto.', -'confirmemail_needlogin' => ' $1 lazimo ke ti adresê emaîl ê xo konfirme bike.', -'confirmemail_success' => 'Email adresê tu konfirme biy. +'confirmemail_needlogin' => ' $1 lazimo ke ti adresê emaîl ê xo konfirme bike.', +'confirmemail_success' => 'Email adresê tu konfirme biy. Ti eşkeno [[Special:UserLogin|ci kewt]].', -'confirmemail_loggedin' => 'Eka email adresê tu konfirme biy.', -'confirmemail_error' => 'Konfirmasyon ni biy, yew ğelet esto.', -'confirmemail_subject' => '{{SITENAME}} konfirmasyonê adres ê emalî', -'confirmemail_body' => 'yew ten, muhtemelen şıma no IP-adresi ra, +'confirmemail_loggedin' => 'Eka email adresê tu konfirme biy.', +'confirmemail_error' => 'Konfirmasyon ni biy, yew ğelet esto.', +'confirmemail_subject' => '{{SITENAME}} konfirmasyonê adres ê emalî', +'confirmemail_body' => 'yew ten, muhtemelen şıma no IP-adresi ra, keyepelê {{SITENAME}}i de pê no $2 e-postayi hesab kerd a. eke raşta no e-posta eyê şıma yo şıma gani tesdiq bıkerî, qey tesdiq kerdışi gani karê e-postayê keyepeli {{SITENAME}} aktif bıbo, qey aktif kerdışi gıreyê cêrıni bıtıkne. @@ -2888,8 +2922,21 @@ eke şıma hesab *a nêkerdo*, qey ibtalê tesdiqkerdışê adresa e-postayi gı $5 kodê tesdiqi heta ıney tarixi $4 meqbul o.', -'confirmemail_invalidated' => 'Konfermasyonê adres ê emaîlî iptal biy', -'invalidateemail' => 'confirmasyonê e-maili iptal bik', +'confirmemail_body_changed' => 'Yew ten, muhtemelen şıma no IP-adresi $1 ra, +keyepelê {{SITENAME}}i de pê no $2 e-postayi hesab kerd a. + +Eke raşta no e-posta eyê şıma yo şıma gani tesdiq bıkerî, +qey tesdiq kerdışi gani karê e-postayê keyepeli {{SITENAME}} aktif bıbo, qey aktif kerdışi gıreyê cêrıni bıtıkne: + +$3 + +eke şıma hesab *a nêkerdo*, qey ibtalê tesdiqkerdışê adresa e-postayi gıreyê cêrıni bıtıknê: + +$5 + +kodê tesdiqi heta ıney tarixi $4 meqbul o.', +'confirmemail_invalidated' => 'Konfermasyonê adres ê emaîlî iptal biy', +'invalidateemail' => 'confirmasyonê e-maili iptal bik', # Scary transclusion 'scarytranscludedisabled' => '[Transcludê înterwîkîyî nihebityeno]', @@ -2928,6 +2975,7 @@ Ma rica keno konfirme bike ke ti raştî wazeno eno pel bivirazo.", 'table_pager_first' => 'Pela jûyıne', 'table_pager_last' => 'Pela peyêne', 'table_pager_limit' => 'Jû pele de $1 unsuran bımocne', +'table_pager_limit_label' => 'Her pele ra xacetan', 'table_pager_limit_submit' => 'Şi', 'table_pager_empty' => 'Netice çini yo', @@ -2984,6 +3032,7 @@ Ti hem zi eşkeno [[Special:Watchlist/edit|use the standard editor]].', 'version-specialpages' => 'Pelanê xasiyan', 'version-parserhooks' => 'Çengelê Parserî', 'version-variables' => 'Vurnayeyî', +'version-skins' => 'Cıldi', 'version-other' => 'Bin', 'version-mediahandlers' => 'Kulbê medyayî', 'version-hooks' => 'Çengelî', @@ -3065,6 +3114,15 @@ satır ê ke pê ney # # destpêkenê zey mışore/mıjore muamele vineno. 'tags-edit' => 'bıvurne', 'tags-hitcount' => '$1 {{PLURAL:$1|vurnayış|vurnayışi}}', +# Special:ComparePages +'comparepages' => 'Peleyan miqeyese bike', +'compare-selector' => 'Revizyonê pele miqayese bike', +'compare-page1' => 'Pel 1', +'compare-page2' => 'Pel 2', +'compare-rev1' => 'Revizyonê 1i', +'compare-rev2' => 'Revizyonê 2i', +'compare-submit' => 'Miqayese', + # Database error messages 'dberr-header' => 'Ena Wiki de yew ğelet esta', 'dberr-problems' => 'Qusir ma mevin! Site ma de nika ğeletê teknikî esto.', @@ -3081,6 +3139,7 @@ satır ê ke pê ney # # destpêkenê zey mışore/mıjore muamele vineno. 'htmlform-float-invalid' => 'Ena değer ke ti spesife kerd yew amar ni yo.', 'htmlform-int-toolow' => 'Ena değer ke ti spesife kerd maxsimumê $1î ra kilmyer o.', 'htmlform-int-toohigh' => 'Ena değer ke ti spesife kerd maxsimumê $1î ra zafyer o.', +'htmlform-required' => 'Ena deger lazim o', 'htmlform-submit' => 'Bişirav', 'htmlform-reset' => 'Vurnayişî reyna biyar', 'htmlform-selectorother-other' => 'Bin', diff --git a/languages/messages/MessagesDk.php b/languages/messages/MessagesDk.php deleted file mode 100644 index 83c67a4d..00000000 --- a/languages/messages/MessagesDk.php +++ /dev/null @@ -1,12 +0,0 @@ - array( 'Dwójne dalejpósrědnjenja' ), - 'BrokenRedirects' => array( 'Njefunkcioněrujuce dalejpósrědnjenja' ), - 'Disambiguations' => array( 'Wótkaze ku rozjasnjenju wopśimjeśa' ), - 'Userlogin' => array( 'Pśizjawiś se' ), - 'Userlogout' => array( 'Wótzjawiś se' ), - 'CreateAccount' => array( 'Wužywarske konto załožyś' ), + 'DoubleRedirects' => array( 'Dwójne_dalejpósrědnjenja' ), + 'BrokenRedirects' => array( 'Njefunkcioněrujuce_dalejpósrědnjenja' ), + 'Disambiguations' => array( 'Wótkaze_ku_rozjasnjenju_wopśimjeśa' ), + 'Userlogin' => array( 'Pśizjawiś_se' ), + 'Userlogout' => array( 'Wótzjawiś_se' ), + 'CreateAccount' => array( 'Wužywarske_konto_załožyś' ), 'Preferences' => array( 'Nastajenja' ), 'Watchlist' => array( 'Wobglědowańka' ), - 'Recentchanges' => array( 'Aktualne změny' ), + 'Recentchanges' => array( 'Aktualne_změny' ), 'Upload' => array( 'Uploadowaś' ), - 'Listfiles' => array( 'Lisćina datajow' ), - 'Newimages' => array( 'Nowe dataje' ), + 'Listfiles' => array( 'Lisćina_datajow' ), + 'Newimages' => array( 'Nowe_dataje' ), 'Listusers' => array( 'Wužywarje' ), - 'Listgrouprights' => array( 'Pšawa wužywarskich kupkow' ), + 'Listgrouprights' => array( 'Pšawa_wužywarskich_kupkow' ), 'Statistics' => array( 'Statistika' ), - 'Randompage' => array( 'Pśipadny bok' ), - 'Lonelypages' => array( 'Wósyrośone boki' ), - 'Uncategorizedpages' => array( 'Njekategorizěrowane boki' ), - 'Uncategorizedcategories' => array( 'Njekategorizěrowane kategorije' ), - 'Uncategorizedimages' => array( 'Njekategorizěrowane dataje' ), - 'Uncategorizedtemplates' => array( 'Njekategorizěrowane pśedłogi' ), - 'Unusedcategories' => array( 'Njewužywane kategorije' ), - 'Unusedimages' => array( 'Njewužywane dataje' ), - 'Wantedpages' => array( 'Póžedane boki' ), - 'Wantedcategories' => array( 'Póžedane kategorije' ), - 'Wantedfiles' => array( 'Felujuce dataje' ), - 'Wantedtemplates' => array( 'Felujuce pśedłogi' ), - 'Mostlinked' => array( 'Boki na kótarež wjeźo nejwěcej wótkazow' ), - 'Mostlinkedcategories' => array( 'Nejwěcej wužywane kategorije' ), - 'Mostlinkedtemplates' => array( 'Nejwěcej wužywane pśedłogi' ), - 'Mostimages' => array( 'Nejwěcej wužywane dataje' ), - 'Mostcategories' => array( 'Boki z nejwěcej kategorijami' ), - 'Mostrevisions' => array( 'Nejwěcej wobźěłane boki' ), - 'Fewestrevisions' => array( 'Nejmjenjej wobźěłane boki' ), - 'Shortpages' => array( 'Nejkrotše boki' ), - 'Longpages' => array( 'Nejdlěše boki' ), - 'Newpages' => array( 'Nowe boki' ), - 'Ancientpages' => array( 'Nejstarše boki' ), - 'Deadendpages' => array( 'Boki kenž su slěpe gasy' ), - 'Protectedpages' => array( 'Šćitane boki' ), - 'Protectedtitles' => array( 'Šćitane title' ), - 'Allpages' => array( 'Wšykne boki' ), - 'Prefixindex' => array( 'Indeks prefiksow' ), - 'Ipblocklist' => array( 'Blokěrowane IPje' ), - 'Specialpages' => array( 'Specialne boki' ), + 'Randompage' => array( 'Pśipadny_bok' ), + 'Lonelypages' => array( 'Wósyrośone_boki' ), + 'Uncategorizedpages' => array( 'Njekategorizěrowane_boki' ), + 'Uncategorizedcategories' => array( 'Njekategorizěrowane_kategorije' ), + 'Uncategorizedimages' => array( 'Njekategorizěrowane_dataje' ), + 'Uncategorizedtemplates' => array( 'Njekategorizěrowane_pśedłogi' ), + 'Unusedcategories' => array( 'Njewužywane_kategorije' ), + 'Unusedimages' => array( 'Njewužywane_dataje' ), + 'Wantedpages' => array( 'Póžedane_boki' ), + 'Wantedcategories' => array( 'Póžedane_kategorije' ), + 'Wantedfiles' => array( 'Felujuce_dataje' ), + 'Wantedtemplates' => array( 'Felujuce_pśedłogi' ), + 'Mostlinked' => array( 'Boki_na_kótarež_wjeźo_nejwěcej_wótkazow' ), + 'Mostlinkedcategories' => array( 'Nejwěcej_wužywane_kategorije' ), + 'Mostlinkedtemplates' => array( 'Nejwěcej_wužywane_pśedłogi' ), + 'Mostimages' => array( 'Nejwěcej_wužywane_dataje' ), + 'Mostcategories' => array( 'Boki_z_nejwěcej_kategorijami' ), + 'Mostrevisions' => array( 'Nejwěcej_wobźěłane_boki' ), + 'Fewestrevisions' => array( 'Nejmjenjej_wobźěłane_boki' ), + 'Shortpages' => array( 'Nejkrotše_boki' ), + 'Longpages' => array( 'Nejdlěše_boki' ), + 'Newpages' => array( 'Nowe_boki' ), + 'Ancientpages' => array( 'Nejstarše_boki' ), + 'Deadendpages' => array( 'Boki_kenž_su_slěpe_gasy' ), + 'Protectedpages' => array( 'Šćitane_boki' ), + 'Protectedtitles' => array( 'Šćitane_title' ), + 'Allpages' => array( 'Wšykne_boki' ), + 'Prefixindex' => array( 'Indeks_prefiksow' ), + 'Ipblocklist' => array( 'Blokěrowane_IPje' ), + 'Specialpages' => array( 'Specialne_boki' ), 'Contributions' => array( 'Pśinoski' ), 'Emailuser' => array( 'E-mail' ), - 'Confirmemail' => array( 'E-mail wobkšuśiś' ), - 'Whatlinkshere' => array( 'Lisćina wótkazow' ), - 'Recentchangeslinked' => array( 'Změny na zalinkowanych bokach' ), + 'Confirmemail' => array( 'E-mail_wobkšuśiś' ), + 'Whatlinkshere' => array( 'Lisćina_wótkazow' ), + 'Recentchangeslinked' => array( 'Změny_na_zalinkowanych_bokach' ), 'Movepage' => array( 'Pśesunuś' ), 'Blockme' => array( 'Proksy-blokěrowanje' ), - 'Booksources' => array( 'Pytaś pó ISBN' ), + 'Booksources' => array( 'Pytaś_pó_ISBN' ), 'Categories' => array( 'Kategorije' ), 'Export' => array( 'Eksportěrowaś' ), 'Version' => array( 'Wersija' ), - 'Allmessages' => array( 'Systemowe powěsći' ), + 'Allmessages' => array( 'Systemowe_powěsći' ), 'Log' => array( 'Protokole' ), 'Blockip' => array( 'Blokěrowaś' ), 'Undelete' => array( 'Nawrośiś' ), 'Import' => array( 'Importěrowaś' ), - 'Lockdb' => array( 'Datowu banku blokěrowaś' ), - 'Unlockdb' => array( 'Datowu banku zasej spśistupniś' ), - 'Userrights' => array( 'Pšawa wužywarjow' ), - 'MIMEsearch' => array( 'Pytaś pó MIME-typje' ), - 'FileDuplicateSearch' => array( 'Pytanje datajowych duplikatow' ), - 'Unwatchedpages' => array( 'Boki kenž njejsu we wobglědowańkach' ), + 'Lockdb' => array( 'Datowu_banku_blokěrowaś' ), + 'Unlockdb' => array( 'Datowu_banku_zasej_spśistupniś' ), + 'Userrights' => array( 'Pšawa_wužywarjow' ), + 'MIMEsearch' => array( 'Pytaś_pó_MIME-typje' ), + 'FileDuplicateSearch' => array( 'Pytanje_datajowych_duplikatow' ), + 'Unwatchedpages' => array( 'Boki_kenž_njejsu_we_wobglědowańkach' ), 'Listredirects' => array( 'Pśesměrowanja' ), - 'Revisiondelete' => array( 'Wulašowanje wersijow' ), - 'Unusedtemplates' => array( 'Njewužywane pśedłogi' ), - 'Randomredirect' => array( 'Pśipadne pśesměrowanje' ), - 'Mypage' => array( 'Mój bok' ), - 'Mytalk' => array( 'Mója diskusija' ), - 'Mycontributions' => array( 'Móje pśinoski' ), + 'Revisiondelete' => array( 'Wulašowanje_wersijow' ), + 'Unusedtemplates' => array( 'Njewužywane_pśedłogi' ), + 'Randomredirect' => array( 'Pśipadne_pśesměrowanje' ), + 'Mypage' => array( 'Mój_bok' ), + 'Mytalk' => array( 'Mója_diskusija' ), + 'Mycontributions' => array( 'Móje_pśinoski' ), 'Listadmins' => array( 'Administratory' ), 'Listbots' => array( 'Boty' ), - 'Popularpages' => array( 'Woblubowane boki' ), + 'Popularpages' => array( 'Woblubowane_boki' ), 'Search' => array( 'Pytaś' ), - 'Resetpass' => array( 'Šćitne gronidło slědk stajiś' ), - 'Withoutinterwiki' => array( 'Interwikije feluju' ), - 'MergeHistory' => array( 'Stawizny wersijow zjadnośiś' ), - 'Filepath' => array( 'Datajowa sćažka' ), - 'Invalidateemail' => array( 'E-mail njewobkšuśis' ), - 'Blankpage' => array( 'Prozny bok' ), - 'LinkSearch' => array( 'Pytanje wótkazow' ), - 'DeletedContributions' => array( 'Wulašowane pśinoski' ), + 'Resetpass' => array( 'Šćitne_gronidło_slědk_stajiś' ), + 'Withoutinterwiki' => array( 'Interwikije_feluju' ), + 'MergeHistory' => array( 'Stawizny_wersijow_zjadnośiś' ), + 'Filepath' => array( 'Datajowa_sćažka' ), + 'Invalidateemail' => array( 'E-mail_njewobkšuśis' ), + 'Blankpage' => array( 'Prozny_bok' ), + 'LinkSearch' => array( 'Pytanje_wótkazow' ), + 'DeletedContributions' => array( 'Wulašowane_pśinoski' ), 'Tags' => array( 'Toflicki' ), - 'Activeusers' => array( 'Aktiwne wužywarje' ), + 'Activeusers' => array( 'Aktiwne_wužywarje' ), ); $messages = array( @@ -167,8 +167,7 @@ $messages = array( 'tog-editsection' => 'Wobźěłanje wótstawkow pśez wótkaze [wobźěłaś] zmóžniś', 'tog-editsectiononrightclick' => 'Wobźěłanje wótstawkow pśez kliknjenje z pšaweju tastu myški zmóžniś (JavaScript)', 'tog-showtoc' => 'Wopśimjeśe pokazaś, jolic ma bok wěcej nježli 3 nadpisma', -'tog-rememberpassword' => 'Se stawnje na toś tom computerje pśizjawiś', -'tog-editwidth' => 'Wobźěłowańske pólo póšyriś, aby se ceła wobrazowka połniła', +'tog-rememberpassword' => 'Z toś tym wobglědowakom pśizjawjony wóstaś (za maksimalnje $1 {{PLURAL:$1|źeń|dnja|dny|dnjow}})', 'tog-watchcreations' => 'Boki, kótarež załožyjom, awtomatiski wobglědowaś', 'tog-watchdefault' => 'Boki, kótarež změnijom, awtomatiski wobglědowaś', 'tog-watchmoves' => 'Boki, kótarež som pśesunuł, awtomatiski wobglědowaś', @@ -314,31 +313,21 @@ $messages = array( 'faqpage' => 'Project:FAQ (pšašanja a wótegrona)', # Vector skin -'vector-action-addsection' => 'Temu pśidaś', -'vector-action-delete' => 'Wulašowaś', -'vector-action-move' => 'Pśesunuś', -'vector-action-protect' => 'Šćitaś', -'vector-action-undelete' => 'Wótnowiś', -'vector-action-unprotect' => 'Šćit wótpóraś', -'vector-namespace-category' => 'Kategorija', -'vector-namespace-help' => 'Bok pomocy', -'vector-namespace-image' => 'Dataja', -'vector-namespace-main' => 'Bok', -'vector-namespace-media' => 'Medijowy bok', -'vector-namespace-mediawiki' => 'Powěźeńka', -'vector-namespace-project' => 'Projektowy bok', -'vector-namespace-special' => 'Specialny bok', -'vector-namespace-talk' => 'Diskusija', -'vector-namespace-template' => 'Pśedłoga', -'vector-namespace-user' => 'Wužywarski bok', -'vector-view-create' => 'Napóraś', -'vector-view-edit' => 'Wobźěłaś', -'vector-view-history' => 'Wersije a awtory', -'vector-view-view' => 'Cytaś', -'vector-view-viewsource' => 'Žrědło se woglědaś', -'actions' => 'Akcije', -'namespaces' => 'Mjenjowe rumy', -'variants' => 'Warianty', +'vector-action-addsection' => 'Temu pśidaś', +'vector-action-delete' => 'Wulašowaś', +'vector-action-move' => 'Pśesunuś', +'vector-action-protect' => 'Šćitaś', +'vector-action-undelete' => 'Wótnowiś', +'vector-action-unprotect' => 'Šćit wótpóraś', +'vector-simplesearch-preference' => 'Pólěpšone pytańske naraźenja zmóžniś (jano suknja Vector)', +'vector-view-create' => 'Napóraś', +'vector-view-edit' => 'Wobźěłaś', +'vector-view-history' => 'Wersije a awtory', +'vector-view-view' => 'Cytaś', +'vector-view-viewsource' => 'Žrědło se woglědaś', +'actions' => 'Akcije', +'namespaces' => 'Mjenjowe rumy', +'variants' => 'Warianty', 'errorpagetitle' => 'Zmólka', 'returnto' => 'Slědk k boku $1.', @@ -399,6 +388,9 @@ Pśewjele wužywarjow wopytujo se toś ten bok woglědaś. Pšosym pócakaj chylu, nježli až wopytujoš znowego na toś ten bok pśistup měś. $1', +'pool-timeout' => 'Pśekšocenje casa wob cakanje na zastajenje', +'pool-queuefull' => 'Cakajucy rěd jo połny', +'pool-errorunknown' => 'Njeznata zmólka', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Wó {{GRAMMAR:lokatiw|{{SITENAME}}}}', @@ -558,7 +550,8 @@ Twójo konto jo se załožyło. Njezabydni změniś swóje [[Special:Preferences 'yourname' => 'mě wužywarja', 'yourpassword' => 'šćitne gronidło:', 'yourpasswordagain' => 'Šćitne gronidło hyšći raz zapódaś:', -'remembermypassword' => 'Šćitne gronidło na toś tom computerje składowaś', +'remembermypassword' => 'Na toś tom licadle pśizjawjony wóstaś (za maksimalnje $1 {{PLURAL:$1|źeń|dnja|dny|dnjow}})', +'securelogin-stick-https' => 'Pó pśizjawjenju z HTTPS zwězany wóstaś', 'yourdomainname' => 'Twója domejna', 'externaldberror' => 'Abo jo wustupiła eksterna zmólka awtentifikacije datoweje banki, abo njesmějoš swójo eksterne wužywarske konto aktualizěrowaś.', 'login' => 'Pśizjawiś se', @@ -575,6 +568,7 @@ Twójo konto jo se załožyło. Njezabydni změniś swóje [[Special:Preferences 'gotaccount' => "Maš južo wužywarske konto? '''$1'''.", 'gotaccountlink' => 'Pśizjawiś se', 'createaccountmail' => 'z e-mailku', +'createaccountreason' => 'Pśicyna:', 'badretype' => 'Šćitnej gronidle, kótarejž sy zapódał, se njemakajotej.', 'userexists' => 'Toś to wužywarske mě słuša južo drugemu wužywarjeju, pšosym wuzwól se druge.', 'loginerror' => 'Zmólka pśi pśizjawjenju', @@ -593,6 +587,7 @@ Pśeglěduj pšawopis abo [[Special:UserLogin/signup|załož nowe konto]].', 'wrongpasswordempty' => 'Šćitne gronidło jo było prozne. Pšosym zapódaj jo hyšći raz.', 'passwordtooshort' => 'Gronidła deje nanejmjenjej {{PLURAL:$|1 znamuško|$1 znamušce|$1 znamuška|$1 znamuškow}} měś.', 'password-name-match' => 'Twójo gronidło musy se wót swójogo wužywarskego mjenja rozeznaś.', +'password-login-forbidden' => 'Wužywanje toś togo wužywarskego mjenja a gronidła jo zakazane.', 'mailmypassword' => 'Nowe gronidło pśipósłaś', 'passwordremindertitle' => 'Nowe nachylne pótajmne słowo za {{SITENAME}}', 'passwordremindertext' => 'Něchten z IP-adresu $1 (nejskerjej ty) jo se wupšosył nowe gronidło za {{SITENAME}} ($4). @@ -627,6 +622,9 @@ Móžoš toś te zdźělenje ignorowaś, jolic toś te konto jo se jano zamólnj 'loginlanguagelabel' => 'Rěc: $1', 'suspicious-userlogout' => 'Twójo póžedanje za wótzjawjenim jo se wótpokazało, dokulaž zda se, až jo se pósłało pśez wobškóźony wobglědowak abo pufrowański proksy', +# E-mail sending +'php-mail-error-unknown' => 'Njeznata zmólka w PHP-funkciji mail()', + # Password reset dialog 'resetpass' => 'Gronidło změniś', 'resetpass_announce' => 'Sy z nachylnym e-mailowym šćitnym gronidłom pśizjawjony. Aby pśizjawjenje zakóńcył, zapódaj how nowe šćitne gronidło:', @@ -678,9 +676,10 @@ Sy snaź swójo gronidło južo wuspěšnje změnił abo nowe nachylne gronidło 'showlivepreview' => 'Livepśeglěd', 'showdiff' => 'Pśeměnjenja pokazaś', 'anoneditwarning' => "'''Warnowanje:''' Njejsy pśizjawjony. Změny w stawiznach togo boka składuju se z twójeju IP-adresu.", +'anonpreviewwarning' => "''Njejsy pśizjawjony. Składowanje pśenosujo twóju IP-adresu do wobźěłowańskeje historije toś togo boka.''", 'missingsummary' => "'''Pokazka:''' Njejsy žedno zespominanje zapódał. Gaž kliknjoš na \"Składowaś\" składujo se bok bźez zespominanja.", 'missingcommenttext' => 'Pšosym zespominanje zapódaś.', -'missingcommentheader' => "'''WARNOWANJE:''' Njejsy žedno nadpismo zapódał. Gaž kliknjoš na \"Składowaś\", składujo se twójo wobźěłanje mimo nadpisma.", +'missingcommentheader' => "'''Glědaj:''' Njejsy temu/ nadpismo za toś ten komentar pódał. Gaž kliknjoš na \"{{int:savearticle}}\" znowego, składujo se twójo wobźěłanje mimo temy/nadpisma.", 'summary-preview' => 'Pśeglěd zespominanja:', 'subject-preview' => 'Pśeglěd nadpisma:', 'blockedtitle' => 'Wužywaŕ jo se blokěrował', @@ -747,7 +746,11 @@ Nejnowšy zapisk blokěrowańskego protokola pódawa se dołojce ako referenca:' 'usercsspreview' => "'''Źiwaj na to, až wobglědujoš se jano pśeglěd swójogo wužywarskego CSS. Njejo se hyšći składował!'''", 'userjspreview' => "== Pśeglěd Wašogo wužywarskego JavaScripta == '''Glědaj:''' Pó składowanju musyš swójomu browseroju kazaś, aby nowu wersiju pokazał: '''Mozilla/Firefox:''' ''Strg-Shift-R'', '''Internet Explorer:''' ''Strg-F5'', '''Opera:''' ''F5'', '''Safari:''' ''Cmd-Shift-R'', '''Konqueror:''' ''F5''.", -'userinvalidcssjstitle' => "'''Warnowanje:''' Njeeksistěrujo šat „$1“. Pšosym mysli na to, až wužywaju .css- a .js-boki mały pismik, na pś. ''{{ns:user}}:Pśikładowa/monobook.css'' město ''{{ns:user}}:Pśikładowa/Monobook.css''.", +'sitecsspreview' => "'''Źiwaj na to, až wobglědujoš se jano pśeglěd toś ten CSS.''' +'''Njejo se hyšći składował!'''", +'sitejspreview' => "'''Źiwaj na to, až wobglědujoš se jano pśeglěd toś togo koda JavaScript.''' +'''Njejo se hyšći składował!'''", +'userinvalidcssjstitle' => "'''Warnowanje:''' Njeeksistěrujo šat „$1“. Pšosym mysli na to, až wužywaju .css- a .js-boki mały pismik, na pś. ''{{ns:user}}:Pśikładowa/vector.css'' město ''{{ns:user}}:Pśikładowa/Vector.css''.", 'updated' => '(Zaktualizěrowane)', 'note' => "'''Pokazka:'''", 'previewnote' => "'''To jo jano pśeglěd, bok njejo hyšći składowany!'''", @@ -778,8 +781,6 @@ Ty teke wobkšuśijoš, až sy tekst sam napisał abo sy jen wót public domainy '''NJEWÓZJAW WÓT COPYRIGHTA ŠĆITANE ŹĚŁA MIMO DOWÓLNOSĆI!'''", 'copyrightwarning2' => "Pšosym buź se togo wědobny, až wšykne pśinoski na {{SITENAME}} mógu wót drugich wužywarjow se wobźěłaś, narownaś abo wulašowaś. Jolic až njocoš, až twój tekst se mimo zmilnosći wobźěłujo, ga pón jen how njeskładuj.
    Ty teke wobkšuśijoš, až sy tekst sam napisał abo sy jen wót public domainy resp. wót pódobneje lichotneje resursy kopěrował (glědaj $1 za dalše detaile). '''NJEWÓZJAW WÓT COPYRIGHTA ŠĆITANE ŹĚŁA MIMO DOWÓLNOSĆI!'''", -'longpagewarning' => "'''GLĚDAJ: Toś ten bok wopśimjejo $1 kilobajtow; někotare wobglŽŽědowaki mógu měś problemy z wobźěłowanim bokow, kótarež su wětše ako 32 kb. -Pšosym pśemysli, jolic njamóžo se bok na mjeńše wótrězki rozdźěliś.'''", 'longpageerror' => "'''Zmólka: Tekst, kótaryž coš składowaś jo $1 KB wjeliki. To jo wěcej, ako dowólony maksimum ($2 KB). Składowanje njejo móžno.'''", 'readonlywarning' => "'''WARNOWANJE: Datowa banka jo se za wótwardowanje zacyniła, togodla njebuźo tuchylu móžno, twóje změny składowaś. Jolic až coš, ga móžoš tekst do tekstoweje dataje kopěrowaś a pózdźej składowaś.''' @@ -953,6 +954,8 @@ $1", 'logdelete-failure' => "'''Protokolowa wiźobnosć njejo se dała nastajiś:''' $1", 'revdel-restore' => 'Widobnosć změniś', +'revdel-restore-deleted' => 'wulašowane wersije', +'revdel-restore-visible' => 'widobne wersije', 'pagehist' => 'stawizny boka', 'deletedhist' => 'wulašowane stawizny', 'revdelete-content' => 'wopśimjeśe', @@ -1019,11 +1022,13 @@ Zaruc, až historija wersijow nastawka jo njepśetergnjona.', # Diffs 'history-title' => 'Stawizny wersijow boka „$1“', 'difference' => '(rozdźěle mjazy wersijoma/wersijami)', +'difference-multipage' => '(Rozdźěl mjazy bokami)', 'lineno' => 'Rědka $1:', 'compareselectedversions' => 'Wuzwólonej wersiji pśirownaś', 'showhideselectedversions' => 'Wubrane wersije pokazaś/schowaś', 'editundo' => 'wótwrośiś', -'diff-multi' => '(Pśirownanje wersijow(u) wopśimjejo teke {{PLURAL:$1|mjaz tutyma lažecu wersiju|$1 mjaz tutyma lažecej wersiji|$1 mjaz tutyma lažece wersije}}.)', +'diff-multi' => '({{PLURAL:$1|Jadna mjazywersija|$1 mjazywersiji|$1 mjazywersije|$1 mjazywersijow}} wót {{PLURAL:$2|jadnogo wužywarja|$2 wužywarjowu|$2 wužywarjow|$2 wužywarjow}} {{PLURAL:$1|njepokazana|njepokazanej|njepokazane|njepokazane}})', +'diff-multi-manyusers' => '({{PLURAL:$1|Jadna mjazywersija|$1 mjazywersiji|$1 mjazywersije|$1 mjazywersijow}} wót wěcej ako {{PLURAL:$2|jadnogo wužywarja|$2 wužywarjowu|$2 wužywarjow|$2 wužywarjow}} {{PLURAL:$1|njepokazana|njepokazanej|njepokazane|njepokazane}})', # Search results 'searchresults' => 'Wuslědki pytanja', @@ -1058,6 +1063,7 @@ Zaruc, až historija wersijow nastawka jo njepśetergnjona.', 'searchprofile-everything-tooltip' => 'Cełe wopsímjeśe pśepytaś (inkluziwnje diskusijne boki)', 'searchprofile-advanced-tooltip' => 'W swójskich mjenjowych rumach pytaś', 'search-result-size' => '$1 ({{PLURAL:$2|1 słowow|$2 słowje|$2 słowa|$2 słowow}})', +'search-result-category-size' => '{{PLURAL:$1|1 cłonk|$1 cłonka|$1 cłonki|$1 cłonkow}} ({{PLURAL:$2|1 pódkategorija|$2 pódkategoriji|$2 pódkategorije|$2 pódkategorijow}}, {{PLURAL:$3|1 dataja|$3 dataji|$3 dataje|$3 datajow}})', 'search-result-score' => 'Relewanca: $1 %', 'search-redirect' => '(pśesměrowanje $1)', 'search-section' => '(sekcija $1)', @@ -1132,6 +1138,7 @@ Zaruc, až historija wersijow nastawka jo njepśetergnjona.', 'contextlines' => 'Rědki na wuslědk:', 'contextchars' => 'Znamuška na rědku:', 'stub-threshold' => 'Formatěrowanje wótkaza na zarodk (w bytach):', +'stub-threshold-disabled' => 'Znjemóžnjony', 'recentchangesdays' => 'Licba dnjow, kenž se pokazuju w "slědnych změnach":', 'recentchangesdays-max' => '(maksimalnje $1 {{PLURAL:$1|źeń|dnja|dny|dnjow}})', 'recentchangescount' => 'Licba změnow, kótaraž ma se pó standarźe pokazaś:', @@ -1165,6 +1172,7 @@ How jo pśipadnje napórana gódnota, kótaruž móžoš wužywaś: $1', 'prefs-files' => 'Dataje', 'prefs-custom-css' => 'Swójski CSS', 'prefs-custom-js' => 'Swójski JS', +'prefs-common-css-js' => 'Zgromadny CSS/JS za wšykne suknje:', 'prefs-reset-intro' => 'You can use this page to reset your preferences to the site defaults. This cannot be undone. Móžoš toś ten bok wužywaś, aby slědk stajił swóje nastajenja na standardne gódnoty sedła. To njedajo se anulěrowaś.', 'prefs-emailconfirm-label' => 'E-mailowe wobkšuśenje:', @@ -1200,9 +1208,15 @@ Móžoš toś ten bok wužywaś, aby slědk stajił swóje nastajenja na standar 'prefs-advancedrendering' => 'Rozšyrjone opcije', 'prefs-advancedsearchoptions' => 'Rozšyrjone opcije', 'prefs-advancedwatchlist' => 'Rozšyrjone opcije', -'prefs-display' => 'Opcije se woglědaś', +'prefs-displayrc' => 'Zwobraznjowańske opcije', +'prefs-displaysearchoptions' => 'Zwobraznjowańske opcije', +'prefs-displaywatchlist' => 'Zwobraznjowańske opcije', 'prefs-diffs' => 'Rozdźěle', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Zda se, až e-mailowa adresa jo płaśiwa', +'email-address-validity-invalid' => 'Zapódaj płaśiwu e-mailowu adresu', + # User rights 'userrights' => 'Zastojanje wužywarskich pšawow', 'userrights-lookup-user' => 'Wužywarske kupki zastojaś', @@ -1286,6 +1300,7 @@ Móžoš toś ten bok wužywaś, aby slědk stajił swóje nastajenja na standar 'right-hideuser' => 'Wužywarske mě blokěrowaś a schowaś', 'right-ipblock-exempt' => 'Blokěrowanja IP, awtomatiske blokěrowanja a blokěrowanja wobcerkow se wobinuś', 'right-proxyunbannable' => 'Awtomatiske blokěrowanje proksyjow se wobinuś', +'right-unblockself' => 'Wótblokěrowaś se samogo', 'right-protect' => 'Šćitowe schójźeńki změniś a šćitane boki wobźěłaś', 'right-editprotected' => 'Šćitane boki wobźěłaś (bśez kaskadowego šćita)', 'right-editinterface' => 'Wužywański pówjerch wobźěłaś', @@ -1308,7 +1323,6 @@ Móžoš toś ten bok wužywaś, aby slědk stajił swóje nastajenja na standar 'right-siteadmin' => 'Datowu banku zastajiś a zastajenje wótpóraś', 'right-reset-passwords' => 'Gronidła drugich wužywarjow slědk stajiś', 'right-override-export-depth' => 'Boki inkluziwnje wótkazanych bokow až do dłyma 5 eksportěrowaś', -'right-versiondetail' => 'Nadrobne informacije wó wersiji softwary pokazaś', 'right-sendemail' => 'Drugim wužywarjam e-mail pósłaś', # User rights log @@ -1359,14 +1373,9 @@ Móžoš toś ten bok wužywaś, aby slědk stajił swóje nastajenja na standar 'recentchanges-legend' => 'Opcije aktualnych změnow', 'recentchangestext' => "How móžoš slědne změny we '''{{GRAMMAR:lokatiw|{{SITENAME}}}}''' slědowaś.", 'recentchanges-feed-description' => 'Slěduj z toś tym zapódaśim nejaktualnjejše změny we {{GRAMMAR:lokatiw|{{SITENAME}}}}.', -'recentchanges-label-legend' => 'Legenda: $1.', -'recentchanges-legend-newpage' => '$1 - nowy bok', 'recentchanges-label-newpage' => 'Toś ta změna jo nowy bok napórała.', -'recentchanges-legend-minor' => '$1 - snadna změna', 'recentchanges-label-minor' => 'To jo snadna změna', -'recentchanges-legend-bot' => '$1 - změna bośika', 'recentchanges-label-bot' => 'Toś ta změna jo se pśez bośik wuwjadła.', -'recentchanges-legend-unpatrolled' => '$1 - njepśekontrolěrowana změna', 'recentchanges-label-unpatrolled' => 'Toś ta změna hyšći njejo se pśekontrolěrowała', 'rcnote' => "Dołojce {{PLURAL:$1|jo '''1''' změna|stej slědnej '''$1''' změnje|su slědne '''$1''' změny}} w {{PLURAL:$2|slědnem dnju|slědnyma '''$2''' dnjoma|slědnych '''$2''' dnjach}}, staw wót $4, $5.", 'rcnotefrom' => "Dołojce pokazuju se změny wót '''$2''' (maks. '''$1''' zapisow).", @@ -1413,6 +1422,9 @@ Boki na [[Special:Watchlist|wobglědowańce]] su '''tucne'''.", 'upload_directory_missing' => 'Nagrawański zapis ($1) felujo a njejo se pśez webserwer napóraś dał.', 'upload_directory_read_only' => 'Nagrawański zapisk ($1) njedajo se pśez webserwer pisaś.', 'uploaderror' => 'Nagrawańska zmólka', +'upload-recreate-warning' => "'''Warnowanje: Dataja z tym mjenim jo se wulašowała abo pśeunuła.''' + +Protokola wulašowanjow a pśesunjenjow za toś ten bok stej how k twójej dispoziciji pódanej:", 'uploadtext' => "Wužyj toś ten formular za nagraśe nowych datajow. Źi na [[Special:FileList|lisćinu nagratych datajow]], aby mógł južo nagrate dataje se wobglědaś abo pytaś, nagraśa protokolěruju se w [[Special:Log/upload|protokolu nagraśow]], wulašowanja w [[Special:Log/delete|protokolu wulašowanjow]]. @@ -1448,6 +1460,17 @@ Glědaj [[Special:NewFiles|galeriju nowych datajow]] za wizuelny pśeglěd.', 'filetype-banned-type' => "'''„.$1“''' jo njedowólony datajowy typ. {{PLURAL:$3|Dowólony datajowy typ jo|Dowólenej datajowej typa stej|Dowólone datajowe typy su}} $2.", 'filetype-missing' => 'Dataja njama žedno rozšyrjenje (na pś. „.jpg“).', +'empty-file' => 'Dataja, kótaruž sy wótpósłał, jo prozna była.', +'file-too-large' => 'Dataja, kótaruž sy wótpósłał, jo pśewjelika była.', +'filename-tooshort' => 'Datajowe mě jo pśekrotke.', +'filetype-banned' => 'Toś ten datajowy typ jo zakazany.', +'verification-error' => 'Toś ta dataja njejo pśejšeła datajowe pśeglědanje.', +'hookaborted' => 'Změna, kótaruž sy wopytał pśewjasć, jo se pśetergnuła pśez rozšyrjeńsku kokulu.', +'illegal-filename' => 'Datajowe mě njejo dowólone.', +'overwrite' => 'Pśepisowanje eksistujuceje dataje njejo dowólone.', +'unknown-error' => 'Njeznata zmólka jo nastała.', +'tmp-create-error' => 'Temporerna dataja njejo se dała napóraś.', +'tmp-write-error' => 'Zmólka pśi pisanju temporerneje dataje.', 'large-file' => 'Pó móžnosći njedejała dataja wětša byś ako $1. Toś ta dataja jo $2 wjelika.', 'largefileserver' => 'Dataja jo wětša ako serwer dopušćijo.', 'emptyfile' => 'Dataja, kótaruž sy nagrał, jo prozna. Pśicyna móžo byś zmólka w mjenju dataje. Kontrolěruj pšosym, lěc coš dataju napšawdu nagraś.', @@ -1471,13 +1494,14 @@ Jolic maš toś ten wobraz w połnem rozeznaśu, nagraj jen, howac změń pšosy [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Toś ta dataja jo duplikat {{PLURAL:$1|slědujuceje dataje|slědujuceju datajow|slědujucych datajow|slědujucych datajow}}:', 'file-deleted-duplicate' => 'Dataja, kótaraž jo identiska z toś teju dataju ([[:$1]]) jo se pjerwjej wulašowała. Ty měł stawizny wulašowanja toś teje dataje pśeglědaś, pjerwjej až pokšacujoš z jeje zasejnagrawanjom.', -'successfulupload' => 'Nagraśe jo było wuspěšne.', 'uploadwarning' => 'Warnowanje', 'uploadwarning-text' => 'Pšosym změń slědujuce datajowe wopisanje a wopytaj hyšći raz.', 'savefile' => 'Dataju składowaś', 'uploadedimage' => 'jo "[[$1]]" nagrał.', 'overwroteimage' => 'Jo nowu wersiju "[[$1]]" nagrał.', 'uploaddisabled' => 'Nagrawanje jo se znjemóžniło.', +'copyuploaddisabled' => 'Nagraśe pśez URL znjemóžnjone.', +'uploadfromurl-queued' => 'Twójo nagraśe jo něnto w cakańskem rěźe.', 'uploaddisabledtext' => 'Nagraśa datajow su znjemóžnjone.', 'php-uploaddisabledtext' => 'Nagraśa PHP-datajow su znjemóžnjone. Pšosym pśekontrolěruj nastajenje file_uploads.', 'uploadscripted' => 'Toś ta dataja wopśimjejo HTML abo script code, kótaryž móžo wót browsera se zamólnje wuwjasć.', @@ -1510,6 +1534,14 @@ JD # Jenoptik MGP # Pentax PICT # misc. # ', +'upload-success-subj' => 'Nagraśe jo było wuspěšne.', +'upload-success-msg' => 'Twójo nagraśe z [$2] jo wuspěšne było. Stoj how k dispoziciji: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Nagrawański problem', +'upload-failure-msg' => 'Jo był problem z twójim nagraśim wót [$2]: + +$1', +'upload-warning-subj' => 'Nagrawańske warnowanje', +'upload-warning-msg' => 'Jo był problem z twójim nagraśim z [$2]. Wroś k [[Special:Upload/stash/$1|nagrawańskemu formularoju]], aby wótpórał toś ten problem.', 'upload-proto-error' => 'Njekorektny protokol', 'upload-proto-error-text' => 'URL musy zachopiś z http:// abo ftp://.', @@ -1567,6 +1599,7 @@ Za optimalnu wěstotu img_auth.php jo znjemóžnjony.', 'listfiles_search_for' => 'Za medijowym mjenim pytaś:', 'imgfile' => 'dataja', 'listfiles' => 'Lisćina datajow', +'listfiles_thumb' => 'Pśeglědowy wobraz', 'listfiles_date' => 'datum', 'listfiles_name' => 'mě dataje', 'listfiles_user' => 'wužywaŕ', @@ -1677,8 +1710,8 @@ Slědujuca lisćina pokazujo jano {{PLURAL:$1|prědny wótkaz|prědnej $1 wótka 'statistics-edits' => 'Změny bokow wót załoženja {{SITENAME}}', 'statistics-edits-average' => 'Změny na bok w pśerězku', 'statistics-views-total' => 'Zwobraznjenja dogromady', +'statistics-views-total-desc' => 'Woglědanja na njeeksistěrujucych bokach a specialnych bokach njejsu zapśimjone', 'statistics-views-peredit' => 'Zwobraznjenja na změnu', -'statistics-jobqueue' => 'Dłujkosć [http://www.mediawiki.org/wiki/Manual:Job_queue Job queue]', 'statistics-users' => 'Zregistrěrowane [[Special:ListUsers|wužywarje]]', 'statistics-users-active' => 'Aktiwne wužywarje', 'statistics-users-active-desc' => 'Wužywarje, kótarež su {{PLURAL:$1|cora|w slědnyma $1 dnjoma|w slědnych $1 dnjach|w slědnych $1 dnjach}} aktiwne byli', @@ -1691,8 +1724,8 @@ Wótkazujśo lubjej na pótrjefjony bok.
    Bok wobjadnawa se ako bok wujasnjenja zapśimjeśa, gaž wótkazujo na nju [[MediaWiki:Disambiguationspage]].', 'doubleredirects' => 'Dwójne dalejpósrědnjenja', -'doubleredirectstext' => 'Toś ten bok nalicujo boki, kótarež dalej pósrědnjaju na druge dalejpósrědnjenja. -Kužda smužka wopśimjejo wótkaze na prědne a druge dalejpósrědnjenje a teke na cel drugego dalejpósrědnjenja, což jo w normalnem paźe "napšawdny" celowy bok, na kótaryž by mógło prědne dalejpósrědnjenje pokazaś. Pśešmarnjone zapiski su južo wobstarane.', +'doubleredirectstext' => 'Toś ten bok nalicujo boki, kótarež dalej pósrědnjaju na druge dalejpósrědnjenja. +Kužda smužka wopśimjejo wótkaze na prědne a druge dalejpósrědnjenje a teke na cel drugego dalejpósrědnjenja, což jo w normalnem paźe "napšawdny" celowy bok, na kótaryž by mógło prědne dalejpósrědnjenje pokazaś. Pśešmarnjone zapiski su južo wobstarane.', 'double-redirect-fixed-move' => '[[$1]] jo se pśesunuł, jo něnto dalejposrědnjenje do [[$2]]', 'double-redirect-fixer' => 'Pórěźaŕ dalejpósrědnjenjow', @@ -1715,6 +1748,8 @@ Kužda smužka wopśimjejo wótkaze na prědne a druge dalejpósrědnjenje a tek 'nmembers' => '$1 {{PLURAL:$1|zapis|zapisa|zapise}}', 'nrevisions' => '$1 {{PLURAL:$1|wobźěłanje|wobźěłani|wobźěłanja}}', 'nviews' => '$1 {{PLURAL:$1|wótpšašanje|wótpšašani|wótpšašanja}}', +'nimagelinks' => 'Wužywa se na $1 {{PLURAL:$1|boku|bokoma|bokach|bokach}}', +'ntransclusions' => 'wužywa se na $1 {{PLURAL:$1|boku|bokoma|bokach|bokach}}', 'specialpage-empty' => 'Toś ten bok njewopśimjejo tuchylu žedne zapise.', 'lonelypages' => 'Wósyrośone boki', 'lonelypagestext' => 'Slědujuce boki njejsu wótkazowe cele drugich bokow abo njezapśimuju se do drugich bokow w @@ -1870,34 +1905,40 @@ Pódpěrane protokole: $1', 'listgrouprights-removegroup-self-all' => 'Móžo wše kupki ze swójskego konta wótpóraś', # E-mail user -'mailnologin' => 'Njejo móžno e-mailku pósłaś.', -'mailnologintext' => 'Dejš [[Special:UserLogin|pśizjawjony]] byś a płaśiwu e-mailowu adresu w swójich [[Special:Preferences|nastajenjach]] měś, aby drugim wužywarjam e-mail pósłał.', -'emailuser' => 'Toś tomu wužywarjeju e-mail pósłaś', -'emailpage' => 'E-mail wužywarjeju', -'emailpagetext' => 'Móžoš slědujucy formular wužywaś, aby toś tomu wužywarjeju e-mail pósłał. +'mailnologin' => 'Njejo móžno e-mailku pósłaś.', +'mailnologintext' => 'Dejš [[Special:UserLogin|pśizjawjony]] byś a płaśiwu e-mailowu adresu w swójich [[Special:Preferences|nastajenjach]] měś, aby drugim wužywarjam e-mail pósłał.', +'emailuser' => 'Toś tomu wužywarjeju e-mail pósłaś', +'emailpage' => 'E-mail wužywarjeju', +'emailpagetext' => 'Móžoš slědujucy formular wužywaś, aby toś tomu wužywarjeju e-mail pósłał. E-mailowa adresa, kótaruž sy zapódał w [[Special:Preferences|swójich wužywarskich nastajenjach]], zjawi se ako adresa w pólu "Wót" e-maile, aby dostawaŕ móžo śi direktnje wótegroniś.', -'usermailererror' => 'E-mailowy objekt jo zmólku wrośił.', -'defemailsubject' => '{{SITENAME}} e-mail', -'noemailtitle' => 'E-mailowa adresa felujo.', -'noemailtext' => 'Toś ten wužywaŕ njejo pódał płaśiwu e-mailowu adresu.', -'nowikiemailtitle' => 'Žedna e-mail dowólona', -'nowikiemailtext' => 'Toś ten wužywaŕ njoco žednu e-mail wót drugich wužywarjow dostaś.', -'email-legend' => 'Drugemu wužywarjeju {{SITENAME}} e-mail pósłaś', -'emailfrom' => 'Wót:', -'emailto' => 'Komu:', -'emailsubject' => 'Tema:', -'emailmessage' => 'Powěsć:', -'emailsend' => 'Wótpósłaś', -'emailccme' => 'Pósćel mě kopiju e-maila.', -'emailccsubject' => 'Kopija Twójeje powěsći na $1: $2', -'emailsent' => 'e-mail wótposłany', -'emailsenttext' => 'Twój e-mail jo se wótpósłał.', -'emailuserfooter' => 'Toś ta e-mailka jo se z pomocu funkcije "Toś tomu wužywarjeju e-mail pósłaś" na {{SITENAME}} wót $1 do $2 pósłała.', +'usermailererror' => 'E-mailowy objekt jo zmólku wrośił.', +'defemailsubject' => '{{SITENAME}} e-mail', +'usermaildisabled' => 'Wužywarska e-mail znjemóžnjona', +'usermaildisabledtext' => 'Njamóžoš w toś tym wikiju drugim wužywarjam e-mail pósłaś', +'noemailtitle' => 'E-mailowa adresa felujo.', +'noemailtext' => 'Toś ten wužywaŕ njejo pódał płaśiwu e-mailowu adresu.', +'nowikiemailtitle' => 'Žedna e-mail dowólona', +'nowikiemailtext' => 'Toś ten wužywaŕ njoco žednu e-mail wót drugich wužywarjow dostaś.', +'email-legend' => 'Drugemu wužywarjeju {{SITENAME}} e-mail pósłaś', +'emailfrom' => 'Wót:', +'emailto' => 'Komu:', +'emailsubject' => 'Tema:', +'emailmessage' => 'Powěsć:', +'emailsend' => 'Wótpósłaś', +'emailccme' => 'Pósćel mě kopiju e-maila.', +'emailccsubject' => 'Kopija Twójeje powěsći na $1: $2', +'emailsent' => 'e-mail wótposłany', +'emailsenttext' => 'Twój e-mail jo se wótpósłał.', +'emailuserfooter' => 'Toś ta e-mailka jo se z pomocu funkcije "Toś tomu wužywarjeju e-mail pósłaś" na {{SITENAME}} wót $1 do $2 pósłała.', + +# User Messenger +'usermessage-summary' => 'Systemowu powěźeńku zawóstajis.', +'usermessage-editor' => 'Systemowy powěstnik', # Watchlist 'watchlist' => 'Wobglědowańka', 'mywatchlist' => 'mója wobglědowańka', -'watchlistfor' => "(za wužywarja '''$1''')", +'watchlistfor2' => 'Za wužywarja $1 $2', 'nowatchlist' => 'Žedne zapise w twójej wobglědowańce.', 'watchlistanontext' => 'Dejš $1, aby mógał swóju wobglědowańku wiźeś abo zapise w njej wobźěłaś.', 'watchnologin' => 'Njepśizjawjony(a)', @@ -2013,7 +2054,10 @@ Slědnu změnu k bokoju jo pśewjadł [[User:$3|$3]] ([[User talk:$3|diskusija]] 'revertpage' => 'Změny wužywarja [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskusija]]) su se wótwrośili a slědna wersija wužywarja [[User:$1|$1]] jo se wótnowiła.', 'revertpage-nouser' => 'Jo změny wót (wužywarske mě wótpórane) na slědnu wersiju wót [[User:$1|$1]] slědk stajił', 'rollback-success' => 'Změny wót $1 su se slědk wzeli a slědna wersija wót $2 jo zasej se nawrośiła.', -'sessionfailure' => 'Problem z twójim wužywarskim pósejźenim jo se wujawił. + +# Edit tokens +'sessionfailure-title' => 'Pósejźeńska zmólka', +'sessionfailure' => 'Problem z twójim wužywarskim pósejźenim jo se wujawił. Wěstoty dla jo akcija se pśetergnuła, aby se zadorało wopacnemu pśirědowanjoju twójeje změny drugemu wužywarjeju. Pšosym nawroś se na bok, wót kótaregož sy pśišeł a wopytaj hyšći raz.', @@ -2140,18 +2184,22 @@ $1', 'month' => 'wót mjaseca (a jěsnjej):', 'year' => 'wót lěta (a jěsnjej):', -'sp-contributions-newbies' => 'Pśinoski jano za nowych wužywarjow pokazaś', -'sp-contributions-newbies-sub' => 'Za nowackow', -'sp-contributions-newbies-title' => 'Wužywarske pśinoski nowych kontow', -'sp-contributions-blocklog' => 'Protokol blokěrowanjow', -'sp-contributions-deleted' => 'Wulašowane wužywarske pśinoski', -'sp-contributions-logs' => 'protokole', -'sp-contributions-talk' => 'diskusija', -'sp-contributions-userrights' => 'Zastojanje wužywarskich pšawow', -'sp-contributions-blocked-notice' => 'Toś ten wužywaŕ jo tuchylu blokěrowany. Nejnowšy zapisk blokěrowańskego protokola pódawa se dołojce ako referenca:', -'sp-contributions-search' => 'Pśinoski pytaś', -'sp-contributions-username' => 'IP-adresa abo wužywarske mě:', -'sp-contributions-submit' => 'Pytaś', +'sp-contributions-newbies' => 'Pśinoski jano za nowych wužywarjow pokazaś', +'sp-contributions-newbies-sub' => 'Za nowackow', +'sp-contributions-newbies-title' => 'Wužywarske pśinoski nowych kontow', +'sp-contributions-blocklog' => 'Protokol blokěrowanjow', +'sp-contributions-deleted' => 'Wulašowane wužywarske pśinoski', +'sp-contributions-uploads' => 'nagraśa', +'sp-contributions-logs' => 'protokole', +'sp-contributions-talk' => 'diskusija', +'sp-contributions-userrights' => 'Zastojanje wužywarskich pšawow', +'sp-contributions-blocked-notice' => 'Toś ten wužywaŕ jo tuchylu blokěrowany. Nejnowšy zapisk blokěrowańskego protokola pódawa se dołojce ako referenca:', +'sp-contributions-blocked-notice-anon' => 'Toś ta IP-adresa jo tuchylu zablokěrowana. +Nejnowšy zapisk protokola blokěrowanjow pódawa se dołojce ako referenca:', +'sp-contributions-search' => 'Pśinoski pytaś', +'sp-contributions-username' => 'IP-adresa abo wužywarske mě:', +'sp-contributions-toponly' => 'Jano wuše wersije pokazaś', +'sp-contributions-submit' => 'Pytaś', # What links here 'whatlinkshere' => 'Wótkaze na toś ten bok', @@ -2210,7 +2258,6 @@ Glědaj do [[Special:IPBlockList|lisćiny aktiwnych blokěrowanjow]], aby blokě 'ipb-edit-dropdown' => 'Pśicyny blokěrowanja wobźěłaś', 'ipb-unblock-addr' => '$1 dopušćiś', 'ipb-unblock' => 'Wužywarske mě abo IP-adresu dopušćiś', -'ipb-blocklist-addr' => 'Eksistěrujuce blokěrowanja za $1', 'ipb-blocklist' => 'Wšykne aktualne blokěrowanja pokazaś', 'ipb-blocklist-contribs' => 'Pśinoski za $1', 'unblockip' => 'Wužywarja dopušćiś', @@ -2279,6 +2326,8 @@ $1 jo južo zablokěrowany. Coš nastajenja změniś?', 'sorbs_create_account_reason' => 'Twója IP-adresa jo w DNSBL {{GRAMMAR:genitiw|{{SITENAME}}}} ako wócynjony proxy zapisana. Njejo móžno, nowe wužywarske konta załožowaś.', 'cant-block-while-blocked' => 'Njesmějoš žednych drugich wužywarjow blokěrowaś, mjaztym až ty sy blokěrowany.', 'cant-see-hidden-user' => 'Wužywaŕ, kótaregož wopytujoš blokěrowaś, jo južo zablokěrowany a schowany. Dokulaž njamaš pšawo wužywarja schowaś, njamóžoš blokěrowanje wužywarja wiźeś abo wobźěłaś.', +'ipbblocked' => 'Njamóžoš drugich wužywarjow blokěrowaś abo wótblokěrowaś, dokulaž ty sam jo zablokěrowany', +'ipbnounblockself' => 'Njesmějoš se samogo wótblokěrowaś', # Developer tools 'lockdb' => 'Datowu banku zamknuś', @@ -2312,6 +2361,17 @@ Sy zagronity, až wótkaze wjedu tam, źož maju wjasć. '''WARNOWANJE!''' To móžo byś drastiska a njewocakowana změna za popularny bok; pšosym zawěsć, až konsekwency rozmijoš, nježli až pókšacujoš.", +'movepagetext-noredirectfixer' => "Z pomocu slědujucego formulara móžoš bok pśemjenjowaś, pśi comž se jogo wersije k nowemu mjenjoju pśesuwaju. +Stary titel wordujo dalejpósrědnjeński bok k nowemu titeloju. +Móžoš awtomatiski aktualizěrowaś dalejposrědkowanja, kótarež pokazuju na originalny titel. +Jolic njocoš, pśeglědaj za [[Special:DoubleRedirects|dwójnymi]] abo [[Special:BrokenRedirects|defektnymi daleposrědkowanjami]]. +Sy zagronity, až wótkaze wjedu tam, źož maju wjasć. + +Źiwaj na to, až se bok '''nje'''pśesuwa, jolic jo južo bok z nowym titelom, snaźkuli jo prozny abo dalejpósrědnjenje a njama stare wobźěłane wersije. To ma groniś, až móžoš bok zasej slědk pśemjenjowaś, jolic cyniš zmólku, a njemóžoš eksistěrujucy bok pśepisaś. + +'''WARNOWANJE!''' +To móžo byś drastiska a njewocakowana změna za popularny bok; +pšosym źiwaj na to, až rozumijoš konsekwency, nježli až pókšacujoš.", 'movepagetalktext' => "Pśisłušny diskusijny bok se sobu pśesunjo, '''ale nic gaž:''' * eksistěrujo južo diskusijny bok z toś tym mjenim, abo gaž * wótwólijoš toś tu funkciju. @@ -2366,6 +2426,7 @@ Bok „[[:$1]]“ južo eksistěrujo. Coš jen wulašowaś, aby mógał toś ten 'immobile-source-page' => 'Toś ten bok njedajo se pśesunuś.', 'immobile-target-page' => 'Njejo móžno na toś ten celowy bok pśesunuś.', 'imagenocrossnamespace' => 'Dataja njedajo se pśesunuś do mjenjowego ruma, kótarež njejo za dataje.', +'nonfile-cannot-move-to-file' => 'Njedataje njedaje se do datajowego mjenjowego ruma pśesunuś', 'imagetypemismatch' => 'Nowy datajowy sufiks swójomu typoju njewótpowědujo', 'imageinvalidfilename' => 'Mě celoweje dataje jo njepłaśiwe', 'fix-double-redirects' => 'Dalejpósrědnjenja, kótarež wótkazuju na originalny titel, aktualizěrowaś', @@ -2444,6 +2505,7 @@ Wšykne transwiki-importowe akcije protokolěruju se w [[Special:Log/import|log- 'importstart' => 'Importěrowanje bokow...', 'import-revision-count' => '$1 {{PLURAL:$1|wersija|wersiji|wersije}}', 'importnopages' => 'Boki za importěrowanje njeeksistěruju.', +'imported-log-entries' => '$1 {{PLURAL:$1|protokolowy zapisk importěrowany|protokolowej zapiska inmportěrowanej|protokolowe zapiski importěrowane|protokolowych zapiskow importěrowanych}}.', 'importfailed' => 'Zmólka pśi importěrowanju: $1', 'importunknownsource' => 'Njeznate źrědło importěrowanja.', 'importcantopen' => 'Dataja za importěrowanje njejo se dała wócyniś.', @@ -2537,6 +2599,8 @@ Wšykne transwiki-importowe akcije protokolěruju se w [[Special:Log/import|log- 'tooltip-rollback' => '"Roolback" anulěrujo změny slědnego wužywarja na toś tom boku z jadnym kliknjenim.', 'tooltip-undo' => 'Anulěrujo toś tu změnu a wócynijo wobźěłański formular w pśeglědowem modusu. W zespominanju dajo se pśicyna pódaś.', +'tooltip-preferences-save' => 'Nastajenja składowaś', +'tooltip-summary' => 'Zapódaj krotke zespominanje', # Stylesheets 'common.css' => '/** Na toś tom městnje wustatkujo se CSS na wšykne šaty. */', @@ -2647,14 +2711,17 @@ $1', 'imagemaxsize' => "Maksimalna wobrazowa wjelikosć:
    '' (za boki datajowego wopisanja)''", 'thumbsize' => 'Rozměra miniaturow:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|bok|boka|boki|bokow}}', -'file-info' => '(wjelikosć dataje: $1, MIME-Typ: $2)', -'file-info-size' => '($1 × $2 pikselow, wjelikosć dataje: $3, MIME-Typ: $4)', +'file-info' => 'wjelikosć dataje: $1, MIME-Typ: $2', +'file-info-size' => '$1 × $2 pikselow, wjelikosć dataje: $3, MIME-Typ: $4', 'file-nohires' => 'Wuše wótgranicowanje njeeksistěrujo.', -'svg-long-desc' => '(dataja SVG, nominalnje: $1 × $2 piksele, wjelikosć dataje: $3)', +'svg-long-desc' => 'dataja SVG, nominalnje: $1 × $2 piksele, wjelikosć dataje: $3', 'show-big-image' => 'Połne optiske wótgranicowanje.', 'show-big-image-thumb' => 'wjelikosć pśeglěda: $1 × $2 pikselow', 'file-info-gif-looped' => 'bźezkóńcna šlejfa', 'file-info-gif-frames' => '$1 {{PLURAL:$1|wobłuk|wobłuka|wobłuki|wobłukow}}', +'file-info-png-looped' => 'šlejfa', +'file-info-png-repeat' => '{{PLURAL:$1|$1 raz|dwójcy|$1 raze|$1 razow}} wótegrata', +'file-info-png-frames' => '$1 {{PLURAL:$1|wobłuk|wobłuka|wobłuki|wobłukow}}', # Special:NewFiles 'newimages' => 'Nowe dataje', @@ -2808,6 +2875,7 @@ Slědujuce wótkaze w tej samej smužce se za wuwześa naglědaju, w kótarychž 'exif-gpsareainformation' => 'Mě wobcerka GPS', 'exif-gpsdatestamp' => 'Datum GPS', 'exif-gpsdifferential' => 'Diferencialna korektura GPS', +'exif-objectname' => 'Krotki titel', # EXIF attributes 'exif-compression-1' => 'Njekompriměrowany', @@ -2967,24 +3035,24 @@ Slědujuce wótkaze w tej samej smužce se za wuwześa naglědaju, w kótarychž 'limitall' => 'wšykne', # E-mail address confirmation -'confirmemail' => 'E-mailowu adresu wobkšuśiś.', -'confirmemail_noemail' => 'W swójich [[Special:Preferences|nastajenjach]] njejsy płaśecu e-mailowu adresu zapódał.', -'confirmemail_text' => '{{SITENAME}} pomina, až wobkšuśijoš swóju e-mailowu adresu, nježlic až móžoš e-mailowe funkcije wužywaś. Tłocyš-lic na tłocatko, dostanjoš e-mailku, w kótarejž jo wótkaz z wobkšuśenskim gronidłom. Tłocenje na wótkaz wobkšuśijo, až twója e-mailowa adresa jo korektna.', -'confirmemail_pending' => 'Tebje jo južo jadno wobkšuśeńske gronidło se pśimailowało. Sy-lic swójo wužywarske konto akle gano wutwórił, ga pócakaj hyšći žedne minuty na e-mail, nježlic až pominaš nowe gronidło.', -'confirmemail_send' => 'Wobkšuśeńske gronidło pósłaś', -'confirmemail_sent' => 'Wobkšuśeńska e-mailka pósłana.', -'confirmemail_oncreate' => 'Na Twóju adresu jo se wótpósłało wobkšuśeńske gronidło. Toś ten kod njejo notny za pśizjawjenje, ale za aktiwěrowanje e-mailowych funkcijow we wikiju.', -'confirmemail_sendfailed' => '{{SITENAME}} njejo se mógła twóju wobkšuśensku e-mail pósłaś. Pšosym pśeglědaj swóju e-mailowu adresu na njepłaśiwe znamuška. +'confirmemail' => 'E-mailowu adresu wobkšuśiś.', +'confirmemail_noemail' => 'W swójich [[Special:Preferences|nastajenjach]] njejsy płaśecu e-mailowu adresu zapódał.', +'confirmemail_text' => '{{SITENAME}} pomina, až wobkšuśijoš swóju e-mailowu adresu, nježlic až móžoš e-mailowe funkcije wužywaś. Tłocyš-lic na tłocatko, dostanjoš e-mailku, w kótarejž jo wótkaz z wobkšuśenskim gronidłom. Tłocenje na wótkaz wobkšuśijo, až twója e-mailowa adresa jo korektna.', +'confirmemail_pending' => 'Tebje jo južo jadno wobkšuśeńske gronidło se pśimailowało. Sy-lic swójo wužywarske konto akle gano wutwórił, ga pócakaj hyšći žedne minuty na e-mail, nježlic až pominaš nowe gronidło.', +'confirmemail_send' => 'Wobkšuśeńske gronidło pósłaś', +'confirmemail_sent' => 'Wobkšuśeńska e-mailka pósłana.', +'confirmemail_oncreate' => 'Na Twóju adresu jo se wótpósłało wobkšuśeńske gronidło. Toś ten kod njejo notny za pśizjawjenje, ale za aktiwěrowanje e-mailowych funkcijow we wikiju.', +'confirmemail_sendfailed' => '{{SITENAME}} njejo se mógła twóju wobkšuśensku e-mail pósłaś. Pšosym pśeglědaj swóju e-mailowu adresu na njepłaśiwe znamuška. E-mailowy program jo wrośił: $1', -'confirmemail_invalid' => 'Njepłaśece wobkšuśeńske gronidło. Snaź jo kod mjaztym płaśiwosć zgubił.', -'confirmemail_needlogin' => 'Dejš $1 aby swóju e-mailowu adresu wobkšuśił.', -'confirmemail_success' => 'Twója e-mailowa adresa jo wobkšuśona +'confirmemail_invalid' => 'Njepłaśece wobkšuśeńske gronidło. Snaź jo kod mjaztym płaśiwosć zgubił.', +'confirmemail_needlogin' => 'Dejš $1 aby swóju e-mailowu adresu wobkšuśił.', +'confirmemail_success' => 'Twója e-mailowa adresa jo wobkšuśona Móžoš se něnto [[Special:UserLogin|pśizjawiś]] a se wikiju wijaseliś.', -'confirmemail_loggedin' => 'Twója e-mailowa adresa jo něnto wobkšuśona.', -'confirmemail_error' => 'Zmólka pśi wobkšuśenju e-mailoweje adresy.', -'confirmemail_subject' => '{{SITENAME}} - Wobkšuśenje e-mailoweje adrese', -'confirmemail_body' => 'Něchten, nejskerjej ty z adresy $1, jo na boku {{SITENAME}} wužywarske konto "$2" z toś teju e-mailoweju adresu zregistrěrował. +'confirmemail_loggedin' => 'Twója e-mailowa adresa jo něnto wobkšuśona.', +'confirmemail_error' => 'Zmólka pśi wobkšuśenju e-mailoweje adresy.', +'confirmemail_subject' => '{{SITENAME}} - Wobkšuśenje e-mailoweje adrese', +'confirmemail_body' => 'Něchten, nejskerjej ty z adresy $1, jo na boku {{SITENAME}} wužywarske konto "$2" z toś teju e-mailoweju adresu zregistrěrował. Aby wobkšuśił, až toś to konto napšawdu śi słuša a aby e-mailowe funkcije na boce {{SITENAME}} aktiwěrował, wócyń toś ten wótkaz w swójim browserje: @@ -2995,8 +3063,30 @@ Jolic až *njejsy* toś to konto zregistrěrował, slěduj toś tomu wótkazoju, $5 Toś ten wobkšuśeński kod płaśi do $4.', -'confirmemail_invalidated' => 'Emailowe wobkšuśenje pśetergnjone', -'invalidateemail' => 'Emailowe wobkšuśenje pśetergnuś', +'confirmemail_body_changed' => 'Něchten, nejskerjej ty z IP-adresy $1, jo e-mailowu adresu konta "$2" do toś teje adrese na {{GRAMMAR:lokatiw{{SITENAME}}}} změnił. + +Aby wobkšuśił, až toś to konto napšawdu śi słuša a aby e-mailowe funkcije na {{GRAMMAR:lokatiw{{SITENAME}}}} aktiwěrował, wócyń toś ten wótkaz w swójom wobglědowaku: + +$3 + +Jolic toś to konto śi *nje*słuša, slěduj toś tomu wótkazoju, aby wobkśuśenje e-mejloweje adrese anulěrował: + +$5 + +Toś ten wobkšuśeński kod płaśi až do $4.', +'confirmemail_body_set' => 'Něchten, nejskerjej ty z IP-adresy $1, jo e-mailowu adresu konta "$2" do toś teje adrese na {{GRAMMAR:lokatiw{{SITENAME}}}} změnił. + +Aby wobkšuśił, až toś to konto napšawdu śi słuša a aby e-mailowe funkcije na {{GRAMMAR:lokatiw{{SITENAME}}}} aktiwěrował, wócyń toś ten wótkaz w swójom wobglědowaku: + +$3 + +Jolic toś to konto śi *nje*słuša, slěduj toś tomu wótkazoju, aby wobkśuśenje e-mejloweje adrese anulěrował: + +$5 + +Toś ten wobkšuśeński kod płaśi až do $4.', +'confirmemail_invalidated' => 'Emailowe wobkšuśenje pśetergnjone', +'invalidateemail' => 'Emailowe wobkšuśenje pśetergnuś', # Scary transclusion 'scarytranscludedisabled' => '[Pśidawanje interwiki jo deaktiwěrowane]', @@ -3036,6 +3126,7 @@ Pšosym wobkšuśiś, až napšawdu coš ten bok zasej wutwóriś.", 'table_pager_first' => 'Prědny bok', 'table_pager_last' => 'Slědny bok', 'table_pager_limit' => 'Pokazaś {{PLURAL:$1|$1 objekt|$1 objekta|$1 objekty}} na bok', +'table_pager_limit_label' => 'Zapiski na bok:', 'table_pager_limit_submit' => 'Start', 'table_pager_empty' => 'Žedne wuslědki', @@ -3103,6 +3194,7 @@ Móžoš teke [[Special:Watchlist/edit|standardny wobźěłowański bok wužywa 'version-specialpages' => 'Specialne boki', 'version-parserhooks' => 'Parserowe kokule', 'version-variables' => 'Wariable', +'version-skins' => 'Suknje', 'version-other' => 'Druge', 'version-mediahandlers' => 'Pśeźěłaki medijow', 'version-hooks' => 'Kokule', @@ -3114,6 +3206,13 @@ Móžoš teke [[Special:Watchlist/edit|standardny wobźěłowański bok wužywa 'version-hook-subscribedby' => 'Aboněrowany wót', 'version-version' => '(Wersija $1)', 'version-license' => 'Licenca', +'version-poweredby-credits' => "Toś ten wiki spěchujo se wót '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'druge', +'version-license-info' => 'MediaWiki jo licha softwara: móžoš ju pód wuměnjenjami licence GNU General Public License, wózjawjeneje wót załožby Free Software Foundation, rozdźěliś a/abo změniś: pak pód wersiju 2 licence pak pód někakeju pózdźejšeju wersiju. + +MediaWiki rozdźěla se w naźeji, až buźo wužitny, ale BŹEZ GARANTIJE: samo bźez wopśimjoneje garantije PŚEDAWAJOBNOSĆI abo PŚIGÓDNOSĆI ZA WĚSTY ZAMĚR. Glědaj GNU general Public License za dalšne drobnostki. + +Ty by dejał [{{SERVER}}{{SCRIPTPATH}}/COPYING kopiju licence GNU General Public License] gromaźe z toś tym programom dostanu měś: jolic nic, napiš do załožby Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA abo [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html pśecytaj ju online].', 'version-software' => 'Instalěrowana software', 'version-software-product' => 'Produkt', 'version-software-version' => 'Wersija', @@ -3183,6 +3282,15 @@ Zapódaj datajowe mě bźez prefiksa "{{ns:file}}:".', 'tags-edit' => 'wobźěłaś', 'tags-hitcount' => '$1 {{PLURAL:$1|změna|změnje|změny|změnow}}', +# Special:ComparePages +'comparepages' => 'Boki pśirownaś', +'compare-selector' => 'Wersije boka pśirownaś', +'compare-page1' => 'Bok 1', +'compare-page2' => 'Bok 2', +'compare-rev1' => 'Wersija 1', +'compare-rev2' => 'Wersija 2', +'compare-submit' => 'Pśirownaś', + # Database error messages 'dberr-header' => 'Toś ten wiki ma problem', 'dberr-problems' => 'Wódaj! Toś to sedło ma techniske śěžkosći.', @@ -3199,8 +3307,13 @@ Zapódaj datajowe mě bźez prefiksa "{{ns:file}}:".', 'htmlform-float-invalid' => 'Gódnota, kótaruž sy pódał, njejo licba.', 'htmlform-int-toolow' => 'Gódnota, kótaruž sy pódał, jo mjeńša ako minimum $1', 'htmlform-int-toohigh' => 'Gódnota, kótaruž sy pódał, jo wětša ako maksimum $1', +'htmlform-required' => 'Toś ta gódnota jo trěbna', 'htmlform-submit' => 'Wótpósłaś', 'htmlform-reset' => 'Změny anulěrowaś', 'htmlform-selectorother-other' => 'Druge', +# SQLite database support +'sqlite-has-fts' => 'Wersija $1 z pódpěru za połnotekstowe pytanje', +'sqlite-no-fts' => 'Wersija $1 bźez pódpěry za połnotekstowe pytanje', + ); diff --git a/languages/messages/MessagesDz.php b/languages/messages/MessagesDz.php index a68c2d42..662f85a3 100644 --- a/languages/messages/MessagesDz.php +++ b/languages/messages/MessagesDz.php @@ -171,7 +171,7 @@ $messages = array( # Login and logout pages 'yourname' => 'ལག་ལེན་པའི་མིང་:', 'yourpassword' => 'ཆོག་ཡིག:', -'remembermypassword' => 'གློག་རིག་དེ་གུར་ ངེ་གི་ནང་བསྐྱོད་སེམས་ཁར་བཞག།', +'remembermypassword' => 'གློག་རིག་དེ་གུར་ ངེ་གི་ནང་བསྐྱོད་སེམས་ཁར་བཞག (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'ནང་བསྐྱོད།', 'nav-login-createaccount' => 'ནང་བསྐྱོད་འབད་ / རྩིས་ཐོ་གསརཔ་བཟོ།', 'loginprompt' => '{{SITENAME}} ནང་ལུ་ ནང་བསྐྱོད་འབད་ནིའི་དོན་ལུ་ ཁྱོད་ཀྱིས་ ཀུ་ཀིསི་འདི་ལྕོགས་ཅན་བཟོ་དགོ།', @@ -266,8 +266,6 @@ $messages = array( 'copyrightwarning' => "{{SITENAME}} ལུ་ ཕུལ་མི་ཞལ་འདེབས་ཚུ་ $2 གི་འོག་ལུ་ གསར་བཏོན་འབད་ནིའི་ཆ་འཇོག་གྲུབ་ཡོདཔ་(ཁ་གསལ་གྱི་དོན་ལས་ $1 ལུ་བལྟ་)། གལ་སྲིད་ ཁྱོད་རའི་འབྲི་ལཱ་འདི་ ཞུན་དག་དང་ལོག་བཀྲམ་མ་འབད་ནི་ཨིན་པ་ཅིན་ ནཱ་ལུ་མ་ཕུལ།
    དེ་མ་ཚད་ཁྱོད་ཀྱིས་ ང་བཅས་ལུ་ དེ་ཁྱོད་རང་གིས་བྲིས་འབྲིཝ་དང་ མི་མང་ཌོ་མཱེན་ ཡང་ན་ རྒྱུ་ཁུངས་སྟོང་མར་ནང་ལས་འདྲ་བཤུས་བརྐྱབས་རྐྱབ་ཨིནམ་སྦེ་ བཤདཔ་ཨིན་པས། '''གནང་བ་མེད་པར་ འདྲ་བཤུས་དབང་ཆ་ཅན་གྱི་ལཱ་མ་ཕུལ་!'''", -'longpagewarning' => "'''ཉེན་བརྡ་: ཤོག་ལེབ་འདི་རིང་ཚད་ ཀི་ལོ་བའིཊིསི་ $1 ཡོདཔ་དང་ བརྡ་འཚོལ་ལ་ལོ་ཅིག་ནང་ ཀི་ལོ་བའིཊི་ ༣༢ ལས་ལྷག་སྟེ་ཡོད་པའི་ཤོག་ལེབ་ ཞུན་དག་འབད་ནི་ལུ་དཀའ་ངལ་འབྱུང་དོ་ཡོདཔ་ཨིན། -ཤོག་ལེབ་འདི་ བགོ་བཤའ་རྐྱབ་སྟེ་ཆུང་ཀུ་བཟོ་ནི་ལུ་ཆ་འཇོག་འབད་གནང་།'''", 'templatesused' => 'ཤོག་ལེབ་འདི་གུ་ལག་ལེན་འཐབ་ཡོད་པའི་ཊེམ་པེལེཊི:', 'templatesusedpreview' => 'སྔོན་ལྟ་འདི་ནང་ལག་ལེན་འཐབ་ཡོད་པའི་ {{PLURAL:$1|Template|Templates}} :', 'template-protected' => '(ཉེན་སྐྱོབ་འབད་ཡོདཔ།)', @@ -468,7 +466,6 @@ $messages = array( # Watchlist 'watchlist' => 'ངེ་གི་བལྟ་ཞིབ་ཐོ་ཡིག།', 'mywatchlist' => 'ངེ་གི་བལྟ་ཞིབ་ཐོ་ཡིག།', -'watchlistfor' => "('''$1''' གི་དོན་ལུ་)", 'addedwatch' => 'བལྟ་ཞིབ་ཐོ་ཡིག་ལུ་ཁ་སྐོང་རྐྱབ་ཅི།', 'addedwatchtext' => "ཤོག་ལེབ་ \"[[:\$1]]\" འདི་ ཁྱོད་རའི་ [[Special:Watchlist|watchlist]] ལུ་ ཁ་སྐོང་བརྐྱབས་ནུག།\\n ཤོག་ལེབ་དེ་ལུ་མ་འོངས་བསྒྱུར་བཅོས་དང་ དེ་གི་འབྲེལ་ཡོད་བློ་ཤོག་འདི་ དེ་ཁར་ཐོ་བཀོད་འབད་ནི་དང་ འཇམ་ཏོང་ཏོ་སྦེ་གདམ་ཁ་བརྐྱབ་ཚུགས་ནི་གི་དོན་ལུ་ ཤོག་ལེབ་འདི་ [[Special:RecentChanges|list of recent changes]] ནང་ལུ་ '''མངོན་གསལ་''' སྦེ་འབྱུང་འོང་།", @@ -658,9 +655,9 @@ $messages = array( 'nextdiff' => 'ཤུལ་མམ་གྱི་ཁྱད་པར་ →', # Media information -'file-info-size' => '($1 × $2 པིག་སེལ་ ཡིག་སྣོད་ཀྱི་ཚད་: $3 མའིམ་དབྱེ་བ་: $4)', +'file-info-size' => '$1 × $2 པིག་སེལ་ ཡིག་སྣོད་ཀྱི་ཚད་: $3 མའིམ་དབྱེ་བ་: $4', 'file-nohires' => 'ཧུམ་ཆ་ལེགས་ཤོམ་མིན་འདུག།', -'svg-long-desc' => '(ཨེསི་བི་ཇི་ཡིག་སྣོད་ $1 × $2 པིག་སེལསི་ཆུང་སུ་ཅིག་ ཡིག་སྣོད་ཚད་: $3)', +'svg-long-desc' => 'ཨེསི་བི་ཇི་ཡིག་སྣོད་ $1 × $2 པིག་སེལསི་ཆུང་སུ་ཅིག་ ཡིག་སྣོད་ཚད་: $3', 'show-big-image' => 'ཧུམ་ཆ་གང་།', 'show-big-image-thumb' => 'སྔོན་ལྟའི་ཚད་: $1 × $2 པིག་སེལསི་', diff --git a/languages/messages/MessagesEe.php b/languages/messages/MessagesEe.php index f1c4aa2a..0a879a9c 100644 --- a/languages/messages/MessagesEe.php +++ b/languages/messages/MessagesEe.php @@ -96,7 +96,6 @@ $messages = array( # Vector skin 'vector-action-delete' => 'Tutui', 'vector-action-move' => 'Ɖɔli eƒe nɔƒe', -'vector-namespace-main' => 'Axa', 'vector-view-create' => 'Dze egɔme', 'vector-view-edit' => 'Trɔ asi le eŋu', 'vector-view-history' => 'Kpɔ xoxoawo', @@ -189,6 +188,7 @@ $messages = array( 'viewsourcefor' => '$1 tɔwo', # Login and logout pages +'remembermypassword' => 'Ɖo ŋku nyeƒe dzesi ŋkɔ dzi le mɔ sia dzi (vaseɖe {{PLURAL:$1|ŋkeke|ŋkeke}} $1 megbe)', 'login' => 'Ge ɖe eme', 'nav-login-createaccount' => 'Geɖe me / Ŋlɔ ŋkɔ', 'userlogin' => 'Ge ɖe eme / ŋlɔ ŋkɔ daɖi', @@ -419,7 +419,6 @@ Zã [[Special:Search|nuwo didi le wiki sia dzi]] kpɔ na axa yeyeawo.', 'listgrouprights-group' => 'Hame', # Watchlist -'watchlistfor' => "(na '''$1''')", 'watch' => 'Le ŋku ɖe eŋu', 'watchthispage' => 'Le ŋku ɖe axa sia ŋu', 'wlnote' => "Afisia wofia {{PLURAL:$1|tɔtrɔ '''1''' mamlea|tɔtrɔ '''$1''' mamleawo}} le {{PLURAL:$2|gaƒoƒo mamlea si|gaƒoƒo '''$2''' mamleawo siwo}} vayi la me.", diff --git a/languages/messages/MessagesEl.php b/languages/messages/MessagesEl.php index 50c97012..da4fece4 100644 --- a/languages/messages/MessagesEl.php +++ b/languages/messages/MessagesEl.php @@ -8,9 +8,11 @@ * @file * * @author Assassingr + * @author Azimout * @author Badseed * @author Consta * @author Crazymadlover + * @author Dada * @author Dead3y3 * @author Demmy * @author Evropi @@ -132,10 +134,10 @@ $specialPageAliases = array( 'Emailuser' => array( 'EmailΧρήστη' ), 'Confirmemail' => array( 'ΕπιβεβαίωσηEmail' ), 'Whatlinkshere' => array( 'ΤιΣυνδέειΕδώ' ), - 'Recentchangeslinked' => array( 'ΠρόσφατεςΑλλαγέςΣυνδεδεμένες', 'ΣχετικέςΑλλαγές' ), + 'Recentchangeslinked' => array( 'ΣυνδεδεμένεςΠρόσφατεςΑλλαγές', 'ΣχετικέςΑλλαγές' ), 'Movepage' => array( 'ΜετακίνησηΣελίδας' ), 'Blockme' => array( 'ΦραγήΕμένα' ), - 'Booksources' => array( 'ΒιβλίωνΠηγές' ), + 'Booksources' => array( 'ΠηγέςΒιβλίων' ), 'Categories' => array( 'Κατηγορίες' ), 'Export' => array( 'Εξαγωγή' ), 'Version' => array( 'Έκδοση' ), @@ -174,7 +176,7 @@ $specialPageAliases = array( ); $fallback8bitEncoding = 'iso-8859-7'; -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $linkTrail = '/^([a-zαβγδεζηθικλμνξοπρστυφχψωςΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩάέήίόύώϊϋΐΰΆΈΉΊΌΎΏΪΫ]+)(.*)$/sDu'; @@ -272,7 +274,7 @@ $magicWords = array( 'img_framed' => array( '1', 'με-πλαίσιο', 'framed', 'enframed', 'frame' ), 'img_frameless' => array( '1', 'χωρίς-πλαίσιο', 'frameless' ), 'img_page' => array( '1', 'σελίδα=$1', 'σελίδα $1', 'page=$1', 'page $1' ), - 'img_upright' => array( '1', 'κατακόρυφα', 'κατακόρυφα =$1', 'κατακόρυφα $1', 'upright', 'upright=$1', 'upright $1' ), + 'img_upright' => array( '1', 'κατακόρυφα', 'κατακόρυφα=$1', 'κατακόρυφα $1', 'upright', 'upright=$1', 'upright $1' ), 'img_border' => array( '1', 'πλαίσιο', 'border' ), 'img_baseline' => array( '1', 'γραμμήβάσης', 'baseline' ), 'img_sub' => array( '1', 'δείκτης', 'sub' ), @@ -360,8 +362,7 @@ $messages = array( 'tog-editsection' => 'Ενεργοποίηση επεξεργασίας τμημάτων μέσω των συνδέσμων [επεξεργασία]', 'tog-editsectiononrightclick' => 'Ενεργοποίηση επεξεργασίας τμήματος με δεξί κλικ στους τίτλους των τμημάτων (JavaScript)', 'tog-showtoc' => 'Εμφάνιση πίνακα περιεχομένων (για σελίδες με περισσότερες από τρεις κεφαλίδες)', -'tog-rememberpassword' => 'Διατήρηση του κωδικού πρόσβασης σε αυτό τον υπολογιστή', -'tog-editwidth' => 'Επέκταση του πλαίσιου επεξεργασίας στο μέγιστο μέγεθος', +'tog-rememberpassword' => 'Διατήρηση της σύνδεσης μου σε αυτόν τον browser (για ένα μέγιστο $1 {{PLURAL:$1|ημέρας|ημερών}})', 'tog-watchcreations' => 'Πρόσθεσε τις σελίδες που δημιουργώ στη λίστα παρακολούθησής μου', 'tog-watchdefault' => 'Προσθήκη των σελίδων που επεξεργάζεστε στη λίστα παρακολούθησης.', 'tog-watchmoves' => 'Πρόσθεσε τις σελίδες που μετακινώ στη λίστα παρακολούθησής μου', @@ -502,31 +503,21 @@ $messages = array( 'faqpage' => 'Project:Συχνές ερωτήσεις (FAQ)', # Vector skin -'vector-action-addsection' => 'Προσθήκη θέματος', -'vector-action-delete' => 'Διαγραφή', -'vector-action-move' => 'Μετακίνηση', -'vector-action-protect' => 'Προστασία', -'vector-action-undelete' => 'Επαναφορά', -'vector-action-unprotect' => 'Άρση προστασίας', -'vector-namespace-category' => 'Κατηγορία', -'vector-namespace-help' => 'Σελίδα βοήθειας', -'vector-namespace-image' => 'Αρχείο', -'vector-namespace-main' => 'Σελίδα', -'vector-namespace-media' => 'Σελίδα μέσου', -'vector-namespace-mediawiki' => 'Μήνυμα', -'vector-namespace-project' => 'Σελίδα εγχειρήματος', -'vector-namespace-special' => 'Ειδική σελίδα', -'vector-namespace-talk' => 'Συζήτηση', -'vector-namespace-template' => 'Πρότυπο', -'vector-namespace-user' => 'Σελίδα χρήστη', -'vector-view-create' => 'Δημιουργία', -'vector-view-edit' => 'Επεξεργασία', -'vector-view-history' => 'Προβολή ιστορικού', -'vector-view-view' => 'Ανάγνωση', -'vector-view-viewsource' => 'Εμφάνιση κώδικα', -'actions' => 'Ενέργειες', -'namespaces' => 'Περιοχές ονομάτων', -'variants' => 'Παραλλαγές', +'vector-action-addsection' => 'Προσθήκη θέματος', +'vector-action-delete' => 'Διαγραφή', +'vector-action-move' => 'Μετακίνηση', +'vector-action-protect' => 'Προστασία', +'vector-action-undelete' => 'Επαναφορά', +'vector-action-unprotect' => 'Άρση προστασίας', +'vector-simplesearch-preference' => 'Ενεργοποίηση ενισχυμένων προτάσεων αναζήτησης', +'vector-view-create' => 'Δημιουργία', +'vector-view-edit' => 'Επεξεργασία', +'vector-view-history' => 'Προβολή ιστορικού', +'vector-view-view' => 'Ανάγνωση', +'vector-view-viewsource' => 'Εμφάνιση κώδικα', +'actions' => 'Ενέργειες', +'namespaces' => 'Περιοχές ονομάτων', +'variants' => 'Παραλλαγές', 'errorpagetitle' => 'Σφάλμα', 'returnto' => 'Επιστροφή στη σελίδα $1.', @@ -587,6 +578,9 @@ $messages = array( Παρακαλούμε περιμένετε λίγο πριν ξαναπροσπαθήσετε να μπείτε σε αυτή τη σελίδα. $1', +'pool-timeout' => 'Διάλειμμα αναμονής για το κλείδωμα', +'pool-queuefull' => 'Η δεξαμενή δεδομένων είναι πλήρης', +'pool-errorunknown' => 'Άγνωστο σφάλμα', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Σχετικά με τον ιστότοπο {{SITENAME}}', @@ -747,7 +741,8 @@ $2', 'yourname' => 'Όνομα χρήστη:', 'yourpassword' => 'Κωδικός:', 'yourpasswordagain' => 'Πληκτρολογήστε ξανά τον κωδικό', -'remembermypassword' => 'Διατήρηση του κωδικού πρόσβασης σε αυτόν τον υπολογιστή', +'remembermypassword' => 'Διατήρηση του κωδικού πρόσβασης σε αυτόν τον υπολογιστή (για μέγιστο $1 {{PLURAL:$1|ημέρα|ημέρες}})', +'securelogin-stick-https' => 'Μείνετε συνδεδεμένοι με HTTPS μετά την είσοδο', 'yourdomainname' => 'Το domain σας:', 'externaldberror' => 'Είτε συνέβη κάποιο σφάλμα εξωτερικής πιστοποίησης της βάσης δεδομένων είτε δεν σας έχει επιτραπεί να ενημερώσετε τον εξωτερικό σας λογαριασμό.', 'login' => 'Είσοδος', @@ -764,6 +759,7 @@ $2', 'gotaccount' => "Έχετε ήδη έναν λογαριασμό; '''$1'''.", 'gotaccountlink' => 'Είσοδος', 'createaccountmail' => 'Με ηλεκτρονικό ταχυδρομείο', +'createaccountreason' => 'Αιτία:', 'badretype' => 'Οι κωδικοί που έχετε δηλώσει δεν συμφωνούν μεταξύ τους.', 'userexists' => 'Το όνομα χρήστη που εισαγάγατε ήδη χρησιμοποιείται. Παρακαλούμε, διαλέξτε διαφορετικό.', 'loginerror' => 'Σφάλμα σύνδεσης', @@ -783,6 +779,7 @@ $2', 'wrongpasswordempty' => 'Ο κωδικός πρόσβασης που εισάχθηκε ήταν κενός. Παρακαλούμε προσπαθήστε ξανά.', 'passwordtooshort' => 'Οι κωδικοί πρέπει να περιέχουν τουλάχιστον {{PLURAL:$1|1 χαρακτήρα|$1 χαρακτήρες}}.', 'password-name-match' => 'Ο κωδικός σου θα πρέπει να είναι διαφορετικός από το όνομα χρήστη σου.', +'password-login-forbidden' => 'Η χρήση αυτού του ονόματος χρήστη και συνθηματικού έχουν απαγορευτεί.', 'mailmypassword' => 'Αποστολή νέου κωδικού', 'passwordremindertitle' => 'Καινούργιος προσωρινός κωδικός για το {{SITENAME}}', 'passwordremindertext' => 'Κάποιος (πιθανώς εσείς, από την διεύθυνση IP $1) ζήτησε να σας στείλουμε ένα νέο κωδικό πρόσβασης για τον ιστότοπο {{SITENAME}} ($4). Ο κωδικός πρόσβασης για το χρήστη "$2" είναι τώρα "$3". Αν το κάνατε εσείς, θα πρέπει να συνδεθείτε και να αλλάξετε τον κωδικό πρόσβασης σας τώρα. Ο προσωρινός σας κωδικός πρόσβασης θα λήξει σε {{PLURAL:$5|μια ημέρα|$5 ημέρες}}. @@ -818,6 +815,9 @@ $2', 'loginlanguagelabel' => 'Γλώσσα: $1', 'suspicious-userlogout' => 'Το αίτημα αποσύνδεσής σας απερρίφθη επειδή φαίνεται ότι στάλθηκε από ένα λανθασμένο φυλλομετρητή (browser) ή διακομιστή προσωρινής αποθήκευσης.', +# E-mail sending +'php-mail-error-unknown' => 'Άγνωστο σφάλμα στη συνάρτηση της PHP mail()', + # Password reset dialog 'resetpass' => 'Αλλαγή κωδικού πρόσβασης', 'resetpass_announce' => 'Συνδεθήκατε με ένα προσωρινό κωδικό, σταλμένο με e-mail. Για να ολοκληρώσετε την σύνδεση, πρέπει να στείλετε ένα νέο κωδικό εδώ:', @@ -869,9 +869,11 @@ $2', 'showlivepreview' => 'Άμεση προεπισκόπιση', 'showdiff' => 'Δείτε τις αλλαγές', 'anoneditwarning' => "'''Προσοχή:''' Δεν έχετε συνδεθεί. Η διεύθυνση IP σας θα καταγραφεί στο ιστορικό επεξεργασίας αυτής της σελίδας.", +'anonpreviewwarning' => "''Δεν έχετε συνδεθεί. Η αποθήκευση θα καταγράψει την διεύθυνσή IP σας στο ιστορικό επεξεργασίας αυτής της σελίδας.''", 'missingsummary' => "'''Υπενθύμιση:''' Δεν έχετε συμπληρώσει τη σύνοψη επεξεργασίας. Αν κάνετε κλικ στο κουμπί Αποθήκευση πάλι, η επεξεργασία σας θα αποθηκευτεί χωρίς σύνοψη.", 'missingcommenttext' => 'Παρακαλώ εισάγετε ένα σχόλιο παρακάτω.', -'missingcommentheader' => "'''Υπενθύμιση:''' Δεν έχετε καθορίσει ένα θέμα/επικεφαλίδα για αυτό το σχόλιο. Αν κάνετε κλικ στο κουμπί Αποθήκευση πάλι, η επεξεργασία σας θα αποθηκευτεί χωρίς θέμα ή επικεφαλίδα.", +'missingcommentheader' => "'''Υπενθύμιση:''' Δεν έχετε γράψει ένα θέμα/επικεφαλίδα για αυτό το σχόλιο. +Αν κάνετε πάλι κλικ στο κουμπί \"{{int:savearticle}}\", η επεξεργασία σας θα αποθηκευτεί χωρίς θέμα ή επικεφαλίδα.", 'summary-preview' => 'Προεπισκόπηση σύνοψης:', 'subject-preview' => 'Προεπισκόπηση θέματος/επικεφαλίδας:', 'blockedtitle' => 'Ο χρήστης έχει υποστεί φραγή.', @@ -935,7 +937,11 @@ $2', 'userjsyoucanpreview' => "'''Χρήσιμη συμβουλή:''' Χρησιμοποιήστε το κουμπί \"{{int:showpreview}}\" για να ελέγξτε τη νέα σας JS πριν την αποθηκεύσετε.", 'usercsspreview' => "'''Σας υπενθυμίζουμε ότι κάνετε απλώς έλεγχο/προεπισκόπηση του CSS του χρήστη -δεν το έχετε ακόμα αποθηκεύσει! '''", 'userjspreview' => "'''Σας υπενθυμίζουμε ότι κάνετε απλώς έλεγχο/προεπισκόπηση του JavaScript του χρήστη -δεν το έχετε ακόμα αποθηκεύσει!'''", -'userinvalidcssjstitle' => "'''Προσοχή:''' Δεν υπάρχει skin με τίτλο \"\$1\". Θυμηθείτε οι προσαρμοσμένες σελίδες .css και .js χρησιμοποιούν έναν τίτλο με μικρά γράμματα, π.χ. {{ns:user}}:Foo/monobook.css σε αντίθεση με το {{ns:user}}:Foo/Monobook.css.", +'sitecsspreview' => "''' Θυμηθείτε ότι κάνετε μόνο προεπισκόπηση σ' αυτή τη CSS.'' ' +'' ' Δεν το έχετε σώσει ακόμη!'' '", +'sitejspreview' => "''' Θυμηθείτε ότι κάνετε μόνο προεπισκόπηση σ'αυτόν τον κώδικα JavaScript.'' ' +'' ' Δεν τον έχετε αποθηκεύσει ακόμη!'' '", +'userinvalidcssjstitle' => "'''Προσοχή:''' Δεν υπάρχει skin με τίτλο \"\$1\". Θυμηθείτε οι προσαρμοσμένες σελίδες .css και .js χρησιμοποιούν έναν τίτλο με μικρά γράμματα, π.χ. {{ns:user}}:Foo/vector.css σε αντίθεση με το {{ns:user}}:Foo/Vector.css.", 'updated' => '(Ενημερώθηκε)', 'note' => "'''Προσοχή: '''", 'previewnote' => "'''Σας υπενθυμίζουμε ότι βλέπετε μόνον την προεπισκόπηση -δεν έχετε ακόμα αποθηκεύσει τις αλλαγές σας!'''", @@ -972,9 +978,6 @@ $2', 'copyrightwarning2' => "Σημειώστε ότι όλες οι συνεισφορές στον ιστότοπο {{SITENAME}} μπορούν να υποστούν επεξεργασία, να αλλαχθούν, ή να αφαιρεθούν από άλλους συνεισφέροντες. Αν δεν θέλετε τα γραπτά σας να υποστούν επεξεργασία κατά βούληση, τότε μην τα τοποθετήσετε σε αυτό το χώρο.
    Επίσης μας υπόσχεστε πως ό,τι γράφετε είναι δικό σας, ή αντιγραμμένο από μια πηγή που είναι κοινό κτήμα, ή μια παρόμοια ελεύθερη πηγή (δείτε $1 για λεπτομέρειες). '''ΠΑΡΑΚΑΛΟΥΜΕ ΝΑ ΜΗΝ ΤΟΠΟΘΕΤΕΙΤΕ ΠΝΕΥΜΑΤΙΚΑ ΚΑΤΟΧΥΡΩΜΕΝΟ ΕΡΓΟ ΧΩΡΙΣ ΑΔΕΙΑ!'''", -'longpagewarning' => "'''ΠΡΟΕΙΔΟΠΟΙΗΣΗ''': Η σελίδα έχει μέγεθος $1 kb. -Είναι πιθανόν μερικοί browser να παρουσιάσουν προβλήματα στην επεξεργασία σελίδων της τάξης των 32 kb και άνω. -Μπορείτε να αποφύγετε το πρόβλημα κόβοντας τη σελίδα σε μικρότερα τμήματα.", 'longpageerror' => "'''ΣΦΑΛΜΑ: Το κείμενο που αποστείλατε έχει μήκος $1 κιλομπάιτ, το οποίο είναι μεγαλύτερο από το μέγιστο των $2 κιλομπάιτ. Δεν μπορεί να αποθηκευτεί.'''", 'readonlywarning' => "'''ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Η βάση δεδομένων έχει κλειδωθεί για συντήρηση, έτσι δεν θα μπορέσετε να αποθηκεύσετε αυτά που έχετε επεξεργαστεί. Μπορείτε αν θέλετε να αποθηκεύσετε το κείμενο σε αρχείο κειμένου (με αποκοπή-και-επικόλληση) για να το χρησιμοποιήσετε αργότερα.''' @@ -1151,6 +1154,8 @@ $2', 'logdelete-failure' => "'''Η ορατότητα του καταλόγου δεν μπορούσε να ρυθμιστεί:''' $1", 'revdel-restore' => 'Αλλαγή ορατότητας', +'revdel-restore-deleted' => 'διαγραμμένες αναθεωρήσεις', +'revdel-restore-visible' => 'ορατές αναθεωρήσεις', 'pagehist' => 'Ιστορικό σελίδας', 'deletedhist' => 'Διαγραμμένο ιστορικό', 'revdelete-content' => 'περιεχόμενο', @@ -1218,11 +1223,15 @@ $1", # Diffs 'history-title' => 'Ιστορικό εκδόσεων για τη σελίδα "$1"', 'difference' => '(Διαφορές μεταξύ αναθεωρήσεων)', +'difference-multipage' => '(Διαφορές μεταξύ των σελίδων)', 'lineno' => 'Γραμμή $1:', 'compareselectedversions' => 'Σύγκριση των εκδόσεων που έχουν επιλεγεί', 'showhideselectedversions' => 'Εμφάνιση/απόκρυψη των επιλεγμένων εκδοχών', 'editundo' => 'αναίρεση', -'diff-multi' => '({{PLURAL:$1|Μία ενδιάμεση αναθεώρηση|$1 ενδιάμεσες αναθεωρήσεις}} δεν εμφανίζονται.)', +'diff-multi' => '({{PLURAL:$1|Μία ενδιάμεση αναθεώρηση|$1 ενδιάμεσες αναθεωρήσεις}} από {{PLURAL:$2|ένα χρήστη|$2 χρήστες}} δεν {{PLURAL:$1|εμφανίζεται|εμφανίζονται}})', +'diff-multi-manyusers' => '({{Πληθυντικός: $ 1 | Μία ενδιάμεση αναθεώρηση | $ 1 ενδιάμεσες αναθεωρήσεις}} από περισσότερο από $ 2 {{πληθυντικό: $ 2 | χρήστη | χρήστες}} δεν εμφανίζονται) + +({{Πληθυντικός: $ 1 | Μία ενδιάμεση αναθεώρηση | $ 1 ενδιάμεσες αναθεωρήσεις}} από περισσότερο από $ 2 {{πληθυντικό: $ 2 | χρήστη | χρηστών}} δεν εμφανίζονται)', # Search results 'searchresults' => 'Αποτελέσματα αναζήτησης', @@ -1257,6 +1266,7 @@ $1", 'searchprofile-everything-tooltip' => 'Αναζήτηση σε όλο το περιεχόμενο (συμπεριλαμβανομένων των σελίδων συζήτησης)', 'searchprofile-advanced-tooltip' => 'Αναζήτηση σε συγκεκριμένες περιοχές', 'search-result-size' => '$1 ({{PLURAL:$2|1 λέξη|$2 λέξεις}})', +'search-result-category-size' => '{{PLURAL:$1|1 μέλος|$1 μέλη}} ({{PLURAL:$2|1 υποκατηγορία|$2 υποκατηγορίες}}, {{PLURAL:$3|1 αρχείο|$3 αρχεία}})', 'search-result-score' => 'Σχετικότητα: $1%', 'search-redirect' => '(ανακατεύθυνση $1)', 'search-section' => '(ενότητα $1)', @@ -1331,6 +1341,7 @@ $1", 'contextlines' => 'Σειρές που θα εμφανίζονται ανά αποτέλεσμα', 'contextchars' => 'Αριθμός χαρακτήρων στο εμφανιζόμενο κείμενο', 'stub-threshold' => 'Κατώφλι για μορφοποίηση συνδέσμου επεκτάσιμου:', +'stub-threshold-disabled' => 'Απενεργοποιημένο', 'recentchangesdays' => 'Ημέρες προς εμφάνιση στις πρόσφατες αλλαγές:', 'recentchangesdays-max' => '($1 {{PLURAL:$1|ημέρα|ημέρες}} το μέγιστο)', 'recentchangescount' => 'Αριθμός επεξεργασιών που να εμφανίζονται για προεπιλογή.', @@ -1364,6 +1375,7 @@ $1", 'prefs-files' => 'Αρχεία', 'prefs-custom-css' => 'Προκαθορισμένη CSS', 'prefs-custom-js' => 'Προκαθορισμένη JS', +'prefs-common-css-js' => 'Κοινά CSS/JS για όλα τα skins:', 'prefs-reset-intro' => 'Μπορείτε να χρησιμοποιήσετε αυτήν την σελίδα για να επαναρρυθμίσετε τις προτιμήσεις σας στις προεπιλογές του ιστότοπου. Αυτό δεν μπορεί να αναστρεφθεί.', 'prefs-emailconfirm-label' => 'Επιβεβαίωση e-mail:', 'prefs-textboxsize' => 'Μέγεθος πλαίσιου επεξεργασίας', @@ -1400,9 +1412,15 @@ $1", 'prefs-advancedrendering' => 'Προηγμένες επιλογές', 'prefs-advancedsearchoptions' => 'Προηγμένες επιλογές', 'prefs-advancedwatchlist' => 'Προηγμένες επιλογές', -'prefs-display' => 'Εμφάνιση επιλογών', +'prefs-displayrc' => 'Εμφάνιση επιλογών', +'prefs-displaysearchoptions' => 'Επιλογές εμφάνισης', +'prefs-displaywatchlist' => 'Επιλογές εμφάνισης', 'prefs-diffs' => 'Διαφορές', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Η διεύθυνση ηλεκτρονικού ταχυδρομείου φαίνεται έγκυρη', +'email-address-validity-invalid' => 'Εισάγετε μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου', + # User rights 'userrights' => 'Διαχείριση δικαιωμάτων χρηστών', 'userrights-lookup-user' => 'Διαχείριση ομάδων χρηστών', @@ -1486,6 +1504,7 @@ $1", 'right-hideuser' => 'Φραγή ενός ονόματος χρήστη, αποκρύπτοντάς το από το κοινό', 'right-ipblock-exempt' => 'Παράκαμψη φραγών σε διευθύνσεις IP, αυτόματων φραγών και φραγών σε IP range', 'right-proxyunbannable' => 'Παράκαμψη αυτόματων φραγών σε proxies', +'right-unblockself' => 'Αναίρεση φραγής του εαυτού τους', 'right-protect' => 'Αλλαγή των επιπέδων προστασίας και επεξεργασία προστατευμένων σελίδων', 'right-editprotected' => 'Επεξεργασία προστατευμένων σελίδων (χωρίς διαδοχική προστασία)', 'right-editinterface' => 'Επεξεργασία της διασύνδεσης χρήστη', @@ -1508,7 +1527,6 @@ $1", 'right-siteadmin' => 'Κλείδωμα και ξεκλείδωμα της βάσης δεδομένων', 'right-reset-passwords' => 'Αρχικοποίηση κωδικών πρόσβασης άλλων χρηστών/χρηστριών', 'right-override-export-depth' => 'Εξαγωγή σελίδων συμπεριλαμβάνοντας συνδεδεμένες σελίδες έως ένα βάθος 5 επιπέδων', -'right-versiondetail' => 'Προβολή των εκτεταμένων πληροφοριών της έκδοσης λογισμικού.', 'right-sendemail' => 'Αποστολή ηλεκτρονικού μηνύματος σε άλλους χρήστες', # User rights log @@ -1559,14 +1577,9 @@ $1", 'recentchanges-legend' => 'Επιλογές των πρόσφατων αλλαγών', 'recentchangestext' => 'Παρακολουθείστε σε αυτή τη σελίδα τις πιο πρόσφατες αλλαγές στο Wiki.', 'recentchanges-feed-description' => 'Παρακολουθείστε τις πιο πρόσφατες αλλαγές στο wiki σε αυτή τη ροή δεδομένων.', -'recentchanges-label-legend' => 'Λεζάντα: $1.', -'recentchanges-legend-newpage' => '$1 - νέα σελίδα', 'recentchanges-label-newpage' => 'Αυτή η επεξεργασία δημιούργησε μια νέα σελίδα', -'recentchanges-legend-minor' => '$1 - αλλαγή μικρής κλίμακας', 'recentchanges-label-minor' => 'Αυτή είναι μια αλλαγή μικρής κλίμακας', -'recentchanges-legend-bot' => '$1 - αλλαγή bot', 'recentchanges-label-bot' => 'Αυτή η επεξεργασία έγινε από ένα bot', -'recentchanges-legend-unpatrolled' => '$1 - μη ελεγμένη αλλαγή', 'recentchanges-label-unpatrolled' => 'Αυτή η αλλαγή δεν έχει ελεγχθεί ακόμα', 'rcnote' => "Παρακάτω {{PLURAL:$1|υπάρχει '''1''' αλλαγή|υπάρχουν οι τελευταίες '''$1''' αλλαγές}} στο διάστημα {{PLURAL:$2|της τελευταίας ημέρας|των τελευταίων '''$2''' ημερών}}, από τις $5, $4 και εξής.", 'rcnotefrom' => 'Ακολουθούν οι αλλαγές από $2 (εμφάνιση $1 αλλαγών max).', @@ -1613,6 +1626,9 @@ $1", 'upload_directory_missing' => 'Λείπει το αποθηκευτήριο επιφορτώσεων ($1) και δεν μπορεί να δημιουργηθεί από τον webserver.', 'upload_directory_read_only' => 'Δεν είναι δυνατή η εγγραφή στον κατάλογο ($1) από τον server.', 'uploaderror' => 'Σφάλμα στη φόρτωση αρχείου', +'upload-recreate-warning' => "'''Προειδοποίηση: Ένα αρχείο με αυτό το όνομα έχει διαγραφεί ή μετακινηθεί.''' + +Το αρχείο διαγραφών και μετακινήσεων για αυτή τη σελίδα παρέχεται εδώ για διευκόλυνση:", 'uploadtext' => "Μπορείτε να χρησιμοποιήσετε την παρακάτω φόρμα για να επιφορτώσετε αρχεία. Για να δείτε ήδη επιφορτωμένα αρχεία, πηγαίνετε στη [[Special:FileList|λίστα επιφορτωμένων αρχείων]] ή στο [[Special:Log/upload|ιστορικό επιφορτώσεων]]. Οι διαγραφές έχουν καταγραφεί στη σελίδα [[Special:Log/delete|αρχείο διαγραφών]]. Για να συμπεριληφθεί μια εικόνα σε μια σελίδα, χρησιμοποιήστε συνδέσμους της μορφής: @@ -1644,6 +1660,17 @@ $1", {{PLURAL:\$3|Προτιμώμενος τύπος αρχείου είναι|Προτιμώμενοι τύποι αρχείων είναι}} \$2.", 'filetype-banned-type' => "'''\".\$1\"''' δεν είναι επιτρεπόμενος τύπος αρχείου. {{PLURAL:\$3|Επιτρεπόμενος τύπος αρχείων|Επιτρεπόμενοι τύποι αρχείων}} είναι \$2.", 'filetype-missing' => 'Το αρχείο δεν έχει καμία επέκταση (όπως ".jpg").', +'empty-file' => 'Το αρχείο που υποβλήθηκε ήταν άδειο.', +'file-too-large' => 'Το αρχείο που υποβλήθηκε είναι πολύ μεγάλο.', +'filename-tooshort' => 'Το όνομα αρχείου είναι πολύ μικρό.', +'filetype-banned' => 'Αυτός ο τύπος αρχείου έχει απαγορευτεί.', +'verification-error' => 'Αυτό το αρχείο δεν πέρασε τον έλεγχο επαλήθευσης.', +'hookaborted' => 'Η τροποποίηση που επιχειρήσατε, ακυρώθηκε από ένα άγκιστρο επέκτασης.', +'illegal-filename' => 'Αυτό το όνομα αρχείου δεν επιτρέπεται.', +'overwrite' => 'Η αντικατάσταση ενός υπαρχόντος αρχείου δεν επιτρέπεται.', +'unknown-error' => 'Προέκυψε ένα άγνωστο σφάλμα.', +'tmp-create-error' => 'Δεν ήταν δυνατή η δημιουργία προσωρινού αρχείου.', +'tmp-write-error' => 'Λάθος κατά την εγγραφή προσωρινού αρχείου.', 'large-file' => 'Προτείνεται τα αρχεία να μην είναι μεγαλύτερα από $1; αυτό το αρχείο είναι $2.', 'largefileserver' => 'Το μέγεθος αυτού του αρχείο είναι μεγαλύτερο από το μέγιστο μέγεθος που ο εξυπηρετητής είναι ρυθμισμένος να επιτρέπει.', 'emptyfile' => 'Το αρχείο που φορτώσατε φαίνεται να είναι κενό. Αυτό μπορεί να οφείλεται σε λάθος πληκτρολόγησης του ονόματος του αρχείου. Παρακαλούμε ελέγξτε εαν αυτό είναι πραγματικά το αρχείο που θέλετε να φορτώσετε.', @@ -1668,13 +1695,14 @@ $1", Εάν θέλετε παρ' όλ' αυτά να επιφορτώσετε το δικό σας αρχείο, παρακαλούμε πηγαίνετε πίσω και χρησιμοποιήστε ένα νέο όνομα. [[File:$1|thumb|center|$1]]", 'file-exists-duplicate' => 'Αυτό το αρχείο είναι διπλότυπο {{PLURAL:$1|αυτού του αρχείου|αυτών των αρχείων}}:', 'file-deleted-duplicate' => 'Αρχείο παρόμοιο με αυτό εδώ ([[:$1]]) έχει προηγουμένως διαγραφεί. Θα πρέπει να ελέγξετε το ιστορικό διαγραφής του πριν να προχωρήσετε στην επαναφόρτωσή του.', -'successfulupload' => 'Επιτυχής φόρτωση', 'uploadwarning' => 'Προειδοποίηση φόρτωσης', 'uploadwarning-text' => 'Παρακαλώ αλλάξτε την περιγραφή του αρχείου παρακάτω και προσπαθήστε ξανά.', 'savefile' => 'Αποθήκευση αρχείου', 'uploadedimage' => 'Η φόρτωση του "$1" ολοκληρώθηκε.', 'overwroteimage' => 'ανέβασμα νέας έκδοσης του "[[$1]]"', 'uploaddisabled' => 'Λυπούμαστε, η φόρτωση έχει απενεργοποιηθεί.', +'copyuploaddisabled' => 'Το ανέβασμα μέσω URL έχει απενεργοποιηθεί.', +'uploadfromurl-queued' => 'Το ανέβασμα σας βρίσκεται στην ουρά.', 'uploaddisabledtext' => 'Η φόρτωση αρχείων είναι απενεργοποιημένη.', 'php-uploaddisabledtext' => 'Οι επιφορτώσεις αρχείων ειναι απενεργοποιημένες στην PHP. Παρακαλούμε, ελέγξτε την ρύθμιση file_uploads.', 'uploadscripted' => 'Αυτό το αρχείο περιέχει κώδικα HTML ή script που μπορεί να παρερμηνευθεί από μερικούς browser.', @@ -1708,6 +1736,14 @@ JD # Jenoptik MGP # Pentax PICT # διάφορα # ', +'upload-success-subj' => 'Επιτυχής φόρτωση', +'upload-success-msg' => 'Το ανέβασμα σας από [$2] ήταν επιτυχές.Είναι διαθέσιμο εδώ: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Πρόβλημα στα ανέβασμα.', +'upload-failure-msg' => 'Υπήρξε ένα πρόβλημα με το φόρτωσή σας από [$2]: + +$1', +'upload-warning-subj' => 'Προειδοποίηση φόρτωσης', +'upload-warning-msg' => 'Υπήρξε ένα πρόβλημα με τη φόρτωσή σας από [$2]. Μπορείτε να επιστρέψετε στη [[Special:Upload/stash/$1|φόρμα φόρτωσης]] για να διορθώσετε αυτό το πρόβλημα.', 'upload-proto-error' => 'Λανθασμένο πρωτόκολλο', 'upload-proto-error-text' => 'Η απομακρυσμένη επιφόρτωση απαιτεί URL με πρόθεμα http:// ή ftp://.', @@ -1723,22 +1759,23 @@ PICT # διάφορα 'upload-http-error' => 'Εμφανίστηκε κάποιο σφάλμα HTTP: $1', # img_auth script messages -'img-auth-accessdenied' => 'Δεν επετράπη η πρόσβαση', -'img-auth-nopathinfo' => 'Υπολείπεται το PATH_INFO. +'img-auth-accessdenied' => 'Δεν επετράπη η πρόσβαση', +'img-auth-nopathinfo' => 'Υπολείπεται το PATH_INFO. Ο διακομιστής σας δεν είναι παραμετροποιημένος για να περάσει αυτές τις πληροφορίες. Μπορεί να είναι βασισμένος σε CGI και να μην υποστηρίζει img_atuh. Συμβουλευτείτε το http://www.mediawiki.org/wiki/Manual:Image_Authorization.', -'img-auth-notindir' => 'Η ζητούμενη διαδρομή δεν βρίσκεται στον διαμορφωμένο αρχειοκατάλογο επιφορτώσεων', -'img-auth-badtitle' => 'Αδύνατη η κατασκευή έγκυρου τίτλου από "$1".', -'img-auth-nologinnWL' => 'Δεν έχετε συνδεθεί και η "$1" δεν είναι στην άσπρη λίστα.', -'img-auth-nofile' => 'Το αρχείο "$1" δεν υπάρχει', -'img-auth-isdir' => 'Προσπαθείτε να αποκτήσετε πρόσβαση στον αρχειοκατάλογο "$1". +'img-auth-notindir' => 'Η ζητούμενη διαδρομή δεν βρίσκεται στον διαμορφωμένο αρχειοκατάλογο επιφορτώσεων', +'img-auth-badtitle' => 'Αδύνατη η κατασκευή έγκυρου τίτλου από "$1".', +'img-auth-nologinnWL' => 'Δεν έχετε συνδεθεί και η "$1" δεν είναι στην άσπρη λίστα.', +'img-auth-nofile' => 'Το αρχείο "$1" δεν υπάρχει', +'img-auth-isdir' => 'Προσπαθείτε να αποκτήσετε πρόσβαση στον αρχειοκατάλογο "$1". Μόνον η πρόσβαση σε αρχεία είναι επιτρεπτή.', -'img-auth-streaming' => 'Ροή "$1".', -'img-auth-public' => 'Η λειτουργία του img_auth.php είναι να εξάγει αρχεία από ένα ιδιωτικό wiki. +'img-auth-streaming' => 'Ροή "$1".', +'img-auth-public' => 'Η λειτουργία του img_auth.php είναι να εξάγει αρχεία από ένα ιδιωτικό wiki. Αυτό το wiki έχει ρυθμιστεί ως δημόσιο wiki. Για τη μεγαλύτερη δυνατή ασφάλεια, η img_auth.php είναι απενεργοποιημένη.', -'img-auth-noread' => 'Ο χρήστης δεν έχει πρόσβαση στο να διαβάσει το "$1".', +'img-auth-noread' => 'Ο χρήστης δεν έχει πρόσβαση στο να διαβάσει το "$1".', +'img-auth-bad-query-string' => 'Η διεύθυνση URL έχει μια συμβολοσειρά ερωτήματος που δεν είναι έγκυρη.', # HTTP errors 'http-invalid-url' => 'Άκυρη διεύθυνση URL: $1', @@ -1770,6 +1807,7 @@ PICT # διάφορα 'listfiles_search_for' => 'Αναζήτηση για όνομα πολυμέσου:', 'imgfile' => 'αρχείο', 'listfiles' => 'Κατάλογος εικόνων', +'listfiles_thumb' => 'Μικρογραφία', 'listfiles_date' => 'Ημερομηνία', 'listfiles_name' => 'Όνομα', 'listfiles_user' => 'Χρήστης', @@ -1883,8 +1921,8 @@ PICT # διάφορα 'statistics-edits' => 'Επεξεργασίες σελίδων από τη δημιουργία του εγχειρήματος {{SITENAME}}', 'statistics-edits-average' => 'Μέσος όρος επεξεργασιών ανά σελίδα', 'statistics-views-total' => 'Συνολικές εμφανίσεις', +'statistics-views-total-desc' => ' Επισκέψεις σε μη υπάρχουσες σελίδες και ειδικές σελίδες δεν συμπεριλαμβάνονται', 'statistics-views-peredit' => 'Εμφανίσεις ανά επεξεργασία', -'statistics-jobqueue' => 'Μήκος [http://www.mediawiki.org/wiki/Manual:Job_queue ουράς εργασιών]', 'statistics-users' => 'Εγγεγραμμένοι [[Special:ListUsers|χρήστες]]', 'statistics-users-active' => 'Ενεργοί χρήστες', 'statistics-users-active-desc' => 'Χρήστες που έχουν κάνει κάποια επεξεργασία μέσα σε {{PLURAL:$1|μέρα|$1 μέρες}}', @@ -1897,7 +1935,7 @@ PICT # διάφορα Μια σελίδα μεταχειρίζεται ως σελίδα αποσαφήνισης αν χρησιμοποιεί ένα πρότυπο το οποίο συνδέεται από το [[MediaWiki:Disambiguationspage]]", 'doubleredirects' => 'Διπλές ανακατευθύνσεις', -'doubleredirectstext' => 'Αυτή η σελίδα συγκαταλέγει σελίδες οι οποίες ανακατευθύνουν σε άλλες σελίδες ανακατεύθυνσης. Κάθε σειρά περιέχει συνδέσμους προς την πρώτη και τη δεύτερη σελίδα ανακατεύθυνσης, όπως επίσης και την πρώτη αράδα του κειμένου στη δεύτερη σελίδα ανακατεύθυνσης η οποία και είναι, κανονικά, ο πραγματικός προορισμός της ανακατεύθυνσης -εκεί δηλαδή όπου θα έπρεπε να είχατε οδηγηθεί από την αρχή. Τα διεγραμμένα λήμματα έχουν επιλυθεί.', +'doubleredirectstext' => 'Αυτή η σελίδα συγκαταλέγει σελίδες οι οποίες ανακατευθύνουν σε άλλες σελίδες ανακατεύθυνσης. Κάθε σειρά περιέχει συνδέσμους προς την πρώτη και τη δεύτερη σελίδα ανακατεύθυνσης, όπως επίσης και την πρώτη αράδα του κειμένου στη δεύτερη σελίδα ανακατεύθυνσης η οποία και είναι, κανονικά, ο πραγματικός προορισμός της ανακατεύθυνσης -εκεί δηλαδή όπου θα έπρεπε να είχατε οδηγηθεί από την αρχή. Τα διεγραμμένα λήμματα έχουν επιλυθεί.', 'double-redirect-fixed-move' => 'Η [[$1]] έχει μετακινηθεί, τώρα είναι ανακατεύθυνση στην [[$2]]', 'double-redirect-fixer' => 'Διορθωτής ανακατευθύνσεων', @@ -1920,6 +1958,8 @@ PICT # διάφορα 'nmembers' => '$1 {{PLURAL:$1|μέλος|μέλη}}', 'nrevisions' => '$1 {{PLURAL:$1|αναθεώρηση|αναθεωρήσεις}}', 'nviews' => '$1 {{PLURAL:$1|επίσκεψη|επισκέψεις}}', +'nimagelinks' => 'Χρησιμοποιείται στο $1 {{PLURAL:$1|page|pages}}', +'ntransclusions' => 'χρησιμοποιείται στο $1 {{PLURAL:$1|page|pages}}', 'specialpage-empty' => 'Αυτή η σελίδα είναι κενή.', 'lonelypages' => 'Ορφανές σελίδες', 'lonelypagestext' => 'Οι ακόλουθες σελίδες δεν συνδέονται με ή δεν υπερκλείονται σε άλλες σελίδες στο {{SITENAME}}.', @@ -2075,35 +2115,42 @@ PICT # διάφορα 'listgrouprights-removegroup-self-all' => 'Μπορεί να αφαιρέσει όλες τις ομάδες από το δικό σας λογαριασμό', # E-mail user -'mailnologin' => 'Δεν υπάρχει διεύθυνση παραλήπτη.', -'mailnologintext' => 'Πρέπει να έχετε [[Special:UserLogin|συνδεθεί]] και να έχετε δηλώσει +'mailnologin' => 'Δεν υπάρχει διεύθυνση παραλήπτη.', +'mailnologintext' => 'Πρέπει να έχετε [[Special:UserLogin|συνδεθεί]] και να έχετε δηλώσει μια έγκυρη ηλεκτρονική διεύθυνση στις [[Special:Preferences|Προτιμήσεις]] για να στείλετε e-mail σε άλλους χρήστες.', -'emailuser' => 'Στείλτε μήνυμα σε αυτό τον χρήστη', -'emailpage' => 'Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείο στο χρήστη', -'emailpagetext' => 'Συπληρώνοντας την παρακάτω φόρμα θα στείλετε ένα μήνυμα εφόσον έχετε δηλώσει μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου στις [[Special:Preferences|προτιμήσεις χρήστη]]. Αυτή θα εμφανιστεί ως διεύθυνση αποστολέα του μηνύματος, ούτως ώστε ο παραλήπτης να μπορέσει να σας απαντήσει.', -'usermailererror' => 'Σφάλμα ηλεκτρονικού ταχυδρομείου:', -'defemailsubject' => 'Ηλεκτρονικό ταχυδρομείο {{SITENAME}}', -'noemailtitle' => 'Δεν υπάρχει ηλεκτρονική διεύθυνση.', -'noemailtext' => 'Ο χρήστης αυτός δεν έχει δηλώσει μια έγκυρη ηλεκτρονική διεύθυνση.', -'nowikiemailtitle' => 'Δεν επιτρέπεται e-mail', -'nowikiemailtext' => 'Αυτός ο χρήστης έχει επιλέξει να μη δέχεται μηνύματα ηλεκτρονικού ταχυδρομείου από άλλους χρήστες.', -'email-legend' => 'Αποστολή μηνύματος ηλ. ταχυδρομείου σε έναν άλλο χρήστη του βίκι {{SITENAME}}', -'emailfrom' => 'Από:', -'emailto' => 'Προς:', -'emailsubject' => 'Θέμα:', -'emailmessage' => 'Μήνυμα:', -'emailsend' => 'Αποστολή', -'emailccme' => 'Στείλε μου ένα αντίγραφο του μηνύματός μου με ηλεκτρονικό ταχυδρομείο.', -'emailccsubject' => 'Αντίγραφο του μηνυματός σας στο $1: $2', -'emailsent' => 'Το μήνυμα έχει σταλεί', -'emailsenttext' => 'Το μήνυμά σας έχει σταλεί.', -'emailuserfooter' => 'Αυτό το ηλεκτρονικό μήνυμα στάλθηκε από τον/την "$1" στον τον/την "$2" μέσω της λειτουργίας "αποστολής μηνυμάτων" στο {{SITENAME}}.', +'emailuser' => 'Στείλτε μήνυμα σε αυτό τον χρήστη', +'emailpage' => 'Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείο στο χρήστη', +'emailpagetext' => 'Συπληρώνοντας την παρακάτω φόρμα θα στείλετε ένα μήνυμα εφόσον έχετε δηλώσει μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου στις [[Special:Preferences|προτιμήσεις χρήστη]]. Αυτή θα εμφανιστεί ως διεύθυνση αποστολέα του μηνύματος, ούτως ώστε ο παραλήπτης να μπορέσει να σας απαντήσει.', +'usermailererror' => 'Σφάλμα ηλεκτρονικού ταχυδρομείου:', +'defemailsubject' => 'Ηλεκτρονικό ταχυδρομείο {{SITENAME}}', +'usermaildisabled' => 'To e-mail χρήστη είναι απενεργοποιημένο', +'usermaildisabledtext' => 'Είναι αδύνατη η αποστολή e-mail σε άλλους χρήστες σε αυτό το wiki', +'noemailtitle' => 'Δεν υπάρχει ηλεκτρονική διεύθυνση.', +'noemailtext' => 'Ο χρήστης αυτός δεν έχει δηλώσει μια έγκυρη ηλεκτρονική διεύθυνση.', +'nowikiemailtitle' => 'Δεν επιτρέπεται e-mail', +'nowikiemailtext' => 'Αυτός ο χρήστης έχει επιλέξει να μη δέχεται μηνύματα ηλεκτρονικού ταχυδρομείου από άλλους χρήστες.', +'email-legend' => 'Αποστολή μηνύματος ηλ. ταχυδρομείου σε έναν άλλο χρήστη του βίκι {{SITENAME}}', +'emailfrom' => 'Από:', +'emailto' => 'Προς:', +'emailsubject' => 'Θέμα:', +'emailmessage' => 'Μήνυμα:', +'emailsend' => 'Αποστολή', +'emailccme' => 'Στείλε μου ένα αντίγραφο του μηνύματός μου με ηλεκτρονικό ταχυδρομείο.', +'emailccsubject' => 'Αντίγραφο του μηνυματός σας στο $1: $2', +'emailsent' => 'Το μήνυμα έχει σταλεί', +'emailsenttext' => 'Το μήνυμά σας έχει σταλεί.', +'emailuserfooter' => 'Αυτό το ηλεκτρονικό μήνυμα στάλθηκε από τον/την "$1" στον τον/την "$2" μέσω της λειτουργίας "αποστολής μηνυμάτων" στο {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Φεύγετε από τις ειδοποιήσεις συστήματος.', +'usermessage-editor' => 'Μηνύματα συστήματος', +'usermessage-template' => 'MediaWiki:UserMessage', # Watchlist 'watchlist' => 'Λίστα παρακολούθησης', 'mywatchlist' => 'Λίστα παρακολούθησης', -'watchlistfor' => "(για '''$1''')", +'watchlistfor2' => 'Για τον/την $1 ($2)', 'nowatchlist' => 'Δεν υπάρχουν εγγραφές στη λίστα παρακολούθησης.', 'watchlistanontext' => 'Παρακαλώ $1 για να δείτε ή να επεξεργαστείτε στοιχεία στη λίστα παρακολούθησής σας.', 'watchnologin' => 'Δεν έχετε συνδεθεί.', @@ -2150,25 +2197,28 @@ PICT # διάφορα 'enotif_anon_editor' => 'ανώνυμος χρήστης $1', 'enotif_body' => '{{GENDER:$WATCHINGUSERNAME|Αγαπητέ|Αγαπητή}} $WATCHINGUSERNAME, -Η σελίδα $PAGETITLE του εγχειρήματος {{SITENAME}} $CHANGEDORCREATED στις $PAGEEDITDATE από {{GENDER:$PAGEEDITOR|το χρήστη|την χρήστρια}} $PAGEEDITOR -ακολουθήστε το σύνδεσμο $PAGETITLE_URL για να δείτε την τρέχουσα αναθεώρηση. +Η σελίδα $PAGETITLE του εγχειρήματος {{SITENAME}} $CHANGEDORCREATED στις $PAGEEDITDATE από {{GENDER:$PAGEEDITOR|τον χρήστη|την χρήστη}} $PAGEEDITOR - ακολουθήστε το σύνδεσμο $PAGETITLE_URL για να δείτε την τρέχουσα αναθεώρηση. $NEWPAGE Περιγραφή επεξεργασίας: $PAGESUMMARY $PAGEMINOREDIT -Επικοινωνήστε με {{GENDER:$PAGEEDITOR|το συγκεκριμένο χρήστη|τη συγκεκριμένη χρήστρια}} : +Επικοινωνήστε με {{GENDER:$PAGEEDITOR|το συγκεκριμένο χρήστη|τη συγκεκριμένη χρήστη}} : mail: $PAGEEDITOR_EMAIL wiki: $PAGEEDITOR_WIKI Δεν θα υπάρξουν άλλες ειδοποιήσεις για περαιτέρω αλλαγές αν δεν επισκεφθείτε τη σελίδα. Μπορείτε επίσης να επαναφέρετε την επιλογή ειδοποίησης για όλες τις παρακολουθούμενες σελίδες στη λίστα παρακολούθησής σας. -Φιλικά, -Tο σύστημα ειδοποίησης του εγχειρήματος {{SITENAME}} + Φιλικά, + Tο σύστημα ειδοποίησης του εγχειρήματος {{SITENAME}} -- +Για να αλλάξετε τις προτιμήσεις της ειδοποιήσεων email, ακολουθήστε το σύνδεσμο: +{{fullurl:{{#special:Preferences}}}} + Για να αλλάξετε τις προτιμήσεις της λίστας παρακολούθησής σας, ακολουθήστε το σύνδεσμο: -{{fullurl:Special:Watchlist/edit}} +{{fullurl:{{#special:Watchlist}}/edit}} Για να διαγράψετε την σελίδα από την λίστα παρακολούθησής σας: $UNWATCHURL @@ -2223,7 +2273,10 @@ $UNWATCHURL 'revertpage' => 'Ανάκληση των αλλαγών $2 (επιστροφή στην προηγούμενη αναθεώρηση $1)', 'revertpage-nouser' => 'Αναστράφηκαν οι επεξεργασίες από τον (όνομα χρήστη αφαιρέθηκε) στη τελευταία έκδοση από τον/την [[User:$1|$1]]', 'rollback-success' => 'Ανεστραμμένες εκδόσεις από $1, αλλάχθηκαν στην προηγούμενη έκδοση από $2.', -'sessionfailure' => 'Υπάρχει πρόβλημα με τη σύνδεσή σας -η ενέργεια αυτή ακυρώθηκε προληπτικά για την αντιμετώπιση τυχόν πειρατείας συνόδου (session hijacking). Παρακαλoύμε πατήστε "Επιστροφή", ξαναφορτώστε τη σελίδα από την οποία φθάσατε εδώ και προσπαθήστε ξανά.', + +# Edit tokens +'sessionfailure-title' => 'Η συνεδρία απέτυχε', +'sessionfailure' => 'Υπάρχει πρόβλημα με τη σύνδεσή σας -η ενέργεια αυτή ακυρώθηκε προληπτικά για την αντιμετώπιση τυχόν πειρατείας συνόδου (session hijacking). Παρακαλoύμε πατήστε "Επιστροφή", ξαναφορτώστε τη σελίδα από την οποία φθάσατε εδώ και προσπαθήστε ξανά.', # Protect 'protectlogpage' => 'Καταγραφές προστασίας (κλειδώματος)', @@ -2355,19 +2408,22 @@ $1', 'month' => 'Από τον μήνα (και νωρίτερα):', 'year' => 'Από τη χρονιά (και νωρίτερα):', -'sp-contributions-newbies' => 'Εμφάνισε τις συνεισφορές μόνο των νέων λογαριασμών', -'sp-contributions-newbies-sub' => 'Για νέους λογαριασμούς', -'sp-contributions-newbies-title' => 'Συνεισφορές χρηστών για νέους λογαριασμούς', -'sp-contributions-blocklog' => 'Αρχείο καταγραφής φραγών', -'sp-contributions-deleted' => 'διαγραμμένες συνεισφορές χρήστη', -'sp-contributions-logs' => 'καταγραφές', -'sp-contributions-talk' => 'συζήτηση', -'sp-contributions-userrights' => 'διαχείριση δικαιωμάτων χρηστών', -'sp-contributions-blocked-notice' => '{{GENDER:$1|Αυτός ο χρήστης|Αυτή η χρήστης}} έχει αποκλειστεί επί του παρόντος. +'sp-contributions-newbies' => 'Εμφάνισε τις συνεισφορές μόνο των νέων λογαριασμών', +'sp-contributions-newbies-sub' => 'Για νέους λογαριασμούς', +'sp-contributions-newbies-title' => 'Συνεισφορές χρηστών για νέους λογαριασμούς', +'sp-contributions-blocklog' => 'Αρχείο καταγραφής φραγών', +'sp-contributions-deleted' => 'διαγραμμένες συνεισφορές χρήστη', +'sp-contributions-uploads' => 'επιφορτώσεις', +'sp-contributions-logs' => 'καταγραφές', +'sp-contributions-talk' => 'συζήτηση', +'sp-contributions-userrights' => 'διαχείριση δικαιωμάτων χρηστών', +'sp-contributions-blocked-notice' => '{{GENDER:$1|Αυτός ο χρήστης|Αυτή η χρήστης}} έχει αποκλειστεί επί του παρόντος. Η πιο πρόσφατη καταχώρηση του αρχείου καταγραφής φραγών παρέχεται παρακάτω για αναφορά:', -'sp-contributions-search' => 'Αναζήτηση για συνεισφορές', -'sp-contributions-username' => 'Διεύθυνση IP ή όνομα χρήστη:', -'sp-contributions-submit' => 'Αναζήτηση', +'sp-contributions-blocked-notice-anon' => 'Αυτή η διεύθυνση IP υπόκειται επί του παρόντος σε φραγή', +'sp-contributions-search' => 'Αναζήτηση για συνεισφορές', +'sp-contributions-username' => 'Διεύθυνση IP ή όνομα χρήστη:', +'sp-contributions-toponly' => 'Δείξε μόνο τις τελευταίες αναθεωρήσεις', +'sp-contributions-submit' => 'Αναζήτηση', # What links here 'whatlinkshere' => 'Αναφορές στη σελίδα', @@ -2428,7 +2484,6 @@ $1', 'ipb-edit-dropdown' => 'Επεξεργασία λόγων φραγής', 'ipb-unblock-addr' => 'Τερμάτισε τη φραγή του/της $1', 'ipb-unblock' => 'Τερμάτισε τη φραγή για ένα όνομα χρήστη ή μια διεύθυνση IP', -'ipb-blocklist-addr' => 'Δες τις υπάρχουσες φραγές για $1', 'ipb-blocklist' => 'Δες τις υπάρχουσες φραγές', 'ipb-blocklist-contribs' => 'Συνεισφορές για τον/την $1', 'unblockip' => 'Άρση φραγής χρήστη', @@ -2500,6 +2555,8 @@ $1 είναι ήδη αποκλεισμένη. Θέλετε να αλλάξετ 'cant-block-while-blocked' => 'Δεν μπορείτε να φράξετε άλλους χρήστες ενώ είστε φραγμένος/η.', 'cant-see-hidden-user' => 'Ο χρήστης που προσπαθείτε να αποκλείσετε έχει ήδη αποκλειστεί και αποκρυφτεί. Δεδομένου ότι δεν έχετε το δικαίωμα hideuser, δεν μπορείτε να δείτε ή να επεξεργαστείτε την φραγή του χρήστη.', +'ipbblocked' => 'Δεν μπορείτε να βάλετε ή να αναιρέσετε φραγή σε άλλους χρήστες, επειδή είστε εσείς υπό φραγή', +'ipbnounblockself' => 'Δεν έχετε το δικαίωμα να βγάλετε την φραγή από τον εαυτό σας', # Developer tools 'lockdb' => 'Κλείδωμα βάσης δεδομένων', @@ -2531,6 +2588,18 @@ $1 είναι ήδη αποκλεισμένη. Θέλετε να αλλάξετ Λάβετε υπόψη σας ότι η σελίδα '''δεν''' θα μετακινηθεί αν υπάρχει ήδη μια άλλη σελίδα κάτω από το νέο τίτλο, εκτός αν η σελίδα αυτή είναι κενή ή είναι ανακατεύθυνση χωρίς ιστορικό επεξεργασίας. Αυτό σημαίνει ότι, στην περίπτωση που έχετε κάνει λάθος, μπορείτε να μετονομάσετε μια σελίδα ξαναδίνοντας της την αρχική της ονομασία αλλά δεν μπορείτε να αντικαταστήσετε μια υπάρχουσα σελίδα. +'''ΠΡΟΣΟΧΗ!''' +Η μετονομασία σελίδας είναι μια αιφνίδια και δραστική αλλαγή όταν πρόκειται για δημοφιλείς σελίδες. +Παρακαλούμε, πριν το αποφασίσετε, να εξετάσετε προσεκτικά τις πιθανές επιπτώσεις αυτής της ενέργειας.", +'movepagetext-noredirectfixer' => "Χρησιμοποιώντας τη φόρμα που ακολουθεί μπορείτε να μετονομάσετε σελίδες και να μεταφέρετε όλο το ιστορικό τους στο νέο όνομα. +Ο παλιός τίτλος της σελίδας θα γίνει μια σελίδα ανακατεύθυνσης στο νέο τίτλο. +Μπορείτε να ενημερώσετε τις ανακατευθύνσεις που οδηγούν στον αρχικό τίτλο αυτόματα. +Αν επιλέξετε να μην γίνει, θα πρέπει να ελέγξετε τις [[Special:DoubleRedirects|διπλές]] και τις [[Special:BrokenRedirects|κατεστραμμένες ανακατευθύνσεις]]. +Είστε υπεύθυνος να επιβεβαιώσετε ότι οι σύνδεσμοι εξακολουθούν να οδηγούν προς τις κατευθύνσεις που πρέπει. + +Λάβετε υπόψη σας ότι η σελίδα '''δεν''' θα μετακινηθεί αν υπάρχει ήδη μια άλλη σελίδα κάτω από το νέο τίτλο, εκτός αν η σελίδα αυτή είναι κενή ή είναι ανακατεύθυνση χωρίς ιστορικό επεξεργασίας. +Αυτό σημαίνει ότι, στην περίπτωση που έχετε κάνει λάθος, μπορείτε να μετονομάσετε μια σελίδα ξαναδίνοντας της την αρχική της ονομασία αλλά δεν μπορείτε να αντικαταστήσετε μια υπάρχουσα σελίδα. + '''ΠΡΟΣΟΧΗ!''' Η μετονομασία σελίδας είναι μια αιφνίδια και δραστική αλλαγή όταν πρόκειται για δημοφιλείς σελίδες. Παρακαλούμε, πριν το αποφασίσετε, να εξετάσετε προσεκτικά τις πιθανές επιπτώσεις αυτής της ενέργειας.", @@ -2589,6 +2658,7 @@ $1 είναι ήδη αποκλεισμένη. Θέλετε να αλλάξετ 'immobile-source-page' => 'Αυτή η σελίδα δεν είναι δυνατό να μετακινηθεί.', 'immobile-target-page' => 'Δεν μπορεί να μετακινηθεί σε αυτόν τον τίτλο.', 'imagenocrossnamespace' => 'Δεν είναι δυνατή η μετακίνηση του αρχείου σε περιοχή ονομάτων που δεν αφορά αρχεία', +'nonfile-cannot-move-to-file' => ' Δεν είναι δυνατή η μετακίνηση μη αρχείων σε αρχείο ονομάτων', 'imagetypemismatch' => 'Η νέα επέκταση του αρχείου δεν ταιριάζει με τον τύπο του', 'imageinvalidfilename' => 'Το όνομα αρχείου προορισμού είναι άκυρο', 'fix-double-redirects' => 'Ενημερώστε όποια ανακατεύθυνση σκοπεύει προς τον αρχικό τίτλο', @@ -2667,6 +2737,7 @@ $1 είναι ήδη αποκλεισμένη. Θέλετε να αλλάξετ 'importstart' => 'Η εισαγωγή των σελίδων είναι σε εξέλιξη...', 'import-revision-count' => '$1 {{PLURAL:$1|αναθεώρηση|αναθεωρήσεις}}', 'importnopages' => 'Δεν υπάρχουν σελίδες για εισαγωγή.', +'imported-log-entries' => '{{PLURAL:$1|Καταχωρήθηκε 1 αρχείο καταγραφής|Καταχωρήθηκαν $1 αρχεία καταγραφής}}.', 'importfailed' => 'Η εισαγωγή απέτυχε: $1', 'importunknownsource' => 'Άγνωστος τύπος πηγής για την εισαγωγή', 'importcantopen' => 'Το αρχείο εισαγωγής δεν ήταν δυνατόν να ανοιχθεί', @@ -2760,6 +2831,8 @@ $1 είναι ήδη αποκλεισμένη. Θέλετε να αλλάξετ 'tooltip-rollback' => 'Η "αναστροφή" ακυρώνει τις τελευταίες επεξεργασίες σε αυτή τη σελίδα με ένα κλικ', 'tooltip-undo' => 'Η "ακύρωση" ακυρώνει αυτήν την επεξεργασία και ανοίγει την φόρμα επεξεργασίας σε κατάσταση προεπισκόπησης. Επιτρέπει την προσθήκη αιτιολόγησης στην περίληψη', +'tooltip-preferences-save' => 'Αποθήκευση προτιμήσεων', +'tooltip-summary' => 'Εισάγετε μια σύντομη περίληψη', # Stylesheets 'common.css' => '/* Το τοποθετημένο εδώ CSS θα εφαρμοστεί σε όλα τα skins */', @@ -2881,19 +2954,22 @@ $1', 'nextdiff' => 'Επόμενη επεξεργασία →', # Media information -'mediawarning' => "'''Προειδοποίηση''': Το αρχείο αυτό μπορεί να περιέχει κακοπροαίρετο κώδικα. +'mediawarning' => "'''Προειδοποίηση''': Το αρχείο αυτό μπορεί να περιέχει κακοπροαίρετο κώδικα. Εκτελώντας το, μπορεί να βλάψει το σύστημα του υπολογιστή σας.", 'imagemaxsize' => "Όριο μεγέθους εικόνων:
    ''(στις σελίδες περιγραφής εικόνων)''", 'thumbsize' => 'Μέγεθος μικρογραφίας:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|σελίδα|σελίδες}}', -'file-info' => '(μέγεθος αρχείου: $1, τύπος MIME: $2)', -'file-info-size' => '($1 × $2 εικονοστοιχεία, μέγεθος αρχείου: $3, τύπος MIME: $4)', +'file-info' => 'μέγεθος αρχείου: $1, τύπος MIME: $2', +'file-info-size' => '$1 × $2 εικονοστοιχεία, μέγεθος αρχείου: $3, τύπος MIME: $4', 'file-nohires' => 'Δεν διατίθεται υψηλότερη ανάλυση.', -'svg-long-desc' => "(Αρχείο SVG, κατ' όνομα $1 × $2 εικονοστοιχεία, μέγεθος αρχείου: $3)", +'svg-long-desc' => "Αρχείο SVG, κατ' όνομα $1 × $2 εικονοστοιχεία, μέγεθος αρχείου: $3", 'show-big-image' => 'Πλήρης ανάλυση', 'show-big-image-thumb' => 'Μέγεθος αυτής της προεπισκόπησης: $1 × $2 εικονοστοιχεία', 'file-info-gif-looped' => 'περιτυλιγμένο', 'file-info-gif-frames' => '$1 {{PLURAL:$1|πλαίσιο|πλαίσια}}', +'file-info-png-looped' => 'Σε άπειρο βρόγχο', +'file-info-png-repeat' => 'έπαιξε $1 {{PLURAL:$1|φορά|φορές}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|πλαίσιο|πλαίσια}}', # Special:NewFiles 'newimages' => 'Πινακοθήκη νέων εικόνων', @@ -2983,7 +3059,7 @@ $1', 'exif-isospeedratings' => 'Βαθμολόγηση ταχύτητας ISO', 'exif-oecf' => 'Οπτικοηλεκτρονικός συντελεστής μετατροπής', 'exif-shutterspeedvalue' => 'APEX ταχύτητα κλείστρου', -'exif-aperturevalue' => 'Διάφραγμα', +'exif-aperturevalue' => 'Διάφραγμα APEX', 'exif-brightnessvalue' => 'APEX φωτεινότητα', 'exif-exposurebiasvalue' => 'Προτεραιότητα έκθεσης', 'exif-maxaperturevalue' => 'Μέγιστο διάφραγμα ξηράς', @@ -3048,6 +3124,7 @@ $1', 'exif-gpsareainformation' => 'Όνομα περιοχής GPS', 'exif-gpsdatestamp' => 'Ημερομηνία GPS', 'exif-gpsdifferential' => 'Διαφορική διόρθωση GPS', +'exif-objectname' => 'Συνοπτικός τίτλος', # EXIF attributes 'exif-compression-1' => 'Έχει αποσυμπιεστεί.', @@ -3205,27 +3282,27 @@ $1', 'limitall' => 'όλες', # E-mail address confirmation -'confirmemail' => 'Επιβεβαίωση διεύθυνσης e-mail', -'confirmemail_noemail' => 'Δεν έχετε ορίσει μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου στις [[Special:Preferences|προτιμήσεις χρήστη]] σας.', -'confirmemail_text' => 'Το σύστημα χρειάζεται να επαληθεύσει τη διεύθυνση e-mail που δώσατε για να χρησιμοποιήσετε τις δυνατότητες αλληλογραφίας. Κάνετε κλικ στο παρακάτω κουμπί και θα σας αποσταλεί μήνυμα επαλήθευσης στη διεύθυνσή σας. Στο μήνυμα αυτό θα εμφανίζεται ένας σύνδεσμος που Θα περιέχει τον κωδικό επαλήθευσης -ακολουθήστε το σύνδεσμο αυτό για να μπορέσει το σύστημα να επαληθεύσει τη διεύθυνση αλληλογραφίας σας.', -'confirmemail_pending' => 'Ένας κωδικός επιβεβαίωσης σας έχει ήδη σταλεί μέσω μηνύματος e-mail. Αν δημιουργήσατε +'confirmemail' => 'Επιβεβαίωση διεύθυνσης e-mail', +'confirmemail_noemail' => 'Δεν έχετε ορίσει μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου στις [[Special:Preferences|προτιμήσεις χρήστη]] σας.', +'confirmemail_text' => 'Το σύστημα χρειάζεται να επαληθεύσει τη διεύθυνση e-mail που δώσατε για να χρησιμοποιήσετε τις δυνατότητες αλληλογραφίας. Κάνετε κλικ στο παρακάτω κουμπί και θα σας αποσταλεί μήνυμα επαλήθευσης στη διεύθυνσή σας. Στο μήνυμα αυτό θα εμφανίζεται ένας σύνδεσμος που Θα περιέχει τον κωδικό επαλήθευσης -ακολουθήστε το σύνδεσμο αυτό για να μπορέσει το σύστημα να επαληθεύσει τη διεύθυνση αλληλογραφίας σας.', +'confirmemail_pending' => 'Ένας κωδικός επιβεβαίωσης σας έχει ήδη σταλεί μέσω μηνύματος e-mail. Αν δημιουργήσατε πρόσφατα το λογαριασμό σας, μπορεί να θέλετε να περιμένετε μερικά λεπτά για να φτάσει αυτό πριν προσπαθήσετε να ζητήσετε ένα νέο κωδικό.', -'confirmemail_send' => 'Αποστολή κωδικού επαλήθευσης με e-mail .', -'confirmemail_sent' => 'Στάλθηκε το μήνυμα ηλεκτρονικού ταχυδρομείου για επιβεβαίωση.', -'confirmemail_oncreate' => 'Ένας κωδικός επιβεβαίωσης σας έχει σταλεί στην διεύθυνση e-mail σας. +'confirmemail_send' => 'Αποστολή κωδικού επαλήθευσης με e-mail .', +'confirmemail_sent' => 'Στάλθηκε το μήνυμα ηλεκτρονικού ταχυδρομείου για επιβεβαίωση.', +'confirmemail_oncreate' => 'Ένας κωδικός επιβεβαίωσης σας έχει σταλεί στην διεύθυνση e-mail σας. Αυτός ο κωδικός δεν είναι απαραίτητος για να συνδεθείτε, αλλά θα χρειαστεί να τον παρέχετε πριν ενεργοποιήσετε οποιαδήποτε χαρακτηριστικά βασισμένα σε e-mail, σε αυτό το wiki.', -'confirmemail_sendfailed' => 'Δεν ήταν δυνατή η αποστολή του e-mail επαλήθευσης από το {{SITENAME}}. Ελέγξτε την ηλεκτρονική διεύθυνση που συμπληρώσατε για άκυρους χαρακτήρες. +'confirmemail_sendfailed' => 'Δεν ήταν δυνατή η αποστολή του e-mail επαλήθευσης από το {{SITENAME}}. Ελέγξτε την ηλεκτρονική διεύθυνση που συμπληρώσατε για άκυρους χαρακτήρες. Το πρόγραμμα ηλεκτρονικού ταχυδρομείου επέστρεψε το ακόλουθο μήνυμα: $1', -'confirmemail_invalid' => 'Λάθος κωδικός επαλήθευσης. Είναι πιθανόν ο κωδικός σας να έχει λήξει.', -'confirmemail_needlogin' => 'Χρειάζετε να $1 για να επιβεβαιώσετε τη διεύθυνση e-mail σας.', -'confirmemail_success' => 'Η ηλεκτρονική σας διεύθυνση σας επαληθεύτηκε. Μπορείτε πλέον να συνδεθείτε και να απολαύσετε τις δυνατότητες του Wiκi.', -'confirmemail_loggedin' => 'Η ηλεκτρονική σας διεύθυνση επαληθεύτηκε.', -'confirmemail_error' => 'Παρουσιάστηκε λάθος κατά την αποθήκευση των ρυθμίσεών σας.', -'confirmemail_subject' => 'Επαλήθευση ηλεκτρονικής διεύθυνσης του {{SITENAME}}', -'confirmemail_body' => 'Κάποιος -πιθανόν εσείς- από τη διεύθυνση IP $1, δημιούργησε στον ιστότοπο {{SITENAME}} το λογαριασμό χρήστη "$2" με αυτή την ηλεκτρονική διεύθυνση. +'confirmemail_invalid' => 'Λάθος κωδικός επαλήθευσης. Είναι πιθανόν ο κωδικός σας να έχει λήξει.', +'confirmemail_needlogin' => 'Χρειάζετε να $1 για να επιβεβαιώσετε τη διεύθυνση e-mail σας.', +'confirmemail_success' => 'Η ηλεκτρονική σας διεύθυνση σας επαληθεύτηκε. Μπορείτε πλέον να συνδεθείτε και να απολαύσετε τις δυνατότητες του Wiκi.', +'confirmemail_loggedin' => 'Η ηλεκτρονική σας διεύθυνση επαληθεύτηκε.', +'confirmemail_error' => 'Παρουσιάστηκε λάθος κατά την αποθήκευση των ρυθμίσεών σας.', +'confirmemail_subject' => 'Επαλήθευση ηλεκτρονικής διεύθυνσης του {{SITENAME}}', +'confirmemail_body' => 'Κάποιος -πιθανόν εσείς- από τη διεύθυνση IP $1, δημιούργησε στον ιστότοπο {{SITENAME}} το λογαριασμό χρήστη "$2" με αυτή την ηλεκτρονική διεύθυνση. Για να επιβεβαιώσετε ότι αυτός ο λογαριασμός χρήστη ανήκει πραγματικά σε εσάς και για να ενεργοποιηθούν οι δυνατότητες e-mail του {{SITENAME}}, ακολουθήστε αυτό το σύνδεσμο: @@ -3236,8 +3313,19 @@ $3 $5 Ο κωδικός επιβεβαίωσης θα λήξει στις $4.', -'confirmemail_invalidated' => 'Η επιβεβαίωσης της διεύθυνσης e-mail ακυρώθηκε', -'invalidateemail' => 'Ακύρωση επιβεβαίωσης της διεύθυνσης e-mail', +'confirmemail_body_changed' => 'Κάποιος - πιθανόν εσείς - από τη διεύθυνση IP $1, άλλαξε στον ιστότοπο {{SITENAME}} την ηλεκτρονική διεύθυνση του λογαριασμού χρήστη "$2". + +Για να επιβεβαιώσετε ότι αυτός ο λογαριασμός χρήστη ανήκει πραγματικά σε εσάς και για να ενεργοποιηθούν οι δυνατότητες e-mail του {{SITENAME}}, ακολουθήστε αυτό το σύνδεσμο: + +$3 + +Αν ο λογαριασμός *δεν* ανήκει σε σας, ακολουθήστε τον παρακάτω σύνδεσμο για να ακυρώσετε την επιβεβαίωση της διεύθυνσης e-mail: + +$5 + +Αυτός ο κωδικός επιβεβαίωσης θα λήξει στις $4.', +'confirmemail_invalidated' => 'Η επιβεβαίωσης της διεύθυνσης e-mail ακυρώθηκε', +'invalidateemail' => 'Ακύρωση επιβεβαίωσης της διεύθυνσης e-mail', # Scary transclusion 'scarytranscludedisabled' => '[Η ενσωμάτωση εξωτερικών ιστοσελίδων σε αυτό το Wiki είναι απενεργοποιημένη.]', @@ -3277,6 +3365,7 @@ $1', 'table_pager_first' => 'Πρώτη σελίδα', 'table_pager_last' => 'Τελευταία σελίδα', 'table_pager_limit' => 'Εμφάνισε $1 στοιχεία ανά σελίδα', +'table_pager_limit_label' => 'Στοιχεία ανά σελίδα:', 'table_pager_limit_submit' => 'Πήγαινε', 'table_pager_empty' => 'Κανένα αποτέλεσμα', @@ -3332,6 +3421,7 @@ $1', 'version-specialpages' => 'Ειδικές σελίδες', 'version-parserhooks' => 'Άγκιστρα του συντακτικού αναλυτή', 'version-variables' => 'Παράμετροι', +'version-skins' => 'Προσόψεις', 'version-other' => 'Άλλα', 'version-mediahandlers' => 'Χειριστές των μέσων', 'version-hooks' => 'Άγκιστρα', @@ -3343,6 +3433,13 @@ $1', 'version-hook-subscribedby' => 'Υπογεγραμμένο από', 'version-version' => '(Έκδοση $1)', 'version-license' => 'Άδεια χρήσης', +'version-poweredby-credits' => "Αυτό το βίκι τροφοδοτείται από '''[http://www.mediawiki.org/ MediaWiki]''', πνευματική ιδιοκτησία © 2001-$1 $2.", +'version-poweredby-others' => 'άλλοι', +'version-license-info' => "To Το MediaWiki είναι ελεύθερο λογισμικό. Μπορείτε να το αναδιανέμετε ή / και να το τροποποιήσετε υπό τους όρους της GNU General Public License όπως αυτή εκδόθηκε από το Free Software Foundation.Είτε η δεύτερη έκδοση της άδειας, είτε (κατ' επιλογή σας) οποιδήποτε επόμενη έκδοση. +Ο +Το MediaWiki διανέμεται με την ελπίδα ότι θα είναι χρήσιμο, αλλά ΧΩΡΙΣ ΚΑΜΙΑ ΕΓΓΥΗΣΗ.Ούτε καν την σιωπηρή εγγύση της ΕΜΠΟΡΕΥΣΙΜΟΤΗΤΑΣ ή της ΚΑΤΑΛΛΗΛΟΤΗΤΑΣ ΓΙΑ ΕΝΑ PARTICULAR ΣΚΟΠΟ.Όπως δείτε την GNU General Public License για περισσότερες λεπτομέρειες. + + Θα πρέπει να έχετε λάβει [((SERVER)) ((SCRIPTPATH)) / COPYING ένα αντίγραφο της GNU General Public License] μαζί με αυτό το πρόγραμμα.Αν όχι, γράψτε προς το Free Software Foundation, Inc, 51 Franklin Street, πέμπτο όροφο , Boston, MA 02110-1301, USA ή [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html διαβάστε το online].", 'version-software' => 'Εγκατεστημένο λογισμικό', 'version-software-product' => 'Προϊόν', 'version-software-version' => 'Έκδοση', @@ -3413,6 +3510,15 @@ $1', 'tags-edit' => 'επεξεργασία', 'tags-hitcount' => '$1 {{PLURAL:$1|αλλαγή|αλλαγές}}', +# Special:ComparePages +'comparepages' => 'Συγκρίνετε τις σελίδες', +'compare-selector' => 'Συγκρίνετε τις αναθεωρήσεις των σελίδων', +'compare-page1' => 'Σελίδα 1', +'compare-page2' => 'Σελίδα 2', +'compare-rev1' => 'Αναθεώρηση 1', +'compare-rev2' => 'Αναθεώρηση 2', +'compare-submit' => 'Συγκρίνετε', + # Database error messages 'dberr-header' => 'Αυτό το βίκι έχει ένα πρόβλημα', 'dberr-problems' => 'Λυπούμαστε! Αυτός ο ιστότοπος αντιμετωπίζει τεχνικές δυσκολίες.', @@ -3429,8 +3535,13 @@ $1', 'htmlform-float-invalid' => 'Η τιμή που ορίσατε δεν είναι ένας αριθμός.', 'htmlform-int-toolow' => 'Η αξία που θέσατε είναι πιο κάτω από το ελάχιστο όριο $1', 'htmlform-int-toohigh' => 'Η τιμή που θέσατε είναι πιο πάνω από το μέγιστο όριο $1', +'htmlform-required' => 'Η τιμή αυτή είναι απαραίτητη', 'htmlform-submit' => 'Υποβολή', 'htmlform-reset' => 'Αναστροφή αλλαγών', 'htmlform-selectorother-other' => 'Άλλο', +# SQLite database support +'sqlite-has-fts' => '$1 με υποστήριξη αναζήτησης πλήρους κειμένου', +'sqlite-no-fts' => '$1 χωρίς την υποστήριξη αναζήτησης πλήρους κειμένου', + ); diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php index d7f06fa6..e851696f 100644 --- a/languages/messages/MessagesEn.php +++ b/languages/messages/MessagesEn.php @@ -88,8 +88,8 @@ $linkPrefixExtension = false; $namespaceNames = array( NS_MEDIA => 'Media', NS_SPECIAL => 'Special', - NS_MAIN => '', - NS_TALK => 'Talk', + NS_MAIN => '', + NS_TALK => 'Talk', NS_USER => 'User', NS_USER_TALK => 'User_talk', # NS_PROJECT set by $wgMetaNamespace @@ -268,7 +268,7 @@ $magicWords = array( 'safesubst' => array( 0, 'SAFESUBST:' ), 'msgnw' => array( 0, 'MSGNW:' ), 'img_thumbnail' => array( 1, 'thumbnail', 'thumb' ), - 'img_manualthumb' => array( 1, 'thumbnail=$1', 'thumb=$1'), + 'img_manualthumb' => array( 1, 'thumbnail=$1', 'thumb=$1' ), 'img_right' => array( 1, 'right' ), 'img_left' => array( 1, 'left' ), 'img_none' => array( 1, 'none' ), @@ -295,14 +295,15 @@ $magicWords = array( 'nse' => array( 0, 'NSE:' ), 'localurl' => array( 0, 'LOCALURL:' ), 'localurle' => array( 0, 'LOCALURLE:' ), + 'articlepath' => array( 0, 'ARTICLEPATH' ), 'server' => array( 0, 'SERVER' ), 'servername' => array( 0, 'SERVERNAME' ), 'scriptpath' => array( 0, 'SCRIPTPATH' ), 'stylepath' => array( 0, 'STYLEPATH' ), 'grammar' => array( 0, 'GRAMMAR:' ), 'gender' => array( 0, 'GENDER:' ), - 'notitleconvert' => array( 0, '__NOTITLECONVERT__', '__NOTC__'), - 'nocontentconvert' => array( 0, '__NOCONTENTCONVERT__', '__NOCC__'), + 'notitleconvert' => array( 0, '__NOTITLECONVERT__', '__NOTC__' ), + 'nocontentconvert' => array( 0, '__NOCONTENTCONVERT__', '__NOCC__' ), 'currentweek' => array( 1, 'CURRENTWEEK' ), 'currentdow' => array( 1, 'CURRENTDOW' ), 'localweek' => array( 1, 'LOCALWEEK' ), @@ -311,6 +312,7 @@ $magicWords = array( 'revisionday' => array( 1, 'REVISIONDAY' ), 'revisionday2' => array( 1, 'REVISIONDAY2' ), 'revisionmonth' => array( 1, 'REVISIONMONTH' ), + 'revisionmonth1' => array( 1, 'REVISIONMONTH1' ), 'revisionyear' => array( 1, 'REVISIONYEAR' ), 'revisiontimestamp' => array( 1, 'REVISIONTIMESTAMP' ), 'revisionuser' => array( 1, 'REVISIONUSER' ), @@ -352,6 +354,9 @@ $magicWords = array( 'staticredirect' => array( 1, '__STATICREDIRECT__' ), 'protectionlevel' => array( 1, 'PROTECTIONLEVEL' ), 'formatdate' => array( 0, 'formatdate', 'dateformat' ), + 'url_path' => array( 0, 'PATH' ), + 'url_wiki' => array( 0, 'WIKI' ), + 'url_query' => array( 0, 'QUERY' ), ); /** @@ -373,6 +378,7 @@ $specialPageAliases = array( 'Watchlist' => array( 'Watchlist' ), 'Recentchanges' => array( 'RecentChanges' ), 'Upload' => array( 'Upload' ), + 'UploadStash' => array( 'UploadStash' ), 'Listfiles' => array( 'ListFiles', 'FileList', 'ImageList' ), 'Newimages' => array( 'NewFiles', 'NewImages' ), 'Listusers' => array( 'ListUsers', 'UserList' ), @@ -407,6 +413,7 @@ $specialPageAliases = array( 'Allpages' => array( 'AllPages' ), 'Prefixindex' => array( 'PrefixIndex' ) , 'Ipblocklist' => array( 'BlockList', 'ListBlocks', 'IPBlockList' ), + 'Unblock' => array( 'Unblock' ), 'Specialpages' => array( 'SpecialPages' ), 'Contributions' => array( 'Contributions' ), 'Emailuser' => array( 'EmailUser' ), @@ -437,6 +444,7 @@ $specialPageAliases = array( 'Mypage' => array( 'MyPage' ), 'Mytalk' => array( 'MyTalk' ), 'Mycontributions' => array( 'MyContributions' ), + 'Myuploads' => array( 'MyUploads' ), 'Listadmins' => array( 'ListAdmins' ), 'Listbots' => array( 'ListBots' ), 'Popularpages' => array( 'PopularPages' ), @@ -451,6 +459,9 @@ $specialPageAliases = array( 'DeletedContributions' => array( 'DeletedContributions' ), 'Tags' => array( 'Tags' ), 'Activeusers' => array( 'ActiveUsers' ), + 'ComparePages' => array( 'ComparePages' ), + 'Badtitle' => array( 'Badtitle' ), + 'DisableAccount' => array( 'DisableAccount' ), ); /** @@ -580,9 +591,9 @@ $preloadedMessages = array( 'whatlinkshere', ); -#------------------------------------------------------------------- +# ------------------------------------------------------------------- # Default messages -#------------------------------------------------------------------- +# ------------------------------------------------------------------- # Allowed characters in keys are: A-Z, a-z, 0-9, underscore (_) and # hyphen (-). If you need more characters, you may be able to change # the regex in MagicWord::initRegex @@ -623,8 +634,7 @@ XHTML id names. 'tog-editsection' => 'Enable section editing via [edit] links', 'tog-editsectiononrightclick' => 'Enable section editing by right clicking on section titles (requires JavaScript)', 'tog-showtoc' => 'Show table of contents (for pages with more than 3 headings)', -'tog-rememberpassword' => 'Remember my login on this computer', -'tog-editwidth' => 'Widen the edit box to fill the entire screen', +'tog-rememberpassword' => 'Remember my login on this browser (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Add pages I create to my watchlist', 'tog-watchdefault' => 'Add pages I edit to my watchlist', 'tog-watchmoves' => 'Add pages I move to my watchlist', @@ -632,7 +642,7 @@ XHTML id names. 'tog-minordefault' => 'Mark all edits minor by default', 'tog-previewontop' => 'Show preview before edit box', 'tog-previewonfirst' => 'Show preview on first edit', -'tog-nocache' => 'Disable page caching', +'tog-nocache' => 'Disable browser page caching', 'tog-enotifwatchlistpages' => 'E-mail me when a page on my watchlist is changed', 'tog-enotifusertalkpages' => 'E-mail me when my user talk page is changed', 'tog-enotifminoredits' => 'E-mail me also for minor edits of pages', @@ -640,8 +650,8 @@ XHTML id names. 'tog-shownumberswatching' => 'Show the number of watching users', 'tog-oldsig' => 'Preview of existing signature:', 'tog-fancysig' => 'Treat signature as wikitext (without an automatic link)', -'tog-externaleditor' => 'Use external editor by default (for experts only, needs special settings on your computer)', -'tog-externaldiff' => 'Use external diff by default (for experts only, needs special settings on your computer)', +'tog-externaleditor' => 'Use external editor by default (for experts only, needs special settings on your computer. [http://www.mediawiki.org/wiki/Manual:External_editors More information.])', +'tog-externaldiff' => 'Use external diff by default (for experts only, needs special settings on your computer. [http://www.mediawiki.org/wiki/Manual:External_editors More information.])', 'tog-showjumplinks' => 'Enable "jump to" accessibility links', 'tog-uselivepreview' => 'Use live preview (requires JavaScript) (experimental)', 'tog-forceeditsummary' => 'Prompt me when entering a blank edit summary', @@ -774,31 +784,21 @@ XHTML id names. 'sitesubtitle' => '', # do not translate or duplicate this message to other languages # Vector skin -'vector-action-addsection' => 'Add topic', -'vector-action-delete' => 'Delete', -'vector-action-move' => 'Move', -'vector-action-protect' => 'Protect', -'vector-action-undelete' => 'Undelete', -'vector-action-unprotect' => 'Unprotect', -'vector-namespace-category' => 'Category', -'vector-namespace-help' => 'Help page', -'vector-namespace-image' => 'File', -'vector-namespace-main' => 'Page', -'vector-namespace-media' => 'Media page', -'vector-namespace-mediawiki' => 'Message', -'vector-namespace-project' => 'Project page', -'vector-namespace-special' => 'Special page', -'vector-namespace-talk' => 'Discussion', -'vector-namespace-template' => 'Template', -'vector-namespace-user' => 'User page', -'vector-view-create' => 'Create', -'vector-view-edit' => 'Edit', -'vector-view-history' => 'View history', -'vector-view-view' => 'Read', -'vector-view-viewsource' => 'View source', -'actions' => 'Actions', -'namespaces' => 'Namespaces', -'variants' => 'Variants', +'vector-action-addsection' => 'Add topic', +'vector-action-delete' => 'Delete', +'vector-action-move' => 'Move', +'vector-action-protect' => 'Protect', +'vector-action-undelete' => 'Undelete', +'vector-action-unprotect' => 'Unprotect', +'vector-simplesearch-preference' => 'Enable enhanced search suggestions (Vector skin only)', +'vector-view-create' => 'Create', +'vector-view-edit' => 'Edit', +'vector-view-history' => 'View history', +'vector-view-view' => 'Read', +'vector-view-viewsource' => 'View source', +'actions' => 'Actions', +'namespaces' => 'Namespaces', +'variants' => 'Variants', 'errorpagetitle' => 'Error', 'returnto' => 'Return to $1.', @@ -861,6 +861,9 @@ Too many users are trying to view this page. Please wait a while before you try to access this page again. $1', +'pool-timeout' => 'Timeout waiting for the lock', +'pool-queuefull' => 'Pool queue is full', +'pool-errorunknown' => 'Unknown error', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'About {{SITENAME}}', @@ -1007,9 +1010,9 @@ Query: $2', 'actionthrottled' => 'Action throttled', 'actionthrottledtext' => 'As an anti-spam measure, you are limited from performing this action too many times in a short space of time, and you have exceeded this limit. Please try again in a few minutes.', -'protectedpagetext' => 'This page has been locked to prevent editing.', +'protectedpagetext' => 'This page has been protected to prevent editing.', 'viewsourcetext' => 'You can view and copy the source of this page:', -'protectedinterface' => 'This page provides interface text for the software, and is locked to prevent abuse.', +'protectedinterface' => 'This page provides interface text for the software, and is protected to prevent abuse.', 'editinginterface' => "'''Warning:''' You are editing a page which is used to provide interface text for the software. Changes to this page will affect the appearance of the user interface for other users. For translations, please consider using [http://translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], the MediaWiki localisation project.", @@ -1038,7 +1041,8 @@ Do not forget to change your [[Special:Preferences|{{SITENAME}} preferences]].', 'yourname' => 'Username:', 'yourpassword' => 'Password:', 'yourpasswordagain' => 'Retype password:', -'remembermypassword' => 'Remember my login on this computer', +'remembermypassword' => 'Remember my login on this browser (for a maximum of $1 {{PLURAL:$1|day|days}})', +'securelogin-stick-https' => 'Stay connected to HTTPS after login', 'yourdomainname' => 'Your domain:', 'externaldberror' => 'There was either an authentication database error or you are not allowed to update your external account.', 'login' => 'Log in', @@ -1055,6 +1059,7 @@ Do not forget to change your [[Special:Preferences|{{SITENAME}} preferences]].', 'gotaccount' => 'Already have an account? $1.', 'gotaccountlink' => 'Log in', 'createaccountmail' => 'By e-mail', +'createaccountreason' => 'Reason:', 'badretype' => 'The passwords you entered do not match.', 'userexists' => 'Username entered already in use. Please choose a different name.', @@ -1067,11 +1072,11 @@ Please enable them, then log in with your new username and password.', 'nocookieslogin' => '{{SITENAME}} uses cookies to log in users. You have cookies disabled. Please enable them and try again.', -'noname' => 'You have not specified a valid user name.', +'noname' => 'You have not specified a valid username.', 'loginsuccesstitle' => 'Login successful', 'loginsuccess' => "'''You are now logged in to {{SITENAME}} as \"\$1\".'''", 'nosuchuser' => 'There is no user by the name "$1". -User names are case sensitive. +Usernames are case sensitive. Check your spelling, or [[Special:UserLogin/signup|create a new account]].', 'nosuchusershort' => 'There is no user by the name "$1". Check your spelling.', @@ -1083,6 +1088,7 @@ Please try again.', Please try again.', 'passwordtooshort' => 'Passwords must be at least {{PLURAL:$1|1 character|$1 characters}}.', 'password-name-match' => 'Your password must be different from your username.', +'password-login-forbidden' => 'The use of this username and password has been forbidden.', 'mailmypassword' => 'E-mail new password', 'passwordremindertitle' => 'New temporary password for {{SITENAME}}', 'passwordremindertext' => 'Someone (probably you, from IP address $1) requested a new @@ -1105,6 +1111,7 @@ Before any other e-mail is sent to the account, you will have to follow the inst To prevent abuse, only one password reminder will be sent per {{PLURAL:$1|hour|$1 hours}}.', 'loginstart' => '', # do not translate or duplicate this message to other languages 'loginend' => '', # do not translate or duplicate this message to other languages +'signupstart' => '{{int:loginstart}}', # do not translate or duplicate this message to other languages 'signupend' => '{{int:loginend}}', # do not translate or duplicate this message to other languages 'mailerror' => 'Error sending mail: $1', 'acct_creation_throttle_hit' => 'Visitors to this wiki using your IP address have created {{PLURAL:$1|1 account|$1 accounts}} in the last day, which is the maximum allowed in this time period. @@ -1136,6 +1143,11 @@ Please wait before trying again.', * Nederlands|nl', # do not translate or duplicate this message to other languages 'suspicious-userlogout' => 'Your request to log out was denied because it looks like it was sent by a broken browser or caching proxy.', +# E-mail sending +'pear-mail-error' => '$1', # do not translate or duplicate this message to other languages +'php-mail-error' => '$1', # do not translate or duplicate this message to other languages +'php-mail-error-unknown' => "Unknown error in PHP's mail() function", + # Password reset dialog 'resetpass' => 'Change password', 'resetpass_announce' => 'You logged in with a temporary e-mailed code. @@ -1190,15 +1202,16 @@ You may have already successfully changed your password or requested a new tempo 'showdiff' => 'Show changes', 'anoneditwarning' => "'''Warning:''' You are not logged in. Your IP address will be recorded in this page's edit history.", +'anonpreviewwarning' => "''You are not logged in. Saving will record your IP address in this page's edit history.''", 'missingsummary' => "'''Reminder:''' You have not provided an edit summary. -If you click Save again, your edit will be saved without one.", +If you click \"{{int:savearticle}}\" again, your edit will be saved without one.", 'missingcommenttext' => 'Please enter a comment below.', 'missingcommentheader' => "'''Reminder:''' You have not provided a subject/headline for this comment. If you click \"{{int:savearticle}}\" again, your edit will be saved without one.", 'summary-preview' => 'Summary preview:', 'subject-preview' => 'Subject/headline preview:', 'blockedtitle' => 'User is blocked', -'blockedtext' => "'''Your user name or IP address has been blocked.''' +'blockedtext' => "'''Your username or IP address has been blocked.''' The block was made by $1. The reason given is ''$2''. @@ -1277,8 +1290,12 @@ The latest block log entry is provided below for reference:', '''It has not yet been saved!'''", 'userjspreview' => "'''Remember that you are only testing/previewing your user JavaScript.''' '''It has not yet been saved!'''", +'sitecsspreview' => "'''Remember that you are only previewing this CSS.''' +'''It has not yet been saved!'''", +'sitejspreview' => "'''Remember that you are only previewing this JavaScript code.''' +'''It has not yet been saved!'''", 'userinvalidcssjstitle' => "'''Warning:''' There is no skin \"\$1\". -Remember that custom .css and .js pages use a lowercase title, e.g. {{ns:user}}:Foo/monobook.css as opposed to {{ns:user}}:Foo/Monobook.css.", +Custom .css and .js pages use a lowercase title, e.g. {{ns:user}}:Foo/vector.css as opposed to {{ns:user}}:Foo/Vector.css.", 'updated' => '(Updated)', 'note' => "'''Note:'''", 'previewnote' => "'''Remember that this is only a preview.''' @@ -1304,7 +1321,7 @@ This sometimes happens when you are using a buggy web-based anonymous proxy serv The upper text area contains the page text as it currently exists. Your changes are shown in the lower text area. You will have to merge your changes into the existing text. -'''Only''' the text in the upper text area will be saved when you press \"Save page\".", +'''Only''' the text in the upper text area will be saved when you press \"{{int:savearticle}}\".", 'yourtext' => 'Your text', 'storedversion' => 'Stored revision', 'nonunicodebrowser' => "'''Warning: Your browser is not unicode compliant.''' @@ -1321,21 +1338,19 @@ If you do not want your writing to be edited mercilessly, then do not submit it You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see $1 for details). '''Do not submit copyrighted work without permission!'''", 'editpage-tos-summary' => '-', # do not translate or duplicate this message to other languages -'longpagewarning' => "'''Warning:''' This page is $1 kilobytes long; -some browsers may have problems editing pages approaching or longer than 32kb. -Please consider breaking the page into smaller sections.", +'longpage-hint' => '-', # do not translate or duplicate this message to other languages 'longpageerror' => "'''Error: The text you have submitted is $1 kilobytes long, which is longer than the maximum of $2 kilobytes.''' It cannot be saved.", 'readonlywarning' => "'''Warning: The database has been locked for maintenance, so you will not be able to save your edits right now.''' You may wish to cut-n-paste the text into a text file and save it for later. The administrator who locked it offered this explanation: $1", -'protectedpagewarning' => "'''Warning: This page has been locked so that only users with administrator privileges can edit it.''' +'protectedpagewarning' => "'''Warning: This page has been protected so that only users with administrator privileges can edit it.''' The latest log entry is provided below for reference:", -'semiprotectedpagewarning' => "'''Note:''' This page has been locked so that only registered users can edit it. +'semiprotectedpagewarning' => "'''Note:''' This page has been protected so that only registered users can edit it. The latest log entry is provided below for reference:", -'cascadeprotectedwarning' => "'''Warning:''' This page has been locked so that only users with administrator privileges can edit it, because it is included in the following cascade-protected {{PLURAL:$1|page|pages}}:", -'titleprotectedwarning' => "'''Warning: This page has been locked so that [[Special:ListGroupRights|specific rights]] are needed to create it.''' +'cascadeprotectedwarning' => "'''Warning:''' This page has been protected so that only users with administrator privileges can edit it, because it is included in the following cascade-protected {{PLURAL:$1|page|pages}}:", +'titleprotectedwarning' => "'''Warning: This page has been protected so that [[Special:ListGroupRights|specific rights]] are needed to create it.''' The latest log entry is provided below for reference:", 'templatesused' => '{{PLURAL:$1|Template|Templates}} used on this page:', 'templatesusedpreview' => '{{PLURAL:$1|Template|Templates}} used in this preview:', @@ -1394,11 +1409,10 @@ Please check the comparison below to verify that this is what you want to do, an 'undo-summary' => 'Undo revision $1 by [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]])', # Account creation failure -'cantcreateaccounttitle' => 'Cannot create account', -'cantcreateaccount-text' => "Account creation from this IP address ('''$1''') has been blocked by [[User:$3|$3]]. +'cantcreateaccounttitle' => 'Cannot create account', +'cantcreateaccount-text' => "Account creation from this IP address ('''$1''') has been blocked by [[User:$3|$3]]. The reason given by $3 is ''$2''", -'cantcreateaccount-nonblock-text' => '', # do not translate or duplicate this message to other languages # History pages 'viewpagelogs' => 'View logs for this page', @@ -1436,7 +1450,7 @@ It may have been deleted from the wiki, or renamed. Try [[Special:Search|searching on the wiki]] for relevant new pages.', # Revision deletion -'rev-deleted-comment' => '(comment removed)', +'rev-deleted-comment' => '(edit summary removed)', 'rev-deleted-user' => '(username removed)', 'rev-deleted-event' => '(log action removed)', 'rev-deleted-user-contribs' => '[username or IP address removed - edit hidden from contributions]', @@ -1510,6 +1524,8 @@ $1", 'logdelete-failure' => "'''Log visibility could not be set:''' $1", 'revdel-restore' => 'change visibility', +'revdel-restore-deleted' => 'deleted revisions', +'revdel-restore-visible' => 'visible revisions', 'pagehist' => 'Page history', 'deletedhist' => 'Deleted history', 'revdelete-content' => 'content', @@ -1580,11 +1596,13 @@ Note that using the navigation links will reset this column.', # Diffs 'history-title' => 'Revision history of "$1"', 'difference' => '(Difference between revisions)', +'difference-multipage' => '(Difference between pages)', 'lineno' => 'Line $1:', 'compareselectedversions' => 'Compare selected revisions', 'showhideselectedversions' => 'Show/hide selected revisions', 'editundo' => 'undo', -'diff-multi' => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} not shown)', +'diff-multi' => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by {{PLURAL:$2|one user|$2 users}} not shown)', +'diff-multi-manyusers' => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by more than $2 {{PLURAL:$2|user|users}} not shown)', # Search results 'search-summary' => '', # do not translate or duplicate this message to other languages @@ -1605,8 +1623,9 @@ Note that using the navigation links will reset this column.', 'shown-title' => 'Show $1 {{PLURAL:$1|result|results}} per page', 'viewprevnext' => 'View ($1 {{int:pipe-separator}} $2) ($3)', 'searchmenu-legend' => 'Search options', -'searchmenu-exists' => "'''There is a page named \"[[:\$1]]\" on this wiki'''", +'searchmenu-exists' => "'''There is a page named \"[[:\$1]]\" on this wiki.'''", 'searchmenu-new' => "'''Create the page \"[[:\$1]]\" on this wiki!'''", +'searchmenu-new-nocreate' => '', # do not translate or duplicate this message to other languages 'searchhelp-url' => 'Help:Contents', 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Browse pages with this prefix]]', 'searchmenu-help' => '[[{{MediaWiki:Searchhelp-url}}|{{int:help}}]]?', # do not translate or duplicate this message to other languages @@ -1621,6 +1640,7 @@ Note that using the navigation links will reset this column.', 'searchprofile-everything-tooltip' => 'Search all of content (including talk pages)', 'searchprofile-advanced-tooltip' => 'Search in custom namespaces', 'search-result-size' => '$1 ({{PLURAL:$2|1 word|$2 words}})', +'search-result-category-size' => '{{PLURAL:$1|1 member|$1 members}} ({{PLURAL:$2|1 subcategory|$2 subcategories}}, {{PLURAL:$3|1 file|$3 files}})', 'search-result-score' => 'Relevance: $1%', 'search-redirect' => '(redirect $1)', 'search-section' => '(section $1)', @@ -1716,6 +1736,7 @@ Note that their indexes of {{SITENAME}} content may be out of date.', 'contextlines' => 'Lines per hit:', 'contextchars' => 'Context per line:', 'stub-threshold' => 'Threshold for stub link formatting (bytes):', +'stub-threshold-disabled' => 'Disabled', 'recentchangesdays' => 'Days to show in recent changes:', 'recentchangesdays-max' => 'Maximum $1 {{PLURAL:$1|day|days}}', 'recentchangescount' => 'Number of edits to show by default:', @@ -1749,6 +1770,7 @@ Here's a randomly-generated value you can use: $1", 'prefs-files' => 'Files', 'prefs-custom-css' => 'Custom CSS', 'prefs-custom-js' => 'Custom JavaScript', +'prefs-common-css-js' => 'Shared CSS/JavaScript for all skins:', 'prefs-reset-intro' => 'You can use this page to reset your preferences to the site defaults. This cannot be undone.', 'prefs-emailconfirm-label' => 'E-mail confirmation:', @@ -1791,9 +1813,15 @@ You can also choose to let others contact you through your user or talk page wit 'prefs-advancedrendering' => 'Advanced options', 'prefs-advancedsearchoptions' => 'Advanced options', 'prefs-advancedwatchlist' => 'Advanced options', -'prefs-display' => 'Display options', +'prefs-displayrc' => 'Display options', +'prefs-displaysearchoptions' => 'Display options', +'prefs-displaywatchlist' => 'Display options', 'prefs-diffs' => 'Diffs', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'E-mail address appears valid', +'email-address-validity-invalid' => 'Enter a valid e-mail address', + # User rights 'userrights' => 'User rights management', 'userrights-summary' => '', # do not translate or duplicate this message to other languages @@ -1879,6 +1907,7 @@ You can also choose to let others contact you through your user or talk page wit 'right-hideuser' => 'Block a username, hiding it from the public', 'right-ipblock-exempt' => 'Bypass IP blocks, auto-blocks and range blocks', 'right-proxyunbannable' => 'Bypass automatic blocks of proxies', +'right-unblockself' => 'Unblock themselves', 'right-protect' => 'Change protection levels and edit protected pages', 'right-editprotected' => 'Edit protected pages (without cascading protection)', 'right-editinterface' => 'Edit the user interface', @@ -1901,7 +1930,6 @@ You can also choose to let others contact you through your user or talk page wit 'right-siteadmin' => 'Lock and unlock the database', 'right-reset-passwords' => "Reset other users' passwords", 'right-override-export-depth' => 'Export pages including linked pages up to a depth of 5', -'right-versiondetail' => 'Show the extended software version information', 'right-sendemail' => 'Send e-mail to other users', # User rights log @@ -1953,14 +1981,9 @@ You can also choose to let others contact you through your user or talk page wit 'recentchanges-legend' => 'Recent changes options', 'recentchangestext' => 'Track the most recent changes to the wiki on this page.', 'recentchanges-feed-description' => 'Track the most recent changes to the wiki in this feed.', -'recentchanges-label-legend' => 'Legend: $1.', -'recentchanges-legend-newpage' => '$1 - new page', 'recentchanges-label-newpage' => 'This edit created a new page', -'recentchanges-legend-minor' => '$1 - minor edit', 'recentchanges-label-minor' => 'This is a minor edit', -'recentchanges-legend-bot' => '$1 - bot edit', 'recentchanges-label-bot' => 'This edit was performed by a bot', -'recentchanges-legend-unpatrolled' => '$1 - unpatrolled edit', 'recentchanges-label-unpatrolled' => 'This edit has not yet been patrolled', 'rcnote' => "Below {{PLURAL:$1|is '''1''' change|are the last '''$1''' changes}} in the last {{PLURAL:$2|day|'''$2''' days}}, as of $5, $4.", 'rcnotefrom' => "Below are the changes since '''$2''' (up to '''$1''' shown).", @@ -2013,6 +2036,9 @@ Pages on [[Special:Watchlist|your watchlist]] are '''bold'''.", 'upload_directory_read_only' => 'The upload directory ($1) is not writable by the webserver.', 'uploaderror' => 'Upload error', 'upload-summary' => '', # do not translate or duplicate this message to other languages +'upload-recreate-warning' => "'''Warning: A file by that name has been deleted or moved.''' + +The deletion and move log for this page are provided here for convenience:", 'uploadtext' => "Use the form below to upload files. To view or search previously uploaded files go to the [[Special:FileList|list of uploaded files]], (re)uploads are also logged in the [[Special:Log/upload|upload log]], deletions in the [[Special:Log/delete|deletion log]]. @@ -2049,6 +2075,17 @@ Preferred {{PLURAL:\$3|file type is|file types are}} \$2.", 'filetype-banned-type' => "'''\".\$1\"''' is not a permitted file type. Permitted {{PLURAL:\$3|file type is|file types are}} \$2.", 'filetype-missing' => 'The file has no extension (like ".jpg").', +'empty-file' => 'The file you submitted was empty.', +'file-too-large' => 'The file you submitted was too large.', +'filename-tooshort' => 'The filename is too short.', +'filetype-banned' => 'This type of file is banned.', +'verification-error' => 'This file did not pass file verification.', +'hookaborted' => 'The modification you tried to make was aborted by an extension hook.', +'illegal-filename' => 'The filename is not allowed.', +'overwrite' => 'Overwriting an existing file is not allowed.', +'unknown-error' => 'An unknown error occured.', +'tmp-create-error' => 'Could not create temporary file.', +'tmp-write-error' => 'Error writing temporary file.', 'large-file' => 'It is recommended that files are no larger than $1; this file is $2.', 'largefileserver' => 'This file is bigger than the server is configured to allow.', @@ -2079,15 +2116,16 @@ If you still want to upload your file, please go back and use a new name. If you still want to upload your file, please go back and use a new name. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'This file is a duplicate of the following {{PLURAL:$1|file|files}}:', -'file-deleted-duplicate' => "A file identical to this file ([[$1]]) has previously been deleted. +'file-deleted-duplicate' => "A file identical to this file ([[:$1]]) has previously been deleted. You should check that file's deletion history before proceeding to re-upload it.", -'successfulupload' => 'Successful upload', 'uploadwarning' => 'Upload warning', 'uploadwarning-text' => 'Please modify the file description below and try again.', 'savefile' => 'Save file', 'uploadedimage' => 'uploaded "[[$1]]"', 'overwroteimage' => 'uploaded a new version of "[[$1]]"', 'uploaddisabled' => 'Uploads disabled.', +'copyuploaddisabled' => 'Upload by URL disabled.', +'uploadfromurl-queued' => 'Your upload has been queued.', 'uploaddisabledtext' => 'File uploads are disabled.', 'php-uploaddisabledtext' => 'File uploads are disabled in PHP. Please check the file_uploads setting.', @@ -2124,6 +2162,14 @@ JD # Jenoptik MGP # Pentax PICT # misc. # ', # only translate this message to other languages if you have to change it +'upload-success-subj' => 'Successful upload', +'upload-success-msg' => 'Your upload from [$2] was successful. It is available here: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Upload problem', +'upload-failure-msg' => 'There was a problem with your upload from [$2]: + +$1', +'upload-warning-subj' => 'Upload warning', +'upload-warning-msg' => 'There was a problem with your upload from [$2]. You may return to the [[Special:Upload/stash/$1|upload form]] to correct this problem.', 'upload-proto-error' => 'Incorrect protocol', 'upload-proto-error-text' => 'Remote upload requires URLs beginning with http:// or ftp://.', @@ -2191,6 +2237,7 @@ A click on a column header changes the sorting.', 'listfiles_search_for' => 'Search for media name:', 'imgfile' => 'file', 'listfiles' => 'File list', +'listfiles_thumb' => 'Thumbnail', 'listfiles_date' => 'Date', 'listfiles_name' => 'Name', 'listfiles_user' => 'User', @@ -2236,6 +2283,7 @@ The description on its [$2 file description page] there is shown below.', 'shared-repo-from' => 'from $1', 'shared-repo' => 'a shared repository', 'shared-repo-name-wikimediacommons' => 'Wikimedia Commons', # only translate this message to other languages if you have to change it +'filepage.css' => '/* CSS placed here is included on the file description page, also included on foreign client wikis */', # only translate this message to other languages if you have to change it # File reversion 'filerevert' => 'Revert $1', @@ -2270,7 +2318,7 @@ The description on its [$2 file description page] there is shown below.', # MIME search 'mimesearch' => 'MIME search', -'mimesearch-summary' => 'This page enables the filtering of files for its MIME type. +'mimesearch-summary' => 'This page enables the filtering of files for their MIME type. Input: contenttype/subtype, e.g. image/jpeg.', 'mimetype' => 'MIME type:', 'download' => 'download', @@ -2314,8 +2362,8 @@ Remember to check for other links to the templates before deleting them.', 'statistics-edits' => 'Page edits since {{SITENAME}} was set up', 'statistics-edits-average' => 'Average edits per page', 'statistics-views-total' => 'Views total', +'statistics-views-total-desc' => 'Views to non-existing pages and special pages are not included', 'statistics-views-peredit' => 'Views per edit', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Job queue] length', 'statistics-users' => 'Registered [[Special:ListUsers|users]]', 'statistics-users-active' => 'Active users', 'statistics-users-active-desc' => 'Users who have performed an action in the last {{PLURAL:$1|day|$1 days}}', @@ -2333,7 +2381,7 @@ A page is treated as disambiguation page if it uses a template which is linked f 'doubleredirects-summary' => '', # do not translate or duplicate this message to other languages 'doubleredirectstext' => 'This page lists pages which redirect to other redirect pages. Each row contains links to the first and second redirect, as well as the target of the second redirect, which is usually the "real" target page, which the first redirect should point to. -Crossed out entries have been solved.', +Crossed out entries have been solved.', 'double-redirect-fixed-move' => '[[$1]] has been moved. It now redirects to [[$2]].', 'double-redirect-fixer' => 'Redirect fixer', @@ -2359,6 +2407,8 @@ It now redirects to [[$2]].', 'nmembers' => '$1 {{PLURAL:$1|member|members}}', 'nrevisions' => '$1 {{PLURAL:$1|revision|revisions}}', 'nviews' => '$1 {{PLURAL:$1|view|views}}', +'nimagelinks' => 'Used on $1 {{PLURAL:$1|page|pages}}', +'ntransclusions' => 'used on $1 {{PLURAL:$1|page|pages}}', 'specialpage-empty' => 'There are no results for this report.', 'lonelypages' => 'Orphaned pages', 'lonelypages-summary' => '', # do not translate or duplicate this message to other languages @@ -2458,7 +2508,7 @@ Please note that other web sites may link to a file with a direct URL, and so ma 'log' => 'Logs', 'all-logs-page' => 'All public logs', 'alllogstext' => 'Combined display of all available logs of {{SITENAME}}. -You can narrow down the view by selecting a log type, the user name (case-sensitive), or the affected page (also case-sensitive).', +You can narrow down the view by selecting a log type, the username (case-sensitive), or the affected page (also case-sensitive).', 'logempty' => 'No matching items in log.', 'log-title-wildcard' => 'Search titles starting with this text', @@ -2553,34 +2603,41 @@ There may be [[{{MediaWiki:Listgrouprights-helppage}}|additional information]] a 'listgrouprights-removegroup-self-all' => 'Remove all groups from own account', # E-mail user -'mailnologin' => 'No send address', -'mailnologintext' => 'You must be [[Special:UserLogin|logged in]] and have a valid e-mail address in your [[Special:Preferences|preferences]] to send e-mail to other users.', -'emailuser' => 'E-mail this user', -'emailpage' => 'E-mail user', -'emailpagetext' => 'You can use the form below to send an e-mail message to this user. +'mailnologin' => 'No send address', +'mailnologintext' => 'You must be [[Special:UserLogin|logged in]] and have a valid e-mail address in your [[Special:Preferences|preferences]] to send e-mail to other users.', +'emailuser' => 'E-mail this user', +'emailpage' => 'E-mail user', +'emailpagetext' => 'You can use the form below to send an e-mail message to this user. The e-mail address you entered in [[Special:Preferences|your user preferences]] will appear as the "From" address of the e-mail, so the recipient will be able to reply directly to you.', -'usermailererror' => 'Mail object returned error:', -'defemailsubject' => '{{SITENAME}} e-mail', -'noemailtitle' => 'No e-mail address', -'noemailtext' => 'This user has not specified a valid e-mail address.', -'nowikiemailtitle' => 'No e-mail allowed', -'nowikiemailtext' => 'This user has chosen not to receive e-mail from other users.', -'email-legend' => 'Send an e-mail to another {{SITENAME}} user', -'emailfrom' => 'From:', -'emailto' => 'To:', -'emailsubject' => 'Subject:', -'emailmessage' => 'Message:', -'emailsend' => 'Send', -'emailccme' => 'E-mail me a copy of my message.', -'emailccsubject' => 'Copy of your message to $1: $2', -'emailsent' => 'E-mail sent', -'emailsenttext' => 'Your e-mail message has been sent.', -'emailuserfooter' => 'This e-mail was sent by $1 to $2 by the "E-mail user" function at {{SITENAME}}.', +'usermailererror' => 'Mail object returned error:', +'defemailsubject' => '{{SITENAME}} e-mail', +'usermaildisabled' => 'User e-mail disabled', +'usermaildisabledtext' => 'You cannot send e-mail to other users on this wiki', +'noemailtitle' => 'No e-mail address', +'noemailtext' => 'This user has not specified a valid e-mail address.', +'nowikiemailtitle' => 'No e-mail allowed', +'nowikiemailtext' => 'This user has chosen not to receive e-mail from other users.', +'email-legend' => 'Send an e-mail to another {{SITENAME}} user', +'emailfrom' => 'From:', +'emailto' => 'To:', +'emailsubject' => 'Subject:', +'emailmessage' => 'Message:', +'emailsend' => 'Send', +'emailccme' => 'E-mail me a copy of my message.', +'emailccsubject' => 'Copy of your message to $1: $2', +'emailsent' => 'E-mail sent', +'emailsenttext' => 'Your e-mail message has been sent.', +'emailuserfooter' => 'This e-mail was sent by $1 to $2 by the "E-mail user" function at {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Leaving system message.', +'usermessage-editor' => 'System messenger', +'usermessage-template' => 'MediaWiki:UserMessage', # only translate this message to other languages if you have to change it # Watchlist 'watchlist' => 'My watchlist', 'mywatchlist' => 'My watchlist', -'watchlistfor' => "(for '''$1''')", +'watchlistfor2' => 'For $1 $2', 'nowatchlist' => 'You have no items on your watchlist.', 'watchlistanontext' => 'Please $1 to view or edit items on your watchlist.', 'watchnologin' => 'Not logged in', @@ -2703,13 +2760,16 @@ The last edit to the page was by [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe 'revertpage-nouser' => 'Reverted edits by (username removed) to last revision by [[User:$1|$1]]', 'rollback-success' => 'Reverted edits by $1; changed back to last revision by $2.', -'sessionfailure' => 'There seems to be a problem with your login session; + +# Edit tokens +'sessionfailure-title' => 'Session failure', +'sessionfailure' => 'There seems to be a problem with your login session; this action has been canceled as a precaution against session hijacking. Go back to the previous page, reload that page and then try again.', # Protect 'protectlogpage' => 'Protection log', -'protectlogtext' => 'Below is a list of page locks and unlocks. +'protectlogtext' => 'Below is a list of page protections and page unprotections. See the [[Special:ProtectedPages|protected pages list]] for the list of currently operational page protections.', 'protectedarticle' => 'protected "[[$1]]"', 'modifiedarticleprotection' => 'changed protection level for "[[$1]]"', @@ -2779,9 +2839,9 @@ You can change this page's protection level, but it will not affect the cascadin 'undeletepagetext' => 'The following {{PLURAL:$1|page has been deleted but is|$1 pages have been deleted but are}} still in the archive and can be restored. The archive may be periodically cleaned out.', 'undelete-fieldset-title' => 'Restore revisions', -'undeleteextrahelp' => "To restore the page's entire history, leave all checkboxes deselected and click '''''Restore'''''. -To perform a selective restoration, check the boxes corresponding to the revisions to be restored, and click '''''Restore'''''. -Clicking '''''Reset''''' will clear the comment field and all checkboxes.", +'undeleteextrahelp' => "To restore the page's entire history, leave all checkboxes deselected and click '''''{{int:undeletebtn}}'''''. +To perform a selective restoration, check the boxes corresponding to the revisions to be restored, and click '''''{{int:undeletebtn}}'''''. +Clicking '''''{{int:undeletereset}}''''' will clear the comment field and all checkboxes.", 'undeleterevisions' => '$1 {{PLURAL:$1|revision|revisions}} archived', 'undeletehistory' => 'If you restore the page, all revisions will be restored to the history. If a new page with the same name has been created since the deletion, the restored revisions will appear in the prior history.', @@ -2841,22 +2901,26 @@ $1', 'month' => 'From month (and earlier):', 'year' => 'From year (and earlier):', -'sp-contributions-newbies' => 'Show contributions of new accounts only', -'sp-contributions-newbies-sub' => 'For new accounts', -'sp-contributions-newbies-title' => 'User contributions for new accounts', -'sp-contributions-blocklog' => 'block log', -'sp-contributions-deleted' => 'deleted user contributions', -'sp-contributions-logs' => 'logs', -'sp-contributions-talk' => 'talk', -'sp-contributions-userrights' => 'user rights management', -'sp-contributions-blocked-notice' => 'This user is currently blocked. +'sp-contributions-newbies' => 'Show contributions of new accounts only', +'sp-contributions-newbies-sub' => 'For new accounts', +'sp-contributions-newbies-title' => 'User contributions for new accounts', +'sp-contributions-blocklog' => 'block log', +'sp-contributions-deleted' => 'deleted user contributions', +'sp-contributions-uploads' => 'uploads', +'sp-contributions-logs' => 'logs', +'sp-contributions-talk' => 'talk', +'sp-contributions-userrights' => 'user rights management', +'sp-contributions-blocked-notice' => 'This user is currently blocked. +The latest block log entry is provided below for reference:', +'sp-contributions-blocked-notice-anon' => 'This IP address is currently blocked. The latest block log entry is provided below for reference:', -'sp-contributions-search' => 'Search for contributions', -'sp-contributions-username' => 'IP address or username:', -'sp-contributions-submit' => 'Search', -'sp-contributions-explain' => '', # only translate this message to other languages if you have to change it -'sp-contributions-footer' => '-', # do not translate or duplicate this message to other languages -'sp-contributions-footer-anon' => '-', # do not translate or duplicate this message to other languages +'sp-contributions-search' => 'Search for contributions', +'sp-contributions-username' => 'IP address or username:', +'sp-contributions-toponly' => 'Only show edits that are latest revisions', +'sp-contributions-submit' => 'Search', +'sp-contributions-explain' => '', # only translate this message to other languages if you have to change it +'sp-contributions-footer' => '-', # do not translate or duplicate this message to other languages +'sp-contributions-footer-anon' => '-', # do not translate or duplicate this message to other languages # What links here 'whatlinkshere' => 'What links here', @@ -2919,7 +2983,6 @@ See [[Special:IPBlockList|IP block list]] to review blocks.', 'ipb-edit-dropdown' => 'Edit block reasons', 'ipb-unblock-addr' => 'Unblock $1', 'ipb-unblock' => 'Unblock a username or IP address', -'ipb-blocklist-addr' => 'Existing blocks for $1', 'ipb-blocklist' => 'View existing blocks', 'ipb-blocklist-contribs' => 'Contributions for $1', 'unblockip' => 'Unblock user', @@ -2999,6 +3062,8 @@ You cannot create an account', 'cant-block-while-blocked' => 'You cannot block other users while you are blocked.', 'cant-see-hidden-user' => "The user you are trying to block has already been blocked and hidden. Since you do not have the hideuser right, you cannot see or edit the user's block.", +'ipbblocked' => 'You cannot block or unblock other users, because you are yourself blocked', +'ipbnounblockself' => 'You are not allowed to unblock yourself', # Developer tools 'lockdb' => 'Lock database', @@ -3034,6 +3099,17 @@ You are responsible for making sure that links continue to point where they are Note that the page will '''not''' be moved if there is already a page at the new title, unless it is empty or a redirect and has no past edit history. This means that you can rename a page back to where it was renamed from if you make a mistake, and you cannot overwrite an existing page. +'''Warning!''' +This can be a drastic and unexpected change for a popular page; +please be sure you understand the consequences of this before proceeding.", +'movepagetext-noredirectfixer' => "Using the form below will rename a page, moving all of its history to the new name. +The old title will become a redirect page to the new title. +Be sure to check for [[Special:DoubleRedirects|double]] or [[Special:BrokenRedirects|broken redirects]]. +You are responsible for making sure that links continue to point where they are supposed to go. + +Note that the page will '''not''' be moved if there is already a page at the new title, unless it is empty or a redirect and has no past edit history. +This means that you can rename a page back to where it was renamed from if you make a mistake, and you cannot overwrite an existing page. + '''Warning!''' This can be a drastic and unexpected change for a popular page; please be sure you understand the consequences of this before proceeding.", @@ -3094,13 +3170,14 @@ cannot move a page over itself.', 'immobile-source-page' => 'This page is not movable.', 'immobile-target-page' => 'Cannot move to that destination title.', 'imagenocrossnamespace' => 'Cannot move file to non-file namespace', +'nonfile-cannot-move-to-file' => 'Cannot move non-file to file namespace', 'imagetypemismatch' => 'The new file extension does not match its type', 'imageinvalidfilename' => 'The target file name is invalid', 'fix-double-redirects' => 'Update any redirects that point to the original title', 'move-leave-redirect' => 'Leave a redirect behind', -'protectedpagemovewarning' => "'''Warning:''' This page has been locked so that only users with administrator privileges can move it. +'protectedpagemovewarning' => "'''Warning:''' This page has been protected so that only users with administrator privileges can move it. The latest log entry is provided below for reference:", -'semiprotectedpagemovewarning' => "'''Note:''' This page has been locked so that only registered users can move it. +'semiprotectedpagemovewarning' => "'''Note:''' This page has been protected so that only registered users can move it. The latest log entry is provided below for reference:", 'move-over-sharedrepo' => '== File exists == [[:$1]] exists on a shared repository. Moving a file to this title will override the shared file.', @@ -3174,6 +3251,7 @@ Save it to your computer and upload it here.', 'importstart' => 'Importing pages...', 'import-revision-count' => '$1 {{PLURAL:$1|revision|revisions}}', 'importnopages' => 'No pages to import.', +'imported-log-entries' => 'Imported $1 {{PLURAL:$1|log entry|log entries}}.', 'importfailed' => 'Import failed: $1', 'importunknownsource' => 'Unknown import source type', 'importcantopen' => 'Could not open import file', @@ -3267,6 +3345,12 @@ Please try again.', 'accesskey-compareselectedversions' => 'v', # do not translate or duplicate this message to other languages 'accesskey-watch' => 'w', # do not translate or duplicate this message to other languages 'accesskey-upload' => 's', # do not translate or duplicate this message to other languages +'accesskey-preferences-save' => 's', # do not translate or duplicate this message to other languages +'accesskey-summary' => 'b', # do not translate or duplicate this message to other languages +'accesskey-userrights-set' => 's', # do not translate or duplicate this message to other languages +'accesskey-blockip-block' => 's', # do not translate or duplicate this message to other languages +'accesskey-export' => 's', # do not translate or duplicate this message to other languages +'accesskey-import' => 's', # do not translate or duplicate this message to other languages # Tooltip help for the actions 'tooltip-pt-userpage' => 'Your user page', @@ -3333,6 +3417,8 @@ You can view its source', 'tooltip-upload' => 'Start upload', 'tooltip-rollback' => '"Rollback" reverts edit(s) to this page of the last contributor in one click', 'tooltip-undo' => '"Undo" reverts this edit and opens the edit form in preview mode. It allows adding a reason in the summary.', +'tooltip-preferences-save' => 'Save preferences', +'tooltip-summary' => 'Enter a short summary', # Stylesheets 'common.css' => '/* CSS placed here will be applied to all skins */', # only translate this message to other languages if you have to change it @@ -3340,7 +3426,7 @@ You can view its source', 'nostalgia.css' => '/* CSS placed here will affect users of the Nostalgia skin */', # only translate this message to other languages if you have to change it 'cologneblue.css' => '/* CSS placed here will affect users of the Cologne Blue skin */', # only translate this message to other languages if you have to change it 'monobook.css' => '/* CSS placed here will affect users of the Monobook skin */', # only translate this message to other languages if you have to change it -'myskin.css' => '/* CSS placed here will affect users of the Myskin skin */', # only translate this message to other languages if you have to change it +'myskin.css' => '/* CSS placed here will affect users of the MySkin skin */', # only translate this message to other languages if you have to change it 'chick.css' => '/* CSS placed here will affect users of the Chick skin */', # only translate this message to other languages if you have to change it 'simple.css' => '/* CSS placed here will affect users of the Simple skin */', # only translate this message to other languages if you have to change it 'modern.css' => '/* CSS placed here will affect users of the Modern skin */', # only translate this message to other languages if you have to change it @@ -3354,7 +3440,7 @@ You can view its source', 'nostalgia.js' => '/* Any JavaScript here will be loaded for users using the Nostalgia skin */', # only translate this message to other languages if you have to change it 'cologneblue.js' => '/* Any JavaScript here will be loaded for users using the Cologne Blue skin */', # only translate this message to other languages if you have to change it 'monobook.js' => '/* Any JavaScript here will be loaded for users using the MonoBook skin */', # only translate this message to other languages if you have to change it -'myskin.js' => '/* Any JavaScript here will be loaded for users using the Myskin skin */', # only translate this message to other languages if you have to change it +'myskin.js' => '/* Any JavaScript here will be loaded for users using the MySkin skin */', # only translate this message to other languages if you have to change it 'chick.js' => '/* Any JavaScript here will be loaded for users using the Chick skin */', # only translate this message to other languages if you have to change it 'simple.js' => '/* Any JavaScript here will be loaded for users using the Simple skin */', # only translate this message to other languages if you have to change it 'modern.js' => '/* Any JavaScript here will be loaded for users using the Modern skin */', # only translate this message to other languages if you have to change it @@ -3379,7 +3465,7 @@ You can view its source', # Spam protection 'spamprotectiontitle' => 'Spam protection filter', -'spamprotectiontext' => 'The page you wanted to save was blocked by the spam filter. +'spamprotectiontext' => 'The text you wanted to save was blocked by the spam filter. This is probably caused by a link to a blacklisted external site.', 'spamprotectionmatch' => 'The following text is what triggered our spam filter: $1', 'spambot_username' => 'MediaWiki spam cleanup', @@ -3419,8 +3505,7 @@ This is probably caused by a link to a blacklisted external site.', 'math_unknown_function' => 'unknown function', 'math_lexing_error' => 'lexing error', 'math_syntax_error' => 'syntax error', -'math_image_error' => 'PNG conversion failed; -check for correct installation of latex, dvips, gs, and convert', +'math_image_error' => 'PNG conversion failed; check for correct installation of latex and dvipng (or dvips + gs + convert)', 'math_bad_tmpdir' => 'Cannot write to or create math temp directory', 'math_bad_output' => 'Cannot write to or create math output directory', 'math_notexvc' => 'Missing texvc executable; please see math/README to configure.', @@ -3467,14 +3552,17 @@ By executing it, your system may be compromised.", 'thumbsize' => 'Thumbnail size:', 'widthheight' => '$1×$2', # only translate this message to other languages if you have to change it 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|page|pages}}', -'file-info' => '(file size: $1, MIME type: $2)', -'file-info-size' => '($1 × $2 pixels, file size: $3, MIME type: $4)', +'file-info' => 'file size: $1, MIME type: $2', +'file-info-size' => '$1 × $2 pixels, file size: $3, MIME type: $4', 'file-nohires' => 'No higher resolution available.', -'svg-long-desc' => '(SVG file, nominally $1 × $2 pixels, file size: $3)', +'svg-long-desc' => 'SVG file, nominally $1 × $2 pixels, file size: $3', 'show-big-image' => 'Full resolution', 'show-big-image-thumb' => 'Size of this preview: $1 × $2 pixels', 'file-info-gif-looped' => 'looped', 'file-info-gif-frames' => '$1 {{PLURAL:$1|frame|frames}}', +'file-info-png-looped' => 'looped', +'file-info-png-repeat' => 'played $1 {{PLURAL:$1|time|times}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|frame|frames}}', # Special:NewFiles 'newimages' => 'Gallery of new files', @@ -3598,8 +3686,8 @@ Others will be hidden by default. 'exif-colorspace' => 'Color space', 'exif-componentsconfiguration' => 'Meaning of each component', 'exif-compressedbitsperpixel' => 'Image compression mode', -'exif-pixelydimension' => 'Valid image width', -'exif-pixelxdimension' => 'Valid image height', +'exif-pixelydimension' => 'Image width', +'exif-pixelxdimension' => 'Image height', 'exif-makernote' => 'Manufacturer notes', 'exif-usercomment' => 'User comments', 'exif-relatedsoundfile' => 'Related audio file', @@ -3616,10 +3704,10 @@ Others will be hidden by default. 'exif-spectralsensitivity' => 'Spectral sensitivity', 'exif-isospeedratings' => 'ISO speed rating', 'exif-oecf' => 'Optoelectronic conversion factor', -'exif-shutterspeedvalue' => 'Shutter speed', -'exif-aperturevalue' => 'Aperture', -'exif-brightnessvalue' => 'Brightness', -'exif-exposurebiasvalue' => 'Exposure bias', +'exif-shutterspeedvalue' => 'APEX shutter speed', +'exif-aperturevalue' => 'APEX aperture', +'exif-brightnessvalue' => 'APEX brightness', +'exif-exposurebiasvalue' => 'APEX exposure bias', 'exif-maxaperturevalue' => 'Maximum land aperture', 'exif-subjectdistance' => 'Subject distance', 'exif-meteringmode' => 'Metering mode', @@ -3683,6 +3771,7 @@ Others will be hidden by default. 'exif-gpsareainformation' => 'Name of GPS area', 'exif-gpsdatestamp' => 'GPS date', 'exif-gpsdifferential' => 'GPS differential correction', +'exif-objectname' => 'Short title', # Make & model, can be wikified in order to link to the camera and model name 'exif-make-value' => '$1', # do not translate or duplicate this message to other languages @@ -3738,9 +3827,9 @@ Others will be hidden by default. 'exif-meteringmode-0' => 'Unknown', 'exif-meteringmode-1' => 'Average', -'exif-meteringmode-2' => 'CenterWeightedAverage', +'exif-meteringmode-2' => 'Center weighted average', 'exif-meteringmode-3' => 'Spot', -'exif-meteringmode-4' => 'MultiSpot', +'exif-meteringmode-4' => 'Multi-Spot', 'exif-meteringmode-5' => 'Pattern', 'exif-meteringmode-6' => 'Partial', 'exif-meteringmode-255' => 'Other', @@ -3789,7 +3878,7 @@ Others will be hidden by default. 'exif-sensingmethod-7' => 'Trilinear sensor', 'exif-sensingmethod-8' => 'Color sequential linear sensor', -'exif-filesource-3' => 'DSC', # only translate this message to other languages if you have to change it +'exif-filesource-3' => 'Digital still camera', 'exif-scenetype-1' => 'A directly photographed image', @@ -3867,31 +3956,31 @@ Others will be hidden by default. 'limitall' => 'all', # E-mail address confirmation -'confirmemail' => 'Confirm e-mail address', -'confirmemail_noemail' => 'You do not have a valid e-mail address set in your [[Special:Preferences|user preferences]].', -'confirmemail_text' => '{{SITENAME}} requires that you validate your e-mail address before using e-mail features. +'confirmemail' => 'Confirm e-mail address', +'confirmemail_noemail' => 'You do not have a valid e-mail address set in your [[Special:Preferences|user preferences]].', +'confirmemail_text' => '{{SITENAME}} requires that you validate your e-mail address before using e-mail features. Activate the button below to send a confirmation mail to your address. The mail will include a link containing a code; load the link in your browser to confirm that your e-mail address is valid.', -'confirmemail_pending' => 'A confirmation code has already been e-mailed to you; +'confirmemail_pending' => 'A confirmation code has already been e-mailed to you; if you recently created your account, you may wish to wait a few minutes for it to arrive before trying to request a new code.', -'confirmemail_send' => 'Mail a confirmation code', -'confirmemail_sent' => 'Confirmation e-mail sent.', -'confirmemail_oncreate' => 'A confirmation code was sent to your e-mail address. +'confirmemail_send' => 'Mail a confirmation code', +'confirmemail_sent' => 'Confirmation e-mail sent.', +'confirmemail_oncreate' => 'A confirmation code was sent to your e-mail address. This code is not required to log in, but you will need to provide it before enabling any e-mail-based features in the wiki.', -'confirmemail_sendfailed' => '{{SITENAME}} could not send your confirmation mail. +'confirmemail_sendfailed' => '{{SITENAME}} could not send your confirmation mail. Please check your e-mail address for invalid characters. Mailer returned: $1', -'confirmemail_invalid' => 'Invalid confirmation code. +'confirmemail_invalid' => 'Invalid confirmation code. The code may have expired.', -'confirmemail_needlogin' => 'You need to $1 to confirm your e-mail address.', -'confirmemail_success' => 'Your e-mail address has been confirmed. +'confirmemail_needlogin' => 'You need to $1 to confirm your e-mail address.', +'confirmemail_success' => 'Your e-mail address has been confirmed. You may now [[Special:UserLogin|log in]] and enjoy the wiki.', -'confirmemail_loggedin' => 'Your e-mail address has now been confirmed.', -'confirmemail_error' => 'Something went wrong saving your confirmation.', -'confirmemail_subject' => '{{SITENAME}} e-mail address confirmation', -'confirmemail_body' => 'Someone, probably you, from IP address $1, +'confirmemail_loggedin' => 'Your e-mail address has now been confirmed.', +'confirmemail_error' => 'Something went wrong saving your confirmation.', +'confirmemail_subject' => '{{SITENAME}} e-mail address confirmation', +'confirmemail_body' => 'Someone, probably you, from IP address $1, has registered an account "$2" with this e-mail address on {{SITENAME}}. To confirm that this account really does belong to you and activate @@ -3905,8 +3994,36 @@ to cancel the e-mail address confirmation: $5 This confirmation code will expire at $4.', -'confirmemail_invalidated' => 'E-mail address confirmation canceled', -'invalidateemail' => 'Cancel e-mail confirmation', +'confirmemail_body_changed' => 'Someone, probably you, from IP address $1, +has changed the e-mail address of the account "$2" to this address on {{SITENAME}}. + +To confirm that this account really does belong to you and reactivate +e-mail features on {{SITENAME}}, open this link in your browser: + +$3 + +If the account does *not* belong to you, follow this link +to cancel the e-mail address confirmation: + +$5 + +This confirmation code will expire at $4.', +'confirmemail_body_set' => 'Someone, probably you, from IP address $1, +has set the e-mail address of the account "$2" to this address on {{SITENAME}}. + +To confirm that this account really does belong to you and reactivate +e-mail features on {{SITENAME}}, open this link in your browser: + +$3 + +If the account does *not* belong to you, follow this link +to cancel the e-mail address confirmation: + +$5 + +This confirmation code will expire at $4.', +'confirmemail_invalidated' => 'E-mail address confirmation canceled', +'invalidateemail' => 'Cancel e-mail confirmation', # Scary transclusion 'scarytranscludedisabled' => '[Interwiki transcluding is disabled]', @@ -3962,6 +4079,7 @@ Please confirm that you really want to recreate this page.", 'table_pager_first' => 'First page', 'table_pager_last' => 'Last page', 'table_pager_limit' => 'Show $1 items per page', +'table_pager_limit_label' => 'Items per page:', 'table_pager_limit_submit' => 'Go', 'table_pager_empty' => 'No results', @@ -4113,6 +4231,7 @@ You can also [[Special:Watchlist/edit|use the standard editor]].', 'version-specialpages' => 'Special pages', 'version-parserhooks' => 'Parser hooks', 'version-variables' => 'Variables', +'version-skins' => 'Skins', 'version-other' => 'Other', 'version-mediahandlers' => 'Media handlers', 'version-hooks' => 'Hooks', @@ -4125,6 +4244,13 @@ You can also [[Special:Watchlist/edit|use the standard editor]].', 'version-version' => '(Version $1)', 'version-svn-revision' => '(r$2)', # only translate this message to other languages if you have to change it 'version-license' => 'License', +'version-poweredby-credits' => "This wiki is powered by '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'others', +'version-license-info' => 'MediaWiki is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + +MediaWiki 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 [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU General Public License] along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA or [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html read it online].', 'version-software' => 'Installed software', 'version-software-product' => 'Product', 'version-software-version' => 'Version', @@ -4196,6 +4322,15 @@ Enter the filename without the "{{ns:file}}:" prefix.', 'tags-edit' => 'edit', 'tags-hitcount' => '$1 {{PLURAL:$1|change|changes}}', +# Special:ComparePages +'comparepages' => 'Compare pages', +'compare-selector' => 'Compare page revisions', +'compare-page1' => 'Page 1', +'compare-page2' => 'Page 2', +'compare-rev1' => 'Revision 1', +'compare-rev2' => 'Revision 2', +'compare-submit' => 'Compare', + # Database error messages 'dberr-header' => 'This wiki has a problem', 'dberr-problems' => 'Sorry! @@ -4213,8 +4348,13 @@ This site is experiencing technical difficulties.', 'htmlform-float-invalid' => 'The value you specified is not a number.', 'htmlform-int-toolow' => 'The value you specified is below the minimum of $1', 'htmlform-int-toohigh' => 'The value you specified is above the maximum of $1', +'htmlform-required' => 'This value is required', 'htmlform-submit' => 'Submit', 'htmlform-reset' => 'Undo changes', 'htmlform-selectorother-other' => 'Other', +# SQLite database support +'sqlite-has-fts' => '$1 with full-text search support', +'sqlite-no-fts' => '$1 without full-text search support', + ); diff --git a/languages/messages/MessagesEn_gb.php b/languages/messages/MessagesEn_gb.php index c6dc017f..d10e3636 100644 --- a/languages/messages/MessagesEn_gb.php +++ b/languages/messages/MessagesEn_gb.php @@ -15,21 +15,18 @@ $specialPageAliases = array( 'Uncategorizedpages' => array( 'UncategorisedPages' ), 'Uncategorizedcategories' => array( 'UncategorisedCategories' ), - 'Uncategorizedimages' => array( 'UncategorisedImages' ), + 'Uncategorizedimages' => array( 'UncategorisedFiles', 'UncategorisedImages' ), 'Uncategorizedtemplates' => array( 'UncategorisedTemplates' ), ); $messages = array( -# Main script and global functions -'nosuchactiontext' => 'The action specified by the URL is not recognised by the wiki', - # Miscellaneous special pages 'uncategorizedpages' => 'Uncategorised pages', 'uncategorizedcategories' => 'Uncategorised categories', 'uncategorizedimages' => 'Uncategorised files', 'uncategorizedtemplates' => 'Uncategorised templates', -# Rollback +# Edit tokens 'sessionfailure' => 'There seems to be a problem with your login session; this action has been cancelled as a precaution against session hijacking. Go back to the previous page, reload that page and then try again.', diff --git a/languages/messages/MessagesEo.php b/languages/messages/MessagesEo.php index 77fa3572..86df4fae 100644 --- a/languages/messages/MessagesEo.php +++ b/languages/messages/MessagesEo.php @@ -31,146 +31,266 @@ */ $namespaceNames = array( - NS_MEDIA => 'Media', - NS_SPECIAL => 'Speciala', + NS_MEDIA => 'Aŭdvidaĵo', + NS_SPECIAL => 'Specialaĵo', NS_TALK => 'Diskuto', - NS_USER => 'Vikipediisto', - NS_USER_TALK => 'Vikipediista_diskuto', - NS_PROJECT_TALK => '$1_diskuto', + NS_USER => 'Uzanto', + NS_USER_TALK => 'Uzanto-Diskuto', + NS_PROJECT_TALK => '$1-Diskuto', NS_FILE => 'Dosiero', - NS_FILE_TALK => 'Dosiera_diskuto', + NS_FILE_TALK => 'Dosiero-Diskuto', NS_MEDIAWIKI => 'MediaWiki', - NS_MEDIAWIKI_TALK => 'MediaWiki_diskuto', + NS_MEDIAWIKI_TALK => 'MediaWiki-Diskuto', NS_TEMPLATE => 'Ŝablono', - NS_TEMPLATE_TALK => 'Ŝablona_diskuto', + NS_TEMPLATE_TALK => 'Ŝablono-Diskuto', NS_HELP => 'Helpo', - NS_HELP_TALK => 'Helpa_diskuto', + NS_HELP_TALK => 'Helpo-Diskuto', NS_CATEGORY => 'Kategorio', - NS_CATEGORY_TALK => 'Kategoria_diskuto', + NS_CATEGORY_TALK => 'Kategorio-Diskuto', +); + +$namespaceAliases = array( + 'Speciala' => NS_SPECIAL, + 'Vikipediisto' => NS_USER, + 'Vikipediista_diskuto' => NS_USER_TALK, + 'Uzulo' => NS_USER, + 'Uzanto' => NS_USER, + 'Uzula_diskuto' => NS_USER_TALK, + 'Uzanta_diskuto' => NS_USER_TALK, + '$1_diskuto' => NS_PROJECT_TALK, + 'Dosiera_diskuto' => NS_FILE_TALK, + 'MediaVikio' => NS_MEDIAWIKI, + 'MediaWiki_diskuto' => NS_MEDIAWIKI_TALK, + 'MediaVikia_diskuto' => NS_MEDIAWIKI_TALK, + 'Ŝablona_diskuto' => NS_TEMPLATE_TALK, + 'Helpa_diskuto' => NS_HELP_TALK, + 'Kategoria_diskuto' => NS_CATEGORY_TALK, ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'Duoblaj alidirektiloj' ), - 'BrokenRedirects' => array( 'Rompitaj alidirektiloj' ), + 'DoubleRedirects' => array( 'Duoblaj_alidirektiloj' ), + 'BrokenRedirects' => array( 'Rompitaj_alidirektiloj' ), 'Disambiguations' => array( 'Apartigiloj' ), 'Userlogin' => array( 'Ensaluti' ), 'Userlogout' => array( 'Elsaluti' ), - 'CreateAccount' => array( 'Krei konton' ), + 'CreateAccount' => array( 'Krei_konton' ), 'Preferences' => array( 'Preferoj' ), 'Watchlist' => array( 'Atentaro' ), - 'Recentchanges' => array( 'Lastaj ŝanĝoj' ), + 'Recentchanges' => array( 'Lastaj_ŝanĝoj' ), 'Upload' => array( 'Alŝuti' ), 'Listfiles' => array( 'Bildolisto' ), - 'Newimages' => array( 'Novaj bildoj' ), - 'Listusers' => array( 'Listo de uzantoj' ), - 'Listgrouprights' => array( 'Gruprajtoj de uzantoj' ), + 'Newimages' => array( 'Novaj_bildoj' ), + 'Listusers' => array( 'Listo_de_uzantoj' ), + 'Listgrouprights' => array( 'Gruprajtoj_de_uzantoj' ), 'Statistics' => array( 'Statistikoj' ), - 'Randompage' => array( 'Hazarda paĝo' ), - 'Lonelypages' => array( 'Neligitaj paĝoj' ), - 'Uncategorizedpages' => array( 'Paĝoj sen kategorio' ), - 'Uncategorizedcategories' => array( 'Kategorioj sen kategorio' ), - 'Uncategorizedimages' => array( 'Bildoj sen kategorio' ), - 'Uncategorizedtemplates' => array( 'Ŝablonoj sen kategorio' ), - 'Unusedcategories' => array( 'Malplenaj kategorioj' ), - 'Unusedimages' => array( 'Neuzataj bildoj' ), - 'Wantedpages' => array( 'Dezirataj paĝoj', 'Rompitaj ligiloj' ), - 'Wantedcategories' => array( 'Dezirataj kategorioj' ), - 'Wantedfiles' => array( 'Dezirataj dosieroj' ), - 'Wantedtemplates' => array( 'Dezirataj ŝablonoj' ), - 'Mostlinked' => array( 'Plej ligitaj paĝoj' ), - 'Mostlinkedcategories' => array( 'Plej ligitaj kategorioj', 'Plej uzataj kategorioj' ), - 'Mostlinkedtemplates' => array( 'Plej ligitaj ŝablonoj', 'Plej uzataj ŝablonoj' ), - 'Mostimages' => array( 'Plej multaj bildoj' ), - 'Mostcategories' => array( 'Plej multaj kategorioj' ), - 'Mostrevisions' => array( 'Plej multaj revizioj' ), - 'Fewestrevisions' => array( 'Plej malmultaj revizioj' ), - 'Shortpages' => array( 'Mallongaj paĝoj' ), - 'Longpages' => array( 'Longaj paĝoj' ), - 'Newpages' => array( 'Novaj paĝoj' ), - 'Ancientpages' => array( 'Malnovaj paĝoj' ), - 'Deadendpages' => array( 'Paĝoj sen interna ligilo' ), - 'Protectedpages' => array( 'Protektitaj paĝoj' ), - 'Protectedtitles' => array( 'Protektitaj titoloj' ), - 'Allpages' => array( 'Ĉiuj paĝoj' ), - 'Prefixindex' => array( 'Indekso de prefiksoj' ), - 'Ipblocklist' => array( 'Forbarlisto de IP-adresoj' ), - 'Specialpages' => array( 'Specialaj paĝoj' ), + 'Randompage' => array( 'Hazarda_paĝo' ), + 'Lonelypages' => array( 'Neligitaj_paĝoj' ), + 'Uncategorizedpages' => array( 'Paĝoj_sen_kategorio' ), + 'Uncategorizedcategories' => array( 'Kategorioj_sen_kategorio' ), + 'Uncategorizedimages' => array( 'Bildoj_sen_kategorio' ), + 'Uncategorizedtemplates' => array( 'Ŝablonoj_sen_kategorio' ), + 'Unusedcategories' => array( 'Malplenaj_kategorioj' ), + 'Unusedimages' => array( 'Neuzataj_bildoj' ), + 'Wantedpages' => array( 'Dezirataj_paĝoj', 'Rompitaj_ligiloj' ), + 'Wantedcategories' => array( 'Dezirataj_kategorioj' ), + 'Wantedfiles' => array( 'Dezirataj_dosieroj' ), + 'Wantedtemplates' => array( 'Dezirataj_ŝablonoj' ), + 'Mostlinked' => array( 'Plej_ligitaj_paĝoj' ), + 'Mostlinkedcategories' => array( 'Plej_ligitaj_kategorioj', 'Plej_uzataj_kategorioj' ), + 'Mostlinkedtemplates' => array( 'Plej_ligitaj_ŝablonoj', 'Plej_uzataj_ŝablonoj' ), + 'Mostimages' => array( 'Plej_ligitaj_bildoj' ), + 'Mostcategories' => array( 'Plej_multaj_kategorioj' ), + 'Mostrevisions' => array( 'Plej_multaj_revizioj' ), + 'Fewestrevisions' => array( 'Plej_malmultaj_revizioj' ), + 'Shortpages' => array( 'Mallongaj_paĝoj' ), + 'Longpages' => array( 'Longaj_paĝoj' ), + 'Newpages' => array( 'Novaj_paĝoj' ), + 'Ancientpages' => array( 'Malnovaj_paĝoj' ), + 'Deadendpages' => array( 'Paĝoj_sen_interna_ligilo' ), + 'Protectedpages' => array( 'Protektitaj_paĝoj' ), + 'Protectedtitles' => array( 'Protektitaj_titoloj' ), + 'Allpages' => array( 'Ĉiuj_paĝoj' ), + 'Prefixindex' => array( 'Indekso_de_prefiksoj' ), + 'Ipblocklist' => array( 'Forbarlisto_de_IP-adresoj', 'IP-adresa_forbarlisto' ), + 'Unblock' => array( 'Malforbari' ), + 'Specialpages' => array( 'Specialaj_paĝoj' ), 'Contributions' => array( 'Kontribuoj' ), - 'Emailuser' => array( 'Retpoŝti uzanton' ), - 'Confirmemail' => array( 'Konfirmi per retpoŝto' ), - 'Whatlinkshere' => array( 'Kio ligas ĉi tien?' ), - 'Recentchangeslinked' => array( 'Rilataj ŝanĝoj' ), - 'Movepage' => array( 'Alinomigi paĝon' ), - 'Blockme' => array( 'Forbari min' ), - 'Booksources' => array( 'Citoj el libroj' ), + 'Emailuser' => array( 'Retpoŝti_uzanton' ), + 'Confirmemail' => array( 'Konfirmi_per_retpoŝto' ), + 'Whatlinkshere' => array( 'Kio_ligas_ĉi_tien?' ), + 'Recentchangeslinked' => array( 'Rilataj_ŝanĝoj' ), + 'Movepage' => array( 'Alinomigi_paĝon' ), + 'Blockme' => array( 'Forbari_min' ), + 'Booksources' => array( 'Citoj_el_libroj' ), 'Categories' => array( 'Kategorioj' ), 'Export' => array( 'Eksporti' ), 'Version' => array( 'Versio' ), - 'Allmessages' => array( 'Ĉiuj mesaĝoj' ), - 'Log' => array( 'Loglibro', 'Loglibroj' ), - 'Blockip' => array( 'Forbari IP-adreson' ), + 'Allmessages' => array( 'Ĉiuj_mesaĝoj' ), + 'Log' => array( 'Protokolo', 'Protokoloj' ), + 'Blockip' => array( 'Forbari_IP-adreson' ), 'Undelete' => array( 'Restarigi' ), 'Import' => array( 'Importi' ), - 'Popularpages' => array( 'Popularaj paĝoj' ), + 'Lockdb' => array( 'Ŝlosi_datumbazon' ), + 'Unlockdb' => array( 'Malŝlosi_datumbazon' ), + 'Userrights' => array( 'Rajtoj_de_uzantoj' ), + 'MIMEsearch' => array( 'MIME-Serĉo' ), + 'FileDuplicateSearch' => array( 'Serĉi_pri_duoblaj_dosieroj' ), + 'Unwatchedpages' => array( 'Neatentitaj_paĝoj' ), + 'Listredirects' => array( 'Listigi_alidirektojn' ), + 'Revisiondelete' => array( 'Forigi_revizion' ), + 'Unusedtemplates' => array( 'Neuzataj_ŝablonoj' ), + 'Randomredirect' => array( 'Hazarda_alidirekto' ), + 'Mypage' => array( 'MiaPaĝo', 'Mia_paĝo' ), + 'Mytalk' => array( 'Mia_diskutpaĝo', 'MiaDiskutpaĝo' ), + 'Mycontributions' => array( 'Miaj_kontribuoj', 'MiajKontribuoj' ), + 'Myuploads' => array( 'Miaj_alŝutaĵoj' ), + 'Listadmins' => array( 'Listigi_administrantojn' ), + 'Listbots' => array( 'Listigi_robotojn' ), + 'Popularpages' => array( 'Popularaj_paĝoj' ), 'Search' => array( 'Serĉi' ), + 'Resetpass' => array( 'Ŝanĝi_pasvorton' ), + 'Withoutinterwiki' => array( 'Sen_intervikia_ligilo' ), + 'MergeHistory' => array( 'Kunigi_historion' ), + 'Filepath' => array( 'Dosiero-pado' ), + 'Invalidateemail' => array( 'Malvalidigi_retpoŝton' ), + 'Blankpage' => array( 'Malplena_paĝo' ), + 'LinkSearch' => array( 'Serĉi_ligilon' ), + 'DeletedContributions' => array( 'Forigitaj_kontribuoj' ), 'Tags' => array( 'Etikedoj' ), + 'Activeusers' => array( 'Aktivaj_uzantoj' ), ); $magicWords = array( - 'redirect' => array( '0', '#ALIDIREKTU', '#REDIRECT' ), - 'nogallery' => array( '0', '__SENGALERIO__', '__NOGALLERY__' ), - 'currentmonth' => array( '1', 'NUNAMONATO', 'CURRENTMONTH', 'CURRENTMONTH2' ), + 'redirect' => array( '0', '#ALIDIREKTU', '#ALIDIREKTI', '#AL', '#REDIRECT' ), + 'notoc' => array( '0', '__NI__', '__NEINDEKSO__', '__NT__', '__NOTOC__' ), + 'nogallery' => array( '0', '__NG__', '__SENBILDARO__', '__SB__', '__SG__', '__SENGALERIO__', '__NOGALLERY__' ), + 'forcetoc' => array( '0', '__FI__', '__FORTUINDEKSON__', '__FT__', '__FORCETOC__' ), + 'toc' => array( '0', '__I__', '__T__', '__INDEKSO__', '__TOC__' ), + 'noeditsection' => array( '0', '__SRS__', '__NES__', '__SENREDAKTISEKCIOJN__', '__SENREDAKTISEKCION__', '__NOEDITSECTION__' ), + 'noheader' => array( '0', '__SENTITOLO__', '__NH__', '__ST__', '__NOHEADER__' ), + 'currentmonth' => array( '1', 'NUNAMONATO', 'NUNAMONATO2', 'CURRENTMONTH', 'CURRENTMONTH2' ), + 'currentmonth1' => array( '1', 'NUNAMONATO1', 'CURRENTMONTH1' ), + 'currentmonthname' => array( '1', 'NUNAMONATNOMO', 'NUNAMONATONOMO', 'NUNAMONATANOMO', 'CURRENTMONTHNAME' ), + 'currentmonthnamegen' => array( '1', 'NUNAMONATNOMOGEN', 'NUNAMONATONOMOGEN', 'NUNAMONATANOMOGEN', 'CURRENTMONTHNAMEGEN' ), + 'currentmonthabbrev' => array( '1', 'NUNAMONATNOMOMAL', 'NUNAMONATONOMOMAL', 'NUNAMONATANOMOMAL', 'CURRENTMONTHABBREV' ), + 'currentday' => array( '1', 'NUNATAGO', 'CURRENTDAY' ), + 'currentday2' => array( '1', 'NUNATAGO2', 'CURRENTDAY2' ), 'currentdayname' => array( '1', 'NUNATAGNOMO', 'CURRENTDAYNAME' ), 'currentyear' => array( '1', 'NUNAJARO', 'CURRENTYEAR' ), 'currenttime' => array( '1', 'NUNATEMPO', 'CURRENTTIME' ), - 'localdayname' => array( '1', 'LOKATAGNOMO', 'LOCALDAYNAME' ), + 'currenthour' => array( '1', 'NUNAHORO', 'CURRENTHOUR' ), + 'localmonth' => array( '1', 'LOKAMONATO', 'LOKAMONATO2', 'LOCALMONTH', 'LOCALMONTH2' ), + 'localmonth1' => array( '1', 'LOKAMONATO1', 'LOCALMONTH1' ), + 'localmonthname' => array( '1', 'LOKAMONATNOMO', 'LOKAMONATONOMO', 'LOKAMONATANOMO', 'LOCALMONTHNAME' ), + 'localmonthnamegen' => array( '1', 'LOKAMONATNOMOGEN', 'LOKAMONATONOMOGEN', 'LOKAMONATANOMOGEN', 'LOCALMONTHNAMEGEN' ), + 'localmonthabbrev' => array( '1', 'LOKAMONATNOMOMAL', 'LOKAMONATONOMOMAL', 'LOKAMONATANOMOMAL', 'LOCALMONTHABBREV' ), + 'localday' => array( '1', 'LOKATAGO', 'LOCALDAY' ), + 'localday2' => array( '1', 'LOKATAGO2', 'LOCALDAY2' ), + 'localdayname' => array( '1', 'LOKATAGNOMO', 'LOKATAGONOMO', 'LOKATAGANOMO', 'LOCALDAYNAME' ), 'localyear' => array( '1', 'LOKAJARO', 'LOCALYEAR' ), 'localtime' => array( '1', 'LOKATEMPO', 'LOCALTIME' ), 'localhour' => array( '1', 'LOKAHORO', 'LOCALHOUR' ), + 'numberofpages' => array( '1', 'NOMBRODEPAĜOJ', 'NOMBRODEPAGXOJ', 'NUMBEROFPAGES' ), 'numberofarticles' => array( '1', 'NOMBRODEARTIKOLOJ', 'NUMBEROFARTICLES' ), 'numberoffiles' => array( '1', 'NOMBRODEDOSIEROJ', 'NUMBEROFFILES' ), 'numberofusers' => array( '1', 'NOMBRODEUZANTOJ', 'NUMBEROFUSERS' ), + 'numberofactiveusers' => array( '1', 'NOMBRODEAKTIVAJUZANTOJ', 'NUMBEROFACTIVEUSERS' ), 'numberofedits' => array( '1', 'NOMBRODEREDAKTOJ', 'NUMBEROFEDITS' ), - 'pagename' => array( '1', 'PAĜNOMO', 'PAGXNOMO', 'PAGENAME' ), + 'numberofviews' => array( '1', 'NOMBRODEVIZITOJ', 'NUMBEROFVIEWS' ), + 'pagename' => array( '1', 'PAĜONOMO', 'PAGXONOMO', 'PAĜNOMO', 'PAGXNOMO', 'PAGENAME' ), + 'pagenamee' => array( '1', 'PAĜONOMOO', 'PAGXONOMOO', 'PAĜNOMOO', 'PAGXNOMOO', 'PAGENAMEE' ), + 'namespace' => array( '1', 'NOMSPACO', 'NAMESPACE' ), + 'namespacee' => array( '1', 'NOMSPACOO', 'NAMESPACEE' ), + 'talkspace' => array( '1', 'DISKUTNOMSPACO', 'TALKSPACE' ), + 'talkspacee' => array( '1', 'DISKUTNOMSPACOO', 'TALKSPACEE' ), + 'fullpagename' => array( '1', 'TUTAPAĜONOMO', 'TUTAPAGXONOMO', 'TUTAPAĜNOMO', 'TUTAPAGXNOMO', 'FULLPAGENAME' ), + 'fullpagenamee' => array( '1', 'TUTAPAĜONOMOO', 'TUTAPAGXONOMOO', 'TUTAPAĜNOMOO', 'TUTAPAGXNOMOO', 'FULLPAGENAMEE' ), + 'subpagename' => array( '1', 'SUBPAĜONOMO', 'SUBPAGXONOMO', 'SUBPAĜNOMO', 'SUBPAGXNOMO', 'SUBPAGENAME' ), + 'subpagenamee' => array( '1', 'SUBPAĜONOMOO', 'SUBPAGXONOMOO', 'SUBPAĜNOMOO', 'SUBPAGXNOMOO', 'SUBPAGENAMEE' ), + 'basepagename' => array( '1', 'PATRAPAĜONOMO', 'PATRAPAGXONOMO', 'PATRAPAĜNOMO', 'PATRAPAGXNOMO', 'BASEPAGENAME' ), + 'basepagenamee' => array( '1', 'PATRAPAĜONOMOO', 'PATRAPAGXONOMOO', 'PATRAPAĜNOMOO', 'PATRAPAGXNOMOO', 'BASEPAGENAMEE' ), + 'talkpagename' => array( '1', 'DISKUTPAĜONOMO', 'DISKUTPAGXONOMO', 'DISKUTPAĜNOMO', 'DISKUTPAGXNOMO', 'TALKPAGENAME' ), + 'talkpagenamee' => array( '1', 'DISKUTPAĜONOMOO', 'DISKUTPAGXONOMOO', 'DISKUTPAĜNOMOO', 'DISKUTPAGXNOMOO', 'TALKPAGENAMEE' ), + 'msg' => array( '0', 'MSĜ:', 'MSGX:', 'MSG:' ), + 'subst' => array( '0', 'ANSTAT:', 'SUBST:' ), + 'safesubst' => array( '0', 'SEKURANSTAT:', 'SAFESUBST:' ), + 'msgnw' => array( '0', 'NVMSĜ:', 'NVMSGX:', 'MSGNW:' ), 'img_thumbnail' => array( '1', 'eta', 'thumbnail', 'thumb' ), 'img_manualthumb' => array( '1', 'eta=$1', 'thumbnail=$1', 'thumb=$1' ), - 'img_right' => array( '1', 'dekstra', 'right' ), - 'img_left' => array( '1', 'maldekstra', 'left' ), + 'img_right' => array( '1', 'dekstra', 'dekstre', 'right' ), + 'img_left' => array( '1', 'maldekstra', 'maldekstre', 'left' ), + 'img_none' => array( '1', 'nenio', 'none' ), 'img_width' => array( '1', '$1ra', '$1px' ), 'img_center' => array( '1', 'centra', 'meza', 'center', 'centre' ), - 'img_framed' => array( '1', 'kadro', 'framed', 'enframed', 'frame' ), + 'img_framed' => array( '1', 'kadro', 'enkadrita', 'enkadrite', 'framed', 'enframed', 'frame' ), 'img_frameless' => array( '1', 'senkadra', 'frameless' ), + 'img_page' => array( '1', 'paĝo=$1', 'paĝo $1', 'pagxo=$1', 'pagxo $1', 'page=$1', 'page $1' ), + 'img_border' => array( '1', 'kadra', 'kadrita', 'kadrigita', 'kadrite', 'kadrigite', 'border' ), + 'img_sub' => array( '1', 'sube', 'sub' ), + 'img_super' => array( '1', 'supre', 'super', 'sup' ), + 'img_top' => array( '1', 'alte', 'top' ), + 'img_text_top' => array( '1', 'tekst-alte', 'text-top' ), + 'img_middle' => array( '1', 'meze', 'middle' ), + 'img_bottom' => array( '1', 'malalte', 'bottom' ), 'img_text_bottom' => array( '1', 'suba-teksto', 'text-bottom' ), - 'sitename' => array( '1', 'TTT-NOMO', 'SITENAME' ), + 'img_link' => array( '1', 'ligilo=$1', 'link=$1' ), + 'img_alt' => array( '1', 'alternative=$1', 'alt=$1' ), + 'int' => array( '0', 'ENE:', 'INT:' ), + 'sitename' => array( '1', 'TTT-NOMO', 'RETPAĜNOMO', 'RETPAGXNOMO', 'RETEJNOMO', 'SITENAME' ), + 'nse' => array( '0', 'NSO:', 'NSE:' ), + 'localurl' => array( '0', 'LOKATTT:', 'LOCALURL:' ), + 'localurle' => array( '0', 'LOKATTTT:', 'LOCALURLE:' ), + 'articlepath' => array( '0', 'ARTIKOLAPADO', 'ARTIKOLAVOJO', 'ARTICLEPATH' ), 'server' => array( '0', 'SERVILO', 'SERVER' ), - 'servername' => array( '0', 'NOMODESERVILO', 'SERVERNAME' ), - 'scriptpath' => array( '0', 'SKRIPTO-VOJO', 'SCRIPTPATH' ), + 'servername' => array( '0', 'NOMODESERVILO', 'SERVILANOMO', 'SERVILONOMO', 'SERVERNAME' ), + 'scriptpath' => array( '0', 'SKRIPTO-VOJO', 'SKRIPTOVOJO', 'SKRIPTVOJO', 'SCRIPTPATH' ), + 'stylepath' => array( '0', 'STILO-VOJO', 'STILOVOJO', 'STILVOJO', 'STYLEPATH' ), 'grammar' => array( '0', 'GRAMATIKO:', 'GRAMMAR:' ), + 'gender' => array( '0', 'SEKSO:', 'GENDER:' ), + 'notitleconvert' => array( '0', '__NEKONVERTUTITOLON__', '__NKT__', '__NTC__', '__NOTITLECONVERT__', '__NOTC__' ), + 'nocontentconvert' => array( '0', '__NEKONVERTUENHAVON__', '__NKH__', '__NCC__', '__NOCONTENTCONVERT__', '__NOCC__' ), + 'currentweek' => array( '1', 'NUNASEMAJNO', 'CURRENTWEEK' ), + 'localweek' => array( '1', 'LOKASEMAJNO', 'LOCALWEEK' ), 'revisionyear' => array( '1', 'JARODEREVIZIO', 'REVISIONYEAR' ), 'plural' => array( '0', 'PLURALA:', 'PLURAL:' ), - 'lc' => array( '0', 'MINUSKLA:', 'LC:' ), - 'uc' => array( '0', 'MAJUSKLA:', 'UC:' ), - 'newsectionlink' => array( '1', '__LIGLIOALNOVASEKCIO__', '__NEWSECTIONLINK__' ), + 'fullurl' => array( '0', 'TUTATTT:', 'FULLURL:' ), + 'fullurle' => array( '0', 'TUTATTTT:', 'FULLURLE:' ), + 'lcfirst' => array( '0', 'MALMAJUSKLEUNUA:', 'MINUSKLEUNUA:', 'MMU:', 'LCFIRST:' ), + 'ucfirst' => array( '0', 'MAJUSKLEUNUA:', 'MALMINUSKLEUNUA:', 'MU:', 'UCFIRST:' ), + 'lc' => array( '0', 'MALMAJUSKLE:', 'MINUSKLE:', 'LC:' ), + 'uc' => array( '0', 'MAJUSKLE:', 'MALMINUSKLE:', 'UC:' ), + 'displaytitle' => array( '1', 'MONTRUTITOLON:', 'DISPLAYTITLE' ), + 'newsectionlink' => array( '1', '__LIGILOALNOVASEKCIO__', '__NSL__', '__LNS__', '__LANS__', '__NEWSECTIONLINK__' ), + 'nonewsectionlink' => array( '1', '__SENLIGILOALNOVASEKCIO__', '__NNSL__', '__SLNS__', '__SLANS__', '__NONEWSECTIONLINK__' ), 'currentversion' => array( '1', 'NUNAVERSIO', 'CURRENTVERSION' ), + 'currenttimestamp' => array( '1', 'NUNATEMPINDIKO', 'CURRENTTIMESTAMP' ), + 'localtimestamp' => array( '1', 'LOKATEMPINDIKO', 'LOCALTIMESTAMP' ), 'language' => array( '0', '#LINGVO:', '#LANGUAGE:' ), 'contentlanguage' => array( '1', 'ENHAVA-LINGVO', 'CONTENTLANGUAGE', 'CONTENTLANG' ), + 'pagesinnamespace' => array( '1', 'PAĜOJENNOMSPACO', 'PAGXOJENNOMSPACO', 'PAĜOJENS', 'PAGXOJENNS', 'PAGESINNAMESPACE:', 'PAGESINNS:' ), 'numberofadmins' => array( '1', 'NOMBRODEADMINOJ', 'NUMBEROFADMINS' ), 'special' => array( '0', 'speciala', 'special' ), 'defaultsort' => array( '1', 'DEFAŬLTORDIGO:', 'DEFAUXLTORDIGO:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ), - 'tag' => array( '0', 'etikedo', 'tag' ), - 'hiddencat' => array( '1', '__KAŜITAKATEGORIO__', '__HIDDENCAT__' ), - 'pagesize' => array( '1', 'PEZODEPAĜO', 'PAGESIZE' ), - 'noindex' => array( '1', '__NENIUINDEKSO__', '__NOINDEX__' ), + 'filepath' => array( '0', 'DOSIERO-VORO', 'DOSIERVOJO', 'FILEPATH:' ), + 'tag' => array( '0', 'marko', 'etikedo', 'tag' ), + 'hiddencat' => array( '1', '__KK__', '__KAŜITAKATEGORIO__', '__KASXITAKATEGORIO__', '__HIDDENCAT__' ), + 'pagesincategory' => array( '1', 'PAĜOJENKATEGORIO', 'PAGXOJENKATEGORIO', 'PAĜOJENKAT', 'PAGXOJENKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ), + 'pagesize' => array( '1', 'PAĜOPEZO', 'PAGXOPEZO', 'PEZODEPAĜO', 'PEZODEPAGXO', 'PAGESIZE' ), + 'index' => array( '1', '__INDEKSU__', '__INDEKSI__', '__INDEX__' ), + 'noindex' => array( '1', '__NEINDEKSU__', '__NIU__', '__NOINDEX__' ), + 'url_path' => array( '0', 'VOJO', 'PATH' ), + 'url_wiki' => array( '0', 'VIKIO', 'WIKI' ), + 'url_query' => array( '0', 'INFORMPETO', 'QUERY' ), ); -$separatorTransformTable = array(',' => ' ', '.' => ',' ); +$separatorTransformTable = array( ',' => ' ', '.' => ',' ); $datePreferences = false; $defaultDateFormat = 'dmy'; $dateFormats = array( 'dmy time' => 'H:i', - 'dmy date' => 'j. M Y', - 'dmy both' => 'H:i, j. M Y', + 'dmy date' => 'j M. Y', + 'dmy both' => 'H:i, j M. Y', ); $messages = array( @@ -182,15 +302,14 @@ $messages = array( 'tog-hidepatrolled' => 'Kaŝi patrolitajn redaktojn en lastaj ŝanĝoj', 'tog-newpageshidepatrolled' => 'Kaŝi patrolitajn paĝojn de listo de novaj paĝoj', 'tog-extendwatchlist' => 'Etendi la atentaron por montri ĉiujn ŝanĝojn, ne nur la plej lastajn', -'tog-usenewrc' => 'Uzi progresan "Lastaj Ŝanĝoj" (bezonas JavaSkripton)', +'tog-usenewrc' => 'Uzi progresan "Lastaj ŝanĝoj" (bezonas JavaSkripton)', 'tog-numberheadings' => 'Aŭtomate numerigi sekciojn', 'tog-showtoolbar' => 'Montri eldonilaron', 'tog-editondblclick' => 'Redakti per duobla alklako (JavaScript)', 'tog-editsection' => 'Montri [redakti]-ligilojn por sekcioj', 'tog-editsectiononrightclick' => 'Ŝalti sekcian redaktadon per dekstra musklako de sekciaj titoloj (kun JavaScript)', -'tog-showtoc' => 'Montri liston de enhavoj (por paĝojn kun pli ol 3 sekciojn)', -'tog-rememberpassword' => 'Memori mian pasvorton por ĉi tiu komputilo', -'tog-editwidth' => 'Plenekranigi la redaktilon', +'tog-showtoc' => 'Montri enhavliston (por paĝoj kun pli ol 3 sekcioj)', +'tog-rememberpassword' => 'Memori mian ensalutadon ĉe ĉi tiu retumilo (daŭrante maksimume $1 {{PLURAL:$1|tagon|tagojn}})', 'tog-watchcreations' => 'Aldoni de mi kreitajn paĝojn al mia atentaro', 'tog-watchdefault' => 'Aldoni al mia atentaro paĝojn redaktitajn de mi', 'tog-watchmoves' => 'Aldoni paĝojn, kiujn mi movas, al mia atentaro', @@ -337,31 +456,21 @@ $messages = array( 'faqpage' => 'Project:Oftaj demandoj', # Vector skin -'vector-action-addsection' => 'Aldoni temon', -'vector-action-delete' => 'Forigi', -'vector-action-move' => 'Alinomigi', -'vector-action-protect' => 'Protekti', -'vector-action-undelete' => 'Malforigi', -'vector-action-unprotect' => 'Malprotekti', -'vector-namespace-category' => 'Kategorio', -'vector-namespace-help' => 'Helpopaĝo', -'vector-namespace-image' => 'Dosiero', -'vector-namespace-main' => 'Paĝo', -'vector-namespace-media' => 'Dosiera paĝo', -'vector-namespace-mediawiki' => 'Mesaĝo', -'vector-namespace-project' => 'Projekta paĝo', -'vector-namespace-special' => 'Speciala paĝo', -'vector-namespace-talk' => 'Diskuto', -'vector-namespace-template' => 'Ŝablono', -'vector-namespace-user' => 'Uzantopaĝo', -'vector-view-create' => 'Krei', -'vector-view-edit' => 'Redakti', -'vector-view-history' => 'Vidi historion', -'vector-view-view' => 'Legi', -'vector-view-viewsource' => 'Vidi fonton', -'actions' => 'Agoj', -'namespaces' => 'Nomspacoj', -'variants' => 'Variantoj', +'vector-action-addsection' => 'Aldoni temon', +'vector-action-delete' => 'Forigi', +'vector-action-move' => 'Alinomigi', +'vector-action-protect' => 'Protekti', +'vector-action-undelete' => 'Malforigi', +'vector-action-unprotect' => 'Malprotekti', +'vector-simplesearch-preference' => 'Ebligi plibonigitajn serĉajn sugestojn (nur Vektora etoso)', +'vector-view-create' => 'Krei', +'vector-view-edit' => 'Redakti', +'vector-view-history' => 'Vidi historion', +'vector-view-view' => 'Legi', +'vector-view-viewsource' => 'Vidi fonton', +'actions' => 'Agoj', +'namespaces' => 'Nomspacoj', +'variants' => 'Variantoj', 'errorpagetitle' => 'Eraro', 'returnto' => 'Reiri al $1.', @@ -422,6 +531,9 @@ Tro da uzantoj provas vidi ĉi tiun paĝon. Bonvolu atendi iom antaŭ vi provas atingi ĝin denove. $1', +'pool-timeout' => 'Tempolimo atingis atendante ŝlosadon', +'pool-queuefull' => 'Atendovico de servilaro estas plena.', +'pool-errorunknown' => 'Nekonata eraro', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Pri {{SITENAME}}', @@ -590,7 +702,8 @@ Ne forgesu fari viajn [[Special:Preferences|{{SITENAME}}-preferojn]].', 'yourname' => 'Salutnomo:', 'yourpassword' => 'Pasvorto:', 'yourpasswordagain' => 'Retajpu pasvorton', -'remembermypassword' => 'Rememori mian pasvorton', +'remembermypassword' => 'Memori mian ensalutadon ĉe ĉi tiu komputilo (daŭrante maksimume $1 {{PLURAL:$1|tagon|tagojn}})', +'securelogin-stick-https' => 'Resti konektita al HTTPS post ensalutado', 'yourdomainname' => 'Via domajno', 'externaldberror' => 'Aŭ estis datenbaza eraro rilate al ekstera aŭtentikigado, aŭ vi ne rajtas ĝisdatigi vian eksteran konton.', 'login' => 'Ensaluti', @@ -607,6 +720,7 @@ Ne forgesu fari viajn [[Special:Preferences|{{SITENAME}}-preferojn]].', 'gotaccount' => "Ĉu vi jam havas konton? '''$1'''.", 'gotaccountlink' => 'Ensaluti', 'createaccountmail' => 'retpoŝte', +'createaccountreason' => 'Kialo:', 'badretype' => 'La pasvortojn kiujn vi tajpis ne egalas.', 'userexists' => 'Salutnomo enigita jam estas uzata. Bonvolu elekti alian nomon.', @@ -627,6 +741,7 @@ Kontrolu vian literumadon, aŭ [[Special:UserLogin/signup|kreu novan konton]].', 'wrongpasswordempty' => 'Vi tajpis malplenan pasvorton. Bonvolu provi denove.', 'passwordtooshort' => 'Pasvortoj devas esti almenaŭ $1 {{PLURAL:$1|1 signon|$1 signojn}}.', 'password-name-match' => 'Via pasvorto devas nepre malsami vian salutnomon.', +'password-login-forbidden' => 'Estas malpermesite uzi tiun ĉi uzulnomon kaj pasvorton.', 'mailmypassword' => 'Retpoŝti novan pasvorton', 'passwordremindertitle' => 'Rememorigo el {{SITENAME}} pri perdita pasvorto', 'passwordremindertext' => 'Iu (probable vi, el IP-adreso $1) petis novan @@ -668,6 +783,9 @@ Bonvolu ĝisatendi antaŭ retrovi.', 'loginlanguagelabel' => 'Lingvo: $1', 'suspicious-userlogout' => 'Via peto por elsaluti estis malpermesita ĉar verŝajne ĝi estis sendita de trompita retumilo aŭ kaŝiganta proksima servilo.', +# E-mail sending +'php-mail-error-unknown' => 'Nekonata eraro en la funkcio mail() de PHP', + # Password reset dialog 'resetpass' => 'Ŝanĝi pasvorton', 'resetpass_announce' => 'Vi ensalutis kun provizora retpoŝtita pasvorto. Por kompleti ensalutadon, vi devas fari novan pasvorton ĉi tien:', @@ -719,10 +837,11 @@ Vi eble jam ŝanĝis vian pasvorton aŭ petis novan provizoran pasvorton.', 'showlivepreview' => 'Aktiva antaŭvido', 'showdiff' => 'Montri ŝanĝojn', 'anoneditwarning' => 'Vi ne estas ensalutinta. Via IP-adreso enregistriĝos en la ŝango-historio de tiu ĉi paĝo.', +'anonpreviewwarning' => "''Vi ne estas ensalutita. La konservo de la paĝo registros vian IP-adreson en kronologio de ĉi tiu paĝo.''", 'missingsummary' => "'''Rememorigilo:''' Vi ne provizis redaktan resumon. Se vi alklakos denove la konservan butonon, via redaktaĵo estos konservita sen resumo.", 'missingcommenttext' => 'Bonvolu entajpi komenton malsupre.', -'missingcommentheader' => "'''Atento:''' Vi ne donis temo/subtitolo por ĉi tiu komento. -Se vi klakos Konservi denove, via redakto estos konservita sen ĝi.", +'missingcommentheader' => "'''Atenton:''' Vi ne provizis temon aŭ subtitolon por ĉi tiu komento. +Se vi klakos \"Konservi\" denove, via redakto estos konservita sen ĝi.", 'summary-preview' => 'Resuma antaŭrigardo:', 'subject-preview' => 'Antaŭrigardo de Temo/Subitolo:', 'blockedtitle' => 'La uzanto estas forbarita.', @@ -793,7 +912,10 @@ La lasta protokolero estas jene montrata por via referenco:', 'usercsspreview' => "'''Notu ke vi nur antaŭvidas vian uzanto-CSS. Ĝi ne jam estis konservita!'''", 'userjspreview' => "'''Memoru ke vi nun nur provas kaj antaŭrigardas vian uzantan javaskripton, ĝi ne estas jam konservita'''", -'userinvalidcssjstitle' => "'''Averto:''' Ne ekzistas aspekto \"\$1\". Rememoru ke individuaj .css-aj kaj .js-aj paĝoj uzas minusklan titolon, ekz. {{ns:user}}:Foo/monobook.css kontraŭe al {{ns:user}}:Foo/Monobook.css.", +'sitecsspreview' => "'''Konsciu ke vi nur antaŭrigardas tiun ĉi CSS.''' +'''Ĝi ne jam estis savita!''", +'sitejspreview' => "'''Konsciu ke vi nur antaŭrigardas tiun ĉi Ĝavaskripta kodon''. ''Ĝi ne jam estis konservita''.", +'userinvalidcssjstitle' => "'''Averto:''' Ne ekzistas aspekto \"\$1\". Rememoru ke individuaj .css-aj kaj .js-aj paĝoj uzas minusklan titolon, ekz. {{ns:user}}:Foo/vector.css kontraŭe al {{ns:user}}:Foo/Vector.css.", 'updated' => '(Ŝanĝo registrita)', 'note' => "'''Noto:'''", 'previewnote' => "'''Memoru, ke ĉi tio estas nur antaŭrigardo kaj ankoraŭ ne konservita!'''", @@ -832,9 +954,6 @@ Vi ankaŭ ĵuras, ke vi mem verkis la tekston, aŭ ke vi kopiis ĝin el fonto se 'copyrightwarning2' => "Bonvolu noti ke ĉiuj kontribuoj al {{SITENAME}} povas esti reredaktita, ŝanĝita aŭ forigita de aliaj kontribuantoj. Se vi ne deziras ke viaj verkoj estu senkompate reredaktitaj, ne publikigu ilin ĉi tie.
    Vi ankaŭ promesu al ni ke vi verkis tion mem aŭ kopiis el publika domajno aŭ simila libera fonto (vidu $1 por detaloj). '''NE PROPONU KOPIRAJTITAJN VERKOJN SEN PERMESO!'''", -'longpagewarning' => "'''AVERTO: Tiu ĉi paĝo longas $1 kilobitokojn; kelkaj retumiloj -povas fuŝi redaktante paĝojn je longo proksime aŭ preter 32 kb. -Se eble, bonvolu disigi la paĝon al malpli grandajn paĝerojn.'''", 'longpageerror' => "'''Eraro: La teksto, kiun vi prezentis, longas $1 kilobajtojn, kio estas pli longa ol la maksimumo de $2 kilobajtoj. Ĝi ne povas esti konservita.'''", 'readonlywarning' => "'''AVERTO: La datumbazo estas ŝlosita por teknika laboro, do vi ne povas konservi viajn redaktojn ĉi-momente. Vi eble volus elkopii kaj englui la tekston al tekstdosiero por konservi ĝin por posta uzo.''' @@ -1011,6 +1130,8 @@ $1", 'logdelete-failure' => "'''Protokola videbleco ne estis akordebla:''' $1", 'revdel-restore' => 'Ŝanĝi videblecon', +'revdel-restore-deleted' => 'forigitaj revizioj', +'revdel-restore-visible' => 'videblaj revizioj', 'pagehist' => 'Paĝa historio', 'deletedhist' => 'Forigita historio', 'revdelete-content' => 'enhavon', @@ -1079,11 +1200,13 @@ Certigu ke ĉi tiu ŝanĝo tenos kontinuecon de la historia paĝo.', # Diffs 'history-title' => 'Redakto-historio de "$1"', 'difference' => '(Malsamoj inter versioj)', +'difference-multipage' => '(Diferenco inter paĝoj)', 'lineno' => 'Linio $1:', 'compareselectedversions' => 'Kompari la elektitajn versiojn', 'showhideselectedversions' => 'Montri/kaŝi elektitajn versiojn', 'editundo' => 'malfari', -'diff-multi' => '({{PLURAL:$1|Unu meza versio|$1 mezaj versioj}} ne montrata.)', +'diff-multi' => '({{PLURAL:$1|Unu intermeza versio|$1 intermezaj versioj}} de {{PLURAL:$2|unu uzanto|$2 uzantoj}} ne estas {{PLURAL:$1|montrata|montrataj}}.)', +'diff-multi-manyusers' => '({{PLURAL:$1|Unu intermeza versio|$1 intermezaj versioj}} de pli ol {{PLURAL:$2|unu uzanto|$2 uzantoj}} ne estas {{PLURAL:$1|montrata|montrataj}}.)', # Search results 'searchresults' => 'Serĉrezultoj', @@ -1118,6 +1241,7 @@ Certigu ke ĉi tiu ŝanĝo tenos kontinuecon de la historia paĝo.', 'searchprofile-everything-tooltip' => 'Traserĉi ĉiun enhavon (inkluzivante diskuto-paĝojn)', 'searchprofile-advanced-tooltip' => 'Serĉi en specialaj nomspacoj', 'search-result-size' => '$1 ({{PLURAL:$2|1 vorto|$2 vortoj}})', +'search-result-category-size' => '{{PLURAL:$1|1 membro|$1 membroj}} ({{PLURAL:$2|1 subkategorio|$2 subkategorioj}}, {{PLURAL:$3|1 dosiero|$3 dosieroj}})', 'search-result-score' => 'Trafeco: $1%', 'search-redirect' => '(alidirektilo $1)', 'search-section' => '(sekcio $1)', @@ -1194,6 +1318,7 @@ indekso pro troŝarĝita servilo. Intertempe, vi povas serĉi per guglo a 'contextlines' => 'Montri liniojn el paĝoj po:', 'contextchars' => 'Montri literojn el linioj ĝis po:', 'stub-threshold' => 'Ago-sojlo por formatigo de ligil-ĝermo (anglalingve: "stub link") (bitikoj):', +'stub-threshold-disabled' => 'Malebligita', 'recentchangesdays' => 'Tagoj montrendaj en lastaj ŝanĝoj:', 'recentchangesdays-max' => '(maksimume $1 {{PLURAL:$1|tago|tagoj}})', 'recentchangescount' => 'Nombro de redaktoj por montri defaŭlte:', @@ -1227,6 +1352,7 @@ Jen hazarde generita valoro por via uzo: $1', 'prefs-files' => 'Dosieroj', 'prefs-custom-css' => 'Propra CSS', 'prefs-custom-js' => 'Propra JS', +'prefs-common-css-js' => 'Komuna CSS/JS por ĉiuj etosoj:', 'prefs-reset-intro' => 'Vi povas uzi ĉi tiun paĝon por restarigi viajn agordojn al la originalaj defaŭltoj. Ĉi tiel ne estus malfarebla.', 'prefs-emailconfirm-label' => 'Retpoŝta konfirmado:', @@ -1264,9 +1390,15 @@ Vi povas ankaŭ elekti permesigi aliaj uzantoj kontakti vin per via uzanto-paĝo 'prefs-advancedrendering' => 'Progresaj opcioj', 'prefs-advancedsearchoptions' => 'Progresaj opcioj', 'prefs-advancedwatchlist' => 'Progresaj opcioj', -'prefs-display' => 'Montraj opcioj', +'prefs-displayrc' => 'Montraj opcioj', +'prefs-displaysearchoptions' => 'Montraj opcioj', +'prefs-displaywatchlist' => 'Montraj opcioj', 'prefs-diffs' => 'Diferencoj', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Ŝajnas ke la retpoŝtadreso estas valida', +'email-address-validity-invalid' => 'Tajpu validan retpoŝtadreson', + # User rights 'userrights' => 'Prizorgi rajtojn de uzantoj', 'userrights-lookup-user' => 'Administri grupojn de uzantoj', @@ -1350,6 +1482,7 @@ Vi povas ankaŭ elekti permesigi aliaj uzantoj kontakti vin per via uzanto-paĝo 'right-hideuser' => 'Forbari salutnomon, kaŝante ĝin de la publiko', 'right-ipblock-exempt' => 'Preterpasi IP-forbarojn, aŭtomatajn forbarojn, kaj ĝeneralajn forbarojn', 'right-proxyunbannable' => 'Preterpasi aŭtomatajn forbarojn de prokuriloj', +'right-unblockself' => 'Malforbari oni mem', 'right-protect' => 'Ŝanĝi protektniveloj kaj redakti protektitajn paĝojn', 'right-editprotected' => 'Redakti protektitajn paĝojn (sen kaskada protektado)', 'right-editinterface' => 'Redakti la uzulan interfacon', @@ -1372,7 +1505,6 @@ Vi povas ankaŭ elekti permesigi aliaj uzantoj kontakti vin per via uzanto-paĝo 'right-siteadmin' => 'Ŝlosi kaj malŝlosi la datumbazon', 'right-reset-passwords' => 'Reŝanĝi pasvortojn de aliaj uzantoj', 'right-override-export-depth' => 'Eksporti paĝojn inkluzivante ligitajn paĝojn ĝis profundeco de 5', -'right-versiondetail' => 'Montri la informon pri la etendita programara versio', 'right-sendemail' => 'Sendi retpoŝton al aliaj uzantoj', # User rights log @@ -1423,14 +1555,9 @@ Vi povas ankaŭ elekti permesigi aliaj uzantoj kontakti vin per via uzanto-paĝo 'recentchanges-legend' => 'Opcioj pri lastaj ŝanĝoj', 'recentchangestext' => 'Per ĉi tiu paĝo vi povas sekvi la plej lastajn ŝanĝojn en la {{SITENAME}}.', 'recentchanges-feed-description' => 'Sekvi la plej lastatempajn ŝanĝojn al la vikio en ĉi tiu fonto.', -'recentchanges-label-legend' => 'Klarigeto: $1.', -'recentchanges-legend-newpage' => '$1 - nova paĝo', 'recentchanges-label-newpage' => 'Ĉi tiu redakto kreis novan paĝon', -'recentchanges-legend-minor' => '$1 - eta redakto', 'recentchanges-label-minor' => 'Ĉi tiu estas eta redakto', -'recentchanges-legend-bot' => '$1 - robota redakto', 'recentchanges-label-bot' => 'Ĉi tiu redakto estis farita per roboto.', -'recentchanges-legend-unpatrolled' => '$1 - nepatrolita redakto', 'recentchanges-label-unpatrolled' => 'Ĉi tiu redakto ne jam estis patrolata.', 'rcnote' => "Jen la {{PLURAL:$1|lasta '''1''' ŝanĝo|lastaj '''$1''' ŝanĝoj}} dum la {{PLURAL:$2|lasta tago|lastaj '''$2''' tagoj}}, ekde $5, $4.", 'rcnotefrom' => "Jen la ŝanĝoj ekde '''$2''' (lastaj ĝis '''$1''').", @@ -1477,6 +1604,9 @@ Paĝoj en [[Special:Watchlist|via atentaro]] estas '''grasaj'''.", 'upload_directory_missing' => 'La alŝuta dosierujo ($1) estas nek trovebla nek kreebla de la retservilo.', 'upload_directory_read_only' => 'La TTT-servilo ne povas alskribi la alŝuto-dosierujon ($1).', 'uploaderror' => 'Eraro okazis dum alŝuto', +'upload-recreate-warning' => "''Atenton: dosiero kun tiu nomo estis forigita aŭ alinomita.''' + +La forigo kaj mova protokoloj por ĉi tiu paĝo estas provizitaj ĉi tie por oportuno:", 'uploadtext' => "Uzu la jenan formularon por alŝuti dosierojn. Vidi aŭ serĉi antaŭe alŝutitajn bildojn, iru al [[Special:FileList|Listo de alŝutitaj dosieroj]]; (re)alŝutaĵoj ankaŭ estas registrita en la [[Special:Log/upload|Protokolo de alŝutoj]], forigoj en la [[Special:Log/delete|protokolo de forigoj]]. @@ -1510,6 +1640,17 @@ Por inkluzivi la dosieron en paĝon, skribu ligilon laŭ la formoj 'filetype-unwanted-type' => "'''\".\$1\"''' estas nevolata dosiero-tipo. {{PLURAL:\$3|Preferata dosiero-tipo|Prefereataj dosiero-tipoj}} estas \$2.", 'filetype-banned-type' => "'''\".\$1\"''' ne estas permesita dosiero-tipo. {{PLURAL:\$3|Permesita dosiero-tipo|Permesitaj dosiero-tipoj}} estas \$2.", 'filetype-missing' => 'Ĉi tiu dosiero ne inkluzivas finaĵon de dosiernomo (kiel ".jpg").', +'empty-file' => 'La dosiero kiun vi alŝutis estis malplena.', +'file-too-large' => 'La dosiero kiun vi alŝutis estis tro granda.', +'filename-tooshort' => 'La dosiera nomo estas tro mallonga.', +'filetype-banned' => 'Ĉi tiu tipo de dosiero estas malpermesita.', +'verification-error' => 'Ĉi tiu dosiero ne pasis dosieran konfirmon.', +'hookaborted' => 'La ŝanĝo kiun vi provis fari estis haltigita de etendaĵa hoko.', +'illegal-filename' => 'La dosiernomo ne estas permesata.', +'overwrite' => 'Anstataŭigo de ekzistanta dosiero ne permesitas.', +'unknown-error' => 'Malkonata eraro okazis.', +'tmp-create-error' => 'Ne povis krei intertempan dosieron.', +'tmp-write-error' => 'Eraro dum skribado de portempa dosiero.', 'large-file' => 'Estas rekomendite, ke dosieroj ne superas grandon de $1 bitokoj; tiu ĉi tiu dosiero pezas $2 bitokojn.', 'largefileserver' => 'Ĉi tiu dosiero estas pli granda ol permesas la servilaj preferoj.', @@ -1538,13 +1679,14 @@ Se vi ankoraŭ volas alŝuti vian dosieron, bonvolu reprovi kun nova nomo. Se vi ankoraŭ volas alŝuti vian dosieron, bonvolu retroigi kaj uzi novan nomon.[[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Ĉi tiu dosiero estas duplikato de la {{PLURAL:$1|jena dosiero|jenaj dosieroj}}:', 'file-deleted-duplicate' => 'Duplikata dosiero de ĉi tiu dosiero ([[:$1]]) estis antaŭe forigita. Vi legu la forigan historion de tiu dosiero antaŭ provi realŝuti ĝin.', -'successfulupload' => 'Alŝuto sukcesis!', 'uploadwarning' => 'Alŝuta averto', 'uploadwarning-text' => 'Bonvolu ŝanĝi la dosieran priskribon kaj reprovi.', 'savefile' => 'Konservi dosieron', 'uploadedimage' => 'alŝutis "[[$1]]"', 'overwroteimage' => 'alŝutis novan version de "[[$1]]"', 'uploaddisabled' => 'Alŝutado estas malŝaltita', +'copyuploaddisabled' => 'Alŝuto de URL malfunkciigita.', +'uploadfromurl-queued' => 'Via alŝuto estis vicatendigata.', 'uploaddisabledtext' => 'Alŝutado de dosieroj estas malebligita.', 'php-uploaddisabledtext' => 'Dosiera alŝutado estas malŝalta en PHP. Bonvolu kontroli la preferon file_uploads.', 'uploadscripted' => 'HTML-aĵo aŭ skriptokodaĵo troviĝas en tiu ĉi tiu dosiero, kiun TTT-foliumilo eble interpretus erare.', @@ -1563,6 +1705,14 @@ Se vi ankoraŭ volas alŝuti vian dosieron, bonvolu retroigi kaj uzi novan nomon Vi konsideru ĉu taŭgas alŝuti ĉi tiu dosiero. jen la protokolo pri forigado por ĉi tiu dosiero por via oportuneco:", 'filename-bad-prefix' => "La nomo de la dosiero kiun vi alŝutas komencas kun '''\"\$1\"''', kiu estas nepriskriba nomo ofte aŭtomate donata de ciferecaj fotiloj. Bonvolu elekti pli priskriban nomon por via bildo.", +'upload-success-subj' => 'Alŝuto sukcesis!', +'upload-success-msg' => 'Via alŝuto el [$2] sukcesis. Ĝi disponeblas ĉi tie [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Alŝuta problemo', +'upload-failure-msg' => 'Estis problemo kun via alŝuto de [$2]: + +$1', +'upload-warning-subj' => 'Averto pri alŝutado', +'upload-warning-msg' => 'Okazis problemo pro via alŝuto el [$2]. Vi povas reveni al la [[Special:Upload/stash/$1|alŝutan formularon]] por korektigi ĉi tiun problemon.', 'upload-proto-error' => 'Malvalida protokolo', 'upload-proto-error-text' => 'Fora alŝuto devas URL-on komence de http://ftp://.', @@ -1612,7 +1762,7 @@ Por optimuma sekureco, img_auth.php estas malŝalta.', 'upload-curl-error28-text' => 'La retejo atendas tro sen respondo. Bonvolu verigi ke la retejo ankoraŭ funkcias kaj reprovi. Vi eble volus trovi dum malpli okupa tempo.', 'license' => 'Permesiloj:', -'license-header' => 'Licencado:', +'license-header' => 'Permesiloj:', 'nolicense' => 'Neniu elektita', 'license-nopreview' => '(Antaŭvido ne montrebla)', 'upload_source_url' => ' (valida, publike atingebla URL-o)', @@ -1625,6 +1775,7 @@ Klaku la kolumnan titolon por ŝanĝi la direkton de ordigo.', 'listfiles_search_for' => 'Serĉi dosieran nomon:', 'imgfile' => 'dosiero', 'listfiles' => 'Listo de alŝutitaj dosieroj', +'listfiles_thumb' => 'Bildeto', 'listfiles_date' => 'Dato', 'listfiles_name' => 'Nomo', 'listfiles_user' => 'Uzanto', @@ -1634,7 +1785,7 @@ Klaku la kolumnan titolon por ŝanĝi la direkton de ordigo.', # File description page 'file-anchor-link' => 'Dosiero', -'filehist' => 'Historio de dosiero', +'filehist' => 'Dosiera historio', 'filehist-help' => 'Klaku daton/tempon por rigardi la dosieron kiel ĝin ŝajnitan tiame.', 'filehist-deleteall' => 'forigi ĉiujn', 'filehist-deleteone' => 'forigi', @@ -1738,8 +1889,8 @@ Bonvolu kontroli aliajn ligilojn al la ŝablonoj antaŭ ol forigi ilin.', 'statistics-edits' => 'Paĝaj redaktoj ekde {{SITENAME}} estis starigita', 'statistics-edits-average' => 'Averaĝa kvanto de redaktoj je paĝo', 'statistics-views-total' => 'Vidoj entutaj', +'statistics-views-total-desc' => 'Ne inkluzivante vidojn al ne-ekzistantaj paĝoj kaj specialaj paĝoj', 'statistics-views-peredit' => 'Vidoj po redakto', -'statistics-jobqueue' => 'Longeco de [http://www.mediawiki.org/wiki/Manual:Job_queue vico de prokrastita reenkategoriado]', 'statistics-users' => 'Registritaj [[Special:ListUsers|uzantoj]]', 'statistics-users-active' => 'Aktivaj uzantoj', 'statistics-users-active-desc' => 'Uzantoj kiuj faris agon en la {{PLURAL:$1|lasta tago|lastaj $1 tagoj}}', @@ -1754,7 +1905,7 @@ Paĝo estas traktata kiel apartigilo se ĝi uzas ŝablonon kiu estas ligita de [ 'doubleredirects' => 'Duoblaj alidirektadoj', 'doubleredirectstext' => 'Ĉi tiu paĝo montras paĝojn kiuj alidirektas al aliaj alidirektiloj. Ĉiu vico enhavas ligilojn ĉe la unua kaj dua alidirektadoj, kaj la unua linio de la dua alidirektado, kiu ĝenerale montras la "veran" celpaĝon, kiu celu la unuan alidirektadon. -Forstrekitaj listeroj estis riparitaj.', +Forstrekitaj listeroj estis riparitaj.', 'double-redirect-fixed-move' => '[[$1]] estis alinomita; ĝi nun alidirektas al [[$2]]', 'double-redirect-fixer' => 'Alidirektila riparilo', @@ -1777,6 +1928,8 @@ Paĝo estas traktata kiel apartigilo se ĝi uzas ŝablonon kiu estas ligita de [ 'nmembers' => '{{PLURAL:$1|unu membro|$1 membroj}}', 'nrevisions' => '$1 {{PLURAL:$1|versio|versioj}}', 'nviews' => '{{PLURAL:$1|unufoje|$1 fojojn}}', +'nimagelinks' => 'Uzita en $1 {{PLURAL:$1|paĝo|paĝoj}}', +'ntransclusions' => 'uzita en $1 {{PLURAL:$1|paĝo|paĝoj}}', 'specialpage-empty' => 'Ne estas rezultoj por ĉi tiu raporto.', 'lonelypages' => 'Neligitaj paĝoj', 'lonelypagestext' => 'La jenaj paĝoj ne estas ligitaj de aŭ transikluzivita en aliaj paĝoj en {{SITENAME}}.', @@ -1935,34 +2088,40 @@ Estas [[{{MediaWiki:Listgrouprights-helppage}}|aldona informo]] pri individuaj r 'listgrouprights-removegroup-self-all' => 'Povas forigi ĉiujn grupojn de propra konto', # E-mail user -'mailnologin' => 'Neniu alsendota adreso', -'mailnologintext' => 'Vi nepre estu [[Special:UserLogin|salutanta]] kaj havanta validan retpoŝtadreson en viaj [[Special:Preferences|preferoj]] por retpoŝti al aliaj uzantoj.', -'emailuser' => 'Retpoŝti ĉi tiun uzanton', -'emailpage' => 'Retpoŝti uzanton', -'emailpagetext' => 'Vi povas uzi la jenan paĝon por sendi retpoŝtan mesaĝon al ĉi tiu uzanto. +'mailnologin' => 'Neniu alsendota adreso', +'mailnologintext' => 'Vi nepre estu [[Special:UserLogin|salutanta]] kaj havanta validan retpoŝtadreson en viaj [[Special:Preferences|preferoj]] por retpoŝti al aliaj uzantoj.', +'emailuser' => 'Retpoŝti ĉi tiun uzanton', +'emailpage' => 'Retpoŝti uzanton', +'emailpagetext' => 'Vi povas uzi la jenan paĝon por sendi retpoŝtan mesaĝon al ĉi tiu uzanto. La retadreso kiun vi enigis en [[Special:Preferences|viaj preferoj]] aperos kiel la "De" adreso de la retpoŝto, do la ricevonto eblos respondi rekte al vi.', -'usermailererror' => 'Resendita retmesaĝa erarsubjekto:', -'defemailsubject' => '{{SITENAME}} retmesaĝo', -'noemailtitle' => 'Neniu retpoŝtadreso', -'noemailtext' => 'Ĉi tiu uzanto ne donis validan retadreson.', -'nowikiemailtitle' => 'Retpoŝto ne permesita', -'nowikiemailtext' => 'Ĉi tiu uzanto elektis ne ricevi retpoŝton de aliaj uzantoj.', -'email-legend' => 'Sendi retpoŝton al alia {{SITENAME}}-uzanto', -'emailfrom' => 'De:', -'emailto' => 'Al:', -'emailsubject' => 'Temo:', -'emailmessage' => 'Mesaĝo:', -'emailsend' => 'Sendi', -'emailccme' => 'Retpoŝti al mi kopion de mia mesaĝo.', -'emailccsubject' => 'Kopio de via mesaĝo al $1: $2', -'emailsent' => 'Retmesaĝo sendita', -'emailsenttext' => 'Via retmesaĝo estas sendita.', -'emailuserfooter' => 'Ĉi tiun retpoŝton sendis $1 al $2 per funkcio "Email user" ĉe {{SITENAME}}.', +'usermailererror' => 'Resendita retmesaĝa erarsubjekto:', +'defemailsubject' => '{{SITENAME}} retmesaĝo', +'usermaildisabled' => 'Uzula retpoŝto malŝaltis', +'usermaildisabledtext' => 'Vi ne povas sendi retpoŝton al aliaj uzantoj en ĉi tiu vikio', +'noemailtitle' => 'Neniu retpoŝtadreso', +'noemailtext' => 'Ĉi tiu uzanto ne donis validan retadreson.', +'nowikiemailtitle' => 'Retpoŝto ne permesita', +'nowikiemailtext' => 'Ĉi tiu uzanto elektis ne ricevi retpoŝton de aliaj uzantoj.', +'email-legend' => 'Sendi retpoŝton al alia {{SITENAME}}-uzanto', +'emailfrom' => 'De:', +'emailto' => 'Al:', +'emailsubject' => 'Temo:', +'emailmessage' => 'Mesaĝo:', +'emailsend' => 'Sendi', +'emailccme' => 'Retpoŝti al mi kopion de mia mesaĝo.', +'emailccsubject' => 'Kopio de via mesaĝo al $1: $2', +'emailsent' => 'Retmesaĝo sendita', +'emailsenttext' => 'Via retmesaĝo estas sendita.', +'emailuserfooter' => 'Ĉi tiun retpoŝton sendis $1 al $2 per funkcio "Email user" ĉe {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Lasanta sisteman mesaĝon.', +'usermessage-editor' => 'Mesaĝanto de sistemo', # Watchlist 'watchlist' => 'Atentaro', 'mywatchlist' => 'Atentaro', -'watchlistfor' => '(por $1)', +'watchlistfor2' => 'Por $1 $2', 'nowatchlist' => 'Vi ne jam elektis priatenti iun ajn paĝon.', 'watchlistanontext' => 'Bonvolu $1 por vidi aŭ redakti erojn en via atentaro.', 'watchnologin' => 'Ne ensalutinta', @@ -2075,7 +2234,10 @@ La lasta redaktinto estis [[User:$3|$3]] ([[User talk:$3|diskuto]]{{int:pipe-sep 'revertpage' => 'Malfaris redaktojn de [[Special:Contributions/$2|$2]] ([[User talk:$2|diskuto]]) al la lasta versio de [[User:$1|$1]]', 'revertpage-nouser' => 'Restarigita redaktoj de (salutnomo forigita) al lasta revizio de [[User:$1|$1]]', 'rollback-success' => 'Restaris redaktojn de $1; ŝanĝis al lasta versio de $2.', -'sessionfailure' => 'Ŝajnas ke estas problemo kun via ensalutado; + +# Edit tokens +'sessionfailure-title' => 'Seanco malsukcesis', +'sessionfailure' => 'Ŝajnas ke estas problemo kun via ensalutado; Ĉi ago estis nuligita por malhelpi fiensalutadon. Bonvolu alklalki la reirbutonon kaj reŝarĝi la paĝon el kiu vi venas, kaj provu denove.', @@ -2207,18 +2369,22 @@ $1', 'month' => 'Ekde monato (kaj pli frue):', 'year' => 'Ekde jaro (kaj pli frue):', -'sp-contributions-newbies' => 'Montri nur kontribuojn de novaj kontoj', -'sp-contributions-newbies-sub' => 'Kontribuoj de novaj uzantoj. Forigitaj paĝoj ne estas montritaj.', -'sp-contributions-newbies-title' => 'Uzulaj kontribuoj de novaj kontoj', -'sp-contributions-blocklog' => 'Protokolo de forbaroj', -'sp-contributions-deleted' => 'forigitaj kontribuoj de uzantoj', -'sp-contributions-logs' => 'protokoloj', -'sp-contributions-talk' => 'diskuto', -'sp-contributions-userrights' => 'administri rajtojn de uzantoj', -'sp-contributions-blocked-notice' => 'La uzanto nune estas forbarita. Jen la lasta blokada listero en protokolo:', -'sp-contributions-search' => 'Serĉado de kontribuoj', -'sp-contributions-username' => 'IP-adreso aŭ salutnomo:', -'sp-contributions-submit' => 'Serĉi', +'sp-contributions-newbies' => 'Montri nur kontribuojn de novaj kontoj', +'sp-contributions-newbies-sub' => 'Kontribuoj de novaj uzantoj. Forigitaj paĝoj ne estas montritaj.', +'sp-contributions-newbies-title' => 'Uzulaj kontribuoj de novaj kontoj', +'sp-contributions-blocklog' => 'Protokolo de forbaroj', +'sp-contributions-deleted' => 'forigitaj kontribuoj de uzantoj', +'sp-contributions-uploads' => 'alŝutoj', +'sp-contributions-logs' => 'protokoloj', +'sp-contributions-talk' => 'diskuto', +'sp-contributions-userrights' => 'administri rajtojn de uzantoj', +'sp-contributions-blocked-notice' => 'La uzanto nune estas forbarita. Jen la lasta blokada listero en protokolo:', +'sp-contributions-blocked-notice-anon' => 'Ĉi tiu IP-adreso estas nune forbarita. +Jen la lasta ero de la forbara protokolo:', +'sp-contributions-search' => 'Serĉado de kontribuoj', +'sp-contributions-username' => 'IP-adreso aŭ salutnomo:', +'sp-contributions-toponly' => 'Montru nur ŝanĝojn kiuj estas la plej lastaj revizioj', +'sp-contributions-submit' => 'Serĉi', # What links here 'whatlinkshere' => 'Ligiloj ĉi tien', @@ -2277,7 +2443,6 @@ Vidu la [[Special:IPBlockList|liston de IP-forbaroj]] por kontroli.', 'ipb-edit-dropdown' => 'Redakti kialojn por forbaro.', 'ipb-unblock-addr' => 'Restarigi $1', 'ipb-unblock' => 'Malforbari salutnomon aŭ IP-adreson', -'ipb-blocklist-addr' => 'Ekzistantaj forbaroj por $1', 'ipb-blocklist' => 'Vidi ekzistantajn forbarojn', 'ipb-blocklist-contribs' => 'Kontribuoj de $1', 'unblockip' => 'Malforbari IP-adreson/nomon', @@ -2291,7 +2456,7 @@ forbarita IP-adreso/nomo la povon enskribi en la vikio.', 'ipblocklist-username' => 'Salutnomo aŭ IP-adreso:', 'ipblocklist-sh-userblocks' => '$1 kontaj forbaroj', 'ipblocklist-sh-tempblocks' => '$1 provizoraj forbaroj', -'ipblocklist-sh-addressblocks' => '$1 unuopaj IP-adresaj foraroj', +'ipblocklist-sh-addressblocks' => '$1 unuopaj IP-adresaj forbaroj', 'ipblocklist-submit' => 'Serĉi', 'ipblocklist-localblock' => 'Loka forbaro', 'ipblocklist-otherblocks' => '{{PLURAL:$1|Alia forbaro|Aliaj forbaroj}}', @@ -2346,6 +2511,8 @@ $1 estas jam forbarita. Ĉu vi volas ŝanĝi la opciojn?', 'sorbs_create_account_reason' => 'Via IP-adreso estas listigita kiel malferma prokurilo en la DNSBL uzata de {{SITENAME}}. Vi ne rajtas krei konton.', 'cant-block-while-blocked' => 'Vi ne povas forbari aliajn uzantojn dum vi estas forbarita.', 'cant-see-hidden-user' => 'La uzanto kiun vi provas forbari jam estis forbarita kaj kaŝita. Kiel vi ne havas la rajton kaŝi uzanton, vi ne povas vidi aŭ redakti la forbaron de la uzanto.', +'ipbblocked' => 'Vi ne povas forbari aŭ malforbari aliajn uzantojn, ĉar vi mem estas forbarita', +'ipbnounblockself' => 'Vi ne rajtas malforbari vin mem', # Developer tools 'lockdb' => 'Ŝlosi datumbazon', @@ -2387,6 +2554,17 @@ Pro tio, vi ja povos removi la paĝon je la antaŭa titolo se vi mistajpus, kaj '''AVERTO!''' Tio povas esti drasta kaj neatendita ŝanĝo por populara paĝo; bonvolu certigi vin, ke vi komprenas ties konsekvencojn antaŭ ol vi antaŭeniru.", +'movepagetext-noredirectfixer' => "Per jena formularo vi povas alinomigi paĝon, kaj movi tutan ĝian redaktohistorion al la nova nomo. +La antaŭa titolo alidirektigos onin al la nova titolo. +Kontrolu pri [[Special:DoubleRedirects|duoblajn]] aŭ [[Special:BrokenRedirects|nefunkciantajn alidirektilojn]]. +Vi respondecas pri tio ke ligoj restas montrantaj ĝustadirekten. + +Konsciu ke la paĝo '''ne'' estas movota se jam ekzistas paĝo havanta la novan titolon, krom se ĝi maplenas aŭ estas alidirektilo sen antaŭa redaktohistorio. +Tio ĉi signifas ke vi povas alinomigi paĝon reen al antaŭa nomo se vi eraras, kaj vi ke vi ne povas anstataŭigi ekzistantan paĝon. + +'''Averto!'' +Eblas ke tio ĉi estas drasta kaj neatendita ŝanĝo de populara paĝo; +Antaŭ daŭrigi, bonvolu certiĝi, ke vi komprenas la konsekvencojn de tiuj ĉi ŝanĝo.", 'movepagetalktext' => "La movo aŭtomate kunportos la diskuto-paĝon, se tia ekzistas, '''krom se:''' *Vi movas la paĝon tra nomspacoj (ekz de ''Nomo'' je ''User:Nomo''), *Ne malplena diskuto-paĝo jam ekzistas je la nova nomo, aŭ @@ -2445,6 +2623,7 @@ La celartikolo "[[:$1]]" jam ekzistas. Ĉu vi volas forigi ĝin por krei spacon 'immobile-source-page' => 'Ĉi tiu paĝo ne estas movebla.', 'immobile-target-page' => 'Ne povas movi al tiu destina titolo.', 'imagenocrossnamespace' => 'Ne povas movi dosieron al nedosiera nomspaco', +'nonfile-cannot-move-to-file' => 'Ne povas movi ne-dosieron al dosiera nomspaco', 'imagetypemismatch' => 'La nova dosierfinaĵo ne kongruas ĝian dosiertipon.', 'imageinvalidfilename' => 'La cela dosiernomo estas nevalida', 'fix-double-redirects' => 'Ĝisdatigi iujn alidirektilojn kiuj direktas al la originala titolo', @@ -2525,6 +2704,7 @@ Datoj de versioj kaj nomoj de redaktantoj estos preservitaj. 'importstart' => 'Importante paĝojn...', 'import-revision-count' => '$1 {{PLURAL:$1|versio|versioj}}', 'importnopages' => 'Neniu paĝo por importi.', +'imported-log-entries' => '{{PLURAL:$1|Protokollinio|Protokollinioj}} $1 {{PLURAL:$1|importita|importitaj}}', 'importfailed' => 'Malsukcesis la importo: $1', 'importunknownsource' => 'Nekonata fonta speco de alŝuto', 'importcantopen' => 'Ne povas malfermi import-dosieron', @@ -2617,6 +2797,8 @@ Datoj de versioj kaj nomoj de redaktantoj estos preservitaj. 'tooltip-upload' => 'Ekalŝuti', 'tooltip-rollback' => '"Restarigi antaŭan" restarigas redakto(j)n al ĉi tiu paĝo de la lasta kontribuanto per unu klako.', 'tooltip-undo' => '"Malfari" malfaris ĉi tiun redakton kaj malfermas la redakto-paĝon en antaŭvida reĝimo. Permesas aldoni kialon en la resumo.', +'tooltip-preferences-save' => 'Konservi preferojn', +'tooltip-summary' => 'Enigu mallongan resumon', # Metadata 'nodublincore' => 'Dublin Core RDF metadatumo estas malebligita por ĉi servilo.', @@ -2713,19 +2895,21 @@ $1', 'nextdiff' => 'Pli nova redakto →', # Media information -'mediawarning' => "'''Warning''': This file type may contain malicious code. -By executing it, your system may be compromised.", +'mediawarning' => "'''Atenton!''': Ĉi tiu dosiero eble enhavas malican kodadon, per ĝia ruligo via sistemo povus endanĝeriĝi.", 'imagemaxsize' => "Limo por bildoj:
    ''(por dosieraj priskribo-paĝoj)''", 'thumbsize' => 'Grandeco de bildetoj:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|paĝo|paĝoj}}', -'file-info' => '(pezo de dosiero: $1, MIME-tipo: $2)', -'file-info-size' => '($1 × $2 rastrumeroj, dosiera grandeco: $3, MIME-tipo: $4)', +'file-info' => 'pezo de dosiero: $1, MIME-tipo: $2', +'file-info-size' => '$1 × $2 rastrumeroj, dosiera grandeco: $3, MIME-tipo: $4', 'file-nohires' => 'Nenia pli granda distingivo havebla.', -'svg-long-desc' => '(SVG-dosiero, $1 × $2 rastrumeroj, grandeco de dosiero: $3)', +'svg-long-desc' => 'SVG-dosiero, $1 × $2 rastrumeroj, grandeco de dosiero: $3', 'show-big-image' => 'Plena distingivo', 'show-big-image-thumb' => 'Grandeco de ĉi antaŭvido: $1 × $2 rastrumeroj', 'file-info-gif-looped' => 'ripeta GIF', 'file-info-gif-frames' => '$1 {{PLURAL:$1|ĉelo|ĉeloj}}', +'file-info-png-looped' => 'ripetita', +'file-info-png-repeat' => 'Ludis $1 fojo{{PLURAL:$1||j}}n', +'file-info-png-frames' => '$1 kadro{{PLURAL:$1||j}}', # Special:NewFiles 'newimages' => 'Galerio de novaj dosieroj', @@ -2880,6 +3064,7 @@ Sekvaj ligilo en la sama linio estas konsiderata kiel esceptoj (paĝoj kiel la b 'exif-gpsareainformation' => 'Nomo de GPS areo', 'exif-gpsdatestamp' => 'GPS dato', 'exif-gpsdifferential' => 'GPS diferenca korektado', +'exif-objectname' => 'Mallonga titolo', # EXIF attributes 'exif-compression-1' => 'Nedensigita', @@ -2961,6 +3146,8 @@ Sekvaj ligilo en la sama linio estas konsiderata kiel esceptoj (paĝoj kiel la b 'exif-sensingmethod-7' => 'Trilinia sensilo', 'exif-sensingmethod-8' => 'Sensilo de laŭvicaj liniaj koloroj', +'exif-filesource-3' => 'Cifereca senmova fotilo', + 'exif-scenetype-1' => 'Rekte fotita bildo', 'exif-customrendered-0' => 'Norma proceso', @@ -3037,25 +3224,25 @@ Sekvaj ligilo en la sama linio estas konsiderata kiel esceptoj (paĝoj kiel la b 'limitall' => 'ĉiuj', # E-mail address confirmation -'confirmemail' => 'Konfirmi retadreson', -'confirmemail_noemail' => 'Vi ne havas validan retpoŝtan adreson notitan en viaj [[Special:Preferences|Preferoj]].', -'confirmemail_text' => 'Ĉi tiu vikio postulas ke vi validigu vian retadreson antaŭ ol uzadi la retmesaĝpreferojn. Bonvolu alklaki la suban butonon por sendi konfirmesaĝon al via adreso. La mesaĝo entenos ligilon kun kodo; bonvolu alŝuti la ligilon en vian foliumilon por konfirmi ke via retadreso validas.', -'confirmemail_pending' => 'Konfirma kodo estis jam repoŝtis al vi; se vi lastatempe kreis vian konton, vi eble volus atenti kelkajn minutojn por ĝi aliĝi antaŭ vi petus novan kodon.', -'confirmemail_send' => 'Retmesaĝi konfirmkodon', -'confirmemail_sent' => 'Konfirma retmesaĝo estas sendita.', -'confirmemail_oncreate' => 'Konfirma kodo estis sendita al via retpoŝta adreso. +'confirmemail' => 'Konfirmi retadreson', +'confirmemail_noemail' => 'Vi ne havas validan retpoŝtan adreson notitan en viaj [[Special:Preferences|Preferoj]].', +'confirmemail_text' => 'Ĉi tiu vikio postulas ke vi validigu vian retadreson antaŭ ol uzadi la retmesaĝpreferojn. Bonvolu alklaki la suban butonon por sendi konfirmesaĝon al via adreso. La mesaĝo entenos ligilon kun kodo; bonvolu alŝuti la ligilon en vian foliumilon por konfirmi ke via retadreso validas.', +'confirmemail_pending' => 'Konfirma kodo estis jam repoŝtis al vi; se vi lastatempe kreis vian konton, vi eble volus atenti kelkajn minutojn por ĝi aliĝi antaŭ vi petus novan kodon.', +'confirmemail_send' => 'Retmesaĝi konfirmkodon', +'confirmemail_sent' => 'Konfirma retmesaĝo estas sendita.', +'confirmemail_oncreate' => 'Konfirma kodo estis sendita al via retpoŝta adreso. Ĉi kodo ne estas bezonata ensaluti, sed vi bezonos doni ĝin antaŭ uzante iujn ajn retpoŝt-bazitajn ecojn de la vikio.', -'confirmemail_sendfailed' => '{{SITENAME}} ne eblis sendi vian konfirmretmesaĝon. +'confirmemail_sendfailed' => '{{SITENAME}} ne eblis sendi vian konfirmretmesaĝon. Bonvolu kontroli vian retadreson por nevalidaj signoj. Retpoŝta programo respondis: $1', -'confirmemail_invalid' => 'Nevalida konfirmkodo. La kodo eble ne plu validas.', -'confirmemail_needlogin' => 'Vi devas $1 por konfirmi vian retpoŝtan adreson.', -'confirmemail_success' => 'Via retadreso estas konfirmita. Vi povas nun ensaluti kaj ĝui la vikion.', -'confirmemail_loggedin' => 'Via retadreso estas nun konfirmita.', -'confirmemail_error' => 'Io misokazis dum konservo de via konfirmo.', -'confirmemail_subject' => 'Konfirmo de retadreso por {{SITENAME}}', -'confirmemail_body' => 'Iu, verŝajne vi, ĉe la IP-adreso $1, +'confirmemail_invalid' => 'Nevalida konfirmkodo. La kodo eble ne plu validas.', +'confirmemail_needlogin' => 'Vi devas $1 por konfirmi vian retpoŝtan adreson.', +'confirmemail_success' => 'Via retadreso estas konfirmita. Vi povas nun ensaluti kaj ĝui la vikion.', +'confirmemail_loggedin' => 'Via retadreso estas nun konfirmita.', +'confirmemail_error' => 'Io misokazis dum konservo de via konfirmo.', +'confirmemail_subject' => 'Konfirmo de retadreso por {{SITENAME}}', +'confirmemail_body' => 'Iu, verŝajne vi, ĉe la IP-adreso $1, enregistrigis konton "$2" ĉe {{SITENAME}} kun ĉi retadreso ĉe {{SITENAME}}. Konfirmi ke ĉi tiu konto ja apartenas al vi kaj por malŝlosi @@ -3070,8 +3257,35 @@ $5 Ĉi tiu konfirmokodo eksvalidiĝos je $4.', -'confirmemail_invalidated' => 'Konfirmado de retadreso estas nuligita', -'invalidateemail' => 'Nuligi konfirmadon de retadreso', +'confirmemail_body_changed' => 'Iu, verŝajne vi, de IP-adreso $1, +ŝanĝis la retadreson de la konto "$2" al ĉi tiu adreso en {{SITENAME}}. + +Por konfirmi, ke ĉi tiu konto ja apartenas al vi kaj reaktivigi +retpoŝtajn ecojn en {{SITENAME}}, sekvu ĉi tiun ligilon en via retumilo: + +$3 + +Se la konto *ne* apartenas al vi, sekvu ĉi tiun ligilon +por nuligi la retadresan konfirmadon: + +$5 + +Ĉi tiu konfirmkodo malvalidiĝos je $4.', +'confirmemail_body_set' => 'Iu, supozeble vi mem, je IP-adreso $1, +agordis la retpoŝadreson de konto "$2" al ĉi tiu adreso je {{SITENAME}}. + +Por konfirmi ke ĉi tiu konto vere apertenas al vi kaj refunkciigi la retpoŝtfunkciojn je {{SITENAME}}, bonvolu +malfermi la jenon ligon per via foliumilo: + +$3 + +Se ĉi tiu konto *ne* apertenas al vi, bonvolu sekvi jenan ligon por nuligi la konfirmon pir la retpoŝadreso: + +$5 + +Ĉi tiu konfirma kodo eksvalidiĝos je $4', +'confirmemail_invalidated' => 'Konfirmado de retadreso estas nuligita', +'invalidateemail' => 'Nuligi konfirmadon de retadreso', # Scary transclusion 'scarytranscludedisabled' => '[Intervikia transinkluzivado estas malebligita.]', @@ -3087,7 +3301,7 @@ $1', # Delete conflict 'deletedwhileediting' => "'''Averto''': Ĉi tiu paĝo estis forigita post vi ekredaktis!", -'confirmrecreate' => "Uzanto [[User:$1|$1]] ([[User talk:$1|diskuto]]) forigis ĉi paĝon post vi ekredaktis ĝin kun kialo: +'confirmrecreate' => "Uzanto [[User:$1|$1]] ([[User talk:$1|diskuto]]) forigis ĉi tiun paĝon post vi ekredaktis ĝin kun kialo: : ''$2'' Bonvolu konfirmi ke vi ja volas rekrei la paĝon.", 'recreate' => 'Rekrei', @@ -3111,6 +3325,7 @@ Bonvolu konfirmi ke vi ja volas rekrei la paĝon.", 'table_pager_first' => 'Unua paĝo', 'table_pager_last' => 'Lasta paĝo', 'table_pager_limit' => 'Montri $1 aĵojn por paĝo', +'table_pager_limit_label' => 'Eroj por paĝo:', 'table_pager_limit_submit' => 'Ek', 'table_pager_empty' => 'Neniaj rezultoj', @@ -3165,6 +3380,7 @@ Vi povas ankaŭ [[Special:Watchlist/edit|redakti norme]].', 'version-specialpages' => 'Specialaj paĝoj', 'version-parserhooks' => 'Sintaksaj hokoj', 'version-variables' => 'Variabloj', +'version-skins' => 'Etosoj', 'version-other' => 'Alia', 'version-mediahandlers' => 'Mediaj traktiloj', 'version-hooks' => 'Hokoj', @@ -3176,6 +3392,13 @@ Vi povas ankaŭ [[Special:Watchlist/edit|redakti norme]].', 'version-hook-subscribedby' => 'Abonita de', 'version-version' => '(Versio $1)', 'version-license' => 'Permesilo', +'version-poweredby-credits' => "Ĉi tiu vikio funkcias per '''[http://www.mediawiki.org/ MediaWiki]''', aŭtorrajto © 2001–$1 $2.", +'version-poweredby-others' => 'aliaj', +'version-license-info' => 'MediaWiki estas libera programaro. Vi povas redistribui ĝin kaj/aŭ modifi ĝin sub la kondiĉoj de la GNU General Public Licens (GNU Ĝenerala Publika Permesilo) en ties eldono de la Free Software Foundation (Libera Softvara Fondaĵo) - aŭ versio 2 de la Permesilo, aŭ (laŭ via elekto) iu ajn posta versio. + +Tiun ĉi verkon ni distribuas esperante, ke ĝi utilos, sed SEN IA AJN GARANTIO; eĉ sen la implica garantio de SURMERKATIGEBLECO aŭ TAŬGECO POR IA DIFINITA CELO. Vidu GNU General Public License por pliaj detaloj. + +Oni devis doni al vi [{{SERVER}}{{SCRIPTPATH}}/COPYING ekzempleron de la GNU General Public License] kune kun tiu ĉi programo; se ne, skribu al Free Software Foundation, Inc., 59 Temple Place, Suite 350, Boston, MA 02111-1307 USA aŭ [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html legu ĝin interrete].', 'version-software' => 'Instalita programaro', 'version-software-product' => 'Produkto', 'version-software-version' => 'Versio', @@ -3246,6 +3469,15 @@ Enigu la dosiernomon sen la "{{ns:file}}:" prefikso.', 'tags-edit' => 'redakti', 'tags-hitcount' => '$1 {{PLURAL:$1|ŝanĝo|ŝanĝoj}}', +# Special:ComparePages +'comparepages' => 'Kompari paĝojn', +'compare-selector' => 'Kompari reviziojn de paĝo', +'compare-page1' => 'Paĝo 1', +'compare-page2' => 'Paĝo 2', +'compare-rev1' => 'Revizio 1', +'compare-rev2' => 'Revizio 2', +'compare-submit' => 'Komparu', + # Database error messages 'dberr-header' => 'Ĉi tiu vikio havas problemon', 'dberr-problems' => 'Bedaŭrinde, ĉi tiu retejo suferas pro teknikaj problemoj.', @@ -3262,8 +3494,13 @@ Enigu la dosiernomon sen la "{{ns:file}}:" prefikso.', 'htmlform-float-invalid' => 'La valoro, kiun vi specifis, ne estas numero.', 'htmlform-int-toolow' => 'La valoro, kiun vi specifis, estas sub la minimumo de $1', 'htmlform-int-toohigh' => 'La valoro, kiun vi specifis, estas super la maksimumo de $1', +'htmlform-required' => 'Ĉi tiu valoro estas deviga', 'htmlform-submit' => 'Ek!', 'htmlform-reset' => 'Malfari ŝanĝojn', 'htmlform-selectorother-other' => 'Alia', +# SQLite database support +'sqlite-has-fts' => '$1 kun tut-teksta subteno', +'sqlite-no-fts' => '$1 sen tut-teksta subteno', + ); diff --git a/languages/messages/MessagesEs.php b/languages/messages/MessagesEs.php index 4cbf8810..3064a51c 100644 --- a/languages/messages/MessagesEs.php +++ b/languages/messages/MessagesEs.php @@ -23,6 +23,7 @@ * @author Clerc * @author Crazymadlover * @author Cvmontuy + * @author Danke7 * @author David0811 * @author Dferg * @author Diego Grez @@ -38,6 +39,7 @@ * @author Jens Liebenau * @author Jurock * @author Lin linao + * @author Linterweb * @author Locos epraix * @author Mahadeva * @author Manuelt15 @@ -60,6 +62,7 @@ * @author Toniher * @author Translationista * @author Urhixidur + * @author VegaDark * @author XalD * @author לערי ריינהארט */ @@ -89,59 +92,60 @@ $namespaceAliases = array( ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'RedireccionesDobles', 'Redirecciones dobles' ), - 'BrokenRedirects' => array( 'RedireccionesRotas', 'Redirecciones rotas' ), + 'DoubleRedirects' => array( 'RedireccionesDobles', 'Redirecciones_dobles' ), + 'BrokenRedirects' => array( 'RedireccionesRotas', 'Redirecciones_rotas' ), 'Disambiguations' => array( 'Desambiguaciones', 'Desambiguación' ), - 'Userlogin' => array( 'Entrar', 'Entrada usuario' ), - 'Userlogout' => array( 'Salida usuario', 'Salir' ), - 'CreateAccount' => array( 'Crear cuenta', 'CrearCuenta' ), + 'Userlogin' => array( 'Entrar', 'Entrada_del_usuario' ), + 'Userlogout' => array( 'Salida_del_usuario', 'Salir' ), + 'CreateAccount' => array( 'Crear_una_cuenta', 'CrearCuenta' ), 'Preferences' => array( 'Preferencias' ), - 'Watchlist' => array( 'Seguimiento', 'Lista de seguimiento' ), - 'Recentchanges' => array( 'CambiosRecientes', 'Cambios recientes' ), - 'Upload' => array( 'SubirArchivo', 'Subir archivo' ), - 'Listfiles' => array( 'ListaImágenes', 'Lista de imágenes' ), - 'Newimages' => array( 'NuevasImágenes', 'Nuevas imágenes' ), - 'Listusers' => array( 'ListaUsuarios', 'Lista de usuarios' ), - 'Listgrouprights' => array( 'ListaDerechosGrupos', 'Derechos de grupos de usuarios' ), + 'Watchlist' => array( 'Seguimiento', 'Lista_de_seguimiento' ), + 'Recentchanges' => array( 'CambiosRecientes', 'Cambios_recientes' ), + 'Upload' => array( 'SubirArchivo', 'Subir_archivo' ), + 'Listfiles' => array( 'ListaImágenes', 'Lista_de_imágenes' ), + 'Newimages' => array( 'NuevasImágenes', 'Nuevas_imágenes' ), + 'Listusers' => array( 'ListaUsuarios', 'Lista_de_usuarios' ), + 'Listgrouprights' => array( 'ListaDerechosGrupos', 'Derechos_de_grupos_de_usuarios' ), 'Statistics' => array( 'Estadísticas' ), - 'Randompage' => array( 'Aleatoria', 'Aleatorio', 'Página aleatoria' ), - 'Lonelypages' => array( 'PáginasHuérfanas', 'Páginas huérfanas' ), - 'Uncategorizedpages' => array( 'PáginasSinCategorizar', 'Páginas sin categorizar' ), - 'Uncategorizedcategories' => array( 'CategoríasSinCategorizar', 'Categorías sin categorizar' ), - 'Uncategorizedimages' => array( 'ImágenesSinCategorizar', 'Imágenes sin categorizar' ), - 'Uncategorizedtemplates' => array( 'PlantillasSinCategorizar', 'Plantillas sin categorizar' ), - 'Unusedcategories' => array( 'CategoríasSinUso', 'Categorías sin uso' ), - 'Unusedimages' => array( 'ImágenesSinUso', 'Imágenes sin uso' ), - 'Wantedpages' => array( 'PáginasRequeridas', 'Páginas requeridas' ), - 'Wantedcategories' => array( 'CategoríasRequeridas', 'Categorías requeridas' ), - 'Wantedfiles' => array( 'ArchivosRequeridos', 'Archivos requeridos' ), - 'Wantedtemplates' => array( 'PlantillasRequeridas', 'Plantillas requeridas' ), - 'Mostlinked' => array( 'MásEnlazados', 'Más enlazados' ), - 'Mostlinkedcategories' => array( 'CategoríasMásUsadas', 'Categorías más usadas' ), - 'Mostlinkedtemplates' => array( 'PlantillasMásUsadas', 'Plantillas más usadas' ), - 'Mostimages' => array( 'MásImágenes', 'Con más imágenes' ), - 'Mostcategories' => array( 'MásCategorizadas', 'Más categorizadas' ), - 'Mostrevisions' => array( 'MásEdiciones', 'Más ediciones' ), - 'Fewestrevisions' => array( 'MenosEdiciones', 'Menos ediciones' ), - 'Shortpages' => array( 'PáginasCortas', 'Páginas cortas' ), - 'Longpages' => array( 'PáginasLargas', 'Páginas largas' ), - 'Newpages' => array( 'PáginasNuevas', 'Páginas nuevas' ), - 'Ancientpages' => array( 'PáginasAntiguas', 'Páginas antiguas' ), - 'Deadendpages' => array( 'PáginasSinSalida', 'Páginas sin salida' ), - 'Protectedpages' => array( 'PáginasProtegidas', 'Páginas protegidas' ), - 'Protectedtitles' => array( 'TítulosProtegidos', 'Títulos protegidos' ), - 'Allpages' => array( 'Todas', 'Todas las páginas' ), - 'Prefixindex' => array( 'PáginasPorPrefijo', 'Páginas por prefijo' ), - 'Ipblocklist' => array( 'UsuariosBloqueados', 'Lista de usuarios bloqueados' ), - 'Specialpages' => array( 'PáginasEspeciales', 'Páginas especiales' ), + 'Randompage' => array( 'Aleatoria', 'Aleatorio', 'Página_aleatoria' ), + 'Lonelypages' => array( 'PáginasHuérfanas', 'Páginas_huérfanas' ), + 'Uncategorizedpages' => array( 'PáginasSinCategorizar', 'Páginas_sin_categorizar' ), + 'Uncategorizedcategories' => array( 'CategoríasSinCategorizar', 'Categorías_sin_categorizar' ), + 'Uncategorizedimages' => array( 'ImágenesSinCategorizar', 'Imágenes_sin_categorizar' ), + 'Uncategorizedtemplates' => array( 'PlantillasSinCategorizar', 'Plantillas_sin_categorizar' ), + 'Unusedcategories' => array( 'CategoríasSinUso', 'Categorías_sin_uso' ), + 'Unusedimages' => array( 'ImágenesSinUso', 'Imágenes_sin_uso' ), + 'Wantedpages' => array( 'PáginasRequeridas', 'Páginas_requeridas' ), + 'Wantedcategories' => array( 'CategoríasRequeridas', 'Categorías_requeridas' ), + 'Wantedfiles' => array( 'ArchivosRequeridos', 'Archivos_requeridos' ), + 'Wantedtemplates' => array( 'PlantillasRequeridas', 'Plantillas_requeridas' ), + 'Mostlinked' => array( 'MásEnlazados', 'Más_enlazados' ), + 'Mostlinkedcategories' => array( 'CategoríasMásUsadas', 'Categorías_más_usadas' ), + 'Mostlinkedtemplates' => array( 'PlantillasMásUsadas', 'Plantillas_más_usadas' ), + 'Mostimages' => array( 'MásImágenes', 'Con_más_imágenes' ), + 'Mostcategories' => array( 'MásCategorizadas', 'Más_categorizadas' ), + 'Mostrevisions' => array( 'MásEdiciones', 'Más_ediciones' ), + 'Fewestrevisions' => array( 'MenosEdiciones', 'Menos_ediciones' ), + 'Shortpages' => array( 'PáginasCortas', 'Páginas_cortas' ), + 'Longpages' => array( 'PáginasLargas', 'Páginas_largas' ), + 'Newpages' => array( 'PáginasNuevas', 'Páginas_nuevas' ), + 'Ancientpages' => array( 'PáginasAntiguas', 'Páginas_antiguas' ), + 'Deadendpages' => array( 'PáginasSinSalida', 'Páginas_sin_salida' ), + 'Protectedpages' => array( 'PáginasProtegidas', 'Páginas_protegidas' ), + 'Protectedtitles' => array( 'TítulosProtegidos', 'Títulos_protegidos' ), + 'Allpages' => array( 'Todas', 'Todas_las_páginas' ), + 'Prefixindex' => array( 'PáginasPorPrefijo', 'Páginas_por_prefijo' ), + 'Ipblocklist' => array( 'UsuariosBloqueados', 'Lista_de_usuarios_bloqueados' ), + 'Unblock' => array( 'Desbloquear' ), + 'Specialpages' => array( 'PáginasEspeciales', 'Páginas_especiales' ), 'Contributions' => array( 'Contribuciones' ), 'Emailuser' => array( 'MandarEmailUsuario' ), - 'Confirmemail' => array( 'ConfirmarEmail', 'Confirmar e-mail' ), - 'Whatlinkshere' => array( 'LoQueEnlazaAquí', 'Lo que enlaza aquí' ), - 'Recentchangeslinked' => array( 'CambiosEnEnlazadas', 'Cambios en enlazadas' ), - 'Movepage' => array( 'MoverPágina', 'Mover página' ), + 'Confirmemail' => array( 'ConfirmarEmail', 'Confirmar_e-mail' ), + 'Whatlinkshere' => array( 'LoQueEnlazaAquí', 'Lo_que_enlaza_aquí' ), + 'Recentchangeslinked' => array( 'CambiosEnEnlazadas', 'Cambios_en_enlazadas' ), + 'Movepage' => array( 'MoverPágina', 'Mover_página' ), 'Blockme' => array( 'Bloquearme' ), - 'Booksources' => array( 'FuentesDeLibros', 'Fuentes de libros' ), + 'Booksources' => array( 'FuentesDeLibros', 'Fuentes_de_libros' ), 'Categories' => array( 'Categorías' ), 'Export' => array( 'Exportar' ), 'Version' => array( 'Versión' ), @@ -150,33 +154,34 @@ $specialPageAliases = array( 'Blockip' => array( 'Bloquear' ), 'Undelete' => array( 'Restaurar' ), 'Import' => array( 'Importar' ), - 'Lockdb' => array( 'BloquearBasedeDatos', 'Bloquear base de datos' ), - 'Unlockdb' => array( 'DesbloquearBasedeDatos', 'Desbloquear base de datos' ), - 'Userrights' => array( 'PermisosUsuarios', 'Permisos de usuarios' ), - 'MIMEsearch' => array( 'BuscarPorMIME', 'Buscar por MIME' ), - 'FileDuplicateSearch' => array( 'BuscarArchivosDuplicados', 'Buscar archivos duplicados' ), - 'Unwatchedpages' => array( 'PáginasSinVigilar', 'Páginas sin vigilar' ), - 'Listredirects' => array( 'TodasLasRedirecciones', 'Todas las redirecciones' ), - 'Revisiondelete' => array( 'BorrarRevisión', 'Borrar revisión' ), - 'Unusedtemplates' => array( 'PlantillasSinUso', 'Plantillas sin uso' ), - 'Randomredirect' => array( 'RedirecciónAleatoria', 'Redirección aleatoria' ), - 'Mypage' => array( 'MiPágina', 'Mi página' ), - 'Mytalk' => array( 'MiDiscusión', 'Mi discusión' ), - 'Mycontributions' => array( 'MisContribuciones', 'Mis contribuciones' ), - 'Listadmins' => array( 'ListaDeAdministradores', 'Lista de administradores' ), - 'Listbots' => array( 'ListaDeBots', 'Lista de bots' ), - 'Popularpages' => array( 'PáginasMásVisitadas', 'PáginasPopulares', 'Páginas más visitadas' ), + 'Lockdb' => array( 'BloquearBasedeDatos', 'Bloquear_base_de_datos' ), + 'Unlockdb' => array( 'DesbloquearBasedeDatos', 'Desbloquear_base_de_datos' ), + 'Userrights' => array( 'PermisosUsuarios', 'Permisos_de_usuarios' ), + 'MIMEsearch' => array( 'BuscarPorMIME', 'Buscar_por_MIME' ), + 'FileDuplicateSearch' => array( 'BuscarArchivosDuplicados', 'Buscar_archivos_duplicados' ), + 'Unwatchedpages' => array( 'PáginasSinVigilar', 'Páginas_sin_vigilar' ), + 'Listredirects' => array( 'TodasLasRedirecciones', 'Todas_las_redirecciones' ), + 'Revisiondelete' => array( 'BorrarRevisión', 'Borrar_revisión' ), + 'Unusedtemplates' => array( 'PlantillasSinUso', 'Plantillas_sin_uso' ), + 'Randomredirect' => array( 'RedirecciónAleatoria', 'Redirección_aleatoria' ), + 'Mypage' => array( 'MiPágina', 'Mi_página' ), + 'Mytalk' => array( 'MiDiscusión', 'Mi_discusión' ), + 'Mycontributions' => array( 'MisContribuciones', 'Mis_contribuciones' ), + 'Listadmins' => array( 'ListaDeAdministradores', 'Lista_de_administradores' ), + 'Listbots' => array( 'ListaDeBots', 'Lista_de_bots' ), + 'Popularpages' => array( 'PáginasMásVisitadas', 'PáginasPopulares', 'Páginas_más_visitadas' ), 'Search' => array( 'Buscar' ), - 'Resetpass' => array( 'Cambiar contraseña', 'CambiarContraseña', 'ResetearContraseña', 'Resetear contraseña' ), - 'Withoutinterwiki' => array( 'SinInterwikis', 'Sin interwikis' ), - 'MergeHistory' => array( 'FusionarHistorial', 'Fusionar historial' ), - 'Filepath' => array( 'RutaDeArchivo', 'Ruta de archivo' ), - 'Invalidateemail' => array( 'InvalidarEmail', 'Invalidar e-mail' ), - 'Blankpage' => array( 'BlanquearPágina', 'Blanquear página' ), - 'LinkSearch' => array( 'BúsquedaDeEnlaces', 'Búsqueda de enlaces' ), - 'DeletedContributions' => array( 'ContribucionesBorradas', 'Contribuciones Borradas' ), + 'Resetpass' => array( 'Cambiar_contraseña', 'CambiarContraseña', 'ResetearContraseña', 'Resetear_contraseña' ), + 'Withoutinterwiki' => array( 'SinInterwikis', 'Sin_interwikis' ), + 'MergeHistory' => array( 'FusionarHistorial', 'Fusionar_historial' ), + 'Filepath' => array( 'RutaDeArchivo', 'Ruta_de_archivo' ), + 'Invalidateemail' => array( 'InvalidarEmail', 'Invalidar_e-mail' ), + 'Blankpage' => array( 'BlanquearPágina', 'Blanquear_página' ), + 'LinkSearch' => array( 'BúsquedaDeEnlaces', 'Búsqueda_de_enlaces' ), + 'DeletedContributions' => array( 'ContribucionesBorradas', 'Contribuciones_Borradas' ), 'Tags' => array( 'Etiquetas' ), 'Activeusers' => array( 'UsuariosActivos' ), + 'ComparePages' => array( 'CompararPáginas' ), ); $magicWords = array( @@ -192,12 +197,12 @@ $magicWords = array( 'currentmonthname' => array( '1', 'NOMBREMESACTUAL', 'CURRENTMONTHNAME' ), 'currentmonthnamegen' => array( '1', 'GENERADORNOMBREMESACTUAL', 'CURRENTMONTHNAMEGEN' ), 'currentmonthabbrev' => array( '1', 'ABREVIACIONNOMBREMESACTUAL', 'ABREVIACIÓNNOMBREMESACTUAL', 'CURRENTMONTHABBREV' ), - 'currentday' => array( '1', 'DÍAACTUAL', 'DIAACTUAL', 'DÍA ACTUAL', 'DIA ACTUAL', 'CURRENTDAY' ), - 'currentday2' => array( '1', 'DÍAACTUAL2', 'DIAACTUAL2', 'DÍA ACTUAL2', 'DIA ACTUAL2', 'CURRENTDAY2' ), + 'currentday' => array( '1', 'DÍAACTUAL', 'DIAACTUAL', 'DÍA_ACTUAL', 'DIA_ACTUAL', 'CURRENTDAY' ), + 'currentday2' => array( '1', 'DÍAACTUAL2', 'DIAACTUAL2', 'DÍA_ACTUAL2', 'DIA_ACTUAL2', 'CURRENTDAY2' ), 'currentdayname' => array( '1', 'NOMBREDÍAACTUAL', 'NOMBREDIAACTUAL', 'CURRENTDAYNAME' ), - 'currentyear' => array( '1', 'AÑOACTUAL', 'AÑO ACTUAL', 'CURRENTYEAR' ), - 'currenttime' => array( '1', 'HORAACTUAL', 'HORA ACTUAL', 'CURRENTTIME' ), - 'currenthour' => array( '1', 'HORA MINUTOS ACTUAL', 'HORAMINUTOSACTUAL', 'CURRENTHOUR' ), + 'currentyear' => array( '1', 'AÑOACTUAL', 'AÑO_ACTUAL', 'CURRENTYEAR' ), + 'currenttime' => array( '1', 'HORAACTUAL', 'HORA_ACTUAL', 'CURRENTTIME' ), + 'currenthour' => array( '1', 'HORA_MINUTOS_ACTUAL', 'HORAMINUTOSACTUAL', 'CURRENTHOUR' ), 'localmonth' => array( '1', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ), 'localmonth1' => array( '1', 'MESLOCAL1', 'LOCALMONTH1' ), 'localmonthname' => array( '1', 'NOMBREMESLOCAL', 'LOCALMONTHNAME' ), @@ -235,18 +240,19 @@ $magicWords = array( 'subjectpagename' => array( '1', 'NOMBREDEPAGINADETEMA', 'NOMBREDEPÁGINADETEMA', 'NOMBREDEPÁGINADEASUNTO', 'NOMBREDEPAGINADEASUNTO', 'NOMBREDEPAGINADEARTICULO', 'NOMBREDEPÁGINADEARTÍCULO', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ), 'subjectpagenamee' => array( '1', 'NOMBREDEPAGINADETEMAC', 'NOMBREDEPÁGINADETEMAC', 'NOMBREDEPÁGINADEASUNTOC', 'NOMBREDEPAGINADEASUNTOC', 'NOMBREDEPAGINADEARTICULOC', 'NOMBREDEPÁGINADEARTÍCULOC', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ), 'msg' => array( '0', 'MSJ:', 'MSG:' ), - 'img_thumbnail' => array( '1', 'miniaturadeimagen', 'miniatura', 'thumbnail', 'thumb' ), + 'img_thumbnail' => array( '1', 'miniaturadeimagen', 'miniatura', 'mini', 'thumbnail', 'thumb' ), 'img_manualthumb' => array( '1', 'miniaturadeimagen=$1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ), 'img_right' => array( '1', 'derecha', 'dcha', 'der', 'right' ), 'img_left' => array( '1', 'izquierda', 'izda', 'izq', 'left' ), 'img_none' => array( '1', 'ninguna', 'nada', 'no', 'ninguno', 'none' ), 'img_center' => array( '1', 'centro', 'centrado', 'centrada', 'centrar', 'center', 'centre' ), 'img_framed' => array( '1', 'marco', 'enmarcado', 'enmarcada', 'framed', 'enframed', 'frame' ), - 'img_frameless' => array( '1', 'sinmarco', 'sin enmarcar', 'sinenmarcar', 'frameless' ), + 'img_frameless' => array( '1', 'sinmarco', 'sin_enmarcar', 'sinenmarcar', 'frameless' ), 'img_page' => array( '1', 'pagina=$1', 'página=$1', 'pagina $1', 'página $1', 'page=$1', 'page $1' ), 'img_border' => array( '1', 'borde', 'border' ), - 'img_link' => array( '1', 'vínculo=$1', 'vinculo=$1', 'link=$1' ), + 'img_link' => array( '1', 'vínculo=$1', 'vinculo=$1', 'enlace=$1', 'link=$1' ), 'sitename' => array( '1', 'NOMBREDESITIO', 'SITENAME' ), + 'ns' => array( '0', 'EN:', 'NS:' ), 'localurl' => array( '0', 'URLLOCAL', 'LOCALURL:' ), 'localurle' => array( '0', 'URLLOCALC:', 'LOCALURLE:' ), 'server' => array( '0', 'SERVIDOR', 'SERVER' ), @@ -283,10 +289,10 @@ $magicWords = array( 'localtimestamp' => array( '1', 'MARCADEHORALOCAL', 'LOCALTIMESTAMP' ), 'language' => array( '0', '#IDIOMA:', '#LANGUAGE:' ), 'contentlanguage' => array( '1', 'IDIOMADELCONTENIDO', 'IDIOMADELCONT', 'CONTENTLANGUAGE', 'CONTENTLANG' ), - 'numberofadmins' => array( '1', 'NÚMEROADMINISITRADORES', 'NÚMEROADMINS', 'NUMEROADMINS', 'NUMEROADMINISTRADORES', 'NUMERODEADMINISTRADORES', 'NUMERODEADMINS', 'NÚMERODEADMINISTRADORES', 'NÚMERODEADMINS', 'NUMBEROFADMINS' ), + 'numberofadmins' => array( '1', 'NÚMEROADMINIISTRADORES', 'NÚMEROADMINS', 'NUMEROADMINS', 'NUMEROADMINISTRADORES', 'NUMERODEADMINISTRADORES', 'NUMERODEADMINS', 'NÚMERODEADMINISTRADORES', 'NÚMERODEADMINS', 'NUMBEROFADMINS' ), 'formatnum' => array( '0', 'FORMATONÚMERO', 'FORMATONUMERO', 'FORMATNUM' ), 'special' => array( '0', 'especial', 'special' ), - 'defaultsort' => array( '1', 'ORDENPREDETERMINADO:', 'CLAVEDEORDENPREDETERMINADO:', 'ORDENDECATEGORIAPREDETERMINADO:', 'ORDENDECATEGORÍAPREDETERMINADO:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ), + 'defaultsort' => array( '1', 'ORDENAR:', 'CLAVEDEORDENPREDETERMINADO:', 'ORDENDECATEGORIAPREDETERMINADO:', 'ORDENDECATEGORÍAPREDETERMINADO:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ), 'filepath' => array( '0', 'RUTAARCHIVO:', 'RUTARCHIVO:', 'RUTADEARCHIVO:', 'FILEPATH:' ), 'tag' => array( '0', 'etiqueta', 'ETIQUETA', 'tag' ), 'hiddencat' => array( '1', '__CATEGORÍAOCULTA__', '__HIDDENCAT__' ), @@ -308,7 +314,7 @@ $dateFormats = array( 'dmy both' => 'H:i j M Y', ); -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $linkTrail = '/^([a-záéíóúñ]+)(.*)$/sDu'; $messages = array( @@ -327,20 +333,19 @@ $messages = array( 'tog-editsection' => 'Habilitar la edición de secciones usando el enlace [editar]', 'tog-editsectiononrightclick' => 'Habilitar la edición de secciones presionando el botón de la derecha en los títulos de secciones (requiere JavaScript)', 'tog-showtoc' => 'Mostrar el índice (para páginas con más de 3 encabezados)', -'tog-rememberpassword' => 'Recordar la contraseña entre sesiones', -'tog-editwidth' => 'Ampliar el cuadro de edición para llenar toda la pantalla', +'tog-rememberpassword' => 'Recordar mi nombre de usuario y contraseña entre sesiones en este navegador (por un máximo de $1 {{PLURAL:$1|día|días}})', 'tog-watchcreations' => 'Vigilar las páginas que yo cree', 'tog-watchdefault' => 'Vigilar las páginas que yo modifique', 'tog-watchmoves' => 'Vigilar las páginas que renombre', 'tog-watchdeletion' => 'Vigilar las páginas que borre', -'tog-minordefault' => 'Marcar todas las ediciones como menores por defecto', -'tog-previewontop' => 'Mostrar la previsualización antes de la caja de edición en lugar de después', -'tog-previewonfirst' => 'Mostrar previsualización al comenzar a editar', -'tog-nocache' => 'Deshabilitar la caché de páginas', -'tog-enotifwatchlistpages' => 'Envíame un correo cuando haya cambios en una página vigilada', -'tog-enotifusertalkpages' => 'Notifícame cuando cambia mi página de discusión de usuario', -'tog-enotifminoredits' => 'Notifícame también los cambios menores de página', -'tog-enotifrevealaddr' => 'Mostrar mi dirección de correo electrónico en los correos de notificación', +'tog-minordefault' => 'Marcar todas las ediciones como menores de manera predeterminada', +'tog-previewontop' => 'Mostrar previsualización antes del cuadro de edición', +'tog-previewonfirst' => 'Mostrar previsualización en la primera edición', +'tog-nocache' => 'Desactivar la caché de páginas del navegador', +'tog-enotifwatchlistpages' => 'Enviarme un correo electrónico cuando una página en mi lista de seguimiento sea modificada', +'tog-enotifusertalkpages' => 'Enviarme un correo electrónico cuando mi página de discusión sea modificada', +'tog-enotifminoredits' => 'Notificarme también los cambios menores de páginas', +'tog-enotifrevealaddr' => 'Revelar mi dirección de correo electrónico en los correos de notificación', 'tog-shownumberswatching' => 'Mostrar el número de usuarios que la vigilan', 'tog-oldsig' => 'Vista previa de firma existente:', 'tog-fancysig' => 'Tratar firma como wikitexto (sin un enlace automático)', @@ -468,37 +473,27 @@ $messages = array( 'qbedit' => 'Editar', 'qbpageoptions' => 'Opciones de página', 'qbpageinfo' => 'Información de página', -'qbmyoptions' => 'Mis opciones', +'qbmyoptions' => 'Mis páginas', 'qbspecialpages' => 'Páginas especiales', 'faq' => 'Preguntas más frecuentes', 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Añadir tema', -'vector-action-delete' => 'Borrar', -'vector-action-move' => 'Mover', -'vector-action-protect' => 'Proteger', -'vector-action-undelete' => 'Restaurar', -'vector-action-unprotect' => 'Desproteger', -'vector-namespace-category' => 'Categoría', -'vector-namespace-help' => 'Página de ayuda', -'vector-namespace-image' => 'Archivo', -'vector-namespace-main' => 'Página', -'vector-namespace-media' => 'Página de multimedia', -'vector-namespace-mediawiki' => 'Mensaje', -'vector-namespace-project' => 'Página de proyecto', -'vector-namespace-special' => 'Página especial', -'vector-namespace-talk' => 'Discusión', -'vector-namespace-template' => 'Plantilla', -'vector-namespace-user' => 'Página de usuario', -'vector-view-create' => 'Crear', -'vector-view-edit' => 'Editar', -'vector-view-history' => 'Ver historial', -'vector-view-view' => 'Leer', -'vector-view-viewsource' => 'Ver fuente', -'actions' => 'Acciones', -'namespaces' => 'Espacios de nombres', -'variants' => 'Variantes', +'vector-action-addsection' => 'Añadir tema', +'vector-action-delete' => 'Borrar', +'vector-action-move' => 'Mover', +'vector-action-protect' => 'Proteger', +'vector-action-undelete' => 'Restaurar', +'vector-action-unprotect' => 'Desproteger', +'vector-simplesearch-preference' => 'Activar sugerencias de búsqueda mejoradas (piel Vector solamente)', +'vector-view-create' => 'Crear', +'vector-view-edit' => 'Editar', +'vector-view-history' => 'Ver historial', +'vector-view-view' => 'Leer', +'vector-view-viewsource' => 'Ver fuente', +'actions' => 'Acciones', +'namespaces' => 'Espacios de nombres', +'variants' => 'Variantes', 'errorpagetitle' => 'Error', 'returnto' => 'Volver a $1.', @@ -530,7 +525,7 @@ $messages = array( 'newpage' => 'Página nueva', 'talkpage' => 'Discutir esta página', 'talkpagelinktext' => 'Discusión', -'specialpage' => 'Página Especial', +'specialpage' => 'Página especial', 'personaltools' => 'Herramientas personales', 'postcomment' => 'Nueva sección', 'articlepage' => 'Ver artículo', @@ -559,6 +554,9 @@ Hay demasiados usuarios que están tratando de ver esta página. Espera un momento antes de tratar de acceder nuevamente a esta página. $1', +'pool-timeout' => 'Tiempo limite agotado para el bloqueo', +'pool-queuefull' => 'La cola de trabajo está llena', +'pool-errorunknown' => 'Error desconocido', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Acerca de {{SITENAME}}', @@ -573,7 +571,7 @@ $1', 'edithelppage' => 'Help:Cómo se edita una página', 'helppage' => 'Help:Ayuda', 'mainpage' => 'Página principal', -'mainpage-description' => 'Página Principal', +'mainpage-description' => 'Página principal', 'policy-url' => 'Project:Políticas', 'portal' => 'Portal de la comunidad', 'portal-url' => 'Project:Portal de la comunidad', @@ -591,7 +589,7 @@ $1', 'retrievedfrom' => 'Obtenido de «$1»', 'youhavenewmessages' => 'Tienes $1 ($2).', 'newmessageslink' => 'mensajes nuevos', -'newmessagesdifflink' => 'ultima modificación', +'newmessagesdifflink' => 'última modificación', 'youhavenewmessagesmulti' => 'Tienes nuevos mensajes en $1', 'editsection' => 'editar', 'editold' => 'editar', @@ -723,7 +721,8 @@ No olvides personalizar [[Special:Preferences|tus preferencias]].', 'yourname' => 'Nombre de usuario:', 'yourpassword' => 'Contraseña:', 'yourpasswordagain' => 'Confirma la contraseña:', -'remembermypassword' => 'Quiero que me recuerden entre sesiones.', +'remembermypassword' => 'Mantenerme conectado en este navegador (hasta $1 {{PLURAL:$1|día|días}})', +'securelogin-stick-https' => 'Permanecer conectado a HTTPS después de iniciar sesión', 'yourdomainname' => 'Dominio', 'externaldberror' => 'Hubo un error de autenticación externa de la base de datos o bien no tienes autorización para actualizar tu cuenta externa.', 'login' => 'Entrar', @@ -737,9 +736,10 @@ No olvides personalizar [[Special:Preferences|tus preferencias]].', 'nologin' => "¿No tienes una cuenta? '''$1'''.", 'nologinlink' => 'Crear una cuenta', 'createaccount' => 'Cree una nueva cuenta', -'gotaccount' => '¿Ya tiene una cuenta de usuario? $1.', +'gotaccount' => '¿Ya tienes una cuenta? $1.', 'gotaccountlink' => 'Entrar', 'createaccountmail' => 'por correo electrónico', +'createaccountreason' => 'Razón:', 'badretype' => 'Las contraseñas no coinciden.', 'userexists' => 'El nombre indicado ya está en uso. Por favor, indica un nombre diferente.', @@ -761,6 +761,7 @@ Revisa la ortografía, o [[Special:UserLogin/signup|crea una nueva cuenta]].', Por favor, inténtalo de nuevo.', 'passwordtooshort' => 'Las contraseñas deben tener al menos {{PLURAL:$1|1 caracter|$1 caracteres}}.', 'password-name-match' => 'Tu contraseña debe ser diferente de tu nombre de usuario.', +'password-login-forbidden' => 'El uso de este nombre de usuario y contraseña han sido prohibidos.', 'mailmypassword' => 'Enviar una nueva contraseña por correo electrónico', 'passwordremindertitle' => 'Recordatorio de contraseña de {{SITENAME}}', 'passwordremindertext' => 'Alguien (probablemente tú, desde la dirección IP $1) solicitó que te enviáramos una nueva contraseña para tu cuenta en {{SITENAME}} ($4). @@ -799,6 +800,9 @@ Puedes ignorar este mensaje si esta cuenta fue creada por error.', 'loginlanguagelabel' => 'Idioma: $1', 'suspicious-userlogout' => 'Tu solicitud de desconexión ha sido denegada debido a que parece que ésta ha sido enviada desde un navegador defectuoso o un proxy caché.', +# E-mail sending +'php-mail-error-unknown' => 'Error desconocido en la función mail() de PHP', + # Password reset dialog 'resetpass' => 'Cambiar la contraseña', 'resetpass_announce' => 'Has iniciado sesión con una contraseña temporal que fue enviada por correo electrónico. @@ -825,7 +829,7 @@ Puede que ya hayas cambiado la contraseña o que hayas pedido una temporal.', 'italic_tip' => 'Texto en cursiva', 'link_sample' => 'Título del enlace', 'link_tip' => 'Enlace interno', -'extlink_sample' => 'http://www.example.com Título del enlace', +'extlink_sample' => 'http://www.ejemplo.com Título del enlace', 'extlink_tip' => 'Enlace externo (recuerda añadir el prefijo http://)', 'headline_sample' => 'Texto de titular', 'headline_tip' => 'Titular de nivel 2', @@ -852,9 +856,10 @@ Puede que ya hayas cambiado la contraseña o que hayas pedido una temporal.', 'showdiff' => 'Mostrar cambios', 'anoneditwarning' => "'''Aviso:''' No has iniciado sesión con una cuenta de usuario. Tu dirección IP se almacenará en el historial de ediciones de la página.", +'anonpreviewwarning' => "''No has iniciado sesión con una cuenta de usuario. Al guardar los cambios se almacenará tu dirección IP en el historial de edición de la página.''", 'missingsummary' => "'''Atención:''' No has escrito un resumen de edición. Si haces clic nuevamente en «{{int:savearticle}}» tu edición se grabará sin él.", 'missingcommenttext' => 'Por favor introduce texto debajo.', -'missingcommentheader' => "'''Atención:''' No has escrito un título para este comentario. Si haces clic nuevamente en Grabar tu edición se grabará sin él.", +'missingcommentheader' => "'''Recordatorio:''' No has escrito un título para este comentario. Si haces clic nuevamente en \"{{int:savearticle}}\" tu edición se grabará sin él.", 'summary-preview' => 'Previsualización del resumen:', 'subject-preview' => 'Previsualización del tema/título:', 'blockedtitle' => 'El usuario está bloqueado', @@ -931,7 +936,11 @@ La última entrada del registro de bloqueos es provista debajo para mayor refere '''¡Aún no se ha guardado!'''", 'userjspreview' => "'''¡Recuerda que solo estás previsualizando tu JavaScript de usuario.''' '''¡Aún no se ha guardado!'''", -'userinvalidcssjstitle' => "'''Aviso:''' No existe la máscara \"\$1\". Recuerda que las páginas personalizadas ''.css'' y ''.js'' tienen un título en minúsculas. Por ejemplo, {{ns:user}}:Ejemplo/monobook.css en vez de {{ns:user}}:Ejemplo/Monobook.css.", +'sitecsspreview' => "'''Recuerda que sólo estás previsualizando este CSS''' +'''¡Aún no se ha guardado!'''", +'sitejspreview' => "'''Recuerda que sólo estás previsualizando este código JavaScript.''' +'''¡Aún no se ha guardado!'''", +'userinvalidcssjstitle' => "'''Aviso:''' No existe la skin «$1». Recuerda que las páginas personalizadas ''.css'' y ''.js'' tienen un título en minúsculas. Por ejemplo, {{ns:user}}:Ejemplo/vector.css en vez de {{ns:user}}:Ejemplo/Vector.css.", 'updated' => '(Actualizado)', 'note' => "'''Nota:'''", 'previewnote' => "'''¡Recuerda que esto es solo una previsualización.''' @@ -961,13 +970,11 @@ Si quieres grabar tus cambios, has de trasladarlos al área superior. 'storedversion' => 'Versión almacenada', 'nonunicodebrowser' => "'''Atención: Tu navegador no cumple la norma Unicode. Se ha activado un sistema de edición alternativo que le permitirá editar artículos con seguridad: los caracteres no ASCII aparecerán en la caja de edición como códigos hexadecimales.'''", 'editingold' => "'''Aviso: Estás editando una versión antigua de esta página.''' -Si la guardas, los cambios hechos desde esa revisión se perderán.", +Si la guardas, se perderán los cambios realizados desde esta revisión.", 'yourdiff' => 'Diferencias', 'copyrightwarning' => "Por favor observa que todas las contribuciones a {{SITENAME}} se consideran hechas públicas bajo la $2 (véase $1 para más detalles). Si no deseas la modificación y distribución libre de tu obra, entonces no la pongas aquí.
    También nos aseguras que tú escribiste esto y te pertenecen de los derechos de autor, o lo copiaste desde el dominio público u otra fuente libre. '''¡No uses escritos con copyright sin permiso!'''", 'copyrightwarning2' => "Por favor, ten en cuenta que todas las contribuciones a {{SITENAME}} pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que las modifiquen sin limitaciones y las distribuyan libremente, entonces no las pongas aquí.
    También nos aseguras que tú escribiste esto y te pertenecen de los derechos de autor, o lo copiaste desde el dominio público u otra fuente libre. (véase $1 para más detalles). '''¡No uses escritos con copyright sin permiso!'''", -'longpagewarning' => "'''Atención: Esta página tiene un tamaño de $1 kilobytes; algunos navegadores pueden tener problemas editando páginas de 32 kB o más. -Por favor considere la posibilidad de dividir esta página en secciones más pequeñas.'''", 'longpageerror' => "'''Error: El texto que has enviado ocupa $1 kilobytes, que excede el máximo de $2 kilobytes. No se puede guardar.'''", 'readonlywarning' => "'''Aviso: La base de datos ha sido bloqueada por cuestiones de mantenimiento, así que no podrás guardar tus modificaciones en este momento. Puedes copiar y pegar el texto en un archivo y guardarlo para más tarde.''' @@ -1146,6 +1153,8 @@ $1", 'logdelete-failure' => "'''La visibilidad del registro no pudo ser ajustada:''' $1", 'revdel-restore' => 'cambiar visibilidad', +'revdel-restore-deleted' => 'revisiones borradas', +'revdel-restore-visible' => 'revisiones visibles', 'pagehist' => 'Historial de la página', 'deletedhist' => 'Historial borrado', 'revdelete-content' => 'contenido', @@ -1215,11 +1224,13 @@ Nota que usar los enlaces de navegación borrará las selecciones de esta column # Diffs 'history-title' => 'Historial de revisiones para «$1»', 'difference' => '(Diferencias entre revisiones)', +'difference-multipage' => '(Diferencia entre las páginas)', 'lineno' => 'Línea $1:', 'compareselectedversions' => 'Comparar versiones seleccionadas', 'showhideselectedversions' => 'Mostrar/ocultar versiones seleccionadas', 'editundo' => 'deshacer', -'diff-multi' => '({{PLURAL:$1|Una edición intermedia no se muestra|$1 ediciones intermedias no se muestran}}.)', +'diff-multi' => '(No se {{PLURAL:$1|muestra una edición intermedia realizada|muestran $1 ediciones intermedias realizadas}} por {{PLURAL:$2|un usuario|$2 usuarios}})', +'diff-multi-manyusers' => '(No se {{PLURAL:$1|muestra una edición intermedia|muestran $1 ediciones intermedias}} de {{PLURAL:$2|un usuario|$2 usuarios}})', # Search results 'searchresults' => 'Resultados de la búsqueda', @@ -1254,6 +1265,7 @@ Nota que usar los enlaces de navegación borrará las selecciones de esta column 'searchprofile-everything-tooltip' => 'Buscar en todo el contenido (incluyendo páginas de discusión)', 'searchprofile-advanced-tooltip' => 'Buscar en espacios de nombres personalizados', 'search-result-size' => '$1 ({{PLURAL:$2|1 palabra|$2 palabras}})', +'search-result-category-size' => '{{PLURAL:$1|1 miembro|$1 miembros}} ({{PLURAL:$2|1 subcategoría|$2 subcategorías}}, {{PLURAL:$3|1 fichero|$3 ficheros}})', 'search-result-score' => 'Relevancia: $1%', 'search-redirect' => '(redirige desde $1)', 'search-section' => '(sección $1)', @@ -1330,6 +1342,7 @@ Mientras tanto puedes buscar mediante Google, pero ten en cuenta que sus índice 'contextlines' => 'Número de líneas de contexto por resultado', 'contextchars' => 'Caracteres de contexto por línea', 'stub-threshold' => 'Límite para formato de enlace a esbozo (bytes):', +'stub-threshold-disabled' => 'Desactivado', 'recentchangesdays' => 'Días a mostrar en cambios recientes:', 'recentchangesdays-max' => '(máximo {{PLURAL:$1|un día|$1 días}})', 'recentchangescount' => 'Número de ediciones a mostrar de manera predeterminada:', @@ -1362,6 +1375,7 @@ Cualquiera que conozca la clave en este campo será capaz de leer tu lista de se 'prefs-files' => 'Archivos', 'prefs-custom-css' => 'CSS personalizado', 'prefs-custom-js' => 'JavaScript personalizado', +'prefs-common-css-js' => 'CSS/JS compartido para todas las skins:', 'prefs-reset-intro' => 'Puedes usar esta página para restaurar tus preferencias a las predeterminadas del sitio. Esto no se puede deshacer.', 'prefs-emailconfirm-label' => 'Confirmación de correo electrónico:', @@ -1398,9 +1412,15 @@ También puede permitir a otros usuarios que te contacten a través de tu págin 'prefs-advancedrendering' => 'Opciones avanzadas', 'prefs-advancedsearchoptions' => 'Opciones avanzadas', 'prefs-advancedwatchlist' => 'Opciones avanzadas', -'prefs-display' => 'Opciones de mostrado', +'prefs-displayrc' => 'Opciones de mostrado', +'prefs-displaysearchoptions' => 'Opciones de visualización', +'prefs-displaywatchlist' => 'Opciones de visualización', 'prefs-diffs' => 'Diferencias', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'La dirección de correo electrónico parece ser válida', +'email-address-validity-invalid' => 'Introduce una dirección de correo válida', + # User rights 'userrights' => 'Configuración de permisos de usuarios', 'userrights-lookup-user' => 'Configurar grupos de usuarios', @@ -1430,7 +1450,7 @@ También puede permitir a otros usuarios que te contacten a través de tu págin 'group-bot' => 'Bots', 'group-sysop' => 'Administradores', 'group-bureaucrat' => 'Burócratas', -'group-suppress' => 'Supresores', +'group-suppress' => 'Supresores de ediciones', 'group-all' => '(todos)', 'group-user-member' => 'usuario', @@ -1438,7 +1458,7 @@ También puede permitir a otros usuarios que te contacten a través de tu págin 'group-bot-member' => 'bot', 'group-sysop-member' => 'administrador', 'group-bureaucrat-member' => 'burócrata', -'group-suppress-member' => 'supresor', +'group-suppress-member' => 'supresor de ediciones', 'grouppage-user' => '{{ns:project}}:Usuarios', 'grouppage-autoconfirmed' => '{{ns:project}}:Usuarios autoconfirmados', @@ -1484,13 +1504,14 @@ También puede permitir a otros usuarios que te contacten a través de tu págin 'right-hideuser' => 'Bloquear un nombre de usuario, haciéndolo invisible', 'right-ipblock-exempt' => 'Pasar por encima de bloqueos de IPs, auto-bloqueos y bloqueos de rangos.', 'right-proxyunbannable' => 'Pasar por encima de bloqueos automáticos de proxies', +'right-unblockself' => 'Desbloquearse', 'right-protect' => 'Cambiar niveles de protección y editar páginas protegidas', 'right-editprotected' => 'Editar páginas protegidas (sin la protección «en cascada»)', 'right-editinterface' => 'Editar la interfaz de usuario', 'right-editusercssjs' => 'Editar las páginas de CSS y JS de otros usuarios', 'right-editusercss' => 'Editar las páginas de CSS de otros usuarios', 'right-edituserjs' => 'Editar las páginas de JS de otros usuarios', -'right-rollback' => 'Revertir rápidamente las ediciones del último usuario que modificó una página particular', +'right-rollback' => 'Revertir rápidamente las ediciones del último usuario que modificó una página en particular', 'right-markbotedits' => 'Marcar ediciones deshechas como ediciones de un bot', 'right-noratelimit' => 'No afectado por límites de frecuencia', 'right-import' => 'Importar páginas desde otras wikis', @@ -1506,7 +1527,6 @@ También puede permitir a otros usuarios que te contacten a través de tu págin 'right-siteadmin' => 'Bloquear y desbloquear la base de datos', 'right-reset-passwords' => 'Reajustar la contraseña de otros usuarios', 'right-override-export-depth' => 'Exporta páginas incluyendo aquellas enlazadas hasta una profundidad de 5', -'right-versiondetail' => 'Mostrar información ampliada de la versión del software', 'right-sendemail' => 'Enviar un correo electrónico a otros usuarios', # User rights log @@ -1557,14 +1577,9 @@ También puede permitir a otros usuarios que te contacten a través de tu págin 'recentchanges-legend' => 'Opciones sobre cambios recientes', 'recentchangestext' => 'Sigue los cambios más recientes de la wiki en esta página.', 'recentchanges-feed-description' => 'Seguir los cambios más recientes en el wiki en este feed.', -'recentchanges-label-legend' => 'Leyenda: $1.', -'recentchanges-legend-newpage' => '$1 - página nueva', 'recentchanges-label-newpage' => 'Esta edición creó una nueva página', -'recentchanges-legend-minor' => '$1 - edición menor', 'recentchanges-label-minor' => 'Esta es una edición menor', -'recentchanges-legend-bot' => '$1 - edición de bot', 'recentchanges-label-bot' => 'Esta edición fue realizada por un robot', -'recentchanges-legend-unpatrolled' => '$1 - edición sin patrullar', 'recentchanges-label-unpatrolled' => 'Esta edición todavía no se ha patrullado', 'rcnote' => "Debajo {{PLURAL:$1|hay '''1''' cambio efectuado|están los últimos '''$1''' cambios efectuados}} en {{PLURAL:$2|el último día|los últimos '''$2''' días}}, hasta el $4, $5.", 'rcnotefrom' => 'A continuación se muestran los cambios desde $2 (hasta $1).', @@ -1610,6 +1625,9 @@ También puede permitir a otros usuarios que te contacten a través de tu págin 'upload_directory_missing' => 'El directorio de subida de archivos ($1) no existe, y no puede ser creado por el servidor.', 'upload_directory_read_only' => 'El servidor web no puede escribir en el directorio de subida de archivos ($1).', 'uploaderror' => 'Error al intentar subir archivo', +'upload-recreate-warning' => "'''Aviso: Un archivo con ese nombre ha sido eliminado o renombrado.''' + +A continuación se muestra el registro de borrados y traslados de esta página:", 'uploadtext' => "Utiliza el siguiente formulario para subir archivos. Para ver o buscar archivos subidos con anterioridad, ve a la [[Special:FileList|lista de archivos subidos]]. Los archivos subidos quedarán registrados además en el [[Special:Log/upload|registro de archivos subidos]] y los borrados en el [[Special:Log/delete|registro de borrados]]. @@ -1645,6 +1663,17 @@ Mira la [[Special:NewFiles|galería de archivos nuevos]] para una descripción v 'filetype-banned-type' => "'''«.$1»''' no está entre los tipos de fichero permitidos. {{PLURAL:$3|El único tipo permitido es|Los tipos permitidos son}} $2.", 'filetype-missing' => 'El archivo no tiene extensión (como «.jpg»).', +'empty-file' => 'El archivo que enviaste estaba vacío.', +'file-too-large' => 'El archivo que enviste era demasiado grande.', +'filename-tooshort' => 'El nombre de archivo es demasiado corto.', +'filetype-banned' => 'El tipo de archivo está prohibido.', +'verification-error' => 'Este archivo no pasó la verificación de archivos.', +'hookaborted' => 'La modificación que ha intentado realizar fue cancelada por un adicional de extensión.', +'illegal-filename' => 'El nombre de archivo no está permitido.', +'overwrite' => 'Sobrescribir un archivo existente no está permitido.', +'unknown-error' => 'Ocurrió un error desconocido.', +'tmp-create-error' => 'No se pudo crear archivo temporal.', +'tmp-write-error' => 'Error al escribir archivo temporal.', 'large-file' => 'Se recomienda que los archivos no sean mayores de $1; este archivo ocupa $2.', 'largefileserver' => 'El tamaño de este archivo es mayor del que este servidor admite por configuración.', 'emptyfile' => 'El archivo que has intentado subir parece estar vacío; por favor, verifica que realmente se trate del archivo que intentabas subir.', @@ -1668,13 +1697,14 @@ Si tiene esta imagen a toda resolución súbala, si no, por favor cambie el nomb Si todavía quiere subir su archivo, por favor, regrese a la página anterior y use otro nombre. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Este archivo es un duplicado {{PLURAL:$1|del siguiente|de los siguientes}}:', 'file-deleted-duplicate' => 'Un archivo idéntico a este ([[:$1]]) ha sido borrado con anterioridad. Debes comprobar el historial de borrado del archivo ante de volver a subirlo.', -'successfulupload' => 'Subida con éxito', 'uploadwarning' => 'Advertencia de subida de archivo', 'uploadwarning-text' => 'Por favor, modifique la descripción del archivo abajo indicada e inténtelo de nuevo.', 'savefile' => 'Guardar archivo', 'uploadedimage' => 'subió «[[$1]]»', 'overwroteimage' => 'subió una nueva versión de «[[$1]]»', 'uploaddisabled' => 'Subida de archivos deshabilitada', +'copyuploaddisabled' => 'Carga por URL deshabilitada.', +'uploadfromurl-queued' => 'Tu carga ha sido enviada a la cola.', 'uploaddisabledtext' => 'No es posible subir archivos.', 'php-uploaddisabledtext' => 'La subida de archivos está deshabilitada en PHP. Por favor compruebe file_uploads en php.ini.', 'uploadscripted' => 'Este archivo contiene script o código HTML que puede ser interpretado erróneamente por un navegador web.', @@ -1696,6 +1726,14 @@ A continuación se muestra el registro de borrado de este archivo:", 'filename-bad-prefix' => "El nombre del archivo que estás subiendo comienza por '''«$1»''', un nombre nada descriptivo de su contenido. Es un típico nombre de los que asignan automáticamente las cámaras digitales. Por favor, elige un nombre más descriptivo.", +'upload-success-subj' => 'Subida con éxito', +'upload-success-msg' => 'Tu carga de [$2] fue existosa. Está disponible aquí: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problema en la carga', +'upload-failure-msg' => 'Hubo un problema durante la carga desde [$2]: + +$1', +'upload-warning-subj' => 'Alerta de carga', +'upload-warning-msg' => 'Hubo un problema con tu carga de [$2]. Puedes regresar al [[Special:Upload/stash/$1|formulario de carga]] para corregir este problema.', 'upload-proto-error' => 'Protocolo incorrecto', 'upload-proto-error-text' => 'Para subir archivos desde otra página la URL debe comenzar por http:// o ftp://.', @@ -1708,22 +1746,23 @@ Por favor, elige un nombre más descriptivo.", 'upload-http-error' => 'Ha ocurrido un error HTTP: $1', # img_auth script messages -'img-auth-accessdenied' => 'Acceso denegado', -'img-auth-nopathinfo' => 'Falta PATH_INFO. +'img-auth-accessdenied' => 'Acceso denegado', +'img-auth-nopathinfo' => 'Falta PATH_INFO. Tu servidor no está configurado para pasar esta información. Puede que este basado en CGI y no sea compatible con img_auth. Véase http://www.mediawiki.org/wiki/Manual:Image_Authorization.', -'img-auth-notindir' => 'Ruta solicitad no esá en el directorio de cargas configurado', -'img-auth-badtitle' => 'Incapaz de construir un título válido de «$1».', -'img-auth-nologinnWL' => 'No has iniciado sesión y «$1» no está en la lista blanca.', -'img-auth-nofile' => 'El archivo «$1» no existe.', -'img-auth-isdir' => 'Estás tratando de acceder a un directorio «$1». +'img-auth-notindir' => 'Ruta solicitad no esá en el directorio de cargas configurado', +'img-auth-badtitle' => 'Incapaz de construir un título válido de «$1».', +'img-auth-nologinnWL' => 'No has iniciado sesión y «$1» no está en la lista blanca.', +'img-auth-nofile' => 'El archivo «$1» no existe.', +'img-auth-isdir' => 'Estás tratando de acceder a un directorio «$1». Solo se permite el acceso a los archivos.', -'img-auth-streaming' => 'Streaming «$1».', -'img-auth-public' => 'La función de img_auth.php es mostrar archivos desde una wiki privada. +'img-auth-streaming' => 'Streaming «$1».', +'img-auth-public' => 'La función de img_auth.php es mostrar archivos desde una wiki privada. Esta wiki está configurada como pública. Para óptima seguridad, img_auth.php está desactivado.', -'img-auth-noread' => 'El usuario no tiene acceso para leer «$1».', +'img-auth-noread' => 'El usuario no tiene acceso para leer «$1».', +'img-auth-bad-query-string' => 'La dirección URL tiene una cadena de consulta no válida.', # HTTP errors 'http-invalid-url' => 'URL inválida: $1', @@ -1755,6 +1794,7 @@ Al hacer clic en el encabezado de una columna se cambia el orden.', 'listfiles_search_for' => 'Buscar por nombre de imagen:', 'imgfile' => 'archivo', 'listfiles' => 'Lista de archivos', +'listfiles_thumb' => 'Miniatura', 'listfiles_date' => 'Fecha', 'listfiles_name' => 'Nombre', 'listfiles_user' => 'Usuario', @@ -1870,8 +1910,8 @@ Entrada: contenttype/subtype, p. ej. image/jpeg.', 'statistics-edits' => 'Ediciones en páginas desde que {{SITENAME}} fue instalado', 'statistics-edits-average' => 'Media de ediciones por página', 'statistics-views-total' => 'Visitas totales', +'statistics-views-total-desc' => 'No se incluyen accesos a páginas no existentes ni páginas especiales', 'statistics-views-peredit' => 'Visitas por edición', -'statistics-jobqueue' => 'Longitud de la [http://www.mediawiki.org/wiki/Manual:Job_queue cola de trabajo]', 'statistics-users' => '[[Special:ListUsers|Usuarios]] registrados', 'statistics-users-active' => 'Usuarios activos', 'statistics-users-active-desc' => 'Usuarios que han ejecutado una acción en {{PLURAL:$1|el último día|los últimos $1 días}}', @@ -1885,8 +1925,8 @@ Una página es considerada página de desambiguación si utiliza la plantilla qu 'doubleredirects' => 'Redirecciones dobles', 'doubleredirectstext' => 'Esta página contiene una lista de páginas que redirigen a otras páginas de redirección. -Cada fila contiene enlaces a la segunda y tercera redirección, así como la primera línea de la segunda redirección, en la que usualmente se encontrará el artículo "real" al que la primera redirección debería apuntar. -Las entradas tachadas han sido resueltas.', +Cada fila contiene enlaces a la segunda y tercera redirección, así como la primera línea de la segunda redirección, en la que usualmente se encontrará el artículo «real» al que la primera redirección debería apuntar. +Las entradas tachadas han sido resueltas.', 'double-redirect-fixed-move' => '[[$1]] ha sido trasladado, ahora es una redirección a [[$2]]', 'double-redirect-fixer' => 'Corrector de redirecciones', @@ -1909,6 +1949,8 @@ Las entradas tachadas han sido resueltas.', 'nmembers' => '$1 {{PLURAL:$1|artículo|artículos}}', 'nrevisions' => '$1 {{PLURAL:$1|revisión|revisiones}}', 'nviews' => '$1 {{PLURAL:$1|vista|vistas}}', +'nimagelinks' => 'Usado en {{PLURAL:$1|una página|$1 páginas}}', +'ntransclusions' => 'usado en {{PLURAL:$1|una página|$1 páginas}}', 'specialpage-empty' => 'Esta página está vacía.', 'lonelypages' => 'Páginas huérfanas', 'lonelypagestext' => 'Las siguientes páginas no están enlazadas ni transcluídas en otras páginas de {{SITENAME}}.', @@ -1962,7 +2004,7 @@ Por favor note que otros sitios web pueden vincular a un archivo con un URL dire 'nopagetext' => 'La página destino que ha especificado no existe.', 'pager-newer-n' => '{{PLURAL:$1|1 siguiente|$1 siguientes}}', 'pager-older-n' => '{{PLURAL:$1|1 anterior|$1 anteriores}}', -'suppress' => 'Supervisor', +'suppress' => 'Supresor de ediciones', # Book sources 'booksources' => 'Fuentes de libros', @@ -2065,34 +2107,40 @@ Puede haber información adicional sobre privilegios individuales en [[{{MediaWi 'listgrouprights-removegroup-self-all' => 'Eliminar todos los grupos de tu propia cuenta', # E-mail user -'mailnologin' => 'Ninguna dirección de envio', -'mailnologintext' => 'Debes [[Special:UserLogin|iniciar sesión]] y tener una dirección electrónica válida en tus [[Special:Preferences|preferencias]] para enviar un correo electrónico a otros usuarios.', -'emailuser' => 'Enviar correo electrónico a este usuario', -'emailpage' => 'Correo electrónico a usuario', -'emailpagetext' => 'Puedes usar el formulario de abajo para enviar un correo electrónico a este usuario. +'mailnologin' => 'Ninguna dirección de envio', +'mailnologintext' => 'Debes [[Special:UserLogin|iniciar sesión]] y tener una dirección electrónica válida en tus [[Special:Preferences|preferencias]] para enviar un correo electrónico a otros usuarios.', +'emailuser' => 'Enviar correo electrónico a este usuario', +'emailpage' => 'Correo electrónico a usuario', +'emailpagetext' => 'Puedes usar el formulario de abajo para enviar un correo electrónico a este usuario. La dirección electrónica que indicaste en [[Special:Preferences|tus preferencias de usuario]] aparecerá en el remitente para que el destinatario pueda responderte.', -'usermailererror' => 'El sistema de correo devolvió un error:', -'defemailsubject' => 'Correo de {{SITENAME}}', -'noemailtitle' => 'No hay dirección de correo electrónico', -'noemailtext' => 'Este usuario no ha especificado una dirección de correo electrónico válida.', -'nowikiemailtitle' => 'correos electrónicos no permitidos', -'nowikiemailtext' => 'Este usuario ha elegido no recibir correos electrónicos de otros usuarios.', -'email-legend' => 'Enviar un correo electrónico a otro usuario de {{SITENAME}}', -'emailfrom' => 'De:', -'emailto' => 'Para:', -'emailsubject' => 'Asunto:', -'emailmessage' => 'Mensaje:', -'emailsend' => 'Enviar', -'emailccme' => 'Enviarme una copia de mi mensaje.', -'emailccsubject' => 'Copia de tu mensaje a $1: $2', -'emailsent' => 'Correo electrónico enviado', -'emailsenttext' => 'Se ha enviado tu mensaje de correo electrónico.', -'emailuserfooter' => 'Este correo electrónico fue enviado por $1 a $2 a través de la función «Enviar correo electrónico a este usuario» en {{SITENAME}}.', +'usermailererror' => 'El sistema de correo devolvió un error:', +'defemailsubject' => 'Correo de {{SITENAME}}', +'usermaildisabled' => 'Correo electrónico del usuario deshabilitado', +'usermaildisabledtext' => 'No puedes enviar correos electrónicos a otros usuarios en esta wiki', +'noemailtitle' => 'No hay dirección de correo electrónico', +'noemailtext' => 'Este usuario no ha especificado una dirección de correo electrónico válida.', +'nowikiemailtitle' => 'correos electrónicos no permitidos', +'nowikiemailtext' => 'Este usuario ha elegido no recibir correos electrónicos de otros usuarios.', +'email-legend' => 'Enviar un correo electrónico a otro usuario de {{SITENAME}}', +'emailfrom' => 'De:', +'emailto' => 'Para:', +'emailsubject' => 'Asunto:', +'emailmessage' => 'Mensaje:', +'emailsend' => 'Enviar', +'emailccme' => 'Enviarme una copia de mi mensaje.', +'emailccsubject' => 'Copia de tu mensaje a $1: $2', +'emailsent' => 'Correo electrónico enviado', +'emailsenttext' => 'Se ha enviado tu mensaje de correo electrónico.', +'emailuserfooter' => 'Este correo electrónico fue enviado por $1 a $2 a través de la función «Enviar correo electrónico a este usuario» en {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Dejando un mensaje de sistema.', +'usermessage-editor' => 'Mensajero del sistema', # Watchlist 'watchlist' => 'Lista de seguimiento', 'mywatchlist' => 'Lista de seguimiento', -'watchlistfor' => "(para '''$1''')", +'watchlistfor2' => 'Para $1 $2', 'nowatchlist' => 'No tienes ninguna página en tu lista de seguimiento.', 'watchlistanontext' => 'Para ver o editar las entradas de tu lista de seguimiento es necesario $1.', 'watchnologin' => 'No has iniciado sesión', @@ -2193,7 +2241,7 @@ Véase $2 para un registro de los borrados recientes.', ** Vandalismo', 'delete-edit-reasonlist' => 'Editar razones de borrado', 'delete-toobig' => 'Esta página tiene un historial muy grande, con más de $1 {{PLURAL:$1|revisión|revisiones}}. Borrar este tipo de páginas ha sido restringido para prevenir posibles problemas en {{SITENAME}}.', -'delete-warning-toobig' => 'Esta página tiene un historial de más de {{PLURAL:$1|revisión|revisiones}}. Eliminarla puede perturbar las operaciones de la base de datos de {{SITENAME}}. Ten cuidado al borrar.', +'delete-warning-toobig' => 'Esta página tiene un historial de más de $1 {{PLURAL:$1|revisión|revisiones}}. Eliminarla puede perturbar las operaciones de la base de datos de {{SITENAME}}. Ten cuidado al borrar.', # Rollback 'rollback' => 'Revertir ediciones', @@ -2210,7 +2258,10 @@ La última edición fue hecha por [[User:$3|$3]] ([[User talk:$3|discusión]]{{i 'revertpage' => 'Revertidos los cambios de [[Special:Contributions/$2|$2]] ([[User talk:$2|disc.]]) a la última edición de [[User:$1|$1]]', 'revertpage-nouser' => 'Revertidas ediciones hechas por (nombre de usuario eliminado) a la última revisión hecha por [[User:$1|$1]]', 'rollback-success' => 'Revertidas las ediciones de $1; recuperada la última versión de $2.', -'sessionfailure' => 'Parece que hay un problema con tu sesión; + +# Edit tokens +'sessionfailure-title' => 'Error de sesión', +'sessionfailure' => 'Parece que hay un problema con tu sesión; esta acción ha sido cancelada como medida de precaución contra secuestros de sesión. Por favor, pulsa «Atrás», recarga la página de la que viniste e inténtalo de nuevo.', @@ -2339,18 +2390,22 @@ $1', 'month' => 'Desde el mes (y anterior):', 'year' => 'Desde el año (y anterior):', -'sp-contributions-newbies' => 'Mostrar solo las contribuciones de usuarios nuevos', -'sp-contributions-newbies-sub' => 'Para cuentas nuevas', -'sp-contributions-newbies-title' => 'Contribuciones de usuarios nuevos', -'sp-contributions-blocklog' => 'registro de bloqueos', -'sp-contributions-deleted' => 'contribuciones de usuario borradas', -'sp-contributions-logs' => 'registros', -'sp-contributions-talk' => 'discusión', -'sp-contributions-userrights' => 'administración de derechos de usuarios', -'sp-contributions-blocked-notice' => 'Este usuario está actualmente bloqueado. La última entrada del registro de bloqueos es presentada debajo para mayor referencia:', -'sp-contributions-search' => 'Buscar contribuciones', -'sp-contributions-username' => 'Dirección IP o nombre de usuario:', -'sp-contributions-submit' => 'Buscar', +'sp-contributions-newbies' => 'Mostrar solo las contribuciones de usuarios nuevos', +'sp-contributions-newbies-sub' => 'Para cuentas nuevas', +'sp-contributions-newbies-title' => 'Contribuciones de usuarios nuevos', +'sp-contributions-blocklog' => 'registro de bloqueos', +'sp-contributions-deleted' => 'contribuciones de usuario borradas', +'sp-contributions-uploads' => 'subidas', +'sp-contributions-logs' => 'registros', +'sp-contributions-talk' => 'discusión', +'sp-contributions-userrights' => 'administración de derechos de usuarios', +'sp-contributions-blocked-notice' => 'Este usuario está actualmente bloqueado. La última entrada del registro de bloqueos es presentada debajo para mayor referencia:', +'sp-contributions-blocked-notice-anon' => 'Esta dirección IP se encuentra actualmente bloqueada. +A continuación se muestra la última entrada del registro de bloqueos para mayor referencia.', +'sp-contributions-search' => 'Buscar contribuciones', +'sp-contributions-username' => 'Dirección IP o nombre de usuario:', +'sp-contributions-toponly' => 'Mostrar solamente revisiones top', +'sp-contributions-submit' => 'Buscar', # What links here 'whatlinkshere' => 'Lo que enlaza aquí', @@ -2411,7 +2466,6 @@ Véase la [[Special:IPBlockList|lista de bloqueos]] para revisarlo.', 'ipb-edit-dropdown' => 'Editar motivo del bloqueo', 'ipb-unblock-addr' => 'Desbloquear $1', 'ipb-unblock' => 'Desbloquear un usuario o una IP', -'ipb-blocklist-addr' => 'Bloqueos vigentes de $1', 'ipb-blocklist' => 'Ver bloqueos vigentes', 'ipb-blocklist-contribs' => 'Contribuciones de $1', 'unblockip' => 'Desbloquear usuario', @@ -2481,6 +2535,8 @@ Sin embargo, está bloqueada como parte del rango $2, que puede ser desbloqueado 'sorbs_create_account_reason' => 'Su dirección IP está listada como proxy abierto en DNSBL. No puede crear una cuenta', 'cant-block-while-blocked' => 'No puedes bloquear a otros usuarios mientras estás bloqueado.', 'cant-see-hidden-user' => 'El usuario que está intentando bloquear ya ha sido bloqueado y oculto. Puesto que usted no tiene el derecho hideuser, usted no puede ver o editar los bloqueos del usuario.', +'ipbblocked' => 'No puedes bloquear o desbloquear a otros usuarios porque estás bloqueado', +'ipbnounblockself' => 'No puedes desbloquearte', # Developer tools 'lockdb' => 'Bloquear la base de datos', @@ -2512,6 +2568,17 @@ Tú eres responsable de hacer que los enlaces sigan apuntando a donde se supone Recuerda que la página '''no''' será renombrada si ya existe una página con el nuevo título, a no ser que sea una página vacía o una redirección sin historial. Esto significa que podrás renombrar una página a su título original si has cometido un error, pero que no podrás sobrescribir una página existente. +'''¡Aviso!''' +Este puede ser un cambio drástico e inesperado para una página popular; +por favor, asegúrate de entender las consecuencias del procedimiento antes de seguir adelante.", +'movepagetext-noredirectfixer' => "Usando el siguiente formulario se renombrará una página, moviendo todo su historial al nuevo nombre. +El título anterior se convertirá en una redirección al nuevo título. +Asegúrate de no dejar [[Special:DoubleRedirects|redirecciones dobles]] o [[Special:BrokenRedirects|rotas]]. +Tú eres responsable de hacer que los enlaces sigan apuntando adonde se supone que deberían hacerlo. + +Recuerda que la página '''no''' será renombrada si ya existe una página con el nuevo título, a no ser que sea una página vacía o una redirección sin historial. +Esto significa que podrás renombrar una página a su título original si has cometido un error, pero que no podrás sobrescribir una página existente. + '''¡Aviso!''' Este puede ser un cambio drástico e inesperado para una página popular; por favor, asegúrate de entender las consecuencias del procedimiento antes de seguir adelante.", @@ -2571,6 +2638,7 @@ La página de destino ("[[:$1]]") ya existe. ¿Quiere borrarla para permitir al 'immobile-source-page' => 'Esta página no se puede renombrar.', 'immobile-target-page' => 'No se puede trasladar a tal título.', 'imagenocrossnamespace' => 'No se puede trasladar el fichero a otro espacio de nombres', +'nonfile-cannot-move-to-file' => 'No es posible mover un no-archivo al espacio de nombres de archivo', 'imagetypemismatch' => 'La nueva extensión de archivo no corresponde con su tipo', 'imageinvalidfilename' => 'El nombre del fichero de destino no es válido', 'fix-double-redirects' => 'Actualizar las redirecciones que apuntan al título original', @@ -2649,6 +2717,7 @@ Todas las importaciones transwiki se registran en el [[Special:Log/import|regist 'importstart' => 'Importando páginas...', 'import-revision-count' => '$1 {{PLURAL:$1|revisión|revisiones}}', 'importnopages' => 'No hay páginas que importar.', +'imported-log-entries' => 'Importados $1 {{PLURAL:$1|entradas de registro|entradas de registro}}.', 'importfailed' => 'La importación ha fallado: $1', 'importunknownsource' => 'Tipo de fuente de importación desconocida', 'importcantopen' => 'No se pudo importar el archivo', @@ -2692,7 +2761,7 @@ No hay un directorio temporal.', 'tooltip-pt-anonlogin' => 'Te invitamos a registrarte, aunque no es obligatorio', 'tooltip-pt-logout' => 'Salir de la sesión', 'tooltip-ca-talk' => 'Discusión acerca del artículo', -'tooltip-ca-edit' => 'Puedes editar esta página. Por favor, usa el botón de previsualización antes de grabar.', +'tooltip-ca-edit' => 'Puedes editar esta página. Utiliza el botón de previsualización antes de guardar', 'tooltip-ca-addsection' => 'Inicia una nueva sección', 'tooltip-ca-viewsource' => 'Esta página está protegida; sólo puedes ver su código fuente', 'tooltip-ca-history' => 'Versiones anteriores de esta página y sus autores', @@ -2706,8 +2775,8 @@ No hay un directorio temporal.', 'tooltip-search' => 'Buscar en este wiki', 'tooltip-search-go' => 'Ir al artículo con este nombre exacto si existe', 'tooltip-search-fulltext' => 'Busca este texto en las páginas', -'tooltip-p-logo' => 'Portada', -'tooltip-n-mainpage' => 'Visitar la Portada', +'tooltip-p-logo' => 'Visitar la página principal', +'tooltip-n-mainpage' => 'Visitar la página principal', 'tooltip-n-mainpage-description' => 'Visitar la página principal', 'tooltip-n-portal' => 'Acerca del proyecto, lo que puedes hacer, dónde encontrar información', 'tooltip-n-currentevents' => 'Información de contexto sobre acontecimientos actuales', @@ -2745,6 +2814,8 @@ No hay un directorio temporal.', 'tooltip-rollback' => '«Revertir» revierte todas las ediciones del último usuario con un solo clic.', 'tooltip-undo' => '«Deshacer» revierte la edición seleccionada y abre la página de edición en el modo de previsualización. Permite añadir una razón al resumen de edición.', +'tooltip-preferences-save' => 'Guardar preferencias', +'tooltip-summary' => 'Ingresar un breve resumen', # Stylesheets 'common.css' => '/* Los estilos CSS definidos aquí aplicarán a todas las pieles (skins) */', @@ -2867,14 +2938,17 @@ Ejecutarlo podría comprometer la seguridad de su equipo.", 'imagemaxsize' => "Límite de tamaño de imagen:
    ''(para páginas de descripción de archivo)''", 'thumbsize' => 'Tamaño de las vistas en miniatura:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:|página|páginas}}', -'file-info' => '(tamaño de archivo: $1; tipo MIME: $2)', -'file-info-size' => '($1 × $2 píxeles; tamaño de archivo: $3; tipo MIME: $4)', +'file-info' => 'tamaño de archivo: $1; tipo MIME: $2', +'file-info-size' => '$1 × $2 píxeles; tamaño de archivo: $3; tipo MIME: $4', 'file-nohires' => 'No disponible a mayor resolución.', -'svg-long-desc' => '(archivo SVG, nominalmente $1 × $2 píxeles, tamaño de archivo: $3)', +'svg-long-desc' => 'archivo SVG, nominalmente $1 × $2 píxeles, tamaño de archivo: $3', 'show-big-image' => 'Resolución original', 'show-big-image-thumb' => 'Tamaño de esta vista previa: $1 × $2 píxeles', 'file-info-gif-looped' => 'bucleado', 'file-info-gif-frames' => '$1 {{PLURAL:$1|frame|frames}}', +'file-info-png-looped' => 'bucleado', +'file-info-png-repeat' => 'reproducido $1 {{PLURAL:$1|vez|veces}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|marco|marcos}}', # Special:NewFiles 'newimages' => 'Galería de imágenes nuevas', @@ -3029,9 +3103,10 @@ Existen otros campos que se mantendrán ocultos por defecto. 'exif-gpsareainformation' => 'Nombre de la área GPS', 'exif-gpsdatestamp' => 'Fecha GPS', 'exif-gpsdifferential' => 'Corrección diferencial de GPS', +'exif-objectname' => 'Título breve', # EXIF attributes -'exif-compression-1' => 'No comprimida', +'exif-compression-1' => 'Sin comprimir', 'exif-unknowndate' => 'Fecha desconocida', @@ -3110,6 +3185,8 @@ Existen otros campos que se mantendrán ocultos por defecto. 'exif-sensingmethod-7' => 'Sensor trilineal', 'exif-sensingmethod-8' => 'Sensor lineal secuencial de color', +'exif-filesource-3' => 'Cámara digital', + 'exif-scenetype-1' => 'Una imagen directamente fotografiada', 'exif-customrendered-0' => 'Proceso normal', @@ -3186,26 +3263,26 @@ Existen otros campos que se mantendrán ocultos por defecto. 'limitall' => 'Todos', # E-mail address confirmation -'confirmemail' => 'Confirmar dirección de correo electrónico', -'confirmemail_noemail' => 'No tienes una dirección de correo electrónico válida en tus [[Special:Preferences|preferencias de usuario]].', -'confirmemail_text' => '{{SITENAME}} requiere la validación de tu dirección de correo antes de usarlo. Pulsa el botón de abajo para enviar la confirmación. +'confirmemail' => 'Confirmar dirección de correo electrónico', +'confirmemail_noemail' => 'No tienes una dirección de correo electrónico válida en tus [[Special:Preferences|preferencias de usuario]].', +'confirmemail_text' => '{{SITENAME}} requiere la validación de tu dirección de correo antes de usarlo. Pulsa el botón de abajo para enviar la confirmación. El correo incluirá un enlace con un código. Introdúcelo para confirmar la validez de tu dirección.', -'confirmemail_pending' => 'Ya se te ha enviado un código de confirmación; si creaste una cuenta recientemente, puede que tengas que esperar unos minutos para que te llegue antes de intentar pedir un nuevo código.', -'confirmemail_send' => 'Envíar el código de confimación.', -'confirmemail_sent' => 'Confirmación de correo enviada.', -'confirmemail_oncreate' => 'Se ha enviado un código de confirmación a tu dirección de correo electrónico. +'confirmemail_pending' => 'Ya se te ha enviado un código de confirmación; si creaste una cuenta recientemente, puede que tengas que esperar unos minutos para que te llegue antes de intentar pedir un nuevo código.', +'confirmemail_send' => 'Envíar el código de confimación.', +'confirmemail_sent' => 'Confirmación de correo enviada.', +'confirmemail_oncreate' => 'Se ha enviado un código de confirmación a tu dirección de correo electrónico. Este código no es necesario para entrar, pero necesitarás darlo antes de activar cualquier función basada en correo electrónico en el wiki.', -'confirmemail_sendfailed' => 'No fue posible enviar el correo de confirmación. Por favor, comprueba la validez de la dirección de correo. +'confirmemail_sendfailed' => 'No fue posible enviar el correo de confirmación. Por favor, comprueba la validez de la dirección de correo. El servidor indicó el error: $1', -'confirmemail_invalid' => 'Código de confirmación incorrecto. El código debe haber expirado.', -'confirmemail_needlogin' => 'Necesitas $1 para confirmar tu dirección electrónica.', -'confirmemail_success' => 'Su dirección de correo ha sido confirmada +'confirmemail_invalid' => 'Código de confirmación incorrecto. El código debe haber expirado.', +'confirmemail_needlogin' => 'Necesitas $1 para confirmar tu dirección electrónica.', +'confirmemail_success' => 'Su dirección de correo ha sido confirmada Ahora puedes [[Special:UserLogin|identificarte]] y colaborar en el wiki.', -'confirmemail_loggedin' => 'Tu dirección de correo electrónico ha sido confirmada.', -'confirmemail_error' => 'Algo salió mal al guardar su confirmación.', -'confirmemail_subject' => 'confirmación de la dirección de correo de {{SITENAME}}', -'confirmemail_body' => 'Alguien, probablemente usted mismo, ha registrado desde la dirección IP $1 la cuenta "$2" en {{SITENAME}}, utilizando esta dirección de correo. +'confirmemail_loggedin' => 'Tu dirección de correo electrónico ha sido confirmada.', +'confirmemail_error' => 'Algo salió mal al guardar su confirmación.', +'confirmemail_subject' => 'confirmación de la dirección de correo de {{SITENAME}}', +'confirmemail_body' => 'Alguien, probablemente usted mismo, ha registrado desde la dirección IP $1 la cuenta "$2" en {{SITENAME}}, utilizando esta dirección de correo. Para confirmar que esta cuenta realmente le pertenece y activar el correo en {{SITENAME}}, siga este enlace: @@ -3216,8 +3293,32 @@ Si la cuenta *no* es suya, siga este otro enlace para cancelar la confirmación $5 El código de confirmación expirará en $4.', -'confirmemail_invalidated' => 'La confirmación de la dirección de correo electrónico ha sido cancelada', -'invalidateemail' => 'Cancelar confirmación de correo electrónico', +'confirmemail_body_changed' => 'Alguien, probablemente tú, +ha modificado la dirección de correo electrónico asociado a la cuenta "$2" hacia esta en {{SITENAME}}, desde la dirección IP $1. + +Para confirmar que esta cuenta realmente te pertenece y reactivar las funciones de correo electrónico en {{SITENAME}}, abre este enlace en su navegador: + +$3 + +Si la cuenta *no* te pertenece, sigue el siguiente enlace para cancelar la confirmación: + +$5 + +Este código de confirmación expirará el $4.', +'confirmemail_body_set' => 'Alguien, probablemente tu desde la dirección IP $1, +ha cambiado la dirección de correo electrónico de la cuenta $2 a esta dirección en {{SITENAME}}. + +Para confirmar que esta cuenta realmente te pertenece y reactivar las capacidades del correo electrónico en {{SITENAME}}, abre este enlace en tu navegador: + +$3 + +Si la cuenta *no* te pertenece sigue entonces este otro enlace para cancelar la confirmación del correo electrónico: + +$5 + +Este código de confirmación caducará el $4.', +'confirmemail_invalidated' => 'La confirmación de la dirección de correo electrónico ha sido cancelada', +'invalidateemail' => 'Cancelar confirmación de correo electrónico', # Scary transclusion 'scarytranscludedisabled' => '[Transclusión interwiki está deshabilitada]', @@ -3258,6 +3359,7 @@ $1", 'table_pager_first' => 'Primera página', 'table_pager_last' => 'Última página', 'table_pager_limit' => 'Mostrar $1 elementos por página', +'table_pager_limit_label' => 'Items por página:', 'table_pager_limit_submit' => 'Ir', 'table_pager_empty' => 'No hay resultados', @@ -3316,6 +3418,7 @@ También puedes [[Special:Watchlist/edit|usar el editor estándar]].', 'version-specialpages' => 'Páginas especiales', 'version-parserhooks' => 'Extensiones del analizador sintáctico', 'version-variables' => 'Variables', +'version-skins' => 'Pieles', 'version-other' => 'Otro', 'version-mediahandlers' => 'Manejadores multimedia', 'version-hooks' => 'Extensiones', @@ -3327,6 +3430,13 @@ También puedes [[Special:Watchlist/edit|usar el editor estándar]].', 'version-hook-subscribedby' => 'Suscrito por', 'version-version' => '(Versión $1)', 'version-license' => 'Licencia', +'version-poweredby-credits' => "Este wiki funciona gracias a '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'otros', +'version-license-info' => 'MediaWiki es software libre; puedes redistribuírlo y/o modificarlo bajo los términos de la Licencia General Pública GNU publicada por la Fundación del Software Libre; ya sea la versión 2 de la licencia, o (a tu elección) cualquier versión posterior. + +MediaWiki es distribuído con la esperanza de que será útil, pero SIN NINGUNA GARANTÍA; ni siquiera con la garantía implícita de COMERCIALIZACIÓN ó ADAPTACIÓN A UN PROPÓSITO PARTICULAR. Véase la Licencia Pública General GNU para mayores detalles. + +Has recibido [{{SERVER}}{{SCRIPTPATH}}/COPYING una copia de la Licencia Pública General GNU] junto a este programa; si no es así, escríbale a la Fundación del Software Libre, Inc., Calle Franklin 51, Quinto Piso, Boston, MA 02110-1301, EE.UU. ó [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html léela en línea].', 'version-software' => 'Software instalado', 'version-software-product' => 'Producto', 'version-software-version' => 'Versión', @@ -3349,8 +3459,8 @@ Ingrese el nombre del archivo sin el prefijo "{{ns:file}}:".', 'fileduplicatesearch-filename' => 'Nombre del fichero:', 'fileduplicatesearch-submit' => 'Buscar', 'fileduplicatesearch-info' => '$1 × $2 píxeles
    Tamaño: $3
    Tipo MIME: $4', -'fileduplicatesearch-result-1' => 'El archivo "$1" no tiene duplicados idénticos.', -'fileduplicatesearch-result-n' => 'El archivo "$1" tiene {{PLURAL:$2|1 duplicado idéntico|$2 duplicados idénticos}}.', +'fileduplicatesearch-result-1' => 'El archivo «$1» no tiene duplicados idénticos.', +'fileduplicatesearch-result-n' => 'El archivo «$1» tiene {{PLURAL:$2|1 duplicado idéntico|$2 duplicados idénticos}}.', # Special:SpecialPages 'specialpages' => 'Páginas especiales', @@ -3359,20 +3469,20 @@ Ingrese el nombre del archivo sin el prefijo "{{ns:file}}:".', * Páginas especiales restringidas.', 'specialpages-group-maintenance' => 'Reportes de mantenimiento', 'specialpages-group-other' => 'Otras páginas especiales', -'specialpages-group-login' => 'Registrarse / entrar', +'specialpages-group-login' => 'Iniciar sesión / Registrarse', 'specialpages-group-changes' => 'Cambios recientes y registros', 'specialpages-group-media' => 'Páginas sobre archivos', 'specialpages-group-users' => 'Usuarios y permisos', 'specialpages-group-highuse' => 'Páginas sobre usos', 'specialpages-group-pages' => 'Listas de páginas', 'specialpages-group-pagetools' => 'Herramientas de páginas', -'specialpages-group-wiki' => 'Datos sobre la wiki y herramientas', +'specialpages-group-wiki' => 'Herramientas y datos del wiki', 'specialpages-group-redirects' => 'Búsquedas y redirecciones', 'specialpages-group-spam' => 'Herramientas anti-SPAM', # Special:BlankPage 'blankpage' => 'Página vacía', -'intentionallyblankpage' => 'Esta pagina está en blanco intencionadamente', +'intentionallyblankpage' => 'Esta pagina está en blanco de manera intencionada.', # External image whitelist 'external_image_whitelist' => ' #Deja esta línea exactamente como está
    @@ -3397,12 +3507,21 @@ Ingrese el nombre del archivo sin el prefijo "{{ns:file}}:".',
     'tags-edit'               => 'editar',
     'tags-hitcount'           => '$1 {{PLURAL:$1|cambio|cambios}}',
     
    +# Special:ComparePages
    +'comparepages'     => 'Comparar páginas',
    +'compare-selector' => 'Comparar revisiones de página',
    +'compare-page1'    => 'Página 1',
    +'compare-page2'    => 'Página 2',
    +'compare-rev1'     => 'Revisión 1',
    +'compare-rev2'     => 'Revisión 2',
    +'compare-submit'   => 'Comparar',
    +
     # Database error messages
    -'dberr-header'      => 'Esta wiki tiene un problema',
    +'dberr-header'      => 'Este wiki tiene un problema',
     'dberr-problems'    => 'Lo sentimos. Este sitio está experimentando dificultades técnicas.',
     'dberr-again'       => 'Prueba a recargar dentro de unos minutos.',
     'dberr-info'        => '(No se puede contactar con la base de datos del servidor: $1)',
    -'dberr-usegoogle'   => 'Mientras tanto puede probar buscando a través de Google.',
    +'dberr-usegoogle'   => 'Mientras tanto puedes probar buscando a través de Google.',
     'dberr-outofdate'   => 'Ten en cuenta que su índice de nuestro contenido puede estar desactualizado.',
     'dberr-cachederror' => 'La siguiente es una página guardada de la página solicitada, y puede no estar actualizada.',
     
    @@ -3413,8 +3532,13 @@ Ingrese el nombre del archivo sin el prefijo "{{ns:file}}:".',
     'htmlform-float-invalid'       => 'El valor que ha especificado no es un número.',
     'htmlform-int-toolow'          => 'El valor que especificaste está debajo del mínimo de $1',
     'htmlform-int-toohigh'         => 'El valor que especificaste está arriba del máximo de $1',
    +'htmlform-required'            => 'Este valor es obligatorio',
     'htmlform-submit'              => 'Enviar',
     'htmlform-reset'               => 'Deshacer cambios',
     'htmlform-selectorother-other' => 'Otro',
     
    +# SQLite database support
    +'sqlite-has-fts' => '$1 con soporte para búsqueda de texto completo',
    +'sqlite-no-fts'  => '$1 sin soporte para búsqueda de texto completo',
    +
     );
    diff --git a/languages/messages/MessagesEt.php b/languages/messages/MessagesEt.php
    index 54c9e9f5..48c2b883 100644
    --- a/languages/messages/MessagesEt.php
    +++ b/languages/messages/MessagesEt.php
    @@ -14,6 +14,7 @@
      * @author KaidoKikkas
      * @author KalmerE.
      * @author Ker
    + * @author Kyng
      * @author Pikne
      * @author Silvar
      * @author Võrok
    @@ -95,24 +96,24 @@ $specialPageAliases = array(
     	'Confirmemail'              => array( 'E-posti_aadressi_kinnitamine' ),
     	'Whatlinkshere'             => array( 'Lingid_siia' ),
     	'Recentchangeslinked'       => array( 'Seotud_muudatused' ),
    -	'Movepage'                  => array( 'Teisalda' ),
    -	'Booksources'               => array( 'Otsi_raamatut' ),
    +	'Movepage'                  => array( 'Teisaldamine', 'Teisalda' ),
    +	'Booksources'               => array( 'Raamatuotsimine', 'Otsi_raamatut' ),
     	'Categories'                => array( 'Kategooriad' ),
     	'Export'                    => array( 'Lehekülgede_eksport' ),
     	'Version'                   => array( 'Versioon' ),
     	'Allmessages'               => array( 'Kõik_sõnumid' ),
     	'Log'                       => array( 'Logid' ),
     	'Blockip'                   => array( 'Blokeerimine' ),
    -	'Undelete'                  => array( 'Taasta_lehekülg' ),
    +	'Undelete'                  => array( 'Lehekülje_taastamine', 'Taasta_lehekülg' ),
     	'Import'                    => array( 'Lehekülgede_import' ),
    -	'Lockdb'                    => array( 'Lukusta_andmebaas' ),
    -	'Unlockdb'                  => array( 'Ava_andmebaas' ),
    +	'Lockdb'                    => array( 'Andmebaasi_lukustamine', 'Lukusta_andmebaas' ),
    +	'Unlockdb'                  => array( 'Andmebaasi_avamine', 'Ava_andmebaas' ),
     	'Userrights'                => array( 'Kasutaja_õigused' ),
     	'MIMEsearch'                => array( 'MIME_otsing' ),
    -	'FileDuplicateSearch'       => array( 'Otsi_faili_duplikaate' ),
    +	'FileDuplicateSearch'       => array( 'Faili_duplikaatide_otsimine', 'Otsi_faili_duplikaate' ),
     	'Unwatchedpages'            => array( 'Jälgimata_leheküljed' ),
     	'Listredirects'             => array( 'Ümbersuunamised' ),
    -	'Revisiondelete'            => array( 'Kustuta_muudatus' ),
    +	'Revisiondelete'            => array( 'Muudatuse_kustutamine', 'Kustuta_muudatus' ),
     	'Unusedtemplates'           => array( 'Kasutamata_mallid' ),
     	'Randomredirect'            => array( 'Juhuslik_ümbersuunamine' ),
     	'Mypage'                    => array( 'Minu_lehekülg' ),
    @@ -121,20 +122,20 @@ $specialPageAliases = array(
     	'Listadmins'                => array( 'Ülemaloend' ),
     	'Listbots'                  => array( 'Robotiloend' ),
     	'Popularpages'              => array( 'Loetumad_leheküljed' ),
    -	'Search'                    => array( 'Otsi' ),
    -	'Resetpass'                 => array( 'Muuda_parool' ),
    +	'Search'                    => array( 'Otsimine', 'Otsi' ),
    +	'Resetpass'                 => array( 'Parooli_muutmine', 'Muuda_parool' ),
     	'Withoutinterwiki'          => array( 'Ilma_keelelinkideta' ),
     	'MergeHistory'              => array( 'Liitmisajalugu' ),
     	'Filepath'                  => array( 'Failitee' ),
    -	'Invalidateemail'           => array( 'Tühista_e-posti_kinnitus' ),
    +	'Invalidateemail'           => array( 'E-posti_kinnituse_tühistamine', 'Tühista_e-posti_kinnitus' ),
     	'Blankpage'                 => array( 'Tühi_leht' ),
    -	'LinkSearch'                => array( 'Otsi_välislinke' ),
    +	'LinkSearch'                => array( 'Välislinkide_otsimine', 'Otsi_välislinke' ),
     	'DeletedContributions'      => array( 'Kustutatud_kaastöö' ),
     	'Tags'                      => array( 'Märgised' ),
     	'Activeusers'               => array( 'Teguskasutajad' ),
     );
     
    -#Lisasin eestimaised poed, aga võõramaiseid ei julenud kustutada.
    +# Lisasin eestimaised poed, aga võõramaiseid ei julenud kustutada.
     $bookstoreList = array(
     	'Apollo' => 'http://www.apollo.ee/search.php?keyword=$1&search=OTSI',
     	'minu Raamat' => 'http://www.raamat.ee/advanced_search_result.php?keywords=$1',
    @@ -176,6 +177,7 @@ $magicWords = array(
     	'numberofusers'         => array( '1', 'KASUTAJAMÄÄR', 'NUMBEROFUSERS' ),
     	'numberofactiveusers'   => array( '1', 'TEGUSKASUTAJAMÄÄR', 'NUMBEROFACTIVEUSERS' ),
     	'numberofedits'         => array( '1', 'REDIGEERIMISMÄÄR', 'NUMBEROFEDITS' ),
    +	'numberofviews'         => array( '1', 'VAATAMISTEARV', 'NUMBEROFVIEWS' ),
     	'pagename'              => array( '1', 'LEHEKÜLJENIMI', 'PAGENAME' ),
     	'pagenamee'             => array( '1', 'LEHEKÜLJENIMI1', 'PAGENAMEE' ),
     	'namespace'             => array( '1', 'NIMERUUM', 'NAMESPACE' ),
    @@ -201,6 +203,7 @@ $magicWords = array(
     	'img_center'            => array( '1', 'keskel', 'center', 'centre' ),
     	'img_framed'            => array( '1', 'raam', 'framed', 'enframed', 'frame' ),
     	'img_frameless'         => array( '1', 'raamita', 'frameless' ),
    +	'img_page'              => array( '1', 'lehekülg=$1', 'lehekülg_$1', 'page=$1', 'page $1' ),
     	'img_border'            => array( '1', 'ääris', 'border' ),
     	'sitename'              => array( '1', 'KOHANIMI', 'SITENAME' ),
     	'ns'                    => array( '0', 'NR:', 'NS:' ),
    @@ -219,6 +222,7 @@ $magicWords = array(
     	'ucfirst'               => array( '0', 'ESIST:', 'UCFIRST:' ),
     	'lc'                    => array( '0', 'VT:', 'LC:' ),
     	'uc'                    => array( '0', 'ST:', 'UC:' ),
    +	'displaytitle'          => array( '1', 'PEALKIRI', 'DISPLAYTITLE' ),
     	'newsectionlink'        => array( '1', '__UUEALAOSALINK__', '__NEWSECTIONLINK__' ),
     	'nonewsectionlink'      => array( '1', '__UUEALAOSALINGITA__', '__NONEWSECTIONLINK__' ),
     	'currenttimestamp'      => array( '1', 'HETKEAJATEMPEL', 'CURRENTTIMESTAMP' ),
    @@ -238,7 +242,7 @@ $magicWords = array(
     	'formatdate'            => array( '0', 'kuupäevavormindus', 'formatdate', 'dateformat' ),
     );
     
    -$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' );
    +$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
     $linkTrail = '/^([äöõšüža-z]+)(.*)$/sDu';
     
     $datePreferences = array(
    @@ -288,8 +292,7 @@ $messages = array(
     'tog-editsection'             => '[redigeeri] lingid peatükkide muutmiseks',
     'tog-editsectiononrightclick' => 'Peatükkide redigeerimine paremklõpsuga alampealkirjadel (JavaScript)',
     'tog-showtoc'                 => 'Näita sisukorda (lehtedel, millel on rohkem kui 3 pealkirja)',
    -'tog-rememberpassword'        => 'Parooli meeldejätmine tulevasteks seanssideks',
    -'tog-editwidth'               => 'Laienda toimetamisaken ekraani laiuseks',
    +'tog-rememberpassword'        => 'Parooli meeldejätmine tulevasteks seanssideks (kuni $1 {{PLURAL:$1|päevaks|päevaks}})',
     'tog-watchcreations'          => 'Lisa minu loodud lehed jälgimisloendisse',
     'tog-watchdefault'            => 'Jälgi uusi ja muudetud artikleid',
     'tog-watchmoves'              => 'Lisa minu teisaldatud leheküljed jälgimisloendisse',
    @@ -429,31 +432,21 @@ ning [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide kasutusjuhendit].'
     'faqpage'        => 'Project:KKK',
     
     # Vector skin
    -'vector-action-addsection'   => 'Lisa teema',
    -'vector-action-delete'       => 'Kustuta',
    -'vector-action-move'         => 'Teisalda',
    -'vector-action-protect'      => 'Kaitse',
    -'vector-action-undelete'     => 'Taasta',
    -'vector-action-unprotect'    => 'Tühista kaitse',
    -'vector-namespace-category'  => 'Kategooria',
    -'vector-namespace-help'      => 'Abilehekülg',
    -'vector-namespace-image'     => 'Fail',
    -'vector-namespace-main'      => 'Artikkel',
    -'vector-namespace-media'     => 'Meedialeht',
    -'vector-namespace-mediawiki' => 'Sõnum',
    -'vector-namespace-project'   => 'Projektileht',
    -'vector-namespace-special'   => 'Erileht',
    -'vector-namespace-talk'      => 'Arutelu',
    -'vector-namespace-template'  => 'Mall',
    -'vector-namespace-user'      => 'Kasutaja leht',
    -'vector-view-create'         => 'Loo',
    -'vector-view-edit'           => 'Redigeeri',
    -'vector-view-history'        => 'Näita ajalugu',
    -'vector-view-view'           => 'Vaata',
    -'vector-view-viewsource'     => 'Vaata lähteteksti',
    -'actions'                    => 'Toimingud',
    -'namespaces'                 => 'Nimeruumid',
    -'variants'                   => 'Variandid',
    +'vector-action-addsection'       => 'Lisa teema',
    +'vector-action-delete'           => 'Kustuta',
    +'vector-action-move'             => 'Teisalda',
    +'vector-action-protect'          => 'Kaitse',
    +'vector-action-undelete'         => 'Taasta',
    +'vector-action-unprotect'        => 'Tühista kaitse',
    +'vector-simplesearch-preference' => 'Luba täiustatud otsinguvihjed (ainult Vektori-kujunduses)',
    +'vector-view-create'             => 'Loo',
    +'vector-view-edit'               => 'Redigeeri',
    +'vector-view-history'            => 'Näita ajalugu',
    +'vector-view-view'               => 'Vaata',
    +'vector-view-viewsource'         => 'Vaata lähteteksti',
    +'actions'                        => 'Toimingud',
    +'namespaces'                     => 'Nimeruumid',
    +'variants'                       => 'Variandid',
     
     'errorpagetitle'    => 'Viga',
     'returnto'          => 'Naase lehele $1',
    @@ -466,7 +459,7 @@ ning [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide kasutusjuhendit].'
     'history'           => 'Artikli ajalugu',
     'history_short'     => 'Ajalugu',
     'updatedmarker'     => 'uuendatud pärast viimast külastust',
    -'info_short'        => 'Info',
    +'info_short'        => 'Teave',
     'printableversion'  => 'Prinditav versioon',
     'permalink'         => 'Püsilink',
     'print'             => 'Prindi',
    @@ -514,6 +507,7 @@ Liiga palju kasutajaid üritab korraga seda lehte vaadata.
     Palun oota hetk enne kui uuesti proovid.
     
     $1',
    +'pool-errorunknown' => 'Teadmata tõrge',
     
     # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
     'aboutsite'            => '{{GRAMMAR:genitive|{{SITENAME}}}} tiitelandmed',
    @@ -681,7 +675,7 @@ Sinu konto on loodud.
     'yourname'                   => 'Kasutajanimi:',
     'yourpassword'               => 'Parool:',
     'yourpasswordagain'          => 'Sisesta parool uuesti:',
    -'remembermypassword'         => 'Jäta parool meelde',
    +'remembermypassword'         => 'Jäta parool meelde (kuni $1 {{PLURAL:$1|päevaks|päevaks}})',
     'yourdomainname'             => 'Sinu domeen:',
     'externaldberror'            => 'Esines autentimistõrge või sul pole õigust konto andmeid muuta.',
     'login'                      => 'Logi sisse',
    @@ -698,6 +692,7 @@ Sinu konto on loodud.
     'gotaccount'                 => "Kui sul on juba konto, '''$1'''.",
     'gotaccountlink'             => 'logi sisse',
     'createaccountmail'          => 'e-posti teel',
    +'createaccountreason'        => 'Põhjus:',
     'badretype'                  => 'Sisestatud paroolid ei lange kokku.',
     'userexists'                 => 'Sisestatud kasutajanimi on juba kasutusel.
     Palun valige uus nimi.',
    @@ -719,6 +714,7 @@ Kontrollige kirjapilti või [[Special:UserLogin/signup|looge uus kasutajakonto]]
     'passwordtooshort'           => 'Parool on liiga lühike.
     See peab koosnema vähemalt {{PLURAL:$1|ühest|$1}} tähemärgist.',
     'password-name-match'        => 'Parool peab kasutajanimest erinema.',
    +'password-login-forbidden'   => 'Selle kasutajanime ja parooli kasutamine on keelatud.',
     'mailmypassword'             => 'Saada e-posti teel uus parool',
     'passwordremindertitle'      => '{{SITENAME}} – ajutine parool',
     'passwordremindertext'       => 'Keegi IP-aadressiga $1, tõenäoliselt sa ise, palus, et talle saadetaks {{GRAMMAR:elative|{{SITENAME}}}} uus parool ($4). Kasutaja "$2" ajutiseks paroolis seati "$3". Kui soovid tõepoolest uut parooli, pead sisse logima ja uue parooli valima. Ajutine parool aegub {{PLURAL:$5|ühe päeva|$5 päeva}} pärast.
    @@ -807,11 +803,12 @@ Võib-olla oled juba edukalt muudnud oma salasõna või taotlenud uut ajutist sa
     'showdiff'                         => 'Näita muudatusi',
     'anoneditwarning'                  => "'''Hoiatus:''' Sa pole sisse logitud.
     Selle lehe redigeerimislogisse salvestatakse su IP-aadress.",
    +'anonpreviewwarning'               => "''Sa pole sisse logitud. Selle lehe redigeerimislogisse salvestatakse su IP-aadress.''",
     'missingsummary'                   => "'''Meeldetuletus:''' Sa ei ole lisanud muudatuse resümeed.
     Kui vajutad uuesti salvestamise nupule, salvestatakse muudatus ilma resümeeta.",
     'missingcommenttext'               => 'Palun sisesta siit allapoole kommentaar.',
    -'missingcommentheader'             => "'''Meeldetuletus:''' Sa ei ole kirjutanud kommentaarile teemat/pealkirja.
    -Kui vajutad uuesti Salvesta, siis salvestatakse kommentaar ilma teema/pealkirjata.",
    +'missingcommentheader'             => "'''Meeldetuletus:''' Sa pole kirjutanud kommentaarile teemat ega pealkirja.
    +Kui klõpsad uuesti \"{{int:savearticle}}\", salvestatakse su kommentaar kummatagi.",
     'summary-preview'                  => 'Resümee eelvaade:',
     'subject-preview'                  => 'Alaosa pealkirja eelvaade:',
     'blockedtitle'                     => 'Kasutaja on blokeeritud',
    @@ -881,8 +878,12 @@ Allpool on toodud viimane blokeerimislogi sissekanne:',
     'userjsyoucanpreview'              => "'''Vihje:''' Enne salvestamist kasuta oma uue JavaScripti proovimiseks nuppu \"{{int:showpreview}}\".",
     'usercsspreview'                   => "'''Ära unusta, et seda versiooni sinu isiklikust stiililehest pole veel salvestatud!'''",
     'userjspreview'                    => "'''Ära unusta, et see versioon sinu isiklikust JavaScriptist on alles salvestamata!'''",
    +'sitecsspreview'                   => "'''Pea meeles, et see on vaid selle stiililehe eelvaade.'''
    +'''Seda pole veel salvestatud!'''",
    +'sitejspreview'                    => "'''Pea meeles, et see on vaid selle JavaScripti-koodi eelvaade.'''
    +'''Seda pole veel salvestatud!'''",
     'userinvalidcssjstitle'            => "'''Hoiatus:''' Kujundust nimega \"\$1\" ei ole.
    -Ära unusta, et kasutaja isiklikud .css- ja .js-lehed kasutavad väiketähega algavaid nimesid, näiteks  {{ns:user}}:Juhan Julm/monobook.css ja mitte {{ns:user}}:Juhan Julm/Monobook.css.",
    +Ära unusta, et kasutaja isiklikud .css- ja .js-lehed kasutavad väiketähega algavaid nimesid, näiteks  {{ns:user}}:Juhan Julm/vector.css ja mitte {{ns:user}}:Juhan Julm/Vector.css.",
     'updated'                          => '(Värskendatud)',
     'note'                             => "'''Meeldetuletus:'''",
     'previewnote'                      => "'''Ära unusta, et see on kõigest eelvaade!'''
    @@ -922,7 +923,6 @@ Te kinnitate ka, et kirjutasite selle ise või võtsite selle kopeerimiskitsendu
     'copyrightwarning2'                => "Pea silmas, et teised kaastöölised võivad kogu {{GRAMMAR:inessive|{{SITENAME}}}} tehtud kaastööd muuta või eemaldada. Kui sa ei soovi, et su kirjutatut halastamatult redigeeritakse, siis ära seda siia salvesta.
    Sa kinnitad ka, et kirjutasid selle ise või võtsid selle kopeerimiskitsenduseta allikast (vaata ka $1). '''Ära saada autoriõigusega kaitstud materjali loata!'''", -'longpagewarning' => "'''HOIATUS: Selle lehekülje pikkus ületab $1 kilobaiti. Mõne brauseri puhul valmistab raskusi juba 32-le kilobaidile läheneva pikkusega lehekülgede redigeerimine. Palun kaaluge selle lehekülje sisu jaotamist lühemate lehekülgede vahel.'''", 'longpageerror' => "'''Viga: Lehekülje suurus on $1 kilobaiti. Lehekülge ei saa salvestada, kuna see on pikem kui maksimaalsed $2 kilobaiti.'''", 'readonlywarning' => "'''Hoiatus: Andmebaas on lukustatud hooldustöödeks, nii et praegu ei saa parandusi salvestada.''' Võid teksti hilisemaks kasutamiseks alles hoida tekstifailina. @@ -1095,6 +1095,8 @@ $1", 'logdelete-failure' => "'''Logi nähtavust ei saanud paika:''' $1", 'revdel-restore' => 'Muuda nähtavust', +'revdel-restore-deleted' => 'kustutatud redaktsioonid', +'revdel-restore-visible' => 'nähtavad redaktsioonid', 'pagehist' => 'Lehekülje ajalugu', 'deletedhist' => 'Kustutatud ajalugu', 'revdelete-content' => 'sisu', @@ -1164,11 +1166,13 @@ Navigeerimislinkide kasutamine tühistab redaktsioonide valiku.', # Diffs 'history-title' => 'Lehekülje "$1" muudatuste ajalugu', 'difference' => '(Erinevused redaktsioonide vahel)', +'difference-multipage' => '(Lehekülgede erinevus)', 'lineno' => 'Rida $1:', 'compareselectedversions' => 'Võrdle valitud redaktsioone', 'showhideselectedversions' => 'Näita/peida valitud versioonid', 'editundo' => 'eemalda', -'diff-multi' => '({{PLURAL:$1|Ühte vahepealset muudatust|$1 vahepealset muudatust}} ei näidata.)', +'diff-multi' => '({{PLURAL:$1|Ühte|$1}} vahepealset {{PLURAL:$2|ühe|$2}} kasutaja redaktsiooni ei näidata.)', +'diff-multi-manyusers' => '({{PLURAL:$1|Ühte|$1}} vahepealset rohkem kui {{PLURAL:$2|ühe|$2}} kasutaja redaktsiooni ei näidata.)', # Search results 'searchresults' => 'Otsingu tulemused', @@ -1203,6 +1207,7 @@ Navigeerimislinkide kasutamine tühistab redaktsioonide valiku.', 'searchprofile-everything-tooltip' => 'Otsi kogu sisust (k.a aruteluleheküljed)', 'searchprofile-advanced-tooltip' => 'Otsi kohandatud nimeruumidest', 'search-result-size' => '$1 ({{PLURAL:$2|1 sõna|$2 sõna}})', +'search-result-category-size' => '{{PLURAL:$1|1 lehekülg|$1 lehekülge}} ({{PLURAL:$2|1 alamkategooria|$2 alamkategooriat}}, {{PLURAL:$3|1 fail|$3 faili}})', 'search-result-score' => 'Vastavus: $1%', 'search-redirect' => '(ümbersuunamine $1)', 'search-section' => '(alaosa $1)', @@ -1281,6 +1286,7 @@ Pane tähele, et Google'is talletatud {{GRAMMAR:genitive|{{SITENAME}}}} sisu võ 'contextlines' => 'Ridu vastes:', 'contextchars' => 'Kaasteksti rea kohta:', 'stub-threshold' => 'Nii lingitud lehekülje suuruse ülempiir (baitides):', +'stub-threshold-disabled' => 'Välja lülitatud', 'recentchangesdays' => 'Mitu päeva näidata viimastes muudatustes:', 'recentchangesdays-max' => 'Ülemmäär $1 {{PLURAL:$1|päev|päeva}}', 'recentchangescount' => 'Mitut redaktsiooni vaikimisi näidata:', @@ -1314,6 +1320,7 @@ Siin on juhuslik väärtus, mida saad kasutada: $1', 'prefs-files' => 'Failid', 'prefs-custom-css' => 'kohandatud CSS', 'prefs-custom-js' => 'kohandatud JS', +'prefs-common-css-js' => 'Kõigi kujunduste ühine CSS/JS:', 'prefs-reset-intro' => 'Sellel leheküljel saad oma eelistused lähtestada võrgukoha vaike-eelistusteks. Toimingut ei saa hiljem tühistada.', 'prefs-emailconfirm-label' => 'E-posti kinnitus:', @@ -1350,9 +1357,15 @@ See ei tohi olla pikem kui $1 {{PLURAL:$1|sümbol|sümbolit}}.', 'prefs-advancedrendering' => 'Täpsemad eelistused', 'prefs-advancedsearchoptions' => 'Täpsemad eelistused', 'prefs-advancedwatchlist' => 'Täpsemad eelistused', -'prefs-display' => 'Kuvasätted', +'prefs-displayrc' => 'Kuvasätted', +'prefs-displaysearchoptions' => 'Kuvasätted', +'prefs-displaywatchlist' => 'Kuvasätted', 'prefs-diffs' => 'Erinevused', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Sobiv e-posti aadress', +'email-address-validity-invalid' => 'Sisesta sobiv e-posti aadress.', + # User rights 'userrights' => 'Kasutaja õiguste muutmine', 'userrights-lookup-user' => 'Kasutajarühma muutmine', @@ -1436,6 +1449,7 @@ See ei tohi olla pikem kui $1 {{PLURAL:$1|sümbol|sümbolit}}.', 'right-hideuser' => 'Blokeerida kasutajanimi, peites selle avalikkuse eest', 'right-ipblock-exempt' => 'Mööduda automaatsetest blokeeringutest ning aadressivahemiku- ja IP-blokeeringutest', 'right-proxyunbannable' => 'Mööduda automaatsetest puhverserveri blokeeringutest', +'right-unblockself' => 'Enda blokeeringut eemaldada', 'right-protect' => 'Muuta kaitsetasemeid ja redigeerida kaitstud lehekülgi', 'right-editprotected' => 'Muuta kaitstud lehekülgi, millel ei ole kaskaadkaitset', 'right-editinterface' => 'Muuta kasutajaliidest', @@ -1458,7 +1472,6 @@ See ei tohi olla pikem kui $1 {{PLURAL:$1|sümbol|sümbolit}}.', 'right-siteadmin' => 'Panna lukku ja lukust lahti teha andmebaasi', 'right-reset-passwords' => 'Määrata teistele kasutajatele paroole', 'right-override-export-depth' => 'Eksportida lehekülgi, kaasates viidatud leheküljed kuni viienda tasemeni', -'right-versiondetail' => 'Näha tarkvaraversiooni laiendatud teavet', 'right-sendemail' => 'Saata teistele kasutajatele e-kirju', # User rights log @@ -1509,14 +1522,9 @@ See ei tohi olla pikem kui $1 {{PLURAL:$1|sümbol|sümbolit}}.', 'recentchanges-legend' => 'Viimaste muudatuste seaded', 'recentchangestext' => 'Jälgi sellel leheküljel viimaseid muudatusi.', 'recentchanges-feed-description' => 'Jälgi vikisse tehtud viimaseid muudatusi.', -'recentchanges-label-legend' => 'Märkide selgitused: $1.', -'recentchanges-legend-newpage' => '$1 – uus lehekülg', 'recentchanges-label-newpage' => 'See muudatus lõi uue lehekülje', -'recentchanges-legend-minor' => '$1 – pisimuudatus', 'recentchanges-label-minor' => 'See on pisiparandus', -'recentchanges-legend-bot' => '$1 – roboti muudatus', 'recentchanges-label-bot' => 'Selle muudatuse sooritas robot', -'recentchanges-legend-unpatrolled' => '$1 – kontrollimata muudatus', 'recentchanges-label-unpatrolled' => 'Seda muudatust ei ole veel kontrollitud', 'rcnote' => "Allpool on esitatud {{PLURAL:$1|'''1''' muudatus|viimased '''$1''' muudatust}} viimase {{PLURAL:$2|päeva|'''$2''' päeva}} jooksul, seisuga $4, kell $5.", 'rcnotefrom' => "Allpool on toodud muudatused alates: '''$2''' (näidatakse kuni '''$1''' muudatust)", @@ -1564,6 +1572,9 @@ Sinu [[Special:Watchlist|jälgimisloendi]] leheküljed on '''rasvaselt''' esile 'upload_directory_missing' => 'Üleslaadimiskaust $1 puudub ja veebiserver ei saa seda luua.', 'upload_directory_read_only' => 'Veebiserveril ei õnnestu üleslaadimiste kataloogi ($1) kirjutada.', 'uploaderror' => 'Faili laadimine ebaõnnestus', +'upload-recreate-warning' => "'''Hoiatus: Sellise nimega fail on kustutatud või teisaldatud.''' + +Selle lehe kustutamis- ja teisaldamislogi on kuvatud siin:", 'uploadtext' => "Järgnevat vormi võid kasutada failide üleslaadimiseks. Et näha või leida eelnevalt üles laaditud faile vaata [[Special:FileList|failide nimekirja]]. @@ -1598,6 +1609,17 @@ Faili lisamiseks artiklile kasuta linki ühel kujul järgnevatest: Eelistatud {{PLURAL:\$3|failitüüp on|failitüübid on}} \$2.", 'filetype-banned-type' => "'''\".\$1\"''' ei ole lubatud failitüüp. Lubatud {{PLURAL:\$3|failitüüp|failitüübid}} on \$2.", 'filetype-missing' => 'Failil puudub laiend (nagu näiteks ".jpg").', +'empty-file' => 'Saadetud fail oli tühi.', +'file-too-large' => 'Saadetud fail oli liiga suur.', +'filename-tooshort' => 'Failinimi on liiga lühike.', +'filetype-banned' => 'See failitüüp on keelatud.', +'verification-error' => 'See fail ei läbinud failikontrolli.', +'hookaborted' => 'Ühe laiendusmooduli ühendus takistab sinu soovitud muudatuse tegemist.', +'illegal-filename' => 'Keelatud failinimi.', +'overwrite' => 'Olemasoleva faili ülekirjutamine ei ole lubatud.', +'unknown-error' => 'Tundmatu tõrge.', +'tmp-create-error' => 'Ajutise faili loomine ebaõnnestus.', +'tmp-write-error' => 'Viga ajutise faili kirjutamisel.', 'large-file' => 'On soovitatav, et üleslaaditavad failid ei oleks suuremad kui $1. Selle faili suurus on $2.', 'largefileserver' => 'Antud fail on suurem lubatud failisuurusest.', 'emptyfile' => 'Fail, mille Te üles laadisite, paistab olevat tühi. @@ -1627,13 +1649,14 @@ Kui soovid siiski oma faili üles laadida, siis palun mine tagasi ja kasuta teis 'file-exists-duplicate' => 'See fail on {{PLURAL:$1|järgneva faili|järgnevate failide}} duplikaat:', 'file-deleted-duplicate' => 'Selle failiga ([[:$1]]) identne fail on hiljuti kustutatud. Vaata selle faili kustutamise ajalugu enne jätkamist.', -'successfulupload' => 'Üleslaadimine õnnestus', 'uploadwarning' => 'Üleslaadimise hoiatus', 'uploadwarning-text' => 'Muuda allpool olevat faili kirjeldust ning proovi uuesti.', 'savefile' => 'Salvesta fail', 'uploadedimage' => 'laadis üles faili "[[$1]]"', 'overwroteimage' => 'laadis üles faili "[[$1]]" uue versiooni', 'uploaddisabled' => 'Üleslaadimine hetkel keelatud', +'copyuploaddisabled' => 'Internetiaadressilt üleslaadimine on keelatud.', +'uploadfromurl-queued' => 'Üleslaadimine on järjekorras.', 'uploaddisabledtext' => 'Faili üleslaadimine on keelatud.', 'php-uploaddisabledtext' => 'Failide üleslaadmine on PHP seadetes keelatud. Palun vaata file_uploads sätet.', @@ -1655,6 +1678,14 @@ Peaksid kaaluma, kas selle faili üleslaadimise jätkamine on sobilik. Selle faili kustutamislogi on toodud siinsamas:", 'filename-bad-prefix' => "Üleslaaditava faili nimi algab eesliitega '''\"\$1\"''', mis on omane digikaamera antud ebamäärastele nimedele. Palun vali oma failile kirjeldavam nimi.", +'upload-success-subj' => 'Üleslaadimine õnnestus', +'upload-success-msg' => 'Üleslaadimine allikast [$2] läks edukalt. See on leitav siit: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Üleslaadimisprobleem', +'upload-failure-msg' => 'Üleslaadimisel allikast [$2] ilmnes probleem: + +$1', +'upload-warning-subj' => 'Üleslaadimishoiatus', +'upload-warning-msg' => 'Üleslaadimisel allikast [$2] tekkis probleem. Probleemi eemaldamiseks võid naasta [[Special:Upload/stash/$1|üleslaadimisvormi]] juurde.', 'upload-proto-error' => 'Vigane protokoll', 'upload-proto-error-text' => 'Teiselt saidilt üleslaadimiseks peab URL algama http:// või ftp://.', @@ -1720,6 +1751,7 @@ Tulba päisel klõpsamine muudab sortimist.', 'listfiles_search_for' => 'Nimeotsing:', 'imgfile' => 'fail', 'listfiles' => 'Piltide loend', +'listfiles_thumb' => 'Pisipilt', 'listfiles_date' => 'Kuupäev', 'listfiles_name' => 'Nimi', 'listfiles_user' => 'Kasutaja', @@ -1831,8 +1863,8 @@ Sisesta kujul tüüp/alamtüüp, näiteks image/jpeg.', 'statistics-edits' => 'Redigeerimisi alates {{GRAMMAR:genitive|{{SITENAME}}}} loomisest', 'statistics-edits-average' => 'Keskmiselt redigeerimisi lehekülje kohta', 'statistics-views-total' => 'Lehekülje vaatamisi kokku', +'statistics-views-total-desc' => 'Olematute lehekülgede või erilehekülgede vaatamised on välja arvatud', 'statistics-views-peredit' => 'Vaatamisi redaktsiooni kohta', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Tööjärje] pikkus', 'statistics-users' => 'Registreeritud [[Special:ListUsers|kasutajaid]]', 'statistics-users-active' => 'Aktiivseid kasutajaid', 'statistics-users-active-desc' => 'Kasutajad, kes on viimase {{PLURAL:$1|päeva|$1 päeva}} jooksul tegutsenud', @@ -1847,7 +1879,7 @@ Lehekülg loetakse täpsustusleheküljeks, kui see kasutab malli, millele viitab 'doubleredirects' => 'Kahekordsed ümbersuunamised', 'doubleredirectstext' => 'Käesolev leht esitab loendi lehtedest, mis sisaldavad ümbersuunamisi teistele ümbersuunamislehtedele. Igal real on ära toodud esimene ja teine ümbersuunamisleht ning samuti teise ümbersuunamislehe sihtmärk, mis tavaliselt on esialgse ümbersuunamise tegelik siht, millele see otse osutama peakski. -Läbikriipsutatud kirjed on kohendatud.', +Läbikriipsutatud kirjed on kohendatud.', 'double-redirect-fixed-move' => '[[$1]] on teisaldatud, see suunab nüüd leheküljele [[$2]].', 'double-redirect-fixer' => 'Ümbersuunamiste parandaja', @@ -1870,6 +1902,8 @@ Igal real on ära toodud esimene ja teine ümbersuunamisleht ning samuti teise 'nmembers' => '$1 {{PLURAL:$1|liige|liiget}}', 'nrevisions' => '$1 {{PLURAL:$1|redaktsioon|redaktsiooni}}', 'nviews' => '$1 {{PLURAL:$1|külastus|külastust}}', +'nimagelinks' => 'Kasutuses {{PLURAL:$1|ühel leheküljel|$1 leheküljel}}', +'ntransclusions' => 'kasutuses {{PLURAL:$1|ühel leheküljel|$1 leheküljel}}', 'specialpage-empty' => 'Vasteid ei leidu.', 'lonelypages' => 'Viitamata leheküljed', 'lonelypagestext' => 'Järgmistele lehekülgedele ei ole linki ühelgi Viki leheküljel, samuti ei ole nad kasutusel teiste lehekülgede osana.', @@ -2028,33 +2062,39 @@ Toetatud protokollid: $1', 'listgrouprights-removegroup-self-all' => 'Eemaldada ennast kõigist rühmadest', # E-mail user -'mailnologin' => 'Saatja aadress puudub', -'mailnologintext' => 'Pead olema [[Special:UserLogin|sisse logitud]] ja sul peab [[Special:Preferences|eelistustes]] olema kehtiv e-posti aadress, et saata teistele kasutajatele e-kirju.', -'emailuser' => 'Saada sellele kasutajale e-kiri', -'emailpage' => 'Saada kasutajale e-kiri', -'emailpagetext' => 'Kui see kasutaja on oma eelistuste lehel sisestanud e-posti aadressi, saad alloleva vormi kaudu talle kirja saata. Et kasutaja saaks vastata, täidetakse kirja saatja väli "Kellelt" e-posti aadressiga, mille oled sisestanud [[Special:Preferences|oma eelistuste lehel]].', -'usermailererror' => 'Saatmise viga:', -'defemailsubject' => 'E-kiri {{GRAMMAR:elative|{{SITENAME}}}}', -'noemailtitle' => 'E-posti aadressi pole', -'noemailtext' => 'See kasutaja pole määranud kehtivat e-posti aadressi.', -'nowikiemailtitle' => 'E-kirja saatmine ei ole lubatud', -'nowikiemailtext' => 'See kasutaja ei soovi e-posti teistelt kasutajatelt.', -'email-legend' => 'Saada e-kiri {{GRAMMAR:genitive|{{SITENAME}}}} kasutajale', -'emailfrom' => 'Kellelt:', -'emailto' => 'Kellele:', -'emailsubject' => 'Pealkiri:', -'emailmessage' => 'Sõnum:', -'emailsend' => 'Saada', -'emailccme' => 'Saada mulle koopia.', -'emailccsubject' => 'Koopia sinu sõnumist kasutajale $1: $2', -'emailsent' => 'E-post saadetud', -'emailsenttext' => 'Sinu teade on e-kirjaga saadetud.', -'emailuserfooter' => 'Selle e-kirja saatis $1 {{GRAMMAR:elative|{{SITENAME}}}} kasutajale $2 toimingu "Saada sellele kasutajale e-kiri" abil.', +'mailnologin' => 'Saatja aadress puudub', +'mailnologintext' => 'Pead olema [[Special:UserLogin|sisse logitud]] ja sul peab [[Special:Preferences|eelistustes]] olema kehtiv e-posti aadress, et saata teistele kasutajatele e-kirju.', +'emailuser' => 'Saada sellele kasutajale e-kiri', +'emailpage' => 'Saada kasutajale e-kiri', +'emailpagetext' => 'Kui see kasutaja on oma eelistuste lehel sisestanud e-posti aadressi, saad alloleva vormi kaudu talle kirja saata. Et kasutaja saaks vastata, täidetakse kirja saatja väli "Kellelt" e-posti aadressiga, mille oled sisestanud [[Special:Preferences|oma eelistuste lehel]].', +'usermailererror' => 'Saatmise viga:', +'defemailsubject' => 'E-kiri {{GRAMMAR:elative|{{SITENAME}}}}', +'usermaildisabled' => 'Kasutajatele e-kirjade saatmine keelatud', +'usermaildisabledtext' => 'Selles vikis ei saa teistele kasutajatele e-kirju saata.', +'noemailtitle' => 'E-posti aadressi pole', +'noemailtext' => 'See kasutaja pole määranud kehtivat e-posti aadressi.', +'nowikiemailtitle' => 'E-kirja saatmine ei ole lubatud', +'nowikiemailtext' => 'See kasutaja ei soovi e-posti teistelt kasutajatelt.', +'email-legend' => 'Saada e-kiri {{GRAMMAR:genitive|{{SITENAME}}}} kasutajale', +'emailfrom' => 'Kellelt:', +'emailto' => 'Kellele:', +'emailsubject' => 'Pealkiri:', +'emailmessage' => 'Sõnum:', +'emailsend' => 'Saada', +'emailccme' => 'Saada mulle koopia.', +'emailccsubject' => 'Koopia sinu sõnumist kasutajale $1: $2', +'emailsent' => 'E-post saadetud', +'emailsenttext' => 'Sinu teade on e-kirjaga saadetud.', +'emailuserfooter' => 'Selle e-kirja saatis $1 {{GRAMMAR:elative|{{SITENAME}}}} kasutajale $2 toimingu "Saada sellele kasutajale e-kiri" abil.', + +# User Messenger +'usermessage-summary' => 'Jätan süsteemiteate.', +'usermessage-editor' => 'Süsteemiteadete edastaja', # Watchlist 'watchlist' => 'Jälgimisloend', 'mywatchlist' => 'Jälgimisloend', -'watchlistfor' => "(kasutajale '''$1''')", +'watchlistfor2' => 'Kasutaja $1 $2 jaoks', 'nowatchlist' => 'Sinu jälgimisloend on tühi.', 'watchlistanontext' => 'Oma jälgimisloendi nägemiseks ja muutmiseks pead $1.', 'watchnologin' => 'Ei ole sisse logitud', @@ -2117,6 +2157,9 @@ Abivalmilt {{GRAMMAR:genitive|{{SITENAME}}}} teavitussüsteem -- +E-kirjatsi saabuvate teavituste sätteid saad muuta leheküljel +{{fullurl:{{#special:Preferences}}}}. + Oma jälgimisloendi sätete muutmiseks mine leheküljele {{fullurl:Special:Watchlist/edit}}. @@ -2173,7 +2216,10 @@ Lehte muutis viimasena [[User:$3|$3]] ([[User talk:$3|arutelu]]{{int:pipe-separa 'revertpage-nouser' => 'Tühistati eemaldatud nimega kasutaja tehtud muudatused ja pöörduti tagasi viimasele muudatusele, mille tegi [[User:$1|$1]].', 'rollback-success' => 'Tühistati $1 muudatus; pöörduti tagasi viimasele muudatusele, mille tegi $2.', -'sessionfailure' => 'Sinu sisselogimisseansiga näib probleem olevat. + +# Edit tokens +'sessionfailure-title' => 'Seansiviga', +'sessionfailure' => 'Sinu sisselogimisseansiga näib probleem olevat. See toiming on seansiärandamise vastase ettevaatusabinõuna tühistatud. Mine tagasi eelmisele leheküljele ja taaslaadi see, seejärel proovi uuesti.', @@ -2307,18 +2353,22 @@ $1', 'month' => 'Alates kuust (ja varasemad):', 'year' => 'Alates aastast (ja varasemad):', -'sp-contributions-newbies' => 'Näita ainult uute kasutajate kaastööd.', -'sp-contributions-newbies-sub' => 'Uute kontode kaastöö', -'sp-contributions-newbies-title' => 'Uute kasutajate kaastöö', -'sp-contributions-blocklog' => 'blokeerimised', -'sp-contributions-deleted' => 'kustutatud kaastöö', -'sp-contributions-logs' => 'logid', -'sp-contributions-talk' => 'arutelu', -'sp-contributions-userrights' => 'kasutaja õiguste muutmine', -'sp-contributions-blocked-notice' => 'See kasutaja on parajasti blokeeritud. Allpool on toodud kõige hilisem blokeerimislogi sissekanne:', -'sp-contributions-search' => 'Kaastöö otsimine', -'sp-contributions-username' => 'IP-aadress või kasutajanimi:', -'sp-contributions-submit' => 'Otsi', +'sp-contributions-newbies' => 'Näita ainult uute kasutajate kaastööd', +'sp-contributions-newbies-sub' => 'Uute kontode kaastöö', +'sp-contributions-newbies-title' => 'Uute kasutajate kaastöö', +'sp-contributions-blocklog' => 'blokeerimised', +'sp-contributions-deleted' => 'kustutatud kaastöö', +'sp-contributions-uploads' => 'üleslaadimised', +'sp-contributions-logs' => 'logid', +'sp-contributions-talk' => 'arutelu', +'sp-contributions-userrights' => 'kasutaja õiguste muutmine', +'sp-contributions-blocked-notice' => 'See kasutaja on parajasti blokeeritud. Allpool on toodud kõige hilisem blokeerimislogi sissekanne:', +'sp-contributions-blocked-notice-anon' => 'See IP-aadress on parajasti blokeeritud. +Allpool on toodud viimane blokeerimislogi sissekanne:', +'sp-contributions-search' => 'Kaastöö otsimine', +'sp-contributions-username' => 'IP-aadress või kasutajanimi:', +'sp-contributions-toponly' => 'Ainult uusimad redaktsioonid', +'sp-contributions-submit' => 'Otsi', # What links here 'whatlinkshere' => 'Lingid siia', @@ -2378,7 +2428,6 @@ Kehtivaid blokeeringuid vaata [[Special:IPBlockList|blokeeringute loendist]].', 'ipb-edit-dropdown' => 'Muuda blokeeringu põhjuseid', 'ipb-unblock-addr' => 'Kustuta $1 blokeering', 'ipb-unblock' => 'Kasutaja või IP-aadressi vabastamine blokeerimisest', -'ipb-blocklist-addr' => 'Kasutaja $1 blokeeringud', 'ipb-blocklist' => 'Vaata kehtivaid keelde', 'ipb-blocklist-contribs' => 'Kasutaja $1 kaastöö', 'unblockip' => 'Blokeerimise eemaldamine', @@ -2449,6 +2498,8 @@ See kuulub aga blokeeritud IP-vahemikku $2, mille blokeeringut saab eemaldada.', Sa ei saa kasutajakontot luua.', 'cant-block-while-blocked' => 'Teisi kasutajaid ei saa blokeerida, kui oled ise blokeeritud.', 'cant-see-hidden-user' => 'Kasutaja, keda blokeerida üritad, on juba blokeeritud ning peidetud. Kuna sul pole õigust blokeerida kasutajanimesid, peites need avalikkuse eest, ei saa sa selle kasutaja blokeeringut vaadata ega muuta.', +'ipbblocked' => 'Sa ei saa teisi blokeerida ega nende blokeeringuid eemaldada, sest oled ise blokeeritud.', +'ipbnounblockself' => 'Sul pole lubatud enda blokeeringut eemaldada.', # Developer tools 'lockdb' => 'Lukusta andmebaas', @@ -2483,6 +2534,17 @@ Sinu kohus on hoolitseda selle eest, et kõik jääks toimima, nagu ette nähtud Pane tähele, et lehekülge '''ei teisaldata''' juhul, kui uue pealkirjaga lehekülg on juba olemas. Erandiks on juhud, kui olemasolev lehekülg on tühi või redigeerimisajaloota ümbersuunamislehekülg. See tähendab, et kogemata ei saa üle kirjutada juba olemasolevat lehekülge, kuid saab ebaõnnestunud ümbernimetamise tagasi pöörata. +'''Hoiatus!''' +Tegu võib olla väga loetava lehekülje jaoks tõsise ja ootamatu muudatusega; +enne jätkamist teadvusta palun tagajärgi.", +'movepagetext-noredirectfixer' => "Allolevat vormi kasutades saad lehekülje ümber nimetada. Lehekülje ajalugu tõstetakse uue pealkirja alla automaatselt. +Praeguse pealkirjaga leheküljest saab ümbersuunamislehekülg uuele leheküljele. +Kontrolli, et teisaldamise tõttu ei jää maha [[Special:DoubleRedirects|kahekordseid]] ega [[Special:BrokenRedirects|katkiseid ümbersuunamisi]]. +Sinu kohus on hoolitseda selle eest, et kõik jääks toimima, nagu ette nähtud. + +Pane tähele, et lehekülge '''ei teisaldata''' juhul, kui uue pealkirjaga lehekülg on juba olemas. Erandiks on juhud, kui olemasolev lehekülg on tühi või redigeerimisajaloota ümbersuunamislehekülg. +See tähendab, et kogemata ei saa üle kirjutada juba olemasolevat lehekülge, kuid saab ebaõnnestunud ümbernimetamise tagasi pöörata. + '''Hoiatus!''' Tegu võib olla väga loetava lehekülje jaoks tõsise ja ootamatu muudatusega; enne jätkamist teadvusta palun tagajärgi.", @@ -2540,6 +2602,7 @@ Kas kustutad selle, et luua võimalus teisaldamiseks?', 'immobile-source-page' => 'Lehekülg ei ole teisaldatav.', 'immobile-target-page' => 'Soovitud pealkirja alla ei saa teisaldada.', 'imagenocrossnamespace' => 'Faili ei saa teisaldada mõnda muusse nimeruumi', +'nonfile-cannot-move-to-file' => 'Failinimeruumi saab ainult faile teisaldada.', 'imagetypemismatch' => 'Uus faililaiend ei sobi selle tüübiga', 'imageinvalidfilename' => 'Sihtmärgi nimi on vigane', 'fix-double-redirects' => 'Värskenda kõik siia viitavad ümbersuunamislehed uuele pealkirjale', @@ -2619,6 +2682,7 @@ Salvesta see oma arvutisse ja laadi siia üles.', 'importstart' => 'Impordin lehekülgi...', 'import-revision-count' => '$1 {{PLURAL:$1|versioon|versiooni}}', 'importnopages' => 'Ei olnud imporditavaid lehekülgi.', +'imported-log-entries' => 'Imporditi $1 {{PLURAL:$1|logisissekanne|logisissekannet}}.', 'importfailed' => 'Importimine ebaõnnestus: $1', 'importunknownsource' => 'Unknown import source type Tundmatu tüüpi algallikas', @@ -2718,6 +2782,8 @@ Saad vaadata selle lähteteksti.', 'tooltip-rollback' => 'Tühistab ühe klõpsuga viimase kaastöölise tehtud muudatused.', 'tooltip-undo' => '"Eemalda" tühistab selle muudatuse ja avab teksti eelvaatega redigeerimisakna. Samuti võimaldab see resümee reale põhjenduse lisamist.', +'tooltip-preferences-save' => 'Salvesta eelistused', +'tooltip-summary' => 'Kirjuta lühike kokkuvõte', # Stylesheets 'common.css' => '/* Siinset CSS-i kasutavad kõik kujundused. */', @@ -2830,14 +2896,17 @@ Selle avamine võib su arvutit kahjustada.", 'imagemaxsize' => "Pildi suuruse ülemmäär:
    ''(faili kirjeldusleheküljel)''", 'thumbsize' => 'Pisipildi suurus:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|lehekülg|lehekülge}}', -'file-info' => '(faili suurus: $1, MIME tüüp: $2)', -'file-info-size' => '($1 × $2 pikslit, faili suurus: $3, MIME tüüp: $4)', +'file-info' => 'faili suurus: $1, MIME tüüp: $2', +'file-info-size' => '$1 × $2 pikslit, faili suurus: $3, MIME tüüp: $4', 'file-nohires' => 'Sellest suuremat pilti pole.', -'svg-long-desc' => '(SVG fail, algsuurus $1 × $2 pikslit, faili suurus: $3)', +'svg-long-desc' => 'SVG fail, algsuurus $1 × $2 pikslit, faili suurus: $3', 'show-big-image' => 'Originaalsuurus', 'show-big-image-thumb' => 'Selle eelvaate suurus: $1 × $2 pikslit', 'file-info-gif-looped' => 'korduv', 'file-info-gif-frames' => '$1 {{PLURAL:$1|kaader|kaadrit}}', +'file-info-png-looped' => 'korduv', +'file-info-png-repeat' => 'mängitud $1 {{PLURAL:$1|korra|korda}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|kaader|kaadrit}}', # Special:NewFiles 'newimages' => 'Uute meediafailide galerii', @@ -2966,6 +3035,7 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ 'exif-gpsdestdistance' => 'Sihtmärgi kaugus', 'exif-gpsareainformation' => 'GPS-ala nimi', 'exif-gpsdatestamp' => 'GPS kuupäev', +'exif-objectname' => 'Lühipealkiri', # EXIF attributes 'exif-compression-1' => 'Pakkimata', @@ -3112,25 +3182,25 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ 'limitall' => 'iga', # E-mail address confirmation -'confirmemail' => 'E-posti aadressi kinnitamine', -'confirmemail_noemail' => 'Sul ei ole e-aadress määratud [[Special:Preferences|eelistustes]].', -'confirmemail_text' => 'Enne kui saad e-postiga seotud teenuseid kasutada, pead oma e-posti aadressi õigsust kinnitama. Allpool olevat nuppu klõpsates saadetakse sulle e-posti teel kinnituskood. Aadressi kinnitamiseks klõpsa e-kirjas olevat linki.', -'confirmemail_pending' => 'Kinnituskood on juba saadetud. Kui tegid konto hiljuti, oota palun mõni minut selle saabumist, enne kui üritad uuesti.', -'confirmemail_send' => 'Saada kinnituskood', -'confirmemail_sent' => 'Kinnitus-e-kiri saadetud.', -'confirmemail_oncreate' => 'Kinnituskood saadeti e-posti aadressile. See kood ei ole vajalik sisselogimisel, kuid seda on vaja, et kasutada vikis e-postipõhiseid toiminguid.', -'confirmemail_sendfailed' => 'Kinnitus-e-kirja ei õnnestunud saata. +'confirmemail' => 'E-posti aadressi kinnitamine', +'confirmemail_noemail' => 'Sul ei ole e-aadress määratud [[Special:Preferences|eelistustes]].', +'confirmemail_text' => 'Enne kui saad e-postiga seotud teenuseid kasutada, pead oma e-posti aadressi õigsust kinnitama. Allpool olevat nuppu klõpsates saadetakse sulle e-posti teel kinnituskood. Aadressi kinnitamiseks klõpsa e-kirjas olevat linki.', +'confirmemail_pending' => 'Kinnituskood on juba saadetud. Kui tegid konto hiljuti, oota palun mõni minut selle saabumist, enne kui üritad uuesti.', +'confirmemail_send' => 'Saada kinnituskood', +'confirmemail_sent' => 'Kinnitus-e-kiri saadetud.', +'confirmemail_oncreate' => 'Kinnituskood saadeti e-posti aadressile. See kood ei ole vajalik sisselogimisel, kuid seda on vaja, et kasutada vikis e-postipõhiseid toiminguid.', +'confirmemail_sendfailed' => 'Kinnitus-e-kirja ei õnnestunud saata. Kontrolli aadressi õigsust. Veateade e-kirja saatmisel: $1', -'confirmemail_invalid' => 'Vigane kinnituskood, kinnituskood võib olla aegunud.', -'confirmemail_needlogin' => 'Pead oma e-posti aadressi kinnitamiseks $1.', -'confirmemail_success' => 'Sinu e-posti aadress on kinnitatud +'confirmemail_invalid' => 'Vigane kinnituskood, kinnituskood võib olla aegunud.', +'confirmemail_needlogin' => 'Pead oma e-posti aadressi kinnitamiseks $1.', +'confirmemail_success' => 'Sinu e-posti aadress on kinnitatud Võid nüüd [[Special:UserLogin|sisse logida]].', -'confirmemail_loggedin' => 'Sinu e-posti aadress on nüüd kinnitatud.', -'confirmemail_error' => 'Viga kinnituskoodi salvestamisel.', -'confirmemail_subject' => '{{GRAMMAR:genitive|{{SITENAME}}}} e-posti aadressi kinnitamine', -'confirmemail_body' => 'Keegi IP-aadressilt $1, ilmselt sa ise, registreeris selle e-posti aadressiga {{GRAMMAR:inessive|{{SITENAME}}}} konto "$2". +'confirmemail_loggedin' => 'Sinu e-posti aadress on nüüd kinnitatud.', +'confirmemail_error' => 'Viga kinnituskoodi salvestamisel.', +'confirmemail_subject' => '{{GRAMMAR:genitive|{{SITENAME}}}} e-posti aadressi kinnitamine', +'confirmemail_body' => 'Keegi IP-aadressilt $1, ilmselt sa ise, registreeris selle e-posti aadressiga {{GRAMMAR:inessive|{{SITENAME}}}} konto "$2". Kinnitamaks, et see kasutajakonto tõepoolest kuulub sulle ning e-posti teenuste aktiveerimiseks, ava oma võrgulehitsejas järgnev link: @@ -3141,8 +3211,32 @@ Kui see *pole* sinu loodud konto, ava järgnev link kinnituse tühistamiseks: $5 Kinnituskood aegub kuupäeval $4.', -'confirmemail_invalidated' => 'E-posti aadressi kinnitamine tühistati', -'invalidateemail' => 'E-posti aadressi kinnituse tühistamine', +'confirmemail_body_changed' => 'Keegi IP-aadressilt $1, ilmselt sa ise, +muutis {{GRAMMAR:inessive|{{SITENAME}}}} konto "$2" e-posti aadressiks selle aadressi. + +Kinnitamaks, et see konto tõepoolest kuulub sulle ja e-posti teenuste taasaktiveerimiseks, ava oma veebilehitsejas järgnev link: + +$3 + +Kui see *pole* sinu konto, ava järgnev link +kinnituse tühistamiseks: + +$5 + +Kinnituskood aegub kuupäeval $4.', +'confirmemail_body_set' => 'Keegi, arvatavasti sina ise, IP-aadressilt $1 on {{GRAMMAR:genitive|{{SITENAME}}}} konto "$2" e-posti aadressiks määranud selle aadressi. + +Kinnitamaks, et see konto kuulub tõesti sulle ja {{GRAMMAR:genitive|{{SITENAME}}}} e-posti funktsioonide taasaktiveerimiseks ava oma võrgulehitsejas järgmine link: + +$3 + +Kui konto *ei* kuulu sulle, kasuta e-posti aadressi kinnituse tühistamiseks järgmist linki: + +$5 + +Selle kinnituskoodi aegumistähtaeg on $4.', +'confirmemail_invalidated' => 'E-posti aadressi kinnitamine tühistati', +'invalidateemail' => 'E-posti aadressi kinnituse tühistamine', # Scary transclusion 'scarytranscludetoolong' => '[URL on liiga pikk]', @@ -3176,6 +3270,7 @@ Palun kinnita, et soovid tõesti selle lehekülje taasluua.", 'table_pager_first' => 'Esimene lehekülg', 'table_pager_last' => 'Viimane lehekülg', 'table_pager_limit' => 'Näita leheküljel $1 üksust', +'table_pager_limit_label' => 'Üksusi lehekülje kohta:', 'table_pager_limit_submit' => 'Mine', 'table_pager_empty' => 'Ei ole tulemusi', @@ -3232,6 +3327,7 @@ Sa võid [[Special:Watchlist/edit|kasutada ka harilikku tekstiredaktorit]].', 'version-specialpages' => 'Erileheküljed', 'version-parserhooks' => 'Süntaksianalüsaatori lisad (Parser hooks)', 'version-variables' => 'Muutujad', +'version-skins' => 'Kujundused', 'version-other' => 'Muu', 'version-mediahandlers' => 'Meediatöötlejad', 'version-hooks' => 'Redaktsioon', @@ -3243,6 +3339,13 @@ Sa võid [[Special:Watchlist/edit|kasutada ka harilikku tekstiredaktorit]].', 'version-hook-subscribedby' => 'Tellijad', 'version-version' => '(Versioon $1)', 'version-license' => 'Litsents', +'version-poweredby-credits' => "See viki kasutab '''[http://www.mediawiki.org/ MediaWiki]''' tarkvara. Autoriõigus © 2001-$1 $2.", +'version-poweredby-others' => 'teised', +'version-license-info' => "MediaWiki on vaba tarkvara; tohid seda taaslevitada ja/või selle põhjal teisendeid luua vastavalt Vaba Tarkvara Fondi avaldatud GNU Üldise Avaliku Litsentsi versioonis 2 või hilisemas seatud tingimustele. + +MediaWiki tarkvara levitatakse lootuses, et see on kasulik, aga '''igasuguse tagatiseta''', ka kaudse tagatiseta teose '''turustatavuse''' või '''müügikõlblikkuse''' kohta. Üksikasjad leiad GNU Üldisest Avalikust Litsentsist. + +GNU Üldise Avaliku Litsentsi [{{SERVER}}{{SCRIPTPATH}}/COPYING eksemplar] peaks selle programmiga kaasas olema; kui pole, kirjuta aadressil Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA või [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html loe seda võrgust].", 'version-software' => 'Paigaldatud tarkvara', 'version-software-product' => 'Toode', 'version-software-version' => 'Versioon', @@ -3313,6 +3416,15 @@ Sisesta faili nimi eesliiteta "{{ns:file}}:".', 'tags-edit' => 'muuda', 'tags-hitcount' => '$1 {{PLURAL:$1|muudatus|muudatust}}', +# Special:ComparePages +'comparepages' => 'Lehekülgede kõrvutamine', +'compare-selector' => 'Lehekülje redaktsioonide kõrvutamine', +'compare-page1' => 'Lehekülg 1', +'compare-page2' => 'Lehekülg 2', +'compare-rev1' => 'Redaktsioon 1', +'compare-rev2' => 'Redaktsioon 2', +'compare-submit' => 'Kõrvuta', + # Database error messages 'dberr-header' => 'Selles vikis on probleem', 'dberr-problems' => 'Kahjuks on sellel saidil tehnilisi probleeme', @@ -3329,6 +3441,7 @@ Sisesta faili nimi eesliiteta "{{ns:file}}:".', 'htmlform-float-invalid' => 'Määratud väärtus ei ole arvuline.', 'htmlform-int-toolow' => 'Antud suurus on väiksem kui minimaalne $1', 'htmlform-int-toohigh' => 'Antud suurus on suurem kui maksimaalne $1', +'htmlform-required' => 'See väärtus on nõutav', 'htmlform-submit' => 'Saada', 'htmlform-reset' => 'Tühista muudatused', 'htmlform-selectorother-other' => 'Muu', diff --git a/languages/messages/MessagesEu.php b/languages/messages/MessagesEu.php index ab65c77c..190fa97b 100644 --- a/languages/messages/MessagesEu.php +++ b/languages/messages/MessagesEu.php @@ -138,8 +138,7 @@ $messages = array( 'tog-editsection' => 'Atalak [aldatu] loturen bitartez aldatzeko aukera gaitu', 'tog-editsectiononrightclick' => 'Atalen izenburuetan klik eginez atala
    aldatzea gaitu (JavaScript)', 'tog-showtoc' => 'Edukien taula erakutsi (3 goiburukotik gorako orrialdeentzako)', -'tog-rememberpassword' => 'Nire saioa ordenagailu honetan gogoratu (gomendatua)', -'tog-editwidth' => 'Testuaren taula zabaldu pantaila osoa bete dadin', +'tog-rememberpassword' => 'Nire saioa ordenagailu honetan gorde ({{PLURAL:$1|egun baterako| $1 egunerako}} gehienez)', 'tog-watchcreations' => 'Sortzen ditudan orrialdeak nire segimendu zerrendara gehitu', 'tog-watchdefault' => 'Aldatzen ditudan orrialdeak nire segimendu zerrendara gehitu', 'tog-watchmoves' => 'Izena aldatutako orrialdeak segimendu zerrendan erakutsi', @@ -262,7 +261,7 @@ $messages = array( * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ (Maiz egindako galderak)] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWikiren argitalpenen posta zerrenda]', -'about' => 'Honi Buruz', +'about' => 'Honi buruz', 'article' => 'Artikulua', 'newwindow' => '(leiho berrian irekitzen da)', 'cancel' => 'Utzi', @@ -285,31 +284,21 @@ $messages = array( 'faqpage' => 'Project:Maiz egindako galderak', # Vector skin -'vector-action-addsection' => 'Mintzagaia gehitu', -'vector-action-delete' => 'Ezabatu', -'vector-action-move' => 'Mugitu', -'vector-action-protect' => 'Babestu', -'vector-action-undelete' => 'Berreskuratu', -'vector-action-unprotect' => 'Babesgabetu', -'vector-namespace-category' => 'Kategoria', -'vector-namespace-help' => 'Laguntza-orria', -'vector-namespace-image' => 'Fitxategi', -'vector-namespace-main' => 'Orrialde', -'vector-namespace-media' => 'Ikus-entzunezkoen orrialdea', -'vector-namespace-mediawiki' => 'Mezua', -'vector-namespace-project' => 'Proiektu-orrialde', -'vector-namespace-special' => 'Orrialde berezia', -'vector-namespace-talk' => 'Eztabaida', -'vector-namespace-template' => 'Txantiloi', -'vector-namespace-user' => 'Erabiltzaile-orria', -'vector-view-create' => 'Sortu', -'vector-view-edit' => 'Aldatu', -'vector-view-history' => 'Historia ikusi', -'vector-view-view' => 'Irakurri', -'vector-view-viewsource' => 'Kodea ikusia', -'actions' => 'Ekintzak', -'namespaces' => 'Izen-tarteak', -'variants' => 'Aldaerak', +'vector-action-addsection' => 'Mintzagaia gehitu', +'vector-action-delete' => 'Ezabatu', +'vector-action-move' => 'Mugitu', +'vector-action-protect' => 'Babestu', +'vector-action-undelete' => 'Berreskuratu', +'vector-action-unprotect' => 'Babesgabetu', +'vector-simplesearch-preference' => 'Baimendu bilaketa gomendio hobetuak (Vector itxurarekin bakarrik)', +'vector-view-create' => 'Sortu', +'vector-view-edit' => 'Aldatu', +'vector-view-history' => 'Historia ikusi', +'vector-view-view' => 'Irakurri', +'vector-view-viewsource' => 'Kodea ikusia', +'actions' => 'Ekintzak', +'namespaces' => 'Izen-tarteak', +'variants' => 'Aldaerak', 'errorpagetitle' => 'Errorea', 'returnto' => '$1(e)ra itzuli.', @@ -370,6 +359,8 @@ Erabiltzaile gehiegi ari da orrialde hau ikusi nahiean. Mesedez itxaron ezazu unetxo bat orrialde honetara berriz sartzen saiatu baino lehen. $1', +'pool-queuefull' => 'Prozesuen zerrenda beteta dago', +'pool-errorunknown' => 'Errore ezezaguna', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}}(e)ri buruz', @@ -533,7 +524,8 @@ Zure kontua sortu egin da. Ez ahaztu [[Special:Preferences|{{SITENAME}}(e)ko hob 'yourname' => 'Erabiltzaile izena', 'yourpassword' => 'Pasahitza:', 'yourpasswordagain' => 'Pasahitza berriz', -'remembermypassword' => 'Nire saioa ordenagailu honetan gogoratu (gomendaturikoa)', +'remembermypassword' => 'Nire saioa ordenagailu honetan gogoratu ({{PLURAL:$1|egun baterako|$1 egunetarako }} gehienez)', +'securelogin-stick-https' => 'Mantendu konektatua HTTPSra sartu ondoren', 'yourdomainname' => 'Zure domeinua', 'externaldberror' => 'Kanpoko datu-base autentifikazio errorea gertatu da edo ez duzu zure kanpo kontua eguneratzeko baimenik.', 'login' => 'Saioa hasi', @@ -550,6 +542,7 @@ Zure kontua sortu egin da. Ez ahaztu [[Special:Preferences|{{SITENAME}}(e)ko hob 'gotaccount' => "Baduzu erabiltzaile kontua? '''$1'''.", 'gotaccountlink' => 'Saioa hasi', 'createaccountmail' => 'e-postaz', +'createaccountreason' => 'Arrazoia:', 'badretype' => 'Idatzitako pasahitzak ez dira berdinak.', 'userexists' => 'Aukeratutako erabiltzaile izena hartuta dago. Mesedez, beste bat aukeratu.', @@ -570,6 +563,7 @@ Egiaztatu ondo idatzi duzun, edo [[Special:UserLogin/signup|kontu berria sor eza 'wrongpasswordempty' => 'Pasahitza hutsik dago. Saiatu berriz.', 'passwordtooshort' => 'Pasahitzek {{PLURAL:$1|karaktere 1|$1 karaktere}} gutxienez eduki behar dituzte.', 'password-name-match' => 'Zure pasahitza ezin da zure erabiltzaile-izen bera izan.', +'password-login-forbidden' => 'Erabiltzaile izen eta pasahitz hau erabiltzea debekaturik dago.', 'mailmypassword' => 'Pasahitza berria e-postaz bidali', 'passwordremindertitle' => 'Pasahitzaren gogorarazpena {{SITENAME}}(e)tik', 'passwordremindertext' => 'Norbaitek (ziurrenik zuk, $1 IP helbidetik) pasahitz berri bat @@ -612,6 +606,9 @@ Berriro saiatu aurretik itxaron ezazu, mesedez.', 'loginlanguagelabel' => 'Hizkuntza: $1', 'suspicious-userlogout' => 'Saioa amaitzeko egin duzun eskaria ukatu da. Izan ere, ematen du eskari hori gaizki dabilen nabigatzaile edo cache proxy batek bidali duela.', +# E-mail sending +'php-mail-error-unknown' => 'PHPren mail() funtzioan arazo ezezagun bat egon da.', + # Password reset dialog 'resetpass' => 'Pasahitza aldatu', 'resetpass_announce' => 'E-postaz jasotako kode tenporal baten bidez saioa hasi duzu. Saioa hasierarekin jarraitzeko, pasahitz berri bat definitu beharra daukazu:', @@ -663,9 +660,10 @@ Agian dagoeneko ondo aldatu duzu zure pasahitza edo behin-behineko pasahitza bat 'showlivepreview' => 'Zuzeneko aurrebista', 'showdiff' => 'Aldaketak erakutsi', 'anoneditwarning' => "'''Oharra:''' Ez duzu saioa hasi. Zure IP helbidea orrialde honetako historian gordeko da.", +'anonpreviewwarning' => "''Ez duzu saioa hasi. Gordez gero, zure IP helbidea grabatuko da orri honen edizio historian.''", 'missingsummary' => "'''Gogorarazpena:''' Ez duzu aldaketa laburpen bat zehaztu. Berriz ere gordetzeko aukeratzen baduzu, laburpen mezurik gordeko da.", 'missingcommenttext' => 'Mesedez, iruzkin bat idatzi jarraian.', -'missingcommentheader' => "'''Oharra:''' Ez duzu iruzkin honentzako gai/goiburuko bat ezarri. Berriz gordetzeko aukeratzen baduzu, hutsune horrekin gorde egingo da.", +'missingcommentheader' => "'''Oharra:''' Ez duzu iruzkin honetarako gairik edo goiburukorik ezarri. «{{int:Savearticle}}» klikatzen baduzu, hutsune horrekin gordeko da.", 'summary-preview' => 'Laburpenaren aurreikuspena:', 'subject-preview' => 'Gaia/Izenburuaren aurreikuspena:', 'blockedtitle' => 'Erabiltzailea blokeatuta dago', @@ -735,7 +733,11 @@ Azken blokeoaren erregistroa ageri da behean, erreferentzia gisa:', 'usercsspreview' => "'''Ez ahaztu zure CSS kodea aurreikusten zabiltzala.''' '''Oraindik gorde gabe dago!'''", 'userjspreview' => "'''Gogoratu zure JavaScript kodea probatu/aurreikusten zabiltzala, oraindik ez da gorde!'''", -'userinvalidcssjstitle' => "'''Oharra:''' Ez da \"\$1\" itxura existitzen. Kontuan izan .css eta .js fitxategi pertsonalizatuen izenak letra xehez idatzi behar direla; adibidez, {{ns:user}}:Adibide/monobook.css, eta ez {{ns:user}}:Adibide/Monobook.css.", +'sitecsspreview' => "'''Ez ahaztu zure CSS kodea aurreikusten zabiltzala.''' +'''Oraindik gorde gabe dago!'''", +'sitejspreview' => "'''Gogoratu zure JavaScript kodea probatu/aurreikusten zabiltzala''' +'''Oraindik ez da gorde!'''", +'userinvalidcssjstitle' => "'''Oharra:''' Ez da \"\$1\" itxura existitzen. Kontuan izan .css eta .js fitxategi pertsonalizatuen izenak letra xehez idatzi behar direla; adibidez, {{ns:user}}:Adibide/vector.css, eta ez {{ns:user}}:Adibide/Vector.css.", 'updated' => '(Eguneratua)', 'note' => "'''Oharra:'''", 'previewnote' => "'''Gogoratu hau aurreikusketa bat dela, beraz gorde egin beharko duzu!'''", @@ -769,7 +771,6 @@ Era berean, bidaltzen ari zaren edukia zuk zeuk idatzitakoa dela edo jabetza pub 'copyrightwarning2' => "Mesedez, kontuan izan {{SITENAME}}(e)n egindako ekarpen guztiak besteek aldatu edo ezabatu ditzaketela. Ez baduzu besteek aldaketak egitea nahi, ez ezazu bidali.
    Era berean, bidaltzen ari zaren edukia zuk zeuk idatzitakoa dela edo jabetza publikoko edo baliabide aske batetik kopiatu duzula zin egin ari zara (ikus $1 informazio gehiagorako). '''EZ BIDALI BAIMENIK GABEKO COPYRIGHTDUN EDUKIRIK!'''", -'longpagewarning' => "'''OHARRA: Orrialde honek $1 kilobyteko tamaina du; nabigatzaile batzuek arazoak izan litzakete 32 kb-tik gorako testuekin. Mesedez, saiatu orrialdea atal txikiagoetan banatzen.'''", 'longpageerror' => "'''ERROREA: Bidali duzun testuak $1 kilobyteko luzera du, eta $2 kilobyteko maximoa baino luzeagoa da. Ezin da gorde.'''", 'readonlywarning' => "'''OHARRA: Datu-basea blokeatu egin da mantenu lanak burutzeko, beraz ezingo dituzu orain zure aldaketak gorde. Testua fitxategi baten kopiatu dezakezu, eta beranduago erabiltzeko gorde. @@ -943,6 +944,8 @@ $1", 'logdelete-failure' => "'''Erregistroaren ikusgaitasuna ezin da honela ezarri:''' $1", 'revdel-restore' => 'Ikusgarritasuna aldatu', +'revdel-restore-deleted' => 'ezabatutako berraztertzeak', +'revdel-restore-visible' => 'ageriko berrikuspenak', 'pagehist' => 'Orriaren historia', 'deletedhist' => 'Ezabatutako historia', 'revdelete-content' => 'edukia', @@ -1012,11 +1015,12 @@ Kontura zaitez nabigazio loturek, zutabea ezabatu dezakela.', # Diffs 'history-title' => '"$1" orrialdearen historia laburpena', 'difference' => '(Bertsioen arteko ezberdintasunak)', +'difference-multipage' => '(Orrialdeen arteko ezberdintasunak)', 'lineno' => '$1. lerroa:', 'compareselectedversions' => 'Hautatutako bertsioak alderatu', 'showhideselectedversions' => 'Erakutsi/izkutatu aukeratutako berrikuspenak', 'editundo' => 'desegin', -'diff-multi' => '({{PLURAL:$1|Ez da tarteko berrikuspen 1|Ez dira tarteko $1 berrikuspen}} erakusten.)', +'diff-multi' => '({{PLURAL:$1|Ez da tarteko berrikuspen bat|Ez dira tarteko $1 berrikuspen}} erakusten {{PLURAL:$2|lankide batena|$2 lankiderena}}.)', # Search results 'searchresults' => 'Bilaketaren emaitzak', @@ -1051,6 +1055,7 @@ Kontura zaitez nabigazio loturek, zutabea ezabatu dezakela.', 'searchprofile-everything-tooltip' => 'Bilatu eduki guztian (lankide orrialdeak barne)', 'searchprofile-advanced-tooltip' => 'Lankideen izen zehatzetan bilatu', 'search-result-size' => '$1 ({{PLURAL:$2|hitz bat|$2 hitz}})', +'search-result-category-size' => '{{PLURAL:$1|kide 1|$1 kide}} ({{PLURAL:$2|azpikategoria 1|$2 azpikategoria}}, {{PLURAL:$3|fitxategi 1|$3 fitxategi}})', 'search-result-score' => 'Garrantzia: %$1', 'search-redirect' => '($1 birzuzenketa)', 'search-section' => '($1 atala)', @@ -1126,6 +1131,7 @@ Saia zaitez zure eskeraren aurretik ''all:'' jartzen eduki guztien artean bilatz 'contextlines' => 'Lerro emaitzako:', 'contextchars' => 'Lerro bakoitzeko karaktere kopurua:', 'stub-threshold' => 'stub link formaturako atalasea (byteak):', +'stub-threshold-disabled' => 'Ezgaitua', 'recentchangesdays' => 'Aldaketa berrietan erakutsi beharreko egun kopurua:', 'recentchangesdays-max' => '(gehienez {{PLURAL:$1|egun $1|$1 egun}})', 'recentchangescount' => 'Erakusteko aldaketa kopurua, lehenetsita:', @@ -1156,6 +1162,7 @@ Saia zaitez zure eskeraren aurretik ''all:'' jartzen eduki guztien artean bilatz 'prefs-files' => 'Fitxategiak', 'prefs-custom-css' => 'CSS pertsonalizatua', 'prefs-custom-js' => 'JS pertsonalizatua', +'prefs-common-css-js' => 'Azal mota guztietan elkarbanatutako CSS/JS:', 'prefs-emailconfirm-label' => 'E-posta baieztapena:', 'prefs-textboxsize' => 'Editatze lehioaren tamaina', 'youremail' => 'E-posta:', @@ -1191,9 +1198,15 @@ Gainera beste lankideek zurekin kontakta dezakete zure lankide edo lankide_eztab 'prefs-advancedrendering' => 'Aukera aurreratuak', 'prefs-advancedsearchoptions' => 'Aukera aurreratuak', 'prefs-advancedwatchlist' => 'Aukera aurreratuak', -'prefs-display' => 'Aukerak erakutsi', +'prefs-displayrc' => 'Aukerak erakutsi', +'prefs-displaysearchoptions' => 'Aukerak erakutsi', +'prefs-displaywatchlist' => 'Aukerak erakutsi', 'prefs-diffs' => 'Ezberdintasunak', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'E-posta helbidea zuzena dela dirudi', +'email-address-validity-invalid' => 'E-posta helbide zuzena idatzi', + # User rights 'userrights' => 'Erabiltzaile baimenen kudeaketa', 'userrights-lookup-user' => 'Erabiltzaile taldeak kudeatu', @@ -1277,6 +1290,7 @@ Gainera beste lankideek zurekin kontakta dezakete zure lankide edo lankide_eztab 'right-hideuser' => 'Erabiltzaile izen bat blokeatu, publikotik izkutatuz', 'right-ipblock-exempt' => 'IP blokeoen, auto-blokeoen eta maila blokeoen gainetik pasa.', 'right-proxyunbannable' => 'Proxyen blokeo automatikoen gainetik pasa', +'right-unblockself' => 'Beren burua desblokeatu', 'right-protect' => 'Orrialde babestuak aldatu eta babes maila aldatu', 'right-editprotected' => 'Babestutako orrialdeak aldatu (babes jauzirik gabe)', 'right-editinterface' => 'Erabiltzailearen interfazea aldatu', @@ -1299,7 +1313,6 @@ Gainera beste lankideek zurekin kontakta dezakete zure lankide edo lankide_eztab 'right-siteadmin' => 'Databasea blokeatu eta desblokeatu', 'right-reset-passwords' => 'Bese erabiltzaile batzuen pasahitzak berritu', 'right-override-export-depth' => '5eko sakonerararteko loturiko orrialdeak barne esportatu', -'right-versiondetail' => 'Software bertsio zabalduaren informazioa erakutsi', 'right-sendemail' => 'Beste erabiltzaileei e-posta bidali', # User rights log @@ -1350,14 +1363,9 @@ Gainera beste lankideek zurekin kontakta dezakete zure lankide edo lankide_eztab 'recentchanges-legend' => 'Azken aldaketen aukerak', 'recentchangestext' => 'Orrialde honetan wiki honetan egindako azken aldaketak erakusten dira.', 'recentchanges-feed-description' => 'Sindikazio honetan wikian eginiko azkeneko aldaketak jarrai daitezke.', -'recentchanges-label-legend' => 'Legenda: $1', -'recentchanges-legend-newpage' => '$1 - orrialde berria', 'recentchanges-label-newpage' => 'Aldaketa honek orrialde berri bat sortu du', -'recentchanges-legend-minor' => '$1 - aldaketa txikia', 'recentchanges-label-minor' => 'Hau aldaketa txikia da', -'recentchanges-legend-bot' => '$1 - bot aldaketa', 'recentchanges-label-bot' => 'Aldaketa hau bot batek egin du', -'recentchanges-legend-unpatrolled' => '$1 - patruilatu gabeko aldaketa', 'recentchanges-label-unpatrolled' => 'Aldaketa hau ez da oraindik patruilatua izan', 'rcnote' => "Beheko azken {{PLURAL:$2|eguneko|'''$2''' egunetako}} azken {{PLURAL:$1|aldaketa|'''$1''' aldaketak}} hurrengo datan egin ziren: $5, $4.", 'rcnotefrom' => 'Jarraian azaltzen diren aldaketak data honetatik aurrerakoak dira: $2 (gehienez $1 erakusten dira).', @@ -1434,6 +1442,16 @@ Orrialde baten irudi bat txertatzeko, erabili kode hauetako bat: 'filetype-banned-type' => '\'\'\'".$1"\'\'\' ez dago baimendutako fitxategi moten artean. Baimendutako fitxategi {{PLURAL:$3|mota $2 da|motak $2 dira}}.', 'filetype-missing' => 'Fitxategi honek ez du luzapenik (adibidez, ".jpg").', +'empty-file' => 'Bidali duzun fitxategia hutsik dago.', +'file-too-large' => 'Bidali duzun fitxategia handiegia zen.', +'filename-tooshort' => 'Fitxategiaren izena laburregia da.', +'filetype-banned' => 'Mota horretako fitxategiak debekatuta daude.', +'verification-error' => 'Fitxategiak ez du egiaztapena gainditu.', +'illegal-filename' => 'Fitxategiaren izena ez da onartzen.', +'overwrite' => 'Jada existitzen den fitxategi bat ezin da berridatzi.', +'unknown-error' => 'Ezezaguna den errorea gertatu da.', +'tmp-create-error' => 'Ezin izan da behin-behineko fitxategirik sortu.', +'tmp-write-error' => 'Errorea behin-behineko fitxategia idazten.', 'large-file' => 'Ez da gomendagarria fitxategiak $1 baino handiagoak izatea; fitxategi honen tamaina: $2.', 'largefileserver' => 'Fitxategi hau zerbitzariak baimentzen duena baino handiagoa da.', 'emptyfile' => 'Badirudi igotzen ari zaren fitxategia hutsik dagoela. Mesedez, egiaztatu fitxategi hori dela igo nahi duzuna.', @@ -1459,13 +1477,14 @@ Oraindik fitxategia igo nahi baduzu, mesedez atzera itzuli eta igo fitxategia iz Oraindik ere fitxategia igo nahi baduzu atzera itzuli eta izen berri bat erabili, mesedez. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Fitxategi hau beste fitxategi {{PLURAL:$1|honen|hauen}} kopia bat da:', 'file-deleted-duplicate' => 'Fitxategi honen ([[:$1]]) fitxategi berbera aldez aurretik ezabatua izan da. Fitxategi horren ezabaketa-erregistroa begiratu beharko zenuke berriz igo baino lehen.', -'successfulupload' => 'Igoera arrakastatsua', 'uploadwarning' => 'Igotzeko oharra', 'uploadwarning-text' => 'Aldatu beheko fitxategiaren deskribapena, mesedez, eta saiatu berriz.', 'savefile' => 'Fitxategia gorde', 'uploadedimage' => '"[[$1]]" igo da', 'overwroteimage' => '"[[$1]]"ren bertsio berri bat igo', 'uploaddisabled' => 'Igoerak ezgaituta daude', +'copyuploaddisabled' => 'URL bidezko igoera desaktibatuta.', +'uploadfromurl-queued' => 'Zure igoera ilaran jarri da.', 'uploaddisabledtext' => 'Fitxategiak igotzea ezgaituta dago.', 'php-uploaddisabledtext' => 'Fitxategi igoerak PHP-n ezinduta daude. Ikusi fitxategi_igoerak mesedez.', 'uploadscripted' => 'Fitxategi honek web zerbitzariak modu ezegokian interpretatu lezakeen HTML edo script kodea dauka.', @@ -1485,6 +1504,13 @@ Kontuan izan fitxategia igotzea egokia ote den. Fitxategi honen ezabaketa erregistroa jarraian ikus dezakezu:", 'filename-bad-prefix' => "Igotzen ari zaren fitxategiaren izena '''\"\$1\"'''ekin hasten da, normalki kamera digitalek automatikoki ezartzen duten izen ez deskriptibo bat. Aukera ezazu, mesedez, fitxategi izen deskriptiboago bat.", +'upload-success-subj' => 'Igoera arrakastatsua', +'upload-success-msg' => 'Zure [$2] igoera arrakastatsua izan da. Hemen duzu eskuragarri: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Igoera-arazoa', +'upload-failure-msg' => 'Hurrengo arazoa egon da zure [$2] igoerarekin: + +$1', +'upload-warning-subj' => 'Igoera oharra', 'upload-proto-error' => 'Protokolo ezegokia', 'upload-proto-error-text' => 'Kanpo igoerak http:// edo ftp:// hasiera duen URLa izan behar du.', @@ -1539,6 +1565,7 @@ Zutabe baten goi-buruaren egin klik sailkatzeko era aldatzeko.', 'listfiles_search_for' => 'Irudiaren izenagatik bilatu:', 'imgfile' => 'fitxategia', 'listfiles' => 'Fitxategien zerrenda', +'listfiles_thumb' => 'Iruditxoa', 'listfiles_date' => 'Data', 'listfiles_name' => 'Izena', 'listfiles_user' => 'Erabiltzailea', @@ -1646,7 +1673,6 @@ Ondorengo zerrendak fitxategira dauden {{PLURAL:$1|lehen lotura|lehen $1 loturak 'statistics-edits-average' => 'Bataz-besteko aldaketak orrialdeko', 'statistics-views-total' => 'Ikusitako orrialdeak guztira', 'statistics-views-peredit' => 'Ikusitako orrialdeak aldaketa bakoitzeko', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Lan zerrendaren] luzera', 'statistics-users' => 'Izen-emandako [[Special:ListUsers|lankideak]]', 'statistics-users-active' => 'Lankide aktiboak', 'statistics-users-active-desc' => 'Aurreko {{PLURAL:$1|egunean|egunetan}} jardueraren bat gauzatu duten erabiltzaileak', @@ -1657,7 +1683,7 @@ Ondorengo zerrendak fitxategira dauden {{PLURAL:$1|lehen lotura|lehen $1 loturak 'disambiguations-text' => "Jarraian azaltzen diren orrialdeek '''argipen orrialde''' baterako lotura dute. Kasu bakoitzean dagokion artikulu zuzenarekin izan beharko lukete lotura.
    Orrialde bat argipen motakoa dela antzeman ohi da [[MediaWiki:Disambiguationspage]] orrialdean agertzen den txantiloietako bat duenean.", 'doubleredirects' => 'Birzuzenketa bikoitzak', -'doubleredirectstext' => 'Lerro bakoitzean lehen eta bigarren birzuzenketetarako loturak ikus daitezke, eta baita edukia daukan edo eduki beharko lukeen orrialderako lotura ere. Lehen birzuzenketak azken honetara zuzendu beharko luke.', +'doubleredirectstext' => 'Lerro bakoitzean lehen eta bigarren birzuzenketetarako loturak ikus daitezke, eta baita edukia daukan edo eduki beharko lukeen orrialderako lotura ere. Lehen birzuzenketak azken honetara zuzendu beharko luke.', 'double-redirect-fixed-move' => '[[$1]] mugitu da eta orain [[$2]](e)ra birzuzenketa bat da', 'double-redirect-fixer' => 'Birzuzenketa zuzentzailea', @@ -1833,34 +1859,39 @@ Badago [[{{MediaWiki:Listgrouprights-helppage}}|informazio osagarria]] banakako 'listgrouprights-removegroup-self-all' => 'Talde guztiak norbere kontutik ezabatu', # E-mail user -'mailnologin' => 'Bidalketa helbiderik ez', -'mailnologintext' => 'Beste erabiltzaileei e-posta mezuak bidaltzeko [[Special:UserLogin|saioa hasi]] eta baliozko e-posta helbidea behar duzu izan zure [[Special:Preferences|hobespenetan]].', -'emailuser' => 'Erabiltzaile honi e-posta bidali', -'emailpage' => 'Erabiltzaileari e-posta bidali', -'emailpagetext' => 'Erabiltzaile honek baliozko e-posta helbide bat ezarri badu bere hobespenetan, beheko formularioa erabiliz mezu bat bidal dakioke. +'mailnologin' => 'Bidalketa helbiderik ez', +'mailnologintext' => 'Beste erabiltzaileei e-posta mezuak bidaltzeko [[Special:UserLogin|saioa hasi]] eta baliozko e-posta helbidea behar duzu izan zure [[Special:Preferences|hobespenetan]].', +'emailuser' => 'Erabiltzaile honi e-posta bidali', +'emailpage' => 'Erabiltzaileari e-posta bidali', +'emailpagetext' => 'Erabiltzaile honek baliozko e-posta helbide bat ezarri badu bere hobespenetan, beheko formularioa erabiliz mezu bat bidal dakioke. [[Special:Preferences|Hobespenetan]] daukazun e-posta helbidea azalduko da mezuaren bidaltzaile bezala eta beraz erantzun ahal izango dizu.', -'usermailererror' => 'Mail objektuak errore hau itzuli du:', -'defemailsubject' => 'E-posta {{SITENAME}}(e)tik', -'noemailtitle' => 'Posta helbiderik ez', -'noemailtext' => 'Erabiltzaile honek ez du baliozko e-posta helbiderik zehaztu.', -'nowikiemailtitle' => 'Ezin da e-postarik bidali', -'nowikiemailtext' => 'Erabiltzaile honek beste erabiltzaileengandik e-postak ez jasotzea hautatu du.', -'email-legend' => 'Bidali e-posta bat {{SITENAME}}(e)ko beste lankide bati', -'emailfrom' => 'Nork:', -'emailto' => 'Nori:', -'emailsubject' => 'Gaia:', -'emailmessage' => 'Mezua:', -'emailsend' => 'Mezua', -'emailccme' => 'Mezu honen kopia bat niri bidali.', -'emailccsubject' => 'Zure mezuaren kopia $1(r)i: $2', -'emailsent' => 'Mezua bidali egin da', -'emailsenttext' => 'Zure e-posta mezua bidali egin da.', -'emailuserfooter' => 'E-posta hau $1(e)k bidali dio $2(r)i {{SITENAME}}ko "E-posta bidali" funtzioa erabiliz.', +'usermailererror' => 'Mail objektuak errore hau itzuli du:', +'defemailsubject' => 'E-posta {{SITENAME}}(e)tik', +'usermaildisabled' => 'Erabiltzailearen e-maila desaktibatuta', +'usermaildisabledtext' => 'Wiki honetan ezin diezu beste erabiltzaileei posta elektronikorik bidali', +'noemailtitle' => 'Posta helbiderik ez', +'noemailtext' => 'Erabiltzaile honek ez du baliozko e-posta helbiderik zehaztu.', +'nowikiemailtitle' => 'Ezin da e-postarik bidali', +'nowikiemailtext' => 'Erabiltzaile honek beste erabiltzaileengandik e-postak ez jasotzea hautatu du.', +'email-legend' => 'Bidali e-posta bat {{SITENAME}}(e)ko beste lankide bati', +'emailfrom' => 'Nork:', +'emailto' => 'Nori:', +'emailsubject' => 'Gaia:', +'emailmessage' => 'Mezua:', +'emailsend' => 'Mezua', +'emailccme' => 'Mezu honen kopia bat niri bidali.', +'emailccsubject' => 'Zure mezuaren kopia $1(r)i: $2', +'emailsent' => 'Mezua bidali egin da', +'emailsenttext' => 'Zure e-posta mezua bidali egin da.', +'emailuserfooter' => 'E-posta hau $1(e)k bidali dio $2(r)i {{SITENAME}}ko "E-posta bidali" funtzioa erabiliz.', + +# User Messenger +'usermessage-editor' => 'Sistemako mezularia', # Watchlist 'watchlist' => 'Nire jarraipen zerrenda', 'mywatchlist' => 'Nire jarraipen zerrenda', -'watchlistfor' => "('''$1''')", +'watchlistfor2' => '$1 ($2)', 'nowatchlist' => 'Zure jarraipen zerrenda hutsik dago.', 'watchlistanontext' => 'Mesedez $1 zure jarraipen zerrendako orrialdeak ikusi eta aldatu ahal izateko.', 'watchnologin' => 'Saioa hasi gabe', @@ -1921,6 +1952,9 @@ Horrez gain, orrialdeen oharpen konfigurazioa leheneratu dezakezu jarraipen zerr Adeitasunez {{SITENAME}}(e)ko oharpen sistema -- +Zure epostaren jakinarazpenen konfigurazioa aldatzeko, ikus +{{fullurl:{{#special:Preferences}}}} + Zure jarraipen zerrendako konfigurazioa aldatzeko, ikus {{fullurl:{{#special:Watchlist}}/edit}} @@ -1977,7 +2011,10 @@ beste norbaitek editatu du edo jada desegin du. 'editcomment' => "Aldaketaren laburpena: \"''\$1''\".", 'revertpage' => '$2ren aldaketak ezabatu dira, $1ren azken bertsiora itzuliz.', 'rollback-success' => '$1(r)en aldaketak desegin dira, $2(r)en azken bertsiora itzuliz.', -'sessionfailure' => 'Badirudi saioarekin arazoren bat dagoela; bandalismoak saihesteko ekintza hau ezeztatu egin da. Mesedez, nabigatzaileko "atzera" botoian klik egin, hona ekarri zaituen orrialde hori berriz kargatu, eta saiatu berriz.', + +# Edit tokens +'sessionfailure-title' => 'Saio-akatsa', +'sessionfailure' => 'Badirudi saioarekin arazoren bat dagoela; bandalismoak saihesteko ekintza hau ezeztatu egin da. Mesedez, nabigatzaileko "atzera" botoian klik egin, hona ekarri zaituen orrialde hori berriz kargatu, eta saiatu berriz.', # Protect 'protectlogpage' => 'Babes erregistroa', @@ -2115,6 +2152,7 @@ $1', 'sp-contributions-newbies-title' => 'Lankideen ekarpenak lankide berrietn', 'sp-contributions-blocklog' => 'Blokeaketa erregistroa', 'sp-contributions-deleted' => 'lankide-ekarpen ezabatuak', +'sp-contributions-uploads' => 'igoerak', 'sp-contributions-logs' => 'erregistroak', 'sp-contributions-talk' => 'eztabaida', 'sp-contributions-userrights' => 'erabiltzaile-baimenen kudeaketa', @@ -2122,6 +2160,7 @@ $1', Blokeo erregistroa azken sarrera ematen da azpian erreferentziarako:', 'sp-contributions-search' => 'Ekarpenentzako bilaketa', 'sp-contributions-username' => 'IP helbidea edo erabiltzaile izena:', +'sp-contributions-toponly' => 'Azken aldaketak direnak soilik erakutsi', 'sp-contributions-submit' => 'Bilatu', # What links here @@ -2145,7 +2184,7 @@ Blokeo erregistroa azken sarrera ematen da azpian erreferentziarako:', # Block/unblock 'blockip' => 'Erabiltzailea blokeatu', -'blockip-title' => 'Lankidea blokeatu', +'blockip-title' => 'Erabiltzailea blokeatu', 'blockip-legend' => 'Erabiltzailea blokeatu', 'blockiptext' => 'IP helbide edo erabiltzaile izen bati idazketa baimenak kentzeko beheko formularioa erabil dezakezu. Ekintza hau bandalismoa saihesteko baino ez da burutu behar, eta beti ere [[{{MediaWiki:Policy-url}}|politikak]] errespetatuz. Blokeoaren arrazoi bat ere zehaztu ezazu (adibidez, orrialde batzuk zehaztuz).', 'ipaddress' => 'IP Helbidea', @@ -2181,7 +2220,6 @@ Ikus [[Special:IPBlockList|IP blokeoen zerrenda]] blokeoak aztertzeko.', 'ipb-edit-dropdown' => 'Blokeatzeko arrazoiak aldatu', 'ipb-unblock-addr' => '$1 lankide edo IP helbideari blokeoa baliogabetu', 'ipb-unblock' => 'Erabiltzaile izen edo IP helbide bati blokeoa kendu', -'ipb-blocklist-addr' => '$1(r)en blokeoak ikusi', 'ipb-blocklist' => 'Blokeaketak ikusi', 'ipb-blocklist-contribs' => '$1(r)en ekarpenak', 'unblockip' => 'Erabiltzailea desblokeatu', @@ -2189,7 +2227,7 @@ Ikus [[Special:IPBlockList|IP blokeoen zerrenda]] blokeoak aztertzeko.', 'ipusubmit' => 'Blokeoa ezabatu', 'unblocked' => '[[User:$1|$1]] desblokeatu egin da', 'unblocked-id' => '$1 blokeaketa ezabatu da', -'ipblocklist' => 'Blokeatutako IP helbide eta erabiltzaileak', +'ipblocklist' => 'Blokeatutako erabiltzaileak', 'ipblocklist-legend' => 'Blokeatutako erabiltzaile bat bilatu', 'ipblocklist-username' => 'Erabiltzaile izena edo IP helbidea:', 'ipblocklist-sh-userblocks' => 'Kontuaren blokeoak $1', @@ -2249,6 +2287,8 @@ Hala ere, $2-(r)en parte denez, blokeoa kendu daiteke.', 'sorbsreason' => 'Zure IP helbidea proxy ireki bezala zerrendatuta dago DNSBLan.', 'sorbs_create_account_reason' => 'Zure IP helbidea proxy ireki bezala zerrendatuta dago DNSBLan. Ezin duzu kontua sortu.', 'cant-block-while-blocked' => 'Blokeatuta zauden bitartean ezin dituzu beste lankideak blokeatu.', +'ipbblocked' => 'Ezin dituzu beste erabiltzaileak blokeatu edo desblokeatu, zu zeu blokeatuta zaudelako', +'ipbnounblockself' => 'Ez duzu baimenik zure buruari blokeoa kentzeko', # Developer tools 'lockdb' => 'Datu-basea blokeatu', @@ -2405,7 +2445,7 @@ Mesedez bisitatu [http://www.mediawiki.org/wiki/Localisation MediaWiki] eta [htt 'import-interwiki-namespace' => 'Helburuko izen-tartea:', 'import-upload-filename' => 'Fitxategiaren izena:', 'import-comment' => 'Iruzkina:', -'importtext' => 'Mesedez, jatorrizko wikitik orrialdea esportatzeko Special:Export tresna erabil ezazu, zure diskoan gorde eta jarraian hona igo.', +'importtext' => 'Mesedez, jatorrizko wikitik orrialdea esportatzeko [[Special:Export|esportazio tresna]] erabil ezazu, zure diskoan gorde eta jarraian hona igo.', 'importstart' => 'Orrialdeak inportatzen...', 'import-revision-count' => '{{PLURAL:$1|berrikuspen 1|$1 berrikuspen}}', 'importnopages' => 'Ez dago orrialderik inportatzeko.', @@ -2504,6 +2544,8 @@ Fitxategiaren atal bat baino ez zen igo.', 'tooltip-rollback' => '"Desegin" ekintzak orriaren azken egilearen ekarpena ezabatzen du klik batean', 'tooltip-undo' => '"Desegin" botoiak egindako aldaketa ezeztatzen du eta aurreikuspen bista erakusten du. Laburpenean arrazoi bat gehitzea baimentzen du', +'tooltip-preferences-save' => 'Hobespenak gorde', +'tooltip-summary' => 'Laburpen labur bat sar ezazu', # Stylesheets 'common.css' => '/** Hemen idatzitako CSS kodeak itxura guztietan izango du eragina */', @@ -2612,14 +2654,16 @@ Zure sisteman exekutatzea arriskutsua izan liteke.", 'imagemaxsize' => "Irudiaren tamainaren muga:
    ''(fitxategi deskribapen-orrietarako)''", 'thumbsize' => 'Irudi txikiaren tamaina:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|orri|orri}}', -'file-info' => '(fitxategiaren tamaina: $1, MIME mota: $2)', -'file-info-size' => '($1 × $2 pixel, fitxategiaren tamaina: $3, MIME mota: $4)', +'file-info' => 'fitxategiaren tamaina: $1, MIME mota: $2', +'file-info-size' => '$1 × $2 pixel, fitxategiaren tamaina: $3, MIME mota: $4', 'file-nohires' => 'Ez dago bereizmen handiagorik.', -'svg-long-desc' => '(SVG fitxategia, nominaldi $1 × $2 pixel, fitxategiaren tamaina: $3)', +'svg-long-desc' => 'SVG fitxategia, nominaldi $1 × $2 pixel, fitxategiaren tamaina: $3', 'show-big-image' => 'Bereizmen handikoa', 'show-big-image-thumb' => 'Aurreikuspen honen neurria: $1 × $2 pixel', 'file-info-gif-looped' => 'kiribildua', 'file-info-gif-frames' => '{{PLURAL:$1|Irudi $1|$1 irudi}}', +'file-info-png-looped' => 'begiztatua', +'file-info-png-frames' => '{{PLURAL:$1|Frame bat|$1 frame}}', # Special:NewFiles 'newimages' => 'Fitxategi berrien galeria', @@ -2694,8 +2738,8 @@ Zerrenda elementuak (hasieran * duten lerroak) baino ez dira kontuan hartzen. Le 'exif-colorspace' => 'Kolore tartea', 'exif-componentsconfiguration' => 'Osagai bakoitzaren esanahia', 'exif-compressedbitsperpixel' => 'Irudi konpresio mota', -'exif-pixelydimension' => 'Baliozko irudi zabalera', -'exif-pixelxdimension' => 'Baliozko irudi altuera', +'exif-pixelydimension' => 'Irudiaren zabalera', +'exif-pixelxdimension' => 'Irudiaren altuera', 'exif-makernote' => 'Egilearen oharrak', 'exif-usercomment' => 'Erabiltzailearen iruzkinak', 'exif-relatedsoundfile' => 'Harremanetan dagoen audio fitxategia', @@ -2712,9 +2756,9 @@ Zerrenda elementuak (hasieran * duten lerroak) baino ez dira kontuan hartzen. Le 'exif-spectralsensitivity' => 'Sentiberatasun espektrala', 'exif-isospeedratings' => 'ISO abiadura', 'exif-oecf' => 'Aldatze faktore optoelektronikoa', -'exif-shutterspeedvalue' => 'Argazkiaren abiadura', -'exif-aperturevalue' => 'Irekiera', -'exif-brightnessvalue' => 'Distira', +'exif-shutterspeedvalue' => 'APEX argazkiaren itxiera-abiadura', +'exif-aperturevalue' => 'APEX irekiera', +'exif-brightnessvalue' => 'APEX distira', 'exif-exposurebiasvalue' => 'Esposizio biasa', 'exif-maxaperturevalue' => 'Gehienezko landa irekiera', 'exif-subjectdistance' => 'Subjetuarekiko distantzia', @@ -2779,6 +2823,7 @@ Zerrenda elementuak (hasieran * duten lerroak) baino ez dira kontuan hartzen. Le 'exif-gpsareainformation' => 'GPS eskualdearen izena', 'exif-gpsdatestamp' => 'GPS data', 'exif-gpsdifferential' => 'GPSaren zuzenketa diferentziala', +'exif-objectname' => 'Izenburua laburra', # EXIF attributes 'exif-compression-1' => 'Konprimatu gabe', @@ -2880,7 +2925,7 @@ Zerrenda elementuak (hasieran * duten lerroak) baino ez dira kontuan hartzen. Le 'exif-sensingmethod-7' => 'Hiru lerroko sentsorea', 'exif-sensingmethod-8' => 'Kolore sekuentzialeko sentsore linearra', -'exif-filesource-3' => 'DSC', +'exif-filesource-3' => 'Argazki kamera digitala', 'exif-scenetype-1' => 'Zuzenean argazkia atera zaion irudi bat', @@ -3025,6 +3070,7 @@ $1', 'table_pager_first' => 'Lehen orrialdea', 'table_pager_last' => 'Azken orrialdea', 'table_pager_limit' => 'Orrialdeko $1 elementu erakutsi', +'table_pager_limit_label' => 'Gaiak orrialdeko:', 'table_pager_limit_submit' => 'Joan', 'table_pager_empty' => 'Emaitzik ez', @@ -3092,6 +3138,8 @@ Halaber [[Special:Watchlist/edit|aldatzaile estandarra]] erabil dezakezu.', 'version-hook-subscribedby' => 'Hauen harpidetzarekin', 'version-version' => '(Bertsioa $1)', 'version-license' => 'Lizentzia', +'version-poweredby-credits' => "Wiki hau '''[http://www.mediawiki.org/ MediaWiki]'''k sustatzen du (copyright © 2001-$1 $2).", +'version-poweredby-others' => 'beste batzuk', 'version-software' => 'Instalatutako softwarea', 'version-software-product' => 'Produktua', 'version-software-version' => 'Bertsioa', @@ -3162,6 +3210,15 @@ Fitxategiaren izena sartu "{{ns:file}}:" aurrizkia gabe.', 'tags-edit' => 'aldatu', 'tags-hitcount' => '$1 {{PLURAL:$1|aldaketa|aldaketa}}', +# Special:ComparePages +'comparepages' => 'Orrialdeak alderatu', +'compare-selector' => 'Orrialde-berrikuspenak alderatu', +'compare-page1' => '1. orrialdea', +'compare-page2' => '2. orrialdea', +'compare-rev1' => '1. berrikuspena', +'compare-rev2' => '2. berrikuspena', +'compare-submit' => 'Alderatu', + # Database error messages 'dberr-header' => 'Wiki honek arazo bat du', 'dberr-problems' => 'Barkatu! Webgune honek zailtasun teknikoak jasaten ari da.', @@ -3178,6 +3235,7 @@ Fitxategiaren izena sartu "{{ns:file}}:" aurrizkia gabe.', 'htmlform-float-invalid' => 'Zuk zehaztutako balioa ez da zenbakia.', 'htmlform-int-toolow' => 'Zuk zehaztutako balioa $1 minimoaren azpitik dago', 'htmlform-int-toohigh' => 'Zuk zehaztutako balioa $1 maximoaren gainetik dago', +'htmlform-required' => 'Balio hori beharrezkoa da', 'htmlform-submit' => 'Bidali', 'htmlform-reset' => 'Aldaketak desegin', 'htmlform-selectorother-other' => 'Beste bat', diff --git a/languages/messages/MessagesExt.php b/languages/messages/MessagesExt.php index 069690af..3be9daf7 100644 --- a/languages/messages/MessagesExt.php +++ b/languages/messages/MessagesExt.php @@ -12,6 +12,10 @@ * @author Urhixidur */ +$namespaceNames = array( + NS_TEMPLATE => 'Prantilla', +); + $messages = array( # User preference toggles 'tog-underline' => 'Surrayal atihus:', @@ -28,8 +32,7 @@ $messages = array( 'tog-editsection' => 'Premitil eital mensahis gastandu el atihu [eital]', 'tog-editsectiononrightclick' => 'Premitil eital secionis pulsandu el botón de la derecha
    enus entítulus de secionis (JavaScript)', 'tog-showtoc' => 'Muestral cuairu e continius (pa páhinas con mas de 3 entítulus)', -'tog-rememberpassword' => 'Recordal la mi cuenta nesti ordinaol', -'tog-editwidth' => "Encajal el cuairu d'eición al anchu la pantalla", +'tog-rememberpassword' => 'Recordal la mi cuenta nesti ordinaol (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Vehilal las páhinas que yo crei', 'tog-watchdefault' => "Vehilal las páhinas qu'eiti", 'tog-watchmoves' => 'Vehilal las páhinas que rellami', @@ -166,31 +169,20 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Añiil tema', -'vector-action-delete' => 'Esborral', -'vector-action-move' => 'Mual', -'vector-action-protect' => 'Protegel', -'vector-action-undelete' => 'Esborral', -'vector-action-unprotect' => 'Esprotegel', -'vector-namespace-category' => 'Categoria', -'vector-namespace-help' => "Página d'ayua", -'vector-namespace-image' => 'Archivu', -'vector-namespace-main' => 'Página', -'vector-namespace-media' => 'Página Murtimeya', -'vector-namespace-mediawiki' => 'Mensaji', -'vector-namespace-project' => 'Página el proyeutu', -'vector-namespace-special' => 'Página especial', -'vector-namespace-talk' => 'Caraba', -'vector-namespace-template' => 'Cuairu', -'vector-namespace-user' => "Página d'usuáriu", -'vector-view-create' => 'Crial', -'vector-view-edit' => 'Eital', -'vector-view-history' => 'Guipal estorial', -'vector-view-view' => 'Leyel', -'vector-view-viewsource' => 'Guipal cóigu', -'actions' => 'Acionis', -'namespaces' => 'Espáciu nombris', -'variants' => 'Variantis', +'vector-action-addsection' => 'Añiil tema', +'vector-action-delete' => 'Esborral', +'vector-action-move' => 'Mual', +'vector-action-protect' => 'Protegel', +'vector-action-undelete' => 'Esborral', +'vector-action-unprotect' => 'Esprotegel', +'vector-view-create' => 'Crial', +'vector-view-edit' => 'Eital', +'vector-view-history' => 'Guipal estorial', +'vector-view-view' => 'Leyel', +'vector-view-viewsource' => 'Guipal cóigu', +'actions' => 'Acionis', +'namespaces' => 'Espáciu nombris', +'variants' => 'Variantis', 'errorpagetitle' => 'Marru', 'returnto' => 'Gorvel a $1.', @@ -406,7 +398,7 @@ Alcuerdati de chambal las tus [[Special:Preferences|preferéncias de {{SITENAME} 'yourname' => "Nombri d'usuáriu:", 'yourpassword' => 'Consínia:', 'yourpasswordagain' => 'Escrebi e nuevu la consínia:', -'remembermypassword' => 'Recordal la mi cuenta nesti ordinaol', +'remembermypassword' => 'Recordal la mi cuenta nesti ordinaol (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'El tu domiñu:', 'externaldberror' => "Marru d'autentificación esterna e la basi e datus, u bien nu t'alcuentras autorizau p'atualizal la tu cuenta esterna.", 'login' => 'Entral', @@ -586,7 +578,7 @@ u [{{fullurl:{{FULLPAGENAME}}|action=edit}} eital ésta].', 'usercsspreview' => "'''Alcuerdati que solu estás previsoreandu el tu CSS d'usuáriu.''' '''Entovia nu está emburacau!'''", 'userjspreview' => "'''Recuerda que solu estás prebandu/previsoreandu el tu JavaScript d´usuáriu, entovia nu está emburacau!'''", -'userinvalidcssjstitle' => "'''Avisu:''' Nu desisti el skin \"\$1\". Alcuerdati que las páhinas presonalizás .css i .js tienin el su entítulu en menúsculas, p.s. {{ns:user}}:Foo/monobook.css en lugal de {{ns:user}}:Foo/Monobook.css.", +'userinvalidcssjstitle' => "'''Avisu:''' Nu desisti el skin \"\$1\". Alcuerdati que las páhinas presonalizás .css i .js tienin el su entítulu en menúsculas, p.s. {{ns:user}}:Foo/vector.css en lugal de {{ns:user}}:Foo/Vector.css.", 'updated' => '(Atualizau)', 'note' => "'''Nota:'''", 'previewnote' => "'''Agora solu estás previsoreandu; entovia nu están emburacaus los chambus!'''", @@ -622,7 +614,6 @@ Pol otra parti, al pursal el botón \"emburacal\" mos estás asigurandu que lo e 'copyrightwarning2' => "Tolas contribucionis a {{SITENAME}} puein sel eitás, chambás, u esborrás pol otrus colabutaoris. Si nu estás dalcuerdu, altonci nu emburaquis ná.
    Pol otra parti, al pursal el botón \"emburacal\" mos estás asigurandu que lo escrebiu á siu hechu pol tí, u copiau dun domiñu púbricu u recursu semilal (lei \$1 pa mas detallis). '''Cudia: Nu emburaquis labutus con Copyright sin premisu!'''", -'longpagewarning' => "'''Avisu: Esta páhina tieni un grandol de $1 kilobytes; angunus escrucaoris puein tenel pobremas al eital páhinas con mas de 32 kB. Pol favol, consieri la posibiliá e devidil esta páhina en secionis mas chiqueninas.'''", 'longpageerror' => "'''Marru: El testu qu'as empuntau ocupa $1 kbs (siendu polo tantu mayol de $2 kbs). Nu es posibri emburacal.'''", 'readonlywarning' => "'''Alverténcia: La bassi datus s'alcuentra cerrá pol mantenimientu nesti momentu, razón pola que nu pueis emburacal los tus chambus agora.''' @@ -1122,7 +1113,6 @@ Si entovia quieris empuntal el archivu, pol favol, güervi atrás i empuntalu co Si acontinas queriendu empuntal el archivu, vai alatrás i escambia el nombri el archivu. [[File:$1|thumb|center|$1]]", 'file-exists-duplicate' => 'Esti archivu es un dupricau {{PLURAL:$1|el siguienti archivu|los siguientis archivus}}:', -'successfulupload' => 'Empuntu satisfatoriu', 'uploadwarning' => 'Avisu d´empuntu', 'savefile' => 'Emburacal archivu', 'uploadedimage' => 'emputau "[[$1]]"', @@ -1141,6 +1131,7 @@ Si acontinas queriendu empuntal el archivu, vai alatrás i escambia el nombri el Eberias arreparal en si es convenienti acontinal empuntandu el archivu u nu. Velaquí el antigu rustrihu d´esborrau pa esti archivu:", 'filename-bad-prefix' => "El nombri del archivu qu'estás empuntandu esmiença pol '''\"\$1\"''', es izil, es un nombri nu descritivu (típicu nombri dau autumaticamenti pol cámaras dehitalis). Pol favol, chamba el nombri del tu archivu.", +'upload-success-subj' => 'Empuntu satisfatoriu', 'upload-proto-error' => 'Protocolu encorretu', 'upload-proto-error-text' => 'El empuntu remotu prehisa e "URLs" qu´esmiencin pol http:// u ftp://.', @@ -1438,7 +1429,6 @@ La direción email qu'aigas escrebiu enas tus preferéncias apaicirá cumu remit # Watchlist 'watchlist' => 'La mi lista e seguimientu', 'mywatchlist' => 'La mi lista e seguimientu', -'watchlistfor' => "(pa '''$1''')", 'nowatchlist' => 'La tu lista e seguimientu está vacia.', 'watchlistanontext' => 'Pa vel u eital las entrás ena tu lista e seguimientu es mestel $1.', 'watchnologin' => 'Nu estás rustriu', @@ -1550,7 +1540,9 @@ La úrtima eición á siu hecha pol [[User:$3|$3]] ([[User talk:$3|Caraba]]).', 'editcomment' => "La síntesis la eición hue: \"''\$1''\".", 'revertpage' => 'Án siu revertias las eicionis de [[Special:Contributions/$2|$2]] ([[User talk:$2|Caraba]]); chambau a la úrtima velsión de [[User:$1|$1]]', 'rollback-success' => 'Revertias las eicionis de $1; chambau a la úrtima velsión de $2.', -'sessionfailure' => "Paci qu'ai un pobrema cola tu sesión; pol precaución + +# Edit tokens +'sessionfailure' => "Paci qu'ai un pobrema cola tu sesión; pol precaución s'á cancelau l'ación solicitá. Pursa nel botón \"Atrás\" del tu escrucaol pa cargal otra vezi la páhina i güervi a ententalu.", @@ -1723,7 +1715,6 @@ Escrebi una razón concreta embahu (pol sabulugal, almientandu páhinas qu'aigan 'ipb-edit-dropdown' => 'Eital las razonis el tarugu', 'ipb-unblock-addr' => 'Desatarugal $1', 'ipb-unblock' => 'Desatarugal un nombri d´usuáriu u direción IP', -'ipb-blocklist-addr' => 'Tarugus dessistentis de $1', 'ipb-blocklist' => 'Vel tarugus desistentis', 'ipb-blocklist-contribs' => 'Contribucionis de $1', 'unblockip' => 'Desatarugal usuáriu', @@ -2067,10 +2058,10 @@ $1', # Media information 'thumbsize' => 'Grandol el cuairu:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|página|páginas}}', -'file-info' => '(grandol el archivu: $1, MIME type: $2)', -'file-info-size' => '($1 × $2 pixel, grandol el archivu: $3, MIME type: $4)', +'file-info' => 'grandol el archivu: $1, MIME type: $2', +'file-info-size' => '$1 × $2 pixel, grandol el archivu: $3, MIME type: $4', 'file-nohires' => 'Nu disponibri a mayol resolución.', -'svg-long-desc' => '(archivu SVG, $1 × $2 pixelis, grandol: $3)', +'svg-long-desc' => 'archivu SVG, $1 × $2 pixelis, grandol: $3', 'show-big-image' => 'Resolución máisima', 'show-big-image-thumb' => 'Grandol al previsoreal: $1 × $2 pixelis', diff --git a/languages/messages/MessagesFa.php b/languages/messages/MessagesFa.php index 7fb78b64..25eb1cec 100644 --- a/languages/messages/MessagesFa.php +++ b/languages/messages/MessagesFa.php @@ -29,7 +29,7 @@ $namespaceNames = array( NS_MEDIA => 'مدیا', NS_SPECIAL => 'ویژه', - NS_MAIN => '', + NS_MAIN => '', NS_TALK => 'بحث', NS_USER => 'کاربر', NS_USER_TALK => 'بحث_کاربر', @@ -47,6 +47,8 @@ $namespaceNames = array( ); $namespaceAliases = array( + 'رسانه' => NS_MEDIA, + 'رسانه‌ای' => NS_MEDIA, 'تصویر' => NS_FILE, 'بحث_تصویر' => NS_FILE_TALK, ); @@ -55,8 +57,8 @@ $specialPageAliases = array( 'DoubleRedirects' => array( 'تغییرمسیرهای_دوتایی' ), 'BrokenRedirects' => array( 'تغییرمسیرهای_خراب' ), 'Disambiguations' => array( 'ابهام‌زدایی' ), - 'Userlogin' => array( 'ورود_به_سیستم' ), - 'Userlogout' => array( 'خروج_از_سیستم' ), + 'Userlogin' => array( 'ورود_به_سامانه' ), + 'Userlogout' => array( 'خروج_از_سامانه' ), 'CreateAccount' => array( 'ایجاد_حساب_کاربری' ), 'Preferences' => array( 'ترجیحات' ), 'Watchlist' => array( 'فهرست_پی‌گیری' ), @@ -96,6 +98,7 @@ $specialPageAliases = array( 'Allpages' => array( 'تمام_صفحه‌ها' ), 'Prefixindex' => array( 'نمایه_پیشوندی' ), 'Ipblocklist' => array( 'فهرست_بستن_نشانی_آی‌پی' ), + 'Unblock' => array( 'باز_کردن' ), 'Specialpages' => array( 'صفحه‌های_ویژه' ), 'Contributions' => array( 'مشارکت‌ها' ), 'Emailuser' => array( 'نامه_به_کاربر' ), @@ -140,6 +143,8 @@ $specialPageAliases = array( 'DeletedContributions' => array( 'مشارکت‌های_حذف_شده' ), 'Tags' => array( 'برچسب‌ها' ), 'Activeusers' => array( 'کاربران_فعال' ), + 'ComparePages' => array( 'مقایسه_صفحات' ), + 'Badtitle' => array( 'عنوان_نامناسب' ), ); @@ -172,12 +177,12 @@ $defaultUserOptionOverrides = array( /** - * A list of date format preference keys which can be selected in user + * A list of date format preference keys which can be selected in user * preferences. New preference keys can be added, provided they are supported - * by the language class's timeanddate(). Only the 5 keys listed below are + * by the language class's timeanddate(). Only the 5 keys listed below are * supported by the wikitext converter (DateFormatter.php). * - * The special key "default" is an alias for either dmy or mdy depending on + * The special key "default" is an alias for either dmy or mdy depending on * $wgAmericanDates */ $datePreferences = array( @@ -192,14 +197,14 @@ $datePreferences = array( /** * The date format to use for generated dates in the user interface. - * This may be one of the above date preferences, or the special value - * "dmy or mdy", which uses mdy if $wgAmericanDates is true, and dmy + * This may be one of the above date preferences, or the special value + * "dmy or mdy", which uses mdy if $wgAmericanDates is true, and dmy * if $wgAmericanDates is false. */ $defaultDateFormat = 'dmy or mdy'; /** - * Associative array mapping old numeric date formats, which may still be + * Associative array mapping old numeric date formats, which may still be * stored in user preferences, to the new string formats. */ $datePreferenceMigrationMap = array( @@ -211,8 +216,8 @@ $datePreferenceMigrationMap = array( /** * These are formats for dates generated by MediaWiki (as opposed to the wikitext - * DateFormatter). Documentation for the format string can be found in - * Language.php, search for sprintfDate. + * DateFormatter). Documentation for the format string can be found in + * Language.php, search for sprintfDate. * * This array is automatically inherited by all subclasses. Individual keys can be * overridden. @@ -230,15 +235,15 @@ $dateFormats = array( 'ymd time' => '‏H:i', 'ymd date' => '‏Y/n/j میلادی', 'ymd both' => '‏Y/n/j میلادی، ساعت H:i', - + 'persian time' => '‏H:i', - 'persian date' => '‏xij xiF xiY', + 'persian date' => '‏xij xiF xiY', 'persian both' => '‏xij xiF xiY، ساعت H:i', - + 'hebrew time' => '‏H:i', 'hebrew date' => '‏xij xjF xjY', 'hebrew both' => '‏H:i, xij xjF xjY', - + 'ISO 8601 time' => 'xnH:xni:xns', 'ISO 8601 date' => 'xnY-xnm-xnd', @@ -258,12 +263,12 @@ $magicWords = array( 'currentmonthname' => array( '1', 'نام‌ماه', 'نام_ماه', 'نام‌ماه‌کنونی', 'نام_ماه_کنونی', 'CURRENTMONTHNAME' ), 'currentmonthnamegen' => array( '1', 'نام‌ماه‌اضافه', 'نام_ماه_اضافه', 'نام‌ماه‌کنونی‌اضافه', 'نام_ماه_کنونی_اضافه', 'CURRENTMONTHNAMEGEN' ), 'currentmonthabbrev' => array( '1', 'مخفف‌نام‌ماه', 'مخفف_نام_ماه', 'CURRENTMONTHABBREV' ), - 'currentday' => array( '1', 'روز', 'CURRENTDAY' ), + 'currentday' => array( '1', 'روز', 'روزکنونی', 'روز_کنونی', 'CURRENTDAY' ), 'currentday2' => array( '1', 'روز۲', 'روز_۲', 'CURRENTDAY2' ), 'currentdayname' => array( '1', 'نام‌روز', 'نام_روز', 'CURRENTDAYNAME' ), 'currentyear' => array( '1', 'سال', 'سال‌کنونی', 'سال_کنونی', 'CURRENTYEAR' ), - 'currenttime' => array( '1', 'زمان', 'CURRENTTIME' ), - 'currenthour' => array( '1', 'ساعت', 'CURRENTHOUR' ), + 'currenttime' => array( '1', 'زمان‌کنونی', 'زمان_کنونی', 'CURRENTTIME' ), + 'currenthour' => array( '1', 'ساعت', 'ساعت‌کنونی', 'ساعت_کنونی', 'CURRENTHOUR' ), 'localmonth' => array( '1', 'ماه‌محلی', 'ماه_محلی', 'ماه‌محلی۲', 'ماه_محلی۲', 'LOCALMONTH', 'LOCALMONTH2' ), 'localmonth1' => array( '1', 'ماه‌محلی۱', 'ماه_محلی۱', 'LOCALMONTH1' ), 'localmonthname' => array( '1', 'نام‌ماه‌محلی', 'نام_ماه_محلی', 'LOCALMONTHNAME' ), @@ -275,45 +280,46 @@ $magicWords = array( 'localyear' => array( '1', 'سال‌محلی', 'سال_محلی', 'LOCALYEAR' ), 'localtime' => array( '1', 'زمان‌محلی', 'زمان_محلی', 'LOCALTIME' ), 'localhour' => array( '1', 'ساعت‌محلی', 'ساعت_محلی', 'LOCALHOUR' ), - 'numberofpages' => array( '1', 'تعدادصفحه‌ها', 'تعداد_صفحه‌ها', 'NUMBEROFPAGES' ), - 'numberofarticles' => array( '1', 'تعدادمقاله‌ها', 'تعداد_مقاله‌ها', 'NUMBEROFARTICLES' ), - 'numberoffiles' => array( '1', 'تعدادپرونده‌ها', 'تعداد_پرونده‌ها', 'NUMBEROFFILES' ), - 'numberofusers' => array( '1', 'تعدادکاربران', 'تعداد_کاربران', 'NUMBEROFUSERS' ), + 'numberofpages' => array( '1', 'تعدادصفحه‌ها', 'NUMBEROFPAGES' ), + 'numberofarticles' => array( '1', 'تعدادمقاله‌ها', 'NUMBEROFARTICLES' ), + 'numberoffiles' => array( '1', 'تعدادپرونده‌ها', 'NUMBEROFFILES' ), + 'numberofusers' => array( '1', 'تعدادکاربران', 'NUMBEROFUSERS' ), 'numberofactiveusers' => array( '1', 'کاربران‌فعال', 'کاربران_فعال', 'NUMBEROFACTIVEUSERS' ), - 'numberofedits' => array( '1', 'تعدادویرایش‌ها', 'تعداد_ویرایش‌ها', 'NUMBEROFEDITS' ), - 'numberofviews' => array( '1', 'تعدادبازدید', 'تعداد_بازدید', 'NUMBEROFVIEWS' ), + 'numberofedits' => array( '1', 'تعدادویرایش‌ها', 'NUMBEROFEDITS' ), + 'numberofviews' => array( '1', 'تعدادبازدید', 'NUMBEROFVIEWS' ), 'pagename' => array( '1', 'نام‌صفحه', 'نام_صفحه', 'PAGENAME' ), - 'pagenamee' => array( '1', 'نشانی‌صفحه', 'نشانی_صفحه', 'PAGENAMEE' ), + 'pagenamee' => array( '1', 'نام‌صفحه‌کد', 'نام_صفحه_کد', 'PAGENAMEE' ), 'namespace' => array( '1', 'فضای‌نام', 'فضای_نام', 'NAMESPACE' ), - 'namespacee' => array( '1', 'نشانی‌فضای‌نام', 'نشانی_فضای_نام', 'NAMESPACEE' ), + 'namespacee' => array( '1', 'فضای‌نام‌کد', 'فضای_نام_کد', 'NAMESPACEE' ), 'talkspace' => array( '1', 'فضای‌بحث', 'فضای_بحث', 'TALKSPACE' ), - 'talkspacee' => array( '1', 'نشانی‌بحث', 'نشانی_بحث', 'TALKSPACEE' ), + 'talkspacee' => array( '1', 'فضای‌بحث‌کد', 'فضای_بحث_کد', 'TALKSPACEE' ), 'subjectspace' => array( '1', 'فضای‌موضوع', 'فضای‌مقاله', 'فضای_موضوع', 'فضای_مقاله', 'SUBJECTSPACE', 'ARTICLESPACE' ), - 'subjectspacee' => array( '1', 'نشانی‌فضای‌موضوع', 'نشانی‌فضای‌مقاله', 'نشانی_فضای_موضوع', 'نشانی_فضای_مقاله', 'SUBJECTSPACEE', 'ARTICLESPACEE' ), + 'subjectspacee' => array( '1', 'فضای‌موضوع‌کد', 'فضای‌مقاله‌کد', 'فضای_موضوع_کد', 'فضای_مقاله_کد', 'SUBJECTSPACEE', 'ARTICLESPACEE' ), 'fullpagename' => array( '1', 'نام‌کامل‌صفحه', 'نام_کامل_صفحه', 'FULLPAGENAME' ), - 'fullpagenamee' => array( '1', 'نشانی‌کامل‌صفحه', 'نشانی_کامل_صفحه', 'FULLPAGENAMEE' ), + 'fullpagenamee' => array( '1', 'نام‌کامل‌صفحه‌کد', 'نام_کامل_صفحه_کد', 'FULLPAGENAMEE' ), 'subpagename' => array( '1', 'نام‌زیرصفحه', 'نام_زیرصفحه', 'SUBPAGENAME' ), - 'subpagenamee' => array( '1', 'نشانی‌زیرصفحه', 'نشانی_زیرصفحه', 'SUBPAGENAMEE' ), + 'subpagenamee' => array( '1', 'نام‌زیرصفحه‌کد', 'نام_زیرصفحه_کد', 'SUBPAGENAMEE' ), 'basepagename' => array( '1', 'نام‌صفحه‌مبنا', 'نام_صفحه_مبنا', 'BASEPAGENAME' ), - 'basepagenamee' => array( '1', 'نشانی‌صفحه‌مبنا', 'نشانی_صفحه‌مبنا', 'BASEPAGENAMEE' ), + 'basepagenamee' => array( '1', 'نام‌صفحه‌مبناکد', 'نام_صفحه_مبنا_کد', 'BASEPAGENAMEE' ), 'talkpagename' => array( '1', 'نام‌صفحه‌بحث', 'نام_صفحه_بحث', 'TALKPAGENAME' ), - 'talkpagenamee' => array( '1', 'نشانی‌صفحه‌بحث', 'نشانی_صفحه_بحث', 'TALKPAGENAMEE' ), + 'talkpagenamee' => array( '1', 'نام‌صفحه‌بحث‌کد', 'نام_صفحه_بحث_کد', 'TALKPAGENAMEE' ), 'subjectpagename' => array( '1', 'نام‌صفحه‌موضوع', 'نام‌صفحه‌مقاله', 'نام_صفحه_موضوع', 'نام_صفحه_مقاله', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ), - 'subjectpagenamee' => array( '1', 'نشانی‌صفحه‌موضوع', 'نشانی‌صفحه‌مقاله', 'نشانی_صفحه_موضوع', 'نشانی_صفحه_مقاله', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ), + 'subjectpagenamee' => array( '1', 'نام‌صفحه‌موضوع‌کد', 'نام‌صفحه‌مقاله‌کد', 'نام_صفحه_موضوع_کد', 'نام_صفحه_مقاله_کد', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ), 'msg' => array( '0', 'پیغام:', 'پ:', 'MSG:' ), 'subst' => array( '0', 'جایگزین:', 'جا:', 'SUBST:' ), + 'safesubst' => array( '0', 'جایگزین_امن:', 'جام:', 'SAFESUBST:' ), 'msgnw' => array( '0', 'پیغام‌بی‌بسط:', 'MSGNW:' ), 'img_thumbnail' => array( '1', 'بندانگشتی', 'انگشتدان', 'انگشتی', 'thumbnail', 'thumb' ), - 'img_manualthumb' => array( '1', 'بندانگشتی=$1', 'انگشتدانهای=$1', 'انگشتی=$1', 'thumbnail=$1', 'thumb=$1' ), + 'img_manualthumb' => array( '1', 'بندانگشتی=$1', 'انگشتدان=$1', 'انگشتی=$1', 'thumbnail=$1', 'thumb=$1' ), 'img_right' => array( '1', 'راست', 'right' ), 'img_left' => array( '1', 'چپ', 'left' ), 'img_none' => array( '1', 'هیچ', 'none' ), 'img_width' => array( '1', '$1پیکسل', '$1px' ), 'img_center' => array( '1', 'وسط', 'center', 'centre' ), 'img_framed' => array( '1', 'قاب', 'framed', 'enframed', 'frame' ), - 'img_frameless' => array( '1', 'بی‌قاب', 'بیقاب', 'frameless' ), - 'img_page' => array( '1', 'صفحه=$1', 'صفحه $1', 'page=$1', 'page $1' ), - 'img_upright' => array( '1', 'ایستاده', 'ایستاده=$1', 'ایستاده $1', 'upright', 'upright=$1', 'upright $1' ), + 'img_frameless' => array( '1', 'بی‌قاب', 'بیقاب', 'بی_قاب', 'frameless' ), + 'img_page' => array( '1', 'صفحه=$1', 'صفحه_$1', 'page=$1', 'page $1' ), + 'img_upright' => array( '1', 'ایستاده', 'ایستاده=$1', 'ایستاده_$1', 'upright', 'upright=$1', 'upright $1' ), 'img_border' => array( '1', 'حاشیه', 'border' ), 'img_baseline' => array( '1', 'همکف', 'baseline' ), 'img_sub' => array( '1', 'زیر', 'sub' ), @@ -325,18 +331,19 @@ $magicWords = array( 'img_text_bottom' => array( '1', 'متن-پایین', 'text-bottom' ), 'img_link' => array( '1', 'پیوند=$1', 'link=$1' ), 'img_alt' => array( '1', 'جایگزین=$1', 'alt=$1' ), - 'int' => array( '0', 'محتوى:', 'INT:' ), + 'int' => array( '0', 'ترجمه:', 'INT:' ), 'sitename' => array( '1', 'نام‌وبگاه', 'نام_وبگاه', 'SITENAME' ), 'ns' => array( '0', 'فن:', 'NS:' ), - 'nse' => array( '0', 'فنم:', 'NSE:' ), + 'nse' => array( '0', 'فنک:', 'NSE:' ), 'localurl' => array( '0', 'نشانی:', 'LOCALURL:' ), - 'localurle' => array( '0', 'نشانی‌نشانی:', 'LOCALURLE:' ), - 'server' => array( '0', 'کارگذار', 'SERVER' ), - 'servername' => array( '0', 'نام‌کارگذار', 'نام_کارگذار', 'SERVERNAME' ), - 'scriptpath' => array( '0', 'مسیر', 'مسیر سند', 'SCRIPTPATH' ), - 'stylepath' => array( '0', 'مسیر سبک', 'STYLEPATH' ), - 'grammar' => array( '0', 'دستورزبان:', 'GRAMMAR:' ), - 'gender' => array( '0', 'جنسیت', 'GENDER:' ), + 'localurle' => array( '0', 'نشانی‌کد:', 'نشانی_کد:', 'LOCALURLE:' ), + 'articlepath' => array( '0', 'مسیرمقاله', 'مسیر_مقاله', 'ARTICLEPATH' ), + 'server' => array( '0', 'سرور', 'کارساز', 'SERVER' ), + 'servername' => array( '0', 'نام‌کارساز', 'نام_کارساز', 'نام‌سرور', 'نام_سرور', 'SERVERNAME' ), + 'scriptpath' => array( '0', 'مسیرسند', 'مسیر_سند', 'SCRIPTPATH' ), + 'stylepath' => array( '0', 'مسیرسبک', 'مسیر_سبک', 'STYLEPATH' ), + 'grammar' => array( '0', 'دستورزبان:', 'دستور_زبان:', 'GRAMMAR:' ), + 'gender' => array( '0', 'جنسیت:', 'جنس:', 'GENDER:' ), 'notitleconvert' => array( '0', '__عنوان‌تبدیل‌نشده__', '__NOTITLECONVERT__', '__NOTC__' ), 'nocontentconvert' => array( '0', '__محتواتبدیل‌نشده__', '__NOCONTENTCONVERT__', '__NOCC__' ), 'currentweek' => array( '1', 'هفته', 'CURRENTWEEK' ), @@ -347,37 +354,38 @@ $magicWords = array( 'revisionday' => array( '1', 'روزنسخه', 'روز_نسخه', 'REVISIONDAY' ), 'revisionday2' => array( '1', 'روزنسخه۲', 'روز_نسخه۲', 'روز_نسخه_۲', 'REVISIONDAY2' ), 'revisionmonth' => array( '1', 'ماه‌نسخه', 'ماه_نسخه', 'REVISIONMONTH' ), + 'revisionmonth1' => array( '1', 'ماه‌نسخه۱', 'ماه_نسخه_۱', 'REVISIONMONTH1' ), 'revisionyear' => array( '1', 'سال‌نسخه', 'سال_نسخه', 'REVISIONYEAR' ), - 'revisiontimestamp' => array( '1', 'نشان‌زمان‌نسخه', 'نشان_زمان_نسخه', 'REVISIONTIMESTAMP' ), - 'revisionuser' => array( '1', 'کاربرنسخه', 'REVISIONUSER' ), + 'revisiontimestamp' => array( '1', 'زمان‌یونیسکی‌نسخه', 'زمان‌نسخه', 'زمان_یونیکسی_نسخه', 'زمان_نسخه', 'REVISIONTIMESTAMP' ), + 'revisionuser' => array( '1', 'کاربرنسخه', 'کاربر_نسخه', 'REVISIONUSER' ), 'plural' => array( '0', 'جمع:', 'PLURAL:' ), - 'fullurl' => array( '0', 'نشانی‌کامل:', 'FULLURL:' ), - 'fullurle' => array( '0', 'نشانی‌نشانی‌کامل:', 'FULLURLE:' ), - 'lcfirst' => array( '0', 'ابتداکوچک:', 'LCFIRST:' ), - 'ucfirst' => array( '0', 'ابتدابزرگ:', 'UCFIRST:' ), + 'fullurl' => array( '0', 'نشانی‌کامل:', 'نشانی_کامل:', 'FULLURL:' ), + 'fullurle' => array( '0', 'نشانی‌کامل‌کد:', 'نشانی_کامل_کد:', 'FULLURLE:' ), + 'lcfirst' => array( '0', 'ابتداکوچک:', 'ابتدا_کوچک:', 'LCFIRST:' ), + 'ucfirst' => array( '0', 'ابتدابزرگ:', 'ابتدا_بزرگ:', 'UCFIRST:' ), 'lc' => array( '0', 'ک:', 'LC:' ), 'uc' => array( '0', 'ب:', 'UC:' ), 'raw' => array( '0', 'خام:', 'RAW:' ), 'displaytitle' => array( '1', 'عنوان‌ظاهری', 'عنوان_ظاهری', 'DISPLAYTITLE' ), - 'rawsuffix' => array( '1', 'ع', 'R' ), + 'rawsuffix' => array( '1', 'ن', 'R' ), 'newsectionlink' => array( '1', '__بخش‌جدید__', '__NEWSECTIONLINK__' ), - 'nonewsectionlink' => array( '1', '__بی‌پیوندبخش__', '__NONEWSECTIONLINK__' ), + 'nonewsectionlink' => array( '1', '__بی‌پیوندبخش__', '__بی‌پیوند‌بخش‌جدید__', '__NONEWSECTIONLINK__' ), 'currentversion' => array( '1', 'نسخه‌کنونی', 'نسخه_کنونی', 'CURRENTVERSION' ), 'urlencode' => array( '0', 'کدنشانی:', 'URLENCODE:' ), 'anchorencode' => array( '0', 'کدلنگر:', 'ANCHORENCODE' ), - 'currenttimestamp' => array( '1', 'نشان‌زمان‌کنونی', 'نشان_زمان_کنونی', 'CURRENTTIMESTAMP' ), - 'localtimestamp' => array( '1', 'نشان‌زمان‌محلی', 'نشان_زمان_محلی', 'LOCALTIMESTAMP' ), + 'currenttimestamp' => array( '1', 'زمان‌یونیکسی', 'زمان_یونیکسی', 'CURRENTTIMESTAMP' ), + 'localtimestamp' => array( '1', 'زمان‌یونیکسی‌محلی', 'زمان_یونیکسی_محلی', 'LOCALTIMESTAMP' ), 'directionmark' => array( '1', 'علامت‌جهت', 'علامت_جهت', 'DIRECTIONMARK', 'DIRMARK' ), 'language' => array( '0', '#زبان:', '#LANGUAGE:' ), 'contentlanguage' => array( '1', 'زبان‌محتوا', 'زبان_محتوا', 'CONTENTLANGUAGE', 'CONTENTLANG' ), - 'pagesinnamespace' => array( '1', 'صفحه‌درفضای‌نام', 'صفحه_در_فضای_نام', 'PAGESINNAMESPACE:', 'PAGESINNS:' ), - 'numberofadmins' => array( '1', 'تعدادمدیران', 'تعداد_مدیران', 'NUMBEROFADMINS' ), + 'pagesinnamespace' => array( '1', 'صفحه‌درفضای‌نام:', 'صفحه_در_فضای_نام:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ), + 'numberofadmins' => array( '1', 'تعدادمدیران', 'NUMBEROFADMINS' ), 'formatnum' => array( '0', 'آرایش‌عدد', 'آرایش_عدد', 'FORMATNUM' ), 'padleft' => array( '0', 'لبه‌چپ', 'لبه_چپ', 'PADLEFT' ), 'padright' => array( '0', 'لبه‌راست', 'لبه_راست', 'PADRIGHT' ), 'special' => array( '0', 'ویژه', 'special' ), - 'defaultsort' => array( '1', 'ترتیب', 'ترتیب‌پیش‌فرض', 'ترتیب_پیش_فرض', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ), - 'filepath' => array( '0', 'مسیرپرونده:', 'مسیر_پرونده', 'FILEPATH:' ), + 'defaultsort' => array( '1', 'ترتیب:', 'ترتیب‌پیش‌فرض:', 'ترتیب_پیش_فرض:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ), + 'filepath' => array( '0', 'مسیرپرونده:', 'مسیر_پرونده:', 'FILEPATH:' ), 'tag' => array( '0', 'برچسب', 'tag' ), 'hiddencat' => array( '1', '__رده‌پنهان__', '__HIDDENCAT__' ), 'pagesincategory' => array( '1', 'صفحه‌دررده', 'صفحه_در_رده', 'PAGESINCATEGORY', 'PAGESINCAT' ), @@ -388,6 +396,9 @@ $magicWords = array( 'staticredirect' => array( '1', '__تغییرمسیرثابت__', '__STATICREDIRECT__' ), 'protectionlevel' => array( '1', 'سطح‌حغاطت', 'سطح_حفاظت', 'PROTECTIONLEVEL' ), 'formatdate' => array( '0', 'آرایش‌تاریخ', 'آرایش_تاریخ', 'formatdate', 'dateformat' ), + 'url_path' => array( '0', 'مسیر', 'PATH' ), + 'url_wiki' => array( '0', 'ویکی', 'WIKI' ), + 'url_query' => array( '0', 'دستور', 'QUERY' ), ); # Harakat are intentionally not included in the linkTrail. Their addition should @@ -405,53 +416,52 @@ $imageFiles = array( $messages = array( # User preference toggles 'tog-underline' => 'زیر پیوندها خط کشیده شود', -'tog-highlightbroken' => 'قالب‌بندی پیوندهای ناقص به این شکل (امکان دیگر: به این شکل؟).', -'tog-justify' => 'تمام‌چین‌کردن بندها', -'tog-hideminor' => 'نشان ندادن تغییرات جزئی در فهرست تغییرات اخیر', -'tog-hidepatrolled' => 'نهفتن ویرایش‌های گشت خورده در تغییرات اخیر', -'tog-newpageshidepatrolled' => 'نهفتن صفحه‌های نهگبانی شده از فهرست صفحه‌های تازه', -'tog-extendwatchlist' => 'گسترش فهرست پی‌گیری‌ها برای نشان‌دادن همهٔ تغییرات، و نه فقط موارد اخیر', -'tog-usenewrc' => 'استفاده از تغییرات اخیر گسترش یافته (نیازمند جاوااسکریپت)', +'tog-highlightbroken' => 'پیوندهای ناقص به این شکل قالب‌بندی شوند (امکان دیگر: به این شکل؟).', +'tog-justify' => 'بندها به صورت تمام‌چین نمایش یابند', +'tog-hideminor' => 'تغییرات جزئی از فهرست تغییرات اخیر پنهان شوند', +'tog-hidepatrolled' => 'ویرایش‌های گشت خورده از تغییرات اخیر پنهان شوند', +'tog-newpageshidepatrolled' => 'صفحه‌های نهگبانی شده از فهرست صفحه‌های تازه پنهان شوند', +'tog-extendwatchlist' => 'فهرست پی‌گیری‌ها گسترش داده شود تا همهٔ تغییرات را نشان دهد، و نه فقط موارد اخیر', +'tog-usenewrc' => 'از تغییرات اخیر گسترش یافته استفاده شود (نیازمند جاوااسکریپت)', 'tog-numberheadings' => 'شماره‌گذاری خودکار عناوین', -'tog-showtoolbar' => 'نمایش نوار ابزار جعبهٔ ویرایش', -'tog-editondblclick' => 'ویرایش صفحه‌ها با دوکلیک (جاوااسکریپت)', -'tog-editsection' => 'به کار انداختن ویرایش قسمت‌ها از طریق پیوندهای [ویرایش]', -'tog-editsectiononrightclick' => 'به کار انداختن ویرایش قسمت‌ها با کلیک راست
    روی عناوین قسمت‌ها (جاوااسکریپت)', -'tog-showtoc' => 'نمایش فهرست مندرجات
    (برای مقاله‌های با بیش از ۳ سرفصل)', -'tog-rememberpassword' => 'گذرواژه برای نشست‌های بعدی بماند', -'tog-editwidth' => 'افزایش پهنای جعبهٔ ویرایش تا حدی که تمام صفحه را پر کند', -'tog-watchcreations' => 'افزودن صفحه‌های ایجادشده توسط من به فهرست پی‌گیری‌ها.', -'tog-watchdefault' => 'افزودن صفحه‌هایی که ویرایش می‌کنم به فهرست پی‌گیری‌ها', -'tog-watchmoves' => 'افزودن صفحه‌هایی که منتقل می‌کنم به فهرست پی‌گیری‌ها', -'tog-watchdeletion' => 'افزودن صفحه‌هایی که حذف می‌کنم به فهرست پی‌گیری‌های من', -'tog-minordefault' => 'پیش‌فرض همهٔ ویرایش‌ها «جزئی» باشد', -'tog-previewontop' => 'نمایش پیش‌نمایش قبل از جعبهٔ ویرایش و نه پس از آن', -'tog-previewonfirst' => 'پیش‌نمایش هنگام اولین ویرایش', -'tog-nocache' => 'از کار انداختن حافظهٔ نهانی مرورگر', -'tog-enotifwatchlistpages' => 'اگر صفحه‌ای که پی‌گیری می‌کنم تغییر کرد به من پست الکترونیکی بفرست.', -'tog-enotifusertalkpages' => 'هنگامی که در صفحهٔ بحث کاربری‌ام تغییری صورت می‌گیرد به من نامه الکترونیکی بفرست', -'tog-enotifminoredits' => 'برای تغییرات جزئی در صفحه‌ها هم به من نامه الکترونیکی بفرست', -'tog-enotifrevealaddr' => 'نشانی پست الکترونیکی من را در نامه‌های اطلاع‌رسانی نمایش بده', -'tog-shownumberswatching' => 'نشان‌دادن شمار کاربران پی‌گیری‌کننده', +'tog-showtoolbar' => 'نوار ابزار جعبهٔ ویرایش نمایش یابد (نیازمند جاوااسکریپت)', +'tog-editondblclick' => 'ویرایش صفحه‌ها با دوکلیک (نیازمند جاوااسکریپت)', +'tog-editsection' => 'ویرایش بخش‌ها از طریق پیوندهای [ویرایش] فعال باشد', +'tog-editsectiononrightclick' => 'ویرایش بخش‌ها با کلیک راست روی عناوین قسمت‌ها فعال باشد (نیازمند جاوااسکریپت)', +'tog-showtoc' => 'فهرست مندرجات نمایش یابد (برای صفحه‌های دارای بیش از ۳ عنوان)', +'tog-rememberpassword' => 'گذرواژه من را (تا حداکثر $1 {{PLURAL:$1|روز|روز}}) در این مرورگر به خاطر بسپار', +'tog-watchcreations' => 'صفحه‌هایی که می‌سازم به فهرست پی‌گیری‌هایم افزوده شود', +'tog-watchdefault' => 'صفحه‌هایی که ویرایش می‌کنم به فهرست پی‌گیری‌هایم افزوده شود', +'tog-watchmoves' => 'صفحه‌هایی که منتقل می‌کنم به فهرست پی‌گیری‌هایم افزوده شود', +'tog-watchdeletion' => 'صفحه‌هایی که حذف می‌کنم به فهرست پی‌گیری‌هایم افزوده شود', +'tog-minordefault' => 'همهٔ ویرایش‌ها به طور پیش‌فرض به عنوان «جزئی» علامت بخورد', +'tog-previewontop' => 'پیش‌نمایش قبل از جعبهٔ ویرایش نمایش یابد', +'tog-previewonfirst' => 'پیش‌نمایش هنگام اولین ویرایش نمایش یابد', +'tog-nocache' => 'حافظهٔ نهانی مرورگر از کار انداخته شود', +'tog-enotifwatchlistpages' => 'اگر صفحه‌ای که پی‌گیری می‌کنم تغییر کرد به من نامه الکترونیکی فرستاده شود', +'tog-enotifusertalkpages' => 'هنگامی که در صفحهٔ بحث کاربری‌ام تغییری صورت می‌گیرد به من نامه الکترونیکی فرستاده شود', +'tog-enotifminoredits' => 'برای تغییرات جزئی در صفحه‌ها هم به من نامه الکترونیکی فرستاده شود', +'tog-enotifrevealaddr' => 'نشانی پست الکترونیکی من را در نامه‌های اطلاع‌رسانی نمایش یابد', +'tog-shownumberswatching' => 'شمار کاربران پی‌گیری‌کننده را نمایش یابد', 'tog-oldsig' => 'پیش‌نمایش امضای موجود:', -'tog-fancysig' => 'امضا را به صورت ویکی‌متن در نظر بگیر (بدون درج خودکار پیوند)', +'tog-fancysig' => 'امضا به صورت ویکی‌متن در نظر گرفته شود (بدون درج خودکار پیوند)', 'tog-externaleditor' => 'استفاده از ویرایشگر خارجی به‌طور پیش‌فرض (فقط برای کاربران پیشرفته، نیازمند تنظیمات ویژه در رایانه شما است. [http://www.mediawiki.org/wiki/Manual:External_editors اطلاعات بیشتر.])', 'tog-externaldiff' => 'استفاده از تفاوت‌گیر (diff) خارجی به‌طور پیش‌فرض (فقط برای کاربران پیشرفته، نیازمند تنظیمات ویژه در رایانه شما است. [http://www.mediawiki.org/wiki/Manual:External_editors اطلاعات بیشتر.])', -'tog-showjumplinks' => 'نمایش پیوندهای پرشی در فهرست مندرجات', -'tog-uselivepreview' => 'استفاده از پیش‌نمایش زنده (جاوااسکریپت) (آزمایشی)', -'tog-forceeditsummary' => 'هنگامی که خلاصهٔ ویرایش ننوشته‌ام به من اطلاع بده', -'tog-watchlisthideown' => 'نهفتن ویرایش‌های من در فهرست پی‌گیری‌ها', -'tog-watchlisthidebots' => 'نهفتن ویرایش‌های ربات‌ها در فهرست پی‌گیری‌ها', -'tog-watchlisthideminor' => 'نهفتن ویرایش‌های جزئی از فهرست پی‌گیری‌های من', -'tog-watchlisthideliu' => 'ویرایش‌های کاربران وارد شده به سامانه را از فهرست پی‌گیری‌های من پنهان کن', -'tog-watchlisthideanons' => 'ویرایش‌های کاربران ناشناس را از فهرست پی‌گیری‌های من پنهان کن', -'tog-watchlisthidepatrolled' => 'نهفتن ویرایش‌های گشت‌خورده از فهرست پیگیری', -'tog-nolangconversion' => 'غیرفعال کردن تبدیل زبان‌ها', -'tog-ccmeonemails' => 'رونوشت نامه‌های الکترونیکی که به دیگران ارسال می‌کنم به خودم بفرست', +'tog-showjumplinks' => 'پیوندهای دسترسی‌پذیری «پرش به» فعال باشد', +'tog-uselivepreview' => 'استفاده از پیش‌نمایش زنده (نیازمند جاوااسکریپت) (آزمایشی)', +'tog-forceeditsummary' => 'هنگامی که خلاصهٔ ویرایش ننوشته‌ام به من اطلاع داده شود', +'tog-watchlisthideown' => 'ویرایش‌های خودم در فهرست پی‌گیری‌ها پنهان شود', +'tog-watchlisthidebots' => 'ویرایش‌های ربات‌ها در فهرست پی‌گیری‌ها پنهان شود', +'tog-watchlisthideminor' => 'ویرایش‌های جزئی در فهرست پی‌گیری‌ها پنهان شود', +'tog-watchlisthideliu' => 'ویرایش‌های کاربران وارد شده به سامانه در فهرست پی‌گیری‌ها پنهان شود', +'tog-watchlisthideanons' => 'ویرایش‌های کاربران ناشناس در فهرست پی‌گیری‌های من پنهان شود', +'tog-watchlisthidepatrolled' => 'ویرایش‌های گشت‌خورده در فهرست پی‌گیری‌ها پنهان شود', +'tog-nolangconversion' => 'تبدیل گویش‌ها غیرفعال شود', +'tog-ccmeonemails' => 'رونوشت نامه‌های الکترونیکی که به دیگران ارسال می‌کنم به خودم فرستاده شود', 'tog-diffonly' => 'محتوای صفحه، زیر تفاوت نمایش داده نشود', -'tog-showhiddencats' => 'رده‌های پنهان را نمایش بده', -'tog-noconvertlink' => 'غیرفعال کردن تبدیل پیوند', -'tog-norollbackdiff' => 'بعد از واگردانی تفاوت را نشان نده', +'tog-showhiddencats' => 'رده‌های پنهان را نمایش یابد', +'tog-noconvertlink' => 'تبدیل عنوان پیوند غیرفعال شود', +'tog-norollbackdiff' => 'بعد از واگردانی تفاوت نشان داده نشود', 'underline-always' => 'همیشه', 'underline-never' => 'هرگز', @@ -521,7 +531,7 @@ $messages = array( 'category_header' => 'مقاله‌های ردهٔ «$1»', 'subcategories' => 'زیررده‌ها', 'category-media-header' => 'پرونده‌های ردهٔ «$1»', -'category-empty' => 'این رده شامل هیچ صفحه یا پرونده‌ای نمی‌شود.', +'category-empty' => "''این رده در حال حاضر حاوی هیچ صفحه یا پرونده‌ای نیست.''", 'hidden-categories' => '{{PLURAL:$1|ردهٔ پنهان|رده‌های پنهان}}', 'hidden-category-category' => 'رده‌های پنهان', 'category-subcat-count' => '{{PLURAL:$2|این رده تنها حاوی زیرردهٔ زیر است.|{{PLURAL:$1|این زیررده|این $1 زیررده}} در این رده قرار {{PLURAL:$1|دارد|دارند}}؛ این رده در کل حاوی $2 زیررده است.}}', @@ -563,35 +573,25 @@ $messages = array( 'qbpageinfo' => 'بافت', 'qbmyoptions' => 'صفحه‌های من', 'qbspecialpages' => 'صفحه‌های ویژه', -'faq' => 'سوال‌های متداول', -'faqpage' => 'Project:سوال‌های متداول', +'faq' => 'پرسش‌های متداول', +'faqpage' => 'Project:پرسش‌های متداول', # Vector skin -'vector-action-addsection' => 'افزودن عنوان', -'vector-action-delete' => 'حذف', -'vector-action-move' => 'انتقال', -'vector-action-protect' => 'محافظت', -'vector-action-undelete' => 'احیا', -'vector-action-unprotect' => 'به در آوردن از محافظت', -'vector-namespace-category' => 'رده', -'vector-namespace-help' => 'صفحهٔ راهنما', -'vector-namespace-image' => 'پرونده', -'vector-namespace-main' => 'صفحه', -'vector-namespace-media' => 'صفحهٔ رسانه', -'vector-namespace-mediawiki' => 'پیغام', -'vector-namespace-project' => 'صفحهٔ پروژه', -'vector-namespace-special' => 'صفحهٔ ویژه', -'vector-namespace-talk' => 'بحث', -'vector-namespace-template' => 'الگو', -'vector-namespace-user' => 'صفحهٔ کاربر', -'vector-view-create' => 'ایجاد', -'vector-view-edit' => 'ویرایش', -'vector-view-history' => 'نمایش تاریخچه', -'vector-view-view' => 'خواندن', -'vector-view-viewsource' => 'نمایش مبدأ', -'actions' => 'عملکردها', -'namespaces' => 'فضاهای نام', -'variants' => 'گویش‌ها', +'vector-action-addsection' => 'افزودن عنوان', +'vector-action-delete' => 'حذف', +'vector-action-move' => 'انتقال', +'vector-action-protect' => 'محافظت', +'vector-action-undelete' => 'احیا', +'vector-action-unprotect' => 'به در آوردن از محافظت', +'vector-simplesearch-preference' => 'فعال کردن پیشنهادهای جستجوی پیشرفته (فقط در پوسته برداری)', +'vector-view-create' => 'ایجاد', +'vector-view-edit' => 'ویرایش', +'vector-view-history' => 'نمایش تاریخچه', +'vector-view-view' => 'خواندن', +'vector-view-viewsource' => 'نمایش مبدأ', +'actions' => 'عملکردها', +'namespaces' => 'فضاهای نام', +'variants' => 'گویش‌ها', 'errorpagetitle' => 'خطا', 'returnto' => 'بازگشت به $1.', @@ -603,7 +603,7 @@ $messages = array( 'searcharticle' => 'برو', 'history' => 'تاریخچهٔ صفحه', 'history_short' => 'تاریخچه', -'updatedmarker' => 'به‌روزشده از پس از آخرین باری که سرزده‌ام.', +'updatedmarker' => 'به‌روزشده از پس از آخرین باری که سرزده‌ام', 'info_short' => 'اطلاعات', 'printableversion' => 'نسخهٔ قابل چاپ', 'permalink' => 'پیوند پایدار', @@ -641,17 +641,20 @@ $messages = array( 'otherlanguages' => 'زبان‌های دیگر', 'redirectedfrom' => '(تغییر مسیر از $1)', 'redirectpagesub' => 'صفحهٔ تغییر مسیر', -'lastmodifiedat' => 'این صفحه آخرین بار در $2، $1 تغییر یافته‌است.', -'viewcount' => 'این صفحه {{PLURAL:$1|یک|$1}} بار دیده شده است.', +'lastmodifiedat' => 'این صفحه آخرین بار در $1 ساعت $2 تغییر یافته‌است.', +'viewcount' => 'از این صفحه {{PLURAL:$1|یک|$1}} بار بازدید شده است.', 'protectedpage' => 'صفحهٔ محافظت‌شده', 'jumpto' => 'پرش به:', 'jumptonavigation' => 'ناوبری', 'jumptosearch' => 'جستجو', -'view-pool-error' => 'شوربختانه کارسازها در حال حاضر دچار بار اضافی هستند. +'view-pool-error' => 'متاسفانه سرورها در حال حاضر دچار بار اضافی هستند. تعداد زیادی از کاربران تلاش می‌کنند که این صفحه را ببینند. لطفاً قبل از تلاش دوباره برای دیدن این صفحه مدتی صبر کنید. $1', +'pool-timeout' => 'اتمام مهلت انتظار برای قفل', +'pool-queuefull' => 'صف مخزن پر است', +'pool-errorunknown' => 'خطای ناشناخته', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'دربارهٔ {{SITENAME}}', @@ -674,18 +677,19 @@ $1', 'privacypage' => 'Project:سیاست_حفظ_اسرار', 'badaccess' => 'خطای دسترسی', -'badaccess-group0' => 'شما اجازهٔ اجرای عمل درخواسته را ندارید.', +'badaccess-group0' => 'شما اجازهٔ اجرای عملی که درخواست کرده‌اید را ندارید.', 'badaccess-groups' => 'عملی که درخواست کرده‌اید منحصر به کاربران {{PLURAL:$2|این گروه|این گروه‌ها}} است: $1.', 'versionrequired' => 'نسخهٔ $1 از نرم‌افزار مدیاویکی لازم است', -'versionrequiredtext' => 'برای دیدن این صفحه به نسخهٔ $1 از نرم‌افزار مدیاویکی نیاز دارید. برای اطلاع از نسخهٔ نرم‌افزار نصب شده در این ویکی به [[Special:Version|این صفحه]] مراجعه کنید.', +'versionrequiredtext' => 'برای دیدن این صفحه به نسخهٔ $1 از نرم‌افزار مدیاویکی نیاز دارید. +به [[Special:Version|این صفحه]] مراجعه کنید.', 'ok' => 'تأیید', 'retrievedfrom' => 'برگرفته از «$1»', 'youhavenewmessages' => '$1 دارید ($2).', 'newmessageslink' => 'پیام‌های جدید', 'newmessagesdifflink' => 'آخرین تغییر', -'youhavenewmessagesmulti' => 'پیغامهای جدیدی در $1 دارید.', +'youhavenewmessagesmulti' => 'پیام‌های جدیدی در $1 دارید.', 'editsection' => 'ویرایش', 'editold' => 'ویرایش', 'viewsourceold' => 'نمایش مبدأ', @@ -697,14 +701,14 @@ $1', 'hidetoc' => 'نهفتن', 'thisisdeleted' => 'نمایش یا احیای $1؟', 'viewdeleted' => 'نمایش $1؟', -'restorelink' => '{{PLURAL:$1|$1|$1}} ویرایش حذف‌شده', +'restorelink' => '{{PLURAL:$1|یک|$1}} ویرایش حذف‌شده', 'feedlinks' => 'خبرخوان:', -'feed-invalid' => 'اشکال در آبونمان خبرخوان', -'feed-unavailable' => 'خبرخوان‌ها قابل استفاده نیستند', -'site-rss-feed' => 'خبرخوان RSS برای $1', -'site-atom-feed' => 'خبرخوان Atom برای $1', -'page-rss-feed' => 'خبرخوان RSS برای «$1»', -'page-atom-feed' => 'خبرخوان Atom برای «$1»', +'feed-invalid' => 'نوع خوراک خبرخوان مجاز نیست.', +'feed-unavailable' => 'خوراک‌های خبرخوان در دسترس نیستند', +'site-rss-feed' => 'خوراک آراس‌اس برای $1', +'site-atom-feed' => 'خوراک اتم برای $1', +'page-rss-feed' => 'خوراک آراس‌اس برای «$1»', +'page-atom-feed' => 'خوراک اتم برای «$1»', 'feed-atom' => 'اتم', 'feed-rss' => 'آراس‌اس', 'red-link-title' => '$1 (صفحه وجود ندارد)', @@ -718,7 +722,7 @@ $1', 'nstab-image' => 'پرونده', 'nstab-mediawiki' => 'پیغام', 'nstab-template' => 'الگو', -'nstab-help' => 'راهنما', +'nstab-help' => 'صفحهٔ راهنما', 'nstab-category' => 'رده', # Main script and global functions @@ -727,31 +731,32 @@ $1', شما ممکن است نشانی اینترنتی را اشتباه وارد کرده باشید یا یک پیوند نادرست را دنبال کرده باشید. هم‌چنین ممکن است ایرادی در {{SITENAME}} وجود داشته باشد.', 'nosuchspecialpage' => 'چنین صفحهٔ ویژه‌ای وجود ندارد', -'nospecialpagetext' => 'شما صفحهٔ ویژه‌ٔ غیر مجازی را درخواست کرده‌اید. +'nospecialpagetext' => 'شما صفحهٔ ویژهٔ غیر مجازی را درخواست کرده‌اید. فهرستی از صفحه‌های ویژهٔ مجاز در [[Special:SpecialPages|{{int:specialpages}}]] وجود دارد.', # General errors 'error' => 'خطا', 'databaseerror' => 'خطای پایگاه داده', -'dberrortext' => 'اشکالی در دستور فرستاده شده به پایگاه داده رخ داد. +'dberrortext' => 'اشکال نحوی در درخواست فرستاده شده به پایگاه داده رخ داد. دلیل این مشکل می‌تواند ایرادی در نرم‌افزار باشد. -این آخرین دستوری بود که برای پایگاه داده فرستاده شد: -
    $1
    -این دستور از درون عملگر «$2» فرستاده شد. +آخرین درخواست که برای پایگاه داده فرستاد شد این بود: +
    $1
    +این درخواست از درون عملگر «$2» فرستاده شد. پایگاه داده این خطا را بازگرداند: -
    $3: $4
    ', -'dberrortextcl' => 'اشکالی در دستور فرستاده شده به پایگاه داده رخ داد. -آخرین دستوری که برای پایگاه داده فرستاد شد این بود: -
    $1
    -این دستور از درون عملگر «$2» فرستاده شد. +
    $3: $4
    ', +'dberrortextcl' => 'اشکال نحوی در درخواست فرستاده شده به پایگاه داده رخ داد. +آخرین درخواست که برای پایگاه داده فرستاد شد این بود: +
    $1
    +این درخواست از درون عملگر «$2» فرستاده شد. پایگاه داده این خطا را بازگرداند: -
    $3: $4
    ', -'laggedslavemode' => 'هشدار: صفحه ممکن است به‌روزرسانی‌های اخیر را شامل نگردد.', +
    $3: $4
    ', +'laggedslavemode' => "'''هشدار:''' صفحه ممکن است به‌روزرسانی‌های اخیر را شامل نگردد.", 'readonly' => 'پایگاه داده قفل شد', -'enterlockreason' => 'دلیلی برای قفل کردن ذکر کنید، و تقریبی از زمانی که قفل برداشته خواهد شد در آن بیاورید', -'readonlytext' => 'پایگاه داده در حال حاضر در برابر تغییرات و ایجاد مداخل قفل شده است. احتمالاً علت آن بهینه‌سازی و رسیدگی‌های معمول است که بعد از انجام آن وضع به حالت عادی باز خواهد گشت. توضیح مدیری که آن را قفل کرده است بدین شرح است: -

    $1', +'enterlockreason' => 'دلیلی برای قفل کردن ذکر کنید، که حاوی تقریبی از زمانی باشد که قفل برداشته خواهد شد', +'readonlytext' => 'پایگاه داده در حال حاضر در برابر تغییرات و ایجاد مداخل قفل شده است. احتمالاً علت آن بهینه‌سازی و رسیدگی‌های معمول است که بعد از انجام آن وضع به حالت عادی باز خواهد گشت. + +مدیری که آن را قفل کرده است این توضیح را ارائه کرده: $1', 'missing-article' => 'پایگاه داده متن صفحه‌ای به نام «$1» $2 را که باید می‌یافت، نیافت. این مشکل معمولاً بر اثر ادامه دادن پیوندهای تاریخ‌گذشتهٔ تفاوت یا تاریخچهٔ صفحه‌هایی رخ می‌دهد که حذف شده‌اند. @@ -760,15 +765,15 @@ $1', لطفاً این مسئله را، با ذکر URL، به یکی از مدیران گزارش کنید.', 'missingarticle-rev' => '(نسخهٔ شماره: $1)', 'missingarticle-diff' => '(تفاوت: $1، $2)', -'readonly_lag' => 'پایگاه داده به طور خودکار قفل شده‌است تا نسخه‌های پشتیبان با نسخهٔ اصلی هماهنگ شوند.', +'readonly_lag' => 'پایگاه داده به طور خودکار قفل شده‌است تا نسخه‌های پشتیبان با نسخهٔ اصلی هماهنگ شوند', 'internalerror' => 'خطای داخلی', 'internalerror_info' => 'خطای داخلی: $1', 'fileappenderrorread' => 'در طی الحاق امکان خواندن «$1» وجود نداشت.', -'fileappenderror' => 'نمی‌توان «$1» را به «$2» الحاق کرد.', -'filecopyerror' => 'نتوانستم از پروندهٔ «$1» روی «$2» نسخه‌برداری کنم.', -'filerenameerror' => 'نتوانستم پروندهٔ «$1» را به «$2» تغییر نام دهم.', -'filedeleteerror' => 'نتوانستم پروندهٔ «$1» را حذف کنم', -'directorycreateerror' => 'امکان ایجاد پوشه $1 وجود ندارد.', +'fileappenderror' => 'نشد «$1» را به «$2» الحاق کرد.', +'filecopyerror' => 'نشد از پروندهٔ «$1» روی «$2» نسخه‌برداری شود.', +'filerenameerror' => 'نشد پروندهٔ «$1» به «$2» تغییر نام یابد.', +'filedeleteerror' => 'نشد پروندهٔ «$1» حذف شود.', +'directorycreateerror' => 'امکان ایجاد پوشه $1 وجود نداشت.', 'filenotfound' => 'پروندهٔ «$1» یافت نشد.', 'fileexistserror' => 'امکان نوشتن روی پرونده $1 وجود ندارد: پرونده از قبل وجود دارد.', 'unexpected' => 'مقدار غیرمنتظره: «$1»=«$2».', @@ -777,11 +782,13 @@ $1', 'cannotdelete' => 'امکان حذف صفحه یا تصویر «$1» وجود ندارد. ممکن است قبلاً فرد دیگری آن را حذف کرده باشد.', 'badtitle' => 'عنوان بد', -'badtitletext' => 'عنوان درخواستی نامعتبر، خالی، یا عنوانی بین زبانی یا بین‌ویکی‌ای با پیوند نادرست بود.', -'perfcached' => 'داده‌های زیر از حافظهٔ موقت فراخوانی شده‌اند و ممکن است کاملاً به‌روز نباشند:', -'perfcachedts' => 'داده‌های زیر از حافظهٔ موقت فراخوانی شده‌اند و آخرین به‌روزرسانی $1 است', -'querypage-no-updates' => 'امکان به روز رسانی این صفحه فعلاً غیرفعال شده‌است.', -'wrong_wfQuery_params' => 'پارامترهای wfQuery() نادرست است
    +'badtitletext' => 'عنوان درخواستی نامعتبر، خالی، یا عنوانی بین زبانی یا بین‌ویکی‌ای با پیوند نادرست بود. +ممکن است حاوی یک یا چند نویسه باشد که در عنوان‌ها نمی‌توانند استفاده شوند.', +'perfcached' => 'داده‌های زیر از حافظهٔ موقت فراخوانی شده‌اند و ممکن است کاملاً به‌روز نباشند.', +'perfcachedts' => 'داده‌های زیر از حافظهٔ موقت فراخوانی شده‌اند و آخرین بار در $1 به‌روزرسانی شده است.', +'querypage-no-updates' => 'امکان به‌روزرسانی این صفحه فعلاً غیرفعال شده‌است. +اطلاعات این صفحه مکن است به‌روز نباشد.', +'wrong_wfQuery_params' => 'پارامترهای wfQuery()‎ نادرست است
    تابع: $1
    پرس‌وجو: $2', 'viewsource' => 'نمایش مبدأ', @@ -790,39 +797,41 @@ $1', 'actionthrottledtext' => 'به منظور جلوگیری از هرزنگاری، شما اجازه ندارید که چنین عملی را بیش از چند بار در یک مدت زمان کوتاه انجام بدهید. لطفاً پس از چند دقیقه دوباره تلاش کنید.', 'protectedpagetext' => 'این صفحه برای جلوگیری از ویرایش قفل شده‌است.', -'viewsourcetext' => 'می‌توانید متن مبدأ این صفحه را مشاهده کنید یا از آن نسخه بردارید', +'viewsourcetext' => 'می‌توانید متن مبدأ این صفحه را مشاهده کنید یا از آن نسخه بردارید:', 'protectedinterface' => 'این صفحه ارائه‌دهندهٔ متنی برای رابط کاربر این نرم‌افزار است و به منظور پیشگیری از خرابکاری قفل شده‌است.', 'editinginterface' => "'''هشدار:''' شما صفحه‌ای را ویرایش می‌کنید که شامل متنی است که در رابط کاربر این نرم‌افزار به کار رفته‌است. تغییر این صفحه منجر به تغییر ظاهر رابط کاربر این نرم‌افزار برای دیگر کاربران خواهد شد. برای ترجمه، لطفاً از [http://translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net]، پروژهٔ ترجمهٔ مدیاویکی، استفاده کنید.", -'sqlhidden' => '(دستور SQL پنهان شده)', +'sqlhidden' => '(دستور اس‌کیوال پنهان شده)', 'cascadeprotected' => 'این صفحه در مقابل ویرایش محافظت شده‌است برای اینکه در {{PLURAL:$1|صفحهٔ|صفحه‌های}} محافظت‌شدهٔ زیر که گزینهٔ «آبشاری» در {{PLURAL:$1|آن|آنها}} انتخاب شده‌است، قرار گرفته‌است: $2', 'namespaceprotected' => "شما اجازهٔ ویرایش صفحه‌های فضای نام '''$1''' را ندارید.", 'customcssjsprotected' => 'شما اجازهٔ ویرایش این صفحه را ندارید، چرا که حاوی تنظیم‌های شخصی یک کاربر دیگر است.', -'ns-specialprotected' => 'صفحه‌های فضای نام {{ns:special}} غیر قابل ویرایش هستند.', -'titleprotected' => "از ایجاد صفحه‌ای با این عنوان توسط [[User:$1|$1]] جلوگیری شده‌است. دلیل ذکر شده از این قرار است: ''$2''.", +'ns-specialprotected' => 'صفحه‌های ویژه غیر قابل ویرایش هستند.', +'titleprotected' => "از ایجاد صفحه‌ای با این عنوان توسط [[User:$1|$1]] جلوگیری شده‌است. +دلیل ذکر شده از این قرار است: ''$2''.", # Virus scanner -'virus-badscanner' => "تنظیمات بد: پویشگر ویروس ناشناخته: ''$1''", +'virus-badscanner' => "پیکربندی بد: پویشگر ویروس ناشناخته: ''$1''", 'virus-scanfailed' => 'پویش ناموفق (کد $1)', 'virus-unknownscanner' => 'ضدویروس ناشناخته:', # Login and logout pages -'logouttext' => "'''اکنون از سامانه خارج شدید.''' +'logouttext' => "'''اینک از سامانه خارج شدید.''' -شما می‌توانید به استفادهٔ گمنام از {{SITENAME}} ادامه دهید، یا می‌توانید با همین کاربر یا کاربر دیگری [[Special:UserLogin|به سامانه وارد شوید]]. +شما می‌توانید به استفادهٔ گمنام از {{SITENAME}} ادامه دهید، یا می‌توانید با همین حساب یا حساب دیگری [[Special:UserLogin|به سامانه وارد شوید]]. توجه کنید که تا زمانی که میانگیر مرورگرتان را پاک کنید، بعضی صفحه‌ها ممکن است به شکلی نمایش یابند که انگار هنوز وارد سامانه هستید.", 'welcomecreation' => '==$1، خوش آمدید!== حساب شما ایجاد شد. -فراموش نکنید که [[Special:Preferences|ترجیحات {{SITENAME}}]] خود را تنظیم کنید.', -'yourname' => 'نام کاربری شما', -'yourpassword' => 'گذرواژهٔ شما', +فراموش نکنید که [[Special:Preferences|ترجیحات {{SITENAME}}]] را برای خود را تغییر دهید.', +'yourname' => 'نام کاربری', +'yourpassword' => 'گذرواژهٔ', 'yourpasswordagain' => 'گذرواژه را دوباره وارد کنید', -'remembermypassword' => 'گذرواژه را به یاد بسپار.', -'yourdomainname' => 'دامنهٔ شما', -'externaldberror' => 'خطایی در ارتباط با پایگاه داده رخ داده‌است یا این که شما اجازه به روز رسانی حساب بیرونی خود را ندارید.', +'remembermypassword' => 'گذرواژه را (تا حداکثر $1 {{PLURAL:$1|روز|روز}}) در این رایانه به خاطر بسپار', +'securelogin-stick-https' => 'پس از ورود به سامانه به HTTPS متصل بمان', +'yourdomainname' => 'دامنهٔ شما:', +'externaldberror' => 'خطایی در ارتباط با پایگاه داده رخ داده‌است یا این که شما اجازه به‌روزرسانی حساب خارجی خود را ندارید.', 'login' => 'ورود به سامانه', 'nav-login-createaccount' => 'ورود به سامانه / ایجاد حساب کاربری', 'loginprompt' => 'برای ورود به {{SITENAME}} باید کوکی‌ها را فعال کنید.', @@ -831,12 +840,13 @@ $2', 'logout' => 'خروج از سامانه', 'userlogout' => 'خروج از سامانه', 'notloggedin' => 'به سامانه وارد نشده‌اید', -'nologin' => "نام کاربری ندارید؟ '''$1'''.", +'nologin' => 'نام کاربری ندارید؟ $1.', 'nologinlink' => 'یک حساب جدید بسازید', 'createaccount' => 'ایجاد حساب کاربری', 'gotaccount' => "حساب کاربری دارید؟ '''$1'''.", 'gotaccountlink' => 'وارد شوید', 'createaccountmail' => 'با پست الکترونیکی', +'createaccountreason' => 'دلیل:', 'badretype' => 'گذرواژه‌هایی که وارد کرده‌اید یکسان نیستند.', 'userexists' => 'نام کاربری‌ای که وارد کردید قبلاً استفاده شده‌است. لطفاً یک نام دیگر انتخاب کنید.', @@ -851,20 +861,26 @@ $2', لطفاً کوکی‌ها را به کار بیندازید و دوباره تلاش کنید.', 'noname' => 'شما نام کاربری معتبری مشخص نکرده‌اید.', 'loginsuccesstitle' => 'ورود موفقیت‌آمیز به سامانه', -'loginsuccess' => 'شما اکنون با نام «$1» به {{SITENAME}} وارد شده‌اید.', +'loginsuccess' => "'''شما اکنون با نام «$1» به {{SITENAME}} وارد شده‌اید.'''", 'nosuchuser' => 'کاربری با نام «$1» وجود ندارد. نام کاربری به بزرگی و کوچکی حروف حساس است. املای نام را بررسی کنید، یا [[Special:UserLogin/signup|یک حساب کاربری جدید بسازید]].', -'nosuchusershort' => "هیچ کاربری با نام ''$1'' وجود ندارد. املایتان را وارسی کنید.", +'nosuchusershort' => "هیچ کاربری با نام ''$1'' وجود ندارد. +املایتان را وارسی کنید.", 'nouserspecified' => 'باید یک نام کاربری مشخص کنید.', 'login-userblocked' => 'این کاربر بسته شده‌است. ورود به سامانه مجاز نیست.', -'wrongpassword' => 'گذرواژه‌ای که وارد کردید نادرست است. لطفاً دوباره تلاش کنید.', -'wrongpasswordempty' => 'گذرواژه‌ای که وارد کرده‌اید، خالی است. خواهشمندیم دوباره تلاش کنید.', +'wrongpassword' => 'گذرواژه‌ای که وارد کردید نادرست است. +لطفاً دوباره تلاش کنید.', +'wrongpasswordempty' => 'گذرواژه‌ای که وارد کرده‌اید، خالی است. +لطفاً دوباره تلاش کنید.', 'passwordtooshort' => 'گذرواژه باید دست کم {{PLURAL:$1|$1 حرف|$1 حرف}} داشته باشد.', 'password-name-match' => 'گذرواژهٔ شما باید با نام کاربری شما تفاوت داشته باشد.', -'mailmypassword' => 'گذرواژهٔ جدید فرستاده شود', +'password-login-forbidden' => 'استفاده از این نام کاربری و گذرواژه ممنوع است.', +'mailmypassword' => 'گذرواژهٔ جدید با پست الکترونیکی فرستاده شود', 'passwordremindertitle' => 'یادآور گذرواژهٔ {{SITENAME}}', -'passwordremindertext' => 'یک نفر (احتمالاً خود شما، با نشانی آی‌پی $1) گذرواژهٔ جدیدی برای حساب کاربری‌ شما در {{SITENAME}} درخواست کرده‌است ($4). یک گذرواژهٔ موقت برای کاربر «$2» ساخته شده و برابر با «$3» قرار داده شده‌است. اگر هدف شما همین بوده‌است، شما باید اکنون به سامانه وارد شوید و گذرواژهٔ جدیدی برگزینید. +'passwordremindertext' => 'یک نفر (احتمالاً خود شما، با نشانی آی‌پی $1) گذرواژهٔ جدیدی برای حساب کاربری‌ شما در {{SITENAME}} درخواست کرده‌است ($4). +ک گذرواژهٔ موقت برای کاربر «$2» ساخته شده و برابر با «$3» قرار داده شده‌است. +اگر هدف شما همین بوده‌است، شما باید اکنون به سامانه وارد شوید و گذرواژهٔ جدیدی برگزینید. گذرواژهٔ موقت شما ظرف {{PLURAL:$5|یک روز|$5 روز}} باطل می‌شود. اگر کس دیگری این درخواست را کرده‌است یا این که شما گذرواژهٔ پیشین خود را به یاد آورده‌اید و دیگر تمایل به تغییر آن ندارید، می‌توانید این پیغام را نادیده بگیرید و همان گذرواژهٔ پیشین را به کار برید.', @@ -873,44 +889,47 @@ $2', 'passwordsent' => 'یک گذرواژهٔ جدید به نشانی الکترونیکی ثبت شده برای کاربر «$1» فرستاده شد. لطفاً پس از دریافت آن دوباره به سامانه وارد شوید.', 'blocked-mailpassword' => 'نشانی آی‌پی شما از ویرایش بازداشته شده‌است و از این رو به منظور جلوگیری از سوءاستفاده اجازهٔ بهره‌گیری از قابلیت بازیافت گذرواژه را ندارد.', -'eauthentsent' => 'یک نامهٔ الکترونیکی برای تأیید نشانی پست الکترونیکی به نشانی مورنظر ارسال شد. قبل از اینکه نامهٔ دیگری قابل ارسال به این نشانی باشد، باید دستورهای که در آن نامه آمده است را جهت تأیید این مساله که این نشانی متعلق به شماست، اجرا کنید.', +'eauthentsent' => 'یک نامهٔ الکترونیکی برای تأیید نشانی پست الکترونیکی به نشانی مورنظر ارسال شد. +قبل از اینکه نامهٔ دیگری قابل ارسال به این نشانی باشد، باید دستورهای که در آن نامه آمده است را جهت تأیید این مساله که این نشانی متعلق به شماست، اجرا کنید.', 'throttled-mailpassword' => 'یک یادآور گذرواژه در $1 {{PLURAL:$1|ساعت|ساعت}} گذشته برای شما فرستاده شده‌است. برای جلوگیری از سوءاستفاده هر $1 ساعت تنها یک یادآوری فرستاده می‌شود.', -'mailerror' => 'خطا در فرستادن نامهٔ الکترونیکی : $1', +'mailerror' => 'خطا در فرستادن نامه: $1', 'acct_creation_throttle_hit' => 'بازدیدکنندگان این ویکی که از نشانی آی‌پی شما استفاده می‌کنند در روز گذشته {{PLURAL:$1|یک حساب کاربری|$1 حساب کاربری}} ساخته‌اند، که بیشترین تعداد مجاز در آن بازهٔ زمانی است. به همین خاطر، بازدیدکنندگانی که از این نشانی آی‌پی استفاده می‌کنند نمی‌توانند در حال حاضر حساب جدیدی بسازند.', 'emailauthenticated' => 'نشانی پست الکترونیکی شما در $2 ساعت $3 تصدیق شد.', -'emailnotauthenticated' => 'نشانی پست الکترونیکی شما هنوز تصدیق نشده است. هیچ نامهٔ الکترونیکی‌ای برای هر یک از ویژگی‌های زیر ارسال نخواهد شد.', +'emailnotauthenticated' => 'نشانی پست الکترونیکی شما هنوز تصدیق نشده است. +برای هیچ یک از ویژگی‌های زیر نامهٔ الکترونیکی ارسال نخواهد شد.', 'noemailprefs' => 'برای راه‌اندازی این قابلیت‌ها یک نشانی پست الکترونیکی مشخص کنید.', 'emailconfirmlink' => 'نشانی پست الکترونیکی خود را تأیید کنید', 'invalidemailaddress' => 'نشانی واردشدهٔ پست الکترونیک قابل‌قبول نیست، چرا که دارای ساختار نامعتبری است. لطفاً نشانی‌ای با ساختار صحیح وارد کنید و یا بخش مربوط را خالی بگذارید.', -'accountcreated' => 'حساب ایجاد شد.', +'accountcreated' => 'حساب ایجاد شد', 'accountcreatedtext' => 'حساب کاربری $1 ایجاد شده‌است.', 'createaccount-title' => 'ایجاد حساب کاربری در {{SITENAME}}', -'createaccount-text' => 'یک نفر برای $2 یک حساب کاربری در {{SITENAME}} ایجاد کرده‌است ($4). -گذرواژهٔ «$2« چنین است: $3 - +'createaccount-text' => 'یک نفر برای پست الکترونیک شما یک حساب کاربری در {{SITENAME}} با نام «$2» ایجاد کرده‌است ($4)، که گذرواژهٔ آن چنین است: $3 شما باید به سامانه وارد شوید تا گذرواژهٔ خود را تغییر بدهید. اگر این حساب اشتباهی ساخته شده است، این پیغام را نادیده بگیرید.', 'usernamehasherror' => 'نام کاربری نمی‌تواند شامل نویسه‌های درهم باشد', 'login-throttled' => 'شما به تازگی چندین بار برای ورود به سامانه تلاش کرده‌اید. -لطفاً پیش از آن که دوباره تلاش کنید، صبر کنید.', +لطفاً پیش از آن که دوباره تلاش کنید مدتی صبر کنید.', 'loginlanguagelabel' => 'زبان: $1', 'suspicious-userlogout' => 'درخواست شما برای خروج از سامانه رد شد زیرا به نظر می‌رسد که این درخواست توسط یک مرورگر معیوب یا پروکسی میانگیر ارسال شده باشد.', +# E-mail sending +'php-mail-error-unknown' => 'خطای ناشناخته در تابع mail()‎ پی‌اچ‌پی', + # Password reset dialog 'resetpass' => 'تغییر گذرواژه', 'resetpass_announce' => 'شما با کد موقتی ارسال شده وارد شده‌اید. برای انجام فرایند ورود به سامانه باید گذروازهٔ جدیدی وارد کنید:', 'resetpass_text' => '', 'resetpass_header' => 'تغییر گذرواژهٔ حساب کاربری', -'oldpassword' => 'گذرواژهٔ پیشین', +'oldpassword' => 'گذرواژهٔ پیشین:', 'newpassword' => 'گذرواژهٔ جدید:', 'retypenew' => 'گذرواژهٔ جدید را دوباره وارد کنید', 'resetpass_submit' => 'تنظیم گذرواژه و ورود به سامانه', -'resetpass_success' => 'گذرواژهٔ شما با موفقیت تغییر داده شد. +'resetpass_success' => 'گذرواژهٔ شما با موفقیت تغییر داده شد! در حال وارد کردن شما به سامانه...', 'resetpass_forbidden' => 'نمی‌توان گذرواژه‌ها را تغییر داد', 'resetpass-no-info' => 'برای دسترسی مستقیم به این صفحه شما باید به سامانه وارد شده باشید.', @@ -935,12 +954,12 @@ $2', 'math_tip' => 'فرمول ریاضی (LaTeX)', 'nowiki_sample' => 'اینجا متن قالب‌بندی‌نشده وارد شود', 'nowiki_tip' => 'نادیده گرفتن قالب‌بندی ویکی', -'image_sample' => 'مثال.jpg', +'image_sample' => 'Example.jpg', 'image_tip' => 'تصویر داخل متن', -'media_sample' => 'مثال.ogg', -'media_tip' => 'پیوند پروندهٔ رسانه', +'media_sample' => 'Example.ogg', +'media_tip' => 'پیوند پرونده', 'sig_tip' => 'امضای شما و برچسب زمان', -'hr_tip' => 'خط افقی (در کاربرد آن امساک کنید)', +'hr_tip' => 'خط افقی (از آن کم استفاده کنید)', # Edit pages 'summary' => 'خلاصه:', @@ -954,12 +973,15 @@ $2', 'showdiff' => 'نمایش تغییرات', 'anoneditwarning' => "'''هشدار:''' شما به سامانه وارد نشده‌اید. نشانی آی‌پی شما در تاریخچهٔ ویرایش این صفحه ثبت خواهد شد.", -'missingsummary' => "'''یادآوری:''' شما خلاصهٔ ویرایش ننوشته‌اید. اگر دوباره ''ذخیره'' را کلیک کنید ویرایشتان بدون خلاصه ذخیره خواهد شد.", +'anonpreviewwarning' => "''شما به سامانه وارد نشده‌اید. ذخیره کردن باعث می‌شود که نشانی آی‌پی شما در تاریخچهٔ این صفحه ثبت گردد.''", +'missingsummary' => "'''یادآوری:''' شما خلاصهٔ ویرایش ننوشته‌اید. +اگر دوباره دکمهٔ «{{int:savearticle}}» را فشار دهید ویرایش شما بدون آن ذخیره خواهد شد.", 'missingcommenttext' => 'لطفاً توضیحی در زیر بیفزایید.', -'missingcommentheader' => "یادآوری: '''شما موضوع/عنوان این یادداشت را مشخص نکرده‌اید.''' اگر دوباره دکمهٔ ذخیره را فشار دهید ویرایش شما بدون آن ذخیره خواهد شد.", +'missingcommentheader' => "'''یادآوری:''' شما موضوع/عنوان این یادداشت را مشخص نکرده‌اید. +اگر دوباره دکمهٔ «{{int:savearticle}}» را فشار دهید ویرایش شما بدون آن ذخیره خواهد شد.", 'summary-preview' => 'پیش‌نمایش خلاصه:', 'subject-preview' => 'پیش‌نمایش موضوع/عنوان:', -'blockedtitle' => 'کاربر بسته شد.', +'blockedtitle' => 'کاربر بسته شد', 'blockedtext' => "'''دسترسی نام کاربری یا نشانی آی‌پی شما بسته شده است.''' این کار توسط $1 انجام شده‌است. @@ -1005,7 +1027,7 @@ $2', ممکن است در مدتی که شما صفحه را مشاهده می‌کردید این بخش جا به جا یا حذف شده باشد.', 'loginreqtitle' => 'ورود به سامانه لازم است', 'loginreqlink' => 'به سامانه وارد شوید', -'loginreqpagetext' => 'برای دیدن صفحه‌های دیگر باید $1 کنید.', +'loginreqpagetext' => 'برای دیدن صفحه‌های دیگر باید $1.', 'accmailtitle' => 'گذرواژه فرستاده شد.', 'accmailtext' => "یک گذرواژهٔ تصادفی ساخته شده برای [[User talk:$1|$1]] برای $2 ارسال شد. @@ -1025,62 +1047,76 @@ $2', 'noarticletext-nopermission' => 'در حال حاضر این صفحه متنی ندارد. شما می‌توانید در دیگر صفحه‌ها [[Special:Search/{{PAGENAME}}|دنبال عنوان این صفحه بگردید]]، یا [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} سیاهه‌های مرتبط را جستجو کنید].', -'userpage-userdoesnotexist' => 'حساب کاربر «$1» ثبت نشده است. اطمینان حاصلی کنید که می‌خواهید این صفحه را ایجاد یا ویرایش کنید.', +'userpage-userdoesnotexist' => 'حساب کاربر «$1» ثبت نشده است. +اطمینان حاصلی کنید که می‌خواهید این صفحه را ایجاد یا ویرایش کنید.', 'userpage-userdoesnotexist-view' => 'حساب کاربری «$1» ثبت نشده‌است.', 'blocked-notice-logextract' => 'دسترسی این کاربر در حال حاضر بسته است. آخرین مورد سیاهه قطع دسترسی در زیر آمده‌است:', -'clearyourcache' => "'''نکته:''' پس از ذخیره‌سازی ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را خالی کنید. '''موزیلا / فایرفاکس / Safari:''' کلید '''Shift''' را نگه‌دارید و روی دکمهٔ '''Reload''' کلیک کنید، یا کلید‌های '''Ctrl-Shift-R''' را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های '''Cmd-Shift-R''')؛ '''اینترنت اکسپلورر:''' کلید '''Ctrl''' نگه‌دارید و روی دکمهٔ '''Refresh''' کلیک‌ کنید، یا کلید‌های '''Ctrl-F5''' را با هم فشار دهید؛ '''Konqueror:''' روی دکمهٔ '''Reload''' کلیک کنید و یا کلید '''F5''' را فشار دهید؛ '''اُپرا:''' کاربران اُپرا ممکن است لازم باشد که بطور کامل حافظهٔ نهانی مرورگر را در منوی ''Tools→Preferences'' خالی کنند.", +'clearyourcache' => "'''نکته: پس از ذخیره‌سازی ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را خالی کنید.''' +'''موزیلا / فایرفاکس / سافاری:''' کلید ''Shift'' را نگه‌دارید و روی دکمهٔ ''Reload'' کلیک کنید، یا کلید‌های ''Ctrl-F5'' یا ''Ctrl-R'' را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ''Cmd-R'')؛ +'''کانکوئرر:''' روی دکمهٔ ''Reload'' کلیک کنید و یا کلید ''F5'' را فشار دهید؛ +'''اپرا:''' حافظهٔ نهانی مرورگر را از طریق منوی ''Tools → Preferences'' خالی کنید؛ +'''اینترنت اکسپلورر:''' کلید ''Ctrl'' را نگه‌دارید و روی دکمهٔ ''Refresh'' کلیک‌ کنید، یا کلید‌های ''Ctrl-F5'' را با هم فشار دهید.", 'usercssyoucanpreview' => "'''نکته:''' قبل از این که فایل CSS یا JS خود را ذخیره کنید، با استفاده از دکمه '''{{int:showpreview}}''' آن را آزمایش کنید.", 'userjsyoucanpreview' => "'''نکته:''' قبل از این که فایل CSS یا JS خود را ذخیره کنید، با استفاده از دکمه '''{{int:showpreview}}''' آن را آزمایش کنید.", -'usercsspreview' => "'''فراموش نکنید که سی‌اس‌اس کاربریتان فقط پیش‌نمایش یافته‌است و هنوز ذخیره نشده‌است!'''", -'userjspreview' => "'''فراموش مکنید که شما فقط دارید جاوااسکریپت کاربریتان را امتحان می‌کنید/پیش‌نمایشش را می‌بینید. هنوز ذخیره نشده‌است!'''", +'usercsspreview' => "'''فراموش مکنید که شما فقط دارید پیش‌نمایش سی‌اس‌اس کاربری‌تان را می‌بینید.''' +'''این سی‌اس‌اس هنوز ذخیره نشده‌است!'''", +'userjspreview' => "'''به یاد داشته باشید که شما فقط دارید جاوااسکریپت کاربری‌تان را امتحان می‌کنید/پیش‌نمایش آن را می‌بینید.''' +'''این جاوااسکریپت هنوز ذخیره نشده‌است!'''", +'sitecsspreview' => "'''به یاد داشته باشید که شما فقط مشاهده‌گر پیش‌نمایش این سی‌اس‌اس هستید.''' +'''این سی‌اس‌اس هنوز ذخیره نشده ‌است!'''", +'sitejspreview' => "'''به یاد داشته باشید که شما فقط مشاهده‌گر پیش‌نمایش این جاوااسکریپت هستید.''' +'''این جاوااسکریپت هنوز ذخیره نشده ‌است!'''", 'userinvalidcssjstitle' => "'''هشدار:''' پوسته‌ای به نام «$1» وجود ندارد. -به یاد داشته باشید که صفحه‌های شخصی ‎.css و ‎.js باید عنوانی با حروف کوچک داشته باشند؛ نمونه: {{ns:user}}:فو/monobook.css در مقابل {{ns:user}}:فو/Monobook.css.", +به یاد داشته باشید که صفحه‌های شخصی ‎.css و ‎.js باید عنوانی با حروف کوچک داشته باشند؛ نمونه: {{ns:user}}:فو/vector.css در مقابل {{ns:user}}:فو/Vector.css.", 'updated' => '(به‌روز شد)', 'note' => "'''نکته:'''", -'previewnote' => "'''توجه کنید که این فقط پیش‌نمایش است، و ذخیره نشده است!'''", -'previewconflict' => 'این پیش‌نمایش منعکس‌کنندهٔ متن ناحیهٔ ویرایش متن بالایی است، -به شکلی که اگر بخواهید متن را ذخیره کنید نشان داده خواهد شد.', +'previewnote' => "'''به یاد داشته باشید که این فقط پیش‌نمایش است.''' +تغییرات شما هنوز ذخیره نشده است!", +'previewconflict' => 'این پیش‌نمایش منعکس‌کنندهٔ متن ناحیهٔ ویرایش متن بالایی است، به شکلی که اگر متن را ذخیره کنید نمایش خواهد یافت.', 'session_fail_preview' => "'''شرمنده! به دلیل از دست رفتن اطلاعات نشست کاربری، نمی‌توانیم ویرایش شما را پردازش کنیم.''' لطفاً دوباره سعی کنید. -در صورتی که باز هم با همین پیام مواجه شدید، از سامانه [[Special:UserLogout|خارج شوید]] و مجدداً وارد شوید.", +در صورتی که باز هم با همین پیام مواجه شدید، از سامانه [[Special:UserLogout|خارج شوید]] و دوباره وارد شوید.", 'session_fail_preview_html' => "'''متاسفانه امکان ثبت ویرایش شما به خاطر از دست رفتن اطلاعات نشست کاربری وجود ندارد.''' ''با توجه به این که در {{SITENAME}} امکان درج اچ‌تی‌ام‌ال خام فعال است، پیش‌نمایش صفحه پنهان شده تا امکان حملات مبتنی بر جاوااسکریپت وجود نداشته باشد.'' '''اگر مطمئن هستید که این پیش‌نمایش یک ویرایش مجاز است، آن را تکرار کنید.''' اگر تکرار پیش‌نمایش نتیجه نداد، از سامانه [[Special:UserLogout|خارج شوید]] و دوباره وارد شوید.", -'token_suffix_mismatch' => "'''ویرایش شما ذخیره نشد، زیرا مرورگر شما نویسه‌های نقطه‌گذاری را از هم پاشیده‌است. -ویرایش شما ذخیره نشد تا از خراب شدن متن صفحه جلوگیری شود. -گاهی این اشکال زمانی پیش می‌آید که شما از یک برنامه تحت وب حدواسط (web-based proxy) استفاده کنید.'''", +'token_suffix_mismatch' => "'''ویرایش شما ذخیره نشد، زیرا مرورگر شما نویسه‌های نقطه‌گذاری را از هم پاشیده‌است.''' +ویرایش شما مردود شد تا از خراب شدن متن صفحه جلوگیری شود. +گاهی این اشکال زمانی پیش می‌آید که شما از یک پروکسی تحت وب استفاده کنید.", 'editing' => 'در حال ویرایش $1', 'editingsection' => 'در حال ویرایش $1 (بخش)', 'editingcomment' => 'در حال ویرایش $1 (بخش جدید)', 'editconflict' => 'تعارض ویرایشی: $1', -'explainconflict' => 'از وقتی شما ویرایش این صفحه را آغاز کرده‌اید شخص دیگری آن را تغییر داده است. +'explainconflict' => "از وقتی شما ویرایش این صفحه را آغاز کرده‌اید شخص دیگری آن را تغییر داده است. ناحیهٔ متنی بالایی شامل متن صفحه به شکل فعلی آن است. تغییرات شما در ناحیهٔ متنی پایینی نشان داده شده است. شما باید تغییراتتان را با متن فعلی ترکیب کنید. -وقتی «ذخیرهٔ صفحه» را فشار دهید، فقط متن ناحیهٔ متنی بالایی ذخیره خواهد شد.', +وقتی دکمهٔ «{{int:savearticle}}» را فشار دهید '''فقط''' متن ناحیهٔ متنی بالایی ذخیره خواهد شد.", 'yourtext' => 'متن شما', -'storedversion' => 'نسخهٔ ضبط‌شده', -'nonunicodebrowser' => "'''هشدار: مرورگر شما با استانداردهای یونیکد سازگار نیست.''' کاراکترهای غیر ASCII به صورت اعداد در مبنای شانزده به شما نشان داده می‌شوند.", +'storedversion' => 'نسخهٔ ذخیره شده', +'nonunicodebrowser' => "'''هشدار: مرورگر شما با استانداردهای یونیکد سازگار نیست.''' +راه حلی به کار گرفته شده تا شما بتوانید صفحه‌ها را با امنیت ویرایش کنید: کاراکترهای غیر ASCII به صورت کدهایی در مبنای شانزده به شما نشان داده می‌شوند.", 'editingold' => "'''هشدار: شما در حال ویرایش نسخه‌ای قدیمی از این صفحه هستید.''' چنان‌چه صفحه را ذخیره کنید، هر تغییری که پس از این نسخه انجام شده‌است از بین خواهد رفت.", 'yourdiff' => 'تفاوت‌ها', -'copyrightwarning' => "لطفاً توجه داشته باشید که فرض می‌شود کلیهٔ مشارکت‌های شما با {{SITENAME}} تحت «$2» منتشر می‌شوند (برای جزئیات بیشتر به $1 مراجعه کنید). اگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش شده و به دلخواه توزیع شود، اینجا نفرستیدشان.
    -همینطور شما دارید به ما قول می‌دهید که خودتان این را نوشته‌اید، یا آن را از یک منبع آزاد با مالکیت عمومی یا مشابه آن برداشته‌اید. '''کارهای دارای حق انحصاری تکثیر (copyright) را بی‌اجازه نفرستید!'''", -'copyrightwarning2' => "لطفاً توجه داشته باشید که فرض می‌شود کلیهٔ مشارکت‌های شما با {{SITENAME}} تحت «اجازه‌نامهٔ مستندات آزاد گنو» منتشر می‌شوند (برای جزئیات بیشتر به $1 مراجعه کنید). اگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش شده و به دلخواه توزیع شود، اینجا نفرستیدشان.
    -همینطور شما دارید به ما قول می‌دهید که خودتان این را نوشته‌اید، یا آن را از یک منبع آزاد با مالکیت عمومی یا مشابه آن برداشته‌اید. '''کارهای دارای حق انحصاری تکثیر (copyright) را بی‌اجازه نفرستید!'''", -'longpagewarning' => "'''هشدار''': طول این صفحه $1 کیلوبایت است؛ -بعضی مرورگرها ممکن است با ویرایش صفحه‌های نزدیک به ۳۲ کیلوبایت یا طولانی‌تر از آن مشکل داشته باشند. -لطفاً تقسیم این صفحه به قسمت‌های کوچکتر را مد نظر داشته باشید.", -'longpageerror' => "'''خطا: متنی که ارسال کرده‌اید $1 کیلوبایت طول دارد. این مقدار از مقدار بیشینهٔ $2 کیلوبایت بیشتر است. نمی‌توان ذخیره‌اش کرد.'''", -'readonlywarning' => "'''هشدار: پایگاه داده برای نگهداری قفل شده است، به همین خاطر نمی‌توانید ویرایش‌هایتان را همین الآن ذخیره کنید. -اگر می‌خواهید متن را در یک پروندهٔ متنی ببرید و بچسبانید و برای آینده ذخیره‌اش کنید. - -مدیری که پایگاه داده را قفل کرد این توضیح را ارائه کرد: $1'''", -'protectedpagewarning' => "'''هشدار: این صفحه قفل شده است تا فقط کاربران با امتیاز مدیر (یا بالاتر) بتوانند ویرایشش کنند.''' +'copyrightwarning' => "لطفاً توجه داشته باشید که فرض می‌شود کلیهٔ مشارکت‌های شما با {{SITENAME}} تحت «$2» منتشر می‌شوند (برای جزئیات بیشتر به $1 مراجعه کنید). +اگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش شده و به دلخواه توزیع شود، اینجا نفرستیدشان.
    +همچنین شما دارید به ما قول می‌دهید که خودتان این را نوشته‌اید، یا آن را از یک منبع آزاد با مالکیت عمومی یا مشابه آن برداشته‌اید. +'''کارهای دارای حق تکثیر (copyright) را بی‌اجازه نفرستید!'''", +'copyrightwarning2' => "لطفاً توجه داشته باشید که فرض می‌شود کلیهٔ مشارکت‌های شما با {{SITENAME}} ممکن است توسط دیگر مشارکت‌کنندگان ویرایش شوند، تغییر یابند یا حذف شوند. +اگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش شود، اینجا نفرستیدشان.
    +همچنین شما دارید به ما قول می‌دهید که خودتان این را نوشته‌اید، یا آن را از یک منبع آزاد با مالکیت عمومی یا مشابه آن برداشته‌اید (برای جزئیات بیشتر به $1 مراجعه کنید). + '''کارهای دارای حق تکثیر (copyright) را بی‌اجازه نفرستید!'''", +'longpageerror' => "'''خطا: متنی که ارسال کرده‌اید $1 کیلوبایت طول دارد. این مقدار از مقدار بیشینهٔ $2 کیلوبایت بیشتر است.''' +نمی‌توان آن را ذخیره کرد.", +'readonlywarning' => "'''هشدار: پایگاه داده برای نگهداری قفل شده است، به همین خاطر نمی‌توانید ویرایش‌هایتان را همین الآن ذخیره کنید.''' +اگر می‌خواهید متن را در یک پروندهٔ متنی کپی کنید و برای آینده ذخیره‌اش کنید. + +مدیری که آن را قفل کرده است این توضیح را ارائه کرده: $1", +'protectedpagewarning' => "'''هشدار: این صفحه قفل شده است تا فقط کاربران با امتیاز مدیر بتوانند ویرایشش کنند.''' آخرین موارد سیاهه در زیر آمده است:", 'semiprotectedpagewarning' => "'''توجه:''' این صفحه قفل شده‌است تا تنها کاربران ثبت‌نام‌کرده قادر به ویرایش آن‌ باشند. آخرین موارد سیاهه در زیر آمده‌است:", @@ -1089,63 +1125,63 @@ $2', ٱحرین موارد سیاهه در زیر آمده است:", 'templatesused' => '{{PLURAL:$1|الگوی|الگوهای}} استفاده شده در این صفحه:', 'templatesusedpreview' => '{{PLURAL:$1|الگوی|الگوهای}} استفاده شده در این پیش‌نمایش:', -'templatesusedsection' => '{{PLURAL:$1|الگوی|الگوهای}} استفاده‌شده در این بخش:', +'templatesusedsection' => '{{PLURAL:$1|الگوی|الگوهای}} استفاده شده در این بخش:', 'template-protected' => '(حفاظت‌شده)', -'template-semiprotected' => '(نیمه حفاظت‌شده)', +'template-semiprotected' => '(نیمه‌حفاظت‌شده)', 'hiddencategories' => 'این صفحه در {{PLURAL:$1|یک ردهٔ پنهان|$1 ردهٔ پنهان}} قرار دارد:', 'edittools' => '', -'nocreatetitle' => 'ایجاد صفحه محدود شده‌است.', -'nocreatetext' => 'این وبگاه قابلیت ایجاد صفحه‌های جدید را محدود کرده‌است. +'nocreatetitle' => 'ایجاد صفحه محدود شده‌است', +'nocreatetext' => '{{SITENAME}} قابلیت ایجاد صفحه‌های جدید را محدود کرده‌است. می‌توانید بازگردید و صفحه‌ای موجود را ویرایش کنید یا اینکه [[Special:UserLogin|به سامانه وارد شوید یا حساب کاربری ایجاد کنید]].', -'nocreate-loggedin' => 'شما اجازهٔ ایجاد صفحه‌های جدید ندارید.', +'nocreate-loggedin' => 'شما اجازه ندارد صفحه‌های جدید بسازید.', 'sectioneditnotsupported-title' => 'ویرایش بخش‌ها پشتیبانی نمی‌شود', -'sectioneditnotsupported-text' => 'این صفحه از ویرایش بخش‌ها پشتیبانی نمی‌کند', +'sectioneditnotsupported-text' => 'این صفحه از ویرایش بخش‌ها پشتیبانی نمی‌کند.', 'permissionserrors' => 'خطای سطح دسترسی', 'permissionserrorstext' => 'شما اجازهٔ انجام این کار را به {{PLURAL:$1|دلیل|دلایل}} زیر ندارید:', -'permissionserrorstext-withaction' => 'شما اجازهٔ $2 را به {{PLURAL:$1|دلیل|دلایل}} رو به رو ندارید:', -'recreate-moveddeleted-warn' => "'''هشدار: شما در حال ایجاد صفحه‌ای هستید که قبلاً حذف شده بود.''' +'permissionserrorstext-withaction' => 'شما اجازهٔ $2 را به {{PLURAL:$1|دلیل|دلایل}} زیر ندارید:', +'recreate-moveddeleted-warn' => "'''هشدار: شما در حال ایجاد صفحه‌ای هستید که قبلاً حذف شده است.''' در نظر داشته باشید که آیا ادامهٔ ویرایش این صفحه کار درستی است یا نه. -در ادامه سیاههٔ حذف و انتقال این صفحه برای راحتی نمایش داده شده‌است:", +برای راحتی، سیاههٔ حذف و انتقال برای این صفحه در زیر آمده است:", 'moveddeleted-notice' => 'این صفحه حذف شده‌است. -در ادامه سیاههٔ حذف و انتقال این صفحه نمایش داده شده‌است.', +در زیر سیاههٔ حذف و انتقال این صفحه نمایش داده شده‌است.', 'log-fulllog' => 'مشاهدهٔ سیاههٔ کامل', 'edit-hook-aborted' => 'ویرایش توسط قلاب لغو شد. توضیحی در این مورد داده نشد.', -'edit-gone-missing' => 'امکان به روز کردن صفحه وجود ندارد. -به نظرمیرسد که صفحه حذف شده باشد.', +'edit-gone-missing' => 'امکان به‌روز کردن صفحه وجود ندارد. +به نظرمی‌رسد که صفحه حذف شده باشد.', 'edit-conflict' => 'تعارض ویرایشی.', 'edit-no-change' => 'ویرایش شما نادیده گرفته شد، زیرا تغییری در متن داده نشده بود.', 'edit-already-exists' => 'امکان ساختن صفحه جدید وجود ندارد. این صفحه از قبل وجود دارد.', # Parser/template warnings -'expensive-parserfunction-warning' => 'هشدار: این صفحه حاوی تعدادی زیادی فراخوانی دستورهای تجزیه‌گر است. +'expensive-parserfunction-warning' => "'''هشدار:''' این صفحه حاوی تعدادی زیادی فراخوانی دستورهای تجزیه‌گر است. -تعداد آن‌ها باید کمتر از $2 {{PLURAL:$2|فراخوانی|فراخوانی}} باشد، و اینک {{PLURAL:$1|$1 فراخوانی|$1 فراخوانی}} است.', -'expensive-parserfunction-category' => 'صفحه‌هایی که حاوی تعداد زیادی فراخوانی دستورهای تجزیه‌گر هستند', +تعداد آن‌ها باید کمتر از $2 {{PLURAL:$2|فراخوانی|فراخوانی}} باشد، و اینک {{PLURAL:$1|$1 فراخوانی|$1 فراخوانی}} است.", +'expensive-parserfunction-category' => 'صفحه‌هایی که حاوی تعداد زیادی فراخوانی سنگین دستورهای تجزیه‌گر هستند', 'post-expand-template-inclusion-warning' => 'هشدار: الگو بیش از اندازه بزرگ است. برخی الگوها ممکن است شامل نشوند.', 'post-expand-template-inclusion-category' => 'صفحه‌هایی که در آن‌ها تعداد الگوهای به کار رفته بیش از اندازه است', -'post-expand-template-argument-warning' => 'هشدار: این صفحه شامل دست کم یک پارامتر الگو است که بیش از اندازه بزرگ است. -این پارامترها نادیده گرفته شدند.', +'post-expand-template-argument-warning' => "'''هشدار:''' این صفحه شامل دست کم یک پارامتر الگو است که بیش از اندازه بزرگ است. +این پارامترها نادیده گرفته شدند.", 'post-expand-template-argument-category' => 'صفحه‌های دارای الگوهایی با پارامترهای نادیده گرفته شده', 'parser-template-loop-warning' => 'حلقه در الگو پیدا شد: [[$1]]', 'parser-template-recursion-depth-warning' => 'محدودیت عمق بازگشت الگو رد شد ($1)', -'language-converter-depth-warning' => 'تجاوز از محدودیت عمق مبدل زبانی ($1)', +'language-converter-depth-warning' => 'محدودیت عمق مبدل زبانی رد شد ($1)', # "Undo" feature 'undo-success' => 'این ویرایش را می‌توان خنثی کرد. لطفاً تفاوت زیر را بررسی کنید تا تأیید کنید که این چیزی است که می‌خواهید انجام دهید، سپس تغییرات زیر را ذخیره کنید تا خنثی‌سازی ویرایش را به پایان ببرید.', -'undo-failure' => 'به علت تعارض با ویرایش‌های میانی، این ویرایش را خنثی نشد.', +'undo-failure' => 'به علت تعارض با ویرایش‌های میانی، این ویرایش را نمی‌توان خنثی کرد.', 'undo-norev' => 'این ویرایش را نمی‌توان خنثی کرد چون وجود ندارد یا حذف شده‌است.', 'undo-summary' => 'خنثی‌سازی ویرایش $1 توسط [[Special:Contributions/$2|$2]] ([[User talk:$2|بحث]])', # Account creation failure -'cantcreateaccounttitle' => 'نمی‌توان حساب باز کرد.', +'cantcreateaccounttitle' => 'نمی‌توان حساب باز کرد', 'cantcreateaccount-text' => "امكان ساختن حساب کاربری از این این نشانی آی‌پی ('''$1''') توسط [[User:$3|$3]] سلب شده است. -دلیل ارائه شده چنین بوده است: $2", +دلیل ارائه شده توسط $3 چنین است: $2", # History pages 'viewpagelogs' => 'نمایش سیاهه‌های مربوط به این صفحه', @@ -1155,7 +1191,7 @@ $2', 'revisionasof' => 'نسخهٔ $1', 'revision-info' => 'ویرایش در تاریخ $1 توسط $2', 'previousrevision' => '→ نسخهٔ قدیمی‌تر', -'nextrevision' => 'نسخهٔ جدیدتر←', +'nextrevision' => 'نسخهٔ جدیدتر ←', 'currentrevisionlink' => 'نمایش نسخهٔ فعلی', 'cur' => 'فعلی', 'next' => 'بعدی', @@ -1175,12 +1211,13 @@ $2', 'history-feed-title' => 'تاریخچهٔ ویرایش‌ها', 'history-feed-description' => 'تاریخچهٔ ویرایشهای صفحه در ویکی', 'history-feed-item-nocomment' => '$1 در $2', -'history-feed-empty' => 'صفحهٔ درخواسته وجود ندارد. ممکن است که از ویکی حذف یا اینکه نامش تغییر داده شده باشد. -[[Special:Search|جستجوی]] صفحه‌های جدید مرتبطِ موجود در این ویکی را هم بیازمایید. شاید افاقه کرد.', +'history-feed-empty' => 'صفحهٔ درخواست شده وجود ندارد. +ممکن است که از ویکی حذف یا اینکه نامش تغییر داده شده باشد. +صفحه‌های جدید را برای موارد مرتبط در این ویکی [[Special:Search|جستجو کنید]].', # Revision deletion 'rev-deleted-comment' => '(خلاصه ویرایش حذف شد)', -'rev-deleted-user' => '(نام کاربری حذف شده‌است)', +'rev-deleted-user' => '(نام کاربری حذف شد)', 'rev-deleted-event' => '(مورد پاک شد)', 'rev-deleted-user-contribs' => '[نام کاربری یا نشانی آی‌پی حذف شده - ویرایش مخفی شده در مشارکت‌ها]', 'rev-deleted-text-permission' => "این ویرایش از این صفحه '''حذف شده‌است'''. @@ -1211,24 +1248,25 @@ $2', 'rev-delundel' => 'نمایش/نهفتن', 'rev-showdeleted' => 'نمایش', 'revisiondelete' => 'حذف/احیای نسخه‌ها', -'revdelete-nooldid-title' => 'هیچ نسخه‌ای انتخاب نشده‌است', -'revdelete-nooldid-text' => 'نسخه یا نسخه‌هایی از صفحهٔ مورد نظر را که می‌خواهید تحت تاثیر قرار بگیرند انتخاب نکرده‌اید.', +'revdelete-nooldid-title' => 'نسخه هدف غیرمجاز', +'revdelete-nooldid-text' => 'شما نسخه‌های هدف را برای انجام این عمل مشخص نکرده‌اید یا این نسخه‌ها وجود ندارند، یا این که شما می‌خواهید آخرین نسخه را پنهان کنید.', 'revdelete-nologtype-title' => 'نوع سیاهه مشخص نشده‌است', 'revdelete-nologtype-text' => 'شما هیچ نوع سیاهه‌ای را برای این کار مشخص نکردید.', 'revdelete-nologid-title' => 'مدخل غیر مجاز در سیاهه', -'revdelete-nologid-text' => 'شما یا یک رخداد در سیاههٔ هدف مشخص نکردید یا موردی را مشخص کردید که وجود ندارد.', +'revdelete-nologid-text' => 'شما یا رویدادی را در سیاههٔ هدف مشخص نکردید یا موردی را مشخص کردید که وجود ندارد.', 'revdelete-no-file' => 'پروندهٔ مشخص شده وجود ندارد.', 'revdelete-show-file-confirm' => 'آیا مطمئن هستید که می‌خواهید یک نسخهٔ حذف شده از پروندهٔ «$1» مورخ $2 ساعت $3 را ببینید؟', -'revdelete-show-file-submit' => 'بلی', -'revdelete-selected' => "'''{{PLURAL:$2|نسخهٔ|نسخه‌های}} انتخاب شده از '''$1:''''''", +'revdelete-show-file-submit' => 'بله', +'revdelete-selected' => "'''{{PLURAL:$2|نسخهٔ|نسخه‌های}} انتخاب شده از [[:$1]]:'''", 'logdelete-selected' => "'''{{PLURAL:$1|مورد|موارد}} انتخاب شده از سیاهه:'''", 'revdelete-text' => "'''نسخه‌ها و موارد حذف شده کماکان از طریق تاریخچهٔ صفحه و سیاهه‌ها قابل مشاهده هستند، اما بخش‌هایی از محتوای آن‌ها توسط عموم قابل مشاهده نخواهد بود.''' سایر مدیران {{SITENAME}} هنوز می‌توانند این محتوای پنهان را ببینند و از همین طریق موارد حذف شده را احیا کنند، مگر آن که محدودیت‌های دیگری اعمال گردد.", 'revdelete-confirm' => 'لطفاً تأیید کنید که می‌خواهید این کار را انجام دهید، عواقب آن را درک می‌کنید و این کار را طبق [[{{MediaWiki:Policy-url}}|سیاست‌ها]] انجام می‌دهید.', 'revdelete-suppress-text' => "فرونشانی باید '''تنها''' برای موارد زیر استفاده شود: +* اطلاعات به طور بالقوه افتراآمیز * اطلاعات نامناسب شخصی *: ''نشانی منزل، شماره تلفن، شماره تامین اجتماعی و غیره.''", -'revdelete-legend' => 'تنظیم محدودیت‌های نسخه:', +'revdelete-legend' => 'تنظیم محدودیت‌های پیدایی', 'revdelete-hide-text' => 'نهفتن متن نسخه', 'revdelete-hide-image' => 'نهفتن محتویات پرونده', 'revdelete-hide-name' => 'نهفتن عمل و هدف', @@ -1243,7 +1281,7 @@ $2', 'revdelete-log' => 'دلیل:', 'revdelete-submit' => 'اعمال بر {{PLURAL:$1|نسخهٔ|نسخه‌های}} انتخاب شده', 'revdelete-logentry' => 'تغییر پیدایی نسخه در [[$1]]', -'logdelete-logentry' => 'تغییر پیدایی مورد در [[$1]]', +'logdelete-logentry' => 'تغییر پیدایی رویداد در [[$1]]', 'revdelete-success' => "'''پیدایی نسخه با موفقیت به روز شد.'''", 'revdelete-failure' => "'''پیدایی نسخه‌ها قابل به روز کردن نیست:''' $1", @@ -1251,6 +1289,8 @@ $1", 'logdelete-failure' => "'''پیدایی سیاهه‌ها قابل تنظیم نیست:''' $1", 'revdel-restore' => 'تغییر پیدایی', +'revdel-restore-deleted' => 'نسخه‌های حذف شده', +'revdel-restore-visible' => 'نسخه‌های پیدا', 'pagehist' => 'تاریخچهٔ صفحه', 'deletedhist' => 'تاریخچهٔ حذف شده', 'revdelete-content' => 'مقدار', @@ -1261,21 +1301,22 @@ $1", 'revdelete-hid' => '$1 را پنهان کرد', 'revdelete-unhid' => '$1 را از حالت پنهان در آورد', 'revdelete-log-message' => '$1 برای $2 {{PLURAL:$2|نسخه|نسخه}}', -'logdelete-log-message' => '$1 برای $2 {{PLURAL:$2|رخداد|رخداد}}', +'logdelete-log-message' => '$1 برای $2 {{PLURAL:$2|رویداد|رویداد}}', 'revdelete-hide-current' => 'خطا در پنهان کردن مورد مورخ $2 ساعت $1: این نسخه، نسخهٔ اخیر می‌باشد و قابل پنهان کردن نیست.', 'revdelete-show-no-access' => 'خطا در پنهان کردن مورد مورخ $2 ساعت $1: این نسخه علامت «محدودیت» دارد و شما به آن دسترسی ندارید.', 'revdelete-modify-no-access' => 'خطا در پنهان کردن مورد مورخ $2 ساعت $1: این نسخه علامت «محدودیت» دارد و شما به آن دسترسی ندارید.', 'revdelete-modify-missing' => 'خطا در پنهان کردن مورد شمارهٔ $1: این نسخه در پایگاه داده وجود ندارد!', -'revdelete-no-change' => "'''هشدار:''' مورد مورخ $2 ساعت $1 از قبل تنظیمات پیدایی درخواست شده را دارا می‌باشد.", +'revdelete-no-change' => "'''هشدار:''' مورد مورخ $2 ساعت $1 از قبل تنظیمات پیدایی درخواست شده را دارا بود.", 'revdelete-concurrent-change' => 'خطا در پنهان کردن مورد مورخ $2 ساعت $1: به نظر می‌رسد که در مدتی که شما برای تغییر وضعیت آن تلاش می‌کردید وضعیت آن توسط فرد دیگری تغییر یافته است. لطفاً سیاهه‌ها را بررسی کنید.', 'revdelete-only-restricted' => 'خطا در پنهان کردن مورد مورخ $2 ساعت $1: شما نمی‌توانید موارد را از دید مدیران پنهان کنید مگر آن که یکی دیگر از گزینه‌های پنهان‌سازی را نیز انتخاب کنید.', 'revdelete-reason-dropdown' => '*دلایل متداول حذف ** نقض حق تکثیر -** اطلاعات فردی نامناسب', -'revdelete-otherreason' => 'دلایل دیگر/اضافی:', +** اطلاعات فردی نامناسب +** اطلاعات به طور بالقوه افتراآمیز', +'revdelete-otherreason' => 'دلیل دیگر/اضافی:', 'revdelete-reasonotherlist' => 'دلیل دیگر', -'revdelete-edit-reasonlist' => 'ویرایش فهرست دلایل', +'revdelete-edit-reasonlist' => 'ویرایش دلایل حذف', 'revdelete-offender' => 'نویسنده نسخه:', # Suppression log @@ -1285,20 +1326,18 @@ $1", # History merging 'mergehistory' => 'ادغام تاریخچه صفحه‌ها', -'mergehistory-header' => "این صفحه به شما این امکان را می‌دهد که نسخه‌های تاریخچهٔ یک مقاله را با یک مقاله دیگر ادغام کنید. -اطمینان حاصل کنید که این تغییر به توالی زمانی ویرایش‌ها لطمه نخواهد زد. - -'''دست کم نسخه فعلی صفحهٔ مبدأ باید باقی بماند.'''", +'mergehistory-header' => 'این صفحه به شما این امکان را می‌دهد که نسخه‌های تاریخچهٔ یک مقاله را با یک مقاله دیگر ادغام کنید. +اطمینان حاصل کنید که این تغییر به توالی زمانی ویرایش‌ها لطمه نخواهد زد.', 'mergehistory-box' => 'ادغام نسخه‌های دو صفحه:', 'mergehistory-from' => 'صفحهٔ مبدأ:', 'mergehistory-into' => 'صفحه مقصد:', -'mergehistory-list' => 'تاریخچه قابل ادغام', -'mergehistory-merge' => 'این نسخه‌های [[:$1]] قابل ادغام با [[:$2]] هستند. -از ستون دکمه‌های رادیویی استفاده کنید تا نسخه‌هایی که تا قبل از یک زمان مشخص ایجاد شده‌اند را انتخاب کنید.. -توجه کنید که کلیک روی پیوندها باعث پاک شدن تنظیماتی که تا آن لحظه اعمال کرده‌اید می‌شود.', +'mergehistory-list' => 'تاریخچهٔ قابل ادغام', +'mergehistory-merge' => 'نسخه‌های زیر از [[:$1]] قابل ادغام با [[:$2]] هستند. +از ستون دکمه‌های رادیویی استفاده کنید تا نسخه‌هایی که تا قبل از یک زمان مشخص ایجاد شده‌اند را انتخاب کنید. +توجه کنید که کلیک روی پیوندها باعث می‌شود ستون به حالت اولیه برگردد.', 'mergehistory-go' => 'نمایش تاریخچه قابل ادغام', 'mergehistory-submit' => 'ادغام نسخه‌ها', -'mergehistory-empty' => 'هیچ‌یک از نسخه‌ها قابل ادغام نیستند', +'mergehistory-empty' => 'هیچ‌یک از نسخه‌ها قابل ادغام نیستند.', 'mergehistory-success' => '$3 نسخه از [[:$1]] با موفقیت در [[:$2]] ادغام {{PLURAL:$3|شد|شدند}}.', 'mergehistory-fail' => 'ادغام تاریخچه ممکن نیست، لطفاً گزینه‌های صفحه و زمان را بازبینی کنید.', 'mergehistory-no-source' => 'صفحهٔ مبدأ $1 وجود ندارد.', @@ -1319,24 +1358,25 @@ $1", # Diffs 'history-title' => 'تاریخچه ویرایش‌های «$1»', 'difference' => '(تفاوت بین نسخه‌ها)', +'difference-multipage' => '(تفاوت بین صفحات)', 'lineno' => 'سطر $1:', 'compareselectedversions' => 'مقایسهٔ نسخه‌های انتخاب‌شده', 'showhideselectedversions' => 'نمایش/نهفتن نسخه‌های انتخاب شده', 'editundo' => 'خنثی‌سازی', -'diff-multi' => '({{PLURAL:$1||$1 }}ویرایش میانی نشان داده نشده‌است.)', +'diff-multi' => '({{PLURAL:$1|یک|$1}} ویرایش میانی توسط {{PLURAL:$2|یک|$2}} کاربر نشان داده نشده‌است)', +'diff-multi-manyusers' => '({{PLURAL:$1|یک|$1}} ویرایش میانی توسط بیش از {{PLURAL:$2|یک|$2}} کاربر نشان داده نشده‌است)', # Search results 'searchresults' => 'نتایج جستجو', 'searchresults-title' => 'نتایج جستجو برای «$1»', 'searchresulttext' => 'برای اطلاعات بیشتر دربارهٔ جستجوی {{SITENAME}}، به [[{{MediaWiki:Helppage}}|{{int:help}}]] مراجعه کنید.', -'searchsubtitle' => "شما '''[[:$1]]''' را جستید ([[Special:Prefixindex/$1|صفحه‌هایی که با «$1» شروع می‌شوند]]{{int:pipe-separator}} -[[Special:WhatLinksHere/$1|صفحه‌هایی که به «$1» پیوند دارند]])", +'searchsubtitle' => "شما '''[[:$1]]''' را جستجو کردید ([[Special:Prefixindex/$1|صفحه‌هایی که با «$1» شروع می‌شوند]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|صفحه‌هایی که به «$1» پیوند دارند]])", 'searchsubtitleinvalid' => 'برای پرس‌وجوی «$1»', 'toomanymatches' => 'تعداد موارد مطابق خیلی زیاد بود، لطفاً درخواست دیگری را امتحان کنید', -'titlematches' => 'عنوان مقاله تطبیق می‌کند', -'notitlematches' => 'عنوان هیچ مقاله‌ای نمی‌خورد', -'textmatches' => 'متن مقاله تطبیق می‌کند', -'notextmatches' => 'متن هیچ مقاله‌ای نمی‌خورد', +'titlematches' => 'تطبیق عنوان مقاله', +'notitlematches' => 'عنوان هیچ مقاله‌ای مطابقت ندارد', +'textmatches' => 'تطبیق متن مقاله', +'notextmatches' => 'متن هیچ مقاله‌ای مطابقت ندارد', 'prevn' => '{{PLURAL:$1|$1}}تای قبلی', 'nextn' => '{{PLURAL:$1|$1}}تای بعدی', 'prevn-title' => '$1 {{PLURAL:$1|نتیجهٔ|نتیجهٔ}} قبلی', @@ -1344,7 +1384,7 @@ $1", 'shown-title' => 'نمایش $1 {{PLURAL:$1|نتیجه|نتیجه}} در هر صفحه', 'viewprevnext' => 'نمایش ($1 {{int:pipe-separator}} $2) ($3).', 'searchmenu-legend' => 'گزینه‌های جستجو', -'searchmenu-exists' => "* صفحهٔ '''[[$1]]'''", +'searchmenu-exists' => "'''صفحه‌ای با عنوان \"[[:\$1]]\" در این ویکی وجود دارد.'''", 'searchmenu-new' => "'''صفحهٔ «[[:$1]]» را در این ویکی بسازید!'''", 'searchhelp-url' => 'Help:راهنما', 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|مرور صفحه‌های با این پیشوند]]', @@ -1359,12 +1399,13 @@ $1", 'searchprofile-everything-tooltip' => 'جستجوی تمام محتوا (شامل صفحه‌های بحث)', 'searchprofile-advanced-tooltip' => 'جستجو در فضاهای نام دلخواه', 'search-result-size' => '$1 ({{PLURAL:$2|یک کلمه|$2 کلمه}})', -'search-result-score' => 'ارتباط: $1%', +'search-result-category-size' => '{{PLURAL:$1|یک عضو|$1 عضو}} ({{PLURAL:$2|یک زیررده|$2 زیررده}}، {{PLURAL:$3|یک پرونده|$3 پرونده}})', +'search-result-score' => 'ارتباط: $1٪', 'search-redirect' => '(تغییر مسیر $1)', 'search-section' => '(بخش $1)', 'search-suggest' => 'آیا منظورتان این بود: $1', 'search-interwiki-caption' => 'پروژه‌های خواهر', -'search-interwiki-default' => '$1 :نتیجه', +'search-interwiki-default' => '$1 نتیجه:', 'search-interwiki-more' => '(بیشتر)', 'search-mwsuggest-enabled' => 'با پیشنهاد', 'search-mwsuggest-disabled' => 'هیچ پیشنهادی نیست', @@ -1373,8 +1414,8 @@ $1", 'searcheverything-enable' => 'جستجو در تمام فضاهای نام', 'searchrelated' => 'مرتبط', 'searchall' => 'همه', -'showingresults' => "نمایش {{PLURAL:$1|'''1''' نتیجه|'''$1''' نتیجه}} در پایین، آغاز از #'''$2'''.", -'showingresultsnum' => "نمایش '''$3''' {{PLURAL:$3|نتیجه|نتیجه}} در پایین، آغاز از #'''$2'''.", +'showingresults' => "نمایش حداکثر {{PLURAL:$1|'''۱''' نتیجه|'''$1''' نتیجه}} در پایین، آغاز از شماره '''$2'''.", +'showingresultsnum' => "نمایش حداکثر '''$3''' {{PLURAL:$3|نتیجه|نتیجه}} در پایین، آغاز از شماره '''$2'''.", 'showingresultsheader' => "{{PLURAL:$5|نتیجهٔ '''$1''' از '''$3'''|نتایج '''$1 تا $2''' از '''$3'''}} برای '''$4'''", 'nonefound' => "'''نکته''': تنها بعضی از فضاهای نام به طور پیش‌فرض جستجو می‌شوند. برای جستجوی تمام فضاهای نام (شامل صفحه‌های بحث، الگوها و غیره) به عبارت جستجوی خود پیشوند ''all:‎'' را بیفزایید، یا نام فضای نام دلخواه را به عنوان پیشوند استفاده کنید.", @@ -1388,10 +1429,12 @@ $1", 'powersearch-toggleall' => 'همه', 'powersearch-togglenone' => 'هیچ کدام', 'search-external' => 'جستجوی خارجی', -'searchdisabled' => 'با عرض شرمندگی، جستجوی کل متن موقتاً از کار انداخته شده است. می‌توانید از جستجوی Google در پایین استفاده کنید. نتایج حاصل از جستجو با این روش ممکن است به‌روز نباشند.', +'searchdisabled' => 'جستجو در {{SITENAME}} فعال نیست. +موقتاً می‌توانید از جستجوی Google استفاده کنید. +توجه کنید که نتایج حاصل از جستجو با آن روش ممکن است به‌روز نباشند.', # Quickbar -'qbsettings' => 'تنظیمات نوار سریع', +'qbsettings' => 'نوار سریع', 'qbsettings-none' => 'نباشد', 'qbsettings-fixedleft' => 'ثابت چپ', 'qbsettings-fixedright' => 'ثابت راست', @@ -1401,7 +1444,7 @@ $1", # Preferences page 'preferences' => 'ترجیحات', 'mypreferences' => 'ترجیحات من', -'prefs-edits' => 'تعداد ویرایش‌ها', +'prefs-edits' => 'تعداد ویرایش‌ها:', 'prefsnologin' => 'به سامانه وارد نشده‌اید', 'prefsnologintext' => 'برای تنظیم ترجیحات کاربر باید [{{fullurl:{{#Special:UserLogin}}|returnto=$1}} به سامانه وارد شوید].', 'changepassword' => 'تغییر گذرواژه', @@ -1417,23 +1460,24 @@ $1", 'prefs-watchlist-days-max' => 'حداکثر ۷ روز', 'prefs-watchlist-edits' => 'تعداد ویرایشهای نشان‌داده در فهرست پی‌گیری‌های گسترش‌یافته:', 'prefs-watchlist-edits-max' => 'حداکثر تعداد: ۱۰۰۰', -'prefs-watchlist-token' => 'نشانهٔ فهرست پی‌گیری:', +'prefs-watchlist-token' => 'رمز فهرست پی‌گیری:', 'prefs-misc' => 'تنظیمات متفرقه', 'prefs-resetpass' => 'تغییر گذرواژه', 'prefs-email' => 'گزینه‌های پست الکترونیک', 'prefs-rendering' => 'نمایش صفحه', -'saveprefs' => 'ذخیرهٔ ترجیحات', +'saveprefs' => 'ذخیره', 'resetprefs' => 'صفر کردن ترجیحات', -'restoreprefs' => 'باز گرداندن تمام تنظیمات پیش‌فرض', +'restoreprefs' => 'برگرداندن تمام تنظیمات پیش‌فرض', 'prefs-editing' => 'در حال ویرایش', 'prefs-edit-boxsize' => 'اندازهٔ پنجرهٔ ویرایش.', -'rows' => 'تعداد سطرها', -'columns' => 'تعداد ستون‌ها', -'searchresultshead' => 'تنظیمات نتیجهٔ جستجو', -'resultsperpage' => 'تعداد نتایج در هر صفحه', +'rows' => 'تعداد سطرها:', +'columns' => 'تعداد ستون‌ها:', +'searchresultshead' => 'جستجو', +'resultsperpage' => 'تعداد نتایج در هر صفحه:', 'contextlines' => 'تعداد سطرها در هر نتیجه', 'contextchars' => 'تعداد نویسه‌های اطراف در سطر', -'stub-threshold' => 'آستانهٔ ویرایش پیوندهای ناقص:', +'stub-threshold' => 'آستانهٔ ویرایش پیوندهای ناقص (بایت):', +'stub-threshold-disabled' => 'غیرفعال', 'recentchangesdays' => 'تعداد روزهای نمایش داده‌شده در تغییرات اخیر:', 'recentchangesdays-max' => '(حداکثر $1 {{PLURAL:$1|روز|روز}})', 'recentchangescount' => 'تعداد پیش‌فرض ویرایش‌های نمایش یافته:', @@ -1467,29 +1511,34 @@ $1", 'prefs-files' => 'پرونده‌ها', 'prefs-custom-css' => 'سی‌اس‌اس شخصی', 'prefs-custom-js' => 'جاوااسکریپت شخصی', -'prefs-reset-intro' => 'شما می‌توانید از این صفحه برای بازگرداندن تنظیمات خود به پیش‌فرض استفاده کنید. این کار بازگشت‌ناپذیر است.', +'prefs-common-css-js' => 'سی‌اس‌اس/جاوااسکریپت مشترک برای تمام پوسته‌ها:', +'prefs-reset-intro' => 'شما می‌توانید از این صفحه برای بازگرداندن تنظیمات خود به پیش‌فرض وب‌گاه استفاده کنید. +این کار بازگشت‌ناپذیر است.', 'prefs-emailconfirm-label' => 'تأیید پست الکترونیکی:', 'prefs-textboxsize' => 'اندازهٔ جعبهٔ ویرایش', -'youremail' => 'پست الکترونیکی شما:', +'youremail' => 'پست الکترونیکی:', 'username' => 'نام کاربری:', 'uid' => 'شمارهٔ کاربری:', -'prefs-memberingroups' => 'عضویت در {{PLURAL:$1|گروه|گروه‌ها}}:', +'prefs-memberingroups' => 'عضو این {{PLURAL:$1|گروه|گروه‌ها}}:', 'prefs-registration' => 'زمان ثبت‌نام:', 'yourrealname' => 'نام واقعی:', 'yourlanguage' => 'زبان:', 'yourvariant' => 'گویش:', -'yournick' => 'امضا:', +'yournick' => 'امضای حدید:', 'prefs-help-signature' => 'نظرهای نوشته شده در صفحهٔ بحث باید با «~~~~» امضا شوند؛ این علامت به طور خودکار به امضای شما و مهر تاریخ تبدیل خواهد شد.', -'badsig' => 'امضای خام غیرمجاز؛ لطفاً برچسب‌های HTML را بررسی کنید.', +'badsig' => 'امضای خام غیرمجاز. +لطفاً برچسب‌های اچ‌تی‌ام‌ال را بررسی کنید.', 'badsiglength' => 'امضای شما بیش از اندازه طولانی است. امضا باید کمتر از $1 {{PLURAL:$1|نویسه|نویسه}} طول داشته باشد.', 'yourgender' => 'جنسیت:', 'gender-unknown' => 'مشخص نشده', 'gender-male' => 'مذکر', 'gender-female' => 'مونث', -'prefs-help-gender' => 'اختیاری: به منظور خطاب گرفتن با جنسیت صحیح توسط نرم‌افزار به کار می‌رود. این اطلاعات عمومی خواهد بود.', +'prefs-help-gender' => 'اختیاری: به منظور خطاب گرفتن با جنسیت صحیح توسط نرم‌افزار به کار می‌رود. +این اطلاعات عمومی خواهد بود.', 'email' => 'پست الکترونیکی', -'prefs-help-realname' => '*نام واقعی (اختیاری): اگر تصمیم به ذکر آن بگیرید هنگام ارجاع به آثارتان و انتساب آنها به شما از نام واقعی‌تان استفاده خواهد شد.', +'prefs-help-realname' => 'نام واقعی اختیاری است +اگر تصمیم بگیرید آن را وارد کنید، هنگام ارجاع به آثارتان و انتساب آنها به شما از نام واقعی‌تان استفاده خواهد شد.', 'prefs-help-email' => '* نشانی پست الکترونیکی اختیاری است اما ارسال یک گذرواژه جدید در صورتی که گذرواژه خود را فراموش کردید ممکن می‌سازد. شما هم‌چنین می‌توانید انتخاب کنید که کاربران از طریق صفحهٔ کاربری یا صفحهٔ بحث کاربری، بدون فاش شدن هویت‌‌ و نشانی واقعی پست الکترونیک‌تان، با شما تماس بگیرند.', 'prefs-help-email-required' => 'نشانی پست الکترونیکی الزامی است.', @@ -1503,9 +1552,15 @@ $1", 'prefs-advancedrendering' => 'گزینه‌های پیشرفته', 'prefs-advancedsearchoptions' => 'گزینه‌های پیشرفته', 'prefs-advancedwatchlist' => 'گزینه‌های پیشرفته', -'prefs-display' => 'گزینه‌های نمایش', +'prefs-displayrc' => 'گزینه‌های نمایش', +'prefs-displaysearchoptions' => 'گزینه‌های نمایش', +'prefs-displaywatchlist' => 'گزینه‌های نمایش', 'prefs-diffs' => 'تفاوت‌ها', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'نشانی پست الکترونیکی معتبر به نظر می رسد', +'email-address-validity-invalid' => 'نشانی پست الکترونیکی معتبر وارد کنید', + # User rights 'userrights' => 'مدیریت اختیارات کاربر', 'userrights-lookup-user' => 'مدیریت گروه‌های کاربری', @@ -1516,9 +1571,10 @@ $1", 'saveusergroups' => 'ثبت گروه‌های کاربری', 'userrights-groupsmember' => 'عضو:', 'userrights-groupsmember-auto' => 'عضو ضمنی:', -'userrights-groups-help' => 'شما می‌توانید گروه‌هایی که کاربر در آن قرار دارد را تغییر دهید. -یک جعبه علامت خورده به این معنی است که کاربر در آن گروه قرار دارد. -یک جعبه خالی به این معنی است که کاربر در آن گروه قرار ندارد.', +'userrights-groups-help' => 'شما می‌توانید گروه‌هایی که کاربر در آن قرار دارد را تغییر دهید: +* یک جعبه علامت خورده به این معنی است که کاربر در آن گروه قرار دارد. +* یک جعبه خالی به این معنی است که کاربر در آن گروه قرار ندارد. +* علامت * به این معنی است که اگر آن گروه را اضافه کنید نمی‌توانید بعداً برش دارید، یا برعکس.', 'userrights-reason' => 'دلیل:', 'userrights-no-interwiki' => 'شما اجازه تغییر اختیارات کاربران دیگر ویکی‌ها را ندارید.', 'userrights-nodatabase' => 'پایگاه داده $1 وجود ندارد یا محلی نیست.', @@ -1567,12 +1623,12 @@ $1", 'right-reupload' => 'بارگذاری مجدد پرونده‌ای که از قبل وجود دارد', 'right-reupload-own' => 'بارگذاری مجدد پرونده‌ای که پیش از این توسط همان کاربر بارگذاری شده‌است', 'right-reupload-shared' => 'باطل ساختن پرونده‌های مشترک به صورت محلی', -'right-upload_by_url' => 'بارگذاری پرونده از یک نشانی اینترنتی (URL)', +'right-upload_by_url' => 'بارگذاری پرونده از یک نشانی اینترنتی', 'right-purge' => 'خالی کردن میانگیر صفحه بدون مشاهدهٔ صفحهٔ تأیید', 'right-autoconfirmed' => 'ویرایش صفحه‌های نیمه حفاظت‌شده', 'right-bot' => 'تلقی‌شده به عنوان یک فرآیند خودکار', 'right-nominornewtalk' => 'ویرایش جزئی صفحه‌های بحث به شکلی که باعث اعلان پیغام جدید نشود', -'right-apihighlimits' => 'استفاده از حداکثر محدودیت API', +'right-apihighlimits' => 'سقف بالاتر استفاده از API', 'right-writeapi' => 'استفاده از API مربوط به نوشتن', 'right-delete' => 'حذف صفحه', 'right-bigdelete' => 'حذف صفحه‌هایی که تاریخچهٔ بزرگی دارند', @@ -1588,35 +1644,35 @@ $1", 'right-hideuser' => 'قطع دسترسی کاربر و پنهان کردن آن از دید عموم', 'right-ipblock-exempt' => 'تاثیر نپذیرفتن از قطع دسترسی‌های آی‌پی، خودکار یا فاصله‌ای', 'right-proxyunbannable' => 'تاثیر نپذیرفتن از قطع دسترسی خودکار پروکسی‌ها', -'right-protect' => 'تغییر میزان حفاظت صفحه‌ها و ویرایش صفحه‌های حفاظت شده', -'right-editprotected' => 'ویرایش صفحه‌های حفاظت شده (به شرط نبود حفاظت آبشاری)', +'right-unblockself' => 'دسترسی خود را باز کنند', +'right-protect' => 'تغییر میزان محافظت صفحه‌ها و ویرایش صفحه‌های محافظت شده', +'right-editprotected' => 'ویرایش صفحه‌های محافظت شده (به شرط نبود محافظت آبشاری)', 'right-editinterface' => 'ویرایش رابط کاربری', 'right-editusercssjs' => 'ویرایش صفحه‌های CSS و JS دیگر کاربرها', 'right-editusercss' => 'ویرایش صفحه‌های CSS دیگر کاربرها', 'right-edituserjs' => 'ویرایش صفحه‌های JS دیگر کاربرها', 'right-rollback' => 'واگردانی سریع ویرایش‌های آخرین کاربری که یک صفحه را ویرایش کرده‌است', 'right-markbotedits' => 'علامت زدن ویرایش‌های واگردانی شده به عنوان ویرایش ربات', -'right-noratelimit' => 'تاثیر ناپذیر از محدودیت سرعت', +'right-noratelimit' => 'تاثیر نپذیرفتن از محدودیت سرعت', 'right-import' => 'وارد کردن صفحه از ویکی‌های دیگر', 'right-importupload' => 'وارد کردن صفحه از طریق بارگذاری پرونده', -'right-patrol' => 'به ویرایش‌های دیگران برچسب گشت بزند', -'right-autopatrol' => 'به ویرایش‌های خودش به صورت خودکار برچسب گشت خورده بزند', -'right-patrolmarks' => 'مشاهدهٔ برچسب گشت‌زنی تغییرات اخیر', +'right-patrol' => 'گشت زدن به ویرایش‌های دیگران', +'right-autopatrol' => 'گشن زدن خودکار به ویرایش‌های خودش', +'right-patrolmarks' => 'مشاهدهٔ برچسب گشت تغییرات اخیر', 'right-unwatchedpages' => 'مشاهدهٔ فهرست صفحه‌هایی که پیگیری نمی‌شوند', 'right-trackback' => 'ثبت یک بازتاب', 'right-mergehistory' => 'ادغام تاریخچهٔ صفحه‌ها', 'right-userrights' => 'ویرایش تمام اختیارات کاربرها', 'right-userrights-interwiki' => 'ویرایش اختیارات کاربرهای ویکی‌های دیگر', 'right-siteadmin' => 'قفل کردن و باز کردن پایگاه داده', -'right-reset-passwords' => 'از نو تنظیم کردن گذرواژهٔ دیگر کاربران', +'right-reset-passwords' => 'صفر کردن گذرواژهٔ دیگر کاربران', 'right-override-export-depth' => 'برون‌ریزی صفحه‌ها شامل صفحه‌های پیوند شده تا عمق ۵', -'right-versiondetail' => 'نمایش اطلاعات مفصل نسخهٔ نرم‌افزار', -'right-sendemail' => 'ارسال پست الکترونیک به دیگر کاربران', +'right-sendemail' => 'ارسال نامه الکترونیکی به دیگر کاربران', # User rights log 'rightslog' => 'سیاههٔ اختیارات کاربر', 'rightslogtext' => 'این سیاههٔ تغییرات اختیارات کاربر است.', -'rightslogentry' => 'عضویت $1 را از گروه $2 به $3 تغییر داد.', +'rightslogentry' => 'عضویت $1 را از گروه $2 به $3 تغییر داد', 'rightsnone' => '(هیچ)', # Associated actions - in the sentence "You do not have permission to X" @@ -1642,12 +1698,12 @@ $1", 'action-undelete' => 'احیای این صفحه', 'action-suppressrevision' => 'مشاهده و احیای ویرایش‌های حذف شده', 'action-suppressionlog' => 'مشاهدهٔ این سیاههٔ خصوصی', -'action-block' => 'قطع دسترسی این کاربر برای ویرایش', -'action-protect' => 'تغییر سطح محافظت از این صفحه', +'action-block' => 'قطع دسترسی ویرایش این کاربر', +'action-protect' => 'تغییر سطح محافظت این صفحه', 'action-import' => 'وارد کردن این صفحه از یک ویکی دیگر', 'action-importupload' => 'وارد کردن این صفحه از طریق بارگذاری پرونده', -'action-patrol' => 'به ویرایش دیگران برچسب گشت بزنید', -'action-autopatrol' => 'به ویرایش خودتان برچسب گشت بزنید', +'action-patrol' => 'گشت زدن ویرایش دیگران', +'action-autopatrol' => 'گشت زدن ویرایش خودتان', 'action-unwatchedpages' => 'مشاهدهٔ صفحه‌های پی‌گیری نشده', 'action-trackback' => 'ثبت یک بازتاب', 'action-mergehistory' => 'ادغام تاریخچهٔ این صفحه', @@ -1660,17 +1716,12 @@ $1", 'recentchanges' => 'تغییرات اخیر', 'recentchanges-legend' => 'گزینه‌های تغییرات اخیر', 'recentchangestext' => 'آخرین تغییرات ویکی را در این صفحه پی‌گیری کنید.', -'recentchanges-feed-description' => 'ردیابی آخرین تغییرات این ویکی در این خورد.', -'recentchanges-label-legend' => 'شرح: $1.', -'recentchanges-legend-newpage' => '$1 - صفحهٔ جدید', -'recentchanges-label-newpage' => 'این ویرایش یک صفحهٔ جدید ایجاد کرده‌است', -'recentchanges-legend-minor' => '$1 - ویرایش جزئی', +'recentchanges-feed-description' => 'آخرین تغییرات ویکی را در این خوراک پی‌گیری کنید.', +'recentchanges-label-newpage' => 'این ویرایش یک صفحهٔ جدید ایجاد کرد', 'recentchanges-label-minor' => 'این ویرایش جزئی است', -'recentchanges-legend-bot' => '$1 - ویرایش ربات', 'recentchanges-label-bot' => 'این ویرایش توسط یک ربات انجام شده‌است', -'recentchanges-legend-unpatrolled' => '$1 - ویرایش گشت‌زنی نشده', 'recentchanges-label-unpatrolled' => 'این ویرایش هنوز گشت‌زنی نشده‌است', -'rcnote' => "در زیر {{PLURAL:$1|'''۱''' تغییر|آخرین '''$1''' تغییر}} در آخرین {{PLURAL:$2|روز|'''$2''' روز}} را، تا $5، $4 می‌بینید.", +'rcnote' => "در زیر {{PLURAL:$1|'''۱''' تغییر|آخرین '''$1''' تغییر}} در آخرین {{PLURAL:$2|روز|'''$2''' روز}} را، تا $4 ساعت $5 می‌بینید.", 'rcnotefrom' => 'در زیر تغییرات از تاریخ $2 آمده‌اند (تا $1 مورد نشان داده می‌شود).', 'rclistfrom' => 'نمایش تغییرات جدید با شروع از $1', 'rcshowhideminor' => '$1 ویرایش‌های جزئی', @@ -1679,7 +1730,7 @@ $1", 'rcshowhideanons' => '$1 کاربران ناشناس', 'rcshowhidepatr' => '$1 ویرایش‌های گشت‌خورده', 'rcshowhidemine' => '$1 ویرایش‌های من', -'rclinks' => 'نمایش آخرین $1 تغییر در $2 روز اخیر؛ $3', +'rclinks' => 'نمایش آخرین $1 تغییر در $2 روز اخیر
    $3', 'diff' => 'تفاوت', 'hist' => 'تاریخچه', 'hide' => 'نهفتن', @@ -1689,11 +1740,11 @@ $1", 'boteditletter' => 'ر', 'sectionlink' => '←', 'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|کاربر|کاربر}} پی‌گیری‌کننده]', -'rc_categories' => 'محدود به رده‌ها بشود (بین رده‌ها نویسهٔ | را قرار دهید)', +'rc_categories' => 'محدود به این رده‌ها (رده‌ها را با «|» جدا کنید)', 'rc_categories_any' => 'هر کدام', 'newsectionsummary' => '/* $1 */ بخش جدید', 'rc-enhanced-expand' => 'نمایش جزئیات (نیازمند جاوااسکریپت)', -'rc-enhanced-hide' => 'نفتن جزئیات', +'rc-enhanced-hide' => 'نهفتن جزئیات', # Recent changes linked 'recentchangeslinked' => 'تغییرات مرتبط', @@ -1713,24 +1764,26 @@ $1", 'reuploaddesc' => 'بازگشت به فرم بارگذاری', 'upload-tryagain' => 'ارسال توضیحات تغییر یافته پرونده', 'uploadnologin' => 'به سامانه وارد نشده‌اید', -'uploadnologintext' => 'برای بار کردن پرونده‌ها باید [[Special:UserLogin|به سامانه وارد شوید]].', +'uploadnologintext' => 'برای بارگذاری پرونده‌ها باید [[Special:UserLogin|به سامانه وارد شوید]].', 'upload_directory_missing' => 'شاخهٔ بارگذاری ($1) وجود ندارد و قابل ایجاد نیست.', 'upload_directory_read_only' => 'شاخهٔ بارگذاری ($1) از طرف کارگزار وب قابل نوشتن نیست.', -'uploaderror' => 'خطا در بار کردن', +'uploaderror' => 'خطای بارگذاری', +'upload-recreate-warning' => "'''هشدار: پرونده‌ای با این نام حذف یا منتقل شده است.''' + +برای راحتی، سیاههٔ حذف و انتقال برای این صفحه در زیر آمده است:", 'uploadtext' => "از فرم زیر برای بارگذاری کردن پرونده‌های جدید استفاده کنید. -برای دیدن پرونده‌هایی که قبلاً بارگذاری شده‌اند به [[Special:FileList|فهرست پرونده‌ها]] بروید. بارگذاری مجدد در [[Special:Log/upload|سیاههٔ بارگذاری‌ها]] و حذف پرونده‌ها در [[Special:Log/delete|deletion log]] ثبت می‌شود. +برای دیدن پرونده‌هایی که قبلاً بارگذاری شده‌اند به [[Special:FileList|فهرست پرونده‌ها]] بروید. بارگذاری نیز مجدد در [[Special:Log/upload|سیاههٔ بارگذاری‌ها]] و حذف پرونده‌ها در [[Special:Log/delete|deletion log]] ثبت می‌شود. بعد از این که پرونده‌ای را بارگذاری کردید، به این سه شکل می‌توانید آن را در صفحه‌ها استفاده کنید: - *'''[[{{ns:file}}:File.jpg]]''' برای استفاده از نسخه کامل پرونده *'''[[{{ns:file}}:File.png|200px|thumb|left|alt text]]''' برای استفاده از یک نسخه ۲۰۰ پیکسلی از پرونده درون یک جعبه در سمت چپ متن که عبارت alt text در آن به عنوان توضیح استفاده شده *'''[[{{ns:media}}:File.ogg]]''' برای ایجاد یک پیونده مستقیم به پرونده بدون نمایش پرونده", 'upload-permitted' => 'انواع مجاز پرونده‌ها: $1.', 'upload-preferred' => 'انواع ترجیح‌داده شده پرونده‌ها: $1.', -'upload-prohibited' => 'انواع غیر مجاز پرونده‌ها: $1.', -'uploadlog' => 'سیاههٔ بارکردن‌ها', -'uploadlogpage' => 'سیاههٔ بارکردن‌ها', -'uploadlogpagetext' => 'فهرست زیر فهرستی از آخرین بارکردن‌های پرونده‌های است. +'upload-prohibited' => 'انواع غیرمجاز پرونده‌ها: $1.', +'uploadlog' => 'سیاههٔ بارگذاری‌ها', +'uploadlogpage' => 'سیاههٔ بارگذاری‌ها', +'uploadlogpagetext' => 'فهرست زیر فهرستی از آخرین بارگذاری پرونده‌ها است. برای مرور دیداری [[Special:NewFiles|نگارخانهٔ پرونده‌های جدید]] را ببینید.', 'filename' => 'نام پرونده', 'filedesc' => 'خلاصه', @@ -1741,56 +1794,75 @@ $1", 'uploadedfiles' => 'پرونده‌های بارشده', 'ignorewarning' => 'چشم‌پوشی از هشدار و ذخیرهٔ پرونده.', 'ignorewarnings' => 'چشم‌پوشی از همهٔ هشدارها', -'minlength1' => 'اسم پرونده دست کم باید یک حرف باشد.', +'minlength1' => 'نام پرونده دست کم باید یک حرف باشد.', 'illegalfilename' => 'نام پرونده «$1» نویسه‌هایی را شامل می‌شود که در نام صفحه‌ها مجاز نیستند. لطفاً نام پرونده را تغییر دهید و آن را دوباره بارگذاری کنید.', 'badfilename' => 'نام پرونده به «$1» تغییر کرد.', 'filetype-mime-mismatch' => 'پسوند پرونده با نوع MIME آن مطابقت ندارد.', -'filetype-badmime' => 'پرونده‌هایی که نوع MIME آن‌ها $1 باشد برای بارگزاری مجاز نیستند.', +'filetype-badmime' => 'پرونده‌هایی که نوع MIME آن‌ها $1 باشد برای بارگذاری مجاز نیستند.', 'filetype-bad-ie-mime' => 'این پرونده را نمی‌توانید بارگذاری کنید زیرا اینترنت اکسپلورر آن را به عنوان «$1» تشخیص می‌دهد، که یک نوع پروندهٔ غیر مجاز و احتمالاً خطرناک است.', -'filetype-unwanted-type' => "‎'''\".\$1\"''' یک نوع پرونده ناخواسته است. -{{PLURAL:\$3|نوع پرونده ترجیح داده شده|انواع پرونده ترجیح داد شده}} از این قرار است: \$2 .", +'filetype-unwanted-type' => "'''«‎.‎$1»''' یک نوع پرونده ناخواسته است. +{{PLURAL:$3|نوع پرونده ترجیح داده شده|انواع پرونده ترجیح داده شده}} از این قرار است: $2 .", 'filetype-banned-type' => "‎'''\".\$1\"''' یک نوع پرونده غیرمجاز است. {{PLURAL:\$3|نوع پرونده مجاز|انواع پرونده مجاز}} از این قرار است: \$2 .", 'filetype-missing' => 'این پرونده پسوند (مثلاً «‎.jpg») ندارد.', -'large-file' => 'توصیه می‌شود که پرونده‌ها بزرگتر از $1 نباشند: این پرونده $2 است.', -'largefileserver' => 'این پرونده از اندازه‌ای که در پیکربندی خادم به عنوان سقف اندازهٔ پرونده درنظر گرفته‌ شده‌است، بزرگتر است.', -'emptyfile' => 'پروندهٔ بارشده خالی بنظر می‌رسد. این مساله ممکن است به دلیل خطای تایپی در نام پرونده رخ داده باشد. لطفاً تأیید کنید که می‌خواهید این پرونده را با همین شرایط بار کنید.', -'fileexists' => "پرونده‌ای با همین نام از قبل موجود است. -اگر مطمئن نیستید که می‌خواهید آن پرونده را تغییر دهید، لطفاً '''[[:$1]]''' را بررسی کنید. -[[$1|انگشتی]] [[$1|thumb]]", +'empty-file' => 'پرونده‌ای که ارسال کردید خالی بود.', +'file-too-large' => 'پرونده‌ای که ارسال کردید بیش از اندازه بزرگ بود.', +'filename-tooshort' => 'نام پرونده بیش از اندازه کوتاه است.', +'filetype-banned' => 'این نوع پرونده ممنوع است.', +'verification-error' => 'پرونده از آزمون تأیید پرونده گذر نکرد.', +'hookaborted' => 'تغییری که می‌خواستید ایجاد کنید توسط یک قلاب افزونه خاتمه ناگهانی داده شد.', +'illegal-filename' => 'نام پرونده مجاز نیست.', +'overwrite' => 'نوشتن روی یک پرونده موجود مجاز نیست.', +'unknown-error' => 'خطای ناشناخته‌ای رخ داد.', +'tmp-create-error' => 'امکان ساخت پرونده موقت وجود نداشت.', +'tmp-write-error' => 'خطا در نوشتن پرونده موقت.', +'large-file' => 'توصیه می‌شود که پرونده‌ها بزرگتر از $1 نباشند؛ +اندازهٔ این پرونده $2 است.', +'largefileserver' => 'این پرونده از اندازه‌ای که سرور پیکربندی شده تا بپذیرد بزرگتر است.', +'emptyfile' => 'پروندهٔ بارشده خالی به نظر می‌رسد. +این مساله ممکن است به دلیل خطای تایپی در نام پرونده رخ داده باشد. +لطفاً تأیید کنید که می‌خواهید این پرونده را با همین شرایط بارگذاری کنید.', +'fileexists' => "پرونده‌ای با همین نام از قبل موجود است، اگر مطمئن نیستید که می‌خواهید آن پرونده را تغییر دهید، لطفاً '''[[:$1]]''' را بررسی کنید. +[[$1|thumb]]", 'filepageexists' => "صفحهٔ توضیح برای این پرونده از قبل در '''[[:$1]]''' ایجاد شده‌است، اما پرونده‌ای با این نام وجود ندارد. خلاصه‌ای که وارد می‌کنید در صفحهٔ توضیح نمایش نخواهد یافت. -برای آن که خلاصه شما نمایش یابد، باید آن را به صورت دستی ویرایش کنید. [[$1|انگشتی]]", +برای آن که خلاصه شما نمایش یابد، باید آن را به صورت دستی ویرایش کنید. +[[$1|thumb]]", 'fileexists-extension' => "پرونده‌ای با نام مشابه وجود دارد: [[$2|thumb]] -* نام پرونده‌ای که بارگزاری کردید این بود:'''[[:$1]]''' +* نام پرونده‌ای که بارگذاری کردید این بود:'''[[:$1]]''' * نام پرونده‌ای که از قبل موجود است این است:'''[[:$2]]''' لطفاً یک نام دیگر انتخاب کنید.", -'fileexists-thumbnail-yes' => "به نظر می‌رسد که این پرونده، یک تصویر کوچک شده (بندانگشتی یا thumbnail) باشد. [[$1|انگشتی]] +'fileexists-thumbnail-yes' => "به نظر می‌رسد که این پرونده، یک تصویر کوچک شده (''بندانگشتی'' یا ''thumbnail'') باشد. +[[$1|thumb]] لطفاً پروندهٔ '''[[:$1]]''' را بررسی کنید. اگر پرونده‌ای که بررسی کردید، همین تصویر در اندازهٔ اصلی‌اش است، نیازی به بارگذاری یک نسخهٔ بندانگشتی اضافه نیست.", 'file-thumbnail-no' => "نام پرونده با '''$1''' آغاز می‌شود. -به نظر می‌رسد که این پرونده، یک تصویر بندانگشتی ''(thumbnail)'' از تصویر بزرگتر اصلی باشد. +به نظر می‌رسد که این پرونده، یک تصویر ''بندانگشتی'' ''(thumbnail)'' از تصویر بزرگتر اصلی باشد. اگر تصویر با اندازهٔ اصلی را دارید، آن را بارگذاری کنید؛ در غیر این صورت، نام پرونده را تغییر دهید.", 'fileexists-forbidden' => 'در حال حاضر، پرونده‌ای به همین نام وجود دارد، و قابل رونویسی نیست. -اگر هم‌چنان می‌خواهید که پروندهٔ خود را بارگذاری کنید، لطفاً برگردید و نام دیگری برگزینید. +اگر هم‌چنان می‌خواهید که پروندهٔ خود را بارگذاری کنید، لطفاً برگردید و نام دیگری استفاده کنید. [[File:$1|thumb|center|$1]]', 'fileexists-shared-forbidden' => 'در حال‌ حاضر، پرونده‌ای با همین نام در انبارهٔ مشترک پرونده‌ها وجود دارد. -اگر هنوز می‌خواهید پرونده خود را بار کنید، لطفاً برگردید و پروندهٔ موردنظر خود را با نام دیگری بار کنید. [[File:$1|thumb|center|$1]]', +اگر هنوز می‌خواهید پرونده خود را بار کنید، لطفاً برگردید و پروندهٔ موردنظر خود را با نام دیگری بار کنید. +[[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'به نظر می‌رسد این پرونده نسخه‌ای تکراری از {{PLURAL:$1|پروندهٔ|پرونده‌های}} زیر باشد:', 'file-deleted-duplicate' => 'یک پرونده نظیر این پرونده ([[:$1]]) قبلاً حذف شده‌است. شما باید تاریخچهٔ حذف آن پرونده را قبل از بارگذاری مجدد آن ببینید.', -'successfulupload' => 'بار کردن با موفقیت انجام شد', -'uploadwarning' => 'هشدار بار کردن', +'uploadwarning' => 'هشدار بارگذاری', 'uploadwarning-text' => 'لطفاً توضیحات پرونده را در زیر تغییر دهید و دوباره تلاش کنید.', 'savefile' => 'ذخیرهٔ پرونده', 'uploadedimage' => '«[[$1]]» را بارگذاری کرد', 'overwroteimage' => 'نسخه جدیدی از «[[$1]]» را بارگذاری کرد', -'uploaddisabled' => 'شرمنده، بار کردن از کار افتاده است.', -'uploaddisabledtext' => 'امکان بارگذاری پرونده غیرفعال شده‌است.', -'php-uploaddisabledtext' => 'بارگذاری پرونده‌های پی‌اچ‌پی غیر فعال است. لطفاً تنظیمات file_uploads را بررسی کنید.', -'uploadscripted' => 'این صفحه حاوی اسکریپت یا کدی اچ‌تی‌ام‌ال است که ممکن است به‌نادرست توسط مرورگر وب تفسیر شود.', -'uploadvirus' => 'این پرونده ویروس دارد! جزئیات : $1', +'uploaddisabled' => 'بارگذاری غیرفعال است.', +'copyuploaddisabled' => 'بارگذاری از طریق نشانی اینترنتی غیرفعال است.', +'uploadfromurl-queued' => 'بارگذاری شما به صف اضافه شد.', +'uploaddisabledtext' => 'امکان بارگذاری پرونده غیرفعال است.', +'php-uploaddisabledtext' => 'بارگذاری پرونده‌های پی‌اچ‌پی غیرفعال است. +لطفاً تنظیمات file_uploads را بررسی کنید.', +'uploadscripted' => 'این صفحه حاوی کد اچ‌تی‌ام‌ال یا اسکریپتی است که ممکن است به‌نادرست توسط مرورگر وب تفسیر شود.', +'uploadvirus' => 'این پرونده ویروس دارد! +جزئیات : $1', 'upload-source' => 'پرونده منبع', 'sourcefilename' => 'نام پروندهٔ اصلی:', 'sourceurl' => 'نشانی منبع:', @@ -1799,19 +1871,28 @@ $1", 'upload-description' => 'توضیحات پرونده', 'upload-options' => 'گزینه‌های بارگذاری', 'watchthisupload' => 'پی‌گیری این پرونده', -'filewasdeleted' => 'پرونده‌ای با همین نام پیشتر بارگذاری و پس از آن پاک شده‌است. بهتر است پیش از بارگذاری مجدد نگاهی به $1 بیندازید.', +'filewasdeleted' => 'پرونده‌ای با همین نام پیشتر بارگذاری و پس از آن پاک شده‌است. +شما باید $1 را قبل از بارگذاری مجدد آن ببینید.', 'upload-wasdeleted' => "'''هشدار: شما در حال بارگذاری پرونده‌ای هستید که پیش از این حذف شده است.''' -شما باید بیندیشید که آیا بارگذاری مجدد پرونده مناسب است یا خیر. -سیاهه حذف مربوط به این پرونده در زیر آمده است:", +در نظر داشته باشید که آیا بارگذاری مجدد آن کار درستی است یا نه. +برای راحتی، سیاههٔ حذف مربوط به این پرونده در زیر آمده است:", 'filename-bad-prefix' => "نام پرونده‌ای که بارگذاری می‌کنید با '''$1''' آغاز می‌شود که یک پیشوند مخصوص تصاویر ثبت شده توسط دوربین‌های دیجیتال است. لطفاً نامی بهتر برای پرونده برگزینید.", +'upload-success-subj' => 'بارگذاری با موفقیت انجام شد', +'upload-success-msg' => 'بارگذاری شما از [$2] موفق بود. این پرونده در اینجا قابل دسترسی است: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'مشکل در بارگذاری', +'upload-failure-msg' => 'مشکلی در بارگذاری شما از [$2] وجود داشت: + +$1', +'upload-warning-subj' => 'هشدار بارگذاری', +'upload-warning-msg' => 'فرم بارگذاری مشکلی داشت [$2]. شما می‌توانید به [[Special:Upload/stash/$1|فرم بارگذاری]] بازگردید تا این اشکال را رفع کنید.', -'upload-proto-error' => 'قرارداد نادرست', +'upload-proto-error' => 'پروتکل نادرست', 'upload-proto-error-text' => 'بارگذاری از دوردست به نشانی‌هایی که با http:// یا ftp:// آغاز شوند نیاز دارد.', 'upload-file-error' => 'خطای داخلی', 'upload-file-error-text' => 'هنگام تلاش برای ایجاد یک پروندهٔ موقت در کارگزار یک خطای داخلی رخ داد. -لطفاً با یکی از [[Special:ListUsers/sysop|مدیران]] تماس بگیرید.', +لطفاً با یک [[Special:ListUsers/sysop|مدیر]] تماس بگیرید.', 'upload-misc-error' => 'خطایی نامعلوم در بارگذاری', 'upload-misc-error-text' => 'هنگام بارگذاری، خطایی نامعلوم رخ داد. لطفاً اطمینان حاصل کنید که نشانی اینترنتی معتبر و قابل دسترسی است و بعد دوباره تلاش کنید. @@ -1823,14 +1904,14 @@ $1", # img_auth script messages 'img-auth-accessdenied' => 'منع دسترسی', 'img-auth-nopathinfo' => 'PATH_INFO موجود نیست. -کارساز شما برای رد کردن این مقدار تنظیم نشده‌است. +سرور شما برای رد کردن این مقدار تنظیم نشده‌است. ممکن است کارساز مبتنی بر سی‌جی‌آی باشد و از img_auth پشتیبانی نکند. http://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.', -'img-auth-notindir' => 'مسیر درخواست شده در شاخهٔ بارگذاری تنظیم نشده‌است.', +'img-auth-notindir' => 'مسیر درخواست شده در شاخهٔ بارگذاری تنظیم‌شده قرار ندارد.', 'img-auth-badtitle' => 'امکان ایجاد یک عنوان مجاز از «$1» وجود ندارد.', 'img-auth-nologinnWL' => 'شما به سامانه وارد نشده‌اید و «$1» در فهرست سفید قرار ندارد.', 'img-auth-nofile' => 'پرونده «$1» وجود ندارد.', -'img-auth-isdir' => 'شما می‌خواهید به شاخهٔ «$1» دسترسی پیدا کنید. +'img-auth-isdir' => 'شما تلاش کرده‌اید به شاخهٔ «$1» دسترسی پیدا کنید. تنها دسترسی به پرونده مجاز است.', 'img-auth-streaming' => 'در حال جاری ساختن «$1».', 'img-auth-public' => 'عملکرد img_auth.php برونداد پرونده‌ها از یک ویکی خصوصی است. @@ -1841,19 +1922,22 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.', # HTTP errors 'http-invalid-url' => 'نشانی نامعتبر: $1', -'http-invalid-scheme' => 'نشانی‌های اینترنتی با طرح «$1» پشتیبانی نمی‌شوند', -'http-request-error' => 'درخواست اچ‌تی‌تی‌پی ناموفق به علت خطای ناشناخته', +'http-invalid-scheme' => 'نشانی‌های اینترنتی با طرح «$1» پشتیبانی نمی‌شوند.', +'http-request-error' => 'درخواست اچ‌تی‌تی‌پی به علت خطایی ناشناخته، ناموفق بود.', 'http-read-error' => 'خطای خواندن اچ‌تی‌تی‌پی.', 'http-timed-out' => 'مهلت درخواست اچ‌تی‌تی‌پی به سر رسید.', 'http-curl-error' => 'خطا در آوردن نشانی اینترنتی: $1', -'http-host-unreachable' => 'دسترسی به نشانی اینترنتی ممکن نشد', +'http-host-unreachable' => 'دسترسی به نشانی اینترنتی ممکن نشد.', 'http-bad-status' => 'در حین درخواست اچ‌تی‌تی‌پی خطایی رخ داد: $1 $2', # Some likely curl errors. More could be added from -'upload-curl-error6' => 'دسترسی به URL ممکن نشد.', -'upload-curl-error6-text' => 'URL داده شده قابل دسترسی نیست. لطفاً درستی آن و اینکه وب‌گاه برقرار است را بازرسی کنید.', -'upload-curl-error28' => 'زمان بارگذاری سر آمد.', -'upload-curl-error28-text' => 'این وب‌گاه بیش از اندازه در پاسخ تعلل کرد. لطفاً بررسی کنید که آیا وب‌گاه فعال و برخط است یا نه. سپس لختی درنگ کنید و دوباره تلاش نمایید. شاید بد نباشد که در زمان خلوت‌تری دوباره تلاش کنید.', +'upload-curl-error6' => 'دسترسی به نشانی اینترنتی ممکن نشد', +'upload-curl-error6-text' => 'نشانی اینترنتی داده شده قابل دسترسی نیست. +لطفاً درستی آن و اینکه وب‌گاه برقرار است را بررسی کنید.', +'upload-curl-error28' => 'مهلت بارگذاری به سر رسید', +'upload-curl-error28-text' => 'این وب‌گاه بیش از اندازه در پاسخ تعلل کرد. +لطفاً بررسی کنید که آیا وب‌گاه فعال و برخط است یا نه، سپس لختی درنگ کنید و دوباره تلاش نمایید. +شاید بد نباشد که در زمان خلوت‌تری دوباره تلاش کنید.', 'license' => 'اجازه‌نامه:', 'license-header' => 'اجازه‌نامه', @@ -1869,6 +1953,7 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.', 'listfiles_search_for' => 'جستجو به دنبال نام پرونده چندرسانه‌ای:', 'imgfile' => 'پرونده', 'listfiles' => 'فهرست پرونده‌ها', +'listfiles_thumb' => 'بندانگشتی', 'listfiles_date' => 'تاریخ', 'listfiles_name' => 'نام', 'listfiles_user' => 'کاربر', @@ -1878,16 +1963,16 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.', # File description page 'file-anchor-link' => 'پرونده', -'filehist' => 'تاریخچه پرونده', +'filehist' => 'تاریخچهٔ پرونده', 'filehist-help' => 'روی تاریخ‌ها کلیک کنید تا نسخهٔ مربوط را ببینید.', 'filehist-deleteall' => 'حذف همه', 'filehist-deleteone' => 'حذف این مورد', 'filehist-revert' => 'واگردانی', 'filehist-current' => 'نسخهٔ کنونی', -'filehist-datetime' => 'تاریخ', -'filehist-thumb' => 'بند انگشتی', -'filehist-thumbtext' => 'تصویر بند انگشتی از نسخه تا $1', -'filehist-nothumb' => 'فاقد بند انگشتی', +'filehist-datetime' => 'تاریخ/ساعت', +'filehist-thumb' => 'بندانگشتی', +'filehist-thumbtext' => 'تصویر بندانگشتی از نسخهٔ مورخ $1', +'filehist-nothumb' => 'فاقد بندانگشتی', 'filehist-user' => 'کاربر', 'filehist-dimensions' => 'ابعاد', 'filehist-filesize' => 'اندازهٔ پرونده', @@ -1895,7 +1980,7 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.', 'filehist-missing' => 'پروندهٔ ناموجود', 'imagelinks' => 'پیوندهای پرونده', 'linkstoimage' => '{{PLURAL:$1|صفحهٔ|صفحه‌های}} زیر به این تصویر پیوند {{PLURAL:$1|دارد|دارند}}:', -'linkstoimage-more' => 'بیش از $1 صفحه به این پرونده پیوند {{PLURAL:$1|می‌دهد|می‌دهند}}. +'linkstoimage-more' => 'بیش از $1 صفحه به این پرونده پیوند {{PLURAL:$1|دارد|دارند}}. فهرست زیر تنها {{PLURAL:$1|اولین پیوند|اولین $1 پیوند}} به این صفحه را نشان می‌دهد. [[Special:WhatLinksHere/$2|فهرست کامل]] نیز موجود است.', 'nolinkstoimage' => 'هیچ صفحه‌ای به این تصویر پیوند ندارد.', @@ -1909,19 +1994,19 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.', توضیحات موجود در [$2 صفحهٔ توضیحات پرونده] در آنجا، در زیر نشان داده شده‌است.', 'filepage-nofile' => 'پرونده‌ای با این نام وجود ندارد.', 'filepage-nofile-link' => 'پرونده‌ای با این نام وجود ندارد، اما شما می‌توانید آن را [$1 بارگذاری کنید].', -'uploadnewversion-linktext' => 'بارکردن نسخهٔ جدیدی از پرونده', +'uploadnewversion-linktext' => 'بارگذاری نسخهٔ جدیدی از پرونده', 'shared-repo-from' => 'از $1', 'shared-repo' => 'یک مخزن مشترک', # File reversion 'filerevert' => 'واگردانی $1', -'filerevert-backlink' => '→ $1', +'filerevert-backlink' => '← $1', 'filerevert-legend' => 'واگردانی پرونده', -'filerevert-intro' => "شما در حال واگردانی '''[[Media:$1|$1]]''' به [نسخهٔ $4 مورخ $2، $3] هستید.", +'filerevert-intro' => "شما در حال واگردانی '''[[Media:$1|$1]]''' به [$4 نسخهٔ مورخ $2 ساعت $3] هستید.", 'filerevert-comment' => 'دلیل:', -'filerevert-defaultcomment' => 'واگردانی به نسخهٔ $1، $2', +'filerevert-defaultcomment' => 'واگردانی به نسخهٔ $1 ساعت $2', 'filerevert-submit' => 'برو', -'filerevert-success' => "''[[Media:$1|$1]]''' به [نسخهٔ $4 مورخ $2، $3] واگردانده شد.", +'filerevert-success' => "''[[Media:$1|$1]]''' به [$4 نسخهٔ مورخ $2 ساعت $3] واگردانده شد.", 'filerevert-badversion' => 'نسخهٔ قدیمی‌تری از این پرونده وجود نداشت.', # File deletion @@ -1929,25 +2014,25 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.', 'filedelete-backlink' => '← $1', 'filedelete-legend' => 'حذف پرونده', 'filedelete-intro' => "شما در حال حذف کردن پروندهٔ '''[[Media:$1|$1]]''' به همراه تمام تاریخچه‌اش هستید.", -'filedelete-intro-old' => 'شما در حال حذف نسخه \'\'\'[[Media:$1|$1]]\'\'\' به تاریخ [$4 $3، $2] هستید.', +'filedelete-intro-old' => "شما در حال حذف نسخه '''[[Media:$1|$1]]''' مورخ [$4 $2 ساعت $3] هستید.", 'filedelete-comment' => 'دلیل:', 'filedelete-submit' => 'حذف', 'filedelete-success' => "'''$1''' حذف شد.", -'filedelete-success-old' => "نسخهٔ '''[[Media:$1|$1]]''' به تاریخ $3، $2 حذف شد.", +'filedelete-success-old' => "نسخهٔ '''[[Media:$1|$1]]''' مورخ $2 ساعت $3 حذف شد.", 'filedelete-nofile' => "'''$1''' وجود ندارد.", -'filedelete-nofile-old' => "نسخه بایگانی شده‌ای از '''$1''' با مشخصات داده شده، وجود ندارد..", +'filedelete-nofile-old' => "نسخهٔ بایگانی‌شده‌ای از '''$1''' با مشخصات داده شده، وجود ندارد.", 'filedelete-otherreason' => 'دلیل دیگر/اضافی:', 'filedelete-reason-otherlist' => 'دلیل دیگر', -'filedelete-reason-dropdown' => ' -*دلایل متداول حذف +'filedelete-reason-dropdown' => '*دلایل متداول حذف ** نقض حق تکثیر -** پرونده تکراری', -'filedelete-edit-reasonlist' => 'ویرایش فهرست دلایل', -'filedelete-maintenance' => 'حذف و احیای پرونده‌ها در مدت نگهداری به طور موقت غیر فعال است.', +** پروندهٔ تکراری', +'filedelete-edit-reasonlist' => 'ویرایش دلایل حذف', +'filedelete-maintenance' => 'حذف و احیای پرونده‌ها در مدت نگهداری به طور موقت غیرفعال است.', # MIME search 'mimesearch' => 'جستجوی بر اساس MIME', -'mimesearch-summary' => 'با کمک این صفحه شما می‌توانید پرونده‌هایی که یک نوع MIME به خصوص دارند را پیدا کنید. باید اطلاعات MIME را به صورت contenttype/subtype وارد کنید، نظیر image/jpeg.', +'mimesearch-summary' => 'با کمک این صفحه شما می‌توانید پرونده‌هایی که یک نوع MIME به خصوص دارند را پیدا کنید. +ورودی: به صورت contenttype/subtype ، نظیر image/jpeg.', 'mimetype' => 'نوع MIME:', 'download' => 'بارگیری', @@ -1955,7 +2040,7 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.', 'unwatchedpages' => 'صفحه‌های پی‌گیری‌نشده', # List redirects -'listredirects' => 'فهرست صفحه‌های تغییر مسیر', +'listredirects' => 'فهرست صفحه‌های تغییرمسیر', # Unused templates 'unusedtemplates' => 'الگوهای استفاده‌نشده', @@ -1965,11 +2050,11 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.', # Random page 'randompage' => 'صفحهٔ تصادفی', -'randompage-nopages' => 'هیچ صفحه‌ای در این {{PLURAL:$2|فضای نام|فضاهای نام}} موجود نیست: $1', +'randompage-nopages' => 'هیچ صفحه‌ای در این {{PLURAL:$2|فضای نام|فضاهای نام}} موجود نیست: $1.', # Random redirect -'randomredirect' => 'تغییر مسیر تصادفی', -'randomredirect-nopages' => 'هیج صفحهٔ تغییر مسیری در فضای نام «$1» موجود نیست.', +'randomredirect' => 'تغییرمسیر تصادفی', +'randomredirect-nopages' => 'هیج صفحهٔ تغییرمسیری در فضای نام «$1» موجود نیست.', # Statistics 'statistics' => 'آمار', @@ -1978,15 +2063,15 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.', 'statistics-header-views' => 'آمار بازدیدها', 'statistics-header-users' => 'آمار کاربران', 'statistics-header-hooks' => 'آمارهای دیگر', -'statistics-articles' => 'صفحه محتویات', +'statistics-articles' => 'صفحه‌های محتوایی', 'statistics-pages' => 'صفحه‌ها', -'statistics-pages-desc' => 'تمام صفحه‌های این ویکی، از جمله صفحه‌های بحث، تغییر مسیر و غیره', +'statistics-pages-desc' => 'تمام صفحه‌های این ویکی، از جمله صفحه‌های بحث، تغییرمسیر و غیره', 'statistics-files' => 'پرونده‌های بارگذاری شده', 'statistics-edits' => 'ویرایش صفحه‌ها از هنگامی که {{SITENAME}} راه‌اندازی شده', -'statistics-edits-average' => 'متوسط ویرایش‌ها بر روی صفحات', +'statistics-edits-average' => 'متوسط ویرایش‌ها به ازای هر صفحه', 'statistics-views-total' => 'مجموع بازدیدها', +'statistics-views-total-desc' => 'بازدید صفحه‌های ناموجود و صفحه‌های ویژه شامل نشده‌است', 'statistics-views-peredit' => 'تعداد بازدید به ازای هر ویرایش', -'statistics-jobqueue' => 'طول [http://www.mediawiki.org/wiki/Manual:Job_queue صف کار]', 'statistics-users' => '[[Special:ListUsers|کاربران]] ثبت‌نام کرده', 'statistics-users-active' => 'کاربران فعال', 'statistics-users-active-desc' => 'کاربرانی که در {{PLURAL:$1|روز|$1 روز}} قبل فعالیتی انجام داده‌اند', @@ -2001,9 +2086,9 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.', 'doubleredirects' => 'تغییرمسیرهای دوتایی', 'doubleredirectstext' => 'این صفحه فهرستی از صفحه‌های تغییر مسیری را ارائه می‌کند که به صفحهٔ تغییر مسیر دیگری اشاره می‌کنند. هر سطر دربردارندهٔ پیوندهایی به تغییر مسیر اول و دوم و همچنین مقصد تغییر مسیر دوم است، که معمولاً صفحهٔ مقصد واقعی است و نخستین تغییر مسیر باید به آن اشاره کند. -موارد خط خورده درست شده‌اند.', +موارد خط خورده درست شده‌اند.', 'double-redirect-fixed-move' => '[[$1]] انتقال داده شده‌است، و در حال حاضر تغییر مسیری به [[$2]] است', -'double-redirect-fixer' => 'تعمیرکار تغییر مسیرها', +'double-redirect-fixer' => 'تعمیرکار تغییرمسیرها', 'brokenredirects' => 'تغییرمسیرهای خراب', 'brokenredirectstext' => 'تغییرمسیرهای زیر به یک صفحهٔ ناموجود پیوند دارند:', @@ -2022,17 +2107,19 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.', 'ncategories' => '$1 {{PLURAL:$1|رده|رده}}', 'nlinks' => '$1 {{PLURAL:$1|پیوند|پیوند}}', 'nmembers' => '$1 {{PLURAL:$1|عضو|عضو}}', -'nrevisions' => '$1 {{PLURAL:$1|ویرایش|ویرایش}}', -'nviews' => '$1 {{PLURAL:$1|نمایش|نمایش}}', -'specialpage-empty' => 'این صفحه تُهی‌است.', +'nrevisions' => '$1 {{PLURAL:$1|نسخه|نسخه}}', +'nviews' => '$1 {{PLURAL:$1|بازدید|بازدید}}', +'nimagelinks' => 'مورد استفاده در $1 {{PLURAL:$1|صفحه|صفحه}}', +'ntransclusions' => 'در $1 {{PLURAL:$1|صفحه|صفحه}} استفاده شده‌است', +'specialpage-empty' => 'نتیجه‌ای برای این گزارش وجود ندارد.', 'lonelypages' => 'صفحه‌های یتیم', 'lonelypagestext' => 'به صفحه‌های زیر از هیچ صفحهٔ دیگری در {{SITENAME}} پیوند داده نشده‌است و در هیچ صفحهٔ دیگری گنجانده نشده‌اند.', 'uncategorizedpages' => 'صفحه‌های رده‌بندی نشده', 'uncategorizedcategories' => 'رده‌های رده‌بندی نشده', -'uncategorizedimages' => 'تصویرهای رده‌بندی‌نشده', +'uncategorizedimages' => 'پرونده‌های رده‌بندی نشده', 'uncategorizedtemplates' => 'الگوهای رده‌بندی نشده', -'unusedcategories' => 'رده‌های بی‌استفاده', -'unusedimages' => 'تصویرهای استفاده‌نشده', +'unusedcategories' => 'رده‌های استفاده نشده', +'unusedimages' => 'پرونده‌های استفاده نشده', 'popularpages' => 'صفحه‌های محبوب', 'wantedcategories' => 'رده‌های مورد نیاز', 'wantedpages' => 'صفحه‌های مورد نیاز', @@ -2043,17 +2130,17 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.', 'mostlinkedcategories' => 'رده‌هایی که بیشتر از همه به آنها پیوند شده است', 'mostlinkedtemplates' => 'الگوهایی که بیشتر از همه به آنها پیوند شده است', 'mostcategories' => 'مقاله‌هایی که بیشترین تعداد رده را دارند', -'mostimages' => 'تصاویری که بیشتر از همه به آنها پیوند شده است', -'mostrevisions' => 'مقاله‌هایی که بیشتر از بقیه ویرایش شده‌اند', +'mostimages' => 'پرونده‌هایی که بیشتر از همه به آنها پیوند شده است', +'mostrevisions' => 'صفحه‌های دارای بیشترین نسخه', 'prefixindex' => 'تمام صفحه‌ها با پیشوند', 'shortpages' => 'صفحه‌های کوتاه', 'longpages' => 'صفحه‌های بلند', 'deadendpages' => 'صفحه‌های بن‌بست', -'deadendpagestext' => 'صفحه‌های زیر به هیچ صفحهٔ دیگر در این ویکی پیوند ندارند.', -'protectedpages' => 'صفحه‌های حفاظت‌شده', -'protectedpages-indef' => 'فقط حفاظت‌های بی‌پایان', +'deadendpagestext' => 'صفحه‌های زیر به هیچ صفحهٔ دیگری در {{SITENAME}} پیوند ندارند.', +'protectedpages' => 'صفحه‌های محافظت‌شده', +'protectedpages-indef' => 'فقط محافظت‌های بی‌پایان', 'protectedpages-cascade' => 'فقط محافظت‌های آبشاری', -'protectedpagestext' => 'صفحه‌های زیر در برابر ویرایش یا انتقال حفاظت شده‌اند:', +'protectedpagestext' => 'صفحه‌های زیر در برابر ویرایش یا انتقال محافظت شده‌اند:', 'protectedpagesempty' => 'در حال حاضر هیچ‌صفحه‌ای محافظت نشده‌است.', 'protectedtitles' => 'عنوان‌های محافظت شده', 'protectedtitlestext' => 'عنوان‌های زیر از ایجاد محافظت شده‌اند', @@ -2084,7 +2171,7 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.', 'booksources-search-legend' => 'جستجوی منابع کتاب', 'booksources-isbn' => 'شابک:', 'booksources-go' => 'برو', -'booksources-text' => 'در زیر فهرستی از پیوندها به وبگاه‌های دیگر آمده‌است که کتاب‌های نو و دست دوم می‌فروشند، و هم‌چنین ممکن است اطلاعات بیشتری راجع به کتاب مورد نظر شما داشته‌باشند:', +'booksources-text' => 'در زیر فهرستی از پیوندها به وبگاه‌های دیگر آمده‌است که کتاب‌های نو و دست دوم می‌فروشند، و همچنین ممکن است اطلاعات بیشتری راجع به کتاب مورد نظر شما داشته باشند:', 'booksources-invalid-isbn' => 'شابک داده شده مجاز به نظر نمی‌رسد؛ از جهت اشکالات هنگام کپی کردن از منبع اصلی بررسی کنید.', # Special:Log @@ -2115,7 +2202,7 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.', 'allpages-bad-ns' => '{{SITENAME}} دارای فضای نام «$1» نیست.', # Special:Categories -'categories' => 'رده‌های صفحه', +'categories' => 'رده‌ها', 'categoriespagetext' => '{{PLURAL:$1|ردهٔ|رده‌های}} زیر حاوی صفحه یا پرونده {{PLURAL:$1|است|هستند}}. [[Special:UnusedCategories|رده‌های استفاده نشده]] در اینجا نمایش داده نشده‌اند. هم‌چنین [[Special:WantedCategories|رده‌های مورد نیاز]] را ببینید.', @@ -2133,7 +2220,8 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.', 'linksearch-pat' => 'جستجوی الگو:', 'linksearch-ns' => 'فضای نام:', 'linksearch-ok' => 'جستجو', -'linksearch-text' => 'نشانه‌هایی مانند "*.wikipedia.org" را می‌توان استفاده کرد.
    پروتکل‌های پشتیبانی‌شده: $1', +'linksearch-text' => 'نشانه‌هایی مانند «‎*.wikipedia.org» را می‌توان استفاده کرد.
    +پروتکل‌های پشتیبانی‌شده: $1', 'linksearch-line' => '$1 از $2 پیوند دارد', 'linksearch-error' => 'نشانه‌ها فقط در ابتدای نام میزبان اینترنتی می‌توانند استفاده شوند.', @@ -2154,7 +2242,7 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.', # Special:Log/newusers 'newuserlogpage' => 'سیاههٔ ایجاد کاربر', -'newuserlogpagetext' => 'این سیاهه‌ای از نامهای کاربریِ تازه‌ساخته‌شده است', +'newuserlogpagetext' => 'این سیاهه‌ای از نام‌های کاربری تازه‌ساخته‌شده است.', 'newuserlog-byemail' => 'گذرواژه با پست الکترونیکی ارسال شد', 'newuserlog-create-entry' => 'کاربر جدید', 'newuserlog-create2-entry' => 'حساب کاربری جدید $1 را ایجاد کرد', @@ -2176,59 +2264,62 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.', 'listgrouprights-removegroup-all' => 'می‌تواند تمام گروه‌ها را حذف کند', 'listgrouprights-addgroup-self' => 'می‌تواند حساب خود را به این {{PLURAL:$2|گروه|گروه‌ها}} اضافه کند: $1', 'listgrouprights-removegroup-self' => 'می‌تواند حساب خود را از این {{PLURAL:$2|گروه|گروه‌ها}} حذف کند: $1', -'listgrouprights-addgroup-self-all' => 'می‌تواند به حساب خود را به تمام گروه‌ها اضافه کند', -'listgrouprights-removegroup-self-all' => 'می‌تواند به حساب خود را از تمام گروه‌ها حذف کند', +'listgrouprights-addgroup-self-all' => 'می‌تواند حساب خود را به تمام گروه‌ها اضافه کند', +'listgrouprights-removegroup-self-all' => 'می‌تواند حساب خود را از تمام گروه‌ها حذف کند', # E-mail user -'mailnologin' => 'نشانی‌ای از فرستنده وجود ندارد.', -'mailnologintext' => 'برای فرستادن پست الکترونیکی به کاربران دیگر باید [[Special:UserLogin|به سامانه وارد شوید]] و نشانی پست الکترونیکی معتبری در [[Special:Preferences|ترجیحات]] خود داشته باشید.', -'emailuser' => 'نامه به این کاربر', -'emailpage' => 'پست الکترونیکی به کاربر', -'emailpagetext' => 'شما می‌توانید از فرم زیر برای ارسال یک نامه الکترونیکی به این کاربر استفاده کنید. +'mailnologin' => 'نشانی‌ای از فرستنده موجود نیست', +'mailnologintext' => 'برای فرستادن پست الکترونیکی به کاربران دیگر باید [[Special:UserLogin|به سامانه وارد شوید]] و نشانی پست الکترونیکی معتبری در [[Special:Preferences|ترجیحات]] خود داشته باشید.', +'emailuser' => 'نامه به این کاربر', +'emailpage' => 'پست الکترونیکی به کاربر', +'emailpagetext' => 'شما می‌توانید از فرم زیر برای ارسال یک نامه الکترونیکی به این کاربر استفاده کنید. نشانی پست الکترونیکی‌ای که در [[Special:Preferences|ترجیحات کاربریتان]] وارد کرده‌اید در نشانی فرستنده (From) نامه خواهد آمد، تا گیرنده بتواند پاسخ دهد.', -'usermailererror' => 'پست الکترونیکی دچار خطا شد:', -'defemailsubject' => 'پست الکترونیکی {{SITENAME}}', -'noemailtitle' => 'نشانی پست الکترونیکی موجود نیست', -'noemailtext' => 'این کاربر نشانی پست الکترونیکی معتبری مشخص نکرده است، -یا تصمیم گرفته از کاربران دیگر پست الکترونیکی دریافت نکند.', -'nowikiemailtitle' => 'اجازهٔ ارسال نامهٔ الکترونیکی داده نشده‌است', -'nowikiemailtext' => 'این کاربر انتخاب کرده که از دیگر کاربران نامهٔ الکترونیکی دریافت نکند.', -'email-legend' => 'ارسال نامه الکترونیکی به یک کاربر دیگر {{SITENAME}}', -'emailfrom' => 'از:', -'emailto' => 'به:', -'emailsubject' => 'عنوان:', -'emailmessage' => 'پیغام:', -'emailsend' => 'فرستاده شود', -'emailccme' => 'رونوشت پیغام را برایم بفرست.', -'emailccsubject' => 'رونوشت پیغام شما به $1: $2', -'emailsent' => 'پست الکترونیکی فرستاده شد', -'emailsenttext' => 'پیغام پست الکترونیکی شما فرستاده شد.', -'emailuserfooter' => 'این نامهٔ الکترونیکی با استفاده از ویژگی «پست الکترونیکی به کاربر» {{SITENAME}} توسط $1 به $2 فرستاده شد.', +'usermailererror' => 'پست الکترونیکی دچار خطا شد:', +'defemailsubject' => 'پست الکترونیکی {{SITENAME}}', +'usermaildisabled' => 'پست الکترونیکی کاربر غیرقعال است', +'usermaildisabledtext' => 'شما در این ویکی نمی‌توانید به دیگر کاربران پست الکترونیکی بفرستید', +'noemailtitle' => 'نشانی پست الکترونیکی موجود نیست', +'noemailtext' => 'این کاربر نشانی پست الکترونیکی معتبری مشخص نکرده است،', +'nowikiemailtitle' => 'اجازهٔ ارسال نامهٔ الکترونیکی داده نشده‌است', +'nowikiemailtext' => 'این کاربر انتخاب کرده که از دیگر کاربران نامهٔ الکترونیکی دریافت نکند.', +'email-legend' => 'ارسال نامه الکترونیکی به یک کاربر دیگر {{SITENAME}}', +'emailfrom' => 'از:', +'emailto' => 'به:', +'emailsubject' => 'عنوان:', +'emailmessage' => 'پیغام:', +'emailsend' => 'فرستاده شود', +'emailccme' => 'رونوشت پیغام را برایم بفرست.', +'emailccsubject' => 'رونوشت پیغام شما به $1: $2', +'emailsent' => 'پست الکترونیکی فرستاده شد', +'emailsenttext' => 'پیغام پست الکترونیکی شما فرستاده شد.', +'emailuserfooter' => 'این نامهٔ الکترونیکی با استفاده از ویژگی «پست الکترونیکی به کاربر» {{SITENAME}} توسط $1 به $2 فرستاده شد.', + +# User Messenger +'usermessage-summary' => 'گذاشتن پیغام سامانه.', +'usermessage-editor' => 'پیغامگیر سامانه', # Watchlist 'watchlist' => 'فهرست پی‌گیری‌های من', 'mywatchlist' => 'پی‌گیری‌های من', -'watchlistfor' => "(برای '''$1''')", +'watchlistfor2' => 'برای $1 $2', 'nowatchlist' => 'در فهرست پی‌گیری‌های شما هیچ موردی نیست.', 'watchlistanontext' => 'برای مشاهده و ویرایش فهرست پی‌گیری‌های خود از $1 استفاده کنید.', 'watchnologin' => 'به سامانه وارد نشده‌اید', 'watchnologintext' => 'برای تغییر فهرست پی‌گیری‌هایتان باید [[Special:UserLogin|به سامانه وارد شوید]].', -'addedwatch' => 'به فهرست پی‌گیری اضافه شد', -'addedwatchtext' => "صفحهٔ «$1» به [[Special:Watchlist|فهرست پی‌گیری‌های]] شما اضافه شد. -تغییرات این صفحه و صفحهٔ بحث متناظرش در آینده در اینجا فهرست خواهد شد. به‌علاوه، این صفحه، برای واضح‌تر دیده شدن در [[Special:RecentChanges|فهرست تغییرات اخیر]] به شکل سیاه خواهد آمد. - -اگر بعداً می‌خواستید این صفحه از فهرست پی‌گیریهایتان برداشته شود، روی «'''توقف پی‌گیری'''» در بالای صفحه کلیک کنید.", +'addedwatch' => 'به فهرست پی‌گیری افزوده شد', +'addedwatchtext' => 'صفحهٔ «$1» به [[Special:Watchlist|فهرست پی‌گیری‌های]] شما اضافه شد. +تغییرات این صفحه و صفحهٔ بحث متناظرش در آینده در اینجا فهرست خواهد شد؛ به‌علاوه، این صفحه، برای واضح‌تر دیده شدن در [[Special:RecentChanges|فهرست تغییرات اخیر]] به شکل پررنگ نمایش خواهد یافت.', 'removedwatch' => 'از فهرست پی‌گیری‌ها برداشته شد', 'removedwatchtext' => 'صفحهٔ «[[:$1]]» از [[Special:Watchlist|فهرست پی‌گیری‌های شما]] برداشته شد.', 'watch' => 'پی‌گیری', 'watchthispage' => 'پی‌گیری این صفحه', 'unwatch' => 'توقف پی‌گیری', 'unwatchthispage' => 'توقف پی‌گیری', -'notanarticle' => 'مقاله نیست', -'notvisiblerev' => 'این نسخه حذف شده‌است', +'notanarticle' => 'صفحه محتوایی نیست', +'notvisiblerev' => 'آخرین نسخه توسط کاربری دیگر حذف شده‌است', 'watchnochange' => 'هیچ یک از موارد در حال پی‌گیری شما در دورهٔ زمانی نمایش‌یافته ویرایش نشده است.', -'watchlist-details' => 'بدون احتساب صفحه‌های بحث، {{PLURAL:$1|$1 صفحه|$1 صفحه}} در فهرست پی‌گیری‌های شما قرار {{PLURAL:$1|دارند|دارد}}.', -'wlheader-enotif' => '*اطلاع‌رسانی ایمیلی امکان‌پذیر است.', +'watchlist-details' => 'بدون احتساب صفحه‌های بحث، {{PLURAL:$1|$1 صفحه|$1 صفحه}} در فهرست پی‌گیری‌های شما قرار {{PLURAL:$1|دارد|دارتد}}.', +'wlheader-enotif' => '*اطلاع‌رسانی از طریق پست الکترونیکی امکان‌پذیر است.', 'wlheader-showupdated' => "*صفحه‌هایی که پس از آخرین سرزدنتان به آنها تغییر کرده‌اند '''پررنگ''' نشان داده شده‌اند.", 'watchmethod-recent' => 'بررسی ویرایش‌های اخیر برای صفحه‌های مورد پی‌گیری', 'watchmethod-list' => 'بررسی صفحه‌های مورد پی‌گیری برای ویرایش‌های اخیر', @@ -2247,14 +2338,14 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.', 'enotif_newpagetext' => 'این یک صفحهٔ تازه‌است.', 'enotif_impersonal_salutation' => 'کاربر {{SITENAME}}', 'changed' => 'تغییر یافته', -'created' => 'ایجاد شد', +'created' => 'ایجاد شده', 'enotif_subject' => 'صفحهٔ «$PAGETITLE» {{SITENAME}} به دست $PAGEEDITOR $CHANGEDORCREATED‌است.', 'enotif_lastvisited' => 'برای دیدن همهٔ تغییرات از آخرین باری که سر زده‌اید $1 را ببینید.', 'enotif_lastdiff' => 'برای نمایش این تغییر $1 را ببینید.', 'enotif_anon_editor' => 'کاربر ناشناس $1', 'enotif_body' => '$WATCHINGUSERNAME گرامی، -صفحهٔ «$PAGETITLE» {{SITENAME}} در $PAGEEDITDATE به دست $PAGEEDITOR $CHANGEDORCREATED است. برای دیدن نسخهٔ کنونی به $PAGETITLE_URL بروید. +صفحهٔ «$PAGETITLE» {{SITENAME}} در $PAGEEDITDATE به‌دست $PAGEEDITOR $CHANGEDORCREATED است. برای دیدن نسخهٔ کنونی $PAGETITLE_URL را ببینید. $NEWPAGE @@ -2267,17 +2358,17 @@ $NEWPAGE تا هنگامی که به صفحه سر نزده‌اید، در صورت رخ‌دادنِ احتمالیِ تغییراتِ بیشتر، اعلانیه‌ای برای شما فرستاده نخواهد شد. شما همچنین می‌توانید در صفحهٔ پی‌گیری‌های خود پرچم‌های مربوط به آگاهی‌رسانی پستی را صفر کنید. -خاکسار شما، - -سامانهٔ آگاهی‌رسانی {{SITENAME}}. + دوستدار شما، سامانهٔ آگاهی‌رسانی {{SITENAME}} -- +برای تغییر تنظیمات فهرست آگاهی‌رسانی رایانامه‌ای شما به {{fullurl:{{#special:Watchlist}}/edit}} بروید. + برای تغییر تنظیمات فهرست پی‌گیری‌هایتان به {{fullurl:{{#special:Watchlist}}/edit}} بروید. برای حذف صفحه از فهرصت پی‌گیری‌هایتان به $UNWATCHURL بروید. بازخورد و کمک بیشتر: -{{fullurl:{{ns:help}}:Contents}}', +{{fullurl:{{MediaWiki:Helppage}}}}', # Delete 'deletepage' => 'حذف صفحه', @@ -2309,7 +2400,7 @@ $NEWPAGE ** درخواست کاربر ** نقض حق تکثیر ** خرابکاری', -'delete-edit-reasonlist' => 'ویرایش فهرست دلایل', +'delete-edit-reasonlist' => 'ویرایش دلایل حذف', 'delete-toobig' => 'این صفحه تاریخچهٔ ویرایشی بزرگی دارد، که شامل بیش از $1 {{PLURAL:$1|نسخه|نسخه}} است. به منظور جلوگیری از خرابکاری احتمالی حذف این گونه صفحه‌ها در {{SITENAME}} محدود شده‌است.', 'delete-warning-toobig' => 'این صفحه تاریخچهٔ ویرایشی بزرگی دارد، که شامل بیش از $1 {{PLURAL:$1|نسخه|نسخه}} است. @@ -2330,28 +2421,34 @@ $NEWPAGE 'revertpage' => 'ویرایش [[Special:Contributions/$2|$2]] ([[User talk:$2|بحث]]) به آخرین تغییری که [[User:$1|$1]] انجام داده بود واگردانده شد', 'revertpage-nouser' => 'ویرایش‌های انجام شده توسط (نام کاربری حذف شده) به آخرین ویرایش توسط [[User:$1|$1]] واگردانی شد.', 'rollback-success' => 'ویرایش‌های $1 واگردانی شد؛ صفحه به ویرایش $2 برگردانده شد.', -'sessionfailure' => 'به نظر می‌رسد مشکلی در مورد نشست کاربری شما وجود دارد؛ عمل درخواست شده به‌عنوان اقدام پیشگیرانه در برابر ربوده‌شدن اطلاعات نشست کاربری، لغو شد. لطفاً دکمهٔ «بازگشت» را در مرورگر خود بفشارید و صفحه‌ای که از آن به اینجا رسیده‌اید را دوباره فراخوانی کنید، سپس مجدداً سعی کنید.', + +# Edit tokens +'sessionfailure-title' => 'خطای نشست کاربری', +'sessionfailure' => 'به نظر می‌رسد مشکلی در مورد نشست کاربری شما وجود دارد؛ عمل درخواست شده به‌عنوان اقدام پیشگیرانه در برابر ربوده‌شدن اطلاعات نشست کاربری، لغو شد. لطفاً دکمهٔ «بازگشت» را در مرورگر خود بفشارید و صفحه‌ای که از آن به اینجا رسیده‌اید را دوباره فراخوانی کنید، سپس مجدداً سعی کنید.', # Protect 'protectlogpage' => 'سیاههٔ_محافظت', -'protectlogtext' => 'در زیر فهرست قفل کردن‌ها/ازقفل‌درآوردن‌های صفحه‌ها آمده است. -برای اطلاعات بیشتر به [[{{ns:project}}:سیاست حفاظت از صفحه‌ها]] مراجعه کنید.', +'protectlogtext' => 'در زیر فهرست محافظت کردن‌ها/از محافظت درآوردن‌های صفحه‌ها آمده است. +برای اطلاعات بیشتر به [[{{ns:project}}:سیاست محافظت از صفحه‌ها]] مراجعه کنید.', 'protectedarticle' => '«[[$1]]» را محافظت کرد', 'modifiedarticleprotection' => 'وضعیت محافظت «[[$1]]» را تغییر داد', 'unprotectedarticle' => '[[$1]] را از محافظت به در آورد', 'movedarticleprotection' => 'تنظیمات محافظت را از «[[$2]]» به «[[$1]]» منتقل کرد', 'protect-title' => 'تغییر وضعیت محافظت «$1»', 'prot_1movedto2' => '$1 به $2 منتقل شد', -'protect-legend' => 'تأیید حفاظت', +'protect-legend' => 'تأیید محافظت', 'protectcomment' => 'دلیل:', 'protectexpiry' => 'زمان سرآمدن:', 'protect_expiry_invalid' => 'زمان سرآمدن نامعتبر است.', 'protect_expiry_old' => 'زمان سرآمدن در گذشته‌است.', -'protect-unchain-permissions' => 'باز کردن سایر گزینه‌های حفاظت', -'protect-text' => "شما می‌توانید سطح حفاظت صفحهٔ '''$1''' را ببینید و از اینجا آن را تغییر دهید.", -'protect-locked-blocked' => 'شما در مدتی که دسترسی‌تان قطع است نمی‌توانید سطح حفاظت صفحه‌ها را تغییر دهید. تنظیمات فعلی صفحهٔ $1 به این قرار است:', -'protect-locked-dblock' => 'به دلیل قفل شدن پایگاه داده، امکان تغییر سطح حفاظت صفحه وجود ندارد. تنظیمات فعلی صفحهٔ $1 به این قرار است:', -'protect-locked-access' => 'حساب کاربری شما اجازهٔ تغییر سطح حفاظت صفحه را ندارد. تنظیمات فعلی صفحهٔ $1 به این قرار است:', +'protect-unchain-permissions' => 'باز کردن سایر گزینه‌های محافظت', +'protect-text' => "شما می‌توانید سطح محافظت صفحهٔ '''$1''' را ببینید و از اینجا آن را تغییر دهید.", +'protect-locked-blocked' => 'شما در مدتی که دسترسی‌تان قطع است نمی‌توانید سطح محافظت صفحه‌ها را تغییر دهید. +تنظیمات فعلی صفحهٔ $1 از این قرار است:', +'protect-locked-dblock' => 'به دلیل قفل شدن پایگاه داده، امکان تغییر سطح محافظت صفحه وجود ندارد. +تنظیمات فعلی صفحهٔ $1 به این قرار است:', +'protect-locked-access' => 'حساب کاربری شما اجازهٔ تغییر سطح محافظت صفحه را ندارد. +تنظیمات فعلی صفحهٔ $1 به این قرار است:', 'protect-cascadeon' => 'این صفحه در حال حاضر محافظت شده‌است زیرا در {{PLURAL:$1|صفحهٔ|صفحه‌های}} زیر که گزینهٔ محافظت آبشاری {{PLURAL:$1|آن|آن‌ها}} فعال است، شما می‌توانید سطح محافظت این صفحه را تغییر بدهید اما این کار تاثیری بر محافظت آبشاری صفحه نخواهد گذاشت.', 'protect-default' => 'همهٔ کاربرها', @@ -2362,7 +2459,7 @@ $NEWPAGE 'protect-expiring' => 'زمان سرآمدن $1 (UTC)', 'protect-expiry-indefinite' => 'بی‌پایان', 'protect-cascade' => 'محافظت آبشاری - از همهٔ صفحه‌هایی که در این صفحه آمده‌اند نیز محافظت می‌شود.', -'protect-cantedit' => 'شما نمی‌تواند وضعیت حفاظت این صفحه را تغییر دهید، چون اجازه ویرایش آن را ندارید.', +'protect-cantedit' => 'شما نمی‌تواند وضعیت محافظت این صفحه را تغییر دهید، چون اجازه ویرایش آن را ندارید.', 'protect-othertime' => 'زمانی دیگر:', 'protect-othertime-op' => 'زمانی دیگر', 'protect-existing-expiry' => 'زمان انقضای موجود: $2، $3', @@ -2458,18 +2555,22 @@ $1', 'month' => 'در این ماه (و پیش از آن):', 'year' => 'در این سال (و قبل از آن)', -'sp-contributions-newbies' => 'فقط مشارکت‌های تازه‌واردان نمایش داده شود', -'sp-contributions-newbies-sub' => 'برای تازه‌کاران', -'sp-contributions-newbies-title' => 'مشارکت‌های کاربری برای حساب‌های تازه‌کار', -'sp-contributions-blocklog' => 'سیاههٔ بسته‌شدن‌ها', -'sp-contributions-deleted' => 'مشارکت‌های حذف شدهٔ کاربر', -'sp-contributions-logs' => 'سیاهه‌ها', -'sp-contributions-talk' => 'بحث', -'sp-contributions-userrights' => 'مدیریت اختیارات کاربر', -'sp-contributions-blocked-notice' => 'این کاربر در حال حاضر بسته شده‌است. آخرین سیاههٔ بسته شدن در زیر آمده‌است:', -'sp-contributions-search' => 'جستجوی مشارکت‌ها', -'sp-contributions-username' => 'نشانی آی‌پی یا نام کاربری:', -'sp-contributions-submit' => 'جستجو', +'sp-contributions-newbies' => 'فقط مشارکت‌های تازه‌واردان نمایش داده شود', +'sp-contributions-newbies-sub' => 'برای تازه‌کاران', +'sp-contributions-newbies-title' => 'مشارکت‌های کاربری برای حساب‌های تازه‌کار', +'sp-contributions-blocklog' => 'سیاههٔ بسته‌شدن‌ها', +'sp-contributions-deleted' => 'مشارکت‌های حذف شدهٔ کاربر', +'sp-contributions-uploads' => 'بارگذاری‌ها', +'sp-contributions-logs' => 'سیاهه‌ها', +'sp-contributions-talk' => 'بحث', +'sp-contributions-userrights' => 'مدیریت اختیارات کاربر', +'sp-contributions-blocked-notice' => 'این کاربر در حال حاضر بسته شده‌است. آخرین سیاههٔ بسته شدن در زیر آمده‌است:', +'sp-contributions-blocked-notice-anon' => 'این نشانی آی‌پی در حال حاضر بسته است. +آخرین سیاههٔ بسته شدن در زیر آمده‌است:', +'sp-contributions-search' => 'جستجوی مشارکت‌ها', +'sp-contributions-username' => 'نشانی آی‌پی یا نام کاربری:', +'sp-contributions-toponly' => 'تنها نسخه‌های بالایی را نمایش بده', +'sp-contributions-submit' => 'جستجو', # What links here 'whatlinkshere' => 'پیوندها به این صفحه', @@ -2484,7 +2585,7 @@ $1', 'whatlinkshere-prev' => '{{PLURAL:$1|قبلی|$1 مورد قبلی}}', 'whatlinkshere-next' => '{{PLURAL:$1|بعدی|$1 مورد بعدی}}', 'whatlinkshere-links' => '← پیوندها', -'whatlinkshere-hideredirs' => '$1 تغییرمسیر', +'whatlinkshere-hideredirs' => '$1 تغییر مسیر', 'whatlinkshere-hidetrans' => '$1 تراگنجانش', 'whatlinkshere-hidelinks' => '$1 پیوند', 'whatlinkshere-hideimages' => '$1 پیوند به تصویر', @@ -2530,7 +2631,6 @@ $1', 'ipb-edit-dropdown' => 'دلایل قطع دسترسی', 'ipb-unblock-addr' => 'بازکردن $1', 'ipb-unblock' => 'باز کردن نام کاربری یا نشانی آی‌پی', -'ipb-blocklist-addr' => 'بستن‌های موجود برای $1', 'ipb-blocklist' => 'دیدنِ بَست‌های موجود', 'ipb-blocklist-contribs' => 'مشارکت‌های $1', 'unblockip' => 'باز کردن کاربر', @@ -2565,8 +2665,10 @@ $1', 'autoblocker' => 'به طور خودکار بسته شد چون آی‌پی شما به تازگی توسط کاربر «[[User:$1|$1]]» استفاده شده‌است. دلیل قطع دسترسی $1 چنین است: «$2»', 'blocklogpage' => 'سیاههٔ_بسته‌شدن‌ها', -'blocklog-showlog' => 'دسترسی این کاربر قبلاً بسته شده‌است. سیاههٔ قطع دسترسی در زیر نمایش یافته است:', -'blocklog-showsuppresslog' => 'دسترسی این کاربر قبلاً بسته شده و این کاربر پنهان شده‌است. سیاههٔ قطع دسترسی در زیر نمایش یافته است:', +'blocklog-showlog' => 'دسترسی این کاربر در گذشته بسته شده‌است. +سیاههٔ قطع دسترسی در زیر نمایش یافته است:', +'blocklog-showsuppresslog' => 'دسترسی این کاربر قبلاً بسته شده و این کاربر پنهان شده‌است. +سیاههٔ قطع دسترسی در زیر نمایش یافته است:', 'blocklogentry' => '«[[$1]]» را $2 بست $3', 'reblock-logentry' => 'تنظیم‌های قطع دسترسی [[$1]] را تغییر داد به پایان قطع دسترسی در $2 $3', 'blocklogtext' => 'این سیاهه‌ای از اعمال بستن و باز کردن کاربرها است. @@ -2574,7 +2676,7 @@ $1', برای فهرست محرومیت‌ها و بسته‌شدن‌های عملیاتی در لحظهٔ حاضر، به [[Special:IPBlockList|فهرست آی‌پی‌های بسته]] مراجعه کنید.', 'unblocklogentry' => '«$1» را باز کرد', 'block-log-flags-anononly' => 'فقط کاربران گمنام', -'block-log-flags-nocreate' => 'قابلیت ایجاد حساب غیرفعال شد.', +'block-log-flags-nocreate' => 'قابلیت ایجاد حساب غیرفعال شد', 'block-log-flags-noautoblock' => 'قطع دسترسی خودکار غیرفعال شد', 'block-log-flags-noemail' => 'پست الکترونیکی مسدود شد', 'block-log-flags-nousertalk' => 'صفحهٔ بحث خود را نمی‌تواند ویرایش کند', @@ -2604,6 +2706,8 @@ $1', شما اجازهٔ ساختن حساب کاربری ندارید.', 'cant-block-while-blocked' => 'در مدتی که دسترسی شما بسته است نمی‌توانید دسترسی کاربران دیگر را قطع کنید.', 'cant-see-hidden-user' => 'کاربری که می‌خواهید ببندید قبلاً بسته شده و پنهان گردیده است. چون شما دسترسی پنهان کردن کاربران را ندارید، نمی‌توانید قطع دسترسی کاربر را ببینید یا ویرایش کنید.', +'ipbblocked' => 'شما نمی‌توانید دسترسی دیگر کاربران را ببندید یا باز کنید زیرا دسترسی خودتان بسته است.', +'ipbnounblockself' => 'شما مجاز به باز کردن دسترسی خود نیستید.', # Developer tools 'lockdb' => 'قفل کردن پایگاه داده', @@ -2640,6 +2744,17 @@ $1', '''هشدار!''' انتقال صفحه‌ها به نام جدید ممکن است تغییر اساسی و غیرمنتظره‌ای برای صفحه‌های محبوب باشد؛ لطفاً مطمئن شوید که قبل از انتقال دادن صفحه، عواقب این کار را درک می‌کنید.", +'movepagetext-noredirectfixer' => "استفاده از فرم زیر سبب تغییر نام یک صفحه و انتقال تمام تاریخچهٔ آن به نام جدید می‌شود. +نام پیشین تغییر مسیری به نام جدید خواهد شد. +برای اطمینان [[Special:DoubleRedirects|تغییر مسیرهای دوتایی]] یا [[Special:BrokenRedirects|تغییر مسیهای خراب]] را بررسی کنید. +دربارهٔ اینکه پیوندها جایی که قرار است بروند را دنبال کنند، شما مسئول هستید. + +توجه کنید که اگر نام جدید از قبل ایجاد شده باشد، انتقال انجام نخواهد گرفت، مگر در حالتی که صفحه خالی باشد و یا تغییر مسیر باشد و تاریخچهٔ ویرایشی دیگری نداشته باشد. +این بدان معناست که اگر صفحه را اشتباهی منتقل کردید می‌توانید این تغییر را وابگردانید، اما نمی‌توانید به صفحه‌ای که از قبل موجود است انتقال دهید. + +'''هشدار!''' +انتقال صفحه‌های محبوب می‌تواند غیر منتظره باشد. +لطفاً مطمئن شوید که از نتیجهٔ کار آگاهید.", 'movepagetalktext' => "صفحهٔ بحث مربوط، اگر وجود داشته باشد، بطور خودکار همراه با مقالهٔ اصلی منتقل خواهد شد '''مگر اینکه''' : * در حال انتقال صفحه از این فضای نام به فضای نام دیگری باشید، * یک صفحهٔ بحث غیرخالی تحت این نام جدید وجود داشته باشد، یا @@ -2688,7 +2803,7 @@ $1', 'delete_and_move' => 'حذف و انتقال', 'delete_and_move_text' => '== نیاز به حذف == -مقاله‌ٔ مقصد «[[:$1]]» وجود دارد. آیا می‌خواهید آن را حذف کنید تا انتقال ممکن شود؟', +مقالهٔ مقصد «[[:$1]]» وجود دارد. آیا می‌خواهید آن را حذف کنید تا انتقال ممکن شود؟', 'delete_and_move_confirm' => 'بله، صفحه حذف شود', 'delete_and_move_reason' => 'حذف برای ممکن‌شدن انتقال', 'selfmove' => 'عنوان‌های صفحهٔ مبدأ و مقصد یکی است؛ انتقال صفحه به خودش ممکن نیست.', @@ -2698,6 +2813,7 @@ $1', 'immobile-source-page' => 'این صفحه قابل انتقال نیست.', 'immobile-target-page' => 'امکان انتقال به این عنوان مقصد وجود ندارد.', 'imagenocrossnamespace' => 'امکان انتقال تصویر به فضای نام غیر تصویر وجود ندارد', +'nonfile-cannot-move-to-file' => 'امکان انتقال محتوای غیر تصویر به فضای نام تصویر وجود ندارد', 'imagetypemismatch' => 'پسوند پرونده جدید با نوع آن سازگار نیست', 'imageinvalidfilename' => 'نام پروندهٔ هدف غیر مجاز است', 'fix-double-redirects' => 'به روز کردن تمامی تغییر مسیرهایی که به مقالهٔ اصلی اشاره می‌کنند', @@ -2776,6 +2892,7 @@ $1', 'importstart' => 'در حال درون‌ریزی صفحه‌ها...', 'import-revision-count' => '$1 {{PLURAL:$1|ویرایش|ویرایش}}', 'importnopages' => 'صفحه‌ای برای درون‌ریزی نیست.', +'imported-log-entries' => '$1 {{PLURAL:$1|مورد سیاهه|مورد سیاهه}} درون ریزی شد.', 'importfailed' => 'درون‌ریزی صفحه‌ها شکست خورد: $1', 'importunknownsource' => 'نوع مأخذ درون‌ریزی معلوم نیست', 'importcantopen' => 'پروندهٔ درون‌ریزی صفحه‌ها باز نشد', @@ -2868,6 +2985,8 @@ $1', 'tooltip-upload' => 'شروع بارگذاری', 'tooltip-rollback' => '«واگردانی» ویرایش(های) آخرین ویرایش‌کننده در این صفحه را با یک کلیک باز می‌گرداند.', 'tooltip-undo' => '«خنثی‌سازی» این ویرایش را خنثی می‌کند و فرم ویرایش را در حالت پیش‌نمایش باز می‌کند تا امکان افزودن دلیلی در خلاصه ویرایش را بدهد.', +'tooltip-preferences-save' => 'ذخیره کردن ترجیحات', +'tooltip-summary' => 'خلاصه‌ای وارد کنید', # Stylesheets 'common.css' => '/* دستورات این بخش همهٔ کاربران را تحت تاثیر قرار می‌دهند. */', @@ -2891,10 +3010,10 @@ $1', 'nocredits' => 'اطلاعات سازندگان این صفحه موجود نیست.', # Spam protection -'spamprotectiontitle' => 'پالایه هرزنگاری‌ها', +'spamprotectiontitle' => 'پالایهٔ هرزنگاری‌ها', 'spamprotectiontext' => 'از ذخیره کردن صفحه توسط صافی هرزنگاری‌ها جلوگیری شد. معمولاً این اتفاق زمانی می‌افتد که متن جدید صفحه، حاوی پیوندی به یک نشانی وب خارجی باشد.', -'spamprotectionmatch' => 'متن زیر چیزی‌است که پالایه هرزه‌نگاری ما را به کارانداخت: $1', +'spamprotectionmatch' => 'متن زیر چیزی‌است که پالایهٔ هرزه‌نگاری ما را به کارانداخت: $1', 'spambot_username' => 'هرزه‌تمیزکارِ مدیاویکی', 'spam_reverting' => 'واگردانی به آخرین نسخه‌ای که پیوندی به $1 ندارد.', 'spam_blanking' => 'تمام نسخه‌ها حاوی پیوند به $1 بود، در حال خالی کردن', @@ -2953,7 +3072,7 @@ $1', 'patrol-log-header' => 'این سیاهه‌ای از ویرایش‌های گشت‌خورده است.', 'patrol-log-line' => 'به $1 از $2 برچسب گشت زد $3', 'patrol-log-auto' => '(خودکار)', -'patrol-log-diff' => 'نسخه $1', +'patrol-log-diff' => 'نسخهٔ $1', 'log-show-hide-patrol' => 'سیاههٔ گشت‌زنی $1', # Image deletion @@ -2979,13 +3098,16 @@ $1', 'widthheight' => '$1 در $2', 'widthheightpage' => '$1×$2، $3 {{PLURAL:$3|صفحه|صفحه}}', 'file-info' => 'اندازهٔ پرونده: $1، نوع MIME $2', -'file-info-size' => '($1 X $2 پیکسل، اندازهٔ پرونده: $3، نوع MIME پرونده: $4)', +'file-info-size' => '$1 × $2 پیکسل، اندازهٔ پرونده: $3، نوع MIME پرونده: $4', 'file-nohires' => 'تفکیک‌پذیری بالاتری در دسترس نیست.', -'svg-long-desc' => '(پرونده SVG، با ابعاد $1 × $2 پیکسل، اندازه پرونده: $3)', +'svg-long-desc' => 'پروندهٔ اس‌وی‌جی، با ابعاد $1 × $2 پیکسل، اندازهٔ پرونده: $3', 'show-big-image' => 'تصویر با تفکیک‌پذیری بالاتر', 'show-big-image-thumb' => 'اندازهٔ این پیش‌نمایش: $1 × $2 پیکسل', 'file-info-gif-looped' => 'حلقه‌ای', 'file-info-gif-frames' => '$1 {{PLURAL:$1|قاب|قاب}}', +'file-info-png-looped' => 'حلقه‌ای', +'file-info-png-repeat' => '$1 {{PLURAL:$1|بار|بار}} پخش شد', +'file-info-png-frames' => '$1 {{PLURAL:$1|قاب|قاب}}', # Special:NewFiles 'newimages' => 'نگارخانهٔ پرونده‌های جدید', @@ -3139,6 +3261,7 @@ $1', 'exif-gpsareainformation' => 'نام ناحیهٔ جی‌پی‌اس', 'exif-gpsdatestamp' => 'تاریخ جی‌پی‌اس', 'exif-gpsdifferential' => 'تصحیح جزئی جی‌پی‌اس', +'exif-objectname' => 'عنوان کوتاه', # EXIF attributes 'exif-compression-1' => 'غیرفشرده', @@ -3301,27 +3424,27 @@ $1', 'limitall' => 'همه', # E-mail address confirmation -'confirmemail' => 'تأیید نشانی پست الکترونیکی', -'confirmemail_noemail' => 'شما در صفحهٔ [[Special:Preferences|ترجیحات کاربری]] خود نشانی پست الکترونیکی معتبری وارد نکرده‌اید.', -'confirmemail_text' => 'این ویکی شما را ملزم به تأیید اعتبار پست الکترونیکی خود، پیش از استفاده از خدمات پست الکترونیکی در اینجا می‌کند. دکمهٔ زیرین را فعال کنید تا نامهٔ تأییدی به نشانی پست الکترونیکی شما فرستاده شود. این نامه دربردارندهٔ پیوندی خواهد بود که حاوی یک کد است. پیوند را در مرورگر خود بار کنید (اجرا) کنید تا اعتبار نشانی پست الکترونیکی شما مسجل شود.', -'confirmemail_pending' => 'یک کد تأییدی پیشتر برای شما به صورت الکترونیکی فرستاده شده‌است. اگر همین اواخر حساب خود را باز کرده‌اید شاید بد نباشد که پیش از درخواست یک کد جدید چند دقیقه درنگ کنید تا شاید نامهٔ قبلی برسد.', -'confirmemail_send' => 'پُست‌کردن یک کد تأیید', -'confirmemail_sent' => 'نامهٔ الکترونیکی تأییدی فرستاده شد.', -'confirmemail_oncreate' => 'یک کد تأییدی به نشانی پست الکترونیکی شما فرستاده شد. +'confirmemail' => 'تأیید نشانی پست الکترونیکی', +'confirmemail_noemail' => 'شما در صفحهٔ [[Special:Preferences|ترجیحات کاربری]] خود نشانی پست الکترونیکی معتبری وارد نکرده‌اید.', +'confirmemail_text' => 'این ویکی شما را ملزم به تأیید اعتبار پست الکترونیکی خود، پیش از استفاده از خدمات پست الکترونیکی در اینجا می‌کند. دکمهٔ زیرین را فعال کنید تا نامهٔ تأییدی به نشانی پست الکترونیکی شما فرستاده شود. این نامه دربردارندهٔ پیوندی خواهد بود که حاوی یک کد است. پیوند را در مرورگر خود بار کنید (اجرا) کنید تا اعتبار نشانی پست الکترونیکی شما مسجل شود.', +'confirmemail_pending' => 'یک کد تأییدی پیشتر برای شما به صورت الکترونیکی فرستاده شده‌است. اگر همین اواخر حساب خود را باز کرده‌اید شاید بد نباشد که پیش از درخواست یک کد جدید چند دقیقه درنگ کنید تا شاید نامهٔ قبلی برسد.', +'confirmemail_send' => 'پُست‌کردن یک کد تأیید', +'confirmemail_sent' => 'نامهٔ الکترونیکی تأییدی فرستاده شد.', +'confirmemail_oncreate' => 'یک کد تأییدی به نشانی پست الکترونیکی شما فرستاده شد. برای واردشدن به سامانه نیازی به این کد نیست، ولی برای راه‌اندازی امکانات وابسته به پست الکترونیکی در این ویکی به آن نیاز خواهید داشت.', -'confirmemail_sendfailed' => 'فرستادن پست الکترونیکی تأییدی ممکن نشد. +'confirmemail_sendfailed' => 'فرستادن پست الکترونیکی تأییدی ممکن نشد. نشانی پست الکترونیکی را از نظر وجود نویسه‌های نامعتبر بررسی کنید. پاسخ سامانه ارسال پست الکترونیکی: $1', -'confirmemail_invalid' => 'کد تأیید نامعتبر است. ممکن است که منقضی شده باشد.', -'confirmemail_needlogin' => 'برای تأیید نشانی پست الکترونیکی‌تان نیاز به $1 دارید.', -'confirmemail_success' => 'نشانی پست الکترونیکی شما تأیید شده‌است. +'confirmemail_invalid' => 'کد تأیید نامعتبر است. ممکن است که منقضی شده باشد.', +'confirmemail_needlogin' => 'برای تأیید نشانی پست الکترونیکی‌تان نیاز به $1 دارید.', +'confirmemail_success' => 'نشانی پست الکترونیکی شما تأیید شده‌است. اینک می‌توانید [[Special:UserLogin|به سامانه وارد شوید]] و از ویکی لذت ببرید.', -'confirmemail_loggedin' => 'نشانی پست الکترونیکی شما تأیید شد.', -'confirmemail_error' => 'هنگام ذخیرهٔ تأیید شما به مشکلی برخورده شد.', -'confirmemail_subject' => 'تأیید نشانی پست الکترونیکی شما {{SITENAME}}', -'confirmemail_body' => 'یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 حساب کاربری‌ای با نام «$2» و این نشانی پست الکترونیکی در {{SITENAME}} ایجاد کرده‌است. +'confirmemail_loggedin' => 'نشانی پست الکترونیکی شما تأیید شد.', +'confirmemail_error' => 'هنگام ذخیرهٔ تأیید شما به مشکلی برخورده شد.', +'confirmemail_subject' => 'تأیید نشانی پست الکترونیکی شما {{SITENAME}}', +'confirmemail_body' => 'یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 حساب کاربری‌ای با نام «$2» و این نشانی پست الکترونیکی در {{SITENAME}} ایجاد کرده‌است. برای تأیید این که این حساب واقعاً متعلق به شماست و نیز برای فعال‌سازی امکانات پست الکترونیک {{SITENAME}} پیوند زیر را در مرورگر اینترنت خود باز کنید: @@ -3334,8 +3457,30 @@ $5 این کدِ تأیید در تاریخ $4 منقضی خواهد شد. ', -'confirmemail_invalidated' => 'تأیید نشانی پست الکترونیکی لغو شد', -'invalidateemail' => 'لغو کردن تأیید نشانی پست الکترونیکی', +'confirmemail_body_changed' => 'یک نفر، احتمالأ خود شما، از نشانی آی‌پی $1 نشانی پست الکترونیکی حساب «$2» در {{SITENAME}} را تغییر داده‌است. + +برای تأیید این که این حساب واقعاً به شما تعلق دارد و فعال کردن دوبارهٔ ویژگی پست الکترونیک در {{SITENAME}}، پیوند زیر را در مرورگرتان باز کنید: + +$3 + +اگر این حساب متعلق به شما نیست، پیوند زیر را دنبال کنید تا تغییر پست الکترونیکی را لغو کنید: + +$5 + +این تأییدیه در $4 منقضی می‌گردد.', +'confirmemail_body_set' => 'یک نفر، احتمالأ خود شما، از نشانی آی‌پی $1 نشانی پست الکترونیکی حساب «$2» در {{SITENAME}} را به این نشانی تغییر داده‌است. + +برای تأیید این که این حساب واقعاً به شما تعلق دارد و فعال کردن دوبارهٔ ویژگی پست الکترونیک در {{SITENAME}}، پیوند زیر را در مرورگرتان باز کنید: + +$3 + +اگر این حساب متعلق به شما نیست، پیوند زیر را دنبال کنید تا تغییر پست الکترونیکی را لغو کنید: + +$5 + +این تأییدیه در $4 منقضی می‌گردد.', +'confirmemail_invalidated' => 'تأیید نشانی پست الکترونیکی لغو شد', +'invalidateemail' => 'لغو کردن تأیید نشانی پست الکترونیکی', # Scary transclusion 'scarytranscludedisabled' => '[تراگنجانش بین‌ویکیانه فعال نیست]', @@ -3379,6 +3524,7 @@ $1', 'table_pager_first' => 'صفحهٔ نخست', 'table_pager_last' => 'صفحهٔ آخر', 'table_pager_limit' => 'نمایش $1 مورد در هر صفحه', +'table_pager_limit_label' => 'تعداد موارد در هر صفحه:', 'table_pager_limit_submit' => 'برو', 'table_pager_empty' => 'هیچ نتیجه', @@ -3498,6 +3644,7 @@ $1', 'version-specialpages' => 'صفحه‌های ویژه', 'version-parserhooks' => 'قلاب‌های تجزیه‌گر', 'version-variables' => 'متغیرها', +'version-skins' => 'پوسته‌ها', 'version-other' => 'غیره', 'version-mediahandlers' => 'به‌دست‌گیرنده‌های رسانه‌ها', 'version-hooks' => 'قلاب‌ها', @@ -3510,6 +3657,13 @@ $1', 'version-version' => '(نسخه $1)', 'version-svn-revision' => '(&رلم;r$2)', 'version-license' => 'اجازه‌نامه', +'version-poweredby-credits' => "این ویکی توسط '''[http://www.mediawiki.org/ مدیاویکی]''' پشتیبانی می‌شود، کلیهٔ حقوق محفوظ است © 2001-$1 $2.", +'version-poweredby-others' => 'دیگران', +'version-license-info' => 'مدیاویکی یک نرم‌افزار رایگان است؛ که شما می‌توانید آن را تحت گنو ال‌جی‌پی‌ال که توسط بنیاد نرم‌افزارهای رایگان منتشر شده‌است، باز نشر کنید؛ یا نسخهٔ ۲ از این محوز، یا (بنا به اختیار) نسخه‌های بعدی. + +مدیاویکی منتشر شده‌است به امید اینکه مفید واقع شود، بدون هیچ گونه ضمانتی»؛ بدون ضمانت ضمنی که تجاری یا برای یک کار خاصی مناسب باشد. برای اطلاعات بیشتر مجوز گنو جی‌پی‌ال را مشاهده کنید. + +شما می‌بایست یک [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU General Public License] را همراه این برنامه دریافت کرده باشید؛ اگر نه، بنویسید برای شرکت بنیاد نرم‌افزارهای رایگان، 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA یا آن را [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html به صورت بر خط بخوانید].', 'version-software' => 'نسخهٔ نصب‌شده', 'version-software-product' => 'محصول', 'version-software-version' => 'نسخه', @@ -3578,6 +3732,15 @@ $1', 'tags-edit' => 'ویرایش', 'tags-hitcount' => '$1 {{PLURAL:$1|تغییر|تغییر}}', +# Special:ComparePages +'comparepages' => 'مقایسه صفحه‌ها', +'compare-selector' => 'مقایسه نسخه‌های صفحه‌ها', +'compare-page1' => 'صفحه ۱', +'compare-page2' => 'صفحه ۲', +'compare-rev1' => 'نسخه ۱', +'compare-rev2' => 'نسخه ۲', +'compare-submit' => 'مقایسه', + # Database error messages 'dberr-header' => 'این ویکی یک ایراد دارد', 'dberr-problems' => 'شرمنده! @@ -3595,8 +3758,13 @@ $1', 'htmlform-float-invalid' => 'مقداری که وارد کردید یک عدد نیست.', 'htmlform-int-toolow' => 'مقداری که وارد کردید کمتر از $1 است', 'htmlform-int-toohigh' => 'مقداری که وارد کردید بیشتر از $1 است', +'htmlform-required' => 'این مقدار مورد نیاز است', 'htmlform-submit' => 'ارسال', 'htmlform-reset' => 'خنثی کردن تغییرات', 'htmlform-selectorother-other' => 'دیگر', +# SQLite database support +'sqlite-has-fts' => '$1 با پشتیبانی از جستجو در متن کامل', +'sqlite-no-fts' => '$1 بدون پشتیبانی از جستجو در متن کامل', + ); diff --git a/languages/messages/MessagesFf.php b/languages/messages/MessagesFf.php index 7ad0888d..e7b5cf23 100644 --- a/languages/messages/MessagesFf.php +++ b/languages/messages/MessagesFf.php @@ -10,7 +10,7 @@ * @author Amkoullel */ -$fallback='fr'; +$fallback = 'fr'; $messages = array( 'mytalk' => 'kaldigal am', diff --git a/languages/messages/MessagesFi.php b/languages/messages/MessagesFi.php index 3d450299..53953584 100644 --- a/languages/messages/MessagesFi.php +++ b/languages/messages/MessagesFi.php @@ -27,7 +27,7 @@ * @author לערי ריינהארט */ -$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' ); +$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' ); $namespaceNames = array( NS_MEDIA => 'Media', @@ -161,6 +161,7 @@ $magicWords = array( 'img_top' => array( '1', 'ylös', 'ylhäällä', 'top' ), 'img_middle' => array( '1', 'keskellä', 'middle' ), 'img_bottom' => array( '1', 'alas', 'alhaalla', 'bottom' ), + 'img_link' => array( '1', 'linkki=$1', 'link=$1' ), 'sitename' => array( '1', 'SIVUSTONIMI', 'SITENAME' ), 'ns' => array( '0', 'NA:', 'NS:' ), 'localurl' => array( '0', 'PAIKALLINENOSOITE:', 'LOCALURL:' ), @@ -190,7 +191,7 @@ $magicWords = array( 'language' => array( '0', '#KIELI:', '#LANGUAGE:' ), 'numberofadmins' => array( '1', 'YLLÄPITÄJÄMÄÄRÄ', 'NUMBEROFADMINS' ), 'formatnum' => array( '0', 'MUOTOILELUKU', 'FORMATNUM' ), - 'defaultsort' => array( '1', 'OLETUSAAKKOSTUS', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ), + 'defaultsort' => array( '1', 'AAKKOSTUS:', 'OLETUSAAKKOSTUS:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ), 'filepath' => array( '0', 'TIEDOSTOPOLKU:', 'FILEPATH:' ), 'hiddencat' => array( '1', '__PIILOLUOKKA__', '__HIDDENCAT__' ), 'pagesize' => array( '1', 'SIVUKOKO', 'PAGESIZE' ), @@ -243,6 +244,7 @@ $specialPageAliases = array( 'Allpages' => array( 'Kaikki_sivut' ), 'Prefixindex' => array( 'Etuliiteluettelo' ), 'Ipblocklist' => array( 'Muokkausestot' ), + 'Unblock' => array( 'Poista_esto' ), 'Specialpages' => array( 'Toimintosivut' ), 'Contributions' => array( 'Muokkaukset' ), 'Emailuser' => array( 'Lähetä_sähköpostia' ), @@ -287,6 +289,8 @@ $specialPageAliases = array( 'DeletedContributions' => array( 'Poistetut_muokkaukset' ), 'Tags' => array( 'Merkinnät' ), 'Activeusers' => array( 'Aktiiviset_käyttäjät' ), + 'ComparePages' => array( 'Vertaa_sivuja' ), + 'Badtitle' => array( 'Kelpaamaton_otsikko' ), ); $linkTrail = '/^([a-zäö]+)(.*)$/sDu'; @@ -307,8 +311,7 @@ $messages = array( 'tog-editsection' => 'Näytä muokkauslinkit jokaisen osion yläpuolella', 'tog-editsectiononrightclick' => 'Muokkaa osioita napsauttamalla otsikkoa hiiren oikealla painikkeella (JavaScript)', 'tog-showtoc' => 'Näytä sisällysluettelo sivuille, joilla yli 3 otsikkoa', -'tog-rememberpassword' => 'Muista kirjautuminen eri istuntojen välillä', -'tog-editwidth' => 'Laajenna muokkauskenttä sivun levyiseksi', +'tog-rememberpassword' => 'Muista kirjautumisen tässä selaimessa (enintään $1 {{PLURAL:$1|päivä|päivää}})', 'tog-watchcreations' => 'Lisää luomani sivut tarkkailulistalle', 'tog-watchdefault' => 'Lisää muokkaamani sivut tarkkailulistalle', 'tog-watchmoves' => 'Lisää siirtämäni sivut tarkkailulistalle', @@ -464,31 +467,21 @@ Taivutusmuodot: {{GRAMMAR:genitive|{{SITENAME}}}} (yön) — {{GRAMMAR:partitive 'faqpage' => 'Project:Usein kysytyt kysymykset', # Vector skin -'vector-action-addsection' => 'Lisää aihe', -'vector-action-delete' => 'Poista', -'vector-action-move' => 'Siirrä', -'vector-action-protect' => 'Suojaa', -'vector-action-undelete' => 'Palauta', -'vector-action-unprotect' => 'Muuta suojausta', -'vector-namespace-category' => 'Luokka', -'vector-namespace-help' => 'Ohjesivu', -'vector-namespace-image' => 'Tiedosto', -'vector-namespace-main' => 'Sivu', -'vector-namespace-media' => 'Mediasivu', -'vector-namespace-mediawiki' => 'Järjestelmäviesti', -'vector-namespace-project' => 'Projektisivu', -'vector-namespace-special' => 'Toimintosivu', -'vector-namespace-talk' => 'Keskustelu', -'vector-namespace-template' => 'Malline', -'vector-namespace-user' => 'Käyttäjäsivu', -'vector-view-create' => 'Luo', -'vector-view-edit' => 'Muokkaa', -'vector-view-history' => 'Näytä historia', -'vector-view-view' => 'Lue', -'vector-view-viewsource' => 'Näytä lähdekoodi', -'actions' => 'Toiminnot', -'namespaces' => 'Nimiavaruudet', -'variants' => 'Muuttujat', +'vector-action-addsection' => 'Lisää aihe', +'vector-action-delete' => 'Poista', +'vector-action-move' => 'Siirrä', +'vector-action-protect' => 'Suojaa', +'vector-action-undelete' => 'Palauta', +'vector-action-unprotect' => 'Muuta suojausta', +'vector-simplesearch-preference' => 'Ota käyttöön parannetut hakuehdotukset (vain Vector-ulkoasu)', +'vector-view-create' => 'Luo', +'vector-view-edit' => 'Muokkaa', +'vector-view-history' => 'Näytä historia', +'vector-view-view' => 'Lue', +'vector-view-viewsource' => 'Näytä lähdekoodi', +'actions' => 'Toiminnot', +'namespaces' => 'Nimiavaruudet', +'variants' => 'Muuttujat', 'errorpagetitle' => 'Virhe', 'returnto' => 'Palaa sivulle $1.', @@ -549,6 +542,9 @@ Liian monta käyttäjää yrittää tarkastella tätä sivua. Odota hetki ennen kuin yrität uudelleen. $1', +'pool-timeout' => 'Lukon aikakatkaisu.', +'pool-queuefull' => 'Lukkojono on täysi.', +'pool-errorunknown' => 'Tuntematon virhe.', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Tietoja {{GRAMMAR:elative|{{SITENAME}}}}', @@ -707,7 +703,8 @@ Käyttäjätunnuksesi on luotu. 'yourname' => 'Käyttäjätunnus', 'yourpassword' => 'Salasana', 'yourpasswordagain' => 'Salasana uudelleen', -'remembermypassword' => 'Muista minut', +'remembermypassword' => 'Muista minut (enintään $1 {{PLURAL:$1|päivä|päivää}})', +'securelogin-stick-https' => 'Jatka salatun yhteyden käyttämistä sisäänkirjautumisen jälkeen', 'yourdomainname' => 'Verkkonimi', 'externaldberror' => 'Tapahtui virhe ulkoisen autentikointitietokannan käytössä tai sinulla ei ole lupaa päivittää tunnustasi.', 'login' => 'Kirjaudu sisään', @@ -724,6 +721,7 @@ Käyttäjätunnuksesi on luotu. 'gotaccount' => "Jos sinulla on jo tunnus, voit '''$1'''.", 'gotaccountlink' => 'kirjautua sisään', 'createaccountmail' => 'sähköpostitse', +'createaccountreason' => 'Syy', 'badretype' => 'Syöttämäsi salasanat ovat erilaiset.', 'userexists' => 'Pyytämäsi käyttäjänimi on jo käytössä. Valitse toinen käyttäjänimi.', 'loginerror' => 'Sisäänkirjautumisvirhe', @@ -741,6 +739,7 @@ Käyttäjätunnuksesi on luotu. 'wrongpasswordempty' => 'Et voi antaa tyhjää salasanaa.', 'passwordtooshort' => 'Salasanan täytyy olla vähintään {{PLURAL:$1|yhden merkin pituinen|$1 merkkiä pitkä}}.', 'password-name-match' => 'Salasanasi täytyy olla eri kuin käyttäjätunnuksesi.', +'password-login-forbidden' => 'Tämän käyttäjänimen ja salasanan käyttö on estetty.', 'mailmypassword' => 'Lähetä uusi salasana sähköpostitse', 'passwordremindertitle' => 'Salasanamuistutus {{GRAMMAR:elative|{{SITENAME}}}}', 'passwordremindertext' => 'Joku IP-osoitteesta $1 pyysi {{GRAMMAR:partitive|{{SITENAME}}}} ($4) lähettämään uuden salasanan. Väliaikainen salasana käyttäjälle $2 on nyt $3. Kirjaudu sisään ja vaihda salasana. Väliaikainen salasana vanhenee {{PLURAL:$5|yhden päivän|$5 päivän}} kuluttua. @@ -773,6 +772,9 @@ Odota ennen kuin yrität uudelleen.', 'loginlanguagelabel' => 'Kieli: $1', 'suspicious-userlogout' => 'Pyyntösi kirjautua ulos evättiin, koska se näytti rikkinäisen selaimen tai välimuistipalvelimen lähettämältä.', +# E-mail sending +'php-mail-error-unknown' => 'Tuntematon virhe PHP:n mail()-funktiossa', + # Password reset dialog 'resetpass' => 'Muuta salasana', 'resetpass_announce' => 'Kirjauduit sisään sähköpostitse lähetetyllä väliaikaissalasanalla. Päätä sisäänkirjautuminen asettamalla uusi salasana.', @@ -825,9 +827,10 @@ Olet saattanut jo onnistuneesti vaihtaa salasanasi tai pyytää uutta väliaikai 'showdiff' => 'Näytä muutokset', 'anoneditwarning' => "'''Varoitus:''' Et ole kirjautunut sisään. IP-osoitteesi kirjataan tämän sivun muutoshistoriaan.", +'anonpreviewwarning' => "''Et ole kirjautunut sisään. Tallentaminen kirjaa IP-osoitteesi tämän sivun muutoshistoriaan.''", 'missingsummary' => 'Et ole antanut yhteenvetoa. Jos valitset Tallenna uudelleen, niin muokkauksesi tallennetaan ilman yhteenvetoa.', 'missingcommenttext' => 'Kirjoita viesti alle.', -'missingcommentheader' => 'Et ole antanut otsikkoa kommentillesi. Valitse Tallenna, jos et halua antaa otsikkoa.', +'missingcommentheader' => 'Et ole antanut otsikkoa kommentillesi. Napsauta ”{{int:savearticle}}”, jos et halua antaa otsikkoa.', 'summary-preview' => 'Yhteenvedon esikatselu:', 'subject-preview' => 'Otsikon esikatselu:', 'blockedtitle' => 'Pääsy estetty', @@ -900,7 +903,11 @@ Alla on viimeisin estolokin tapahtuma:', 'userjsyoucanpreview' => 'Voit testata uutta JavaScriptiä ennen tallennusta käyttämällä painiketta ”{{int:showpreview}}”.', 'usercsspreview' => "'''Tämä on CSS:n esikatselu. Muutoksia ei ole vielä tallennettu.'''", 'userjspreview' => "'''Tämä on JavaScriptin esikatselu.'''", -'userinvalidcssjstitle' => "'''Varoitus:''' Tyyliä nimeltä ”$1” ei ole olemassa. Muista, että käyttäjän määrittelemät .css- ja .js-sivut alkavat pienellä alkukirjaimella, esim. {{ns:user}}:Matti Meikäläinen/monobook.css eikä {{ns:user}}:Matti Meikäläinen/Monobook.css.", +'sitecsspreview' => "'''Huomaa, että tämä on vasta CSS:n esikatselu.''' +'''Muutoksia ei ole vielä tallennettu.'''", +'sitejspreview' => "'''Huomaa, että tämä on vasta JavaScript-koodin esikatselu.''' +'''Muutoksia ei ole vielä tallennettu.'''", +'userinvalidcssjstitle' => "'''Varoitus:''' Tyyliä nimeltä ”$1” ei ole olemassa. Muista, että käyttäjän määrittelemät .css- ja .js-sivut alkavat pienellä alkukirjaimella, esim. {{ns:user}}:Matti Meikäläinen/vector.css eikä {{ns:user}}:Matti Meikäläinen/Vector.css.", 'updated' => '(Päivitetty)', 'note' => "'''Huomautus:'''", 'previewnote' => "'''Tämä on vasta sivun esikatselu. Sivua ei ole vielä tallennettu!'''", @@ -928,7 +935,6 @@ Sinun täytyy yhdistää muutoksesi olemassa olevaan tekstiin. 'yourdiff' => 'Eroavaisuudet', 'copyrightwarning' => "'''Muutoksesi astuvat voimaan välittömästi.''' Kaikki {{GRAMMAR:illative|{{SITENAME}}}} tehtävät tuotokset katsotaan julkaistuksi $2 -lisenssin mukaisesti ($1). Jos et halua, että kirjoitustasi muokataan armottomasti ja uudelleenkäytetään vapaasti, älä tallenna kirjoitustasi. Tallentamalla muutoksesi lupaat, että kirjoitit tekstisi itse, tai kopioit sen jostain vapaasta lähteestä. '''ÄLÄ KÄYTÄ TEKIJÄNOIKEUDEN ALAISTA MATERIAALIA ILMAN LUPAA!'''", 'copyrightwarning2' => "Huomaa, että kuka tahansa voi muokata, muuttaa ja poistaa kaikkia sivustolle tekemiäsi lisäyksiä ja muutoksia. Muokkaamalla sivustoa luovutat sivuston käyttäjille tämän oikeuden ja takaat, että lisäämäsi aineisto on joko itse kirjoittamaasi tai peräisin jostain vapaasta lähteestä. Lisätietoja sivulla $1. '''TEKIJÄNOIKEUDEN ALAISEN MATERIAALIN KÄYTTÄMINEN ILMAN LUPAA ON EHDOTTOMASTI KIELLETTYÄ!'''", -'longpagewarning' => '

    Tämän sivun tekstiosuus on $1 binäärikilotavua pitkä. Harkitse, voisiko sivun jakaa pienempiin osiin.
    ', 'longpageerror' => "'''Sivun koko on $1 binäärikilotavua. Sivua ei voida tallentaa, koska enimmäiskoko on $2 binäärikilotavua.'''", 'readonlywarning' => "'''Varoitus: Tietokanta on lukittu huoltoa varten, joten voi olla ettet pysty tallentamaan muokkauksiasi juuri nyt.''' Saattaa olla paras leikata ja liimata tekstisi omaan tekstitiedostoosi ja tallentaa se tänne myöhemmin. @@ -1098,6 +1104,8 @@ $1", 'logdelete-failure' => "'''Lokin näkyvyyttä ei voitu asettaa:''' $1", 'revdel-restore' => 'Muuta näkyvyyttä', +'revdel-restore-deleted' => 'poistetut muutokset', +'revdel-restore-visible' => 'näkyvät muutokset', 'pagehist' => 'Sivun muutoshistoria', 'deletedhist' => 'Poistettujen versioiden historia', 'revdelete-content' => 'sisällön', @@ -1162,11 +1170,13 @@ Uuden ja vanhan sivun muutoksien pitää muodostaa jatkumo – ne eivät saa men # Diffs 'history-title' => 'Sivun $1 muutoshistoria', 'difference' => 'Versioiden väliset erot', +'difference-multipage' => '(Sivujen välinen eroavaisuus)', 'lineno' => 'Rivi $1:', 'compareselectedversions' => 'Vertaile valittuja versioita', 'showhideselectedversions' => 'Näytä tai piilota valitut versiot', 'editundo' => 'kumoa', -'diff-multi' => '(Versioiden välissä {{PLURAL:$1|yksi muu muokkaus|$1 muuta muokkausta}}.)', +'diff-multi' => '(Näytettyjen versioiden välissä on {{PLURAL:$1|yksi muokkaus|$1 versiota, jotka ovat {{PLURAL:$2|yhden käyttäjän tekemiä|$2 eri käyttäjän tekemiä}}}}.)', +'diff-multi-manyusers' => '(Versioiden välissä on {{PLURAL:$1|yksi muu muokkaus|$1 muuta muokkausta, jotka on tehnyt {{PLURAL:$2|yksi käyttäjä|yli $2 eri käyttäjää}}}}.)', # Search results 'searchresults' => 'Hakutulokset', @@ -1203,6 +1213,7 @@ $1 {{int:pipe-separator}} $2', 'searchprofile-everything-tooltip' => 'Etsi kaikkialta (myös keskustelusivut)', 'searchprofile-advanced-tooltip' => 'Etsi määritellyistä nimiavaruuksista', 'search-result-size' => '$1 ({{PLURAL:$2|1 sana|$2 sanaa}})', +'search-result-category-size' => '{{PLURAL:$1|1 jäsen|$1 jäsentä}} ({{PLURAL:$2|1 alaluokka|$2 alaluokkaa}}, {{PLURAL:$3|1 tiedosto|$3 tiedostoa}})', 'search-result-score' => 'Asiaankuuluvuus: $1%', 'search-redirect' => '(ohjaus $1)', 'search-section' => '(osio $1)', @@ -1278,6 +1289,7 @@ Kokeile lisätä haun alkuun ''all:'', niin haku kohdistuu kaikkeen sisältöön 'contextlines' => 'Rivien määrä tulosta kohti', 'contextchars' => 'Sisällön merkkien määrä riviä kohden', 'stub-threshold' => 'Tynkäsivun osoituskynnys', +'stub-threshold-disabled' => 'Ei käytössä', 'recentchangesdays' => 'Näytettävien päivien määrä tuoreissa muutoksissa', 'recentchangesdays-max' => 'Enintään $1 {{PLURAL:$1|päivä|päivää}}', 'recentchangescount' => 'Näytettävien muutoksien määrä oletuksena', @@ -1311,6 +1323,7 @@ Tässä satunnaisesti tuotettu arvo, jota voit käyttää: $1', 'prefs-files' => 'Tiedostot', 'prefs-custom-css' => 'Käyttäjäkohtainen CSS-tyylisivu', 'prefs-custom-js' => 'Käyttäjäkohtainen JavaScript-sivu', +'prefs-common-css-js' => 'Yhteiset CSS- ja JavaScript-sivut kaikille ulkoasuille', 'prefs-reset-intro' => 'Voit käyttää tätä sivua palauttaaksesi kaikki asetuksesi sivuston oletusasetuksiin. Tätä ei voi kumota.', 'prefs-emailconfirm-label' => 'Sähköpostin varmistus', 'prefs-textboxsize' => 'Muokkauskentän koko', @@ -1345,9 +1358,15 @@ Tässä satunnaisesti tuotettu arvo, jota voit käyttää: $1', 'prefs-advancedrendering' => 'Lisäasetukset', 'prefs-advancedsearchoptions' => 'Lisäasetukset', 'prefs-advancedwatchlist' => 'Lisäasetukset', -'prefs-display' => 'Perusasetukset', +'prefs-displayrc' => 'Perusasetukset', +'prefs-displaysearchoptions' => 'Näyttöasetukset', +'prefs-displaywatchlist' => 'Näyttöasetukset', 'prefs-diffs' => 'Erot', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Sähköpostiosoite vaikuttaa kelvolliselta', +'email-address-validity-invalid' => 'Virheellinen sähköpostiosoite', + # User rights 'userrights' => 'Käyttöoikeuksien hallinta', 'userrights-lookup-user' => 'Käyttöoikeuksien hallinta', @@ -1431,6 +1450,7 @@ Tässä satunnaisesti tuotettu arvo, jota voit käyttää: $1', 'right-hideuser' => 'Estää käyttäjätunnus ja piilottaa se näkyvistä', 'right-ipblock-exempt' => 'Ohittaa IP-, automaattiset ja osoitealue-estot', 'right-proxyunbannable' => 'Ohittaa automaattiset välityspalvelinestot', +'right-unblockself' => 'Poistaa esto itseltään', 'right-protect' => 'Muuttaa sivujen suojauksia ja muokata suojattuja sivuja', 'right-editprotected' => 'Muokata suojattuja sivuja (pois lukien laajennettu sisällytyssuojaus)', 'right-editinterface' => 'Muokata käyttöliittymätekstejä', @@ -1453,7 +1473,6 @@ Tässä satunnaisesti tuotettu arvo, jota voit käyttää: $1', 'right-siteadmin' => 'Lukita tietokanta', 'right-reset-passwords' => 'Alustaa muiden käyttäjien salasanoja', 'right-override-export-depth' => 'Viedä sivuja sisältäen viitatut sivut viiden syvyydellä', -'right-versiondetail' => 'Nähdä laajennetut tiedot ohjelmistoversiosta', 'right-sendemail' => 'Lähettää sähköpostia muille käyttäjille', # User rights log @@ -1504,14 +1523,9 @@ Tässä satunnaisesti tuotettu arvo, jota voit käyttää: $1', 'recentchanges-legend' => 'Tuoreiden muutosten asetukset', 'recentchangestext' => 'Tällä sivulla voi seurata tuoreita {{GRAMMAR:illative|{{SITENAME}}}} tehtyjä muutoksia.', 'recentchanges-feed-description' => 'Tällä sivulla voi seurata tuoreita {{GRAMMAR:illative|{{SITENAME}}}} tehtyjä muutoksia.', -'recentchanges-label-legend' => 'Merkkien selitykset: $1', -'recentchanges-legend-newpage' => '$1 – uusi sivu', 'recentchanges-label-newpage' => 'Tämä muutos loi uuden sivun', -'recentchanges-legend-minor' => '$1 – pieni muutos', 'recentchanges-label-minor' => 'Tämä on pieni muutos', -'recentchanges-legend-bot' => '$1 – botin muutos', 'recentchanges-label-bot' => 'Tämän muutoksen suoritti botti', -'recentchanges-legend-unpatrolled' => '$1 – tarkastamaton muutos', 'recentchanges-label-unpatrolled' => 'Tätä muutosta ei ole vielä tarkastettu', 'rcnote' => 'Alla on {{PLURAL:$1|yksi muutos|$1 tuoreinta muutosta}} {{PLURAL:$2|yhden päivän|$2 viime päivän}} ajalta $4 kello $5 asti.', 'rcnotefrom' => 'Alla on muutokset $2 lähtien. Enintään $1 merkintää näytetään.', @@ -1557,6 +1571,9 @@ Tässä satunnaisesti tuotettu arvo, jota voit käyttää: $1', 'upload_directory_missing' => 'Tallennushakemisto $1 puuttuu, eikä palvelin pysty luomaan sitä.', 'upload_directory_read_only' => 'Palvelimella ei ole kirjoitusoikeuksia tallennushakemistoon ”$1”.', 'uploaderror' => 'Tallennusvirhe', +'upload-recreate-warning' => "'''Varoitus: Tiedosto tällä nimellä on poistettu tai siirretty.''' + +Poisto- ja siirtoloki tälle sivulle näkyy alla:", 'uploadtext' => "Voit tallentaa tiedostoja alla olevalla lomakkeella. [[Special:FileList|Tiedostoluettelo]] sisältää listan tallennetuista tiedostoista. Tallennukset kirjataan myös [[Special:Log/upload|tallennuslokiin]], ja poistot [[Special:Log/delete|poistolokiin]]. Voit käyttää tiedostoja wikisivuilla seuraavilla tavoilla: @@ -1587,6 +1604,17 @@ Voit käyttää tiedostoja wikisivuilla seuraavilla tavoilla: 'filetype-unwanted-type' => "'''.$1''' ei ole toivottu tiedostomuoto. {{PLURAL:$3|Suositeltu tiedostomuoto on|Suositeltuja tiedostomuotoja ovat}} $2.", 'filetype-banned-type' => "'''.$1''' ei ole sallittu tiedostomuoto. {{PLURAL:$3|Sallittu tiedostomuoto on|Sallittuja tiedostomuotoja ovat}} $2.", 'filetype-missing' => 'Tiedostolta puuttuu tiedostopääte – esimerkiksi .jpg.', +'empty-file' => 'Lähettämäsi tiedosto oli tyhjä.', +'file-too-large' => 'Lähettämäsi tiedosto oli liian suuri.', +'filename-tooshort' => 'Tiedostonimi on liian lyhyt.', +'filetype-banned' => 'Tämä tiedostomuoto on estetty.', +'verification-error' => 'Tämä tiedosto ei läpäissyt tiedoston tarkistusta.', +'hookaborted' => 'Laajennuksen kytköspiste keskeytti muutoksen, jota yritit tehdä.', +'illegal-filename' => 'Tiedostonimi ei ole sallittu.', +'overwrite' => 'Olemassa olevan tiedoston korvaaminen ei ole sallittu.', +'unknown-error' => 'Tapahtui tuntematon virhe.', +'tmp-create-error' => 'Väliaikaistiedostoa ei voitu luoda.', +'tmp-write-error' => 'Virhe kirjoitettaessa väliaikaistiedostoon.', 'large-file' => 'Tiedostojen enimmäiskoko on $1. Lähettämäsi tiedoston koko on $2.', 'largefileserver' => 'Tämä tiedosto on suurempi kuin mitä palvelin sallii.', 'emptyfile' => 'Tiedosto, jota yritit lähettää, näyttää olevan tyhjä. Tarkista, että kirjoitit polun ja nimen oikein ja että se ei ole liian suuri kohdepalvelimelle.', @@ -1610,13 +1638,14 @@ Jos sinulla on tämän kuvan alkuperäinen versio, tallenna se. Muussa tapaukses 'fileexists-shared-forbidden' => 'Samanniminen tiedosto on jo olemassa jaetussa mediavarastossa. Tallenna tiedosto jollakin toisella nimellä. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Tämä tiedosto on kaksoiskappale {{PLURAL:$1|seuraavasta tiedostosta|seuraavista tiedostoista}}:', 'file-deleted-duplicate' => 'Tiedosto, joka on identtinen tämän tiedoston kanssa ([[:$1]]) on aiemmin poistettu. Katso kyseisen tiedoston poistoloki ennen kuin jatkat uudelleentallentamista.', -'successfulupload' => 'Tallennus onnistui', 'uploadwarning' => 'Tallennusvaroitus', 'uploadwarning-text' => 'Muuta alla olevaa tiedostokuvausta ja yritä uudelleen.', 'savefile' => 'Tallenna', 'uploadedimage' => 'tallensi tiedoston [[$1]]', 'overwroteimage' => 'tallensi uuden version [[$1]]', 'uploaddisabled' => 'Tiedostojen tallennus ei ole käytössä.', +'copyuploaddisabled' => 'Tallennus URL:n kautta on poistettu käytöstä.', +'uploadfromurl-queued' => 'Tallennuksesi on siirretty jonoon.', 'uploaddisabledtext' => 'Tiedostojen tallennus on poistettu käytöstä.', 'php-uploaddisabledtext' => 'PHP:n tiedostojen lähetys ei ole käytössä. Tarkista asetukset kohdasta file_uploads.', 'uploadscripted' => 'Tämä tiedosto sisältää HTML-koodia tai skriptejä, jotka selain saattaa virheellisesti suorittaa.', @@ -1634,6 +1663,14 @@ Jos sinulla on tämän kuvan alkuperäinen versio, tallenna se. Muussa tapaukses Harkitse, haluatko jatkaa tämän tiedoston tallentamista. Tiedoston poistoloki näkyy tässä:", 'filename-bad-prefix' => "Tallentamasi tiedoston nimi alkaa merkkijonolla '''$1''', joka on yleensä digitaalikameroiden automaattisesti antama nimi, joka ei kuvaa tiedoston sisältöä. Anna tiedostolle kuvaavampi nimi.", +'upload-success-subj' => 'Tallennus onnistui', +'upload-success-msg' => 'Tallennuksesi [$2] onnistui. Tiedosto on saatavilla täällä: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Tallennusongelma', +'upload-failure-msg' => 'Tiedoston tallentaminen osoitteesta [$2] ei onnistunut: + +$1', +'upload-warning-subj' => 'Tallennusvaroitus', +'upload-warning-msg' => 'Tiedoston tallennuksessasi oli ongelmia [$2]. Voit palata [[Special:Upload/stash/$1|tallennussivulle]] ja korjata ongelman.', 'upload-proto-error' => 'Virheellinen protokolla', 'upload-proto-error-text' => 'Etälähetys on mahdollista vain osoitteista, jotka alkavat merkkijonolla http:// tai ftp://.', @@ -1691,6 +1728,7 @@ Parhaan turvallisuuden vuoksi img_auth.php on poissa käytöstä.', 'listfiles_search_for' => 'Nimihaku', 'imgfile' => 'tiedosto', 'listfiles' => 'Tiedostoluettelo', +'listfiles_thumb' => 'Pienoiskuva', 'listfiles_date' => 'Päiväys', 'listfiles_name' => 'Nimi', 'listfiles_user' => 'Tallentaja', @@ -1803,8 +1841,8 @@ Tiedot [$2 tiedoston kuvaussivulta] näkyvät alla.', 'statistics-edits' => 'Muokkauksia {{GRAMMAR:genitive|{{SITENAME}}}} perustamisen jälkeen', 'statistics-edits-average' => 'Keskimäärin yhtä sivua muokattu', 'statistics-views-total' => 'Sivuja katsottu yhteensä', +'statistics-views-total-desc' => 'Näyttökertoihin eivät sisälly toimintosivut eikä sivut, joita ei ole olemassa', 'statistics-views-peredit' => 'Sivuja katsottu muokkausta kohden', -'statistics-jobqueue' => 'Ohjelmiston suorittamia [http://www.mediawiki.org/wiki/Manual:Job_queue ylläpitotöitä jonossa]', 'statistics-users' => 'Rekisteröityneitä [[Special:ListUsers|käyttäjiä]]', 'statistics-users-active' => 'Aktiivisia käyttäjiä', 'statistics-users-active-desc' => 'Käyttäjät, jotka ovat suorittaneet jonkin toiminnon {{PLURAL:$1|edellisen päivän|edellisten $1 päivän}} aikana.', @@ -1817,7 +1855,7 @@ Tiedot [$2 tiedoston kuvaussivulta] näkyvät alla.', 'doubleredirects' => 'Kaksinkertaiset ohjaukset', 'doubleredirectstext' => 'Tässä listassa on ohjaussivut, jotka ohjaavat toiseen ohjaussivuun. Jokaisella rivillä on linkit ensimmäiseen ja toiseen ohjaukseen sekä toisen ohjauksen kohteen ensimmäiseen riviin, eli yleensä ”oikeaan” kohteeseen, johon ensimmäisen ohjauksen pitäisi osoittaa. -Yliviivatut kohteet on korjattu.', +Yliviivatut kohteet on korjattu.', 'double-redirect-fixed-move' => '[[$1]] on siirretty, ja se ohjaa nyt sivulle [[$2]]', 'double-redirect-fixer' => 'Ohjausten korjaaja', @@ -1840,6 +1878,8 @@ Jokaisella rivillä on linkit ensimmäiseen ja toiseen ohjaukseen sekä toisen o 'nmembers' => '$1 {{PLURAL:$1|jäsen|jäsentä}}', 'nrevisions' => '$1 {{PLURAL:$1|muutos|muutosta}}', 'nviews' => '$1 {{PLURAL:$1|lataus|latausta}}', +'nimagelinks' => 'Käytössä $1 {{PLURAL:$1|sivulla}}', +'ntransclusions' => 'käytössä $1 {{PLURAL:$1|sivulla}}', 'specialpage-empty' => 'Tämä sivu on tyhjä.', 'lonelypages' => 'Yksinäiset sivut', 'lonelypagestext' => 'Seuraaviin sivuihin ei ole linkkejä tai sisällytyksiä muualta wikistä.', @@ -1998,33 +2038,39 @@ Lisätietoa yksittäisistä käyttäjäoikeuksista saattaa löytyä [[{{MediaWik 'listgrouprights-removegroup-self-all' => 'Voi poistaa itsensä kaikista ryhmistä', # E-mail user -'mailnologin' => 'Lähettäjän osoite puuttuu', -'mailnologintext' => 'Sinun pitää olla [[Special:UserLogin|kirjautuneena sisään]] ja [[Special:Preferences|asetuksissasi]] pitää olla toimiva ja varmennettu sähköpostiosoite, jotta voit lähettää sähköpostia muille käyttäjille.', -'emailuser' => 'Lähetä sähköpostia tälle käyttäjälle', -'emailpage' => 'Lähetä sähköpostia käyttäjälle', -'emailpagetext' => 'Jos tämä käyttäjä on antanut asetuksissaan kelvollisen sähköpostiosoitteen, alla olevalla lomakkeella voit lähettää hänelle viestin. [[Special:Preferences|Omissa asetuksissasi]] annettu sähköpostiosoite näkyy sähköpostin lähettäjän osoitteena, jotta vastaanottaja voi suoraan vastata viestiin.', -'usermailererror' => 'Postitus palautti virheen:', -'defemailsubject' => 'Sähköpostia sivustolta {{SITENAME}}', -'noemailtitle' => 'Ei sähköpostiosoitetta', -'noemailtext' => 'Tämä käyttäjä ei ole määritellyt kelvollista sähköpostiosoitetta.', -'nowikiemailtitle' => 'Sähköpostin lähettäminen ei sallittu', -'nowikiemailtext' => 'Tämä käyttäjä ei halua sähköpostia muilta käyttäjiltä.', -'email-legend' => 'Sähköpostin lähetys {{GRAMMAR:genitive|{{SITENAME}}}} käyttäjälle', -'emailfrom' => 'Lähettäjä', -'emailto' => 'Vastaanottaja', -'emailsubject' => 'Aihe', -'emailmessage' => 'Viesti', -'emailsend' => 'Lähetä', -'emailccme' => 'Lähetä kopio viestistä minulle.', -'emailccsubject' => 'Kopio lähettämästäsi viestistä osoitteeseen $1: $2', -'emailsent' => 'Sähköposti lähetetty', -'emailsenttext' => 'Sähköpostiviestisi on lähetetty.', -'emailuserfooter' => 'Tämän sähköpostin lähetti $1 käyttäjälle $2 käyttämällä ”Lähetä sähköpostia” -toimintoa {{GRAMMAR:inessive|{{SITENAME}}}}.', +'mailnologin' => 'Lähettäjän osoite puuttuu', +'mailnologintext' => 'Sinun pitää olla [[Special:UserLogin|kirjautuneena sisään]] ja [[Special:Preferences|asetuksissasi]] pitää olla toimiva ja varmennettu sähköpostiosoite, jotta voit lähettää sähköpostia muille käyttäjille.', +'emailuser' => 'Lähetä sähköpostia tälle käyttäjälle', +'emailpage' => 'Lähetä sähköpostia käyttäjälle', +'emailpagetext' => 'Jos tämä käyttäjä on antanut asetuksissaan kelvollisen sähköpostiosoitteen, alla olevalla lomakkeella voit lähettää hänelle viestin. [[Special:Preferences|Omissa asetuksissasi]] annettu sähköpostiosoite näkyy sähköpostin lähettäjän osoitteena, jotta vastaanottaja voi suoraan vastata viestiin.', +'usermailererror' => 'Postitus palautti virheen:', +'defemailsubject' => 'Sähköpostia sivustolta {{SITENAME}}', +'usermaildisabled' => 'Käyttäjien sähköposti poistettu käytöstä', +'usermaildisabledtext' => 'Et voi lähettää sähköpostia muille käyttäjille tässä wikissä', +'noemailtitle' => 'Ei sähköpostiosoitetta', +'noemailtext' => 'Tämä käyttäjä ei ole määritellyt kelvollista sähköpostiosoitetta.', +'nowikiemailtitle' => 'Sähköpostin lähettäminen ei sallittu', +'nowikiemailtext' => 'Tämä käyttäjä ei halua sähköpostia muilta käyttäjiltä.', +'email-legend' => 'Sähköpostin lähetys {{GRAMMAR:genitive|{{SITENAME}}}} käyttäjälle', +'emailfrom' => 'Lähettäjä', +'emailto' => 'Vastaanottaja', +'emailsubject' => 'Aihe', +'emailmessage' => 'Viesti', +'emailsend' => 'Lähetä', +'emailccme' => 'Lähetä kopio viestistä minulle.', +'emailccsubject' => 'Kopio lähettämästäsi viestistä osoitteeseen $1: $2', +'emailsent' => 'Sähköposti lähetetty', +'emailsenttext' => 'Sähköpostiviestisi on lähetetty.', +'emailuserfooter' => 'Tämän sähköpostin lähetti $1 käyttäjälle $2 käyttämällä ”Lähetä sähköpostia” -toimintoa {{GRAMMAR:inessive|{{SITENAME}}}}.', + +# User Messenger +'usermessage-summary' => 'Jätetään järjestelmäviesti.', +'usermessage-editor' => 'Järjestelmäviestittäjä', # Watchlist 'watchlist' => 'Tarkkailulista', 'mywatchlist' => 'Tarkkailulista', -'watchlistfor' => '$1', +'watchlistfor2' => 'Käyttäjälle $1 $2', 'nowatchlist' => 'Tarkkailulistallasi ei ole sivuja.', 'watchlistanontext' => 'Sinun täytyy $1, jos haluat käyttää tarkkailulistaa.', 'watchnologin' => 'Et ole kirjautunut sisään', @@ -2136,7 +2182,10 @@ Viimeisimmän muokkauksen on tehnyt käyttäjä [[User:$3|$3]] ([[User talk:$3|k 'revertpage' => 'Käyttäjän [[Special:Contributions/$2|$2]] ([[User talk:$2|keskustelu]]) muokkaukset kumottiin ja sivu palautettiin viimeisimpään käyttäjän [[User:$1|$1]] tekemään versioon.', 'revertpage-nouser' => 'Käyttäjän (käyttäjänimi poistettu) muokkaukset kumottiin ja sivu palautettiin viimeisimpään käyttäjän [[User:$1|$1]] tekemään versioon.', 'rollback-success' => 'Käyttäjän ”$1” tekemät muokkaukset kumottiin ja sivu palautettiin käyttäjän $2 versioon.', -'sessionfailure' => 'Istuntosi kanssa on ongelma. Muutosta ei toteutettu varotoimena istuntokaappauksien takia. Käytä selaimen paluutoimintoa ja päivitä sivu, jolta tulit, ja yritä uudelleen.', + +# Edit tokens +'sessionfailure-title' => 'Istuntovirhe', +'sessionfailure' => 'Istuntosi kanssa on ongelma. Muutosta ei toteutettu varotoimena istuntokaappauksien takia. Käytä selaimen paluutoimintoa ja päivitä sivu, jolta tulit, ja yritä uudelleen.', # Protect 'protectlogpage' => 'Suojausloki', @@ -2256,18 +2305,22 @@ $1', 'month' => 'Kuukausi', 'year' => 'Vuosi', -'sp-contributions-newbies' => 'Näytä uusien tulokkaiden muutokset', -'sp-contributions-newbies-sub' => 'Uusien tulokkaiden muokkaukset', -'sp-contributions-newbies-title' => 'Uusien tulokkaiden muokkaukset', -'sp-contributions-blocklog' => 'estot', -'sp-contributions-deleted' => 'poistetut muokkaukset', -'sp-contributions-logs' => 'lokit', -'sp-contributions-talk' => 'keskustelu', -'sp-contributions-userrights' => 'käyttöoikeuksien hallinta', -'sp-contributions-blocked-notice' => 'Tämä käyttäjä on tällä hetkellä estetty. Alla on viimeisin estolokin tapahtuma:', -'sp-contributions-search' => 'Etsi muokkauksia', -'sp-contributions-username' => 'IP-osoite tai käyttäjätunnus', -'sp-contributions-submit' => 'Hae', +'sp-contributions-newbies' => 'Näytä uusien tulokkaiden muutokset', +'sp-contributions-newbies-sub' => 'Uusien tulokkaiden muokkaukset', +'sp-contributions-newbies-title' => 'Uusien tulokkaiden muokkaukset', +'sp-contributions-blocklog' => 'estot', +'sp-contributions-deleted' => 'poistetut muokkaukset', +'sp-contributions-uploads' => 'tallennukset', +'sp-contributions-logs' => 'lokit', +'sp-contributions-talk' => 'keskustelu', +'sp-contributions-userrights' => 'käyttöoikeuksien hallinta', +'sp-contributions-blocked-notice' => 'Tämä käyttäjä on tällä hetkellä estetty. Alla on viimeisin estolokin tapahtuma:', +'sp-contributions-blocked-notice-anon' => 'Tämä IP-osoite on tällä hetkellä estetty. +Alla on viimeisin estolokin tapahtuma:', +'sp-contributions-search' => 'Etsi muokkauksia', +'sp-contributions-username' => 'IP-osoite tai käyttäjätunnus', +'sp-contributions-toponly' => 'Näytä vain muokkaukset, jotka ovat viimeisimpiä versioita', +'sp-contributions-submit' => 'Hae', # What links here 'whatlinkshere' => 'Tänne viittaavat sivut', @@ -2326,7 +2379,6 @@ Nykyiset estot löytyvät [[Special:IPBlockList|estolistalta]].', 'ipb-edit-dropdown' => 'Muokkaa estosyitä', 'ipb-unblock-addr' => 'Poista käyttäjän $1 esto', 'ipb-unblock' => 'Poista käyttäjän tai IP-osoitteen muokkausesto', -'ipb-blocklist-addr' => 'Käyttäjän $1 estot', 'ipb-blocklist' => 'Näytä estot', 'ipb-blocklist-contribs' => 'Käyttäjän $1 muokkaukset', 'unblockip' => 'Muokkauseston poisto', @@ -2395,6 +2447,8 @@ $1 on jo estetty. Haluatko muuttaa eston asetuksia?', 'sorbs_create_account_reason' => 'IP-osoitteesi on listattu avoimena välityspalvelimena DNSBLin mustalla listalla. Et voi luoda käyttäjätunnusta.', 'cant-block-while-blocked' => 'Et voi estää muita käyttäjiä ollessasi estetty.', 'cant-see-hidden-user' => 'Käyttäjä, jota yrität estää on jo estetty ja piilotettu. Koska sinulla ei ole hideuser-oikeutta, et voi nähdä tai muokata käyttäjän estoa.', +'ipbblocked' => 'Et voi estää tai poistaa estoja muilta käyttäjiltä, koska itse olet estettynä', +'ipbnounblockself' => 'Et ole oikeutettu poistamaan estoa itseltäsi', # Developer tools 'lockdb' => 'Lukitse tietokanta', @@ -2425,6 +2479,13 @@ Olet vastuussa siitä, että linkit osoittavat sinne, mihin niiden on tarkoitusk Huomaa, että sivua '''ei''' siirretä mikäli uusi otsikko on olemassa olevan sivun käytössä, paitsi milloin kyseessä on tyhjä sivu tai ohjaus, jolla ei ole muokkaushistoriaa. Tämä tarkoittaa sitä, että voit siirtää sivun takaisin vanhalle nimelleen mikäli teit virheen, mutta et voi kirjoittaa olemassa olevan sivun päälle. +Tämä saattaa olla suuri ja odottamaton muutos suositulle sivulle. Varmista, että tiedät seuraukset ennen kuin siirrät sivun.", +'movepagetext-noredirectfixer' => "Alla olevalla lomakkeella voit nimetä uudelleen sivuja, jolloin niiden koko historia siirtyy uuden nimen alle. Vanhasta sivusta tulee ohjaussivu, joka osoittaa uuteen sivuun. + +Tarkasta sivuun viittaavat ohjaukset [[Special:DoubleRedirects|kaksinkertaisten]] tai [[Special:BrokenRedirects|rikkinäisten]] ohjausten varalta. Olet vastuussa siitä, että linkit osoittavat sinne, mihin niiden on tarkoituskin osoittaa. + +Huomaa, että sivua '''ei''' siirretä mikäli uusi otsikko on olemassa olevan sivun käytössä, paitsi milloin kyseessä on tyhjä sivu tai ohjaus, jolla ei ole muokkaushistoriaa. Tämä tarkoittaa sitä, että voit siirtää sivun takaisin vanhalle nimelleen mikäli teit virheen, mutta et voi kirjoittaa olemassa olevan sivun päälle. + Tämä saattaa olla suuri ja odottamaton muutos suositulle sivulle. Varmista, että tiedät seuraukset ennen kuin siirrät sivun.", 'movepagetalktext' => "Sivuun mahdollisesti kytketty keskustelusivu siirretään automaattisesti, '''paitsi jos''': *Siirrät sivua nimiavaruudesta toiseen @@ -2480,6 +2541,7 @@ $1 {{PLURAL:$1|sivu|sivua}} siirrettiin.', 'immobile-source-page' => 'Tämä sivu ei ole siirrettävissä.', 'immobile-target-page' => 'Kyseiselle kohdenimelle ei voi siirtää.', 'imagenocrossnamespace' => 'Tiedostoja ei voi siirtää pois tiedostonimiavaruudesta.', +'nonfile-cannot-move-to-file' => 'Sivuja ei voi siirtää tiedostonimiavaruuteen.', 'imagetypemismatch' => 'Uusi tiedostopääte ei vastaa tiedoston tyyppiä', 'imageinvalidfilename' => 'Kohdenimi on virheellinen', 'fix-double-redirects' => 'Päivitä kaikki tänne viittaavat ohjaukset ohjaamaan uudelle nimelle', @@ -2559,6 +2621,7 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.', 'importstart' => 'Tuodaan sivuja...', 'import-revision-count' => '$1 {{PLURAL:$1|versio|versiota}}', 'importnopages' => 'Ei tuotavia sivuja.', +'imported-log-entries' => 'Tuotu $1 {{PLURAL:$1|lokitapahtuma|lokitapahtumaa}}.', 'importfailed' => 'Tuonti epäonnistui: $1', 'importunknownsource' => 'Tuntematon lähdetyyppi', 'importcantopen' => 'Tuontitiedoston avaus epäonnistui', @@ -2651,6 +2714,8 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.', 'tooltip-upload' => 'Aloita tallennus', 'tooltip-rollback' => 'Palauttaminen kumoaa viimeisimmän muokkaajan yhden tai useamman muutoksen yhdellä kertaa.', 'tooltip-undo' => 'Kumoaminen palauttaa tämän muutoksen ja avaa artikkelin esikatselussa. Yhteenvetokenttään voi kirjoittaa palautuksen syyn.', +'tooltip-preferences-save' => 'Tallenna asetukset', +'tooltip-summary' => 'Kirjoita lyhyt yhteenveto', # Stylesheets 'common.css' => '/* Tämä sivu sisältää koko sivustoa muuttavia tyylejä. */', @@ -2767,13 +2832,16 @@ Suorittamalla sen järjestelmäsi voi muuttua epäluotettavaksi.", 'thumbsize' => 'Pikkukuvien koko', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|sivu|sivua}}', 'file-info' => '$1, MIME-tyyppi: $2', -'file-info-size' => '($1×$2 px, $3, MIME-tyyppi: $4)', +'file-info-size' => '$1×$2 px, $3, MIME-tyyppi: $4', 'file-nohires' => 'Tarkempaa kuvaa ei ole saatavilla.', -'svg-long-desc' => '(SVG-tiedosto; oletustarkkuus $1×$2 kuvapistettä; tiedostokoko $3)', +'svg-long-desc' => 'SVG-tiedosto; oletustarkkuus $1×$2 kuvapistettä; tiedostokoko $3', 'show-big-image' => 'Korkeatarkkuuksinen versio', 'show-big-image-thumb' => 'Esikatselun koko: $1×$2 px', 'file-info-gif-looped' => 'toistuva', 'file-info-gif-frames' => '$1 {{PLURAL:$1|kehys|kehystä}}', +'file-info-png-looped' => 'toistuva', +'file-info-png-repeat' => 'toistettu $1 {{PLURAL:$1|kertaa|kertaa}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|kehys|kehystä}}', # Special:NewFiles 'newimages' => 'Uudet tiedostot', @@ -2927,6 +2995,7 @@ Kaikki muut linkit ovat poikkeuksia eli toisin sanoen sivuja, joissa tiedostoa s 'exif-gpsareainformation' => 'GPS-alueen nimi', 'exif-gpsdatestamp' => 'GPS-päivämäärä', 'exif-gpsdifferential' => 'GPS-differentiaalikorjaus', +'exif-objectname' => 'Lyhyt otsikko', # EXIF attributes 'exif-compression-1' => 'Pakkaamaton', @@ -3084,23 +3153,23 @@ Kaikki muut linkit ovat poikkeuksia eli toisin sanoen sivuja, joissa tiedostoa s 'limitall' => 'kaikki', # E-mail address confirmation -'confirmemail' => 'Varmenna sähköpostiosoite', -'confirmemail_noemail' => 'Sinulla ei ole kelvollista sähköpostiosoitetta [[Special:Preferences|asetuksissasi]].', -'confirmemail_text' => 'Tämä wiki vaatii sähköpostiosoitteen varmentamisen, ennen kuin voit käyttää sähköpostitoimintoja. Lähetä alla olevasta painikkeesta varmennusviesti osoitteeseesi. Viesti sisältää linkin, jonka avaamalla varmennat sähköpostiosoitteesi.', -'confirmemail_pending' => 'Varmennusviesti on jo lähetetty. Jos loit tunnuksen äskettäin, odota muutama minuutti viestin saapumista, ennen kuin yrität uudelleen.', -'confirmemail_send' => 'Lähetä varmennusviesti', -'confirmemail_sent' => 'Varmennusviesti lähetetty.', -'confirmemail_oncreate' => 'Varmennusviesti lähetettiin sähköpostiosoitteeseesi. Varmennuskoodia ei tarvita sisäänkirjautumiseen, mutta se täytyy antaa, ennen kuin voit käyttää sähköpostitoimintoja tässä wikissä.', -'confirmemail_sendfailed' => 'Varmennusviestin lähettäminen epäonnistui. Tarkista, onko osoitteessa kiellettyjä merkkejä. +'confirmemail' => 'Varmenna sähköpostiosoite', +'confirmemail_noemail' => 'Sinulla ei ole kelvollista sähköpostiosoitetta [[Special:Preferences|asetuksissasi]].', +'confirmemail_text' => 'Tämä wiki vaatii sähköpostiosoitteen varmentamisen, ennen kuin voit käyttää sähköpostitoimintoja. Lähetä alla olevasta painikkeesta varmennusviesti osoitteeseesi. Viesti sisältää linkin, jonka avaamalla varmennat sähköpostiosoitteesi.', +'confirmemail_pending' => 'Varmennusviesti on jo lähetetty. Jos loit tunnuksen äskettäin, odota muutama minuutti viestin saapumista, ennen kuin yrität uudelleen.', +'confirmemail_send' => 'Lähetä varmennusviesti', +'confirmemail_sent' => 'Varmennusviesti lähetetty.', +'confirmemail_oncreate' => 'Varmennusviesti lähetettiin sähköpostiosoitteeseesi. Varmennuskoodia ei tarvita sisäänkirjautumiseen, mutta se täytyy antaa, ennen kuin voit käyttää sähköpostitoimintoja tässä wikissä.', +'confirmemail_sendfailed' => 'Varmennusviestin lähettäminen epäonnistui. Tarkista, onko osoitteessa kiellettyjä merkkejä. Postitusohjelma palautti: $1', -'confirmemail_invalid' => 'Varmennuskoodi ei kelpaa. Koodi on voinut vanhentua.', -'confirmemail_needlogin' => 'Sinun täytyy $1, jotta voisit varmistaa sähköpostiosoitteesi.', -'confirmemail_success' => 'Sähköpostiosoitteesi on nyt varmennettu. Voit kirjautua sisään.', -'confirmemail_loggedin' => 'Sähköpostiosoitteesi on nyt varmennettu.', -'confirmemail_error' => 'Jokin epäonnistui varmennuksen tallentamisessa.', -'confirmemail_subject' => '{{GRAMMAR:genitive|{{SITENAME}}}} sähköpostiosoitteen varmennus', -'confirmemail_body' => 'Joku IP-osoitteesta $1 on rekisteröinyt {{GRAMMAR:inessive|{{SITENAME}}}} tunnuksen $2 tällä sähköpostiosoitteella. +'confirmemail_invalid' => 'Varmennuskoodi ei kelpaa. Koodi on voinut vanhentua.', +'confirmemail_needlogin' => 'Sinun täytyy $1, jotta voisit varmistaa sähköpostiosoitteesi.', +'confirmemail_success' => 'Sähköpostiosoitteesi on nyt varmennettu. Voit kirjautua sisään.', +'confirmemail_loggedin' => 'Sähköpostiosoitteesi on nyt varmennettu.', +'confirmemail_error' => 'Jokin epäonnistui varmennuksen tallentamisessa.', +'confirmemail_subject' => '{{GRAMMAR:genitive|{{SITENAME}}}} sähköpostiosoitteen varmennus', +'confirmemail_body' => 'Joku IP-osoitteesta $1 on rekisteröinyt {{GRAMMAR:inessive|{{SITENAME}}}} tunnuksen $2 tällä sähköpostiosoitteella. Varmenna, että tämä tunnus kuuluu sinulle avaamalla seuraava linkki selaimellasi: @@ -3111,8 +3180,30 @@ Jos et ole rekisteröinyt tätä tunnusta, peruuta sähköpostiosoitteen varmenn $5 Varmennuskoodi vanhenee $4.', -'confirmemail_invalidated' => 'Sähköpostiosoitteen varmennus peruutettiin', -'invalidateemail' => 'Sähköpostiosoitteen varmennuksen peruuttaminen', +'confirmemail_body_changed' => 'Joku IP-osoitteesta $1 on vaihtanut {{GRAMMAR:inessive|{{SITENAME}}}} tunnuksen $2 sähköpostiosoitteeksi tämän osoitteen. + +Varmenna, että tämä tunnus kuuluu sinulle ja uudelleenaktivoi sähköpostitoiminnot avaamalla seuraava linkki selaimellasi: + +$3 + +Jos tunnus ei kuulu sinulle, peruuta sähköpostiosoitteen varmennus avaamalla seuraava linkki: + +$5 + +Varmennuskoodi vanhenee $4.', +'confirmemail_body_set' => 'Joku, todennäköisesti sinä, IP-osoitteesta $1 on vaihtanut {{GRAMMAR:inessive|{{SITENAME}}}} tunnuksen $2 sähköpostiosoitteeksi tämän osoitteen. + +Varmenna, että tämä tunnus kuuluu sinulle ja aktivoi sähköpostitoiminnot uudelleen avaamalla seuraava linkki selaimellasi: + +$3 + +Jos tunnus ei kuulu sinulle, peruuta sähköpostiosoitteen varmennus avaamalla seuraava linkki: + +$5 + +Varmennuskoodi vanhenee $4.', +'confirmemail_invalidated' => 'Sähköpostiosoitteen varmennus peruutettiin', +'invalidateemail' => 'Sähköpostiosoitteen varmennuksen peruuttaminen', # Scary transclusion 'scarytranscludedisabled' => '[Wikienvälinen sisällytys ei ole käytössä]', @@ -3157,6 +3248,7 @@ Varmista, että haluat luoda sivun uudelleen.", 'table_pager_first' => 'Ensimmäinen sivu', 'table_pager_last' => 'Viimeinen sivu', 'table_pager_limit' => 'Näytä $1 nimikettä sivulla', +'table_pager_limit_label' => 'Kohteita sivua kohden:', 'table_pager_limit_submit' => 'Hae', 'table_pager_empty' => 'Ei tuloksia', @@ -3217,6 +3309,7 @@ Voit myös muokata listaa [[Special:Watchlist/edit|tavalliseen tapaan]].', 'version-specialpages' => 'Toimintosivut', 'version-parserhooks' => 'Jäsenninkytkökset', 'version-variables' => 'Muuttujat', +'version-skins' => 'Ulkoasut', 'version-other' => 'Muut', 'version-mediahandlers' => 'Median käsittelijät', 'version-hooks' => 'Kytköspisteet', @@ -3228,6 +3321,13 @@ Voit myös muokata listaa [[Special:Watchlist/edit|tavalliseen tapaan]].', 'version-hook-subscribedby' => 'Kytkökset', 'version-version' => '(Versio $1)', 'version-license' => 'Lisenssi', +'version-poweredby-credits' => "Tämä wiki käyttää '''[http://www.mediawiki.org/ MediaWikiä]'''. Copyright © 2001–$1 $2.", +'version-poweredby-others' => 'muut', +'version-license-info' => 'MediaWiki on vapaa ohjelmisto – voit levittää sitä ja/tai muokata sitä Free Software Foundationin GNU General Public Licensen ehdoilla, joko version 2 tai halutessasi mikä tahansa myöhemmän version mukaisesti. + +MediaWikiä levitetään siinä toivossa, että se olisi hyödyllinen, mutta ilman mitään takuuta; ilman edes hiljaista takuuta kaupallisesti hyväksyttävästä laadusta tai soveltuvuudesta tiettyyn tarkoitukseen. Katso GPL-lisenssistä lisää yksityiskohtia. + +Sinun olisi pitänyt saada [{{SERVER}}{{SCRIPTPATH}}/COPYING kopio GNU General Public Licensestä] tämän ohjelman mukana. Jos et saanut kopiota, kirjoita siitä osoitteeseen Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA tai [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html lue se Internetissä].', 'version-software' => 'Asennettu ohjelmisto', 'version-software-product' => 'Tuote', 'version-software-version' => 'Versio', @@ -3295,6 +3395,15 @@ Kirjoita tiedostonimi ilman ”{{ns:file}}:”-etuliitettä.', 'tags-edit' => 'muokkaa', 'tags-hitcount' => '$1 {{PLURAL:$1|muutos|muutosta}}', +# Special:ComparePages +'comparepages' => 'Vertaile sivuja', +'compare-selector' => 'Vertaile sivuversioita', +'compare-page1' => 'Sivu 1', +'compare-page2' => 'Sivu 2', +'compare-rev1' => 'Versio 1', +'compare-rev2' => 'Versio 2', +'compare-submit' => 'Vertaile', + # Database error messages 'dberr-header' => 'Wikissä on tietokantaongelma', 'dberr-problems' => 'Tällä sivustolla on teknisiä ongelmia.', @@ -3311,8 +3420,13 @@ Kirjoita tiedostonimi ilman ”{{ns:file}}:”-etuliitettä.', 'htmlform-float-invalid' => 'Antamasi arvo ei ole numero.', 'htmlform-int-toolow' => 'Annettu arvo on pienempi kuin alaraja $1', 'htmlform-int-toohigh' => 'Annettu arvo on suurempi kuin yläraja $1', +'htmlform-required' => 'Tämä arvo on vaadittu', 'htmlform-submit' => 'Lähetä', 'htmlform-reset' => 'Kumoa muutokset', 'htmlform-selectorother-other' => 'Muu', +# SQLite database support +'sqlite-has-fts' => '$1, jossa on tuki kokotekstihaulle', +'sqlite-no-fts' => '$1, jossa ei ole tukea kokotekstihaulle', + ); diff --git a/languages/messages/MessagesFj.php b/languages/messages/MessagesFj.php index 09334406..0bb30c62 100644 --- a/languages/messages/MessagesFj.php +++ b/languages/messages/MessagesFj.php @@ -102,7 +102,7 @@ $messages = array( 'yourname' => 'Yaca vakayagataki', 'yourpassword' => 'Yaca vuni', 'yourpasswordagain' => 'Vola tale na Yaca vuni', -'remembermypassword' => 'Nanuma na yacaqu ena komipiuta oqo', +'remembermypassword' => 'Nanuma na yacaqu ena komipiuta oqo (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'Curu mai', 'userlogin' => 'Curu mai / Dolava nomu Akaude', 'logout' => 'Curu yani', diff --git a/languages/messages/MessagesFo.php b/languages/messages/MessagesFo.php index 18b064a8..44203628 100644 --- a/languages/messages/MessagesFo.php +++ b/languages/messages/MessagesFo.php @@ -124,8 +124,7 @@ $messages = array( 'tog-editsection' => 'Rætta greinpart við hjálp av [rætta]-ávísing', 'tog-editsectiononrightclick' => 'Rætta greinpart við at høgraklikkja á yvirskrift av greinparti (JavaScript)', 'tog-showtoc' => 'Vís innihaldsyvurlit (Til greinir við meira enn trimun greinpartum)', -'tog-rememberpassword' => 'Minst til loyniorð næstu ferð', -'tog-editwidth' => 'Rættingarkassin hevur fulla breid', +'tog-rememberpassword' => 'Minst til loyniorð næstu ferð (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Legg síður, sum eg stovni, í mítt eftirlit', 'tog-watchdefault' => 'Vaka yvur nýggjum og broyttum greinum', 'tog-minordefault' => 'Merk sum standard allar broytingar sum smærri', @@ -385,7 +384,7 @@ Tín konto er nú stovnað. Gloym ikki at broyta tínar {{SITENAME}} innstilling 'yourname' => 'Títt brúkaranavn:', 'yourpassword' => 'Títt loyniorð:', 'yourpasswordagain' => 'Skriva loyniorð umaftur:', -'remembermypassword' => 'Minst til loyniorðið hjá mær.', +'remembermypassword' => 'Minst til loyniorðið hjá mær (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'Rita inn', 'nav-login-createaccount' => 'Stovna kontu ella rita inn', 'loginprompt' => 'Cookies má verða sett til fyri at innrita á {{SITENAME}}.', @@ -485,9 +484,6 @@ Ert tú ein dulnevndur brúkari, og kennir, at óvikomandi viðmerkingar eru ven 'copyrightwarning' => "Alt íkast til {{SITENAME}} er útgivið undir $2 (sí $1 fyri smálutir). Vilt tú ikki hava skriving tína broytta miskunnarleyst og endurspjadda frítt, so send hana ikki inn.
    Við at senda arbeiði títt inn, lovar tú, at tú hevur skrivað tað, ella at tú hevur avritað tað frá tilfeingi ið er almenn ogn — hetta umfatar '''ikki''' flestu vevsíður. '''SEND IKKI UPPHAVSRÆTTARVART TILFAR UTTAN LOYVI!'''", -'longpagewarning' => "'''ÁVARING: Henda síðan er $1 kilobýt long. -Summir sneytarar kunnu hava trupulleikar við at viðgerða síður upp ímóti ella longri enn 32 kb. -Vinarliga umhugsa at býta síðuna sundur í styttri pettir.'''", 'protectedpagewarning' => "'''ÁVARING: Henda síðan er friðað, so at einans brúkarar við umboðsstjóraheimildum kunnu broyta hana.'''", 'semiprotectedpagewarning' => "'''Viðmerking:''' Hendan grein er læst soleiðis at bert skrásetir brúkaris kunnu rætta hana.", 'templatesused' => 'Fyrimyndir brúktar á hesu síðu:', @@ -638,27 +634,27 @@ Vinarliga umhugsa at býta síðuna sundur í styttri pettir.'''", 'recentchangeslinked-toolbox' => 'Viðkomandi broytingar', # Upload -'upload' => 'Legg fílu upp', -'uploadbtn' => 'Legg fílu upp', -'uploadnologin' => 'Ikki ritað inn', -'uploadnologintext' => 'Tú mást hava [[Special:UserLogin|ritað inn]] +'upload' => 'Legg fílu upp', +'uploadbtn' => 'Legg fílu upp', +'uploadnologin' => 'Ikki ritað inn', +'uploadnologintext' => 'Tú mást hava [[Special:UserLogin|ritað inn]] fyri at leggja fílur upp.', -'uploadlog' => 'fílu logg', -'uploadlogpage' => 'Fílugerðabók', -'filename' => 'Fílunavn', -'filedesc' => 'Samandráttur', -'fileuploadsummary' => 'Samandráttur:', -'filestatus' => 'Upphavsrættar støða:', -'filesource' => 'Kelda:', -'uploadedfiles' => 'Upplagdar fílur', -'ignorewarnings' => 'Ikki vísa ávaringar', -'badfilename' => 'Myndin er umnevnd til "$1".', -'successfulupload' => 'Upplegging væleydnað', -'savefile' => 'Goym fílu', -'uploadedimage' => 'sent "[[$1]]" upp', -'sourcefilename' => 'Keldufílunavn:', -'destfilename' => 'Málfílunavn:', -'watchthisupload' => 'Hav eftirlit við hesi síðuni', +'uploadlog' => 'fílu logg', +'uploadlogpage' => 'Fílugerðabók', +'filename' => 'Fílunavn', +'filedesc' => 'Samandráttur', +'fileuploadsummary' => 'Samandráttur:', +'filestatus' => 'Upphavsrættar støða:', +'filesource' => 'Kelda:', +'uploadedfiles' => 'Upplagdar fílur', +'ignorewarnings' => 'Ikki vísa ávaringar', +'badfilename' => 'Myndin er umnevnd til "$1".', +'savefile' => 'Goym fílu', +'uploadedimage' => 'sent "[[$1]]" upp', +'sourcefilename' => 'Keldufílunavn:', +'destfilename' => 'Málfílunavn:', +'watchthisupload' => 'Hav eftirlit við hesi síðuni', +'upload-success-subj' => 'Upplegging væleydnað', 'upload-file-error' => 'Innvortis brek', @@ -815,7 +811,6 @@ ella hevur hann valt ikki at taka ímóti t-posti frá øðrum brúkarum.', # Watchlist 'watchlist' => 'Mítt eftirlit', 'mywatchlist' => 'Mítt eftirlit', -'watchlistfor' => "(fyri '''$1''')", 'nowatchlist' => 'Tú hevur ongar lutir í eftirlitinum.', 'watchnologin' => 'Tú hevur ikki ritað inn', 'addedwatch' => 'Lagt undir eftirlit', @@ -1091,8 +1086,8 @@ Please visit [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] # Media information 'imagemaxsize' => 'Avmarka myndir á myndalýsingarsíðum til:', 'thumbsize' => 'Smámyndastødd:', -'file-info-size' => '($1 × $2 pixel, stødd fílu: $3, MIME-slag: $4)', -'svg-long-desc' => '(SVG fíle, nominelt $1 × $2 pixel, fíle stødd: $3)', +'file-info-size' => '$1 × $2 pixel, stødd fílu: $3, MIME-slag: $4', +'svg-long-desc' => 'SVG fíle, nominelt $1 × $2 pixel, fíle stødd: $3', # Special:NewFiles 'newimages' => 'Nýggjar myndir', diff --git a/languages/messages/MessagesFr.php b/languages/messages/MessagesFr.php index 8552a338..5c26fffe 100644 --- a/languages/messages/MessagesFr.php +++ b/languages/messages/MessagesFr.php @@ -36,6 +36,7 @@ * @author Kropotkine 113 * @author Litlok * @author Louperivois + * @author Lucyin * @author McDutchie * @author Meithal * @author Moyg @@ -53,6 +54,7 @@ * @author Urhixidur * @author Verdy p * @author Wyz + * @author Yumeki * @author Zetud * @author Горан Анђелковић * @author לערי ריינהארט @@ -172,10 +174,10 @@ $magicWords = array( 'img_none' => array( '1', 'néant', 'neant', 'none' ), 'img_center' => array( '1', 'centré', 'center', 'centre' ), 'img_framed' => array( '1', 'cadre', 'encadré', 'encadre', 'framed', 'enframed', 'frame' ), - 'img_frameless' => array( '1', 'sans_cadre', 'sans cadre', 'non encadré', 'non encadre', 'frameless' ), + 'img_frameless' => array( '1', 'sans_cadre', 'non_encadré', 'non_encadre', 'frameless' ), 'img_upright' => array( '1', 'redresse', 'redresse=$1', 'redresse $1', 'upright', 'upright=$1', 'upright $1' ), 'img_border' => array( '1', 'bordure', 'border' ), - 'img_baseline' => array( '1', 'ligne de base', 'base', 'baseline' ), + 'img_baseline' => array( '1', 'ligne_de_base', 'base', 'baseline' ), 'img_sub' => array( '1', 'indice', 'ind', 'sub' ), 'img_super' => array( '1', 'exposant', 'exp', 'super', 'sup' ), 'img_top' => array( '1', 'haut', 'top' ), @@ -189,6 +191,7 @@ $magicWords = array( 'nse' => array( '0', 'ESPACENX:', 'NSE:' ), 'localurl' => array( '0', 'URLLOCALE:', 'LOCALURL:' ), 'localurle' => array( '0', 'URLLOCALEX:', 'LOCALURLE:' ), + 'articlepath' => array( '0', 'CHEMINARTICLE', 'ARTICLEPATH' ), 'server' => array( '0', 'SERVEUR', 'SERVER' ), 'servername' => array( '0', 'NOMSERVEUR', 'SERVERNAME' ), 'scriptpath' => array( '0', 'CHEMINSCRIPT', 'SCRIPTPATH' ), @@ -205,6 +208,7 @@ $magicWords = array( 'revisionday' => array( '1', 'JOURVERSION', 'JOUR1VERSION', 'REVISIONDAY' ), 'revisionday2' => array( '1', 'JOUR2VERSION', 'REVISIONDAY2' ), 'revisionmonth' => array( '1', 'MOISVERSION', 'REVISIONMONTH' ), + 'revisionmonth1' => array( '1', 'MOISVERSION1', 'REVISIONMONTH1' ), 'revisionyear' => array( '1', 'ANNEEVERSION', 'REVISIONYEAR' ), 'revisiontimestamp' => array( '1', 'INSTANTVERSION', 'REVISIONTIMESTAMP' ), 'revisionuser' => array( '1', 'UTILISATEURVERSION', 'REVISIONUSER' ), @@ -247,92 +251,93 @@ $magicWords = array( ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'Doubles redirections', 'DoublesRedirections', 'Redirections doubles', 'RedirectionsDoubles' ), - 'BrokenRedirects' => array( 'Redirections cassées', 'RedirectionCassées', 'Redirections cassees', 'RedirectionsCassees' ), - 'Disambiguations' => array( 'Homonymies', 'Homonymie', 'Pages d\'homonymie' ), + 'DoubleRedirects' => array( 'Doubles_redirections', 'DoublesRedirections', 'Redirections_doubles', 'RedirectionsDoubles' ), + 'BrokenRedirects' => array( 'Redirections_cassées', 'RedirectionCassées', 'Redirections_cassees', 'RedirectionsCassees' ), + 'Disambiguations' => array( 'Homonymies', 'Homonymie', 'Pages_d\'homonymie' ), 'Userlogin' => array( 'Connexion', 'Identification' ), 'Userlogout' => array( 'Déconnexion', 'Deconnexion' ), - 'CreateAccount' => array( 'Créer un compte', 'CréerUnCompte', 'CréerCompte' ), + 'CreateAccount' => array( 'Créer_un_compte', 'CréerUnCompte', 'CréerCompte' ), 'Preferences' => array( 'Préférences' ), - 'Watchlist' => array( 'Liste de suivi', 'ListeDeSuivi', 'Suivi' ), - 'Recentchanges' => array( 'Modifications récentes', 'Modifications recentes', 'ModificationsRécentes', 'ModificationsRecentes' ), + 'Watchlist' => array( 'Liste_de_suivi', 'ListeDeSuivi', 'Suivi' ), + 'Recentchanges' => array( 'Modifications_récentes', 'Modifications_recentes', 'ModificationsRécentes', 'ModificationsRecentes' ), 'Upload' => array( 'Téléverser', 'Televerser', 'Téléversement', 'Televersement', 'Téléchargement', 'Telechargement' ), - 'Listfiles' => array( 'Liste des fichiers', 'ListeDesFichiers', 'Liste des images', 'ListeDesImages' ), - 'Newimages' => array( 'Nouveaux fichiers', 'NouveauxFichiers', 'Nouvelles images', 'NouvellesImages' ), - 'Listusers' => array( 'Liste des utilisateurs', 'ListeDesUtilisateurs', 'Utilisateurs' ), - 'Listgrouprights' => array( 'Liste des droits de groupe', 'ListeDesDroitsDeGroupes' ), + 'Listfiles' => array( 'Liste_des_fichiers', 'ListeDesFichiers', 'Liste_des_images', 'ListeDesImages' ), + 'Newimages' => array( 'Nouveaux_fichiers', 'NouveauxFichiers', 'Nouvelles_images', 'NouvellesImages' ), + 'Listusers' => array( 'Liste_des_utilisateurs', 'ListeDesUtilisateurs', 'Utilisateurs' ), + 'Listgrouprights' => array( 'Liste_des_droits_de_groupe', 'ListeDesDroitsDeGroupes' ), 'Statistics' => array( 'Statistiques', 'Stats' ), - 'Randompage' => array( 'Page au hasard', 'PageAuHasard', 'Au hasard', 'AuHasard', 'Aléatoire', 'Aleatoire' ), - 'Lonelypages' => array( 'Pages orphelines', 'PagesOrphelines' ), - 'Uncategorizedpages' => array( 'Pages non catégorisées', 'PagesNonCatégorisées', 'Pages non categorisees', 'PagesNonCategorisees', 'Pages sans catégorie', 'PagesSansCatégorie', 'Pages sans categorie', 'PagesSansCategorie' ), - 'Uncategorizedcategories' => array( 'Catégories non catégorisées', 'CatégoriesNonCatégorisées', 'Categories non categorisees', 'CategoriesNonCategorisees', 'Catégories sans catégorie', 'CatégoriesSansCatégorie', 'Categories sans categorie', 'CategoriesSansCategorie' ), - 'Uncategorizedimages' => array( 'Fichiers non catégorisés', 'FichiersNonCatégorisés', 'Fichiers non categorises', 'FichiersNonCategorises', 'Fichiers sans catégorie', 'FichiersSansCatégorie', 'Fichiers sans categorie', 'FichiersSansCategorie', 'Images non catégorisées', 'ImagesNonCatégorisées', 'Images non categorisees', 'ImagesNonCategorisees', 'Images sans catégorie', 'ImagesSansCatégorie', 'Images sans categorie', 'ImagesSansCategorie' ), - 'Uncategorizedtemplates' => array( 'Modèles non catégorisés', 'ModèlesNonCatégorisés', 'Modeles non categorises', 'ModelesNonCategorises', 'Modèles sans catégorie', 'ModèlesSansCatégorie', 'Modeles sans catégorie', 'ModelesSansCatégorie' ), - 'Unusedcategories' => array( 'Catégories inutilisées', 'CatégoriesInutilisées', 'Categories inutilisees', 'CategoriesInutilisees', 'Catégories non utilisées', 'CatégoriesNonUtilisées', 'Categories non utilisees', 'CategoriesNonUtilisees' ), - 'Unusedimages' => array( 'Fichiers inutilisés', 'FichiersInutilisés', 'Fichiers inutilises', 'FichiersInutilises', 'Fichiers non utilisés', 'FichiersNon utilisés', 'Fichiers non utilises', 'FichiersNon utilises', 'Images inutilisées', 'ImagesInutilisées', 'Images inutilisees', 'ImagesInutilisees', 'Images non utilisées', 'ImagesNonUtilisées', 'Images non utilisees', 'ImagesNonUtilisees' ), - 'Wantedpages' => array( 'Pages demandées', 'PagesDemandées', 'Pages demandees', 'PagesDemandees', 'Liens brisés', 'LiensBrisés', 'Liens brises', 'LiensBrises' ), - 'Wantedcategories' => array( 'Catégories demandées', 'CatégoriesDemandées', 'Categories demandees', 'CategoriesDemandees' ), - 'Wantedfiles' => array( 'Fichiers demandés', 'FichiersDemandés', 'Fichiers demandes', 'FichiersDemandes' ), - 'Wantedtemplates' => array( 'Modèles demandés', 'ModèlesDemandés', 'Modeles demandes', 'ModelesDemandes' ), - 'Mostlinked' => array( 'Pages les plus liées', 'PagesLesPlusLiées', 'Pages les plus liees', 'PagesLesPlusLiees', 'Les plus liées', 'LesPlusLiées', 'Les plus liees', 'LesPlusLiees' ), - 'Mostlinkedcategories' => array( 'Catégories les plus liées', 'CatégoriesLesPlusLiées', 'Categories les plus liees', 'CategoriesLesPlusLiees', 'Catégories les plus utilisées', 'CatégoriesLesPlusUtilisées', 'Categories les plus utilisees', 'CategoriesLesPlusUtilisees' ), - 'Mostlinkedtemplates' => array( 'Modèles les plus liés', 'ModèlesLesPlusLiés', 'Modeles les plus lies', 'ModelesLesPlusLies', 'Modèles les plus utilisés', 'ModèlesLesPlusUtilisés', 'Modeles les plus utilises', 'ModelesLesPlusUtilises' ), - 'Mostimages' => array( 'Fichiers les plus liés', 'FichiersLesPlusLiés', 'Fichiers les plus lies', 'FichiersLesPlusLies', 'Fichiers les plus utilisés', 'FichiersLesPlusUtilisés', 'Fichiers les plus utilises', 'FichiersLesPlusUtilises', 'Images les plus liées', 'ImagesLesPlusLiées', 'Images les plus liees', 'ImagesLesPlusLiees', 'Images les plus utilisées', 'ImagesLesPlusUtilisées', 'Images les plus utilisees', 'ImagesLesPlusUtilisees' ), - 'Mostcategories' => array( 'Pages les plus catégorisées', 'PagesLesPlusCatégorisées', 'Pages les plus categorisees', 'PagesLesPlusCategorisees', 'Les plus catégorisés', 'LesPlusCatégorisés', 'Les plus categorises', 'LesPlusCategorises' ), - 'Mostrevisions' => array( 'Pages les plus modifiées', 'PagesLesPlusModifiées', 'Pages les plus modifiees', 'PagesLesPlusModifiees', 'Les plus modifiés', 'LesPlusModifiés', 'Les plus modifies', 'LesPlusModifies' ), - 'Fewestrevisions' => array( 'Pages les moins modifiées', 'PagesLesMoinsModifiées', 'Pages les moins modifiees', 'PagesLesMoinsModifiees', 'Les moins modifiés', 'LesMoinsModifiés', 'Les moins modifies', 'LesMoinsModifies' ), - 'Shortpages' => array( 'Pages courtes', 'PagesCourtes' ), - 'Longpages' => array( 'Pages longues', 'PagesLongues' ), - 'Newpages' => array( 'Nouvelles pages', 'NouvellesPages', 'Pages récentes', 'PagesRécentes', 'Pages recentes', 'PagesRecentes' ), - 'Ancientpages' => array( 'Pages anciennes', 'PagesAnciennes', 'Anciennes pages', 'AnciennesPages' ), - 'Deadendpages' => array( 'Pages en impasse', 'PagesEnImpasse' ), - 'Protectedpages' => array( 'Pages protégées', 'PagesProtégées', 'Pages protegees', 'PagesProtegees' ), - 'Protectedtitles' => array( 'Titres protégés', 'TitresProtégés', 'Titres proteges', 'TitresProteges' ), - 'Allpages' => array( 'Toutes les pages', 'ToutesLesPages' ), + 'Randompage' => array( 'Page_au_hasard', 'PageAuHasard', 'Au_hasard', 'AuHasard', 'Aléatoire', 'Aleatoire' ), + 'Lonelypages' => array( 'Pages_orphelines', 'PagesOrphelines' ), + 'Uncategorizedpages' => array( 'Pages_non_catégorisées', 'PagesNonCatégorisées', 'Pages_non_categorisees', 'PagesNonCategorisees', 'Pages_sans_catégorie', 'PagesSansCatégorie', 'Pages_sans_categorie', 'PagesSansCategorie' ), + 'Uncategorizedcategories' => array( 'Catégories_non_catégorisées', 'CatégoriesNonCatégorisées', 'Categories_non_categorisees', 'CategoriesNonCategorisees', 'Catégories_sans_catégorie', 'CatégoriesSansCatégorie', 'Categories_sans_categorie', 'CategoriesSansCategorie' ), + 'Uncategorizedimages' => array( 'Fichiers_non_catégorisés', 'FichiersNonCatégorisés', 'Fichiers_non_categorises', 'FichiersNonCategorises', 'Fichiers_sans_catégorie', 'FichiersSansCatégorie', 'Fichiers_sans_categorie', 'FichiersSansCategorie', 'Images_non_catégorisées', 'ImagesNonCatégorisées', 'Images_non_categorisees', 'ImagesNonCategorisees', 'Images_sans_catégorie', 'ImagesSansCatégorie', 'Images_sans_categorie', 'ImagesSansCategorie' ), + 'Uncategorizedtemplates' => array( 'Modèles_non_catégorisés', 'ModèlesNonCatégorisés', 'Modeles_non_categorises', 'ModelesNonCategorises', 'Modèles_sans_catégorie', 'ModèlesSansCatégorie', 'Modeles_sans_catégorie', 'ModelesSansCatégorie' ), + 'Unusedcategories' => array( 'Catégories_inutilisées', 'CatégoriesInutilisées', 'Categories_inutilisees', 'CategoriesInutilisees', 'Catégories_non_utilisées', 'CatégoriesNonUtilisées', 'Categories_non_utilisees', 'CategoriesNonUtilisees' ), + 'Unusedimages' => array( 'Fichiers_inutilisés', 'FichiersInutilisés', 'Fichiers_inutilises', 'FichiersInutilises', 'Fichiers_non_utilisés', 'FichiersNon_utilisés', 'Fichiers_non_utilises', 'FichiersNon_utilises', 'Images_inutilisées', 'ImagesInutilisées', 'Images_inutilisees', 'ImagesInutilisees', 'Images_non_utilisées', 'ImagesNonUtilisées', 'Images_non_utilisees', 'ImagesNonUtilisees' ), + 'Wantedpages' => array( 'Pages_demandées', 'PagesDemandées', 'Pages_demandees', 'PagesDemandees', 'Liens_brisés', 'LiensBrisés', 'Liens_brises', 'LiensBrises' ), + 'Wantedcategories' => array( 'Catégories_demandées', 'CatégoriesDemandées', 'Categories_demandees', 'CategoriesDemandees' ), + 'Wantedfiles' => array( 'Fichiers_demandés', 'FichiersDemandés', 'Fichiers_demandes', 'FichiersDemandes' ), + 'Wantedtemplates' => array( 'Modèles_demandés', 'ModèlesDemandés', 'Modeles_demandes', 'ModelesDemandes' ), + 'Mostlinked' => array( 'Pages_les_plus_liées', 'PagesLesPlusLiées', 'Pages_les_plus_liees', 'PagesLesPlusLiees', 'Les_plus_liées', 'LesPlusLiées', 'Les_plus_liees', 'LesPlusLiees' ), + 'Mostlinkedcategories' => array( 'Catégories_les_plus_liées', 'CatégoriesLesPlusLiées', 'Categories_les_plus_liees', 'CategoriesLesPlusLiees', 'Catégories_les_plus_utilisées', 'CatégoriesLesPlusUtilisées', 'Categories_les_plus_utilisees', 'CategoriesLesPlusUtilisees' ), + 'Mostlinkedtemplates' => array( 'Modèles_les_plus_liés', 'ModèlesLesPlusLiés', 'Modeles_les_plus_lies', 'ModelesLesPlusLies', 'Modèles_les_plus_utilisés', 'ModèlesLesPlusUtilisés', 'Modeles_les_plus_utilises', 'ModelesLesPlusUtilises' ), + 'Mostimages' => array( 'Fichiers_les_plus_liés', 'FichiersLesPlusLiés', 'Fichiers_les_plus_lies', 'FichiersLesPlusLies', 'Fichiers_les_plus_utilisés', 'FichiersLesPlusUtilisés', 'Fichiers_les_plus_utilises', 'FichiersLesPlusUtilises', 'Images_les_plus_liées', 'ImagesLesPlusLiées', 'Images_les_plus_liees', 'ImagesLesPlusLiees', 'Images_les_plus_utilisées', 'ImagesLesPlusUtilisées', 'Images_les_plus_utilisees', 'ImagesLesPlusUtilisees' ), + 'Mostcategories' => array( 'Pages_les_plus_catégorisées', 'PagesLesPlusCatégorisées', 'Pages_les_plus_categorisees', 'PagesLesPlusCategorisees', 'Les_plus_catégorisés', 'LesPlusCatégorisés', 'Les_plus_categorises', 'LesPlusCategorises' ), + 'Mostrevisions' => array( 'Pages_les_plus_modifiées', 'PagesLesPlusModifiées', 'Pages_les_plus_modifiees', 'PagesLesPlusModifiees', 'Les_plus_modifiés', 'LesPlusModifiés', 'Les_plus_modifies', 'LesPlusModifies' ), + 'Fewestrevisions' => array( 'Pages_les_moins_modifiées', 'PagesLesMoinsModifiées', 'Pages_les_moins_modifiees', 'PagesLesMoinsModifiees', 'Les_moins_modifiés', 'LesMoinsModifiés', 'Les_moins_modifies', 'LesMoinsModifies' ), + 'Shortpages' => array( 'Pages_courtes', 'PagesCourtes' ), + 'Longpages' => array( 'Pages_longues', 'PagesLongues' ), + 'Newpages' => array( 'Nouvelles_pages', 'NouvellesPages', 'Pages_récentes', 'PagesRécentes', 'Pages_recentes', 'PagesRecentes' ), + 'Ancientpages' => array( 'Pages_anciennes', 'PagesAnciennes', 'Anciennes_pages', 'AnciennesPages' ), + 'Deadendpages' => array( 'Pages_en_impasse', 'PagesEnImpasse' ), + 'Protectedpages' => array( 'Pages_protégées', 'PagesProtégées', 'Pages_protegees', 'PagesProtegees' ), + 'Protectedtitles' => array( 'Titres_protégés', 'TitresProtégés', 'Titres_proteges', 'TitresProteges' ), + 'Allpages' => array( 'Toutes_les_pages', 'ToutesLesPages' ), 'Prefixindex' => array( 'Index', 'Préfixes', 'Prefixes' ), - 'Ipblocklist' => array( 'Liste des blocages', 'ListeDesBlocages', 'Blocages', 'Utilisateurs bloqués', 'UtilisateursBloqués', 'Utilisateurs bloques', 'UtilisateursBloques', 'IP bloquées', 'IPBloquees', 'IPBloquées' ), - 'Specialpages' => array( 'Pages spéciales', 'PagesSpéciales', 'Pages speciales', 'PagesSpeciales' ), - 'Emailuser' => array( 'Envoyer un courriel', 'EnvoyerUnCourriel', 'Courriel', 'Envoyer un e-mail', 'EnvoyerUnEMail', 'E-mail', 'EMail' ), - 'Confirmemail' => array( 'Confirmer le courriel', 'ConfirmerLeCourriel' ), - 'Whatlinkshere' => array( 'Pages liées', 'PagesLiées', 'Pages liees', 'PagesLiees' ), - 'Recentchangeslinked' => array( 'Suivi des liens', 'SuiviDesLiens' ), - 'Movepage' => array( 'Renommer une page', 'Renommer', 'Renommage' ), + 'Ipblocklist' => array( 'Liste_des_blocages', 'ListeDesBlocages', 'Blocages', 'Utilisateurs_bloqués', 'UtilisateursBloqués', 'Utilisateurs_bloques', 'UtilisateursBloques', 'IP_bloquées', 'IPBloquees', 'IPBloquées' ), + 'Unblock' => array( 'Débloquer', 'Déblocage' ), + 'Specialpages' => array( 'Pages_spéciales', 'PagesSpéciales', 'Pages_speciales', 'PagesSpeciales' ), + 'Emailuser' => array( 'Envoyer_un_courriel', 'EnvoyerUnCourriel', 'Courriel', 'Envoyer_un_e-mail', 'EnvoyerUnEMail', 'E-mail', 'EMail' ), + 'Confirmemail' => array( 'Confirmer_l\'adresse_de_contact', 'Confirmer_le_courriel', 'ConfirmerLeCourriel' ), + 'Whatlinkshere' => array( 'Pages_liées', 'PagesLiées', 'Pages_liees', 'PagesLiees' ), + 'Recentchangeslinked' => array( 'Suivi_des_liens', 'SuiviDesLiens' ), + 'Movepage' => array( 'Renommer_une_page', 'Renommer', 'Renommage' ), 'Blockme' => array( 'Bloquez-moi', 'Bloquezmoi' ), - 'Booksources' => array( 'Ouvrages de référence', 'Ouvrages de reference', 'Ouvragesderéférence', 'Ouvragesdereference', 'Recherche ISBN', 'Recherche isbn', 'RechercheISBN', 'Rechercheisbn' ), + 'Booksources' => array( 'Ouvrages_de_référence', 'Ouvrages_de_reference', 'Ouvragesderéférence', 'Ouvragesdereference', 'Recherche_ISBN', 'Recherche_isbn', 'RechercheISBN', 'Rechercheisbn' ), 'Categories' => array( 'Catégories' ), 'Export' => array( 'Exporter', 'Exportation' ), - 'Allmessages' => array( 'Messages système', 'Messages systeme', 'Messagessystème', 'Messagessysteme' ), + 'Allmessages' => array( 'Messages_système', 'Messages_systeme', 'Messagessystème', 'Messagessysteme' ), 'Log' => array( 'Journal', 'Journaux' ), 'Blockip' => array( 'Bloquer', 'Blocage' ), 'Undelete' => array( 'Restaurer', 'Restauration' ), 'Import' => array( 'Importer', 'Importation' ), - 'Lockdb' => array( 'Verrouiller la base', 'Verrouillerlabase', 'Verrouiller base', 'Verrouillerbase', 'Verrouiller BD', 'VerrouillerBD', 'Verrouiller bd', 'Verrouillerbd' ), - 'Unlockdb' => array( 'Déverrouiller la base', 'Déverrouillerlabase', 'Deverrouiller la base', 'Deverrouillerlabase', 'Déverrouiller base', 'Déverrouillerbase', 'Deverrouiller base', 'Deverrouillerbase', 'Déverrouiller BD', 'DéverrouillerBD', 'Deverrouiller BD', 'DeverrouillerBD', 'Déverrouiller bd', 'Déverrouillerbd', 'Deverrouiller bd', 'Deverrouillerbd' ), - 'Userrights' => array( 'Permissions', 'Droits', 'Droits des utilisateurs' ), - 'MIMEsearch' => array( 'Recherche MIME', 'RechercheMIME', 'Recherche mime', 'Recherchemime' ), - 'FileDuplicateSearch' => array( 'Recherche fichier en double', 'RechercheFichierEnDouble' ), - 'Unwatchedpages' => array( 'Pages non suivies', 'Pagesnonsuivies' ), - 'Listredirects' => array( 'Liste des redirections', 'Listedesredirections', 'Liste des redirects', 'Listedesredirects', 'Liste redirections', 'Listeredirections', 'Liste redirects', 'Listeredirects' ), - 'Revisiondelete' => array( 'Versions supprimées', 'Versions supprimees', 'Versionsupprimées', 'Versionsupprimees' ), - 'Unusedtemplates' => array( 'Modèles inutilisés', 'Modèlesinutilisés', 'Modeles inutilises', 'Modelesinutilises', 'Modèles non utilisés', 'Modèlesnonutilisés', 'Modeles non utilises', 'Modelesnonutilises' ), - 'Randomredirect' => array( 'Redirection au hasard', 'Redirect au hasard', 'Redirectionauhasard', 'Redirectauhasard', 'Redirection aléatoire', 'Redirect aléatoire', 'Redirectionaléatoire', 'Redirectaléatoire', 'Redirection aleatoire', 'Redirect aleatoire', 'Redirectionaleatoire', 'Redirectaleatoire' ), - 'Mypage' => array( 'Ma page', 'Mapage' ), - 'Mytalk' => array( 'Mes discussions', 'Mesdiscussions' ), - 'Mycontributions' => array( 'Mes contributions', 'Mescontributions' ), - 'Listadmins' => array( 'Liste des administrateurs', 'Listedesadministrateurs', 'Liste des admins', 'Listedesadmins', 'Liste admins', 'Listeadmins' ), - 'Listbots' => array( 'Liste des bots', 'ListedesBots' ), - 'Popularpages' => array( 'Pages les plus visitées', 'Pages les plus visitees', 'Pageslesplusvisitées', 'Pageslesplusvisitees' ), + 'Lockdb' => array( 'Verrouiller_la_base', 'Verrouillerlabase', 'Verrouiller_base', 'Verrouillerbase', 'Verrouiller_BD', 'VerrouillerBD', 'Verrouiller_bd', 'Verrouillerbd' ), + 'Unlockdb' => array( 'Déverrouiller_la_base', 'Déverrouillerlabase', 'Deverrouiller_la_base', 'Deverrouillerlabase', 'Déverrouiller_base', 'Déverrouillerbase', 'Deverrouiller_base', 'Deverrouillerbase', 'Déverrouiller_BD', 'DéverrouillerBD', 'Deverrouiller_BD', 'DeverrouillerBD', 'Déverrouiller_bd', 'Déverrouillerbd', 'Deverrouiller_bd', 'Deverrouillerbd' ), + 'Userrights' => array( 'Permissions', 'Droits', 'Droits_des_utilisateurs' ), + 'MIMEsearch' => array( 'Recherche_MIME', 'RechercheMIME', 'Recherche_mime', 'Recherchemime' ), + 'FileDuplicateSearch' => array( 'Recherche_fichier_en_double', 'RechercheFichierEnDouble' ), + 'Unwatchedpages' => array( 'Pages_non_suivies', 'Pagesnonsuivies' ), + 'Listredirects' => array( 'Liste_des_redirections', 'Listedesredirections', 'Liste_des_redirects', 'Listedesredirects', 'Liste_redirections', 'Listeredirections', 'Liste_redirects', 'Listeredirects' ), + 'Revisiondelete' => array( 'Versions_supprimées', 'Versions_supprimees', 'Versionsupprimées', 'Versionsupprimees' ), + 'Unusedtemplates' => array( 'Modèles_inutilisés', 'Modèlesinutilisés', 'Modeles_inutilises', 'Modelesinutilises', 'Modèles_non_utilisés', 'Modèlesnonutilisés', 'Modeles_non_utilises', 'Modelesnonutilises' ), + 'Randomredirect' => array( 'Redirection_au_hasard', 'Redirect_au_hasard', 'Redirectionauhasard', 'Redirectauhasard', 'Redirection_aléatoire', 'Redirect_aléatoire', 'Redirectionaléatoire', 'Redirectaléatoire', 'Redirection_aleatoire', 'Redirect_aleatoire', 'Redirectionaleatoire', 'Redirectaleatoire' ), + 'Mypage' => array( 'Ma_page', 'Mapage' ), + 'Mytalk' => array( 'Mes_discussions', 'Mesdiscussions' ), + 'Mycontributions' => array( 'Mes_contributions', 'Mescontributions' ), + 'Listadmins' => array( 'Liste_des_administrateurs', 'Listedesadministrateurs', 'Liste_des_admins', 'Listedesadmins', 'Liste_admins', 'Listeadmins' ), + 'Listbots' => array( 'Liste_des_bots', 'ListedesBots' ), + 'Popularpages' => array( 'Pages_les_plus_visitées', 'Pages_les_plus_visitees', 'Pageslesplusvisitées', 'Pageslesplusvisitees' ), 'Search' => array( 'Recherche', 'Rechercher', 'Chercher' ), - 'Resetpass' => array( 'Changement du mot de passe', 'ChangementDuMotDePasse' ), - 'Withoutinterwiki' => array( 'Sans interwiki', 'Sansinterwiki', 'Sans interwikis', 'Sansinterwikis' ), - 'MergeHistory' => array( 'Fusionner les historiques', 'FusionnerHistoriques', 'Fusionner l\'historique', 'Fusionnerlhistorique' ), - 'Filepath' => array( 'Chemin du fichier', 'CheminDuFichier', 'CheminFichier' ), - 'Invalidateemail' => array( 'Invalider le courriel', 'Invalider courriel', 'InvaliderCourriel' ), - 'Blankpage' => array( 'Page blanche', 'PageBlanche' ), - 'LinkSearch' => array( 'Recherche de lien', 'Recherche de liens' ), - 'DeletedContributions' => array( 'Contributions supprimées', 'ContributionsSupprimées', 'ContributionSupprimees' ), + 'Resetpass' => array( 'Changement_du_mot_de_passe', 'ChangementDuMotDePasse' ), + 'Withoutinterwiki' => array( 'Sans_interwiki', 'Sansinterwiki', 'Sans_interwikis', 'Sansinterwikis' ), + 'MergeHistory' => array( 'Fusionner_les_historiques', 'FusionnerHistoriques', 'Fusionner_l\'historique', 'Fusionnerlhistorique' ), + 'Filepath' => array( 'Chemin_du_fichier', 'CheminDuFichier', 'CheminFichier' ), + 'Invalidateemail' => array( 'Invalider_le_courriel', 'Invalider_courriel', 'InvaliderCourriel' ), + 'Blankpage' => array( 'Page_blanche', 'PageBlanche' ), + 'LinkSearch' => array( 'Recherche_de_lien', 'Recherche_de_liens' ), + 'DeletedContributions' => array( 'Contributions_supprimées', 'ContributionsSupprimées', 'ContributionSupprimees' ), 'Tags' => array( 'Balises' ), - 'Activeusers' => array( 'Utilisateurs actifs', 'UtilisateursActifs' ), + 'Activeusers' => array( 'Utilisateurs_actifs', 'UtilisateursActifs' ), ); $separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' ); @@ -353,8 +358,7 @@ $messages = array( 'tog-editsection' => 'Activer les modifications de sections grâce aux liens « [modifier] »', 'tog-editsectiononrightclick' => 'Un clic droit sur un titre de section permet de modifier celle-ci (nécessite JavaScript)', 'tog-showtoc' => 'Afficher la table des matières (pour les pages ayant plus de 3 sections)', -'tog-rememberpassword' => 'Se souvenir de mon identification sur cet ordinateur avec un fichier témoin (cookie)', -'tog-editwidth' => 'Afficher la fenêtre de modification en pleine largeur', +'tog-rememberpassword' => 'Se souvenir de mon identification avec ce navigateur (au maximum $1 {{PLURAL:$1|jour|jours}})', 'tog-watchcreations' => 'Ajouter les pages que je crée à ma liste de suivi', 'tog-watchdefault' => 'Ajouter les pages que je modifie à ma liste de suivi', 'tog-watchmoves' => 'Ajouter les pages que je renomme à ma liste de suivi', @@ -500,31 +504,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Ajouter un sujet', -'vector-action-delete' => 'Supprimer', -'vector-action-move' => 'Renommer', -'vector-action-protect' => 'Protéger', -'vector-action-undelete' => 'Rétablir', -'vector-action-unprotect' => 'Déprotéger', -'vector-namespace-category' => 'Catégorie', -'vector-namespace-help' => 'Aide', -'vector-namespace-image' => 'Fichier', -'vector-namespace-main' => 'Page', -'vector-namespace-media' => 'Page de média', -'vector-namespace-mediawiki' => 'Message', -'vector-namespace-project' => 'Page de projet', -'vector-namespace-special' => 'Page spéciale', -'vector-namespace-talk' => 'Discussion', -'vector-namespace-template' => 'Modèle', -'vector-namespace-user' => 'Page utilisateur', -'vector-view-create' => 'Créer', -'vector-view-edit' => 'Modifier', -'vector-view-history' => 'Afficher l’historique', -'vector-view-view' => 'Lire', -'vector-view-viewsource' => 'Voir la source', -'actions' => 'Actions', -'namespaces' => 'Espaces de noms', -'variants' => 'Variantes', +'vector-action-addsection' => 'Ajouter un sujet', +'vector-action-delete' => 'Supprimer', +'vector-action-move' => 'Renommer', +'vector-action-protect' => 'Protéger', +'vector-action-undelete' => 'Rétablir', +'vector-action-unprotect' => 'Déprotéger', +'vector-simplesearch-preference' => 'Activer les suggestions de recherche améliorées (seulement pour Vector)', +'vector-view-create' => 'Créer', +'vector-view-edit' => 'Modifier', +'vector-view-history' => 'Afficher l’historique', +'vector-view-view' => 'Lire', +'vector-view-viewsource' => 'Voir la source', +'actions' => 'Actions', +'namespaces' => 'Espaces de noms', +'variants' => 'Variantes', 'errorpagetitle' => 'Erreur', 'returnto' => 'Revenir à la page $1.', @@ -585,6 +579,9 @@ Trop d’utilisateurs cherchent à consulter cette page. Veuillez attendre un moment avant de retenter l’accès à cette page. $1', +'pool-timeout' => 'Délai dépassé durant l’attente du verrou', +'pool-queuefull' => 'La file de travail est pleine', +'pool-errorunknown' => 'Erreur inconnue', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'À propos de {{SITENAME}}', @@ -749,7 +746,8 @@ N’oubliez pas de personnaliser vos [[Special:Preferences|préférences sur {{S 'yourname' => 'Nom d’utilisateur :', 'yourpassword' => 'Mot de passe :', 'yourpasswordagain' => 'Confirmez le mot de passe :', -'remembermypassword' => "Me reconnecter automatiquement à la prochaine visite (avec un témoin ou ''cookie'')", +'remembermypassword' => 'Me reconnecter automatiquement aux prochaines visites (au maximum $1 {{PLURAL:$1|jour|jours}})', +'securelogin-stick-https' => 'Rester connecté en HTTPS après la connexion', 'yourdomainname' => 'Votre domaine', 'externaldberror' => 'Une erreur s’est produite avec la base de données d’authentification externe, ou bien vous n’êtes pas autorisé{{GENDER:||e|(e)}} à mettre à jour votre compte externe.', 'login' => 'Connexion', @@ -766,6 +764,7 @@ N’oubliez pas de personnaliser vos [[Special:Preferences|préférences sur {{S 'gotaccount' => "Vous avez déjà un compte ? '''$1'''.", 'gotaccountlink' => 'Connectez-vous', 'createaccountmail' => 'par courriel', +'createaccountreason' => 'Motif :', 'badretype' => 'Les mots de passe que vous avez saisis ne correspondent pas.', 'userexists' => 'Le nom d’utilisateur que vous avez saisi est déjà utilisé. Veuillez en choisir un autre.', @@ -786,6 +785,7 @@ Vérifiez l’orthographe, ou [[Special:UserLogin/signup|créez un nouveau compt 'wrongpasswordempty' => 'Vous n’avez pas entré de mot de passe. Veuillez essayer à nouveau.', 'passwordtooshort' => 'Votre mot de passe doit contenir au moins $1 caractère{{PLURAL:$1||s}}.', 'password-name-match' => 'Votre mot de passe doit être différent de votre nom d’utilisateur.', +'password-login-forbidden' => "L'utilisation de ce nom d'utilisateur et de ce mot de passe a été interdite.", 'mailmypassword' => 'Recevoir un nouveau mot de passe par courriel', 'passwordremindertitle' => 'Nouveau mot de passe temporaire pour {{SITENAME}}', 'passwordremindertext' => 'Quelqu’un (probablement vous, ayant l’adresse IP $1) a demandé un nouveau mot de @@ -826,6 +826,9 @@ Veuillez attendre avant d’essayer à nouveau.', 'loginlanguagelabel' => 'Langue : $1', 'suspicious-userlogout' => 'Votre demande de déconnexion a été refusée car il semble qu’elle a été envoyée par un navigateur cassé ou la mise en cache d’un proxy.', +# E-mail sending +'php-mail-error-unknown' => 'Erreur inconnue dans la fonction mail() de PHP.', + # Password reset dialog 'resetpass' => 'Changer de mot de passe', 'resetpass_announce' => 'Vous vous êtes enregistré{{GENDER:||e|(e)}} avec un mot de passe temporaire envoyé par courriel. Pour terminer l’enregistrement, vous devez entrer un nouveau mot de passe ici :', @@ -877,6 +880,7 @@ Vous avez peut-être déjà changé votre mot de passe ou demandé un nouveau mo 'showlivepreview' => 'Aperçu rapide', 'showdiff' => 'Modifications en cours', 'anoneditwarning' => "'''Attention :''' vous n’êtes pas identifié(e). Votre adresse IP sera enregistrée dans l’historique de cette page.", +'anonpreviewwarning' => "''Vous n’êtes pas identifié. Sauvegarder enregistrera votre adresse IP dans l’historique des modifications de la page.''", 'missingsummary' => "'''Rappel :''' vous n’avez pas encore fourni le résumé de votre modification. Si vous cliquez de nouveau sur le bouton « {{int:savearticle}} », la publication sera faite sans nouvel avertissement.", 'missingcommenttext' => 'Veuillez entrer un commentaire ci-dessous.', @@ -953,7 +957,11 @@ La dernière entrée du registre des blocages est indiquée ci-dessous à titre 'usercsspreview' => "'''Rappelez-vous que vous n’êtes qu’en train de prévisualiser votre propre feuille CSS.''' '''Elle n’a pas encore été enregistrée !'''", 'userjspreview' => "'''Rappelez-vous que vous êtes en train de visualiser ou de tester votre code JavaScript et qu’il n’a pas encore été enregistré !'''", -'userinvalidcssjstitle' => "'''Attention :''' il n’existe pas d’habillage « $1 ». Rappelez-vous que les pages personnelles avec extensions .css et .js utilisent des titres en minuscules, par exemple {{ns:user}}:Foo/monobook.css et non {{ns:user}}:Foo/Monobook.css.", +'sitecsspreview' => "'''Souvenez-vous que vous êtes seulement en train de prévisualiser cette feuille de style.''' +'''Elle n’a pas encore été enregistrée !'''", +'sitejspreview' => "'''Souvenez-vous que vous êtes seulement en train de prévisualiser ce code Javascript.''' +'''Il n’a pas encore été enregistré !'''", +'userinvalidcssjstitle' => "'''Attention :''' il n’existe pas d’habillage « $1 ». Rappelez-vous que les pages personnelles avec extensions .css et .js utilisent des titres en minuscules, par exemple {{ns:user}}:Foo/vector.css et non {{ns:user}}:Foo/Vector.css.", 'updated' => '(Mis à jour)', 'note' => "'''Note :'''", 'previewnote' => "'''Attention, ce texte n’est qu’une prévisualisation et n’a pas encore été publié !'''", @@ -991,8 +999,6 @@ Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l’ 'copyrightwarning2' => "Toutes les contributions à {{SITENAME}} peuvent être modifiées ou supprimées par d’autres utilisateurs. Si vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici.
    Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l’avez copié d’une source provenant du domaine public, ou d’une ressource libre. (voir $1 pour plus de détails). '''N’UTILISEZ PAS DE TRAVAUX SOUS DROIT D’AUTEUR SANS AUTORISATION EXPRESSE !'''", -'longpagewarning' => "'''AVERTISSEMENT : cette page a une longueur de $1 Kio ; -certains navigateurs Web gèrent mal la modification des pages approchant ou dépassant 32 Kio. Peut-être devriez-vous diviser la page en sections plus petites.'''", 'longpageerror' => "'''ERREUR : Le texte que vous avez soumis fait $1 Kio, ce qui dépasse la limite fixée à $2 Kio. Le texte ne peut pas être sauvegardé.'''", 'readonlywarning' => "'''AVERTISSEMENT : la base de données a été verrouillée pour des opérations de maintenance. Vous ne pouvez donc pas publier vos modifications pour l’instant.''' Vous pouvez copier le texte dans un fichier texte et le conserver pour plus tard. @@ -1162,6 +1168,8 @@ $1", 'logdelete-failure' => "'''La visibilité du journal n’a pas pu être définie :''' $1", 'revdel-restore' => 'modifier la visibilité', +'revdel-restore-deleted' => 'révisions supprimées', +'revdel-restore-visible' => 'révisions visibles', 'pagehist' => 'Historique de la page', 'deletedhist' => 'Historique supprimé', 'revdelete-content' => 'contenu', @@ -1228,13 +1236,15 @@ Assurez-vous que cette opération conservera la continuité de l’historique de 'mergelogpagetext' => 'Voici la liste des fusions de l’historique d’une page dans celui d’une autre les plus récentes.', # Diffs -'history-title' => 'Historique des versions de « $1 »', +'history-title' => 'Historique des versions de « $1 »', 'difference' => '(Différences entre les versions)', +'difference-multipage' => '(Différence entre les pages)', 'lineno' => 'Ligne $1 :', 'compareselectedversions' => 'Comparer les versions sélectionnées', 'showhideselectedversions' => 'Afficher/masquer les versions sélectionnées', 'editundo' => 'défaire', -'diff-multi' => '({{PLURAL:$1|Une version intermédiaire masquée|$1 versions intermédiaires masquées}})', +'diff-multi' => '({{PLURAL:$1|Une révision intermédiaire|$1 révisions intermédiaires}} par {{PLURAL:$2|un utilisateur|$2 utilisateurs}} {{PLURAL:$1|est masquée|sont masquées}})', +'diff-multi-manyusers' => "({{PLURAL:$1|Une révision intermédiaire|$1 révisions intermédiaires}} par plus {{PLURAL:$2|d'un utilisateur|de $2 utilisateurs}} {{PLURAL:$1|est masquée|sont masquées}})", # Search results 'searchresults' => 'Résultats de la recherche', @@ -1269,6 +1279,7 @@ Assurez-vous que cette opération conservera la continuité de l’historique de 'searchprofile-everything-tooltip' => 'Rechercher dans tout le site (y compris dans les pages de discussion)', 'searchprofile-advanced-tooltip' => 'Choisir les espaces de noms pour la recherche', 'search-result-size' => '$1 ($2 mot{{PLURAL:$2||s}})', +'search-result-category-size' => '$1 membre{{PLURAL:$1||s}} ($2 sous-catégorie{{PLURAL:$2||s}}, $3 fichier{{PLURAL:$3||s}})', 'search-result-score' => 'Pertinence : $1%', 'search-redirect' => '(redirection depuis $1)', 'search-section' => '(section $1)', @@ -1344,6 +1355,7 @@ Essayez en utilisant le préfixe ''all:'' pour rechercher dans tout le contenu ( 'contextlines' => 'Nombre de lignes par réponse :', 'contextchars' => 'Nombre de caractères de contexte par ligne :', 'stub-threshold' => 'Limite supérieure pour les liens vers les ébauches (octets) :', +'stub-threshold-disabled' => 'Désactivé', 'recentchangesdays' => 'Nombre de jours à afficher dans les modifications récentes :', 'recentchangesdays-max' => '(maximum $1 jour{{PLURAL:$1||s}})', 'recentchangescount' => 'Nombre de modifications à afficher par défaut :', @@ -1377,6 +1389,7 @@ Voici une valeur générée aléatoirement que vous pouvez utiliser : $1', 'prefs-files' => 'Fichiers', 'prefs-custom-css' => 'CSS personnalisé', 'prefs-custom-js' => 'JavaScript personnalisé', +'prefs-common-css-js' => 'JavaScript et CSS partagé pour tous les habillages :', 'prefs-reset-intro' => 'Vous pouvez utiliser cette page pour restaurer vos préférences aux valeurs par défaut du site. Ceci ne peut pas être défait.', 'prefs-emailconfirm-label' => 'Confirmation du courriel :', 'prefs-textboxsize' => 'Taille de la fenêtre de modification', @@ -1414,9 +1427,15 @@ Vous pouvez également décider de laisser les autres vous contacter via votre p 'prefs-advancedrendering' => 'Options avancées', 'prefs-advancedsearchoptions' => 'Options avancées', 'prefs-advancedwatchlist' => 'Options avancées', -'prefs-display' => 'Options d’affichage', +'prefs-displayrc' => 'Options d’affichage', +'prefs-displaysearchoptions' => 'Options d’affichage', +'prefs-displaywatchlist' => 'Options d’affichage', 'prefs-diffs' => 'Différences', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Semble valide', +'email-address-validity-invalid' => 'Une adresse valide est nécessaire !', + # User rights 'userrights' => 'Gestion des droits des utilisateurs', 'userrights-lookup-user' => 'Gestion des groupes d’utilisateurs', @@ -1451,7 +1470,7 @@ Vous pouvez également décider de laisser les autres vous contacter via votre p 'group-user-member' => 'utilisateur', 'group-autoconfirmed-member' => 'utilisateur enregistré', -'group-bot-member' => 'bot', +'group-bot-member' => 'robot', 'group-sysop-member' => 'administrateur', 'group-bureaucrat-member' => 'bureaucrate', 'group-suppress-member' => 'superviseur', @@ -1500,6 +1519,7 @@ Vous pouvez également décider de laisser les autres vous contacter via votre p 'right-hideuser' => 'Bloquer un utilisateur en masquant son nom au public', 'right-ipblock-exempt' => 'Ne pas être affecté par les IP bloquées, les blocages automatiques et les blocages de plages d’IP', 'right-proxyunbannable' => 'Ne pas être affecté par les blocages automatiques de serveurs mandataires', +'right-unblockself' => 'Se débloquer eux-mêmes', 'right-protect' => 'Modifier le niveau de protection des pages et modifier les pages protégées', 'right-editprotected' => 'Modifier les pages protégées (sans protection en cascade)', 'right-editinterface' => 'Modifier l’interface utilisateur', @@ -1522,7 +1542,6 @@ Vous pouvez également décider de laisser les autres vous contacter via votre p 'right-siteadmin' => 'Verrouiller ou déverrouiller la base de données', 'right-reset-passwords' => 'Changer le mot de passe d’autres utilisateurs', 'right-override-export-depth' => 'Exporter les pages en incluant les pages liées jusqu’à une profondeur de 5 niveaux', -'right-versiondetail' => 'Voir les informations étendues sur les versions des logiciels', 'right-sendemail' => 'Envoyer un courriel aux autres utilisateurs', # User rights log @@ -1573,14 +1592,9 @@ Vous pouvez également décider de laisser les autres vous contacter via votre p 'recentchanges-legend' => 'Options des modifications récentes', 'recentchangestext' => 'Piste les changements les plus récents du wiki sur cette page.', 'recentchanges-feed-description' => 'Suivre les dernières modifications de ce wiki dans un flux.', -'recentchanges-label-legend' => 'Légende : $1.', -'recentchanges-legend-newpage' => '$1 - nouvelle page', 'recentchanges-label-newpage' => 'Cette modification a créé une nouvelle page', -'recentchanges-legend-minor' => '$1 - modification mineure', 'recentchanges-label-minor' => 'Cette modification est mineure', -'recentchanges-legend-bot' => '$1 - modification faite par un robot', 'recentchanges-label-bot' => 'Cette modification a été effectuée par un robot.', -'recentchanges-legend-unpatrolled' => '$1 - modification non patrouillée', 'recentchanges-label-unpatrolled' => 'Cette modification n’a pas encore été patrouillée.', 'rcnote' => 'Voici {{PLURAL:$1|la dernière modification effectuée|les $1 dernières modifications effectuées}} durant {{PLURAL:$2|la dernière journée|les $2 derniers jours}} jusqu’à $5 le $4.', 'rcnotefrom' => "Voici les modifications effectuées depuis le '''$2''' ('''$1''' au maximum).", @@ -1626,6 +1640,9 @@ Vous pouvez également décider de laisser les autres vous contacter via votre p 'upload_directory_missing' => 'Le répertoire de téléversement ($1) est introuvable et n’a pas pu être créé par le serveur web.', 'upload_directory_read_only' => 'Le répertoire de téléversement ($1) n’est pas accessible en écriture depuis le serveur web.', 'uploaderror' => 'Erreur de téléversement', +'upload-recreate-warning' => "'''Attention : Un fichier portant ce nom a été supprimé ou déplacé.''' + +Le journal des suppressions et celui des déplacements de cette page sont affichés ici pour informations :", 'uploadtext' => "Utilisez ce formulaire pour téléverser des fichiers sur le serveur. Pour voir ou rechercher des images précédemment envoyées, consultez la [[Special:FileList|liste des images]]. Les téléversements sont aussi enregistrés dans le [[Special:Log/upload|journal des téléversements]], et les suppressions dans le [[Special:Log/delete|journal des suppressions]]. @@ -1660,6 +1677,17 @@ Voyez la [[Special:NewFiles|galerie des nouvelles images]] pour une présentatio 'filetype-banned-type' => "'''« .$1 »''' n’est pas une extension de fichier autorisée. {{PLURAL:$3|Le type de fichiers accepté est|Les types de fichiers acceptés sont}} $2.", 'filetype-missing' => 'Le fichier n’a aucune extension (comme « .jpg » par exemple).', +'empty-file' => 'Le fichier que vous avez soumis était vide.', +'file-too-large' => 'Le fichier que vous avez soumis était trop grand.', +'filename-tooshort' => 'Le nom du fichier est trop court.', +'filetype-banned' => 'Ce type de fichier est interdit.', +'verification-error' => 'Ce fichier ne passe pas la vérification des fichiers.', +'hookaborted' => 'La modification que vous avez essayé de faire a été arrêtée par un crochet d’une extension.', +'illegal-filename' => 'Le nom du fichier n’est pas autorisé.', +'overwrite' => 'Écraser un fichier existant n’est pas autorisé.', +'unknown-error' => 'Une erreur inconnue s’est produite.', +'tmp-create-error' => 'Impossible de créer le fichier temporaire.', +'tmp-write-error' => 'Erreur d’écriture du fichier temporaire.', 'large-file' => 'Les fichiers téléversés ne devraient pas dépasser $1 ; ce fichier fait $2.', 'largefileserver' => 'La taille de ce fichier est supérieure au maximum autorisé.', 'emptyfile' => 'Le fichier que vous voulez téléverser semble vide. @@ -1687,13 +1715,14 @@ Si vous voulez toujours téléverser votre fichier, merci de retourner en arriè Si vous voulez toujours téléverser votre fichier, veuillez revenir en arrière et utiliser un autre nom. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Ce fichier est un doublon {{PLURAL:$1|du fichier suivant|des fichiers suivants}} :', 'file-deleted-duplicate' => 'Un fichier identique à celui-ci ([[:$1]]) a déjà été supprimé. Vous devriez vérifier le journal des suppressions de ce fichier avant de le téléverser à nouveau.', -'successfulupload' => 'Téléversement effectué avec succès', 'uploadwarning' => 'Attention !', 'uploadwarning-text' => 'Modifiez la description du fichier et essayez de nouveau.', 'savefile' => 'Sauvegarder le fichier', 'uploadedimage' => 'a téléversé « [[$1]] »', 'overwroteimage' => 'a téléversé une nouvelle version de « [[$1]] »', 'uploaddisabled' => 'Désolé, le téléversement de fichiers est désactivé.', +'copyuploaddisabled' => 'Téléversement de fichier par URL désactivé.', +'uploadfromurl-queued' => 'Votre téléversement a été mis dans la file d’attente.', 'uploaddisabledtext' => 'Le téléversement de fichiers est désactivé sur ce wiki.', 'php-uploaddisabledtext' => 'Le téléversement de fichiers a été désactivé dans PHP. Vérifiez l’option de configuration file_uploads.', 'uploadscripted' => 'Ce fichier contient du code HTML ou un script qui pourrait être interprété de façon incorrecte par un navigateur web.', @@ -1727,6 +1756,14 @@ JD # Jenoptik MGP # Pentax PICT # divers #
    ', +'upload-success-subj' => 'Téléversement effectué avec succès', +'upload-success-msg' => 'Votre téléversement depuis [$2] a réussi. Il est disponible ici : [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problème de téléversement', +'upload-failure-msg' => 'Il y a eu un problème avec votre import depuis [$2] : + +$1', +'upload-warning-subj' => 'Avertissement lors du téléversement', +'upload-warning-msg' => 'Un problème est survenu lors de votre téléversement depuis [$2]. Vous pouvez revenir au [[Special:Upload/stash/$1|formulaire de téléversement]] pour le résoudre.', 'upload-proto-error' => 'Protocole incorrect', 'upload-proto-error-text' => 'Le téléversement requiert des URL commençant par http:// ou ftp://.', @@ -1789,6 +1826,7 @@ Cliquer sur un en-tête de colonne permet de changer l’ordre d’affichage.', 'listfiles_search_for' => 'Rechercher un nom de média :', 'imgfile' => 'fichier', 'listfiles' => 'Liste de fichiers', +'listfiles_thumb' => 'Miniature', 'listfiles_date' => 'Date', 'listfiles_name' => 'Nom', 'listfiles_user' => 'Utilisateur', @@ -1904,8 +1942,8 @@ N’oubliez pas de vérifier s’il n’y a pas d’autres liens vers les modèl 'statistics-edits' => 'Modifications de pages depuis l’installation de {{SITENAME}}', 'statistics-edits-average' => 'Nombre moyen de modifications par page', 'statistics-views-total' => 'Visites', +'statistics-views-total-desc' => 'Les vues des pages non existantes et des pages spéciales ne sont pas incluses', 'statistics-views-peredit' => 'Visites par modification', -'statistics-jobqueue' => 'Longueur de la [http://www.mediawiki.org/wiki/Manual:Job_queue liste d’attente de traitement]', 'statistics-users' => '[[Special:ListUsers|Utilisateurs]] enregistrés', 'statistics-users-active' => 'Utilisateurs actifs', 'statistics-users-active-desc' => 'Utilisateurs ayant fait au moins une action durant {{PLURAL:$1|le dernier jours|les $1 derniers jours}}', @@ -1920,7 +1958,7 @@ Une page est considérée comme une page d’homonymie si elle inclut (directeme 'doubleredirects' => 'Doubles redirections', 'doubleredirectstext' => 'Voici une liste des pages qui redirigent vers des pages qui sont elles-mêmes des pages de redirection. Chaque entrée contient des liens vers la première et la seconde redirections, ainsi que la première ligne de texte de la seconde page, ce qui fournit habituellement la « vraie » page cible, vers laquelle la première redirection devrait rediriger. -Les entrées barrées ont été résolues.', +Les entrées barrées ont été résolues.', 'double-redirect-fixed-move' => 'Cette redirection, dont la cible [[$1]] a été renommée, mène maintenant vers [[$2]].', 'double-redirect-fixer' => 'Correcteur de redirection', @@ -1943,6 +1981,8 @@ Les entrées barrées ont été résolues.', 'nmembers' => '$1 membre{{PLURAL:$1||s}}', 'nrevisions' => '$1 version{{PLURAL:$1||s}}', 'nviews' => '$1 consultation{{PLURAL:$1||s}}', +'nimagelinks' => 'Utilisé sur $1 {{PLURAL:$1|page|pages}}', +'ntransclusions' => 'Utilisé sur $1 {{PLURAL:$1|page|pages}}', 'specialpage-empty' => 'Il n’y a aucun résultat à afficher.', 'lonelypages' => 'Pages orphelines', 'lonelypagestext' => 'Les pages suivantes ne sont ni pointées, ni incluses par d’autres pages du wiki.', @@ -2100,34 +2140,40 @@ Des [[{{MediaWiki:Listgrouprights-helppage}}|informations additionnelles]] peuve 'listgrouprights-removegroup-self-all' => 'Peut se retirer tous les groupes de son propre compte', # E-mail user -'mailnologin' => 'Pas d’adresse d’expéditeur', -'mailnologintext' => 'Vous devez être [[Special:UserLogin|identifié]] et avoir indiqué une adresse électronique valide dans vos [[Special:Preferences|préférences]] pour pouvoir envoyer des courriels à d’autres utilisateurs.', -'emailuser' => 'Lui envoyer un courriel', -'emailpage' => 'Envoyer un courriel à l’utilisateur', -'emailpagetext' => 'Vous pouvez utiliser le formulaire ci-dessous pour envoyer un courriel à cet utilisateur. +'mailnologin' => 'Pas d’adresse d’expéditeur', +'mailnologintext' => 'Vous devez être [[Special:UserLogin|identifié]] et avoir indiqué une adresse électronique valide dans vos [[Special:Preferences|préférences]] pour pouvoir envoyer des courriels à d’autres utilisateurs.', +'emailuser' => 'Lui envoyer un courriel', +'emailpage' => 'Envoyer un courriel à l’utilisateur', +'emailpagetext' => 'Vous pouvez utiliser le formulaire ci-dessous pour envoyer un courriel à cet utilisateur. L’adresse électronique que vous avez indiquée dans [[Special:Preferences|vos préférences]] apparaîtra dans le champ « Expéditeur » de votre message ; ainsi, le destinataire pourra vous répondre directement.', -'usermailererror' => 'Erreur dans l’objet du courriel :', -'defemailsubject' => 'Courriel de {{SITENAME}}', -'noemailtitle' => 'Aucune adresse de courriel', -'noemailtext' => 'Cet utilisateur n’a pas spécifié une adresse de courriel valide.', -'nowikiemailtitle' => 'Pas de courriel autorisé', -'nowikiemailtext' => 'Cet utilisateur a choisi de ne pas recevoir de courriel de la part d’autre utilisateurs.', -'email-legend' => 'Envoyer un courriel à un autre utilisateur de {{SITENAME}}', -'emailfrom' => 'Expéditeur :', -'emailto' => 'Destinataire :', -'emailsubject' => 'Objet :', -'emailmessage' => 'Message :', -'emailsend' => 'Envoyer', -'emailccme' => 'M’envoyer par courriel une copie de mon message.', -'emailccsubject' => 'Copie de votre message à $1 : $2', -'emailsent' => 'Courriel envoyé', -'emailsenttext' => 'Votre message a été envoyé par courriel.', -'emailuserfooter' => 'Ce courriel a été envoyé par « $1 » à « $2 » par la fonction « Envoyer un courriel à l’utilisateur » de {{SITENAME}}.', +'usermailererror' => 'Erreur dans l’objet du courriel :', +'defemailsubject' => 'Courriel de {{SITENAME}}', +'usermaildisabled' => 'L’envoi de courriels entre utilisateurs est désactivé', +'usermaildisabledtext' => 'Vous ne pouvez pas envoyer de courriels à d’autres utilisateurs sur ce wiki', +'noemailtitle' => 'Aucune adresse de courriel', +'noemailtext' => 'Cet utilisateur n’a pas spécifié une adresse de courriel valide.', +'nowikiemailtitle' => 'Pas de courriel autorisé', +'nowikiemailtext' => 'Cet utilisateur a choisi de ne pas recevoir de courriel de la part d’autre utilisateurs.', +'email-legend' => 'Envoyer un courriel à un autre utilisateur de {{SITENAME}}', +'emailfrom' => 'Expéditeur :', +'emailto' => 'Destinataire :', +'emailsubject' => 'Objet :', +'emailmessage' => 'Message :', +'emailsend' => 'Envoyer', +'emailccme' => 'M’envoyer par courriel une copie de mon message.', +'emailccsubject' => 'Copie de votre message à $1 : $2', +'emailsent' => 'Courriel envoyé', +'emailsenttext' => 'Votre message a été envoyé par courriel.', +'emailuserfooter' => 'Ce courriel a été envoyé par « $1 » à « $2 » par la fonction « Envoyer un courriel à l’utilisateur » de {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'A laissé un message système.', +'usermessage-editor' => 'Messager du système', # Watchlist 'watchlist' => 'Liste de suivi', 'mywatchlist' => 'Liste de suivi', -'watchlistfor' => "(pour '''$1''')", +'watchlistfor2' => 'Pour $1 $2', 'nowatchlist' => 'Votre liste de suivi ne référence aucune page.', 'watchlistanontext' => 'Veuillez vous $1 pour visualiser ou modifier les éléments de votre liste de suivi.', 'watchnologin' => 'Non connecté', @@ -2186,6 +2232,9 @@ Vous pouvez aussi réinitialiser les drapeaux de notification pour toutes les pa Votre système de notification de {{SITENAME}} -- +Pour modifier les paramètres de notification par courriel, visitez +{{fullurl:{{#special:Preferences}}}} + Pour modifier les paramètres de votre liste de suivi, visitez {{fullurl:{{#special:Watchlist}}/edit}} @@ -2246,7 +2295,10 @@ La dernière modification de la page a été effectuée par [[User:$3|$3]] ([[Us 'revertpage-nouser' => 'Révocation des modifications par (nom d’utilisateur supprimé) à la dernière version par [[User:$1|$1]]', 'rollback-success' => 'Révocation des modifications effectuées par $1 ; rétablissement de la dernière version par $2.', -'sessionfailure' => 'Votre session de connexion semble avoir des problèmes ; + +# Edit tokens +'sessionfailure-title' => 'Erreur de session', +'sessionfailure' => 'Votre session de connexion semble avoir des problèmes ; cette action a été annulée en prévention d’un piratage de session. Veuillez cliquer sur « Précédent », rechargez la page d’où vous venez, puis réessayez.', @@ -2382,18 +2434,22 @@ $1', 'month' => 'À partir du mois (et précédents) :', 'year' => 'À partir de l’année (et précédentes) :', -'sp-contributions-newbies' => 'Ne montrer que les contributions des nouveaux utilisateurs', -'sp-contributions-newbies-sub' => 'Parmi les nouveaux comptes', -'sp-contributions-newbies-title' => 'Contributions d’utilisateurs parmi les nouveaux comptes', -'sp-contributions-blocklog' => 'journal des blocages', -'sp-contributions-deleted' => 'contributions supprimées', -'sp-contributions-logs' => 'journaux', -'sp-contributions-talk' => 'discuter', -'sp-contributions-userrights' => 'gérer les droits', -'sp-contributions-blocked-notice' => 'Cet utilisateur est actuellement bloqué. La dernière entrée du journal des blocages est indiquée ci-dessous à titre d’information :', -'sp-contributions-search' => 'Rechercher les contributions', -'sp-contributions-username' => 'Adresse IP ou nom d’utilisateur :', -'sp-contributions-submit' => 'Rechercher', +'sp-contributions-newbies' => 'Ne montrer que les contributions des nouveaux utilisateurs', +'sp-contributions-newbies-sub' => 'Parmi les nouveaux comptes', +'sp-contributions-newbies-title' => 'Contributions d’utilisateurs parmi les nouveaux comptes', +'sp-contributions-blocklog' => 'journal des blocages', +'sp-contributions-deleted' => 'contributions supprimées', +'sp-contributions-uploads' => 'imports', +'sp-contributions-logs' => 'journaux', +'sp-contributions-talk' => 'discuter', +'sp-contributions-userrights' => 'gérer les droits', +'sp-contributions-blocked-notice' => 'Cet utilisateur est actuellement bloqué. La dernière entrée du journal des blocages est indiquée ci-dessous à titre d’information :', +'sp-contributions-blocked-notice-anon' => 'Cette adresse IP est actuellement bloquée. +La dernière entrée du journal des blocages est indiquée ci-dessous à titre d’information :', +'sp-contributions-search' => 'Rechercher les contributions', +'sp-contributions-username' => 'Adresse IP ou nom d’utilisateur :', +'sp-contributions-toponly' => 'Ne montrer que les articles dont je suis le dernier contributeur', +'sp-contributions-submit' => 'Rechercher', # What links here 'whatlinkshere' => 'Pages liées', @@ -2454,7 +2510,6 @@ Consultez la [[Special:IPBlockList|liste des adresses IP et comptes bloqués]] p 'ipb-edit-dropdown' => 'Modifier les motifs de blocage par défaut', 'ipb-unblock-addr' => 'Débloquer $1', 'ipb-unblock' => 'Débloquer un compte utilisateur ou une adresse IP', -'ipb-blocklist-addr' => 'Blocages existants pour $1', 'ipb-blocklist' => 'Voir les blocages existants', 'ipb-blocklist-contribs' => 'Contributions pour $1', 'unblockip' => 'Débloquer un utilisateur ou une adresse IP', @@ -2528,6 +2583,8 @@ Veuillez contacter votre fournisseur d’accès Internet ou votre support techni Vous ne pouvez pas créer un compte.', 'cant-block-while-blocked' => 'Vous ne pouvez pas bloquer d’autres utilisateurs tant que vous êtes bloqué{{GENDER:||e|(e)}}.', 'cant-see-hidden-user' => "L’utilisateur que vous tentez de bloquer a déjà été bloqué et masqué. N’ayant pas le droit ''hideuser'', vous ne pouvez pas voir ou modifier le blocage de cet utilisateur.", +'ipbblocked' => 'Vous ne pouvez pas bloquer ou débloquer d’autres utilisateurs, parce que vous êtes vous-même bloqué', +'ipbnounblockself' => 'Vous n’êtes pas autorisé à vous débloquer vous-même', # Developer tools 'lockdb' => 'Verrouiller la base de données', @@ -2557,6 +2614,15 @@ Pour bloquer ou débloquer la base de données, il doit être accessible par le Notez que la page ne sera '''pas''' renommée s’il existe déjà une page avec le nouveau titre, sauf si cette dernière a un historique de modifications vierge et est soit vide, soit une simple redirection. Ceci permet de renommer une page vers sa position d’origine si le déplacement s’avère erroné. +'''Attention !''' +Ceci peut provoquer un changement radical et imprévu pour une page souvent consultée ; assurez-vous d’en avoir compris les conséquences avant de continuer.", +'movepagetext-noredirectfixer' => "Utilisez le formulaire ci-dessous pour renommer une page, en déplaçant tout son historique vers le nouveau nom. +L’ancien titre deviendra une page de redirection vers le nouveau titre. +Vérifiez bien les [[Special:DoubleRedirects|doubles redirections]] ou les [[Special:BrokenRedirects|redirections cassées]]. +Vous avez la responsabilité de vous assurer que les liens continuent de pointer vers leur destination supposée. + +Notez que la page ne sera '''pas''' déplacée s’il existe déjà une page avec le nouveau titre, sauf si cette dernière a un historique de modifications vierge et est soit vide, soit une simple redirection. Ceci permet de renommer une page vers sa position d’origine si le déplacement s’avère erroné, et il est impossible d’écraser une page existante. + '''Attention !''' Ceci peut provoquer un changement radical et imprévu pour une page souvent consultée ; assurez-vous d’en avoir compris les conséquences avant de continuer.", 'movepagetalktext' => "La page de discussion associée, si présente, sera automatiquement renommée '''sauf si :''' @@ -2616,6 +2682,7 @@ impossible de renommer une page sur elle-même.', 'immobile-source-page' => 'Cette page n’est pas renommable.', 'immobile-target-page' => 'Il n’est pas possible de renommer la page vers ce titre.', 'imagenocrossnamespace' => 'Impossible de renommer un fichier vers un espace de noms autre que fichier.', +'nonfile-cannot-move-to-file' => "Impossible de renommer quelque chose d’autre qu'un fichier vers l’espace de noms fichier.", 'imagetypemismatch' => 'La nouvelle extension de ce fichier ne correspond pas à son type.', 'imageinvalidfilename' => 'Le nom du fichier cible est incorrect', 'fix-double-redirects' => 'Mettre à jour les redirections pointant vers le titre original', @@ -2694,6 +2761,7 @@ Sauvegardez-le sur votre disque dur puis téléversez-le ici.', 'importstart' => 'Importation des pages…', 'import-revision-count' => '$1 version{{PLURAL:$1||s}}', 'importnopages' => 'Aucune page à importer.', +'imported-log-entries' => '$1 {{PLURAL:$1|entrée|entrées}} du journal {{PLURAL:$1|importée|importées}}.', 'importfailed' => 'Échec de l’importation : $1', 'importunknownsource' => 'Type inconnu de la source à importer', 'importcantopen' => 'Impossible d’ouvrir le fichier à importer', @@ -2792,6 +2860,8 @@ Vous pouvez toutefois en visualiser la source.', 'tooltip-rollback' => '« Révoquer » annule en un clic la ou les modification(s) de cette page par son dernier contributeur.', 'tooltip-undo' => '« Défaire » révoque cette modification et ouvre la fenêtre de modification en mode prévisualisation. Permet de rétablir la version précédente et d’ajouter un motif dans la boîte de résumé.', +'tooltip-preferences-save' => 'Sauvegarder les préférences', +'tooltip-summary' => 'Entrez un bref résumé', # Stylesheets 'common.css' => '/* Le CSS placé ici sera appliqué à tous les habillages. */', @@ -2917,17 +2987,20 @@ $1', # Media information 'mediawarning' => "'''Attention :''' ce type de fichier peut contenir du code malveillant. Si vous l’exécutez, votre système peut être compromis.", -'imagemaxsize' => "Taille maximale des images :
    ''(pour les pages de description de fichiers)''", +'imagemaxsize' => "Taille maximale des images :
    ''(pour les pages de description de fichier)''", 'thumbsize' => 'Taille de la miniature :', 'widthheightpage' => '$1 × $2, $3 page{{PLURAL:$3||s}}', 'file-info' => 'Taille du fichier : $1, type MIME : $2', -'file-info-size' => '($1 × $2 pixels, taille du fichier : $3, type MIME : $4)', +'file-info-size' => '$1 × $2 pixels, taille du fichier : $3, type MIME : $4', 'file-nohires' => 'Pas de plus haute résolution disponible.', -'svg-long-desc' => '(Fichier SVG, résolution de $1 × $2 pixels, taille : $3)', +'svg-long-desc' => 'Fichier SVG, résolution de $1 × $2 pixels, taille : $3', 'show-big-image' => 'Image en plus haute résolution', 'show-big-image-thumb' => 'Taille de cet aperçu : $1 × $2 pixels', 'file-info-gif-looped' => 'en boucle', 'file-info-gif-frames' => '$1 {{PLURAL:$1|image|images}}', +'file-info-png-looped' => 'en boucle', +'file-info-png-repeat' => 'joué $1 {{PLURAL:$1|fois|fois}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|image|images}}', # Special:NewFiles 'newimages' => 'Galerie des nouveaux fichiers', @@ -3080,6 +3153,7 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par 'exif-gpsareainformation' => 'Nom de la zone GPS', 'exif-gpsdatestamp' => 'Date GPS', 'exif-gpsdifferential' => 'Correction différentielle GPS', +'exif-objectname' => 'Titre court', # EXIF attributes 'exif-compression-1' => 'Non compressé', @@ -3242,31 +3316,31 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par 'limitall' => 'tous', # E-mail address confirmation -'confirmemail' => 'Confirmer l’adresse de courriel', -'confirmemail_noemail' => 'Vous n’avez pas défini une adresse de courriel valide dans vos [[Special:Preferences|préférences]].', -'confirmemail_text' => 'Ce wiki nécessite la vérification de votre adresse de courriel avant de pouvoir utiliser toute fonction de messagerie. +'confirmemail' => 'Confirmer l’adresse de courriel', +'confirmemail_noemail' => 'Vous n’avez pas défini une adresse de courriel valide dans vos [[Special:Preferences|préférences]].', +'confirmemail_text' => 'Ce wiki nécessite la vérification de votre adresse de courriel avant de pouvoir utiliser toute fonction de messagerie. Utilisez le bouton ci-dessous pour envoyer un courriel de confirmation à votre adresse. Le courriel inclura un lien comportant un code à usage unique et limité dans le temps ; chargez ce lien dans votre navigateur pour confirmer que votre adresse de courriel est valide.', -'confirmemail_pending' => 'Un code de confirmation vous a déjà été envoyé par courriel ; +'confirmemail_pending' => 'Un code de confirmation vous a déjà été envoyé par courriel ; si vous venez de créer votre compte, veuillez attendre quelques minutes que le courriel arrive avant de demander un nouveau code.', -'confirmemail_send' => 'Envoyer un code de confirmation', -'confirmemail_sent' => 'Courriel de confirmation envoyé', -'confirmemail_oncreate' => 'Un code de confirmation a été envoyé à votre adresse de courriel. +'confirmemail_send' => 'Envoyer un code de confirmation', +'confirmemail_sent' => 'Courriel de confirmation envoyé', +'confirmemail_oncreate' => 'Un code de confirmation a été envoyé à votre adresse de courriel. Ce code n’est pas requis pour vous identifier sur ce wiki, mais vous devrez le fournir pour activer toute fonction de messagerie.', -'confirmemail_sendfailed' => '{{SITENAME}} n’a pas pu vous envoyer le courriel de confirmation. +'confirmemail_sendfailed' => '{{SITENAME}} n’a pas pu vous envoyer le courriel de confirmation. Veuillez vérifiez que votre adresse de courriel ne comprend aucun caractère incorrect. Le programme d’envoi de courriel a retourné l’indication suivante : $1', -'confirmemail_invalid' => 'Code de confirmation incorrect. +'confirmemail_invalid' => 'Code de confirmation incorrect. Celui-ci a peut-être expiré.', -'confirmemail_needlogin' => 'Vous devez vous $1 pour confirmer votre adresse de courriel.', -'confirmemail_success' => 'Votre adresse de courriel a été confirmée. +'confirmemail_needlogin' => 'Vous devez vous $1 pour confirmer votre adresse de courriel.', +'confirmemail_success' => 'Votre adresse de courriel a été confirmée. Vous pouvez maintenant vous [[Special:UserLogin|{{MediaWiki:Loginreqlink}}]] et profiter du wiki.', -'confirmemail_loggedin' => 'Votre adresse de courriel est maintenant confirmée.', -'confirmemail_error' => 'Un problème est survenu lors de l’enregistrement de votre confirmation.', -'confirmemail_subject' => 'Confirmation d’adresse de courriel pour {{SITENAME}}', -'confirmemail_body' => 'Quelqu’un, probablement vous, à partir de l’adresse IP $1, +'confirmemail_loggedin' => 'Votre adresse de courriel est maintenant confirmée.', +'confirmemail_error' => 'Un problème est survenu lors de l’enregistrement de votre confirmation.', +'confirmemail_subject' => 'Confirmation d’adresse de courriel pour {{SITENAME}}', +'confirmemail_body' => 'Quelqu’un, probablement vous, à partir de l’adresse IP $1, a enregistré un compte « $2 » avec cette adresse de courriel sur le site {{SITENAME}}. @@ -3283,8 +3357,38 @@ confirmation de votre adresse courriel : $5 Ce code de confirmation expirera le $4.', -'confirmemail_invalidated' => 'Confirmation de l’adresse courriel annulée', -'invalidateemail' => 'Annuler la confirmation de l’adresse de courriel', +'confirmemail_body_changed' => 'Quelqu’un, probablement vous, à partir de l’adresse IP $1, +a modifié l’adresse de courriel associée au compte « $2 » de {{SITENAME}} +en cette adresse. + +Pour confirmer que ce compte vous appartient vraiment et afin +de réactiver les fonctions de messagerie sur {{SITENAME}}, +veuillez suivre ce lien dans votre navigateur : + +$3 + +Si ce compte ne vous appartient *pas*, n’ouvrez pas ce lien ; +vous pouvez suivre l’autre lien ci-dessous pour annuler la +confirmation de votre adresse courriel : + +$5 + +Ce code de confirmation expirera le $4.', +'confirmemail_body_set' => "Quelqu'un, probablement vous, de l'adresse IP address $1, +a modifié l'adresse de courriel du compte « $2 » à cette adresse sur {{SITENAME}}. + +Pour confirmer que ce compte vous appartient et réactiver les fonctions de courriel +sur {{SITENAME}}, ouvrez ce lien dans votre navigateur web : + +$3 + +Si le compte ne vous appartient PAS, suivez plutôt ce lien pour annuler la confirmation de l'adresse de courriel : + +$5 + +Ce code de confirmation expirera le $4.", +'confirmemail_invalidated' => 'Confirmation de l’adresse courriel annulée', +'invalidateemail' => 'Annuler la confirmation de l’adresse de courriel', # Scary transclusion 'scarytranscludedisabled' => '[La transclusion interwiki est désactivée]', @@ -3330,7 +3434,8 @@ Veuillez confirmer que vous désirez réellement recréer cette page.", 'table_pager_first' => 'Première page', 'table_pager_last' => 'Dernière page', 'table_pager_limit' => 'Afficher $1 éléments par page', -'table_pager_limit_submit' => 'Accéder', +'table_pager_limit_label' => 'Résultats par page :', +'table_pager_limit_submit' => 'Envoyer', 'table_pager_empty' => 'Aucun résultat', # Auto-summaries @@ -3346,7 +3451,7 @@ Veuillez confirmer que vous désirez réellement recréer cette page.", 'size-gigabytes' => '$1 Go', # Live preview -'livepreview-loading' => 'Chargement…', +'livepreview-loading' => 'Chargement...', 'livepreview-ready' => 'Chargement … terminé !', 'livepreview-failed' => 'L’aperçu rapide a échoué ! Essayez la prévisualisation normale.', @@ -3399,6 +3504,7 @@ Vous pouvez aussi [[Special:Watchlist/edit|utiliser l’éditeur normal]].', 'version-specialpages' => 'Pages spéciales', 'version-parserhooks' => 'Greffons du parseur', 'version-variables' => 'Variables', +'version-skins' => 'Habillages', 'version-other' => 'Divers', 'version-mediahandlers' => 'Manipulateurs de médias', 'version-hooks' => 'Greffons', @@ -3410,6 +3516,13 @@ Vous pouvez aussi [[Special:Watchlist/edit|utiliser l’éditeur normal]].', 'version-hook-subscribedby' => 'Abonnés :', 'version-version' => '(Version $1)', 'version-license' => 'Licence', +'version-poweredby-credits' => "Ce wiki fonctionne grâce à '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'autres', +'version-license-info' => "MediaWiki est un logiciel libre, vous pouvez le redistribuer et / ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation ; soit la version 2 de la Licence, ou (à votre choix) toute version ultérieure. + +MediaWiki est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN USAGE PARTICULIER. Voir la Licence Publique Générale GNU pour plus de détails. + +Vous devriez avoir reçu [{{SERVER}}{{SCRIPTPATH}}/COPYING une copie de la Licence Publique Générale GNU] avec ce programme, sinon, écrivez à la Free Software Foundation, Inc, 51, rue Franklin, cinquième étage, Boston, MA 02110-1301, États-Unis ou [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html lisez-la en ligne].", 'version-software' => 'Logiciels installés', 'version-software-product' => 'Produit', 'version-software-version' => 'Version', @@ -3480,6 +3593,15 @@ Entrez le nom du fichier sans le préfixe « {{ns:file}}: ».', 'tags-edit' => 'modifier', 'tags-hitcount' => '$1 modification{{PLURAL:$1||s}}', +# Special:ComparePages +'comparepages' => 'Comparer des pages', +'compare-selector' => 'Comparer les versions des pages', +'compare-page1' => 'Page 1', +'compare-page2' => 'Page 2', +'compare-rev1' => 'Version 1', +'compare-rev2' => 'Version 2', +'compare-submit' => 'Comparer', + # Database error messages 'dberr-header' => 'Ce wiki a un problème', 'dberr-problems' => 'Désolé ! Ce site rencontre des difficultés techniques.', @@ -3496,8 +3618,13 @@ Entrez le nom du fichier sans le préfixe « {{ns:file}}: ».', 'htmlform-float-invalid' => 'La valeur que vous avez spécifiée n’est pas un nombre.', 'htmlform-int-toolow' => 'La valeur que vous avez spécifiée est plus petite que le minimum de $1', 'htmlform-int-toohigh' => 'La valeur que vous avez spécifiée est plus grande que le maximum de $1', +'htmlform-required' => 'Cette valeur est requise', 'htmlform-submit' => 'Soumettre', 'htmlform-reset' => 'Défaire les modifications', 'htmlform-selectorother-other' => 'Autre', +# SQLite database support +'sqlite-has-fts' => '$1 avec recherche en texte intégral supportée', +'sqlite-no-fts' => '$1 sans recherche en texte intégral supportée', + ); diff --git a/languages/messages/MessagesFrc.php b/languages/messages/MessagesFrc.php index aaeb1311..99b4e749 100644 --- a/languages/messages/MessagesFrc.php +++ b/languages/messages/MessagesFrc.php @@ -29,8 +29,7 @@ $messages = array( 'tog-editsection' => 'Changer une section avec les liens [changer]', 'tog-editsectiononrightclick' => 'Changer une section en faisant un clic droit sus son nom (JavaScript)', 'tog-showtoc' => 'Montrer la table des matières (pour les pages avec plus que 3 têtes)', -'tog-rememberpassword' => 'Garder mon mot de passe', -'tog-editwidth' => 'Montrer la fenêtre des changements en pleine largeur', +'tog-rememberpassword' => 'Garder mon mot de passe (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Additionner les pages que je crée à ma liste des pages guettées', 'tog-watchdefault' => 'Additionner les pages que je change à ma liste des pages guettées', 'tog-watchmoves' => 'Additionner les pages que je renomme à ma liste des pages guettées', @@ -327,7 +326,7 @@ Votre compte a été créé. Oubliez pas de changer votre réglage sus {{SITENA 'yourname' => "Nom d'useur:", 'yourpassword' => 'Mot de passe:', 'yourpasswordagain' => 'Mot de passe encore:', -'remembermypassword' => 'Se rappeler de mon mot de passe:', +'remembermypassword' => 'Se rappeler de mon mot de passe (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Votre domaine:', 'externaldberror' => "Soit y avait une erreur avec la base d'information de certification extérieur, soit vous avez pas la permission de renouveler votre compte extérieur.", 'login' => 'Connecter', @@ -472,7 +471,7 @@ Vous pouvez [[Special:Search/{{PAGENAME}}|charcher pour le titre de cette page]] 'usercsspreview' => "'''Rappelez-vous que vous êtes après regarder votre feuille CSS qu'a pas encore été sauvée!'''", 'userjspreview' => "'''Rappelez-vous que vous êtes juste après regarder ou tester votre code JavaScript qu'a pas encore été sauvé!'''", 'userinvalidcssjstitle' => "'''Attention:''' Y a pas de style \"\$1\". Rappelez-vous qu'il faut user les petites lettres dans le sujet des pages personnelles avec les extensions .css et .js. -Exemple: {{ns:user}}:Foo/monobook.css (bon) {{ns:user}}:Foo/Monobook.css (mauvais)", +Exemple: {{ns:user}}:Foo/vector.css (bon) {{ns:user}}:Foo/Vector.css (mauvais)", 'updated' => '(Renouvelé)', 'note' => "'''Notez:'''", 'previewnote' => "'''Ça ici, c'est juste une vue d'avance; les changements ont pas encore été sauvés!'''", @@ -500,7 +499,6 @@ Il foudra que vous mettez vos changements dans le texte qu'est là asteur. 'yourdiff' => 'Différences', 'copyrightwarning' => "Notez donc que toutes les contributions à {{SITENAME}} sont considérées d'être libérées sous le $2 (voyez $1 pour les détails). Si vous voulez pas que votre écriture soye changée sans pitié et redistribuée à volonté, mettez donc pas votre écriture ici.
    Vous êtes après nous promettre aussi que vous l'avez écrit vous-même ou que vous l'avez copié du domain public ou un autre ressource libre. ''' METTEZ PAS DE L'OUVRAGE SOUS COPYRIGHT ICI SANS PERMISSION!'''", 'copyrightwarning2' => "Notez donc que toutes les contributions à {{SITENAME}} pourriont être changées ou ôtées par des autres useurs. Si vous voulez pas que votre écriture soye changée sans pitié, mettez donc pas votre écriture ici.
    Vous êtes après nous promettre aussi que vous l'avez écrit vous-même ou que vous l'avez copié du domain public ou un autre ressource libre (voyez $1 pour les détails). ''' METTEZ PAS DE L'OUVRAGE SOUS COPYRIGHT ICI SANS PERMISSION!'''", -'longpagewarning' => "'''ATTENTION: Cette page a une taille de $1 kilobytes; ça pourrait créer des problèmes quand un useur assaye de changer une page qu'a une taille qu'est plus grande que 32 kb. Considérez donc de couper la page en morceaux plus courts.'''", 'longpageerror' => "'''ERREUR: Le texte que vous avec mis a une taille de $1 kilobytes qu'est plus grande que le maximum de $2 kilobytes. Ça peut pas être sauvé.'''", 'readonlywarning' => "'''ATTENTION: La base d'information a été barrée, ça fait, vous serez pas capable de sauver votres changements asteur. Vous ferait mieux de copier et coller le texte dans un dossier texte et le sauver pour plus tard.'''", 'protectedpagewarning' => "'''ATTENTION: Cette page a été barrée pour que ça peuve être changée juste par les administrateurs.'''", diff --git a/languages/messages/MessagesFrp.php b/languages/messages/MessagesFrp.php index 0df90297..fd086718 100644 --- a/languages/messages/MessagesFrp.php +++ b/languages/messages/MessagesFrp.php @@ -51,94 +51,94 @@ $namespaceAliases = array( ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'Redirèccions dobles', 'RedirèccionsDobles' ), - 'BrokenRedirects' => array( 'Redirèccions câsses', 'RedirèccionsCâsses' ), - 'Disambiguations' => array( 'Homonimia', 'Homonimies', 'Pâges d\'homonimia', 'PâgesDHomonimia' ), + 'DoubleRedirects' => array( 'Redirèccions_dobles', 'RedirèccionsDobles' ), + 'BrokenRedirects' => array( 'Redirèccions_câsses', 'RedirèccionsCâsses' ), + 'Disambiguations' => array( 'Homonimia', 'Homonimies', 'Pâges_d\'homonimia', 'PâgesDHomonimia' ), 'Userlogin' => array( 'Branchiér', 'Branchement' ), 'Userlogout' => array( 'Dèbranchiér', 'Dèbranchement' ), - 'CreateAccount' => array( 'Fâre un compto', 'FâreUnCompto' ), + 'CreateAccount' => array( 'Fâre_un_compto', 'FâreUnCompto' ), 'Preferences' => array( 'Prèferences' ), - 'Watchlist' => array( 'Lista de survelyence', 'ListaDeSurvelyence', 'Survelyence' ), - 'Recentchanges' => array( 'Dèrriérs changements', 'DèrriérsChangements' ), + 'Watchlist' => array( 'Lista_de_survelyence', 'ListaDeSurvelyence', 'Survelyence' ), + 'Recentchanges' => array( 'Dèrriérs_changements', 'DèrriérsChangements' ), 'Upload' => array( 'Tèlèchargiér', 'Tèlèchargement' ), - 'Listfiles' => array( 'Lista des fichiérs', 'ListaDesFichiérs', 'Lista de les émâges', 'ListaDeLesÉmâges' ), - 'Newimages' => array( 'Novéls fichiérs', 'NovélsFichiérs', 'Émâges novèles', 'ÉmâgesNovèles' ), - 'Listusers' => array( 'Lista ux utilisators', 'ListaUxUtilisators', 'Utilisators' ), - 'Listgrouprights' => array( 'Lista des drêts a les tropes d\'utilisators', 'ListaDesDrêtsALesTropesDUtilisators' ), + 'Listfiles' => array( 'Lista_des_fichiérs', 'ListaDesFichiérs', 'Lista_de_les_émâges', 'ListaDeLesÉmâges' ), + 'Newimages' => array( 'Novéls_fichiérs', 'NovélsFichiérs', 'Émâges_novèles', 'ÉmâgesNovèles' ), + 'Listusers' => array( 'Lista_ux_utilisators', 'ListaUxUtilisators', 'Utilisators' ), + 'Listgrouprights' => array( 'Lista_des_drêts_a_les_tropes_d\'utilisators', 'ListaDesDrêtsALesTropesDUtilisators' ), 'Statistics' => array( 'Statistiques' ), - 'Randompage' => array( 'Pâge a l\'hasârd', 'PâgeALHasârd' ), - 'Lonelypages' => array( 'Pâges orfenes', 'PâgesOrfenes' ), - 'Uncategorizedpages' => array( 'Pâges sen catègorie', 'PâgesSenCatègorie' ), - 'Uncategorizedcategories' => array( 'Catègories sen catègorie', 'CatègoriesSenCatègorie' ), - 'Uncategorizedimages' => array( 'Fichiérs sen catègorie', 'FichiérsSenCatègorie', 'Émâges sen catègorie', 'ÉmâgesSenCatègorie' ), - 'Uncategorizedtemplates' => array( 'Modèlos sen catègorie', 'ModèlosSenCatègorie' ), - 'Unusedcategories' => array( 'Catègories inutilisâs', 'CatègoriesInutilisâs' ), - 'Unusedimages' => array( 'Fichiérs inutilisâs', 'FichiérsInutilisâs', 'Émâges inutilisâs', 'ÉmâgesInutilisâs' ), - 'Wantedpages' => array( 'Pâges les ples demandâs', 'PâgesLesPlesDemandâs', 'Lims câssos', 'LimsCâssos' ), - 'Wantedcategories' => array( 'Catègories les ples demandâs', 'CatègoriesLesPlesDemandâs' ), - 'Wantedfiles' => array( 'Fichiérs los ples demandâs', 'FichiérsLosPlesDemandâs' ), - 'Wantedtemplates' => array( 'Modèlos los ples demandâs', 'ModèlosLosPlesDemandâs' ), - 'Mostlinked' => array( 'Pâges les ples liyês', 'PâgesLesPlesLiyês' ), - 'Mostlinkedcategories' => array( 'Catègories les ples liyês', 'CatègoriesLesPlesLiyês', 'Catègories les ples utilisâs', 'CatègoriesLesPlesUtilisâs' ), - 'Mostlinkedtemplates' => array( 'Modèlos los ples liyês', 'ModèlosLosPlesLiyês', 'Modèlos los ples utilisâs', 'ModèlosLosPlesUtilisâs' ), - 'Mostimages' => array( 'Fichiérs los ples liyês', 'FichiérsLosPlesLiyês', 'Fichiérs los ples utilisâs', 'FichiérsLosPlesUtilisâs', 'Émâges les ples liyês', 'ÉmâgesLesPlesLiyês', 'Émâges les ples utilisâs', 'ÉmâgesLesPlesUtilisâs' ), - 'Mostcategories' => array( 'Pâges utilisent lo més de catègories', 'PâgesUtilisentLoMésDeCatègories' ), - 'Mostrevisions' => array( 'Pâges les ples changiês', 'PâgesLesPlesChangiês' ), - 'Fewestrevisions' => array( 'Pâges les muens changiês', 'PâgesLesMuensChangiês' ), - 'Shortpages' => array( 'Pâges côrtes', 'PâgesCôrtes' ), - 'Longpages' => array( 'Pâges longes', 'PâgesLonges' ), - 'Newpages' => array( 'Pâges novèles', 'PâgesNovèles' ), - 'Ancientpages' => array( 'Pâges les muens dèrriérement changiês', 'PâgesLesMuensDèrriérementChangiês' ), - 'Deadendpages' => array( 'Pâges en cul-de-sac', 'PâgesEnCulDeSac' ), - 'Protectedpages' => array( 'Pâges protègiês', 'PâgesProtègiês' ), - 'Protectedtitles' => array( 'Titros protègiês', 'TitrosProtègiês' ), - 'Allpages' => array( 'Totes les pâges', 'TotesLesPâges' ), - 'Prefixindex' => array( 'Endèxe des prèfixos', 'EndèxeDesPrèfixos' ), - 'Ipblocklist' => array( 'Lista des blocâjos', 'ListaDesBlocâjos', 'Blocâjos', 'Utilisators blocâs', 'UtilisatorsBlocâs', 'Adrèces IP blocâs', 'AdrècesIPBlocâs' ), - 'Specialpages' => array( 'Pâges spèciâles', 'PâgesSpèciâles' ), + 'Randompage' => array( 'Pâge_a_l\'hasârd', 'PâgeALHasârd' ), + 'Lonelypages' => array( 'Pâges_orfenes', 'PâgesOrfenes' ), + 'Uncategorizedpages' => array( 'Pâges_sen_catègorie', 'PâgesSenCatègorie' ), + 'Uncategorizedcategories' => array( 'Catègories_sen_catègorie', 'CatègoriesSenCatègorie' ), + 'Uncategorizedimages' => array( 'Fichiérs_sen_catègorie', 'FichiérsSenCatègorie', 'Émâges_sen_catègorie', 'ÉmâgesSenCatègorie' ), + 'Uncategorizedtemplates' => array( 'Modèlos_sen_catègorie', 'ModèlosSenCatègorie' ), + 'Unusedcategories' => array( 'Catègories_inutilisâs', 'CatègoriesInutilisâs' ), + 'Unusedimages' => array( 'Fichiérs_inutilisâs', 'FichiérsInutilisâs', 'Émâges_inutilisâs', 'ÉmâgesInutilisâs' ), + 'Wantedpages' => array( 'Pâges_les_ples_demandâs', 'PâgesLesPlesDemandâs', 'Lims_câssos', 'LimsCâssos' ), + 'Wantedcategories' => array( 'Catègories_les_ples_demandâs', 'CatègoriesLesPlesDemandâs' ), + 'Wantedfiles' => array( 'Fichiérs_los_ples_demandâs', 'FichiérsLosPlesDemandâs' ), + 'Wantedtemplates' => array( 'Modèlos_los_ples_demandâs', 'ModèlosLosPlesDemandâs' ), + 'Mostlinked' => array( 'Pâges_les_ples_liyês', 'PâgesLesPlesLiyês' ), + 'Mostlinkedcategories' => array( 'Catègories_les_ples_liyês', 'CatègoriesLesPlesLiyês', 'Catègories_les_ples_utilisâs', 'CatègoriesLesPlesUtilisâs' ), + 'Mostlinkedtemplates' => array( 'Modèlos_los_ples_liyês', 'ModèlosLosPlesLiyês', 'Modèlos_los_ples_utilisâs', 'ModèlosLosPlesUtilisâs' ), + 'Mostimages' => array( 'Fichiérs_los_ples_liyês', 'FichiérsLosPlesLiyês', 'Fichiérs_los_ples_utilisâs', 'FichiérsLosPlesUtilisâs', 'Émâges_les_ples_liyês', 'ÉmâgesLesPlesLiyês', 'Émâges_les_ples_utilisâs', 'ÉmâgesLesPlesUtilisâs' ), + 'Mostcategories' => array( 'Pâges_utilisent_lo_més_de_catègories', 'PâgesUtilisentLoMésDeCatègories' ), + 'Mostrevisions' => array( 'Pâges_les_ples_changiês', 'PâgesLesPlesChangiês' ), + 'Fewestrevisions' => array( 'Pâges_les_muens_changiês', 'PâgesLesMuensChangiês' ), + 'Shortpages' => array( 'Pâges_côrtes', 'PâgesCôrtes' ), + 'Longpages' => array( 'Pâges_longes', 'PâgesLonges' ), + 'Newpages' => array( 'Pâges_novèles', 'PâgesNovèles' ), + 'Ancientpages' => array( 'Pâges_les_muens_dèrriérement_changiês', 'PâgesLesMuensDèrriérementChangiês' ), + 'Deadendpages' => array( 'Pâges_en_cul-de-sac', 'PâgesEnCulDeSac' ), + 'Protectedpages' => array( 'Pâges_protègiês', 'PâgesProtègiês' ), + 'Protectedtitles' => array( 'Titros_protègiês', 'TitrosProtègiês' ), + 'Allpages' => array( 'Totes_les_pâges', 'TotesLesPâges' ), + 'Prefixindex' => array( 'Endèxe_des_prèfixos', 'EndèxeDesPrèfixos' ), + 'Ipblocklist' => array( 'Lista_des_blocâjos', 'ListaDesBlocâjos', 'Blocâjos', 'Utilisators_blocâs', 'UtilisatorsBlocâs', 'Adrèces_IP_blocâs', 'AdrècesIPBlocâs' ), + 'Specialpages' => array( 'Pâges_spèciâles', 'PâgesSpèciâles' ), 'Contributions' => array( 'Contribucions' ), - 'Emailuser' => array( 'Mandar un mèssâjo', 'MandarUnMèssâjo', 'Mèssâjo' ), - 'Confirmemail' => array( 'Confirmar l\'adrèce èlèctronica', 'ConfirmarLAdrèceÈlèctronica' ), - 'Whatlinkshere' => array( 'Pâges liyês', 'PâgesLiyês' ), - 'Recentchangeslinked' => array( 'Survelyence des lims', 'SurvelyenceDesLims' ), - 'Movepage' => array( 'Renomar una pâge', 'RenomarUnaPâge', 'Changement de nom', 'ChangementDeNom' ), + 'Emailuser' => array( 'Mandar_un_mèssâjo', 'MandarUnMèssâjo', 'Mèssâjo' ), + 'Confirmemail' => array( 'Confirmar_l\'adrèce_èlèctronica', 'ConfirmarLAdrèceÈlèctronica' ), + 'Whatlinkshere' => array( 'Pâges_liyês', 'PâgesLiyês' ), + 'Recentchangeslinked' => array( 'Survelyence_des_lims', 'SurvelyenceDesLims' ), + 'Movepage' => array( 'Renomar_una_pâge', 'RenomarUnaPâge', 'Changement_de_nom', 'ChangementDeNom' ), 'Blockme' => array( 'Blocâd-mè', 'BlocâdMè' ), - 'Booksources' => array( 'Ôvres de refèrence', 'ÔvresDeRefèrence' ), + 'Booksources' => array( 'Ôvres_de_refèrence', 'ÔvresDeRefèrence' ), 'Categories' => array( 'Catègories' ), 'Export' => array( 'Èxportar', 'Èxportacion' ), 'Version' => array( 'Vèrsion' ), - 'Allmessages' => array( 'Mèssâjos sistèmo', 'MèssâjosSistèmo' ), + 'Allmessages' => array( 'Mèssâjos_sistèmo', 'MèssâjosSistèmo' ), 'Log' => array( 'Jornal', 'Jornals' ), 'Blockip' => array( 'Blocar', 'Blocâjo' ), 'Undelete' => array( 'Refâre', 'Rèstoracion' ), 'Import' => array( 'Importar', 'Importacion' ), - 'Lockdb' => array( 'Vèrrolyér la bâsa de balyês', 'VèrrolyérLaBâsaDeBalyês' ), - 'Unlockdb' => array( 'Dèvèrrolyér la bâsa de balyês', 'DèvèrrolyérLaBâsaDeBalyês' ), - 'Userrights' => array( 'Drêts d\'utilisator', 'DrêtsDUtilisator' ), - 'MIMEsearch' => array( 'Rechèrche per tipo de contegnu MIME', 'RechèrchePerTipoDeContegnuMIME' ), - 'FileDuplicateSearch' => array( 'Rechèrche des fichiérs en doblo', 'RechèrcheDesFichiérsEnDoblo' ), - 'Unwatchedpages' => array( 'Pâges pas siuvues', 'PâgesPasSiuvues' ), - 'Listredirects' => array( 'Lista de les redirèccions', 'ListaDeLesRedirèccions' ), - 'Revisiondelete' => array( 'Vèrsions suprimâs', 'VèrsionsSuprimâs' ), - 'Unusedtemplates' => array( 'Modèlos inutilisâs', 'ModèlosInutilisâs' ), - 'Randomredirect' => array( 'Redirèccion a l\'hasârd', 'RedirèccionALHasârd' ), - 'Mypage' => array( 'Ma pâge', 'MaPâge' ), - 'Mytalk' => array( 'Mes discussions', 'MesDiscussions' ), - 'Mycontributions' => array( 'Mes contribucions', 'MesContribucions' ), - 'Listadmins' => array( 'Lista ux administrators', 'ListaUxAdministrators' ), - 'Listbots' => array( 'Lista ux bots', 'ListaUxBots' ), - 'Popularpages' => array( 'Pâges les ples consultâs', 'PâgesLesPlesConsultâs' ), + 'Lockdb' => array( 'Vèrrolyér_la_bâsa_de_balyês', 'VèrrolyérLaBâsaDeBalyês' ), + 'Unlockdb' => array( 'Dèvèrrolyér_la_bâsa_de_balyês', 'DèvèrrolyérLaBâsaDeBalyês' ), + 'Userrights' => array( 'Drêts_d\'utilisator', 'DrêtsDUtilisator' ), + 'MIMEsearch' => array( 'Rechèrche_per_tipo_de_contegnu_MIME', 'RechèrchePerTipoDeContegnuMIME' ), + 'FileDuplicateSearch' => array( 'Rechèrche_des_fichiérs_en_doblo', 'RechèrcheDesFichiérsEnDoblo' ), + 'Unwatchedpages' => array( 'Pâges_pas_siuvues', 'PâgesPasSiuvues' ), + 'Listredirects' => array( 'Lista_de_les_redirèccions', 'ListaDeLesRedirèccions' ), + 'Revisiondelete' => array( 'Vèrsions_suprimâs', 'VèrsionsSuprimâs' ), + 'Unusedtemplates' => array( 'Modèlos_inutilisâs', 'ModèlosInutilisâs' ), + 'Randomredirect' => array( 'Redirèccion_a_l\'hasârd', 'RedirèccionALHasârd' ), + 'Mypage' => array( 'Ma_pâge', 'MaPâge' ), + 'Mytalk' => array( 'Mes_discussions', 'MesDiscussions' ), + 'Mycontributions' => array( 'Mes_contribucions', 'MesContribucions' ), + 'Listadmins' => array( 'Lista_ux_administrators', 'ListaUxAdministrators' ), + 'Listbots' => array( 'Lista_ux_bots', 'ListaUxBots' ), + 'Popularpages' => array( 'Pâges_les_ples_consultâs', 'PâgesLesPlesConsultâs' ), 'Search' => array( 'Rechèrchiér', 'Rechèrche' ), - 'Resetpass' => array( 'Changement de mot de pâssa', 'ChangementDeMotDePâssa' ), - 'Withoutinterwiki' => array( 'Pâges sen lims entèrlengoues', 'PâgesSenLimsEntèrlengoues', 'Pâges sen lims entèrvouiqui', 'PâgesSenLimsEntèrvouiqui' ), - 'MergeHistory' => array( 'Fusionar los historicos', 'FusionarLosHistoricos' ), - 'Filepath' => array( 'Chemin d\'accès du fichiér', 'CheminDAccèsDuFichiér' ), - 'Invalidateemail' => array( 'Envalidar l\'adrèce èlèctronica', 'EnvalidarLAdrèceÈlèctronica' ), - 'Blankpage' => array( 'Pâge voueda', 'PâgeVoueda' ), - 'LinkSearch' => array( 'Rechèrche de lims', 'RechèrcheDeLims' ), - 'DeletedContributions' => array( 'Contribucions suprimâs', 'ContribucionsSuprimâs' ), + 'Resetpass' => array( 'Changement_de_mot_de_pâssa', 'ChangementDeMotDePâssa' ), + 'Withoutinterwiki' => array( 'Pâges_sen_lims_entèrlengoues', 'PâgesSenLimsEntèrlengoues', 'Pâges_sen_lims_entèrvouiqui', 'PâgesSenLimsEntèrvouiqui' ), + 'MergeHistory' => array( 'Fusionar_los_historicos', 'FusionarLosHistoricos' ), + 'Filepath' => array( 'Chemin_d\'accès_du_fichiér', 'CheminDAccèsDuFichiér' ), + 'Invalidateemail' => array( 'Envalidar_l\'adrèce_èlèctronica', 'EnvalidarLAdrèceÈlèctronica' ), + 'Blankpage' => array( 'Pâge_voueda', 'PâgeVoueda' ), + 'LinkSearch' => array( 'Rechèrche_de_lims', 'RechèrcheDeLims' ), + 'DeletedContributions' => array( 'Contribucions_suprimâs', 'ContribucionsSuprimâs' ), 'Tags' => array( 'Balises' ), - 'Activeusers' => array( 'Utilisators actifs', 'UtilisatorsActifs' ), + 'Activeusers' => array( 'Utilisators_actifs', 'UtilisatorsActifs' ), ); $magicWords = array( @@ -205,11 +205,11 @@ $magicWords = array( 'img_none' => array( '1', 'vouedo', 'néant', 'neant', 'none' ), 'img_center' => array( '1', 'centrâ', 'centré', 'center', 'centre' ), 'img_framed' => array( '1', 'encâdrâ', 'câdro', 'cadre', 'encadré', 'encadre', 'framed', 'enframed', 'frame' ), - 'img_frameless' => array( '1', 'sen câdro', 'sans_cadre', 'sans cadre', 'non encadré', 'non encadre', 'frameless' ), + 'img_frameless' => array( '1', 'sen_câdro', 'sans_cadre', 'non_encadré', 'non_encadre', 'frameless' ), 'img_page' => array( '1', 'pâge=$1', 'pâge $1', 'page=$1', 'page $1' ), 'img_upright' => array( '1', 'drêt', 'drêt=$1', 'drêt $1', 'redresse', 'redresse=$1', 'redresse $1', 'upright', 'upright=$1', 'upright $1' ), 'img_border' => array( '1', 'bordura', 'bordure', 'border' ), - 'img_baseline' => array( '1', 'legne de bâsa', 'ligne de base', 'base', 'baseline' ), + 'img_baseline' => array( '1', 'legne_de_bâsa', 'ligne_de_base', 'base', 'baseline' ), 'img_sub' => array( '1', 'segno', 'indice', 'ind', 'sub' ), 'img_super' => array( '1', 'èxposent', 'èxp', 'exposant', 'exp', 'super', 'sup' ), 'img_top' => array( '1', 'd\'amont', 'haut', 'top' ), @@ -279,7 +279,7 @@ $magicWords = array( 'numberingroup' => array( '1', 'NOMBRO_D_UTILISATORS_DENS_LA_TROPA', 'NOMBREDANSGROUPE', 'NBDANSGROUPE', 'NUMBERINGROUP', 'NUMINGROUP' ), 'staticredirect' => array( '1', '__REDIRÈCCION_IMOBILA__', '__REDIRECTIONSTATIQUE__', '__STATICREDIRECT__' ), 'protectionlevel' => array( '1', 'NIVÉL_DE_PROTÈCCION', 'NIVEAUDEPROTECTION', 'PROTECTIONLEVEL' ), - 'formatdate' => array( '0', 'format de dâta', 'formatdate', 'dateformat' ), + 'formatdate' => array( '0', 'format_de_dâta', 'formatdate', 'dateformat' ), ); $linkTrail = '/^([a-zàâçéèêîœôû·’æäåāăëēïīòöōùü‘]+)(.*)$/sDu'; @@ -316,8 +316,7 @@ $messages = array( 'tog-editsection' => 'Activar los lims « [changiér] » por changiér una sèccion', 'tog-editsectiononrightclick' => 'Fâre un clic drêt sur un titro de sèccion pèrmèt de changiér ceta (at fôta de JavaScript)', 'tog-showtoc' => 'Fâre vêre la trâbla de les matiéres (por les pâges qu’ont més de 3 sèccions)', -'tog-rememberpassword' => "Sè rapelar de mon mot de pâssa sur ceti ordenator (tèmouen (''cookie''))", -'tog-editwidth' => 'Fâre vêre la fenétra d’èdicion en plêna largior', +'tog-rememberpassword' => 'Sè rapelar de mon branchement sur ceti navigator (por $1 jorn{{PLURAL:$1||s}} u més)', 'tog-watchcreations' => 'Apondre les pâges que fé a ma lista de survelyence', 'tog-watchdefault' => 'Apondre les pâges que chanjo a ma lista de survelyence', 'tog-watchmoves' => 'Apondre les pâges que renomo a ma lista de survelyence', @@ -418,8 +417,8 @@ $messages = array( 'pagecategories' => 'Catègorie{{PLURAL:$1||s}}', 'category_header' => 'Pâges dens la catègorie « $1 »', 'subcategories' => 'Sot-catègories', -'category-media-header' => 'Fichiérs multimèdia dens la catègorie « $1 »', -'category-empty' => "''Ora, ceta catègorie contint gins de pâge, de sot-catègorie ou ben de fichiér multimèdia.''", +'category-media-header' => 'Fichiérs mèdia dens la catègorie « $1 »', +'category-empty' => "''Ora, ceta catègorie contint gins de pâge ou ben de fichiér mèdia.''", 'hidden-categories' => '{{PLURAL:$1|Catègorie cachiê|Catègories cachiês}}', 'hidden-category-category' => 'Catègories cachiês', 'category-subcat-count' => 'Ceta catègorie at {{PLURAL:$2|ren que la sot-catègorie|$2 sot-catègories, que {{PLURAL:$1|cela|les $1}}}} ce-desot.', @@ -463,31 +462,21 @@ $messages = array( 'faqpage' => 'Project:FDQ', # Vector skin -'vector-action-addsection' => 'Apondre un sujèt', -'vector-action-delete' => 'Suprimar', -'vector-action-move' => 'Renomar', -'vector-action-protect' => 'Protègiér', -'vector-action-undelete' => 'Refâre', -'vector-action-unprotect' => 'Dèprotègiér', -'vector-namespace-category' => 'Catègorie', -'vector-namespace-help' => 'Éde', -'vector-namespace-image' => 'Fichiér', -'vector-namespace-main' => 'Pâge', -'vector-namespace-media' => 'Pâge du fichiér multimèdia', -'vector-namespace-mediawiki' => 'Mèssâjo', -'vector-namespace-project' => 'Pâge du projèt', -'vector-namespace-special' => 'Pâge spèciâla', -'vector-namespace-talk' => 'Discussion', -'vector-namespace-template' => 'Modèlo', -'vector-namespace-user' => 'Pâge utilisator', -'vector-view-create' => 'Fâre', -'vector-view-edit' => 'Changiér', -'vector-view-history' => 'Fâre vêre l’historico', -'vector-view-view' => 'Liére', -'vector-view-viewsource' => 'Vêre lo tèxto sôrsa', -'actions' => 'Accions', -'namespaces' => 'Èspâços de noms', -'variants' => 'Variantes', +'vector-action-addsection' => 'Apondre un sujèt', +'vector-action-delete' => 'Suprimar', +'vector-action-move' => 'Renomar', +'vector-action-protect' => 'Protègiér', +'vector-action-undelete' => 'Refâre', +'vector-action-unprotect' => 'Dèprotègiér', +'vector-simplesearch-preference' => 'Activar los consèlys de rechèrche mèlyorâs (solament por « Vèctor »)', +'vector-view-create' => 'Fâre', +'vector-view-edit' => 'Changiér', +'vector-view-history' => 'Fâre vêre l’historico', +'vector-view-view' => 'Liére', +'vector-view-viewsource' => 'Vêre lo tèxto sôrsa', +'actions' => 'Accions', +'namespaces' => 'Èspâços de noms', +'variants' => 'Variantes', 'errorpagetitle' => 'Èrror', 'returnto' => 'Tornar a la pâge $1.', @@ -548,6 +537,9 @@ Trop d’utilisators chèrchont a arrevar a ceta pâge. Volyéd atendre un moment devant que vos tâchiéd de tornar arrevar a ceta pâge. $1', +'pool-timeout' => 'Dèpassement du dèlê pendent l’atenta du vèrrolyâjo', +'pool-queuefull' => 'La fela d’ôvra est plêna', +'pool-errorunknown' => 'Èrror encognua', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'A propôs de {{SITENAME}}', @@ -607,7 +599,7 @@ Vêde la [[Special:Version|pâge de les vèrsions]].', # Short words for each namespace, by default used in the namespace tab in monobook 'nstab-main' => 'Pâge', 'nstab-user' => 'Pâge utilisator', -'nstab-media' => 'Pâge du fichiér multimèdia', +'nstab-media' => 'Pâge de mèdia', 'nstab-special' => 'Pâge spèciâla', 'nstab-project' => 'Pâge du projèt', 'nstab-image' => 'Fichiér', @@ -716,7 +708,8 @@ Oubliâd pas de pèrsonalisar voutres [[Special:Preferences|prèferences dessus 'yourname' => 'Voutron nom d’utilisator :', 'yourpassword' => 'Mot de pâssa :', 'yourpasswordagain' => 'Confirmâd lo mot de pâssa :', -'remembermypassword' => "Sè rapelar de mon mot de pâssa sur ceti ordenator (tèmouen (''cookie''))", +'remembermypassword' => 'Sè rapelar de mon branchement sur ceti navigator (por $1 jorn{{PLURAL:$1||s}} u més)', +'securelogin-stick-https' => 'Réstar branchiê en HTTPS aprés lo branchement', 'yourdomainname' => 'Voutron domêno :', 'externaldberror' => 'Ou ben una èrror est arrevâ avouéc la bâsa de balyês d’ôtenticacion de defôr, ou ben vos éte pas ôtorisâ a betar a jorn voutron compto de defôr.', 'login' => 'Branchement', @@ -733,6 +726,7 @@ Oubliâd pas de pèrsonalisar voutres [[Special:Preferences|prèferences dessus 'gotaccount' => "Vos avéd ja un compto ? '''$1'''.", 'gotaccountlink' => 'Branchiéd-vos', 'createaccountmail' => 'per mèssageria èlèctronica', +'createaccountreason' => 'Rêson :', 'badretype' => 'Los mots de pâssa que vos éd buchiês sont pas pariérs.', 'userexists' => 'Lo nom d’utilisator que vos éd buchiê est ja utilisâ. Nen volyéd chouèsir un ôtro.', @@ -759,6 +753,7 @@ Volyéd tornar èprovar.', Volyéd tornar èprovar.', 'passwordtooshort' => 'Voutron mot de pâssa dêt contegnir u muens $1 caractèro{{PLURAL:$1||s}}.', 'password-name-match' => 'Voutron mot de pâssa dêt étre difèrent de voutron nom d’utilisator.', +'password-login-forbidden' => 'L’usâjo de cél nom d’utilisator et de cél mot de pâssa at étâ dèfendu.', 'mailmypassword' => 'Recêvre un mot de pâssa novél per mèssageria èlèctronica', 'passwordremindertitle' => 'Mot de pâssa temporèro novél por {{SITENAME}}', 'passwordremindertext' => 'Quârqu’un (probâblament vos, avouéc l’adrèce IP $1) at demandâ un mot de pâssa @@ -767,8 +762,8 @@ l’utilisator « $2 » et est « $3 ». S’o ére voutra entencion, vos vos de branchiér et pués chouèsir un mot de pâssa novél. Voutron mot de pâssa temporèro èxpirerat dens $5 jorn{{PLURAL:$5||s}}. -Se vos éte pas l’ôtor de cela demanda, ou ben se vos vos rapelâd ora -de voutron viely mot de pâssa et que vos souhètâd pas més nen changiér, vos +Se cela demanda vint pas de vos, ou ben se vos vos rapelâd ora +de voutron mot de pâssa et que vos souhètâd pas més nen changiér, vos pouede ignorar ceti mèssâjo et continuar a utilisar voutron viely mot de pâssa.', 'noemail' => 'Niona adrèce èlèctronica at étâ encartâ por l’utilisator « $1 ».', 'noemailcreate' => 'Vos dête balyér una adrèce èlèctronica valida', @@ -802,6 +797,9 @@ Volyéd atendre devant que tornar èprovar.', 'loginlanguagelabel' => 'Lengoua : $1', 'suspicious-userlogout' => "Voutra demanda de dèbranchement at étâ refusâ perce que semble qu’el at étâ mandâ per un navigator câsso ou ben la misa en cache d’un sèrvor mandatèro (''proxy'').", +# E-mail sending +'php-mail-error-unknown' => 'Èrror encognua dens la fonccion mail() de PHP.', + # Password reset dialog 'resetpass' => 'Changiér lo mot de pâssa', 'resetpass_announce' => 'Vos vos éte branchiê avouéc un mot de pâssa temporèro mandâ per mèssageria èlèctronica. @@ -839,7 +837,7 @@ Vos éd pôt-étre ja changiê voutron mot de pâssa avouéc reusséta ou ben de 'image_sample' => 'Ègzemplo.jpg', 'image_tip' => 'Fichiér entrebetâ', 'media_sample' => 'Ègzemplo.ogg', -'media_tip' => 'Lim de vers un fichiér multimèdia', +'media_tip' => 'Lim de vers un fichiér mèdia', 'sig_tip' => 'Voutra signatura avouéc la dâta', 'hr_tip' => 'Legne plana (pas nen abusar)', @@ -855,11 +853,12 @@ Vos éd pôt-étre ja changiê voutron mot de pâssa avouéc reusséta ou ben de 'showdiff' => 'Fâre vêre los changements', 'anoneditwarning' => "'''Atencion :''' vos éte pas branchiê. Voutra adrèce IP serat encartâ dens l’historico de ceta pâge.", +'anonpreviewwarning' => "''Vos éte pas branchiê. Sôvar encarterat voutra adrèce IP dens l’historico des changements de la pâge.''", 'missingsummary' => "'''Rapèl :''' vos éd p’oncor balyê lo rèsumâ de voutron changement. Se vos tornâd clicar dessus « {{int:savearticle}} », voutron changement serat sôvâ sen novél avèrtissement.", 'missingcommenttext' => 'Volyéd fâre voutron comentèro ce-desot.', 'missingcommentheader' => "'''Rapèl :''' vos éd p’oncor balyê de sujèt ou ben de titro a ceti comentèro. -Se vos tornâd clicar dessus « Sôvar ceta pâge », voutron changement serat sôvâ sen novél avèrtissement.", +Se vos tornâd clicar dessus « {{int:savearticle}} », voutron changement serat sôvâ sen titro.", 'summary-preview' => 'Prèvisualisacion du rèsumâ :', 'subject-preview' => 'Prèvisualisacion du sujèt / titro :', 'blockedtitle' => 'L’utilisator est blocâ.', @@ -937,8 +936,12 @@ La dèrriére entrâ du jornal des blocâjos est disponibla ce-desot :', '''El at p’oncor étâ sôvâ !'''", 'userjspreview' => "'''Rapelâd-vos que vos éte solament aprés èprovar ou ben prèvisualisar voutron code JavaScript.''' '''Il at p’oncor étâ sôvâ !'''", +'sitecsspreview' => "'''Rapelâd-vos que vos éte solament aprés prèvisualisar cela fôlye CSS.''' +'''El at p’oncor étâ sôvâ !'''", +'sitejspreview' => "'''Rapelâd-vos que vos éte solament aprés èprovar ou ben prèvisualisar cél code JavaScript.''' +'''Il at p’oncor étâ sôvâ !'''", 'userinvalidcssjstitle' => "'''Atencion :''' ègziste gins d’habelyâjo « $1 ». -Rapelâd-vos que les pâges a sè avouéc èxtensions .css et .js utilisont des titros en petiôtes lètres, per ègzemplo {{ns:user}}:Foo/monobook.css et pas {{ns:user}}:Foo/Monobook.css.", +Rapelâd-vos que les pâges a sè avouéc èxtensions .css et .js utilisont des titros en petiôtes lètres, per ègzemplo {{ns:user}}:Foo/vector.css et pas {{ns:user}}:Foo/Vector.css.", 'updated' => '(Betâ a jorn)', 'note' => "'''Nota :'''", 'previewnote' => "'''Rapelâd-vos que ceti tèxto est ren qu’una prèvisualisacion.''' @@ -981,9 +984,6 @@ Vos nos assurâd asse-ben que vos éd cen ècrit vos-mémo, ou ben que vos l’ Se vos voléd pas que voutros ècrits seyont changiês sen gins de rèstriccion, adonc los volyéd pas sometre ique.
    Vos nos assurâd asse-ben que vos éd cen ècrit vos-mémo, ou ben que vos l’éd copiyê d’una sôrsa que vint du domêno publico, ou ben d’una ressôrsa abada (vêde $1 por més de dètalys). '''Utilisâd gins d’ôvra desot drêt d’ôtor sen pèrmission èxprèssa !'''", -'longpagewarning' => "'''ATENCION :''' ceta pâge at una longior de $1 Kio ; -quârques navigators administront mâl lo changement de les pâges aprochient ou ben dèpassent 32 Kio. -Pôt-étre devriâd-vos divisar la pâge en sèccions ples petiôtes.", 'longpageerror' => "'''ÈRROR : lo tèxto que vos éd somês fât $1 Kio, cen que dèpâsse la limita fixâ a $2 Kio.''' Lo tèxto pôt pas étre sôvâ.", 'readonlywarning' => "'''Atencion : la bâsa de balyês at étâ vèrrolyê por mantegnence, vos porréd vêr pas sôvar voutros changements d’abôrd.''' @@ -1164,10 +1164,12 @@ $1", 'logdelete-failure' => "'''La visibilitât du jornal at pas possu étre dèfenia :''' $1", 'revdel-restore' => 'Changiér la visibilitât', +'revdel-restore-deleted' => 'vèrsions suprimâs', +'revdel-restore-visible' => 'vèrsions visibles', 'pagehist' => 'Historico de la pâge', 'deletedhist' => 'Historico suprimâ', 'revdelete-content' => 'contegnu', -'revdelete-summary' => 'rèsumâ de changement', +'revdelete-summary' => 'rèsumâ du changement', 'revdelete-uname' => 'nom d’utilisator', 'revdelete-restricted' => 'at aplicâ les rèstriccions ux administrators', 'revdelete-unrestricted' => 'rèstriccions enlevâs por los administrators', @@ -1233,11 +1235,13 @@ Notâd bien que l’usâjo des lims de navigacion tornerat inicialisar cela colo # Diffs 'history-title' => 'Historico de les vèrsions de « $1 »', 'difference' => '(Difèrences entre les vèrsions)', +'difference-multipage' => '(Difèrences entre les pâges)', 'lineno' => 'Legne $1 :', 'compareselectedversions' => 'Comparar les vèrsions chouèsies', 'showhideselectedversions' => 'Fâre vêre / cachiér les vèrsions chouèsies', 'editundo' => 'dèfâre', -'diff-multi' => '({{PLURAL:$1|Yona vèrsion entèrmèdièra cachiê|$1 vèrsions entèrmèdières cachiês}}.)', +'diff-multi' => '({{PLURAL:$1|Yona vèrsion entèrmèdièra|$1 vèrsions entèrmèdières}} per {{PLURAL:$2|yon utilisator|$2 utilisators}} {{PLURAL:$1|est pas montrâ|sont pas montrâs}})', +'diff-multi-manyusers' => '({{PLURAL:$1|Yona vèrsion entèrmèdièra|$1 vèrsions entèrmèdières}} per més de $2 utilisator{{PLURAL:$2||s}} {{PLURAL:$1|est pas montrâ|sont pas montrâs}})', # Search results 'searchresults' => 'Rèsultats de la rechèrche', @@ -1263,15 +1267,16 @@ Notâd bien que l’usâjo des lims de navigacion tornerat inicialisar cela colo 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Rechèrchiér les pâges que començont per ceti prèfixo]]', 'searchprofile-articles' => 'Pâges de contegnu', 'searchprofile-project' => 'Pâges d’éde et du projèt', -'searchprofile-images' => 'Fichiérs multimèdia', +'searchprofile-images' => 'Multimèdia', 'searchprofile-everything' => 'Tot', 'searchprofile-advanced' => 'Rechèrche avanciê', 'searchprofile-articles-tooltip' => 'Rechèrchiér dens $1', 'searchprofile-project-tooltip' => 'Rechèrchiér dens $1', -'searchprofile-images-tooltip' => 'Rechèrchiér des fichiérs multimèdia', +'searchprofile-images-tooltip' => 'Rechèrchiér des fichiérs mèdia', 'searchprofile-everything-tooltip' => 'Rechèrchiér dens tot lo seto (les pâges de discussion avouéc)', 'searchprofile-advanced-tooltip' => 'Chouèsir los èspâços de noms por la rechèrche', 'search-result-size' => '$1 ($2 mot{{PLURAL:$2||s}})', +'search-result-category-size' => '$1 membro{{PLURAL:$1||s}} ($2 sot-catègorie{{PLURAL:$2||s}}, $3 fichiér{{PLURAL:$3||s}})', 'search-result-score' => 'Rapôrt : $1 %', 'search-redirect' => '(redirèccion dês $1)', 'search-section' => '(sèccion $1)', @@ -1318,7 +1323,7 @@ Atencion, lor endèxacion du contegnu de {{SITENAME}} pôt pas étre a jorn.', 'mypreferences' => 'Prèferences', 'prefs-edits' => 'Nombro de changements :', 'prefsnologin' => 'Pas branchiê', -'prefsnologintext' => 'Vos dête étre [{{fullurl:{{#Special:UserLogin}}|returnto=$1}} branchiê] por changiér voutres prèferences d’utilisator.', +'prefsnologintext' => 'Vos dête étre [{{fullurl:{{#Special:UserLogin}}|returnto=$1}} branchiê] por changiér voutres prèferences utilisator.', 'changepassword' => 'Changement du mot de pâssa', 'prefs-skin' => 'Habelyâjo', 'skin-preview' => 'Prèvisualisar', @@ -1349,6 +1354,7 @@ Atencion, lor endèxacion du contegnu de {{SITENAME}} pôt pas étre a jorn.', 'contextlines' => 'Nombro de legnes per rèponsa :', 'contextchars' => 'Nombro de caractèros de contèxto per legne :', 'stub-threshold' => 'Limita d’amont por los lims de vers los començons (octèts) :', +'stub-threshold-disabled' => 'Dèsactivâ', 'recentchangesdays' => 'Nombro de jorns a fâre vêre dens los dèrriérs changements :', 'recentchangesdays-max' => '$1 jorn{{PLURAL:$1||s}} u més', 'recentchangescount' => 'Nombro de changements a fâre vêre per dèfôt :', @@ -1382,6 +1388,7 @@ Vê-que una valor fêta per hasârd que vos pouede utilisar : $1', 'prefs-files' => 'Fichiérs', 'prefs-custom-css' => 'CSS pèrsonalisâ', 'prefs-custom-js' => 'JavaScript pèrsonalisâ', +'prefs-common-css-js' => 'CSS / JS partagiê por tôs los habelyâjos :', 'prefs-reset-intro' => 'Vos pouede utilisar ceta pâge por rètablir voutres prèferences a les valors du seto per dèfôt. Cen pôt pas étre dèfêt.', 'prefs-emailconfirm-label' => 'Confirmacion de la mèssageria èlèctronica :', @@ -1411,7 +1418,7 @@ Ceta enformacion serat publica.', 'prefs-help-email' => 'U chouèx : endicar voutra adrèce èlèctronica pèrmèt de vos mandar un mot de pâssa novél se vos oubliâd lo voutro. Vos pouede asse-ben dècidar de lèssiér los ôtros sè veriér vers vos avouéc voutra pâge de discussion, sen avêr fôta de dèvouèlar voutra identitât.', 'prefs-help-email-required' => 'Una adrèce èlèctronica est nècèssèra.', -'prefs-info' => 'Enformacion de bâsa', +'prefs-info' => 'Enformacions de bâsa', 'prefs-i18n' => 'Entèrnacionalisacion', 'prefs-signature' => 'Signatura', 'prefs-dateformat' => 'Format de les dâtes', @@ -1421,9 +1428,15 @@ Vos pouede asse-ben dècidar de lèssiér los ôtros sè veriér vers vos avoué 'prefs-advancedrendering' => 'Chouèx avanciês', 'prefs-advancedsearchoptions' => 'Chouèx avanciês', 'prefs-advancedwatchlist' => 'Chouèx avanciês', -'prefs-display' => 'Chouèx de visualisacion', +'prefs-displayrc' => 'Chouèx de visualisacion', +'prefs-displaysearchoptions' => 'Chouèx de visualisacion', +'prefs-displaywatchlist' => 'Chouèx de visualisacion', 'prefs-diffs' => 'Difèrences', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'L’adrèce èlèctronica semble valida', +'email-address-validity-invalid' => 'Buchiéd una adrèce èlèctronica valida', + # User rights 'userrights' => 'Administracion des drêts d’utilisator', 'userrights-lookup-user' => 'Administracion a les tropes d’utilisators', @@ -1507,6 +1520,7 @@ Vos pouede asse-ben dècidar de lèssiér los ôtros sè veriér vers vos avoué 'right-hideuser' => 'Blocar un utilisator en cachient son nom u publico', 'right-ipblock-exempt' => 'Pas étre afèctâ per les adrèces IP blocâs, los blocâjos ôtomaticos et los blocâjos de plages d’adrèces IP', 'right-proxyunbannable' => "Pas étre afèctâ per los blocâjos ôtomaticos de sèrvors mandatèros (''proxies'')", +'right-unblockself' => 'Sè dèblocar lor-mémos', 'right-protect' => 'Changiér lo nivél de protèccion de les pâges et changiér les pâges protègiês', 'right-editprotected' => 'Changiér les pâges protègiês (sen protèccion en cascâda)', 'right-editinterface' => 'Changiér l’entèrface de la programeria', @@ -1529,7 +1543,6 @@ Vos pouede asse-ben dècidar de lèssiér los ôtros sè veriér vers vos avoué 'right-siteadmin' => 'Vèrrolyér ou dèvèrrolyér la bâsa de balyês', 'right-reset-passwords' => 'Changiér lo mot de pâssa d’ôtros utilisators', 'right-override-export-depth' => 'Èxportar les pâges en encllusent les pâges liyês tant qu’a una provondior de 5 nivéls', -'right-versiondetail' => 'Vêre les enformacions ètendues sur les vèrsions de les programeries', 'right-sendemail' => 'Mandar un mèssâjo ux ôtros utilisators', # User rights log @@ -1580,14 +1593,9 @@ Vos pouede asse-ben dècidar de lèssiér los ôtros sè veriér vers vos avoué 'recentchanges-legend' => 'Chouèx des dèrriérs changements', 'recentchangestext' => 'Siude los dèrriérs changements du vouiqui sur ceta pâge.', 'recentchanges-feed-description' => 'Siude los dèrriérs changements du vouiqui dens ceti flux.', -'recentchanges-label-legend' => 'Lègenda : $1.', -'recentchanges-legend-newpage' => '$1 - pâge novèla', 'recentchanges-label-newpage' => 'Ceti changement at fêt una pâge novèla.', -'recentchanges-legend-minor' => '$1 - petiôt changement', 'recentchanges-label-minor' => 'Ceti changement est petiôt.', -'recentchanges-legend-bot' => '$1 - changement fêt per un bot', 'recentchanges-label-bot' => 'Ceti changement at étâ fêt per un bot.', -'recentchanges-legend-unpatrolled' => '$1 - changement pas survelyê', 'recentchanges-label-unpatrolled' => 'Ceti changement at p’oncor étâ survelyê.', 'rcnote' => "Vê-que {{PLURAL:$1|lo dèrriér changement fêt|los '''$1''' dèrriérs changements fêts}} pendent {{PLURAL:$2|lo jorn passâ|los '''$2''' jorns passâs}} tant qu’a $5 lo $4.", 'rcnotefrom' => "Vê-que los changements fêts dês lo '''$2''' ('''$1''' u més).", @@ -1634,6 +1642,9 @@ Les pâges de voutra [[Special:Watchlist|lista de survelyence]] sont '''en grâs 'upload_directory_missing' => 'Lo rèpèrtouèro de tèlèchargement ($1) est entrovâblo et pués at pas possu étre fêt per lo sèrvor vouèbe.', 'upload_directory_read_only' => 'Lo rèpèrtouèro de tèlèchargement ($1) est pas accèssiblo en ècritura dês lo sèrvor vouèbe.', 'uploaderror' => 'Èrror pendent lo tèlèchargement', +'upload-recreate-warning' => "'''Atencion : un fichiér avouéc cél nom at étâ suprimâ ou ben dèplaciê.''' + +Los jornals de les suprèssions et des changements de nom de cela pâge sont montrâs ce-desot :", 'uploadtext' => "Utilisâd ceti formulèro por tèlèchargiér des fichiérs sur lo sèrvor. Por vêre ou rechèrchiér des émâges mandâs dês devant, vêde la [[Special:FileList|lista de les émâges]]. Los tèlèchargements sont asse-ben encartâs dens lo [[Special:Log/upload|jornal des tèlèchargements]], et les suprèssions dens lo [[Special:Log/delete|jornal de les suprèssions]]. @@ -1646,7 +1657,7 @@ Por encllure un fichiér dens una pâge, utilisâd un lim de la fôrma : 'upload-preferred' => 'Formats de fichiérs prèferâs : $1.', 'upload-prohibited' => 'Formats de fichiérs dèfendus : $1.', 'uploadlog' => 'Jornal des tèlèchargements', -'uploadlogpage' => 'Jornal des tèlèchargements de fichiérs multimèdia', +'uploadlogpage' => 'Jornal des tèlèchargements', 'uploadlogpagetext' => 'Vê-que la lista des dèrriérs fichiérs tèlèchargiês sur lo sèrvor. Vêde la [[Special:NewFiles|galerie des novéls fichiérs]] por una presentacion ples visuâla.', 'filename' => 'Nom du fichiér', @@ -1670,6 +1681,17 @@ Lo volyéd renomar et pués lo tornar tèlèchargiér.', 'filetype-banned-type' => "'''« .$1 »''' est un format de fichiér pas ôtorisâ. {{PLURAL:$3|Lo tipo de fichiérs accèptâ est|Los tipos de fichiérs accèptâs sont}} $2.", 'filetype-missing' => 'Lo fichiér at gins d’èxtension (coment « .jpg » per ègzemplo).', +'empty-file' => 'Lo fichiér que vos éd somês ére vouedo.', +'file-too-large' => 'Lo fichiér que vos éd somês ére trop grant.', +'filename-tooshort' => 'Lo nom du fichiér est trop côrt.', +'filetype-banned' => 'Cél tipo de fichiér est dèfendu.', +'verification-error' => 'Cél fichiér pâsse pas lo contrôlo des fichiérs.', +'hookaborted' => 'Lo changement que vos éd tâchiê de fâre at étâ arrètâ per un grèfon d’una èxtension.', +'illegal-filename' => 'Lo nom du fichiér est pas ôtorisâ.', +'overwrite' => 'Ècllafar un fichiér ègzistent est pas ôtorisâ.', +'unknown-error' => 'Una èrror encognua est arrevâ.', +'tmp-create-error' => 'Empossiblo de fâre lo fichiér temporèro.', +'tmp-write-error' => 'Èrror d’ècritura du fichiér temporèro.', 'large-file' => 'Los fichiérs tèlèchargiês devriant pas étre ples grant que $1 ; cél fichiér fât $2.', 'largefileserver' => 'La talye de cél fichiér est d’amont lo nivél lo ples hôt ôtorisâ.', @@ -1703,13 +1725,14 @@ Se vos voléd adés tèlèchargiér voutron fichiér, volyéd tornar arriér et 'file-exists-duplicate' => 'Cél fichiér est un doblo {{PLURAL:$1|de ceti fichiér|de cetos fichiérs}} :', 'file-deleted-duplicate' => 'Un fichiér pariér a ceti ([[:$1]]) at ja étâ suprimâ. Vos devriâd controlar lo jornal de les suprèssions de cél fichiér devant que lo tornar tèlèchargiér.', -'successfulupload' => 'Tèlèchargement fêt avouéc reusséta', 'uploadwarning' => 'Atencion !', 'uploadwarning-text' => 'Changiéd la dèscripcion du fichiér et pués tornâd èprovar.', 'savefile' => 'Sôvar lo fichiér', 'uploadedimage' => 'at tèlèchargiê « [[$1]] »', 'overwroteimage' => 'at tèlèchargiê una novèla vèrsion de « [[$1]] »', 'uploaddisabled' => 'Tèlèchargements dèsactivâs', +'copyuploaddisabled' => 'Tèlèchargement de fichiér per URL dèsactivâ.', +'uploadfromurl-queued' => 'Voutron tèlèchargement at étâ betâ dens la fela d’atenta.', 'uploaddisabledtext' => 'Lo tèlèchargement de fichiérs est dèsactivâ.', 'php-uploaddisabledtext' => 'Lo tèlèchargement de fichiérs at étâ dèsactivâ dens PHP. Volyéd controlar lo chouèx de configuracion « file_uploads ».', @@ -1745,6 +1768,14 @@ JD # Jenoptik MGP # Pentax PICT # de totes sôrtes # ', +'upload-success-subj' => 'Tèlèchargement fêt avouéc reusséta', +'upload-success-msg' => 'Voutron tèlèchargement dês [$2] at reussi. Il est disponiblo ique : [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problèmo de tèlèchargement', +'upload-failure-msg' => 'Y at avu un problèmo avouéc voutron tèlèchargement dês [$2] : + +$1', +'upload-warning-subj' => 'Avèrtissement pendent lo tèlèchargement', +'upload-warning-msg' => 'Un problèmo est arrevâ pendent voutron tèlèchargement dês [$2]. Vos pouede tornar u [[Special:Upload/stash/$1|formulèro de tèlèchargement]] por trovar la solucion.', 'upload-proto-error' => 'Protocolo fôx', 'upload-proto-error-text' => 'Lo tèlèchargement a distance at fôta des URLs que començont per http:// ou ben ftp://.', @@ -1808,9 +1839,10 @@ Vos pouede asse-ben tornar èprovar a una hora de muendra afluence.', 'listfiles-summary' => 'Ceta pâge spèciâla montre tôs los fichiérs tèlèchargiês. Per dèfôt, los dèrriérs fichiérs tèlèchargiês sont montrâs d’amont la lista. Clicar sur un en-téta de colona pèrmèt de changiér l’ôrdre de visualisacion.', -'listfiles_search_for' => 'Rechèrchiér un nom d’un fichiér multimèdia :', +'listfiles_search_for' => 'Rechèrchiér un nom de mèdia :', 'imgfile' => 'fichiér', 'listfiles' => 'Lista des fichiérs', +'listfiles_thumb' => 'Figura', 'listfiles_date' => 'Dâta', 'listfiles_name' => 'Nom', 'listfiles_user' => 'Utilisator', @@ -1854,6 +1886,7 @@ La dèscripcion de sa [$2 pâge de dèscripcion] est montrâ ce-desot.', 'uploadnewversion-linktext' => 'Tèlèchargiér una novèla vèrsion de ceti fichiér', 'shared-repo-from' => 'de $1', 'shared-repo' => 'un dèpôt de fichiérs partagiê', +'filepage.css' => '/* Lo code CSS betâ ique est encllu dens la pâge de dèscripcion du fichiér, et pués dens los vouiquis cliants ètrangiérs. */', # File reversion 'filerevert' => 'Rètablir $1', @@ -1925,8 +1958,8 @@ Oubliâd pas de controlar s’y at pas d’ôtros lims de vers los modèlos deva 'statistics-edits' => 'Changements de pâges dês l’enstalacion de {{SITENAME}}', 'statistics-edits-average' => 'Nombro moyen de changements per pâge', 'statistics-views-total' => 'Soma de les visualisacions', +'statistics-views-total-desc' => 'Les visualisacions de les pâges pas ègzistentes et de les pâges spèciâles sont pas encllues', 'statistics-views-peredit' => 'Visualisacions per changement', -'statistics-jobqueue' => 'Longior de la [http://www.mediawiki.org/wiki/Manual:Job_queue lista d’atenta de trètament]', 'statistics-users' => '[[Special:ListUsers|Utilisators]] encartâs', 'statistics-users-active' => 'Utilisators actifs', 'statistics-users-active-desc' => 'Utilisators qu’ont fêt u muens una accion pendent {{PLURAL:$1|lo jorn passâ|los $1 jorns passâs}}', @@ -1941,7 +1974,7 @@ Una pâge est trètâ coment una pâge d’homonimia s’encllut (tot drêt ou b 'doubleredirects' => 'Redirèccions dobles', 'doubleredirectstext' => 'Vê-que la lista de les pâges que redirijont vers des pâges que sont lor-mémes des pâges de redirèccion. Châque entrâ contint des lims de vers la premiére et la seconda redirèccion, et pués la premiére legne de tèxto de la seconda pâge, cen que balye habituèlament la « veré » pâge ciba, de vers laquinta la premiére redirèccion devrêt redirigiér. -Les entrâs barrâs ont étâ solucionâs.', +Les entrâs barrâs ont étâ solucionâs.', 'double-redirect-fixed-move' => 'Cela redirèccion, que la ciba [[$1]] at étâ renomâ, mène ora vers [[$2]].', 'double-redirect-fixer' => 'Corrèctor de redirèccion', @@ -1964,6 +1997,8 @@ Les entrâs barrâs ont étâ solucionâs.', 'nmembers' => '$1 membro{{PLURAL:$1||s}}', 'nrevisions' => '$1 vèrsion{{PLURAL:$1||s}}', 'nviews' => '$1 visualisacion{{PLURAL:$1||s}}', +'nimagelinks' => 'Utilisâ dessus $1 pâge{{PLURAL:$1||s}}', +'ntransclusions' => 'utilisâ dessus $1 pâge{{PLURAL:$1||s}}', 'specialpage-empty' => 'Y at gins de rèsultat a fâre vêre.', 'lonelypages' => 'Pâges orfenes', 'lonelypagestext' => 'Cetes pâges sont pas liyês ou ben encllues dês d’ôtres pâges de {{SITENAME}}.', @@ -2057,7 +2092,7 @@ Contint sûrement yon ou ben un mouél de caractèros que pôvont pas étre util # Special:Categories 'categories' => 'Catègories', -'categoriespagetext' => '{{PLURAL:$1|Ceta catègorie est utilisâ|Cetes catègories sont utilisâs}} per des pâges ou ben des fichiérs multimèdia. +'categoriespagetext' => '{{PLURAL:$1|Ceta catègorie contint|Cetes catègories contegnont}} des pâges ou ben des fichiérs mèdia. Les [[Special:UnusedCategories|catègories inutilisâs]] sont pas montrâs ique. Vêde asse-ben les [[Special:WantedCategories|catègories les ples demandâs]].', 'categoriesfrom' => 'Fâre vêre les catègories dês :', @@ -2123,34 +2158,40 @@ Y pôt avêr [[{{MediaWiki:Listgrouprights-helppage}}|més d’enformacions]] su 'listgrouprights-removegroup-self-all' => 'Sè pôt enlevar totes les tropes de son prôpro compto', # E-mail user -'mailnologin' => 'Gins d’adrèce d’èxpèdior', -'mailnologintext' => 'Vos dête étre [[Special:UserLogin|branchiê]] et avêr endicâ una adrèce èlèctronica valida dens voutres [[Special:Preferences|prèferences]] por povêr mandar des mèssâjos a d’ôtros utilisators.', -'emailuser' => 'Lui mandar un mèssâjo', -'emailpage' => 'Mandar un mèssâjo a l’utilisator', -'emailpagetext' => 'Vos pouede utilisar lo formulèro ce-desot por mandar un mèssâjo a ceti utilisator. +'mailnologin' => 'Gins d’adrèce d’èxpèdior', +'mailnologintext' => 'Vos dête étre [[Special:UserLogin|branchiê]] et avêr endicâ una adrèce èlèctronica valida dens voutres [[Special:Preferences|prèferences]] por povêr mandar des mèssâjos a d’ôtros utilisators.', +'emailuser' => 'Lui mandar un mèssâjo', +'emailpage' => 'Mandar un mèssâjo a l’utilisator', +'emailpagetext' => 'Vos pouede utilisar lo formulèro ce-desot por mandar un mèssâjo a ceti utilisator. L’adrèce èlèctronica que vos éd endicâ dens voutres [[Special:Preferences|prèferences]] aparètrat dedens lo champ « Èxpèdior » de voutron mèssâjo ; d’ense, lo dèstinatèro vos porrat rèpondre tot drêt.', -'usermailererror' => 'Èrror dens lo sujèt du mèssâjo :', -'defemailsubject' => 'Mèssâjo de {{SITENAME}}', -'noemailtitle' => 'Dèstinatèro sen adrèce èlèctronica', -'noemailtext' => 'Ceti utilisator at pas spècefiâ una adrèce èlèctronica valida.', -'nowikiemailtitle' => 'Gins de mèssageria èlèctronica ôtorisâ', -'nowikiemailtext' => 'Ceti utilisator at chouèsi de pas recêvre de mèssâjo de la pârt d’ôtros utilisators.', -'email-legend' => 'Mandar un mèssâjo a un ôtro utilisator de {{SITENAME}}', -'emailfrom' => 'Èxpèdior :', -'emailto' => 'Dèstinatèro :', -'emailsubject' => 'Sujèt :', -'emailmessage' => 'Mèssâjo :', -'emailsend' => 'Mandar', -'emailccme' => 'Mè mandar per mèssageria èlèctronica una copia de mon mèssâjo.', -'emailccsubject' => 'Copia de voutron mèssâjo a $1 : $2', -'emailsent' => 'Mèssâjo mandâ', -'emailsenttext' => 'Voutron mèssâjo at étâ mandâ per mèssageria èlèctronica.', -'emailuserfooter' => 'Ceti mèssâjo at étâ mandâ per « $1 » a « $2 » per la fonccion « Lui mandar un mèssâjo » de {{SITENAME}}.', +'usermailererror' => 'Èrror dens lo sujèt du mèssâjo :', +'defemailsubject' => 'Mèssâjo de {{SITENAME}}', +'usermaildisabled' => 'L’èxpèdicion de mèssâjos entre-mié utilisators est dèsactivâ', +'usermaildisabledtext' => 'Vos pouede pas mandar des mèssâjos a d’ôtros utilisators sur ceti vouiqui', +'noemailtitle' => 'Dèstinatèro sen adrèce èlèctronica', +'noemailtext' => 'Ceti utilisator at pas spècefiâ una adrèce èlèctronica valida.', +'nowikiemailtitle' => 'Gins de mèssageria èlèctronica ôtorisâ', +'nowikiemailtext' => 'Ceti utilisator at chouèsi de pas recêvre de mèssâjo de la pârt d’ôtros utilisators.', +'email-legend' => 'Mandar un mèssâjo a un ôtro utilisator de {{SITENAME}}', +'emailfrom' => 'Èxpèdior :', +'emailto' => 'Dèstinatèro :', +'emailsubject' => 'Sujèt :', +'emailmessage' => 'Mèssâjo :', +'emailsend' => 'Mandar', +'emailccme' => 'Mè mandar per mèssageria èlèctronica una copia de mon mèssâjo.', +'emailccsubject' => 'Copia de voutron mèssâjo a $1 : $2', +'emailsent' => 'Mèssâjo mandâ', +'emailsenttext' => 'Voutron mèssâjo at étâ mandâ per mèssageria èlèctronica.', +'emailuserfooter' => 'Ceti mèssâjo at étâ mandâ per « $1 » a « $2 » per la fonccion « Lui mandar un mèssâjo » de {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'At lèssiê un mèssâjo sistèmo.', +'usermessage-editor' => 'Mèssagiér du sistèmo', # Watchlist 'watchlist' => 'Lista de survelyence', 'mywatchlist' => 'Lista de survelyence', -'watchlistfor' => "(por '''$1''')", +'watchlistfor2' => 'Por $1 $2', 'nowatchlist' => 'Voutra lista de survelyence contint gins d’èlèment.', 'watchlistanontext' => 'Vos volyéd $1 por fâre vêre ou changiér los èlèments de voutra lista de survelyence.', 'watchnologin' => 'Pas branchiê', @@ -2211,6 +2252,9 @@ Vos pouede asse-ben tornar inicialisar los drapéls de notificacion por totes le Voutron sistèmo de notificacion de {{SITENAME}} -- +Por changiér los paramètres de notificacion per mèssageria èlèctronica, visitâd +{{fullurl:{{#special:Preferences}}}} + Por changiér los paramètres de voutra lista de survelyence, visitâd {{fullurl:{{#special:Watchlist}}/edit}} @@ -2272,7 +2316,10 @@ Lo dèrriér changement de la pâge at étâ fêt per [[User:$3|$3]] ([[User tal 'revertpage-nouser' => 'Rèvocacion des changements per (nom d’utilisator suprimâ) a la dèrriére vèrsion per [[User:$1|$1]]', 'rollback-success' => 'Rèvocacion des changements fêts per $1 ; rètablissement de la dèrriére vèrsion per $2.', -'sessionfailure' => 'Voutra sèance de branchement semble avêr des problèmos ; + +# Edit tokens +'sessionfailure-title' => 'Èrror de sèance', +'sessionfailure' => 'Voutra sèance de branchement semble avêr des problèmos ; cela accion at étâ anulâ en prèvencion d’un piratâjo de sèance. Volyéd clicar dessus « Devant », rechargiér la pâge de yô que vos vegnéd, et pués tornar èprovar.', @@ -2409,19 +2456,23 @@ $1', 'month' => 'Dês lo mês (et devant) :', 'year' => 'Dês l’an (et devant) :', -'sp-contributions-newbies' => 'Fâre vêre ren que les contribucions ux novéls utilisators', -'sp-contributions-newbies-sub' => 'Permié los comptos novéls', -'sp-contributions-newbies-title' => 'Contribucions d’utilisators permié los comptos novéls', -'sp-contributions-blocklog' => 'jornal des blocâjos', -'sp-contributions-deleted' => 'contribucions suprimâs', -'sp-contributions-logs' => 'jornals', -'sp-contributions-talk' => 'discutar', -'sp-contributions-userrights' => 'administrar los drêts d’utilisator', -'sp-contributions-blocked-notice' => 'Ceti utilisator est ora blocâ. +'sp-contributions-newbies' => 'Fâre vêre ren que les contribucions ux novéls utilisators', +'sp-contributions-newbies-sub' => 'Permié los comptos novéls', +'sp-contributions-newbies-title' => 'Contribucions d’utilisators permié los comptos novéls', +'sp-contributions-blocklog' => 'jornal des blocâjos', +'sp-contributions-deleted' => 'contribucions suprimâs', +'sp-contributions-uploads' => 'tèlèchargements', +'sp-contributions-logs' => 'jornals', +'sp-contributions-talk' => 'discutar', +'sp-contributions-userrights' => 'administrar los drêts d’utilisator', +'sp-contributions-blocked-notice' => 'Ceti utilisator est ora blocâ. +La dèrriére entrâ du jornal des blocâjos est disponibla ce-desot :', +'sp-contributions-blocked-notice-anon' => 'Ceta adrèce IP est ora blocâ. La dèrriére entrâ du jornal des blocâjos est disponibla ce-desot :', -'sp-contributions-search' => 'Rechèrchiér les contribucions', -'sp-contributions-username' => 'Adrèce IP ou ben nom d’utilisator :', -'sp-contributions-submit' => 'Rechèrchiér', +'sp-contributions-search' => 'Rechèrchiér les contribucions', +'sp-contributions-username' => 'Adrèce IP ou ben nom d’utilisator :', +'sp-contributions-toponly' => 'Montrar ren que les novèles vèrsions', +'sp-contributions-submit' => 'Rechèrchiér', # What links here 'whatlinkshere' => 'Pâges liyês', @@ -2482,7 +2533,6 @@ Vêde la [[Special:IPBlockList|lista ux utilisators et a les adrèces IP blocâs 'ipb-edit-dropdown' => 'Changiér les rêsons de blocâjo', 'ipb-unblock-addr' => 'Dèblocar $1', 'ipb-unblock' => 'Dèblocar un compto utilisator ou ben una adrèce IP', -'ipb-blocklist-addr' => 'Blocâjos ègzistents por $1', 'ipb-blocklist' => 'Vêde los blocâjos ègzistents', 'ipb-blocklist-contribs' => 'Contribucions por $1', 'unblockip' => 'Dèblocar l’utilisator', @@ -2559,6 +2609,8 @@ Vos volyéd veriér vers voutron fornissor d’accès u Malyâjo ou ben voutra a Vos pouede pas fâre un compto.", 'cant-block-while-blocked' => 'Vos pouede pas blocar d’ôtros utilisators tant que vos éte blocâ.', 'cant-see-hidden-user' => 'L’utilisator que vos tâchiéd de blocar at ja étâ blocâ et cachiê. Pas èyent lo drêt hideuser, vos pouede pas vêre ou ben changiér lo blocâjo a l’utilisator.', +'ipbblocked' => 'Vos pouede pas blocar ou ben dèblocar d’ôtros utilisators, perce que vos éte vos-mémo blocâ', +'ipbnounblockself' => 'Vos éte pas ôtorisâ a vos dèblocar vos-mémo', # Developer tools 'lockdb' => 'Vèrrolyér la bâsa de balyês', @@ -2593,6 +2645,17 @@ Vos avéd la rèsponsabilitât de vos assurar que los lims continuont de pouenta Notâd que la pâge serat '''pas''' dèplaciê s’y at ja una pâge avouéc lo titro novél, a muens que cela dèrriére seye voueda ou ben seye ren qu’una redirèccion et que son historico des changements seye vouedo. Cen vôt dére que vos pouede renomar una pâge vers sa posicion d’origina se vos éd fêt una èrror, mas que vos pouede pas ècllafar una pâge ja ègzistenta. +'''ATENCION !''' +Cen pôt provocar un changement fôrt et emprèvu por una pâge sovent vua ; +assurâd-vos de nen avêr comprês les consèquences devant que continuar.", +'movepagetext-noredirectfixer' => "Utilisâd lo formulèro ce-desot por renomar una pâge, en dèplacient tot son historico vers lo novél nom. +Lo viely titro vindrat una pâge de redirèccion de vers lo titro novél. +Controlâd bien les [[Special:DoubleRedirects|redirèccions dobles]] ou ben [[Special:BrokenRedirects|câsses]]. +Vos avéd la rèsponsabilitât de vos assurar que los lims continuont de pouentar vers lor dèstinacion suposâ. + +Notâd que la pâge serat '''pas''' dèplaciê s’y at ja una pâge avouéc lo titro novél, a muens que cela dèrriére seye voueda ou ben seye ren qu’una redirèccion et que son historico des changements seye vouedo. +Cen vôt dére que vos pouede renomar una pâge vers sa posicion d’origina se vos éd fêt una èrror, mas que vos pouede pas ècllafar una pâge ja ègzistenta. + '''ATENCION !''' Cen pôt provocar un changement fôrt et emprèvu por una pâge sovent vua ; assurâd-vos de nen avêr comprês les consèquences devant que continuar.", @@ -2636,7 +2699,7 @@ Nen volyéd chouèsir un ôtro.', 'movelogpagetext' => 'Vê-que la lista de totes les pâges renomâs ou dèplaciês.', 'movesubpage' => 'Sot-pâge{{PLURAL:$1||s}}', 'movesubpagetext' => 'Cela pâge at $1 {{PLURAL:$1|sot-pâge montrâ|sot-pâges montrâs}} ce-desot.', -'movenosubpage' => 'Cela pâge at gins de sot-pâge.', +'movenosubpage' => 'Ceta pâge at gins de sot-pâge.', 'movereason' => 'Rêson :', 'revertmove' => 'rètablir', 'delete_and_move' => 'Suprimar et renomar', @@ -2653,6 +2716,7 @@ empossiblo de renomar una pâge sur lyé-méma.', 'immobile-source-page' => 'Cela pâge est pas renomâbla.', 'immobile-target-page' => 'Empossiblo de renomar la pâge vers cél titro.', 'imagenocrossnamespace' => 'Empossiblo de renomar un fichiér vers un èspâço de noms ôtro que « {{ns:file}} ».', +'nonfile-cannot-move-to-file' => 'Empossiblo de renomar quârque-ren d’ôtro qu’un fichiér vers l’èspâço de noms « {{ns:file}} ».', 'imagetypemismatch' => 'La novèla èxtension de cél fichiér corrèspond pas a son tipo.', 'imageinvalidfilename' => 'Lo nom du fichiér ciba est fôx', 'fix-double-redirects' => 'Betar a jorn les redirèccions que pouentont vers lo titro originâl', @@ -2733,6 +2797,7 @@ Sôvâd-lo sur voutron ordenator et pués tèlèchargiéd-lo ique.', 'importstart' => 'Importacion de les pâges...', 'import-revision-count' => '$1 vèrsion{{PLURAL:$1||s}}', 'importnopages' => 'Gins de pâge a importar.', +'imported-log-entries' => '$1 entrâ{{PLURAL:$1||s}} du jornal importâ{{PLURAL:$1||s}}.', 'importfailed' => 'Falyita de l’importacion : $1', 'importunknownsource' => 'Tipo de la sôrsa a importar encognu', 'importcantopen' => 'Empossiblo d’uvrir lo fichiér a importar', @@ -2807,13 +2872,13 @@ Portant, vos en pouede vêre lo tèxto sôrsa.', 'tooltip-feed-atom' => 'Flux Atom por ceta pâge', 'tooltip-t-contributions' => 'Vêre la lista de les contribucions a ceti utilisator', 'tooltip-t-emailuser' => 'Mandar un mèssâjo a ceti utilisator', -'tooltip-t-upload' => 'Tèlèchargiér una émâge ou ben un fichiér multimèdia sur lo sèrvor', +'tooltip-t-upload' => 'Tèlèchargiér des fichiérs', 'tooltip-t-specialpages' => 'Lista de totes les pâges spèciâles', 'tooltip-t-print' => 'Vèrsion emprimâbla de ceta pâge', 'tooltip-t-permalink' => 'Lim fixo de vers ceta vèrsion de la pâge', 'tooltip-ca-nstab-main' => 'Vêre la pâge de contegnu', 'tooltip-ca-nstab-user' => 'Vêre la pâge utilisator', -'tooltip-ca-nstab-media' => 'Vêre la pâge du fichiér multimèdia', +'tooltip-ca-nstab-media' => 'Vêre la pâge de mèdia', 'tooltip-ca-nstab-special' => 'O est una pâge spèciâla, vos la pouede pas changiér.', 'tooltip-ca-nstab-project' => 'Vêre la pâge du projèt', 'tooltip-ca-nstab-image' => 'Vêre la pâge du fichiér', @@ -2832,6 +2897,8 @@ Portant, vos en pouede vêre lo tèxto sôrsa.', 'tooltip-rollback' => '« Rèvocar » anule en yon clic lo ou ben los changement(s) de ceta pâge per son dèrriér contributor.', 'tooltip-undo' => '« Dèfâre » rèvoque ceti changement et ôvre la fenétra d’èdicion en fôrma de prèvisualisacion. Pèrmèt de rètablir la vèrsion devant et pués d’apondre una rêson dens la bouèta de rèsumâ.', +'tooltip-preferences-save' => 'Encartar les prèferences', +'tooltip-summary' => 'Buchiéd un côrt rèsumâ', # Stylesheets 'common.css' => '/* Lo code CSS betâ ique serat aplicâ a tôs los habelyâjos. */', @@ -2964,14 +3031,17 @@ Se vos l’ègzécutâd, voutron sistèmo pôt étre compromês.", 'imagemaxsize' => "Format lo ples grant de les émâges :
    ''(por les pâges de dèscripcion d’émâges)''", 'thumbsize' => 'Talye de la figura :', 'widthheightpage' => '$1 × $2, $3 pâge{{PLURAL:$3||s}}', -'file-info' => '(Talye du fichiér : $1, tipo MIME : $2)', -'file-info-size' => '($1 × $2 pixèls, talye du fichiér : $3, tipo MIME : $4)', +'file-info' => 'Talye du fichiér : $1, tipo MIME : $2', +'file-info-size' => '$1 × $2 pixèls, talye du fichiér : $3, tipo MIME : $4', 'file-nohires' => 'Gins de rèsolucion ples hôta disponibla.', -'svg-long-desc' => '(Fichiér SVG, rèsolucion de $1 × $2 pixèls, talye : $3)', +'svg-long-desc' => 'Fichiér SVG, rèsolucion de $1 × $2 pixèls, talye : $3', 'show-big-image' => 'Émâge en rèsolucion ples hôta', 'show-big-image-thumb' => 'Talye de ceti apèrçu : $1 × $2 pixèls', 'file-info-gif-looped' => 'en boclla', 'file-info-gif-frames' => '$1 émâge{{PLURAL:$1||s}}', +'file-info-png-looped' => 'en boclla', +'file-info-png-repeat' => 'jouyê $1 côp{{PLURAL:$1||s}}', +'file-info-png-frames' => '$1 émâge{{PLURAL:$1||s}}', # Special:NewFiles 'newimages' => 'Galerie des novéls fichiérs', @@ -3127,6 +3197,7 @@ Los ôtros champs seront cachiês per dèfôt. 'exif-gpsareainformation' => 'Nom de la zona GPS', 'exif-gpsdatestamp' => 'Dâta GPS', 'exif-gpsdifferential' => 'Corrèccion difèrencièla GPS', +'exif-objectname' => 'Titro côrt', # EXIF attributes 'exif-compression-1' => 'Pas comprèssâ', @@ -3289,48 +3360,77 @@ Los ôtros champs seront cachiês per dèfôt. 'limitall' => 'tôs', # E-mail address confirmation -'confirmemail' => 'Confirmar l’adrèce èlèctronica', -'confirmemail_noemail' => 'Vos éd pas dèfeni una adrèce èlèctronica valida dens voutres [[Special:Preferences|prèferences]].', -'confirmemail_text' => '{{SITENAME}} at fôta du contrôlo de voutra adrèce èlèctronica devant que povêr utilisar tota fonccion de mèssageria. +'confirmemail' => 'Confirmar l’adrèce èlèctronica', +'confirmemail_noemail' => 'Vos éd pas dèfeni una adrèce èlèctronica valida dens voutres [[Special:Preferences|prèferences]].', +'confirmemail_text' => '{{SITENAME}} at fôta du contrôlo de voutra adrèce èlèctronica devant que povêr utilisar tota fonccion de mèssageria. Utilisâd lo boton ce-desot por mandar un mèssâjo de confirmacion a voutra adrèce. Lo mèssâjo encllurat un lim que contint un code a usâjo solèt et limitâ dens lo temps ; chargiéd cél lim dens voutron navigator por confirmar que voutra adrèce èlèctronica est valida.', -'confirmemail_pending' => 'Un code de confirmacion vos at ja étâ mandâ per mèssageria èlèctronica ; +'confirmemail_pending' => 'Un code de confirmacion vos at ja étâ mandâ per mèssageria èlèctronica ; se vos vegnéd de fâre voutron compto, volyéd atendre doux-três menutes que lo mèssâjo arreve devant que demandar un code novél.', -'confirmemail_send' => 'Mandar un code de confirmacion', -'confirmemail_sent' => 'Mèssâjo de confirmacion mandâ.', -'confirmemail_oncreate' => 'Un code de confirmacion at étâ mandâ a voutra adrèce èlèctronica. +'confirmemail_send' => 'Mandar un code de confirmacion', +'confirmemail_sent' => 'Mèssâjo de confirmacion mandâ.', +'confirmemail_oncreate' => 'Un code de confirmacion at étâ mandâ a voutra adrèce èlèctronica. Cél code est pas nècèssèro por sè branchiér, mas vos lo devréd balyér por activar tota fonccionalitât liyê a la mèssageria èlèctronica sur ceti vouiqui.', -'confirmemail_sendfailed' => '{{SITENAME}} vos at pas possu mandar lo mèssâjo de confirmacion. +'confirmemail_sendfailed' => '{{SITENAME}} vos at pas possu mandar lo mèssâjo de confirmacion. Volyéd controlar que voutra adrèce èlèctronica contint gins de caractèro dèfendu. Lo programo d’èxpèdicion de mèssâjo at retornâ ceta endicacion : $1', -'confirmemail_invalid' => 'Code de confirmacion fôx. +'confirmemail_invalid' => 'Code de confirmacion fôx. Ceti at pôt-étre èxpirâ.', -'confirmemail_needlogin' => 'Vos vos dête $1 por confirmar voutra adrèce èlèctronica.', -'confirmemail_success' => 'Voutra adrèce èlèctronica at étâ confirmâ. +'confirmemail_needlogin' => 'Vos vos dête $1 por confirmar voutra adrèce èlèctronica.', +'confirmemail_success' => 'Voutra adrèce èlèctronica at étâ confirmâ. Ora, vos vos pouede [[Special:UserLogin|branchiér]] et profitar du vouiqui.', -'confirmemail_loggedin' => 'Ora, voutra adrèce èlèctronica est confirmâ.', -'confirmemail_error' => 'Un problèmo est arrevâ pendent l’encartâjo de voutra confirmacion.', -'confirmemail_subject' => 'Confirmacion d’adrèce èlèctronica por {{SITENAME}}', -'confirmemail_body' => 'Quârqu’un, probâblament vos, avouéc l’adrèce IP $1, -at encartâ un compto « $2 » avouéc ceta adrèce èlèctronica sur lo seto {{SITENAME}}. +'confirmemail_loggedin' => 'Ora, voutra adrèce èlèctronica est confirmâ.', +'confirmemail_error' => 'Un problèmo est arrevâ pendent l’encartâjo de voutra confirmacion.', +'confirmemail_subject' => 'Confirmacion d’adrèce èlèctronica por {{SITENAME}}', +'confirmemail_body' => 'Quârqu’un, probâblament vos, avouéc l’adrèce IP $1, +at encartâ un compto « $2 » avouéc cela adrèce èlèctronica dessus {{SITENAME}}. Por confirmar que cél compto est franc a vos et por activar les fonccions de mèssageria dessus {{SITENAME}}, -volyéd siuvre ceti lim dens voutron navigator : +volyéd uvrir ceti lim dens voutron navigator : + +$3 + +Se vos éd *pas* encartâ lo compto, siude ceti lim +por anular la confirmacion de l’adrèce èlèctronica : + +$5 + +Cél code de confirmacion èxpirerat lo $4.', +'confirmemail_body_changed' => 'Quârqu’un, probâblament vos, avouéc l’adrèce IP $1, +at changiê l’adrèce èlèctronica du compto « $2 » a cela adrèce dessus {{SITENAME}}. + +Por confirmar que cél compto est franc a vos et por +reactivar les fonccions de mèssageria dessus {{SITENAME}}, +volyéd uvrir ceti lim dens voutron navigator : $3 -Se vos éd *pas* encartâ cél compto, uvréd pas ceti lim ; -vos pouede siuvre l’ôtro lim ce-desot por anular la -confirmacion de voutra adrèce èlèctronica : +Se lo compto est *pas* a vos, siude ceti lim +por anular la confirmacion de l’adrèce èlèctronica : $5 Cél code de confirmacion èxpirerat lo $4.', -'confirmemail_invalidated' => 'Confirmacion de l’adrèce èlèctronica anulâ', -'invalidateemail' => 'Anular la confirmacion de l’adrèce èlèctronica', +'confirmemail_body_set' => 'Quârqu’un, probâblament vos, avouéc l’adrèce IP $1, +at changiê l’adrèce èlèctronica du compto « $2 » a cela adrèce dessus {{SITENAME}}. + +Por confirmar que cél compto est franc a vos et por +reactivar les fonccions de mèssageria dessus {{SITENAME}}, +volyéd uvrir ceti lim dens voutron navigator : + +$3 + +Se lo compto est *pas* a vos, siude ceti lim +por anular la confirmacion de l’adrèce èlèctronica : + +$5 + +Cél code de confirmacion èxpirerat lo $4.', +'confirmemail_invalidated' => 'Confirmacion de l’adrèce èlèctronica anulâ', +'invalidateemail' => 'Anular la confirmacion de l’adrèce èlèctronica', # Scary transclusion 'scarytranscludedisabled' => '[La transcllusion entèrvouiqui est dèsactivâ]', @@ -3377,6 +3477,7 @@ Volyéd confirmar que vos voléd franc refâre cela pâge.", 'table_pager_first' => 'Premiére pâge', 'table_pager_last' => 'Dèrriére pâge', 'table_pager_limit' => 'Montrar $1 èlèment{{PLURAL:$1||s}} per pâge', +'table_pager_limit_label' => 'Rèsultats per pâge :', 'table_pager_limit_submit' => 'Listar', 'table_pager_empty' => 'Gins de rèsultat', @@ -3499,8 +3600,9 @@ Vos pouede asse-ben utilisar l’[[Special:Watchlist/edit|èditor normal]].', 'version-specialpages' => 'Pâges spèciâles', 'version-parserhooks' => 'Grèfons du parsor', 'version-variables' => 'Variâbles', +'version-skins' => 'Habelyâjos', 'version-other' => 'De totes sôrtes', -'version-mediahandlers' => 'Maneyors de fichiérs multimèdia', +'version-mediahandlers' => 'Maneyors de mèdia', 'version-hooks' => 'Grèfons', 'version-extension-functions' => 'Fonccions d’èxtension de dedens', 'version-parser-extensiontags' => 'Balises d’èxtension du parsor', @@ -3511,6 +3613,13 @@ Vos pouede asse-ben utilisar l’[[Special:Watchlist/edit|èditor normal]].', 'version-version' => '(Vèrsion $1)', 'version-svn-revision' => '(v$2)', 'version-license' => 'Licence', +'version-poweredby-credits' => "Ceti vouiqui fonccione grâce a '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'ôtros', +'version-license-info' => 'MediaWiki est una programeria abada ; cen vôt dére que vos la pouede tornar distribuar et / ou changiér d’aprés los tèrmos de la Licence Publica G·ènèrala GNU coment publeyê per la Free Software Foundation ; seye la vèrsion 2 de la Licence, ou ben (a voutron chouèx) tota novèla vèrsion. + +MediaWiki est distribuâ dens l’èsperance que serat utila, mas SEN GINS DE GARANTIA ; sen mémo la garantia emplicita de COMÈRCIALISACION ou ben d’ADAPTACION A UN USÂJO PARTICULIÉR. Vêde la Licence Publica G·ènèrala GNU por més de dètalys. + +Vos devriâd avêr reçu una [{{SERVER}}{{SCRIPTPATH}}/COPYING copia de la Licence Publica G·ènèrala GNU] avouéc cél programo, ôtrament, ècrîde a la « Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA » ou ben [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html liéséd-la en legne].', 'version-software' => 'Programeries enstalâs', 'version-software-product' => 'Marchandie', 'version-software-version' => 'Vèrsion', @@ -3545,7 +3654,7 @@ Buchiéd lo nom du fichiér sen lo prèfixo « {{ns:file}}: ».', 'specialpages-group-other' => 'Ôtres pâges spèciâles', 'specialpages-group-login' => 'Branchement / encartâjo', 'specialpages-group-changes' => 'Dèrriérs changements et jornals', -'specialpages-group-media' => 'Rapôrts et tèlèchargements de fichiérs multimèdia', +'specialpages-group-media' => 'Rapôrts et tèlèchargements de fichiérs mèdia', 'specialpages-group-users' => 'Utilisators et drêts apondus', 'specialpages-group-highuse' => 'Pâges d’usâjo important', 'specialpages-group-pages' => 'Listes de pâges', @@ -3581,6 +3690,15 @@ Buchiéd lo nom du fichiér sen lo prèfixo « {{ns:file}}: ».', 'tags-edit' => 'changiér', 'tags-hitcount' => '$1 changement{{PLURAL:$1||s}}', +# Special:ComparePages +'comparepages' => 'Comparar des pâges', +'compare-selector' => 'Comparar les vèrsions de les pâges', +'compare-page1' => 'Pâge 1', +'compare-page2' => 'Pâge 2', +'compare-rev1' => 'Vèrsion 1', +'compare-rev2' => 'Vèrsion 2', +'compare-submit' => 'Comparar', + # Database error messages 'dberr-header' => 'Ceti vouiqui at un problèmo', 'dberr-problems' => 'Dèsolâ ! Ceti seto rencontre des dificultâts tècniques.', @@ -3597,8 +3715,13 @@ Buchiéd lo nom du fichiér sen lo prèfixo « {{ns:file}}: ».', 'htmlform-float-invalid' => 'La valor que vos éd spècefiâ est pas un nombro.', 'htmlform-int-toolow' => 'La valor que vos éd spècefiâ est en-desot du muens de $1', 'htmlform-int-toohigh' => 'La valor que vos éd spècefiâ est en-dessus du més de $1', +'htmlform-required' => 'Ceta valor est nècèssèra', 'htmlform-submit' => 'Sometre', 'htmlform-reset' => 'Dèfâre los changements', 'htmlform-selectorother-other' => 'Ôtro', +# SQLite database support +'sqlite-has-fts' => '$1 avouéc rechèrche en tèxto complèt recognua', +'sqlite-no-fts' => '$1 sen rechèrche en tèxto complèt recognua', + ); diff --git a/languages/messages/MessagesFrr.php b/languages/messages/MessagesFrr.php index 22bccddd..34883af2 100644 --- a/languages/messages/MessagesFrr.php +++ b/languages/messages/MessagesFrr.php @@ -15,6 +15,8 @@ $fallback = 'de'; +$linkTrail = '/^([a-zäöüßåāđē]+)(.*)$/sDu'; + $messages = array( # User preference toggles 'tog-underline' => 'Linke unerstrike:', @@ -31,8 +33,7 @@ $messages = array( 'tog-editsection' => 'Ferbininge tun wisen foon änkelte oufsnaase', 'tog-editsectiononrightclick' => 'Änkelte stöögne ma ruchts kliken beårbe (brükt JavaScript)', 'tog-showtoc' => 'Wis en inhåltsferteeknis for side ma mäs ås trii ouerschrafte', -'tog-rememberpassword' => 'aw diheere komputer foon duur önjmälde', -'tog-editwidth' => 'Önjjeewefälj ütwide, am di hiilj bilschirm üttufeelen', +'tog-rememberpassword' => 'Aw diheere komputer foon duur önjmälde (maksimool for $1 {{PLURAL:$1|däi|deege}})', 'tog-watchcreations' => 'Seelew måågede side automatisch bekiike', 'tog-watchdefault' => 'Seelew änrede side automaatisch bekiike', 'tog-watchmoves' => 'Seelew ferschääwene side automaatisch bekiike', @@ -48,8 +49,9 @@ $messages = array( 'tog-shownumberswatching' => 'Wis di tål foon wåchende brükere', 'tog-oldsig' => 'Forbekiik foon e aktuäle signatuur:', 'tog-fancysig' => 'Signatuur behoonle ås wikitäkst', -'tog-externaleditor' => 'Gewöönlik äksterne ediitor for färsjoonsunerschiise brüke (bloot for ekspärte, deer mönje spetsjäle önjstalinge aw di äine kompjuuter fornümen wårde)', -'tog-externaldiff' => 'Gewöönlik äkstern program for färsjoonsunerschiise brüke (bloot for ekspärte, deer mönje spetsjäle önjstalinge aw di äine kompjuuter fornümen wårde)', +'tog-externaleditor' => 'Gewöönlik äksterne ediitor for färsjoonsunerschiise brüke (bloot for ekspärte, deer mönje spetsjäle önjstalinge aw di äine kompjuuter fornümen wårde +[http://www.mediawiki.org/wiki/Manual:External_editors Mör informatsjoone.])', +'tog-externaldiff' => 'Gewöönlik äkstern program for färsjoonsunerschiise brüke (bloot for ekspärte, deer mönje spetsjäle önjstalinge aw di äine kompjuuter fornümen wårde[http://www.mediawiki.org/wiki/Manual:External_editors Mör informatsjoone.])', 'tog-showjumplinks' => '"Schafte tu"-ferbininge aktiwiire', 'tog-uselivepreview' => 'Live-forbekiik ferwiinje (brükt JavaScript) (äksperimentäl)', 'tog-forceeditsummary' => 'Woorschoue, wan bai dåt spiikern jü tuhuupefooting breecht', @@ -178,31 +180,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Stuk haanetufoue', -'vector-action-delete' => 'Strike', -'vector-action-move' => 'Ferschüwe', -'vector-action-protect' => 'Sääkere', -'vector-action-undelete' => 'Wi mååge', -'vector-action-unprotect' => 'Frijeewe', -'vector-namespace-category' => 'Kategorii', -'vector-namespace-help' => 'Heelpsid', -'vector-namespace-image' => 'Dootäi', -'vector-namespace-main' => 'Sid', -'vector-namespace-media' => 'Meediesid', -'vector-namespace-mediawiki' => 'Berucht', -'vector-namespace-project' => 'Prujäktsid', -'vector-namespace-special' => 'Spetsjåålsid', -'vector-namespace-talk' => 'Diskusjoon', -'vector-namespace-template' => 'Forlååge', -'vector-namespace-user' => 'Brükersid', -'vector-view-create' => 'Mååge', -'vector-view-edit' => 'Beårbe', -'vector-view-history' => 'Dootäifärsjoone', -'vector-view-view' => 'Lees', -'vector-view-viewsource' => 'Kwältäkst önjkiike', -'actions' => 'Aksjoone', -'namespaces' => 'Noomerüme', -'variants' => 'Fariante', +'vector-action-addsection' => 'Stuk haanetufoue', +'vector-action-delete' => 'Strike', +'vector-action-move' => 'Ferschüwe', +'vector-action-protect' => 'Sääkere', +'vector-action-undelete' => 'Wi mååge', +'vector-action-unprotect' => 'Frijeewe', +'vector-simplesearch-preference' => 'Erwiderde säkforsliike aktiwiire (bloot vector)', +'vector-view-create' => 'Mååge', +'vector-view-edit' => 'Beårbe', +'vector-view-history' => 'Dootäifärsjoone', +'vector-view-view' => 'Lees', +'vector-view-viewsource' => 'Kwältäkst önjkiike', +'actions' => 'Aksjoone', +'namespaces' => 'Noomerüme', +'variants' => 'Fariante', 'errorpagetitle' => 'Fäägel', 'returnto' => 'Tubääg tu jü side $1.', @@ -432,7 +424,8 @@ Ferjees ai, din [[Special:Preferences|{{SITENAME}}-önjstalinge]] önjtupååsen 'yourname' => 'Brükernoome:', 'yourpassword' => 'Pååsuurd:', 'yourpasswordagain' => 'Schriw pååsuurd nuch iinjsen:', -'remembermypassword' => 'aw diheere komputer foon duur önjmälde', +'remembermypassword' => 'Aw diheere komputer foon duur önjmälde (maksimool for {{PLURAL:$1|däi|deege}})', +'securelogin-stick-https' => 'Eefter önjmälding ma HTTPS ferbünen bliwe', 'yourdomainname' => 'Din domain:', 'externaldberror' => 'Önjtwider deer läit en fäägel bai jü äkstärn autentifisiiring for, unti dü möist din äkstärn brükerkonto äi aktualisiire.', 'login' => 'Önjmälde', @@ -449,6 +442,7 @@ Ferjees ai, din [[Special:Preferences|{{SITENAME}}-önjstalinge]] önjtupååsen 'gotaccount' => "Dü hääst ål en brükerkonto? '''$1'''.", 'gotaccountlink' => 'Önjmälde', 'createaccountmail' => 'ouer E-mail', +'createaccountreason' => 'Grün:', 'badretype' => 'Da biise pååsuurde stime ai oueriinj.', 'userexists' => 'Dideer brükernoome as ål ferjääwen. Wees sü gödj en ouderen tu kiisen.', 'loginerror' => 'Fäägel bai önjmälding', @@ -554,9 +548,12 @@ Möölikerwise heest dü din pååsuurd ål ma erfolch änred heest unti en nai 'showlivepreview' => 'Live-forkiik', 'showdiff' => 'Änringe wise', 'anoneditwarning' => "Dü beårbest jüdeer sid ünönjmälded. Wan dü spikerst, wård din aktuäle IP-adräs önj e fesjoonshistoori aptiikned än as deerma for åltens '''ålgemiin''' sichtboor.", +'anonpreviewwarning' => "''Dü bast ai önjmälded. Bai t spiikern wårt din IP-adräs önj e fersjoonshistoori awtiikned.''", 'missingsummary' => "'''Haanewising:\"' Dü heest niinj tuhuupefooting önjjääwen. Wan dü wider aw \"Sid spiikre\" klikst, wårt din änring suner tuhuupefooting ouernümen.", 'missingcommenttext' => 'Jeew en tuhuupefooting önj.', +'missingcommentheader' => "'''PÅÅS AW:''' dü heest niinj keer/ouerschraft önjjääwen. +Wan dü wider aw \"{{int:savearticle}}\" klakst, wårt din beårbing suner ouerschaft spiikerd.", 'summary-preview' => 'Forlök foon jü tuhuupfootingssid:', 'subject-preview' => 'Forkiik foon dåt subjäkt:', 'blockedtitle' => 'Brüker as späred', @@ -598,7 +595,7 @@ For informasjoon füliet di leeste üttooch üt dåt benjüterspär-logbök:', '''Dåt as nuch ai spiikerd!'''", 'userjspreview' => "'''Påås aw dåt dü bloot din brüker JavaScript präiwest/forbekiikest.''' '''Dåt as nuch ai spiikerd!'''", -'userinvalidcssjstitle' => "''Woorschauing:''' Skin \"\$1\"jeeft dåt ai. Betånk, dåt brükerspetsiifische .css- än .js-side ma en latj bökstääw önjfånge mönje, ålsü biispelswise ''{{ns:user}}:Münsterkjarl/monobook.css'' önj stää foon ''{{ns:user}}:Münsterkjarl/Monobook.css''.", +'userinvalidcssjstitle' => "''Woorschauing:''' Skin \"\$1\"jeeft dåt ai. Betånk, dåt brükerspetsiifische .css- än .js-side ma en latj bökstääw önjfånge mönje, ålsü biispelswise ''{{ns:user}}:Münsterkjarl/vector.css'' önj stää foon ''{{ns:user}}:Münsterkjarl/Vector.css''.", 'updated' => '(Änred)', 'note' => "'''Påås aw:'''", 'previewnote' => "'''Dåtheer as bloot en forlök, jü sid wörd nuch ai spikred!'''", @@ -615,8 +612,6 @@ Wan dü spiikerst, wårde åle naiere färsjoone ouerschraawen.", 'yourdiff' => 'Ferschääle', 'copyrightwarning' => "''' Hål kopiir niinj webside, da ai din äine san, brük niinj uurhääwerruchtlik schütsede wärke suner ferloof foon di uurhääwer!'''
    Dü jeefst üs heerma dan tusååge, dåt dü di täkst '''seelew ferfooted''' hääst, dåt di täkst ålgemiingödj '''(public domain)''' as, unti dåt di '''uurhääwer''' sin '''tustiming''' jääwen heet. For di fål jüdeer täkst ål ouersweer ütdänj wörd, wis hål aw jü diskusjoonssid deeraw haane. Beåcht hål, dåt åle {{SITENAME}}-tujeefte automaatisch uner jü „$2“ stönje (sii $1 for detaile). For di fål dü ai mååst, dåt diin årbe heer foon oudere feränred än språåt wårt, dan kröög ai aw „sid spikre“.", -'longpagewarning' => "'''Woorschauing:''' Jüheer sid as $1 KB grut; hu browsere köön probleeme heewe, side tu beårben, da gruter san as 32 KB. - Ouerläi hål, weer en ouddiiling foon e sid önj latjere oufsnaase möölik as.", 'longpageerror' => "'''FÄÄGEL: Di täkst, di dü tu spiikren ferseechst, as $11 KB grut. Dåt as gruter ås dåt tuleet maksimum foon $2 KB - spiikren ai möölik.'''", 'readonlywarning' => "'''PÅÅS AW: Jü dootenbånk wörd for unerhult spärd, sü dåt din änringe tutids ai spiikerd wårde koone. Wees sü gödj än sääkre di täkst lokool aw din kompjuuter än fersäk tu n lääsern tidpunkt, da änringe tu ouerdreegen.'''. @@ -711,7 +706,7 @@ Grün foon jü späre: ''$2''", 'history-feed-empty' => 'Jü önjfordied sid bestoont ai. Flicht wörd jü sleeked unti ferschääwen. [[Special:Search|Döörsäk]] {{SITENAME}} aw pååsende naie side.', # Revision deletion -'rev-deleted-comment' => '(Beårbingskomäntoor wächnümen)', +'rev-deleted-comment' => '(Tuhuupefooting wächnümen)', 'rev-deleted-user' => '(Brükernoome wächhååld)', 'rev-deleted-event' => '(Logbökaksjoon wächhååld)', 'rev-deleted-user-contribs' => '[Benjüternoome unti IP-adräs wächhååld - beårbing üt baidråge ferstäägen]', @@ -775,6 +770,8 @@ $1", 'logdelete-failure' => "'''Logböksachtboorhäid köö ai änred wårde:''' $1", 'revdel-restore' => 'sichtboorhäid änre', +'revdel-restore-deleted' => 'sleekede färsjoone', +'revdel-restore-visible' => 'sachtboore färsjoone', 'pagehist' => 'Färsjoonshistoori', 'deletedhist' => 'Straagene färsjoone', 'revdelete-content' => 'wat önj e side stoont', @@ -829,6 +826,7 @@ Stal sääker, dåt jü färsjoonshistoori foon en sid histoorisch koräkt as.', # Diffs 'history-title' => 'Färsjoonshistoori foon "$1"', 'difference' => '(Ferschääl twasche Färsjoone)', +'difference-multipage' => '(Ferschääl twasche side)', 'lineno' => 'Ra $1:', 'compareselectedversions' => 'Wäälde färsjoone ferglike', 'showhideselectedversions' => 'Wäälde färsjoone wise/fersteege', @@ -856,6 +854,8 @@ Stal sääker, dåt jü färsjoonshistoori foon en sid histoorisch koräkt as.', 'searchhelp-url' => 'Help:Inhåltsfertiiknis', 'searchprofile-articles' => 'Artiikle', 'searchprofile-project' => 'Heelp än Prujäktside', +'searchprofile-images' => 'Multimedia', +'searchprofile-advanced' => 'Ütwided', 'searchprofile-articles-tooltip' => 'Säk önj $1', 'searchprofile-project-tooltip' => 'Säk önj $1', 'searchprofile-advanced-tooltip' => 'Onj mör noomerüme säke', @@ -894,12 +894,40 @@ Stal sääker, dåt jü färsjoonshistoori foon en sid histoorisch koräkt as.', 'qbsettings-none' => 'Niinj', # Preferences page -'preferences' => 'Önjstalinge', -'mypreferences' => 'Önjstalinge', -'allowemail' => 'E-Mail foon oudere brükere tulätje', -'prefs-searchoptions' => 'Säkmöölikhäide', -'prefs-namespaces' => 'Noomerüme', -'defaultns' => 'Ouers säk önj jüheer noomerüme:', +'preferences' => 'Önjstalinge', +'mypreferences' => 'Önjstalinge', +'prefsnologin' => 'Ai önjmälded', +'changepassword' => 'Pååsuurd änre', +'skin-preview' => 'Forlök', +'prefs-math' => 'TeX', +'prefs-personal' => 'Brüker dooten', +'prefs-rc' => 'Leeste änringe', +'prefs-watchlist-days-max' => 'Ai lunger as 7 deege', +'prefs-watchlist-edits-max' => 'Ai mör as 1000', +'prefs-misc' => 'Dit än dat', +'prefs-resetpass' => 'Pååsuurd änre', +'saveprefs' => 'Önjstalinge sääkere', +'localtime' => 'lokaal tid', +'timezoneregion-africa' => 'Afrikaa', +'timezoneregion-america' => 'Ameerikaa', +'timezoneregion-antarctica' => 'Antarktikaa', +'timezoneregion-arctic' => 'Arktis', +'timezoneregion-asia' => 'Aasien', +'timezoneregion-australia' => 'Austraalien', +'timezoneregion-europe' => 'Euroopa', +'allowemail' => 'E-Mail foon oudere brükere tulätje', +'prefs-searchoptions' => 'Säkmöölikhäide', +'prefs-namespaces' => 'Noomerüme', +'defaultns' => 'Ouers säk önj jüheer noomerüme:', +'default' => 'Forinstaling', +'prefs-files' => 'Dååtäie', +'email' => 'e-mail', +'prefs-signature' => 'Signatuur', +'prefs-advancedediting' => 'Ütwided möölikhäide', +'prefs-advancedrc' => 'Ütwided möölikhäide', +'prefs-advancedrendering' => 'Ütwided möölikhäide', +'prefs-advancedsearchoptions' => 'Ütwided möölikhäide', +'prefs-advancedwatchlist' => 'Ütwided möölikhäide', # Groups 'group-user' => 'Brükere', @@ -1042,7 +1070,6 @@ Stal sääker, dåt jü färsjoonshistoori foon en sid histoorisch koräkt as.', # Watchlist 'watchlist' => 'Eefterkiikliste', 'mywatchlist' => 'Eefterkiikliste', -'watchlistfor' => "(for '''$1''')", 'addedwatch' => 'Tu eefterkiiksid tubaifäiged', 'addedwatchtext' => 'Jü sid „[[:$1]]“ wörd tu din [[Special:Watchlist|eefterkiiklist]] tubaifäiged. @@ -1142,7 +1169,7 @@ Wan dü jü sid wider foon din eefterkiikliste wächhååle mååst, klik aw jü # Block/unblock 'blockip' => 'IP-adräs/brüker späre', 'ipboptions' => '2 stüne:2 hours,1 däi:1 day,3 deege:3 days,1 wääg:1 week,2 wääge:2 weeks,1 moune:1 month,3 moune:3 months,6 moune:6 months,1 iir:1 year,suner iinje:infinite', -'ipblocklist' => 'Spärd IP-adräse än brükernoome', +'ipblocklist' => 'Spärd brükere', 'expiringblock' => 'iinjet aw e $1 am e klook $2', 'blocklink' => 'späre', 'unblocklink' => 'frijeewe', @@ -1281,9 +1308,9 @@ Hål di '''naie''' tiitel uner '''muul''' önjdreege, deeruner jü ambenååming 'nextdiff' => 'Tu di näist färsjoons-unerschiis →', # Media information -'file-info-size' => '($1 × $2 pixele, dååtäigrutelse: $3, MIME-typ: $4)', +'file-info-size' => '$1 × $2 pixele, dååtäigrutelse: $3, MIME-typ: $4', 'file-nohires' => 'Niinj huuger apliising as deer.', -'svg-long-desc' => '(SVG-dåtäi, basisgrutelse: $1 × $2 pixel, dåtäigrutelse: $3)', +'svg-long-desc' => 'SVG-dåtäi, basisgrutelse: $1 × $2 pixel, dåtäigrutelse: $3', 'show-big-image' => 'Färsjon önj huuger apliising', 'show-big-image-thumb' => 'Grutelse foon jü forlök: $1 × $2 pixele', @@ -1330,7 +1357,14 @@ Deeraw föliende sidelinke önj dåtseelwi ra definiire ütnååme, önj di kont 'watchlisttools-edit' => 'normåål beårbe', 'watchlisttools-raw' => 'Listeformoot beårbe (import/äksport)', +# Special:Version +'version-software' => 'Instaliird software', +'version-software-version' => 'Färsjoon', + # Special:SpecialPages 'specialpages' => 'Spetsjåålside', +# HTML forms +'htmlform-selectorother-other' => 'Oudere', + ); diff --git a/languages/messages/MessagesFur.php b/languages/messages/MessagesFur.php index 1874a053..e2026e5d 100644 --- a/languages/messages/MessagesFur.php +++ b/languages/messages/MessagesFur.php @@ -113,7 +113,7 @@ $dateFormats = array( 'dmy both' => 'j "di" M Y "a lis" H:i', ); -$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' ); +$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' ); $messages = array( # User preference toggles @@ -128,8 +128,7 @@ $messages = array( 'tog-editsection' => 'Inserìs un leam [cambie] pe editazion veloç di une sezion', 'tog-editsectiononrightclick' => 'Modifiche une sezion fracant cul tast diestri
    sui titui des sezions (JavaScript)', 'tog-showtoc' => 'Mostre la tabele dai contignûts pes pagjinis cun plui di 3 sezions', -'tog-rememberpassword' => 'Visiti tes prossimis sessions', -'tog-editwidth' => 'Slargje il spazi de modifiche par jemplâ dut il visôr', +'tog-rememberpassword' => 'Visiti di me su chest sgarfadôr (par un massim di $1 {{PLURAL:$1|zornade|zornadis}})', 'tog-watchdefault' => 'Zonte in automatic lis pagjinis che o cambii inte liste di chês tignudis di voli', 'tog-minordefault' => 'Imposte come opzion predeterminade ducj i cambiaments come piçui', 'tog-previewontop' => 'Mostre anteprime parsore dal spazi pe modifiche', @@ -221,6 +220,7 @@ $messages = array( 'category-file-count' => '{{PLURAL:$2|Cheste categorie e conten dome un file, mostrât ca sot.|Cheste categorie e conten {{PLURAL:$1|un file, mostrât|$1 files, mostrâts}} ca sot, suntun totâl di $2.}}', 'category-file-count-limited' => 'Cheste categorie e conten {{PLURAL:$1|il file mostrât|i $1 files mostrâts}} ca sot.', 'listingcontinuesabbrev' => 'cont.', +'noindex-category' => 'Pagjinis no indicizadis', 'mainpagetext' => "'''MediaWiki e je stade instalade cun sucès.'''", @@ -246,24 +246,20 @@ $messages = array( 'faq' => 'Domandis plui frecuentis', # Vector skin -'vector-action-addsection' => 'Gnove sezion', -'vector-action-delete' => 'Elimine', -'vector-action-move' => 'Môf', -'vector-action-protect' => 'Protêç', -'vector-namespace-category' => 'Categorie', -'vector-namespace-image' => 'File', -'vector-namespace-main' => 'Pagjine', -'vector-namespace-mediawiki' => 'Messaç', -'vector-namespace-template' => 'Model', -'vector-namespace-user' => 'Pagjine dal utent', -'vector-view-create' => 'Cree', -'vector-view-edit' => 'Cambie', -'vector-view-history' => 'Cjale il storic', -'vector-view-view' => 'Lei', -'vector-view-viewsource' => 'Cjale risultive', -'actions' => 'Azions', -'namespaces' => 'Spazis dai nons', -'variants' => 'Variants', +'vector-action-addsection' => 'Gnove sezion', +'vector-action-delete' => 'Elimine', +'vector-action-move' => 'Môf', +'vector-action-protect' => 'Protêç', +'vector-action-undelete' => 'Recupere', +'vector-action-unprotect' => 'No stâ protezi', +'vector-view-create' => 'Cree', +'vector-view-edit' => 'Cambie', +'vector-view-history' => 'Cjale il storic', +'vector-view-view' => 'Lei', +'vector-view-viewsource' => 'Cjale risultive', +'actions' => 'Azions', +'namespaces' => 'Spazis dai nons', +'variants' => 'Variants', 'errorpagetitle' => 'Erôr', 'returnto' => 'Torne a $1.', @@ -420,7 +416,7 @@ La tô identitât e je stade creade. No stâ dismenteâti di gambiâ lis prefere 'yourname' => 'Non utent', 'yourpassword' => 'Peraule clâf', 'yourpasswordagain' => 'Torne a scrivile', -'remembermypassword' => 'Visiti di me', +'remembermypassword' => 'Visiti di me di une session a chê altre (fin a $1 {{PLURAL:$1|zornade|zornadis}})', 'yourdomainname' => 'Il to domini', 'login' => 'Jentre', 'nav-login-createaccount' => 'Regjistriti o jentre', @@ -436,6 +432,7 @@ La tô identitât e je stade creade. No stâ dismenteâti di gambiâ lis prefere 'gotaccount' => "Âstu za une identitât? '''$1'''.", 'gotaccountlink' => 'Jentre', 'createaccountmail' => 'par pueste eletroniche', +'createaccountreason' => 'Reson:', 'badretype' => 'Lis peraulis clâfs inseridis no son compagnis.', 'userexists' => 'Il non utent inserît al è za doprât. Sielç par plasê un non diferent.', 'loginerror' => 'Erôr te jentrade', @@ -506,7 +503,7 @@ Prime di ricevi cualsisei altri messaç di pueste, tu scugnis seguî lis istruzi # Edit pages 'summary' => 'Somari:', 'subject' => 'Argoment (intestazion):', -'minoredit' => 'Cheste al è un piçul cambiament', +'minoredit' => 'Chest al è un piçul cambiament', 'watchthis' => 'Ten di voli cheste pagjine', 'savearticle' => 'Salve la pagjine', 'preview' => 'Anteprime', @@ -549,6 +546,8 @@ La password par cheste identitât e pues jessi cambiade su la pagjine ''[[Specia 'noarticletext' => 'Par cumò nol è nuie in cheste pagjine. Tu puedis [[Special:Search/{{PAGENAME}}|cirî chest titul]] in altris pagjinis o [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cirî i regjistris leâts], o ben [{{fullurl:{{FULLPAGENAME}}|action=edit}} cambiâ cheste pagjine].', +'noarticletext-nopermission' => 'Par cumò nol è nuie in cheste pagjine. +Tu puedis [[Special:Search/{{PAGENAME}}|cirî chest titul]] in altris pagjinis o [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cirî i regjistris leâts].', 'userpage-userdoesnotexist' => 'La identitât "$1" no je di un utent regjistrât. Controle che tu vuelis pardabon creâ o modificâ cheste pagjine.', 'clearyourcache' => "'''Ocjo: dopo vê salvât, tu podaressis scugnî netâ la cache dal to sgarfadôr par viodi i cambiaments.''' Par '''Mozilla / Firefox / Safari''': frache ''Torne a cjamâ'' tignint jù ancje il tast des maiusculis, o se no frache ''Ctrl-F5'' o ''Ctrl-R'' (''Command-R'' su Mac); par '''Konqueror''': frache ''Reload'' o il tast ''F5''; par '''Opera''' al pues jessi necessari disvuedâ dal dut la cache doprant il menù ''Tools → Preferencis''; par '''Internet Explorer:''' ten fracât il tast ''Ctrl'' cuant che tu cjalcjis su ''Aggiorna'' o frache ''Ctrl-F5''.", 'updated' => '(Inzornât)', @@ -567,7 +566,6 @@ Tu varâs di inserî di gnûf i tiei cambiaments tal test esistint. 'copyrightwarning' => "Note: ducj i contribûts a {{SITENAME}} a si considerin come dâts fûr sot de licence $2 (cjale $1 pai detais). Se no tu vuelis che i tiei tescj a podedin jessi modificâts e tornâts a dâ fûr di ognidun cence limits, no stâ mandâju a {{SITENAME}}.
    Cun di plui, inviant il test tu declaris che tu âs scrit tu chest o tu lu âs copiât di une sorzint tal domini public o di une sorzint libare. '''NO STÂ MANDÂ MATERIÂL CUVIERT DAL DIRIT DI AUTÔR CENCE AUTORIZAZION!'''", -'longpagewarning' => "'''ATENZION: cheste pagjine e je grande $1 kilobytes; cualchi sgarfadôr al podarès vê problemis a modificâ pagjinis di 32 kb o plui grandis. Considere par plasê la pussibilitât di dividi la pagjine in sezions plui piçulis.'''", 'readonlywarning' => "'''ATENZION: La base di dâts e je blocade par vie de manutenzion, par cui no si podin salvâ lis modifichis par cumò. Par no pierdilis, tu puedis copiâ e tacâ il test inserît fin cumò e salvâlu intun file di test.''' L'aministradôr che al à blocât la base di dâts al à ufiert chest spiegazion: $1", @@ -584,13 +582,18 @@ L'aministradôr che al à blocât la base di dâts al à ufiert chest spiegazion 'permissionserrorstext-withaction' => 'No tu âs i permès che a coventin par $2, {{PLURAL:$1|par il motîf|pai motîfs}} ca sot:', 'recreate-moveddeleted-warn' => "'''Atenzion: tu stâs par tornâ a creâ une pagjine che e je stade eliminade timp fa.''' -Siguriti che sedi pardabon oportun lâ indevant cun la modifiche di cheste pagjine. -Ve ca par comoditât l'elenc des eliminazions precedentis par cheste pagjine:", +Siguriti che sedi pardabon oportun lâ indevant cul cambiament di cheste pagjine. +Ve ca par comoditât la liste des eliminazions e dai moviments par cheste pagjine:", 'moveddeleted-notice' => 'Cheste pagjine e je stade eliminade. Il regjistri di eliminazion e di spostament pe pagjine a son mostrâts ca sot par informazion.', 'log-fulllog' => 'Viôt dut il regjistri', 'edit-no-change' => 'Il cambiament al è stât ignorât parcè che no tu âs cambiât nuie tal test.', +# Parser/template warnings +'post-expand-template-inclusion-warning' => "'''Atenzion:''' La dimension dai modei includûts e je masse grande. +Cualchi model nol vignarà includût.", +'post-expand-template-inclusion-category' => 'Pagjinis dulà che la dimension pe inclusion dai modei e je stade superade', + # History pages 'viewpagelogs' => 'Cjale i regjistris relatîfs a cheste pagjine.', 'nohistory' => 'Nol è presint un storic dai cambiaments par cheste pagjine.', @@ -610,6 +613,7 @@ Il regjistri di eliminazion e di spostament pe pagjine a son mostrâts ca sot pa Leiende: (cur) = difarencis cun la version atuâl, (prec) = difarencis cun la version precedente, '''p''' = piçul cambiament", 'history-fieldset-title' => 'Sgarfe tal storic', +'history-show-deleted' => 'Dome chei eliminâts', 'histfirst' => 'Prime', 'histlast' => 'Ultime', 'historysize' => '({{PLURAL:$1|1 byte|$1 bytes}})', @@ -627,9 +631,15 @@ Leiende: (cur) = difarencis cun la version atuâl, (prec) = difarencis cun la ve 'revdelete-radio-same' => '(no stâ cambiâ)', 'revdelete-radio-set' => 'Sì', 'revdelete-radio-unset' => 'No', +'revdelete-logentry' => 'cambiât la visibilitât de revision di "[[$1]]"', 'revdel-restore' => 'cambie visibilitât', +'revdel-restore-deleted' => 'revisions eliminadis', +'revdel-restore-visible' => 'revisions visibilis', 'pagehist' => 'Storic de pagjine', +'revdelete-content' => 'contignût', 'revdelete-uname' => 'non utent', +'revdelete-hid' => 'platât $1', +'revdelete-log-message' => '$1 par $2 {{PLURAL:$2|revision|revisions}}', 'revdelete-reasonotherlist' => 'Altri motîf', # Merge log @@ -641,61 +651,65 @@ Leiende: (cur) = difarencis cun la version atuâl, (prec) = difarencis cun la ve 'lineno' => 'Rie $1:', 'compareselectedversions' => 'Confronte versions selezionadis', 'editundo' => 'anule', -'diff-multi' => '({{PLURAL:$1|Une version intermedie no mostrade|$1 versions intermediis no mostradis}}.)', +'diff-multi' => '({{PLURAL:$1|Une revision intermedie|$1 revisions intermediis}} di {{PLURAL:$2|un utent no mostrade|$2 utents no mostradis}})', # Search results -'searchresults' => 'Risultâts de ricercje', -'searchresults-title' => 'Risultâts de ricercje di "$1"', -'searchresulttext' => 'Par plui informazions su lis ricercjis in {{SITENAME}}, cjale [[{{MediaWiki:Helppage}}|{{int:help}}]].', -'searchsubtitle' => 'Ricercje di \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|dutis lis pagjinis che a scomencin par "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|dutis lis pagjinis che a pontin a "$1"]])', -'searchsubtitleinvalid' => 'Pal test "$1"', -'toomanymatches' => 'Masse risultâts, prove par plasê une ricercje divierse.', -'titlematches' => 'Corispondencis tai titui des pagjinis', -'notitlematches' => 'Nissune corispondence tai titui des pagjinis', -'textmatches' => 'Corispondencis tal test des pagjinis', -'notextmatches' => 'Nissune corispondence tal test des pagjinis', -'prevn' => 'precedents {{PLURAL:$1|$1}}', -'nextn' => 'prossims {{PLURAL:$1|$1}}', -'prevn-title' => '$1 {{PLURAL:$1|risultât precedent|risultâts precedents}}', -'nextn-title' => '$1 {{PLURAL:$1|risultât sucessîf|risultâts sucessîfs}}', -'shown-title' => 'Mostre $1 {{PLURAL:$1|risultât|risultâts}} par pagjine', -'viewprevnext' => 'Cjale ($1 {{int:pipe-separator}} $2) ($3).', -'searchmenu-legend' => 'Opzions de ricercje', -'searchmenu-exists' => "'''E je une pagjine di non \"[[:\$1]]\" su cheste wiki'''", -'searchmenu-new' => "'''Cree la pagjine \"[[:\$1]]\" su cheste wiki!'''", -'searchhelp-url' => 'Help:Contignûts', -'searchprofile-articles' => 'Pagjinis di contignûts', -'searchprofile-project' => 'Pagjinis di jutori e sul progjet', -'searchprofile-images' => 'Multimedia', -'searchprofile-everything' => 'Dut', -'searchprofile-advanced' => 'Avançade', -'searchprofile-articles-tooltip' => 'Cîr in $1', -'searchprofile-project-tooltip' => 'Cîr in $1', -'searchprofile-images-tooltip' => 'Cîr files', -'search-result-size' => '$1 ({{PLURAL:$2|une peraule|$2 peraulis}})', -'search-result-score' => 'Rilevance: $1%', -'search-redirect' => '(re-indreçament $1)', -'search-section' => '(sezion $1)', -'search-suggest' => 'Forsit tu cirivis: $1', -'search-interwiki-caption' => 'Progjets fradis', -'search-interwiki-default' => 'Risultâts di $1:', -'search-interwiki-more' => '(altri)', -'search-mwsuggest-enabled' => 'cui sugjeriments', -'search-mwsuggest-disabled' => 'cence i sugjeriments', -'mwsuggest-disable' => 'Disative i sugjeriments AJAX', -'searchall' => 'ducj', -'showingresults' => "Ca sot {{PLURAL:$1|al è fin a '''1''' risultât|a son fin a '''$1''' risultâts}} scomençant dal numar '''$2'''.", -'showingresultsnum' => "Ca sot {{PLURAL:$3|al è '''1''' risultât|a son '''$3''' risultâts}} scomençant dal numar '''$2'''.", -'showingresultsheader' => "{{PLURAL:$5|Risultât '''$1''' su '''$3'''|Risultâts '''$1 - $2''' su '''$3'''}} par '''$4'''", -'nonefound' => "'''Note''': la ricercje e ven fate normalmentri dome in cualchi spazi dai nons. Prove a scrivi ''all:'' prime dal test di cjatâ par cirî in ducj i nons dai spazis (includint lis pagjinis di discussion, i modei e v.i.) o se no dopre il non dal spazi desiderât come prefìs.", -'search-nonefound' => 'Nissun risultât par cheste ricercje.', -'powersearch' => 'Cîr', -'powersearch-legend' => 'Ricercje avanzade', -'powersearch-ns' => 'Cîr tai spazis dai nons:', -'powersearch-redir' => 'Elenc re-indreçaments', -'powersearch-field' => 'Cîr', -'search-external' => 'Ricercje esterne', -'searchdisabled' => 'La ricercje in {{SITENAME}} no je ative. Tu puedis doprâ Google intant. Sta atent che lis lôr tabelis sul contignût di {{SITENAME}} a puedin jessi pôc inzornadis.', +'searchresults' => 'Risultâts de ricercje', +'searchresults-title' => 'Risultâts de ricercje di "$1"', +'searchresulttext' => 'Par plui informazions su lis ricercjis in {{SITENAME}}, cjale [[{{MediaWiki:Helppage}}|{{int:help}}]].', +'searchsubtitle' => 'Ricercje di \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|dutis lis pagjinis che a scomencin par "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|dutis lis pagjinis che a pontin a "$1"]])', +'searchsubtitleinvalid' => 'Pal test "$1"', +'toomanymatches' => 'Masse risultâts, prove par plasê une ricercje divierse.', +'titlematches' => 'Corispondencis tai titui des pagjinis', +'notitlematches' => 'Nissune corispondence tai titui des pagjinis', +'textmatches' => 'Corispondencis tal test des pagjinis', +'notextmatches' => 'Nissune corispondence tal test des pagjinis', +'prevn' => 'precedents {{PLURAL:$1|$1}}', +'nextn' => 'prossims {{PLURAL:$1|$1}}', +'prevn-title' => '$1 {{PLURAL:$1|risultât precedent|risultâts precedents}}', +'nextn-title' => '$1 {{PLURAL:$1|risultât sucessîf|risultâts sucessîfs}}', +'shown-title' => 'Mostre $1 {{PLURAL:$1|risultât|risultâts}} par pagjine', +'viewprevnext' => 'Cjale ($1 {{int:pipe-separator}} $2) ($3).', +'searchmenu-legend' => 'Opzions de ricercje', +'searchmenu-exists' => "'''E je une pagjine di non \"[[:\$1]]\" su cheste wiki'''", +'searchmenu-new' => "'''Cree la pagjine \"[[:\$1]]\" su cheste wiki!'''", +'searchhelp-url' => 'Help:Contignûts', +'searchprofile-articles' => 'Pagjinis di contignûts', +'searchprofile-project' => 'Pagjinis di jutori e sul progjet', +'searchprofile-images' => 'Multimedia', +'searchprofile-everything' => 'Dut', +'searchprofile-advanced' => 'Avançade', +'searchprofile-articles-tooltip' => 'Cîr in $1', +'searchprofile-project-tooltip' => 'Cîr in $1', +'searchprofile-images-tooltip' => 'Cîr files', +'searchprofile-everything-tooltip' => 'Cîr ducj i gjenars di contignûts (ancje lis pagjinis di discussion)', +'searchprofile-advanced-tooltip' => 'Cîr tai spazis dai nons personalizâts', +'search-result-size' => '$1 ({{PLURAL:$2|une peraule|$2 peraulis}})', +'search-result-category-size' => '{{PLURAL:$1|1 membri|$1 membris}} ({{PLURAL:$2|1 sotcategorie|$2 sotcategoriis}}, {{PLURAL:$3|1 file|$3 files}})', +'search-result-score' => 'Rilevance: $1%', +'search-redirect' => '(re-indreçament $1)', +'search-section' => '(sezion $1)', +'search-suggest' => 'Forsit tu cirivis: $1', +'search-interwiki-caption' => 'Progjets fradis', +'search-interwiki-default' => 'Risultâts di $1:', +'search-interwiki-more' => '(altri)', +'search-mwsuggest-enabled' => 'cui sugjeriments', +'search-mwsuggest-disabled' => 'cence i sugjeriments', +'mwsuggest-disable' => 'Disative i sugjeriments AJAX', +'searchrelated' => 'leâts', +'searchall' => 'ducj', +'showingresults' => "Ca sot {{PLURAL:$1|al è fin a '''1''' risultât|a son fin a '''$1''' risultâts}} scomençant dal numar '''$2'''.", +'showingresultsnum' => "Ca sot {{PLURAL:$3|al è '''1''' risultât|a son '''$3''' risultâts}} scomençant dal numar '''$2'''.", +'showingresultsheader' => "{{PLURAL:$5|Risultât '''$1''' su '''$3'''|Risultâts '''$1 - $2''' su '''$3'''}} par '''$4'''", +'nonefound' => "'''Note''': la ricercje e ven fate normalmentri dome in cualchi spazi dai nons. Prove a scrivi ''all:'' prime dal test di cjatâ par cirî in ducj i nons dai spazis (includint lis pagjinis di discussion, i modei e v.i.) o se no dopre il non dal spazi desiderât come prefìs.", +'search-nonefound' => 'Nissun risultât par cheste ricercje.', +'powersearch' => 'Cîr', +'powersearch-legend' => 'Ricercje avanzade', +'powersearch-ns' => 'Cîr tai spazis dai nons:', +'powersearch-redir' => 'Elenc re-indreçaments', +'powersearch-field' => 'Cîr', +'search-external' => 'Ricercje esterne', +'searchdisabled' => 'La ricercje in {{SITENAME}} no je ative. Tu puedis doprâ Google intant. Sta atent che lis lôr tabelis sul contignût di {{SITENAME}} a puedin jessi pôc inzornadis.', # Quickbar 'qbsettings' => 'Sbare svelte', @@ -821,6 +835,10 @@ Leiende: (cur) = difarencis cun la version atuâl, (prec) = difarencis cun la ve 'recentchanges-legend' => 'Opzions dai ultins cambiaments', 'recentchangestext' => 'Cheste pagjine e mostre i plui recents cambiaments inte {{SITENAME}}.', 'recentchanges-feed-description' => 'Chest canâl al ripuarte i cambiaments plui recents ai contignûts di cheste wiki.', +'recentchanges-label-newpage' => 'Chest cambiament al à creât une gnove pagjine', +'recentchanges-label-minor' => 'Chest al è un piçul cambiament', +'recentchanges-label-bot' => 'Chest cambiament al è stât eseguît di un bot', +'recentchanges-label-unpatrolled' => 'Chest cambiament nol è stât ancjemò verificât', 'rcnote' => "Ca sot tu cjatis {{PLURAL:$1|l'ultin cambiament|i ultins '''$1''' cambiaments}} al sît {{PLURAL:$2|intes ultimis 24 oris|tes ultimis '''$2''' zornadis}}; i dâts a son inzornâts ai $4 a lis $5.", 'rcnotefrom' => "Ca sot i cambiaments dal '''$2''' (fintremai al '''$1''').", 'rclistfrom' => 'Mostre i ultins cambiaments dal $1', @@ -882,7 +900,6 @@ Par includi une figure intune pagjine, dopre un leam inte form 'badfilename' => 'File non gambiât in "$1".', 'filetype-missing' => 'Il file nol à une estension (par esempli ".jpg").', 'file-exists-duplicate' => 'Chest file al è un duplicât {{PLURAL:$1|dal file |dai files ca sot:}}', -'successfulupload' => 'Cjamât sù cun sucès', 'savefile' => 'Salve file', 'uploadedimage' => 'cjamât sù "$1"', 'overwroteimage' => 'al à cjamât une gnove version di «[[$1]]»', @@ -891,6 +908,7 @@ Par includi une figure intune pagjine, dopre un leam inte form 'sourcefilename' => 'Non dal file origjinâl:', 'destfilename' => 'Non dal file di destinazion:', 'watchthisupload' => 'Ten di voli chest file', +'upload-success-subj' => 'Cjamât sù cun sucès', 'upload-unknown-size' => 'Dimension no cognossude', @@ -913,6 +931,7 @@ Par includi une figure intune pagjine, dopre un leam inte form 'file-anchor-link' => 'Figure', 'filehist' => 'Storic dal file', 'filehist-help' => 'Frache suntune date/ore par viodi il file cemût che al jere in chel moment.', +'filehist-revert' => 'ripristine', 'filehist-current' => 'atuâl', 'filehist-datetime' => 'Date/Ore', 'filehist-thumb' => 'Miniature', @@ -925,6 +944,8 @@ Par includi une figure intune pagjine, dopre un leam inte form 'linkstoimage' => '{{PLURAL:$1|La pagjine ca sot e je leade|Lis $1 pagjinis ca sot a son leadis}} a cheste figure:', 'nolinkstoimage' => 'No son pagjinis leadis a chest file.', 'sharedupload' => 'Chest file al è ven di $1 e al pues jessi doprât di altris progjets.', +'sharedupload-desc-here' => 'Chest file al ven di $1 e al pues jessi doprât di altris progjets. +La descrizion su la sô [$2 pagjine di descrizion] e je mostrade ca sot.', 'uploadnewversion-linktext' => 'Cjame sù une gnove version di chest file', 'shared-repo-from' => 'di $1', @@ -970,13 +991,13 @@ Par includi une figure intune pagjine, dopre un leam inte form 'statistics-edits-average' => 'Medie dai cambiaments par ogni pagjine', 'statistics-views-total' => 'Viodudis totâls', 'statistics-views-peredit' => 'Viodudis par cambiament', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Code dai procès] di eseguî in background', 'statistics-users' => '[[Special:ListUsers|Utents]] regjistrâts', 'statistics-users-active' => 'Utents atîfs', 'statistics-users-active-desc' => 'Utents che a àn fat une azion {{PLURAL:$1|intal ultin dì|intai ultins $1 dîs}}', 'statistics-mostpopular' => 'Pagjinis plui visitadis', -'disambiguations' => 'Pagjinis di disambiguazion', +'disambiguations' => 'Pagjinis di disambiguazion', +'disambiguationspage' => 'Template:disambig', 'doubleredirects' => 'Re-indreçaments doplis', @@ -1078,9 +1099,10 @@ Cjale ancje lis [[Special:WantedCategories|categoriis desideradis]].', 'sp-deletedcontributions-contribs' => 'contribûts', # Special:LinkSearch -'linksearch' => 'Leams esternis', -'linksearch-ns' => 'Spazi dai nons:', -'linksearch-ok' => 'Cîr', +'linksearch' => 'Leams esternis', +'linksearch-ns' => 'Spazi dai nons:', +'linksearch-ok' => 'Cîr', +'linksearch-line' => '$1 al à un leam di $2', # Special:ListUsers 'listusersfrom' => 'Mostre i utents scomençant di:', @@ -1130,7 +1152,7 @@ Cjale ancje lis [[Special:WantedCategories|categoriis desideradis]].', # Watchlist 'watchlist' => 'Tignûts di voli', 'mywatchlist' => 'Tignûts di voli', -'watchlistfor' => "(par '''$1''')", +'watchlistfor2' => 'Par $1 $2', 'nowatchlist' => 'Nissun element al è tignût di voli.', 'watchnologin' => 'No tu sês jentrât', 'watchnologintext' => "Tu 'nd âs di [[Special:UserLogin|jentrâ]] par modificâ la liste des pagjinis tignudis di voli.", @@ -1180,6 +1202,7 @@ e la pagjine e sarà '''gruessute''' te [[Special:RecentChanges|liste dai ultins 'confirmdeletetext' => 'Tu stâs par eliminâ par simpri une pagjine insieme cun dut il so storic. Par plasê, da la conferme che tu vuelis fâlu, che tu capissis lis conseguencis e che tu lu stâs fasint tal rispiet de [[{{MediaWiki:Policy-url}}|politiche dal progjet]].', 'actioncomplete' => 'Azion completade', +'actionfailed' => 'Azion falide', 'deletedtext' => '"$1" al è stât eliminât. Cjale $2 par une liste des ultimis eliminazions.', 'deletedarticle' => 'eliminât "[[$1]]"', @@ -1232,6 +1255,7 @@ Tu puedis cambiâ il nivel di protezion di cheste pagjine, ma chest nol varà ef 'viewdeletedpage' => 'Viôt lis pagjinis eliminadis', 'undeletebtn' => 'Ripristine', 'undeletelink' => 'viôt/ripristine', +'undeleteviewlink' => 'viôt', 'undeleteinvert' => 'Invertìs selezion', 'undeletecomment' => 'Reson:', 'undeletedarticle' => 'al à recuperât "[[$1]]"', @@ -1258,10 +1282,12 @@ Tu puedis cambiâ il nivel di protezion di cheste pagjine, ma chest nol varà ef 'sp-contributions-newbies-sub' => 'Pai gnûfs utents', 'sp-contributions-blocklog' => 'Regjistri dai blocs', 'sp-contributions-deleted' => 'contribûts dal utent eliminâts', +'sp-contributions-uploads' => 'cjamadis', 'sp-contributions-logs' => 'regjistris', 'sp-contributions-talk' => 'discussion', 'sp-contributions-search' => 'Cîr contribûts', 'sp-contributions-username' => 'Direzion IP o non utent:', +'sp-contributions-toponly' => 'Mostre dome i cambiaments che a son lis ultimis revisions pe pagjine', 'sp-contributions-submit' => 'Cîr', # What links here @@ -1455,6 +1481,7 @@ Par plasê va su [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisat 'tooltip-upload' => 'Scomence la cjamade', 'tooltip-rollback' => '"Rollback" al anule il/i cambiament/s a cheste pagjine fats dal ultin utent cuntun sôl clic', 'tooltip-undo' => '"Anule" al permet di anulâ chest cambiament e al vierç il modul pal cambiament te modalitât di anteprime. Al permet cussì di zontâ une reson tal somari.', +'tooltip-summary' => 'Inserìs un curt somari', # Stylesheets 'monobook.css' => '/* modifiche chest file par personalizâ la skin monobook par dut il sît */', @@ -1493,7 +1520,9 @@ Par plasê va su [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisat 'mw_math_mathml' => 'MathML se pussibil (sperimentâl)', # Patrol log +'patrol-log-line' => 'al à segnât $1 di $2 come verificade $3', 'patrol-log-auto' => '(in automatic)', +'patrol-log-diff' => 'revision $1', # Browsing diffs 'previousdiff' => '← Difarence precedente', @@ -1503,9 +1532,9 @@ Par plasê va su [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisat 'thumbsize' => 'Dimension miniature:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|pagjine|pagjinis}}', 'file-info' => 'Dimensions: $1, gjenar MIME: $2', -'file-info-size' => '($1 × $2 pixel, dimensions: $3, gjenar MIME: $4)', +'file-info-size' => '$1 × $2 pixel, dimensions: $3, gjenar MIME: $4', 'file-nohires' => 'No son disponibilis versions cun risoluzion plui alte.', -'svg-long-desc' => '(file tal formât SVG, dimensions nominâls $1 × $2 pixels, dimensions dal file: $3)', +'svg-long-desc' => 'file tal formât SVG, dimensions nominâls $1 × $2 pixels, dimensions dal file: $3', 'show-big-image' => 'Version a risoluzion plene', 'show-big-image-thumb' => 'Dimensions di cheste anteprime: $1 × $2 pixels', @@ -1670,6 +1699,7 @@ Se il file al è stât cambiât rispiet al so stât origjinâl, cualchi informaz 'blankpage' => 'Pagjine vueide', # Special:Tags +'tag-filter' => 'Filtre par [[Special:Tags|etichetis]]:', 'tag-filter-submit' => 'Filtre', 'tags-edit' => 'cambie', 'tags-hitcount' => '$1 {{PLURAL:$1|cambiament|cambiaments}}', diff --git a/languages/messages/MessagesFy.php b/languages/messages/MessagesFy.php index 32691766..ec83c95e 100644 --- a/languages/messages/MessagesFy.php +++ b/languages/messages/MessagesFy.php @@ -137,7 +137,7 @@ $specialPageAliases = array( 'Filepath' => array( 'Triempad' ), ); -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $linkTrail = '/^([a-zàáèéìíòóùúâêîôûäëïöü]+)(.*)$/sDu'; $messages = array( @@ -156,8 +156,7 @@ $messages = array( 'tog-editsection' => 'Jou [bewurk]-keppelings foar seksjebewurking', 'tog-editsectiononrightclick' => 'Rjochtsklik op sekjsetitels jout seksjebewurking (freget JavaScript)', 'tog-showtoc' => 'Ynhâldsopjefte, foar siden mei mear as twa koppen', -'tog-rememberpassword' => 'Oare kear fansels oanmelde', -'tog-editwidth' => 'Bewurkingsfjild oer folsleine breedte fan it skerm sjen litte', +'tog-rememberpassword' => 'Oare kear fansels oanmelde (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => "Set siden dy't jo begjinne yn jo folchlist", 'tog-watchdefault' => "Sides dy't jo feroare hawwe folgje", 'tog-watchmoves' => "Siden dy't jo werneamd hawwe folgje", @@ -300,29 +299,18 @@ $messages = array( 'faqpage' => 'Project:Faak stelde fragen', # Vector skin -'vector-action-delete' => 'Fuortsmite', -'vector-action-move' => 'Werneam', -'vector-action-protect' => 'Beskermje', -'vector-action-undelete' => 'Tebeksette', -'vector-action-unprotect' => 'Beskerming fuorthelje', -'vector-namespace-category' => 'Kategory', -'vector-namespace-help' => 'Helpside', -'vector-namespace-image' => 'Triem', -'vector-namespace-main' => 'Side', -'vector-namespace-media' => 'Mediaside', -'vector-namespace-mediawiki' => 'Berjocht', -'vector-namespace-project' => 'Projektside', -'vector-namespace-special' => 'Bysûndere siden', -'vector-namespace-talk' => 'Oerlis', -'vector-namespace-template' => 'Berjocht', -'vector-namespace-user' => 'Meidogger', -'vector-view-create' => 'Oanmeitsje', -'vector-view-edit' => 'Wizigje', -'vector-view-history' => 'Skiednis sjen litte', -'vector-view-view' => 'Lês', -'vector-view-viewsource' => 'Besjoch de boarne', -'namespaces' => 'Nammeromten', -'variants' => 'Farianten', +'vector-action-delete' => 'Fuortsmite', +'vector-action-move' => 'Werneam', +'vector-action-protect' => 'Beskermje', +'vector-action-undelete' => 'Tebeksette', +'vector-action-unprotect' => 'Beskerming fuorthelje', +'vector-view-create' => 'Oanmeitsje', +'vector-view-edit' => 'Wizigje', +'vector-view-history' => 'Skiednis sjen litte', +'vector-view-view' => 'Lês', +'vector-view-viewsource' => 'Besjoch de boarne', +'namespaces' => 'Nammeromten', +'variants' => 'Farianten', 'errorpagetitle' => 'Fout', 'returnto' => 'Werom nei "$1".', @@ -537,7 +525,7 @@ Ferjit net se oan jo foarkar oan te passen.', 'yourname' => 'Jo meidochnamme:', 'yourpassword' => 'Jo wachtwurd', 'yourpasswordagain' => 'Jo wachtwurd (nochris)', -'remembermypassword' => 'Oare kear fansels oanmelde.', +'remembermypassword' => 'Oare kear fansels oanmelde (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Jo domein:', 'externaldberror' => 'Der is in fout by it oanmelden by de database of jo hawwe gjin tastimming om jo ekstern account by te wurkjen.', 'login' => 'Oanmelde', @@ -712,7 +700,7 @@ Kontrolearje oft jo dizze side wol oanmeitsje/bewurkje wolle.', 'userjsyoucanpreview' => "'''Tip:''' Brûk de knop 'Earst oerlêze' om jo nije JS te testen foar it fêstlizzen.", 'usercsspreview' => "'''Dit is allinne mar it oerlêzen fan jo persoanlike CSS. Hy is noch net fêstlein!'''", 'userjspreview' => "'''Tink derom: jo besjogge no jo persoanlike JavaScript. De side is net fêstlein!'''", -'userinvalidcssjstitle' => "'''Warskôging:''' der is gjin skin \"\$1\". Tink derom: jo eigen .css- en .js-siden begjinne mei in lytse letter, bygelyks {{ns:user}}:Namme/monobook.css ynsté fan {{ns:user}}:Namme/Monobook.css.", +'userinvalidcssjstitle' => "'''Warskôging:''' der is gjin skin \"\$1\". Tink derom: jo eigen .css- en .js-siden begjinne mei in lytse letter, bygelyks {{ns:user}}:Namme/vector.css ynsté fan {{ns:user}}:Namme/Vector.css.", 'updated' => '(Bewurke)', 'note' => "'''Opmerking:'''", 'previewnote' => "'''Tink der om dat dizze side noch net fêstlein is!'''", @@ -751,9 +739,6 @@ Hjirby sizze jo tagelyk ta, dat jo dizze tekst sels skreaun hawwe, of oernommen As jo net wolle dat jo teksten yngeand oanpast wurde troch oaren, set se hjir dan net.
    Jo sizze ek ta dat jo de oarspronklike auteur binne fan dit materiaal, of dat jo it kopiearre hawwe út in boarne yn it publike domein, of in soartgelikense frije boarne (sjuch $1 foar details). '''BRUK GJIN MATERIAAL DAT BESKERME WURDT TROCH AUTEURSRJOCHT, OF JO MOATTE DER TASTIMMING FOAR HAWWE!'''", -'longpagewarning' => "'''Warskôging: Dizze side is $1 kilobyte lang; -der binne blêders dy't problemen hawwe mei siden fan tsjin de 32 kb of langer. -Besykje de side yn lytsere stikken te brekken.'''", 'longpageerror' => "'''FOUT: de tekst dy't jo tafoege hawwe is $1 kilobyte grut, wat grutter is as it maksimum fan $2 kilobytes. Bewarjen is net mûglik.'''", 'readonlywarning' => "'''Warskôging: De databank is ôfsletten foar ûnderhâld, dus jo kinne jo bewurkings no net fêstlizze. Bewarje de tekst foar lettere pleatsing yn in teksttriem.''' @@ -1207,7 +1192,6 @@ Jo kinne ek oaren de mûglikheid jaan kontakt mei jo op te nimmen troch in ferwi 'right-siteadmin' => 'De database blokkearje en wer frij jaan', 'right-reset-passwords' => "Wachtwurden fan oare meidoggers op 'e nij ynstelle", 'right-override-export-depth' => 'Alle siden oant en mei in keppelingsdjipte fan fiif fuortskriuwe', -'right-versiondetail' => 'Utwreide ferzjeynformaasje sjenlitte', # User rights log 'rightslog' => 'Rjochten-loch', @@ -1257,13 +1241,9 @@ Jo kinne ek oaren de mûglikheid jaan kontakt mei jo op te nimmen troch in ferwi 'recentchanges-legend' => 'Opsjes foar resinte feroarings', 'recentchangestext' => 'De lêste feroarings fan de {{SITENAME}}.', 'recentchanges-feed-description' => 'Mei dizze feed kinne jo de nijste feroarings yn dizze wiki besjen.', -'recentchanges-legend-newpage' => '$1 - nije side', 'recentchanges-label-newpage' => 'Mei dizze wiziging is in nije side makke', -'recentchanges-legend-minor' => '$1 - tekstwiziging', 'recentchanges-label-minor' => 'Dit is in tekstwiziging', -'recentchanges-legend-bot' => '$1 - robotbewurking', 'recentchanges-label-bot' => 'Dizze wiziging is troch in robot makke', -'recentchanges-legend-unpatrolled' => '$1 - ûnkontrolearre wiziging', 'recentchanges-label-unpatrolled' => 'Dizze wiziging is noch net neisjûn', 'rcnote' => "Dit {{PLURAL:$1|is de lêste feroaring|binne de lêste '''$1''' feroarings}} yn de lêste {{PLURAL:$2|dei|'''$2''' dagen}}, fan $4 $5.", 'rcnotefrom' => 'Dit binne de feroarings sûnt $2 (maksimaal $1).', @@ -1372,7 +1352,6 @@ As jo de triem dochs noch oanbiede wolle, gean dan werom en kies in oare namme. 'file-exists-duplicate' => 'Dizze triem is idintyk oan {{PLURAL:$1|de folgjende triem|de folgjende triemmen}}:', 'file-deleted-duplicate' => "In bestân idintyk oan dit bestân ([[:$1]]) is foarhinne fuorthelle. Rieplachtsje it fuorthel-logboek foar't jo fierder geane.", -'successfulupload' => 'Oanbieden slagge.', 'uploadwarning' => 'Oanbied-warskôging', 'savefile' => 'Lis triem fêst', 'uploadedimage' => ' "[[$1]]" oanbean', @@ -1407,6 +1386,7 @@ JD # Jenoptik MGP # Pentax PICT # ferskaat # ", +'upload-success-subj' => 'Oanbieden slagge.', 'upload-proto-error' => 'Ferkeard protokol', 'upload-proto-error-text' => "Oanbieden mei dizze metoade freget URL's dy't begjinne mei http:// of ftp://.", @@ -1551,7 +1531,6 @@ Ferjit net de "Wat is hjirmei keppele" nei te gean foar it fuortheljen fan dit s 'statistics-edits-average' => 'Trochstrings tal bewurkings per side', 'statistics-views-total' => 'Totaal oantal werjûne siden', 'statistics-views-peredit' => 'Werjûne siden per bewurking', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Job-queue-langte]', 'statistics-users' => 'Registrearre [[Special:ListUsers|brûkers]]', 'statistics-users-active' => 'Aktive brûkers', 'statistics-users-active-desc' => "Brûkers dy't yn 'e ôfrûne {{PLURAL:$1|dei|$1 dagen}} in hanneling útfierd hawwe", @@ -1756,7 +1735,6 @@ De ûntfanger kin dus daliks nei jo reagearje.', # Watchlist 'watchlist' => 'Folchlist', 'mywatchlist' => 'Folchlist', -'watchlistfor' => "(foar '''$1''')", 'nowatchlist' => 'Jo hawwe gjin siden op jo folchlist.', 'watchnologin' => 'Net oanmeld yn', 'watchnologintext' => 'Jo moatte [[Special:UserLogin|oanmeld]] wêze om jo folchlist te feroarjen.', @@ -2006,7 +1984,6 @@ Meld de krekte reden! Neam bygelyks de siden dy't oantaaste waarden.", (List fan [[Special:IPBlockList|útslette meidoggers]].)', 'ipb-unblock-addr' => 'Lit $1 yn', 'ipb-unblock' => 'Lit in meidogger of IP-adres yn', -'ipb-blocklist-addr' => 'Besteande útsluting foar $1 besjen', 'ipb-blocklist' => 'Besteande útslutings besjen', 'unblockip' => 'Lit meidogger wer ta', 'unblockiptext' => 'Brûk dizze fjilden om in meidogger wer skriuwtagong te jaan.', @@ -2245,10 +2222,10 @@ Gean nei oft latex, dvips, en gs goed ynstallearre binne en set om', # Media information 'imagemaxsize' => 'Behein ôfmjittings fan ôfbyld op beskriuwingsside ta:', 'thumbsize' => 'Mjitte fan miniatueren:', -'file-info' => '(triemgrutte: $1, MIME-type: $2)', -'file-info-size' => '($1 × $2 pixel, triemgrutte: $3, MIME type: $4)', +'file-info' => 'triemgrutte: $1, MIME-type: $2', +'file-info-size' => '$1 × $2 pixel, triemgrutte: $3, MIME type: $4', 'file-nohires' => 'Gjin hegere resolúsje beskikber.', -'svg-long-desc' => '(SVG-triem, nominaal $1 × $2 pixels, triemgrutte: $3)', +'svg-long-desc' => 'SVG-triem, nominaal $1 × $2 pixels, triemgrutte: $3', 'show-big-image' => 'Hegere resolúsje', 'show-big-image-thumb' => 'Grutte fan dizze ôfbylding: $1 × $2 pixels', diff --git a/languages/messages/MessagesGa.php b/languages/messages/MessagesGa.php index 5ff74ace..79e1f818 100644 --- a/languages/messages/MessagesGa.php +++ b/languages/messages/MessagesGa.php @@ -108,8 +108,7 @@ $messages = array( 'tog-editsection' => 'Cumasaigh mír-eagarthóireacht le naisc mar seo: [athrú]', 'tog-editsectiononrightclick' => 'Cumasaigh mír-eagarthóireacht le deaschliceáil
    ar cheannteidil (JavaScript)', 'tog-showtoc' => "Taispeáin an clár ábhair (d'ailt le níos mó ná 3 ceannteidil)", -'tog-rememberpassword' => "Cuimhnigh ar m'fhocal faire ar an ríomhaire seo", -'tog-editwidth' => 'Cuir uasmhéid ar an mbosca eagair', +'tog-rememberpassword' => 'Cuimhnigh orm ar an ríomhaire seo (ar feadh uastréimhse de $1 {{PLURAL:$1|lá|lá}})', 'tog-watchcreations' => 'Cuir ar mo liosta faire leathanaigh a chruthaím', 'tog-watchdefault' => 'Déan faire ar leathanaigh a athraím', 'tog-watchmoves' => 'Cuir ar mo liosta faire leathanaigh a athainmnaím', @@ -248,25 +247,20 @@ agus an [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Lámhleabhar ú 'faqpage' => 'Project:Ceisteanna_Coiteanta', # Vector skin -'vector-action-addsection' => 'Cuir topaic leis', -'vector-action-delete' => 'Scrios', -'vector-action-move' => 'Athainmnigh', -'vector-action-protect' => 'Glasáil', -'vector-action-undelete' => 'Díscrios', -'vector-action-unprotect' => 'Díghlasáil', -'vector-namespace-category' => 'Catagóir', -'vector-namespace-image' => 'Comhad', -'vector-namespace-main' => 'Leathanach', -'vector-namespace-mediawiki' => 'Teachtaireacht', -'vector-namespace-special' => 'Leathanach speisialta', -'vector-view-create' => 'Cruthaigh', -'vector-view-edit' => 'Athraigh an lch seo', -'vector-view-history' => 'Féach ar stair', -'vector-view-view' => 'Léigh', -'vector-view-viewsource' => 'Féach ar fhoinse', -'actions' => 'Gníomhartha', -'namespaces' => 'Ainmspásanna', -'variants' => 'Leaganacha Malartacha', +'vector-action-addsection' => 'Cuir topaic leis', +'vector-action-delete' => 'Scrios', +'vector-action-move' => 'Athainmnigh', +'vector-action-protect' => 'Glasáil', +'vector-action-undelete' => 'Díscrios', +'vector-action-unprotect' => 'Díghlasáil', +'vector-view-create' => 'Cruthaigh', +'vector-view-edit' => 'Athraigh an lch seo', +'vector-view-history' => 'Féach ar stair', +'vector-view-view' => 'Léigh', +'vector-view-viewsource' => 'Féach ar fhoinse', +'actions' => 'Gníomhartha', +'namespaces' => 'Ainmspásanna', +'variants' => 'Leaganacha Malartacha', 'errorpagetitle' => 'Earráid', 'returnto' => 'Fill ar ais go $1.', @@ -322,6 +316,8 @@ agus an [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Lámhleabhar ú 'jumpto' => 'Léim go:', 'jumptonavigation' => 'nascleanúint', 'jumptosearch' => 'cuardaigh', +'pool-timeout' => 'Thar am ag feitheamh leis an nglas', +'pool-errorunknown' => 'Earráid anaithnid', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Maidir leis an {{SITENAME}}', @@ -490,7 +486,7 @@ Cruthaíodh do chuntas. Ná déan dearmad athrú a dhéanamh ar do chuid [[Speci 'yourname' => "D'ainm úsáideora", 'yourpassword' => "D'fhocal faire", 'yourpasswordagain' => "Athiontráil d'fhocal faire", -'remembermypassword' => 'Cuimhnigh orm', +'remembermypassword' => "Cuimhnigh ar m'fhocal faire ar an ríomhaire seo (ar feadh uastréimhse de $1 {{PLURAL:$1|lá|lá}})", 'yourdomainname' => "D'fhearann", 'externaldberror' => 'Bhí earráid bhunachair sonraí ann maidir le fíordheimhniú seachtrach, nóThere was either an external authentication database error or you are not allowed to update your external account.', 'login' => 'Logáil isteach', @@ -507,6 +503,7 @@ Cruthaíodh do chuntas. Ná déan dearmad athrú a dhéanamh ar do chuid [[Speci 'gotaccount' => "An bhfuil cuntas agat cheana féin? '''$1'''.", 'gotaccountlink' => 'Logáil isteach', 'createaccountmail' => 'le ríomhphost', +'createaccountreason' => 'Fáth:', 'badretype' => "D'iontráil tú dhá fhocal faire difriúla.", 'userexists' => 'Tá an ainm úsáideora sin in úsáid cheana féin.
    Roghnaigh ainm eile agus bain triail eile as.', @@ -564,6 +561,9 @@ Iontráil seoladh dea-fhormáidte le do thoil, nó glan an réimse sin.', 'usernamehasherror' => 'Ní cheadaítear hais a úsáid in ainm úsáideora', 'loginlanguagelabel' => 'Teanga: $1', +# E-mail sending +'php-mail-error-unknown' => 'Earráid anaithnid i bhfeidhm mail() de chuid PHP', + # Password reset dialog 'resetpass' => "Athraigh d'fhocal faire", 'resetpass_announce' => "Tá tú logáilte isteach le cód sealadach a seoladh chugat i r-phost. @@ -656,7 +656,7 @@ níor sábháladh é go fóill!'''", 'userjspreview' => "'''Cuimhnigh nach bhfuil seo ach réamhamharc do JavaScript úsáideora - níor sábháladh é go fóill!'''", 'userinvalidcssjstitle' => "'''Rabhadh:''' Níl an craiceann \"\$1\" ann. -Cuimhnigh go n-úsáideann leathanaigh shaincheaptha .css agus .js teideal i gcás íochtar, m.sh. {{ns:user}}:Foo/monobook.css i leapa {{ns:user}}:Foo/Monobook.css.", +Cuimhnigh go n-úsáideann leathanaigh shaincheaptha .css agus .js teideal i gcás íochtar, m.sh. {{ns:user}}:Foo/vector.css i leapa {{ns:user}}:Foo/Vector.css.", 'updated' => '(Leasaithe)', 'note' => "'''Tabhair faoi deara:'''", 'previewnote' => "'''Cuimhnigh nach bhfuil ach réamhamharc sa leathanach seo, agus nach sábháladh fós é!'''", @@ -684,9 +684,6 @@ Ina theannta sin, geallann tú gur scríobh tú féin an dréacht seo, nó gur c Murar mian leat go gcuirfí do chuid scríbhinne in eagar go héadrócaireach, ná cuir isteach anseo í.
    Ina theannta sin, geallann tú gur scríobh tú féin an dréacht seo, nó gur chóipeáil tú é ó fhoinse san fhearann poiblí nó acmhainn eile saor ó chóipcheart (féach ar $1 le haghaidh tuilleadh eolais). '''NÁ CUIR ISTEACH OBAIR LE CÓIPCHEART GAN CHEAD!'''", -'longpagewarning' => "'''Rabhadh:''' Tá an leathanach seo $1 cilibheart i bhfad; -ní féidir le roinnt brabhsálaithe leathanaigh a athrú má tá siad thart ar 32kb, nó níos fada. -Féach más féidir, le do thoil an leathanach a roinnt ina chodanna níos bige.", 'longpageerror' => "'''EARRÁID: Tá an téacs a chuir isteach $1 cilibheart ar fad, sin níos faide ná $2 cilibheart, an uasmhéid. Ní féidir é a shábháil.'''", 'readonlywarning' => "'''Rabhadh: Glasáladh an bunachar sonraí chun cothabháil a dhéanamh, agus mar sin ní féidir leat do chuid athruithe a shábháil go díreach anois. @@ -862,6 +859,7 @@ Bain triail as ''all:'' a chur roimh d'iarratas chun an t-inneachar ar fad (leat 'resultsperpage' => 'Torthaí le taispeáint ó leathanach:', 'contextlines' => 'Línte le taispeáint do gach toradh:', 'contextchars' => 'Litreacha chomhthéacs ar gach líne:', +'stub-threshold-disabled' => 'Díchumasaithe', 'recentchangesdays' => 'Méid laethanta le taispeáint sna hathruithe is déanaí:', 'recentchangesdays-max' => '(uasmhéid $1 {{PLURAL:$1|lá|lá}})', 'recentchangescount' => 'Méid athrú le taispeáint:', @@ -971,12 +969,7 @@ do chuid dreachtaí a chur i leith tusa.', 'recentchanges-legend' => 'Roghanna do na hathruithe is déanaí', 'recentchangestext' => 'Déan faire ar na hathruithe is déanaí sa vicí ar an leathanach seo.', 'recentchanges-feed-description' => 'Rianaigh na n-athruite vicí is déanaí sa fotha seo.', -'recentchanges-label-legend' => 'Eochair eolais: $1.', -'recentchanges-legend-newpage' => '$1 - leathanach nua', -'recentchanges-legend-minor' => '$1 - mionathrú', -'recentchanges-legend-bot' => '$1 - athrú de chuid róbó', 'recentchanges-label-bot' => 'Chomhlíon róbó an t-athrú seo', -'recentchanges-legend-unpatrolled' => '$1 - athrú neamh-phatrólaithe', 'rcnote' => "Is {{PLURAL:$1|é seo a leanas an t-athrú amháin|iad seo a leanas na $1 athruithe is déanaí}} {{PLURAL:$2|ar feadh an lae dheireanaigh|ar feadh na '''$2''' lá deireanacha}}, as $5, $4.", 'rcnotefrom' => 'Is iad seo a leanas na hathruithe ó $2 (go dti $1 taispeánaithe).', 'rclistfrom' => 'Taispeáin athruithe nua ó $1 anuas.', @@ -1046,7 +1039,6 @@ an comhad agus déan athiarracht, más é do thoil é.', míchruinneas é seo san ainm chomhaid. Seiceáil más é an comhad seo atá le huaslódáil agat.", 'fileexists-forbidden' => 'Tá comhad eile leis an ainm seo ann fós, agus ní féidie é a forscríobh. Má theastáilann uait do chomhad a uaslódáil fós, téigh ar ais agus úsáid ainm nua, le do thoil. [[File:$1|thumb|center|$1]]', -'successfulupload' => "D'éirigh leis an uaslódáil", 'uploadwarning' => 'Rabhadh suaslódála', 'savefile' => 'Sábháil comhad', 'uploadedimage' => 'uaslódáladh "[[$1]]"', @@ -1057,6 +1049,7 @@ Má theastáilann uait do chomhad a uaslódáil fós, téigh ar ais agus úsáid 'destfilename' => 'Comhadainm sprice:', 'upload-maxfilesize' => 'Méad comhad is mó: $1', 'watchthisupload' => 'Déan faire ar an leathanach seo', +'upload-success-subj' => "D'éirigh leis an uaslódáil", 'upload-proto-error' => 'Prótacal mícheart', 'upload-file-error' => 'Earráid inmheánach', @@ -1287,7 +1280,6 @@ Beidh do seoladh ríomhphoist a d\'iontráil tú i [[Special:Preferences|do chui # Watchlist 'watchlist' => 'Mo liosta faire', 'mywatchlist' => 'Mo liosta faire', -'watchlistfor' => "(le '''$1''')", 'nowatchlist' => 'Níl aon rud ar do liosta faire.', 'watchlistanontext' => "$1, le d'thoil, chun míreanna ar do liosta faire a fheiceáil ná a athrú.", 'watchnologin' => 'Níl tú logáilte isteach', @@ -1853,10 +1845,10 @@ iarradh sábháil. Is dócha gur nasc chuig suíomh seachtrach ba chúis leis.', B'fheidir go gcuirfear do chóras i gcontúirt dá rithfeá é.", 'imagemaxsize' => "Teorainn mhéid íomhá:
    ''(leathanaigh thuarascáil chomhaid)''", 'thumbsize' => 'Méid mionsamhlacha:', -'file-info' => '(méid comhad : $1, saghas MIME: $2)', -'file-info-size' => '($1 × $2 picteilín, méid comhaid: $3, cineál MIME: $4)', +'file-info' => 'méid comhad : $1, saghas MIME: $2', +'file-info-size' => '$1 × $2 picteilín, méid comhaid: $3, cineál MIME: $4', 'file-nohires' => 'Níl aon taifeach is mó ar fáil.', -'svg-long-desc' => '(Comhad SVG, ainmniúil $1 × $2 picteilíni, méid comhaid: $3)', +'svg-long-desc' => 'Comhad SVG, ainmniúil $1 × $2 picteilíni, méid comhaid: $3', 'show-big-image' => 'Taispeáin leagan ardtaifigh den íomhá', 'show-big-image-thumb' => 'Méid an réamhamhairc seo: $1 × $2 picteilín', diff --git a/languages/messages/MessagesGag.php b/languages/messages/MessagesGag.php index 5c95e77d..8c62d9a6 100644 --- a/languages/messages/MessagesGag.php +++ b/languages/messages/MessagesGag.php @@ -29,8 +29,7 @@ $messages = array( 'tog-editsection' => 'Bölümleri [diiştir] baalantılarılan diiştirmää hakkı ver', 'tog-editsectiononrightclick' => 'Bölüm başlıına saa tuşla basarak bölümü düzmää izin ver.(JavaScript)', 'tog-showtoc' => 'İçindäkiler tablițasını düz
    (3-tän çok başlıı olan sayfalar için)', -'tog-rememberpassword' => 'Parolu hatırla', -'tog-editwidth' => 'Diiştirmää eri brauzer penceräsi büüklüktä olsun', +'tog-rememberpassword' => 'Parolu hatırla (en fazla $1 {{PLURAL:$1|gün|gün}})', 'tog-watchcreations' => 'Yarattıım sayfaları bakmaa listama ekle', 'tog-watchdefault' => 'Diişmäk yapılan sayfayı bakmaa listasına ekle', 'tog-watchmoves' => 'Bakmaa listama ekle o sayfaları angılarını taşıdım', @@ -75,18 +74,18 @@ $messages = array( 'thu' => 'Per', 'fri' => 'Cumaa', 'sat' => 'Cts', -'january' => 'Yanvar', -'february' => 'Fevral', -'march' => 'Marta', -'april' => 'Aprel', -'may_long' => 'May', -'june' => 'İyün', -'july' => 'İyül', -'august' => 'Avgust', -'september' => 'Sentäbri', -'october' => 'Oktäbri', -'november' => 'Noyabri', -'december' => 'Dekabri', +'january' => 'Büük ay', +'february' => 'Küçük ay', +'march' => 'Baba Marta', +'april' => 'Çiçek ay', +'may_long' => 'Hederlez', +'june' => 'Kirez ay', +'july' => 'Orak ay', +'august' => 'Harman ay', +'september' => 'Ceviz ay', +'october' => 'Canavar ay', +'november' => 'Kasım', +'december' => 'Kırım ay', 'january-gen' => 'Büük ay', 'february-gen' => 'Küçük ay', 'march-gen' => 'Baba Marta', @@ -156,6 +155,7 @@ $messages = array( # Vector skin 'vector-view-edit' => 'Diiştir', +'vector-view-view' => 'Oku', 'errorpagetitle' => 'Yannış', 'returnto' => '$1 dön.', @@ -314,7 +314,7 @@ Esapınız açıldı. Unutmayın [[Special:Preferences|{{SITENAME}} preferences] 'yourname' => 'Kullanıcı adınız', 'yourpassword' => 'Parol', 'yourpasswordagain' => 'Parolu enidän yaz', -'remembermypassword' => 'Parolu hatırla.', +'remembermypassword' => 'Parolu hatırla (en fazla $1 {{PLURAL:$1|gün|gün}} için)', 'yourdomainname' => 'Domen adınız', 'login' => 'Gir', 'nav-login-createaccount' => 'Gir / esap yarat', @@ -438,7 +438,6 @@ lițenziyası şartları içindä (detallar için $1'a bakınız). Herliim istemeersiniz ani sizin tekstlär serbest yayılsın hem diiştirilsin übür kullanıcılar tarafınnan, onnarı erleştirmeyniz buraya.
    Hem siz garantiyada bulunêrsiniz ani eklemäklerin avtorusunuz, yaki onnarı kopiya ettiniz kaynaktan angısı izin verer teksti serbest yaymaa hem diiştirmää.
    '''
    AVTORLUK KORUNMAK HAKKILAN KORUNMAYAN MATERİALLAR EKLEMEYNİZ!
    '''", -'longpagewarning' => "'''BAK: Bu sayfanın ölçüsü $1 kilobayt; ölçüsü 32 kb-a yakın yaki onnan çok sayfalar bir takım brauzerlärdä var nicä yannış görünsün. Savaşênız onu bölümnerä ayırmaa.'''", 'templatesused' => 'Bu sayfada kullanılan {{PLURAL:$1|şablon|şablonlar}}:', 'templatesusedpreview' => '{{PLURAL:$1|Şablon|Şablonnar}} ani bu ön siirdä kullanıldı:', 'templatesusedsection' => 'Bu bölümde kullanılan {{PLURAL:$1|şablon|şablonlar}}:', @@ -657,6 +656,7 @@ Sizin bakmaa [[Special:Watchlist|listasındaki]] sayfalar verildi '''kalın''' b 'statistics-edits' => '{{SITENAME}} kurulmaa beeri yapmaa sayfa diişmäkleri', 'statistics-edits-average' => 'Her yapraktaki diişmäklerin sayısı', 'statistics-views-total' => 'Hepsi resimlär', +'statistics-views-total-desc' => 'Var nica olmadı hem maasus yapraklarından resim eklenmee', 'statistics-views-peredit' => 'Diişmäk başına resimlär', 'statistics-users' => 'Registratlı [[Special:ListUsers|kullanıcılar]]', 'statistics-users-active' => 'Aktivli kullanıcılar', @@ -746,7 +746,6 @@ Sizin bakmaa [[Special:Watchlist|listasındaki]] sayfalar verildi '''kalın''' b # Watchlist 'watchlist' => 'Bakmaa listam', 'mywatchlist' => 'Bakmaa listam', -'watchlistfor' => "('''$1''' için)", 'addedwatch' => 'Bakmaa listasına registrat edildi.', 'addedwatchtext' => '"$1" adlı sayfa [[Special:Watchlist|bakmaa listanıza]] registrat olundu. @@ -939,6 +938,8 @@ Yalvarêrêz başka bir ad seçmää.', 'tooltip-search' => '{{SITENAME}} içindä ara', 'tooltip-search-go' => 'Herliim varsa, git salt bu adlı bir sayfaa', 'tooltip-search-fulltext' => 'Bu tekst için sayfaları aara', +'tooltip-p-logo' => ' +Dönün baş yapraa', 'tooltip-n-mainpage' => 'Dönün baş yapraa', 'tooltip-n-mainpage-description' => 'Dönün baş yapraa', 'tooltip-n-portal' => 'Proyekt uurunda, ne nändä, nelär var nicä yapmaa', @@ -979,9 +980,9 @@ Yalvarêrêz başka bir ad seçmää.', 'nextdiff' => 'Geerki versiyalan aradaki fark →', # Media information -'file-info-size' => '($1 × $2 piksel, fayl ölçüsü: $3, MIME tipi: $4)', +'file-info-size' => '$1 × $2 piksel, fayl ölçüsü: $3, MIME tipi: $4', 'file-nohires' => 'Taa üüksek aydınnıklı versiya bulunmêêr.', -'svg-long-desc' => '(SVG faylı, nominal $1 × $2 piksel, fayl ölçüsü: $3)', +'svg-long-desc' => 'SVG faylı, nominal $1 × $2 piksel, fayl ölçüsü: $3', 'show-big-image' => 'Taman aydınnık', 'show-big-image-thumb' => 'Ön siir ölçüsü: $1 × $2 piksel', diff --git a/languages/messages/MessagesGan_hans.php b/languages/messages/MessagesGan_hans.php index 2b298308..b928663d 100644 --- a/languages/messages/MessagesGan_hans.php +++ b/languages/messages/MessagesGan_hans.php @@ -46,8 +46,7 @@ $messages = array( 'tog-editsection' => '可以用[编写]链接来编写个别段落', 'tog-editsectiononrightclick' => '可以按右键来编写只把子段落(JavaScript)', 'tog-showtoc' => '超过三只标题就显到目录', -'tog-rememberpassword' => '到个只电脑记到偶𠮶密码', -'tog-editwidth' => '加阔修改栏到完个萤幕', +'tog-rememberpassword' => '到个只电脑记到偶𠮶密码 (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => '拿偶开嘞𠮶页面加到偶𠮶监视列表', 'tog-watchdefault' => '拿偶改嘞𠮶页面加到偶𠮶监视列表', 'tog-watchmoves' => '拿偶动嘞𠮶页面加到偶𠮶监视列表', @@ -193,31 +192,20 @@ $messages = array( 'faqpage' => 'Project:问得蛮多𠮶问题', # Vector skin -'vector-action-addsection' => '添主题', -'vector-action-delete' => '删吥', -'vector-action-move' => '移吥', -'vector-action-protect' => '护到', -'vector-action-undelete' => '望下删吥𠮶页面', -'vector-action-unprotect' => '解除保护', -'vector-namespace-category' => '分类', -'vector-namespace-help' => '帮助页', -'vector-namespace-image' => '档案', -'vector-namespace-main' => '页面', -'vector-namespace-media' => '媒体页', -'vector-namespace-mediawiki' => '介面', -'vector-namespace-project' => '计划页', -'vector-namespace-special' => '特别页', -'vector-namespace-talk' => '谈詑', -'vector-namespace-template' => '模板', -'vector-namespace-user' => '用户页', -'vector-view-create' => '创建', -'vector-view-edit' => '编辑', -'vector-view-history' => '望下历史', -'vector-view-view' => '读', -'vector-view-viewsource' => '望下原始码', -'actions' => '动作', -'namespaces' => '空间名', -'variants' => '变换', +'vector-action-addsection' => '添主题', +'vector-action-delete' => '删吥', +'vector-action-move' => '移吥', +'vector-action-protect' => '护到', +'vector-action-undelete' => '望下删吥𠮶页面', +'vector-action-unprotect' => '解除保护', +'vector-view-create' => '创建', +'vector-view-edit' => '编辑', +'vector-view-history' => '望下历史', +'vector-view-view' => '读', +'vector-view-viewsource' => '望下原始码', +'actions' => '动作', +'namespaces' => '空间名', +'variants' => '变换', 'errorpagetitle' => '错误', 'returnto' => '回到$1。', @@ -426,7 +414,7 @@ $2', 'yourname' => '用户名:', 'yourpassword' => '密码:', 'yourpasswordagain' => '输过道密码:', -'remembermypassword' => '让电脑记到密码', +'remembermypassword' => '让电脑记到密码 (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => '倷𠮶域名:', 'externaldberror' => '外部验证数据库出错,或倷更新伓正倷𠮶外部帐户。', 'login' => '登入', @@ -443,6 +431,7 @@ $2', 'gotaccount' => "有喽帐户? '''$1'''.", 'gotaccountlink' => '登入', 'createaccountmail' => '通过email', +'createaccountreason' => '原因:', 'badretype' => '倷输𠮶密码伓合。', 'userexists' => '倷输𠮶用户名系人家𠮶,选过只喽!', 'loginerror' => '登入错误', @@ -575,7 +564,7 @@ $2', 'userjsyoucanpreview' => "'''提示:''' 存到前请用'望吖起'来测吖倷𠮶新JS 。", 'usercsspreview' => "'''注意倷单系到预览倷个人𠮶 CSS,内容哈冇保存!'''", 'userjspreview' => "'''注意倷单系到测试/预览倷个人𠮶 JavaScript,内容哈冇保存!'''", -'userinvalidcssjstitle' => "'''警告:''' 冇\"\$1\"𠮶皮肤。请记到自定义𠮶 .css 同 .js 页要用小写。就话,{{ns:user}}:Foo/monobook.css 伓等同 {{ns:user}}:Foo/Monobook.css。", +'userinvalidcssjstitle' => "'''警告:''' 冇\"\$1\"𠮶皮肤。请记到自定义𠮶 .css 同 .js 页要用小写。就话,{{ns:user}}:Foo/vector.css 伓等同 {{ns:user}}:Foo/Vector.css。", 'updated' => '(更新正喽)', 'note' => "'''注意:'''", 'previewnote' => "'''请记到个光系预览,内容哈冇保存!'''", @@ -609,8 +598,6 @@ $2', 'copyrightwarning2' => "请记得别𠮶人编得正、改得正或者删得正倷到{{SITENAME}}𠮶全部贡献。要系倷伓想自家𠮶编辑好嚟嚟拖改吥,唉就莫递交。
    倷都要话正倷𠮶文字系倷自家写𠮶,或者系公有领域或别𠮶自由资源复制到𠮶(望吖$1有别𠮶资料)。 '''冇任何许可𠮶情况下请莫递交有版权𠮶作品!'''", -'longpagewarning' => "'''警告:个页有$1 kilobytes咁长;有𠮶浏览器会编伓正超吥32 kb𠮶页面。 -请考虑吖拿佢分到细嚸𠮶小段落。'''", 'longpageerror' => "'''错误:倷递交𠮶文字有$1 kilobytes咁长,佢长过最大𠮶$2 kilobytes。存伓正倷递交𠮶文字。'''", 'readonlywarning' => "'''警告: 数据库锁到嘞进行定期修护,眼下倷存伓正倷𠮶改动。倷可以拿佢存到文档再著。'''", 'protectedpagewarning' => "'''警告: 个页已经受保护,单只管理员权限𠮶用户才改得正。'''", @@ -963,7 +950,6 @@ $2', 'file-thumbnail-no' => "个只档案名系以'''$1'''开头。佢好像一只图像𠮶缩小版''(缩图)''。如果倷有个只图像𠮶完整版,伓然请再改过只档名。", 'fileexists-forbidden' => '个只档案名已存在;请回头并换过只新𠮶名称来上传个只档案。[[File:$1|thumb|center|$1]]', 'fileexists-shared-forbidden' => '到共用档案库里度有嘞同名𠮶档案;请回头并换过只新𠮶名称来上传个只档案。[[File:$1|thumb|center|$1]]', -'successfulupload' => '上传正嘞', 'uploadwarning' => '上传警告', 'savefile' => '保存盘案', 'uploadedimage' => '上传正嘞"[[$1]]"', @@ -981,6 +967,7 @@ $2', 倷要想正系真𠮶上传个只档案。 为到方便起见,个只档案𠮶删除记录到下底提供嘞:", 'filename-bad-prefix' => "倷上传𠮶档案名系以'''\"\$1\"'''做开头𠮶,通常个种冇意义𠮶名字系数码相机度𠮶自动编排。请到倷𠮶档案拣过只更加有意义𠮶名字。", +'upload-success-subj' => '上传正嘞', 'upload-proto-error' => '协定错误', 'upload-proto-error-text' => '远程上传要求 URL 用 http://ftp:// 开头。', @@ -1254,7 +1241,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => '监视列表', 'mywatchlist' => '偶𠮶监视列表', -'watchlistfor' => "('''$1'''𠮶监视列表')", 'nowatchlist' => '倷𠮶监视列表什哩都冇有。', 'watchlistanontext' => '请$1眵吖或改吖倷𠮶监视列表。', 'watchnologin' => '冇登入', @@ -1347,7 +1333,9 @@ $NEWPAGE 'editcomment' => "编辑介绍: \"''\$1''\"。", 'revertpage' => '返回由[[Special:Contributions/$2|$2]] ([[User talk:$2|对话]])𠮶编辑;恢复到[[User:$1|$1]]𠮶最末一只版本', 'rollback-success' => '返回由$1𠮶编辑;恢复到$2𠮶最末一只版本。', -'sessionfailure' => '倷𠮶登入好像有嚸问题,为到防范未然,个只动作拖取消嘞。 + +# Edit tokens +'sessionfailure' => '倷𠮶登入好像有嚸问题,为到防范未然,个只动作拖取消嘞。 请按吖“后退”再试过啰!', @@ -1509,7 +1497,6 @@ $1', 'ipb-edit-dropdown' => '编写封锁原因', 'ipb-unblock-addr' => '解封$1', 'ipb-unblock' => '解封用户名或IP地址', -'ipb-blocklist-addr' => '望吖$1目前𠮶封禁', 'ipb-blocklist' => '望吖目前𠮶封禁', 'unblockip' => '解封IP地址', 'unblockiptext' => '用下底𠮶表格去恢复早先拖封𠮶IP𠮶编写权。', @@ -1848,10 +1835,10 @@ $1', 'imagemaxsize' => '档案解释页𠮶图像大细限制到:', 'thumbsize' => '缩略图大细:', 'widthheightpage' => '$1×$2,$3页', -'file-info' => '(档案大细: $1, MIME 类型: $2)', -'file-info-size' => '($1 × $2 像素,档案大细:$3 ,MIME类型:$4)', +'file-info' => '档案大细: $1, MIME 类型: $2', +'file-info-size' => '$1 × $2 像素,档案大细:$3 ,MIME类型:$4', 'file-nohires' => '冇更高分辨率𠮶图像。', -'svg-long-desc' => '(SVG档案,表面大细: $1 × $2 像素,档案大细:$3)', +'svg-long-desc' => 'SVG档案,表面大细: $1 × $2 像素,档案大细:$3', 'show-big-image' => '完整分辨率', 'show-big-image-thumb' => '个幅缩略图𠮶分辨率: $1 × $2 像素', diff --git a/languages/messages/MessagesGan_hant.php b/languages/messages/MessagesGan_hant.php index 89fabb83..13193193 100644 --- a/languages/messages/MessagesGan_hant.php +++ b/languages/messages/MessagesGan_hant.php @@ -69,8 +69,7 @@ $messages = array( 'tog-editsection' => '可以用[編寫]連結來編寫個別段落', 'tog-editsectiononrightclick' => '可以按右鍵來編寫隻把子段落(JavaScript)', 'tog-showtoc' => '超過三隻標題就顯到目錄', -'tog-rememberpassword' => '到箇隻電腦記到偶嗰密碼', -'tog-editwidth' => '加闊修改欄到完個螢幕', +'tog-rememberpassword' => '到箇隻電腦記到偶嗰密碼 (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => '拿偶開嘞嗰頁面加到偶嗰監視列表', 'tog-watchdefault' => '拿偶改嘞嗰頁面加到偶嗰監視列表', 'tog-watchmoves' => '拿偶動嘞嗰頁面加到偶嗰監視列表', @@ -216,31 +215,20 @@ $messages = array( 'faqpage' => 'Project:問得蠻多嗰問題', # Vector skin -'vector-action-addsection' => '添主題', -'vector-action-delete' => '刪吥', -'vector-action-move' => '移吥', -'vector-action-protect' => '護到', -'vector-action-undelete' => '望下刪吥嗰頁面', -'vector-action-unprotect' => '解除保護', -'vector-namespace-category' => '分類', -'vector-namespace-help' => '幫助頁', -'vector-namespace-image' => '檔案', -'vector-namespace-main' => '頁面', -'vector-namespace-media' => '媒體頁', -'vector-namespace-mediawiki' => '介面', -'vector-namespace-project' => '計劃頁', -'vector-namespace-special' => '特別頁', -'vector-namespace-talk' => '談詑', -'vector-namespace-template' => '模板', -'vector-namespace-user' => '用戶頁', -'vector-view-create' => '創建', -'vector-view-edit' => '編輯', -'vector-view-history' => '望下歷史', -'vector-view-view' => '讀', -'vector-view-viewsource' => '望下原始碼', -'actions' => '動作', -'namespaces' => '空間名', -'variants' => '變換', +'vector-action-addsection' => '添主題', +'vector-action-delete' => '刪吥', +'vector-action-move' => '移吥', +'vector-action-protect' => '護到', +'vector-action-undelete' => '望下刪吥嗰頁面', +'vector-action-unprotect' => '解除保護', +'vector-view-create' => '創建', +'vector-view-edit' => '編輯', +'vector-view-history' => '望下歷史', +'vector-view-view' => '讀', +'vector-view-viewsource' => '望下原始碼', +'actions' => '動作', +'namespaces' => '空間名', +'variants' => '變換', 'errorpagetitle' => '錯誤', 'returnto' => '去歸$1。', @@ -449,7 +437,7 @@ $2', 'yourname' => '用戶名:', 'yourpassword' => '密碼:', 'yourpasswordagain' => '輸過道密碼:', -'remembermypassword' => '讓電腦記到密碼', +'remembermypassword' => '讓電腦記到密碼 (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => '倷嗰域名:', 'externaldberror' => '外部驗證資料庫出錯,或倷更新伓正倷嗰外部帳戶。', 'login' => '登入', @@ -466,6 +454,7 @@ $2', 'gotaccount' => "有嘍帳戶? '''$1'''.", 'gotaccountlink' => '登入', 'createaccountmail' => '通過email', +'createaccountreason' => '原因:', 'badretype' => '倷輸嗰密碼伓合。', 'userexists' => '倷輸嗰用戶名係人家嗰,選過隻嘍!', 'loginerror' => '登入錯誤', @@ -600,7 +589,7 @@ $2', 'userjsyoucanpreview' => "'''提示:''' 存到前請用'望吖起'來測吖倷嗰新JS 。", 'usercsspreview' => "'''注意倷單係到預覽倷個人嗰 CSS,內容哈冇保存!'''", 'userjspreview' => "'''注意倷單係到測試/預覽倷個人嗰 JavaScript,內容哈冇保存!'''", -'userinvalidcssjstitle' => "'''警告:''' 冇\"\$1\"嗰皮膚。請記到自定義嗰 .css 同 .js 頁要用小寫。就話,{{ns:user}}:Foo/monobook.css 伓等同 {{ns:user}}:Foo/Monobook.css。", +'userinvalidcssjstitle' => "'''警告:''' 冇\"\$1\"嗰皮膚。請記到自定義嗰 .css 同 .js 頁要用小寫。就話,{{ns:user}}:Foo/vector.css 伓等同 {{ns:user}}:Foo/Vector.css。", 'updated' => '(更新正嘍)', 'note' => "'''注意:'''", 'previewnote' => "'''請記到箇光係預覽,內容哈冇保存!'''", @@ -634,8 +623,6 @@ $2', 'copyrightwarning2' => "請記得別嗰人編得正、改得正或者刪得正倷到{{SITENAME}}嗰全部貢獻。要係倷伓想自家嗰編輯好嚟嚟拕改吥,唉就莫遞交。
    倷都要話正倷嗰文字係倷自家寫嗰,或者係公有領域或別嗰自由資源複製到嗰(望吖$1有別嗰資料)。 '''冇任何許可嗰情況下請莫遞交有版權嗰作品!'''", -'longpagewarning' => "'''警告:箇頁有$1 kilobytes咁長;有嗰瀏覽器會編伓正超吥32 kb嗰頁面。 -請考慮吖拿佢分到細嚸嗰小段落。'''", 'longpageerror' => "'''錯誤:倷遞交嗰文字有$1 kilobytes咁長,佢長過最大嗰$2 kilobytes。存伓正倷遞交嗰文字。'''", 'readonlywarning' => "'''警告: 資料庫鎖到嘞進行定期修護,眼下倷存伓正倷嗰改動。倷可以拿佢存到文檔再著。'''", 'protectedpagewarning' => "'''警告: 箇頁已經受保護,單只管理員許可權嗰用戶才改得正。'''", @@ -990,7 +977,6 @@ $2', 'file-thumbnail-no' => "箇隻檔案名係以'''$1'''開頭。佢好像一隻圖像嗰縮小版''(縮圖)''。如果倷有箇隻圖像嗰完整版,伓然請再改過隻檔名。", 'fileexists-forbidden' => '箇隻檔案名已存在;請回頭並換過隻新嗰名稱來上傳箇隻檔案。[[File:$1|thumb|center|$1]]', 'fileexists-shared-forbidden' => '到共用檔案庫裡度有嘞同名嗰檔案;請回頭並換過隻新嗰名稱來上傳箇隻檔案。[[File:$1|thumb|center|$1]]', -'successfulupload' => '上傳正嘞', 'uploadwarning' => '上傳警告', 'savefile' => '保存檔案', 'uploadedimage' => '上傳正嘞"[[$1]]"', @@ -1008,6 +994,7 @@ $2', 倷要想正係真嗰上傳箇隻檔案。 為到方便起見,箇隻檔案嗰刪除記錄到下底提供嘞:", 'filename-bad-prefix' => "倷上傳嗰檔案名係以'''\"\$1\"'''做開頭嗰,通常箇種冇意義嗰名字係數碼相機度嗰自動編排。請到倷嗰檔案揀過隻更加有意義嗰名字。", +'upload-success-subj' => '上傳正嘞', 'upload-proto-error' => '協定錯誤', 'upload-proto-error-text' => '遠程上傳要求 URL 用 http://ftp:// 開頭。', @@ -1131,7 +1118,6 @@ $2', 'statistics-edits-average' => '每頁嗰平均編輯數', 'statistics-views-total' => '查看嗰統共數', 'statistics-views-peredit' => '每到編輯查看數', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue 工作隊列]嗰長度', 'statistics-users' => '註冊過嗰[[Special:ListUsers|用戶]]', 'statistics-users-active' => '活躍用戶', 'statistics-users-active-desc' => '頭$1日操作過嗰用戶', @@ -1283,7 +1269,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => '監視列表', 'mywatchlist' => '偶嗰監視列表', -'watchlistfor' => "('''$1'''嗰監視列表')", 'nowatchlist' => '倷嗰監視列表什哩都冇有。', 'watchlistanontext' => '請$1眵吖或改吖倷嗰監視列表。', 'watchnologin' => '冇登入', @@ -1376,7 +1361,9 @@ $NEWPAGE 'editcomment' => "編輯介紹: \"''\$1''\"。", 'revertpage' => '返回由[[Special:Contributions/$2|$2]] ([[User talk:$2|對話]])嗰編輯;恢復到[[User:$1|$1]]嗰最末一隻版本', 'rollback-success' => '返回由$1嗰編輯;恢復到$2嗰最末一隻版本。', -'sessionfailure' => '倷嗰登入好像有嚸問題,為到防範未然,箇隻動作拕取消嘞。 + +# Edit tokens +'sessionfailure' => '倷嗰登入好像有嚸問題,為到防範未然,箇隻動作拕取消嘞。 請按吖“後退”再試過囉!', @@ -1538,7 +1525,6 @@ $1', 'ipb-edit-dropdown' => '編寫封鎖原因', 'ipb-unblock-addr' => '解封$1', 'ipb-unblock' => '解封用戶名或IP地址', -'ipb-blocklist-addr' => '望吖$1目前嗰封禁', 'ipb-blocklist' => '望吖目前嗰封禁', 'unblockip' => '解封IP地址', 'unblockiptext' => '用下底嗰表格去恢復早先拕封嗰IP嗰編寫權。', @@ -1877,10 +1863,10 @@ $1', 'imagemaxsize' => '檔案解釋頁嗰圖像大細限制到:', 'thumbsize' => '縮略圖大細:', 'widthheightpage' => '$1×$2,$3頁', -'file-info' => '(檔案大細: $1, MIME 類型: $2)', -'file-info-size' => '($1 × $2 像素,檔案大細:$3 ,MIME類型:$4)', +'file-info' => '檔案大細: $1, MIME 類型: $2', +'file-info-size' => '$1 × $2 像素,檔案大細:$3 ,MIME類型:$4', 'file-nohires' => '冇更高解像度嗰圖像。', -'svg-long-desc' => '(SVG檔案,表面大細: $1 × $2 像素,檔案大細:$3)', +'svg-long-desc' => 'SVG檔案,表面大細: $1 × $2 像素,檔案大細:$3', 'show-big-image' => '完整解析度', 'show-big-image-thumb' => '箇幅縮略圖嗰解析度: $1 × $2 像素', diff --git a/languages/messages/MessagesGd.php b/languages/messages/MessagesGd.php index 56e8b6d4..e37d46a0 100644 --- a/languages/messages/MessagesGd.php +++ b/languages/messages/MessagesGd.php @@ -31,8 +31,7 @@ $messages = array( 'tog-editsection' => 'Cuir am comas deasachadh earainn le ceanglaichean [deasaich]', 'tog-editsectiononrightclick' => "Cuir an comas deasachadh earainn le briogadh deas air tiotal de dh'earrainn (feumaidh seo JavaScript)", 'tog-showtoc' => 'Seall an clàr-innse (air duilleagan air a bheil barrachd air 3 ceann-sgrìobhaidhean)', -'tog-rememberpassword' => "Cuimhnichear air a' choimpiutair seo gu bheil mi air logadh a-steach", -'tog-editwidth' => 'Leudaich am bogsa deasachaidh air fad na sgrìn', +'tog-rememberpassword' => "Cuimhnich gu bheil mi air logadh a-steach air a' choimpiutair seo (suas gu $1 {{PLURAL:$1|latha|latha|latha|latha|làithean|latha}})", 'tog-watchcreations' => 'Cuir duilleagan a chruthaicheas mi air mo chlàr-faire', 'tog-watchdefault' => 'Cuir duilleagan a dheasaicheas mi air mo chlàr-faire', 'tog-watchmoves' => 'Cuir duilleagan a ghluaiseas mi air mo chlàr-faire', @@ -173,31 +172,20 @@ $messages = array( 'faqpage' => 'Project:CÀBHA', # Vector skin -'vector-action-addsection' => 'Cuir ris cuspair', -'vector-action-delete' => 'Sguab às', -'vector-action-move' => 'Gluais', -'vector-action-protect' => 'Dìon', -'vector-action-undelete' => 'Neo-dhèan an sguabadh às', -'vector-action-unprotect' => 'Neo-dhìon', -'vector-namespace-category' => 'Roinn', -'vector-namespace-help' => 'An duilleag cobharach', -'vector-namespace-image' => 'Faidhle', -'vector-namespace-main' => 'Duilleag', -'vector-namespace-media' => 'Duilleag mheadhanan', -'vector-namespace-mediawiki' => 'Teachdaireachd', -'vector-namespace-project' => "Duilleag a' phròiseict", -'vector-namespace-special' => 'Duilleag shònraichte', -'vector-namespace-talk' => 'Deasbaireachd', -'vector-namespace-template' => 'Teamplaid', -'vector-namespace-user' => "Duilleag a' chleachdaiche", -'vector-view-create' => 'Cruthaich', -'vector-view-edit' => 'Deasaich', -'vector-view-history' => 'Seall an eachdraidh', -'vector-view-view' => 'Leugh', -'vector-view-viewsource' => 'Seall an tùs', -'actions' => 'Gnìomhan', -'namespaces' => 'Namespaces', -'variants' => 'Tionndaidhean', +'vector-action-addsection' => 'Cuir ris cuspair', +'vector-action-delete' => 'Sguab às', +'vector-action-move' => 'Gluais', +'vector-action-protect' => 'Dìon', +'vector-action-undelete' => 'Neo-dhèan an sguabadh às', +'vector-action-unprotect' => 'Neo-dhìon', +'vector-view-create' => 'Cruthaich', +'vector-view-edit' => 'Deasaich', +'vector-view-history' => 'Seall an eachdraidh', +'vector-view-view' => 'Leugh', +'vector-view-viewsource' => 'Seall an tùs', +'actions' => 'Gnìomhan', +'namespaces' => 'Namespaces', +'variants' => 'Tionndaidhean', 'errorpagetitle' => 'Mearachd', 'returnto' => 'Till dhan duilleag a leanas: $1', @@ -416,7 +404,7 @@ Na dìochuimhnich na [[Special:Preferences|roghainnean agad air {{SITENAME}}]] a 'yourname' => 'Ainm-cleachdaiche:', 'yourpassword' => 'Am facal-faire agad', 'yourpasswordagain' => 'Ath-sgrìobh facal-faire', -'remembermypassword' => 'Cuimhnichear air a’ choimpiutair seo gu bheil mi logged a-stigh', +'remembermypassword' => "Cuimhnich gu bheil mi air logadh a-steach air a' choimpiutair seo (suas gu $1 {{PLURAL:$1|latha|làithean}})", 'login' => 'Log a-steach', 'nav-login-createaccount' => 'Log a-steach / cruthaich cunntas', 'userlogin' => 'Log a-steach / cruthaich cunntas', @@ -763,7 +751,6 @@ Thoir sùil air na [[Special:WantedCategories|roinntean-seòrsa a thathar 'gan i # Watchlist 'watchlist' => 'Mo chlàr-faire', 'mywatchlist' => 'Mo chlàr-faire', -'watchlistfor' => "(do '''$1''')", 'nowatchlist' => "Chan eil rud sam bith air a' chlàr-fhaire agad.", 'addedwatch' => 'Air a chur ri do chlàr-faire', 'addedwatchtext' => "Chaidh an duilleag \"[[:\$1]]\" a chur ri [[Special:Watchlist|do chlàr-faire]]. @@ -899,7 +886,7 @@ Seo roghainnean làithreach na duilleige '''$1''':",
    Faic [[Special:IPBlockList|Liosta nan IP baicte]] na bacaidhean a dh'ath-sgrùdadh.", 'unblockip' => 'Neo-bhac an cleachdaiche', 'ipusubmit' => 'Thoir air falbh am bacadh seo', -'ipblocklist' => 'Liosta de sheòlaidhean IP is ainmean chleachdaichean a chaidh a bhacadh', +'ipblocklist' => 'Cleachdaichean a chaidh a bhacadh', 'blocklink' => 'bac', 'unblocklink' => 'neo-bhac', 'change-blocklink' => 'mùth bacadh', @@ -1047,9 +1034,9 @@ Tadhail air [http://www.mediawiki.org/wiki/Localisation Ionadaileadh MediaWiki] 'nextdiff' => 'Deasachadh nas ùire →', # Media information -'file-info-size' => '($1 × $2 pixel, meud an fhaidhle: $3, seòrsa MIME: $4)', +'file-info-size' => '$1 × $2 pixel, meud an fhaidhle: $3, seòrsa MIME: $4', 'file-nohires' => 'Chan eil dùmhlachd-bhreacaidh nas fhearr ri fhaighinn.', -'svg-long-desc' => '(Faidhle SVG, a-rèir ainm $1 × $2 pixel, meud faidhle: $3)', +'svg-long-desc' => 'Faidhle SVG, a-rèir ainm $1 × $2 pixel, meud faidhle: $3', 'show-big-image' => 'Dùmhlachd-bhreacaidh shlàn', 'show-big-image-thumb' => 'Meud an ro-sheallaidh seo: $1 × $2 pixel', diff --git a/languages/messages/MessagesGl.php b/languages/messages/MessagesGl.php index dd145f81..f2bc3178 100644 --- a/languages/messages/MessagesGl.php +++ b/languages/messages/MessagesGl.php @@ -55,93 +55,97 @@ $dateFormats = array( ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'Redireccións dobres' ), - 'BrokenRedirects' => array( 'Redireccións rotas' ), + 'DoubleRedirects' => array( 'Redireccións_dobres' ), + 'BrokenRedirects' => array( 'Redireccións_rotas' ), 'Disambiguations' => array( 'Homónimos' ), 'Userlogin' => array( 'Rexistro' ), - 'Userlogout' => array( 'Saír ao anonimato' ), - 'CreateAccount' => array( 'Crear unha conta' ), + 'Userlogout' => array( 'Saír_ao_anonimato' ), + 'CreateAccount' => array( 'Crear_unha_conta' ), 'Preferences' => array( 'Preferencias' ), - 'Watchlist' => array( 'Lista de vixilancia' ), - 'Recentchanges' => array( 'Cambios recentes' ), + 'Watchlist' => array( 'Lista_de_vixilancia' ), + 'Recentchanges' => array( 'Cambios_recentes' ), 'Upload' => array( 'Cargar' ), - 'Listfiles' => array( 'Lista de imaxes' ), - 'Newimages' => array( 'Imaxes novas' ), - 'Listusers' => array( 'Lista de usuarios' ), - 'Listgrouprights' => array( 'Lista de dereitos segundo o grupo' ), + 'Listfiles' => array( 'Lista_de_imaxes' ), + 'Newimages' => array( 'Imaxes_novas' ), + 'Listusers' => array( 'Lista_de_usuarios' ), + 'Listgrouprights' => array( 'Lista_de_dereitos_segundo_o_grupo' ), 'Statistics' => array( 'Estatísticas' ), - 'Randompage' => array( 'Ao chou', 'Páxina aleatoria' ), - 'Lonelypages' => array( 'Páxinas orfas' ), - 'Uncategorizedpages' => array( 'Páxinas sen categoría' ), - 'Uncategorizedcategories' => array( 'Categorías sen categoría' ), - 'Uncategorizedimages' => array( 'Imaxes sen categoría' ), - 'Uncategorizedtemplates' => array( 'Modelos sen categoría' ), - 'Unusedcategories' => array( 'Categorías sen uso' ), - 'Unusedimages' => array( 'Imaxes sen uso' ), - 'Wantedpages' => array( 'Páxinas requiridas', 'Ligazóns rotas' ), - 'Wantedcategories' => array( 'Categorías requiridas' ), - 'Wantedfiles' => array( 'Ficheiros requiridos' ), - 'Wantedtemplates' => array( 'Modelos requiridos' ), - 'Mostlinked' => array( 'Páxinas máis ligadas' ), - 'Mostlinkedcategories' => array( 'Categorías máis ligadas' ), - 'Mostlinkedtemplates' => array( 'Modelos máis enlazados' ), - 'Mostimages' => array( 'Máis imaxes' ), - 'Mostcategories' => array( 'Máis categorías' ), - 'Mostrevisions' => array( 'Máis revisións' ), - 'Fewestrevisions' => array( 'Menos revisións' ), - 'Shortpages' => array( 'Páxinas curtas' ), - 'Longpages' => array( 'Páxinas longas' ), - 'Newpages' => array( 'Páxinas novas' ), - 'Ancientpages' => array( 'Páxinas máis antigas' ), - 'Deadendpages' => array( 'Páxinas mortas' ), - 'Protectedpages' => array( 'Páxinas protexidas' ), - 'Protectedtitles' => array( 'Títulos protexidos' ), - 'Allpages' => array( 'Todas as páxinas' ), - 'Prefixindex' => array( 'Índice de prefixos' ), - 'Ipblocklist' => array( 'Lista dos bloqueos a enderezos IP' ), - 'Specialpages' => array( 'Páxinas especiais' ), + 'Randompage' => array( 'Ao_chou', 'Páxina_aleatoria' ), + 'Lonelypages' => array( 'Páxinas_orfas' ), + 'Uncategorizedpages' => array( 'Páxinas_sen_categoría' ), + 'Uncategorizedcategories' => array( 'Categorías_sen_categoría' ), + 'Uncategorizedimages' => array( 'Imaxes_sen_categoría' ), + 'Uncategorizedtemplates' => array( 'Modelos_sen_categoría' ), + 'Unusedcategories' => array( 'Categorías_sen_uso' ), + 'Unusedimages' => array( 'Imaxes_sen_uso' ), + 'Wantedpages' => array( 'Páxinas_requiridas', 'Ligazóns_rotas' ), + 'Wantedcategories' => array( 'Categorías_requiridas' ), + 'Wantedfiles' => array( 'Ficheiros_requiridos' ), + 'Wantedtemplates' => array( 'Modelos_requiridos' ), + 'Mostlinked' => array( 'Páxinas_máis_ligadas' ), + 'Mostlinkedcategories' => array( 'Categorías_máis_ligadas' ), + 'Mostlinkedtemplates' => array( 'Modelos_máis_ligados' ), + 'Mostimages' => array( 'Ficheiros_máis_ligados' ), + 'Mostcategories' => array( 'Páxinas_con_máis_categorías' ), + 'Mostrevisions' => array( 'Páxinas_con_máis_revisións' ), + 'Fewestrevisions' => array( 'Páxinas_con_menos_revisións' ), + 'Shortpages' => array( 'Páxinas_curtas' ), + 'Longpages' => array( 'Páxinas_longas' ), + 'Newpages' => array( 'Páxinas_novas' ), + 'Ancientpages' => array( 'Páxinas_máis_antigas' ), + 'Deadendpages' => array( 'Páxinas_mortas' ), + 'Protectedpages' => array( 'Páxinas_protexidas' ), + 'Protectedtitles' => array( 'Títulos_protexidos' ), + 'Allpages' => array( 'Todas_as_páxinas' ), + 'Prefixindex' => array( 'Índice_de_prefixos' ), + 'Ipblocklist' => array( 'Lista_de_bloqueos', 'Lista_dos_bloqueos_a_enderezos_IP' ), + 'Unblock' => array( 'Desbloquear' ), + 'Specialpages' => array( 'Páxinas_especiais' ), 'Contributions' => array( 'Contribucións' ), - 'Emailuser' => array( 'Correo electrónico de usuario' ), - 'Confirmemail' => array( 'Confirmar correo electrónico' ), - 'Whatlinkshere' => array( 'Páxinas que ligan con esta' ), - 'Recentchangeslinked' => array( 'Cambios relacionados' ), - 'Movepage' => array( 'Mover páxina' ), + 'Emailuser' => array( 'Correo_electrónico' ), + 'Confirmemail' => array( 'Confirmar_o_correo_electrónico' ), + 'Whatlinkshere' => array( 'Páxinas_que_ligan_con_esta' ), + 'Recentchangeslinked' => array( 'Cambios_relacionados' ), + 'Movepage' => array( 'Mover_a_páxina' ), 'Blockme' => array( 'Bloquearme' ), - 'Booksources' => array( 'Fontes bibliográficas' ), + 'Booksources' => array( 'Fontes_bibliográficas' ), 'Categories' => array( 'Categorías' ), 'Export' => array( 'Exportar' ), 'Version' => array( 'Versión' ), - 'Allmessages' => array( 'Todas as mensaxes' ), + 'Allmessages' => array( 'Todas_as_mensaxes' ), 'Log' => array( 'Rexistros' ), - 'Blockip' => array( 'Bloquear enderezo IP' ), + 'Blockip' => array( 'Bloquear', 'Bloquear_o_enderezo_IP', 'Bloquear_o_usuario' ), 'Undelete' => array( 'Restaurar' ), 'Import' => array( 'Importar' ), - 'Lockdb' => array( 'Pechar a base de datos' ), - 'Unlockdb' => array( 'Abrir a base de datos' ), - 'Userrights' => array( 'Dereitos de usuario' ), - 'MIMEsearch' => array( 'Procura MIME' ), - 'FileDuplicateSearch' => array( 'Procura de ficheiros duplicados' ), - 'Unwatchedpages' => array( 'Páxinas sen vixiar' ), - 'Listredirects' => array( 'Lista de redireccións' ), - 'Revisiondelete' => array( 'Revisións borradas' ), - 'Unusedtemplates' => array( 'Modelos non usados' ), - 'Randomredirect' => array( 'Redirección aleatoria' ), - 'Mypage' => array( 'A miña páxina de usuario' ), - 'Mytalk' => array( 'A miña conversa' ), - 'Mycontributions' => array( 'As miñas contribucións' ), - 'Listadmins' => array( 'Lista de administradores' ), - 'Listbots' => array( 'Lista de bots' ), - 'Popularpages' => array( 'Páxinas populares' ), + 'Lockdb' => array( 'Pechar_a_base_de_datos' ), + 'Unlockdb' => array( 'Abrir_a_base_de_datos' ), + 'Userrights' => array( 'Dereitos_de_usuario' ), + 'MIMEsearch' => array( 'Procura_MIME' ), + 'FileDuplicateSearch' => array( 'Procura_de_ficheiros_duplicados' ), + 'Unwatchedpages' => array( 'Páxinas_sen_vixiar' ), + 'Listredirects' => array( 'Lista_de_redireccións' ), + 'Revisiondelete' => array( 'Revisións_borradas' ), + 'Unusedtemplates' => array( 'Modelos_non_usados' ), + 'Randomredirect' => array( 'Redirección_aleatoria' ), + 'Mypage' => array( 'A_miña_páxina_de_usuario' ), + 'Mytalk' => array( 'A_miña_conversa' ), + 'Mycontributions' => array( 'As_miñas_contribucións' ), + 'Listadmins' => array( 'Lista_de_administradores' ), + 'Listbots' => array( 'Lista_de_bots' ), + 'Popularpages' => array( 'Páxinas_populares' ), 'Search' => array( 'Procurar' ), - 'Resetpass' => array( 'Cambiar contrasinal' ), - 'Withoutinterwiki' => array( 'Sen interwiki' ), - 'MergeHistory' => array( 'Fusionar Historiais' ), - 'Filepath' => array( 'Enderezo de ficheiro' ), - 'Invalidateemail' => array( 'Invalidar o enderezo de correo electrónico' ), - 'Blankpage' => array( 'Baleirar a páxina' ), - 'LinkSearch' => array( 'Buscar ligazóns web' ), - 'DeletedContributions' => array( 'Contribucións borradas' ), + 'Resetpass' => array( 'Cambiar_o_contrasinal' ), + 'Withoutinterwiki' => array( 'Sen_interwiki' ), + 'MergeHistory' => array( 'Fusionar_os_historiais' ), + 'Filepath' => array( 'Ruta_do_ficheiro' ), + 'Invalidateemail' => array( 'Invalidar_o_enderezo_de_correo_electrónico' ), + 'Blankpage' => array( 'Baleirar_a_páxina' ), + 'LinkSearch' => array( 'Buscar_ligazóns_web' ), + 'DeletedContributions' => array( 'Contribucións_borradas' ), 'Tags' => array( 'Etiquetas' ), + 'Activeusers' => array( 'Usuarios_activos' ), + 'ComparePages' => array( 'Comparar_as_páxinas' ), + 'Badtitle' => array( 'Título_incorrecto' ), ); $magicWords = array( @@ -149,9 +153,11 @@ $magicWords = array( 'notoc' => array( '0', '__SENÍNDICE__', '__SEMTDC__', '__SEMSUMÁRIO__', '__NOTOC__' ), 'nogallery' => array( '0', '__SENGALERÍA__', '__SEMGALERIA__', '__NOGALLERY__' ), 'forcetoc' => array( '0', '__FORZAROÍNDICE__', '__FORCARTDC__', '__FORCARSUMARIO__', '__FORÇARTDC__', '__FORÇARSUMÁRIO__', '__FORCETOC__' ), - 'toc' => array( '0', '__Índice__', '__TDC__', '__SUMÁRIO__', '__TOC__' ), + 'toc' => array( '0', '__ÍNDICE__', '__TDC__', '__SUMÁRIO__', '__TOC__' ), 'noeditsection' => array( '0', '__SECCIÓNSNONEDITABLES__', '__NÃOEDITARSEÇÃO__', '__SEMEDITARSEÇÃO__', '__NOEDITSECTION__' ), + 'noheader' => array( '0', '___SENCABECEIRA__', '__SEMCABECALHO__', '__SEMCABEÇALHO__', '__SEMTITULO__', '__SEMTÍTULO__', '__NOHEADER__' ), 'currentmonth' => array( '1', 'MESACTUAL', 'MESATUAL', 'MESATUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ), + 'currentmonth1' => array( '1', 'MESACTUAL1', 'MESATUAL1', 'CURRENTMONTH1' ), 'currentmonthname' => array( '1', 'NOMEDOMESACTUAL', 'NOMEDOMESATUAL', 'CURRENTMONTHNAME' ), 'currentmonthabbrev' => array( '1', 'ABREVIATURADOMESACTUAL', 'MESATUALABREV', 'MESATUALABREVIADO', 'ABREVIATURADOMESATUAL', 'CURRENTMONTHABBREV' ), 'currentday' => array( '1', 'DÍAACTUAL', 'DIAATUAL', 'CURRENTDAY' ), @@ -160,6 +166,7 @@ $magicWords = array( 'currentyear' => array( '1', 'ANOACTUAL', 'ANOATUAL', 'CURRENTYEAR' ), 'currenthour' => array( '1', 'HORAACTUAL', 'HORAATUAL', 'CURRENTHOUR' ), 'localmonth' => array( '1', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ), + 'localmonth1' => array( '1', 'MESLOCAL1', 'LOCALMONTH1' ), 'localmonthname' => array( '1', 'NOMEDOMESLOCAL', 'LOCALMONTHNAME' ), 'localmonthabbrev' => array( '1', 'ABREVIATURADOMESLOCAL', 'MESLOCALABREV', 'MESLOCALABREVIADO', 'LOCALMONTHABBREV' ), 'localday' => array( '1', 'DÍALOCAL', 'DIALOCAL', 'LOCALDAY' ), @@ -178,13 +185,13 @@ $magicWords = array( 'subpagename' => array( '1', 'NOMEDASUBPÁXINA', 'NOMEDASUBPAGINA', 'NOMEDASUBPÁGINA', 'SUBPAGENAME' ), 'basepagename' => array( '1', 'NOMEDAPÁXINABASE', 'NOMEDAPAGINABASE', 'NOMEDAPÁGINABASE', 'BASEPAGENAME' ), 'talkpagename' => array( '1', 'NOMEDAPÁXINADECONVERSA', 'NOMEDAPAGINADEDISCUSSAO', 'NOMEDAPÁGINADEDISCUSSÃO', 'TALKPAGENAME' ), - 'img_manualthumb' => array( '1', 'miniatura=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ), + 'img_manualthumb' => array( '1', 'miniatura=$1', 'miniaturadaimagem=$1', 'thumbnail=$1', 'thumb=$1' ), 'img_right' => array( '1', 'dereita', 'direita', 'right' ), 'img_left' => array( '1', 'esquerda', 'left' ), 'img_none' => array( '1', 'ningún', 'nenhum', 'none' ), 'img_center' => array( '1', 'centro', 'center', 'centre' ), 'img_page' => array( '1', 'páxina=$1', 'páxina $1', 'página=$1', 'página $1', 'page=$1', 'page $1' ), - 'img_border' => array( '1', 'borde', 'borda', 'border' ), + 'img_border' => array( '1', 'bordo', 'borda', 'border' ), 'grammar' => array( '0', 'GRAMÁTICA:', 'GRAMMAR:' ), 'displaytitle' => array( '1', 'AMOSAROTÍTULO', 'EXIBETITULO', 'EXIBETÍTULO', 'DISPLAYTITLE' ), 'newsectionlink' => array( '1', '__LIGAZÓNDANOVASECCIÓN__', '__LINKDENOVASECAO__', '__LINKDENOVASEÇÃO__', '__LIGACAODENOVASECAO__', '__LIGAÇÃODENOVASEÇÃO__', '__NEWSECTIONLINK__' ), @@ -197,7 +204,7 @@ $magicWords = array( 'pagesize' => array( '1', 'TAMAÑODAPÁXINA', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ), ); -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $messages = array( # User preference toggles @@ -215,8 +222,7 @@ $messages = array( 'tog-editsection' => 'Permitir a edición de seccións vía as ligazóns [editar]', 'tog-editsectiononrightclick' => 'Permitir a edición de seccións premendo co botón dereito
    nos títulos das seccións (JavaScript)', 'tog-showtoc' => 'Mostrar o índice (para páxinas con máis de tres cabeceiras)', -'tog-rememberpassword' => 'Lembrar o meu contrasinal neste ordenador', -'tog-editwidth' => 'Alargar a caixa de edición para encher toda a pantalla', +'tog-rememberpassword' => 'Lembrar o meu contrasinal neste navegador (ata $1 {{PLURAL:$1|día|días}})', 'tog-watchcreations' => 'Engadir as páxinas creadas por min á miña lista de artigos vixiados', 'tog-watchdefault' => 'Engadir as páxinas que edite á miña lista de vixilancia', 'tog-watchmoves' => 'Engadir as páxinas que mova á miña lista de vixilancia', @@ -362,31 +368,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Engadir un comentario', -'vector-action-delete' => 'Borrar', -'vector-action-move' => 'Mover', -'vector-action-protect' => 'Protexer', -'vector-action-undelete' => 'Restaurar', -'vector-action-unprotect' => 'Desprotexer', -'vector-namespace-category' => 'Categoría', -'vector-namespace-help' => 'Páxina de axuda', -'vector-namespace-image' => 'Ficheiro', -'vector-namespace-main' => 'Páxina', -'vector-namespace-media' => 'Páxina de multimedia', -'vector-namespace-mediawiki' => 'Mensaxe', -'vector-namespace-project' => 'Páxina do proxecto', -'vector-namespace-special' => 'Páxina especial', -'vector-namespace-talk' => 'Conversa', -'vector-namespace-template' => 'Modelo', -'vector-namespace-user' => 'Páxina de usuario', -'vector-view-create' => 'Crear', -'vector-view-edit' => 'Editar', -'vector-view-history' => 'Ver o historial', -'vector-view-view' => 'Ler', -'vector-view-viewsource' => 'Ver o código fonte', -'actions' => 'Accións', -'namespaces' => 'Espazos de nomes', -'variants' => 'Variantes', +'vector-action-addsection' => 'Engadir un comentario', +'vector-action-delete' => 'Borrar', +'vector-action-move' => 'Mover', +'vector-action-protect' => 'Protexer', +'vector-action-undelete' => 'Restaurar', +'vector-action-unprotect' => 'Desprotexer', +'vector-simplesearch-preference' => 'Activar as suxestións de procura melloradas (soamente na aparencia vector)', +'vector-view-create' => 'Crear', +'vector-view-edit' => 'Editar', +'vector-view-history' => 'Ver o historial', +'vector-view-view' => 'Ler', +'vector-view-viewsource' => 'Ver o código fonte', +'actions' => 'Accións', +'namespaces' => 'Espazos de nomes', +'variants' => 'Variantes', 'errorpagetitle' => 'Erro', 'returnto' => 'Volver a "$1".', @@ -447,6 +443,9 @@ Hai moitos usuarios intentando ver esta páxina. Por favor, agarde un anaco antes de intentar acceder á páxina de novo. $1', +'pool-timeout' => 'Tempo límite de espera para o peche', +'pool-queuefull' => 'A cola está chea', +'pool-errorunknown' => 'Erro descoñecido', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Acerca de {{SITENAME}}', @@ -613,12 +612,13 @@ Non esqueza personalizar as súas [[Special:Preferences|preferencias de {{SITENA 'yourname' => 'Nome de usuario:', 'yourpassword' => 'Contrasinal:', 'yourpasswordagain' => 'Insira o seu contrasinal outra vez:', -'remembermypassword' => 'Lembrar o meu contrasinal neste ordenador', +'remembermypassword' => 'Lembrar o meu contrasinal neste ordenador (ata $1 {{PLURAL:$1|día|días}})', +'securelogin-stick-https' => 'Permanecer conectado mediante as HTTPS despois de acceder', 'yourdomainname' => 'O seu dominio', 'externaldberror' => 'Ou ben se produciu un erro da base de datos na autenticación externa ou ben non se lle permite actualizar a súa conta externa.', 'login' => 'Acceder ao sistema', 'nav-login-createaccount' => 'Rexistro', -'loginprompt' => "Debe habilitar as ''cookies'' para acceder a {{SITENAME}}.", +'loginprompt' => 'Debe habilitar as cookies para acceder a {{SITENAME}}.', 'userlogin' => 'Rexistro', 'userloginnocreate' => 'Rexistro', 'logout' => 'Saír ao anonimato', @@ -630,6 +630,7 @@ Non esqueza personalizar as súas [[Special:Preferences|preferencias de {{SITENA 'gotaccount' => "Xa ten unha conta? '''$1'''.", 'gotaccountlink' => 'Acceda ao sistema', 'createaccountmail' => 'Por correo electrónico', +'createaccountreason' => 'Motivo:', 'badretype' => 'Os contrasinais que inseriu non coinciden entre si.', 'userexists' => 'O nome de usuario que pretende usar xa está en uso. Escolla un nome diferente.', @@ -658,6 +659,7 @@ Por favor, insira outro.', Por favor, inténteo de novo.', 'passwordtooshort' => 'Os contrasinais deben conter, como mínimo, {{PLURAL:$1|1 carácter|$1 caracteres}}.', 'password-name-match' => 'O seu contrasinal debe ser diferente do seu nome de usuario.', +'password-login-forbidden' => 'O uso deste nome de usuario e contrasinal foi prohibido.', 'mailmypassword' => 'Enviádeme un contrasinal novo por correo', 'passwordremindertitle' => 'Novo contrasinal temporal para {{SITENAME}}', 'passwordremindertext' => 'Alguén (probablemente vostede, desde o enderezo IP $1) solicitou un novo @@ -700,6 +702,9 @@ Por favor, agarde antes de probar outra vez.', 'loginlanguagelabel' => 'Lingua: $1', 'suspicious-userlogout' => 'Rexeitouse a súa petición de saír do sistema porque semella que a enviou un navegador roto ou a caché dun proxy.', +# E-mail sending +'php-mail-error-unknown' => 'Erro descoñecido na función mail() do PHP', + # Password reset dialog 'resetpass' => 'Cambiar o contrasinal', 'resetpass_announce' => 'Debe rexistrarse co código temporal que recibiu por correo electrónico. Para finalizar o rexistro debe indicar un novo contrasinal aquí:', @@ -750,13 +755,14 @@ Pode ser que xa cambiase o seu contrasinal ou que solicitase un novo contrasinal 'showpreview' => 'Mostrar a vista previa', 'showlivepreview' => 'Vista previa', 'showdiff' => 'Mostrar os cambios', -'anoneditwarning' => "'''Aviso:''' non accedeu ao sistema. +'anoneditwarning' => "'''Aviso:''' Non accedeu ao sistema. O seu enderezo IP quedará rexistrado no historial de revisións desta páxina.", +'anonpreviewwarning' => "''Non accedeu ao sistema. Se garda a páxina, o seu enderezo IP quedará rexistrado no historial de edicións.''", 'missingsummary' => "'''Aviso:''' esqueceu incluír o texto do campo resumo. Se preme en \"Gardar a páxina\" a súa edición gardarase sen ningunha descrición da edición.", 'missingcommenttext' => 'Por favor, escriba un comentario a continuación.', -'missingcommentheader' => "'''Aviso:''' non escribiu ningún texto no asunto/cabeceira deste comentario. -Se preme en \"Gardar a páxina\", a súa edición gardarase sen el.", +'missingcommentheader' => "'''Aviso:''' non escribiu ningún texto no asunto/título deste comentario. +Se preme sobre \"{{int:savearticle}}\", a súa edición gardarase sen el.", 'summary-preview' => 'Vista previa do resumo:', 'subject-preview' => 'Vista previa do asunto/título:', 'blockedtitle' => 'O usuario está bloqueado', @@ -831,8 +837,12 @@ Velaquí está a última entrada do rexistro de bloqueos, por se quere consultal '''Este aínda non foi gardado!'''", 'userjspreview' => "'''Lembre que só está probando/previsualizando o seu JavaScript de usuario.''' '''Este aínda non foi gardado!'''", +'sitecsspreview' => "'''Lembre que só está vendo a vista previa deste CSS.''' +'''Este aínda non foi gardado!'''", +'sitejspreview' => "'''Lembre que só está vendo a vista previa deste código JavaScript.''' +'''Este aínda non foi gardado!'''", 'userinvalidcssjstitle' => "'''Aviso:''' non hai ningún tema chamado \"\$1\". -Lembre que as páxinas .css e .js personalizadas utilizan un título en minúsculas, como por exemplo {{ns:user}}:Foo/monobook.css no canto de {{ns:user}}:Foo/Monobook.css.", +Lembre que as páxinas .css e .js personalizadas utilizan un título en minúsculas, como por exemplo {{ns:user}}:Foo/vector.css no canto de {{ns:user}}:Foo/Vector.css.", 'updated' => '(Actualizado)', 'note' => "'''Nota:'''", 'previewnote' => "'''Lembre que esta é só unha vista previa e que aínda non gardou os seus cambios!'''", @@ -871,9 +881,6 @@ Ao mesmo tempo, prométanos que o que escribiu é da súa autoría ou que está 'copyrightwarning2' => "Por favor, decátese de que todas as súas contribucións a {{SITENAME}} poden ser editadas, alteradas ou eliminadas por outras persoas. Se non quere que os seus escritos sexan editados sen piedade, non os publique aquí.
    Do mesmo xeito, comprométese a que o que vostede escriba sexa da súa autoría ou copiado dunha fonte de dominio público ou recurso público semellante (vexa $1 para detalles). '''NON ENVÍE SEN PERMISO TRABALLOS CON DEREITOS DE COPIA!'''", -'longpagewarning' => "'''ATENCIÓN: esta páxina ten $1 kilobytes; -algúns navegadores poden ter problemas editando páxinas de 32kb ou máis. -Por favor, considere partir a páxina en seccións máis pequenas.'''", 'longpageerror' => "'''Erro: o texto que pretende gardar ocupa $1 kilobytes, e existe un límite dun máximo de $2 kilobytes.''' Polo tanto, non se pode gardar.", 'readonlywarning' => "'''ATENCIÓN: a base de datos foi fechada para facer mantemento, polo que non vai poder gardar as súas edicións polo de agora. @@ -1053,6 +1060,8 @@ $1", 'logdelete-failure' => "'''A visibilidade do rexistro non pode ser fixada:''' $1", 'revdel-restore' => 'cambiar a visibilidade', +'revdel-restore-deleted' => 'revisións borradas', +'revdel-restore-visible' => 'revisións visibles', 'pagehist' => 'Historial da páxina', 'deletedhist' => 'Historial de borrado', 'revdelete-content' => 'o contido', @@ -1120,11 +1129,13 @@ Asegúrese de que esta modificación da páxina mantén a continuidade históric # Diffs 'history-title' => 'Historial de revisións de "$1"', 'difference' => '(Diferenzas entre revisións)', +'difference-multipage' => '(Diferenzas entre páxinas)', 'lineno' => 'Liña $1:', 'compareselectedversions' => 'Comparar as versións seleccionadas', 'showhideselectedversions' => 'Mostrar/Agochar as versións seleccionadas', 'editundo' => 'desfacer', -'diff-multi' => '(Non se {{PLURAL:$1|mostra unha revisión|mostran $1 revisións}} do historial.)', +'diff-multi' => '(Non se {{PLURAL:$1|mostra unha revisión|mostran $1 revisións}} do historial {{PLURAL:$1|feita|feitas}} por {{PLURAL:$2|un usuario|$2 usuarios}}.)', +'diff-multi-manyusers' => '(Non se {{PLURAL:$1|mostra unha revisión|mostran $1 revisións}} do historial {{PLURAL:$1|feita|feitas}} por máis {{PLURAL:$2|dun usuario|de $2 usuarios}}.)', # Search results 'searchresults' => 'Resultados da procura', @@ -1159,6 +1170,7 @@ Asegúrese de que esta modificación da páxina mantén a continuidade históric 'searchprofile-everything-tooltip' => 'Procurar en todo o contido (incluíndo páxinas de conversa)', 'searchprofile-advanced-tooltip' => 'Procurar nos espazos de nomes elixidos', 'search-result-size' => '$1 ({{PLURAL:$2|1 palabra|$2 palabras}})', +'search-result-category-size' => '{{PLURAL:$1|1 membro|$1 membros}} ({{PLURAL:$2|1 subcategoría|$2 subcategorías}}, {{PLURAL:$3|1 ficheiro|$3 ficheiros}})', 'search-result-score' => 'Relevancia: $1%', 'search-redirect' => '(redirixido desde "$1")', 'search-section' => '(sección "$1")', @@ -1236,6 +1248,7 @@ Note que os seus índices do contido de {{SITENAME}} poden estar desactualizados 'contextlines' => 'Número de liñas por resultado:', 'contextchars' => 'Número de caracteres de contexto por liña:', 'stub-threshold' => 'Límite superior para o formato de ligazóns de bosquexo (bytes):', +'stub-threshold-disabled' => 'Desactivado', 'recentchangesdays' => 'Número de días a mostrar nos cambios recentes:', 'recentchangesdays-max' => '(máximo {{PLURAL:$1|un día|$1 días}})', 'recentchangescount' => 'Número de edicións a mostrar por defecto:', @@ -1269,6 +1282,7 @@ Velaquí un valor xerado ao chou que pode usar: $1', 'prefs-files' => 'Ficheiros', 'prefs-custom-css' => 'CSS personalizado', 'prefs-custom-js' => 'JS personalizado', +'prefs-common-css-js' => 'CSS/JS compartido por todas as aparencias:', 'prefs-reset-intro' => 'Pode usar esta páxina para restablecer as súas preferencias ás que veñen dadas por defecto. Este cambio non se poderá desfacer.', 'prefs-emailconfirm-label' => 'Confirmación do correo:', @@ -1306,9 +1320,15 @@ Tamén pode deixar que outras persoas se poñan en contacto con vostede desde a 'prefs-advancedrendering' => 'Opcións avanzadas', 'prefs-advancedsearchoptions' => 'Opcións avanzadas', 'prefs-advancedwatchlist' => 'Opcións avanzadas', -'prefs-display' => 'Opcións de visualización', +'prefs-displayrc' => 'Opcións de visualización', +'prefs-displaysearchoptions' => 'Opcións de visualización', +'prefs-displaywatchlist' => 'Opcións de visualización', 'prefs-diffs' => 'Diferenzas', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'O enderezo de correo electrónico semella válido', +'email-address-validity-invalid' => 'Escriba un enderezo de correo electrónico válido', + # User rights 'userrights' => 'Xestión dos dereitos de usuario', 'userrights-lookup-user' => 'Administrar os grupos do usuario', @@ -1392,6 +1412,7 @@ Tamén pode deixar que outras persoas se poñan en contacto con vostede desde a 'right-hideuser' => 'Bloquear un usuario, agochándollo ao público', 'right-ipblock-exempt' => 'Evitar bloqueos de IPs, autobloqueos e bloqueos de rango', 'right-proxyunbannable' => 'Evitar os bloqueos autamáticos a proxies', +'right-unblockself' => 'Desbloqueárense a si mesmos', 'right-protect' => 'Trocar os niveis de protección e editar páxinas protexidas', 'right-editprotected' => 'Editar páxinas protexidas (que non teñan protección en serie)', 'right-editinterface' => 'Editar a interface de usuario', @@ -1414,7 +1435,6 @@ Tamén pode deixar que outras persoas se poñan en contacto con vostede desde a 'right-siteadmin' => 'Fechar e abrir a base de datos', 'right-reset-passwords' => 'Restablecer os contrasinais doutros usuarios', 'right-override-export-depth' => 'Exportar páxinas incluíndo as páxinas ligadas ata unha profundidade de 5', -'right-versiondetail' => 'Mostrar a información ampliada da versión do software', 'right-sendemail' => 'Enviar correos electrónicos a outros usuarios', # User rights log @@ -1465,14 +1485,9 @@ Tamén pode deixar que outras persoas se poñan en contacto con vostede desde a 'recentchanges-legend' => 'Opcións dos cambios', 'recentchangestext' => 'Siga, nesta páxina, as modificacións máis recentes no wiki.', 'recentchanges-feed-description' => 'Siga os cambios máis recentes deste wiki nesta fonte de novas.', -'recentchanges-label-legend' => 'Lenda: $1.', -'recentchanges-legend-newpage' => '$1 - nova páxina', 'recentchanges-label-newpage' => 'Esta edición creou unha nova páxina', -'recentchanges-legend-minor' => '$1 - edición pequena', 'recentchanges-label-minor' => 'Esta é unha edición pequena', -'recentchanges-legend-bot' => '$1 - edición feita por un bot', 'recentchanges-label-bot' => 'Esta edición foi realizada por un bot', -'recentchanges-legend-unpatrolled' => '$1 - edición non patrullada', 'recentchanges-label-unpatrolled' => 'Esta edición aínda non foi comprobada', 'rcnote' => "Embaixo {{PLURAL:$1|amósase '''1''' cambio|amósanse os últimos '''$1''' cambios}} {{PLURAL:$2|no último día|nos últimos '''$2''' días}} ata as $5 do $4.", 'rcnotefrom' => "A continuación amósanse os cambios desde as '''$4''' do '''$3''' (móstranse ata '''$1''').", @@ -1519,6 +1534,9 @@ As páxinas da súa [[Special:Watchlist|lista de vixilancia]] aparecen en '''neg 'upload_directory_missing' => 'Falta o directorio de carga ($1) e non pode ser creado polo servidor da páxina web.', 'upload_directory_read_only' => 'Non se pode escribir no directorio de subida ($1) do servidor web.', 'uploaderror' => 'Erro ao cargar', +'upload-recreate-warning' => "'''Atención: borrouse ou trasladouse un ficheiro con ese nome.''' + +Velaquí están o rexistro de borrados e mais o de traslados desta páxina, por se quere consultalos:", 'uploadtext' => "Use o formulario de embaixo para cargar ficheiros. Para ver ou procurar imaxes subidas con anterioridade vaia á [[Special:FileList|lista de imaxes]]; os envíos tamén se rexistran no [[Special:Log/upload|rexistro de cargas]] e as eliminacións no [[Special:Log/delete|rexistro de borrados]]. @@ -1554,6 +1572,17 @@ Por favor, cambie o nome do ficheiro e intente cargalo de novo.', 'filetype-banned-type' => "'''\".\$1\"''' non é un tipo de ficheiro permitido. {{PLURAL:\$3|O tipo de ficheiro permitido é|Os tipos de ficheiros permitidos son}} \$2.", 'filetype-missing' => 'O ficheiro non conta cunha extensión (como ".jpg").', +'empty-file' => 'O ficheiro que enviou estaba baleiro.', +'file-too-large' => 'O ficheiro que enviou era grande de máis.', +'filename-tooshort' => 'O nome do ficheiro é curto de máis.', +'filetype-banned' => 'Este tipo de ficheiro está prohibido.', +'verification-error' => 'O ficheiro non pasou a comprobación de ficheiros.', +'hookaborted' => 'O asociador da extensión cancelou a modificación que intentou realizar.', +'illegal-filename' => 'O nome do ficheiro non está permitido.', +'overwrite' => 'Non está permitido sobrescribir un ficheiro existente.', +'unknown-error' => 'Houbo un erro descoñecido.', +'tmp-create-error' => 'Non se puido crear o ficheiro temporal.', +'tmp-write-error' => 'Houbo un erro ao gravar o ficheiro temporal.', 'large-file' => 'Recoméndase que o tamaño dos ficheiros non supere os $1; este ficheiro ocupa $2.', 'largefileserver' => 'Este ficheiro é de maior tamaño có permitido pola configuración do servidor.', 'emptyfile' => 'O ficheiro que cargou semella estar baleiro. @@ -1583,13 +1612,14 @@ Se aínda quere cargar o seu ficheiro, volva atrás e use outro nome. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Este ficheiro é un duplicado {{PLURAL:$1|do seguinte|dos seguintes}}:', 'file-deleted-duplicate' => 'Un ficheiro idéntico a este ("[[:$1]]") foi borrado previamente. Debería comprobar o historial de borrados do ficheiro antes de proceder a cargalo de novo.', -'successfulupload' => 'A carga realizouse correctamente', 'uploadwarning' => 'Advertencia ao cargar o ficheiro', 'uploadwarning-text' => 'Por favor, modifique a descrición do ficheiro e inténteo de novo.', 'savefile' => 'Gardar o ficheiro', 'uploadedimage' => 'cargou "[[$1]]"', 'overwroteimage' => 'enviou unha nova versión de "[[$1]]"', 'uploaddisabled' => 'Sentímolo, a subida de ficheiros está desactivada.', +'copyuploaddisabled' => 'A carga mediante URL está desactivada.', +'uploadfromurl-queued' => 'A súa carga púxese á cola.', 'uploaddisabledtext' => 'A carga de ficheiros está desactivada.', 'php-uploaddisabledtext' => 'As cargas de ficheiros PHP están desactivadas. Por favor, comprobe a característica file_uploads.', 'uploadscripted' => 'Este ficheiro contén HTML ou código (script code) que pode producir erros ao ser interpretado polo navegador.', @@ -1624,6 +1654,14 @@ JD # Jenoptik MGP # Pentax PICT # varias # ', +'upload-success-subj' => 'A carga realizouse correctamente', +'upload-success-msg' => 'A súa carga desde [$2] rematou correctamente e está dispoñible aquí: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problema ao cargar', +'upload-failure-msg' => 'Houbo un problema durante a carga desde [$2]: + +$1', +'upload-warning-subj' => 'Advertencia ao cargar', +'upload-warning-msg' => 'Houbo un problema durante a carga desde [$2]. Pode volver ao [[Special:Upload/stash/$1|formulario de subidas]] para corrixilo.', 'upload-proto-error' => 'Protocolo erróneo', 'upload-proto-error-text' => 'A carga remota require URLs que comecen por http:// ou ftp://.', @@ -1689,6 +1727,7 @@ Premendo nunha cabeceira da columna cambia a ordenación.', 'listfiles_search_for' => 'Buscar polo nome do ficheiro multimedia:', 'imgfile' => 'ficheiro', 'listfiles' => 'Lista de imaxes', +'listfiles_thumb' => 'Miniatura', 'listfiles_date' => 'Data', 'listfiles_name' => 'Nome', 'listfiles_user' => 'Usuario', @@ -1732,6 +1771,7 @@ A descrición da [$2 páxina de descrición do ficheiro] móstrase a continuaci 'uploadnewversion-linktext' => 'Cargar unha nova versión deste ficheiro', 'shared-repo-from' => 'de $1', 'shared-repo' => 'repositorio compartido', +'filepage.css' => '/** O CSS que se coloque aquí será incluído na páxina de descrición do ficheiro, así como nos wikis de clientes estranxeiros */', # File reversion 'filerevert' => 'Desfacer $1', @@ -1803,8 +1843,8 @@ Lembre verificar outras ligazóns cara aos modelos antes de borralos.', 'statistics-edits' => 'Edicións nas páxinas des que se creou {{SITENAME}}', 'statistics-edits-average' => 'Media de edicións por páxina', 'statistics-views-total' => 'Visitas totais', +'statistics-views-total-desc' => 'Non se inclúen as visitas ás páxinas inexistentes e especiais', 'statistics-views-peredit' => 'Visitas por edición', -'statistics-jobqueue' => 'Lonxitude da [http://www.mediawiki.org/wiki/Manual:Job_queue cola de traballos]', 'statistics-users' => '[[Special:ListUsers|Usuarios]] rexistrados', 'statistics-users-active' => 'Usuarios activos', 'statistics-users-active-desc' => 'Usuarios que teñen levado a cabo unha acción {{PLURAL:$1|no último día|nos últimos $1 días}}', @@ -1819,7 +1859,7 @@ Unha páxina trátase como páxina de homónimos cando nela se usa un modelo que 'doubleredirects' => 'Redireccións dobres', 'doubleredirectstext' => 'Esta lista contén as páxinas que redirixen cara a outras páxinas de redirección. Cada ringleira contén ligazóns cara á primeira e segunda redireccións, así como a primeira liña de texto da segunda páxina, que é frecuentemente o artigo "real", á que a primeira redirección debera apuntar. -As entradas riscadas xa foron resoltas.', +As entradas riscadas xa foron resoltas.', 'double-redirect-fixed-move' => 'A páxina "[[$1]]" foi movida, agora é unha redirección cara a "[[$2]]"', 'double-redirect-fixer' => 'Amañador de redireccións', @@ -1842,6 +1882,8 @@ As entradas riscadas xa foron resoltas.', 'nmembers' => '$1 {{PLURAL:$1|páxina|páxinas}}', 'nrevisions' => '$1 {{PLURAL:$1|revisión|revisións}}', 'nviews' => 'vista {{PLURAL:$1|unha vez|$1 veces}}', +'nimagelinks' => 'Empregada {{PLURAL:$1|nunha páxina|en $1 páxinas}}', +'ntransclusions' => 'empregado en $1 {{PLURAL:$1|páxina|páxinas}}', 'specialpage-empty' => 'Non hai resultados para o que solicitou.', 'lonelypages' => 'Páxinas orfas', 'lonelypagestext' => 'As seguintes páxinas non teñen ningunha ligazón que apunte cara a elas desde outra páxina de {{SITENAME}}.', @@ -1998,34 +2040,40 @@ Se quere máis información acerca dos dereitos individuais, pode atopala [[{{Me 'listgrouprights-removegroup-self-all' => 'Pode eliminar todos os grupos pola súa propia conta', # E-mail user -'mailnologin' => 'Non existe enderezo para o envío', -'mailnologintext' => 'Debe [[Special:UserLogin|acceder ao sistema]] e ter rexistrado un enderezo de correo electrónico válido nas súas [[Special:Preferences|preferencias]] para enviar correos electrónicos a outros usuarios.', -'emailuser' => 'Enviar un correo electrónico a este usuario', -'emailpage' => 'Enviar un correo electrónico a un usuario', -'emailpagetext' => 'Pode usar o formulario de embaixo para enviar unha mensaxe de correo electrónico a este usuario. +'mailnologin' => 'Non existe enderezo para o envío', +'mailnologintext' => 'Debe [[Special:UserLogin|acceder ao sistema]] e ter rexistrado un enderezo de correo electrónico válido nas súas [[Special:Preferences|preferencias]] para enviar correos electrónicos a outros usuarios.', +'emailuser' => 'Enviar un correo electrónico a este usuario', +'emailpage' => 'Enviar un correo electrónico a un usuario', +'emailpagetext' => 'Pode usar o formulario de embaixo para enviar unha mensaxe de correo electrónico a este usuario. O correo electrónico que inseriu [[Special:Preferences|nas súas preferencias]] aparecerá no campo "De:" do correo, polo que o receptor da mensaxe poderalle responder.', -'usermailererror' => 'O obxecto enviado deu unha mensaxe de erro:', -'defemailsubject' => 'Correo electrónico de {{SITENAME}}', -'noemailtitle' => 'Sen enderezo de correo electrónico', -'noemailtext' => 'Este usuario non especificou un enderezo de correo electrónico válido.', -'nowikiemailtitle' => 'Sen correo electrónico habilitado', -'nowikiemailtext' => 'Este usuario elixiu non recibir correos electrónicos doutros usuarios.', -'email-legend' => 'Enviar un correo electrónico a outro usuario de {{SITENAME}}', -'emailfrom' => 'De:', -'emailto' => 'Para:', -'emailsubject' => 'Asunto:', -'emailmessage' => 'Mensaxe:', -'emailsend' => 'Enviar', -'emailccme' => 'Enviar unha copia da mensaxe para min.', -'emailccsubject' => 'Copia da súa mensaxe para $1: $2', -'emailsent' => 'Mensaxe enviada', -'emailsenttext' => 'A súa mensaxe de correo electrónico foi enviada.', -'emailuserfooter' => 'Este correo electrónico foi enviado por $1 a $2 mediante a función "Enviar un correo electrónico a este usuario" de {{SITENAME}}.', +'usermailererror' => 'O obxecto enviado deu unha mensaxe de erro:', +'defemailsubject' => 'Correo electrónico de {{SITENAME}}', +'usermaildisabled' => 'O correo electrónico do usuario está desactivado', +'usermaildisabledtext' => 'Non pode enviar correos electrónicos a outros usuarios deste wiki', +'noemailtitle' => 'Sen enderezo de correo electrónico', +'noemailtext' => 'Este usuario non especificou un enderezo de correo electrónico válido.', +'nowikiemailtitle' => 'Sen correo electrónico habilitado', +'nowikiemailtext' => 'Este usuario elixiu non recibir correos electrónicos doutros usuarios.', +'email-legend' => 'Enviar un correo electrónico a outro usuario de {{SITENAME}}', +'emailfrom' => 'De:', +'emailto' => 'Para:', +'emailsubject' => 'Asunto:', +'emailmessage' => 'Mensaxe:', +'emailsend' => 'Enviar', +'emailccme' => 'Enviar unha copia da mensaxe para min.', +'emailccsubject' => 'Copia da súa mensaxe para $1: $2', +'emailsent' => 'Mensaxe enviada', +'emailsenttext' => 'A súa mensaxe de correo electrónico foi enviada.', +'emailuserfooter' => 'Este correo electrónico foi enviado por $1 a $2 mediante a función "Enviar un correo electrónico a este usuario" de {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Mensaxe deixada polo sistema.', +'usermessage-editor' => 'Editor das mensaxes do sistema', # Watchlist 'watchlist' => 'A miña lista de vixilancia', 'mywatchlist' => 'A miña lista de vixilancia', -'watchlistfor' => "(de '''$1''')", +'watchlistfor2' => 'De $1 $2', 'nowatchlist' => 'Non ten elementos na súa lista de vixilancia.', 'watchlistanontext' => 'Faga o favor de $1 no sistema para ver ou editar os elementos da súa lista de vixilancia.', 'watchnologin' => 'Non accedeu ao sistema', @@ -2086,6 +2134,10 @@ Pode borrar os indicadores de aviso de notificación para o conxunto das páxina O sistema de aviso de {{SITENAME}} -- +Para cambiar as notificacións por correo electrónico, visite +{{fullurl:{{#special:Preferences}}}} + + Para cambiar a súa lista de vixilancia, visite {{fullurl:{{#special:Watchlist}}/edit}} @@ -2145,7 +2197,10 @@ A última edición fíxoa [[User:$3|$3]] ([[User talk:$3|conversa]]{{int:pipe-se 'revertpage-nouser' => 'Desfixéronse as edicións de (nome eliminado); cambiado á última versión feita por [[User:$1|$1]]', 'rollback-success' => 'Desfixéronse as edicións de $1; volveuse á última edición, feita por $2.', -'sessionfailure' => 'Parece que hai un problema co rexistro da súa sesión; + +# Edit tokens +'sessionfailure-title' => 'Erro de sesión', +'sessionfailure' => 'Parece que hai un problema co rexistro da súa sesión; esta acción cancelouse como precaución fronte ao secuestro de sesións. Prema no botón "atrás", volva cargar a páxina da que proviña e inténteo de novo.', @@ -2278,18 +2333,22 @@ $1', 'month' => 'Desde o mes de (e anteriores):', 'year' => 'Desde o ano (e anteriores):', -'sp-contributions-newbies' => 'Mostrar só as contribucións das contas de usuario novas', -'sp-contributions-newbies-sub' => 'Contribucións dos usuarios novos', -'sp-contributions-newbies-title' => 'Contribucións dos usuarios novos', -'sp-contributions-blocklog' => 'rexistro de bloqueos', -'sp-contributions-deleted' => 'contribucións borradas do usuario', -'sp-contributions-logs' => 'rexistros', -'sp-contributions-talk' => 'conversa', -'sp-contributions-userrights' => 'xestión dos dereitos de usuario', -'sp-contributions-blocked-notice' => 'Este usuario está bloqueado. Velaquí está a última entrada do rexistro de bloqueos, por se quere consultala:', -'sp-contributions-search' => 'Busca de contribucións', -'sp-contributions-username' => 'Enderezo IP ou nome de usuario:', -'sp-contributions-submit' => 'Procurar', +'sp-contributions-newbies' => 'Mostrar só as contribucións das contas de usuario novas', +'sp-contributions-newbies-sub' => 'Contribucións dos usuarios novos', +'sp-contributions-newbies-title' => 'Contribucións dos usuarios novos', +'sp-contributions-blocklog' => 'rexistro de bloqueos', +'sp-contributions-deleted' => 'contribucións borradas do usuario', +'sp-contributions-uploads' => 'cargas', +'sp-contributions-logs' => 'rexistros', +'sp-contributions-talk' => 'conversa', +'sp-contributions-userrights' => 'xestión dos dereitos de usuario', +'sp-contributions-blocked-notice' => 'Este usuario está bloqueado. Velaquí está a última entrada do rexistro de bloqueos, por se quere consultala:', +'sp-contributions-blocked-notice-anon' => 'Este enderezo IP está bloqueado. +Velaquí está a última entrada do rexistro de bloqueos, por se quere consultala:', +'sp-contributions-search' => 'Busca de contribucións', +'sp-contributions-username' => 'Enderezo IP ou nome de usuario:', +'sp-contributions-toponly' => 'Mostrar só as últimas revisións', +'sp-contributions-submit' => 'Procurar', # What links here 'whatlinkshere' => 'Páxinas que ligan con esta', @@ -2350,7 +2409,6 @@ Olle a [[Special:IPBlockList|lista de enderezos IP e usuarios bloqueados]] para 'ipb-edit-dropdown' => 'Editar os motivos de bloqueo', 'ipb-unblock-addr' => 'Desbloquear a "$1"', 'ipb-unblock' => 'Desbloquear un usuario ou enderezo IP', -'ipb-blocklist-addr' => 'Bloqueos vixentes de "$1"', 'ipb-blocklist' => 'Ver os bloqueos vixentes', 'ipb-blocklist-contribs' => 'Contribucións de "$1"', 'unblockip' => 'Desbloquear o usuario', @@ -2422,6 +2480,8 @@ Por favor, contacte co seu fornecedor de acceso á Internet ou co seu soporte t Polo tanto, non pode crear unha conta", 'cant-block-while-blocked' => 'Non pode bloquear outros usuarios mentres vostede estea bloqueado.', 'cant-see-hidden-user' => 'O usuario que intenta bloquear xa foi bloqueado e agochado. Dado que non ten o dereito necesario para agochar usuarios, non pode ver ou editar o bloqueo do usuario.', +'ipbblocked' => 'Non pode bloquear ou desbloquear outros usuarios porque vostede está bloqueado', +'ipbnounblockself' => 'Non ten os permisos necesarios para desbloquearse a si mesmo', # Developer tools 'lockdb' => 'Fechar base de datos', @@ -2455,6 +2515,17 @@ Vostede é responsábel de asegurarse de que as ligazóns continúan a apuntar c Teña en conta que a páxina '''non''' será movida se xa existe unha páxina co novo título, a menos que estea baleira ou sexa unha redirección e que non teña historial de edicións. Isto significa que pode volver renomear unha páxina ao seu nome antigo se comete un erro, e que non pode sobrescribir unha páxina que xa existe. +'''ATENCIÓN!''' +Este cambio nunha páxina popular pode ser drástico e inesperado; +por favor, asegúrese de que entende as consecuencias disto antes de proseguir.", +'movepagetext-noredirectfixer' => "Ao usar o formulario de embaixo vai cambiar o nome da páxina, movendo todo o seu historial ao novo nome. +O título vello vaise converter nunha páxina de redirección ao novo título. +Asegúrese de verificar que non hai redireccións [[Special:DoubleRedirects|dobres]] ou [[Special:BrokenRedirects|crebadas]]. +Vostede é responsábel de asegurarse de que as ligazóns continúan a apuntar cara a onde se supón que deberían. + +Teña en conta que a páxina '''non''' será movida se xa existe unha páxina co novo título, a menos que estea baleira ou sexa unha redirección e que non teña historial de edicións. +Isto significa que pode volver renomear unha páxina ao seu nome antigo se comete un erro, e que non pode sobrescribir unha páxina que xa existe. + '''ATENCIÓN!''' Este cambio nunha páxina popular pode ser drástico e inesperado; por favor, asegúrese de que entende as consecuencias disto antes de proseguir.", @@ -2514,6 +2585,7 @@ Quérea eliminar para facer sitio para mover?', 'immobile-source-page' => 'Esta páxina non se pode mover.', 'immobile-target-page' => 'Non se pode mover a ese título.', 'imagenocrossnamespace' => 'Non se pode mover o ficheiro a un espazo de nomes que non o admite', +'nonfile-cannot-move-to-file' => 'Non se pode mover algo que non é un ficheiro ao espazo de nomes reservado aos ficheiros', 'imagetypemismatch' => 'A nova extensión do fiheiro non coincide co seu tipo', 'imageinvalidfilename' => 'O nome da imaxe é inválido', 'fix-double-redirects' => 'Actualizar calquera redirección que apunte cara ao título orixinal', @@ -2593,6 +2665,7 @@ Gárdeo no seu disco duro e cárgueo aquí.', 'importstart' => 'Importando páxinas...', 'import-revision-count' => '$1 {{PLURAL:$1|revisión|revisións}}', 'importnopages' => 'Non hai páxinas para importar.', +'imported-log-entries' => '{{PLURAL:$1|Importouse unha entrada|Importáronse $1 entradas}} do rexisto.', 'importfailed' => 'A importación fallou: $1', 'importunknownsource' => 'Fonte de importación descoñecida', 'importcantopen' => 'Non se pode abrir o ficheiro importado', @@ -2685,6 +2758,8 @@ Gárdeo no seu disco duro e cárgueo aquí.', 'tooltip-upload' => 'Comezar a enviar', 'tooltip-rollback' => '"Reverter" desfai, cun só clic, a(s) edición(s) feita(s) nesta páxina polo último colaborador.', 'tooltip-undo' => '"Desfacer" reverte esta edición e abre o formulario de edición nun modo previo. Permite engadir un motivo no resumo de edición.', +'tooltip-preferences-save' => 'Gardar as preferencias', +'tooltip-summary' => 'Escriba un breve resumo', # Stylesheets 'common.css' => '/** O CSS que se coloque aquí será aplicado a todas as aparencias */', @@ -2816,13 +2891,16 @@ O seu sistema pode quedar comprometido se o executa.", 'thumbsize' => 'Tamaño da miniatura:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|páxina|páxinas}}', 'file-info' => 'Tamaño do ficheiro: $1, tipo MIME: $2', -'file-info-size' => '($1 × $2 píxeles, tamaño do ficheiro: $3, tipo MIME: $4)', +'file-info-size' => '$1 × $2 píxeles, tamaño do ficheiro: $3, tipo MIME: $4', 'file-nohires' => 'Non se dispón dunha resolución máis grande.', -'svg-long-desc' => '(ficheiro SVG, nominalmente $1 × $2 píxeles, tamaño do ficheiro: $3)', +'svg-long-desc' => 'ficheiro SVG, nominalmente $1 × $2 píxeles, tamaño do ficheiro: $3', 'show-big-image' => 'Imaxe na máxima resolución', 'show-big-image-thumb' => 'Tamaño desta presentación da imaxe: $1 × $2 píxeles', 'file-info-gif-looped' => 'en bucle', 'file-info-gif-frames' => '$1 {{PLURAL:$1|fotograma|fotogramas}}', +'file-info-png-looped' => 'en bucle', +'file-info-png-repeat' => 'reproducido $1 {{PLURAL:$1|vez|veces}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|fotograma|fotogramas}}', # Special:NewFiles 'newimages' => 'Galería de imaxes novas', @@ -2980,6 +3058,7 @@ Os demais agocharanse por omisión. 'exif-gpsareainformation' => 'Nome da área GPS', 'exif-gpsdatestamp' => 'Data do GPS', 'exif-gpsdifferential' => 'Corrección diferencial do GPS', +'exif-objectname' => 'Título curto', # EXIF attributes 'exif-compression-1' => 'Sen comprimir', @@ -3061,6 +3140,8 @@ Os demais agocharanse por omisión. 'exif-sensingmethod-7' => 'Sensor trilineal', 'exif-sensingmethod-8' => 'Sensor secuencial da liña de cor', +'exif-filesource-3' => 'Cámara fotográfica dixital', + 'exif-scenetype-1' => 'Unha imaxe fotografada directamente', 'exif-customrendered-0' => 'Procesamento normal', @@ -3137,29 +3218,29 @@ Os demais agocharanse por omisión. 'limitall' => 'todas', # E-mail address confirmation -'confirmemail' => 'Confirmar o enderezo de correo electrónico', -'confirmemail_noemail' => 'Non ten rexistrado ningún enderezo de correo electrónico válido nas súas [[Special:Preferences|preferencias de usuario]].', -'confirmemail_text' => '{{SITENAME}} require que lle dea validez ao seu enderezo de correo electrónico antes de utilizar as funcións relacionadas con el. +'confirmemail' => 'Confirmar o enderezo de correo electrónico', +'confirmemail_noemail' => 'Non ten rexistrado ningún enderezo de correo electrónico válido nas súas [[Special:Preferences|preferencias de usuario]].', +'confirmemail_text' => '{{SITENAME}} require que lle dea validez ao seu enderezo de correo electrónico antes de utilizar as funcións relacionadas con el. Prema no botón de embaixo para enviar un correo de confirmación ao seu enderezo. O correo incluirá unha ligazón cun código: faga clic nesta ligazón para abrila no seu navegador web e así confirmar que o seu enderezo é válido.', -'confirmemail_pending' => 'Envióuselle un código de confirmación ao enderezo de correo electrónico; +'confirmemail_pending' => 'Envióuselle un código de confirmación ao enderezo de correo electrónico; se creou a conta hai pouco debe esperar uns minutos antes de solicitar un novo código.', -'confirmemail_send' => 'Enviar por correo elecrónico un código de confirmación', -'confirmemail_sent' => 'Correo electrónico de confirmación enviado.', -'confirmemail_oncreate' => 'Envióuselle un código de confirmación ao enderezo de correo electrónico. Este código non é imprescindible para entrar no wiki, pero é preciso para activar as funcións do wiki baseadas no correo.', -'confirmemail_sendfailed' => '{{SITENAME}} non puido enviar a mensaxe de confirmación do correo. +'confirmemail_send' => 'Enviar por correo elecrónico un código de confirmación', +'confirmemail_sent' => 'Correo electrónico de confirmación enviado.', +'confirmemail_oncreate' => 'Envióuselle un código de confirmación ao enderezo de correo electrónico. Este código non é imprescindible para entrar no wiki, pero é preciso para activar as funcións do wiki baseadas no correo.', +'confirmemail_sendfailed' => '{{SITENAME}} non puido enviar a mensaxe de confirmación do correo. Por favor, comprobe que no enderezo de correo electrónico non haxa caracteres inválidos. O programa de correo informa do seguinte: $1', -'confirmemail_invalid' => 'O código de confirmación non é válido. +'confirmemail_invalid' => 'O código de confirmación non é válido. Pode ser que caducase.', -'confirmemail_needlogin' => 'Necesita $1 para confirmar o seu enderezo de correo electrónico.', -'confirmemail_success' => 'Confirmouse o seu enderezo de correo electrónico. Agora xa pode [[Special:UserLogin|acceder ao sistema]] e facer uso do wiki.', -'confirmemail_loggedin' => 'Xa se confirmou o seu enderezo de correo electrónico.', -'confirmemail_error' => 'Houbo un problema ao gardar a súa confirmación.', -'confirmemail_subject' => '{{SITENAME}} - Verificación do enderezo de correo electrónico', -'confirmemail_body' => 'Alguén, probablemente vostede, desde o enderezo IP $1, +'confirmemail_needlogin' => 'Necesita $1 para confirmar o seu enderezo de correo electrónico.', +'confirmemail_success' => 'Confirmouse o seu enderezo de correo electrónico. Agora xa pode [[Special:UserLogin|acceder ao sistema]] e facer uso do wiki.', +'confirmemail_loggedin' => 'Xa se confirmou o seu enderezo de correo electrónico.', +'confirmemail_error' => 'Houbo un problema ao gardar a súa confirmación.', +'confirmemail_subject' => '{{SITENAME}} - Verificación do enderezo de correo electrónico', +'confirmemail_body' => 'Alguén, probablemente vostede, desde o enderezo IP $1, rexistrou a conta "$2" con este enderezo de correo electrónico en {{SITENAME}}. Para confirmar que realmente esta conta lle pertence a vostede e activar @@ -3173,8 +3254,36 @@ para cancelar a confirmación do enderezo de correo electrónico: $5 O código de confirmación caduca o $6 ás $7.', -'confirmemail_invalidated' => 'A confirmación do enderezo de correo electrónico foi cancelada', -'invalidateemail' => 'Cancelar a confirmación do correo electrónico', +'confirmemail_body_changed' => 'Alguén, probablemente vostede, desde o enderezo IP $1, +cambiou o enderezo de correo electrónico da conta "$2" a estoutro en {{SITENAME}}. + +Para confirmar que realmente esta conta lle pertence a vostede e reactivar +as características do correo electrónico en {{SITENAME}}, abra esta ligazón no seu navegador: + +$3 + +Se a conta *non* é súa, siga estoutra ligazón +para cancelar a confirmación do enderezo de correo electrónico: + +$5 + +O código de confirmación caduca o $6 ás $7.', +'confirmemail_body_set' => 'Alguén, probablemente vostede, desde o enderezo IP $1, +estableceu este enderezo de correo electrónico como o da conta "$2" en {{SITENAME}}. + +Para confirmar que realmente esta conta lle pertence a vostede e reactivar +as características do correo electrónico en {{SITENAME}}, abra esta ligazón no seu navegador: + +$3 + +Se a conta *non* é súa, siga estoutra ligazón +para cancelar a confirmación do enderezo de correo electrónico: + +$5 + +O código de confirmación caduca o $6 ás $7.', +'confirmemail_invalidated' => 'A confirmación do enderezo de correo electrónico foi cancelada', +'invalidateemail' => 'Cancelar a confirmación do correo electrónico', # Scary transclusion 'scarytranscludedisabled' => '[A transclusión interwiki está desactivada]', @@ -3214,6 +3323,7 @@ Por favor, confirme que realmente quere recrear esta páxina.", 'table_pager_first' => 'Primeira páxina', 'table_pager_last' => 'Última páxina', 'table_pager_limit' => 'Mostrar $1 elementos por páxina', +'table_pager_limit_label' => 'Elementos por páxina:', 'table_pager_limit_submit' => 'Ir', 'table_pager_empty' => 'Sen resultados', @@ -3223,6 +3333,9 @@ Por favor, confirme que realmente quere recrear esta páxina.", 'autoredircomment' => 'Redirixida cara a "[[$1]]"', 'autosumm-new' => 'Nova páxina: "$1"', +# Size units +'size-kilobytes' => '$1 kB', + # Live preview 'livepreview-loading' => 'Cargando...', 'livepreview-ready' => 'Cargando… Listo!', @@ -3270,6 +3383,7 @@ Tamén pode [[Special:Watchlist/edit|empregar o editor normal]].', 'version-specialpages' => 'Páxinas especiais', 'version-parserhooks' => 'Asociadores analíticos', 'version-variables' => 'Variábeis', +'version-skins' => 'Aparencias', 'version-other' => 'Outros', 'version-mediahandlers' => 'Executadores de multimedia', 'version-hooks' => 'Asociadores', @@ -3281,6 +3395,13 @@ Tamén pode [[Special:Watchlist/edit|empregar o editor normal]].', 'version-hook-subscribedby' => 'Subscrito por', 'version-version' => '(Versión $1)', 'version-license' => 'Licenza', +'version-poweredby-credits' => "Este wiki está desenvolvido por '''[http://www.mediawiki.org/wiki/MediaWiki/gl MediaWiki]''', dereitos de autor © 2001-$1 $2.", +'version-poweredby-others' => 'outros', +'version-license-info' => 'MediaWiki é software libre; pode redistribuílo e/ou modificalo segundo os termos da licenza pública xeral GNU publicada pola Free Software Foundation; versión 2 ou (na súa escolla) calquera outra posterior. + +MediaWiki distribúese coa esperanza de que poida ser útil, pero SEN NINGUNHA GARANTÍA; nin sequera a garantía implícita de COMERCIALIZACIÓN ou ADECUACIÓN A UNHA FINALIDADE ESPECÍFICA. Olle a licenza pública xeral GNU para obter máis detalles. + +Debería recibir [{{SERVER}}{{SCRIPTPATH}}/COPYING unha copia da licenza pública xeral GNU] xunto ao programa; se non é así, escriba á Free Software Foundation, Inc., 51 da rúa Franklin, quinto andar, Boston, MA 02110-1301, Estados Unidos ou [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html lea a licenza en liña].', 'version-software' => 'Software instalado', 'version-software-product' => 'Produto', 'version-software-version' => 'Versión', @@ -3351,6 +3472,15 @@ Introduza o nome do ficheiro sen o prefixo "{{ns:file}}:".', 'tags-edit' => 'editar', 'tags-hitcount' => '$1 {{PLURAL:$1|cambio|cambios}}', +# Special:ComparePages +'comparepages' => 'Comparar páxinas', +'compare-selector' => 'Comparar as revisións de dúas páxinas', +'compare-page1' => 'Páxina 1', +'compare-page2' => 'Páxina 2', +'compare-rev1' => 'Revisión 1', +'compare-rev2' => 'Revisión 2', +'compare-submit' => 'Comparar', + # Database error messages 'dberr-header' => 'Este wiki ten un problema', 'dberr-problems' => 'Sentímolo! Este sitio está experimentando dificultades técnicas.', @@ -3367,8 +3497,13 @@ Introduza o nome do ficheiro sen o prefixo "{{ns:file}}:".', 'htmlform-float-invalid' => 'O valor que especificou non é un número.', 'htmlform-int-toolow' => 'O valor que especificou está por baixo do mínimo de $1', 'htmlform-int-toohigh' => 'O valor que especificou está por riba do máximo de $1', +'htmlform-required' => 'Este valor é obrigatorio', 'htmlform-submit' => 'Enviar', 'htmlform-reset' => 'Desfacer os cambios', 'htmlform-selectorother-other' => 'Outra', +# SQLite database support +'sqlite-has-fts' => '$1 con soporte para procuras de texto completo', +'sqlite-no-fts' => '$1 sen soporte para procuras de texto completo', + ); diff --git a/languages/messages/MessagesGlk.php b/languages/messages/MessagesGlk.php index 99435678..14353d3a 100644 --- a/languages/messages/MessagesGlk.php +++ b/languages/messages/MessagesGlk.php @@ -9,6 +9,7 @@ * * @author AminSanaei * @author Varg + * @author محک */ $fallback = 'fa'; @@ -45,8 +46,8 @@ $messages = array( # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'currentevents' => 'تازه چیؤن', -'mainpage' => 'گت ولگ', -'mainpage-description' => 'گت ولگ', +'mainpage' => 'گت صفحه', +'mainpage-description' => 'گت صفحه', 'portal' => 'امه جیگا', 'privacy' => 'رازبداری', diff --git a/languages/messages/MessagesGn.php b/languages/messages/MessagesGn.php index 8a95d712..83537e62 100644 --- a/languages/messages/MessagesGn.php +++ b/languages/messages/MessagesGn.php @@ -189,7 +189,7 @@ $messages = array( 'yourname' => 'Hero', 'yourpassword' => 'Ne remiñemi', 'yourpasswordagain' => 'Repita ne remiñemi', -'remembermypassword' => "Aipota chemomandu'ajepi amba'apo jave.", +'remembermypassword' => "Aipota chemomandu'ajepi amba'apo jave (for a maximum of $1 {{PLURAL:$1|day|days}})", 'login' => 'Terañemboguapy/Ke', 'nav-login-createaccount' => 'Terañemboguapy/Ke', 'userlogin' => 'Terañemboguapy/Ke', @@ -230,13 +230,11 @@ $messages = array( 'newarticletext' => "Rehapykuehókuri peteĩ joaju peteĩ kuatiarogue ndaipórivape. Nde remoheñoisérõ ko kuatiarogue, eñepyrũkatu ehai. Reikotevẽvérõ marandu, emoñe'ẽ kuatiarogue ñepytyvõ rehegua. Oiméramo reikereínte térã rejavyhaguére, upéicharõ terehojey [[{{MediaWiki:Helppage}}|kuatiarogue mboyveguápe]].", -'userinvalidcssjstitle' => "'''Aviso:''' No existe la piel \"\$1\". Recuerda que las páginas personalizadas .css y .js tienen un título en minúsculas, p.e. Usuario:Foo/monobook.css en vez de Usuario:Foo/Monobook.css.", +'userinvalidcssjstitle' => "'''Aviso:''' No existe la piel \"\$1\". Recuerda que las páginas personalizadas .css y .js tienen un título en minúsculas, p.e. Usuario:Foo/vector.css en vez de Usuario:Foo/Vector.css.", 'editing' => 'Ojehaihína $1', 'editingsection' => 'Ojehaihína $1 (vore)', 'editingcomment' => 'Ojehaihína $1 (comentario)', 'yourtext' => "Mba'ehaipyre", -'longpagewarning' => "'''Ejesarekóke: ko kuatiarogue, tuichakuépe, oguereko $1 kb; heta kundahára ikatu iñapañuãi jehaijeýpe kuatiarogue ohaságui 32 kb. -Aipórõ, eñeha'ãna emboja'o ne rembiapo, vore michĩvévape.'''", # History pages 'cur' => "ko'ag̃agua", @@ -518,7 +516,7 @@ Reomĩsérõ ta'ãnga peteĩ kuatiaroguépe, eipuru peteĩ joaju: 'spam_blanking' => 'Todas las revisiones contienen enlaces a $1, blanqueando', # Media information -'file-info' => "(tamaño de jehai'aty: $1; tipo MIME: $2)", +'file-info' => "tamaño de jehai'aty: $1; tipo MIME: $2", # Special:NewFiles 'newimages' => "Ta'ãnga pyahu renda", diff --git a/languages/messages/MessagesGot.php b/languages/messages/MessagesGot.php index 660df6d6..6ca593f7 100644 --- a/languages/messages/MessagesGot.php +++ b/languages/messages/MessagesGot.php @@ -367,7 +367,6 @@ $messages = array( # Watchlist 'watchlist' => '𐌼𐌴𐌹𐌽𐍉𐍃 𐍅𐌹𐍄𐌰𐌽𐌳𐍃𐌻𐌴𐌹𐍃𐍄𐌰', 'mywatchlist' => '𐌼𐌴𐌹𐌽𐍉𐍃 𐍅𐌹𐍄𐌰𐌽𐌳𐍃𐌻𐌴𐌹𐍃𐍄𐌰', -'watchlistfor' => "(fáur '''$1''')", 'watch' => '𐍅𐌰𐍂𐌰𐌽', 'watchthispage' => '𐍅𐌰𐍂𐌰𐌽 𐍃𐌴𐌹𐌳𐍉', 'unwatch' => '𐌽𐌹𐍅𐌰𐍂𐌰𐌽', diff --git a/languages/messages/MessagesGrc.php b/languages/messages/MessagesGrc.php index 72052be4..32fcbd12 100644 --- a/languages/messages/MessagesGrc.php +++ b/languages/messages/MessagesGrc.php @@ -51,8 +51,7 @@ $messages = array( 'tog-editsection' => 'Τμήματος μεταγραφὴν διὰ τῶν συνδέσμων «[μεταγράφειν]» καθιστάναι δυνατήν', 'tog-editsectiononrightclick' => 'Καθιστάναι δυνατὸν τὸ μεταγράφειν τμήματα διὰ τοῦ ἐπὶ τῶν ἐπιγραφῶν τῶν τμημάτων θλίβειν δεξιῶς (ἀπαιτεῖται JavaScript)', 'tog-showtoc' => 'Δεικνύναι πίνακα περιεχομένων (ἐν δέλτοις περιεχούσαις πλείους τῶν 3 ἐπικεφαλίδων)', -'tog-rememberpassword' => 'Ἐνθυμεῖσθαι τὴν ἐμὴν σύνδεσιν ἐν τῇδε τῇ ὑπολογιστικῇ μηχανῇ', -'tog-editwidth' => 'Πλαίσιον μεταγραφῆς εἰς πλῆρες μέγεθος', +'tog-rememberpassword' => 'Ἐνθυμεῖσθαι τὴν ἐμὴν σύνδεσιν ἐν τῇδε τῇ ὑπολογιστικῇ μηχανῇ (μέγιστον $1 {{PLURAL:$1|ἡμέρα|ἡμέραι}})', 'tog-watchcreations' => 'Προστιθέναι τὰς δέλτους ἃς ποιῶ τοῖς ἐφορωμένοις μου', 'tog-watchdefault' => 'Προστιθέναι τὰς δέλτους ἃς μεταγράφω τοῖς ἐφορωμένοις μου', 'tog-watchmoves' => 'Προστιθέναι τὰς δέλτους ἃς κινῶ τοῖς ἐφορωμένοις μου', @@ -196,31 +195,20 @@ $messages = array( 'faqpage' => 'Project:Πολλάκις αἰτηθέντα', # Vector skin -'vector-action-addsection' => 'Θέμα προστιθέναι', -'vector-action-delete' => 'Σβεννύναι', -'vector-action-move' => 'Κινεῖν', -'vector-action-protect' => 'Φυλάττειν', -'vector-action-undelete' => 'Ἀποκαθιστάναι', -'vector-action-unprotect' => 'Μὴ φυλάττειν', -'vector-namespace-category' => 'Κατηγορία', -'vector-namespace-help' => 'Δέλτος βοηθείας', -'vector-namespace-image' => 'Ἀρχεῖον', -'vector-namespace-main' => 'Δέλτος', -'vector-namespace-media' => 'Δέλτος μέσων', -'vector-namespace-mediawiki' => 'Ἀγγελία', -'vector-namespace-project' => 'Δέλτος ἐγχειρήματος', -'vector-namespace-special' => 'Εἰδικὴ δέλτος', -'vector-namespace-talk' => 'Διάλεξις', -'vector-namespace-template' => 'Πρότυπον', -'vector-namespace-user' => 'Δέλτος χρωμένου', -'vector-view-create' => 'Ποιεῖν', -'vector-view-edit' => 'Μεταγράφειν', -'vector-view-history' => 'Ἱστορίαν ὁρᾶν', -'vector-view-view' => 'Ἀναγνῶναι', -'vector-view-viewsource' => 'Ὁρᾶν τὴν πηγήν', -'actions' => 'Δράσεις', -'namespaces' => 'Ὀνοματεῖα', -'variants' => 'Παραλλαγαί', +'vector-action-addsection' => 'Θέμα προστιθέναι', +'vector-action-delete' => 'Σβεννύναι', +'vector-action-move' => 'Κινεῖν', +'vector-action-protect' => 'Φυλάττειν', +'vector-action-undelete' => 'Ἀποκαθιστάναι', +'vector-action-unprotect' => 'Μὴ φυλάττειν', +'vector-view-create' => 'Ποιεῖν', +'vector-view-edit' => 'Μεταγράφειν', +'vector-view-history' => 'Ἱστορίαν ὁρᾶν', +'vector-view-view' => 'Ἀναγνῶναι', +'vector-view-viewsource' => 'Ὁρᾶν τὴν πηγήν', +'actions' => 'Δράσεις', +'namespaces' => 'Ὀνοματεῖα', +'variants' => 'Παραλλαγαί', 'errorpagetitle' => 'Σφάλμα', 'returnto' => 'Ἐπανιέναι εἰς $1.', @@ -439,7 +427,7 @@ $2', 'yourname' => 'Ὄνομα χρωμένου:', 'yourpassword' => 'Σῆμα:', 'yourpasswordagain' => 'Ἀνατυπῶσαι σύνθημα:', -'remembermypassword' => 'Μίμνῃσκε ἐνθάδε τὸ συνδεῖσθαι', +'remembermypassword' => 'Μίμνῃσκε ἐνθάδε συνδεῖσθαι (μέγιστον $1 {{PLURAL:$1|ἡμέρα|ἡμέραι}})', 'yourdomainname' => 'Ὁ τομεύς σου:', 'externaldberror' => 'Συνέβη εἴτε σφάλμα τι πιστοποιήσεως τῆς βάσεως δεδομένων εἴτε οὐκ ἔξεστί σοι ἐνημεροῦν τὸν ἐξωτερικὸν λογισμόν σου.', 'login' => 'Συνδεῖσθαι', @@ -456,6 +444,7 @@ $2', 'gotaccount' => "Ἆρα λογισμὸν ἤδη τινὰ ἔχεις; '''$1'''.", 'gotaccountlink' => 'Συνδεῖσθαι', 'createaccountmail' => 'ἠλεκτρονικῇ ἐπιστολῇ', +'createaccountreason' => 'Αἰτία', 'badretype' => 'Τὰ εἰσηγμένα ὑπἐσοῦ συνθήματα οὐχ ἁρμόττουσιν.', 'userexists' => 'Τὸ εἰσηγμένον ὄνομα ἤδη κεχρησμένον ἐστίν. Ἐπίλεξον ὄνομα διάφορόν τι.', @@ -608,7 +597,7 @@ $2', '''Internet Explorer:''' ἐρητυειν τὸ ''Ctrl'' ἐνῷ θλίβεις τὸ ''Refresh,'' ἢ πίεσον ''Ctrl-F5''.", 'usercssyoucanpreview' => "'''Βουλή:''' Χρῆσον τῷ κομβίῳ 'Δεικνύναι προθεώρησιν' ἵνα δοκιμάσῃς τὴν νέαν σου CSS πρὸ τοῦ καταγράφειν.", 'userjsyoucanpreview' => "'''Βουλή:''' Χρῆσον τῷ κομβίῳ 'Δεικνύναι προθεώρησιν' ἵνα δοκιμάσῃς τὴν νέαν σου JS πρὸ τοῦ καταγράφειν.", -'userinvalidcssjstitle' => "'''Προσοχή:''' Οὐχ ὑφίσταται ''skin'' \"\$1\". Μέμνησο: αἱ προσηρμοσμέναι δέλτοι .css καὶ .js χρῶνται ἐπώνυμον τι ἔχον πεζὰ γράμματα, π.χ. {{ns:user}}:Foo/monobook.css ἐν ἀντίθεσει πρὸς τὸν {{ns:user}}:Foo/Monobook.css.", +'userinvalidcssjstitle' => "'''Προσοχή:''' Οὐχ ὑφίσταται ''skin'' \"\$1\". Μέμνησο: αἱ προσηρμοσμέναι δέλτοι .css καὶ .js χρῶνται ἐπώνυμον τι ἔχον πεζὰ γράμματα, π.χ. {{ns:user}}:Foo/vector.css ἐν ἀντίθεσει πρὸς τὸν {{ns:user}}:Foo/Vector.css.", 'updated' => '(Ἐνημερωθέν)', 'note' => "'''Ἐπισήμανσις:'''", 'previewnote' => "'''Ἥδε ἐστὶ προθεώρησις, οὐχὶ καταγραφὴ τῶν μεταβολῶν!'''", @@ -629,9 +618,6 @@ $2', Βεβαιοῦτε ἡμᾶς περὶ τῆς καινοπρεπείας ὅτου ἔργου γραφομένου ὑφ'ὑμῶν ἐνθάδε. Βεβαιοῦτε ἡμᾶς, ἐπἴσης, περὶ τῆς μὴ ἐκχωρήσεως εἰς ἀλλοτρίους πρὸς ὑμᾶς τοῦ δικαιώματος δημοσιεύσεως καὶ ὀνήσεως οὗ, ἥντινα ἔκτασιν αὐτὸ ἔχει.
    '''ΠΑΡΑΚΑΛΟΥΜΕΝ ΥΜΑΣ ΙΝΑ ΜΗ ΑΝΑΡΤΗΤΕ ΚΕΙΜΕΝΑ ΑΛΛΟΤΡΙΩΝ ΕΙ ΜΗ ΕΧΗΤΕ ΤΗΝ ΑΔΕΙΑΝ ΤΟΥ ΚΑΤΟΧΟΥ ΤΩΝ ΠΝΕΥΜΑΤΙΚΩΝ ΔΙΚΑΙΩΜΑΤΩΝ!'''", -'longpagewarning' => "'''ΠΡΟΣΟΧΗ: Ἡδε ἡ δέλτος μῆκος $1 kb / χδ (χιλιοδυφιολέξεων ἢ χιλιάδων λέξεων ''δυ''αδικῶν ψη''φί''ων) ἔχει. -Ἐνδέχεται πλοηγητήρια τινὰ προβληματικῶς μεταγράφειν δέλτους προσεγγίζοντας τὰ ἢ μακρυτέρας τῶν 32 kb. -Θεωρήσατε τὸ διασπάσειν τὴν δέλτον εἰς μικρώτερα τεμάχια.'''", 'protectedpagewarning' => "'''ΠΡΟΣΟΧΗ: Ἥδε ἡ δέλτος κεκλῃσμένη ἐστὶν οὕτως ὥστε μόνον χρώμενοι ἔχοντες προνόμια ἐπιτρόπων δύνωνται μεταγράψειν αὐτήν.'''", 'semiprotectedpagewarning' => "'''ΠΡΟΣΟΧΗ: Ἥδε ἡ δέλτος κεκλῃσμένη ἐστὶν οὕτως ὥστε μόνον χρώμενοι ἔχοντες προνόμια ἐπιτρόπων δύνωνται μεταγράψειν αὐτήν.'''", 'templatesused' => '{{PLURAL:$1|Πρότυπον κεχρησμένον|Πρότυπα κεχρησμένα}} ἐν τοιαύτῃ δέλτῳ:', @@ -751,6 +737,8 @@ $1", 'logdelete-failure' => "'''Ἡ ὁρατότης τοῦ καταλόγου μὴ ῥυθμίσιμος ἦν:''' $1", 'revdel-restore' => 'Ἀλλάττειν ὁρατότητα', +'revdel-restore-deleted' => 'ἐσβεσμέναι ἀναθεωρήσεις', +'revdel-restore-visible' => 'ὁραταὶ ἀναθεωρήσεις', 'pagehist' => 'Ἱστορία δέλτου', 'deletedhist' => 'Ἱστορία διαγεγραμμένη', 'revdelete-content' => 'περιεχόμενον', @@ -802,6 +790,7 @@ $1", # Diffs 'history-title' => 'Αἱ πρότεραι ἐκδόσεις τῆς δέλτου "$1"', 'difference' => '(Τὰ μεταβεβλημένα)', +'difference-multipage' => '(Διαφορὰ μεταξὺ δέλτων)', 'lineno' => 'Γραμμή $1:', 'compareselectedversions' => 'Συγκρίνειν τὰς ἐπειλεγμένας δέλτους', 'showhideselectedversions' => 'Δεικνύειν/κρύπτειν τὰς ἐπειλεγμένας ἐκδόσεις', @@ -915,6 +904,7 @@ $1", 'contextlines' => 'Σειραὶ ἀνά ἀποτέλεσμα:', 'contextchars' => 'Συναφὲς κείμενον ἀνά σειράν:', 'stub-threshold' => 'Ἄνω φράγμα διὰ τοῦς συνδέσμους πρὸς λείμματα (δυφία):', +'stub-threshold-disabled' => 'Ἀπενεργηθέν', 'recentchangesdays' => 'Αἱ ἡμέραι αἱ δεικτέαι ἐν ταῖς προσφάτοις ἀλλαγαῖς:', 'recentchangesdays-max' => '(τὸ μέγιστον $1 {{PLURAL:$1|ἡμέρα|ἡμέραι}})', 'recentchangescount' => 'Δεικτέος προκαθωρισμένως ἀριθμὸς μεταγραφῶν:', @@ -977,7 +967,7 @@ $1", 'prefs-advancedrendering' => 'Προηγμέναι ἐπιλογαί', 'prefs-advancedsearchoptions' => 'Προηγμέναι ἐπιλογαί', 'prefs-advancedwatchlist' => 'Προηγμέναι ἐπιλογαί', -'prefs-display' => 'Ἐπίδειξις ἐπιλογῶν', +'prefs-displayrc' => 'Ἐπίδειξις ἐπιλογῶν', 'prefs-diffs' => 'Διαφοραί', # User rights @@ -1078,7 +1068,6 @@ $1", 'right-siteadmin' => 'Φράττειν καὶ ἀποφράττειν τὴν βάσιν δεδομένων', 'right-reset-passwords' => 'Ἀναρρυθμίζειν συνθήματα ἄλλων χρωμένων', 'right-override-export-depth' => 'Ἐξάγειν δέλτους περιλαμβανομένων συνδεδεμένων δέλτων ἕως βάθος τι 5 ἐπιπέδων', -'right-versiondetail' => 'Δεικνύναι τὰς ἐκτεταμένας πύστεις τῆς ἐκδόσεως λογισμικοῦ.', # User rights log 'rightslog' => 'Κατάλογος δικαιωμάτων χρωμένων', @@ -1128,14 +1117,9 @@ $1", 'recentchanges-legend' => 'Ἐπιλογαὶ προσφάτων μεταβολῶν', 'recentchangestext' => 'Ἀνιχνεύσειν τὰς πλείω πρόσφατους ἀλλαγὰς οῦ βίκι ἐν τῇδε τῇ δέλτῳ.', 'recentchanges-feed-description' => 'Παρακολουθεῖν τὰς πλείω προσφάτους ἀλλαγὰς τοῦ βίκι ἐν ταύτῃ περιλήψει.', -'recentchanges-label-legend' => 'Ὑπόμνημα: $1.', -'recentchanges-legend-newpage' => '$1 - νέα δέλτος', 'recentchanges-label-newpage' => 'Ἥδε ἡ μεταγραφὴ ἐποίησεν νέαν δέλτον τινά', -'recentchanges-legend-minor' => '$1 - μικρὰ μεταγραφή', 'recentchanges-label-minor' => 'Ἥδε μικρὰ μεταγραφή ἐστιν', -'recentchanges-legend-bot' => '$1 - μεταγραφὴ ὑπὸ αὐτομάτου τινός', 'recentchanges-label-bot' => 'Ἥδε ἡ μεταγραφὴ ἐτελέσθη ὑπὸ αὐτομάτου τινός', -'recentchanges-legend-unpatrolled' => '$1 - ἀφρούρητος μεταγραφή', 'recentchanges-label-unpatrolled' => 'Ἥδε ἡ μεταγραφὴ μὴ ἐλεγμένη ἐστίν', 'rcnote' => "Κατωτέρω {{PLURAL:$1|ἐστὶ '''1''' ἀλλαγὴ|εἰσὶν αἱ τελευταῖαι '''$1''' ἀλλαγαὶ}} ἐν {{PLURAL:$2|τῇ τελευταίᾳ ἡμέρᾳ|ταῖς τελευταίαις '''$2''' ἡμέραις}}, ἕως καὶ $5, $4.", 'rcnotefrom' => "Ἰδοῦ αἱ ἀλλαγαὶ ἐκ τοῦ '''$2''' (ἕως τὸ '''$1''').", @@ -1217,7 +1201,6 @@ $1", * Ὄνομα ὑπάρχοντος ἀρχείου: '''[[:$2]]''' Ἐπίλεξον διάφορον ὄνομά τι.", 'file-exists-duplicate' => 'Τὸ ἀρχεῖον ἐστὶ διπλότυπον τοῦ/τῶν ἑξῆς {{PLURAL:$1|ἀρχείου|ἀρχείων}}:', -'successfulupload' => 'Ἐπιφόρτισις ἐπιτυχής', 'uploadwarning' => 'Προμήνυσις ἐπιφορτίσεως', 'savefile' => 'Σῴζειν ἀρχεῖον', 'uploadedimage' => 'ἐπιπεφορτισμένον "[[$1]]"', @@ -1236,6 +1219,7 @@ $1", 'upload-description' => 'Περιγραφὴ ἀρχείου', 'upload-options' => 'Ἐπιφόρτωσις ἐπιλογῶν', 'watchthisupload' => 'Ἐφορᾶν τόδε τὸ ἀρχεῖον', +'upload-success-subj' => 'Ἐπιφόρτισις ἐπιτυχής', 'upload-proto-error' => 'Ἐσφαλμένον πρωθυπόμνημα', 'upload-proto-error-text' => 'Ἡ ἀπόμακρος ἐπιφόρτισις ἀπαιτεῖ URL ἔχον πρόθεμα http://ftp://.', @@ -1374,7 +1358,6 @@ $1", 'statistics-edits-average' => 'Μέσος ἀριθμὸς μεταγραφῶν ἀνὰ δέλτον', 'statistics-views-total' => 'Συνολικαὶ ἐπιθεωρήσεις', 'statistics-views-peredit' => 'Ἐπιθεωρήσεις ἀνὰ μεταγραφή', -'statistics-jobqueue' => 'Μάκρος [http://www.mediawiki.org/wiki/Manual:Job_queue καταλόγου ἀναμένοντων]', 'statistics-users' => 'Ἐγγεγραμμένοι [[Special:ListUsers|χρώμενοι]]', 'statistics-users-active' => 'Ἐνεργοὶ χρώμενοι (χρώμενοι οἳ have edited or performed an action διάφορον τῆς ποιήσεως λογισμοῦ ἐν τῷ παρελθόντι μηνί)', 'statistics-users-active-desc' => 'Χρώμενοι δραστήριοι ἐν τῷ παρελθόντι μηνί {{PLURAL:$1|ἡμέρα|$1 ἡμέραι}}', @@ -1384,7 +1367,7 @@ $1", 'disambiguationspage' => 'Template:σαφήνισις', 'doubleredirects' => 'Ἀναδιευθύνσεις διπλότυπαι', -'doubleredirectstext' => 'Ἥδε ἡ δέλτος συγκαταλέγει δέλτους αἵπερ ἀνακατευθύνουσι πρὸς ἑτέρας δέλτους ἀνακατευθύνσεως. Πᾶσα σειρά περιέχει συνδέσμους πρὸς τὴν τε πρώτην καὶ τὴν τε δευτέραν δέλτον ἀνακατευθύνσεως καὶ τὸν τε προορισμὸν τῆς δευτέρας δέλτου ἀνακατευθύνσεως ἥπερ ἐστὶ συνήθως ὁ πραγματικὸς προορισμὸς τῆς ἀνακατευθύνσεως ὅπου σὲ ἔδει δεδεγμένος εἶναι. Τὰ διαγεγραμμένα λήμματα ἐπιλέλυνται.', +'doubleredirectstext' => 'Ἥδε ἡ δέλτος συγκαταλέγει δέλτους αἵπερ ἀνακατευθύνουσι πρὸς ἑτέρας δέλτους ἀνακατευθύνσεως. Πᾶσα σειρά περιέχει συνδέσμους πρὸς τὴν τε πρώτην καὶ τὴν τε δευτέραν δέλτον ἀνακατευθύνσεως καὶ τὸν τε προορισμὸν τῆς δευτέρας δέλτου ἀνακατευθύνσεως ἥπερ ἐστὶ συνήθως ὁ πραγματικὸς προορισμὸς τῆς ἀνακατευθύνσεως ὅπου σὲ ἔδει δεδεγμένος εἶναι. Τὰ διαγεγραμμένα λήμματα ἐπιλέλυνται.', 'double-redirect-fixed-move' => 'Ἡ [[$1]] κεκίνηται, τὸ νῦν ἀναδιευθύνεται πρὸς τὴν [[$2]]', 'double-redirect-fixer' => 'Διορθωτὴς ἀναδιευθύνσεων', @@ -1570,7 +1553,6 @@ $1", # Watchlist 'watchlist' => 'Τὰ ἐφορώμενά μου', 'mywatchlist' => 'Τὰ ἐφορώμενά μου', -'watchlistfor' => "(διὰ '''$1''')", 'nowatchlist' => 'Οὐδὲν τεμάχιον ἐν τῇ ἐφοροδιαλογῇ σου.', 'watchlistanontext' => '$1 πρὸ τοῦ ὁρᾶν ἢ τοῦ μεταγράφειν τεμάχια τινὰ ἐν τῇ ἐφοροδιαλογῇ σου.', 'watchnologin' => 'Μὴ συνδεδεμένος', @@ -1848,7 +1830,6 @@ $1', 'ipb-edit-dropdown' => 'Μεταγράφειν τὰς αἰτίας διαγραφῆς', 'ipb-unblock-addr' => 'Ἀποφράττειν $1', 'ipb-unblock' => 'Ἀποφράττειν ὄνομα χρωμένου τι ἢ IP-διεύθυνσιν τινά', -'ipb-blocklist-addr' => 'Ὁρᾶν τὰς ὑπάρχουσας φραγὰς διὰ $1', 'ipb-blocklist' => 'Ὁρᾶν τὰς ὑπάρχουσας φραγὰς', 'ipb-blocklist-contribs' => 'Ἔρανοι τοῦ $1', 'unblockip' => 'Ἀποφράττειν χρώμενον', @@ -2232,10 +2213,10 @@ $1', 'imagemaxsize' => "Ὅριον μεγέθους εἰκόνος:
    ''(ἐν περιπτώσει δέλτων περιγραφῆς ἀρχείων)''", 'thumbsize' => 'Μέγεθος μικρογραφίας:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|δέλτος|δέλτοι}}', -'file-info' => '(μέγεθος ἀρχείου: $1, τὐπος MIME: $2)', -'file-info-size' => '($1 × $2 εἰκονοστοιχεῖα, μέγεθος ἀρχείου: $3, τύπος MIME: $4)', +'file-info' => 'μέγεθος ἀρχείου: $1, τὐπος MIME: $2', +'file-info-size' => '$1 × $2 εἰκονοστοιχεῖα, μέγεθος ἀρχείου: $3, τύπος MIME: $4', 'file-nohires' => 'Οὐ διατίθεται ὑψηλοτέρα ἀνάλυσις.', -'svg-long-desc' => '(ἀρχεῖον SVG, ὀνομαστὶ $1 × $2 εἰκονοστοιχεῖα, μέγεθος ἀρχείου: $3)', +'svg-long-desc' => 'ἀρχεῖον SVG, ὀνομαστὶ $1 × $2 εἰκονοστοιχεῖα, μέγεθος ἀρχείου: $3', 'show-big-image' => 'Πλήρης ἀνάλυσις', 'show-big-image-thumb' => 'Τῆσδε τῆς προθεωρήσεως μέγεθος: $1 × $2 εἰκονοστοιχεῖα', 'file-info-gif-looped' => 'ἄπειρος βρόγχος', @@ -2608,6 +2589,7 @@ $1', 'table_pager_first' => 'Ἡ δέλτος ἡ πρώτη', 'table_pager_last' => 'Δέλτος ἐσχάτη', 'table_pager_limit' => 'Δεικνύναι $1 στοιχεῖα ἀνἀ δέλτον', +'table_pager_limit_label' => 'Τεμάχια ἀνὰ δέλτον:', 'table_pager_limit_submit' => 'Ἰέναι', 'table_pager_empty' => 'Οὐδὲν ἀποτέλεσμα', @@ -2675,6 +2657,7 @@ $1', 'version-hook-subscribedby' => 'Ὑπογεγραφυῖα ὑπὸ', 'version-version' => '(Ἔκδοσις $1)', 'version-license' => 'Ἄδεια', +'version-poweredby-others' => 'ἄλλα', 'version-software' => 'Ἐγκατεστημένον λογισμικόν', 'version-software-product' => 'Προϊόν', 'version-software-version' => 'Ἔκδοσις', @@ -2741,6 +2724,9 @@ $1', 'tags-edit' => 'μεταγραφή', 'tags-hitcount' => '$1 {{PLURAL:$1|μεταβολή|μεταβολαί}}', +# Special:ComparePages +'compare-submit' => 'Συγκρίνειν', + # Database error messages 'dberr-header' => 'Τόδε τὸ βίκι ἔχει πρόβλημα', 'dberr-problems' => 'Συγγνώμην! Ἐμπεφανίκασι τεχνικαὶ δυσχέρειαι.', diff --git a/languages/messages/MessagesGsw.php b/languages/messages/MessagesGsw.php index c1894426..c6eb7450 100644 --- a/languages/messages/MessagesGsw.php +++ b/languages/messages/MessagesGsw.php @@ -14,6 +14,7 @@ * @author MaxSem * @author Melancholie * @author MichaelFrey + * @author Purodha * @author Remember the dot * @author Spacebirdy * @author Strommops @@ -131,8 +132,7 @@ $messages = array( 'tog-editsection' => 'Gleicher aazeige für ds Bearbeite vo einzelnen Absätz', 'tog-editsectiononrightclick' => 'Einzelni Absätz ändere mit Rächtsclick (Javascript)', 'tog-showtoc' => 'Inhaltsverzeichnis aazeige bi Artikle mit meh als drei Überschrifte', -'tog-rememberpassword' => 'Passwort spychere (Cookie)', -'tog-editwidth' => 'Fäld zum Täkscht yygee mit dr volle Breiti', +'tog-rememberpassword' => 'Mit däm Browser duurhaft aamälde (Maximal fir $1 {{PLURAL:$1|Tag|Täg}})', 'tog-watchcreations' => 'Sälber gmachti Sytene beobachte', 'tog-watchdefault' => 'Vo dir nöi gmachti oder verändereti Syte beobachte', 'tog-watchmoves' => 'Sälber verschobeni Sytene beobachte', @@ -273,31 +273,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Abschnitt zuefiege', -'vector-action-delete' => 'Lesche', -'vector-action-move' => 'Verschiebe', -'vector-action-protect' => 'Schitze', -'vector-action-undelete' => 'Widerhärstelle', -'vector-action-unprotect' => 'Frej gee', -'vector-namespace-category' => 'Kategorii', -'vector-namespace-help' => 'Hilfssyte', -'vector-namespace-image' => 'Datei', -'vector-namespace-main' => 'Syte', -'vector-namespace-media' => 'Mediesyte', -'vector-namespace-mediawiki' => 'Syschtemnochricht', -'vector-namespace-project' => 'Projäktsyte', -'vector-namespace-special' => 'Spezialsyte', -'vector-namespace-talk' => 'Diskussion', -'vector-namespace-template' => 'Vorlag', -'vector-namespace-user' => 'Benutzersyte', -'vector-view-create' => 'Aalege', -'vector-view-edit' => 'Bearbeite', -'vector-view-history' => 'Versionsgschicht', -'vector-view-view' => 'Läse', -'vector-view-viewsource' => 'Quälltext aaluege', -'actions' => 'Aktione', -'namespaces' => 'Namensryym', -'variants' => 'Variante', +'vector-action-addsection' => 'Abschnitt zuefiege', +'vector-action-delete' => 'Lesche', +'vector-action-move' => 'Verschiebe', +'vector-action-protect' => 'Schitze', +'vector-action-undelete' => 'Widerhärstelle', +'vector-action-unprotect' => 'Frej gee', +'vector-simplesearch-preference' => 'Erwytereti Suechvorschleg aktiviere (nume Vector)', +'vector-view-create' => 'Aalege', +'vector-view-edit' => 'Bearbeite', +'vector-view-history' => 'Versionsgschicht', +'vector-view-view' => 'Läse', +'vector-view-viewsource' => 'Quälltext aaluege', +'actions' => 'Aktione', +'namespaces' => 'Namensryym', +'variants' => 'Variante', 'errorpagetitle' => 'Fähler', 'returnto' => 'Zruck zur Syte $1.', @@ -358,6 +348,10 @@ S versueche grad zvyl Benutzer die Syte aazluege. Bitte wart e paar Minute, voreb Du s nomol versuechsch. $1', +'pool-timeout' => ' +Di maximal Wartezyt fir e Lock isch umme', +'pool-queuefull' => 'D Warteschlang isch voll', +'pool-errorunknown' => 'Nit bekannte Fähler', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Über {{GRAMMAR:akkusativ|{{SITENAME}}}}', @@ -520,7 +514,8 @@ Vergiss nid, dyni [[Special:Preferences|{{SITENAME}}-Yystellige]] aazpasse.', 'yourname' => 'Dyy Benutzername', 'yourpassword' => 'Passwort:', 'yourpasswordagain' => 'Passwort no mol yygee:', -'remembermypassword' => 'Passwort spychere', +'remembermypassword' => 'Uf däm Computer duurhaft aamälde (Maximal fir $1 {{PLURAL:$1|Tag|Täg}})', +'securelogin-stick-https' => 'Noch em Aamälde mit HTTPS verbunde blybe', 'yourdomainname' => 'Dyyni Domäne', 'externaldberror' => 'Entwäder s lit e Fähler bi dr externe Authentifizierung vor, oder Du derfsch Dyy extern Benutzerkonto nid aktualisiere.', 'login' => 'Aamälde', @@ -537,6 +532,7 @@ Vergiss nid, dyni [[Special:Preferences|{{SITENAME}}-Yystellige]] aazpasse.', 'gotaccount' => "Du häsch scho a Konto? '''$1'''", 'gotaccountlink' => '»Login fir Benutzer, wu scho aagmäldet sin«', 'createaccountmail' => 'iber E-Mail', +'createaccountreason' => 'Grund:', 'badretype' => 'Di beidi Passwörter stimme nid zämme.', 'userexists' => 'Dä Benutzername git s scho. Bitte nimm e andere.', @@ -557,6 +553,7 @@ Iberprief d Schrybwys, oder mäld Di as [[Special:UserLogin/signup|neje Benutzer 'wrongpasswordempty' => 'Du hesch vergässe dyy Passwort yyzgee. Bitte versuech s nomol.', 'passwordtooshort' => 'Passwerter mien zmindescht {{PLURAL:$1|1 Zeiche|$1 Zeiche}} haa.', 'password-name-match' => 'Dyy Passwort muess sich vu Dyynem Benutzername unterscheide.', +'password-login-forbidden' => 'D Verwändig vu däm Benutzernamen un Passwort isch verbotte.', 'mailmypassword' => 'Es nöis Passwort schicke', 'passwordremindertitle' => 'Nei Passwort fir {{SITENAME}}', 'passwordremindertext' => 'Ebber mit dr IP-Adress $1 het e nej Passwort fir d Aamäldig bi {{SITENAME}} ($4) aagfordert, wahrschyyns Du sälber. @@ -600,6 +597,9 @@ Wänn s Benutzerkonto us Versäh aaglait woren isch, chasch die Nochricht ignori 'loginlanguagelabel' => 'Sproch: $1', 'suspicious-userlogout' => 'Dyy Versuech di abzmälde isch abbroche wore, wel s uusgsäh het, wie wänn s vun eme bschedigte Browser oder eme Cacheproxy uus gsändet woren isch.', +# E-mail sending +'php-mail-error-unknown' => 'Nit bekannte Fähler mit dr Funktion mail() vu PHP', + # Password reset dialog 'resetpass' => 'Passwort fir s Benutzerkonto ändere oder zrucksetze', 'resetpass_announce' => 'Aamäldig mit em Code, wu per Mail zuegschickt woren isch. Zum d Aamäldig abzschliesse, muesch jetz e nej Passwort wehle.', @@ -651,9 +651,10 @@ Villicht hesch Dyy Passwort scho gänderet oder e nej temporär Passwort aagford 'showlivepreview' => 'Live-Vorschau', 'showdiff' => 'Zeig Änderige', 'anoneditwarning' => "'''Warnig:''' Si sin nit aagmäldet. Ihri IP-Adrässe wird in de Gschicht vo däm Artikel gspeicheret.", +'anonpreviewwarning' => "''Du bisch nit aagmäldet. Bim Spychere wird Dyy IP-Adräss yydrait in d Versionsgschicht vu däre Syte.''", 'missingsummary' => "'''Obacht:''' Du hesch kei Zämefassig aagee. Wenn du nomol uf Spychere drucksch, wird d Änderung ohni gspychert.", 'missingcommenttext' => 'Bitte gib Dyy Kommentar unte yy.', -'missingcommentheader' => "'''ACHTIG:''' Du hesch kei Iberschrift im Fäld „Betreff:“ yygee. Wänn nomol uf „Syte spichere“ drucksch, wird Dyyni Bearbeitig ohni Iberschrift gspicheret.", +'missingcommentheader' => "'''ACHTIG:''' Du hesch kei Iberschrift im Fäld „Betreff:“ yygee. Wänn nomol uf „{{int:savearticle}}“ drucksch, wird Dyyni Bearbeitig ohni Iberschrift gspicheret.", 'summary-preview' => 'Vorschou vor Zämefassig:', 'subject-preview' => 'Vorschau vum Betreff:', 'blockedtitle' => 'Benutzer isch gsperrt.', @@ -730,7 +731,11 @@ As Information chunnt do ne aktuälle Uuszug us em Benutzersperr-Logbuech:', '''Mozilla:''' ''Strg-Shift-R'', '''IE:''' ''Strg-F5'', '''Safari:''' ''Cmd-Shift-R'', '''Konqueror:''' ''F5''.", 'userjspreview' => "== Vorschau vu Dyynem Benutzer-Javascript. == '''Gib acht:''' Noch em Spychere muesch Dyy Browser aawyse di nej Version z lade: '''Mozilla:''' ''Strg-Shift-R'', '''IE:''' ''Strg-F5'', '''Safari:''' ''Cmd-Shift-R'', '''Konqueror:''' ''F5''.", -'userinvalidcssjstitle' => "'''Achtig:''' D Skin „$1“ git s nid. Dänk dra, ass benutzerspezifischi .css- und .js-Syte mit eme Chleibuechstabe mien aafange, also z B. ''{{ns:user}}:Mustermann/monobook.css'' statt ''{{ns:user}}:Mustermann/Monobook.css''.", +'sitecsspreview' => "'''Obacht: Du luegsch nume ne Vorschau vu däm CSS aa.''' +'''S isch nonig gspycheret wore!'''", +'sitejspreview' => "'''Obacht: Du luegsch nume ne Vorschau vu däm JavaScript aa.''' +'''S isch nonig gspycheret wore!'''", +'userinvalidcssjstitle' => "'''Achtig:''' D Skin „$1“ git s nid. Dänk dra, ass benutzerspezifischi .css- und .js-Syte mit eme Chleibuechstabe mien aafange, also z B. ''{{ns:user}}:Mustermann/vector.css'' statt ''{{ns:user}}:Mustermann/Vector.css''.", 'updated' => '(Gänderet)', 'note' => "'''Obacht: '''", 'previewnote' => "'''Das isch numen e Vorschau und nonig gspycheret!'''", @@ -768,7 +773,6 @@ Hiemit gisch du zue, das du dä Tekscht '''sälber gschribe''' hesch, das der Te 'copyrightwarning2' => "Dängge Si dra, dass alli Änderige {{GRAMMAR:dativ {{SITENAME}}}} vo andere Benutzer wider gänderet oder glöscht chönne wärde. Wenn Si nit wänn, dass ander Lüt an Ihrem Tekscht ummedoktere denn schicke Si ihn jetz nit ab.
    Si verspräche uns usserdäm, dass Si des alles selber gschribe oder vo nere Quälle kopiert hen, wo Public Domain odr sunscht frei isch (lueg $1 für Details). '''SETZE SI DO OHNI ERLAUBNIS KEINI URHEBERRÄCHTLICH GSCHÜTZTI WÄRK INE!'''", -'longpagewarning' => 'WARNIG: Die Syten isch $1 kB gross; elteri Browser chönnte Problem ha, Sytene z bearbeite wo grösser sy als 32 kB. Überleg bitte, öb du Abschnitt vo dere Syte zu eigete Sytene chönntsch usboue.', 'longpageerror' => "'''Fähler: Dä Täxt, wu Du spichere wit, isch $1 KB gross. Des isch gresser wie s erlaubt Maximum vu $2 KB – s Spichere isch nid megli.'''", 'readonlywarning' => "'''Achtung: Die Datebank isch fir Wartigsarbete gesperrt. Wäge däm chenne Dyyni Änderige im Momänt nid gspicheret wäre. Sichere de Täxt bitte lokal uf Dyynem Computer un versuech speter nomol, d Änderige z ibertrage.''' @@ -940,6 +944,8 @@ $1", 'logdelete-failure' => "'''Logbuchsichtbarkeit cha nit gänderet wäre:''' $1", 'revdel-restore' => 'Sichtbarkeit ändere', +'revdel-restore-deleted' => 'gleschti Versione', +'revdel-restore-visible' => 'sichtbari Versione', 'pagehist' => 'Versionsgeschicht', 'deletedhist' => 'Gleschti Versione', 'revdelete-content' => 'Syteinhalt', @@ -1006,11 +1012,13 @@ Stell sicher, ass d Versionsgschicht vun eme Artikel historisch korrekt isch.', # Diffs 'history-title' => 'Versionsgschicht vo „$1“', 'difference' => '(Unterschide zwüsche Versione)', +'difference-multipage' => '(Unterschid zwische Syte)', 'lineno' => 'Zyle $1:', 'compareselectedversions' => 'Usgwählti Versione verglyche', 'showhideselectedversions' => 'Uusgwehlti Versione zeige/verstecke', 'editundo' => 'rückgängig', -'diff-multi' => '(Der Versioneverglych zeigt ou d Änderige vo {{PLURAL:$1|1 Version|$1 Versione}} derzwüsche.)', +'diff-multi' => '({{PLURAL:$1|Ei Version|$1 Versione}} vu {{PLURAL:$2|eim Benutzer|$2 Benutzer}}, {{PLURAL:$1|wu derzwische lyt, wird|wu derzwische lige, wäre}} nit aazeigt)', +'diff-multi-manyusers' => '({{PLURAL:$1|Ei Version|$1 Versione}} vu meh {{PLURAL:$2|eim Benutzer|$2 Benutzer}}, {{PLURAL:$1|wu derzwische lyt un nit aazeigt wird|wu derzwische lige un nit aazeigt wäre}})', # Search results 'searchresults' => 'Suech-Ergäbnis', @@ -1045,6 +1053,7 @@ Stell sicher, ass d Versionsgschicht vun eme Artikel historisch korrekt isch.', 'searchprofile-everything-tooltip' => 'Gsamte Inhalt dursueche (au d Diskussionssyte)', 'searchprofile-advanced-tooltip' => 'Suech in wytere Namensryym', 'search-result-size' => '$1 ({{PLURAL:$2|1 Wort|$2 Werter}})', +'search-result-category-size' => '{{PLURAL:$1|1 Kategorii|$1 Kategorie}} ({{PLURAL:$2|1 Unterkategorii|$2 Unterkategorie}}, {{PLURAL:$3|1 Datei|$3 Dateie}})', 'search-result-score' => 'Relevanz: $1 %', 'search-redirect' => '(Wyterleitig $1)', 'search-section' => '(Abschnitt $1)', @@ -1119,6 +1128,7 @@ Stell sicher, ass d Versionsgschicht vun eme Artikel historisch korrekt isch.', 'contextlines' => 'Zyle pro Träffer', 'contextchars' => 'Zeiche pro Zyle', 'stub-threshold' => 'Gleichformatierig vu chleine Syte (in Byte):', +'stub-threshold-disabled' => 'Deaktiviert', 'recentchangesdays' => 'Aazahl vu dr Täg, wu d Lischt vu dr „Letschte Änderige“ standardmässig soll umfasse:', 'recentchangesdays-max' => '(Maximal $1 {{PLURAL:$1|Tag|Täg}})', 'recentchangescount' => 'Aazahl vu Bearbeitige, wu standardmässig aazeigt wäre:', @@ -1152,6 +1162,7 @@ Do het s e zuefellig generierte Wärt, wu du chasch bruche: $1', 'prefs-files' => 'Bilder', 'prefs-custom-css' => 'Benutzerdefinierti CSS', 'prefs-custom-js' => 'Benutzerdefiniert JS', +'prefs-common-css-js' => 'Gmeinsam CSS/JS fir alli Skin:', 'prefs-reset-intro' => 'Du chasch die Syte verwände go d Yystellige uf dr Standard zrucksetze. Des cha nimmi ruckgängig gmacht wäre.', 'prefs-emailconfirm-label' => 'E-Mail-Bstätigung:', @@ -1188,9 +1199,15 @@ Des cha nimmi ruckgängig gmacht wäre.', 'prefs-advancedrendering' => 'Erwytereti Optione', 'prefs-advancedsearchoptions' => 'Erwytereti Optione', 'prefs-advancedwatchlist' => 'Erwytereti Optione', -'prefs-display' => 'Aazeigoptione', +'prefs-displayrc' => 'Aazeigoptione', +'prefs-displaysearchoptions' => 'Aazeigoptione', +'prefs-displaywatchlist' => 'Aazeigoptione', 'prefs-diffs' => 'Versionsverglych', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Siht giltig uus', +'email-address-validity-invalid' => 'S brucht e giltigi Adräss!', + # User rights 'userrights' => 'Benutzerrächtsverwaltig', 'userrights-lookup-user' => 'Verwalt d Gruppezuegherigkeit', @@ -1273,6 +1290,7 @@ Des cha nimmi ruckgängig gmacht wäre.', 'right-hideuser' => 'E Benutzername sperre un verberge', 'right-ipblock-exempt' => 'Uusnahm vu IP-Sperrine, Autoblock und Rangesperre', 'right-proxyunbannable' => 'Uusnahm vu automatische Proxysperrine', +'right-unblockself' => 'Sich sälber entsperre', 'right-protect' => 'Syteschutzstatus ändere', 'right-editprotected' => 'Gschitzti Syte bearbeite (ohni Kaskadeschutz)', 'right-editinterface' => 'Benutzerinterface bearbeite', @@ -1295,7 +1313,6 @@ Des cha nimmi ruckgängig gmacht wäre.', 'right-siteadmin' => 'Datebank sperre un entsperre', 'right-reset-passwords' => 'S Passwort vun eme andere Benutzer zrucksetze', 'right-override-export-depth' => 'Exportier Syte mitsamt dr vergleichte Syte bis zuen ere Tiefi vu 5', -'right-versiondetail' => 'Detailinformatione iber d Software un d Versione aazeige', 'right-sendemail' => 'E-Mail an anderi Benutzer schicke', # User rights log @@ -1346,14 +1363,9 @@ Des cha nimmi ruckgängig gmacht wäre.', 'recentchanges-legend' => 'Optione vu dr Aazeig', 'recentchangestext' => 'Uff däre Syte chönne Si die letschte Änderige in däm Wiki aaluege.', 'recentchanges-feed-description' => 'Di letschten Änderige vo {{SITENAME}} i däm Feed abonniere.', -'recentchanges-label-legend' => 'Legänd: $1.', -'recentchanges-legend-newpage' => '$1 - neji Syte', 'recentchanges-label-newpage' => 'Die Bearbeitig het e neji Syte aagleit', -'recentchanges-legend-minor' => '$1 - chleini Änderig', 'recentchanges-label-minor' => 'Des isch e chleini Änderig', -'recentchanges-legend-bot' => '$1 - Bott-Bearbeitig', 'recentchanges-label-bot' => 'Die Bearbeitig isch dur e Bott uusgfiert wore', -'recentchanges-legend-unpatrolled' => '$1 - nit-gsichteti Bearbeitig', 'recentchanges-label-unpatrolled' => 'Die Bearbeitig isch nonig vun eme Fäldhieter aagluegt wore', 'rcnote' => "Azeigt {{PLURAL:$1|wird '''1''' Änderig|wärde di letschte '''$1''' Änderige}} {{PLURAL:$2|vom letschte Tag|i de letschte '''$2''' Täg}} (Stand: $4, $5)", 'rcnotefrom' => 'Des sin d Ändrige syter $2 (bis zem $1 zeigt).', @@ -1400,6 +1412,9 @@ Sytene, wo zu dyre [[Special:Watchlist|Beobachtigslischte]] ghöre, erschyne ''' 'upload_directory_missing' => 'S Upload-Verzeichnis ($1) fählt un het au dur dr Netzserver nit chenne aagleit wäre.', 'upload_directory_read_only' => 'Dr Netzserver het kei Schryybrächt fir s Upload-Verzeichnis ($1).', 'uploaderror' => 'Fähler bim Uffelade', +'upload-recreate-warning' => "'''Warnig: E Datei mit däm Name isch scho mol glescht oder verschobe wore.''' + +Do het s e Uuszug us em Lesch- un eme Verschiebigslogbuech:", 'uploadtext' => "Verwänd des Formular unte zum Dateie uffelade. Zum friejer uffegladeni Dateie aazluege oder z sueche lueg uf dr [[Special:FileList|Lischt vu uffegladene Dateie]], Weli Dateie uffeglade sin, sihsch im [[Special:Log/upload|Logbuech vu dr uffegladene Dateie]], weli glescht sin im [[Special:Log/delete|Lesch-Logbuech]] @@ -1433,6 +1448,17 @@ Lueg au d [[Special:NewFiles|Galerii vu neije Dateie]] fir e visuälle Iberblick 'filetype-unwanted-type' => "'''„.$1“''' isch e Dateiformat, wu nit gwinscht isch. Erlaubt {{PLURAL:$3|isch s Dateiformat|sin d Dateiformat}}: $2.", 'filetype-banned-type' => "'''„.$1“''' isch e Dateiformat, wu nit erlaubt isch. Erlaubt {{PLURAL:$3|isch s Dateiformat|sin d Dateiformat}}: $2.", 'filetype-missing' => 'D Datei, wu soll uffeglade wäre, het kei Erwyterig (z. B. „.jpg“).', +'empty-file' => 'D Datei, wu Du ibertrait hesch, isch läär.', +'file-too-large' => 'D Datei, wu Du ibertrait hesch, isch z groß.', +'filename-tooshort' => 'Dr Dateiname isch z churz.', +'filetype-banned' => 'Dää Dateityp isch gsperrt.', +'verification-error' => 'Die Datei het d Dateipriefig nit bstande.', +'hookaborted' => 'D Änderig, wu Du versuecht hesch, isch wäg eme Erwyterigs-Hooks abbroche wore.', +'illegal-filename' => 'Dr Dateiname isch nit erlaubt.', +'overwrite' => 'S Iberschryybe vun ere Datei, wu s scho git, isch nit erlaubt.', +'unknown-error' => 'S het e nit bekannte Fähler gee.', +'tmp-create-error' => 'E tämporäri Datei het nit chenne aagleit.', +'tmp-write-error' => 'Fähler bim Schryybe vu dr tämporäre Datei', 'large-file' => 'D Dateigressi sott, wänn s goht, nit gresser syy wie $1. Die Datei isch $2 gross.', 'largefileserver' => 'Die Datei isch gresser wie die vum Server yygstellti Maximalgressi.', 'emptyfile' => 'Di uffeglade Datei isch schyyns läär. Dr Grund cha ne Tippfähler im Dateiname syy. Bitte iberprief, eb du die Datei wirkli wit uffelade.', @@ -1459,13 +1485,14 @@ Wänn Du die Datei einewäg wit uffelade, gang bitte zruck un ändere dr Name. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Die Datei isch e Duplikat vu {{PLURAL:$1|däre Datei|däne $1 Dateie}}:', 'file-deleted-duplicate' => 'E identischi Version vu däre Datei ([[:$1]]) isch friejer scho mol glescht wore. Iberprief s Leschlogbuech, voreb Du si uffeladesch.', -'successfulupload' => 'Erfolgryych uffegelade', 'uploadwarning' => 'Warnig', 'uploadwarning-text' => 'Bitte tue unte d Dateibsschryybig ändere un versuech s nomol.', 'savefile' => 'Datei spychere', 'uploadedimage' => 'het „[[$1]]“ ufeglade', 'overwroteimage' => 'het e neiji Version vu „[[$1]]“ uffeglade', 'uploaddisabled' => 'Uffelade deaktiviert', +'copyuploaddisabled' => 'S Uffelade iber URL isch abschalte wore.', +'uploadfromurl-queued' => 'Dyy Uffeladig isch jetz in dr Warteschlang.', 'uploaddisabledtext' => 'S Uffelade vu Dateie isch deaktiviert.', 'php-uploaddisabledtext' => 'S Uffelade vu PHP-Dateie isch deaktiviert wore. Bitte iberprief d file_uploads-Yystellig.', 'uploadscripted' => 'In däre Datei git s HTML- oder Scriptcode, wu fälschligerwyys vun eme Webbrowser usgfiert chennt were.', @@ -1485,6 +1512,14 @@ Bitte prief, eb s dr Richtlinie entspricht, wänn Du die Datei no mol uffeladesc Zue Dyynere Information chunnt do s Lesch-Logbuech mit dr Begrindig fir di friejer Leschig:", 'filename-bad-prefix' => "Dr Dateiname fangt mit '''„$1“''' aa. Des isch isch normalerwyys dr Dateiname, wu vun ere Digitalkamera vorgee wird un d Datei nit bschryybt. Bitte gib dr Datei e Name, wu dr Inhalt besser bschryybt.", +'upload-success-subj' => 'Erfolgryych uffegelade', +'upload-success-msg' => 'Dyyni vu [$2] uffeglade Datei isch jetz do verfiegbar: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Fähler bim Uffelade', +'upload-failure-msg' => 'S het e Probläm gee mit Dyyre vu [$2] uffegladene Datei: + +$1', +'upload-warning-subj' => 'Warnig bim Uffelade', +'upload-warning-msg' => 'S het e Probläm gee bim Uffelade vu [$2]. Du chasch zruckgoh zum [[Special:Upload/stash/$1|Ufffeladformular]] go des Probläm lese.', 'upload-proto-error' => 'Falschs Protokoll', 'upload-proto-error-text' => 'D URL muess mit http:// oder ftp:// aafange.', @@ -1545,6 +1580,7 @@ Us Sicherheitsgrinde isch img_auth.php deaktiviert.', 'listfiles_search_for' => 'Suech noch Datei:', 'imgfile' => 'Datei', 'listfiles' => 'Lischte vo Bilder', +'listfiles_thumb' => 'Vorschaubilder', 'listfiles_date' => 'Datum', 'listfiles_name' => 'Name', 'listfiles_user' => 'Benutzer', @@ -1656,8 +1692,8 @@ Iberprief anderi Gleicher zue dr Vorlage, voreb Du die leschesch.', 'statistics-edits' => 'Sytebearbeitige', 'statistics-edits-average' => 'Bearbeitige pro Syte im Durchschnitt', 'statistics-views-total' => 'Sytenufruef insgsamt', +'statistics-views-total-desc' => 'Ufruef vu Syte un Spezialsyte, wu s nit git, wäre nit berucksichtigt', 'statistics-views-peredit' => 'Sytenufruef pro Bearbeitig', -'statistics-jobqueue' => 'Längi vu dr [http://www.mediawiki.org/wiki/Manual:Job_queue Uftragswarteschlang]', 'statistics-users' => 'Regischtrierti [[Special:ListUsers|Benutzer]]', 'statistics-users-active' => 'Aktivi Benutzer', 'statistics-users-active-desc' => 'Benutzer mit Bearbeitige {{PLURAL:$1|in dr letschte 24 Stund|in dr letschte $1 Täg}}', @@ -1670,7 +1706,7 @@ Iberprief anderi Gleicher zue dr Vorlage, voreb Du die leschesch.', 'doubleredirects' => 'Doppleti Wyterleitige (Redirects)', 'doubleredirectstext' => 'Die Lischt zeigt Wyterleitige, wu uf anderi Wyterleitige vergleiche. In jedere Zyylete het s Gleicher zue dr erschte un dr zwote Wyterleitig un s Ziil vu dr zwote Wyterleitig, wu normalerwys di gwinscht Ziilsyten isch. Do sott eigetli scho di erscht Wyterleitig druf zeige. -Durgstricheni Yytreg sin scho erledigt wore.', +Durgstricheni Yytreg sin scho erledigt wore.', 'double-redirect-fixed-move' => 'doppleti Wyterleitig ufglest: [[$1]] → [[$2]]', 'double-redirect-fixer' => 'DoubleRedirectBot', @@ -1693,6 +1729,8 @@ In jedere Zyylete het s Gleicher zue dr erschte un dr zwote Wyterleitig un s Zii 'nmembers' => '$1 {{PLURAL:$1|Syte|Sytene}}', 'nrevisions' => '$1 {{PLURAL:$1|Revision|Revisione}}', 'nviews' => '$1 {{PLURAL:$1|Betrachtig|Betrachtige}}', +'nimagelinks' => 'Brucht uf $1 {{PLURAL:$1|Syte|Syte}}', +'ntransclusions' => 'brucht uf $1 {{PLURAL:$1|Syte|Syte}}', 'specialpage-empty' => 'In dr Syte het s no kei aktuälli Yytreg.', 'lonelypages' => 'Verwaisti Sytene', 'lonelypagestext' => 'Die Syte wäre nit yybunde oder s wird nit uf si verwiise in {{SITENAME}}.', @@ -1848,34 +1886,40 @@ Zuesätzligi Informatione iber einzelni Rächt git s [[{{MediaWiki:Listgrouprigh 'listgrouprights-removegroup-self-all' => 'Cha alli Gruppe us em eigene Benutzerkonto useneh', # E-mail user -'mailnologin' => 'Du bisch nid aagmäldet oder hesch keis Mail aaggä', -'mailnologintext' => 'Du muesch [[Special:UserLogin|aagmäldet syy]] un e bstätigti E-Mail-Adräss in Dyyne [[Special:Preferences|Yystellige]] aagee ha, fir dass epper anderem es E-Mail chasch schicke.', -'emailuser' => 'Es Mail schrybe', -'emailpage' => 'E-Mail an Benutzer', -'emailpagetext' => 'Du chasch im Benutzer mit däm Formular e E-Mail schicke. +'mailnologin' => 'Du bisch nid aagmäldet oder hesch keis Mail aaggä', +'mailnologintext' => 'Du muesch [[Special:UserLogin|aagmäldet syy]] un e bstätigti E-Mail-Adräss in Dyyne [[Special:Preferences|Yystellige]] aagee ha, fir dass epper anderem es E-Mail chasch schicke.', +'emailuser' => 'Es Mail schrybe', +'emailpage' => 'E-Mail an Benutzer', +'emailpagetext' => 'Du chasch im Benutzer mit däm Formular e E-Mail schicke. As Absender wird d E-Mail-Adräss us Dyyne [[Special:Preferences|Yystellige]] yytrait, ass dr Benutzer Dir cha Antwort gee.', -'usermailererror' => 'S Mail-Objekt het e Fähler zruckgee:', -'defemailsubject' => '{{SITENAME}}-E-Mail', -'noemailtitle' => 'Kei e-Mail-Adrässe', -'noemailtext' => 'Dää Benutzer het kei bstätigti E-Mail-Adräss aagee oder wet kei E-Mail vo andere Benutzer.', -'nowikiemailtitle' => 'Kei E-Mail Versand mögli', -'nowikiemailtext' => 'De Benutzer möcht kei E-Mails vo andri Benutzer erhalte', -'email-legend' => 'E-Mail an e andere {{SITENAME}}-Benutzer schicke', -'emailfrom' => 'Vu:', -'emailto' => 'An:', -'emailsubject' => 'Beträff:', -'emailmessage' => 'Nochricht:', -'emailsend' => 'Abschicke', -'emailccme' => 'Schick e Kopii vu dr E-Mail a mii', -'emailccsubject' => 'Kopii vu Dyynere Nochricht an $1: $2', -'emailsent' => 'E-Mail furtgschickt', -'emailsenttext' => 'Dys E-Mail isch verschickt worde.', -'emailuserfooter' => 'Die E-Mail isch vum {{SITENAME}}-Benutzer „$1“ an „$2“ gschickt wore.', +'usermailererror' => 'S Mail-Objekt het e Fähler zruckgee:', +'defemailsubject' => '{{SITENAME}}-E-Mail', +'usermaildisabled' => 'Benutzer-E-Mail abgstellt', +'usermaildisabledtext' => 'Du chasch in däm Wiki kei E-Mail an anderi Benutzer schicke', +'noemailtitle' => 'Kei e-Mail-Adrässe', +'noemailtext' => 'Dää Benutzer het kei bstätigti E-Mail-Adräss aagee oder wet kei E-Mail vo andere Benutzer.', +'nowikiemailtitle' => 'Kei E-Mail Versand mögli', +'nowikiemailtext' => 'De Benutzer möcht kei E-Mails vo andri Benutzer erhalte', +'email-legend' => 'E-Mail an e andere {{SITENAME}}-Benutzer schicke', +'emailfrom' => 'Vu:', +'emailto' => 'An:', +'emailsubject' => 'Beträff:', +'emailmessage' => 'Nochricht:', +'emailsend' => 'Abschicke', +'emailccme' => 'Schick e Kopii vu dr E-Mail a mii', +'emailccsubject' => 'Kopii vu Dyynere Nochricht an $1: $2', +'emailsent' => 'E-Mail furtgschickt', +'emailsenttext' => 'Dys E-Mail isch verschickt worde.', +'emailuserfooter' => 'Die E-Mail isch vum {{SITENAME}}-Benutzer „$1“ an „$2“ gschickt wore.', + +# User Messenger +'usermessage-summary' => 'Systemnochricht gspycheret.', +'usermessage-editor' => 'System-Messenger', # Watchlist 'watchlist' => 'Beobachtigslischte', 'mywatchlist' => 'Beobachtigslischte', -'watchlistfor' => "(für '''$1''')", +'watchlistfor2' => 'Fir $1 $2', 'nowatchlist' => 'Du hesch ke Yträg uf dyre Beobachtigslischte.', 'watchlistanontext' => 'Du muesch Di $1 go Dyyni Beobachtungslischt z säh oder go Yytreg uf ere bearbeite.', 'watchnologin' => 'Du bisch nit aagmäldet', @@ -1991,7 +2035,10 @@ Di letscht Änderig het [[User:$3|$3]] ([[User talk:$3|Diskussion]]{{int:pipe-se 'revertpage' => 'Ruckgängig gmacht zue dr letschte Änderig vo [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussion]]) mit de letzte Version vo [[User:$1|$1]] widerhergstellt', 'revertpage-nouser' => 'Bearbeitige ruckgängig gmacht vu (Benutzername uusegnuu), letschti Fassig vu [[User:$1|$1]] widerhärgstellt', 'rollback-success' => 'D Änderige vu $1 sin ruckgängig gmacht wore un di letscht Version vu $2 isch widerhärgstellt wore.', -'sessionfailure' => 'S het e Probläm mit em Ibertrage vu Dyyne Benutzerdate gee. + +# Edit tokens +'sessionfailure-title' => 'Sitzigsfähler', +'sessionfailure' => 'S het e Probläm mit em Ibertrage vu Dyyne Benutzerdate gee. Die Aktion isch wäge däm us Sicherheitsgrind abbroche wore go ne falschi Zueornig vu Dyyne Änderige zuen eme andere Benutzer verhindere. Bitte gang zruck, tue d Syte nej lade un versuech s nomol.', @@ -2119,18 +2166,22 @@ $1', 'month' => 'u Monet:', 'year' => 'bis Jahr:', -'sp-contributions-newbies' => 'Zeig nume Biträg vo neie Benutzer', -'sp-contributions-newbies-sub' => 'vo nöji Benützer', -'sp-contributions-newbies-title' => 'Benutzerbyytreg vu neije Benutzer', -'sp-contributions-blocklog' => 'Sperrlogbuech', -'sp-contributions-deleted' => 'gleschti Bytreg', -'sp-contributions-logs' => 'Logbiecher', -'sp-contributions-talk' => 'Diskussion', -'sp-contributions-userrights' => 'Benutzerrächtsverwaltig', -'sp-contributions-blocked-notice' => 'Dää Benutzer isch zur Zyt gsperrt. Do chunnt dr aktuäll Yytrag us em Benutzersperr-Logbuech:', -'sp-contributions-search' => 'Suech no Benutzerbiträg', -'sp-contributions-username' => 'IP-Adress oder Benutzername:', -'sp-contributions-submit' => 'Sueche', +'sp-contributions-newbies' => 'Zeig nume Biträg vo neie Benutzer', +'sp-contributions-newbies-sub' => 'vo nöji Benützer', +'sp-contributions-newbies-title' => 'Benutzerbyytreg vu neije Benutzer', +'sp-contributions-blocklog' => 'Sperrlogbuech', +'sp-contributions-deleted' => 'gleschti Bytreg', +'sp-contributions-uploads' => 'Uffegladeni Dateie', +'sp-contributions-logs' => 'Logbiecher', +'sp-contributions-talk' => 'Diskussion', +'sp-contributions-userrights' => 'Benutzerrächtsverwaltig', +'sp-contributions-blocked-notice' => 'Dää Benutzer isch zur Zyt gsperrt. Do chunnt dr aktuäll Yytrag us em Benutzersperr-Logbuech:', +'sp-contributions-blocked-notice-anon' => 'Die IP-Adräss isch zur Zyt gsperrt. +Do chunnt dr aktuäll Yytrag us em Benutzersperr-Logbuech:', +'sp-contributions-search' => 'Suech no Benutzerbiträg', +'sp-contributions-username' => 'IP-Adress oder Benutzername:', +'sp-contributions-toponly' => 'Nume aktuälli Versione zeige', +'sp-contributions-submit' => 'Sueche', # What links here 'whatlinkshere' => 'Was verwyst do druff?', @@ -2192,7 +2243,6 @@ Go d Sperri ufhebe lueg d [[Special:IPBlockList|Lisch vu allene aktive Sperrine] 'ipb-edit-dropdown' => 'Sperrgrind bearbeite', 'ipb-unblock-addr' => '„$1“ frejgee', 'ipb-unblock' => 'IP-Adräss/Benutzer frejgee', -'ipb-blocklist-addr' => 'Aktuälli Sperri fir „$1“ aazeige', 'ipb-blocklist' => 'Alli aktuälle Sperrine aazeige', 'ipb-blocklist-contribs' => 'Benutzerbyytreg fir „$1“', 'unblockip' => 'IP-Adräss frejgee', @@ -2200,7 +2250,7 @@ Go d Sperri ufhebe lueg d [[Special:IPBlockList|Lisch vu allene aktive Sperrine] 'ipusubmit' => 'Die Sperri useneh', 'unblocked' => '[[User:$1|$1]] isch frejgee wore', 'unblocked-id' => 'Sperr-ID $1 isch freijgee wore', -'ipblocklist' => 'Liste vo blockierten IP-Adrässen u Benutzernäme', +'ipblocklist' => 'Gsperrti Benutzer', 'ipblocklist-legend' => 'Suech no eme gsperrte Benutzer', 'ipblocklist-username' => 'Benutzername oder IP-Adräss:', 'ipblocklist-sh-userblocks' => 'Benutzersperrine $1', @@ -2259,6 +2309,8 @@ Go d Sperri ufhebe lueg d [[Special:IPBlockList|Lisch vu allene aktive Sperrine] 'sorbs_create_account_reason' => 'D IP-Adräss isch in dr DNSBL vu {{SITENAME}} as uffige PROXY glischtet. S Aalege vu neije Benutzer isch nit megli.', 'cant-block-while-blocked' => 'Du derfsch kei anderi Benutzer sperre, derwylscht Du sälber gsperrt bisch.', 'cant-see-hidden-user' => 'Dr Benutzer, wu Du versuechsch z sperre, isch scho gsperrt un versteckt wore. Du chasch d Sperri vu däm Benutzer nit säh oder bearbeite, wel du s „hideuser“-Rächt nit hesch.', +'ipbblocked' => 'Du chasch keini andere Benutzer sperre oder entsperre, wel Du sälber gsperrt bisch', +'ipbnounblockself' => 'Du derfsch di nit sälber entsperre', # Developer tools 'lockdb' => 'D Datebank sperre', @@ -2281,6 +2333,17 @@ Go d Sperri ufhebe lueg d [[Special:IPBlockList|Lisch vu allene aktive Sperrine] 'move-page' => '„$1“ verschiebe', 'move-page-legend' => 'Artikel verschiebe', 'movepagetext' => 'Mit däm Formular chasch du en Artikel verschiebe, u zwar mit syre komplette Versionsgschicht. Der alt Titel leitet zum nöie wyter, aber Links ufen alt Titel blyben unveränderet.', +'movepagetext-noredirectfixer' => "Mit däm Formular unte chasch e Syte umnänne, indäm Du si mitsamt allene Versione uf e neje Titel verschiebsch. +Dr alt Titel leitet derno zum neje wyter. +Stell sicher, ass Du im Aaschluss alli [[Special:DoubleRedirects|dopplete]] oder [[Special:BrokenRedirects|kaputtige Wyterleitige]] iberpriefsch. +Du bisch derfir verantwortli, ass Link wyter uf s korräkt Ziil verwyyse. + +D Syte wird '''nit''' verschobe, wänn s scho ne Syte git mit em vorgsähne Titel, ußer sälli isch läär oder e Wyterletig ohni ne Versionsgschicht. +Des bedytet, ass Du d Umnännig chasch ruckgängig mache, wänn Du ne Fähler gmacht hesch. Du chasch aber kei Syte iberschryybe. + +'''Warnig!''' +D Verschiebig cha großi un nit erwarteti Folge haa fir hyfig bsuechti Syte. +Du sottsch wäge däm d Konsequänze verstande haa, voreb Du jetz wytermachsch.", 'movepagetalktext' => "D Diskussionssyte wird mitverschobe, '''ussert:''' *Du verschiebsch d Syten i nen andere Namensruum, oder *es git scho ne Diskussionssyte mit däm Namen oder @@ -2336,6 +2399,7 @@ D Syte „[[:$1]]“ gits scho. Wottsch du si lösche, zume Platz zum verschiebe 'immobile-source-page' => 'Die Syte cha nüt verschobe werde.', 'immobile-target-page' => 'Uf die Ziilsyte cha nüt verschobe werde.', 'imagenocrossnamespace' => 'Dateie chönne nüt ussem {{ns:file}}-Namensruum use verschobe werde', +'nonfile-cannot-move-to-file' => 'Nit-Dateie chenne nit in dr Datei-Namensruum verschobe wäre', 'imagetypemismatch' => 'D nöii Dateierwiiterig passt nüt zu sym Typ', 'imageinvalidfilename' => 'De Name vo dr Ziildatei isch ungültig', 'fix-double-redirects' => 'Alli Wyterleitige, wo uf de alte Titel zeige, aktualisiere', @@ -2411,6 +2475,7 @@ Alli Transwiki-Import-Aktione werde im [[Special:Log/import|Import-Logbuech]] pr 'importstart' => 'Importiere Syte …', 'import-revision-count' => '– {{PLURAL:$1|1 Vérsion|$1 Vérsiona}}', 'importnopages' => 'Es isch kei Syte doo wo mer importiere chönnt.', +'imported-log-entries' => '$1 {{PLURAL:$1|lLogbuechyytrag|Logbuechyytreg}} importiert.', 'importfailed' => 'Dr Import isch misslunge: $1', 'importunknownsource' => 'Importquell isch unbekannt', 'importcantopen' => 'D Importdatei het nüt chönne geöffnet werde', @@ -2503,6 +2568,8 @@ Alli Transwiki-Import-Aktione werde im [[Special:Log/import|Import-Logbuech]] pr 'tooltip-upload' => 'Aafange mit ufelade', 'tooltip-rollback' => 'Mach alli letschti Ändrige uf dere Syte, wo vo däm Benutzer gmacht worre sin, ruggängig.', 'tooltip-undo' => 'Mach numme die eint Ändrig rugggängig, un zeig e Vorschau aa. Doodurch chasch in dr Zammefassig e Begründig aagää.', +'tooltip-preferences-save' => 'Yystellige spychere', +'tooltip-summary' => 'Gib e churzi Zämmefassig yy', # Metadata 'nodublincore' => 'Dublin-Core-RDF-Metadate sin fir dää Server deaktiviert.', @@ -2595,14 +2662,17 @@ $1', 'imagemaxsize' => "Maximali Gressi vu Bilder :
    '' (uf Bildbschrybigs-Syte)''", 'thumbsize' => 'Bildvorschou-Gröössi:', 'widthheightpage' => '$1×$2, {{PLURAL:$3|1 Syte|$3 Syte}}', -'file-info' => '(Dateigressi: $1, MIME-Typ: $2)', -'file-info-size' => '($1 × $2 Pixel, Dateigrößi: $3, MIME-Typ: $4)', +'file-info' => 'Dateigressi: $1, MIME-Typ: $2', +'file-info-size' => '$1 × $2 Pixel, Dateigrößi: $3, MIME-Typ: $4', 'file-nohires' => 'Kei höcheri Uflösig verfüegbar.', -'svg-long-desc' => '(SVG-Datei, Basisgrößi: $1 × $2 Pixel, Dateigrößi: $3)', +'svg-long-desc' => 'SVG-Datei, Basisgrößi: $1 × $2 Pixel, Dateigrößi: $3', 'show-big-image' => 'Originalgrößi', 'show-big-image-thumb' => 'Greßi vu däre Vorschau: $1 × $2 Pixel', 'file-info-gif-looped' => 'Ändlosschlupf', 'file-info-gif-frames' => '$1 {{PLURAL:$1|Ramme|Ramme}}', +'file-info-png-looped' => 'Ändlosschlupf', +'file-info-png-repeat' => 'het $1 {{PLURAL:$1|Mol|Mol}} gspilt', +'file-info-png-frames' => '$1 {{PLURAL:$1|Ramme|Ramme}}', # Special:NewFiles 'newimages' => 'Gallery vo noie Bilder', @@ -2758,6 +2828,7 @@ Anderi Metadate sy standardmäßig versteckt. 'exif-gpsareainformation' => 'Name vum GPS-Biet', 'exif-gpsdatestamp' => 'GPS-Datum', 'exif-gpsdifferential' => 'GPS-Differentialkorrektur', +'exif-objectname' => 'Churztitel', # EXIF attributes 'exif-compression-1' => 'Uukomprimiert', @@ -2915,24 +2986,24 @@ Anderi Metadate sy standardmäßig versteckt. 'limitall' => 'alli', # E-mail address confirmation -'confirmemail' => 'Bstätigung vo Ihre E-Poscht-Adräss', -'confirmemail_noemail' => 'Du hesch in dyne [[Special:Preferences|persönliche Ystellige]] e kei E-Mail-Adress ygää.', -'confirmemail_text' => 'Dermit du di erwyterete Mailfunktione chasch bruuche, muesch du die E-Mail-Adrässe, wo du hesch aaggä, la bestätige. Klick ufe Chnopf unte; das schickt dir es Mail. I däm Mail isch e Link; we du däm Link folgsch, de tuesch dadermit bestätige, das die E-Mail-Adrässe dyni isch.', -'confirmemail_pending' => 'Es isch Dir scho en Code zum Bestätige zuegschiggt worde. Falls du Dyn Konto grad erscht aagleit hesch, muesch villicht noo e weng warte bis d E-Mail ytrifft, bevor du en nöie Code aafordresch.', -'confirmemail_send' => 'Bestätigungs-Mail verschicke', -'confirmemail_sent' => 'Es isch dir es Mail zur Adrässbestätigung gschickt worde.', -'confirmemail_oncreate' => 'En Code isch aa dyni E-Mail-Adress zum bestätige gschiggt worde. Du bruuch de Code zwar nüt zum dich aamälde, er wird aber zum aktiviere vo de E-Mail-Funktione in däm Wiki bruucht.', -'confirmemail_sendfailed' => '{{SITENAME}} het d E-Mail zum bestätige nüt chönne verschigge. +'confirmemail' => 'Bstätigung vo Ihre E-Poscht-Adräss', +'confirmemail_noemail' => 'Du hesch in dyne [[Special:Preferences|persönliche Ystellige]] e kei E-Mail-Adress ygää.', +'confirmemail_text' => 'Dermit du di erwyterete Mailfunktione chasch bruuche, muesch du die E-Mail-Adrässe, wo du hesch aaggä, la bestätige. Klick ufe Chnopf unte; das schickt dir es Mail. I däm Mail isch e Link; we du däm Link folgsch, de tuesch dadermit bestätige, das die E-Mail-Adrässe dyni isch.', +'confirmemail_pending' => 'Es isch Dir scho en Code zum Bestätige zuegschiggt worde. Falls du Dyn Konto grad erscht aagleit hesch, muesch villicht noo e weng warte bis d E-Mail ytrifft, bevor du en nöie Code aafordresch.', +'confirmemail_send' => 'Bestätigungs-Mail verschicke', +'confirmemail_sent' => 'Es isch dir es Mail zur Adrässbestätigung gschickt worde.', +'confirmemail_oncreate' => 'En Code isch aa dyni E-Mail-Adress zum bestätige gschiggt worde. Du bruuch de Code zwar nüt zum dich aamälde, er wird aber zum aktiviere vo de E-Mail-Funktione in däm Wiki bruucht.', +'confirmemail_sendfailed' => '{{SITENAME}} het d E-Mail zum bestätige nüt chönne verschigge. Bitte überprüef d E-Mail-Adress uf ungültigi Zeiche. Ruggmäldig vum Mailserver: $1', -'confirmemail_invalid' => 'De Bestätigscode isch ungültig. Es isch mögli das er abgloffe isch. In däm Fall chasch probiere d Bestätigung z widerhole.', -'confirmemail_needlogin' => 'Du muesch dich $1, zume dyni E-Mail-Adress bstätige.', -'confirmemail_success' => 'Dyni E-Mail-Adräss isch bstätiget worde. Du chasch di jitz aamälde.', -'confirmemail_loggedin' => 'Dyni E-Mail-Adräss isch jitz bstätigt.', -'confirmemail_error' => 'Öbis isch bim Bestätige vo dynrer E-Mail-Adress schief gloffe.', -'confirmemail_subject' => '{{SITENAME}} E-Mail-Adrässbstätigung', -'confirmemail_body' => 'Salü +'confirmemail_invalid' => 'De Bestätigscode isch ungültig. Es isch mögli das er abgloffe isch. In däm Fall chasch probiere d Bestätigung z widerhole.', +'confirmemail_needlogin' => 'Du muesch dich $1, zume dyni E-Mail-Adress bstätige.', +'confirmemail_success' => 'Dyni E-Mail-Adräss isch bstätiget worde. Du chasch di jitz aamälde.', +'confirmemail_loggedin' => 'Dyni E-Mail-Adräss isch jitz bstätigt.', +'confirmemail_error' => 'Öbis isch bim Bestätige vo dynrer E-Mail-Adress schief gloffe.', +'confirmemail_subject' => '{{SITENAME}} E-Mail-Adrässbstätigung', +'confirmemail_body' => 'Salü {{SITENAME}}-BenutzerIn «$2» — das bisch allwäg Du — het sech vor IP-Adrässen $1 uus mit deren e-Mail-Adrässe bi {{SITENAME}} aagmäldet. @@ -2947,8 +3018,36 @@ $5 De Bstätigungs-Code isch gültig bis $4. Fründlechi Grüess', -'confirmemail_invalidated' => 'D E-Mail-Adressbestätig isch abbroche worde', -'invalidateemail' => 'S Bestätige vo dr E-Mail-Adress abbreche', +'confirmemail_body_changed' => 'Eber mit dr IP-Adräss $1, wahrschyns Du sälber, +het d E-Mail-Adräss vum Benutzerkonto „$2“ uf die Adräss gänderet uf {{SITENAME}}. + +Go bstetige, ass des Benutzerkonto wirkli Dir ghert +un go d E-Mail-Feature uf {{SITENAME}} reaktiviere, mach des Gleich in Dyym Browser uf: + +$3 + +Wänn des Konto imfall *nit* Dir ghert, gang däm Gleich noo +go d E-Mail-Adräss-Bstetigung abbräche: + +$5 + +Dää Bstetigungscode isch giltig bis am $4.', +'confirmemail_body_set' => 'Eber mit dr IP-Adräss $1, wahrschyns Du sälber, +het d E-Mail-Adräss vum Benutzerkonto „$2“ uf die Adräss gänderet uf {{SITENAME}}. + +Go bstetige, ass des Benutzerkonto wirkli Dir ghert +un go d E-Mail-Feature uf {{SITENAME}} reaktiviere, mach des Gleich in Dyym Browser uf: + +$3 + +Wänn des Konto imfall *nit* Dir ghert, gang däm Gleich noo +go d E-Mail-Adräss-Bstetigung abbräche: + +$5 + +Dää Bstetigungscode isch giltig bis am $4.', +'confirmemail_invalidated' => 'D E-Mail-Adressbestätig isch abbroche worde', +'invalidateemail' => 'S Bestätige vo dr E-Mail-Adress abbreche', # Scary transclusion 'scarytranscludedisabled' => '[Interwiki-Yybindig isch deaktiviert]', @@ -2989,6 +3088,7 @@ Bitte bstätig, ass Du die Syte wirkli wit nej aalege.", 'table_pager_first' => 'Erschti Syte', 'table_pager_last' => 'Letschti Syte', 'table_pager_limit' => 'Zeig $1 Yträg pro Syte aa', +'table_pager_limit_label' => 'Yyträg pro Syte:', 'table_pager_limit_submit' => 'Gang', 'table_pager_empty' => 'Kei Ergebniss', @@ -3042,6 +3142,7 @@ Du chasch au d [[Special:Watchlist/edit|Standard-Bearbeitigssyte]] bruuche.', 'version-specialpages' => 'Spezialsyte', 'version-parserhooks' => 'Parser-Schnittstelle', 'version-variables' => 'Variable', +'version-skins' => 'Benutzeroberflechine', 'version-other' => 'Anders', 'version-mediahandlers' => 'Medie-Handler', 'version-hooks' => "Schnittstelle ''(Hook)''", @@ -3053,6 +3154,13 @@ Du chasch au d [[Special:Watchlist/edit|Standard-Bearbeitigssyte]] bruuche.', 'version-hook-subscribedby' => 'Ufruef vu', 'version-version' => '(Version $1)', 'version-license' => 'Lizänz', +'version-poweredby-credits' => "Die Websyte nutzt '''[http://www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.", +'version-poweredby-others' => 'anderi', +'version-license-info' => 'MediaWiki isch e freji Software, d. h. s cha, no dr Bedingige vu dr GNU General Public-Lizänz, wu vu dr Free Software Foundation vereffentligt woren isch, wyterverteilt un/oder modifiziert wäre. Doderbyy cha d Version 2, oder no eigenem Ermässe, jedi nejeri Version vu dr Lizänz brucht wäre. + +Des Programm wird in dr Hoffnig verteilt, ass es nitzli isch, aber OHNI JEDI GARANTI un sogar ohni di impliziert Garanti vun ere MÄRTGÄNGIGKEIT oder EIGNIG FIR E BSTIMMTE ZWÄCK. Doderzue git meh Hiiwys in dr GNU General Public-Lizänz. + +E [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopi vu dr GNU General Public-Lizänz] sott zämme mit däm Programm verteilt wore syy. Wänn des nit eso isch, cha ne Kopi bi dr Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftli aagforderet oder [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html online gläse] wäre.', 'version-software' => 'Installierti Software', 'version-software-product' => 'Produkt', 'version-software-version' => 'Version', @@ -3122,6 +3230,15 @@ D Yygab muess ohni dr Zuesatz „{{ns:file}}:“ erfolge.', 'tags-edit' => 'bearbeite', 'tags-hitcount' => '$1 {{PLURAL:$1|Änderig|Änderige}}', +# Special:ComparePages +'comparepages' => 'Syte verglyyche', +'compare-selector' => 'Syteversione verglyyche', +'compare-page1' => 'Syte 1', +'compare-page2' => 'Syte 2', +'compare-rev1' => 'Version 1', +'compare-rev2' => 'Version 2', +'compare-submit' => 'Verglyyche', + # Database error messages 'dberr-header' => 'Des Wiki het e Probläm', 'dberr-problems' => 'Excusez! Die Seite het im Momänt tächnischi Schwirigkeite.', @@ -3138,8 +3255,13 @@ D Yygab muess ohni dr Zuesatz „{{ns:file}}:“ erfolge.', 'htmlform-float-invalid' => 'D Wärt, wu du aagee hesch, isch kei Zahl.', 'htmlform-int-toolow' => 'Dr Wärt, wu aagee hesch, isch unter em Minimum vu $1', 'htmlform-int-toohigh' => 'Dr Wärt, wu aagee hesch, isch iber em Maximum vu $1', +'htmlform-required' => 'Dää Wert wird brucht', 'htmlform-submit' => 'Ibertrage', 'htmlform-reset' => 'Änderige ruckgängig mache', 'htmlform-selectorother-other' => 'Anderi', +# SQLite database support +'sqlite-has-fts' => '$1 mit Unterstitzig vu dr Volltextsuechi', +'sqlite-no-fts' => '$1 ohni Unterstitzig vu dr Volltextsuechi', + ); diff --git a/languages/messages/MessagesGu.php b/languages/messages/MessagesGu.php index c01231fc..3db79a61 100644 --- a/languages/messages/MessagesGu.php +++ b/languages/messages/MessagesGu.php @@ -36,12 +36,12 @@ $namespaceNames = array( ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'દ્વિ પુનઃમાર્ગદર્શન' ), - 'BrokenRedirects' => array( 'ખંડિત પુનઃમાર્ગદર્શન' ), + 'DoubleRedirects' => array( 'દ્વિ_પુનઃમાર્ગદર્શન' ), + 'BrokenRedirects' => array( 'ખંડિત_પુનઃમાર્ગદર્શન' ), 'Disambiguations' => array( 'અસંદિગ્ધતા' ), 'Userlogin' => array( 'સભ્યપ્રવેશ' ), 'Userlogout' => array( 'સભ્યનિવેશ' ), - 'CreateAccount' => array( 'ખાતું ખોલો' ), + 'CreateAccount' => array( 'ખાતું_ખોલો' ), 'Preferences' => array( 'પસંદ' ), 'Watchlist' => array( 'ધ્યાનસૂચિ' ), 'Recentchanges' => array( 'તાજાફેરફારો' ), @@ -51,40 +51,40 @@ $specialPageAliases = array( 'Listusers' => array( 'યાદીસભ્યો', 'સભ્યયાદી' ), 'Listgrouprights' => array( 'યાદીસમુહઅધિકારો', 'સભ્યસમુહઅધિકારો' ), 'Statistics' => array( 'આંકડાકીયમાહિતી' ), - 'Randompage' => array( 'યાદચ્છ', 'કોઈ પણ એક' ), + 'Randompage' => array( 'યાદચ્છ', 'કોઈ_પણ_એક' ), 'Lonelypages' => array( 'એકાકીપાનાં', 'અનાથપાનાં' ), - 'Uncategorizedpages' => array( 'અવર્ગિકૃત પાનાં' ), - 'Uncategorizedcategories' => array( 'અવર્ગિકૃત શ્રેણીઓ' ), - 'Uncategorizedimages' => array( 'અવર્ગિકૃત ફાઇલો', 'અવર્ગિકૃત ચિત્રો' ), - 'Uncategorizedtemplates' => array( 'અવર્ગિકૃત ઢાંચા' ), - 'Unusedcategories' => array( 'વણવપરાયેલી શ્રેણીઓ' ), - 'Unusedimages' => array( 'વણવપરાયેલ ફાઇલો', 'વણવપરાયેલ ચિત્રો' ), - 'Wantedpages' => array( 'જોઇતા પાનાં', 'ત્રુટક કડી' ), - 'Wantedcategories' => array( 'જોઇતી શ્રેણીઓ' ), - 'Wantedfiles' => array( 'જોઇતી ફાઇલો' ), - 'Wantedtemplates' => array( 'જોઇતા ઢાંચા' ), - 'Mostlinked' => array( 'સૌથીવધુ જોડાયેલાં પાનાં', 'સૌથીવધુ જોડાયેલ' ), - 'Mostlinkedcategories' => array( 'સૌથીવધુજોડાયેલી શ્રેણી', 'સૌથીવધુવપરાયેલી શ્રેણીઓ' ), - 'Mostlinkedtemplates' => array( 'સૌથીવધુ જોડાયેલાં ઢાંચા', 'સૌથી વધુવપરાયેલાં ઢાંચા' ), - 'Mostimages' => array( 'સૌથી વધુજોડાયેલી ફાઇલો', 'મહત્તમ ફાઇલો', 'મહત્તમ ચિત્રો' ), - 'Mostcategories' => array( 'મોટાભાગની શ્રેણીઓ' ), - 'Mostrevisions' => array( 'મહત્તમ પુનરાવર્તન' ), - 'Fewestrevisions' => array( 'લઘુત્તમ પુનરાવર્તન' ), + 'Uncategorizedpages' => array( 'અવર્ગિકૃત_પાનાં' ), + 'Uncategorizedcategories' => array( 'અવર્ગિકૃત_શ્રેણીઓ' ), + 'Uncategorizedimages' => array( 'અવર્ગિકૃત_ફાઇલો', 'અવર્ગિકૃત_ચિત્રો' ), + 'Uncategorizedtemplates' => array( 'અવર્ગિકૃત_ઢાંચા' ), + 'Unusedcategories' => array( 'વણવપરાયેલી_શ્રેણીઓ' ), + 'Unusedimages' => array( 'વણવપરાયેલ_ફાઇલો', 'વણવપરાયેલ_ચિત્રો' ), + 'Wantedpages' => array( 'જોઇતા_પાનાં', 'ત્રુટક_કડી' ), + 'Wantedcategories' => array( 'જોઇતી_શ્રેણીઓ' ), + 'Wantedfiles' => array( 'જોઇતી_ફાઇલો' ), + 'Wantedtemplates' => array( 'જોઇતા_ઢાંચા' ), + 'Mostlinked' => array( 'સૌથીવધુ_જોડાયેલાં_પાનાં', 'સૌથીવધુ_જોડાયેલ' ), + 'Mostlinkedcategories' => array( 'સૌથીવધુજોડાયેલી_શ્રેણી', 'સૌથીવધુવપરાયેલી_શ્રેણીઓ' ), + 'Mostlinkedtemplates' => array( 'સૌથીવધુ_જોડાયેલાં_ઢાંચા', 'સૌથી_વધુવપરાયેલાં_ઢાંચા' ), + 'Mostimages' => array( 'સૌથી_વધુજોડાયેલી_ફાઇલો', 'મહત્તમ_ફાઇલો', 'મહત્તમ_ચિત્રો' ), + 'Mostcategories' => array( 'મોટાભાગની_શ્રેણીઓ' ), + 'Mostrevisions' => array( 'મહત્તમ_પુનરાવર્તન' ), + 'Fewestrevisions' => array( 'લઘુત્તમ_પુનરાવર્તન' ), 'Shortpages' => array( 'ટુંકાપાનાં' ), 'Longpages' => array( 'લાંબાપાના' ), 'Newpages' => array( 'નવાપાનાં' ), 'Ancientpages' => array( 'પ્રાચીનપાનાં' ), 'Deadendpages' => array( 'મૃતાંતપાનાં' ), 'Protectedpages' => array( 'સંરક્ષિતપાનાં' ), - 'Protectedtitles' => array( 'સંરક્ષિત શિર્ષકો' ), + 'Protectedtitles' => array( 'સંરક્ષિત_શિર્ષકો' ), 'Allpages' => array( 'બધાંપાનાં' ), 'Prefixindex' => array( 'ઉપસર્ગ' ), 'Specialpages' => array( 'ખાસપાનાં' ), 'Contributions' => array( 'પ્રદાન' ), 'Emailuser' => array( 'સભ્યનેઇમેલ' ), 'Confirmemail' => array( 'ઇમેઇલખાતરીકરો' ), - 'Whatlinkshere' => array( 'અહિં શું જોડાય છે?' ), - 'Recentchangeslinked' => array( 'તાજેતરનાં ફેરફારો', 'સંલગ્ન ફેરફારો' ), + 'Whatlinkshere' => array( 'અહિં_શું_જોડાય_છે?' ), + 'Recentchangeslinked' => array( 'તાજેતરનાં_ફેરફારો', 'સંલગ્ન_ફેરફારો' ), 'Movepage' => array( 'પાનુંખસેડો' ), 'Booksources' => array( 'પુસ્તકસ્રોત' ), 'Categories' => array( 'શ્રેણીઓ' ), @@ -92,16 +92,16 @@ $specialPageAliases = array( 'Version' => array( 'સંસ્કરણ' ), 'Allmessages' => array( 'બધાંસંદેશા' ), 'Log' => array( 'લૉગ', 'લૉગ્સ' ), - 'Blockip' => array( 'પ્રતિબંધ', 'IP પર પ્રતિબંધ', 'સભ્યપર પ્રતિબંધ' ), + 'Blockip' => array( 'પ્રતિબંધ', 'IP_પર_પ્રતિબંધ', 'સભ્યપર_પ્રતિબંધ' ), 'Undelete' => array( 'પુનઃપ્રાપ્ત' ), 'Import' => array( 'આયાત' ), 'Userrights' => array( 'સભ્યાધિકાર' ), - 'FileDuplicateSearch' => array( 'ફાઇલપ્રતિકૃતિ શોધ' ), - 'Unwatchedpages' => array( 'વણજોયેલા પાનાં' ), + 'FileDuplicateSearch' => array( 'ફાઇલપ્રતિકૃતિ_શોધ' ), + 'Unwatchedpages' => array( 'વણજોયેલા_પાનાં' ), 'Listredirects' => array( 'પુનઃમાર્ગદર્શનયાદી' ), - 'Revisiondelete' => array( 'રદકરેલું સુધારો' ), - 'Unusedtemplates' => array( 'વણવપરાયેલાં ઢાંચા' ), - 'Randomredirect' => array( 'યાદચ્છ પુનઃમાર્ગદર્શન' ), + 'Revisiondelete' => array( 'રદકરેલું_સુધારો' ), + 'Unusedtemplates' => array( 'વણવપરાયેલાં_ઢાંચા' ), + 'Randomredirect' => array( 'યાદચ્છ_પુનઃમાર્ગદર્શન' ), 'Mypage' => array( 'મારૂપાનું' ), 'Mytalk' => array( 'મારીચર્ચા' ), 'Mycontributions' => array( 'મારૂપ્રદાન' ), @@ -109,14 +109,14 @@ $specialPageAliases = array( 'Listbots' => array( 'યાદીબૉટ' ), 'Popularpages' => array( 'લોકપ્રિયપાનાં' ), 'Search' => array( 'શોધ' ), - 'Resetpass' => array( 'ગુપ્તસંજ્ઞા બદલો', 'ગુપ્તસંજ્ઞા પુન: સ્થાપન' ), + 'Resetpass' => array( 'ગુપ્તસંજ્ઞા_બદલો', 'ગુપ્તસંજ્ઞા_પુન:_સ્થાપન' ), 'Withoutinterwiki' => array( 'આંતરવિકિવિહીન' ), - 'MergeHistory' => array( 'વિલિનિકરણ ઈતિહાસ' ), + 'MergeHistory' => array( 'વિલિનિકરણ_ઈતિહાસ' ), 'Filepath' => array( 'ફાઇલપથ' ), - 'Invalidateemail' => array( 'અમાન્ય ઇ-મેઇલ' ), - 'Blankpage' => array( 'કોરૂં પાનું' ), - 'LinkSearch' => array( 'કડી શોધ' ), - 'DeletedContributions' => array( 'હટાવેલાં યોગદાન' ), + 'Invalidateemail' => array( 'અમાન્ય_ઇ-મેઇલ' ), + 'Blankpage' => array( 'કોરૂં_પાનું' ), + 'LinkSearch' => array( 'કડી_શોધ' ), + 'DeletedContributions' => array( 'હટાવેલાં_યોગદાન' ), 'Tags' => array( 'ટેગ' ), ); @@ -149,8 +149,7 @@ $messages = array( 'tog-editsection' => 'વિભાગોમાં [ફેરફાર કરો] કડી દ્વારા વિભાગીય ફેરફાર લાગુ કરો.', 'tog-editsectiononrightclick' => 'વિભાગના મથાળાં ને રાઇટ ક્લિક દ્વારા ફેરફાર કરવાની રીત અપનાવો. (જાવાસ્ક્રિપ્ટ જરૂરી)', 'tog-showtoc' => 'અનુક્રમણિકા દર્શાવો (૩થી વધુ પેટા-મથાળા વાળા લેખો માટે)', -'tog-rememberpassword' => 'આ કમ્પ્યૂટર પર મારી લોગ-ઇન વિગતો યાદ રાખો', -'tog-editwidth' => 'આખા પડદા પર જોવા માટે ફેરફાર બોક્સની પુરી પહોળાઇ રાખો', +'tog-rememberpassword' => 'આ કમ્પ્યૂટર પર મારી લોગ-ઇન વિગતો યાદ રાખો (મહત્તમ $1 {{PLURAL:$1|દિવસ|દિવસ}} માટે)', 'tog-watchcreations' => 'મેં લખેલા નવા લેખો મારી ધ્યાનસૂચિમાં ઉમેરો', 'tog-watchdefault' => 'હું ફેરફાર કરૂં તે પાના મારી ધ્યાનસૂચિમાં ઉમેરો', 'tog-watchmoves' => 'હું જેનું નામ બદલું તે પાના મારી ધ્યાનસૂચિમાં ઉમેરો', @@ -298,31 +297,21 @@ $messages = array( 'faqpage' => 'Project:વારંવાર પુછાતા પ્રશ્નો', # Vector skin -'vector-action-addsection' => 'નવી ચર્ચા', -'vector-action-delete' => 'રદ કરો', -'vector-action-move' => 'ખસેડો', -'vector-action-protect' => 'સુરક્ષિત કરો', -'vector-action-undelete' => 'રદ કરેલું પાછું વાળો', -'vector-action-unprotect' => 'અસુરક્ષિત', -'vector-namespace-category' => 'શ્રેણી', -'vector-namespace-help' => 'મદદ માટેનું પાનું', -'vector-namespace-image' => 'ફાઇલ', -'vector-namespace-main' => 'પાનું', -'vector-namespace-media' => 'માધ્યમ પાનું', -'vector-namespace-mediawiki' => 'સંદેશ', -'vector-namespace-project' => 'યોજના પાનું', -'vector-namespace-special' => 'ખાસ પાનું', -'vector-namespace-talk' => 'ચર્ચા', -'vector-namespace-template' => 'ઢાંચો', -'vector-namespace-user' => 'સભ્યનું પાનું', -'vector-view-create' => 'બનાવો', -'vector-view-edit' => 'ફેરફાર કરો', -'vector-view-history' => 'ઈતિહાસ જુઓ', -'vector-view-view' => 'વાંચો', -'vector-view-viewsource' => 'સ્ત્રોત જુઓ', -'actions' => 'ક્રિયાઓ', -'namespaces' => 'નામાવકાશો', -'variants' => 'ભિન્ન રૂપો', +'vector-action-addsection' => 'નવી ચર્ચા', +'vector-action-delete' => 'રદ કરો', +'vector-action-move' => 'ખસેડો', +'vector-action-protect' => 'સુરક્ષિત કરો', +'vector-action-undelete' => 'રદ કરેલું પાછું વાળો', +'vector-action-unprotect' => 'અસુરક્ષિત', +'vector-simplesearch-preference' => 'શોધ સંબંધી વિશિષ્ઠ સુઝાવના પર્યાયને સક્રીય કરો (Vector skin only)', +'vector-view-create' => 'બનાવો', +'vector-view-edit' => 'ફેરફાર કરો', +'vector-view-history' => 'ઈતિહાસ જુઓ', +'vector-view-view' => 'વાંચો', +'vector-view-viewsource' => 'સ્ત્રોત જુઓ', +'actions' => 'ક્રિયાઓ', +'namespaces' => 'નામાવકાશો', +'variants' => 'ભિન્ન રૂપો', 'errorpagetitle' => 'ત્રુટિ', 'returnto' => '$1 પર પાછા જાઓ.', @@ -385,6 +374,9 @@ $messages = array( આ પાનું ફરી જોતા પહેલાં કૃપયા થોડો સમય પ્રતિક્ષા કરો. $1', +'pool-timeout' => 'સમય સમાપ્ત - સ્થગિતતા પ્રતિક્ષીત', +'pool-queuefull' => '(Pool) કતાર પૂરી ભરેલી', +'pool-errorunknown' => 'અજ્ઞાત ત્રુટિ', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} વિષે', @@ -554,7 +546,8 @@ $2', 'yourname' => 'સભ્ય નામ:', 'yourpassword' => 'ગુપ્ત સંજ્ઞા:', 'yourpasswordagain' => 'ગુપ્ત સંજ્ઞા (પાસવર્ડ) ફરી લખો', -'remembermypassword' => 'આ કોમ્યૂટર પર મારી લૉગ ઇન વિગતો ધ્યાનમાં રાખો', +'remembermypassword' => 'આ કોમ્યૂટર પર મારી લૉગ ઇન વિગતો ધ્યાનમાં રાખો (વધુમાં વધુ $1 {{PLURAL:$1|દિવસ|દિવસ}} માટે)', +'securelogin-stick-https' => 'લોગ-ઈન કર્યા પછી HTTPS સાથે જોડાયેલા રહો.', 'yourdomainname' => 'તમારૂં ડોમેઇન:', 'externaldberror' => 'પ્રમાણભૂતતાની ત્રુટી આવી અથવા તમારૂ બહારનુ ખાતું અપડેટ કરવાનો અધિકાર તમને નથી.', 'login' => 'પ્રવેશ કરો (લૉગ ઇન કરીને)', @@ -571,6 +564,7 @@ $2', 'gotaccount' => "પહેલેથી ખાતું ખોલેલું છે? '''$1'''.", 'gotaccountlink' => 'પ્રવેશો (લૉગ ઇન કરો)', 'createaccountmail' => 'ઇ-મેઇલ દ્વારા', +'createaccountreason' => 'કારણ:', 'badretype' => 'તમે દાખલ કરેલ ગુપ્તસંજ્ઞા મળતી આવતી નથી.', 'userexists' => 'દાખલ કરેલું સભ્ય નામ વપરાશમાં છે.
    કૃપયા અન્ય નામ પસંદ કરો.', @@ -601,6 +595,7 @@ $2', ફરીથી પ્રયત્ન કરો.', 'passwordtooshort' => 'ગુપ્ત સંજ્ઞામાં ઓછામાં {{PLURAL:$1|ઓછો એક અક્ષર હોવો |ઓછા $1 અક્ષર હોવા}} જોઇએ.', 'password-name-match' => 'તમારી ગુપ્તસંજ્ઞા તમારા સભ્યનામ કરતાં અલગ જ હોવી જોઇએ.', +'password-login-forbidden' => 'આ સભ્યનામ અને ગુપ્તસંજ્ઞા વાપરવા પર પ્રતિબંધ છે.', 'mailmypassword' => 'પાસવર્ડ ઇ-મેલમાં મોકલો', 'passwordremindertitle' => '{{SITENAME}} માટેની નવી કામચલાઉ ગુપ્ત સંજ્ઞા', 'passwordremindertext' => 'કોઇકે (કદાચ તમે IP એડ્રેસ $1 પરથી) {{SITENAME}} ($4) માટે નવી ગુપ્ત સજ્ઞા (પાસવર્ડ) માટે વિનંતી કરેલ છે. @@ -643,6 +638,9 @@ Please log in again after you receive it. 'loginlanguagelabel' => 'ભાષા: $1', 'suspicious-userlogout' => 'લોગ આઉટ કરવાની તમારી વિનંતિ પૂરી ન કરી શકાઇ. એમ લાગે છે કે તેને તૃટિ પામેલ બ્રાઉઝર કે પ્રોક્સી દ્વારા મોકલાઈ હતી.', +# E-mail sending +'php-mail-error-unknown' => 'PHPની મેલ() કામગીરીમાં અજ્ઞાત ત્રુટિ', + # Password reset dialog 'resetpass' => 'ગુપ્તસંજ્ઞા બદલો', 'resetpass_announce' => 'તમે હંગામી ઇમેઇલ કોડ સાથે લોગ ઇન કર્યું. @@ -694,9 +692,12 @@ Please log in again after you receive it. 'showdiff' => 'ફેરફારો', 'anoneditwarning' => "'''ચેતવણી:''' તમે તમારા સભ્ય નામથી પ્રવેશ કર્યો નથી. આ પાનાનાં ઇતિહાસમાં તમારૂં આઇ.પી. (IP) એડ્રેસ નોંધવામાં આવશે.", +'anonpreviewwarning' => 'તમે સભ્યનામથી પ્રવેશ કર્યો નથી,આ પાનું ઈતિહાસમાંતમારા IP સરનામાના નામે સાચવવામાં આવશે', 'missingsummary' => "'''ચેતવણી:''' તમે ફેરફારનો સારંશ નથી આપ્યો. જો તમે \"{{int:savearticle}}\" પર ક્લીક કરશો તો તમરો ફેરફારા સારાઁશાવગરાસાચવવામાં આવશે", 'missingcommenttext' => 'કૃપા કરી નીચે ટીપ્પણી લખો.', +'missingcommentheader' => "'''યાદ દેવડાવું:'''તમે તમારી ટિપ્પણી ને શીર્ષક/મથાળુ આપ્યું નથી. +જો તમે \"{{int:savearticle}}\" પર ફરીથી ક્લિક કરશો, તો તમારા ફેરરારો મથાળા વગર સચવાશે.", 'summary-preview' => 'સારાંશ પૂર્વાવલોકન:', 'subject-preview' => 'વિષય/શિર્ષક પૂર્વાવલોકન:', 'blockedtitle' => 'સભ્ય પ્રતિબંધિત છે', @@ -774,6 +775,12 @@ Please log in again after you receive it. '''હજી સીધું તે સચવાયું નથી!'''", 'userjspreview' => "'''યાદ રહે કે તમે તમારા સભ્ય JavaScript નું અવલોકન કરો છે.''' '''હજી સીધું તે સચવાયું નથી!'''", +'sitecsspreview' => "'''યાદ રહે કે તમે તમારા સભ્ય CSS નું અવલોકન કરો છે.''' +'''હજી સીધું તે સચવાયું નથી!'''", +'sitejspreview' => "'''યાદ રહે કે તમે તમારા સભ્ય JavaScript નું અવલોકન કરો છે.''' +'''હજી સીધું તે સચવાયું નથી!'''", +'userinvalidcssjstitle' => "'''ચેતવણી:''' કોઇ પણ \"\$1\" પટલ નથી. +સભ્ય રચિત .css અને .js પાના બીજી અંગ્રેજી બારખડી શીર્ષક વાપરે છે, દા. ત. {{ns:user}}:Foo/vector.css નહીં કે {{ns:user}}:Foo/Vector.css.", 'updated' => '(સંવર્ધીત)', 'note' => "'''નોંધ:'''", 'previewnote' => "'''આ ફક્ત પૂર્વાવલોકન છે;''' @@ -815,9 +822,6 @@ Please log in again after you receive it. જો આપ ના ચાહતા હોવ કે તમારા યોગદાનમાં અન્ય કોઇ વ્યક્તિ બેધડક પણે ફેરફાર કરે તો અહીં યોગદાન કરશો નહી.
    સાથે સાથે તમે અમને એમ પણ ખાતરી આપી રહ્યા છો કે આ લખાણ તમે મૌલિક રીતે લખ્યું છે, અથવાતો પબ્લિક ડોમેઇન કે તેવા અન્ય મુક્ત સ્ત્રોતમાંથી લીધું છે (વધુ માહિતી માટે $1 જુઓ). '''પરવાનગી વગર પ્રકાશનાધિકારથી સુરક્ષિત કાર્ય અહીં પ્રકાશિત ના કરશો!'''", -'longpagewarning' => "'''ચેતવણી: આ પાનું $1 કિલોબાઇટ્સ લાંબુ છે; -કેટલાંક બ્રાઉઝરોમાં લગભગ ૩૨ કિલોબાઇટ્સ જેટલાં કે તેથી મોટાં પાનાઓમાં ફેરફાર કરવામાં મુશ્કેલી પડી શકે છે. -બને ત્યાં સુધી પાનાને નાનાં વિભાગોમાં વિભાજીત કરી નાંખો.'''", 'longpageerror' => "'''ત્રુટિ: તમે લખેલ લેખ $1 કિલોબાઇટ લાંબો છે, જે $2 કિલોબાઇટની મહત્તમ સીમા કરતાં વધુ છે.''' તેને સાચવી ન શકાયા.", 'readonlywarning' => "'''ચેતવણી: માહિતીસંચ સમારકામ માટે બંધ કરાયો છે, તમે તમારા ફેરફારો હમણા સાચવી નહીં શકો.''' @@ -997,6 +1001,8 @@ $1", 'logdelete-failure' => "'''લોગની દ્રશ્યતા ગોઠવી ન શકાઈ :''' $1", 'revdel-restore' => 'દૃષ્ટિક્ષમતા બદલો', +'revdel-restore-deleted' => 'હટાવેલા પુનરાવર્તનો', +'revdel-restore-visible' => 'દ્રશ્ય પુનરાવર્તનો', 'pagehist' => 'પાનાનો ઇતિહાસ', 'deletedhist' => 'રદ કરેલનો ઇતિહાસ', 'revdelete-content' => 'સામગ્રી', @@ -1065,11 +1071,13 @@ $1", # Diffs 'history-title' => '"$1"ના ફેરફારોનો ઇતિહાસ', 'difference' => '(પુનરાવર્તનો વચ્ચેનો તફાવત)', +'difference-multipage' => '(પાનાઓ વચ્ચેનો ફેરફાર)', 'lineno' => 'લીટી $1:', 'compareselectedversions' => 'પસંદ કરેલા સરખાવો', 'showhideselectedversions' => 'પસંદ કરેલા બતાવો / સંતાડો', 'editundo' => 'રદ કરો', -'diff-multi' => '({{PLURAL:$1|વચગાળાનું એક પુનરાવર્તન|વચગાળાનાં $1 પુનરાવર્તનો}} દર્શાવેલ નથી.)', +'diff-multi' => '{{PLURAL:$2|એક સભ્યએ કરેલું|$2 સભ્યોએ કરેલા}} ({{PLURAL:$1|વચગાળાનું એક પુનરાવર્તન દર્શાવ્યં|વચગાળાનાં $1 પુનરાવર્તનો દર્શાવ્યાં}} નથી.)', +'diff-multi-manyusers' => '{{PLURAL:$2|એક સભ્યએ કરેલું|$2 સભ્યોએ કરેલા}} ({{PLURAL:$1|વચગાળાનું એક પુનરાવર્તન દર્શાવ્યં|વચગાળાનાં $1 પુનરાવર્તનો દર્શાવ્યાં}} નથી.)', # Search results 'searchresults' => 'પરિણામોમાં શોધો', @@ -1104,6 +1112,7 @@ $1", 'searchprofile-everything-tooltip' => 'બધે જ શોધો (ચર્ચાનાં પાના સહિત)', 'searchprofile-advanced-tooltip' => 'સ્થાનીય નામસ્થળોમાં શોધો:', 'search-result-size' => '$1 ({{PLURAL:$2|1 શબ્દ|$2 શબ્દો}})', +'search-result-category-size' => '{{PLURAL:$1|1 સભ્ય|$1 સભ્યો}} ({{PLURAL:$2|1 ઉપ શ્રેણી|$2 ઉપ શ્રેણીઓ}}, {{PLURAL:$3|1 ફાઇલ|$3 ફાઇલો}})', 'search-result-score' => 'પ્રસ્તુતિ: $1%', 'search-redirect' => '(અન્યત્ર પ્રસ્થાન $1)', 'search-section' => '(વિભાગ $1)', @@ -1181,6 +1190,7 @@ $1", 'contextlines' => 'પ્રતિ પરિણામ માં હરોળ', 'contextchars' => 'સંદર્ભ પ્રતિ હરોળ', 'stub-threshold' => 'stub linkનાફોર્મમેટિંગ માટે શરૂઆતિ પગથિયું (બાઈટ્સ):', +'stub-threshold-disabled' => 'નિષ્ક્રીયાન્વીત', 'recentchangesdays' => 'તાજા ફેરફારોમાં દેખાડવાના દિવસો', 'recentchangesdays-max' => 'મહત્તમ $1 {{PLURAL:$1|દિવસ|દિવસો}}', 'recentchangescount' => 'સમાન્ય પણે ફલકમાં બતાવવાના ફેરફારોની સંખ્યા', @@ -1214,6 +1224,7 @@ $1", 'prefs-files' => 'ફાઇલ', 'prefs-custom-css' => 'ખાસ CSS', 'prefs-custom-js' => 'સભ્ય નિર્મિત JavaScript', +'prefs-common-css-js' => 'બધા જ ફલક માટે સહીયારી CSS/JavaScript', 'prefs-reset-intro' => 'તમી આ પાનાનો ઉપયોગ કરીને તમારા વિકલ્પો ની ગોઠવણી મૂળના વિકલ્પો સમાન ગોઠવી શકો છો. આને ઉલટાવી ન શકાય.', 'prefs-emailconfirm-label' => 'ઇ-મેલ પુષ્ટી', @@ -1253,8 +1264,15 @@ HTML નાકું ચકાસો', 'prefs-advancedrendering' => 'અદ્યતન વિકલ્પો', 'prefs-advancedsearchoptions' => 'અદ્યતન વિકલ્પો', 'prefs-advancedwatchlist' => 'અદ્યતન વિકલ્પો', +'prefs-displayrc' => ' પ્રદર્શન વિકલ્પો', +'prefs-displaysearchoptions' => ' પ્રદર્શન વિકલ્પો', +'prefs-displaywatchlist' => ' પ્રદર્શન વિકલ્પો', 'prefs-diffs' => 'ફરક', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'ઈ-મેલ યોગ્ય લાગે છે.', +'email-address-validity-invalid' => 'પ્રમાણભૂત શૈલિમાં ઈ-મેલ એડ્રેસ લખો', + # User rights 'userrights' => 'સભ્ય હક્ક પ્રબંધન', 'userrights-lookup-user' => 'સભ્ય સમુહો નું પ્રબંધન કરો', @@ -1338,6 +1356,7 @@ HTML નાકું ચકાસો', 'right-hideuser' => 'સભ્યનામ પર પ્રતિબંધ મૂકો જેથી તે લોકોને ન દેખાય.', 'right-ipblock-exempt' => 'IP દ્વારા, સ્વયં ચાલિત રીતે અને સમૂહ રોકને અવગનીને આગળ વધો', 'right-proxyunbannable' => 'અવેજીના અવયંચાલિત ખંડોને ટાળો', +'right-unblockself' => 'તેમને જાતે અપ્રતિબંધિત થવા દો', 'right-protect' => 'સંરક્ષણ સ્તર બદલો અને સંરક્ષીત પાનામાં ફેરફાર કરો.', 'right-editprotected' => 'સંરક્ષિત પાનામાં ફેરફાર કરો (પગથિયામય સુરક્ષા વગર)', 'right-editinterface' => 'સભ્ય સંભાષણ પટલમાં ફેરફાર કરો', @@ -1459,6 +1478,8 @@ HTML નાકું ચકાસો', 'upload_directory_missing' => 'ફાઇલ ચડાવવાની ડાયરેક્ટરી ($1) ગાયબ છે અને વેબસર્વર દ્વારા તેની રચના ન કરી શકાઇ.', 'upload_directory_read_only' => 'ચઢાવેલી ડાયરેક્ટરી ($1) એ વેબ બ્રાઉઝર દ્વારા લેખન યોગ્ય નથી.', 'uploaderror' => 'ફાઇલ ચઢાવમાં ચૂક', +'upload-recreate-warning' => "'''ચેતવણી: આ નામની એક ફાઇલ ભૂંસાડી કે હટાવી દેવાઇ છે. ''' +તમારા સંદર્ભ માટે પાના ભૂંસાવવાનો અને હટાવવાની સૂચિ અહીં આપેલ છે.:", 'uploadtext' => "ફાઈલ ચડાવવા માટે નીચેનું ફોર્મ વાપરો. પહેલા ચડાવાયેલી ફાઇલ અહીં જુઓ કે શોધો [[Special:FileList|list of uploaded files]], (પુનઃ) ચડાવેલી ફાઇલ પણ લોગમાં અહીં દર્શાવાઇ છે. [[Special:Log/upload|upload log]], હટાવાયેલી ફાઇલોની યાદિ [[Special:Log/delete|deletion log]]. @@ -1491,6 +1512,17 @@ HTML નાકું ચકાસો', 'filetype-unwanted-type' => "'''\".\$1\"''' એ એક બિન જરૂરી ફાઇલ પ્રકાર છે. ઇચ્છનીય {{PLURAL:\$3|ફાઇલ પ્રકાર|ફાઇલ પ્રકારો}} \$2 છે.", 'filetype-missing' => 'ફાઇલને કોઇ વિસ્તાર શબ્દ નથી (જેમકે ".jpg").', +'empty-file' => 'તમે ચડાવેલી ફાઈલ ખાલી છે', +'file-too-large' => 'તમે ચડાવેલી ફાઈલ ખૂબ મોટી છે', +'filename-tooshort' => 'ફાઇલ નામ ખૂબ ટૂંકું છે', +'filetype-banned' => 'આ પ્રકારની ફાઈલ પ્રતિબંધિત છે.', +'verification-error' => 'આ ફાઇલ એ ચકાસણી કસોટી પાર ન કરી', +'hookaborted' => 'તમે કરેલ ફેરફારો વિસ્તારીત ખૂંટા દ્વારા રોકી દેવાયા.', +'illegal-filename' => 'ફાઈલા નામને પરવાનગી નથી', +'overwrite' => 'વિહરમાન ફાઇલ પર પુનર્લેખન કરવાની પરવાનગી નથી', +'unknown-error' => 'અજ્ઞાત ચૂક થઈ', +'tmp-create-error' => 'હંગામી ફાઇલ ન બનાવી શકાઇ', +'tmp-write-error' => 'હંગામી ફાઇલ લખવામાં ખામી', 'large-file' => 'ફાઇલ $1 કરતાં મોટી ન હોય તે ઇચ્છનીય છે. આ ફાઇલનું કદ $2 છે.', 'largefileserver' => 'સરવરે પરવાનગી આપેલ કદ કરતાં આ ફાઇલ મોટી છે.', @@ -1528,6 +1560,8 @@ HTML નાકું ચકાસો', 'uploadedimage' => '"[[$1]]" ચઢાવ્યું', 'overwroteimage' => ' "[[$1]]" ની નવી આવૃત્તિ ચઢાવો.', 'uploaddisabled' => 'ફાઇલ ચઢાવ પ્રતિબંધિત', +'copyuploaddisabled' => 'URL દ્વાર ફાઇલ ચઢાવ પ્રતિબંધિત', +'uploadfromurl-queued' => 'તમારી ચઢાવેલી ફાઇલ કતારમાં ઉમેરાઇ છે.', 'uploaddisabledtext' => 'ફાઇલ ચઢાવવું નિષ્ક્રીય બનાવ્યું છે', 'php-uploaddisabledtext' => 'PHPમાં ફાઇલ અપલોડ નિષ્ક્રીય કરી દેવાયો છે. ફાઇલ ચડાવવાના વિકલ્પ ફરી તપાસો.', @@ -1550,6 +1584,14 @@ HTML નાકું ચકાસો', પાનું હટાવ્યાં પહેલાનાં બધા ફેરફારોની સૂચિ તમારી અનુકૂળતા માટે અહીં આપી છે:", 'filename-bad-prefix' => "તમે ચડાવેલી ફાઇલનું નામ '''\"\$1\"''' થી શરૂ થાય છે, જેમાં ફાઇલની માહિતી વિષે વર્ણન નથી. લાગે ચે તે ડિજીટલ કેમેરા દ્વારા સામાન્ય રીતે સ્વયંચાલિત રીતે અપાતું છબીનું નામ છે. કૃપયા તમે ચડાવેલી ફાઇલ માટે એક વર્ણનાત્મક નામ આપો.", +'upload-success-subj' => 'ફાઇલ ચડાવ સફળ', +'upload-success-msg' => '[$2]થી તમારુઁ ફાઇલ ચડાવ સફળ રહ્યો. તે અહીઁ ઉપલબ્ધ છે. : [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'ફાઇલ ચઢાવ મુશ્કેલી', +'upload-failure-msg' => 'તમરા ફાઇલ ચડાવવામાં [$2]થી અડચણ થઇ: + +$1', +'upload-warning-subj' => 'ફાઇલ ચઢાવ ચેતવણી', +'upload-warning-msg' => '[$2]થી કરાયેલ તમારા ચડાવા માં તકલીફ હતી. તમે [[Special:Upload/stash/$1|upload form]] પર ફરી જઇ આ ત્રુટિ હટાવી ફરી ફાઇલ ચડાવો', 'upload-proto-error' => 'ખોટો શિષ્ટાચાર', 'upload-proto-error-text' => 'દુરના ફાઇલ ચઢાવના URL ની શરૂઆત http:// કે ftp://થી થવી જોઇએ.', @@ -1615,6 +1657,7 @@ HTML નાકું ચકાસો', 'listfiles_search_for' => 'મિડિયા નામ શોધો:', 'imgfile' => 'ફાઇલ', 'listfiles' => 'ફાઇલોની યાદી', +'listfiles_thumb' => 'લઘુચિત્ર', 'listfiles_date' => 'તારીખ', 'listfiles_name' => 'નામ', 'listfiles_user' => 'સભ્ય', @@ -1731,6 +1774,7 @@ HTML નાકું ચકાસો', 'statistics-edits' => '{{SITENAME}} શરૂ થયા પછી ફેરફાર થયેલ પાના', 'statistics-edits-average' => 'દર પાના પર સરાસરી ફેરફારો', 'statistics-views-total' => 'સરવાળો', +'statistics-views-total-desc' => 'અવિહરમાન પાના અને ખાસ પાના આમા શામિલ નથી.', 'statistics-views-peredit' => 'પ્રતિ ફેરફાર ના દેખાવ', 'statistics-users' => 'નોંધણી થયેલ [[Special:ListUsers|users]]', 'statistics-users-active' => 'સક્રીય સભ્યો', @@ -1744,6 +1788,8 @@ HTML નાકું ચકાસો', આ પાનાને સંદિગ્ધ વાક્યો વાળા પાના ત્યારે કહી શકાય જ્યારે તે [[MediaWiki:Disambiguationspage]] નામના ઢાંચા સાથે જોડાયેલા હોય.", 'doubleredirects' => 'બનણું દિશાનિર્દેશિત', +'doubleredirectstext' => 'આ પાનું દિશા નિર્દેશિત પાના પર થયેલા દિશા નિર્દેશિત પાનાની યાદિ બતાવે છે. +દરેક લિટીમાં પાના પ્રથમ અને દ્વીતીય દિશા નિર્દેશન ક્ડી બતાવે છે, તે સિવાય દ્વીતીય દિશા નિર્દેશનનું લક્ષ્ય પણ બતાવે છે કે મોટે ભાગે મૂળ પાનું હોઇ શકે છેૢ જેના પર પ્રથમ દિશા નિર્દેશન લક્ષિત છે. Crossed out લિટીઓ નો ઉત્તર મેળવાયો છે.', 'double-redirect-fixed-move' => '[[$1]] હટાવી દેવાયું છે. હવે તે [[$2]] પરાનિર્દેશીત છે.', 'double-redirect-fixer' => 'નિર્દેશન સમારનાર', @@ -1767,6 +1813,8 @@ HTML નાકું ચકાસો', 'nmembers' => '$1 {{PLURAL:$1|સદસ્ય|સદસ્યો}}', 'nrevisions' => '$1 {{PLURAL:$1|પુનરાવર્તન|પુનરાવર્તનો}}', 'nviews' => '$1 {{PLURAL:$1|દેખાવ|દેખાવો}}', +'nimagelinks' => '$1 {{PLURAL:$1|પાના|પાનાઓ}} પર વપરાયો', +'ntransclusions' => '$1 {{PLURAL:$1|પાના|પાનાઓ}} પર વપરાયો', 'specialpage-empty' => 'આ પાનું ખાલી છે.', 'lonelypages' => 'અનાથ પાના', 'lonelypagestext' => 'નીચે બતાવેલા પાના {{SITENAME}} પર કે થી કડી દ્વારા જોડાયેલ નથી', @@ -1925,34 +1973,40 @@ HTML નાકું ચકાસો', 'listgrouprights-removegroup-self-all' => 'બધા જૂથને તેમના પોતાના ખાતામાંથી હટાવો', # E-mail user -'mailnologin' => 'મેળવનારનું સરનામું નથી', -'mailnologintext' => 'અન્ય સભ્યને ઇ-મેલ મોકલવા માટે તમે [[Special:UserLogin|logged in]] પ્રવેશ કરેલ હોવો જોઈએ અને તમારા[[Special:Preferences|preferences]] વિકલ્પોમાં તમારા ઈ-મેલ સરનામાની પુષ્ટિ થયેલી હોવી જોઈએ', -'emailuser' => 'સભ્યને ઇ-મેલ કરો', -'emailpage' => 'ઈ-મેલ સભ્ય', -'emailpagetext' => 'તમે નીચે દર્શાવેલ ફોર્મ વાપરી ઇ-મેલ મોકલી શકો છો. +'mailnologin' => 'મેળવનારનું સરનામું નથી', +'mailnologintext' => 'અન્ય સભ્યને ઇ-મેલ મોકલવા માટે તમે [[Special:UserLogin|logged in]] પ્રવેશ કરેલ હોવો જોઈએ અને તમારા[[Special:Preferences|preferences]] વિકલ્પોમાં તમારા ઈ-મેલ સરનામાની પુષ્ટિ થયેલી હોવી જોઈએ', +'emailuser' => 'સભ્યને ઇ-મેલ કરો', +'emailpage' => 'ઈ-મેલ સભ્ય', +'emailpagetext' => 'તમે નીચે દર્શાવેલ ફોર્મ વાપરી ઇ-મેલ મોકલી શકો છો. તમે તમારી માહિતીમાં [[Special:Preferences|your user preferences]] જે ઇ-મેલ લખ્યો હશે તે દ્વારા ના નામ હેઠળ દેખાશે, જેથી ઇ-મેલ મેળવનાર તમને સંદેશાનો જવાબ આપી શકશે.', -'usermailererror' => 'મેલ વસ્તુ પાઠવવામાં ત્રુટિ', -'defemailsubject' => '{{SITENAME}} ઈ-મેલ', -'noemailtitle' => 'ઈ-મેલ એડ્રેસ નથી', -'noemailtext' => 'આ સભ્યએ વૈધ ઇ-મેલ સરનામું નથી આપ્યું.', -'nowikiemailtitle' => 'કોઇ પણ ઇ મેલની રજા નથી', -'nowikiemailtext' => 'અન્ય સભ્યો ઇ-મેલ ન મોકલે તેવી આ સભ્યની પસંદગી છે.', -'email-legend' => 'અન્ય {{SITENAME}} સભ્ય નેઈ-મેલ મોકલો', -'emailfrom' => 'પ્રેષક:', -'emailto' => 'પ્રતિ:', -'emailsubject' => 'વિષય:', -'emailmessage' => 'સંદેશો:', -'emailsend' => 'મોકલો', -'emailccme' => 'મારા ઈ-મેલની પ્રત મને મોકલો', -'emailccsubject' => 'તમારો સંદેશની પ્રત $1: $2 માઁ', -'emailsent' => 'ઈ-મેલ મોકલી દેવાયો', -'emailsenttext' => 'તમારો ઈ-મેલ મોકલી દેવાયો છે', -'emailuserfooter' => 'આ ઈ-મેલ $1 દ્વારા $2ને "E-mail user" સૂત્ર {{SITENAME}} પર મોકલાવાયું છે.', +'usermailererror' => 'મેલ વસ્તુ પાઠવવામાં ત્રુટિ', +'defemailsubject' => '{{SITENAME}} ઈ-મેલ', +'usermaildisabled' => 'સભ્યનો ઈ-મેલ નિષ્ક્રિય કરાયો', +'usermaildisabledtext' => 'તમે આ વિકિ પર અન્ય સભ્યોને ઇ-મેલ મોકલી ન શકો', +'noemailtitle' => 'ઈ-મેલ એડ્રેસ નથી', +'noemailtext' => 'આ સભ્યએ વૈધ ઇ-મેલ સરનામું નથી આપ્યું.', +'nowikiemailtitle' => 'કોઇ પણ ઇ મેલની રજા નથી', +'nowikiemailtext' => 'અન્ય સભ્યો ઇ-મેલ ન મોકલે તેવી આ સભ્યની પસંદગી છે.', +'email-legend' => 'અન્ય {{SITENAME}} સભ્ય નેઈ-મેલ મોકલો', +'emailfrom' => 'પ્રેષક:', +'emailto' => 'પ્રતિ:', +'emailsubject' => 'વિષય:', +'emailmessage' => 'સંદેશો:', +'emailsend' => 'મોકલો', +'emailccme' => 'મારા ઈ-મેલની પ્રત મને મોકલો', +'emailccsubject' => 'તમારો સંદેશની પ્રત $1: $2 માઁ', +'emailsent' => 'ઈ-મેલ મોકલી દેવાયો', +'emailsenttext' => 'તમારો ઈ-મેલ મોકલી દેવાયો છે', +'emailuserfooter' => 'આ ઈ-મેલ $1 દ્વારા $2ને "E-mail user" સૂત્ર {{SITENAME}} પર મોકલાવાયું છે.', + +# User Messenger +'usermessage-summary' => 'પ્રણાલી સંદેશા મૂકાયો', +'usermessage-editor' => 'તંત્ર સંદેશાઓ', # Watchlist 'watchlist' => 'મારી ધ્યાનસૂચી', 'mywatchlist' => 'મારી ધ્યાનસૂચિ', -'watchlistfor' => "('''$1'''ને માટે)", +'watchlistfor2' => 'ધ્યાન સૂચિ $1 $2', 'nowatchlist' => 'તમારી ધ્યાન સૂચિ ખાલી છે', 'watchlistanontext' => 'તમારી ધ્યાનસૂચિની વસ્તુઓ જોવા અને ફેરફાર કરવા $1 કરો', 'watchnologin' => 'પ્રવેશ કરેલ નથી', @@ -2076,7 +2130,10 @@ Deleting it may disrupt database operations of {{SITENAME}};', 'revertpage-nouser' => ' (સભ્ય નામ હટાવ્યું) દ્વારા થયેલ ફેરફારને [[User:$1|$1]]ના દ્વારા થયેલ છેલ્લા પુનરાવર્તન પર પાછા લઇ જવાયા', 'rollback-success' => '$1 દ્વારા થયેલા ફેરફારો ઉલટાવાયા તેને $2 દ્વારા થયેલ સંપાદન સુધી લઇ જવાયું', -'sessionfailure' => 'તમારા પ્રવેશ સત્રમાં કઈંક ત્રુટિ છે ; + +# Edit tokens +'sessionfailure-title' => 'સત્ર નિષ્ફળ', +'sessionfailure' => 'તમારા પ્રવેશ સત્રમાં કઈંક ત્રુટિ છે ; સત્ર અપહરણ ની શક્યતા ન રહે તેમાટે આ સત્ર રદ્દ્ કરવામાં આવે છે. પાછળ જોયેલા પાને પાછા જાઓ , અને ફરી પ્રયત્ન કરો .', @@ -2212,19 +2269,23 @@ Clicking '''''{{int:undeletereset}}''''' will clear the comment field and all ch 'month' => ':મહિનાથી (અને પહેલાનાં)', 'year' => ':વર્ષથી (અને પહેલાનાં)', -'sp-contributions-newbies' => 'માત્ર નવા ખુલેલાં ખાતાઓનું યોગદાન બતાવો', -'sp-contributions-newbies-sub' => 'નવા ખાતાઓ માટે', -'sp-contributions-newbies-title' => 'નવા ખાતાના સભ્યોનું યોગદાન', -'sp-contributions-blocklog' => 'પ્રતિબંધ સૂચિ', -'sp-contributions-deleted' => 'સભ્યનું ભૂંસેલું યોગદાન', -'sp-contributions-logs' => 'લૉગ', -'sp-contributions-talk' => 'યોગદાનકર્તાની ચર્ચા', -'sp-contributions-userrights' => 'સભ્ય હક્ક પ્રબંધન', -'sp-contributions-blocked-notice' => 'આ સભ્ય પ્રતિબંધિત છે +'sp-contributions-newbies' => 'માત્ર નવા ખુલેલાં ખાતાઓનું યોગદાન બતાવો', +'sp-contributions-newbies-sub' => 'નવા ખાતાઓ માટે', +'sp-contributions-newbies-title' => 'નવા ખાતાના સભ્યોનું યોગદાન', +'sp-contributions-blocklog' => 'પ્રતિબંધ સૂચિ', +'sp-contributions-deleted' => 'સભ્યનું ભૂંસેલું યોગદાન', +'sp-contributions-uploads' => 'ખાસ યોગદાન / ચડાવેલ ફાઇલ', +'sp-contributions-logs' => 'લૉગ', +'sp-contributions-talk' => 'યોગદાનકર્તાની ચર્ચા', +'sp-contributions-userrights' => 'સભ્ય હક્ક પ્રબંધન', +'sp-contributions-blocked-notice' => 'આ સભ્ય પ્રતિબંધિત છે તમારા સંદર્ભ માટે પ્રતિબંધિત સભ્યોની યાદિ આપી છે', -'sp-contributions-search' => 'યોગદાન શોધો', -'sp-contributions-username' => 'IP સરનામું અથવા સભ્યનામ:', -'sp-contributions-submit' => 'શોધો', +'sp-contributions-blocked-notice-anon' => 'આ IP સરનામું હમણા પ્રતિબંધિત છે +તમરા સંદર્ભ માટે તાજી પ્રતિબંધ યાદિ આપી છે.', +'sp-contributions-search' => 'યોગદાન શોધો', +'sp-contributions-username' => 'IP સરનામું અથવા સભ્યનામ:', +'sp-contributions-toponly' => 'તાજેતરમાં થયેલા ફેરફારો જબતાવો', +'sp-contributions-submit' => 'શોધો', # What links here 'whatlinkshere' => 'અહિયાં શું જોડાય છે', @@ -2362,6 +2423,8 @@ $1 પહેલેથી પ્રતિબંધિત છે. 'cant-block-while-blocked' => 'જ્યારે તમે પોતે પ્રતિબંધિત હોવ ત્યારે અન્ય સભ્યોને પ્રતિબંધિત ન કરી શકો', 'cant-see-hidden-user' => 'તમે જે સભ્ય પર રોક લગાવવા પ્રયત્ન કરો છો તે ના પર પહેલેથી રોક લગાવાયેલી છે. તમને સભ્ય છુપાવો / બતાવોના અધિકારો ન હોવાથી, તમે સભ્ય પર રોક લગાવેલ તે નોંધ જોઇ નથી શકતા.', +'ipbblocked' => 'તમે અન્ય સભ્યોને પ્રતિબંધિત ન કરી શકો, તમે પોતે પ્રતિબંધિત છો.', +'ipbnounblockself' => 'તમે પોતાને અપ્રતિબંધિત ન કરી શકો', # Developer tools 'lockdb' => 'માહિતીસંચય તાળું વાસો', @@ -2395,6 +2458,18 @@ $1 પહેલેથી પ્રતિબંધિત છે. એ વાતની નોંધ લેશો કે, જો તમે પસંદ કરેલા નવા નામ વાળું પાનું અસ્તિત્વમાં હશે તો જુનું પાનું '''નહી ખસે''', સિવાયકે તે પાનું ખાલી હોય અથવા તે પણ અન્યત્ર વાળતું પાનું હોય અને તેનો કોઈ ઇતિહાસ ના હોય. આનો અર્થ એમ થાય છે કે જો તમે કોઈ તબક્કે ભુલ કરશો તો જે પાનાનું નામ બદલવાનો પ્રયત્ન કરતા હોવ તેને તમે ફરી પાછા જુના નામ પર જ પાછું વાળી શકશો, અને બીજું કે પહેલેથી બનેલા પાનાનું નામ તમે નામફેર કરવા માટે ના વાપરી શકો. +'''ચેતવણી!''' +લોકપ્રિય પાનાં સાથે આવું કરવું બિનઅપેક્ષિત અને જોરદાર પરિણામકારક નિવડી શકે છે; +આગળ વધતાં પહેલાં આની અસરોનો પુરે પુરો તાગ મેળવી લેવો આવશ્યક છે.", +'movepagetext-noredirectfixer' => "નીચેનું ફોર્મ વાપરવાથી આ પાનાનું નામ બદલાઇ જશે અને તેમાં રહેલી બધી મહિતિ નવા નામે બનેલાં પાનામાં ખસેડાઇ જશે. +જુનું પાનું, નવા બનેલા પાના તરફ વાળતું થશે. +તમે આવા અન્યત્ર વાળેલાં પનાઓને આપોઆપ જ તેના મુળ શીર્ષક સાથે જોડી શકશો. +જો તમે તેમ કરવા ના ઇચ્છતા હોવ તો, [[Special:DoubleRedirects|બેવડા]] અથવા [[Special:BrokenRedirects|ત્રુટક કડી વાળા]] અન્યત્ર વાળેલા પાનાઓની યાદી ચકાસીને ખાતરી કરી લેશો. +કડી જે પાના પર લઈ જવી જોઈએ તે જ પાના સાથે જોડે તેની ખાતરી કરી લેવી તે તમારી જવાબદારી છે. + +એ વાતની નોંધ લેશો કે, જો તમે પસંદ કરેલા નવા નામ વાળું પાનું અસ્તિત્વમાં હશે તો જુનું પાનું '''નહી ખસે''', સિવાયકે તે પાનું ખાલી હોય અથવા તે પણ અન્યત્ર વાળતું પાનું હોય અને તેનો કોઈ ઇતિહાસ ના હોય. +આનો અર્થ એમ થાય છે કે જો તમે કોઈ તબક્કે ભુલ કરશો તો જે પાનાનું નામ બદલવાનો પ્રયત્ન કરતા હોવ તેને તમે ફરી પાછા જુના નામ પર જ પાછું વાળી શકશો, અને બીજું કે પહેલેથી બનેલા પાનાનું નામ તમે નામફેર કરવા માટે ના વાપરી શકો. + '''ચેતવણી!''' લોકપ્રિય પાનાં સાથે આવું કરવું બિનઅપેક્ષિત અને જોરદાર પરિણામકારક નિવડી શકે છે; આગળ વધતાં પહેલાં આની અસરોનો પુરે પુરો તાગ મેળવી લેવો આવશ્યક છે.", @@ -2455,6 +2530,7 @@ $1 પહેલેથી પ્રતિબંધિત છે. 'immobile-source-page' => 'આ પાનું ખસેડી નહીં શકાય', 'immobile-target-page' => 'તે લક્ષ્ય શીર્ષક પર ન ખસેડી શકાયા.', 'imagenocrossnamespace' => 'ફાઇલ ને બિન-ફાઇલ નામસ્થળમાં ન ખસેડી શકાય', +'nonfile-cannot-move-to-file' => 'ફાઇલ ન હોય તેમને ફાઇલ નામ સ્થળમાં ન ખસેડી શકાય', 'imagetypemismatch' => 'નવો ફાઈલ વિસ્તાર શબ્દ તેના પ્રકારાને નથી મળતો', 'imageinvalidfilename' => 'લક્ષ્ય ફાઈલ અવૈધ છે', 'fix-double-redirects' => 'મૂળ શીર્ષક તરફ નિર્દેશન કરતા દિશા નિર્દેશકો અધ્યતન કરો', @@ -2535,6 +2611,7 @@ $1 પહેલેથી પ્રતિબંધિત છે. 'importstart' => 'આયાત કામ જારી છે....', 'import-revision-count' => '$1 {{PLURAL:$1|પુનરાવર્તન|પુનરાવર્તનો}}', 'importnopages' => 'આયાત કરવા માટે કોઇ પાનું નથી!', +'imported-log-entries' => 'આયાતી $1 {{PLURAL:$1|log entry|log entries}}.', 'importfailed' => 'આયાત નિષ્ફળ: $1', 'importunknownsource' => 'અજ્ઞાત આયાતી સ્ત્રોત પ્રકાર', 'importcantopen' => 'આયાતી ફાઈલ નાખોલી શકાઈ', @@ -2632,6 +2709,8 @@ $1 પહેલેથી પ્રતિબંધિત છે. 'tooltip-rollback' => '"પાછું વાળો" એક જ ક્લિકમાં છેલ્લા સભ્યએ આ પાનામાં કરેલા બધા ફેરફારો પાછા વાળશે', 'tooltip-undo' => '"રદ કરો" આ ફેરફારને પાછો વાળશે અને ફેરફાર પછીનું પૂર્વાવલોકન ફોર્મ નવા પાના તરીકે ખુલશે. તે તમને \'સારાંશ\'માં કારણ જણાવવા દેશે.', +'tooltip-preferences-save' => 'પસંદ સાચવો', +'tooltip-summary' => 'ટૂંક સારાંશ ઉમેરો', # Metadata 'nodublincore' => 'સર્વર માટે Dublin Core RDF metadata નિષ્ક્રીય કરાયો.', @@ -2719,16 +2798,22 @@ $1 પહેલેથી પ્રતિબંધિત છે. 'nextdiff' => 'પછીનો ફેરફાર →', # Media information +'mediawarning' => "'''ચેતવણી''': આ ફાઇલમાં દુષ્ટ સોચનાઓ હોઇ શકે. +તેને ચલવતા, તમારા સંગણકને ભય છે.", 'imagemaxsize' => "ચિત્રના કદની મર્યાદા:
    ''(for file description pages)''", 'thumbsize' => 'લઘુચિત્ર કદ', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|પાનું|પાના}}', -'file-info-size' => '($1 × $2 પીક્સલ, ફાઇલનું કદ: $3, MIME પ્રકાર: $4)', +'file-info' => 'ફાઇલ કદ : $1, MIME પ્રકાર: $2', +'file-info-size' => '$1 × $2 પીક્સલ, ફાઇલનું કદ: $3, MIME પ્રકાર: $4', 'file-nohires' => 'આથી વધુ આવર્તન ઉપલબ્ધ નથી.', -'svg-long-desc' => '(SVG ફાઇલ, માત્ર $1 × $2 પીક્સલ, ફાઇલનું કદ: $3)', +'svg-long-desc' => 'SVG ફાઇલ, માત્ર $1 × $2 પીક્સલ, ફાઇલનું કદ: $3', 'show-big-image' => 'મહત્તમ આવર્તન', 'show-big-image-thumb' => 'આ પુર્વાવલોકનનું પરિમાણ: $1 × $2 પીક્સલ', 'file-info-gif-looped' => 'આવર્તન (લુપ)', 'file-info-gif-frames' => ' $1 {{PLURAL:$1|છબી|છબીઓ}}', +'file-info-png-looped' => 'આવર્તન', +'file-info-png-repeat' => '$1 {{PLURAL:$1|વખત|વખત}} કરાયું', +'file-info-png-frames' => '$1 {{PLURAL:$1|છ્બી|છબીઓ}}', # Special:NewFiles 'newimages' => 'નવી ફાઇલોની ઝાંખી', @@ -2884,6 +2969,7 @@ $1 પહેલેથી પ્રતિબંધિત છે. 'exif-gpsareainformation' => 'GPS ક્ષેત્રનું નામ', 'exif-gpsdatestamp' => 'GPS તારીખ', 'exif-gpsdifferential' => 'GPS ફેરફારનો સુધારો', +'exif-objectname' => 'લઘુ શીર્ષક', # EXIF attributes 'exif-compression-1' => 'અસંકોચિત', @@ -3041,30 +3127,54 @@ $1 પહેલેથી પ્રતિબંધિત છે. 'limitall' => 'બધા', # E-mail address confirmation -'confirmemail' => 'તમારા ઇ-મેઇલ સરનામાની પુષ્ટિ કરો', -'confirmemail_noemail' => 'તમારા [[Special:Preferences|user preferences]] માં વૈધ ઈ-મેલ સરનામું નથી.', -'confirmemail_text' => '{{SITENAME}} માં તમારા ઇ-મેલ સરનામાની પુષ્ટિ થયેલી હોવી જરૂરી છે. +'confirmemail' => 'તમારા ઇ-મેઇલ સરનામાની પુષ્ટિ કરો', +'confirmemail_noemail' => 'તમારા [[Special:Preferences|user preferences]] માં વૈધ ઈ-મેલ સરનામું નથી.', +'confirmemail_text' => '{{SITENAME}} માં તમારા ઇ-મેલ સરનામાની પુષ્ટિ થયેલી હોવી જરૂરી છે. નીચેના બટન પર ક્લિક કરો અને પુષ્ટિ કરનાર ઇ-મેલ પાઠવો. આ મેલમાં કોડ ધરાવતી એક કડી પણ મોકલાવાશે; ઈ-મેલની પુષ્ટિ કરવા તે કડી તમારા બ્રાઉઝરમાં સક્રીય કરો.', -'confirmemail_pending' => 'પુષ્ટિ કરતું કોડ તમને ઇ-મેલ કરી દેવાયો છે; +'confirmemail_pending' => 'પુષ્ટિ કરતું કોડ તમને ઇ-મેલ કરી દેવાયો છે; તમે જો હાલમાં તમારું ખાતું ખોલ્યું હોય, તો તમે અમુક ક્ષણો પ્રતિક્ષા કરી અને નવા કોડની વિનંતી કરવાનું ટાળી શકો.', -'confirmemail_send' => 'ઈ-મેલ બહાલી સંકેત ઇ-મેલમાં મોકલો', -'confirmemail_sent' => 'બહાલીનો ઇ-મેલ મોકલી દેવાયો છે', -'confirmemail_oncreate' => 'પુષ્ટિકોડ તમને ઇમેલ દ્વારા મોકલવામાં આવ્યો છે. +'confirmemail_send' => 'ઈ-મેલ બહાલી સંકેત ઇ-મેલમાં મોકલો', +'confirmemail_sent' => 'બહાલીનો ઇ-મેલ મોકલી દેવાયો છે', +'confirmemail_oncreate' => 'પુષ્ટિકોડ તમને ઇમેલ દ્વારા મોકલવામાં આવ્યો છે. પ્રવેશ કરવા માટ તમને આ કોડની જરૂર નથી. પણ ઇ-મેલ આધારિત વિકિ સેવાઓ વાપરવા આની જરૂર છે.', -'confirmemail_sendfailed' => '{{SITENAME}} તમારો પુષ્ટિ કરનાર ઇ-મેલ નહીં મોકલી શકી. +'confirmemail_sendfailed' => '{{SITENAME}} તમારો પુષ્ટિ કરનાર ઇ-મેલ નહીં મોકલી શકી. કૃપયા તમારો ઇ-મેલ તપાસી અવૈધ અક્ષરો હોય તો તપાસો. મેલની પહોંચ પાછી ફરી: $1', -'confirmemail_invalid' => 'અવૈધ બહાલી સંકેત +'confirmemail_invalid' => 'અવૈધ બહાલી સંકેત સંકેત કાલાતિત થયું હોય', -'confirmemail_needlogin' => 'તમારે ઈ-મેલ ને બહાલી આપવા $1 કરવું પડશે', -'confirmemail_success' => 'તમારા ઈ-મેલની પુષ્ટિ થઈ ગઈ છે. +'confirmemail_needlogin' => 'તમારે ઈ-મેલ ને બહાલી આપવા $1 કરવું પડશે', +'confirmemail_success' => 'તમારા ઈ-મેલની પુષ્ટિ થઈ ગઈ છે. તમે હવે પ્રવેશ [[Special:UserLogin|log in]] કરી વિકિનો આનંદ ઉઠાવી શકો.', -'confirmemail_loggedin' => 'તમારા ઇ-મેલ સરનામાની પુષ્ટિ કરાઇ છે.', -'confirmemail_error' => 'પુષ્ટિ સાચવતા કોઈ ત્રુટિ રહી ગઈ', -'confirmemail_subject' => '{{SITENAME}} ઈ-મેલ સરનામાની પુષ્ટિ', -'confirmemail_body' => 'કોઇકે, કદાચ તમે પોતે જ , IP સરનામા $1 પરથી, +'confirmemail_loggedin' => 'તમારા ઇ-મેલ સરનામાની પુષ્ટિ કરાઇ છે.', +'confirmemail_error' => 'પુષ્ટિ સાચવતા કોઈ ત્રુટિ રહી ગઈ', +'confirmemail_subject' => '{{SITENAME}} ઈ-મેલ સરનામાની પુષ્ટિ', +'confirmemail_body' => 'કોઇકે, કદાચ તમે પોતે જ , IP સરનામા $1 પરથી, + "$2" ખાતાનું ઇ-મેલ સરનામું બદલ્યું {{SITENAME}} પર છે. + +એ વાતની પુષ્ટિ કરવા માટે કે આ એ-મેલ ખાતું તમારું જ છે અને {{SITENAME}}ના ઇ-મેલ સંબંધિત વિકલ્પો સક્રીય કરવા માટે અપેલ કડીને તમારા બ્રાઉઝરમાં સક્રીય કરો. : + +$3 + +જો ખાતું તમારું ના હોય તો,આકડીનેઅનુસરીઈ-મેલાખાતાનીપુષ્ટિનીનોંધણીને રદ્દ કરો: + +$5 + +આ પુષ્ટિ કોડ $4 ના કાલાતિત થશે.', +'confirmemail_body_changed' => 'કોઇકે, કદાચ તમે પોતે જ , IP સરનામા $1 પરથી, + "$2" ખાતાનું ઇ-મેલ સરનામું બદલ્યું {{SITENAME}} પર છે. + +એ વાતની પુષ્ટિ કરવા માટે કે આ એ-મેલ ખાતું તમારું જ છે અને {{SITENAME}}ના ઇ-મેલ સંબંધિત વિકલ્પો સક્રીય કરવા માટે અપ્ેલ કડીને તમારા બ્રાઉઝરમાં સક્રીય કરો. : + +$3 + +જો ખાતું તમારું ના હોય તો,આકડીનેઅનુસરીઈ-મેલાખાતાનીપુષ્ટિનીનોંધણીને રદ્દ કરો: + +$5 + +આ પુષ્ટિ કોડા $4 ના કાલાતિત થશે.', +'confirmemail_body_set' => 'કોઇકે, કદાચ તમે પોતે જ , IP સરનામા $1 પરથી, "$2" ખાતાનું ઇ-મેલ સરનામું બદલ્યું {{SITENAME}} પર છે. એ વાતની પુષ્ટિ કરવા માટે કે આ એ-મેલ ખાતું તમારું જ છે અને {{SITENAME}}ના ઇ-મેલ સંબંધિત વિકલ્પો સક્રીય કરવા માટે અપેલ કડીને તમારા બ્રાઉઝરમાં સક્રીય કરો. : @@ -3076,8 +3186,8 @@ $3 $5 આ પુષ્ટિ કોડ $4 ના કાલાતિત થશે.', -'confirmemail_invalidated' => 'ઇ-મેલ સરનામાનું બહાલીકરણ રદ્દ', -'invalidateemail' => 'ઇ-મેલ બહાલી રદ્દ કરો', +'confirmemail_invalidated' => 'ઇ-મેલ સરનામાનું બહાલીકરણ રદ્દ', +'invalidateemail' => 'ઇ-મેલ બહાલી રદ્દ કરો', # Scary transclusion 'scarytranscludedisabled' => 'આંતરવિકિ આંશિક સંદર્ભીકરણ નિષ્ક્રીય', @@ -3117,6 +3227,7 @@ $1', 'table_pager_first' => 'પહેલું પાનું', 'table_pager_last' => 'છેલ્લૂં પાનું', 'table_pager_limit' => 'પ્રતિ પાને $1 વસ્તુ બતાવો', +'table_pager_limit_label' => 'વસ્તિઓ પ્રતિ પાને', 'table_pager_limit_submit' => 'જાઓ', 'table_pager_empty' => 'કોઇ પરિણામ નથી', @@ -3139,19 +3250,26 @@ $1', 'lag-warn-high' => 'માહિતીસંચ સર્વરના લાંબાગાળાને કારણે $1 {{PLURAL:$1|સેકંડ|સેકંડો}} પછી કરેલા ફેરફાર જોઇ શકાશે નહીં', # Watchlist editor -'watchlistedit-numitems' => 'તમારી ધ્યાન સૂચિ {{PLURAL:$1|1 શીર્ષક |$1 શીર્ષકો}} ધરાવે છે, ચર્ચાના પાના સિવાય.', -'watchlistedit-noitems' => 'તમારી ધ્યાન સૂચિમાં કોઇ શીર્ષક નથી.', -'watchlistedit-normal-title' => 'ધ્યાનસૂચિ માં ફેરફાર કરો', -'watchlistedit-normal-legend' => 'ધ્યાનસૂચિમાંથી આશીર્ષકો કાઢી નાખો', -'watchlistedit-normal-submit' => 'શીર્ષકો હટાવો', -'watchlistedit-normal-done' => '{{PLURAL:$1|1 શીર્ષક |$1 શીર્ષકો }} ને તમારી ધ્યાનસૂચિમાંથી હટાવાયા:', -'watchlistedit-raw-title' => 'કાચી ધ્યાનસૂચિમાં ફેરફાર કરો', -'watchlistedit-raw-legend' => 'કાચી ધ્યાનસૂચિમાં ફેરફાર કરો', -'watchlistedit-raw-titles' => 'શિર્ષક:', -'watchlistedit-raw-submit' => 'ધ્યાનસૂચિ અધ્યતન બનાવો', -'watchlistedit-raw-done' => 'તમારી ધ્યાના સૂચિ અધ્યતન કરાઈ.', -'watchlistedit-raw-added' => '{{PLURAL:$1|1 શીર્ષક |$1 શીર્ષકો}} ઉમેરાયા :', -'watchlistedit-raw-removed' => '{{PLURAL:$1|1 શીર્ષક |$1 શીર્ષકો }} હટાવાયા :', +'watchlistedit-numitems' => 'તમારી ધ્યાન સૂચિ {{PLURAL:$1|1 શીર્ષક |$1 શીર્ષકો}} ધરાવે છે, ચર્ચાના પાના સિવાય.', +'watchlistedit-noitems' => 'તમારી ધ્યાન સૂચિમાં કોઇ શીર્ષક નથી.', +'watchlistedit-normal-title' => 'ધ્યાનસૂચિ માં ફેરફાર કરો', +'watchlistedit-normal-legend' => 'ધ્યાનસૂચિમાંથી આશીર્ષકો કાઢી નાખો', +'watchlistedit-normal-explain' => 'તમારી ધ્યાનસૂચિના શીર્ષકો અહીં બતાવ્યાં છે. +કોઇ શીર્ષક હતાવવા માટે , તેની બાજું નું ખાનું અંકિત કરો , અને "{{int:Watchlistedit-normal-submit}}"ના પર ક્લિક કરો. +તમે [[Special:Watchlist/raw|edit the raw list]]માં બદલાવ પણ કરી શકો.', +'watchlistedit-normal-submit' => 'શીર્ષકો હટાવો', +'watchlistedit-normal-done' => '{{PLURAL:$1|1 શીર્ષક |$1 શીર્ષકો }} ને તમારી ધ્યાનસૂચિમાંથી હટાવાયા:', +'watchlistedit-raw-title' => 'કાચી ધ્યાનસૂચિમાં ફેરફાર કરો', +'watchlistedit-raw-legend' => 'કાચી ધ્યાનસૂચિમાં ફેરફાર કરો', +'watchlistedit-raw-explain' => 'તમારી ધ્યાનસૂચિના શીર્ષકો અહીં બતાવ્યાં છે , તેમાં વસ્તુ ઓ ઉમેરીએ અને હટાવીને તેમાં ફેરફાર કરી શકાય છે; +એક શીર્ષક પ્રતિ લિટી. +જ્યારે કાર્ય સમાપ્ત થાય ત્યારે, અહીં ક્લિક કરો "{{int:Watchlistedit-raw-submit}}". +તેમે [[Special:Watchlist/edit|use the standard editor]] પણ કરી શકો.', +'watchlistedit-raw-titles' => 'શિર્ષક:', +'watchlistedit-raw-submit' => 'ધ્યાનસૂચિ અધ્યતન બનાવો', +'watchlistedit-raw-done' => 'તમારી ધ્યાના સૂચિ અધ્યતન કરાઈ.', +'watchlistedit-raw-added' => '{{PLURAL:$1|1 શીર્ષક |$1 શીર્ષકો}} ઉમેરાયા :', +'watchlistedit-raw-removed' => '{{PLURAL:$1|1 શીર્ષક |$1 શીર્ષકો }} હટાવાયા :', # Watchlist editing tools 'watchlisttools-view' => 'બંધબેસતાં ફેરફારો નિહાળો', @@ -3168,6 +3286,7 @@ $1', 'version-specialpages' => 'ખાસ પાનાં', 'version-parserhooks' => 'પદચ્છેદ ખૂંટો', 'version-variables' => 'સહગુણકો', +'version-skins' => 'ફલક', 'version-other' => 'અન્ય', 'version-mediahandlers' => 'દ્રશ્યશ્રાવ્ય માધ્યમના ધારક', 'version-hooks' => 'ખૂંટા', @@ -3179,6 +3298,13 @@ $1', 'version-hook-subscribedby' => 'દ્વ્રારા લાભાન્વીત', 'version-version' => '(આવૃત્તિ $1)', 'version-license' => 'પરવાનો', +'version-poweredby-credits' => "આ વિકિ '''[http://www.mediawiki.org/ MediaWiki]''' દ્વારા ચાલે છે, પ્રકાશનાધિકાર © 2001-$1 $2.", +'version-poweredby-others' => 'અન્યો', +'version-license-info' => 'મિડિયાવિકિ એક મુક્ત સોફ્ટવેર છે. તમે તેનું પુનઃવિતરણ કરી શકો છો અને/અથવા તેને the Free Software Foundation દ્વારા પ્રકાશિત GNU General Public License હેઠળ તેના સંસ્કરણ 2 ને કે તે પછીના સંસ્કરણ મઠારી શકો છો . + +મિડિયા વિકિ ને તે આશાથી વિતરીત કરાયું છે કે તે લોકોને ઉપયોગિ થશે કોઇ વોરેંટી વિના અથવા કોઇ કાર્ય સંબધી વેચાણકે તેની યોગ્યતા બદ્દલ ખાત્રી સિવાય. વધારે માહિતે માટે GNU General Public Licens જુઓ. + +આ પ્રોગ્રામ સાથે તમને [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU General Public License]ની કૉપી મળી હશે. જો ન મલી હોય તો અહીં લખશો the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA કે [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html ઓનલાઇન વાંચો ].', 'version-software' => 'બેસાડેલા સોફ્ટવેર', 'version-software-product' => 'ઉત્પાદ', 'version-software-version' => 'આવૃત્તિ', @@ -3202,6 +3328,9 @@ $1', # Special:SpecialPages 'specialpages' => 'ખાસ પાનાં', +'specialpages-note' => '---- +* સામાન્ય ખાસ પાનાઓ. +* Restricted special pages.', 'specialpages-group-maintenance' => 'સમારકામ અહેવાલ', 'specialpages-group-other' => 'અન્ય ખાસ પાનાઓ', 'specialpages-group-login' => 'પ્રવેશ / નોંધણી કરો', @@ -3242,6 +3371,15 @@ $1', 'tags-edit' => 'ફેરફાર કરો', 'tags-hitcount' => '$1 {{PLURAL:$1|ફેરફાર|ફેરફારો}}', +# Special:ComparePages +'comparepages' => 'પાનાં સરખાવો', +'compare-selector' => 'પાનાનાં પુનરાવર્તન સરખાવો', +'compare-page1' => 'પાનું ૧', +'compare-page2' => 'પાનું ૨', +'compare-rev1' => 'પુનરાવર્તન ૧', +'compare-rev2' => 'પુનરાવર્તન ૨', +'compare-submit' => 'સરખાવો', + # Database error messages 'dberr-header' => 'આ વિકિમાં તકલીફ છે', 'dberr-problems' => 'દિલગીરી! @@ -3259,8 +3397,13 @@ $1', 'htmlform-float-invalid' => 'તમે લખેલ વિકલ્પ અંક નથી', 'htmlform-int-toolow' => '$1 આ કિંમત આ ન્યૂનતમ કિંમત છે', 'htmlform-int-toohigh' => 'તમે પુરી પાડેલ માહિતી મહત્તમ $1થી વધુ છે', +'htmlform-required' => 'આ કિઁમત જોઈએ છે', 'htmlform-submit' => 'જમા કરો', 'htmlform-reset' => 'ફેરફાર ઉલટાવો', 'htmlform-selectorother-other' => 'અન્ય', +# SQLite database support +'sqlite-has-fts' => '$1 પૂર્ણ શબ્દ શોધ સહીત', +'sqlite-no-fts' => '$1 પૂર્ણ શબ્દ શોધ વિકલ્પ વગર', + ); diff --git a/languages/messages/MessagesGv.php b/languages/messages/MessagesGv.php index 94203c98..733026db 100644 --- a/languages/messages/MessagesGv.php +++ b/languages/messages/MessagesGv.php @@ -42,7 +42,7 @@ $messages = array( 'tog-numberheadings' => 'Cur earrooyn gyn smooinaght er kione-linnaghyn', 'tog-showtoolbar' => 'Taishbynee barr greieyn (ta feme ec er JavaScript)', 'tog-editondblclick' => 'Reagh duillagyn lesh crig dooblit (ta feme ec er JavaScript)', -'tog-rememberpassword' => "Cooinnee m'ockle arrey er y cho-earrooder shoh", +'tog-rememberpassword' => 'Cooinnee my fys loggal stiagh er y cho-earrooder shoh (rish wheesh as $1 {{PLURAL:$1|laa|laa|laa|laaghyn}})', 'tog-watchcreations' => 'Cur duillagyn ta crooit aym lesh my rolley arrey', 'tog-watchdefault' => 'Cur duillagyn ta reaghit aym lesh my rolley arrey', 'tog-watchmoves' => 'Cur duillagyn ta scughit aym lesh my rolley arrey', @@ -167,29 +167,19 @@ $messages = array( 'faqpage' => 'Project:FC', # Vector skin -'vector-action-addsection' => 'Cooish noa', -'vector-action-delete' => 'Scryss', -'vector-action-move' => 'Scughey', -'vector-action-protect' => 'Coadee', -'vector-action-undelete' => 'Jee-scryss', -'vector-action-unprotect' => 'Jee-choadee', -'vector-namespace-category' => 'Ronney', -'vector-namespace-help' => 'Duillag choonee', -'vector-namespace-image' => 'Coadan', -'vector-namespace-main' => 'Duillag', -'vector-namespace-mediawiki' => 'Çhaghteraght', -'vector-namespace-project' => 'Duillag shalee', -'vector-namespace-special' => 'Duillag er lheh', -'vector-namespace-talk' => 'Resoonaght', -'vector-namespace-template' => 'Clowan', -'vector-namespace-user' => 'Duillag ymmydeyr', -'vector-view-create' => 'Croo', -'vector-view-edit' => 'Reaghey', -'vector-view-history' => 'Jeeagh er shennaghys', -'vector-view-view' => 'Lhaih', -'vector-view-viewsource' => 'Jeeagh er bun', -'actions' => 'Obbraghyn', -'namespaces' => 'Reamyssyn', +'vector-action-addsection' => 'Cooish noa', +'vector-action-delete' => 'Scryss', +'vector-action-move' => 'Scughey', +'vector-action-protect' => 'Coadee', +'vector-action-undelete' => 'Jee-scryss', +'vector-action-unprotect' => 'Jee-choadee', +'vector-view-create' => 'Croo', +'vector-view-edit' => 'Reaghey', +'vector-view-history' => 'Jeeagh er shennaghys', +'vector-view-view' => 'Lhaih', +'vector-view-viewsource' => 'Jeeagh er bun', +'actions' => 'Obbraghyn', +'namespaces' => 'Reamyssyn', 'errorpagetitle' => 'Marranys', 'returnto' => 'Goll er ash gys $1.', @@ -243,6 +233,7 @@ $messages = array( 'jumpto' => 'Gow gys:', 'jumptonavigation' => 'stiureydys', 'jumptosearch' => 'ronsaghey', +'pool-errorunknown' => 'Doilleeid gyn enney er', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Mychione {{SITENAME}}', @@ -334,7 +325,7 @@ Ny jean jarrood dty [[Special:Preferences|{{SITENAME}} hosheeaghtyn]] y arraghey 'yourname' => "Dt'ennym ymmydeyr", 'yourpassword' => 'Fockle yn arrey:', 'yourpasswordagain' => "Aascreeu d'ockle arrey:", -'remembermypassword' => "Cooinnee m'ockle arrey", +'remembermypassword' => "Cooinnee m'ockle arrey (rish wheesh as $1 {{PLURAL:$1|laa|laa|laa|laaghyn}})", 'login' => 'Log stiagh', 'nav-login-createaccount' => 'Log stiagh / croo coontys', 'loginprompt' => 'Shegin dhyt cur pooar da minniagyn dy loggal stiagh ayns {{SITENAME}}.', @@ -349,6 +340,7 @@ Ny jean jarrood dty [[Special:Preferences|{{SITENAME}} hosheeaghtyn]] y arraghey 'gotaccount' => "Vel coontys ayd hannah? '''$1'''.", 'gotaccountlink' => 'Log stiagh', 'createaccountmail' => 'er post-L', +'createaccountreason' => 'Fa:', 'loginerror' => 'Marranys log stiagh', 'createaccounterror' => 'Cha dod shin croo coontys: $1', 'noname' => 'Cha honree uss ennym ymmydeyr fondagh', @@ -912,7 +904,6 @@ Ta duillagyn er [[Special:Watchlist|dty rolley arrey]] ayns '''clou trome'''.", # Watchlist 'watchlist' => 'My rolley arrey', 'mywatchlist' => 'My rolley arrey', -'watchlistfor' => "(son '''$1''')", 'watchnologin' => 'Cha nel oo loggit stiagh', 'addedwatch' => 'Currit rish y rolley arrey', 'addedwatchtext' => "Va'n duillag \"[[:\$1]]\" currit lesh dty [[Special:Watchlist|rolley arrey]].
    @@ -1267,9 +1258,9 @@ T'eh lhiggey da oyr y chur 'sy ghiare-choontey.", # Media information 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|duillag|duillagyn}}', -'file-info-size' => '($1 × {{PLURAL:$2|$2 pixel|$2 phixel|$2 phixel|$2 pixelyn}}, mooadys y choadan: $3, sorçh MIME: $4)', +'file-info-size' => '$1 × {{PLURAL:$2|$2 pixel|$2 phixel|$2 phixel|$2 pixelyn}}, mooadys y choadan: $3, sorçh MIME: $4', 'file-nohires' => 'Cha nel jeeskeaylley ny smoo ry-gheddyn.', -'svg-long-desc' => '(coadan SVG, $1 × {{PLURAL:$2|$2 pixel|$2 phixel|$2 phixel|$2 pixelyn}} dy ennymagh, mooadys y choadan: $3)', +'svg-long-desc' => 'coadan SVG, $1 × {{PLURAL:$2|$2 pixel|$2 phixel|$2 phixel|$2 pixelyn}} dy ennymagh, mooadys y choadan: $3', 'show-big-image' => 'Jeeskeaylley ymlane', 'show-big-image-thumb' => 'Mooadys y roie-haishbynys shoh: $1 × {{PLURAL:$2|$2 pixel|$2 phixel|$2 phixel|$2 pixelyn}}', diff --git a/languages/messages/MessagesHa.php b/languages/messages/MessagesHa.php index 93fdc70d..08116137 100644 --- a/languages/messages/MessagesHa.php +++ b/languages/messages/MessagesHa.php @@ -26,8 +26,7 @@ $messages = array( 'tog-editsection' => 'A lamunta gyara sashe ta hanyar zaruruwan [gyarawa]', 'tog-editsectiononrightclick' => 'A lamunta gyara shashe da kilikin dama a kan kanun shashe (ana buƙatar JavaScript)', 'tog-showtoc' => 'A nuna jadawalin kanu (cikin shafuna masu fiye da kanu 3)', -'tog-rememberpassword' => 'A adana bayanan loginkina a wannan kwamfyuta', -'tog-editwidth' => 'A faɗaɗa sararin gyarawa ya cika duka bangon', +'tog-rememberpassword' => 'A adana bayanan loginkina a wannan kwamfyuta (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'A daɗa shafunan da na ƙirƙira a cikin jerina na kan ido', 'tog-watchdefault' => 'A daɗa shafunan da na gyara a cikin jerina na kan ido', 'tog-watchmoves' => 'A daɗa shafunan da na gusar a cikin jerina na kan ido', @@ -142,12 +141,10 @@ $messages = array( 'qbspecialpages' => 'Shafuna na musamman', # Vector skin -'vector-action-delete' => 'Soke', -'vector-action-move' => 'Gusarwa', -'vector-action-protect' => 'A kare', -'vector-namespace-category' => 'Rukuni', -'vector-namespace-main' => 'Shafi', -'vector-view-create' => 'Ƙirƙira', +'vector-action-delete' => 'Soke', +'vector-action-move' => 'Gusarwa', +'vector-action-protect' => 'A kare', +'vector-view-create' => 'Ƙirƙira', 'errorpagetitle' => 'Tangarɗa', 'returnto' => 'Koma $1', @@ -239,13 +236,14 @@ Tana yiyuwa yana da harafi ko haruffa da ba su karɓuwa cikin kanu.", # Login and logout pages 'yourname' => "Sunan ma'aikaci:", 'yourpassword' => 'Kalmar sirri:', -'remembermypassword' => 'Adana bayannan logina a wannan kwafyuta', +'remembermypassword' => 'Adana bayannan logina a wannan kwafyuta (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'Logi', 'nav-login-createaccount' => 'logi / sabon akwanti', 'userlogin' => 'Logi / sabon akwanti', 'logout' => 'Ban kwana', 'userlogout' => 'Ban kwana', 'nologinlink' => 'Buɗa sabon akwanti', +'createaccountreason' => 'Dalili:', 'mailmypassword' => 'Aiken kalmar sirri ta Imel', # Password reset dialog @@ -504,7 +502,6 @@ Ku gwada tare da amfani da \"all:\" don bincikar duka shafunan (har da shafunan # Watchlist 'watchlist' => 'Jerina na bin sawu', 'mywatchlist' => 'Jerina na bin sawu', -'watchlistfor' => "(na '''$1''')", 'addedwatch' => 'An daɗa a cikin jerin bin sawu', 'addedwatchtext' => "An daɗa shafin \"[[:\$1]]\" a cikin [[Special:Watchlist|jerinku na bin sawu]]. A nan ne kuma za a yi rajistan dukkan sauye-sauye ga shafin ko shafinsa na muhawara, kuma sunan shafin zai kasance '''mai gwaɓi''' a cikin [[Special:RecentChanges|jerin sauye-sauyen baya-bayan nan]] don sauƙin gani.", @@ -728,9 +725,9 @@ Tana ba da damar bayyana dalilin soke gyaran.', 'nextdiff' => 'Gyaran gaba →', # Media information -'file-info-size' => '(pikisal $1 × $2, girman fayil: $3, irin MIME: $4)', +'file-info-size' => 'pikisal $1 × $2, girman fayil: $3, irin MIME: $4', 'file-nohires' => 'Babu wata babbar saƙa.', -'svg-long-desc' => '(Fayil kin SVG, saƙar fikisal $1 x $2, girman fayil: $3)', +'svg-long-desc' => 'Fayil kin SVG, saƙar fikisal $1 x $2, girman fayil: $3', 'show-big-image' => 'Cikakkar saƙa', 'show-big-image-thumb' => 'Girman wanna rigya-gani: pikisal $1 × $2', diff --git a/languages/messages/MessagesHak.php b/languages/messages/MessagesHak.php index abbeb321..546c4bbb 100644 --- a/languages/messages/MessagesHak.php +++ b/languages/messages/MessagesHak.php @@ -25,8 +25,7 @@ $messages = array( 'tog-editsection' => 'Yún-chún thûng-ko tiám-kit [phiên-siá] lièn-kiet phiên-cho thon-lo̍k', 'tog-editsectiononrightclick' => 'Yún-chún yu-kit phêu-thì phiên-chho thon-lo̍k (JavaScript)', 'tog-showtoc' => 'Hién-sṳ muk-liu̍k (chṳ̂m-tui yit-chông chhêu-ko sâm-ke phêu-thì ke vùn-chông)', -'tog-rememberpassword' => 'Hâ-yit-chhṳ tên-ngi̍p ki-he̍t me̍t-me̍t', -'tog-editwidth' => 'Phiên-cho làn-vi yí-kîn yû chui-thai khôn-yùng', +'tog-rememberpassword' => 'Hâ-yit-chhṳ tên-ngi̍p ki-he̍t me̍t-me̍t (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Chiông ngô chhóng-chho ke vùn-chông kâ-thiâm to ngô-ke kam-sṳ lie̍t-péu chûng', 'tog-watchdefault' => 'Chiông ngô kiên-kói ke vùn-chông kâ-thiâm to ngô-ke kam-sṳ lie̍t-péu chûng', 'tog-watchmoves' => 'Chiông ngô yì-thung ke vùn-chông kâ-ngi̍p ngô-ke kam-sṳ lie̍t-péu', @@ -152,24 +151,13 @@ $messages = array( 'faqpage' => 'Project:Sòng-kien mun-thì kié-tap', # Vector skin -'vector-action-delete' => 'Chhù-thet', -'vector-action-move' => 'Yì-thung', -'vector-action-protect' => 'Pó-fu', -'vector-action-unprotect' => 'Kié-chhù pó-fu', -'vector-namespace-category' => 'Fûn-lui', -'vector-namespace-help' => 'Pông-chhu sot-mìn', -'vector-namespace-image' => 'Tóng-on', -'vector-namespace-main' => 'Vùn-chông', -'vector-namespace-media' => 'Chhiòn-thí hong-mien', -'vector-namespace-mediawiki' => 'Sin-sit', -'vector-namespace-project' => 'Kie-va̍k hong-mien', -'vector-namespace-special' => 'Thi̍t-sû hong-mien', -'vector-namespace-talk' => 'Thó-lun', -'vector-namespace-template' => 'Mù-pán', -'vector-namespace-user' => 'Yung-fu thiàu-muk', -'vector-view-create' => 'Tshóng-kien', -'vector-view-edit' => 'Phiên-siá', -'vector-view-viewsource' => 'Ngièn-sṳ́-tóng', +'vector-action-delete' => 'Chhù-thet', +'vector-action-move' => 'Yì-thung', +'vector-action-protect' => 'Pó-fu', +'vector-action-unprotect' => 'Kié-chhù pó-fu', +'vector-view-create' => 'Tshóng-kien', +'vector-view-edit' => 'Phiên-siá', +'vector-view-viewsource' => 'Ngièn-sṳ́-tóng', 'errorpagetitle' => 'Chho-ngu', 'returnto' => 'Fán-fì to $1.', @@ -356,7 +344,7 @@ Ngì khó-yî ki-siu̍k yî ngia̍k-miàng fông-sṳt sṳ́-yung {{SITENAME}}, 'yourname' => 'Yung-fu-miàng', 'yourpassword' => 'Me̍t-ma:', 'yourpasswordagain' => 'Chai-chhṳ sû-ngi̍p me̍t-ma:', -'remembermypassword' => 'Hâ-chhṳ tên-ngi̍p ki-he̍t pi-me̍t.', +'remembermypassword' => 'Hâ-chhṳ tên-ngi̍p ki-he̍t pi-me̍t (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Ngì ke mióng', 'externaldberror' => 'Liá-ke khó-nèn he chhut-yì ngoi-phu ngiam-chṳn chṳ̂-liau-khu chho-ngu fe̍t-chá ngì pûn-ngìn kim-chṳ́ kiên-sîn ngì-ke ngoi-phu chong-ho.', 'login' => 'Tên-ngi̍p', @@ -373,6 +361,7 @@ Ngì khó-yî ki-siu̍k yî ngia̍k-miàng fông-sṳt sṳ́-yung {{SITENAME}}, 'gotaccount' => "Yí-kîn yúng-yû chong-ho? '''$1'''.", 'gotaccountlink' => 'Tên-ngi̍p', 'createaccountmail' => 'thûng-ko e-mail', +'createaccountreason' => 'Ngièn-yîn:', 'badretype' => 'Ngì só sû-ngi̍p ke pi-me̍t pin mò siông-thùng.', 'userexists' => 'Ngì sû-ngi̍p ke yung-fu miàng-chhṳ̂n yí-kîn chhùn-chhai, chhiáng nang-ngoi sién yit-ke.', 'loginerror' => 'Tên-liu̍k chho-ngu', @@ -487,7 +476,7 @@ Tshiáng chhai kien-li̍p/piên-sip liá-ke vùn-tsông tshièn siên kiám-ts 'userjsyoucanpreview' => "'''Thì-sṳ:''' Chhai pó-chhùn chhièn chhiáng yung 'hién-sṳ yi-ko' on-néu lòi chhet-chhṳ ngì sîn-ke JS.", 'usercsspreview' => "'''Chu-yi ngì chak-he chhai yi-liau ngì ke-ngìn CSS, hàn-mò tú-chhùn!'''", 'userjspreview' => "'''Chu-yi ngì chak-he chhai chhet-chhṳ / yi-liau ngì ke-ngìn JavaScript, hàn-mò tú-chhùn!'''", -'userinvalidcssjstitle' => "'''Kín-ko:''' Put chhùn-chhai mien-pán \"\$1\". chu-yi chhṳ-thin ke .css lâu .js hong yeu sṳ́-yung séu-siá phêu-thì, yì-yi, {{ns:user}}:Foo/monobook.css put-thùng yî {{ns:user}}:Foo/Monobook.css.", +'userinvalidcssjstitle' => "'''Kín-ko:''' Put chhùn-chhai mien-pán \"\$1\". chu-yi chhṳ-thin ke .css lâu .js hong yeu sṳ́-yung séu-siá phêu-thì, yì-yi, {{ns:user}}:Foo/vector.css put-thùng yî {{ns:user}}:Foo/Vector.css.", 'updated' => '(Yí-kîn kiên-sîn)', 'note' => "'''Chu-yi:'''", 'previewnote' => "'''Chhiáng ki-he̍t liá-ke chak-he yi-liau, nui-yùng hàn-mò pó-chhùn!'''", @@ -515,7 +504,6 @@ Ngì yin-tông chiông ngì só-cho ke siù-chho kâ-ngi̍p hien-yû ke nui-yùn Kó-yèn ngì chhin-mò hî-mong ngì-ke ngì-ke vùn-sṳ pûn-ngìn ngim-yi chhùng-siû lâu chai san-pu, chhiáng mò-yeu thì-kâu.
    Ngì thùng-sṳ̀ ya-yeu hiong Wikimedia pó-chṳn ngì só thì-kâu ke nui-yùng he chhṳ-kí só chok,fe̍t-chá lòi-chhṳ yit-ke mò-su pán-khièn pó-fu fe̍t-he he siông-thùng chhṳ-yù ke lòi-ngièn (Chhâm-siòng $1 ke se-chiet). ''' Mò-yeu chhai hàn-mò su-khièn ke chhìn-khóng-hâ fat-péu!'''", -'longpagewarning' => "'''Kín-ko: Pún-chông chhòng-thu tha̍t-tó $1 kB;mêu-chúng hi-khí chiông-voi mò-fap phiên-chhut chhòng-ko 32 kB ke vùn-chông. Chhiáng kháu-li chiông pún-chông chhiet kot-sṳ̀n kí-ke séu thon-lo̍k.'''", 'longpageerror' => "'''Chho-ngu: Ngì só thì-kâu ke vùn-sṳ chhòng-thu yû $1KB, liá thai-yî $2KB ke chui-thai chhṳ̍t, ke-vùn-chông put-nèn pûn tú-chhùn.'''", 'readonlywarning' => "'''Kín-ko: chṳ̂-liau-khu pûn-ngìn fûng-só yîn-vi chin-hàng vì-fu, só-yî muk-chhièn mò-fap pó-chhùn ngì-ke siù-chho. Ngì fe̍t-hí hî-mong chhai-siên chiông pún-thon vùn-sṳ fu̍k-chṳ pin pó-chhùn to vùn-sṳ vùn-khien, yèn-heu tén-yit-ha chai siù-chho.'''", 'protectedpagewarning' => "'''Kín-ko: Pún-chông yí-kîn pûn pó-fu, chṳ́-yû yúng-yû Kón-lî-yèn hí-khó-khièn ke yung-fu chhòi-nèn siù-chho.'''", @@ -850,7 +838,6 @@ Hó-chhiong yit-puk thù-hìn ke suk-thù pán-pún ''(thù-hìn)''. Kó-yèn ngì yû liá-ke thù-hìn ke vàn-cháng thai-séu.", 'fileexists-forbidden' => 'Yí-kîn chhùn-chhai ke siông-thùng miàng-chhṳ̂n ke tóng-on; chhiáng fì-chón pin yung yit-ke sîn-ke miàng-chhṳ̂n lòi song-chhòn chhṳ́ tóng-on.[[File:$1|thumb|center|$1]]', 'fileexists-shared-forbidden' => 'Chhai khiung-hióng tóng-on-khu chûng yí-kîn chhùn-chhai chhṳ́ miàng-chhṳ̂n ke tóng-on; Chhiáng fì-chón pin yung yit-ke sîn-ke miàng-chhṳ̂n lòi song-chhòn chhṳ́ tóng-on. [[File:$1|thumb|center|$1]]', -'successfulupload' => 'Sông-chhòn sṳ̀n-kûng', 'uploadwarning' => 'Sông-chai kín-ko', 'savefile' => 'Pó-chhùn vùn-khien', 'uploadedimage' => 'yí-kîn song-chhòn "[[$1]]"', @@ -862,6 +849,7 @@ Kó-yèn ngì yû liá-ke thù-hìn ke vàn-cháng thai-séu.", 'destfilename' => 'Muk-phêu tóng-on miàng', 'watchthisupload' => 'Kam-sṳ pún tóng-on', 'filewasdeleted' => 'Chṳ̂-chhièn yí-kîn yû yit-ke thùng-miàng tóng-on pûn song-chhòn heu yu-pûn chhù-thet. Chhai song-chhòn chhṳ́ tóng-on chṳ̂-chhièn sî-yeu kiám-chhà $1.', +'upload-success-subj' => 'Sông-chhòn sṳ̀n-kûng', 'upload-proto-error' => 'Hia̍p-ngi chho-ngu', 'upload-proto-error-text' => 'Yén-chhàng song-chhòn yêu-khiù URL yung http:// fe̍t-chá ftp:// khôi-thèu.', @@ -1080,7 +1068,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'Kam-sṳ lie̍t-péu', 'mywatchlist' => 'Ngài-ke kam-sṳ lie̍t-péu', -'watchlistfor' => "('''$1''' ke kam-sṳ lie̍t-péu)", 'nowatchlist' => 'Ngì ke kam-sṳ lie̍t-péu he khûng-hî.', 'watchlistanontext' => 'Chhiáng $1 yî kiám-sṳ fe̍t-chá phiên-chho ngì-ke kam-sṳ lie̍t-péu.', 'watchnologin' => 'Hàn-mò tên-ngi̍p', @@ -1152,6 +1139,8 @@ Also see [[Special:WantedCategories|wanted categories]].', 'alreadyrolled' => 'Mò-fap fî-fu̍k yù [[User:$2|$2]] ([[User talk:$2|thó-lun]]) chin-hàng ke [[$1]] ke chui-heu phiên-si̍p; khì-thâ ngìn yí-kîn phiên-siá fe̍t-he fî-fu̍k liáu ke-hong. Chui-heu phiên-si̍p-chá: [[User:$3|$3]] ([[User talk:$3|Thó-lun]])。', 'editcomment' => "Phiên-siá sot-mìn he: \"''\$1''\"。", 'revertpage' => 'Fî-fu̍k yù [[Special:Contributions/$2|$2]] ([[User talk:$2|tui-fa]]) ke phiên-cho; kiên-kói fì-fu̍k [[User:$1|$1]] ke chui-heu yit-ke pán-pún', + +# Edit tokens 'sessionfailure' => 'Ngì-ke tên-ngi̍p sṳ-fû yû mun-thì, vi-liáu fòng-chṳ́ sêu-sit pûn làn-chiet, pún-chhṳ chhâu-chok yí-kîn chhí-sêu, chhiáng-on "song-yit-chông" chhùng-sîn chai-ngi̍p.', # Protect @@ -1302,7 +1291,6 @@ Chhiáng chhâm-kháu [[Special:Log/delete|chhù-hi ngit-ki]] lòi chhà-chhut c 'ipb-edit-dropdown' => 'Phiên-siá chhà-fûng ngièn-yîn', 'ipb-unblock-addr' => 'Kié-chhù fûng-kim $1', 'ipb-unblock' => 'Kié-chhù kim-fûng yung-fu miàng fe̍t-chá IP thi-tiám', -'ipb-blocklist-addr' => 'Chhà-chhut $1-ke fûng-kim ki-liu̍k', 'ipb-blocklist' => 'Kiám-sṳ fûng-kim lie̍t-péu', 'unblockip' => 'Kié-chhù kim-fûng IP thi-tiám', 'unblockiptext' => 'Yung ha-mien ke péu-tân lòi fî-fu̍k siên-chhièn pûn kim-fûng ke IP thi-tiám ke siá-sû-khièn.', @@ -1615,10 +1603,10 @@ Please visit [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] 'mediawarning' => "'''Kín-ko''': Ke-tóng-on khó-nèn pâu-hàm ok-yi am-ho, chṳp-hàng kì khó-nèn tui ngì-ke ne-thúng tai-lòi ngùi-hiám.", 'imagemaxsize' => 'Chhai thù-chhiong mèu-siá chông tui thù-chhiong thai-séu han-chṳ he:', 'thumbsize' => 'Lio̍k-thù thai-séu:', -'file-info' => '(tóng-on thai-séu: $1, MIME lui-hìn: $2)', -'file-info-size' => '($1 × $2 chhiong-su, tóng-on thai-séu:$3 ,MIME lui-hìn:$4)', +'file-info' => 'tóng-on thai-séu: $1, MIME lui-hìn: $2', +'file-info-size' => '$1 × $2 chhiong-su, tóng-on thai-séu:$3 ,MIME lui-hìn:$4', 'file-nohires' => 'Mò kien-kô kié-chhiong-thu khó-yî thì-kiûng.', -'svg-long-desc' => '(SVG tóng-on, péu-mien thai-séu: $1 × $2 siong-su, tóng-on thai-séu: $3)', +'svg-long-desc' => 'SVG tóng-on, péu-mien thai-séu: $1 × $2 siong-su, tóng-on thai-séu: $3', 'show-big-image' => 'Vàn-cháng ke kié-chhiong-thu', 'show-big-image-thumb' => 'Liá-ke puk-suk-thù ke kié-chhiong-thu he: $1 × $2 chhiong-su', diff --git a/languages/messages/MessagesHaw.php b/languages/messages/MessagesHaw.php index 94f60461..e79281b9 100644 --- a/languages/messages/MessagesHaw.php +++ b/languages/messages/MessagesHaw.php @@ -91,8 +91,7 @@ $messages = array( 'tog-hideminor' => 'E hūnā i nā ho‘opololei iki ma nā loli hou', 'tog-editondblclick' => 'Ho‘opololei i nā ‘ao‘ao ma ke kōmi pālua (JavaScript)', 'tog-showtoc' => 'Hō‘ike i ka papa kuhikuhi', -'tog-rememberpassword' => 'Hoʻomanaʻo iaʻu', -'tog-editwidth' => 'Hoʻolaulā ka pahu loli i ke ākea holoʻokoʻa o ka papakaumaka', +'tog-rememberpassword' => 'Hoʻomanaʻo iaʻu ma kēia lolo uila (no ka palena nui o $1 {{PLURAL:$1|lā|mau lā}})', 'tog-watchcreations' => 'Ho‘ohui i nā ‘ao‘ao i hana ai au i ka‘u papa nānā pono', 'tog-watchdefault' => 'Ho‘ohui i nā ‘ao‘ao i ho‘opololei ai au i ka‘u papa nānā pono', 'tog-watchmoves' => 'Ho‘ohui i nā ‘ao‘ao i ne‘e ai au i ka‘u papa nānā pono', @@ -332,7 +331,7 @@ Mai poina e hoʻololi i [[Special:Preferences|kāu makemake ma {{SITENAME}}]].', 'yourname' => "Inoa mea ho'ohana", 'yourpassword' => 'ʻŌlelo hūnā:', 'yourpasswordagain' => "Hua'ōlelo huna hou", -'remembermypassword' => 'Hoʻomanaʻo iaʻu', +'remembermypassword' => 'Hoʻomanaʻo iaʻu ma kēia lolo uila (no ka palena nui o $1 {{PLURAL:$1|lā|mau lā}})', 'login' => 'ʻEʻe', 'nav-login-createaccount' => 'ʻEʻe / E kāinoa', 'loginprompt' => 'Pono ʻoe e hoʻā i nā makana (cookies) no ka ʻeʻe ʻana i {{SITENAME}}.', @@ -347,6 +346,7 @@ Mai poina e hoʻololi i [[Special:Preferences|kāu makemake ma {{SITENAME}}]].', 'gotaccount' => "He moʻokāki kāu? '''$1'''.", 'gotaccountlink' => 'ʻEʻe', 'createaccountmail' => 'no ka leka uila', +'createaccountreason' => 'Kumu:', 'badretype' => 'ʻAʻole like nā ʻōlelo hūnā āu i hoʻokomo ai', 'userexists' => 'Lilo ka inoa mea ho‘ohana. E koho i kekahi inoa, ke ‘olu‘olu.', @@ -662,7 +662,6 @@ E ʻoluʻolu, e hōʻoia i ka hoʻokūkū ʻana i lalo, a laila, e mālama i nā # Watchlist 'watchlist' => 'Kaʻu papa nānā pono', 'mywatchlist' => 'Ka‘u papa nānā pono', -'watchlistfor' => "(no '''$1''')", 'removedwatch' => 'Wehe ʻia mai kāu papa nānā pono', 'removedwatchtext' => 'Wehe ʻia ʻo "[[:$1]]" mai [[Special:Watchlist|kāu papa nānā pono]].', 'watch' => 'E kia‘i', @@ -832,6 +831,7 @@ Hiki iā ʻoe ke ʻikena i kāna molekumu.', 'nextdiff' => 'Hoʻololi hou aʻe →', # Media information +'file-info-size' => '$1 x $2 kiʻiʻuku, nui faila: $3, ʻano MIME: $4', 'show-big-image' => 'Miomio piha', # Special:NewFiles diff --git a/languages/messages/MessagesHe.php b/languages/messages/MessagesHe.php index 98236680..c71e3095 100644 --- a/languages/messages/MessagesHe.php +++ b/languages/messages/MessagesHe.php @@ -9,11 +9,13 @@ * * @author Agbad * @author Amire80 + * @author Drorsnir * @author Ijon * @author Rotem Dan (July 2003) * @author Rotem Liss (March 2006 on) * @author Rotemliss * @author YaronSh + * @author ערן * @author שומבלע */ @@ -152,6 +154,7 @@ $magicWords = array( 'nse' => array( '0', 'מרחב שם מקודד:', 'NSE:' ), 'localurl' => array( '0', 'כתובת יחסית:', 'LOCALURL:' ), 'localurle' => array( '0', 'כתובת יחסית מקודד:', 'LOCALURLE:' ), + 'articlepath' => array( '0', 'נתיב הדפים', 'ARTICLEPATH' ), 'server' => array( '0', 'כתובת השרת', 'שרת', 'SERVER' ), 'servername' => array( '0', 'שם השרת', 'SERVERNAME' ), 'scriptpath' => array( '0', 'נתיב הקבצים', 'SCRIPTPATH' ), @@ -168,6 +171,7 @@ $magicWords = array( 'revisionday' => array( '1', 'יום גרסה', 'REVISIONDAY' ), 'revisionday2' => array( '1', 'יום גרסה 2', 'REVISIONDAY2' ), 'revisionmonth' => array( '1', 'חודש גרסה', 'REVISIONMONTH' ), + 'revisionmonth1' => array( '1', 'חודש גרסה 1', 'REVISIONMONTH1' ), 'revisionyear' => array( '1', 'שנת גרסה', 'REVISIONYEAR' ), 'revisiontimestamp' => array( '1', 'זמן גרסה', 'REVISIONTIMESTAMP' ), 'revisionuser' => array( '1', 'כותב גרסה', 'REVISIONUSER' ), @@ -209,6 +213,9 @@ $magicWords = array( 'staticredirect' => array( '1', '__הפניה_קבועה__', '__STATICREDIRECT__' ), 'protectionlevel' => array( '1', 'רמת הגנה', 'PROTECTIONLEVEL' ), 'formatdate' => array( '0', 'עיצוב תאריך', 'formatdate', 'dateformat' ), + 'url_path' => array( '0', 'נתיב', 'PATH' ), + 'url_wiki' => array( '0', 'ויקי', 'WIKI' ), + 'url_query' => array( '0', 'שאילתה', 'QUERY' ), ); $specialPageAliases = array( @@ -222,6 +229,7 @@ $specialPageAliases = array( 'Watchlist' => array( 'רשימת_המעקב', 'רשימת_מעקב', 'רשימת_המעקב_שלי' ), 'Recentchanges' => array( 'שינויים_אחרונים' ), 'Upload' => array( 'העלאה', 'העלאת_קובץ_לשרת' ), + 'UploadStash' => array( 'מאגר_העלאות' ), 'Listfiles' => array( 'רשימת_קבצים', 'רשימת_תמונות', 'קבצים', 'תמונות' ), 'Newimages' => array( 'קבצים_חדשים', 'תמונות_חדשות', 'גלריית_קבצים_חדשים', 'גלריית_תמונות_חדשות' ), 'Listusers' => array( 'רשימת_משתמשים', 'משתמשים' ), @@ -256,6 +264,7 @@ $specialPageAliases = array( 'Allpages' => array( 'כל_הדפים' ), 'Prefixindex' => array( 'דפים_המתחילים_ב' ), 'Ipblocklist' => array( 'רשימת_חסומים', 'רשימת_משתמשים_חסומים', 'משתמשים_חסומים' ), + 'Unblock' => array( 'שחרור_חסימה' ), 'Specialpages' => array( 'דפים_מיוחדים' ), 'Contributions' => array( 'תרומות', 'תרומות_המשתמש' ), 'Emailuser' => array( 'שליחת_דואר_למשתמש' ), @@ -300,6 +309,9 @@ $specialPageAliases = array( 'DeletedContributions' => array( 'תרומות_מחוקות' ), 'Tags' => array( 'תגיות' ), 'Activeusers' => array( 'משתמשים_פעילים' ), + 'ComparePages' => array( 'השוואת_דפים' ), + 'Badtitle' => array( 'כותרת_שגויה' ), + 'DisableAccount' => array( 'ביטול_חשבון' ), ); $namespaceNames = array( @@ -342,8 +354,7 @@ $messages = array( 'tog-editsection' => 'עריכת פסקאות באמצעות קישורים מהצורה [עריכה]', 'tog-editsectiononrightclick' => 'עריכת פסקאות על ידי לחיצה ימנית על כותרות הפסקאות (דרוש JavaScript)', 'tog-showtoc' => 'הצגת תוכן עניינים (עבור דפים עם יותר מ־3 כותרות)', -'tog-rememberpassword' => 'זכירת הכניסה שלי במחשב זה', -'tog-editwidth' => 'הרחבת תיבת העריכה כך שתמלא את החלון כולו', +'tog-rememberpassword' => 'זכירת הכניסה שלי בדפדפן זה (למשך עד {{PLURAL:$1|יום אחד|$1 ימים|יומיים}})', 'tog-watchcreations' => 'מעקב אחרי דפים שיצרתי', 'tog-watchdefault' => 'מעקב אחרי דפים שערכתי', 'tog-watchmoves' => 'מעקב אחרי דפים שהעברתי', @@ -358,7 +369,7 @@ $messages = array( 'tog-enotifrevealaddr' => 'חשיפת כתובת הדוא"ל שלך בהודעות דואר', 'tog-shownumberswatching' => 'הצגת מספר המשתמשים העוקבים אחרי הדף', 'tog-oldsig' => 'תצוגה מקדימה של החתימה הקיימת:', -'tog-fancysig' => 'לפרש את החתימה כקוד ויקי (ללא קישור אוטומטי)', +'tog-fancysig' => 'פירוש החתימה כקוד ויקי (ללא קישור אוטומטי)', 'tog-externaleditor' => 'שימוש בעורך חיצוני כברירת מחדל (למשתמשים מומחים בלבד, דורש הגדרות מיוחדות במחשב. [http://www.mediawiki.org/wiki/Manual:External_editors למידע נוסף.])', 'tog-externaldiff' => 'שימוש בתוכנת השוואת הגרסאות החיצונית כברירת מחדל (למשתמשים מומחים בלבד, דורש הגדרות מיוחדות במחשב. [http://www.mediawiki.org/wiki/Manual:External_editors למידע נוסף.])', 'tog-showjumplinks' => 'הצגת קישורי נגישות מסוג "קפוץ אל"', @@ -489,31 +500,21 @@ $messages = array( 'faqpage' => 'Project:שאלות ותשובות', # Vector skin -'vector-action-addsection' => 'הוספת נושא', -'vector-action-delete' => 'מחיקה', -'vector-action-move' => 'העברה', -'vector-action-protect' => 'הגנה', -'vector-action-undelete' => 'ביטול מחיקה', -'vector-action-unprotect' => 'הסרת הגנה', -'vector-namespace-category' => 'קטגוריה', -'vector-namespace-help' => 'דף עזרה', -'vector-namespace-image' => 'קובץ', -'vector-namespace-main' => 'דף', -'vector-namespace-media' => 'דף מדיה', -'vector-namespace-mediawiki' => 'הודעה', -'vector-namespace-project' => 'דף מיזם', -'vector-namespace-special' => 'דף מיוחד', -'vector-namespace-talk' => 'שיחה', -'vector-namespace-template' => 'תבנית', -'vector-namespace-user' => 'דף משתמש', -'vector-view-create' => 'יצירה', -'vector-view-edit' => 'עריכה', -'vector-view-history' => 'הצגת היסטוריה', -'vector-view-view' => 'קריאה', -'vector-view-viewsource' => 'הצגת מקור', -'actions' => 'פעולות', -'namespaces' => 'מרחבי שם', -'variants' => 'גרסאות שפה', +'vector-action-addsection' => 'הוספת נושא', +'vector-action-delete' => 'מחיקה', +'vector-action-move' => 'העברה', +'vector-action-protect' => 'הגנה', +'vector-action-undelete' => 'ביטול מחיקה', +'vector-action-unprotect' => 'הסרת הגנה', +'vector-simplesearch-preference' => 'הפעלת הצעות החיפוש המשופרות (בעיצוב וקטור בלבד)', +'vector-view-create' => 'יצירה', +'vector-view-edit' => 'עריכה', +'vector-view-history' => 'הצגת היסטוריה', +'vector-view-view' => 'קריאה', +'vector-view-viewsource' => 'הצגת מקור', +'actions' => 'פעולות', +'namespaces' => 'מרחבי שם', +'variants' => 'גרסאות שפה', 'errorpagetitle' => 'שגיאה', 'returnto' => 'חזרה לדף $1.', @@ -574,6 +575,9 @@ $messages = array( אנא המתינו זמן מה לפני שתנסו שוב לצפות בדף. $1', +'pool-timeout' => 'זמן ההמתנה לסיום הנעילה עבר', +'pool-queuefull' => 'התור מלא', +'pool-errorunknown' => 'שגיאה בלתי ידועה', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'אודות {{SITENAME}}', @@ -734,7 +738,8 @@ $2', 'yourname' => 'שם משתמש:', 'yourpassword' => 'סיסמה:', 'yourpasswordagain' => 'הקש סיסמה שנית:', -'remembermypassword' => 'זכירת הכניסה במחשב זה', +'remembermypassword' => 'זכירת הכניסה שלי בדפדפן הזה (ל{{PLURAL:$1|יום אחד|־$1 ימים|יומיים}} לכל היותר)', +'securelogin-stick-https' => 'המשך שימוש ב־HTTPS אחרי הכניסה', 'yourdomainname' => 'התחום שלך:', 'externaldberror' => 'הייתה שגיאה בבסיס הנתונים של ההזדהות, או שאינכם רשאים לעדכן את חשבונכם החיצוני.', 'login' => 'כניסה לחשבון', @@ -751,6 +756,7 @@ $2', 'gotaccount' => 'כבר נרשמתם? $1.', 'gotaccountlink' => 'כניסה לחשבון', 'createaccountmail' => 'באמצעות דוא"ל', +'createaccountreason' => 'סיבה:', 'badretype' => 'הסיסמאות שהזנתם אינן מתאימות.', 'userexists' => 'שם המשתמש שבחרתם נמצא בשימוש. אנא בחרו שם אחר.', @@ -775,6 +781,7 @@ $2', 'wrongpasswordempty' => 'הסיסמה שהקלדתם ריקה. אנא נסו שוב.', 'passwordtooshort' => 'סיסמאות חייבות להיות באורך {{PLURAL:$1|תו אחד|$1 תווים}} לפחות.', 'password-name-match' => 'סיסמתכם חייבת להיות שונה משם המשתמש שלכם.', +'password-login-forbidden' => 'השימוש בשם המשתמש והסיסמה האלה נאסר.', 'mailmypassword' => 'שלחו לי סיסמה חדשה', 'passwordremindertitle' => 'סיסמה זמנית חדשה מ{{grammar:תחילית|{{SITENAME}}}}', 'passwordremindertext' => 'מישהו (ככל הנראה אתם, מכתובת ה־IP מספר $1) ביקש סיסמה @@ -789,7 +796,8 @@ $2', 'passwordsent' => 'סיסמה חדשה נשלחה לכתובת הדואר האלקטרוני הרשומה עבור "$1". אנא היכנסו חזרה לאתר אחרי שתקבלו אותה.', 'blocked-mailpassword' => 'כתובת ה־IP שלכם חסומה מעריכה, ולפיכך אינכם מורשים להשתמש באפשרות שחזור הסיסמה כדי למנוע ניצול לרעה של התכונה.', -'eauthentsent' => 'דוא"ל אימות נשלח לכתובת הדוא"ל שקבעת. לפני שדברי דוא"ל אחרים נשלחים לחשבון הזה, תצטרך לפעול לפי ההוראות בדוא"ל כדי לוודא שהדוא"ל הוא אכן שלך.', +'eauthentsent' => 'דוא"ל אימות נשלח לכתובת הדוא"ל שקבעת. +לפני שדברי דוא"ל אחרים יישלחו לחשבון הזה, יהיה עליך לפעול לפי ההוראות בדוא"ל, כדי לאשר שהחשבון אכן שייך לך.', 'throttled-mailpassword' => 'כבר נעשה שימוש באפשרות שחזור הסיסמה ב{{PLURAL:$1|שעה האחרונה|־$1 השעות האחרונות}}. כדי למנוע ניצול לרעה, רק דואר אחד כזה יכול להישלח כל {{PLURAL:$1|שעה אחת|$1 שעות}}.', 'mailerror' => 'שגיאה בשליחת דואר: $1', 'acct_creation_throttle_hit' => 'מבקרים באתר זה דרך כתובת ה־IP שלכם כבר יצרו {{PLURAL:$1|חשבון אחד|$1 חשבונות}} ביום האחרון. זהו המקסימום המותר בתקופה זו. @@ -812,6 +820,9 @@ $2', 'loginlanguagelabel' => 'שפה: $1', 'suspicious-userlogout' => 'בקשתכם לצאת מהחשבון נדחתה כיוון שנראה שהיא נשלחה על ידי דפדפן שבור או שרת פרוקסי עם זיכרון מטמון.', +# E-mail sending +'php-mail-error-unknown' => 'שגיאה לא ידועה בפונקציה mail() של PHP', + # Password reset dialog 'resetpass' => 'שינוי סיסמה', 'resetpass_announce' => 'נכנסתם באמצעות סיסמה זמנית שנשלחה אליכם בדוא"ל. @@ -862,10 +873,12 @@ $2', 'showlivepreview' => 'תצוגה מקדימה מהירה', 'showdiff' => 'הצגת שינויים', 'anoneditwarning' => "'''אזהרה:''' אינכם מחוברים לחשבון. כתובת ה־IP שלכם תירשם בהיסטוריית העריכות של הדף.", +'anonpreviewwarning' => "''אינכם מחוברים לחשבון. שמירה תגרום לכתובת ה־IP שלכם להירשם בהיסטוריית העריכות של הדף.''", 'missingsummary' => "'''תזכורת:''' לא הזנתם תקציר עריכה. אם תלחצו שוב על הכפתור \"{{int:savearticle}}\", עריכתכם תישמר בלעדיו.", 'missingcommenttext' => 'אנא הקלידו את ההודעה למטה.', -'missingcommentheader' => "'''תזכורת:''' לא הזנתם נושא/כותרת להודעה זו. אם תלחצו שוב על כפתור השמירה, עריכתכם תישמר בלעדיו.", +'missingcommentheader' => "'''תזכורת:''' לא הזנתם נושא/כותרת להודעה זו. +אם תלחצו שוב על הכפתור \"{{int:savearticle}}\", עריכתכם תישמר בלעדיו.", 'summary-preview' => 'תצוגה מקדימה של התקציר:', 'subject-preview' => 'תצוגה מקדימה של הנושא/הכותרת:', 'blockedtitle' => 'המשתמש חסום', @@ -940,7 +953,12 @@ $2', '''הוא טרם נשמר!'''", 'userjspreview' => "'''זכרו שזו רק בדיקה/תצוגה מקדימה של סקריפט ה־JavaScript שלכם.''' '''הוא טרם נשמר!'''", -'userinvalidcssjstitle' => "'''אזהרה''': העיצוב \"\$1\" אינו קיים. זכרו שדפי CSS ו־JavaScript מותאמים אישית משתמשים בכותרת עם אותיות קטנות – למשל, {{ns:user}}:דוגמה/monobook.css ולא {{ns:user}}:דוגמה/Monobook.css. כמו כן, יש להקפיד על שימוש ב־/ ולא ב־\\.", +'sitecsspreview' => "'''זכרו שזו רק תצוגה מקדימה של גליון ה־CSS הזה.''' +'''הוא טרם נשמר!'''", +'sitejspreview' => "'''זכרו שזו רק תצוגה מקדימה של קוד ה־JavaScript הזה.''' +'''הוא טרם נשמר!'''", +'userinvalidcssjstitle' => "'''אזהרה''': העיצוב \"\$1\" אינו קיים. +דפי .css ו־.js מותאמים אישית משתמשים בכותרת עם אותיות קטנות – למשל, {{ns:user}}:דוגמה/vector.css ולא {{ns:user}}:דוגמה/Vector.css.", 'updated' => '(מעודכן)', 'note' => "'''הערה:'''", 'previewnote' => "'''זכרו שזו רק תצוגה מקדימה.''' @@ -976,9 +994,6 @@ $2', 'yourdiff' => 'הבדלים', 'copyrightwarning' => "'''שימו לב:''' תרומתכם ל{{grammar:תחילית|{{SITENAME}}}} תפורסם תחת תנאי הרישיון $2 (ראו $1 לפרטים נוספים). אם אינכם רוצים שעבודתכם תהיה זמינה לעריכה על ידי אחרים, שתופץ לעיני כל, ושאחרים יוכלו להעתיק ממנה בציון המקור – אל תפרסמו אותה פה. כמו־כן, אתם מבטיחים לנו כי כתבתם את הטקסט הזה בעצמכם, או העתקתם אותו ממקור שאינו מוגן על ידי זכויות יוצרים. '''אל תעשו שימוש בחומר המוגן בזכויות יוצרים ללא רשות!'''", 'copyrightwarning2' => "'''שימו לב:''' תורמים אחרים עשויים לערוך או אף להסיר את תרומתכם ל{{grammar:תחילית|{{SITENAME}}}}. אם אינכם רוצים שעבודתכם תהיה זמינה לעריכה על ידי אחרים, אל תפרסמו אותה פה. כמו־כן, אתם מבטיחים לנו כי כתבתם את הטקסט הזה בעצמכם, או העתקתם אותו ממקור שאינו מוגן על ידי זכויות יוצרים (ראו $1 לפרטים נוספים). '''אל תעשו שימוש בחומר המוגן בזכויות יוצרים ללא רשות!'''", -'longpagewarning' => "'''אזהרה:''' גודל דף זה הוא $1 קילובייטים. -בדפדפנים מסוימים יהיו בעיות בעריכת דף הגדול מ־32 קילובייטים. -אנא שיקלו לחלק דף זה לדפים קטנים יותר.", 'longpageerror' => "'''שגיאה: הטקסט ששלחתם הוא באורך $1 קילובייטים, אך אסור לו להיות ארוך יותר מהמקסימום של $2 קילובייטים.''' לא ניתן לשומרו.", 'readonlywarning' => "'''אזהרה: בסיס הנתונים ננעל לצורך תחזוקה. בזמן זה אי אפשר לשמור את הטקסט הערוך.''' @@ -1009,7 +1024,7 @@ $2', 'permissionserrorstext-withaction' => 'אינכם מורשים $2, {{PLURAL:$1|מהסיבה הבאה|מהסיבות הבאות}}:', 'recreate-moveddeleted-warn' => "'''אזהרה: הנכם יוצרים דף חדש שנמחק בעבר.''' -אנא שקלו אם יהיה זה נכון להמשיך לערוך את הדף. +כדאי לשקול אם יהיה זה נכון להמשיך לערוך את הדף. יומני המחיקות וההעברות של הדף מוצגים להלן:", 'moveddeleted-notice' => 'דף זה נמחק. יומני המחיקות וההעברות של הדף מוצגים להלן.', @@ -1154,6 +1169,8 @@ $1", 'logdelete-failure' => "'''לא ניתן היה לבצע את הסתרת פעולת היומן:''' $1", 'revdel-restore' => 'שינוי ההצגה', +'revdel-restore-deleted' => 'גרסאות מחוקות', +'revdel-restore-visible' => 'גרסאות גלויות', 'pagehist' => 'היסטוריית הדף', 'deletedhist' => 'הגרסאות המחוקות', 'revdelete-content' => 'התוכן', @@ -1223,11 +1240,13 @@ $1", # Diffs 'history-title' => 'היסטוריית הגרסאות של $1', 'difference' => '(הבדלים בין גרסאות)', +'difference-multipage' => '(הבדלים בין דפים)', 'lineno' => 'שורה $1:', 'compareselectedversions' => 'השוואת הגרסאות שנבחרו', 'showhideselectedversions' => 'הצגת/הסתרת הגרסאות שנבחרו', 'editundo' => 'ביטול', -'diff-multi' => '({{PLURAL:$1|גרסת ביניים אחת אינה מוצגת|$1 גרסאות ביניים אינן מוצגות}})', +'diff-multi' => '({{PLURAL:$1|גרסת ביניים אחת|$1 גרסאות ביניים}} של {{PLURAL:$2|משתמש אחד|$2 משתמשים}} {{PLURAL:$1|אינה מוצגת|אינן מוצגות}})', +'diff-multi-manyusers' => '({{PLURAL:$1|גרסת ביניים אחת|$1 גרסאות ביניים}} של יותר מ{{PLURAL:$2|משתמש אחד|־$2 משתמשים}} אינן מוצגות)', # Search results 'searchresults' => 'תוצאות החיפוש', @@ -1262,6 +1281,7 @@ $1", 'searchprofile-everything-tooltip' => 'חיפוש בכל התוכן (למעט דפי השיחה)', 'searchprofile-advanced-tooltip' => 'חיפוש במרחבי שם מותאמים אישית', 'search-result-size' => '$1 ({{PLURAL:$2|מילה אחת|$2 מילים}})', +'search-result-category-size' => '{{PLURAL:$1|חבר אחד|$1 חברים}} ({{PLURAL:$2|קטגוריית משנה אחת|$2 קטגוריות משנה}}, {{PLURAL:$3|קובץ אחד|$3 קבצים}})', 'search-result-score' => 'רלוונטיות: $1%', 'search-redirect' => '(הפניה $1)', 'search-section' => '(פסקה $1)', @@ -1336,6 +1356,7 @@ $1", 'contextlines' => 'שורות לכל תוצאה:', 'contextchars' => 'מספר תווי קונטקסט בשורה:', 'stub-threshold' => 'סף לעיצוב קישורים לקצרמרים (בתים):', +'stub-threshold-disabled' => 'מבוטל', 'recentchangesdays' => 'מספר הימים שיוצגו בדף השינויים האחרונים:', 'recentchangesdays-max' => 'לכל היותר {{PLURAL:$1|יום אחד|$1 ימים}}', 'recentchangescount' => 'מספר העריכות שיוצגו כברירת מחדל:', @@ -1369,6 +1390,7 @@ $1", 'prefs-files' => 'קבצים', 'prefs-custom-css' => 'קובץ CSS מותאם אישית', 'prefs-custom-js' => 'קובץ JavaScript מותאם אישית', +'prefs-common-css-js' => 'קובצי CSS/JavaScript משותפים לכל העיצובים:', 'prefs-reset-intro' => 'באפשרותכם להשתמש בדף זה כדי להחזיר את ההעדפות שלכם להגדרות ברירת המחדל של האתר. לא ניתן לבטל פעולה זו.', 'prefs-emailconfirm-label' => 'אימות כתובת דוא"ל:', @@ -1408,9 +1430,15 @@ $1", 'prefs-advancedrendering' => 'אפשרויות מתקדמות', 'prefs-advancedsearchoptions' => 'אפשרויות מתקדמות', 'prefs-advancedwatchlist' => 'אפשרויות מתקדמות', -'prefs-display' => 'אפשרויות תצוגה', +'prefs-displayrc' => 'אפשרויות תצוגה', +'prefs-displaysearchoptions' => 'אפשרויות תצוגה', +'prefs-displaywatchlist' => 'אפשרויות תצוגה', 'prefs-diffs' => 'הבדלים בין גרסאות', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'כתובת הדואר האלקטרוני נראית תקינה', +'email-address-validity-invalid' => 'יש להקליד כתובת דואר אלקטרוני תקינה', + # User rights 'userrights' => 'ניהול הרשאות משתמש', 'userrights-lookup-user' => 'ניהול קבוצות משתמש', @@ -1494,6 +1522,7 @@ $1", 'right-hideuser' => 'חסימת שם משתמש תוך הסתרתו מהציבור', 'right-ipblock-exempt' => 'עקיפת חסימות של כתובת IP, חסימות אוטומטיות וחסימות טווח', 'right-proxyunbannable' => 'עקיפת חסימות אוטומטיות של שרתי פרוקסי', +'right-unblockself' => 'שחרור חסימה של עצמם', 'right-protect' => 'שינוי רמות הגנה ועריכת דפים מוגנים', 'right-editprotected' => 'עריכת דפים מוגנים (ללא הגנה מדורגת)', 'right-editinterface' => 'עריכת ממשק המשתמש', @@ -1516,7 +1545,6 @@ $1", 'right-siteadmin' => 'נעילת וביטול נעילת בסיס הנתונים', 'right-reset-passwords' => 'איפוס סיסמאות של משתמשים אחרים', 'right-override-export-depth' => 'ייצוא דפים כולל דפים מקושרים עד עומק של חמישה', -'right-versiondetail' => 'צפייה במידע המורחב על גרסת התוכנה', 'right-sendemail' => 'שליחת דואר אלקטרוני למשתמשים אחרים', # User rights log @@ -1567,14 +1595,9 @@ $1", 'recentchanges-legend' => 'אפשרויות בשינויים האחרונים', 'recentchangestext' => 'ניתן לעקוב אחרי השינויים האחרונים באתר בדף זה.', 'recentchanges-feed-description' => 'ניתן לעקוב אחרי השינויים האחרונים באתר בדף זה.', -'recentchanges-label-legend' => 'מקרא: $1', -'recentchanges-legend-newpage' => '$1 - דף חדש', 'recentchanges-label-newpage' => 'בעריכה זו נוצר דף חדש', -'recentchanges-legend-minor' => '$1 - עריכה משנית', 'recentchanges-label-minor' => 'זוהי עריכה משנית', -'recentchanges-legend-bot' => '$1 - עריכה של בוט', 'recentchanges-label-bot' => 'עריכה זו בוצעה על ידי בוט', -'recentchanges-legend-unpatrolled' => '$1 - עריכה שלא נבדקה', 'recentchanges-label-unpatrolled' => 'עריכה זו טרם נבדקה', 'rcnote' => "להלן {{PLURAL:$1|השינוי האחרון|'''$1''' השינויים האחרונים}} {{PLURAL:$2|ביום האחרון|ב־$2 הימים האחרונים}}, עד $5, $4:", 'rcnotefrom' => 'להלן $1 השינויים האחרונים שבוצעו החל מתאריך $2:', @@ -1623,6 +1646,9 @@ $1", 'upload_directory_missing' => 'שרת האינטרנט אינו יכול ליצור את תיקיית ההעלאות ($1) החסרה.', 'upload_directory_read_only' => 'שרת האינטרנט אינו יכול לכתוב בתיקיית ההעלאות ($1).', 'uploaderror' => 'שגיאה בהעלאת הקובץ', +'upload-recreate-warning' => "'''אזהרה: קובץ בשם זה נמחק או הועבר.''' + +יומני המחיקות וההעברות של הדף מוצגים להלן:", 'uploadtext' => "השתמשו בטופס להלן כדי להעלות קבצים. כדי לראות או לחפש קבצים שהועלו בעבר אנא פנו ל[[Special:FileList|רשימת הקבצים שהועלו]], וכמו כן, העלאות (כולל העלאות של גרסה חדשה) מוצגות ב[[Special:Log/upload|יומן ההעלאות]], ומחיקות ב[[Special:Log/delete|יומן המחיקות]]. @@ -1656,9 +1682,20 @@ $1", {{PLURAL:\$3|סוג הקובץ המומלץ הוא|סוגי הקבצים המומלצים הם}} \$2.", 'filetype-banned-type' => "'''\".\$1\"''' הוא סוג קובץ אסור להעלאה. {{PLURAL:\$3|סוג הקובץ המותר הוא|סוגי הקבצים המותרים הם}} \$2.", 'filetype-missing' => 'לקובץ אין סיומת (כדוגמת ".jpg").', +'empty-file' => 'הקובץ ששלחת היה ריק', +'file-too-large' => 'הקובץ ששלחת היה גדול מדי', +'filename-tooshort' => 'שם הקובץ קצר מדי', +'filetype-banned' => 'סוג הקובץ הזה אסור להעלאה', +'verification-error' => 'קובץ זה לא עבר את תהליך אימות הקבצים', +'hookaborted' => 'השינוי שניסית לבצע הופסק על ידי מבנה Hook של הרחבה', +'illegal-filename' => 'שם הקובץ אינו מותר להעלאה', +'overwrite' => 'דריסת קובץ קיים אינה מותרת', +'unknown-error' => 'אירעה שגיאה בלתי ידועה', +'tmp-create-error' => 'לא ניתן ליצור קובץ זמני', +'tmp-write-error' => 'שגיאה בכתיבה לקובץ הזמני', 'large-file' => 'מומלץ שהקבצים לא יהיו גדולים יותר מ־$1 (גודל הקובץ שהעליתם הוא $2).', 'largefileserver' => 'גודל הקובץ שהעליתם חורג ממגבלת השרת.', -'emptyfile' => 'הקובץ שהעליתם ריק. ייתכן שהסיבה לכך היא שגיאת הקלדה בשם הקובץ. אנא ודאו שזהו הקובץ שברצונך להעלות.', +'emptyfile' => 'נראה שהקובץ שהעליתם ריק. ייתכן שהסיבה לכך היא שגיאת הקלדה בשם הקובץ. אנא ודאו שזהו הקובץ שברצונכם להעלות.', 'fileexists' => "קובץ בשם זה כבר קיים, אנא בדקו את '''[[:$1]]''' אם אינכם בטוחים שברצונכם להחליף אותו. [[$1|thumb]]", 'filepageexists' => "דף תיאור הקובץ עבור קובץ זה כבר נוצר ב'''[[:$1]]''', אך לא קיים קובץ בשם זה. @@ -1682,13 +1719,14 @@ $1", 'file-exists-duplicate' => 'קובץ זה זהה {{PLURAL:$1|לקובץ הבא|לקבצים הבאים}}:', 'file-deleted-duplicate' => 'קובץ זהה לקובץ זה ([[:$1]]) נמחק בעבר. אנא בדקו את היסטוריית המחיקה של הקובץ לפני שתעלו אותו מחדש.', -'successfulupload' => 'העלאת הקובץ הושלמה בהצלחה', 'uploadwarning' => 'אזהרת העלאת קבצים', 'uploadwarning-text' => 'אנא שנו את תיאור הקובץ שלמטה ונסו שוב.', 'savefile' => 'שמירת קובץ', 'uploadedimage' => 'העלה את הקובץ [[$1]]', 'overwroteimage' => 'העלה גרסה חדשה של הקובץ [[$1]]', 'uploaddisabled' => 'העלאת קבצים מבוטלת.', +'copyuploaddisabled' => 'העלאת קבצים מכתובת URL מבוטלת.', +'uploadfromurl-queued' => 'העלאתכם הועברה לתור המשימות.', 'uploaddisabledtext' => 'אפשרות העלאת הקבצים מבוטלת.', 'php-uploaddisabledtext' => 'אפשרות העלאת הקבצים מבוטלת ברמת PHP. אנא בדקו את ההגדרה file_uploads.', 'uploadscripted' => 'הקובץ כולל קוד סקריפט או HTML שעשוי להתפרש או להתבצע בטעות על ידי הדפדפן.', @@ -1722,6 +1760,14 @@ JD # Jenoptik MGP # Pentax PICT # שונות # ', +'upload-success-subj' => 'ההעלאה הושלמה בהצלחה', +'upload-success-msg' => 'ההעלאה מהכתובת [$2] הושלמה בהצלחה. הקובץ שהעליתם זמין כאן: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'בעיה בהעלאה', +'upload-failure-msg' => 'הייתה בעיה עם הקובץ שהעליתם מהכתובת [$2]: + +$1', +'upload-warning-subj' => 'אזהרה בהעלאה', +'upload-warning-msg' => 'הייתה בעיה עם הקובץ שהעליתם מהכתובת [$2]. באפשרותכם לחזור ל[[Special:Upload/stash/$1|טופס ההעלאה]] כדי לתקן בעיה זו.', 'upload-proto-error' => 'פרוטוקול שגוי', 'upload-proto-error-text' => 'בהעלאה מרוחקת, יש להשתמש בכתובות URL המתחילות עם http:// או ftp://.', @@ -1783,6 +1829,7 @@ PICT # שונות 'listfiles_search_for' => 'חיפוש קובץ מדיה בשם:', 'imgfile' => 'קובץ', 'listfiles' => 'רשימת קבצים', +'listfiles_thumb' => 'תמונה ממוזערת', 'listfiles_date' => 'תאריך', 'listfiles_name' => 'שם', 'listfiles_user' => 'משתמש', @@ -1827,6 +1874,7 @@ PICT # שונות 'shared-repo-from' => 'מתוך $1', 'shared-repo' => 'מקום איחסון משותף', 'shared-repo-name-wikimediacommons' => 'ויקישיתוף', +'filepage.css' => '/* הסגנונות הנכתבים כאן יוכללו בדף תיאור הקובץ, כולל באתרי ויקי זרים */', # File reversion 'filerevert' => 'שחזור $1', @@ -1900,8 +1948,8 @@ PICT # שונות 'statistics-edits' => 'העריכות מאז תחילת הפעולה של {{SITENAME}}', 'statistics-edits-average' => 'מספר העריכות הממוצע לדף', 'statistics-views-total' => 'מספר הצפיות הכולל', +'statistics-views-total-desc' => 'צפיות בדפים שאינם קיימים ובדפים מיוחדים אינן כלולות', 'statistics-views-peredit' => 'מספר הצפיות לעריכה', -'statistics-jobqueue' => 'אורך [http://www.mediawiki.org/wiki/Manual:Job_queue תור המשימות]', 'statistics-users' => 'ה[[Special:ListUsers|משתמשים]] הרשומים', 'statistics-users-active' => 'המשתמשים הפעילים', 'statistics-users-active-desc' => 'משתמשים שביצעו פעולה כלשהי ב{{PLURAL:$1|יום האחרון|־$1 הימים האחרונים}}', @@ -1916,7 +1964,7 @@ PICT # שונות 'doubleredirects' => 'הפניות כפולות', 'doubleredirectstext' => 'ההפניות הבאות מפנות לדפי הפניה אחרים. כל שורה מכילה קישור להפניות הראשונה והשנייה, וכן את היעד של ההפניה השנייה, שהיא לרוב היעד ה"אמיתי" של ההפניה, אליו אמורה ההפניה הראשונה להצביע. -ערכים מחוקים כבר תוקנו.', +ערכים מחוקים כבר תוקנו.', 'double-redirect-fixed-move' => '[[$1]] הועבר. כעת הוא הפניה לדף [[$2]].', 'double-redirect-fixer' => 'מתקן הפניות', @@ -1939,6 +1987,8 @@ PICT # שונות 'nmembers' => '{{PLURAL:$1|דף אחד|$1 דפים}}', 'nrevisions' => '{{PLURAL:$1|גרסה אחת|$1 גרסאות}}', 'nviews' => '{{PLURAL:$1|צפייה אחת|$1 צפיות}}', +'nimagelinks' => 'בשימוש ב{{PLURAL:$1|דף אחד|־$1 דפים}}', +'ntransclusions' => 'בשימוש ב{{PLURAL:$1|דף אחד|־$1 דפים}}', 'specialpage-empty' => 'אין תוצאות.', 'lonelypages' => 'דפים יתומים', 'lonelypagestext' => 'הדפים הבאים אינם מקושרים מדפים אחרים באתר זה ואינם מוכללים בהם.', @@ -2095,34 +2145,40 @@ PICT # שונות 'listgrouprights-removegroup-self-all' => 'הסרת כל הקבוצות מהחשבון האישי', # E-mail user -'mailnologin' => 'אין כתובת לשליחה', -'mailnologintext' => 'עליכם [[Special:UserLogin|להיכנס לחשבון]] ולהגדיר לעצמכם כתובת דואר אלקטרוני תקינה ב[[Special:Preferences|העדפות המשתמש]] שלכם כדי לשלוח דואר למשתמש אחר.', -'emailuser' => 'שליחת דואר אלקטרוני למשתמש זה', -'emailpage' => 'שליחת דואר למשתמש', -'emailpagetext' => 'ניתן להשתמש בטופס כדי לשלוח הודעת דואר אלקטרוני למשתמש זה. +'mailnologin' => 'אין כתובת לשליחה', +'mailnologintext' => 'עליכם [[Special:UserLogin|להיכנס לחשבון]] ולהגדיר לעצמכם כתובת דואר אלקטרוני תקינה ב[[Special:Preferences|העדפות המשתמש]] שלכם כדי לשלוח דואר למשתמש אחר.', +'emailuser' => 'שליחת דואר אלקטרוני למשתמש זה', +'emailpage' => 'שליחת דואר למשתמש', +'emailpagetext' => 'ניתן להשתמש בטופס כדי לשלוח הודעת דואר אלקטרוני למשתמש זה. כתובת הדואר האלקטרוני שכתבתם ב[[Special:Preferences|העדפות המשתמש שלכם]] תופיע ככתובת ממנה נשלחה ההודעה, כדי לאפשר תגובה ישירה למכתב.', -'usermailererror' => 'אובייקט הדואר החזיר שגיאה:', -'defemailsubject' => 'דוא"ל {{SITENAME}}', -'noemailtitle' => 'אין כתובת דואר אלקטרוני', -'noemailtext' => 'משתמש זה לא הזין כתובת דואר אלקטרוני חוקית.', -'nowikiemailtitle' => 'שליחת דוא"ל אינה אפשרית', -'nowikiemailtext' => 'משתמש זה בחר שלא לקבל דואר אלקטרוני ממשתמשים אחרים.', -'email-legend' => 'שליחת דואר אלקטרוני למשתמש אחר של {{SITENAME}}', -'emailfrom' => 'מאת:', -'emailto' => 'אל:', -'emailsubject' => 'נושא:', -'emailmessage' => 'הודעה:', -'emailsend' => 'שליחה', -'emailccme' => 'נא לשלוח לי בדואר האלקטרוני העתק של הודעתי.', -'emailccsubject' => 'העתק של הודעתך למשתמש $1: $2', -'emailsent' => 'הדואר נשלח', -'emailsenttext' => 'הודעת הדואר האלקטרוני שלך נשלחה.', -'emailuserfooter' => 'דואר זה נשלח על ידי $1 למשתמש $2 באמצעות תכונת "שליחת דואר אלקטרוני למשתמש זה" ב{{grammar:תחילית|{{SITENAME}}}}.', +'usermailererror' => 'אובייקט הדואר החזיר שגיאה:', +'defemailsubject' => 'דוא"ל {{SITENAME}}', +'usermaildisabled' => 'שליחת דוא"ל למשתמשים מבוטלת', +'usermaildisabledtext' => 'אינכם רשאים לשלוח דואר אלקטרוני למשתמשים אחרים באתר זה', +'noemailtitle' => 'אין כתובת דואר אלקטרוני', +'noemailtext' => 'משתמש זה לא הזין כתובת דואר אלקטרוני חוקית.', +'nowikiemailtitle' => 'שליחת דוא"ל אינה אפשרית', +'nowikiemailtext' => 'משתמש זה בחר שלא לקבל דואר אלקטרוני ממשתמשים אחרים.', +'email-legend' => 'שליחת דואר אלקטרוני למשתמש אחר של {{SITENAME}}', +'emailfrom' => 'מאת:', +'emailto' => 'אל:', +'emailsubject' => 'נושא:', +'emailmessage' => 'הודעה:', +'emailsend' => 'שליחה', +'emailccme' => 'נא לשלוח לי בדואר האלקטרוני העתק של הודעתי.', +'emailccsubject' => 'העתק של הודעתך למשתמש $1: $2', +'emailsent' => 'הדואר נשלח', +'emailsenttext' => 'הודעת הדואר האלקטרוני שלך נשלחה.', +'emailuserfooter' => 'דואר זה נשלח על ידי $1 למשתמש $2 באמצעות תכונת "שליחת דואר אלקטרוני למשתמש זה" ב{{grammar:תחילית|{{SITENAME}}}}.', + +# User Messenger +'usermessage-summary' => 'השארת הודעת מערכת.', +'usermessage-editor' => 'שולח הודעות המערכת', # Watchlist 'watchlist' => 'רשימת המעקב שלי', 'mywatchlist' => 'רשימת המעקב שלי', -'watchlistfor' => "(עבור '''$1''')", +'watchlistfor2' => 'עבור $1 $2', 'nowatchlist' => 'אין דפים ברשימת המעקב.', 'watchlistanontext' => 'עליכם $1 כדי לצפות או לערוך פריטים ברשימת המעקב.', 'watchnologin' => 'לא נכנסתם לחשבון', @@ -2182,6 +2238,9 @@ $NEWPAGE מערכת ההודעות של {{SITENAME}} -- +כדי לשנות את ההגדרות של הודעות הדוא"ל הנשלחות אליכם, בקרו בדף +{{fullurl:{{#special:Preferences}}}} + כדי לשנות את הגדרות רשימת המעקב, בקרו בדף {{fullurl:{{#special:Watchlist}}/edit}} @@ -2238,7 +2297,10 @@ $UNWATCHURL 'revertpage' => 'שוחזר מעריכות של [[Special:Contributions/$2|$2]] ([[User talk:$2|שיחה]]) לעריכה האחרונה של [[User:$1|$1]]', 'revertpage-nouser' => 'שוחזר מעריכות של (שם המשתמש הוסר) לעריכה האחרונה של [[User:$1|$1]]', 'rollback-success' => 'שוחזר מעריכה של $1 לעריכה האחרונה של $2', -'sessionfailure' => 'נראה שיש בעיה בחיבורכם לאתר; + +# Edit tokens +'sessionfailure-title' => 'בעיה בחיבור', +'sessionfailure' => 'נראה שיש בעיה בחיבורכם לאתר; פעולתכם בוטלה כאמצעי זהירות נגד התחזות לתקשורת ממחשבכם. אנא חזרו לדף הקודם, העלו אותו מחדש ונסו שוב.', @@ -2368,19 +2430,23 @@ $1', 'month' => 'עד החודש:', 'year' => 'עד השנה:', -'sp-contributions-newbies' => 'הצגת תרומות של משתמשים חדשים בלבד', -'sp-contributions-newbies-sub' => 'עבור משתמשים חדשים', -'sp-contributions-newbies-title' => 'תרומות של משתמשים חדשים', -'sp-contributions-blocklog' => 'יומן חסימות', -'sp-contributions-deleted' => 'תרומות משתמש מחוקות', -'sp-contributions-logs' => 'יומנים', -'sp-contributions-talk' => 'שיחה', -'sp-contributions-userrights' => 'ניהול הרשאות משתמש', -'sp-contributions-blocked-notice' => 'משתמש זה חסום כרגע. +'sp-contributions-newbies' => 'הצגת תרומות של משתמשים חדשים בלבד', +'sp-contributions-newbies-sub' => 'עבור משתמשים חדשים', +'sp-contributions-newbies-title' => 'תרומות של משתמשים חדשים', +'sp-contributions-blocklog' => 'יומן חסימות', +'sp-contributions-deleted' => 'תרומות משתמש מחוקות', +'sp-contributions-uploads' => 'העלאות', +'sp-contributions-logs' => 'יומנים', +'sp-contributions-talk' => 'שיחה', +'sp-contributions-userrights' => 'ניהול הרשאות משתמש', +'sp-contributions-blocked-notice' => 'משתמש זה חסום כרגע. הפעולה האחרונה ביומן החסימות מוצגת להלן:', -'sp-contributions-search' => 'חיפוש תרומות', -'sp-contributions-username' => 'שם משתמש או כתובת IP:', -'sp-contributions-submit' => 'חיפוש', +'sp-contributions-blocked-notice-anon' => 'כתובת IP זו חסומה כרגע. +הפעולה האחרונה ביומן החסימות מוצגת להלן:', +'sp-contributions-search' => 'חיפוש תרומות', +'sp-contributions-username' => 'שם משתמש או כתובת IP:', +'sp-contributions-toponly' => 'הצגת עריכות שהן הגרסאות האחרונות בלבד', +'sp-contributions-submit' => 'חיפוש', # What links here 'whatlinkshere' => 'דפים המקושרים לכאן', @@ -2445,7 +2511,6 @@ $1', 'ipb-edit-dropdown' => 'עריכת סיבות החסימה', 'ipb-unblock-addr' => 'הסרת חסימה של $1', 'ipb-unblock' => 'הסרת חסימה של שם משתמש או כתובת IP', -'ipb-blocklist-addr' => 'החסימות הנוכחיות של $1', 'ipb-blocklist' => 'הצגת החסימות הנוכחיות', 'ipb-blocklist-contribs' => 'התרומות של $1', 'unblockip' => 'שחרור חסימה', @@ -2514,6 +2579,8 @@ $1 כבר נחסם. האם ברצונכם לשנות את הגדרות החסי 'sorbs_create_account_reason' => 'כתובת ה־IP שלכם רשומה ככתובת פרוקסי פתוחה ב־DNSBL שאתר זה משתמש בו. אינכם יכולים ליצור חשבון.', 'cant-block-while-blocked' => 'אינכם יכולים לחסום משתמשים אחרים כשאתם חסומים.', 'cant-see-hidden-user' => 'המשתמש שאתם מנסים לחסום כבר נחסם והוסתר. כיוון שאין לכם את ההרשאה לחסימת משתמש והסתרתו, אינכם רשאים לצפות בחסימת המשתמש או לערוך אותה.', +'ipbblocked' => 'אינכם יכולים לחסום או לשחרר את חסימתם של משתמשים אחרים, כיוון שאתם עצמכם חסומים', +'ipbnounblockself' => 'אינכם רשאים לשחרר את חסימתכם', # Developer tools 'lockdb' => 'נעילת בסיס נתונים', @@ -2550,6 +2617,17 @@ $1 כבר נחסם. האם ברצונכם לשנות את הגדרות החסי שימו לב: הדף '''לא''' יועבר אם כבר יש דף תחת השם החדש, אלא אם הדף הזה ריק, או שהוא הפניה, ואין לו היסטוריית עריכות קודמות. פירוש הדבר שאפשר לשנות חזרה את שמו של דף לשם המקורי אם נעשתה טעות, ושלא ניתן לדרוס דף קיים. +'''אזהרה!''' +שינוי זה עשוי להיות שינוי דרסטי ובלתי צפוי לדף פופולרי; +אנא ודאו שאתם מבינים את השלכות המעשה לפני שאתם ממשיכים.", +'movepagetext-noredirectfixer' => "שימוש בטופס שלהלן ישנה את שמו של דף, ויעביר את כל ההיסטוריה שלו לשם חדש. +השם הישן יהפוך לדף הפניה אל הדף עם השם החדש. +אנא ודאו שאין [[Special:DoubleRedirects|הפניות כפולות]] או [[Special:BrokenRedirects|שבורות]]. +אתם אחראים לוודא שכל הקישורים ימשיכו להצביע למקום שאליו הם אמורים להצביע. + +שימו לב: הדף '''לא''' יועבר אם כבר יש דף תחת השם החדש, אלא אם הדף הזה ריק, או שהוא הפניה, ואין לו היסטוריית עריכות קודמות. +פירוש הדבר שאפשר לשנות חזרה את שמו של דף לשם המקורי אם נעשתה טעות, ושלא ניתן לדרוס דף קיים. + '''אזהרה!''' שינוי זה עשוי להיות שינוי דרסטי ובלתי צפוי לדף פופולרי; אנא ודאו שאתם מבינים את השלכות המעשה לפני שאתם ממשיכים.", @@ -2607,6 +2685,7 @@ $1 כבר נחסם. האם ברצונכם לשנות את הגדרות החסי 'immobile-source-page' => 'דף זה אינו ניתן להעברה.', 'immobile-target-page' => 'לא ניתן להעביר אל כותרת יעד זו.', 'imagenocrossnamespace' => 'לא ניתן להעביר קובץ למרחב שם אחר', +'nonfile-cannot-move-to-file' => 'לא ניתן להעביר דף שאינו קובץ למרחב קובץ', 'imagetypemismatch' => 'סיומת הקובץ החדשה אינה מתאימה לסוג הקובץ', 'imageinvalidfilename' => 'שם קובץ היעד אינו תקין', 'fix-double-redirects' => 'עדכון הפניות לכותרת הדף המקורית', @@ -2688,6 +2767,7 @@ $1 כבר נחסם. האם ברצונכם לשנות את הגדרות החסי 'importstart' => 'מייבא דפים…', 'import-revision-count' => '{{PLURAL:$1|גרסה אחת|$1 גרסאות}}', 'importnopages' => 'אין דפים לייבוא.', +'imported-log-entries' => '{{PLURAL:$1|יובאה פעולת יומן אחת|יובאו $1 פעולות יומן}}.', 'importfailed' => 'הייבוא נכשל: $1', 'importunknownsource' => 'סוג ייבוא בלתי ידוע', 'importcantopen' => 'פתיחת קובץ הייבוא נכשלה', @@ -2780,6 +2860,8 @@ $1 כבר נחסם. האם ברצונכם לשנות את הגדרות החסי 'tooltip-upload' => 'התחלת ההעלאה', 'tooltip-rollback' => 'שחזור בלחיצה אחת של העריכה או העריכות של התורם האחרון לדף זה', 'tooltip-undo' => 'פתיחת חלון העריכה במצב תצוגה מקדימה כדי לשחזר את העריכה, תוך אפשרות להוספת סיבה בתקציר העריכה', +'tooltip-preferences-save' => 'שמירת ההעדפות', +'tooltip-summary' => 'להכנסת תקציר קצר', # Stylesheets 'common.css' => '/* הסגנונות הנכתבים כאן ישפיעו על כל העיצובים */', @@ -2911,14 +2993,17 @@ $1', 'imagemaxsize' => 'גודל תמונה מרבי:
    (לדפי תיאור קובץ)', 'thumbsize' => 'הקטנה לגודל של:', 'widthheightpage' => '$1×$2, {{PLURAL:$3|דף אחד|$3 דפים}}', -'file-info' => '(גודל הקובץ: $1, סוג MIME: $2)', -'file-info-size' => '($1 × $2 פיקסלים, גודל הקובץ: $3, סוג MIME: $4)', +'file-info' => 'גודל הקובץ: $1, סוג MIME: $2', +'file-info-size' => '$1 × $2 פיקסלים, גודל הקובץ: $3, סוג MIME: $4', 'file-nohires' => 'אין גרסת רזולוציה גבוהה יותר.', -'svg-long-desc' => '(קובץ SVG, הגודל המקורי: $1 × $2 פיקסלים, גודל הקובץ: $3)', +'svg-long-desc' => 'קובץ SVG, הגודל המקורי: $1 × $2 פיקסלים, גודל הקובץ: $3', 'show-big-image' => 'תמונה ברזולוציה גבוהה יותר', 'show-big-image-thumb' => 'גודל התצוגה הזו: $1 × $2 פיקסלים', 'file-info-gif-looped' => 'בלולאה', 'file-info-gif-frames' => '{{PLURAL:$1|תמונה אחת|$1 תמונות}}', +'file-info-png-looped' => 'בלולאה', +'file-info-png-repeat' => 'הוצג {{PLURAL:$1|פעם אחת|$1 פעמים|פעמיים}}', +'file-info-png-frames' => '{{PLURAL:$1|תמונה אחת|$1 תמונות}}', # Special:NewFiles 'newimages' => 'גלריית קבצים חדשים', @@ -3073,6 +3158,7 @@ $1', 'exif-gpsareainformation' => 'שם אזור ה־GPS', 'exif-gpsdatestamp' => 'תאריך ה־GPS', 'exif-gpsdifferential' => 'תיקון דיפרנציאלי של ה־GPS', +'exif-objectname' => 'כותרת קצרה', # EXIF attributes 'exif-compression-1' => 'לא דחוס', @@ -3232,25 +3318,25 @@ $1', 'limitall' => 'הכול', # E-mail address confirmation -'confirmemail' => 'אימות כתובת דוא"ל', -'confirmemail_noemail' => 'אין לכם כתובת דוא"ל תקפה המוגדרת ב[[Special:Preferences|העדפות המשתמש]] שלכם.', -'confirmemail_text' => 'אתר זה דורש שתאמתו את כתובת הדוא"ל שלכם לפני שתשתמשו בשירותי הדוא"ל. לחצו על הכפתור למטה כדי לשלוח דוא"ל עם קוד אימות לכתובת הדוא"ל שהזנתם. טענו את הקישור בדפדפן שלכם כדי לאשר שכתובת הדוא"ל תקפה.', -'confirmemail_pending' => 'קוד אימות דוא"ל כבר נשלח אליכם; אם יצרתם את החשבון לאחרונה, ייתכן שתרצו לחכות מספר דקות עד שיגיע לפני שתנסו לבקש קוד חדש.', -'confirmemail_send' => 'לשלוח קוד אימות', -'confirmemail_sent' => 'הדוא"ל עם קוד האימות נשלח.', -'confirmemail_oncreate' => 'קוד אימות דוא"ל נשלח לכתובת הדוא"ל שלכם. הקוד הזה אינו נדרש לכניסה, אך תצטרכו לספקו כדי להשתמש בכל תכונה מבוססת דוא"ל באתר זה.', -'confirmemail_sendfailed' => '{{SITENAME}} לא הצליח לשלוח לכם הודעת דוא"ל עם קוד האימות. +'confirmemail' => 'אימות כתובת דוא"ל', +'confirmemail_noemail' => 'אין לכם כתובת דוא"ל תקפה המוגדרת ב[[Special:Preferences|העדפות המשתמש]] שלכם.', +'confirmemail_text' => 'אתר זה דורש שתאמתו את כתובת הדוא"ל שלכם לפני שתשתמשו בשירותי הדוא"ל. לחצו על הכפתור למטה כדי לשלוח דוא"ל עם קוד אימות לכתובת הדוא"ל שהזנתם. טענו את הקישור בדפדפן שלכם כדי לאשר שכתובת הדוא"ל תקפה.', +'confirmemail_pending' => 'קוד אימות דוא"ל כבר נשלח אליכם; אם יצרתם את החשבון לאחרונה, ייתכן שתרצו לחכות מספר דקות עד שיגיע לפני שתנסו לבקש קוד חדש.', +'confirmemail_send' => 'לשלוח קוד אימות', +'confirmemail_sent' => 'הדוא"ל עם קוד האימות נשלח.', +'confirmemail_oncreate' => 'קוד אימות דוא"ל נשלח לכתובת הדוא"ל שלכם. הקוד הזה אינו נדרש לכניסה, אך תצטרכו לספקו כדי להשתמש בכל תכונה מבוססת דוא"ל באתר זה.', +'confirmemail_sendfailed' => '{{SITENAME}} לא הצליח לשלוח לכם הודעת דוא"ל עם קוד האימות. אנא בדקו שאין תווים שגויים בכתובת הדוא"ל. תוכנת שליחת הדוא"ל החזירה את ההודעה הבאה: $1', -'confirmemail_invalid' => 'קוד האימות שגוי. ייתכן שפג תוקפו.', -'confirmemail_needlogin' => 'עליכם לבצע $1 כדי לאמת את כתובת הדוא"ל שלכם.', -'confirmemail_success' => 'כתובת הדוא"ל שלכם אושרה. +'confirmemail_invalid' => 'קוד האימות שגוי. ייתכן שפג תוקפו.', +'confirmemail_needlogin' => 'עליכם לבצע $1 כדי לאמת את כתובת הדוא"ל שלכם.', +'confirmemail_success' => 'כתובת הדוא"ל שלכם אושרה. כעת באפשרותכם [[Special:UserLogin|להיכנס לחשבון שלכם]] וליהנות מהאתר.', -'confirmemail_loggedin' => 'כתובת הדוא"ל שלכם אושרה כעת.', -'confirmemail_error' => 'שגיאה בשמירת קוד האימות.', -'confirmemail_subject' => 'קוד אימות דוא"ל מ{{grammar:תחילית|{{SITENAME}}}}', -'confirmemail_body' => 'מישהו, כנראה אתם (מכתובת ה־IP הזו: $1), +'confirmemail_loggedin' => 'כתובת הדוא"ל שלכם אושרה כעת.', +'confirmemail_error' => 'שגיאה בשמירת קוד האימות.', +'confirmemail_subject' => 'קוד אימות דוא"ל מ{{grammar:תחילית|{{SITENAME}}}}', +'confirmemail_body' => 'מישהו, כנראה אתם (מכתובת ה־IP הזו: $1), רשם את החשבון "$2" עם כתובת הדוא"ל הזו ב{{grammar:תחילית|{{SITENAME}}}}. כדי לאמת שחשבון זה באמת שייך לכם ולהפעיל את שירותי הדוא"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם: @@ -3262,8 +3348,32 @@ $3 $5 קוד האימות יפקע ב־$4.', -'confirmemail_invalidated' => 'אימות כתובת הדוא"ל בוטל', -'invalidateemail' => 'ביטול האימות של כתובת הדוא"ל', +'confirmemail_body_changed' => 'מישהו, כנראה אתם (מכתובת ה־IP הזו: $1), +שינה את כתובת הדוא"ל של החשבון "$2" לכתובת הזו ב{{grammar:תחילית|{{SITENAME}}}}. + +כדי לאמת שחשבון זה באמת שייך לכם ולהפעיל מחדש את שירותי הדוא"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם: + +$3 + +אם החשבון *אינו* שייך לכם, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא"ל: + +$5 + +קוד האימות יפקע ב־$4.', +'confirmemail_body_set' => 'מישהו, כנראה אתם (מכתובת ה־IP הזו: $1), +הגדיר את כתובת הדוא"ל של החשבון "$2" לכתובת הזו ב{{grammar:תחילית|{{SITENAME}}}}. + +כדי לאמת שחשבון זה באמת שייך לכם ולהפעיל מחדש את שירותי הדוא"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם: + +$3 + +אם החשבון *אינו* שייך לכם, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא"ל: + +$5 + +קוד האימות יפקע ב־$4.', +'confirmemail_invalidated' => 'אימות כתובת הדוא"ל בוטל', +'invalidateemail' => 'ביטול האימות של כתובת הדוא"ל', # Scary transclusion 'scarytranscludedisabled' => '[הכללת דפים בין אתרים מבוטלת]', @@ -3303,6 +3413,7 @@ $1', 'table_pager_first' => 'הדף הראשון', 'table_pager_last' => 'הדף האחרון', 'table_pager_limit' => 'הצגת $1 פריטים בדף', +'table_pager_limit_label' => 'מספר פריטים בדף:', 'table_pager_limit_submit' => 'הצגה', 'table_pager_empty' => 'ללא תוצאות', @@ -3423,6 +3534,7 @@ $1', 'version-specialpages' => 'דפים מיוחדים', 'version-parserhooks' => 'הרחבות מפענח', 'version-variables' => 'משתנים', +'version-skins' => 'עיצובים', 'version-other' => 'אחר', 'version-mediahandlers' => 'מציגי מדיה', 'version-hooks' => 'מבני Hook', @@ -3434,6 +3546,13 @@ $1', 'version-hook-subscribedby' => 'הפונקציה הרושמת', 'version-version' => '(גרסה $1)', 'version-license' => 'רישיון', +'version-poweredby-credits' => "אתר הוויקי הזה מופעל על ידי '''[http://www.mediawiki.org/ מדיה־ויקי]''', © 2001-$1 $2.", +'version-poweredby-others' => 'אחרים', +'version-license-info' => "מדיה־ויקי היא תוכנה חופשית; באפשרותכם להפיץ אותה מחדש ו/או לשנות אותה לפי תנאי הרישיון הציבורי הכללי של גנו המפורסם על ידי המוסד לתוכנה חופשית: גרסה 2 של רישיון זה, או (לפי בחירתכם) כל גרסה מאוחרת יותר. + +מדיה־ויקי מופצת בתקווה שהיא תהיה שימושית, אך '''ללא כל הבטחה לאחריות'''; אפילו לא אחריות משתמעת של '''יכולת להיסחר''' או '''התאמה לרישיון מסוים'''. ראו את הרישיון הציבורי הכללי של גנו לפרטים נוספים. + +הייתם צריכים לקבל [{{SERVER}}{{SCRIPTPATH}}/COPYING העתק של הרישיון הציבורי הכללי של גנו] יחד עם תוכנה זו; אם לא, כתבו למוסד לתוכנה חופשית: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA או [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html קראו אותו ברשת].", 'version-software' => 'תוכנות מותקנות', 'version-software-product' => 'תוכנה', 'version-software-version' => 'גרסה', @@ -3504,6 +3623,15 @@ $1', 'tags-edit' => 'עריכה', 'tags-hitcount' => '{{PLURAL:$1|שינוי אחד|$1 שינויים}}', +# Special:ComparePages +'comparepages' => 'השוואת דפים', +'compare-selector' => 'השוואת גרסאות של דפים', +'compare-page1' => 'דף 1', +'compare-page2' => 'דף 2', +'compare-rev1' => 'גרסה 1', +'compare-rev2' => 'גרסה 2', +'compare-submit' => 'השוואה', + # Database error messages 'dberr-header' => 'בעיה בוויקי', 'dberr-problems' => 'מצטערים! קיימת בעיה טכנית באתר זה.', @@ -3520,8 +3648,13 @@ $1', 'htmlform-float-invalid' => 'הערך שציינתם אינו מספר.', 'htmlform-int-toolow' => 'הערך שציינתם הוא מתחת למינימום, $1', 'htmlform-int-toohigh' => 'הערך שציינתם הוא מעל למקסימום, $1', +'htmlform-required' => 'ערך זה דרוש', 'htmlform-submit' => 'שליחה', 'htmlform-reset' => 'ביטול השינויים', 'htmlform-selectorother-other' => 'אחר', +# SQLite database support +'sqlite-has-fts' => '$1 עם תמיכה בחיפוש בטקסט מלא', +'sqlite-no-fts' => '$1 ללא תמיכה בחיפוש בטקסט מלא', + ); diff --git a/languages/messages/MessagesHi.php b/languages/messages/MessagesHi.php index c65105e9..c4a78533 100644 --- a/languages/messages/MessagesHi.php +++ b/languages/messages/MessagesHi.php @@ -9,10 +9,12 @@ * * @author Akansha * @author Aksi great + * @author Bhawani Gautam * @author Bhawani Gautam Rhk * @author Charu * @author Dineshjk * @author Hemant wikikosh1 + * @author Htt * @author Kaustubh * @author Kiranmayee * @author Krinkle @@ -78,8 +80,7 @@ $messages = array( 'tog-editsection' => '[संपादित करें] कड़ियों द्वारा विभाग संपादन करने की अनुमती दें', 'tog-editsectiononrightclick' => 'विभाग शीर्षकपर दायाँ क्लीक करके संपादन करने की अनुमती दें (जावास्क्रीप्ट)', 'tog-showtoc' => 'अनुक्रम दर्शायें (जिन पन्नोंपर तीन से ज्यादा विभाग हो)', -'tog-rememberpassword' => 'इस संगणक पर मेरा कूटशब्द याद रखें', -'tog-editwidth' => 'संपादन कोष्ठक को पूरे पट की चौड़ाई में दिखाएँ', +'tog-rememberpassword' => 'इस ब्राउज़र पर मेरा कूटशब्द (अधिकतम $1 {{PLURAL:$1|दिन तक|दिनों तक}}) याद रखें', 'tog-watchcreations' => 'मेरे द्वारा निर्मित पृष्ठों को मेरी ध्यानसूची में जोड़ें', 'tog-watchdefault' => 'मेरे द्वारा सम्पादित पृष्ठों को मेरी ध्यानसूची में जोड़ें', 'tog-watchmoves' => 'मेरे द्वारा नाम-परिवर्तित पृष्ठों को मेरी ध्यानसूची में जोड़ें', @@ -148,7 +149,7 @@ $messages = array( 'august' => 'अगस्त', 'september' => 'सितम्बर', 'october' => 'अक्टूबर', -'november' => 'नवंबर', +'november' => 'नवम्बर', 'december' => 'दिसम्बर', 'january-gen' => 'जनवरी', 'february-gen' => 'फ़रवरी', @@ -158,7 +159,7 @@ $messages = array( 'june-gen' => 'जून', 'july-gen' => 'जुलाई', 'august-gen' => 'अगस्त', -'september-gen' => 'सितंबर', +'september-gen' => 'सितम्बर', 'october-gen' => 'अक्टूबर', 'november-gen' => 'नवम्बर', 'december-gen' => 'दिसम्बर', @@ -201,9 +202,9 @@ $messages = array( * [http://www.mediawiki.org/wiki/Manual:FAQ मीडियाविकिके बारे में प्राय: पूछे जाने वाले सवाल] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce मीडियाविकि मेलिंग लिस्ट]', -'about' => 'अबाउट', +'about' => 'के बारे में', 'article' => 'लेख', -'newwindow' => '(नया विंडो में खुलता है)', +'newwindow' => '(नई खिड़की में खुलता है)', 'cancel' => 'रद्द करें', 'moredotdotdot' => 'और...', 'mypage' => 'मेरा पृष्ठ', @@ -224,35 +225,25 @@ $messages = array( 'faqpage' => 'Project:अक्सर पूछे जाने वाले सवाल', # Vector skin -'vector-action-addsection' => 'विषय जोड़ें', -'vector-action-delete' => 'मिटाएँ', -'vector-action-move' => 'स्थानांतरण करें', -'vector-action-protect' => 'सुरक्षित करें', -'vector-action-undelete' => 'मिटाना वापस लें', -'vector-action-unprotect' => 'सुरक्षा हटाएँ', -'vector-namespace-category' => 'श्रेणी', -'vector-namespace-help' => 'सहायता पन्ना', -'vector-namespace-image' => 'संचका', -'vector-namespace-main' => 'पन्ना', -'vector-namespace-media' => 'माध्यम पन्ना', -'vector-namespace-mediawiki' => 'संदेश', -'vector-namespace-project' => 'परियोजना पन्ना', -'vector-namespace-special' => 'खास पन्ना', -'vector-namespace-talk' => 'वार्ता', -'vector-namespace-template' => 'साँचा', -'vector-namespace-user' => 'सदस्य पन्ना', -'vector-view-create' => 'बनाएं', -'vector-view-edit' => 'संपादन', -'vector-view-history' => 'इतिहास देखें', -'vector-view-view' => 'पढ़ें', -'vector-view-viewsource' => 'स्रोत देखें', -'actions' => 'क्रियाएं', -'namespaces' => 'नामस्थान', -'variants' => 'संस्करण', +'vector-action-addsection' => 'विषय जोड़ें', +'vector-action-delete' => 'मिटाएँ', +'vector-action-move' => 'स्थानांतरण करें', +'vector-action-protect' => 'सुरक्षित करें', +'vector-action-undelete' => 'मिटाना वापस लें', +'vector-action-unprotect' => 'सुरक्षा हटाएँ', +'vector-simplesearch-preference' => 'संवर्धित खोज सुझाव सक्षम करें। (केवल वॅक्टर स्किन हेतु)', +'vector-view-create' => 'बनाएँ', +'vector-view-edit' => 'सम्पादन', +'vector-view-history' => 'इतिहास देखें', +'vector-view-view' => 'पढ़ें', +'vector-view-viewsource' => 'स्रोत देखें', +'actions' => 'क्रियाएं', +'namespaces' => 'नामस्थान', +'variants' => 'संस्करण', 'errorpagetitle' => 'त्रुटि', 'returnto' => 'लौटें $1.', -'tagline' => 'विकिपीडिया, एक मुक्त ज्ञानकोष से', +'tagline' => '{{SITENAME}} से', 'help' => 'सहायता', 'search' => 'खोजिए', 'searchbutton' => 'खोजिए', @@ -266,10 +257,10 @@ $messages = array( 'permalink' => 'स्थायी कड़ी', 'print' => 'मुद्रांकन करें', 'edit' => 'सम्पादन', -'create' => 'बनाएं', +'create' => 'बनाएँ', 'editthispage' => 'इस पृष्ठ को बदलें', 'create-this-page' => 'इस लेख को लिखें', -'delete' => 'हटाएं', +'delete' => 'विलोपित करें', 'deletethispage' => 'इस पृष्ठ को हटायें', 'undelete_short' => '{{PLURAL:$1|एक हटायागया|$1 हटायागये}} बदलाव वापस लायें', 'protect' => 'सुरक्षित करें', @@ -295,7 +286,7 @@ $messages = array( 'viewhelppage' => 'सहायता पृष्ठ देखें', 'categorypage' => 'श्रेणी पृष्ठ देखें', 'viewtalkpage' => 'चर्चा देखें', -'otherlanguages' => 'अन्य भाषाएं', +'otherlanguages' => 'अन्य भाषाएँ', 'redirectedfrom' => '($1 से भेजा गया)', 'redirectpagesub' => 'पुनर्निर्देश पृष्ठ', 'lastmodifiedat' => 'इस पन्ने का पिछला बदलाव $1 को $2 बजे हुआ था।', @@ -309,6 +300,9 @@ $messages = array( कृपया कुछ समय प्रतीक्षा कर फिर से इस पृष्ठ तक जाने का प्रयास करें। $1', +'pool-timeout' => 'तालाबन्दी के लिए प्रतीक्षा समय समाप्त', +'pool-queuefull' => 'पूल पंक्ति भरी हुई है', +'pool-errorunknown' => 'अज्ञात त्रुटि', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} के बारे में', @@ -320,7 +314,7 @@ $1', 'disclaimers' => 'अस्वीकरण', 'disclaimerpage' => 'Project:साधारण अस्वीकरण', 'edithelp' => 'सम्पादन सहायता', -'edithelppage' => 'Help:संपादन', +'edithelppage' => 'सहायता:सम्पादन', 'helppage' => 'Help:सहायता', 'mainpage' => 'मुख्य पृष्ठ', 'mainpage-description' => 'मुख्य पृष्ठ', @@ -471,7 +465,8 @@ $2', 'yourname' => 'सदस्यनाम:', 'yourpassword' => 'कूटशब्द :', 'yourpasswordagain' => 'पासवर्ड दुबारा लिखें', -'remembermypassword' => 'इस कंप्यूटर पर मेरी लॉग-इन सूचना याद रखें।', +'remembermypassword' => 'इस ब्राउज़र पर मेरा लॉगिन याद रखें (अधिकतम $1 {{PLURAL:$1|दिन|दिनों}} के लिए)', +'securelogin-stick-https' => ' प्रवेश के बाद HTTPS से जुड़े रह', 'yourdomainname' => 'आपका डोमेन:', 'externaldberror' => 'बाह्य प्रमाणिकरण डाटाबेसमें समस्या हुई हैं या फिर आपको अपना बाह्य खाता अपडेट करने की अनुमति नहीं हैं ।', 'login' => 'लॉग इन', @@ -488,6 +483,7 @@ $2', 'gotaccount' => "पहलेसे आपका खाता हैं? '''$1'''.", 'gotaccountlink' => 'लॉग इन', 'createaccountmail' => 'ई-मेल द्वारा', +'createaccountreason' => 'कारण:', 'badretype' => 'आपने जो पासवर्ड दिये हैं वे एक दूसरे से नहीं मिलते। फिर से लिखें।', 'userexists' => 'आपने दिया हुआ सदस्यनाम पहले से इस्तेमालमें हैं । कृपया अन्य सदस्यनाम चुनियें ।', @@ -514,6 +510,7 @@ $2', 'wrongpasswordempty' => 'कूटशब्द खाली है; फिरसे यत्न किजीये ।', 'passwordtooshort' => 'आपका कूटशब्द कम से कम {{PLURAL:$1|1 अक्षर|$1 अक्षरे}} होने चाहिये।', 'password-name-match' => 'आपका कूटशब्द, आपके सदस्यनाम से भिन्न होना चाहिए।', +'password-login-forbidden' => 'इस प्रयोक्तानाम और कूटशब्द का उपयोग वर्जित है।', 'mailmypassword' => 'डाक द्वारा नया कूटशब्द भेजें', 'passwordremindertitle' => '{{SITENAME}} के लिया नया अस्थायी कूटशब्द', 'passwordremindertext' => 'किसी ने (शायद आपने ही, $1 आईपी पते से) {{SITENAME}} ($4) पर इस्तेमाल के लिये नया कूटशब्द मंगाया है। प्रयोक्ता "$2" के लिए एक अस्थायी कूटशब्द बना दिया गया है, और यह अभी "$3" है। यदि आपकी यही मंशा थी, तो अब आपको सत्रारंभ करके एक नया कूटशब्द चुनना होगा। @@ -600,13 +597,14 @@ $2', 'preview' => 'झलक', 'showpreview' => 'झलक दिखाएँ', 'showlivepreview' => 'सीधी झलक', -'showdiff' => 'बदलाव दिखाएं', +'showdiff' => 'बदलाव दिखाएँ', 'anoneditwarning' => "'''सावधान:''' आपने सत्रारंभ नहीं किया है। इस पृष्ठ के संपादन इतिहास में आपका आइपी पता अंकित किया जाएगा।", +'anonpreviewwarning' => '"आप लॉग्ड इन नहीं हैं। पन्ना सुरक्षित करने पर आपका आइपी पता इस पन्ने के इतिहास में रिकॉर्ड किया जायेगा।"', 'missingsummary' => "'''तकाज़ा (स्मरण-पत्र):''' आपने संपादन सारांश नहीं दिया हुआ हैं । अगर आप दुबारा संजोयेंपर क्लीक करते हैं तो आपका संपादन बिना सारांश दिये संजोया जायेगा ।", 'missingcommenttext' => 'कृपया नीचे टिप्पणी दें ।', -'missingcommentheader' => "'''स्मरण-पत्र:''' आपने इस टिप्पणीको शीर्षक नहीं दिया हैं । -अगर आप दुबारा संजोयें पर क्लीक करें तो आपके बदलाव संजोयें जायेंगे ।", +'missingcommentheader' => "'''स्मरण-पत्र:''' आपने इस टिप्पणी को शीर्षक नहीं दिया है। +अगर आप दोबारा \"{{int:savearticle}}\" पर क्लिक करें तो आपके बदलाव संजोयें जायेंगे।", 'summary-preview' => 'सारांशकी झलक:', 'subject-preview' => 'विषय/शीर्षक की झलक:', 'blockedtitle' => 'सदस्य अवरुद्ध है', @@ -662,10 +660,10 @@ $2', इसलिये उनकी पहचान के लिये हम उनका आईपी पते का प्रयोग करना पड़ता है। आईपी पता कई प्रयोक्ताओं के लिए एक सा हो सकता है। यदि आप एक बेनामी प्रयोक्ता हैं और आपको लगता है कि आपके बारे में अप्रासंगिक टीका टिप्पणी की गई है तो कृपया [[Special:UserLogin/signup|सदस्यता लें]] या [[Special:UserLogin|सत्रारंभ करें]] ताकि अन्य बेनामी प्रयोक्ताओं में से आपको अलग से पहचाना जा सके।''", -'noarticletext' => 'फ़िलहाल इस पन्ने पर कोई सामग्री नहीं है। -आप अन्यों पन्नों में [[Special:Search/{{PAGENAME}}|इस सामग्री की खोज]] कर सकते हैं, -[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} संबंधित चिट्ठों में खोज कर सकते हैं], -या [{{fullurl:{{FULLPAGENAME}}|action=edit}} इस पन्ने को संपादित कर सकते हैं]।', +'noarticletext' => 'फ़िलहाल इस पृष्ठ पर कोई सामग्री नहीं है। +आप अन्यों पृष्ठों में [[Special:Search/{{PAGENAME}}|इस सामग्री की खोज]] कर सकते हैं, +[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} सम्बन्धित चिट्ठों में खोज कर सकते हैं], +या [{{fullurl:{{FULLPAGENAME}}|action=edit}} इस पन्ने को सम्पादित कर सकते हैं]।', 'noarticletext-nopermission' => 'फ़िलहाल इस पन्ने पर कोई सामग्री नहीं है। आप अन्य पन्नों में [[Special:Search/{{PAGENAME}}|इस पन्ना शीर्षक की खोज]] कर सकते हैं, या [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} संबंधित चिट्ठों में खोज कर सकते हैं] ।', @@ -688,10 +686,10 @@ $2', '''यह अभी तक संजोई नहीं गई है!'''", 'userjspreview' => "'''आप अपने जावास्क्रीप्टकी सिर्फ झलक देख रहें हैं, वह अभीतक संजोई नहीं हैं इसका खयाल रखें ।'''", 'userinvalidcssjstitle' => "'''ताक़ीद:''' \"\$1\" नामसे कोई त्वचा नहीं हैं । -कृपया ध्यान में रहें की बदली हुई .css और .js फ़ाईलें नीचे स्तरकी लिपी का इस्तेमाल करती हैं, उदा. {{ns:user}}:Foo/monobook.css के विरुध {{ns:user}}:Foo/Monobook.css ।", +कृपया ध्यान में रहें की बदली हुई .css और .js फ़ाईलें नीचे स्तरकी लिपी का इस्तेमाल करती हैं, उदा. {{ns:user}}:Foo/vector.css के विरुध {{ns:user}}:Foo/Vector.css ।", 'updated' => '(अद्यतनीत)', 'note' => "'''सूचना:'''", -'previewnote' => "'''याद रखें, यह केवल एक झलक है और अभी तक सुरक्षित नहीं किया गया है!'''", +'previewnote' => "'''याद रखें, यह केवल एक झलक है और अभी तक सुरक्षित नहीं किया गया है!'''", 'previewconflict' => 'उपरी बदलाव संजोये जाने के बाद उपरी पाठ इस झलकके अनुसार दिखाया जायेगा।', 'session_fail_preview' => "'''माफ किजीयें! आपके बदलाव सेशन डाटा के नष्ट होने के कारण संजोयें नहीं गयें हैं। कृपया पुन: यत्न करें। अगर इसके बाद भी ऐसा ही होता हैं तो कॄपया लॉग आउट करके फिरसे लॉग इन करें।'''", @@ -725,8 +723,6 @@ $2', अगर आपको अपने लिखे हुए पाठ में संपादन होना नामंजूर हैं तो कृपया यहां पर मत लिखें।
    आप हमें यह भी वचन देतें हैं कि यह आपने खुद लिखा हैं या फिर कोई पब्लिक डोमेन या ऐसे ही किसी मुक्त स्रोतसे कापी किया हैं। (अधिक जानकारी के लिये $1 देखें)। '''कॉपीराइट वाले लेखों को, बिना अनुमति के, यहाँ न डाले।'''", -'longpagewarning' => "'''सूचना: यह पन्ना $1 किलोबाईट्सका है; कुछ ब्राउज़र्स 32kb से ज्यादा बडे पन्नोंको ठीक से नहीं दिखा सकते या संपादित करने में असुविधा हो सकती है । -कृपया इस पन्नेके उससे कम आकारके विभाग बनाईये ।'''", 'longpageerror' => "'''गलती: आपने दिया हुआ पाठ $1 कीलोबाईट लंबा हैं, जो $2 केबी के मर्यादा से बाहर हैं। इसे संजोया नहीं जा सकता।'''", 'readonlywarning' => "'''सावधान: आँकड़कोष को रख रखाव के लियें बंद कर दिया गया हैं, इसलिये अभी आपके बदलाव संजोए नहीं जा सकते। @@ -737,11 +733,11 @@ $2', 'semiprotectedpagewarning' => 'अर्ध संरक्षित पृष्ठ चेतावनी', 'cascadeprotectedwarning' => "'''सावधान:''' यह लेख निम्नलिखीत सुरक्षा-सीढी {{PLURAL:$1|पन्ने से|पन्नों से}} जुडा हुआ होने के कारण सुरक्षित हुआ हैं, और सिर्फ प्रबंधक ही इसमें बदलाव कर सकतें हैं:", 'titleprotectedwarning' => 'शीर्षक चेतावनी सुरक्षित', -'templatesused' => 'पूर्वावलोकन प्रयोग साँचा', -'templatesusedpreview' => 'प्रयुक्त अनुभाग साँचा', +'templatesused' => 'पूर्वावलोकन प्रयोग {{PLURAL:$1|साँचा|साँचे}}', +'templatesusedpreview' => 'प्रयुक्त अनुभाग {{PLURAL:$1|साँचा|साँचे}}', 'templatesusedsection' => 'प्रयुक्त अनुभाग टेम्पलेट्स', 'template-protected' => '(सुरक्षित)', -'template-semiprotected' => '(अर्ध-सुरक्षीत)', +'template-semiprotected' => '(अर्ध-सुरक्षित)', 'hiddencategories' => 'यह लेख निम्नलिखित {{PLURAL:$1|1 छुपाई हुई श्रेणीमें|$1 छुपाईं हुईं श्रेणियोंमें}} हैं:', 'edittools' => '', 'nocreatetitle' => 'लेख निर्माणमें प्रतिबंध', @@ -811,9 +807,9 @@ $2', 'last' => 'पिछला', 'page_first' => 'पहला', 'page_last' => 'आखिरी', -'histlegend' => 'फर्क चयन: फर्क देखनेके लिये पुराने अवतरणोंके आगे दिये गये रेडियो बॉक्सपर क्लीक करें तथा एन्टर करें अथवा नीचे दिये हुए बटनपर क्लीक करें
    -लिजेंड: (चालू) = सद्य अवतरणके बीचमें फर्क, -(आखिरी) = पिछले अवतरणके बीचमें फर्क, छो = छोटा बदलाव ।', +'histlegend' => 'अन्तर चयन: अन्तर देखने के लिए पुराने अवतरणों के आगे दिए गए रेडियो बॉक्स पर क्लिक करें तथा एण्टर करें अथवा नीचे दिए हुए बटनपर क्लिक करें
    +लिजण्ड: (चालू) = सद्य अवतरण के बीचमें अन्तर, +(आखिरी) = पिछले अवतरण के बीचमें अन्तर, छो = छोटा बदलाव।', 'history-fieldset-title' => 'इतिहास का विचरण करें', 'history-show-deleted' => 'इतिहास शो नष्ट', 'histfirst' => 'सबसे पुराना', @@ -897,6 +893,8 @@ $2', 'logdelete-failure' => "'''चिट्ठे की दर्शनीयता का जमाव नहीं किया जा सका:''' $1", 'revdel-restore' => 'दृश्यता बदलें', +'revdel-restore-deleted' => 'हटाए गए संशोधन', +'revdel-restore-visible' => 'दृश्य संशोधन', 'pagehist' => 'पन्ने का इतिहास', 'deletedhist' => 'हटाया हुआ इतिहास', 'revdelete-content' => 'कंटेंट', @@ -966,8 +964,9 @@ $2, $1 की तिथि के आइटम को छुपाने मे # Diffs 'history-title' => '"$1" का अवतरण इतिहास', 'difference' => '(संस्करणों में अंतर)', +'difference-multipage' => '(पृष्ठों के बीच अन्तर)', 'lineno' => 'पंक्ति $1:', -'compareselectedversions' => 'च़यन किये हुए अवतरणोंमें फर्क देखियें', +'compareselectedversions' => 'चुने हुए अवतरणों की तुलना करें', 'showhideselectedversions' => 'चयनित संस्करण दिखाएँ/छिपाएँ', 'editundo' => 'पूर्ववत करें', 'diff-multi' => '({{PLURAL:$1|बीच वाला एक अवतरण|बीचवाले $1 अवतरण}} दर्शाये नहीं हैं ।)', @@ -988,14 +987,14 @@ $2, $1 की तिथि के आइटम को छुपाने मे 'prevn-title' => '{{PLURAL:$1|पिछला १ परिणाम| पिछले $1 परिणाम}}', 'nextn-title' => '{{PLURAL:$1|अगला १ परिणाम| अगले $1 परिणाम}}', 'shown-title' => 'हर पन्ने पर {{PLURAL:$1|परिणाम|परिणाम}} दिखाएँ', -'viewprevnext' => 'देख़ें ($1 {{int:pipe-separator}} $2) ($3)', +'viewprevnext' => 'देखें ($1 {{int:pipe-separator}} $2) ($3)', 'searchmenu-legend' => 'खोज विकल्प', 'searchmenu-exists' => "'''इस विकि पर \"[[:\$1]]\" नाम से एक पन्ना है'''", 'searchmenu-new' => "'''इस विकि पर \"[[:\$1]]\" नाम से पन्ना बनाएँ!'''", 'searchhelp-url' => 'Help:सहायता', 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|इस उपसर्ग वाले पन्ने देखें]]', 'searchprofile-articles' => 'सामग्री वाले पन्ने', -'searchprofile-project' => 'मदद व परियोजना वाले पन्ने', +'searchprofile-project' => 'सहायता और परियोजना वाले पृष्ठ', 'searchprofile-images' => 'बहुमाध्यम', 'searchprofile-everything' => 'सब कुछ', 'searchprofile-advanced' => 'उन्नत', @@ -1005,6 +1004,7 @@ $2, $1 की तिथि के आइटम को छुपाने मे 'searchprofile-everything-tooltip' => '(वार्ता पन्नों सहित) सारी सामग्री में खोजें', 'searchprofile-advanced-tooltip' => 'विशेष नामस्थानों में खोजें', 'search-result-size' => '$1 ({{PLURAL:$2|1 शब्द|$2 शब्द}})', +'search-result-category-size' => '{{PLURAL:$1|1 सदस्य|$1 सदस्य}} ({{PLURAL:$2|1 उपश्रेणी|$2 उपश्रेणियां}}, {{PLURAL:$3|1 सञ्चिका|$3 सञ्चिकाएं}})', 'search-result-score' => 'संबद्ध: $1%', 'search-redirect' => '($1 को अनुप्रेषित)', 'search-section' => '(विभाग $1)', @@ -1081,6 +1081,7 @@ $2, $1 की तिथि के आइटम को छुपाने मे 'contextlines' => 'प्रति हिट कतारें:', 'contextchars' => 'प्रति कतार संदर्भ:', 'stub-threshold' => 'आधार कड़ियों का ज्यादासे ज्यादा आकार (बाईट्स):', +'stub-threshold-disabled' => 'अक्षम किया गया', 'recentchangesdays' => 'हाल में हुए बदलावोंमें दर्शाने के दिन:', 'recentchangesdays-max' => 'अधिकतम $1 {{PLURAL:$1|दिन|दिन}}', 'recentchangescount' => 'मूल रूप से कितने संपादन दिखाएँ:', @@ -1114,6 +1115,7 @@ $2, $1 की तिथि के आइटम को छुपाने मे 'prefs-files' => 'फ़ाईलें', 'prefs-custom-css' => 'खासमखास सीएसएस', 'prefs-custom-js' => 'खासमखास जेएस', +'prefs-common-css-js' => 'सभी त्वचाओं के लिए साझा सीएसएस/जावास्क्रिप्ट:', 'prefs-reset-intro' => 'आप इस पन्ने के जरिए अपनी वरीयताओं को स्थल की मूल वरीयताओं के समान बना सकते हैं। इसके बाद आप वापस पुरानी स्थिति पर नहीं आ सकेंगे।', 'prefs-emailconfirm-label' => 'डाक पुष्टि:', @@ -1123,7 +1125,7 @@ $2, $1 की तिथि के आइटम को छुपाने मे 'uid' => 'सदस्य क्रमांक:', 'prefs-memberingroups' => 'निम्नलिखित {{PLURAL:$1|ग्रुप का|ग्रुपों का}} सदस्य:', 'prefs-registration' => 'पंजीकरण समय:', -'yourrealname' => 'आपका असली नाम*', +'yourrealname' => 'वास्तविक नाम:', 'yourlanguage' => 'भाषा:', 'yourvariant' => 'वेरियंट:', 'yournick' => 'आपका उपनाम (दस्तखत/सही के लिये)', @@ -1152,9 +1154,15 @@ $2, $1 की तिथि के आइटम को छुपाने मे 'prefs-advancedrendering' => 'उन्नत विकल्प', 'prefs-advancedsearchoptions' => 'उन्नत विकल्प', 'prefs-advancedwatchlist' => 'उन्नत विकल्प', -'prefs-display' => 'प्रदर्शन विकल्प', +'prefs-displayrc' => 'प्रदर्शन विकल्प', +'prefs-displaysearchoptions' => 'प्रदर्शन विकल्प', +'prefs-displaywatchlist' => 'प्रदर्शन विकल्प', 'prefs-diffs' => 'अंतर', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'ईमेल पता वैध प्रतीत होता है', +'email-address-validity-invalid' => 'एक वैध ईमेल पता प्रविष्ट करें', + # User rights 'userrights' => 'सदस्य अधिकार व्यवस्थापन', 'userrights-lookup-user' => 'सदस्य ग्रुपोंका व्यवस्थापन करें', @@ -1238,6 +1246,7 @@ $2, $1 की तिथि के आइटम को छुपाने मे 'right-hideuser' => 'एक सदस्यनाम लोगोंसे छुपायें', 'right-ipblock-exempt' => 'आइपी ब्लॉक्स को नजर अंदाज करें', 'right-proxyunbannable' => 'प्रोक्सी होनेपर ब्लॉक्स को नजर अंदाज करें', +'right-unblockself' => 'स्वयं खुलना', 'right-protect' => 'सुरक्षा स्तर बदलें', 'right-editprotected' => 'सुरक्षित पन्ने बदलें', 'right-editinterface' => 'सदस्योंका इंटरफेस बदलें', @@ -1260,7 +1269,6 @@ $2, $1 की तिथि के आइटम को छुपाने मे 'right-siteadmin' => 'डाटाबेस को ताला लगायें या खोलें', 'right-reset-passwords' => 'अन्य सदस्यों के कूटशब्द बदलना', 'right-override-export-depth' => 'पन्नों का निर्यात, ५वीं गहराई तक के हवाले वाले पन्नों समेत', -'right-versiondetail' => 'विस्तृत तंत्रांश संस्करण जानकारी देखना', 'right-sendemail' => 'सही ईमेल भेजें', # User rights log @@ -1311,14 +1319,9 @@ $2, $1 की तिथि के आइटम को छुपाने मे 'recentchanges-legend' => 'हाल के परिवर्तन संबंधी विकल्प', 'recentchangestext' => 'इस विकिपर हाल में हुए बदलाव इस पन्ने पर देखें जा सकतें हैं।', 'recentchanges-feed-description' => 'इस फ़ीडमें होनेवाले विकिपर हाल में हुए बदलाव देखियें ।', -'recentchanges-label-legend' => 'आख्यान: $1।', -'recentchanges-legend-newpage' => '$1 - नया पन्ना', 'recentchanges-label-newpage' => 'इस संपादन से नया पन्ना बना', -'recentchanges-legend-minor' => '$1 - छोटा संपादन', -'recentchanges-label-minor' => 'यह एक छोटा संपादन है', -'recentchanges-legend-bot' => '$1 - यांत्रिक संपादन', +'recentchanges-label-minor' => 'यह एक छोटा सम्पादन है', 'recentchanges-label-bot' => 'यह एक यांत्रिक संपादन था', -'recentchanges-legend-unpatrolled' => '$1 - बिना निगरानी का संपादन', 'recentchanges-label-unpatrolled' => 'इस संपादन की अभी निगरानी नहीं हुई है', 'rcnote' => "$5, $4 के पहले के {{PLURAL:$2|'''१''' दिन|'''$2''' दिनों}} में {{PLURAL:$1|हुआ '''१''' बदलाव इस प्रकार है| हुए '''$1''' बदलाव इस प्रकार हैं}}।", 'rcnotefrom' => "नीचे '''$2''' से हुए ('''$1''' या कम) बदलाव दर्शाये गये है ।", @@ -1365,6 +1368,8 @@ $2, $1 की तिथि के आइटम को छुपाने मे 'upload_directory_missing' => 'चढ़ाने के लिए निर्दिष्ट निर्देशिका ($1) मौजूद नहीं है, और न ही जालसेवक इसका निर्माण कर पाया।', 'upload_directory_read_only' => 'अपलोड डाइरेक्टरी ($1) में सर्वर लिख नहीं पा रहा हैं।', 'uploaderror' => 'अपलोड एरर', +'upload-recreate-warning' => "'''चेतावनी: उस नाम की सञ्चिका हटाई या स्थानान्तरित की जा चुकी है।''' +इस पृष्ठ का विनष्ट और स्थानान्तरित अभिलेख सन्दर्भ के लिए दिया गया है:", 'uploadtext' => "संचिका चढ़ाने के लिए नीचे दिए पर्चे का इस्तेमाल करें। [[Special:FileList|चढ़ाई गई संचिकाओं की सूची]] से आप पहले चढ़ाई जा चुकी संचिकाओं को देख सकते हैं या उनमें खोज सकते हैं। दोबारा चढ़ाई गई संचिकाओं को [[Special:Log/upload|चढ़ाने के चिट्ठे]] में देखें, और मिटाई संचिकाओं के लिए [[Special:Log/delete|मिटाने के चिट्ठे]] देखें। @@ -1400,6 +1405,17 @@ $2, $1 की तिथि के आइटम को छुपाने मे 'filetype-banned-type' => "'''\".\$1\"''' एक वांछित संचिका प्रकार नहीं है। वांछित संचिका प्रकार {{PLURAL:\$3|है|हैं}} \$2।", 'filetype-missing' => 'इस फ़ाईल को एक्स्टेंशन नहीं हैं (उदा ".jpg")।', +'empty-file' => 'फ़ाइल प्रस्तुत खाली था', +'file-too-large' => 'फ़ाइल प्रस्तुत बहुत बड़ा था.', +'filename-tooshort' => 'फ़ाइल का नाम बहुत छोटा है।', +'filetype-banned' => 'इस प्रकार की फ़ाइल पर प्रतिबंध लगा दिया है', +'verification-error' => 'यह सञ्चिका, सञ्चिका सत्यापन में अनुत्तीर्ण रही।', +'hookaborted' => 'आपके द्वारा प्रयासरत संशोधन विस्तार हूक द्वारा निरस्त किया गया।', +'illegal-filename' => 'फ़ाइल नाम की अनुमति नहीं है', +'overwrite' => ' मौजूदा फ़ाइल को अधिलेखित करने की अनुमति नहीं है', +'unknown-error' => 'एक अज्ञात त्रुटि उत्पन्न हुई.', +'tmp-create-error' => 'अस्थाई फ़ाइल नहीं बना सका', +'tmp-write-error' => 'अस्थायी फाइल को लिखने में त्रुटि.', 'large-file' => 'फ़ाईलें $1 से कम आकार की होना आवश्यक हैं; यह फ़ाईल $2 आकार की हैं।', 'largefileserver' => 'इस फ़ाईल का आकार निर्धारित आकार से ज्यादा हैं।', @@ -1427,13 +1443,14 @@ $2, $1 की तिथि के आइटम को छुपाने मे [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'यह संचिका निम्नलिखित {{PLURAL:$1|संचिका|संचिकाओं}} की प्रति है:', 'file-deleted-duplicate' => 'इसी संचिका ([[:$1]]) के समान एक और संचिका पहले मिटाई गई थी। इसे फिर से चढ़ाने के पहले आपको इस संचिका के मिटाने के इतिहास को देख लेना चाहिए।', -'successfulupload' => 'अपलोड हो गईं', 'uploadwarning' => 'अपलोड वार्निंग', 'uploadwarning-text' => 'फ़ाइल विवरण को संशोधित कर फिर कोशिश करें.', 'savefile' => 'फ़ाईल संजोयें', 'uploadedimage' => '"[[$1]]" को चढाया गया हैं', 'overwroteimage' => '"[[$1]]" का नया अवतरण अपलोड किया', 'uploaddisabled' => 'अपलोड प्रतिबंधित हैं', +'copyuploaddisabled' => 'यूआरएल द्वारा अपलोड अक्षमित।', +'uploadfromurl-queued' => 'आपका अपलोड पंक्तिबद्ध किया गया।', 'uploaddisabledtext' => 'संचिका चढ़ाना बंद है।', 'php-uploaddisabledtext' => 'पीएचपी में संचिका चढ़ाना बंद है। कृपया file_uploads जमाव की जाँच करें।', @@ -1469,6 +1486,12 @@ JD # Jenoptik MGP # Pentax PICT # misc. # ', +'upload-success-subj' => 'अपलोड हो गईं', +'upload-success-msg' => 'आपका [$2] अपलोड प्रपत्र असफल रहा। यह यहां: [[:{{ns:file}}:$1]] उपलब्ध है', +'upload-failure-subj' => 'अपलोड समस्या', +'upload-failure-msg' => 'आपके द्वारा [$2] से अपलोड के साथ एक समस्या थी:', +'upload-warning-subj' => 'अपलोड चेतावनी', +'upload-warning-msg' => 'आपके द्वारा [$2] से अपलोड के साथ एक समस्या थी। आप इस समस्या को ठीक करने के लिए [[Special:Upload/stash/$1|अपलोड प्रपत्र]] पर लौट सकते हैं।', 'upload-proto-error' => 'गलत प्रोटोकोल', 'upload-proto-error-text' => 'रिमोट अपलोड के लिये URL का नाम http:// या ftp:// से शुरु होना आवश्यक हैं।', @@ -1534,6 +1557,7 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization को देखें 'listfiles_search_for' => 'इस मीडिया नाम से खोजें:', 'imgfile' => 'सञ्चिका', 'listfiles' => 'चित्र सूची', +'listfiles_thumb' => 'अंगूठानख', 'listfiles_date' => 'दिनांक', 'listfiles_name' => 'नाम', 'listfiles_user' => 'सदस्य', @@ -1649,8 +1673,8 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization को देखें 'statistics-edits' => '{{SITENAME}} का जमाव होने के बाद से पन्नों के संपादन', 'statistics-edits-average' => 'प्रति पन्ना औसत संपादन', 'statistics-views-total' => 'कुल दृष्य', +'statistics-views-total-desc' => 'अविद्यमान पृष्ठों और विशेष पृष्ठों के लिए दृश्य सम्मिलित नहीं हैं', 'statistics-views-peredit' => 'दृष्य प्रति संपादन', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue कार्य पंक्ति] की लंबाई', 'statistics-users' => 'पंजीकृत [[Special:ListUsers|सदस्य]]', 'statistics-users-active' => 'सक्रिय सदस्य', 'statistics-users-active-desc' => 'पिछले {{PLURAL:$1|एक दिन|$1 दिनों}} में कुछ गतिविधि रखने वाले सदस्य', @@ -1663,9 +1687,9 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization को देखें यदि कोई पृष्ठ ऐसे सांचे का प्रयोग करता है, जो की [[MediaWiki:Disambiguationspage]] से जुड़ा हुआ है, तो उसे असमंजश पृष्ठ समझा जाता है।", 'doubleredirects' => 'दुगुनी-अनुप्रेषिते', -'doubleredirectstext' => 'यह पन्ना उन पन्नों की सूची देता है जो अन्य पुनर्निर्देशित पन्नों की ओर पुनर्निर्देशित होते हैं। +'doubleredirectstext' => 'यह पन्ना उन पन्नों की सूची देता है जो अन्य पुनर्निर्देशित पन्नों की ओर पुनर्निर्देशित होते हैं। हर कतार में पहले और दूसरे पुनर्निर्देशन की कड़ियाँ, तथा दूसरे पुनर्निर्देशन का लक्ष्य भी है, आमतौर पर यही "वास्तविक" लक्ष्यित पृष्ठ होगा, और पहला पुनर्देशन वास्तव में इसी को लक्ष्यित होना चाहिए था। -एक दूसरे को काटने वाली प्रविष्टियाँ सुलझा दी गई हैं।', +एक दूसरे को काटने वाली प्रविष्टियाँ सुलझा दी गई हैं।', 'double-redirect-fixed-move' => '[[$1]] की जगह बदली जा चुकी है। अब यह [[$2]] की ओर पुनर्निर्देशित होता है।', 'double-redirect-fixer' => 'पुनर्निर्देशन मिस्त्री', @@ -1689,6 +1713,8 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization को देखें 'nmembers' => '{{PLURAL:$1|एक सदस्य|$1 सदस्य}}', 'nrevisions' => '$1 {{PLURAL:$1|रूपान्तर|रूपान्तरें}}', 'nviews' => '{{PLURAL:$1|एक|$1}} बार देखा गया है', +'nimagelinks' => '$1 {{PLURAL:$1|page|पृष्ठों}} पर प्रयुक्त', +'ntransclusions' => '$1 {{PLURAL:$1|page|पृष्ठों}} पर प्रयुक्त', 'specialpage-empty' => 'इस ब्यौरे के लिये कोई परिणाम नहीं हैं।', 'lonelypages' => 'अकेले पन्ने', 'lonelypagestext' => 'निम्नोक्त पन्ने के न तो {{SITENAME}} के अन्य पन्नों में हवाले हैं और न ही वे किसी और पन्ने के अंदर जड़े हुए हैं।', @@ -1844,34 +1870,40 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization को देखें 'listgrouprights-removegroup-self-all' => 'अपने खाते से सभी समूह हटाएँ', # E-mail user -'mailnologin' => 'पानेवाले का एड्रेस दिया नहीं', -'mailnologintext' => 'अन्य सदस्यों को इ-मेल भेजने के लिये आपने [[Special:UserLogin|लॉग इन]] किया होना जरूरी हैं और आपकी [[Special:Preferences|वरीयताओंमें]] वैध इ-मेल एड्रेस होना आवश्यक हैं।', -'emailuser' => 'इस सदस्य को ई-मेल भेजें', -'emailpage' => 'सदस्य को इ-मेल करें', -'emailpagetext' => 'नीचे दिए पर्चे को जरिए आप इस सदस्य को डाक भेज सकते हैं। +'mailnologin' => 'पानेवाले का एड्रेस दिया नहीं', +'mailnologintext' => 'अन्य सदस्यों को इ-मेल भेजने के लिये आपने [[Special:UserLogin|लॉग इन]] किया होना जरूरी हैं और आपकी [[Special:Preferences|वरीयताओंमें]] वैध इ-मेल एड्रेस होना आवश्यक हैं।', +'emailuser' => 'इस सदस्य को ई-मेल भेजें', +'emailpage' => 'सदस्य को इ-मेल करें', +'emailpagetext' => 'नीचे दिए पर्चे को जरिए आप इस सदस्य को डाक भेज सकते हैं। आपने जो पता [[Special:Preferences|अपनी सदस्य वरीयताओं]] में दिया था वह इस डाक के "प्रेषक" के तौर पर आएगा, अतः प्राप्तकर्ता आपको सीधे जवाब दे सकेंगे।', -'usermailererror' => 'मेल ऑब्जेक्ट ने यह गलती बताई हैं:', -'defemailsubject' => 'विकिपीडिया ई-मेल', -'noemailtitle' => 'इ-मेल एड्रेस नहीं', -'noemailtext' => 'इस सदस्य ने वैध डाक पता नहीं दिया है।', -'nowikiemailtitle' => 'डाक की अनुमति नहीं है', -'nowikiemailtext' => 'इस सदस्य ने अन्य प्रयोक्ताओं से डाक न प्राप्त करने का फ़ैसला लिया हुआ है।', -'email-legend' => 'किसी और {{SITENAME}} सदस्य को डाक भेजें', -'emailfrom' => 'प्रेषक:', -'emailto' => 'प्राप्तकर्ता:', -'emailsubject' => 'विषय:', -'emailmessage' => 'संदेश:', -'emailsend' => 'भेजें', -'emailccme' => 'मेरे इ-मेल की कापी मुझे भी भेजें।', -'emailccsubject' => 'आपके इ-मेल की कापी जो $1 को भेजा गया: $2', -'emailsent' => 'ई-मेल भेज दिया गया है।', -'emailsenttext' => 'आपका ई-मेल संदेश भेज दिया गया है ।', -'emailuserfooter' => 'यह डाक {{SITENAME}} की "सदस्य डाक" सुविधा के जरिए $1 से $2 को भेजी गई थी।', +'usermailererror' => 'मेल ऑब्जेक्ट ने यह गलती बताई हैं:', +'defemailsubject' => 'विकिपीडिया ई-मेल', +'usermaildisabled' => 'प्रयोक्ता ईमेल अक्षम किया गया', +'usermaildisabledtext' => 'आप इस विकि पर ई मेल अन्य यूज़र्स को नहीं भेज सकते हैं', +'noemailtitle' => 'इ-मेल एड्रेस नहीं', +'noemailtext' => 'इस सदस्य ने वैध डाक पता नहीं दिया है।', +'nowikiemailtitle' => 'डाक की अनुमति नहीं है', +'nowikiemailtext' => 'इस सदस्य ने अन्य प्रयोक्ताओं से डाक न प्राप्त करने का फ़ैसला लिया हुआ है।', +'email-legend' => 'किसी और {{SITENAME}} सदस्य को डाक भेजें', +'emailfrom' => 'प्रेषक:', +'emailto' => 'प्राप्तकर्ता:', +'emailsubject' => 'विषय:', +'emailmessage' => 'संदेश:', +'emailsend' => 'भेजें', +'emailccme' => 'मेरे इ-मेल की कापी मुझे भी भेजें।', +'emailccsubject' => 'आपके इ-मेल की कापी जो $1 को भेजा गया: $2', +'emailsent' => 'ई-मेल भेज दिया गया है।', +'emailsenttext' => 'आपका ई-मेल संदेश भेज दिया गया है ।', +'emailuserfooter' => 'यह डाक {{SITENAME}} की "सदस्य डाक" सुविधा के जरिए $1 से $2 को भेजी गई थी।', + +# User Messenger +'usermessage-summary' => 'प्रणाली सन्देश छोड़ रहा है।', +'usermessage-editor' => 'सिस्टम दूत', # Watchlist 'watchlist' => 'मेरी ध्यानसूची', 'mywatchlist' => 'मेरी ध्यानसूची', -'watchlistfor' => "('''$1''' के लिये)", +'watchlistfor2' => '$1 $2 के लिए', 'nowatchlist' => 'आपकी ध्यानसूचीमें कोईभी लेख नहीं हैं।', 'watchlistanontext' => 'अपने ध्यानसूचीमें होने वाले लेख देखने या फिर संपादित करने के लिये कॄपया $1 करें।', 'watchnologin' => 'लॉग इन नहीं किया हैं', @@ -1993,7 +2025,10 @@ $NEWPAGE 'revertpage-nouser' => '(प्रयोक्ता नाम हटाया गया है) द्वारा किए गए संपादन को वापस पुरानी स्थिति में ला कर इसके पहले के [[User:$1|$1]] द्वारा बने संस्करण को फिर से ताज़ा संस्करण बनाएँ।', 'rollback-success' => '$1 के संपादन हटायें; $2 द्वारा संपादित आखिरी अवतरण को पुनर्स्थापित किया।', -'sessionfailure' => 'ऐसा प्रतीत होता है की आपके लोगिन सत्र के साथ कोई समस्या है। + +# Edit tokens +'sessionfailure-title' => 'सत्र विफलता', +'sessionfailure' => 'ऐसा प्रतीत होता है की आपके लोगिन सत्र के साथ कोई समस्या है। सत्र अपहरण से बचाने के लिए सावधानी के तौर पर आपका यह क्रियाकलाप रद्द कर दिया गया है। कृपया "back" पर वार करें और पृष्ठ को दुबारा से लोड करें, तब दुबारा कोशिश करें।', @@ -2129,18 +2164,22 @@ $1', 'month' => 'इस महिनेसे (और पुरानें):', 'year' => 'इस सालसे (और पुराने):', -'sp-contributions-newbies' => 'सिर्फ नये सदस्योंका योगदान दर्शायें', -'sp-contributions-newbies-sub' => 'नये सदस्योंके लिये', -'sp-contributions-newbies-title' => 'नए सदस्यों द्वारा योगदान', -'sp-contributions-blocklog' => 'ब्लॉक सूची', -'sp-contributions-deleted' => 'सदस्यों को योगदान जो हटाए जा चुके हैं', -'sp-contributions-logs' => 'चिट्ठे', -'sp-contributions-talk' => 'वार्ता', -'sp-contributions-userrights' => 'सदस्य अधिकार प्रबंधन', -'sp-contributions-blocked-notice' => 'यह सदस्य फ़िलहाल अवरोधित हैं। सदंर्भ के लिए ताज़ातरीन अवरोध चिट्ठा प्रविष्टि नीचे है:', -'sp-contributions-search' => 'योगदान के लिये खोज', -'sp-contributions-username' => 'आईपी एड्रेस या सदस्यनाम:', -'sp-contributions-submit' => 'खोजिए', +'sp-contributions-newbies' => 'सिर्फ नये सदस्योंका योगदान दर्शायें', +'sp-contributions-newbies-sub' => 'नये सदस्योंके लिये', +'sp-contributions-newbies-title' => 'नए सदस्यों द्वारा योगदान', +'sp-contributions-blocklog' => 'ब्लॉक सूची', +'sp-contributions-deleted' => 'सदस्यों को योगदान जो हटाए जा चुके हैं', +'sp-contributions-uploads' => 'अपलोड', +'sp-contributions-logs' => 'चिट्ठे', +'sp-contributions-talk' => 'वार्ता', +'sp-contributions-userrights' => 'सदस्य अधिकार प्रबंधन', +'sp-contributions-blocked-notice' => 'यह सदस्य फ़िलहाल अवरोधित हैं। सदंर्भ के लिए ताज़ातरीन अवरोध चिट्ठा प्रविष्टि नीचे है:', +'sp-contributions-blocked-notice-anon' => 'यह आईपी पता अभी अवरोधित है। +नवीनतम अवरोध अभिलेख प्रविष्टि सन्दर्भ के लिए नीचे दी गई है:', +'sp-contributions-search' => 'योगदान के लिये खोज', +'sp-contributions-username' => 'आईपी एड्रेस या सदस्यनाम:', +'sp-contributions-toponly' => 'केवल उन सम्पादनों को दिखाएँ जो नवीनतम संशोधन हैं', +'sp-contributions-submit' => 'खोजिए', # What links here 'whatlinkshere' => 'यहाँ के हवाले कहाँ कहाँ हैं', @@ -2201,7 +2240,6 @@ $1', 'ipb-edit-dropdown' => 'ब्लॉक कारण संपादित करें', 'ipb-unblock-addr' => '$1 को अनब्लॉक करें', 'ipb-unblock' => 'सदस्य अथवा आईपी एड्रेस को अनब्लॉक करें', -'ipb-blocklist-addr' => '$1 के मौजूदा अवरोध', 'ipb-blocklist' => 'सद्य ब्लॉक देखें', 'ipb-blocklist-contribs' => '$1 के लिए योगदान', 'unblockip' => 'सदस्य को अनब्लॉक करें', @@ -2229,7 +2267,7 @@ $1', 'ipblocklist-empty' => 'ब्लॉक सूची खाली हैं।', 'ipblocklist-no-results' => 'पूछे गये आईपी एड्रेस / सदस्यनाम पर ब्लॉक नहीं हैं।', 'blocklink' => 'अवरोधित करें', -'unblocklink' => 'अवरोध हटाएं', +'unblocklink' => 'अवरोध हटाएँ', 'change-blocklink' => 'विभाग बदलें', 'contribslink' => 'योगदान', 'autoblocker' => 'आपका IP पता स्वत: बाध्य है, जो की हाल ही में "[[User:$1|$1]]" द्वारा प्रयोग किया गया है। @@ -2275,6 +2313,8 @@ $1 पहले ही अवरोधित है। 'sorbs_create_account_reason' => '{{SITENAME}} के DNSBL ने आपका आईपी एड्रेस ओपन प्रोक्सी करके सूचित किया हैं। आप खाता खोल नहीं सकतें।', 'cant-block-while-blocked' => 'आप खुद ही अवरोधित हैं इसलिए इस समय आप औरों को अवरोधित नहीं कर सकते हैं।', 'cant-see-hidden-user' => 'कठबोली छुपा उपयोगकर्ता देखना', +'ipbblocked' => 'आप अन्य प्रयोक्ताओं को अवरोधित या अनवरोधित नहीं कर सकते, क्योंकि आप स्वयं अवरोधित हैं', +'ipbnounblockself' => 'आपको स्वयं को अनवरोधित करने की अनुमति नहीं है', # Developer tools 'lockdb' => 'डाटाबेस लॉक करें', @@ -2352,7 +2392,7 @@ $1 पहले ही अवरोधित है। '1movedto2' => '[[$1]] का नाम बदलकर [[$2]] कर दिया गया है', '1movedto2_redir' => '[[$1]] यह लेख का नाम बदल कर [[$2]] कर दिया गया हैं (अनुप्रेषित)', 'move-redirect-suppressed' => 'पुनर्निर्देशन नहीं किया गया', -'movelogpage' => 'स्थानांतरण सूची', +'movelogpage' => 'स्थानान्तरण सूची', 'movelogpagetext' => 'नाम बदले गये लेखोंकी सूची नीचे दी गई हैं।', 'movesubpage' => '{{PLURAL:$1|उप पन्ना|उप पन्ने}}', 'movesubpagetext' => 'नीचे $1 {{PLURAL:$1|पन्ना दिखाया गया है, जो इस पन्ने का उप पन्ना है|पन्ना दिखाया गया है, जो इस पन्ने के उप पन्ने हैं}}।', @@ -2373,6 +2413,7 @@ $1 पहले ही अवरोधित है। 'immobile-source-page' => 'इस पन्ने का स्थानांतरण नहीं किया जा सकता है।', 'immobile-target-page' => 'इस गंतव्य शीर्षक पर नहीं ले जाया जा सकता है।', 'imagenocrossnamespace' => 'संचिका को ग़ैर-संचिका नामस्थान में स्थानांतरित नहीं किया जा सकता है', +'nonfile-cannot-move-to-file' => 'असञ्चिका को सञ्चिका नामस्थान में नहीं ले जाया जा सकता', 'imagetypemismatch' => 'संचिका का नया विस्तार उसकी किस्म से मेल नहीं खा रहा है', 'imageinvalidfilename' => 'लक्ष्यित संचिका नाम अवैध है', 'fix-double-redirects' => 'मूल शीर्षक तक जाने वाले सभी पुनर्निर्देशनों को भी बदलें', @@ -2481,10 +2522,10 @@ $1 पहले ही अवरोधित है। 'tooltip-pt-anonuserpage' => 'आप जिस आईपी से बदलाव कर रहें हैं उसका सदस्य पान', 'tooltip-pt-mytalk' => 'आपका वार्ता पन्ना', 'tooltip-pt-anontalk' => 'इस आईपी एड्रेससे हुए बदलावों के बारे में वार्ता', -'tooltip-pt-preferences' => 'आपकी वरीयताएं', +'tooltip-pt-preferences' => 'आपकी वरीयताएँ', 'tooltip-pt-watchlist' => 'आपने ध्यान दिये हुए पन्नोंकी सूची', 'tooltip-pt-mycontris' => 'आपके योगदानों की सूची', -'tooltip-pt-login' => 'आपसे सत्रारंभ करने की गुज़ारिश है; लेकिन यह लाज़मी नहीं है', +'tooltip-pt-login' => 'आपको सत्रारम्भ करने के लिए प्रोत्साहित किया जाता है; लेकिन यह अनिवार्य नहीं है', 'tooltip-pt-anonlogin' => 'आप लॉग इन करें, जबकि यह अत्यावश्यक नहीं हैं।', 'tooltip-pt-logout' => 'सत्रान्त', 'tooltip-ca-talk' => 'सामग्री पन्ने के बारे में वार्तालाप', @@ -2506,11 +2547,11 @@ $1 पहले ही अवरोधित है। 'tooltip-p-logo' => 'मुख पृष्ठ', 'tooltip-n-mainpage' => 'मुखपृष्ठ पर जाएँ', 'tooltip-n-mainpage-description' => 'मुखपृष्ठ पर जाएँ', -'tooltip-n-portal' => 'परियोजना के बारे में, आप क्या कर सकतें हैं, मदद कहाँ से लें', +'tooltip-n-portal' => 'परियोजना के बारे में, आप क्या कर सकतें हैं, सहायता कहाँ से लें', 'tooltip-n-currentevents' => 'हालकी घटनाओं की पृष्ठभूमि प्राप्त करें', -'tooltip-n-recentchanges' => 'विकि में हाल में हुए बदलावों की फ़ेरहिस्त', +'tooltip-n-recentchanges' => 'विकि में हाल में हुए बदलावों की सूची', 'tooltip-n-randompage' => 'किसी एक लेख पर जाएँ', -'tooltip-n-help' => 'पता लगाने की जगह', +'tooltip-n-help' => 'पता लगाने का स्थान', 'tooltip-t-whatlinkshere' => 'यहाँ का हवाला देने वाले सभी विकि पन्नों की सूची', 'tooltip-t-recentchangeslinked' => 'यहां जुडे हुए सभी पन्नोंमें हुए हाल के बदलाव', 'tooltip-feed-rss' => 'इस पन्ने की आरएसएस फ़ीड', @@ -2535,13 +2576,15 @@ $1 पहले ही अवरोधित है। 'tooltip-save' => 'अपने बदलाव सँजोएँ', 'tooltip-preview' => 'अपने बदलावों की झलक देखें, कृपया सँजोने से पहले इसका इस्तेमाल करें!', 'tooltip-diff' => 'इस पाठ्यमें आपने किये हुए बदलाव देखें।', -'tooltip-compareselectedversions' => 'इस पन्नेके चुने हुए अवतरणोंमें फर्क दिखायें ।', +'tooltip-compareselectedversions' => 'इस पृष्ठ के चुने हुए अवतरणों में अन्तर देखें।', 'tooltip-watch' => 'इस पन्ने को अपनी ध्यानसूची में डालें।', 'tooltip-recreate' => 'यह पन्ना पहले हटाया होने के बावजूद फिरसे बनायें', 'tooltip-upload' => 'अपलोड शुरू करें', 'tooltip-rollback' => '"वापस ले जाएँ" इस पन्ने के पिछले योगदाता के बदलाव एक ही चटके में ग़ायब कर देता है।', 'tooltip-undo' => '"पुरानी स्थिति पर लाएँ" इस बदलाव को वापस ले जा के संपादन पर्चे को झलक रीति में दिखलाता है। इसके जरिए सारांश में पुरानी स्थिति में लाने का कारण लिखा जा सकता है।', +'tooltip-preferences-save' => 'वरीयताएं सहेजें', +'tooltip-summary' => 'एक संक्षिप्त सारांश दर्ज करें', # Stylesheets 'common.css' => '/* यहां रखी css सभी त्वचाओंपर असर करेगी */', @@ -2641,18 +2684,19 @@ $1', 'nextdiff' => 'ताज़ा संपादन →', # Media information -'mediawarning' => "'''सूचना''': इस फ़ाईलमें गलत कोड होने की आशंका हैं, इसे चलानेसे आपके सिस्टममें परेशानियां हो सकती हैं।", +'mediawarning' => 'चेतावनी मीडिया', 'imagemaxsize' => "छवि आकार सीमा:
    ''(संचिका वर्णन पन्नों के लिए)''", 'thumbsize' => 'अंगूठानख आकार:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|पन्ना|पन्ने}}', -'file-info' => '(फ़ाईल का आकार: $1, MIME प्रकार: $2)', -'file-info-size' => '($1 × $2 चित्रतत्व, संचिका का आकार: $3, माइम प्रकार: $4)', +'file-info' => 'फ़ाईल का आकार: $1, MIME प्रकार: $2', +'file-info-size' => '$1 × $2 चित्रतत्व, संचिका का आकार: $3, माइम प्रकार: $4', 'file-nohires' => 'इससे ज्यादा रिज़ोल्यूशन उपलब्ध नहीं हैं.', -'svg-long-desc' => '(SVG फ़ाईल, साधारणत: $1 × $2 पीक्सेल्स, फ़ाईलका आकार: $3)', +'svg-long-desc' => 'SVG फ़ाईल, साधारणत: $1 × $2 पीक्सेल्स, फ़ाईलका आकार: $3', 'show-big-image' => 'सम्पूर्ण रिज़ोल्यूशन', 'show-big-image-thumb' => 'इस झलक का आकार: $1 × $2 पीक्सेल्स', 'file-info-gif-looped' => 'चक्रित', 'file-info-gif-frames' => '$1 {{PLURAL:$1|ढाँचा|ढाँचे}}', +'file-info-png-looped' => 'चक्रित', # Special:NewFiles 'newimages' => 'नई फ़ाईल्सकी गैलरी', @@ -2807,6 +2851,7 @@ $1', 'exif-gpsareainformation' => 'GPS विभागका नाम', 'exif-gpsdatestamp' => 'GPS दिनांक', 'exif-gpsdifferential' => 'GPS डिफरन्शियर करेक्शन', +'exif-objectname' => 'लघु शीर्षक', # EXIF attributes 'exif-compression-1' => 'अनकॉम्प्रेस्स्ड', @@ -2953,7 +2998,7 @@ $1', 'exif-gpsdirection-m' => 'मैग्नेटिक दिशा', # External editor support -'edit-externally' => 'बाहरी प्रणालीका इस्तेमाल करते हुए इस फ़ाईल को संपादित करें ।', +'edit-externally' => 'बाहरी प्रणाली का उपयोग करते हुए इस सञ्चिका को सम्पादित करें ।', 'edit-externally-help' => '(और जानकारी के लिए [http://www.mediawiki.org/wiki/Manual:External_editors जमाव निर्देश] देखें)', # 'all' in various places, this might be different for inflected languages @@ -3154,6 +3199,7 @@ $1', 'version-specialpages' => 'विशेष पन्ने', 'version-parserhooks' => 'पार्सर हूक', 'version-variables' => 'वेरिएबल', +'version-skins' => 'त्वचाएं', 'version-other' => 'अन्य', 'version-mediahandlers' => 'मीडिया संचालक', 'version-hooks' => 'हूक', @@ -3191,7 +3237,7 @@ $1', 'fileduplicatesearch-result-n' => 'फ़ाईल "$1" में {{PLURAL:$2|1 द्विरावृत्ति|$2 द्विरावृत्तियाँ}} मिले हैं।', # Special:SpecialPages -'specialpages' => 'खास पन्ने', +'specialpages' => 'विशेष पृष्ठ', 'specialpages-note' => '---- * साधारण विशेष पृष्ठ। * प्रतिबंधित विशेष पृष्ठ।', @@ -3235,6 +3281,15 @@ $1', 'tags-edit' => 'सम्पादन', 'tags-hitcount' => '$1 {{PLURAL:$1|बदलाव|बदलाव}}', +# Special:ComparePages +'comparepages' => 'पृष्ठों की तुलना करें', +'compare-selector' => 'पृष्ठ संशोधन की तुलना करें', +'compare-page1' => 'पृष्ठ १', +'compare-page2' => 'पृष्ठ २', +'compare-rev1' => 'पुनरीक्षण १', +'compare-rev2' => 'पुनरीक्षण २', +'compare-submit' => 'तुलना करें', + # Database error messages 'dberr-header' => 'इस विकि को कुछ दिक्कत आ रही है', 'dberr-problems' => 'क्षमा करें! इस जालस्थल को कुछ तकनीकी परेशानियों का सामना करना पड़ रहा है।', @@ -3251,8 +3306,12 @@ $1', 'htmlform-float-invalid' => 'आपके द्वारा निर्दिष्ट मान संख्या नहीं है।', 'htmlform-int-toolow' => 'आपके द्वारा निर्दिष्ट मान न्यूनतम $1 से कम है', 'htmlform-int-toohigh' => 'आपके द्वारा निर्दिष्ट मान अधिकतम $1 से ज़्यादा है', +'htmlform-required' => 'इस मान की आवश्यकता है', 'htmlform-submit' => 'जमा करें', 'htmlform-reset' => 'बदलाव पुरानी स्थिति पर लाएँ', 'htmlform-selectorother-other' => 'अन्य', +# SQLite database support +'sqlite-has-fts' => '$1 पूर्ण पाठ खोज समर्थन के साथ', + ); diff --git a/languages/messages/MessagesHif_deva.php b/languages/messages/MessagesHif_deva.php deleted file mode 100644 index 78dc35fe..00000000 --- a/languages/messages/MessagesHif_deva.php +++ /dev/null @@ -1,20 +0,0 @@ - 'बातचीत', - -# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). -'mainpage' => 'मुख्य पृष्ठ', - -); diff --git a/languages/messages/MessagesHif_latn.php b/languages/messages/MessagesHif_latn.php index 3429ac57..9104bc6b 100644 --- a/languages/messages/MessagesHif_latn.php +++ b/languages/messages/MessagesHif_latn.php @@ -29,8 +29,7 @@ $messages = array( 'tog-editsection' => '[Badlao] ke jorr se section ke badlao se enable karo', 'tog-editsectiononrightclick' => 'Bhaag ke title pe right click kare pe bhaag ke badle ke laabu karo (JavaScript)', 'tog-showtoc' => 'Dhyan suchi dekhao (uu panna khatir jon me tiin se jaada heading hai)', -'tog-rememberpassword' => 'Ii computer me hamaar login yaad rakho', -'tog-editwidth' => 'Badlao ke dabba ke barrhae ke screen ke fill karo', +'tog-rememberpassword' => 'Ii browser me (jaada se jaada $1 {{PLURAL:$1|din|din}}) talak hamaar login ke yaad rakho.', 'tog-watchcreations' => 'Hamaar banawa waala panna ke hamaar dhyaan suchi me jorro', 'tog-watchdefault' => 'Ham se badla gae panna ke hamaar dhyaan suchi me jorro', 'tog-watchmoves' => 'Uu panna jiske naam ham badla hai ke hamaar dhyaan suchi me jorro', @@ -175,31 +174,21 @@ $messages = array( 'faqpage' => 'Project:Sab time puchhe waala sawal', # Vector skin -'vector-action-addsection' => 'Topic jorro', -'vector-action-delete' => 'Mitao', -'vector-action-move' => 'Naam badlo', -'vector-action-protect' => 'Bachao', -'vector-action-undelete' => 'Pahile jaise karo', -'vector-action-unprotect' => 'Nai bachao', -'vector-namespace-category' => 'Vibhag', -'vector-namespace-help' => 'Madat waala panna', -'vector-namespace-image' => 'File', -'vector-namespace-main' => 'Panna', -'vector-namespace-media' => 'Chapa aur awaaj waala panna', -'vector-namespace-mediawiki' => 'Sandes', -'vector-namespace-project' => 'Project panna', -'vector-namespace-special' => 'Khaas panna', -'vector-namespace-talk' => 'Salah', -'vector-namespace-template' => 'Template', -'vector-namespace-user' => 'Sadasya ke panna', -'vector-view-create' => 'Banao', -'vector-view-edit' => 'Badlo', -'vector-view-history' => 'Itihaas dekho', -'vector-view-view' => 'Parrho', -'vector-view-viewsource' => 'Source dekho', -'actions' => 'Karam', -'namespaces' => 'Naam', -'variants' => 'Antar', +'vector-action-addsection' => 'Topic jorro', +'vector-action-delete' => 'Mitao', +'vector-action-move' => 'Naam badlo', +'vector-action-protect' => 'Bachao', +'vector-action-undelete' => 'Pahile jaise karo', +'vector-action-unprotect' => 'Nai bachao', +'vector-simplesearch-preference' => 'Aur achchhaa se khoje salah do (Khaali vector skin)', +'vector-view-create' => 'Banao', +'vector-view-edit' => 'Badlo', +'vector-view-history' => 'Itihaas dekho', +'vector-view-view' => 'Parrho', +'vector-view-viewsource' => 'Source dekho', +'actions' => 'Karam', +'namespaces' => 'Naam', +'variants' => 'Antar', 'errorpagetitle' => 'Galti', 'returnto' => '$1 pe lauto.', @@ -260,6 +249,9 @@ Bahut dher sadasya ii panna ke dekhe maange hae. Meharbani kar ke, thora deri sabur kar ke ii panna ke fir se kholo. $1', +'pool-timeout' => 'Lock ke wait kare waala time khalaas hoe gais hae', +'pool-queuefull' => 'Pool ke line bhar gais hae', +'pool-errorunknown' => 'Pata nahi kaisan galti hae', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} ke baare me', @@ -424,7 +416,8 @@ Aapan [[Special:Preferences|{{SITENAME}} pasand]] ke badle nai bhulna.', 'yourname' => 'Username:', 'yourpassword' => 'Password:', 'yourpasswordagain' => 'Password fir se type karo:', -'remembermypassword' => 'Ii computer pe hamaar login yaad rakho', +'remembermypassword' => 'Ii computer pe hamaar login yaad rakho (jaada se jaada $1 {{PLURAL:$1|din|din}} talak)', +'securelogin-stick-https' => 'Login kare ke baad HTTPS se connected raho', 'yourdomainname' => 'Aap ke domain:', 'externaldberror' => 'Koi bahaari database authentication error hai, nai to aap ke bahaari account badle ke adhikar nai hai.', 'login' => 'Log in karo', @@ -441,17 +434,18 @@ Aapan [[Special:Preferences|{{SITENAME}} pasand]] ke badle nai bhulna.', 'gotaccount' => "Aap ke pas pahile se account hai ki nai? '''$1'''.", 'gotaccountlink' => 'Log in', 'createaccountmail' => 'e-mail se', -'badretype' => 'Jon duuno password aap likha hai uu ek rakam nai hai.', -'userexists' => 'Ii username aur koi ke hai. -Duusra username choose karo.', -'loginerror' => 'Login me galti hai', +'createaccountreason' => 'Kaaran:', +'badretype' => 'Jon duuno password aap likha hai uu ek rakam nai hae.', +'userexists' => 'Ii username aur koi ke hae. +Duusra username ke choose karo.', +'loginerror' => 'Login me kuchh wrong hae', 'createaccounterror' => 'Account ke nai banae sakaa hae: $1', -'nocookiesnew' => 'Aap ke account banae dewa gais hai lekin aap loggen in nai hai. -{{SITENAME}} me sadasya ke login khatir cookies hai. -Aap cookies ke disabled karaa hai. +'nocookiesnew' => 'Aap ke account banae dewa gais hae lekin aap logged in nai hae. +{{SITENAME}} me sadasya ke login khatir cookies hae. +Aap cookies ke rok diya hae. Cookies ke enable kar ke, aapan nawaa username aur password se login karo.', -'nocookieslogin' => '{{SITENAME}} me sadasya ke login khatir cookies hai. -Aap cookies ke disabled karaa hai. +'nocookieslogin' => '{{SITENAME}} me sadasya ke login khatir cookies hae. +Aap cookies ke disabled karaa hae. Cookies ke enable kar ke fir se kosis karo.', 'noname' => 'Aap achchha user name ke nai specify karaa hai.', 'loginsuccesstitle' => 'Login safal bhais', @@ -467,6 +461,7 @@ Aapan spelling check karo.', 'wrongpasswordempty' => 'Koi password nai likha gais hai. Fir se kosis karo.', 'passwordtooshort' => 'Password me kamti se kamti {{PLURAL:$1|1 character|$1 characters}} hoe ke chahi.', 'password-name-match' => 'Aap ke password ke aap ke username se different rahe ke chaahi.', +'password-login-forbidden' => 'Ii sadasya ke naam aur password ke kaam me laae ke ijaajat nai hae.', 'mailmypassword' => 'Nawaa password ke E-mail karo', 'passwordremindertitle' => '{{SITENAME}} ke khatir nawaa temporary password', 'passwordremindertext' => 'Koi (hoe sake hai aap, IP address $1 se) @@ -505,6 +500,9 @@ Thora deri baad fir se kosis karna.', 'loginlanguagelabel' => 'Bhasa: $1', 'suspicious-userlogout' => 'Aap ke log out kare ke maang ke na kar dewa gais hae kaahe ki ii janaawe hae ki ii maang ke ek tuuta browser nai to caching proxy bhejis hae.', +# E-mail sending +'php-mail-error-unknown' => 'PHP ke mail() function me koi anjaan kharaabi hae', + # Password reset dialog 'resetpass' => 'Password ke badlo', 'resetpass_announce' => 'Aap ek temporary e-mailed code se login bhaya hai @@ -556,11 +554,12 @@ Sait aap password ke safalta se badal sia hoga nai to nawaa temporary password k 'showdiff' => 'Badlao dekhao', 'anoneditwarning' => "'''Sawadhaan:''' Aap login nai karaa hai Aap ke IP address ii panna ke edit itihaas me record karaa jaai.", +'anonpreviewwarning' => '"Aap log in nai bhaya hae. Ii panna ke bachae pe aap ke IP address ke panna ke badlao ke itihass me likha jaai."', 'missingsummary' => "'''Suchna:''' Aap badlao ke sanchhit me nai likha hai. Agar aap Save ke fir se click karaa tab, aap ke badlao bina summary ke save kar lewa jaai.", 'missingcommenttext' => 'Meharbani kar ke niche aapan vichar deo.', -'missingcommentheader' => "'''Suchna:''' Aap ii vichar ke vishay nai likha hai. -Agar aap Save pe click karaa tab bina vishay ke iske save kar lewa jaai.", +'missingcommentheader' => "'''Chetauni:''' Aap ii vichar ke vishay nai likha hai. +Agar aap \"{{int:savearticle}}\" pe click karaa tab bina vishay ke iske bachae lewa jaai.", 'summary-preview' => 'Sanchhep jhalak:', 'subject-preview' => 'Suchi ke jhalak:', 'blockedtitle' => 'Sadasya ke rok dewa gais hai', @@ -636,8 +635,12 @@ Sab se nawaa block log entry, aap ke reference ke khatir, niche dewa gais hae:' 'usercsspreview' => "'''Yaad rakhna ki aap khali aapan CSS ke jhalak dekhta hai. Iske abhi save nai karaa gais hai!'''", 'userjspreview' => "'''Yaad rakhna ki aap khali aapan JavaScript ke testing/previewing karta hai, iske abhi save nai karaa gais hai!'''", +'sitecsspreview' => " '''Yaad rakhna ki aap ii CSS ke khaali preview kartaa hae.''' +'''Iske abhi talak bachawa nai gais hae!'''", +'sitejspreview' => " '''Yaad rakhna ki aap ii JavaScript code ke khaali preview kartaa hae.''' +'''Iske abhi talak bachawa nai gais hae!'''", 'userinvalidcssjstitle' => "'''Warning:''' Koi skin \"\$1\" nai hai. -Yaad rakhna ki custom .css aur .js panna owercase title use kare hai, jaise ki {{ns:user}}:Foo/monobook.css aur{{ns:user}}:Foo/Monobook.css nai.", +Yaad rakhna ki custom .css aur .js panna owercase title use kare hai, jaise ki {{ns:user}}:Foo/vector.css aur{{ns:user}}:Foo/Vector.css nai.", 'updated' => '(Update kar dewa gais hai)', 'note' => "'''Dhyan rakkho:'''", 'previewnote' => "'''Ii khali ek jhalak dekhae hai; badlao abhi save nai bhae hai!'''", @@ -677,8 +680,6 @@ Aap ii bhi waada kartaa hai ki iske aap likha hai aur koi duusra jagah se copy n Agar aap nai mangta ki koi aur aap ke yogdaan ke badle, tab aap hian par nai likho.
    Aap ii bhi kasam khata hai ki aap iske apne se likha hai aur kahin se copy nai karaa hai (Aur jaankari khatir $1 ke dekho). ''' COPYRIGHT WORK KE BINA AUNUMATI KE SUBMIT NAI KARNA!'''", -'longpagewarning' => "'''Chetauni:''' Ii panna $1 kilobytes lamba hae; kuch browsers sait etna barra panna ke khole nai pai. -Meherbani kar ke ii panna ke chota chota tukrra me kar do.", 'longpageerror' => "'''ERROR: Jon text aap submit karaa hai uu $1 kilobytes lamba hai, ii maximum $2 kilobytes se lamba hai. Iske save nai karaa jae sake hai.'''", 'readonlywarning' => "'''WARNING: Database ke maintenance khatir band kar dewa gais hai, tab abhi aap aapan badlao ke save nai kare paega. @@ -786,7 +787,7 @@ Saait iske wiki me se mitae dewa gae hoi, nai to iske naam badal dewa gae hoi. Try karo [[Special:Search|wiki me khije ke]] aur nawaa panna ke.', # Revision deletion -'rev-deleted-comment' => '(comment ke hatae dewa gais hai)', +'rev-deleted-comment' => '(badlao ke summary ke hatae dewa gais hae)', 'rev-deleted-user' => '(username ke hatae dewa gais hai)', 'rev-deleted-event' => '(log action ke hatae dewa gais hai)', 'rev-deleted-user-contribs' => '[Sadasya ke naam nai to IP address ke hatae dewa gais hae- yogdaan se badlao ke lukae dewa gais hae]', @@ -857,6 +858,8 @@ $1", 'logdelete-failure' => "'''Log ke nai dekhawa jaae sake hae:''' $1", 'revdel-restore' => 'Badlo ki ii dekhe me kaise lage hae', +'revdel-restore-deleted' => 'mitawa gais badlao', +'revdel-restore-visible' => 'badlao, jiske aap dekhe saktaa hae', 'pagehist' => 'Panna ke itihaas', 'deletedhist' => 'Mitawa gae itihass', 'revdelete-content' => 'suchi', @@ -926,11 +929,13 @@ Ii baat ke dhyan me rakhna ki navigation jorr ke kaam me laae se ii column reset # Diffs 'history-title' => '"$1" ke sansodhan ke itihaas', 'difference' => '(Badlao me farak)', +'difference-multipage' => '(Panna ke biich ke antar)', 'lineno' => 'Rekha $1:', 'compareselectedversions' => 'Chuna gae version ke compare karo', 'showhideselectedversions' => 'Chuna gae versions ke dekhao/lukao', 'editundo' => 'Pahile jaise kar do', -'diff-multi' => '({{PLURAL:$1|Ek biich waala badlao|$1 biich waala badlao}} nai dekhawa jae hai.)', +'diff-multi' => '({{PLURAL:$1|Ek biich waala badlao|$1 biich waala badlao}} jiske {{PLURAL:$2|sadasya|$2 sadasya}} karis hae, ke nai dekhawa jae hai.)', +'diff-multi-manyusers' => '({{PLURAL:$1|Ek biich waala badlao|$1 biich waala badlao}} jiske {{PLURAL:$2|sadasya|$2 sadasya}} se jaada log karin hae, ke nai dekhawa jae hai.)', # Search results 'searchresults' => 'Khoj ke natija', @@ -965,6 +970,7 @@ Ii baat ke dhyan me rakhna ki navigation jorr ke kaam me laae se ii column reset 'searchprofile-everything-tooltip' => 'Sab content me khojo (baat waala panna bhi)', 'searchprofile-advanced-tooltip' => 'Custom namespaces me khojo', 'search-result-size' => '$1 ({{PLURAL:$2|1 sabd|$2 sabd}})', +'search-result-category-size' => ' {{PLURAL:$1|1 sadasya|$1 sadasya}} ({{PLURAL:$2|1 chhota vibhag|$2 chhota vibhag}}, {{PLURAL:$3|1 file|$3 files}})', 'search-result-score' => 'Len den: $1%', 'search-redirect' => '(redirect $1)', 'search-section' => '(section $1)', @@ -1042,6 +1048,7 @@ Yaad rakhna ki uu log ke {{SITENAME}} ke index saait purana hoi.', 'contextlines' => 'Ek hit me ketnaa line hae:', 'contextchars' => 'Ek line me ketnaa context hae:', 'stub-threshold' => 'Threshold ke khatir stub link formatting (bytes):', +'stub-threshold-disabled' => 'Band kar dewa gais hae', 'recentchangesdays' => 'Nawaa badlao me ketna roj dekhawa jaae:', 'recentchangesdays-max' => '(sab se jaada $1 {{PLURAL:$1|din|din}})', 'recentchangescount' => 'Default se ketnaa badlao ke dekhae ke chaahi:', @@ -1075,6 +1082,7 @@ Hian pe ek, apne se banaa sabd hae, jiske aap kaam me laae saktaa hae: $1', 'prefs-files' => 'File ke naam', 'prefs-custom-css' => 'CSS ke aapan khatir badlo', 'prefs-custom-js' => 'Ruchi ke anusar JS', +'prefs-common-css-js' => 'Sab skins ke khatir, baata gais CSS/JavaScript', 'prefs-reset-intro' => 'Aap ii panna ke kaam me laae ke site defaults ke aapan preferences ke reset kare sakta hai. Iske pahile jaise nai karaa jaawe sake hai.', 'prefs-emailconfirm-label' => 'E-mail ke confirm karaa jaawe hai:', @@ -1112,9 +1120,15 @@ Aap duusra log ke aap se aapan user_talk panna se aap ke contact kar le de sakta 'prefs-advancedrendering' => 'Uchchaa pasand', 'prefs-advancedsearchoptions' => 'Uchchaa pasand', 'prefs-advancedwatchlist' => 'Uchchaa pasand', -'prefs-display' => 'Dekhae waala option', +'prefs-displayrc' => 'Choice dekhao', +'prefs-displaysearchoptions' => 'Choice dekhao', +'prefs-displaywatchlist' => 'Choice dekhao', 'prefs-diffs' => 'Farka', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'E-mail address kanuni hae', +'email-address-validity-invalid' => 'Ek kanuni e-mail ke likho', + # User rights 'userrights' => 'Sadasya ke adhikaar ke chalao', 'userrights-lookup-user' => 'Sadasya ke group ke manage karo', @@ -1198,6 +1212,7 @@ Aap duusra log ke aap se aapan user_talk panna se aap ke contact kar le de sakta 'right-hideuser' => 'Username ke roko, jisse ki janta iske dekhe nai sake', 'right-ipblock-exempt' => 'IP blocks, auto-blocks aur range blocks ke bagal se aae jao', 'right-proxyunbannable' => 'Proxies ke automatic blocks ke bypass karo', +'right-unblockself' => 'Apne ke unblock karo', 'right-protect' => 'Protection level ke badlo aur bachawa gais panna ke badlo', 'right-editprotected' => 'Bachawa gais panna ke badlo (without cascading protection)', 'right-editinterface' => 'User interface ke badlo', @@ -1220,7 +1235,6 @@ Aap duusra log ke aap se aapan user_talk panna se aap ke contact kar le de sakta 'right-siteadmin' => 'Database ke band karo aur kholo', 'right-reset-passwords' => 'Duusra sadasya ke password ke badlo', 'right-override-export-depth' => 'Panna aur jurra panna, 5 ke gahirrai talak, ke export karo', -'right-versiondetail' => 'Program ke baare me aur jaankari dekhao', 'right-sendemail' => 'Duusra sadasya ke lage e-mail bhejo', # User rights log @@ -1271,14 +1285,9 @@ Aap duusra log ke aap se aapan user_talk panna se aap ke contact kar le de sakta 'recentchanges-legend' => 'Nawaa badlao options', 'recentchangestext' => 'Wiki me ii panna ke nawaa badlao pe dhyan rakho.', 'recentchanges-feed-description' => 'Abhi haali me bhae ii wiki ke feed me ke track karo.', -'recentchanges-label-legend' => 'Matlab: $1', -'recentchanges-legend-newpage' => '$1 - nawaa panna', 'recentchanges-label-newpage' => 'Ii badlao ek nawaa panna banais hae', -'recentchanges-legend-minor' => '$1 - chhota badlao', 'recentchanges-label-minor' => 'Ii ek chhota badlao hae', -'recentchanges-legend-bot' => '$1 - bot se badlao', 'recentchanges-label-bot' => 'Ii badlao ke ek bot karis hae', -'recentchanges-legend-unpatrolled' => '$1 - bina pahraa dewa gais badlao', 'recentchanges-label-unpatrolled' => 'Ii badlao pe abhi pahraa nai dewa gais hae.', 'rcnote' => "Niche {{PLURAL:$1|hai '''1''' badlao|aakhri hai '''$1''' badlao}} pahile {{PLURAL:$2|din|'''$2''' din}}, $5, $4 talak.", 'rcnotefrom' => "Niche '''$2''' se badlao hai ('''$1''' tak )", @@ -1325,6 +1334,8 @@ Panna jon [[Special:Watchlist|aap ke dhyan suchi]] me hae '''mota''' kara gais 'upload_directory_missing' => 'Upload directory ($1) nai hai aur webserver iske nai banae sakis hai.', 'upload_directory_read_only' => 'Upload directory ($1) ke webserver nai likhe sake hai.', 'uploaderror' => 'Upload nai hoe paais hai', +'upload-recreate-warning' => '"\'Chetauni: Ii naam ke file ke mitae dewa gais rahaa, nai to naam badla gais rahaa."\' +Hian pe mitae waala suchi aur naam badle waala suchi ke aap ke dekhe ke khatir dewa gais hae:', 'uploadtext' => "Niche waala form ke use kar ke file upload karo. Pahile upload karaa file ke dekhe khatir [[Special:FileList|list of uploaded files]] jao, (re)uploads are also logged in the [[Special:Log/upload|upload log]], deletions in the [[Special:Log/delete|deletion log]]. @@ -1360,6 +1371,17 @@ Maange waala {{PLURAL:\$3|file ke rakam hai|file ke rakam hai}} \$2.", 'filetype-banned-type' => "'''\".\$1\"''' ke rakam ke file hian pe allowed nai hai. Allowed {{PLURAL:\$3|rakam ke file hai|rakam ke fle hai}} \$2.", 'filetype-missing' => 'File ke koi extension nai hai (jaise ki ".jpg").', +'empty-file' => 'Aap ke bheja gais panna khaali hae.', +'file-too-large' => 'Aap ke bheja gais panna bahut barraa hae.', +'filename-tooshort' => 'File ke naam bahut chhota hae.', +'filetype-banned' => 'Ii rakam ke file ke rok dewa gais hae.', +'verification-error' => 'Ii file ke verify nai karaa jaae sakaa hae.', +'hookaborted' => 'Jon chij ke aap badle mangaa rahaa, ke extension hook rok diis hae.', +'illegal-filename' => 'Ii naam ke file ke banae ke ijajat nai hae.', +'overwrite' => 'Abhi ke file ke uppar fir se likhe ke ijajat nai hae.', +'unknown-error' => 'Ek anjaan galti hoe gais hae.', +'tmp-create-error' => 'Temporary file ke nai banae sakaa hae.', +'tmp-write-error' => 'Temporary file me likhe me galti hoe gais hae.', 'large-file' => 'Ii salah hai ki file ke size $1 se barraa nai rahe; ii file hai $2', 'largefileserver' => 'Ii file, jetna ki server allow kare hai, se barraa hai.', @@ -1388,13 +1410,14 @@ Agar jo aap fir bhi aapan file ke upload kare mangta hai, tab pichhe jaae ke naw Agar jo aap fir bhi aapan file upload kare manta hai tab pichhe jaae ke nawaa naam use karo. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Ii file following file ke duplicate hai {{PLURAL:$1|file|files}}:', 'file-deleted-duplicate' => 'Yahii rakam ke ek aur file ([[:$1]]) ke pahile delete karaa gais hai. Aap ke file ke deletion history ke check kare ke chaahi, upload kare se pahile.', -'successfulupload' => 'Upload safal bhais', 'uploadwarning' => 'Upload ke baare me chetauni', 'uploadwarning-text' => 'Meharbani kar ke file ke baaare me aur jankari ke niche badal ke aur fir se kosis karo.', 'savefile' => 'File ke save karo', 'uploadedimage' => '"[[$1]]" ke upload kar dewa gae', 'overwroteimage' => '"[[$1]]" ke nawaa version ke upload karaa gais hai', 'uploaddisabled' => 'Uploads ke disable kar dewa gais hai', +'copyuploaddisabled' => 'URL se upload kare pe rok lagae dewa gais hae.', +'uploadfromurl-queued' => 'Aap ke upload ke line me kar dewa gais hae.', 'uploaddisabledtext' => 'File uploads ke disable kar dewa gais hai.', 'php-uploaddisabledtext' => 'File uploads ke PHP me disable kar dewa gais hai. Meharbani kar ke file_uploads setting ke check karo.', 'uploadscripted' => 'Ii file me HTML nai to script code hai jiske web browser erroneously interpret kare sake hai.', @@ -1414,6 +1437,14 @@ Aap ke ii soche ke chaahi ki ii file ke upload karna appropriate hai ki nai. Aap ke subidha khatir deletion log hian pe hai:", 'filename-bad-prefix' => "Jon file aap upload kartaa hai uske naam '''\"\$1\"''' se suruu hoe hai, jon ki non-descriptive naam hai jiske jaada kar ke digital camera automatically assign kare hai. Meharbaani kar ke aur jaada descriptive filename chose karo.", +'upload-success-subj' => 'Upload safal bhais', +'upload-success-msg' => 'Aap ke upload [$2] se safal bhais. Iske hian pe dekhe saktaa hae: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Upload kare me kuchh karrbarr hoe gais hae', +'upload-failure-msg' => 'Aap ke [$2] se uploadkare me kuchh garrbarr hoe gais hae: + +$1', +'upload-warning-subj' => 'Upload ke baare me chetauni', +'upload-warning-msg' => '[$2] se upload kare me kuch karrbarr hoe gais hae. Aap [[Special:Upload/stash/$1|upload form]] me laut ke ii garrbarri ke sidha kare sakta hae.', 'upload-proto-error' => 'Protocol right nai hai', 'upload-proto-error-text' => 'Duur ke upload maange hai URLs jon ki suruu hoe hai http:// nai to ftp://.', @@ -1479,6 +1510,7 @@ Column header me click kare se sorting badal jaai.', 'listfiles_search_for' => 'Media ke naam khojo:', 'imgfile' => 'file', 'listfiles' => 'Chapa ke suchi', +'listfiles_thumb' => 'Chhota chapa', 'listfiles_date' => 'Tarik', 'listfiles_name' => 'Naam', 'listfiles_user' => 'Sadasya', @@ -1593,8 +1625,8 @@ Templates ke delete kare se pahile duusra links ke bhi check kare ke nai bhulna. 'statistics-edits' => '{{SITENAME}} ke suruu hoe se panna ke badlao', 'statistics-edits-average' => 'Average badlao per panna', 'statistics-views-total' => 'Views kul jorr', +'statistics-views-total-desc' => 'Jon pana abhi banawa nai gais hae aur khaas panna ke include nai karaa gais hae', 'statistics-views-peredit' => 'Views per badlao', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Job queue] lambai', 'statistics-users' => 'Registered [[Special:ListUsers|sadasya]]', 'statistics-users-active' => 'Active sadasya', 'statistics-users-active-desc' => 'Sadasya jon ki pichhle {{PLURAL:$1|din|$1 din}} me kuchh karin hai.', @@ -1607,9 +1639,9 @@ They should link to the appropriate topic instead.
    A page is treated as disambiguation page if it uses a template which is linked from [[MediaWiki:Disambiguationspage]]", 'doubleredirects' => 'Dugna redirects', -'doubleredirectstext' => 'Ii panna uu panna ke suchi de hai jon ki duusra redirect panna pe redirect kare hai. +'doubleredirectstext' => 'Ii panna uu panna ke suchi de hai jon ki duusra redirect panna pe redirect kare hai. Sab row me pahila aur duusra redirect ke jorr hae, aur isme duusra redirect ke nisana bhi hae, jon ki jaada kar ke "aslii" nisana waala panna, jon ki pahila redirect ke dekhae hae. -Mitawa gais entires ke solve kar dewa gais hae.', +Mitawa gais entires ke solve kar dewa gais hae.', 'double-redirect-fixed-move' => '[[$1]] ke naam badal dewa gais hai, ab ii [[$2]] pe redirect kare hai', 'double-redirect-fixer' => 'Redirect ke banae waala', @@ -1632,6 +1664,8 @@ Sab row me pahila aur duusra redirect ke jorr hae, aur isme duusra redirect ke n 'nmembers' => '$1 {{PLURAL:$1|sadasya|sadasya}}', 'nrevisions' => '$1 {{PLURAL:$1|badlao|badlao}}', 'nviews' => '$1 {{PLURAL:$1|dafe dekha gais hai|dafe dekha gais hai}}', +'nimagelinks' => '$1 {{PLURAL:$1|panna|panna}} me kaam me lawa gais hae', +'ntransclusions' => '$1 {{PLURAL:$1|panna|panna}} me kaam me lawa gais hae', 'specialpage-empty' => 'Ii report khatir koi results nai hai.', 'lonelypages' => 'Akele waala panna', 'lonelypagestext' => 'Niche ke panna ke duusra paana jorre nai to transclude nai kare hai {{SITENAME}} me.', @@ -1790,34 +1824,40 @@ Support karaa gais protocol: $1', 'listgrouprights-removegroup-self-all' => 'Sab group ke aapan account se hatae saktaa hai', # E-mail user -'mailnologin' => 'Koi bheje waala address nai hai', -'mailnologintext' => 'Duusra logan ke lage e-mail bheje ke khatir aap ke [[Special:UserLogin|logged in]] aur [[Special:Preferences|preferences]] me thik e-mail hoew ke chaahi.', -'emailuser' => 'Ii user ke E-mail karo', -'emailpage' => 'User ke e-mail karo', -'emailpagetext' => 'Aap niche ke form ke use kar ke ii sadasya ke e-mail bheje sakta hae. +'mailnologin' => 'Koi bheje waala address nai hai', +'mailnologintext' => 'Duusra logan ke lage e-mail bheje ke khatir aap ke [[Special:UserLogin|logged in]] aur [[Special:Preferences|preferences]] me thik e-mail hoew ke chaahi.', +'emailuser' => 'Ii user ke E-mail karo', +'emailpage' => 'User ke e-mail karo', +'emailpagetext' => 'Aap niche ke form ke use kar ke ii sadasya ke e-mail bheje sakta hae. Jon e-mail address aap [[Special:Preferences|your user preferences]] me enter karaa rahaa, "From" ke e-mail rahii, jisse ki e-mail receive kare waala aap ke sidha reply kare sake hae.', -'usermailererror' => 'Mail object error return karis hai:', -'defemailsubject' => '{{SITENAME}} e-mail', -'noemailtitle' => 'E-mail address nai hai', -'noemailtext' => 'Ii sadasya thiik e-mail address nai diis hai.', -'nowikiemailtitle' => 'Koi e-mail ke ijajat nai hai', -'nowikiemailtext' => 'Ii sadasya e-mail nai le ke decide karis hai.', -'email-legend' => 'Duusra {{SITENAME}} ke sadasya ke lage ek e-mail bhejo', -'emailfrom' => 'Iske lage se:', -'emailto' => 'Iske lage:', -'emailsubject' => 'Vishay:', -'emailmessage' => 'Sandes:', -'emailsend' => 'Bhejo', -'emailccme' => 'Hamaar khabar ke ek copy ke hamaar lage e-mail karo.', -'emailccsubject' => 'Aapke $1 ke khatir khabar ke copy: $2', -'emailsent' => 'E-mail ke bhej dewa gais hai', -'emailsenttext' => 'Aap ke e-mail sandes ke bhej dewa gais hai.', -'emailuserfooter' => 'Ii e-mail ke $1, $2 ke lage "E-mail user" function ke {{SITENAME}}se kaam me laae ke bhejis hai.', +'usermailererror' => 'Mail object error return karis hai:', +'defemailsubject' => '{{SITENAME}} e-mail', +'usermaildisabled' => 'Sadasya ke e-mail ke rok dewa gais hae', +'usermaildisabledtext' => 'Aap ii wiki ke duusra sadasya ke e-mail nai bheje saktaa hae', +'noemailtitle' => 'E-mail address nai hai', +'noemailtext' => 'Ii sadasya thiik e-mail address nai diis hai.', +'nowikiemailtitle' => 'Koi e-mail ke ijajat nai hai', +'nowikiemailtext' => 'Ii sadasya e-mail nai le ke decide karis hai.', +'email-legend' => 'Duusra {{SITENAME}} ke sadasya ke lage ek e-mail bhejo', +'emailfrom' => 'Iske lage se:', +'emailto' => 'Iske lage:', +'emailsubject' => 'Vishay:', +'emailmessage' => 'Sandes:', +'emailsend' => 'Bhejo', +'emailccme' => 'Hamaar khabar ke ek copy ke hamaar lage e-mail karo.', +'emailccsubject' => 'Aapke $1 ke khatir khabar ke copy: $2', +'emailsent' => 'E-mail ke bhej dewa gais hai', +'emailsenttext' => 'Aap ke e-mail sandes ke bhej dewa gais hai.', +'emailuserfooter' => 'Ii e-mail ke $1, $2 ke lage "E-mail user" function ke {{SITENAME}}se kaam me laae ke bhejis hai.', + +# User Messenger +'usermessage-summary' => 'System sandesh likha jaae hae.', +'usermessage-editor' => 'System ke sandes de waala', # Watchlist 'watchlist' => 'Hamaar dhyan suchi', 'mywatchlist' => 'Hamaar dhyaan suchi', -'watchlistfor' => "('''$1''' ke khatir)", +'watchlistfor2' => '$1 $2 ke khatir', 'nowatchlist' => 'Aap ke dhyan suchi me koi chij nai hai.', 'watchlistanontext' => 'Aapan dhyan suchi me ke dekhe nai to badle ke khatir meharbani kar ke $1 karo.', 'watchnologin' => 'Logged in nai hai', @@ -1938,7 +1978,10 @@ Ii panna ke pichla badla [[User:$3|$3]] ([[User talk:$3|Talk]]{{int:pipe-separat 'revertpage-nouser' => '(sadasya ke namm ke hatae dewa gais hae) se karaa gais badlao ke [[User:$1|$1]] ke badlao ke rakam kar dewa gais hae.', 'rollback-success' => '$1 ke badlao ke pahile jaise kar dewa gais hai; badal ke $2 ke aakhri version kar dewa gais hai.', -'sessionfailure' => 'Aap ke login session me kuch karrbarr hai. + +# Edit tokens +'sessionfailure-title' => 'Session fail hoe gais hae', +'sessionfailure' => 'Aap ke login session me kuch karrbarr hai. iske cancel kar dewa gais hai jisse ki koi iisession ke hijack nai kar. Meharbani kar ke "back" ke press kar ke jon pana se aap aae rahaa ke fir se load karo, tab fir kosis karo.', @@ -2077,19 +2120,23 @@ $1', 'month' => 'Mahina se (aur pahile):', 'year' => 'Saal se (aur pahile):', -'sp-contributions-newbies' => 'Khaali nawaa account ke yogdaan dekhao', -'sp-contributions-newbies-sub' => 'Nawaa account khatir', -'sp-contributions-newbies-title' => 'Nawaa account ke sadasya ke yogdaan', -'sp-contributions-blocklog' => 'Suchi roko', -'sp-contributions-deleted' => 'Mitawa gais adasya ke yogdaan', -'sp-contributions-logs' => 'logs', -'sp-contributions-talk' => 'baat', -'sp-contributions-userrights' => 'sadasya ke adhikaar ke manage karo', -'sp-contributions-blocked-notice' => 'Ii sadasya ke hian pe ijajat nai hae. +'sp-contributions-newbies' => 'Khaali nawaa account ke yogdaan dekhao', +'sp-contributions-newbies-sub' => 'Nawaa account khatir', +'sp-contributions-newbies-title' => 'Nawaa account ke sadasya ke yogdaan', +'sp-contributions-blocklog' => 'Suchi roko', +'sp-contributions-deleted' => 'Mitawa gais adasya ke yogdaan', +'sp-contributions-uploads' => 'upload karaa gais file', +'sp-contributions-logs' => 'logs', +'sp-contributions-talk' => 'baat', +'sp-contributions-userrights' => 'sadasya ke adhikaar ke manage karo', +'sp-contributions-blocked-notice' => 'Ii sadasya ke hian pe ijajat nai hae. Pahile waala block log entry ke reference ke khatir niche dekhawa jaawe hae:', -'sp-contributions-search' => 'Yogdaan ke khojo', -'sp-contributions-username' => 'IP Address nai to username:', -'sp-contributions-submit' => 'Khojo', +'sp-contributions-blocked-notice-anon' => 'Ii IP address abhi rok dewa gais hae. +Sab se nawaa roke ke suchi ke, aap ke khatir, niche dewa gais hae.', +'sp-contributions-search' => 'Yogdaan ke khojo', +'sp-contributions-username' => 'IP Address nai to username:', +'sp-contributions-toponly' => 'Khaali sab se nawaa badlao ke dekhao', +'sp-contributions-submit' => 'Khojo', # What links here 'whatlinkshere' => 'Hian konchij jurre hae', @@ -2150,7 +2197,6 @@ Ii rukawat pe fir se bichar kare ke khatir [[Special:IPBlockList|IP block list]] 'ipb-edit-dropdown' => 'Badlao ke roke ke kaaran', 'ipb-unblock-addr' => '$1 ke rukawat ke khalaas karo', 'ipb-unblock' => 'Ek username nai to IP address ke rukawat ke khalaas karo', -'ipb-blocklist-addr' => '$1 ke abhi ke rukawat', 'ipb-blocklist' => 'Abhi ke rukawat ke dekho', 'ipb-blocklist-contribs' => '$1 ke yogdaan', 'unblockip' => 'Sadasya ke rukawat ke khalaas karo', @@ -2158,7 +2204,7 @@ Ii rukawat pe fir se bichar kare ke khatir [[Special:IPBlockList|IP block list]] 'ipusubmit' => 'Ii rukawat ke hatao', 'unblocked' => '[[User:$1|$1]] ke rukawat ke khalaas kar dewa gais hai', 'unblocked-id' => 'Roko $1 ke khalaas kar dewa gais hai', -'ipblocklist' => 'Roka gais IP addresses aur usernames', +'ipblocklist' => 'Roka gais sadasya', 'ipblocklist-legend' => 'Ek roka gais sadasya ke khojo', 'ipblocklist-username' => 'Username nai to IP address:', 'ipblocklist-sh-userblocks' => '$1 account rukawat', @@ -2228,6 +2274,8 @@ Aap ke ek account banae ke ijajat nai hai', 'cant-block-while-blocked' => 'Aap, jab ki apne blocked hai, duusra sadasya ke block nai kare sakta hai.', 'cant-see-hidden-user' => 'Jon sadasya ke aap roke mangtaa hae ke pahile rok ke lukae dewa gais hae. Jab ki aap ke lage hideuser adhikaar nai hae, tab aap ii sadasya ke rukawat ke nai dekhe aur badle saktaa hae.', +'ipbblocked' => 'Aap duusra sadasya ke roke nai to kohle nai sakta hae, kaahe ki aap ke bhi rokaa gais hae', +'ipbnounblockself' => 'Aap apne ke khole nai saktaa hae', # Developer tools 'lockdb' => 'Database ke band karo', @@ -2320,6 +2368,7 @@ panna ke wahi ke uppar nai save karaa jaae sake hai.', 'immobile-source-page' => 'Ii panna ke naam nai badla jaawe sake hai.', 'immobile-target-page' => 'Uu jagah pe nai move kare sakta hai.', 'imagenocrossnamespace' => 'File ke non-file namespace me hatae ke nai kare sakta hai', +'nonfile-cannot-move-to-file' => 'Ek chij jon ki file nai hae ke file waala jagha pe nai kare sakta hae', 'imagetypemismatch' => 'Nawaa file extension uske type se nai match kare hai.', 'imageinvalidfilename' => 'Jon naam pe aap badle mangtaa hai valid nai hai', 'fix-double-redirects' => 'Update any redirects that point to the original title', @@ -2400,6 +2449,7 @@ Aapan computer me save kar ke hian pe upload karo.', 'importstart' => 'Panna ke import karta hai...', 'import-revision-count' => '$1 {{PLURAL:$1|badlao|badlao}}', 'importnopages' => 'Koi panna import kare ke nai hai.', +'imported-log-entries' => '$1 {{PLURAL:$1|log entry|log entry}} ke lawa gais hae.', 'importfailed' => 'Import fail hoe gais: $1', 'importunknownsource' => 'Ayaat kare waala jagha ke rakam nai maalum.', 'importcantopen' => 'Import file ke khole nai sakaa', @@ -2497,6 +2547,8 @@ Meharbani kar ke, fir se kosis karo.', 'tooltip-rollback' => '"Rollback" ii panna ke badlao ke isse pahile waala badlao pe, ek click me, kar dewe hai', 'tooltip-undo' => '"Undo" ii badlao ke pahile jaise kar de hai aur edit form ke preview mode me khole hai. Ii summary me ek kaaran jorre ke ijajat de hai.', +'tooltip-preferences-save' => 'Pasand ke bachao', +'tooltip-summary' => 'Thora sabd me likho', # Metadata 'nodublincore' => 'Ii server ke khatir Dublin Core RDF metadata ke disable kar dewa gais hai', @@ -2592,14 +2644,17 @@ Iske execute kare se aap ke system me garrbarr hoe sake hae.", 'imagemaxsize' => "Chapa jaada se jaada ketnaa barraahoe sake hai:
    ''(file ke baare me panna)''", 'thumbsize' => 'Anguutha ke nakkhuun etna barraa:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|panna|panna}}', -'file-info' => '(file etnaa barraa: $1, MIME rakam: $2)', -'file-info-size' => '($1 × $2 pixel, file ke size: $3, MIME type: $4)', +'file-info' => 'file etnaa barraa: $1, MIME rakam: $2', +'file-info-size' => '$1 × $2 pixel, file ke size: $3, MIME type: $4', 'file-nohires' => 'Aur achchha resolution nai hai.', -'svg-long-desc' => '(SVG file, naam kare ke khatir $1 × $2 pixels, file size: $3)', +'svg-long-desc' => 'SVG file, naam kare ke khatir $1 × $2 pixels, file size: $3', 'show-big-image' => 'Puura resolution', 'show-big-image-thumb' => 'Ii preview ke size: $1 × $2 pixels', 'file-info-gif-looped' => 'Ghuum ghumae ke wahii jagha pe aawe hae', 'file-info-gif-frames' => '$1 {{PLURAL:$1|frame|frames}}', +'file-info-png-looped' => 'ghum ghumae ke wahii jagha pe aae hae', +'file-info-png-repeat' => '$1 {{PLURAL:$1|dafe|dafe}} bajawa gais hae', +'file-info-png-frames' => '$1 {{PLURAL:$1|frame|frames}}', # Special:NewFiles 'newimages' => 'Nawaa files ke gallery', @@ -2669,8 +2724,8 @@ Wahii line pe aur koi jorr exception consider karaa jai i.e. jahaan pe panna sak 'exif-colorspace' => 'Rang ke jagha', 'exif-componentsconfiguration' => 'Har ek component ke matlab', 'exif-compressedbitsperpixel' => 'Chapa ke compression mode', -'exif-pixelydimension' => 'Chapa ke thik chaurrai', -'exif-pixelxdimension' => 'Chapa ke thik uunchai', +'exif-pixelydimension' => 'Chaapa ke thiik chaurrai', +'exif-pixelxdimension' => 'Chaapa ke thiik uunchai', 'exif-makernote' => 'Manufacturer se jaankari', 'exif-usercomment' => 'Sadasysa ke bichar', 'exif-relatedsoundfile' => 'Saathe waala awaaj waala file', @@ -2686,9 +2741,9 @@ Wahii line pe aur koi jorr exception consider karaa jai i.e. jahaan pe panna sak 'exif-spectralsensitivity' => 'Ketna achchhaa se ujaala ke pakrre sake hae', 'exif-isospeedratings' => 'ISO ke raftaar rating', 'exif-oecf' => 'Optoelectronic conversion factor', -'exif-shutterspeedvalue' => 'Shutter ke raftaar', -'exif-aperturevalue' => 'Aperture', -'exif-brightnessvalue' => 'Chamak', +'exif-shutterspeedvalue' => 'APEX shutter ke raftaar', +'exif-aperturevalue' => 'APEX aperture', +'exif-brightnessvalue' => 'APEX chamak', 'exif-exposurebiasvalue' => 'Exposure bias', 'exif-maxaperturevalue' => 'Sab se jaada land aperture', 'exif-subjectdistance' => 'Chij se duuri', @@ -2775,6 +2830,7 @@ Wahii line pe aur koi jorr exception consider karaa jai i.e. jahaan pe panna sak 'table_pager_first' => 'Pahila panna', 'table_pager_last' => 'Aakhri panna', 'table_pager_limit' => 'Ek panna pe $1 chij dekhao', +'table_pager_limit_label' => 'Ek panna me etna chij rahe hae:', 'table_pager_limit_submit' => 'Jaao', # Auto-summaries @@ -2790,9 +2846,10 @@ Wahii line pe aur koi jorr exception consider karaa jai i.e. jahaan pe panna sak 'watchlisttools-raw' => 'Dhyan suchi ke apne sampadan karo', # Special:Version -'version' => 'Badlao', -'version-specialpages' => 'Khaas panna', -'version-other' => 'Duusra', +'version' => 'Badlao', +'version-specialpages' => 'Khaas panna', +'version-other' => 'Duusra', +'version-poweredby-others' => 'duusra waala', # Special:FilePath 'filepath-submit' => 'Jaao', @@ -2817,6 +2874,15 @@ Wahii line pe aur koi jorr exception consider karaa jai i.e. jahaan pe panna sak 'tags-edit' => 'badlo', 'tags-hitcount' => '$1 {{PLURAL:$1|badlao|badlao}}', +# Special:ComparePages +'comparepages' => 'Panna ke biich me antar dekho', +'compare-selector' => 'Panna ke badlao ke biih me antar dekho', +'compare-page1' => 'Panna 1', +'compare-page2' => 'Panna 2', +'compare-rev1' => 'Badlao 1', +'compare-rev2' => 'Badlao 2', +'compare-submit' => 'Antar dekho', + # Database error messages 'dberr-header' => 'Ii wiki me kuchh garrbarr hae', diff --git a/languages/messages/MessagesHil.php b/languages/messages/MessagesHil.php index 96ea5a3c..37ea3c6a 100644 --- a/languages/messages/MessagesHil.php +++ b/languages/messages/MessagesHil.php @@ -29,7 +29,7 @@ $messages = array( 'tog-editsection' => 'Sugtan ang pag-ilis sang seksyon paagi sa [ilisan] nga mga tabid', 'tog-editsectiononrightclick' => 'Sugtan ang pag-ilis sang seksyon paagi sa pagtum-ok sang natoo sa mouse sa titulo sang seksyon (nagakinahanglan sang JavaScript)', 'tog-showtoc' => 'Ipakita ang sinulatan sang nagabug-os (para sang mga panid nga may yara sang masobra sa 3 nga pangolohan)', -'tog-rememberpassword' => 'Dumdumon ang akon pagsulod sa sini nga kompyuter', +'tog-rememberpassword' => 'Dumdumon ang akon password sa sini nga brawser (para sa indi magsobra $1 {{PLURAL:$1|nga adlaw|nga mga adlaw}})', 'tog-watchcreations' => 'Idugang ang mga panid nga akon pagahimoon sa akon ginabantayan', 'tog-watchdefault' => 'Idugang ang mga panid nga akon gina-ilisan sa akon ginabantayan', 'tog-watchmoves' => 'Idugang ang mga panid nga akon pagasaylohon sa akon ginabantayan', @@ -173,20 +173,21 @@ $messages = array( 'faqpage' => 'Project:MMP', # Vector skin -'vector-action-addsection' => 'Magdugang sang topiko', -'vector-action-delete' => 'Panason', -'vector-action-move' => 'Saylohon', -'vector-action-protect' => 'Pangapinan', -'vector-action-undelete' => 'Dulaon ang pagpanas', -'vector-action-unprotect' => 'Dulaon ang pagpangapin', -'vector-view-create' => 'Himuon', -'vector-view-edit' => 'Ilisan', -'vector-view-history' => 'Lantawon ang kasaysayan', -'vector-view-view' => 'Magbasa', -'vector-view-viewsource' => 'Lantawon ang ginhalinan', -'actions' => 'Mga hulag', -'namespaces' => 'Ngalan-espasyo', -'variants' => 'Mga nagkalain-lain', +'vector-action-addsection' => 'Magdugang sang topiko', +'vector-action-delete' => 'Panason', +'vector-action-move' => 'Saylohon', +'vector-action-protect' => 'Pangapinan', +'vector-action-undelete' => 'Dulaon ang pagpanas', +'vector-action-unprotect' => 'Dulaon ang pagpangapin', +'vector-simplesearch-preference' => 'Sugtan ang mas ginpamaayo nga suhestiyon sa pagpangita (Para sa vector nga panit lamang)', +'vector-view-create' => 'Himuon', +'vector-view-edit' => 'Ilisan', +'vector-view-history' => 'Lantawon ang kasaysayan', +'vector-view-view' => 'Magbasa', +'vector-view-viewsource' => 'Lantawon ang ginhalinan', +'actions' => 'Mga hulag', +'namespaces' => 'Ngalan-espasyo', +'variants' => 'Mga nagkalain-lain', 'errorpagetitle' => 'Sala/Eror', 'returnto' => 'Balik sa $1.', @@ -247,6 +248,9 @@ Tuman ka damo nga manuggamit ang luyag makakita sang sini nga panid. Palihog maghulat sang malip-ot nga tini-on bag-o magsulod sa sini nga pahina liwat. $1', +'pool-timeout' => 'Pag-untat nagahulat para sa kandado', +'pool-queuefull' => 'Ang pila sang linaw puno na', +'pool-errorunknown' => 'Wala mahibaluan nga sala', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Nahanungod sa {{SITENAME}}', @@ -415,7 +419,8 @@ Indi pagkalimti ang pag-ilis sang imo mga [[Special:Preferences|{{SITENAME}} pag 'yourname' => 'Ngalan sang Manog-gamit:', 'yourpassword' => 'Kontra-senyas:', 'yourpasswordagain' => 'Suliton ang kontra-senyas:', -'remembermypassword' => 'Dumdumon ang akon pagsulod sa sini nga kompyuter', +'remembermypassword' => 'Dumdumon ang akon pagsulod sa sini nga brawser (para sa indi magsobra $1 {{PLURAL:$1|nga adlaw|nga mga adlaw}})', +'securelogin-stick-https' => 'Magpabilin nga nakatakod sa HTTPS pagkatapos magsulod', 'yourdomainname' => 'Imo dominyo', 'externaldberror' => 'Mahimo nga may ara sang sala sa pagpamatood sang database ukon wala ka sa lugar nga magbag-o sang imo pang-guha nga akawnt.', 'login' => 'Mag sulod', @@ -432,6 +437,7 @@ Indi pagkalimti ang pag-ilis sang imo mga [[Special:Preferences|{{SITENAME}} pag 'gotaccount' => 'May yara ka na sang akawnt? $1.', 'gotaccountlink' => 'Mag sulod', 'createaccountmail' => 'Paagi sa e-mail', +'createaccountreason' => 'Rason:', 'badretype' => 'Ang mga pasword nga imo gintum-ok wala naga-santo.', 'userexists' => 'Ang gamit-pangalan nga imo ginbutang ginagamit na. Palihog magpili sang lain nga pangalan.', @@ -460,6 +466,7 @@ Palihog tilawi liwat butang.', Palihog tilawi liwat butang.', 'passwordtooshort' => 'Ang mga pasword dapat indi magnubo sa {{PLURAL:$1|isa ka letra|$1 ka letra}}.', 'password-name-match' => 'Ang imo pasword dapat lain sa imo gamit-pangalan.', +'password-login-forbidden' => 'Wala ginatugotan ang paggamit sang sini nga gamit-pangalan kag pasword.', 'mailmypassword' => 'i-E-mail ang bag-o na pasword', 'passwordremindertitle' => 'Bag-o nga temporaryo nga pasword para sa {{SITENAME}}', 'passwordremindertext' => 'May yara nga nagpangayo (basi ikaw, may IP address nga $1) sang bag-o @@ -503,6 +510,9 @@ Palihog maghulat anay bag-o tilawan liwat.', 'loginlanguagelabel' => 'Hambalanon: $1', 'suspicious-userlogout' => 'Ang imo pagpangabay nga mag-guha ginpungga bangud nga ini mahimo nga ginpadala sang guba nga brawser ukon sang proksy nga nagapang-tago.', +# E-mail sending +'php-mail-error-unknown' => 'Wala nahibaluan nga sala sa kapuslanan nga sulat() sang PHP.', + # Password reset dialog 'resetpass' => 'Ilisan ang pasword', 'resetpass_announce' => 'Nagsulod ka paagi sang temporary nga kod nga gin-email. @@ -554,9 +564,12 @@ Mahimo nga madinalag-on mo nga nga gin-ilisan ang imo pasword ukon nagpangabay k 'showdiff' => 'Ipakita ang inislan', 'anoneditwarning' => "'''Pa-andam:''' Wala ka pa nakasulod. Igasulat ang imo IP adres sa historya sini nga inislan na pahina.", +'anonpreviewwarning' => "''Wala ka pa nakasulod. Igasulat ang imo IP adres sa historya sini nga inislan na pahina.''", 'missingsummary' => "'''Pahanumdom:''' Wala ka naghatag sang malip-ot nga pagsaysay sang imo gin-ilisan. Kon tum-okon mo liwat ang \"{{int:savearticle}}\", ang imo gin-ilisan pagatiponon nga wala sini.", 'missingcommenttext' => 'Palihog butangi sang komento sa idalom.', +'missingcommentheader' => "'''Pahanumdom:''' Wala ka naghatag sang topiko/ulo sang topiko para sa sini nga komento. +Kon tum-okon mo liwat ang \"{{int:savearticle}}\", ang imo gin-ilisan pagatiponon nga wala sini.", 'summary-preview' => 'Kabilugan nga prebyu:', 'subject-preview' => 'Prebyu sang topiko/ulo sang topiko:', 'blockedtitle' => 'Ang manuggamit ginapunggan', @@ -636,6 +649,12 @@ Ang pinaka-ulihi nga log sa pagpuggong yara sa idalom para mahibaluan nimo:', '''Wala pa ini matipon!'''", 'userjspreview' => "'''Tandai nga ginalantaw/ginatilawan mo pa lang ang imo JavaScript sang manuggamit.''' '''Wala pa ini matipon!'''", +'sitecsspreview' => "'''Tandai nga ginalantaw mo pa lang ang ini nga CSS.''' +'''Wala pa ini matipon!'''", +'sitejspreview' => "'''Tandai nga ginalantaw mo pa lang ang ini nga kodigo sang JavaScript.''' +'''Wala pa ini matipon!'''", +'userinvalidcssjstitle' => "'''Aviso:''' Wala sang panit nga \"\$1\". +Sa mga pahungod nga mga panid nga .css and .js magamit sang titulo nga may gagmay nga letra (lowercase), e.g. {{ns:user}}:Foo/vector.css kontra sa {{ns:user}}:Foo/Vector.css.", 'updated' => '(Suno sa oras)', 'note' => "'''Pansinon:'''", 'previewnote' => "'''Tandaan nga prebyu lamang ini.''' @@ -857,6 +876,8 @@ $1", 'logdelete-failure' => "'''Ang pagkakitaon sang log indi mahimo nga maplastar:''' $1", 'revdel-restore' => 'pagbag-o sang makita', +'revdel-restore-deleted' => 'mga ginpanas nga pagbag-o', +'revdel-restore-visible' => 'mga makita nga pagbag-o', 'pagehist' => 'Kasaysayan sang panid', 'deletedhist' => 'Ginpanas nga kasaysayan', 'revdelete-content' => 'kaundan', @@ -878,55 +899,225 @@ Indi ka mahimo nga magsulod diri.', 'revdelete-no-change' => "'''Pahibalo:''' ang bagay nga may petsa $2, $1 nagpangabay na sang mga siting sa pagpakita.", 'revdelete-concurrent-change' => 'May sala sa pagbag-o sang bagay nga may petsa nga $2, $1: ang iya kahimtangan nagaguwa nga gin-ilisan sang iban samtang ginatuyo mo ini nga bag-uhon. Palihog sekyar sang mga logs.', +'revdelete-only-restricted' => 'May sala sa pagtago sang bagay nga may petsa nga $2, $1: indi mo makakas ang mga bagay nga makita sang mga administrador kon wala ka man nagpili sang isa sa mga pililian sa pagkakita.', +'revdelete-reason-dropdown' => '*Masami nga rason sang pagdula +** Paglapas sang kinamatarong-kontra-pagkopya +** Indi nagakadapat nga impormasyon pangkaugalingon +** Mahimo nagapangguba-kinamatarong nga impormasyon', +'revdelete-otherreason' => 'Iban/dugang nga rason:', +'revdelete-reasonotherlist' => 'Iban nga rason', +'revdelete-edit-reasonlist' => 'Ilisan ang pagdula sang mga rason', +'revdelete-offender' => 'Ang nagbuhat sang pagbag-o:', + +# Suppression log +'suppressionlog' => 'Log sang pagkakas', + +# History merging +'mergehistory' => 'Isugpon ang mga kasaysayan sang panid', +'mergehistory-header' => 'Ang ini nga panid nagapasugpon sa imo sang mga pagbag-o sang kasaysayan sang isa ka panid nga ginhalinan pakadto sa mas bag-o nga panid. +Palihog seguraduhon nga ang ini nga pagbag-o magapabilin sang pagpadayon sang panid sang kasaysayan.', +'mergehistory-box' => 'Isugpon ang mga pagbag-o sang duha ka panid:', +'mergehistory-from' => 'Gihalinan nga panid:', +'mergehistory-into' => 'Pakadtuan nga panid:', +'mergehistory-list' => 'Mahimo masugpon nga kasaysayan sang pagbag-o', +'mergehistory-merge' => 'Ang masunod nga mga pagbag-o sang [[:$1]] mahimo masugpon sa [[:$2]]. +Gamita ang mga buton nga radio sa pagsugpon lamang sa mga pagbag-o nga gintuga sa kag bag-o ang tion nga ginbutang. +Tandai nga ang paggamit sang mga link sa pagnabigar magaliwat sining hilera.', +'mergehistory-go' => 'Ipakita ang mga mahimo masugpon nga mga pagbag-o', +'mergehistory-submit' => 'Isugpon ang mga pagbag-o', +'mergehistory-empty' => 'Wala sing pagbag-o nga mahimo masugpon.', +'mergehistory-success' => '$3 {{PLURAL:$3|ka pagbag-o|ka mga pagbag-o}} sang [[:$1]] madinalag-on nga ginsugpon sa [[:$2]].', +'mergehistory-fail' => 'Wala mahuman ang pagsugpon sang kasaysayan, palihog lantawa liwat ang panid kag ang parametro sang tion.', +'mergehistory-no-source' => 'Ang ginhalin nga panid nga $1 wala naga-eksister.', +'mergehistory-no-destination' => 'Ang tuyo lab-oton nga panid nga $1 wala naga-eksister.', +'mergehistory-invalid-source' => 'Kinahanglan nga ang ginhalinan nga panid matood-tood nga titulo.', +'mergehistory-invalid-destination' => 'Ang palakadtuan nga panid kinahanglan nga matood nga titulo.', +'mergehistory-autocomment' => 'Ginsugpon ang [[:$1]] sa [[:$2]]', +'mergehistory-comment' => 'Ginsugpon ang [[:$1]] sa [[:$2]]: $3', +'mergehistory-same-destination' => 'Ang ginhalinan kag palakadtuan nga mga panid indi mahimo nga pareho', +'mergehistory-reason' => 'Rason:', # Merge log -'revertmerge' => 'Di pag-upod', +'mergelog' => 'Isugpon ang log', +'pagemerge-logentry' => 'ginsugpon ang [[$1]] sa [[$2]] (mga pagbag-o asta $3)', +'revertmerge' => 'Di pag-upod', +'mergelogpagetext' => 'Sa dalom isa ka lista sang mga pinaka-ulihe nga pagsugpon sang isa ka kasaysayan sang panid sa isa pa gid.', # Diffs -'history-title' => 'Rebisyon sang historya sa "$1"', -'difference' => '(Naglain sa tunga sang mga rebisyon)', -'lineno' => 'Linya $1:', -'compareselectedversions' => 'I-kompara ang pinilian nga mga rebisyon', -'editundo' => 'bawi-on ang pag ilis', +'history-title' => 'Rebisyon sang historya sa "$1"', +'difference' => '(Naglain sa tunga sang mga rebisyon)', +'difference-multipage' => '(Kinala-in sang mga panid)', +'lineno' => 'Linya $1:', +'compareselectedversions' => 'I-kompara ang pinilian nga mga rebisyon', +'showhideselectedversions' => 'Ipakita/taguon ang mga ginpili nga pagbag-o', +'editundo' => 'bawi-on ang pag ilis', +'diff-multi' => '({{PLURAL:$1|Isa ka tunga-tunga nga pagbag-o|$1 ka tunga-tunga nga mga pagbag-o}} sang {{PLURAL:$2|isa ka manuggamit|$2 ka mga manuggamit}} nga wala ginpakita)', +'diff-multi-manyusers' => '({{PLURAL:$1|Isa ka tunga-tunga nga pagbag-o|$1 ka tunga-tunga nga mga pagbag-o}} sang masobra $2 ka {{PLURAL:$2|manuggamit|mga manuggamit}} nga wala ginpakita)', # Search results -'searchresults' => 'Resulta sang Pagpangita', -'searchresults-title' => 'Resulta sang Pagpangita para "$1"', -'searchresulttext' => 'Para sa madamu pa nga impormasyon parti sa pagpangita {{SITENAME}}, lantawa [[{{MediaWiki:Helppage}}|{{int:bulig}}]].', -'searchsubtitle' => 'Nagpangita ka para \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|tanan nga pahina gasugod sa "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|tanan nga pahina nga naga tabid kay "$1"]])', -'searchsubtitleinvalid' => "Nangita ka para '''$1'''", -'notitlematches' => 'Wala sang parehas nga titulo ka pahina', -'notextmatches' => 'Wala sang pahina nga parehas teksto', -'prevn' => 'antes {{PLURAL:$1|$1}}', -'nextn' => 'dasun {{PLURAL:$1|$1}}', -'viewprevnext' => 'Tan-awon ($1 {{int:pipe-separator}} $2) ($3)', -'search-result-size' => '$1 ({{PLURAL:$2|1 pulong|$2 pulong}})', -'search-redirect' => '(gindirekta liwat $1)', -'search-section' => '(seksiyon $1)', -'search-suggest' => 'Ang buot mo silingon: $1', -'search-interwiki-caption' => 'Mga Utod proyekto', -'search-interwiki-default' => '$1 mga resulta:', -'search-interwiki-more' => '(damu)', -'search-mwsuggest-enabled' => 'may suhestiyon', -'search-mwsuggest-disabled' => 'wala suhestiyon', -'nonefound' => "'''Tandaan''': Ang iban lang nga mga ngalan-espasyo ay ginapangita nga daan. +'searchresults' => 'Resulta sang Pagpangita', +'searchresults-title' => 'Resulta sang Pagpangita para "$1"', +'searchresulttext' => 'Para sa madamu pa nga impormasyon parti sa pagpangita {{SITENAME}}, lantawa [[{{MediaWiki:Helppage}}|{{int:bulig}}]].', +'searchsubtitle' => 'Nagpangita ka para \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|tanan nga pahina gasugod sa "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|tanan nga pahina nga naga tabid kay "$1"]])', +'searchsubtitleinvalid' => "Nangita ka para '''$1'''", +'toomanymatches' => 'Tuman ka madamo nga pareho ang nagbalik, palihog tilaw sang lain nga pagpangita', +'titlematches' => 'Mga pareho nga titulo sang panid', +'notitlematches' => 'Wala sang parehas nga titulo ka pahina', +'textmatches' => 'Mga pareho nga teksto sang panid', +'notextmatches' => 'Wala sang pahina nga parehas teksto', +'prevn' => 'antes {{PLURAL:$1|$1}}', +'nextn' => 'dasun {{PLURAL:$1|$1}}', +'prevn-title' => 'Nagligad nga $1 {{PLURAL:$1|resulta|mga resulta}}', +'nextn-title' => 'Madason nga $1 {{PLURAL:$1|resulta|mga resulta}}', +'shown-title' => 'Magpakita sang $1 ka {{PLURAL:$1|resulta|mga resulta}} kada panid', +'viewprevnext' => 'Tan-awon ($1 {{int:pipe-separator}} $2) ($3)', +'searchmenu-legend' => 'Mga pililian sa pagpangita', +'searchmenu-exists' => "'''May yara sang panid nga ginhingalanan nga \"[[:\$1]]\" sa sini nga wiki.'''", +'searchmenu-new' => "'''Gintuga ang panid nga \"[[:\$1]]\" sa sini nga wiki!'''", +'searchhelp-url' => 'Help:Mga Unod', +'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Magbasa-basa sang mga panid gamit ang ini nga unpali]]', +'searchprofile-articles' => 'Mga panid sang unod', +'searchprofile-project' => 'Mga panid sang Bulig kag Proyekto', +'searchprofile-images' => 'Multimedia', +'searchprofile-everything' => 'Tanan-tanan', +'searchprofile-advanced' => 'Mas mauna', +'searchprofile-articles-tooltip' => 'Pangitaa sa $1', +'searchprofile-project-tooltip' => 'Pangitaa sa $1', +'searchprofile-images-tooltip' => 'Mangita sang mga hilera', +'searchprofile-everything-tooltip' => 'Pangitaon ang tanan nga kaundan (dala na ang mga panid sang pag-estorya)', +'searchprofile-advanced-tooltip' => 'Pangitaon sa pahungod nga espasyo sang pangalan', +'search-result-size' => '$1 ({{PLURAL:$2|1 pulong|$2 pulong}})', +'search-result-category-size' => '{{PLURAL:$1|1 ka miyembro|$1 ka mga miyembro}} ({{PLURAL:$2|1 ka subcategoriya|$2 ka mga subcategoriya}}, {{PLURAL:$3|1 ka hilera|$3 ka mga hilera}})', +'search-result-score' => 'Pagkaangot: $1%', +'search-redirect' => '(gindirekta liwat $1)', +'search-section' => '(seksiyon $1)', +'search-suggest' => 'Ang buot mo silingon: $1', +'search-interwiki-caption' => 'Mga Utod proyekto', +'search-interwiki-default' => '$1 mga resulta:', +'search-interwiki-more' => '(damu)', +'search-mwsuggest-enabled' => 'may suhestiyon', +'search-mwsuggest-disabled' => 'wala suhestiyon', +'search-relatedarticle' => 'Konektado', +'mwsuggest-disable' => 'Untaton ang mga suhestiyon sang AJAX', +'searcheverything-enable' => 'Pangitaon sa tanan nga espasyo sang pangalan', +'searchrelated' => 'konektado', +'searchall' => 'tanan', +'showingresults' => "Ginapakita sa dalom pakadto sa {{PLURAL:$1|'''1''' ka resulta|'''$1''' ka mga resulta}} umpisa ang #'''$2'''.", +'showingresultsnum' => "Ginapakita sa dalom ang {{PLURAL:$3|'''1''' ka resulta|'''$3''' ka mga resulta}} umpisa ang #'''$2'''.", +'showingresultsheader' => "{{PLURAL:$5|Resulta nga '''$1''' sang '''$3'''|Mga resulta nga '''$1 - $2''' sang '''$3'''}} para sa '''$4'''", +'nonefound' => "'''Tandaan''': Ang iban lang nga mga ngalan-espasyo ay ginapangita nga daan. Testingan mo i-prefiks ang imo pamangkot upod sang ''tanan:'' para makita mo ang tanan nga unod (dala na dira ang pahina paghisayranay, templeyts, etc), o gamita amg imo nanamian nga ngalan-espasyo bilang prefiks.", -'powersearch' => 'Abanse nga pagpangita', -'powersearch-legend' => 'Abanse nga pagpangita', -'powersearch-ns' => 'Pangita sa mga ngalan-espasyo:', -'powersearch-redir' => 'Lista sang mga gin direkta liwat', -'powersearch-field' => 'Pangita-on si', +'search-nonefound' => 'Wala sang mga resulta nga nagsanto sa imo nga ginapangita.', +'powersearch' => 'Abanse nga pagpangita', +'powersearch-legend' => 'Abanse nga pagpangita', +'powersearch-ns' => 'Pangita sa mga ngalan-espasyo:', +'powersearch-redir' => 'Lista sang mga gin direkta liwat', +'powersearch-field' => 'Pangita-on si', +'powersearch-togglelabel' => 'Tsekan:', +'powersearch-toggleall' => 'Tanan', +'powersearch-togglenone' => 'Wala', +'search-external' => 'Pagpangita sa guwa', +'searchdisabled' => 'Ang pagpangita sa {{SITENAME}} gin-untat. +Mahimo ka nga magpangita gamit ang Google sa sini nga tion. +Tandai nga ang ila nga palasulundan sang mga unod sang {{SITENAME}} mahimo nga madaan na.', + +# Quickbar +'qbsettings' => 'Bar nga mahapos', +'qbsettings-none' => 'Wala', +'qbsettings-fixedleft' => 'Gintadlong sa wala', +'qbsettings-fixedright' => 'Gintadlong sa too', +'qbsettings-floatingleft' => 'Nagalutaw sa wala', +'qbsettings-floatingright' => 'Nagalutaw sa too', # Preferences page -'preferences' => 'Mga Ginabasehan', -'mypreferences' => 'Akon pagpalabi', -'prefsnologin' => 'Wala naka-sulod', -'skin-preview' => 'Ipakita subong', -'prefs-rc' => 'Mga Bag-o nga Inislan', -'searchresultshead' => 'Pangita-a', -'youremail' => 'E-mail:', -'username' => 'Ngalan sang Manog-gamit:', -'email' => 'E-mail', +'preferences' => 'Mga Ginabasehan', +'mypreferences' => 'Akon pagpalabi', +'prefs-edits' => 'Numero sang mga gin-ilisan:', +'prefsnologin' => 'Wala naka-sulod', +'prefsnologintext' => 'Kinahanglan nga ikaw [{{fullurl:{{#Special:UserLogin}}|returnto=$1}} nakasulod] agod nga mabuhat ang pag-ilis sang mga ginapalabi.', +'changepassword' => 'Ilisan ang pasword', +'prefs-skin' => 'Panit', +'skin-preview' => 'Ipakita subong', +'datedefault' => 'Wala sang pagpalabi', +'prefs-datetime' => 'Petsa kag oras', +'prefs-personal' => 'Profayl sang manuggamit', +'prefs-rc' => 'Mga Bag-o nga Inislan', +'prefs-watchlist' => 'Lista sang mga ginabantayan', +'prefs-watchlist-days' => 'Mga adlaw nga ipakita sa lista sang ginabantayan:', +'prefs-watchlist-days-max' => 'Indi magsobra 7 ka adlaw', +'prefs-watchlist-edits' => 'Ang pinakataas nga beses sang pag-ilis nga ipakita sa ginpalawig nga lista sang ginabantayan:', +'prefs-watchlist-edits-max' => 'Pinakataas nga numero: 1000', +'prefs-watchlist-token' => 'Token sang lista sang ginabantayan:', +'prefs-misc' => 'Misc', +'prefs-resetpass' => 'Ilisan ang pasword', +'prefs-email' => 'Mga pililian sang e-mail', +'prefs-rendering' => 'Hitsura', +'saveprefs' => 'Itipunon', +'resetprefs' => 'Panason ang mga wala matipon nga mga pagbag-o', +'restoreprefs' => 'Ibalik ang tanan nga default settings', +'prefs-editing' => 'Pag-ilis', +'prefs-edit-boxsize' => 'Ang kadakoon sang bintana sang pag-ilis.', +'rows' => 'Mga linya:', +'columns' => 'Mga kulumna:', +'searchresultshead' => 'Pangita-a', +'resultsperpage' => 'Mga pag-igu kada panid:', +'stub-threshold' => 'Suludlan sang stub sang link nga pagkay-o (bytes):', +'stub-threshold-disabled' => 'Gin-untat', +'recentchangesdays' => 'Adlaw nga nabilin sa pagpakita sang mga bag-o nga pag-ilis:', +'recentchangesdays-max' => 'Indi magtaas sa $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}}', +'recentchangescount' => 'Numero sang mga pag-ilis nga ipakita by default:', +'prefs-help-recentchangescount' => 'Nadala diri ang mga bag-o nga gin-ilisan, kasaysayan sang mga panid, kag mga log.', +'prefs-help-watchlist-token' => 'Ang pagsulat sa sini nga lugar gamit ang sekreto nga yabi magatuga sang RSS feed para sa lista sang imo ginabantayn. +Ang bisan sin-o nga nakahibalo sang sini nga yabi sa sini nga lugar mahimo nga makabasa sang imo lista, gani magpili sang segurado nga balor. +Ini isa ka wala pinilian nga balor nga imo mahimo gamiton: $1', +'savedprefs' => 'Ang imo mga pagpalabi gintipon na.', +'timezonelegend' => 'Sona sang oras:', +'localtime' => 'Lokal nga oras:', +'timezoneuseoffset' => 'Iban pa (ibutang ang offset)', +'timezoneoffset' => 'Offset¹:', +'servertime' => 'Oras sang server:', +'guesstimezone' => 'Butangan halin sa brawser', +'timezoneregion-africa' => 'Africa', +'timezoneregion-america' => 'America', +'timezoneregion-antarctica' => 'Antarctica', +'timezoneregion-arctic' => 'Arctico', +'timezoneregion-asia' => 'Asia', +'timezoneregion-atlantic' => 'Kadagatan sang Atlantico', +'timezoneregion-australia' => 'Australia', +'timezoneregion-europe' => 'Europa', +'timezoneregion-indian' => 'Kadagatan sang India', +'timezoneregion-pacific' => 'Kadagatan sang Pacifico', +'allowemail' => 'Paganahon ang e-mail halin sa iban nga manuggamit', +'prefs-searchoptions' => 'Mga pililian sa pagpangita', +'prefs-namespaces' => 'Ngalan-espasyo', +'defaultns' => 'Kon indi magpangita na lang sa sini nga mga ngalan-espasyo', +'default' => 'default', +'prefs-files' => 'Mga hilera', +'prefs-custom-css' => 'Ginhungod nga CSS', +'prefs-custom-js' => 'Ginhungod nga JavaScript', +'prefs-common-css-js' => 'Ginaparte nga CSS?JavaScript para sa tanan nga panit:', +'prefs-reset-intro' => 'Indi mo magamit ang ini nga panid agod mailisan ang imo mga pagpalabi sa mga default sang site. +Indi na ini maliwat pa.', +'prefs-emailconfirm-label' => 'Paagkumperma sang e-mail:', +'prefs-textboxsize' => 'Kadakoon sang bintana sang pag-ilis', +'youremail' => 'E-mail:', +'username' => 'Ngalan sang Manog-gamit:', +'uid' => 'ID sang manuggamit:', +'prefs-memberingroups' => 'Miyembro sang {{PLURAL:$1|grupo|mga grupo}}:', +'prefs-registration' => 'Oras sang pagparehistro:', +'yourrealname' => 'Matood-tood nga pangalan:', +'yourlanguage' => 'Lenguahe:', +'yournick' => 'Bag-o nga pirma:', +'prefs-help-signature' => 'Ang mga kumento sa mga panid sang pag-estorya kinahanglan nga napirmahan sang "~~~~" nga pagasayluhon sa imo pirma sang stamp sang oras.', +'badsig' => 'Indi mabaton nga hilaw nga pirma. +Palihog lantaw sang mga tag sang HTML.', +'badsiglength' => 'Ang imo pirma tuman ka lawig. +Ini indi dapat nga magsobra sa $1 {{PLURAL:$1|ka karakter|ka mga karakter}} ang kalabaon.', +'yourgender' => 'Gender:', +'gender-unknown' => 'Wala masigurado', +'gender-male' => 'Lalaki', +'gender-female' => 'Babayi', +'email' => 'E-mail', # Groups 'group-sysop' => 'Mga Administrador', @@ -1054,7 +1245,6 @@ Mga Pahina sa [[Special:Watchlist|imo lista-lantaw]] ay '''dukot'''.", # Watchlist 'watchlist' => 'Akon Ginabantayan', 'mywatchlist' => 'Akon Ginabantayan', -'watchlistfor' => "(para '''$1''')", 'watchnologin' => 'Wala naka-sulod', 'addedwatch' => 'Nadugang sa lista sang lantaw', 'addedwatchtext' => "Ang pahina \"[[:\$1]]\" ay nadugang sa imo [[Special:Watchlist|lista sang pagtan-aw]]. @@ -1285,9 +1475,9 @@ Gapasugot sa pagdugang sang rason sa kabilugan.', 'nextdiff' => 'Mas bag-o nga gin-islan →', # Media information -'file-info-size' => '($1 × $2 piksel, kadakuon sang file: $3, MIME type: $4)', +'file-info-size' => '$1 × $2 piksel, kadakuon sang file: $3, MIME type: $4', 'file-nohires' => 'Wala sang yara na taas nga resolusyon.', -'svg-long-desc' => '(SVG file, nominalya $1 × $2 piksels, kadakuon sang file: $3)', +'svg-long-desc' => 'SVG file, nominalya $1 × $2 piksels, kadakuon sang file: $3', 'show-big-image' => 'Kabilogan nga resolusyon', 'show-big-image-thumb' => 'Kadakuon sa sini nga prebyu: $1 × $2 piksels', diff --git a/languages/messages/MessagesHr.php b/languages/messages/MessagesHr.php index 2ee02afd..e0046d3c 100644 --- a/languages/messages/MessagesHr.php +++ b/languages/messages/MessagesHr.php @@ -13,6 +13,7 @@ * @author Demicx * @author Dnik * @author Ex13 + * @author Excaliboor * @author Herr Mlinka * @author Luka Krstulovic * @author MayaSimFan @@ -94,6 +95,7 @@ $specialPageAliases = array( 'Allpages' => array( 'Sve_stranice' ), 'Prefixindex' => array( 'Prefiks_indeks', 'Stranice_po_prefiksu' ), 'Ipblocklist' => array( 'Blokirane_adrese' ), + 'Unblock' => array( 'Odblokiraj' ), 'Specialpages' => array( 'Posebne_stranice' ), 'Contributions' => array( 'Doprinosi' ), 'Emailuser' => array( 'Elektronička_pošta', 'E-mail' ), @@ -128,7 +130,7 @@ $specialPageAliases = array( 'Listbots' => array( 'Botovi' ), 'Popularpages' => array( 'Popularne_stranice' ), 'Search' => array( 'Traži' ), - 'Resetpass' => array( 'Ponovno_postavi_lozinku' ), + 'Resetpass' => array( 'Izmijeni_lozinku' ), 'Withoutinterwiki' => array( 'Bez_međuwikipoveznica', 'Bez_interwikija' ), 'MergeHistory' => array( 'Spoji_povijest' ), 'Filepath' => array( 'Putanja_datoteke' ), @@ -137,6 +139,7 @@ $specialPageAliases = array( 'LinkSearch' => array( 'Traži_poveznice', 'Traži_linkove' ), 'DeletedContributions' => array( 'Obrisani_doprinosi' ), 'Tags' => array( 'Oznake' ), + 'Activeusers' => array( 'Aktivni_suradnici' ), ); $magicWords = array( @@ -296,7 +299,7 @@ $dateFormats = array( 'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns', ); -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $fallback8bitEncoding = 'iso-8859-2'; @@ -318,8 +321,7 @@ $messages = array( 'tog-editsection' => 'Prikaži poveznice za uređivanje pojedinih odlomaka', 'tog-editsectiononrightclick' => 'Pritiskom na desnu tipku miša otvori uređivanje pojedinih odlomaka (JavaScript)', 'tog-showtoc' => 'U člancima s više od tri odlomka prikaži tablicu sadržaja.', -'tog-rememberpassword' => 'Zapamti lozinku između prijava', -'tog-editwidth' => 'Proširi okvir za uređivanje preko cijele širine ekrana', +'tog-rememberpassword' => 'Zapamti moju lozinku u ovom pregledniku (najduže $1 {{PLURAL:$1|dan|dana|dana}})', 'tog-watchcreations' => 'Dodaj članke koje kreiram na moj popis praćenja', 'tog-watchdefault' => 'Dodaj sve nove i izmijenjene stranice u popis praćenja', 'tog-watchmoves' => 'Dodaj sve stranice koje premjestim na popis praćenja', @@ -460,31 +462,21 @@ i [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Vodič za suradnike] 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Dodaj temu', -'vector-action-delete' => 'Izbriši', -'vector-action-move' => 'Premjesti', -'vector-action-protect' => 'Zaštiti', -'vector-action-undelete' => 'Vrati', -'vector-action-unprotect' => 'Ukloni zaštitu', -'vector-namespace-category' => 'Kategorija', -'vector-namespace-help' => 'Stranica pomoći', -'vector-namespace-image' => 'Datoteka', -'vector-namespace-main' => 'Stranica', -'vector-namespace-media' => 'Mediji', -'vector-namespace-mediawiki' => 'Poruka', -'vector-namespace-project' => 'Stranica projekta', -'vector-namespace-special' => 'Posebna stranica', -'vector-namespace-talk' => 'Razgovor', -'vector-namespace-template' => 'Predložak', -'vector-namespace-user' => 'Suradnička stranica', -'vector-view-create' => 'Započni', -'vector-view-edit' => 'Uredi', -'vector-view-history' => 'Vidi stare izmjene', -'vector-view-view' => 'Čitaj', -'vector-view-viewsource' => 'Vidi izvor', -'actions' => 'Radnje', -'namespaces' => 'Imenski prostori', -'variants' => 'Inačice', +'vector-action-addsection' => 'Dodaj temu', +'vector-action-delete' => 'Izbriši', +'vector-action-move' => 'Premjesti', +'vector-action-protect' => 'Zaštiti', +'vector-action-undelete' => 'Vrati', +'vector-action-unprotect' => 'Ukloni zaštitu', +'vector-simplesearch-preference' => 'Omogući poboljšane prijedloge za pretraživanje (samo izgled Vector)', +'vector-view-create' => 'Započni', +'vector-view-edit' => 'Uredi', +'vector-view-history' => 'Vidi stare izmjene', +'vector-view-view' => 'Čitaj', +'vector-view-viewsource' => 'Vidi izvor', +'actions' => 'Radnje', +'namespaces' => 'Imenski prostori', +'variants' => 'Inačice', 'errorpagetitle' => 'Pogreška', 'returnto' => 'Vrati se na $1.', @@ -545,6 +537,9 @@ Previše suradnika pokušava vidjeti ovu stranicu. Molimo malo pričekajte prije nego što opet pokušate pristupiti ovoj stranici. $1', +'pool-timeout' => "Istek vremena (''timeout'') čekajući zaključavanje", +'pool-queuefull' => 'Red čekanja je pun', +'pool-errorunknown' => 'Nepoznata pogreška', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'O projektu {{SITENAME}}', @@ -706,7 +701,8 @@ Ne zaboravite prilagoditi [[Special:Preferences|{{SITENAME}} postavke]].', 'yourname' => 'Suradničko ime', 'yourpassword' => 'Lozinka:', 'yourpasswordagain' => 'Ponovno upišite lozinku', -'remembermypassword' => 'Trajno zapamti moju lozinku.', +'remembermypassword' => 'Zapamti moju lozinku na ovom računalu (najduže $1 {{PLURAL:$1|dan|dana}})', +'securelogin-stick-https' => 'Ostani spojen na HTTPS nakon prijave', 'yourdomainname' => 'Vaša domena', 'externaldberror' => 'Došlo je do pogreške s vanjskom autorizacijom ili Vam nije dopušteno osvježavanje vanjskog suradničkog računa.', 'login' => 'Prijavi se', @@ -723,6 +719,7 @@ Ne zaboravite prilagoditi [[Special:Preferences|{{SITENAME}} postavke]].', 'gotaccount' => "Već imate suradnički račun? '''$1'''.", 'gotaccountlink' => 'Prijavite se', 'createaccountmail' => 'poštom', +'createaccountreason' => 'Razlog:', 'badretype' => 'Unesene lozinke nisu istovjetne.', 'userexists' => 'Uneseno suradničko ime već je u upotrebi. Unesite neko drugo ime.', @@ -743,6 +740,7 @@ Provjerite jeste li točno upisali, ili [[Special:UserLogin/signup|otvorite novi 'wrongpasswordempty' => 'Niste unijeli lozinku. Pokušajte ponovno.', 'passwordtooshort' => 'Lozinka mora sadržavati najmanje {{PLURAL:$1|1 znak|$1 znaka|$1 znakova}}.', 'password-name-match' => 'Vaša lozinka mora biti različita od Vašeg suradničkog imena.', +'password-login-forbidden' => 'Uporaba ovog suradničkog imena i lozinke nije dozvoljena.', 'mailmypassword' => 'Pošalji mi novu lozinku', 'passwordremindertitle' => '{{SITENAME}}: nova lozinka.', 'passwordremindertext' => 'Netko je (vjerojatno Vi, s IP adrese $1) zatražio novu lozinku za projekt {{SITENAME}} ($4). @@ -783,6 +781,9 @@ Molimo Vas da pričekate prije nego što pokušate ponovo.', 'loginlanguagelabel' => 'Jezik: $1', 'suspicious-userlogout' => 'Vaš zahtjev za odjavu je odbijen jer to izgleda kao da je poslan preko pokvarenog preglednika ili keširanog posrednika (proxyja).', +# E-mail sending +'php-mail-error-unknown' => 'Nepoznata pogreška u PHP-mail() funkciji', + # Password reset dialog 'resetpass' => 'Promijeni lozinku', 'resetpass_announce' => 'Prijavljeni ste s privremenom lozinkom. Da završite proces mijenjanja lozinke, upišite ovdje novu lozinku:', @@ -833,9 +834,10 @@ Možda ste već uspješno promijenili Vašu lozinku ili ste zatražili novu priv 'showlivepreview' => 'Pregled kako će izgledati, uživo', 'showdiff' => 'Prikaži promjene', 'anoneditwarning' => "'''Upozorenje:''' Niste prijavljeni pod suradničkim imenom. Vaša IP adresa bit će zabilježena u popisu izmjena ove stranice.", +'anonpreviewwarning' => "''Niste prijavljeni. Spremanjem će Vaše IP adrese ostati zabilježene u starim izmjenama ove stranice.''", 'missingsummary' => "'''Podsjetnik:''' Niste unijeli sažetak promjena. Ako ponovno kliknete na \"Sačuvaj stranicu\", Vaše će promjene biti snimljene bez sažetka.", 'missingcommenttext' => 'Molim unesite sažetak.', -'missingcommentheader' => "'''Upozorenje:''' Niste napisali sažetak ovog predmeta. Ako ponovno kliknete \"Sačuvaj stranicu\", vaš će predmet biti snimljen bez sažetka.", +'missingcommentheader' => "'''Podsjetnik:''' Niste napisali sažetak ovog komentara. Ako ponovno kliknete \"{{int:savearticle}}\", Vaš će komentar biti snimljen bez sažetka.", 'summary-preview' => 'Pregled sažetka:', 'subject-preview' => 'Pregled predmeta:', 'blockedtitle' => 'Suradnik je blokiran', @@ -903,7 +905,11 @@ Posljednja stavka evidencije blokiranja navedena je niže kao napomena:', 'userjsyoucanpreview' => "'''Savjet:''' Rabite dugme \"{{int:showpreview}}\" za testiranje svog novog JavaScripta prije snimanja.", 'usercsspreview' => "'''Ne zaboravite: samo isprobavate/pregledavate svoj suradnički CSS. Još nije snimljen!'''", 'userjspreview' => "'''Ne zaboravite: samo isprobavate/pregledavate svoj suradnički JavaScript, i da još nije snimljen!'''", -'userinvalidcssjstitle' => "'''Upozorenje:''' Nema sučelja pod imenom \"\$1\". Ne zaboravite da imena stranica s .css and .js kodom počinju malim slovom, npr. {{ns:user}}:Mate/monobook.css, a ne {{ns:user}}:Mate/Monobook.css.", +'sitecsspreview' => "'''Ne zaboravite ovo je samo pregled ovog CSS-a.''' +'''Još uvijek nije sačuvan!'''", +'sitejspreview' => "'''Ne zaboravite ovo je samo pregled JavaScript kôda.''' +'''Još uvijek nije sačuvan!'''", +'userinvalidcssjstitle' => "'''Upozorenje:''' Nema sučelja pod imenom \"\$1\". Ne zaboravite da imena stranica s .css and .js kodom počinju malim slovom, npr. {{ns:user}}:Mate/vector.css, a ne {{ns:user}}:Mate/Vector.css.", 'updated' => '(Ažurirano)', 'note' => "'''Napomena:'''", 'previewnote' => "'''Ne zaboravite da je ovo samo pregled kako će stranica izgledati i da stranica još nije snimljena!'''", @@ -938,8 +944,6 @@ ove stranice. Ako je sačuvate, sve će promjene učinjene nakon ove inačice bi Također nam obećavate da ste ovo sami napisali, ili da ste to prepisali iz nečeg što je u javnom vlasništvu ili pod sličnom slobodnom licencijom. '''NE POSTAVLJAJTE RADOVE ZAŠTIĆENE AUTORSKIM PRAVIMA BEZ DOPUŠTENJA!'''", 'copyrightwarning2' => "Molimo uočite da svi suradnici mogu mijenjati sve doprinose na {{SITENAME}}. Ako ne želite da se Vaše pisanje nemilosrdno uređuje, nemojte ga slati ovdje.
    Također nam obećavate da ste ovo sami napisali, ili da ste to prepisali iz nečeg što je u javnom vlasništvu ili pod sličnom slobodnom licencijom (vidi $1 za detalje). '''NE POSTAVLJAJTE RADOVE ZAŠTIĆENE AUTORSKIM PRAVIMA BEZ DOPUŠTENJA!'''", -'longpagewarning' => 'PAŽNJA: Ova stranica je dugačka $1 kilobajta; neki bi preglednici mogli imati problema pri uređivanju stranica koje se približavaju ili su duže od 32 kb. -Molimo razmislite o rastavljanju stranice na manje odjeljke.', 'longpageerror' => "'''GREŠKA: Tekst koji ste unijeli dug je $1 kilobajta, što je više od maksimalnih $2 kilobajta. Nije ga moguće snimiti.'''", 'readonlywarning' => "'''UPOZORENJE: Baza podataka je zaključana zbog održavanja, pa trenutačno ne možete sačuvati svoje promjene. Najbolje je da kopirate i zaljepite tekst u tekstualnu datoteku te je snimite za kasnije.''' @@ -1111,6 +1115,8 @@ $1", 'logdelete-failure' => "'''Vidljivost evidencije ne može biti postavljena:''' $1", 'revdel-restore' => 'Promijeni dostupnost', +'revdel-restore-deleted' => 'izbrisane izmjene', +'revdel-restore-visible' => 'vidljive izmjene', 'pagehist' => 'Povijest stranice', 'deletedhist' => 'Obrisana povijest', 'revdelete-content' => 'sadržaj', @@ -1179,11 +1185,13 @@ Primijetite da uporaba navigacijskih poveznica resetira Vaše izbore u stupcu.', # Diffs 'history-title' => 'Povijest izmjena stranice "$1"', 'difference' => '(Usporedba među inačicama)', +'difference-multipage' => '(Razlika između stranica)', 'lineno' => 'Redak $1:', 'compareselectedversions' => 'Usporedi odabrane inačice', 'showhideselectedversions' => 'Otkrij/sakrij odabrane izmjene', 'editundo' => 'ukloni ovu izmjenu', -'diff-multi' => '({{PLURAL:$1|Nije prikazana jedna međuinačica|Nisu prikazane $1 međuinačice|Nije prikazano $1 međuinačica}})', +'diff-multi' => '({{PLURAL:$1|Nije prikazana jedna međuinačica|Nisu prikazane $1 međuinačice|Nije prikazano $1 međuinačica}} {{PLURAL:$2|jednog|$2|$2}} suradnika)', +'diff-multi-manyusers' => '({{PLURAL:$1|Nije prikazana jedna međuinačica|Nisu prikazane $1 međuinačice|Nije prikazano $1 međuinačica}} više od {{PLURAL:$2|jednog|$2|$2}} suradnika)', # Search results 'searchresults' => 'Rezultati pretrage', @@ -1218,6 +1226,7 @@ Primijetite da uporaba navigacijskih poveznica resetira Vaše izbore u stupcu.', 'searchprofile-everything-tooltip' => 'Pretraži sav sadržaj (uključujući i stranice za razgovor)', 'searchprofile-advanced-tooltip' => 'Traži u zadanom imenskom prostoru', 'search-result-size' => '$1 ({{PLURAL:$2|1 riječ|$2 riječi}})', +'search-result-category-size' => '{{PLURAL:$1|1 član|$1 člana|$1 članova}} ({{PLURAL:$2|1 potkategorija|$2 potkategorije|$2 potkategorija}}, {{PLURAL:$3|1 datoteka|$3 datoteke|$3 datoteka}})', 'search-result-score' => 'Povezanost: $1%', 'search-redirect' => '(preusmjeravanje $1)', 'search-section' => '(odlomak $1)', @@ -1292,6 +1301,7 @@ Primijetite da uporaba navigacijskih poveznica resetira Vaše izbore u stupcu.', 'contextlines' => 'Koliko redova teksta po pogotku', 'contextchars' => 'Koliko znakova po retku', 'stub-threshold' => 'Prag za formatiranje poput poveznice mrve:', +'stub-threshold-disabled' => 'Onemogućeno', 'recentchangesdays' => 'Broj dana prikazanih u nedavnim promjenama:', 'recentchangesdays-max' => '(maksimalno $1 {{PLURAL:$1|dan|dana}})', 'recentchangescount' => 'Broj izmjena za prikaz kao zadano:', @@ -1323,6 +1333,7 @@ Primijetite da uporaba navigacijskih poveznica resetira Vaše izbore u stupcu.', 'prefs-files' => 'Datoteke', 'prefs-custom-css' => 'Prilagođen CSS', 'prefs-custom-js' => 'Prilagođen JS', +'prefs-common-css-js' => 'Dijeljeni CSS/JS za sve izglede:', 'prefs-reset-intro' => 'Možete koristiti ovu stranicu za povrat Vaših postavki na prvotne postavke. Ovo se ne može poništiti.', 'prefs-emailconfirm-label' => 'Potvrda e-mail adrese:', 'prefs-textboxsize' => 'Veličina prozora za uređivanje', @@ -1359,9 +1370,15 @@ Možete omogućiti drugima da Vas kontaktiraju na suradničkoj stranici ili stra 'prefs-advancedrendering' => 'Napredne opcije', 'prefs-advancedsearchoptions' => 'Napredne opcije', 'prefs-advancedwatchlist' => 'Napredne opcije', -'prefs-display' => 'Prikaži opcije', +'prefs-displayrc' => 'Prikaži opcije', +'prefs-displaysearchoptions' => 'Opcije prikaza', +'prefs-displaywatchlist' => 'Opcije prikaza', 'prefs-diffs' => 'razl', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'E-mail adresa se pokazuje ispravnom', +'email-address-validity-invalid' => 'Unesite valjanu e-mail adresu', + # User rights 'userrights' => 'Upravljanje suradničkim pravima', 'userrights-lookup-user' => 'Upravljaj suradničkim skupinama', @@ -1445,6 +1462,7 @@ Možete omogućiti drugima da Vas kontaktiraju na suradničkoj stranici ili stra 'right-hideuser' => 'Blokiranje suradničkog imena, skrivajući ga od javnosti', 'right-ipblock-exempt' => 'Imunitet na IP blokiranje, auto-blok i blokiranje opsega', 'right-proxyunbannable' => 'Imunitet na automatska blokiranja posrednika (proxya)', +'right-unblockself' => 'Odblokirati se', 'right-protect' => 'Mijenjanje razina zaštićivanja i uređivanje zaštićenih stranica', 'right-editprotected' => 'Uređivanje zaštićenih stranica (s prenosivom zaštitom)', 'right-editinterface' => 'Uređivanje suradničkog sučelja', @@ -1467,7 +1485,6 @@ Možete omogućiti drugima da Vas kontaktiraju na suradničkoj stranici ili stra 'right-siteadmin' => 'Zaključavanje i otključavanje baze podataka', 'right-reset-passwords' => "Poništi (''resetiraj'') lozinku drugog suradnika", 'right-override-export-depth' => 'Izvezi stranice uključujući i povezane stranice do dubine od 5', -'right-versiondetail' => 'Prikaži informaciju o proširenoj inačici softvera', 'right-sendemail' => 'Slanje e-maila drugim korisnicima', # User rights log @@ -1518,14 +1535,9 @@ Možete omogućiti drugima da Vas kontaktiraju na suradničkoj stranici ili stra 'recentchanges-legend' => 'Izbornik nedavnih promjena', 'recentchangestext' => 'Na ovoj stranici možete pratiti nedavne promjene u wikiju.', 'recentchanges-feed-description' => 'Na ovoj stranici možete pratiti nedavne promjene u wikiju.', -'recentchanges-label-legend' => 'Kazalo: $1.', -'recentchanges-legend-newpage' => '$1 - nova stranica', 'recentchanges-label-newpage' => 'Ova izmjena stvorila je novu stranicu', -'recentchanges-legend-minor' => '$1 - manja izmjena', 'recentchanges-label-minor' => 'Ovo je manja izmjena', -'recentchanges-legend-bot' => '$1 - izmjena bota', 'recentchanges-label-bot' => 'Ovu izmjenu napravio je bot', -'recentchanges-legend-unpatrolled' => '$1 - nepregledana izmjena', 'recentchanges-label-unpatrolled' => 'Ova izmjena još nije pregledana', 'rcnote' => "{{PLURAL:$1|Slijedi zadnja '''$1''' promjena|Slijede zadnje '''$1''' promjene|Slijedi zadnjih '''$1''' promjena}} u {{PLURAL:$2|zadnjem '''$2''' danu|zadnja '''$2''' dana|zadnjih '''$2''' dana}}, od $5, $4.", 'rcnotefrom' => 'Slijede promjene od $2 (prikazano ih je do $1).', @@ -1571,6 +1583,9 @@ Možete omogućiti drugima da Vas kontaktiraju na suradničkoj stranici ili stra 'upload_directory_missing' => 'Mapa za datoteke ($1) nedostaje i webserver ju ne može napraviti.', 'upload_directory_read_only' => 'Server ne može pisati u direktorij za postavljanje ($1).', 'uploaderror' => 'Pogreška kod postavljanja', +'upload-recreate-warning' => "'''Upozorenje: datoteka s tim imenom je izbrisana ili premještena.''' + +Evidencije brisanja i premještanja prikazane su ovdje:", 'uploadtext' => "Ovaj obrazac služi za postavljanje datoteka. Za pregledavanje i pretraživanje već postavljenih datoteka vidi [[Special:FileList|popis postavljenih datoteka]], (ponovljena) postavljanja su također u [[Special:Log/upload|popisu postavljanja]], a brisanja u [[Special:Log/delete|popisu brisanja]]. @@ -1602,6 +1617,17 @@ Da biste na stranicu stavili datoteku, koristite poveznice tipa 'filetype-unwanted-type' => "'''\".\$1\"''' je neželjena vrsta datoteke. {{PLURAL:\$3|Preporučena vrsta je|Preporučene vrste su}} \$2.", 'filetype-banned-type' => "'''\".\$1\"''' je nedopuštena vrsta datoteke. {{PLURAL:\$3|Dopuštena vrsta je|Dopuštene vrste su}} \$2.", 'filetype-missing' => 'Datoteka nema nastavak koji određuje tip (poput ".jpg").', +'empty-file' => 'Datoteka koju ste poslali je prazna.', +'file-too-large' => 'Datoteka koju ste poslali bila je prevelika.', +'filename-tooshort' => 'Ime datoteke je prekratko.', +'filetype-banned' => 'Ova vrsta datoteke je zabranjena.', +'verification-error' => 'Ova datoteka nije prošla provjeru datoteke.', +'hookaborted' => 'Izmjena koju ste pokušali napraviti prekinuta je od strane ekstenzije.', +'illegal-filename' => 'Ime datoteke nije dopušteno.', +'overwrite' => 'Postaviti preko postojeće datoteke nije dozvoljeno.', +'unknown-error' => 'Nepoznata pogreška.', +'tmp-create-error' => 'Ne mogu stvoriti privremenu datoteku.', +'tmp-write-error' => 'Pogreška prilikom pisanja privremene datoteke.', 'large-file' => 'Preporučljivo je da datoteke ne prelaze $1; Ova datoteka je $2.', 'largefileserver' => 'Veličina ove datoteke veća je od one dopuštene postavkama poslužitelja.', 'emptyfile' => 'Datoteka koju ste postavili je prazna. Možda se radi o krivo utipkanom imenu datoteke. Provjerite želite li zaista postaviti ovu datoteku.', @@ -1627,13 +1653,14 @@ Ako i dalje želite postaviti svoju datoteku, molimo vratite se i odaberite novo Ako još uvijek želite postaviti svoju datoteku, idite nazad i postavite ju pod drugim imenom. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Ova datoteka je duplikat {{PLURAL:$1|sljedeće datoteke|sljedećih datoteka}}:', 'file-deleted-duplicate' => 'Datoteka istovjetna ovoj datoteci ([[:$1]]) prethodno je obrisana. Provjerite evidenciju brisanja za tu datoteke datoteku prije nego što nastavite s ponovnim postavljanjem.', -'successfulupload' => 'Postavljanje uspješno.', 'uploadwarning' => 'Upozorenje kod postavljanja', 'uploadwarning-text' => 'Molimo izmijenite opis datoteke ispod i pokušajte kasnije.', 'savefile' => 'Sačuvaj datoteku', 'uploadedimage' => 'postavljeno "$1"', 'overwroteimage' => 'postavljena nova inačica od "[[$1]]"', 'uploaddisabled' => 'Postavljanje je onemogućeno', +'copyuploaddisabled' => 'Postavljanje URL-om onemogućeno.', +'uploadfromurl-queued' => 'Vaše postavljanje je na čekanju.', 'uploaddisabledtext' => 'Postavljanje datoteka je onemogućeno.', 'php-uploaddisabledtext' => 'Postavljanja datoteka su onemogućena u PHP-u. Molimo provjerite postavke za postavljanje datoteka.', 'uploadscripted' => 'Ova datoteka sadrži HTML ili skriptu, što može dovesti do grešaka u web pregledniku.', @@ -1652,6 +1679,14 @@ Ako još uvijek želite postaviti svoju datoteku, idite nazad i postavite ju pod Razmislite je li prigodno nastaviti s postavljanjem ove datoteke. Slijedi evidencija brisanja ove datoteke s obrazloženjem prethodnog brisanja:", 'filename-bad-prefix' => "Ime datoteke koju snimate počinje s '''\"\$1\"''', što je ime koje slikama tipično dodjeljuju digitalni fotoaparati. Molimo izaberite bolje ime (neko koje bolje opisuje sliku nego \$1).", +'upload-success-subj' => 'Postavljanje uspješno.', +'upload-success-msg' => 'Vaša datoteka iz [$2] je uspješno postavljena. Dostupna je ovdje: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Greška pri postavljanju', +'upload-failure-msg' => 'Došlo je do problema s Vašim postavljanjem datoteke [$2]: + +$1', +'upload-warning-subj' => 'Upozorenje kod postavljanja', +'upload-warning-msg' => 'Došlo je do problema s Vašim postavljanjem datoteke iz [$2]. Možete se vratiti u [[Special:Upload/stash/$1|obrazac za postavljanje]] i ispraviti problem.', 'upload-proto-error' => 'Protokol nije valjan', 'upload-proto-error-text' => 'Udaljeno snimanje zahtijeva URL-ove koji počinju sa http:// ili ftp://.', @@ -1714,6 +1749,7 @@ Poredak datoteka mijenja se pritiskom na naslov stupca.', 'listfiles_search_for' => 'Traži ime slike:', 'imgfile' => 'datoteka', 'listfiles' => 'Popis slika', +'listfiles_thumb' => 'Smanjeni pregled', 'listfiles_date' => 'Datum', 'listfiles_name' => 'Naziv slike', 'listfiles_user' => 'Suradnik', @@ -1825,8 +1861,8 @@ Slijedeći popis prikazuje {{PLURAL:$1|stranice koje|prvih $1 stranica koje}} vo 'statistics-edits' => 'Broj uređivanja od nastanka projekta {{SITENAME}}', 'statistics-edits-average' => 'Prosječan broj uređivanja po stranici', 'statistics-views-total' => 'Posjeta ukupno', +'statistics-views-total-desc' => 'Posjeti nepostojećim i posebnim stranicama nisu uključeni', 'statistics-views-peredit' => 'Posjeta po uređivanju', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Red poslova]', 'statistics-users' => 'Prijavljeni [[Special:ListUsers|suradnici]]', 'statistics-users-active' => 'Aktivni suradnici', 'statistics-users-active-desc' => 'Suradnici koji su napravili neku od radnji u posljednjih {{PLURAL:$1|dan|$1 dana}}', @@ -1842,7 +1878,7 @@ Stranica se tretira kao razdvojbena stranica ako koristi predložak na kojega vo 'doubleredirectstext' => 'Ova stranica sadrži popis stranica koje preusmjeravju na druge stranice za preusmjeravanje. Svaki redak sadrži poveznice na prvo i drugo preusmjeravanje, kao i odredište drugog preusmjeravanja koja obično ukazuje na "pravu" odredišnu stranicu, na koju bi trebalo pokazivati prvo preusmjeravanje. -Precrtane stavke su riješene.', +Precrtane stavke su riješene.', 'double-redirect-fixed-move' => '[[$1]] je premješten, sada je preusmjeravanje na [[$2]]', 'double-redirect-fixer' => 'Popravljač preusmjeravanja', @@ -1865,6 +1901,8 @@ koja obično ukazuje na "pravu" odredišnu stranicu, na koju bi trebalo pokaziva 'nmembers' => '$1 {{PLURAL:$1|član|članova}}', 'nrevisions' => '$1 {{PLURAL:$1|inačica|inačice|inačica}}', 'nviews' => '$1 {{PLURAL:$1|put pogledano|puta pogledano|puta pogledano}}', +'nimagelinks' => 'Koristi se na $1 {{PLURAL:$1|stranici|stranice|stranica}}', +'ntransclusions' => 'koristi se na $1 {{PLURAL:$1|stranici|stranice|stranica}}', 'specialpage-empty' => 'Nema rezultata za traženi izvještaj.', 'lonelypages' => 'Stranice siročad', 'lonelypagestext' => 'Sljedeće stranice nemaju poveznicu na druge stranice niti su uključene transkluzijom u druge stranice projekta {{SITENAME}}.', @@ -2020,36 +2058,42 @@ Dodatne informacije o pojedinim pravim se mogu pronaći [[{{MediaWiki:Listgroupr 'listgrouprights-removegroup-self-all' => 'Uklonite sve skupine iz vlastitog računa', # E-mail user -'mailnologin' => 'Nema adrese pošiljaoca', -'mailnologintext' => 'Morate biti [[Special:UserLogin|prijavljeni]] +'mailnologin' => 'Nema adrese pošiljaoca', +'mailnologintext' => 'Morate biti [[Special:UserLogin|prijavljeni]] i imati valjanu adresu e-pošte u svojim [[Special:Preferences|postavkama]] da bi mogli slati poštu drugim suradnicima.', -'emailuser' => 'Pošalji e-poštu ovom suradniku', -'emailpage' => 'Pošalji e-poštu suradniku', -'emailpagetext' => 'Možete koristiti ovaj obrazac za slanje elektroničke pošte ovom suradniku. +'emailuser' => 'Pošalji e-poštu ovom suradniku', +'emailpage' => 'Pošalji e-poštu suradniku', +'emailpagetext' => 'Možete koristiti ovaj obrazac za slanje elektroničke pošte ovom suradniku. E-mail adresa iz Vaših [[Special:Preferences|postavki]] nalazit će se u "From" polju poruke i primatelj će Vam moći izravno odgovoriti.', -'usermailererror' => 'Sustav pošte javio je pogrešku:', -'defemailsubject' => '{{SITENAME}} elektronička pošta (e-mail)', -'noemailtitle' => 'Nema adrese primaoca', -'noemailtext' => 'Ovaj suradnik nije odredio valjanu e-mail adresu.', -'nowikiemailtitle' => 'E-mail nije dozvoljen', -'nowikiemailtext' => 'Ovaj suradnik je odlučio ne primati e-mail od drugih suradnika.', -'email-legend' => 'Pošalji elektroničku poštu drugom suradniku projekta {{SITENAME}}', -'emailfrom' => 'Od:', -'emailto' => 'Za:', -'emailsubject' => 'Tema:', -'emailmessage' => 'Poruka:', -'emailsend' => 'Pošalji', -'emailccme' => 'Pošalji mi e-mailom kopiju moje poruke.', -'emailccsubject' => 'Kopija Vaše poruke suradniku $1: $2', -'emailsent' => 'E-mail poslan', -'emailsenttext' => 'Vaša poruka je poslana.', -'emailuserfooter' => 'Ovaj e-mail je poslan od $1 za $2 korištenjem "elektroničke pošte" s projekta {{SITENAME}}.', +'usermailererror' => 'Sustav pošte javio je pogrešku:', +'defemailsubject' => '{{SITENAME}} elektronička pošta (e-mail)', +'usermaildisabled' => 'Suradnička e-pošta je onemogućena', +'usermaildisabledtext' => 'Ne možete slati e-poštu drugim suradnicima na ovom wikiju', +'noemailtitle' => 'Nema adrese primaoca', +'noemailtext' => 'Ovaj suradnik nije odredio valjanu e-mail adresu.', +'nowikiemailtitle' => 'E-mail nije dozvoljen', +'nowikiemailtext' => 'Ovaj suradnik je odlučio ne primati e-mail od drugih suradnika.', +'email-legend' => 'Pošalji elektroničku poštu drugom suradniku projekta {{SITENAME}}', +'emailfrom' => 'Od:', +'emailto' => 'Za:', +'emailsubject' => 'Tema:', +'emailmessage' => 'Poruka:', +'emailsend' => 'Pošalji', +'emailccme' => 'Pošalji mi e-mailom kopiju moje poruke.', +'emailccsubject' => 'Kopija Vaše poruke suradniku $1: $2', +'emailsent' => 'E-mail poslan', +'emailsenttext' => 'Vaša poruka je poslana.', +'emailuserfooter' => 'Ovaj e-mail je poslan od $1 za $2 korištenjem "elektroničke pošte" s projekta {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Ostavljanje poruke sustava.', +'usermessage-editor' => 'Uređivač sistemskih poruka', # Watchlist 'watchlist' => 'Moj popis praćenja', 'mywatchlist' => 'Moj popis praćenja', -'watchlistfor' => "(suradnika '''$1''')", +'watchlistfor2' => 'Za $1 $2', 'nowatchlist' => 'Na Vašem popisu praćenja nema nijednog članka.', 'watchlistanontext' => 'Molimo Vas $1 kako biste mogli vidjeti ili uređivati Vaš popis praćenih stranica.', 'watchnologin' => 'Niste prijavljeni', @@ -2166,7 +2210,10 @@ Posljednju promjenu napravio je [[User:$3|$3]] ([[User talk:$3|Razgovor]]{{int:p 'revertpage' => 'Uklonjena promjena suradnika $2, vraćeno na zadnju inačicu suradnika $1', 'revertpage-nouser' => 'Vraćene izmjene suradnika (suradničko ime uklonjeno) na posljednju inačicu suradnika [[User:$1|$1]]', 'rollback-success' => 'Uklonjeno uređivanje suradnika $1; vraćeno na zadnju inačicu suradnika $2.', -'sessionfailure' => 'Uočili smo problem s Vašom prijavom. Zadnja naredba nije izvršena kako bi se izbjegla zloupotreba. Molimo Vas da se u pregledniku vratite natrag na prethodnu stranicu, ponovno je učitate i zatim pokušate opet.', + +# Edit tokens +'sessionfailure-title' => 'Prekid sesije', +'sessionfailure' => 'Uočili smo problem s Vašom prijavom. Zadnja naredba nije izvršena kako bi se izbjegla zloupotreba. Molimo Vas da se u pregledniku vratite natrag na prethodnu stranicu, ponovno je učitate i zatim pokušate opet.', # Protect 'protectlogpage' => 'Evidencija zaštićivanja', @@ -2295,18 +2342,22 @@ $1', 'month' => 'Od mjeseca (i ranije):', 'year' => 'Od godine (i ranije):', -'sp-contributions-newbies' => 'Prikaži samo doprinose novih suradnika', -'sp-contributions-newbies-sub' => 'Za nove suradnike', -'sp-contributions-newbies-title' => 'Doprinosi novih suradnika', -'sp-contributions-blocklog' => 'Evidencija blokiranja', -'sp-contributions-deleted' => 'obrisani suradnički doprinosi', -'sp-contributions-logs' => 'evidencije', -'sp-contributions-talk' => 'razgovor', -'sp-contributions-userrights' => 'upravljanje suradničkim pravima', -'sp-contributions-blocked-notice' => 'Ovaj suradnik je trenutačno blokiran. Posljednja stavka evidencije blokiranja navedena je niže kao napomena:', -'sp-contributions-search' => 'Pretraži doprinose', -'sp-contributions-username' => 'IP adresa ili suradnik:', -'sp-contributions-submit' => 'Traži', +'sp-contributions-newbies' => 'Prikaži samo doprinose novih suradnika', +'sp-contributions-newbies-sub' => 'Za nove suradnike', +'sp-contributions-newbies-title' => 'Doprinosi novih suradnika', +'sp-contributions-blocklog' => 'Evidencija blokiranja', +'sp-contributions-deleted' => 'obrisani suradnički doprinosi', +'sp-contributions-uploads' => "snimljene datoteke (''uploads'')", +'sp-contributions-logs' => 'evidencije', +'sp-contributions-talk' => 'razgovor', +'sp-contributions-userrights' => 'upravljanje suradničkim pravima', +'sp-contributions-blocked-notice' => 'Ovaj suradnik je trenutačno blokiran. Posljednja stavka evidencije blokiranja navedena je niže kao napomena:', +'sp-contributions-blocked-notice-anon' => 'Ova IP adresa je trenutačno blokirana. +Posljednja stavka evidencije blokiranja navedena je niže kao napomena:', +'sp-contributions-search' => 'Pretraži doprinose', +'sp-contributions-username' => 'IP adresa ili suradnik:', +'sp-contributions-toponly' => 'Prikaži samo najnovije izmjene', +'sp-contributions-submit' => 'Traži', # What links here 'whatlinkshere' => 'Što vodi ovamo', @@ -2369,7 +2420,6 @@ Pogledaj [[Special:IPBlockList|popis blokiranih IP adresa]] za pregled.', 'ipb-edit-dropdown' => 'Uredi razloge blokiranja', 'ipb-unblock-addr' => 'Odblokiraj $1', 'ipb-unblock' => 'Odblokiraj suradničko ime ili IP adresu', -'ipb-blocklist-addr' => 'Postojeća blokiranja za $1', 'ipb-blocklist' => 'Vidi postojeća blokiranja', 'ipb-blocklist-contribs' => 'Doprinosi za $1', 'unblockip' => 'Deblokiraj suradnika', @@ -2438,6 +2488,8 @@ $1 je već blokiran. Želite promijeniti postavke blokiranja?', 'sorbs_create_account_reason' => 'Vaša IP adresa je na popisu otvorenih posrednika na poslužitelju DNSBL. Ne možete otvoriti račun.', 'cant-block-while-blocked' => 'Ne možete blokirati druge suradnike dok ste blokirani.', 'cant-see-hidden-user' => 'Korisnik kojeg pokušavate blokirati je već blokiran i sakriven. Pošto nemate prava hideuser (sakrivanje korisnika), ne možete vidjeti ni urediti korisnikovu blokadu.', +'ipbblocked' => 'Ne možete blokirati ili odblokirati druge suradnike, jer ste blokirani', +'ipbnounblockself' => 'Nije Vam dopušteno odblokirati se', # Developer tools 'lockdb' => 'Zaključaj bazu podataka', @@ -2473,6 +2525,17 @@ To znači: 1. ako pogriješite, možete opet preimenovati stranicu na stari nasl '''Upozorenje!''' Ovo može biti drastična i neočekivana promjena kad su u pitanju popularne stranice. Molimo dobro razmislite prije nego što preimenujete stranicu.", +'movepagetext-noredirectfixer' => "Pomoću donjeg obrasca ćete preimenovati stranicu i premjestiti sve stare izmjene na novo ime. +Stari će se naslov pretvoriti u stranicu koja automatski preusmjerava na novi naslov. +Budite sigurni da ste provjerili [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|nevaljana preusmjeravanja]]. +Vi ste odgovorni za to da poveznice i dalje povezuju tamo gdje treba. + +Imajte na umu da stranica '''neće''' biti premještena ako već postoji stranica s novim naslovom, osim u slučaju prazne stranice ili stranice za preusmjeravanje koja nema nikakvih starih izmjena. +To znači da stranicu možete preimenovati u prethodno ime ukoliko ste pogriješili te ne možete pisati preko postojeće stranice. + +'''Upozorenje!''' +Ovo može biti drastična i neočekivana promjena kad su u pitanju popularne stranice; +budite sigurni da razumijete posljedice ove akcije prije nastavka.", 'movepagetalktext' => "Stranica za razgovor, ako postoji, automatski će se premjestiti zajedno sa stranicom koju premještate. '''Stranica za razgovor neće se premjestiti ako:''' *premještate stranicu iz jednog prostora u drugi, *pod novim imenom već postoji stranica za razgovor s nekim sadržajem, ili @@ -2530,6 +2593,7 @@ Odredišni članak "[[:$1]]" već postoji. Želite li ga obrisati da biste napra 'immobile-source-page' => 'Ova stranica je se ne može premjestiti.', 'immobile-target-page' => 'Ne mogu premjestiti na željeni naslov.', 'imagenocrossnamespace' => 'Datoteka ne može biti premještena u imenski prostor koji nije za datoteke', +'nonfile-cannot-move-to-file' => 'Ne mogu premjestiti nešto što nije datoteka u imenski prostor za datoteke', 'imagetypemismatch' => 'Ekstenzija nove datoteke se ne poklapa sa svojim tipom.', 'imageinvalidfilename' => 'Ciljano ime datoteke je nevaljano', 'fix-double-redirects' => 'Ažuriraj sva preusmjeravanja koja vode na originalni naslov', @@ -2608,6 +2672,7 @@ Snimite je na svoje računalo i postavite je ovdje.', 'importstart' => 'Uvozim stranice...', 'import-revision-count' => '$1 {{PLURAL:$1|izmjena|izmjene|izmjena}}', 'importnopages' => 'Nema stranica za uvoz.', +'imported-log-entries' => '{{PLURAL:$1|Uvezen $1 unos u evidenciju|Uvezena $1 unosa u evidenciju|Uvezeno $1 unosa u evidenciju}}.', 'importfailed' => 'Uvoz nije uspio: $1', 'importunknownsource' => 'Nepoznat tip stranica za uvoz', 'importcantopen' => 'Ne mogu otvoriti datoteku za uvoz', @@ -2700,6 +2765,8 @@ Snimite je na svoje računalo i postavite je ovdje.', 'tooltip-upload' => "Pokreni snimanje (''upload'')", 'tooltip-rollback' => '"Ukloni" uklanja uređivanja zadnjeg suradnika na ovoj stranici.', 'tooltip-undo' => '"Ukloni ovu izmjenu" uklanja ovu izmjenu i otvara okvir za uređivanje. Omogućava unošenje razloga u sažetak.', +'tooltip-preferences-save' => 'Spremi postavke', +'tooltip-summary' => 'Unesite kratki sažetak', # Stylesheets 'common.css' => '/** Uređivanje ove CSS datoteke će se odraziti na sve skinove */', @@ -2810,14 +2877,17 @@ Njegovim izvršavanjem mogli biste oštetiti svoj sustav.", 'imagemaxsize' => "Ograniči veličinu slike:
    ''(za stranicu s opisom datoteke)''", 'thumbsize' => 'Veličina sličice (umanjene inačice slike):', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|stranica|stranice}}', -'file-info' => '(veličina datoteke: $1, MIME tip: $2)', -'file-info-size' => '($1 × $2 piksela, veličina datoteke: $3, MIME tip: $4)', +'file-info' => 'veličina datoteke: $1, MIME tip: $2', +'file-info-size' => '$1 × $2 piksela, veličina datoteke: $3, MIME tip: $4', 'file-nohires' => 'Viša rezolucija nije dostupna.', -'svg-long-desc' => '(SVG datoteka, nominalno $1 × $2 piksela, veličina datoteke: $3)', +'svg-long-desc' => 'SVG datoteka, nominalno $1 × $2 piksela, veličina datoteke: $3', 'show-big-image' => 'Vidi sliku u punoj veličini (rezoluciji)', 'show-big-image-thumb' => 'Veličina pretpregleda: $1 × $2 piksela', 'file-info-gif-looped' => 'animacija se ponavlja', 'file-info-gif-frames' => '$1 {{PLURAL:$1|okvir|okvira}}', +'file-info-png-looped' => 'animacija se ponavlja', +'file-info-png-repeat' => 'prikazano $1 {{PLURAL:$1|puta|puta|puta}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|okvir|okvira}}', # Special:NewFiles 'newimages' => 'Galerija novih datoteka', @@ -2974,6 +3044,7 @@ Svaka sljedeća poveznica u istom retku je izuzetak, npr. kod stranica gdje se s 'exif-gpsareainformation' => 'Ime GPS područja', 'exif-gpsdatestamp' => 'GPS datum', 'exif-gpsdifferential' => 'GPS diferencijalna korekcija', +'exif-objectname' => 'Kratki naslov', # EXIF attributes 'exif-compression-1' => 'Nesažeto', @@ -3133,26 +3204,26 @@ Svaka sljedeća poveznica u istom retku je izuzetak, npr. kod stranica gdje se s 'limitall' => 'sve', # E-mail address confirmation -'confirmemail' => 'Potvrda e-mail adrese', -'confirmemail_noemail' => 'Niste unijeli važeću e-mail adresu u Vaše [[Special:Preferences|suradničke postavke]].', -'confirmemail_text' => 'U ovom wikiju morate prije korištenja e-mail naredbi potvrditi svoju e-mail adresu. Kliknite na gumb ispod kako biste poslali poruku s potvrdom na Vašu adresu. U poruci će biti poveznica koju morate otvoriti u svom web pregledniku i time potvrditi svoju e-mail adresu.', -'confirmemail_pending' => 'Već Vam je e-mailom poslan potvrdni kôd; +'confirmemail' => 'Potvrda e-mail adrese', +'confirmemail_noemail' => 'Niste unijeli važeću e-mail adresu u Vaše [[Special:Preferences|suradničke postavke]].', +'confirmemail_text' => 'U ovom wikiju morate prije korištenja e-mail naredbi potvrditi svoju e-mail adresu. Kliknite na gumb ispod kako biste poslali poruku s potvrdom na Vašu adresu. U poruci će biti poveznica koju morate otvoriti u svom web pregledniku i time potvrditi svoju e-mail adresu.', +'confirmemail_pending' => 'Već Vam je e-mailom poslan potvrdni kôd; ako ste upravo otvorili suradnički račun, molimo pričekajte još nekoliko minuta da e-mail stigne prije nego što zatražite novi kôd.', -'confirmemail_send' => 'Pošalji kôd za potvrdu e-mail adrese', -'confirmemail_sent' => 'Poruka s potvrdom je poslana.', -'confirmemail_oncreate' => 'Potvrdni kôd poslan je na Vašu e-mail adresu. +'confirmemail_send' => 'Pošalji kôd za potvrdu e-mail adrese', +'confirmemail_sent' => 'Poruka s potvrdom je poslana.', +'confirmemail_oncreate' => 'Potvrdni kôd poslan je na Vašu e-mail adresu. Ovaj kôd nije potreban za prijavljivanje, no bit će Vam potreban kako biste osposobili neke od postavki na Wikipediji koje uključuju elektroničku poštu.', -'confirmemail_sendfailed' => 'Projekt {{SITENAME}} nije uspio poslati Vaš potvrdni e-mail. +'confirmemail_sendfailed' => 'Projekt {{SITENAME}} nije uspio poslati Vaš potvrdni e-mail. Provjerite sadrži li adresa nedopuštene znakove. Poruka o pogrešci e-mail poslužitelja: $1', -'confirmemail_invalid' => 'Pogrešna potvrda. Kôd je možda istekao.', -'confirmemail_needlogin' => 'Molimo $1 kako biste potvrdili Vašu e-mail adresu.', -'confirmemail_success' => 'Vaša je e-mail adresa potvrđena. Možete se prijaviti i uživati u wikiju.', -'confirmemail_loggedin' => 'Vaša je e-mail adresa potvrđena.', -'confirmemail_error' => 'Došlo je do greške kod snimanja Vaše potvrde.', -'confirmemail_subject' => '{{SITENAME}}: potvrda e-mail adrese', -'confirmemail_body' => 'Netko, vjerojatno Vi, s IP adrese $1 je otvorio +'confirmemail_invalid' => 'Pogrešna potvrda. Kôd je možda istekao.', +'confirmemail_needlogin' => 'Molimo $1 kako biste potvrdili Vašu e-mail adresu.', +'confirmemail_success' => 'Vaša je e-mail adresa potvrđena. Možete se prijaviti i uživati u wikiju.', +'confirmemail_loggedin' => 'Vaša je e-mail adresa potvrđena.', +'confirmemail_error' => 'Došlo je do greške kod snimanja Vaše potvrde.', +'confirmemail_subject' => '{{SITENAME}}: potvrda e-mail adrese', +'confirmemail_body' => 'Netko, vjerojatno Vi, s IP adrese $1 je otvorio suradnički račun pod imenom "$2" s ovom e-mail adresom na {{SITENAME}}. Kako biste potvrdili da je ovaj suradnički račun uistinu Vaš i @@ -3166,8 +3237,36 @@ Ako to *niste* Vi, slijedite ovaj link za poništavanje potvrde: $5 Valjanost ovog potvrdnog koda istječe na $4.', -'confirmemail_invalidated' => 'Potvrda E-mail adrese je otkazana', -'invalidateemail' => 'Poništi potvrđivanje elektroničke pošte', +'confirmemail_body_changed' => 'Netko, vjerojatno Vi, s IP adrese $1, +promijenio je adresu e-pošte suradničkog računa "$2" u ovu adresu na {{SITENAME}}. + +Kako biste potvrdili da je ovaj suradnički račun uistinu Vaš te uključili +mogućnosti e-pošte na {{SITENAME}}, otvorite u Vašem pregledniku sljedeću poveznicu: + +$3 + +Ukoliko suradnički račun *ne* pripada Vama, slijedite ovu poveznicu +za poništavanje potvrde adrese e-pošte: + +$5 + +Valjanost ovog potvrdnog koda istječe $4.', +'confirmemail_body_set' => 'Netko, najvjerojatnije vi, s IP adrese $1, +otvorio je suradnički račun pod imenom "$2" s ovom e-mail adresom na {{SITENAME}}. + +Kako biste potvrdili da je ovaj suradnički račun uistinu vaš i uključili +e-mail naredbe na {{SITENAME}}, otvorite u vašem pregledniku sljedeću poveznicu: + +$3 + +Ako ovaj suradnički račun *ne* pripada vama, slijedite ovaj link +kako biste poništili potvrdu e-mail adrese: + +$5 + +Valjanost ovog potvrdnog koda istječe u $4', +'confirmemail_invalidated' => 'Potvrda E-mail adrese je otkazana', +'invalidateemail' => 'Poništi potvrđivanje elektroničke pošte', # Scary transclusion 'scarytranscludedisabled' => '[Interwiki transkluzija isključena]', @@ -3207,6 +3306,7 @@ Potvrdite namjeru vraćanja ovog članka.", 'table_pager_first' => 'Prva stranica', 'table_pager_last' => 'Zadnja stranica', 'table_pager_limit' => 'Prikaži $1 slika po stranici', +'table_pager_limit_label' => 'Stavke po stranici:', 'table_pager_limit_submit' => 'Idi', 'table_pager_empty' => 'Nema rezultata', @@ -3262,6 +3362,7 @@ Također možete koristiti [[Special:Watchlist/edit|standardni editor]].', 'version-specialpages' => 'Posebne stranice', 'version-parserhooks' => 'Kuke parsera', 'version-variables' => 'Varijable', +'version-skins' => 'Izgledi', 'version-other' => 'Ostalo', 'version-mediahandlers' => 'Rukovatelji medijima', 'version-hooks' => 'Kuke', @@ -3273,6 +3374,13 @@ Također možete koristiti [[Special:Watchlist/edit|standardni editor]].', 'version-hook-subscribedby' => 'Pretplaćeno od', 'version-version' => '(Inačica $1)', 'version-license' => 'Licencija', +'version-poweredby-credits' => "Ovaj wiki pogoni '''[http://www.mediawiki.org/ MediaWiki]''', autorska prava © 2001-$1 $2.", +'version-poweredby-others' => 'ostali', +'version-license-info' => 'MediaWiki je slobodni softver; možete ga distribuirati i/ili mijenjati pod uvjetima GNU opće javne licencije u obliku u kojem ju je objavila Free Software Foundation; bilo verzije 2 licencije, ili (Vama na izbor) bilo koje kasnije verzije. + +MediaWiki je distribuiran u nadi da će biti koristan, no BEZ IKAKVOG JAMSTVA; čak i bez impliciranog jamstva MOGUĆNOSTI PRODAJE ili PRIKLADNOSTI ZA ODREĐENU NAMJENU. Pogledajte GNU opću javnu licenciju za više detalja. + +Trebali ste primiti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopiju GNU opće javne licencije] uz ovaj program; ako ne, pišite na Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, ili je [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html pročitajte online].', 'version-software' => 'Instalirani softver', 'version-software-product' => 'Proizvod', 'version-software-version' => 'Verzija', @@ -3342,6 +3450,15 @@ Unesite ime datoteke bez prefiksa "{{ns:file}}:"', 'tags-edit' => 'uredi', 'tags-hitcount' => '$1 {{PLURAL:$1|promjena|promjene|promjena}}', +# Special:ComparePages +'comparepages' => 'Usporedite stranice', +'compare-selector' => 'Usporedite inačice stranice', +'compare-page1' => 'Stranica 1', +'compare-page2' => 'Stranica 2', +'compare-rev1' => 'Izmjena 1', +'compare-rev2' => 'Izmjena 2', +'compare-submit' => 'Usporedite', + # Database error messages 'dberr-header' => 'Ovaj wiki ima problem', 'dberr-problems' => 'Ispričavamo se! Ova stranica ima tehničkih poteškoća.', @@ -3358,8 +3475,13 @@ Unesite ime datoteke bez prefiksa "{{ns:file}}:"', 'htmlform-float-invalid' => 'Vrijednost koju ste naveli nije broj.', 'htmlform-int-toolow' => 'Vrijednost koju ste naveli je ispod minimuma od $1', 'htmlform-int-toohigh' => 'Vrijednost koju ste naveli je iznad maksimuma od $1', +'htmlform-required' => 'Ova vrijednost je potrebna', 'htmlform-submit' => 'Pošalji', 'htmlform-reset' => 'Poništi izmjene', 'htmlform-selectorother-other' => 'Drugi', +# SQLite database support +'sqlite-has-fts' => '$1 s podrškom pretraživanja cijelog teksta', +'sqlite-no-fts' => '$1 bez podrške pretraživanja cijelog teksta', + ); diff --git a/languages/messages/MessagesHsb.php b/languages/messages/MessagesHsb.php index 208fe192..13114943 100644 --- a/languages/messages/MessagesHsb.php +++ b/languages/messages/MessagesHsb.php @@ -42,59 +42,59 @@ $namespaceAliases = array( ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'Dwójne daleposrědkowanja' ), - 'BrokenRedirects' => array( 'Skóncowane daleposrědkowanja' ), - 'Disambiguations' => array( 'Rozjasnjenja wjazmyslnosće' ), + 'DoubleRedirects' => array( 'Dwójne_daleposrědkowanja' ), + 'BrokenRedirects' => array( 'Skóncowane_daleposrědkowanja' ), + 'Disambiguations' => array( 'Rozjasnjenja_wjazmyslnosće' ), 'Userlogin' => array( 'Přizwjewić' ), 'Userlogout' => array( 'Wotzjewić' ), - 'CreateAccount' => array( 'Konto wutworić' ), + 'CreateAccount' => array( 'Konto_wutworić' ), 'Preferences' => array( 'Nastajenja' ), 'Watchlist' => array( 'Wobkedźbowanki' ), - 'Recentchanges' => array( 'Aktualne změny' ), + 'Recentchanges' => array( 'Aktualne_změny' ), 'Upload' => array( 'Nahraće' ), 'Listfiles' => array( 'Dataje' ), - 'Newimages' => array( 'Nowe dataje' ), + 'Newimages' => array( 'Nowe_dataje' ), 'Listusers' => array( 'Wužiwarjo' ), - 'Listgrouprights' => array( 'Skupinske prawa' ), + 'Listgrouprights' => array( 'Prawa_skupinow' ), 'Statistics' => array( 'Statistika' ), - 'Randompage' => array( 'Připadna strona' ), - 'Lonelypages' => array( 'Wosyroćene strony' ), - 'Uncategorizedpages' => array( 'Njekategorizowane strony' ), - 'Uncategorizedcategories' => array( 'Njekategorizowane kategorije' ), - 'Uncategorizedimages' => array( 'Njekategorizowane dataje' ), - 'Uncategorizedtemplates' => array( 'Njekategorizowane předłohi' ), - 'Unusedcategories' => array( 'Njewužiwane kategorije' ), - 'Unusedimages' => array( 'Njewužiwane dataje' ), - 'Wantedpages' => array( 'Požadane strony' ), - 'Wantedcategories' => array( 'Požadane kategorije' ), - 'Wantedfiles' => array( 'Falowace dataje' ), - 'Wantedtemplates' => array( 'Falowace předłohi' ), - 'Mostlinked' => array( 'Z najwjace stronami zwjazane strony' ), - 'Mostlinkedcategories' => array( 'Najhusćišo wužiwane kategorije' ), - 'Mostlinkedtemplates' => array( 'Najhusćišo wužiwane předłohi' ), - 'Mostimages' => array( 'Z najwjace stronami zwjazane dataje' ), - 'Mostcategories' => array( 'Strony z najwjace kategorijemi' ), - 'Mostrevisions' => array( 'Strony z najwjace wersijemi' ), - 'Fewestrevisions' => array( 'Strony z najmjenje wersijemi' ), - 'Shortpages' => array( 'Najkrótše strony' ), - 'Longpages' => array( 'Najdlěše strony' ), - 'Newpages' => array( 'Nowe strony' ), - 'Ancientpages' => array( 'Najstarše strony' ), - 'Deadendpages' => array( 'Strony bjez wotkazow' ), - 'Protectedpages' => array( 'Škitane strony' ), - 'Protectedtitles' => array( 'Škitane titule' ), - 'Allpages' => array( 'Wšě strony' ), + 'Randompage' => array( 'Připadna_strona' ), + 'Lonelypages' => array( 'Wosyroćene_strony' ), + 'Uncategorizedpages' => array( 'Njekategorizowane_strony' ), + 'Uncategorizedcategories' => array( 'Njekategorizowane_kategorije' ), + 'Uncategorizedimages' => array( 'Njekategorizowane_dataje' ), + 'Uncategorizedtemplates' => array( 'Njekategorizowane_předłohi' ), + 'Unusedcategories' => array( 'Njewužiwane_kategorije' ), + 'Unusedimages' => array( 'Njewužiwane_dataje' ), + 'Wantedpages' => array( 'Požadane_strony' ), + 'Wantedcategories' => array( 'Požadane_kategorije' ), + 'Wantedfiles' => array( 'Falowace_dataje' ), + 'Wantedtemplates' => array( 'Falowace_předłohi' ), + 'Mostlinked' => array( 'Z_najwjace_stronami_zwjazane_strony' ), + 'Mostlinkedcategories' => array( 'Najhusćišo_wužiwane_kategorije' ), + 'Mostlinkedtemplates' => array( 'Najhusćišo_wužiwane_předłohi' ), + 'Mostimages' => array( 'Z_najwjace_stronami_zwjazane_dataje' ), + 'Mostcategories' => array( 'Strony_z_najwjace_kategorijemi' ), + 'Mostrevisions' => array( 'Strony_z_najwjace_wersijemi' ), + 'Fewestrevisions' => array( 'Strony_z_najmjenje_wersijemi' ), + 'Shortpages' => array( 'Najkrótše_strony' ), + 'Longpages' => array( 'Najdlěše_strony' ), + 'Newpages' => array( 'Nowe_strony' ), + 'Ancientpages' => array( 'Najstarše_strony' ), + 'Deadendpages' => array( 'Strony_bjez_wotkazow' ), + 'Protectedpages' => array( 'Škitane_strony' ), + 'Protectedtitles' => array( 'Škitane_titule' ), + 'Allpages' => array( 'Wšě_strony' ), 'Prefixindex' => array( 'Prefiksindeks' ), - 'Ipblocklist' => array( 'Blokowane IP-adresy' ), - 'Specialpages' => array( 'Specialne strony' ), + 'Ipblocklist' => array( 'Blokowane_IP-adresy' ), + 'Specialpages' => array( 'Specialne_strony' ), 'Contributions' => array( 'Přinoški' ), 'Emailuser' => array( 'E-Mejl' ), - 'Confirmemail' => array( 'E-Mejl potwjerdźić' ), - 'Whatlinkshere' => array( 'Lisćina wotkazow' ), - 'Recentchangeslinked' => array( 'Změny zwjazanych stronow' ), + 'Confirmemail' => array( 'E-Mejl_potwjerdźić' ), + 'Whatlinkshere' => array( 'Lisćina_wotkazow' ), + 'Recentchangeslinked' => array( 'Změny_zwjazanych_stronow' ), 'Movepage' => array( 'Přesunyć' ), - 'Blockme' => array( 'Blokowanje proksijow' ), - 'Booksources' => array( 'Pytanje po ISBN' ), + 'Blockme' => array( 'Blokowanje_proksijow' ), + 'Booksources' => array( 'Pytanje_po_ISBN' ), 'Categories' => array( 'Kategorije' ), 'Export' => array( 'Eksport' ), 'Version' => array( 'Wersija' ), @@ -103,32 +103,33 @@ $specialPageAliases = array( 'Blockip' => array( 'Blokować' ), 'Undelete' => array( 'Wobnowić' ), 'Import' => array( 'Importować' ), - 'Lockdb' => array( 'Datowu banku zamknyć' ), - 'Unlockdb' => array( 'Datowu banku wotamknyć' ), + 'Lockdb' => array( 'Datowu_banku_zamknyć' ), + 'Unlockdb' => array( 'Datowu_banku_wotamknyć' ), 'Userrights' => array( 'Prawa' ), - 'MIMEsearch' => array( 'Pytanje po MIME' ), - 'FileDuplicateSearch' => array( 'Duplikatowe pytanje' ), - 'Unwatchedpages' => array( 'Njewobkedźbowane strony' ), + 'MIMEsearch' => array( 'Pytanje_po_MIME' ), + 'FileDuplicateSearch' => array( 'Duplikatowe_pytanje' ), + 'Unwatchedpages' => array( 'Njewobkedźbowane_strony' ), 'Listredirects' => array( 'Daleposrědkowanja' ), - 'Revisiondelete' => array( 'Wušmórnjenje wersijow' ), - 'Unusedtemplates' => array( 'Njewužiwane předłohi' ), - 'Randomredirect' => array( 'Připadne daleposrědkowanje' ), - 'Mypage' => array( 'Moja wužiwarska strona' ), - 'Mytalk' => array( 'Moja diskusijna strona' ), - 'Mycontributions' => array( 'Moje přinoški' ), + 'Revisiondelete' => array( 'Wušmórnjenje_wersijow' ), + 'Unusedtemplates' => array( 'Njewužiwane_předłohi' ), + 'Randomredirect' => array( 'Připadne_daleposrědkowanje' ), + 'Mypage' => array( 'Moja_wužiwarska_strona' ), + 'Mytalk' => array( 'Moja_diskusijna_strona' ), + 'Mycontributions' => array( 'Moje_přinoški' ), 'Listadmins' => array( 'Administratorojo' ), 'Listbots' => array( 'Boćiki' ), - 'Popularpages' => array( 'Najwoblubowaniše strony' ), + 'Popularpages' => array( 'Najwoblubowaniše_strony' ), 'Search' => array( 'Pytać' ), - 'Resetpass' => array( 'Hesło wróćo stajić' ), - 'Withoutinterwiki' => array( 'Falowace mjezyrěčne wotkazy' ), - 'MergeHistory' => array( 'Stawizny zjednoćić' ), - 'Filepath' => array( 'Datajowy puć' ), - 'Invalidateemail' => array( 'Njepłaćiwa e-mejl' ), - 'Blankpage' => array( 'Prózdna strona' ), - 'LinkSearch' => array( 'Wotkazowe pytanje' ), - 'DeletedContributions' => array( 'Zničene přinoški' ), + 'Resetpass' => array( 'Hesło_wróćo_stajić' ), + 'Withoutinterwiki' => array( 'Falowace_mjezyrěčne_wotkazy' ), + 'MergeHistory' => array( 'Stawizny_zjednoćić' ), + 'Filepath' => array( 'Datajowy_puć' ), + 'Invalidateemail' => array( 'Njepłaćiwa_e-mejl' ), + 'Blankpage' => array( 'Prózdna_strona' ), + 'LinkSearch' => array( 'Wotkazowe_pytanje' ), + 'DeletedContributions' => array( 'Zničene_přinoški' ), 'Tags' => array( 'Taflički' ), + 'Activeusers' => array( 'Aktiwni_wužiwarjo' ), ); $messages = array( @@ -147,8 +148,7 @@ $messages = array( 'tog-editsection' => 'Wobdźěłowanje jednotliwych wotrězkow přez wotkazy [wobdźěłać] zmóžnić', 'tog-editsectiononrightclick' => 'Wobdźěłowanje jednotliwych wotrězkow přez kliknjenje z prawej tastu
    na nadpisma wotrězkow zmóžnić (JavaScript)', 'tog-showtoc' => 'Zapis wobsaha pokazać (za strony z wjace hač 3 nadpismami)', -'tog-rememberpassword' => 'Hesło na tutym ličaku składować', -'tog-editwidth' => 'Wobdźěłowanske polo wušěrić, zo by so cyła wobrazowka pjelniła', +'tog-rememberpassword' => 'Přizjewjenje na tutym wobhladowaku sej spomjatkować (za maksimalnje $1 {{PLURAL:$1|dźeń|dnjej|dny|dnjow}})', 'tog-watchcreations' => 'Strony, kotrež wutworjam, swojim wobkedźbowankam přidać', 'tog-watchdefault' => 'Strony, kotrež wobdźěłuju, swojim wobkedźbowankam přidać', 'tog-watchmoves' => 'Sam přesunjene strony wobkedźbowankam přidać', @@ -294,31 +294,21 @@ $messages = array( 'faqpage' => 'Project:Husto stajene prašenja (FAQ)', # Vector skin -'vector-action-addsection' => 'Temu přidać', -'vector-action-delete' => 'wušmórnyć', -'vector-action-move' => 'přesunyć', -'vector-action-protect' => 'škitać', -'vector-action-undelete' => 'Wobnowić', -'vector-action-unprotect' => 'Škit wotstronić', -'vector-namespace-category' => 'Kategorija', -'vector-namespace-help' => 'Strona pomocy', -'vector-namespace-image' => 'Dataja', -'vector-namespace-main' => 'Strona', -'vector-namespace-media' => 'Medijowa strona', -'vector-namespace-mediawiki' => 'Powěsć', -'vector-namespace-project' => 'Projektowa strona', -'vector-namespace-special' => 'Specialna strona', -'vector-namespace-talk' => 'Diskusija', -'vector-namespace-template' => 'Předłoha', -'vector-namespace-user' => 'Wužiwarska strona', -'vector-view-create' => 'Wutworić', -'vector-view-edit' => 'Wobdźěłać', -'vector-view-history' => 'Stawizny', -'vector-view-view' => 'Čitać', -'vector-view-viewsource' => 'Žórło sej wobhladać', -'actions' => 'Akcije', -'namespaces' => 'Mjenowe rumy', -'variants' => 'Warianty', +'vector-action-addsection' => 'Temu přidać', +'vector-action-delete' => 'wušmórnyć', +'vector-action-move' => 'přesunyć', +'vector-action-protect' => 'škitać', +'vector-action-undelete' => 'Wobnowić', +'vector-action-unprotect' => 'Škit wotstronić', +'vector-simplesearch-preference' => 'Polěpšene pytanske namjety zmóžnić (jenož šat Vector)', +'vector-view-create' => 'Wutworić', +'vector-view-edit' => 'Wobdźěłać', +'vector-view-history' => 'Stawizny', +'vector-view-view' => 'Čitać', +'vector-view-viewsource' => 'Žórło sej wobhladać', +'actions' => 'Akcije', +'namespaces' => 'Mjenowe rumy', +'variants' => 'Warianty', 'errorpagetitle' => 'Zmylk', 'returnto' => 'Wróćo k stronje $1.', @@ -379,6 +369,9 @@ Přewjele wužiwarjow pospytuje sej tutu stronu wobhladać. Prošu wočakń chwilku, prjedy hač pospytuješ sej tutu stronu hišće raz wobhladać. $1', +'pool-timeout' => 'Timeout, doniž zawrjenje skónčene njeje.', +'pool-queuefull' => 'Poolowa čakanska rynka je połna', +'pool-errorunknown' => 'Njeznaty zmylk:', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Wo {{GRAMMAR:lokatiw|{{SITENAME}}}}', @@ -542,7 +535,8 @@ Twoje konto bu wutworjene. Njezabudź swoje nastajenja za [[Special:Preferences| 'yourname' => 'Wužiwarske mjeno', 'yourpassword' => 'Hesło:', 'yourpasswordagain' => 'Hesło znowa zapodać', -'remembermypassword' => 'Hesło na tutym ličaku sej spomjatkować', +'remembermypassword' => 'Na tutym ličaku přizjewjeny wostać (za maksimalnje $1 {{PLURAL:$1|dźeń|dnjej|dny|dnjow}})', +'securelogin-stick-https' => 'Po přizjewjenju z HTTPS zwjazany wostać', 'yourdomainname' => 'Twoja domejna', 'externaldberror' => 'Běše pak eksterny zmylk awtentifikacije datoweje banki, pak njesměš swoje eksterne konto aktualizować.', 'login' => 'Přizjewić', @@ -559,6 +553,7 @@ Twoje konto bu wutworjene. Njezabudź swoje nastajenja za [[Special:Preferences| 'gotaccount' => "Maš hižo wužiwarske konto? '''$1'''.", 'gotaccountlink' => 'Přizjewić', 'createaccountmail' => 'z mejlku', +'createaccountreason' => 'Přičina:', 'badretype' => 'Hesle, kotrejž sy zapodał, so njekryjetej.', 'userexists' => 'Wužiwarske mjeno, kotrež sy zapodał, so hižo wužiwa. Wubjer druhe mjeno.', 'loginerror' => 'Zmylk při přizjewjenju', @@ -578,6 +573,7 @@ Přepruwuj swój prawopis abo [[Special:UserLogin/signup|wutwor nowe konto]].', 'wrongpasswordempty' => 'Hesło, kotrež sy zapodał, běše prózdne. Prošu spytaj hišće raz.', 'passwordtooshort' => 'Hesła dyrbja znajmjeńša {{PLURAL:$1|1 znamješko|$1 znamješce|$1 znamješka|$1 znamješkow}} měć.', 'password-name-match' => 'Twoje hesło dyrbi so wot twojeho wužiwarskeho mjena rozeznać.', +'password-login-forbidden' => 'Wužiwanje tutoho wužiwarskeho mjena a heska je zakazane.', 'mailmypassword' => 'Nowe hesło e-mejlować', 'passwordremindertitle' => 'Skedźbnjenje na hesło z {{GRAMMAR:genitiw|{{SITENAME}}}}', 'passwordremindertext' => 'Něchtó z IP-adresu $1 (najskerje ty) je wo nowe hesło za přizjewjenje za {{GRAMMAR:akuzatiw|{{SITENAME}}}} ($4) prosył. Nachwilne hesło za wužiwarja "$2" je so wutworiło a je nětko "$3". Jeli je to twój wotpohlad było dyrbiš so nětko přizjewić a nowe hesło wubrać. Twoje nachwilne hesło spadnje za {{PLURAL:$5|jeden dźeń|$5 dnjej|$5 dny|$5 dnjow}}. @@ -609,6 +605,9 @@ Móžeš tutu zdźělenku ignorować, jeli so wužiwarske konto zmylnje wutwori 'loginlanguagelabel' => 'Rěč: $1', 'suspicious-userlogout' => 'Twoje naprašowanje za wotzjewjenje bu wotpokazane, dokelž zda so, jako by so přez wobškodźeny wobhladowak abo pufrowacy proksy pósłało', +# E-mail sending +'php-mail-error-unknown' => 'Njeznaty zmylk w PHP-funkciji mail()', + # Password reset dialog 'resetpass' => 'Hesło změnić', 'resetpass_announce' => 'Sy so z nachwilnym e-mejlowanym hesłom přizjewił. Zo by přizjewjenje zakónčił, dyrbiš nětko nowe hesło postajić.', @@ -660,9 +659,10 @@ Snano sy swoje hesło hižo wuspěšnje změnił abo nowe nachwilne hesło poža 'showlivepreview' => 'Hnydomny přehlad', 'showdiff' => 'Změny pokazać', 'anoneditwarning' => 'Kedźbu: Njejsy přizjewjeny. Změny so z twojej IP-adresu składuja.', +'anonpreviewwarning' => "''Njejsy přizjewjeny. Składowanje přenošuje twoju IP-adresu do wobdźěłowanskeje historije tuteje strony.''", 'missingsummary' => 'Kedźbu: Njejsy žane zjeće zapodał. Jeli hišće raz na „Składować” kliknješ so twoje změny bjez komentara składuja.', 'missingcommenttext' => 'Prošu zapodaj zjeće.', -'missingcommentheader' => 'Kedźbu: Njejsy nadpis za tutón komentar podał. Jeli na „Składować” kliknješ, składuje so twoja změna bjez nadpisa.', +'missingcommentheader' => "'''Kedźbu:''' Njejsy temu/nadpis za tutón komentar podał. Jeli na „{{int:savearticle}}” kliknješ, składuje so twoja změna bjez temy/nadpisa.", 'summary-preview' => 'Přehlad zjeća:', 'subject-preview' => 'Přehlad temy:', 'blockedtitle' => 'Wužiwar je zablokowany', @@ -725,7 +725,11 @@ Móžeš [[Special:Search/{{PAGENAME}}|tutón titul strony]] na druhich stronach 'userjspreview' => "== Přehlad twojeho wosobinskeho JavaScript == '''Kedźbu:''' Po składowanju dyrbiš pufrowak swojeho wobhladowaka wuprózdnić '''Mozilla/Firefox:''' ''Strg-Shift-R'', '''Internet Explorer:''' ''Strg-F5'', '''Opera:''' ''F5'', '''Safari:''' ''Cmd-Shift-R'', '''Konqueror:''' ''F5''.", -'userinvalidcssjstitle' => "'''Warnowanje:''' Skin z mjenom „$1” njeeksistuje. Prošu mysli na to, zo wosobinske strony .css a .js titul z małym pismikom wuwziwaja, na př. {{ns:user}}:Foo/monobook.css město {{ns:user}}:Foo/Monobook.css.", +'sitecsspreview' => "'''Wobkedźbujće, zo sej jenož přehlad tutoho CSS wobhladuješ.''' +'''Wón hišće składowany njeje!'''", +'sitejspreview' => "'''Wobkedźbujće, zo sej jenož přehlad tutoho JavaScriptoweho koda wobhladuješ.''' +'''Wón hišće składowany njeje!'''", +'userinvalidcssjstitle' => "'''Warnowanje:''' Skin z mjenom „$1” njeeksistuje. Prošu mysli na to, zo wosobinske strony .css a .js titul z małym pismikom wuwziwaja, na př. {{ns:user}}:Foo/vector.css město {{ns:user}}:Foo/Vector.css.", 'updated' => '(Zaktualizowany)', 'note' => "'''Kedźbu:'''", 'previewnote' => "'''Kedźbu, to je jenož přehlad, změny hišće składowane njejsu!'''", @@ -761,7 +765,6 @@ Kopěrowanje tekstow, kiž su přez awtorske prawa škitane, je zakazane! '''NJE Lubiš nam tež, zo sy jón sam napisał abo ze zjawneje domejny abo z podobneho swobodneho žórła kopěrował (hlej $1 za podrobnosće). '''NJESKŁADUJ PŘINOŠKI Z COPYRIGHTOM BJEZ DOWOLNOSĆE!'''", -'longpagewarning' => "'''KEDŹBU: Strona wobsahuje $1 kB; někotre wobhladowaki maja problemy, strony wobdźěłać, kotrež wobsahuja 32 kB abo wjace. Prošu přemysli sej stronu do mjeńšich wotrězkow rozrjadować.'''", 'longpageerror' => "'''ZMYLK: Tekst, kotryž sy spytał składować wobsahuje $1 kB, maksimalna wulkosć pak je $2 kB. Njehodźi so składować.'''", 'readonlywarning' => "'''KEDŹBU: Datowa banka bu wothladanja dla zawrjena, tohodla njemóžeš swoje změny nětko składować. Móžeš tekst do tekstoweje dataje přesunyć a jón za pozdźišo składować.''' @@ -932,6 +935,8 @@ $1", 'logdelete-failure' => "'''Protokolowa widźomnosć njeda so nastajić:''' $1", 'revdel-restore' => 'Widźomnosć změnić', +'revdel-restore-deleted' => 'zhašane wersije', +'revdel-restore-visible' => 'widźomne wersije', 'pagehist' => 'Stawizny strony', 'deletedhist' => 'Wušmórnjene stawizny', 'revdelete-content' => 'wobsah', @@ -998,11 +1003,13 @@ Zawěsć, zo tuta změna stawiznisku kontinuitu strony wobchowuje.', # Diffs 'history-title' => 'Stawizny wersijow strony „$1“', 'difference' => '(rozdźěl mjez wersijomaj)', +'difference-multipage' => '(Rozdźěl mjez stronami)', 'lineno' => 'Rjadka $1:', 'compareselectedversions' => 'Wubranej wersiji přirunać', 'showhideselectedversions' => 'Wubrane wersije pokazać/schować', 'editundo' => 'cofnyć', -'diff-multi' => '(Přirunanje wersijow zapřija {{PLURAL:$1|jednu mjez nimaj ležacu wersiju|dwě mjez nimaj ležacej wersiji|$1 mjez nimaj ležace wersije|$1 mjez nimaj ležacych wersijow}}.)', +'diff-multi' => '({{PLURAL:$1|Jedna mjezywersija|$1 mjezywersiji|$1 mjezywersije|$1 mjezywersijow}} wot {{PLURAL:$2|jednoho wužiwarja|$2 wužiwarjow|$2 wužiwarjow|$2 wužiwarjow}} {{PLURAL:$1|njepokazana|njepokazanej|njepokazane|njepokazane}})', +'diff-multi-manyusers' => '({{PLURAL:$1|Jedna mjezywersija|$1 mjezywersiji|$1 mjezywersije|$1 mjezywersijow}} wot wjace hač {{PLURAL:$2|jednoho wužiwarja|$2 wužiwarjow|$2 wužiwarjow|$2 wužiwarjow}} {{PLURAL:$1|njepokazana|njepokazanej|njepokazane|njepokazane}})', # Search results 'searchresults' => 'Pytanske wuslědki', @@ -1037,6 +1044,7 @@ Zawěsć, zo tuta změna stawiznisku kontinuitu strony wobchowuje.', 'searchprofile-everything-tooltip' => 'Cyły wobsah přepytać (inkluziwnje diskusijne strony)', 'searchprofile-advanced-tooltip' => 'W swójskich mjenowych rumach pytać', 'search-result-size' => '$1 ({{PLURAL:$2|1 słowo|$2 słowje|$2 słowa|$2 słowow}})', +'search-result-category-size' => '{{PLURAL:$1|1 čłon|$1 čłonaj|$1 čłonojo|$1 čłonow}} ({{PLURAL:$2|1 podkategorija|$2 podkategoriji|$2 podkategorije|$2 podkategorijow}}, {{PLURAL:$3|1 dataja|$3 dataji|$3 dataje|$3 datajow}})', 'search-result-score' => 'Relewanca: $1 %', 'search-redirect' => '(Daleposrědkowanje $1)', 'search-section' => '(wotrězk $1)', @@ -1112,6 +1120,7 @@ Spytaj swoje naprašowanje z prefiksom ''all:'' wužiwać, zo by wšón wobsah ( 'contextlines' => 'Rjadki na wuslědk:', 'contextchars' => 'Kontekst na rjadku:', 'stub-threshold' => 'Wotkazowe formatowanje małych stronow (w bajtach):', +'stub-threshold-disabled' => 'Znjemóžnjeny', 'recentchangesdays' => 'Ličba dnjow w lisćinje aktualnych změnow:', 'recentchangesdays-max' => '(Maksimalnje $1 {{PLURAL:$1|dźeń|dnjej|dny|dnjow}})', 'recentchangescount' => 'Ličba stronow, kotraž ma so po standardźe pokazać:', @@ -1145,6 +1154,7 @@ Tu je připadnje wupłodźena hódnota, kotruž móžeš wužiwać: $1', 'prefs-files' => 'Dataje', 'prefs-custom-css' => 'Swójski CSS', 'prefs-custom-js' => 'Swójski JS', +'prefs-common-css-js' => 'Zhromadny CSS/JS za w32 šaty:', 'prefs-reset-intro' => 'You can use this page to reset your preferences to the site defaults. This cannot be undone. Móžeš tutu stronu wužiwać, zo by swoje nastajenja na standardne hódnoty sydła wróćo stajić. To njeda so anulować.', 'prefs-emailconfirm-label' => 'E-mejlowe wobkrućenje:', @@ -1181,9 +1191,15 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d 'prefs-advancedrendering' => 'Rozšěrjene opcije', 'prefs-advancedsearchoptions' => 'Rozšěrjene opcije', 'prefs-advancedwatchlist' => 'Rozšěrjene opcije', -'prefs-display' => 'Opcije sej wobhladać', +'prefs-displayrc' => 'Zwobraznjenske opcije', +'prefs-displaysearchoptions' => 'Zwobraznjenske opcije', +'prefs-displaywatchlist' => 'Zwobraznjenske opcije', 'prefs-diffs' => 'Rozdźěle', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Zda so, zo e-mejlowa adresa je płaćiwa', +'email-address-validity-invalid' => 'Zapodaj płaćiwu e-mejlowu adresu', + # User rights 'userrights' => 'Zrjadowanje wužiwarskich prawow', 'userrights-lookup-user' => 'Wužiwarske skupiny zrjadować', @@ -1267,6 +1283,7 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d 'right-hideuser' => 'Wužiwarske mjeno blokować a schować', 'right-ipblock-exempt' => 'Blokowanja IP, awtomatiske blokowanje a blokowanja wobwodow wobeńć', 'right-proxyunbannable' => 'Automatiske blokowanja proksyjow wobeńć', +'right-unblockself' => 'Swójske blokowanje zběhnyć', 'right-protect' => 'Škitowe schodźenki změnić a škitanu stronu wobdźěłać', 'right-editprotected' => 'Škitane strony wobdźěłać (bjez kaskadoweho škita)', 'right-editinterface' => 'Wužiwarski powjerch wobdźěłać', @@ -1289,7 +1306,6 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d 'right-siteadmin' => 'Datowu banku zawrěć a wotewrěć', 'right-reset-passwords' => 'Hesła druhich wužiwarjow wróćo stajić', 'right-override-export-depth' => 'Strony inkluziwnje wotkazanych stronow hač do hłubokosće 5 eksportować', -'right-versiondetail' => 'Nadrobne informacije wo wersiji softwary pokazać', 'right-sendemail' => 'Druhim wužiwarjam e-mejl pósłać', # User rights log @@ -1340,14 +1356,9 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d 'recentchanges-legend' => 'Opcije aktualnych změnow', 'recentchangestext' => 'Na tutej stronje móžeš najaktualniše změny w {{GRAMMAR:lokatiw|{{SITENAME}}}} wobkedźbować.', 'recentchanges-feed-description' => 'Slěduj najaktualniše změny {{GRAMMAR:genitiw|{{SITENAME}}}} w tutym kanalu.', -'recentchanges-label-legend' => 'Legenda: $1.', -'recentchanges-legend-newpage' => '$1 - nowa strona', 'recentchanges-label-newpage' => 'Tuta změna je nowu stronu wutworiła', -'recentchanges-legend-minor' => '$1 - snadna změna', 'recentchanges-label-minor' => 'To je snadna změna', -'recentchanges-legend-bot' => '$1 - změna boćika', 'recentchanges-label-bot' => 'Tuta změna bu přez roboćik přewjedźena', -'recentchanges-legend-unpatrolled' => '$1 - njepřepruwowana změna', 'recentchanges-label-unpatrolled' => 'Tuta změnu hišće njebu přepruwowana', 'rcnote' => "Deleka {{PLURAL:\$1|je '''1''' změna|stej poslednjej '''\$1''' změnje|su poslednje '''\$1''' změny|je poslednich '''\$1''' změnow}} za {{PLURAL:\$2|posledny dźeń|poslednjej '''\$2''' dnjej|poslednje '''\$2''' dny|poslednich '''\$2''' dnjow}}, staw wot \$4, \$5.
    Legenda
    @@ -1397,6 +1408,9 @@ Strony na [[Special:Watchlist|wobkedźbowankach]] su '''tučne'''.", 'upload_directory_missing' => 'Zapis nahraćow ($1) faluje a njeda so přez webserwer wutworić.', 'upload_directory_read_only' => 'Nahrawanski zapis ($1) njehodźi so přez webserwer popisować.', 'uploaderror' => 'Zmylk při nahrawanju', +'upload-recreate-warning' => "'''Warnowanje: Dataja z tym mjenom je so zhašała abo přesunyła.''' + +Protokolej zhašenjow a přesunjenjow za tutu stronu stej tu k dobroćiwemu wužiwanju podatej:", 'uploadtext' => "Wužij slědowacy formular, zo by nowe dataje nahrał. Zo by prjedy nahrate dataje wobhladał abo pytał dźi k [[Special:FileList|lisćinje nahratych datajow]], nahraća so tež w [[Special:Log/upload|protokolu nahraćow]], wušmórnjenja [[Special:Log/delete|protokolu wušmornjenjow]] protokoluja. @@ -1431,6 +1445,17 @@ Hlej [[Special:NewFiles|galeriju nowych datajow]] za wizuelny přehlad.', 'filetype-banned-type' => "'''\".\$1\"''' njeje dowoleny datajowy typ. {{PLURAL:\$3|Dowoleny datajowy typ je|Dowolenej datajowej typaj stej|Dowolene datajowe typy su|Dowolene datajowe typy su}} \$2.", 'filetype-missing' => 'Dataja nima kóncowku (na přikład „.jpg“).', +'empty-file' => 'Dataja, kotruž sy wotpósłał, bě prózdna.', +'file-too-large' => 'Dataja, kotruž sy wotpósłał, bě přewulka.', +'filename-tooshort' => 'Datajowe mjeno je překrótke.', +'filetype-banned' => 'Tutón datajowy typ je zatamany.', +'verification-error' => 'Tuta dataja žane datajowe přepruwowanje njepřeběhny.', +'hookaborted' => 'Změna, kotruž pospytowaše přewjesć, bu přez rozšěrjensku hoku přetorhnjena.', +'illegal-filename' => 'Datajowe mjeno njeje dowolene.', +'overwrite' => 'Přepisowanje eksistowaceje dataje njeje dowolene.', +'unknown-error' => 'Njeznaty zmylk je wustupił.', +'tmp-create-error' => 'Temporerna dataja njeda so wutworić.', +'tmp-write-error' => 'Zmylk při pisanju temporerneje dataje.', 'large-file' => 'Doporuča so, zo dataje wjetše hač $1 njejsu; tuta dataja ma $2.', 'largefileserver' => 'Dataja je wjetša hač serwer dowoluje.', 'emptyfile' => 'Dataja, kotruž sy nahrał, zda so prózdna być. Z přičinu móhł pisanski zmylk w mjenje dataje być. Prošu pruwuj hač chceš ju woprawdźe nahrać.', @@ -1456,13 +1481,14 @@ Jeli maš tutón wobraz z połnym rozeznaćom, nahraj tutón, hewak změń proš 'fileexists-shared-forbidden' => 'Dataja z tutym mjenom hižo eksistuje w zhromadnej chowarni. Jeli hišće chceš swoju dataju nahrać, dźi prošu wróćo a wužij nowe mjeno. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Tuta dataja je duplikat {{PLURAL:$1|slědowaceje dataje|slědowaceju datajow|slědowacych datajow|slědowacych datajow}}:', 'file-deleted-duplicate' => 'Dataja, kotraž je identiska z tutej dataju ([[:$1]]), je so prjedy zničiła. Ty měł stawizny zničenja tuteje dataje přepruwować, prjedy pokročuješ z jeje zasonahrawanjom.', -'successfulupload' => 'Dataja bu wuspěšnje nahrata', 'uploadwarning' => 'Warnowanje', 'uploadwarning-text' => 'Prošu změń slědowace datajowe wopisanje a spytaj hišće raz.', 'savefile' => 'Dataju składować', 'uploadedimage' => 'je dataju „[[$1]]” nahrał', 'overwroteimage' => 'je nowu wersiju dataje „[[$1]]“ nahrał', 'uploaddisabled' => 'Wodaj, nahraće je znjemóžnjene.', +'copyuploaddisabled' => 'Nahraće přez URL znjemóžnjene.', +'uploadfromurl-queued' => 'Twoje nahraće je nětko w čakanskim rynku.', 'uploaddisabledtext' => 'Nahraće datajow je znjemóžnjene.', 'php-uploaddisabledtext' => 'Nahraća PHP-datajow su znjemóžnjene. Prošu skontroluj nastajenje file_uploads.', 'uploadscripted' => 'Dataja wobsahuje HTML- abo skriptowy kod, kotryž móhł so mylnje přez wobhladowak wuwjesć.', @@ -1496,6 +1522,14 @@ JD # Jenoptik MGP # Pentax PICT # misc. # ', +'upload-success-subj' => 'Dataja bu wuspěšnje nahrata', +'upload-success-msg' => 'Twoje nahraće z [$2] je wuspěšne było: Steji tu k dispoziciji: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Nahrawanski problem', +'upload-failure-msg' => 'Bě problem z twojim nahraćom [$2]: + +$1', +'upload-warning-subj' => 'Nahraćowe warnowanje', +'upload-warning-msg' => 'Bě problem z twojim nahraćom [$2]. Wróć so k [[Special:Upload/stash/$1|nahrawanskemu formularej]], zo by tutón problem wotstronił.', 'upload-proto-error' => 'Wopačny protokol', 'upload-proto-error-text' => 'URL dyrbi so z http:// abo ftp:// započeć.', @@ -1553,6 +1587,7 @@ Za optimalnu wěstotu je img_auth.php znjemóžnjeny.', 'listfiles_search_for' => 'Za mjenom wobraza pytać:', 'imgfile' => 'dataja', 'listfiles' => 'Lisćina datajow', +'listfiles_thumb' => 'Wobrazk', 'listfiles_date' => 'datum', 'listfiles_name' => 'mjeno dataje', 'listfiles_user' => 'wužiwar', @@ -1663,8 +1698,8 @@ Slědowaca lisćina pokazuje jenož {{PLURAL:$1|prěni wotkaz strony|prěnjej $1 'statistics-edits' => 'Změny stronow wot załoženja {{SITENAME}}', 'statistics-edits-average' => 'Změny na stronu w přerězku', 'statistics-views-total' => 'Zwobraznjenja dohromady', +'statistics-views-total-desc' => 'Pohlady do njeeksistowacych stronow a specialnych stronow njejsu zapřijate', 'statistics-views-peredit' => 'Zwobraznjenja na změnu', -'statistics-jobqueue' => 'Dołhosć [http://www.mediawiki.org/wiki/Manual:Job_queue Job queue]', 'statistics-users' => 'Zregistrowani [[Special:ListUsers|wužiwarjo]]', 'statistics-users-active' => 'Aktiwni wužiwarjo', 'statistics-users-active-desc' => 'Wužiwarjo, kotřiž su {{PLURAL:$1|wčera|w zańdźenymaj $1 dnjomaj|w zańdźenych $1 dnjach|w zańdźenych $1 dnjach}} aktiwni byli', @@ -1676,7 +1711,7 @@ Slědowaca lisćina pokazuje jenož {{PLURAL:$1|prěni wotkaz strony|prěnjej $1 'doubleredirects' => 'Dwójne daleposrědkowanja', 'doubleredirectstext' => 'Tuta strona nalistuje strony, kotrež k druhim daleposrědkowanskim stronam dale posrědkuja. -Kóžda rjadka wobsahuje wotkazy k prěnjemu a druhemu daleposrědkowanju kaž tež cil druheho daleposrědkowanja, kotryž je zwjetša "woprawdźita" cilowa strona, na kotruž prěnje daleposrědkowanje měło pokazać. Přešmórnjene zapiski su hižo sčinjene.', +Kóžda rjadka wobsahuje wotkazy k prěnjemu a druhemu daleposrědkowanju kaž tež cil druheho daleposrědkowanja, kotryž je zwjetša "woprawdźita" cilowa strona, na kotruž prěnje daleposrědkowanje měło pokazać. Přešmórnjene zapiski su hižo sčinjene.', 'double-redirect-fixed-move' => '[[$1]] bu přesunjeny, je nětko daleposrědkowanje do [[$2]]', 'double-redirect-fixer' => 'Porjedźer daleposrědkowanjow', @@ -1699,6 +1734,8 @@ Kóžda rjadka wobsahuje wotkazy k prěnjemu a druhemu daleposrědkowanju kaž t 'nmembers' => '{{PLURAL:$1|$1 čłon|$1 čłonaj|$1 čłony|$1 čłonow}}', 'nrevisions' => '$1 {{PLURAL:$1|wobdźěłanje|wobdźěłani|wobdźěłanja|wobdźěłanjow}}', 'nviews' => '$1 {{PLURAL:$1|jedyn wopyt|wopytaj|wopyty|wopytow}}', +'nimagelinks' => 'Wužiwa so na $1 {{PLURAL:$1|stronje|stronomaj|stronach|stronach}}', +'ntransclusions' => 'wužiwa so na $1 {{PLURAL:$1|stronje|stronomaj|stronach|stronach}}', 'specialpage-empty' => 'Tuchwilu žane zapiski.', 'lonelypages' => 'Wosyroćene strony', 'lonelypagestext' => 'Slědowace strony njejsu wotkazowe cile druhich stronow abo njezapřijimaja so do druhich stronow w {{SITENAME}}.', @@ -1852,34 +1889,40 @@ Hlej tež [[Special:WantedCategories|požadane kategorije]].', 'listgrouprights-removegroup-self-all' => 'Móže wšě skupiny ze swójskeho konta wotstronić', # E-mail user -'mailnologin' => 'Njejsy přizjewjeny.', -'mailnologintext' => 'Dyrbiš [[Special:UserLogin|přizjewjeny]] być a płaćiwu e-mejlowu adresu w swojich [[Special:Preferences|nastajenjach]] měć, zo by druhim wužiwarjam mejlki pósłać móhł.', -'emailuser' => 'Wužiwarjej mejlku pósłać', -'emailpage' => 'Wužiwarjej mejlku pósłać', -'emailpagetext' => 'Móžeš slědowacy formular wužiwać, zo by tutomu wužiwarjej e-mejlku pósłał. +'mailnologin' => 'Njejsy přizjewjeny.', +'mailnologintext' => 'Dyrbiš [[Special:UserLogin|přizjewjeny]] być a płaćiwu e-mejlowu adresu w swojich [[Special:Preferences|nastajenjach]] měć, zo by druhim wužiwarjam mejlki pósłać móhł.', +'emailuser' => 'Wužiwarjej mejlku pósłać', +'emailpage' => 'Wužiwarjej mejlku pósłać', +'emailpagetext' => 'Móžeš slědowacy formular wužiwać, zo by tutomu wužiwarjej e-mejlku pósłał. E-mejlowa adresa, kotruž sy w [[Special:Preferences|swojich wužiwarskich nastajenjach]] zapodał, zjewi so jako adresa "Wot" e-mejlki, tak zo přijimowar móže ći direktnje wotmołwić.', -'usermailererror' => 'E-mejlowy objekt je zmylk wróćił:', -'defemailsubject' => 'Powěsć z {{grammar:genitiw|{{SITENAME}}}}', -'noemailtitle' => 'Žana e-mejlowa adresa podata', -'noemailtext' => 'Tutón wužiwar njeje płaćiwu e-mejlowu adresu podał.', -'nowikiemailtitle' => 'Žana e-mejl dowolena', -'nowikiemailtext' => 'Tutón wužiwar nochce žane e-mejlki wot druhich wužiwarjow dóstać.', -'email-legend' => 'E-mejlku druhemu wužiwarjej {{GRAMMAR:genitiw|{{SITENAME}}}} pósłać', -'emailfrom' => 'Wot:', -'emailto' => 'Komu:', -'emailsubject' => 'Tema:', -'emailmessage' => 'Powěsć:', -'emailsend' => 'Wotesłać', -'emailccme' => 'E-mejluj mi kopiju mojeje powěsće.', -'emailccsubject' => 'Kopija twojeje powěsće wužiwarjej $1: $2', -'emailsent' => 'Mejlka wotesłana', -'emailsenttext' => 'Twoja mejlka bu wotesłana.', -'emailuserfooter' => 'Tuta e-mejlka bu z pomocu funkcije "Wužiwarjej mejlku pósłać" na {{SITENAME}} wot $1 do $2 pósłana.', +'usermailererror' => 'E-mejlowy objekt je zmylk wróćił:', +'defemailsubject' => 'Powěsć z {{grammar:genitiw|{{SITENAME}}}}', +'usermaildisabled' => 'Wužiwarska e-mejl znjemóžnjena', +'usermaildisabledtext' => 'Njemóžeš na tutym wikiju druhim wužiwarjam e-mejl pósłać', +'noemailtitle' => 'Žana e-mejlowa adresa podata', +'noemailtext' => 'Tutón wužiwar njeje płaćiwu e-mejlowu adresu podał.', +'nowikiemailtitle' => 'Žana e-mejl dowolena', +'nowikiemailtext' => 'Tutón wužiwar nochce žane e-mejlki wot druhich wužiwarjow dóstać.', +'email-legend' => 'E-mejlku druhemu wužiwarjej {{GRAMMAR:genitiw|{{SITENAME}}}} pósłać', +'emailfrom' => 'Wot:', +'emailto' => 'Komu:', +'emailsubject' => 'Tema:', +'emailmessage' => 'Powěsć:', +'emailsend' => 'Wotesłać', +'emailccme' => 'E-mejluj mi kopiju mojeje powěsće.', +'emailccsubject' => 'Kopija twojeje powěsće wužiwarjej $1: $2', +'emailsent' => 'Mejlka wotesłana', +'emailsenttext' => 'Twoja mejlka bu wotesłana.', +'emailuserfooter' => 'Tuta e-mejlka bu z pomocu funkcije "Wužiwarjej mejlku pósłać" na {{SITENAME}} wot $1 do $2 pósłana.', + +# User Messenger +'usermessage-summary' => 'Systemowu zdźělenku zawostajić.', +'usermessage-editor' => 'Systemowy powěstnik', # Watchlist 'watchlist' => 'wobkedźbowanki', 'mywatchlist' => 'wobkedźbowanki', -'watchlistfor' => '(za wužiwarja $1)', +'watchlistfor2' => 'Za wužiwarja $1 $2', 'nowatchlist' => 'Nimaš žane strony w swojich wobkedźbowankach.', 'watchlistanontext' => 'Dyrbiš so $1, zo by swoje wobkedźbowanki wobhladać abo wobdźěłać móhł.', 'watchnologin' => 'Njejsy přizjewjeny.', @@ -1997,7 +2040,10 @@ Poslednja změna bě wot wužiwarja [[User:$3|$3]] ([[User talk:$3|Diskusija]]{{ 'revertpage' => 'Změny [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskusija]]) cofnjene a nawróćene k poslednjej wersiji wužiwarja [[User:$1|$1]]', 'revertpage-nouser' => 'Staji změny wot (wužiwarske mjeno wotstronjene) na předchadnu wersiju wot [[User:$1|$1]] wróćo', 'rollback-success' => 'Změny wužiwarja $1 cofnjene; wróćo na wersiju wužiwarja $2.', -'sessionfailure' => 'Zda so, zo je problem z twojim přizjewjenjom; tuta akcija bu wěstosće dla přećiwo zadobywanju do posedźenja znjemóžniła. Prošu klikń na "Wróćo" a začitaj stronu, z kotrejež přińdźeš, znowa; potom spytaj hišće raz.', + +# Edit tokens +'sessionfailure-title' => 'Posedźenski zmylk', +'sessionfailure' => 'Zda so, zo je problem z twojim přizjewjenjom; tuta akcija bu wěstosće dla přećiwo zadobywanju do posedźenja znjemóžniła. Prošu klikń na "Wróćo" a začitaj stronu, z kotrejež přińdźeš, znowa; potom spytaj hišće raz.', # Protect 'protectlogpage' => 'Protokol škita', @@ -2121,18 +2167,22 @@ $1', 'month' => 'wot měsaca (a do toho):', 'year' => 'wot lěta (a do toho):', -'sp-contributions-newbies' => 'jenož přinoški nowačkow pokazać', -'sp-contributions-newbies-sub' => 'Za nowačkow', -'sp-contributions-newbies-title' => 'Wužiwarske přinoški za nowe konta', -'sp-contributions-blocklog' => 'protokol zablokowanjow', -'sp-contributions-deleted' => 'wušmórnjene wužiwarske přinoški', -'sp-contributions-logs' => 'protokole', -'sp-contributions-talk' => 'diskusija', -'sp-contributions-userrights' => 'Zrjadowanje wužiwarskich prawow', -'sp-contributions-blocked-notice' => 'Tutón wužiwar je tuchwilu zablokowany. Najnowši protokolowy zapisk so deleka jako referenca podawa:', -'sp-contributions-search' => 'Přinoški pytać', -'sp-contributions-username' => 'IP-adresa abo wužiwarske mjeno:', -'sp-contributions-submit' => 'OK', +'sp-contributions-newbies' => 'jenož přinoški nowačkow pokazać', +'sp-contributions-newbies-sub' => 'Za nowačkow', +'sp-contributions-newbies-title' => 'Wužiwarske přinoški za nowe konta', +'sp-contributions-blocklog' => 'protokol zablokowanjow', +'sp-contributions-deleted' => 'wušmórnjene wužiwarske přinoški', +'sp-contributions-uploads' => 'nahraća', +'sp-contributions-logs' => 'protokole', +'sp-contributions-talk' => 'diskusija', +'sp-contributions-userrights' => 'Zrjadowanje wužiwarskich prawow', +'sp-contributions-blocked-notice' => 'Tutón wužiwar je tuchwilu zablokowany. Najnowši protokolowy zapisk so deleka jako referenca podawa:', +'sp-contributions-blocked-notice-anon' => 'Tuta IP-adresa je tuchwilu zablokowana. +Najnowši zapisk w protokolu blokowanjow so deleka jako referenca podawa:', +'sp-contributions-search' => 'Přinoški pytać', +'sp-contributions-username' => 'IP-adresa abo wužiwarske mjeno:', +'sp-contributions-toponly' => 'Jenož wyše wersije pokazać', +'sp-contributions-submit' => 'OK', # What links here 'whatlinkshere' => 'Što wotkazuje sem', @@ -2192,7 +2242,6 @@ $1', 'ipb-edit-dropdown' => 'přičiny zablokowanjow wobdźěłać', 'ipb-unblock-addr' => 'zablokowanje wužiwarja „$1“ zběhnyć', 'ipb-unblock' => 'zablokowanje wužiwarja abo IP-adresy zběhnyć', -'ipb-blocklist-addr' => 'Eksistowace zablokowanja za "$1"', 'ipb-blocklist' => 'tuchwilne blokowanja zwobraznić', 'ipb-blocklist-contribs' => 'Přinoški za $1', 'unblockip' => 'Zablokowanje zběhnyć', @@ -2260,6 +2309,8 @@ $1 je hižo zablokowany. Chceš nastajenja změnić?', 'sorbs_create_account_reason' => 'Twoja IP-adresa je jako wotewrjeny proksy na DNSBL {{GRAMMAR:genitiw|{{SITENAME}}}} zapisana. Njemóžeš konto wutworić.', 'cant-block-while-blocked' => 'Njemóžeš druhich wužiwarjow blokować, mjeztym zo ty sy zablokowany.', 'cant-see-hidden-user' => 'Wužiwar, kotrehož pospytuješ blokować, bu hižo zablokowany a schowany. Dokelž nimaš prawo wužiwarja schować, njemóžeš blokowanje wužiwarja widźeć abo wobdźěłać.', +'ipbblocked' => 'Njemóžeš druhich wužiwarjow blokować abo wotblokować, dokelž ty sam sy zablokowany', +'ipbnounblockself' => 'Njesměš so samoho wotblokować', # Developer tools 'lockdb' => 'Datowu banku zamknyć', @@ -2287,6 +2338,17 @@ $1 je hižo zablokowany. Chceš nastajenja změnić?', Wobkedźbuj, zo strona so nje přesunje, jeli strona z nowym titlom hizo eksistuje, chibazo wona je prózdna abo dalesposrědkowanje a nima zašłe stawizny. To woznamjenja, zo móžeš stronu tam wróćo přemjenować, hdźež bu runje přemjenowana, jeli zmylk činiš a njemóžeš wobstejacu stronu přepisować. KEDŹBU! Móže to drastiska a njewočakowana změna za woblubowanu stronu być; prošu budź sej wěsty, zo sćěwki rozumiš, prjedy hač pokročuješ.', +'movepagetext-noredirectfixer' => "Wužiwajo slědowacy formular, móžeš stronu přemjenować a wšě jich daty do stawiznow noweho titula přesunyć. +Stary titul budźe dalesposrědkowanska strona k nowemu titulej. +Skontroluj za [[Special:DoubleRedirects|dwójnymi]] abo [[Special:BrokenRedirects|wobškodźenymi dalesposrědkowanjemi]]. +Sy za to zamołwity, zo wotkazy na tón cil pokazuja, na kotryž maja pokazować. + +Dźiwaj na to, zo strona so '''nje'''přesunje, jeli je hižo strona z nowym titulom, chibazo wona je prózdna abo dalesposrědkowanje a nima stawizny změnow. +To woznamjenja, zo móžeš stronu do stareho mjena wróćopřemjenować, jeli činiš zmylk a njemóžeš eksistowacu stronu přepisać. + +'''Warnowanje!''' +To móže drastiska a njewočakowana změna za woblubowanu stronu być: +prošu wuwědomće sej konsekwency, prjedy hač pokročuješ.", 'movepagetalktext' => 'Přisłušna diskusijna strona přesunje so awtomatisce hromadźe z njej, chibazo: *Njeprózdna diskusijna strona pod nowym mjenom hižo eksistuje abo *wotstronješ hóčku z kašćika deleka. @@ -2341,6 +2403,7 @@ Cilowa strona „[[:$1]]” hižo eksistuje. Chceš ju wušmórnyć, zo by so p 'immobile-source-page' => 'Strona njeda so přesunyć.', 'immobile-target-page' => 'Njemóžno do teje ciloweje strony přesunyć.', 'imagenocrossnamespace' => 'Wobraz njeda so do druheho mjenoweho ruma hač wobraz přesunyć', +'nonfile-cannot-move-to-file' => 'Njedataje njedadźa so do datajoweho mjenoweho ruma přesunyć', 'imagetypemismatch' => 'Nowa dataja swojemu typej njewotpowěduje', 'imageinvalidfilename' => 'Mjeno ciloweje dataje je njepłaćiwe', 'fix-double-redirects' => 'Daleposrědkowanja aktualizować, kotrež na prěnjotny titul pokazuja', @@ -2416,6 +2479,7 @@ W poslednim padźe móžeš tež wotkaz wužiwać, na př. „[[{{#Special:Expor 'importstart' => 'Importuju…', 'import-revision-count' => '$1 {{PLURAL:$1|wersija|wersiji|wersije|wersijow}}', 'importnopages' => 'Žane strony za importowanje.', +'imported-log-entries' => '$1 {{PLURAL:$1|protokolowy zapisk importowany|protokolowej zapiskaj importowanej|protokolowe zapiski importowane|protokolowych zapiskow importowanych}}.', 'importfailed' => 'Import zwrěšćił: $1', 'importunknownsource' => 'Njeznate importowe žórło', 'importcantopen' => 'Importowa dataja njeda so wočinjeć.', @@ -2508,6 +2572,8 @@ W poslednim padźe móžeš tež wotkaz wužiwać, na př. „[[{{#Special:Expor 'tooltip-upload' => 'nahraće startować', 'tooltip-rollback' => '"Rollback" anuluje změny strony poslednjeho sobudźěłaćerja přez jedne kliknjenje.', 'tooltip-undo' => 'anuluje tutu změnu a wočinja wobdźěłowanski formular w přehladowym modusu. Zmóžnja přičinu w zjeću přidać.', +'tooltip-preferences-save' => 'Nastajenja składować', +'tooltip-summary' => 'Zapodaj krótke zjeće', # Stylesheets 'common.css' => '/* CSS w tutej dataji budźe so na wšěch stronow wuskutkować. */', @@ -2620,13 +2686,16 @@ $1', 'widthheight' => '$1x$2', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|strona|stronje|strony|stronow}}', 'file-info' => 'Wulkosć dataje: $1, typ MIME: $2', -'file-info-size' => '($1 × $2 pikselow, wulkosć dataje: $3, typ MIME: $4)', +'file-info-size' => '$1 × $2 pikselow, wulkosć dataje: $3, typ MIME: $4', 'file-nohires' => 'Za tutu dataju žane wyše rozeznaće njeje.', -'svg-long-desc' => '(SVG-dataja, zakładna wulkosć: $1 × $2 pikselow, datajowa wulkosć: $3)', +'svg-long-desc' => 'SVG-dataja, zakładna wulkosć: $1 × $2 pikselow, datajowa wulkosć: $3', 'show-big-image' => 'Wersija z wyšim rozeznaćom', 'show-big-image-thumb' => 'Wulkosć miniaturki: $1 × $2 pikselow', 'file-info-gif-looped' => 'Bjezkónčna sekla', 'file-info-gif-frames' => '$1 {{PLURAL:$1|wobłuk|wobłukaj|wobłuki|wobłukow}}', +'file-info-png-looped' => 'Sekla', +'file-info-png-repeat' => '{{PLURAL:$1|$1 raz|dwójce|$1 razy|$1 razow}} wotehrata', +'file-info-png-frames' => '$1 {{PLURAL:$1|wobłuk|wobłukaj|wobłuki|wobłukow}}', # Special:NewFiles 'newimages' => 'Nowe dataje', @@ -2779,6 +2848,7 @@ Nasledne wotkazy na samsnej lince definuja wuwzaća, hdźež so wobraz smě naje 'exif-gpsareainformation' => 'Mjeno wobwoda GPS', 'exif-gpsdatestamp' => 'Datum GPS', 'exif-gpsdifferential' => 'Diferencialna korektura GPS', +'exif-objectname' => 'Krótki titul', # EXIF attributes 'exif-compression-1' => 'Njekomprimowany', @@ -2936,23 +3006,23 @@ Nasledne wotkazy na samsnej lince definuja wuwzaća, hdźež so wobraz smě naje 'limitall' => 'wšě', # E-mail address confirmation -'confirmemail' => 'Emailowu adresu wobkrućić', -'confirmemail_noemail' => 'Njejsy płaćiwu e-mejlowu adresu w swojich [[Special:Preferences|nastajenjach]] podał.', -'confirmemail_text' => 'Tutón wiki žada, zo swoju e-mejlowu adresu wobkrućiš, prjedy hač e-mejlowe funkcije wužiješ. Zaktiwuzij tłóčatko deleka, zo by swojej adresy wobkrućensku mejlku pósłał. Mejlka zapřijmje wotkaz, kotryž kod wobsahuje; wočiń wotkaz we swojim wobhladowaku, zo by wobkrućił, zo twoja e-mejlowa adresa je płaćiwa.', -'confirmemail_pending' => ' Potwjerdźenski kod bu hižo z e-mejlu připósłany. Jeli sy runje swoje konto wutworił, wočakaj prošu někotre mjeńšiny, prjedy hač sej nowy kod žadaš.', -'confirmemail_send' => 'Wobkrućenski kod pósłać', -'confirmemail_sent' => 'Wobkrućenska mejlka bu wotesłana.', -'confirmemail_oncreate' => 'Wobkrućenski kod bu na twoju e-mejlowu adresu pósłany. Tutón kod za přizjewjenje trěbne njeje, trjebaš jón pak, zo by e-mejlowe funkcije we wikiju aktiwizował.', -'confirmemail_sendfailed' => '{{SITENAME}} njemóžeše twoje potwjerdźensku e-mejlku pósłać. Přepytaj prošu swoju e-mejlowu adresu za njepłaćiwymi znamješkami. +'confirmemail' => 'Emailowu adresu wobkrućić', +'confirmemail_noemail' => 'Njejsy płaćiwu e-mejlowu adresu w swojich [[Special:Preferences|nastajenjach]] podał.', +'confirmemail_text' => 'Tutón wiki žada, zo swoju e-mejlowu adresu wobkrućiš, prjedy hač e-mejlowe funkcije wužiješ. Zaktiwuzij tłóčatko deleka, zo by swojej adresy wobkrućensku mejlku pósłał. Mejlka zapřijmje wotkaz, kotryž kod wobsahuje; wočiń wotkaz we swojim wobhladowaku, zo by wobkrućił, zo twoja e-mejlowa adresa je płaćiwa.', +'confirmemail_pending' => ' Potwjerdźenski kod bu hižo z e-mejlu připósłany. Jeli sy runje swoje konto wutworił, wočakaj prošu někotre mjeńšiny, prjedy hač sej nowy kod žadaš.', +'confirmemail_send' => 'Wobkrućenski kod pósłać', +'confirmemail_sent' => 'Wobkrućenska mejlka bu wotesłana.', +'confirmemail_oncreate' => 'Wobkrućenski kod bu na twoju e-mejlowu adresu pósłany. Tutón kod za přizjewjenje trěbne njeje, trjebaš jón pak, zo by e-mejlowe funkcije we wikiju aktiwizował.', +'confirmemail_sendfailed' => '{{SITENAME}} njemóžeše twoje potwjerdźensku e-mejlku pósłać. Přepytaj prošu swoju e-mejlowu adresu za njepłaćiwymi znamješkami. E-mejlowy program je wróćił: $1', -'confirmemail_invalid' => 'Njepłaćiwy wobkrućacy kod. Kod je snano spadnył.', -'confirmemail_needlogin' => 'Dyrbiš so $1, zo by e-mejlowu adresu wobkrućić móhł.', -'confirmemail_success' => 'Twoja e-mejlowa adresa bu wobkrućena. Móžeš so nětko přizjewić.', -'confirmemail_loggedin' => 'Twoja e-mejlowa adresu bu nětko wobkrućena.', -'confirmemail_error' => 'Zmylk při wobkrućenju twojeje e-mailoweje adresy.', -'confirmemail_subject' => '{{SITENAME}} – wobkrućenje e-mejloweje adresy', -'confirmemail_body' => 'Něchtó, najskerje ty z IP-adresu $1, je wužiwarske konto "$2" z tutej e-mejlowej adresu we {{GRAMMAR:lokatiw|{{SITENAME}}}} zregistrował. +'confirmemail_invalid' => 'Njepłaćiwy wobkrućacy kod. Kod je snano spadnył.', +'confirmemail_needlogin' => 'Dyrbiš so $1, zo by e-mejlowu adresu wobkrućić móhł.', +'confirmemail_success' => 'Twoja e-mejlowa adresa bu wobkrućena. Móžeš so nětko přizjewić.', +'confirmemail_loggedin' => 'Twoja e-mejlowa adresu bu nětko wobkrućena.', +'confirmemail_error' => 'Zmylk při wobkrućenju twojeje e-mailoweje adresy.', +'confirmemail_subject' => '{{SITENAME}} – wobkrućenje e-mejloweje adresy', +'confirmemail_body' => 'Něchtó, najskerje ty z IP-adresu $1, je wužiwarske konto "$2" z tutej e-mejlowej adresu we {{GRAMMAR:lokatiw|{{SITENAME}}}} zregistrował. Zo by so wobkrućiło, zo tute konto woprawdźe tebi słuša a zo bychu so e-mejlowe funkcije we {{GRAMMAR:lokatiw|{{SITENAME}}}} zaktiwizowali, wočiń tutón wotkaz w swojim wobhladowaku: @@ -2963,8 +3033,32 @@ Jeli *njej*sy konto zregistrował, slěduj wotkaz, zo by wobkrućenje e-mejlowej $5 Tute wobkrućenski kod spadnje $4.', -'confirmemail_invalidated' => 'E-mejlowe potwjerdźenje přetorhnjene', -'invalidateemail' => 'E-mejlowe potwjerdźenje přetorhnyć', +'confirmemail_body_changed' => 'Něchtó, najskerje ty z IP-adresu $1, je e-mejlowu adresu konta "$2" do tuteje adresy na {{GRAMMAR:lokatiw|{{SITENAME}}}} změnił. + +Zo by so wobkrućiło, zo tute konto woprawdźe tebi słuša a zo bychu so e-mejlowe funkcije na {{GRAMMAR:lokatiw|{{SITENAME}}}} znowa zaktiwizowali, wočiń tutón wotkaz w swojim wobhladowaku: + +$3 + +Jeli konto ći *nje*słuša, slěduj wotkaz, zo by wobkrućenje e-mejloweje adresy přetorhnył: + +$5 + +Tute wobkrućenski kod spadnje $4.', +'confirmemail_body_set' => 'Něchtó, najskerje ty, wot IP-adresy $1, +je e-mejlowu adresu konta "$2" na {{GRAMMAR:lokatiw|{{STENAME}}}} na tutu adresu stajił. + +Zo by wobkrućił, zo tute konto ći woprawdźe słuša a zo bychu so e-mejlowe funkcije na {{GRAMMAR:lokatiw|{{STENAME}}}} znowa aktiwizowali, wočiń tutón wotkaz w swojim wobhladowaku: + +$3 + +Jeli konto ći *nje*słuša, slěduj tutón wotkaz, +zo by wobkrućenje e-mejloweje adresy přetorhnył: + +$5 + +Tutón wobkrućenski kod spadnje $4.', +'confirmemail_invalidated' => 'E-mejlowe potwjerdźenje přetorhnjene', +'invalidateemail' => 'E-mejlowe potwjerdźenje přetorhnyć', # Scary transclusion 'scarytranscludedisabled' => '[Zapřijeće mjezyrěčnych wotkazow je znjemóžnjene]', @@ -3004,6 +3098,7 @@ Prošu potwjerdź, zo chceš tutu stronu woprawdźe znowa wutworić.", 'table_pager_first' => 'prěnja strona', 'table_pager_last' => 'poslednja strona', 'table_pager_limit' => '$1 {{PLURAL:$1|wuslědk|wuslědkaj|wuslědki|wuslědkow}} na stronu pokazać', +'table_pager_limit_label' => 'Zapiski na stronu:', 'table_pager_limit_submit' => 'Wotpósłać', 'table_pager_empty' => 'Žane wuslědki', @@ -3066,6 +3161,7 @@ Móžeš tež [[Special:Watchlist/edit|standardnu wobdźěłowansku stronu]] wu 'version-specialpages' => 'Specialne strony', 'version-parserhooks' => 'Parserowe hoki', 'version-variables' => 'Wariable', +'version-skins' => 'Šaty', 'version-other' => 'Druhe', 'version-mediahandlers' => 'Předźěłaki medijow', 'version-hooks' => 'Hoki', @@ -3077,6 +3173,13 @@ Móžeš tež [[Special:Watchlist/edit|standardnu wobdźěłowansku stronu]] wu 'version-hook-subscribedby' => 'Abonowany wot', 'version-version' => '(Wersija $1)', 'version-license' => 'Licenca', +'version-poweredby-credits' => "Tutón wiki so wot '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2 podpěruje.", +'version-poweredby-others' => 'druzy', +'version-license-info' => 'MediaWiki je swobodna softwara: móžeš ju pod wuměnjenjemi licency GNU General Public License, wozjewjeneje wot załožby Free Software Foundation, rozdźělić a/abo změnić: pak pod wersiju 2 licency pak pod někajkej pozdźišej wersiju. + +MediaWiki so w nadźiji rozdźěla, zo budźe wužitny, ale BJEZ GARANTIJU: samo bjez wobsahowaneje garantije PŘEDAWAJOMNOSĆE abo PŘIHÓDNOSĆE ZA WĚSTY ZAMĚR. Hlej GNU general Public License za dalše podrobnosće. + +Ty měł [{{SERVER}}{{SCRIPTPATH}}/COPYING kopiju licency GNU General Public License] hromadźe z tutym programom dóstanu měć: jeli nic, napisaj do załožby Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA abo [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html přečitaj ju online].', 'version-software' => 'Instalowana software', 'version-software-product' => 'Produkt', 'version-software-version' => 'Wersija', @@ -3146,6 +3249,15 @@ Zapodaj datajowe mjeno '''bjez''' prefiksa \"{{ns:file}}:\".", 'tags-edit' => 'změnić', 'tags-hitcount' => '$1 {{PLURAL:$1|změna|změnje|změny|změnow}}', +# Special:ComparePages +'comparepages' => 'Strony přirunać', +'compare-selector' => 'Wersije strony přirunać', +'compare-page1' => 'Strona 1', +'compare-page2' => 'Strona 2', +'compare-rev1' => 'Wersija 1', +'compare-rev2' => 'Wersija 2', +'compare-submit' => 'Přirunać', + # Database error messages 'dberr-header' => 'Tutón wiki ma problem', 'dberr-problems' => 'Wodaj! Tute sydło ma techniske ćežkosće.', @@ -3162,8 +3274,13 @@ Zapodaj datajowe mjeno '''bjez''' prefiksa \"{{ns:file}}:\".", 'htmlform-float-invalid' => 'Hódnota, kotruž sy podał, ličba njeje.', 'htmlform-int-toolow' => 'Hódnota, kotruž sy zapodał, je mjeńša hač minimum $1.', 'htmlform-int-toohigh' => 'Hódnota, kotruž sy zapodał, je wjetša hač maksimum $1.', +'htmlform-required' => 'Tuta hódnota je trěbna', 'htmlform-submit' => 'Wotpósłać', 'htmlform-reset' => 'Změny cofnyć', 'htmlform-selectorother-other' => 'Druhe', +# SQLite database support +'sqlite-has-fts' => '$1 połnotekstowe pytanje podpěruje.', +'sqlite-no-fts' => '$1 połnotekstowe pytanje njepodpěruje', + ); diff --git a/languages/messages/MessagesHt.php b/languages/messages/MessagesHt.php index 91b0d87d..f2a48eea 100644 --- a/languages/messages/MessagesHt.php +++ b/languages/messages/MessagesHt.php @@ -23,8 +23,8 @@ $namespaceNames = array( NS_USER => 'Itilizatè', NS_USER_TALK => 'Diskisyon_Itilizatè', NS_PROJECT_TALK => 'Diskisyon_$1', - NS_FILE => 'Imaj', - NS_FILE_TALK => 'Diskisyon_Imaj', + NS_FILE => 'Fichye', + NS_FILE_TALK => 'Diskisyon_Fichye', NS_MEDIAWIKI => 'MedyaWiki', NS_MEDIAWIKI_TALK => 'Diskisyon_MedyaWiki', NS_TEMPLATE => 'Modèl', @@ -35,36 +35,44 @@ $namespaceNames = array( NS_CATEGORY_TALK => 'Diskisyon_Kategori', ); +$namespaceAliases = array( + 'Imaj' => NS_USER, + 'Diskisyon_Imaj' => NS_USER_TALK, +); + $specialPageAliases = array( - 'DoubleRedirects' => array( 'RedireksyonDouble' ), + 'DoubleRedirects' => array( 'RedireksyonDoub' ), 'BrokenRedirects' => array( 'RedireksyonKase' ), - 'Disambiguations' => array( 'Disanbigyasyon', 'Klarifikasyon' ), - 'Userlogin' => array( 'Login', 'AntreLòg' ), - 'Userlogout' => array( 'Dekoneksyon', 'ExitLòg' ), - 'CreateAccount' => array( 'KreyeKonpt' ), + 'Disambiguations' => array( 'Tokay' ), + 'Userlogin' => array( 'Koneksyon' ), + 'Userlogout' => array( 'Dekoneksyon' ), + 'CreateAccount' => array( 'KreyeKont' ), 'Preferences' => array( 'Preferans' ), 'Watchlist' => array( 'LisSwivi' ), 'Recentchanges' => array( 'ChanjmanResan' ), - 'Upload' => array( 'Telechaje' ), - 'Listfiles' => array( 'LisImaj' ), + 'Upload' => array( 'Chaje' ), + 'UploadStash' => array( 'ChajePil' ), + 'Listfiles' => array( 'LisFichye', 'Lis_Fichye', 'LisImaj' ), 'Newimages' => array( 'NouvoImaj' ), - 'Listusers' => array( 'LisItilizatè', 'LisYonItilizatè' ), - 'Listgrouprights' => array( 'LisDwaGroup' ), + 'Listusers' => array( 'LisItilizatè' ), + 'Listgrouprights' => array( 'LisDwaGwoup' ), 'Statistics' => array( 'Estatistik' ), - 'Randompage' => array( 'Randonm', 'PajRandonm' ), - 'Lonelypages' => array( 'PajSolitè', 'PajOfelen' ), - 'Uncategorizedpages' => array( 'PajEnkategorize' ), - 'Uncategorizedcategories' => array( 'KategoriEnkategorize' ), - 'Uncategorizedimages' => array( 'ImageEnkategorize' ), - 'Uncategorizedtemplates' => array( 'TenmplaEnkategorize' ), + 'Randompage' => array( 'Oaza', 'PajOaza' ), + 'Lonelypages' => array( 'PajPoukontli', 'PajOfelen' ), + 'Uncategorizedpages' => array( 'PajPakategorize' ), + 'Uncategorizedcategories' => array( 'KategoriPakategorize' ), + 'Uncategorizedimages' => array( 'ImajPakategorize' ), + 'Uncategorizedtemplates' => array( 'ModèlPakategorize' ), 'Unusedcategories' => array( 'KategoriPaItilize' ), - 'Unusedimages' => array( 'ImajePaItilize' ), - 'Wantedpages' => array( 'PajBezwen', 'LyenKase' ), - 'Wantedcategories' => array( 'KategoriBezwen' ), - 'Mostlinked' => array( 'PlisLenke' ), - 'Mostlinkedcategories' => array( 'KategoriPlisLenke', 'KategoriPlisItilize' ), - 'Mostlinkedtemplates' => array( 'TenmplaPlisLenke', 'TenmplaPlisItilize' ), - 'Mostimages' => array( 'PlisImaj' ), + 'Unusedimages' => array( 'FichyePaItilize', 'ImajPaItilize' ), + 'Wantedpages' => array( 'PajNouBezwen', 'LyenKase' ), + 'Wantedcategories' => array( 'KategoriNouBezwen' ), + 'Wantedfiles' => array( 'FichyeNouBezwen' ), + 'Wantedtemplates' => array( 'ModèlNouBezwen' ), + 'Mostlinked' => array( 'PajPlisLye', 'PlisLye' ), + 'Mostlinkedcategories' => array( 'KategoriPlisLye', 'KategoriPlisItilize' ), + 'Mostlinkedtemplates' => array( 'ModèlPlisLye', 'ModèlPlisItilize' ), + 'Mostimages' => array( 'ImajPlisLye', 'PlisFichye', 'PlisImaj' ), 'Mostcategories' => array( 'PlisKategori' ), 'Mostrevisions' => array( 'PlisRevizyon' ), 'Fewestrevisions' => array( 'MwensRevizyon' ), @@ -72,54 +80,62 @@ $specialPageAliases = array( 'Longpages' => array( 'PajLong' ), 'Newpages' => array( 'PajNouvo' ), 'Ancientpages' => array( 'PajAnsyen' ), - 'Deadendpages' => array( 'PajMòtèl' ), - 'Protectedpages' => array( 'PajProteje' ), - 'Protectedtitles' => array( 'TitProteje' ), + 'Deadendpages' => array( 'PajEnpas' ), + 'Protectedpages' => array( 'PajPwoteje' ), + 'Protectedtitles' => array( 'TitPwoteje' ), 'Allpages' => array( 'ToutPaj' ), - 'Prefixindex' => array( 'PrefixEndèx' ), - 'Ipblocklist' => array( 'LisIPBloke' ), + 'Prefixindex' => array( 'EndèksPrefiks' ), + 'Ipblocklist' => array( 'LisBloke', 'LisIPBloke' ), + 'Unblock' => array( 'Debloke' ), 'Specialpages' => array( 'PajEspesyal' ), - 'Contributions' => array( 'Kontribisyon' ), - 'Emailuser' => array( 'EmèlItilizatè' ), - 'Confirmemail' => array( 'VerifyeEmèl' ), - 'Whatlinkshere' => array( 'SakLenkeLa' ), - 'Recentchangeslinked' => array( 'LyenChajmanResan', 'Chanjman Relativ' ), + 'Contributions' => array( 'Kontribisyon', 'Kontrib' ), + 'Emailuser' => array( 'ImèlItilizatè' ), + 'Confirmemail' => array( 'VerifyeImèl' ), + 'Whatlinkshere' => array( 'SakLye' ), + 'Recentchangeslinked' => array( 'LyenChanjmanResan', 'ChanjmanAk' ), 'Movepage' => array( 'DeplasePaj' ), - 'Blockme' => array( 'Bloke-m' ), + 'Blockme' => array( 'BlokeM' ), 'Booksources' => array( 'SousLiv' ), 'Categories' => array( 'Kategori' ), - 'Export' => array( 'Expòt' ), + 'Export' => array( 'Ekspòte' ), 'Version' => array( 'Vèsyon' ), 'Allmessages' => array( 'ToutMesaj' ), - 'Log' => array( 'Jounal', 'Lòg yo' ), - 'Blockip' => array( 'BlokeIP' ), + 'Log' => array( 'Jounal' ), + 'Blockip' => array( 'Bloke', 'BlokeIP', 'BlokeItilizatè' ), 'Undelete' => array( 'Restore' ), - 'Import' => array( 'Enpòt' ), + 'Import' => array( 'Enpòte' ), 'Lockdb' => array( 'KadnaseDB' ), 'Unlockdb' => array( 'DekadnaseDB' ), - 'Userrights' => array( 'DwaItilizatè' ), - 'MIMEsearch' => array( 'BouskayMIME' ), - 'FileDuplicateSearch' => array( 'BouskeFilDouplike' ), + 'Userrights' => array( 'DwaItilizatè', 'FèSysop', 'FèBot' ), + 'MIMEsearch' => array( 'ChacheMIME' ), + 'FileDuplicateSearch' => array( 'ChacheFichyeDoub' ), 'Unwatchedpages' => array( 'PajPaSiveye' ), - 'Listredirects' => array( 'RedireksyonLis' ), + 'Listredirects' => array( 'LisRedireksyon' ), 'Revisiondelete' => array( 'RevizyonSiprime' ), - 'Unusedtemplates' => array( 'TanmplaVyèj' ), - 'Randomredirect' => array( 'RedireksyonRandonm' ), + 'Unusedtemplates' => array( 'ModèlVyèj' ), + 'Randomredirect' => array( 'RedireksyonOaza' ), 'Mypage' => array( 'PajMwen' ), - 'Mytalk' => array( 'Diskisyon-m' ), - 'Mycontributions' => array( 'Kontribisyon-m' ), - 'Listadmins' => array( 'AdminLis' ), - 'Listbots' => array( 'RoboLis' ), + 'Mytalk' => array( 'DiskisyonM' ), + 'Mycontributions' => array( 'KontribisyonM' ), + 'Myuploads' => array( 'ChajmanM' ), + 'PermanentLink' => array( 'LyenPouToutTan' ), + 'Listadmins' => array( 'LisAdmin' ), + 'Listbots' => array( 'LisWobo' ), 'Popularpages' => array( 'PajPopilè' ), 'Search' => array( 'Chache', 'Fouye' ), - 'Resetpass' => array( 'ResètMoPas' ), + 'Resetpass' => array( 'ChanjeMopas', 'ResètMopas' ), 'Withoutinterwiki' => array( 'SanEntèwiki' ), - 'MergeHistory' => array( 'MeleIstwa' ), - 'Filepath' => array( 'ChemenFil' ), - 'Invalidateemail' => array( 'EnvalideEmèl' ), + 'MergeHistory' => array( 'FizyoneIstwa' ), + 'Filepath' => array( 'ChemenFichye' ), + 'Invalidateemail' => array( 'EnvalideImèl' ), 'Blankpage' => array( 'PajVid' ), - 'LinkSearch' => array( 'BouskeLyen' ), + 'LinkSearch' => array( 'ChacheLyen' ), 'DeletedContributions' => array( 'SiprimeKontribisyon' ), + 'Tags' => array( 'Etikèt' ), + 'Activeusers' => array( 'ItilizatèAktif' ), + 'ComparePages' => array( 'KonparePaj' ), + 'Badtitle' => array( 'MovèTit' ), + 'DisableAccount' => array( 'DeaktiveKont' ), ); $linkTrail = '/^([a-zàèòÀÈÒ]+)(.*)$/sDu'; @@ -140,8 +156,7 @@ $messages = array( 'tog-editsection' => 'Pemèt modifye yon seksyon grasa lyen [modifye] yo', 'tog-editsectiononrightclick' => 'Pemèt modifye yon seksyon lè ou klike a dwat sou tit seksyon an (sa mande JavaScript)', 'tog-showtoc' => 'Montre tab de matyè yo (pou tout paj ki gen plis pase 3 tit)', -'tog-rememberpassword' => 'Sonje login mwen nan òdinatè sa', -'tog-editwidth' => 'Montre fenèt pou modifikasyon yo nan mitan paj lan', +'tog-rememberpassword' => 'Sonje mopas mwen nan òdinatè sa (pou $1 {{PLURAL:$1|jou|jou}} maximum)', 'tog-watchcreations' => 'Mete paj mwen kreye yo nan lis swivi mwen.', 'tog-watchdefault' => 'Mete paj mwen edite yo nan lis swivi mwen', 'tog-watchmoves' => 'Mete paj mwen deplase yo nan lis swivi mwen', @@ -286,26 +301,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Ajoute yon sijè', -'vector-action-delete' => 'Efase', -'vector-action-move' => 'Chanje non', -'vector-action-protect' => 'Pwoteje', -'vector-action-undelete' => 'Retabli', -'vector-action-unprotect' => 'Pa pwoteje', -'vector-namespace-category' => 'Kategori', -'vector-namespace-help' => 'Èd', -'vector-namespace-image' => 'Imaj', -'vector-namespace-main' => 'Paj', -'vector-namespace-mediawiki' => 'Mesaj', -'vector-namespace-template' => 'Modèl', -'vector-view-create' => 'Kreye', -'vector-view-edit' => 'Modifye', -'vector-view-history' => 'Gade istorik', -'vector-view-view' => 'Li', -'vector-view-viewsource' => 'Wè kòd tèks sa a', -'actions' => 'Aksyon yo', -'namespaces' => 'Espas non yo', -'variants' => 'Varyant yo', +'vector-action-addsection' => 'Ajoute yon sijè', +'vector-action-delete' => 'Efase', +'vector-action-move' => 'Chanje non', +'vector-action-protect' => 'Pwoteje', +'vector-action-undelete' => 'Retabli', +'vector-action-unprotect' => 'Pa pwoteje', +'vector-simplesearch-preference' => 'Aktive sijèsyon rechèch ranfòse yo (pou estil Vector sèlman)', +'vector-view-create' => 'Kreye', +'vector-view-edit' => 'Modifye', +'vector-view-history' => 'Gade istorik', +'vector-view-view' => 'Li', +'vector-view-viewsource' => 'Wè kòd tèks sa a', +'actions' => 'Aksyon yo', +'namespaces' => 'Espas non yo', +'variants' => 'Varyant yo', 'errorpagetitle' => 'Erè', 'returnto' => 'Ritounen nan paj $1.', @@ -366,6 +376,9 @@ Genyen trop itilizatè k ap eseye gade paj sa. Tanpri tann yon tikras tan anvan ou eseye gade paj sa ankò. $1', +'pool-timeout' => 'Tan ekoule pou defè seri a', +'pool-queuefull' => 'Fil pou travay la plen', +'pool-errorunknown' => 'Erè nou pa konnen', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Apwopo {{SITENAME}}', @@ -528,7 +541,8 @@ Kont ou an kreye. Pa bliye pèsonalize l nan [[Special:Preferences|preferans ou 'yourname' => 'Non itilizatè ou an :', 'yourpassword' => 'Mopas ou an :', 'yourpasswordagain' => 'Mete mopas ou an ankò :', -'remembermypassword' => 'Anrejistre mopas mwen an nan òdinatè mwen an', +'remembermypassword' => 'Sonje mopas mwen an nan òdinatè mwen an (pou yon maximum de $1 {{PLURAL:$1|jou|jou}})', +'securelogin-stick-https' => 'Kontinye itilize HTTPS toujou apre koneksyon', 'yourdomainname' => 'Domèn ou an', 'externaldberror' => 'Li sanble ke yon erè pwodui ak bazdone a pou idantifikasyon ki pa nan sistèm an, oubyen ou pa otorize pou mete a jou kont ou genyen nan lòt sistèm yo.', 'login' => 'Konekte ou', @@ -545,6 +559,7 @@ Kont ou an kreye. Pa bliye pèsonalize l nan [[Special:Preferences|preferans ou 'gotaccount' => "Ou deja genyen yon kont ? '''$1'''.", 'gotaccountlink' => 'Idantifye ou', 'createaccountmail' => 'pa imèl', +'createaccountreason' => 'Rezon:', 'badretype' => 'Mopas ou bay yo pa parèy ditou.', 'userexists' => 'Non itilizatè ou bay an deja itilize pa yon lòt moun. Chwazi yon lòt souple.', 'loginerror' => 'Erè nan idantifikasyon ou an', @@ -564,6 +579,7 @@ Byen gade ke ou te byen ekri non ou, oubyen [[Special:UserLogin/signup|kreye yon 'wrongpasswordempty' => 'Ou pa antre mopas ou an. Eseye ankò.', 'passwordtooshort' => 'Mopas ou an twò kout. Li dwe genyen omwens {{PLURAL:$1|1 karaktè|$1 karaktè}}.', 'password-name-match' => 'Mopas ou dwe diferan ak non itilizatè ou.', +'password-login-forbidden' => 'Nou pa gendwa pran non itilizatè ak mopas sa yo.', 'mailmypassword' => 'Voye mwen yon nouvo mopas pa imèl', 'passwordremindertitle' => 'Nouvo mopas tanporè, li pap dire (yon kout tan) pou pajwèb sa a {{SITENAME}}', 'passwordremindertext' => 'Kèk moun (ou menm oubyen yon moun ki genyen adrès IP sa a $1) mande pou nou voye w yon nouvo mopas pou {{SITENAME}} ($4). @@ -595,6 +611,9 @@ Pa pòte atansyon pou mesaj sa si kont sa kreye pa erè.', 'loginlanguagelabel' => 'Lang : $1', 'suspicious-userlogout' => 'Demand ou te fè pou dekonekte w te refize paske sanble li te voye pa yon navigatè ki fè erè oubyen li soti nan yon proksi pou kach.', +# E-mail sending +'php-mail-error-unknown' => 'Erè nou pa konnen nan fonksyon mail() PHP a.', + # Password reset dialog 'resetpass' => 'Chanje mopas ou an', 'resetpass_announce' => 'Ou konekte ou ak yon mopas ki valab yon moman; mopas sa te voye pa imèl. Pou ou kapab fini anrejistreman an, ou dwe mete yon nouvo mopas la :', @@ -643,11 +662,12 @@ Gendwa ou te deja modifye li oubyen ou te mande yon nouvo mopas tanporè.', 'showlivepreview' => 'Gade pou wè (Kout je rapid)', 'showdiff' => 'Montre chanjman yo', 'anoneditwarning' => "'''Pòte atansyon :''' ou pa konekte nan sistèm nan. Adrès IP ou a ap anrejistre nan istorik paj sa a.", +'anonpreviewwarning' => "''Ou pa konekte. Anrejistre ap kenbe adrès IP ou a nan istorik paj sa a.''", 'missingsummary' => "'''Souple :''' ou poko bay rezime modifikasyon ou fè an Si ou klike sou \"{{int:savearticle}}\" ankò, piblikasyon sa ap fèt san li bay lòt avètisman.", 'missingcommenttext' => 'Souple, ekri komantè ou an pli ba nan paj sa.', 'missingcommentheader' => "'''Pòte atansyon :''' ou pa bay komantè ou an yon sijè/tit . -Si ou klike sou \"Pibliye\", edisyon ou an pap genyen yon tit.", +Si ou klike sou \"{{int:savearticle}}\", modifikasyon ou an pap genyen yon tit.", 'summary-preview' => 'Kout je nan rezime an anvan li anrejistre:', 'subject-preview' => 'Yon kout je sou sijè/tit sa:', 'blockedtitle' => 'itilizatè a bloke.', @@ -711,7 +731,11 @@ Dènye jounal pou blokaj yo parèt anba kòm referans:', 'usercsspreview' => "'''Sonje ke w ap voye yon kout je sou sa w ekri nan fèy CSS pa ou sa.''' ''Li poko anrejistre !'''", 'userjspreview' => "'''Sonje ke ou ap voye kout je sou fèy JavaScript ou ekri a, li poko anrejistre !'''", -'userinvalidcssjstitle' => "'''Pòte atnasyon :''' estil \"\$1\" sa pa egziste. Raple ou ke paj pèsonèl ou yo ak ekstansyon .css epi .js ap itilize tit/sijè nan lèt miniskil, pa egzanp {{ns:user}}:Foo/monobook.css se pa {{ns:user}}:Foo/Monobook.css.", +'sitecsspreview' => "'''Sonje ke w ap voye yon kout je sou sa w ekri nan fèy CSS sa a.''' +'''Li poko anrejistre !'''", +'sitejspreview' => "'''Sonje ke w ap voye yon kout je sou kòd JavaScript sa a.''' +'''Li poko anrejistre !'''", +'userinvalidcssjstitle' => "'''Pòte atansyon :''' estil \"\$1\" pa egziste. Paj pèsonalize ak ekstansyon .css epi .js yo ap itilize tit/sijè nan lèt miniskil, pa egzanp {{ns:user}}:Foo/vector.css se pa {{ns:user}}:Foo/Vector.css.", 'updated' => '(Li gen dènye vèsyon sou li)', 'note' => "'''Nòt :'''", 'previewnote' => "'''Atansyon, tèks sa a se yon kout je, li poko anrejistre !'''", @@ -745,8 +769,6 @@ W ap pwomèt tou ke sa w ap ekri a se ou menm menm ki ekri li oubyen ke ou kopye Si ou pa vle pou sa ou ekri pataje oubyen modifye, ou pa dwe soumèt li isit.
    W ap pwomèt tou ke sa w ap ekri a se ou menm menm ki ekri li oubyen ke ou kopye li de yon sous ki nan domèn piblik, ou byen you sous ki lib (gade $1 pou konnen pi plis). '''PA ITILIZE TRAVAY KI ANBA DWA DOTÈ SI OTÈ PA T BAY OTORIZASYON LI TOUTBON !'''", -'longpagewarning' => "'''AVÈTISMAN : paj sa a genyen yon gwosè ki pase $1 Kio ; -Kèk bwozè (firefox,ie,opera,safari...) pa kapab afiche byen byen modifikasyon ki parèt nan paj ki genyen plis oubyen près 32 Kio. Oumèt dekoupe paj an nan 2 mòso oubyen ak seksyon pli piti.'''", 'longpageerror' => "'''ERÈ : Tèks ou anrejistre a ap fè $1 Ko, tay sa a depase kapasite limit nou kapab aksepte kounye a: $2 Ko. Nou pa kapab anrejistre tèks sa. Eseye ritounen nan paj ou te ye anvan pou kopye modifikasyon ou yo.'''", 'readonlywarning' => "'''Atansyon: Bazdone a bare pou fè travay sou li, kidonk ou pap kapab anrejistre modifikasyon ou yo kounye a.''' Petèt ou ta renmen kopye-kole teks sa a nan yon fichye teks epi anrejistre l pou pita. @@ -880,7 +902,7 @@ Lejand : ({{MediaWiki:Cur}}) = diferans ak vèsyon kounye a, ({{MediaWiki:Last}} 'lineno' => 'Liy $1 :', 'compareselectedversions' => 'Konpare vèsyon ki seleksyone yo', 'editundo' => 'Revoke', -'diff-multi' => '({{PLURAL:$1|Yon revizyon nan mitan evolisyon ki kache|$1 revizyon yo nan mitan evolisyon ki kache}})', +'diff-multi' => '(Genyen {{PLURAL:$1|yon revizyon|$1 revizyon yo}} ki te fèt pa {{PLURAL:$2|yon itilizatè|$2 itilizatè yo}} nan mitan evolisyon ki kache)', # Search results 'searchresults' => 'Rezilta yo pou rechèch la', @@ -1115,7 +1137,6 @@ Gade tou [[Special:WantedCategories|kategori moun mande]].', # Watchlist 'watchlist' => 'Lis swivi mwen', 'mywatchlist' => 'Lis swivi mwen', -'watchlistfor' => "(pou itilizatè '''$1''')", 'addedwatch' => 'Ajoute nan lis swivi', 'addedwatchtext' => 'Paj « [[:$1]] » te byen ajoute nan [[Special:Watchlist|lis swivi ou an]]. Depi kounye a, tout modifikasyon nan paj sa a ak nan paj diskisyon li pral parèt fonse nan [[Special:RecentChanges|lis chanjman ki fèk fèt]] pou ou ka wè yo pi byen.', @@ -1340,9 +1361,9 @@ Li pèmèt retabli vèsyon ki te anvan li epi ajoute yon rezon ki esplike poukis 'nextdiff' => 'Modifikasyon swivan →', # Media information -'file-info-size' => '($1 × $2 piksèl, lajè fichye a : $3, tip MIME li ye : $4)', +'file-info-size' => '$1 × $2 piksèl, gwosè fichye a : $3, tip MIME li ye : $4', 'file-nohires' => 'Pa genyen rezolisyon ki pi wo ki disponib.', -'svg-long-desc' => '(Fichye SVG, rezolisyon pou de $1 × $2 piksèl, lajè : $3)', +'svg-long-desc' => 'Fichye SVG, rezolisyon de $1 × $2 piksèl, gwosè fichye : $3', 'show-big-image' => 'Pi bon rezolisyon', 'show-big-image-thumb' => 'Lajè apèsi sa a : $1 × $2 piksèl', diff --git a/languages/messages/MessagesHu.php b/languages/messages/MessagesHu.php index 363bd59e..8a57c6aa 100644 --- a/languages/messages/MessagesHu.php +++ b/languages/messages/MessagesHu.php @@ -7,6 +7,7 @@ * @ingroup Language * @file * + * @author Alquen * @author Balasyum * @author Bdamokos * @author Bennó @@ -20,6 +21,7 @@ * @author Gondnok * @author Hunyadym * @author KossuthRad + * @author Misibacsi * @author Samat * @author Terik * @author Tgr @@ -57,95 +59,96 @@ $namespaceAliases = array( ); $fallback8bitEncoding = "iso8859-2"; -$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' ); +$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'Kettős átirányítások', 'Dupla átirányítások' ), - 'BrokenRedirects' => array( 'Nem létező lapra mutató átirányítások', 'Hibás átirányítások' ), - 'Disambiguations' => array( 'Egyértelműsítő lapok' ), + 'DoubleRedirects' => array( 'Kettős_átirányítások', 'Dupla_átirányítások' ), + 'BrokenRedirects' => array( 'Nem_létező_lapra_mutató_átirányítások', 'Hibás_átirányítások' ), + 'Disambiguations' => array( 'Egyértelműsítő_lapok' ), 'Userlogin' => array( 'Belépés' ), 'Userlogout' => array( 'Kilépés' ), - 'CreateAccount' => array( 'Szerkesztői fiók létrehozása', 'Felhasználói fiók létrehozása' ), + 'CreateAccount' => array( 'Szerkesztői_fiók_létrehozása', 'Felhasználói_fiók_létrehozása' ), 'Preferences' => array( 'Beállításaim' ), 'Watchlist' => array( 'Figyelőlistám' ), - 'Recentchanges' => array( 'Friss változtatások' ), + 'Recentchanges' => array( 'Friss_változtatások' ), 'Upload' => array( 'Feltöltés' ), - 'Listfiles' => array( 'Fájlok listája', 'Képek listája', 'Fájllista', 'Képlista' ), - 'Newimages' => array( 'Új fájlok', 'Új képek', 'Új képek galériája' ), - 'Listusers' => array( 'Szerkesztők listája', 'Szerkesztők', 'Felhasználók' ), - 'Listgrouprights' => array( 'Szerkesztői csoportok jogai' ), + 'Listfiles' => array( 'Fájlok_listája', 'Képek_listája', 'Fájllista', 'Képlista' ), + 'Newimages' => array( 'Új_fájlok', 'Új_képek', 'Új_képek_galériája' ), + 'Listusers' => array( 'Szerkesztők_listája', 'Szerkesztők', 'Felhasználók' ), + 'Listgrouprights' => array( 'Szerkesztői_csoportok_jogai' ), 'Statistics' => array( 'Statisztika', 'Statisztikák' ), - 'Randompage' => array( 'Lap találomra' ), - 'Lonelypages' => array( 'Árva lapok', 'Magányos lapok' ), - 'Uncategorizedpages' => array( 'Kategorizálatlan lapok' ), - 'Uncategorizedcategories' => array( 'Kategorizálatlan kategóriák' ), - 'Uncategorizedimages' => array( 'Kategorizálatlan fájlok', 'Kategorizálatlan képek' ), - 'Uncategorizedtemplates' => array( 'Kategorizálatlan sablonok' ), - 'Unusedcategories' => array( 'Nem használt kategóriák' ), - 'Unusedimages' => array( 'Nem használt képek' ), - 'Wantedpages' => array( 'Keresett lapok' ), - 'Wantedcategories' => array( 'Keresett kategóriák' ), - 'Wantedfiles' => array( 'Keresett fájlok' ), - 'Wantedtemplates' => array( 'Keresett sablonok' ), - 'Mostlinked' => array( 'Legtöbbet hivatkozott lapok' ), - 'Mostlinkedcategories' => array( 'Legtöbbet hivatkozott kategóriák' ), - 'Mostlinkedtemplates' => array( 'Legtöbbet hivatkozott sablonok' ), - 'Mostimages' => array( 'Legtöbbet használt fájlok', 'Legtöbbet használt képek' ), - 'Mostcategories' => array( 'Legtöbb kategóriába tartozó lapok' ), - 'Mostrevisions' => array( 'Legtöbbet szerkesztett lapok' ), - 'Fewestrevisions' => array( 'Legkevesebbet szerkesztett lapok' ), - 'Shortpages' => array( 'Rövid lapok' ), - 'Longpages' => array( 'Hosszú lapok' ), - 'Newpages' => array( 'Új lapok' ), - 'Ancientpages' => array( 'Régóta nem változott szócikkek' ), + 'Randompage' => array( 'Lap_találomra' ), + 'Lonelypages' => array( 'Árva_lapok', 'Magányos_lapok' ), + 'Uncategorizedpages' => array( 'Kategorizálatlan_lapok' ), + 'Uncategorizedcategories' => array( 'Kategorizálatlan_kategóriák' ), + 'Uncategorizedimages' => array( 'Kategorizálatlan_fájlok', 'Kategorizálatlan_képek' ), + 'Uncategorizedtemplates' => array( 'Kategorizálatlan_sablonok' ), + 'Unusedcategories' => array( 'Nem_használt_kategóriák' ), + 'Unusedimages' => array( 'Nem_használt_képek' ), + 'Wantedpages' => array( 'Keresett_lapok' ), + 'Wantedcategories' => array( 'Keresett_kategóriák' ), + 'Wantedfiles' => array( 'Keresett_fájlok' ), + 'Wantedtemplates' => array( 'Keresett_sablonok' ), + 'Mostlinked' => array( 'Legtöbbet_hivatkozott_lapok' ), + 'Mostlinkedcategories' => array( 'Legtöbbet_hivatkozott_kategóriák' ), + 'Mostlinkedtemplates' => array( 'Legtöbbet_hivatkozott_sablonok' ), + 'Mostimages' => array( 'Legtöbbet_használt_fájlok', 'Legtöbbet_használt_képek' ), + 'Mostcategories' => array( 'Legtöbb_kategóriába_tartozó_lapok' ), + 'Mostrevisions' => array( 'Legtöbbet_szerkesztett_lapok' ), + 'Fewestrevisions' => array( 'Legkevesebbet_szerkesztett_lapok' ), + 'Shortpages' => array( 'Rövid_lapok' ), + 'Longpages' => array( 'Hosszú_lapok' ), + 'Newpages' => array( 'Új_lapok' ), + 'Ancientpages' => array( 'Régóta_nem_változott_szócikkek' ), 'Deadendpages' => array( 'Zsákutcalapok' ), - 'Protectedpages' => array( 'Védett lapok' ), - 'Protectedtitles' => array( 'Védett címek' ), - 'Allpages' => array( 'Az összes lap listája' ), - 'Prefixindex' => array( 'Keresés előtag szerint' ), - 'Ipblocklist' => array( 'Blokkolt IP-címek listája' ), - 'Specialpages' => array( 'Speciális lapok' ), - 'Contributions' => array( 'Szerkesztő közreműködései' ), - 'Emailuser' => array( 'E-mail küldése', 'E-mail küldése ezen szerkesztőnek' ), - 'Confirmemail' => array( 'Emailcím megerősítése' ), - 'Whatlinkshere' => array( 'Mi hivatkozik erre' ), - 'Recentchangeslinked' => array( 'Kapcsolódó változtatások' ), - 'Movepage' => array( 'Lap átnevezése' ), + 'Protectedpages' => array( 'Védett_lapok' ), + 'Protectedtitles' => array( 'Védett_címek' ), + 'Allpages' => array( 'Az_összes_lap_listája' ), + 'Prefixindex' => array( 'Keresés_előtag_szerint' ), + 'Ipblocklist' => array( 'Blokkolt_IP-címek_listája' ), + 'Unblock' => array( 'Blokkolás_feloldása' ), + 'Specialpages' => array( 'Speciális_lapok' ), + 'Contributions' => array( 'Szerkesztő_közreműködései' ), + 'Emailuser' => array( 'E-mail_küldése', 'E-mail_küldése_ezen_szerkesztőnek' ), + 'Confirmemail' => array( 'Emailcím_megerősítése' ), + 'Whatlinkshere' => array( 'Mi_hivatkozik_erre' ), + 'Recentchangeslinked' => array( 'Kapcsolódó_változtatások' ), + 'Movepage' => array( 'Lap_átnevezése' ), 'Blockme' => array( 'Blokkolj' ), 'Booksources' => array( 'Könyvforrások' ), 'Categories' => array( 'Kategóriák' ), - 'Export' => array( 'Lapok exportálása' ), + 'Export' => array( 'Lapok_exportálása' ), 'Version' => array( 'Névjegy', 'Verziószám', 'Verzió' ), 'Allmessages' => array( 'Rendszerüzenetek' ), 'Log' => array( 'Rendszernaplók', 'Naplók', 'Napló' ), 'Blockip' => array( 'Blokkolás' ), - 'Undelete' => array( 'Törölt lapváltozatok visszaállítása' ), - 'Import' => array( 'Lapok importálása' ), - 'Lockdb' => array( 'Adatbázis lezárása' ), - 'Unlockdb' => array( 'Adatbázis lezárás feloldása' ), - 'Userrights' => array( 'Szerkesztők jogai', 'Szerkesztői jogok', 'Szerkesztőjogok', 'Szerkesztő jogai' ), - 'MIMEsearch' => array( 'Keresés MIME-típus alapján' ), - 'FileDuplicateSearch' => array( 'Duplikátumok keresése' ), - 'Unwatchedpages' => array( 'Nem figyelt lapok' ), - 'Listredirects' => array( 'Átirányítások listája' ), - 'Revisiondelete' => array( 'Változat törlése' ), - 'Unusedtemplates' => array( 'Nem használt sablonok' ), - 'Randomredirect' => array( 'Átirányítás találomra' ), + 'Undelete' => array( 'Törölt_lapváltozatok_visszaállítása' ), + 'Import' => array( 'Lapok_importálása' ), + 'Lockdb' => array( 'Adatbázis_lezárása' ), + 'Unlockdb' => array( 'Adatbázis_lezárás_feloldása' ), + 'Userrights' => array( 'Szerkesztők_jogai', 'Szerkesztői_jogok', 'Szerkesztőjogok', 'Szerkesztő_jogai' ), + 'MIMEsearch' => array( 'Keresés_MIME-típus_alapján' ), + 'FileDuplicateSearch' => array( 'Duplikátumok_keresése' ), + 'Unwatchedpages' => array( 'Nem_figyelt_lapok' ), + 'Listredirects' => array( 'Átirányítások_listája' ), + 'Revisiondelete' => array( 'Változat_törlése' ), + 'Unusedtemplates' => array( 'Nem_használt_sablonok' ), + 'Randomredirect' => array( 'Átirányítás_találomra' ), 'Mypage' => array( 'Lapom', 'Userlapom' ), 'Mytalk' => array( 'Vitám', 'Vitalapom', 'Uservitalapom' ), 'Mycontributions' => array( 'Közreműködéseim' ), - 'Listadmins' => array( 'Adminisztrátorok', 'Adminisztrátorok listája', 'Sysopok' ), - 'Listbots' => array( 'Botok', 'Botok listája' ), - 'Popularpages' => array( 'Népszerű oldalak' ), + 'Listadmins' => array( 'Adminisztrátorok', 'Adminisztrátorok_listája', 'Sysopok' ), + 'Listbots' => array( 'Botok', 'Botok_listája' ), + 'Popularpages' => array( 'Népszerű_oldalak' ), 'Search' => array( 'Keresés' ), 'Resetpass' => array( 'Jelszócsere' ), - 'Withoutinterwiki' => array( 'Nyelvközi hivatkozás nélküli lapok', 'Wikiközi hivatkozás nélküli lapok', 'Interwikilinkek nélküli lapok' ), - 'MergeHistory' => array( 'Laptörténetek egyesítése', 'Laptörténet-egyesítés' ), - 'Filepath' => array( 'Fájl elérési útja', 'Fájl elérési út' ), - 'Invalidateemail' => array( 'E-mail cím érvénytelenítése' ), - 'Blankpage' => array( 'Üres lap' ), - 'LinkSearch' => array( 'Hivatkozás keresés' ), - 'DeletedContributions' => array( 'Törölt szerkesztések' ), + 'Withoutinterwiki' => array( 'Nyelvközi_hivatkozás_nélküli_lapok', 'Wikiközi_hivatkozás_nélküli_lapok', 'Interwikilinkek_nélküli_lapok' ), + 'MergeHistory' => array( 'Laptörténetek_egyesítése', 'Laptörténet-egyesítés' ), + 'Filepath' => array( 'Fájl_elérési_útja', 'Fájl_elérési_út' ), + 'Invalidateemail' => array( 'E-mail_cím_érvénytelenítése' ), + 'Blankpage' => array( 'Üres_lap' ), + 'LinkSearch' => array( 'Hivatkozás_keresés' ), + 'DeletedContributions' => array( 'Törölt_szerkesztések' ), 'Tags' => array( 'Címkék' ), ); @@ -309,8 +312,7 @@ $messages = array( 'tog-editsection' => '[szerkesztés] linkek az egyes szakaszok szerkesztéséhez', 'tog-editsectiononrightclick' => 'Szakaszok szerkesztése a szakaszcímre való jobb kattintással (JavaScript-alapú)', 'tog-showtoc' => 'Tartalomjegyzék megjelenítése a három fejezetnél többel rendelkező cikkeknél', -'tog-rememberpassword' => 'Emlékezzen rám ezen a számítógépen', -'tog-editwidth' => 'Teljes szélességű szerkesztőablak', +'tog-rememberpassword' => 'Emlékezzen rám ezzel a böngészővel (legfeljebb $1 napig)', 'tog-watchcreations' => 'Az általam létrehozott lapok felvétele a figyelőlistára', 'tog-watchdefault' => 'Az általam szerkesztett lapok felvétele a figyelőlistára', 'tog-watchmoves' => 'Az általam átnevezett lapok felvétele a figyelőlistára', @@ -455,31 +457,21 @@ $messages = array( 'faqpage' => 'Project:GyIK', # Vector skin -'vector-action-addsection' => 'Új szakasz nyitása', -'vector-action-delete' => 'Törlés', -'vector-action-move' => 'Átnevezés', -'vector-action-protect' => 'Lapvédelem', -'vector-action-undelete' => 'Visszaállítás', -'vector-action-unprotect' => 'Védelem feloldása', -'vector-namespace-category' => 'Kategória', -'vector-namespace-help' => 'Segítséglap', -'vector-namespace-image' => 'Fájl', -'vector-namespace-main' => 'Szócikk', -'vector-namespace-media' => 'Médialap', -'vector-namespace-mediawiki' => 'Rendszerüzenet', -'vector-namespace-project' => 'Projektlap', -'vector-namespace-special' => 'Speciális lap', -'vector-namespace-talk' => 'Megbeszélés', -'vector-namespace-template' => 'Sablon', -'vector-namespace-user' => 'Szerkesztői lap', -'vector-view-create' => 'Létrehozás', -'vector-view-edit' => 'Szerkesztés', -'vector-view-history' => 'Laptörténet', -'vector-view-view' => 'Olvasás', -'vector-view-viewsource' => 'A lap forrása', -'actions' => 'Műveletek', -'namespaces' => 'Névterek', -'variants' => 'Változók', +'vector-action-addsection' => 'Új szakasz nyitása', +'vector-action-delete' => 'Törlés', +'vector-action-move' => 'Átnevezés', +'vector-action-protect' => 'Lapvédelem', +'vector-action-undelete' => 'Visszaállítás', +'vector-action-unprotect' => 'Védelem feloldása', +'vector-simplesearch-preference' => 'Továbbfejlesztett keresési javaslatok engedélyezése (csak Vector felületen)', +'vector-view-create' => 'Létrehozás', +'vector-view-edit' => 'Szerkesztés', +'vector-view-history' => 'Laptörténet', +'vector-view-view' => 'Olvasás', +'vector-view-viewsource' => 'A lap forrása', +'actions' => 'Műveletek', +'namespaces' => 'Névterek', +'variants' => 'Változók', 'errorpagetitle' => 'Hiba', 'returnto' => 'Vissza a(z) $1 laphoz.', @@ -540,6 +532,9 @@ Túl sok felhasználó próbálta megtekinteni ezt az oldalt. Kérlek, várj egy kicsit, mielőtt újrapróbálkoznál a lap megtekintésével. $1', +'pool-timeout' => 'Letelt a várakozási idő a zároláshoz', +'pool-queuefull' => 'A pool sor megtelt', +'pool-errorunknown' => 'Ismeretlen hiba', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'A {{SITENAME}} wikiről', @@ -700,7 +695,8 @@ Ne felejtsd el átnézni a [[Special:Preferences|személyes beállításaidat]]. 'yourname' => 'Szerkesztőneved:', 'yourpassword' => 'Jelszavad:', 'yourpasswordagain' => 'Jelszavad ismét:', -'remembermypassword' => 'Ne léptessen ki a böngésző bezárásakor.', +'remembermypassword' => 'Emlékezzen rám ezen a számítógépen (legfeljebb $1 napig)', +'securelogin-stick-https' => 'Kapcsolódás HTTPS-en keresztül bejelentkezés után is', 'yourdomainname' => 'A domainneved:', 'externaldberror' => 'Hiba történt a külső adatbázis hitelesítése közben, vagy nem vagy jogosult a külső fiókod frissítésére.', 'login' => 'Bejelentkezés', @@ -717,6 +713,7 @@ Ne felejtsd el átnézni a [[Special:Preferences|személyes beállításaidat]]. 'gotaccount' => "Ha már korábban regisztráltál, '''$1'''!", 'gotaccountlink' => 'Bejelentkezés', 'createaccountmail' => 'e-mailben', +'createaccountreason' => 'Indoklás:', 'badretype' => 'A megadott jelszavak nem egyeznek.', 'userexists' => 'A megadott szerkesztőnév már foglalt. Kérlek, válassz másikat!', @@ -728,7 +725,7 @@ Nálad ezek le vannak tiltva. Engedélyezd őket, majd próbáld meg újra.', 'noname' => 'Érvénytelen szerkesztőnevet adtál meg.', 'loginsuccesstitle' => 'Sikeres bejelentkezés', -'loginsuccess' => "'''Most már be vagy jelentkezve a(z) {{SITENAME}} wikibe „$1” néven.'''", +'loginsuccess' => "'''Sikeresen bejelentkeztél a(z) {{SITENAME}} wikibe „$1” néven.'''", 'nosuchuser' => 'Nem létezik „$1” nevű szerkesztő. A szerkesztőnevek kis- és nagybetű-érzékenyek. Ellenőrizd, hogy helyesen írtad-e be, vagy [[Special:UserLogin/signup|hozz létre egy új fiókot]].', @@ -740,6 +737,7 @@ Ellenőrizd, hogy helyesen írtad-e be.', 'wrongpasswordempty' => 'Nem adtál meg jelszót. Próbáld meg újra.', 'passwordtooshort' => 'A jelszónak legalább {{PLURAL:$1|egy|$1}} karakterből kell állnia.', 'password-name-match' => 'A jelszavadnak különböznie kell a szerkesztőnevedtől.', +'password-login-forbidden' => 'Ezen felhasználónév és jelszó használata tiltott.', 'mailmypassword' => 'Új jelszó küldése e-mailben', 'passwordremindertitle' => 'Ideiglenes jelszó a(z) {{SITENAME}} wikire', 'passwordremindertext' => 'Valaki (vélhetően te, a(z) $1 IP-címről) új jelszót kért a(z) @@ -779,6 +777,9 @@ Várj egy kicsit, mielőtt újra próbálkozol.', 'loginlanguagelabel' => 'Nyelv: $1', 'suspicious-userlogout' => 'A kijelentkezési kérésed vissza lett utasítva, mert úgy tűnik, hogy egy hibás böngésző vagy gyorsítótárazó proxy küldte.', +# E-mail sending +'php-mail-error-unknown' => 'Ismeretlen hiba a PHP mail() függvényében', + # Password reset dialog 'resetpass' => 'Jelszó módosítása', 'resetpass_announce' => 'Az e-mailben elküldött ideiglenes kóddal jelentkeztél be. A bejelentkezés befejezéséhez meg kell megadnod egy új jelszót:', @@ -830,10 +831,11 @@ Lehet, hogy már sikeresen megváltoztattad a jelszavad, vagy pedig időközben 'showlivepreview' => 'Élő előnézet', 'showdiff' => 'Változtatások megtekintése', 'anoneditwarning' => "'''Figyelem:''' Nem vagy bejelentkezve, ha szerkesztesz, az IP-címed látható lesz a laptörténetben.", +'anonpreviewwarning' => "''Nem vagy bejelentkezve. A mentéskor az IP-címed rögzítve lesz a laptörténetben.''", 'missingsummary' => "'''Emlékeztető:''' Nem adtál meg szerkesztési összefoglalót. Ha összefoglaló nélkül akarod elküldeni a szöveget, kattints újra a mentésre.", 'missingcommenttext' => 'Kérjük, hogy írj összefoglalót szerkesztésedhez.', 'missingcommentheader' => "'''Emlékeztető:''' Nem adtad meg a megjegyzés tárgyát vagy címét. -Ha ismét a Mentés gombra kattintasz, akkor a szerkesztésed nélküle kerül mentésre.", +Ha ismét a „{{int:savearticle}}” gombra kattintasz, akkor a szerkesztésed nélküle kerül mentésre.", 'summary-preview' => 'A szerkesztési összefoglaló előnézete:', 'subject-preview' => 'A téma/főcím előnézete:', 'blockedtitle' => 'A szerkesztő blokkolva van', @@ -910,7 +912,11 @@ A blokkolási napló legutóbbi ide vonatkozó bejegyzése a következő:', 'userjsyoucanpreview' => "'''Tipp:''' mentés előtt használd az „{{int:showpreview}}” gombot az új JavaScipted teszteléséhez.", 'usercsspreview' => "'''Ne felejtsd el, hogy ez csak a felhasználói CSS-ed előnézete és még nincs elmentve!'''", 'userjspreview' => "'''Ne felejtsd el, hogy még csak teszteled a felhasználói JavaScriptedet, és még nincs elmentve!'''", -'userinvalidcssjstitle' => "'''Figyelem:''' Nincs „$1” nevű felület. A felületekhez tartozó .css/.js oldalak kisbetűvel kezdődnek, például ''{{ns:user}}:Gipsz Jakab/monobook.css'' és nem ''{{ns:user}}:Gipsz Jakab/Monobook.css''.", +'sitecsspreview' => "'''Ne feledd, hogy csak a CSS előnézetét látod.''' +'''Még nincs elmentve!'''", +'sitejspreview' => "'''Ne feledd, hogy a JavaScript-kódnak csak az előnézetét látod.''' +'''Még nincs elmentve!'''", +'userinvalidcssjstitle' => "'''Figyelem:''' Nincs „$1” nevű felület. A felületekhez tartozó .css/.js oldalak kisbetűvel kezdődnek, például ''{{ns:user}}:Gipsz Jakab/vector.css'' és nem ''{{ns:user}}:Gipsz Jakab/Vector.css''.", 'updated' => '(frissítve)', 'note' => "'''Megjegyzés:'''", 'previewnote' => "'''Ne feledd, hogy ez csak előnézet, a változtatásaid még nincsenek elmentve!'''", @@ -948,9 +954,6 @@ Azt is megígéred, hogy ezt magadtól írtad, vagy egy közkincsből vagy más Ha nem akarod, hogy az írásodat módosítsák, akkor ne küldd be.
    Azt is megígéred, hogy ezt magadtól írtad, vagy egy közkincsből vagy más szabad forrásból másoltad (lásd a(z) $1 lapot a részletekért). '''NE KÜLDJ BE JOGVÉDETT MUNKÁT ENGEDÉLY NÉLKÜL!'''", -'longpagewarning' => "'''FIGYELEM: Ez a lap $1 kilobájt hosszú; -néhány böngészőnek problémát okoz a 32 kB-os vagy nagyobb lapok szerkesztése. -Fontold meg a lap kisebb szakaszokra bontását.'''", 'longpageerror' => "'''HIBA: Az általad beküldött szöveg $1 kilobájt hosszú, ami több az engedélyezett $2 kilobájtnál. A szerkesztést nem lehet elmenteni.'''", 'readonlywarning' => "'''FIGYELMEZTETÉS: A wiki adatbázisát karbantartás miatt zárolták, ezért most nem fogod tudni elmenteni a szerkesztéseidet. @@ -1128,6 +1131,8 @@ $1", 'logdelete-failure' => "'''Nem sikerült módosítani a naplóbejegyzés láthatóságát:''' $1", 'revdel-restore' => 'Láthatóság megváltoztatása', +'revdel-restore-deleted' => 'törölt lapváltozatok', +'revdel-restore-visible' => 'látható lapváltozatok', 'pagehist' => 'Laptörténet', 'deletedhist' => 'Törölt változatok', 'revdelete-content' => 'a tartalmát', @@ -1191,11 +1196,13 @@ Győződj meg róla, hogy a laptörténet folytonossága megmarad.', # Diffs 'history-title' => 'A(z) „$1” laptörténete', 'difference' => '(Változatok közti eltérés)', +'difference-multipage' => '(Lapok közti eltérés)', 'lineno' => '$1. sor:', 'compareselectedversions' => 'Kiválasztott változatok összehasonlítása', 'showhideselectedversions' => 'Kiválasztott változatok láthatóságának beállítása', 'editundo' => 'visszavonás', -'diff-multi' => '({{PLURAL:$1|Egy közbeeső változat|$1 közbeeső változat}} nincs mutatva)', +'diff-multi' => '({{PLURAL:$2|egy|$2}} szerkesztő {{PLURAL:$1|egy|$1}} közbeeső változata nincs mutatva)', +'diff-multi-manyusers' => '({{PLURAL:$1|Egy közbeeső változat|$1 közbeeső változat}} nincs mutatva, amit $2 szerkesztő módosított)', # Search results 'searchresults' => 'A keresés eredménye', @@ -1230,6 +1237,7 @@ Győződj meg róla, hogy a laptörténet folytonossága megmarad.', 'searchprofile-everything-tooltip' => 'Minden névtérben keres (a vitalapokat is beleértve)', 'searchprofile-advanced-tooltip' => 'Keresés adott névterekben', 'search-result-size' => '$1 ({{PLURAL:$2|egy|$2}} szó)', +'search-result-category-size' => '$1 oldal, $2 alkategória, $3 fájl', 'search-result-score' => 'Relevancia: $1%', 'search-redirect' => '(átirányítva innen: $1)', 'search-section' => '($1 szakasz)', @@ -1304,6 +1312,7 @@ Győződj meg róla, hogy a laptörténet folytonossága megmarad.', 'contextlines' => 'Találatonként mutatott sorok száma:', 'contextchars' => 'Soronkénti szövegkörnyezet (karakterszám):', 'stub-threshold' => 'A hivatkozások csonkként történő formázásának határa (bájtban):', +'stub-threshold-disabled' => 'Kikapcsolva', 'recentchangesdays' => 'A friss változtatásokban mutatott napok száma:', 'recentchangesdays-max' => '(maximum {{PLURAL:$1|egy|$1}} nap)', 'recentchangescount' => 'Az alapértelmezettként mutatott szerkesztések száma:', @@ -1337,6 +1346,7 @@ Itt van egy véletlenszerűen generált érték, amit használhatsz: $1', 'prefs-files' => 'Fájlok', 'prefs-custom-css' => 'saját CSS', 'prefs-custom-js' => 'saját JS', +'prefs-common-css-js' => 'Közös CSS/JS az összes felület számára:', 'prefs-reset-intro' => 'Ezen a lapon állíthatod vissza a beállításaidat az oldal alapértelmezett értékeire. A műveletet nem lehet visszavonni.', 'prefs-emailconfirm-label' => 'E-mail cím megerősítése:', @@ -1374,9 +1384,15 @@ Ezen kívül más szerkesztők is kapcsolatba lépjenek veled a szerkesztői vag 'prefs-advancedrendering' => 'Haladó beállítások', 'prefs-advancedsearchoptions' => 'Haladó beállítások', 'prefs-advancedwatchlist' => 'Haladó beállítások', -'prefs-display' => 'Megjelenítési beállítások', +'prefs-displayrc' => 'Megjelenítési beállítások', +'prefs-displaysearchoptions' => 'Megjelenítési beállítások', +'prefs-displaywatchlist' => 'Megjelenítési beállítások', 'prefs-diffs' => 'Eltérések (diffek)', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Az e-mail cím érvényesnek tűnik', +'email-address-validity-invalid' => 'Írj be egy érvényes e-mail címet', + # User rights 'userrights' => 'Szerkesztői jogok beállítása', 'userrights-lookup-user' => 'Szerkesztőcsoportok beállítása', @@ -1459,6 +1475,7 @@ Ezen kívül más szerkesztők is kapcsolatba lépjenek veled a szerkesztői vag 'right-hideuser' => 'felhasználói név blokkolása és elrejtése a külvilág elől', 'right-ipblock-exempt' => 'IP-, auto- és tartományblokkok megkerülése', 'right-proxyunbannable' => 'proxyk automatikus blokkjainak megkerülése', +'right-unblockself' => 'saját felhasználói fiók blokkjának feloldása', 'right-protect' => 'védelmi szintek megváltoztatása és védett lapok szerkesztése', 'right-editprotected' => 'kaszkád védelem nélküli védett lapok szerkesztése', 'right-editinterface' => 'felhasználói felület szerkesztése', @@ -1481,7 +1498,6 @@ Ezen kívül más szerkesztők is kapcsolatba lépjenek veled a szerkesztői vag 'right-siteadmin' => 'adatbázis lezárása, felnyitása', 'right-reset-passwords' => 'Más felhasználók jelszavának visszaállítása', 'right-override-export-depth' => 'Lapok exportálása a hivatkozott lapokkal együtt, legfeljebb 5-ös mélységig', -'right-versiondetail' => 'kibővített szoftververzió-információk tekintése', 'right-sendemail' => 'e-mail küldése más felhasználóknak', # User rights log @@ -1532,14 +1548,9 @@ Ezen kívül más szerkesztők is kapcsolatba lépjenek veled a szerkesztői vag 'recentchanges-legend' => 'A friss változások beállításai', 'recentchangestext' => 'Ezen a lapon a wikiben történt legutóbbi változásokat lehet nyomonkövetni.', 'recentchanges-feed-description' => 'Kövesd a wiki friss változtatásait ezzel a hírcsatornával.', -'recentchanges-label-legend' => 'Jelmagyarázat: $1.', -'recentchanges-legend-newpage' => '$1 – új lap', 'recentchanges-label-newpage' => 'Ezzel a szerkesztéssel egy új lap jött létre', -'recentchanges-legend-minor' => '$1 – apró szerkesztés', 'recentchanges-label-minor' => 'Ez egy apró szerkesztés', -'recentchanges-legend-bot' => '$1 – botszerkesztés', 'recentchanges-label-bot' => 'Ezt a szerkesztést egy bot hajtotta végre', -'recentchanges-legend-unpatrolled' => '$1 – nem ellenőrzött szerkesztés', 'recentchanges-label-unpatrolled' => 'Ezt a szerkesztést még nem ellenőrizték', 'rcnote' => "Alább az utolsó '''{{PLURAL:$2|egy|$2}}''' nap utolsó '''{{PLURAL:$1|egy|$1}}''' változtatása látható. A lap generálásának időpontja $4, $5.", 'rcnotefrom' => 'Alább a $2 óta történt változások láthatóak ($1 db).', @@ -1586,6 +1597,9 @@ A [[Special:Watchlist|figyelőlistádon]] szereplő lapok '''félkövérrel''' v 'upload_directory_missing' => 'A feltöltési könyvtár ($1) nem létezik vagy nem tudja létrehozni a kiszolgáló.', 'upload_directory_read_only' => 'A kiszolgálónak nincs írási jogosultsága a feltöltési könyvtárban ($1).', 'uploaderror' => 'Feltöltési hiba', +'upload-recreate-warning' => "'''Figyelmeztetés: az ilyen nevű fájlt törölték vagy átnevezték.''' + +Az oldalhoz tartozó törlési és átnevezési naplóbejegyzések:", 'uploadtext' => "Az alábbi űrlap használatával tölthetsz fel fájlokat. A korábban feltöltött képek megtekintéséhez vagy a köztük való kereséshez menj a [[Special:FileList|feltöltött fájlok listájához]], a feltöltések, újrafeltöltések a [[Special:Log/upload|feltöltési naplóban]], a törlések a [[Special:Log/delete|törlési naplóban]] vannak jegyezve. @@ -1619,6 +1633,17 @@ Az ajánlott {{PLURAL:$3|típus|típusok}}: $2.", 'filetype-banned-type' => "A(z) '''„.$1”''' nem megengedett fájltípus. Az engedélyezett {{PLURAL:$3|típus|típusok}}: $2.", 'filetype-missing' => 'A fájlnak nincs kiterjesztése (pl. „.jpg”).', +'empty-file' => 'Az elküldött fájl üres volt.', +'file-too-large' => 'Az elküldött fájl túl nagy volt.', +'filename-tooshort' => 'A fájlnév túl rövid.', +'filetype-banned' => 'Az ilyen típusú fájlok tiltva vannak.', +'verification-error' => 'Ez a fájl nem felelt meg az ellenőrzésen (hibás, rossz kiterjesztés, stb.).', +'hookaborted' => 'A módosítást, amit próbáltál elvégezni megszakította egy kiterjesztés-hook.', +'illegal-filename' => 'A fájlnév nem engedélyezett.', +'overwrite' => 'Nem engedélyezett felülírni egy létező fájlt.', +'unknown-error' => 'Ismeretlen hiba történt.', +'tmp-create-error' => 'Nem sikerült létrehozni az ideiglenes fájlt.', +'tmp-write-error' => 'Hiba az ideiglenes fájl írásakor.', 'large-file' => 'Javasoljuk, hogy ne tölts fel olyan fájlokat, melyek nagyobbak, mint $1; ez a fájl $2.', 'largefileserver' => 'A fájl mérete meghaladja a kiszolgálón beállított maximális értéket.', @@ -1646,13 +1671,14 @@ Ha még mindig fel szeretnéd tölteni a fájlt, menj vissza, és adj meg egy ú 'fileexists-shared-forbidden' => 'Egy ugyanilyen nevű fájl már létezik a közös fájlmegosztóban; kérlek menj vissza és válassz egy másik nevet a fájlnak, ha még mindig fel akarod tölteni! [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Ez a következő {{PLURAL:$1|fájl|fájlok}} duplikátuma:', 'file-deleted-duplicate' => 'Egy ehhez hasonló fájlt ([[:$1]]) korábban már töröltek. Ellenőrizd a fájl törlési naplóját, mielőtt újra feltöltenéd.', -'successfulupload' => 'A feltöltés sikerült', 'uploadwarning' => 'Feltöltési figyelmeztetés', 'uploadwarning-text' => 'Kérlek módosítsd a fájl leírását alább, majd próbáld újra.', 'savefile' => 'Fájl mentése', 'uploadedimage' => '„[[$1]]” felküldve', 'overwroteimage' => 'feltöltötte a(z) „[[$1]]” fájl új változatát', 'uploaddisabled' => 'Feltöltések kikapcsolva', +'copyuploaddisabled' => 'A feltöltés URL alapján le van tiltva.', +'uploadfromurl-queued' => 'A feltöltésed a várakozási sorba került.', 'uploaddisabledtext' => 'A fájlfeltöltés nem engedélyezett.', 'php-uploaddisabledtext' => 'A PHP-s fájlfeltöltés le van tiltva. Ellenőrizd a file_uploads beállítást.', 'uploadscripted' => 'Ez a fájl olyan HTML- vagy parancsfájlkódot tartalmaz, melyet tévedésből egy webböngésző esetleg értelmezni próbálhatna.', @@ -1684,6 +1710,14 @@ JD # Jenoptik MGP # Pentax PICT # ált. # ', +'upload-success-subj' => 'A feltöltés sikerült', +'upload-success-msg' => 'A feltöltés (innen $2) sikeres volt. A feltöltésed itt érhető el: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Feltöltési hiba', +'upload-failure-msg' => 'Probléma történt a feltöltéseddel (innen: $2): + +$1', +'upload-warning-subj' => 'Feltöltési figyelmeztetés', +'upload-warning-msg' => 'Hiba történt a feltöltéseddel innen: [$2]. Visszatérhetsz a [[Special:Upload/stash/$1|feltöltéshez]], hogy orvosold a hibát.', 'upload-proto-error' => 'Hibás protokoll', 'upload-proto-error-text' => 'A távoli feltöltéshez http:// vagy ftp:// kezdetű URL-ekre van szükség.', @@ -1743,6 +1777,7 @@ Az oszlopok címeire kattintva változtathatod meg a rendezést.', 'listfiles_search_for' => 'Keresés fájl nevére:', 'imgfile' => 'fájl', 'listfiles' => 'Fájllista', +'listfiles_thumb' => 'Bélyegkép', 'listfiles_date' => 'Dátum', 'listfiles_name' => 'Név', 'listfiles_user' => 'feltöltő', @@ -1856,8 +1891,8 @@ Ellenőrizd a meglévő hivatkozásokat, mielőtt törölnéd őket.', 'statistics-edits' => 'Szerkesztések száma a(z) {{SITENAME}} indulása óta', 'statistics-edits-average' => 'Szerkesztések átlagos száma laponként', 'statistics-views-total' => 'Összes megtekintés', +'statistics-views-total-desc' => 'A nem létező és speciális lapok megtekintési adatai nincsenek beleszámolva.', 'statistics-views-peredit' => 'Megtekintések szerkesztésenként', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue A szerver által végrehajtandó feladatok] száma', 'statistics-users' => 'Regisztrált [[Speciális:Szerkesztők listája|szerkesztők]]', 'statistics-users-active' => 'Aktív szerkesztők', 'statistics-users-active-desc' => 'Szerkesztők, akik csináltak valamit az elmúlt {{PLURAL:$1|egy|$1}} napban', @@ -1872,7 +1907,7 @@ Egy oldal egyértelműsítő lapnak számít, ha tartalmazza a [[MediaWiki:Disam 'doubleredirects' => 'Dupla átirányítások', 'doubleredirectstext' => 'Ez a lap azokat a lapokat listázza, melyek átirányító lapokra irányítanak át. Minden sor tartalmaz egy hivatkozást az első, valamint a második átirányításra, valamint a második átirányítás céljára, ami általában a valódi céllap, erre kellene az első átirányításnak mutatnia. -Az áthúzott sorok a lista elkészülése óta javítva lettek.', +Az áthúzott sorok a lista elkészülése óta javítva lettek.', 'double-redirect-fixed-move' => '[[$1]] átnevezve, a továbbiakban átirányításként működik a(z) [[$2]] lapra', 'double-redirect-fixer' => 'Átirányításjavító', @@ -1895,6 +1930,8 @@ Az áthúzott sorok a lista elkészülése óta javítva lettek.', 'nmembers' => '{{PLURAL:$1|egy|$1}} elem', 'nrevisions' => '{{PLURAL:$1|egy|$1}} változat', 'nviews' => '{{PLURAL:$1|egy|$1}} megtekintés', +'nimagelinks' => '{{PLURAL:$1|Egy|$1}} lapon van használva', +'ntransclusions' => '{{PLURAL:$1|egy|$1}} lapon van használva', 'specialpage-empty' => 'Ez az oldal üres.', 'lonelypages' => 'Árva lapok', 'lonelypagestext' => 'A következő lapok nincsenek linkelve vagy beillesztve más lapokra a(z) {{SITENAME}} wikin.', @@ -2052,34 +2089,40 @@ Az egyes csoportokról további információt [[{{MediaWiki:Listgrouprights-help 'listgrouprights-removegroup-self-all' => 'az összes csoporból eltávolíthatja a saját fiókját', # E-mail user -'mailnologin' => 'Nincs feladó', -'mailnologintext' => 'Ahhoz hogy másoknak e-mailt küldhess, [[Special:UserLogin|be kell jelentkezned]] és meg kell adnod egy érvényes e-mail címet a [[Special:Preferences|beállításaidban]].', -'emailuser' => 'E-mail küldése ezen szerkesztőnek', -'emailpage' => 'E-mail küldése', -'emailpagetext' => 'A szerkesztő e-mail-címére ezen űrlap kitöltésével üzenetet tudsz küldeni. +'mailnologin' => 'Nincs feladó', +'mailnologintext' => 'Ahhoz hogy másoknak e-mailt küldhess, [[Special:UserLogin|be kell jelentkezned]] és meg kell adnod egy érvényes e-mail címet a [[Special:Preferences|beállításaidban]].', +'emailuser' => 'E-mail küldése ezen szerkesztőnek', +'emailpage' => 'E-mail küldése', +'emailpagetext' => 'A szerkesztő e-mail-címére ezen űrlap kitöltésével üzenetet tudsz küldeni. Feladóként a [[Special:Preferences|beállításaid]]nál megadott e-mail-címed fog szerepelni, így a címzett közvetlenül neked tud majd válaszolni.', -'usermailererror' => 'A levélküldő objektum hibával tért vissza:', -'defemailsubject' => '{{SITENAME}} e-mail', -'noemailtitle' => 'Nincs e-mail cím', -'noemailtext' => 'Ez a szerkesztő nem adott meg érvényes e-mail címet.', -'nowikiemailtitle' => 'Nem küldhető e-mail üzenet', -'nowikiemailtext' => 'Ez a szerkesztő nem kíván másoktól e-mail üzeneteket fogadni.', -'email-legend' => 'E-mail küldése egy másik {{SITENAME}}-szerkesztőnek', -'emailfrom' => 'Feladó:', -'emailto' => 'Címzett:', -'emailsubject' => 'Téma:', -'emailmessage' => 'Üzenet:', -'emailsend' => 'Küldés', -'emailccme' => 'Az üzenet másolatát küldje el nekem is e-mailben.', -'emailccsubject' => '$1 szerkesztőnek küldött $2 tárgyú üzenet másolata', -'emailsent' => 'E-mail elküldve', -'emailsenttext' => 'Az e-mail üzenetedet elküldtem.', -'emailuserfooter' => 'Ezt az e-mailt $1 küldte $2 számára, az „E-mail küldése ezen szerkesztőnek” funkció használatával a(z) {{SITENAME}} wikin.', +'usermailererror' => 'A levélküldő objektum hibával tért vissza:', +'defemailsubject' => '{{SITENAME}} e-mail', +'usermaildisabled' => 'Email fogadás letiltva', +'usermaildisabledtext' => 'Nem küldhetsz emailt más felhasználóknak ezen a wikin', +'noemailtitle' => 'Nincs e-mail cím', +'noemailtext' => 'Ez a szerkesztő nem adott meg érvényes e-mail címet.', +'nowikiemailtitle' => 'Nem küldhető e-mail üzenet', +'nowikiemailtext' => 'Ez a szerkesztő nem kíván másoktól e-mail üzeneteket fogadni.', +'email-legend' => 'E-mail küldése egy másik {{SITENAME}}-szerkesztőnek', +'emailfrom' => 'Feladó:', +'emailto' => 'Címzett:', +'emailsubject' => 'Téma:', +'emailmessage' => 'Üzenet:', +'emailsend' => 'Küldés', +'emailccme' => 'Az üzenet másolatát küldje el nekem is e-mailben.', +'emailccsubject' => '$1 szerkesztőnek küldött $2 tárgyú üzenet másolata', +'emailsent' => 'E-mail elküldve', +'emailsenttext' => 'Az e-mail üzenetedet elküldtem.', +'emailuserfooter' => 'Ezt az e-mailt $1 küldte $2 számára, az „E-mail küldése ezen szerkesztőnek” funkció használatával a(z) {{SITENAME}} wikin.', + +# User Messenger +'usermessage-summary' => 'Rendszerüzenet megadása.', +'usermessage-editor' => 'Rendszerüzenetek', # Watchlist 'watchlist' => 'Figyelőlistám', 'mywatchlist' => 'Figyelőlistám', -'watchlistfor' => "('''$1''' részére)", +'watchlistfor2' => '$1 részére $2', 'nowatchlist' => 'Nincs lap a figyelőlistádon.', 'watchlistanontext' => 'A figyelőlistád megtekintéséhez és szerkesztéséhez $1.', 'watchnologin' => 'Nem vagy bejelentkezve', @@ -2195,7 +2238,10 @@ Az utolsó szerkesztést [[User:$3|$3]] ([[User talk:$3|vita]]{{int:pipe-separat 'revertpage' => 'Visszaállítottam a lap korábbi változatát: [[Special:Contributions/$2|$2]] ([[User talk:$2|vita]]) szerkesztéséről [[User:$1|$1]] szerkesztésére', 'revertpage-nouser' => 'Visszaállítottam a lap korábbi változatát (szerkesztőnév eltávolítva) szerkesztéséről [[User:$1|$1]] szerkesztésére', 'rollback-success' => '$1 szerkesztéseit visszaállítottam $2 utolsó változatára.', -'sessionfailure' => 'Úgy látszik, hogy probléma van a bejelentkezési munkameneteddel; + +# Edit tokens +'sessionfailure-title' => 'Munkamenethiba', +'sessionfailure' => 'Úgy látszik, hogy probléma van a bejelentkezési munkameneteddel; ez a művelet a munkamenet eltérítése miatti óvatosságból megszakadt. Kérjük, hogy nyomd meg a "vissza" gombot, és töltsd le újra az oldalt, ahonnan jöttél, majd próbáld újra.', @@ -2331,18 +2377,22 @@ $1', 'month' => 'E hónap végéig:', 'year' => 'Eddig az évig:', -'sp-contributions-newbies' => 'Csak a nemrég regisztrált szerkesztők közreműködéseinek mutatása', -'sp-contributions-newbies-sub' => 'Új szerkesztők lapjai', -'sp-contributions-newbies-title' => 'Új szerkesztők közreműködései', -'sp-contributions-blocklog' => 'Blokkolási napló', -'sp-contributions-deleted' => 'törölt szerkesztések', -'sp-contributions-logs' => 'naplók', -'sp-contributions-talk' => 'vitalap', -'sp-contributions-userrights' => 'szerkesztői jogok beállítása', -'sp-contributions-blocked-notice' => 'Ez a szerkesztő blokkolva van. A blokknapló legutóbbi ide vonatkozó bejegyzése a következő:', -'sp-contributions-search' => 'Közreműködések szűrése', -'sp-contributions-username' => 'IP-cím vagy felhasználónév:', -'sp-contributions-submit' => 'Keresés', +'sp-contributions-newbies' => 'Csak a nemrég regisztrált szerkesztők közreműködéseinek mutatása', +'sp-contributions-newbies-sub' => 'Új szerkesztők lapjai', +'sp-contributions-newbies-title' => 'Új szerkesztők közreműködései', +'sp-contributions-blocklog' => 'Blokkolási napló', +'sp-contributions-deleted' => 'törölt szerkesztések', +'sp-contributions-uploads' => 'feltöltések', +'sp-contributions-logs' => 'naplók', +'sp-contributions-talk' => 'vitalap', +'sp-contributions-userrights' => 'szerkesztői jogok beállítása', +'sp-contributions-blocked-notice' => 'Ez a szerkesztő blokkolva van. A blokknapló legutóbbi ide vonatkozó bejegyzése a következő:', +'sp-contributions-blocked-notice-anon' => 'Ez az IP-cím blokkolva van. +A blokknapló legutóbbi ide vonatkozó bejegyzése a következő:', +'sp-contributions-search' => 'Közreműködések szűrése', +'sp-contributions-username' => 'IP-cím vagy felhasználónév:', +'sp-contributions-toponly' => 'Csak a jelenleg utolsónak számító változtatásokat mutassa', +'sp-contributions-submit' => 'Keresés', # What links here 'whatlinkshere' => 'Mi hivatkozik erre', @@ -2403,7 +2453,6 @@ Add meg a blokkolás okát is (például idézd a blokkolandó személy által v 'ipb-edit-dropdown' => 'Blokkolási okok szerkesztése', 'ipb-unblock-addr' => '$1 blokkjának feloldása', 'ipb-unblock' => 'Felhasználónév vagy IP-cím blokkolásának feloldása', -'ipb-blocklist-addr' => '$1 aktív blokkjai', 'ipb-blocklist' => 'Létező blokkok megtekintése', 'ipb-blocklist-contribs' => '$1 közreműködései', 'unblockip' => 'Blokk feloldása', @@ -2470,6 +2519,8 @@ $1 már blokkolva van. Meg szeretnéd változtatni a beállításokat?', 'sorbs_create_account_reason' => 'Az IP-címed nyitott proxyként szerepel e webhely által használt DNSBL listán. Nem hozhatsz létre fiókot.', 'cant-block-while-blocked' => 'Nem blokkolhatsz más szerkesztőket, miközben te magad blokkolva vagy.', 'cant-see-hidden-user' => 'A felhasználó, akit blokkolni próbáltál már blokkolva és rejtve van. Mivel nincs felhasználó elrejtése jogosultságod, nem láthatod és nem szerkesztheted a felhasználó blokkját.', +'ipbblocked' => 'Nem blokkolhatsz és nem oldhatod fel más felhasználók blokkjait, mert te magad is blokkolva vagy', +'ipbnounblockself' => 'Nincs jogosultságod feloldani a saját felhasználói fiókod blokkját', # Developer tools 'lockdb' => 'Adatbázis zárolása', @@ -2511,6 +2562,16 @@ Ez azt jelenti, hogy vissza tudsz nevezni egy tévedésből átnevezett lapot, '''FIGYELEM!''' Népszerű oldalak esetén ez drasztikus és nem várt változtatás lehet; győződj meg a folytatás előtt arról, hogy tisztában vagy-e a következményekkel.", +'movepagetext-noredirectfixer' => "Az alábbi űrlap használatával nevezhetsz át egy lapot, és helyezheted át teljes laptörténetét az új nevére. +A régi cím az új címre való átirányítás lesz. +Ellenőrizd a [[Special:DoubleRedirects|dupla]] és a [[Special:BrokenRedirects|hibás átirányításoknál]], hogy a linkek továbbra is oda mutatnak, ahová mutatniuk kell. + +A lap '''nem''' nevezhető át, ha már van egy ugyanilyen című lap, hacsak nem üres, vagy átirányítás, aminek nincs laptörténete. +Ez azt jelenti, hogy vissza tudsz nevezni egy tévedésből átnevezett lapot, de nem tudsz egy már létező lapot véletlenül felülírni. + +'''Figyelem!''' +Népszerű oldalak esetén ez drasztikus és nem várt változtatás lehet; +győződj meg a folytatás előtt arról, hogy tisztában vagy-e a következményekkel.", 'movepagetalktext' => "A laphoz tartozó vitalap automatikusan átneveződik, '''kivéve, ha:''' *már létezik egy nem üres vitalap az új helyen, *nem jelölöd be a lenti pipát. @@ -2566,6 +2627,7 @@ Az átnevezés céljaként megadott „[[:$1]]” szócikk már létezik. Ha az 'immobile-source-page' => 'Ez a lap nem nevezhető át.', 'immobile-target-page' => 'A lap nem helyezhető át a megadott címre.', 'imagenocrossnamespace' => 'A fájlok nem helyezhetőek át más névtérbe', +'nonfile-cannot-move-to-file' => 'Nem fájlok nem nevezhetők át fájlnévtérbe', 'imagetypemismatch' => 'Az új kiterjesztés nem egyezik meg a fájl típusával', 'imageinvalidfilename' => 'A célnév érvénytelen', 'fix-double-redirects' => 'Az eredeti címre mutató hivatkozások frissítése', @@ -2650,6 +2712,7 @@ Mentsd el a számítógépedre, majd töltsd fel ide.', 'importstart' => 'Lapok importálása...', 'import-revision-count' => '$1 {{PLURAL:$1|revision|változatok}}', 'importnopages' => 'Nincs importálandó lap.', +'imported-log-entries' => 'Importálva $1 logbejegyzés.', 'importfailed' => 'Az importálás nem sikerült: $1', 'importunknownsource' => 'Ismeretlen import forrástípus', 'importcantopen' => 'Nem nyitható meg az importfájl', @@ -2742,6 +2805,8 @@ Mentsd el a számítógépedre, majd töltsd fel ide.', 'tooltip-upload' => 'Feltöltés indítása', 'tooltip-rollback' => '„Visszaállítás”: egy kattintással visszavonja az utolsó felhasználó egy vagy több szerkesztését.', 'tooltip-undo' => '„Visszavonás”: visszavonja ezt a szerkesztést, valamint megnyitja a szerkesztőt előnézet módban. A szerkesztési összefoglalóban meg lehet adni a visszavonás okát.', +'tooltip-preferences-save' => 'Beállítások mentése', +'tooltip-summary' => 'Adj meg egy rövid összefoglalót', # Stylesheets 'common.css' => '/* Közös CSS az összes felületnek */', @@ -2862,14 +2927,17 @@ A futtatása során kárt tehet a számítógépedben.", 'imagemaxsize' => "A képek mérete, legfeljebb:
    ''(a leírólapokon)''", 'thumbsize' => 'Bélyegkép mérete:', 'widthheightpage' => '$1×$2, {{PLURAL:$3|egy|$3}} oldal', -'file-info' => '(fájlméret: $1, MIME-típus: $2)', -'file-info-size' => '($1 × $2 képpont, fájlméret: $3, MIME-típus: $4)', +'file-info' => 'fájlméret: $1, MIME-típus: $2', +'file-info-size' => '$1 × $2 képpont, fájlméret: $3, MIME-típus: $4', 'file-nohires' => 'Nem érhető el nagyobb felbontású változat.', -'svg-long-desc' => '(SVG fájl, névlegesen $1 × $2 képpont, fájlméret: $3)', +'svg-long-desc' => 'SVG fájl, névlegesen $1 × $2 képpont, fájlméret: $3', 'show-big-image' => 'A kép nagyfelbontású változata', 'show-big-image-thumb' => 'Az előnézet mérete: $1 × $2 képpont', 'file-info-gif-looped' => 'ismétlődik', 'file-info-gif-frames' => '{{PLURAL:$1|egy|$1}} képkocka', +'file-info-png-looped' => 'ismétlődik', +'file-info-png-repeat' => 'lejátszva {{PLURAL:$1|egy|$1}} alkalommal', +'file-info-png-frames' => '{{PLURAL:$1|egy|$1}} képkocka', # Special:NewFiles 'newimages' => 'Új fájlok galériája', @@ -3024,6 +3092,7 @@ tartalmazni fogja. A többi alapértelmezésként rejtett marad. 'exif-gpsareainformation' => 'GPS terület neve', 'exif-gpsdatestamp' => 'GPS dátum', 'exif-gpsdifferential' => 'GPS különbözeti korrekció', +'exif-objectname' => 'Rövid cím', # EXIF attributes 'exif-compression-1' => 'Nem tömörített', @@ -3105,6 +3174,8 @@ tartalmazni fogja. A többi alapértelmezésként rejtett marad. 'exif-sensingmethod-7' => 'Háromvonalas érzékelő', 'exif-sensingmethod-8' => 'Színsorrendi vonalas érzékelő', +'exif-filesource-3' => 'Digitális fényképezőgép', + 'exif-scenetype-1' => 'Egy közvetlenül lefotózott kép', 'exif-customrendered-0' => 'Normál feldolgozás', @@ -3181,26 +3252,26 @@ tartalmazni fogja. A többi alapértelmezésként rejtett marad. 'limitall' => 'mind', # E-mail address confirmation -'confirmemail' => 'E-mail cím megerősítése', -'confirmemail_noemail' => 'Nincs érvényes e-mail cím megadva a [[Special:Preferences|beállításaidnál]].', -'confirmemail_text' => 'Meg kell erősítened az e-mail címed, mielőtt használhatnád a(z) {{SITENAME}} levelezési rendszerét. Nyomd meg az alsó gombot, hogy kaphass egy e-mailt, melyben megtalálod a megerősítéshez szükséges kódot. Töltsd be a kódot a böngésződbe, hogy aktiválhasd az e-mail címedet.', -'confirmemail_pending' => 'A megerősítő kódot már elküldtük neked e-mailben, kérjük, várj türelemmel, amíg a szükséges adatok megérkeznek az e-mailcímedre, és csak akkor kérj új kódot, ha valami technikai malőr folytán értelmes időn belül nem kapod meg a levelet.', -'confirmemail_send' => 'Küldd el a kódot', -'confirmemail_sent' => 'Kaptál egy e-mailt, melyben megtalálod a megerősítéshez szükséges kódot.', -'confirmemail_oncreate' => 'A megerősítő kódot elküldtük az e-mail címedre. +'confirmemail' => 'E-mail cím megerősítése', +'confirmemail_noemail' => 'Nincs érvényes e-mail cím megadva a [[Special:Preferences|beállításaidnál]].', +'confirmemail_text' => 'Meg kell erősítened az e-mail címed, mielőtt használhatnád a(z) {{SITENAME}} levelezési rendszerét. Nyomd meg az alsó gombot, hogy kaphass egy e-mailt, melyben megtalálod a megerősítéshez szükséges kódot. Töltsd be a kódot a böngésződbe, hogy aktiválhasd az e-mail címedet.', +'confirmemail_pending' => 'A megerősítő kódot már elküldtük neked e-mailben, kérjük, várj türelemmel, amíg a szükséges adatok megérkeznek az e-mailcímedre, és csak akkor kérj új kódot, ha valami technikai malőr folytán értelmes időn belül nem kapod meg a levelet.', +'confirmemail_send' => 'Küldd el a kódot', +'confirmemail_sent' => 'Kaptál egy e-mailt, melyben megtalálod a megerősítéshez szükséges kódot.', +'confirmemail_oncreate' => 'A megerősítő kódot elküldtük az e-mail címedre. Ez a kód nem szükséges a belépéshez, de meg kell adnod, mielőtt a wiki e-mail alapú szolgáltatásait igénybe veheted.', -'confirmemail_sendfailed' => 'Nem sikerült elküldeni a megerősítő e-mailt. +'confirmemail_sendfailed' => 'Nem sikerült elküldeni a megerősítő e-mailt. Ellenőrizd, hogy nem írtál-e érvénytelen karaktert a címbe. A levelező üzenete: $1', -'confirmemail_invalid' => 'Nem megfelelő kód. A kódnak lehet, hogy lejárt a felhasználhatósági ideje.', -'confirmemail_needlogin' => 'Meg kell $1 erősíteni az e-mail címedet.', -'confirmemail_success' => 'Az e-mail címed megerősítve. Most már beléphetsz a wikibe.', -'confirmemail_loggedin' => 'E-mail címed megerősítve.', -'confirmemail_error' => 'Hiba az e-mail címed megerősítése során.', -'confirmemail_subject' => '{{SITENAME}} e-mail cím megerősítés', -'confirmemail_body' => 'Valaki, valószínűleg te, ezzel az e-mail címmel regisztrált +'confirmemail_invalid' => 'Nem megfelelő kód. A kódnak lehet, hogy lejárt a felhasználhatósági ideje.', +'confirmemail_needlogin' => 'Meg kell $1 erősíteni az e-mail címedet.', +'confirmemail_success' => 'Az e-mail címed megerősítve. Most már beléphetsz a wikibe.', +'confirmemail_loggedin' => 'E-mail címed megerősítve.', +'confirmemail_error' => 'Hiba az e-mail címed megerősítése során.', +'confirmemail_subject' => '{{SITENAME}} e-mail cím megerősítés', +'confirmemail_body' => 'Valaki, valószínűleg te, ezzel az e-mail címmel regisztrált "$2" néven a(z) {{SITENAME}} wikin, a(z) $1 IP-címről. Annak érdekében, hogy megerősítsd, ez az azonosító valóban hozzád tartozik, @@ -3214,8 +3285,36 @@ e-mail cím megerősíthetőségének visszavonásához: $5 A megerősítésre szánt kód felhasználhatósági idejének lejárata: $4.', -'confirmemail_invalidated' => 'E-mail-cím megerősíthetősége visszavonva', -'invalidateemail' => 'E-mail-cím megerősíthetőségének visszavonása', +'confirmemail_body_changed' => 'Valaki (vélhetően te, a(z) $1 IP-címről) megváltoztatta a(z) „$2” felhasználói fiók email címét a {{SITENAME}} wikin erre a címre. + +Annak érdekében, hogy megerősítsd, ez az azonosító valóban hozzád tartozik, +és hogy újra aktiváld az e-mail címedet, nyisd meg az alábbi linket a böngésződben: + +$3 + +Ha ez *nem* te vagy, kattints erre a linkre az +e-mail cím megerősíthetőségének visszavonásához: + +$5 + +A megerősítésre szánt kód felhasználhatósági idejének lejárata: $4.', +'confirmemail_body_set' => 'Valaki, valószínűleg te, ezt az email címet adta meg +„$2” nevű {{SITENAME}}-fiókjához a következő IP-címről: $1. + +Ha meg szeretnéd erősíteni, hogy a fiók valóban hozzád tartozik, +így aktiválva a(z) {{SITENAME}} e-mailes funkcióit, nyisd meg az +alábbi linket a böngésződben: + +$3 + +Ha a fiók *nem* hozzád tartozik, kövesd az alábbi linket a +megerősítés visszavonásához: + +$5 + +Ez a megerősítő e-mail $4-ig érvényes.', +'confirmemail_invalidated' => 'E-mail-cím megerősíthetősége visszavonva', +'invalidateemail' => 'E-mail-cím megerősíthetőségének visszavonása', # Scary transclusion 'scarytranscludedisabled' => '[Wikiközi beillesztés le van tiltva]', @@ -3258,6 +3357,7 @@ Kérlek erősítsd meg, hogy tényleg újra akarod-e írni a lapot.", 'table_pager_first' => 'Első oldal', 'table_pager_last' => 'Utolsó oldal', 'table_pager_limit' => 'Laponként $1 tétel megjelenítése', +'table_pager_limit_label' => 'Elemek száma oldalanként:', 'table_pager_limit_submit' => 'Ugrás', 'table_pager_empty' => 'Nincs találat', @@ -3313,6 +3413,7 @@ minden egyes sor egy figyelt lap címe. Ha kész vagy, kattints a lista alatt ta 'version-specialpages' => 'Speciális lapok', 'version-parserhooks' => 'Értelmező hookok', 'version-variables' => 'Változók', +'version-skins' => 'Felületek', 'version-other' => 'Egyéb', 'version-mediahandlers' => 'Médiafájl-kezelők', 'version-hooks' => 'Hookok', @@ -3324,6 +3425,13 @@ minden egyes sor egy figyelt lap címe. Ha kész vagy, kattints a lista alatt ta 'version-hook-subscribedby' => 'Használja', 'version-version' => '(verzió: $1)', 'version-license' => 'Licenc', +'version-poweredby-credits' => "Ez a wiki '''[http://www.mediawiki.org/ MediaWiki]''' szoftverrel működik, copyright © 2001-$1 $2.", +'version-poweredby-others' => 'mások', +'version-license-info' => 'A MediaWiki szabad szoftver, terjeszthető és / vagy módosítható a GNU General Public License alatt, amit a Free Software Foundation közzétett; vagy a 2-es verziójú licenc, vagy (az Ön választása alapján) bármely későbbi verzió szerint. + +A MediaWikit abban a reményben terjesztjük, hogy hasznos lesz, de GARANCIA NÉLKÜL, anélkül, hogy PIACKÉPES vagy HASZNÁLHATÓ LENNE EGY ADOTT CÉLRA. Lásd a GNU General Public License-t a további részletekért. + +Önnek kapnia kellett [{{SERVER}}{{SCRIPTPATH}}/COPYING egy példányt a GNU General Public License-ből] ezzel a programmal együtt, ha nem, írjon a Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA címre vagy [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html olvassa el online].', 'version-software' => 'Telepített szoftverek', 'version-software-product' => 'Termék', 'version-software-version' => 'Verzió', @@ -3393,6 +3501,15 @@ Add meg a fájl nevét „{{ns:file}}:” előtag nélkül.', 'tags-edit' => 'szerkesztés', 'tags-hitcount' => '{{PLURAL:$1|Egy|$1}} változtatás', +# Special:ComparePages +'comparepages' => 'Lapok összehasonlítása', +'compare-selector' => 'Lapváltozatok összehasonlítása', +'compare-page1' => '1. lap', +'compare-page2' => '2. lap', +'compare-rev1' => '1. változat', +'compare-rev2' => '2. változat', +'compare-submit' => 'Összehasonlítás', + # Database error messages 'dberr-header' => 'A wikivel problémák vannak', 'dberr-problems' => 'Sajnáljuk, de az oldallal technikai problémák vannak.', @@ -3409,8 +3526,13 @@ Add meg a fájl nevét „{{ns:file}}:” előtag nélkül.', 'htmlform-float-invalid' => 'A megadott érték nem szám.', 'htmlform-int-toolow' => 'A megadott érték a minimum, $1 alatt van', 'htmlform-int-toohigh' => 'A megadott érték a maximum, $1 felett van', +'htmlform-required' => 'Az érték megadása kötelező', 'htmlform-submit' => 'Elküldés', 'htmlform-reset' => 'Változtatások visszavonása', 'htmlform-selectorother-other' => 'egyéb', +# SQLite database support +'sqlite-has-fts' => '$1 teljes szöveges keresés támogatással', +'sqlite-no-fts' => '$1 teljes szöveges keresés támogatása nélkül', + ); diff --git a/languages/messages/MessagesHy.php b/languages/messages/MessagesHy.php index f7cba157..744cc353 100644 --- a/languages/messages/MessagesHy.php +++ b/languages/messages/MessagesHy.php @@ -285,8 +285,7 @@ $messages = array( 'tog-editsection' => 'Ցույց տալ [խմբագրել] հղումը ամեն բաժնի համար', 'tog-editsectiononrightclick' => 'Խմբագրել բաժինները վերնագրի աջ մատնահարմամբ (JavaScript)', 'tog-showtoc' => 'Ցույց տալ բովանդակությունը (3 կամ ավել վերնագրեր ունեցող էջերի համար)', -'tog-rememberpassword' => 'Հիշել իմ մասնակցի հաշիվը այս համակարգչում', -'tog-editwidth' => 'Խմբագրման դաշտը պատուհանի ամբողջ լայնությամբ', +'tog-rememberpassword' => 'Հիշել իմ մասնակցի հաշիվը այս համակարգչում (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Ավելացնել իմ ստեղծած էջերը հսկացանկին', 'tog-watchdefault' => 'Ավելացնել իմ խմբագրած էջերը հսկացանկին', 'tog-watchmoves' => 'Ավելացնել իմ տեղափոխած էջերը հսկացանկին', @@ -432,31 +431,20 @@ $messages = array( 'faqpage' => 'Project:ՀՏՀ', # Vector skin -'vector-action-addsection' => 'Ավելացնել քննարկում', -'vector-action-delete' => 'Ջնջել', -'vector-action-move' => 'Տեղափոխել', -'vector-action-protect' => 'Պաշտպանել', -'vector-action-undelete' => 'Վերականգնել', -'vector-action-unprotect' => 'Հանել պաշտպանումից', -'vector-namespace-category' => 'Կատեգորիա', -'vector-namespace-help' => 'Օգնության էջ', -'vector-namespace-image' => 'Ֆայլ', -'vector-namespace-main' => 'Էջ', -'vector-namespace-media' => 'Մեդիաայի էջ', -'vector-namespace-mediawiki' => 'Ուղերձ', -'vector-namespace-project' => 'Նախագծի էջ', -'vector-namespace-special' => 'Սպասարկող էջ', -'vector-namespace-talk' => 'Քննարկում', -'vector-namespace-template' => 'Կաղապար', -'vector-namespace-user' => 'Մասնակցի էջ', -'vector-view-create' => 'Ստեղծել', -'vector-view-edit' => 'Խմբագրել', -'vector-view-history' => 'Դիտել պատմությունը', -'vector-view-view' => 'Կարդալ', -'vector-view-viewsource' => 'Դիտել ելատեքստը', -'actions' => 'Գործողություններ', -'namespaces' => 'Անվանատարածքներ', -'variants' => 'Տարբերակներ', +'vector-action-addsection' => 'Ավելացնել քննարկում', +'vector-action-delete' => 'Ջնջել', +'vector-action-move' => 'Տեղափոխել', +'vector-action-protect' => 'Պաշտպանել', +'vector-action-undelete' => 'Վերականգնել', +'vector-action-unprotect' => 'Հանել պաշտպանումից', +'vector-view-create' => 'Ստեղծել', +'vector-view-edit' => 'Խմբագրել', +'vector-view-history' => 'Դիտել պատմությունը', +'vector-view-view' => 'Կարդալ', +'vector-view-viewsource' => 'Դիտել ելատեքստը', +'actions' => 'Գործողություններ', +'namespaces' => 'Անվանատարածքներ', +'variants' => 'Տարբերակներ', 'errorpagetitle' => 'Սխալ', 'returnto' => 'Վերադառնալ $1։', @@ -579,7 +567,7 @@ $1', 'nstab-media' => 'Մեդիա էջ', 'nstab-special' => 'Սպասարկող էջ', 'nstab-project' => 'Նախագծի էջ', -'nstab-image' => 'Ֆայլ', +'nstab-image' => 'Նիշք', 'nstab-mediawiki' => 'Ուղերձ', 'nstab-template' => 'Կաղապար', 'nstab-help' => 'Օգնության էջ', @@ -680,7 +668,7 @@ $2', 'yourname' => 'Մասնակցի անուն.', 'yourpassword' => 'Գաղտնաբառ.', 'yourpasswordagain' => 'Կրկնեք գաղտնաբառը.', -'remembermypassword' => 'Հիշել իմ մուտքագրված տվյալները', +'remembermypassword' => 'Հիշել իմ մուտքագրված տվյալները այս համակարգչում ($1 {{PLURAL:$1|օրից|օրից}} ոչ ավել ժամկետով)', 'yourdomainname' => 'Ձեր դոմենը.', 'externaldberror' => 'Տեղի է ունեցել վավերացման արտաքին տվյալների բազայի սխալ, կամ դուք չունեք բավարար իրավունքներ ձեր արտաքին հաշվի փոփոխման համար։', 'login' => 'Մտնել', @@ -870,7 +858,7 @@ $2', 'userjsyoucanpreview' => "'''Հուշում.''' Էջը հիշելուց առաջ օգտվեք «{{int:showpreview}}» կոճակից՝ ձեր նոր JS-նիշքը ստուգելու համար։", 'usercsspreview' => "'''Նկատի ունեցեք, որ դուք միայն նախադիտում եք ձեր մասնակցի CSS-նիշքը. այն դեռ հիշված չէ՛։'''", 'userjspreview' => "'''Նկատի ունեցեք, որ դուք միայն նախադիտում եք ձեր մասնակցի JavaScript-նիշքը. այն դեռ հիշված չէ՛։'''", -'userinvalidcssjstitle' => "'''Զգուշացում.''' «$1» տեսք չի գտնվել։ Ի նկատի ունեցեք, որ մասնակցային .css և .js էջերը ունեն փոքրատառ անվանումներ, օր.՝ «{{ns:user}}:Ոմն/monobook.css», և ոչ թե «{{ns:user}}:Ոմն/Monobook.css»։", +'userinvalidcssjstitle' => "'''Զգուշացում.''' «$1» տեսք չի գտնվել։ Ի նկատի ունեցեք, որ մասնակցային .css և .js էջերը ունեն փոքրատառ անվանումներ, օր.՝ «{{ns:user}}:Ոմն/vector.css», և ոչ թե «{{ns:user}}:Ոմն/Vector.css»։", 'updated' => '(Թարմացված)', 'note' => "'''Ծանուցում.'''", 'previewnote' => "'''Սա միայն նախադիտումն է. ձեր կատարած փոփոխությունները դեռ չե՛ն հիշվել։'''", @@ -901,7 +889,6 @@ $2', Նյութն այստեղ տեղադրելով՝ դուք նաև հավաստիացնում եք մեզ, որ այն գրված է ձեր կողմից կամ վերցված է ազատ տարածում և բովանդակային փոփոխություններ թույլատրող աղբյուրներից։ '''ԱՌԱՆՑ ԹՈՒՅԼՏՎՈՒԹՅԱՆ ՄԻ՛ ՏԵՂԱԴՐԵՔ ՀԵՂԻՆԱԿԱՅԻՆ ԻՐԱՎՈՒՆՔՆԵՐՈՎ ՊԱՇՏՊԱՆՎԱԾ ՆՅՈՒԹԵՐ։'''", 'copyrightwarning2' => "Խնդրում ենք ի նկատի ունենալ, որ {{SITENAME}} կայքում արված բոլոր ներդրումները կարող են խմբագրվել, վերամշակվել կամ ջնջվել ուրիշ մասնակիցների կողմից։ Եթե դուք չեք ցանկանում, որ ձեր նյութը խմբագրվի, ապա մի՛ տեղադրեք այն այստեղ։
    Դուք նաև հավաստիացնում եք մեզ, որ նյութը գրված է ձեր կողմից կամ վերցված է ազատ տարածում և պարունակության փոփոխություններ թույլատրող աղբյուրներից (մանրամասնությունների համար տես $1)։ '''ՄԻ՛ ՏԵՂԱԴՐԵՔ ՀԵՂԻՆԱԿԱՅԻՆ ԻՐԱՎՈՒՆՔՆԵՐՈՎ ՊԱՇՏՊԱՆՎԱԾ ՆՅՈՒԹԵՐ ԱՌԱՆՑ ԹՈՒՅԼԱՏՐՈՒԹՅԱՆ։'''", -'longpagewarning' => "'''ԶԳՈՒՇԱՑՈՒՄ. Այս էջի երկարությունն է $1 կիլոբայթ։ Որոշ բրաուզերներ կարող են դժվարանալ խմբագրել 32 ԿԲ և ավել երկարություն ունեցող էջերը։ Խնդրում ենք դիտարկել այս էջի տրոհումը փոքր բաժինների։'''", 'longpageerror' => "'''ՍԽԱԼ. Ներկայացված տեքստը ունի $1 կիլոբայթ երկարություն, ինչը գերազանցում է սահմանված $2 ԿԲ առավելագույն չափը։ Էջը չի կարող հիշվել։'''", 'readonlywarning' => "'''ԶԳՈՒՇԱՑՈՒՄ. Տվյալների բազան կողպվել է սպասարկման նպատակով, և դուք չեք կարող հիշել ձեր կատարած փոփոխությունները այս պահին։ Հավանաբար իմաստ ունի պատճենել տեքստը տեքստային նիշքի մեջ և պահել այն՝ հետագայում նախագծում ավելացնելու համար։''' @@ -1056,7 +1043,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''", 'searchprofile-advanced' => 'Ընդլայնված', 'searchprofile-articles-tooltip' => 'Որոնել $1ում', 'searchprofile-project-tooltip' => 'Որոնել $1ում', -'searchprofile-images-tooltip' => 'Ֆայլերի որոնում', +'searchprofile-images-tooltip' => 'Նիշքերի որոնում', 'searchprofile-everything-tooltip' => 'Որոնել բոլոր էջերում (այդ թվում քննարկման)', 'searchprofile-advanced-tooltip' => 'Որոնել նշված անվանատարածքներում', 'search-result-size' => '$1 ({{PLURAL:$2|1 բառ|$2 բառ}})', @@ -1203,7 +1190,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''", 'prefs-advancedrendering' => 'Ընդլայնված ընրանքներ', 'prefs-advancedsearchoptions' => 'Ընդլայնված ընրանքներ', 'prefs-advancedwatchlist' => 'Ընդլայնված ընրանքներ', -'prefs-display' => 'Ցուցադրման ընտրանքներ', +'prefs-displayrc' => 'Ցուցադրման ընտրանքներ', 'prefs-diffs' => 'Տարբերություններ', # User rights @@ -1244,7 +1231,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''", # Rights 'right-edit' => 'էջերի խմբագրում', -'right-upload' => 'ֆայլերի բեռնում', +'right-upload' => 'Նիշքերի բեռնում', 'right-delete' => 'Էջերի ջնջում', # User rights log @@ -1262,14 +1249,9 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''", 'recentchanges-legend' => 'Վերջին փոփոխությունների նախընտրություններ', 'recentchangestext' => 'Հետևեք վիքիում կատարված վերջին փոփոխություններին այս էջում։', 'recentchanges-feed-description' => 'Հետևեք վիքիում կատարված վերջին փոփոխություններին այս սնուցման մեջ։', -'recentchanges-label-legend' => 'Լեգենդ. $1', -'recentchanges-legend-newpage' => '$1 - նոր էջ', 'recentchanges-label-newpage' => 'Այս խմբագրմամբ ստեղծվել է նոր էջ', -'recentchanges-legend-minor' => '$1 - չնչին խմբագրում', 'recentchanges-label-minor' => 'Սա չնչին խմբագրում է', -'recentchanges-legend-bot' => '$1 - բոտի խմբագրում', 'recentchanges-label-bot' => 'Այս խմբագրումը կատարվել է բոտի կողմից', -'recentchanges-legend-unpatrolled' => '$1 - չպարեկված խմբագրում', 'recentchanges-label-unpatrolled' => 'Այս խմբագրումը դեռ չի պարեկվել', 'rcnote' => 'Ստորև բերված են վերջին $1 փոփոխությունները վերջին $2 {{PLURAL:$2|օրվա|օրվա}} ընթացքում՝ $5, $4-ի դրությամբ։', 'rcnotefrom' => "Ստորև բերված են փոփոխությունները սկսած՝ '''$2''' (մինչև՝ '''$1''')։", @@ -1314,7 +1296,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''", 'upload_directory_read_only' => 'Վեբ-սերվերը չունի գրելու իրավունք բեռնումների թղթապանակում ($1)։', 'uploaderror' => 'Բեռնման սխալ', 'uploadtext' => "Նիշք բեռնելու համար օգտագործեք ստորև բերված ձևը։ -Նախկինում բեռնված ֆայլերը դիտելու կամ որոնելու համար այցելեք [[Special:FileList|բեռնված ֆայլերի ցանկը]]։ Բեռնումները գրանցվում են [[Special:Log/upload|բեռնման տեղեկամատյանում]], ջնջումները՝ [[Special:Log/delete|ջնջման տեղեկամատյանում]]։ +Նախկինում բեռնված նիշքերը դիտելու կամ որոնելու համար այցելեք [[Սպասարկող:Պատկերներիցանկը|բեռնված նիշքերի ցանկը]]։ Բեռնումները գրանցվում են [[Սպասարկող:Տեղեկամատյան/upload|բեռնման տեղեկամատյանում]], ջնջումները՝ [[Սպասարկող:Տեղեկամատյան/delete|ջնջման տեղեկամատյանում]]։ Այս նիշքը որևէ էջում ընդգրկելու համար օգտագործեք հետևյալ հղման ձևերը. * '''[[{{ns:file}}:Նիշք.jpg]]''' - ամբողջական չափի պատկեր տեղադրելու համար, @@ -1322,8 +1304,8 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''", * '''[[{{ns:media}}:Նիշք.ogg]]''' - նիշքին ուղիղ հղման համար", 'uploadlog' => 'բեռնման տեղեկամատյան', 'uploadlogpage' => 'Բեռնման տեղեկամատյան', -'uploadlogpagetext' => 'Ստորև բերված է ամենավերջին բեռնված ֆայլերի ցանկը։ -Տե՛ս [[Special:NewFiles|նոր ֆայլերի սրահը]]՝ ավելի պատկերավոր դիտման համար։', +'uploadlogpagetext' => 'Ստորև բերված է ամենավերջին բեռնված նիշքերի ցանկը։ +Տե՛ս [[Սպասարկող:Նորպատկերներ|նոր նիշքերի սրահը]]՝ ավելի պատկերավոր դիտման համար։', 'filename' => 'Նիշքի անվանում', 'filedesc' => 'Ամփոփում', 'fileuploadsummary' => 'Նկարագրություն՝', @@ -1335,7 +1317,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''", 'minlength1' => 'Նիշքի անվանումը պետք է պարունակի առնվազն մեկ տառ', 'illegalfilename' => '«$1» նիշքի անվանումը պարունակում է սիմվոլներ, որոնք անթույլատրելի են էջերի անվանումներում։ Խնդրում ենք վերանվանել նիշքը և այն կրկին բեռնել։', 'badfilename' => 'Պատկերի վերանվանվել է «$1» անվանման։', -'filetype-badmime' => '«$1» MIME-տեսակով ֆայլերի բեռնումը արգելված է։', +'filetype-badmime' => '«$1» MIME-տեսակով նիշքերի բեռնումը արգելված է։', 'filetype-missing' => 'Նիշքը չունի ընդլայնում (օրինակ՝ «.jpg»)։', 'large-file' => 'Խորհուրդ է տրվում չօգտագործել $1 բայթից մեծ նիշքեր. այս նիշքի չափն է՝ $2 բայթ։', 'largefileserver' => 'Այս նիշքը սպասարկիչի թույլատրած առավելագույն չափից մեծ է։', @@ -1353,14 +1335,13 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''", Հավանաբար սա փոքրացված պատճեն է ''(պատկերիկ)''։ Եթե դուք այս պատկերը ամբողջական լուծաչափով ունեք, ապա խնդրում ենք բեռնել այն, հակառակ դեպքում՝ խնդրում ենք փոխել նիշքի անվանումը։", 'fileexists-forbidden' => 'Այսպիսի անվանմամբ նիշք արդեն գոյություն ունի։ Խնդրում ենք հետ վերադառնալ և բեռնել նիշքը նոր անվանմամբ։ [[File:$1|thumb|center|$1]]', -'fileexists-shared-forbidden' => 'Այսպիսի անվանմամբ նիշք արդեն գոյություն ունի ֆայլերի ընդհանուր զետեղարանում։ Խնդրում ենք հետ վերադառնալ և բեռնել նիշքը նոր անվանմամբ։ [[File:$1|thumb|center|$1]]', -'successfulupload' => 'Բեռնումը կատարված է', +'fileexists-shared-forbidden' => 'Այսպիսի անվանմամբ նիշք արդեն գոյություն ունի նիշքերի ընդհանուր զետեղարանում։ Խնդրում ենք հետ վերադառնալ և բեռնել նիշքը նոր անվանմամբ։ [[File:$1|thumb|center|$1]]', 'uploadwarning' => 'Զգուշացում', 'savefile' => 'Հիշել նիշքը', 'uploadedimage' => 'բեռնվեց «[[$1]]»', 'overwroteimage' => 'բեռնվեց «[[$1]]» նիշքի նոր տարբերակ', 'uploaddisabled' => 'Բեռնումները արգելված են', -'uploaddisabledtext' => 'Ֆայլերի բեռնումը արգելափակված է։', +'uploaddisabledtext' => 'Նիշքերի բեռնումը արգելափակված է։', 'uploadscripted' => 'Այս նիշքը պարունակում է HTML-կոդ կամ գրվածք (սկրիպտ), որը կարող է սխալ մեկնաբանվել զննարկիչի կողմից։', 'uploadvirus' => 'Նիշքը պարունակում է վիրո՜ւս։ Տես $1', 'sourcefilename' => 'Սկզբնական նիշք՝', @@ -1372,6 +1353,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''", Խնդրում ենք վերանայել նիշքի բեռնման նպատակահարմարությունը։ Այս նիշքի ջնջման տեղեկամատյանը բերված է ստորև.", 'filename-bad-prefix' => "Բեռնվող նիշքի անվանումը սկսվում է '''«$1»''' արտահայտությամբ, որը ոչ-նկարագրական է և սովորաբար տրվում է թվային լուսանկարչական ապարատների կողմից։ Խնդրում ենք ընտրել ավելի նկարագրական անվանում ձեր նիշքի համար։", +'upload-success-subj' => 'Բեռնումը կատարված է', 'upload-proto-error' => 'Սխալ պրոտոկոլ', 'upload-proto-error-text' => 'Հեռավոր բեռնումը պահանջում է URL-հասցե, որը սկսվում է http:// կամ ftp:// նախածանցով։', @@ -1396,7 +1378,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''", # Special:ListFiles 'listfiles_search_for' => 'Որոնել պատկերի անվանմամբ.', 'imgfile' => 'նիշք', -'listfiles' => 'Ֆայլերի ցանկ', +'listfiles' => 'Նիշքերի ցանկ', 'listfiles_date' => 'Օր/Ժամ', 'listfiles_name' => 'Անվանում', 'listfiles_user' => 'Մասնակից', @@ -1405,7 +1387,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''", 'listfiles_count' => 'Տարբերակ', # File description page -'file-anchor-link' => 'Ֆայլ', +'file-anchor-link' => 'Նիշք', 'filehist' => 'Նիշքի պատմություն', 'filehist-help' => 'Մատնահարեք օրվան/ժամին՝ նիշքի այդ պահին տեսքը դիտելու համար։', 'filehist-deleteall' => 'ջնջել բոլորը', @@ -1492,7 +1474,6 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''", 'statistics-edits-average' => 'Էջի խմբագրումների միջին թիվը', 'statistics-views-total' => 'Ընդհանուր դիտումներ', 'statistics-views-peredit' => 'Դիտումներ ամեն մի խմբագրման համար', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Առաջադրանքների հերթի] երկարությունը', 'statistics-users' => 'Գրանցված [[Special:ListUsers|մասնակիցներ]]', 'statistics-users-active' => 'Ակտիվ մասնակիցներ', 'statistics-users-active-desc' => 'Մասնակիցներ, որոնք որևէ գործողություն են կատարել վերջին {{PLURAL:$1|օրվա|$1 օրվա}} ընթացքում', @@ -1662,7 +1643,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'Իմ հսկողության ցանկը', 'mywatchlist' => 'Իմ հսկացանկը', -'watchlistfor' => "('''$1'''-ի համար)", 'nowatchlist' => 'Ձեր հսկողության ցանկը դատարկ է։', 'watchlistanontext' => 'Անհրաժեշտ է $1՝ հսկացանկը դիտելու կամ խմբագրելու համար։', 'watchnologin' => 'Չեք մտել համակարգ', @@ -1762,7 +1742,9 @@ $NEWPAGE 'editcomment' => "Խմբագրման մեկնաբանումն էր. «''$1''»։", 'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|քննարկում]]) մասնակցի խմբագրումները հետ են շրջվել [[User:$1|$1]] մասնակցի վերջին տարբերակին։', 'rollback-success' => 'Հետ են շրջվել $1 մասնակցի խմբագրումները. վերադարձվել է $2 մասնակցի վերջին տարբերակին։', -'sessionfailure' => 'Կարծես խնդիր է առաջացել կապված ձեր ընթացիկ աշխատանքային սեսիայի հետ. + +# Edit tokens +'sessionfailure' => 'Կարծես խնդիր է առաջացել կապված ձեր ընթացիկ աշխատանքային սեսիայի հետ. այս գործողությունը բեկանվել է սեսիայի հափշտակման կանխման նպատակով։ Խնդրում ենք սեղմել «back» կոճակը և վերբեռնել այն էջը որտեղից եկել եք ու փորձել կրկին։', @@ -1820,8 +1802,9 @@ $NEWPAGE 'undeleteextrahelp' => "Էջի լրիվ վերականգնման համար բոլոր արկղերը թողեք առանց նշումների և սեղմեք '''«Վերականգնել»''' կոճակը։ Մասնակի վերականգնման համար նշեք վերականգնման ենթակա տարբերակների արկղերը և սեղմեք '''«Վերականգնել»'''։ '''«Մաքրել»''' կոճակին սեղմելիս կմաքրվի մեկնաբանության դաշտը և բոլոր նշումները։", 'undeleterevisions' => 'արխիվում կա $1 տարբերակ', 'undeletehistory' => 'Եթե դուք վերականգնեք էջը, նրա բոլոր տարբերակները կվերականգնվեն փոփոխությունների պատմության մեջ։ -Եթե էջի ջնջումից հետո ստեղծվել է նոր էջ նույն անվանմամբ, ապա վերականգնված տարբերակները կհայտնվեն նախկին պատմության մեջ, և ընթացիկ տարբերակները ավտոմատ չեն փոխարինվի։ Նաև ի նկատի ունեցեք, որ ֆայլերի տարբերակների սահմանափակումները կվերանան են վերականգնման հետևանքով։', -'undeleterevdel' => 'Վերականգնումը չի կատարվի, եթե այն բերելու է վերջին տարբերակի մասնակի ջնջման։ Այսպիսի դեպքերում հարկավոր է նշումից հանել կամ ցուցադրել վերջին ջնջված տարբերակները։ Ֆայլերի այն տարբերակները, որոնք դուք իրավունք չունեք դիտելու, չեն վերականգնվի։', +Եթե էջի ջնջումից հետո ստեղծվել է նոր էջ նույն անվանմամբ, ապա վերականգնված տարբերակները կհայտնվեն էջի նախկին պատմության մեջ, և ընթացիկ տարբերակները ավտոմատ չեն փոխարինվի։', +'undeleterevdel' => 'Վերականգնումը չի կատարվի, եթե այն բերելու է վերջին տարբերակի մասնակի ջնջման։ +Այսպիսի դեպքերում հարկավոր է նշումից հանել կամ ցուցադրել վերջին ջնջված տարբերակները։', 'undeletehistorynoadmin' => 'Էջը ջնջվել է։ Ջնջման պատճառը և էջը խմբագրած մասնակիցների անունները բերված են ստորև։ Այս ջնջված տարբերակների բուն տեքստերը կարող են դիտել միայն ադմինիստրատորները։', 'undelete-revision' => '«$1» էջի $3 մասնակցի կողմից ջնջված տարբերակ ($2 պահով).', 'undeleterevision-missing' => 'Սխալ կամ գոյություն չունեցող տարբերակ։ Հնարավոր է դուք անցել եք սխալ հղմամբ, կամ տարբերակը վերականգնվել է, կամ էլ ջնջվել արխիվից։', @@ -1932,7 +1915,6 @@ $1', 'ipb-edit-dropdown' => 'Խմբագրել արգելափակման պատճառները', 'ipb-unblock-addr' => 'Անարգելել $1 մասնակցին', 'ipb-unblock' => 'Անարգելել որևէ մասնակից կամ IP-հասցե', -'ipb-blocklist-addr' => '$1 մասնակցի գործող արգելափակումները', 'ipb-blocklist' => 'Դիտել գործող արգելափակումները', 'ipb-blocklist-contribs' => '$1 մասնակցի ներդրումը', 'unblockip' => 'Անարգելել մասնակցին', @@ -2044,7 +2026,7 @@ $1', «[[:$1]]» անվանմամբ էջ արդեն գոյություն ունի։ Ուզո՞ւմ եք այն ջնջել՝ տեղափոխումը իրականացնելու համար։', 'delete_and_move_confirm' => 'Այո, ջնջել էջը', -'delete_and_move_reason' => 'Ձնջված է՝ տեղափոխման տեղ ազատելու համար', +'delete_and_move_reason' => 'Ջնջված է՝ տեղափոխման տեղ ազատելու համար', 'selfmove' => 'Ելակետային և նոր անվանումները համընկնում են. անհնար է տեղափոխել էջը ինքն իրեն։', 'move-leave-redirect' => 'Թողնել վերահղում։', @@ -2074,7 +2056,7 @@ Please visit [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] # Thumbnails 'thumbnail-more' => 'Ընդարձակել', -'filemissing' => 'Նման ֆայլ չկա', +'filemissing' => 'Նման նիշք չկա', 'thumbnail_error' => 'Պատկերիկի ստեղծման սխալ. $1', 'djvu_page_error' => 'DjVu էջը լայնույթից դուրս է', 'djvu_no_xml' => 'Չհաջողվեց ստեղծել XML DjVu նիշքի համար', @@ -2276,19 +2258,19 @@ $1', 'nextdiff' => 'Հաջորդ խմբագրում →', # Media information -'mediawarning' => "'''Զգուշացում'''. այս ֆայլը կարող է պարունակել վնասակար ծրագրային կոդ, որի կատարումը կարող է վտանգել ձեր համակարգը։", +'mediawarning' => "'''Զգուշացում'''. այս նիշքի տեսակը կարող է պարունակել վնասակար ծրագրային կոդ։ Այն կիրարկելը կարող է վտանգել ձեր համակարգը։", 'imagemaxsize' => 'Պատկերի էջում պատկերի չափի սահմանափակում.', 'thumbsize' => 'Պատկերների փոքրացված չափ.', 'widthheightpage' => '$1 × $2, $3 էջեր', -'file-info' => '(ֆայլի չափ. $1, MIME-տեսակ. $2)', -'file-info-size' => '($1 × $2 փիքսել, ֆայլի չափ՝ $3, MIME-տեսակ՝ $4)', +'file-info' => 'նիշքի չափ՝ $1, MIME-տեսակ՝ $2', +'file-info-size' => '$1 × $2 փիքսել, նիշքի չափը՝ $3, MIME-տեսակը՝ $4', 'file-nohires' => 'Բարձր թույլատվությամբ տարբերակ չկա։', -'svg-long-desc' => '(SVG-ֆայլ, անվանապես $1 × $2 փիքսել, ֆայլի չափ. $3)', +'svg-long-desc' => 'SVG-նիշք, անվանապես $1 × $2 փիքսել, նիշքի չափը՝ $3', 'show-big-image' => 'Լրիվ թույլատվությամբ', 'show-big-image-thumb' => 'Նախադիտման չափ. $1 × $2 փիքսել', # Special:NewFiles -'newimages' => 'Նոր ֆայլերի սրահ', +'newimages' => 'Նոր նիշքերի սրահ', 'imagelisttext' => "Ստորև բերված է '''$1''' {{PLURAL:$1|նիշքի}} ցանկ՝ դասավորված ըստ $2։", 'showhidebots' => '($1 բոտերին)', 'noimages' => 'Տեսնելու բան չկա։', @@ -2333,7 +2315,7 @@ $1', # External editor support 'edit-externally' => 'Խմբագրել այս նիշքը արտաքին խմբագրիչով', -'edit-externally-help' => '(Մանրամասնությունների համար տես [http://www.mediawiki.org/wiki/Manual:External_editors setup instructions])', +'edit-externally-help' => '(Մանրամասնությունների համար տես [http://www.mediawiki.org/wiki/Manual:External_editors տեղակայման հրահանգները])', # 'all' in various places, this might be different for inflected languages 'recentchangesall' => 'բոլոր', diff --git a/languages/messages/MessagesIa.php b/languages/messages/MessagesIa.php index cafe9736..d7863f22 100644 --- a/languages/messages/MessagesIa.php +++ b/languages/messages/MessagesIa.php @@ -14,7 +14,7 @@ * @author לערי ריינהארט */ -$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' ); +$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' ); $namespaceNames = array( NS_MEDIA => 'Multimedia', @@ -41,93 +41,95 @@ $namespaceAliases = array( ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'Redirectiones duple' ), - 'BrokenRedirects' => array( 'Redirectiones rupte' ), + 'DoubleRedirects' => array( 'Redirectiones_duple' ), + 'BrokenRedirects' => array( 'Redirectiones_rupte' ), 'Disambiguations' => array( 'Disambiguationes' ), - 'Userlogin' => array( 'Aperir session', 'Identificar' ), - 'Userlogout' => array( 'Clauder session', 'Disconnecter' ), - 'CreateAccount' => array( 'Crear conto' ), + 'Userlogin' => array( 'Aperir_session', 'Identificar' ), + 'Userlogout' => array( 'Clauder_session', 'Disconnecter' ), + 'CreateAccount' => array( 'Crear_conto' ), 'Preferences' => array( 'Preferentias' ), 'Watchlist' => array( 'Observatorio' ), - 'Recentchanges' => array( 'Modificationes recente' ), + 'Recentchanges' => array( 'Modificationes_recente' ), 'Upload' => array( 'Incargar', 'Cargar' ), - 'Listfiles' => array( 'Lista de files', 'Lista de imagines' ), - 'Newimages' => array( 'Nove files', 'Nove imagines' ), - 'Listusers' => array( 'Lista de usatores' ), - 'Listgrouprights' => array( 'Lista del derectos de gruppos' ), + 'Listfiles' => array( 'Lista_de_files', 'Lista_de_imagines' ), + 'Newimages' => array( 'Nove_files', 'Nove_imagines' ), + 'Listusers' => array( 'Lista_de_usatores' ), + 'Listgrouprights' => array( 'Lista_del_derectos_de_gruppos' ), 'Statistics' => array( 'Statisticas' ), - 'Randompage' => array( 'Aleatori', 'Pagina aleatori' ), - 'Lonelypages' => array( 'Paginas orphanate' ), - 'Uncategorizedpages' => array( 'Paginas non categorisate' ), - 'Uncategorizedcategories' => array( 'Categorias non categorisate' ), - 'Uncategorizedimages' => array( 'Files non categorisate', 'Imagines non categorisate' ), - 'Uncategorizedtemplates' => array( 'Patronos non categorisate' ), - 'Unusedcategories' => array( 'Categorias non usate' ), - 'Unusedimages' => array( 'Files non usate', 'Imagines non usate' ), - 'Wantedpages' => array( 'Paginas desirate', 'Ligamines rupte' ), - 'Wantedcategories' => array( 'Categorias desirate' ), - 'Wantedfiles' => array( 'Files desirate' ), - 'Wantedtemplates' => array( 'Patronos desirate' ), - 'Mostlinked' => array( 'Paginas le plus ligate', 'Le plus ligate' ), - 'Mostlinkedcategories' => array( 'Categorias le plus ligate', 'Categorias le plus usate' ), - 'Mostlinkedtemplates' => array( 'Patronos le plus ligate', 'Patronos le plus usate' ), - 'Mostimages' => array( 'Files le plus ligate', 'Le plus files', 'Le plus imagines' ), - 'Mostcategories' => array( 'Le plus categorias' ), - 'Mostrevisions' => array( 'Le plus versiones' ), - 'Fewestrevisions' => array( 'Le minus versiones' ), - 'Shortpages' => array( 'Paginas curte' ), - 'Longpages' => array( 'Paginas longe' ), - 'Newpages' => array( 'Paginas nove', 'Nove paginas' ), - 'Ancientpages' => array( 'Paginas ancian' ), - 'Deadendpages' => array( 'Paginas sin exito' ), - 'Protectedpages' => array( 'Paginas protegite' ), - 'Protectedtitles' => array( 'Titulos protegite' ), - 'Allpages' => array( 'Tote le paginas' ), - 'Prefixindex' => array( 'Indice de prefixos' ), - 'Ipblocklist' => array( 'Lista de blocadas', 'Lista de blocadas IP' ), - 'Specialpages' => array( 'Paginas special' ), + 'Randompage' => array( 'Aleatori', 'Pagina_aleatori' ), + 'Lonelypages' => array( 'Paginas_orphanate' ), + 'Uncategorizedpages' => array( 'Paginas_non_categorisate' ), + 'Uncategorizedcategories' => array( 'Categorias_non_categorisate' ), + 'Uncategorizedimages' => array( 'Files_non_categorisate', 'Imagines_non_categorisate' ), + 'Uncategorizedtemplates' => array( 'Patronos_non_categorisate' ), + 'Unusedcategories' => array( 'Categorias_non_usate' ), + 'Unusedimages' => array( 'Files_non_usate', 'Imagines_non_usate' ), + 'Wantedpages' => array( 'Paginas_desirate', 'Ligamines_rupte' ), + 'Wantedcategories' => array( 'Categorias_desirate' ), + 'Wantedfiles' => array( 'Files_desirate' ), + 'Wantedtemplates' => array( 'Patronos_desirate' ), + 'Mostlinked' => array( 'Paginas_le_plus_ligate', 'Le_plus_ligate' ), + 'Mostlinkedcategories' => array( 'Categorias_le_plus_ligate', 'Categorias_le_plus_usate' ), + 'Mostlinkedtemplates' => array( 'Patronos_le_plus_ligate', 'Patronos_le_plus_usate' ), + 'Mostimages' => array( 'Files_le_plus_ligate', 'Le_plus_files', 'Le_plus_imagines' ), + 'Mostcategories' => array( 'Le_plus_categorias' ), + 'Mostrevisions' => array( 'Le_plus_versiones' ), + 'Fewestrevisions' => array( 'Le_minus_versiones' ), + 'Shortpages' => array( 'Paginas_curte' ), + 'Longpages' => array( 'Paginas_longe' ), + 'Newpages' => array( 'Paginas_nove', 'Nove_paginas' ), + 'Ancientpages' => array( 'Paginas_ancian' ), + 'Deadendpages' => array( 'Paginas_sin_exito' ), + 'Protectedpages' => array( 'Paginas_protegite' ), + 'Protectedtitles' => array( 'Titulos_protegite' ), + 'Allpages' => array( 'Tote_le_paginas' ), + 'Prefixindex' => array( 'Indice_de_prefixos' ), + 'Ipblocklist' => array( 'Lista_de_blocadas', 'Lista_de_blocadas_IP' ), + 'Specialpages' => array( 'Paginas_special' ), 'Contributions' => array( 'Contributiones' ), - 'Emailuser' => array( 'Inviar e-mail a un usator' ), - 'Confirmemail' => array( 'Confirmar e-mail' ), - 'Whatlinkshere' => array( 'Referentias a iste pagina' ), - 'Recentchangeslinked' => array( 'Modificationes recente ligate', 'Modificationes connexe' ), - 'Movepage' => array( 'Renominar pagina' ), - 'Blockme' => array( 'Blocar me' ), - 'Booksources' => array( 'Fontes de libros' ), + 'Emailuser' => array( 'Inviar_e-mail_a_un_usator' ), + 'Confirmemail' => array( 'Confirmar_e-mail' ), + 'Whatlinkshere' => array( 'Referentias_a_iste_pagina' ), + 'Recentchangeslinked' => array( 'Modificationes_recente_ligate', 'Modificationes_connexe' ), + 'Movepage' => array( 'Renominar_pagina' ), + 'Blockme' => array( 'Blocar_me' ), + 'Booksources' => array( 'Fontes_de_libros' ), 'Categories' => array( 'Categorias' ), 'Export' => array( 'Exportar' ), - 'Allmessages' => array( 'Tote le messages' ), + 'Allmessages' => array( 'Tote_le_messages' ), 'Log' => array( 'Registro', 'Registros' ), - 'Blockip' => array( 'Blocar', 'Blocar IP', 'Blocar usator' ), + 'Blockip' => array( 'Blocar', 'Blocar_IP', 'Blocar_usator' ), 'Undelete' => array( 'Restaurar' ), 'Import' => array( 'Importar' ), - 'Lockdb' => array( 'Blocar BDD' ), - 'Unlockdb' => array( 'Disblocar BDD' ), - 'Userrights' => array( 'Derectos de usatores' ), - 'MIMEsearch' => array( 'Recerca MIME' ), - 'FileDuplicateSearch' => array( 'Recerca de files duplice' ), - 'Unwatchedpages' => array( 'Paginas non observate' ), - 'Listredirects' => array( 'Lista de redirectiones' ), - 'Revisiondelete' => array( 'Deletion de versiones' ), - 'Unusedtemplates' => array( 'Patronos non usate' ), - 'Randomredirect' => array( 'Redirection aleatori' ), - 'Mypage' => array( 'Mi pagina' ), - 'Mytalk' => array( 'Mi discussion' ), - 'Mycontributions' => array( 'Mi contributiones' ), - 'Listadmins' => array( 'Lista de administratores' ), - 'Listbots' => array( 'Lista de robots' ), - 'Popularpages' => array( 'Paginas popular' ), + 'Lockdb' => array( 'Blocar_BDD' ), + 'Unlockdb' => array( 'Disblocar_BDD' ), + 'Userrights' => array( 'Derectos_de_usatores' ), + 'MIMEsearch' => array( 'Recerca_MIME' ), + 'FileDuplicateSearch' => array( 'Recerca_de_files_duplice' ), + 'Unwatchedpages' => array( 'Paginas_non_observate' ), + 'Listredirects' => array( 'Lista_de_redirectiones' ), + 'Revisiondelete' => array( 'Deletion_de_versiones' ), + 'Unusedtemplates' => array( 'Patronos_non_usate' ), + 'Randomredirect' => array( 'Redirection_aleatori' ), + 'Mypage' => array( 'Mi_pagina' ), + 'Mytalk' => array( 'Mi_discussion' ), + 'Mycontributions' => array( 'Mi_contributiones' ), + 'Listadmins' => array( 'Lista_de_administratores' ), + 'Listbots' => array( 'Lista_de_robots' ), + 'Popularpages' => array( 'Paginas_popular' ), 'Search' => array( 'Recerca' ), - 'Resetpass' => array( 'Cambiar contrasigno' ), - 'Withoutinterwiki' => array( 'Sin interwiki' ), - 'MergeHistory' => array( 'Fusionar historia' ), - 'Filepath' => array( 'Cammino al file' ), - 'Invalidateemail' => array( 'Invalidar e-mail' ), - 'Blankpage' => array( 'Pagina vacue' ), - 'LinkSearch' => array( 'Recerca de ligamines' ), - 'DeletedContributions' => array( 'Contributiones delite' ), + 'Resetpass' => array( 'Cambiar_contrasigno' ), + 'Withoutinterwiki' => array( 'Sin_interwiki' ), + 'MergeHistory' => array( 'Fusionar_historia' ), + 'Filepath' => array( 'Cammino_al_file' ), + 'Invalidateemail' => array( 'Invalidar_e-mail' ), + 'Blankpage' => array( 'Pagina_vacue' ), + 'LinkSearch' => array( 'Recerca_de_ligamines' ), + 'DeletedContributions' => array( 'Contributiones_delite' ), 'Tags' => array( 'Etiquettas' ), - 'Activeusers' => array( 'Usatores active' ), + 'Activeusers' => array( 'Usatores_active' ), + 'ComparePages' => array( 'Comparar_paginas' ), + 'Badtitle' => array( 'Titulo_invalide' ), ); $messages = array( @@ -146,8 +148,7 @@ $messages = array( 'tog-editsection' => 'Activar le modification de sectiones con ligamines "[modificar]"', 'tog-editsectiononrightclick' => 'Activar modification de sectiones con clic-a-dextra super lor titulos (require JavaScript)', 'tog-showtoc' => 'Monstrar tabula de contento (in paginas con plus de 3 sectiones)', -'tog-rememberpassword' => 'Memorar mi contrasigno in iste computator', -'tog-editwidth' => 'Maximisar le latitude del quadro de modification', +'tog-rememberpassword' => 'Memorar mi contrasigno in iste navigator (pro un maximo de $1 {{PLURAL:$1|die|dies}})', 'tog-watchcreations' => 'Adder le paginas que io crea a mi observatorio', 'tog-watchdefault' => 'Adder le paginas que io modifica a mi observatorio', 'tog-watchmoves' => 'Adder le paginas que io renomina a mi observatorio', @@ -293,31 +294,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Adder topico', -'vector-action-delete' => 'Deler', -'vector-action-move' => 'Renominar', -'vector-action-protect' => 'Proteger', -'vector-action-undelete' => 'Restaurar', -'vector-action-unprotect' => 'Disproteger', -'vector-namespace-category' => 'Categoria', -'vector-namespace-help' => 'Pagina de adjuta', -'vector-namespace-image' => 'File', -'vector-namespace-main' => 'Pagina', -'vector-namespace-media' => 'Pagina de multimedia', -'vector-namespace-mediawiki' => 'Message', -'vector-namespace-project' => 'Pagina de projecto', -'vector-namespace-special' => 'Pagina special', -'vector-namespace-talk' => 'Discussion', -'vector-namespace-template' => 'Patrono', -'vector-namespace-user' => 'Pagina de usator', -'vector-view-create' => 'Crear', -'vector-view-edit' => 'Modificar', -'vector-view-history' => 'Vider historia', -'vector-view-view' => 'Leger', -'vector-view-viewsource' => 'Vider texto fonte', -'actions' => 'Actiones', -'namespaces' => 'Spatios de nomines', -'variants' => 'Variantes', +'vector-action-addsection' => 'Adder topico', +'vector-action-delete' => 'Deler', +'vector-action-move' => 'Renominar', +'vector-action-protect' => 'Proteger', +'vector-action-undelete' => 'Restaurar', +'vector-action-unprotect' => 'Disproteger', +'vector-simplesearch-preference' => 'Activar le suggestiones de recerca meliorate (solmente in apparentia Vector)', +'vector-view-create' => 'Crear', +'vector-view-edit' => 'Modificar', +'vector-view-history' => 'Vider historia', +'vector-view-view' => 'Leger', +'vector-view-viewsource' => 'Vider texto fonte', +'actions' => 'Actiones', +'namespaces' => 'Spatios de nomines', +'variants' => 'Variantes', 'errorpagetitle' => 'Error', 'returnto' => 'Retornar a $1.', @@ -378,6 +369,9 @@ Troppo de usatores tenta vider iste pagina. Per favor attende un momento ante que tu essaya acceder novemente a iste pagina. $1', +'pool-timeout' => 'Tempore limite excedite attendente le serratura', +'pool-queuefull' => 'Le cauda commun de processos es plen', +'pool-errorunknown' => 'Error incognite', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'A proposito de {{SITENAME}}', @@ -545,7 +539,8 @@ Non oblida personalisar tu [[Special:Preferences|preferentias in {{SITENAME}}]]. 'yourname' => 'Nomine de usator:', 'yourpassword' => 'Contrasigno:', 'yourpasswordagain' => 'Repete contrasigno:', -'remembermypassword' => 'Memorar mi contrasigno in iste computator', +'remembermypassword' => 'Memorar mi contrasigno in iste navigator (pro un maximo de $1 {{PLURAL:$1|die|dies}})', +'securelogin-stick-https' => 'Remaner connectite via HTTPS post apertura de session', 'yourdomainname' => 'Tu dominio:', 'externaldberror' => 'O il occurreva un error in le base de datos de authentication, o tu non ha le autorisation de actualisar tu conto externe.', 'login' => 'Aperir session', @@ -562,6 +557,7 @@ Non oblida personalisar tu [[Special:Preferences|preferentias in {{SITENAME}}]]. 'gotaccount' => "Tu jam ha un conto? '''$1'''.", 'gotaccountlink' => 'Aperir session', 'createaccountmail' => 'per e-mail', +'createaccountreason' => 'Motivo:', 'badretype' => 'Le duo contrasignos que tu scribeva non es identic.', 'userexists' => 'Le nomine de usator que tu entrava es ja in uso. Selige un altere nomine.', @@ -588,6 +584,7 @@ Verifica le orthographia.', 'wrongpasswordempty' => 'Tu non entrava un contrasigno. Per favor reprova.', 'passwordtooshort' => 'Le contrasignos debe continer al minus {{PLURAL:$1|1 character|$1 characteres}}.', 'password-name-match' => 'Tu contrasigno debe esser differente de tu nomine de usator.', +'password-login-forbidden' => 'Le uso de iste nomine de usator e contrasigno ha essite prohibite.', 'mailmypassword' => 'Inviar un nove contrasigno in e-mail', 'passwordremindertitle' => 'Nove contrasigno temporari pro {{SITENAME}}', 'passwordremindertext' => 'Alcuno (probabilemente tu, ab le adresse IP $1) requestava un nove @@ -632,6 +629,9 @@ Per favor attende ante de probar lo novemente.', 'loginlanguagelabel' => 'Lingua: $1', 'suspicious-userlogout' => 'Le requesta de clauder le session ha essite refusate proque illo pare haber essite inviate per un navigator o proxy de cache defectuose.', +# E-mail sending +'php-mail-error-unknown' => 'Error incognite in le function mail() de PHP', + # Password reset dialog 'resetpass' => 'Cambiar contrasigno', 'resetpass_announce' => 'Tu ha aperite un session con un codice temporari que tu recipeva in e-mail. @@ -685,11 +685,12 @@ Es possibile que tu ha ja cambiate tu contrasigno o requestate un nove contrasig 'showdiff' => 'Detaliar modificationes', 'anoneditwarning' => "'''Attention:''' Tu non ha aperite un session. Tu adresse IP essera registrate in le historia de modificationes de iste pagina.", +'anonpreviewwarning' => "''Tu non ha aperite un session. Salveguardar registrara tu adresse IP in le historia de modificationes de iste pagina.''", 'missingsummary' => "'''Rememoration:''' Tu non ha specificate un summario del modification. Si tu clicca super \"{{int:savearticle}}\" de novo, le modification essera publicate sin summario.", 'missingcommenttext' => 'Per favor entra un commento infra.', -'missingcommentheader' => "'''Memento:''' Tu non entrava un subjecto/titulo pro iste commento. -Si tu clicca super Publicar de novo, tu commento essera publicate sin subjecto/titulo.", +'missingcommentheader' => "'''Rememoration:''' Tu non ha specificate un subjecto/titulo pro iste commento. +Si tu clicca super \"{{int:savearticle}}\" de novo, le modification essera publicate sin titulo.", 'summary-preview' => 'Previsualisation del summario:', 'subject-preview' => 'Previsualisation del subjecto/titulo:', 'blockedtitle' => 'Le usator es blocate', @@ -764,8 +765,12 @@ Le ultime entrata del registro de blocadas es reproducite ci infra pro informati '''Le modificationes non ha ancora essite salveguardate!'''", 'userjspreview' => "'''Non oblida que isto es solmente un test/previsualisation de tu JavaScript personalisate.''' '''Illo non ha ancora essite salveguardate!'''", -'userinvalidcssjstitle' => "'''Attention:''' Le stilo \"\$1\" non existe. -Memora que le paginas .css and .js personalisate usa un titulo in minusculas, p.ex. {{ns:user}}:Foo/monobook.css e non {{ns:user}}:Foo/Monobook.css.", +'sitecsspreview' => "'''Non oblida que isto es solmente un previsualisation de iste CSS.''' +'''Le modificationes non ha ancora essite salveguardate!'''", +'sitejspreview' => "'''Non oblida que isto es solmente un previsualisation de iste codice JavaScript.''' +'''Le modificationes non ha ancora essite salveguardate!'''", +'userinvalidcssjstitle' => "'''Attention:''' Le apparentia \"\$1\" non existe. +Memora que le paginas .css and .js personalisate usa un titulo in minusculas, p.ex. {{ns:user}}:Foo/vector.css e non {{ns:user}}:Foo/Vector.css.", 'updated' => '(Actualisate)', 'note' => "'''Nota:'''", 'previewnote' => "'''Isto es solmente un previsualisation.''' @@ -809,9 +814,6 @@ In addition, tu nos garanti que tu es le autor de isto, o que tu lo ha copiate d Si tu non vole que tu scripto sia modificate impietosemente, alora non lo submitte hic.
    In addition, tu nos garanti que tu es le autor de isto, o que tu lo ha copiate de un ressource a dominio public o alteremente libere de derectos (vide $1 pro detalios). '''Non submitte material subjecte a copyright sin autorisation expresse!'''", -'longpagewarning' => "'''Attention:''' Iste pagina occupa $1 kilobytes; -alcun navigatores pote presentar problemas in modificar paginas de 32 kilobytes o plus. -Per favor considera divider le pagina in sectiones minus grande.", 'longpageerror' => "'''Error: Le texto que tu submitteva occupa $1 kilobytes, excedente le maximo de $2 kilobytes.''' Illo non pote esser salveguardate.", 'readonlywarning' => "'''Attention: Le base de datos ha essite blocate pro mantenentia, ergo tu non pote salveguardar tu modificationes in iste momento.''' @@ -990,6 +992,8 @@ $1", 'logdelete-failure' => "'''Le visibilitate del registro non poteva esser cambiate:''' $1", 'revdel-restore' => 'Cambiar visibilitate', +'revdel-restore-deleted' => 'versiones delite', +'revdel-restore-visible' => 'versiones visibile', 'pagehist' => 'Historia del pagina', 'deletedhist' => 'Historia delite', 'revdelete-content' => 'contento', @@ -1059,11 +1063,13 @@ Nota que le uso del ligamines de navigation causara le perdita de tote cambios i # Diffs 'history-title' => 'Historia de versiones de "$1"', 'difference' => '(Differentia inter versiones)', +'difference-multipage' => '(Differentia inter paginas)', 'lineno' => 'Linea $1:', 'compareselectedversions' => 'Comparar versiones seligite', 'showhideselectedversions' => 'Revelar/celar le versiones seligite', 'editundo' => 'disfacer', -'diff-multi' => '({{PLURAL:$1|Un version intermedie|$1 versiones intermedie}} non es monstrate)', +'diff-multi' => '({{PLURAL:$1|Un version intermedie|$1 versiones intermedie}} facite per {{PLURAL:$2|un usator|$2 usatores}} non es monstrate)', +'diff-multi-manyusers' => '({{PLURAL:$1|Un version intermedie|$1 versiones intermedie}} facite per plus de $2 {{PLURAL:$2|usator|usatores}} non es monstrate)', # Search results 'searchresults' => 'Resultatos del recerca', @@ -1098,6 +1104,7 @@ Nota que le uso del ligamines de navigation causara le perdita de tote cambios i 'searchprofile-everything-tooltip' => 'Cercar in tote le contento (includente le paginas de discussion)', 'searchprofile-advanced-tooltip' => 'Cercar in spatios de nomines personalisate', 'search-result-size' => '$1 ({{PLURAL:$2|1 parola|$2 parolas}})', +'search-result-category-size' => '{{PLURAL:$1|1 membro|$1 membros}} ({{PLURAL:$2|1 subcategoria|$2 subcategorias}}, {{PLURAL:$3|1 file|$3 files}})', 'search-result-score' => 'Relevantia: $1%', 'search-redirect' => '(redirection ab $1)', 'search-section' => '(section $1)', @@ -1175,6 +1182,7 @@ Nota que lor indices del contento de {{SITENAME}} pote esser obsolete.', 'contextlines' => 'Lineas per resultato:', 'contextchars' => 'Characteres de contexto per linea:', 'stub-threshold' => 'Limite pro formatar le ligamines in stilo de peciettas (bytes):', +'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:', @@ -1208,6 +1216,7 @@ Ecce un valor aleatorimente generate que tu pote usar: $1', 'prefs-files' => 'Files', 'prefs-custom-css' => 'CSS personalisate', 'prefs-custom-js' => 'JS personalisate', +'prefs-common-css-js' => 'CSS/JS commun a tote le apparentias:', 'prefs-reset-intro' => 'Iste pagina es pro reinitialisar tu preferentias al valores predefinite del sito. Le operation non pote esser disfacite.', 'prefs-emailconfirm-label' => 'Confirmation del e-mail:', @@ -1245,9 +1254,15 @@ Si tu opta pro dar lo, isto essera usate pro dar te attribution pro tu contribut 'prefs-advancedrendering' => 'Optiones avantiate', 'prefs-advancedsearchoptions' => 'Optiones avantiate', 'prefs-advancedwatchlist' => 'Optiones avantiate', -'prefs-display' => 'Optiones de visualisation', +'prefs-displayrc' => 'Optiones de presentation', +'prefs-displaysearchoptions' => 'Optiones de presentation', +'prefs-displaywatchlist' => 'Optiones de presentation', 'prefs-diffs' => 'Differentias', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Sembla valide', +'email-address-validity-invalid' => 'Un adresse valide es obligatori!', + # User rights 'userrights' => 'Gestion de derectos de usator', 'userrights-lookup-user' => 'Gerer gruppos de usatores', @@ -1331,6 +1346,7 @@ Si tu opta pro dar lo, isto essera usate pro dar te attribution pro tu contribut 'right-hideuser' => 'Blocar un nomine de usator, celante lo del publico', 'right-ipblock-exempt' => 'Contornar le blocadas de adresses IP, blocadas automatic e blocadas de intervallos IP', 'right-proxyunbannable' => 'Contornar le blocadas automatic de proxy', +'right-unblockself' => 'Disblocar se mesme', 'right-protect' => 'Cambiar nivellos de protection e modificar paginas protegite', 'right-editprotected' => 'Modificar paginas protegite (sin cascada)', 'right-editinterface' => 'Modificar le interfacie de usator', @@ -1353,7 +1369,6 @@ Si tu opta pro dar lo, isto essera usate pro dar te attribution pro tu contribut 'right-siteadmin' => 'Blocar e disblocar le base de datos', 'right-reset-passwords' => 'Redefinir le contrasigno de altere usatores', 'right-override-export-depth' => 'Exportar paginas includente paginas ligate usque a un profunditate de 5', -'right-versiondetail' => 'Monstrar le informationes complete super le versiones del software', 'right-sendemail' => 'Inviar e-mail a altere usatores', # User rights log @@ -1404,14 +1419,9 @@ Si tu opta pro dar lo, isto essera usate pro dar te attribution pro tu contribut 'recentchanges-legend' => 'Optiones del modificationes recente', 'recentchangestext' => 'Seque le plus recente modificationes a {{SITENAME}} in iste pagina.', 'recentchanges-feed-description' => 'Seque le modificationes le plus recente al wiki in iste syndication.', -'recentchanges-label-legend' => 'Legenda: $1.', -'recentchanges-legend-newpage' => '$1 - nove pagina', 'recentchanges-label-newpage' => 'Iste modification creava un nove pagina', -'recentchanges-legend-minor' => '$1 - modification minor', 'recentchanges-label-minor' => 'Isto es un modification minor', -'recentchanges-legend-bot' => '$1 - modification robot', 'recentchanges-label-bot' => 'Iste modification ha essite effectuate per un robot', -'recentchanges-legend-unpatrolled' => '$1 - modification non patruliate', 'recentchanges-label-unpatrolled' => 'Iste modification non ha ancora essite patruliate', 'rcnote' => "Infra es {{PLURAL:$1|'''1''' modification|le ultime '''$1''' modificationes}} in le ultime {{PLURAL:$2|die|'''$2''' dies}}, actualisate le $4 a $5.", 'rcnotefrom' => 'infra es le modificationes a partir de $2 (usque a $1).', @@ -1458,6 +1468,9 @@ Le paginas presente in [[Special:Watchlist|tu observatorio]] appare in litteras 'upload_directory_missing' => 'Le directorio de incargamento ($1) manca, e le servitor de web non poteva crear lo.', 'upload_directory_read_only' => 'Le servitor web non ha le permission de scriber in le directorio de incargamento ($1).', 'uploaderror' => 'Error de incargamento', +'upload-recreate-warning' => "'''Attention: Un file con iste nomine ha ja essite delite o renominate.''' + +Le registro de deletiones e renominationes pro iste pagina es fornite hic pro major commoditate:", 'uploadtext' => "Con le formulario sequente tu pote incargar un nove file in le wiki. Pro vider o cercar files ja incargate, visita le [[Special:FileList|lista de files incargate]]. In ultra, le (re)incargamentos es registrate in le [[Special:Log/upload|registro de incargamentos]], le deletiones in le [[Special:Log/delete|registro de deletiones]]. @@ -1493,6 +1506,17 @@ Le {{PLURAL:\$3|typo|typos}} de file preferite es \$2.", 'filetype-banned-type' => "Le typo de file '''\".\$1\"''' non es permittite. Le {{PLURAL:\$3|typo|typos}} de file permittite es \$2.", 'filetype-missing' => 'Le nomine del file non ha un extension (como ".jpg").', +'empty-file' => 'Le file submittite es vacue', +'file-too-large' => 'Le file submittite es troppo grande', +'filename-tooshort' => 'Le nomine del file es troppo curte', +'filetype-banned' => 'Iste typo de file es prohibite', +'verification-error' => 'Iste file non passava le verification de files', +'hookaborted' => 'Le modification que tu ha tentate facer ha essite abortate per un extension.', +'illegal-filename' => 'Le nomine del file non es permittite.', +'overwrite' => 'Superscriber un file existente non es permittite.', +'unknown-error' => 'Un error incognite ha occurrite.', +'tmp-create-error' => 'Non poteva crear file temporari.', +'tmp-write-error' => 'Error durante le scriptura in le file temporari.', 'large-file' => 'Es recommendate que le files non sia plus grande de $1; iste file occupa $2.', 'largefileserver' => 'Le grandor de iste file excede le limite configurate in le servitor.', @@ -1522,13 +1546,14 @@ Si tu vole ancora incargar iste file, per favor retorna e usa un nove nomine. [[ Si tu vole totevia incargar iste file, per favor retorna e usa un nove nomine. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Iste file es un duplicato del sequente {{PLURAL:$1|file|files}}:', 'file-deleted-duplicate' => 'Un file identic a iste file ([[:$1]]) esseva ja delite anteriormente. Tu deberea verificar le registro de deletiones concernente iste file ante de re-incargar lo.', -'successfulupload' => 'Incargamento succedite', 'uploadwarning' => 'Advertimento de incargamento', 'uploadwarning-text' => 'Per favor modifica le description del file ci infra e reproba.', 'savefile' => 'Salveguardar file', 'uploadedimage' => 'incargava "[[$1]]"', 'overwroteimage' => 'incargava un nove version de "[[$1]]"', 'uploaddisabled' => 'Incargamento de files disactivate', +'copyuploaddisabled' => 'Incargamento per URL disactivate.', +'uploadfromurl-queued' => 'Tu incargamento ha essite mittite in cauda.', 'uploaddisabledtext' => 'Le incargamento de files es disactivate.', 'php-uploaddisabledtext' => 'Le incargamento de files PHP es disactivate. Per favor verifica le configuration file_uploads.', 'uploadscripted' => 'Iste file contine codice de HTML o de script que pote esser interpretate erroneemente per un navigator del web.', @@ -1563,6 +1588,14 @@ JD # Jenoptik MGP # Pentax PICT # misc. # ', +'upload-success-subj' => 'Incargamento succedite', +'upload-success-msg' => 'Le incargamento de [$2] ha succedite. Illo es disponibile hic: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problema de incargamento', +'upload-failure-msg' => 'Il ha occurrite un problema con tu incargamento ab [$2]: + +$1', +'upload-warning-subj' => 'Advertimento de incargamento', +'upload-warning-msg' => 'Occurreva un problema con le incargamento de [$2]. Tu pote retornar al [[Special:Upload/stash/$1|formulario de incargamento]] pro corriger iste problema.', 'upload-proto-error' => 'Protocollo incorrecte', 'upload-proto-error-text' => 'Le incargamento remote require que le adresses URL comencia con http:// o ftp://.', @@ -1629,6 +1662,7 @@ Tu pote reordinar le lista con un clic super le titulo de un columna.', 'listfiles_search_for' => 'Cercar un nomine de media:', 'imgfile' => 'file', 'listfiles' => 'Lista de files', +'listfiles_thumb' => 'Miniatura', 'listfiles_date' => 'Data', 'listfiles_name' => 'Nomine', 'listfiles_user' => 'Usator', @@ -1743,8 +1777,8 @@ Memora verificar que non existe altere ligamines al patronos ante que tu los del 'statistics-edits' => 'Modificationes de paginas depost le installation de {{SITENAME}}', 'statistics-edits-average' => 'Media del modificationes per pagina', 'statistics-views-total' => 'Visitas total', +'statistics-views-total-desc' => 'Le visitas a paginas inexistente e special non es includite', 'statistics-views-peredit' => 'Visitas per modification', -'statistics-jobqueue' => 'Longor del [http://www.mediawiki.org/wiki/Manual:Job_queue cauda de actiones]', 'statistics-users' => '[[Special:ListUsers|Usatores]] registrate', 'statistics-users-active' => 'Usatores active', 'statistics-users-active-desc' => 'Usatores qui ha facite un action durante le {{PLURAL:$1|die|$1 dies}} passate', @@ -1759,7 +1793,7 @@ Un pagina se tracta como pagina de disambiguation si illo usa un patrono al qual 'doubleredirects' => 'Redirectiones duple', 'doubleredirectstext' => 'Iste pagina lista paginas de redirection verso altere paginas de redirection. Cata linea contine ligamines al prime e al secunde redirection, con le destination del secunde redirection. Iste es normalmente le "ver" pagina de destination, al qual le prime redirection tamben deberea punctar. -Le entratas cancellate ha essite resolvite.', +Le entratas cancellate ha essite resolvite.', 'double-redirect-fixed-move' => '[[$1]] ha essite renominate, illo es ora un redirection verso [[$2]]', 'double-redirect-fixer' => 'Corrector de redirectiones', @@ -1782,6 +1816,8 @@ Le entratas cancellate ha essite resolvite.', 'nmembers' => '$1 {{PLURAL:$1|membro|membros}}', 'nrevisions' => '$1 {{PLURAL:$1|version|versiones}}', 'nviews' => '$1 {{PLURAL:$1|visita|visitas}}', +'nimagelinks' => 'Usate in $1 {{PLURAL:$1|pagina|paginas}}', +'ntransclusions' => 'usate in $1 {{PLURAL:$1|pagina|paginas}}', 'specialpage-empty' => 'Il non ha resultatos pro iste reporto.', 'lonelypages' => 'Paginas orphanate', 'lonelypagestext' => 'Le sequente paginas non es ligate ni transcludite in altere paginas in {{SITENAME}}.', @@ -1940,37 +1976,43 @@ Il pote haber [[{{MediaWiki:Listgrouprights-helppage}}|informationes additional] 'listgrouprights-removegroup-self-all' => 'Pote remover tote le gruppos del proprie conto', # E-mail user -'mailnologin' => 'Necun adresse de invio', -'mailnologintext' => 'Tu debe [[Special:UserLogin|aperir un session]] +'mailnologin' => 'Necun adresse de invio', +'mailnologintext' => 'Tu debe [[Special:UserLogin|aperir un session]] e haber un adresse de e-mail valide in tu [[Special:Preferences|preferentias]] pro inviar e-mail a altere usatores.', -'emailuser' => 'Inviar e-mail a iste usator', -'emailpage' => 'Inviar e-mail al usator', -'emailpagetext' => 'Le formulario infra es pro inviar un message de e-mail a iste usator. +'emailuser' => 'Inviar e-mail a iste usator', +'emailpage' => 'Inviar e-mail al usator', +'emailpagetext' => 'Le formulario infra es pro inviar un message de e-mail a iste usator. Le adresse de e-mail que tu indicava in [[Special:Preferences|tu preferentias de usator]] apparera como le adresse del expeditor del e-mail, de modo que le destinatario pote responder directemente a te.', -'usermailererror' => 'Le objecto de e-mail retornava le error:', -'defemailsubject' => 'E-mail de {{SITENAME}}', -'noemailtitle' => 'Nulle adresse de e-mail', -'noemailtext' => 'Iste usator non ha specificate un adresse de e-mail valide.', -'nowikiemailtitle' => 'E-mail non permittite', -'nowikiemailtext' => 'Iste usator ha optate pro non reciper e-mail de altere usatores.', -'email-legend' => 'Inviar e-mail a un altere usator de {{SITENAME}}', -'emailfrom' => 'Expeditor:', -'emailto' => 'Destinatario:', -'emailsubject' => 'Subjecto:', -'emailmessage' => 'Message:', -'emailsend' => 'Inviar', -'emailccme' => 'Inviar me un copia de mi message.', -'emailccsubject' => 'Copia de tu message a $1: $2', -'emailsent' => 'E-mail inviate', -'emailsenttext' => 'Tu message de e-mail ha essite inviate.', -'emailuserfooter' => 'Iste e-mail esseva inviate per $1 a $2 con le function "Inviar e-mail al usator" a {{SITENAME}}.', +'usermailererror' => 'Le objecto de e-mail retornava le error:', +'defemailsubject' => 'E-mail de {{SITENAME}}', +'usermaildisabled' => 'E-mail a usatores disactivate', +'usermaildisabledtext' => 'Tu non pote inviar e-mail a altere usatores in iste wiki', +'noemailtitle' => 'Nulle adresse de e-mail', +'noemailtext' => 'Iste usator non ha specificate un adresse de e-mail valide.', +'nowikiemailtitle' => 'E-mail non permittite', +'nowikiemailtext' => 'Iste usator ha optate pro non reciper e-mail de altere usatores.', +'email-legend' => 'Inviar e-mail a un altere usator de {{SITENAME}}', +'emailfrom' => 'Expeditor:', +'emailto' => 'Destinatario:', +'emailsubject' => 'Subjecto:', +'emailmessage' => 'Message:', +'emailsend' => 'Inviar', +'emailccme' => 'Inviar me un copia de mi message.', +'emailccsubject' => 'Copia de tu message a $1: $2', +'emailsent' => 'E-mail inviate', +'emailsenttext' => 'Tu message de e-mail ha essite inviate.', +'emailuserfooter' => 'Iste e-mail esseva inviate per $1 a $2 con le function "Inviar e-mail al usator" a {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Lassante un message de systema.', +'usermessage-editor' => 'Messagero del systema', # Watchlist 'watchlist' => 'Mi observatorio', 'mywatchlist' => 'Mi observatorio', -'watchlistfor' => "(pro '''$1''')", +'watchlistfor2' => 'De $1 $2', 'nowatchlist' => 'Tu non ha paginas sub observation.', 'watchlistanontext' => 'Tu debe $1 pro poter vider o modificar entratas in tu observatorio.', 'watchnologin' => 'Tu non ha aperite un session', @@ -2023,7 +2065,7 @@ $NEWPAGE Summario del redactor: $PAGESUMMARY $PAGEMINOREDIT -Contactar le redactor: +Pro contactar le redactor: e-mail: $PAGEEDITOR_EMAIL wiki: $PAGEEDITOR_WIKI @@ -2032,8 +2074,11 @@ Como alternativa tu pote reinitialisar le optiones de notification pro tote le p Le systema de notification de {{SITENAME}}, a tu servicio --- -Pro cambiar le configuration de tu observatorio, visita +-- +Pro configurar le notification per e-mail, visita +{{fullurl:{{#special:Preferences}}}} + +Pro configurar le observatorio, visita {{fullurl:{{#special:Watchlist}}/edit}} Pro retirar le pagina de tu observatorio, visita @@ -2095,7 +2140,10 @@ Le ultime modification esseva facite per [[User:$3|$3]] ([[User talk:$3|discussi 'revertpage-nouser' => 'Reverteva modificationes per (nomine de usator removite) al ultime version per [[User:$1|$1]]', 'rollback-success' => 'Revocava modificationes per $1; retornava al version per $2.', -'sessionfailure' => 'Il pare haber un problema con tu session de conto; + +# Edit tokens +'sessionfailure-title' => 'Error de session', +'sessionfailure' => 'Il pare haber un problema con tu session de conto; iste action ha essite cancellate como precaution contra le sequestramento de sessiones. Per favor preme "retro" e recarga le pagina de ubi tu ha venite, postea reprova.', @@ -2233,18 +2281,22 @@ $1', 'month' => 'A partir del mense (e anterior):', 'year' => 'A partir del anno (e anterior):', -'sp-contributions-newbies' => 'Monstrar contributiones de nove contos solmente', -'sp-contributions-newbies-sub' => 'Pro nove contos', -'sp-contributions-newbies-title' => 'Contributiones de nove contos de usator', -'sp-contributions-blocklog' => 'Registro de blocadas', -'sp-contributions-deleted' => 'contributiones delite de usatores', -'sp-contributions-logs' => 'registros', -'sp-contributions-talk' => 'discussion', -'sp-contributions-userrights' => 'gestion de derectos de usator', -'sp-contributions-blocked-notice' => 'Iste usator es actualmente blocate. Le ultime entrata del registro de blocadas es reproducite ci infra pro information:', -'sp-contributions-search' => 'Cercar contributiones', -'sp-contributions-username' => 'Adresse IP o nomine de usator:', -'sp-contributions-submit' => 'Cercar', +'sp-contributions-newbies' => 'Monstrar contributiones de nove contos solmente', +'sp-contributions-newbies-sub' => 'Pro nove contos', +'sp-contributions-newbies-title' => 'Contributiones de nove contos de usator', +'sp-contributions-blocklog' => 'Registro de blocadas', +'sp-contributions-deleted' => 'contributiones delite de usatores', +'sp-contributions-uploads' => 'incargamentos', +'sp-contributions-logs' => 'registros', +'sp-contributions-talk' => 'discussion', +'sp-contributions-userrights' => 'gestion de derectos de usator', +'sp-contributions-blocked-notice' => 'Iste usator es actualmente blocate. Le ultime entrata del registro de blocadas es reproducite ci infra pro information:', +'sp-contributions-blocked-notice-anon' => 'Iste adresse IP es actualmente blocate. +Le ultime entrata del registro de blocadas es reproducite hic infra pro information:', +'sp-contributions-search' => 'Cercar contributiones', +'sp-contributions-username' => 'Adresse IP o nomine de usator:', +'sp-contributions-toponly' => 'Monstrar solmente le versiones recente', +'sp-contributions-submit' => 'Cercar', # What links here 'whatlinkshere' => 'Referentias a iste pagina', @@ -2308,7 +2360,6 @@ Vide le [[Special:IPBlockList|lista de adresses IP blocate]] pro revider le bloc 'ipb-edit-dropdown' => 'Modificar le motivos pro blocar', 'ipb-unblock-addr' => 'Disblocar $1', 'ipb-unblock' => 'Disblocar un nomine de usator o un adresse IP', -'ipb-blocklist-addr' => 'Blocadas existente pro $1', 'ipb-blocklist' => 'Vider blocadas existente', 'ipb-blocklist-contribs' => 'Contributiones de $1', 'unblockip' => 'Disblocar adresse IP', @@ -2382,6 +2433,8 @@ Per favor contacta tu providitor de servicio internet o supporto technic e infor Tu non pote crear un conto', 'cant-block-while-blocked' => 'Tu non pote blocar altere usatores durante que tu mesme es blocate.', 'cant-see-hidden-user' => 'Le usator que tu tenta blocar ha ja essite blocate e celate. Post que tu non ha le derecto hideuser, tu non pote vider o modificar le blocada del usator.', +'ipbblocked' => 'Tu non pote blocar o disblocar altere usatores, proque tu mesme es blocate', +'ipbnounblockself' => 'Tu non ha le permission de disblocar te mesme', # Developer tools 'lockdb' => 'Blocar base de datos', @@ -2424,6 +2477,17 @@ Isto vole dicer que tu pote renominar un pagina retro a su titulo original si tu '''ATTENTION!''' Isto pote esser un cambio drastic e inexpectate pro un pagina popular; per favor assecura te de haber comprendite le consequentias de isto ante de continuar.", +'movepagetext-noredirectfixer' => "Per medio del formulario infra tu pote renominar un pagina, transferente tote su historia al nove nomine. +Le titulo anterior devenira un pagina de redirection verso le nove titulo. +Assecura te de reparar omne redirectiones [[Special:DoubleRedirects|duple]] o [[Special:BrokenRedirects|rupte]]. +Tu ha le responsabilitate de assecurar que le ligamines continua a punctar verso le paginas correcte. + +Nota que le pagina '''non''' essera renominate si existe ja un pagina sub le nove titulo, salvo si illo es vacue o un redirection e non ha un historia de modificationes passate. +Isto vole dicer que tu pote renominar un pagina retro a su titulo original si tu ha committite un error, ben que tu non pote superscriber un pagina existente. + +'''Attention!''' +Isto pote esser un cambio drastic e inexpectate pro un pagina popular; +per favor assecura te de haber comprendite le consequentias de isto ante de continuar.", 'movepagetalktext' => "Le pagina de discussion associate essera automaticamente renominate conjunctemente con illo '''a minus que''': *Un pagina de discussion non vacue ja existe sub le nove nomine, o *Tu dismarca le quadrato infra. @@ -2481,6 +2545,7 @@ non pote renominar un pagina al mesme titulo.', 'immobile-source-page' => 'Iste pagina non es renominabile.', 'immobile-target-page' => 'Non pote renominar a iste titulo de destination.', 'imagenocrossnamespace' => 'Impossibile renominar un file verso un spatio de nomines non-file', +'nonfile-cannot-move-to-file' => 'Impossibile renominar un non-file verso le spatio de nomines file', 'imagetypemismatch' => 'Le nove extension del nomine del file non corresponde al typo del file', 'imageinvalidfilename' => 'Le nomine del file de destination es invalide', 'fix-double-redirects' => 'Actualisar tote le redirectiones que puncta verso le titulo original', @@ -2559,6 +2624,7 @@ Salveguarda lo in tu computator e incarga lo hic.', 'importstart' => 'Importation de paginas in curso…', 'import-revision-count' => '$1 {{PLURAL:$1|version|versiones}}', 'importnopages' => 'Nulle paginas a importar.', +'imported-log-entries' => '$1 {{PLURAL:$1|entrata|entratas}} del registro importate.', 'importfailed' => 'Importation fallite: $1', 'importunknownsource' => 'Typo del origine de importation non cognoscite', 'importcantopen' => 'Impossibile aperir le file de importation', @@ -2653,6 +2719,8 @@ Per favor usa le previsualisation ante de publicar.', 'tooltip-rollback' => '"Revocar" reverte le modification(es) de iste pagina del ultime contributor con un singule clic.', 'tooltip-undo' => '"Disfacer" reverte iste modification e aperi le formulario de modification in modo de previsualisation. Es possibile adder un motivo in le summario.', +'tooltip-preferences-save' => 'Confirmar preferentias', +'tooltip-summary' => 'Entra un curte summario', # Stylesheets 'common.css' => '/* Le CSS placiate hic se applicara a tote le stilos */', @@ -2785,14 +2853,17 @@ Le execution de illo pote compromitter le securitate de tu systema.", 'imagemaxsize' => "Dimension maxime de imagines:
    ''(pro paginas de description de files)''", 'thumbsize' => 'Dimension del miniaturas:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|pagina|paginas}}', -'file-info' => '(grandor del file: $1, typo MIME: $2)', -'file-info-size' => '($1 × $2 pixel, grandor del file: $3, typo MIME: $4)', +'file-info' => 'grandor del file: $1, typo MIME: $2', +'file-info-size' => '$1 × $2 pixel, grandor del file: $3, typo MIME: $4', 'file-nohires' => 'Non disponibile in resolution plus alte.', -'svg-long-desc' => '(File SVG, dimensiones nominal: $1 × $2 pixels, grandor del file: $3)', +'svg-long-desc' => 'File SVG, dimensiones nominal: $1 × $2 pixels, grandor del file: $3', 'show-big-image' => 'Plen resolution', 'show-big-image-thumb' => 'Dimensiones de iste previsualisation: $1 × $2 pixels', 'file-info-gif-looped' => 'repetente', 'file-info-gif-frames' => '$1 {{PLURAL:$1|photogramma|photogrammas}}', +'file-info-png-looped' => 'repetente', +'file-info-png-repeat' => 'repetite $1 {{PLURAL:$1|vice|vices}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|photogramma|photogrammas}}', # Special:NewFiles 'newimages' => 'Galeria de nove files', @@ -2948,6 +3019,7 @@ Le alteres essera initialmente celate. 'exif-gpsareainformation' => 'Nomine de area GPS', 'exif-gpsdatestamp' => 'Data GPS', 'exif-gpsdifferential' => 'Correction differential GPS', +'exif-objectname' => 'Titulo curte', # EXIF attributes 'exif-compression-1' => 'Non comprimite', @@ -3107,31 +3179,31 @@ Le alteres essera initialmente celate. 'limitall' => 'totes', # E-mail address confirmation -'confirmemail' => 'Confirmar adresse de e-mail', -'confirmemail_noemail' => 'Tu non ha configurate un adresse de e-mail valide in tu [[Special:Preferences|preferentias de usator]].', -'confirmemail_text' => '{{SITENAME}} require que tu valida tu adresse de e-mail ante que tu usa functiones involvente e-mail. +'confirmemail' => 'Confirmar adresse de e-mail', +'confirmemail_noemail' => 'Tu non ha configurate un adresse de e-mail valide in tu [[Special:Preferences|preferentias de usator]].', +'confirmemail_text' => '{{SITENAME}} require que tu valida tu adresse de e-mail ante que tu usa functiones involvente e-mail. Activa le button infra pro inviar un message de confirmation a tu adresse. Le message includera un ligamine continente un codice; visita le ligamine in tu navigator pro confirmar que tu adresse de e-mail es valide.', -'confirmemail_pending' => 'Un codice de confirmation ha ja essite inviate a te; +'confirmemail_pending' => 'Un codice de confirmation ha ja essite inviate a te; si tu ha recentemente create tu conto, es recommendate attender le arrivata de illo durante alcun minutas ante de provar requestar un nove codice.', -'confirmemail_send' => 'Inviar un codice de confirmation', -'confirmemail_sent' => 'Message de confirmation inviate.', -'confirmemail_oncreate' => 'Un codice de confirmation ha essite inviate a tu adresse de e-mail. +'confirmemail_send' => 'Inviar un codice de confirmation', +'confirmemail_sent' => 'Message de confirmation inviate.', +'confirmemail_oncreate' => 'Un codice de confirmation ha essite inviate a tu adresse de e-mail. Iste codice non es necessari pro aperir un session, ma es requirite pro activar omne functiones a base de e-mail in le wiki.', -'confirmemail_sendfailed' => '{{SITENAME}} non poteva inviar te le message de confirmation. +'confirmemail_sendfailed' => '{{SITENAME}} non poteva inviar te le message de confirmation. Per favor verifica que tu adresse de e-mail non ha characteres invalide. Le servitor de e-mail retornava: $1', -'confirmemail_invalid' => 'Codice de confirmation invalide. +'confirmemail_invalid' => 'Codice de confirmation invalide. Es possibile que le codice ha expirate.', -'confirmemail_needlogin' => 'Tu debe $1 pro confirmar tu adresse de e-mail.', -'confirmemail_success' => 'Tu adresse de e-mail ha essite confirmate. +'confirmemail_needlogin' => 'Tu debe $1 pro confirmar tu adresse de e-mail.', +'confirmemail_success' => 'Tu adresse de e-mail ha essite confirmate. Tu pote ora aperir un session e fruer te del wiki.', -'confirmemail_loggedin' => 'Tu adresse de e-mail ha ora essite confirmate.', -'confirmemail_error' => 'Un problema occurreva durante le salveguarda de tu confirmation.', -'confirmemail_subject' => 'Confirmation del adresse de e-mail pro {{SITENAME}}', -'confirmemail_body' => 'Un persona, probabilemente tu, usante le adresse IP $1, +'confirmemail_loggedin' => 'Tu adresse de e-mail ha ora essite confirmate.', +'confirmemail_error' => 'Un problema occurreva durante le salveguarda de tu confirmation.', +'confirmemail_subject' => 'Confirmation del adresse de e-mail pro {{SITENAME}}', +'confirmemail_body' => 'Un persona, probabilemente tu, usante le adresse IP $1, ha registrate un conto "$2" con iste adresse de e-mail in {{SITENAME}}. Pro confirmar que iste conto es de facto tue, e pro activar le functiones @@ -3145,8 +3217,36 @@ pro cancellar le confirmation del adresse de e-mail: $5 Iste codice de confirmation expirara a $4.', -'confirmemail_invalidated' => 'Confirmation del adresse de e-mail cancellate', -'invalidateemail' => 'Cancellar confirmation del adresse de e-mail', +'confirmemail_body_changed' => 'Un persona, probabilemente tu, usante le adresse IP $1, +ha cambiate le adresse de e-mail del conto "$2" a iste adresse in {{SITENAME}}. + +Pro confirmar que iste conto es de facto tue, e pro reactivar le functiones +de e-mail in {{SITENAME}}, visita iste ligamine in tu navigator: + +$3 + +Si le conto *non* pertine a te, seque iste ligamine +pro cancellar le confirmation del adresse de e-mail: + +$5 + +Iste codice de confirmation expirara a $4.', +'confirmemail_body_set' => 'Un persona, probabilemente tu, usante le adresse IP $1, +ha specificate que iste adresse de e-mail pertine al conto "$2" in {{SITENAME}}. + +Pro confirmar que iste conto es de facto tue, e pro reactivar le functiones +de e-mail in {{SITENAME}}, visita iste ligamine in tu navigator: + +$3 + +Si le conto *non* pertine a te, seque iste ligamine +pro cancellar le confirmation del adresse de e-mail: + +$5 + +Iste codice de confirmation expirara a $4.', +'confirmemail_invalidated' => 'Confirmation del adresse de e-mail cancellate', +'invalidateemail' => 'Cancellar confirmation del adresse de e-mail', # Scary transclusion 'scarytranscludedisabled' => '[Le transclusion interwiki es disactivate]', @@ -3186,6 +3286,7 @@ Per favor confirma que tu realmente vole recrear iste pagina.", 'table_pager_first' => 'Prime pagina', 'table_pager_last' => 'Ultime pagina', 'table_pager_limit' => 'Monstrar $1 entratas per pagina', +'table_pager_limit_label' => 'Elementos per pagina:', 'table_pager_limit_submit' => 'Ir', 'table_pager_empty' => 'Nulle resultato', @@ -3242,6 +3343,7 @@ Tu pote etiam [[Special:Watchlist/edit|usar le editor standard]].', 'version-specialpages' => 'Paginas special', 'version-parserhooks' => 'Uncinos del analysator syntactic', 'version-variables' => 'Variabiles', +'version-skins' => 'Apparentias', 'version-other' => 'Altere', 'version-mediahandlers' => 'Executores de media', 'version-hooks' => 'Uncinos', @@ -3253,6 +3355,13 @@ Tu pote etiam [[Special:Watchlist/edit|usar le editor standard]].', 'version-hook-subscribedby' => 'Subscribite per', 'version-version' => '(Version $1)', 'version-license' => 'Licentia', +'version-poweredby-credits' => "Iste wiki es actionate per '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'alteres', +'version-license-info' => 'MediaWiki es software libere; vos pote redistribuer lo e/o modificar lo sub le conditiones del Licentia Public General de GNU publicate per le Free Software Foundation; version 2 del Licentia, o (a vostre option) qualcunque version posterior. + +Iste programma es distribuite in le sperantia que illo sia utile, ma SIN GARANTIA; sin mesmo le implicite garantia de COMMERCIALISATION o APTITUDE PRO UN PROPOSITO PARTICULAR. Vide le Licentia Public General de GNU pro plus detalios. + +Vos deberea haber recipite [{{SERVER}}{{SCRIPTPATH}}/COPYING un exemplar del Licentia Public General de GNU] con iste programma; si non, scribe al Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, o [http://www.gnu.org/copyleft/gpl.html lege lo in linea].', 'version-software' => 'Software installate', 'version-software-product' => 'Producto', 'version-software-version' => 'Version', @@ -3323,6 +3432,15 @@ Entra le nomine del file sin le prefixo \"{{ns:file}}:\".", 'tags-edit' => 'modificar', 'tags-hitcount' => '$1 {{PLURAL:$1|modification|modificationes}}', +# Special:ComparePages +'comparepages' => 'Comparar paginas', +'compare-selector' => 'Comparar versiones de pagina', +'compare-page1' => 'Pagina 1', +'compare-page2' => 'Pagina 2', +'compare-rev1' => 'Version 1', +'compare-rev2' => 'Version 2', +'compare-submit' => 'Comparar', + # Database error messages 'dberr-header' => 'Iste wiki ha un problema', 'dberr-problems' => 'Pardono! Iste sito ha incontrate difficultates technic.', @@ -3339,8 +3457,13 @@ Entra le nomine del file sin le prefixo \"{{ns:file}}:\".", 'htmlform-float-invalid' => 'Le valor que tu specificava non es un numero.', 'htmlform-int-toolow' => 'Le valor que tu specificava es sub le minimo de $1', 'htmlform-int-toohigh' => 'Le valor que tu specificava es super le maximo de $1', +'htmlform-required' => 'Iste valor es obligatori', 'htmlform-submit' => 'Submitter', 'htmlform-reset' => 'Disfacer modificationes', 'htmlform-selectorother-other' => 'Altere', +# SQLite database support +'sqlite-has-fts' => '$1 con supporto de recerca de texto integre', +'sqlite-no-fts' => '$1 sin supporto de recerca de texto integre', + ); diff --git a/languages/messages/MessagesId.php b/languages/messages/MessagesId.php index 9754805a..84da5303 100644 --- a/languages/messages/MessagesId.php +++ b/languages/messages/MessagesId.php @@ -23,7 +23,7 @@ * @author לערי ריינהארט */ -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $namespaceNames = array( NS_MEDIA => 'Media', @@ -134,7 +134,7 @@ $magicWords = array( 'img_page' => array( '1', 'hal=$1', 'halaman=$1', 'hal $1', 'halaman $1', 'page=$1', 'page $1' ), 'img_upright' => array( '1', 'lurus', 'lurus=$1', 'lurus $1', 'tegak', 'tegak=$1', 'tegak $1', 'upright', 'upright=$1', 'upright $1' ), 'img_border' => array( '1', 'tepi', 'batas', 'border' ), - 'img_baseline' => array( '1', 'gada', 'garis dasar', 'baseline' ), + 'img_baseline' => array( '1', 'gada', 'garis_dasar', 'baseline' ), 'img_sub' => array( '1', 'upa', 'sub' ), 'img_top' => array( '1', 'atas', 'top' ), 'img_text_top' => array( '1', 'atek', 'atas-teks', 'text-top' ), @@ -193,7 +193,7 @@ $magicWords = array( 'special' => array( '0', 'istimewa', 'spesial', 'special' ), 'defaultsort' => array( '1', 'URUTANBAKU:', 'UBUR:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ), 'filepath' => array( '0', 'LOKASIBERKAS:', 'LOBER:', 'FILEPATH:' ), - 'tag' => array( '0', 'kata kunci', 'takun', 'tag' ), + 'tag' => array( '0', 'kata_kunci', 'takun', 'tag' ), 'hiddencat' => array( '1', '__KATEGORITERSEMBUNYI__', '__KATSEM__', '__HIDDENCAT__' ), 'pagesincategory' => array( '1', 'HALAMANDIKATEGORI', 'HALDIKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ), 'pagesize' => array( '1', 'BESARHALAMAN', 'BESMAN', 'PAGESIZE' ), @@ -206,94 +206,96 @@ $magicWords = array( ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'Pengalihan ganda', 'PengalihanGanda' ), - 'BrokenRedirects' => array( 'Pengalihan rusak', 'PengalihanRusak' ), + 'DoubleRedirects' => array( 'Pengalihan_ganda', 'PengalihanGanda' ), + 'BrokenRedirects' => array( 'Pengalihan_rusak', 'PengalihanRusak' ), 'Disambiguations' => array( 'Disambiguasi' ), - 'Userlogin' => array( 'Masuk log', 'MasukLog' ), - 'Userlogout' => array( 'Keluar log', 'KeluarLog' ), - 'CreateAccount' => array( 'Buat akun', 'BuatAkun' ), + 'Userlogin' => array( 'Masuk_log', 'MasukLog' ), + 'Userlogout' => array( 'Keluar_log', 'KeluarLog' ), + 'CreateAccount' => array( 'Buat_akun', 'BuatAkun' ), 'Preferences' => array( 'Preferensi' ), - 'Watchlist' => array( 'Daftar pantauan', 'DaftarPantauan' ), - 'Recentchanges' => array( 'Perubahan terbaru', 'PerubahanTerbaru' ), + 'Watchlist' => array( 'Daftar_pantauan', 'DaftarPantauan' ), + 'Recentchanges' => array( 'Perubahan_terbaru', 'PerubahanTerbaru', 'RC', 'PT' ), 'Upload' => array( 'Pengunggahan', 'Pemuatan', 'Unggah' ), - 'Listfiles' => array( 'Daftar berkas', 'DaftarBerkas' ), - 'Newimages' => array( 'Berkas baru', 'BerkasBaru' ), - 'Listusers' => array( 'Daftar pengguna', 'DaftarPengguna' ), - 'Listgrouprights' => array( 'Daftar hak kelompok', 'DaftarHakKelompok', 'DaftarHak' ), + 'Listfiles' => array( 'Daftar_berkas', 'DaftarBerkas' ), + 'Newimages' => array( 'Berkas_baru', 'BerkasBaru' ), + 'Listusers' => array( 'Daftar_pengguna', 'DaftarPengguna' ), + 'Listgrouprights' => array( 'Daftar_hak_kelompok', 'DaftarHakKelompok', 'DaftarHak' ), 'Statistics' => array( 'Statistik' ), - 'Randompage' => array( 'Halaman sembarang', 'HalamanSembarang' ), - 'Lonelypages' => array( 'Halaman yatim', 'Halaman tak bertuan', 'HalamanYatim', 'HalamanTakBertuan' ), - 'Uncategorizedpages' => array( 'Halaman tak terkategori', 'HalamanTakTerkategori' ), - 'Uncategorizedcategories' => array( 'Kategori tak terkategori', 'KategoriTakTerkategori' ), - 'Uncategorizedimages' => array( 'Berkas tak terkategori', 'BerkasTakTerkategori' ), - 'Uncategorizedtemplates' => array( 'Templat tak terkategori', 'TemplatTakTerkategori' ), - 'Unusedcategories' => array( 'Kategori kosong', 'KategoriKosong', 'Kategori tak terpakai', 'KategoriTakTerpakai' ), - 'Unusedimages' => array( 'Berkas tak terpakai', 'BerkasTakTerpakai', 'Berkas tak digunakan', 'BerkasTakDigunakan' ), - 'Wantedpages' => array( 'Halaman yang diinginkan', 'HalamanDiinginkan' ), - 'Wantedcategories' => array( 'Kategori yang diinginkan', 'KategoriDiinginkan' ), - 'Wantedfiles' => array( 'Berkas yang diinginkan', 'BerkasDiinginkan' ), - 'Wantedtemplates' => array( 'Templat yang diinginkan', 'TemplatDiinginkan' ), - 'Mostlinked' => array( 'Halaman paling digunakan', 'HalamanPalingDigunakan' ), - 'Mostlinkedcategories' => array( 'Kategori paling digunakan', 'KategoriPalingDigunakan' ), - 'Mostlinkedtemplates' => array( 'Templat paling digunakan', 'TemplatPalingDigunakan' ), - 'Mostimages' => array( 'Berkas paling digunakan', 'BerkasPalingDigunakan' ), - 'Mostcategories' => array( 'Kategori terbanyak', 'KategoriTerbanyak' ), - 'Mostrevisions' => array( 'Perubahan terbanyak', 'PerubahanTerbanyak' ), - 'Fewestrevisions' => array( 'Perubahan tersedikit', 'PerubahanTersedikit' ), - 'Shortpages' => array( 'Halaman pendek', 'HalamanPendek' ), - 'Longpages' => array( 'Halaman panjang', 'HalamanPanjang' ), - 'Newpages' => array( 'Halaman baru', 'HalamanBaru' ), - 'Ancientpages' => array( 'Artikel lama', 'ArtikelLama' ), - 'Deadendpages' => array( 'Halaman buntu', 'HalamanBuntu' ), - 'Protectedpages' => array( 'Halaman yang dilindungi', 'HalamanDilindungi' ), - 'Protectedtitles' => array( 'Judul yang dilindungi', 'JudulDilindungi' ), - 'Allpages' => array( 'Daftar halaman', 'DaftarHalaman' ), - 'Prefixindex' => array( 'Indeks awalan', 'IndeksAwalan' ), - 'Ipblocklist' => array( 'Daftar pemblokiran', 'DaftarPemblokiran' ), - 'Specialpages' => array( 'Halaman istimewa', 'HalamanIstimewa' ), - 'Contributions' => array( 'Kontribusi pengguna', 'KontribusiPengguna', 'Kontribusi' ), - 'Emailuser' => array( 'Surel pengguna', 'SurelPengguna' ), - 'Confirmemail' => array( 'Konfirmasi surel', 'KonfirmasiSurel' ), - 'Whatlinkshere' => array( 'Pranala balik', 'PranalaBalik' ), - 'Recentchangeslinked' => array( 'Perubahan terkait', 'PerubahanTerkait' ), - 'Movepage' => array( 'Pindahkan halaman', 'PindahkanHalaman' ), - 'Blockme' => array( 'Blokir saya', 'BlokirSaya' ), - 'Booksources' => array( 'Sumber buku', 'SumberBuku' ), - 'Categories' => array( 'Daftar kategori', 'DaftarKategori', 'Kategori' ), + 'Randompage' => array( 'Halaman_sembarang', 'HalamanSembarang' ), + 'Lonelypages' => array( 'Halaman_yatim', 'Halaman_tak_bertuan', 'HalamanYatim', 'HalamanTakBertuan' ), + 'Uncategorizedpages' => array( 'Halaman_tak_terkategori', 'HalamanTakTerkategori' ), + 'Uncategorizedcategories' => array( 'Kategori_tak_terkategori', 'KategoriTakTerkategori' ), + 'Uncategorizedimages' => array( 'Berkas_tak_terkategori', 'BerkasTakTerkategori' ), + 'Uncategorizedtemplates' => array( 'Templat_tak_terkategori', 'TemplatTakTerkategori' ), + 'Unusedcategories' => array( 'Kategori_kosong', 'KategoriKosong', 'Kategori_tak_terpakai', 'KategoriTakTerpakai' ), + 'Unusedimages' => array( 'Berkas_tak_terpakai', 'BerkasTakTerpakai', 'Berkas_tak_digunakan', 'BerkasTakDigunakan' ), + 'Wantedpages' => array( 'Halaman_yang_diinginkan', 'HalamanDiinginkan' ), + 'Wantedcategories' => array( 'Kategori_yang_diinginkan', 'KategoriDiinginkan' ), + 'Wantedfiles' => array( 'Berkas_yang_diinginkan', 'BerkasDiinginkan' ), + 'Wantedtemplates' => array( 'Templat_yang_diinginkan', 'TemplatDiinginkan' ), + 'Mostlinked' => array( 'Halaman_paling_digunakan', 'HalamanPalingDigunakan' ), + 'Mostlinkedcategories' => array( 'Kategori_paling_digunakan', 'KategoriPalingDigunakan' ), + 'Mostlinkedtemplates' => array( 'Templat_paling_digunakan', 'TemplatPalingDigunakan' ), + 'Mostimages' => array( 'Berkas_paling_digunakan', 'BerkasPalingDigunakan' ), + 'Mostcategories' => array( 'Kategori_terbanyak', 'KategoriTerbanyak' ), + 'Mostrevisions' => array( 'Perubahan_terbanyak', 'PerubahanTerbanyak' ), + 'Fewestrevisions' => array( 'Perubahan_tersedikit', 'PerubahanTersedikit' ), + 'Shortpages' => array( 'Halaman_pendek', 'HalamanPendek' ), + 'Longpages' => array( 'Halaman_panjang', 'HalamanPanjang' ), + 'Newpages' => array( 'Halaman_baru', 'HalamanBaru' ), + 'Ancientpages' => array( 'Halaman_lama', 'HalamanLama' ), + 'Deadendpages' => array( 'Halaman_buntu', 'HalamanBuntu' ), + 'Protectedpages' => array( 'Halaman_yang_dilindungi', 'HalamanDilindungi' ), + 'Protectedtitles' => array( 'Judul_yang_dilindungi', 'JudulDilindungi' ), + 'Allpages' => array( 'Daftar_halaman', 'DaftarHalaman' ), + 'Prefixindex' => array( 'Indeks_awalan', 'IndeksAwalan' ), + 'Ipblocklist' => array( 'Daftar_pemblokiran', 'DaftarPemblokiran' ), + 'Unblock' => array( 'Pembatalan_pemblokiran', 'PembatalanPemblokiran' ), + 'Specialpages' => array( 'Halaman_istimewa', 'HalamanIstimewa' ), + 'Contributions' => array( 'Kontribusi_pengguna', 'KontribusiPengguna', 'Kontribusi' ), + 'Emailuser' => array( 'Surel_pengguna', 'SurelPengguna' ), + 'Confirmemail' => array( 'Konfirmasi_surel', 'KonfirmasiSurel' ), + 'Whatlinkshere' => array( 'Pranala_balik', 'PranalaBalik' ), + 'Recentchangeslinked' => array( 'Perubahan_terkait', 'PerubahanTerkait' ), + 'Movepage' => array( 'Pindahkan_halaman', 'PindahkanHalaman' ), + 'Blockme' => array( 'Blokir_saya', 'BlokirSaya' ), + 'Booksources' => array( 'Sumber_buku', 'SumberBuku' ), + 'Categories' => array( 'Daftar_kategori', 'DaftarKategori', 'Kategori' ), 'Export' => array( 'Ekspor' ), 'Version' => array( 'Versi' ), - 'Allmessages' => array( 'Pesan sistem', 'PesanSistem' ), + 'Allmessages' => array( 'Pesan_sistem', 'PesanSistem' ), 'Log' => array( 'Catatan' ), - 'Blockip' => array( 'Blokir pengguna', 'BlokirPengguna' ), - 'Undelete' => array( 'Pembatalan penghapusan', 'PembatalanPenghapusan' ), + 'Blockip' => array( 'Blokir_pengguna', 'BlokirPengguna' ), + 'Undelete' => array( 'Pembatalan_penghapusan', 'PembatalanPenghapusan' ), 'Import' => array( 'Impor' ), - 'Lockdb' => array( 'Kunci basis data', 'KunciBasisData' ), - 'Unlockdb' => array( 'Buka kunci basis data', 'BukaKunciBasisData' ), - 'Userrights' => array( 'Hak pengguna', 'HakPengguna' ), - 'MIMEsearch' => array( 'Pencarian MIME', 'PencarianMIME' ), - 'FileDuplicateSearch' => array( 'Pencarian berkas duplikat', 'PencarianBerkasDuplikat' ), - 'Unwatchedpages' => array( 'Halaman tak terpantau', 'HalamanTakTerpantau' ), - 'Listredirects' => array( 'Daftar pengalihan', 'DaftarPengalihan' ), - 'Revisiondelete' => array( 'Hapus revisi', 'HapusRevisi' ), - 'Unusedtemplates' => array( 'Templat tak terpakai', 'TemplatTakTerpakai' ), - 'Randomredirect' => array( 'Pengalihan sembarang', 'PengalihanSembarang' ), - 'Mypage' => array( 'Halaman saya', 'HalamanSaya' ), - 'Mytalk' => array( 'Pembicaraan saya', 'PembicaraanSaya' ), - 'Mycontributions' => array( 'Kontribusi saya', 'KontribusiSaya' ), - 'Listadmins' => array( 'Daftar pengurus', 'DaftarPengurus' ), - 'Listbots' => array( 'Daftar bot', 'DaftarBot' ), - 'Popularpages' => array( 'Halaman populer', 'HalamanPopuler' ), + 'Lockdb' => array( 'Kunci_basis_data', 'KunciBasisData' ), + 'Unlockdb' => array( 'Buka_kunci_basis_data', 'BukaKunciBasisData' ), + 'Userrights' => array( 'Hak_pengguna', 'HakPengguna' ), + 'MIMEsearch' => array( 'Pencarian_MIME', 'PencarianMIME' ), + 'FileDuplicateSearch' => array( 'Pencarian_berkas_duplikat', 'PencarianBerkasDuplikat' ), + 'Unwatchedpages' => array( 'Halaman_tak_terpantau', 'HalamanTakTerpantau' ), + 'Listredirects' => array( 'Daftar_pengalihan', 'DaftarPengalihan' ), + 'Revisiondelete' => array( 'Hapus_revisi', 'HapusRevisi' ), + 'Unusedtemplates' => array( 'Templat_tak_terpakai', 'TemplatTakTerpakai' ), + 'Randomredirect' => array( 'Pengalihan_sembarang', 'PengalihanSembarang' ), + 'Mypage' => array( 'Halaman_saya', 'HalamanSaya' ), + 'Mytalk' => array( 'Pembicaraan_saya', 'PembicaraanSaya' ), + 'Mycontributions' => array( 'Kontribusi_saya', 'KontribusiSaya' ), + 'Listadmins' => array( 'Daftar_pengurus', 'DaftarPengurus' ), + 'Listbots' => array( 'Daftar_bot', 'DaftarBot' ), + 'Popularpages' => array( 'Halaman_populer', 'HalamanPopuler' ), 'Search' => array( 'Pencarian', 'Cari' ), - 'Resetpass' => array( 'Ganti sandi', 'GantiSandi' ), - 'Withoutinterwiki' => array( 'Tanpa interwiki', 'TanpaInterwiki' ), - 'MergeHistory' => array( 'Riwayat penggabungan', 'RiwayatPenggabungan' ), - 'Filepath' => array( 'Lokasi arsip', 'LokasiArsip' ), - 'Invalidateemail' => array( 'Batalkan validasi surel', 'BatalkanValidasiSurel' ), - 'Blankpage' => array( 'Halaman kosong', 'HalamanKosong' ), - 'LinkSearch' => array( 'Pencarian pranala', 'PencarianPranala' ), - 'DeletedContributions' => array( 'Kontribusi yang dihapus', 'KontribusiDihapus' ), + 'Resetpass' => array( 'Ganti_sandi', 'GantiSandi' ), + 'Withoutinterwiki' => array( 'Tanpa_interwiki', 'TanpaInterwiki' ), + 'MergeHistory' => array( 'Riwayat_penggabungan', 'RiwayatPenggabungan' ), + 'Filepath' => array( 'Lokasi_arsip', 'LokasiArsip' ), + 'Invalidateemail' => array( 'Batalkan_validasi_surel', 'BatalkanValidasiSurel' ), + 'Blankpage' => array( 'Halaman_kosong', 'HalamanKosong' ), + 'LinkSearch' => array( 'Pranala_luar', 'PranalaLuar', 'Pencarian_pranala', 'PencarianPranala' ), + 'DeletedContributions' => array( 'Kontribusi_yang_dihapus', 'KontribusiDihapus' ), 'Tags' => array( 'Tag' ), - 'Activeusers' => array( 'Pengguna aktif', 'PenggunaAktif' ), + 'Activeusers' => array( 'Pengguna_aktif', 'PenggunaAktif' ), + 'ComparePages' => array( 'Bandingkan_halaman', 'BandingkanHalaman' ), ); $messages = array( @@ -312,8 +314,7 @@ $messages = array( 'tog-editsection' => 'Fungsikan penyuntingan subbagian melalui pranala [sunting]', 'tog-editsectiononrightclick' => 'Fungsikan penyuntingan subbagian dengan mengeklik kanan pada judul bagian (JavaScript)', 'tog-showtoc' => 'Perlihatkan daftar isi (untuk halaman yang mempunyai lebih dari 3 subbagian)', -'tog-rememberpassword' => 'Ingat kata sandi saya di komputer ini', -'tog-editwidth' => 'Perlebar kotak suntingan hingga seluruh layar', +'tog-rememberpassword' => 'Ingat kata sandi saya di peramban ini (selama $1 {{PLURAL:$1|hari|hari}})', 'tog-watchcreations' => 'Tambahkan halaman yang saya buat ke daftar pantauan', 'tog-watchdefault' => 'Tambahkan halaman yang saya sunting ke daftar pantauan', 'tog-watchmoves' => 'Tambahkan halaman yang saya pindahkan ke daftar pantauan', @@ -346,6 +347,7 @@ $messages = array( 'tog-ccmeonemails' => 'Kirimkan saya salinan surel yang saya kirimkan ke orang lain', 'tog-diffonly' => 'Jangan tampilkan isi halaman di bawah perbedaan suntingan', 'tog-showhiddencats' => 'Tampilkan kategori tersembunyi', +'tog-noconvertlink' => 'Matikan konversi judul pranala', 'tog-norollbackdiff' => 'Jangan tampilkan perbedaan setelah melakukan pengembalian', 'underline-always' => 'Selalu', @@ -461,31 +463,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Bagian baru', -'vector-action-delete' => 'Hapus', -'vector-action-move' => 'Pindahkan', -'vector-action-protect' => 'Lindungi', -'vector-action-undelete' => 'Pembatalan penghapusan', -'vector-action-unprotect' => 'Pelindungan', -'vector-namespace-category' => 'Kategori', -'vector-namespace-help' => 'Bantuan', -'vector-namespace-image' => 'Berkas', -'vector-namespace-main' => 'Halaman', -'vector-namespace-media' => 'Media', -'vector-namespace-mediawiki' => 'Pesan', -'vector-namespace-project' => 'Proyek', -'vector-namespace-special' => 'Istimewa', -'vector-namespace-talk' => 'Diskusi', -'vector-namespace-template' => 'Templat', -'vector-namespace-user' => 'Pengguna', -'vector-view-create' => 'Buat', -'vector-view-edit' => 'Sunting', -'vector-view-history' => 'Versi terdahulu', -'vector-view-view' => 'Baca', -'vector-view-viewsource' => 'Lihat sumber', -'actions' => 'Tindakan', -'namespaces' => 'Ruang nama', -'variants' => 'Varian', +'vector-action-addsection' => 'Bagian baru', +'vector-action-delete' => 'Hapus', +'vector-action-move' => 'Pindahkan', +'vector-action-protect' => 'Lindungi', +'vector-action-undelete' => 'Pembatalan penghapusan', +'vector-action-unprotect' => 'Pelindungan', +'vector-simplesearch-preference' => 'Aktifkan pencarian saran yang disempurnakan (hanya kulit Vector)', +'vector-view-create' => 'Buat', +'vector-view-edit' => 'Sunting', +'vector-view-history' => 'Versi terdahulu', +'vector-view-view' => 'Baca', +'vector-view-viewsource' => 'Lihat sumber', +'actions' => 'Tindakan', +'namespaces' => 'Ruang nama', +'variants' => 'Varian', 'errorpagetitle' => 'Kesalahan', 'returnto' => 'Kembali ke $1.', @@ -546,6 +538,9 @@ Terlalu banyak pengguna berusaha melihat halaman ini. Tunggu sebentar sebelum Anda mencoba lagi mengakses halaman ini. $1', +'pool-timeout' => 'Lewat waktu menunggu kunci', +'pool-queuefull' => 'Kumpulan antrean penuh', +'pool-errorunknown' => 'Kesalahan yang tidak diketahui', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Tentang {{SITENAME}}', @@ -599,6 +594,7 @@ $1', 'site-atom-feed' => 'Umpan Atom $1', 'page-rss-feed' => 'Umpan RSS "$1"', 'page-atom-feed' => 'Umpan Atom "$1"', +'feed-atom' => 'Atom', 'red-link-title' => '$1 (halaman belum tersedia)', # Short words for each namespace, by default used in the namespace tab in monobook @@ -703,7 +699,8 @@ Akun Anda telah dibuat. Jangan lupa mengatur konfigurasi [[Special:Preferences|p 'yourname' => 'Nama pengguna:', 'yourpassword' => 'Kata sandi:', 'yourpasswordagain' => 'Ulangi kata sandi:', -'remembermypassword' => 'Ingat kata sandi saya di komputer ini', +'remembermypassword' => 'Ingat kata sandi saya di komputer ini (selama $1 {{PLURAL:$1|hari|hari}})', +'securelogin-stick-https' => 'Tetap terhubung ke HTTPS setelah masuk', 'yourdomainname' => 'Domain Anda:', 'externaldberror' => 'Telah terjadi kesalahan otentikasi basis data eksternal atau Anda tidak diizinkan melakukan kemaskini terhadap akun eksternal Anda.', 'login' => 'Masuk log', @@ -720,6 +717,7 @@ Akun Anda telah dibuat. Jangan lupa mengatur konfigurasi [[Special:Preferences|p 'gotaccount' => "Sudah terdaftar sebagai pengguna? '''$1'''.", 'gotaccountlink' => 'Masuk log', 'createaccountmail' => 'melalui surel', +'createaccountreason' => 'Alasan:', 'badretype' => 'Kata sandi yang Anda masukkan salah.', 'userexists' => 'Nama pengguna yang Anda pilih sudah dipakai oleh orang lain. Silakan pilih nama yang lain.', @@ -741,6 +739,7 @@ Silakan periksa kembali ejaan Anda.', 'wrongpasswordempty' => 'Anda tidak memasukkan kata sandi. Silakan coba lagi.', 'passwordtooshort' => 'Kata sandi paling tidak harus terdiri dari {{PLURAL:$1|1 karakter|$1 karakter}}.', 'password-name-match' => 'Kata sandi Anda harus berbeda dari nama pengguna Anda.', +'password-login-forbidden' => 'Penggunaan nama pengguna dan sandi ini telah dilarang.', 'mailmypassword' => 'Kirim kata sandi baru', 'passwordremindertitle' => 'Peringatan kata sandi dari {{SITENAME}}', 'passwordremindertext' => 'Seseorang (mungkin Anda, dari alamat IP $1) meminta kata sandi baru untuk {{SITENAME}} ($4). Kata sandi sementara untuk pengguna "$2" telah dibuatkan dan diset menjadi "$3". Jika memang Anda yang mengajukan permintaan ini, Anda perlu masuk log dan memilih kata sandi baru sekarang. Kata sandi sementara Anda akan kedaluwarsa dalam waktu {{PLURAL:$5|satu hari|$5 hari}}. @@ -776,6 +775,9 @@ Silakan menunggu sebelum mencoba lagi.', 'loginlanguagelabel' => 'Bahasa: $1', 'suspicious-userlogout' => 'Permintaan Anda untuk keluar log ditolak karena tampaknya dikirim oleh penjelajah yang rusak atau proksi penyinggah.', +# E-mail sending +'php-mail-error-unknown' => 'Kesalahan yang tidak dikenal dalam fungsi mail() PHP', + # Password reset dialog 'resetpass' => 'Ganti kata sandi', 'resetpass_announce' => 'Anda telah masuk log dengan kode sementara yang dikirim melalui surel. Untuk melanjutkan, Anda harus memasukkan kata sandi baru di sini:', @@ -827,9 +829,10 @@ Anda mungkin telah berhasil mengganti kata sandi Anda atau telah meminta kata sa 'showlivepreview' => 'Pratayang langsung', 'showdiff' => 'Lihat perubahan', 'anoneditwarning' => 'Anda tidak terdaftar masuk. Alamat IP Anda akan tercatat dalam sejarah (versi terdahulu) halaman ini.', +'anonpreviewwarning' => "''Anda belum masuk log. Menyimpan halaman akan menyebabkan alamat IP Anda tercatat pada riwayat suntingan laman ini.''", 'missingsummary' => "'''Peringatan:''' Anda tidak memasukkan ringkasan penyuntingan. Jika Anda kembali menekan tombol Simpan, suntingan Anda akan disimpan tanpa ringkasan penyuntingan.", 'missingcommenttext' => 'Harap masukkan komentar di bawah ini.', -'missingcommentheader' => "'''Peringatan:''' Anda belum memberikan subjek atau judul untuk komentar Anda. Jika Anda kembali menekan Simpan, suntingan Anda akan disimpan tanpa komentar tersebut.", +'missingcommentheader' => "''Peringatan:''' Anda belum memberikan subjek atau judul untuk komentar Anda. Jika Anda kembali menekan \"{{int:savearticle}}\", suntingan Anda akan disimpan tanpa komentar tersebut.", 'summary-preview' => 'Pratayang ringkasan:', 'subject-preview' => 'Pratayang subyek/tajuk:', 'blockedtitle' => 'Pengguna diblokir', @@ -902,7 +905,11 @@ Entri log pemblokiran terakhir tersedia di bawah ini sebagai rujukan.', 'usercsspreview' => "'''Ingatlah bahwa Anda sedang menampilkan pratayang dari CSS Anda. Pratayang ini belum disimpan!'''", 'userjspreview' => "'''Ingatlah bahwa yang Anda lihat hanyalah pratayang JavaScript Anda, dan bahwa pratayang tersebut belum disimpan!'''", -'userinvalidcssjstitle' => "'''Peringatan:''' Kulit \"\$1\" tidak ditemukan. Harap diingat bahwa halaman .css dan .js menggunakan huruf kecil, contoh {{ns:user}}:Foo/monobook.css dan bukannya {{ns:user}}:Foo/Monobook.css.", +'sitecsspreview' => "'''Ingatlah bahwa Anda hanya menampilkan pratayang dari CSS ini.''' +'''Perubahan belum disimpan!'''", +'sitejspreview' => "'''Ingatlah bahwa Anda hanya menampilkan pratayang dari kode JavaScript ini.''' +'''Perubahan belum disimpan!'''", +'userinvalidcssjstitle' => "'''Peringatan:''' Kulit \"\$1\" tidak ditemukan. Harap diingat bahwa halaman .css dan .js menggunakan huruf kecil, contoh {{ns:user}}:Foo/vector.css dan bukannya {{ns:user}}:Foo/Vector.css.", 'updated' => '(Diperbarui)', 'note' => "'''Catatan:'''", 'previewnote' => "'''Ingatlah bahwa ini hanyalah pratayang yang belum disimpan!'''", @@ -938,9 +945,6 @@ Jika Anda menyimpannya, perubahan-perubahan yang dibuat sejak revisi ini akan hi 'yourdiff' => 'Perbedaan', 'copyrightwarning' => "Perhatikan bahwa semua kontribusi terhadap {{SITENAME}} dianggap dilisensikan sesuai dengan $2 (lihat $1 untuk informasi lebih lanjut). Jika Anda tidak ingin tulisan Anda disunting dan disebarkan ke halaman web yang lain, jangan kirimkan ke sini.
    Anda juga berjanji bahwa ini adalah hasil karya Anda sendiri, atau disalin dari sumber milik umum atau sumber bebas yang lain. '''JANGAN KIRIMKAN KARYA YANG DILINDUNGI HAK CIPTA TANPA IZIN!'''", 'copyrightwarning2' => "Perhatikan bahwa semua kontribusi terhadap {{SITENAME}} dapat disunting, diubah, atau dihapus oleh penyumbang lainnya. Jika Anda tidak ingin tulisan Anda disunting orang lain, jangan kirimkan ke sini.
    Anda juga berjanji bahwa ini adalah hasil karya Anda sendiri, atau disalin dari sumber milik umum atau sumber bebas yang lain (lihat $1 untuk informasi lebih lanjut). '''JANGAN KIRIMKAN KARYA YANG DILINDUNGI HAK CIPTA TANPA IZIN!'''", -'longpagewarning' => "'''PERINGATAN: Halaman ini panjangnya adalah $1 kilobita; -beberapa penjelajah web lawas mungkin mengalami masalah dalam menyunting halaman yang panjangnya 32 kb atau lebih. -Harap pertimbangkan untuk memecah halaman menjadi beberapa bagian yang lebih kecil.'''", 'longpageerror' => "'''KESALAHAN: Teks yang Anda kirimkan sebesar $1 kilobita, yang berarti lebih besar dari jumlah maksimum $2 kilobita. Teks tidak dapat disimpan.'''", 'readonlywarning' => "'''PERINGATAN: Basis data sedang dikunci karena pemeliharaan, sehingga saat ini Anda tidak dapat menyimpan hasil suntingan Anda. Anda mungkin perlu menyalin teks suntingan Anda ini dan menyimpannya ke sebuah berkas teks dan memuatkannya lagi setelah pemeliharaan selesai.''' @@ -1115,6 +1119,8 @@ $1", 'logdelete-failure' => "'''Aturan penyembunyian tidak dapat diterapkan:''' $1", 'revdel-restore' => 'Ubah tampilan', +'revdel-restore-deleted' => 'Suntingan yang telah dihapus', +'revdel-restore-visible' => 'tampilan revisi', 'pagehist' => 'Versi terdahulu halaman', 'deletedhist' => 'Sejarah yang dihapus', 'revdelete-content' => 'konten', @@ -1183,11 +1189,13 @@ Pastikan bahwa perubahan ini tetap mempertahankan kontinuitas versi terdahulu ha # Diffs 'history-title' => 'Riwayat revisi dari "$1"', 'difference' => '(Perbedaan antarrevisi)', +'difference-multipage' => '(Perbedaan antarhalaman)', 'lineno' => 'Baris $1:', 'compareselectedversions' => 'Bandingkan versi terpilih', 'showhideselectedversions' => 'Tampilkan/sembunyikan versi terpilih', 'editundo' => 'batalkan', -'diff-multi' => '({{PLURAL:$1|Satu|$1}} revisi antara tak ditampilkan.)', +'diff-multi' => '({{PLURAL:$1|Satu|$1}} revisi antara oleh {{PLURAL:$2|satu|$2}} pengguna tak ditampilkan)', +'diff-multi-manyusers' => '({{PLURAL:$1|Satu|$1}} revisi antara oleh lebih dari $2 {{PLURAL:$2|satu|$2}} pengguna tak ditampilkan)', # Search results 'searchresults' => 'Hasil pencarian', @@ -1222,6 +1230,7 @@ Pastikan bahwa perubahan ini tetap mempertahankan kontinuitas versi terdahulu ha 'searchprofile-everything-tooltip' => 'Pencarian di seluruh situs (termasuk halaman pembicaraan)', 'searchprofile-advanced-tooltip' => 'Pencarian di ruang nama tertentu', 'search-result-size' => '$1 ({{PLURAL:$2|1 kata|$2 kata}})', +'search-result-category-size' => '{{PLURAL:$1|1 anggota|$1 anggota}} ({{PLURAL:$2|1 subkategori|$2 subkategori}}, {{PLURAL:$3|1 berkas|$3 berkas}})', 'search-result-score' => 'Relevansi: $1%', 'search-redirect' => '(pengalihan $1)', 'search-section' => '(bagian $1)', @@ -1298,6 +1307,7 @@ Perlu diingat bahwa indeks Google untuk konten {{SITENAME}} mungkin belum mencak 'contextlines' => 'Baris ditampilkan per hasil:', 'contextchars' => 'Karakter untuk konteks per baris:', 'stub-threshold' => 'Ambang batas untuk format pranala rintisan:', +'stub-threshold-disabled' => 'Dinonaktifkan', 'recentchangesdays' => 'Jumlah hari yang ditampilkan di perubahan terbaru:', 'recentchangesdays-max' => '(maksimum $1 {{PLURAL:$1|hari|hari}})', 'recentchangescount' => 'Standar jumlah suntingan yang ditampilkan:', @@ -1330,6 +1340,7 @@ Berikut ini adalah nilai acak yang dapat Anda gunakan: $1', 'prefs-files' => 'Berkas', 'prefs-custom-css' => 'CSS pribadi', 'prefs-custom-js' => 'JS pribadi', +'prefs-common-css-js' => 'CSS/JS berbagi untuk semua kulit:', 'prefs-reset-intro' => 'Anda dapat menggunakan halaman ini untuk mengembalikan preferensi Anda ke setelan baku situs. Pengembalian preferensi tidak dapat dibatalkan.', 'prefs-emailconfirm-label' => 'Konfirmasi surel:', @@ -1368,9 +1379,15 @@ Anda juga dapat memilih untuk memungkinkan orang lain menghubungi Anda melalui h 'prefs-advancedrendering' => 'Opsi lanjutan', 'prefs-advancedsearchoptions' => 'Opsi lanjutan', 'prefs-advancedwatchlist' => 'Opsi lanjutan', -'prefs-display' => 'Pilihan tampilan', +'prefs-displayrc' => 'Pilihan tampilan', +'prefs-displaysearchoptions' => 'Pilihan tampilan', +'prefs-displaywatchlist' => 'Pilihan tampilan', 'prefs-diffs' => 'Beda', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Alamat surel tampaknya sah', +'email-address-validity-invalid' => 'Masukkan alamat surel yang sah', + # User rights 'userrights' => 'Manajemen hak pengguna', 'userrights-lookup-user' => 'Mengatur kelompok pengguna', @@ -1454,6 +1471,7 @@ Anda juga dapat memilih untuk memungkinkan orang lain menghubungi Anda melalui h 'right-hideuser' => 'Memblokir nama pengguna dan menyembunyikannya dari publik', 'right-ipblock-exempt' => 'Mengabaikan pemblokiran IP, pemblokiran otomatis, dan rentang pemblokiran', 'right-proxyunbannable' => 'Mengabaikan pemblokiran otomatis atas proksi', +'right-unblockself' => 'Melepaskan blokir diri sendiri', 'right-protect' => 'Mengubah tingkat pelindungan dan menyunting halaman yang dilindungi', 'right-editprotected' => 'Menyunting halaman yang dilindungi (tanpa pelindungan runtun)', 'right-editinterface' => 'Menyunting antarmuka pengguna', @@ -1476,7 +1494,6 @@ Anda juga dapat memilih untuk memungkinkan orang lain menghubungi Anda melalui h 'right-siteadmin' => 'Mengunci dan membuka kunci basis data', 'right-reset-passwords' => 'Mereset kata sandi pengguna lain', 'right-override-export-depth' => 'Ekspor halaman termasuk halaman-halaman terkait hingga kedalaman 5', -'right-versiondetail' => 'Melihat informasi versi piranti lunak yang lebih lengkap', 'right-sendemail' => 'Mengirim surel ke pengguna lain', # User rights log @@ -1528,14 +1545,9 @@ Anda juga dapat memilih untuk memungkinkan orang lain menghubungi Anda melalui h 'recentchangestext' => "Temukan perubahan terbaru dalam wiki di halaman ini. Keterangan: (beda) = perubahan, (versi) = sejarah revisi, '''B''' = halaman baru, '''k''' = suntingan kecil, '''b''' = suntingan bot, (± ''bita'') = jumlah penambahan/pengurangan isi, → = suntingan bagian, ← = ringkasan otomatis. ----", 'recentchanges-feed-description' => 'Temukan perubahan terbaru dalam wiki di umpan ini.', -'recentchanges-label-legend' => 'Legenda: $1.', -'recentchanges-legend-newpage' => '$1 - halaman baru', 'recentchanges-label-newpage' => 'Suntingan ini membuat halaman baru', -'recentchanges-legend-minor' => '$1 - suntingan kecil', 'recentchanges-label-minor' => 'Ini adalah suntingan kecil', -'recentchanges-legend-bot' => '$1 - suntingan bot', 'recentchanges-label-bot' => 'Suntingan ini dilakukan oleh bot', -'recentchanges-legend-unpatrolled' => '$1 - suntingan belum terpatroli', 'recentchanges-label-unpatrolled' => 'Suntingan ini belum terpatroli', 'rcnote' => "Berikut adalah {{PLURAL:$1|'''1'''|'''$1'''}} perubahan terbaru dalam {{PLURAL:$2|'''1''' hari|'''$2''' hari}} terakhir, sampai $4 pukul $5.", 'rcnotefrom' => 'Di bawah ini adalah perubahan sejak $2 (ditampilkan sampai $1 perubahan).', @@ -1581,6 +1593,9 @@ Anda juga dapat memilih untuk memungkinkan orang lain menghubungi Anda melalui h 'upload_directory_missing' => 'Direktori pemuatan ($1) tidak ditemukan dan tidak dapat dibuat oleh server web.', 'upload_directory_read_only' => 'Direktori pemuatan ($1) tidak dapat ditulis oleh server web.', 'uploaderror' => 'Kesalahan pemuatan', +'upload-recreate-warning' => "'''Peringatan: Berkas dengan nama itu telah dihapus atau dipindahkan.''' + +Log penghapusan dan pemindahan laman ini adalah sebagai berikut:", 'uploadtext' => "Gunakan formulir di bawah untuk mengunggah berkas. Untuk menampilkan atau mencari berkas yang sebelumnya dimuat, gunakan [[Special:FileList|daftar berkas]]. Pengunggahan (ulang) juga tercatat dalam [[Special:Log/upload|log pengunggahan]], sementara penghapusan tercatat dalam [[Special:Log/delete|log penghapusan]]. @@ -1615,6 +1630,17 @@ Lihat [[Special:NewFiles|galeri berkas baru]] untuk tampilan visual.', 'filetype-banned-type' => "'''\".\$1\"''' termasuk dalam jenis berkas yang tidak diijinkan. {{PLURAL:\$3|Jenis berkas yang diijinkan adalah|Jenis berkas yang diijinkan adalah}} \$2.", 'filetype-missing' => 'Berkas tak memiliki ekstensi (misalnya ".jpg").', +'empty-file' => 'Berkas yang Anda kirim kosong.', +'file-too-large' => 'Ukuran berkas yang Anda muat terlalu besar.', +'filename-tooshort' => 'Nama berkas terlalu pendek.', +'filetype-banned' => 'Jenis berkas ini dilarang.', +'verification-error' => 'Berkas ini tidak lulus verifikasi.', +'hookaborted' => 'Modifikasi yang coba Anda lakukan dibatalkan oleh suatu kaitan ekstensi.', +'illegal-filename' => 'Nama berkas tidak diperbolehkan.', +'overwrite' => 'Tidak diizinkan untuk menimpa berkas yang telah ada.', +'unknown-error' => 'Terjadi sebuah kesalahan yang tidak diketahui.', +'tmp-create-error' => 'Tidak dapat membuat berkas sementara.', +'tmp-write-error' => 'Kesalahan sewaktu menulis berkas sementara.', 'large-file' => 'Ukuran berkas disarankan untuk tidak melebihi $1 bita; berkas ini berukuran $2 bita.', 'largefileserver' => 'Berkas ini lebih besar dari pada yang diizinkan server.', 'emptyfile' => 'Berkas yang Anda muatkan kelihatannya kosong. Hal ini mungkin disebabkan karena adanya kesalahan ketik pada nama berkas. Silakan pastikan apakah Anda benar-benar ingin memuatkan berkas ini.', @@ -1638,13 +1664,14 @@ Jika Anda masih ingin memuat berkas Anda, silakan kembali dan gunakan nama baru. Jika Anda tetap ingin memuatkan berkas Anda, harap kembali dan gunakan nama lain. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Berkas ini berduplikasi dengan {{PLURAL:$1|berkas|berkas-berkas}} berikut:', 'file-deleted-duplicate' => 'Sebuah berkas yang identik dengan berkas ini ([[:$1]]) sudah pernah dihapuskan sebelumnya. Anda harus memeriksa sejarah penghapusan berkas tersebut sebelum melanjutkan memuat ulang berkas ini.', -'successfulupload' => 'Berhasil dimuat', 'uploadwarning' => 'Peringatan pemuatan', 'uploadwarning-text' => 'Mohon perbaiki keterangan berkas di bawah dan coba lagi.', 'savefile' => 'Simpan berkas', 'uploadedimage' => 'memuat "[[$1]]"', 'overwroteimage' => 'memuat versi baru dari "[[$1]]"', 'uploaddisabled' => 'Maaf, fasilitas pemuatan dimatikan.', +'copyuploaddisabled' => 'Pengunggahan dengan URL dimatikan.', +'uploadfromurl-queued' => 'Pengunggahan Anda telah terantri.', 'uploaddisabledtext' => 'Pemuatan berkas tidak diizinkan.', 'php-uploaddisabledtext' => 'Pemuatan berkas dimatikan di PHP. Silakan cek pengaturan file_uploads.', 'uploadscripted' => 'Berkas ini mengandung HTML atau kode yang dapat diinterpretasikan dengan keliru oleh penjelajah web.', @@ -1663,6 +1690,14 @@ Jika Anda tetap ingin memuatkan berkas Anda, harap kembali dan gunakan nama lain Anda harus mempertimbangkan apakah perlu untuk melanjutkan pemuatan berkas ini. Log penghapusan berkas adalah sebagai berikut:", 'filename-bad-prefix' => "Nama berkas yang Anda muat diawali dengan '''\"\$1\"''', yang merupakan nama non-deskriptif yang biasanya diberikan secara otomatis oleh kamera digital. Harap pilih nama lain yang lebih deskriptif untuk berkas Anda.", +'upload-success-subj' => 'Berhasil dimuat', +'upload-success-msg' => 'Pengunggahan Anda dari [$2] berhasil. Hasilnya tersedia di sini: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Masalah pengunggahan', +'upload-failure-msg' => 'Ada masalah dengan unggahan Anda dari [$2]: + +$1', +'upload-warning-subj' => 'Peringatan pemuatan', +'upload-warning-msg' => 'Terjadi masalah dengan unggahan Anda dari [$2]. Anda dapat kembali ke [[Special:Upload/stash/$1|formulir pengunggahan]] untuk memerbaiki masalah ini.', 'upload-proto-error' => 'Protokol tak tepat', 'upload-proto-error-text' => 'Pemuatan jarak jauh membutuhkan URL yang diawali dengan http:// atau ftp://.', @@ -1724,6 +1759,7 @@ Klik pada kepala kolom untuk mengubah urutan.', 'listfiles_search_for' => 'Cari nama berkas:', 'imgfile' => 'berkas', 'listfiles' => 'Daftar berkas', +'listfiles_thumb' => 'Miniatur', 'listfiles_date' => 'Tanggal', 'listfiles_name' => 'Nama', 'listfiles_user' => 'Pengguna', @@ -1767,6 +1803,7 @@ Deskripsi dari [$2 halaman deskripsinya] ditunjukkan di bawah ini.', 'uploadnewversion-linktext' => 'Muatkan versi yang lebih baru dari berkas ini', 'shared-repo-from' => 'dari $1', 'shared-repo' => 'suatu repositori bersama', +'filepage.css' => '/* CSS yang ditempatkan di sini disertakan pada halaman deskripsi berkas, juga disertakan pada klien wiki asing */', # File reversion 'filerevert' => 'Kembalikan $1', @@ -1811,7 +1848,7 @@ Deskripsi dari [$2 halaman deskripsinya] ditunjukkan di bawah ini.', # Unused templates 'unusedtemplates' => 'Templat yang tak digunakan', -'unusedtemplatestext' => 'Daftar berikut adalah semua halaman pada ruang nama {{ns:template}} yang tidak dipakai di halaman manapun. +'unusedtemplatestext' => 'Daftar berikut adalah semua halaman pada ruang nama {{ns:template}} yang tidak dipakai di halaman mana pun. Cek dahulu pranala lain ke templat tersebut sebelum menghapusnya.', 'unusedtemplateswlh' => 'pranala lain', @@ -1837,8 +1874,8 @@ Cek dahulu pranala lain ke templat tersebut sebelum menghapusnya.', 'statistics-edits' => 'Jumlah suntingan sejak {{SITENAME}} dimulai', 'statistics-edits-average' => 'Rata-rata suntingan per halaman', 'statistics-views-total' => 'Jumlah penampilan halaman', +'statistics-views-total-desc' => 'Tampilan ke halaman yang tidak ada dan halaman khusus yang tidak dimasukkan', 'statistics-views-peredit' => 'Jumlah penampilan per suntingan', -'statistics-jobqueue' => 'Jumlah [http://www.mediawiki.org/wiki/Manual:Job_queue antrean pekerjaan]', 'statistics-users' => 'Jumlah [[Special:ListUsers|pengguna terdaftar]]', 'statistics-users-active' => 'Jumlah pengguna aktif', 'statistics-users-active-desc' => 'Pengguna yang telah melakukan suatu aktivitas dalam {{PLURAL:$1|sehari|$1 hari}} terakhir.', @@ -1851,9 +1888,9 @@ Halaman-halaman tersebut seharusnya berpaut ke topik-topik yang sesuai.
    Suatu halaman dianggap sebagai halaman disambiguasi apabila halaman tersebut menggunakan templat yang terhubung ke [[MediaWiki:Disambiguationspage]].", 'doubleredirects' => 'Pengalihan ganda', -'doubleredirectstext' => 'Halaman ini memuat daftar halaman yang dialihkan ke halaman pengalihan yang lain. +'doubleredirectstext' => 'Halaman ini memuat daftar halaman yang dialihkan ke halaman pengalihan yang lain. Setiap baris memuat pranala ke pengalihan pertama dan pengalihan kedua serta target dari pengalihan kedua yang umumnya adalah halaman yang "sebenarnya". Halaman peralihan pertama seharusnya dialihkan ke halaman yang bukan merupakan halaman peralihan. -Nama yang telah dicoret berarti telah dibetulkan.', +Nama yang telah dicoret berarti telah dibetulkan.', 'double-redirect-fixed-move' => '[[$1]] telah dipindahkan menjadi halaman peralihan ke [[$2]]', 'double-redirect-fixer' => 'Revisi pengalihan', @@ -1876,9 +1913,11 @@ Nama yang telah dicoret berarti telah dibetulkan.', 'nmembers' => '$1 {{PLURAL:$1|isi|isi}}', 'nrevisions' => '$1 {{PLURAL:$1|revisi|revisi}}', 'nviews' => 'dilihat $1 {{PLURAL:$1|kali|kali}}', +'nimagelinks' => 'Digunakan pada $1 {{PLURAL:$1|halaman|halaman}}', +'ntransclusions' => 'digunakan pada $1 {{PLURAL:$1|halaman|halaman}}', 'specialpage-empty' => 'Tak ada yang perlu dilaporkan.', 'lonelypages' => 'Halaman tanpa pranala balik', -'lonelypagestext' => 'Halaman-halaman berikut tidak memiliki pranala dari atau ditransklusikan ke halaman manapun di {{SITENAME}}.', +'lonelypagestext' => 'Halaman-halaman berikut tidak memiliki pranala dari atau ditransklusikan ke halaman mana pun di {{SITENAME}}.', 'uncategorizedpages' => 'Halaman yang tak terkategori', 'uncategorizedcategories' => 'Kategori yang tak terkategori', 'uncategorizedimages' => 'Berkas yang tak terkategori', @@ -1901,7 +1940,7 @@ Nama yang telah dicoret berarti telah dibetulkan.', 'shortpages' => 'Halaman pendek', 'longpages' => 'Halaman panjang', 'deadendpages' => 'Halaman buntu', -'deadendpagestext' => 'Halaman-halaman berikut tidak memiliki pranala ke halaman manapun di wiki ini.', +'deadendpagestext' => 'Halaman-halaman berikut tidak memiliki pranala ke halaman mana pun di wiki ini.', 'protectedpages' => 'Halaman yang dilindungi', 'protectedpages-indef' => 'Hanya untuk pelindungan dengan jangka waktu tak terbatas', 'protectedpages-cascade' => 'Hanya pelindungan runtun', @@ -1920,7 +1959,7 @@ Nama yang telah dicoret berarti telah dibetulkan.', 'ancientpages' => 'Halaman terlama', 'move' => 'Pindahkan', 'movethispage' => 'Pindahkan halaman ini', -'unusedimagestext' => 'Berkas berikut ada tapi tidak disertakan di halaman manapun. +'unusedimagestext' => 'Berkas berikut ada tapi tidak disertakan di halaman mana pun. Harap perhatikan bahwa situs web lain mungkin memiliki pranala ke suatu berkas dengan URL langsung, dan karenanya masih terdaftar di sini meskipun sudah tidak digunakan aktif.', 'unusedcategoriestext' => 'Kategori berikut ada, walaupun tidak ada halaman atau kategori lain yang menggunakannya.', 'notargettitle' => 'Tidak ada sasaran', @@ -2030,34 +2069,40 @@ Lihat pula [[Special:WantedCategories|kategori yang diinginkan]].', 'listgrouprights-removegroup-self-all' => 'Menghapus semua kelompok dari akun sendiri', # E-mail user -'mailnologin' => 'Tidak ada alamat surel', -'mailnologintext' => 'Anda harus [[Special:UserLogin|masuk log]] dan mempunyai alamat surel yang sah di dalam [[Special:Preferences|preferensi]] untuk mengirimkan surel kepada pengguna lain.', -'emailuser' => 'Surel pengguna', -'emailpage' => 'Kirim surel ke pengguna ini', -'emailpagetext' => 'Anda dapat menggunakan formulir di bawah ini untuk mengirimkan surel ke pengguna ini. +'mailnologin' => 'Tidak ada alamat surel', +'mailnologintext' => 'Anda harus [[Special:UserLogin|masuk log]] dan mempunyai alamat surel yang sah di dalam [[Special:Preferences|preferensi]] untuk mengirimkan surel kepada pengguna lain.', +'emailuser' => 'Surel pengguna', +'emailpage' => 'Kirim surel ke pengguna ini', +'emailpagetext' => 'Anda dapat menggunakan formulir di bawah ini untuk mengirimkan surel ke pengguna ini. Alamat surel yang Anda masukkan di [[Special:Preferences|preferensi akun Anda]] akan muncul sebagai alamat "Dari" dalam surel tersebut, sehingga penerima dapat langsung membalas kepada Anda.', -'usermailererror' => 'Kesalahan objek surat:', -'defemailsubject' => 'Surel {{SITENAME}}', -'noemailtitle' => 'Tidak ada alamat surel', -'noemailtext' => 'Pengguna ini tidak memberikan suatu alamat surel yang valid.', -'nowikiemailtitle' => 'Surel tak diizinkan', -'nowikiemailtext' => 'Pengguna ini telah memilih untuk tidak menerima surel dari pengguna lain.', -'email-legend' => 'Kirim surel ke pengguna {{SITENAME}} lainnya', -'emailfrom' => 'Dari:', -'emailto' => 'Untuk:', -'emailsubject' => 'Perihal:', -'emailmessage' => 'Pesan:', -'emailsend' => 'Kirim', -'emailccme' => 'Kirimkan saya salinan pesan saya.', -'emailccsubject' => 'Salinan pesan Anda untuk $1: $2', -'emailsent' => 'Surel terkirim', -'emailsenttext' => 'Surel Anda telah dikirimkan.', -'emailuserfooter' => 'Surel ini dikirimkan oleh $1 kepada $2 menggunakan fungsi "Suratepengguna" di {{SITENAME}}.', +'usermailererror' => 'Kesalahan objek surat:', +'defemailsubject' => 'Surel {{SITENAME}}', +'usermaildisabled' => 'Surel pengguna dinonaktifkan', +'usermaildisabledtext' => 'Anda tidak dapat mengirim surel pada pengguna lain di wiki ini', +'noemailtitle' => 'Tidak ada alamat surel', +'noemailtext' => 'Pengguna ini tidak memberikan suatu alamat surel yang valid.', +'nowikiemailtitle' => 'Surel tak diizinkan', +'nowikiemailtext' => 'Pengguna ini telah memilih untuk tidak menerima surel dari pengguna lain.', +'email-legend' => 'Kirim surel ke pengguna {{SITENAME}} lainnya', +'emailfrom' => 'Dari:', +'emailto' => 'Untuk:', +'emailsubject' => 'Perihal:', +'emailmessage' => 'Pesan:', +'emailsend' => 'Kirim', +'emailccme' => 'Kirimkan saya salinan pesan saya.', +'emailccsubject' => 'Salinan pesan Anda untuk $1: $2', +'emailsent' => 'Surel terkirim', +'emailsenttext' => 'Surel Anda telah dikirimkan.', +'emailuserfooter' => 'Surel ini dikirimkan oleh $1 kepada $2 menggunakan fungsi "Suratepengguna" di {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Tinggalkan pesan sistem.', +'usermessage-editor' => 'Penyampai pesan sistem', # Watchlist 'watchlist' => 'Daftar pantauan', 'mywatchlist' => 'Pantauan saya', -'watchlistfor' => "(untuk '''$1''')", +'watchlistfor2' => 'Untuk $1 $2', 'nowatchlist' => 'Daftar pantauan Anda kosong.', 'watchlistanontext' => 'Silakan $1 untuk melihat atau menyunting daftar pantauan Anda.', 'watchnologin' => 'Belum masuk log', @@ -2112,16 +2157,19 @@ Hubungi penyunting: surel: $PAGEEDITOR_EMAIL wiki: $PAGEEDITOR_WIKI -Tidak akan ada pemberitahuan lainnya dalam rangka perubahan lebih lanjut kecuali anda mengunjungi halaman ini. -Anda juga dapat menset ulang tanda pemberitahuan untuk semua halaman pantauan anda pada daftar pantauan anda. +Kami tidak akan mengirim pemberitahuan lain bila ada perubahan lebih lanjut sampai Anda mengunjungi halaman ini. +Anda juga dapat menyetel ulang tanda pemberitahuan untuk semua halaman pantauan pada daftar pantauan Anda. - Sistem pemberitahuan anda di {{SITENAME}} + Sistem pemberitahuan situs {{SITENAME}} -- -Untuk mengubah preferensi daftar pantauan anda, kunjungi +Untuk mengubah setelan pemberitahuan surel, kunjungi +{{fullurl:{{#special:Preferences}}}} + +Untuk mengubah setelan daftar pantauan, kunjungi {{fullurl:{{#special:Watchlist}}/edit}} -Untuk menghapus halaman dari daftar pantauan anda, kunjungi +Untuk menghapus halaman dari daftar pantauan, kunjungi $UNWATCHURL Umpan balik dan bantuan lebih lanjut: @@ -2175,7 +2223,10 @@ Suntingan terakhir dilakukan oleh [[User:$3|$3]] ([[User talk:$3|bicara]]{{int:p 'revertpage' => '←Suntingan [[Special:Contributions/$2|$2]] ([[User talk:$2|bicara]]) dikembalikan ke versi terakhir oleh [[User:$1|$1]]', 'revertpage-nouser' => 'Pengembalian suntingan oleh (pengguna dihapus) ke suntingan terakhir oleh [[User:$1|$1]]', 'rollback-success' => 'Pengembalian suntingan oleh $1; dikembalikan ke versi terakhir oleh $2.', -'sessionfailure' => 'Sepertinya ada masalah dengan sesi log Anda; log Anda telah dibatalkan untuk mencegah pembajakan. Silakan tekan tombol "kembali" dan muat kembali halaman sebelum Anda masuk, lalu coba lagi.', + +# Edit tokens +'sessionfailure-title' => 'Kegagalan sesi', +'sessionfailure' => 'Sepertinya ada masalah dengan sesi log Anda; log Anda telah dibatalkan untuk mencegah pembajakan. Silakan tekan tombol "kembali" dan muat kembali halaman sebelum Anda masuk, lalu coba lagi.', # Protect 'protectlogpage' => 'Log pelindungan', @@ -2300,18 +2351,22 @@ $1', 'month' => 'Sejak bulan (dan sebelumnya):', 'year' => 'Sejak tahun (dan sebelumnya):', -'sp-contributions-newbies' => 'Hanya dari para pengguna baru', -'sp-contributions-newbies-sub' => 'Untuk pengguna baru', -'sp-contributions-newbies-title' => 'Kontribusi pengguna baru', -'sp-contributions-blocklog' => 'Log pemblokiran', -'sp-contributions-deleted' => 'kontribusi pengguna yang dihapus', -'sp-contributions-logs' => 'log', -'sp-contributions-talk' => 'bicara', -'sp-contributions-userrights' => 'pengelolaan hak pengguna', -'sp-contributions-blocked-notice' => 'Pengguna ini sedang di blok. log pemblokiran terakhir ditampilkan berikut untuk referensi:', -'sp-contributions-search' => 'Cari kontribusi', -'sp-contributions-username' => 'Alamat IP atau nama pengguna:', -'sp-contributions-submit' => 'Cari', +'sp-contributions-newbies' => 'Hanya dari para pengguna baru', +'sp-contributions-newbies-sub' => 'Untuk pengguna baru', +'sp-contributions-newbies-title' => 'Kontribusi pengguna baru', +'sp-contributions-blocklog' => 'Log pemblokiran', +'sp-contributions-deleted' => 'kontribusi pengguna yang dihapus', +'sp-contributions-uploads' => 'unggahan', +'sp-contributions-logs' => 'log', +'sp-contributions-talk' => 'bicara', +'sp-contributions-userrights' => 'pengelolaan hak pengguna', +'sp-contributions-blocked-notice' => 'Pengguna ini sedang di blok. log pemblokiran terakhir ditampilkan berikut untuk referensi:', +'sp-contributions-blocked-notice-anon' => 'Alamat IP ini diblokir pada saat ini. +Catatan log pemblokiran terakhir tersedia di bawah ini sebagai rujukan:', +'sp-contributions-search' => 'Cari kontribusi', +'sp-contributions-username' => 'Alamat IP atau nama pengguna:', +'sp-contributions-toponly' => 'Tampilkan hanya revisi teratas', +'sp-contributions-submit' => 'Cari', # What links here 'whatlinkshere' => 'Pranala balik', @@ -2373,7 +2428,6 @@ Lihat [[Special:IPBlockList|Daftar IP]] untuk meninjau kembali pemblokiran.', 'ipb-edit-dropdown' => 'Sunting alasan pemblokiran', 'ipb-unblock-addr' => 'Hilangkan blokir $1', 'ipb-unblock' => 'Hilangkan blokir seorang pengguna atau suatu alamat IP', -'ipb-blocklist-addr' => 'Blokir yang diterapkan untuk $1', 'ipb-blocklist' => 'Lihat blokir yang diterapkan', 'ipb-blocklist-contribs' => 'Kontribusi untuk $1', 'unblockip' => 'Hilangkan blokir terhadap alamat IP atau pengguna', @@ -2443,6 +2497,8 @@ $1 sudah diblokir. Apakah Anda ingin mengubah set pemblokiran yang bersangkutan? 'sorbs_create_account_reason' => 'Alamat IP anda terdaftar sebagai proxy terbuka di DNSBL. Anda tidak dapat membuat akun.', 'cant-block-while-blocked' => 'Anda tidak dapat memblokir pengguna lain ketika Anda sendiri sedang diblokir.', 'cant-see-hidden-user' => 'Pengguna yang anda coba blokir telah di blokir dan di sembunyikan. Selama anda tidak memiliki hak sembunyikan pengguna, anda tidak dapat melihat atau menyunting pemblokiran pengguna ini.', +'ipbblocked' => 'Anda tidak dapat memblokir atau membuka blokir pengguna lain, karena anda sendiri diblokir', +'ipbnounblockself' => 'Anda tidak diizinkan untuk membuka blokir sendiri', # Developer tools 'lockdb' => 'Kunci basis data', @@ -2470,6 +2526,17 @@ Pastikan Anda [[Special:UnlockDB|membuka kuncinya]] setelah pemeliharaan selesai Perhatikan bahwa halaman '''tidak''' akan dipindah apabila telah ada halaman yang menggunakan judul yang baru, kecuali bila halaman tersebut kosong atau merupakan halaman peralihan dan tidak mempunyai sejarah penyuntingan. Ini berarti Anda dapat mengubah nama halaman kembali seperti semula apabila Anda membuat kesalahan, dan Anda tidak dapat menimpa halaman yang telah ada. '''Peringatan:''' Ini dapat mengakibatkan perubahan yang tak terduga dan drastis bagi halaman yang populer. Pastikan Anda mengerti konsekuensi dari perbuatan ini sebelum melanjutkan.", +'movepagetext-noredirectfixer' => "Formulir di bawah ini digunakan untuk mengubah nama suatu halaman dan memindahkan semua data sejarah ke nama baru. +Judul yang lama akan menjadi halaman peralihan menuju judul yang baru. +Pastikan untuk memeriksa pengalihan [[Special:DoubleRedirects|ganda]] atau [[Special:BrokenRedirects|rusak]]. +Anda bertanggung jawab untuk memastikan bahwa pranala terus menyambung ke halaman yang seharusnya. + +Perhatikan bahwa halaman '''tidak''' akan dipindah apabila telah ada halaman yang menggunakan judul yang baru, kecuali bila halaman tersebut kosong atau merupakan halaman peralihan dan tidak mempunyai sejarah penyuntingan. +Ini berarti Anda dapat mengubah nama halaman kembali seperti semula apabila Anda membuat kesalahan, dan Anda tidak dapat menimpa halaman yang telah ada. + +'''Peringatan:''' +Hal ini dapat mengakibatkan perubahan yang tak terduga dan drastis bagi halaman yang populer; +Pastikan Anda mengerti konsekuensi dari perbuatan ini sebelum melanjutkan.", 'movepagetalktext' => "Halaman pembicaraan yang berkaitan juga akan dipindahkan secara otomatis '''kecuali apabila:''' *Sebuah halaman pembicaraan yang tidak kosong telah ada di bawah judul baru, atau @@ -2524,6 +2591,7 @@ Halaman yang dituju, "[[:$1]]", telah mempunyai isi. Apakah Anda hendak menghapu 'immobile-source-page' => 'Halaman ini tidak dapat dipindahkan.', 'immobile-target-page' => 'Tidak dapat memindahkan ke judul tujuan tersebut.', 'imagenocrossnamespace' => 'Tidak dapat memindahkan berkas ke ruang nama non-berkas', +'nonfile-cannot-move-to-file' => 'Tidak dapat memindahkan non-berkas ke ruang nama berkas', 'imagetypemismatch' => 'Ekstensi yang diberikan tidak cocok dengan tipe berkas', 'imageinvalidfilename' => 'Nama berkas tujuan tidak sah', 'fix-double-redirects' => 'Perbaiki semua pengalihan ganda yang mungkin terjadi', @@ -2605,6 +2673,7 @@ Simpan ke komputer Anda dan unggah ke sini.', 'importstart' => 'Mengimpor halaman...', 'import-revision-count' => '$1 {{PLURAL:$1|revisi|revisi}}', 'importnopages' => 'Tidak ada halaman untuk diimpor.', +'imported-log-entries' => 'Telah diimpor $1 {{PLURAL:$1|entri log|entri log}}.', 'importfailed' => 'Impor gagal: $1', 'importunknownsource' => 'Sumber impor tidak dikenali', 'importcantopen' => 'Berkas impor tidak dapat dibuka', @@ -2697,6 +2766,8 @@ Simpan ke komputer Anda dan unggah ke sini.', 'tooltip-upload' => 'Mulai pemuatan', 'tooltip-rollback' => 'Mengembalikan suntingan-suntingan di halaman ini ke kontributor terakhir dalam satu kali klik.', 'tooltip-undo' => 'Mengembalikan revisi ini dan membuka kotak penyuntingan dengan mode pratayang. Alasan dapat ditambahkan di kotak ringkasan.', +'tooltip-preferences-save' => 'Simpan preferensi', +'tooltip-summary' => 'Masukkan sebuah ringkasan pendek', # Stylesheets 'common.css' => '/* CSS yang ada di sini akan diterapkan untuk semua kulit. */', @@ -2821,14 +2892,17 @@ Jika dijalankan, sistem Anda akan berisiko terserang.", 'imagemaxsize' => "Batas ukuran gambar:
    ''(untuk halaman deskripsi berkas)''", 'thumbsize' => 'Ukuran miniatur:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|halaman|halaman}}', -'file-info' => '(ukuran berkas: $1, tipe MIME: $2)', -'file-info-size' => '($1 × $2 piksel, ukuran berkas: $3, tipe MIME: $4)', +'file-info' => 'ukuran berkas: $1, tipe MIME: $2', +'file-info-size' => '$1 × $2 piksel, ukuran berkas: $3, tipe MIME: $4', 'file-nohires' => 'Tak tersedia resolusi yang lebih tinggi.', -'svg-long-desc' => '(Berkas SVG, nominal $1 × $2 piksel, besar berkas: $3)', +'svg-long-desc' => 'Berkas SVG, nominal $1 × $2 piksel, besar berkas: $3', 'show-big-image' => 'Resolusi penuh', 'show-big-image-thumb' => 'Ukuran pratayang ini: $1 × $2 piksel', 'file-info-gif-looped' => 'melingkar', 'file-info-gif-frames' => '$1 {{PLURAL:$1||}}frame', +'file-info-png-looped' => 'ulang', +'file-info-png-repeat' => 'dimainkan $1 {{PLURAL:$1|kali|kali}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|bingkai|bingkai}}', # Special:NewFiles 'newimages' => 'Berkas baru', @@ -2987,6 +3061,7 @@ Pranala-pranala selanjutnya pada baris yang sama dianggap sebagai pengecualian, 'exif-gpsareainformation' => 'Nama wilayah GPS', 'exif-gpsdatestamp' => 'Tanggal GPS', 'exif-gpsdifferential' => 'Koreksi diferensial GPS', +'exif-objectname' => 'Judul singkat', # EXIF attributes 'exif-compression-1' => 'Tak terkompresi', @@ -3146,27 +3221,27 @@ Pranala-pranala selanjutnya pada baris yang sama dianggap sebagai pengecualian, 'limitall' => 'semua', # E-mail address confirmation -'confirmemail' => 'Konfirmasi alamat surel', -'confirmemail_noemail' => 'Anda tidak memberikan alamat surel yang sah di [[Special:Preferences|preferensi pengguna]] Anda.', -'confirmemail_text' => '{{SITENAME}} mengharuskan Anda untuk melakukan konfirmasi atas alamat surel Anda sebelum fitur-fitur surel dapat digunakan. +'confirmemail' => 'Konfirmasi alamat surel', +'confirmemail_noemail' => 'Anda tidak memberikan alamat surel yang sah di [[Special:Preferences|preferensi pengguna]] Anda.', +'confirmemail_text' => '{{SITENAME}} mengharuskan Anda untuk melakukan konfirmasi atas alamat surel Anda sebelum fitur-fitur surel dapat digunakan. Tekan tombol di bawah ini untuk mengirimi Anda sebuah surel yang berisi kode konfirmasi yang berupa sebuah alamat internet. Salin alamat tersebut ke penjelajah web Anda dan buka alamat tersebut untuk melakukan konfirmasi sehingga menginformasikan bahwa alamat surel Anda valid.', -'confirmemail_pending' => 'Suatu kode konfirmasi telah dikirimkan kepada Anda; jika Anda baru saja membuat akun Anda, silakan tunggu beberapa menit untuk surat tersebut tiba sebelum mencoba untuk meminta satu kode baru.', -'confirmemail_send' => 'Kirim kode konfirmasi', -'confirmemail_sent' => 'Surel berisi kode konfirmasi telah dikirim.', -'confirmemail_oncreate' => 'Suatu kode konfirmasi telah dikirimkan ke alamat surel Anda. Kode ini tidak dibutuhkan untuk masuk log, tapi dibutuhkan sebelum menggunakan semua fitur yang menggunakan surel di wiki ini.', -'confirmemail_sendfailed' => '{{SITENAME}} tidak berhasil mengirimkan surat konfirmasi Anda. +'confirmemail_pending' => 'Suatu kode konfirmasi telah dikirimkan kepada Anda; jika Anda baru saja membuat akun Anda, silakan tunggu beberapa menit untuk surat tersebut tiba sebelum mencoba untuk meminta satu kode baru.', +'confirmemail_send' => 'Kirim kode konfirmasi', +'confirmemail_sent' => 'Surel berisi kode konfirmasi telah dikirim.', +'confirmemail_oncreate' => 'Suatu kode konfirmasi telah dikirimkan ke alamat surel Anda. Kode ini tidak dibutuhkan untuk masuk log, tapi dibutuhkan sebelum menggunakan semua fitur yang menggunakan surel di wiki ini.', +'confirmemail_sendfailed' => '{{SITENAME}} tidak berhasil mengirimkan surat konfirmasi Anda. Harap cek kemungkinan karakter ilegal pada alamat surel. Aplikasi pengiriman surel menginformasikan: $1', -'confirmemail_invalid' => 'Kode konfirmasi salah. Kode tersebut mungkin sudah kedaluwarsa.', -'confirmemail_needlogin' => 'Anda harus melakukan $1 untuk mengkonfirmasikan alamat surel Anda.', -'confirmemail_success' => 'Alamat surel Anda telah dikonfirmasi. +'confirmemail_invalid' => 'Kode konfirmasi salah. Kode tersebut mungkin sudah kedaluwarsa.', +'confirmemail_needlogin' => 'Anda harus melakukan $1 untuk mengkonfirmasikan alamat surel Anda.', +'confirmemail_success' => 'Alamat surel Anda telah dikonfirmasi. Sekarang Anda dapat [[Special:UserLogin|masuk log]] dan mulai menggunakan wiki.', -'confirmemail_loggedin' => 'Alamat surel Anda telah dikonfirmasi.', -'confirmemail_error' => 'Terjadi kesalahan sewaktu menyimpan konfirmasi Anda.', -'confirmemail_subject' => 'Konfirmasi alamat surel {{SITENAME}}', -'confirmemail_body' => 'Seseorang, mungkin Anda, dari alamat IP $1, telah mendaftarkan akun "$2" dengan alamat surel ini di {{SITENAME}}. +'confirmemail_loggedin' => 'Alamat surel Anda telah dikonfirmasi.', +'confirmemail_error' => 'Terjadi kesalahan sewaktu menyimpan konfirmasi Anda.', +'confirmemail_subject' => 'Konfirmasi alamat surel {{SITENAME}}', +'confirmemail_body' => 'Seseorang, mungkin Anda, dari alamat IP $1, telah mendaftarkan akun "$2" dengan alamat surel ini di {{SITENAME}}. Untuk mengonfirmasikan bahwa akun ini benar dimiliki oleh Anda sekaligus mengaktifkan fitur surel di {{SITENAME}}, ikuti pranala berikut pada penjelajah web Anda: @@ -3178,8 +3253,36 @@ Klik pada pranala ini untuk membatalkan konfirmasi alamat surel: $5 Kode konfirmasi ini akan kedaluwarsa pada $4.', -'confirmemail_invalidated' => 'Konfirmasi alamat surel dibatalkan', -'invalidateemail' => 'Batalkan konfirmasi surel', +'confirmemail_body_changed' => 'Seseorang, mungkin Anda, dari alamat IP $1, +telah mengubah surel dari akun "$2" pada alamat ini di {{SITENAME}}. + +Untuk mengkonfirmasi bahwa akun ini adalah benar milik Anda sekaligus mengaktifkan +kembali fitur surel pada {{SITENAME}}, ikuti pranala berikut pada browser Anda: + +$3 + +Jika akun ini *bukan* milik Anda, ikuti pranala berikut +untuk membatalkan konfirmasi alamat surel: + +$5 + +Kode konfirmasi ini akan kedaluwarsa pada $4.', +'confirmemail_body_set' => 'Seseorang, mungkin Anda, dari alamat IP $1, +telah mengubah surel dari akun "$2" pada alamat ini di {{SITENAME}}. + +Untuk mengonfirmasi bahwa akun ini adalah milik Anda sekaligus mengaktifkan +kembali fitur surel pada {{SITENAME}}, ikuti pranala berikut pada browser Anda: + +$3 + +Jika akun ini *bukan* milik Anda, ikuti pranala berikut +untuk membatalkan konfirmasi alamat surel: + +$5 + +Kode konfirmasi ini akan kedaluwarsa pada $4.', +'confirmemail_invalidated' => 'Konfirmasi alamat surel dibatalkan', +'invalidateemail' => 'Batalkan konfirmasi surel', # Scary transclusion 'scarytranscludedisabled' => '[Transklusi interwiki dimatikan]', @@ -3219,6 +3322,7 @@ Silakan konfirmasi jika Anda ingin membuat ulang halaman ini.", 'table_pager_first' => 'Halaman pertama', 'table_pager_last' => 'Halaman terakhir', 'table_pager_limit' => 'Tampilkan $1 entri per halaman', +'table_pager_limit_label' => 'Item per halaman:', 'table_pager_limit_submit' => 'Tuju ke', 'table_pager_empty' => 'Tidak ditemukan', @@ -3317,6 +3421,7 @@ Anda juga dapat [[Special:Watchlist/edit|menggunakan penyunting standar Anda]].' 'version-specialpages' => 'Halaman istimewa', 'version-parserhooks' => 'Kait parser', 'version-variables' => 'Variabel', +'version-skins' => 'Kulit', 'version-other' => 'Lain-lain', 'version-mediahandlers' => 'Penanganan media', 'version-hooks' => 'Kait', @@ -3328,6 +3433,13 @@ Anda juga dapat [[Special:Watchlist/edit|menggunakan penyunting standar Anda]].' 'version-hook-subscribedby' => 'Dilanggani oleh', 'version-version' => '(Versi $1)', 'version-license' => 'Lisensi', +'version-poweredby-credits' => "Wiki ini didukung oleh '''[http://www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.", +'version-poweredby-others' => 'lainnya', +'version-license-info' => 'MediaWiki adalah perangkat lunak bebas; Anda diperbolehkan untuk mendistribusikan dan/atau memodfikasinya dengan persyaratan Lisensi Publik Umum GNU yang diterbitkan oleh Free Software Foundation; versi 2 atau terbaru. + +MediaWiki didistribusikan dengan harapan dapat digunakan, tetapi TANPA JAMINAN APA PUN; tanpa jaminan PERDAGANGAN atau KECOCOKAN UNTUK TUJUAN TERTENTU. Lihat Lisensi Publik Umum GNU untuk informasi lebih lanjut. + +Anda seharusnya telah menerima [{{SERVER}}{{SCRIPTPATH}}/COPYING salinan Lisensi Publik Umum GNU] bersama dengan program ini; jika tidak, kirim surat ke Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA atau [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html baca daring].', 'version-software' => 'Perangkat lunak terinstal', 'version-software-product' => 'Produk', 'version-software-version' => 'Versi', @@ -3398,6 +3510,15 @@ Keterangan tampilan: 'tags-edit' => 'sunting', 'tags-hitcount' => '$1 {{PLURAL:$1|perubahan|perubahan}}', +# Special:ComparePages +'comparepages' => 'Bandingkan halaman', +'compare-selector' => 'Bandingkan revisi halaman', +'compare-page1' => 'Halaman 1', +'compare-page2' => 'Halaman 2', +'compare-rev1' => 'Revisi 1', +'compare-rev2' => 'Revisi 2', +'compare-submit' => 'Bandingkan', + # Database error messages 'dberr-header' => 'Wiki ini bermasalah', 'dberr-problems' => 'Maaf! Situs ini mengalami masalah teknis.', @@ -3414,8 +3535,13 @@ Keterangan tampilan: 'htmlform-float-invalid' => 'Yang Anda masukkan bukan merupakan angka.', 'htmlform-int-toolow' => 'Nilai yang Anda masukkan terlalu rendah di bawah nilai minimum $1', 'htmlform-int-toohigh' => 'Nilai yang Anda masukkan melebihi nilai maksimum $1', +'htmlform-required' => 'Nilai ini diperlukan', 'htmlform-submit' => 'Kirim', 'htmlform-reset' => 'Batalkan perubahan', 'htmlform-selectorother-other' => 'Lain-lain', +# SQLite database support +'sqlite-has-fts' => '$1 dengan dukungan pencarian teks lengkap', +'sqlite-no-fts' => '$1 tanpa dukungan pencarian teks lengkap', + ); diff --git a/languages/messages/MessagesIe.php b/languages/messages/MessagesIe.php index 307bf3ca..cbf2ea61 100644 --- a/languages/messages/MessagesIe.php +++ b/languages/messages/MessagesIe.php @@ -205,7 +205,7 @@ Ne oblivia de mutar tui [[Special:Preferences|preferenties de {{SITENAME}}]].', 'yourname' => 'Nómine de usator:', 'yourpassword' => 'Parol-clave:', 'yourpasswordagain' => 'Parol-clave denov:', -'remembermypassword' => 'Memorar mi passa-parol (per cookie)', +'remembermypassword' => 'Memorar mi passa-parol (per cookie) (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Tui dominia:', 'login' => 'Aperter session', 'nav-login-createaccount' => 'Crear un conto o intrar', @@ -370,13 +370,43 @@ Tui changes ancor ne ha esset conservat!", 'recentchangeslinked-toolbox' => 'Changes referet', # Upload -'upload' => 'Cargar file', -'uploadbtn' => 'Cargar file', -'uploadlogpage' => 'Diarium de cargament', -'filedesc' => 'Descrition', -'savefile' => 'Conservar file', -'uploadedimage' => 'cargat "[[$1]]"', -'watchthisupload' => 'Vigilar ti file', +'upload' => 'Cargar file', +'uploadbtn' => 'Cargar file', +'upload-permitted' => 'Tipes de file permisset: $1.', +'upload-preferred' => 'Tipes de file preferet: $1.', +'upload-prohibited' => 'Tipes de file prohibit: $1.', +'uploadlogpage' => 'Diarium de cargament', +'filedesc' => 'Descrition', +'unknown-error' => 'Un errore desconosset ocurret.', +'savefile' => 'Conservar file', +'uploadedimage' => 'cargat "[[$1]]"', +'upload-maxfilesize' => 'Mesura maxim de file: $1', +'upload-description' => 'Descrition de file', +'upload-options' => 'Optiones de cargament', +'watchthisupload' => 'Vigilar ti file', +'upload-failure-subj' => 'Problema de cargament', +'upload-failure-msg' => 'Ta esset un problema che tui cargament: +$1', + +'upload-proto-error' => 'Protocol incorect', +'upload-proto-error-text' => 'Cargament distant exige comense che http:// o ftp://.', +'upload-file-error' => 'Errore intern', +'upload-file-error-text' => 'Un errore intern ocurret quande atentant crear un file temporari in li servitor. +Pleser parla che un [[Special:ListUsers/sysop|administrator]].', +'upload-misc-error' => 'Errore desconosset de cargament', +'upload-misc-error-text' => 'Un errore desconosset ocurret durante li cargament. +Pleser verificar que li URL es valid e accessibil e prova denov. +Si li problema persister, parla che un [[Special:ListUsers/sysop|administrator]].', +'upload-http-error' => 'Un errore HTTP ocurret: $1', + +# Some likely curl errors. More could be added from +'upload-curl-error6' => 'Ne esset possibil ear in li URL', +'upload-curl-error6-text' => 'Li URL preferet ne esset visitat. +Pleser vide denov que li URL es corect e si li loc es disponibil.', +'upload-curl-error28' => 'For de témpor por cargament de files', +'upload-curl-error28-text' => 'Ti loc demorat mult témpor por responder. +Pleser vider se li loc es disponibil, atende un témpor e prova denov. +Vu posse provar in un témpor minu activ.', # Special:ListFiles 'imgfile' => 'archive', @@ -653,6 +683,8 @@ Tui changes ancor ne ha esset conservat!", 'tooltip-upload' => 'Comensar cargament de file', 'tooltip-rollback' => '"Rollback" reverte redaction(es) de ti págine executet per li ultim contributor in un claccar', 'tooltip-undo' => '"Undo" reverte ti redaction e inaugura li forme de redaction in modo de prevision. It concede adjuntent un rason in li summarium.', +'tooltip-preferences-save' => 'Conservar preferenties', +'tooltip-summary' => 'Intrar un summarium curt', # Browsing diffs 'previousdiff' => '← Redaction anteriori', diff --git a/languages/messages/MessagesIg.php b/languages/messages/MessagesIg.php index 2112e366..9ea296c1 100644 --- a/languages/messages/MessagesIg.php +++ b/languages/messages/MessagesIg.php @@ -10,6 +10,54 @@ * @author Ukabia */ +$namespaceNames = array( + NS_MEDIA => 'Nká', + NS_SPECIAL => 'Ihü_kárírí', + NS_TALK => 'Okwu', + NS_USER => 'Ọ\'bànifé', + NS_USER_TALK => 'Okwu_ọ\'bànifé', + NS_PROJECT_TALK => 'Okwu_$1', + NS_FILE => 'Ákwúkwó_orünotu', + NS_FILE_TALK => 'Okwu_ákwúkwó_orünotu', + NS_MEDIAWIKI => 'NkáWiki', + NS_MEDIAWIKI_TALK => 'Okwu_NkáWiki', + NS_TEMPLATE => 'Àtụ', + NS_TEMPLATE_TALK => 'Okwu_àtụ', + NS_HELP => 'Nkwádọ', + NS_HELP_TALK => 'Okwu_nkwádọ', + NS_CATEGORY => 'Ébéonọr', + NS_CATEGORY_TALK => 'Okwu_ébéonọr', +); + +$specialPageAliases = array( + 'Userlogin' => array( 'Ọ\'bàniféÍBànyé' ), + 'Userlogout' => array( 'Ọ\'bàniféÍFụtá' ), + 'Preferences' => array( 'Ọtúm_dọsẹrẹ_ihem' ), + 'Upload' => array( 'TinyéIheNélú' ), + 'Allpages' => array( 'IhüNílé' ), + 'Specialpages' => array( 'IhüKá' ), + 'Export' => array( 'MēKọFùtá' ), + 'Undelete' => array( 'Ábàkàshịkwàlà' ), + 'Import' => array( 'BàÍfé' ), + 'Mypage' => array( 'IhüNkèm' ), + 'Mytalk' => array( 'OkwuNkèm' ), + 'Filepath' => array( 'UzọrAkwúkwóOrünotu' ), + 'Blankpage' => array( 'HịcháIhü' ), +); + +$magicWords = array( + 'redirect' => array( '0', '#KÚFÙ', '#REDIRECT' ), + 'fullpagename' => array( '1', 'ÁHÀNÍLÉNKÈIHÜ', 'FULLPAGENAME' ), + 'msg' => array( '0', 'OZI:', 'MSG:' ), + 'img_right' => array( '1', 'áká_ịkẹngạ', 'right' ), + 'img_left' => array( '1', 'áká_èkpè', 'left' ), + 'img_top' => array( '1', 'élú', 'top' ), + 'img_middle' => array( '1', 'ẹtítì', 'middle' ), + 'img_text_bottom' => array( '1', 'okpúrù-ede', 'text-bottom' ), + 'displaytitle' => array( '1', 'ZIÍSHÍ', 'DISPLAYTITLE' ), + 'pagesize' => array( '1', 'ÀSÁIHÜ', 'PAGESIZE' ), +); + $messages = array( # User preference toggles 'tog-underline' => 'Okpürụ ahiri jikodo:', @@ -26,8 +74,7 @@ $messages = array( 'tog-editsection' => 'Gbanyé orürü nkeji shi [rüwá] jikodo', 'tog-editsectiononrightclick' => 'Kpa na áká nri Í gbanyé orürü nkeji na ishi nkeji (ö chọrọ JavaScript)', 'tog-showtoc' => 'Zi agada ihe níle (maka ihü nwere ishis ká áto)', -'tog-rememberpassword' => 'Chetá edemede éjim a banyé na orunótuá', -'tog-editwidth' => 'Më akbati orü öbodobo kó juö ihu gbúrugbúru', +'tog-rememberpassword' => 'Chetá edemede éjim a banyé na orunótuá (nke ukwu nke rürü {{PLURAL:$1|chi|chi}} $1)', 'tog-watchcreations' => 'Tinyé ihüm na eké na ndetu ihem ne lé', 'tog-watchdefault' => 'Tinyé ihü m na rüoru élu na ndetu ihem ne lé', 'tog-watchmoves' => 'Tinyé ihü m na puzié na ndetu ihe m ne lé', @@ -171,31 +218,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Tinyé Okwu', -'vector-action-delete' => 'Gbakashia', -'vector-action-move' => 'Páfụ', -'vector-action-protect' => 'Cẹdolu', -'vector-action-undelete' => 'Á gbàkashikwà', -'vector-action-unprotect' => 'É cẹdolu', -'vector-namespace-category' => 'Ébéonọr', -'vector-namespace-help' => 'Ihü I nye áká', -'vector-namespace-image' => 'Ákwúkwó orunotu', -'vector-namespace-main' => 'Ihü', -'vector-namespace-media' => 'Ihü nkà', -'vector-namespace-mediawiki' => 'Ozi', -'vector-namespace-project' => 'Ihü orürü', -'vector-namespace-special' => 'Ihü mkpà', -'vector-namespace-talk' => 'Akíkó', -'vector-namespace-template' => 'Àtụ', -'vector-namespace-user' => "Ihü ọ'bànifé", -'vector-view-create' => 'Ké', -'vector-view-edit' => 'Rüwa', -'vector-view-history' => 'Le akíkó mbu', -'vector-view-view' => 'Guwá', -'vector-view-viewsource' => 'Zi mkpurụ', -'actions' => 'Mmèmé', -'namespaces' => 'Ámááhà', -'variants' => 'Nke ichè ichè', +'vector-action-addsection' => 'Tinyé Okwu', +'vector-action-delete' => 'Gbakashia', +'vector-action-move' => 'Páfụ', +'vector-action-protect' => 'Cẹdolu', +'vector-action-undelete' => 'Á gbàkashikwà', +'vector-action-unprotect' => 'É cẹdolu', +'vector-simplesearch-preference' => 'Kwe okwu ụmá nchöwa di (akpụkpọ Vector náni)', +'vector-view-create' => 'Ké', +'vector-view-edit' => 'Rüwa', +'vector-view-history' => 'Le akíkó mbu', +'vector-view-view' => 'Guwá', +'vector-view-viewsource' => 'Zi mkpurụ', +'actions' => 'Mmèmé', +'namespaces' => 'Ámááhà', +'variants' => 'Nke ichè ichè', 'errorpagetitle' => 'Nsogbú', 'returnto' => 'Ganata na $1.', @@ -397,7 +434,7 @@ E chefụkwạlạ I gbanwere [[Special:Preferences|{{SITENAME}} iheichọrọ]] 'yourname' => "Áhà ọ'bànifé:", 'yourpassword' => 'Okwúngáfè:', 'yourpasswordagain' => 'Detuari mkpurụ okwu ejị a gafẹ:', -'remembermypassword' => 'Chetá edemede éjim a banyé na orunótuá', +'remembermypassword' => 'Chetá edemede éjim a banyé na orunótuá (nke ukwu nke rürü {{PLURAL:$1|chi|chi}} $1)', 'yourdomainname' => 'Obí gi:', 'login' => 'Banyé', 'nav-login-createaccount' => 'Banyé / ké buwá', @@ -413,6 +450,7 @@ E chefụkwạlạ I gbanwere [[Special:Preferences|{{SITENAME}} iheichọrọ]] 'gotaccount' => 'I nwerecha buwa? $1.', 'gotaccountlink' => 'Banyé', 'createaccountmail' => 'na e-mail', +'createaccountreason' => 'Mgbaghaputa:', 'badretype' => 'Mkpurụ okwu ejị a gafẹ é jëghị.', 'userexists' => "Áhè ọ'bànifé tírí di na áká onye ozor. Bíkó nwèré áhà nke ozor.", @@ -614,6 +652,7 @@ Okwu ụmà: '''({{int:cur}})''' = gbánwe na nké orü mbu, '''({{int:last}})'' 'revdelete-radio-unset' => 'Mbà', 'revdelete-log' => 'Mgbághapụtà:', 'revdel-restore' => 'gbanwe ọtù ọ gị zí', +'revdel-restore-deleted' => 'orürü gbakashịrị', 'pagehist' => 'Ákíkó mbu maka ihüá', 'deletedhist' => 'Ákíkó mbu bakashịrị', 'revdelete-content' => 'iheníle', @@ -737,6 +776,7 @@ Nwàné ótù okwu íshí na ihe Í nè tú jí ''háníle:'' Í tuó ihe nílé 'searchresultshead' => 'Chöwá', 'resultsperpage' => 'Nlé na ihü:', 'contextlines' => 'Ahịrị na nke nlé:', +'stub-threshold-disabled' => 'Ápụgị òkò', 'timezonelegend' => 'Nkeji ogẹ:', 'localtime' => 'Ogẹ ebeanọr:', 'servertime' => 'Ógè orunotu òdìbọ:', @@ -830,10 +870,6 @@ Nwàné ótù okwu íshí na ihe Í nè tú jí ''háníle:'' Í tuó ihe nílé 'recentchanges' => 'Gbanwere mere ogẹ di nso', 'recentchanges-legend' => 'Nràlụ màkà Ihe gbanwere ubwá', 'recentchanges-feed-description' => 'Chóputà ihe ógẹ ǹsò na wiki ímé órírí nke á.', -'recentchanges-label-legend' => 'Edemede ndetu: $1', -'recentchanges-legend-newpage' => '$1 - ihü ohúrù', -'recentchanges-legend-minor' => '$1 - orü ntákírí', -'recentchanges-legend-bot' => '$1 - orü bot', 'rcnote' => "Na àlà {{PLURAL:$1|bu gbanwere '''1'''|bu gbanwere mgbèdè nke '''$1'''}} na mgbèdè {{PLURAL:$2|chi|chi '''$2'''}}, na mgbe $5, $4.", 'rclistfrom' => 'Zìrí ihe gbanwere ọhúrù shí $1', 'rcshowhideminor' => 'orü ntákírí $1', @@ -886,6 +922,7 @@ Ihü nọr na [[Special:Watchlist|ndétu ihe Í ne lé]] di na mkpụrụ edemed 'sourceurl' => 'URL mkpọlógwù:', 'upload-description' => 'Nkówá ákwúkwó orunotu', 'watchthisupload' => 'Lèwá ákwúkwó orunotunị', +'upload-warning-subj' => 'Ndọ ntị màkà ntínyé', # HTTP errors 'http-read-error' => 'Nsogbu Í gü HTTP.', @@ -1082,7 +1119,6 @@ Ubwa, o na ga [[$2]].', # Watchlist 'watchlist' => 'Ndetu ihem ne lé', 'mywatchlist' => 'Ndetu ihem ne lé', -'watchlistfor' => "(maka '''$1''')", 'addedwatch' => 'Tìrì na ndétu nlé', 'addedwatchtext' => "Ihü \"[[:\$1]]\" à bányéré [[Special:Watchlist|ndétu ihe Í ne lé]]. Ihe gi gbanwe na ógè gi bya nà ihüá na ihü okwu ya gi di ndétu ngáhù, na ihü gi da na mkpụrụ édé '''sírí íke''' ímé [[Special:RecentChanges|ndétu gbanwere méré na ogè nso]] ka ȯ dí òfelè Í hü ya.", @@ -1426,8 +1462,9 @@ Biko meríáríá ozor.', 'nextdiff' => 'Orü nke ohúrù →', # Media information -'file-info-size' => '($1 × $2 pixel, ívù akwukwo orunótu: $3, MIME nke: $4)', +'file-info-size' => '$1 × $2 pixel, ívù akwukwo orunótu: $3, MIME nke: $4', 'file-nohires' => 'Nke káchá mmá na ányá àdíghị.', +'svg-long-desc' => "ákwúkwó orunotu SVG, nà áhà pixel $1 × $2, ívụ ákwú'notu: $3", 'show-big-image' => 'Hü ya ka o dị', 'show-big-image-thumb' => 'Ívù nlétú nke: pixel $1 × $2', 'file-info-gif-looped' => 'etemte', @@ -1559,6 +1596,7 @@ Nke ozor gí zonari na áká onwe ha. 'table_pager_first' => 'Ihü mbu', 'table_pager_last' => 'Ihü lara azu', 'table_pager_limit' => 'Zí nke $1 màkà ihe na ótù ihü', +'table_pager_limit_label' => 'Ihe ga di na ótù ihü:', 'table_pager_limit_submit' => 'Gá', 'table_pager_empty' => 'Odígị ihe fútárá', @@ -1628,12 +1666,22 @@ Nke ozor gí zonari na áká onwe ha. 'tags-edit' => 'rüwa', 'tags-hitcount' => '$1 {{PLURAL:$1|gbanwere|gbanwere}}', +# Special:ComparePages +'comparepages' => 'Má àtù ihü', +'compare-selector' => 'Má àtù orü dírí na élú ihü', +'compare-page1' => 'Ihü 1', +'compare-page2' => 'Ihü 2', +'compare-rev1' => 'Orübà 1', +'compare-rev2' => 'Orübà 2', +'compare-submit' => 'Má àtù', + # Database error messages 'dberr-header' => 'Wiki nka nwere nsogbu', 'dberr-problems' => 'Ndó! Ámá nka nwere nsogbu ime ime.', # HTML forms +'htmlform-required' => 'Ọgụgụ nke gi dị', 'htmlform-submit' => 'Dànyé', 'htmlform-reset' => 'Emekwàlà gbanwere', 'htmlform-selectorother-other' => 'Nke ozor', diff --git a/languages/messages/MessagesIke_cans.php b/languages/messages/MessagesIke_cans.php index 53887726..f49b06ed 100644 --- a/languages/messages/MessagesIke_cans.php +++ b/languages/messages/MessagesIke_cans.php @@ -11,7 +11,7 @@ $messages = array( # User preference toggles -'tog-rememberpassword' => 'ᐃᖅᑑ ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ ᖃᑯᒍᖅ ᐊᑐᐃᓐᓇᓯᕗᖅ ᐅᕙᓗᒪᔪᖅ ᖃᕆᑕᐅᔭᖅ', +'tog-rememberpassword' => 'ᐃᖅᑑ ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ ᖃᑯᒍᖅ ᐊᑐᐃᓐᓇᓯᕗᖅ ᐅᕙᓗᒪᔪᖅ ᖃᕆᑕᐅᔭᖅ (for a maximum of $1 {{PLURAL:$1|day|days}})', # Dates 'sunday' => 'ᓴᓇᑦᑕᐃᓕ', @@ -148,7 +148,7 @@ $messages = array( 'yourname' => 'ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ', 'yourpassword' => 'ᐅᐃᑭᐱᑎᐊ ᐸᓚᙵᓴᐅᑎ', 'yourpasswordagain' => 'ᑕᒪᑐᒪᓃᖅᐹ ᐃᒃᓯᒐᖅᑐᖅ ᐅᐃᑭᐱᑎᐊ ᐸᓚᙵᓴᐅᑎ', -'remembermypassword' => 'ᐃᖅᑑ ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ ᖃᑯᒍᖅ ᐊᑐᐃᓐᓇᓯᕗᖅ ᐅᕙᓗᒪᔪᖅ ᖃᕆᑕᐅᔭᖅ', +'remembermypassword' => 'ᐃᖅᑑ ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ ᖃᑯᒍᖅ ᐊᑐᐃᓐᓇᓯᕗᖅ ᐅᕙᓗᒪᔪᖅ ᖃᕆᑕᐅᔭᖅ (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'ᐊᑯᓐᓇᐳᖅ', 'loginprompt' => 'ᐱᒋᐊᓕᒃ ᐃᒪᑐᐊᖅ ᖃᕆᑕᐅᔭᖅ ᖂᑮᔅ(Cookies) ᐱᕐᖄᑎ ᐊᑯᓐᓇᐳᖅ ᐅᐃᑭᐱᑎᐊ.', 'userlogin' => 'ᐊᑯᓐᓇᐳᖅ / ᐱᕐᖄᐹ ᑮᓇᐅᔭᒃᑯᕕᖕᒥ ᑐᖅᑯᖅᓯᕕᒃ', diff --git a/languages/messages/MessagesIke_latn.php b/languages/messages/MessagesIke_latn.php index 23c9d567..27663980 100644 --- a/languages/messages/MessagesIke_latn.php +++ b/languages/messages/MessagesIke_latn.php @@ -11,7 +11,7 @@ $messages = array( # User preference toggles -'tog-rememberpassword' => 'Iqtuu uikipitia atiq qakugiq atuinnasivuq uvalumaq qaritaujaq', +'tog-rememberpassword' => 'Iqtuu uikipitia atiq qakugiq atuinnasivuq uvalumaq qaritaujaq (for a maximum of $1 {{PLURAL:$1|day|days}})', # Dates 'sunday' => 'sanattaili', @@ -128,7 +128,7 @@ pigivuq qatannguti uikipitia kiinaujaqutiqarvik isuillingaitjapaa. iqtuu suqusiq 'yourname' => 'uikipitia atiq', 'yourpassword' => 'uikipitia palanngasauti', 'yourpasswordagain' => 'tamatumaniiqpaa iksigaqtuq uikipitia palanngasauti', -'remembermypassword' => 'iqtuu uikipitia atiq qakakuq atuinnasivuq uvalumajuq qaritaujaq', +'remembermypassword' => 'iqtuu uikipitia atiq qakakuq atuinnasivuq uvalumajuq qaritaujaq (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'akunnapuq', 'loginprompt' => 'pigialik imatuaq qaritaujaq quukiis (Cookies) pirqaati akunnapuq {{SITENAME}}.', 'userlogin' => 'akunnapuq / pirqaapaa kiinaijakkuvingmi tuqkuqsivik', diff --git a/languages/messages/MessagesIlo.php b/languages/messages/MessagesIlo.php index 8e85935b..0653dcd5 100644 --- a/languages/messages/MessagesIlo.php +++ b/languages/messages/MessagesIlo.php @@ -27,8 +27,7 @@ $messages = array( 'tog-editsection' => 'Pagbalinen ti panagedit iti benneg babaen ti [edit] a panilpo', 'tog-editsectiononrightclick' => 'Pagmayaten ti section editing babaen ti panang-right click kadagiti section titles (JavaScript)', 'tog-showtoc' => 'Ipakita dagiti linaon (para kadagiti panid nga addaan ad-adu ngem 3 a headings)', -'tog-rememberpassword' => 'Laglagipen ti iseserrekko kadaytoy a kompiuter', -'tog-editwidth' => 'Ti kahon ti edit ket addaan sibubukel a kaakaba', +'tog-rememberpassword' => 'Laglagipen ti iseserrekko kadaytoy a kompiuter (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Inayon dagiti inaramidko a pampanid iti listaan ti bambantayak', 'tog-watchdefault' => 'Inayon dagiti ed-editek a pampanid iti listaan ti bambantayak', 'tog-watchmoves' => 'Inayon dagiti inyakarko a pampanid iti listaan ti bambantayak', @@ -345,7 +344,7 @@ Dimo liplipatan a sukatan dagiti preferenciam iti [[Special:Preferences|{{SITENA 'yourname' => 'Nagan:', 'yourpassword' => 'Pasesbalikas:', 'yourpasswordagain' => 'Uliten ti pasesbalikas', -'remembermypassword' => 'Laglagipennak', +'remembermypassword' => 'Laglagipennak (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Ti bukodmo a domain:', 'login' => 'Sumrek', 'nav-login-createaccount' => 'Mangaramid iti account wenno ag-login', @@ -494,9 +493,6 @@ Ti agdama nga IP addressmo ket $3, ket ti block ID ket #$5. Pangngaasim ta irama No dimo kayat a ti sinuratmo ket maedit wenno mabalbaliwan nga awanan-asi ken maiwaras nga awan sungsungbatan kenka, saanmo laengen nga ip-ipan wenno ipabpablaak ditoy.
    Kasta met nga ikarim kadakami a bukodmo a sinurat wenno gapuanan daytoy, wenno kinopiam ngem iti maysa a nawaya a pagtagikuaan ti publiko wenno pumadmad a libre a pagtaudan (kitaen ti $1 para iti detalie). '''SAAN A MANGIPAN ITI ADDAAN COPYRIGHT NGA OBRA NO AWANAN PAMMALUBOS!'''", -'longpagewarning' => "'''BALLAAG: Agatiddog daytoy a panid iti $1 a kilobytes; -amangan ta sumagmamano a browsers ket agparikut iti panagedit iti pampanid a dandani 32 kb, wenno ad-adu pay, ti kaatiddogna. -Pangngaasim ta padasem a pasetpasetem ti panid iti babbabassit a benneg.'''", 'longpageerror' => "'''BIDDUT: Ti texto nga insumitem ket agatiddog iti $1 a kilobytes, nga at-atiddog nga amang ngem ti maximum a $2 a kilobytes. Isut' gapuna a saan a maidulin.'''", 'protectedpagewarning' => "'''BALLAAG: Daytoy a panid ket nabalunetan tapno dagiti laeng agar-aramat nga addaan previlehio a sysop wenno administrador ti makabalbaliw itoy.'''", @@ -825,7 +821,6 @@ Dagiti panid iti [[Special:Watchlist|listaan ti bambantayam]] ket '''naipuskol'' 'filetype-badmime' => 'Dagiti files a kas MIME type "$1" ket saan a mapalubosan a maipan.', 'filetype-unwanted-type' => "Ti '''\".\$1\"''' ket di mabalin a file type. Dagiti mayat a file types ket \$2.", 'filetype-banned-type' => "Ti '''\".\$1\"''' ket saan a mapalubosan a file type. Dagiti mabalin a file types ket \$2.", -'successfulupload' => 'Balligi ti panag-upload', 'uploadwarning' => 'Ballaag iti panagipan', 'savefile' => 'Idulin ti file', 'uploadedimage' => 'naipanen ti "[[$1]]"', @@ -837,6 +832,7 @@ Dagiti panid iti [[Special:Watchlist|listaan ti bambantayam]] ket '''naipuskol'' 'destfilename' => 'Destinasion a filename:', 'upload-maxfilesize' => 'Maximum a file size: $1', 'watchthisupload' => 'Bantayan daytoy a panid', +'upload-success-subj' => 'Balligi ti panag-upload', 'upload-proto-error' => 'Saan a husto a protocol', 'upload-proto-error-text' => 'Dagiti remote upload ket kasapulan a dagiti URLs ket mangrugi iti http:// wenno ftp://.', @@ -1060,7 +1056,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'Dagiti bambantayak', 'mywatchlist' => 'Dagiti bambantayak', -'watchlistfor' => "(para ken ni '''$1''')", 'nowatchlist' => 'Awan ti pampanid iti listaan dagiti bambantayam.', 'watchnologin' => 'Saan a nakastrek', 'watchnologintext' => 'Nasken a [[Special:UserLogin|naka-loginka]] tapno mabaliwam dagiti bambantayam a panid.', @@ -1494,10 +1489,10 @@ itsek ti husto a panangikapet iti latex, dvips, gs, samo i-convert', # Media information 'thumbsize' => 'Kakasla kuko a rukod:', 'widthheightpage' => '$1×$2, $3 a {{PLURAL:$3|panid|pampanid}}', -'file-info' => '(kadakkel ti file: $1, MIME type: $2)', -'file-info-size' => '($1 × $2 a pixel, kadakkel ti file: $3, MIME type: $4)', +'file-info' => 'kadakkel ti file: $1, MIME type: $2', +'file-info-size' => '$1 × $2 a pixel, kadakkel ti file: $3, MIME type: $4', 'file-nohires' => 'Awan mabalin a nangatngato a resolusion.', -'svg-long-desc' => '(SVG a file, babassit ngem $1 × $2 pixels, kadakkel ti file: $3)', +'svg-long-desc' => 'SVG a file, babassit ngem $1 × $2 pixels, kadakkel ti file: $3', 'show-big-image' => 'Sibubukel a resolusion', 'show-big-image-thumb' => 'Rukod daytoy a preview: $1 × $2 a pixels', diff --git a/languages/messages/MessagesInh.php b/languages/messages/MessagesInh.php index a1391a7c..9943ac14 100644 --- a/languages/messages/MessagesInh.php +++ b/languages/messages/MessagesInh.php @@ -19,44 +19,49 @@ $messages = array( 'tog-highlightbroken' => 'Йоаца Iинкаш хьахокха ишта (е вешта?).', 'tog-justify' => 'Яздам оагIува шоралца хьанийсъе', 'tog-hideminor' => 'ЗIамига хувцамаш керда дIахувцама дагаршкахь къайлаяккха', +'tog-hidepatrolled' => 'Керда хувцама дагарчеча дIанийсъя хувцамаш къайлаяккха', +'tog-newpageshidepatrolled' => 'Керда оагIувни дагарчеча дIанийсъя хувцамаш къайлаяккха', 'tog-extendwatchlist' => 'Шеръя теркама дагарче, массайола хувцамаш чулоацаш', 'tog-usenewrc' => 'Тоая керда хувцама дагаршкара пайда эца (JavaScript эша)', -'tog-numberheadings' => 'Кертера-деша таьрахь автоматически оттайе', -'tog-showtoolbar' => 'Хувцамаш еж йоа панель инструментов хьокха (JavaScript)', -'tog-editondblclick' => 'ОагIув хувца шозза клик йича (JavaScript)', -'tog-editsection' => 'ХIара дакъа "хувца" ссылк хьахьокха', -'tog-editsectiononrightclick' => 'Дакъа хувца дакъа-цIерах аьтта клик йича (JavaScript)', -'tog-showtoc' => 'Оглавление хьокха (цу оагIувна кхьаннена дукхагIа дакъа йеле)', -'tog-rememberpassword' => 'У компьютеретъ се цIи дагалаца', -'tog-editwidth' => 'Хувцамаш еж йоа моттиг шера хьалийтта', -'tog-watchcreations' => 'Аз хьаеж йоа оагIонаш со хьежача спискаех тIатоха', -'tog-watchdefault' => 'Аз нийсъйеж йоа оагIонаш со хьежача спискаех тIатоха', -'tog-watchmoves' => 'Аз цIи хийца оагIонаш со хьежача спискаех тIатоха', -'tog-watchdeletion' => 'Аз дIаяькха оагIонаш со хьежача спискаех тIатоха', -'tog-minordefault' => 'Ериг еж йоа хувцамаш лоархIаме йоацаж сен белгалде', -'tog-previewontop' => 'Хувцамаш еж бIарахьажа хьалха', -'tog-previewonfirst' => 'Эггара хьалха хувцамаш еж бIарахьажа хьалха', -'tog-nocache' => 'ОагIувна кеш е дехка', -'tog-enotifwatchlistpages' => 'Э-майл хьадайта суна со хьежача оагIув хийцача', -'tog-enotifusertalkpages' => 'Э-майл хьадайта суна аз къамял деж оагIув хийцача', -'tog-enotifminoredits' => 'Э-майл хьадайта суна лоархIаме йоацаж йоа хувцамаш йиеча', -'tog-enotifrevealaddr' => 'Хьокха са э-майл', -'tog-shownumberswatching' => 'Хьокха масса сег хьежаш ба', -'tog-fancysig' => 'Йоалача бесса кулг яздар (автоматически ссылк йоацаж)', -'tog-externaleditor' => 'Ший йоала редактор харжа', -'tog-externaldiff' => 'Диста де ший йоалла програм харжа', -'tog-showjumplinks' => '"Дехьадала" ссылк хьахьокха', +'tog-numberheadings' => 'Кертера-деша таьрахь ший лоIамаца оттайе', +'tog-showtoolbar' => 'ГIалатнийcдара юкъе лакхера гIирсий гартакх хьахокха (JavaScript)', +'tog-editondblclick' => 'Шозза цлицкацa oагIув хувца (JavaScript)', +'tog-editsection' => 'ХIара дакъа "хувца" яха Iинк хьахокха', +'tog-editsectiononrightclick' => 'Декъам хувца кертмугIа аьтта цлицка я (JavaScript)', +'tog-showtoc' => 'Кортанче хьокха (кхьаннена дукхагIа кертмугIанаш йoлa оагIувна)', +'tog-rememberpassword' => '(укх $1 {{PLURAL:$1|ден|деношкахь}}) мара са чувалара/чуялара дагалоаца дезаш дац', +'tog-watchcreations' => 'Аз яь йола оагIувнаш теркама дагарчеча чуяккха', +'tog-watchdefault' => 'Аз хийца йола оагIувнаш теркама дагарчеча чуяккха', +'tog-watchmoves' => 'Аз цIи хийца йола оагIувнаш теркама дагарчеча чуяккха', +'tog-watchdeletion' => 'Аз дIаяккха йола оагIувнаш теркама дагарчеча чуяккха', +'tog-minordefault' => 'Теркамза хувцамаш лоархIамза белгалде', +'tog-previewontop' => 'ГIалатнийсдара кора хьалхе бIаргтассам оттае', +'tog-previewonfirst' => 'ГIалатнийсдаре дехьавоалаш/йоалаш бIаргтассам хьахьокха', +'tog-nocache' => 'Укхазара оагIувнаший лочкъараш дIадоаде', +'tog-enotifwatchlistpages' => 'ОагIувнаший хувцамахь теркама дагарчера лаьца, д-фоштаца хоам бе', +'tog-enotifusertalkpages' => 'Са дувцама оагIув тIа хувцамаш хилача, д-фоштаца хоам бе', +'tog-enotifminoredits' => 'Геттара зIамига хувцамаш хилача, д-фоштаца хоам бе', +'tog-enotifrevealaddr' => 'ЗIы хоамаш тIа са фоштмоттиг хьахьокха', +'tog-shownumberswatching' => 'Ший теркама дагарченгахь оагIув чулаьца бола дакъалаьцархой таьрах хьахьокха', +'tog-fancysig' => 'Ший кулга яздара вики-хоамбаккхам (ший лоIаме Iинка йоацаш)', +'tog-externaleditor' => 'Арена гIалатнийсдарца болх бе (ший болх ховш болачара мара мегаш дац, хьамлоархара ший-тайпара оттам эша; [http://www.mediawiki.org/wiki/Manual:External_editors хьажа эша])', +'tog-externaldiff' => 'Арена бIасакхосса болхоагIувца болх бе (ший болх ховш болачара мара мегаш дац, хьамлоархара ший-тайпара оттам эша; [http://www.mediawiki.org/wiki/Manual:External_editors хьажа эша])', +'tog-showjumplinks' => '"Дехьадала" яха новкъостала Iинк хьахьокха', 'tog-uselivepreview' => 'Сиха бIарахьажар (JavaScript) (Экспериментально)', -'tog-forceeditsummary' => 'Хоам бе суна хувцамаш малагIа ер списка йеце', -'tog-watchlisthideown' => 'Аз йа хувцамаш со хьежача спискаех ма хьокха', -'tog-watchlisthidebots' => "Бот'ыз йа хувцамаш со хьежача спискаех ма хьокха", -'tog-watchlisthideminor' => 'ЛоархIаме йоацаж йоа хувцамаш со хьежача спискаех ма хьокха', -'tog-ccmeonemails' => 'Вуужаште аз дIадьахта э-майл суна а хьадайта', -'tog-diffonly' => 'Диста къал йоалаж йоа оагIувна дакъа ма хьаокха', +'tog-forceeditsummary' => 'Хоам бе, хувцамий лоацам белгал даь деци', +'tog-watchlisthideown' => 'Са хувцамаш теркама дагарчера къайладаккха', +'tog-watchlisthidebots' => 'БIатий хувцамаш теркама дагарчера къайладаккха', +'tog-watchlisthideminor' => 'Са зIамига хувцамаш теркама дагарчера къайладаккха', +'tog-watchlisthideliu' => 'Чубаьнна дакъалаьцархой хувцамаш теркама дагaрчеча къайлаяккха', +'tog-watchlisthideanons' => 'ЦIи йоаца дакъалаьцархой хувцамаш теркама дагрчеча къайлаяккха', +'tog-watchlisthidepatrolled' => 'Теркама дагарчера дIанийсъя хувцамаш къайлаяккха', +'tog-ccmeonemails' => 'Аз дакъалаьцархошоа дахта каьхаташ са д-фошта тIа хьатIадайта', +'tog-diffonly' => 'Диста къал йоалаж йола оагIувна дакъа ма хьокха', +'tog-showhiddencats' => 'Къайла цатегаш хьахьокха', 'underline-always' => 'Массаза', 'underline-never' => 'ЦIаккха', -'underline-default' => 'Браузер настройкаш хьаэца', +'underline-default' => 'МазбIарглокхарий оттамаш хайрамбе', # Dates 'sunday' => 'КIиранди', @@ -111,14 +116,21 @@ $messages = array( 'dec' => 'Чант.', # Categories related messages -'pagecategories' => '{{PLURAL:$1|Цатег|Цатегаш}}', -'category_header' => '"$1" Цатегчу оагIувнаш', -'subcategories' => 'Чурацатегаш', -'category-media-header' => '"$1" Цатегчу паьлаш', -'category-empty' => "''Укх цатегчоа цхьаккха оагIувнаш е паьлаш яц.''", -'hidden-categories' => '{{PLURAL:$1|Къайла цатег|Къайла цатегаш}}', -'hidden-category-category' => 'Къайла цатегаш', -'listingcontinuesabbrev' => 'дIахо', +'pagecategories' => '{{PLURAL:$1|Цатег|Цатегаш}}', +'category_header' => '"$1" Цатегчу оагIувнаш', +'subcategories' => 'Чурацатегаш', +'category-media-header' => '"$1" Цатегчу паьлаш', +'category-empty' => "''Укх цатегчоа цхьаккха оагIувнаш е паьлаш яц.''", +'hidden-categories' => '{{PLURAL:$1|Къайла цатег|Къайла цатегаш}}', +'hidden-category-category' => 'Къайла цатегаш', +'category-subcat-count' => '{{PLURAL:$2|Йола цатег тIехьара бухцатег чулоаца.|{{PLURAL:$1|$1 бухцатег хьахекха я|$1 бухцатегаш хьахекха я}} $2 йолачара.}}', +'category-subcat-count-limited' => 'Укх цатегий {{PLURAL:$1|$1 кIалцатег|$1 кIалцатегаш}}.', +'category-article-count' => '{{PLURAL:$2|Йола цатег цхьа оагIув мара чулоацац.|{{PLURAL:$1|$1 оагIув хьахекха я|$1 оагIувнаш хьахекха я}} укх цатега $2 йолачарахь.}}', +'category-article-count-limited' => 'Укх цатегчоахь {{PLURAL:$1|$1 оагIув|$1 оагIувнаш|}}.', +'category-file-count' => '{{PLURAL:$2|Укх цатего ца паьла мара чулоацац.|{{PLURAL:$1|$1 паьла хьахьекха я|$1 паьлаш хьахьекха я}} укх цатегий $2 долачаьрахь.}}', +'category-file-count-limited' => 'Укх цатегчоахь {{PLURAL:$1|$1 паьл|$1 паьлаш}}.', +'listingcontinuesabbrev' => 'дIахо', +'noindex-category' => 'Моттигза оагIувнаш', 'about' => 'Лоацам', 'article' => 'Йоазув', @@ -143,20 +155,21 @@ $messages = array( 'faqpage' => 'Project:Каст-каста хаттараш', # Vector skin -'vector-action-addsection' => 'БIагал тIатоха', -'vector-action-delete' => 'ДIадаккха', -'vector-action-move' => 'ЦIи хувца', -'vector-action-protect' => 'Лораде', -'vector-action-undelete' => 'Юхаоттаде', -'vector-action-unprotect' => 'Лорам тIерaбаккха', -'vector-view-create' => 'Кхоллам', -'vector-view-edit' => 'Хувцар', -'vector-view-history' => 'Искар', -'vector-view-view' => 'Дешам', -'vector-view-viewsource' => 'ЗIембаккхама бIаргтассам', -'actions' => 'Дулархам', -'namespaces' => 'ЦIерий аренаш', -'variants' => 'Дошаламаш', +'vector-action-addsection' => 'БIагал тIатоха', +'vector-action-delete' => 'ДIадаккха', +'vector-action-move' => 'ЦIи хувца', +'vector-action-protect' => 'Лораде', +'vector-action-undelete' => 'Юхаоттаде', +'vector-action-unprotect' => 'Лорам тIерaбаккха', +'vector-simplesearch-preference' => 'Яьржа лахарий довзамаш чуяккха (Vector skin only)', +'vector-view-create' => 'Кхоллам', +'vector-view-edit' => 'Хувцар', +'vector-view-history' => 'Искар', +'vector-view-view' => 'Дешам', +'vector-view-viewsource' => 'ЗIембаккхама бIаргтассам', +'actions' => 'Дулархам', +'namespaces' => 'ЦIерий аренаш', +'variants' => 'Дошаламаш', 'errorpagetitle' => 'ГIалат', 'returnto' => '$1 оагIув тIа юхавалар', @@ -212,6 +225,8 @@ $messages = array( 'jumpto' => 'Укхаза дехьавала:', 'jumptonavigation' => 'никътахкар', 'jumptosearch' => 'леха', +'pool-queuefull' => 'Хаттарий цIа хьалдизад', +'pool-errorunknown' => 'Довзаш доаца гIалат', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Лоацам {{SITENAME}}', @@ -251,7 +266,7 @@ $messages = array( 'viewsourceold' => 'xьадоагIа къайладоагIа тIа бIаргтасса', 'editlink' => 'хувца', 'viewsourcelink' => 'xьадоагIа къайладоагIа тIа бIаргтасса', -'editsectionhint' => ' Тоабдакъа хувца: $1', +'editsectionhint' => 'Декъам хувца: $1', 'toc' => 'Чулоацам', 'showtoc' => 'хьахокха', 'hidetoc' => 'къайладаккха', @@ -278,31 +293,54 @@ $messages = array( 'nstab-category' => 'Цатег', # Main script and global functions -'nosuchaction' => 'Цу тайпара дулархам бац', +'nosuchaction' => 'Цу тайпара дулархам бац', +'nosuchspecialpage' => 'Изза мо гIооагIув яц', # General errors -'missing-article' => 'Кораде дезаш хинна оагIувни яздам корадаьдац «$1» $2. +'error' => 'ГIалат', +'missing-article' => 'Кораде дезаш хинна оагIувни яздам корадаьдац «$1» $2. Из мо гIалат нийсалуш хула, саг тишъенна Iинкаца, дадаьккха дола оагIувни хувца искара тIа чувала гIиртача. Наггахь санна из иштта деци, шоана гIирса Iалаш деча гIалат корая хила мега. Дехар да, [[Special:ListUsers/sysop|мазакулгалхочоа]] хоам бе, URL хьахокхаш.', -'viewsource' => 'Тахкам', +'missingarticle-rev' => '(бIаргоагIув № $1)', +'internalerror' => 'Чура гIалат', +'internalerror_info' => 'Чура гIалат: $1', +'badtitle' => 'Мегаш йоаца цIи', +'badtitletext' => 'Дехаш дола оагIувни цIи, нийса яц, яьсса я е меттаюкъара е викиюкъара цIи харцахь я. ЦIера юкъе мегаш доаца харакъаш нийсадена хила мегаш да.', +'viewsource' => 'Тахкам', # Login and logout pages 'yourname' => 'Дакъалаьцархочунна цIи:', 'yourpassword' => 'КъайладоагIа:', 'yourpasswordagain' => 'КъайладоагIа юха Iоязаде:', -'login' => 'Чувала', +'remembermypassword' => '(укх $1 {{PLURAL:$1|ден|деношкахь}}) мара са чувалара/чуялара дагалоаца дезаш дац', +'yourdomainname' => 'Шун цIеноагIув:', +'login' => 'Чувала/яла', 'nav-login-createaccount' => 'ЦIи яккха/Ший oагIув ела', +'loginprompt' => 'Укх болхaоагIуваца доттагIал лаца, шун "cookies" йийла хьалдеза.', 'userlogin' => 'ЦIи яккха/ОагIув ела', -'userloginnocreate' => 'Чувала', -'logout' => 'Аравала', -'userlogout' => 'Аравала', +'userloginnocreate' => 'Чувала/яла', +'logout' => 'Аравала/яла', +'userlogout' => 'Аравала/яла', 'notloggedin' => 'Оаш шоай цIи хьааьннадац', +'nologin' => "Теркама йоазув яц? '''$1'''.", 'nologinlink' => 'Лархама йоазув де', -'gotaccountlink' => 'Чувала', +'createaccount' => 'Керда дакъалаьцархо кхолла', +'gotaccount' => "Укхаза дIаязабенна дий шо? '''$1'''.", +'gotaccountlink' => 'Чувала/яла', +'createaccountmail' => 'Д-фоштаца', +'createaccountreason' => 'Бахьан:', 'mailmypassword' => 'Керда къайладоагIа хьаэца', +'loginlanguagelabel' => 'Мотт: $1', + +# Password reset dialog +'oldpassword' => 'Къаьна къайладоагI:', +'newpassword' => 'Керда къайладоагI:', +'retypenew' => 'Керда къайладоагIа юха Iоязаде:', +'resetpass-submit-loggedin' => 'КъайладогIа дIахувца', +'resetpass-submit-cancel' => 'Юхавал/ялa', # Edit page toolbar 'bold_sample' => 'Сома яздам', @@ -312,44 +350,82 @@ $messages = array( 'link_sample' => 'Iинка кертмугI', 'link_tip' => 'ЧураIинк', 'extlink_sample' => 'Iинка кертдош http://www.example.com', +'extlink_tip' => 'Арена Iинка (http:// тамагIахь дийца ма ле)', 'headline_sample' => 'KертмугIa яздама', 'headline_tip' => '2-гIа кертмугIa лагIа', 'nowiki_sample' => 'Укхаза кийчаде дезаш доаца яздам оттаде', +'nowiki_tip' => 'Вики-бIасоттамахь теркам ма бе', 'image_tip' => 'Чуяккха паьла', 'media_tip' => 'Паьла Iинк', 'sig_tip' => 'Шун кулгаяздар а, хIанзара ха а', 'hr_tip' => 'Мухала мугI (могаш тайпара къеззига хайраде)', # Edit pages -'summary' => 'Хувцамий белгалдер', -'subject' => 'БIагал/кертмугI:', -'minoredit' => 'ЗIамига хувцам', -'watchthis' => 'Укх оагIува теркам бе', -'savearticle' => 'ОагIув хьаязде', -'preview' => 'Хьалхе бIаргтассар', -'showpreview' => 'Хьалхе бIаргтaссар', -'showlivepreview' => 'Сиха бIаргтассар', -'showdiff' => 'Даь хувцамаш', -'anoneditwarning' => 'Зем хила! Шо кха чудаьннадац. Шун IP-моттиг укх хийца оагIув искаречу дIаяздаь хургъе.', -'summary-preview' => 'Лоацам ба:', -'newarticle' => '(Kерда)', -'noarticletext' => "У сахьате укх оагIув тIа яздам доацаш да. +'summary' => 'Хувцамий белгалдер', +'subject' => 'БIагал/кертмугI:', +'minoredit' => 'ЗIамига хувцам', +'watchthis' => 'Укх оагIува теркам бе', +'savearticle' => 'ОагIув хьаязде', +'preview' => 'Хьалхе бIаргтассар', +'showpreview' => 'Хьалхе бIаргтaссар', +'showlivepreview' => 'Сиха бIаргтассар', +'showdiff' => 'Даь хувцамаш', +'anoneditwarning' => 'Зем хила! Шо кха чудаьннадац. Шун IP-моттиг укх хийца оагIув искаречу дIаяздаь хургъе.', +'summary-preview' => 'Лоацам ба:', +'subject-preview' => 'Кортяздам:', +'blockedtitle' => 'Дакъалаьцархо чIега бела ва/я', +'blockednoreason' => 'бахьан доацаш да', +'loginreqlink' => 'чувала/яла', +'accmailtitle' => 'КъайладоагI дIадахатад', +'newarticle' => '(Kерда)', +'newarticletext' => 'Шо йоаца оагIув тIа Iинкаца дехьадаьннад. +Из хьае, кIалхагIа доала корачу яздам очуязаде (кхета хала дале [[{{MediaWiki:Helppage}}|новкъостала оагIув тIа]] бIаргтасса). +Цаховш укхаза нийсадена дале, юхавала/яла яха тоIобама тIа пIелга тоIобе.', +'noarticletext' => "У сахьате укх оагIув тIа яздам доацаш да. [[Special:Search/{{PAGENAME}}|цу тайпара цIи дувцам кораде]] кхыдола йоазувашкахь йийша я шун, вешта [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} тара дола таптарий йоазо карае], е '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} изза мо цIи йоалаш оагIув ела]'''.", -'note' => "'''ХIамоалар:'''", -'editing' => 'ГIалатнийсдар: $1', -'yourtext' => 'Хьа яздам', -'copyrightwarning' => "Теркам бе, $2 ($1 хьажа) бокъонаца лорадеш, тIахьежама кIала уллаш, оаш мел чуяккхаш дола хоамаш, яздамаш долга. +'noarticletext-nopermission' => 'Укх сахьате укх оагIув тIа яздам дац. +Шун йийшая, кхыдола йоазувнашкахь [[Special:Search/{{PAGENAME}}|дола цIерий хаттам корае]] е [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} нийсамий тептара йоазувнаш корае].', +'note' => "'''ХIамоалар:'''", +'previewnote' => "'''Хьалхе бIаргтассам мара бац, яздам кха яздаь дац!'''", +'editing' => 'ГIалатнийсдар: $1', +'editingsection' => 'ГIалатнийсдар $1 (оагIувдакъа)', +'editingcomment' => 'ГIалатнийсдар $1 (керда декъам)', +'editconflict' => 'ГIалатнийсдара кховсам: $1', +'yourtext' => 'Хьа яздам', +'copyrightwarning' => "Теркам бе, $2 ($1 хьажа) бокъонаца лорадеш, тIахьежама кIала уллаш, оаш мел чуяккхаш дола хоамаш, яздамаш долга. Наггахь санна шоай яздамаш пурам доацаш мала волашву саго хувца е кхы дола моттиге яздердолаш, безам беци, укхаз Iочуцаяздеча, дикаьгIа да.
    Оаш дош лу, даь дола хувцама да волга/йолга, е оаш пурам долаш Iочуяздеш да кхычера меттигара шоай яздамаш/хоамаш.
    '''ЯЗДАРХОЙ БОКЪОЦА ЛОРАДЕШ ДОЛА ХIАМАШ, ЦАРА ПУРАМ ДОАЦАШ, IОЧУМАЯЗАДЕ!'''", -'template-protected' => ' (лорам лаьца бa)', +'templatesused' => 'Укх бIаргоагIувни оагIув тIа лелая {{PLURAL:$1|Куцкеп|Куцкепаш}}:', +'templatesusedpreview' => 'Хьалхе бIаргтассама оагIув тIа леладеш дола {{PLURAL:$1|Куцкеп|Куцкепаш}}:', +'template-protected' => ' (лорам лаьца бa)', +'template-semiprotected' => '(дакъа-лорам)', +'hiddencategories' => 'Ер оагIув укх {{PLURAL:$1|къайла цатегаца|къайла цатегашца}} дакъа лоаца:', +'permissionserrorstext-withaction' => '$2 де бокъо яц {{PLURAL:$1|из бахьан долаш|из бахьанаш долаш}}:', +'recreate-moveddeleted-warn' => "'''Зем бе! Шо хьалххе дайоаккхаш хина оагIув хьае гIарта.''' + +Хьажа, бокъонцахь езаш йолга. +КIалхагIа укх оагIуви дIадаккхамeи цIи хувцамeи тептараш хьекха да.", +'moveddeleted-notice' => 'Ер оагIув дIаяккха хиннай. +Новкъостала, кIалха дIадаккхама а хувцама а тептарашкера нийсама йоазувнаш хьахьекха я.', +'log-fulllog' => 'Деррига таптара бIаргтасса', +'edit-conflict' => 'Хувцамий кховсам.', + +# Parser/template warnings +'post-expand-template-inclusion-warning' => 'Зембакхам: дагара куцкепаш чулоаца дустам геттара доккха да. +Цхьадола куцкепаш чулоацалургдац.', +'post-expand-template-inclusion-category' => 'Чулоаца куцкепий мегаш дола дустам дукхалена тIехьайоала оагIувнаш', +'post-expand-template-argument-warning' => 'Зем бе! Ер оагIув цаI куцкепа аьладош мара чулоацац, юхадастара сел доккха дустам йолаш. +Цу тайпара аьладешаш IокIаладаьккха да.', +'post-expand-template-argument-category' => 'Куцкепий теркамза аьладешаш чулоаца оагIувнаш', # History pages 'viewpagelogs' => 'Укх оагIува тептараш хокха', 'currentrev-asof' => '$1 тIа эггара тIехьара доржам', 'revisionasof' => '$1 доржам', +'revision-info' => '$1; $2 хувцам', 'previousrevision' => '← Xьалхарча', 'nextrevision' => 'TIадоагIа →', 'currentrevisionlink' => 'Дола доржам', @@ -358,10 +434,17 @@ $messages = array( 'last' => 'хьалх.', 'page_first' => 'хьалхара', 'page_last' => 'тIехьара', +'histlegend' => "Кхетам: (хIанз.) = хIанза йолачунна бIаргоагIувни хьакъоастам ба; (хьалх.) = хьалха хинначунна бIаргоагIувни хьакъоастам ба; '''зI''' = зIамига хьахувцам ба.", 'history-fieldset-title' => 'Искара бIаргтасса', +'history-show-deleted' => 'ДIадаьккхараш мара', 'histfirst' => 'къаьнараш', 'histlast' => 'ха яннараш', +# Revision feed +'history-feed-title' => 'Хувцамий искар', +'history-feed-description' => 'Укх оагIуви вики тIа хувцамий искар', +'history-feed-item-nocomment' => '$1гIара $2гIачу', + # Revision deletion 'rev-delundel' => 'хьахокха/къайлаяккха', 'rev-showdeleted' => 'хьахокха', @@ -369,57 +452,103 @@ $messages = array( 'revdelete-radio-set' => 'XIаа', 'revdelete-radio-unset' => 'A', 'revdelete-log' => 'Бахьан', +'revdelete-logentry' => '[[$1]] доржама оагIувни бIасанче хийцай', 'revdel-restore' => ' БIасанче хувца', +'revdel-restore-deleted' => 'дIадаьккха доржамаш', +'revdel-restore-visible' => 'бIаргагушдола доржамаш', 'pagehist' => 'ОагIува искар', +'deletedhist' => 'ДIадакхамий искар', +'revdelete-content' => 'чулоацаро', +'revdelete-summary' => 'хувцамий лоацам', 'revdelete-uname' => 'дакъалаьцархочунна цIи', +'revdelete-hid' => 'къайла я $1', +'revdelete-log-message' => '$1ара $2чунна {{PLURAL:$2|доржама|доржамий}}', + +# History merging +'mergehistory-list' => 'ВIашагIатоха хувцамий искар', +'mergehistory-go' => 'ВIашагIатоха хувцамаш хьахьокха', +'mergehistory-submit' => 'Хувцамаш вIашагIатоха', +'mergehistory-empty' => 'ВIашагIатохара хувцамаш кораяяц', +'mergehistory-reason' => 'Бахьан:', # Merge log 'revertmerge' => ' Декъа', # Diffs 'history-title' => '"$1" хувцамий искар', +'difference' => '(Доржамашкахь юкъера къоастамаш)', 'lineno' => 'МугI $1:', 'compareselectedversions' => 'Хьаржа доржамаша тарона тIа хьажа', -'editundo' => 'белгалдаккха', +'editundo' => 'юхавала/яла', +'diff-multi' => '({{PLURAL:$1|$1 юкъара доржам хьахьекха дац|$1 юкъара доржамаш хьахьекха дац}} {{PLURAL:$2|$2 дакъалаьцархочунна|$2 дакъалаьцархоший}})', # Search results -'searchresults' => 'Тахкама гIулакххилар', -'searchresults-title' => '"$1" тахка', -'searchresulttext' => 'Хьахьоадайтама оагIувнаш тIа тахкамахь лаьца лоаца маIандар эца [[{{MediaWiki:Helppage}}|новкъостала декъамага]] хьажа.', -'searchsubtitle' => 'Хоаттамахь лаьца «[[:$1]]» ([[Special:Prefixindex/$1|цу цIерахь ювалу оагIувнаш]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|цу цIерахь Iинкаш еж йола]])', -'searchsubtitleinvalid' => "'''$1''' хаттара", -'notitlematches' => 'ОагIувни цIераш вIашагIа кхеташ яц', -'notextmatches' => 'ОагIувнаша ядамий вIашагIакхетараш дац', -'prevn' => '{{PLURAL:$1|хьалхарча $1|хьалхарчаш $1|хьалхарчаш $1}}', -'nextn' => '{{PLURAL:$1|тlехьайоагlар $1|тlехьайоагlараш $1|тlехьайоагlараш $1}}', -'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) хьажа', -'searchhelp-url' => 'Help:Чулоацам', -'search-result-size' => ' $1 ({{PLURAL:$2|1 дош|$2 дешаш}})', -'search-redirect' => '($1 дехьачуяккхар)', -'search-section' => ' (дакъа $1)', -'search-suggest' => 'Iа лохар из хила мега: $1', -'search-interwiki-caption' => 'Гаргалона хьахьоадайтамаш', -'search-interwiki-default' => '$1 толамчаш:', -'search-interwiki-more' => '(кха)', -'search-mwsuggest-enabled' => ' Хьехамашца', -'search-mwsuggest-disabled' => ' Хьехамаш боацаш', -'nonefound' => "'''Зем лаца.''' Цхьа дола цIера аренаш мара лахалац. +'searchresults' => 'Тахкама гIулакххилар', +'searchresults-title' => '"$1" тахка', +'searchresulttext' => 'Хьахьоадайтама оагIувнаш тIа тахкамахь лаьца лоаца маIандар эца [[{{MediaWiki:Helppage}}|новкъостала декъамага]] хьажа.', +'searchsubtitle' => 'Хоаттамахь лаьца «[[:$1]]» ([[Special:Prefixindex/$1|цу цIерахь ювалу оагIувнаш]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|цу цIерахь Iинкаш еж йола]])', +'searchsubtitleinvalid' => "'''$1''' хаттара", +'notitlematches' => 'ОагIувни цIераш вIашагIа кхеташ яц', +'notextmatches' => 'ОагIувнаша ядамий вIашагIакхетараш дац', +'prevn' => '{{PLURAL:$1|хьалхарча $1|хьалхарчаш $1|хьалхарчаш $1}}', +'nextn' => '{{PLURAL:$1|тlехьайоагlар $1|тlехьайоагlараш $1|тlехьайоагlараш $1}}', +'prevn-title' => '{{PLURAL:$1|$1 хьалхара йоазув|$1 хьалхара йоазувнаш}}', +'nextn-title' => '{{PLURAL:$1|$1 тIехьара йоазув|$1 тIехьара йоазувнаш}}', +'shown-title' => 'Укх оагIувни $1 {{PLURAL:$1|йоазув|йоазувнаш}} хьахокха', +'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) хьажа', +'searchmenu-exists' => "'''Укх вики-хьахьоадайтама чу ер оагув \"[[:\$1]]\" я'''", +'searchmenu-new' => "'''Укх \"[[:\$1]]\" вики-хьахьоадайтамчоахь оагIув де!'''", +'searchhelp-url' => 'Help:Чулоацам', +'searchprofile-articles' => 'ЛардоагIувнаш', +'searchprofile-project' => 'Дагарчеи хьахьоадайтамеи оагIувнаш', +'searchprofile-images' => 'Медифаг', +'searchprofile-everything' => 'Массана', +'searchprofile-advanced' => 'Шера я', +'searchprofile-articles-tooltip' => '$1чу лахар', +'searchprofile-project-tooltip' => '$1чу лахар', +'searchprofile-images-tooltip' => 'Паьлий лахар', +'searchprofile-everything-tooltip' => 'Массадола оагIувний лахар (дувцама оагIувнаш чулоацаш)', +'searchprofile-advanced-tooltip' => 'Iочуязья цIераренашкахь лаха', +'search-result-size' => ' $1 ({{PLURAL:$2|1 дош|$2 дешаш}})', +'search-result-category-size' => '{{PLURAL:$1|$1 дакъа|$1 дакъаш}} ({{PLURAL:$2|$2 кIалцатег|$2 кIалцатегаш}}, {{PLURAL:$3|$3 паьла|$3 паьлий|$3 паьлий}})', +'search-redirect' => '($1 дехьачуяккхар)', +'search-section' => ' (дакъа $1)', +'search-suggest' => 'Iа лохар из хила мега: $1', +'search-interwiki-caption' => 'Гаргалона хьахьоадайтамаш', +'search-interwiki-default' => '$1 толамчаш:', +'search-interwiki-more' => '(кха)', +'search-mwsuggest-enabled' => ' Хьехамашца', +'search-mwsuggest-disabled' => ' Хьехамаш боацаш', +'searchrelated' => 'гаргара', +'searchall' => 'деррига', +'showingresultsheader' => "{{PLURAL:$5|'''$1''' толамче укх '''$3''' долачарахь|'''$1 — $2''' толамчаш укх '''$3''' долачарахь}} '''$4'''а", +'nonefound' => "'''Зем лаца.''' Цхьа дола цIера аренаш мара лахалац. ''all:'' яха тIаоттарга пайдабе, массадола цIеран аренашкахь (дакъалаьцархой дуцамаш а, куцкепаш а, кхы дара а чулоацаш), е деза цIера аренаш Iочуязаде.", -'powersearch' => ' Доккха тахкар', -'powersearch-legend' => ' Доккха тахкар', -'powersearch-ns' => ' ЦIерий аренашкахь лахар', -'powersearch-redir' => 'ДIа-хьа оагIувнаш гойта', -'powersearch-field' => 'Лахар', +'search-nonefound' => 'ДIахаттама нийсамаш корадаьдац.', +'powersearch' => ' Доккха тахкар', +'powersearch-legend' => ' Доккха тахкар', +'powersearch-ns' => ' ЦIерий аренашкахь лахар', +'powersearch-redir' => 'ДIа-хьа оагIувнаш гойта', +'powersearch-field' => 'Лахар', +'powersearch-toggleall' => 'Деррига', +'powersearch-togglenone' => 'Цхьаккха', + +# Quickbar +'qbsettings-none' => 'Цхьаккха', # Preferences page 'preferences' => 'Оттамаш', 'mypreferences' => 'Оттамаш', 'prefsnologin' => 'Шо чудаьнна дац', -'changepassword' => 'КъайладогIа дIахувцар', +'changepassword' => 'КъайладоaгIа дIахувцар', 'prefs-skin' => 'БIагала куц', 'skin-preview' => 'Хьажа', 'prefs-datetime' => 'Таьрахьеи сахьатеи', 'prefs-personal' => 'Хьа хьай далам', +'prefs-rc' => 'Керда хувцамаш', +'prefs-watchlist' => 'Теркама дагарче', +'prefs-watchlist-days' => 'Ден дукхал', +'prefs-resetpass' => 'КъайладогIа хувца', 'prefs-rendering' => 'ТIера бIаса', 'saveprefs' => 'Дита', 'prefs-editing' => 'ГIалатнийсдар', @@ -444,62 +573,113 @@ $messages = array( 'yourlanguage' => 'Мотт:', 'gender-male' => 'МаIа', 'gender-female' => 'Кхал', +'email' => 'Д-фошт', 'prefs-signature' => 'Кулгяздар', # User rights -'userrights-user-editname' => 'Дакъалаьцархочунна цIи Iоязаде', -'editusergroup' => 'Дакъалаьцархочунна тоабаш хувца', -'saveusergroups' => 'Дакъалаьцархочунна тоабаш дита', -'userrights-groupsmember' => 'Тоабий дакъалаьцархо:', +'userrights-user-editname' => 'Дакъалаьцархочунна цIи Iоязаде', +'editusergroup' => 'Дакъалаьцархочунна тоабаш хувца', +'saveusergroups' => 'Дакъалаьцархочунна тоабаш дита', +'userrights-groupsmember' => 'Тоабий дакъалаьцархо:', +'userrights-reason' => 'Бахьан:', +'userrights-changeable-col' => 'Оаш хувца мегаш йола тоабаш', +'userrights-unchangeable-col' => 'Оаш хувца мегаш йоаца тоабаш', # Groups +'group' => 'Тоаб:', +'group-user' => 'Дакъалаьцархой', +'group-bot' => 'БIаташ', 'group-sysop' => 'Мазакулгалхой', +'group-all' => '(деррига)', -'group-user-member' => 'дакъалаьцархо', +'group-user-member' => 'дакъалаьцархо', +'group-bot-member' => 'бIат', +'group-sysop-member' => 'мазакулгалхо', 'grouppage-user' => '{{ns:project}}:Дакъалаьцархой', +'grouppage-bot' => '{{ns:project}}:БIаташ', 'grouppage-sysop' => '{{ns:project}}:Мазакулгалхой', # Rights -'right-read' => 'ОагIувнаш деша', -'right-edit' => 'ОагIувнаш хувца', +'right-read' => 'ОагIувнаш деша', +'right-edit' => 'ОагIувнаш хувца', +'right-createtalk' => 'дувцама оагIувний хьакхоллам', +'right-move' => 'ОагIувний цIи хувца', +'right-movefile' => 'Паьлий цIи хувца', # User rights log -'rightslog' => 'Дакъалаьцархочунна бокъона тептар', +'rightslog' => 'Дакъалаьцархочунна бокъона тептар', +'rightsnone' => '(а)', # Associated actions - in the sentence "You do not have permission to X" +'action-read' => 'Укх оагIуви дешам', 'action-edit' => 'Ер оагIув хувца', # Recent changes -'nchanges' => '$1 {{PLURAL:$1|хувцам|хувцамаш}}', -'recentchanges' => 'Керда хувцамаш', -'recentchanges-legend' => 'Керда хувцамий оттамаш', -'rclistfrom' => '$1 тIара хувцамаш хьахокха', -'rcshowhideminor' => 'зIамига хувцамаш $1', -'rcshowhideliu' => 'Чубаьнначара дакъалаьцархочий $1', -'rcshowhideanons' => 'цIияьккханза дакъалаьцархой $1', -'rcshowhidemine' => '$1 сай хувцамаш', -'diff' => 'кхы.', -'hist' => 'искар', -'hide' => 'Къайладаккха', -'show' => 'Хьахокха', -'minoreditletter' => 'м', -'newpageletter' => 'Н', -'boteditletter' => 'б', +'nchanges' => '$1 {{PLURAL:$1|хувцам|хувцамаш}}', +'recentchanges' => 'Керда хувцамаш', +'recentchanges-legend' => 'Керда хувцамий оттамаш', +'recentchangestext' => 'КIалхагIа лоарамий доаламе тIехьара оагIувний хувцамаш дIаязадаь да{{grammar:genitive|{{SITENAME}}}}.', +'recentchanges-feed-description' => 'Укх ларамца тIехьара викихувцамашт теркам бе.', +'recentchanges-label-newpage' => 'Укх хувцамаца керда оагIув даь хиннад', +'recentchanges-label-minor' => 'ЗIамига хувцам я', +'recentchanges-label-bot' => 'Ер хувцам бIатаца я е', +'recentchanges-label-unpatrolled' => 'Ер хувцам ший моттиге кха дIадехьаяккхаяц.', +'rcnote' => "{{PLURAL:$1|Тlехьара '''$1''' хувцам|Тlехьара '''$1''' хувцамаш}} дола '''$2''' {{PLURAL:$2|ден|деношкахь}}, укх сахьате $5 $4.", +'rcnotefrom' => 'КIалхагIа хувцамаш хьахьекха я $2 денза ($1 кхачалца).', +'rclistfrom' => '$1 тIара хувцамаш хьахокха', +'rcshowhideminor' => 'зIамига хувцамаш $1', +'rcshowhidebots' => '$1 шабелхалой', +'rcshowhideliu' => 'Чубаьнначара дакъалаьцархочий $1', +'rcshowhideanons' => 'цIияьккханза дакъалаьцархой $1', +'rcshowhidepatr' => '$1 теркам даь хувцамаш', +'rcshowhidemine' => '$1 сай хувцамаш', +'rclinks' => '$2 динахь
    $3 $1 хинна тIехьара хувцамаш хьахокха', +'diff' => 'кхы.', +'hist' => 'искар', +'hide' => 'Къайладаккха', +'show' => 'Хьахокха', +'minoreditletter' => 'м', +'newpageletter' => 'Н', +'boteditletter' => 'б', +'rc-enhanced-expand' => 'Ма дарра чулоацамаш хьахокха (JavaScriptаца)', +'rc-enhanced-hide' => 'Ма дарра чулоацамаш къайладаккха', # Recent changes linked -'recentchangeslinked' => 'Гаргалона хувцамаш', -'recentchangeslinked-summary' => "Ер, Iинк я йола оагIув (е укх цатегачу чуйоагIараш), дукха ха йоацаш хьийца оагIувнашки дагарче я. +'recentchangeslinked' => 'Гаргалона хувцамаш', +'recentchangeslinked-toolbox' => 'Гаргалона хувцамаш', +'recentchangeslinked-title' => '$1ца хьалаьца хувцамаш', +'recentchangeslinked-noresult' => 'Укх заманашка гаргарон оагIувнаш тIа хувцамаш хиннаяц.', +'recentchangeslinked-summary' => "Ер, Iинк я йола оагIув (е укх цатегачу чуйоагIараш), дукха ха йоацаш хьийца оагIувнашки дагарче я. [[Special:Watchlist|Шун теркама дагаршкахь]] чуйоагIа оагIувнаш '''белгалъя я'''.", -'recentchangeslinked-page' => 'ОагIува цIи', +'recentchangeslinked-page' => 'ОагIува цIи', +'recentchangeslinked-to' => 'ОагIувнаш тIа хувцамаш хьахокха, хьахекха йола оагIув тIа Iинкаш еш йола.', # Upload -'upload' => 'Паьл чуяккха', +'upload' => 'Паьл чуяккха', +'uploadlogpage' => 'Чуяккхамий тептар', +'filedesc' => 'Лоаца лоацам', +'fileuploadsummary' => 'Лоаца лоацам:', +'uploadedimage' => '"[[$1]]" чуяккхай', + +'license' => 'ЦIийяздар', +'license-header' => 'ЦIийяздар', + +# Special:ListFiles +'imgfile' => 'паьл', +'listfiles' => 'Паьлий дагарче', +'listfiles_date' => 'Денха', +'listfiles_name' => 'Паьла цIи', +'listfiles_user' => 'Дакъалаьцархо', +'listfiles_size' => 'Дустам', +'listfiles_description' => 'Лоацам', +'listfiles_count' => 'Доржамаш', # File description page 'file-anchor-link' => 'Паьл', 'filehist' => 'Паьла искар', 'filehist-help' => 'Хьалхе паьла мишта хиннай хьожаpгволаш/хьожаpгйолаш, дентаьрах/сахьата тIа пIелга тIообе.', +'filehist-revert' => 'юхаяккха', 'filehist-current' => 'xIанзара', 'filehist-datetime' => 'Дентаьрахь/Ха', 'filehist-thumb' => 'ЗIамигасуртанче', @@ -511,15 +691,19 @@ $messages = array( 'filehist-missing' => 'Паьла йоацаш я', 'imagelinks' => 'Паьла Iинкаш', 'linkstoimage' => '{{PLURAL:$1|ТIехьайоагIа $1 оагIув Iинк ду|ТIехьайоагIа $1 оагIувнаш Iинкаш ду}} укх паьла тIа:', +'nolinkstoimage' => 'Йола паьлат Iинк ю оагIувнаш дац', 'sharedupload' => 'Ер паьла $1чера я, кхыча хьахьоадайтамча хьахайраде йийшайолаш я.', +'sharedupload-desc-here' => 'Ер паьл $1чара я, кхыдола хьахьоадайтамача хайрамбе йийш йолаш да. +Цунна [$2 лоацама оагIувца] лоаца маIандар кIалхагIа латта.', 'uploadnewversion-linktext' => 'Укх паьлий керда бIаса чуяккха', # File reversion 'filerevert-comment' => 'Бахьан:', # File deletion -'filedelete-comment' => 'Бахьан:', -'filedelete-submit' => 'ДIадаккха', +'filedelete-comment' => 'Бахьан:', +'filedelete-submit' => 'ДIадаккха', +'filedelete-reason-otherlist' => 'Кхыдола бахьан', # MIME search 'download' => 'хьачуяккха', @@ -527,12 +711,27 @@ $messages = array( # Unwatched pages 'unwatchedpages' => 'Теркамза оагIувнаш', +# Random page +'randompage' => 'Дагадоаца йоазув', + # Statistics -'statistics' => 'Дагара куц', +'statistics' => 'Дагара куц', +'statistics-pages' => 'ОагIувний', + +'disambiguationspage' => 'Template: ЦаI маIандоацар', + +'brokenredirects-edit' => 'хувца', +'brokenredirects-delete' => 'дIадаккха', + +'withoutinterwiki-submit' => 'Хьахокха', # Miscellaneous special pages 'nbytes' => '$1 {{PLURAL:$1|бIат|бIаташ}}', 'nmembers' => '$1 {{PLURAL:$1|дакъалаьцархо|дакъалаьцархой}}', +'prefixindex' => 'ОагIувнаший хьалхера цIи хьагойтар', +'shortpages' => 'Лоаца оагIувнаш', +'longpages' => 'Доккхий оагIувнаш', +'usercreated' => '$1ара $2чуча даь да', 'newpages' => 'Керда оагIувнаш', 'move' => 'ЦIи хувца', 'movethispage' => 'Укх оагIува цIи хувца', @@ -549,7 +748,10 @@ $messages = array( # Special:AllPages 'allpages' => 'Еррига оагIувнаш', +'alphaindexline' => '$1гIара $2гIачу', 'prevpage' => '($1) хьалхара оагIув', +'allpagesfrom' => 'Цу тайпара ювлаж йола оагIувнаш белгал е:', +'allpagesto' => 'Укх оагIувнаш тIа бIарга дита:', 'allarticles' => 'Еррига оагIувнаш', 'allpagessubmit' => 'Кхоачашде', @@ -557,8 +759,9 @@ $messages = array( 'categories' => 'Цатегаш', # Special:LinkSearch -'linksearch' => 'ЧураIинкаш', -'linksearch-ok' => 'Лаха', +'linksearch' => 'ЧураIинкаш', +'linksearch-ok' => 'Лаха', +'linksearch-line' => '$1 тIа Iинк $2 юкъера', # Special:Log/newusers 'newuserlogpage' => 'Дакъалаьцархоший дIаязбeнна таптар', @@ -568,11 +771,12 @@ $messages = array( 'listgrouprights-members' => '(тоабий дагарче)', # E-mail user -'emailuser' => 'Дакъалаьцархочоа Д-фошт:', +'emailuser' => 'Дакъалаьцархочоа д-фошт:', # Watchlist 'watchlist' => 'Теркама дагарче', 'mywatchlist' => 'Теркама дагарче', +'watchlistfor2' => '$1 $2 царна', 'addedwatch' => 'Теркама оагIув тIа дIатIаяккха я', 'addedwatchtext' => '"[[:$1]]" оагIув, шун [[Special:Watchlist|теркама дагаршкахь]] чуяккха я. Техьара мел йола укх оагIувни хувцамаш цу дагаршкахь хоам беш хургья. Вешта [[Special:RecentChanges|керда хувцама дагаршкаехь]] сома къоалмаца хьакъоастлуш хургья.', @@ -581,6 +785,8 @@ $messages = array( 'watch' => 'Тохкам бе', 'watchthispage' => 'Укх оагIува теркам бе', 'unwatch' => 'Лора ма де', +'watchlist-details' => 'Шун теркама дагарченгахь йола $1 {{PLURAL:$1|оагIув|оагIувнаш}}, дувцама оагIувнаш ца лоархаш.', +'wlshowlast' => 'Тlехьара $1 сахьаташ $2 денош $3 хьахокха', 'watchlist-options' => 'Зем баккха дагарена хувцамаш', # Displayed when you click the "watch" button and it is in the process of watching @@ -589,7 +795,10 @@ $messages = array( # Delete 'deletepage' => 'ОагIув дIаяккха', +'confirmdeletetext' => 'Оаш оагIувни (е сурти) барча дIадаккхар хьайийхай кха еррига хувцамий искар долама ковчера. +Дехар да, жоп дала, шоай из бокъонцахь де безам болаш да, шоай даьчоахь хургдолчоахь кхеташ долга, [[{{MediaWiki:Policy-url}}]] декъамачу Iоязадаь дола адаташ ца из деш долга.', 'actioncomplete' => 'Дулархам баьб', +'actionfailed' => 'Оттам даьдац', 'deletedtext' => '"$1" дIаяккха хиннай. ТIехьара дIадаьккха дагарчена хьожаргволаш/хьожаргьйолаш, $2 хьажа.', 'deletedarticle' => ' "[[$1]]" дIадаьккхад', @@ -603,6 +812,8 @@ $messages = array( # Protect 'protectlogpage' => 'Лорама тептар', +'protectedarticle' => '"[[$1]]" оагIув лорам деж я', +'modifiedarticleprotection' => '"[[$1]]" оагIувни лорама лагIа хувцаеннай', 'protectcomment' => 'Бахьан:', 'protectexpiry' => 'Кхоачалуш латта:', 'protect_expiry_invalid' => 'Чаккхабоала лорама харца ха', @@ -628,7 +839,9 @@ $messages = array( 'restriction-upload' => 'Чудаккхар', # Undelete -'undeletelink' => 'БIаргтасса/юхаметтаоттаде', +'undeletelink' => 'БIаргтасса/юхаметтаоттаде', +'undeleteviewlink' => 'бIаргтасса', +'undeletedarticle' => '"[[$1]]" юха оттая я', # Namespace form on various pages 'namespace' => 'ЦIерий аренаш', @@ -639,40 +852,69 @@ $messages = array( 'contributions' => 'Дакъалаьцархочунна къахьегам', 'contributions-title' => '$1 дакъалаьцархочунна къахьегам', 'mycontris' => 'Са къахьегам', +'contribsub2' => '$1 ($2) баь болх', 'uctop' => '(тIехьара)', 'month' => 'Цхьа бутт хьалхагIа (кха хьалхагIа)', 'year' => 'Цхьа шу хьалхагIа (кха хьалхагIа):', +'sp-contributions-newbies' => 'Керда даязья йоазоначера мара баь бола къахьегам ма хокха', 'sp-contributions-blocklog' => 'чIегаш', +'sp-contributions-uploads' => 'чуяккхамаш', +'sp-contributions-logs' => 'тептараш', 'sp-contributions-talk' => 'дувцам', 'sp-contributions-search' => 'Къахьегама лахар', 'sp-contributions-username' => 'IP-моттиг е цIи:', +'sp-contributions-toponly' => 'ТIехьара доржамаш лоархаш дола хувцамаш мара ма хьокха', 'sp-contributions-submit' => 'Хьалаха', # What links here -'whatlinkshere' => 'Iинкаш укхаза', -'whatlinkshere-page' => 'ОагIув', -'isredirect' => 'дIа-хьа оагIув', -'istemplate' => 'чудаккхар', -'isimage' => 'Сурта Iинк', -'whatlinkshere-links' => '← Iинкаш', -'whatlinkshere-hidelinks' => '$1 Iинкаш', -'whatlinkshere-filters' => 'ЦIенъераш', +'whatlinkshere' => 'Iинкаш укхаза', +'whatlinkshere-title' => '"$1" тIа Iинкаш еш йола оагIувнаш', +'whatlinkshere-page' => 'ОагIув', +'linkshere' => "ТIехьара оагIувнаш '''[[:$1]]''' тIа Iинкаш ю:", +'nolinkshere' => "'''[[:$1]]''' оагIув тIа, кхыдола оагIувашкара Iинкаш йоацаш я", +'isredirect' => 'дIа-хьа оагIув', +'istemplate' => 'чудаккхар', +'isimage' => 'Сурта Iинк', +'whatlinkshere-prev' => '{{PLURAL:$1|хьахайоагIа|хьалхайоагIараш}} $1', +'whatlinkshere-next' => '{{PLURAL:$1|тIехьайоагIа|тIехьайоагIараш}} $1', +'whatlinkshere-links' => '← Iинкаш', +'whatlinkshere-hideredirs' => '$1 дIа-хьа чуяккхамаш', +'whatlinkshere-hidetrans' => '$1 чуяккхамаш', +'whatlinkshere-hidelinks' => '$1 Iинкаш', +'whatlinkshere-hideimages' => '$1 суртIинкаш', +'whatlinkshere-filters' => 'ЦIенъераш', # Block/unblock 'blockip' => 'Дакъалаьцархочунна чIега бола', +'ipboptions' => '2 сахьат:2 hours,1 ди:1 day,3 ди:3 days,1 кIира:1 week,2 кIира:2 weeks,1 бутт:1 month,3 бутт:3 months,6 бутт:6 months,1 шу:1 year,сиха ца луш:infinite', 'ipblocklist' => 'ЧIега бела дакъалаьцархой', 'blocklink' => 'чIегa тоха', 'unblocklink' => 'чIега баста', 'change-blocklink' => 'ЧIегатохар хувца', 'contribslink' => 'къахьегам', 'blocklogpage' => 'ЧIегаш тoха таптар', +'blocklogentry' => '[[$1]] чIега белаб, $2 $3 ха ялалца', +'unblocklogentry' => '$1 юха яста я', 'block-log-flags-nocreate' => 'Лархамий дагарчена цIи яккхар пурам янза я.', 'blockme' => 'ЧIега бола сона', 'proxyblocksuccess' => 'Хьадаьд.', # Move page 'move-page-legend' => 'ОагIува цIи хувца', +'movepagetext' => "КIалхара кепаца болхабеча, оаш оагIувни цIи хувцаргья, цунна хувцамий тептар кхыйола меттиге дIачудоаккхаш. +КIаьнара цIерахь керда цIерий дIачудаккхам хургда. +КIаьнара цIера тIа даь дола дIачудаккхамаш, шун ший лоIамахь кердадаккха йийш хургья. +Из оаш ца дой, дехар да, [[Special:DoubleRedirects|шолха]] кхы [[Special:BrokenRedirects|вIашагIаяккха дIачудаккхамий]] кардоламахь хьажа. +Оаш жоп лу, шоай чуяккха йола Iинкаш, даим болхбеш хургдолга. + +Зем бахка, оагIувни цIи хувцалургьяц, изза мо цIи йолаш оагIув хилача. +Йолаш йола оагIув хувца йийш яц, амма хийца йола оагIув юха хьахувца йийш я. + +'''Хоамхайтар''' + +ЦIи хувцар, йовзаш йола оагIувнаший, доккха а цаьхха а хувцамшка дIатIадала мегаш да. +Дехар да, оаш дIахо болх белаьхь, хургдола хIама кхеташ долга, кхеталаш.", 'movepagetalktext' => "ТIатеха дувцама оагIув, ший лоIамахь цIи хувлургья, '''ер дага а доацар, доаца:''' *Изза мо цIи йолаш яьсса дувцама оагIув я е @@ -690,6 +932,8 @@ $messages = array( 'talkexists' => "'''ОагIувни цIи хьийца хиннай, амма дувцама оагIувни цIи хувца мегаш яц, изза мо цIи йолаш оагIув йоландаь. Дехар да, кулга новкъосталца цхьанна вIашагIатоха уш.'''", 'movedto' => 'керда цIи тилла я', 'movetalk' => 'МаIан чулоаца дувцама оагIувни цIи хувца', +'1movedto2' => '[[$1]] цIи цу тIа [[$2]] хийцай', +'1movedto2_redir' => '[[$1]] цIи хийцай [[$2]] дIа-хьа оагIува тIа гIолла', 'movelogpage' => 'Хувцама тептар', 'movereason' => 'Бахьан', 'revertmove' => 'юхаяккха', @@ -699,12 +943,14 @@ $messages = array( # Namespace 8 related 'allmessagesname' => 'ЦIи', +'allmessagesdefault' => 'Сатийна улла яздам', 'allmessages-filter-all' => 'Дерригаш', 'allmessages-language' => 'Мотт:', 'allmessages-filter-submit' => 'Дехьавала', # Thumbnails -'thumbnail-more' => 'Хьадоккхаде', +'thumbnail-more' => 'Хьадоккхаде', +'thumbnail_error' => 'ЗIамигасуртанчий кхеллама гIалат: $1', # Special:Import 'import-upload-filename' => 'ПаьлацIи:', @@ -715,8 +961,8 @@ $messages = array( 'tooltip-pt-preferences' => ' Шун оттамаш', 'tooltip-pt-watchlist' => 'Оаш хувцамаш тIа бIарглакха оагIувнаша дагарче', 'tooltip-pt-mycontris' => 'Шун хувцамаш', -'tooltip-pt-login' => 'Укхаза хьай цIи аьле чувала йийша я, амма чуцаваьлача хIамма а дац', -'tooltip-pt-logout' => 'Аравала', +'tooltip-pt-login' => 'Укхаза хьай цIи аьле чувала/чуяла йийша я, амма чуцаваьлача/чуцаялача хIамма а дац', +'tooltip-pt-logout' => 'Аравала/яла', 'tooltip-ca-talk' => 'ОагIува чулоацамий дувцам', 'tooltip-ca-edit' => 'Ер оагIув хувца йийшйолаш я. Дехар да, Iалаш елаьхь, хьалхе бIаргтассама оагIув тIа бIаргтасса.', 'tooltip-ca-addsection' => 'Керда декъам хьаде', @@ -730,6 +976,7 @@ $messages = array( 'tooltip-search' => ' Цу тайпара дош лаха {{SITENAME}}', 'tooltip-search-go' => ' Изза мо цIи йолаш оагIув тIa дехьавала', 'tooltip-search-fulltext' => ' Изза мо яздам долаш оагIувнаш лаха', +'tooltip-p-logo' => 'Кертера оагIув тIа дехьавала', 'tooltip-n-mainpage' => 'Кертера оагIув тIа дехьавала', 'tooltip-n-mainpage-description' => 'Кертера оагIув тIа дехьавала', 'tooltip-n-portal' => 'Хьахьоадайтамахь лаьца, хьа де йийшдар, фа а мичча а йоала', @@ -762,12 +1009,20 @@ $messages = array( 'tooltip-watch' => 'Ер оагIув теркам беча каьхата тIа яккха', 'tooltip-rollback' => 'ГIалaтанийсадаро тIехьара я йола хувцамаш, пIелг тоIоби дIаяккха.', 'tooltip-undo' => 'Я хувцам дIаяккхи, бIаргатассар хьахокха, кара дале, дIаяккха бахьан Iочуязаде моттигаца.', +'tooltip-summary' => 'Лоаца чулоацам Iочуязаде', + +# Patrol log +'patrol-log-line' => '$1 долачаьрахь $2 $3 хьажав/хьажай', +'patrol-log-diff' => '$1 доржам', # Browsing diffs -'previousdiff' => 'Хьалхара хувцам', +'previousdiff' => '← Хьалхара хувцам', 'nextdiff' => 'ТIайоагIа хувцам', # Media information +'file-info-size' => '$1 × $2 фихсам, паьла дустам: $3, MIME-тайп: $4', +'file-nohires' => 'Укхал доккхагIа доржам дац', +'svg-long-desc' => 'SVG-паьл, $1 × $2 фихелашца, паьла дустам: $3', 'show-big-image' => 'Хьадоккхадаь сурт', # Special:NewFiles @@ -781,6 +1036,12 @@ $messages = array( МугIарена хьалхара Iинк, сурт Iоттае пурам доаца Iинка, хила еза. Цу мугIар тIа тIехьайоагIа Iинкаш, арадаккхар мо лоархаш хургья, вешта аьлча, йоазувашка чуIоттаде мегаш дола сурт санна ларха мега.', +# Metadata +'metadata' => 'МетахIамаш', +'metadata-help' => 'Паьлас чулоаца, кхыдола хIамаш, таьрахьа суртдоаккхаргца е тIагIолладоаккхаргца чудаккхаш дола. Хьая паьл, гIалатахь мукъадаьккха хинна дале, хьахокхаш дола сурт, деррига хIамаш чулоацаргдац.', +'metadata-expand' => 'Кхыдола хIамаш хьахокха', +'metadata-collapse' => 'Кхыдола хIамаш къайладаккха', + # EXIF tags 'exif-imagewidth' => 'Шерал', 'exif-imagelength' => 'Лакхал', @@ -793,6 +1054,10 @@ $messages = array( 'exif-scenecapturetype-1' => 'ЛаьттабIаса', 'exif-scenecapturetype-2' => 'Сурт', +# External editor support +'edit-externally' => 'Йола болхоагIувца паьла гIалатахь мукъаяккха', +'edit-externally-help' => '(ма даррачунга хьажа [http://www.mediawiki.org/wiki/Manual:External_editors хьаоттама кулгалхо])', + # 'all' in various places, this might be different for inflected languages 'recentchangesall' => 'деррига', 'imagelistall' => 'деррига', @@ -801,6 +1066,9 @@ $messages = array( 'monthsall' => 'деррига', 'limitall' => 'деррига', +# action=purge +'confirm_purge_button' => 'ХIаа', + # Multipage image navigation 'imgmultigo' => 'Дехьавала!', 'imgmultigoto' => '$1 оагIув тIа дехьавала', @@ -811,10 +1079,16 @@ $messages = array( # Watchlist editing tools 'watchlisttools-view' => 'Дагарчера оагIувнаш тIа хувцамаш', 'watchlisttools-edit' => 'Дагарче хьажа/хувца', +'watchlisttools-raw' => 'Яздам мо хувца', + +# Core parser functions +'duplicate-defaultsort' => 'Зем бе. Сатийна дIа-хьа хьоржама доагI "$2" хьалхара сатийна дIа-хьа хьоржама доагI "$1" хьахьоржа.', # Special:Version -'version' => 'Доржам', -'version-specialpages' => 'ГIулакхий оагIувнаш', +'version' => 'Доржам', +'version-specialpages' => 'ГIулакхий оагIувнаш', +'version-version' => '(Доржам $1)', +'version-software-version' => 'Доржам', # Special:FilePath 'filepath' => 'Паьлачу никъ', @@ -823,9 +1097,39 @@ $messages = array( # Special:FileDuplicateSearch 'fileduplicatesearch-filename' => 'ПаьлацIи:', +'fileduplicatesearch-submit' => 'Лаха', # Special:SpecialPages -'specialpages' => 'ГIулакхий оагIувнаш', +'specialpages' => 'ГIулакхий оагIувнаш', +'specialpages-group-users' => 'Дакъалаьцархой, цара бокъо', +'specialpages-group-pages' => 'ОагIувний дагарченаш', +'specialpages-group-pagetools' => 'ОагIувнаша гIирсаш', + +# External image whitelist +'external_image_whitelist' => '#Ер мугI ший долаш тайпара дита
    +#Каст-каста оаламаш укхаза дIаязаде(юкъе дола дакъа //)
    +#арара суртий URLца дIанийсалургда уш.
    +#Пайдан дола, сурташ мо хьахьекха хургья, дахIодараш, сурта тIа Iинкаш мо хуpгья хьахьекха.
    +#Укх # тамагIалгаца дIадувлаш дола мугIанаш, оалам мо лоархаш да.
    +#МугIанаш яздaтакха каьда да
    +
    +#Каст-каста оаламаш укх мугIа лакхе дIаязаде. Из мугI ший долаш тайпара дита
    ',
    +
    +# Special:Tags
    +'tag-filter'    => '[[Special:Tags|Йоазоний]] цIенаярг:',
    +'tags-title'    => 'Йоазонаш',
    +'tags-tag'      => 'Йоазон цIи',
    +'tags-edit'     => 'хувца',
    +'tags-hitcount' => '$1 {{PLURAL:$1|хувцам|хувцамаш}}',
    +
    +# Special:ComparePages
    +'compare-page1' => '1. ОагIув',
    +'compare-page2' => '2. ОагIув',
    +'compare-rev1'  => '1. Доржам',
    +'compare-rev2'  => '2. Доржам',
    +
    +# Database error messages
    +'dberr-header' => 'Укх викис халонаш ловш латта',
     
     # HTML forms
     'htmlform-submit'              => 'ДIадахийта',
    diff --git a/languages/messages/MessagesIo.php b/languages/messages/MessagesIo.php
    index 30446e1f..b62597d9 100644
    --- a/languages/messages/MessagesIo.php
    +++ b/languages/messages/MessagesIo.php
    @@ -122,8 +122,7 @@ $messages = array(
     'tog-editsection'             => 'Kapabligez redakto di secioni per [redaktar]-ligamini',
     'tog-editsectiononrightclick' => 'Kapabligez redakto di secioni kande on dextra-klikus tituli di secioni (JavaScript bezonesas)',
     'tog-showtoc'                 => 'Montrez indexo (por pagini havanta plu multa kam 3 tituli)',
    -'tog-rememberpassword'        => 'Memorez mea pasovorto en ica komputoro',
    -'tog-editwidth'               => 'Larjigez la redakto-buxo por ke ol okupas la tota skreno',
    +'tog-rememberpassword'        => "Memorez mea pasovorto en ca ''browser'' (maxime $1 {{PLURAL:$1|dio|dii}})",
     'tog-watchcreations'          => 'Adjuntez pagini kreota da me ad mea surveyaji',
     'tog-watchdefault'            => 'Adjuntez pagini redaktota da me ad mea surveyaji',
     'tog-watchmoves'              => 'Adjuntez pagini movota da me ad mea surveyaji',
    @@ -248,27 +247,20 @@ $messages = array(
     'qbspecialpages' => 'Specala pagini',
     
     # Vector skin
    -'vector-action-addsection'   => 'Adjuntar topiko',
    -'vector-action-delete'       => 'Efacar',
    -'vector-action-move'         => 'Movar',
    -'vector-action-protect'      => 'Protektar',
    -'vector-action-undelete'     => 'Rekuperar',
    -'vector-action-unprotect'    => 'Desprotektar',
    -'vector-namespace-category'  => 'Kategorio',
    -'vector-namespace-help'      => 'Helpo-pagino',
    -'vector-namespace-image'     => 'Failo',
    -'vector-namespace-main'      => 'Pagino',
    -'vector-namespace-mediawiki' => 'Mesajo',
    -'vector-namespace-special'   => 'Specala pagino',
    -'vector-namespace-talk'      => 'Diskuto',
    -'vector-namespace-template'  => 'Shablono',
    -'vector-namespace-user'      => 'Uzanto-pagino',
    -'vector-view-create'         => 'Krear',
    -'vector-view-edit'           => 'Redaktar',
    -'vector-view-history'        => 'Vidar versionaro',
    -'vector-view-view'           => 'Lektar',
    -'vector-view-viewsource'     => 'Vidar fonto',
    -'namespaces'                 => 'Nomari',
    +'vector-action-addsection' => 'Adjuntar topiko',
    +'vector-action-delete'     => 'Efacar',
    +'vector-action-move'       => 'Movar',
    +'vector-action-protect'    => 'Protektar',
    +'vector-action-undelete'   => 'Rekuperar',
    +'vector-action-unprotect'  => 'Desprotektar',
    +'vector-view-create'       => 'Krear',
    +'vector-view-edit'         => 'Redaktar',
    +'vector-view-history'      => 'Vidar versionaro',
    +'vector-view-view'         => 'Lektar',
    +'vector-view-viewsource'   => 'Vidar fonto',
    +'actions'                  => 'Agi',
    +'namespaces'               => 'Nomari',
    +'variants'                 => 'Varianti',
     
     'errorpagetitle'    => 'Eroro',
     'returnto'          => 'Retrovenar a $1.',
    @@ -435,7 +427,7 @@ Voluntez, ne obliviez chanjor vua [[Special:Preferences|preferaji en {{SITENAME}
     'yourname'                   => 'Vua uzantonomo:',
     'yourpassword'               => 'Pasovorto:',
     'yourpasswordagain'          => 'Riskribez la pasovorto:',
    -'remembermypassword'         => 'Memorez mea pasovorto inter sesioni en ca komputoro',
    +'remembermypassword'         => 'Memorez mea pasovorto en ca komputoro (maximo: $1 {{PLURAL:$1|dio|dii}})',
     'yourdomainname'             => 'Vua domano:',
     'login'                      => 'Enirar',
     'nav-login-createaccount'    => 'Enirar',
    @@ -451,6 +443,7 @@ Voluntez, ne obliviez chanjor vua [[Special:Preferences|preferaji en {{SITENAME}
     'gotaccount'                 => "Ka vu ja havas konto? '''$1'''.",
     'gotaccountlink'             => 'Enirar',
     'createaccountmail'          => 'per e-posto',
    +'createaccountreason'        => 'Motivo:',
     'badretype'                  => 'La pasovorti vu donis ne esas sama.',
     'userexists'                 => 'La uzantonomo, quan vu skribis, ja selektesis antee.
     Voluntez, elektez ula diferanta uzantonomo.',
    @@ -588,9 +581,6 @@ Se vu gardus ol, la chanji facita pos ita revizo perdesos.'''",
     Se vu ne deziras ke altri modifikez vua artikli od oli distributesez libere, lore voluntez ne skribar oli hike.
    Publikigante vua skribajo hike, vu asertas ke olu skribesis da vu ipsa o kopiesis de libera fonto. '''NE SENDEZ ARTIKLI KUN ''COPYRIGHT'' SEN PERMISO!'''", -'longpagewarning' => "'''EGARDEZ''': Ica pagino esas $1 kilobicoki longa; -Ula navigili posible havas problemi redaktante pagini proximeskanta o plu longa kam 32kb. -Voluntez konsideras separar la pagino aden plu mikra secioni.", 'protectedpagewarning' => "'''AVERTO: Ica pagino esas blokusita, do nur ''sysop''-i povas redaktar olu.'''", 'templatesused' => '{{PLURAL:$1|Shablono|Shabloni}} uzata en ica pagino:', 'templatesusedpreview' => '{{PLURAL:$1|Shablono|Shabloni}} uzata en ica prevido:', @@ -644,6 +634,8 @@ Surskriburo: '''({{int:cur}})''' = diferi kun l'aktuala versiono, 'revdelete-radio-unset' => 'No', 'revdelete-log' => 'Motivo:', 'revdel-restore' => 'chanjar videbleso', +'revdel-restore-deleted' => 'efacita revizadi', +'revdel-restore-visible' => 'videbla revizadi', 'pagehist' => 'Pagino-versionaro', 'deletedhist' => 'Efacita versionaro', 'revdelete-content' => 'kontenajo', @@ -669,48 +661,51 @@ Surskriburo: '''({{int:cur}})''' = diferi kun l'aktuala versiono, 'editundo' => 'des-facez', # Search results -'searchresults' => 'Rezultaji dil sercho', -'searchresults-title' => 'Sercho-rezultaji por "$1"', -'searchresulttext' => 'Por plusa informo pri quale serchar en {{SITENAME}}, videz [[{{MediaWiki:Helppage}}|help]].', -'searchsubtitle' => 'Vu serchis \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|omna pagini komencanta kun "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|omna pagini liganta ad "$1"]])', -'searchsubtitleinvalid' => "Vu serchis '''$1'''", -'titlematches' => 'Koincidi de titulo di artiklo', -'notitlematches' => 'No esas koincidi en la tituli dil artikli', -'textmatches' => 'Koincidi de texto di artiklo', -'notextmatches' => 'Nula paginala texto fitas', -'prevn' => 'antea {{PLURAL:$1|$1}}', -'nextn' => 'sequanta {{PLURAL:$1|$1}}', -'viewprevnext' => 'Vidar ($1 {{int:pipe-separator}} $2) ($3).', -'searchmenu-new' => "'''Kreez la pagino \"[[:\$1]]\" in ca wiki!'''", -'searchhelp-url' => 'Help:Helpo', -'searchprofile-articles' => 'Artikli', -'searchprofile-project' => 'Helpo', -'searchprofile-images' => "''Media''", -'searchprofile-everything' => 'Omno', -'search-result-size' => '$1 ({{PLURAL:$2|1 vorto|$2 vorti}})', -'search-result-score' => 'Importo: $1%', -'search-redirect' => '(ridirektilo $1)', -'search-section' => '(seciono $1)', -'search-suggest' => 'Ka vu volis dicar: $1', -'search-interwiki-caption' => 'Altra projekti', -'search-interwiki-default' => 'Rezultaji di $1:', -'search-interwiki-more' => '(plusa)', -'search-mwsuggest-enabled' => 'kun sugestaji', -'search-mwsuggest-disabled' => 'sen sugestaji', -'searchall' => 'omna', -'showingresults' => "Montrante infre {{PLURAL:$1|'''1''' rezulto|'''$1''' rezulti}}, qui komencas kun numero #'''$2'''.", -'showingresultsnum' => "Montrante infre {{PLURAL:$3|'''1''' rezulto|'''$3''' rezulti}}, qui komencas kun numero #'''$2'''.", -'nonefound' => "'''Atencez''': Nespecigite, nur ula nomari esas serchata. +'searchresults' => 'Rezultaji dil sercho', +'searchresults-title' => 'Sercho-rezultaji por "$1"', +'searchresulttext' => 'Por plusa informo pri quale serchar en {{SITENAME}}, videz [[{{MediaWiki:Helppage}}|help]].', +'searchsubtitle' => 'Vu serchis \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|omna pagini komencanta kun "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|omna pagini liganta ad "$1"]])', +'searchsubtitleinvalid' => "Vu serchis '''$1'''", +'titlematches' => 'Koincidi de titulo di artiklo', +'notitlematches' => 'No esas koincidi en la tituli dil artikli', +'textmatches' => 'Koincidi de texto di artiklo', +'notextmatches' => 'Nula paginala texto fitas', +'prevn' => 'antea {{PLURAL:$1|$1}}', +'nextn' => 'sequanta {{PLURAL:$1|$1}}', +'viewprevnext' => 'Vidar ($1 {{int:pipe-separator}} $2) ($3).', +'searchmenu-new' => "'''Kreez la pagino \"[[:\$1]]\" in ca wiki!'''", +'searchhelp-url' => 'Help:Helpo', +'searchprofile-articles' => 'Temala pagini', +'searchprofile-project' => 'Helpo', +'searchprofile-images' => "''Media''", +'searchprofile-everything' => 'Omno', +'searchprofile-articles-tooltip' => 'Serchez en $1', +'searchprofile-project-tooltip' => 'Serchez en $1', +'searchprofile-images-tooltip' => 'Serchez arkivi', +'search-result-size' => '$1 ({{PLURAL:$2|1 vorto|$2 vorti}})', +'search-result-score' => 'Importo: $1%', +'search-redirect' => '(ridirektilo $1)', +'search-section' => '(seciono $1)', +'search-suggest' => 'Ka vu volis dicar: $1', +'search-interwiki-caption' => 'Altra projekti', +'search-interwiki-default' => 'Rezultaji di $1:', +'search-interwiki-more' => '(plusa)', +'search-mwsuggest-enabled' => 'kun sugestaji', +'search-mwsuggest-disabled' => 'sen sugestaji', +'searchall' => 'omna', +'showingresults' => "Montrante infre {{PLURAL:$1|'''1''' rezulto|'''$1''' rezulti}}, qui komencas kun numero #'''$2'''.", +'showingresultsnum' => "Montrante infre {{PLURAL:$3|'''1''' rezulto|'''$3''' rezulti}}, qui komencas kun numero #'''$2'''.", +'nonefound' => "'''Atencez''': Nespecigite, nur ula nomari esas serchata. Probez prefixizar vua demando kun ''all:'' por serchar omna kontenajo (inkluzanta debato-pagini, shabloni, edc.), od uzar la dezirata nomaro kom prefixo.", -'powersearch' => 'Avancita sercho', -'powersearch-legend' => 'Avancita sercho', -'powersearch-ns' => 'Serchez en nomari:', -'powersearch-redir' => 'Listar ridirekti', -'powersearch-field' => 'Serchar', -'powersearch-toggleall' => 'Omna', -'powersearch-togglenone' => 'Nula', -'search-external' => 'Extera sercho', -'searchdisabled' => 'La sercho en la kompleta texto desaktivigesis temporale pro superkargo dil servanto. Ni esperas riaktivigar ol pos facar ula proxima aktualigi. Dum ica tempo, vu povas serchar per Google.', +'powersearch' => 'Avancita sercho', +'powersearch-legend' => 'Avancita sercho', +'powersearch-ns' => 'Serchez en nomari:', +'powersearch-redir' => 'Listar ridirekti', +'powersearch-field' => 'Serchar', +'powersearch-toggleall' => 'Omna', +'powersearch-togglenone' => 'Nula', +'search-external' => 'Extera sercho', +'searchdisabled' => 'La sercho en la kompleta texto desaktivigesis temporale pro superkargo dil servanto. Ni esperas riaktivigar ol pos facar ula proxima aktualigi. Dum ica tempo, vu povas serchar per Google.', # Quickbar 'qbsettings' => 'Preferaji pri "Quickbar"', @@ -834,35 +829,33 @@ Ol mustas ne havar plu kam $1 {{PLURAL:$1|litero|literi}}.', 'action-browsearchive' => 'serchar pagini efacita', # Recent changes -'nchanges' => '$1 {{PLURAL:$1|chanjo|chanji}}', -'recentchanges' => 'Recenta chanji', -'recentchanges-legend' => 'Recenta chanji preferaji', -'recentchangestext' => 'Regardez la maxim recenta chanji en Wiki per ica pagino.', -'recentchanges-legend-newpage' => '$1 - nova pagino', -'recentchanges-label-newpage' => 'Ca redaktajo kreis nova pagino', -'recentchanges-legend-minor' => '$1 - mikra redaktajo', -'recentchanges-label-minor' => 'Ica es mikra redaktajo', -'recentchanges-legend-bot' => '$1 - redakto da roboto', -'rcnote' => "Infre esas la lasta {{PLURAL:$1|'''1''' chanjo|'''$1''' chanji}} dum la lasta {{PLURAL:$2|dio|'''$2''' dii}} ye $5, $4.", -'rcnotefrom' => "Infre esas la lasta chanji depos '''$2''' (montrita til '''$1''').", -'rclistfrom' => 'Montrar nova chanji startante de $1', -'rcshowhideminor' => '$1 mikra redakti', -'rcshowhidebots' => '$1 roboti', -'rcshowhideliu' => '$1 enirinta uzanti', -'rcshowhideanons' => '$1 anonima uzanti', -'rcshowhidemine' => '$1 mea redakti', -'rclinks' => 'Montrar la lasta $1 chanji dum la lasta $2 dii
    $3', -'diff' => 'dif', -'hist' => 'vers', -'hide' => 'Celar', -'show' => 'Montrar', -'minoreditletter' => 'm', -'newpageletter' => 'N', -'boteditletter' => 'r', -'rc_categories_any' => 'Ula', -'newsectionsummary' => '/* $1 */ nova seciono', -'rc-enhanced-expand' => 'Montrar detali (JavaScript bezonesas)', -'rc-enhanced-hide' => 'Celar detali', +'nchanges' => '$1 {{PLURAL:$1|chanjo|chanji}}', +'recentchanges' => 'Recenta chanji', +'recentchanges-legend' => 'Recenta chanji preferaji', +'recentchangestext' => 'Regardez la maxim recenta chanji en Wiki per ica pagino.', +'recentchanges-label-newpage' => 'Ca redaktajo kreis nova pagino', +'recentchanges-label-minor' => 'Ica es mikra redaktajo', +'recentchanges-label-bot' => 'Ta chanjo facita da bot', +'rcnote' => "Infre esas la lasta {{PLURAL:$1|'''1''' chanjo|'''$1''' chanji}} dum la lasta {{PLURAL:$2|dio|'''$2''' dii}} ye $5, $4.", +'rcnotefrom' => "Infre esas la lasta chanji depos '''$2''' (montrita til '''$1''').", +'rclistfrom' => 'Montrar nova chanji startante de $1', +'rcshowhideminor' => '$1 mikra redakti', +'rcshowhidebots' => '$1 roboti', +'rcshowhideliu' => '$1 enirinta uzanti', +'rcshowhideanons' => '$1 anonima uzanti', +'rcshowhidemine' => '$1 mea redakti', +'rclinks' => 'Montrar la lasta $1 chanji dum la lasta $2 dii
    $3', +'diff' => 'dif', +'hist' => 'vers', +'hide' => 'Celar', +'show' => 'Montrar', +'minoreditletter' => 'm', +'newpageletter' => 'N', +'boteditletter' => 'r', +'rc_categories_any' => 'Ula', +'newsectionsummary' => '/* $1 */ nova seciono', +'rc-enhanced-expand' => 'Montrar detali (JavaScript bezonesas)', +'rc-enhanced-hide' => 'Celar detali', # Recent changes linked 'recentchangeslinked' => 'Relatanta chanji', @@ -875,33 +868,35 @@ Pagini en [[Special:Watchlist|vua surveryo-listo]] esas '''dika'''.", 'recentchangeslinked-to' => 'Montrez chanji a pagini ligita a la specigita pagino vice', # Upload -'upload' => 'Adkargar arkivo', -'uploadbtn' => 'Adkargar arkivo', -'reuploaddesc' => 'Retrovenar al adkargo-formularo.', -'uploadnologin' => 'Vu ne eniris', -'uploadnologintext' => 'Vu mustas [[Special:UserLogin|enirir]] por adkargar arkivi.', -'uploaderror' => 'Eroro dum adkargo', -'uploadlog' => 'adkargo-registraro', -'uploadlogpage' => 'Adkargo-registraro', -'uploadlogpagetext' => 'Infre esas listo di la plu recenta adkargaji. +'upload' => 'Adkargar arkivo', +'uploadbtn' => 'Adkargar arkivo', +'reuploaddesc' => 'Retrovenar al adkargo-formularo.', +'uploadnologin' => 'Vu ne eniris', +'uploadnologintext' => 'Vu mustas [[Special:UserLogin|enirir]] por adkargar arkivi.', +'uploaderror' => 'Eroro dum adkargo', +'uploadlog' => 'adkargo-registraro', +'uploadlogpage' => 'Adkargo-registraro', +'uploadlogpagetext' => 'Infre esas listo di la plu recenta adkargaji. Videz rezumo plu vidala en la [[Special:NewFiles|galerio di nova arkivi]].', -'filename' => 'Arkivo-nomo', -'filedesc' => 'Titulo', -'fileuploadsummary' => 'Rezumo:', -'filestatus' => 'Stando di kopiyuro:', -'filesource' => 'Fonto:', -'uploadedfiles' => 'Adkargita arkivi', -'ignorewarning' => 'Ignorar la averto e gardar la arkivo irgakaze.', -'badfilename' => 'La imajo-nomo chanjesis a "$1".', -'fileexists' => "Arkivo kun ica nomo ja existas. +'filename' => 'Arkivo-nomo', +'filedesc' => 'Titulo', +'fileuploadsummary' => 'Rezumo:', +'filestatus' => 'Stando di kopiyuro:', +'filesource' => 'Fonto:', +'uploadedfiles' => 'Adkargita arkivi', +'ignorewarning' => 'Ignorar la averto e gardar la arkivo irgakaze.', +'badfilename' => 'La imajo-nomo chanjesis a "$1".', +'fileexists' => "Arkivo kun ica nomo ja existas. Volutez kontrolar '''[[:$1]]''' se vu ne esas certa pri chanjar olu. [[$1|thumb]]", -'successfulupload' => 'Adcharjo sucesoza', -'uploadwarning' => 'Averto pri la adkargo di arkivo', -'savefile' => 'Registragar arkivo', -'uploadedimage' => 'adkargita "[[$1]]"', -'uploaddisabled' => 'Pardonez, la adkargo esas desaktiva.', -'watchthisupload' => 'Surveyar ica arkivo', +'uploadwarning' => 'Averto pri la adkargo di arkivo', +'savefile' => 'Registragar arkivo', +'uploadedimage' => 'adkargita "[[$1]]"', +'uploaddisabled' => 'Pardonez, la adkargo esas desaktiva.', +'watchthisupload' => 'Surveyar ica arkivo', +'upload-success-subj' => 'Adcharjo sucesoza', + +'license-header' => 'Licencizo', # Special:ListFiles 'imgfile' => 'arkivo', @@ -1088,7 +1083,6 @@ Volutez kontrolar '''[[:$1]]''' se vu ne esas certa pri chanjar olu. # Watchlist 'watchlist' => 'Mea surveyaji', 'mywatchlist' => 'Mea surveyaji', -'watchlistfor' => "(por '''$1''')", 'nowatchlist' => 'Vu ne havas objekti en vua listo di surveyaji.', 'watchnologin' => 'Vu ne startis sesiono', 'watchnologintext' => 'Vu mustas [[Special:UserLogin|enirir]] por modifikar vua surveyaji.', @@ -1198,6 +1192,7 @@ restauris ad lasta versiono da $2.', 'undeleterevisions' => '$1 {{PLURAL:$1|revizo|revizi}} konservita', 'undeletebtn' => 'Restaurar', 'undeletelink' => 'vidar/restaurar', +'undeleteviewlink' => 'videz', 'undeletecomment' => 'Komento:', 'undeletedarticle' => 'restaurita "[[$1]]"', 'undelete-search-box' => 'Serchez efacita pagini', @@ -1425,6 +1420,7 @@ Voluntez vizitar [http://www.mediawiki.org/wiki/Localisation MediaWiki Lokizado] 'tooltip-rollback' => '"Retrorular" desfacas omna chanji ad ca pagino da la lasta kontributanto per un kliko', 'tooltip-undo' => '"Desfacez" nuligas ca versiono e apertas la redakto-pagino en prevido-modo. Vu darfos adjuntar kauso en la rezumo.', +'tooltip-summary' => 'Skribez kurta rezumo', # Metadata 'notacceptable' => 'La servanto di {{SITENAME}} ne povas provizar datumi en formato quan vua kliento povas komprenar.', @@ -1452,6 +1448,7 @@ Vu darfos adjuntar kauso en la rezumo.', # Patrol log 'patrol-log-auto' => '(automata)', +'patrol-log-diff' => 'revizado $1', # Browsing diffs 'previousdiff' => '← Plu anciena versiono', @@ -1509,6 +1506,9 @@ Vu darfos adjuntar kauso en la rezumo.', 'exif-gpsspeed-k' => 'Kilometri per horo', 'exif-gpsspeed-m' => 'Milii per horo', +# External editor support +'edit-externally' => 'Chanjez ta arkivo per externa programo', + # 'all' in various places, this might be different for inflected languages 'recentchangesall' => 'omna', 'imagelistall' => 'omna', diff --git a/languages/messages/MessagesIs.php b/languages/messages/MessagesIs.php index 8721d4ac..c063804d 100644 --- a/languages/messages/MessagesIs.php +++ b/languages/messages/MessagesIs.php @@ -212,7 +212,7 @@ $specialPageAliases = array( 'Invalidateemail' => array( 'Rangt netfang' ), ); -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $linkPrefixExtension = true; $linkTrail = '/^([áðéíóúýþæöa-z-–]+)(.*)$/sDu'; @@ -232,8 +232,7 @@ $messages = array( 'tog-editsection' => 'Virkja hlutabreytingu með [breyta] tenglum', 'tog-editsectiononrightclick' => 'Virkja hlutabreytingu með því að hægrismella á hlutafyrirsagnir (JavaScript)', 'tog-showtoc' => 'Sýna efnisyfirlit (fyrir síður með meira en 3 fyrirsagnir)', -'tog-rememberpassword' => 'Munda innskráninguna mína á þessari tölvu', -'tog-editwidth' => 'Breytingarkassi hefur fulla breidd', +'tog-rememberpassword' => 'Muna innskráninguna mína í þessum vafra (í allt að $1 {{PLURAL:$1|dag|daga}})', 'tog-watchcreations' => 'Bæta síðum sem ég bý til á vaktlistann minn', 'tog-watchdefault' => 'Bæta síðum sem ég breyti á vaktlistann minn', 'tog-watchmoves' => 'Bæta síðum sem ég færi á vaktlistann minn', @@ -376,31 +375,20 @@ $messages = array( 'faqpage' => 'Project:Algengar spurningar', # Vector skin -'vector-action-addsection' => 'Bæta við umræðu', -'vector-action-delete' => 'Eyða', -'vector-action-move' => 'Færa', -'vector-action-protect' => 'Vernda', -'vector-action-undelete' => 'Hætta við eyðingu', -'vector-action-unprotect' => 'Afvernda', -'vector-namespace-category' => 'Flokkur', -'vector-namespace-help' => 'Hjálparsíða', -'vector-namespace-image' => 'Skrá', -'vector-namespace-main' => 'Síða', -'vector-namespace-media' => 'Margmiðlunarsíða', -'vector-namespace-mediawiki' => 'Melding', -'vector-namespace-project' => 'Verkefnissíða', -'vector-namespace-special' => 'Kerfissíða', -'vector-namespace-talk' => 'Umræða', -'vector-namespace-template' => 'Snið', -'vector-namespace-user' => 'Notandasíða', -'vector-view-create' => 'Skapa', -'vector-view-edit' => 'Breyta', -'vector-view-history' => 'Breytingaskrá', -'vector-view-view' => 'Lesa', -'vector-view-viewsource' => 'Sýna frumkóða', -'actions' => 'Aðgerðir', -'namespaces' => 'Nafnrými', -'variants' => 'Útgáfur', +'vector-action-addsection' => 'Bæta við umræðu', +'vector-action-delete' => 'Eyða', +'vector-action-move' => 'Færa', +'vector-action-protect' => 'Vernda', +'vector-action-undelete' => 'Hætta við eyðingu', +'vector-action-unprotect' => 'Afvernda', +'vector-view-create' => 'Skapa', +'vector-view-edit' => 'Breyta', +'vector-view-history' => 'Breytingaskrá', +'vector-view-view' => 'Lesa', +'vector-view-viewsource' => 'Sýna frumkóða', +'actions' => 'Aðgerðir', +'namespaces' => 'Nafnrými', +'variants' => 'Útgáfur', 'errorpagetitle' => 'Villa', 'returnto' => 'Aftur á: $1.', @@ -616,7 +604,7 @@ Ekki gleyma að breyta [[Special:Preferences|{{SITENAME}}-stillingunum]] þínum 'yourname' => 'Notandanafn:', 'yourpassword' => 'Lykilorð:', 'yourpasswordagain' => 'Endurrita lykilorð:', -'remembermypassword' => 'Muna innskráningu mína á þessari tölvu', +'remembermypassword' => 'Muna innskráninguna mína í þessum vafra (í allt að $1 {{PLURAL:$1|dag|daga}})', 'yourdomainname' => 'Þitt lén:', 'login' => 'Innskrá', 'nav-login-createaccount' => 'Innskrá / Búa til aðgang', @@ -654,6 +642,7 @@ Athugaðu hvort um innsláttavillu er að ræða eða [[Special:UserLogin/signup 'wrongpasswordempty' => 'Lykilorðsreiturinn var auður. Vinsamlegast reyndu aftur.', 'passwordtooshort' => 'Lykilorð skal vera að minnsta kosti {{plural: $1 |einn stafur|$1 stafir}}.', 'password-name-match' => 'Þarf að lykilorð þitt sé öðruvísi notandanafni þínu', +'password-login-forbidden' => 'Notkun þessa notendanafns og lykilorðs er ekki leyfileg.', 'mailmypassword' => 'Senda nýtt lykilorð með tölvupósti', 'passwordremindertitle' => 'Nýtt tímabundið aðgangsorð fyrir {{SITENAME}}', 'passwordremindertext' => 'Einhver (líklegast þú, á vistfanginu $1) hefur beðið um að fá nýtt @@ -837,9 +826,6 @@ Vinsamlegast reyndu aftur síðar. Ef það virkar ekki heldur skaltu reyna að Ef þú vilt ekki að textanum verði breytt skaltu ekki senda hann inn hér.
    Þú lofar okkur einnig að þú hafir skrifað þetta sjálfur, að efnið sé í almannaeigu eða að það heyri undir frjálst leyfi. (sjá $1). '''EKKI SENDA INN HÖFUNDARRÉTTARVARIÐ EFNI ÁN LEYFIS RÉTTHAFA!'''", -'longpagewarning' => "'''VIÐVÖRUN: Þessi síða er $1 kílóbæta löng; sumir -vafrar gætu átt erfitt með að gera breytingar á síðum sem nálgast eða eru lengri en 32 kb. -Vinsamlegast íhugaðu að skipta síðunni niður í smærri einingar.'''", 'longpageerror' => "'''VILLA: Textinn sem þú sendir inn er $1 kílóbæti að lengd, en hámarkið er $2 kílóbæti. Ekki er hægt að vista textann.'''", 'readonlywarning' => "'''AÐVÖRUN: Gagnagrunninum hefur verið læst til að unnt sé að framkvæma viðhaldsaðgerðir, svo þú getur ekki vistað breytingar þínar núna. Þú kannt að vilja að klippa og líma textann í textaskjal og vista hann fyrir síðar.''' @@ -1243,14 +1229,9 @@ Ef þú kýst að gefa það upp, verður það notað til að gefa þér heiðu 'recentchanges-legend' => 'Stillingar nýlegra breytinga', 'recentchangestext' => 'Hér geturðu fylgst með nýjustu breytingunum.', 'recentchanges-feed-description' => 'Hér er hægt að fylgjast með nýlegum breytingum á {{SITENAME}}.', -'recentchanges-label-legend' => 'Skýring: $1.', -'recentchanges-legend-newpage' => '$1 - ný síða', 'recentchanges-label-newpage' => 'Þessi breyting skapaði nýja síðu', -'recentchanges-legend-minor' => '$1 - smá breyting', 'recentchanges-label-minor' => 'Þetta er minniháttar breyting', -'recentchanges-legend-bot' => '$1 - breyting vélmennis', 'recentchanges-label-bot' => 'Þessi breytingar var gerð af vélmenni', -'recentchanges-legend-unpatrolled' => '$1 - breyting án eftirlits', 'recentchanges-label-unpatrolled' => 'Þessi breyting hefur ekki verið yfirfarin', 'rcnote' => "Að neðan {{PLURAL:$1|er '''1''' breyting|eru síðustu '''$1''' breytingar}} síðast {{PLURAL:$2|liðinn dag|liðna '''$2''' daga}}, frá $5, $4.", 'rcnotefrom' => "Að neðan eru breytingar síðan '''$2''' (allt að '''$1''' sýndar).", @@ -1330,7 +1311,6 @@ Gjörðu svo vel og endurnefndu skrána og hladdu henni inn aftur.', 'large-file' => 'Það er mælt með að skrár séu ekki stærri en $1; þessi skrá er $2.', 'fileexists' => "Skrá með þessu nafni er þegar til, skoðaðu '''[[:$1]]''' ef þú ert óviss um hvort þú viljir breyta henni, ekki verður skrifað yfir gömlu skránna hlaðiru inn nýrri með sama nafni heldur verður núverandi útgáfa geymd í útgáfusögu. [[$1|thumb]]", -'successfulupload' => 'Innhlaðning tókst', 'uploadwarning' => 'Aðvörun', 'savefile' => 'Vista', 'uploadedimage' => 'hlóð inn „[[$1]]“', @@ -1342,6 +1322,7 @@ Gjörðu svo vel og endurnefndu skrána og hladdu henni inn aftur.', 'upload-maxfilesize' => 'Hámarks skráarstærð: $1', 'watchthisupload' => 'Vakta þessa skrá', 'filewasdeleted' => 'Skrá af sama nafni hefur áður verið hlaðið inn og síðan eytt. Þú ættir að athuga $1 áður en þú hleður skránni inn.', +'upload-success-subj' => 'Innhlaðning tókst', 'upload-proto-error' => 'Vitlaus samskiptaregla', 'upload-file-error' => 'Innri villa', @@ -1455,7 +1436,6 @@ Hér fyrir neðan er afrit af [$2 skráarsíðunni þar].', 'statistics-edits-average' => 'Meðal breytingafjöldi á síðu', 'statistics-views-total' => 'Uppflettingar alls', 'statistics-views-peredit' => 'Uppflettingar á hverja breytingu (meðaltal)', -'statistics-jobqueue' => 'Lengd [http://www.mediawiki.org/wiki/Manual:Job_queue vinnuraðar]', 'statistics-users' => 'Skráðir [[Special:ListUsers|notendur]]', 'statistics-users-active' => 'Virkir notendur', 'statistics-users-active-desc' => 'Notendur sem hafa framkvæmt aðgerð {{PLURAL:$1|síðastliðin dag|síðastliðna $1 daga}}', @@ -1629,7 +1609,6 @@ Sjá einnig [[Special:WantedCategories|eftirsótta flokka]].', # Watchlist 'watchlist' => 'Vaktlistinn', 'mywatchlist' => 'Vaktlistinn', -'watchlistfor' => "(fyrir '''$1''')", 'nowatchlist' => 'Vaktlistinn er tómur.', 'watchlistanontext' => 'Vinsamlegast $1 til að skoða eða breyta vaktlistanum þínum.', 'watchnologin' => 'Óinnskráð(ur)', @@ -1876,7 +1855,6 @@ Sjá [[Special:IPBlockList|bannaðar notendur og vistföng]] fyrir yfirlit yfir 'ipb-edit-dropdown' => 'Breyta ástæðu fyrir banni', 'ipb-unblock-addr' => 'Afbanna $1', 'ipb-unblock' => 'Afbanna notanda eða vistfang', -'ipb-blocklist-addr' => 'Núverandi bönn fyrir $1', 'ipb-blocklist' => 'Sjá núverandi bönn', 'ipb-blocklist-contribs' => 'Framlög fyrir $1', 'unblockip' => 'Afbanna notanda', @@ -2205,10 +2183,10 @@ Allir innflutningar eru skráð í [[Special:Log/import|innflutningsskránna]].' 'imagemaxsize' => 'Takmarka myndir á skráarlýsingasíðum við:', 'thumbsize' => 'Stærð smámynda:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|síða|síður}}', -'file-info' => '(stærð skráar: $1, MIME-tegund: $2)', -'file-info-size' => '($1 × $2 dílar, stærð skráar: $3, MIME-gerð: $4)', +'file-info' => 'stærð skráar: $1, MIME-tegund: $2', +'file-info-size' => '$1 × $2 dílar, stærð skráar: $3, MIME-gerð: $4', 'file-nohires' => 'Það er engin hærri upplausn til.', -'svg-long-desc' => '(SVG-skrá, að nafni til $1 × $2 dílar, skráarstærð: $3)', +'svg-long-desc' => 'SVG-skrá, að nafni til $1 × $2 dílar, skráarstærð: $3', 'show-big-image' => 'Mesta upplausn', 'show-big-image-thumb' => 'Myndin er í upplausninni $1 × $2 ', diff --git a/languages/messages/MessagesIt.php b/languages/messages/MessagesIt.php index 162e1103..76e67a13 100644 --- a/languages/messages/MessagesIt.php +++ b/languages/messages/MessagesIt.php @@ -11,6 +11,7 @@ * @author Airon90 * @author Andria * @author Beta16 + * @author Blaisorblade * @author Broc * @author BrokenArrow * @author Brownout @@ -24,6 +25,7 @@ * @author Felis * @author FollowTheMedia * @author Gianfranco + * @author HalphaZ * @author Klutzy * @author Marco 27 * @author Martorell @@ -33,9 +35,11 @@ * @author Nemo bis * @author Nick1915 * @author Od1n + * @author Oile11 * @author Omnipaedista * @author PaoloRomano * @author Pietrodn + * @author Pinodd * @author Ramac * @author Remember the dot * @author S.Örvarr.S @@ -44,6 +48,7 @@ * @author Tonyfroio * @author Trixt * @author Una giornata uggiosa '94 + * @author Vajotwo * @author Xpensive * @author לערי ריינהארט */ @@ -72,7 +77,7 @@ $namespaceAliases = array( 'Discussioni_immagine' => NS_FILE_TALK, ); -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $dateFormats = array( 'mdy time' => 'H:i', @@ -110,7 +115,7 @@ $specialPageAliases = array( 'Uncategorizedcategories' => array( 'CategorieSenzaCategorie' ), 'Uncategorizedimages' => array( 'ImmaginiSenzaCategorie' ), 'Uncategorizedtemplates' => array( 'TemplateSenzaCategorie' ), - 'Unusedcategories' => array( 'CategorieNonUsate' ), + 'Unusedcategories' => array( 'CategorieNonUsate', 'CategorieVuote' ), 'Unusedimages' => array( 'ImmaginiNonUsate' ), 'Wantedpages' => array( 'PagineRichieste' ), 'Wantedcategories' => array( 'CategorieRichieste' ), @@ -132,7 +137,8 @@ $specialPageAliases = array( 'Protectedtitles' => array( 'TitoliProtetti' ), 'Allpages' => array( 'TutteLePagine' ), 'Prefixindex' => array( 'Prefissi' ), - 'Ipblocklist' => array( 'IPBloccati', 'ElencoBlocchi' ), + 'Ipblocklist' => array( 'IPBloccati', 'ElencoBlocchi', 'Blocchi' ), + 'Unblock' => array( 'ElencoSblocchi', 'Sblocchi' ), 'Specialpages' => array( 'PagineSpeciali' ), 'Contributions' => array( 'Contributi', 'ContributiUtente' ), 'Emailuser' => array( 'InviaEMail' ), @@ -160,10 +166,10 @@ $specialPageAliases = array( 'Revisiondelete' => array( 'CancellaRevisione' ), 'Unusedtemplates' => array( 'TemplateNonUsati' ), 'Randomredirect' => array( 'RedirectCasuale' ), - 'Mypage' => array( 'MiaPaginaUtente' ), + 'Mypage' => array( 'MiaPaginaUtente', 'MiaPagina' ), 'Mytalk' => array( 'MieDiscussioni' ), 'Mycontributions' => array( 'MieiContributi' ), - 'Listadmins' => array( 'Amministratori', 'ElencoAmministratori' ), + 'Listadmins' => array( 'Amministratori', 'ElencoAmministratori', 'Admin' ), 'Listbots' => array( 'Bot', 'ElencoBot' ), 'Popularpages' => array( 'PaginePiùVisitate' ), 'Search' => array( 'Ricerca', 'Cerca' ), @@ -177,6 +183,8 @@ $specialPageAliases = array( 'DeletedContributions' => array( 'ContributiCancellati' ), 'Tags' => array( 'Etichette' ), 'Activeusers' => array( 'UtentiAttivi' ), + 'ComparePages' => array( 'ComparaPagine' ), + 'Badtitle' => array( 'TitoloErrato' ), ); $magicWords = array( @@ -228,7 +236,10 @@ $magicWords = array( 'language' => array( '0', '#LINGUA', '#LANGUAGE:' ), 'numberofadmins' => array( '1', 'NUMEROADMIN', 'NUMBEROFADMINS' ), 'special' => array( '0', 'speciale', 'special' ), + 'pagesincategory' => array( '1', 'PAGINEINCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ), 'pagesize' => array( '1', 'DIMENSIONEPAGINA', 'PESOPAGINA', 'PAGESIZE' ), + 'index' => array( '1', '__INDICE__', '__INDEX__' ), + 'noindex' => array( '1', '__NOINDICE__', '__NOINDEX__' ), 'protectionlevel' => array( '1', 'LIVELLOPROTEZIONE', 'PROTECTIONLEVEL' ), ); @@ -250,8 +261,7 @@ $messages = array( 'tog-editsection' => 'Modifica delle sezioni tramite il collegamento [modifica]', 'tog-editsectiononrightclick' => 'Modifica delle sezioni tramite clic destro sul titolo (richiede JavaScript)', 'tog-showtoc' => "Mostra l'indice per le pagine con più di 3 sezioni", -'tog-rememberpassword' => 'Ricorda la password su questo computer (richiede di accettare i cookie)', -'tog-editwidth' => 'Aumenta al massimo la larghezza della casella di modifica', +'tog-rememberpassword' => 'Ricorda la password su questo browser (per un massimo di $1 {{PLURAL:$1|giorno|giorni}})', 'tog-watchcreations' => 'Aggiungi le pagine create agli osservati speciali', 'tog-watchdefault' => 'Aggiungi le pagine modificate agli osservati speciali', 'tog-watchmoves' => 'Aggiungi le pagine spostate agli osservati speciali', @@ -399,31 +409,21 @@ I seguenti collegamenti sono in lingua inglese: 'faqpage' => 'Project:Domande frequenti', # Vector skin -'vector-action-addsection' => 'Aggiungi discussione', -'vector-action-delete' => 'Cancella', -'vector-action-move' => 'Sposta', -'vector-action-protect' => 'Proteggi', -'vector-action-undelete' => 'Recupera', -'vector-action-unprotect' => 'Sblocca', -'vector-namespace-category' => 'Categoria', -'vector-namespace-help' => 'Aiuto', -'vector-namespace-image' => 'File', -'vector-namespace-main' => 'Pagina', -'vector-namespace-media' => 'File multimediale', -'vector-namespace-mediawiki' => 'Messaggio', -'vector-namespace-project' => 'Pagina di servizio', -'vector-namespace-special' => 'Pagina speciale', -'vector-namespace-talk' => 'Discussione', -'vector-namespace-template' => 'Template', -'vector-namespace-user' => 'Utente', -'vector-view-create' => 'Crea', -'vector-view-edit' => 'Modifica', -'vector-view-history' => 'Visualizza cronologia', -'vector-view-view' => 'Leggi', -'vector-view-viewsource' => 'Visualizza sorgente', -'actions' => 'Azioni', -'namespaces' => 'Namespace', -'variants' => 'Varianti', +'vector-action-addsection' => 'Aggiungi discussione', +'vector-action-delete' => 'Cancella', +'vector-action-move' => 'Sposta', +'vector-action-protect' => 'Proteggi', +'vector-action-undelete' => 'Recupera', +'vector-action-unprotect' => 'Sblocca', +'vector-simplesearch-preference' => 'Abilita i suggerimenti di ricerca avanzata (solo per la skin Vector)', +'vector-view-create' => 'Crea', +'vector-view-edit' => 'Modifica', +'vector-view-history' => 'Visualizza cronologia', +'vector-view-view' => 'Leggi', +'vector-view-viewsource' => 'Visualizza sorgente', +'actions' => 'Azioni', +'namespaces' => 'Namespace', +'variants' => 'Varianti', 'errorpagetitle' => 'Errore', 'returnto' => 'Torna a $1.', @@ -484,6 +484,9 @@ Troppi utenti stanno tentando di visualizzare questa pagina. Attendere qualche minuto prima di riprovare a caricare la pagina. $1', +'pool-timeout' => "Timeout durante l'attesa dello sblocco", +'pool-queuefull' => 'La coda del pool è piena', +'pool-errorunknown' => 'Errore sconosciuto', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Informazioni su {{SITENAME}}', @@ -647,7 +650,8 @@ L'account è stato creato correttamente. Non dimenticare di personalizzare le [[ 'yourname' => 'Nome utente:', 'yourpassword' => 'Password:', 'yourpasswordagain' => 'Ripeti la password:', -'remembermypassword' => 'Ricorda la password su questo computer', +'remembermypassword' => 'Ricorda la password su questo computer (per un massimo di $1 {{PLURAL:$1|giorno|giorni}})', +'securelogin-stick-https' => 'Resta connesso attraverso HTTPS dopo il login', 'yourdomainname' => 'Specificare il dominio', 'externaldberror' => 'Si è verificato un errore con il server di autenticazione esterno, oppure non si dispone delle autorizzazioni necessarie per aggiornare il proprio accesso esterno.', 'login' => 'Entra', @@ -664,6 +668,7 @@ L'account è stato creato correttamente. Non dimenticare di personalizzare le [[ 'gotaccount' => "Hai già un accesso? '''$1'''.", 'gotaccountlink' => 'Entra', 'createaccountmail' => 'via e-mail', +'createaccountreason' => 'Motivo:', 'badretype' => 'Le password inserite non coincidono tra loro.', 'userexists' => 'Il nome utente inserito è già utilizzato. Scegliere un nome utente diverso.', @@ -682,6 +687,7 @@ Scegliere un nome utente diverso.', 'wrongpasswordempty' => 'Non è stata inserita alcuna password. Riprovare.', 'passwordtooshort' => 'Le password devono contenere almeno {{PLURAL:$1|1 carattere|$1 caratteri}}.', 'password-name-match' => 'La password deve essere diversa dal nome utente.', +'password-login-forbidden' => "L'uso di questo nome utente e password è stato proibito.", 'mailmypassword' => 'Invia una nuova password al mio indirizzo e-mail', 'passwordremindertitle' => 'Servizio Password Reminder di {{SITENAME}}', 'passwordremindertext' => 'Qualcuno (probabilmente tu, con indirizzo IP $1) ha richiesto l\'invio di una nuova password di accesso a {{SITENAME}} ($4). @@ -719,6 +725,9 @@ Riprovare più tardi.', 'loginlanguagelabel' => 'Lingua: $1', 'suspicious-userlogout' => 'La tua richiesta di disconnessione è stata negata perché sembra inviata da un browser non funzionante o un proxy di caching.', +# E-mail sending +'php-mail-error-unknown' => 'Errore sconosciuto nella funzione PHP mail()', + # Password reset dialog 'resetpass' => 'Cambia la password', 'resetpass_announce' => "L'accesso è stato effettuato con un codice temporaneo, inviato via e-mail. Per completare l'accesso è necessario impostare una nuova password:", @@ -770,9 +779,10 @@ La password potrebbe essere stata già cambiata, oppure potrebbe essere stata ri 'showlivepreview' => "Funzione ''Live preview''", 'showdiff' => 'Mostra cambiamenti', 'anoneditwarning' => "'''Attenzione:''' Accesso non effettuato. Nella cronologia della pagina verrà registrato l'indirizzo IP.", +'anonpreviewwarning' => "''Non hai eseguito il login. Salvando il tuo indirizzo IP sarà registrato nella cronologia di questa voce.''", 'missingsummary' => "'''Attenzione:''' non è stato specificato l'oggetto di questa modifica. Premendo di nuovo '''Salva la pagina''' la modifica verrà salvata con l'oggetto vuoto.", 'missingcommenttext' => 'Inserire un commento qui sotto.', -'missingcommentheader' => "'''Attenzione:''' Non è stata specificata l'intestazione di questo commento. Premendo di nuovo '''Salva la pagina''' la modifica verrà salvata senza intestazione.", +'missingcommentheader' => "'''Attenzione:''' non è stata specificato l'oggetto/l'intestazione di questo commento. Premendo di nuovo \"{{int:savearticle}}\" la modifica verrà salvata senza intestazione.", 'summary-preview' => "Anteprima dell'oggetto:", 'subject-preview' => 'Anteprima oggetto/intestazione:', 'blockedtitle' => 'Utente bloccato.', @@ -838,7 +848,9 @@ L'ultimo elemento del registro dei blocchi è riportato di seguito per informazi 'userjsyoucanpreview' => "'''Suggerimento:''' usa il pulsante 'Visualizza anteprima' per provare il tuo nuovo JavaScript prima di salvarlo.", 'usercsspreview' => "'''Questa è solo un'anteprima del proprio CSS personale. Le modifiche non sono ancora state salvate!'''", 'userjspreview' => "'''Questa è solo un'anteprima per provare il proprio JavaScript personale; le modifiche non sono ancora state salvate!'''", -'userinvalidcssjstitle' => "'''Attenzione:''' Non esiste alcuna skin con nome \"\$1\". Si noti che le pagine per i .css e .js personalizzati hanno l'iniziale del titolo minuscola, ad esempio {{ns:user}}:Esempio/monobook.css e non {{ns:user}}:Esempio/Monobook.css.", +'sitecsspreview' => "Questa è solo un'anteprima del CSS. Le modifiche non sono ancora state salvate!'''", +'sitejspreview' => "Questa è solo un'anteprima per provare il JavaScript; le modifiche non sono ancora state salvate!'''", +'userinvalidcssjstitle' => "'''Attenzione:''' Non esiste alcuna skin con nome \"\$1\". Si noti che le pagine per i .css e .js personalizzati hanno l'iniziale del titolo minuscola, ad esempio {{ns:user}}:Esempio/vector.css e non {{ns:user}}:Esempio/Vector.css.", 'updated' => '(Aggiornato)', 'note' => "'''NOTA:'''", 'previewnote' => "'''Questa è solo un'anteprima; le modifiche alla pagina NON sono ancora state salvate!'''", @@ -873,7 +885,6 @@ Con l'invio del testo dichiari inoltre, sotto la tua responsabilità, che il tes 'copyrightwarning2' => "Nota: tutti i contributi inviati a {{SITENAME}} possono essere modificati, stravolti o cancellati da parte degli altri partecipanti. Se non desideri che i tuoi testi possano essere modificati senza alcun riguardo, non inviarli a questo sito.
    Con l'invio del testo dichiari inoltre, sotto la tua responsabilità, che il testo è stato scritto da te personalmente oppure che è stato copiato da una fonte di pubblico dominio o analogamente libera (vedi $1 per maggiori dettagli). '''NON INVIARE MATERIALE COPERTO DA DIRITTO DI AUTORE SENZA AUTORIZZAZIONE!'''", -'longpagewarning' => "'''ATTENZIONE: Questa pagina è lunga $1 kilobyte; alcuni browser potrebbero presentare dei problemi nella modifica di pagine che si avvicinano o superano i 32 KB. Valuta l'opportunità di suddividere la pagina in sezioni più piccole.'''", 'longpageerror' => "'''ERRORE: Il testo inviato è lungo $1 kilobyte, più della dimensione massima consentita ($2 kilobyte). Il testo non può essere salvato.'''", 'readonlywarning' => "'''ATTENZIONE: Il database è stato bloccato per manutenzione, è quindi impossibile salvare le modifiche in questo momento. Per non perderle, è possibile copiare quanto inserito finora nella casella di modifica, incollarlo in un programma di elaborazione testi e salvarlo in attesa dello sblocco del database.''' @@ -1045,6 +1056,8 @@ $1", 'logdelete-failure' => "'''La visibilità dell'evento non può essere impostata:''' $1", 'revdel-restore' => 'cambia la visibilità', +'revdel-restore-deleted' => 'revisioni cancellate', +'revdel-restore-visible' => 'revisioni visibili', 'pagehist' => 'Cronologia della pagina', 'deletedhist' => 'Cronologia cancellata', 'revdelete-content' => 'contenuto', @@ -1107,11 +1120,13 @@ $1", # Diffs 'history-title' => 'Cronologia delle modifiche di "$1"', 'difference' => '(Differenze fra le revisioni)', +'difference-multipage' => '(Differenze fra le pagine)', 'lineno' => 'Riga $1:', 'compareselectedversions' => 'Confronta le versioni selezionate', 'showhideselectedversions' => 'Mostra/nascondi versioni selezionate', 'editundo' => 'annulla', -'diff-multi' => '({{PLURAL:$1|Una revisione intermedia non mostrata|$1 revisioni intermedie non mostrate}}.)', +'diff-multi' => '({{PLURAL:$1|Una revisione intermedia|$1 revisioni intermedie}} di {{PLURAL:$2|un utente|$2 utenti}} non mostrate)', +'diff-multi-manyusers' => '({{PLURAL:$1|Una revisione intermedia|$1 revisioni intermedie}} di oltre $2 {{PLURAL:$2|utente|utenti}} non mostrate)', # Search results 'searchresults' => 'Risultati della ricerca', @@ -1146,6 +1161,7 @@ $1", 'searchprofile-everything-tooltip' => 'Cerca ovunque (incluse le pagine di discussione)', 'searchprofile-advanced-tooltip' => 'Cerca nei namespace personalizzati', 'search-result-size' => '$1 ({{PLURAL:$2|una parola|$2 parole}})', +'search-result-category-size' => '{{PLURAL:$1|1 utente|$1 utenti}} ({{PLURAL:$2|1 sottocategoria|$2 sottocategorie}}, {{PLURAL:$3|1 file|$3 files}})', 'search-result-score' => 'Rilevanza: $1%', 'search-redirect' => '(redirect $1)', 'search-section' => '(sezione $1)', @@ -1220,6 +1236,7 @@ $1", 'contextlines' => 'Righe di testo per ciascun risultato:', 'contextchars' => 'Numero di caratteri di contesto:', 'stub-threshold' => 'Valore minimo per i collegamenti agli stub, in byte:', +'stub-threshold-disabled' => 'Disattivato', 'recentchangesdays' => 'Numero di giorni da mostrare nelle ultime modifiche:', 'recentchangesdays-max' => '(massimo $1 {{PLURAL:$1|giorno|giorni}})', 'recentchangescount' => 'Numero di modifiche da mostrare per default:', @@ -1251,6 +1268,7 @@ $1", 'prefs-files' => 'File', 'prefs-custom-css' => 'CSS personalizzato', 'prefs-custom-js' => 'JS personalizzato', +'prefs-common-css-js' => 'CSS/JS condiviso per tutte le skin:', 'prefs-reset-intro' => "È possibile usare questa pagina per reimpostare le proprie preferenze a quelle predefinite del sito. L'operazione non può essere annullata.", 'prefs-emailconfirm-label' => "Conferma dell'e-mail:", @@ -1286,9 +1304,15 @@ L'operazione non può essere annullata.", 'prefs-advancedrendering' => 'Opzioni avanzate', 'prefs-advancedsearchoptions' => 'Opzioni avanzate', 'prefs-advancedwatchlist' => 'Opzioni avanzate', -'prefs-display' => 'Opzioni di visualizzazione', +'prefs-displayrc' => 'Opzioni di visualizzazione', +'prefs-displaysearchoptions' => 'Opzioni di visualizzazione', +'prefs-displaywatchlist' => 'Opzioni di visualizzazione', 'prefs-diffs' => 'Differenze', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => "L'indirizzo e-mail sembra valido", +'email-address-validity-invalid' => 'Inserisci un indirizzo e-mail valido', + # User rights 'userrights' => 'Gestione dei permessi relativi agli utenti', 'userrights-lookup-user' => 'Gestione dei gruppi utente', @@ -1372,6 +1396,7 @@ L'operazione non può essere annullata.", 'right-hideuser' => 'Blocca un nome utente, nascondendolo al pubblico', 'right-ipblock-exempt' => 'Ignora i blocchi degli IP, i blocchi automatici e i blocchi di range di IP', 'right-proxyunbannable' => 'Scavalca i blocchi sui proxy', +'right-unblockself' => 'Sblocca se stesso', 'right-protect' => 'Cambia i livelli di protezione', 'right-editprotected' => 'Modifica pagine protette', 'right-editinterface' => "Modifica l'interfaccia utente", @@ -1394,7 +1419,6 @@ L'operazione non può essere annullata.", 'right-siteadmin' => 'Blocca e sblocca il database', 'right-reset-passwords' => 'Reimposta le password di altri utenti', 'right-override-export-depth' => 'Esporta le pagine includendo le pagine collegate fino ad una profondità di 5', -'right-versiondetail' => 'Mostra le informazioni complete del software', 'right-sendemail' => 'Invia e-mail ad altri utenti', # User rights log @@ -1445,14 +1469,9 @@ L'operazione non può essere annullata.", 'recentchanges-legend' => 'Opzioni ultime modifiche', 'recentchangestext' => 'Questa pagina presenta le modifiche più recenti ai contenuti del sito.', 'recentchanges-feed-description' => 'Questo feed riporta le modifiche più recenti ai contenuti del sito.', -'recentchanges-label-legend' => 'Legenda: $1.', -'recentchanges-legend-newpage' => '$1 - nuova pagina', 'recentchanges-label-newpage' => 'Questa modifica ha creato una nuova pagina', -'recentchanges-legend-minor' => '$1 - modifica minore', 'recentchanges-label-minor' => 'Questa è una modifica minore', -'recentchanges-legend-bot' => '$1 - modifica bot', 'recentchanges-label-bot' => 'Questa modifica è stata effettuata da un bot', -'recentchanges-legend-unpatrolled' => '$1 - modifica non verificata', 'recentchanges-label-unpatrolled' => 'Questa modifica non è stata ancora verificata', 'rcnote' => "Di seguito {{PLURAL:$1|è elencata la modifica più recente apportata|sono elencate le '''$1''' modifiche più recenti apportate}} al sito {{PLURAL:$2|nelle ultime 24 ore|negli scorsi '''$2''' giorni}}; i dati sono aggiornati alle $5 del $4.", 'rcnotefrom' => "Di seguito sono elencate le modifiche apportate a partire da '''$2''' (fino a '''$1''').", @@ -1499,6 +1518,8 @@ Le pagine contenute nella propria lista degli [[Special:Watchlist|Osservati spec 'upload_directory_missing' => 'La directory di upload ($1) non esiste e non può essere creata dal server web.', 'upload_directory_read_only' => 'Il server web non è in grado di scrivere nella directory di upload ($1).', 'uploaderror' => 'Errore nel caricamento', +'upload-recreate-warning' => "'Attenzione'': un file con questo nome è stato cancellato o spostato.''' +Ill log delle cancellazioni e degli spostamenti di questa pagina viene qui riportato per comodità:", 'uploadtext' => "Usare il modulo sottostante per caricare nuovi file. Per visualizzare o ricercare i file già caricati, consultare il [[Special:FileList|log dei file caricati]]. Caricamenti di file e di nuove versioni di file sono registrati nel [[Special:Log/upload|log degli upload]], le cancellazioni nell'[[Special:Log/delete|apposito]]. Per inserire un file all'interno di una pagina, fare un collegamento di questo tipo: @@ -1530,6 +1551,17 @@ Consultare la [[Special:NewFiles|galleria dei nuovi file]] per una visione d'ins 'filetype-unwanted-type' => "Caricare file di tipo '''\".\$1\"''' è sconsigliato. {{PLURAL:\$3|Il tipo di file consigliato è|I tipi di file consigliati sono}} \$2.", 'filetype-banned-type' => "Caricare file di tipo '''\".\$1\"''' non è consentito. {{PLURAL:\$3|Il tipo di file consentito è|I tipi di file consentiti sono}} \$2.", 'filetype-missing' => 'Il file è privo di estensione (ad es. ".jpg").', +'empty-file' => 'Il file che hai inviato è vuoto.', +'file-too-large' => 'Il file che hai inviato è troppo grande.', +'filename-tooshort' => 'Il nome del file è troppo breve.', +'filetype-banned' => 'Questo tipo di file è vietato.', +'verification-error' => 'Questo file non ha superato la verifica.', +'hookaborted' => "La modifica che si è tentato di fare è stata interrotta da un hook di un'estensione.", +'illegal-filename' => 'Il nome del file non è ammesso.', +'overwrite' => 'Sovrascrivere un file esistente non è permesso.', +'unknown-error' => 'Si è verificato un errore sconosciuto.', +'tmp-create-error' => 'Impossibile creare il file temporaneo.', +'tmp-write-error' => 'Errore di scrittura del file temporaneo.', 'large-file' => 'Si raccomanda di non superare le dimensioni di $1 per ciascun file; questo file è grande $2.', 'largefileserver' => 'Il file supera le dimensioni consentite dalla configurazione del server.', 'emptyfile' => 'Il file appena caricato sembra essere vuoto. Ciò potrebbe essere dovuto ad un errore nel nome del file. Verificare che si intenda realmente caricare questo file.', @@ -1551,13 +1583,14 @@ Se si dispone dell'immagine nella risoluzione originale, si prega di caricarla. 'fileexists-shared-forbidden' => "Un file con questo nome esiste già nell'archivio di risorse multimediali condivise. Se si desidera ancora caricare il file, tornare indietro e modificare il nome con il quale caricare il file. [[File:$1|thumb|center|$1]]", 'file-exists-duplicate' => 'Questo file è un duplicato {{PLURAL:$1|del seguente|dei seguenti}} file:', 'file-deleted-duplicate' => 'Un file identico a questo ([[:$1]]) è stato cancellato in passato. Verificare la cronologia delle cancellazioni prima di caricarlo di nuovo.', -'successfulupload' => 'Caricamento completato', 'uploadwarning' => 'Avviso di caricamento', 'uploadwarning-text' => 'Per favore modifica qui sotto la descrizione del file e prova di nuovo.', 'savefile' => 'Salva file', 'uploadedimage' => 'ha caricato "[[$1]]"', 'overwroteimage' => 'ha caricato una nuova versione di "[[$1]]"', 'uploaddisabled' => 'Il caricamento dei file è temporaneamente sospeso.', +'copyuploaddisabled' => 'Il caricamento tramite URL è disabilitato.', +'uploadfromurl-queued' => 'Il caricamento è stato accodato.', 'uploaddisabledtext' => 'Il caricamento dei file non è attivo.', 'php-uploaddisabledtext' => 'Il caricamento di file tramite PHP è disabilitato. Controlla la configurazione di file_uploads.', 'uploadscripted' => 'Questo file contiene codice HTML o di script, che potrebbe essere interpretato erroneamente da un browser web.', @@ -1590,6 +1623,14 @@ JD # Jenoptik MGP # Pentax PICT # misc. #
    ', +'upload-success-subj' => 'Caricamento completato', +'upload-success-msg' => "L'upload da [$2] è riuscito. Il file è disponibile qui: [[:{{ns:file}}:$1]]", +'upload-failure-subj' => "Problema nell'upload", +'upload-failure-msg' => 'Si è verificato un problema con il caricamento da [$2]: + +$1', +'upload-warning-subj' => 'Avviso di caricamento', +'upload-warning-msg' => "C'è stato un problema con il caricamento da [$2]. Si può tornare al [[Special:Upload/stash/$1|form di upload]] per correggere questo problema.", 'upload-proto-error' => 'Protocollo errato', 'upload-proto-error-text' => "Per l'upload remoto è necessario specificare URL che iniziano con http:// oppure ftp://.", @@ -1602,22 +1643,23 @@ PICT # misc. 'upload-http-error' => 'Si è verificato un errore HTTP: $1', # img_auth script messages -'img-auth-accessdenied' => 'Accesso negato', -'img-auth-nopathinfo' => 'PATH_INFO mancante. +'img-auth-accessdenied' => 'Accesso negato', +'img-auth-nopathinfo' => 'PATH_INFO mancante. Il server non è impostato per passare questa informazione. Potrebbe essere basato su CGI e non può supportare img_auth. Consultare http://www.mediawiki.org/wiki/Manual:Image_Authorization.', -'img-auth-notindir' => 'Il percorso richiesto non si trova nella directory di upload configurata.', -'img-auth-badtitle' => 'Impossibile costruire un titolo valido da "$1".', -'img-auth-nologinnWL' => 'Non si è effettuato l\'accesso e "$1" non è nella whitelist.', -'img-auth-nofile' => 'File "$1" non esiste.', -'img-auth-isdir' => 'Si sta tentando di accedere a una directory "$1". +'img-auth-notindir' => 'Il percorso richiesto non si trova nella directory di upload configurata.', +'img-auth-badtitle' => 'Impossibile costruire un titolo valido da "$1".', +'img-auth-nologinnWL' => 'Non si è effettuato l\'accesso e "$1" non è nella whitelist.', +'img-auth-nofile' => 'File "$1" non esiste.', +'img-auth-isdir' => 'Si sta tentando di accedere a una directory "$1". Solo l\'accesso ai file è consentito.', -'img-auth-streaming' => '"$1" in streaming.', -'img-auth-public' => 'La funzione di img_auth.php è di dare in output file da un sito wiki privato. +'img-auth-streaming' => '"$1" in streaming.', +'img-auth-public' => 'La funzione di img_auth.php è di dare in output file da un sito wiki privato. Questo sito è configurato come un wiki pubblico. Per una sicurezza ottimale, img_auth.php è disattivato.', -'img-auth-noread' => 'L\'utente non ha accesso alla lettura di "$1".', +'img-auth-noread' => 'L\'utente non ha accesso alla lettura di "$1".', +'img-auth-bad-query-string' => "L'URL contiene una stringa di query non valida.", # HTTP errors 'http-invalid-url' => 'URL non valido: $1', @@ -1649,6 +1691,7 @@ Per modificare l'ordinamento, fare clic sull'intestazione della colonna prescelt 'listfiles_search_for' => 'Ricerca immagini per nome:', 'imgfile' => 'file', 'listfiles' => 'Elenco dei file', +'listfiles_thumb' => 'Miniatura', 'listfiles_date' => 'Data', 'listfiles_name' => 'Nome', 'listfiles_user' => 'Utente', @@ -1692,6 +1735,7 @@ Di seguito viene mostrata la descrizione presente nella [$2 pagina di descrizion 'uploadnewversion-linktext' => 'Carica una nuova versione di questo file', 'shared-repo-from' => 'da $1', 'shared-repo' => 'un archivio condiviso', +'filepage.css' => '/* Il CSS qui posto viene incluso nella pagina di descrizione del file, inclusa anche su wiki client stranieri */', # File reversion 'filerevert' => 'Ripristina $1', @@ -1761,8 +1805,8 @@ Di seguito viene mostrata la descrizione presente nella [$2 pagina di descrizion 'statistics-edits' => "Modifiche a partire dall'installazione di {{SITENAME}}", 'statistics-edits-average' => 'Media delle modifiche per pagina', 'statistics-views-total' => 'Visualizzazioni totali', +'statistics-views-total-desc' => 'Visualizzazioni di pagine inesistenti e pagine speciali non sono incluse', 'statistics-views-peredit' => 'Visualizzazioni per modifica', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Coda dei processi] da eseguire in background', 'statistics-users' => '[[Special:ListUsers|Utenti]] registrati', 'statistics-users-active' => 'Utenti attivi', 'statistics-users-active-desc' => "Utenti che hanno effettuato un'azione {{PLURAL:$1|nell'ultimo giorno|negli ultimi $1 giorni}}", @@ -1775,7 +1819,7 @@ Di seguito viene mostrata la descrizione presente nella [$2 pagina di descrizion 'doubleredirects' => 'Redirect doppi', 'doubleredirectstext' => 'In questa pagina sono elencate pagine che reindirizzano ad altre pagine di redirect. Ciascuna riga contiene i collegamenti al primo ed al secondo redirect, oltre alla prima riga di testo del secondo redirect che di solito contiene la pagina di destinazione "corretta" alla quale dovrebbe puntare anche il primo redirect. -I redirect cancellati sono stati corretti.', +I redirect cancellati sono stati corretti.', 'double-redirect-fixed-move' => '[[$1]] è stata spostata automaticamente, ora è un redirect a [[$2]]', 'double-redirect-fixer' => 'Correttore di redirect', @@ -1798,6 +1842,8 @@ I redirect cancellati sono stati corretti.', 'nmembers' => '$1 {{PLURAL:$1|elemento|elementi}}', 'nrevisions' => '$1 {{PLURAL:$1|revisione|revisioni}}', 'nviews' => '$1 {{PLURAL:$1|visita|visite}}', +'nimagelinks' => 'Utilizzato su $1 {{PLURAL:$1|pagina|pagine}}', +'ntransclusions' => 'tilizzato su $1 {{PLURAL:$1|pagina|pagine}}', 'specialpage-empty' => 'Questa pagina speciale è attualmente vuota.', 'lonelypages' => 'Pagine orfane', 'lonelypagestext' => 'Le pagine indicate di seguito sono prive di collegamenti provenienti da altre pagine di {{SITENAME}} e non sono incluse in nessuna pagina del sito.', @@ -1955,33 +2001,40 @@ Potrebbero esserci [[{{MediaWiki:Listgrouprights-helppage}}|ulteriori informazio 'listgrouprights-removegroup-self-all' => 'Può rimuovere tutti i gruppi dal proprio account', # E-mail user -'mailnologin' => 'Nessun indirizzo cui inviare il messaggio', -'mailnologintext' => 'Per inviare messaggi e-mail ad altri utenti è necessario [[Special:UserLogin|accedere al sito]] e aver registrato un indirizzo valido nelle proprie [[Special:Preferences|preferenze]].', -'emailuser' => "Scrivi all'utente", -'emailpage' => "Invia un messaggio e-mail all'utente", -'emailpagetext' => 'Usare il modulo sottostante per inviare un messaggio e-mail all\'utente indicato. L\'indirizzo specificato nelle [[Special:Preferences|preferenze]] del mittente apparirà nel campo "Da:" del messaggio per consentire al destinatario di rispondere direttamente.', -'usermailererror' => "L'oggetto mail ha restituito l'errore:", -'defemailsubject' => 'Messaggio da {{SITENAME}}', -'noemailtitle' => 'Nessun indirizzo e-mail', -'noemailtext' => 'Questo utente non ha indicato un indirizzo e-mail valido.', -'nowikiemailtitle' => 'E-mail non permessa', -'nowikiemailtext' => 'Questo utente ha scelto di non ricevere messaggi di posta elettronica dagli altri utenti.', -'email-legend' => 'Invia un messaggio e-mail a un altro utente di {{SITENAME}}', -'emailfrom' => 'Da:', -'emailto' => 'A:', -'emailsubject' => 'Oggetto:', -'emailmessage' => 'Messaggio:', -'emailsend' => 'Invia', -'emailccme' => 'Invia in copia al mio indirizzo.', -'emailccsubject' => 'Copia del messaggio inviato a $1: $2', -'emailsent' => 'Messaggio inviato', -'emailsenttext' => 'Il messaggio e-mail è stato inviato.', -'emailuserfooter' => 'Questa e-mail è stata inviata da $1 a $2 attraverso la funzione "Invia un messaggio e-mail all\'utente" su {{SITENAME}}.', +'mailnologin' => 'Nessun indirizzo cui inviare il messaggio', +'mailnologintext' => 'Per inviare messaggi e-mail ad altri utenti è necessario [[Special:UserLogin|accedere al sito]] e aver registrato un indirizzo valido nelle proprie [[Special:Preferences|preferenze]].', +'emailuser' => "Scrivi all'utente", +'emailpage' => "Invia un messaggio e-mail all'utente", +'emailpagetext' => 'Usare il modulo sottostante per inviare un messaggio e-mail all\'utente indicato. L\'indirizzo specificato nelle [[Special:Preferences|preferenze]] del mittente apparirà nel campo "Da:" del messaggio per consentire al destinatario di rispondere direttamente.', +'usermailererror' => "L'oggetto mail ha restituito l'errore:", +'defemailsubject' => 'Messaggio da {{SITENAME}}', +'usermaildisabled' => 'e-mail utente disabilitata', +'usermaildisabledtext' => 'Non è possibile inviare e-mail ad altri utenti su questo wiki', +'noemailtitle' => 'Nessun indirizzo e-mail', +'noemailtext' => 'Questo utente non ha indicato un indirizzo e-mail valido.', +'nowikiemailtitle' => 'E-mail non permessa', +'nowikiemailtext' => 'Questo utente ha scelto di non ricevere messaggi di posta elettronica dagli altri utenti.', +'email-legend' => 'Invia un messaggio e-mail a un altro utente di {{SITENAME}}', +'emailfrom' => 'Da:', +'emailto' => 'A:', +'emailsubject' => 'Oggetto:', +'emailmessage' => 'Messaggio:', +'emailsend' => 'Invia', +'emailccme' => 'Invia in copia al mio indirizzo.', +'emailccsubject' => 'Copia del messaggio inviato a $1: $2', +'emailsent' => 'Messaggio inviato', +'emailsenttext' => 'Il messaggio e-mail è stato inviato.', +'emailuserfooter' => 'Questa e-mail è stata inviata da $1 a $2 attraverso la funzione "Invia un messaggio e-mail all\'utente" su {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Messaggio di sistema', +'usermessage-editor' => 'Messaggero di sistema', +'usermessage-template' => 'MediaWiki:MessaggioUtente', # Watchlist 'watchlist' => 'Osservati speciali', 'mywatchlist' => 'osservati speciali', -'watchlistfor' => "(dell'utente '''$1''')", +'watchlistfor2' => "Dell'utente $1 $2", 'nowatchlist' => 'La lista degli osservati speciali è vuota.', 'watchlistanontext' => "Per visualizzare e modificare l'elenco degli osservati speciali è necessario $1.", 'watchnologin' => 'Accesso non effettuato', @@ -2041,14 +2094,17 @@ Non verranno inviate altre notifiche in caso di ulteriori cambiamenti, a meno ch Il sistema di notifica di {{SITENAME}}, al tuo servizio -- -Per modificare le impostazioni della lista degli osservati speciali, visita -{{fullurl:Special:Watchlist/edit}} +Per modificare le impostazioni delle notifiche via e-mail, visita +{{fullurl:{{#special:Preferences}}}} -Per cancellare la pagina della lista degli osservati speciali, visita +Per modificare la lista degli osservati speciali, visita +{{fullurl:{{#special:Watchlist}}/edit}} + +Per rimuovere la pagina dalla lista degli osservati speciali, visita $UNWATCHURL -Per dare il tuo feedback e ricevere ulteriore assistenza: -{{fullurl:Help:Aiuto}}', +Per commentare e ricevere aiuto: +{{fullurl:{{MediaWiki:Helppage}}}}', # Delete 'deletepage' => 'Cancella pagina', @@ -2095,7 +2151,10 @@ La modifica più recente alla pagina è stata apportata da [[User:$3|$3]] ([[Use 'revertpage' => 'Annullate le modifiche di [[Special:Contributions/$2|$2]] ([[User talk:$2|discussione]]), riportata alla versione precedente di [[User:$1|$1]]', 'revertpage-nouser' => 'Annullate le modifiche di (nome utente rimosso), riportata alla versione precedente di [[User:$1|$1]]', 'rollback-success' => "Annullate le modifiche di $1; pagina riportata all'ultima versione di $2.", -'sessionfailure' => "Si è verificato un problema nella sessione che identifica l'accesso; il sistema non ha eseguito il comando impartito per precauzione. Tornare alla pagina precedente con il tasto 'Indietro' del proprio browser, ricaricare la pagina e riprovare.", + +# Edit tokens +'sessionfailure-title' => 'Sessione fallita', +'sessionfailure' => "Si è verificato un problema nella sessione che identifica l'accesso; il sistema non ha eseguito il comando impartito per precauzione. Tornare alla pagina precedente con il tasto 'Indietro' del proprio browser, ricaricare la pagina e riprovare.", # Protect 'protectlogpage' => 'Protezioni', @@ -2220,18 +2279,21 @@ $1', 'month' => 'Dal mese (e precedenti):', 'year' => "Dall'anno (e precedenti):", -'sp-contributions-newbies' => 'Mostra solo i contributi dei nuovi utenti', -'sp-contributions-newbies-sub' => 'Per i nuovi utenti', -'sp-contributions-newbies-title' => 'Contributi dei nuovi utenti', -'sp-contributions-blocklog' => 'blocchi', -'sp-contributions-deleted' => 'contributi utente cancellati', -'sp-contributions-logs' => 'registri', -'sp-contributions-talk' => 'discussione', -'sp-contributions-userrights' => 'gestione dei permessi', -'sp-contributions-blocked-notice' => "Questo utente è attualmente bloccato. L'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:", -'sp-contributions-search' => 'Ricerca contributi', -'sp-contributions-username' => 'Indirizzo IP o nome utente:', -'sp-contributions-submit' => 'Ricerca', +'sp-contributions-newbies' => 'Mostra solo i contributi dei nuovi utenti', +'sp-contributions-newbies-sub' => 'Per i nuovi utenti', +'sp-contributions-newbies-title' => 'Contributi dei nuovi utenti', +'sp-contributions-blocklog' => 'blocchi', +'sp-contributions-deleted' => 'contributi utente cancellati', +'sp-contributions-uploads' => 'caricamenti', +'sp-contributions-logs' => 'registri', +'sp-contributions-talk' => 'discussione', +'sp-contributions-userrights' => 'gestione dei permessi', +'sp-contributions-blocked-notice' => "Questo utente è attualmente bloccato. L'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:", +'sp-contributions-blocked-notice-anon' => "Questo indirizzo IP è attualmente bloccato. Di seguito è riportato l'ultimo elemento del registro dei blocchi:", +'sp-contributions-search' => 'Ricerca contributi', +'sp-contributions-username' => 'Indirizzo IP o nome utente:', +'sp-contributions-toponly' => 'Mostra solo i contributi che sono le ultime revisioni per la pagina', +'sp-contributions-submit' => 'Ricerca', # What links here 'whatlinkshere' => 'Puntano qui', @@ -2292,7 +2354,6 @@ Consultare la [[Special:IPBlockList|lista degli IP bloccati]] per vedere i blocc 'ipb-edit-dropdown' => 'Modifica i motivi per il blocco', 'ipb-unblock-addr' => 'Sblocca $1', 'ipb-unblock' => 'Sblocca un utente o un indirizzo IP', -'ipb-blocklist-addr' => 'Blocchi attivi per $1', 'ipb-blocklist' => 'Elenca i blocchi attivi', 'ipb-blocklist-contribs' => 'Contributi di $1', 'unblockip' => "Sblocca l'utente", @@ -2360,6 +2421,8 @@ L'utente $1 è già bloccato. Modificare le impostazioni?", 'sorbs_create_account_reason' => 'Non è possibile creare nuovi accessi da questo indirizzo IP perché è elencato come proxy aperto nella blacklist DNSBL utilizzata da {{SITENAME}}.', 'cant-block-while-blocked' => 'Non è possibile bloccare altri utenti mentre si è bloccati.', 'cant-see-hidden-user' => 'L\'utente che si sta tentando di bloccare è stato già bloccato e nascosto. Poiché non hai il permesso "hideuser", non è possibile visualizzare o modificare il blocco dell\'utente.', +'ipbblocked' => 'Non puoi bloccare o sbloccare altri utenti, perché tu stesso sei bloccato', +'ipbnounblockself' => 'Non puoi sbloccare te stesso', # Developer tools 'lockdb' => 'Blocca il database', @@ -2386,6 +2449,12 @@ Ricordare di [[Special:UnlockDB|rimuovere il blocco]] dopo aver terminato le ope Si noti che la pagina '''non''' sarà spostata se ne esiste già una con il nuovo nome, a meno che non sia vuota o costituita solo da un redirect alla vecchia e sia priva di versioni precedenti. In caso di spostamento errato si può quindi tornare subito al vecchio titolo, e non è possibile sovrascrivere per errore una pagina già esistente. +'''ATTENZIONE:''' +Un cambiamento così drastico può creare contrattempi e problemi, soprattutto per le pagine più visitate. Accertarsi di aver valutato le conseguenze dello spostamento prima di procedere.", +'movepagetext-noredirectfixer' => "Questo modulo consente di rinominare una pagina, spostando tutta la sua cronologia al nuovo nome. La pagina attuale diverrà automaticamente un redirect al nuovo titolo. Controlla che lo spostamento non abbia creato [[Special:DoubleRedirects|doppi redirect]] o [[Special:BrokenRedirects|redirect errati]]. L'onere di garantire che i collegamenti alla pagina restino corretti spetta a chi la sposta. + +Si noti che la pagina '''non''' sarà spostata se ne esiste già una con il nuovo nome, a meno che non sia vuota o costituita solo da un redirect alla vecchia e sia priva di versioni precedenti. In caso di spostamento errato si può quindi tornare subito al vecchio titolo, e non è possibile sovrascrivere per errore una pagina già esistente. + '''ATTENZIONE:''' Un cambiamento così drastico può creare contrattempi e problemi, soprattutto per le pagine più visitate. Accertarsi di aver valutato le conseguenze dello spostamento prima di procedere.", 'movepagetalktext' => "La corrispondente pagina di discussione, se esiste, sarà spostata automaticamente insieme alla pagina principale, '''tranne che nei seguenti casi''': @@ -2444,6 +2513,7 @@ La pagina specificata come destinazione "[[:$1]]" esiste già. Vuoi cancellarla 'immobile-source-page' => 'Questa pagina non può essere spostata.', 'immobile-target-page' => 'Non è possibile spostare sul titolo indicato.', 'imagenocrossnamespace' => 'Non è possibile spostare un file fuori dal relativo namespace.', +'nonfile-cannot-move-to-file' => 'Non è possibile spostare un file fuori dal relativo namespace.', 'imagetypemismatch' => 'La nuova estensione del file non corrisponde al tipo dello stesso', 'imageinvalidfilename' => "Il nome dell'immagine non è valido", 'fix-double-redirects' => 'Aggiorna tutti i redirect che puntano al titolo originale', @@ -2518,10 +2588,11 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log 'import-interwiki-namespace' => 'Namespace di destinazione:', 'import-upload-filename' => 'Nome file:', 'import-comment' => 'Oggetto:', -'importtext' => 'Si prega di esportare il file dal sito wiki di origine con la funzione Special:Export, salvarlo sul proprio disco e poi caricarlo qui.', +'importtext' => 'Si prega di esportare il file dal sito wiki di origine con la [[Special:Export|funzione di esportazione]], salvarlo sul proprio disco e poi caricarlo qui.', 'importstart' => 'Importazione delle pagine in corso...', 'import-revision-count' => '{{PLURAL:$1|una revisione importata|$1 revisioni importate}}', 'importnopages' => 'Nessuna pagina da importare.', +'imported-log-entries' => 'Importat{{PLURAL:$1|o|i}} $1 {{PLURAL:$1|evento|eventi}} di log.', 'importfailed' => 'Importazione non riuscita: $1', 'importunknownsource' => "Tipo di origine sconosciuto per l'importazione", 'importcantopen' => 'Impossibile aprire il file di importazione', @@ -2614,6 +2685,8 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log 'tooltip-upload' => 'Inizia il caricamento', 'tooltip-rollback' => '"Rollback" annulla le modifiche a questa pagina dell\'ultimo contributore con un solo clic.', 'tooltip-undo' => '"Annulla" permette di annullare questa modifica e apre il modulo di modifica in modalità di anteprima. Permette di inserire una motivazione nell\'oggetto della modifica.', +'tooltip-preferences-save' => 'Salva le preferenze', +'tooltip-summary' => 'Inserire una breve sintesi', # Stylesheets 'common.css' => '/* Gli stili CSS inseriti qui si applicano a tutte le skin */', @@ -2732,14 +2805,17 @@ $1', 'imagemaxsize' => "Dimensione massima delle immagini:
    ''(per le pagine di descrizione del file)''", 'thumbsize' => 'Grandezza delle miniature:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|pagina|pagine}}', -'file-info' => '(dimensione del file: $1, tipo MIME: $2)', -'file-info-size' => '($1 × $2 pixel, dimensione del file: $3, tipo MIME: $4)', +'file-info' => 'dimensione del file: $1, tipo MIME: $2', +'file-info-size' => '$1 × $2 pixel, dimensione del file: $3, tipo MIME: $4', 'file-nohires' => 'Non sono disponibili versioni a risoluzione più elevata.', -'svg-long-desc' => '(file in formato SVG, dimensioni nominali $1 × $2 pixel, dimensione del file: $3)', +'svg-long-desc' => 'file in formato SVG, dimensioni nominali $1 × $2 pixel, dimensione del file: $3', 'show-big-image' => 'Versione ad alta risoluzione', 'show-big-image-thumb' => 'Dimensioni di questa anteprima: $1 × $2 pixel', 'file-info-gif-looped' => 'ciclico', 'file-info-gif-frames' => '$1 {{PLURAL:$1|frame|frame}}', +'file-info-png-looped' => 'ciclico', +'file-info-png-repeat' => 'ripetuto $1 {{PLURAL:$1|volta|volte}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|frame|frame}}', # Special:NewFiles 'newimages' => 'Galleria dei nuovi file', @@ -2826,7 +2902,7 @@ I collegamenti successivi, sulla stessa riga, sono considerati come eccezioni (o 'exif-spectralsensitivity' => 'Sensibilità spettrale', 'exif-isospeedratings' => 'Sensibilità ISO', 'exif-oecf' => 'Fattore di conversione optoelettronica', -'exif-shutterspeedvalue' => 'Tempo di esposizione', +'exif-shutterspeedvalue' => "Velocità dell'otturatore APEX", 'exif-aperturevalue' => 'Apertura APEX', 'exif-brightnessvalue' => 'Luminosità APEX', 'exif-exposurebiasvalue' => 'Correzione esposizione', @@ -2892,6 +2968,7 @@ I collegamenti successivi, sulla stessa riga, sono considerati come eccezioni (o 'exif-gpsareainformation' => 'Nome della zona GPS', 'exif-gpsdatestamp' => 'Data GPS', 'exif-gpsdifferential' => 'Correzione differenziale GPS', +'exif-objectname' => 'Titolo breve', # EXIF attributes 'exif-compression-1' => 'Nessuno', @@ -2982,6 +3059,8 @@ I collegamenti successivi, sulla stessa riga, sono considerati come eccezioni (o 'exif-sensingmethod-7' => 'Sensore trilineare', 'exif-sensingmethod-8' => 'Sensore lineare colore sequenziale', +'exif-filesource-3' => 'Fotocamera digitale', + 'exif-scenetype-1' => 'Fotografia diretta', 'exif-customrendered-0' => 'Processo normale', @@ -3058,28 +3137,28 @@ I collegamenti successivi, sulla stessa riga, sono considerati come eccezioni (o 'limitall' => 'tutti', # E-mail address confirmation -'confirmemail' => 'Conferma indirizzo e-mail', -'confirmemail_noemail' => 'Non è stato indicato un indirizzo e-mail valido nelle proprie [[Special:Preferences|preferenze]].', -'confirmemail_text' => "{{SITENAME}} richiede la verifica dell'indirizzo e-mail prima di poter usare le relative funzioni. Premere il pulsante qui sotto per inviare una richiesta di conferma al proprio indirizzo; nel messaggio è presente un collegamento che contiene un codice. Visitare il collegamento con il proprio browser per confermare che l'indirizzo e-mail è valido.", -'confirmemail_pending' => "Il codice di conferma è già stato spedito via posta elettronica; se l'account è stato +'confirmemail' => 'Conferma indirizzo e-mail', +'confirmemail_noemail' => 'Non è stato indicato un indirizzo e-mail valido nelle proprie [[Special:Preferences|preferenze]].', +'confirmemail_text' => "{{SITENAME}} richiede la verifica dell'indirizzo e-mail prima di poter usare le relative funzioni. Premere il pulsante qui sotto per inviare una richiesta di conferma al proprio indirizzo; nel messaggio è presente un collegamento che contiene un codice. Visitare il collegamento con il proprio browser per confermare che l'indirizzo e-mail è valido.", +'confirmemail_pending' => "Il codice di conferma è già stato spedito via posta elettronica; se l'account è stato creato di recente, si prega di attendere l'arrivo del codice per qualche minuto prima di tentare di richiederne uno nuovo.", -'confirmemail_send' => 'Invia un codice di conferma via e-mail.', -'confirmemail_sent' => 'Messaggio e-mail di conferma inviato.', -'confirmemail_oncreate' => "Un codice di conferma è stato spedito all'indirizzo +'confirmemail_send' => 'Invia un codice di conferma via e-mail.', +'confirmemail_sent' => 'Messaggio e-mail di conferma inviato.', +'confirmemail_oncreate' => "Un codice di conferma è stato spedito all'indirizzo di posta elettronica indicato. Il codice non è necessario per accedere al sito, ma è necessario fornirlo per poter abilitare tutte le funzioni del sito che fanno uso della posta elettronica.", -'confirmemail_sendfailed' => '{{SITENAME}} non può inviare il messaggio e-mail di conferma. Verificare che il proprio indirizzo e-mail non contenga caratteri non validi. +'confirmemail_sendfailed' => '{{SITENAME}} non può inviare il messaggio e-mail di conferma. Verificare che il proprio indirizzo e-mail non contenga caratteri non validi. Messaggio di errore del mailer: $1', -'confirmemail_invalid' => 'Codice di conferma non valido. Il codice potrebbe essere scaduto.', -'confirmemail_needlogin' => 'È necessario $1 per confermare il proprio indirizzo e-mail.', -'confirmemail_success' => "L'indirizzo e-mail è confermato. Ora è possibile [[Special:UserLogin|eseguire l'accesso]] e fare pieno uso del sito.", -'confirmemail_loggedin' => "L'indirizzo e-mail è stato confermato.", -'confirmemail_error' => 'Errore nel salvataggio della conferma.', -'confirmemail_subject' => "{{SITENAME}}: richiesta di conferma dell'indirizzo", -'confirmemail_body' => 'Qualcuno, probabilmente tu stesso dall\'indirizzo IP $1, ha registrato l\'account "$2" su {{SITENAME}} indicando questo indirizzo e-mail. +'confirmemail_invalid' => 'Codice di conferma non valido. Il codice potrebbe essere scaduto.', +'confirmemail_needlogin' => 'È necessario $1 per confermare il proprio indirizzo e-mail.', +'confirmemail_success' => "L'indirizzo e-mail è confermato. Ora è possibile [[Special:UserLogin|eseguire l'accesso]] e fare pieno uso del sito.", +'confirmemail_loggedin' => "L'indirizzo e-mail è stato confermato.", +'confirmemail_error' => 'Errore nel salvataggio della conferma.', +'confirmemail_subject' => "{{SITENAME}}: richiesta di conferma dell'indirizzo", +'confirmemail_body' => 'Qualcuno, probabilmente tu stesso dall\'indirizzo IP $1, ha registrato l\'account "$2" su {{SITENAME}} indicando questo indirizzo e-mail. Per confermare che l\'account ti appartiene veramente e attivare le funzioni relative all\'invio di e-mail su {{SITENAME}}, apri il collegamento seguente con il tuo browser: @@ -3090,8 +3169,36 @@ Se *non* hai registrato tu l\'account, segui questo collegamento per annullare l $5 Questo codice di conferma scadrà automaticamente alle $4.', -'confirmemail_invalidated' => 'Richiesta di conferma indirizzo e-mail annullata', -'invalidateemail' => 'Annulla richiesta di conferma e-mail', +'confirmemail_body_changed' => 'Qualcuno, probabilmente tu stesso dall\'indirizzo IP $1, +ha modificato l\'indirizzo e-mail dell\'account "$2" su {{SITENAME}} indicando questo indirizzo e-mail. + +Per confermare che l\'account ti appartiene veramente e riattivare le funzioni relative all\'invio +di e-mail su {{SITENAME}}, apri il collegamento seguente con il tuo browser: + +$3 + +Se l\'account *non* ti appartiene, segui questo collegamento +per annullare la conferma dell\'indirizzo e-mail: + +$5 + +Questo codice di conferma scadrà automaticamente alle $4.', +'confirmemail_body_set' => 'Qualcuno, probabilmente tu stesso dall\'indirizzo IP $1, +ha impostato l\'indirizzo e-mail dell\'account "$2" su {{SITENAME}} indicando questo indirizzo e-mail. + +Per confermare che l\'account ti appartiene veramente e riattivare le funzioni relative all\'invio +di e-mail su {{SITENAME}}, apri il collegamento seguente con il tuo browser: + +$3 + +Se l\'account *non* ti appartiene, segui questo collegamento +per annullare la conferma dell\'indirizzo e-mail: + +$5 + +Questo codice di conferma scadrà automaticamente alle $4.', +'confirmemail_invalidated' => 'Richiesta di conferma indirizzo e-mail annullata', +'invalidateemail' => 'Annulla richiesta di conferma e-mail', # Scary transclusion 'scarytranscludedisabled' => "[L'inclusione di pagine tra siti wiki non è attiva]", @@ -3130,6 +3237,7 @@ Per favore, conferma che desideri veramente ricreare questa pagina.", 'table_pager_first' => 'Prima pagina', 'table_pager_last' => 'Ultima pagina', 'table_pager_limit' => 'Mostra $1 file per pagina', +'table_pager_limit_label' => 'Elementi per pagina:', 'table_pager_limit_submit' => 'Vai', 'table_pager_empty' => 'Nessun risultato', @@ -3194,6 +3302,7 @@ Si noti che è anche possibile [[Special:Watchlist/edit|modificare la lista con 'version-specialpages' => 'Pagine speciali', 'version-parserhooks' => 'Hook del parser', 'version-variables' => 'Variabili', +'version-skins' => 'Skin', 'version-other' => 'Altro', 'version-mediahandlers' => 'Gestori di contenuti multimediali', 'version-hooks' => 'Hook', @@ -3205,6 +3314,13 @@ Si noti che è anche possibile [[Special:Watchlist/edit|modificare la lista con 'version-hook-subscribedby' => 'Sottoscrizioni', 'version-version' => '(Versione $1)', 'version-license' => 'Licenza', +'version-poweredby-credits' => "Questo wiki è alimentato da '''[http://www.mediawiki.org/ MediaWiki ]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'altri', +'version-license-info' => 'MediaWiki è software libero; è lecito redistribuirlo e/o modificarlo secondo i termini della GNU General Public License, come pubblicata dalla Free Software Foundation; o la versione 2 della Licenza o (a propria scelta) qualunque versione successiva. + +MediaWiki è distribuito nella speranza che sia utile, ma SENZA ALCUNA GARANZIA; senza neppure la garanzia implicita di NEGOZIABILITÀ o di APPLICABILITÀ PER UN PARTICOLARE SCOPO. Si veda la GNU General Public License per maggiori dettagli. + +Questo programma deve essere distribuito assieme ad [{{SERVER}}{{SCRIPTPATH}}/COPYING una copia di una copia della GNU General Public License]; in caso contrario, in caso contrario, se ne può ottenere una scrivendo alla Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA oppure [http://www.softwarelibero.it/gnudoc/gpl.it.txt leggerla in rete].', 'version-software' => 'Software installato', 'version-software-product' => 'Prodotto', 'version-software-version' => 'Versione', @@ -3274,6 +3390,15 @@ Inserire il nome del file senza il prefisso \"{{ns:file}}:\"", 'tags-edit' => 'modifica', 'tags-hitcount' => '$1 {{PLURAL:$1|modifica|modifiche}}', +# Special:ComparePages +'comparepages' => 'Confronta le pagine', +'compare-selector' => 'Confronta le revisioni di una pagina', +'compare-page1' => 'Pagina 1', +'compare-page2' => 'Pagina 2', +'compare-rev1' => 'Revisione 1', +'compare-rev2' => 'Revisione 2', +'compare-submit' => 'Confronta', + # Database error messages 'dberr-header' => 'Questa wiki ha un problema', 'dberr-problems' => 'Questo sito sta avendo dei problemi tecnici.', @@ -3290,8 +3415,13 @@ Inserire il nome del file senza il prefisso \"{{ns:file}}:\"", 'htmlform-float-invalid' => 'Il valore specificato non è un numero.', 'htmlform-int-toolow' => 'Il valore specificato è inferiore al minimo di $1', 'htmlform-int-toohigh' => 'Il valore specificato è superiore al massimo di $1', +'htmlform-required' => 'Questo valore è necessario', 'htmlform-submit' => 'Invia', 'htmlform-reset' => 'Annulla modifiche', 'htmlform-selectorother-other' => 'Altro', +# SQLite database support +'sqlite-has-fts' => '$1 con la possibilità di ricerca completa nel testo', +'sqlite-no-fts' => '$1 senza la possibilità di ricerca completa nel testo', + ); diff --git a/languages/messages/MessagesJa.php b/languages/messages/MessagesJa.php index 23b81006..07fad450 100644 --- a/languages/messages/MessagesJa.php +++ b/languages/messages/MessagesJa.php @@ -21,8 +21,10 @@ * @author Hisagi * @author Hosiryuhosi * @author Iwai.masaharu + * @author Joe Elkins * @author JtFuruhata * @author Kahusi + * @author Kanon und wikipedia * @author Kkkdc * @author Klutzy * @author Koba-chan @@ -38,6 +40,7 @@ * @author W.CC * @author Web comic * @author Whym + * @author Yanajin66 * @author לערי ריינהארט * @author 欅 * @author 青子守歌 @@ -64,25 +67,33 @@ $dateFormats = array( $namespaceNames = array( NS_MEDIA => 'メディア', NS_SPECIAL => '特別', - NS_TALK => 'ノート', + NS_TALK => 'トーク', NS_USER => '利用者', - NS_USER_TALK => '利用者‐会話', - NS_PROJECT_TALK => '$1‐ノート', + NS_USER_TALK => '利用者・トーク', + NS_PROJECT_TALK => '$1・トーク', NS_FILE => 'ファイル', - NS_FILE_TALK => 'ファイル‐ノート', + NS_FILE_TALK => 'ファイル・トーク', NS_MEDIAWIKI => 'MediaWiki', - NS_MEDIAWIKI_TALK => 'MediaWiki‐ノート', - NS_TEMPLATE => 'Template', - NS_TEMPLATE_TALK => 'Template‐ノート', - NS_HELP => 'Help', - NS_HELP_TALK => 'Help‐ノート', - NS_CATEGORY => 'Category', - NS_CATEGORY_TALK => 'Category‐ノート', + NS_MEDIAWIKI_TALK => 'MediaWiki・トーク', + NS_TEMPLATE => 'テンプレート', + NS_TEMPLATE_TALK => 'テンプレート・トーク', + NS_HELP => 'ヘルプ', + NS_HELP_TALK => 'ヘルプ・トーク', + NS_CATEGORY => 'カテゴリ', + NS_CATEGORY_TALK => 'カテゴリ・トーク', ); $namespaceAliases = array( - '画像' => NS_FILE, - '画像‐ノート' => NS_FILE_TALK, + 'ノート' => NS_TALK, + '利用者‐会話' => NS_USER_TALK, + '$1‐ノート' => NS_PROJECT_TALK, + '画像' => NS_FILE, + '画像‐ノート' => NS_FILE_TALK, + 'ファイル‐ノート' => NS_FILE_TALK, + 'MediaWiki‐ノート' => NS_MEDIAWIKI_TALK, + 'Template‐ノート' => NS_TEMPLATE_TALK, + 'Help‐ノート' => NS_HELP_TALK, + 'Category‐ノート' => NS_CATEGORY_TALK ); $specialPageAliases = array( @@ -130,20 +141,21 @@ $specialPageAliases = array( 'Allpages' => array( 'ページ一覧', '全ページ' ), 'Prefixindex' => array( '前方一致ページ一覧', '始点指定ページ一覧' ), 'Ipblocklist' => array( 'ブロック一覧', 'ブロックの一覧' ), + 'Unblock' => array( 'ブロック解除' ), 'Specialpages' => array( '特別ページ一覧' ), 'Contributions' => array( '投稿記録' ), 'Emailuser' => array( 'メール送信', 'ウィキメール' ), 'Confirmemail' => array( 'メールアドレスの確認' ), 'Whatlinkshere' => array( 'リンク元' ), 'Recentchangeslinked' => array( '関連ページの更新状況', 'リンク先の更新状況' ), - 'Movepage' => array( '移動' ), + 'Movepage' => array( '移動', 'ページの移動' ), 'Blockme' => array( '自己ブロック' ), 'Booksources' => array( '文献資料' ), 'Categories' => array( 'カテゴリ', 'カテゴリ一覧' ), 'Export' => array( 'データ書き出し', 'データー書き出し', 'エクスポート' ), 'Version' => array( 'バージョン情報', 'バージョン' ), 'Allmessages' => array( 'メッセージ一覧', 'システムメッセージの一覧', '表示メッセージの一覧' ), - 'Log' => array( 'ログ', '記録' ), + 'Log' => array( '記録', 'ログ' ), 'Blockip' => array( '投稿ブロック', 'ブロック' ), 'Undelete' => array( '復帰' ), 'Import' => array( 'データ取り込み', 'データー取り込み', 'インポート' ), @@ -154,11 +166,11 @@ $specialPageAliases = array( 'FileDuplicateSearch' => array( '重複ファイル検索' ), 'Unwatchedpages' => array( 'ウォッチされていないページ' ), 'Listredirects' => array( 'リダイレクト一覧', 'リダイレクトの一覧', 'リダイレクトリスト' ), - 'Revisiondelete' => array( '特定版削除' ), + 'Revisiondelete' => array( '版指定削除', '特定版削除' ), 'Unusedtemplates' => array( '使われていないテンプレート', '未使用テンプレート' ), - 'Randomredirect' => array( 'おまかせリダイレクト' ), + 'Randomredirect' => array( 'おまかせ転送', 'おまかせリダイレクト' ), 'Mypage' => array( '利用者ページ', 'マイページ', 'マイ・ページ' ), - 'Mytalk' => array( '会話ページ', 'マイトーク', 'マイ・トーク' ), + 'Mytalk' => array( 'トークページ', '会話ページ', 'マイトーク', 'マイ・トーク' ), 'Mycontributions' => array( '自分の投稿記録' ), 'Listadmins' => array( '管理者一覧' ), 'Listbots' => array( 'ボット一覧', 'Bot一覧' ), @@ -174,6 +186,8 @@ $specialPageAliases = array( 'DeletedContributions' => array( '削除された投稿記録', '削除された投稿履歴', '削除歴' ), 'Tags' => array( 'タグ一覧' ), 'Activeusers' => array( '活動中の利用者', '活動中の利用者一覧' ), + 'ComparePages' => array( 'ページの比較' ), + 'Badtitle' => array( '不正なページ名' ), ); $magicWords = array( @@ -182,28 +196,30 @@ $magicWords = array( 'nogallery' => array( '0', '__ギャラリー非表示__', '__ギャラリー非表示__', '__NOGALLERY__' ), 'forcetoc' => array( '0', '__目次強制__', '__目次強制__', '__FORCETOC__' ), 'toc' => array( '0', '__目次__', '__目次__', '__TOC__' ), - 'noeditsection' => array( '0', '__セクション編集非表示__', '__セクション編集非表示__', '__NOEDITSECTION__' ), + 'noeditsection' => array( '0', '__節編集非表示__', '__セクション編集非表示__', '__セクション編集非表示__', '__NOEDITSECTION__' ), 'noheader' => array( '0', '__見出し非表示__', '__見出し非表示__', '__NOHEADER__' ), - 'currentmonth' => array( '1', '協定月', 'CURRENTMONTH', 'CURRENTMONTH2' ), - 'currentmonth1' => array( '1', '協定月1', '協定月1', 'CURRENTMONTH1' ), - 'currentmonthname' => array( '1', '協定月名', 'CURRENTMONTHNAME' ), - 'currentmonthabbrev' => array( '1', '省略協定月', '協定月省略', '協定月省略形', 'CURRENTMONTHABBREV' ), - 'currentday' => array( '1', '協定日', 'CURRENTDAY' ), - 'currentday2' => array( '1', '協定日2', '協定日2', 'CURRENTDAY2' ), - 'currentdayname' => array( '1', '協定曜日', 'CURRENTDAYNAME' ), - 'currentyear' => array( '1', '協定年', 'CURRENTYEAR' ), - 'currenttime' => array( '1', '協定時間', '協定時刻', 'CURRENTTIME' ), - 'currenthour' => array( '1', '協定時', 'CURRENTHOUR' ), - 'localmonth' => array( '1', '現地月', 'LOCALMONTH', 'LOCALMONTH2' ), - 'localmonth1' => array( '1', '現地月1', '現地月1', 'LOCALMONTH1' ), - 'localmonthname' => array( '1', '現地月名', 'LOCALMONTHNAME' ), - 'localmonthabbrev' => array( '1', '省略現地月', 'LOCALMONTHABBREV' ), - 'localday' => array( '1', '現地日', 'ローカルデイ', 'LOCALDAY' ), - 'localday2' => array( '1', '現地日2', '現地日2', 'LOCALDAY2' ), - 'localdayname' => array( '1', '現地曜日', 'ローカルデイネーム', 'LOCALDAYNAME' ), - 'localyear' => array( '1', '現地年', 'ローカルイヤー', 'LOCALYEAR' ), - 'localtime' => array( '1', '現地時間', 'ローカルタイム', 'LOCALTIME' ), - 'localhour' => array( '1', '現地時', 'LOCALHOUR' ), + 'currentmonth' => array( '1', '現在の月', '協定月', 'CURRENTMONTH', 'CURRENTMONTH2' ), + 'currentmonth1' => array( '1', '現在の月1', '協定月1', '協定月1', 'CURRENTMONTH1' ), + 'currentmonthname' => array( '1', '現在の月名', '協定月名', 'CURRENTMONTHNAME' ), + 'currentmonthnamegen' => array( '1', '現在の月属格', 'CURRENTMONTHNAMEGEN' ), + 'currentmonthabbrev' => array( '1', '現在の月省略形', '省略協定月', '協定月省略', '協定月省略形', 'CURRENTMONTHABBREV' ), + 'currentday' => array( '1', '現在の日', '協定日', 'CURRENTDAY' ), + 'currentday2' => array( '1', '現在の日2', '協定日2', '協定日2', 'CURRENTDAY2' ), + 'currentdayname' => array( '1', '現在の曜日名', '協定曜日', 'CURRENTDAYNAME' ), + 'currentyear' => array( '1', '現在の年', '協定年', 'CURRENTYEAR' ), + 'currenttime' => array( '1', '現在の時刻', '協定時間', '協定時刻', 'CURRENTTIME' ), + 'currenthour' => array( '1', '現在の時', '協定時', 'CURRENTHOUR' ), + 'localmonth' => array( '1', '地方時の月', '現地月', 'LOCALMONTH', 'LOCALMONTH2' ), + 'localmonth1' => array( '1', '地方時の月1', '現地月1', '現地月1', 'LOCALMONTH1' ), + 'localmonthname' => array( '1', '地方時の月名1', '現地月名', 'LOCALMONTHNAME' ), + 'localmonthnamegen' => array( '1', '地方時の月属格', 'LOCALMONTHNAMEGEN' ), + 'localmonthabbrev' => array( '1', '地方時の月省略形', '省略現地月', 'LOCALMONTHABBREV' ), + 'localday' => array( '1', '地方時の日', '現地日', 'ローカルデイ', 'LOCALDAY' ), + 'localday2' => array( '1', '地方時の日2', '現地日2', '現地日2', 'LOCALDAY2' ), + 'localdayname' => array( '1', '地方時の曜日名', '現地曜日', 'ローカルデイネーム', 'LOCALDAYNAME' ), + 'localyear' => array( '1', '地方時の年', '現地年', 'ローカルイヤー', 'LOCALYEAR' ), + 'localtime' => array( '1', '地方時の時刻', '現地時間', 'ローカルタイム', 'LOCALTIME' ), + 'localhour' => array( '1', '地方時の時', '現地時', 'LOCALHOUR' ), 'numberofpages' => array( '1', 'ページ数', 'NUMBEROFPAGES' ), 'numberofarticles' => array( '1', '記事数', 'NUMBEROFARTICLES' ), 'numberoffiles' => array( '1', 'ファイル数', 'NUMBEROFFILES' ), @@ -215,21 +231,24 @@ $magicWords = array( 'pagenamee' => array( '1', 'ページ名E', 'ページ名E', 'PAGENAMEE' ), 'namespace' => array( '1', '名前空間', 'NAMESPACE' ), 'namespacee' => array( '1', '名前空間E', '名前空間E', 'NAMESPACEE' ), - 'talkspace' => array( '1', 'ノート空間', '会話空間', 'トークスペース', 'TALKSPACE' ), - 'talkspacee' => array( '1', 'ノート空間E', '会話空間E', 'ノート空間E', '会話空間E', 'トークスペースE', 'トークスペースE', 'TALKSPACEE' ), - 'subjectspace' => array( '1', '標準空間', '記事空間', 'SUBJECTSPACE', 'ARTICLESPACE' ), - 'subjectspacee' => array( '1', '標準空間E', '標準空間E', '記事空間E', '記事空間E', 'SUBJECTSPACEE', 'ARTICLESPACEE' ), - 'fullpagename' => array( '1', 'フルページ名', '完全なページ名', '完全な記事名', '完全ページ名', '完全記事名', 'FULLPAGENAME' ), - 'fullpagenamee' => array( '1', 'フルページ名E', '完全なページ名E', 'フルページ名E', '完全なページ名E', 'FULLPAGENAMEE' ), + 'talkspace' => array( '1', 'トーク空間', 'ノート空間', '会話空間', 'トークスペース', 'TALKSPACE' ), + 'talkspacee' => array( '1', 'トーク空間E', 'トーク空間E', 'ノート空間E', '会話空間E', 'ノート空間E', '会話空間E', 'トークスペースE', 'トークスペースE', 'TALKSPACEE' ), + 'subjectspace' => array( '1', '主空間', '標準空間', '記事空間', 'SUBJECTSPACE', 'ARTICLESPACE' ), + 'subjectspacee' => array( '1', '主空間E', '標準空間E', '標準空間E', '記事空間E', '記事空間E', 'SUBJECTSPACEE', 'ARTICLESPACEE' ), + 'fullpagename' => array( '1', '完全なページ名', 'フルページ名', '完全な記事名', '完全記事名', 'FULLPAGENAME' ), + 'fullpagenamee' => array( '1', '完全なページ名E', 'フルページ名E', 'フルページ名E', '完全なページ名E', 'FULLPAGENAMEE' ), 'subpagename' => array( '1', 'サブページ名', 'SUBPAGENAME' ), 'subpagenamee' => array( '1', 'サブページ名E', 'サブページ名E', 'SUBPAGENAMEE' ), 'basepagename' => array( '1', '親ページ名', 'BASEPAGENAME' ), 'basepagenamee' => array( '1', '親ページ名E', '親ページ名E', 'BASEPAGENAMEE' ), - 'talkpagename' => array( '1', '会話ページ名', 'トークページ名', 'TALKPAGENAME' ), - 'talkpagenamee' => array( '1', '会話ページ名E', 'トークページ名E', '会話ページ名E', 'トークページ名E', 'TALKPAGENAMEE' ), + 'talkpagename' => array( '1', 'トークページ名', '会話ページ名', 'TALKPAGENAME' ), + 'talkpagenamee' => array( '1', 'トークページ名E', '会話ページ名E', '会話ページ名E', 'トークページ名E', 'TALKPAGENAMEE' ), 'subjectpagename' => array( '1', '主ページ名', '記事ページ名', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ), 'subjectpagenamee' => array( '1', '主ページ名E', '記事ページ名E', '主ページ名E', '記事ページ名E', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ), + 'msg' => array( '0', 'メッセージ:', 'MSG:' ), 'subst' => array( '0', '展開:', '展開:', 'SUBST:' ), + 'safesubst' => array( '0', '安全展開:', 'SAFESUBST:' ), + 'msgnw' => array( '0', 'ウィキ無効メッセージ:', 'MSGNW:' ), 'img_thumbnail' => array( '1', 'サムネイル', 'thumbnail', 'thumb' ), 'img_manualthumb' => array( '1', '代替画像=$1', 'サムネイル=$1', 'thumbnail=$1', 'thumb=$1' ), 'img_right' => array( '1', '右', 'right' ), @@ -240,46 +259,70 @@ $magicWords = array( 'img_framed' => array( '1', 'フレーム', 'framed', 'enframed', 'frame' ), 'img_frameless' => array( '1', 'フレームなし', 'frameless' ), 'img_page' => array( '1', 'ページ=$1', 'ページ $1', 'page=$1', 'page $1' ), - 'img_border' => array( '1', 'ボーダー', 'border' ), - 'img_baseline' => array( '1', 'ベースライン', 'baseline' ), + 'img_upright' => array( '1', '右上', 'upright', 'upright=$1', 'upright $1' ), + 'img_border' => array( '1', '境界', 'ボーダー', 'border' ), + 'img_baseline' => array( '1', '下線', 'ベースライン', 'baseline' ), 'img_sub' => array( '1', '下付き', 'sub' ), 'img_super' => array( '1', '上付き', 'super', 'sup' ), + 'img_top' => array( '1', '上端', 'top' ), + 'img_text_top' => array( '1', '文上端', 'text-top' ), + 'img_middle' => array( '1', '中心', 'middle' ), + 'img_bottom' => array( '1', '下端', 'bottom' ), + 'img_text_bottom' => array( '1', '文下端', 'text-bottom' ), 'img_link' => array( '1', 'リンク=$1', 'link=$1' ), 'img_alt' => array( '1', '代替文=$1', 'alt=$1' ), 'int' => array( '0', 'インターフェース:', 'インタ:', 'インターフェース:', 'インタ:', 'INT:' ), 'sitename' => array( '1', 'サイト名', 'サイトネーム', 'SITENAME' ), 'ns' => array( '0', '名前空間:', '名前空間:', '名空:', '名空:', 'NS:' ), + 'nse' => array( '0', '名前空間E:', 'NSE:' ), 'localurl' => array( '0', 'ローカルURL:', 'ローカルURL:', 'LOCALURL:' ), 'localurle' => array( '0', 'ローカルURLE:', 'ローカルURLE:', 'LOCALURLE:' ), + 'articlepath' => array( '0', '記事パス', 'ARTICLEPATH' ), 'server' => array( '0', 'サーバー', 'サーバ', 'SERVER' ), 'servername' => array( '0', 'サーバー名', 'サーバーネーム', 'サーバ名', 'サーバネーム', 'SERVERNAME' ), 'scriptpath' => array( '0', 'スクリプトパス', 'SCRIPTPATH' ), 'stylepath' => array( '0', 'スタイルパス', 'STYLEPATH' ), + 'grammar' => array( '0', '文法:', 'GRAMMAR:' ), 'gender' => array( '0', '性別:', '性別:', 'GENDER:' ), - 'notitleconvert' => array( '0', '__タイトルコンバート拒否__', '__タイトルコンバート拒否__', '__タイトル非表示__', '__NOTITLECONVERT__', '__NOTC__' ), - 'nocontentconvert' => array( '0', '__内容変換抑制__', '__内容変換抑制__', '__NOCONTENTCONVERT__', '__NOCC__' ), - 'currentweek' => array( '1', '協定週', 'CURRENTWEEK' ), - 'localweek' => array( '1', '現地週', 'ローカルウィーク', 'LOCALWEEK' ), - 'revisionid' => array( '1', 'リビジョンID', '差分ID', 'リビジョンID', '差分ID', 'REVISIONID' ), - 'revisionday' => array( '1', 'リビジョン日', '差分日', 'REVISIONDAY' ), - 'revisionday2' => array( '1', 'リビジョン日2', '差分日2', 'リビジョン日2', '差分日2', 'REVISIONDAY2' ), - 'revisionmonth' => array( '1', 'リビジョン月', '差分月', 'REVISIONMONTH' ), - 'revisionyear' => array( '1', 'リビジョン年', '差分年', 'REVISIONYEAR' ), - 'revisiontimestamp' => array( '1', 'リビジョンタイムスタンプ', 'REVISIONTIMESTAMP' ), - 'revisionuser' => array( '1', 'リビジョンユーザー', 'リビジョンユーザ', 'リビジョン利用者', '差分利用者', 'REVISIONUSER' ), + 'notitleconvert' => array( '0', '__タイトル変換無効__', '__タイトルコンバート拒否__', '__タイトルコンバート拒否__', '__タイトル非表示__', '__NOTITLECONVERT__', '__NOTC__' ), + 'nocontentconvert' => array( '0', '__内容変換無効__', '__内容変換抑制__', '__内容変換抑制__', '__NOCONTENTCONVERT__', '__NOCC__' ), + 'currentweek' => array( '1', '現在の週', 'CURRENTWEEK' ), + 'currentdow' => array( '1', '現在の曜日番号', 'CURRENTDOW' ), + 'localweek' => array( '1', '地方時の週', '現地週', 'ローカルウィーク', 'LOCALWEEK' ), + 'localdow' => array( '1', '地方時の曜日番号', 'LOCALDOW' ), + 'revisionid' => array( '1', '版のID', 'リビジョンID', '差分ID', 'リビジョンID', '差分ID', 'REVISIONID' ), + 'revisionday' => array( '1', '版の日', 'リビジョン日', '差分日', 'REVISIONDAY' ), + 'revisionday2' => array( '1', '版の日2', 'リビジョン日2', '差分日2', 'リビジョン日2', '差分日2', 'REVISIONDAY2' ), + 'revisionmonth' => array( '1', '版の月', 'リビジョン月', '差分月', 'REVISIONMONTH' ), + 'revisionmonth1' => array( '1', '版の月1', 'REVISIONMONTH1' ), + 'revisionyear' => array( '1', '版の年', 'リビジョン年', '差分年', 'REVISIONYEAR' ), + 'revisiontimestamp' => array( '1', '版のタイムスタンプ', 'リビジョンタイムスタンプ', 'REVISIONTIMESTAMP' ), + 'revisionuser' => array( '1', '版の利用者', 'リビジョンユーザー', 'リビジョンユーザ', 'リビジョン利用者', '差分利用者', 'REVISIONUSER' ), 'plural' => array( '0', '複数:', '複数:', 'PLURAL:' ), 'fullurl' => array( '0', '完全なURL:', 'フルURL:', '完全なURL:', 'フルURL:', 'FULLURL:' ), 'fullurle' => array( '0', '完全なURLE:', 'フルURLE:', '完全なURLE:', 'フルURLE:', 'FULLURLE:' ), - 'newsectionlink' => array( '1', '__新しいセクションリンク__', '__新セクションリンク__', '__新しいセクションリンク__', '__新セクションリンク__', '__NEWSECTIONLINK__' ), - 'nonewsectionlink' => array( '1', '__新しいセクションリンク非表示__', '__新しいセクションリンク非表示__', '__新セクションリンク非表示__', '__新セクションリンク非表示__', '__NONEWSECTIONLINK__' ), - 'currentversion' => array( '1', 'ウィキバージョン', 'MediaWikiバージョン', 'メディアウィキバージョン', 'CURRENTVERSION' ), + 'lcfirst' => array( '0', '先頭小文字:', 'LCFIRST:' ), + 'ucfirst' => array( '0', '先頭大文字:', 'UCFIRST:' ), + 'lc' => array( '0', '小文字:', 'LC:' ), + 'uc' => array( '0', '大文字:', 'UC:' ), + 'raw' => array( '0', '生:', 'RAW:' ), + 'displaytitle' => array( '1', '表示タイトル:', 'DISPLAYTITLE' ), + 'rawsuffix' => array( '1', '生', 'R' ), + 'newsectionlink' => array( '1', '__新しい節リンク__', '__新しいセクションリンク__', '__新セクションリンク__', '__新しいセクションリンク__', '__新セクションリンク__', '__NEWSECTIONLINK__' ), + 'nonewsectionlink' => array( '1', '__新しい節リンク非表示__', '__新しいセクションリンク非表示__', '__新しいセクションリンク非表示__', '__新セクションリンク非表示__', '__新セクションリンク非表示__', '__NONEWSECTIONLINK__' ), + 'currentversion' => array( '1', '現在のバージョン', 'ウィキバージョン', 'MediaWikiバージョン', 'メディアウィキバージョン', 'CURRENTVERSION' ), 'urlencode' => array( '0', 'URLエンコード:', 'URLエンコード:', 'URLENCODE:' ), - 'currenttimestamp' => array( '1', '協定タイムスタンプ', 'CURRENTTIMESTAMP' ), - 'localtimestamp' => array( '1', '現地タイムスタンプ', 'ローカルタイムスタンプ', 'LOCALTIMESTAMP' ), + 'anchorencode' => array( '0', 'アンカー用エンコード', 'ANCHORENCODE' ), + 'currenttimestamp' => array( '1', '現在のタイムスタンプ', '協定タイムスタンプ', 'CURRENTTIMESTAMP' ), + 'localtimestamp' => array( '1', '地方時のタイムスタンプ', '現地タイムスタンプ', 'ローカルタイムスタンプ', 'LOCALTIMESTAMP' ), + 'directionmark' => array( '1', '方向印', 'DIRECTIONMARK', 'DIRMARK' ), 'language' => array( '0', '#言語:', '#言語:', '#LANGUAGE:' ), 'contentlanguage' => array( '1', '内容言語', '記事言語', 'プロジェクト言語', 'CONTENTLANGUAGE', 'CONTENTLANG' ), 'pagesinnamespace' => array( '1', '名前空間内ページ数', 'PAGESINNAMESPACE:', 'PAGESINNS:' ), 'numberofadmins' => array( '1', '管理者数', 'NUMBEROFADMINS' ), + 'formatnum' => array( '0', '数整形', 'FORMATNUM' ), + 'padleft' => array( '0', '補充左', 'PADLEFT' ), + 'padright' => array( '0', '補充右', 'PADRIGHT' ), 'special' => array( '0', '特別', 'special' ), 'defaultsort' => array( '1', 'デフォルトソート:', 'デフォルトソート:', 'デフォルトソートキー:', 'デフォルトカテゴリソート:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ), 'filepath' => array( '0', 'ファイルパス:', 'ファイルパス:', 'FILEPATH:' ), @@ -290,9 +333,12 @@ $magicWords = array( 'index' => array( '1', '__インデックス__', '__インデックス__', '__INDEX__' ), 'noindex' => array( '1', '__インデックス拒否__', '__インデックス拒否__', '__NOINDEX__' ), 'numberingroup' => array( '1', 'グループ人数', 'グループ所属人数', 'NUMBERINGROUP', 'NUMINGROUP' ), - 'staticredirect' => array( '1', '__二重転送解消無効__', '__二重転送解消無効__', '__二重転送修正無効__', '__二重転送修正無効__', '__STATICREDIRECT__' ), + 'staticredirect' => array( '1', '__静的転送__', '__二重転送解消無効__', '__二重転送解消無効__', '__二重転送修正無効__', '__二重転送修正無効__', '__STATICREDIRECT__' ), 'protectionlevel' => array( '1', '保護レベル', 'PROTECTIONLEVEL' ), 'formatdate' => array( '0', '日付整形', 'formatdate', 'dateformat' ), + 'url_path' => array( '0', 'パス', 'PATH' ), + 'url_wiki' => array( '0', 'ウィキ', 'WIKI' ), + 'url_query' => array( '0', 'クエリー', 'QUERY' ), ); $messages = array( @@ -311,8 +357,7 @@ $messages = array( 'tog-editsection' => '[編集]リンクから節を編集できるようにする', 'tog-editsectiononrightclick' => '節見出しの右クリックで節編集を行えるようにする(JavaScriptが必要)', 'tog-showtoc' => '目次を表示する(4つ以上の見出しがあるページ)', -'tog-rememberpassword' => 'このコンピューターにログイン情報を保存する', -'tog-editwidth' => '編集ボックスをウィンドウの幅いっぱいに表示する', +'tog-rememberpassword' => 'このブラウザにログイン情報を保持する(最大$1{{PLURAL:$1|日}})', 'tog-watchcreations' => '自分が作成したページをウォッチリストに追加する', 'tog-watchdefault' => '自分が編集したページをウォッチリストに追加する', 'tog-watchmoves' => '自分が移動したページをウォッチリストに追加する', @@ -458,31 +503,21 @@ $messages = array( 'faqpage' => 'Project:よくある質問と回答', # Vector skin -'vector-action-addsection' => '話題追加', -'vector-action-delete' => '削除', -'vector-action-move' => '移動', -'vector-action-protect' => '保護', -'vector-action-undelete' => '復帰', -'vector-action-unprotect' => '保護解除', -'vector-namespace-category' => 'カテゴリ', -'vector-namespace-help' => 'ヘルプページ', -'vector-namespace-image' => 'ファイル', -'vector-namespace-main' => 'ページ', -'vector-namespace-media' => 'メディアページ', -'vector-namespace-mediawiki' => 'メッセージ', -'vector-namespace-project' => 'プロジェクトページ', -'vector-namespace-special' => '特別ページ', -'vector-namespace-talk' => '議論', -'vector-namespace-template' => 'テンプレート', -'vector-namespace-user' => '利用者ページ', -'vector-view-create' => '作成', -'vector-view-edit' => '編集', -'vector-view-history' => '履歴表示', -'vector-view-view' => '閲覧', -'vector-view-viewsource' => 'ソース表示', -'actions' => '操作', -'namespaces' => '名前空間', -'variants' => '変種', +'vector-action-addsection' => '話題追加', +'vector-action-delete' => '削除', +'vector-action-move' => '移動', +'vector-action-protect' => '保護', +'vector-action-undelete' => '復帰', +'vector-action-unprotect' => '保護解除', +'vector-simplesearch-preference' => '検索語の提案機能を拡張する(ベクター外装のみ)', +'vector-view-create' => '作成', +'vector-view-edit' => '編集', +'vector-view-history' => '履歴表示', +'vector-view-view' => '閲覧', +'vector-view-viewsource' => 'ソース表示', +'actions' => '操作', +'namespaces' => '名前空間', +'variants' => '変種', 'errorpagetitle' => 'エラー', 'returnto' => '$1に戻る。', @@ -543,6 +578,9 @@ $messages = array( しばらく時間を置いてから、もう一度このページにアクセスしてみてください。 $1', +'pool-timeout' => 'ロック待ちタイムアウト', +'pool-queuefull' => 'プールキューがいっぱいです', +'pool-errorunknown' => '不明なエラー', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}}について', @@ -710,7 +748,8 @@ $2', 'yourname' => '利用者名:', 'yourpassword' => 'パスワード:', 'yourpasswordagain' => 'パスワード再入力:', -'remembermypassword' => 'このコンピューターにログイン情報を保存する', +'remembermypassword' => 'このブラウザーにログイン情報を保存する (最長$1日間)', +'securelogin-stick-https' => 'ログイン後にHTTPS接続を維持', 'yourdomainname' => 'ドメイン:', 'externaldberror' => '外部の認証データベースでエラーが発生したか、または外部アカウント情報の更新が許可されていません。', 'login' => 'ログイン', @@ -727,6 +766,7 @@ $2', 'gotaccount' => '既にアカウントを持っている場合、$1。', 'gotaccountlink' => 'ログインしてください', 'createaccountmail' => 'メールで送信', +'createaccountreason' => '理由:', 'badretype' => '入力したパスワードが一致しません。', 'userexists' => '入力された利用者名はすでに使われています。 ほかの名前を選んでください。', @@ -755,6 +795,7 @@ $2', もう一度やり直してください。', 'passwordtooshort' => 'パスワードは{{PLURAL:$1|$1文字}}以上でなければなりません。', 'password-name-match' => 'パスワードは利用者名と異なる必要があります。', +'password-login-forbidden' => 'このような利用者名とパスワードを使用することは禁止されています。', 'mailmypassword' => '新しいパスワードを電子メールで送る', 'passwordremindertitle' => '{{SITENAME}}の仮パスワード通知', 'passwordremindertext' => '誰か(おそらく自身、IPアドレス$1から)が{{SITENAME}}($4)のログイン用パスワードの再発行を申請しました。 @@ -795,6 +836,9 @@ $2', 'loginlanguagelabel' => '言語: $1', 'suspicious-userlogout' => '壊れたブラウザもしくはキャッシュ・プロキシによって送信された可能性があるため、ログアウト要求は拒否されました。', +# E-mail sending +'php-mail-error-unknown' => 'PHPのmail()関数で不明なエラー', + # Password reset dialog 'resetpass' => 'パスワードの変更', 'resetpass_announce' => '電子メールで送信された仮パスワードでログインしています。 @@ -848,10 +892,12 @@ $2', 'showdiff' => '差分を表示', 'anoneditwarning' => "'''警告:'''ログインしていません。 このまま投稿を行った場合、使用中のIPアドレスがこのページの編集履歴に記録されます。", +'anonpreviewwarning' => "''ログインしていません。投稿を保存すると、このページの履歴に使用中のIPアドレスが記録されます。''", 'missingsummary' => "'''注意:'''要約欄が空欄です。 「{{int:savearticle}}」をもう一度クリックすると、編集は要約なしで保存されます。", 'missingcommenttext' => '以下にコメントを入力してください。', -'missingcommentheader' => "'''注意:''' 題名・見出しが空欄です。投稿ボタンをもう一度押すと、要約なしのまま投稿されます。", +'missingcommentheader' => "'''注意::'' このコメントに対する題名・見出しが空欄です。 +「{{int:savearticle}}」ボタンをもう一度押すと、編集は要約なしで保存されます。", 'summary-preview' => '要約のプレビュー:', 'subject-preview' => '題名・見出しのプレビュー:', 'blockedtitle' => '利用者はブロックされています', @@ -929,7 +975,12 @@ IPアドレスは複数の利用者の間で共有されていることがあり '''まだ保存されていません!'''", 'userjspreview' => "'''利用者JavaScriptを試験、プレビューしています。''' '''まだ保存されていません!'''", -'userinvalidcssjstitle' => "'''警告:''' 「$1」というスキンはありません。.css と .js ページを編集する際にはサブページ名を小文字にすることを忘れないでください。例えば {{ns:user}}:Hoge/Monobook.css ではなく {{ns:user}}:Hoge/monobook.css となります。", +'sitecsspreview' => "'''ここでは、CSSをプレビューしているだけに過ぎません。''' +'''まだ保存されていません!'''", +'sitejspreview' => "'''ここでは、JavaScriptをプレビューしているだけに過ぎません。''' +'''まだ保存されていません!'''", +'userinvalidcssjstitle' => "'''警告:'''「$1」という外装はありません。 +.cssと.jsページを編集する際には、ページ名を小文字にすることを忘れないでください(例えば、{{ns:user}}:Hoge/Vector.cssではなく{{ns:user}}:Hoge/vector.cssとなります)。", 'updated' => '(更新)', 'note' => "'''お知らせ:'''", 'previewnote' => "'''これはプレビューです。''' @@ -971,7 +1022,6 @@ IPアドレスは複数の利用者の間で共有されていることがあり 自信の投稿が他人によって遠慮なく編集されることを望まない場合は、ここには投稿しないでください。
    また、投稿されるものは、自身によって書かれたものであるか、パブリック・ドメイン、またはそれに類するフリーな資料からの複製であることを約束してください(詳細は$1を参照)。 '''著作権保護されている作品を、許諾なしに投稿してはいけません!'''", -'longpagewarning' => "'''警告:''' このページのサイズは $1 キロバイトです。一部のブラウザには 32 キロバイト以上のページを編集すると問題が起きるものがあります。ページをセクションに分けることを検討してください。", 'longpageerror' => "'''エラー:投稿された文章はは$1キロバイトの長さがあります。これは投稿できる最大の長さである$2キロバイトを超えています。''' この編集は保存できません。", 'readonlywarning' => "'''警告:データベースがメンテナンスのためにロックされているため、現在は編集を保存できません。''' @@ -1151,6 +1201,8 @@ $1", 'logdelete-failure' => "'''記録の閲覧レベルを設定できませんでした。''' $1", 'revdel-restore' => '閲覧レベルを変更', +'revdel-restore-deleted' => '削除された版', +'revdel-restore-visible' => '閲覧可能な版', 'pagehist' => 'ページの履歴', 'deletedhist' => '削除された履歴', 'revdelete-content' => '本文', @@ -1221,11 +1273,13 @@ $1", # Diffs 'history-title' => '「$1」の変更履歴', 'difference' => '(版間での差分)', +'difference-multipage' => '(ページ間の差分)', 'lineno' => '$1行:', 'compareselectedversions' => '選択した版同士を比較', 'showhideselectedversions' => '選択した版を表示もしくは非表示', 'editundo' => '取り消し', -'diff-multi' => '({{PLURAL:$1|間の$1版}}分が非表示)', +'diff-multi' => '($2人の利用者による、間の$1版が非表示)', +'diff-multi-manyusers' => '($2人以上の利用者による、間の$1版が非表示)', # Search results 'searchresults' => '検索結果', @@ -1260,6 +1314,7 @@ $1", 'searchprofile-everything-tooltip' => '全ページ(トークページ含む)を検索', 'searchprofile-advanced-tooltip' => '特定の名前空間を検索', 'search-result-size' => '$1($2単語)', +'search-result-category-size' => '$1件($2下位カテゴリ、$3ファイル)', 'search-result-score' => '関連度:$1%', 'search-redirect' => '($1を転送)', 'search-section' => '($1の節)', @@ -1337,6 +1392,7 @@ $1", 'contextlines' => '1件あたりの行数:', 'contextchars' => '1行あたりの文字数:', 'stub-threshold' => 'スタブリンクとして表示する閾値(バイト):', +'stub-threshold-disabled' => '無効', 'recentchangesdays' => '最近の更新に表示する日数:', 'recentchangesdays-max' => '(最大$1{{PLURAL:$1|日|日間}})', 'recentchangescount' => '既定で表示する件数:', @@ -1370,6 +1426,7 @@ $1", 'prefs-files' => 'ファイル', 'prefs-custom-css' => 'カスタムCSS', 'prefs-custom-js' => 'カスタムJS', +'prefs-common-css-js' => 'すべての外装に共通のCSSとJavaScript:', 'prefs-reset-intro' => 'このページを使うと、自身の個人設定をこのサイトの既定のものに再設定することができます。 この操作は取り消しができません。', 'prefs-emailconfirm-label' => 'メール確認:', @@ -1409,9 +1466,15 @@ HTMLタグを見直してください。', 'prefs-advancedrendering' => '詳細設定', 'prefs-advancedsearchoptions' => '詳細設定', 'prefs-advancedwatchlist' => '詳細設定', -'prefs-display' => '表示の設定', +'prefs-displayrc' => '表示の設定', +'prefs-displaysearchoptions' => '表示の設定', +'prefs-displaywatchlist' => '表示の設定', 'prefs-diffs' => '差分', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => '有効なようです', +'email-address-validity-invalid' => '有効なアドレスが必要です!', + # User rights 'userrights' => '利用者権限の管理', 'userrights-lookup-user' => '利用者グループを管理', @@ -1495,6 +1558,7 @@ HTMLタグを見直してください。', 'right-hideuser' => '利用者名ブロックし、公開記録から隠す', 'right-ipblock-exempt' => 'IPブロック、自動ブロック、広域ブロックを回避', 'right-proxyunbannable' => 'プロキシの自動ブロックを回避', +'right-unblockself' => '自分自身に対するブロックを解除', 'right-protect' => '保護レベルの変更と保護されたページの編集', 'right-editprotected' => '保護ページの編集(連続保護を除く)', 'right-editinterface' => 'ユーザーインターフェースの編集', @@ -1517,7 +1581,6 @@ HTMLタグを見直してください。', 'right-siteadmin' => 'データベースのロックおよびロック解除', 'right-reset-passwords' => '他の利用者のパスワードを再設定する', 'right-override-export-depth' => 'リンク先ページを5階層まで含めて書き出す', -'right-versiondetail' => 'ソフトウェアの詳細なバージョン情報を表示する', 'right-sendemail' => '他の利用者へ電子メールを送る', # User rights log @@ -1568,14 +1631,9 @@ HTMLタグを見直してください。', 'recentchanges-legend' => '最近の更新のオプション', 'recentchangestext' => '最近の更新はこのページから確認できます。', 'recentchanges-feed-description' => 'このフィードでそのウィキへの最近の更新を追跡。', -'recentchanges-label-legend' => '凡例: $1', -'recentchanges-legend-newpage' => '$1 - 新しいページ', 'recentchanges-label-newpage' => 'この編集で新しいページが作成されました', -'recentchanges-legend-minor' => '$1 - 細部の編集', 'recentchanges-label-minor' => 'これは細部の編集です', -'recentchanges-legend-bot' => '$1 - ボットによる編集', 'recentchanges-label-bot' => 'この編集はボットによって行われました', -'recentchanges-legend-unpatrolled' => '$1 - パトロールされていない編集', 'recentchanges-label-unpatrolled' => 'この編集はまだ巡回されていません', 'rcnote' => "以下は、$4$5までの{{PLURAL:$2|1日|直前'''$2'''日間}}になされた'''$1'''件の変更です。", 'rcnotefrom' => "以下は、'''$2'''以降の更新です(最大'''$1'''件)。", @@ -1623,6 +1681,9 @@ HTMLタグを見直してください。', 'upload_directory_missing' => 'アップロード先ディレクトリー($1)が見つからず、ウェブサーバーによって作成できませんでした。', 'upload_directory_read_only' => 'アップロード先ディレクトリー($1)に、ウェブサーバーが書き込めません。', 'uploaderror' => 'アップロードのエラー', +'upload-recreate-warning' => "'''警告:その名前のファイルは、以前に削除または移動されています。''' + +参考のため、このページの削除と移動の記録を以下に示します:", 'uploadtext' => "ファイルをアップロードするには、以下のフォームを利用してください。 以前にアップロードされたファイルの表示と検索には[[Special:FileList|{{int:listfiles}}]]を使用し、(再)アップロードは[[Special:Log/upload|アップロード記録]]に、削除は[[Special:Log/delete|削除記録]]にも記録されます。 @@ -1658,6 +1719,17 @@ HTMLタグを見直してください。', 'filetype-banned-type' => "'''「.$1」''' は許可されていないファイル形式です。 許可されている{{PLURAL:$3|ファイル形式}}は$2です。", 'filetype-missing' => 'ファイルに、「.jpg」のような拡張子がありません。', +'empty-file' => '送信されたファイルは空でした。', +'file-too-large' => '送信されたファイルは大きすぎます。', +'filename-tooshort' => 'ファイル名が短すぎます。', +'filetype-banned' => 'この形式のファイルは禁止されています。', +'verification-error' => 'このファイルは、ファイルの検証システムに合格しませんでした。', +'hookaborted' => '拡張機能のフックによって、修正が中断されました。', +'illegal-filename' => 'そのファイル名は許可されていません。', +'overwrite' => '既存のファイルへ上書きすることは許可されていません。', +'unknown-error' => '不明なエラーが発生しました。', +'tmp-create-error' => '一時ファイルを作成できませんでした。', +'tmp-write-error' => '一時ファイルへの書き込みエラー', 'large-file' => 'ファイルサイズは$1バイトより大きくしないことが推奨されています。 このファイルは$2バイトです。', 'largefileserver' => 'このファイルは、サーバー設定で許されている最大サイズより大きいです。', @@ -1690,13 +1762,14 @@ HTMLタグを見直してください。', 'file-exists-duplicate' => 'このファイルは以下の{{PLURAL:$1|ファイル}}と重複しています:', 'file-deleted-duplicate' => 'このファイル([[:$1]])と同一のファイルが以前に削除されています。 再度アップロードをする前に、以前削除されたファイルの削除記録を確認してください。', -'successfulupload' => 'アップロード成功', 'uploadwarning' => 'アップロード警告', 'uploadwarning-text' => '下記のファイル解説を修正して再試行してください。', 'savefile' => 'ファイルを保存', 'uploadedimage' => '「[[$1]]」をアップロードしました。', 'overwroteimage' => '「[[$1]]」の新しい版をアップロードしました', 'uploaddisabled' => 'アップロード機能は無効になっています。', +'copyuploaddisabled' => 'URLからのアップロードは無効になっています。', +'uploadfromurl-queued' => 'アップロードが、キューに追加されました。', 'uploaddisabledtext' => 'ファイルのアップロードは、無効になっています。', 'php-uploaddisabledtext' => 'ファイルのアップロードがPHPで無効化されています。 file_uploadsの設定を確認してください。', @@ -1733,6 +1806,14 @@ JD # Jenoptik MGP # ペンタックス PICT # その他 #
    ', +'upload-success-subj' => 'アップロード成功', +'upload-success-msg' => '[$2]からのアップロードに成功しました。[[:{{ns:file}}:$1]]から利用可能です。', +'upload-failure-subj' => 'アップロードで発生した問題', +'upload-failure-msg' => '[$2]からのアップロード中に問題が発生しました: + +$1', +'upload-warning-subj' => 'アップロードの警告', +'upload-warning-msg' => '[$2] からアップロードしようとしたデータに問題があります。 [[Special:Upload/stash/$1|アップロードのフォーム]]に戻って問題を修正してください。', 'upload-proto-error' => '不正なプロトコル', 'upload-proto-error-text' => '外部アップロード機能では、http://ftp://で始まっているURLが必要があります。', @@ -1799,6 +1880,7 @@ URLが正しいものであるか、指定したサイトが現在使用可能 'listfiles_search_for' => 'メディア名で検索:', 'imgfile' => 'ファイル', 'listfiles' => 'ファイル一覧', +'listfiles_thumb' => 'サムネイル', 'listfiles_date' => '日時', 'listfiles_name' => '名前', 'listfiles_user' => '利用者', @@ -1913,8 +1995,8 @@ contenttype/subtypeの形式で指定してください(例:image/jpeg '{{SITENAME}}が立ち上がってからの編集回数の総計', 'statistics-edits-average' => '1ページあたりの編集回数', 'statistics-views-total' => '総閲覧回数', +'statistics-views-total-desc' => '存在しないページと特別ページに対する閲覧は含まれていません', 'statistics-views-peredit' => '閲覧回数に対する編集回数の割合', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue ジョブ・キュー]の長さ', 'statistics-users' => '[[Special:ListUsers|利用者]]', 'statistics-users-active' => '活動中の利用者', 'statistics-users-active-desc' => '過去$1{{PLURAL:$1|日間}}に何らかの操作を行った利用者', @@ -1927,7 +2009,9 @@ contenttype/subtypeの形式で指定してください(例:image/jpeg '二重転送', -'doubleredirectstext' => 'これは他のリダイレクトページにリダイレクトしているページの一覧です。各行は始点のリダイレクトとそのリダイレクト先ページ、および、そのまたリダイレクトしている先のページを含んでいます。3つ目のページがたいていは「真の」リダイレクト先であり、1つ目のリダイレクトはそこを直接指すべきです。打ち消し線のはいった項目は既に修正されています。', +'doubleredirectstext' => 'これは他のリダイレクトページへのリダイレクトの一覧です。 +各行には、最初のリダイレクトと、その転送先のリダイレクト、そのまた転送先へのリンクが表示されています。多くの場合、最終の転送先が正しい転送先であり、最初のリダイレクトは直接最後の転送先に向けるべきです。 +打ち消し線のはいった項目は既に修正されています。', 'double-redirect-fixed-move' => '[[$1]]が移動されています。 [[$2]]に転送されます。', 'double-redirect-fixer' => '転送修正係', @@ -1951,6 +2035,8 @@ contenttype/subtypeの形式で指定してください(例:image/jpeg '$1項目', 'nrevisions' => '$1版', 'nviews' => '$1回の閲覧', +'nimagelinks' => '$1ページで使用', +'ntransclusions' => '$1ページで使用', 'specialpage-empty' => '合致するものがありません。', 'lonelypages' => '孤立しているページ', 'lonelypagestext' => '以下のページは、{{SITENAME}}の他のページからリンクも参照読み込みもされていません。', @@ -2108,34 +2194,40 @@ contenttype/subtypeの形式で指定してください(例:image/jpeg '自身のアカウントから全グループを除去可能', # E-mail user -'mailnologin' => '送信アドレスがありません', -'mailnologintext' => '他の利用者宛にメールを送信するためには、[[Special:UserLogin|ログイン]]し、[[Special:Preferences|個人設定]]で有効なメールアドレスを設定する必要があります。', -'emailuser' => 'この利用者にメールを送信', -'emailpage' => '利用者にメール送信', -'emailpagetext' => '下のフォームを通じて、この利用者にメールを送ることができます。 +'mailnologin' => '送信アドレスがありません', +'mailnologintext' => '他の利用者宛にメールを送信するためには、[[Special:UserLogin|ログイン]]し、[[Special:Preferences|個人設定]]で有効なメールアドレスを設定する必要があります。', +'emailuser' => 'この利用者にメールを送信', +'emailpage' => '利用者にメール送信', +'emailpagetext' => '下のフォームを通じて、この利用者にメールを送ることができます。 [[Special:Preferences|利用者の個人設定]]で登録した電子メールアドレスが「差出人」アドレスとして表示され、受信者は返事を直接出せるようになっています。', -'usermailererror' => 'メールが以下のエラーを返しました:', -'defemailsubject' => '{{SITENAME}} 電子メール', -'noemailtitle' => 'メールアドレスがありません', -'noemailtext' => 'この利用者は有効なメールアドレスを登録していません。', -'nowikiemailtitle' => '電子メール不許可', -'nowikiemailtext' => 'この利用者は他の利用者からメールを受け取らない設定にしています。', -'email-legend' => '{{SITENAME}}の他の利用者に電子メールを送る', -'emailfrom' => '差出人:', -'emailto' => '宛先:', -'emailsubject' => '件名:', -'emailmessage' => '本文:', -'emailsend' => '送信', -'emailccme' => '自分宛に控えを送信する。', -'emailccsubject' => '$1に送信したメールの控え:$2', -'emailsent' => 'メールを送りました', -'emailsenttext' => 'メールは無事送信されました。', -'emailuserfooter' => 'この電子メールは$1から$2へ、{{SITENAME}}の「利用者へメールを送信」機能を使って送られました。', +'usermailererror' => 'メールが以下のエラーを返しました:', +'defemailsubject' => '{{SITENAME}} 電子メール', +'usermaildisabled' => '利用者メール機能は無効になっています', +'usermaildisabledtext' => 'このウィキ上で他の利用者へメールを送ることはできません。', +'noemailtitle' => 'メールアドレスがありません', +'noemailtext' => 'この利用者は有効なメールアドレスを登録していません。', +'nowikiemailtitle' => '電子メール不許可', +'nowikiemailtext' => 'この利用者は他の利用者からメールを受け取らない設定にしています。', +'email-legend' => '{{SITENAME}}の他の利用者に電子メールを送る', +'emailfrom' => '差出人:', +'emailto' => '宛先:', +'emailsubject' => '件名:', +'emailmessage' => '本文:', +'emailsend' => '送信', +'emailccme' => '自分宛に控えを送信する。', +'emailccsubject' => '$1に送信したメールの控え:$2', +'emailsent' => 'メールを送りました', +'emailsenttext' => 'メールは無事送信されました。', +'emailuserfooter' => 'この電子メールは$1から$2へ、{{SITENAME}}の「利用者へメールを送信」機能を使って送られました。', + +# User Messenger +'usermessage-summary' => 'システムメッセージを残す。', +'usermessage-editor' => 'システムメッセンジャー', # Watchlist 'watchlist' => 'ウォッチリスト', 'mywatchlist' => 'ウォッチリスト', -'watchlistfor' => "(利用者: '''$1''')", +'watchlistfor2' => '利用者: $1 $2', 'nowatchlist' => 'ウォッチリストに項目がありません。', 'watchlistanontext' => 'ウォッチリストに入っている項目を表示または編集するには、$1してください。', 'watchnologin' => 'ログインしていません', @@ -2174,8 +2266,8 @@ contenttype/subtypeの形式で指定してください(例:image/jpeg '変更', 'created' => '作成', 'enotif_subject' => '{{SITENAME}}のページ「$PAGETITLE」が$PAGEEDITORによって$CHANGEDORCREATEDされました', -'enotif_lastvisited' => '最後に閲覧した後に行なわれた全てのの変更は、$1で見ることができます。', -'enotif_lastdiff' => 'この変更内容を表示するには$1をご覧ください。', +'enotif_lastvisited' => '最後に閲覧した後に行なわれた全ての変更は、 $1 で見ることができます。', +'enotif_lastdiff' => 'この変更内容を表示するには $1 をご覧ください。', 'enotif_anon_editor' => '匿名利用者:$1', 'enotif_body' => '$WATCHINGUSERNAMEさん @@ -2195,9 +2287,14 @@ $NEWPAGE {{SITENAME}}通知システム -- -ウォッチリストの設定は、{{fullurl:{{#special:Watchlist}}/edit}}で変更できます。 +メール通知の設定は、次のページから変更してください。 +{{fullurl:{{#special:Preferences}}}} + +ウォッチリストの設定は、次のページから変更して下さい。 +{{fullurl:{{#special:Watchlist}}/edit}} -このページをウォッチリストから除去するには$UNWATCHURLをご覧ください。 +このページは、次のページでウォッチリストから除去することが出来ます。 +$UNWATCHURL ご意見、お問い合わせ: {{fullurl:{{MediaWiki:Helppage}}}}', @@ -2254,7 +2351,10 @@ $NEWPAGE 'revertpage-nouser' => '(利用者名削除)による編集を[[User:$1|$1]]による最新版へ差し戻しました', 'rollback-success' => '$1による編集を差し戻しました。 $2による最後の版へ変更されました。', -'sessionfailure' => 'ログインのセッションに問題が発生しました。 + +# Edit tokens +'sessionfailure-title' => 'セッションの失敗', +'sessionfailure' => 'ログインのセッションに問題が発生しました。 セッション乗っ取りを防ぐために操作は取り消されました。 前のページへ戻って再度読み込んだ後に、もう一度試してください。', @@ -2390,19 +2490,23 @@ $1', 'month' => 'これ以前の月:', 'year' => 'これ以前の年:', -'sp-contributions-newbies' => '新規利用者の投稿のみ表示', -'sp-contributions-newbies-sub' => '新規利用者のみ', -'sp-contributions-newbies-title' => '新規利用者の投稿記録', -'sp-contributions-blocklog' => 'ブロック記録', -'sp-contributions-deleted' => '利用者の削除された投稿記録', -'sp-contributions-logs' => '記録', -'sp-contributions-talk' => 'トーク', -'sp-contributions-userrights' => '利用者権限の管理', -'sp-contributions-blocked-notice' => 'この利用者は現在ブロックされています。 +'sp-contributions-newbies' => '新規利用者の投稿のみ表示', +'sp-contributions-newbies-sub' => '新規利用者のみ', +'sp-contributions-newbies-title' => '新規利用者の投稿記録', +'sp-contributions-blocklog' => 'ブロック記録', +'sp-contributions-deleted' => '利用者の削除された投稿記録', +'sp-contributions-uploads' => 'アップロード', +'sp-contributions-logs' => '記録', +'sp-contributions-talk' => 'トーク', +'sp-contributions-userrights' => '利用者権限の管理', +'sp-contributions-blocked-notice' => 'この利用者は現在ブロックされています。 参考のために最新のブロック記録項目を以下に表示します:', -'sp-contributions-search' => '投稿の検索', -'sp-contributions-username' => 'IPアドレスまたは利用者名:', -'sp-contributions-submit' => '検索', +'sp-contributions-blocked-notice-anon' => 'このIPアドレスは現在ブロックされています。 +参考のために最近のブロック記録項目を以下に表示します:', +'sp-contributions-search' => '投稿の検索', +'sp-contributions-username' => 'IPアドレスまたは利用者名:', +'sp-contributions-toponly' => '最新版の編集のみを表示', +'sp-contributions-submit' => '検索', # What links here 'whatlinkshere' => 'リンク元', @@ -2463,7 +2567,6 @@ $1', 'ipb-edit-dropdown' => 'ブロック理由を編集する', 'ipb-unblock-addr' => '$1のブロックを解除', 'ipb-unblock' => '利用者またはIPアドレスのブロックを解除する', -'ipb-blocklist-addr' => '$1 に対する現在有効なブロック', 'ipb-blocklist' => '現在有効なブロックを表示', 'ipb-blocklist-contribs' => '$1の投稿', 'unblockip' => 'ブロックを解除する', @@ -2541,6 +2644,8 @@ $1は、すでにブロックされています。 'cant-block-while-blocked' => 'ブロック中は、他の利用者をブロックできません。', 'cant-see-hidden-user' => '投稿ブロックしようとした利用者は、既にブロックされ隠されています。 hideuser権限を持っていないため、この利用者のブロックを閲覧または編集できません。', +'ipbblocked' => '自身がブロックされているため、他の利用者のブロックやブロック解除をすることはできません', +'ipbnounblockself' => '自分自身に対するブロックを解除することはできません', # Developer tools 'lockdb' => 'データベースのロック', @@ -2575,6 +2680,17 @@ hideuser権限を持っていないため、この利用者のブロックを閲 '''注意!''' よく閲覧されるページや、他の多くのページからリンクされているページを移動すると予期せぬ結果が起こるかもしれません。ページの移動に伴う影響をよく考えてから踏み切るようにしてください。", +'movepagetext-noredirectfixer' => "下のフォームを利用すると、ページ名が変更され、その履歴も変更先へ移動します。 +古いページは変更先への転送ページとなります。 +自動的な修正を選択しない場合は、[[Special:DoubleRedirects|二重リダイレクト]]や[[Special:BrokenRedirects|迷子のリダイレクト]]を確認する必要があります。 +リンクを正しく維持するのは移動した人の責任です。 + +移動先がすでに存在する場合には、そのページが空またはリダイレクトで、かつ過去の版を持たない場合を除いて移動'''できません'''。 +つまり、間違えてページ名を変更した場合には元に戻せます。また移動によって既存のページを上書きしてしまうことはありません。 + +'''注意!''' +よく閲覧されるページや、他の多くのページからリンクされているページを移動すると予期せぬ結果が起こるかもしれません。 +ページの移動に伴う影響をよく考えてから移動してください。", 'movepagetalktext' => '関連付けられたトークページは、自動的に一緒に移動されます。ただしこれは、以下の場合を除きます。 * 空でないトークページが新しい名前で存在する場合 * 下のボックスのチェックを消した場合 @@ -2632,6 +2748,7 @@ hideuser権限を持っていないため、この利用者のブロックを閲 'immobile-source-page' => 'このページは移動できません。', 'immobile-target-page' => '目的のページ名へは移動させることができません。', 'imagenocrossnamespace' => 'ファイル名前空間以外に、ファイルを移動することはできません。', +'nonfile-cannot-move-to-file' => 'ファイルでないものを、ファイル名前空間に移動することはできません', 'imagetypemismatch' => '新しいファイルの拡張子がファイルのタイプと一致していません。', 'imageinvalidfilename' => '対象ファイル名が不正です', 'fix-double-redirects' => 'このページへのリダイレクトがあればそのリダイレクトを修正する', @@ -2712,6 +2829,7 @@ hideuser権限を持っていないため、この利用者のブロックを閲 'importstart' => 'ページを取り込んでいます・・・', 'import-revision-count' => '$1版', 'importnopages' => '取り込むページがありません。', +'imported-log-entries' => '$1件の{{PLURAL:$1|記録項目}}を取り込みました。', 'importfailed' => '取り込みに失敗しました:$1', 'importunknownsource' => '取り込み元のタイプが不明です', 'importcantopen' => '取り込みファイルが開けませんでした', @@ -2809,6 +2927,8 @@ hideuser権限を持っていないため、この利用者のブロックを閲 'tooltip-upload' => 'アップロードを開始', 'tooltip-rollback' => '「巻き戻し」は、このページの最後の編集者によるこのページへの編集を1クリックで差し戻します', 'tooltip-undo' => '「取り消し」はこの編集を差し戻し、編集画面をプレビューをつけて開きます。要約欄に取り消しの理由を追加することができます。', +'tooltip-preferences-save' => '設定を保存', +'tooltip-summary' => '短い要約を入力してください', # Stylesheets 'common.css' => '/* ここに書いたCSSはすべての外装に反映されます */', @@ -2935,19 +3055,22 @@ $1', 'nextdiff' => '新しい編集→', # Media information -'mediawarning' => "'''警告:''' このファイルは悪意のあるコードを含んでいる可能性があります。 -実行するとコンピューターが危害を被る場合があります。", +'mediawarning' => "'''警告:'''このファイルは悪意のあるコードを含んでいる可能性があります。 +実行するとシステムが棄権にさらされる可能性があります。", 'imagemaxsize' => "画像のサイズ制限:
    ''(ファイルページに対する)''", 'thumbsize' => 'サムネイルの大きさ:', 'widthheightpage' => '$1×$2、$3ページ', -'file-info' => '(ファイルサイズ: $1, MIMEタイプ: $2)', -'file-info-size' => '($1 × $2 ピクセル, ファイルサイズ: $3, MIMEタイプ: $4)', +'file-info' => 'ファイルサイズ:$1、MIMEタイプ:$2', +'file-info-size' => '$1×$2ピクセル、ファイルサイズ:$3、MIMEタイプ:$4', 'file-nohires' => '高解像度版はありません。', -'svg-long-desc' => '(SVGファイル, $1 × $2 ピクセル, ファイルサイズ: $3)', +'svg-long-desc' => 'SVGファイル、$1×$2ピクセル、ファイルサイズ:$3', 'show-big-image' => '高解像度での画像', 'show-big-image-thumb' => 'このプレビューのサイズ:$1×$2ピクセル', 'file-info-gif-looped' => 'ループします', 'file-info-gif-frames' => '$1フレーム', +'file-info-png-looped' => '繰り返し', +'file-info-png-repeat' => '$1回再生しました', +'file-info-png-frames' => '$1フレーム', # Special:NewFiles 'newimages' => '新しいファイルのギャラリー', @@ -3117,6 +3240,7 @@ Variants for Chinese language 'exif-gpsareainformation' => 'GPSエリア名', 'exif-gpsdatestamp' => 'GPS測位日時', 'exif-gpsdifferential' => 'ディファレンシャル補正', +'exif-objectname' => '短いタイトル', # EXIF attributes 'exif-compression-1' => '非圧縮', @@ -3279,31 +3403,31 @@ Variants for Chinese language 'limitall' => 'すべて', # E-mail address confirmation -'confirmemail' => 'メールアドレスの確認', -'confirmemail_noemail' => '[[Special:Preferences|個人設定]]で有効なメールアドレスが指定されていません。', -'confirmemail_text' => '{{SITENAME}}では、メール機能を利用する前にメールアドレスの確認が必要です。 +'confirmemail' => 'メールアドレスの確認', +'confirmemail_noemail' => '[[Special:Preferences|個人設定]]で有効なメールアドレスが指定されていません。', +'confirmemail_text' => '{{SITENAME}}では、メール機能を利用する前にメールアドレスの確認が必要です。 以下のボタンを押すとメールアドレスに確認メールが送られます。 メールには確認用コードを含むリンクが書かれています。 そのリンクをブラウザーで読み込んで、メールアドレスの正当性を確認してください。', -'confirmemail_pending' => '確認メールは既に送信されています。 +'confirmemail_pending' => '確認メールは既に送信されています。 このアカウントを作成したばかりであれば、メールが届くまで数分ほど待たなければならないかもしれません。', -'confirmemail_send' => '確認用コードを送信する', -'confirmemail_sent' => '確認メールを送信しました。', -'confirmemail_oncreate' => 'メールアドレスの正当性を確認するためのコードを含んだメールを送信しました。 +'confirmemail_send' => '確認用コードを送信する', +'confirmemail_sent' => '確認メールを送信しました。', +'confirmemail_oncreate' => 'メールアドレスの正当性を確認するためのコードを含んだメールを送信しました。 この確認を行わなくてもログインはできますが、確認するまでメール通知の機能は無効化されます。', -'confirmemail_sendfailed' => '{{SITENAME}}は確認メールを送信できませんでした。 +'confirmemail_sendfailed' => '{{SITENAME}}は確認メールを送信できませんでした。 メールアドレスに不正な文字が含まれていないかどうか確認してください。 メールサーバーからの返答:$1', -'confirmemail_invalid' => '確認用コードが正しくありません。 +'confirmemail_invalid' => '確認用コードが正しくありません。 このコードの有効期限が切れています。', -'confirmemail_needlogin' => 'メールアドレスを確認するために$1が必要です。', -'confirmemail_success' => 'メールアドレスは確認されました。 +'confirmemail_needlogin' => 'メールアドレスを確認するために$1が必要です。', +'confirmemail_success' => 'メールアドレスは確認されました。 [[Special:UserLogin|ログイン]]してウィキを使用できます。', -'confirmemail_loggedin' => 'メールアドレスは確認されました。', -'confirmemail_error' => '確認情報を保存する際にエラーが発生しました。', -'confirmemail_subject' => '{{SITENAME}} メールアドレスの確認', -'confirmemail_body' => 'だれかが、IPアドレス$1から、 +'confirmemail_loggedin' => 'メールアドレスは確認されました。', +'confirmemail_error' => '確認情報を保存する際にエラーが発生しました。', +'confirmemail_subject' => '{{SITENAME}} メールアドレスの確認', +'confirmemail_body' => 'だれかが、IPアドレス$1から、 このメールアドレスで{{SITENAME}}のアカウント「$2」を登録しました。 このアカウントが本当に自分のものであるか確認して、 @@ -3317,8 +3441,36 @@ $3 $5 この確認用コードは、$4に期限切れになります。', -'confirmemail_invalidated' => 'メールアドレスの確認が中止されました', -'invalidateemail' => 'メールアドレスの認証中止', +'confirmemail_body_changed' => 'だれかが、IPアドレス$1から +{{SITENAME}}でアカウント「$2」の電子メールアドレスをこのアドレスに変更しました。 + +このアカウントが本当に自分のものであるならば、 +{{SITENAME}}のメール機能を再び有効化にするために、以下のURLをブラウザーで開いてください: + +$3 + +もし自分のアカウントでない場合は、 +次のURLをブラウザーで開いて、電子メール確認を中止してください: + +$5 + +この確認用コードは$4に期限切れになります。', +'confirmemail_body_set' => 'だれかが、IPアドレス$1から +{{SITENAME}}でアカウント「$2」の電子メールアドレスをこのアドレスに設定しました。 + +このアカウントが本当に自分のものであるならば、 +{{SITENAME}}のメール機能を再び有効化にするために、以下のURLをブラウザーで開いてください: + +$3 + +もし自分のアカウントでない場合は、 +次のURLをブラウザーで開いて、電子メール確認を中止してください: + +$5 + +この確認用コードは$4に期限切れになります。', +'confirmemail_invalidated' => 'メールアドレスの確認が中止されました', +'invalidateemail' => 'メールアドレスの認証中止', # Scary transclusion 'scarytranscludedisabled' => '[ウィキ間の参照読み込みは無効になっています]', @@ -3362,6 +3514,7 @@ $1', 'table_pager_first' => '最初のページ', 'table_pager_last' => '最後のページ', 'table_pager_limit' => '1ページに$1項目を表示', +'table_pager_limit_label' => 'ページあたりの項目数:', 'table_pager_limit_submit' => '実行', 'table_pager_empty' => '結果なし', @@ -3484,6 +3637,7 @@ $1', 'version-specialpages' => '特別ページ', 'version-parserhooks' => '構文解析フック', 'version-variables' => '変数', +'version-skins' => 'スキン', 'version-other' => 'その他', 'version-mediahandlers' => 'メディアハンドラー', 'version-hooks' => 'フック', @@ -3495,6 +3649,13 @@ $1', 'version-hook-subscribedby' => '使用個所', 'version-version' => '(バージョン$1)', 'version-license' => 'ライセンス', +'version-poweredby-credits' => "このウィキは、'''[http://www.mediawiki.org/ MediaWiki]'''(copyright © 2001-$1 $2)で動作しています。", +'version-poweredby-others' => 'その他', +'version-license-info' => 'MediaWikiはフリーソフトウェアです。あなたは、フリーソフトウェア財団の発行するGNU一般公衆利用許諾書 (GNU General Public License)(バージョン2、またはそれ以降のライセンス)の規約にもとづき、このライブラリの再配布や改変をすることができます。 + +MediaWikiは、有用であることを期待して配布されていますが、商用あるいは特定の目的に適するかどうかも含めて、暗黙的にも、一切保証されません。詳しくは、GNU一般公衆利用許諾書をご覧下さい。 + +あなたはこのプログラムと共に、[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU一般公衆利用許諾契約書の複製]を受け取ったはずです。もし受け取っていなければ、フリーソフトウェア財団(the Free Software Foundation, Inc., 59Temple Place, Suite 330, Boston, MA 02111-1307 USA)まで請求するか、[http://www.gnu.org/licenses/old-licenses/gpl-2.0.html オンラインで閲覧]してください。', 'version-software' => 'インストール済みソフトウェア', 'version-software-product' => '製品', 'version-software-version' => 'バージョン', @@ -3564,6 +3725,15 @@ $1', 'tags-edit' => '編集', 'tags-hitcount' => '$1回の変更', +# Special:ComparePages +'comparepages' => 'ページの比較', +'compare-selector' => 'ページの版を比較', +'compare-page1' => 'ページ1', +'compare-page2' => 'ページ2', +'compare-rev1' => '版1', +'compare-rev2' => '版2', +'compare-submit' => '比較する', + # Database error messages 'dberr-header' => '問題発生中です', 'dberr-problems' => '申し訳ありません! @@ -3581,8 +3751,13 @@ $1', 'htmlform-float-invalid' => '指定された値は数値ではありません。', 'htmlform-int-toolow' => '指定された値が$1の最小値未満です', 'htmlform-int-toohigh' => '指定された値が$1の最大値を超えています', +'htmlform-required' => 'この値は必要です', 'htmlform-submit' => '送信', 'htmlform-reset' => '変更を取り消す', 'htmlform-selectorother-other' => 'その他', +# SQLite database support +'sqlite-has-fts' => '$1(全文検索あり)', +'sqlite-no-fts' => '$1(全文検索なし)', + ); diff --git a/languages/messages/MessagesJut.php b/languages/messages/MessagesJut.php index 0162ef6a..21b9709c 100644 --- a/languages/messages/MessagesJut.php +++ b/languages/messages/MessagesJut.php @@ -28,8 +28,7 @@ $messages = array( 'tog-editsection' => 'Redigær åfsnet ve hjælp åf [redigær]-henvesnenger', 'tog-editsectiononrightclick' => 'Redigær åfsnet ve at klikke på deres titler (JavaScript)', 'tog-showtoc' => 'Ves endholtsførtegnelse (i artikler ve mære end tre åfsnet)', -'tog-rememberpassword' => 'Husk adgengskode til næste besøĝ frå denne kompjuter', -'tog-editwidth' => 'Redigærengsboksen har fuld bredde', +'tog-rememberpassword' => 'Husk adgengskode til næste besøĝ frå denne kompjuter (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Tilføj sider a åpretter til miin åvervågnengsliste', 'tog-watchdefault' => 'Tilføj sider a redigærer til miin åvervågnengsliste', 'tog-watchmoves' => 'Tilføj sider a flytter til miin åvervågnengsliste', @@ -314,7 +313,7 @@ Førespørgsel: $2', # Login and logout pages 'yourname' => 'Dit brugernav', 'yourpassword' => 'Din adgangskode', -'remembermypassword' => 'Husk min adgangskode til næste gang.', +'remembermypassword' => 'Husk min adgangskode til næste gang (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'Loĝ på', 'nav-login-createaccount' => 'Åpret æ konto æller loĝ på', 'loginprompt' => 'Du skal have cookies slået til før at kunne loĝge på {{SITENAME}}.', @@ -409,8 +408,6 @@ Du ken ekke bruge æ funksje 'e-mail til denne bruger' vemendre der er ångevet 'copyrightwarning' => "'''Husk: åpskrev engen websider, søm ekke tilhører dig selv, brug engen åphavsretsligt beskyttede værker uden tilladelse frå'n ejer!'''
    Du lover os hermed, at du selv '''har skrevet skrevselenger''', at skrevselenger tilhører ålmenheden, er ('''åpværer hus'''), æller at æ '''åphavsrets-endehaver''' har gevet sen '''tilladelse'''. Ves denne skrevselenger ålerede er åfentliggkort andre steder, skrev det venligst på æ diskusjesside. Bemærk venligst, at ål {{SITENAME}}-ertikler åtomatisk står under „$2“ (se $1 før lileskrevselenger). Ves du ekke vel, at dit arbejde her ændres og udbredes åf andre, så tryk ekke på „Gem“.", -'longpagewarning' => "'''ADVARSEL: Denne side er $1 kilobyte stor; nogle browsere ken have pårblæmer ve at redigære sider der nærmer sig æller er større end 32 kb. -Åvervej æ side'm ken åpdeles i mendre dæle.'''", 'templatesused' => 'Skablåner der er brugt på denne side:', 'templatesusedpreview' => 'Følgende skablåner bruges åf denne ertikelførhåndsvesnenge:', 'template-protected' => '(skrevebeskyttet)', @@ -631,7 +628,6 @@ hersenenge, (førge) = førskel til den førge hersenenge, l = lile til mendre # Watchlist 'watchlist' => 'Åvervågnengsliste', 'mywatchlist' => 'Åvervågnengsliste', -'watchlistfor' => "(før '''$1''')", 'addedwatch' => 'Tilføjet til din åvervågnengsliste', 'addedwatchtext' => "Æ side \"[[:\$1]]\" er blevet tilføjet til din [[Special:Watchlist|åvervågningsliste]]. Fremtidige ændrenger til denne side og den tilhørende diskusjeside hvil bleve listet der, og æ side hvil fremstå '''fremhævet''' i'n [[Special:RecentChanges|liste ve de seneste ændrenger]] før at gøre det lettere at finde den. Hves du senere hvilst fjerne'n side frå din åvervågningsliste, så klik \"Fjern åvervågnenge\".", 'removedwatch' => 'Fjernet frå åvervågnengsliste', @@ -821,9 +817,9 @@ navn du harst valgt er ekke gyldegt. Vælg et andet navn.', 'nextdiff' => 'Gå til næste førskel →', # Media information -'file-info-size' => '($1 × $2 pixel, gøretstørrelse: $3, MIME-senenge: $4)', +'file-info-size' => '$1 × $2 pixel, gøretstørrelse: $3, MIME-senenge: $4', 'file-nohires' => 'Engen højere åpløsnenge fundet.', -'svg-long-desc' => '(SVG gøret, wønetstørrelse $1 × $2 pixel, gøretstørrelse: $3)', +'svg-long-desc' => 'SVG gøret, wønetstørrelse $1 × $2 pixel, gøretstørrelse: $3', 'show-big-image' => 'Hersenenge i større åpløsnenge', 'show-big-image-thumb' => 'Størrelse åf førhåndsvesnenge: $1 × $2 pixel', diff --git a/languages/messages/MessagesJv.php b/languages/messages/MessagesJv.php index 4107b7b6..22ab73d7 100644 --- a/languages/messages/MessagesJv.php +++ b/languages/messages/MessagesJv.php @@ -60,8 +60,7 @@ $messages = array( 'tog-editsection' => 'Fungsèkna panyuntingan sub-bagian ngliwati pranala [sunting]', 'tog-editsectiononrightclick' => 'Fungsèkna panyuntingan sub-bagian mawa klik-tengen ing judul bagian (JavaScript)', 'tog-showtoc' => 'Tuduhna daftar isi (kanggo kaca sing nduwé luwih saka 3 sub-bagian)', -'tog-rememberpassword' => 'Éling tembung sandi ing saben sési', -'tog-editwidth' => 'Jembarna kothak suntingan nganti ukuran layar kebak', +'tog-rememberpassword' => 'Émut tembung sandi kula ing peramban punika (salebeting $1 {{PLURAL:$1|dinten|dinten}})', 'tog-watchcreations' => 'Tambahna kaca sing tak-gawé ing daftar pangawasan', 'tog-watchdefault' => 'Tambahna kaca sing tak-sunting ing daftar pangawasan', 'tog-watchmoves' => 'Tambahkan kaca sing tak-pindhah ing daftar pangawasan', @@ -207,31 +206,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Tambah topik', -'vector-action-delete' => 'Busak', -'vector-action-move' => 'Pindhahna', -'vector-action-protect' => 'Reksa', -'vector-action-undelete' => 'Batalna pambusakan', -'vector-action-unprotect' => 'Batalna pangreksan', -'vector-namespace-category' => 'Kategori', -'vector-namespace-help' => 'Pitulung', -'vector-namespace-image' => 'Berkas', -'vector-namespace-main' => 'Kaca', -'vector-namespace-media' => 'Kaca media', -'vector-namespace-mediawiki' => 'Pesen', -'vector-namespace-project' => 'Kaca proyèk', -'vector-namespace-special' => 'Kaca istiméwa', -'vector-namespace-talk' => 'Dhiskusi', -'vector-namespace-template' => 'Cithakan', -'vector-namespace-user' => 'Kaca panganggo', -'vector-view-create' => 'Gawé', -'vector-view-edit' => 'Sunting', -'vector-view-history' => 'Sajarah kaca', -'vector-view-view' => 'Waca', -'vector-view-viewsource' => 'Pirsani sumber', -'actions' => 'Tindakan', -'namespaces' => 'Ruang jeneng', -'variants' => 'Varian', +'vector-action-addsection' => 'Tambah topik', +'vector-action-delete' => 'Busak', +'vector-action-move' => 'Pindhahna', +'vector-action-protect' => 'Reksa', +'vector-action-undelete' => 'Batalna pambusakan', +'vector-action-unprotect' => 'Batalna pangreksan', +'vector-simplesearch-preference' => 'Aktifaken pamrayogi pamadosan ingkang kasampurnakaken (namung kulit vektor)', +'vector-view-create' => 'Gawé', +'vector-view-edit' => 'Sunting', +'vector-view-history' => 'Sajarah kaca', +'vector-view-view' => 'Waca', +'vector-view-viewsource' => 'Pirsani sumber', +'actions' => 'Tindakan', +'namespaces' => 'Ruang jeneng', +'variants' => 'Varian', 'errorpagetitle' => 'Kasalahan', 'returnto' => 'Bali menyang $1.', @@ -292,6 +281,9 @@ Kakèhan panganggo sing nyoba mbukak kaca iki. Entèni sedhéla sadurungé nyoba ngaksès kaca iki manèh . $1', +'pool-timeout' => 'Kelangkung wekdal nengga kunci', +'pool-queuefull' => 'Kempalan antrian kebak', +'pool-errorunknown' => 'Kalepata ingkang mboten dipun mangertosi', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Prakara {{SITENAME}}', @@ -447,7 +439,8 @@ Akun panjenengan wis kacipta. Aja lali nata konfigurasi [[Special:Preferences|pr 'yourname' => 'Asma pangangeman', 'yourpassword' => 'Tembung sandhi:', 'yourpasswordagain' => 'Balènana tembung sandhi', -'remembermypassword' => 'Éling tembung sandhi', +'remembermypassword' => 'Émut tembung sandi kula (salebeting $1 {{PLURAL:$1|dinten|dinten}})', +'securelogin-stick-https' => 'Tetep kahubung dhumateng HTTPS sasampunipun mlebet log', 'yourdomainname' => 'Dhomain panjenengan', 'externaldberror' => 'Ana kasalahan otèntikasi basis dhata èksternal utawa panjenengan ora pareng nglakoni pemutakhiran marang akun èksternal panjenengan.', 'login' => 'Mlebu log', @@ -464,6 +457,7 @@ Akun panjenengan wis kacipta. Aja lali nata konfigurasi [[Special:Preferences|pr 'gotaccount' => "Wis kagungan akun? '''$1'''.", 'gotaccountlink' => 'Mlebu', 'createaccountmail' => 'liwat layang e-mail', +'createaccountreason' => 'Alesan:', 'badretype' => 'Sandhi panjenengan ora gathuk', 'userexists' => 'Asma panganggo sing panjenengan pilih wis kanggo. Mangga pilih asma liyané.', @@ -484,6 +478,7 @@ Coba dipriksa manèh pasang aksarané, utawa [[Special:UserLogin/signup|gawé ak 'wrongpasswordempty' => 'Panjenengan ora milih tembung sandhi. Mangga dicoba manèh.', 'passwordtooshort' => 'Tembung sesinglon paling sethithik cacahé {{PLURAL:$1|1 aksara|$1 aksara}}.', 'password-name-match' => 'Tembung sandi panjenengan kudu béda karo jeneng panganggo panjenengan.', +'password-login-forbidden' => 'Pangginaan nami panganggé lan sandi puniki sampun kapenggak.', 'mailmypassword' => 'Kirim tembung sandhi anyar', 'passwordremindertitle' => 'Pèngetan tembung sandhi saka {{SITENAME}}', 'passwordremindertext' => 'Ana wong (mbokmanawa panjenengan dhéwé, saka alamat IP $1) nyuwun supaya dikirimi tembung sandhi anyar kanggo {{SITENAME}} ($4). Tembung sandi sawetara kanggo panganggo "$2" wis digawé lan saiki "$3". Yèn panjenengan pancèn nggayuh iki, mangga énggal mlebu log lan ngganti tembung sandi saiki. @@ -634,7 +629,7 @@ Log pamblokiran pungkasan dituduhaké ing ngisor iki minangka bahan rujukan:', 'usercsspreview' => "'''Pèngeten yèn panjenengan namung mirsani pratilik CSS panjenengan.'''' '''Pratilik iku durung kasimpen!'''", 'userjspreview' => "'''Pèngeten yèn sing panjenengan pirsani namung pratilik JavaScript panjenengan, lan menawa pratilik iku dèrèng kasimpen!'''", -'userinvalidcssjstitle' => "'''Pènget:''' Kulit \"\$1\" ora ditemokaké. Muga dipèngeti yèn kaca .css lan .js nggunakaké huruf cilik, conto {{ns:user}}:Foo/monobook.css lan dudu {{ns:user}}:Foo/Monobook.css.", +'userinvalidcssjstitle' => "'''Pènget:''' Kulit \"\$1\" ora ditemokaké. Muga dipèngeti yèn kaca .css lan .js nggunakaké huruf cilik, conto {{ns:user}}:Foo/vector.css lan dudu {{ns:user}}:Foo/Vector.css.", 'updated' => '(Dianyari)', 'note' => "'''Cathetan:'''", 'previewnote' => "'''Mugi dipun-gatosaken bilih punika nembé awujud pratilik kémawon, dèrèng kasimpen!'''", @@ -667,7 +662,6 @@ Panjenengan namung prelu nggabungaké pangowahan panjenengan karo tèks sing wis Menawa panjenengan ora kersa menawa tulisan panjenengan bakal disunting karo disebar, aja didokok ing kéné.
    Panjenengan uga janji menawa apa-apa sing katulis ing kéné, iku karyané panjenengan dhéwé, utawa disalin saka sumber bébas. '''AJA NDOKOK KARYA SING DIREKSA DÉNING UNDHANG-UNDHANG HAK CIPTA TANPA IDIN!'''", 'copyrightwarning2' => "Mangga digatèkaké yèn kabèh kontribusi marang {{SITENAME}} bisa disunting, diowahi, utawa dibusak déning penyumbang liyané. Yèn panjenengan ora kersa yèn tulisan panjenengan bisa disunting wong liya, aja ngirim artikel panjenengan ing kéné.
    Panjenengan uga janji yèn tulisan panjenengan iku kasil karya panjenengan dhéwé, utawa disalin saka sumber umum utawa sumber bébas liyané (mangga delengen $1 kanggo informasi sabanjuré). '''AJA NGIRIM KARYA SING DIREKSA DÉNING UNDHANG-UNDHANG HAK CIPTA TANPA IDIN!'''", -'longpagewarning' => "'''PÈNGET: Kaca iki dawané $1 kilobita; sawetara panjlajah wèb mbokmenawa ngalami masalah kanggo nyunting kaca sing dawané 32 kb utawa luwih. Muga digalih dhisik mbokmenawa kaca iki bisa dipérang dadi pirang-pirang kaca sing luwih cilik.'''", 'longpageerror' => "'''KALUPUTAN: Tèks sing panjenengan kirim gedhéné $1 kilobita, sing tegesé luwih gedhé tinimbang cacah maksimum $2 kilobita. Tèks iki ora bisa disimpen.'''", 'readonlywarning' => "'''PÈNGET: Basis data lagi dikunci amerga ana pangopènan, dadi saiki panjenengan ora bisa nyimpen kasil panyuntingan panjenengan. Panjenengan mbokmenawa prelu mindhahaké kasil panyuntingan panjenengan iki menyang panggonan liya kanggo disimpen bésuk.''' @@ -1073,7 +1067,9 @@ Panjenengan uga bisa milih supaya wong liya ngubungi panjenengan liwat jeneng pa 'prefs-advancedrendering' => 'Opsi lanjutan', 'prefs-advancedsearchoptions' => 'Opsi lanjutan', 'prefs-advancedwatchlist' => 'Opsi lanjutan', -'prefs-display' => 'Opsi tampilan', +'prefs-displayrc' => 'Opsi tampilan', +'prefs-displaysearchoptions' => 'Opsi tampilan', +'prefs-displaywatchlist' => 'Opsi tampilan', 'prefs-diffs' => 'Prabédan', # User rights @@ -1179,7 +1175,6 @@ Panjenengan uga bisa milih supaya wong liya ngubungi panjenengan liwat jeneng pa 'right-siteadmin' => 'Kunci lan buka kunci basis data', 'right-reset-passwords' => 'Setèl ulang tembung sandi panganggo liya', 'right-override-export-depth' => "Èkspor kaca klebu kaca kagandhèng nganti tataran/''depth'' 5", -'right-versiondetail' => 'Tuduhaké informasi vèrsi piranti alus sing luwih pepak', 'right-sendemail' => 'Ngirim layang listrik (e-mail) menyang panganggo liya', # User rights log @@ -1230,14 +1225,9 @@ Panjenengan uga bisa milih supaya wong liya ngubungi panjenengan liwat jeneng pa 'recentchanges-legend' => 'Pilihan owah-owahan pungkasan', 'recentchangestext' => 'Runutna owah-owahan pungkasan ing wiki iki ing kaca iki.', 'recentchanges-feed-description' => "Urutna owah-owahan anyar ing wiki ing ''feed'' iki.", -'recentchanges-label-legend' => 'Katrangan: $1.', -'recentchanges-legend-newpage' => '$1 - kaca anyar', 'recentchanges-label-newpage' => 'Suntingan iki gawé kaca anyar', -'recentchanges-legend-minor' => '$1 - suntingan sithik', 'recentchanges-label-minor' => 'Iki suntingan sithik', -'recentchanges-legend-bot' => '$1 - suntingan bot', 'recentchanges-label-bot' => 'Suntingan iki diayahi déning bot', -'recentchanges-legend-unpatrolled' => '$1 - suntingan ora kapatroli', 'recentchanges-label-unpatrolled' => 'Suntingan iki durung dipatroli', 'rcnote' => 'Ing ngisor iki kapacak {{PLURAL:$1|pangowahan|owah-owahan}} pungkasan ing $2 dina pungkasan ing $5, $4.', 'rcnotefrom' => 'Ing ngisor iki owah-owahan wiwit $2 (kapacak nganti $1 owah-owahan).', @@ -1338,7 +1328,6 @@ mbalik lan gunakna jeneng liya. Yèn isih ngersakaké ngunggahaké, mangga berkas diunggahaké manèh mawa jeneng liya. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Berkas iki duplikat utawa padha karo {{PLURAL:$1|berkas|berkas-berkas}} ing ngisor:', 'file-deleted-duplicate' => 'Sawijining berkas persis berkas iki ([[:$1]]) wis tau dibusak. Mangga panjenengan priksani sajarah pambusakan berkas kasebut sadurungé nerusaké ngunggahaké berkas kuwi manèh.', -'successfulupload' => 'Kasil diamot', 'uploadwarning' => 'Pèngetan pangunggahan berkas', 'savefile' => 'Simpen berkas', 'uploadedimage' => 'gambar "[[$1]]" kaunggahaké', @@ -1364,6 +1353,11 @@ Mangga priksanen $1 sadurungé ngunggahaké berkas iku manèh.', Panjenengan kudu nggalih perlu utawa ora mbanjuraké pangunggahan berkas ini. Log pambusakan berkas iki kaya mangkéné:", 'filename-bad-prefix' => "Jeneng berkas sing panjenengan unggahaké, diawali mawa '''\"\$1\"''', sing sawijining jeneng non-dèskriptif sing biasané diwènèhaké sacara otomatis déning kamera digital. Mangga milih jeneng liyané sing luwih dèskriptif kanggo berkas panjenengan.", +'upload-success-subj' => 'Kasil diamot', +'upload-failure-msg' => 'Ana prakara karo pangunggahan panjenengan seka [$2]: +$1', +'upload-warning-subj' => 'Pèngetan pangunggahan berkas', +'upload-warning-msg' => 'Ana masalah ing pangunggahan panjenengan saka [$2]. Panjenengan bisa bali menyang [[Special:Upload/stash/$1|upload form]] kanggo mrantasi masalah iki', 'upload-proto-error' => 'Protokol ora bener', 'upload-proto-error-text' => 'Pangunggahan jarah adoh mbutuhaké URL sing diawali karo http:// utawa ftp://.', @@ -1518,7 +1512,6 @@ Priksanen dhisik pranala-pranala menyang cithakan iki sadurungé mbusak.', 'statistics-edits-average' => 'Rata-rata suntingan saben kaca', 'statistics-views-total' => 'Gunggung panampilan kaca', 'statistics-views-peredit' => 'Gunggung/cacahing panampilan saben suntingan', -'statistics-jobqueue' => 'Dawaning [http://www.mediawiki.org/wiki/Manual:Job_queue antrian pegawéan]', 'statistics-users' => 'Gunggung [[Special:ListUsers|panganggo kadaftar]]', 'statistics-users-active' => 'Para panganggo aktif', 'statistics-users-active-desc' => 'Panganggo sing ngayahi aktivitas jroning {{PLURAL:$1|dia|$1 dina}} pungkasan', @@ -1531,9 +1524,9 @@ Kaca-kaca iku sajatiné kuduné nyambung menyang topik-topik sing bener.
    Sawijining kaca dianggep minangka kaca disambiguasi yèn kaca iku nganggo cithakan sing nyambung menyang [[MediaWiki:Disambiguationspage]].", 'doubleredirects' => 'Pangalihan dobel', -'doubleredirectstext' => 'Kaca iki ngandhut daftar kaca sing ngalih ing kaca pangalihan liyané. +'doubleredirectstext' => 'Kaca iki ngandhut daftar kaca sing ngalih ing kaca pangalihan liyané. Saben baris ngandhut pranala menyang pangalihan kapisan lan kapindho, sarta tujuan saka pangalihan kapindho, sing biasané kaca tujuan sing "sajatiné", yakuwi pangalihan kapisan kuduné dialihaké menyang kaca tujuan iku. -Jeneng sing wis dicorèk tegesé wis rampung didandani.', +Jeneng sing wis dicorèk tegesé wis rampung didandani.', 'double-redirect-fixed-move' => '[[$1]] wis kapindhahaké, saiki dadi kaca peralihan menyang [[$2]]', 'double-redirect-fixer' => 'Révisi pangalihan', @@ -1718,6 +1711,7 @@ Informasi tambahan perkara hak-hak individual bisa ditemokaké ing [[{{MediaWiki Alamat layang-e sing panjenengan lebokaké ing [[Special:Preferences|préferèsi panjenengan]] bakal dadi alamat "Saka" jroning layang-e kasebut, mula panampa layang-e bakal bisa mbalesi langsung menyang panjenengan.', 'usermailererror' => 'Kaluputan obyèk layang:', 'defemailsubject' => 'Layang e-mail {{SITENAME}}', +'usermaildisabled' => 'E-mail panganggo dinonaktifaké', 'noemailtitle' => 'Ora ana alamat layang e-mail', 'noemailtext' => 'Panganggo iki ora mènèhi alamat layang-e sing absah.', 'nowikiemailtitle' => 'Layang-e ora diidinaké', @@ -1737,7 +1731,7 @@ Alamat layang-e sing panjenengan lebokaké ing [[Special:Preferences|préferèsi # Watchlist 'watchlist' => 'Daftar artikel pilihan', 'mywatchlist' => 'Daftar pangawasanku', -'watchlistfor' => "(kanggo '''$1''')", +'watchlistfor2' => 'Kanggo $1 $2', 'nowatchlist' => 'Daftar pangawasan panjenengan kosong.', 'watchlistanontext' => 'Mangga $1 kanggo mirsani utawa nyunting daftar pangawasan panjenengan.', 'watchnologin' => 'Durung mlebu log', @@ -1849,7 +1843,10 @@ Suntingan pungkasan dilakoni déning [[User:$3|$3]] ([[User talk:$3|Wicara]]{{in 'revertpage' => 'Suntingan [[Special:Contributions/$2|$2]] ([[User talk:$2|dhiskusi]]) dipunwangsulaken dhateng ing vèrsi pungkasan déning [[User:$1|$1]]', 'rollback-success' => 'Suntingan dibalèkaké déning $1; diowahi bali menyang vèrsi pungkasan déning $2.', -'sessionfailure' => 'Katoné ana masalah karo sèsi log panjenengan; log panjenengan wis dibatalaké kanggo nyegah pambajakan. Mangga mencèt tombol "back" lan unggahaké manèh kaca sadurungé mlebu log, lan coba manèh.', + +# Edit tokens +'sessionfailure-title' => 'Sèsi gagal', +'sessionfailure' => 'Katoné ana masalah karo sèsi log panjenengan; log panjenengan wis dibatalaké kanggo nyegah pambajakan. Mangga mencèt tombol "back" lan unggahaké manèh kaca sadurungé mlebu log, lan coba manèh.', # Protect 'protectlogpage' => 'Log pangreksan', @@ -2052,7 +2049,6 @@ Pirsani [[Special:IPBlockList|Daftar blokir IP]] kanggo ninjo ulang pamblokiran. 'ipb-edit-dropdown' => 'Sunting alesan pamblokiran', 'ipb-unblock-addr' => 'Ilangna blokir $1', 'ipb-unblock' => 'Ilangna blokir sawijining panganggo utawa alamat IP', -'ipb-blocklist-addr' => 'Blokir sing dipatrapaké kanggo $1', 'ipb-blocklist' => 'Ndeleng blokir sing lagi ditrapaké', 'ipb-blocklist-contribs' => 'Kontribusi kanggo $1', 'unblockip' => 'Jabel blokir marang alamat IP utawa panganggo', @@ -2459,10 +2455,10 @@ $1', 'imagemaxsize' => "Wates ukuran gambar:
    ''(kanggo kaca dhèskripsi berkas)''", 'thumbsize' => 'Ukuran gambar cilik (thumbnail):', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|kaca|kaca}}', -'file-info' => '(ukuran berkas: $1, tipe MIME: $2)', -'file-info-size' => '($1 × $2 piksel, ukuran berkas: $3, tipe MIME: $4)', +'file-info' => 'ukuran berkas: $1, tipe MIME: $2', +'file-info-size' => '$1 × $2 piksel, ukuran berkas: $3, tipe MIME: $4', 'file-nohires' => 'Ora ana résolusi sing luwih dhuwur.', -'svg-long-desc' => '(Berkas SVG, nominal $1 × $2 piksel, gedhené berkas: $3)', +'svg-long-desc' => 'Berkas SVG, nominal $1 × $2 piksel, gedhené berkas: $3', 'show-big-image' => 'Résolusi kebak', 'show-big-image-thumb' => 'Ukuran pratayang iki: $1 × $2 piksel', 'file-info-gif-looped' => 'mubeng', @@ -2984,6 +2980,14 @@ Katrangan tampilan: 'tags-edit' => 'sunting', 'tags-hitcount' => '$1 {{PLURAL:$1|pangowahan|pangowahan}}', +# Special:ComparePages +'comparepages' => 'Bandhingna kaca', +'compare-selector' => 'Bandhingna révisi kaca', +'compare-page1' => 'Kaca 1', +'compare-page2' => 'Kaca 2', +'compare-rev1' => 'Révisi 1', +'compare-rev2' => 'Révisi 2', + # Database error messages 'dberr-header' => 'Wiki iki duwé masalah', 'dberr-problems' => 'Nyuwun ngapura! Situs iki ngalami masalah tèknis.', diff --git a/languages/messages/MessagesKa.php b/languages/messages/MessagesKa.php index d4b27fc5..5659a203 100644 --- a/languages/messages/MessagesKa.php +++ b/languages/messages/MessagesKa.php @@ -8,10 +8,12 @@ * @file * * @author Alsandro + * @author Andrijko Z. * @author BRUTE * @author Dato deutschland * @author David1010 * @author Dawid Deutschland + * @author ITshnik * @author Malafaya * @author Reedy * @author Sopho @@ -25,8 +27,8 @@ $namespaceNames = array( NS_MEDIA => 'მედია', NS_SPECIAL => 'სპეციალური', NS_TALK => 'განხილვა', - NS_USER => 'მომხმარებელი', - NS_USER_TALK => 'მომხმარებლის_განხილვა', + NS_USER => 'მონაწილე', + NS_USER_TALK => 'მონაწილის_განხილვა', NS_PROJECT_TALK => '$1_განხილვა', NS_FILE => 'ფაილი', NS_FILE_TALK => 'ფაილის_განხილვა', @@ -42,12 +44,14 @@ $namespaceNames = array( $namespaceAliases = array( 'მომხმარებელი_განხილვა' => NS_USER_TALK, - 'სურათი' => NS_FILE, - 'სურათი_განხილვა' => NS_FILE_TALK, - 'მედიავიკი_განხილვა' => NS_MEDIAWIKI_TALK, - 'თარგი_განხილვა' => NS_TEMPLATE_TALK, - 'დახმარება_განხილვა' => NS_HELP_TALK, - 'კატეგორია_განხილვა' => NS_CATEGORY_TALK, + 'მომხმარებელი' => NS_USER, + 'მომხმარებლის_განხილვა' => NS_USER_TALK, + 'სურათი' => NS_FILE, + 'სურათი_განხილვა' => NS_FILE_TALK, + 'მედიავიკი_განხილვა' => NS_MEDIAWIKI_TALK, + 'თარგი_განხილვა' => NS_TEMPLATE_TALK, + 'დახმარება_განხილვა' => NS_HELP_TALK, + 'კატეგორია_განხილვა' => NS_CATEGORY_TALK, ); $specialPageAliases = array( @@ -103,9 +107,10 @@ $magicWords = array( 'redirect' => array( '0', '#გადამისამართება', '#REDIRECT' ), 'nogallery' => array( '0', '__უგალერეო__', '__NOGALLERY__' ), 'subst' => array( '0', 'მიდგმ:', 'SUBST:' ), - 'img_thumbnail' => array( '1', 'მინიატიურა', 'მინი', 'thumbnail', 'thumb' ), + 'img_thumbnail' => array( '1', 'მინიატიურა', 'მინი', 'მინიასლი', 'ცეროდენა', 'thumbnail', 'thumb' ), 'img_right' => array( '1', 'მარჯვნივ', 'right' ), 'img_left' => array( '1', 'მარცხნივ', 'left' ), + 'img_width' => array( '1', '$1პქ', '$1px' ), 'img_center' => array( '1', 'ცენტრი', 'center', 'centre' ), ); @@ -128,8 +133,7 @@ $messages = array( 'tog-editsection' => 'სექციის რედაქტირების ნებართვა [რედაქტირებული] ბმულების გავლით', 'tog-editsectiononrightclick' => 'სექციის რედაქტირების ნებართვა მარჯვენა ღილაკზე დაჭერით
    სექციის სათაურებზე (ჯავასკრიპტი)', 'tog-showtoc' => 'აჩვენე სარჩევი (სამ ქვესათაურზე მეტის მქონე გვერდებისთვის)', -'tog-rememberpassword' => 'სესიებს შორის პაროლის დამახსოვრება', -'tog-editwidth' => 'რედაქტირების დაფას სრული სიგანე აქვს', +'tog-rememberpassword' => 'დამიმახსოვრე ამ კომპიუტერზე (მაქსიმუმ $1 {{PLURAL:$1|დღე|დღე}})', 'tog-watchcreations' => 'დაამატე ჩემი კონტროლის სიას ჩემს მიერ შექმნილი გვერდები', 'tog-watchdefault' => 'დაამატე ჩემი კონტროლის სიას ჩემს მიერ რედაქტირებული გვერდები', 'tog-watchmoves' => 'ჩასვი გვერდები, რომლებიც მე გადამაქვს, ჩემს კონტროლის სიაში', @@ -275,31 +279,21 @@ $messages = array( 'faqpage' => 'Project:ხშირი შეკითხვები', # Vector skin -'vector-action-addsection' => 'თემის ჩამატება', -'vector-action-delete' => 'წაშლა', -'vector-action-move' => 'გადატანა', -'vector-action-protect' => 'დაცვა', -'vector-action-undelete' => 'აღდგენა', -'vector-action-unprotect' => 'დაცვის მოხსნა', -'vector-namespace-category' => 'კატეგორია', -'vector-namespace-help' => 'დახმარების გვერდი', -'vector-namespace-image' => 'ფაილი', -'vector-namespace-main' => 'გვერდი', -'vector-namespace-media' => 'მედია გვერდი', -'vector-namespace-mediawiki' => 'შეტყობინება', -'vector-namespace-project' => 'პროექტის გვერდი', -'vector-namespace-special' => 'სპეციალური გვერდი', -'vector-namespace-talk' => 'განხილვა', -'vector-namespace-template' => 'თარგი', -'vector-namespace-user' => 'მომხმარებლის გვერდი', -'vector-view-create' => 'შექმნა', -'vector-view-edit' => 'რედაქტირება', -'vector-view-history' => 'ისტორია', -'vector-view-view' => 'შემოწმებული სტატია', -'vector-view-viewsource' => 'წყაროს ხილვა', -'actions' => 'მოქმედებები', -'namespaces' => 'სახელთა სივრცე', -'variants' => 'ვარიანტები', +'vector-action-addsection' => 'თემის ჩამატება', +'vector-action-delete' => 'წაშლა', +'vector-action-move' => 'გადატანა', +'vector-action-protect' => 'დაცვა', +'vector-action-undelete' => 'აღდგენა', +'vector-action-unprotect' => 'დაცვის მოხსნა', +'vector-simplesearch-preference' => 'ძებნის გაფართოებული მინიშნებების ჩართვა (მხოლოდ ვექტორული იერსახისთვის)', +'vector-view-create' => 'შექმნა', +'vector-view-edit' => 'რედაქტირება', +'vector-view-history' => 'ისტორია', +'vector-view-view' => 'შემოწმებული სტატია', +'vector-view-viewsource' => 'წყაროს ხილვა', +'actions' => 'მოქმედებები', +'namespaces' => 'სახელთა სივრცე', +'variants' => 'ვარიანტები', 'errorpagetitle' => 'შეცდომა', 'returnto' => 'დაბრუნდი $1-ზე.', @@ -360,6 +354,9 @@ $messages = array( გთხოვთ დაელოდოთ და გაიმეროთ მოთხოვნა ცოტა მოგვიანებით. $1', +'pool-timeout' => 'ბლოკირების ლოდინის დრო ამოიწურა', +'pool-queuefull' => 'მოთხოვნების დამგროვებელი სავსეა', +'pool-errorunknown' => 'უცნობი შეცდომა', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}}-ის შესახებ', @@ -524,7 +521,8 @@ $2', 'yourname' => 'მომხმარებელი:', 'yourpassword' => 'პაროლი:', 'yourpasswordagain' => 'ხელმეორედ შეიყვანეთ პაროლი', -'remembermypassword' => 'დამიმახსოვრე', +'remembermypassword' => 'დამიმახსოვრე ამ კომპიუტერზე (მაქსიმუმ $1 {{PLURAL:$1|დღე}})', +'securelogin-stick-https' => 'გააგრძელეთ კავშირი HTTPS-თან შესვლის შემდეგ', 'yourdomainname' => 'თქვენი დომენი', 'externaldberror' => 'საგარეო მონაცემთა ბაზაში აუტენტიფიკაციის შეცდომაა, ან თქვენ არ გაქვთ საკმარისი უფლებები საგარეო ანგარიშში ცვლილებების შესატანად.', 'login' => 'შესვლა', @@ -541,6 +539,7 @@ $2', 'gotaccount' => "უკვე რეგისტრირებული ხართ? '''$1'''", 'gotaccountlink' => 'შესვლა', 'createaccountmail' => 'ელ-ფოსტით', +'createaccountreason' => 'მიზეზი:', 'badretype' => 'თქვენს მიერ შეყვანილი პაროლები ერთმანეთს არ ემთხვევა.', 'userexists' => 'შეყვანილი სახელი უკვე გამოყენებულია. გთხოვთ აირჩიოთ სხვა სახელი.', 'loginerror' => 'შეცდომა შესვლაში', @@ -561,6 +560,7 @@ $2', 'passwordtooshort' => 'შეტანილი პაროლი ძალიან მოკლეა. იგი უნდა შეიცავდეს მინიმუმ $1 სიმბოლოს.', 'password-name-match' => 'შეტანილი პაროლი უნდა განსხვავდებოდეს მომხმარებლის სახელისგან.', +'password-login-forbidden' => 'ამ მომხმარებლის სახელისა და პაროლის გამოყენება აკრძალულია.', 'mailmypassword' => 'ახალი პაროლის გამოგზავნა', 'passwordremindertitle' => 'ახალი დროებითი პაროლი {{SITENAME}}-თვის', 'passwordremindertext' => "ვიღაცამ (შესაძლოა თქვენ, IP მისამართით $1) მოითხოვა @@ -604,6 +604,9 @@ $1 საათში.', 'loginlanguagelabel' => 'ენა: $1', 'suspicious-userlogout' => 'თქვენი მოთხოვნა გასვლის შესახებ გაუქმებულია, რადგანაც იგი გავს ქეშირებადი პროქსის ან არაკორექტული ბრაუზერის მოთხოვნას.', +# E-mail sending +'php-mail-error-unknown' => 'ამოუცნობი შეცდომა PHP-ის mail() ფუნქციაში', + # Password reset dialog 'resetpass' => 'შეცვალეთ პაროლი', 'resetpass_announce' => 'თქვენ შემოხვედით დროებით ელ-ფოსტის კოდით. რეგისტრაციის დასრულებისთვის, უნდა შექმნათ ახალი პაროლი აქ:', @@ -655,10 +658,11 @@ $1 საათში.', 'showlivepreview' => 'შავი ნიმუში', 'showdiff' => 'ცვლილებების ჩვენება', 'anoneditwarning' => "'''გაფრთხილება:''' თქვენ არ ხართ რეგისტრირებული. თქვენი IP მისამართი ჩაიწერება ამ გვერდის რედაქტირების ისტორიაში.", +'anonpreviewwarning' => "''თქვენ არ შესულხართ სისტემაში. თქვენი IP მისამართი შეინახება გვერდის ისტორიაში. ''", 'missingsummary' => "'''შეხსენება:''' თქვენ არ მიგითითებიათ რედაქტირების რეზიუმე. თუ ისევ დააწკაპუნებთ შენახვაზე, თქვენი რედაქტირება რეზიუმეს გარეშე დამახსოვრდება.", 'missingcommenttext' => 'გთხოვთ კომენტარი შეიყვანოთ ქვემოთ.', -'missingcommentheader' => "'''შეხსენება:''' თქვენ ამ კომენტარისთვის სათაური/თემა არ მიგითითებიათ. თუ შენახვაზე დააწკაპუნებთ, თქვენი ცვლილება მის გარეშე იქნება შენახული.", +'missingcommentheader' => "'''შეხსენება:''' თქვენ ამ კომენტარისთვის სათაური/თემა არ მიგითითებიათ. თუ შენახვაზე \"{{int:savearticle}}\" დააწკაპუნებთ, თქვენი ცვლილება მის გარეშე იქნება შენახული.", 'summary-preview' => 'რეზიუმეს წინასწარი გადახედვა:', 'subject-preview' => 'თემის/სათაურის წინასწარი გადახედვა:', 'blockedtitle' => 'მომხმარებელი ბლოკირებულია', @@ -734,7 +738,11 @@ $1 საათში.', 'userjsyoucanpreview' => "'''რჩევა:''' შენახვამდე გამოიყენეთ ღილაკი \"{{int:showpreview}}\" თქვენი ახალი JS ტესტირებისთვის.", 'usercsspreview' => "'''გახსოვდეთ, რომ თქვენ მხოლოდ წინასწარ გადახედვას უყურებთ თქვენს მომხმარებლის CSS-ს, ის ჯერ შენახული არ არის!'''", 'userjspreview' => "'''გახსოვდეთ, რომ თქვენ მხოლოდ ტესტირებას უკეთებთ ან აკვირდებით წინასწარ ხედს თქვენი მომხმარებლის ჯავასკრიპტს - ის ჯერ არ არის დამახსოვრებული!'''", -'userinvalidcssjstitle' => "'''ყურადღება:''' გაფორმების თემა «$1» არ არის ნაპოვნი. გახსოვდეთ, რომ .css და .js გვერდებს უნდა ჰქონდეს მხოლოდ ზეხაზური სათაური, მაგ. «{{ns:user}}:ვიღაცა/monobook.css», და არა «{{ns:user}}:ვიღაცა/Monobook.css».", +'sitecsspreview' => "'''გახსოვდეთ, რომ თქვენ ამ CSS-ის მხოლოდ წინასწარ გადახედვას უყურებთ.''' +'''ის ჯერ არ არის დამახსოვრებული!'''", +'sitejspreview' => "'''გახსოვდეთ, რომ თქვენ ამ JavaScript კოდის მხოლოდ წინასწარ გადახედვას უყურებთ.''' +'''ის ჯერ არ არის დამახსოვრებული!'''", +'userinvalidcssjstitle' => "'''ყურადღება:''' გაფორმების თემა «$1» არ არის ნაპოვნი. გახსოვდეთ, რომ .css და .js გვერდებს უნდა ჰქონდეს მხოლოდ ზეხაზური სათაური, მაგ. «{{ns:user}}:ვიღაცა/vector.css», და არა «{{ns:user}}:ვიღაცა/Vector.css».", 'updated' => '(განახლდა)', 'note' => "'''შენიშვნა:'''", 'previewnote' => "'''ეს მხოლოდ ნიმუშია; ცვლილებები ჯერ არ შენახულა!'''", @@ -769,7 +777,6 @@ $1 საათში.', *თუ არ გსურთ, რომ თქვენი ნამუშევარი შეუზღუდავად იქნეს რედაქტირებული, მას აქ ნუ განათავსებთ.
    *თქვენ აგრეთვე პირობას დებთ, რომ თქვენს მიერ განთავსებული ტექსტი თქვენი დაწერილია, ან გადმოწერილია საზოგადოებრივი დომენიდან ან მსგავსი თავისუფალი წყაროდან. (იხ. $1 დეტალებისთვის). *'''ნუ შემოიტანთ საავტორო უფლებებით დაცულ ნაშრომს ავტორის ნებართვის გარეშე!'''", -'longpagewarning' => "'''გაფრთხილება: ეს გვერდი $1 კილობაიტია; ზოგიერთ ბრაუზერს უჭირს გვერდების რედაქტირება, რომელთა ზომა აღემატება 32 კბ-ს. გთხოვთ იქონიოთ მხედეველობაში შედარებით მცირე სექციებად გვერდის გაყოფა.'''", 'longpageerror' => "'''შეცდომა: თქვენს მიერ შემოტანილი ტექსტი $1 კილობაიტია, რაც აღემატება მაქსიმალურად დასაშვებ $2 კბ-ს. მისი შენახვა შეუძლებელია.'''", 'readonlywarning' => "'''გაფრთხილება''': მონაცემთა ბაზა დახურულია პერიოდული შემოწმებისთვის, შესაბამისად თქვენ ვერ შეძლებთ რედაქტირებას ამ მომენტში. სასურველია ტექსტის ასლი შეინახოთ ტექსტურ რედაქტორში და მოგვიანებით შემოიტანოთ. @@ -948,6 +955,8 @@ $1", 'logdelete-failure' => "'''ჟურნალის ხილვადობა არ არის დაყენებული:''' $1", 'revdel-restore' => 'ხილვადობის შეცვლა', +'revdel-restore-deleted' => 'წაშლილი ვერსიები', +'revdel-restore-visible' => 'ხილვადი ვერსიები', 'pagehist' => 'გვერდის ისტორია', 'deletedhist' => 'წაშლილი ისტორია', 'revdelete-content' => 'შინაარსი', @@ -1012,11 +1021,13 @@ $1", # Diffs 'history-title' => '"$1" ცვლილებათა ისტორია', 'difference' => '(სხვაობა ვერსიებს შორის)', +'difference-multipage' => '(განსხვავება გვერდებს შორის)', 'lineno' => 'ხაზი $1:', 'compareselectedversions' => 'არჩეული ვერსიების შედარება', 'showhideselectedversions' => 'ჩვენება/დამალვა არჩეული ვერსიებისა', 'editundo' => 'გაუქმება', -'diff-multi' => '({{PLURAL:$1|ერთი|$1}} შუა ვერსია არ არის ნაჩვენები.)', +'diff-multi' => '({{PLURAL:$2|ერთი მომხმარებლის|$2 მომხმარებლების}} {{PLURAL:$1|ერთი შუალედური ვერსია|$1 შუალედური ვერსიები}} არ არის ნაჩვენები.)', +'diff-multi-manyusers' => '({{PLURAL:$2|ერთი მომხმარებლის|$2 მომხმარებლების}} {{PLURAL:$1|ერთი შუალედური ვერსია|$1 შუალედური ვერსიები}}, რომლებიც არ არის ნაჩვენები.)', # Search results 'searchresults' => 'ძიების შედეგები', @@ -1051,6 +1062,7 @@ $1", 'searchprofile-everything-tooltip' => 'ყველა გვერდზე ძიება (მათ შორის განხილვის გვერდები)', 'searchprofile-advanced-tooltip' => 'ძიება სახელთა მოცემულ სივრცეში', 'search-result-size' => '$1 ($2 სიტყვა)', +'search-result-category-size' => '{{PLURAL:$1|$1 ელემენტი|$1 ელემენტი|$1 ელემენტები}} ({{PLURAL:$2|$2 ქვეკატეგორია|$2 ქვეკატეგორიები|$2 ქვეკატეგორიები}}, {{PLURAL:$3|$3 ფაილი|$3 ფაილი|$3 ფაილი}})', 'search-result-score' => 'რელევანტურობა $1 %', 'search-redirect' => '(გადამისამართება $1)', 'search-section' => '(სექცია $1)', @@ -1126,6 +1138,7 @@ $1", 'contextlines' => 'სტრიქონები შედეგის მიხედვით', 'contextchars' => 'კონტექსტი სტრიქონების მიხედვით', 'stub-threshold' => 'გაფორმების გასაუმჯობესებლადმოცემულია ესკიზების ბმულებია (ბაიტებში):', +'stub-threshold-disabled' => 'გათიშულია', 'recentchangesdays' => 'დღეების ჩვენება ბოლო ცვლილებებში:', 'recentchangesdays-max' => 'მაქსიმუმ $1 {{PLURAL:$1|დღე}}', 'recentchangescount' => 'რედაქციების რაოდენობა საჩვენებლად:', @@ -1159,6 +1172,7 @@ $1", 'prefs-files' => 'ფაილები', 'prefs-custom-css' => 'მომხმარებლის CSS', 'prefs-custom-js' => 'მომხმარებლის JS', +'prefs-common-css-js' => 'ზოგადი CSS/JS ყველა თემისთვის:', 'prefs-reset-intro' => 'ეს გვერდი შეიძლება გამოყენებული იქნეს თქვენი კონფიგურაციის შესაცვლელად საწყის კონფიგურაციაზე. ამ მოქმედების დადასტურების შემთხვევაში, თქვენ ვეღარ შეძლებთ მის გაუქმებას.', 'prefs-emailconfirm-label' => 'ელ–ფოსტის დადასტურება:', 'prefs-textboxsize' => 'რედაქტირების ფანჯრის ზომა', @@ -1196,9 +1210,15 @@ $1", 'prefs-advancedrendering' => 'გაფართოებული პარამეტრები', 'prefs-advancedsearchoptions' => 'გაფართოებული პარამეტრები', 'prefs-advancedwatchlist' => 'გაფართოებული კონფიგურაციები', -'prefs-display' => 'გამოსახვის კონფიგურაციები', +'prefs-displayrc' => 'გამოსახვის კონფიგურაციები', +'prefs-displaysearchoptions' => 'გამოსახვის კონფიგურაციები', +'prefs-displaywatchlist' => 'გამოსახვის კონფიგურაციები', 'prefs-diffs' => 'სხვაობა ვერსიებს შორის', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'ელ-ფოსტის მისამართი სწორად გამოიყურება', +'email-address-validity-invalid' => 'მიუთითეთ სწორი ელ-ფოსტის მისამართი', + # User rights 'userrights' => 'მომხმარებელთა უფლებების მართვა', 'userrights-lookup-user' => 'მომხმარებელთა ჯგუფების მართვა', @@ -1282,6 +1302,7 @@ $1", 'right-hideuser' => 'მომხმარებლის სახელის დაბლოკვა და მისი დამალვა საზოგადოებისგან', 'right-ipblock-exempt' => 'IP ბლოკის, ავტობლოკის და დიაპაზონთა ბლოკის გასვლა', 'right-proxyunbannable' => 'პროქსის ავტობლოკის გადასვლა', +'right-unblockself' => 'მოხსნან ბლოკი თვითონ', 'right-protect' => 'გვერდების დაცვის დონის შეცვლა და დაცული გვერდების რედაქტირება', 'right-editprotected' => 'დაცული გვერდების რედაქტირება (იერარქიული დაცვის გარეშე)', 'right-editinterface' => 'მომხმარებლის ინტერფეისის შეცვლა', @@ -1304,7 +1325,6 @@ $1", 'right-siteadmin' => 'მონაცემთა ბაზის დაბლოკვა და განბლოკვა', 'right-reset-passwords' => 'სხვა მომხმარებლების პაროლების ჩაშვება', 'right-override-export-depth' => 'გვერდების ექსპორტირება, დაკავშირებული გვერდების ჩათვლით 5-მდე სიიღრმით', -'right-versiondetail' => 'დამატებითი ინფორმაციის ხილვა პროგრამული უზრუნველყოფაზე', 'right-sendemail' => 'გაგუგზავნე ელექტრონული ფოსტა სხვა მომხმარებლებს', # User rights log @@ -1355,14 +1375,9 @@ $1", 'recentchanges-legend' => 'ბოლო ცვლილებების პარამეტრები', 'recentchangestext' => 'უთვალთვალეთ ვიკიში ბოლო ცვლილებებს ამ გვერდზე.', 'recentchanges-feed-description' => 'ვიკის უახლესი ცვლილებების მეთვალყურეობა ამ არხში.', -'recentchanges-label-legend' => 'ლეგენდა: $1.', -'recentchanges-legend-newpage' => '$1 - ახალი გვერდი', 'recentchanges-label-newpage' => 'ამ რედაქტირებით შეიქმნა ახალი გვერდი', -'recentchanges-legend-minor' => '$1 - მცირე რედაქტირება', 'recentchanges-label-minor' => 'ეს არის მცირე შესწორება', -'recentchanges-legend-bot' => '$1 — ბოტის რედაქტირება', 'recentchanges-label-bot' => 'ეს არის ბოტის რედაქტირება', -'recentchanges-legend-unpatrolled' => '$1 - გადაუმოწმებელი შესწორება', 'recentchanges-label-unpatrolled' => 'ეს რედაქტირება გადაუმოწმებელია', 'rcnote' => "ქვემოთ იხილეთ ბოლო '''$1''' ცვლილება უკანასკნელი '''$2''' დღის მანძილზე, $5, $4 მდგომარეობით.", 'rcnotefrom' => "ქვემოთ მოყვანილია ცვლილებები '''$2'''-დან (ნაჩვენებია '''$1''').", @@ -1409,6 +1424,9 @@ $1", 'upload_directory_missing' => 'შესანახი დირექტორია ($1) არ არსებობს და მისი აღდგენა ვებ-სერვერის მიერ შეუძლებელია.', 'upload_directory_read_only' => 'ვებსერვერი ვერ იწერს ატვირთვის დირექტორიაში ($1).', 'uploaderror' => 'ატვირთვის შეცდომა', +'upload-recreate-warning' => "'''ყურადღება. ფაილი ამ სახელით წაიშალა ან გადატანილი იქნა.'' + +ჟურნალი იხილეთ ქვემოთ:", 'uploadtext' => "ამ ფორმის გამოყენებისას თქვენ შეძლებთ სერვერზე ფაილების ატვირთვას. ადრე ატვირთული ფაილების სანახავად მიმართეთ [[Special:FileList|ატვირთულ ფაილთა სიას]].ატვირთული ფაილები ასევე ჩაიწერება [[Special:Log/upload|ატვირთვათა ჟურნალში]], ხოლო წაშლილი ფაილები ჩაიწერება [[Special:Log/delete|წაშლათა ჟურნალში]]. @@ -1443,6 +1461,17 @@ $1", 'filetype-banned-type' => "'''\".\$1\"''' მიუღებელი ფაილის ტიპია. მიღებული ფაილის {{PLURAL:\$3|ტიპია|ტიპებია}} \$2.", 'filetype-missing' => 'ფაილს არ აქვს გაფართოება (მაგ.: ".jpg").', +'empty-file' => 'არჩეული ფაილი ცარიელია.', +'file-too-large' => 'ფაილი ძალიან დიდია', +'filename-tooshort' => 'ფაილის სახელი ზედმეტად მოკლეა', +'filetype-banned' => 'ფაილის ეს ტიპი აკრძალულია', +'verification-error' => 'ამ ფაილმა არ გაიარა შემოწმების პროცედურა.', +'hookaborted' => 'თქვენ მიერ შემოთავაზებული ცვლილება მოინიშნა გაფართოების დოკუმენტაციაში.', +'illegal-filename' => 'ფაილის ეს სახელი აკრძალულია.', +'overwrite' => 'არსებული ფაილის შეცვლა მიუღებელია.', +'unknown-error' => 'არასწორი შეცდომა.', +'tmp-create-error' => 'შეუძლებელია დროებითი ფაილის შექმნა.', +'tmp-write-error' => 'დროებითი ფაილის წერისას შეცდომა.', 'large-file' => 'სასურველია ფაილი არ აღემატებოდეს $1-ს; ეს ფაილია $2.', 'largefileserver' => 'ეს ფაილი სერვერის მიერ დაშვებულ ზომას აღემატება.', 'emptyfile' => 'თქვენს მიერ ჩატვირთული ფაილი ცარიელია. შესაძლოა, შეცდომა მოხდა ფაილის სახელის აკრეფის დროს. გთხოვთ შეამოწმოთ ნამდვილად გსურთ თუ არა ამ ფაილის ჩატვირთვა.', @@ -1467,13 +1496,14 @@ $1", 'fileexists-shared-forbidden' => 'ფაილი ამ სახელწოდებით უკვე არსებობს ფაილების საერთო საცავში. თუ შეიძლება, უკან დაბრუნდით და ჩატვირთეთ ფაილი სხვა სახელწოდებით. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'ეს ფაილი არის შემდეგი {{PLURAL:$1|შემდეგი ფაილის|сშემდეგი ფაილების}} დუბლიკატი:', 'file-deleted-duplicate' => 'მსგავსი ფაილი ([[:$1]]) უკვე წაშლილა. გთხოვთ, გაეცანით ფაილის წაშლის ისტორიას, მანამდე ვიდრე მას ხელმეორედ ატვირტავთ.', -'successfulupload' => 'წარმატებული გადატვირთვა', 'uploadwarning' => 'გადატვირთვის შეხსენება', 'uploadwarning-text' => 'გთხოვთ ჩაასწოროთ ფაილის აღწერა ქვევით და ხელმეორედ სცადოთ.', 'savefile' => 'ფაილის შენახვა', 'uploadedimage' => 'დამატება "[[$1]]"', 'overwroteimage' => 'ატვირთულია "[[$1]]"-ის ახალი ვერსია', 'uploaddisabled' => 'ატვირთვა შეუძლებელია', +'copyuploaddisabled' => 'URL ატვირთვა გაღიშულია', +'uploadfromurl-queued' => 'თქვენი ატვირთვა რიგში ჩადგა.', 'uploaddisabledtext' => 'ფაილების ატვირთვა შეუძლებელია.', 'php-uploaddisabledtext' => 'ფაილების ატვირთვა შეჩერებულია PHP-ით. გთხოვთ შეამოწმოთ file_uploads-ის მნიშვნელობა.', 'uploadscripted' => 'ფაილი შეიცავს HTML-კოდს, ან სკრიპტს, რომელიც ბროუზერმა შეიძლება არასწორედ გაანალიზოს.', @@ -1493,6 +1523,14 @@ $1", გთხოვთ დაფიქრდეთ რამდენად მიზანშეწონილია ამ ფაილის აქ ატვირთვა. ინფორმაციისთვის ქვემოთ ამ ფაილის წაშლის ისტორია:", 'filename-bad-prefix' => "ასატვირთვი ფაილი იწყება '''«$1»''', რაც არის ფოტოკამერის მიერ სურათებისთვის მიცემული სტანდარტული სახელი. გთხოვთ აირჩიოთ ფაილის აღმწერი უკეთესი სახელი.", +'upload-success-subj' => 'წარმატებული გადატვირთვა', +'upload-success-msg' => 'თქვენი ატვირთვა [$2] შეგიძლიათ იხილოთ აქ: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'ატვირთვის პრობლემა', +'upload-failure-msg' => 'ატვირთვისას პრობლემა შეიქმნა [$2]: + +$1', +'upload-warning-subj' => 'ატვირთვისთვის გაფრთხილება', +'upload-warning-msg' => '[$2]-ის ატვირთვისას დაფიქსირდა შეცდომა. შეცდომის გამოსასწორებლად დაბრუნდით [[Special:Upload/stash/$1|ატვირთვის ფორმა]]ზე.', 'upload-proto-error' => 'არასწორი პროტოკოლი', 'upload-proto-error-text' => 'ატვირთვის წასაშლელად საჭიროა მისამართი, რომელიც იწყება http:// or ftp://-ით.', @@ -1557,6 +1595,7 @@ $1", 'listfiles_search_for' => 'ძიება სურათის სახელის მიხედვით:', 'imgfile' => 'ფაილი', 'listfiles' => 'სურათების სია', +'listfiles_thumb' => 'მინიატურა', 'listfiles_date' => 'თარიღი', 'listfiles_name' => 'სახელი', 'listfiles_user' => 'მომხმარებელი', @@ -1670,8 +1709,8 @@ $1", 'statistics-edits' => 'გვერდის შესწორებები {{SITENAME}}-ის შექმნიდან', 'statistics-edits-average' => 'რედაქტირების საერთო რაოდენობა გვერდზე', 'statistics-views-total' => 'სულ ხილვა', +'statistics-views-total-desc' => 'სათვალავში არ მიიღება არარსებული და სამუშაო გვერდების გადახედვა', 'statistics-views-peredit' => 'შესწორებათა ხილვა', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue დავალებათა სიის] სიგრძე', 'statistics-users' => 'დარეგისტრირებული [[Special:ListUsers|მომხმარებლები]]', 'statistics-users-active' => 'აქტიური მომხმარებლები', 'statistics-users-active-desc' => 'მომხმარებლები, რომლებმაც განახორციელეს ქმედება {{PLURAL:$1|ბოლო $1 დღე|ბოლო $1 დღის|ბოლო $1 დღეების}}', @@ -1686,7 +1725,7 @@ $1", 'doubleredirects' => 'ორმაგი გადამისამართება', 'doubleredirectstext' => 'ამ გვერდზე ჩამოთვლილია გვერდები, რომლებიც გადამისამართებულია სხვა გადამისამართების გვერდებზე. ყოველი მწკრივი შეიცავს ბმულებს პირველ და მეორე გადამისამართებაზე, აგრეთვე მეორე გადამისამართების ტექსტის პირველ სტრიქონს, რომელშიც ჩვეულებრივ მითითებულია რეალური “სამიზნე” გვერდის სათაური. საჭიროა, რომ პირველი გადამისამართებაც უთითებდეს ამ გვერდზე. -გადახაზული მონაცემები უკვე გამართულია.', +გადახაზული მონაცემები უკვე გამართულია.', 'double-redirect-fixed-move' => '[[$1]] გადატანილ იქნა. ამჟამად ის გადამისამართებულია [[$2]]-ზე.', 'double-redirect-fixer' => 'გადამისამართება შემსწორებელი', @@ -1710,6 +1749,8 @@ $1", 'nmembers' => '$1 წევრი', 'nrevisions' => '$1 რედაქტირება', 'nviews' => '$1 ჩვენება', +'nimagelinks' => 'გამოიყენება $1 {{PLURAL:$1|გვერდზე}}', +'ntransclusions' => 'გამოიყენება $1 {{PLURAL:$1|გვერდზე}}', 'specialpage-empty' => 'ეს გვერდი ცარიელია.', 'lonelypages' => 'ობოლი გვერდები', 'lonelypagestext' => 'შემდეგი გვერდები არ არის დაკავშირებული ან ბმული სხვა გვერდებიდან {{SITENAME}}-ში არ მისამართდება.', @@ -1867,33 +1908,39 @@ $1", 'listgrouprights-removegroup-self-all' => 'შეუძლია თავისი ანგარიშის ყველა ჯგუფის წაშლა.', # E-mail user -'mailnologin' => 'გამგზავნი მისამართი არ არის მითითებული.', -'mailnologintext' => 'თქვენ უნდა [[Special:UserLogin|წარადგენილი იყოთ სისტემისადმი]] და გქონდეთ წესიერი ელექტრონული ფოსტის მისამართი თქვენს [[Special:Preferences|კონფიგურაციაში]] იმისთვის, რომ გაუგზავნოთ წერილების სხვა მომხმარებლებს.', -'emailuser' => 'გაუგზავნეთ იმეილი ამ მომხმარებელს', -'emailpage' => 'ელ. ფოსტა მომხმარებელს', -'emailpagetext' => 'თუ ამ მომხმარებელმა თავის პარამეტრებში ელ. ფოსტის მოქმედი მისამართი მიუთითა, ქვემოთ მოყვანილი ფორმის შევსებისას შეგიძლიათ მისთვის შეტყობინების გაგზავნა. ელ. ფოსტის მისამართი, რომელიც [[Special:Preferences|თქვენს პარამეტრებში]] მიუთითეთ, დაფიქსირდება “გამომგზავნის” ველში, რათა ადრესატმა პასუხის გაცემა შეძლოს.', -'usermailererror' => 'ელ. ფოსტა დაბრუნდა შეცდომის გამო:', -'defemailsubject' => 'წერილი ვიკიპედიიდან, თავისუფალი ქართული ენციკლოპედიიდან.', -'noemailtitle' => 'ელ. ფოსტის მისამართი მითითებული არ არის', -'noemailtext' => 'მომხმარებელმა არ მიუთითა მოქმედი ელ. ფოსტის მისამართი.', -'nowikiemailtitle' => 'წერილების გაგზავნის უფლება არ გაქვთ.', -'nowikiemailtext' => 'ამ მომხმარებელმა გამოხატა სხვა მომხმარებლებისგან წერილების არ მიღების სურვილი.', -'email-legend' => 'წერილის გაგზავნა სხვა მომხმარებლისადმი {{grammar:genitive|{{SITENAME}}}}', -'emailfrom' => 'გამომგზავნი:', -'emailto' => 'ადრესატი:', -'emailsubject' => 'თემა:', -'emailmessage' => 'შეტყობინება:', -'emailsend' => 'გაგზავნა', -'emailccme' => 'ელ-ფოსტით გამომიგავნეთ ასლი.', -'emailccsubject' => 'შეტყობინების ასლი გაუგზავნეთ $1: $2', -'emailsent' => 'ელ. ფოსტა გაგზავნილია', -'emailsenttext' => 'თქვენი ელ. შეტყობინება გაგზავნილია.', -'emailuserfooter' => 'ეს ელ. შეტყობინება $1-მა გაუგზავნა $2-ს "გაუგზავნეთ მომხმარებელს ელ. შეტყობინება" ფუნქციით {{SITENAME}}-დან.', +'mailnologin' => 'გამგზავნი მისამართი არ არის მითითებული.', +'mailnologintext' => 'თქვენ უნდა [[Special:UserLogin|წარადგენილი იყოთ სისტემისადმი]] და გქონდეთ წესიერი ელექტრონული ფოსტის მისამართი თქვენს [[Special:Preferences|კონფიგურაციაში]] იმისთვის, რომ გაუგზავნოთ წერილების სხვა მომხმარებლებს.', +'emailuser' => 'გაუგზავნეთ იმეილი ამ მომხმარებელს', +'emailpage' => 'ელ. ფოსტა მომხმარებელს', +'emailpagetext' => 'თუ ამ მომხმარებელმა თავის პარამეტრებში ელ. ფოსტის მოქმედი მისამართი მიუთითა, ქვემოთ მოყვანილი ფორმის შევსებისას შეგიძლიათ მისთვის შეტყობინების გაგზავნა. ელ. ფოსტის მისამართი, რომელიც [[Special:Preferences|თქვენს პარამეტრებში]] მიუთითეთ, დაფიქსირდება “გამომგზავნის” ველში, რათა ადრესატმა პასუხის გაცემა შეძლოს.', +'usermailererror' => 'ელ. ფოსტა დაბრუნდა შეცდომის გამო:', +'defemailsubject' => 'წერილი ვიკიპედიიდან, თავისუფალი ქართული ენციკლოპედიიდან.', +'usermaildisabled' => 'მომხმარებლის e-mail გათიშულია', +'usermaildisabledtext' => 'თქვენ ვერ გაგზავნით e-mail-ს.', +'noemailtitle' => 'ელ. ფოსტის მისამართი მითითებული არ არის', +'noemailtext' => 'მომხმარებელმა არ მიუთითა მოქმედი ელ. ფოსტის მისამართი.', +'nowikiemailtitle' => 'წერილების გაგზავნის უფლება არ გაქვთ.', +'nowikiemailtext' => 'ამ მომხმარებელმა გამოხატა სხვა მომხმარებლებისგან წერილების არ მიღების სურვილი.', +'email-legend' => 'წერილის გაგზავნა სხვა მომხმარებლისადმი {{grammar:genitive|{{SITENAME}}}}', +'emailfrom' => 'გამომგზავნი:', +'emailto' => 'ადრესატი:', +'emailsubject' => 'თემა:', +'emailmessage' => 'შეტყობინება:', +'emailsend' => 'გაგზავნა', +'emailccme' => 'ელ-ფოსტით გამომიგავნეთ ასლი.', +'emailccsubject' => 'შეტყობინების ასლი გაუგზავნეთ $1: $2', +'emailsent' => 'ელ. ფოსტა გაგზავნილია', +'emailsenttext' => 'თქვენი ელ. შეტყობინება გაგზავნილია.', +'emailuserfooter' => 'ეს ელ. შეტყობინება $1-მა გაუგზავნა $2-ს "გაუგზავნეთ მომხმარებელს ელ. შეტყობინება" ფუნქციით {{SITENAME}}-დან.', + +# User Messenger +'usermessage-summary' => 'სისტემური შეტყობინების დატოვება.', +'usermessage-editor' => 'სისტემური მესენჯერი', # Watchlist 'watchlist' => 'ჩემი კონტროლის სია', 'mywatchlist' => 'ჩემი კონტროლის სია', -'watchlistfor' => "('''$1'''-თვის)", +'watchlistfor2' => '$1 ($2) თვის', 'nowatchlist' => 'თქვენი კონტროლის სია ცარიელია.', 'watchlistanontext' => '$1 @@ -2013,7 +2060,10 @@ $UNWATCHURL 'revertpage' => '[[Special:Contributions/$2|$2]]-ის რედაქტირება გაუქმდა; აღდგა ბოლოს [[User:$1|$1]]-ის მიერ რედაქტირებული ვერსია', 'revertpage-nouser' => 'გაუქმდა (მომხმარებლის სახელი წაიშალა) მომხმარებელ [[User:$1|$1]] ბოლო რედაქტირეაზე.', 'rollback-success' => 'გაუქმდა შესწორება $1; დაბრუნება ვერსიაზე $2.', -'sessionfailure' => 'ჩანს, რომ პრობლემაა თქვენი რეგისტრაციის სესიისათვის; + +# Edit tokens +'sessionfailure-title' => 'სეანსის შეცდომა', +'sessionfailure' => 'ჩანს, რომ პრობლემაა თქვენი რეგისტრაციის სესიისათვის; ეს მოქმედება შეჩერდა თქვენი სესიაში შემოჭრის თავიდან ასაცილებლად. გთხოვთ, დააწკაპუნოთ ღილაკს "უკან" და თავიდან ჩართოთ გვერდი, რომლიდანაც შემოხვედით და სცადოთ განმეორებით.', @@ -2141,18 +2191,22 @@ $1', 'month' => 'თვე:', 'year' => 'წელი:', -'sp-contributions-newbies' => 'მხოლოდ ახალი მომხმარებლების წვლილის ჩვენება', -'sp-contributions-newbies-sub' => 'ახალბედებისთვის', -'sp-contributions-newbies-title' => 'ბოლოს დარეგისტრირებულ მომხმარებელთა წვლილი', -'sp-contributions-blocklog' => 'ბლოკირების ისტორია', -'sp-contributions-deleted' => 'მომხმარებლის წაშლილი შესწოებები', -'sp-contributions-logs' => 'ჟურნალები', -'sp-contributions-talk' => 'განხილვა', -'sp-contributions-userrights' => 'ომხმარებელთა უფლებების მართვა', -'sp-contributions-blocked-notice' => 'ეს მომხმარებელი ამჟამად დაბლოკილია. ქვემოთ მოყვანილია ამონაწერი წაშლათა ჟურნალიდან:', -'sp-contributions-search' => 'წვლილის ძიება', -'sp-contributions-username' => 'IP მისამართი ან მომხმარებლის სახელი:', -'sp-contributions-submit' => 'ძიება', +'sp-contributions-newbies' => 'მხოლოდ ახალი მომხმარებლების წვლილის ჩვენება', +'sp-contributions-newbies-sub' => 'ახალბედებისთვის', +'sp-contributions-newbies-title' => 'ბოლოს დარეგისტრირებულ მომხმარებელთა წვლილი', +'sp-contributions-blocklog' => 'ბლოკირების ისტორია', +'sp-contributions-deleted' => 'მომხმარებლის წაშლილი შესწოებები', +'sp-contributions-uploads' => 'ატვირთვები', +'sp-contributions-logs' => 'ჟურნალები', +'sp-contributions-talk' => 'განხილვა', +'sp-contributions-userrights' => 'ომხმარებელთა უფლებების მართვა', +'sp-contributions-blocked-notice' => 'ეს მომხმარებელი ამჟამად დაბლოკილია. ქვემოთ მოყვანილია ამონაწერი წაშლათა ჟურნალიდან:', +'sp-contributions-blocked-notice-anon' => 'ეს მომხმარებელი ამჟამად დაბლოკილია. +ქვემოთ მოყვანილია ამონაწერი წაშლათა ჟურნალიდან:', +'sp-contributions-search' => 'წვლილის ძიება', +'sp-contributions-username' => 'IP მისამართი ან მომხმარებლის სახელი:', +'sp-contributions-toponly' => 'აჩვენე მხოლოდ ბოლო ვერსიები', +'sp-contributions-submit' => 'ძიება', # What links here 'whatlinkshere' => 'ბმული გვერდზე', @@ -2216,7 +2270,6 @@ $1', 'ipb-edit-dropdown' => 'დაბლოკვის მიზეზების რედაქტირება', 'ipb-unblock-addr' => 'ბლოკის მოხსნა $1', 'ipb-unblock' => 'მომხმარებლის სახელზე ან IP მისამართზე ბლოკის მოხსნა', -'ipb-blocklist-addr' => 'მოქმედი ბლოკირება $1-თვის', 'ipb-blocklist' => 'იხილე არსებული ბლოკირებები', 'ipb-blocklist-contribs' => '$1 მომხმარებლის წვლილი', 'unblockip' => 'მომხმარებელზე ბლოკის მოხსნა', @@ -2285,6 +2338,8 @@ $1', 'sorbs_create_account_reason' => 'თქვენი IP-მისამართი ითვლება ღია პროქსიდ DNSBL-ის ანახმად. თქვენ ვერ შექმნით ანგარიშს.', 'cant-block-while-blocked' => 'თქვენ ვერ დაბლოკავთ სხვა მომხმარებლებს, რადგანაც თავად ხართ დაბლოკილი.', 'cant-see-hidden-user' => 'მომხმარებელი, რომლის დაბლოკვასაც ცდილოთ, უკვე დაბლოკილია და დამალულია. რადგანაც თქვენ არ გაქვთ დამალულ მომხმარებლებთან მუშაობის ნებართვა, თქვენ ვერ შეცვლით ამ ბლოკს.', +'ipbblocked' => 'თქვენ ვერ დაბლოკავთ ან მოხსნით ბლოკს სხვა მომხმარებლებს, რადგანაც თავად ხართ დაბლოკილი.', +'ipbnounblockself' => 'თქვენ ვერ მოხსნოთ ბლოკს საკუთარ თავს', # Developer tools 'lockdb' => 'ჩაკეტე მონაცემთა ბაზა', @@ -2312,6 +2367,15 @@ $1', გაითვალისწინეთ, რომ გვერდი არ გადავა, თუ ახალი სათაურით სტატია უკვე არსებობს, გარდა იმ შემთხვევისა, თუ ის ცარიელია ან გადამისამართებაა და არ აქვს გვერდის რედაქტირების ისტორია. ეს ნიშნავს, რომ თქვენ შეგიძლიათ დაუბრუნოთ ძველი სახელი გვერდს, თუ შეცდომა დაუშვით, მაგრამ არ შეგიძლიათ ზემოთ გადააწეროთ არსებულ გვერდს. გაფრთხილებთ! ამ მოქმედებამ შეიძლება მნიშვნელოვანი და მოულოდნელი ცვლილება გამოიწვის პოპულარულ გვერდზე; სანამ გააგრძელებდეთ, გთხოვთ დარწმუნდეთ, რომ თქვენ გესმით თქვენი ქმედების შედეგები.', +'movepagetext-noredirectfixer' => "ქვემოთ მოცემული ფორმა გვერდს სახელს გადაარქმევს, რაც გადაიტანს მასთან დაკავშირებულ ისტორიასაც ახალ სახელზე. +ძველი სათაური გახდება გადამისამართების გვერდი ახალ სათაურზე. +შეამოწმეთ [[Special:DoubleRedirects|ორმაგი]] ან [[Special:BrokenRedirects|გამწყდარი]] გადამისამართებები. +თქვენ ხართ პასუხისმგებელი, რომ ბმულები მკითხველს დანიშნულებისამებრ მიიყვანს. + +გაითვალისწინეთ, რომ გვერდი არ გადავა, თუ ახალი სათაურით სტატია უკვე არსებობს, გარდა იმ შემთხვევისა, თუ ის ცარიელია ან გადამისამართებაა და არ აქვს გვერდის რედაქტირების ისტორია. ეს ნიშნავს, რომ თქვენ შეგიძლიათ დაუბრუნოთ ძველი სახელი გვერდს, თუ შეცდომა დაუშვით, მაგრამ არ შეგიძლიათ ზემოთ გადააწეროთ არსებულ გვერდს. + +'''გაფრთხილებთ!''' +ამ მოქმედებამ შეიძლება მნიშვნელოვანი და მოულოდნელი ცვლილება გამოიწვის პოპულარულ გვერდზე; სანამ გააგრძელებდეთ, გთხოვთ დარწმუნდეთ, რომ თქვენ გესმით თქვენი ქმედების შედეგები.", 'movepagetalktext' => "დაკავშირებული განხილვის გვერდი ავტომატურად გადავა მასთან ერთად, '''გარდა იმ შემთხვევისა, თუ''': *განხილვის გვერდი ახალი სათაურით და გარკვეული შინაარსით უკვე არსებობს, ან *თქვენ მოხსნით ნიშნულს ქვევით დაფაზე. @@ -2367,6 +2431,7 @@ $1', 'immobile-source-page' => 'ამ გვეერდის გადატანა შეუძლებელია.', 'immobile-target-page' => 'შეუძლებელია მოცემულ სახელზე გადატანა.', 'imagenocrossnamespace' => 'შეუძლებელია ფაილს მიეცეს სახელი სახელთა სხვა სივრციდან', +'nonfile-cannot-move-to-file' => 'შეუძლებელია არაფაილების გადატანა ფაილის სახელთა სივრცეში', 'imagetypemismatch' => 'ფაილს ახალი გაფართოება არ შეესაბამება მის ტიპს', 'imageinvalidfilename' => 'ფაილის საბოლოო სახელი შეცდომას შეიცავს', 'fix-double-redirects' => 'ძველ სათაურზე მიმთითებელი გადამისამართების ავტომატურად გასწორება', @@ -2446,6 +2511,7 @@ $1', 'importstart' => 'გვერდების იმპორტი...', 'import-revision-count' => '$1 ცვლილება', 'importnopages' => 'იმპორტისთვის გვერდები არ არის.', +'imported-log-entries' => 'გადატანილია {{PLURAL:$1|ჟურნალის ჩანაწერი|ჟურნალის ჩანაწერი}} $1.', 'importfailed' => 'იმპორტი ვერ განხორციელდა: $1', 'importunknownsource' => 'იმპორტის წყაროს ტიპი უცნობია', 'importcantopen' => 'იმპორტირებული ფაილი არ გაიხსნა', @@ -2538,6 +2604,8 @@ $1', 'tooltip-upload' => 'დაიწყეთ ატვირთვა', 'tooltip-rollback' => 'ბოლო რედაქტორის მიერ გაკეთებული ცვლილებების გაუქმება ერთი დაჭერით', 'tooltip-undo' => 'შეტანილი ცვლილებების გაუქმება და წინასწარ გადახედვის ჩვენება, გაუქმების მიზეზის სქოლიოში ჩაწერასთან ერთად.', +'tooltip-preferences-save' => 'შეინახეთ კონფიგურაცია', +'tooltip-summary' => 'შეიყვანეთ მოკლე სქოლიო', # Stylesheets 'common.css' => '/** აქ ჩასმული CSS ყველა გარეკანზე იმოქმედებს */', @@ -2645,14 +2713,17 @@ $1', 'imagemaxsize' => "სურათის მაქსიმალური ზომა
    ''აღწერილობის გვერდზე:''", 'thumbsize' => 'შემცირებული ზომა:', 'widthheightpage' => '$1×$2, $3 გვერდი', -'file-info' => '(ფაილის ზომა: $1, MIME ტიპი: $2)', -'file-info-size' => '($1 × $2 პიქსელი, ფაილის ზომა: $3, MIME ტიპი: $4)', +'file-info' => 'ფაილის ზომა: $1, MIME ტიპი: $2', +'file-info-size' => '$1 × $2 პიქსელი, ფაილის ზომა: $3, MIME ტიპი: $4', 'file-nohires' => 'უფრო მაღალი გარჩევადობა არ არის შესაძლებელი.', -'svg-long-desc' => '(ფაილი SVG, ნომინალურად $1 × $2 პიქსელი, ფაილის ზომა: $3)', +'svg-long-desc' => 'ფაილი SVG, ნომინალურად $1 × $2 პიქსელი, ფაილის ზომა: $3', 'show-big-image' => 'სრული გარჩევადობა', 'show-big-image-thumb' => 'ზომა წინასწარი გადახედვისას: $1 × $2 პიქსელი', 'file-info-gif-looped' => 'დარგოლილი', 'file-info-gif-frames' => '$1 კადრი', +'file-info-png-looped' => 'დარგოლილი', +'file-info-png-repeat' => 'დაკრულია $1 {{PLURAL:$1|ჯერ}}', +'file-info-png-frames' => '$1 კადრი', # Special:NewFiles 'newimages' => 'ახალი ფაილების გალერეა', @@ -2808,6 +2879,7 @@ $1', 'exif-gpsareainformation' => 'GPS მხარის სახელწოდება', 'exif-gpsdatestamp' => 'GPS-ის მონაცემი', 'exif-gpsdifferential' => 'დიფერენციალური შესწორება', +'exif-objectname' => 'მოკლე სათაური', # EXIF attributes 'exif-compression-1' => 'შეუკუმშავი', @@ -2966,32 +3038,32 @@ $1', 'limitall' => 'ყველა', # E-mail address confirmation -'confirmemail' => 'ელ. ფოსტის მისამართის დადასტურება', -'confirmemail_noemail' => 'თქვენ არ გაქვს მითითებული მართებული ელმისამართი [[Special:Preferences|მომხმარებლის პარამეტრებში]].', -'confirmemail_text' => '{{SITENAME}} ითხოვს თქვენი ელ. ფოსტის დადასტურებას, სანამ ელ. +'confirmemail' => 'ელ. ფოსტის მისამართის დადასტურება', +'confirmemail_noemail' => 'თქვენ არ გაქვს მითითებული მართებული ელმისამართი [[Special:Preferences|მომხმარებლის პარამეტრებში]].', +'confirmemail_text' => '{{SITENAME}} ითხოვს თქვენი ელ. ფოსტის დადასტურებას, სანამ ელ. ფოსტის ფუნქციების გამოყენებას შეძლებთ. გააქტიურეთ ღილაკი ქვემოთ თქვენს მისამართზე დამადასტურებელი შეტყობინების გასაგზავნად. თქვენს ელ. წერილში მითითებული იქნება ბმული შესაბამის კოდზე; გახსენით ბმული თქვენს ბრაუზერში თქვენი ელ. ფოსტის მისამართის გასააქტიურებლად.', -'confirmemail_pending' => 'წერილი დადასტურების კოდით უკვე გაგზავნილია. +'confirmemail_pending' => 'წერილი დადასტურების კოდით უკვე გაგზავნილია. თუ თქვენ ამწამს შექმენით ანგარიში გთხოვთ დალოდოთ ცოტა ხანი კოდის ახლად მოთხოვნამდე.', -'confirmemail_send' => 'დადასტურების კოდის გაგზავნა', -'confirmemail_sent' => 'დამადასტურებელი შეტყობინება გაგზავნილია.', -'confirmemail_oncreate' => 'წერილი დადასტურების კოდით გაიგზავნა თქვენს მიერ მითთებულ საფოსტო ყუთზე. +'confirmemail_send' => 'დადასტურების კოდის გაგზავნა', +'confirmemail_sent' => 'დამადასტურებელი შეტყობინება გაგზავნილია.', +'confirmemail_oncreate' => 'წერილი დადასტურების კოდით გაიგზავნა თქვენს მიერ მითთებულ საფოსტო ყუთზე. მოცემული კოდი არ არის საჭირო სისტემაში შესვლისთვის, თუმცა თქვენ უნდა წარმოადგინოთ იგი. მანამ, სანამ მიიღებთ ელ-ფოსტის გამოყენებას პროექტში.', -'confirmemail_sendfailed' => 'შეუძლებელია დამადასტურებელი შეტყობინების გაგზავნა. +'confirmemail_sendfailed' => 'შეუძლებელია დამადასტურებელი შეტყობინების გაგზავნა. გადაამოწმეთ მისამართის შემადგენელი სიმბოლოების სისწორე. სერვერის პასუხი: $1', -'confirmemail_invalid' => 'არასწორი კოდი. შესაძლოა კოდი ძალადაკარგული იყოს.', -'confirmemail_needlogin' => 'თქვენ გჭირდებათ $1 თქვენი ელ-ფოსტის მისამართის დასადასტურებლად.', -'confirmemail_success' => 'თქვენი ელ. ფოსტის მისამართი დადასტურებულია. ახლა შეგიძლიათ ვიკიში [[Special:UserLogin|შესვლა]].', -'confirmemail_loggedin' => 'თქვენი ელ. ფოსტის მისამართის დადასტურება მიღებულია.', -'confirmemail_error' => 'შეცდომა მოხდა თქვენი ელ. ფოსტის მისამართის დადასტურების დროს.', -'confirmemail_subject' => '{{SITENAME}} ელ. ფოსტის მისამართის დადასტურება', -'confirmemail_body' => 'ვიღაცამ, შესაძლოა თქვენ, IP მისამართით $1, დაარეგისტრირეთ +'confirmemail_invalid' => 'არასწორი კოდი. შესაძლოა კოდი ძალადაკარგული იყოს.', +'confirmemail_needlogin' => 'თქვენ გჭირდებათ $1 თქვენი ელ-ფოსტის მისამართის დასადასტურებლად.', +'confirmemail_success' => 'თქვენი ელ. ფოსტის მისამართი დადასტურებულია. ახლა შეგიძლიათ ვიკიში [[Special:UserLogin|შესვლა]].', +'confirmemail_loggedin' => 'თქვენი ელ. ფოსტის მისამართის დადასტურება მიღებულია.', +'confirmemail_error' => 'შეცდომა მოხდა თქვენი ელ. ფოსტის მისამართის დადასტურების დროს.', +'confirmemail_subject' => '{{SITENAME}} ელ. ფოსტის მისამართის დადასტურება', +'confirmemail_body' => 'ვიღაცამ, შესაძლოა თქვენ, IP მისამართით $1, დაარეგისტრირეთ ანგარიში "$2" ამ ელ-ფოსტის მისამართით აქ {{SITENAME}}. იმის დასადასტურებლად, რომ ეს ანგარიში ნამდვილად თქვენ გეკუთვნით @@ -3002,8 +3074,38 @@ $3 თუ ეს თქვენ *არ* იყავით, მაშინ ნუ შეხვალთ ამ ბმულზე. დადასტურების კოდის ვადა ამოიწურება $4-თვის.', -'confirmemail_invalidated' => 'ელ–ფოსტის დადასტურება გაუქმდა', -'invalidateemail' => 'ელ-ფოსტის დადასტურების გაუქმება', +'confirmemail_body_changed' => 'ვიღაცამ, შესაძლოა თქვენ, IP მისამართით $1, +შეცვალა ანარიშის იმეილი "$2" ამ ელ-ფოსტის მისამართით {{SITENAME}}-ზე. + +იმის დასადასტურებლად, რომ ეს ანგარიში ნამდვილად თქვენ გეკუთვნით +და ელ-ფოსტის შესაძლებლობების გადააქტიურებლად {{SITENAME}} გვერდზე, + +გახსენით ეს ბმული თქვენს ბრაუზერში: + +$3 + +თუ ეს თქვენ *არ* იყავით, მაშინ ნუ შეხვალთ მიყევით ამ ბმულს იმეილის შემოწმების გასათიშად. + +$5 + +წერილი მოძველდება $4.', +'confirmemail_body_set' => 'ვიღაცამ, შესაძლოა თქვენ, IP მისამართით $1, +შეცვალა ანარიშის იმეილი "$2" ამ ელ-ფოსტის მისამართით {{SITENAME}}-ზე. + +იმის დასადასტურებლად, რომ ეს ანგარიში ნამდვილად თქვენ გეკუთვნით +და ელ-ფოსტის შესაძლებლობების გადააქტიურებლად {{SITENAME}} გვერდზე, + +გახსენით ეს ბმული თქვენს ბრაუზერში: + +$3 + +თუ ეს თქვენ *არ* იყავით, მაშინ ნუ შეხვალთ მიყევით ამ ბმულს იმეილის შემოწმების გასათიშად. + +$5 + +წერილი მოძველდება $4.', +'confirmemail_invalidated' => 'ელ–ფოსტის დადასტურება გაუქმდა', +'invalidateemail' => 'ელ-ფოსტის დადასტურების გაუქმება', # Scary transclusion 'scarytranscludedisabled' => '[«Interwiki transcluding» გათიშულია]', @@ -3043,6 +3145,7 @@ $1', 'table_pager_first' => 'პირველი გვერდი', 'table_pager_last' => 'ბოლო გვერდი', 'table_pager_limit' => 'აჩვენეთ $1 ელემნტი გვერდზე', +'table_pager_limit_label' => 'ჩანაწერი გვერდზე:', 'table_pager_limit_submit' => 'აჩვენე', 'table_pager_empty' => 'შედეგები არაა', @@ -3105,6 +3208,7 @@ $1', 'version-specialpages' => 'სპეციალური გვერდები', 'version-parserhooks' => 'სინტაქსური ანალიზატორის ჰუკები', 'version-variables' => 'смфдуифвуиш', +'version-skins' => 'იერსახე', 'version-other' => 'სხვა', 'version-mediahandlers' => 'მედია დამუშავება', 'version-hooks' => 'ჰუკებш', @@ -3116,6 +3220,13 @@ $1', 'version-hook-subscribedby' => 'ჩაწერილია', 'version-version' => '(ვერსია $1)', 'version-license' => 'ლიცენზია', +'version-poweredby-credits' => "ეს ვიკი მუშაობს '''[http://www.mediawiki.org/ MediaWiki]'''-ს ძრავზე, copyright © 2001-$1 $2.", +'version-poweredby-others' => 'სხვები', +'version-license-info' => 'MediaWiki არის თავისუფალი პროგრამული უზრუნველყოფა; შეგიძლიათ მისი გავრცელება ან/და მოდიფიცირება GNU General Public License ლიცენზიის პირობების შესაბამისად. როგორც გამოქვეყნებულია თავისუფალი პროგრამული უზრუნველყოფის ფონდის მიერ; ან ლიცენზიის მეორე ვერსიაში, ან (თქვენი აზრით) უფრო ახალში. + +MediaWiki ვრცელდება იმ იმედით, რომ ის სასარგებლო იქნება, მაგრამ გარანტიის გარეშე; კომერციული ღირებულების ნაგულისხმევი გარანტიის გარეშეც კი ან რაიმე მიზნისთვის სარგებლის მისაღებად. მეტი დეტალური ინფორმაციისთვის, იხილეთ GNU General Public License. + +ამ პროგრამასთან ერთად თქვენ უნდა მიგეღოთ [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General Public License ლიცენზიის ასლი]; თუ არ მიგიღიათ, მისწერეთ თავისუფალი პროგრამული უზრუნველყოფის ფონდს, Free Software Foundation, Inc., ფრანკლინის ქუჩა 51, მეხუთე სართული, ბოსტონი, MA 02110-1301, აშშ, ან [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html წაიკითხეთ იგი ინტერნეტში].', 'version-software' => 'დაინსტალირებული პროგრამული უზრუნველყოფა', 'version-software-product' => 'პროდუქტი', 'version-software-version' => 'ვერსია', @@ -3183,6 +3294,15 @@ $1', 'tags-edit' => 'რედაქტირება', 'tags-hitcount' => '$1 ცვლილება', +# Special:ComparePages +'comparepages' => 'გვერდების შედარება', +'compare-selector' => 'გვერდების ვერსიების შედარება', +'compare-page1' => '1 გვერდი', +'compare-page2' => '2 გვერდი', +'compare-rev1' => 'პირველი ვერსია', +'compare-rev2' => 'მეორე ვერსია', +'compare-submit' => 'შედარება', + # Database error messages 'dberr-header' => 'ეს ვიკი განიცდის პრობლემას', 'dberr-problems' => 'ბოდიში! საიტზე დროებითი ტექნიკური პრობლემებია', @@ -3199,8 +3319,13 @@ $1', 'htmlform-float-invalid' => 'თქვენს მიერ მითითებული მნიშვნელობა არ არის რიცხვი.', 'htmlform-int-toolow' => 'თქვენს მიერ მითითებული მნიშვნელობა მინიმუმზე დაბალია — $1', 'htmlform-int-toohigh' => 'თქვენს მიერ მითითებული მნიშვნელობა მაქსიმალურს აღემატება — $1', +'htmlform-required' => 'ეს მნიშვნელობა საჭიროა', 'htmlform-submit' => 'შენახვა', 'htmlform-reset' => 'ცვლილებების გაუქმება', 'htmlform-selectorother-other' => 'სხვა', +# SQLite database support +'sqlite-has-fts' => '$1 სრული ტექსტის ძიების მხარდაჭერით', +'sqlite-no-fts' => '$1 სრული ტექსტის ძიების მხარდაჭერის გარეშე', + ); diff --git a/languages/messages/MessagesKaa.php b/languages/messages/MessagesKaa.php index 9027b90c..b16ade96 100644 --- a/languages/messages/MessagesKaa.php +++ b/languages/messages/MessagesKaa.php @@ -164,8 +164,7 @@ $messages = array( 'tog-editsection' => "Bo'limlerdi [o'zgertiw] siltew arqalı o'zgertiwdi qos", 'tog-editsectiononrightclick' => "Bo'lim atamasın on' jaqqa basıp o'zgertiwdi qos (JavaScript)", 'tog-showtoc' => "Mazmunın ko'rset (3-ten artıq bo'limi bar betlerge)", -'tog-rememberpassword' => "Menin' kirgenimdi usı kompyuterde saqlap qal", -'tog-editwidth' => "O'zgertiw maydanının' enin tolıq ekrang'a sozıw", +'tog-rememberpassword' => "Menin' kirgenimdi usı kompyuterde saqlap qal (en' ko'bi menen $1 {{PLURAL:$1|ku'nge|ku'nge}} shekem)", 'tog-watchcreations' => 'Men jaratqan betlerdi baqlaw dizimime qos', 'tog-watchdefault' => "Men o'zgeris kiritken betlerdi baqlaw dizimime qos", 'tog-watchmoves' => "Men ko'shirgen betlerdi baqlaw dizimime qos", @@ -299,31 +298,20 @@ $messages = array( 'faqpage' => 'Project:KBS', # Vector skin -'vector-action-addsection' => 'Tema qosıw', -'vector-action-delete' => "O'shiriw", -'vector-action-move' => "Ko'shiriw", -'vector-action-protect' => "Qorg'aw", -'vector-action-undelete' => 'Qayta tiklew', -'vector-action-unprotect' => "Qorg'amaw", -'vector-namespace-category' => 'Kategoriya', -'vector-namespace-help' => 'Anıqlama beti', -'vector-namespace-image' => 'Fayl', -'vector-namespace-main' => 'Bet', -'vector-namespace-media' => 'Media beti', -'vector-namespace-mediawiki' => 'Xabar', -'vector-namespace-project' => 'Proyekt beti', -'vector-namespace-special' => 'Arnawlı bet', -'vector-namespace-talk' => 'Diskussiya', -'vector-namespace-template' => 'Shablon', -'vector-namespace-user' => 'Paydalanıwshı beti', -'vector-view-create' => 'Jaratıw', -'vector-view-edit' => "O'zgertiw", -'vector-view-history' => "Tariyxın ko'riw", -'vector-view-view' => 'Oqıw', -'vector-view-viewsource' => "Deregin ko'riw", -'actions' => "Ha'reketler", -'namespaces' => "İsimler ko'plikleri", -'variants' => 'Variantlar', +'vector-action-addsection' => 'Tema qosıw', +'vector-action-delete' => "O'shiriw", +'vector-action-move' => "Ko'shiriw", +'vector-action-protect' => "Qorg'aw", +'vector-action-undelete' => 'Qayta tiklew', +'vector-action-unprotect' => "Qorg'amaw", +'vector-view-create' => 'Jaratıw', +'vector-view-edit' => "O'zgertiw", +'vector-view-history' => "Tariyxın ko'riw", +'vector-view-view' => 'Oqıw', +'vector-view-viewsource' => "Deregin ko'riw", +'actions' => "Ha'reketler", +'namespaces' => "İsimler ko'plikleri", +'variants' => 'Variantlar', 'errorpagetitle' => 'Qatelik', 'returnto' => '$1 betine qaytıw.', @@ -541,7 +529,7 @@ Akkauntın'ız jaratıldı. 'yourname' => 'Paydalanıwshı atı:', 'yourpassword' => 'Parol:', 'yourpasswordagain' => "Paroldi qayta kiritin':", -'remembermypassword' => "Menin' kirgenimdi usı kompyuterde saqlap qal", +'remembermypassword' => "Menin' kirgenimdi usı kompyuterde saqlap qal (en' ko'bi menen $1 {{PLURAL:$1|ku'nge|ku'nge}} shekem)", 'yourdomainname' => "Sizin' domen:", 'login' => 'Kiriw', 'nav-login-createaccount' => 'Kiriw / akkaunt jaratıw', @@ -665,7 +653,7 @@ Kiriw protsessin juwmaqlaw ushın jan'a parolin'izdi usı jerge kiritin':", \"Saqlaw\"dı ja'ne bassan'ız, o'zgerislerin'iz hesh qanday kommentariysiz saqlanadı.", 'missingcommenttext' => "Kommentariydi to'mende kiritin'.", 'missingcommentheader' => "'''Eskertpe:''' Bul kommentariy ushın atama ko'rsetpedin'iz. -Eger ja'ne \"Saqlaw\"dı bassan'ız, o'zgerislerin'iz olsız saqlanadı.", +Eger ja'ne \"{{int:savearticle}}\" bassan'ız, o'zgerislerin'iz olsız saqlanadı.", 'summary-preview' => "Juwmag'ın ko'rip shıg'ıw:", 'subject-preview' => 'Atamanı aldınnan qaraw:', 'blockedtitle' => "Paydalanıwshı bloklang'an", @@ -724,7 +712,6 @@ Qaytadan ha'reket qılıp ko'rin'. Eger bul payda bermese, [[Special:UserLogout| Qosqan u'lesin'iz o'zin'izdin' jazg'anın'ız yamasa ashıq tu'rdegi derekten alıng'anlig'ına wa'de berin'. '''AVTORLIQ HUQUQI MENEN QORG'ALG'AN MAG'LIWMATLARDI RUXSATSIZ JAYLASTIRMAN'!'''", 'copyrightwarning2' => "Este tutın', {{SITENAME}} proyektindegi barlıq u'lesler basqa paydalanıwshılar arqalı o'zgertiliwi yamasa o'shiriliwi mu'mkin. Eger siz tekstin'izdin' erkin tarqatılıwın ha'mde qa'legen paydalanıwshı o'zgertiwin qa'lemesen'iz, bul jerge jaylastırmag'anın'ız maqul.
    Qosqan u'lesin'iz o'zin'izdin' jazg'anın'ız yamasa ashıq tu'rdegi derekten alıng'anlig'ına wa'de berin' (qosımsha mag'lıwmat ushın $1 hu'jjetin qaran'). '''AVTORLIQ HUQUQI MENEN QORG'ALG'AN MAG'LIWMATLARDI RUXSATSIZ JAYLASTIRMAN'!'''", -'longpagewarning' => "'''ESLETPE: Bul bettin' ha'jmi $1 kilobayt, geybir brauzerler 32 kBqa jaqın yamasa onnan u'lken bolg'an betlerdi o'zgertiwde qıyınshılıqlarg'a tuwra keliwi mu'mkin. Betti kishi bo'leklerge bo'liw haqqında oylap ko'rin'.'''", 'semiprotectedpagewarning' => "'''Eskertiw:''' Bul bet qulplang'an, onı tek registratsiyadan o'tken paydalanıwshılar g'ana o'zgerte aladı. To'mende en' aqırg'ı jurnal mag'lıwmatları berilgen.", 'templatesused' => "Bul bette qollanılg'an {{PLURAL:$1|shablon|shablonlar}}:", @@ -853,7 +840,7 @@ Sha'rtli belgiler: (ha'z.) = ha'zirgi nusqasi menen parqı, 'lineno' => 'Qatar No $1:', 'compareselectedversions' => "Saylang'an nusqalardı salıstırıw", 'editundo' => 'qaytar', -'diff-multi' => "(Aradag'ı {{PLURAL:$1|bir nusqa|$1 nusqa}} ko'rsetilmeydi.)", +'diff-multi' => "({{PLURAL:$2|bir paydalanıwshı|$2 paydalanıwshı}} ta'repinen {{PLURAL:$1|aralıq bir nusqa|aralıq $1 nusqa}} ko'rsetilmeydi.)", # Search results 'searchresults' => "İzlew na'tiyjeleri", @@ -1110,14 +1097,9 @@ Siz ja'ne de basqa paydalanıwshılarg'a siz benen (adresin'izdi bilmegen halda) 'recentchanges-legend' => "Aqırg'ı o'zgerisler sazlawları", 'recentchangestext' => "Bul bette usı wikidegi ha'zirgi o'zgerisler baqlanadı.", 'recentchanges-feed-description' => "Wikidin' usı ag'ımındag'ı en' aqırg'ı o'zgerislerin baqlaw.", -'recentchanges-label-legend' => "Sha'rtli belgiler: $1.", -'recentchanges-legend-newpage' => '$1 - taza bet', 'recentchanges-label-newpage' => "Bul o'zgeris arqalı taza bet jaratıldı", -'recentchanges-legend-minor' => "$1 - kishi o'zgeris", 'recentchanges-label-minor' => "Bul kishi o'zgeris", -'recentchanges-legend-bot' => "$1 - bot kiritken o'zgeris", 'recentchanges-label-bot' => "Bul o'zgeristi bot kiritti", -'recentchanges-legend-unpatrolled' => "$1 - baqlanbag'an o'zgeris", 'recentchanges-label-unpatrolled' => "Bul o'zgeris ele baqlanbag'an", 'rcnote' => "To'mende $4, $5 waqtındag'ı aqırg'ı {{PLURAL:$2|ku'ndegi|'''$2''' ku'ndegi}} {{PLURAL:$1|'''1''' o'zgeris ko'rsetilgen|aqırg'ı '''$1''' o'zgeris ko'rsetilgen}}.", 'rcnotefrom' => "To'mende '''$2''' baslap '''$1''' shekemgi o'zgerisler ko'rsetilgen.", @@ -1154,42 +1136,42 @@ Siz ja'ne de basqa paydalanıwshılarg'a siz benen (adresin'izdi bilmegen halda) 'recentchangeslinked-to' => "Kerisinshe, berilgen betke silteytug'ın betlerdegi o'zgerislerdi ko'rset", # Upload -'upload' => 'Fayldı aploud qılıw', -'uploadbtn' => 'Aploud!', -'reuploaddesc' => "Aploudtı biykar etiw ha'm aploud formasına qaytıw", -'uploadnologin' => 'Kirilmegen', -'uploadnologintext' => "Fayllardı aploud qılıw ushın [[Special:UserLogin|kiriwin'iz]] kerek.", -'uploaderror' => "Aploud qa'tesi", -'upload-permitted' => "Ruxsat etilgen fayl tu'rleri: $1.", -'upload-preferred' => "Unamlı fayl tu'rleri: $1.", -'upload-prohibited' => "Ruxsat etilmegen fayl tu'rleri: $1.", -'uploadlog' => 'aploud jurnalı', -'uploadlogpage' => 'Aploud jurnalı', -'filename' => 'Fayl atı', -'filedesc' => 'Juwmaq', -'fileuploadsummary' => 'Juwmaq:', -'filestatus' => 'Avtorlıq huqıqı statusı:', -'filesource' => 'Fayl deregi:', -'uploadedfiles' => "Aploud qılıng'an faillar", -'ignorewarning' => 'Eskertiwlerdi esapqa almay fayldı saqla', -'ignorewarnings' => 'Hesh qanday eskertiwdi esapqa alma', -'minlength1' => "Fail atı keminde bir ha'ripten turıwı sha'rt.", -'badfilename' => 'Fayl atı bug\'an o\'zgertildi: "$1".', -'filetype-badmime' => '"$1" MIME tu\'rli fayllardı aploud qılıw ruxsat etilmeydi.', -'filetype-missing' => 'Bul faildın ken\'eytpesi (mısalı ".jpg") joq.', -'largefileserver' => "Bul faildın mo'lsheri serverdin' ruxsatınan u'lken.", -'successfulupload' => 'Tabıslı aploud', -'uploadwarning' => 'Aploud eskertiwi', -'savefile' => 'Fayldı saqla', -'uploadedimage' => '«[[$1]]» faylı aploud qılındı', -'overwroteimage' => '"[[$1]]" faylının\' jan\'a nusqası aploud qılındı', -'uploaddisabled' => 'Aploudqa ruxsat berilmegen', -'uploaddisabledtext' => "Fayllardı aploud qılıw toqtatılg'an.", -'uploadvirus' => "Bul failda virus bar! Mag'lıwmat: $1", -'sourcefilename' => "Derektin' fayl atı:", -'destfilename' => 'Belgilengen fail atı:', -'upload-maxfilesize' => "Fayldın' maksimal ko'lemi: $1", -'watchthisupload' => 'Bul fayldı baqlaw', +'upload' => 'Fayldı aploud qılıw', +'uploadbtn' => 'Aploud!', +'reuploaddesc' => "Aploudtı biykar etiw ha'm aploud formasına qaytıw", +'uploadnologin' => 'Kirilmegen', +'uploadnologintext' => "Fayllardı aploud qılıw ushın [[Special:UserLogin|kiriwin'iz]] kerek.", +'uploaderror' => "Aploud qa'tesi", +'upload-permitted' => "Ruxsat etilgen fayl tu'rleri: $1.", +'upload-preferred' => "Unamlı fayl tu'rleri: $1.", +'upload-prohibited' => "Ruxsat etilmegen fayl tu'rleri: $1.", +'uploadlog' => 'aploud jurnalı', +'uploadlogpage' => 'Aploud jurnalı', +'filename' => 'Fayl atı', +'filedesc' => 'Juwmaq', +'fileuploadsummary' => 'Juwmaq:', +'filestatus' => 'Avtorlıq huqıqı statusı:', +'filesource' => 'Fayl deregi:', +'uploadedfiles' => "Aploud qılıng'an faillar", +'ignorewarning' => 'Eskertiwlerdi esapqa almay fayldı saqla', +'ignorewarnings' => 'Hesh qanday eskertiwdi esapqa alma', +'minlength1' => "Fail atı keminde bir ha'ripten turıwı sha'rt.", +'badfilename' => 'Fayl atı bug\'an o\'zgertildi: "$1".', +'filetype-badmime' => '"$1" MIME tu\'rli fayllardı aploud qılıw ruxsat etilmeydi.', +'filetype-missing' => 'Bul faildın ken\'eytpesi (mısalı ".jpg") joq.', +'largefileserver' => "Bul faildın mo'lsheri serverdin' ruxsatınan u'lken.", +'uploadwarning' => 'Aploud eskertiwi', +'savefile' => 'Fayldı saqla', +'uploadedimage' => '«[[$1]]» faylı aploud qılındı', +'overwroteimage' => '"[[$1]]" faylının\' jan\'a nusqası aploud qılındı', +'uploaddisabled' => 'Aploudqa ruxsat berilmegen', +'uploaddisabledtext' => "Fayllardı aploud qılıw toqtatılg'an.", +'uploadvirus' => "Bul failda virus bar! Mag'lıwmat: $1", +'sourcefilename' => "Derektin' fayl atı:", +'destfilename' => 'Belgilengen fail atı:', +'upload-maxfilesize' => "Fayldın' maksimal ko'lemi: $1", +'watchthisupload' => 'Bul fayldı baqlaw', +'upload-success-subj' => 'Tabıslı aploud', 'upload-proto-error' => 'Nadurıs protokol', 'upload-file-error' => "İshki qa'telik", @@ -1459,7 +1441,6 @@ Ja'nede [[Special:WantedCategories|kerekli kategoriyalardı]] qarap ko'rin'.", # Watchlist 'watchlist' => 'Betlerdi baqlaw dizimi', 'mywatchlist' => "Menin' baqlaw dizimim", -'watchlistfor' => "('''$1''' ushın)", 'nowatchlist' => "Baqlaw dizimin'iz bos.", 'watchlistanontext' => "Baqlaw dizimin'izdegilerdi qaraw yamasa o'zgertiw ushın $1 kerek.", 'watchnologin' => 'Kirilmegen', @@ -1873,10 +1854,10 @@ Please visit [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] 'thumbsize' => "Miniatyuranın' ha'jmi:", 'widthheight' => '$1 × $2', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|bet|bet}}', -'file-info' => "(fayldın' ha'jmi: $1, MIME tu'ri: $2)", -'file-info-size' => "($1 × $2 piksel, fayldın' ha'jmi: $3, MIME tu'ri: $4)", +'file-info' => "fayldın' ha'jmi: $1, MIME tu'ri: $2", +'file-info-size' => "$1 × $2 piksel, fayldın' ha'jmi: $3, MIME tu'ri: $4", 'file-nohires' => 'Bunnan joqarı imkaniyatlı tabılmadı.', -'svg-long-desc' => "(SVG fayl, $1 × $2 piksel belgilengen, fayldın' ha'jmi: $3)", +'svg-long-desc' => "SVG fayl, $1 × $2 piksel belgilengen, fayldın' ha'jmi: $3", 'show-big-image' => 'Joqarı imkaniyatlı', 'show-big-image-thumb' => "Bul aldinnan ko'riwdin' ha'jmi: $1 × $2 piksel", diff --git a/languages/messages/MessagesKab.php b/languages/messages/MessagesKab.php index 5c3d88c7..13cd867e 100644 --- a/languages/messages/MessagesKab.php +++ b/languages/messages/MessagesKab.php @@ -52,8 +52,7 @@ $messages = array( 'tog-editsection' => 'Eǧǧ abeddel n umur s yizdayen [beddel]', 'tog-editsectiononrightclick' => 'Eǧǧ abeddel n umur mi wekkiɣ ɣef uyeffus
    ɣef yizwal n umur (JavaScript)', 'tog-showtoc' => 'Ssken agbur (i isebtar i yesɛan kter n 3 izwalen)', -'tog-rememberpassword' => 'Cfu ɣef yisem n wemseqdac inu di uselkim-agi', -'tog-editwidth' => 'Tankult n ubeddel tesɛa tehri ettmam', +'tog-rememberpassword' => 'Cfu ɣef yisem n wemseqdac inu di uselkim-agi (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Rnu isebtar i xelqeɣ deg wumuɣ n uɛessi inu', 'tog-watchdefault' => 'Rnu isebtar i ttbeddileɣ deg wumuɣ n uɛessi inu', 'tog-watchmoves' => 'Rnu isebtar i smimḍeɣ deg wumuɣ n uɛessi inu', @@ -336,7 +335,7 @@ Isem n wemseqdac inek yettwaxleq. Ur tettuḍ ara ad tbeddleḍ Isemyifiyen n {{ 'yourname' => 'Isem n wemseqdac', 'yourpassword' => 'Awal n tbaḍnit', 'yourpasswordagain' => 'Ɛiwed ssekcem awal n tbaḍnit', -'remembermypassword' => 'Cfu ɣef wawal n tbaḍnit inu di uselkim-agi.', +'remembermypassword' => 'Cfu ɣef wawal n tbaḍnit inu di uselkim-agi (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Taɣult inek', 'externaldberror' => 'Yella ugul aberrani n database neɣ ur tettalaseḍ ara ad tbeddleḍ isem an wemseqdac aberrani inek.', 'login' => 'Kcem', @@ -475,7 +474,7 @@ Ma tɣelṭeḍ, wekki kan ɣef tqeffalt "Back/Précédent" n browser/explorateu 'userjsyoucanpreview' => "'''Tixidest:''' Sseqdec taqeffalt 'Ssken pre-timeẓriwt' iwakken ad tɛerḍeḍ JS amynut inek uqbel ad tesmektiḍ.", 'usercsspreview' => "'''Smekti belli aql-ak twaliḍ CSS inek kan, mazal ur yettusmekti ara!'''", 'userjspreview' => "'''Smekti belli aql-ak tɛerḍeḍ JavaScript inek kan, mazal ur yettusmekti ara!'''", -'userinvalidcssjstitle' => '\'\'\'Aɣtal:\'\'\' Aglim "$1" ulac-it. Ur tettuḍ ara belli isebtar ".css" d ".js" i txedmeḍ sseqdacen azwel i yesɛan isekkilen imecṭuḥen, s umedya: {{ns:user}}:Foo/monobook.css akk d {{ns:user}}:Foo/Monobook.css.', +'userinvalidcssjstitle' => '\'\'\'Aɣtal:\'\'\' Aglim "$1" ulac-it. Ur tettuḍ ara belli isebtar ".css" d ".js" i txedmeḍ sseqdacen azwel i yesɛan isekkilen imecṭuḥen, s umedya: {{ns:user}}:Foo/vector.css akk d {{ns:user}}:Foo/Vector.css.', 'updated' => '(Yettubeddel)', 'note' => "'''Tamawt:'''", 'previewnote' => "'''Tagi d pre-timeẓriwt kan, ibeddlen mazal ur ttusmektin ara!'''", @@ -508,8 +507,6 @@ Aqlak teggaleḍ belli tureḍ wagi d kečč, neɣ teddmiḍ-t seg taɣult azaye 'copyrightwarning2' => "Ssen belli akk tikkin deg {{SITENAME}} zemren ad ttubeddlen neɣ ttumḥan sɣur imdanen wiyaḍ. Lukan ur tebɣiḍ ara aru inek yettubeddel neɣ yettwazen u yettwaru deg imkanen nniḍen, ihi ur t-tazneḍ ara dagi.
    Aqlak teggaleḍ belli tureḍ wagi d kečč, neɣ teddmiḍ-t seg taɣult azayez neɣ iɣbula tilelliyin (ẓer $1 akken ad tessneḍ kter). '''UR TEFKIḌ ARA AXDAM S COPYRIGHT MEBLA TURAGT!'''", -'longpagewarning' => "'''AƔTAL: Asebter-agi yesɛa $1 kilobytes/kilooctets; kra n browsers/explorateur ur zemren ara ad beddlen isebtar i yesɛan 32 kB/ko neɣ kter. -G leɛnayek frec asebter-nni.'''", 'longpageerror' => "'''AGUL: Aḍris i tefkiḍ yesɛa $1 kB/ko, tiddi-yagi kter n $2 kB/ko, ur yezmir ara ad yesmekti.'''", 'readonlywarning' => "'''AƔTAL: Database d tamsekker akken ad teddwaxdem, ihi ur tezmireḍ ara ad tesmektiḍ ibeddlen inek tura. Smekti aḍris inek @@ -785,7 +782,6 @@ Ma llant kif-kif ur tt-taznepd ara.", Ma tesɛiḍ tugna-nni s resolution tameqqrant, azen-it, ma ulac beddel isem-is.", 'fileexists-forbidden' => 'Tugna s yisem kif-kif tewǧed yagi; g leɛnayek uɣal u beddel isem-is. [[File:$1|thumb|center|$1]]', 'fileexists-shared-forbidden' => 'Tugna s yisem kif-kif tewǧed yagi; g leɛnayek uɣal u beddel isem-is. [[File:$1|thumb|center|$1]]', -'successfulupload' => 'Azen yekfa', 'uploadwarning' => 'Aɣtal deg wazan n ufayluwen', 'savefile' => 'Smekti afaylu', 'uploadedimage' => '"[[$1]]" yettwazen', @@ -797,6 +793,7 @@ Ma tesɛiḍ tugna-nni s resolution tameqqrant, azen-it, ma ulac beddel isem-is. 'destfilename' => 'Anda iruḥ afaylu', 'watchthisupload' => 'Ɛass asebter-agi', 'filewasdeleted' => 'Afaylu s yisem-agi yettwazen umbeɛd yettumḥa. Ssenqed $1 qbel ad tazniḍ tikelt nniḍen.', +'upload-success-subj' => 'Azen yekfa', 'upload-proto-error' => 'Agul deg protokol', 'upload-proto-error-text' => 'Assekcam yenṭerr URL i yebdan s http:// neɣ ftp://.', @@ -994,7 +991,6 @@ deg « Expéditeur» n izen inek iwakken amseqdac-nni yezmer a k-yerr.', # Watchlist 'watchlist' => 'Umuɣ n uɛessi inu', 'mywatchlist' => 'Umuɣ n uɛessi inu', -'watchlistfor' => "(n '''$1''')", 'nowatchlist' => 'Umuɣ n uɛessi inek d ilem.', 'watchlistanontext' => 'G leɛnaya-k $1 iwakken ad twalaḍ neɣ tbeddleḍ iferdas deg wumuɣ n uɛessi inek.', 'watchnologin' => 'Ur tekcimeḍ ara', @@ -1078,9 +1074,11 @@ Tadhelt: 'deletecomment' => 'Ayɣer', # Rollback -'cantrollback' => 'Ur yezmir ara ad yessuɣal; yella yiwen kan amseqdac iwumi ibeddel/yexleq asebter-agi.', -'editcomment' => "Agzul n ubeddel yella: \"''\$1''\".", -'revertpage' => 'Yessuɣal ibeddlen n [[Special:Contributions/$2|$2]] ([[User talk:$2|Meslay]]); yettubeddel ɣer tasiwelt taneggarut n [[User:$1|$1]]', +'cantrollback' => 'Ur yezmir ara ad yessuɣal; yella yiwen kan amseqdac iwumi ibeddel/yexleq asebter-agi.', +'editcomment' => "Agzul n ubeddel yella: \"''\$1''\".", +'revertpage' => 'Yessuɣal ibeddlen n [[Special:Contributions/$2|$2]] ([[User talk:$2|Meslay]]); yettubeddel ɣer tasiwelt taneggarut n [[User:$1|$1]]', + +# Edit tokens 'sessionfailure' => 'Yella ugul akk d takmect inek; Axdam-agi yebṭel axaṭer waqila yella wemdan nniḍen i yeddem isem n wemseqdac inek. G leɛnayek wekki ɣef taqeffalt "Back/Précédent" n browser/explorateur inek, umbeɛd wekki ɣef "Actualiser/reload" akk ad tɛerḍeḍ tikelt nniḍen.', @@ -1381,8 +1379,8 @@ Please visit [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] 'mediawarning' => "'''Aɣtal''': Waqila afaylu-yagi yesɛa angal aḥraymi, lukan a t-tesseqdceḍ yezmer ad ixesser aselkim inek.", 'imagemaxsize' => 'Ḥedded tiddi n tugniwin deg yiglamen n tugniwim i:', 'thumbsize' => 'Tiddi n tugna tamecṭuḥt:', -'file-info' => '(tiddi n ufaylu: $1, anaw n MIME: $2)', -'file-info-size' => '($1 × $2 pixel, tiddi n ufaylu: $3, anaw n MIME: $4)', +'file-info' => 'tiddi n ufaylu: $1, anaw n MIME: $2', +'file-info-size' => '$1 × $2 pixel, tiddi n ufaylu: $3, anaw n MIME: $4', 'file-nohires' => 'Ulac resolution i tameqqrant fell-as.', 'show-big-image' => 'Resolution tameqqrant', 'show-big-image-thumb' => 'Tiddi n pre-timeẓriwt-agi: $1 × $2 pixels', diff --git a/languages/messages/MessagesKbd.php b/languages/messages/MessagesKbd.php new file mode 100644 index 00000000..bf4cdef7 --- /dev/null +++ b/languages/messages/MessagesKbd.php @@ -0,0 +1,12 @@ + 'ТехьэпIэхэр щIэтхъэн:', +'tog-highlightbroken' => 'ЩымыIэ техьэпIэхэр къэгъэлъэгъуэн мыбы хуэду (ар мыхъумэ мыпхуэдэу?).', +'tog-justify' => 'БгъуагъкIэ напэкIуэцIыр зэгъэзэхуэн', +'tog-hideminor' => 'ГъэпщкIун: кIуэдкIэ зыхэмылэжьыхьа, щIэуэ яхъуэжа тхылъым', +'tog-hidepatrolled' => 'ГъэпшкIун гъэтэрэзыгъуэ щIэлъыплъахэм я тхылъ гъэтэрэзыгъуэщIэхэр', +'tog-newpageshidepatrolled' => 'ГъэпшкIун напэкIуэцI щIэлъыплъахэм я тхылъ напэкIуэцI-щIэхэр', +'tog-extendwatchlist' => 'ЩӀэлъыплъыгъуэм и тхылъышхуэ, яужырэй къуэдейхэм нэмыщӀу зэхъуэкӀыгъуэ псори хэту', +'tog-usenewrc' => 'Гъэтэрэзыгъуэ щӀэхэм я тхылъ нэхъыфӀыр къэгъэсэбэпын (JavaScript хуэныкъуэ)', +'tog-numberheadings' => 'Псалъащхьэхэм автоматику номер ятын', +'tog-showtoolbar' => 'Гъэтэрэзыным идежь ищхьэ пэнелыр гъэлъэгъуэн (JavaScript)', +'tog-editondblclick' => 'ТӀуанэ текъузэгъуэкӀэ напэкӀуэцӀхэр гъэтэрэзын (requires JavaScript)', +'tog-editsection' => 'Лъэныкъуэ къэс техьэпӀэ [гъэтэрэзын] гъэлъэгъуэн', +'tog-editsectiononrightclick' => 'Псалъашъхьэм, дзыгъуэм и ижырабгъу текъузэгъуэмкӀэ секциэхэр гъэтэрэзын (JavaScript)', +'tog-showtoc' => 'Зэхэлъыгъуэр гъэлъэгъуэн (псэлъашъхьищ нэхъыбу зиӀэ напэкӀуэцӀхэм)', +'tog-rememberpassword' => 'Компутерым си логиныр щыхъумэн (мы нэхъыбу $1 {{PLURAL:$1|махуэ|маху}})', +'tog-watchcreations' => 'Сэ сщIа напэкIуэцIхэр сызыкIэлъыплъ тхылъым хэлъхьэн', +'tog-watchdefault' => 'Сэ схъуэжа напэкIуэцIхэр сызыкIэлъыплъ тхылъым хэлъхьэн', +'tog-watchmoves' => 'Зи цIэ схъуэжа напэкIуэцIхэр сызыкIэлъыплъ тхылъым хэлъхьэн', +'tog-watchdeletion' => 'Сэ тезгъэкIыжа напэкIуэцIхэр сызыкIэлъыплъ тхылъым хэлъхьэн', +'tog-minordefault' => 'Гулъытэгъуэшхуэ зимыӀэ хуэду щӀын гъэтэрэзыгъуэхэр', +'tog-previewontop' => 'Япэ-еплъыр гъэтэрэзыным и пхырыплъым ипэ игъувэн', +'tog-previewonfirst' => 'Япэ-еплъыр гъэтэрэзыным кӀуэным ипкӀэ гъэлъэгъуэн', +'tog-nocache' => 'Кеш щӀыныр гъэункӀыфӀын напэкӀуэцӀ браузерым хэтхэм', +'tog-enotifwatchlistpages' => 'Почтэм къэӀохун, тхылъ кӀэлъыплъыгъуэм хэт напэкӀуэцӀхэм я зэхъуэкӀыгъуэхэм', +'tog-enotifusertalkpages' => 'Почтэм къэӀохун аккаунтым и напэкӀуэцӀ тепсэлъыхьыгъуэм и зэхъуэкӀыгъуэхэм', +'tog-enotifminoredits' => 'Почтэм къэӀохун зэхъуэкӀыгъуэ цӀыкӀу халъхьэми', +'tog-enotifrevealaddr' => 'Хъыбар къэӀохугъуэхэм си почтэ адресыр гъэлъэгъуэн', +'tog-shownumberswatching' => 'НапэкӀуэцӀыр я тхылъ кӀэлъыплъыгъуэхэм хэзгъэхьахэм я бжыгъэр гъэлъэгъуэн', +'tog-oldsig' => 'ӀэпэщӀэдз щыӀэм и япэ-еплъ', +'tog-fancysig' => 'Викитхылъ ӀэпэщӀэдз Ӏыгъын (автоматикэ техьэпӀэншу)', +'tog-externaleditor' => 'Хэмыт редакторыр къэгъэсэбэпын (компутырым абым теухуа тегъэпсыхьыгъуэ хуэныкъуэ)', +'tog-externaldiff' => 'Хэмыт программэр къэгъэсэбэпын зэгъэлъытэн шъхьэкӀэ (компутырым абым теухуа тегъэпсыхьыгъуэ хуэныкъуэ)', +'tog-showjumplinks' => 'ДэӀэпыкъуэгъу техьэпӀэ «техьэн» хэгъэнэн', +'tog-uselivepreview' => 'Япэ-еплъ щӀэхыр къэгъэсэбэпын (JavaScript хуэныкъуэ) (эксперементалу)', +'tog-forceeditsummary' => 'КъэӀохун, гъэтэрэзыгъуэм и тепсэлъыхьыпӀэм зыри имытхамэ', +'tog-watchlisthideown' => 'КӀэлъыплъыгъуэ тхылъым гъэпшкIуэн си гъэтэрэзыгъуэхэр', +'tog-watchlisthidebots' => 'КӀэлъыплъыгъуэ тхылъым гъэпшкIуэн ботхэм я гъэтэрэзыгъуэхэр', +'tog-watchlisthideminor' => 'КӀэлъыплъыгъуэ тхылъым гъэпшкIуэн гъэтэрэзыгъуэ цӀыкӀухэр', +'tog-watchlisthideliu' => 'ЗыкъэзӀуэтауэ хэтхэм я гъэтэрэзыгъуэхэр гъэпшкӀун', +'tog-watchlisthideanons' => 'ЗыкъэзмыӀуэтауэ хэтхэм я гъэтэрэзыгъуэхэр гъэпшкӀун', +'tog-watchlisthidepatrolled' => 'КӀэлъыплъыгъуэ тхылъым гъэпшкIуэн патрулым хэкӀа гъэтэрэзыгъуэхэр', +'tog-ccmeonemails' => 'Адрей хэтхэм я хуэзгъэхь хъыбархэм я копиэ сидеи егъэхьын', +'tog-diffonly' => 'Имыгъэлъэгъуэну, нэпэкӀуэцӀым хэтыр тӀуанэ зэгъэлъытэгъуэм щхьэкӀэ', +'tog-showhiddencats' => 'ГъэпшкӀуа категориэхэр къэгъэлъэгъуэн', +'tog-norollbackdiff' => 'Имыгъэлъэгъуэну зэщхьэщыкӀыгъуэр, гъэтэрэзыгъуэр ихыжьа яуж', + +'underline-always' => 'Сыт щыгъуи', +'underline-never' => 'Зэи', +'underline-default' => 'Браузерым и зэгъэзэхуэгъуэхэр къэгъэсэбэпын', + +# Font style option in Special:Preferences +'editfont-style' => 'Хьэрыф тхыгъэм и типыр гъэтэрэзыгъуэм дежь', +'editfont-default' => 'Хьэрыф тхыгъэр браузер зэгъэзэхуэгъуэм къыхэхауэ', +'editfont-monospace' => 'Пропорциэншэ хьэрыф тхыгъэ', +'editfont-sansserif' => 'Мы антикуу хьэрыф тхыгъэр', +'editfont-serif' => 'Антику хьэрыф тхыгъэр', + +# Dates +'sunday' => 'Тхьэмахуэ', +'monday' => 'Блыщхьэ', +'tuesday' => 'Гъубж', +'wednesday' => 'Бэрэжьей', +'thursday' => 'Махуэку', +'friday' => 'Мэрем', +'saturday' => 'Щэбэт', +'sun' => 'Тхьм', +'mon' => 'Блщ', +'tue' => 'Гбж', +'wed' => 'Бржь', +'thu' => 'Мку', +'fri' => 'Мрм', +'sat' => 'Щбт', +'january' => 'ЩӀышылэм и', +'february' => 'Мазаем и', +'march' => 'Гъатхэпэм и', +'april' => 'Мэлыжьыхьым и', +'may_long' => 'Накъыгъэм и', +'june' => 'Мэкъуауэгъуэм и', +'july' => 'Бадзэуэгъуэм и', +'august' => 'ШыщхьэӀум и', +'september' => 'ФокӀадэм и', +'october' => 'Жэпуэгъуэм и', +'november' => 'ЩакӀуэгъуэм и', +'december' => 'Дыгъэгъазэм и', +'january-gen' => 'ЩӀышылэм и', +'february-gen' => 'Мазаем и', +'march-gen' => 'Гъатхэпэм и', +'april-gen' => 'Мэлыжьыхьым и', +'may-gen' => 'Накъыгъэм и', +'june-gen' => 'Мэкъуауэгъуэм и', +'july-gen' => 'Бадзэуэгъуэм и', +'august-gen' => 'ШыщхьэӀум и', +'september-gen' => 'ФокӀадэм и', +'october-gen' => 'Жэпуэгъуэм и', +'november-gen' => 'ЩакӀуэгъуэм и', +'december-gen' => 'Дыгъэгъазэм и', +'jan' => 'ЩIш', +'feb' => 'Мзе', +'mar' => 'Гъп', +'apr' => 'Мжьхь', +'may' => 'Нкъ', +'jun' => 'Мкъу', +'jul' => 'Бдз', +'aug' => 'ШIу', +'sep' => 'Фдэ', +'oct' => 'Жэп', +'nov' => 'ЩкIу', +'dec' => 'Дгъз', + +# Categories related messages +'pagecategories' => '{{PLURAL:$1|Категориэ|Категориэхэр}}', +'category_header' => 'НапэкIуэцIхэр "$1" категориэм', +'subcategories' => 'КатегориэцӀыкӀухэр', +'category-media-header' => 'Категориэ "$1" хэт файлхэр', +'category-empty' => '"Мы категорием иджыпсту зыри илъкъым."', +'hidden-categories' => '{{PLURAL:$1|Категориэ гъэпшкӀуа|Категориэ гъэпшкӀуахэр}}', +'hidden-category-category' => 'Катигориэ гъэпшкӀуахэр', +'category-subcat-count' => '{{PLURAL:$2|Мы категориэм хиубыдэр категориэпхырыт къуэдей.|{{PLURAL:$1|Гъэлъэгъуар $1 категориэпхырыт|Гъэлъэгъуар $1 категориэпхырыту|Гъэлъэгъуар $1 категориэпхырытхэм}} $2 ящыщ.}}', +'category-subcat-count-limited' => 'Мы категориэм {{PLURAL:$1|категориэпхырыт $1|категориэпхырытхэр $1}}.', +'category-article-count' => '{{PLURAL:$2|Мы категориэм зы напэкӀуцӀ нэхъ хэткъым.|{{PLURAL:$1|Гъэлъэгъуар $1 напэкӀуэцӀ|Гъэлъэгъуар $1 напэкӀуэцӀу|Гъэлъэгъуар $1 напэкӀуэцхӀу}} категориэм еуэ $2.}}', +'category-article-count-limited' => 'Мы категориэм хэтыр {{PLURAL:$1|напэкӀуэцӀу $1|напэкӀуэцӀхэ $1}}.', +'category-file-count' => '{{PLURAL:$2|Мы категориэм файлу хэт къуэдер.|{{PLURAL:$1|Файлу гъэлъэгъуар $1|Файлу гъэлъэгъуахэр $1}} категориэм щыщ $2.}}', +'category-file-count-limited' => 'Мы категориэм хэт {{PLURAL:$1|файл|$1 файлхэр}}', +'listingcontinuesabbrev' => '(кӀэлъыкуэгъуэ)', +'index-category' => 'Индекс зырат напэкӀуэцӀхэр', +'noindex-category' => 'НапэкӀуэцӀ индекс зыхуэмыныкуъэхэр', + +'mainpagetext' => "'''«MediaWiki» узыншу хэгъува.'''", +'mainpagedocfooter' => 'Мы виким и лэжьыгъэ хъыбархэр здэбгъуэтыфынур [http://meta.wikimedia.org/wiki/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5 дэӀэпыкъуэгъу тхылъым]. + + +== Къыщхьэпэгъуэ хъуфынухэр == +* [http://www.mediawiki.org/wiki/Manual:Configuration_settings Зэгъэзэхуэгъуэ гуэрэхэм я тхылъ]; +* [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-м упщӀэ нахъыбу ятхэмрэ я жэуапхэмрэ]; +* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-м и версиэ щӀэуэ къэжахэм я къэӀохугъуэ].', + +'about' => 'И гугъу', +'article' => 'Тхыгъэ', +'newwindow' => '(щӀэуэ зэӀухын)', +'cancel' => 'ЩӀегъуэжын', +'moredotdotdot' => 'Иджыри...', +'mypage' => 'Си напэкӀуэцӀ', +'mytalk' => 'Си тепсэлъыхьыгъуэм и напэкӀуэцӀ', +'anontalk' => 'Мы IP адресым и тепсэлъыхьыгъуэ', +'navigation' => 'Навигацэ', +'and' => ' икIи', + +# Cologne Blue skin +'qbfind' => 'Лъыхъуэн', +'qbbrowse' => 'Хэплъэн', +'qbedit' => 'Гъэтэрэзын', +'qbpageoptions' => 'НапэкӀуэцӀым и зэгъэзэхуэгъуэр', +'qbpageinfo' => 'НапэкIуэцIым теухуауэ', +'qbmyoptions' => 'Уи зэгъэзэхуэгъуэхэр', +'qbspecialpages' => 'Специал напэкӀуэцӀхэр', +'faq' => 'FAQ', +'faqpage' => 'Project:FAQ', + +# Vector skin +'vector-action-addsection' => 'Теухугъуэ щӀэуэ щӀэдзэн', +'vector-action-delete' => 'Ихын', +'vector-action-move' => 'ЦӀэр хъуэжын', +'vector-action-protect' => 'Хъумэн', +'vector-action-undelete' => 'ЗыфӀэгъэувэжын', +'vector-action-unprotect' => 'Хъумэныр техыжын', +'vector-simplesearch-preference' => 'Лъыхъуэгъуэ нэхъ зэхэхауэ дэӀэпыкъуэгъухэр хэгъэнэн (Векторым шъхьэкӀэ къуэдей)', +'vector-view-create' => 'ЩӀын', +'vector-view-edit' => 'Гъэтэрэзын', +'vector-view-history' => 'Тхыдэм еплъын', +'vector-view-view' => 'Еджэн', +'vector-view-viewsource' => 'КъызхэкӀам еплъын', +'actions' => 'ЩӀыгъэхэр', +'namespaces' => 'ЦӀэхэм я пӀэр', +'variants' => 'Вариантхэр', + +'errorpagetitle' => 'Щыуагъэ', +'returnto' => '$1 напэкӀуэцӀым гъэзэжын.', +'tagline' => 'Къыздихар {{grammar:genitive|{{SITENAME}}}}', +'help' => 'ДэӀэпыкъуэгъуэ', +'search' => 'Къэгъуэтын', +'searchbutton' => 'Къэгъуэтын', +'go' => 'ЕкӀуэкӀын', +'searcharticle' => 'ЕкӀуэкӀын', +'history' => 'Тхыдэ', +'history_short' => 'Тхыдэ', +'updatedmarker' => 'Си яужырей ихьэгъуэм яуж къэгъэщӀэрэщӀа', +'info_short' => 'Информациэ', +'printableversion' => 'КъыдэгъэкӀыным теухуа версиэ', +'permalink' => 'ТехьэпӀэ зэмыхъуэкӀ', +'print' => 'КъыдэгъэкӀын', +'edit' => 'Гъэтэрэзын', +'create' => 'ЩIын', +'editthispage' => 'Мы напэкIуэцIыр гъэтэрэзын', +'create-this-page' => 'Мыбы и напэкӀуэцӀ щӀын', +'delete' => 'Ихын', +'deletethispage' => 'Мы напэкӀуэцӀыр ихын', +'undelete_short' => 'ЗэфӀэгъэувэжын $1 {{PLURAL:$1|гъэтэрэзыгъуэ|гъэтэрэзыгъуэхэр}}', +'protect' => 'Хъумэн', +'protect_change' => 'зэхъуэкӀын', +'protectthispage' => 'Мы напэкӀуэцӀыр хъумэн', +'unprotect' => 'Хъумэныр техыжын', +'unprotectthispage' => 'Мы напэкӀуэцӀым хъумэныр техыжын', +'newpage' => 'НапэкӀуэцӀыщӀэ', +'talkpage' => 'НапэкIуэцIым тепсэлъыхьын', +'talkpagelinktext' => 'Тепсэлъыхьыгъуэ', +'specialpage' => 'Лэжыгъэ напэкӀуэцӀ', +'personaltools' => 'Уи Ӏэмэпсымэхэр', +'postcomment' => 'ЛъэныкъуэщӀэ', +'articlepage' => 'Тхыгъэм хэплъэн', +'talk' => 'Тепсэлъэхьыгъуэ', +'views' => 'Зыхэплъахэр', +'toolbox' => 'Ӏэмэпсымэхэр', +'userpage' => 'ЦӀыхухэтым и напэкӀуэцӀым еплъын', +'projectpage' => 'Проэктым и напэкӀуэцӀым еплъын', +'imagepage' => 'Файлым и напэкIуэцIым еплъын', +'mediawikipage' => 'Тхыгъэм и напэкIуэцIым еплъын', +'templatepage' => 'Шаблоным и напэкIуэцIым хэплъэн', +'viewhelppage' => 'ЩIэупщIэм и напэкIуэцI', +'categorypage' => 'Категорием и напэкIуэцIым хэплъэн', +'viewtalkpage' => 'Тепсэлъыхьыгъуэм еплъын', +'otherlanguages' => 'НэмыщӀ бзэхэмкӀэ', +'redirectedfrom' => '($1 мыбы къыхэкIащ)', +'redirectpagesub' => 'НапэкӀуэцӀ-егъэкӀуэкӀа', +'lastmodifiedat' => 'Иужь дыдэу напэкӀуэцӀыр щахъуэжар: $1, $2 тэлайхэм ирихьэлӀэу.', +'viewcount' => 'Мы напэкӀуэцӀым Ӏухьа {{PLURAL:$1|-рэ}}.', +'protectedpage' => 'Хъумэным щӀэт напэкӀуэцӀ', +'jumpto' => 'Мыбы кӀуэн:', +'jumptonavigation' => 'навигацэ', +'jumptosearch' => 'лъыхъуэн', +'view-pool-error' => 'Джыпсту серверхэм гугъу ятелъ +Мы напэкӀуэцӀым еплъын кӀэлъэӀуэгъу куэд къэкӀуа. +ТӀэкӀу ежи, яужым иджыри зэ техьэж. + +$1', +'pool-timeout' => 'Теубыдыгъуэм и зэманыр икӀа', +'pool-queuefull' => 'ЩӀэлъэӀуэгъулъэр из хъуащ', +'pool-errorunknown' => 'ХэщӀыкӀыгъэ зимыӀэ щэуэгъуэ', + +# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). +'aboutsite' => '{{grammar:genitive|{{SITENAME}}}} -м теухуауэ', +'aboutpage' => 'Project:Теухуауэ', +'copyright' => 'Мыбы итыр къэутӀыпщащ зытещӀыхьари: $1.', +'copyrightpage' => '{{ns:project}}:ЗиIэдакъэм и пӀалъэ', +'currentevents' => 'КъекӀуэкӀ Iуэхугъуэхэр', +'currentevents-url' => 'Project:Хъыбар екӀуэкӀхэр', +'disclaimers' => 'Жэуап Ӏыгъыныр зыщхьэщыхын', +'disclaimerpage' => 'Project:Пщэрылъу къэмыштэн', +'edithelp' => 'Гъэтэрэзыным и щӀэупщӀэ', +'edithelppage' => 'Help:Гъэтэрэзыным и дэIэпыкъуэгъу', +'helppage' => 'Help:ДэӀэпыкъуэгъу', +'mainpage' => 'НапэкӀуэцӀ нэхъыщхьэ', +'mainpage-description' => 'НапэкӀуэцӀ нэхъыщхьэ', +'policy-url' => 'Project:Хабзэхэр', +'portal' => 'Лъэпкъыгъуэ ӀухьэпӀэ', +'portal-url' => 'Project:Лъэпкъыгъуэ ӀухьэпӀэ', +'privacy' => 'Конфиденциалым теухуа хабзэр', +'privacypage' => 'Project:Конфиденциалым теухуа хабзэр', + +'badaccess' => 'Техьэным щыуагъэ иӀэщ', +'badaccess-group0' => 'Ебгъэжьа Ӏохугъуэр быщӀэн пӀалъэ уиӀэкъым.', +'badaccess-groups' => 'Егъэжьа Ӏохугъуэр зыщӀэн пӀалъэ зиӀэр {{PLURAL:$2|гупхэм|гупым}} $1 хэтхэра', + +'versionrequired' => 'MediaWiki и версиэ $1 хуэныкъуэщ', +'versionrequiredtext' => 'Мы напэкӀуэцӀым елэжьын щхьэкӀэ MediaWiki версиэ $1 хуэныкъуэ. Еплъ [[Special:Version|къагъэсэбэп ПО-хэм я къэӀохугъуэ]].', + +'ok' => 'ОК', +'retrievedfrom' => 'Къыздырахар: "$1"', +'youhavenewmessages' => 'КъыпхуэкӀуауэ уиӀэ $1 ($2).', +'newmessageslink' => 'тхыгъэщIэхэр', +'newmessagesdifflink' => 'иужьрей зэхъуэкІыныгъэр', +'youhavenewmessagesmulti' => 'КъыпхуэкӀуауэ уиӀэ тхыгъэщӀэхэр $1 идеж', +'editsection' => 'гъэтэрэзын', +'editold' => 'гъэтэрэзын', +'viewsourceold' => 'къызыхэкӀа кодым еплъын', +'editlink' => 'гъэтэрэзын', +'viewsourcelink' => 'къызыхэкӀа кодым еплъын', +'editsectionhint' => 'Секцэр гъэтэрэзын: $1', +'toc' => 'Хэтхахэр', +'showtoc' => 'гъэлъэгъуэн', +'hidetoc' => 'гъэпшкӀун', +'thisisdeleted' => 'Еплъын иэ зэфӀэгъэувэжын $1?', +'viewdeleted' => 'Еплъын $1?', +'restorelink' => '{{PLURAL:$1|$1 гъэтэрэзыгъуэ ихар|$1 гъэтэрэзыгъуэ ихахэр|$1 гъэтэрэзыгъуэ ихыжахэр}}', +'feedlinks' => 'Хуэду:', +'feed-invalid' => 'ӀэпэщӀэдз тыныгъэм и типыр тэрэзкъым.', +'feed-unavailable' => 'Синдикациэ тыныгъэхэр хъухэкъым', +'site-rss-feed' => '$1 — RSS-тыныгъэ', +'site-atom-feed' => '$1 — Atom-тыныгъэ', +'page-rss-feed' => '$1 — RSS-тыныгъэ', +'page-atom-feed' => '$1 — Atom-тыныгъэ', +'red-link-title' => '$1 (апхуэдэ напэкӀуэцӀ щыӀэкъым)', + +# Short words for each namespace, by default used in the namespace tab in monobook +'nstab-main' => 'Тхыгъэ', +'nstab-user' => 'ЦӀыхухэт', +'nstab-media' => 'Медиэ напэкӀуэцӀ', +'nstab-special' => 'Лэжыгъэ напэкӀуэцӀ', +'nstab-project' => 'Проэктым теухуауэ', +'nstab-image' => 'Файл', +'nstab-mediawiki' => 'Тхыгъэ', +'nstab-template' => 'Шаблон', +'nstab-help' => 'ДэIэпыкъуэгъу', +'nstab-category' => 'Категориэ', + +# Main script and global functions +'nosuchaction' => 'Апхуэдэ Ӏохугъуэ щыӀэкъым', +'nosuchactiontext' => 'Ӏохугъуэ URL-м етар тэрэзкъым. +URL щиптхэм хэукъуэгъуэ быщӀа хъунщ иэ техэпӀэ нэмыщӀымкӀэ укӀуа. +Абым нэмыщӀу проэкт {{SITENAME}} хуэкъуэгъуэ зэриӀэр игъэлъэгъуэфыну.', +'nosuchspecialpage' => 'Апхуэдэ лэжыгъэ напэкӀуэцӀ щыӀэкъым', +'nospecialpagetext' => 'НапэкӀуэцӀ лэжыгъэ узлъыхъуэм хуэдэ щыӀэкъым. + +НапэкӀуэцӀ лэжыгъэ щыӀэхэм я тхылъ: [[Special:SpecialPages|{{int:specialpages}}]].', + +# General errors +'error' => 'Щыуагъэ', +'databaseerror' => 'Ӏохугъуэлъэм и щыуагъэ', +'dberrortext' => 'Ӏохугъуэлъэм и щӀэлъэуэн синтаксисым и щыуагъэ къахэкӀа. +Абым программэ къэтыным щыуагъэ иӀэфыну къокӀыр. +Яужырей Ӏохугъуэлъэм и щӀэлъэуэныр: +
    $1
    +функциэм къыхэкӀа «$2». +Ӏохугъуэлъэм щыуагъэр къитыжащ «$3: $4».', +'dberrortextcl' => 'Ӏохугъуэлъэм и щӀэлъэуэн синтаксисым и щыуагъэ къахэкӀа. +Яужырей Ӏохугъуэлъэм и щӀэлъэуэныр: +$1 +«$2» функциэм къыхэкӀа. +Ӏохугъуэлъэм щыуагъэр къитыжащ «$3: $4».', +'laggedslavemode' => 'Гу лъытэ: напэкӀуэцӀым яужырэй къэгъэщӀэрыщӀэгъуэхэр хэмылъынкӀи мэхъур.', +'readonly' => 'Ӏохугъуэлъэм итхэныр теубыдауэ щытщ', +'enterlockreason' => 'Теубыдэгъуэр къызхэкӀамрэ зэман зэрекӀуэкӀынумрэ къэӀоху.', +'readonlytext' => 'ТхыгъэщӀэхэр хэлъхьэнымрэ пэмыщӀ зэхъуэкӀыгъуэ щӀынымрэ иджыпсту теубыдауэ щытщ: план-лэжьыгъэ ирагъэкӀуэкӀхэм теухуауэ. +Администратэр зэтезубыдам къиӀохур мыра: +$1', +'missing-article' => 'Ӏохугъуэлъэм зыщэлъаӀуэ напэкӀуэцӀым и тхылъ хэлъкъым, къэгъуэтын хуэятэр, «$1» $2. +Апхуэду щыхъур гъэтэрэзыгъуэхэм я техьэпӀэ жьы хъуахэм щытехьэкӀэ, напэкӀуэцӀ ирахыжам. +Лажьэ зиӀэр армырамэ, программэ тыгъэм и щыуагъэ къэбгъуэта хъунщ. +[[Special:ListUsers/sysop|Тхьэмадэм]] ар къыхуэӀоху, URL-ри игъусу.', +'missingarticle-rev' => '(версиэ № $1)', +'missingarticle-diff' => '(зэщхьэщыкӀыгъуэ: $1, $2)', +'readonly_lag' => 'Ӏохугъуэлъэр зэман гуэрэкӀэ автоматику зэтриубыда зэхъуэкӀыгъуэ щӀыным щхьэкӀэ, Ӏохугъуэлъэм и тӀуанэ серверым япэрем теху синхронизациэ иримгъэкӀуэкӀ щыкӀэ.', +'internalerror' => 'И кӀуэцӀ щыуагъэ', +'internalerror_info' => 'И кӀуэцӀ щыуагъэ: $1', +'fileappenderrorread' => 'Хэлъхьэгъуэм идежь «$1» гурыӀуэгъуэ хъуакъым.', +'fileappenderror' => '«$2»-м «$1»-р щӀэрылъхьэн хъуакъым.', +'filecopyerror' => '«$1»-м и копиэ «$2»-м хуэкӀуэкъым.', +'filerenameerror' => '«$1»-м и цӀэр «$2»-кӀэ зэхъуэкӀыфкъым.', +'filedeleteerror' => 'Файл «$1»-р ирихыфкъым.', +'directorycreateerror' => '«$1»-м и директориэ ищӀыфкъым.', +'filenotfound' => 'Файл «$1»-р игъуэтыфкъым.', +'fileexistserror' => 'Файл «$1»-р иритхэфкъым: апхуэдэ файл щыӀэщ.', +'unexpected' => 'Мыхьэнэ темыхуэ: «$1»=«$2».', +'formerror' => 'Щыуагъэ: Ӏохугъуэ формэр егъэхьын хъукъым', +'badarticleerror' => 'А лэжьыгъэр мы напэкӀуэцӀым егъэкӀуэкӀыфынукъым.', +'cannotdelete' => 'НапэкӀуэцӀыр иэ файл «$1»-р ихыфкъым. +НэмыщӀ гуэрэм ирихагъэнкӀ хъун.', +'badtitle' => 'ЦӀэр хъунукъым', +'badtitletext' => 'УзщӀэупщӀэ напэкӀуэцӀым и цӀэр тэрэзкъым, нэщӀ, мытэрэзу интервикир иэ бзэ-зэхуэкур щытщ. И цӀэм дэмыгъэ емыкӀуэалъэ хэтынкӀи хъун.', +'perfcached' => 'Мы Ӏохугъуэхэр кэшым къыхахэ, яужырей зэхъуэкӀыгъуэхэр химыубыдэнкӀи мэхъу.', +'perfcachedts' => 'Мы Ӏохугъуэхэр кэшым къыхахэ, яужыреуэ къыщыгъэщӀэрэщӀыжар $1.', +'querypage-no-updates' => 'Мы напэкӀуэцӀым и къэгъэщӀэрэщӀыныр джыпсту теубыдауэ щытщ. +Ӏохугъуэ мыде хэтхэр актуализациэ хъунукъым.', +'wrong_wfQuery_params' => 'Параметыр емыкӀу wfQuery-м()
    +Функциэ: $1
    +ЩӀэлъэуэгъуэ: $2', +'viewsource' => 'Хэплъэн', +'viewsourcefor' => '$1 щхьэкӀэ', +'actionthrottled' => 'ЩӀэхыгъэм убыдыгъэ иӀэ', +'actionthrottledtext' => 'Анти-спамым пэщытыным шъхьэкӀэ, зэманыгъуэ кӀэщӀым уигугъэр куэду и къэгъэсэбэпыныр теубыдауэ щытщ. +Дэкъикъэ зытӀущ тегъэкӀи, иджыри зэ щӀыж.', +'protectedpagetext' => 'Мы напэкӀуэцӀыр и гъэтэрэзыным теубыдауэ щытщ', +'viewsourcetext' => 'Мы напэкӀуэцӀым и нэхъыщхьэ тхылъыр мыбдежьым уэплъыфыну, и копиэри ипхыфыну:', +'protectedinterface' => 'Мы напэкӀуэцӀым интерфейс тхылъ хэтщ, программэтыныгъэм еуэ. Хьэуэйн имыӀэн щхьэкӀэ, и гъэтэрэзыныр теубыдауэ щытщ.', +'editinginterface' => "'''Гу лъытэ:''' Бгъэтэрэз напэкӀуэцӀым интерфэйс тхылъ хэтщ, программэтыгъэм еуэ. +И зэхъуэкӀыгъуэм интерфэйсым и сурэтым хэуэну адрей цӀыхухэтхэм щхьэкӀэ. +ЗэдзэкӀыным шъхьэкӀэ къэбгъэсэбэпыну нэхъыфӀыр [http://translatewiki.net/wiki/Main_Page?setlang=ru translatewiki.net], MediaWiki-м и локализациэм и проэктщ.", +'sqlhidden' => '(SQL щӀэупщӀэгъуэр гъэлъэгъуакъым)', +'cascadeprotected' => 'ЗэхъуэкӀыныгъэм щыхъумауэ щыт напэкӀуэцӀыр, хэгъэхьауэ щыт {{PLURAL:$1|яужкӀэ напэкӀуэцӀ итым| яужкӀэ напэкӀуэцӀ итхэм}} каскад хъумэныгъэм: +$2', +'namespaceprotected' => "ПӀалъэ уиӀэкъым напэкӀуэцӀ '''$1''' хэтхэр бгъэтэрэзын.", +'customcssjsprotected' => 'Мы напэкӀуэцӀыр бгъэтэрэзын пӀалъэ уиӀэкъым, нэмыщӀ цӀыхухэтым и зэгъэзэхуэгъуэхэр зэрхэтым щхьэкӀэ.', +'ns-specialprotected' => 'Специал напэкӀуэцӀхэр гъэтэрэзын хъунукъым.', +'titleprotected' => 'Апхуэдэ цӀэ зиӀэ напэкӀуэцӀ щӀыныр цӀыхухэт [[User:$1|$1]]-м триубыда. +Ар къызхэкӀар: "\'\'$2\'\'".', + +# Virus scanner +'virus-badscanner' => "Зэгъэзэхуэгъуэм и щэуэгъуэ: вирусхэм яуэ, хэщӀыкӀыгъэ зимыӀэ сканэр: ''$1''", +'virus-scanfailed' => 'Сканэр щӀыным и щэуэгъуэ (кодыр $1)', +'virus-unknownscanner' => 'хэщӀыкӀыгъэ зимыӀэ антивирус:', + +# Login and logout pages +'logouttext' => "'''Джыпсту уикӀыжауэ щыт.''' + +Уихьэжьыфыну {{grammar:genitive|{{SITENAME}}}} зыкъумгъэцӀыху иэ [[Special:UserLogin|зыкъегъэцӀыхун аргуэру]] уи цӀэмкӀэ иэ нэмыщӀымкӀэ. +НапэкӀуэцӀ гуэрэхэр япэми хуэду къикӀыфынухэ, системэм уимыкӀыжьа хуэду. Апхуэду щымытын щхьэкӀэ браузэр кэшыр къэгъэщӀырыщӀын хуэй.", +'welcomecreation' => '== Къеблагъэ, $1! == +Уи аккаунтыр хьэзырщ. +Зыщумгъэгъупшэ сайтым уи [[Special:Preferences|персонал зэгъэзэхуэгъуэ]] быщӀын.', +'yourname' => 'Уи цӀэр:', +'yourpassword' => 'Пэролыр:', +'yourpasswordagain' => 'Иджыри зэ пэролыр:', +'remembermypassword' => 'Сызэрихьэр компьютерым щыIыгъын (махуэу $1 {{PLURAL:$1|щIимыгъуу|щIимыгъуу}})', +'securelogin-stick-https' => 'HTTPS -мкӀэ ихьа нэужми ирилэжьэн', +'yourdomainname' => 'Уи доменыр:', +'externaldberror' => 'Щэуэгъуэ хъуа, аутентификациэ щекӀуэкӀым иэ апхуэдиз пӀалъэ уиӀу щыткъым, уи нэкугъуэ аккаунтыр зэпхъуэкӀын.', +'login' => 'Системэм зыкъегъэцIыхуын', +'nav-login-createaccount' => 'Ихьэн/щӀэуэ зитхэн', +'loginprompt' => '«Cookies» уиӀэн хуэй, системэм уихьэн щхьэкӀэ.', +'userlogin' => 'Ихьэн/зыхэтхэн', +'userloginnocreate' => 'Системэм зыкъегъэцӀыхуын', +'logout' => 'ИкӀыжын', +'userlogout' => 'ИкӀыжын', +'notloggedin' => 'Системэм зэкъебгъэцӀыхуакъым', +'nologin' => "Аккаунт щыӀэкъэ? '''$1'''.", +'nologinlink' => 'Аккаунт щІын', +'createaccount' => 'Аккаун щӀэуэ щӀын', +'gotaccount' => "Аккаунт щыӀу щыт? '''$1'''.", +'gotaccountlink' => 'Системэм зыкъегъэцӀыху', +'createaccountmail' => 'Электронэ почтэмкӀэ', +'createaccountreason' => 'Щхьэусыгъуэ:', +'badretype' => 'Парол иптхахэр зэтеху щытхэкъым.', +'userexists' => 'ЦыхухэтыцӀэ иптхар пэмыкӀ гуэрэм къегъэсэбэп. +ПэмыкӀ цӀэ къыхэх.', +'loginerror' => 'Логиныр тэрэзкъым', +'createaccounterror' => 'ИщӀыфкъым аккаунт: $1', +'nocookiesnew' => 'Цыхухэтым и аккаунтыр щӀащ ауэ зыкъигъэцӀыхуауэ щыткъым. +{{SITENAME}} къигъэсэбэпыр «cookies» хэтхэм зыкъагъэцӀыхун щхьэкӀэ. +Уиде «cookies» къэмыдауэ щытщ. +Къэбда яуж, зыкъебгъэцӀыхуфыну уицӀэ-парол щӀэхэмкӀэ.', +'nocookieslogin' => '{{SITENAME}} къигъэсэбэпыр «cookies» цӀыхухэтхэр къигъэцӀыхун щхьэкӀэ. +Уэ ар бгъонкӀыфауэ щыт. +Хэгъэнэжьи иджыри зэ щӀыж.', +'noname' => 'ЦӀыхухэтыцӀэ хъунур иптхакъым.', +'loginsuccesstitle' => 'ЗыкъегъэцӀыхуныр фӀыуэ зэфӀэкӀа.', +'loginsuccess' => "'''Иджы цӀэ \"\$1\" зепхьу улэжьэфыну.'''", +'nosuchuser' => '"$1" цӀэ зезыхьэ цӀыхухэт щыӀэкъым. +ЦӀыхухэтыцӀэхэр гурышхъу щытхэ хьэрыф регистырымкӀэ. +ЦӀэр тэрэзу птхамэ еплъ иэ [[Special:UserLogin/signup|аккаунт щӀэуэ щӀы]].', +'nosuchusershort' => 'ЦӀыхухэт "$1" щыӀэкъым. +ЦӀэр тэрэзу итхамэ еплъ.', +'nouserspecified' => 'ЦӀыхухэтыцӀэр иптхэн хуэй.', +'login-userblocked' => 'Мы цӀыхухэтыр теубыдауэ щытщ. Ихьэныр хуадэкъым.', +'wrongpassword' => 'Парол иптхар тэрэзкъым. +Иджыри зэ щӀыж.', +'wrongpasswordempty' => 'Паролыр здитын хуэр нэщӀ. +Иджыри зэ еплъ.', +'passwordtooshort' => 'Паролым фӀэкӀын хуэй {{PLURAL:$1|1 дэмыгъэ|$1 дэмыгъэхэм}} хэт бжыгъэр.', +'password-name-match' => 'Парол итхар цӀыхухэтыцӀэм темыху щытын хуэйщ.', +'password-login-forbidden' => 'Апхуэдэ цӀыхухэтым еуэ цӀэрэ паролрэ къэбгъэщхьэпэ хъунукъым.', +'mailmypassword' => 'ПэролыщӀэ къеӀыхын', +'passwordremindertitle' => 'Парол къэгъэщӀэжыгъуэ цӀыхухэт {{SITENAME}}-м.', +'passwordremindertext' => 'Згуэрэм (уэрауэ хъун, IP адрес $1-мкӀэ) ищӀыну щӀэлъэӀуа +парол щӀэуэ {{SITENAME}} ($4) щхьэкӀэ. ЦӀыхухэт $2 +щхьэкӀэ парол щӀэх щӀащ: $3. Ар уи щӀэлъэӀуэгъу щытамэ, +системэм зыкъебгъэцӀыхун хуэй, яужм парол щӀэуэ къыхэпхын. +Уи парол щӀэхыр зэрлэжэнур $5 {{PLURAL:$5|махуэ|махуэкӀэ}}. + +ЩӀэлъэӀуэгъуэр парол зэхъуэкӀыным йомыгъэхьамэ, уи паролыр къэпщӀэжауэ, +зэпхъуэкӀыну ухомемэ, мы тхылъ къыпхуэкӀуам гу лъумыту +уи парол уиэр япэм хуэдуи къэгъэсэбэпыфыну.', +'noemail' => 'ЦӀыхухэт $1 зицӀэм и электронэ почтэр итхатэкъым.', +'noemailcreate' => 'Уи электронэ почтэм и адресыр тэрэзу иптхэн хуэй.', +'passwordsent' => 'Парол щӀэр цӀыхухэт $1 электронэ почтэ иритхам егъэхьауэ щытщ. +Уи паролыр къыпӀэкӀэхьа яуж системэм иджыри зэ зыкъегъэцӀыху.', +'blocked-mailpassword' => 'Уи IP-адресыр бгъэтэрэзын пӀалъэ уиӀэкъым, абым щхьэкӀэ парол къэщӀэжын функциэри теубыдауэ щытщ.', +'eauthentsent' => 'Электронэ почтэ адрес итхам тхылъ егъэхьащ, зэхъуэкӀыныгъэм и пӀалъэм теухуауэ. А тхылъым зэгъэзэхуэгъуэгъуэхэр итщ, быщӀын хуэуэ а электронэ адресыр уэуэейуэ зэрщытыр гъэзэнщӀэн щхьэкӀэ.', +'throttled-mailpassword' => 'Парол къэгъэщӀэжын функциэр къэгъэщхьэпа {{PLURAL:$1|сэхьэт|$1 сэхьэтхэм}}. +Зэраныгъуэ абым къыхэмкӀын щхьэкӀэ, къэбгъэщхьэпэ зэрыхъунур {{PLURAL:$1|сэхьэтым|$1 сэхьэтхэм}}.', +'mailerror' => 'Почтэ егъэхьыным и щыуэгъуэ: $1', +'acct_creation_throttle_hit' => 'Жэшмахуэ блэкӀам уи IP-адресымкӀэ щӀауэ щытщ {{PLURAL:$1|1 аккаунт|$1 аккаунту}}, абым фӀэкӀ хъунукъым зэман кӀуамкӀэ. +ЗэрыхъумкӀэ, цӀыхухэт а IP-адресыр зиӀэр джыпсту аккаунт щӀэуэ ящӀыфынукъым.', +'emailauthenticated' => 'Уи почтэ адрес $2 гъэзэнщӀащ $3', +'emailnotauthenticated' => 'Уи почтэ адресыр иджыри гъэзэнщӀауэ щыткъым, вики-гъакӀуэ электронэ почтэм елэжыр гъонкӀыфӀауэ щыт.', +'noemailprefs' => 'Электронэ почтэм и адресыр итхатэкъым, вики-гъакӀуэм и функциэ электронэ почтэм елэжьыр гъонкӀыфӀа.', +'emailconfirmlink' => 'Уи электронэ почтэм и адресым хуэзахуэн', +'invalidemailaddress' => 'Электронэ почтэм и адресыр къиштэкъым, форматым зэртемыхуэм щхьэкӀэ. +Адресыр тэрэзу итхэ иэ сатырыр нэщӀу къэгъанэ.', +'accountcreated' => 'Аккаунтыр хьэзырщ', +'accountcreatedtext' => 'ЦӀыхухэт $1 и аккаунтыр хьэзырщ.', +'createaccount-title' => 'Аккаунт щӀын {{SITENAME}} щхьэкӀэ', +'createaccount-text' => 'Згуэрэм аккаун «$2» ищӀащ, {{SITENAME}} ($4) проэктым и серверым деж, парол «$3» иту, уи электронэ адресыр иритхауэ. Уи паролыр зэпхъуэкӀмэ нэхъыфӀ. + +Аккаунтыр щауэгъуэкӀэ щӀамэ мы тхылъым гу лъумытэ.', +'usernamehasherror' => 'ЦӀыхухэтыцӀэм дэмыгъэ зэтебза хэт хъунукъым', +'login-throttled' => 'Системэм зыкъебгъэцӀыхуну амалыншу куэдыщэрэ упылъа. +ТӀэкӀу ежэн хуэй, хъэрзыну, аргуэру зыкъебгъэцӀыхуным щхьэкӀэ.', +'loginlanguagelabel' => 'Бзэ: $1', +'suspicious-userlogout' => 'Сеанс щыгъэтын узкӀэлъэӀуар гъэзэнщӀакъым, мыкорректнэ браузэрым иэ кэш зыщӀ проксим иригъэхьа хуэду ещхьщ.', + +# E-mail sending +'php-mail-error-unknown' => 'ХэщӀыкӀыгъуэ зымыӀэ хэукъуэгъуэ PHP-функциэ mail()', + +# Password reset dialog +'resetpass' => 'Пэролым и хъуэжын', +'resetpass_announce' => 'Парол щӀэхкӀэ системэм зыкъебгъэцӀыхуа, уи электронэ почтэм къыпхуэкӀуамкӀэ. Системэм зыкъегъэцӀыхуныр нэбгъэсын щхьэкӀэ, парол щӀэ тебгъувэн хуэй.', +'resetpass_header' => 'Аккаунтым и парол зэхъуэкӀыгъуэ', +'oldpassword' => 'Паролыжьыр:', +'newpassword' => 'ПаролыщIэр:', +'retypenew' => 'ПаролыщIэр иджырэ зэ итхэж:', +'resetpass_submit' => 'Паролыр итхи ихьэ', +'resetpass_success' => 'Уи паролыр хъуэжа хъуащ! Иджыпсту системэм йохьэ...', +'resetpass_forbidden' => 'Паролыр зэхъуэкӀа хъунукъым', +'resetpass-no-info' => 'Мы напэкӀуэцӀым уелэжьыным щхьэкӀэ системэм зыкъебгъэцӀыхун хуэй.', +'resetpass-submit-loggedin' => 'Паролыр зэхъуэкӀын', +'resetpass-submit-cancel' => 'ЩӀегъуэжын', +'resetpass-wrong-oldpass' => 'Парол щӀэхыр иэ щыӀэр тэрэзкъым. +Уи паролыр узыншу зэпхъуэкӀагъэн иэ щӀэуэ щӀэх парол узщӀэлъэӀуар узыншу зэфӀэкӀа.', +'resetpass-temp-password' => 'ЩӀэх паролыр:', + +# Edit page toolbar +'bold_sample' => 'Ӏуву щӀын хьэрыфхэр', +'bold_tip' => 'Ӏуву щӀын хьэрыфхэр', +'italic_sample' => 'Текстыр укъуэншауэ', +'italic_tip' => 'Хьэрыфхэр укъэншауэ щӀын', +'link_sample' => 'ТехьэпӀэм и цIэр', +'link_tip' => 'КІуэцІ техьэпІэ', +'extlink_sample' => 'http://www.example.com техьэпӀэхэм я псэлъащхьэ', +'extlink_tip' => 'ТехьэпӀэ зэIухар (зыщывмыгъэгъупщэ http:// префиксыр)', +'headline_sample' => 'Псалъащхьэм и тхылъ', +'headline_tip' => 'ТІуанэ щхьэгъэ псалъащхьэ', +'math_sample' => 'Мыбдеж формулэ итхэ', +'math_tip' => 'Математикэм тещIыхьауэ формулэ (LaTeX)', +'nowiki_sample' => 'Формациэ мыщӀа тхыгъэр мыбдеж игъэувэ', +'nowiki_tip' => 'Вики-форматыр Iухын', +'image_tip' => 'Файл кӀуэцӀылъу', +'media_tip' => 'Файлым и техьэпӀэ', +'sig_tip' => 'Уи ӀэпэщӀэдзымрэ зэман щытехуэмрэ', +'hr_tip' => 'ЩӀэтхъэгъуэ щӀыхь (куэдрэ къэвмыгъэмэбэп)', + +# Edit pages +'summary' => 'Хъуэжахэм тепсэлъыхь:', +'subject' => 'Темэ/псалъащхьэ:', +'minoredit' => 'МащIэу хъуэжа', +'watchthis' => 'Мы напэкӀуэцIыр узкӀэлъыплъхэм я тылъым хэлъхьэн', +'savearticle' => 'НапэкӀуэцIыр итхэн', +'preview' => 'Япэ-еплъ', +'showpreview' => 'Хэплъэн япэ щӀыкӀэ', +'showlivepreview' => 'ЩӀэх япэ-еплъ', +'showdiff' => 'ЗэхъуэкӀыныгъэ хэлъхьахэр', +'anoneditwarning' => "'''Гу лъытэ!''': ЗыкъебгъэцӀыхуакъым системэм. Уи IP-адресыр иритхэнущ напэкӀуэцӀым и зэхъуэкӀыныгъэ тхыдэм.", +'anonpreviewwarning' => "''Системэм зыкъебгъэцӀыхуакъым. Итхэным уи IP-адресыр къыринэну напэкӀуэцӀым и зэхъуэкӀыгъуэхэм я тхыдэм.''", +'missingsummary' => "'''Гу лъытэ.''' ЗэхъуэкӀыгъуэм тепсэлъыхьыгъуэ кӀэщӀу ептакъым. ЕтӀуану «{{int:savearticle}}» тепкъузэмэ уи зэхъуэкӀыгъуэр тепсэлъыхьыншэу иритхэнущ.", +'missingcommenttext' => 'ИщӀагъымкӀэ уи тхыгъэр итхэ.', +'missingcommentheader' => "'''Гу лъытэ.''' Тепсэлъыхьыгъуэ къэбгъэнам псэлъащхьэ ептакъым. +ЕтӀуану «{{int:savearticle}}» тепкъузэмэ уи гъэтэрэзыгъуэр псэлъащхьэншу иритхэнущ.", +'summary-preview' => 'Аннотациэр:', +'subject-preview' => 'Псэлъащхьэ хъунур:', +'blockedtitle' => 'ЦӀыхухэтыр теубыдащ', +'blockedtext' => "'''Уи аккаунтыр иэ IP-адресыр теубыдащ.''' + +Тезубыдар тхьэмадэ $1. +Ар къызхэкӀауэ щытыр: ''«$2»''. + +* Теубыдыгъэр щыкӀэдзар: $8 +* Теубыдыгъэр щиухыр: $6 +* Теубыдауэ зэрщытар: $7 + +Тхыгъэ къыхуэбгъэнэфыну цӀыхухэт $1 -м иэ пэмыкӀ узыхуэй [[{{MediaWiki:Grouppage-sysop}}|тхьэмадэм]], теубыдыгъэм тепсэлъыхьыным щхьэкӀэ. +Гу лъытэ тхыгъэ зэрумгъэхьыфынур тхьэмадэм дежь, системэм зыкъебгъэцӀыхуауэ, уи адрес электронэ почтэр къумылъытауэ щытмэ [[Special:Preferences|уи зэгъэзэхуэгъуэхэм]], абым пэмыкӀыу тхыгъэ егъэхьынхэри пхуамыдауэ щытмэ уи теубыдэгъуэм. +Уи IP-адресыр - $3, теубыдыгъуэм и идентификаторыр - #$5. +Уи тхыгъэхэм ахэр игъувурэ щӀы.", +'autoblockedtext' => 'Уи IP-адресыр аутоматикэкӀэ теубыдащ, ар къызхэкӀар япэм теубыдауэ щыта цӀыхухэт гуэрэм къызэригъэсэбэпам щхьэкӀэ. Тхьэмадэ тезубыдам ($1) къитхыр мыращ: + +:«$2» + +* Теубыдыгъэр щыкӀэдзар: $8 +* Теубыдыгъэр щиухыр: $6 +* Теубыдауэ зэрщытар: $7 + +Тхыгъэ хуэбгъэхьыфыну цӀыхухэт $1-м иэ пэмыкӀ узыхуэй [[{{MediaWiki:Grouppage-sysop}}|тхьэмадэм]], теубыдыгъэм тепсэлъыхьыным щхьэкӀэ. +Гу лъытэ тхыгъэ зэрумгъэхьыфынур тхьэмадэм дежь, системэм зыкъебгъэцӀыхуауэ, уи адрес электронэ почтэр къумылъытауэ щытмэ [[Special:Preferences|уи зэгъэзэхуэгъуэхэм]], абым пэмыкӀыу тхыгъэ егъэхьынхэри пхуамыдауэ щытмэ уи теубыдэгъуэм. + +Уи IP-адресыр - $3, теубыдыгъуэм и идентификаторыр - #$5. +Уи тхыгъэхэм ахэр игъувурэ щӀы.', +'blockednoreason' => 'щхьэусыгъуэр итхакъым', +'blockedoriginalsource' => 'ИщӀгъымкӀэ напэкӀуэцӀ «$1» и тхыгъэр гъэлъэгъуа.', +'blockededitsource' => "ИщӀагъым гъэлъэгъуа тхыгъэ '''уи зэхъуэкӀыгъуэхэр''' напэкӀуэцӀ «$1» щыщхэр.", +'whitelistedittitle' => 'ЗэпхъуэкӀыфыным щхьэкӀэ системэм зыкъебгъэцӀыхун хуэй.', +'whitelistedittext' => '$1 ухуэныкъу щытщ, напэкӀуэцӀхэр зэпхъуэкӀыным щхьэкӀэ.', +'confirmedittext' => 'Уи электронэ почтэм и адресыр бгъэзэнкӀэн хуэйщ, напэкӀуэцӀхэр бгъэтэрэзыным ипэкӀэ. +[[Special:Preferences|Зэгъэзэхуэгъуэ напэкӀуэцӀым]] уи электронэ почтэм и адресыр итхи гъэзанкӀэ.', +'nosuchsectiontitle' => 'Лъэныкъуэгъуэр игъуэтыфкъым', +'nosuchsectiontext' => 'Лъэныкъуэгъ щымыӀэр бгъэтэрэзыным упылъ. +Ирахауэ иэ пэмыкӀ пӀэм ирагъувауэ щытыфыну, мы напэкӀуэцӀым уэплъыху.', +'loginreqtitle' => 'ЗыкъебгъэцӀыхун хуэй', +'loginreqlink' => 'зыкъегъэцӀыхун', +'loginreqpagetext' => '$1 ухуейщ адрей напэкӀуэцӀхэм уеплъын щхьэкӀэ', +'accmailtitle' => 'Пэролыр егъэхьащ.', +'accmailtext' => "ЦӀыхухэт [[User talk:$1|$1-м]] щхьэкӀэ дэмыгъэ зэхэдзыгъэншу парол зэхэгъувар $2 адресым егъэхьа. +Системэм регистрациэ быщӀа яуж ''[[Special:ChangePassword|паролыр зэпхъуэкӀыфыну]].''", +'newarticle' => '(ЩIэуэ)', +'newarticletext' => 'НапэкӀуэцӀ иджыри щымыӀэм утехуащ техьэпӀэмкэ. +Ар быщӀын щхьэкӀэ, и щӀагъым щӀэт игъувапӀэм тхылъ итхэ (еплъ [[{{MediaWiki:Helppage}}|щӀэупщӀэгъуэхэм я напэкӀуэцӀ]]). +ГъуэщэгъуэкӀэ мыбым утехуамэ, уи браузерым гъэзэжыгъуэ иӀэм текъузи зэфэкащ.', +'anontalkpagetext' => "----''Мы напэкӀуэцӀ тепсэлъыхьыгъуэр аноним цӀыхухэтым ей, аккаунт зымыщӀам иэ къэзмыгъэсэбэпым. +Абым щхьэкӀэ IP-адресымкӀэ идентификациэ иратыр. +Аноним цӀыхухэту ущытмэ, тхыгъэ къыпхуэкӀуауэ уигугъэмэ, [[Special:UserLogin/signup|аккаунт щӀы]] иэ [[Special:UserLogin|системэм зыкъегъэцӀыху]], япэкӀэ хэукъуэгъуэ пэмыкӀ цӀыхухэт анэнимхэм ям ухэмыхуэн щхьэкӀэ.''", +'noarticletext' => "Иджыпсту мы напэкӀуэцӀыр нэщӀ. +Узхуэныкъуэм [[Special:Search/{{PAGENAME}}|игугъ бгъуэтыфыну]] нэгъуэщӀ напэкӀуэцӀхэм, [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} тхылъхэм абым теухуа тхыгъэхэм], иэ '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} апхуэдэцӀэ зиӀэ напэкӀуцӀ быщӀыфынущ]'''.", +'noarticletext-nopermission' => 'Джыпсту мы напэкӀуэцӀыр нэщӀу щытщ. +Узхуэныкъуэм [[Special:Search/{{PAGENAME}}|и гугъ бгъуэтыфыну]] нэгъуэщӀ напэкӀуэцӀхэм, +иэ [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} абым теухуа тхъыгъэхэр].', +'userpage-userdoesnotexist' => 'Аккаунт «$1» щыӀэкъым. У арэзыуэ ущыт мы напэкӀуэцӀыр быщӀыным иэ зэпхъуэкӀыным.', +'userpage-userdoesnotexist-view' => 'ЦӀыхухэт «$1»-м и аккаунтым регистрациэ иӀэкъым.', +'blocked-notice-logextract' => 'Мы цӀыхухэтыр иджыпсту теубыдауэ щытщ. +ИщӀагъымкӀэ теубыдыгъэ тхылъым и яужырей итхэгъуэр гъэлъэгъуа:', +'clearyourcache' => "'''Къэохугъуэ:'''Итха яуж зэхъуэкӀыгъу хъуар къэнэн щхьэкӀэ, уи браузэрым и кэшыр гъэкъэбзэн хуэй: '''Mozilla / Firefox''': ''Ctrl+Shift+R'', '''IE:''' ''Ctrl+F5'', '''Safari''': ''Cmd+Shift+R'', '''Konqueror''': ''F5'', '''Opera''': ''Tools→Preferences''-мкӀэ уикӀын хуэй.", +'usercssyoucanpreview' => "'''ДэӀэпыкъуэгъу псалъэ.''' Текъузэ «{{int:showpreview}}» уи CSS-файлым еплъын щхьэкӀэ итхэным ипэкӀэ.", +'userjsyoucanpreview' => "'''ДэӀэпыкъуэгъу псалъэ.''' Текъузэ «{{int:showpreview}}» уи JS-файл щӀэм еплъыным щхьэкӀэ итхэным ипэкӀэ.", +'usercsspreview' => 'Уигу игъэлъ, мыр иджыри уи CSS-файлым и пыухыкӀа еплъыгъуэкъым , ар иджыри хъумакъым.', +'userjspreview' => "'''Зыщумгъэгъупшэ, мыр япэ-еплъ къуэдей уи javascript-файлым, иджыри итхауэ щыткъым!'''", +'sitecsspreview' => "'''Зыщумгъэгъупшэ, мыр япэ-еплъ къуэдеуэ щытщ мы CSS-м.''' +'''Иджыри итхауэ щыткъым!'''", +'sitejspreview' => "'''Зыщумгъэгъупшэ, мыр япэ-еплъ къуэдеуэ щытщ мы JavaScript-кодым.''' +'''Иджыри итхауэ щыткъым!'''", +'userinvalidcssjstitle' => "'''Гу лъытэ:''' лэжьыгъэр зтеухуа «$1»-р къэгъуэтауэ щыткъым. Зыщумыгъэгъупшэ, лэжьыгъэ напэкӀуэцӀ .css, .js-хэм цӀэ яӀэн хуэйхэ, сэтыр хьэрыф нэхъ яхэмыту, мыбым хуэду «{{ns:user}}:Згуэрэ/vector.css», щытын хуэйхэкъым мыбым хуэду: «{{ns:user}}:Згуэрэ/Vector.css».", +'updated' => '(КъэгъэщӀырыщӀащ)', +'note' => "'''Гулъытыгъуэ:'''", +'previewnote' => "'''Мыр япэ-еплъ къуэдей, тхылъыр иджыри итхакъым!'''", +'previewconflict' => 'Мы япэ-еплъым тхылъыр редакторым и ищхьэ лъэныкъуэм дежь егъэлъыгъуэ зэрщытыным хуэду, иптхэн уигугъэ хъумэ.', +'session_fail_preview' => "'''Хэукъуэгъуэ къыхэкӀа, серверым у гъэтэрэзыгъуэр къиштэфакъым сессиэм и идентификациэр фӀэкӀуэдри. +Иджыри зэ щӀыжьи еплъ. +Хэукъуэгъуэр иджыри зэ къыхэкӀмэ, системэм [[Special:UserLogout|икӀи]] аргуэру зыкъегъэцӀыху.'''", +'session_fail_preview_html' => "'''Хэукъуэгъуэ къыхэкӀа, серверым у гъэтэрэзыгъуэр къиштэфакъым сессиэм и идентификациэр фӀэкӀуэдри.''' + +'''{{SITENAME}} къабзэ HTML нэхъ къэбгъэсэбэпын зэримыдэм щхьэкӀэ, япэ-еплъыр гъонкӀыфӀауэ щытщ, JavaScript-теуэнхэр къэмыхъуным щхьэкӀэ.''' + +'''Ӏэйгъуэ зезмыхьэ гъэтэрэзыгъу щытмэ уи гугъэр иджыри зэ еплъ хъумэ. +ЕтӀуанэ гъэтэрэзыгъуэри мыхъумэ, системэм [[Special:UserLogout|икӀи]] аргуэру зыкъегъэцӀыху.'''", +'token_suffix_mismatch' => "'''Уи гъэтэрэзыгъуэр къэштауэ щыткъым, уи программэм тэрэзу дэмыгъэ пыгъэувэхэм зэремылэжьым щхьэкӀэ +гъэтэрэзыгъуэ лъэныкъуэгъым. Гъэтэрэзыгъуэр къыкӀимыштар тхыгъэм и тхылъыр къуаншэ мыхъун щхьэкӀэ. +Апхуэдэ хэукъуэгъуэхэр къызхэкӀыфынур аноним зыщӀ уэб-проксихэм, хэукъуэгъуэ зыхэлъхэм.'''", +'editing' => 'Гъэтэрэзын: $1', +'editingsection' => 'Гъэтэрэзын $1 (секцэр)', +'editingcomment' => 'Гъэтэрэзыгъуэ $1 (лъэныкъуэгъу/секциэ щӀэ)', +'editconflict' => 'Редактированием зэпэщӀэуэныгъэ: $1', +'explainconflict' => ' Мы напэкӀуэцӀыр редактировать пщӀыху , зыгуэрым зэхъуэкӀыныгъэ хилъхьащ. +Редактированием и ищхьэ щхьэгъумбжэм щыболъагъу иджыпсту напэкӀуэцӀым ит текстыр. +ИщӀагъ щхьэгъумбжэм уэ пщӀа зэхъуэкӀыныгъэр итщ. +Уи зэхъуэкӀыныгъэхэр ищӀагъым къихи ищхьэ щхьэгъумбжэм хьы. +«{{int:savearticle}} -м» щытепкъузэкӀэ ищхьэ щхьэгъумбжэм ит текстыр ихъумэнущ.', +'yourtext' => 'Уи текстыр', +'storedversion' => 'Хъума щытыкӀэр', +'nonunicodebrowser' => "'''Хуэсакъ: Уи браузерым Йуникодыр къыштэкъым. Тхыгъэхэм я гъэтэрэзыгъуэм дежь мы ASCII щыту хъуа дэмыгъэхэр я кодкӀэ зэхъуэкӀауэ щытынухэ.'''", +'editingold' => "'''Хуэсакъ. НапэкӀуэцӀ жьы хъуа версиэр богъэтэрэзыр.''' +Иптха яуж пэмыкӀ версиэхэм зэхъуэкыгъуэ щыӀэуэ хъуахэр кӀуэдынухэ.", +'yourdiff' => 'ЗэщхьэщыкӀыныгъэхэр', +'copyrightwarning' => "Гу лъытэ! Хэлъхьэгъу, зэхъуэкӀыгъу хъуар лицензиэ $2 къалъытэну (еплъ $1). +Ухуэмемэ уи тхыгъэхэр хуиту зэбгырагъэкӀыну, ягъэтэрэзыну зыхуеуэ хъуам, мыбдежьым йомылъхьэ.
    +Абым пэмыкӀыу мы тхыгъэхэм уэ зиIэдакъу ущыту лъытэгъуэ ибот, иэ копиэ къипхауэ +хуиту зэхэгъэкӀынрэ, гъэтэрэзынрэ зиӀэ тхыгъэм.
    +'''ЗИIЭДАКЪЭМ И ПӀАЛЪЭ УИМЫӀУ, ТХЫЛЪ МЫБДЕЖЬ ХОМЫЛЪХЬЭ!'''", +'copyrightwarning2' => "Гу лъытэ, хэплъхьу хъуар пэмыкӀ хэтхэм ягъэтэрэзыфыну иэ ирахыфыну. +Згуэрэм уи тхыгъэхэр зэригъэзэхуэну/зэрихъуэкӀыну ухуэмемэ мыбде йомылъхьэ.
    +Абым пэмыкӀыу, тхыгъэ иплъхьэр уи Ӏэдакъэм къыкӀэкӀауэ богъэувыр иэ хуиту хъыбар зэхэгъэкӀыпӀэм къыхэпхауэ (еплъ $1). +'''ӀЭДАКЪЭПӀАЛЪЭ ХУИТ ЗИМЫӀЭ ТХЫГЪЭ МЫБДЕМ ЙОМЫЛЪХЬЭ!'''", +'longpageerror' => 'ЩЫУАГЪЭ: птхы текстым килобайт $1 хьэлъагъыу иӀэщ, ар пыухыкӀа хьэлъагъ гъэува $2 нэхърэ нэхъыбэщ. +НапэкӀуэцӀыр пхъумэфынукъым.', +'readonlywarning' => "'''ГУ ЛЪЫТЭ. Хъыбархэм я базэр теубыдауэ щытщ, лэжьыгъэ ядежьым зэрекӀуэкӀым щхьэкӀэ, джыпсту уи зэхъуэкӀыгъуэхэр иптхэфынукъым. +Уи тхыгъэхэр файлым къэбгъэнэфыну, яужым иптхэфыным щхьэкӀэ.''' + +Тхтэмадэ хъыбархэм я базэр тезубыдам къэӀохугъу къигъэнар: $1", +'protectedpagewarning' => "'''Гу лъытэ. Мы напэкӀуэцӀыр зэхъуэкӀыгъуэхэм щхьэкӀэ теубыдауэ щытщ, зэзхъуэкӀыфыну пӀалъэ зиӀэхэр тхьэмадэкъуэдейхэра.''' +ИщӀагъымкӀэ тхыдэтхылъым и яужырей тхыгъэр итщ:", +'semiprotectedpagewarning' => "'''Гу лъытэ.''' Мы напэкӀуэцӀыр зэхъуэкӀыгъуэхэм щхьэкӀэ теубыдауэ щытащ, зэзхъуэкӀыфыну пӀалъэ зиӀэхэр цӀыхухэткъуэйхэра. +ИщӀагъымкӀэ тхыдэтхылъым и яужырей тхыгъэр итщ:", +'cascadeprotectedwarning' => "'''Гу лъытэ:''' Мы напэкӀуэцӀыр згъэтэрэзыфынухэр «Тхьэмадэхэр» щыщ гупым хэтхэра, {{PLURAL:$1|напэкӀуэцӀ къыкӀэлъыкӀуэм щхьэкӀэ|напэкӀуэцӀ къыкӀэлъыкӀуэхэм щхьэкӀэ}} каскад хъунэныгъэ зэрателъым теухуауэ:", +'titleprotectedwarning' => "'''Гу лъытэ. Мы напэкӀуэцӀыр зэхъуэкӀыныгъэхэм щхьэкӀэ ятеубыдауэ щытщ, зэзхъуэкӀыфынухэр [[Special:ListGroupRights|абым теухуа пӀалъэ]] зиӀэ цӀыхухэтхэм.''' +ИщӀагъымкӀэ тхыдэтхылъым и яужырей тхыгъэр итщ:", +'templatesused' => '{{PLURAL:$1|Шаблон|Шаблонхэр}} напэкӀуэцӀым и версиэ екӀуэкӀым хэтхэр:', +'templatesusedpreview' => '{{PLURAL:$1|Шаблон|Шаблонхэр}} напэкӀуэцӀым и япэ-еплъым хэтхэр:', +'templatesusedsection' => 'Мы лъэныкъуэгъум {{PLURAL:$1|Шаблон къагъэщхьэпар|Шаблон къагъэщхьэпахэр}}:', +'template-protected' => '(теубыдащ)', +'template-semiprotected' => '(иныкъуэр теубыдащ)', +'hiddencategories' => 'Мы напэкӀуэцӀыр зхэхьэр $1 {{PLURAL:$1|1 категориэ зэхуэща|$1 категориэ зэхуэщахэр}}:', +'nocreatetitle' => 'НапэкӀуэцӀ щӀыныр тубыдащ', +'nocreatetext' => 'Мы сайтым деж ныпэкӀуэцӀ щӀэуэ щӀынхэм щхьэкӀэ теубыдыгъуэ щыӀэщ. +Бгъэзэжу, напэкӀуэцӀ щыӀэр бгъэтэрэзыфынущ, [[Special:UserLogin|системэмэ зыкъегъэцӀыхун иэ щӀэуэ аккаунт щӀын]].', +'nocreate-loggedin' => 'НапэкӀуэцӀыщӀэ пщӀыну хуитыныгъэ уиӀэкъым.', +'sectioneditnotsupported-title' => 'Лъэныкъуэгъухэм я гъэтэрэзыныр къиштэкъым', +'sectioneditnotsupported-text' => 'Мы напэкӀуэцӀым лъэныкъуэгъу гъэтэрэзыныр къиштэкъым', +'permissionserrors' => 'Техьэным и хэукъуэгъуэ', +'permissionserrorstext' => 'Уи гугъэр пщӀын пӀалъэ уиӀэкъым, {{PLURAL:$1|ар зтеухуар|ахэр зтеухуахэр}}:', +'permissionserrorstext-withaction' => "«'''$2'''» Ӏохугъуэр пщӀэну пӀалъэ уиӀэкъым, {{PLURAL:$1|ар зтеухуар|ахэр зтеухуахэр}}:", +'recreate-moveddeleted-warn' => "'''Гу лъытэ. НапэкӀуэцӀ пщӀыну узыпылъыр япэм ирахауэ щытащ.''' + +Арэзыгъуэ хэлъу щыт напэкӀуэцӀыр щӀыжынэм щхьэкӀэ? +ИщӀагъымкӀэ тхыдэтхылъ итщ напэкӀуэцӀым и ихыгъэхэмрэ и цӀэзэхъуэкӀынхэмрэ теухуахэм.", +'moveddeleted-notice' => 'Мы напэкӀуэцӀыр ихауэ щытат. +ЩӀэупщӀэгъуэхэм щхьэкӀэ ищӀагъымкӀэ теухуа тхыгъэхэр итщ тхыдэтхылъым щыщу.', +'log-fulllog' => 'Тхыдэтхыгъэ псом еплъын', +'edit-hook-aborted' => 'Гъэтэрэзыгъуэр хэхыжьа. +Зтеухуар кэӀохуауэ щыткъым.', +'edit-gone-missing' => 'НапэкӀуэцӀыр къэгъэщӀэрыщӀа хъунукъым. +Ирахауэ щыту хъунщ.', +'edit-conflict' => 'Гъэтэрэзыгъуэхэм я конфликтщ.', +'edit-no-change' => 'Уи гъэтэрэзыгъуэр хахыжащ, тхыгъэм зэхъуэкӀыгъуэ зэрхэмыхьэм щхьэкӀэ.', +'edit-already-exists' => 'НапэкӀуэцӀыщӀэ щӀыфынукъым. +ЩыӀэщ апхуэдэ.', + +# Parser/template warnings +'expensive-parserfunction-warning' => 'Гу лъытэ. Мы напэкӀуэцӀым ресурсышхуэ хэзылъхьэ функциэ куэд хэлъщ. + +Хэлъхьэгъуэ хэтыфынур здынэгъэсар $2 {{PLURAL:$2|хэлъхьэгъу|хэлъхьэгъуэху}}, мыбдежым хуэныкъу щӀын хуэйр {{PLURAL:$1|$1 хэлъхьэгъуэ|$1 хэлъхьэгъу}}.', +'expensive-parserfunction-category' => 'Ресурсышхуэ хэзылъхьэ функциэ куэду зыхэлъ напэкӀуэцӀхэр', +'post-expand-template-inclusion-warning' => "'''Гу лъытэ:''' шаблон хэтхэм я бжыгъэр зэфӀэкӀыгъуэм къехъу щытщ. +Шаблонхэм ящыщ гуэрэхэр хэгъэкӀыжауэ къэнэнухэщ.", +'post-expand-template-inclusion-category' => 'НапэкӀуэцӀхэр, шаблон я хэтхэм я бжыгъэр зэфӀэкӀыгъуэм къехъу щытхэр', +'post-expand-template-argument-warning' => "'''Гу лъытэ:''' Мы напэкӀуэцӀым шаблоным и зы аргумент хэт, зэгъэзэнщӀэным щхьэкӀэ иныщу щыту. +Апхуэдэ аргументхэм гулъытэгъуэ ирамтауэ щытщ.", +'post-expand-template-argument-category' => 'Шаблонхэм я аргументхэр хэзмыубыда напэкӀуэцӀхэр', +'parser-template-loop-warning' => 'Хэукъуэгъуэ къыхэкӀащ шаблонхэм: [[$1]]', +'parser-template-recursion-depth-warning' => 'Шаблоным и рекурсиэ зэфӀэкӀыгъуэр къегъэхъуауэ щытщ (1$)', +'language-converter-depth-warning' => 'Бзэ гъэзанщӀэгъуэм и зэфӀэкӀыгъуэр къегъэхъуауэ щытщ (1$)', + +# "Undo" feature +'undo-success' => 'Гъэтэрэзыгъуэр хахыжьыфынущ. Версиэхэм я зэгъэпшыгъуэ егъэкӀуэкӀ, узхуэныкъуэхэрамэ пщӀам еплъи «НапэкӀуэцӀыр итхэн»-ым текъузэ, зэхъуэкӀыгъуэхэр хэхьэным щхьэкӀэ.', +'undo-failure' => 'Гъэтэрэзыгъуэр хэхыжа хъунукъым, гъэтэрэзыгъуэхэм я зэпхыгъуэр зэремыкӀуэкӀыфым щхьэкӀэ', +'undo-norev' => 'Гъэтэрэзыгъуэр хэхыжа хъунукъым зэрщымыӀэм щхьэкӀэ иэ хэхыжагъыху щытщ.', +'undo-summary' => 'Гъэтэрэзыгъуэ хэхыжыныр $1 цӀыхухэт [[Special:Contributions/$2|$2]] ([[User talk:$2|тепсэлъыхьыгъуэ]])', + +# Account creation failure +'cantcreateaccounttitle' => 'Аккаунтыр щӀыфынукъым', +'cantcreateaccount-text' => "Аккаунт щӀыныр мы IP-адресыкӀэ ($1) триубыдауэ щытщ [[User:$3|цӀыхухэт $3]]. + +$3 ар зтеухуауэ къитхыр: ''$2''", + +# History pages +'viewpagelogs' => 'Мы напэкӀуэцIым щхьэкӀэ тхылъыр гъэлъэгъуэн', +'nohistory' => 'Мы напэкӀуэцӀым и зэхъуэкӀыгъуэхэм я тхыдэ иӀэкъым.', +'currentrev' => 'КъекӀуэкӀ версиэр', +'currentrev-asof' => 'Версиэ екӀуэкӀыр $1 дежь', +'revisionasof' => '$1 версие', +'revision-info' => 'Версиэр $1; $2', +'previousrevision' => '← Ипэ итыр', +'nextrevision' => 'КъыкӀэлъыкӀуэр →', +'currentrevisionlink' => 'КъекӀуэкӀ версиер', +'cur' => 'къекӀуэкӀыр', +'next' => 'кӀэлъыкӀуэр', +'last' => 'ипэ.', +'page_first' => 'ипэр', +'page_last' => 'иужьдыдэр', +'histlegend' => "Гулъытыгъуэ: ({{int:екӀуэкӀ}}) — екӀуэкӀ версиэм зэрыщхьэщыкӀ; ({{int:япэрыт}}) — япэрыт версиэм зэрышъхьэщыкӀ; '''{{int:цӀыкӀу}}''' — цӀыкӀу зэхъуэкӀыгъуэ", +'history-fieldset-title' => 'Тхыдэм хэплъэн', +'history-show-deleted' => 'ТегъэкIыжам фIэкI', +'histfirst' => 'жьыдыдэхэр', +'histlast' => 'Куэд мыщIахэр', +'historysize' => '($1 {{PLURAL:$1|байту|байтху}})', +'historyempty' => '(нэщIщ)', + +# Revision feed +'history-feed-title' => 'ЗэхъуэкӀыгъуэхэм я тхыдэр', +'history-feed-description' => 'Мы напэкӀуэцӀым и зэхъуэкӀыгъуэхэм я тхыдэр виким дежь', +'history-feed-item-nocomment' => '$1-мрэ $2-мрэ', +'history-feed-empty' => 'НапэкӀуэцӀ узхуэныкъуэр щыӀэкъым. +Ирахауэ иэ и цӀэр зэрахъуэкӀауэ щытыфынущ +Абым ещхь напэкӀуэцӀхэм [[Special:Search|виким лъыхъиу]] яплъ.', + +# Revision deletion +'rev-deleted-comment' => '(тепсэлъыхьыгъуэхэр ихащ)', +'rev-deleted-user' => '(Ӏэдакъэм и цӀэр ихащ)', +'rev-deleted-event' => '(тхыгъэр ихащ)', +'rev-deleted-user-contribs' => '[цӀыхухэтым и цӀэр иэ и IP-адресыр ихахэ — гъэтэрэзыгъуэр напэкӀуэцӀ хэлъхьэм ихах]', +'rev-deleted-text-permission' => "Мы версиэ напэкӀуэцӀым ер '''ихащ'''. +Абым теухуа тепсэлъыхьыгъуэ бгъуэтыфынкӀи мэхъур [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ихыгъуэхэм я тхылъым].", +'rev-deleted-text-unhide' => "Мы версиэ напэкӀуэцӀым ер '''ихащ'''. +Абым теухуа тепсэлъыхьыгъуэ бгъуэтыфынкӀи мэхъур [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ихыгъуэхэм я тхылъым]. +Уэ [$1 мы версиэм уэплъыфыну], тхьэмаду узэрщытым щхьэкӀэ.", +'rev-suppressed-text-unhide' => "Мы версиэ напэкӀуэцӀым ер '''гъэпшкӀуа'''. +Абым теухуа тепсэлъыхьыгъуэ бгъуэтыфынкӀи мэхъур [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} гъэпшкӀугъэхэм я тхылъым]. +Уэ [$1 мы версиэм уэплъыфыну], тхьэмаду узэрщытым щхьэкӀэ.", +'rev-deleted-text-view' => "Мы версиэ напэкӀуэцӀым ер '''ихащ'''. +Уэ уеплъыфынущ абым, тхьэмаду узэрщытым щхьэкӀэ. Ихыгъуэр зтеухуар итынкӀи мэхъур [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ихыгъуэхэм я тхылъым].", +'rev-suppressed-text-view' => "Мы версиэ напэкӀуэцӀым ер '''гъэпшкӀуауэ''' щытащ. +Уэ уеплъыфынущ абым, тхьэмаду узэрщытым щхьэкӀэ. Ихыгъуэр зтеухуар итынкӀи мэхъур [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} гъэпшкӀугъэхэм я тхылъым].", +'rev-deleted-no-diff' => "Версиэхэм я зэгъэпшэгъуэ ебгъэкӀуэкӀыфынукъым, напэкӀуэцӀым и зы версиэр '''ихауэ''' зэрщытым щхьэкӀэ. +Атым теухуа псалъэ бгъуэтыфынкӀи мэхъур [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ихыгъуэхэм я тхылъым].", +'rev-suppressed-no-diff' => "Мы версиэхэм я зэгъэпшыгъуэ ебгъэкӀуэкӀыфынукъым, абыхэм я зыр '''ихауэ''' зэрщытым щхьэкӀэ.", +'rev-deleted-unhide-diff' => "НапэкӀуэцӀым и зы версиэр '''ихащ'''. +Абым теухуа псалъэ бгъуэтыфынкӀи хъунщ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ихыгъуэхэм я тхылъым]. +Тхьэмадэхэм уахэтщи уэ [$1 мы версиэм уэплъыфынущ].", +'rev-suppressed-unhide-diff' => "Зэгъэпшыгъуэм и зы версиэр '''гъэпшкӀуауэ''' щытат. +Абым теухуа псалъэ щыӀэнкӀи мэхъур [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} гъэпшкӀугъэхэм я тхылъым]. +Тхьэмаду ущытщи уэ [$1 версиэ зэщхьэкӀыгъуэм] уэплъыфынущ, аткӀи улъэжьыну ухуэймэ.", +'rev-deleted-diff-view' => "Зэгъэпшыгъуэм и зы версиэр '''ихащ'''. +Тхьэмаду ущытщи зэгъэпшыгъуэр ебгъэкӀуэкӀыфынущ, теухуа псалъэ бгъуэтыфынущ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ихыгъуэхэм я тхылъым].", +'rev-suppressed-diff-view' => "Зэгъэпшыгъуэм и зы версиэр '''гъэпшкӀуащ'''. +Тхьэмаду ущытщи зэгъэпшыгъуэр ебгъэкӀуэкӀыфынущ, теухуа псалъэ бгъуэтыфынущ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} гъэпшкӀугъэхэм я тхылъым].", +'rev-delundel' => 'зэӀухын/зэӀулъхьэн', +'rev-showdeleted' => 'гъэлъэгъуэн', +'revisiondelete' => 'Ихын/напэкӀуэцӀым и версиэхэр игъувэжын', +'revdelete-nooldid-title' => 'Версиэ лъэшыр етауэ щыткъым', +'revdelete-nooldid-text' => 'Версэ лъэшыр (иэ версиэхэр) ептауэ щыткъым, уигугъэр пщӀыным щхьэкӀэ.', +'revdelete-nologtype-title' => 'Тхылъым и типыр зхуэдэр етакъым', +'revdelete-nologtype-text' => 'Тхылъым и типыр ептакъым, лэжьыгъэ здебгъэкӀуэкӀыным уигугъэр.', +'revdelete-nologid-title' => 'Тхылъым и хэукъуэгъэ хэтхэгъуэ', +'revdelete-nologid-text' => 'Тхыгъэм и лъэшыгъу хъун хуеяр иптхакъым уи гугъэр быщӀын хьэкӀэ иэ лъэшыгъуэр щыӀэкъым.', +'revdelete-no-file' => 'Къэгъэлъэгъуа файлыр щыӀэкъым.', +'revdelete-show-file-confirm' => 'Арэзыуэ ущыт уеплъыну файл ихам и версиэ «$1» $2, $3 ?', +'revdelete-show-file-submit' => 'НытӀэ', +'revdelete-selected' => "'''{{PLURAL:$2|Версиэ хэхар|Версиэ хэхахэр}} напэкӀуэцӀ [[:$1]]:'''", +'logdelete-selected' => "'''{{PLURAL:$1|Тхылъ хэхар|Тхылъ хэхахэр}} тхыгъэм:'''", +'revdelete-text' => 'НапэкӀуэцӀхэм я версиэ ихахэмрэ хъыбар щекӀуэкӀахэмрэ напэкӀуэцӀым и тхыдэмрэ тхыгъэмрэ гъэлъэгъуауэ щытынущ, абыхэм я лъэныкъуэгъу гуэрэхэр цӀыхухэтхэм щхьэкӀэ теубыдауэ щытынущ. +Тхьэмадэ {{SITENAME}} проэктым щыщхэм пӀалъэ яӀэнущ теубыда тхыгъэхэм екӀуэлъэн, а интерфейсымкӀи зэфӀагъувэжын, теубыдыгъэ нэхъ ину ятемылъу щымыт къуэдеймэ.', +'revdelete-confirm' => 'Арэзыгъуэ ет, быщӀэр зэр уи гугъэр, къыхэкӀынур къызэрыбгурыӀуэр, быщӀу хъуамкӀэ [[{{MediaWiki:Policy-url}}|хабзэм]] узэремыбакъуэр.', +'revdelete-suppress-text' => "ГъэпшкӀугъэр щекӀуэкӀыфыну '''къуэдер''' мыбым хуэдэм: + +* Информациэ емыкӀу итмэ +*: '''унагъуэ адресыр, телефон номерхэр, паспортым и номерыр абыхэм яхуэдэхэр.'''", +'revdelete-legend' => 'Убыдыгъуэ етын:', +'revdelete-hide-text' => 'НапэкӀуэцӀым мы и версиэ тхылъыр гъэпшкӀун', +'revdelete-hide-image' => 'Файлым хэлъыр гъэпшкӀун', +'revdelete-hide-name' => 'Лъэжыгъэмрэ хэтымрэ гъэпшкӀун', +'revdelete-hide-comment' => 'ЗэхъуэкӀыгъуэхэм я тепсэлъыхьыгъуэр гъэпшкӀун', +'revdelete-hide-user' => 'Ӏэдакъэм и цӀэр гъэпшкӀун', +'revdelete-hide-restricted' => 'Тхьэмадэхэми яфӀэгъэпшкӀун къэӀохугъуэхэр', +'revdelete-radio-same' => '(зэмыхъуэкӀын)', +'revdelete-radio-set' => 'НытӀэ', +'revdelete-radio-unset' => 'Хьэуэ', +'revdelete-suppress' => 'Тхьэмадэхэми яфӀэгъэпшкӀун къэӀохугъуэхэр', +'revdelete-unsuppress' => 'Версиэ зэфӀэгъувэжахэм теубыдыгъуэхэр ятехыжын', +'revdelete-log' => 'Зытеухуар:', +'revdelete-submit' => 'Къэгъэщхьэпэн {{PLURAL:$1|версиэ хэхам|версиэ хэхахэм}}', +'revdelete-logentry' => 'НапэкӀуэцӀ [[$1]]-м и версиэ гъэлъэгъуэныр зэсхъуэкӀащ', +'logdelete-logentry' => 'Хъыбар [[$1]]-м и гъэлъэгъуэныр зэхъуэкӀащ', +'revdelete-success' => "'''Версиэм и гъэлъэгъуэныр узыншу и зэхъуэкӀыгъуэр зэфӀэкӀащ.'''", +'revdelete-failure' => "'''Версиэм и гъэлъэгъуэныр зэхъуэкӀа хъунукъым:''' +$1", +'logdelete-success' => 'Хъыбарым и гъэлъэгъуэныр зэхъуэкӀащ.', +'logdelete-failure' => "'''Тхылъым и гъэлъэгъуэныр зэфӀэгъувакъым:''' +$1", +'revdel-restore' => 'лъагъукӀэр хъуэжын', +'revdel-restore-deleted' => 'Иха версиэхэр', +'revdel-restore-visible' => 'гъэлъэгъуа версиэхэр', +'pagehist' => 'НапэкӀуэцӀым и тхыдэ', +'deletedhist' => 'Ихыгъуэхэм я тхыдэ', +'revdelete-content' => 'хэтыр', +'revdelete-summary' => 'зэхъуэкӀыгъуэхэм я тепсэлъыхьыгъуэ', +'revdelete-uname' => 'цӀыхухэтым и цӀэр', +'revdelete-restricted' => 'теубыдыгъуэхэр тхьэмадэхэм ятохуэ', +'revdelete-unrestricted' => 'теубыдыгъуэхэр тхьэмадэхэм ятеха', +'revdelete-hid' => 'гъэпшкӀуар $1', +'revdelete-unhid' => 'гъэлъэгъуар $1', +'revdelete-log-message' => '$1 $2 щхьэкӀэ {{PLURAL:$2|версиэхэр|версиэхэм|версиэхэм}}', +'logdelete-log-message' => '$1 $2 щхьэкӀэ {{PLURAL:$2|хъыбархэр|хъыбархэм|хъыбархэм}}', +'revdelete-hide-current' => 'Хэтхам и хэукъуэгъуэ $2, $1: мыр версиэ екӀуэкӀ. +Ар гъэпшкӀуауэ щытыфыну.', +'revdelete-show-no-access' => 'Тхылъым и зэтехыгъэм и хэукъуэгъуэ $2, $1: а тхыгъэр зэрхэтыр «теубыда» хуэду. +Уихьэну пӀалъэ уиӀэкъым.', +'revdelete-modify-no-access' => 'Тхылъым и зэхъуэкӀыгъуэм и хэукъуэгъуэ $2, $1: а тхыгъэр зэрхэтыр «теубыда» хуэду. +Уихьэну пӀалъэ уиӀэкъым.', +'revdelete-modify-missing' => 'Тхылъ зэхъуэкӀыгъуэм и хэукъуэгъуэ ID $1, хъыбарбазэм хэмыту щытщ!', +'revdelete-no-change' => "'''Гу лъытэ:''' тхылъ $2, $1 иӀэху щытщ уэкӀэлъаӀуэ гъэлъэгъуэн зэгъэзэхуэгъуэхэр.", +'revdelete-concurrent-change' => 'Тхылъым и зэхъуэкӀыгъуэм и хэукъуэгъуэ $2, $1: и статусыр пэмыкӀ гуэрэм зэрихъуэкӀа щытщ, уэ ар быщӀын уигугъэх. +Тхыдэтхылъым хэплъэ.', +'revdelete-only-restricted' => 'Тхылъым и гъэпшкӀугъэм и хэукъуэгъуэ $2 $1:тхьэмадэхэр емыплъыфыну тхыгъэр бгъэпшкӀуфыну, гъэпшкӀугъэхэм я зым щыщым хэдэгъуэ къэмыну.', +'revdelete-reason-dropdown' => '* Хэхыгъуэхэм я стандартыгъуэр +** ӀэдакъэпӀалъэм и ебакъуэгъуэ +** ЕмыкӀу къэӀохугъуэ', +'revdelete-otherreason' => 'ПэмыкӀ теухуэгъуэ/щӀыгъуапхъэ:', +'revdelete-reasonotherlist' => 'ПэмыкӀ теухугъуэ', +'revdelete-edit-reasonlist' => 'Теухугъуэхэм я тхылъыр гъэтэрэзын', +'revdelete-offender' => 'НапэкӀуэцӀым и версиэр зи Ӏэдакъэр:', + +# Suppression log +'suppressionlog' => 'ГъэпшкӀугъэхэм я тхылъ', +'suppressionlogtext' => 'ИщӀагъымкӀэ гъэлъэгъуауэ щыт яужырей ихыгъуэхэмрэ теубыдэгъуэхэмрэ я тхылъ, тхьэмадэхэм ямгъэлъэгъуа хъыбархэр хэтху. +Еплъ [[Special:IPBlockList|IP-теубыдыгъуэхэм я тхылъ]], екӀуэкӀ теубыдэгъуэхэр лъагъун щхьэкӀэ.', + +# Merge log +'revertmerge' => 'Зыхэдзын', + +# Diffs +'history-title' => '$1 - зэхъуэкIыныгъэм и тхыдэ', +'difference' => '(Іэмалхэм я зэрызыщхьэщыкІыгъуэр)', +'lineno' => 'Сатыр $1:', +'compareselectedversions' => 'Хэха версиэхэр зэгъэпщэн', +'editundo' => 'щӀегъуэжын', + +# Search results +'searchresults' => 'Лъыхъуэным къыхэкӀахэр', +'searchresults-title' => 'Ммыбы "$1" и лъыхъуэным къыхэкӀахэр', +'searchresulttext' => 'Информациэ нэхъыбэ ухуэныкъуэмэ проэктым дежь напэкӀуэцӀ лъыхъуэнымкӀэ, еплъ [[{{MediaWiki:Helppage}}|щӀэупщӀэгъуэ лъэныкъуэм]].', +'searchsubtitle' => 'Лъыхъуэгъуэ «[[:$1]]» ([[Special:Prefixindex/$1|напэкӀуэцӀу хъуар, апхуэдэцӀэкӀэ къэжьу]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|апхуэдэцӀэм техьэхэр]])', +'searchsubtitleinvalid' => "ЩӀэупщӀэгъуэ '''$1'''", +'notitlematches' => 'Зэтехуэ хэткъым напэкIуэцIхэм я цIэм', +'notextmatches' => 'Зэтехуэ хэткъым напэкIуэцIхэм кІуэцІылъхэм', +'prevn' => 'япэ итар {{PLURAL:$1|$1}}', +'nextn' => 'яуж кӀуэр {{PLURAL:$1|$1}}', +'viewprevnext' => 'Еплъын ($1 {{int:pipe-separator}} $2) ($3)', +'searchprofile-articles-tooltip' => 'Лъыхъуэн $1-м', +'searchprofile-project-tooltip' => 'Лъыхъуэн $1-м', +'search-result-size' => '$1 ({{PLURAL:$2|псалъэу $2|псалъэу $2|псалъэу $2}})', +'search-redirect' => '(егъэкӀуэкӀын $1)', +'search-section' => '(секцэ $1)', +'search-suggest' => 'Узлъыхъуар мыра хъунщ: $1', +'search-interwiki-caption' => 'Проэкт къыдэщӀхэр', +'search-interwiki-default' => '$1 къыхэкӀар:', +'search-interwiki-more' => '(иджыри)', +'search-mwsuggest-enabled' => 'чэнджэш иӀэу', +'search-mwsuggest-disabled' => 'чэнджэщыншэу', +'nonefound' => "'''Гулъытыгъуэ.''' Тэрэзу имытхамэ узхуэныкъуэр, лъыхъуэгъуэр лъэныкъу хъуамкӀи ирегъэкӀуэкӀ. Къэгъэсэбэп ''all:'' пыгъувэгъуэр, зэгъэзэхуэгъуэ иӀэн щхьэкӀэ (хэтхэм я тепсэлъыхьыныгъэр, шаблонхэр, нымыщӀхэр джоуэ хиубыдэным щхьэ), иэ узхуэныкъуэ лъэныкъуэр итхэ.", +'powersearch' => 'Убгъуауэ лъыхъу', +'powersearch-legend' => 'Убгъуауэ лъыхъу', +'powersearch-ns' => 'ЦIэзэхэтыгъуэм щылъыхъуэн', +'powersearch-redir' => 'ЕгъэзэкӀахэри гъэлъэгъуэн', +'powersearch-field' => 'Лъыхъуэн', + +# Preferences page +'preferences' => 'Зэгъэзэхуэпхъэхэр', +'mypreferences' => 'Си зэгъэзэхуэгъуэхэр', +'prefs-edits' => 'Гъэтэрэзыгъуэхэм я бжыгъэр:', +'prefsnologin' => 'Системэм зыкъебгъэцӀыхуакъым', +'prefsnologintext' => 'ЦӀыхухэтым и зэгъэзэхуэгъуэхэм уелэжьын щхьэкӀэ системэм [{{fullurl:{{#Special:UserLogin}}|returnto=$1}} зыкъебгъэцӀыхун хуэй]', +'prefs-skin' => 'ЗэфӀэгъувэным и теухуапхъэ', +'prefs-math' => 'формулэхэр гъэлъэгъуэн', +'prefs-datetime' => 'Махуэмрэ зэманымрэ', +'prefs-personal' => 'Ныбжыгъуэ къэӀохугъуэ', +'prefs-rc' => 'Гъэтэрэзыгъуэ щӀэхэр', +'prefs-watchlist' => 'ЩӀэлъыплъыгъуэхэм я тхылъ', +'prefs-watchlist-days' => 'Махуэхэм я бжыгъэр:', +'prefs-watchlist-days-max' => 'Махуибл мынэхъыбу', +'prefs-watchlist-edits' => 'Гъэтэрэзыгъуэхэр нэхъыбэдыду, кӀэлъыплъыгъуэ тхылъым гъэлъэгъуар:', +'prefs-watchlist-edits-max' => 'Нэхъыбэдыду: 1000', +'prefs-watchlist-token' => 'КӀэлъыплъыгъуэ тхылъым и токен:', +'prefs-misc' => 'НэмыщӀ зэгъэзэхуэгъуэхэр', +'prefs-resetpass' => 'Паролыр зэхъуэкӀын', +'prefs-email' => 'Электронэ почтэм и опциэхэр', +'prefs-rendering' => 'Сурэтыр', +'prefs-editing' => 'Гъэтэрэзыгъуэ', +'prefs-edit-boxsize' => 'Гъэтэрэзыгъуэм и нэкӀубгъум и инагъыр', +'searchresultshead' => 'Къэгъуэтын', + +# Groups +'group-sysop' => 'Тхьэмадэхэр', + +'grouppage-sysop' => '{{ns:project}}:Тхьэмадэхэр', + +# User rights log +'rightslog' => 'Хэтым пӀалъэ иӀэхэм я тхылъ', + +# Associated actions - in the sentence "You do not have permission to X" +'action-edit' => 'мы напэкIуэцIыр гъэтэрэзын', + +# Recent changes +'nchanges' => '$1 {{PLURAL:$1|зэхъуэкӀыгъуэ|зэхъуэкӀыгъуэхэр}}', +'recentchanges' => 'Гъэтэрэзыгъуэ щIэхэр', +'recentchanges-legend' => 'Гъэтэрэзыгъуэ щӀэхэм я зэгъэзэхуэгъуэ', +'recentchanges-feed-description' => 'Вики и иужырей зэхъуэкӀыгъeэхэм кӀэлъыплъын мы нэтыным.', +'rcnote' => "{{PLURAL:$1|Яужырей '''$1''' зэхъуэкыгъуэ|Яужырей '''$1''' зэхъуэкыгъуэхэр}} '''$2''' {{PLURAL:$2|махуэ|махуэм}}, зэман $5 $4.", +'rclistfrom' => 'ЗэхъуэкӀыгъуэхэр гъэлъэгъуэн $1 щыкӀэдзауэ', +'rcshowhideminor' => '$1 мащІэу яхъуэжахэр', +'rcshowhidebots' => 'Боту $1', +'rcshowhideliu' => 'ЦӀыхухэту, ихьахэр $1', +'rcshowhideanons' => '$1 анонимну', +'rcshowhidemine' => '$1 сгъэтэрэзахэр', +'rclinks' => 'ЗэхъуэкӀыгъуэхэр яужырейхэр $1 гъэлъэгъуэн $2 махуэ
    $3', +'diff' => 'зэмылI.', +'hist' => 'тхыдэ', +'hide' => 'ГъэпшкӀун', +'show' => 'Гъэлъэгъуэн', +'minoreditletter' => 'цӀ', +'newpageletter' => 'Н', +'boteditletter' => 'б', +'rc-enhanced-expand' => 'Нэхъыбэ къэгъэлъагъуэн (JavaScript къегъэсэбэп)', +'rc-enhanced-hide' => 'Гъэхуа жыІэхэр Іухын', + +# Recent changes linked +'recentchangeslinked' => 'ЗэпыщӀа гъэтэрэзыгъуэхэр', +'recentchangeslinked-feed' => 'Гъэтэрэзыгъуэ зэпхахэр', +'recentchangeslinked-toolbox' => 'Гъэтэрэзыгъуэ зэпхахэр', +'recentchangeslinked-title' => 'Гъэтэрэзыгъуэ зэпыщӀахэр $1 щхьэкӀэ', +'recentchangeslinked-summary' => "НапэкӀуэцӀхэм я яужырей зэхъуэкӀыгъуэхэм я тхылъ, напэкӀуэцӀ гъэлъэгъуар зтехьэ (иэ категориэ гъэлъэгъуам хэхьэ). +НапэкӀуэцӀ хэтхэр [[Special:Watchlist|уи щӀэлъыплъыгъуэм]] '''къыхэгэкӀауэ''' щытщ", +'recentchangeslinked-page' => 'НапэкӀуэцӀым и цӀэр:', +'recentchangeslinked-to' => 'Пхэнжу, къэгъэлъэгъуэн напэкІуэцІхэм я хъуэжахэр, къыхэпха напэкІуэцІым къекІуэкІхэм', + +# Upload +'upload' => 'Файл илъхьэн', +'uploadnologin' => 'Системэм зыкъебгъэцӀыхуакъым', +'uploadlogpage' => 'Иралъхьахэм и тхыдэ-тхылъыр', +'uploadedimage' => 'изылъхьар "[[$1]]"', + +# File description page +'filehist' => 'Файлым и тхыдэ', +'filehist-help' => 'Махуэ/зэманым текъузэ файлыр дэпщэщ дэуэду щытами уеплъынумэ', +'filehist-current' => 'иджырер', +'filehist-datetime' => 'Махуэ/Зэман', +'filehist-thumb' => 'КӀэщӀу', +'filehist-thumbtext' => 'КӀэщӀу $1 версиэм щхьэкӀэ', +'filehist-user' => 'ЦӀыхухэт', +'filehist-dimensions' => 'инагъыр', +'filehist-comment' => 'Гулъытыгъуэ', +'imagelinks' => 'Файлым и техьэпӀэхэр', +'linkstoimage' => '{{PLURAL:$1|Мы напэкӀуэцӀыр $1 тохьэ|Мы напэкӀуэцӀхэр $1 тохьэхэ}} мы файлым:', +'sharedupload' => 'Мы файлыр $1 ящыщ, нэмыщӀ проэктхэми къагъэсэбэпыфыну.', +'uploadnewversion-linktext' => 'Файлым и версиэщӀэ илъхьэн', + +# Random page +'randompage' => 'Тхыгъэ гуэрэ ухэмыду еплъын', + +# Statistics +'statistics' => 'Статистикэ', + +# Miscellaneous special pages +'nbytes' => '$1 {{PLURAL:$1|байт|байту|байтхэр}}', +'nmembers' => '$1 {{PLURAL:$1|лъэныкъуэ|лъэныкъуэм|лъэныкъуэхэр}}', +'prefixindex' => 'Мы префикс зыӀэ напэкӀуэцӀу хъуар', +'newpages' => 'НапэкӀуэцӀыщӀэхэр', +'move' => 'ЦӀэр хъуэжын', +'movethispage' => 'Мы напэкӀуэцӀым и цӀэр хъуэжын', +'pager-newer-n' => '{{PLURAL:$1|нэхъ щӀэуэ 1|нэхъ щӀэуэху $1}}', +'pager-older-n' => '{{PLURAL:$1|нэхъ жьыуэ 1|нэхъ жьыху $1}}', + +# Book sources +'booksources' => 'Тхылъ къыздихар', +'booksources-search-legend' => 'Тхылъым и хъыбар лъыхъуэн', +'booksources-go' => 'Къэгъуэтын', + +# Special:Log +'log' => 'Тхылъхэр', + +# Special:AllPages +'allpages' => 'НапэкIуэцIухъуар', +'alphaindexline' => '$1-м щыщIэдзауэ $2-м нэс', +'prevpage' => 'Япэреуэ кӀуа напэкӀуэцӀыр ($1)', +'allpagesfrom' => 'МыбыкIэ щIидзэ напэкIуэцIхэр къихын:', +'allpagesto' => 'Къихыныр къэгъэувыIэн:', +'allarticles' => 'НапэкIуэцIухъуар', +'allpagessubmit' => 'ЩIын', + +# Special:LinkSearch +'linksearch' => 'КІуэцІ техьэпІэхэр', + +# Special:Log/newusers +'newuserlogpage' => 'ЦӀыхухэтхэм я регистрациэ тхылъ', +'newuserlog-create-entry' => 'ЦӀыхухэтыщӀэ', + +# Special:ListGroupRights +'listgrouprights-members' => '(гупым и тхылъ)', + +# E-mail user +'emailuser' => 'Тхыгъэ хуэтхын', + +# Watchlist +'watchlist' => 'Си кӀэлъыплъыгъуэхэм я тхылъ', +'mywatchlist' => 'СызыкӀэлъыплъхэм я тхылъ', +'addedwatch' => 'КӀэлъыплъыгъуэхэм я тхылъым хэтхащ', +'addedwatchtext' => 'НапэкӀуцӀ «[[:$1]]» уи [[Special:Watchlist|щӀэлъыплъыгъуэхэм я тхылъым]] халъхьа. +ЯужкӀэ мы напэкӀуэцӀым и зэхъуэкӀыныгъэхэмрэ абым епха напэкӀуэцӀ тепсэлъыхьыныгъэмрэ мы тхылъым къыхэкӀху хъунущ, икӀи хьэрыф бгъуэуэ къыхэгъэкӀауэ напэкӀуэцӀ [[Special:RecentChanges|зэхъуэкӀыныгъэ щӀэхэм я тхылъэхэм]] хэтыну, нэхъыфӀу къэлъэгъуным щхьэкӀэ.', +'removedwatch' => 'ЩӀэлъыплъыгъуэ тхылъым хэгъэкӀыжащ', +'removedwatchtext' => 'НапэкӀуэцӀ «[[:$1]]» уи [[Special:Watchlist|щӀэлъыплъыгъуэ тхылъым]] хэгъэкӀа.', +'watch' => 'КӀэлъплъын', +'watchthispage' => 'НапэкӀуэцӀым кӀэлъыплъын', +'unwatch' => 'КӀэлъымыплъын', +'watchlist-details' => 'Уи щӀэлъыплъыгъуэ тхылъым $1 {{PLURAL:$1|напэкӀуэцӀ|напэкӀуэцӀу}}, напэкӀуэцӀ тепсэлъыхьыгъуэхэр хэмыту', +'wlshowlast' => 'Гъэлъэгъуэн кӀуа $1 сэхьэтым $2 махуэ $3', +'watchlist-options' => 'ЩӀэлъыплъыгъуэхэм я тхылъ зэгъэзэхуэгъуэ', + +# Displayed when you click the "watch" button and it is in the process of watching +'watching' => 'СызыкӀэлъыплъ тхылъым хэлъхьэн...', +'unwatching' => 'СызыкӀэлъыплъ тхылъым хэхын', + +# Delete +'deletepage' => 'НапэкӀуэцӀыр ихын', +'confirmdeletetext' => 'НапэкІуэцІыр (иэ сурэтыр) зэрщыту ирахыным, и тхыдэ зэхъуэкІыгъуэри игъусу ущІэлъэуащ. +Иджыри зэ, аразыгъуэ етын щхьэкІэ абым техьэж, уи гугъэм къыхэкІынур къэзэрыбгурыІуэр гъэунэхуным щхьэкІэ, а быщІэри [[{{MediaWiki:Policy-url}}]] итым и хабзэм зэртехуэр.', +'actioncomplete' => 'Лэжьыгъэр гъэзэнщIащ', +'deletedtext' => '«$1» ираха. +Еплъ $2 яужыреуэ ирахахэм ярахахэм я тхылъ.', +'deletedarticle' => 'ихащ «[[$1]]»', +'dellogpage' => 'Ирахыжахэм я тхылъ', +'deletecomment' => 'Щхьэусыгъуэ:', +'deleteotherreason' => 'НэгъуэщӀ щхьэусыгъуэ/щӀыгъупхъэ:', +'deletereasonotherlist' => 'НэгъуэщӀ щхьэусыгъуэ', + +# Rollback +'rollbacklink' => 'къегъэзэн', + +# Protect +'protectlogpage' => 'Протектым и тхылъ', +'protectedarticle' => 'Хъумэным щӀэт напэкӀуэцӀ «[[$1]]»', +'modifiedarticleprotection' => 'НапэкӀуэцӀ "[[$1]]" и хъумэныгъэпӀэр зэхъуэкӀауэ щытщ', +'protectcomment' => 'Щхьэусыгъуэ:', +'protectexpiry' => 'Еухыр:', +'protect_expiry_invalid' => 'Хъумэным и зэманыр щиухар тэрэзкъым.', +'protect_expiry_old' => 'Иухыгъуэ зэманыр - блэкӀам.', +'protect-text' => "Мыбдежым уэплъыфыну икӀи напэкӀуэцӀ '''$1''' и хъумэныгъэр зэпхъуэкӀыфыну.", +'protect-locked-access' => "Уи аккаунтым пӀалъэ иӀэр ирикъукъым хъумэныгъэр зэхъуэкӀыным щхьэкӀэ. ЕкӀуэкӀ зэгъэзэхуэгъуэхэр напэкӀуэцӀ '''$1''' щхьэкэ:", +'protect-cascadeon' => 'Мы напэкӀуэцӀыр хъумэным щӀэтщ, ар зытеухуар {{PLURAL:$1|яужкӀэ напэкӀуэцӀ итым| яужкӀэ напэкӀуэцӀ итхэм}} каскад хъумэныгъэ зэратетым щхьэкӀэ. Мы напэкӀуэцӀым и хъумэныгъэр зэпхъуэкӀыфыну, ауэ каскад хъумэныгъэм ар зыкӀи къыхуэхъунукъым.', +'protect-default' => 'Хъумэншэщ', +'protect-fallback' => '"$1" пӀалъэ ухуэныкъуэщ', +'protect-level-autoconfirmed' => 'ЦӀыхухэтыщӀэмрэ щӀэуэ къыхыхьахэмрэ щыхъумэн', +'protect-level-sysop' => 'Тхьэмадэхэм фӀэкӀа', +'protect-summary-cascade' => 'каскаду', +'protect-expiring' => 'йокӀыр $1 (UTC)', +'protect-cascade' => 'НапэкӀуэцӀыр хъумэн, напэкӀуэцӀым хэтхэри (каскаднэ хъумэныгъэ)', +'protect-cantedit' => 'Мы напэкӀуэцӀым и хъумэныгъэр пхъуэжыфынукъым, абым щхьэкӀэ пӀалъэ зыхуэныкъуэр уиӀэкъым.', +'restriction-type' => 'ПӀалъэр:', +'restriction-level' => 'Хуитыныгъэм и уровень:', + +# Undelete +'undeletelink' => 'хэплъэн/ипӀэ игъэувэжын', +'undeletedarticle' => 'зыщIыжар "[[$1]]"', + +# Namespace form on various pages +'namespace' => 'ЦIэхэм и пространствэ:', +'invert' => 'Гу лъытэн', +'blanknamespace' => '(Нэхъыщхьэ)', + +# Contributions +'contributions' => 'ЦӀыхухэтым и хэлъхьэгъуэхэр', +'contributions-title' => 'Хэтым и хэлъхьэгъуэ $1', +'mycontris' => 'Си хэлъхьэгъуэхэр', +'contribsub2' => 'Хэлъхьэгъуэ $1 ($2)', +'uctop' => '(яужырер)', +'month' => 'Мазэм щыщIэдзауэ (икIи нэхъ пасэу):', +'year' => 'Мы илъэсым щыщIэдзауэ (е нэхъпасэжу):', + +'sp-contributions-newbies' => 'Аккаунт щӀэхэм я хэлъхьэгъуэ къуэдер гъэлъэгъуэн', +'sp-contributions-blocklog' => 'теубыдыныгъэхэр', +'sp-contributions-search' => 'Хэлъхьэгъуэм лъыхъуэн', +'sp-contributions-username' => 'IP-адрес иэ хэтым и цIэр:', +'sp-contributions-submit' => 'Къэгъуэтын', + +# What links here +'whatlinkshere' => 'ТехьэпӀэхэр мыбдеж', +'whatlinkshere-title' => '«$1» техьэ напэкІуэцІхэр', +'whatlinkshere-page' => 'НапэкIуэцI:', +'linkshere' => "Мыбым '''[[:$1]]''' тохьэ напэкӀуэцӀхэр:", +'isredirect' => 'напэкIуэцI-егъэкIуэкIа', +'istemplate' => 'хэгъэхьэныгъэ', +'isimage' => 'сурэтым и техьэпӀэ', +'whatlinkshere-prev' => '{{PLURAL:$1|япэрыт|япэрытхэр $1}}', +'whatlinkshere-next' => '{{PLURAL:$1|къыкӀэлъыкӀуэр|къыкӀэлъыкӀуэхэр $1}}', +'whatlinkshere-links' => '← техьэпӀэхэр', +'whatlinkshere-hideredirs' => '$1 уезыгъэкІуэкІхэр', +'whatlinkshere-hidetrans' => '$1 хэтхэныгъэхэр', +'whatlinkshere-hidelinks' => '$1 техьэпӀэхэр', +'whatlinkshere-filters' => 'Филтырхэр', + +# Block/unblock +'blockip' => 'Теубыдэн', +'ipboptions' => 'сэхьэтитӀ:2 hours,1 махуэ:1 day,махуищ:3 days,1 тхьэмахуэ:1 week,тхьэмахуитӀ:2 weeks,1 мазэ:1 month,мазищ:3 months,мазих:6 months,1 илъэс:1 year,сытщыгъуи:infinite', +'ipblocklist' => 'IP-адресрэ аккаунт зэтеубыдахэр', +'blocklink' => 'гъэбыдэн', +'unblocklink' => 'зэӀухыжьын', +'change-blocklink' => 'теубыдыгъуэр зэхъуэкӀын', +'contribslink' => 'хэлъхьэгъуэ', +'blocklogpage' => 'Теубыдыныгъэхэм я тхылъ', +'blocklogentry' => 'Триубыда [[$1]] $2 $3 нэгъунэ', +'unblocklogentry' => 'Теубыдыныгъэр $1 триха', +'block-log-flags-nocreate' => 'аккаунт регистрациэхэр теубыдауэ щытщ', + +# Move page +'movepagetext' => "ИщӀагъым щӀэт формэр къэбгъэсэбэпмэ, напэкӀуэцӀым и цӀэр зэпхъуэкӀыну, и зэхъуэкӀыгъуэхэм я тхыдэ-тхылъри дэщӀыгъу пӀэ щӀэм иувэнущ. +И цӀэжъым и цӀэщӀэмкӀэ тригъыхьурэ ищӀынущ. +Автоматику къэбгъэщӀэрэщӀыжьыфыну тегъэхьэпӀэр, цӀэжьым тетыр. +Ар умыщӀэмэ, щӀэлъыплъ, [[Special:DoubleRedirects|тӀуанэ]] иэ [[Special:BrokenRedirects|зэбгырыдза тегъэхьэпӀэхэр]] щымыӀэмэ. +Уи пщэм илъщ техьэпэхэр зыхуэныкъуэ лъэныкъуэмкӀэ трагъэхьэным щхьэкӀэ. + +Гу лъытэ! НапэкӀуэцӀым и цӀэр зэхъуэкӀынукъым, апхуэдэцӀэ зэрихьу напэкӀуэцӀ щыӀэхэмэ, иэ тегъэувауэ иэ гъэтэрэзыгъуэхэм я тхыдэр нэщӀу щытмэ. +Абым къикӀыр напэкӀуэцӀым и цӀэуэ щытар аргуэру тепӀуэжыфынущ, зэрихьа къуэдеуэ щытам, щуэгъуэкӀэ зэпхъуэкӀамэ, ауэ щыуэгъуэкӀэ напэкӀуэцӀ щыӀэр тебгъэкӀыфынукъым. + +'''ГУЛЪЫТЫГЪУЭ!''' +ЦӀэзэхъуэкӀыным напэкӀуцӀ ''цӀэрыӀуэхэм'' гузэвэгъуэ узэмжа бжыгъэхэр къыхэкӀыфынущ. +Арэзыгъуэ иӀэн щхьэкӀэ иджыри зэ егушыпс а быщӀэм къыхэкӀынур къызэрыбгурыӀуэр.", +'movepagetalktext' => "НапэкӀуэц тепсэлъыхьыгъуэ хэлъхьами автоматику и цӀэр зэхъуэкӀыну, '''мыбы хуэдэхэм щымыхъукӀэ:''' + +* Мы нэщӀу, напэкӀуэцӀ тепсэлъыхьыгъуэ щыӀэщ, апхуэдэ цӀэ зэрихьу иэ +* ИщӀыгъ-игъувапӀэм деж щӀэптхъакъым. + +Апхуэдэм дежь, напэкӀуэцӀхэр уэр-уэру ӀэрыщӀу зэхэбгъэхьэжынущ, хуэныкъу щытмэ.", +'movearticle' => 'НапэкӀуэцӀым и цӀэр хъуэжын', +'newtitle' => 'ЩIэуэ и цIэр', +'move-watch' => 'НапэкІуэцІыр узыкІэлъыплъ къебжэкІым хэтхэн', +'movepagebtn' => 'НапэкӀуэцӀым и цӀэр хъуэжын', +'pagemovedsub' => 'НапэкIуэцIым и цIэр хъуэжащ', +'movepage-moved' => "'''«$1» напэкIуэцIым и цIэр хъуэжащ мыпхуэдэу: «$2»'''", +'articleexists' => 'Апхуэдэ цӀэ зезыхьэ напэкӀуэц щыӀэщ, иэ хуэмыкӀуэ цӀэ иптха. +НэмыщӀ цӀэ къыхэхын хуеуэ щытщ.', +'talkexists' => "'''НапэкӀуэцӀым и цӀэр зэхъуэкӀащ, ауэ напэкӀуэцӀ тепсэлъыхьыгъуэм и цӀэр зэпхъуэкӀ хъукъым, апхуэдэ напэкӀуэцӀ зэрщыӀэм щхьэкӀэ. Уэр-уэру ӀэрыщӀкӀэ зэхэбгъэхьэн хуэйхэ.'''", +'movedto' => 'зэдзэкIащ мыпхуэдэу', +'movetalk' => 'НапэкӀуэцӀ тепсэлъыхьыгъуэ теухуам и цӀэр зэхъуэкӀын', +'1movedto2' => '«[[$1]]» - мыбы къикӀыу «[[$2]]» - мыпхуэдэу и цӀэр хъуэжын', +'1movedto2_redir' => '«[[$1]]»-м и цӀэр хъуэжащ «[[$2]]» къегъэзэкӀам ищхьэкӀэ', +'movelogpage' => 'ЦӀэхъуэкӀынхэм я тхылъ', +'movereason' => 'Щхьэусыгъуэ:', +'revertmove' => 'гъэзэжын', + +# Export +'export' => 'НапэкIуэцIхэр экспорт щIын', + +# Thumbnails +'thumbnail-more' => 'Ин щIын', + +# Tooltip help for the actions +'tooltip-pt-userpage' => 'Уи хэтыгъуэм и напэкӀуэцӀ', +'tooltip-pt-mytalk' => 'Уи тепсэлъыхьуэгъуэм напэкIуэцIыр', +'tooltip-pt-preferences' => 'Уи зэгъэзэхуапхъэхэр', +'tooltip-pt-watchlist' => 'НапэкӀуэцӀхэм я тхылъ, зи зэхъуэкӀыныгъэхэм узкэлъыплъ', +'tooltip-pt-mycontris' => 'Уи гъэтэрэзыгъуэхэм я тхылъ', +'tooltip-pt-login' => 'Мыбдеж системэм зиптхэфынущ, ауэ ар Ӏэмалыншэкъым.', +'tooltip-pt-logout' => 'ИкӀыжын', +'tooltip-ca-talk' => 'НапэкӀуэцӀым итым тепсэлъыхьын', +'tooltip-ca-edit' => 'НапэкӀуэцӀыр пхъуэж хъунущ. Иптхэным ипэ къихуэу еплъыж.', +'tooltip-ca-addsection' => 'КъудамэщIэ щIэдзэн', +'tooltip-ca-viewsource' => 'Мы напэкIуэцIыр и зэхъуэкIыныгъэр гъэбыдащ, ауэ ухуитщ къызыхэкIа текстым уеплъынууи копие пщIынууи', +'tooltip-ca-history' => 'НапэкӀуэцӀым и зэхъуэкӀынэгъэ тхыдэтхылъ', +'tooltip-ca-protect' => 'Хъуэжьынхэм мы напэкӀуэцӀыр щыхъумэн', +'tooltip-ca-delete' => 'Мы напэкIуэцIыр ихын', +'tooltip-ca-move' => 'НапэкӀуэцӀым и цӀэр хъуэжын', +'tooltip-ca-watch' => 'Мы напэкIуэцIыр узыкІэлъыплъ тхылъым хэлъхьэн', +'tooltip-ca-unwatch' => 'Мы напэкIуэцIыр узыкІэлъыплъ тхылъым хэхын', +'tooltip-search' => 'Мы псалъэр къэлъыхъуэн', +'tooltip-search-go' => 'Мыпхуэдабзэ цӀэ зиӀэ напэкӀуэцӀым кӀуэн', +'tooltip-search-fulltext' => 'Мы тхылъыр зыхэт напэкӀуэцӀхэр къэгъуэтын', +'tooltip-n-mainpage' => 'НапэкӀуэцӀ нэхъыщхьэм кӀуэн', +'tooltip-n-mainpage-description' => 'НапэкӀуэцӀ нэхъыщхьэм кӀуэн', +'tooltip-n-portal' => 'Проэтым теухуауэ, уэ епщӀэфынур, дэнэ сыт щыӀэми', +'tooltip-n-currentevents' => 'Хъыбар къекуэкӀхэм я тхылъ', +'tooltip-n-recentchanges' => 'Иужьырей зэхъуэкӀыныгъэхэм я тхылъ', +'tooltip-n-randompage' => 'ЗэрамыщӀэкӀэ хэха напэкӀуэцӀ еплъын', +'tooltip-n-help' => 'Проэктым и дэӀэпыкъуэгъуэ «{{SITENAME}}»', +'tooltip-t-whatlinkshere' => 'Мы напэкӀуэцым и цӀэр къэзыӀу хъуам я тхылъ', +'tooltip-t-recentchangeslinked' => 'Мы напэкӀуэцӀым зызэхуигъазэ напэкӀуэцӀхэм я яужьрей зэхъуэкӀыныгъэхэр', +'tooltip-feed-rss' => 'НапэкІуэцІым щхьэкӀэ RSS пыщІэн', +'tooltip-feed-atom' => 'НапэкІуэцІым щхьэкӀэ Atom пыщІэн', +'tooltip-t-contributions' => 'НапэкӀуэцэм я тӀхылъ, мы хэтым зэрихъуэкӀаху', +'tooltip-t-emailuser' => 'Мы хэтым и e-mail-м хуэтхын', +'tooltip-t-upload' => 'Файл илъхьэн', +'tooltip-t-specialpages' => 'Лэжьыгъэ напэкӀуэцӀхэм я тхылъ', +'tooltip-t-print' => 'НапэкӀуэцӀым и версие, къыкӀэгъэкӀыным щхьа', +'tooltip-t-permalink' => 'Мы напэкуэцым и версиэ зэмыхъуэкӀым и техьэпӀэ', +'tooltip-ca-nstab-main' => 'Тхыгъэм кӀуэцӀылъыр', +'tooltip-ca-nstab-user' => 'ЦӀыхухэтым и напэкӀуэцӀыр къэгъэлъэгъуэн', +'tooltip-ca-nstab-special' => 'Лэжыгъэ напэкӀуэцӀ, гъэтэрэзыным щхьэкӀэ зэтеубыдауэ щытщ', +'tooltip-ca-nstab-project' => 'НапэкІуэцІым и проэкт', +'tooltip-ca-nstab-image' => 'Файлым и напэкӀуэцӀ', +'tooltip-ca-nstab-template' => 'Шаблоным и напэкӀуэцӀ', +'tooltip-ca-nstab-category' => 'Категориэм и напэкӀуэцӀ', +'tooltip-minoredit' => 'ЗэхъуэкІыныгъэр жьгъейуэ къэлъытэн', +'tooltip-save' => 'Уи гъэтэрэзыгъуэхэр хъумэн', +'tooltip-preview' => 'НапэкІуэцІым и япэ-еплъ, итхэным ипэ къэгъэсэбэп!', +'tooltip-diff' => 'Япэрей тхыгъэм и хуэлъытыгъуэкӀэ зэхъуэкӀыныгъэ халъхьэхэр гъэлъэгъуэн.', +'tooltip-compareselectedversions' => 'Версиэ тӀууэ хэхам я зэщхьэщыкыгъуэр гъэлъэгъуэн', +'tooltip-watch' => 'Мы напэкIуэцIыр уи кӀэлъыплъыгъуэ тхылъым хэлъхьэн', +'tooltip-rollback' => 'Зы текъузэкIэ зэхъуэкIыныгъэхэр Ӏухын, яужырей редакторым ищIахэр', +'tooltip-undo' => 'Гъэтэрэзыгъуэ хэлъхьар Ӏухауэ япэ-еплъ щӀын, хэхыжыным гурыӀуэгъуэ иӀу гъэлъэгъуэным щхьэкӀэ.', + +# Browsing diffs +'previousdiff' => ' ← Япэрыт гъэтэрэзыгъуэр', +'nextdiff' => 'КъыкIэлъыкIуэ гъэтэрэзыгъуэр →', + +# Media information +'file-info-size' => '$1 × $2 пикселу, файлым и инагъыр: $3, MIME-тип: $4', +'file-nohires' => 'Ин плъыфэу къэгъэлъэгъуэн щыIэкъым.', +'svg-long-desc' => 'SVG файл, номиналу $1 × $2 пиксел, файлым и инагъыр: $3', +'show-big-image' => 'Сурэтыр нэхъ къабзэу', +'show-big-image-thumb' => 'Япэ-еплъым и инагъ: пиксел: $1 × $2', + +# Bad image list +'bad_image_list' => 'Форматыр зэрщытын хуэр: + +Гулытэ зиӀэнур тхылъым и дэмыгъэхэм (сатыр дэмыгъэ * къежьэхэр). +Сатырым и техьэпӀэ япэрейм сурэт иплъхьэ мыхъунум и техьэпӀэ иӀэн хуэй. +Яужырыт техьэпӀэхэр хэгъэкӀа хуэду къилъытэну, сурэтыр здиплъэ хъуну тхыгъэхэр.', + +# Metadata +'metadata' => 'Метаданнэхэр', +'metadata-help' => 'Файлым дэӀэпыкъуэгъу кэӀуэтэгъуэхэр хэлъ, диджитал камерэхэм иэ сканерхэм халъхьэхэр. Файлыр хэлъхьа яуж ягъэтэрэзамэ, къэӀуэтэгъуэ гуэрэхэр сурэт итым ехэм темыхуэнкӀэ хъунущ.', +'metadata-expand' => 'Дээпыкъуэгъу кэӀуэтэгъуэхэр гъэлъэгъуэн', +'metadata-collapse' => 'Дээпыкъуэгъу кэӀуэтэгъуэхэр гъэпшкӀун', +'metadata-fields' => 'Метаданнэхэр, мыбы кърибжэкІхэр къызэрыгуэкІыу сурэтым и напэкІуэцІым къщридзэнущ, адрейхэр гъэпщкІуау щытынущ. +* make +* model +* datetimeoriginal +* exposuretime +* fnumber +* isospeedratings +* focallength', + +# External editor support +'edit-externally' => 'Файлыр гъэтэрэзын, нэгъуэщӀ программэ и сэбэпкӀэ', +'edit-externally-help' => '(нэхъыбу еплъ [http://www.mediawiki.org/wiki/Manual:External_editors илъхьэным и тепсэлъыхьыгъуэ])', + +# 'all' in various places, this might be different for inflected languages +'watchlistall2' => 'псори', +'namespacesall' => 'псори', +'monthsall' => 'псори', + +# Multipage image navigation +'imgmultipageprev' => 'япэрыт напэкӀуэцӀыр', +'imgmultipagenext' => 'къыкӀэлъыкуэ напэкӀуэцӀыр', + +# Table pager +'table_pager_next' => 'КъыкӀэлъыкӀуэ напэкӀуэцӀыр', +'table_pager_prev' => 'Япэрыт напэкӀуэцӀыр', +'table_pager_first' => 'Япэрей напэкӀуэцӀыр', +'table_pager_last' => 'Яужырей напэкӀуэцӀыр', + +# Watchlist editing tools +'watchlisttools-view' => 'Тхылъым хэт напэкIуэцIхэм щыщу хъуэжахэр', +'watchlisttools-edit' => 'Еплъын/гъэтэрэзын тхылъыр', +'watchlisttools-raw' => 'Тхылъ хуэдэу гъэтэрэзын', + +# Special:Version +'version-specialpages' => 'Лэжыгъэ напэкӀуэцӀ', + +# Special:SpecialPages +'specialpages' => 'СпецнапэкӀуэцӀхэр', + +); diff --git a/languages/messages/MessagesKiu.php b/languages/messages/MessagesKiu.php index d2a4de64..4da8cd3c 100644 --- a/languages/messages/MessagesKiu.php +++ b/languages/messages/MessagesKiu.php @@ -29,8 +29,7 @@ href="" class="internal"}?{/a}) basne.', 'tog-editsection' => 'Vurnaena qısımi ebe gireunê [bıvurne] ra feal ke', 'tog-editsectiononrightclick' => 'Qısımu be teqnaena serrêze ra ebe gozaga raste bıvurne (JavaScript lazımo)', 'tog-showtoc' => 'Tabloê tedeesteu basne (de pelunê be hirê sernustu ra jêdêri de)', -'tog-rememberpassword' => 'Parola mı bia ho viri', -'tog-editwidth' => 'Warê nustey hira ke, ke verıniya pela cıdaena nustey tam baso', +'tog-rememberpassword' => 'Parola mı nê cıcêraoği de bia ho viri (serba tewr jêde $1 {{PLURAL:$1|roze|rozu}}).', 'tog-watchcreations' => 'Pelê ke mı afernê, lista mına şêrkerdişi ke', 'tog-watchdefault' => 'Pelê ke mı vurnê, lista mına şêrkerdişi ke', 'tog-watchmoves' => 'Pelê ke mı kırısnê, lista mına şêrkerdişi ke', @@ -175,31 +174,21 @@ href="" class="internal"}?{/a}) basne.', 'faqpage' => 'Project:PZP', # Vector skin -'vector-action-addsection' => 'Mewzu ilawe ke', -'vector-action-delete' => 'Bestere', -'vector-action-move' => 'Bere', -'vector-action-protect' => 'Bısevekne', -'vector-action-undelete' => 'Esterıtene peyser bıcê', -'vector-action-unprotect' => 'Rake', -'vector-namespace-category' => 'Kategoriye', -'vector-namespace-help' => 'Pela phoşti', -'vector-namespace-image' => 'Dosya', -'vector-namespace-main' => 'Pele', -'vector-namespace-media' => 'Pela weseti', -'vector-namespace-mediawiki' => 'Mesac', -'vector-namespace-project' => 'Pela procey', -'vector-namespace-special' => 'Pela xususiye', -'vector-namespace-talk' => 'Hurênais', -'vector-namespace-template' => 'Şablon', -'vector-namespace-user' => 'Pela karberi', -'vector-view-create' => 'Vıraze', -'vector-view-edit' => 'Bıvurne', -'vector-view-history' => 'Tarixi basne', -'vector-view-view' => 'Bıwane', -'vector-view-viewsource' => 'Çımey bıvêne', -'actions' => 'Kerdey', -'namespaces' => 'Caê namey', -'variants' => 'Varyanti', +'vector-action-addsection' => 'Mewzu ilawe ke', +'vector-action-delete' => 'Bestere', +'vector-action-move' => 'Bere', +'vector-action-protect' => 'Bısevekne', +'vector-action-undelete' => 'Esterıtene peyser bıcê', +'vector-action-unprotect' => 'Rake', +'vector-simplesearch-preference' => 'Tewsiyunê cıcêraişiê raverberdu rake (Teyna vector skin de)', +'vector-view-create' => 'Vıraze', +'vector-view-edit' => 'Bıvurne', +'vector-view-history' => 'Tarixi basne', +'vector-view-view' => 'Bıwane', +'vector-view-viewsource' => 'Çımey bıvêne', +'actions' => 'Kerdey', +'namespaces' => 'Caê namey', +'variants' => 'Varyanti', 'errorpagetitle' => 'Xeta', 'returnto' => 'Peyser so $1.', @@ -260,6 +249,9 @@ Hedê ho ra jêde karberi kenê ke şêrê na pele bıkerê. Sıma rê zamet, tenê vınderê, hata ke reyna kenê ke na pele kuyê. $1', +'pool-timeout' => 'Kilıtbiyaene sero waxtê vınetişi', +'pool-queuefull' => 'Rêza hewze pırra', +'pool-errorunknown' => 'Xeta nêzanıtiye', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Heqa {{SITENAME}} de', @@ -421,71 +413,74 @@ Sebebê ho ''$2'' dero.", 'virus-unknownscanner' => "''antivirus''o nêzanıte:", # Login and logout pages -'logouttext' => "'''Sıma nıka cı ra veciyê.''' +'logouttext' => "'''Sıma nıka cı ra veciyê.''' Sıma şikinê dızdêni {{SITENAME}} de dewam kerê, ya jê eyni karberi ya ki jê jüyê de bini [[Special:UserLogin|oncia cıkuyê]]. Beno ke taê peli sıma hona cıkote asnenê, hata ke sıma ''browser cache''ê ho kerd pak.", -'welcomecreation' => '== Xêr amê, $1! == +'welcomecreation' => '== Xêr amê, $1! == Hesabê sıma vıraciya. Vurnaena [[Special:Preferences|melumatanê {{SITENAME}}]] ho vira mekerê.', -'yourname' => 'Namê karberi:', -'yourpassword' => 'Parola:', -'yourpasswordagain' => 'Parola tekrar ke:', -'remembermypassword' => 'Mı na komputeri de biya ho viri', -'yourdomainname' => 'Bandıra sıma:', -'externaldberror' => 'Cıfeteliyaisê naskerdene de ya xeta esta ya ki tebera vırastena hesabê sıma rê destur çino.', -'login' => 'Cıkuye', -'nav-login-createaccount' => 'Cıkuye / hesab vıraze', -'loginprompt' => "Cıkotena {{SITENAME}} rê gunê ''cookies'' akerdey bê.", -'userlogin' => 'Cıkuye / hesab vıraze', -'userloginnocreate' => 'Cıkuye', -'logout' => 'Veciye', -'userlogout' => 'Veciye', -'notloggedin' => 'Cı nêkota', -'nologin' => "Hesabê sıma çino? '''$1'''.", -'nologinlink' => 'Jü hesab rake', -'createaccount' => 'Hesab vıraze', -'gotaccount' => "Hesabê sıma ke esto? '''$1'''.", -'gotaccountlink' => 'Cıkuye', -'createaccountmail' => 'e-poste sera', -'badretype' => 'Parola sıma nêvêrena.', -'userexists' => 'No namê karberi guretiyo. +'yourname' => 'Namê karberi:', +'yourpassword' => 'Parola:', +'yourpasswordagain' => 'Parola tekrar ke:', +'remembermypassword' => 'Cıkotena mı na komputeri de bia ho viri ($1 {{PLURAL:$1|roze|rozu}} ra seba zu zêdêrêni)', +'securelogin-stick-https' => 'Cıkotene ra dıme HTTPS rê giredae bımane', +'yourdomainname' => 'Bandıra sıma:', +'externaldberror' => 'Cıfeteliyaisê naskerdene de ya xeta esta ya ki tebera vırastena hesabê sıma rê destur çino.', +'login' => 'Cıkuye', +'nav-login-createaccount' => 'Cıkuye / hesab vıraze', +'loginprompt' => "Cıkotena {{SITENAME}} rê gunê ''cookies'' akerdey bê.", +'userlogin' => 'Cıkuye / hesab vıraze', +'userloginnocreate' => 'Cıkuye', +'logout' => 'Veciye', +'userlogout' => 'Veciye', +'notloggedin' => 'Cı nêkota', +'nologin' => "Hesabê sıma çino? '''$1'''.", +'nologinlink' => 'Jü hesab rake', +'createaccount' => 'Hesab vıraze', +'gotaccount' => "Hesabê sıma ke esto? '''$1'''.", +'gotaccountlink' => 'Cıkuye', +'createaccountmail' => 'e-poste sera', +'createaccountreason' => 'Sebeb:', +'badretype' => 'Parola sıma nêvêrena.', +'userexists' => 'No namê karberi guretiyo. Kerem ke, namêna weçine.', -'loginerror' => 'Xeta cıkotene', -'createaccounterror' => 'Hesab nêvırajino: $1', -'nocookiesnew' => 'Hesabê karberi vıraziya, hama sıma nêşikiyay cı kuyê. +'loginerror' => 'Xeta cıkotene', +'createaccounterror' => 'Hesab nêvırajino: $1', +'nocookiesnew' => 'Hesabê karberi vıraziya, hama sıma nêşikiyay cı kuyê. Serba rakerdena hesabi çerezê {{SITENAME}}i gurêninê. Sıma çerezi qapan kerdi. Ravêri ine rakerê, dıma be name u parola sımawa newiye cı kuyê.', -'nocookieslogin' => 'Serba rakerdena hesabi çerezê {{SITENAME}}i gurêninê. +'nocookieslogin' => 'Serba rakerdena hesabi çerezê {{SITENAME}}i gurêninê. Sıma çerezi qapan kerdi. Ravêri ine rakerê u reyna bıcerrebnê.', -'noname' => 'Ebe namê do vêrdoği ra cınêkota.', -'loginsuccesstitle' => 'Cıkotene biye ra', -'loginsuccess' => "'''Sıta {{SITENAME}} de ebe namê karberi \"\$1\" kota cı.'''", -'nosuchuser' => 'Ebe namê "$1"i jü karber çino. +'noname' => 'Ebe namê do vêrdoği ra cınêkota.', +'loginsuccesstitle' => 'Cıkotene biye ra', +'loginsuccess' => "'''Sıta {{SITENAME}} de ebe namê karberi \"\$1\" kota cı.'''", +'nosuchuser' => 'Ebe namê "$1"i jü karber çino. Nustena namunê karberu de herfa pil u qıze rê diqet kerê. Nustena ho qonrol kerê, ya ki [[Special:UserLogin/signup|jü hesabo newe rakerê]].', -'nosuchusershort' => 'Karberê do ebe namê "$1" çino. +'nosuchusershort' => 'Karberê do ebe namê "$1" çino. Nustena cı qontrol ke.', -'nouserspecified' => 'Gunê namê jü karberi bıdekernê.', -'login-userblocked' => 'No karber engel biyo. Cıkotene rê mısade cı nêdino.', -'wrongpassword' => 'Parola ğelete kota cı. +'nouserspecified' => 'Gunê namê jü karberi bıdekernê.', +'login-userblocked' => 'No karber engel biyo. Cıkotene rê mısade cı nêdino.', +'wrongpassword' => 'Parola ğelete kota cı. Kerem ke, oncia bıcerrebne.', -'wrongpasswordempty' => 'Parola thale kota cı. +'wrongpasswordempty' => 'Parola thale kota cı. Kerem ke, oncia bıcerrebne.', -'passwordtooshort' => 'Paroley tewr senık ebe {{PLURAL:$1|1 karakter|$1 karakteru}} gunê derg bê.', -'password-name-match' => 'Parola sıma namê sımaê karberi ra gunê ferqın bo.', -'mailmypassword' => 'E-mail sera parola newiye bırusne', -'passwordremindertitle' => 'Serba {{SITENAME}} parola newiya vêrdoğe', -'noemail' => 'Adresa de e-posteya ke ebe namê karberi "$1" beqeyda, çina.', -'mailerror' => 'Xeta rusnaena e-postey: $1', -'emailconfirmlink' => 'Adresa e-postê ho tesdiq ke', -'accountcreated' => 'Hesab vırajiya', -'accountcreatedtext' => 'Serba $1i hesabê karberi vırajiya.', -'createaccount-title' => 'Serba {{SITENAME}}i vırajiyaene hesabê karberi', -'usernamehasherror' => 'Namê karberi de karakteri gunê têwerte ra mebê', -'loginlanguagelabel' => 'Zon: $1', +'passwordtooshort' => 'Paroley tewr senık ebe {{PLURAL:$1|1 karakter|$1 karakteru}} gunê derg bê.', +'password-name-match' => 'Parola sıma namê sımaê karberi ra gunê ferqın bo.', +'password-login-forbidden' => 'Namê nê karberi u gurenaena parola qedeğen biya.', +'mailmypassword' => 'E-mail sera parola newiye bırusne', +'passwordremindertitle' => 'Serba {{SITENAME}} parola newiya vêrdoğe', +'noemail' => 'Adresa de e-posteya ke ebe namê karberi "$1" beqeyda, çina.', +'mailerror' => 'Xeta rusnaena e-postey: $1', +'emailconfirmlink' => 'Adresa e-postê ho tesdiq ke', +'accountcreated' => 'Hesab vırajiya', +'accountcreatedtext' => 'Serba $1i hesabê karberi vırajiya.', +'createaccount-title' => 'Serba {{SITENAME}}i vırajiyaene hesabê karberi', +'usernamehasherror' => 'Namê karberi de karakteri gunê têwerte ra mebê', +'loginlanguagelabel' => 'Zon: $1', # Password reset dialog 'resetpass' => 'Parola bıvurne', @@ -559,6 +554,8 @@ ya ki [{{fullurl:{{FULLPAGENAME}}|action=edit}} na pele bıvurnê].', 'userpage-userdoesnotexist' => 'Hesabê karberi "$1" qeyd nêbiyo. Kerem ke, tı ke wazena na pele vırazê/bıvurnê, qontrol ke.', 'userpage-userdoesnotexist-view' => 'Hesabê karberi "$1" qeyd nêbiyo.', +'userinvalidcssjstitle' => "'''Teme:''' Mewzuyê \"\$1\" çino. +Dosyunê ebe namê .css u .js'y de herfa hurdiye bıgurêne, mesela hurêndia {{ns:user}}:Foo/Vector.css'i de {{ns:user}}:Foo/vector.css bınuse.", 'updated' => '(Bi rozane)', 'note' => "'''Not:'''", 'previewnote' => "'''Bıfıkıriye ke no teyna jü verqayto.''' @@ -884,10 +881,6 @@ Sıma ke ney bıgurenê, karê sıma de no namdarêni dano.', 'recentchanges' => 'Vurnaisê peyêni', 'recentchanges-legend' => 'Alternatifê vurnaisunê peyênu', 'recentchanges-feed-description' => 'Na weiyekerdena wiki de vurnaisê tewrpeyêne ke biyê ine teqib ke.', -'recentchanges-label-legend' => 'Arezekerdeni: $1.', -'recentchanges-legend-newpage' => '$1 - pela newiye', -'recentchanges-legend-minor' => '$1 vurnaiso qızkek', -'recentchanges-legend-bot' => '$1 - vurnaisê boti', 'rcnote' => "Cêr {{PLURAL:$1|'''1''' vurnaiso peyên|'''$1''' vurnaisê peyêni}} be {{PLURAL:$2|roza peyêne|'''$2''' rozunê peyênunê}} $5, $4 ra estê.", 'rclistfrom' => '$1 ra hata nıka vurnaisunê newu bıasne', 'rcshowhideminor' => '$1 vurnaisê qızkeki', @@ -1070,7 +1063,6 @@ Sıma ke ney bıgurenê, karê sıma de no namdarêni dano.', # Watchlist 'watchlist' => 'Pela mına şêrkerdene', 'mywatchlist' => 'Lista mına şêrkerdışi', -'watchlistfor' => "(serba '''$1''')", 'addedwatch' => 'Kerd be lista şêrkerdişi ser', 'addedwatchtext' => "Pela \"[[:\$1]]\"i ilawe biye be [[Special:Watchlist|pela şêrkerdişi]]. Nara dıme, vurnaisê na pele u pela hurênaisê dawa alaqedare ita bena lista, u pele [[Special:RecentChanges|lista vurnaisunê peyênu]] de '''qolınd''' asena ke cı ra asan weçiniyo.", @@ -1337,9 +1329,9 @@ Serba areze-kerdene qaytê ''math/README''y ke.", 'nextdiff' => 'Vurnaena newêre →', # Media information -'file-info-size' => '($1 × $2 piksel, gırsênia dosya: $3, MIME tipê cı: $4)', +'file-info-size' => '$1 × $2 piksel, gırsênia dosya: $3, MIME tipê cı: $4', 'file-nohires' => 'Tewrêna berz rovıleşiyaene nêbena.', -'svg-long-desc' => '(Dosya SVGy, seha ke $1 × $2 pixels, gırşênia dosya: $3)', +'svg-long-desc' => 'Dosya SVGy, seha ke $1 × $2 pixels, gırşênia dosya: $3', 'show-big-image' => 'Rovıleşiyaena tame', 'show-big-image-thumb' => 'Gırsênia verqayti: $1 × $2 piksel', @@ -1463,4 +1455,8 @@ Eke dosya de peydêna vuriyais biyo ki, beno ke taê melumati gorê vurnaisê ne # Special:BlankPage 'blankpage' => 'Pela thale', +# Special:ComparePages +'compare-page1' => 'Pele 1', +'compare-page2' => 'Pele 2', + ); diff --git a/languages/messages/MessagesKk_arab.php b/languages/messages/MessagesKk_arab.php index 440ad6b7..75d3a5d4 100644 --- a/languages/messages/MessagesKk_arab.php +++ b/languages/messages/MessagesKk_arab.php @@ -164,9 +164,9 @@ $dateFormats = array( 'yyyy-mm-dd both' => 'xnH:xni:xns, xnY-xnm-xnd', 'persian time' => '‏H:i', - 'persian date' => '‏xij xiF xiY', + 'persian date' => '‏xij xiF xiY', 'persian both' => '‏xij xiF xiY، H:i', - + 'hebrew time' => '‏H:i', 'hebrew date' => '‏xjj xjF xjY', 'hebrew both' => '‏H:i، xjj xjF xjY', @@ -180,7 +180,7 @@ $dateFormats = array( * Magic words * Customisable syntax for wikitext and elsewhere. * - * IDs must be valid identifiers, they can't contain hyphens. + * IDs must be valid identifiers, they can't contain hyphens. * * Note to translators: * Please include the English words as synonyms. This allows people @@ -398,9 +398,9 @@ $specialPageAliases = array( 'Invalidateemail' => array( 'قۇپتاماۋ_حاتى' ), ); -#------------------------------------------------------------------- +# ------------------------------------------------------------------- # Default messages -#------------------------------------------------------------------- +# ------------------------------------------------------------------- $messages = array( # User preference toggles @@ -416,8 +416,7 @@ $messages = array( 'tog-editsection' => 'بولىمدەردى [وڭدەۋ] سىلتەمەسىمەن وڭدەۋىن قوس', 'tog-editsectiononrightclick' => 'ٴبولىم تاقىرىبىن وڭ نۇقۋمەن وڭدەۋىن قوس (JavaScript)', 'tog-showtoc' => 'مازمۇنىن كورسەت (3-تەن ارتا ٴبولىمى بارىلارعا)', -'tog-rememberpassword' => 'كىرگەنىمدى وسى كومپيۋتەردە ۇمىتپا', -'tog-editwidth' => 'كىرىستىرۋ ورنى تولىق ەنىمەن', +'tog-rememberpassword' => 'كىرگەنىمدى وسى كومپيۋتەردە ۇمىتپا (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'مەن باستاعان بەتتەردى باقىلاۋ تىزىمىمە ۇستە', 'tog-watchdefault' => 'مەن وڭدەگەن بەتتەردى باقىلاۋ تىزىمىمە ۇستە', 'tog-watchmoves' => 'مەن جىلجىتقان بەتتەردى باقىلاۋ تىزىمىمە ۇستە', @@ -757,7 +756,7 @@ $2', 'yourname' => 'قاتىسۋشى اتىڭىز:', 'yourpassword' => 'قۇپىييا ٴسوزىڭىز:', 'yourpasswordagain' => 'قۇپىييا ٴسوزدى قايتالاڭىز:', -'remembermypassword' => 'مەنىڭ كىرگەنىمدى بۇل كومپيۋتەردە ۇمىتپا', +'remembermypassword' => 'مەنىڭ كىرگەنىمدى بۇل كومپيۋتەردە ۇمىتپا (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'جەلى ۇيشىگىڭىز:', 'externaldberror' => 'وسى ارادا نە شەتتىك راستاۋ دەرەكقورىندا قاتە بولدى, نەمەسە شەتتىك تىركەلگىڭىزدى جاڭالاۋ رۇقساتى جوق.', 'login' => 'كىرۋ', @@ -937,7 +936,7 @@ IP مەكەنجايىڭىز بۇل بەتتىڭ تۇزەتۋ تارىيحىند 'usercsspreview' => "'''مىناۋ CSS ٴماتىنىن تەك قاراپ شىعۋ ەكەنىن ۇمىتپاڭىز, ول ٴالى ساقتالعان جوق!'''", 'userjspreview' => "'''مىناۋ JavaScript قاتىسۋشى باعدارلاماسىن تەكسەرۋ/قاراپ شىعۋ ەكەنىن ۇمىتپاڭىز, ول ٴالى ساقتالعان جوق!'''", 'userinvalidcssjstitle' => "'''قۇلاقتاندىرۋ:''' وسى ارادا «$1» دەگەن ەش مانەر جوق. -قاتىسۋشىنىڭ .css جانە .js فايل اتاۋى كىشى ارىپپپەن جازىلۋ ٴتىيىستى ەكەنىن ۇمىتپاڭىز, مىسالعا {{ns:user}}:Foo/monobook.css دەگەندى {{ns:user}}:Foo/Monobook.css دەگەنمەن سالىستىرىپ قاراڭىز.", +قاتىسۋشىنىڭ .css جانە .js فايل اتاۋى كىشى ارىپپپەن جازىلۋ ٴتىيىستى ەكەنىن ۇمىتپاڭىز, مىسالعا {{ns:user}}:Foo/vector.css دەگەندى {{ns:user}}:Foo/Vector.css دەگەنمەن سالىستىرىپ قاراڭىز.", 'updated' => '(جاڭارتىلعان)', 'note' => "'''اڭعارتپا:'''", 'previewnote' => "'''مىناۋ تەك قاراپ شىعۋ ەكەنىن ۇمىتپاڭىز; @@ -977,9 +976,6 @@ IP مەكەنجايىڭىز بۇل بەتتىڭ تۇزەتۋ تارىيحىند ەگەر جازۋىڭىزدىڭ ەركىن وڭدەلۋىن قالاماساڭىز, مىندا جارىييالاماۋىڭىز ٴجون.
    تاعى دا, بۇل ماعلۇمات ٴوزىڭىز جازعانىڭىزعا, نە قوعام قازىناسىنان نەمەسە سونداي اشىق قورلاردان كوشىرىلگەنىنە بىزگە ۋادە بەرەسىز (كوبىرەك اقپارات ٴۇشىن $1 قۋجاتىن قاراڭىز). '''اۋتورلىق قۇقىقپەن قورعاۋلى ماعلۇماتتى رۇقساتسىز جارىييالاماڭىز!'''", -'longpagewarning' => "'''قۇلاقتاندىرۋ: بۇل بەتتىڭ مولشەرى — $1 kB; -كەيبىر شولعىشتاردا بەت مولشەرى 32 kB جەتسە نە ونى اسسا وڭدەۋ كۇردەلى بولۋى مۇمكىن. -بەتتى بىرنەشە كىشكىن بولىمدەرگە ٴبولىپ كورىڭىز.'''", 'longpageerror' => "'''قاتەلىك: جونەلتپەك ٴماتىنىڭىزدىن مولشەرى — $1 KB, ەڭ كوبى $2 KB رۇقسات ەتىلگەن مولشەرىنەن اسقان. بۇل ساقتاي الىنبايدى.'''", 'readonlywarning' => "'''قۇلاقتاندىرۋ: دەرەكقور باپتاۋ ٴۇشىن قۇلىپتالعان, سوندىقتان ٴدال قازىر وڭدەمەڭىزدى ساقتاي المايسىز. @@ -1465,7 +1461,6 @@ $3 كەلتىرىلگەن سەبەبى: ''$2''", 'fileexists-shared-forbidden' => 'وسىلاي اتالعان فايل ورتاق قويمادا الداقاشان بار; كەرى قايتىڭىز دا, وسى فايلدى جاڭا اتىمەن قوتارىپ بەرىڭىز. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'بۇل فايل كەلەسى {{PLURAL:$1|فايلدىڭ|فايلدارىنىڭ}} تەلنۇسقاسى:', -'successfulupload' => 'ٴساتتى قوتارىپ بەرىلدى', 'uploadwarning' => 'قوتارىپ بەرۋ جونىندە قۇلاقتاندىرۋ', 'savefile' => 'فايلدى ساقتاۋ', 'uploadedimage' => '«[[$1]]» فايلىن قوتارىپ بەردى', @@ -1486,6 +1481,7 @@ $3 كەلتىرىلگەن سەبەبى: ''$2''", قولايلى بولۋى ٴۇشىن بۇل فايلدىڭ جويۋ جۋرنالى كەلتىرىلگەن:", 'filename-bad-prefix' => "قوتارىپ بەرمەك فايلىڭىزدىڭ اتاۋى '''«$1» ''' دەپ باستالادى, مىناداي سىيپاتتاۋسىز اتاۋدى ادەتتە ساندىق كامەرالار وزدىكتىك بەرەدى. فايلىڭىزعا سىيپاتتىلاۋ اتاۋدى تاڭداڭىز.", +'upload-success-subj' => 'ٴساتتى قوتارىپ بەرىلدى', 'upload-proto-error' => 'بۇرىس حاتتاما', 'upload-proto-error-text' => 'شەتتەن قوتارىپ بەرۋ ٴۇشىن URL جايلارى http:// نەمەسە ftp:// دەگەندەردەن باستالۋ ٴجون.', @@ -1781,7 +1777,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'باقىلاۋ ٴتىزىمى', 'mywatchlist' => 'باقىلاۋىم', -'watchlistfor' => "('''$1''' باقىلاۋلارى)", 'nowatchlist' => 'باقىلاۋ تىزىمىڭىزدە ەش دانا جوق', 'watchlistanontext' => 'باقىلاۋ تىزىمىڭىزدەگى دانالاردى قاراۋ, نە وڭدەۋ ٴۇشىن $1 كەرەك.', 'watchnologin' => 'كىرمەگەنسىز', @@ -1897,7 +1892,9 @@ $NEWPAGE 'revertpage' => '[[{{#special:Contributions}}/$2|$2]] ([[{{ns:user_talk}}:$2|تالقىلاۋى]]) وڭدەمەلەرىنەن [[{{ns:user}}:$1|$1]] سوڭعى نۇسقاسىنا قايتاردى', 'rollback-success' => '$1 وڭدەمەلەرىنەن قايتارعان; $2 سوڭعى نۇسقاسىنا وزگەرتتى.', -'sessionfailure' => 'كىرۋ سەسسىيياسىندا شاتاق بولعان سىيياقتى; + +# Edit tokens +'sessionfailure' => 'كىرۋ سەسسىيياسىندا شاتاق بولعان سىيياقتى; سەسسىيياعا شابۋىلداۋداردان قورعانۋ ٴۇشىن, وسى ارەكەت توقتاتىلدى. «ارتقا» دەگەندى باسىڭىز, جانە بەتتى قايتا جۇكتەڭىز دە, قايتا بايقاپ كورىڭىز.', @@ -2080,7 +2077,6 @@ $1', 'ipb-edit-dropdown' => 'بۇعاتتاۋ سەبەپتەرىن وڭدەۋ', 'ipb-unblock-addr' => '$1 دەگەندى بۇعاتتاماۋ', 'ipb-unblock' => 'قاتىسۋشى اتىن نەمەسە IP مەكەنجايىن بۇعاتتاماۋ', -'ipb-blocklist-addr' => '$1 ٴۇشىن بار بۇعاتتاۋلاردى قاراۋ', 'ipb-blocklist' => 'بار بۇعاتتاۋلاردى قاراۋ', 'unblockip' => 'قاتىسۋشىنى بۇعاتتاماۋ', 'unblockiptext' => 'تومەندەگى ٴپىشىندى الدىنداعى IP مەكەنجايىمەن نە اتىمەن بۇعاتتالعان قاتىسۋشىعا جازۋ قاتىناۋىن قالپىنا كەلتىرىۋى ٴۇشىن قولدانىڭىز.', @@ -2471,9 +2467,9 @@ $1', 'widthheight' => '$1 × $2', 'widthheightpage' => '$1 × $2, $3 بەت', 'file-info' => 'فايل مولشەرى: $1, MIME ٴتۇرى: $2', -'file-info-size' => '($1 × $2 نۇكتە, فايل مولشەرى: $3, MIME ٴتۇرى: $4)', +'file-info-size' => '$1 × $2 نۇكتە, فايل مولشەرى: $3, MIME ٴتۇرى: $4', 'file-nohires' => 'جوعارى اجىراتىلىمدىعى جەتىمسىز.', -'svg-long-desc' => '(SVG فايلى, كەسىمدى $1 × $2 نۇكتە, فايل مولشەرى: $3)', +'svg-long-desc' => 'SVG فايلى, كەسىمدى $1 × $2 نۇكتە, فايل مولشەرى: $3', 'show-big-image' => 'جوعارى اجىراتىلىمدى', 'show-big-image-thumb' => 'قاراپ شىعۋ مولشەرى: $1 × $2 نۇكتە', diff --git a/languages/messages/MessagesKk_cyrl.php b/languages/messages/MessagesKk_cyrl.php index cc90e913..61f1d13b 100644 --- a/languages/messages/MessagesKk_cyrl.php +++ b/languages/messages/MessagesKk_cyrl.php @@ -84,7 +84,7 @@ $namespaceAliases = array( 'ارنايى' => NS_SPECIAL, 'تالقىلاۋ' => NS_TALK, 'قاتىسۋشى' => NS_USER, - 'قاتىسۋشى_تالقىلاۋى'=> NS_USER_TALK, + 'قاتىسۋشى_تالقىلاۋى' => NS_USER_TALK, '$1_تالقىلاۋى' => NS_PROJECT_TALK, 'سۋرەت' => NS_FILE, 'سۋرەت_تالقىلاۋى' => NS_FILE_TALK, @@ -137,9 +137,9 @@ $dateFormats = array( 'yyyy-mm-dd both' => 'xnH:xni:xns, xnY-xnm-xnd', 'persian time' => 'H:i', - 'persian date' => 'xij xiF xiY', + 'persian date' => 'xij xiF xiY', 'persian both' => 'xij xiF xiY, H:i', - + 'hebrew time' => 'H:i', 'hebrew date' => 'xjj xjF xjY', 'hebrew both' => 'H:i, xjj xjF xjY', @@ -374,8 +374,7 @@ $messages = array( 'tog-editsection' => 'Бөлімдерді [өңдеу] сілтемесімен өңдеуін қос', 'tog-editsectiononrightclick' => 'Бөлім тақырыбын оң нұқумен өңдеуін қос (JavaScript)', 'tog-showtoc' => 'Мазмұнын көрсет (3-тен арта бөлімі барыларға)', -'tog-rememberpassword' => 'Кіргенімді осы компьютерде ұмытпа', -'tog-editwidth' => 'Кірістіру орны толық енімен', +'tog-rememberpassword' => 'Кіргенімді осы компьютерде ұмытпа (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Мен бастаған беттерді бақылау тізіміме үсте', 'tog-watchdefault' => 'Мен өңдеген беттерді бақылау тізіміме үсте', 'tog-watchmoves' => 'Мен жылжытқан беттерді бақылау тізіміме үсте', @@ -506,30 +505,19 @@ $messages = array( 'faqpage' => 'Project:Жиі қойылған сауалдар', # Vector skin -'vector-action-addsection' => 'Тақырып қосу', -'vector-action-delete' => 'Жою', -'vector-action-move' => 'Жылжыту', -'vector-action-protect' => 'Қорғау', -'vector-action-undelete' => 'Жоймау', -'vector-action-unprotect' => 'Қорғамау', -'vector-namespace-category' => 'Санат', -'vector-namespace-help' => 'Анықтама', -'vector-namespace-image' => 'Файл', -'vector-namespace-main' => 'Бет', -'vector-namespace-media' => 'Таспа беті', -'vector-namespace-mediawiki' => 'Хабар', -'vector-namespace-project' => 'Жоба беті', -'vector-namespace-special' => 'Арнайы бет', -'vector-namespace-talk' => 'Талқылау', -'vector-namespace-template' => 'Үлгі', -'vector-namespace-user' => 'Жеке бет', -'vector-view-create' => 'Бастау', -'vector-view-edit' => 'Өңдеу', -'vector-view-history' => 'Тарихы', -'vector-view-view' => 'Оқу', -'vector-view-viewsource' => 'Қайнар көзін қарау', -'actions' => 'Әрекеттер', -'namespaces' => 'Есім аялары', +'vector-action-addsection' => 'Тақырып қосу', +'vector-action-delete' => 'Жою', +'vector-action-move' => 'Жылжыту', +'vector-action-protect' => 'Қорғау', +'vector-action-undelete' => 'Жоймау', +'vector-action-unprotect' => 'Қорғамау', +'vector-view-create' => 'Бастау', +'vector-view-edit' => 'Өңдеу', +'vector-view-history' => 'Тарихы', +'vector-view-view' => 'Оқу', +'vector-view-viewsource' => 'Қайнар көзін қарау', +'actions' => 'Әрекеттер', +'namespaces' => 'Есім аялары', 'errorpagetitle' => 'Қателік', 'returnto' => '$1 дегенге қайта келу.', @@ -743,7 +731,7 @@ $2', 'yourname' => 'Қатысушы атыңыз:', 'yourpassword' => 'Құпия сөзіңіз:', 'yourpasswordagain' => 'Құпия сөзді қайталаңыз:', -'remembermypassword' => 'Менің кіргенімді бұл компьютерде ұмытпа', +'remembermypassword' => 'Менің кіргенімді бұл компьютерде ұмытпа (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Желі үйшігіңіз:', 'externaldberror' => 'Осы арада не шеттік растау дерекқорында қате болды, немесе шеттік тіркелгіңізді жаңалау рұқсаты жоқ.', 'login' => 'Кіру', @@ -924,7 +912,7 @@ IP мекенжайыңыз бұл беттің түзету тарихында 'usercsspreview' => "'''Мынау CSS мәтінін тек қарап шығу екенін ұмытпаңыз, ол әлі сақталған жоқ!'''", 'userjspreview' => "'''Мынау JavaScript қатысушы бағдарламасын тексеру/қарап шығу екенін ұмытпаңыз, ол әлі сақталған жоқ!'''", 'userinvalidcssjstitle' => "'''Құлақтандыру:''' Осы арада «$1» деген еш мәнер жоқ. -Қатысушының .css және .js файл атауы кіші әріпппен жазылу тиісті екенін ұмытпаңыз, мысалға {{ns:user}}:Foo/monobook.css дегенді {{ns:user}}:Foo/Monobook.css дегенмен салыстырып қараңыз.", +Қатысушының .css және .js файл атауы кіші әріпппен жазылу тиісті екенін ұмытпаңыз, мысалға {{ns:user}}:Foo/vector.css дегенді {{ns:user}}:Foo/Vector.css дегенмен салыстырып қараңыз.", 'updated' => '(Жаңартылған)', 'note' => "'''Аңғартпа:'''", 'previewnote' => "'''Мынау тек қарап шығу екенін ұмытпаңыз; @@ -964,9 +952,6 @@ IP мекенжайыңыз бұл беттің түзету тарихында Егер жазуыңыздың еркін өңделуін қаламасаңыз, мында жарияламауыңыз жөн.
    Тағы да, бұл мағлұмат өзіңіз жазғаныңызға, не қоғам қазынасынан немесе сондай ашық қорлардан көшірілгеніне бізге уәде бересіз (көбірек ақпарат үшін $1 қужатын қараңыз). '''АУТОРЛЫҚ ҚҰҚЫҚПЕН ҚОРҒАУЛЫ МАҒЛҰМАТТЫ РҰҚСАТСЫЗ ЖАРИЯЛАМАҢЫЗ!'''", -'longpagewarning' => "'''ҚҰЛАҚТАНДЫРУ: Бұл беттің мөлшері — $1 kB; -кейбір шолғыштарда бет мөлшері 32 kB жетсе не оны асса өңдеу күрделі болуы мүмкін. -Бетті бірнеше кішкін бөлімдерге бөліп көріңіз.'''", 'longpageerror' => "'''ҚАТЕЛІК: Жөнелтпек мәтініңіздін мөлшері — $1 KB, ең көбі $2 KB рұқсат етілген мөлшерінен асқан. Бұл сақтай алынбайды.'''", 'readonlywarning' => "'''ҚҰЛАҚТАНДЫРУ: Дерекқор баптау үшін құлыпталған, сондықтан дәл қазір өңдемеңізді сақтай алмайсыз. @@ -1360,11 +1345,7 @@ $3 келтірілген себебі: ''$2''", 'recentchanges-legend' => 'Жуықтағы өзгерістер баптаулары', 'recentchangestext' => 'Бұл бетте осы уикидегі болған жуықтағы өзгерістер байқалады.', 'recentchanges-feed-description' => 'Бұл арнаменен уикидегі ең соңғы өзгерістер қадағаланады.', -'recentchanges-label-legend' => 'Шартты белгілер: $1', -'recentchanges-legend-newpage' => '$1 - жаңа бет', -'recentchanges-legend-minor' => '$1 - шағын өңдеме', 'recentchanges-label-minor' => 'Бұл шағын өңдеме', -'recentchanges-legend-bot' => '$1 - бот өңдемесі', 'rcnote' => "$3 кезіне дейін — төменде соңғы {{PLURAL:$2|күндегі|'''$2''' күндегі}}, соңғы '''$1''' өзгеріс көрсетіледі.", 'rcnotefrom' => "'''$2''' кезінен бері — төменде '''$1''' жеткенше дейін өзгерістер көрсетіледі.", 'rclistfrom' => '$1 кезінен бері — жаңа өзгерістерді көрсет.', @@ -1461,7 +1442,6 @@ $3 келтірілген себебі: ''$2''", 'fileexists-shared-forbidden' => 'Осылай аталған файл ортақ қоймада алдақашан бар; кері қайтыңыз да, осы файлды жаңа атымен қотарып беріңіз. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Бұл файл келесі {{PLURAL:$1|файлдың|файлдарының}} телнұсқасы:', -'successfulupload' => 'Сәтті қотарып берілді', 'uploadwarning' => 'Қотарып беру жөнінде құлақтандыру', 'savefile' => 'Файлды сақтау', 'uploadedimage' => '«[[$1]]» файлын қотарып берді', @@ -1482,6 +1462,7 @@ $3 келтірілген себебі: ''$2''", Қолайлы болуы үшін бұл файлдың жою журналы келтірілген:", 'filename-bad-prefix' => "Қотарып бермек файлыңыздың атауы '''«$1» ''' деп басталады, мынадай сипаттаусыз атауды әдетте сандық камералар өздіктік береді. Файлыңызға сипаттылау атауды таңдаңыз.", +'upload-success-subj' => 'Сәтті қотарып берілді', 'upload-proto-error' => 'Бұрыс хаттама', 'upload-proto-error-text' => 'Шеттен қотарып беру үшін URL жайлары http:// немесе ftp:// дегендерден басталу жөн.', @@ -1777,7 +1758,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'Бақылау тізімі', 'mywatchlist' => 'Бақылауым', -'watchlistfor' => "('''$1''' бақылаулары)", 'nowatchlist' => 'Бақылау тізіміңізде еш дана жоқ', 'watchlistanontext' => 'Бақылау тізіміңіздегі даналарды қарау, не өңдеу үшін $1 керек.', 'watchnologin' => 'Кірмегенсіз', @@ -1893,7 +1873,9 @@ $NEWPAGE 'revertpage' => '[[{{#special:Contributions}}/$2|$2]] ([[{{ns:user_talk}}:$2|талқылауы]]) өңдемелерінен [[{{ns:user}}:$1|$1]] соңғы нұсқасына қайтарды', 'rollback-success' => '$1 өңдемелерінен қайтарған; $2 соңғы нұсқасына өзгертті.', -'sessionfailure' => 'Кіру сессиясында шатақ болған сияқты; + +# Edit tokens +'sessionfailure' => 'Кіру сессиясында шатақ болған сияқты; сессияға шабуылдаудардан қорғану үшін, осы әрекет тоқтатылды. «Артқа» дегенді басыңыз, және бетті қайта жүктеңіз де, қайта байқап көріңіз.', @@ -2076,7 +2058,6 @@ $1', 'ipb-edit-dropdown' => 'Бұғаттау себептерін өңдеу', 'ipb-unblock-addr' => '$1 дегенді бұғаттамау', 'ipb-unblock' => 'Қатысушы атын немесе IP мекенжайын бұғаттамау', -'ipb-blocklist-addr' => '$1 үшін бар бұғаттауларды қарау', 'ipb-blocklist' => 'Бар бұғаттауларды қарау', 'unblockip' => 'Қатысушыны бұғаттамау', 'unblockiptext' => 'Төмендегі пішінді алдындағы IP мекенжайымен не атымен бұғатталған қатысушыға жазу қатынауын қалпына келтіріуі үшін қолданыңыз.', @@ -2469,9 +2450,9 @@ $1', 'widthheight' => '$1 × $2', 'widthheightpage' => '$1 × $2, $3 бет', 'file-info' => 'Файл мөлшері: $1, MIME түрі: $2', -'file-info-size' => '($1 × $2 нүкте, файл мөлшері: $3, MIME түрі: $4)', +'file-info-size' => '$1 × $2 нүкте, файл мөлшері: $3, MIME түрі: $4', 'file-nohires' => 'Жоғары ажыратылымдығы жетімсіз.', -'svg-long-desc' => '(SVG файлы, кесімді $1 × $2 нүкте, файл мөлшері: $3)', +'svg-long-desc' => 'SVG файлы, кесімді $1 × $2 нүкте, файл мөлшері: $3', 'show-big-image' => 'Жоғары ажыратылымды', 'show-big-image-thumb' => 'Қарап шығу мөлшері: $1 × $2 нүкте', diff --git a/languages/messages/MessagesKk_latn.php b/languages/messages/MessagesKk_latn.php index 92d7ea00..e45b4473 100644 --- a/languages/messages/MessagesKk_latn.php +++ b/languages/messages/MessagesKk_latn.php @@ -88,7 +88,7 @@ $namespaceAliases = array( 'ارنايى' => NS_SPECIAL, 'تالقىلاۋ' => NS_TALK, 'قاتىسۋشى' => NS_USER, - 'قاتىسۋشى_تالقىلاۋى'=> NS_USER_TALK, + 'قاتىسۋشى_تالقىلاۋى' => NS_USER_TALK, '$1_تالقىلاۋى' => NS_PROJECT_TALK, 'سۋرەت' => NS_FILE, 'سۋرەت_تالقىلاۋى' => NS_FILE_TALK, @@ -141,9 +141,9 @@ $dateFormats = array( 'yyyy-mm-dd both' => 'xnH:xni:xns, xnY-xnm-xnd', 'persian time' => 'H:i', - 'persian date' => 'xij xiF xiY', + 'persian date' => 'xij xiF xiY', 'persian both' => 'xij xiF xiY, H:i', - + 'hebrew time' => 'H:i', 'hebrew date' => 'xjj xjF xjY', 'hebrew both' => 'H:i, xjj xjF xjY', @@ -377,8 +377,7 @@ $messages = array( 'tog-editsection' => 'Bölimderdi [öñdew] siltemesimen öñdewin qos', 'tog-editsectiononrightclick' => 'Bölim taqırıbın oñ nuqwmen öñdewin qos (JavaScript)', 'tog-showtoc' => 'Mazmunın körset (3-ten arta bölimi barılarğa)', -'tog-rememberpassword' => 'Kirgenimdi osı komp′ywterde umıtpa', -'tog-editwidth' => 'Kiristirw ornı tolıq enimen', +'tog-rememberpassword' => 'Kirgenimdi osı komp′ywterde umıtpa (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Men bastağan betterdi baqılaw tizimime üste', 'tog-watchdefault' => 'Men öñdegen betterdi baqılaw tizimime üste', 'tog-watchmoves' => 'Men jıljıtqan betterdi baqılaw tizimime üste', @@ -718,7 +717,7 @@ Jaña tirkelgiñiz jasaldı. 'yourname' => 'Qatıswşı atıñız:', 'yourpassword' => 'Qupïya söziñiz:', 'yourpasswordagain' => 'Qupïya sözdi qaýtalañız:', -'remembermypassword' => 'Meniñ kirgenimdi bul komp′ywterde umıtpa', +'remembermypassword' => 'Meniñ kirgenimdi bul komp′ywterde umıtpa (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Jeli üýşigiñiz:', 'externaldberror' => 'Osı arada ne şettik rastaw derekqorında qate boldı, nemese şettik tirkelgiñizdi jañalaw ruqsatı joq.', 'login' => 'Kirw', @@ -898,7 +897,7 @@ Eger siz tirkelgisiz qatıswşı bolsañız jäne sizge qatıssız mändemeler j 'usercsspreview' => "'''Mınaw CSS mätinin tek qarap şığw ekenin umıtpañız, ol äli saqtalğan joq!'''", 'userjspreview' => "'''Mınaw JavaScript qatıswşı bağdarlamasın tekserw/qarap şığw ekenin umıtpañız, ol äli saqtalğan joq!'''", 'userinvalidcssjstitle' => "'''Qulaqtandırw:''' Osı arada «$1» degen eş mäner joq. -Qatıswşınıñ .css jäne .js faýl atawı kişi äripppen jazılw tïisti ekenin umıtpañız, mısalğa {{ns:user}}:Foo/monobook.css degendi {{ns:user}}:Foo/Monobook.css degenmen salıstırıp qarañız.", +Qatıswşınıñ .css jäne .js faýl atawı kişi äripppen jazılw tïisti ekenin umıtpañız, mısalğa {{ns:user}}:Foo/vector.css degendi {{ns:user}}:Foo/Vector.css degenmen salıstırıp qarañız.", 'updated' => '(Jañartılğan)', 'note' => "'''Añğartpa:'''", 'previewnote' => "'''Mınaw tek qarap şığw ekenin umıtpañız; @@ -938,9 +937,6 @@ Tağı da, bul mağlumat öziñiz jazğanıñızğa, ne qoğam qazınasınan nem Eger jazwıñızdıñ erkin öñdelwin qalamasañız, mında jarïyalamawıñız jön.
    Tağı da, bul mağlumat öziñiz jazğanıñızğa, ne qoğam qazınasınan nemese sondaý aşıq qorlardan köşirilgenine bizge wäde beresiz (köbirek aqparat üşin $1 qwjatın qarañız). '''AWTORLIQ QUQIQPEN QORĞAWLI MAĞLUMATTI RUQSATSIZ JARÏYALAMAÑIZ!'''", -'longpagewarning' => "'''QULAQTANDIRW: Bul bettiñ mölşeri — $1 kB; -keýbir şolğıştarda bet mölşeri 32 kB jetse ne onı assa öñdew kürdeli bolwı mümkin. -Betti birneşe kişkin bölimderge bölip köriñiz.'''", 'longpageerror' => "'''QATELİK: Jöneltpek mätiniñizdin mölşeri — $1 KB, eñ köbi $2 KB ruqsat etilgen mölşerinen asqan. Bul saqtaý alınbaýdı.'''", 'readonlywarning' => "'''QULAQTANDIRW: Derekqor baptaw üşin qulıptalğan, sondıqtan däl qazir öñdemeñizdi saqtaý almaýsız. @@ -1426,7 +1422,6 @@ keri qaýtıñız da, osı faýldı jaña atımen qotarıp beriñiz. [[File:$1|t 'fileexists-shared-forbidden' => 'Osılaý atalğan faýl ortaq qoýmada aldaqaşan bar; keri qaýtıñız da, osı faýldı jaña atımen qotarıp beriñiz. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Bul faýl kelesi {{PLURAL:$1|faýldıñ|faýldarınıñ}} telnusqası:', -'successfulupload' => 'Sätti qotarıp berildi', 'uploadwarning' => 'Qotarıp berw jöninde qulaqtandırw', 'savefile' => 'Faýldı saqtaw', 'uploadedimage' => '«[[$1]]» faýlın qotarıp berdi', @@ -1447,6 +1442,7 @@ Bul faýldı qotarıp berwin jalğastırw üşin bunıñ ıñğaýlığın tekse Qolaýlı bolwı üşin bul faýldıñ joyw jwrnalı keltirilgen:", 'filename-bad-prefix' => "Qotarıp bermek faýlıñızdıñ atawı '''«$1» ''' dep bastaladı, mınadaý sïpattawsız atawdı ädette sandıq kameralar özdiktik beredi. Faýlıñızğa sïpattılaw atawdı tañdañız.", +'upload-success-subj' => 'Sätti qotarıp berildi', 'upload-proto-error' => 'Burıs xattama', 'upload-proto-error-text' => 'Şetten qotarıp berw üşin URL jaýları http:// nemese ftp:// degenderden bastalw jön.', @@ -1742,7 +1738,6 @@ Qatıswşı baptawıñızda engizgen e-poşta mekenjaýıñız «Kimnen» degen # Watchlist 'watchlist' => 'Baqılaw tizimi', 'mywatchlist' => 'Baqılawım', -'watchlistfor' => "('''$1''' baqılawları)", 'nowatchlist' => 'Baqılaw tizimiñizde eş dana joq', 'watchlistanontext' => 'Baqılaw tizimiñizdegi danalardı qaraw, ne öñdew üşin $1 kerek.', 'watchnologin' => 'Kirmegensiz', @@ -1858,7 +1853,9 @@ soñğı öñdemesin [[{{ns:user}}:$3|$3]] ([[{{ns:user_talk}}:$3|talqılawı]]) 'revertpage' => '[[{{#special:Contributions}}/$2|$2]] ([[{{ns:user_talk}}:$2|talqılawı]]) öñdemelerinen [[{{ns:user}}:$1|$1]] soñğı nusqasına qaýtardı', 'rollback-success' => '$1 öñdemelerinen qaýtarğan; $2 soñğı nusqasına özgertti.', -'sessionfailure' => 'Kirw sessïyasında şataq bolğan sïyaqtı; + +# Edit tokens +'sessionfailure' => 'Kirw sessïyasında şataq bolğan sïyaqtı; sessïyağa şabwıldawdardan qorğanw üşin, osı äreket toqtatıldı. «Artqa» degendi basıñız, jäne betti qaýta jükteñiz de, qaýta baýqap köriñiz.', @@ -2041,7 +2038,6 @@ Buğattardı şolıp şığw üşin [[{{#special:Ipblocklist}}|IP buğattaw tizi 'ipb-edit-dropdown' => 'Buğattaw sebepterin öñdew', 'ipb-unblock-addr' => '$1 degendi buğattamaw', 'ipb-unblock' => 'Qatıswşı atın nemese IP mekenjaýın buğattamaw', -'ipb-blocklist-addr' => '$1 üşin bar buğattawlardı qaraw', 'ipb-blocklist' => 'Bar buğattawlardı qaraw', 'unblockip' => 'Qatıswşını buğattamaw', 'unblockiptext' => 'Tömendegi pişindi aldındağı IP mekenjaýımen ne atımen buğattalğan qatıswşığa jazw qatınawın qalpına keltiriwi üşin qoldanıñız.', @@ -2433,9 +2429,9 @@ $1', 'widthheight' => '$1 × $2', 'widthheightpage' => '$1 × $2, $3 bet', 'file-info' => 'Faýl mölşeri: $1, MIME türi: $2', -'file-info-size' => '($1 × $2 nükte, faýl mölşeri: $3, MIME türi: $4)', +'file-info-size' => '$1 × $2 nükte, faýl mölşeri: $3, MIME türi: $4', 'file-nohires' => 'Joğarı ajıratılımdığı jetimsiz.', -'svg-long-desc' => '(SVG faýlı, kesimdi $1 × $2 nükte, faýl mölşeri: $3)', +'svg-long-desc' => 'SVG faýlı, kesimdi $1 × $2 nükte, faýl mölşeri: $3', 'show-big-image' => 'Joğarı ajıratılımdı', 'show-big-image-thumb' => 'Qarap şığw mölşeri: $1 × $2 nükte', diff --git a/languages/messages/MessagesKl.php b/languages/messages/MessagesKl.php index 82b6e775..f8870723 100644 --- a/languages/messages/MessagesKl.php +++ b/languages/messages/MessagesKl.php @@ -19,18 +19,18 @@ $namespaceNames = array( NS_SPECIAL => 'Immikkut', NS_TALK => 'Oqallinneq', NS_USER => 'Atuisoq', - NS_USER_TALK => 'Atuisup oqalliffia', - NS_PROJECT_TALK => '$1-p oqalliffia', + NS_USER_TALK => 'Atuisup_oqalliffia', + NS_PROJECT_TALK => '$1-p_oqalliffia', NS_FILE => 'Fiileq', - NS_FILE_TALK => 'Fiilip oqalliffia', + NS_FILE_TALK => 'Fiilip_oqalliffia', NS_MEDIAWIKI => 'MediaWiki', - NS_MEDIAWIKI_TALK => 'Mediawikip oqalliffia', + NS_MEDIAWIKI_TALK => 'Mediawikip_oqalliffia', NS_TEMPLATE => 'Ilisserut', - NS_TEMPLATE_TALK => 'Ilisserummi oqallinneq', + NS_TEMPLATE_TALK => 'Ilisserummi_oqallinneq', NS_HELP => 'Ikiuutit', - NS_HELP_TALK => 'Ikiuutini oqallinneq', - NS_CATEGORY => 'Sumut atassuseq', - NS_CATEGORY_TALK => 'Sumut atassusermi oqallinneq', + NS_HELP_TALK => 'Ikiuutini_oqallinneq', + NS_CATEGORY => 'Sumut_atassuseq', + NS_CATEGORY_TALK => 'Sumut_atassusermi_oqallinneq', ); $namespaceAliases = array( @@ -220,7 +220,7 @@ $messages = array( 'yourname' => 'Atuisutut atit', 'yourpassword' => 'Isissutissaq:', 'yourpasswordagain' => 'Isissutissaq allaqqiguk', -'remembermypassword' => 'Iserfiga tullissaanut eqqaamalara', +'remembermypassword' => 'Iserfiga tullissaanut eqqaamalara (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'Iserit', 'nav-login-createaccount' => 'Konto-mik pilersitsigit imalt. iserit', 'loginprompt' => 'Pisariaqassaaq cookies-itit atussallugit {{SITENAME}} -mut isissaguit.', @@ -338,31 +338,27 @@ Peersinermut nuutsinermullu nalunaarsuutit ataani takuneqarsinnaapput.', 'group-sysop' => 'Administratorit', # Recent changes -'recentchanges' => 'Allannguutit kingulliit', -'recentchanges-legend' => 'Inissisimaffiit allannguutini kingullerni', -'recentchangestext' => "Uani quppernermi '''{{SITENAME}}'''-mi allannguutit kingulliit malinnaavigisinnaavatit.", -'recentchanges-label-legend' => 'Nassuiaatit: $1.', -'recentchanges-legend-newpage' => '$1 - qupperneq nutaaq', -'recentchanges-label-newpage' => 'Tassaavoq qupperneq nutaaq', -'recentchanges-legend-minor' => '$1 - allannguut annikitsoq', -'recentchanges-label-minor' => 'Tassaavoq allannguut annikitsoq', -'recentchanges-legend-bot' => '$1 - bot-ip allannguutaa', -'recentchanges-label-bot' => 'Bot-ip allannguutaa', -'rclistfrom' => 'Allannguutit kingulliit takukkit $1 -nngaanniit', -'rcshowhideminor' => '$1 allannguutit annikitsut', -'rcshowhidebots' => '$1 robottit', -'rcshowhideliu' => '$1 atuisut nalunaarsimasut', -'rcshowhideanons' => '$1 atuisut anonymejusut', -'rcshowhidepatr' => '$1 allannguutit misissorneqarsimasut', -'rcshowhidemine' => '$1 nammineq tapit', -'rclinks' => 'Takutikkit $1 -it allannguutit kingulliit ulluni kingullerni $2 -ni
    $3', -'diff' => 'assigiinng', -'hist' => 'oqalutt', -'hide' => 'Assequt', -'show' => 'Saqqummiuk', -'minoreditletter' => 'm', -'newpageletter' => 'N', -'boteditletter' => 'b', +'recentchanges' => 'Allannguutit kingulliit', +'recentchanges-legend' => 'Inissisimaffiit allannguutini kingullerni', +'recentchangestext' => "Uani quppernermi '''{{SITENAME}}'''-mi allannguutit kingulliit malinnaavigisinnaavatit.", +'recentchanges-label-newpage' => 'Tassaavoq qupperneq nutaaq', +'recentchanges-label-minor' => 'Tassaavoq allannguut annikitsoq', +'recentchanges-label-bot' => 'Bot-ip allannguutaa', +'rclistfrom' => 'Allannguutit kingulliit takukkit $1 -nngaanniit', +'rcshowhideminor' => '$1 allannguutit annikitsut', +'rcshowhidebots' => '$1 robottit', +'rcshowhideliu' => '$1 atuisut nalunaarsimasut', +'rcshowhideanons' => '$1 atuisut anonymejusut', +'rcshowhidepatr' => '$1 allannguutit misissorneqarsimasut', +'rcshowhidemine' => '$1 nammineq tapit', +'rclinks' => 'Takutikkit $1 -it allannguutit kingulliit ulluni kingullerni $2 -ni
    $3', +'diff' => 'assigiinng', +'hist' => 'oqalutt', +'hide' => 'Assequt', +'show' => 'Saqqummiuk', +'minoreditletter' => 'm', +'newpageletter' => 'N', +'boteditletter' => 'b', # Recent changes linked 'recentchangeslinked' => 'Allannguutit naleqqiussat', diff --git a/languages/messages/MessagesKm.php b/languages/messages/MessagesKm.php index 1b97c7c9..ef6f90a7 100644 --- a/languages/messages/MessagesKm.php +++ b/languages/messages/MessagesKm.php @@ -11,6 +11,7 @@ * @author Chhorran * @author Kiensvay * @author Lovekhmer + * @author Sovichet * @author T-Rithy * @author Thearith * @author Ævar Arnfjörð Bjarmason @@ -34,8 +35,8 @@ $namespaceNames = array( NS_TEMPLATE_TALK => 'ការពិភាក្សាអំពីទំព័រគំរូ', NS_HELP => 'ជំនួយ', NS_HELP_TALK => 'ការពិភាក្សាអំពីជំនួយ', - NS_CATEGORY => 'ចំនាត់ថ្នាក់ក្រុម', - NS_CATEGORY_TALK => 'ការពិភាក្សាអំពីចំនាត់ថ្នាក់ក្រុម', + NS_CATEGORY => 'ចំណាត់ថ្នាក់ក្រុម', + NS_CATEGORY_TALK => 'ការពិភាក្សាអំពីចំណាត់ថ្នាក់ក្រុម', ); $namespaceAliases = array( @@ -54,6 +55,8 @@ $namespaceAliases = array( 'ចំណាត់ក្រុម' => NS_CATEGORY, 'ការពិភាក្សាអំពីចំណាត់ថ្នាក់ក្រុម' => NS_CATEGORY_TALK, 'ចំណាត់ក្រុម-ពិភាក្សា' => NS_CATEGORY_TALK, + 'ចំនាត់ថ្នាក់ក្រុម' => NS_CATEGORY, + 'ការពិភាក្សាអំពីចំនាត់ថ្នាក់ក្រុម' => NS_CATEGORY_TALK, ); @@ -79,9 +82,9 @@ $datePreferences = array( 'km', 'ISO 8601', ); - + $defaultDateFormat = 'km'; - + $dateFormats = array( 'km time' => 'ម៉ោងH:i', 'km date' => 'l ទីd F ឆ្នាំY', @@ -180,7 +183,7 @@ $specialPageAliases = array( ); $magicWords = array( - 'redirect' => array( '0', '#បញ្ជូនបន្ត', '#ប្ដូរទីតាំងទៅ #ប្តូរទីតាំងទៅ', '#ប្ដូរទីតាំង', '#ប្តូរទីតាំង', '#ប្ដូរចំណងជើង', '#REDIRECT' ), + 'redirect' => array( '0', '#បញ្ជូនបន្ត', '#ប្ដូរទីតាំងទៅ', '#ប្តូរទីតាំងទៅ', '#ប្ដូរទីតាំង', '#ប្តូរទីតាំង', '#ប្ដូរចំណងជើង', '#REDIRECT' ), 'notoc' => array( '0', '__លាក់មាតិកា__', '__លាក់បញ្ជីអត្ថបទ__', '__គ្មានមាតិកា__', '__គ្មានបញ្ជីអត្ថបទ__', '__កុំបង្ហាញមាតិកា__', '__NOTOC__' ), 'nogallery' => array( '0', '__លាក់វិចិត្រសាល__', '__NOGALLERY__' ), 'forcetoc' => array( '0', '__បង្ខំមាតិកា__', '__បង្ខំបញ្ជីអត្ថបទ__', '__បង្ខំអោយបង្ហាញមាតិកា__', '__FORCETOC__' ), @@ -268,8 +271,7 @@ $messages = array( 'tog-editsection' => 'អនុញ្ញាតកែប្រែ​ផ្នែកណាមួយ​តាម​តំណភ្ជាប់[កែប្រែ]', 'tog-editsectiononrightclick' => 'អនុញ្ញាត​កែប្រែ​​ផ្នែកណាមួយ ដោយ​ចុចស្តាំកណ្តុរ​លើ​ចំណងជើង​របស់វា (តម្រូវអោយមាន JavaScript)', 'tog-showtoc' => 'បង្ហាញ​តារាងមាតិកា (ចំពោះទំព័រ​ដែលមាន​ចំណងជើងរង​លើសពី៣)', -'tog-rememberpassword' => 'ចងចាំ​ការកត់ឈ្មោះចូលរបស់ខ្ញុំ​លើកុំព្យូទ័រនេះ', -'tog-editwidth' => 'ពង្រីក​ប្រអប់​កែប្រែ​ឱ្យ​បង្ហាញ​ពេញ​អេក្រង់', +'tog-rememberpassword' => 'ចងចាំ​ការកត់ឈ្មោះចូលរបស់ខ្ញុំ​លើកុំព្យូទ័រនេះ (សំរាប់រយៈពេលយ៉ាងយូរ$1 {{PLURAL:$1|ថ្ងៃ|ថ្ងៃ}})', 'tog-watchcreations' => 'បន្ថែម​ទំព័រ​ដែលខ្ញុំបង្កើត​ទៅ​បញ្ជីតាមដាន​របស់ខ្ញុំ', 'tog-watchdefault' => 'បន្ថែម​ទំព័រ​ដែលខ្ញុំកែប្រែ​ទៅ​បញ្ជីតាមដាន​របស់ខ្ញុំ', 'tog-watchmoves' => 'បន្ថែម​ទំព័រ​ដែលខ្ញុំប្តូរទីតាំង​ទៅ​បញ្ជីតាមដាន​របស់ខ្ញុំ', @@ -414,31 +416,21 @@ $messages = array( 'faqpage' => 'Project:សំណួរដែលសួរញឹកញាប់', # Vector skin -'vector-action-addsection' => 'បន្ថែម​ប្រធានបទ​', -'vector-action-delete' => 'លុបចោល', -'vector-action-move' => 'ប្តូរទីតាំង', -'vector-action-protect' => 'ការពារ', -'vector-action-undelete' => 'ឈប់លុបចោល', -'vector-action-unprotect' => 'ឈប់ការពារ', -'vector-namespace-category' => 'ចំណាត់ថ្នាក់ក្រុម', -'vector-namespace-help' => 'ទំព័រជំនួយ', -'vector-namespace-image' => 'ឯកសារ', -'vector-namespace-main' => 'ទំព័រ', -'vector-namespace-media' => 'ទំព័រមេឌា', -'vector-namespace-mediawiki' => 'សារ', -'vector-namespace-project' => 'ទំព័រគម្រោង', -'vector-namespace-special' => 'ទំព័រពិសេស', -'vector-namespace-talk' => 'ការពិភាក្សា', -'vector-namespace-template' => 'គំរូ​', -'vector-namespace-user' => 'ទំព័រ​អ្នកប្រើប្រាស់​', -'vector-view-create' => 'បង្កើត​', -'vector-view-edit' => 'កែប្រែ​', -'vector-view-history' => 'មើល​ប្រវត្តិ​', -'vector-view-view' => 'អាន', -'vector-view-viewsource' => 'មើល​កូដ', -'actions' => 'សកម្មភាព​', -'namespaces' => 'ប្រភេទ', -'variants' => 'អថេរ', +'vector-action-addsection' => 'បន្ថែម​ប្រធានបទ​', +'vector-action-delete' => 'លុបចោល', +'vector-action-move' => 'ប្តូរទីតាំង', +'vector-action-protect' => 'ការពារ', +'vector-action-undelete' => 'ឈប់លុបចោល', +'vector-action-unprotect' => 'ឈប់ការពារ', +'vector-simplesearch-preference' => 'ប្រើអនុសាសន៍ពាក្យចង់ស្វែងរក (សំរាប់តែសំបក វ៉ិចទ័រប៉ុណ្ណោះ)', +'vector-view-create' => 'បង្កើត​', +'vector-view-edit' => 'កែប្រែ​', +'vector-view-history' => 'មើល​ប្រវត្តិ​', +'vector-view-view' => 'អាន', +'vector-view-viewsource' => 'មើល​កូដ', +'actions' => 'សកម្មភាព​', +'namespaces' => 'ប្រភេទ', +'variants' => 'អថេរ', 'errorpagetitle' => 'មានបញ្ហា', 'returnto' => 'ត្រឡប់ទៅ $1 វិញ ។', @@ -501,6 +493,7 @@ $messages = array( សូមរង់ចាំមួយភ្លែតសិនរួចសាកល្បងចូលមកកាន់ទំព័រនេះឡើងវិញ។ $1', +'pool-errorunknown' => 'កំហុសមិនស្គាល់', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'អំពី{{SITENAME}}', @@ -661,7 +654,8 @@ $2', 'yourname' => 'អត្តនាម៖', 'yourpassword' => 'ពាក្យសំងាត់៖', 'yourpasswordagain' => 'វាយពាក្យសំងាត់ម្តងទៀត៖', -'remembermypassword' => 'ចងចាំកំណត់ឈ្មោះចូលរបស់ខ្ញុំក្នុងកុំព្យូទ័រនេះ', +'remembermypassword' => 'ចងចាំកំណត់ឈ្មោះចូលរបស់ខ្ញុំក្នុងកុំព្យូទ័រនេះ (សំរាប់រយៈពេលយូរបំផុត $1 {{PLURAL:$1|ថ្ងៃ|ថ្ងៃ}})', +'securelogin-stick-https' => 'នៅភ្ជាប់ទៅ HTTPS ដដែលបន្ទាប់ពីចុះឈ្មោះចូលហើយក៏ដោយ', 'yourdomainname' => 'ដូម៉ែនរបស់អ្នក៖', 'externaldberror' => 'មាន​​បញ្ហាក្នុងការ​បញ្ជាក់​ផ្ទៀង​ផ្ទាត់​​មូលដ្ឋាន​ទិន្នន័យ​ ឬ​អ្នក​មិន​ត្រូវ​បាន​អនុញ្ញាត​ឲ្យ​បន្ទាន់​សម័យ​គណនី​ខាង​ក្រៅ​របស់​អ្នក​។​ ​', @@ -679,6 +673,7 @@ $2', 'gotaccount' => "បើលោកអ្នកមានគណនីសម្រាប់ប្រើហើយ សូម'''$1'''។", 'gotaccountlink' => 'កត់ឈ្មោះចូល', 'createaccountmail' => 'តាមរយៈអ៊ីមែល', +'createaccountreason' => 'មូលហេតុ៖', 'badretype' => 'ពាក្យសំងាត់ដែលអ្នកបានបញ្ចូលនោះ គឺមិនស៊ីគ្នាទេ។', 'userexists' => 'អត្តនាមដែលអ្នកបានវាយបញ្ចូលមានគេប្រើហើយ។ សូមជ្រើសរើសអត្តនាមផ្សេងពីនេះ។', @@ -715,6 +710,7 @@ $2', សូមព្យាយាម​ម្តងទៀត។', 'passwordtooshort' => 'ពាក្យសំងាត់ត្រូវ​មាន​យ៉ាងតិចណាស់​ {{PLURAL:$1|១ តួអក្សរ|$1តួអក្សរ}}។', 'password-name-match' => 'ពាក្យសំងាត់ត្រូវតែខុសគ្នាពីឈ្មោះរបស់អ្នក។', +'password-login-forbidden' => 'ហាមប្រាមមិនអោយប្រើអត្តនាមនិងពាក្យសំងាត់នេះ។', 'mailmypassword' => 'ផ្ញើអ៊ីមែលពាក្យសំងាត់ថ្មី', 'passwordremindertitle' => 'ពាក្យសំងាត់បណ្តោះអាសន្នថ្មីសម្រាប់{{SITENAME}}', 'passwordremindertext' => 'មានអ្នកណាម្នាក់ (ប្រហែលជាអ្នក, ពីអាសយដ្ឋាន IP $1) បានស្នើសុំពាក្យសំងាត់ថ្មីមួយពី {{SITENAME}} ($4)។ @@ -761,6 +757,9 @@ $2', សូមរងចាំមួយរយៈ មុនពេលសាកល្បងម្ដងទៀត។', 'loginlanguagelabel' => 'ភាសា៖ $1', +# E-mail sending +'php-mail-error-unknown' => 'កំហុសមិនស្គាល់នៅក្នុងអនុគមន៍ mail() របស់ PHP', + # Password reset dialog 'resetpass' => '​ប្តូរ​ពាក្យសំងាត់​', 'resetpass_announce' => 'អ្នកបានកត់ឈ្មោះចូលដោយ​អក្សរកូដអ៊ីមែល​បណ្តោះអាសន្ន​មួយ​។ @@ -815,12 +814,13 @@ $2', 'showlivepreview' => 'មើលជាមុនដោយផ្ទាល់', 'showdiff' => 'បង្ហាញ​បំលាស់ប្ដូរ', 'anoneditwarning' => "'''ប្រយ័ត្ន ៖''' អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ អាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។", +'anonpreviewwarning' => "''អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ ប្រសិនបើអ្នកធ្វើការរក្សាទុក នោះអាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។''", 'missingsummary' => "'''រំលឹក៖''' អ្នកមិនទាន់បានផ្ដល់ចំណារពន្យល់អំពីកំណែប្រែនេះទេ។ បើសិនជាអ្នកចុច '''រក្សាទុក''' ម្ដងទៀតនោះកំណែប្រែរបស់អ្នកនឹងត្រូវរក្សាទុកដោយគ្មានចំណារពន្យល់។", 'missingcommenttext' => 'សូមបញ្ចូលមួយវិចារនៅខាងក្រោម។', 'missingcommentheader' => "'''រំលឹក៖''' អ្នកមិនទាន់បានផ្ដល់ឱ្យនូវ ប្រធានបទ/ចំណងជើង របស់វិចារនេះទេ។ -បើសិនជាអ្នកចុច '''រក្សាទុក''' ម្ដងទៀតនោះកំណែប្រែរបស់អ្នកនឹងត្រូវរក្សាទុកដោយគ្មានវា។", +បើសិនជាអ្នកចុច \"{{int:savearticle}}\" ម្ដងទៀតនោះកំណែប្រែរបស់អ្នកនឹងត្រូវរក្សាទុកដោយគ្មានវា។", 'summary-preview' => 'ការមើលជាមុនរបស់ចំណារពន្យល់:', 'subject-preview' => 'ការមើលជាមុនរបស់ប្រធានបទ/ចំណងជើង:', 'blockedtitle' => 'អ្នកប្រើនេះត្រូវបានរាំងខ្ទប់ហើយ', @@ -907,7 +907,11 @@ $2', 'usercsspreview' => "'''កុំភ្លេចថា​អ្នកគ្រាន់តែ​កំពុងមើលជាមុនសន្លឹក CSS របស់អ្នក។ វាមិនទាន់​ត្រូវបានរក្សាទុកទេ!'''", 'userjspreview' => "'កុំភ្លេចថាអ្នកគ្រាន់តែកំពុង ធ្វើតេស្ត/មើលមុន ទំព័រអ្នកប្រើប្រាស់ JavaScript របស់អ្នក។ វាមិនទាន់ត្រូវបានរក្សាទុកទេ!'''", -'userinvalidcssjstitle' => "'''ប្រយ័ត្ន៖''' គ្មានសំបក \"\$1\"។ ចងចាំថា ទំព័រផ្ទាល់ខ្លួន .css និង .js ប្រើប្រាស់ ចំណងជើង ជាអក្សរតូច, ឧទាហរណ៍ {{ns:user}}:Foo/monobook.css ត្រឹមត្រូវ, រីឯ {{ns:user}}:Foo/Monobook.css មិនត្រឹមត្រូវ។", +'sitecsspreview' => '"កុំភ្លេចថាអ្នកកំពុងតែមើលមុន CSS នេះប៉ុណ្ណោះ។" +"វាមិនទាន់ត្រូវបានរក្សាទុកទេ!"', +'sitejspreview' => '"កុំភ្លេចថាអ្នកកំពុងតែមើលមុន កូដJavaScript នេះប៉ុណ្ណោះ។" +"វាមិនទាន់ត្រូវបានរក្សាទុកទេ!"', +'userinvalidcssjstitle' => "'''ប្រយ័ត្ន៖''' គ្មានសំបក \"\$1\"។ ចងចាំថា ទំព័រផ្ទាល់ខ្លួន .css និង .js ប្រើប្រាស់ ចំណងជើង ជាអក្សរតូច, ឧទាហរណ៍ {{ns:user}}:Foo/vector.css ត្រឹមត្រូវ, រីឯ {{ns:user}}:Foo/Vector.css មិនត្រឹមត្រូវ។", 'updated' => '(បានបន្ទាន់សម័យ)', 'note' => "'''ចំណាំ៖'''", 'previewnote' => "'''នេះគ្រាន់តែជា​ការបង្ហាញការមើលជាមុនប៉ុណ្ណោះ។ បំលាស់ប្ដូរ​មិនទាន់បាន​រក្សាទុកទេ!'''", @@ -947,9 +951,6 @@ $2', អ្នកត្រូវសន្យាថា ​អ្នកសរសេរវា​ដោយខ្លួនអ្នក ឬបានចម្លងវា​ពី​កម្មសិទ្ធិសាធារណៈឬពីប្រភពសេរី (សូមមើល $1សំរាប់ព័ត៌មានលំអិត)។ '''មិនត្រូវ​ដាក់ស្នើ​ការងារមានជាប់កម្មសិទ្ឋិបញ្ញាដោយគ្មានការអនុញ្ញាតទេ!'''", -'longpagewarning' => "'''ប្រយ័ត្ន ៖ ទំព័រនេះមានទំហំ $1 គីឡូបៃ។ ឧបករណ៍រាវរក(browser)ខ្លះអាចមានបញ្ហាក្នុងការកែប្រែទំព័រក្បែរឬធំជាង៣២គីឡូបៃ​។ - -សូមពិចារណាអំពីលទ្ឋភាពបំបែកទំព័រជាផ្នែកតូចៗ ។ '''", 'longpageerror' => "'''បញ្ហា៖ អត្ថបទ​ដែល​អ្នក​បានដាក់​ស្នើ​មានទំហំ $1 គីឡូបៃ ដែលធំជាង​ទំហំអតិបរមា $2 គីឡូបៃ។ អត្ថបទនេះ​មិនអាច​រក្សាទុកបានទេ។'''", 'readonlywarning' => "'''ប្រយ័ត្ន:មូលដ្ឋានទិន្នន័យត្រូវបានចាក់សោសម្រាប់ការរក្សាទុក ដូច្នេះអ្នកនឹងមិនអាចរក្សាទុករាល់កំណែប្រែរបស់អ្នកបានទេឥឡូវនេះ។ សូមអ្នកចម្លងអត្ថបទ រួចដាក់ទៅក្នុងឯកសារដែលជាអត្ថបទ ហើយបន្ទាប់មករក្សាវាទុកនៅពេលក្រោយ។''' @@ -1115,6 +1116,8 @@ $1", 'logdelete-failure' => "'''មិន​អាចកំណត់គំហើញនៃ​កំណត់​ហេតុ​​បាន​៖''' $1", 'revdel-restore' => 'ផ្លាស់ប្ដូរគំហើញ', +'revdel-restore-deleted' => 'កំណែដែលត្រូវបានលុប', +'revdel-restore-visible' => 'កំណែដែលអាលមើលឃើញ', 'pagehist' => 'ប្រវត្តិទំព័រ', 'deletedhist' => 'ប្រវត្តិដែលត្រូវបានលុប', 'revdelete-content' => 'ខ្លឹមសារ', @@ -1181,11 +1184,12 @@ $1", # Diffs 'history-title' => 'ប្រវត្តិកំណែប្រែនានានៃ "$1"', 'difference' => '(ប្រៀបធៀបកំណែនានា)', +'difference-multipage' => '(ភាពខុសគ្នារវាងទំព័រនានា)', 'lineno' => 'បន្ទាត់ទី$1៖', 'compareselectedversions' => 'ប្រៀបធៀប​កំណែដែលបាន​ជ្រើសយក', 'showhideselectedversions' => 'បង្ហាញ​/លាក់​កំណែប្រែ​ដែលបាន​ជ្រើសយក', 'editundo' => 'មិនធ្វើវិញ', -'diff-multi' => '({{PLURAL:$1|កំណែប្រែកម្រិតបង្គួរមួយ|កំណែប្រែកម្រិតបង្គួរចំនួន$1}}មិនត្រូវបានបង្ហាញ)', +'diff-multi' => '({{PLURAL:$1|កំណែប្រែកម្រិតបង្គួរមួយ|កំណែប្រែកម្រិតបង្គួរចំនួន $1}}មិនត្រូវបានបង្ហាញ)', # Search results 'searchresults' => 'លទ្ធផលស្វែងរក', @@ -1220,6 +1224,7 @@ $1", 'searchprofile-everything-tooltip' => 'ស្វែងរកក្នុងខ្លឹមសារទាំងអស់(រួមបញ្ចូលទាំងទំព័រពិភាក្សា)', 'searchprofile-advanced-tooltip' => 'ស្វែងរកក្នុងប្រភេទកំនត់ដោយអ្នកប្រើប្រាស់', 'search-result-size' => '$1({{PLURAL:$2|១ពាក្យ|$2ពាក្យ}})', +'search-result-category-size' => '{{PLURAL:$1|សមាជិកម្នាក់|សមាជិក$1នាក់}} ({{PLURAL:$2|ចំណាត់ថ្នាក់ក្រុមរង១|$2 ចំណាត់ថ្នាក់ក្រុមរង}}, {{PLURAL:$3|1 ឯកសារ|$3 ឯកសារ}})', 'search-result-score' => 'កម្រិតទាក់ទិន៖ $1%', 'search-redirect' => '(បញ្ជូនបន្ត $1)', 'search-section' => '(ផ្នែក $1)', @@ -1297,6 +1302,7 @@ $1", 'contextlines' => 'ចំនួនបន្ទាត់ក្នុងមួយលទ្ធផល៖', 'contextchars' => 'ចំនួនអក្សរក្នុងមួយជួរ៖', 'stub-threshold' => 'ទំហំអប្បបរមាសំរាប់ដាក់ជាទំរង់តំណភ្ជាប់ទៅទំព័រកំប៉ិចកំប៉ុក (គិតជាបៃ)៖', +'stub-threshold-disabled' => 'មិនប្រើ', 'recentchangesdays' => 'ចំនួនថ្ងៃបង្ហាញក្នុងទំព័របំលាស់ប្តូរថ្មីៗ៖', 'recentchangesdays-max' => '(អតិបរមា $1 {{PLURAL:$1|ថ្ងៃ|ថ្ងៃ}})', 'recentchangescount' => 'ចំនួន​កំណែប្រែ​ដែល​ត្រូវ​បង្ហាញ​តាមលំនាំដើម:', @@ -1327,6 +1333,7 @@ $1", 'prefs-files' => 'ឯកសារ', 'prefs-custom-css' => 'កែតំរូវ CSS', 'prefs-custom-js' => 'កែតំរូវ JS', +'prefs-common-css-js' => 'CSS/JavaScriptរួមសំរាប់សំបកទាំងអស់', 'prefs-reset-intro' => 'អ្នក​អាច​ប្រើ​ទំព័រ​នេះ​ដើម្បី​កំណត់​ឡើង​វិញ​នូវ​ចំណូល​ចិត្ត​របស់​អ្នក​ដូច​លំនាំ​ដើម​របស់​តំបន់​វិញ​។ សកម្មភាព​នេះ​មិន​អាច​ធ្វើ​ឡើង​វិញ​បាន​ទេ​។', 'prefs-emailconfirm-label' => 'បញ្ជាក់ទទួលស្គាល់អ៊ីមែល៖', @@ -1366,9 +1373,15 @@ $1", 'prefs-advancedrendering' => 'ជំរើសថ្នាក់ខ្ពស់', 'prefs-advancedsearchoptions' => 'ជំរើសថ្នាក់ខ្ពស់', 'prefs-advancedwatchlist' => 'ជំរើសថ្នាក់ខ្ពស់', -'prefs-display' => 'ជំរើសការបង្ហាញ', +'prefs-displayrc' => 'ជំរើសការបង្ហាញ', +'prefs-displaysearchoptions' => 'ជំរើសការបង្ហាញ', +'prefs-displaywatchlist' => 'ជំរើសការបង្ហាញ', 'prefs-diffs' => 'ភាពខុសគ្នា', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'អាសយដ្ឋានអ៊ីមែលហាក់មានសុពលភាព', +'email-address-validity-invalid' => 'បញ្ចូលអាសយដ្ឋានអ៊ីមែលដែលមានសុពលភាព', + # User rights 'userrights' => 'ការគ្រប់គ្រងសិទ្ធិអ្នកប្រើប្រាស់', 'userrights-lookup-user' => 'គ្រប់គ្រងក្រុមអ្នកប្រើប្រាស់', @@ -1449,6 +1462,7 @@ $1", 'right-hideuser' => 'រាំងខ្ទប់អ្នកប្រើប្រាស់ម្នាក់ រួចលាក់មិនបង្ហាញជាសាធារណៈ', 'right-ipblock-exempt' => 'ពង្វាងការរាំងខ្ទប់IP ការរាំងខ្ទប់ស្វ័យប្រវត្តិនិងការរាំងខ្ទប់កំរិតអនុញ្ញាត', 'right-proxyunbannable' => 'ពង្វាងការរាំងខ្ទប់ស្វ័យប្រវត្តិរបស់ប្រុកស៊ី', +'right-unblockself' => 'ឈប់រាំងខ្ទប់ពួកគេ', 'right-protect' => 'ប្ដូរកម្រិតការពាររួចកែប្រែទំព័រដែលបានការពារ', 'right-editprotected' => 'កែប្រែទំព័រដែលបានការពារ (ដោយមិនរំលាយការការពារ)', 'right-editinterface' => 'កែប្រែអន្តរមុខអ្នកប្រើប្រាស់', @@ -1520,14 +1534,9 @@ $1", 'recentchanges-legend' => 'ជម្រើសនានា​សម្រាប់ការបង្ហាញបំលាស់ប្ដូរថ្មីៗ', 'recentchangestext' => 'តាមដានរាល់បំលាស់ប្ដូរថ្មីៗបំផុតចំពោះវិគីនៅលើទំព័រនេះ។', 'recentchanges-feed-description' => 'តាមដាន​បំលាស់ប្ដូរថ្មីៗ​បំផុត​នៃ​វិគី​នេះក្នុង​មតិព័ត៌មាន​នេះ​។', -'recentchanges-label-legend' => 'កំនត់សំគាល់៖ $1 ។', -'recentchanges-legend-newpage' => '$1 - ទំព័រថ្មី', 'recentchanges-label-newpage' => 'ការកែប្រែនេះបានបង្កើតទំព័រថ្មីមួយ', -'recentchanges-legend-minor' => '$1 - ការកែប្រែតិចតួច', 'recentchanges-label-minor' => 'នេះជាការកែប្រែតិចតួចមួយប៉ុណ្ណោះ', -'recentchanges-legend-bot' => '$1 - ការកែប្រែដោយរូបយន្ត', 'recentchanges-label-bot' => 'ការកែប្រែនេះត្រូវបានធ្វើឡើងដោយរូបយន្ត', -'recentchanges-legend-unpatrolled' => '$1 - ការកែប្រែដែលបានល្បាត', 'recentchanges-label-unpatrolled' => 'ការកែប្រែនេះមិនទាន់ត្រូវបានល្បាតទេ', 'rcnote' => "ខាងក្រោម​នេះ​ជា​{{PLURAL:$1|១បំលាស់ប្ដូរ|'''$1'''បំលាស់ប្ដូរ}}​ចុងក្រោយក្នុងរយៈពេល​{{PLURAL:$2|ថ្ងៃ|'''$2'''ថ្ងៃ}}​ចុងក្រោយគិតត្រឹម$5 $4 ។", 'rcnotefrom' => "ខាងក្រោមនេះជាបំលាស់ប្ដូរនានាគិតចាប់តាំងពី '''$2''' (បង្ហាញអតិបរមា '''$1''' បំលាស់ប្ដូរ)។", @@ -1575,6 +1584,9 @@ $1", 'upload_directory_missing' => 'ថតសំរាប់ទុកឯកសារផ្ទុកឡើង ($1) បាត់ ហើយប្រព័ន្ធបំរើការមិនអាចបង្កើតវាបានទេ។', 'upload_directory_read_only' => 'ប្រព័ន្ធបំរើការមិនអាចសរសេរចូលទៅក្នុងថតសំរាប់ទុកឯកសារផ្ទុកឡើង ($1) ទេ។', 'uploaderror' => 'បញ្ហាក្នុងការផ្ទុកឡើង', +'upload-recreate-warning' => "''ប្រយ័ត្ន៖ ឯកសារដែលមានឈ្មោះដូចគ្នានេះត្រូវបានលុបចោលឬប្ដូរទីតាំង។''' + +កំណត់ហេតុស្ដីពីការលុបចោលនិងការប្ដូរទីតាំងរបស់ទំព័រនេះមានបង្ហាញនៅទីនេះ៖", 'uploadtext' => "សូមប្រើប្រាស់សំនុំបែបបទខាងក្រោមដើម្បីផ្ទុកឯកសារ​ឡើង។ ដើម្បីមើល ឬស្វែងរកឯកសារដែលបានផ្ទុកឡើងពីពេលមុន សូមចូលទៅ[[Special:FileList|បញ្ជីឯកសារដែលបានផ្ទុកឡើង]]។ ការផ្ទុកឡើងវិញ​នូវឯកសារបង្ហាញនៅក្នុង[[Special:Log/upload|កំណត់ហេតុនៃការផ្ទុកឯកសារឡើង]] និងការលុបចោលឯកសារមានបង្ហាញនៅក្នុង[[Special:Log/delete|កំណត់ហេតុនៃការលុប]]។ @@ -1612,6 +1624,16 @@ $1", {{PLURAL:$3|ប្រភេទឯកសារ|ប្រភេទឯកសារ}}ដែលគេចង់បានគឺ $2។', 'filetype-banned-type' => "'''\".\$1\"''' គឺជា​ប្រភេទ​ឯកសារ​ដែល​មិន​ត្រូវ​បាន​គេ​អនុញ្ញាត​ទេ​។ {{PLURAL:\$3|file type is|ប្រភេទឯកសារ}}​ដែល​ត្រូវ​បាន​គេ​អនុញ្ញាត​គឺ \$2 ។", 'filetype-missing' => 'ឯកសារ មិនមានកន្ទុយ (ដូចជា ".jpg")។', +'empty-file' => 'ឯកសារដែលអ្នកបានដាក់ស្នើគឺទទេ។', +'file-too-large' => 'ឯកសារដែលអ្នកបានដាក់ស្នើធំពេកហើយ។', +'filename-tooshort' => 'ឈ្មោះឯកសារខ្លីពេកហើយ។', +'filetype-banned' => 'ឯកសារប្រភេទនេះត្រូវបានហាមប្រាម។', +'verification-error' => 'ឯកសារឆ្លងមិនរួចពីការត្រួតពិនិត្យ។', +'illegal-filename' => 'មិនអនុញ្ញាតអោយប្រើឈ្មោះឯកសារនេះ។', +'overwrite' => 'មិនអនុញ្ញាតអោយសរសេរជាន់ពីលើឯកសារដែលមានស្រាប់ហើយ។', +'unknown-error' => 'មានបញ្ហាមិនស្គាល់មួយបានកើតឡើង។', +'tmp-create-error' => 'មិនអាចបង្កើតឯកសារបណ្ដោះអាសន្ន។', +'tmp-write-error' => 'មានបញ្ហាក្នុងការសរសេរឯកសារបណ្ដោះអាសន្ន។', 'large-file' => 'ឯកសារ​គួរតែ​មាន​​ទំហំ​មិនលើសពី $1។ ឯកសារ​នេះមាន​ទំហំ $2។', 'largefileserver' => 'ឯកសារនេះមានទំហំធំជាងទំហំដែលម៉ាស៊ីនបម្រើការអនុញ្ញាត។', 'emptyfile' => 'ឯកសារដែលអ្នកបានផ្ទុកឡើងទំនងជាឯកសារទទេ។​ @@ -1647,13 +1669,14 @@ $1", 'file-deleted-duplicate' => 'ឯកសារមួយដែលដូចគ្នាបេះបិតជាមួយឯកសារនេះ ([[:$1]]) ត្រូវបានលុបចោលម្ដងហើយ។ អ្នកគួរតែចូលទៅពិនិត្យមើលនៅក្នុងប្រវត្តិនៃការលុបចោលរបស់ឯកសារនេះមុននឹងបន្តផ្ទុកវាឡើងវិញ។', -'successfulupload' => 'ផ្ទុកឯកសារឡើងបានសំរេច', 'uploadwarning' => 'ប្រយ័ត្ន', 'uploadwarning-text' => 'សូមកែការពិពណ៌នារបស់ឯកសារខាងក្រោម រួចសាកល្បងម្ដងទៀត។', 'savefile' => 'រក្សាឯកសារទុក', 'uploadedimage' => 'បានផ្ទុកឡើង "[[$1]]"', 'overwroteimage' => 'បានផ្ទុកឡើងកំណែថ្មីរបស់"[[$1]]"', 'uploaddisabled' => 'មិនអនុញ្ញាតអោយផ្ទុកឯកសារឡើង', +'copyuploaddisabled' => 'មានអោយប្រើការផ្ទុកឡើងដោយ URL។', +'uploadfromurl-queued' => 'ការផ្ទុកឡើងរបស់អ្នកបានដាក់ក្នុងជួរ។', 'uploaddisabledtext' => 'ការផ្ទុកឯកសារ​ឡើង​គឺ​មិន​ត្រូវបាន​អនុញ្ញាត​ទេ​។', 'php-uploaddisabledtext' => 'មិនអនុញ្ញាតអោយផ្ទុកឯកសារឡើងក្នុង PHP ទេ។ @@ -1692,6 +1715,14 @@ JD # Jenoptik MGP # ម៉ាក Pentax PICT # ផ្សេង​ៗ​ # ', +'upload-success-subj' => 'ផ្ទុកឯកសារឡើងបានសំរេច', +'upload-success-msg' => 'ការផ្ទុកឡើងរបស់អ្នកពី [$2] បានទទួលជោគជ័យ។ អ្នកអាចរកវាបាននៅទៅនេះ៖ [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'បញ្ហាក្នុងការផ្ទុកឡើង', +'upload-failure-msg' => 'មានបញ្ហាមួយជាមួយការផ្ទុកឡើងរបស់អ្នកពី [$2]៖ + +$1', +'upload-warning-subj' => 'ការព្រមានស្ដីពីការផ្ទុកឡើង', +'upload-warning-msg' => 'មានបញ្ហាកើតឡើងជាមួយការផ្ទុកឡើងពី [$2] របស់អ្នក។ អ្នកអាចត្រលប់ទៅ[[Special:Upload/stash/$1|សំនុំបែបបទផ្ទុកឡើង]] ដើប្បីដោះស្រាយបញ្ហានេះ។', 'upload-proto-error' => 'ប្រូតូខូលមិនត្រឹមត្រូវ', 'upload-proto-error-text' => 'ការផ្ទុកឡើងពីចម្ងាយត្រូវការ URL ដែលចាប់ផ្ដើមដោយ http://ftp://។', @@ -1748,6 +1779,7 @@ PICT # ផ្សេង​ៗ​ 'listfiles_search_for' => 'ស្វែងរកឈ្មោះមេឌា៖', 'imgfile' => 'ឯកសារ', 'listfiles' => 'បញ្ជីរូបភាព', +'listfiles_thumb' => 'កូនរូបភាព', 'listfiles_date' => 'កាលបរិច្ឆេទ', 'listfiles_name' => 'ឈ្មោះ', 'listfiles_user' => 'អ្នកប្រើប្រាស់', @@ -1862,8 +1894,8 @@ PICT # ផ្សេង​ៗ​ 'statistics-edits' => 'ការកែប្រែទំព័រចាប់តាំងពី{{SITENAME}}ត្រូវបានដំឡើង', 'statistics-edits-average' => 'កំណែប្រែជាមធ្យមក្នុងមួយទំព័រ', 'statistics-views-total' => 'ចំនួនការចូលមើលសរុប', +'statistics-views-total-desc' => 'មិនរាប់បញ្ចូលការចូលមើលទំព័រដែលមិនមាននិងទំព័រពិសេសៗទេ', 'statistics-views-peredit' => 'ចំនួនការចូលមើលក្នុងមួយកំណែប្រែ', -'statistics-jobqueue' => 'ប្រវែង[http://www.mediawiki.org/wiki/Manual:Job_queue ជួរការងារ]', 'statistics-users' => '[[Special:ListUsers|អ្នកប្រើប្រាស់]]ដែលបានចុះឈ្មោះ', 'statistics-users-active' => 'អ្នកប្រើប្រាស់សកម្ម', 'statistics-users-active-desc' => 'អ្នក​ប្រើប្រាស់​ដែល​បាន​អនុវត្ត​សកម្មភាព​ក្នុង​{{PLURAL:$1|ថ្ងៃ​}}ចុង​ក្រោយ​', @@ -1904,6 +1936,8 @@ PICT # ផ្សេង​ៗ​ 'nmembers' => '$1{{PLURAL:$1|សមាជិក|សមាជិក}}', 'nrevisions' => '$1 {{PLURAL:$1|កំណែប្រែ}}', 'nviews' => '$1 {{PLURAL:$1|ការចូលមើល}}', +'nimagelinks' => 'ត្រូវបានប្រើនៅលើទំព័រចំនួន $1។', +'ntransclusions' => 'ត្រូវបានប្រើនៅលើទំព័រចំនួន $1', 'specialpage-empty' => 'គ្មានលទ្ធផលសម្រាប់របាយណ៍នេះទេ។', 'lonelypages' => 'ទំព័រកំព្រា', 'lonelypagestext' => 'ទំព័រដូចតទៅនេះមិនត្រូវបានភ្ជាប់ពីទំព័រដទៃនៅក្នុង {{SITENAME}}ទេ។', @@ -2061,34 +2095,40 @@ PICT # ផ្សេង​ៗ​ 'listgrouprights-removegroup-self-all' => 'យក​ចេញ​​ក្រុម​ទាំងអស់​ពី​​គណនី​ផ្ទាល់ខ្លួន​', # E-mail user -'mailnologin' => 'មិនមានអាសយដ្ឋានផ្ញើទេ', -'mailnologintext' => 'អ្នកត្រូវតែ [[Special:UserLogin|កត់ឈ្មោះចូល]] និង មានអាសយដ្ឋានអ៊ីមែលមានសុពលភាពមួយ ក្នុង[[Special:Preferences|ចំណង់ចំណូលចិត្ត]]របស់អ្នក ដើម្បីមានសិទ្ធិផ្ញើអ៊ីមែលទៅអ្នកប្រើប្រាស់ដទៃទៀត។', -'emailuser' => 'ផ្ញើអ៊ីមែល​ទៅកាន់​អ្នក​ប្រើប្រាស់នេះ', -'emailpage' => 'ផ្ញើអ៊ីមែលទៅកាន់អ្នកប្រើប្រាស់', -'emailpagetext' => 'អ្នក​អាច​ប្រើសំនុំ​បែប​បទ​ខាង​ក្រោម​ក្នុង​ការ​ផ្ញើ​សារ​ជា​អ៊ីមែល​ទៅ​កាន់​អ្នក​ប្រើប្រាស់​នេះ​។ +'mailnologin' => 'មិនមានអាសយដ្ឋានផ្ញើទេ', +'mailnologintext' => 'អ្នកត្រូវតែ [[Special:UserLogin|កត់ឈ្មោះចូល]] និង មានអាសយដ្ឋានអ៊ីមែលមានសុពលភាពមួយ ក្នុង[[Special:Preferences|ចំណង់ចំណូលចិត្ត]]របស់អ្នក ដើម្បីមានសិទ្ធិផ្ញើអ៊ីមែលទៅអ្នកប្រើប្រាស់ដទៃទៀត។', +'emailuser' => 'ផ្ញើអ៊ីមែល​ទៅកាន់​អ្នក​ប្រើប្រាស់នេះ', +'emailpage' => 'ផ្ញើអ៊ីមែលទៅកាន់អ្នកប្រើប្រាស់', +'emailpagetext' => 'អ្នក​អាច​ប្រើសំនុំ​បែប​បទ​ខាង​ក្រោម​ក្នុង​ការ​ផ្ញើ​សារ​ជា​អ៊ីមែល​ទៅ​កាន់​អ្នក​ប្រើប្រាស់​នេះ​។ អាសយដ្ឋាន​អ៊ីមែល​ដែល​អ្នក​បាន​វាយ​បញ្ចូល​ក្នុង​[[Special:Preferences|ចំណង់ចំណូល​ចិត្ត​]]​របស់​អ្នក នឹង​បង្ហាញ​ជា​អាសយដ្ឋាន​អ៊ីមែល "From" ដូច្នោះ​អ្នក​ទទួល​នឹង​អាច​ឆ្លើយ​តប​ទៅ​អ្នក​វិញ​ដោយ​ផ្ទាល់​។', -'usermailererror' => 'កំហុសឆ្គងក្នុងចំណងជើងអ៊ីមែល៖', -'defemailsubject' => 'អ៊ីមែលពី{{SITENAME}}', -'noemailtitle' => 'គ្មានអាសយដ្ឋានអ៊ីមែល', -'noemailtext' => 'អ្នកប្រើប្រាស់នេះមិនបានផ្ដល់អាសយដ្ឋានអ៊ីមែលដែលមានសុពលភាពទេ។', -'nowikiemailtitle' => 'មិនអនុញ្ញាតអោយប្រើអ៊ីមែល', -'nowikiemailtext' => 'អ្នក​ប្រើប្រាស់​នេះ​បាន​ជ្រើសរើស​មិន​ទទួល​អ៊ីមែល​ពីអ្នកប្រើប្រាស់​ដទៃ​ទៀត​។', -'email-legend' => 'ផ្ញើអ៊ីមែលទៅអ្នកប្រើប្រាស់{{SITENAME}}ម្នាក់ទៀត', -'emailfrom' => 'ពី៖', -'emailto' => 'ទៅកាន់៖', -'emailsubject' => 'ប្រធានបទ៖', -'emailmessage' => 'សារ៖', -'emailsend' => 'ផ្ញើ', -'emailccme' => 'ផ្ញើអ៊ីមែលមកខ្ញុំនូវច្បាប់ចម្លងមួយនៃសាររបស់ខ្ញុំ។', -'emailccsubject' => 'ច្បាប់ចម្លងនៃសារដែលអ្នកផ្ញើទៅកាន់ $1 ៖ $2', -'emailsent' => 'អ៊ីមែលត្រូវបានផ្ញើទៅហើយ', -'emailsenttext' => 'សារអ៊ីមែលរបស់អ្នកត្រូវបានផ្ញើរួចហើយ។', -'emailuserfooter' => 'អ៊ីមែលនេះត្រូវបានផ្ញើដោយ$1ទៅកាន់$2ដោយប្រើមុខងារ"អ៊ីមែលអ្នកប្រើប្រាស់"របស់{{SITENAME}}។', +'usermailererror' => 'កំហុសឆ្គងក្នុងចំណងជើងអ៊ីមែល៖', +'defemailsubject' => 'អ៊ីមែលពី{{SITENAME}}', +'usermaildisabled' => 'មិនប្រើអ៊ីមែល', +'usermaildisabledtext' => 'អ្នកមិនអាចផ្ញើអ៊ីមែលទៅកាន់អ្នកប្រើប្រាស់ដទៃទៀតនៅលើវិគីនេះបានទេ', +'noemailtitle' => 'គ្មានអាសយដ្ឋានអ៊ីមែល', +'noemailtext' => 'អ្នកប្រើប្រាស់នេះមិនបានផ្ដល់អាសយដ្ឋានអ៊ីមែលដែលមានសុពលភាពទេ។', +'nowikiemailtitle' => 'មិនអនុញ្ញាតអោយប្រើអ៊ីមែល', +'nowikiemailtext' => 'អ្នក​ប្រើប្រាស់​នេះ​បាន​ជ្រើសរើស​មិន​ទទួល​អ៊ីមែល​ពីអ្នកប្រើប្រាស់​ដទៃ​ទៀត​។', +'email-legend' => 'ផ្ញើអ៊ីមែលទៅអ្នកប្រើប្រាស់{{SITENAME}}ម្នាក់ទៀត', +'emailfrom' => 'ពី៖', +'emailto' => 'ទៅកាន់៖', +'emailsubject' => 'ប្រធានបទ៖', +'emailmessage' => 'សារ៖', +'emailsend' => 'ផ្ញើ', +'emailccme' => 'ផ្ញើអ៊ីមែលមកខ្ញុំនូវច្បាប់ចម្លងមួយនៃសាររបស់ខ្ញុំ។', +'emailccsubject' => 'ច្បាប់ចម្លងនៃសារដែលអ្នកផ្ញើទៅកាន់ $1 ៖ $2', +'emailsent' => 'អ៊ីមែលត្រូវបានផ្ញើទៅហើយ', +'emailsenttext' => 'សារអ៊ីមែលរបស់អ្នកត្រូវបានផ្ញើរួចហើយ។', +'emailuserfooter' => 'អ៊ីមែលនេះត្រូវបានផ្ញើដោយ$1ទៅកាន់$2ដោយប្រើមុខងារ"អ៊ីមែលអ្នកប្រើប្រាស់"របស់{{SITENAME}}។', + +# User Messenger +'usermessage-summary' => 'ទុកសារ', +'usermessage-editor' => 'ប្រព័ន្ធផ្ញើសារ', # Watchlist 'watchlist' => 'បញ្ជីតាមដានរបស់ខ្ញុំ', 'mywatchlist' => 'បញ្ជីតាមដាន​', -'watchlistfor' => "(សម្រាប់ '''$1''')", +'watchlistfor2' => 'សំរាប់ $1 $2', 'nowatchlist' => 'គ្មានអ្វីនៅក្នុងបញ្ជីតាមដានរបស់អ្នកទេ។', 'watchlistanontext' => 'សូម $1 ដើម្បី​មើល​ឬ​កែប្រែ​របស់​ក្នុង​បញ្ជីតាមដាន​របស់អ្នក។', 'watchnologin' => 'មិនទាន់កត់ឈ្មោះចូលទេ', @@ -2352,19 +2392,23 @@ $1', 'month' => 'ខែ៖', 'year' => 'ឆ្នាំ៖', -'sp-contributions-newbies' => 'បង្ហាញតែការរួមចំណែករបស់អ្នកប្រើប្រាស់ថ្មីៗ', -'sp-contributions-newbies-sub' => 'ចំពោះគណនីថ្មីៗ', -'sp-contributions-newbies-title' => 'ការរួមចំណែករបស់អ្នកប្រើប្រាស់ចំពោះគណនីថ្មី', -'sp-contributions-blocklog' => 'កំណត់ហេតុនៃការហាមឃាត់', -'sp-contributions-deleted' => 'ការរួមចំណែកដែលត្រូវបានលុប', -'sp-contributions-logs' => 'កំណត់​ហេតុ​', -'sp-contributions-talk' => 'ការពិភាក្សា', -'sp-contributions-userrights' => 'ការគ្រប់គ្រងសិទ្ធិអ្នកប្រើប្រាស់', -'sp-contributions-blocked-notice' => 'អ្នកប្រើប្រាស់នេះត្រូវបានរាំងខ្ទប់ហើយនាពេលនេះ។ +'sp-contributions-newbies' => 'បង្ហាញតែការរួមចំណែករបស់អ្នកប្រើប្រាស់ថ្មីៗ', +'sp-contributions-newbies-sub' => 'ចំពោះគណនីថ្មីៗ', +'sp-contributions-newbies-title' => 'ការរួមចំណែករបស់អ្នកប្រើប្រាស់ចំពោះគណនីថ្មី', +'sp-contributions-blocklog' => 'កំណត់ហេតុនៃការហាមឃាត់', +'sp-contributions-deleted' => 'ការរួមចំណែកដែលត្រូវបានលុប', +'sp-contributions-uploads' => 'ឯកសារផ្ទុកឡើង', +'sp-contributions-logs' => 'កំណត់​ហេតុ​', +'sp-contributions-talk' => 'ការពិភាក្សា', +'sp-contributions-userrights' => 'ការគ្រប់គ្រងសិទ្ធិអ្នកប្រើប្រាស់', +'sp-contributions-blocked-notice' => 'អ្នកប្រើប្រាស់នេះត្រូវបានរាំងខ្ទប់ហើយនាពេលនេះ។ កំណត់ត្រាស្ដីពីការរាំងខ្ទប់ចុងក្រោយមានបង្ហាញដូចខាងក្រោមនេះ៖', -'sp-contributions-search' => 'ស្វែងរកការរួមចំណែក', -'sp-contributions-username' => 'អាសយដ្ឋានIP ឬអត្តនាម៖', -'sp-contributions-submit' => 'ស្វែងរក', +'sp-contributions-blocked-notice-anon' => 'អាសយដ្ឋានIPនេះត្រូវបានរាំងខ្ទប់ហើយនាពេលនេះ។ +កំណត់ត្រាស្ដីពីការរាំងខ្ទប់ចុងក្រោយមានបង្ហាញដូចខាងក្រោមនេះ៖', +'sp-contributions-search' => 'ស្វែងរកការរួមចំណែក', +'sp-contributions-username' => 'អាសយដ្ឋានIP ឬអត្តនាម៖', +'sp-contributions-toponly' => 'បង្ហាញតែការកែប្រែណាដែលជាកំណែថ្មីៗជាងគេប៉ុណ្ណោះ', +'sp-contributions-submit' => 'ស្វែងរក', # What links here 'whatlinkshere' => 'អ្វី​ដែលភ្ជាប់មកទីនេះ', @@ -2421,7 +2465,6 @@ $1', 'ipb-edit-dropdown' => 'កែប្រែ ហេតុផល រាំងខ្ទប់', 'ipb-unblock-addr' => 'ឈប់ហាមឃាត់$1', 'ipb-unblock' => 'លែងរាំងខ្ទប់ អ្នកប្រើប្រាស់ ឬ អាសយដ្ឋាន IP', -'ipb-blocklist-addr' => 'ការរាំងខ្ទប់ដែលមានស្រេចសម្រាប់$1', 'ipb-blocklist' => 'មើលការហាមឃាត់ដែលមានស្រេច', 'ipb-blocklist-contribs' => 'ការរួមចំណែកសម្រាប់ $1', 'unblockip' => 'ឈប់ហាមឃាត់អ្នកប្រើប្រាស់', @@ -2730,6 +2773,8 @@ $1 ត្រូវ​បាន​ទប់ស្កាត់​ហើយ​។ 'tooltip-rollback' => '"ត្រឡប់​"កំណែ​ប្រែ​ធ្វើឡើងដោយអ្នក​រួម​ចំណែក​ចុង​ក្រោយ​គេ ទៅកំណែប្រែមុននោះវិញ​ ដោយគ្រាន់​តែ​ចុច​មួយ​ច្នុចប៉ុណ្ណោះ​', 'tooltip-undo' => '"មិន​ធ្វើ​វិញ"​ ត្រឡប់​កំណែ​នេះឡើង​វិញ​ និង​បើក​បែប​បទ​កែប្រែ​ក្នុង​ទម្រង់​មើល​ជាមុន​។ អ្នកអាចបន្ថែម​មូល​ហេតុ​នៅ​ក្នុង​សេចក្ដី​សង្ខេប​បាន។', +'tooltip-preferences-save' => 'រក្សាទុកចំណង់ចំណូលចិត្ត', +'tooltip-summary' => 'បញ្ចូលចំណារពន្យល់ថ្មីមួយ', # Stylesheets 'common.css' => '/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើគ្រប់សំបកទាំងអស់ */', @@ -2835,14 +2880,17 @@ $1', 'imagemaxsize' => "កំណត់ទំហំរូបភាព៖
    ''(លើទំព័រពិពណ៌នារូបភាព)''", 'thumbsize' => 'ទំហំកូនរូបភាព៖', 'widthheightpage' => '$1×$2, $3{{PLURAL:$3|ទំព័រ|ទំព័រ}}', -'file-info' => '(ទំហំឯកសារ៖ $1, ប្រភេទ MIME ៖ $2)', -'file-info-size' => '($1 × $2 ភីកសែល ទំហំឯកសារ៖ $3 ប្រភេទ MIME៖ $4)', +'file-info' => 'ទំហំឯកសារ៖ $1, ប្រភេទ MIME ៖ $2', +'file-info-size' => '$1 × $2 ភីកសែល ទំហំឯកសារ៖ $3 ប្រភេទ MIME៖ $4', 'file-nohires' => 'គ្មានភាពម៉ត់ ដែលខ្ពស់ជាង។', -'svg-long-desc' => '(ឯកសារប្រភេទSVG $1 × $2 ភីកសែល ទំហំឯកសារ៖ $3)', +'svg-long-desc' => 'ឯកសារប្រភេទSVG $1 × $2 ភីកសែល ទំហំឯកសារ៖ $3', 'show-big-image' => 'រូបភាពពេញ', 'show-big-image-thumb' => 'ទំហំ​នៃការមើលជាមុននេះ៖ $1 × $2 ភីកសែល', 'file-info-gif-looped' => 'រង្វិល', 'file-info-gif-frames' => '$1 {{PLURAL:$1|ផ្ទាំង|ផ្ទាំង}}', +'file-info-png-looped' => 'រង្វិល', +'file-info-png-repeat' => 'ចាក់ $1 ដង', +'file-info-png-frames' => '$1 ផ្ទាំង', # Special:NewFiles 'newimages' => 'វិចិត្រសាលរូបភាពថ្មីៗ', @@ -3127,6 +3175,7 @@ $1', 'table_pager_first' => 'ទំព័រដំបូង', 'table_pager_last' => 'ទំព័រចុងក្រោយ', 'table_pager_limit' => 'បង្ហាញវត្ថុចំនួន $1 ក្នុងមួយទំព័រ', +'table_pager_limit_label' => 'ចំនួនវត្ថុក្នុងមួយទំព័រ៖', 'table_pager_limit_submit' => 'ទៅ', 'table_pager_empty' => 'មិនមានលទ្ធផលទេ', @@ -3191,6 +3240,7 @@ $1', 'version-extensions' => 'ផ្នែកបន្ថែមដែលបានដំឡើង', 'version-specialpages' => 'ទំព័រពិសេសៗ', 'version-variables' => 'អថេរ', +'version-skins' => 'សំបក', 'version-other' => 'ផ្សេង', 'version-mediahandlers' => 'កម្មវិធី​បើក​មេឌា​ (Media handlers)', 'version-extension-functions' => 'មុខងារផ្នែកបន្ថែម', @@ -3199,6 +3249,8 @@ $1', 'version-hook-subscribedby' => 'បានជាវ ជាប្រចាំ ដោយ', 'version-version' => '(កំណែ $1)', 'version-license' => 'អាជ្ញាប័ណ្ណ', +'version-poweredby-credits' => "វិគីនេះឧបត្ថម្ភដោយ '''[http://www.mediawiki.org/ មេឌាវិគី]''', រក្សាសិទ្ធ © ២០០១-$1 $2។", +'version-poweredby-others' => 'អ្នកដទៃទៀត', 'version-software' => 'ផ្នែកទន់​ដែល​បានដំឡើង', 'version-software-product' => 'ផលិតផល', 'version-software-version' => 'កំណែ', @@ -3256,6 +3308,15 @@ $1', 'tags-edit' => 'កែប្រែ', 'tags-hitcount' => '$1 {{PLURAL:$1|បំលាស់ប្ដូរ|បំលាស់ប្ដូរ}}', +# Special:ComparePages +'comparepages' => 'ប្រៀបធៀបទំព័រ', +'compare-selector' => 'ប្រៀបធៀបកំណែទំព័រ', +'compare-page1' => 'ទំព័រ ១', +'compare-page2' => 'ទំព័រ ២', +'compare-rev1' => 'កំណែ ១', +'compare-rev2' => 'កំណែ ២', +'compare-submit' => 'ប្រៀបធៀប', + # Database error messages 'dberr-header' => 'វិគីនេះមានបញ្ហា', 'dberr-problems' => 'សូមអភ័យទោស! វិបសាយនេះកំពុងជួបបញ្ហាបច្ចេកទេស។', @@ -3272,6 +3333,7 @@ $1', 'htmlform-float-invalid' => 'តំលៃលេខដែលអ្នកបានកំនត់មិនមែនជាចំនួនទេ។', 'htmlform-int-toolow' => 'តំលៃលេខដែលអ្នកបានកំនត់តូចជាងចំនួនអប្បបរមាដែលមានតំលៃ$1', 'htmlform-int-toohigh' => 'តំលៃលេខដែលអ្នកបានកំនត់ធំជាងចំនួនអតិបរមាដែលមានតំលៃ$1', +'htmlform-required' => 'ចាំបាច់អោយដាក់តំលៃលេខនេះ', 'htmlform-submit' => 'ដាក់ស្នើ', 'htmlform-reset' => 'ធ្វើដូចដើមវិញ', 'htmlform-selectorother-other' => 'ផ្សេងទៀត', diff --git a/languages/messages/MessagesKn.php b/languages/messages/MessagesKn.php index a602da08..565f6354 100644 --- a/languages/messages/MessagesKn.php +++ b/languages/messages/MessagesKn.php @@ -68,8 +68,7 @@ $messages = array( 'tog-editsection' => 'ಪುಟದ ವಿಭಾಗಗಳನ್ನು [ಬದಲಾಯಿಸು] ಕೊಂಡಿಗಳನ್ನು ಒತ್ತುವುದರಿಂದ ಸಂಪಾದನೆ ಮಾಡುವಂತೆ ಇರಲಿ', 'tog-editsectiononrightclick' => 'ಪುಟದ ವಿಭಾಗಗಳನ್ನು ಅವುಗಳ ಶೀರ್ಷಿಕೆಯನ್ನು ಎರಡು ಬಾರಿ ಕ್ಲಿಕ್ ಮಾಡಿ ಸಂಪಾದನೆ ಮಾಡುವಂತೆ ಇರಲಿ (JavaScript)', 'tog-showtoc' => 'ಪರಿವಿಡಿಯನ್ನು ತೋರಿಸು (ಮೂರಕ್ಕಿಂತ ಹೆಚ್ಚು ತಲೆಬರಹಗಳನ್ನು ಹೊಂದಿರುವ ಪುಟಗಳಿಗೆ)', -'tog-rememberpassword' => 'ಈ ಗಣಕಯಂತ್ರದಲ್ಲಿ ನನ್ನ ಲಾಗಿನ್ ನೆನಪಿನಲ್ಲಿಟ್ಟುಕೊ', -'tog-editwidth' => 'ಸಂಪಾದನೆ ಚೌಕವು ಪೂರ್ಣ ವಿಸ್ತಾರವನ್ನು ಹೊಂದಿರಲಿ', +'tog-rememberpassword' => 'ಈ ಗಣಕಯಂತ್ರದಲ್ಲಿ ನನ್ನ ಲಾಗಿನ್ ನೆನಪಿನಲ್ಲಿಟ್ಟುಕೊ (ಗರಿಷ್ಠ $1 {{PLURAL:$1|ದಿನದ|ದಿನಗಳ}}ವರೆಗೆ)', 'tog-watchcreations' => 'ನಾನು ಪ್ರಾರಂಭಿಸುವ ಲೇಖನಗಳನ್ನು ನನ್ನ ವೀಕ್ಷಣಾಪಟ್ಟಿಗೆ ಸೇರಿಸು', 'tog-watchdefault' => 'ನಾನು ಸಂಪಾದಿಸುವ ಪುಟಗಳನ್ನು ವೀಕ್ಷಣಾಪಟ್ಟಿಗೆ ಸೇರಿಸು', 'tog-watchmoves' => 'ನಾನು ಸ್ಥಳಾಂತರಿಸುವ ಪುಟಗಳನ್ನು ನನ್ನ ವೀಕ್ಷಣಾಪಟ್ಟಿಗೆ ಸೇರಿಸು', @@ -206,28 +205,18 @@ $messages = array( 'faqpage' => 'Project:ಸಾಮಾನ್ಯವಾಗಿ ಕೇಳಲಾಗುವ ಪ್ರಶ್ನೆಗಳು', # Vector skin -'vector-action-addsection' => 'ವಿಷಯ ಸೇರಿಸಿ', -'vector-action-delete' => 'ಅಳಿಸು', -'vector-action-move' => 'ಸ್ಥಳಾಂತರಿಸಿ', -'vector-action-protect' => 'ಸಂರಕ್ಷಿಸು', -'vector-action-unprotect' => 'ಸಂರಕ್ಷಣೆಯನ್ನು ತೆಗೆ', -'vector-namespace-category' => 'ವರ್ಗ', -'vector-namespace-help' => 'ಸಹಾಯ ಪುಟ', -'vector-namespace-image' => 'ಫೈಲು', -'vector-namespace-main' => 'ಪುಟ', -'vector-namespace-mediawiki' => 'ಸಂದೇಶ', -'vector-namespace-project' => 'ಯೋಜನೆ ಪುಟ', -'vector-namespace-special' => 'ವಿಶೇಷ ಪುಟ', -'vector-namespace-talk' => 'ಚರ್ಚೆ', -'vector-namespace-template' => 'ಟೆಂಪ್ಲೇಟು', -'vector-namespace-user' => 'ಸದಸ್ಯರ ಪುಟ', -'vector-view-create' => 'ಸೃಷ್ಟಿಸು', -'vector-view-edit' => 'ಸಂಪಾದಿಸಿ', -'vector-view-history' => 'ಇತಿಹಾಸವನ್ನು ನೋಡಿ', -'vector-view-view' => 'ಓದು', -'vector-view-viewsource' => 'ಆಕರ ವೀಕ್ಷಿಸು', -'actions' => 'ಕ್ರಿಯೆಗಳು', -'namespaces' => 'ನಾಮವರ್ಗಗಳು', +'vector-action-addsection' => 'ವಿಷಯ ಸೇರಿಸಿ', +'vector-action-delete' => 'ಅಳಿಸು', +'vector-action-move' => 'ಸ್ಥಳಾಂತರಿಸಿ', +'vector-action-protect' => 'ಸಂರಕ್ಷಿಸು', +'vector-action-unprotect' => 'ಸಂರಕ್ಷಣೆಯನ್ನು ತೆಗೆ', +'vector-view-create' => 'ಸೃಷ್ಟಿಸು', +'vector-view-edit' => 'ಸಂಪಾದಿಸಿ', +'vector-view-history' => 'ಇತಿಹಾಸವನ್ನು ನೋಡಿ', +'vector-view-view' => 'ಓದು', +'vector-view-viewsource' => 'ಆಕರ ವೀಕ್ಷಿಸು', +'actions' => 'ಕ್ರಿಯೆಗಳು', +'namespaces' => 'ನಾಮವರ್ಗಗಳು', 'errorpagetitle' => 'ದೋಷ', 'returnto' => '$1 ಗೆ ಹಿಂತಿರುಗಿ.', @@ -283,6 +272,7 @@ $messages = array( 'jumpto' => 'ಇಲ್ಲಿಗೆ ಹೋಗು:', 'jumptonavigation' => 'ಸಂಚರಣೆ', 'jumptosearch' => 'ಹುಡುಕು', +'pool-errorunknown' => 'ಅಪರಿಚಿತ ದೋಷ', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'ಕನ್ನಡ {{SITENAME}} ಬಗ್ಗೆ', @@ -435,7 +425,7 @@ $2', 'yourname' => 'ನಿಮ್ಮ ಬಳಕೆಯ ಹೆಸರು', 'yourpassword' => 'ನಿಮ್ಮ ಪ್ರವೇಶಪದ', 'yourpasswordagain' => 'ಪ್ರವೇಶ ಪದ ಮತ್ತೊಮ್ಮೆ ಟೈಪ್ ಮಾಡಿ', -'remembermypassword' => 'ಈ ಗಣಕಯಂತ್ರದಲ್ಲಿ ನನ್ನ ಪ್ರವೇಶ ಪದವನ್ನು ನೆನಪಿನಲ್ಲಿಟ್ಟುಕೊ', +'remembermypassword' => 'ಈ ಗಣಕಯಂತ್ರದಲ್ಲಿ ನನ್ನ ಲಾಗಿನ್ ನೆನಪಿನಲ್ಲಿಟ್ಟುಕೊ (ಗರಿಷ್ಠ $1 {{PLURAL:$1|ದಿನದ|ದಿನಗಳ}}ವರೆಗೆ)', 'login' => 'ಲಾಗ್ ಇನ್', 'nav-login-createaccount' => 'ಲಾಗ್ ಇನ್ - log in', 'loginprompt' => '{{SITENAME}} ತಾಣಕ್ಕೆ ಲಾಗ್ ಇನ್ ಆಗಲು ನಿಮ್ಮ ಗಣಕಯಂತ್ರದಲ್ಲಿ ಕುಕೀ (cookie) ಸೌಲಭ್ಯವಿರಬೇಕು.', @@ -450,6 +440,7 @@ $2', 'gotaccount' => "ಈಗಾಗಲೇ ಖಾತೆಯಿದೆಯೇ? '''$1'''.", 'gotaccountlink' => 'ಲಾಗ್ ಇನ್', 'createaccountmail' => 'ಇ-ಅಂಚೆಯ ಮೂಲಕ', +'createaccountreason' => 'ಕಾರಣ:', 'badretype' => 'ನೀವು ಕೊಟ್ಟ ಪ್ರವೇಶಪದಗಳು ಬೇರೆಬೇರೆಯಾಗಿವೆ.', 'userexists' => 'ನೀವು ನೀಡಿದ ಸದಸ್ಯರ ಹೆಸರು ಆಗಲೆ ಬಳಕೆಯಲ್ಲಿದೆ. ದಯವಿಟ್ಟು ಬೇರೊಂದು ಹೆಸರನ್ನು ಆಯ್ಕೆ ಮಾಡಿ.', 'loginerror' => 'ಲಾಗಿನ್ ದೋಷ', @@ -639,7 +630,6 @@ $2', ನಿಮ್ಮ ಬರಹಗಳನ್ನು ಬೇರೆಯವರು ನಿರ್ದಾಕ್ಷಿಣ್ಯವಾಗಿ ಸಂಪಾದನೆ ಮಾಡುವುದು ನಿಮಗೆ ಇಷ್ಟವಿಲ್ಲದಿದ್ದರೆ ಇಲ್ಲಿ ಸಂಪಾದನೆ ಮಾಡಬೇಡಿ.
    ಅಲ್ಲದೆ ನಿಮ್ಮ ಸಂಪಾದನೆಗಳನ್ನು ನೀವೇ ಸ್ವತಃ ರಚಿಸಿದ್ದು, ಅಥವ ಕೃತಿಸ್ವಾಮ್ಯತೆಯಿಂದ ಮುಕ್ತವಾಗಿರುವ ಕಡೆಯಿಂದ ಪಡೆದಿದ್ದು ಎಂದು ನೀವು ಪ್ರಮಾಣಿಸುತ್ತಿರುವಿರಿ (ಮಾಹಿತಿಗೆ $1 ನೋಡಿ). '''ಕೃತಿಸ್ವಾಮ್ಯತೆಯ ಅಡಿಯಲ್ಲಿರುವ ರಚನೆಗಳನ್ನು ಅನುಮತಿ ಇಲ್ಲದೆ ಇಲ್ಲಿಗೆ ಹಾಕಬೇಡಿ!'''", -'longpagewarning' => "'''ಎಚ್ಚರ: ಈ ಪುಟ $1 ಕಿಲೋಬೈಟ್‍ಗಳಷ್ಟು ಉದ್ದ ಇದೆ; ಕೆಲವು ಬ್ರೌಸರ್‍ಗಳಲ್ಲಿ ೩೨ ಕಿಲೋಬೈಟ್‍ಗಳಿಗಿಂತ ಉದ್ದದ ಪುಟಗಳನ್ನು ಸಂಪಾದನೆ ಮಾಡುವುದು ಕಷ್ಟ. ಪುಟವನ್ನು ಆದಷ್ಟು ವಿಭಾಗಗಳಾಗಿ ವಿಂಗಡಿಸಲು ಪ್ರಯತ್ನಿಸಿ.'''", 'longpageerror' => "'''ದೋಷ: ನೀವು ಸಲ್ಲಿಸಿರುವ ಪಠ್ಯವು $1 ಕಿಲೊಬೈಟ್ ಉದ್ದದ್ದಾಗಿದೆ. ಇದು ನಿಯಮಿತವಾಗಿರುವ ಗರಿಷ್ಠವಾದ $2 ಕಿಲೊಬೈಟ್‍ಗಳಿಗಿಂತ ಹೆಚ್ಚಾಗಿದೆ. ಆದ್ದರಿಂದ ಇದನ್ನು ಉಳಿಸಲು ಆಗುವುದಿಲ್ಲ.'''", 'readonlywarning' => "'''ಗಮನಿಸಿ: ಡೇಟಾಬೇಸ್ ಅನ್ನು ದುರಸ್ತಿಗಾಗಿ ಮುಚ್ಚಲಾಗಿದೆ. ಹಾಗಾಗಿ ನಿಮ್ಮ ಸಂಪಾದನೆಗಳನ್ನು ಈಗ ಉಳಿಸಲು ಆಗುವುದಿಲ್ಲ. @@ -740,6 +730,8 @@ $2', 'revdelete-submit' => 'ಆಯ್ಕೆ ಮಾಡಿದ ಬದಲಾವಣೆಗೆ ಅನ್ವಯಿಸು', 'revdelete-logentry' => '[[$1]] ರ ಸಂಪಾದನೆಯ ಕಾಣಿಸುವಿಕೆಯನ್ನು ಬದಲಾಯಿಸಲಾಯಿತು', 'revdel-restore' => 'ಕಾಣಿಸುವಿಕೆಯನ್ನು ಬದಲಾಯಿಸು', +'revdel-restore-deleted' => 'ಅಳಿಸಿಹಾಕಲಾದ ಆವೃತ್ತಿಗಳು', +'revdel-restore-visible' => 'ಕಾಣುವ ಆವೃತ್ತಿಗಳು', 'pagehist' => 'ಪುಟದ ಇತಿಹಾಸ', 'deletedhist' => 'ಅಳಿಸಲ್ಪಟ್ಟ ಇತಿಹಾಸ', 'revdelete-content' => 'ಮಾಹಿತಿ', @@ -921,6 +913,9 @@ $2', 'prefs-advancedrendering' => 'ಪರಿಣತ ಇಚ್ಛೆಗಳು', 'prefs-advancedsearchoptions' => 'ಪರಿಣತ ಇಚ್ಛೆಗಳು', 'prefs-advancedwatchlist' => 'ಪರಿಣತ ಇಚ್ಛೆಗಳು', +'prefs-displayrc' => 'ಪ್ರದರ್ಶನ ಆಯ್ಕೆಗಳು', +'prefs-displaysearchoptions' => 'ಪ್ರದರ್ಶನ ಆಯ್ಕೆಗಳು', +'prefs-displaywatchlist' => 'ಪ್ರದರ್ಶನ ಆಯ್ಕೆಗಳು', # User rights 'userrights' => 'ಬಳಕೆದಾರ ಹಕ್ಕುಗಳ ನಿರ್ವಹಣೆ', @@ -1067,6 +1062,7 @@ $2', 'filetype-unwanted-type' => "'''\".\$1\"''' ಒಂದು ಬೇಡವಾದ ಫೈಲಿನ ಮಾದರಿ. ಐಚ್ಛಿಕ ಫೈಲಿನ {{PLURAL:\$3|ಮಾದರಿಯು|ಮಾದರಿಗಳು}} \$2.", 'filetype-banned-type' => "'''\".\$1\"''' ಒಂದು ನಿರ್ಬಂಧಿತ ಫೈಲಿನ ಮಾದರಿ. ನಿರ್ಬಂಧನೆಯಿಲ್ಲದ ಫೈಲಿನ {{PLURAL:\$3|ಮಾದರಿಯು|ಮಾದರಿಗಳು}} \$2.", 'filetype-missing' => 'ಈ ಫೈಲಿಗೆ ಉಪನಾಮ (extension ಉದಾ ".jpg") ಇಲ್ಲ.', +'empty-file' => 'ನೀವು ಸಮರ್ಪಿಸಿದ ಕಡತವು ಖಾಲಿಯಾಗಿತ್ತು.', 'large-file' => 'ಫೈಲುಗಳು $1 ಗಿಂತ ದೊಡ್ಡದಾಗಿರಬಾರದೆಂದು ಶಿಫಾರಿತ; ಈ ಫೈಲಿನ ಗಾತ್ರ $2.', 'largefileserver' => 'ಈ ಫೈಲು ಸರ್ವರ್‍ನಲ್ಲಿ ಸೇರ್ಪಡೆ ಮಾಡಲು ಶಿಫಾರಿತ ಗಾತ್ರಕ್ಕಿಂತ ದೊಡ್ಡದಾಗಿದೆ.', @@ -1092,7 +1088,6 @@ $2', ದಯವಿಟ್ಟು ಹಿಂದಕ್ಕೆ ಹೋಗಿ ಈ ಫೈಲನ್ನು ಹೊಸ ಹೆಸರಿನಲ್ಲಿ ಅಪ್ಲೋಡ್ ಮಾಡಿ. [[File:$1|thumb|center|$1]]', 'fileexists-shared-forbidden' => 'ಆ ಹೆಸರಿನಲ್ಲಿ ಫೈಲೊಂದು ಸಾಮೂಹಿಕ ಫೈಲಿನ ಆಗರದಲ್ಲಿ ಆಗಲೆ ಇದೆ; ದಯವಿಟ್ಟು ಹಿಂದಕ್ಕೆ ಹೋಗಿ ಈ ಫೈಲನ್ನು ಹೊಸ ಹೆಸರಿನಲ್ಲಿ ಅಪ್ಲೋಡ್ ಮಾಡಿ. [[File:$1|thumb|center|$1]]', -'successfulupload' => 'ಯಶಸ್ವಿ ಅಪ್ಲೋಡ್', 'uploadwarning' => 'ಅಪ್ಲೋಡ್ ಎಚ್ಚರಿಕೆ', 'savefile' => 'ಕಡತವನ್ನು ಉಳಿಸಿ', 'uploadedimage' => '"[[$1]]" ಅಪ್ಲೋಡ್ ಆಯಿತು', @@ -1110,6 +1105,7 @@ $2', ನೀವು ಈ ಫೈಲನ್ನು ಅಪ್ಲೋಡ್ ಮಾಡುವುದು ಸರಿಯೇ ಎಂದು ಮತ್ತೊಮ್ಮೆ ಪರೀಕ್ಷಿಸಿ. ತೀರ್ಮಾನಕ್ಕೆ ಪೂರಕವಾಗಲು ಈ ಫೈಲಿನ ಅಳಿಸುವಿಕೆ ದಾಖಲೆಯನ್ನು ನೀಡಲಾಗಿದೆ:", +'upload-success-subj' => 'ಯಶಸ್ವಿ ಅಪ್ಲೋಡ್', 'upload-file-error' => 'ಆಂತರಿಕ ದೋಷ', 'upload-file-error-text' => 'ಸರ್ವರ್‍ನಲ್ಲಿ ತಾತ್ಕಾಲಿಕ ಫೈಲನ್ನು ಸೃಷ್ಟಿಸುವಲ್ಲಿ ಒಂದು ಆಂತರಿಕ ದೋಷವಾಯಿತು. @@ -1371,7 +1367,6 @@ $2', # Watchlist 'watchlist' => 'ವೀಕ್ಷಣಾ ಪಟ್ಟಿ', 'mywatchlist' => 'ನನ್ನ ವೀಕ್ಷಣಾಪಟ್ಟಿ', -'watchlistfor' => "('''$1''' ಅವರ)", 'nowatchlist' => 'ನಿಮ್ಮ ವೀಕ್ಷಣಾಪಟ್ಟಿಯಲ್ಲಿ ಯಾವುದೇ ಪುಟಗಳಿಲ್ಲ', 'watchlistanontext' => 'ನಿಮ್ಮ ವೀಕ್ಷಣಾಪಟ್ಟಿಯನ್ನು ನೋಡಲು ಅಥವ ಸಂಪಾದಿಸಲು ದಯವಿಟ್ಟು $1 ಮಾಡಿ.', 'watchnologin' => 'ಲಾಗಿನ್ ಆಗಿಲ್ಲ', @@ -1573,7 +1568,6 @@ $2', 'ipb-edit-dropdown' => 'ತಡೆಹಿಡಿಯುವಿಕೆ ಕಾರಣಗಳನ್ನು ಸಂಪಾದಿಸು', 'ipb-unblock-addr' => '$1 ಖಾತೆಯ ತಡೆಯನ್ನು ತೆಗೆ', 'ipb-unblock' => 'ಬಳಕೆದಾರರ ಅಥವ IP ವಿಳಾಸದ ತಡೆಯನ್ನು ತೆಗೆ', -'ipb-blocklist-addr' => '$1 ಖಾತೆಯ ಪ್ರಸಕ್ತ ತಡೆಗಳನ್ನು ವೀಕ್ಷಿಸು', 'ipb-blocklist' => 'ಅಸ್ಥಿತ್ವದಲ್ಲಿರುವ ತಡೆಗಳನ್ನು ನೋಡು', 'unblockip' => 'ಬಳಕೆದಾರನ ತಡೆಯನ್ನು ತೆಗೆ', 'ipusubmit' => 'ಈ ವಿಳಾಸದ ತಡೆಯನ್ನು ತೆಗೆ', @@ -1816,10 +1810,10 @@ $1', # Media information 'thumbsize' => 'ಕಿರುನೋಟದ ಗಾತ್ರ:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|ಪುಟ|ಪುಟಗಳು}}', -'file-info' => '(ಫೈಲಿನ ಗಾತ್ರ: $1, MIME ಪ್ರಕಾರ: $2)', -'file-info-size' => '($1 × $2 ಚಿತ್ರಬಿಂದು, ಫೈಲಿನ ಗಾತ್ರ: $3, MIME ಪ್ರಕಾರ: $4)', +'file-info' => 'ಫೈಲಿನ ಗಾತ್ರ: $1, MIME ಪ್ರಕಾರ: $2', +'file-info-size' => '$1 × $2 ಚಿತ್ರಬಿಂದು, ಫೈಲಿನ ಗಾತ್ರ: $3, MIME ಪ್ರಕಾರ: $4', 'file-nohires' => 'ಇದಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ವಿವರವಾದ ನೋಟ ಇಲ್ಲ.', -'svg-long-desc' => '(SVG ಫೈಲು, ಸುಮಾರಾಗಿ $1 × $2 ಚಿತ್ರಬಿಂದುಗಳು, ಫೈಲಿನ ಗಾತ್ರ: $3)', +'svg-long-desc' => 'SVG ಫೈಲು, ಸುಮಾರಾಗಿ $1 × $2 ಚಿತ್ರಬಿಂದುಗಳು, ಫೈಲಿನ ಗಾತ್ರ: $3', 'show-big-image' => 'ಅತಿ ಹೆಚ್ಚು ವಿವರವಾದ ನೋಟ', 'show-big-image-thumb' => 'ಈ ಮುನ್ನೋಟದ ಅಳತೆ: $1 × $2 ಚಿತ್ರಬಿಂದುಗಳು', @@ -2095,6 +2089,14 @@ $5 # Special:Tags 'tags-edit' => 'ಸಂಪಾದಿಸಿ', +# Special:ComparePages +'comparepages' => 'ಪುಟಗಳನ್ನು ಹೋಲಿಸು', +'compare-page1' => 'ಪುಟ ೧', +'compare-page2' => 'ಪುಟ ೨', +'compare-rev1' => 'ಆವೃತ್ತಿ ೧', +'compare-rev2' => 'ಆವೃತ್ತಿ ೨', +'compare-submit' => 'ಹೋಲಿಸು', + # HTML forms 'htmlform-selectorother-other' => 'ಇತರ', diff --git a/languages/messages/MessagesKo.php b/languages/messages/MessagesKo.php index ad1a24b6..0db8232d 100644 --- a/languages/messages/MessagesKo.php +++ b/languages/messages/MessagesKo.php @@ -8,8 +8,10 @@ * @file * * @author Albamhandae + * @author Devunt * @author Ficell * @author Gapo + * @author Gjue * @author IRTC1015 * @author ITurtle * @author Klutzy @@ -54,9 +56,9 @@ $specialPageAliases = array( 'Disambiguations' => array( '동음이의', '동음이의문서' ), 'Userlogin' => array( '로그인' ), 'Userlogout' => array( '로그아웃' ), - 'CreateAccount' => array( '계정만들기' ), + 'CreateAccount' => array( '계정만들기', '가입' ), 'Preferences' => array( '환경설정' ), - 'Watchlist' => array( '주시문서목록' ), + 'Watchlist' => array( '주시문서목록', '주시목록' ), 'Recentchanges' => array( '최근바뀜' ), 'Upload' => array( '파일올리기', '그림올리기' ), 'Listfiles' => array( '파일', '그림', '파일목록', '그림목록' ), @@ -93,13 +95,15 @@ $specialPageAliases = array( 'Allpages' => array( '모든문서' ), 'Prefixindex' => array( '접두어찾기' ), 'Ipblocklist' => array( '차단된사용자', '차단목록' ), - 'Specialpages' => array( '특수기능' ), + 'Unblock' => array( '차단해제' ), + 'Specialpages' => array( '특수문서', '특수기능' ), 'Contributions' => array( '기여', '기여목록', '사용자기여' ), 'Emailuser' => array( '이메일보내기' ), 'Confirmemail' => array( '이메일인증' ), 'Whatlinkshere' => array( '가리키는문서', '링크하는문서' ), 'Recentchangeslinked' => array( '링크최근바뀜' ), 'Movepage' => array( '이동', '문서이동' ), + 'Blockme' => array( '자가차단' ), 'Booksources' => array( '책찾기' ), 'Categories' => array( '분류' ), 'Export' => array( '내보내기' ), @@ -135,7 +139,7 @@ $specialPageAliases = array( 'LinkSearch' => array( '외부링크찾기', '외부링크검색' ), 'DeletedContributions' => array( '삭제된기여' ), 'Tags' => array( '태그' ), - 'Activeusers' => array( '활동중인사용자' ), + 'Activeusers' => array( '활동적인사용자' ), ); $magicWords = array( @@ -145,7 +149,9 @@ $magicWords = array( 'forcetoc' => array( '0', '__목차보임__', '__FORCETOC__' ), 'toc' => array( '0', '__목차__', '__TOC__' ), 'noeditsection' => array( '0', '__단락편집숨김__', '__NOEDITSECTION__' ), + 'noheader' => array( '0', '__헤더숨김__', '__NOHEADER__' ), 'currentmonth' => array( '1', '현재월', 'CURRENTMONTH', 'CURRENTMONTH2' ), + 'currentmonth1' => array( '1', '현재월1', 'CURRENTMONTH1' ), 'currentmonthname' => array( '1', '현재월이름', 'CURRENTMONTHNAME' ), 'currentmonthnamegen' => array( '1', '현재월이름소유격', 'CURRENTMONTHNAMEGEN' ), 'currentmonthabbrev' => array( '1', '현재월이름약자', 'CURRENTMONTHABBREV' ), @@ -156,6 +162,7 @@ $magicWords = array( 'currenttime' => array( '1', '현재시분', '현재시각', 'CURRENTTIME' ), 'currenthour' => array( '1', '현재시', 'CURRENTHOUR' ), 'localmonth' => array( '1', '지역월', 'LOCALMONTH', 'LOCALMONTH2' ), + 'localmonth1' => array( '1', '지역월1', 'LOCALMONTH1' ), 'localmonthname' => array( '1', '지역월이름', 'LOCALMONTHNAME' ), 'localmonthnamegen' => array( '1', '지역월이름소유격', 'LOCALMONTHNAMEGEN' ), 'localmonthabbrev' => array( '1', '지역월이름약자', 'LOCALMONTHABBREV' ), @@ -190,7 +197,9 @@ $magicWords = array( 'talkpagenamee' => array( '1', '토론문서이름E', 'TALKPAGENAMEE' ), 'subjectpagename' => array( '1', '본문서이름', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ), 'subjectpagenamee' => array( '1', '본문서이름E', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ), + 'msg' => array( '0', '메시지:', 'MSG:' ), 'subst' => array( '0', '풀기:', 'SUBST:' ), + 'safesubst' => array( '0', '안전풀기:', 'SAFESUBST:' ), 'img_thumbnail' => array( '1', '섬네일', '썸네일', 'thumbnail', 'thumb' ), 'img_manualthumb' => array( '1', '섬네일=$1', '썸네일=$1', 'thumbnail=$1', 'thumb=$1' ), 'img_right' => array( '1', '오른쪽', 'right' ), @@ -199,7 +208,15 @@ $magicWords = array( 'img_width' => array( '1', '$1픽셀', '$1px' ), 'img_center' => array( '1', '가운데', 'center', 'centre' ), 'img_framed' => array( '1', '프레임', 'framed', 'enframed', 'frame' ), + 'img_frameless' => array( '1', '프레임없음', 'frameless' ), + 'img_page' => array( '1', '문서=$1', 'page=$1', 'page $1' ), 'img_border' => array( '1', '테두리', 'border' ), + 'img_baseline' => array( '1', '밑줄', 'baseline' ), + 'img_sub' => array( '1', '아래첨자', 'sub' ), + 'img_super' => array( '1', '위첨자', 'super', 'sup' ), + 'img_top' => array( '1', '위', 'top' ), + 'img_middle' => array( '1', '중간', 'middle' ), + 'img_bottom' => array( '1', '아래', 'bottom' ), 'img_link' => array( '1', '링크=$1', 'link=$1' ), 'sitename' => array( '1', '사이트이름', 'SITENAME' ), 'ns' => array( '0', '이름:', '이름공간:', 'NS:' ), @@ -208,7 +225,10 @@ $magicWords = array( 'localurle' => array( '0', '지역주소E:', 'LOCALURLE:' ), 'server' => array( '0', '서버', 'SERVER' ), 'servername' => array( '0', '서버이름', 'SERVERNAME' ), + 'scriptpath' => array( '0', '스크립트경로', 'SCRIPTPATH' ), + 'stylepath' => array( '0', '스타일경로', 'STYLEPATH' ), 'grammar' => array( '0', '문법:', 'GRAMMAR:' ), + 'gender' => array( '0', '성별:', 'GENDER:' ), 'currentweek' => array( '1', '현재주', 'CURRENTWEEK' ), 'currentdow' => array( '1', '현재요일숫자', 'CURRENTDOW' ), 'localweek' => array( '1', '지역주', 'LOCALWEEK' ), @@ -217,8 +237,10 @@ $magicWords = array( 'revisionday' => array( '1', '판일', 'REVISIONDAY' ), 'revisionday2' => array( '1', '판일2', 'REVISIONDAY2' ), 'revisionmonth' => array( '1', '판월', 'REVISIONMONTH' ), + 'revisionmonth1' => array( '1', '판월1', 'REVISIONMONTH1' ), 'revisionyear' => array( '1', '판년', 'REVISIONYEAR' ), 'revisiontimestamp' => array( '1', '판타임스탬프', 'REVISIONTIMESTAMP' ), + 'revisionuser' => array( '1', '판사용자', 'REVISIONUSER' ), 'plural' => array( '0', '복수:', '복수형:', 'PLURAL:' ), 'fullurl' => array( '0', '전체주소:', 'FULLURL:' ), 'fullurle' => array( '0', '전체주소E:', 'FULLURLE:' ), @@ -245,6 +267,8 @@ $magicWords = array( 'hiddencat' => array( '1', '__숨은분류__', '__HIDDENCAT__' ), 'pagesincategory' => array( '1', '분류문서수', 'PAGESINCATEGORY', 'PAGESINCAT' ), 'pagesize' => array( '1', '문서크기', 'PAGESIZE' ), + 'index' => array( '1', '__색인__', '__INDEX__' ), + 'noindex' => array( '1', '__색인거부__', '__NOINDEX__' ), 'numberingroup' => array( '1', '권한별사용자수', '그룹별사용자수', 'NUMBERINGROUP', 'NUMINGROUP' ), 'staticredirect' => array( '1', '__넘겨주기고정__', '__STATICREDIRECT__' ), 'protectionlevel' => array( '1', '보호수준', 'PROTECTIONLEVEL' ), @@ -269,7 +293,7 @@ $dateFormats = array( $messages = array( # User preference toggles -'tog-underline' => '링크에 밑줄치기:', +'tog-underline' => '링크 걸기:', 'tog-highlightbroken' => '없는 문서로 연결된 링크를 이렇게 보이기 (선택하지 않으면 이렇게? 보임)', 'tog-justify' => '문단 정렬하기', 'tog-hideminor' => '사소한 편집을 최근 바뀜에서 숨기기', @@ -283,8 +307,7 @@ $messages = array( 'tog-editsection' => '[편집] 링크로 부분 편집하기', 'tog-editsectiononrightclick' => '제목을 오른쪽 클릭해서 부분 편집하기 (자바스크립트)', 'tog-showtoc' => '문서의 차례 보여주기 (머릿글이 4개 이상인 경우)', -'tog-rememberpassword' => '이 컴퓨터에서 자동으로 로그인', -'tog-editwidth' => '편집창 너비를 화면 최대로 맞추기', +'tog-rememberpassword' => '이 브라우저에서 로그인 상태를 저장하기 (최대 $1일)', 'tog-watchcreations' => '내가 처음 만드는 문서를 주시문서 목록에 추가', 'tog-watchdefault' => '내가 편집하는 문서를 주시문서 목록에 추가', 'tog-watchmoves' => '내가 이동하는 문서를 주시문서 목록에 추가', @@ -425,35 +448,25 @@ $messages = array( 'qbpageinfo' => '문서 정보', 'qbmyoptions' => '내 문서', 'qbspecialpages' => '특수 문서', -'faq' => 'FAQ', +'faq' => '자주 묻는 질문', 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => '새 주제', -'vector-action-delete' => '삭제', -'vector-action-move' => '이동', -'vector-action-protect' => '보호', -'vector-action-undelete' => '되살리기', -'vector-action-unprotect' => '보호 해제', -'vector-namespace-category' => '분류', -'vector-namespace-help' => '도움말', -'vector-namespace-image' => '파일', -'vector-namespace-main' => '문서', -'vector-namespace-media' => '미디어 문서', -'vector-namespace-mediawiki' => '메시지', -'vector-namespace-project' => '프로젝트 문서', -'vector-namespace-special' => '특수 문서', -'vector-namespace-talk' => '토론', -'vector-namespace-template' => '틀', -'vector-namespace-user' => '사용자 문서', -'vector-view-create' => '생성', -'vector-view-edit' => '편집', -'vector-view-history' => '역사', -'vector-view-view' => '읽기', -'vector-view-viewsource' => '내용 보기', -'actions' => '행위', -'namespaces' => '이름공간', -'variants' => '변수', +'vector-action-addsection' => '새 주제', +'vector-action-delete' => '삭제', +'vector-action-move' => '이동', +'vector-action-protect' => '보호', +'vector-action-undelete' => '되살리기', +'vector-action-unprotect' => '보호 해제', +'vector-simplesearch-preference' => '향상된 검색어 제안 사용하기 (벡터 스킨 전용)', +'vector-view-create' => '생성', +'vector-view-edit' => '편집', +'vector-view-history' => '역사', +'vector-view-view' => '읽기', +'vector-view-viewsource' => '내용 보기', +'actions' => '행위', +'namespaces' => '이름공간', +'variants' => '변수', 'errorpagetitle' => '오류', 'returnto' => '$1(으)로 돌아갑니다.', @@ -514,6 +527,9 @@ $messages = array( 이 문서를 다시 열기 전에 잠시만 기다려주세요. $1', +'pool-timeout' => '잠금 대기 중 타임아웃', +'pool-queuefull' => '풀 큐가 가득 찼습니다.', +'pool-errorunknown' => '알 수 없는 오류', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} 소개', @@ -673,7 +689,8 @@ $2', 'yourname' => '계정 이름:', 'yourpassword' => '비밀번호:', 'yourpasswordagain' => '암호 재입력:', -'remembermypassword' => '로그인 상태를 저장하기', +'remembermypassword' => '이 컴퓨터에서 로그인 상태를 저장하기 (최대 $1일)', +'securelogin-stick-https' => '로그인 후에도 HTTPS 연결 상태를 유지합니다.', 'yourdomainname' => '도메인 이름', 'externaldberror' => '외부 인증 데이터베이스에 오류가 있거나, 외부 계정을 갱신할 권한이 없습니다.', 'login' => '로그인', @@ -690,6 +707,7 @@ $2', 'gotaccount' => "계정이 이미 있다면, '''$1'''.", 'gotaccountlink' => '로그인하세요', 'createaccountmail' => '이메일로 보내기', +'createaccountreason' => '이유:', 'badretype' => '암호가 서로 다릅니다.', 'userexists' => '입력하신 사용자 이름이 이미 등록되어 있습니다. 다른 이름으로 만들어주십시오.', @@ -711,6 +729,7 @@ $2', 다시 시도해 주세요.', 'passwordtooshort' => '암호는 적어도 $1자보다 길어야 합니다.', 'password-name-match' => '암호는 반드시 사용자 이름과 달라야 합니다.', +'password-login-forbidden' => '이 계정명과 비밀번호의 사용이 금지되어 있습니다.', 'mailmypassword' => '새 암호를 이메일로 보내기', 'passwordremindertitle' => '{{SITENAME}}에서 보내는 새 임시 암호', 'passwordremindertext' => 'IP 주소 $1에서 당신에게 {{SITENAME}} ($4)의 새 암호를 보내달라고 요청했습니다. @@ -745,6 +764,9 @@ $2', 'loginlanguagelabel' => '언어: $1', 'suspicious-userlogout' => '브라우저의 이상이 있거나 캐싱 프록시에서 로그아웃을 요청했기 때문에 로그아웃이 거부되었습니다.', +# E-mail sending +'php-mail-error-unknown' => 'PHP의 mail() 함수에서 알 수 없는 오류가 발생했습니다.', + # Password reset dialog 'resetpass' => '비밀번호 바꾸기', 'resetpass_announce' => '이메일로 받은 임시 암호로 로그인했습니다. 로그인을 마치려면 새 암호를 입력해 주세요:', @@ -793,10 +815,11 @@ $2', 'showlivepreview' => '실시간 미리 보기', 'showdiff' => '차이 보기', 'anoneditwarning' => "'''주의''': 로그인하고 있지 않습니다. 당신의 IP 주소가 문서 역사에 남게 됩니다.", +'anonpreviewwarning' => "'''당신은 지금 로그인하고 있지 않습니다. 문서를 저장하면 당신의 IP 주소가 문서 역사에 남게 됩니다.'''", 'missingsummary' => "'''알림:''' 편집 요약을 적지 않았습니다. 그대로 저장하면 편집 요약 없이 저장됩니다.", 'missingcommenttext' => '아래에 내용을 채워 넣어 주세요.', 'missingcommentheader' => "'''알림:''' 글의 제목을 입력하지 않았습니다. -다시 저장 버튼을 클릭하면, 글이 제목 없이 저장될 것입니다.", +다시 {{int:savearticle}} 버튼을 클릭하면 글이 제목 없이 저장됩니다.", 'summary-preview' => '편집 요약 미리 보기:', 'subject-preview' => '주제/제목 미리 보기:', 'blockedtitle' => '차단됨', @@ -861,8 +884,12 @@ $1, 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 'userjsyoucanpreview' => "'''안내''': JS 문서를 저장하기 전에 ‘{{int:showpreview}}’ 기능을 통해 작동을 확인해주세요.", 'usercsspreview' => "'''이것은 사용자 CSS의 미리 보기이며, 아직 저장하지 않았다는 것을 주의해 주세요!'''", 'userjspreview' => "'''이것은 자바스크립트 미리 보기로, 아직 저장하지 않았다는 것을 주의해 주세요!'''", +'sitecsspreview' => "'''이것은 이 CSS의 미리 보기일 뿐입니다.''' +'''아직 저장하지 않았다는 것을 주의해 주세요!'''", +'sitejspreview' => "'''이것은 이 자바스크립트 코드의 미리 보기일 뿐입니다.''' +'''아직 저장하지 않았다는 것을 주의해 주세요!'''", 'userinvalidcssjstitle' => "'''경고''': ‘$1’ 스킨은 없습니다. -.css와 .js 문서의 제목은 {{ns:user}}:Foo/monobook.css 처럼 소문자로 써야 합니다. {{ns:user}}:Foo/Monobook.css 와 같이 대문자로 쓸 경우 작동하지 않습니다.", +.css와 .js 문서의 제목은 {{ns:user}}:Foo/vector.css 처럼 소문자로 써야 합니다. {{ns:user}}:Foo/Vector.css 와 같이 대문자로 쓸 경우 작동하지 않습니다.", 'updated' => '(바뀜)', 'note' => "'''주의:'''", 'previewnote' => "'''지금 미리 보기로 보고 있는 내용은 아직 저장되지 않았습니다!'''", @@ -896,7 +923,6 @@ $1, 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 'copyrightwarning2' => "{{SITENAME}}에서의 모든 기여는 다른 사용자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
    또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 내용에 대해서는 $1 문서를 읽어 주세요). '''저작권이 있는 내용을 허가 없이 저장하지 마세요!'''", -'longpagewarning' => "'''주의: 이 문서의 용량이 $1킬로바이트입니다. 몇몇 웹 브라우저에서는 32킬로바이트 이상의 문서를 편집할 때 문제가 발생할 수 있습니다. 만약의 경우를 대비하여, 문서를 여러 문단으로 나누어서 편집할 수 있습니다.'''", 'longpageerror' => "'''오류: 문서의 크기가 $1킬로바이트로서 가능한 최대 크기인 $2킬로바이트보다 큽니다. 저장할 수 없습니다.'''", 'readonlywarning' => "'''주의: 데이터베이스가 관리를 위해 잠겨 있습니다. 따라서 문서를 편집한 내용을 지금 저장할 수 없습니다. 편집 내용을 복사 붙여넣기 등을 사용하여 일단 다른 곳에 저장한 후, 나중에 다시 시도해 주세요.''' @@ -1074,6 +1100,8 @@ $1", 'logdelete-failure' => "'''로그 보이기 설정을 바꾸지 못했습니다:''' $1", 'revdel-restore' => '보이기 설정 변경', +'revdel-restore-deleted' => '삭제된 판', +'revdel-restore-visible' => '공개된 판', 'pagehist' => '문서 역사', 'deletedhist' => '삭제된 역사', 'revdelete-content' => '내용', @@ -1143,11 +1171,13 @@ $1", # Diffs 'history-title' => '‘$1’ 문서의 변경 내력', 'difference' => '(버전 사이의 차이)', +'difference-multipage' => '(문서간의 차이)', 'lineno' => '$1번째 줄:', 'compareselectedversions' => '선택된 판들을 비교하기', 'showhideselectedversions' => '선택한 판을 보이기/숨기기', 'editundo' => '편집 취소', -'diff-multi' => '(중간의 편집 $1 개 숨겨짐)', +'diff-multi' => '({{PLURAL:$2|한 사용자의|사용자 $2명의}} 중간의 편집 $1개 숨겨짐)', +'diff-multi-manyusers' => '({{PLURAL:$2|한 사용자의|사용자 $2명 이상의}} 중간의 편집 $1개 숨겨짐)', # Search results 'searchresults' => '검색 결과', @@ -1182,6 +1212,7 @@ $1", 'searchprofile-everything-tooltip' => '토론 문서를 포함한 모든 문서 찾기', 'searchprofile-advanced-tooltip' => '다음 설정된 이름공간에서 찾기', 'search-result-size' => '$1 ($2 단어)', +'search-result-category-size' => '문서 {{PLURAL:$1|1|$1}}개, 하위 분류 {{PLURAL:$2|1|$2}}개, 파일 {{PLURAL:$3|1|$3}}', 'search-result-score' => '유사도: $1%', 'search-redirect' => '($1에서 넘어옴)', 'search-section' => '($1 문단)', @@ -1256,6 +1287,7 @@ $1", 'contextlines' => '결과마다 보이는 줄 수:', 'contextchars' => '각 줄에 보이는 글 수:', 'stub-threshold' => '링크를 토막글 형식으로 표시할 문서 크기 (바이트 수):', +'stub-threshold-disabled' => '비활성화됨', 'recentchangesdays' => '최근 바뀜에 표시할 날짜 수:', 'recentchangesdays-max' => '(최대 $1일)', 'recentchangescount' => '기본으로 표시할 편집 수:', @@ -1289,6 +1321,7 @@ $1", 'prefs-files' => '파일', 'prefs-custom-css' => '사용자 CSS', 'prefs-custom-js' => '사용자 자바스크립트', +'prefs-common-css-js' => '모든 스킨에 적용되는 공통 CSS/자바스크립트:', 'prefs-reset-intro' => '이 사이트의 기본 값으로 환경 설정을 되돌릴 수 있습니다. 복구할 수 없습니다.', 'prefs-emailconfirm-label' => '이메일 인증:', @@ -1324,9 +1357,15 @@ $1", 'prefs-advancedrendering' => '고급 설정', 'prefs-advancedsearchoptions' => '고급 설정', 'prefs-advancedwatchlist' => '고급 설정', -'prefs-display' => '보이기 설정', +'prefs-displayrc' => '보이기 설정', +'prefs-displaysearchoptions' => '표시 설정', +'prefs-displaywatchlist' => '표시 설정', 'prefs-diffs' => '차이', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => '이메일 주소가 유효한 것으로 보입니다.', +'email-address-validity-invalid' => '유효한 이메일 주소를 입력해주십시오.', + # User rights 'userrights' => '사용자 권한 관리', 'userrights-lookup-user' => '사용자 권한 관리', @@ -1410,6 +1449,7 @@ $1", 'right-hideuser' => '사용자 이름을 차단하고 숨김', 'right-ipblock-exempt' => 'IP 차단, 자동 차단, 광역 차단을 무시', 'right-proxyunbannable' => '프록시 자동 차단을 적용하지 않음', +'right-unblockself' => '자기 자신을 차단 해제하기', 'right-protect' => '보호 수준 변경 및 보호된 문서 편집', 'right-editprotected' => '보호된 문서 편집 (연쇄적 보호 제외)', 'right-editinterface' => '사용자 인터페이스를 편집', @@ -1432,7 +1472,6 @@ $1", 'right-siteadmin' => '데이터베이스를 잠그거나 잠금 해제', 'right-reset-passwords' => '다른 사용자의 비밀번호를 변경', 'right-override-export-depth' => '5단계로 링크된 문서를 포함하여 문서를 내보내기', -'right-versiondetail' => '소프트웨어 버전에 대한 자세한 정보를 보기', 'right-sendemail' => '다른 사용자에게 이메일 보내기', # User rights log @@ -1483,14 +1522,9 @@ $1", 'recentchanges-legend' => '최근 바뀜 설정', 'recentchangestext' => '위키의 최근 바뀜 내역이 나와 있습니다.', 'recentchanges-feed-description' => '위키의 최근 바뀜', -'recentchanges-label-legend' => '범례: $1.', -'recentchanges-legend-newpage' => '$1 - 새 문서', 'recentchanges-label-newpage' => '새로운 문서', -'recentchanges-legend-minor' => '$1 - 사소한 편집', 'recentchanges-label-minor' => '사소한 편집', -'recentchanges-legend-bot' => '$1 - 봇 편집', 'recentchanges-label-bot' => '봇의 편집', -'recentchanges-legend-unpatrolled' => '$1 - 검토되지 않은 편집', 'recentchanges-label-unpatrolled' => '아직 검토되지 않은 편집', 'rcnote' => "다음은 $4 $5 까지의 '''$2'''일동안 바뀐 '''$1'''개의 문서입니다.", 'rcnotefrom' => "다음은 '''$2'''에서부터 바뀐 '''$1'''개의 문서입니다.", @@ -1537,6 +1571,9 @@ $1", 'upload_directory_missing' => '파일 올리기용 디렉토리($1)가 없고 웹 서버가 생성하지 못했습니다.', 'upload_directory_read_only' => '파일 저장 디렉토리($1)에 쓰기 권한이 없습니다.', 'uploaderror' => '올리기 오류', +'upload-recreate-warning' => "'''경고: 이 파일로 된 이름이 삭제되었거나 옮겨졌습니다.''' + +이 문서의 최근 삭제 기록과 이동 기록을 참고하십시오:", 'uploadtext' => "파일을 올리기 위해서는 아래의 양식을 채워주세요. [[Special:FileList|파일 목록]]에서 이전에 올라온 파일을 찾을 수 있습니다. [[Special:Log/upload|올리기 기록]]에는 파일이 올라온 기록이 남습니다. 삭제 기록은 [[Special:Log/delete|삭제 로그]]에서 볼 수 있습니다. @@ -1569,6 +1606,17 @@ $1", 'filetype-unwanted-type' => "'''\".\$1\"''' 확장자는 추천하지 않습니다. 추천하는 {{PLURAL:\$3|파일 확장자}}는 \$2입니다.", 'filetype-banned-type' => "{{plural:$3}}‘'''.$1'''’ 형식의 파일은 올릴 수 없습니다. $2 형식만 사용할 수 있습니다.", 'filetype-missing' => '파일에 확장자(‘.jpg’ 등)가 없습니다.', +'empty-file' => '당신이 올린 파일이 비어 있습니다.', +'file-too-large' => '올리려는 파일이 너무 큽니다.', +'filename-tooshort' => '파일 이름이 너무 짧습니다.', +'filetype-banned' => '이러한 종류의 파일은 금지되어 있습니다.', +'verification-error' => '이 파일은 파일 확인 절차를 통과하지 않았습니다.', +'hookaborted' => '당신이 수정하려고 한 것이 확장 기능 훅에 의해 중지되었습니다.', +'illegal-filename' => '이 파일 이름은 허용되지 않습니다.', +'overwrite' => '기존 파일을 덮어쓰는 것은 허용되지 않습니다.', +'unknown-error' => '알 수 없는 오류가 발생했습니다.', +'tmp-create-error' => '임시 파일을 생성할 수 없습니다.', +'tmp-write-error' => '임시 파일을 작성하는 데 오류가 발생했습니다.', 'large-file' => '파일 크기는 $1을 넘지 않는 것을 추천합니다. 이 파일의 크기는 $2입니다.', 'largefileserver' => '이 파일의 크기가 서버에서 허용된 설정보다 큽니다.', 'emptyfile' => '올리려는 파일이 빈 파일입니다. @@ -1597,13 +1645,14 @@ $1", 파일을 업로드하길 원하신다면 뒤로 돌아가서 다른 이름으로 시도해 주시기 바랍니다. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => '{{PLURAL:$1}}현재 올리고 있는 파일이 아래 파일과 중복됩니다:', 'file-deleted-duplicate' => '이 파일과 같은 파일 ([[:$1]])이 이전에 삭제된 적이 있습니다. 파일을 다시 올리기 전에 문서의 삭제 기록을 확인해 주시기 바랍니다.', -'successfulupload' => '올리기 성공', 'uploadwarning' => '올리기 경고', 'uploadwarning-text' => '아래의 파일 설명을 수정하고 다시 시도해 주세요.', 'savefile' => '파일 저장', 'uploadedimage' => '‘[[$1]]’ 파일을 올렸습니다.', 'overwroteimage' => '‘[[$1]]’ 파일의 새 버전을 올렸습니다.', 'uploaddisabled' => '올리기 비활성화됨', +'copyuploaddisabled' => 'URL로 파일 올리기가 비활성화되어 있습니다.', +'uploadfromurl-queued' => '당신의 올리기 명령이 기록되었습니다.', 'uploaddisabledtext' => '파일 올리기 기능이 비활성화되어 있습니다.', 'php-uploaddisabledtext' => 'PHP 파일 올리기가 비활성화되었습니다. 파일 올리기 설정을 확인하십시오.', 'uploadscripted' => '이 파일에는 HTML이나 다른 스크립트 코드가 포함되어 있어, 웹 브라우저에서 오류를 일으킬 수 있습니다.', @@ -1638,6 +1687,14 @@ JD # 제놉틱 MGP # 펜탁스 PICT # 기타 # ', +'upload-success-subj' => '올리기 성공', +'upload-success-msg' => '파일을 [$2]에서 성공적으로 올렸습니다. 당신이 올린 파일이 여기 있습니다: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => '올리기 실패', +'upload-failure-msg' => '[$2]에서 파일을 올리는 중 문제가 발생했습니다: + +$1', +'upload-warning-subj' => '파일 올리기 경고', +'upload-warning-msg' => '[$2]에서 파일을 올리는 데 문제가 있습니다. 이 문제를 해결하려면 [[Special:Upload/stash/$1|올리기 양식]]으로 되돌아가십시오.', 'upload-proto-error' => '잘못된 프로토콜', 'upload-proto-error-text' => '파일을 URL로 올리려면 http://이나 ftp://로 시작해야 합니다.', @@ -1650,20 +1707,21 @@ PICT # 기타 'upload-http-error' => 'HTTP 오류 발생: $1', # img_auth script messages -'img-auth-accessdenied' => '접근 거부됨', -'img-auth-nopathinfo' => 'PATH_INFO 가 빠졌습니다. +'img-auth-accessdenied' => '접근 거부됨', +'img-auth-nopathinfo' => 'PATH_INFO 가 빠졌습니다. 서버에 이 정보가 설정되어 있지 않습니다. CGI 기반이거나 img_auth 를 지원하지 않을 수 있습니다. http://www.mediawiki.org/wiki/Manual:Image_Authorization 를 참고하세요.', -'img-auth-notindir' => '요청한 경로가 설정한 업로드 디렉토리에 없습니다.', -'img-auth-badtitle' => '"$1"에서 바른 제목을 만들 수 없습니다.', -'img-auth-nologinnWL' => '당신은 로그인하지 않았으며 "$1" 파일은 화이트리스트에 존재하지 않습니다.', -'img-auth-nofile' => '"$1" 파일이 없습니다.', -'img-auth-isdir' => '"$1" 디렉토리에 접근을 시도했습니다. +'img-auth-notindir' => '요청한 경로가 설정한 업로드 디렉토리에 없습니다.', +'img-auth-badtitle' => '"$1"에서 바른 제목을 만들 수 없습니다.', +'img-auth-nologinnWL' => '당신은 로그인하지 않았으며 "$1" 파일은 화이트리스트에 존재하지 않습니다.', +'img-auth-nofile' => '"$1" 파일이 없습니다.', +'img-auth-isdir' => '"$1" 디렉토리에 접근을 시도했습니다. 파일에만 접근할 수 있습니다.', -'img-auth-streaming' => '‘$1’ 파일을 전송하는 중입니다.', -'img-auth-public' => 'img_auth.php는 개인 위키 파일을 외부 사이트로 전송하는 기능입니다. 이 기능은 기본적으로 공개적인 위키에서 사용하도록 설계되어 있으며, 보안적인 문제로 기본적으로 img_auth.php 기능은 비활성화되어 있습니다.', -'img-auth-noread' => '‘$1’ 파일을 볼 권한이 없습니다.', +'img-auth-streaming' => '‘$1’ 파일을 전송하는 중입니다.', +'img-auth-public' => 'img_auth.php는 개인 위키 파일을 외부 사이트로 전송하는 기능입니다. 이 기능은 기본적으로 공개적인 위키에서 사용하도록 설계되어 있으며, 보안적인 문제로 기본적으로 img_auth.php 기능은 비활성화되어 있습니다.', +'img-auth-noread' => '‘$1’ 파일을 볼 권한이 없습니다.', +'img-auth-bad-query-string' => 'URL에 잘못된 쿼리 문자열이 있습니다.', # HTTP errors 'http-invalid-url' => '잘못된 URL: $1', @@ -1696,6 +1754,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.', 'listfiles_search_for' => '다음 이름을 가진 미디어 찾기:', 'imgfile' => '파일', 'listfiles' => '파일 목록', +'listfiles_thumb' => '섬네일', 'listfiles_date' => '날짜', 'listfiles_name' => '이름', 'listfiles_user' => '사용자', @@ -1811,8 +1870,8 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.', 'statistics-edits' => '{{SITENAME}} 설치 후 문서의 전체 편집 횟수', 'statistics-edits-average' => '문서당 평균 편집 횟수', 'statistics-views-total' => '총 방문 수', +'statistics-views-total-desc' => '존재하지 않는 문서나 특수 문서에 대한 방문수는 집계되지 않았습니다.', 'statistics-views-peredit' => '편집당 방문 횟수', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Job queue]의 길이', 'statistics-users' => '등록된 [[Special:ListUsers|사용자]]', 'statistics-users-active' => '활동적인 사용자', 'statistics-users-active-desc' => '최근 $1일 동안 활동한 사용자', @@ -1827,7 +1886,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.', 'doubleredirects' => '이중 넘겨주기 목록', 'doubleredirectstext' => '이 문서는 다른 넘겨주기 문서로 넘겨주고 있는 문서의 목록입니다. 매 줄에는 첫 번째 문서와 두 번째 문서의 링크가 있습니다. 그리고 보통 첫 번째 문서가 넘겨주어야 할 "실제" 문서인 두 번째 넘겨주기의 대상이 있습니다. -취소선이 그인 부분은 이미 해결되었습니다.', +취소선이 그인 부분은 이미 해결되었습니다.', 'double-redirect-fixed-move' => '[[$1]] 문서를 옮겼습니다. 이 문서는 이제 [[$2]] 문서로 넘겨줍니다.', 'double-redirect-fixer' => '넘겨주기 수리꾼', @@ -1850,6 +1909,8 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.', 'nmembers' => '문서 $1개', 'nrevisions' => '편집 $1개', 'nviews' => '$1 번 읽음', +'nimagelinks' => '{{PLURAL:$1}}개 문서에서 사용 중', +'ntransclusions' => '{{PLURAL:$1}}개 문서에서 사용 중', 'specialpage-empty' => '명령에 대한 결과가 없습니다.', 'lonelypages' => '외톨이 문서 목록', 'lonelypagestext' => '{{SITENAME}}에서 다른 모든 문서에서 링크되거나 틀로 포함되지 않은 문서의 목록입니다.', @@ -2006,34 +2067,40 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.', 'listgrouprights-removegroup-self-all' => '자신의 계정에서 모든 권한을 해제', # E-mail user -'mailnologin' => '보낼 이메일 주소가 없음', -'mailnologintext' => '다른 사용자에게 이메일을 보내려면, [[Special:UserLogin|로그인]]한 다음 [[Special:Preferences|사용자 환경 설정]]에서 자신의 이메일 주소를 저장해야 합니다.', -'emailuser' => '이메일 보내기', -'emailpage' => '사용자에게 이메일 보내기', -'emailpagetext' => '이 사용자가 환경 설정에 올바른 이메일 주소를 적었다면, 아래 양식을 통해 이메일을 보낼 수 있습니다. +'mailnologin' => '보낼 이메일 주소가 없음', +'mailnologintext' => '다른 사용자에게 이메일을 보내려면, [[Special:UserLogin|로그인]]한 다음 [[Special:Preferences|사용자 환경 설정]]에서 자신의 이메일 주소를 저장해야 합니다.', +'emailuser' => '이메일 보내기', +'emailpage' => '사용자에게 이메일 보내기', +'emailpagetext' => '이 사용자가 환경 설정에 올바른 이메일 주소를 적었다면, 아래 양식을 통해 이메일을 보낼 수 있습니다. 이메일을 받은 사용자가 바로 답장할 수 있도록 하기 위해 당신이 [[Special:Preferences|사용자 환경 설정]]에 적은 이메일 주소가 "발신자" 정보에 들어갑니다. 따라서 수신자가 당신에게 직접 답장을 보낼 수 있습니다.', -'usermailererror' => '메일 객체에서 오류 발생:', -'defemailsubject' => '{{SITENAME}} 이메일', -'noemailtitle' => '이메일 주소 없음', -'noemailtext' => '이 사용자는 올바른 이메일 주소를 입력하지 않았습니다.', -'nowikiemailtitle' => '이메일이 허용되지 않음', -'nowikiemailtext' => '이 사용자는 다른 사용자로부터의 이메일을 받지 않도록 설정하였습니다.', -'email-legend' => '{{SITENAME}}의 다른 사용자에게 이메일을 보내기', -'emailfrom' => '이메일 발신자:', -'emailto' => '수신자:', -'emailsubject' => '제목:', -'emailmessage' => '내용:', -'emailsend' => '보내기', -'emailccme' => '사본을 내 이메일로도 보내기', -'emailccsubject' => '$1에게 보낸 메일 사본: $2', -'emailsent' => '이메일 보냄', -'emailsenttext' => '이메일을 보냈습니다.', -'emailuserfooter' => '이 이메일은 {{SITENAME}}의 $1 사용자가 $2 사용자에게 "이메일 보내기" 기능을 통해 전송되었습니다.', +'usermailererror' => '메일 객체에서 오류 발생:', +'defemailsubject' => '{{SITENAME}} 이메일', +'usermaildisabled' => '사용자 이메일 비활성화됨', +'usermaildisabledtext' => '당신은 이 위키에서 다른 사용자에게 메일을 보낼 수 없습니다', +'noemailtitle' => '이메일 주소 없음', +'noemailtext' => '이 사용자는 올바른 이메일 주소를 입력하지 않았습니다.', +'nowikiemailtitle' => '이메일이 허용되지 않음', +'nowikiemailtext' => '이 사용자는 다른 사용자로부터의 이메일을 받지 않도록 설정하였습니다.', +'email-legend' => '{{SITENAME}}의 다른 사용자에게 이메일을 보내기', +'emailfrom' => '이메일 발신자:', +'emailto' => '수신자:', +'emailsubject' => '제목:', +'emailmessage' => '내용:', +'emailsend' => '보내기', +'emailccme' => '사본을 내 이메일로도 보내기', +'emailccsubject' => '$1에게 보낸 메일 사본: $2', +'emailsent' => '이메일 보냄', +'emailsenttext' => '이메일을 보냈습니다.', +'emailuserfooter' => '이 이메일은 {{SITENAME}}의 $1 사용자가 $2 사용자에게 "이메일 보내기" 기능을 통해 전송되었습니다.', + +# User Messenger +'usermessage-summary' => '시스템 메시지 남기기', +'usermessage-editor' => '시스템 메신저', # Watchlist 'watchlist' => '주시문서 목록', 'mywatchlist' => '내 주시문서 목록', -'watchlistfor' => "('''$1'''의 목록)", +'watchlistfor2' => '사용자:$1 $2', 'nowatchlist' => '주시하는 문서가 아직 없습니다.', 'watchlistanontext' => '주시문서 목록을 보거나 고치려면 $1 하세요.', 'watchnologin' => '로그인하지 않음', @@ -2093,6 +2160,9 @@ $NEWPAGE {{SITENAME}} 알림 시스템 -- +이메일 알림 설정을 바꾸시려면 이곳을 방문해주세요: +{{fullurl:{{#special:Preferences}}}} + 주시문서 설정을 바꾸려면 다음을 사용하세요: {{fullurl:{{#special:Watchlist}}/edit}} @@ -2148,7 +2218,10 @@ $UNWATCHURL 'revertpage' => '[[Special:Contributions/$2|$2]]([[User talk:$2|토론]])의 편집을 [[User:$1|$1]]의 마지막 버전으로 되돌림', 'revertpage-nouser' => '(계정 이름 삭제됨)의 편집을 [[User:$1|$1]]의 마지막 편집으로 되돌림', 'rollback-success' => '$1의 편집을 $2의 마지막 버전으로 되돌렸습니다.', -'sessionfailure' => '로그인 세션에 문제가 발생한 것 같습니다. 세션 하이재킹을 막기 위해 동작이 취소되었습니다. 브라우저의 "뒤로" 버튼을 누르고 문서를 새로고침한 후에 다시 시도해 주세요.', + +# Edit tokens +'sessionfailure-title' => '세션 손실', +'sessionfailure' => '로그인 세션에 문제가 발생한 것 같습니다. 세션 하이재킹을 막기 위해 동작이 취소되었습니다. 브라우저의 "뒤로" 버튼을 누르고 문서를 새로고침한 후에 다시 시도해 주세요.', # Protect 'protectlogpage' => '문서 보호 기록', @@ -2279,18 +2352,22 @@ $1', 'month' => '월:', 'year' => '연도:', -'sp-contributions-newbies' => '새 사용자의 기여만 보기', -'sp-contributions-newbies-sub' => '새 사용자들의 기여', -'sp-contributions-newbies-title' => '새 사용자의 기여', -'sp-contributions-blocklog' => '차단 기록', -'sp-contributions-deleted' => '삭제된 기여 목록', -'sp-contributions-logs' => '기록', -'sp-contributions-talk' => '토론', -'sp-contributions-userrights' => '사용자 권한 관리', -'sp-contributions-blocked-notice' => '이 사용자는 현재 차단되어 있습니다. 해당 사용자의 차단 기록은 다음과 같습니다.', -'sp-contributions-search' => '기여 검색', -'sp-contributions-username' => 'IP 주소 혹은 계정 이름:', -'sp-contributions-submit' => '찾기', +'sp-contributions-newbies' => '새 사용자의 기여만 보기', +'sp-contributions-newbies-sub' => '새 사용자들의 기여', +'sp-contributions-newbies-title' => '새 사용자의 기여', +'sp-contributions-blocklog' => '차단 기록', +'sp-contributions-deleted' => '삭제된 기여 목록', +'sp-contributions-uploads' => '파일 올리기', +'sp-contributions-logs' => '기록', +'sp-contributions-talk' => '토론', +'sp-contributions-userrights' => '사용자 권한 관리', +'sp-contributions-blocked-notice' => '이 사용자는 현재 차단되어 있습니다. 해당 사용자의 차단 기록은 다음과 같습니다.', +'sp-contributions-blocked-notice-anon' => '이 IP 주소는 현재 차단되어 있습니다. +아래의 최근 차단 기록을 참고하십시오.', +'sp-contributions-search' => '기여 검색', +'sp-contributions-username' => 'IP 주소 혹은 계정 이름:', +'sp-contributions-toponly' => '최신판만 보기', +'sp-contributions-submit' => '찾기', # What links here 'whatlinkshere' => '여기를 가리키는 문서', @@ -2350,7 +2427,6 @@ $1', 'ipb-edit-dropdown' => '차단 이유 목록 편집하기', 'ipb-unblock-addr' => '$1 차단 해제하기', 'ipb-unblock' => '사용자/IP 주소 차단 해제하기', -'ipb-blocklist-addr' => '$1의 현재 차단 기록 보기', 'ipb-blocklist' => '현재 차단 기록 보기', 'ipb-blocklist-contribs' => '$1의 기여', 'unblockip' => '사용자 차단 해제', @@ -2420,6 +2496,8 @@ $1 사용자는 이미 차단되었습니다. 차단 설정을 바꾸시겠습 'sorbs_create_account_reason' => '당신의 IP 주소는 {{SITENAME}}에서 사용하는 DNSBL 공개 프록시 목록에 들어 있습니다. 계정을 만들 수 없습니다.', 'cant-block-while-blocked' => '당신이 차단되어 있는 동안에는 다른 사용자를 차단할 수 없습니다.', 'cant-see-hidden-user' => '당신이 차단하려 하는 사용자는 이미 차단되었고 계정 숨김 처리되었습니다. 당신이 계정 숨기기 권한을 갖고 있지 않기 때문에, 이 사용자의 차단 기록을 보거나 차단 설정을 변경할 수 없습니다.', +'ipbblocked' => '당신은 차단되어 있기 때문에 다른 사용자를 차단하거나 차단을 해제할 수 없습니다.', +'ipbnounblockself' => '당신은 자기 스스로를 차단 해제할 수 없습니다.', # Developer tools 'lockdb' => '데이터베이스 잠그기', @@ -2456,6 +2534,20 @@ $1 사용자는 이미 차단되었습니다. 차단 설정을 바꾸시겠습 '''주의!''' 자주 사용하는 문서를 이동하면 위험한 결과를 가져올 수 있습니다. 이동하기 전에, 이 문서를 이동해도 문제가 없다는 것을 확인해주세요.", +'movepagetext-noredirectfixer' => "이 양식을 이용해 문서의 이름을 바꾸고 문서의 모든 역사를 옮길 것입니다. +이전의 제목은 새 제목으로 넘겨줄 것입니다. +[[Special:DoubleRedirects|이중 넘겨주기]]나 [[Special:BrokenRedirects|끊긴 넘겨주기]]가 있는지 확인해주십시오. +당신은 넘겨주기 링크가 제대로 향하고 있는지 확인하여야 합니다. + +참고로 새 제목을 가진 문서가 이미 있다면 다음 경우에 해당하지 않으면 이 문서는 옮겨지지 '''않을''' 것입니다. +* 비어 있거나, +* 넘겨주기 문서이며, +* 과거에 편집 내력이 없는 경우 +이는 당신이 실수로 문서를 옮겼을 때 되돌릴 수 있으며 이미 있는 문서를 덮어쓸 수 없음을 의미합니다. + +'''경고!''' +방문 수나 이 문서를 향하는 링크가 많은 문서일 경우 심각한 문제를 초래할 수 있습니다. +문서를 이동하기 전에 이러한 행동이 초래할 수 있는 결과에 대해 숙지하시기 바랍니다.", 'movepagetalktext' => "딸린 토론 문서도 자동으로 이동합니다. 하지만 다음의 경우는 '''이동하지 않습니다''': * 이동할 이름으로 된 문서가 이미 있는 경우 * 아래의 선택을 해제하는 경우 @@ -2512,6 +2604,7 @@ $1 사용자는 이미 차단되었습니다. 차단 설정을 바꾸시겠습 'immobile-source-page' => '이 문서는 이동할 수 없습니다.', 'immobile-target-page' => '새 이름으로 옮길 수 없습니다.', 'imagenocrossnamespace' => '파일을 파일이 아닌 이름공간으로 옮길 수 없습니다.', +'nonfile-cannot-move-to-file' => '파일이 아닌 문서를 파일 이름공간으로 옮길 수 없습니다.', 'imagetypemismatch' => '새 파일의 확장자가 원래의 확장자와 일치하지 않습니다.', 'imageinvalidfilename' => '새 파일 이름이 잘못되었습니다.', 'fix-double-redirects' => '기존 이름을 가리키는 넘겨주기를 갱신', @@ -2585,10 +2678,12 @@ $1 사용자는 이미 차단되었습니다. 차단 설정을 바꾸시겠습 'import-interwiki-namespace' => '새 이름공간:', 'import-upload-filename' => '파일 이름:', 'import-comment' => '이유:', -'importtext' => '원본 위키에서 [[Special:Export|내보내기]] 기능을 사용해 파일을 내려받아서 여기에 올려주세요.', +'importtext' => '원본 위키에서 [[Special:Export|내보내기]] 기능을 사용해 파일을 내려받으십시오. +그리고 당신의 컴퓨터에 저장해 둔 후 여기에 올려주세요.', 'importstart' => '문서를 가져오는 중...', 'import-revision-count' => '판 $1개', 'importnopages' => '가져올 문서가 없습니다.', +'imported-log-entries' => '로그 항목 $1개를 가져왔습니다.', 'importfailed' => '가져오기 실패: $1', 'importunknownsource' => '알 수 없는 가져오기 자료 유형', 'importcantopen' => '파일을 열 수 없습니다.', @@ -2685,6 +2780,8 @@ $1 사용자는 이미 차단되었습니다. 차단 설정을 바꾸시겠습 'tooltip-rollback' => '"되돌리기" 기능을 사용하면 이 문서에 대한 마지막 기여자의 편집을 모두 되돌릴 수 있습니다.', 'tooltip-undo' => '"편집 취소" 기능을 사용하면 이 편집이 되돌려지고, 차이보기 기능이 미리보기 형식으로 나타납니다. 편집 요약에 이 편집을 왜 되돌리는지에 대한 이유를 쓸 수 있습니다.', +'tooltip-preferences-save' => '환경 설정 저장하기', +'tooltip-summary' => '짧은 편집 요약을 적어주세요', # Stylesheets 'common.css' => '/** 이 CSS 설정은 모든 스킨에 적용됩니다 */', @@ -2799,14 +2896,17 @@ $1', 'imagemaxsize' => "그림 최대 크기:
    ''(파일 문서에 적용되는 기능)''", 'thumbsize' => '섬네일 크기:', 'widthheightpage' => '$1×$2, $3페이지', -'file-info' => '(파일 크기: $1, MIME 종류: $2)', -'file-info-size' => '($1 × $2 픽셀, 파일 크기: $3, MIME 종류: $4)', +'file-info' => '파일 크기: $1, MIME 종류: $2', +'file-info-size' => '$1 × $2 픽셀, 파일 크기: $3, MIME 종류: $4', 'file-nohires' => '최대 해상도입니다.', -'svg-long-desc' => '(SVG 파일, 실제 크기 $1 × $2 픽셀, 파일 크기 $3)', +'svg-long-desc' => 'SVG 파일, 실제 크기 $1 × $2 픽셀, 파일 크기 $3', 'show-big-image' => '최대 해상도', 'show-big-image-thumb' => '미리보기 크기: $1 × $2 픽셀', 'file-info-gif-looped' => '반복됨', 'file-info-gif-frames' => '$1 프레임', +'file-info-png-looped' => '반복됨', +'file-info-png-repeat' => '$1번 재생됨', +'file-info-png-frames' => '$1 프레임', # Special:NewFiles 'newimages' => '새 파일 목록', @@ -2969,6 +3069,7 @@ Variants for Chinese language 'exif-gpsareainformation' => 'GPS 구역 이름', 'exif-gpsdatestamp' => 'GPS 날짜', 'exif-gpsdifferential' => 'GPS 차이 보정', +'exif-objectname' => '짧은 제목', # EXIF attributes 'exif-compression-1' => '압축되지 않음', @@ -3126,27 +3227,27 @@ Variants for Chinese language 'limitall' => '모두', # E-mail address confirmation -'confirmemail' => '이메일 주소 확인', -'confirmemail_noemail' => '[[Special:Preferences|환경 설정]]에 이메일을 설정하지 않았습니다.', -'confirmemail_text' => '{{SITENAME}}에서는 이메일 기능을 사용하기 전에 이메일 인증을 받아야 합니다. +'confirmemail' => '이메일 주소 확인', +'confirmemail_noemail' => '[[Special:Preferences|환경 설정]]에 이메일을 설정하지 않았습니다.', +'confirmemail_text' => '{{SITENAME}}에서는 이메일 기능을 사용하기 전에 이메일 인증을 받아야 합니다. 아래의 버튼을 누르면 인증 메일을 보냅니다. 메일에는 인증 코드가 들어있는 링크가 있습니다. 그 링크를 웹 브라우저로 열면 인증이 완료됩니다.', -'confirmemail_pending' => '이미 확인 이메일을 보냈습니다. 계정을 최근에 만들었다면 이메일을 보내는 데에 몇 분이 걸릴 수 있으므로 잠시 후에 다시 확인해 주세요.', -'confirmemail_send' => '인증 코드를 메일로 보내기', -'confirmemail_sent' => '인증 이메일을 보냈습니다.', -'confirmemail_oncreate' => '확인 이메일을 보냈습니다. 이 확인 과정은 로그인하는 데에 필요하지는 않지만, 위키 프로그램에서 제공하는 이메일 기능을 사용하기 위해서 필요합니다.', -'confirmemail_sendfailed' => '{{SITENAME}}에서 인증 이메일을 보낼 수 없습니다. +'confirmemail_pending' => '이미 확인 이메일을 보냈습니다. 계정을 최근에 만들었다면 이메일을 보내는 데에 몇 분이 걸릴 수 있으므로 잠시 후에 다시 확인해 주세요.', +'confirmemail_send' => '인증 코드를 메일로 보내기', +'confirmemail_sent' => '인증 이메일을 보냈습니다.', +'confirmemail_oncreate' => '확인 이메일을 보냈습니다. 이 확인 과정은 로그인하는 데에 필요하지는 않지만, 위키 프로그램에서 제공하는 이메일 기능을 사용하기 위해서 필요합니다.', +'confirmemail_sendfailed' => '{{SITENAME}}에서 인증 이메일을 보낼 수 없습니다. 이메일 주소를 잘못 입력했는지 확인해주세요. 메일 서버로부터의 응답: $1', -'confirmemail_invalid' => '인증 코드가 올바르지 않습니다. 인증 코드가 만료되었을 수도 있습니다.', -'confirmemail_needlogin' => '이메일 주소를 인증하려면 $1이 필요합니다.', -'confirmemail_success' => '이메일 주소가 인증되었습니다. 이제 로그인해서 위키를 사용하세요.', -'confirmemail_loggedin' => '이메일 주소가 인증되었습니다.', -'confirmemail_error' => '당신의 인증을 저장하는 도중 오류가 발생했습니다.', -'confirmemail_subject' => '{{SITENAME}} 이메일 주소 인증', -'confirmemail_body' => '$1 아이피 주소를 사용하는 사용자가 {{SITENAME}}의 ‘$2’ 계정에 이메일 인증 신청을 했습니다. +'confirmemail_invalid' => '인증 코드가 올바르지 않습니다. 인증 코드가 만료되었을 수도 있습니다.', +'confirmemail_needlogin' => '이메일 주소를 인증하려면 $1이 필요합니다.', +'confirmemail_success' => '이메일 주소가 인증되었습니다. 이제 로그인해서 위키를 사용하세요.', +'confirmemail_loggedin' => '이메일 주소가 인증되었습니다.', +'confirmemail_error' => '당신의 인증을 저장하는 도중 오류가 발생했습니다.', +'confirmemail_subject' => '{{SITENAME}} 이메일 주소 인증', +'confirmemail_body' => '$1 아이피 주소를 사용하는 사용자가 {{SITENAME}}의 ‘$2’ 계정에 이메일 인증 신청을 했습니다. 이 계정이 당신의 계정이라면, 아래 주소를 열어서 이메일 인증을 해 주세요. @@ -3157,8 +3258,30 @@ $3 $5 인증 코드는 $4에 만료됩니다.', -'confirmemail_invalidated' => '이메일 확인이 취소됨', -'invalidateemail' => '이메일 확인 취소', +'confirmemail_body_changed' => '$1 IP 주소를 사용하는 사용자가 {{SITENAME}}의 "$2" 계정의 이메일 주소를 바꾸었습니다. + +이 계정이 당신의 계정인지 확인하고 {{SITENAME}}의 이메일 기능을 활성화하려면 아래 링크를 클릭하여 이메일 인증을 해 주세요. + +$3 + +이 계정이 당신의 것이 아니라면 다음 링크를 열어 이메일 주소 변경을 취소하십시오. + +$5 + +인증 코드는 $4에 만료됩니다.', +'confirmemail_body_set' => 'IP 주소 $1을 사용하는 누군가가 {{SITENAME}}의 "$2" 계정의 이메일 주소를 지정하였습니다. + +이 계정이 당신의 것이며 {{SITENAME}}에서 이메일 기능을 다시 활성화하려면 이 링크를 열어 주십시오: + +$3 + +만약 이 계정이 당신의 것이 아니라면 다음 링크를 클릭해 이메일 주소 인증을 취소하십시오: + +$5 + +이 인증 코드는 $4에 만료됩니다.', +'confirmemail_invalidated' => '이메일 확인이 취소됨', +'invalidateemail' => '이메일 확인 취소', # Scary transclusion 'scarytranscludedisabled' => '[인터위키가 비활성되어 있습니다]', @@ -3198,6 +3321,7 @@ $1', 'table_pager_first' => '처음 문서', 'table_pager_last' => '마지막 문서', 'table_pager_limit' => '문서당 $1개 항목 보이기', +'table_pager_limit_label' => '페이지당 항목 수:', 'table_pager_limit_submit' => '확인', 'table_pager_empty' => '결과 없음', @@ -3254,6 +3378,7 @@ $1', 'version-specialpages' => '특수 문서', 'version-parserhooks' => '파서 훅', 'version-variables' => '변수', +'version-skins' => '스킨', 'version-other' => '기타', 'version-mediahandlers' => '미디어 핸들러', 'version-hooks' => '훅', @@ -3265,6 +3390,13 @@ $1', 'version-hook-subscribedby' => '훅이 사용된 위치', 'version-version' => '(버전 $1)', 'version-license' => '라이센스', +'version-poweredby-credits' => "이 위키는 '''[http://www.mediawiki.org/ MediaWiki]'''를 기반으로 작동합니다. Copyright © 2001-$1 $2.", +'version-poweredby-others' => '그 외 다른 개발자', +'version-license-info' => '미디어위키는 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 파일을 재배포하거나 수정할 수 있습니다. + +미디어위키가 유용하게 사용될 수 있기를 바라지만 상용으로 사용되거나 특정 목적에 맞을 것이라는 것을 보증하지 않습니다. 자세한 내용은 GNU 일반 공중 사용 허가서 전문을 참고하십시오. + +당신은 이 프로그램을 통해 [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU 일반 공중 사용 허가서 전문]을 받았습니다; 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html 온라인]으로 읽어보시기 바랍니다.', 'version-software' => '설치된 프로그램', 'version-software-product' => '제품', 'version-software-version' => '버전', @@ -3335,6 +3467,15 @@ $1', 'tags-edit' => '편집', 'tags-hitcount' => '$1개 바뀜', +# Special:ComparePages +'comparepages' => '문서 비교', +'compare-selector' => '문서의 특정판 비교', +'compare-page1' => '첫 번째 문서', +'compare-page2' => '두 번째 문서', +'compare-rev1' => '첫 번째 판', +'compare-rev2' => '두 번째 판', +'compare-submit' => '비교하기', + # Database error messages 'dberr-header' => '이 위키에 문제가 있습니다.', 'dberr-problems' => '죄송합니다. 이 사이트는 기술적인 문제가 있습니다.', @@ -3351,8 +3492,13 @@ $1', 'htmlform-float-invalid' => '입력한 값이 수가 아닙니다.', 'htmlform-int-toolow' => '당신이 입력한 값은 최소값 $1 미만입니다.', 'htmlform-int-toohigh' => '당신이 입력한 값은 최대값 $1 이상입니다.', +'htmlform-required' => '이 값은 필수 항목입니다', 'htmlform-submit' => '저장', 'htmlform-reset' => '변경한 것을 되돌리기', 'htmlform-selectorother-other' => '기타', +# SQLite database support +'sqlite-has-fts' => '$1 (본문 전체 검색)', +'sqlite-no-fts' => '$1 (본문은 검색에서 제외)', + ); diff --git a/languages/messages/MessagesKoi.php b/languages/messages/MessagesKoi.php index d7868250..37590390 100644 --- a/languages/messages/MessagesKoi.php +++ b/languages/messages/MessagesKoi.php @@ -104,13 +104,9 @@ $messages = array( 'faqpage' => 'Project:отир сё юасьö', # Vector skin -'vector-action-delete' => 'Чышкыны', -'vector-namespace-category' => 'Категория', -'vector-namespace-help' => 'Отсасян листбок', -'vector-namespace-image' => 'Файл', -'vector-namespace-main' => 'Листбок', -'vector-view-view' => 'Лыддьöтны', -'variants' => 'Варианттэз', +'vector-action-delete' => 'Чышкыны', +'vector-view-view' => 'Лыддьöтны', +'variants' => 'Варианттэз', 'errorpagetitle' => 'Сорасьöм', 'returnto' => 'Бертны $1-öдз.', @@ -214,7 +210,7 @@ $messages = array( 'yourname' => 'Уджкерисьлöн пыран ним:', 'yourpassword' => 'Пароль:', 'yourpasswordagain' => 'Мöдпöвсьöтны пароль', -'remembermypassword' => 'Видзны менчим пыран ним этiя компьютер тöдвылын', +'remembermypassword' => 'Видзны менчим пыран ним этiя компьютер тöдвылын (не дыржык {{PLURAL:$1| лунся|лунся}})', 'login' => 'Пырны ним увтын', 'nav-login-createaccount' => 'Пыран / гижöтчан', 'userlogin' => 'Висьтасьны нето гижöтчыны', @@ -225,6 +221,7 @@ $messages = array( 'createaccount' => 'Лöсьöт аслыт уджкерисьлiсь ним', 'gotaccountlink' => 'Пырны ним увтын', 'createaccountmail' => 'Электрон поштаöн', +'createaccountreason' => 'Мыля:', 'loginerror' => 'Пырöмыт эз аркмы', 'loginsuccesstitle' => 'Пырöмыт аркмис', 'mailmypassword' => 'Ыстыны виль пароль', @@ -323,6 +320,7 @@ $messages = array( # Diffs 'history-title' => '$1 вильмöтан история', 'difference' => '(Неöткодьыс версияэз коласын)', +'difference-multipage' => 'Неöткодьыс листбоккез коласын', 'lineno' => 'Визёк $1:', 'compareselectedversions' => 'Ордчаöтны бöрйöм версияэз', 'editundo' => 'керны важмоз', @@ -511,7 +509,6 @@ $messages = array( # Watchlist 'watchlist' => 'Синмаланнэз', 'mywatchlist' => 'Синмаланнэзö', -'watchlistfor' => "('''$1''' понда)", 'addedwatch' => 'Синмалан нимлёдзö содтöм', 'addedwatchtext' => '«[[:$1]]» листбок вöлi содтöм [[Special:Watchlist|синмалан нимлёдзат]]. Быдöс, мый пондас вежсьыны листбок вылас да сыкöт йитчöм сёрнитанын, позяс адзыны этiя нимлёдзись; сiя лоас сiдзжо кызжыка тöдчöтöм [[Special:RecentChanges|виль вежсьöммез сьöртi нимлёдзын]], медбы позис кокнитжыка казявны.', @@ -724,9 +721,9 @@ $messages = array( 'nextdiff' => 'Сыбöрся вильмöтöтöм →', # Media information -'file-info-size' => '($1 × $2 пиксел, файллöн ыжда: $3, MIME-тип: $4)', +'file-info-size' => '$1 × $2 пиксел, файллöн ыжда: $3, MIME-тип: $4', 'file-nohires' => 'Буржыка тыдалан версия абу.', -'svg-long-desc' => '(SVG-файл, гижöм сьöртi $1 × $2 пиксел, файллöн ыжда: $3)', +'svg-long-desc' => 'SVG-файл, гижöм сьöртi $1 × $2 пиксел, файллöн ыжда: $3', 'show-big-image' => 'Буржыка тыдалан серпас', 'show-big-image-thumb' => 'Одзвыв нёджжалан ыжда: $1 × $2 пиксел', diff --git a/languages/messages/MessagesKrc.php b/languages/messages/MessagesKrc.php index a9cd9a72..51832dc0 100644 --- a/languages/messages/MessagesKrc.php +++ b/languages/messages/MessagesKrc.php @@ -10,6 +10,7 @@ * @author Don Alessandro * @author GerardM * @author Iltever + * @author Reedy * @author Къарачайлы */ @@ -20,18 +21,18 @@ $namespaceNames = array( NS_SPECIAL => 'Къуллукъ', NS_TALK => 'Сюзюу', NS_USER => 'Къошулуучу', - NS_USER_TALK => 'Къошулуучуну сюзюу', - NS_PROJECT_TALK => '$1 сюзюу', + NS_USER_TALK => 'Къошулуучуну_сюзюу', + NS_PROJECT_TALK => '$1_сюзюу', NS_FILE => 'Файл', - NS_FILE_TALK => 'Файлны сюзюу', + NS_FILE_TALK => 'Файлны_сюзюу', NS_MEDIAWIKI => 'MediaWiki', - NS_MEDIAWIKI_TALK => 'MediaWiki-ни сюзюу', + NS_MEDIAWIKI_TALK => 'MediaWiki-ни_сюзюу', NS_TEMPLATE => 'Шаблон', - NS_TEMPLATE_TALK => 'Шаблонну сюзюу', + NS_TEMPLATE_TALK => 'Шаблонну_сюзюу', NS_HELP => 'Болушлукъ', - NS_HELP_TALK => 'Болушлукъну сюзюу', + NS_HELP_TALK => 'Болушлукъну_сюзюу', NS_CATEGORY => 'Категория', - NS_CATEGORY_TALK => 'Категорияны сюзюу', + NS_CATEGORY_TALK => 'Категорияны_сюзюу', ); $messages = array( @@ -50,8 +51,7 @@ $messages = array( 'tog-editsection' => 'Хар бёлюмге «тюрлендир» джибериуню кёргюз', 'tog-editsectiononrightclick' => 'Бёлюмлени бёлюм башлыкъгъа басханлай тюрлендириу бетин ач', 'tog-showtoc' => 'Башларын кёргюз (3-ден кёб бёлюм башлыгъы болгъан бетлеге)', -'tog-rememberpassword' => 'Паролюму унутма бу компьютерде', -'tog-editwidth' => 'Тюрлендириу бетни экранны саулай кенглигине кёргюз', +'tog-rememberpassword' => 'Бу компьютерде мени тергеў джазыўуму сакъла (эм кёб $1 {{PLURAL:$1|кюн|кюн}})', 'tog-watchcreations' => 'Мен къурагъан (башлагъан) бетлени кёзюмде тургъан тизмеме къош', 'tog-watchdefault' => 'Мен тюрлендирген бетлени кёзюмде тургъан тизмеме къош', 'tog-watchmoves' => 'Мен атларын ауушдургъан бетлени кёзюмде тургъан тизмеме къош', @@ -195,31 +195,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Джангы тема къош', -'vector-action-delete' => 'Кетер', -'vector-action-move' => 'Атын ауушдур', -'vector-action-protect' => 'Джакъла', -'vector-action-undelete' => 'Къайтар', -'vector-action-unprotect' => 'Джакълауну кетер', -'vector-namespace-category' => 'Категория', -'vector-namespace-help' => 'Болушлукъ бет', -'vector-namespace-image' => 'Файл', -'vector-namespace-main' => 'Бет', -'vector-namespace-media' => 'Медиа-бет', -'vector-namespace-mediawiki' => 'Билдириу', -'vector-namespace-project' => 'Проект бет', -'vector-namespace-special' => 'Къуллукъ бет', -'vector-namespace-talk' => 'Сюзюу', -'vector-namespace-template' => 'Шаблон', -'vector-namespace-user' => 'Къошулуучуну бети', -'vector-view-create' => 'Къура', -'vector-view-edit' => 'Тюрлендир', -'vector-view-history' => 'Тарихин кёргюз', -'vector-view-view' => 'Окъу', -'vector-view-viewsource' => 'Кодха къара', -'actions' => 'Этимле', -'namespaces' => 'Атланы аламы', -'variants' => 'Вариантла', +'vector-action-addsection' => 'Джангы тема къош', +'vector-action-delete' => 'Кетер', +'vector-action-move' => 'Атын ауушдур', +'vector-action-protect' => 'Джакъла', +'vector-action-undelete' => 'Къайтар', +'vector-action-unprotect' => 'Джакълауну кетер', +'vector-simplesearch-preference' => 'Кенглешген излеуде болушлукъланы джандыр (къуру Вектор мотив ючюн)', +'vector-view-create' => 'Къура', +'vector-view-edit' => 'Тюрлендир', +'vector-view-history' => 'Тарихин кёргюз', +'vector-view-view' => 'Окъу', +'vector-view-viewsource' => 'Кодха къара', +'actions' => 'Этимле', +'namespaces' => 'Атланы аламы', +'variants' => 'Вариантла', 'errorpagetitle' => 'Халат', 'returnto' => '«$1» бетге къайт', @@ -280,6 +270,9 @@ $messages = array( Кечирек кириб кёрюгюз. $1', +'pool-timeout' => 'Блокланыуну сакълау заман ётдю', +'pool-queuefull' => 'Соруула джыйыучу толуду', +'pool-errorunknown' => 'Билинмеген халат', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} сайтны юсюнден', @@ -442,7 +435,8 @@ $2', 'yourname' => 'Къошулуучуну аты', 'yourpassword' => 'Паролюгъуз:', 'yourpasswordagain' => 'Паролну джангыдан джаз:', -'remembermypassword' => 'Бу компьютерде къошулуучу атымы тут', +'remembermypassword' => 'Бу компьютерде мени тергеў джазыўуму унутма (эм кёб $1 {{PLURAL:$1|кюн|кюн}})', +'securelogin-stick-https' => 'Чыкъгъандан сора да HTTPS бла байламлы къой', 'yourdomainname' => 'Сизни доменигиз:', 'externaldberror' => 'Тыш информация базаны болушлугъу бла аутентификация, халатлы болду, неда тыш аккаунтугъузну тюрлендирирге хакъларагъыз джетмейди.', 'login' => 'Кир', @@ -459,6 +453,7 @@ $2', 'gotaccount' => 'Тергеу джазыуугъуз (аккаунтугъуз) энди бармыды? $1.', 'gotaccountlink' => 'Кир', 'createaccountmail' => 'e-mail бла', +'createaccountreason' => 'Чурум:', 'badretype' => 'Джазгъан паролларыгъыз бир-бирине келишмейдиле.', 'userexists' => 'Джазгъан ат хайырландырылады. Башха ат сайлагъыз.', @@ -513,6 +508,9 @@ $2', 'loginlanguagelabel' => 'Тил: $1', 'suspicious-userlogout' => 'Терс браузер неда кэш этиучу прокси берген соруугъа ушагъаны ючюн, Сизни чыгъаргъа сорууугъуз алынмагъанды.', +# E-mail sending +'php-mail-error-unknown' => "PHP's mail() функцияда белгили болмагъан халат", + # Password reset dialog 'resetpass' => 'Паролну тюрлендириу', 'resetpass_announce' => 'Сиз, электрон почта бла ийилген, болджаллы пароль бла киргенсиз. Системагъа кириуню тамамларча, джангы пароль къурагъыз.', @@ -561,11 +559,12 @@ $2', 'showlivepreview' => 'Терк ал къарау', 'showdiff' => 'Къошулгъан тюрлениуле', 'anoneditwarning' => "'''Эс бёлюгюз''': Сиз системагъа кирмегенсиз. Сизни IP-адресигиз бу бетни тюрлениу тарихине джазыллыкъды.", +'anonpreviewwarning' => "''Сиз тергеу джазыуугъуз бла кирмегенсиз. Бетде тюрлениулени сакълатсагъыз, бетни тюрлениу тарихине IP-адресигиз джазыллыкъды.''", 'missingsummary' => "'''Эс бёлюгюз.''' Тюрлениулеге къысха ачыкълау джазмагъансыз. Сиз «Бетни сакъла» дегеннге энтда бассагъыз, тюрлениуле комментарийлесиз сакъланныкъдыла.", 'missingcommenttext' => 'Тюбю бла ачыкълау джазыгъыз.', -'missingcommentheader' => "'''Эс бёлюгюз:''' Сиз ачыкълаугъа башлыкъ джазмагъансыз. -Сакълаугъа джангыдан бассагъыз, тюрлендириулеригиз башлыкъсыз сакъланныкъдыла.", +'missingcommentheader' => "'''Эс бёлюгюз:''' Сиз ачыкълаугъа тема/башлыкъ джазмагъансыз. +«{{int:savearticle}}» тиекден джангыдан бассагъыз, тюрлендириулеригиз башлыкъсыз сакъланныкъдыла.", 'summary-preview' => 'Суратлауу былай боллукъду:', 'subject-preview' => 'Башлыкъны ал къарау:', 'blockedtitle' => 'Къошулуучу блок этилиниб турады', @@ -638,7 +637,7 @@ $2', 'userjsyoucanpreview' => "'''Юретиу.''' «{{int:showpreview}}» тиекни басыгъыз, джангы JS-файлны сакълатырыгъызны аллы бла тинтиб кёрюрча.", 'usercsspreview' => "'''Эсде тутугъуз, бу къуру ал къарауду, CSS файлыгъыз алкъын сакъланмагъанды!'''", 'userjspreview' => "'''Эсде тутугъуз, бу къуру ал къарауду, javascript файлыгъыз алкъын сакъланмагъанды!'''", -'userinvalidcssjstitle' => "'''Эс бёлюгюз:''' «$1» атлы тема джокъду. Эсде тутугъуз, .css эм .js бетле атлары ажымсыз къуру гитче харифледен болургъа керекди, сёз ючюн: {{ns:user}}:Foo/monobook.css, былай {{ns:user}}:Foo/Monobook.css тюйюл!", +'userinvalidcssjstitle' => "'''Эс бёлюгюз:''' «$1» атлы тема джокъду. Эсде тутугъуз, .css эм .js бетле атлары ажымсыз къуру гитче харифледен болургъа керекди, сёз ючюн: {{ns:user}}:Foo/vector.css, былай {{ns:user}}:Foo/Vector.css тюйюл!", 'updated' => '(Джангыртылды)', 'note' => "'''Белги:'''", 'previewnote' => "'''Бу къуру ал къарауду, текст алкъын сакъланмагъанды!'''", @@ -677,9 +676,6 @@ $2', Башхала сизни текстлеригизни тюрлендиргенлерин излемей эсегиз, былайгъа салмагъыз.
    Сиз дагъыда этген къошакъларыгъызны автору болгъаныгъызны неда информацияны чыкъгъан джери эркин джаяргъа эм тюрлендирирге къойгъанын аны бегитесиз (къарагъыз: $1). '''ЭРКИНЛИКСИЗ АВТОР ХАКЪ БЛА ДЖАКЪЛАННГАН МАТЕРИАЛЛА САЛМАГЪЫЗ БЫЛАЙГЪА!'''", -'longpagewarning' => "'''Эсгертиу: Бу бетни узунлугъу $1 килобайтды. -Ёлчемлери 32 КБ джууукълашхан неда андан кёб болгъан бетлени бир-бир браузерле терс кёргюзюрге боллукъдула. -Текстни гитчерек кесеклеге юлешиб кёрюгюз.'''", 'longpageerror' => "'''ХАТА: сиз сакълатхан текстни ёлчеми $1 килобайтды, ол $2 килобайт чекден кёбдю. Бет сакъланныкъ тюлдю.'''", 'readonlywarning' => "'''Эс бёлюгюз: Билгилени базасы бусагъатда киритленибди. Ол себебден тюрлениулеригиз къошулаллыкъ тюлдю. Джазгъанларыгъызны башха бир файлда сакълаб, кечирек къошаргъа боллукъсуз''' @@ -855,6 +851,8 @@ $1", 'logdelete-failure' => "'''Журналны кёрюнюую салыналмады:''' $1", 'revdel-restore' => 'кёрюнюуню тюрлендир', +'revdel-restore-deleted' => 'кетерилген версияла', +'revdel-restore-visible' => 'кёрюннген версияла', 'pagehist' => 'Бетни тарихи', 'deletedhist' => 'Кетериулени тарихи', 'revdelete-content' => 'контент', @@ -924,11 +922,13 @@ $1", # Diffs 'history-title' => '«$1» бетни тюрлениу тарихи', 'difference' => '(Версияланы араларында башхалыкъ)', +'difference-multipage' => '(Бетле арасында башхалыкъ)', 'lineno' => 'Тизгин $1:', 'compareselectedversions' => 'Сайланнган версияланы тенглешдириу', 'showhideselectedversions' => 'Сайланнган версияланы кёргюз/джашыр', 'editundo' => 'ызына алыу', -'diff-multi' => '(Кёргюзюлмеген {{PLURAL:$1|$1 аралыкъ тюрлениу|$1 аралыкъ тюрлениу}} кёргюзюлмегенди.)', +'diff-multi' => '({{PLURAL:$2|Бир къошулуучу|$2 къошулуучу}} этген {{PLURAL:$1|$1 аралыкъ тюрлениу|$1 аралыкъ тюрлениу}} кёргюзюлмегенди)', +'diff-multi-manyusers' => '($2 къошулуучудан кёб {{PLURAL:$2|Бир къошулуучу|къошулуучу}} этген {{PLURAL:$1|бир аралыкъ тюрлениу|$1 аралыкъ тюрлениу}} кёргюзюлмегенди)', # Search results 'searchresults' => 'Излеуню эсеби', @@ -963,6 +963,7 @@ $1", 'searchprofile-everything-tooltip' => 'Бютеу бетледе изле (сюзюу бетледеда)', 'searchprofile-advanced-tooltip' => 'Энчи ат аланладада изле', 'search-result-size' => '$1 ({{PLURAL:$2|$2 сёз}})', +'search-result-category-size' => '{{PLURAL:$1|1 элемент|$1 элемент}} ({{PLURAL:$2|1 тюбкатегория|$2 тюбкатегория}}, {{PLURAL:$3|1 файл|$3 файл}})', 'search-result-score' => 'Келишиулюк: $1%', 'search-redirect' => '(Джиберилиниу $1)', 'search-section' => '($1 бёлюм)', @@ -1037,6 +1038,7 @@ $1", 'contextlines' => 'Хар табылыннганнга кёргюзюлген тизгинлени саны:', 'contextchars' => 'Тизгиннге контекстни символларыны саны:', 'stub-threshold' => 'Стаблагъа джибериуню формат этер ючюн марда (байтлада):', +'stub-threshold-disabled' => 'Джукъланыбды', 'recentchangesdays' => 'Ахыр тюрлениуледе кёргюзюллюк кюнле:', 'recentchangesdays-max' => '(максимум $1 {{PLURAL:$1|кюн|кюн}})', 'recentchangescount' => 'Тынгылау бла кёргюзюллюк тюрлениулени саны:', @@ -1070,6 +1072,7 @@ $1", 'prefs-files' => 'Файлла', 'prefs-custom-css' => 'Энчи CSS', 'prefs-custom-js' => 'Энчи JS', +'prefs-common-css-js' => 'Бир CSS/JS-ле, халны бары темаларына да:', 'prefs-reset-intro' => 'Бу бетни джарашдырыуларыгъызны тынгылыау бла салыннган джарашдырыулагъа кёчюрюрге хайырланаллыкъсыз. Бу ишлемни къабыл этсегиз, ызына къайтараллыкъ тюлсюз.', 'prefs-emailconfirm-label' => 'Электрон почтаны бегитиу:', @@ -1111,7 +1114,9 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ 'prefs-advancedrendering' => 'Кенгленнген джарашдырыула', 'prefs-advancedsearchoptions' => 'Кенгленнген джарашдырыула', 'prefs-advancedwatchlist' => 'Кенгленнген джарашдырыула', -'prefs-display' => 'Кёрюнюуню джарашдырыулары', +'prefs-displayrc' => 'Кёрюнюуню джарашдырыулары', +'prefs-displaysearchoptions' => 'Кёрюнюуню джарашдырыулары', +'prefs-displaywatchlist' => 'Кёрюнюуню джарашдырыулары', 'prefs-diffs' => 'Версияланы башхалыкълары', # User rights @@ -1198,6 +1203,7 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ 'right-hideuser' => 'Къошулуучуну атын тый эмда аны джашыр', 'right-ipblock-exempt' => 'IP тыйылуаны, автомат тыйыуланы эм диапозонланы тыйыуланы ётюдюр', 'right-proxyunbannable' => 'Проксилени автомат тыйыуларыны ётдюр', +'right-unblockself' => 'кеслерини блокларын алыу', 'right-protect' => 'Къорууну дараджасын тюрлендир эмда къорууланнган бетледе тюрлениуле эт', 'right-editprotected' => 'Къорууланнган бетледе тюрлениу эт (секиртмесиз джакъсыз)', 'right-editinterface' => 'Къошулуучу интерфейсни тюрлендир', @@ -1220,7 +1226,6 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ 'right-siteadmin' => 'Билги базаны киритле эмда киритни ач', 'right-reset-passwords' => 'Башха къошулуучуланы паролларын кетер', 'right-override-export-depth' => 'Бетлени, теренлиги 5-ге дери байламлы бетле бла бирге экспорт эт', -'right-versiondetail' => 'Программа баджарыуну кенглетилген информациясыны кёргюз', 'right-sendemail' => 'Башха къошулуучулагъа электрон почта джиберирге', # User rights log @@ -1271,14 +1276,9 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ 'recentchanges-legend' => 'Ахыр тюрлениулени джарашдырыулары', 'recentchangestext' => 'Тюбюнде, Википедияда этилген ахыр тюрлениуле хронология бла тизилиб турадыла.', 'recentchanges-feed-description' => 'Викиде бу лентада тюрлениулени кёзде тут.', -'recentchanges-label-legend' => 'Легенда: $1.', -'recentchanges-legend-newpage' => '$1 — джангы бет', 'recentchanges-label-newpage' => 'Бу тюрлендириу бла джангы бет къуралгъанды', -'recentchanges-legend-minor' => '$1 — гитче тюрлендириу', 'recentchanges-label-minor' => 'Бу гитче тюрлениудю', -'recentchanges-legend-bot' => '$1 — ботну тюрлендириую', 'recentchanges-label-bot' => 'Бу тюрлендириуню бот этгенди', -'recentchanges-legend-unpatrolled' => '$1 - патруль этилинмеген тюрлендириуле', 'recentchanges-label-unpatrolled' => 'Бу тюрлендириу алкъын патруль этилинмегенди', 'rcnote' => '$4 $5 заманнга, арт {{PLURAL:$1|1|$1}} тюрлениу {{PLURAL:$2|1|$2}} кюнню ичинде', 'rcnotefrom' => 'Тюбюрекде $2 башлаб ($1 дери) тюрлендириуле кёрюнедиле', @@ -1327,6 +1327,9 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ 'upload_directory_missing' => 'Джюклеу директория ($1) табылмайды эмда веб-сервер бла къуралалмайды.', 'upload_directory_read_only' => 'Веб-сервер файл джюкленнегн ($1) папкагъа джазыу эркинлиги джокъду.', 'uploaderror' => 'Джюклеуню хатасы', +'upload-recreate-warning' => "'''Эс бёлюгюз. Быллай аты бла файл кетерилген этгенди неда аты тюрленилиннгенди.''' + +Бу бетге кетериуле бла ат тюрлендириулени журналы тюбюрекде бериледи:", 'uploadtext' => "Файл джюклер ючюн тюбюндеги форманы хайырлан. Алландан джюкленнген файлланы кёрюр неда излер ючюн [[Special:FileList|джюкленнген файлланы списогуна]] къарагъыз, (джангыдан) джюкленнгенле [[Special:Log/upload|джюклеу журналында]], кетерилгенле [[Special:Log/delete|кетериу журналында]] тутуладыла. @@ -1362,6 +1365,17 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ 'filetype-banned-type' => "'''\".\$1\"''' джасакъланнган файл типиди. Эркинлик берилген {{PLURAL:\$3|файл тип|файл типле}} \$2.", 'filetype-missing' => 'Файлны кенглешиуу джокъду (сёз ючюн, «.jpg» кибик)', +'empty-file' => 'Сиз ийген файл бошду.', +'file-too-large' => 'Сиз ийген файл асыры уллуду.', +'filename-tooshort' => 'Файлны аты асыры къысхады.', +'filetype-banned' => 'Быллай типли файлла джасакъланыбдыла.', +'verification-error' => 'Бу файл тинтилиу процедураны ётмегенди.', +'hookaborted' => 'Сиз теджеген тюрлендириуню кенгертиуню сюзюучю джасакълагъанды.', +'illegal-filename' => 'Джарамагъан файл ат.', +'overwrite' => 'Болгъан файлны ауушдурургъа болмайды.', +'unknown-error' => 'Белгили болмагъан халат.', +'tmp-create-error' => 'Болджаллы файл къуралмайды.', +'tmp-write-error' => 'Болджаллы файлгъ джазыуну халаты.', 'large-file' => 'Файлланы $1 байтдан уллу болмасы изленеди (бу файлны ёлчеми $2)', 'largefileserver' => 'Бу файл сервер эркинлик бергенден уллуду.', 'emptyfile' => 'Джюклеген файлыгъыз бош кёрюнеди. Буну чуруму файлны атыны джазыуда халат болургъа болур. Файлны джюклерге излегенигизден ишексиз болугъуз.', @@ -1388,13 +1402,14 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ Дагъыда файлыгъызны джюклерге излей эсегиз, ызына къайтыб джангы ат хайырланыгыз. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Бу файл эндиги {{PLURAL:$1|файлны|файлланы}} дубликатыды:', 'file-deleted-duplicate' => 'Бу файлны ушашы болгъан башха файл ([[:$1]]) алгъаракъ кетерилгенди. Бу файлны джангыдан джюклерни аллы бла файлны кетериуюню тарихи бла танышыгъыз.', -'successfulupload' => 'Джюклеу тыйыншлы ётдю', 'uploadwarning' => 'Эсгертиу', 'uploadwarning-text' => 'Файлны тюбюрекде келтирилген ачыкълауун тюрлендиригиз да джангыдан кёрюгюз.', 'savefile' => 'Файлны сакълат', 'uploadedimage' => '«[[$1]]» джюкленнгенди', 'overwroteimage' => '«[[$1]]» суратны джангы версиясы джюкленнгенди', 'uploaddisabled' => 'Джюклеуге эркинлик джокъду', +'copyuploaddisabled' => 'URL кёре джюклеу джукъланыбды.', +'uploadfromurl-queued' => 'Сизни джюклеуюгюз кёзюуге салыннганды.', 'uploaddisabledtext' => 'Файлланы джюклеу мадар джукъланыбды', 'php-uploaddisabledtext' => 'PHP-да файл джюклеу амал джукъланыбды. file_uploads джарашдырыулагъа бир къарагъыз.', @@ -1429,6 +1444,14 @@ JD # Jenoptik MGP # Pentax PICT # тюрлю-тюрлюле # ', +'upload-success-subj' => 'Джюклеу тыйыншлы ётдю', +'upload-success-msg' => '[$2] джюклемигиз тыйыншлы ётдю. Сиз джюклеген былайдады: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Джюклеу бла проблема', +'upload-failure-msg' => '[$2] адресден джюклемигиз бла проблема болгъанды: + +$1', +'upload-warning-subj' => 'Джюклеуде эсгертиу', +'upload-warning-msg' => '[$2] джюклеуюгюз бла халат болду. Халатны тюзетир ючюн [[Special:Upload/stash/$1|джюклеу формагъа]] къайтыгъыз.', 'upload-proto-error' => 'Халатлы протокол', 'upload-proto-error-text' => 'Узакъдан джюклеу,http:// неда ftp:// бла башланнган URL-ле керекдиле.', @@ -1494,6 +1517,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б 'listfiles_search_for' => 'Медиа ат бла изле:', 'imgfile' => 'файл', 'listfiles' => 'Файлланы списогу', +'listfiles_thumb' => 'Миниатюра', 'listfiles_date' => 'Заман', 'listfiles_name' => 'Файлны аты', 'listfiles_user' => 'Къошулуучу', @@ -1608,8 +1632,8 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б 'statistics-edits' => '{{SITENAME}} къуралгъанындан бери этилген тюрлендириуле.', 'statistics-edits-average' => 'Хар бетдеги тюрлендириулени орта саны', 'statistics-views-total' => 'Къараула бютеулей', +'statistics-views-total-desc' => 'Къуралмагъан бетле бла къуллукъ бетлеге къараула саналмайдыла.', 'statistics-views-peredit' => 'Тюрлендириуге къарауну саны', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Иш кёзюуню] узунлугъу', 'statistics-users' => 'Регистрация этилген [[Special:ListUsers|къошулуучула]]', 'statistics-users-active' => 'Актив къошулуучула', 'statistics-users-active-desc' => 'Ахыр {{PLURAL:$1|1 кюнде|$1 кюнде}} ишлеме этген къошулуучула', @@ -1623,7 +1647,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б 'doubleredirects' => 'Джибериу болгъан джибериуле', 'doubleredirectstext' => 'Бу бетде башхы джибериулеге этилген джибериулени списогу барды. Хар тизгин биринчи неда экинчи джибериуню эмда асламысында бетни аты джазылгъан, биринчи джибериу кёргюзген, экинчи джибериуню нюзюр бети джазылады. -Юсю сызылгъанЮсю сызылгъан джазыула тюзетилген этгендиле.', 'double-redirect-fixed-move' => '[[$1]] бет атын тюрлендиргенди, энди ол [[$2]] бетге джибериу этеди', 'double-redirect-fixer' => 'Джибериулени тюзетиучю', @@ -1646,6 +1670,8 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б 'nmembers' => '$1 {{PLURAL:$1|объект}}', 'nrevisions' => '$1 {{PLURAL:$1|версия|версия}}', 'nviews' => '$1 {{PLURAL:$1|къарау|къарау}}', +'nimagelinks' => '$1 {{PLURAL:$1|бетде|бетде}} хайырланады', +'ntransclusions' => '$1 {{PLURAL:$1|бетде|бетде}} хайырланады', 'specialpage-empty' => 'Сорма эсеб келтирмеди.', 'lonelypages' => 'Ёксюз бетле', 'lonelypagestext' => 'Тюбюндеги бетлеге {{SITENAME}} сайтдагъы башха бетледен джибериу берилмегенди неда ала башха бетлеге къошулмагъандыла.', @@ -1806,34 +1832,40 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б 'listgrouprights-removegroup-self-all' => 'Кесини тергеу джазыуундан бютеу къауумланы къораталлыкъды', # E-mail user -'mailnologin' => 'Джиберирге адрес джокъду', -'mailnologintext' => 'Башха къошулуучулагъа эл. почта джиберелир ючюн [[Special:UserLogin|системагъа кирирге]] керексиз эм [[Special:Preferences|джарашдырыуланы]] бетинде джараулу эл. почта адрес болургъа керекди.', -'emailuser' => 'Къошулуучугъа письмо', -'emailpage' => 'Къошулуучугъа письмо джибер', -'emailpagetext' => 'Бу къошулуучуну почтасына письмо джиберир ючюн бу форманы толтурургъа боллукъсуз. +'mailnologin' => 'Джиберирге адрес джокъду', +'mailnologintext' => 'Башха къошулуучулагъа эл. почта джиберелир ючюн [[Special:UserLogin|системагъа кирирге]] керексиз эм [[Special:Preferences|джарашдырыуланы]] бетинде джараулу эл. почта адрес болургъа керекди.', +'emailuser' => 'Къошулуучугъа письмо', +'emailpage' => 'Къошулуучугъа письмо джибер', +'emailpagetext' => 'Бу къошулуучуну почтасына письмо джиберир ючюн бу форманы толтурургъа боллукъсуз. Ызына адрес болуб, сиз [[Special:Preferences|джарашдырыуларыгъызда]] джазгъан адрес белгиленникди, ол себебден сизни письмогъузну аллыкъ сизге тюз джууаб берирге мадарлы боллукъду.', -'usermailererror' => 'Халат ючюн элетктрон письмо ызына къайтды:', -'defemailsubject' => '{{SITENAME}} письмо', -'noemailtitle' => 'Электрон почтаны адреси джокъду', -'noemailtext' => 'Бу къошулуучу керти электрон адресин бермегенди.', -'nowikiemailtitle' => 'Электрон письмо джиберирге эркинлик джокъду', -'nowikiemailtext' => 'Бу къошулуучу, башха къошулуучуладан электрон писмо алыргъа излемегенин билдиргенди.', -'email-legend' => 'Башха {{SITENAME}} къошулуучугъа электрон письмо джибер', -'emailfrom' => 'Кимден:', -'emailto' => 'Кимге:', -'emailsubject' => 'Тема:', -'emailmessage' => 'Билдириу:', -'emailsend' => 'Джибер', -'emailccme' => 'Письмону копиясын меннге джибер', -'emailccsubject' => '$1-ге джиберилген письмону копиясы: $2', -'emailsent' => 'Письмо джиберилди', -'emailsenttext' => 'Сизни электрон билдириуюгюз джиберилгенди.', -'emailuserfooter' => 'Бу письмо $1 джанындан $2 къошулуучугъа, {{SITENAME}} сайтдагъы "Къошулуучугъу письмо джибер" функциясы бла джиберилгенди.', +'usermailererror' => 'Халат ючюн элетктрон письмо ызына къайтды:', +'defemailsubject' => '{{SITENAME}} письмо', +'usermaildisabled' => 'Къошулуучуну электрон почтасы джукъланыбды', +'usermaildisabledtext' => 'Сиз бу викини башха къошулуучуларына электрон письмола джиберелмейсиз', +'noemailtitle' => 'Электрон почтаны адреси джокъду', +'noemailtext' => 'Бу къошулуучу керти электрон адресин бермегенди.', +'nowikiemailtitle' => 'Электрон письмо джиберирге эркинлик джокъду', +'nowikiemailtext' => 'Бу къошулуучу, башха къошулуучуладан электрон писмо алыргъа излемегенин билдиргенди.', +'email-legend' => 'Башха {{SITENAME}} къошулуучугъа электрон письмо джибер', +'emailfrom' => 'Кимден:', +'emailto' => 'Кимге:', +'emailsubject' => 'Тема:', +'emailmessage' => 'Билдириу:', +'emailsend' => 'Джибер', +'emailccme' => 'Письмону копиясын меннге джибер', +'emailccsubject' => '$1-ге джиберилген письмону копиясы: $2', +'emailsent' => 'Письмо джиберилди', +'emailsenttext' => 'Сизни электрон билдириуюгюз джиберилгенди.', +'emailuserfooter' => 'Бу письмо $1 джанындан $2 къошулуучугъа, {{SITENAME}} сайтдагъы "Къошулуучугъу письмо джибер" функциясы бла джиберилгенди.', + +# User Messenger +'usermessage-summary' => 'Система билдириу джазыгъыз', +'usermessage-editor' => 'Система билдириучю', # Watchlist 'watchlist' => 'Кёзюмде тургъан тизмем', 'mywatchlist' => 'Кёзюмде тургъан тизмем', -'watchlistfor' => "('''$1''' ючюн)", +'watchlistfor2' => '$1 ючюн $2', 'nowatchlist' => 'Кёзюгюзде тургъан тизмегиз бошду.', 'watchlistanontext' => 'Кёзюгюзде тургъан тизмегизни статьяланы кёрюр неда тюрлендирир ючюн $1.', 'watchnologin' => 'Системагъа кирирге керекди.', @@ -1954,7 +1986,10 @@ $UNWATCHURL 'revertpage-nouser' => 'Тюрлендириуле (къошулуучуну аты кетерилгенди) [[User:$1|$1]] къошулуучуну версиясына къайтарылдыла', 'rollback-success' => '$1 этген тюрлендириуле ызына алыныб; $2 тюрлендирген алгъаракъ версиясына къайтылды.', -'sessionfailure' => 'Ишни бу сеансы бла проблемала болгъаннга ушайды; + +# Edit tokens +'sessionfailure-title' => 'Сеансны халаты', +'sessionfailure' => 'Ишни бу сеансы бла проблемала болгъаннга ушайды; бу этим "сеансны гудулаууна" къаршчылыкъ этилир ючюн тохтатылгъанды. Тилейбиз, "Ызына" деген тиекни басыгъыз эмда сиз кирген бетни джангыдан джюклегиз.', @@ -2084,18 +2119,21 @@ $1', 'month' => 'Айдан башлаб (эм алгъаракъ):', 'year' => 'Джылдан башлаб (эм алгъаракъ):', -'sp-contributions-newbies' => 'Джангы тергеу джазыу (аккаунт) бла этилге къошакъны кёргюз', -'sp-contributions-newbies-sub' => 'Джангы тергеу джазыуладан (аккаунтладан)', -'sp-contributions-newbies-title' => 'Джангы тергеу джазыуладан этилген къошакъ', -'sp-contributions-blocklog' => 'Блок этиуню журналы', -'sp-contributions-deleted' => 'къошулуучуну кетерилген тюрлендириулери', -'sp-contributions-logs' => 'журналла', -'sp-contributions-talk' => 'сюзюу', -'sp-contributions-userrights' => 'къошулуучуну хакъларына оноу этиу', -'sp-contributions-blocked-notice' => 'Бу къошулуучу бусагъатда блокланыб турады. Тюбюнде блокланыуланы журналындан ахыр джазыу бериледи:', -'sp-contributions-search' => 'Къошакъны излеу', -'sp-contributions-username' => 'Къошулуучуну IP-адреси неда аты:', -'sp-contributions-submit' => 'Таб', +'sp-contributions-newbies' => 'Джангы тергеу джазыу (аккаунт) бла этилге къошакъны кёргюз', +'sp-contributions-newbies-sub' => 'Джангы тергеу джазыуладан (аккаунтладан)', +'sp-contributions-newbies-title' => 'Джангы тергеу джазыуладан этилген къошакъ', +'sp-contributions-blocklog' => 'Блок этиуню журналы', +'sp-contributions-deleted' => 'къошулуучуну кетерилген тюрлендириулери', +'sp-contributions-logs' => 'журналла', +'sp-contributions-talk' => 'сюзюу', +'sp-contributions-userrights' => 'къошулуучуну хакъларына оноу этиу', +'sp-contributions-blocked-notice' => 'Бу къошулуучу бусагъатда блокланыб турады. Тюбюнде блокланыуланы журналындан ахыр джазыу бериледи:', +'sp-contributions-blocked-notice-anon' => 'Бу IP-адрес бусагъатда блокга салыныбды. +Тюбюнде блокланыуланы журналындан ахыр джазыу бериледи:', +'sp-contributions-search' => 'Къошакъны излеу', +'sp-contributions-username' => 'Къошулуучуну IP-адреси неда аты:', +'sp-contributions-toponly' => 'Къуру ахыр версияланы кёргюз', +'sp-contributions-submit' => 'Таб', # What links here 'whatlinkshere' => 'Былайгъа джибериуле', @@ -2154,7 +2192,6 @@ $1', 'ipb-edit-dropdown' => 'Чурумланы списогун тюрлендир', 'ipb-unblock-addr' => '$1 блокдан ал', 'ipb-unblock' => 'Къошулуучуну неда IP-адресни тыйылыуун тохтат', -'ipb-blocklist-addr' => '$1 ючюн бусагъатдагъы тыйгъычла', 'ipb-blocklist' => 'Бусагъатдагъы болгъан тыйгъычланы кёргюз', 'ipb-blocklist-contribs' => '$1 къошулуучуну къошханы', 'unblockip' => 'Къошулуучуну тыйгъыч этиуню тохтат', @@ -2228,6 +2265,8 @@ $1 алайсызда тыйылыбды. Джарашдырыуланы тюр 'sorbs_create_account_reason' => 'IP-адресигиз, translatewiki.net сайтда хайырланнган DNSBL-де ачыкъ прокси кибик саналады. Тергеу джазыу къураяллыкъ тюлсюз.', 'cant-block-while-blocked' => 'Сиз кесигиз блокда заманда, башха къошулуучуланы блок этеллик тюлсюз.', 'cant-see-hidden-user' => 'Тыяргъа излеген къошулуучу алайсызда тыйылыбды эмда джашырылыбды. Къошулуучуну джашырыргъа эркинлигигиз болмагъаны себебли, сиз бу блокну не къараяллыкъ, неда тюрлендиреллик тюлсюз.', +'ipbblocked' => 'Кесигиз блокда болгъаныгъыз себебли, сиз башхаланы блокга салыргъа неда блокларын алыргъа мадарыгъыз джокъду', +'ipbnounblockself' => 'Сиз кеси кесигизни блокдан алыр мадарыгъыз джокъду', # Developer tools 'lockdb' => 'Билги база киритлиди', @@ -2262,6 +2301,17 @@ $1 алайсызда тыйылыбды. Джарашдырыуланы тюр '''ЭСГЕРТИУ!''' Атын тюрлендириу, \"айырма бетлени\" уллу ёлчемде , эмда сакъланмагъан тюрлениулеге келтирирге боллукъду. Тилейбиз, мындан ары бардырлыгъыгъызны аллы бла, ахырында чыгъарыкъ эсеблени ангылагъаныгъызгъа ишексиз болугъуз.", +'movepagetext-noredirectfixer' => "Сиз, тюбюндеги форманы хайырландырыб, бетни атын тюрлендирликсиз, аны бла бирге аны тюрлениулерини журналын джангы оруннга кёчюрлюксюз. +Эски аты джангы атына джибериу боллукъду. +[[Special:DoubleRedirects|Экили]] эм [[Special:BrokenRedirects|юзюлген джибериуле]] бар эселе къарагъыз. +Джибериулени мындан арыда керекли джерни кёргюзюулерине сиз джууаблысыз. + +Бет джангыдан джибериу болгъанны, неда тюрлендириулени тарихи болмай бош болгъанны тышында, джангы аты бла бет бар эсе, бетни атын тюрлендиреллик '''тюлсюз''' . +Аны магъанасы: сиз бетни атын, мындан алгъа болгъан атына къайтарыргъа боллукъсуз, халат бла атын тюрлендирген эсегиз, болгъан бет билмей кетерилиб къаллыкъ тюлдю. + +'''ЭСГЕРТИУ!''' +Атын тюрлендириу, \"популяр бетлени\" уллу ёлчемде эмда сакъланмагъан тюрлениулеге келтирирге боллукъду. +Мындан ары бардырлыгъыгъызны аллы бла, ахырында чыгъарыкъ эсеблени ангылагъаныгъызгъа ишексиз болугъуз.", 'movepagetalktext' => "Къошулгъан сюзюу бет да автомат халда кёчюрюлюннюкдю, '''быллай ситуация болмаса''': *Бош болмагъан сюзюу бет бу аты бла барды; @@ -2317,6 +2367,7 @@ $1 алайсызда тыйылыбды. Джарашдырыуланы тюр 'immobile-source-page' => 'Бу бетни атын тюрлендирирге боллукъ тюлдю', 'immobile-target-page' => 'Бетге бу атны берирге болмайды.', 'imagenocrossnamespace' => 'Файл, файлла ючюн болмагъан ат аламына кёчюерлмез.', +'nonfile-cannot-move-to-file' => 'Файл болмагъанлагъа файл ат берирге болмайды', 'imagetypemismatch' => 'Джангы файл кенгериу типине келишмейди', 'imageinvalidfilename' => 'Файлны нюзюр аты джараусузду', 'fix-double-redirects' => 'Алгъыннгы атына джибериулени автомат халда тюзетигиз', @@ -2396,6 +2447,7 @@ MediaWiki локализациясына юлюш къошаргъа излей 'importstart' => 'Файлла импорт этиле турадыла...', 'import-revision-count' => '$1 {{PLURAL:$1|версия|версия}}', 'importnopages' => 'Импорт этиллик бет джокъду', +'imported-log-entries' => 'Журналны {{PLURAL:$1|джазыуу|джазыуу}} импорт этилинди.', 'importfailed' => '$1 импорту джетишимсиз бошалды', 'importunknownsource' => 'Билинмеген импорт къайнакъ типи', 'importcantopen' => 'Импорт этилген файл ачылалмады', @@ -2491,6 +2543,8 @@ MediaWiki локализациясына юлюш къошаргъа излей 'tooltip-upload' => 'Джюклеуню башла', 'tooltip-rollback' => 'Бир басхан бла ахыр къошулуучуну тюрлендиргенин кетер', 'tooltip-undo' => 'Этилиннген тюрлендириуню ызына ал эмда ал къарауну кёргюз, ызына нек алыннгын чертирча', +'tooltip-preferences-save' => 'Джарашдырыуланы сакълат', +'tooltip-summary' => 'Къысха ачыкълау джазыгъыз', # Metadata 'nodublincore' => 'Dublin Core RDF метабилгиле бу серверде джасакъдыла.', @@ -2590,20 +2644,23 @@ $1', 'nextdiff' => 'Эндиги тюрлендириу →', # Media information -'mediawarning' => "'''Эсгертиу''': Бу файл типи аман иннетли кодла тутаргъа боллукъду. +'mediawarning' => "'''Эсгертиу''': Бу файл типи аман иннетли кодла тутаргъа боллукъду. Буну ишлетсегиз системагъызгъа заран келтирирге боллукъсуз.", 'imagemaxsize' => "Суратны ёлчемини чеги:
    ''(файлны ангылытыу бетле ючюн)''", 'thumbsize' => 'Гитче ёлчем:', 'widthheight' => '$1 × $2', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|бет|бет}}', -'file-info' => '(файлны ёлчеми: $1, MIME типи: $2)', -'file-info-size' => '($1 × $2 пиксель, файлны ёлчеми: $3, MIME типи: $4)', +'file-info' => 'файлны ёлчеми: $1, MIME типи: $2', +'file-info-size' => '$1 × $2 пиксель, файлны ёлчеми: $3, MIME типи: $4', 'file-nohires' => 'Мындан ары ачыкъланнган версиясы джокъду', -'svg-long-desc' => '(SVG файл, шартлы $1 × $2 пиксель, файлны ёлчеми: $3)', +'svg-long-desc' => 'SVG файл, шартлы $1 × $2 пиксель, файлны ёлчеми: $3', 'show-big-image' => 'Толу ачыкълау', 'show-big-image-thumb' => 'Ал къарауда ёлчеми: $1 × $2 пиксель', 'file-info-gif-looped' => 'тогъайланнганды', 'file-info-gif-frames' => '$1 {{PLURAL:$1|фрейм|фрейм}}', +'file-info-png-looped' => 'тогъайланнганды', +'file-info-png-repeat' => '$1 {{PLURAL:$1|кере|кере}} ойнатылды', +'file-info-png-frames' => '$1 {{PLURAL:$1|фрейм|фрейм}}', # Special:NewFiles 'newimages' => 'Джангы файлланы галереясы', @@ -2925,27 +2982,27 @@ $1', 'limitall' => 'бютеую', # E-mail address confirmation -'confirmemail' => 'Электорн адресни мюкюл эт', -'confirmemail_noemail' => '[[Special:Preferences|джарашдырыулада]] тамамланнган, джараулу электрон адресигиз джокоъду.', -'confirmemail_text' => 'Викини электрон почтасыны адреси бла хайырланыб башлауну аллы бла, аны мюкюл этериге керекди. +'confirmemail' => 'Электорн адресни мюкюл эт', +'confirmemail_noemail' => '[[Special:Preferences|джарашдырыулада]] тамамланнган, джараулу электрон адресигиз джокоъду.', +'confirmemail_text' => 'Викини электрон почтасыны адреси бла хайырланыб башлауну аллы бла, аны мюкюл этериге керекди. Адресигизге мюкюл этиу письмо ийилир ючюн, тюбюндеги тиекден басыгъыз. Письмода адресигизни мюкюл этер ючюн джибериу боллукъду, аннга бассагъыз сиз энчи бир бетге чыгъарыкъсыз, андан башлаб сизни адресигиз мюкюл болгъаннга саналады.', -'confirmemail_pending' => 'Мюкюл этиуню коду бла письмо сизге алайсызда джиберилгенди; +'confirmemail_pending' => 'Мюкюл этиуню коду бла письмо сизге алайсызда джиберилгенди; Тергеу джазыуугъуз джангы къурагъан эсегиз, джангы бир код ишлеуню башланыууну аллы бла бир кесек сакъларыгъызны тилейбиз.', -'confirmemail_send' => 'Мюкюл кодну джибер', -'confirmemail_sent' => 'Мюкюл этиу письмо джиберилди.', -'confirmemail_oncreate' => 'Мюкюл этиу код электрон адресигизге джиберилди. +'confirmemail_send' => 'Мюкюл кодну джибер', +'confirmemail_sent' => 'Мюкюл этиу письмо джиберилди.', +'confirmemail_oncreate' => 'Мюкюл этиу код электрон адресигизге джиберилди. Кирир ючюн бу код керек тюлдю, алай а бу викиде хайырландырыб башлар ючюн бу кодну белгилерге керексиз.', -'confirmemail_sendfailed' => '{{SITENAME}} Мюкюл письмо джиберилелмеди. Джараусуз харифле болургъа болур, адресни осмакълагъыз. +'confirmemail_sendfailed' => '{{SITENAME}} Мюкюл письмо джиберилелмеди. Джараусуз харифле болургъа болур, адресни осмакълагъыз. Серверни джууабы: $1', -'confirmemail_invalid' => 'Джараусуз мюкюл код. Мюкюл кодну ахыр хайырланыу болджалы чыгъаргъа болур.', -'confirmemail_needlogin' => 'Электорн адресигизни мюкюл этер ючюн, алгъы бурун $1 этерге керексиз.', -'confirmemail_success' => 'Электрон почтагъызны адреси мюкюл этилди. Олтуруу [[Special:UserLogin|ачыб]] Викини татыуун чыгъарыгъыз.', -'confirmemail_loggedin' => 'Электорн почтагъызны адреси мюкюл этилди.', -'confirmemail_error' => 'Мюкюл этилиуде билинмеген халат болду.', -'confirmemail_subject' => '{{SITENAME}} электрон почта адресни мюкюл этилиую', -'confirmemail_body' => 'Ким эседа, биз сагъышдан, $1 IP адресден, +'confirmemail_invalid' => 'Джараусуз мюкюл код. Мюкюл кодну ахыр хайырланыу болджалы чыгъаргъа болур.', +'confirmemail_needlogin' => 'Электорн адресигизни мюкюл этер ючюн, алгъы бурун $1 этерге керексиз.', +'confirmemail_success' => 'Электрон почтагъызны адреси мюкюл этилди. Олтуруу [[Special:UserLogin|ачыб]] Викини татыуун чыгъарыгъыз.', +'confirmemail_loggedin' => 'Электорн почтагъызны адреси мюкюл этилди.', +'confirmemail_error' => 'Мюкюл этилиуде билинмеген халат болду.', +'confirmemail_subject' => '{{SITENAME}} электрон почта адресни мюкюл этилиую', +'confirmemail_body' => 'Ким эседа, биз сагъышдан, $1 IP адресден, {{SITENAME}} сайтда бу электрон адрес бла $2 тергеу джазыу къурады. Бу тергеу джазыу кертида сизники болгъанын къабыл эмда {{SITENAME}} сайтдагъы @@ -2959,8 +3016,20 @@ $3 $5 Бу мюкюл код $4 заманнга дери джарарыкъды.', -'confirmemail_invalidated' => 'Электрон почтаны адресини мюкюл этилиую тыйылды', -'invalidateemail' => 'Электрон почтаны адресин мюкюл этиуюн тый', +'confirmemail_body_changed' => 'Ким эседа, биз сагъышдан, $1 IP адресден, +{{SITENAME}} сайтда, $2 аккаунтны электрон адресин тюрлендиргенди.    + +Бу аккаунт кертида сизники болгъанын къабыл эмда {{SITENAME}} сайтдагъы электрон почта бла хайырланыуну актив халгъа келтирир ючюн, тюбюндеги джибериуню ачыгъыз. + +$3 + +Аккаунтны сиз *къурамагъан*  эсегиз, электорн почта адресни мюкюл этиуюню  тыяр ючюн тюбюндеги джибериуню басыгъыз: + +$5 + +Бу мюкюл код $4 заманнга дери джарарыкъды.', +'confirmemail_invalidated' => 'Электрон почтаны адресини мюкюл этилиую тыйылды', +'invalidateemail' => 'Электрон почтаны адресин мюкюл этиуюн тый', # Scary transclusion 'scarytranscludedisabled' => '[«Interwiki transcluding» джукъланыбды]', @@ -3007,6 +3076,7 @@ $1', 'table_pager_first' => 'Биринчи бет', 'table_pager_last' => 'Ахыр бет', 'table_pager_limit' => 'Хар бетде $1 бет кёргюз', +'table_pager_limit_label' => 'Бир бетде джазылыу:', 'table_pager_limit_submit' => 'Тындыр', 'table_pager_empty' => 'Табылмагъанды', @@ -3119,6 +3189,7 @@ $1', 'version-specialpages' => 'Къуллукъчу бетле', 'version-parserhooks' => 'Синтаксис анализаторну тутуучула', 'version-variables' => 'Тюрленнгенле', +'version-skins' => 'Джасауну темалары', 'version-other' => 'Башха', 'version-mediahandlers' => 'Медияны джарашдырыучула', 'version-hooks' => 'Тутуучула', @@ -3130,6 +3201,13 @@ $1', 'version-hook-subscribedby' => 'Абонент болгъан', 'version-version' => '(Версия $1)', 'version-license' => 'Лицензия', +'version-poweredby-credits' => "Бу вики '''[http://www.mediawiki.org/ MediaWiki]''' программа бла ишлейди, copyright © 2001-$1 $2.", +'version-poweredby-others' => 'башхала', +'version-license-info' => 'MediaWiki эркин программа джазыуду, сиз аны GNU General Public License лицензияны (эркин программа джазыуланы фонду чыгъаргъан; экинчи версиясы неда андан кеч къайсысы да) шартларына кёре джаяргъа эмда/неда тюрлендирирге боллукъсуз. + +MediaWiki хайырлы боллукъду деген умут бла джайылады, алай а БИР ТЮРЛЮ БИР ГАРАНТИЯСЫЗДЫ, КОММЕРЦИЯЛЫКЪ неда ЭНЧИ БИР НЮЗЮРГЕ ДЖАРАРЫКЪ гаратияласыз огъунады. Толуракъ билгиле кёрюр ючюн GNU General Public License лицензиягъа къарагъыз. + +Бу программа бла бирге [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General Public License лицензияны копиясы] болургъа керекди, джокъ эсе Free Software Foundation, Inc. комапиягъа джазыгъыз (адреси: 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA) неда [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html лицензияны онлайн окъугъуз].', 'version-software' => 'Салыннган программа баджарыу', 'version-software-product' => 'Продукт', 'version-software-version' => 'Версия', @@ -3200,6 +3278,15 @@ $1', 'tags-edit' => 'тюрлендир', 'tags-hitcount' => '$1 {{PLURAL:$1|тюрлениу|тюрлениу}}', +# Special:ComparePages +'comparepages' => 'Бетлени тенглешдир', +'compare-selector' => 'Бет версияланы тенглешдир', +'compare-page1' => 'Биринчи бет', +'compare-page2' => 'Экинчи бет', +'compare-rev1' => 'Биринчи версия', +'compare-rev2' => 'Экинчи версия', +'compare-submit' => 'Тенглешдир', + # Database error messages 'dberr-header' => 'Бу викини проблемасы барды', 'dberr-problems' => 'Кечериксиз! Бу сайтда техника джаны бла проблемала чыкъгъандыла.', @@ -3216,8 +3303,13 @@ $1', 'htmlform-float-invalid' => 'Сиз белгилеген багъа сан тюлдю.', 'htmlform-int-toolow' => 'Сиз белгилеген багъа минимумну -$1 тюбюндеди', 'htmlform-int-toohigh' => 'Сиз белгилеген багъа максимумдан - $1 башындады', +'htmlform-required' => 'Бу дараджа бек кереклиди', 'htmlform-submit' => 'Джибер', 'htmlform-reset' => 'Тюрлендириулени ызына сал', 'htmlform-selectorother-other' => 'Башха', +# SQLite database support +'sqlite-has-fts' => '$1 толу текст излеуню хайырландыргъан', +'sqlite-no-fts' => '$1 толу текст излеуню хайырландыра билмеген', + ); diff --git a/languages/messages/MessagesKri.php b/languages/messages/MessagesKri.php index ab6406b8..225bd111 100644 --- a/languages/messages/MessagesKri.php +++ b/languages/messages/MessagesKri.php @@ -288,7 +288,6 @@ Di [[Special:WhatLinksHere/$2|ful list]] de yah.', # Watchlist 'watchlist' => 'Mi list foh wach', 'mywatchlist' => 'Mi list foh wach', -'watchlistfor' => "(foh '''$1''')", 'nowatchlist' => 'Yu noh geht natin na yu list foh wach.', 'watchlistanontext' => '$1 Foh luk o chenj wetin de na yu list foh wach', 'watchnologin' => 'Yu noh kam insai di sait yet', diff --git a/languages/messages/MessagesKrj.php b/languages/messages/MessagesKrj.php index 06a8d4eb..499fc78f 100644 --- a/languages/messages/MessagesKrj.php +++ b/languages/messages/MessagesKrj.php @@ -23,7 +23,7 @@ $messages = array( 'tog-extendwatchlist' => "Palapadun ang ''watchlist'' agud nga mapakita ang tanan nga ginasogtan nga pag-ilis", 'tog-numberheadings' => "Automatiko nga togroan kang nomero ang manga ''heading''", 'tog-showtoolbar' => 'Ipakita ang pangbolig sa pag-ilis (JavaScript)', -'tog-rememberpassword' => "Tandaan ang akun nga ''log-in'' sa dya nga ''computer''", +'tog-rememberpassword' => "Tandaan ang akun nga ''log-in'' sa dya nga ''computer'' (for a maximum of $1 {{PLURAL:$1|day|days}})", 'tog-watchcreations' => "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpanghimo ko", 'tog-watchdefault' => "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpang-''edit'' ko", 'tog-watchmoves' => "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpanghalin ko", @@ -214,7 +214,7 @@ Lantawa sa [[Special:Version|version kang page]].', 'viewsource' => 'Turukun ang ginhalinan', # Login and logout pages -'remembermypassword' => "Tandaan ang akun nga ''log-in'' sa dya nga ''computer''", +'remembermypassword' => "Tandaan ang akun nga ''log-in'' sa dya nga ''computer'' (for a maximum of $1 {{PLURAL:$1|day|days}})", 'nologinlink' => "Himo ka sangka ''account''", 'createaccount' => "Himo ka ''account''", diff --git a/languages/messages/MessagesKs.php b/languages/messages/MessagesKs.php index 22a5d8e2..0de90873 100644 --- a/languages/messages/MessagesKs.php +++ b/languages/messages/MessagesKs.php @@ -9,7 +9,7 @@ * */ -#FIXME: inherit almost everything for now +# FIXME: inherit almost everything for now $rtl = true; $digitTransformTable = array( diff --git a/languages/messages/MessagesKsh.php b/languages/messages/MessagesKsh.php index 326ddf79..0047edda 100644 --- a/languages/messages/MessagesKsh.php +++ b/languages/messages/MessagesKsh.php @@ -14,29 +14,29 @@ /** * Sources: - * The following expressions are based on the Kölsch dictionaries: - * Das Kölsche Wörterbuch, written by Christa Bhatt and Alice Herrwegen, + * The following expressions are based on the Kölsch dictionaries: + * Das Kölsche Wörterbuch, written by Christa Bhatt and Alice Herrwegen, * published by: Akademie för uns kölsche Sproch, Cologne 2005, * ISBN 3-7616-1942-1 * and - * Neuer Kölnischer Sprachschatz in 3 Bänden, written by Adam Wrede, Cologne 1958, + * Neuer Kölnischer Sprachschatz in 3 Bänden, written by Adam Wrede, Cologne 1958, * ISBN 3-7743-0155-7 ISBN 3-7743-0156-5 ISBN 3-7743-0157-3 * - * The grammar (especially: conjugation) is taken from: - * De kölsche Sproch - Kurzgrammatik Kölsch / Deutsch, written by Alice Tiling-Herrwegen, + * The grammar (especially: conjugation) is taken from: + * De kölsche Sproch - Kurzgrammatik Kölsch / Deutsch, written by Alice Tiling-Herrwegen, * published by: Akademie för uns kölsche Sproch, Cologne 2002, * ISBN 3-7616-1604-X * * Special feature: Because of utilization in modern ripuarian literature - * (for example: Asterix op kölsch - Däm Asterix singe Jung, ISBN 3-7704-0468-8) the rules for the letters G and J - * are taken from Adam Wrede (for example: Jedöns, jeeße, jejovve, adich, iggelich, nüdich ) + * (for example: Asterix op kölsch - Däm Asterix singe Jung, ISBN 3-7704-0468-8) the rules for the letters G and J + * are taken from Adam Wrede (for example: Jedöns, jeeße, jejovve, adich, iggelich, nüdich ) * and not from the Akademie (for example: Gedöns, geeße, gegovve, aadig, iggelig, nüdig) * Otherwise most part of the following expressions are taken from the Akademie. * */ -/** +/** * Hints for editing - * Avoid ä and other special codings because of legibility for those users, + * Avoid ä and other special codings because of legibility for those users, * who will take this as a basis for further ripuarian message interfaces * ä => ä, ö => ö, ü => ü, Ä => Ä, Ö => Ö, Ü => Ü, ß => ß * „ => „, “ => “ @@ -91,59 +91,60 @@ $namespaceAliases = array( 'Katejorije_Klaaf' => NS_CATEGORY_TALK, ); -$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' ); +$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' ); $linkTrail = '/^([äöüėëijßəğåůæœça-z]+)(.*)$/sDu'; $specialPageAliases = array( - 'DoubleRedirects' => array( 'Ömleitunge op Ömleitunge' ), - 'BrokenRedirects' => array( 'Ömleitunge en et Leere' ), - 'Disambiguations' => array( 'Wat-es-dat-Sigge', 'Watt ėßß datt?' ), + 'DoubleRedirects' => array( 'Ömleitunge_op_Ömleitunge' ), + 'BrokenRedirects' => array( 'Ömleitunge_en_et_Leere' ), + 'Disambiguations' => array( 'Wat-es-dat-Sigge', 'Watt_ėßß_datt?' ), 'Userlogin' => array( 'Enlogge' ), 'Userlogout' => array( 'Ußlogge' ), - 'CreateAccount' => array( 'Aanmelde', 'Medmaacher wääde', 'Metmaacher wääde' ), - 'Preferences' => array( 'Ming Enstellunge', 'Enstellunge' ), - 'Watchlist' => array( 'Ming Oppassliss', 'Oppassliss' ), - 'Recentchanges' => array( 'Neuste Änderunge', 'Änderunge' ), - 'Upload' => array( 'Daate huhlade', 'Huhlade' ), + 'CreateAccount' => array( 'Aanmelde', 'Medmaacher_wääde', 'Metmaacher_wääde' ), + 'Preferences' => array( 'Ming_Enstellunge', 'Enstellunge' ), + 'Watchlist' => array( 'Ming_Oppassliss', 'Oppassliss' ), + 'Recentchanges' => array( 'Neuste_Änderunge', 'Änderunge' ), + 'Upload' => array( 'Daate_huhlade', 'Huhlade' ), 'Listfiles' => array( 'Datei', 'Dateie' ), - 'Newimages' => array( 'Neu Dateie' ), + 'Newimages' => array( 'Neu_Dateie' ), 'Listusers' => array( 'Medmaacher', 'Metmaacher' ), 'Listgrouprights' => array( 'Jrupperääschte', 'Jropperrääschte' ), 'Statistics' => array( 'Statistik', 'Shtatißtike' ), - 'Randompage' => array( 'Zofällije Sigg' ), - 'Lonelypages' => array( 'Sigge ohne Links drop' ), - 'Uncategorizedpages' => array( 'Sigge ohne Saachjruppe' ), - 'Uncategorizedcategories' => array( 'Saachjruppe ohne Saachjruppe' ), - 'Uncategorizedimages' => array( 'Dateie ohne Saachjruppe' ), - 'Uncategorizedtemplates' => array( 'Schablone ohne Saachjruppe' ), - 'Unusedcategories' => array( 'Schablone ohne Links drop' ), - 'Unusedimages' => array( 'Dateie ohne Links drop' ), - 'Wantedpages' => array( 'Sigge fähle' ), - 'Wantedcategories' => array( 'Saachjruppe fähle', 'Saachjroppe fähle' ), - 'Wantedfiles' => array( 'Dateie fähle' ), - 'Wantedtemplates' => array( 'Schablone fähle' ), - 'Mostlinked' => array( 'Sigge met de mieste Links drop' ), - 'Mostlinkedcategories' => array( 'Et miehts jebruchte Saachjruppe', 'Et miehts jebruchte Saachjroppe' ), - 'Mostlinkedtemplates' => array( 'Et miehts jebruchte Schablone' ), - 'Mostimages' => array( 'Dateie met de mieste Links drop' ), - 'Mostcategories' => array( 'Sigge met de mieste Saachjroppe', 'Sigge met de mieste Saachjruppe' ), - 'Mostrevisions' => array( 'Öff beärbeit', 'Öff beärbeidt', 'Off bearbeit' ), - 'Fewestrevisions' => array( 'Winnig beärbeit', 'Winnish beärbeidt', 'Winnich bearbeit' ), - 'Shortpages' => array( 'Koote Atikelle' ), - 'Longpages' => array( 'Lang Atikelle' ), - 'Newpages' => array( 'Neu Atikelle' ), - 'Ancientpages' => array( 'Ahl Atikelle' ), - 'Deadendpages' => array( 'Sigge ohne Links dren' ), + 'Randompage' => array( 'Zofällije_Sigg' ), + 'Lonelypages' => array( 'Sigge_ohne_Links_drop' ), + 'Uncategorizedpages' => array( 'Sigge_ohne_Saachjruppe' ), + 'Uncategorizedcategories' => array( 'Saachjruppe_ohne_Saachjruppe' ), + 'Uncategorizedimages' => array( 'Dateie_ohne_Saachjruppe' ), + 'Uncategorizedtemplates' => array( 'Schablone_ohne_Saachjruppe' ), + 'Unusedcategories' => array( 'Schablone_ohne_Links_drop' ), + 'Unusedimages' => array( 'Dateie_ohne_Links_drop' ), + 'Wantedpages' => array( 'Sigge_fähle' ), + 'Wantedcategories' => array( 'Saachjruppe_fähle', 'Saachjroppe_fähle' ), + 'Wantedfiles' => array( 'Dateie_fähle' ), + 'Wantedtemplates' => array( 'Schablone_fähle' ), + 'Mostlinked' => array( 'Sigge_met_de_mieste_Links_drop' ), + 'Mostlinkedcategories' => array( 'Et_miehts_jebruchte_Saachjruppe', 'Et_miehts_jebruchte_Saachjroppe' ), + 'Mostlinkedtemplates' => array( 'Et_miehts_jebruchte_Schablone' ), + 'Mostimages' => array( 'Dateie_met_de_mieste_Links_drop' ), + 'Mostcategories' => array( 'Sigge_met_de_mieste_Saachjroppe', 'Sigge_met_de_mieste_Saachjruppe' ), + 'Mostrevisions' => array( 'Öff_beärbeit', 'Öff_beärbeidt', 'Off_bearbeit' ), + 'Fewestrevisions' => array( 'Winnig_beärbeit', 'Winnish_beärbeidt', 'Winnich_bearbeit' ), + 'Shortpages' => array( 'Koote_Atikelle' ), + 'Longpages' => array( 'Lang_Atikelle' ), + 'Newpages' => array( 'Neu_Atikelle' ), + 'Ancientpages' => array( 'Ahl_Atikelle' ), + 'Deadendpages' => array( 'Sigge_ohne_Links_dren' ), 'Protectedpages' => array( 'Siggeschotz' ), 'Protectedtitles' => array( 'Tittelschotz' ), - 'Allpages' => array( 'All Sigge' ), - 'Prefixindex' => array( 'Sigge met Aanfang' ), + 'Allpages' => array( 'All_Sigge' ), + 'Prefixindex' => array( 'Sigge_met_Aanfang' ), 'Ipblocklist' => array( 'Jesperrt', 'Jeshpächt' ), + 'Unblock' => array( 'Freijävve', 'Frei_jävve', 'Freijevve', 'Frei_jevve' ), 'Specialpages' => array( 'Sondersigge', 'Söndersigge' ), 'Contributions' => array( 'Beidräch', 'Beidrääsh' ), 'Emailuser' => array( 'Email', 'E-mail' ), - 'Confirmemail' => array( 'Email Bestätije', 'E-mail Bestätije', 'EmailBestätije', 'E-mailBestätije' ), - 'Whatlinkshere' => array( 'Wat noh hee link' ), + 'Confirmemail' => array( 'Email_Bestätije', 'E-mail_Bestätije', 'EmailBestätije', 'E-mailBestätije' ), + 'Whatlinkshere' => array( 'Wat_noh_hee_link' ), 'Recentchangeslinked' => array( 'Änderungen_an_verlinkte_Sigge' ), 'Movepage' => array( 'Ömnenne', 'Ömdäufe' ), 'Blockme' => array( 'Proxy-Sperre' ), @@ -160,32 +161,35 @@ $specialPageAliases = array( 'Unlockdb' => array( 'Datebank-opmaache' ), 'Userrights' => array( 'Medmaacherrääschte', 'Metmaacherrääschte' ), 'MIMEsearch' => array( 'MIME-Typ', 'MIMEtüp' ), - 'FileDuplicateSearch' => array( 'Dubbel Dateie' ), - 'Unwatchedpages' => array( 'Sigge oohne Oppasser' ), + 'FileDuplicateSearch' => array( 'Dubbel_Dateie' ), + 'Unwatchedpages' => array( 'Sigge_oohne_Oppasser' ), 'Listredirects' => array( 'Ömleitunge' ), - 'Revisiondelete' => array( 'Version fottschmieße' ), - 'Unusedtemplates' => array( 'Nit jebruchte Schablone' ), - 'Randomredirect' => array( 'Zofällije Ömleitung' ), - 'Mypage' => array( 'Ming Medmaachersigg', 'Ming Metmaachersigg', 'Medmaachersigg', 'Metmaachersigg' ), - 'Mytalk' => array( 'Ming Klaafsigg', 'Klaaf' ), - 'Mycontributions' => array( 'Ming Beidräch', 'Ming Beidrääsh' ), + 'Revisiondelete' => array( 'Version_fottschmieße' ), + 'Unusedtemplates' => array( 'Nit_jebruchte_Schablone' ), + 'Randomredirect' => array( 'Zofällije_Ömleitung' ), + 'Mypage' => array( 'Ming_Medmaachersigg', 'Ming_Metmaachersigg', 'Medmaachersigg', 'Metmaachersigg' ), + 'Mytalk' => array( 'Ming_Klaafsigg', 'Klaaf' ), + 'Mycontributions' => array( 'Ming_Beidräch', 'Ming_Beidrääsh' ), 'Listadmins' => array( 'Köbese', 'Köbeße', 'Wiki-Köbesse' ), 'Listbots' => array( 'Bots' ), - 'Popularpages' => array( 'Miehts affjeroofe Sigge' ), + 'Popularpages' => array( 'Miehts_affjeroofe_Sigge' ), 'Search' => array( 'Sök', 'Söök', 'Söke', 'Sööke' ), - 'Resetpass' => array( 'Neu Passwood' ), - 'Withoutinterwiki' => array( 'Ohne Shproche Lenks' ), - 'MergeHistory' => array( 'Versione zosammeschmieße' ), + 'Resetpass' => array( 'Neu_Passwood' ), + 'Withoutinterwiki' => array( 'Ohne_Shproche_Lenks' ), + 'MergeHistory' => array( 'Versione_zosammeschmieße' ), 'Filepath' => array( 'Dateipaad' ), - 'Invalidateemail' => array( 'Onjöltije e-mail Addräß', 'Onjöltije E-Mail Adress' ), - 'Blankpage' => array( 'Leddijje Sigge' ), - 'LinkSearch' => array( 'Websigge Söke' ), + 'Invalidateemail' => array( 'Onjöltije_e-mail_Addräß', 'Onjöltije_E-Mail_Adress' ), + 'Blankpage' => array( 'Leddijje_Sigge' ), + 'LinkSearch' => array( 'Websigge_Söke' ), 'DeletedContributions' => array( 'Fotjeschmeße' ), 'Tags' => array( 'Makeerunge' ), + 'Activeusers' => array( 'Aktive', 'AktiveMetmaacher', 'Aktive_Metmaacher', 'AktiveMedmaacher', 'Aktive_Medmaacher' ), + 'ComparePages' => array( 'SiggeVerjliesche', 'Sigge_verjliesche', 'SiggeVerjlieche', 'Sigge_verjieche' ), + 'Badtitle' => array( 'UnjewönschSiggetittelle', 'Unjewönsch_Siggetittelle' ), ); $magicWords = array( - 'redirect' => array( '0', '#ÖMLEIDE OP', '#ÖMLEIDE', '#LEIDT ÖM OP', '#ÖMLEIDUNG', '#WEITERLEITUNG', '#REDIRECT' ), + 'redirect' => array( '0', '#ÖMLEIDE_OP', '#ÖMLEIDE', '#LEIDT_ÖM_OP', '#ÖMLEIDUNG', '#WEITERLEITUNG', '#REDIRECT' ), 'nogallery' => array( '0', '__KEIN_JALLERIE__', '__KEINE_GALERIE__', '__NOGALLERY__' ), 'toc' => array( '0', '__ENHALLT__', '__INHALTSVERZEICHNIS__', '__TOC__' ), 'img_right' => array( '1', 'rähß', 'räts', 'rechts', 'right' ), @@ -214,8 +218,7 @@ $messages = array( 'tog-editsection' => 'Maach [{{int:Editsection}}]-Links aan de Avschnedde dran', 'tog-editsectiononrightclick' => 'Avschnedde met Räächs-Klicke op de Üvverschrefte ändere (bruch Java_Skripp)', 'tog-showtoc' => 'Zeich en Enhaldsüvversich bei Sigge met mieh wie drei Üvverschrefte dren', -'tog-rememberpassword' => 'Op Duur aanmelde (op dämm Kompjuter un för dää Brauser)', -'tog-editwidth' => 'Maach dat Feld zom Tex enjävve esu breid wi et jeiht', +'tog-rememberpassword' => 'Op Duur enlogge op dämm Kompjuter un för dää Brauser (hält {{PLURAL:$1|för eine Daach|bes op $1 Dääsch|bloß för hück}})', 'tog-watchcreations' => 'Dun de Sigge, die ich neu aanläje, för ming Oppassliss vürschlage', 'tog-watchdefault' => 'Dun de Sigge för ming Oppassliss vürschlage, die ich aanpacken un änder', 'tog-watchmoves' => 'Dun ming selfs ömjenante Sigge automatisch för ming Oppassliss vürschlage', @@ -362,31 +365,21 @@ Dat es och all op Änglesch: 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Ne neue Afschnet onge draan!', -'vector-action-delete' => 'Fottschmiiße!', -'vector-action-move' => 'Ömnänne!', -'vector-action-protect' => 'Schöze!', -'vector-action-undelete' => 'Zerökholle!', -'vector-action-unprotect' => 'Schoz ophävve!', -'vector-namespace-category' => 'Saachjroppesigg', -'vector-namespace-help' => 'Hölpsigg', -'vector-namespace-image' => 'Datei', -'vector-namespace-main' => 'Wikisigg', -'vector-namespace-media' => 'Medijesigg', -'vector-namespace-mediawiki' => 'Täx/Nohreesch', -'vector-namespace-project' => 'Projäksigg', -'vector-namespace-special' => '{{int:nstab-special}}', -'vector-namespace-talk' => 'Klaafsigg', -'vector-namespace-template' => 'Schablohn', -'vector-namespace-user' => 'Metmaachersigg', -'vector-view-create' => 'Neu Schriive!', -'vector-view-edit' => 'Ändere!', -'vector-view-history' => 'Versione zeije!', -'vector-view-view' => 'Lesse!', -'vector-view-viewsource' => 'Wikitex aanlooere!', -'actions' => 'Akßjuhne', -'namespaces' => 'Appachtemangs', -'variants' => 'Variante', +'vector-action-addsection' => 'Ne neue Afschnet onge draan!', +'vector-action-delete' => 'Fottschmiiße!', +'vector-action-move' => 'Ömnänne!', +'vector-action-protect' => 'Schöze!', +'vector-action-undelete' => 'Zerökholle!', +'vector-action-unprotect' => 'Schoz ophävve!', +'vector-simplesearch-preference' => 'Donn de verbäßerte Vörschlääsch beim Söke aanschallde (bloß mem Ußsinn „Vektor“ zesamme ze hann)', +'vector-view-create' => 'Neu Schriive!', +'vector-view-edit' => 'Ändere!', +'vector-view-history' => 'Versione zeije!', +'vector-view-view' => 'Lesse!', +'vector-view-viewsource' => 'Wikitex aanlooere!', +'actions' => 'Akßjuhne', +'namespaces' => 'Appachtemangs', +'variants' => 'Variante', 'errorpagetitle' => 'Fähler', 'returnto' => 'Jangk widder noh: „$1“.', @@ -447,6 +440,9 @@ Zoh vill Metmaacher versöhke di Sigg heh aanzelohre. Bes esu joot un waat e Weilsche, ih dat de versöhks, di Sigg noch ens opzeroofe. $1', +'pool-timeout' => 'Zick zem Waade affjeloufe, diweil mer op en Sperr am Waade wohre', +'pool-queuefull' => 'De Schlang zom Waade op ene freie Prozäß zom Beärbeide es vull', +'pool-errorunknown' => 'Dä Fähler kenne mer nit', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Üvver {{GRAMMAR:Akkusativ|{{SITENAME}}}}', @@ -627,7 +623,8 @@ Denk dran, Do künnts Der [[Special:Preferences|Ding Enstellunge heh för {{GRAM 'yourname' => 'Metmaacher Name:', 'yourpassword' => 'Paßwoot:', 'yourpasswordagain' => 'Noch ens dat Passwood', -'remembermypassword' => 'Op Duur Aanmelde', +'remembermypassword' => 'Op Duur aanmelde (hält {{PLURAL:$1|för eine Daach|bes op $1 Dääsch|bloß för hück}})', +'securelogin-stick-https' => 'Noh em Enlogge övver HTTPS verbonge blieve.', 'yourdomainname' => 'Ding Domain', 'externaldberror' => 'Do wor ene Fähler en de externe Daatebank, oder Do darfs Ding extern Daate nit ändere. Dat Aanmelde jingk jedenfalls donevve.', 'login' => 'Enlogge', @@ -644,6 +641,7 @@ Denk dran, Do künnts Der [[Special:Preferences|Ding Enstellunge heh för {{GRAM 'gotaccount' => "Do bes ald aanjemeldt {{GRAMMAR:en|{{SITENAME}}}}? Dann jangk nohm '''$1'''.", 'gotaccountlink' => 'Enlogge', 'createaccountmail' => 'Scheck mer en E-Mail met Passwood', +'createaccountreason' => 'Jrond:', 'badretype' => 'Ding zwëij ennjejovve Paßßwööter sinn nit ejaal. Do muss De Dich för ein entscheide.', 'userexists' => 'Ene Metmaacher met däm Name jitt et ald. Schad. Do muss De Der ene andere Name usdenke.', 'loginerror' => 'Fähler beim Enlogge', @@ -669,6 +667,7 @@ Udder donn_[[Special:UserLogin/signup|ene neue Metmaacher aanmelde]].', 'wrongpasswordempty' => "Dat Passwood ka'mer nit fottlooße. Jetz muss De et noch ens versöke.", 'passwordtooshort' => 'En Paßwööter {{PLURAL:$1|moß|möße|moß}} winnichstens {{PLURAL:$1|ei|$1|kei}} Zeiche, {{PLURAL:$1|Zeffer|Zeffere|Zeffere}}, udder Bochstave dren sin.', 'password-name-match' => 'Ding Poßwoot moß anders wi Dinge Name als ene Metmaacher sin.', +'password-login-forbidden' => 'Dä Zohjang met däm Metmaacher-Name un däm Paßwoot es verbodde.', 'mailmypassword' => 'Passwood verjesse?', 'passwordremindertitle' => 'Neu Paßwoot för {{GRAMMAR:Dat|{{SITENAME}}}}', 'passwordremindertext' => 'Jod müjjelich, Do wors et selver, @@ -739,6 +738,9 @@ Waat e Wielsche, ih dat De et widder versöhks.', 'suspicious-userlogout' => "Do bes '''nit''' ußjelogg. Et süht us, wi wann ene kappodde Brauser udder proxyẞööver met Zwescheschpeischer noh däm Ußlogge jefrooch hät.", +# E-mail sending +'php-mail-error-unknown' => 'Nit bekannte Fähler met dä Funxjohn mail() vum PHP', + # Password reset dialog 'resetpass' => 'Passwood tuusche udder neu ußjävve', 'resetpass_announce' => 'De beß jez enjelogg med ennem Zweschepasswoot, wat De övver e-mail krääje häs. Dat kanns De nit einfar_esu behallde. Alsu donn jetz e neu Passwoot för op Duur aanjevve.', @@ -791,9 +793,10 @@ Do häs Der enzwesche e neuZweschepasswood jehollt.', 'showlivepreview' => 'Lebendije Vör-Aansich zeije', 'showdiff' => 'De Ungerscheide zeije', 'anoneditwarning' => "'''Opjepaß:''' Weil De nit enjelogg bes, weed Ding IP-Adräß en dä Sigg ier Leß met de Versione faßjehallde wääde.", +'anonpreviewwarning' => "''Weil De nit enjlogg bes, weed Ding IP-Addräß zoamme met dä neue Version faßjehallde, wann de heh di Sigg avspeichere deihß.''", 'missingsummary' => 'Opjepass: Do häs nix bei „{{int:summary}}“ enjejovve. Dun noch ens op „{{int:savearticle}}“ klicke, öm Ding Änderunge ohne de Zosammefassung ze Speichere. Ävver besser jiss De do jetz tirek ens jet en!', 'missingcommenttext' => 'Jevv en „Koot Zosammejefass, Quell“ aan!', -'missingcommentheader' => "'''Opjepass:''' Do häs kein Üvverschreff för Dinge Beidrach enjejovve. Wann De noch ens op „{{int:savearticle}}“ dröcks, weed dä Beidrach ohne Üvverschreff avjespeichert.", +'missingcommentheader' => "'''Opjepass:''' Do häs kein Üvverschreff för Dinge Beidrach enjejovve. Wann De noch ens op „{{int:savearticle}}“ dröcks, weed Dinge Beidrach der ohne avjespeichert.", 'summary-preview' => 'Vör-Aansich vun „Koot Zosammejefass, Quell“:', 'subject-preview' => 'Vör-Aansich vun de Üvverschreff:', 'blockedtitle' => 'Dä Metmaacher es jesperrt', @@ -910,9 +913,13 @@ för der '''Opera''': ''F5'' — mem '''Safari''': ''Cmd-Shift-R'' — un em '''Konqueror''': ''F5'' — et ess en bunte Welt!", -'userinvalidcssjstitle' => 'Opjepass: Et jitt kein Ussinn met däm Name: „$1“ - -denk dran, dat ene Metmaacher eije Dateie för et Ussinn han kann, un dat die met kleine Buchstave -aanfange dun, alsu etwa: {{ns:user}}:Name/monobook.css, un {{ns:user}}:Name/monobook.js heiße.', +'sitecsspreview' => "'''Opjepass:''' Do bes heh nor am Usprobeere, wat Ding CSS mäht, +et es noch nit jesechert!", +'sitejspreview' => 'Opjepass: Do bes heh nor am Usprobeere, wat Ding +Java_Skripp mäht, et es noch nit jesechert!', +'userinvalidcssjstitle' => 'Opjepass: Et jitt kein Ussinn met däm Name: „$1“ - +denk dran, dat ene Metmaacher eije Dateie för et Ussinn han kann, un dat die met kleine Buchstave +aanfange dun, alsu etwa: {{ns:user}}:Name/vector.css, un {{ns:user}}:Name/vector.js heiße.', 'updated' => '(Aanjepack)', 'note' => "'''Opjepass:'''", 'previewnote' => "'''Heh kütt nor de Vör-Aansich - Ding Änderunge sin noch nit jesechert!'''", @@ -958,8 +965,6 @@ Bes De secher, watte mähs? 'copyrightwarning' => 'Ding Beidräch stonn unger de [[$2]], süch $1. Wann De nit han wells, dat Dinge Tex ömjemodelt weed, un söns wohin verdeilt, dun en hee nit speichere. Mem Avspeichere sähs De och zo, dat et vun Dir selvs es, un/oder Do dat Rääch häs, en hee zo verbreide. Wann et nit stemmp, oder Do kanns et nit nohwiese, kann Dich dat en dr Bau bränge!', 'copyrightwarning2' => 'De Beidräch {{GRAMMAR:en|{{SITENAME}}}} künne vun andere Metmaacher ömjemodelt oder fottjeschmesse wääde. Wann Der dat nit rääch es, schriev nix. Et es och nüdich, dat et vun Dir selvs es, oder dat Do dat Rääch häs, et hee öffentlich wigger ze jevve. Süch $1. Wann et nit stemmp, oder Do kanns et nit nohwiese, künnt Dich dat en dr Bau bränge!', -'longpagewarning' => "'''Oppjepass:''' Dä Tex, dä De heh jescheck häs, dä es '''$1''' -Kilobyte jroß. Manch Brauser kütt nit domet klor, wann et mieh wie '''32''' Kilobyte sin. Do künnts De drüvver nohdenke, dat Dinge en kleiner Stöckche ze zerkloppe.", 'longpageerror' => "'''Janz schlemme Fähler:''' Dä Tex, dä De heh jescheck häs, dä es '''$1''' Kilobyte jroß. Dat sin mieh wie '''$2''' Kilobyte. Dat künne mer nit speichere! @@ -1141,6 +1146,8 @@ $1", 'logdelete-success' => "'''Dä Enndraach em Logboch woot verstoche odder seeschba jemaat.'''", 'logdelete-failure' => "'''Däm Enndraach em Logboch sing Seeschbaakeit kunnte mer nit ändere:''' $1", 'revdel-restore' => 'Versteische udder Seeschba maache', +'revdel-restore-deleted' => 'fottjeschmeße Versione', +'revdel-restore-visible' => 'seeshtba Versione', 'pagehist' => 'Älldere Versione', 'deletedhist' => 'Fottjeschmesse Versione', 'revdelete-content' => 'dä Enhalt fun dä Sigg', @@ -1205,11 +1212,13 @@ Donn de Version makeere bes wohen (inklusive) dat övverdraare wäde sull. Donn # Diffs 'history-title' => 'Liss met Versione vun „$1“', 'difference' => '(Ungerscheid zwesche de Versione)', +'difference-multipage' => '(Ongerscheide zwesche Sigge)', 'lineno' => 'Reih $1:', 'compareselectedversions' => 'Dun de markeete Version verjliche', 'showhideselectedversions' => 'De ußjewählte Versione aanzeije udder vershteiche', 'editundo' => 'De letzte Änderung zeröck nämme', -'diff-multi' => '(Mer don hee {{PLURAL:$1|eij Version|$1 Versione|keij Version}} dozwesche beim Verjliesche översprenge)', +'diff-multi' => '(Mer don hee {{PLURAL:$1|eij Version|$1 Versione|keij Version}} dozwesche beim Verjliesche översprenge. Di sin vun jesamp {{PLURAL:$2|einem Metmaacher|$2 Metmaachere|keinem Metmaacher}} jemaat woode)', +'diff-multi-manyusers' => '({{PLURAL:$1|Ein Version|$1 Versione|kei Version}} dozwesche vun mieh wi {{PLURAL:$2|einem Metmaacher|$2 Metmaachere|keinem Metmaacher}} wääde nit jezeish)', # Search results 'searchresults' => 'Wat beim Söke eruskom', @@ -1244,6 +1253,7 @@ Donn de Version makeere bes wohen (inklusive) dat övverdraare wäde sull. Donn 'searchprofile-everything-tooltip' => 'Söök övverall dren, och op de Klaafsigge', 'searchprofile-advanced-tooltip' => 'Donn en ußjesohte Appachtemangs sööke', 'search-result-size' => '$1 ({{PLURAL:$2|Eij Woot|$2 Wööter|Keij Woot}})', +'search-result-category-size' => '{{PLURAL:$1|1 Saach|$1 Saache|0 Saache}} ({{PLURAL:$2|1 Ongerjropp|$2 Ongerjroppe|0 Ongerjroppe}}, {{PLURAL:$3|1 Datei|$3 Dateie|0 Dateie}})', 'search-result-score' => 'Jeweesch: $1%', 'search-redirect' => '(Ömleitung $1)', 'search-section' => '(Avschnett $1)', @@ -1330,6 +1340,7 @@ dat dänne ihr Daate topaktuell sin, 'contextlines' => 'Reihe för jede Treffer:', 'contextchars' => 'Zëijshe uß de Ömjävung, pro Rëij:', 'stub-threshold' => 'Links passend för klein Sigge fomateere av esu vill Bytes:', +'stub-threshold-disabled' => 'Ußjeschalldt', 'recentchangesdays' => 'Aanzahl Dage en de Liss met de „Neuste Änderunge“ — als Standad:', 'recentchangesdays-max' => '(Nit mieh wie {{PLURAL:$1|eine Daach|$1 Dääsh|keine Daach}})', 'recentchangescount' => 'Aanzahl Änderunge en de Leß, als Shtandad:', @@ -1363,6 +1374,7 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: 'Dateie', 'prefs-custom-css' => 'Selfsjemaat Cascading Style Sheet', 'prefs-custom-js' => 'Selfsjemaat JavaSkripp', +'prefs-common-css-js' => 'Gemeinsam CSS un JavaSkrepp för all de Bovverfläshe:', 'prefs-reset-intro' => 'Op dä Sigg kanns De Ding Enstellunge op dämm Wiki singe Shandatt setze lohße. Ävver Opjepaß: Do jidd et keine „Retuur“-Knopp för!', 'prefs-emailconfirm-label' => 'Beshtätejung övver e-mail:', 'prefs-textboxsize' => 'Wi jruuß sull dat Feld för et Afschnedde un Sigge ändere sin', @@ -1385,7 +1397,7 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: 'Möhn, Weech odder Mädche', 'prefs-help-gender' => '* Moß mer nit aanjevve, un wann et aanjejovve eß, dann kallt et Wiki övver Desch als „dä Pitter“ udder „dat Tiina“, sönß uns „Metmaacher Pütz“. Dat kritt de janne Welt ze sinn, nit nur Do allein.', 'email' => 'E-mail', -'prefs-help-realname' => '* Dinge richtije Name - kanns De fott looße - wann De en ävver nenne wells, dann weed dä jebruch, öm Ding Beidräch domet ze schmöcke.', +'prefs-help-realname' => '* Dinge richtije Name — kanns De fott looße — wann De en ävver nenne wells, dann weed dä jebruch, öm Ding Beidräch domet ze schmöcke.', 'prefs-help-email' => '* Ding e-mail Adress - kanns De fottlooße, un se es för Andre nit ze sinn - mäht et ävver müjjelich, Der e neu Passwoot ze schecke, wann De et ens verjäße häß. Do kannß och zohlohße, dat mer Der domet övver Ding Metmaacherklaafsigg en e-mail schecke kann. Esu künne ander Metmaacher met Der en Kontak kumme, ohne dat se Dinge Name oder Ding e-Mail Adress kenne mööte.', 'prefs-help-email-required' => 'Do moß en jöltije E-Mail-Adress aanjevve.', 'prefs-info' => 'Jrundlare', @@ -1398,9 +1410,15 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: 'Extra Ußwahle', 'prefs-advancedsearchoptions' => 'Extra Ußwahle', 'prefs-advancedwatchlist' => 'Extra Ußwahle', -'prefs-display' => 'Ußwahle för et Leßte Aanzeje', +'prefs-displayrc' => 'Ußwahle för et Leßte Aanzeje', +'prefs-displaysearchoptions' => 'Enstellunge för et Aanzeje', +'prefs-displaywatchlist' => 'Enstellunge för et Aanzeje', 'prefs-diffs' => 'Ongerscheide un Verjliische', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'De Addräß fö de e-mail schingk en Odenung', +'email-address-validity-invalid' => 'Jivv en jöltijje Addräß fö de e-mail en', + # User rights 'userrights' => 'Metmaacher ehr Räächde verwalde', 'userrights-lookup-user' => 'Metmaacherjruppe verwalde', @@ -1485,6 +1503,7 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: 'Ene Metmaacher sperre un em singe Name versteiche', 'right-ipblock-exempt' => 'Es ußjenomme vun automatesche Sperre, vun Sperre fun IP-Adresse, un vun Sperre vun Bereiche vun IP-Adresse', 'right-proxyunbannable' => 'Es ußjenomme fun automatische Sperre fun Proxy-Servere', +'right-unblockself' => 'Retuur nämme, wam_mer sellver jesperrt woode es', 'right-protect' => 'Sigge schöze, jeschözde Sigge änndere, un der iere Schoz widder ophevve', 'right-editprotected' => 'Jeschötzte Sigge ändere, ohne Kaskadeschoz', 'right-editinterface' => 'Sigge met de Texte ändere, die et Wiki kallt', @@ -1507,7 +1526,6 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: 'De Datebank deeschmaache un opmaache för Änderunge', 'right-reset-passwords' => 'Enem andere Metmaacher et Paßwoot zeröck setze', 'right-override-export-depth' => 'Beim Sigge Expoteere de Sigge metnämme, woh Lingks drop jon — beß fönef Schredde wigk', -'right-versiondetail' => 'Ußföhrlesh Enfomazjuhne övver de Projramme vum Wiki aanloore', 'right-sendemail' => 'e-mail aan ander Metmaacher schecke', # User rights log @@ -1558,14 +1576,9 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: 'Enstellunge', 'recentchangestext' => 'Op dä Sigg hee sin de neuste Änderunge am Wiki opjeliss.', 'recentchanges-feed-description' => 'Op dämm Abonnomang-Kannal (Feed) kannze de {{int:recentchanges}} aam Wiki en Laif un en Färve metloore.', -'recentchanges-label-legend' => 'Lejänd: $1.', -'recentchanges-legend-newpage' => '$1 - neu Sigg', 'recentchanges-label-newpage' => 'Heh di Sigg es neu dobei jekumme met dä Änderung', -'recentchanges-legend-minor' => '$1 - klein mini-Änderung', 'recentchanges-label-minor' => 'Heh dat es en Mini-Änderung', -'recentchanges-legend-bot' => '$1 - vun enem Bot jemaat', 'recentchanges-label-bot' => 'Di Änderung es fun enem Bot jemaat woode', -'recentchanges-legend-unpatrolled' => '$1 - nit nohjeloort', 'recentchanges-label-unpatrolled' => 'Heh di Änderung es noch nit nohjeloort', 'rcnote' => '{{PLURAL:$1|Heh es de letzte Änderung us|Heh sin de letzte $1 Änderunge us|Et jit kei Änderunge en}} {{PLURAL:$2|däm letzte Daach|de letzte $2 Dääsch|dä Zick}} vum $4 aff $5 Uhr beß jetz.', 'rcnotefrom' => 'Hee sin bes $1 fun de Änderunge zick däm $3 öm $4 Uhr opjeliss.', @@ -1616,6 +1629,9 @@ Sigge uß Dinge [[Special:Watchlist|Opaßleß]] sin '''fett''' jeschrevve.", Dat Fo'zeishnis $1 för de huhjelaade Dateie es fott, un dat Websörver Projramm kunnd_et och nit aanlääje.", 'upload_directory_read_only' => 'Doof: En dat Verzeichnis $1 för Dateie dren huhzelade, do kann dat Websörver Projramm nix erenschrieve.', 'uploaderror' => 'Fähler beim Huhlade', +'upload-recreate-warning' => "'''Opjepaß: En Dattei met dämm Name es ömjenannt udder fottjeschmeße woode.''' + +De Logböösher vum Datteie Ömnänne un Fottschmieße saare doh drövver:", 'uploadtext' => "Met däm Formular unge kanns de Belder oder ander Daate huhlade. Jangk op de [[Special:FileList|Less met de huhjelaade Datteie]], öm esu en Datteie ze beloore udder noh inne ze söhke. De Logbööscher vum [[Special:Log/upload|Huhlaade]] un vum [[Special:Log/delete|Sigge fottschmiiße]] künnte Der och hellefe. @@ -1657,6 +1673,17 @@ hallde deiht, wat nit erlaub, un müjjelelscherwies ene jefährlesche Dattei-Typ 'filetype-unwanted-type' => "Dat Dateifommaat '''„.$1“''' wulle mer nit esu jään huhjelaade krijje. Leever {{PLURAL:$3|ham_mer|ham_mer ein fun|ham_mer nix}}: $2.", 'filetype-banned-type' => "Dat Dateifommaat '''„.$1“''' wulle mer nit huhjelaade krijje. Älaup {{PLURAL:$3|es|sin_er}}: $2.", 'filetype-missing' => 'Di Datei, di De huhlaade wells, hät keij Fommaat em Name, wi zem Beijspöll „.jpg“, esu jet hätte mer ävver jähn.', +'empty-file' => 'Ding huhjelaade Dattei wohr läddesch.', +'file-too-large' => 'Ding huhjelaade Dattei wohr ze jruß.', +'filename-tooshort' => 'Dä Name vun dä Dattei es ze koot.', +'filetype-banned' => 'Di Zoot Dattei es nit zohjelohße.', +'verification-error' => 'Heh di Dattei es dorsch de Pröövung jefalle.', +'hookaborted' => 'Ding Änderung wood vun enem Zohsazprojramm nit zohjelohße.', +'illegal-filename' => 'Esu ene Name för en Dattei es nit zohjelohße.', +'overwrite' => 'Et es nit zohjelohße, Datteie ze övverschrieve, di ald doh sin.', +'unknown-error' => 'Ene Fähler es opjetrodde, dä mer nit kenne.', +'tmp-create-error' => 'Mer kunnte kein Zweschedattei aanlääje.', +'tmp-write-error' => 'Ene Fähler es opjetrodde bem Schrieve en de Zweschedattei.', 'large-file' => 'Dateie sullte nit jröößer wääde, wi $1, ävver Ding Datei es $2 jroß.', 'largefileserver' => 'De Datei es ze jroß. Jrößer wie däm ẞööver sing Enstellung erlaub.', 'emptyfile' => 'Wat De hee jetz huhjelade häs, hät kein Daate dren jehatt. Künnt sin, dat De Dich verdon häs, un dä Name wo verkihrt jeschrevve. Luur ens ov De wirklich die Datei hee huhlade wells.', @@ -1688,13 +1715,14 @@ Jangk zeröck un lad Ding Datei unger enem andere Name huh, wann De se noch han wells.', 'file-exists-duplicate' => 'Di Dattei hät dersellve Enhallt wi hee di {{PLURAL:$1|Datei|Dateie|}}:', 'file-deleted-duplicate' => 'En Datei mem sellve Enhallt wi „[[:$1]]“ es ens fottjeschmeße woode. Donn dä Zosammehang em „{{int:dellogpage}}“ nokike, ih dat De se widder huhläds.', -'successfulupload' => 'Et Huhlade hät jeflupp', 'uploadwarning' => 'Warnung beim Huhlade', 'uploadwarning-text' => 'Donn onge dä Täx övver di Dattei ändere, un versöhg_et norr_ens.', 'savefile' => 'Datei avspeichere', 'uploadedimage' => 'hät huhjelade: „[[$1]]“', 'overwroteimage' => 'hät en neue Version huhjelade vun: „[[$1]]“', 'uploaddisabled' => 'Huhlade jesperrt', +'copyuploaddisabled' => 'Et Huhlaade us URLs es afjeschalldt', +'uploadfromurl-queued' => 'Dat Huhlaade es jiz en de Waadeschlang.', 'uploaddisabledtext' => 'Et Huhlade es jesperrt.', 'php-uploaddisabledtext' => 'Et Dateie Huhlade es en PHP affjeschalldt. Bes esu joot un donn noh de Enshtellung file_uploads loore.', @@ -1734,6 +1762,14 @@ JD # Jenoptik MGP # Pentax PICT # - diverse - # ', +'upload-success-subj' => 'Et Huhlade hät jeflupp', +'upload-success-msg' => 'Ding vun [$2] huhjelaade Dattei es jäz och hee: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Probleem bem Huhlaade', +'upload-failure-msg' => 'Mer hatte e Probleem met Dinge huhjelaade Dattei vun [$2]: + +$1', +'upload-warning-subj' => 'Warnung beim Huhlade', +'upload-warning-msg' => 'Met däm Huhlaade vun [$2] es jet donevve jejange, Do kanns retuur jon op et [[Special:Upload/stash/$1|Fommulaa zom Huhlaade]] öm dat ze repareere.', 'upload-proto-error' => 'Verkihrt Protokoll', 'upload-proto-error-text' => 'Ene URL för en Datei fun huhzelade moß met http:// uder ftp:// aafange.', @@ -1797,6 +1833,7 @@ Velleich probees De et och zo en Zick, wo winnijer loss es.', 'listfiles_search_for' => 'Sök noh däm Name vun dä Datei:', 'imgfile' => 'Datei', 'listfiles' => 'Dateie opleste', +'listfiles_thumb' => 'Minni-Belldsche', 'listfiles_date' => 'Dattum', 'listfiles_name' => 'Name', 'listfiles_user' => 'Metmaacher', @@ -1841,6 +1878,7 @@ Dat sellve shteiht hee dronger.', 'uploadnewversion-linktext' => 'Dun en neu Version vun dä Datei huhlade', 'shared-repo-from' => 'uß $1', 'shared-repo' => 'ene jemeinsame Beshtand', +'filepage.css' => '/* Das folgende CSS wird auf Dateibeschreibungsseiten, auch auf fremden Client-Wikis, geladen. */', # File reversion 'filerevert' => '„$1“ zerök holle', @@ -1919,8 +1957,8 @@ All de Sigge em Wiki, och Klaafsigge, Ömleitunge, un esu jet', 'statistics-edits' => 'Änderunge aan Sigge', 'statistics-edits-average' => 'Aanzahl Änderunge pro Sigg em Dorschschnett', 'statistics-views-total' => 'Sigge affjeroofe, ėnßjesamp', +'statistics-views-total-desc' => 'Sigge, die et nit johv, un Extrasigge sin nit metjezallt', 'statistics-views-peredit' => 'Sigge affjeroofe, pro Änderung', -'statistics-jobqueue' => 'Endrääch en de [http://www.mediawiki.org/wiki/Manual:Job_queue Leß met de Aufjabe]', 'statistics-users' => '[[Special:ListUsers|Metmaacher]] aajemelldt', 'statistics-users-active' => 'Aktive Metmaacher', 'statistics-users-active-desc' => 'Metmaacher, die {{PLURAL:$1|hück un jesterre|en de läzte $1 Dääsh|hück}} jät jemaat han.', @@ -1934,9 +1972,9 @@ De Links sollte eijentlesch op en Sigg jon, di tirek jemeint es. (En Atikel jellt als en „(Watt ėßß datt?)“-Sigg un weed hee jeliss, wann en dä Sigg [[MediaWiki:Disambiguationspage]] ene Link op en drop dren is. Alles wat keij Atikele sin, weed dobei jaa nit eez metjezallt)', 'doubleredirects' => 'Ömleitunge op Ömleitunge', -'doubleredirectstext' => 'Hee fings De en jede Reih ene Link op de iertste un de zweite Ömleitung, donoh ene Link op de Sigg, wo de +'doubleredirectstext' => 'Hee fings De en jede Reih ene Link op de iertste un de zweite Ömleitung, donoh ene Link op de Sigg, wo de zweite Ömleitung hin jeiht. För jewöhnlich es dat dann och de richtije Sigg, wo de iertste Ömleitung ald hen jonn sullt. -Ußjeshtreshe Reije sin ald äleedesh. +Ußjeshtreshe Reije sin ald äleedesh. Met däm „(Ändere)“-Link kanns De de eetste Sigg tirek aanpacke. Tipp: Merk Der dä Tittel vun dä Sigg dovör.', 'double-redirect-fixed-move' => 'dubbel Ömleidung nohm Ömnenne automattesch opjelös: [[$1]] → [[$2]]', @@ -1961,6 +1999,8 @@ Tipp: Merk Der dä Tittel vun dä Sigg dovör.', 'nmembers' => 'met {{PLURAL:$1|ein Sigg|$1 Sigge}} dren', 'nrevisions' => '{{PLURAL:$1|Ein Änderung|$1 Änderunge|Keij Änderung}}', 'nviews' => '{{PLURAL:$1|Eine Avrof|$1 Avrofe|Keine Avrof}}', +'nimagelinks' => 'Weed op {{PLURAL:$1|eine Sigg|$1 Sigge|keine Sigg}} jebruch', +'ntransclusions' => 'weed op {{PLURAL:$1|eine Sigg|$1 Sigge|keine Sigg}} jebruch', 'specialpage-empty' => 'Hee en dä Liss es nix dren.', 'lonelypages' => 'Atikele, wo nix drop link', 'lonelypagestext' => 'De Sigge hee noh sin nörjenzwoh ennjebonge un et jonn och kein Linkß drop.', @@ -2137,40 +2177,46 @@ Mieh övver de einzel Rääschte fenkt Er op de [[{{MediaWiki:Listgrouprights-he 'listgrouprights-removegroup-self-all' => 'Kann sesch sällver uß alle Metmaacherjroppe eruß nämme', # E-mail user -'mailnologin' => 'Keij E-Mail Adress', -'mailnologintext' => 'Do mööts ald aanjemeldt un [[Special:UserLogin|enjelogg]] sin, un en jode E-Mail +'mailnologin' => 'Keij E-Mail Adress', +'mailnologintext' => 'Do mööts ald aanjemeldt un [[Special:UserLogin|enjelogg]] sin, un en jode E-Mail Adress en Dinge [[Special:Preferences|ming Enstellunge]] stonn han, öm en E-Mail aan andere Metmaacher ze schecke.', -'emailuser' => 'E-mail aan dä Metmaacher', -'emailpage' => 'E-mail aan ene Metmaacher', -'emailpagetext' => 'Wann dä Metmaacher en E-mail Adress aanjejovve hätt en singe Enstellunge, +'emailuser' => 'E-mail aan dä Metmaacher', +'emailpage' => 'E-mail aan ene Metmaacher', +'emailpagetext' => 'Wann dä Metmaacher en E-mail Adress aanjejovve hätt en singe Enstellunge, un die deit et och, dann kanns De met däm Fomular hee unge en einzelne E-Mail aan dä Metmaacher schecke. Ding E-mail Adress, die De en [[Special:Preferences|Ding eije Enstellunge]] aanjejovve häs, die weed als em Avsender sing Adress en die E-Mail enjedrage. Domet kann, wä die E-Mail kritt, drop antwoote, un die Antwood jeiht tirek aan Dech. Alles klor?', -'usermailererror' => 'Dat E-Mail-Objek jov ene Fähler us:', -'defemailsubject' => 'e-mail {{GRAMMAR:fun|{{SITENAME}}}}.', -'noemailtitle' => 'Kein E-Mail Adress', -'noemailtext' => 'Dä Metmaacher hät kein jöltijje Adreß för sing e-mail enjedrage.', -'nowikiemailtitle' => 'Kein e-mail zojelohße', -'nowikiemailtext' => 'Hee dä Metmaacher well kein e-mail vun ander Metmaachere jescheck krijje.', -'email-legend' => 'Scheck en e-mail aan ene andere Metmaacher fum Wiki', -'emailfrom' => 'Vun:', -'emailto' => 'Aan:', -'emailsubject' => 'Üvverschreff:', -'emailmessage' => 'Dä Tex fun Dinge Nohreesch:', -'emailsend' => 'Avschecke', -'emailccme' => 'Scheck mer en Kopie vun dä E-Mail.', -'emailccsubject' => 'En Kopie vun Dinger E-Mail aan $1: $2', -'emailsent' => 'E-Mail es ungerwähs', -'emailsenttext' => 'Ding E-Mail es jetz lossjescheck woode.', -'emailuserfooter' => 'Hee di e-mail hät {{GENDER:$1|dä|et|dä Metmaacher|di|dat}} „$1“ an {{GENDER:$2|dä|et|dä Metmaacher|di|dat}} „$2“ jescheck, un doför {{GRAMMAR:en dative|{{SITENAME}}}} dat „{{int:emailuser}}“ jebruch.', +'usermailererror' => 'Dat E-Mail-Objek jov ene Fähler us:', +'defemailsubject' => 'e-mail {{GRAMMAR:fun|{{SITENAME}}}}.', +'usermaildisabled' => 'De e-mail zwesche Metmaachere es ußjeschalt', +'usermaildisabledtext' => 'Do kanns kein e-mail aan ander Metmaacher heh en dämm Wiki schecke', +'noemailtitle' => 'Kein E-Mail Adress', +'noemailtext' => 'Dä Metmaacher hät kein jöltijje Adreß för sing e-mail enjedrage.', +'nowikiemailtitle' => 'Kein e-mail zojelohße', +'nowikiemailtext' => 'Hee dä Metmaacher well kein e-mail vun ander Metmaachere jescheck krijje.', +'email-legend' => 'Scheck en e-mail aan ene andere Metmaacher fum Wiki', +'emailfrom' => 'Vun:', +'emailto' => 'Aan:', +'emailsubject' => 'Üvverschreff:', +'emailmessage' => 'Dä Tex fun Dinge Nohreesch:', +'emailsend' => 'Avschecke', +'emailccme' => 'Scheck mer en Kopie vun dä E-Mail.', +'emailccsubject' => 'En Kopie vun Dinger E-Mail aan $1: $2', +'emailsent' => 'E-Mail es ungerwähs', +'emailsenttext' => 'Ding E-Mail es jetz lossjescheck woode.', +'emailuserfooter' => 'Hee di e-mail hät {{GENDER:$1|dä|et|dä Metmaacher|di|dat}} „$1“ an {{GENDER:$2|dä|et|dä Metmaacher|di|dat}} „$2“ jescheck, un doför {{GRAMMAR:en dative|{{SITENAME}}}} dat „{{int:emailuser}}“ jebruch.', + +# User Messenger +'usermessage-summary' => 'En Nohreesch vum Wiki afjelivvert.', +'usermessage-editor' => 'Name vum Metmaacher för de Täxte un Nohreshte vum Wiki ze beärbeide', # Watchlist 'watchlist' => 'ming Oppassliss', 'mywatchlist' => 'ming Oppassliss', -'watchlistfor' => '(för $1)', +'watchlistfor2' => 'För {{GENDER:$1|dä|dat|dä Metmaacher|de|dat}} $1 $2', 'nowatchlist' => 'En Ding Oppassliss es nix dren.', 'watchlistanontext' => 'Do muss $1, domet de en Ding Oppassliss erenluure kanns, oder jet dran ändere.', 'watchnologin' => 'Nit enjelogg', @@ -2290,7 +2336,10 @@ De Neuste Änderung aan dä Sigg es jetz vun däm Metmaacher „[[User:$3|$3]] 'revertpage' => 'Änderunge vun däm Metmaacher „[[Special:Contributions/$2|$2]]“ ([[User talk:$2|däm sing Klaafsigg]]) fottjeschmesse, un doför de letzte Version vum „[[User:$1|$1]]“ widder zeröckjehollt', 'revertpage-nouser' => 'Änderunge vun enem Metmaacher, däm singe Name vershtoche es, retuur jemaat op de letzte Version {{GENDER:$1|vum|vum|vum Metmaacher|vun dä|vum}} [[User:$1|$1]]', 'rollback-success' => 'De Änderungen vum $1 zeröckjenumme, un dobei de letzte Version vum $2 widder jehollt.', -'sessionfailure' => "Et jov wall e technisch Problem met Dingem Login. Dröm ha'mer dat us Vörsich jetz nit jemaht, domet mer nit villeich Ding Änderung däm verkihrte Metmaacher ungerjubele. Jangk zeröck un versök et noch ens.", + +# Edit tokens +'sessionfailure-title' => 'Fähler met dä Daate vum Enlogge', +'sessionfailure' => "Et jov wall e technisch Problem met Dingem Login. Dröm ha'mer dat us Vörsich jetz nit jemaht, domet mer nit villeich Ding Änderung däm verkihrte Metmaacher ungerjubele. Jangk zeröck un versök et noch ens.", # Protect 'protectlogpage' => 'Logboch vum Sigge Schötze', @@ -2420,18 +2469,22 @@ $1', 'month' => 'un Moohnt:', 'year' => 'Beß Johr:', -'sp-contributions-newbies' => 'Nor neu Metmaacher ier Beidräg zeije', -'sp-contributions-newbies-sub' => 'För neu Metmaacher', -'sp-contributions-newbies-title' => 'Neu Metmaacher ier Beidräsch', -'sp-contributions-blocklog' => 'Logboch met Metmaacher-Sperre', -'sp-contributions-deleted' => 'Fottjeschmesse Beidrääsch', -'sp-contributions-logs' => 'Logböcher', -'sp-contributions-talk' => 'Klaaf', -'sp-contributions-userrights' => 'Räächde verwalde', -'sp-contributions-blocked-notice' => 'Heh dä Metmaacher es em Momang jespert, Dä letzte Enndraach em Logbooch doh drövver kütt jez als ene Henwiiß:', -'sp-contributions-search' => 'Söök noh Metmaacher ier Beidräg', -'sp-contributions-username' => 'Metmaachername odder IP-Address:', -'sp-contributions-submit' => 'Söhke', +'sp-contributions-newbies' => 'Nor neu Metmaacher ier Beidräg zeije', +'sp-contributions-newbies-sub' => 'För neu Metmaacher', +'sp-contributions-newbies-title' => 'Neu Metmaacher ier Beidräsch', +'sp-contributions-blocklog' => 'Logboch met Metmaacher-Sperre', +'sp-contributions-deleted' => 'Fottjeschmesse Beidrääsch', +'sp-contributions-uploads' => 'huhjelaade Dateie', +'sp-contributions-logs' => 'Logböcher', +'sp-contributions-talk' => 'Klaaf', +'sp-contributions-userrights' => 'Räächde verwalde', +'sp-contributions-blocked-notice' => 'Heh dä Metmaacher es em Momang jespert, Dä letzte Enndraach em Logbooch doh drövver kütt jez als ene Henwiiß:', +'sp-contributions-blocked-notice-anon' => 'Heh di IP-Address es em Momang jesperrt. +De neuste Sperr ier Enndraach em Logbooch es:', +'sp-contributions-search' => 'Söök noh Metmaacher ier Beidräg', +'sp-contributions-username' => 'Metmaachername odder IP-Address:', +'sp-contributions-toponly' => 'Bloß neuste Versione zeije', +'sp-contributions-submit' => 'Söhke', # What links here 'whatlinkshere' => 'Wat noh heh link', @@ -2460,7 +2513,7 @@ $1', 'blockiptext' => 'Hee kanns De bestemmte Metmaacher oder IP-Adresse sperre, su dat se hee em Wiki nit mieh schrieve und Sigge ändere künne. Dat sollt nor jedon wääde om sujenannte Vandaale ze bremse. Un mer müsse uns dobei natörlich aan uns [[{{MediaWiki:Policy-url}}|Rejelle]] för esu en Fäll halde. Drag bei „Aanlass“ ene möchlichs jenaue Jrund en, wöröm dat Sperre passeet. Nenn un Link op de Sigge wo Einer kapott jemaat hät, zem Beispill.', -'ipaddress' => 'IP-Adress', +'ipaddress' => 'IP-Adräß', 'ipadressorusername' => 'IP-Adress oder Metmaacher Name:', 'ipbexpiry' => 'Duur, för wie lang', 'ipbreason' => 'Aanlass:', @@ -2497,7 +2550,6 @@ un och wann De se ändere wells.', 'ipb-edit-dropdown' => 'De Jründ för et Sperre beärrbejde', 'ipb-unblock-addr' => '„$1“ widder zohlohße', 'ipb-unblock' => 'En IP-Addräß ov ene Metmaacher widder zohlohße', -'ipb-blocklist-addr' => 'De Sperre för „$1“ aanzeije, die jrad bestonn', 'ipb-blocklist' => 'All de Sperre för Metmaacher un IP-Adresse aanzeije, die jrad bestonn', 'ipb-blocklist-contribs' => 'De Metmaacher ier Bäjdrähsch för „$1“', 'unblockip' => 'Dä Medmacher widder maache looße', @@ -2569,6 +2621,8 @@ un verzäll dänne vun däm ärrje Risiko för de Secherheit fun dänne ehr Rä 'sorbs_create_account_reason' => 'Ding IP-Adress weed en de DNSbl als ene offe Proxy jeliss. Dröm kanns De Dich heh em Wiki nit als ene neue Metmaacher aanmelde. Schwaad met Dingem System-Minsch oder Netzwerk-Techniker oder (ISP Internet Service Provider) drüvver, un verzäll dänne vun däm Risiko för ehr Secherheit!', 'cant-block-while-blocked' => 'Do kanns ander Metmaacher nit sperre, esu lang wi De sellver jesperrt bes.', 'cant-see-hidden-user' => 'Dä Metmaacher, dä De shperre wells, es al jeshperrt un verschtoche. Weil De nit dat Rääsch häs. Metmaacher ze vershteiche (hideuser), kanns De däm sing Sperr och nit ändere.', +'ipbblocked' => 'Do kanns kein ander Metmaachere sperrre, weil De sellver jesperrt bes', +'ipbnounblockself' => 'Do kanns nit sellver ophävve, dat De jesperrt bes', # Developer tools 'lockdb' => 'Daatebank sperre', @@ -2604,6 +2658,21 @@ Alsu holl Der de Liss „Wat noh heh link“ fun dä Sigg heh un jangk se dorch! De Sigg weed '''nit''' ömjenannt, wann et met däm neue Name ald en Sigg jitt, '''ußer''' et es nix drop, oder et es en Ömleitung un se es noch nie jeändert woode. Esu kam_mer en Sigg jlich widder zeröck ömnenne, wam_mer sich bem Ömnenne verdonn hät, un mer kann och kein Sigge kapottmaache, wo ald jet drop steiht. +'''Oppjepass!''' +Wat beim Ömnenne erus kütt, künnt en opfällije un villeich stürende Änderung aam Wiki sin, besönders bei öff jebruchte Sigge. +Alsu bes secher, dat De versteihs, wat De heh am maache bes, ih dat De et mähs!", +'movepagetext-noredirectfixer' => "Heh kanns De en Sigg ömnenne. +Domet kritt die Sigg ene neue Name, un all vörherije Versione vun dä Sigg och. +Unger däm ahle Tittel weed automatisch en Ömleitung op dä neue Tittel enjedrage. + +Links op dä ahle Tittel blieve ävver, wie se wore. +Dat heiß, Do muss selver nohluure, ov do jetz [[Special:DoubleRedirects|dubbelde]] oder [[Special:BrokenRedirects|kapodde Ömleidunge]] bei eruskumme. +Wann De en Sigg ömnenne deis, häs Do och doför ze sorje, dat de betroffe Links do henjonn, wo se hen jonn solle. +Alsu holl Der de Liss „Wat noh heh link“ fun dä Sigg heh un jangk se durch! + +De Sigg weed '''nit''' ömjenannt, wann et met däm neue Tittel ald en Sigg jitt, '''ußer''' do es nix drop, oder et es en Ömleitung un se es noch nie jeändert woode. +Esu kam_mer en Sigg jlich widder retuur ömnenne, wam_mer sich mem Ömnenne verdonn hät, un mer kann och kein Sigge kapottmaache, wo ald jet drop steiht. + '''Oppjepass!''' Wat beim Ömnenne erus kütt, künnt en opfällije un villeich stürende Änderung aam Wiki sin, besönders bei öff jebruchte Sigge. Alsu bes secher, dat De versteihs, wat De heh am maache bes, ih dat De et mähs!", @@ -2662,6 +2731,7 @@ Di Sigg „[[:$1]]“ jitt et ald. Wollts De se fottschmieße, öm heh di Sigg 'immobile-source-page' => 'Di Sigg kann nit ömjenannt wääde.', 'immobile-target-page' => 'Op dä Tittel kann kei Sigg ömjenannt wääde.', 'imagenocrossnamespace' => 'Dateije kam_mer nor in et Appachtemang „{{ns:file}}“ donn, noh woanders hen kam_mer se och nit ömnemme!', +'nonfile-cannot-move-to-file' => 'Mer kann nix uußer Datteije esu ömnänne, dat et em Appachtemang „{{ns:file}}“ landt', 'imagetypemismatch' => 'De neu Datei-Endong moß met däm Datei-Tüp zesamme passe', 'imageinvalidfilename' => 'Dä Ziel-Name för de Datei es verkeht', 'fix-double-redirects' => 'Don noh em Ömnenne de Ömleidunge automattesch ändere, di noch op dä ahle Tittel zeije, also de neu entshtande dubbelte Ömleidunge oplöse.', @@ -2744,6 +2814,7 @@ All de Trans Wiki Emporte wääde em [[Special:Log/import|Emport_Logboch]] fassj 'importstart' => 'Ben Sigge am emporteere …', 'import-revision-count' => '({{PLURAL:$1|ein Version|$1 Versione|kein Version}})', 'importnopages' => 'Kein Sigg för ze Emporteere jefunge.', +'imported-log-entries' => '{{PLURAL:$1|Eine Enndraach woodt|$1 Enndrääsch woodte|Keine Enndraach wood}} en et Logbooch empotteert.', 'importfailed' => 'Dat Importeere es donevve jejange: $1', 'importunknownsource' => 'Die Zoot Quell för et Emporteere kenne mer nit', 'importcantopen' => 'Kunnt op de Datei för dä Emport nit zojriefe', @@ -2840,6 +2911,8 @@ Bes esu joot, un versök et noch ens.', 'tooltip-undo' => '„{{UCfirst:{{int:editundo}}}}“ määt der förije Zostand fun dä Sigg op, zom Beärbeide un widder Afspeichere. Esu kam_mer noch en Aanmerkung en „{{int:summary}}“ maache.', +'tooltip-preferences-save' => 'Enstellunge faßhallde', +'tooltip-summary' => 'Jif en koote Zesammefassung en', # Stylesheets 'common.css' => '/* CSS heh aan dä Stell hät Uswirkunge op all Ovverflääsche */', @@ -2967,18 +3040,21 @@ $1', 'nextdiff' => 'De Änderung donoh zeije →', # Media information -'mediawarning' => 'Opjepass: En dä Datei künnt en jefährlich Projrammstöck dren stecke. Wa\'mer et laufe looße dät, do künnt dä Sörver, udder Dinge Rääschner, met för de Cracker opjemaht wääde.', +'mediawarning' => 'Opjepass: En dä Datei künnt en jefährlich Projrammstöck dren stecke. Wa\'mer et laufe looße dät, do künnt dä ẞööver, udder Dinge Rääschner, met för de Cracker opjemaht wääde.', 'imagemaxsize' => "Belder nit jrößer maache wie:
    ''(op dä Sigge, wo se beschrevve wääde)''", 'thumbsize' => 'Esu breid solle de klein Beldche (Thumbnails/Breefmarke) sin:', -'widthheightpage' => '$1×$2, {{PLURAL:$3|eij Sigg|$3 Sigge|keij Sigge}}', -'file-info' => '(Dateiömfang: $1, MIME-Tüp: $2)', -'file-info-size' => '({{PLURAL:$1|Ei Pixel|$1 Pixelle}} breed × {{PLURAL:$2|Ei Pixel|$2 Pixelle}} huh, de Datei hät $3, dä MIME-Typ es: $4)', +'widthheightpage' => '{{PLURAL:$1|Ei Pixel|$1 Pixelle}} breed × {{PLURAL:$2|Ei Pixel|$2 Pixelle}} huh, {{PLURAL:$3|eij Sigg|$3 Sigge|keij Sigge}}', +'file-info' => 'Dateiömfang: $1, MIME-Tüp: $2', +'file-info-size' => '{{PLURAL:$1|Ei Pixel|$1 Pixelle}} breed × {{PLURAL:$2|Ei Pixel|$2 Pixelle}} huh, de Datei hät $3, dä MIME-Typ es: $4', 'file-nohires' => 'Mer han kein hüütere Oplösung vun däm Beld.', -'svg-long-desc' => '(SVG-Datei, de Basis es {{PLURAL:$1|ei Pixel|$1 Pixelle}} breed × {{PLURAL:$2|ei Pixel|$2 Pixelle}} huh, dä Dateiömfang es $3)', +'svg-long-desc' => 'SVG-Datei, de Basis es {{PLURAL:$1|ei Pixel|$1 Pixelle}} breed × {{PLURAL:$2|ei Pixel|$2 Pixelle}} huh, dä Dateiömfang es $3', 'show-big-image' => 'Jröößer Oplöösung', 'show-big-image-thumb' => 'Di Vör-Aansich es $1 × $2 Pixelle jroß', 'file-info-gif-looped' => 'läuf emmer widder vun vürre', 'file-info-gif-frames' => '{{PLURAL:$1|ei einzel Beld|$1 einzel Belder|kei einzel Beld}}', +'file-info-png-looped' => 'läuf emmer widder vun vürre', +'file-info-png-repeat' => 'weed {{PLURAL:$1|eijmohl|$1 Mohl|keimohl}} affjespellt', +'file-info-png-frames' => '{{PLURAL:$1|ei einzel Beld|$1 einzel Belder|kei einzel Beld}}', # Special:NewFiles 'newimages' => 'Neu Dateie als Jaleri', @@ -3136,6 +3212,7 @@ Donoh kumme, en däsellve Reih, Links op Sigge wo die Datei trotz dämm jenehm e 'exif-gpsareainformation' => 'Dä Name fum GPS-Jebeet', 'exif-gpsdatestamp' => 'GPS-Dattum', 'exif-gpsdifferential' => 'De Differenzjahl-Bereschtijong fum GPS', +'exif-objectname' => 'Der Tittel en koot', # EXIF attributes 'exif-compression-1' => 'Oohne Kompressjuhn', @@ -3304,24 +3381,24 @@ Donoh kumme, en däsellve Reih, Links op Sigge wo die Datei trotz dämm jenehm e 'limitall' => 'alle', # E-mail address confirmation -'confirmemail' => 'E-Mail Adress bestätije', -'confirmemail_noemail' => 'En [[Special:Preferences|Ding Enstellunge]] es kein öntlich E-Mail Adress.', -'confirmemail_text' => 'Ih datte en däm Wiki heh de E-Mail bruche kanns, muss De Ding E-Mail Adress bestätich han, dat se en Oodnung es un dat se och Ding eijene es. Klick op dä Knopp un Do kriss en E-Mail jescheck. Do steiht ene Link met enem Code dren. Wann De met Dingem Brauser op dä Link jeihs, dann deis De domet bestätije, dat et wirklich Ding E-Mail Adress es. Dat es nit allzo secher, alsu wör nix för Die Bankkonto oder bei de Sparkass, ävver et sorg doför, dat nit jede Peijaß met Dinger E-Mail oder Dingem Metmaachername eröm maache kann.', -'confirmemail_pending' => 'Do häs ald ene Kood för de Bestätijung med ene E-Mail zojeschek bekumme. Wann De Ding Aanmeldung eez jraad jemaat häs, dann donn noch ene Moment waade, ih dat De Der ene neue Kood hölls.', -'confirmemail_send' => 'Scheck en E-Mail zem Bestätije', -'confirmemail_sent' => 'En E-Mail, för Ding E-Mail Adress ze bestätije, es ungerwähs.', -'confirmemail_oncreate' => 'Do häs jetz ene Kood för de Bestätijung med ene E-Mail zojeschek bekumme. För em Wiki jet ze maache, un för et Enlogge, do bruchs De der Kode nit, ävver domet de e-Mail övver et Wiki schecke un krijje kanns, doför moß De en ejmool ens bestätijje, domet secher es, dat Ding E-Mail Adress och rechtich jetipp wohr.', -'confirmemail_sendfailed' => "Beim E-Mail Adress Bestätije es jet donevve jejange, künnt sin, en Dinger E-Mail Adress es e Zeiche verkihrt, oder esu jet. +'confirmemail' => 'E-Mail Adress bestätije', +'confirmemail_noemail' => 'En [[Special:Preferences|Ding Enstellunge]] es kein öntlich E-Mail Adress.', +'confirmemail_text' => 'Ih datte en däm Wiki heh de E-Mail bruche kanns, muss De Ding E-Mail Adress bestätich han, dat se en Oodnung es un dat se och Ding eijene es. Klick op dä Knopp un Do kriss en E-Mail jescheck. Do steiht ene Link met enem Code dren. Wann De met Dingem Brauser op dä Link jeihs, dann deis De domet bestätije, dat et wirklich Ding E-Mail Adress es. Dat es nit allzo secher, alsu wör nix för Die Bankkonto oder bei de Sparkass, ävver et sorg doför, dat nit jede Peijaß met Dinger E-Mail oder Dingem Metmaachername eröm maache kann.', +'confirmemail_pending' => 'Do häs ald ene Kood för de Bestätijung med ene E-Mail zojeschek bekumme. Wann De Ding Aanmeldung eez jraad jemaat häs, dann donn noch ene Moment waade, ih dat De Der ene neue Kood hölls.', +'confirmemail_send' => 'Scheck en E-Mail zem Bestätije', +'confirmemail_sent' => 'En E-Mail, för Ding E-Mail Adress ze bestätije, es ungerwähs.', +'confirmemail_oncreate' => 'Do häs jetz ene Kood för de Bestätijung med ene E-Mail zojeschek bekumme. För em Wiki jet ze maache, un för et Enlogge, do bruchs De der Kode nit, ävver domet de e-Mail övver et Wiki schecke un krijje kanns, doför moß De en ejmool ens bestätijje, domet secher es, dat Ding E-Mail Adress och rechtich jetipp wohr.', +'confirmemail_sendfailed' => "Beim E-Mail Adress Bestätije es jet donevve jejange, künnt sin, en Dinger E-Mail Adress es e Zeiche verkihrt, oder esu jet. Dä E-Mail-ẞööver hät jesaat: ''$1''", -'confirmemail_invalid' => 'Et es jet donevve jejange, Ding E-Mail Adress es un bliev nit bestätich. Mööchlech, dä Code wohr verkihrt, hä künnt avjelaufe jewäse sin, oder esu jet. Versöök et noch ens.', -'confirmemail_needlogin' => 'Do muss Dich $1, för de E-Mail Adress ze bestätije.', -'confirmemail_success' => 'Ding E-Mail Adress es jetz bestätich. +'confirmemail_invalid' => 'Et es jet donevve jejange, Ding E-Mail Adress es un bliev nit bestätich. Mööchlech, dä Code wohr verkihrt, hä künnt avjelaufe jewäse sin, oder esu jet. Versöök et noch ens.', +'confirmemail_needlogin' => 'Do muss Dich $1, för de E-Mail Adress ze bestätije.', +'confirmemail_success' => 'Ding E-Mail Adress es jetz bestätich. Jetz künns De och noch enlogge. Vill Spass!', -'confirmemail_loggedin' => 'Ding E-Mail Adress es jetz bestätich!', -'confirmemail_error' => 'Beim E-Mail Adress Bestätije es jet donevve jejange, de Bestätijung kunnt nit avjespeichert wääde.', -'confirmemail_subject' => 'Dun Ding e-mail Adress för {{GRAMMAR:Akkusativ|{{SITENAME}}}} bestäteje.', -'confirmemail_body' => 'Künnt jod sin, Do wors et selver, vun de IP_Adress $1 hät sich +'confirmemail_loggedin' => 'Ding E-Mail Adress es jetz bestätich!', +'confirmemail_error' => 'Beim E-Mail Adress Bestätije es jet donevve jejange, de Bestätijung kunnt nit avjespeichert wääde.', +'confirmemail_subject' => 'Dun Ding e-mail Adress för {{GRAMMAR:Akkusativ|{{SITENAME}}}} bestäteje.', +'confirmemail_body' => 'Künnt jod sin, Do wors et selver, vun de IP_Adress $1 hät sich jedenfalls einer jemeldt, un well dä Metmaacher "$2" {{GRAMMAR:vun|{{SITENAME}}}} sin, un hät en E-Mail Adress aanjejovve. @@ -3339,8 +3416,46 @@ bestätich es. Do kanns ävver och op he dä Link jon: $5 Domet deiß De tirek sare, dat De di Adress nit bestätije wells.', -'confirmemail_invalidated' => "Et Bestätijje för die E-Mail-Adress es afjebroche woode, un die Adress is '''nit''' bestätich.", -'invalidateemail' => 'E-Mail-Adress nit bestätich', +'confirmemail_body_changed' => 'Künnt jod sin, Do wors et selver. Vun de IP_Adress $1 hät sich +jedenfalls einer jemeldt, un well dä Metmaacher "$2" op {{GRAMMAR:Akk bet|{{SITENAME}}}} +sin, un hät en neu Adress för sing e-mail aanjejovve. + +Öm jetz klor ze krije, dat die neu Adress un dä Metmaacher och +zosamme jehüre, un öm de e-mail op {{GRAMMAR:Akk bet|{{SITENAME}}}} +widder aanzschallde, moss dä Metmaacher en singem Brauser dä Link: + +$3 + +opmaache. Noch för em $6 öm $7 Uhr. Alsu dun dat, wann de et selver bes. + +Wann nit Do, sondern söns wä Ding E-Mail Adress aanjejovve hät, bruchs +De jar nix ze don. Di Adress weed nit jebruch, wann se nit bestätich es. +Do kanns ävver och op heh dä Link jon: + +$5 + +Domet deiß De tirek sare, dat De di Adress nit bestätije wells.', +'confirmemail_body_set' => 'Künnt jod sin, Do wors et selver. Vun de IP_Adress $1 hät op +jede Fall einer för dä Metmaacher "$2" op {{GRAMMAR:Akk bet|{{SITENAME}}}} +heh di Adress för däm sing e-mail aanjejovve. + +Öm jetz klor ze krije, dat die neu Adress un dä Metmaacher och +zosamme jehüre, un öm de e-mail op {{GRAMMAR:Akk bet|{{SITENAME}}}} +widder aanzschallde, moss dä Metmaacher en singem Brauser dä Link: + +$3 + +opmaache. Noch för em $6 öm $7 Uhr. Alsu dun dat, wann de et selver bes. + +Wann nit Do, sondern söns wä Ding E-Mail Adress aanjejovve hät, bruchs +De jar nix ze don. Di Adress weed nit jebruch, wann se nit bestätich es. +Do kanns ävver och op heh dä Link jon: + +$5 + +Domet deiß De tirek sare, dat De di Adress nit bestätije wells.', +'confirmemail_invalidated' => "Et Bestätijje för die E-Mail-Adress es afjebroche woode, un die Adress is '''nit''' bestätich.", +'invalidateemail' => 'E-Mail-Adress nit bestätich', # Scary transclusion 'scarytranscludedisabled' => '[Et Enbinge per Interwiki es avjeschalt]', @@ -3391,6 +3506,7 @@ Wells Do jetz met en neu Version die Sigg widder neu aanläje?', 'table_pager_first' => 'De eetste Sigg', 'table_pager_last' => 'De letzte Sigg', 'table_pager_limit' => 'Zeich $1 pro Sigg', +'table_pager_limit_label' => 'Stöcker pro Sigg:', 'table_pager_limit_submit' => 'Lohß Jonn!', 'table_pager_empty' => 'Nix erus jekumme', @@ -3478,6 +3594,7 @@ Dä Shtanndat-Zoot-Schlößel „$1“ övverschriif dä älldere Zoot-Schlöße 'version-specialpages' => '{{int:nstab-special}}e', 'version-parserhooks' => 'De Parser-Hooke', 'version-variables' => 'Variable', +'version-skins' => 'Ovverflääsche', 'version-other' => 'Söns', 'version-mediahandlers' => 'Medije-Handler', 'version-hooks' => 'Schnettstelle oder Hooke', @@ -3489,6 +3606,13 @@ Dä Shtanndat-Zoot-Schlößel „$1“ övverschriif dä älldere Zoot-Schlöße 'version-hook-subscribedby' => 'Opjeroofe vun', 'version-version' => '(Version $1)', 'version-license' => 'Lizenz', +'version-poweredby-credits' => "Dat Wiki heh löp met '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001–$1 $2.", +'version-poweredby-others' => 'sönß wää', +'version-license-info' => 'MediaWiki es e frei Projramm. Mer kann et unmolesteet wigger verdeile, un mer kann et verändere, wi mer löstich es, wam_mer sesch dobei aan de GNU General Public License (jenerälle öffentlesche Lizänz noh GNU) hallde deiht, wi se vun der Free Software Foundation (Steftung för frei Soffwäer) veröffentlesch woode es. Dobei kam_mer sesch ußsöhke of mer sesch aan de Version 2 dovun hallde deiht, udder öhnz en späädere Fassung. + +MediaWiki weed verdeilt met dä Hoffnung, dat et för jet jood es, ävver der ohne jeede Jarantie, un esujaa ohne ene unjesaate Jedangke, et künnt ze verkoufe sin udder för öhndsene bestemmpte Zweck ze jebruche. Loor Der de jenannte Lizänz aan, wann De mieh Einzelheite weße wells. + +Do sullts en [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie vun dä GNU General Public License] zosamme met däm Projramm krääje han, un wann nit, schrief aan de: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA udder [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html liß se em Internet noh].', 'version-software' => 'Installeete Soffwäer', 'version-software-product' => 'Produk', 'version-software-version' => 'Version', @@ -3559,6 +3683,15 @@ Der Name moß ohne der Försatz „{{ns:file}}:“ aanjejovve wääde.', 'tags-edit' => 'ändere', 'tags-hitcount' => '{{PLURAL:$1|Ein Änderung|$1 Änderunge|kein Änderunge}}', +# Special:ComparePages +'comparepages' => 'Sigge verjliesche', +'compare-selector' => 'Versione vun Sigge verjlieshe', +'compare-page1' => 'De ein Sigg', +'compare-page2' => 'De ander Sigg', +'compare-rev1' => 'de ein Version', +'compare-rev2' => 'de ander Version', +'compare-submit' => 'Verjlieshe!', + # Database error messages 'dberr-header' => 'Dat Wiki heh häd en Schwierischkeit', 'dberr-problems' => 'Deit uns leid, die Sigg heh häd för der Momang e teschnisch Problem.', @@ -3576,8 +3709,13 @@ die De häs han welle. Se künnt jet ällder un nit mieh aktoäll sin.', 'htmlform-float-invalid' => 'Wat De doh aanjejovve häs, dat es kein gewöhnlijje udder Komma-Zahl.', 'htmlform-int-toolow' => 'Dinge aanjejovve Wäät litt onger dämm winnischßde, wat müjjelesch es, un dat es $1.', 'htmlform-int-toohigh' => 'Dinge aanjejovve Wäät litt övver dämm hühßte, wat jeiht, un dat es $1.', +'htmlform-required' => 'Heh dä Wäät es nüüdesch', 'htmlform-submit' => 'Lohß Jonn!', 'htmlform-reset' => 'Änderunge retuur nämme', 'htmlform-selectorother-other' => 'Annder', +# SQLite database support +'sqlite-has-fts' => 'Version $1 (un kann en janze Täxte söhke)', +'sqlite-no-fts' => 'Version $1 (kann ävver nit en janze Täxte söhke)', + ); diff --git a/languages/messages/MessagesKu_arab.php b/languages/messages/MessagesKu_arab.php index 6eeb31b1..78e9481d 100644 --- a/languages/messages/MessagesKu_arab.php +++ b/languages/messages/MessagesKu_arab.php @@ -13,7 +13,7 @@ * @author Marmzok */ -$fallback = 'ckb-arab'; +$fallback = 'ckb'; $digitTransformTable = array( '0' => '٠', # ٠ diff --git a/languages/messages/MessagesKu_latn.php b/languages/messages/MessagesKu_latn.php index 2938b766..ffe74173 100644 --- a/languages/messages/MessagesKu_latn.php +++ b/languages/messages/MessagesKu_latn.php @@ -51,8 +51,7 @@ $messages = array( 'tog-editsection' => 'Lînkan ji bo guherandinê beşan biwêşîne', 'tog-editsectiononrightclick' => 'Beşekê bi rast-klîkekê biguherîne (JavaScript gireke)', 'tog-showtoc' => 'Tabloya naverokê nîşanbide (ji rûpelan bi zêdetirî sê sernavan)', -'tog-rememberpassword' => 'Qeydkirinê min di vê komputerê da wîne bîrê', -'tog-editwidth' => 'Cihê guherandinê yê tewrî mezin', +'tog-rememberpassword' => 'Qeyda min di vê kompûterê de biparêze (herî zÊde bo $1 {{PLURAL:$1|rojekê|rojan}})', 'tog-watchcreations' => 'Rûpelan, yê min çêkir, têke lîsteya min ya şopandinê', 'tog-watchdefault' => 'Rûpelan, yê min guhart, têke lîsteya min ya şopandinê', 'tog-watchmoves' => 'Rûpelan, yê min navî wan guhart, têke lîsteya min ya şopandinê', @@ -191,31 +190,20 @@ $messages = array( 'faqpage' => 'Project:Pirs û Bersîv', # Vector skin -'vector-action-addsection' => 'Mijarekê lê zêde bike', -'vector-action-delete' => 'Jê bibe', -'vector-action-move' => 'Nav biguherîne', -'vector-action-protect' => 'Biparêze', -'vector-action-undelete' => 'Nejêbirî', -'vector-action-unprotect' => 'Parastinê rake', -'vector-namespace-category' => 'Kategorî', -'vector-namespace-help' => 'Alîkarî', -'vector-namespace-image' => 'Wêne', -'vector-namespace-main' => 'Gotar', -'vector-namespace-media' => 'Medya', -'vector-namespace-mediawiki' => 'Peyam', -'vector-namespace-project' => 'Rûpela projeyê', -'vector-namespace-special' => 'Rûpela taybet', -'vector-namespace-talk' => 'Guftûgo', -'vector-namespace-template' => 'Şablon', -'vector-namespace-user' => 'Bikarhêner', -'vector-view-create' => 'Çêke', -'vector-view-edit' => 'Biguherîne', -'vector-view-history' => 'Dîrokê bibîne', -'vector-view-view' => 'Bixwîne', -'vector-view-viewsource' => 'Çavkaniyan bibîne', -'actions' => 'Xebat', -'namespaces' => 'Valageha navan', -'variants' => 'Variyant', +'vector-action-addsection' => 'Mijarekê lê zêde bike', +'vector-action-delete' => 'Jê bibe', +'vector-action-move' => 'Nav biguherîne', +'vector-action-protect' => 'Biparêze', +'vector-action-undelete' => 'Nejêbirî', +'vector-action-unprotect' => 'Parastinê rake', +'vector-view-create' => 'Çêke', +'vector-view-edit' => 'Biguherîne', +'vector-view-history' => 'Dîrokê bibîne', +'vector-view-view' => 'Bixwîne', +'vector-view-viewsource' => 'Çavkaniyan bibîne', +'actions' => 'Xebat', +'namespaces' => 'Valageha navan', +'variants' => 'Variyant', 'errorpagetitle' => 'Çewtî (Error)', 'returnto' => 'Bizivire $1.', @@ -272,6 +260,7 @@ $messages = array( 'jumptonavigation' => 'navîgasyon', 'jumptosearch' => 'lêbigere', 'view-pool-error' => 'Bibore, server niha zêde barkirî ne. Gelek bikarîner niha hewl didin ku vê rûpelê bibînin. Bêzehmet, kêlîkekê bisekine berî ku dîsa hewl bidî xwe bigihînî vê rûpelê.', +'pool-errorunknown' => 'Xeletiyek nenas', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Der barê {{SITENAME}}', @@ -413,7 +402,7 @@ Hesaba te hat afirandin. Tu dikarî niha [[Special:Preferences|tercîhên xwe di 'yourname' => 'Navê te wek bikarhêner (user name)', 'yourpassword' => 'Şîfreya te (password)', 'yourpasswordagain' => 'Şîfreya xwe careke din binîvîse', -'remembermypassword' => 'Şifreya min di her rûniştdemê de bîne bîra xwe.', +'remembermypassword' => 'Şifreya min di her rûniştdemê de bîne bîra xwe (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Domaînê te', 'externaldberror' => "Ya şaşbûnek di naskirinê derva heye, ya tu nikarî account'î xwe yê derva bikarwînê.", 'login' => 'Têkeve', @@ -430,6 +419,7 @@ Hesaba te hat afirandin. Tu dikarî niha [[Special:Preferences|tercîhên xwe di 'gotaccount' => "Hesabê te heye? '''$1'''.", 'gotaccountlink' => 'Têkeve', 'createaccountmail' => 'bi e-name', +'createaccountreason' => 'Sedem', 'badretype' => 'Herdu şîfreyên ku te nivîsîn hevûdin nagirin.', 'userexists' => 'Ev navî bikarhênerî berê tê bikaranîn. Xêra xwe navekî din bibe.', 'loginerror' => 'Çewtî (Login error)', @@ -485,6 +475,7 @@ Eger account\'a bikarhêneran şaşî hate çêkirin, guhdare vê peyamê meke.' 'resetpass_forbidden' => 'Şîfre nikanin werin guhartin', 'resetpass-submit-loggedin' => 'Şîfre biguherîne', 'resetpass-submit-cancel' => 'Betal', +'resetpass-temp-password' => 'Şîfreya niha:', # Edit page toolbar 'bold_sample' => 'Nivîsa estûr', @@ -603,8 +594,6 @@ Eger tu qeyd bikî, hemû guhertinên ji vê revîzyonê piştre winda dibin. 'copyrightwarning' => "Dîqat bike: Hemû tevkariyên {{SITENAME}} di bin $2 de tên belav kirin (ji bo hûragahiyan li $1 binêre). Eger tu nexwazî ku nivîsên te bê dilrehmî bên guherandin û li gora keyfa herkesî bên belavkirin, li vir neweşîne.
    Tu soz didî ku te ev bi xwe nivîsand an jî ji çavkaniyekê azad an geliyane ''(public domain)'' girt. '''BERHEMÊN MAFÊN WAN PARASTÎ (©) BÊ DESTÛR NEWEŞÎNE!'''", -'longpagewarning' => "HIŞYAR: Drêjahiya vê rûpelê $1 kB (kilobyte) e, ev pir e. Dibe ku çend ''browser'' -baş nikarin rûpelên ku ji 32 kB drêjtir in biguherînin. Eger tu vê rûpelê beş beş bikî gelo ne çêtir e?", 'protectedpagewarning' => "'''ŞIYARÎ: Ev rûpel tê parastin. Bi tenê bikarhênerên ku xwediyên mafên \"koordînator\" ne, dikarin vê rûpelê biguherînin.'''", 'templatesused' => 'Şablon di van rûpelan da tê bikaranîn', 'templatesusedpreview' => 'Şablon yê di vê pêşdîtinê da tên bikaranîn:', @@ -682,6 +671,7 @@ Sedemê qedexekirinê ji $3 ev e: ''$2''", 'revdelete-suppress' => 'Sedemê jêbirinê ji koordînatoran ra jî veşêre', 'revdelete-log' => 'Sedem', 'revdel-restore' => 'xuyakirinê biguherîne', +'revdel-restore-deleted' => 'revîzyonên hatine jêbirin', 'pagehist' => 'Dîroka rûpelê', 'revdelete-content' => 'naverrok', 'revdelete-summary' => 'kurteyê biguherîne', @@ -727,6 +717,7 @@ Sedemê qedexekirinê ji $3 ev e: ''$2''", 'searchhelp-url' => 'Help:Alîkarî', 'searchprofile-articles' => 'Rûpelên naverokê', 'searchprofile-project' => 'Rûpelên alîkariyê û projeyê', +'searchprofile-images' => 'Multimedia', 'searchprofile-everything' => 'Hemî', 'searchprofile-advanced' => 'Pêşketî', 'searchprofile-articles-tooltip' => 'Di $1 da lêbigere', @@ -818,7 +809,7 @@ Sedemê qedexekirinê ji $3 ev e: ''$2''", 'prefs-help-realname' => 'Ne gereke. Tu dikarî navî xwe binivisînê, ew ê bi karkirên te were nivîsandin.', 'prefs-help-email' => 'Adrêsa te yê e-nameyan ne gereke were nivîsandin, lê ew qebûldike, ku bikarhênerên din vê naskirinê te kanibin e-nameyan ji te ra bişînin.', 'prefs-help-email-required' => 'Adrêsa e-nameyan gereke.', -'prefs-signature' => 'Îmza', +'prefs-signature' => 'Îmze', # User rights 'userrights' => 'Îdarekirina mafên bikarhêneran', @@ -867,6 +858,8 @@ Sedemê qedexekirinê ji $3 ev e: ''$2''", 'right-browsearchive' => 'Li rûpelên jêbirî bigerre', 'right-undelete' => 'Jêbirinê betal bike', 'right-import' => 'Rûpelan ji wikiyên din împort bike', +'right-userrights' => 'Hemû mafên bikarhêner biguherîne', +'right-sendemail' => 'Ji bikarhênerên di re e-name bişîne', # User rights log 'rightslog' => 'Reşahîya mafên bikarhêneran', @@ -894,11 +887,7 @@ Sedemê qedexekirinê ji $3 ev e: ''$2''", 'nchanges' => '$1 {{PLURAL:$1|guherandinek|guherandin}}', 'recentchanges' => 'Guherandinên dawî', 'recentchanges-legend' => 'Vebijarkên guherandinên dawî', -'recentchanges-label-legend' => 'Ravek: $1.', -'recentchanges-legend-newpage' => '$1 - rûpela nû', -'recentchanges-legend-minor' => ' $1 guherandina biçûk', 'recentchanges-label-minor' => 'Ev guhertineka biçûk e', -'recentchanges-legend-bot' => '$1 - guherrandina bot', 'rcnote' => "Jêr {{PLURAL:$1|guherandinek|'''$1''' guherandinên dawî}} di {{PLURAL:$2|rojê|'''$2''' rojên dawî}} de ji $3 şûnde tên nîşan dan.", 'rclistfrom' => 'an jî guherandinên ji $1 şûnda nîşan bide.', 'rcshowhideminor' => 'guherandinên biçûk $1', @@ -928,73 +917,74 @@ Sedemê qedexekirinê ji $3 ev e: ''$2''", 'recentchangeslinked-page' => 'Navê rûpelê', # Upload -'upload' => 'Wêneyekî barbike', -'uploadbtn' => 'Wêneyê (ya tiştekî din ya mêdya) barbike', -'reuploaddesc' => 'Barkirinê biskîne û dîsa here rûpela barkirinê.', -'uploadnologin' => 'Xwe qeyd nekir', -'uploadnologintext' => 'Ji bo barkirina wêneyan divê ku tu [[Special:UserLogin|têkevî]].', -'uploaderror' => 'Şaşbûn bo barkirinê', -'uploadtext' => "Berê tu wêneyên nû bar bikî, ji bo dîtin an vedîtina wêneyên ku ji xwe hene binêre: [[Special:FileList|lîsteya wêneyên barkirî]]. Herwisa wêneyên ku hatine barkirin an jî jê birin li vir dikarî bibînî: [[Special:Log/upload|reşahîya barkirîyan]]. +'upload' => 'Wêneyekî barbike', +'uploadbtn' => 'Wêneyê (ya tiştekî din ya mêdya) barbike', +'reuploaddesc' => 'Barkirinê biskîne û dîsa here rûpela barkirinê.', +'uploadnologin' => 'Xwe qeyd nekir', +'uploadnologintext' => 'Ji bo barkirina wêneyan divê ku tu [[Special:UserLogin|têkevî]].', +'uploaderror' => 'Şaşbûn bo barkirinê', +'upload-recreate-warning' => 'Agadarî: dosyeyek bi vî navî hatiye jêbirin yan raguhastin.', +'uploadtext' => "Berê tu wêneyên nû bar bikî, ji bo dîtin an vedîtina wêneyên ku ji xwe hene binêre: [[Special:FileList|lîsteya wêneyên barkirî]]. Herwisa wêneyên ku hatine barkirin an jî jê birin li vir dikarî bibînî: [[Special:Log/upload|reşahîya barkirîyan]]. Yek ji lînkên jêr ji bo bikarhînana wêne an file'ê di gotarê de bikar bihîne: '''[[{{ns:file}}:File.jpg]]''', '''[[{{ns:file}}:File.png|alt text]]''', anjî ji bo file'ên dengî '''[[{{ns:media}}:File.ogg]]'''", -'upload-permitted' => "Formatên data'yan, yên tên qebûlkirin: $1.", -'upload-preferred' => "Formatên data'yan, yên tên xastin: $1.", -'upload-prohibited' => "Formatên data'yan, yên ne tên qebûlkirin: $1.", -'uploadlog' => 'Reşahîya barkirinê', -'uploadlogpage' => 'Reşahîya barkirinê', -'filename' => 'Navê dosyayê', -'filedesc' => 'Kurte', -'fileuploadsummary' => 'Kurte:', -'filestatus' => 'Rewşa telîfê:', -'filesource' => 'Çavkanî:', -'uploadedfiles' => 'Dosyayên bar kirî', -'ignorewarning' => 'Hişyarê qebûl neke û dosyayê qeyd bike.', -'ignorewarnings' => 'Guh nede hîşyaran', -'minlength1' => "Navên data'yan bi kêmani gireke tîpek be.", -'illegalfilename' => 'Navî datayê "$1" ne tê qebûlkirin ji ber ku tişt tê da hatine nivîsandin yê qedexe ne. Xêra xwe navî datayê biguherîne û carekî din barbike.', -'badfilename' => 'Navê vî wêneyî hat guherandin û bû "$1".', -'filetype-badmime' => 'Data bi formata MIME yê "$1" nameşin werin barkirin.', -'filetype-unwanted-type' => '\'\'\'".$1"\'\'\' formatekî nexastî ye. +'upload-permitted' => "Formatên data'yan, yên tên qebûlkirin: $1.", +'upload-preferred' => "Formatên data'yan, yên tên xastin: $1.", +'upload-prohibited' => "Formatên data'yan, yên ne tên qebûlkirin: $1.", +'uploadlog' => 'Reşahîya barkirinê', +'uploadlogpage' => 'Reşahîya barkirinê', +'filename' => 'Navê dosyayê', +'filedesc' => 'Kurte', +'fileuploadsummary' => 'Kurte:', +'filestatus' => 'Rewşa telîfê:', +'filesource' => 'Çavkanî:', +'uploadedfiles' => 'Dosyayên bar kirî', +'ignorewarning' => 'Hişyarê qebûl neke û dosyayê qeyd bike.', +'ignorewarnings' => 'Guh nede hîşyaran', +'minlength1' => "Navên data'yan bi kêmani gireke tîpek be.", +'illegalfilename' => 'Navî datayê "$1" ne tê qebûlkirin ji ber ku tişt tê da hatine nivîsandin yê qedexe ne. Xêra xwe navî datayê biguherîne û carekî din barbike.', +'badfilename' => 'Navê vî wêneyî hat guherandin û bû "$1".', +'filetype-badmime' => 'Data bi formata MIME yê "$1" nameşin werin barkirin.', +'filetype-unwanted-type' => '\'\'\'".$1"\'\'\' formatekî nexastî ye. Format {{PLURAL:$3|yê tê|yên tên}} qebûlkirin {{PLURAL:$3|ev e|ev in}}: $2.', -'filetype-banned-type' => '\'\'\'".$1"\'\'\' formatekî qedexe ye. +'filetype-banned-type' => '\'\'\'".$1"\'\'\' formatekî qedexe ye. Format {{PLURAL:$3|yê tê|yên tên}} xastin {{PLURAL:$3|ev e|ev in}}: $2.', -'filetype-missing' => 'Piştnavî datayê tune (wek ".jpg").', -'large-file' => "Mezinbûna data'yan bila ne ji $1 mezintir bin; ev data'ya $2 mezin e.", -'emptyfile' => "Data'ya barkirî vala ye. Sedemê valabûnê belkî şaşnivîsek di navê data'yê da ye. Xêra xwe seke, ku tu rast dixazê vê data'yê barbikê.", -'fileexists' => "Datayek bi vê navê berê heye. +'filetype-missing' => 'Piştnavî datayê tune (wek ".jpg").', +'large-file' => "Mezinbûna data'yan bila ne ji $1 mezintir bin; ev data'ya $2 mezin e.", +'emptyfile' => "Data'ya barkirî vala ye. Sedemê valabûnê belkî şaşnivîsek di navê data'yê da ye. Xêra xwe seke, ku tu rast dixazê vê data'yê barbikê.", +'fileexists' => "Datayek bi vê navê berê heye. Eger tu niha li „Tomarbike“ xê, ew wêneyê kevin ê here û wêneyê te ê were barkirin di bin wê navê. Di bin '''[[:$1]]''' du dikarî sekê, ku di dixwazê wê wêneyê biguherînê. Eger tu naxazê, xêra xwe li „Betal“ xe. [[$1|thumb]]", -'fileexists-extension' => "Datayek wek vê navê berê heye: [[$2|thumb]] +'fileexists-extension' => "Datayek wek vê navê berê heye: [[$2|thumb]] * Navî datayê yê tê barkirin: '''[[:$1]]''' * Navî datayê yê berê heyê: '''[[:$2]]''' Xêra xwe navekî din bibîne.", -'file-thumbnail-no' => "Navî vê datayê bi '''$1''' destpêdike. Ev dibêje ku ev wêneyekî çûçik e ''(thumbnail)''. Xêra xwe seke, ku belkî versyonekî mezin yê vê wêneyê li cem te heye û wê wêneyê mezintir di bin navî orîjînal da barbike.", -'fileexists-forbidden' => 'Medyayek bi vê navî heye; xêra xwe şonda here û vê medyayê bi navekî din barbike. +'file-thumbnail-no' => "Navî vê datayê bi '''$1''' destpêdike. Ev dibêje ku ev wêneyekî çûçik e ''(thumbnail)''. Xêra xwe seke, ku belkî versyonekî mezin yê vê wêneyê li cem te heye û wê wêneyê mezintir di bin navî orîjînal da barbike.", +'fileexists-forbidden' => 'Medyayek bi vê navî heye; xêra xwe şonda here û vê medyayê bi navekî din barbike. [[File:$1|thumb|center|$1]]', -'successfulupload' => 'Barkirin serkeftî', -'uploadwarning' => 'Hişyara barkirinê', -'savefile' => 'Dosyayê tomar bike', -'uploadedimage' => '"$1" barkirî', -'overwroteimage' => 'versyonekî nuh ji "[[$1]]" hate barkirin', -'uploaddisabled' => 'Barkirin hatîye qedexekirin', -'uploaddisabledtext' => "Barkirinê data'yan hatiye qedexekirin.", -'uploadvirus' => "Di vê data'yê da vîrûsek heye! Înformasyon: $1", -'sourcefilename' => 'Navî wêneyê (ya tiştekî din ya mêdya):', -'destfilename' => 'Navî wêneyê (ya tiştekî din ya mêdya) yê xastî:', -'upload-maxfilesize' => "Mezinbûna data'yê ya herî mezin: $1", -'watchthisupload' => 'Vê rûpelê bişopîne', -'filewasdeleted' => "Data'yek bi vê navê hatibû barkirin û jêbirin. Xêra xwe li $1 seke ku barkirina te hêja ye ya na.", -'upload-wasdeleted' => "'''Hîşyar: Tu data'yekê bardikê yê berê hatibû jêbirin.''' +'uploadwarning' => 'Hişyara barkirinê', +'savefile' => 'Dosyayê tomar bike', +'uploadedimage' => '"$1" barkirî', +'overwroteimage' => 'versyonekî nuh ji "[[$1]]" hate barkirin', +'uploaddisabled' => 'Barkirin hatîye qedexekirin', +'uploaddisabledtext' => "Barkirinê data'yan hatiye qedexekirin.", +'uploadvirus' => "Di vê data'yê da vîrûsek heye! Înformasyon: $1", +'sourcefilename' => 'Navî wêneyê (ya tiştekî din ya mêdya):', +'destfilename' => 'Navî wêneyê (ya tiştekî din ya mêdya) yê xastî:', +'upload-maxfilesize' => "Mezinbûna data'yê ya herî mezin: $1", +'watchthisupload' => 'Vê rûpelê bişopîne', +'filewasdeleted' => "Data'yek bi vê navê hatibû barkirin û jêbirin. Xêra xwe li $1 seke ku barkirina te hêja ye ya na.", +'upload-wasdeleted' => "'''Hîşyar: Tu data'yekê bardikê yê berê hatibû jêbirin.''' Zanibe, ku ev barkirina kê were qebûlkirin ya na. Înformasyonan li ser jêbirinê kevin ra:", -'filename-bad-prefix' => "Nava wê data'yê, yê tu niha bardikê, bi '''\"\$1\"''' destpêdike. Kamêrayên dîjîtal wan navan didin wêneyên xwe. Ji kerema xwe navekî baştir binivisîne ji bo mirov zûtir zanibin ku şayeşê vê wêneyê çî ye.", +'filename-bad-prefix' => "Nava wê data'yê, yê tu niha bardikê, bi '''\"\$1\"''' destpêdike. Kamêrayên dîjîtal wan navan didin wêneyên xwe. Ji kerema xwe navekî baştir binivisîne ji bo mirov zûtir zanibin ku şayeşê vê wêneyê çî ye.", +'upload-success-subj' => 'Barkirin serkeftî', 'license' => 'Lîsens:', 'license-header' => 'Lîsens:', @@ -1230,7 +1220,6 @@ Binêre [[Special:WantedCategories|kategorîyên xastî]].', # Watchlist 'watchlist' => 'Lîsteya min ya şopandinê', 'mywatchlist' => 'Lîsteya min ya şopandinê', -'watchlistfor' => "(ji bo '''$1''')", 'nowatchlist' => 'Tiştek di lîsteya te ya şopandinê da tune ye.', 'watchlistanontext' => 'Ji bo sekirinê ya xeyrandinê lîsteya te ya şopandinê tu gireke xwe $1.', 'watchnologin' => 'Te xwe qeyd nekirîye.', @@ -1478,7 +1467,6 @@ Sedemekê binivîse!', 'ipb-edit-dropdown' => 'Sedemên astengkirinê', 'ipb-unblock-addr' => 'Astengkirinê $1 rake', 'ipb-unblock' => "Astengkirina bikarhênerekî ya adrêsa IP'yekê rake", -'ipb-blocklist-addr' => 'Astengkirinên niha ji $1 ra bibîne', 'ipb-blocklist' => 'Astengkirinên niha bibîne', 'ipb-blocklist-contribs' => 'Tevkarîyên ji bo $1', 'unblockip' => "IP'yekê dîsa veke", @@ -1770,10 +1758,10 @@ if (wgUserLanguage == "ku-arab") 'thumbsize' => "Mezinbûna thunbnail'ê:", 'widthheight' => '$1 x $2', 'widthheightpage' => '$1×$2, $3 rûpel', -'file-info' => '(mezinbûnê data: $1, MIME-typ: $2)', -'file-info-size' => '($1 × $2 pixel, mezinbûnê data: $3, MIME-typ: $4)', +'file-info' => 'mezinbûnê data: $1, MIME-typ: $2', +'file-info-size' => '$1 × $2 pixel, mezinbûnê data: $3, MIME-typ: $4', 'file-nohires' => 'Versyonekî jê mezintir tune.', -'svg-long-desc' => "(Data'ya SVG, mezinbûna rast: $1 × $2 pixel; mezinbûna data'yê: $3)", +'svg-long-desc' => "Data'ya SVG, mezinbûna rast: $1 × $2 pixel; mezinbûna data'yê: $3", 'show-big-image' => 'Mezînbûn', 'show-big-image-thumb' => 'Mezinbûna vê pêşnîşandanê: $1 × $2 pixel', @@ -1945,6 +1933,13 @@ Xêra xwe zanibe ku tu bi rastî dixwazê vê rûpelê dîsa çêkê", 'tag-filter-submit' => 'Fîltre', 'tags-edit' => 'biguherîne', +# Special:ComparePages +'compare-page1' => 'Rûpel 1', +'compare-page2' => 'Rûpel 2', +'compare-rev1' => 'Revîzyon 1', +'compare-rev2' => 'Revîzyon 2', +'compare-submit' => 'Bide berhev', + # Database error messages 'dberr-header' => "Problemeka vê wiki'yê heye.", diff --git a/languages/messages/MessagesKw.php b/languages/messages/MessagesKw.php index 8e1b58c6..82ee17f7 100644 --- a/languages/messages/MessagesKw.php +++ b/languages/messages/MessagesKw.php @@ -18,70 +18,77 @@ $namespaceNames = array( NS_MEDIA => 'Media', NS_SPECIAL => 'Arbennek', - NS_TALK => 'Keskows', + NS_TALK => 'Kescows', NS_USER => 'Devnydhyer', - NS_USER_TALK => 'Keskows_Devnydhyer', - NS_PROJECT_TALK => 'Keskows_$1', + NS_USER_TALK => 'Kescows_Devnydhyer', + NS_PROJECT_TALK => 'Kescows_$1', NS_FILE => 'Restren', - NS_FILE_TALK => 'Keskows_Restren', + NS_FILE_TALK => 'Kescows_Restren', NS_MEDIAWIKI => 'MediaWiki', - NS_MEDIAWIKI_TALK => 'Keskows_MediaWiki', - NS_TEMPLATE => 'Skantlyn', - NS_TEMPLATE_TALK => 'Keskows_Skantlyn', + NS_MEDIAWIKI_TALK => 'Kescows_MediaWiki', + NS_TEMPLATE => 'Scantlyn', + NS_TEMPLATE_TALK => 'Kescows_Scantlyn', NS_HELP => 'Gweres', - NS_HELP_TALK => 'Keskows_Gweres', - NS_CATEGORY => 'Klass', - NS_CATEGORY_TALK => 'Keskows_Klass', + NS_HELP_TALK => 'Kescows_Gweres', + NS_CATEGORY => 'Class', + NS_CATEGORY_TALK => 'Kescows_Class', ); $namespaceAliases = array( 'Arbednek' => NS_SPECIAL, 'Cows' => NS_TALK, - 'Kescows' => NS_TALK, + 'Keskows' => NS_TALK, 'Cows_Devnydhyer' => NS_USER_TALK, - 'Kescows_Devnydhyer' => NS_USER_TALK, + 'Keskows_Devnydhyer' => NS_USER_TALK, 'Cows_$1' => NS_PROJECT_TALK, - 'Kescows_$1' => NS_PROJECT_TALK, + 'Keskows_$1' => NS_PROJECT_TALK, 'Cows_Restren' => NS_FILE_TALK, - 'Kescows_Restren' => NS_FILE_TALK, + 'Keskows_Restren' => NS_FILE_TALK, 'Cows_MediaWiki' => NS_MEDIAWIKI_TALK, 'Cows_MediaWiki' => NS_MEDIAWIKI_TALK, + 'Keskows_MediaWiki' => NS_MEDIAWIKI_TALK, 'Cows_Scantlyn' => NS_TEMPLATE_TALK, - 'Scantlyn' => NS_TEMPLATE, - 'Kescows_Scantlyn' => NS_TEMPLATE_TALK, + 'Skantlyn' => NS_TEMPLATE, + 'Keskows_Skantlyn' => NS_TEMPLATE_TALK, 'Cows_Gweres' => NS_HELP_TALK, - 'Kescows_Gweres' => NS_HELP_TALK, + 'Keskows_Gweres' => NS_HELP_TALK, 'Cows_Class' => NS_CATEGORY_TALK, - 'Class' => NS_CATEGORY, - 'Kescows_Class' => NS_CATEGORY_TALK, + 'Klass' => NS_CATEGORY, + 'Keskows_Klass' => NS_CATEGORY_TALK, ); $specialPageAliases = array( - 'Watchlist' => array( 'Rol golyas' ), - 'Recentchanges' => array( 'Chanjyow a-dhiwedhes' ), - 'Upload' => array( 'Ughkarga' ), + 'Preferences' => array( 'Dewisyansow' ), + 'Watchlist' => array( 'Rol_golyas' ), + 'Recentchanges' => array( 'Chanjyow_a-dhiwedhes' ), + 'Upload' => array( 'Ughcarga' ), 'Randompage' => array( 'FolenDreJons' ), + 'Wantedpages' => array( 'FolennowWhansus' ), + 'Wantedcategories' => array( 'ClassysWhansus' ), + 'Wantedfiles' => array( 'RestrennowWhansus' ), + 'Wantedtemplates' => array( 'ScantlynsWhansus' ), + 'Newpages' => array( 'FolennowNowyth' ), + 'Ancientpages' => array( 'FolennowCoth' ), 'Allpages' => array( 'OllFolennow' ), 'Specialpages' => array( 'FolennowArbennek' ), 'Contributions' => array( 'Kevrohow' ), 'Emailuser' => array( 'EbostyaDevnydhyer' ), - 'Movepage' => array( 'RemovyaFolen' ), - 'Categories' => array( 'Klassys' ), - 'Export' => array( 'Esperthi' ), + 'Movepage' => array( 'GwayaFolen' ), + 'Categories' => array( 'Classys' ), + 'Export' => array( 'Esperthy' ), 'Version' => array( 'Versyon' ), 'Allmessages' => array( 'OllMessajow' ), - 'Blockip' => array( 'Let' ), - 'Import' => array( 'Ymperthi' ), + 'Blockip' => array( 'Lettya' ), + 'Import' => array( 'Ymperthy' ), 'Mypage' => array( 'OwFolen' ), 'Mytalk' => array( 'OwHows' ), 'Mycontributions' => array( 'OwHevrohow' ), - 'Search' => array( 'Hwilans' ), + 'Search' => array( 'Whilans' ), ); $messages = array( # User preference toggles -'tog-hideminor' => 'Cudha chanjyow bian yn chanjyow a-dhiwedhes', -'tog-rememberpassword' => "Gwra remembra ow omgelmy war'n amontyer-ma", +'tog-hideminor' => 'Cudha chanjyow bian yn chanjyow a-dhiwedhes', 'underline-never' => 'Nevra', @@ -167,28 +174,17 @@ $messages = array( 'qbspecialpages' => 'Folednow arbednek', # Vector skin -'vector-action-addsection' => 'Keworra mater', -'vector-action-delete' => 'Dilea', -'vector-action-move' => 'Gwaya', -'vector-action-protect' => 'Difres', -'vector-action-undelete' => 'Disdhilea', -'vector-action-unprotect' => 'Disdhifres', -'vector-namespace-category' => 'Class', -'vector-namespace-help' => 'Gweres', -'vector-namespace-image' => 'Restren', -'vector-namespace-main' => 'Folen', -'vector-namespace-media' => 'Folen media', -'vector-namespace-mediawiki' => 'Messaj', -'vector-namespace-project' => 'Folen an towl', -'vector-namespace-special' => 'Folen arbednek', -'vector-namespace-talk' => 'Kescows', -'vector-namespace-template' => 'Scantlyn', -'vector-namespace-user' => 'Folen devnydhyer', -'vector-view-create' => 'Gwruthyl', -'vector-view-edit' => 'Chanjya', -'vector-view-history' => 'Gweles istory an folen', -'vector-view-view' => 'Redya', -'vector-view-viewsource' => 'Gweles pennfenten', +'vector-action-addsection' => 'Keworra mater', +'vector-action-delete' => 'Dilea', +'vector-action-move' => 'Gwaya', +'vector-action-protect' => 'Difres', +'vector-action-undelete' => 'Disdhilea', +'vector-action-unprotect' => 'Disdhifres', +'vector-view-create' => 'Gwruthyl', +'vector-view-edit' => 'Chanjya', +'vector-view-history' => 'Gweles istory an folen', +'vector-view-view' => 'Redya', +'vector-view-viewsource' => 'Gweles pennfenten', 'errorpagetitle' => 'Gwall', 'returnto' => 'Dewheles dhe $1.', @@ -316,7 +312,7 @@ $messages = array( 'yourname' => 'Hanow-usyer:', 'yourpassword' => 'Ger-tremena:', 'yourpasswordagain' => 'Jynnscrifewgh agas ger-tremena arta:', -'remembermypassword' => "Gwra remembra ow omgelmy war'n amontyer-ma", +'remembermypassword' => "Remembra ow ger-tremena war'n amontyer-ma (rag ughboynt a $1 {{PLURAL:$1|dedh|dedh}})", 'yourdomainname' => 'Agas diredh:', 'login' => 'Omgelmy', 'nav-login-createaccount' => 'Omgelmy / Formya acont nowyth', @@ -567,11 +563,7 @@ Gwrewgh assaya dhe rag-gorra agas govyn gen ''all:'' rag whila yn pub le (a-bart 'recentchanges-legend' => 'Dewisyansow an chanjyow a-dhiwedhes', 'recentchangestext' => "Sewya an chanjyow diwettha eus dhe'n wiki war'n folen-ma.", 'recentchanges-feed-description' => "Sewya an chanjyow diwettha dhe'n wiki y'n feed-ma.", -'recentchanges-label-legend' => 'Alwhedh: $1.', -'recentchanges-legend-newpage' => '$1 - folen nowyth', -'recentchanges-legend-minor' => '$1 - chanj bian', 'recentchanges-label-minor' => 'Hemm yw chanj bian', -'recentchanges-legend-bot' => '$1 - chanj gans bot', 'rclistfrom' => 'Disqwedhes chanjyow nowyth ow talleth a-dhia $1.', 'rcshowhideminor' => '$1 chanjyow bian', 'rcshowhidebots' => '$1 botow', @@ -717,7 +709,6 @@ Yth yw folednow eus war agas [[Special:Watchlist|rol golyas]] yn '''tew'''.", # Watchlist 'watchlist' => 'Ow rol golyas', 'mywatchlist' => 'Ow rol golyas', -'watchlistfor' => "(rag '''$1''')", 'addedwatch' => 'Keworrys dhe rol golyas', 'removedwatch' => 'Dileys dhort an rol golyas', 'watch' => 'Golya', @@ -924,7 +915,9 @@ Why a ell gweles hy fennfenten.', 'nextdiff' => 'Chanj nowyttha →', # Media information +'file-info-size' => '$1 × $2 pixel, mens an restren: $3, sort MIME : $4', 'file-nohires' => 'Nyns eus clerder uhella cavadow.', +'svg-long-desc' => 'Restren SVG, $1 × $2 pixel yn hanow, mens an restren: $3', 'show-big-image' => 'Clerder leun', 'show-big-image-thumb' => 'Mens an ragwel-ma: $1 × $2 pixel', diff --git a/languages/messages/MessagesKy.php b/languages/messages/MessagesKy.php index a9697ffb..4e297093 100644 --- a/languages/messages/MessagesKy.php +++ b/languages/messages/MessagesKy.php @@ -306,7 +306,6 @@ $messages = array( # Watchlist 'watchlist' => 'Байкоо тизмем', -'watchlistfor' => "('''$1''' үчүн)", 'watchnologin' => 'Катталган жок', 'addedwatch' => 'Байкоо тизмеге кошумчаланды', 'watch' => 'Байкоо', diff --git a/languages/messages/MessagesLa.php b/languages/messages/MessagesLa.php index 5f6362d9..26f7ce13 100644 --- a/languages/messages/MessagesLa.php +++ b/languages/messages/MessagesLa.php @@ -169,8 +169,7 @@ $messages = array( 'tog-editsection' => 'Paginarum segmenta [redigere] hortari', 'tog-editsectiononrightclick' => 'Paginarum segmenta dextero percussu in titulis redigenda (JavaScript poscitur)', 'tog-showtoc' => 'Indicem plurium quam III segmentorum paginis praebere', -'tog-rememberpassword' => 'Memorare tesserae meae inter conventa (utere cookies)', -'tog-editwidth' => 'Capsam recensionis amplificare ut totam latitudinem habet', +'tog-rememberpassword' => 'Memorare tesserae meae hoc in navigatro inter conventa ({{PLURAL:$1|die|diebus}} $1 tenus)', 'tog-watchcreations' => 'Paginas quas creo in paginarum custoditarum indicem addere', 'tog-watchdefault' => 'Paginas quas recenseo in paginarum custoditarum indicem addere', 'tog-watchmoves' => 'Paginas quas moveo in paginarum custoditarum indicem addere', @@ -296,31 +295,20 @@ $messages = array( 'faqpage' => 'Project:Quaestiones frequentes', # Vector skin -'vector-action-addsection' => 'Partem novam addere', -'vector-action-delete' => 'Delere', -'vector-action-move' => 'Movere', -'vector-action-protect' => 'Protegere', -'vector-action-undelete' => 'Restituere', -'vector-action-unprotect' => 'Deprotegere', -'vector-namespace-category' => 'Categoria', -'vector-namespace-help' => 'Auxilium', -'vector-namespace-image' => 'Fasciculus', -'vector-namespace-main' => 'Res', -'vector-namespace-media' => 'Media', -'vector-namespace-mediawiki' => 'Nuntium', -'vector-namespace-project' => 'Consilium', -'vector-namespace-special' => 'Pagina specialis', -'vector-namespace-talk' => 'Disputatio', -'vector-namespace-template' => 'Formula', -'vector-namespace-user' => 'Pagina usoris', -'vector-view-create' => 'Creare', -'vector-view-edit' => 'Recensere', -'vector-view-history' => 'Historiam inspicere', -'vector-view-view' => 'Legere', -'vector-view-viewsource' => 'Fontem inspicere', -'actions' => 'Actiones', -'namespaces' => 'Spatia nominalia', -'variants' => 'Variantes', +'vector-action-addsection' => 'Partem novam addere', +'vector-action-delete' => 'Delere', +'vector-action-move' => 'Movere', +'vector-action-protect' => 'Protegere', +'vector-action-undelete' => 'Restituere', +'vector-action-unprotect' => 'Deprotegere', +'vector-view-create' => 'Creare', +'vector-view-edit' => 'Recensere', +'vector-view-history' => 'Historiam inspicere', +'vector-view-view' => 'Legere', +'vector-view-viewsource' => 'Fontem inspicere', +'actions' => 'Actiones', +'namespaces' => 'Spatia nominalia', +'variants' => 'Variantes', 'errorpagetitle' => 'Erratum', 'returnto' => 'Redire ad $1.', @@ -506,7 +494,7 @@ Noli oblivisci [[Special:Preferences|praeferentias tuas]] apud {{grammar:accusat 'yourname' => 'Nomen usoris:', 'yourpassword' => 'Tessera:', 'yourpasswordagain' => 'Tesseram adfirmare:', -'remembermypassword' => 'Tesseram meam inter conventa memento', +'remembermypassword' => 'Tesseram meam hoc in navigatro inter conventa memento ({{PLURAL:$1|die|diebus}} $1 tenus)', 'yourdomainname' => 'Regnum tuum:', 'login' => 'Conventum aperire', 'nav-login-createaccount' => 'Conventum aperire / conventum creare', @@ -606,6 +594,7 @@ Hunc nuntium ignorare potes, si nolis hac ratione uti.', 'showlivepreview' => 'Monstrare praevisum viventem', 'showdiff' => 'Mutata ostendere', 'anoneditwarning' => "'''Monitio:''' Conventum tuum non apertum. Locus IP tuus in historia huius paginae notabitur.", +'anonpreviewwarning' => "''Conventum tuum non apertum. Si servas, locus IP tuus in historia huius paginae notabitur.''", 'missingcommenttext' => 'Sententiam subter inscribe.', 'summary-preview' => 'Praevisum summarii:', 'subject-preview' => 'Praevisum rei/tituli:', @@ -688,9 +677,6 @@ Nobis etiam spondes te esse ipsum horum verborum scriptorem primum, aut ex opere Nisi vis verba tua crudelissime recenseri, noli ea submittere.
    Nobis etiam spondes te esse ipsum horum verborum scriptorem primum, aut ex opere in \"dominio publico\" vel ex libere fonte simili exscripsisse (vide singula apud \$1). '''NOLI OPERIBUS SUB IURE DIVULGANDI UTI SINE POTESTATE!'''", -'longpagewarning' => 'MONITIO: Haec pagina est $1 chilioctetis longa; -aliquae navigatra paginas longiores quam 32 chiliocteti recensere non possunt. -Considera paginam in partes minores frangere.', 'protectedpagewarning' => "'''CAVE: Haec pagina protecta est ut magistratus soli eam recenseant.'''", 'templatesused' => '{{PLURAL:$1|Formula hac in pagina adhibita:|Formulae hac in pagina adhibitae:}}', 'templatesusedpreview' => '{{PLURAL:$1|Formula hoc in praeviso adhibita:|Formulae hoc in praeviso adhibitae:}}', @@ -1087,12 +1073,8 @@ Si vis, sinit etiam aliis tecum loqui per tuam paginam usoris vel disputationis, 'recentchanges-legend' => 'Indicis paginarum nuper mutatarum praeferentiae', 'recentchangestext' => 'Inspice mutationes recentes huic vici in hac pagina.', 'recentchanges-feed-description' => 'Nuper mutata Viciae hoc in fluxu observare.', -'recentchanges-label-legend' => 'Sigla: $1.', -'recentchanges-legend-newpage' => '$1 - pagina nova', 'recentchanges-label-newpage' => 'Haec recensio paginam novam creavit', -'recentchanges-legend-minor' => '$1 - recensio minor', 'recentchanges-label-minor' => 'Haec est recensio minor', -'recentchanges-legend-bot' => '$1 - recensio automati', 'recentchanges-label-bot' => 'Hanc emendationem automaton fecit', 'rcnote' => "Subter {{PLURAL:$1|est '''1''' nuper mutatum|sunt '''$1''' nuperrime mutata}} in {{PLURAL:$2|die proximo|'''$2''' diebus proximis}} ex $5, $4.", 'rcnotefrom' => "Subter sunt '''$1''' nuperrime mutata in proxima '''$2''' die.", @@ -1160,7 +1142,6 @@ Vide etiam [[Special:NewFiles|pinacothecam fasciculorum recentissimorum imposito 'badfilename' => 'Nomen fasciculi ad "$1" mutatum est.', 'filetype-missing' => 'Fasciculus extensionem non habet (sicut e. g. ".jpg").', 'large-file' => 'Suasum est ut fasciculi $1 magnitudine non excedant; magnitudo huius fasciculi est $2.', -'successfulupload' => 'Impositum est perfectum', 'uploadwarning' => 'Monitus imponendi', 'savefile' => 'Servare fasciculum', 'uploadedimage' => 'imposuit "[[$1]]"', @@ -1175,6 +1156,7 @@ Vide etiam [[Special:NewFiles|pinacothecam fasciculorum recentissimorum imposito Tibi oportet meditari utrum hunc fasciculum iterum imponere tamen convenit. Commodule notatio fasciculorum deletorum hic datur:", +'upload-success-subj' => 'Impositum est perfectum', 'upload-proto-error' => 'Protocollum incorrectum', 'upload-file-error' => 'Erratum internum', @@ -1291,7 +1273,6 @@ Contenta [$2 paginae descriptionis fasciculi] subter monstrantur.', 'statistics-edits-average' => 'Recensiones per paginam', 'statistics-views-total' => 'Visus', 'statistics-views-peredit' => 'Visus per recensionem', -'statistics-jobqueue' => 'Numerus [http://www.mediawiki.org/wiki/Manual:Job_queue operationum qui etiam exspectant perfacier]', 'statistics-users' => '[[Special:ListUsers|Usores]] relati', 'statistics-users-active' => 'Usores activi', 'statistics-users-active-desc' => 'Usores qui {{PLURAL:$1|proxima die|proximis $1 diebus}} actionem perfecerunt', @@ -1476,10 +1457,12 @@ Inscriptio electronica quam in [[Special:Preferences|praeferentiis tuis]] dedis 'emailsenttext' => 'Nuntium tuum missum est.', 'emailuserfooter' => 'Has litteras electronicas $1 ad $2 misit per "Litteras electronicas usori mittere" in {{grammar:ablative|{{SITENAME}}}}.', +# User Messenger +'usermessage-editor' => 'Nuntius systematis', + # Watchlist 'watchlist' => 'Paginae custoditae', 'mywatchlist' => 'Paginae custoditae', -'watchlistfor' => "(pro usore '''$1''')", 'nowatchlist' => 'Nullas paginas custodis.', 'watchlistanontext' => 'Necesse est $1 ad indicem paginarum custoditarum inspiciendum vel recensendum.', 'watchnologin' => 'Conventum non est apertum', @@ -2049,10 +2032,10 @@ Paginae nomen petitum "[[:$1]]" iam existit. Vin tu eam delere ut pagina illic m ''(in pagina descriptionis fasciculi)''", 'thumbsize' => 'Magnitudo pollicisunguis:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|pagina|paginae}}', -'file-info' => '(magnitudo fasciculi: $1, typus MIME: $2)', -'file-info-size' => '($1 × $2 elementa imaginalia, magnitudo fasciculi: $3, typus MIME: $4)', +'file-info' => 'magnitudo fasciculi: $1, typus MIME: $2', +'file-info-size' => '$1 × $2 elementa imaginalia, magnitudo fasciculi: $3, typus MIME: $4', 'file-nohires' => 'Nulla maior resolutio exstat.', -'svg-long-desc' => '(fasciculus SVG, nominale $1 × $2 elementa imaginalia, magnitudo fasciculi: $3)', +'svg-long-desc' => 'fasciculus SVG, nominale $1 × $2 elementa imaginalia, magnitudo fasciculi: $3', 'show-big-image' => 'Resolutio completa', 'show-big-image-thumb' => 'Mensura huius praevisi: pixellae $1 × $2', 'file-info-gif-frames' => '$1 {{PLURAL:$1|replum|repla}}', @@ -2412,6 +2395,12 @@ Quaesumus, adfirma ut iterum hanc paginam crees.", 'tags-edit' => 'mutatum', 'tags-hitcount' => '$1 {{PLURAL:$1|mutatum|mutata}}', +# Special:ComparePages +'compare-page1' => 'Pagina 1', +'compare-page2' => 'Pagina 2', +'compare-rev1' => 'Emendatio 1', +'compare-rev2' => 'Emendatio 2', + # HTML forms 'htmlform-submit' => 'Submittere', 'htmlform-reset' => 'Mutationes abrogare', diff --git a/languages/messages/MessagesLad.php b/languages/messages/MessagesLad.php index 03634f20..38de12a6 100644 --- a/languages/messages/MessagesLad.php +++ b/languages/messages/MessagesLad.php @@ -17,56 +17,226 @@ $fallback = 'es'; +$namespaceNames = array( + NS_MEDIA => 'Medya', + NS_SPECIAL => 'Especial', + NS_TALK => 'Diskusyón', + NS_USER => 'Usador', + NS_USER_TALK => 'Messaje_de_Usador', + NS_PROJECT_TALK => 'Diskusyón_de_$1', + NS_FILE => 'Dosya', + NS_FILE_TALK => 'Diskusyón_de_Dosya', + NS_MEDIAWIKI => 'MedyaViki', + NS_MEDIAWIKI_TALK => 'Diskusyón_de_MedyaViki', + NS_TEMPLATE => 'Xabblón', + NS_TEMPLATE_TALK => 'Diskusyón_de_Xabblón', + NS_HELP => 'Ayudo', + NS_HELP_TALK => 'Diskusyón_de_Ayudo', + NS_CATEGORY => 'Katēggoría', + NS_CATEGORY_TALK => 'Diskusyón_de_Katēggoría', +); + +$namespaceAliases = array( + // Backward compat. Fallbacks from 'es'. + 'Especial' => NS_SPECIAL, + 'Discusión' => NS_TALK, + 'Usuario' => NS_USER, + 'Usuario_Discusión' => NS_USER_TALK, + '$1_Discusión' => NS_PROJECT_TALK, + 'Archivo' => NS_FILE, + 'Archivo_Discusión' => NS_FILE_TALK, + 'MediaWiki_Discusión' => NS_MEDIAWIKI_TALK, + 'Plantilla' => NS_TEMPLATE, + 'Plantilla_Discusión' => NS_TEMPLATE_TALK, + 'Ayuda' => NS_HELP, + 'Ayuda_Discusión' => NS_HELP_TALK, + 'Categoría' => NS_CATEGORY, + 'Categoría_Discusión' => NS_CATEGORY_TALK, + + 'Meddia' => NS_MEDIA, + 'Diskussión' => NS_TALK, + 'Empleador' => NS_USER, + 'Message_de_Empleador' => NS_USER_TALK, + 'Diskussión_de_$1' => NS_PROJECT_TALK, + 'Dossia' => NS_FILE, + 'Diskussión_de_Dossia' => NS_FILE_TALK, + 'Diskussión_de_Xabblón' => NS_MEDIAWIKI_TALK, + 'Plantilla_Discusión' => NS_TEMPLATE_TALK, + 'Diskussión_de_Ayudo' => NS_HELP_TALK, + 'Kateggoría' => NS_CATEGORY, + 'Diskussión_de_Kateggoría' => NS_CATEGORY_TALK, +); + +$specialPageAliases = array( + 'DoubleRedirects' => array( 'DireksyonesDobles' ), + 'BrokenRedirects' => array( 'DireksyonesBozeadas' ), + 'Disambiguations' => array( 'Apartamiento_de_senso' ), + 'Userlogin' => array( 'Entrada_del_usador' ), + 'Userlogout' => array( 'Salida_del_usador' ), + 'CreateAccount' => array( 'CriarCuento' ), + 'Preferences' => array( 'Preferencias' ), + 'Watchlist' => array( 'Lista_de_escogidos' ), + 'Recentchanges' => array( 'TrocamientosFreskos' ), + 'Upload' => array( 'CargarDosya' ), + 'Listfiles' => array( 'ListaDosyas' ), + 'Newimages' => array( 'NuevasDosyas' ), + 'Listusers' => array( 'ListaUsadores' ), + 'Listgrouprights' => array( 'DerechosGruposUsadores' ), + 'Statistics' => array( 'Estatistika' ), + 'Randompage' => array( 'KualunkeHoja' ), + 'Lonelypages' => array( 'HojasHuérfanas' ), + 'Uncategorizedpages' => array( 'HojasNoKateggorizadas' ), + 'Uncategorizedcategories' => array( 'KateggoríasNoKateggorizadas' ), + 'Uncategorizedimages' => array( 'DosyasNoKateggorizadas' ), + 'Uncategorizedtemplates' => array( 'XabblonesNoKateggorizados' ), + 'Unusedcategories' => array( 'KateggoríasSinUso' ), + 'Unusedimages' => array( 'DosyasSinUso' ), + 'Wantedpages' => array( 'HojasDemandadas' ), + 'Wantedcategories' => array( 'KateggoríasDemandadas' ), + 'Wantedfiles' => array( 'DosyasDemandadas' ), + 'Wantedtemplates' => array( 'XabblonesDemandados' ), + 'Mostlinked' => array( 'HojasLoMásMunchoLinkeadas' ), + 'Mostlinkedcategories' => array( 'KateggoríasMásUsadas' ), + 'Mostlinkedtemplates' => array( 'XabblonesMásUsados' ), + 'Mostimages' => array( 'DosyasLoMásMunchoLinkeadas' ), + 'Mostcategories' => array( 'MásKateggorizadas' ), + 'Mostrevisions' => array( 'MásEddisyones' ), + 'Fewestrevisions' => array( 'MancoEddisyones' ), + 'Shortpages' => array( 'HojasCurtas' ), + 'Longpages' => array( 'HojasLargas' ), + 'Newpages' => array( 'HojasNuevas' ), + 'Ancientpages' => array( 'HojasViejas' ), + 'Deadendpages' => array( 'HojasSinLinkes' ), + 'Protectedpages' => array( 'HojasGuardadas' ), + 'Protectedtitles' => array( 'TítůlosGuardados' ), + 'Allpages' => array( 'TodasLasHojas' ), + 'Prefixindex' => array( 'Fijhrist_de_prefiksos' ), + 'Ipblocklist' => array( 'UsadoresBloqueados' ), + 'Unblock' => array( 'Desbloquea' ), + 'Specialpages' => array( 'HojasEspeciales' ), + 'Contributions' => array( 'Ajustamientos' ), + 'Emailuser' => array( 'MandarEmailUsador' ), + 'Confirmemail' => array( 'AverdadearEmail' ), + 'Whatlinkshere' => array( 'LoQueLinkeaAquí' ), + 'Recentchangeslinked' => array( 'TrocamientosEnterassados' ), + 'Movepage' => array( 'TashirearHoja' ), + 'Blockme' => array( 'Bloquearme' ), + 'Booksources' => array( 'FuentesDeLibros' ), + 'Categories' => array( 'Kateggorías' ), + 'Export' => array( 'AktarearAfuera' ), + 'Version' => array( 'Versión' ), + 'Allmessages' => array( 'TodosLosMessajes' ), + 'Log' => array( 'Rējistro' ), + 'Blockip' => array( 'Bloquear' ), + 'Undelete' => array( 'TraerAtrás' ), + 'Import' => array( 'AktarearAriento' ), + 'Lockdb' => array( 'BloquearBasa_de_dados' ), + 'Unlockdb' => array( 'DesbloquearBasa_de_dados' ), + 'Userrights' => array( 'DerechosUsadores' ), + 'MIMEsearch' => array( 'BuscarPorMIME' ), + 'FileDuplicateSearch' => array( 'BuscarDosyasDobles' ), + 'Unwatchedpages' => array( 'HojasSinCudiadas' ), + 'Listredirects' => array( 'TodasLasDireksyones' ), + 'Revisiondelete' => array( 'EfassarRēvizyón' ), + 'Unusedtemplates' => array( 'XabblonesSinUso' ), + 'Randomredirect' => array( 'KualunkeDireksyón' ), + 'Mypage' => array( 'MiHoja' ), + 'Mytalk' => array( 'MiDiskusyón' ), + 'Mycontributions' => array( 'MisAjustamientos' ), + 'Listadmins' => array( 'ListaDeAdministradores' ), + 'Listbots' => array( 'ListaDeBots' ), + 'Popularpages' => array( 'HojasMásVisitadas' ), + 'Search' => array( 'Buscar' ), + 'Resetpass' => array( 'TrocarKóddiche' ), + 'Withoutinterwiki' => array( 'SinIntervikis' ), + 'MergeHistory' => array( 'AjuntarIstoria' ), + 'Filepath' => array( 'Pozisyón_de_dosya' ), + 'Invalidateemail' => array( 'DesverdadearEmail' ), + 'Blankpage' => array( 'VaziarHoja' ), + 'LinkSearch' => array( 'Busqueda_de_linkes' ), + 'DeletedContributions' => array( 'AjustamientosEfassados' ), + 'Tags' => array( 'Etiquetas' ), + 'Activeusers' => array( 'UsadoresActivos' ), + 'ComparePages' => array( 'ApariguarHojas' ), + 'Badtitle' => array( 'TítůloNegro' ), +); + +$magicWords = array( + 'redirect' => array( '0', '#DIRIJAR', '#DIRECCIÓN', '#REDIRECCIÓN', '#REDIRECCION', '#REDIRECT' ), + 'fullpagename' => array( '1', 'NOMBREDEHOJACOMPLETA', 'NOMBREDEPÁGINACOMPLETA', 'NOMBREDEPAGINACOMPLETA', 'NOMBREDEPÁGINAENTERA', 'NOMBREDEPAGINAENTERA', 'FULLPAGENAME' ), + 'subpagename' => array( '1', 'NOMBREDEHOJICA', 'NOMBREDESUBPAGINA', 'NOMBREDESUBPÁGINA', 'SUBPAGENAME' ), + 'msg' => array( '0', 'MSJ:', 'MSG:' ), + 'img_left' => array( '1', 'cierda', 'izquierda', 'izda', 'izq', 'left' ), + 'img_none' => array( '1', 'dinguna', 'dinguno', 'ninguna', 'nada', 'no', 'ninguno', 'none' ), +); + $messages = array( # User preference toggles -'tog-underline' => 'Suliña los atamientos:', -'tog-highlightbroken' => 'Àmostra los artíkůlos vazíos en kolorado , (si no: este modo?).', -'tog-justify' => 'Àrrima los paraggrafos de dos vandas', -'tog-hideminor' => 'Eskonde los trokamientos chikitikos', -'tog-hidepatrolled' => 'Eskonde los trokamientos surveyados', -'tog-newpageshidepatrolled' => 'Eskonde las hojas surveyadas en la lista de las hojas muevas', -'tog-extendwatchlist' => 'Anchea mi lista de eskojidas afín de àmostrar todos los trokamientos, no sólo los muevos', -'tog-usenewrc' => 'Usa el modo adelantado (JavaScript es menester)', -'tog-numberheadings' => 'Numerota los títůlos de una manera otomatika', -'tog-showtoolbar' => 'Àmostra el chibuk de aparatos (JavaScript es menester)', -'tog-editondblclick' => 'Troka los hojas en doble klik. (JavaScript es menester)', -'tog-editsection' => 'Ofre la possibilidad de trokar los kapítůlos usando el atamiento [troka]', -'tog-editsectiononrightclick' => 'Ofrir la possibbilidad de trocar los capítůlos; en pizando el botón derecho del ratón, cuando está encima de los títůlos de capítůlos (JavaScript es menesteroso)', -'tog-showtoc' => 'Amostrar el tabblo de contenidos (por las hojas que tienen más de 3 títůlos)', -'tog-rememberpassword' => 'Akodrár mis informasiones sobre ésta komputadóra', -'tog-editwidth' => 'Alargar la caxa de trocamiento para inchir el ekran entero', -'tog-watchcreations' => 'Ajustar las hojas que crií, a mi lista de escogidas', -'tog-watchdefault' => 'Ajustar las hojas que troquí, a mi lista de escogidas', -'tog-watchmoves' => 'Ajustar las hojas que taxireí, a mi lista de escogidas', -'tog-watchdeletion' => 'Ajustar las hojas que efassí, a mi lista de escogidas', -'tog-minordefault' => 'Va marcando todos los trocamientos como chiquiticos.', -'tog-previewontop' => 'Amostrar la prēvizibbilizasyón enriba de la caxa de ēddisyón', -'tog-previewonfirst' => 'Amostrar la prēvizibbilizasyón al primer trocamiento', -'tog-nocache' => 'No permeter a la kaxé de las hojas', -'tog-enotifwatchlistpages' => 'Embiarme un e-mail (una letra elektronika) cuando se troca una hoja que está en mi lista de escogidos', -'tog-enotifusertalkpages' => 'Embiarme un e-mail (una letra elektronika) cuando se troca mi hoja de diskusyón', -'tog-enotifminoredits' => 'También mandarme un e-mail (una letra elektronika) por los trocamientos chiquiticos de las hojas', -'tog-enotifrevealaddr' => 'Amostrar mi addresso de e-mail (letra elektronika) en los e-mailes de aviso', -'tog-shownumberswatching' => 'Amostrar el número de usadores que la cudian', -'tog-oldsig' => 'Prēvizibbilizasyón de la firma que ya egziste:', -'tog-fancysig' => 'Tratar la firma como si era vikiteksto (sin un link otomatik)', -'tog-externaleditor' => 'Usar un ēdditor de afuera (sólo por los sabericios, tu bilgisayar/orddênador tiene menester de arreglamientos especiales por esto)', -'tog-externaldiff' => "Usar un ''diff'' de afuera (sólo por los sabericios, tu bilgisayar/orddênador tiene menester de arreglamientos especiales por esto)", -'tog-ccmeonemails' => 'Las copias de las letras electrónicas que mandí a otros usuarios, ¡Mándamelas!', -'tog-diffonly' => 'No mostres el contenido de las hojas debaxo de las diferencias.', -'tog-showhiddencats' => 'Amostrár kategorías eskondidas', - -'underline-always' => 'Siempre', -'underline-never' => 'Nunka', +'tog-underline' => 'Suliñar los atamientos:', +'tog-highlightbroken' => 'Amostrar los artícůlos vazíos en colorado , (si no: este modo?).', +'tog-justify' => 'Arrimar los paraggrafos de dos vandas', +'tog-hideminor' => 'Esconder los trocamientos chiquiticos entre los trocamientos freskos', +'tog-hidepatrolled' => 'Esconder los trocamientos surveyados entre los trocamientos freskos', +'tog-newpageshidepatrolled' => 'Esconder las hojas surveyadas entre la lista de las hojas muevas', +'tog-extendwatchlist' => 'Anchar mi lista de akavidamiento afín de amostrar todos los trocamientos, no sólo los muevos', +'tog-usenewrc' => 'Usar el modo adelantado (JavaScript es menester)', +'tog-numberheadings' => 'Numerotar otomatika mente los títůlos de los capítůlos', +'tog-showtoolbar' => 'Amostrar el chibuk de aparatos (JavaScript es menester)', +'tog-editondblclick' => 'Trocar las hojas con doble klik (JavaScript es menester)', +'tog-editsection' => 'Ofrir la possibilidad de trocar los capítůlos gracias al atamiento [trocar]', +'tog-editsectiononrightclick' => 'Pueder trocar los capítůlos, en pizando el botón derecho del ratón encima del títůlo (JavaScript es menester)', +'tog-showtoc' => 'Amostrar el cuadro de contenidos (para las hojas que tienen más de 3 títůlos de capítůlos)', +'tog-rememberpassword' => 'Acordarse de mi nombre de usador y de mi kóddiche en este navigador (a lo más muńcho $1 {{PLURAL:$1|día|días}})', +'tog-watchcreations' => 'Akavidar las hojas que crîo', +'tog-watchdefault' => 'Akavidar las hojas que troco', +'tog-watchmoves' => 'Akavidar las hojas que taxireo', +'tog-watchdeletion' => 'Akavidar las hojas que efasso', +'tog-minordefault' => 'Ir marcando todos los trocamientos como chiquiticos', +'tog-previewontop' => 'Amostar el previsteo enriva el cuadro de trocamiento', +'tog-previewonfirst' => 'Amostar el previsteo al primer trocamiento', +'tog-nocache' => 'Desaktivar la kaxé de las hojas del navigador', +'tog-enotifwatchlistpages' => 'Mandarme una letral (e-mail) cada vez que trocan la una hoja de mi lista de akavidamiento', +'tog-enotifusertalkpages' => 'Mandarme una letral (e-mail) cuando mi hoja de diskusyón se troca', +'tog-enotifminoredits' => 'También mandarme una letral (e-mail) cuando i trocamientos chiquiticos acontecen en las hojas', +'tog-enotifrevealaddr' => 'Amostrar mi adresso de letral (e-mail) en las letrales de avizo', +'tog-shownumberswatching' => 'Amostrar el karar de usadores que están akavidando cada hoja', +'tog-oldsig' => 'Previsteo de la firma presente', +'tog-fancysig' => 'Tratar la firma como un vikiteksto (sin un atamiento otomatiko)', +'tog-externaleditor' => 'Ir usando un ēdditor esterno (sólo es para usadores adelantados; tiene menester de arreglamientos especiales en vuestro contador [http://www.mediawiki.org/wiki/Manual:External_editors Para saver más.])', +'tog-externaldiff' => 'Ir usando un comparador (diff) esterno (sólo es para usadores adelantados; tiene menester de arreglamientos especiales en vuestro contador [http://www.mediawiki.org/wiki/Manual:External_editors Para saver más.])', +'tog-showjumplinks' => 'Aktivar los atamientos de ayudo "Saltar a"', +'tog-uselivepreview' => 'Usar el "previsteo bivo" (JavaScript es menester) (eksperimental)', +'tog-forceeditsummary' => 'Avizarme cuando dexo el somaryo vazío', +'tog-watchlisthideown' => 'Esconder mis trocamientos en mi lista de akavidamiento', +'tog-watchlisthidebots' => 'Esconder trocamientos de bot en mi lista de akavidamiento', +'tog-watchlisthideminor' => 'Esconder trocamientos chiquiticos en mi lista de akavidamiento', +'tog-watchlisthideliu' => 'Esconder trocamientos de los usadores enrejistrados en mi lista de akavidamiento', +'tog-watchlisthideanons' => 'Esconder trocamientos de los usadores anōnimes en mi lista de akavidamiento', +'tog-watchlisthidepatrolled' => 'Esconder trocamientos surveyados en mi lista de akavidamiento', +'tog-ccmeonemails' => 'Mandarme copias de las letrales (e-mail) que mando a otros usadores', +'tog-diffonly' => 'No amostrar el contenido de la hoja debaxo las diffes (diferencias entre los trocamientos)', +'tog-showhiddencats' => 'Amostrar las katēggorías escondidas', +'tog-norollbackdiff' => 'No amostrar la diff doeśpués de aboltar', + +'underline-always' => 'Siempre', +'underline-never' => 'Nunca', +'underline-default' => 'Que dessidde el navigador', + +# Font style option in Special:Preferences +'editfont-style' => 'Modo de tipografía de la rējión de trocamiento', +'editfont-default' => 'Modo supozado del navigador', +'editfont-monospace' => 'Tipografía que cuvre lugar fikso', +'editfont-sansserif' => 'Tipografía sans-serif', +'editfont-serif' => 'Tipografía serif', # Dates 'sunday' => 'Aljhad', 'monday' => 'Lunes', 'tuesday' => 'Martes', 'wednesday' => 'Miércoles', -'thursday' => 'Jugüeves', +'thursday' => 'Juğeves', 'friday' => 'Viernes', -'saturday' => 'Xabbat', +'saturday' => 'Xabat', 'sun' => 'Alj', 'mon' => 'Lun', 'tue' => 'Mar', @@ -75,36 +245,36 @@ $messages = array( 'fri' => 'Vie', 'sat' => 'Xab', 'january' => 'Enero', -'february' => 'Febrero', +'february' => 'Fevrero', 'march' => 'Março', 'april' => 'Abril', 'may_long' => 'Mayo', 'june' => 'Junio', -'july' => 'Julio', +'july' => 'Jullo', 'august' => 'Agosto', 'september' => 'Setiembre', -'october' => 'Octubre', +'october' => 'Octuvre', 'november' => 'Noviembre', 'december' => 'Deziembre', -'january-gen' => 'de Januario', -'february-gen' => 'de Februario', -'march-gen' => 'de Março', -'april-gen' => 'de Avril', -'may-gen' => 'de Mayo', -'june-gen' => 'de Junio', -'july-gen' => 'de Julyo', -'august-gen' => 'de Agosto', -'september-gen' => 'de Septiembre', -'october-gen' => 'de Octubre', -'november-gen' => 'de Noviembre', -'december-gen' => 'de Diziembre', -'jan' => 'Jan', -'feb' => 'Feb', +'january-gen' => 'Enero', +'february-gen' => 'Fevrero', +'march-gen' => 'Março', +'april-gen' => 'Abril', +'may-gen' => 'Mayo', +'june-gen' => 'Junio', +'july-gen' => 'Jullo', +'august-gen' => 'Agosto', +'september-gen' => 'Setiembre', +'october-gen' => 'Octuvre', +'november-gen' => 'Noviembre', +'december-gen' => 'Deziembre', +'jan' => 'Ene', +'feb' => 'Fev', 'mar' => 'Mar', 'apr' => 'Abr', 'may' => 'May', 'jun' => 'Jun', -'jul' => 'Jul', +'jul' => 'Jull', 'aug' => 'Ago', 'sep' => 'Set', 'oct' => 'Oct', @@ -112,107 +282,116 @@ $messages = array( 'dec' => 'Dez', # Categories related messages -'pagecategories' => '{{PLURAL:$1|Categoría|Categorías}}', -'category_header' => 'Artícůlos en la kateggoría "$1"', -'subcategories' => 'Subcategorías', -'category-media-header' => 'Archivos multimedia en la kategoría "$1"', -'category-empty' => "''La kategoría no kontiene aktualmente ningún artikolo o archivo multimedia''", -'hidden-categories' => '{{PLURAL:$1|Categoría escondida|Categorías escondidas}}', -'hidden-category-category' => 'Categorías escondidas', -'category-subcat-count' => '{{PLURAL:$2|Esta categoría contiene solamente la categoría venidera.|Esta categoría contiene {{PLURAL:$1|las categorías venideras|$1 subcategorías venideras}}, de un total de $2 subcategorías.}}', -'category-article-count' => '{{PLURAL:$2|Esta categoría contiene solamente la hoja venidera.|{{PLURAL:$1|La hoja venidera apartiene|Las $1 hojas venideras apartienen}} a esta categoría, de un total de $2.}}', -'listingcontinuesabbrev' => 'cont.', +'pagecategories' => '{{PLURAL:$1|Katēggoría|Katēggorías}}', +'category_header' => 'Artícůlos en la katēggoría "$1"', +'subcategories' => 'Baxo-katēggorías', +'category-media-header' => 'Arxivos de multimedya en la katēggoría "$1"', +'category-empty' => "''Esta katēggoría oy día, no contiene ni artícůlos ni arxivos de multimedya''", +'hidden-categories' => '{{PLURAL:$1|Katēggoría escondida|Katēggorías escondidas}}', +'hidden-category-category' => 'Katēggorías escondidas', +'category-subcat-count' => '{{PLURAL:$2|Esta katēggoría contiene sólo una baxo-katēggoría:|Esta katēggoría contiene {{PLURAL:$1|esta baxo-katēggoría aquí abaxo|$1 baxo-katēggorías aquí abaxo}}, de un total de $2 baxo-katēggorías:}}', +'category-subcat-count-limited' => 'Esta katēggoría contiene {{PLURAL:$1|la baxo-katēggoría venidera|$1 baxo-katēggorías venideras}}.', +'category-article-count' => '{{PLURAL:$2|Esta katēggoría contiene sólo la hoja venidera.|{{PLURAL:$1|La hoja venidera apartiene|Las $1 hojas venideras apartienen}} a esta katēggoría, de un total de $2.}}', +'category-article-count-limited' => '{{PLURAL:$1|La hoja venidera apartiene|Las $1 hojas venideras apartienen}} a esta katēggoría.', +'category-file-count' => '{{PLURAL:$2|Esta katēggoría contiene sólo la dosya venidera.|{{PLURAL:$1|La dosya venidera apartiene|Las $1 dosyas venideras apartienen}} a esta katēggoría, de un total de $2.}}', +'category-file-count-limited' => '{{PLURAL:$1|La dosya venidera apartiene|Las $1 dosyas venideras apartienen}} a esta katēggoría.', +'listingcontinuesabbrev' => 'cont.', +'index-category' => 'Hojas arregladas en lista', +'noindex-category' => 'Hojas no arregladas en lista', + +'mainpagetext' => "'''MedyaViki ya se kureó con reuxitá.'''", +'mainpagedocfooter' => 'Konsulta la [http://meta.wikimedia.org/wiki/Ayudo:Contenido Guía de usador] para tomar enformasyones encima de como usar el lojikal viki. + +== En Empeçando == +* [http://www.mediawiki.org/wiki/Manual:Configuration_settings La lista de los arreglamientos de la konfiggurasyón] +* [http://www.mediawiki.org/wiki/Manual:FAQ/lad DDS de MedyaViki] +* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce La lista de las letrales (e-mail) de MedyaViki]', 'about' => 'Encima de', -'article' => 'Artícůlo', -'newwindow' => '(Se avre en una ventana nueva)', -'cancel' => 'Suprimir', -'moredotdotdot' => 'Mas...', +'article' => 'Artícůlo de contenido', +'newwindow' => '(Se avre en una mueva ventana)', +'cancel' => 'Anular', +'moredotdotdot' => 'Más...', 'mypage' => 'Mi hoja', 'mytalk' => 'Mi diskusyón', -'anontalk' => 'Diskusion para esta IP', -'navigation' => 'Passeo', -'and' => ' i', +'anontalk' => 'Diskusyón para este adresso de IP', +'navigation' => 'Navigación', +'and' => ' y', # Cologne Blue skin -'qbfind' => 'Topa', -'qbbrowse' => 'Navêga', -'qbedit' => 'Troca', -'qbpageoptions' => 'Opciones de la hoja', -'qbmyoptions' => 'Mis opsiones', -'qbspecialpages' => 'Pajinas espesiales', -'faq' => 'FAQ', -'faqpage' => 'Project:FAQ', +'qbfind' => 'Topar', +'qbbrowse' => 'Navigar', +'qbedit' => 'Trocar', +'qbpageoptions' => 'Esta hoja', +'qbpageinfo' => 'Enformasyón de hoja', +'qbmyoptions' => 'Mis hojas', +'qbspecialpages' => 'Hojas especiales', +'faq' => 'DDS', +'faqpage' => 'Project:DDS', # Vector skin -'vector-action-delete' => 'Efassa', -'vector-action-move' => 'Taxirea', -'vector-action-protect' => 'Guarda', -'vector-namespace-category' => 'Kateggoría', -'vector-namespace-help' => 'Hoja de ayudo', -'vector-namespace-image' => 'Dosya', -'vector-namespace-main' => 'Hoja', -'vector-namespace-media' => 'Hoja de multimedya', -'vector-namespace-mediawiki' => 'Noticia', -'vector-namespace-project' => 'Hoja de proyecto', -'vector-namespace-special' => 'Hoja especial', -'vector-namespace-talk' => 'Diskussión', -'vector-namespace-template' => 'Xabblón', -'vector-namespace-user' => 'Hoja de empleador', -'vector-view-create' => 'Cria', -'vector-view-edit' => 'Troca', -'vector-view-history' => 'Ve la istoria', -'vector-view-view' => 'Melda', -'vector-view-viewsource' => 'Ve su orijín', -'actions' => 'Acciones', -'namespaces' => 'Espacios de nombres', -'variants' => 'Variantes', +'vector-action-addsection' => 'Àjustar sujeto', +'vector-action-delete' => 'Efassar', +'vector-action-move' => 'Taxirear', +'vector-action-protect' => 'Guardar', +'vector-action-undelete' => 'Traër atrás', +'vector-action-unprotect' => 'No guardar', +'vector-simplesearch-preference' => 'Aktivar consejos de búsqueda adelantada (sólo pelejo Vector)', +'vector-view-create' => 'Crîar', +'vector-view-edit' => 'Trocar', +'vector-view-history' => 'Ver la îstoria', +'vector-view-view' => 'Meldar', +'vector-view-viewsource' => 'Ver su manadero', +'actions' => 'Acciones', +'namespaces' => 'Espacios de nombres', +'variants' => 'Variantes', 'errorpagetitle' => 'Yerro', 'returnto' => 'Tornar a $1.', 'tagline' => 'De {{SITENAME}}', 'help' => 'Ayudo', -'search' => 'Busca', +'search' => 'Búsqueda', 'searchbutton' => 'Busca', 'go' => 'Vate', 'searcharticle' => 'Vate', -'history' => 'La istoria de la hoja', -'history_short' => 'Istoria', -'info_short' => 'Enformación', -'printableversion' => 'Vista apropiada para imprimir', -'permalink' => 'Link mantenido', -'print' => 'Imprimír', -'edit' => 'Troca', -'create' => 'Cria', -'editthispage' => 'Troca esta hoja', -'create-this-page' => 'Cria esta hoja', -'delete' => 'Efassa', -'deletethispage' => 'Efassa esta hoja', -'undelete_short' => 'Abolta $1 {{PLURAL:$1|trocamientos|trocamientos}}', -'protect' => 'Abriga', -'protect_change' => 'Troca el abrigamiento', -'protectthispage' => 'Abriga esta hoja', -'unprotect' => 'Desabriga', -'unprotectthispage' => 'Desabriga esta hoja', -'newpage' => 'Hoja nueva', -'talkpage' => 'Diskute la hoja', +'history' => 'La îstoria de la hoja', +'history_short' => 'Îstoria', +'updatedmarker' => 'trocado desde mi visita de alcavo', +'info_short' => 'Enformasyón', +'printableversion' => 'Vista apropiada para emprimir', +'permalink' => 'Atamiento mantenido', +'print' => 'Emprimir', +'edit' => 'Trocar', +'create' => 'Crîar', +'editthispage' => 'Trocar esta hoja', +'create-this-page' => 'Crîar esta hoja', +'delete' => 'Efassar', +'deletethispage' => 'Efassar esta hoja', +'undelete_short' => 'Traër atrás $1 {{PLURAL:$1|trocamientos|trocamientos}}', +'protect' => 'Guardar', +'protect_change' => 'Trocar el guardadijo', +'protectthispage' => 'Guardar esta hoja', +'unprotect' => 'No guardar', +'unprotectthispage' => 'No guardar esta hoja', +'newpage' => 'Hoja mueva', +'talkpage' => 'Diskutir la hoja', 'talkpagelinktext' => 'Messaje', 'specialpage' => 'Hoja Especial', 'personaltools' => 'Aparatos personales', -'postcomment' => 'Ajusta un comentario', -'articlepage' => 'Ve el artícůlo', +'postcomment' => 'Capítůlo muevo', +'articlepage' => 'Ver el artícůlo de contenido', 'talk' => 'Diskusyón', -'views' => 'Vista', -'toolbox' => 'Caxa de Aparatos', -'userpage' => 'Ve la hoja del empleador', -'projectpage' => 'Mira la hoja del prodjekto', -'imagepage' => 'Mira la hoja de la dosya', -'mediawikipage' => 'Mostra la hoja de message', -'templatepage' => 'Ver la hoja del xabblón', +'views' => 'Vistas', +'toolbox' => 'Cuadro de Aparatos', +'userpage' => 'Ver la hoja del usador', +'projectpage' => 'Ver la hoja del projeto', +'imagepage' => 'Ver la hoja de la dosya', +'mediawikipage' => 'Ver la hoja de messaje', +'templatepage' => 'Ver la hoja del xablón', 'viewhelppage' => 'Ver la hoja de ayudo', -'categorypage' => 'Mostra la hoja de kateggoría', -'viewtalkpage' => 'Ver diskusion', -'otherlanguages' => 'En otras linguas', +'categorypage' => 'Ver la hoja de la katēggoría', +'viewtalkpage' => 'Ver la diskusyón', +'otherlanguages' => 'En otras lînguas', 'redirectedfrom' => '(Redirigido desde $1)', 'redirectpagesub' => 'Hoja redirigida', 'lastmodifiedat' => 'Esta hoja fue trocada por la última vez en $2, a las $1.', @@ -226,15 +405,15 @@ $messages = array( 'aboutpage' => 'Project:Encima de', 'copyright' => 'El contenido se puede topar debaxo de la $1', 'copyrightpage' => '{{ns:project}}:Derechos de autor', -'currentevents' => 'Aktualidad', -'currentevents-url' => 'Project:Aktualidad', -'disclaimers' => 'Rēfusamiento de responsabbilitá', +'currentevents' => 'Novedades', +'currentevents-url' => 'Project:Novedades', +'disclaimers' => 'Refuso de responsabbilitá', 'disclaimerpage' => 'Project:Rēfusamiento de responsabbilitá general', -'edithelp' => '¿Cómodo se la troca?', +'edithelp' => '¿Cómo se la troca?', 'edithelppage' => 'Help:Una hoja, ¿cómodo se la troca?', 'helppage' => 'Help:Contenidos', 'mainpage' => 'La Primera Hoja', -'mainpage-description' => 'La Hoja Primera', +'mainpage-description' => 'La Primera Hoja', 'policy-url' => 'Project:Politikas', 'portal' => 'Portal de la comunidad', 'portal-url' => 'Project:Portal de la comunidad', @@ -251,8 +430,9 @@ $messages = array( 'youhavenewmessagesmulti' => 'Tienes messajes nuevos en $1', 'editsection' => 'troca', 'editold' => 'trocar', +'viewsourceold' => 'Ver su manadero', 'editlink' => 'trocar', -'viewsourcelink' => 'Ve el origín', +'viewsourcelink' => 'Ver su manadero', 'editsectionhint' => 'Troca la parte: $1', 'toc' => 'Contenidos', 'showtoc' => 'Amostrar', @@ -300,7 +480,7 @@ Puede ser que contiene uno o más caracteres que no se pueden usar en los títul # Login and logout pages 'yourname' => 'Su nombre de usuario', 'yourpassword' => 'Parola', -'remembermypassword' => 'Quero que se me acorden entre sessiones.', +'remembermypassword' => 'Acórdate de mi entrada de usador en este bilgisayar/orddênador (por un maksimum de {{PLURAL:$1|día|días}})', 'login' => 'Entrar', 'nav-login-createaccount' => 'Entrar / Enrejjistrar', 'userlogin' => 'Entrar / Registrarse', @@ -310,6 +490,7 @@ Puede ser que contiene uno o más caracteres que no se pueden usar en los títul 'nologinlink' => 'Crea un cuento', 'createaccount' => 'Crea un nuevo cuento', 'gotaccount' => "¿Ya tienes un cuento? '''$1'''.", +'gotaccountlink' => 'Entrar', 'createaccountmail' => 'por una letra electrónica', 'userexists' => 'El nombre que entrates ya se usa. Si puede ser, escoge un otro nombre.', @@ -345,7 +526,7 @@ Si puede ser, escoge un otro nombre.', 'subject' => 'Tema/título:', 'minoredit' => 'Esta es una edición chiquitica', 'watchthis' => 'Cudia esta hoja', -'savearticle' => 'Enrejjistra la hoja', +'savearticle' => 'Enrejistra la hoja', 'preview' => 'Previsualizar', 'showpreview' => 'Mostrar la previsualización', 'showdiff' => 'Amostrar los trocamientos', @@ -365,6 +546,9 @@ Si venites aquí por yerro, torna a la hoja de antes.', Puedes [[Special:Search/{{PAGENAME}}|buscar el título de esta hoja]] en otras hojas, [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los registros], o [{{fullurl:{{FULLPAGENAME}}|action=edit}} trocar esta hoja].', +'noarticletext-nopermission' => 'No ay teksto oy día en esta hoja. +Puedes [[Special:Search/{{PAGENAME}}|buscar este títůlo de hoja]] en otras hojas, +o [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los rejistros relasyonados].', 'note' => "'''Nota:'''", 'previewnote' => "'¡Acórdate que esto es sólo una previsualización y daínda no se registró!'''", 'editing' => 'Trocando $1', @@ -380,6 +564,11 @@ o [{{fullurl:{{FULLPAGENAME}}|action=edit}} trocar esta hoja].', 'nocreate-loggedin' => 'No tienes el permisso de creas hojas nuevas.', 'permissionserrorstext-withaction' => 'No tienes el permiso para $2, por las {{PLURAL:$1|razón|razones}} venideras:', +# Parser/template warnings +'post-expand-template-inclusion-warning' => 'Aviso: El boy de los xablones en la hoja es muy grande. +Algunos xablones no serán incluidos.', +'post-expand-template-inclusion-category' => 'Hojas con sovrecarga de xablones', + # History pages 'viewpagelogs' => 'Ver los registros de esta hoja', 'currentrev-asof' => 'Versión de alcabo de $1', @@ -410,6 +599,8 @@ Leyenda: (act) = diferencias con la versión actual, 'revdelete-radio-unset' => 'No', 'revdelete-log' => 'Razón:', 'revdel-restore' => 'Troca la viźibbilidad', +'revdel-restore-deleted' => 'revisiones efassadas', +'revdel-restore-visible' => 'revisiones visibles', 'revdelete-content' => 'contenido', 'revdelete-reasonotherlist' => 'Otra razón', @@ -427,43 +618,54 @@ Leyenda: (act) = diferencias con la versión actual, 'editundo' => 'deshazer', # Search results -'searchresults' => 'Resultados de la búsqueda', -'searchresults-title' => 'Resultados de la búsqueda de «$1»', -'searchresulttext' => 'Para saber más encima de buscar en {{SITENAME}}, mira la [[{{MediaWiki:Helppage}}|{{int:help}}]].', -'searchsubtitle' => 'Buscates \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|todas las hojas que empeçan con "$1"]] {{int:pipe-separator}} [[Special:WhatLinksHere/$1|todas las hojas que dan link a «$1»]])', -'searchsubtitleinvalid' => "Buscates '''$1'''", -'notitlematches' => 'No se pudo topar en dingún título.', -'notextmatches' => 'No se pudo topar en dinguna hoja.', -'prevn' => '{{PLURAL:$1|$1}} de antes', -'nextn' => '{{PLURAL:$1|$1}} venideras', -'prevn-title' => '$1 {{PLURAL:$1|resultado|resultados}} de antes', -'nextn-title' => 'Venideros $1 {{PLURAL:$1|resultado|resultados}}', -'shown-title' => 'Mostra $1 {{PLURAL:$1|resultado|resultados}} por hoja', -'viewprevnext' => 'Ver ($1 {{int:pipe-separator}} $2) ($3).', -'searchhelp-url' => 'Help:Ayudo', -'searchprofile-everything' => 'Todo', -'searchprofile-advanced' => 'Adelantado', -'search-result-size' => '$1 ({{PLURAL:$2|1 biervo|$2 biervos}})', -'search-redirect' => '(rēdirijjado desde $1)', -'search-section' => '(seksyón $1)', -'search-suggest' => 'Quisites dezir: $1', -'search-interwiki-caption' => 'Proyectos hermanos', -'search-interwiki-default' => 'Los resultados de $1:', -'search-interwiki-more' => '(más)', -'search-mwsuggest-enabled' => 'con consejos', -'search-mwsuggest-disabled' => 'no ay consejos', -'searchall' => 'todos', -'nonefound' => "'''Nota''': Por defecto sólo se busca en algunos espacios de nombre. +'searchresults' => 'Resultados de la búsqueda', +'searchresults-title' => 'Resultados de la búsqueda de «$1»', +'searchresulttext' => 'Para saber más encima de buscar en {{SITENAME}}, mira la [[{{MediaWiki:Helppage}}|{{int:help}}]].', +'searchsubtitle' => 'Buscates \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|todas las hojas que empeçan con "$1"]] {{int:pipe-separator}} [[Special:WhatLinksHere/$1|todas las hojas que dan link a «$1»]])', +'searchsubtitleinvalid' => "Buscates '''$1'''", +'notitlematches' => 'No se pudo topar en dingún título.', +'notextmatches' => 'No se pudo topar en dinguna hoja.', +'prevn' => '{{PLURAL:$1|$1}} de antes', +'nextn' => '{{PLURAL:$1|$1}} venideras', +'prevn-title' => '$1 {{PLURAL:$1|resultado|resultados}} de antes', +'nextn-title' => 'Venideros $1 {{PLURAL:$1|resultado|resultados}}', +'shown-title' => 'Mostra $1 {{PLURAL:$1|resultado|resultados}} por hoja', +'viewprevnext' => 'Ver ($1 {{int:pipe-separator}} $2) ($3).', +'searchmenu-new' => "'''Crîar la hoja «[[:$1]]» en esta viki!'''", +'searchhelp-url' => 'Help:Ayudo', +'searchprofile-articles' => 'Hojas de contenido', +'searchprofile-project' => 'Hojas de ayudo y de projeto', +'searchprofile-images' => 'Multimedia', +'searchprofile-everything' => 'Todo', +'searchprofile-advanced' => 'Adelantado', +'searchprofile-articles-tooltip' => 'Buscar en $1', +'searchprofile-project-tooltip' => 'Buscar en $1', +'searchprofile-images-tooltip' => 'Buscar arxivos', +'searchprofile-everything-tooltip' => 'Buscar en todo el contenido (i hojas de diskusyón)', +'searchprofile-advanced-tooltip' => 'Buscar en espacios de nombres personalizados', +'search-result-size' => '$1 ({{PLURAL:$2|1 biervo|$2 biervos}})', +'search-redirect' => '(rēdirijjado desde $1)', +'search-section' => '(seksyón $1)', +'search-suggest' => 'Quisites dezir: $1', +'search-interwiki-caption' => 'Proyectos hermanos', +'search-interwiki-default' => 'Los resultados de $1:', +'search-interwiki-more' => '(más)', +'search-mwsuggest-enabled' => 'con consejos', +'search-mwsuggest-disabled' => 'no ay consejos', +'searchall' => 'todos', +'showingresultsheader' => "{{PLURAL:$5|Resultado '''$1''' de '''$3'''|Resultados '''$1-$2''' de '''$3'''}} para '''$4'''", +'nonefound' => "'''Nota''': Por defecto sólo se busca en algunos espacios de nombre. Proba a usar el prefixo ''all:'' para buscar en todo el contenido (incluyendo las hojas de diskussión, xabblones, etc.) o usa el espacio de nombre que queres como prefixo. También puedes usar el formulario de búsqueda adelantada que aparece abaxo. Las búsquedas producen más o munco a buscar biervos comunes como «la» o «de», que no están en el índice, o por especificar más de una palabra a buscar (sólo las hojas que contienen todos los términos de búsqueda van aparecer en el resultado).", -'powersearch' => 'Búsqueda adelantada', -'powersearch-legend' => 'Búsqueda adelantada', -'powersearch-ns' => 'Busca en los espacios de nombres:', -'powersearch-redir' => 'Mostra las redirecciones', -'powersearch-field' => 'Busca por', -'powersearch-toggleall' => 'Todos', -'search-external' => 'Búsqueda eksterna', +'search-nonefound' => 'No ay resultados que acumplan los criterios de la búsqueda.', +'powersearch' => 'Búsqueda adelantada', +'powersearch-legend' => 'Búsqueda adelantada', +'powersearch-ns' => 'Busca en los espacios de nombres:', +'powersearch-redir' => 'Mostra las redirecciones', +'powersearch-field' => 'Busca por', +'powersearch-toggleall' => 'Todos', +'search-external' => 'Búsqueda eksterna', # Preferences page 'preferences' => 'Preferencias', @@ -484,6 +686,7 @@ Las búsquedas producen más o munco a buscar biervos comunes como «la» o «de 'timezoneregion-europe' => 'Europa', 'youremail' => 'El adderesso de tu letra electrόnica:', 'username' => 'Nombre de usuario:', +'yourrealname' => 'Nombre verdadero:', 'yourlanguage' => 'Lingua:', 'email' => 'Letra electrónica', @@ -506,10 +709,11 @@ Las búsquedas producen más o munco a buscar biervos comunes como «la» o «de # Recent changes 'nchanges' => '$1 {{PLURAL:$1|trocamiento|trocamientos}}', -'recentchanges' => 'Trocamientos frescos', +'recentchanges' => 'Trocamientos freskos', 'recentchanges-legend' => 'Opciones encima de los trocamientos frescos', 'recentchangestext' => 'Perseguid en esta hoja, los trocamientos de alcabo realizados en la Viki.', 'recentchanges-feed-description' => 'Perseguir los trocamientos más nuevos en el viki en este feed.', +'recentchanges-label-minor' => 'Esta es un trocamiento chiquitico', 'rcnote' => "Debaxo {{PLURAL:$1|ay '''1''' trocamiento realizado|están los dal cabo '''$1''' trocamientos realizados}} en {{PLURAL:$2|el dal cabo día|los dal cabo '''$2''' días}}, hasta el $4, $5.", 'rclistfrom' => 'Mostra los trocamientos nuevos empeçando desde $1', 'rcshowhideminor' => '$1 trocamientos chiquiticos', @@ -541,6 +745,7 @@ Las hojas en tu [[Special:Watchlist|lista de escogidas]] son escritas '''gordas' # Upload 'upload' => 'Cargar una dosya', 'uploadlogpage' => 'Subidas de arxivos', +'filedesc' => 'Somario', 'uploadedimage' => 'subió «[[$1]]»', # Special:ListFiles @@ -561,10 +766,12 @@ Las hojas en tu [[Special:Watchlist|lista de escogidas]] son escritas '''gordas' 'imagelinks' => 'Linkes al arxivo multimedia', 'linkstoimage' => '{{PLURAL:$1|La hoja venidera da link|Las hojas venideras dan link}} a este arxivo:', 'sharedupload' => 'Este arxivo es de $1 i puede ser usado por otros proyectos.', +'sharedupload-desc-here' => 'Esta hoja es de $1 y puede ser usado por otros projetos. +La descripción en su [$2 hoja de descripción del arxivo] está amostrada debaxo.', 'uploadnewversion-linktext' => 'Subir una nueva versión de este arxivo', # Random page -'randompage' => 'Página por ventura', +'randompage' => 'Kualunke hoja', # Statistics 'statistics' => 'Estatísticas', @@ -619,8 +826,7 @@ Las hojas en tu [[Special:Watchlist|lista de escogidas]] son escritas '''gordas' # Watchlist 'watchlist' => 'Mi lista de escogidas', -'mywatchlist' => 'Mi lista de escogidas', -'watchlistfor' => "(para '''$1''')", +'mywatchlist' => 'Mi lista de akavidamientos', 'addedwatch' => 'Ajustado a la lista de escogidas', 'addedwatchtext' => "La hoja «[[:$1]]» fue ajustada a tu [[Special:Watchlist|lista de escogidas]]. Los trocamientos venideros en esta hoja i en tu hoja de diskussión associada se van indicar aí, i la hoja va aparecer '''gordo''' en la hoja de [[Special:RecentChanges|trocamientos freskos]] para hazerla más kolay de detektar. @@ -686,6 +892,7 @@ A continuación se mostran las opciones actuales de la hoja '''$1''':", # Undelete 'undeletelink' => 've/restora', +'undeleteviewlink' => 'Ver', 'undeletedarticle' => 'restoró «[[$1]]»', # Namespace form on various pages @@ -728,7 +935,7 @@ A continuación se mostran las opciones actuales de la hoja '''$1''':", # Block/unblock 'blockip' => 'Bloquear usuario', 'ipboptions' => '2 oras:2 hours,1 día:1 day,3 días:3 days,1 semana:1 week,2 semanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 año:1 year,para siempre:infinite', -'ipblocklist' => 'Lista de direcciones IP y nombres de usuario bloqueadas', +'ipblocklist' => 'Usadores bloqueados', 'blocklink' => 'Bloquea', 'unblocklink' => 'quita el bloqueo', 'change-blocklink' => 'troca el bloqueo', @@ -768,8 +975,8 @@ Si puede ser, escoge otro nombre.', 'talkexists' => 'La hoja fue renombrada con reuxito, ma la diskussión no se pudo renombrar porque ya egziste una en el título nuevo. Si puede ser, házelo manualmente.', 'movedto' => 'renombrado a', 'movetalk' => 'Renombrar la hoja de diskussión también, si es possible.', -'1movedto2' => 'El nuevo nombre de la hoja [[$1]]; agora es [[$2]]', -'1movedto2_redir' => 'El títůlo [[$1]] fue reddireksyonado a la hoja [[$2]]', +'1movedto2' => 'El muevo nombre de la hoja [[$1]]; ya es [[$2]]', +'1movedto2_redir' => '[[$1]] fue taxireado a [[$2]] sovre una direksión', 'movelogpage' => 'Registro de traslados', 'movereason' => 'Razón:', 'revertmove' => 'abolta', @@ -808,6 +1015,7 @@ Si puede ser, usa el botón de prēviźualiźasyón antes de enrejjistrarla.', 'tooltip-search' => 'Busca en {{SITENAME}}', 'tooltip-search-go' => 'Si ay una hoja con este nombre egzakto, vate allá.', 'tooltip-search-fulltext' => 'Busca este teksto en las hojas', +'tooltip-p-logo' => 'Visita la Primera Hoja', 'tooltip-n-mainpage' => 'Torna a la Hoja Primera', 'tooltip-n-mainpage-description' => 'Visita la Primera Hoja', 'tooltip-n-portal' => 'Encima del prodjekto, ¿qué se puede hazer i ánde topar todo?', @@ -841,6 +1049,7 @@ Si puede ser, usa el botón de prēviźualiźasyón antes de enrejjistrarla.', 'tooltip-rollback' => '«Aboltar» abolta todas los trocamientos del empleador de alcabo solo klikando una vez.', 'tooltip-undo' => '«Deshazer» revierte la edición seleccionada y avre la hoja de edición en el modo de previsualización. Permite ajustar una razón al resumen de edición.', +'tooltip-summary' => 'Entrar un somaryo curto', # Attribution 'anonymous' => '{{PLURAL:$1|Uzuario anonimo|Uzuarios anonimos}} de {{SITENAME}}', @@ -850,9 +1059,9 @@ Permite ajustar una razón al resumen de edición.', 'nextdiff' => 'Edición más nueva →', # Media information -'file-info-size' => '($1 × $2 píkseles; boy del arxivo: $3; tipo MIME: $4)', +'file-info-size' => '$1 × $2 píkseles; boy del arxivo: $3; tipo MIME: $4', 'file-nohires' => 'No disponible a mayor resolución.', -'svg-long-desc' => '(arxivo SVG, nominalmente $1 × $2 píkseles, boy del arxivo: $3)', +'svg-long-desc' => 'arxivo SVG, nominalmente $1 × $2 píkseles, boy del arxivo: $3', 'show-big-image' => 'Resolución original', 'show-big-image-thumb' => 'Boy de esta vista previa: $1 × $2 píkseles', @@ -952,4 +1161,7 @@ Los otros campos se van a guardar por defecto. # Special:SpecialPages 'specialpages' => 'Hojas especiales', +# Special:Tags +'tag-filter' => 'Filtro de [[Special:Tags|etiquetas]]:', + ); diff --git a/languages/messages/MessagesLb.php b/languages/messages/MessagesLb.php index 46a16481..329e8c96 100644 --- a/languages/messages/MessagesLb.php +++ b/languages/messages/MessagesLb.php @@ -9,6 +9,7 @@ * * @author Kaffi * @author Les Meloures + * @author Purodha * @author Reedy * @author Robby * @author Urhixidur @@ -42,101 +43,123 @@ $namespaceAliases = array( ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'Duebel Viruleedungen' ), - 'BrokenRedirects' => array( 'Futtis Viruleedungen' ), + 'DoubleRedirects' => array( 'Duebel_Viruleedungen' ), + 'BrokenRedirects' => array( 'Futtis_Viruleedungen' ), 'Disambiguations' => array( 'Homonymie' ), 'Userlogin' => array( 'Umellen' ), 'Userlogout' => array( 'Ofmellen' ), - 'CreateAccount' => array( 'Benotzerkont opmaachen' ), + 'CreateAccount' => array( 'Benotzerkont_opmaachen' ), 'Preferences' => array( 'Astellungen' ), 'Watchlist' => array( 'Iwwerwaachungslëscht' ), - 'Recentchanges' => array( 'Rezent Ännerungen' ), + 'Recentchanges' => array( 'Rezent_Ännerungen' ), 'Upload' => array( 'Eroplueden' ), 'Listfiles' => array( 'Billerlëscht' ), - 'Newimages' => array( 'Nei Biller' ), - 'Listusers' => array( 'Lëscht vun de Benotzer' ), - 'Listgrouprights' => array( 'Lëscht vun de Grupperechter' ), + 'Newimages' => array( 'Nei_Biller' ), + 'Listusers' => array( 'Lëscht_vun_de_Benotzer' ), + 'Listgrouprights' => array( 'Lëscht_vun_de_Grupperechter' ), 'Statistics' => array( 'Statistik' ), - 'Randompage' => array( 'Zoufälleg Säit' ), + 'Randompage' => array( 'Zoufälleg_Säit' ), 'Lonelypages' => array( 'Weesesäiten' ), - 'Uncategorizedpages' => array( 'Säiten ouni Kategorie' ), - 'Uncategorizedcategories' => array( 'Kategorien ouni Kategorie' ), - 'Uncategorizedimages' => array( 'Biller ouni Kategorie' ), - 'Uncategorizedtemplates' => array( 'Schablounen ouni Kategorie' ), - 'Unusedcategories' => array( 'Onbenotze Kategorien' ), - 'Unusedimages' => array( 'Onbenotzte Biller' ), - 'Wantedpages' => array( 'Gewënschte Säiten' ), - 'Wantedcategories' => array( 'Gewënschte Kategorien' ), - 'Wantedfiles' => array( 'Gewënschte Fichieren' ), - 'Wantedtemplates' => array( 'Gewënschte Schablounen' ), - 'Mostlinked' => array( 'Dacks verlinkte Säiten' ), - 'Mostlinkedcategories' => array( 'Dacks benotzte Kategorien' ), - 'Mostlinkedtemplates' => array( 'Dacks benotzte Schablounen' ), - 'Mostimages' => array( 'Dacks benotzte Biller' ), - 'Mostcategories' => array( 'Säite mat de meeschte Kategorien' ), - 'Mostrevisions' => array( 'Säite mat de meeschten Ännerungen' ), - 'Fewestrevisions' => array( 'Säite mat de mannsten Ännerungen' ), - 'Shortpages' => array( 'Kuerz Säiten' ), - 'Longpages' => array( 'Laang Säiten' ), - 'Newpages' => array( 'Nei Säiten' ), - 'Ancientpages' => array( 'Al Säiten' ), + 'Uncategorizedpages' => array( 'Säiten_ouni_Kategorie' ), + 'Uncategorizedcategories' => array( 'Kategorien_ouni_Kategorie' ), + 'Uncategorizedimages' => array( 'Biller_ouni_Kategorie' ), + 'Uncategorizedtemplates' => array( 'Schablounen_ouni_Kategorie' ), + 'Unusedcategories' => array( 'Onbenotze_Kategorien' ), + 'Unusedimages' => array( 'Onbenotzte_Biller' ), + 'Wantedpages' => array( 'Gewënschte_Säiten' ), + 'Wantedcategories' => array( 'Gewënschte_Kategorien' ), + 'Wantedfiles' => array( 'Gewënschte_Fichieren' ), + 'Wantedtemplates' => array( 'Gewënschte_Schablounen' ), + 'Mostlinked' => array( 'Dacks_verlinkte_Säiten' ), + 'Mostlinkedcategories' => array( 'Dacks_benotzte_Kategorien' ), + 'Mostlinkedtemplates' => array( 'Dacks_benotzte_Schablounen' ), + 'Mostimages' => array( 'Dacks_benotzte_Biller' ), + 'Mostcategories' => array( 'Säite_mat_de_meeschte_Kategorien' ), + 'Mostrevisions' => array( 'Säite_mat_de_meeschten_Ännerungen' ), + 'Fewestrevisions' => array( 'Säite_mat_de_mannsten_Ännerungen' ), + 'Shortpages' => array( 'Kuerz_Säiten' ), + 'Longpages' => array( 'Laang_Säiten' ), + 'Newpages' => array( 'Nei_Säiten' ), + 'Ancientpages' => array( 'Al_Säiten' ), 'Deadendpages' => array( 'Sakgaasse-Säiten' ), - 'Protectedpages' => array( 'Protegéiert Säiten' ), - 'Protectedtitles' => array( 'Gespaarte Säiten' ), - 'Allpages' => array( 'All Säiten' ), + 'Protectedpages' => array( 'Protegéiert_Säiten' ), + 'Protectedtitles' => array( 'Gespaarte_Säiten' ), + 'Allpages' => array( 'All_Säiten' ), 'Prefixindex' => array( 'Indexsich' ), - 'Ipblocklist' => array( 'Lëscht vu gespaarten IPen a Benotzer' ), + 'Ipblocklist' => array( 'Lëscht_vu_gespaarten_IPen_a_Benotzer' ), + 'Unblock' => array( 'Spär_ophiewen' ), 'Specialpages' => array( 'Spezialsäiten' ), 'Contributions' => array( 'Kontributiounen' ), - 'Emailuser' => array( 'Dësem Benotzer eng E-Mail schécken' ), - 'Confirmemail' => array( 'E-Mail confirméieren' ), - 'Whatlinkshere' => array( 'Linken op dës Säit' ), - 'Recentchangeslinked' => array( 'Ännerungen op verlinkte Säiten' ), - 'Movepage' => array( 'Säit réckelen' ), - 'Blockme' => array( 'Mech spären' ), - 'Booksources' => array( 'Bicher mat hirer ISBN sichen' ), + 'Emailuser' => array( 'Dësem_Benotzer_eng_E-Mail_schécken' ), + 'Confirmemail' => array( 'E-Mail_confirméieren' ), + 'Whatlinkshere' => array( 'Linken_op_dës_Säit' ), + 'Recentchangeslinked' => array( 'Ännerungen_op_verlinkte_Säiten' ), + 'Movepage' => array( 'Säit_réckelen' ), + 'Blockme' => array( 'Mech_spären' ), + 'Booksources' => array( 'Bicher_mat_hirer_ISBN_sichen' ), 'Categories' => array( 'Kategorien' ), 'Export' => array( 'Exportéieren' ), 'Version' => array( 'Versioun' ), - 'Allmessages' => array( 'All Systemmessagen' ), + 'Allmessages' => array( 'All_Systemmessagen' ), 'Log' => array( 'Logbicher' ), 'Blockip' => array( 'Spären' ), 'Undelete' => array( 'Restauréieren' ), 'Import' => array( 'Importéieren' ), - 'Lockdb' => array( 'Datebank spären' ), - 'Unlockdb' => array( 'Spär vun der Datebank ophiewen' ), + 'Lockdb' => array( 'Datebank_spären' ), + 'Unlockdb' => array( 'Spär_vun_der_Datebank_ophiewen' ), 'Userrights' => array( 'Benotzerrechter' ), - 'MIMEsearch' => array( 'Sich no MIME-Zorten' ), - 'FileDuplicateSearch' => array( 'Sich no duebele Fichieren' ), - 'Unwatchedpages' => array( 'Säiten déi net iwwerwaacht ginn' ), + 'MIMEsearch' => array( 'Sich_no_MIME-Zorten' ), + 'FileDuplicateSearch' => array( 'Sich_no_duebele_Fichieren' ), + 'Unwatchedpages' => array( 'Säiten_déi_net_iwwerwaacht_ginn' ), 'Listredirects' => array( 'Viruleedungen' ), - 'Revisiondelete' => array( 'Versioun läschen' ), - 'Unusedtemplates' => array( 'Onbenotzte Schablounen' ), - 'Randomredirect' => array( 'Zoufälleg Viruleedung' ), - 'Mypage' => array( 'Meng Benotzersäit' ), - 'Mytalk' => array( 'Meng Diskussiounssäit' ), - 'Mycontributions' => array( 'Meng Kontributiounen' ), - 'Listadmins' => array( 'Lëscht vun den Administrateuren' ), + 'Revisiondelete' => array( 'Versioun_läschen' ), + 'Unusedtemplates' => array( 'Onbenotzte_Schablounen' ), + 'Randomredirect' => array( 'Zoufälleg_Viruleedung' ), + 'Mypage' => array( 'Meng_Benotzersäit' ), + 'Mytalk' => array( 'Meng_Diskussiounssäit' ), + 'Mycontributions' => array( 'Meng_Kontributiounen' ), + 'Myuploads' => array( 'Meng_eropgeluede_Fichieren' ), + 'PermanentLink' => array( 'Permanente_Link' ), + 'Listadmins' => array( 'Lëscht_vun_den_Administrateuren' ), 'Listbots' => array( 'Botten' ), - 'Popularpages' => array( 'Beléifste Säiten' ), + 'Popularpages' => array( 'Beléifste_Säiten' ), 'Search' => array( 'Sichen' ), - 'Resetpass' => array( 'Passwuert zrécksetzen' ), - 'Withoutinterwiki' => array( 'Säiten ouni Interwiki-Linken' ), - 'MergeHistory' => array( 'Versiounen zesummeleeën' ), - 'Filepath' => array( 'Pad bäi de Fichier' ), - 'Invalidateemail' => array( 'E-Mailadress net confirméieren' ), - 'Blankpage' => array( 'Eidel Säit' ), + 'Resetpass' => array( 'Passwuert_zrécksetzen' ), + 'Withoutinterwiki' => array( 'Säiten_ouni_Interwiki-Linken' ), + 'MergeHistory' => array( 'Versiounen_zesummeleeën' ), + 'Filepath' => array( 'Pad_bäi_de_Fichier' ), + 'Invalidateemail' => array( 'E-Mailadress_net_confirméieren' ), + 'Blankpage' => array( 'Eidel_Säit' ), 'LinkSearch' => array( 'Weblink-Sich' ), - 'DeletedContributions' => array( 'Geläschte Kontributiounen' ), + 'DeletedContributions' => array( 'Geläschte_Kontributiounen' ), 'Tags' => array( 'Taggen' ), - 'Activeusers' => array( 'Aktiv Benotzer' ), + 'Activeusers' => array( 'Aktiv_Benotzer' ), + 'ComparePages' => array( 'Säite_vergkäichen' ), + 'Badtitle' => array( 'Net_valabelen_Titel' ), + 'DisableAccount' => array( 'Benotzerkont_ausschalten' ), ); $magicWords = array( + 'numberofarticles' => array( '1', 'Artikelen', 'ARTIKELANZAHL', 'NUMBEROFARTICLES' ), + 'numberoffiles' => array( '1', 'Fichieren', 'DATEIANZAHL', 'NUMBEROFFILES' ), + 'numberofusers' => array( '1', 'Benotzerzuel', 'BENUTZERANZAHL', 'NUMBEROFUSERS' ), + 'numberofactiveusers' => array( '1', 'Aktiv_Benotzer', 'AKTIVE_BENUTZER', 'NUMBEROFACTIVEUSERS' ), + 'pagename' => array( '1', 'Säitennumm', 'SEITENNAME', 'PAGENAME' ), + 'namespace' => array( '1', 'Nummraum', 'NAMENSRAUM', 'NAMESPACE' ), + 'subjectspace' => array( '1', 'Haaptnummraum', 'HAUPTNAMENSRAUM', 'SUBJECTSPACE', 'ARTICLESPACE' ), + 'subjectpagename' => array( '1', 'Haaptsäit', 'HAUPTSEITE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ), 'img_right' => array( '1', 'riets', 'rechts', 'right' ), 'img_left' => array( '1', 'lénks', 'links', 'left' ), + 'img_none' => array( '1', 'ouni', 'ohne', 'none' ), 'img_center' => array( '1', 'zentréiert', 'zentriert', 'center', 'centre' ), + 'img_framed' => array( '1', 'gerummt', 'gerahmt', 'framed', 'enframed', 'frame' ), + 'img_frameless' => array( '1', 'net_gerummt', 'rahmenlos', 'frameless' ), 'img_border' => array( '1', 'bord', 'rand', 'border' ), + 'grammar' => array( '0', 'GRAMMAIRE', 'GRAMMATIK:', 'GRAMMAR:' ), + 'plural' => array( '0', 'PLURAL', 'PLURAL:' ), + 'formatnum' => array( '0', 'ZUELEFORMAT', 'ZAHLENFORMAT', 'FORMATNUM' ), + 'special' => array( '0', 'spezial', 'special' ), + 'hiddencat' => array( '1', '__VERSTOPPTE_KATEGORIE__', '__VERSTECKTE_KATEGORIE__', '__WARTUNGSKATEGORIE__', '__HIDDENCAT__' ), ); $messages = array( @@ -155,8 +178,7 @@ $messages = array( 'tog-editsection' => "Linke fir d'Ännere vun eenzelnen Abschnitter weisen", 'tog-editsectiononrightclick' => 'Eenzel Abschnitter mat Rietsklick änneren (JavaScript)', 'tog-showtoc' => 'Inhaltsverzeechnes weise bei Säite mat méi wéi dräi Iwwerschrëften', -'tog-rememberpassword' => 'Mäi Passwuert op dësem Computer verhalen', -'tog-editwidth' => 'Verännerungskëscht iwwer déi ganz Breet vum Ecran weisen', +'tog-rememberpassword' => 'Meng Umeldung mat dësem Browser(fir maximal $1 {{PLURAL:$1|Dag|Deeg}}) verhalen', 'tog-watchcreations' => 'Säiten déi ech nei uleeën automatesch op meng Iwwerwaachungslëscht setzen', 'tog-watchdefault' => 'Säiten déi ech änneren op meng Iwwerwaachungslëscht setzen', 'tog-watchmoves' => 'Säiten déi ech réckelen automatesch op meng Iwwerwaachungslëscht setzen', @@ -302,31 +324,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Sujet derbäisetzen', -'vector-action-delete' => 'Läschen', -'vector-action-move' => 'Réckelen', -'vector-action-protect' => 'Spären', -'vector-action-undelete' => 'Restauréieren', -'vector-action-unprotect' => 'Spär ophiewen', -'vector-namespace-category' => 'Kategorie', -'vector-namespace-help' => 'Hëllefssäit', -'vector-namespace-image' => 'Fichier', -'vector-namespace-main' => 'Säit', -'vector-namespace-media' => 'Mediesäit', -'vector-namespace-mediawiki' => 'Message', -'vector-namespace-project' => 'Projetssäit', -'vector-namespace-special' => 'Spezialsäit', -'vector-namespace-talk' => 'Diskussioun', -'vector-namespace-template' => 'Schabloun', -'vector-namespace-user' => 'Benotzersäit', -'vector-view-create' => 'Uleeën', -'vector-view-edit' => 'Änneren', -'vector-view-history' => 'Versioune weisen', -'vector-view-view' => 'Liesen', -'vector-view-viewsource' => 'Quellcode weisen', -'actions' => 'Aktiounen', -'namespaces' => 'Nummraim', -'variants' => 'Varianten', +'vector-action-addsection' => 'Sujet derbäisetzen', +'vector-action-delete' => 'Läschen', +'vector-action-move' => 'Réckelen', +'vector-action-protect' => 'Spären', +'vector-action-undelete' => 'Restauréieren', +'vector-action-unprotect' => 'Spär ophiewen', +'vector-simplesearch-preference' => 'Verbessert Sichvirschléi aktiviéieren (nëmme beim Ausgesinn Vector)', +'vector-view-create' => 'Uleeën', +'vector-view-edit' => 'Änneren', +'vector-view-history' => 'Versioune weisen', +'vector-view-view' => 'Liesen', +'vector-view-viewsource' => 'Quellcode weisen', +'actions' => 'Aktiounen', +'namespaces' => 'Nummraim', +'variants' => 'Varianten', 'errorpagetitle' => 'Feeler', 'returnto' => 'Zréck op $1.', @@ -387,6 +399,9 @@ Zevill Benotzer versichen dës Säit ze gesinn. Waart w.e.g. e bëssen ier Dir versicht dës Säit nach emol opzeruffen. $1", +'pool-timeout' => "Timeout bis d'Spär opgehuewen ass", +'pool-queuefull' => 'Pool-Queue ass voll', +'pool-errorunknown' => 'Onbekannte Feeler', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Iwwer {{SITENAME}}', @@ -549,7 +564,8 @@ Denkt drun, Är [[Special:Preferences|{{SITENAME}}-Astellungen]] unzepassen.', 'yourname' => 'Benotzernumm:', 'yourpassword' => 'Passwuert:', 'yourpasswordagain' => 'Passwuert nach eemol antippen:', -'remembermypassword' => 'Meng Umeldung op dësem Computer verhalen', +'remembermypassword' => 'Meng Umeldung op dësem Computer (fir maximal $1 {{PLURAL:$1|Dag|Deeg}}) verhalen', +'securelogin-stick-https' => 'Nom Umelle mat HTTPS verbonn bleiwen', 'yourdomainname' => 'Ären Domain', 'externaldberror' => 'Entweder ass e Feeler bei der externer Authentifizéierung geschitt, oder Dir däerft Ären externe Benotzerkont net aktualiséieren.', 'login' => 'Umellen', @@ -566,6 +582,7 @@ Denkt drun, Är [[Special:Preferences|{{SITENAME}}-Astellungen]] unzepassen.', 'gotaccount' => "Dir hutt schonn e Benotzerkont? '''$1'''.", 'gotaccountlink' => 'Umellen', 'createaccountmail' => 'Via E-Mail', +'createaccountreason' => 'Grond:', 'badretype' => 'Är Passwierder stëmmen net iwwerdeneen.', 'userexists' => 'Dëse Benotzernumm gëtt scho benotzt. Sicht Iech een anere Benotzernumm.', @@ -589,6 +606,7 @@ Kuckt w.e.g. op d\'Schreifweis richteg ass, oder [[Special:UserLogin/signup|maac 'wrongpasswordempty' => "D'Passwuert dat Dir aginn hutt war eidel. Probéiert w.e.g. nach eng Kéier.", 'passwordtooshort' => 'Passwierder musse mindestens {{PLURAL:$1|1 Zeeche|$1 Zeeche}} laang sinn.', 'password-name-match' => 'Äert Passwuert muss verschidde vun Ärem Benotzernumm sinn.', +'password-login-forbidden' => "D'Benotze vun dësem Benotzernumm a Passwuert gouf verbueden.", 'mailmypassword' => 'Neit Passwuert per E-Mail kréien', 'passwordremindertitle' => 'Neit Passwuert fir ee {{SITENAME}}-Benotzerkont', 'passwordremindertext' => 'Iergendeen (waarscheinlech Dir, mat der IP-Adress $1) huet en neit Passwuert fir {{SITENAME}} ($4) gefrot. Een temporäert Passwuert fir de Benotzer $2 gouf ugeluecht an et ass: $3. Wann et dat ass, wat Dir wollt, da sollt Dir Iech elo aloggen an en neit Passwuert eraussichen. Äert temporäert Passwuert leeft a(n) {{PLURAL:$5|engem Dag| $5 Deeg}} of. @@ -626,6 +644,9 @@ Waart w.e.g. ier Dir et nach eng Kéier versicht.", 'loginlanguagelabel' => 'Sprooch: $1', 'suspicious-userlogout' => 'Är Ufro fir Iech auszeloggen gouf refuséiert well et esou ausgesäit wéi wann se vun engem Futtise Browser oder Proxy-Tëschespäicher kënnt.', +# E-mail sending +'php-mail-error-unknown' => 'Onbekannte Feeler an der PHP-Mail-Fonctioun', + # Password reset dialog 'resetpass' => 'Passwuert änneren', 'resetpass_announce' => 'Dir sidd mat engem temporären , per E-Mail geschéckte Code ageloggt. @@ -678,9 +699,11 @@ Vläicht hutt Dir Äert Passwuert scho geännert oder en neit temporäert Passwu 'showlivepreview' => 'Live-Kucken ouni ofzespäicheren', 'showdiff' => 'Weis Ännerungen', 'anoneditwarning' => 'Dir sidd net ageloggt. Dowéinst gëtt amplaz vun engem Benotzernumm Är IP Adress am Historique vun dëser Säit gespäichert.', +'anonpreviewwarning' => "''Dir sidd net ageloggt. Wann Dir ofspäichert gëtt Är IP-Adress an der Lëscht vun de Versioune vun dëser Säit enregistréiert.''", 'missingsummary' => "'''Erënnerung:''' Dir hutt kee Resumé aginn. Wann Dir nachemol op \"Säit ofspäicheren\" klickt, gëtt är Ännerung ouni Resumé ofgespäichert.", 'missingcommenttext' => 'Gitt w.e.g. eng Bemierkung an.', -'missingcommentheader' => "'''OPGEPASST:''' Dir hutt keen Titel/Sujet fir dës Bemierkung aginn. Wann Dir nach en Kéier op \"Späicheren\" klickt da gëtt Är Ännerung ouni Titel ofgespäichert.", +'missingcommentheader' => "'''Denkt drun:''' Dir hutt keen Titel/Sujet fir dës Bemierkung aginn. +Wann Dir nach en Kéier op \"{{int:savearticle}}\" klickt da gëtt Är Ännerung ouni Titel gespäichert.", 'summary-preview' => 'Resumé kucken ouni ofzespäicheren:', 'subject-preview' => 'Sujet/Iwwerschrëft kucken:', 'blockedtitle' => 'Benotzer ass gespaart', @@ -752,8 +775,12 @@ Déi lescht Entrée am Logbuch vun de Späre steet als Referenz hei drënner:', 'usercsspreview' => "'''Bedenkt: Dir kuckt just är Benotzer CSS. Si gouf nach net gespäichert!'''", 'userjspreview' => "'''Denkt drun datt Dir äre Javascript nëmmen test, nach ass näischt gespäichert!'''", +'sitecsspreview' => "'''Denkt drun datt Dir dësen CSS just kuckt. +E gouf nach net gespäichert!'''", +'sitejspreview' => "'''Denkt drun datt Dir dëse JavaScript-Code just kuckt. +E gouf nach net gespäichert!'''", 'userinvalidcssjstitle' => "'''Opgepasst:''' Et gëtt keen Ausgesinn (skin) \"\$1\". -Denkt drun datt eegen .css an .js Säiten e kleng geschriwwenen Titel benotzen, z. Bsp. {{ns:user}}:Foo/monobook.css am Géigesaz zu {{ns:user}}:Foo/Monobook.css.", +Denkt drun datt eegen .css an .js Säiten e kleng geschriwwenen Titel benotzen, z. Bsp. {{ns:user}}:Foo/vector.css am Géigesaz zu {{ns:user}}:Foo/Vector.css.", 'updated' => '(Geännert)', 'note' => "'''Notiz:'''", 'previewnote' => "'''Dëst ass nëmmen eng net gespäichert Versioun; d'Ännerunge sinn nach net gespäichert!'''", @@ -790,9 +817,6 @@ Dir verspriecht ausserdeem datt Dir dësen Text selwer verfaasst hutt, oder aus '''DROT KEE COPYRECHTLECH GESCHÜTZTE CONTENU OUNI ERLAABNES AN!'''", 'copyrightwarning2' => "W.e.g. notéiert datt all Kontributiounen op {{SITENAME}} vun anere Benotzer verännert oder geläscht kënne ginn. Wann dir dat net wëllt, da setzt näischt heihinner.
    Dir verspriecht ausserdeem datt dir dësen Text selwer verfaasst hutt, oder aus dem Domaine public oder anere fräie Quelle kopéiert hutt. (cf. $1 fir méi Detailler). '''DROT KEE COPYRECHTLECH GESCHÜTZTE CONTENU AN!'''", -'longpagewarning' => "'''WARNUNG: Dës Säit ass $1 kB grouss; verschidde Browser kéinte Problemer hunn, Säiten ze verschaffen, déi méi grouss wéi 32 kB sinn. - -Iwwerleet w.e.g., ob eng Opdeelung vun der Säit a méi kleng Abschnitter méiglich ass.'''", 'longpageerror' => "'''FEELER: Den Text, den Dir Versicht ze späicheren, huet $1 KB. Dëst ass méi wéi den erlaabte Maximum vun $2 KB – dofir kann den Text net gespäichert ginn.'''", 'readonlywarning' => "'''OPGEPASST: D'Datebank gouf wéinst Maintenanceaarbechte fir Säitenännerunge gespaart, dofir kënnt Dir déi Säit den Ament net ofspäicheren. Versuergt den Text a versicht d'Ännerunge méi spéit nach emol ze maachen.''' @@ -962,6 +986,8 @@ $1", 'logdelete-failure' => "'''D'Sichtbarkeet vum Logbuch konnt net agestllt ginn:''' $1", 'revdel-restore' => 'Sichtbarkeet änneren', +'revdel-restore-deleted' => 'geläschte Versiounen', +'revdel-restore-visible' => 'sichtbar Versiounen', 'pagehist' => 'Versioune vun dëser Säit', 'deletedhist' => 'Geläschte Versiounen', 'revdelete-content' => 'Inhalt', @@ -1033,11 +1059,13 @@ Denkt w.e.g drunn datt d'Navigatiounslinken d'Wiel vun de Versiounen nees zréck # Diffs 'history-title' => 'Versiounshistorique vun „$1“', 'difference' => '(Ennerscheed tëscht Versiounen)', +'difference-multipage' => '(Ënnerscheed tëschent Säiten)', 'lineno' => 'Linn $1:', 'compareselectedversions' => 'Ausgewielte Versioune vergläichen', 'showhideselectedversions' => 'Erausgesichte Versioune weisen/verstoppen', 'editundo' => 'zréck', -'diff-multi' => '({{PLURAL:$1|Eng Tëscheversioun gëtt net|$1 Tëscheversioune ginn net}} gewisen)', +'diff-multi' => '({{PLURAL:$1|Eng Tëscheversioun|$1 Tëscheversioune}} vun {{PLURAL:$2|engem|$2}} Benotzer {{PLURAL:$1|gëtt|ginn}} net gewisen)', +'diff-multi-manyusers' => '({{PLURAL:$1|Eng Tëscheversioun|$1 Tëscheversioune}} vu méi wéi $2 {{PLURAL:$2|Benotzer|Benotzer}} ginn net gewisen)', # Search results 'searchresults' => 'Resultat vun der Sich', @@ -1072,6 +1100,7 @@ Denkt w.e.g drunn datt d'Navigatiounslinken d'Wiel vun de Versiounen nees zréck 'searchprofile-everything-tooltip' => 'Op alle Säiten nom Inhalt sichen (inclusiv Diskussiounssäiten)', 'searchprofile-advanced-tooltip' => 'Sich an den Nummraim déi an de perséinlichen Astellungen festgeluecht sinn', 'search-result-size' => '$1 ({{PLURAL:$2|1 Wuert|$2 Wierder}})', +'search-result-category-size' => '{{PLURAL:$1|1 Säit|$1 Säiten}} ({{PLURAL:$2|1 Ënnerkategorie|$2 Ënnerkategorien}}, {{PLURAL:$3|1 Fichier|$3 Fichieren}})', 'search-result-score' => 'Relevanz: $1 %', 'search-redirect' => '(Viruleedung $1)', 'search-section' => '(Abschnitt $1)', @@ -1146,6 +1175,7 @@ Denkt w.e.g drunn datt d'Navigatiounslinken d'Wiel vun de Versiounen nees zréck 'contextlines' => 'Zuel vun de Linnen:', 'contextchars' => 'Kontextcharactère pro Linn:', 'stub-threshold' => 'Maximum (a Byte) bei deem e Link nach ëmmer am Skizze-Format gewise gëtt:', +'stub-threshold-disabled' => 'Desaktivéiert', 'recentchangesdays' => 'Deeg déi an de Rezenten Ännerungen ugewise ginn:', 'recentchangesdays-max' => '(Maximal $1 {{PLURAL:$1|Dag|Deeg}})', 'recentchangescount' => 'Zuel vun den Ännerungen déi als Standard gewise ginn:', @@ -1179,6 +1209,7 @@ Hei ass een zoufälleg generéierte Wäert deen Dir benotze kënnt: $1', 'prefs-files' => 'Fichieren', 'prefs-custom-css' => 'Benotzerdefinéierten CSS', 'prefs-custom-js' => 'Benotzerdefinéierte JS', +'prefs-common-css-js' => 'Gemeinsam CSS/JS fir all Ausgesinn (skins):', 'prefs-reset-intro' => "Dir kënnt dës Säit benotze fir Är Astellungen zréck op d'Standard-Astllungen ze setzen. Dëst kann net réckgängeg gemaach ginn.", 'prefs-emailconfirm-label' => 'E-Mail Confirmatioun:', @@ -1216,9 +1247,15 @@ Dir kënnt et och zouloossen datt aner Benotzer iech - iwwert e Link op Ärer Be 'prefs-advancedrendering' => 'Méi Optiounen', 'prefs-advancedsearchoptions' => 'Méi Optiounen', 'prefs-advancedwatchlist' => 'Méi Optiounen', -'prefs-display' => 'Optioune vum Affichage', +'prefs-displayrc' => 'Optioune vun deem wat gewise gëtt', +'prefs-displaysearchoptions' => 'Optioune vum Affichage', +'prefs-displaywatchlist' => 'Optioune vun deem wat gewise gëtt', 'prefs-diffs' => 'Ënnerscheeder', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => "D'E-Mailadress schéngt valabel ze sinn", +'email-address-validity-invalid' => 'Gitt eng valabel e-Mailadress an', + # User rights 'userrights' => 'Benotzerrechterverwaltung', 'userrights-lookup-user' => 'Benotzergrupp verwalten', @@ -1302,6 +1339,7 @@ Dir kënnt et och zouloossen datt aner Benotzer iech - iwwert e Link op Ärer Be 'right-hideuser' => 'E Benotzernumm spären, an deem e virun der Ëffentlechkeet verstoppt gëtt', 'right-ipblock-exempt' => 'Ausname vun IP-Spären, automatesche Spären a vu Späre vu Plage vun IPen', 'right-proxyunbannable' => 'Automatesche Proxyspären ëmgoen', +'right-unblockself' => 'Seng eege Spär ophiewen', 'right-protect' => 'Protectiounsniveauen änneren a gespaarte Säiten änneren', 'right-editprotected' => 'Protegéiert Säiten (ouni Kaskadeprotectioun) änneren', 'right-editinterface' => 'De Benotzerinterface änneren', @@ -1313,9 +1351,9 @@ Dir kënnt et och zouloossen datt aner Benotzer iech - iwwert e Link op Ärer Be 'right-noratelimit' => 'Net limitéiert duerch Zäitlimitatiounen um Server', 'right-import' => 'Säite vun anere Wikien importéieren', 'right-importupload' => 'Säite vun engem eropgeluedene Fichier importéieren', -'right-patrol' => 'Aneren hir Ännerungen als kontrolléiert markéieren', -'right-autopatrol' => 'Déi eegen Ännerungen automatesch als iwwerkuckt markéieren', -'right-patrolmarks' => 'Markéierung "iwwerkuckt" an de rezenten Ännerunge weisen', +'right-patrol' => 'Aneren hir Ännerungen als nogekuckt markéieren', +'right-autopatrol' => 'Déi eegen Ännerungen automatesch als nogekuckt markéieren', +'right-patrolmarks' => 'Markéierung "nogekuckt" an de rezenten Ännerunge weisen', 'right-unwatchedpages' => 'Lëscht vun den net iwwerwaachte Säite weisen', 'right-trackback' => 'En Trackback matdeelen', 'right-mergehistory' => 'Zesummeféierung vum Historique vun de Versioune vu Säiten', @@ -1324,7 +1362,6 @@ Dir kënnt et och zouloossen datt aner Benotzer iech - iwwert e Link op Ärer Be 'right-siteadmin' => "Datebank spären an d'Spär ophiewen", 'right-reset-passwords' => 'Anere Benotzer hir Passwierder zrécksetzen', 'right-override-export-depth' => 'Säiten exportéieren inklusiv de verlinkte Säite bis zu enger Déift vu 5', -'right-versiondetail' => 'Informatiounen iwwert déi erweidert Software-Versioun weisen', 'right-sendemail' => 'Anere Benotzer E-Maile schécken', # User rights log @@ -1360,8 +1397,8 @@ Dir kënnt et och zouloossen datt aner Benotzer iech - iwwert e Link op Ärer Be 'action-protect' => 'de Protectiounsstatus vun dëser Säit änneren', 'action-import' => "dës Säit aus enger anerer Wiki z'importéieren", 'action-importupload' => "dës Säit duerch d'Eropluede vun engem Fichier importéieren", -'action-patrol' => 'd?Ännerunge vun Aneren als iwwerkuckt markéieren', -'action-autopatrol' => 'eegen Ännerungen als iwwerkuckt ze markéieren', +'action-patrol' => "d'Ännerunge vun Aneren als nogekuckt markéieren", +'action-autopatrol' => 'eegen Ännerungen als nogekuckt ze markéieren', 'action-unwatchedpages' => "d'Lëscht vun den net iwwerwaachte Säiten ze kucken", 'action-trackback' => "en ''Trackback'' matzedeelen", 'action-mergehistory' => "d'Versiounsgeschicht vun dëser Säit zesummenzeféieren", @@ -1375,14 +1412,9 @@ Dir kënnt et och zouloossen datt aner Benotzer iech - iwwert e Link op Ärer Be 'recentchanges-legend' => 'Optioune vun de rezenten Ännerungen', 'recentchangestext' => "Op dëser Säit kënnt Dir déi rezent Ännerungen op '''{{SITENAME}}''' gesinn.", 'recentchanges-feed-description' => 'Verfollegt mat dësem Feed déi rezent Ännerungen op {{SITENAME}}.', -'recentchanges-label-legend' => 'Legend: $1.', -'recentchanges-legend-newpage' => '$1 - nei Säit', 'recentchanges-label-newpage' => 'Dës Ännerung huet eng nei Säit ugeluecht', -'recentchanges-legend-minor' => '$1 - kleng Ännerung', 'recentchanges-label-minor' => 'Dëst ass eng kleng Ännerung', -'recentchanges-legend-bot' => '$1 - Ännerung duerch e Bot', 'recentchanges-label-bot' => 'Dës Ännerung gouf vun engem Bot gemaacht', -'recentchanges-legend-unpatrolled' => '$1 - net-nogekuckten Ännerung', 'recentchanges-label-unpatrolled' => 'Dës Ännerung gouf nach net nogekuckt', 'rcnote' => "Hei {{PLURAL:$1|ass déi lescht Ännerung|sinn déi lescht '''$1''' Ännerungen}} {{PLURAL:$2|vum leschten Dag|vun de leschten '''$2''' Deeg}}, Stand: $4 ëm $5 Auer.", 'rcnotefrom' => "Ugewise ginn d'Ännerunge vum '''$2''' un (maximal '''$1''' Ännerunge gi gewisen).", @@ -1430,13 +1462,16 @@ Säite vun [[Special:Watchlist|Ärer Iwwerwaachungslëscht]] si '''fett''' gesch 'upload_directory_missing' => 'De Repertoire an deen Dir eropluede wollt ($1) feelt a konnt net vum Webserver ugeluecht ginn.', 'upload_directory_read_only' => 'De Webserver kann net an den Upload-Repertoire ($1) schreiwen.', 'uploaderror' => 'Feeler bäim Eroplueden', +'upload-recreate-warning' => "'''Opgepasst: E Fichier mat deem Numm gouf scho geläscht oder geréckelt.''' + +Hei fannt Dir en Extrait aus dem Läsch- a Réckel-Logbuch fir dëse Fichier.", 'uploadtext' => "Benotzt dëse Formulaire, fir nei Fichieren eropzelueden. Gitt op d'[[Special:FileList|Lëscht vun den eropgeluedene Fichieren]], fir no Fichieren ze sichen déi virdrun eropgeluede goufen, Eropluedunge fannt dir an der [[Special:Log/upload|Lëscht vun den eropgeluedene Fichieren]], geläschte Fichieren am [[Special:Log/delete|Läschlog]]. Fir e '''Bild''' op enger Säit zu benotzen, schreift amplaz vum Bild eng vun dëse Formelen: * '''[[{{ns:file}}:Fichier.jpg]]''' fir déi ganz Versioun vum Fichier ze benotzen -* '''[[{{ns:file}}:Fichier.png|200px|thumb|left|alt text]]''' fir eng 200 Pixel breet Versioun an enger Këscht am lénkse Rand mat 'alt text' als Beschreiwung -* '''[[{{ns:media}}:Fichier.ogg]]''' fir e Fichier direk ze verlinken ouni de Fichier ze weisen", +* '''[[{{ns:file}}:Fichier.png|200px|thumb|left|alt text]]''' fir eng 200 Pixel breet Versioun an enger Këscht am lénke Rand mat 'alt text' als Beschreiwung +* '''[[{{ns:media}}:Fichier.ogg]]''' fir e Fichier direkt ze verlinken ouni de Fichier ze weisen", 'upload-permitted' => 'Erlaabte Formater vun de Fichieren: $1.', 'upload-preferred' => 'Fichierszorten déi am beschte funktionéieren: $1.', 'upload-prohibited' => 'Verbuede Fichiers Formater: $1.', @@ -1464,6 +1499,17 @@ Erwënschte {{PLURAL:\$3|Format ass|Formater sinn}}: \$2.", 'filetype-banned-type' => "'''.$1''' ass ee Fichersformat deen net erlaabt ass. Erlaabt {{PLURAL:$3|ass|sinn}}: $2.", 'filetype-missing' => 'De Fichier huet keng Erweiderung (wéi z. B. ".jpg").', +'empty-file' => 'De Fichier deen Dir geschéckt hutt war eidel.', +'file-too-large' => 'De Fichier deen Dir geschéckt hutt war ze grouss.', +'filename-tooshort' => 'Den Numm vum Fichier ass ze kuerz.', +'filetype-banned' => 'Dësen Typ vu Fichier kann net eropgeluede ginn.', +'verification-error' => "Dëse Fichier huet d'Fichiers-Iwwerpréifung net passéiert.", +'hookaborted' => "D'Ännerung déi Dir versicht hutt ze maachen ass duerch en 'extension-hook' ofgebrach ginn.", +'illegal-filename' => 'Den Numm vum Fichier ass net erlaabt.', +'overwrite' => "D'Iwwerschreiwe vun engem Fichier ass net erlaabt.", +'unknown-error' => 'En onbekannte Feeler ass geschitt.', +'tmp-create-error' => 'Den temporäre Fichier konnt net ugeluecht ginn.', +'tmp-write-error' => 'Feeler beim Schreiwe vum temporäre Fichier.', 'large-file' => "D'Fichiere sollen no Méiglechkeet net méi grouss wéi $1 sinn. Dëse Fichier huet $2.", 'largefileserver' => 'Dëse Fichier ass méi grouss wéi déi um Server agestallte Maximalgréisst.', 'emptyfile' => 'De Fichier deen Dir eropgelueden hutt, schéngt eidel ze sinn. Dëst kann duerch en Tippfeeler am Numm vum Fichier kommen. Préift w.e.g. no, op Dir dëse Fichier wierklech eropluede wëllt.', @@ -1491,13 +1537,14 @@ Wann Dir de Fichier nach ëmmer eropluede wëllt, da gitt w.e.g. zréck a benotz Wann Dir dëse Fichier trotzdeem eropluede wëllt da gitt w.e.g. zréck a luet dëse Fichier ënner engem aneren Numm erop. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Dëse Fichier schéngt een Doublon vun {{PLURAL:$1|dësem Fichier|dëse Fichieren}} ze sinn:', 'file-deleted-duplicate' => 'En identesche Fichier ([[:$1]]) gouf virdru geläscht. Kuckt w.e.g. an der Lëscht vum Läschen no, Ier Dir en nach emol eropluet.', -'successfulupload' => 'Eroplueden erfollegräich', 'uploadwarning' => 'Opgepasst', 'uploadwarning-text' => "Ännert d'Beschreiwung hei ënnedrënner w.e.g. a versicht et nach eng Kéier.", 'savefile' => 'Fichier späicheren', 'uploadedimage' => 'huet "[[$1]]" eropgelueden', 'overwroteimage' => 'huet eng nei Versioun vun "[[$1]]" eropgelueden', 'uploaddisabled' => "Pardon, d'Eropluede vu Fichieren ass ausgeschalt.", +'copyuploaddisabled' => "D'Eroplueden iwwer URL ass desaktivéiert.", +'uploadfromurl-queued' => "Dat wat Dir eropgelueden hutt gouf an d'Waardelëscht agedroen.", 'uploaddisabledtext' => "D'Eropluede vu Fichieren ass ausgeschalt.", 'php-uploaddisabledtext' => "D'Eropluede vu Fichieren ass am PHP desaktivéiert. Kuckt w.e.g. d'Astellung ''file_uploads'' no.", 'uploadscripted' => 'An dësem Fichier ass HTML- oder Scriptcode, dee vun engem Webbrowser falsch interpretéiert kéint ginn.', @@ -1516,6 +1563,14 @@ Wann Dir dëse Fichier trotzdeem eropluede wëllt da gitt w.e.g. zréck a luet d Kuckt w.e.g. genee no, ob dat neit Eroplueden de Richtlinnen entsprécht. Zu Ärer Informatioun steet an der Läsch-Lëscht de Grond vum virege Läschen:", 'filename-bad-prefix' => "Den Numm vum Fichier fänkt mat '''„$1“''' un. Dësen Numm krut en automatesch vun der Kamera a seet näischt iwwer dat aus, wat drop ass. Gitt dem Fichier w.e.gl. en Numm, deen den Inhalt besser beschreift, an deen net verwiesselt ka ginn.", +'upload-success-subj' => 'Eroplueden erfollegräich', +'upload-success-msg' => 'Ärt Eropluede vun [$2] huet fonctionnéiert. De Fichier ass hei disponibel: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problem beim Eroplueden', +'upload-failure-msg' => 'Et gouf e Problem mam Fichier vu(n) [$2] deen Dir eropgelueden hutt: + +$1', +'upload-warning-subj' => 'Warnung beim Eroplueden', +'upload-warning-msg' => 'Et gouf e Problem beim Eropluede vun [$2]. Dir kënnt op de [[Special:Upload/stash/$1|Formulaire fir eropzelueden]] goe fir de Problem ze léisen.', 'upload-proto-error' => 'Falsche Protokoll', 'upload-proto-error-text' => "D'URL muss mat http:// oder ftp:// ufänken.", @@ -1578,6 +1633,7 @@ Kuckt w.e.g. no op kee Feeler an der URL ass an op de Site och online ass.', 'listfiles_search_for' => 'Sicht nom Fichier:', 'imgfile' => 'Fichier', 'listfiles' => 'Lëscht vun de Fichieren', +'listfiles_thumb' => 'Miniaturbild', 'listfiles_date' => 'Datum', 'listfiles_name' => 'Numm', 'listfiles_user' => 'Benotzer', @@ -1692,8 +1748,8 @@ Dir musst ëmmer de Medien- a Subtyp aginn: z. Bsp. image/jpeg.", 'statistics-edits' => 'Säitenännerungen zënter datt et {{SITENAME}} gëtt', 'statistics-edits-average' => 'Duerchschnëttlech Zuel vun Ännerunge pro Säit', 'statistics-views-total' => 'Total vun den Oprif', +'statistics-views-total-desc' => 'Kucke vu Säiten déi et net gëtt a vu Spezialsäite sinn net mat dran', 'statistics-views-peredit' => 'Oprif pro Ännerung', -'statistics-jobqueue' => 'Längt vun der [http://www.mediawiki.org/wiki/Manual:Job_queue Job queue]', 'statistics-users' => 'Registréiert [[Special:ListUsers|Benotzer]]', 'statistics-users-active' => 'Aktiv Benotzer', 'statistics-users-active-desc' => 'Benotzer déi während {{PLURAL:$1|dem leschten Dag|de leschten $1 Deeg}} eppes gemaach hunn', @@ -1708,7 +1764,7 @@ Eng Säite gëtt als Homonymiesäit behandelt, wa si eng Schabloun benotzt déi 'doubleredirects' => 'Duebel Viruleedungen', 'doubleredirectstext' => 'Op dëser Säit stinn déi Säiten déi op aner Viruleedungssäite viruleeden. An all Rei sti Linken zur éischter an zweeter Viruleedung, souwéi d\'Zil vun der zweeter Viruleedung, déi normalerweis déi "richteg" Zilsäit ass, op déi déi éischt Viruleedung hilinke soll. -Duerchgestrachen Linke goufe schonn esou verännert datt déi duebel Viruleedung opgeléist ass.', +Duerchgestrachen Linke goufe schonn esou verännert datt déi duebel Viruleedung opgeléist ass.', 'double-redirect-fixed-move' => '[[$1]] gouf geréckelt, et ass elo eng Viruleedung op [[$2]]', 'double-redirect-fixer' => 'Verbesserung vu Viruleedungen', @@ -1731,6 +1787,8 @@ An all Rei sti Linken zur éischter an zweeter Viruleedung, souwéi d\'Zil vun d 'nmembers' => '$1 {{PLURAL:$1|Member|Memberen}}', 'nrevisions' => '$1 {{PLURAL:$1|Versioun|Versiounen}}', 'nviews' => '$1 {{PLURAL:$1|Offro|Offroen}}', +'nimagelinks' => 'Benotzt op {{PLURAL:$1|enger Säit|$1 Säiten}}', +'ntransclusions' => 'benotzt op {{PLURAL:$1|enger Säit|$1 Säiten}}', 'specialpage-empty' => 'Dës Säit ass eidel.', 'lonelypages' => 'Weesesäiten', 'lonelypagestext' => 'Dës Säite sinn net vun anere Säite vu(n) {{SITENAME}} verlinkt respektiv a kenger Säit vu(n) {{SITENAME}} agebonn.', @@ -1887,34 +1945,40 @@ Et ginn [[{{MediaWiki:Listgrouprights-helppage}}|zousätzlech Informatiounen]] i 'listgrouprights-removegroup-self-all' => 'Däerf all Gruppe vu sengem eegene Benotzerkont ewechhuelen', # E-mail user -'mailnologin' => 'Keng E-Mailadress', -'mailnologintext' => 'Dir musst [[Special:UserLogin|ugemellt]] sinn an eng gëlteg E-Mail Adress an Äre [[Special:Preferences|Astellungen]] aginn hunn, fir engem anere Benotzer eng E-Mail ze schécken.', -'emailuser' => 'Dësem Benotzer eng E-Mail schécken', -'emailpage' => 'Dem Benotzer eng E-Mail schécken', -'emailpagetext' => 'Dir kënnt mat dësem Formulaire dësem Benotzer en E-Mail-Message schécken. +'mailnologin' => 'Keng E-Mailadress', +'mailnologintext' => 'Dir musst [[Special:UserLogin|ugemellt]] sinn an eng gëlteg E-Mail Adress an Äre [[Special:Preferences|Astellungen]] aginn hunn, fir engem anere Benotzer eng E-Mail ze schécken.', +'emailuser' => 'Dësem Benotzer eng E-Mail schécken', +'emailpage' => 'Dem Benotzer eng E-Mail schécken', +'emailpagetext' => 'Dir kënnt mat dësem Formulaire dësem Benotzer en E-Mail-Message schécken. D\'E-Mailadress, déi Dir an [[Special:Preferences|Ären Astellungen]] aginn hutt, steet an der "From" Adress vun der Mail, sou datt den Destinataire Iech direkt äntwerte kann.', -'usermailererror' => 'E-Mail-Objet mellt deen heite Feeler:', -'defemailsubject' => 'E-Mail vu(n) {{SITENAME}}', -'noemailtitle' => 'Keng E-Mailadress', -'noemailtext' => 'Dëse Benotzer huet keng valabel E-Mailadress uginn.', -'nowikiemailtitle' => 'Keng E-Mail erlaabt', -'nowikiemailtext' => 'Dëse Benotzer wëllt keng E-Maile vun anere Benotzer kréien.', -'email-legend' => 'Engem anere(n) {{SITENAME}}-Benotzer eng E-Mail schécken', -'emailfrom' => 'Vum:', -'emailto' => 'Fir:', -'emailsubject' => 'Sujet:', -'emailmessage' => 'Message:', -'emailsend' => 'Schécken', -'emailccme' => 'Eng E-Mailkopie vun der Noriicht fir mech', -'emailccsubject' => 'Kopie vun denger Noriicht un $1: $2', -'emailsent' => 'E-Mail geschéckt', -'emailsenttext' => 'Är E-Mail gouf fortgeschéckt.', -'emailuserfooter' => 'Dës E-Mail gouf vum $1 dem $2 geschéckt dobäi gouf d\'Funktioun "Benotzer E-Mail" op {{SITENAME}} benotzt.', +'usermailererror' => 'E-Mail-Objet mellt deen heite Feeler:', +'defemailsubject' => 'E-Mail vu(n) {{SITENAME}}', +'usermaildisabled' => 'Benotzer E-Mail ausgeschalt', +'usermaildisabledtext' => 'Dir kënnt op dëser Wiki anere Benotzer keng E-Mail schécken', +'noemailtitle' => 'Keng E-Mailadress', +'noemailtext' => 'Dëse Benotzer huet keng valabel E-Mailadress uginn.', +'nowikiemailtitle' => 'Keng E-Mail erlaabt', +'nowikiemailtext' => 'Dëse Benotzer wëllt keng E-Maile vun anere Benotzer kréien.', +'email-legend' => 'Engem anere(n) {{SITENAME}}-Benotzer eng E-Mail schécken', +'emailfrom' => 'Vum:', +'emailto' => 'Fir:', +'emailsubject' => 'Sujet:', +'emailmessage' => 'Message:', +'emailsend' => 'Schécken', +'emailccme' => 'Eng E-Mailkopie vun der Noriicht fir mech', +'emailccsubject' => 'Kopie vun denger Noriicht un $1: $2', +'emailsent' => 'E-Mail geschéckt', +'emailsenttext' => 'Är E-Mail gouf fortgeschéckt.', +'emailuserfooter' => 'Dës E-Mail gouf vum $1 dem $2 geschéckt dobäi gouf d\'Funktioun "Benotzer E-Mail" op {{SITENAME}} benotzt.', + +# User Messenger +'usermessage-summary' => 'Benoriichtegung hannerloossen.', +'usermessage-editor' => 'Benoriichtegungs-System', # Watchlist 'watchlist' => 'Meng Iwwerwaachungslëscht', 'mywatchlist' => 'Meng Iwwerwaachungslëscht', -'watchlistfor' => "(fir '''$1''')", +'watchlistfor2' => 'Vum $1 $2', 'nowatchlist' => 'Är Iwwerwaachungslëscht ass eidel.', 'watchlistanontext' => "Dir musst $1 fir Säiten op ärer Iwwerwaachungslëscht ze gesinn oder z'änneren.", 'watchnologin' => 'Net ageloggt', @@ -1965,7 +2029,7 @@ $NEWPAGE Resumé vum Mataarbechter: $PAGESUMMARY $PAGEMINOREDIT -Dëse Mataarbechter kontaktéieren: +Den Editeur kontaktéieren: E-Mail: $PAGEEDITOR_EMAIL Wiki: $PAGEEDITOR_WIKI @@ -1976,9 +2040,15 @@ Op Ärer Iwwerwaachungslëscht kënnt Dir all Benoorichtigungsmarkeren zesummen Äre frëndleche {{SITENAME}} Benoriichtigungssystem -- -Fir d\'Astellungen op ärer Iwwerwaachungslëscht z\'änneren, besicht w.e.g. + +Fir d\'Astellungen op ären E-Mailbenoriichtigungen z\'änneren, besicht w.e.g. +{{fullurl:{{#special:Preferences}}}} + + +Fir d\'Astellungen vun ärer Iwwerwaachungslëscht z\'änneren, besicht w.e.g. {{fullurl:Special:Watchlist/edit}} + Fir d\'Säit vun Ärer Iwwerwaachungslëscht erofzehuelen, gitt w.e.g. op $UNWATCHURL @@ -2034,7 +2104,10 @@ Déi lescht Ännerung vun der Säit ass vum [[User:$3|$3]] ([[User talk:$3|Disku 'revertpage' => 'Ännerunge vum [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussioun]]) zréckgesat op déi lescht Versioun vum [[User:$1|$1]]', 'revertpage-nouser' => 'Zréckgesaten Ännerungen vum (Benotzernummewechgeholl) op déilescht Versioun vum [[User:$1|$1]]', 'rollback-success' => "D'Ännerunge vum $1 goufen zréckgesat op déi lescht Versioun vum $2.", -'sessionfailure' => 'Et schéngt e Problem mat ärer Loginséance ze ginn; + +# Edit tokens +'sessionfailure-title' => 'Setzungsfeeler', +'sessionfailure' => 'Et schéngt e Problem mat ärer Loginséance ze ginn; Dës Aktioun gouf aus Sécherheetsgrënn ofgebrach, fir ze verhënneren datt är Séance piratéiert ka ginn. Klickt w.e.g. op "Zréck" a lued déi Säit vun där Dir komm sidd nei, a versicht et dann nach eng Kéier.', @@ -2164,18 +2237,22 @@ $1', 'month' => 'Vum Mount (a virdrun):', 'year' => 'Vum Joer (a virdrun):', -'sp-contributions-newbies' => 'Nëmme Kontributioune vun neie Mataarbechter weisen', -'sp-contributions-newbies-sub' => 'Fir déi Nei', -'sp-contributions-newbies-title' => 'Kontributioune vun neie Benotzer', -'sp-contributions-blocklog' => 'Spärlescht', -'sp-contributions-deleted' => 'geläschte Benotzer-Kontributiounen', -'sp-contributions-logs' => 'Logbicher', -'sp-contributions-talk' => 'diskutéieren', -'sp-contributions-userrights' => 'Verwaltung vun de Benotzerrechter', -'sp-contributions-blocked-notice' => 'Dëse Benotzer ass elo gespaart. Déi lescht Entrée am Läsch-Logbuch steet als Referenz hei ënnendrënner:', -'sp-contributions-search' => 'No Kontributioune sichen', -'sp-contributions-username' => 'IP-Adress oder Benotzernumm:', -'sp-contributions-submit' => 'Sichen', +'sp-contributions-newbies' => 'Nëmme Kontributioune vun neie Mataarbechter weisen', +'sp-contributions-newbies-sub' => 'Fir déi Nei', +'sp-contributions-newbies-title' => 'Kontributioune vun neie Benotzer', +'sp-contributions-blocklog' => 'Spärlescht', +'sp-contributions-deleted' => 'geläschte Benotzer-Kontributiounen', +'sp-contributions-uploads' => 'Eropgeluede Fichieren', +'sp-contributions-logs' => 'Logbicher', +'sp-contributions-talk' => 'diskutéieren', +'sp-contributions-userrights' => 'Verwaltung vun de Benotzerrechter', +'sp-contributions-blocked-notice' => 'Dëse Benotzer ass elo gespaart. Déi lescht Entrée am Läsch-Logbuch steet als Referenz hei ënnendrënner:', +'sp-contributions-blocked-notice-anon' => "Dës IP-Adress ass elo gespaart. +Ënnendrënner steet déi lescht Androung an d'Spärlëscht:", +'sp-contributions-search' => 'No Kontributioune sichen', +'sp-contributions-username' => 'IP-Adress oder Benotzernumm:', +'sp-contributions-toponly' => 'Nëmmen Ännerunge weisen déi déi lescht Versioun sinn', +'sp-contributions-submit' => 'Sichen', # What links here 'whatlinkshere' => 'Linken op dës Säit', @@ -2235,7 +2312,6 @@ Kuckt d'[[Special:IPBlockList|IP Spär-Lëscht]] fir all Spären ze gesin.", 'ipb-edit-dropdown' => 'Spärgrënn änneren', 'ipb-unblock-addr' => 'Spär vum $1 ophiewen', 'ipb-unblock' => 'Spär vun enger IP-Adress oder engem Benotzer ophiewen', -'ipb-blocklist-addr' => 'Aktuell Späre fir $1', 'ipb-blocklist' => 'Kuckt aktuell Spären', 'ipb-blocklist-contribs' => 'Kontributioune fir $1', 'unblockip' => 'Spär vum Benotzer ophiewen', @@ -2306,6 +2382,8 @@ Si ass awer als Deel vun der Rei $2 gespaart, an dës Spär kann opgehuewe ginn. 'sorbs_create_account_reason' => 'Är IP-Adress steet als oppene Proxy an der schwaarzer Lëscht déi op {{SITENAME}} benotzt gëtt. DIr kënnt keen neie Benotzerkont opmaachen.', 'cant-block-while-blocked' => 'Dir däerft keng aner Benotzer spären, esou lang wéi dir selwer gespaart sidd.', 'cant-see-hidden-user' => "De Benotzer deen Dir versicht ze spären ass scho gespaart a verstoppt. Well Dir d'Recht ''Hideuser'' net hutt kënnt Dir dëse Benotzer net gesinn an dem Benotzer seng Spär net änneren.", +'ipbblocked' => 'Dir kënnt keng aner Benotzer spären oder hir Spär ophiewen well Dir selwer gespaart sidd', +'ipbnounblockself' => 'Dir kënnt Är Spär net selwer ophiewen', # Developer tools 'lockdb' => 'Datebank spären', @@ -2344,6 +2422,18 @@ Dëst bedeit datt dir eng Säit ëmbenenne kënnt an datt dir keng Säit iwwersc '''OPGEPASST!''' Dëst kann en drastesche Changement fir eng populär Säit bedeiten; verstitt w.e.g. d'Konsequenze vun ärer Handlung éier Dir d'Säit réckelt.", +'movepagetext-noredirectfixer' => "Wann Dir dëse Formulaire benotzt, réckelt dir eng komplett Säit mat hirem Historique op en neien Numm. +Den alen Titel gëtt eng Viruleedung op den neien Titel. +Dir kënnt Viruleedungen déi op déi al Säit ginn automatesch aktualiséieren. +Vergewëssert Iech datt keng [[Special:DoubleRedirects|duebel]] oder [[Special:BrokenRedirects|futtis Viruleedungen]] am Spill sinn. +Dir sidd responsabel datt d'Linke weider dohinner pointéieren, wou se hi sollen. + +Denkt w.e.g. drun datt d'Säit '''net''' geréckelt gëtt, wann et schonns eng Säit mat deem Titel gëtt, ausser déi ass eidel, ass eng Viruleedung oder huet keen Historique. +Dëst bedeit datt dir eng Säit zréck op deen Numm dee se virdrun hat ëmbenenne kënnt wann Dir e Feeler maacht an datt Dir keng Säit iwwerschreiwe kënnt, déi et schonns gëtt. + +'''OPGEPASST!''' +Dëst kann en drastesche Changement fir eng populär Säit sinn; +verstitt w.e.g. d'Konsequenze vun ärer Handlung éier Dir dëst maacht.", 'movepagetalktext' => "D'assoziéiert Diskussiounssäit, am Fall wou eng do ass, gëtt automatesch matgeréckelt, '''ausser:''' *D'Säit gëtt an een anere Nummraum geréckelt. *Et gëtt schonn eng Diskussiounssäit mat dësem Numm, oder @@ -2397,6 +2487,7 @@ An deene Fäll musst Dir d'Diskussiounssäit manuell réckelen oder fusionéiere 'immobile-source-page' => 'Dës Säit kann net geréckelt ginn.', 'immobile-target-page' => 'Kann net op de Bestëmmungs-titel geréckelt ginn.', 'imagenocrossnamespace' => 'Fichiere kënnen net an aner Nummraim geréckelt ginn', +'nonfile-cannot-move-to-file' => '"Keng Fichiere" kënnen net an den {{ns:file}}-Nummraum geréckelt ginn', 'imagetypemismatch' => 'Déi nei Dateierweiderung ass net mat dem Fichier kompatibel', 'imageinvalidfilename' => 'Den Numm vum Zil-Fichier ass ongëlteg', 'fix-double-redirects' => 'All Viruleedungen déi op den Originaltitel weisen aktualiséieren', @@ -2474,6 +2565,7 @@ Späichert en op Ärem Computer of a luet en hei nees erop.', 'importstart' => 'Importéier Säiten …', 'import-revision-count' => '$1 {{PLURAL:$1|Versioun|Versiounen}}', 'importnopages' => "Et gëtt keng Säiten fir z'importéieren.", +'imported-log-entries' => "$1 {{PLURAL:$1|Entrée|Entréeën}} an d'Logbuch importéiert.", 'importfailed' => 'Importatioun huet net fonctionnéiert: $1', 'importunknownsource' => 'Onbekannt Importquell', 'importcantopen' => 'De Fichier dee sollt importéiert gi konnt net opgemaach ginn', @@ -2567,6 +2659,8 @@ Späichert en op Ärem Computer of a luet en hei nees erop.', 'tooltip-rollback' => '"Zrécksetzen" mécht all Ännerunge vum leschten "Auteur" an engem Klick nees réckgängeg.', 'tooltip-undo' => '"Zréck" setzt dës Ännerung zréck a mécht den Ännerungsformulaire am Modus "kucken ouni ofzespäicheren" op. Erlaabt et e Grond an de Resumé derbäizesetzen.', +'tooltip-preferences-save' => 'Astellunge späicheren', +'tooltip-summary' => 'Gitt e kuerze Resumé an', # Stylesheets 'common.css' => "/* Dës CSS huet nëmmen Afloss op de Skin ''Chick'' */", @@ -2647,20 +2741,20 @@ iwwerpréift déi korrekt Installatioun vu LaTeX an dvipng (oder dvips + gs + co 'math_notexvc' => 'Den texvc Programm feelt: Liest w.e.g. math/README fir en anzestellen.', # Patrolling -'markaspatrolleddiff' => 'Als kontrolléiert markéieren', -'markaspatrolledtext' => 'Dës Säit als kontrolléiert markéieren', -'markedaspatrolled' => 'ass als kontrolléiert markéiert', -'markedaspatrolledtext' => 'Déi gewielte Versioun vu(n) [[:$1]] gouf als kontrolléiert markéiert.', +'markaspatrolleddiff' => 'Als nogekuckt markéieren', +'markaspatrolledtext' => 'Dës Säit als nogekuckt markéieren', +'markedaspatrolled' => 'ass als nogekuckt markéiert', +'markedaspatrolledtext' => 'Déi gewielte Versioun vu(n) [[:$1]] gouf als nogekuckt markéiert.', 'rcpatroldisabled' => 'Rezent Ännerungskontroll ausgeschalt.', 'rcpatroldisabledtext' => "D'Kontroll vun de leschten Ännerungen ass elo ausgeschalt.", -'markedaspatrollederror' => 'Kann net als "kontrolléiert" markéiert ginn.', +'markedaspatrollederror' => 'Kann net als "nogekuckt" markéiert ginn.', 'markedaspatrollederrortext' => 'Dir musst eng Säitenännerung auswielen.', -'markedaspatrollederror-noautopatrol' => 'Dir däerft Är eegen Ännerungen net als iwwerkuckt markéieren.', +'markedaspatrollederror-noautopatrol' => 'Dir däerft Är eegen Ännerungen net als nogekuckt markéieren.', # Patrol log 'patrol-log-page' => 'Logbuch vun den iwwerkuckte Versiounen', 'patrol-log-header' => "Dëst ass d'Logbuch vun den nogekuckte Versiounen.", -'patrol-log-line' => 'huet d\'$1 vu(n) "$2" als iwwerkuckt markéiert $3', +'patrol-log-line' => 'huet d\'$1 vu(n) "$2" als nogekuckt markéiert $3', 'patrol-log-auto' => '(automatesch)', 'patrol-log-diff' => 'Versioun $1', 'log-show-hide-patrol' => 'Kontroll-Logbuch $1', @@ -2686,14 +2780,17 @@ Duerch d'Opmaache vum Fichier kann Äre System beschiedegt ginn.", 'imagemaxsize' => "Maximal Gréisst fir Biller:
    ''(fir Billerbeschreiwungssäiten)''", 'thumbsize' => 'Gréisst vun der Miniatur:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|Säit|Säiten}}', -'file-info' => '(Dateigréisst: $1, MIME-Typ: $2)', -'file-info-size' => '($1 × $2 Pixel, Dateigréisst: $3, MIME-Typ: $4)', +'file-info' => 'Dateigréisst: $1, MIME-Typ: $2', +'file-info-size' => '$1 × $2 Pixel, Dateigréisst: $3, MIME-Typ: $4', 'file-nohires' => 'Et gëtt keng méi héich Opléisung.', -'svg-long-desc' => '(SVG-Fichier, Basisgréisst: $1 × $2 Pixel, Gréisst vum Fichier: $3)', +'svg-long-desc' => 'SVG-Fichier, Basisgréisst: $1 × $2 Pixel, Gréisst vum Fichier: $3', 'show-big-image' => 'Versioun an enger méi héijer Opléisung', 'show-big-image-thumb' => 'Gréisst vun der Miniatur: $1 × $2 Pixel', 'file-info-gif-looped' => 'Endloosschleef', 'file-info-gif-frames' => '$1 {{PLURAL:$1|Bild|Biller}}', +'file-info-png-looped' => 'Endlossschleef', +'file-info-png-repeat' => 'gouf $1 {{PLURAL:$1|mol|mol}} gespillt', +'file-info-png-frames' => '$1 {{PLURAL:$1|Frame|Framen}}', # Special:NewFiles 'newimages' => 'Gallerie vun den neie Biller', @@ -2846,6 +2943,7 @@ Duerno sti Linken déi Ausnamen definéieren, an deenen hirem Kontext dat Bild a 'exif-gpsareainformation' => 'Numm vun der GPS-Géigend', 'exif-gpsdatestamp' => 'GPS-Datum', 'exif-gpsdifferential' => 'GPS-Differentialverbesserung', +'exif-objectname' => 'Kuerzen Titel', # EXIF attributes 'exif-compression-1' => 'Onkompriméiert', @@ -3005,25 +3103,25 @@ Duerno sti Linken déi Ausnamen definéieren, an deenen hirem Kontext dat Bild a 'limitall' => 'all', # E-mail address confirmation -'confirmemail' => 'E-Mailadress confirméieren', -'confirmemail_noemail' => 'Dir hutt keng gëlteg E-Mail-Adress an Äre [[Special:Preferences|Benotzerastellungen]] agedro.', -'confirmemail_text' => "Ier Dir d'E-Mailfunktioune vun {{SITENAME}} benotze kënnt musst dir als éischt Är E-Mailadress confirméieren. Dréckt w.e.g. de Knäppchen hei ënnendrënner fir eng Confirmatiouns-E-Mail op déi Adress ze schécken déi Dir uginn hutt. An där E-Mail steet e Link mat engem Code, deen dir dann an Ärem Browser opmaache musst fir esou ze bestätegen, datt Är Adress och wierklech existéiert a valabel ass.", -'confirmemail_pending' => 'Dir krut schonn e Confirmatiouns-Code per E-Mail geschéckt. Wenn Dir Äre Benotzerkont eréischt elo kuerz opgemaach hutt, da gedëllegt Iech nach e puer Minutten bis Är E-Mail ukomm ass, ier Dir een neie Code ufrot.', -'confirmemail_send' => 'Confirmatiouns-E-Mail schécken', -'confirmemail_sent' => 'Confirmatiouns-E-Mail gouf geschéckt.', -'confirmemail_oncreate' => "E Confirmatiouns-Code gouf op Är E-Mail-Adress geschéckt. +'confirmemail' => 'E-Mailadress confirméieren', +'confirmemail_noemail' => 'Dir hutt keng gëlteg E-Mail-Adress an Äre [[Special:Preferences|Benotzerastellungen]] agedro.', +'confirmemail_text' => "Ier Dir d'E-Mailfunktioune vun {{SITENAME}} benotze kënnt musst dir als éischt Är E-Mailadress confirméieren. Dréckt w.e.g. de Knäppchen hei ënnendrënner fir eng Confirmatiouns-E-Mail op déi Adress ze schécken déi Dir uginn hutt. An där E-Mail steet e Link mat engem Code, deen dir dann an Ärem Browser opmaache musst fir esou ze bestätegen, datt Är Adress och wierklech existéiert a valabel ass.", +'confirmemail_pending' => 'Dir krut schonn e Confirmatiouns-Code per E-Mail geschéckt. Wenn Dir Äre Benotzerkont eréischt elo kuerz opgemaach hutt, da gedëllegt Iech nach e puer Minutten bis Är E-Mail ukomm ass, ier Dir een neie Code ufrot.', +'confirmemail_send' => 'Confirmatiouns-E-Mail schécken', +'confirmemail_sent' => 'Confirmatiouns-E-Mail gouf geschéckt.', +'confirmemail_oncreate' => "E Confirmatiouns-Code gouf op Är E-Mail-Adress geschéckt. Dëse Code gëtt fir d'Umeldung net gebraucht. Dir braucht en awer bei der Aktivéierung vun den E-Mail-Funktiounen bannert der Wiki.", -'confirmemail_sendfailed' => '{{SITENAME}} konnt är Confirmatiouns-E-Mail net schécken. +'confirmemail_sendfailed' => '{{SITENAME}} konnt är Confirmatiouns-E-Mail net schécken. Iwwerpréift w.e.g. är E-Mailadress op ongëlteg Zeechen. Feelermeldung vum Mailserver: $1', -'confirmemail_invalid' => "Ongëltege Confirmatiounscode. Eventuell ass d'Gëltegkeetsdauer vum Code ofgelaf.", -'confirmemail_needlogin' => 'Dir musst iech $1, fir är E-Mailadress ze confirméieren.', -'confirmemail_success' => 'Är E-Mailadress gouf confirméiert. Där kënnt iech elo aloggen an a vollem Ëmfang vun der Wiki profitéieren.', -'confirmemail_loggedin' => 'Är E-Mailadress gouf elo confirméiert.', -'confirmemail_error' => 'Et ass eppes falsch gelaf bäim Späichere vun ärer Confirmatioun.', -'confirmemail_subject' => 'Confirmatioun vun der E-Mailadress fir {{SITENAME}}', -'confirmemail_body' => 'E Benotzer, waarscheinlech dir selwer, hutt mat der IP Adress $1 de Benotzerkont "$2" um Site {{SITENAME}} opgemaach. +'confirmemail_invalid' => "Ongëltege Confirmatiounscode. Eventuell ass d'Gëltegkeetsdauer vum Code ofgelaf.", +'confirmemail_needlogin' => 'Dir musst iech $1, fir är E-Mailadress ze confirméieren.', +'confirmemail_success' => 'Är E-Mailadress gouf confirméiert. Där kënnt iech elo aloggen an a vollem Ëmfang vun der Wiki profitéieren.', +'confirmemail_loggedin' => 'Är E-Mailadress gouf elo confirméiert.', +'confirmemail_error' => 'Et ass eppes falsch gelaf bäim Späichere vun ärer Confirmatioun.', +'confirmemail_subject' => 'Confirmatioun vun der E-Mailadress fir {{SITENAME}}', +'confirmemail_body' => 'E Benotzer, waarscheinlech dir selwer, hutt mat der IP Adress $1 de Benotzerkont "$2" um Site {{SITENAME}} opgemaach. Fir ze bestätegen, datt dee Kont iech wierklech gehéiert a fir d\'E-Mail-Funktiounen um Site {{SITENAME}} z\'aktivéieren, maacht w.e.g. dëse Link an ärem Browser op: $3 @@ -3033,8 +3131,32 @@ Wann dir dëse Benotzerkont *net* opgemaach hutt, maacht w.e.g. dëse Link an ä $5 Sollt et sech net ëm äre Benotzerkont handelen, da maacht de Link *net* op. De Confirmatiounscode ass gëlteg bis de(n) $4.', -'confirmemail_invalidated' => 'Confirmatioun vun der E-Mailadress annulléiert', -'invalidateemail' => "Annulléier d'E-Mailconfirmation", +'confirmemail_body_changed' => 'E Benotzer, wahrscheinlech Dir selwer, vun der IP-Adress $1, +huet d\'E-Mailadress vum Benotzerkont "$2" op dës Adress op {{SITENAME}} geännert. + +Fir ze confirméieren datt dëse Benotzerkont Iech wierklech gehéiert a fir d\'E-Mailfonctiounen op {{SITENAME}} ze reaktivéieren, maacht dës Link an Ärem Browser op: + +$3 + +Wann de Benotzerkont Iech *net* gehéiert, da klickt op dëse Link fir d\'Confirmatioun vun der E-Mailadress auszeschalten: + +$5 + +Dëse Confirmatiouns-Code leeft den $4 of.', +'confirmemail_body_set' => 'Iergendeen, wahrscheinlech Dir selwer, vun der IP-Adress $1, +huet d\'E-Mailadress vum Benotzerkont "$2" op dës Adress op {{SITENAME}} geännert. + +Fir ze confirméieren datt dëse Benotzerkont Iech wierklech gehéiert a fir d\'E-Mailfonctiounen op {{SITENAME}} ze reaktivéieren, maacht dës Link an Ärem Browser op: + +$3 + +Wann de Benotzerkont Iech *net* gehéiert, da klickt op dëse Link fir d\'Confirmatioun vun der E-Mailadress auszeschalten: + +$5 + +Dëse Confirmatiouns-Code leeft den $4 of.', +'confirmemail_invalidated' => 'Confirmatioun vun der E-Mailadress annulléiert', +'invalidateemail' => "Annulléier d'E-Mailconfirmation", # Scary transclusion 'scarytranscludedisabled' => '[Interwiki-Abannung ass ausgeschalt]', @@ -3072,6 +3194,7 @@ $1", 'table_pager_first' => 'Éischt Säit', 'table_pager_last' => 'Lescht Säit', 'table_pager_limit' => '$1 Objete pro Säit weisen', +'table_pager_limit_label' => 'Objete pro Säit:', 'table_pager_limit_submit' => 'Lass', 'table_pager_empty' => 'Keng Resultater', @@ -3128,6 +3251,7 @@ Dir kënnt och [[Special:Watchlist/edit|de Standard Editeur benotzen]].", 'version-specialpages' => 'Spezialsäiten', 'version-parserhooks' => 'Parser-Erweiderungen', 'version-variables' => 'Variabelen', +'version-skins' => 'Skins/Layout', 'version-other' => 'Aner', 'version-mediahandlers' => 'Medien-Ënnerstëtzung', 'version-hooks' => 'Klameren', @@ -3139,6 +3263,13 @@ Dir kënnt och [[Special:Watchlist/edit|de Standard Editeur benotzen]].", 'version-hook-subscribedby' => 'Opruff vum', 'version-version' => '(Versioun $1)', 'version-license' => 'Lizenz', +'version-poweredby-credits' => "Dës Wiki fonctionnéiert mat '''[http://www.mediawiki.org/ MediaWiki]''', Copyright © 2001-$1 $2.", +'version-poweredby-others' => 'anerer', +'version-license-info' => "MediaWiki ass fräi Software; Dir kënnt se weiderginn an/oder s'änneren ënnert de Bedingungen vun der GNU-General Public License esou wéi se vun der Free Softare Foundation publizéiert ass; entweder ënner der Versioun 2 vun der Lizenz, oder (no Ärem Choix) enger spéiderer Versioun. + +MediaWiki gëtt verdeelt an der Hoffnung datt se nëtzlech ass, awer OUNI IERGENDENG GARANTIE; ouni eng implizit Garantie vu Commercialisatioun oder Eegnung fir e bestëmmte Gebrauch. Kuckt d'GPU Geral Public License fir méi Informatiounen. + +Dir misst eng [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie vun der GNU General Public License] mat dësem Programm kritt hunn; wann net da schreift der Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA oder [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html liest se online].", 'version-software' => 'Installéiert Software', 'version-software-product' => 'Produkt', 'version-software-version' => 'Versioun', @@ -3208,6 +3339,15 @@ Gitt den Numm vum Fichier ouni de Prefix \"{{ns:file}}:\" an.", 'tags-edit' => 'änneren', 'tags-hitcount' => '$1 {{PLURAL:$1|Ännerung|Ännerungen}}', +# Special:ComparePages +'comparepages' => 'Säite vergläichen', +'compare-selector' => 'Versioune vu Säite vergläichen', +'compare-page1' => 'Säit 1', +'compare-page2' => 'Säit 2', +'compare-rev1' => 'Versioun 1', +'compare-rev2' => 'Versioun 2', +'compare-submit' => 'Vergläichen', + # Database error messages 'dberr-header' => 'Dës Wiki huet e Problem', 'dberr-problems' => 'Pardon! Dëse Site huet technesch Schwieregkeeten.', @@ -3224,8 +3364,13 @@ Gitt den Numm vum Fichier ouni de Prefix \"{{ns:file}}:\" an.", 'htmlform-float-invalid' => 'De Wäert deen Dir uginn hutt ass keng Zuel.', 'htmlform-int-toolow' => 'De Wäert deen Dir uginn hutt ass ënnert dem Minimum vu(n) $1', 'htmlform-int-toohigh' => 'De Wäert deen Dir uginn hutt ass iwwert dem Maximum vu(n) $1', +'htmlform-required' => 'Dëse Wäert ass verlaangt', 'htmlform-submit' => 'Späicheren', 'htmlform-reset' => 'Ännerungen zrécksetzen', 'htmlform-selectorother-other' => 'Anerer', +# SQLite database support +'sqlite-has-fts' => "$1 ënnerstëtzt d'Volltextsich", +'sqlite-no-fts' => "$1 ënnerstëtzt d'Volltextsich net", + ); diff --git a/languages/messages/MessagesLbe.php b/languages/messages/MessagesLbe.php index 6af09b23..c72fc1bb 100644 --- a/languages/messages/MessagesLbe.php +++ b/languages/messages/MessagesLbe.php @@ -7,6 +7,7 @@ * @ingroup Language * @file * + * @author Amire80 */ $fallback = 'ru'; @@ -42,12 +43,13 @@ $linkTrail = '/^([a-zабвгдеёжзийклмнопрстуфхцчшщъы $messages = array( 'article' => 'Тарих', +'mytalk' => 'На цӀухху-бусу байсса интернетрал лажин', # Cologne Blue skin 'qbedit' => 'Дакьин дуван', -'history' => 'Макьала', -'history_short' => 'Макьала', +'history' => 'Тарих', +'history_short' => 'Тарих', 'edit' => 'Дакьин дуван', 'talkpagelinktext' => 'Ихтилат', 'talk' => 'Ихтилат', @@ -69,6 +71,18 @@ $messages = array( 'nstab-template' => 'Шаблон', 'nstab-category' => 'Категория', +# Login and logout pages +'userlogin' => 'Системалухь цу уссарав бусан', +'logout' => 'Уккаву', +'userlogout' => 'Уккаву', + +# Edit pages +'minoredit' => 'Мюрщсса дахханашиву', +'watchthis' => 'Ва лажин ябитаврил сияхӀравун ххи дан', +'savearticle' => 'Лажин ядан', +'preview' => 'Цалсса ххалбаву', +'showpreview' => 'Цалсса ххалбаву', + # Recent changes 'recentchanges' => 'Махъсса дахханашивурту', @@ -77,11 +91,26 @@ $messages = array( 'filehist-user' => 'Гьурттучув', # Miscellaneous special pages -'move' => 'ЦIа даххана дан', +'move' => 'ЦӀа даххана дан', # Special:Log 'specialloguserlabel' => 'Гьурттучув:', +# E-mail user +'emailuser' => 'ГьурттучувначӀансса чагьар', + +# Watchlist +'watchlist' => 'Ябитаврил сияхӀ', +'watch' => 'Хъирив агьан', +'unwatch' => 'Хъирив къаагьан', + +# Contributions +'contributions' => 'Гьурттучунал бутӀа', +'mycontris' => 'Ттул даву', + 'sp-contributions-talk' => 'Ихтилат', +# Move page +'move-watch' => 'Ва лажин ябитаврил сияхӀравун ххи дан', + ); diff --git a/languages/messages/MessagesLez.php b/languages/messages/MessagesLez.php index bcf9f9e8..6fc80fa0 100644 --- a/languages/messages/MessagesLez.php +++ b/languages/messages/MessagesLez.php @@ -10,11 +10,24 @@ * @author Amikeco * @author Andrijko Z. * @author Namik + * @author Reedy */ $messages = array( +# User preference toggles +'tog-enotifusertalkpages' => 'Э-пучта заз ракъурун, зи Ихтилатрин чар дегиш жедайла', + +'underline-always' => 'Гьамиша', +'underline-never' => 'Садрани', + # Dates +'sunday' => 'Гьяд', 'monday' => 'Ислен', +'tuesday' => 'Саласа', +'wednesday' => 'Арбе', +'thursday' => 'Хемис', +'friday' => 'Жуьмя', +'saturday' => 'Киш', 'sun' => 'Гья', 'mon' => 'Исл', 'tue' => 'Сал', @@ -60,10 +73,17 @@ $messages = array( 'dec' => 'Фaн', # Categories related messages -'pagecategories' => '{{PLURAL:$1|Кlватlал|Кlватlалар}}', -'category_header' => 'Чарар кlватlалда "$1"', -'subcategories' => 'Кlватlалринпай', -'hidden-categories' => '{{PLURAL:$1|Кlевнавай кlватlалрин кьадар|Кlевнавай кlватlалрин кьадар}}', +'pagecategories' => '{{PLURAL:$1|Кlватlал|Кlватlалар}}', +'category_header' => 'Чарар кlватlалда "$1"', +'subcategories' => 'Кlватlалринпай', +'category-media-header' => 'Шикил кlватlалда "$1"', +'category-empty' => "''Кlватlалда алай вахтунда авач чарар, кхьинар ва шикилар.''", +'hidden-categories' => '{{PLURAL:$1|Кlевнавай кlватlалрин кьадар|Кlевнавай кlватlалрин кьадар}}', +'category-subcat-count' => '{{PLURAL:$2|Кlватlалда ава са чар. |И кlватlалда ава {{PLURAL:$1|кlватlалдин кьатl|$1 кlватlалдин кьатlар}}, виридакай $2 .}}', +'category-article-count' => '{{PLURAL:$2|Кlватlалда ава са чар.|Къведай {{PLURAL:$1|чар|$1 чарчин}} кlватlалда $2 виридкай.}}', +'category-file-count' => '{{PLURAL:$2|Кlватlалда ава са чар.|Къведай {{PLURAL:$1|файл|$1 файлди}} кlватlалда $2 виридкай.}}', +'listingcontinuesabbrev' => 'баш.хъувун', +'noindex-category' => 'Noindexed чарар', 'about' => 'Хакъиндай', 'newwindow' => '(акъай жеда цlийи пенжерда)', @@ -77,22 +97,22 @@ $messages = array( 'qbedit' => 'Дегишарун', 'qbmyoptions' => 'Зи чар', 'qbspecialpages' => 'Кьетlен хъувун', +'faq' => 'Суалар ва жавабар', # Vector skin -'vector-action-delete' => 'Къакъудун', -'vector-action-move' => 'Юзун', -'vector-action-protect' => 'Хуьн', -'vector-action-undelete' => 'Къакъудун', -'vector-namespace-category' => 'Кlватlалар', -'vector-namespace-image' => 'Шикил', -'vector-namespace-main' => 'Хъувун', -'vector-namespace-mediawiki' => 'Хъагъаз', -'vector-namespace-talk' => 'Рахун', -'vector-namespace-template' => 'Таблиц', -'vector-view-create' => 'Туькlуьрун', -'vector-view-edit' => 'Дегишарун', -'vector-view-viewsource' => 'Къалурун булах', -'namespaces' => 'Тlарарин гегьенш', +'vector-action-addsection' => 'Тема ктун хъувун', +'vector-action-delete' => 'Къакъудун', +'vector-action-move' => 'Юзун', +'vector-action-protect' => 'Хуьн', +'vector-action-undelete' => 'Къакъудун', +'vector-view-create' => 'Туькlуьрун', +'vector-view-edit' => 'Дегишарун', +'vector-view-history' => 'Тарихдиз тамашун', +'vector-view-view' => 'Кlелун', +'vector-view-viewsource' => 'Къалурун булах', +'actions' => 'Юзун', +'namespaces' => 'Тlарарин гегьенш', +'variants' => 'Жуьреяр', 'errorpagetitle' => 'ГъалатI', 'returnto' => 'Хкун $1.', @@ -117,47 +137,59 @@ $messages = array( 'protectthispage' => 'Xуьн и хъувун', 'newpage' => 'ЦIийи хъувун', 'talkpage' => 'И чараркай эхтилат', -'talkpagelinktext' => 'Рахун', +'talkpagelinktext' => 'Ихтилат', 'personaltools' => 'Инсан aлатl', 'talk' => 'Рахун', 'views' => 'Рахунар', 'toolbox' => 'Aлаткъаб', 'otherlanguages' => 'Масса чIаларал', 'redirectedfrom' => '(Ракъур хъувуна $1)', +'redirectpagesub' => 'Ракъур хъувунин чар', 'lastmodifiedat' => 'И чар эхиримжи сеферда дигишарна $1, ди $2', 'jumpto' => 'Къудгъунун:', 'jumptonavigation' => 'къекъуьн', 'jumptosearch' => 'ахтармишун', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). -'aboutsite' => 'Хакъиндай {{SITENAME}}', -'aboutpage' => 'Project:Хакъиндай', -'copyright' => 'Шаирдин Контент эхтияр иниз $1', -'disclaimers' => 'Герек тахьай', -'disclaimerpage' => 'Project:Виридан хабарар', -'edithelp' => 'Дегишарун чара', -'edithelppage' => 'Help:Дегишарун', -'mainpage' => 'Асул хъувун', -'privacy' => 'Политика конфедециальностин', -'privacypage' => 'Project:Политика конфедициальностин', - -'ok' => 'Э(кхьин)', -'retrievedfrom' => 'Акъудун идай $1', -'youhavenewmessages' => 'Вунз ава $1 ($2).', -'newmessageslink' => 'цlийи хъагъаз', -'editsection' => 'дегишарун', -'editold' => 'дегишарун', -'editlink' => 'Дигишарун', -'viewsourcelink' => 'къалурун булах', -'editsectionhint' => 'Дегишарун пай: $1', -'toc' => 'Къейда', -'showtoc' => 'къаларун', -'hidetoc' => 'чуьнуьхун', -'site-rss-feed' => '$1 РСС Xуьрек', -'site-atom-feed' => '$1 Атом Xуьрек', -'page-rss-feed' => '"$1" РСС Xуьрек', -'page-atom-feed' => '"$1" Атом Xуьрек', -'red-link-title' => '$1 (чар аватуш)', +'aboutsite' => 'Хакъиндай {{SITENAME}}', +'aboutpage' => 'Project:Хакъиндай', +'copyright' => 'Шаирдин Контент эхтияр иниз $1', +'copyrightpage' => '{{ns:project}}:Туькlуьрчидин этияр', +'currentevents' => 'Физвай хабар', +'currentevents-url' => 'Project:Физай хакъидай', +'disclaimers' => 'Герек тахьай', +'disclaimerpage' => 'Project:Виридан хабарар', +'edithelp' => 'Дегишарун чара', +'edithelppage' => 'Help:Дегишарун', +'helppage' => 'Help:Къейда', +'mainpage' => 'Асул хъувун', +'mainpage-description' => 'Чlехиди', +'portal' => 'Джуьмят', +'portal-url' => 'Project:Портал джуьмятдин', +'privacy' => 'Политика конфедециальностин', +'privacypage' => 'Project:Политика конфедициальностин', + +'badaccess' => 'Гъалатlдин эхтияр', + +'ok' => 'Э(кхьин)', +'retrievedfrom' => 'Акъудун идай $1', +'youhavenewmessages' => 'Вунз ава $1 ($2).', +'newmessageslink' => 'цlийи хъагъаз', +'newmessagesdifflink' => 'Эхиримжи дегишарунар', +'editsection' => 'дегишарун', +'editold' => 'дегишарун', +'viewsourceold' => 'Тамашун', +'editlink' => 'Дигишарун', +'viewsourcelink' => 'къалурун булах', +'editsectionhint' => 'Дегишарун пай: $1', +'toc' => 'Къейда', +'showtoc' => 'къаларун', +'hidetoc' => 'чуьнуьхун', +'site-rss-feed' => '$1 РСС Xуьрек', +'site-atom-feed' => '$1 Атом Xуьрек', +'page-rss-feed' => '"$1" РСС Xуьрек', +'page-atom-feed' => '"$1" Атом Xуьрек', +'red-link-title' => '$1 (чар аватуш)', # Short words for each namespace, by default used in the namespace tab in monobook 'nstab-main' => 'Хъувун', @@ -170,63 +202,146 @@ $messages = array( 'nstab-category' => 'КIваталар', # General errors -'viewsource' => 'Къаларун булах', -'viewsourcefor' => 'идаз $1', +'error' => 'Гъалатl', +'missing-article' => 'Базадай жагъанач макъаладин кхьин, гьама жагъан кlанзайтир, "$1" $2. + +Гьама жагъанач вучиз лагьайтlа, ишлемишна иски дегишарунин дафтlар ва алукьун чlурнавай. + +Гьам гьакlа тушиз хьайитlа, квез жагъана гъалатl ишлемишзавай программада. +Къавахадиз лагь [[Special:ListUsers/sysop|administrator]], вуч ийизва хабар URL.', +'missingarticle-rev' => '(жуьре#: $1)', +'badtitle' => 'Чарчин тlар', +'badtitletext' => 'Жагъурзавай чар дуьз туш, ичlизва, чlурукl къалурна чlалан арада ва вики титул. Ада жеда сад ва гзаф кхьнар, гьабур тlарцlе ишлемиш жедач.', +'viewsource' => 'Къаларун булах', +'viewsourcefor' => 'идаз $1', # Login and logout pages -'yourname' => 'Ишлемишчидин тIар', +'yourname' => 'Ишлемишчидин лакlаб', 'yourpassword' => 'Куьлег', +'yourpasswordagain' => 'Икрар хъйа куьлег:', +'remembermypassword' => 'Рекlел хуьн Гьахун и браузердиз(артух тушиз 1$ {{PLURAL:$1|югъ|йикъар}})', 'login' => 'Гьахьун', 'nav-login-createaccount' => 'Чарчел фин / цIийи чар туькIуьрун', +'loginprompt' => 'Куьне куькlуьрна кlанзава куки гьахьна {{SITENAME}}.', 'userlogin' => 'Чарчел фин / цlийи чар туькlуьрун', 'userloginnocreate' => 'Гьахьун', 'logout' => 'ЭкъечIун', 'userlogout' => 'ЭкъечIун', +'nologin' => 'Квез авач кхьинуни чар? $1.', +'nologinlink' => 'Туькlуьрун кlелунин кхьин', +'createaccount' => 'Туькlуьрун кlелунин кхьин', +'gotaccount' => 'Квез авни акаунт:$1', 'gotaccountlink' => 'Гьахьун', 'createaccountmail' => 'Авай e-mail', +'createaccountreason' => 'Кар', 'mailmypassword' => 'Э-пучтадин цIийи куьлег', 'loginlanguagelabel' => 'ЧIалар: $1', # Password reset dialog +'resetpass' => 'Куьлег дегишарун', 'oldpassword' => 'Иски куьлег:', 'newpassword' => 'ЦIийи куьлег:', # Edit page toolbar -'bold_sample' => 'Сакlус яцlу кхьин', -'bold_tip' => 'Сакlус яцlу кхьин', -'italic_sample' => 'Къвалахъ алхьанай кхьин', -'italic_tip' => 'Къвалахъ алхьанай кхьин', -'media_tip' => 'Файлдин цlар', +'bold_sample' => 'Сакlус яцlу кхьин', +'bold_tip' => 'Сакlус яцlу кхьин', +'italic_sample' => 'Къвалахъ алхьанай кхьин', +'italic_tip' => 'Къвалахъ алхьанай кхьин', +'link_sample' => 'Алукьунин цlарцlин тlар', +'link_tip' => 'Кьенин алукьунар', +'extlink_sample' => 'http://www.example.com алукьунин тlар', +'extlink_tip' => 'Къецин алукьун (рекlел хуьн http:// префикс)', +'headline_sample' => 'Кьлин кхьин', +'headline_tip' => 'Кьадар 2 кьилин', +'nowiki_sample' => 'Тун дегиш тавунай кхьин инна', +'nowiki_tip' => 'Сямиш тавун вики къайда хъувун', +'image_tip' => 'Тунавай шкил', +'media_tip' => 'Файлдин цlар', +'sig_tip' => 'Куьн къул ва вахт', +'hr_tip' => 'Ярх хьанавай цlар (гзаф ишлемишмир)', # Edit pages -'summary' => 'Къейда:', -'minoredit' => 'И гъвечIи дегишарун', -'watchthis' => 'Гелкъуьн и хъувун', -'savearticle' => 'Хуьн хъувун', -'showdiff' => 'Къаларун дегишарун', -'loginreqlink' => 'гьахьун', -'newarticle' => '(ЦIийи)', -'editing' => 'Дегишарун $1', -'editingsection' => 'Дегишарун $1 (пай)', +'summary' => 'Къейда:', +'subject' => 'Тема/кьилер', +'minoredit' => 'И гъвечIи дегишарун', +'watchthis' => 'Гелкъуьн и хъувун', +'savearticle' => 'Хуьн хъувун', +'preview' => 'Сифте', +'showpreview' => 'Сефте килигун', +'showdiff' => 'Къаларун дегишарун', +'anoneditwarning' => "'''Дугъридан:''' Куьн хакъидайдиз гьахьнач Куьн IP-адрес дегишунрин кьиспесдиз кхьида и чарчин.", +'summary-preview' => 'Сифте килигун паталди:', +'loginreqlink' => 'гьахьун', +'newarticle' => '(ЦIийи)', +'newarticletext' => "Куь фена макъаладал, исятда авачир. Цlийи чар авун паталди,тажумара кхьинар пенжнрда, кlене авай (кл. [[{{MediaWiki:Helppage}}|куьмекунин чар]] гзаф хабар къачун паталди).Куьне инна гъалатlа, эцига кнопкадал 'кьулухъ''''' куьн браузерда.", +'noarticletext' => 'Исята ава кхьинар гьа и чарчел. +Квевай жезва [[Special:Search/{{PAGENAME}}|жагъуриз тlар лугьузавай лакlаб]] масса макъалайра, + [{{fullurl: {{# къайдадин: Фин}} | чар = {{FULLPAGENAMEE}}}} жагъуриз кьетхвер кхьинар дафтlара], +ва [{{fullurl: {{FULLPAGENAME}} | юзунар = Дегиш}} туькlуьрун чар] .', +'noarticletext-nopermission' => 'Ава алай вахтунда кхьин чарчел. +Квевай жезва [[Special:Search/{{PAGENAME}}| жагъуриз гьа тlар]] масса макъалара, +амма [{{fullurl:{{#Special:Рак}}|чарар={{FULLPAGENAMEE}}}} жагъуриз ухшар кхьинар дафтlара].', +'previewnote' => "'''Рикlел хуьх, имма сифте килигун я.''' Дегишунар гьеле хвенач!", +'editing' => 'Дегишарун $1', +'editingsection' => 'Дегишарун $1 (пай)', +'copyrightwarning' => "Буюр, килиг дуьздиз, вири куьн {{SITENAME}} килигз ава акъуднавади $2(кл. $1 клиг хъувун). Квез кlанзаваштlа, куьн кхьинар азадиз чкlана ва дегишариз гьар кlанзайда, тамир абур инна.
    Куьнени шагьидзава, куьни я автор ктунай дегишунар, ва кхьин хъувунай жуьмятдин кхьинрай ва азад чкадай. '''Атордин этияр авачиз'''", +'templatesused' => '{{PLURAL:$1|Шаблон|Шаблонар}} ишлемишзавай гьа и чарчел:', +'templatesusedpreview' => '{{PLURAL:$1|Шаблон|Шаблонар}},илемишзавай дуьз клигунра:', +'template-protected' => '(хуьн)', +'template-semiprotected' => '(са кlус пад кьун)', +'hiddencategories' => 'И чар квайди я {{PLURAL: $1 | 1 кlевнавай кlватlал | $1 кlевнавабрин кlватlалар}}:', +'permissionserrorstext-withaction' => 'Квез авач ахтияр $2, идаз {{PLURAL:$1|багьна|багьнаяр}}:', +'recreate-moveddeleted-warn' => "'''Килиг: квез туькlуьриз кlанзава чар, чар сифте чlурнавай''' + + +Куь клигна кlанзава геркзатlа дегишар хъувун гьа чар. +Чlурунар ва юзунар чарчин дафтlарда гана квез куьмек яз.", +'moveddeleted-notice' => 'Чар чlурнай. Чlурун ва юзурун дафтlарда чарчин къалурна кlеник.', + +# Parser/template warnings +'post-expand-template-inclusion-warning' => "'''Килиг''' Шаблондин кьадар экезава. +Са шаблонор кутадач.", +'post-expand-template-inclusion-category' => 'Чарар, шаблодин кьадар экезай', +'post-expand-template-argument-warning' => "'''Килиг''' И чарче ава са шаблон, гьадан кьадар экеди я. +Гьа аргументар акъайна.", +'post-expand-template-argument-category' => 'Чарче, къейда ава аргументрин шаблонра', # History pages +'viewpagelogs' => 'Къалурун ктаб и чарчиз', +'currentrev-asof' => 'Эхиримжи клиг хъувун $1', 'revisionasof' => 'Килиг хъувун иниз $1', +'revision-info' => 'Жуьре идалай $1, идалди $2', 'previousrevision' => '←Иски кьелун', +'nextrevision' => 'Цlийи жуьреяр →', +'currentrevisionlink' => 'Эхиремжи килигун', 'cur' => 'ток', 'next' => 'къведайди', 'last' => 'эхиримжи', 'page_first' => 'сифте', 'page_last' => 'эхиримжи', +'histlegend' => "Агъавурда тун: Марк радио къапунин гьисабун килигун паталди эцига Тур ва кнопка кlенин.
    Къалурун:'''({{int:cur}})'''= эхиремджидлай ревизидла,'''({{int:last}})'''=алатай жуьредлай,'''{{int:minoreditletter}}'''=сакlус дегишар.", 'history-fieldset-title' => 'Чарчин тарих', +'history-show-deleted' => 'Са чlурунар', +'histfirst' => 'Садлагьай', 'histlast' => 'Гежа', +# Revision feed +'history-feed-item-nocomment' => '$1 идай $2', + # Revision deletion 'rev-delundel' => 'къалур/кIевун', 'revdelete-show-file-submit' => 'Э', 'revdelete-log' => 'Кар', +'revdelete-logentry' => 'Дегишарна акунвал "[[$1]]"', 'revdel-restore' => 'къакъудун', +'revdel-restore-deleted' => 'Чlурна дегишунар', +'revdel-restore-visible' => 'Аквазай дегишунар', 'pagehist' => 'Хъувун тарих', +'revdelete-content' => 'Къйеда', 'revdelete-uname' => 'ишлемишчидин тIар', +'revdelete-hid' => 'чуьнуьх авунай $1', +'revdelete-log-message' => '$1 идай $2 {{PLURAL:$2|Жуьре|Жуьреяр}}', +'revdelete-offender' => 'Автордин жуьре:', # History merging 'mergehistory-reason' => 'Кар', @@ -235,35 +350,61 @@ $messages = array( 'revertmerge' => 'Къакъудунар', # Diffs -'lineno' => 'ЦIар $1:', -'editundo' => 'кукlварин', +'history-title' => 'Кьиспес $1', +'difference' => '(Къакъатунар жуьрейрин арада)', +'lineno' => 'ЦIар $1:', +'compareselectedversions' => 'Гекъиг хъувун', +'editundo' => 'кукlварин', +'diff-multi' => '({{PLURAL:$1|Юкьван жуьреяр|$1 юкьван жуьрейри}} ава {{PLURAL:$2|са ишлемишчи|$2 ишлемишчийри}} къалурнач)', # Search results -'searchresults' => 'Ахтурмишун эхир', -'searchresults-title' => 'Ахтармишунин эхир идаз $1', -'searchresulttext' => 'Атун патал артухан жагъуриникай хабарар {{SITENAME}}, килиг [[{{MediaWiki:Helppage}}|{{int:help}}]].', -'searchsubtitleinvalid' => "Куьне жагъурзавай '''$1'''", -'notitlematches' => 'Авач чарчин кьил матчар', -'notextmatches' => 'Авач чарчин кьил матчар', -'prevn' => 'алатайбур {{PLURAL:$1|$1}}', -'nextn' => 'къведай {{PLURAL:$1|$1}}', -'viewprevnext' => 'Къаларун ($1 {{int:pipe-separator}} $2) ($3)', -'searchprofile-images' => 'Шикилдин мавзу', -'search-result-size' => '$1 ({{PLURAL:$2|1 гаф|$2 гафар}})', -'search-redirect' => '(кхьин хуьн) $1', -'search-section' => '(пенджердин кьатl$1)', -'search-suggest' => 'Куьне икl лугьузани: $1', -'search-interwiki-caption' => 'Мукьва проект', -'search-interwiki-more' => '(хелин)', -'search-mwsuggest-enabled' => 'тапшуругъар аваз', -'search-mwsuggest-disabled' => 'тапшуругъар авач', -'searchall' => 'вири', -'powersearch' => 'Ахтармишун', -'powersearch-legend' => 'Ахтармишун', -'powersearch-ns' => 'Жагъурун тlарарин арада:', -'powersearch-redir' => 'Рахъурхъунар цlарцlел', -'powersearch-field' => 'Идаз жагъурун', -'powersearch-toggleall' => 'Вири', +'searchresults' => 'Ахтурмишун эхир', +'searchresults-title' => 'Ахтармишунин эхир идаз $1', +'searchresulttext' => 'Атун патал артухан жагъуриникай хабарар {{SITENAME}}, килиг [[{{MediaWiki:Helppage}}|{{int:help}}]].', +'searchsubtitle' => 'Куьне жагъурзай \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1| чарар, гатlузавай "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|вири чарар алукьзавай "$1"]])', +'searchsubtitleinvalid' => "Куьне жагъурзавай '''$1'''", +'notitlematches' => 'Авач чарчин кьил матчар', +'notextmatches' => 'Авач чарчин кьил матчар', +'prevn' => 'алатайбур {{PLURAL:$1|$1}}', +'nextn' => 'къведай {{PLURAL:$1|$1}}', +'prevn-title' => 'Алатай $1 {{PLURAL:$1|къайда|къайдаяр}}', +'nextn-title' => 'Къведай $1 {{PLURAL:$1|къайда|къайдаяр}}', +'shown-title' => 'Къалурун $1 {{PLURAL:$1|Дарамат|Дарамат}} чарчел', +'viewprevnext' => 'Къаларун ($1 {{int:pipe-separator}} $2) ($3)', +'searchmenu-exists' => "'''Ава чар тlар алай \"[[:\$1]]\" гьа и викида.'''", +'searchmenu-new' => "'''Туькlуьрун чар \"[[:\$1]]\" и викида!'''", +'searchprofile-articles' => 'Чарчин идаратар', +'searchprofile-project' => 'Чар кхьинрин ва хакъидайрин', +'searchprofile-images' => 'Шикилдин мавзу', +'searchprofile-everything' => 'Вири', +'searchprofile-advanced' => 'Ахъайунар', +'searchprofile-articles-tooltip' => 'Жагъурун инна $1', +'searchprofile-project-tooltip' => 'Жагъурун инна $1', +'searchprofile-images-tooltip' => 'Шикилар шагъурун', +'searchprofile-everything-tooltip' => 'Сайтда жагъурун (Ихтилатдин чарар галаз)', +'searchprofile-advanced-tooltip' => 'Жагъурун тlарарун арада', +'search-result-size' => '$1 ({{PLURAL:$2|1 гаф|$2 гафар}})', +'search-result-category-size' => '{{PLURAL:$1|1 ишлемишчи|$1 ишлемишчиди}} ({{PLURAL:$2|1 кlватlалдин пай|$2 кlватlалдин паяр}}, {{PLURAL:$3|1 файл|$3 файлар}})', +'search-redirect' => '(кхьин хуьн) $1', +'search-section' => '(пенджердин кьатl$1)', +'search-suggest' => 'Куьне икl лугьузани: $1', +'search-interwiki-caption' => 'Мукьва проект', +'search-interwiki-default' => '$1(жавабар)', +'search-interwiki-more' => '(хелин)', +'search-mwsuggest-enabled' => 'тапшуругъар аваз', +'search-mwsuggest-disabled' => 'тапшуругъар авач', +'searchrelated' => 'Галкlанавай', +'searchall' => 'вири', +'showingresultsheader' => "{{PLURAL: \$5| кьадар'''\$1''' идай '\$3'''''| кадарай'''\$1 - \$2''' идаз'''\$3'''}} идаз''' \$4'' \"", +'nonefound' => "'''Асулзава''': Са шумуд тlарар жагъурзава хвенайвал. +Клига префикс \"вири\" жагъурун паталди кхьинар (ихтилат ва рахунин чарар, шаблонар ва масабу), ва ишлемишна кlанзавай тlарар префикс патала.", +'search-nonefound' => 'Авай жагъурунда ганача са затlни.', +'powersearch' => 'Ахтармишун', +'powersearch-legend' => 'Ахтармишун', +'powersearch-ns' => 'Жагъурун тlарарин арада:', +'powersearch-redir' => 'Рахъурхъунар цlарцlел', +'powersearch-field' => 'Идаз жагъурун', +'powersearch-toggleall' => 'Вири', # Preferences page 'preferences' => 'Туькlуьрун', @@ -306,34 +447,61 @@ $messages = array( # Rights 'right-edit' => 'Дегишар хъувун', +# User rights log +'rightslog' => 'Эхтияр Ишлемишчидин дафтlар', + # Associated actions - in the sentence "You do not have permission to X" 'action-edit' => 'дигишарун и чарар', # Recent changes -'rcnote' => "КIеник {{PLURAL:$1|is '''1''' change|эхиримжи '''$1''' дегишунар}} заманада {{PLURAL:$2|day|'''$2''' йикъар}}, икIа $5, $4", -'rcshowhideminor' => '$1 бицlи дегишунар', -'rcshowhidebots' => '$1 бот', -'rcshowhideliu' => '$1 Системадиз гьахьнай ишлемишчияр', -'rcshowhideanons' => ' +'nchanges' => '$1 {{PLURAL:$1|дегиш|дегишунар}}', +'recentchanges' => 'Эхиримжи дегишун', +'recentchanges-legend' => 'Туькlуьрун гилан дегишар', +'recentchangestext' => 'Сифте кьилелай гьисабнава эхиримжи дегишунар викида гьа макъалада', +'recentchanges-feed-description' => 'Сифте кьилелай гьисабнава эхиримжи дегишунар викида и макъалада', +'recentchanges-label-newpage' => 'И ишлемишчиди цlийи чар туькlуьрна', +'recentchanges-label-minor' => 'И гъвечlи дегишарун', +'recentchanges-label-bot' => 'Дегишунар авуна ботди', +'recentchanges-label-unpatrolled' => 'И ишлемишчи ахтармишзач', +'rcnote' => "КIеник {{PLURAL:$1|is '''1''' change|эхиримжи '''$1''' дегишунар}} заманада {{PLURAL:$2|day|'''$2''' йикъар}}, икIа $5, $4", +'rcnotefrom' => "Кlеник къалурна дегишунар идлай '''$2''' (идалди '''$1''' къалурна).", +'rclistfrom' => 'Къалурун дегишунар идай: $1', +'rcshowhideminor' => '$1 бицlи дегишунар', +'rcshowhidebots' => '$1 бот', +'rcshowhideliu' => '$1 Системадиз гьахьнай ишлемишчияр', +'rcshowhideanons' => ' $1 Кlевхьанай ишлемишчи', -'rcshowhidemine' => '$1 зин дигишунар', -'rclinks' => 'Къалурун эхиримжи $1 са сятинлай $2 йикъал $3', -'diff' => 'тафават', -'hist' => 'тарих', -'hide' => 'Чуьнуьхун', -'show' => 'Къаларун', -'minoreditletter' => 'г', -'newpageletter' => 'ЦI', -'boteditletter' => 'б', +'rcshowhidepatr' => '$1 шаидвал авунай дегишунар', +'rcshowhidemine' => '$1 зин дигишунар', +'rclinks' => 'Къалурун эхиримжи $1 са сятинлай $2 йикъал $3', +'diff' => 'тафават', +'hist' => 'тарих', +'hide' => 'Чуьнуьхун', +'show' => 'Къаларун', +'minoreditletter' => 'г', +'newpageletter' => 'ЦI', +'boteditletter' => 'б', +'rc-enhanced-expand' => 'Къалурун (герекзава JavaScript)', +'rc-enhanced-hide' => 'Кlевун метлеб', # Recent changes linked -'recentchangeslinked' => 'Сахьтин дегишунар', -'recentchangeslinked-page' => 'Чарчин тlар:', +'recentchangeslinked' => 'Сахьтин дегишунар', +'recentchangeslinked-toolbox' => 'Галкlанавай дегишунар', +'recentchangeslinked-title' => 'Дегинарун, галкlанавай "$1"', +'recentchangeslinked-noresult' => 'Са дегишунарни галкlанавай алукьунра кхьенай вахтунда.', +'recentchangeslinked-summary' => "Цlарар кlватlал эхиримжи дегишунар чарарал, чар алукьзавай (ва экъечlзавай къалурнавай кlватlалдай).Чарар идаз [[Special:Watchlist|your watchlist]] жезава '''викlегь'''.", +'recentchangeslinked-page' => 'Чарчин тlар:', +'recentchangeslinked-to' => 'Къалур дегишунар и чарарал, алукьзавай къалурнай чарчел', # Upload 'upload' => 'Парвиниз шикил', +'uploadlogpage' => 'Кхьин хъувун тlар', +'filedesc' => 'Резуьме', 'uploadedimage' => 'Цун хъувун"[[$1]]"', +'license' => 'Лицинзироватун:', +'license-header' => 'Лицинзираватун', + # Special:ListFiles 'listfiles_date' => 'Нумра', 'listfiles_name' => 'ТIар', @@ -341,18 +509,27 @@ $1 Кlевхьанай ишлемишчи', 'listfiles_size' => 'Кьадар', # File description page -'file-anchor-link' => 'Шикил', -'filehist' => 'Шикил тарих', -'filehist-deleteall' => 'вири къакъудун', -'filehist-deleteone' => 'къакъудун', -'filehist-current' => 'ток', -'filehist-datetime' => 'Югъ/Заман', -'filehist-thumb' => 'Бицlи шикилдал', -'filehist-thumbtext' => 'Бицlи шкилдал, версидиз $1', -'filehist-user' => 'Ишлемишчи', -'filehist-comment' => 'Рахунар', -'imagelinks' => 'Файлдин цlар', -'shared-repo-from' => 'идай $1', +'file-anchor-link' => 'Шикил', +'filehist' => 'Шикил тарих', +'filehist-help' => 'Эциг заман/вахт, шикил килигун патал, гьа и вахтунда авай.', +'filehist-deleteall' => 'вири къакъудун', +'filehist-deleteone' => 'къакъудун', +'filehist-revert' => 'Хтун хъувун', +'filehist-current' => 'ток', +'filehist-datetime' => 'Югъ/Заман', +'filehist-thumb' => 'Бицlи шикилдал', +'filehist-thumbtext' => 'Бицlи шкилдал, версидиз $1', +'filehist-user' => 'Ишлемишчи', +'filehist-dimensions' => 'Кьадарар', +'filehist-comment' => 'Рахунар', +'imagelinks' => 'Файлдин цlар', +'linkstoimage' => 'Къведай {{PLURAL: $1 | чар алукьзавай | $1 чарар алукьзава}} гьа и файлдал', +'nolinkstoimage' => 'Ава чарар алукьзавай и шикилдал', +'sharedupload' => 'И шикил $1 масса хакъидайра ишлемишатlа жезава.', +'sharedupload-desc-here' => 'И шикил $1 ишлемишайтlа жеда маса хакъидайра. +Кхьенар жувандал [$2 агъавурдин чар] къалурнава кlеник.', +'uploadnewversion-linktext' => 'Хтун хъувун цlийи жюреяр и шкилдин', +'shared-repo-from' => 'идай $1', # File reversion 'filerevert-comment' => 'Кар', @@ -364,9 +541,14 @@ $1 Кlевхьанай ишлемишчи', # MIME search 'mimesearch' => 'MIME ахтармишун', +# Random page +'randompage' => 'Гьакlан макъала', + # Statistics 'statistics' => 'Статистика', +'disambiguationspage' => 'emplate:disambig', + 'brokenredirects-edit' => 'дегишарун', 'brokenredirects-delete' => 'къакъудун', @@ -374,8 +556,10 @@ $1 Кlевхьанай ишлемишчи', 'nbytes' => '$1 {{PLURAL:$1|байт|байтар}}', 'nmembers' => '$1 {{PLURAL:$1|юлдаш|юлдашар}}', 'lonelypages' => 'Eтим xъувун', +'prefixindex' => 'Вири чарар префикс авай', 'shortpages' => 'Куьруь хъувун', 'longpages' => 'Яргъи хъувун', +'usercreated' => 'Туькlуьрнава идай $1 идаз $2', 'newpages' => 'ЦIийи хъувун', 'move' => 'Юзун', 'movethispage' => 'Юзун и хъувун', @@ -383,8 +567,9 @@ $1 Кlевхьанай ишлемишчи', 'pager-older-n' => '{{PLURAL:$1|иски 1|иски $1}}', # Book sources -'booksources' => 'Ктаб булах', -'booksources-go' => 'Фин', +'booksources' => 'Ктаб булах', +'booksources-search-legend' => 'Жагъурун алукьзавай ктабар', +'booksources-go' => 'Фин', # Special:Log 'log' => 'Ктабар', @@ -392,31 +577,47 @@ $1 Кlевхьанай ишлемишчи', # Special:AllPages 'allpages' => 'Вири хъувун', 'alphaindexline' => '$1 -лай $2 -ди', +'prevpage' => 'Алатай чар ($1)', 'allpagesfrom' => 'Къалур хъувун,идалай гатIунай:', +'allpagesto' => 'Акъудан чарар, куьтягь жезвай:', 'allarticles' => 'Вири хъувун', 'allpagesnext' => 'Къведайди', 'allpagessubmit' => 'Фин', +# Special:Categories +'categories' => 'Кlватlалар', + # Special:LinkSearch -'linksearch-ok' => 'Ахтармишун', +'linksearch' => 'Къецlин алукьунар', +'linksearch-ok' => 'Ахтармишун', +'linksearch-line' => '$1 алукьун идал $2', # Special:Log/newusers 'newuserlogpage' => 'Туькlуьрун ишлемишчидин ктаб', 'newuserlog-create-entry' => 'ЦIийи ишлемишчидин чин', +# Special:ListGroupRights +'listgrouprights-members' => '(цlацlидин кlватlалар)', + # E-mail user 'emailuser' => 'Къагъаз масса ишлемишчидиз', 'emailfrom' => 'Идай', 'emailmessage' => 'Хъагъаз', # Watchlist -'watchlist' => 'Ахтармишунин чар', -'mywatchlist' => 'Ахтаришунин чар', -'addedwatch' => 'Ктун хъувун ,ахтармишзай чарчхъ', -'watch' => 'Гелкъуьн', -'watchthispage' => 'Гелкъуьн и хъувун', -'unwatch' => 'Ишлемиш тийизвай', -'wlshowlast' => 'Къалур эхирижи $1 сятинлай $2 йикъалди $3', +'watchlist' => 'Ахтармишунин чар', +'mywatchlist' => 'Ахтаришунин чар', +'watchlistfor2' => 'Адаз $1 $2', +'addedwatch' => 'Ктун хъувун ,ахтармишзай чарчхъ', +'addedwatchtext' => "Чар \"[[:\$1]]\" тун хъувунай куьн [[Special:Watchlist|watchlist]]. Къвезмай дегишунар и чарчел ва галкlанавай чарчихъ ихтилатар жеда инна, ахъатдава \"сакlус яцlу''''' инна [[Special:RecentChanges|list of recent changes]] гьам кьизил авун.", +'removedwatch' => 'Чlурнава ахтармишзавай цlарцlяй', +'removedwatchtext' => 'Чар "[[:$1]]" Идай чlурнай [[Special:Watchlist|ахтармишунин цlарар]].', +'watch' => 'Гелкъуьн', +'watchthispage' => 'Гелкъуьн и хъувун', +'unwatch' => 'Ишлемиш тийизвай', +'watchlist-details' => '{{PLURAL:$1|$1 чар|$1 чарар}} куьн цlар, ихтилатрин чарар кlелтувурла.', +'wlshowlast' => 'Къалур эхирижи $1 сятинлай $2 йикъалди $3', +'watchlist-options' => 'Опцидин ахтармишунар', # Displayed when you click the "watch" button and it is in the process of watching 'watching' => 'Килигун...', @@ -424,137 +625,219 @@ $1 Кlевхьанай ишлемишчи', # Delete 'deletepage' => 'Къакъудун хъувун', +'confirmdeletetext' => 'Квез чlуриз кlанзани чарар гьадан вири тарихар галаз. Буюр, сидикъара,куьне чlурзатlа, куьн агъавурда автlа вуч ийизатlа ва куьне ийизатlа жуьреда [[{{MediaWiki:Policy-url}}| политика]].', +'actioncomplete' => 'Юзунар авуна', +'actionfailed' => 'Юзунар ийиз хьанач', +'deletedtext' => '"$1" чlурнайтир. Килиг $2 эхиримжи чlурунар ахтармишун.', 'deletedarticle' => 'къакъудун "[[$1]]"', 'dellogpage' => 'Чар къакъудун', 'deletecomment' => 'Кар', +'deleteotherreason' => 'Масса/ ва мад кар', 'deletereasonotherlist' => 'Маса фагьум', # Rollback 'rollbacklink' => 'авахьун далу', # Protect -'protectlogpage' => 'Куьмек гунин ктаб', -'protectcomment' => 'Кар', -'protectexpiry' => 'Алатна', -'protect-default' => ' Эхтияр гуз вири ишлемишчийриз', -'protect-level-sysop' => 'Гилан къавха', -'protect-summary-cascade' => 'къвалагай къвалагай', -'protect-expiring' => 'алатиз $1 (UTC)', -'restriction-type' => 'Ихтияр:', -'restriction-level' => 'Кьадардин кьадар', +'protectlogpage' => 'Куьмек гунин ктаб', +'protectedarticle' => 'къаравулазавайбри "[[$1]]"', +'modifiedarticleprotection' => 'дегиш хьанахуьнун кьадар идаз "[[$1]]"', +'protectcomment' => 'Кар', +'protectexpiry' => 'Алатна', +'protect_expiry_invalid' => 'Вахтун кьадар дуьзди туш.', +'protect_expiry_old' => 'Вахтун кьадар алатай заманда.', +'protect-text' => "Квевай клигайтlа ва дегишарайтlа жеза хуьнин къайда чарчин '''$1'''.", +'protect-locked-access' => "Квез ахтияр авач дегишариз чарчин хуьн къайда. Ингье физвай туькlуьрунар чарчиз '''$1''':", +'protect-cascadeon' => 'Хуьн авун чарар къараул ийизвай алай вахтунда, гьама ктуна{{PLURAL:$1|чар, гьама|чарар, гьабур}} галай галай хуьн куькlуьрна.Куьвай жеза дегишариз хуьнин кьадар чарчин, гьама кядач галай галай хуьнив.', +'protect-default' => ' Эхтияр гуз вири ишлемишчийриз', +'protect-fallback' => 'Тlалабун "$1" эхтияр', +'protect-level-autoconfirmed' => 'Къаб цlийи ва кхьитунавай ишлемишчияр', +'protect-level-sysop' => 'Гилан къавха', +'protect-summary-cascade' => 'къвалагай къвалагай', +'protect-expiring' => 'алатиз $1 (UTC)', +'protect-cascade' => 'Тажум чарчин куькlуьрнава и чарчел(пат пат тажум)', +'protect-cantedit' => 'Кевай дегиш жедач и чар, вучиз лагьайтlа квез ахтияр авач амма дегишариз.', +'restriction-type' => 'Ихтияр:', +'restriction-level' => 'Кьадардин кьадар', # Restrictions (nouns) 'restriction-edit' => 'Дегишарун', # Undelete +'undeletelink' => 'ахъаюн/авайдаказ хъувун', +'undeleteviewlink' => 'Ачухун', 'undeletecomment' => 'Кар', +'undeletedarticle' => 'Туькlуьр хъувуна "[[$1]]"', 'undelete-show-file-submit' => 'Э', # Namespace form on various pages 'namespace' => 'Тlарарин гегьенш:', +'invert' => 'Элкъуьруьн хкуднай', 'blanknamespace' => '(Асул)', # Contributions -'contributions' => 'За авунай кIвалах', -'mycontris' => 'За авунай кIвалах', -'contribsub2' => 'Адаз ($1): ($2)', -'uctop' => '(кIукI)', -'year' => 'Са йисалай (ва дериндиз):', - +'contributions' => 'За авунай кIвалах', +'contributions-title' => 'Ктунай пай икьван $1', +'mycontris' => 'За авунай кIвалах', +'contribsub2' => 'Адаз ($1): ($2)', +'uctop' => '(кIукI)', +'month' => ' Вацралай (ва фад)', +'year' => 'Са йисалай (ва дериндиз):', + +'sp-contributions-newbies' => 'Къалурун ктунай пай, авунай цlийи ишлемишчийри', 'sp-contributions-blocklog' => 'чинрин хара', +'sp-contributions-uploads' => 'жуьре', +'sp-contributions-logs' => 'Дафтlар', 'sp-contributions-talk' => 'Рахун', +'sp-contributions-search' => 'Жагъурун ктунай пай', 'sp-contributions-username' => 'IP адресс ишлемичин тlарцlин', +'sp-contributions-toponly' => 'Къалурун дегишунар, эхиримжи жуьреда авай', 'sp-contributions-submit' => 'Ахтармишун', # What links here 'whatlinkshere' => ' Гьихьтин чарар инна аватIа', 'whatlinkshere-title' => 'Чарар, алукьунин цlар идал "$1"', 'whatlinkshere-page' => 'Ишлемишчи', +'linkshere' => "Къведай цlар алукьзава '''[[:$1]]''':", +'nolinkshere' => "Къведай чарар алукьзава '''[[:$1]]'''.", +'isredirect' => 'Ракъур хъувунин чар', 'istemplate' => 'Трансклипция', +'isimage' => 'алукьун и шкилдиз', +'whatlinkshere-prev' => '{{PLURAL:$1|алатайди|алатайди $1}}', 'whatlinkshere-next' => '{{PLURAL:$1|next|къведай $1}}', +'whatlinkshere-links' => '← цlарар', 'whatlinkshere-hideredirs' => '$1 массадал ракъурун', -'whatlinkshere-hidetrans' => '', +'whatlinkshere-hidetrans' => '$1 куькlуьрун', 'whatlinkshere-hidelinks' => '$1 алукьунин цlар', +'whatlinkshere-hideimages' => '$1 Шикилдин алукьун', 'whatlinkshere-filters' => 'Филтер', # Block/unblock -'blockip' => 'Ишлемишзавайдан хара', -'ipboptions' => '2 сят:2 hours,1 югъ:1 day,3 югъ:3 days,1 афте:1 week,2 афте:2 weeks,1 варз:1 month,3 варз:3 months,6 варз:6 months,1 йис:1 year,эхир авачиз:infinite', -'blocklink' => 'тIаб', -'unblocklink' => 'ахъа хъувун', -'change-blocklink' => 'дегиш хьун блок', -'contribslink' => 'ктунай пай', -'blocklogpage' => 'Чинрин хара', +'blockip' => 'Ишлемишзавайдан хара', +'ipboptions' => '2 сят:2 hours,1 югъ:1 day,3 югъ:3 days,1 афте:1 week,2 афте:2 weeks,1 варз:1 month,3 варз:3 months,6 варз:6 months,1 йис:1 year,эхир авачиз:infinite', +'ipblocklist' => 'Ишлемишчи акьвалун', +'blocklink' => 'тIаб', +'unblocklink' => 'ахъа хъувун', +'change-blocklink' => 'дегиш хьун тlаб', +'contribslink' => 'ктунай пай', +'blocklogpage' => 'Чинрин хара', +'blocklogentry' => 'акьвал хъувун[[$1]] вахтар алатайла $2 $3', +'unblocklogentry' => 'Куьлегдай акъудун $1', +'block-log-flags-nocreate' => 'ахтияр авач регистраци кьелунин кхьин', # Move page -'movearticle' => 'Юзун хъувун:', -'newtitle' => 'Цlийи тlарцlихъ:', -'move-watch' => 'Гелкъуьн и хъувун', -'movepagebtn' => 'Юзун хъувун', -'movetalk' => 'Югъун,галкlана рахун', -'movereason' => 'Фагьум:', -'revertmove' => 'хтун', +'movepagetext' => "Ишлемишиз кlеневай къаб,чарчин тlар дегишариp, кьиспесдин чка дегишарун, цlийи тlар авун. +Иски тlарцlи ракъурда цlийи тlарцlел. +Квевай жеда цlийи хъийиз ракъурун, къалурзай дуьз тlарцlел вуч вичиз. +Квез кlанзаштlа,рекlел алудмир ахтармишиз инна [[Special:DoubleRedirects|double]] ва [[Special:BrokenRedirects|broken redirects]]. +Куьне тухузва шаидвал,мадни гьабур гьамиша алукьдайвал, гьиниз гьабур фена кlанзатl. + +Ахтармиша, чар ''ваъ''' ракъур хьун, гьахьтин тlар алай чар ава, гьама ичlиди ятlа, ракъурнатlа ва дегишарунин кьиспес авачтlа. +Кевай жеда гьа чар тlар дегишараз кьулукъ гьаниз элкъуьриз, гьина гьадан тlар дегиш авунатlа, куьне гъалатl авунатlа, куьне чин тийиз авай чарчик гъалатl тада. + +'''Килига!''' +Амма бейхабар жеда гзаф герекзай чарариз; +Буюр, килиг , куьне фикирзатlа вуч жезатlа, кхьин хъийидади.", +'movepagetalktext' => "Ухшар авай чарар ихтилатдин, фида масса чкадал вуч вичиз ибур галаз''',амма:''' *Эчlи чар ихтилатдин ава цlийи тlар алаз, ва *Куьне иляйда пайдах кlеникай Гьа вахтунда, куьне чка дегишар авун или санал авуна чар гъилелди, кlанда", +'movearticle' => 'Юзун хъувун:', +'newtitle' => 'Цlийи тlарцlихъ:', +'move-watch' => 'Гелкъуьн и хъувун', +'movepagebtn' => 'Юзун хъувун', +'pagemovedsub' => 'Рахъурун хьана', +'movepage-moved' => '\'\'"$1" рахъурнай "$2"\'\'\'', +'articleexists' => 'Ахьтин тlар алай чар ава, амма тlар, куьне хкянай дуьз туш.Башуьсте, масса тlар хкяй.', +'talkexists' => "'''Чарчин тlар дегишарна, чарчин ихтилатар дегишар жезатуш, вучиз лагьайтlа ихтилатар цlийи чарчел фена.Галкlура гълелди.'''", +'movedto' => 'хтана иниз', +'movetalk' => 'Югъун,галкlана рахун', +'1movedto2' => 'хъфена [[$1]] идал [[$2]]', +'1movedto2_redir' => 'къфена [[$1]] идаз [[$2]] ракъурунар', +'movelogpage' => 'Дафтlардин чка дегишарун', +'movereason' => 'Фагьум:', +'revertmove' => 'хтун хъувун', # Export 'export' => 'Чарар ракъурун', # Namespace 8 related +'allmessagesname' => 'Тlар', +'allmessagesdefault' => 'Алавилел къагъаздин кхьин', 'allmessages-filter-all' => 'Вири', # Thumbnails -'thumbnail-more' => 'Эке хъувун', +'thumbnail-more' => 'Эке хъувун', +'thumbnail_error' => 'Миниатуьра туькlуьрдайла гъалатl:$1', # Special:Import 'import-upload-filename' => 'Шикилдинтlар:', # Tooltip help for the actions -'tooltip-pt-userpage' => 'Куьне ишлемишзавай чар', -'tooltip-pt-mytalk' => 'Куьн рахазава чарчикай', -'tooltip-pt-preferences' => 'Куьн хкягъунар', -'tooltip-pt-watchlist' => 'Чарарин цlарар,куьне ахтармишзавай дегиш патал', -'tooltip-pt-mycontris' => 'Куьне ктунай пулунин чар', -'tooltip-pt-login' => 'Квез буюрзава гьахьиз системадиз; тефейтlани жезва', -'tooltip-pt-logout' => 'ЭкъечIун', -'tooltip-ca-talk' => 'Эхтилат авун чарчикай', -'tooltip-ca-edit' => 'Квевай дегишариз жезва и чар.Ва сифте клигна ахпа хвена кlанда.', -'tooltip-ca-addsection' => 'Гатlунив цlийи кьил', -'tooltip-ca-history' => 'Эхиремжи жуьреяр и чарчин', -'tooltip-ca-protect' => 'Xуьн и хъувун', -'tooltip-ca-delete' => 'Къакъудун и хъувун', -'tooltip-ca-move' => 'Юзун и хъувун', -'tooltip-ca-watch' => 'Чар ктун хъувун куьне ахтармишзавай цlарцlик', -'tooltip-search' => 'Ахтармишун {{SITENAME}}', -'tooltip-search-go' => 'Чарчел фин, дуьз тIар аваз хьайитIа', -'tooltip-search-fulltext' => 'Чар жагъурун и кхьинриз', -'tooltip-n-mainpage' => 'Мугьманвал чIехи чинал', -'tooltip-n-mainpage-description' => 'Мугьманваал чIехи чарчел', -'tooltip-n-portal' => 'Проекдикай, квегай вуч ийиз жедатl, шеэр гинай жагъурда', -'tooltip-n-recentchanges' => 'Эхиримжи дигишунрин чарчин цIарар wiki-да', -'tooltip-n-randompage' => 'Галкlан чарчин', -'tooltip-n-help' => 'Утlана жагъурунин чка', -'tooltip-t-whatlinkshere' => 'Цlарар вики чарчин, алукьун инна', -'tooltip-t-recentchangeslinked' => 'Эхиримжи чарарин дигишунар, чарчихъ галкlанавай', -'tooltip-feed-rss' => 'RSS хуьрек и чарчиз', -'tooltip-feed-atom' => 'Atom хуьрек и чарчиз', -'tooltip-t-upload' => 'Парвиниз шикил', -'tooltip-t-specialpages' => 'Цlар вири герек чарfh', -'tooltip-t-print' => ' Акъудунин и чарчин жуьре', -'tooltip-t-permalink' => 'Гьамишан алукьун гьа и килиг хъувуниз', -'tooltip-ca-nstab-main' => 'Килигун чарче авай кхьинар', -'tooltip-ca-nstab-user' => 'Ишлемишчидин чарчиз клигун', -'tooltip-ca-nstab-special' => 'Имма далу чар,квевай чар дегиш жезатуш', -'tooltip-ca-nstab-project' => 'Проектин чарчиз килигун', -'tooltip-ca-nstab-image' => 'Шкилдиз килигу', -'tooltip-minoredit' => 'Марк имма сакlускьван дегишунар', -'tooltip-save' => 'Куьн дегишунар хуьн', -'tooltip-diff' => 'Къалурун,куьне вуч дегишенур авунутlа', -'tooltip-watch' => 'Чар ктун хъувун куьне ахтармишзавай цlарцlик', +'tooltip-pt-userpage' => 'Куьне ишлемишзавай чар', +'tooltip-pt-mytalk' => 'Куьн рахазава чарчикай', +'tooltip-pt-preferences' => 'Куьн хкягъунар', +'tooltip-pt-watchlist' => 'Чарарин цlарар,куьне ахтармишзавай дегиш патал', +'tooltip-pt-mycontris' => 'Куьне ктунай пулунин чар', +'tooltip-pt-login' => 'Квез буюрзава гьахьиз системадиз; тефейтlани жезва', +'tooltip-pt-logout' => 'ЭкъечIун', +'tooltip-ca-talk' => 'Эхтилат авун чарчикай', +'tooltip-ca-edit' => 'Квевай дегишариз жезва и чар.Ва сифте клигна ахпа хвена кlанда.', +'tooltip-ca-addsection' => 'Гатlунив цlийи кьил', +'tooltip-ca-viewsource' => 'И чар хвенава. Квевай жеда килигиз адан дувул', +'tooltip-ca-history' => 'Эхиремжи жуьреяр и чарчин', +'tooltip-ca-protect' => 'Xуьн и хъувун', +'tooltip-ca-delete' => 'Къакъудун и хъувун', +'tooltip-ca-move' => 'Юзун и хъувун', +'tooltip-ca-watch' => 'Чар ктун хъувун куьне ахтармишзавай цlарцlик', +'tooltip-ca-unwatch' => 'Чlурун и чар куьн ахтармишзавай цlaрцlяй', +'tooltip-search' => 'Ахтармишун {{SITENAME}}', +'tooltip-search-go' => 'Чарчел фин, дуьз тIар аваз хьайитIа', +'tooltip-search-fulltext' => 'Чар жагъурун и кхьинриз', +'tooltip-p-logo' => 'Муьманвал чlехи чарчел', +'tooltip-n-mainpage' => 'Мугьманвал чIехи чинал', +'tooltip-n-mainpage-description' => 'Мугьманваал чIехи чарчел', +'tooltip-n-portal' => 'Проекдикай, квегай вуч ийиз жедатl, шеэр гинай жагъурда', +'tooltip-n-currentevents' => 'Жагъурун хакъидай хабар, физай эхтилатрин', +'tooltip-n-recentchanges' => 'Эхиримжи дигишунрин чарчин цIарар wiki-да', +'tooltip-n-randompage' => 'Галкlан чарчин', +'tooltip-n-help' => 'Утlана жагъурунин чка', +'tooltip-t-whatlinkshere' => 'Цlарар вики чарчин, алукьун инна', +'tooltip-t-recentchangeslinked' => 'Эхиримжи чарарин дигишунар, чарчихъ галкlанавай', +'tooltip-feed-rss' => 'RSS хуьрек и чарчиз', +'tooltip-feed-atom' => 'Atom хуьрек и чарчиз', +'tooltip-t-contributions' => 'Ачух авун идан садакьадин цlар', +'tooltip-t-emailuser' => 'Электрон пучтадай и ишлемичидал ракъурун', +'tooltip-t-upload' => 'Парвиниз шикил', +'tooltip-t-specialpages' => 'Цlар вири герек чарfh', +'tooltip-t-print' => ' Акъудунин и чарчин жуьре', +'tooltip-t-permalink' => 'Гьамишан алукьун гьа и килиг хъувуниз', +'tooltip-ca-nstab-main' => 'Килигун чарче авай кхьинар', +'tooltip-ca-nstab-user' => 'Ишлемишчидин чарчиз клигун', +'tooltip-ca-nstab-special' => 'Имма далу чар,квевай чар дегиш жезатуш', +'tooltip-ca-nstab-project' => 'Проектин чарчиз килигун', +'tooltip-ca-nstab-image' => 'Шкилдиз килигу', +'tooltip-ca-nstab-template' => 'Ахъаюн шаблон', +'tooltip-ca-nstab-category' => 'Ахъаюн кlватlалдин чар', +'tooltip-minoredit' => 'Марк имма сакlускьван дегишунар', +'tooltip-save' => 'Куьн дегишунар хуьн', +'tooltip-preview' => 'Сифте килиг авун ,башуьсте, ишлемиша хуьн хъийидалди!', +'tooltip-diff' => 'Къалурун,куьне вуч дегишенур авунутlа', +'tooltip-compareselectedversions' => 'Акун алатунар хкягънай кьве ревизи и чарчин', +'tooltip-watch' => 'Чар ктун хъувун куьне ахтармишзавай цlарцlик', +'tooltip-rollback' => '"Геляш" хквен хъийиз дегишариз гьа и чар, эхиримжи ни ктунатlа са тажум', +'tooltip-undo' => '"Акъвазун" хквен хъийиз и дегишарун ав ахъаюн дегишунрин къаб сифте килигунин жуьреда.Ада ахтияр гузва кутаз хъийиз рюзедиз.', +'tooltip-summary' => 'Тура бицlи резуьме', + +# Patrol log +'patrol-log-line' => 'кхьена $1 идай $2 ахтармишнава $3', +'patrol-log-diff' => 'жуьре $1', # Browsing diffs 'previousdiff' => 'Иски дегишунар', 'nextdiff' => 'ЦIийи дегишунар', # Media information +'file-info-size' => '$1 × $2 пикселар, шикилдин кьадар: $3, MIME жуьре: $4', +'file-nohires' => 'Чlехи ахъаюн авай жуьре авач.', +'svg-long-desc' => 'SVG файл, тlарцlиэвез $1 $2 × пикселяр, файлдин яргъивал:файлдин яргъивал: $3', 'show-big-image' => 'Михьиз чlехи хьун', # Bad image list @@ -565,7 +848,10 @@ $1 Кlевхьанай ишлемишчи', Ва аммай рахъурунар са цlарцlел гьисабзава кьилди,ва чарар,гьина файл цlарцlел фин жеда.', # Metadata -'metadata' => 'Мета замана югъ', +'metadata' => 'Мета замана югъ', +'metadata-help' => 'Шикилда мадни кхьинар ава, ктун хъийизай гьарфарин камерайрал, сканерал ишлемишзайдя авун паталди, ва гьарфаралди. Шикил туькlуьрадла кьулухъ дегишарнатlа, шикил къайдадай фин тахьун мумкин я.', +'metadata-expand' => 'Къалурун дериндиз', +'metadata-collapse' => 'Кlевун дерин къалурунар', # EXIF tags 'exif-contrast' => 'Рангар', @@ -574,6 +860,10 @@ $1 Кlевхьанай ишлемишчи', 'exif-sharpness-1' => 'Жими', +# External editor support +'edit-externally' => 'Дегишарун и шкил, къецевай программа ишлемишна', +'edit-externally-help' => '(Килиг [http://www.mediawiki.org/wiki/Manual:External_editors setup instructions] мадни чирунар килигун паталди)', + # 'all' in various places, this might be different for inflected languages 'recentchangesall' => 'вири', 'imagelistall' => 'вири', @@ -602,12 +892,31 @@ $1 Кlевхьанай ишлемишчи', 'imgmultigo' => 'Ша!', # Watchlist editing tools -'watchlisttools-raw' => 'Клигзавай цlарцlин дегишунар', +'watchlisttools-view' => 'Ачух хъувун дегиширунар', +'watchlisttools-edit' => 'Килигун ва дегишун ахтармизавай чарар кlватlал', +'watchlisttools-raw' => 'Клигзавай цlарцlин дегишунар', + +# Core parser functions +'duplicate-defaultsort' => '\'\'\'Килиг:\'\'\' юзунин куьлег "$2" акьалзава сифте куьлег, ицигнавай "$1".', # Special:SpecialPages 'specialpages' => 'Кьетlен хъувун', +# External image whitelist +'external_image_whitelist' => ' #Кхьихь и цlар икlа, гьа има чьих +#Эцига гьамишан лугьунин кьатl (кьатl, физавай юкьвай //) кьеник +#Гьабур сад жеда URL-адрес къеце патан (hotlinked) шикилдин +#Жуьре акъатзавай шикил хьиз, акатlа къалурда алукьун шикилдал +#Цlарар гатlузавай #, гьисабзава ихтилатрай +#Гьама ригистр галачиз + +#Кхьихьа гьамишан лугьунар кьатlар цlарцlин винелай.Кхьихь гьа цlар икlа, има хьиз ', + # Special:Tags -'tags-edit' => 'дегишарун', +'tag-filter' => '[[Special:Tags|Tag]] филтар:', +'tags-edit' => 'дегишарун', + +# Special:ComparePages +'compare-page1' => 'Чар 1', ); diff --git a/languages/messages/MessagesLfn.php b/languages/messages/MessagesLfn.php index 73238a0e..db5283b3 100644 --- a/languages/messages/MessagesLfn.php +++ b/languages/messages/MessagesLfn.php @@ -48,8 +48,7 @@ $messages = array( 'tog-editsection' => 'Engrana la edita de sesion via lias de {edita}.', 'tog-editsectiononrightclick' => 'Engrana la edita de sesion par clica a la destra a titulos de sesion (JavaScript)', 'tog-showtoc' => 'Mostra la table de contenis (per pajes con plu ce tre titulos)', -'tog-rememberpassword' => 'Memora me sinia per entra a esta computador', -'tog-editwidth' => 'La caxa de editas ave la longia masima', +'tog-rememberpassword' => 'Memora me sinia per entra a esta computador (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Junta la pajes ce me ia creada a me lista de pajes oservada', 'tog-watchdefault' => 'Junta pajes ce me ia edita a me lista de pajes oservada', 'tog-watchmoves' => 'Junta pajes ce me ia moveda a me lista de pajes oservada', @@ -289,7 +288,7 @@ $messages = array( 'yourname' => 'Nom de usor:', 'yourpassword' => 'Sinia de entra:', 'yourpasswordagain' => 'Retape la sinia:', -'remembermypassword' => 'Memora me sinia de entra a esta computador', +'remembermypassword' => 'Memora me sinia de entra a esta computador (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Tu domina:', 'login' => 'Identifia', 'nav-login-createaccount' => 'Sinia per entra', @@ -400,8 +399,6 @@ o [{{fullurl:{{FULLPAGENAME}}|action=edit}} edita esta paje].', 'copyrightwarning' => "Per favore nota ce tota labora a {{SITENAME}} es judida ce el es relasada su la $2 (vide $1 per detalias). Si tu no desira ce tu scrives ta es editada sin compati e redistribui sin tu permite, no sumita el asi!
    Tu ance promete a nos ce tu ia scriveda esta par tu mesma, o copiada esta de un domina publica o otra orijin libre. '''NO SUMITA LABORA SU DIRETOS DE AUTOR SIN PERMITE!!'''", -'longpagewarning' => "'''AVISA: Esta paje usa $1 kilotetas; alga surfadores pote ave problemes con la edita de pajes plu grande ce 32 ko. -Per favore, considera parti la paje en pesos plu poca.'''", 'templatesused' => '{{PLURAL:$1|Modele|Modeles}} usada en esta paje:', 'templatesusedpreview' => '{{PLURAL:$1|Modele|Modeles}} usada en esta previde:', 'template-protected' => '(protejeda)', @@ -691,7 +688,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'Pajes oservada', 'mywatchlist' => 'Me lista de pajes oservada', -'watchlistfor' => "(per '''$1''')", 'nowatchlist' => 'Tu ave no cosas en tu lista oservada', 'addedwatch' => 'Juntada a la lista de pajes oservada', 'addedwatchtext' => "La paje \"[[:\$1]]\" ia es juntada a tu [[Special:Watchlist|lista de pajes oservada]]. @@ -921,9 +917,9 @@ En esta casos, tu va nesesa move o fusa la paje per mano, si desirada.", # Media information 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|paje|pajes}}', -'file-info-size' => '($1 × $2 pixel, grandia de fix: $3, MIME tipo: $4)', +'file-info-size' => '$1 × $2 pixel, grandia de fix: $3, MIME tipo: $4', 'file-nohires' => 'No plu densia posable.', -'svg-long-desc' => '(SVG fix, per nom $1 × $2 pixeles, grandia de fix: $3)', +'svg-long-desc' => 'SVG fix, per nom $1 × $2 pixeles, grandia de fix: $3', 'show-big-image' => 'Densia masima', 'show-big-image-thumb' => 'Grandia de eesta previde: $1 × $2 pixeles', diff --git a/languages/messages/MessagesLg.php b/languages/messages/MessagesLg.php index 6379a875..75024fcf 100644 --- a/languages/messages/MessagesLg.php +++ b/languages/messages/MessagesLg.php @@ -26,7 +26,7 @@ $messages = array( 'tog-editsection' => "Emiko ku mpapula gibengako enyunzi eza '[kyusa]' ezikuggusa w'osobolera okugikyusiza.", 'tog-editsectiononrightclick' => "Okunyiga ku omutwe gw'omuko ku lupapula n'eppeesa erya ddyo kubikkulenga w'ogukyusiza (kyetaagisa 'JavaScript')", 'tog-showtoc' => 'Teekawo endagiriro (singa ku lupapula kubaako emitwe gisukka mu esatu)', -'tog-rememberpassword' => 'Ekigambo kyange ekikuumi kitereke ku kompyuta eno', +'tog-rememberpassword' => 'Tereka ekigambo kyange ekikuumi ku kompyuta eno (okumala {{PLURAL:$1|olunaku|ennaku ezitasukka mu}} $1)', 'tog-watchcreations' => "Empapula zenkolawo ziteekebwenga ku lukalala lw'ezo zengoberera", 'tog-watchdefault' => "Empapula zenkyusamu ziteekebwenga ku lukalala lw'ezo zengoberera", 'tog-watchmoves' => "Empapula zenkyusa erinnya ziteekebwenga ku lukalala lw'ezo zengoberera", @@ -168,20 +168,20 @@ $messages = array( 'faqpage' => 'Project:Ebitera okubuuzibwa ku', # Vector skin -'vector-action-addsection' => 'Tandikawo emboozi endala', -'vector-action-delete' => 'Gyawo olupapula luno', -'vector-action-move' => 'Simbuliza', -'vector-action-protect' => 'Ssiba', -'vector-action-undelete' => 'Zawo', -'vector-action-unprotect' => 'Gyako ebikugizo', -'vector-namespace-main' => 'Lupapula', -'vector-view-create' => 'Lukolewo', -'vector-view-edit' => 'Kyusa', -'vector-view-history' => 'Ennanda ya fayiro eno', -'vector-view-view' => 'Soma', -'vector-view-viewsource' => "Kebera obulambike obw'ennono obw'olupapula luno", -'actions' => "By'oyinza okukola", -'namespaces' => 'Makuŋaanyizo', +'vector-action-addsection' => 'Tandikawo emboozi endala', +'vector-action-delete' => 'Gyawo olupapula luno', +'vector-action-move' => 'Simbuliza', +'vector-action-protect' => 'Ssiba', +'vector-action-undelete' => 'Zawo', +'vector-action-unprotect' => 'Gyako ebikugizo', +'vector-simplesearch-preference' => "Wiki esobole okukuwa amagezi ku by'onoonya (kino kikolera mu ndabika ya Vector yokka)", +'vector-view-create' => 'Lukolewo', +'vector-view-edit' => 'Kyusa', +'vector-view-history' => 'Ennanda ya fayiro eno', +'vector-view-view' => 'Soma', +'vector-view-viewsource' => "Kebera obulambike obw'ennono obw'olupapula luno", +'actions' => "By'oyinza okukola", +'namespaces' => 'Makuŋaanyizo', 'errorpagetitle' => 'Kiremya', 'returnto' => 'Dda ku $1.', @@ -242,6 +242,9 @@ Olw'obungi bw'abakebera olupapula olwo, kompyuta zaffe tezisobola kwongerako mul Lindako akaseera oddemu ogezeeko okulukebera. $1", +'pool-timeout' => "Obudde obugere obw'okulinda okufuna obuyinza obw'okulukozesa buweddeko", +'pool-queuefull' => "Olukalala lw'emirimu egirinda okukolebwako lujjudde", +'pool-errorunknown' => 'Ekireesewo kiremya tekitegeerese', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Okutangaaza ku {{SITENAME}}', @@ -412,7 +415,8 @@ Tewerabira kwetereereza [[Special:Preferences|enteekateeka yo ey'oku {{SITENAME} 'yourname' => "Ery'obwa memba", 'yourpassword' => 'Ekigambo ekikuumi', 'yourpasswordagain' => 'Ddamu ekigambo ekikuumi', -'remembermypassword' => 'Tereka ekigambo kyange ekikuumi ku kompyuta eno', +'remembermypassword' => 'Tereka ekigambo kyange ekikuumi ku kompyuta eno (okumala {{PLURAL:$1|olunaku|ennaku ezitasukka mu}} $1)', +'securelogin-stick-https' => "Sigala ku mukutu gwa kika kya HTTPS ng'omaze okuyingira", 'yourdomainname' => 'Linnya lya twale lya kayungirizi lyo:', 'externaldberror' => "Waliwo kiremya mu ggwanika lya data ekozesebwa okukakasa bamemba oba tokkirizibwa okukyusa ku akawunti yo ey'awalala.", 'login' => 'Yingira', @@ -429,6 +433,7 @@ Tewerabira kwetereereza [[Special:Preferences|enteekateeka yo ey'oku {{SITENAME} 'gotaccount' => "Akawunti wafuna? '''$1'''.", 'gotaccountlink' => 'Yingira', 'createaccountmail' => 'Akawunti gikole ne E-mail', +'createaccountreason' => 'Ekikukozesezawo akawunti:', 'badretype' => "Ebigambo ebikuumi by'owandise tebifaanagana.", 'userexists' => "Ery'obwa memba ly'owandise wali omulala alirina.
    Londa eddala.", @@ -457,6 +462,7 @@ Ddamu ogezeeko.", Ddamu ogezeeko.', 'passwordtooshort' => 'Ekigambo ekikuumi kiteekwa okubaamu {{PLURAL:$1|akabonero wakiri kamu|obubonero obutakka wansi wa $1}}.', 'password-name-match' => "Tokkirizibwa kukozesa linnya lyo ery'obwa memba ng'ekigambo ekikuumi.", +'password-login-forbidden' => "Ebigambo bino tebikkirizibwa kukozesebwa ng'amannya g'obwa memba oba bigambo bikuumi.", 'mailmypassword' => 'Nsindikira ekigambo ekikuumi ekipya', 'passwordremindertitle' => "Ekigambo ekikuumi eky'oku {{SITENAME}} ekipya. Kya kiseerabuseera.", 'passwordremindertext' => 'Waliwo eyayimidde ku ndagiriro eya IP $1 (tusuubiri nti ye ggwe) n\'asaba ekigambo ekikuumi eky\'oku {{SITENAME}} ($4) ekipya.
    @@ -499,6 +505,9 @@ Sooka olindeko akaseera okuddamu n'ate.", 'suspicious-userlogout' => "Sisitemu ezize ekiragiro kyo eky'okugivaamu kubanga kirabise nga ekivudde mu kalambulanetti enfu
    oba mu puloguramu etereka n'eddamu okuyisa ebiragiro ebivudde awalala.", +# E-mail sending +'php-mail-error-unknown' => "Wazzewo kiremya atategeerese mu mukolo mail() ogw'omu PHP", + # Password reset dialog 'resetpass' => 'Kyusa ekigambo ekikuumi', 'resetpass_announce' => "Weyambisa ekyama eky'ekiseerabuseera okuyingira.
    @@ -550,9 +559,12 @@ Oyinz'okuba nga wamaze okutegeka ekya ddala ekipya oba nga wakasabayo eky'ekisee 'showdiff' => 'Ndaga bwe bikyuse', 'anoneditwarning' => "'''Kulabula:''' Owandika toyingidde mu sisitemu. Tujjakuwandika endagiriro eya kompyuta kwosinzidde mu lukalala lw'enkuykakyuka ez'omu lupapula luno.", +'anonpreviewwarning' => "''Okola toyingidde sisitemu. Bw'on'okaza by'okola nga sisitemu ewandika n'endagiriro yo eya IP mu lukalala lw'enkyukakyuka lw'olupapula luno.''", 'missingsummary' => "'''Okujjukiza:''' Towandise ebinnyonyola enkyukakyuka z'okoze.
    Bw'oddamu okunyiga \"{{int:savearticle}}\", by'okoze tebijjakubaako okunnyonyola.", 'missingcommenttext' => 'Wandika ebigambo byo wano awaddako.', +'missingcommentheader' => "'''Okujjukiza:''' Ebigambo byo tobiwadde omutwe.
    +Bw'oddamu okunyiga \"{{int:savearticle}}\", by'okoze tebijjakubaako omutwe ogubyanjula.", 'summary-preview' => 'Kuno kwe kunnyonyola kwo:', 'subject-preview' => 'Omutwe bwe gunaafaanana:', 'blockedtitle' => 'Ono agaanidwa', @@ -637,6 +649,13 @@ aka ''Reload'', oba nyigira okumu amapeesa aga ''Ctrl'' ne ''F5'' oba aga ''Ctrl '''Tannakazibwa.'''", 'userjspreview' => "'''Jukira nti JavaScript gw'otegese omugezesamubugezesa oba omulozakobulozi.'''
    '''Tannakazibwa.'''", +'sitecsspreview' => "'''Jukira nti CSS ono omulozakobulozi.'''
    +'''Tannakazibwa.'''", +'sitejspreview' => "'''Jukira nti JavaScript ono omulozakobulozi.'''
    +'''Tannakazibwa.'''", +'userinvalidcssjstitle' => "'''Kulabula:''' Tewali endabika eyitibwa \"\$1\".
    +Empapula eza .css ne .js bamemba ze b'ekoledde, amannya ga zo ennukuta za mu
    +zonna ziteekwa okuba ntono, okugeza ''{{ns:user}}:Foo/vector.css'' so ssi ''{{ns:user}}:Foo/Vector.css''.", 'updated' => '(Ebituukanisidwa)', 'note' => "'''Okunnyonyola:'''", 'previewnote' => "'''Kuno kugezaamubugeza; by'okoze tebinnakazibwa!'''", @@ -752,6 +771,8 @@ Agumenti ezo sistemu tezikozesezza.", 'currentrevisionlink' => 'Oluwandika oluliwo kakati', 'cur' => 'ebiriwo', 'last' => 'ebyasookawo bino', +'page_first' => 'Olusooka', +'page_last' => 'Olusembayo', 'histlegend' => "'''Ebyokugerageranizibwa:''' nyiga obutonnyeze ku likooda zoyagala okugerageranya olyoke onyige eppeesa erya 'Enter'
    oba ku gano agali ku lupapula luno.
    '''Ebigambo:''' (erw) = enjawulo ku ebiriwo, (eku) = enjawulo ku egikulembera, N = enkyukakyuka entono.", @@ -1272,9 +1293,9 @@ Ob'oyagala okuyamba ku kuvvuunula eby'omu MediaWiki yonna, kebera ku [http://www 'nextdiff' => 'Enkyukakyuka ezaddako okukolebwa→', # Media information -'file-info-size' => '(pikseli $1 ku $2 , bunene bwa fayiro: $3, kika kya MIME: $4)', +'file-info-size' => 'pikseli $1 ku $2 , bunene bwa fayiro: $3, kika kya MIME: $4', 'file-nohires' => 'Tewali kisingako wano.', -'svg-long-desc' => '(Fayiro ya kika kya SVG, ya pikselo $1 ku $2 awamu, ya obunene bwa: $3)', +'svg-long-desc' => 'Fayiro ya kika kya SVG, ya pikselo $1 ku $2 awamu, ya obunene bwa: $3', 'show-big-image' => 'Laga ekifaananyi ekijjuvu', 'show-big-image-thumb' => 'Okulagako kuno kwa pikiseli: $1 ku $2', diff --git a/languages/messages/MessagesLi.php b/languages/messages/MessagesLi.php index 0b466e97..e443fcd3 100644 --- a/languages/messages/MessagesLi.php +++ b/languages/messages/MessagesLi.php @@ -50,94 +50,94 @@ $namespaceAliases = array( ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'Dobbel doorverwiezinge' ), - 'BrokenRedirects' => array( 'Gebraoke doorverwiezinge' ), + 'DoubleRedirects' => array( 'Dobbel_doorverwiezinge' ), + 'BrokenRedirects' => array( 'Gebraoke_doorverwiezinge' ), 'Disambiguations' => array( 'Verdudelikingspagina\'s' ), 'Userlogin' => array( 'Aanmelje' ), 'Userlogout' => array( 'Aafmelje' ), - 'CreateAccount' => array( 'Gebroeker aonmake' ), + 'CreateAccount' => array( 'Gebroeker_aonmake' ), 'Preferences' => array( 'Veurkäöre' ), 'Watchlist' => array( 'Volglies' ), - 'Recentchanges' => array( 'Lètste verangeringe' ), + 'Recentchanges' => array( 'Lètste_verangeringe' ), 'Upload' => array( 'Uploade' ), 'Listfiles' => array( 'Plaetjes' ), - 'Newimages' => array( 'Nuuj plaetjes' ), + 'Newimages' => array( 'Nuuj_plaetjes' ), 'Listusers' => array( 'Gebroekers' ), - 'Listgrouprights' => array( 'Groepsrechte weergaeve' ), + 'Listgrouprights' => array( 'Groepsrechte_weergaeve' ), 'Statistics' => array( 'Sjtattestieke' ), - 'Randompage' => array( 'Willekäörig artikel' ), + 'Randompage' => array( 'Willekäörig_artikel' ), 'Lonelypages' => array( 'Weispagina\'s' ), - 'Uncategorizedpages' => array( 'Óngecategoriseerde pagina\'s' ), - 'Uncategorizedcategories' => array( 'Óngecategoriseerde categorieë' ), - 'Uncategorizedimages' => array( 'Óngecategoriseerde plaetjes' ), - 'Uncategorizedtemplates' => array( 'Óngecategorisserde sjablone' ), - 'Unusedcategories' => array( 'Óngebroekde categorieë' ), - 'Unusedimages' => array( 'Óngebroekde plaetjes' ), - 'Wantedpages' => array( 'Gewunsjde pagina\'s' ), - 'Wantedcategories' => array( 'Gewunsjde categorieë' ), - 'Wantedfiles' => array( 'Gevraogde besjtande' ), - 'Wantedtemplates' => array( 'Gevraogde sjablone' ), - 'Mostlinked' => array( 'Meis gelinkde pazjena\'s' ), - 'Mostlinkedcategories' => array( 'Meis gelinkde categorieë' ), - 'Mostlinkedtemplates' => array( 'Meis gebroekde sjablone' ), - 'Mostimages' => array( 'Meis gebroekde plaetjes' ), - 'Mostcategories' => array( 'Meiste categorieë' ), - 'Mostrevisions' => array( 'Meis bewirkde pagina\'s' ), - 'Fewestrevisions' => array( 'Winnigs bewirkde pagina\'s' ), - 'Shortpages' => array( 'Kórte pagina\'s' ), - 'Longpages' => array( 'Lang pagina\'s' ), - 'Newpages' => array( 'Nuuj pagina\'s' ), - 'Ancientpages' => array( 'Audste pagina\'s' ), - 'Deadendpages' => array( 'Doedloupende pagina\'s' ), - 'Protectedpages' => array( 'Beveiligde pagina\'s' ), - 'Protectedtitles' => array( 'Beveiligde titels' ), - 'Allpages' => array( 'Alle pagina\'s' ), - 'Prefixindex' => array( 'Alle artikele' ), - 'Ipblocklist' => array( 'Geblokkeerde IP\'s' ), - 'Specialpages' => array( 'Speciaal pagina\'s' ), + 'Uncategorizedpages' => array( 'Óngecategoriseerde_pagina\'s' ), + 'Uncategorizedcategories' => array( 'Óngecategoriseerde_categorieë' ), + 'Uncategorizedimages' => array( 'Óngecategoriseerde_plaetjes' ), + 'Uncategorizedtemplates' => array( 'Óngecategorisserde_sjablone' ), + 'Unusedcategories' => array( 'Óngebroekde_categorieë' ), + 'Unusedimages' => array( 'Óngebroekde_plaetjes' ), + 'Wantedpages' => array( 'Gewunsjde_pagina\'s' ), + 'Wantedcategories' => array( 'Gewunsjde_categorieë' ), + 'Wantedfiles' => array( 'Gevraogde_besjtande' ), + 'Wantedtemplates' => array( 'Gevraogde_sjablone' ), + 'Mostlinked' => array( 'Meis_gelinkde_pazjena\'s' ), + 'Mostlinkedcategories' => array( 'Meis_gelinkde_categorieë' ), + 'Mostlinkedtemplates' => array( 'Meis_gebroekde_sjablone' ), + 'Mostimages' => array( 'Meis_gebroekde_plaetjes' ), + 'Mostcategories' => array( 'Meiste_categorieë' ), + 'Mostrevisions' => array( 'Meis_bewirkde_pagina\'s' ), + 'Fewestrevisions' => array( 'Winnigs_bewirkde_pagina\'s' ), + 'Shortpages' => array( 'Kórte_pagina\'s' ), + 'Longpages' => array( 'Lang_pagina\'s' ), + 'Newpages' => array( 'Nuuj_pagina\'s' ), + 'Ancientpages' => array( 'Audste_pagina\'s' ), + 'Deadendpages' => array( 'Doedloupende_pagina\'s' ), + 'Protectedpages' => array( 'Beveiligde_pagina\'s' ), + 'Protectedtitles' => array( 'Beveiligde_titels' ), + 'Allpages' => array( 'Alle_pagina\'s' ), + 'Prefixindex' => array( 'Alle_artikele' ), + 'Ipblocklist' => array( 'Geblokkeerde_IP\'s' ), + 'Specialpages' => array( 'Speciaal_pagina\'s' ), 'Contributions' => array( 'Biedrage' ), 'Emailuser' => array( 'E-maile' ), - 'Confirmemail' => array( 'E-mail bevestige' ), - 'Whatlinkshere' => array( 'Verwiezinge nao hie' ), - 'Recentchangeslinked' => array( 'Verwante verangeringe' ), + 'Confirmemail' => array( 'E-mail_bevestige' ), + 'Whatlinkshere' => array( 'Verwiezinge_nao_hie' ), + 'Recentchangeslinked' => array( 'Verwante_verangeringe' ), 'Movepage' => array( 'Verplaatse' ), - 'Blockme' => array( 'Blokkeer mich' ), + 'Blockme' => array( 'Blokkeer_mich' ), 'Booksources' => array( 'Bookwinkele' ), 'Categories' => array( 'Categorieë' ), 'Export' => array( 'Exportere' ), 'Version' => array( 'Versie' ), - 'Allmessages' => array( 'Alle berichte' ), + 'Allmessages' => array( 'Alle_berichte' ), 'Log' => array( 'Logbeuk', 'Logbook' ), 'Blockip' => array( 'Blokkere' ), 'Undelete' => array( 'Hersjtèlle' ), 'Import' => array( 'Importere' ), - 'Lockdb' => array( 'DB blokkere' ), - 'Unlockdb' => array( 'DB vriegaeve' ), + 'Lockdb' => array( 'DB_blokkere' ), + 'Unlockdb' => array( 'DB_vriegaeve' ), 'Userrights' => array( 'Gebroekersrechte' ), - 'MIMEsearch' => array( 'MIME zeuke' ), - 'FileDuplicateSearch' => array( 'Besjtandsduplicate zeuke' ), - 'Unwatchedpages' => array( 'Neet-gevolgde pagina\'s' ), + 'MIMEsearch' => array( 'MIME_zeuke' ), + 'FileDuplicateSearch' => array( 'Besjtandsduplicate_zeuke' ), + 'Unwatchedpages' => array( 'Neet-gevolgde_pagina\'s' ), 'Listredirects' => array( 'Doorverwiezinge' ), - 'Revisiondelete' => array( 'Versie ewegsjaffe' ), - 'Unusedtemplates' => array( 'Óngebroekde sjablone' ), - 'Randomredirect' => array( 'Willekäörige doorverwiezing' ), - 'Mypage' => array( 'Mien pagina\'s' ), - 'Mytalk' => array( 'Mien euverlèk' ), - 'Mycontributions' => array( 'Mien biedrage' ), + 'Revisiondelete' => array( 'Versie_ewegsjaffe' ), + 'Unusedtemplates' => array( 'Óngebroekde_sjablone' ), + 'Randomredirect' => array( 'Willekäörige_doorverwiezing' ), + 'Mypage' => array( 'Mien_pagina\'s' ), + 'Mytalk' => array( 'Mien_euverlèk' ), + 'Mycontributions' => array( 'Mien_biedrage' ), 'Listadmins' => array( 'Systeemwèrkers' ), 'Listbots' => array( 'Botlies' ), - 'Popularpages' => array( 'Populair pagina\'s' ), + 'Popularpages' => array( 'Populair_pagina\'s' ), 'Search' => array( 'Zeuke' ), - 'Resetpass' => array( 'Wachwaord opnuuj insjtèlle' ), - 'Withoutinterwiki' => array( 'Gein interwiki' ), - 'MergeHistory' => array( 'Historie sameveuge' ), + 'Resetpass' => array( 'Wachwaord_opnuuj_insjtèlle' ), + 'Withoutinterwiki' => array( 'Gein_interwiki' ), + 'MergeHistory' => array( 'Historie_sameveuge' ), 'Filepath' => array( 'Besjtandspaad' ), - 'Invalidateemail' => array( 'E-mail annulere' ), - 'Blankpage' => array( 'Laege pagina\'s' ), - 'LinkSearch' => array( 'Verwiezinge zeuke' ), - 'DeletedContributions' => array( 'Eweggesjafde biedrage' ), + 'Invalidateemail' => array( 'E-mail_annulere' ), + 'Blankpage' => array( 'Laege_pagina\'s' ), + 'LinkSearch' => array( 'Verwiezinge_zeuke' ), + 'DeletedContributions' => array( 'Eweggesjafde_biedrage' ), 'Tags' => array( 'Labels' ), - 'Activeusers' => array( 'Aktieve gebroekers' ), + 'Activeusers' => array( 'Aktieve_gebroekers' ), ); $dateFormats = array( @@ -170,8 +170,7 @@ $messages = array( 'tog-editsection' => 'Bewirke van secties via [bewirke] links', 'tog-editsectiononrightclick' => "Secties bewirke mit 'ne rechtermoesklik op sectietitels (JavaScript nudig)", 'tog-showtoc' => "Inhaudsopgaaf veur pagina's mit mie es 3 köpkes", -'tog-rememberpassword' => "Wachwaord ónthauwe bie 't aafmèlde", -'tog-editwidth' => "Editveldj euver de vol breide van 't sjirm weergaeve", +'tog-rememberpassword' => 'Mien wachwaord onthouwe veur later sessies (hoegstens $1 {{PLURAL:$1|daag|daag}})', 'tog-watchcreations' => "Pagina's die ich aanmaak automatisch volge", 'tog-watchdefault' => "Voog pagina's die se bewirks toe aan dien volglies", 'tog-watchmoves' => "Pagina's die ich verplaats automatisch volge", @@ -317,31 +316,21 @@ $messages = array( 'faqpage' => 'Project:Väölgestjèlde vraoge', # Vector skin -'vector-action-addsection' => 'Voog köpke toe', -'vector-action-delete' => 'Ewegsjaffe', -'vector-action-move' => 'Verplaats', -'vector-action-protect' => 'Besjirm', -'vector-action-undelete' => 'Plaats trök', -'vector-action-unprotect' => 'Gaef vrie', -'vector-namespace-category' => 'Categorie', -'vector-namespace-help' => 'Hölppaasj', -'vector-namespace-image' => 'Bestandj', -'vector-namespace-main' => 'Paasj', -'vector-namespace-media' => 'Mediapaasj', -'vector-namespace-mediawiki' => 'Berich', -'vector-namespace-project' => 'Projekpaasj', -'vector-namespace-special' => 'Speciaal paasj', -'vector-namespace-talk' => 'Euverlègk', -'vector-namespace-template' => 'Sjabloon', -'vector-namespace-user' => 'Gebroeker', -'vector-view-create' => 'Maak aan', -'vector-view-edit' => 'Bewirk', -'vector-view-history' => 'Bekiek de gesjiedenis', -'vector-view-view' => 'Laes', -'vector-view-viewsource' => 'Bekiek bróntèks', -'actions' => 'Hanjeling', -'namespaces' => 'Naamruumdes', -'variants' => 'Anger vorme', +'vector-action-addsection' => 'Voog köpke toe', +'vector-action-delete' => 'Ewegsjaffe', +'vector-action-move' => 'Verplaats', +'vector-action-protect' => 'Besjirm', +'vector-action-undelete' => 'Plaats trök', +'vector-action-unprotect' => 'Gaef vrie', +'vector-simplesearch-preference' => "Sjakel nuuj zeuksuggesties in (allein veur 't vectoroeterlik)", +'vector-view-create' => 'Maak aan', +'vector-view-edit' => 'Bewirk', +'vector-view-history' => 'Bekiek de gesjiedenis', +'vector-view-view' => 'Laes', +'vector-view-viewsource' => 'Bekiek bróntèks', +'actions' => 'Hanjeling', +'namespaces' => 'Naamruumdes', +'variants' => 'Anger vorme', 'errorpagetitle' => 'Fout', 'returnto' => 'Truuk nao $1.', @@ -402,6 +391,9 @@ Te väöl gebroekers perberen óm dees pagina te bekieke. Wach estebleef effe veurdets doe opnuuj toegank perbeers te kriege tót dees pagina. $1', +'pool-timeout' => "Timeout-wachte veur 't sloete", +'pool-queuefull' => 'De wachrie van de pool is vól', +'pool-errorunknown' => 'Ónbekènde fout', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Euver {{SITENAME}}', @@ -565,7 +557,8 @@ Vergaet neet dien [[Special:Preferences|veurkäöre veur {{SITENAME}}]] aan te p 'yourname' => 'Diene gebroekersnaam', 'yourpassword' => 'Die wachwaord', 'yourpasswordagain' => 'Wachwaord opnuuj intype', -'remembermypassword' => 'Mien wachwaord onthouwe veur later sessies.', +'remembermypassword' => 'Mien wachwaord onthouwe veur later sessies (hoegstens $1 {{PLURAL:$1|daag|daag}})', +'securelogin-stick-https' => 'Verbónje blieve via HTTPS nao aanmelle', 'yourdomainname' => 'Die domein', 'externaldberror' => "d'r Is 'n fout opgetraoje biej 't aanmelje biej de database of doe höbs gén toesjtömming diene externe gebroeker biej te wèrke.", 'login' => 'Aanmèlde', @@ -582,6 +575,7 @@ Vergaet neet dien [[Special:Preferences|veurkäöre veur {{SITENAME}}]] aan te p 'gotaccount' => "Höbs te al 'ne gebroekersnaam? '''$1'''.", 'gotaccountlink' => 'Inlogge', 'createaccountmail' => 'via de e-mail', +'createaccountreason' => 'Raeje:', 'badretype' => 'De ingeveurde wachwäörd versjille vanein.', 'userexists' => "De gebroekersnaam dae se höbs ingeveurd weurt al gebroek.
    Kees estebleef 'ne angere naam.", 'loginerror' => 'Inlogfout', @@ -601,6 +595,7 @@ Controleer dien spelling, of gebroek ongersjtaond formuleer om \'n [[Special:Use 'wrongpasswordempty' => "'t Ingegaeve wachwoord waor laeg. Perbeer 't obbenuujts.", 'passwordtooshort' => "Dien wachwaord is te kort. 't Mót minstes oet {{PLURAL:$1|1 teike|$1 teikes}} besjtaon.", 'password-name-match' => 'Die wachwaord mót anges zeen es diene gebroekersnaam.', +'password-login-forbidden' => "'t Gebroek van deze gebroekersnaam mit dit wachwoord is neet toegesjtange.", 'mailmypassword' => "Sjik mich 'n nuuj wachwaord", 'passwordremindertitle' => 'Nuuj tiedelik wachwaord van {{SITENAME}}', 'passwordremindertext' => 'Emes (waorsjienlik dich zelf) haet vanaaf IP-adres $1 \'n nuuj wachwoord veur {{SITENAME}} ($4) verzoch. \'t Nuuj wachwoord veur gebroeker "$2" is "$3". Es dat dien bedoeling waor, mèl diech daan noe aan en kees \'n nuuj wachwoord. \'t Tiedelik wachwoord verluip euver {{PLURAL:$5|$5 daag|$5 daag}}. @@ -637,6 +632,9 @@ Doe mós effe wachte ierdets te 't obbenuuts kens perbere.", 'loginlanguagelabel' => 'Taol: $1', 'suspicious-userlogout' => "Dien verzeuk óm aaf te melde is genegeerd, ómdet 't liek esof 't verzeuk is versjik door 'ne browser of cacheproxy dae kepot is.", +# E-mail sending +'php-mail-error-unknown' => "Dao haet ziech 'n ónbekénde fout veurgedaon in de mail()-functie van PHP", + # Password reset dialog 'resetpass' => 'Wachwaord obbenuuts insjtèlle', 'resetpass_announce' => "Doe bös aangemeld mèt 'ne tiejdelikke code dae per e-mail is toegezönje. Veur 'n nuuj wachwaord in om 't aanmelje te voltooie:", @@ -685,9 +683,11 @@ Meugelik höbs doe dien wachwaord al gewiezig of 'n nuuj tiedelik wachwaord aang 'showlivepreview' => 'Bewèrking ter controle tuine', 'showdiff' => 'Toen verangeringe', 'anoneditwarning' => 'Doe bis neet aangemeld. Dien IP adres weurt opgesjlage in de historie van dees pagina.', +'anonpreviewwarning' => "''Doe bös neet aangemeldj.'' +''Door dien bewèrking op te slaon wört dien IP-adres opgeslagen in de paginagesjiedenis.''", 'missingsummary' => "'''Herinnering:''' doe höbs gein samevatting opgegaeve veur dien bewirking. Es te weer op ''Pagina opslaon'' kliks weurt de bewirking zonger samevatting opgesjlage.", 'missingcommenttext' => 'Plaats dien opmèrking hiej onger, a.u.b.', -'missingcommentheader' => "'''Let op:''' Doe höbs gén ongerwerp/kop veur deze opmèrking opgegaeve. Esse oppernuuj op \"opslaon\" kliks, wörd dien verangering zonger ongerwerp/kop opgeslage.", +'missingcommentheader' => "'''Let op:''' Doe höbs gén ongerwerp/kop veur deze opmèrking opgegaeve. Esse oppernuuj op \"{{int:savearticle}}\" kliks, wörd dien verangering zonger ongerwerp/kop opgeslage.", 'summary-preview' => 'Naokieke samevatting:', 'subject-preview' => 'Naokieke ongerwerp/kop:', 'blockedtitle' => 'Gebroeker is geblokkeerd', @@ -755,7 +755,12 @@ De leste bloklogregel wuuertj hiejónger t'r raodpleging gegaeve:", 'usercsspreview' => "'''Dit is allein 'n veurvertuun van dien perseunlike css, deze is neet opgeslage!'''", 'userjspreview' => "'''Lèt op: doe tes noe dien persuunlik JavaScript.''' '''De pagina is neet opgesjlage!'''", -'userinvalidcssjstitle' => "'''Waorsjuwing:''' d'r is geine skin \"\$1\". Let op: dien eige .css- en .js-pazjena's beginne mèt 'ne kleine letter, bijveurbeeld {{ns:user}}:Naam/monobook.css in plaats van {{ns:user}}:Naam/Monobook.css.", +'sitecsspreview' => "'''Dit is allein 'n veurvertuin van de CSS.''' +'''Deze is nog neet opgesjlage!'''", +'sitejspreview' => "'''Dit is allein 'n veurvertuin van de JavaScriptcode.''' +'''Deze is nog neet opgesjlage!'''", +'userinvalidcssjstitle' => "'''Waarsjoewing:''' d'r is gein skin \"\$1\". +Lèt op: dien eige .css- en .js-pagina's beginne mèt 'ne klein lètter, beveurbeeld {{ns:user}}:Naam/vector.css in plaats van {{ns:user}}:Naam/Vector.css.", 'updated' => '(Biegewèrk)', 'note' => "'''Opmirking:'''", 'previewnote' => "'''Lèt op: dit is 'n controlepagina; dien teks is nog neet opgesjlage!'''", @@ -787,7 +792,6 @@ De mós dien eige verangeringe dao-in inpasse. 'copyrightwarning2' => "Mèrk op dat alle biedrages aan {{SITENAME}} kinne weure verangerd, aangepas of weggehaold door anger luuj. As te neet wils dat dienen tèks zoemer kint weure aangepas mós te 't hie neet plaatsje.
    De beluifs ós ouch dats te dezen tèks zelf höbs gesjreve, of gekopieerd van 'n brón in 't publiek domein of get vergliekbaars (zuug $1 veur details). '''HIE GEIN AUTEURSRECHTELIK BESJIRMP WERK ZÓNGER TOESJTUMMING!'''", -'longpagewarning' => "WAARSJOEWING: Dees pazjena is $1 kilobytes lank; 'n aantal browsers kint probleme höbbe mit 't verangere van pazjena's in de buurt van of groeter es 32 kB. Kiek ofs te sjtökker van de pazjena mesjiens kins verplaatse nao 'n nuuj pazjena.", 'longpageerror' => "'''ERROR: De teks diese höbs toegevoegd haet is $1 kilobyte groot, wat groter is dan 't maximum van $2 kilobyte. Opslaon is neet meugelik.'''", 'readonlywarning' => "WAARSJUWING: De database is vasgezèt veur ongerhoud, dus op 't mement kins e dien verangeringe neet opsjlaon. De kins dien tèks 't biste opsjlaon in 'n tèksbesjtand om 't later hie nog es te prebere. @@ -964,6 +968,8 @@ $1", 'logdelete-failure' => "'''De zichbaarheid van de logbookregel kos neet ingesteldj waere:''' $1", 'revdel-restore' => 'Zichbaarheid verangere', +'revdel-restore-deleted' => 'gwösj versies', +'revdel-restore-visible' => 'zichber versies', 'pagehist' => 'Paginagesjiedenis', 'deletedhist' => 'Verwiederde gesjiedenis', 'revdelete-content' => 'inhoud', @@ -1032,11 +1038,13 @@ Wees zeker det deze wieziging de gesjiedenisdoorloupendheid van de pagina zal be # Diffs 'history-title' => 'Gesjiedenis van "$1"', 'difference' => '(Versjil tösje bewirkinge)', +'difference-multipage' => '(Versjil tösje paazjes)', 'lineno' => 'Tekslien $1:', 'compareselectedversions' => 'Vergeliek geselecteerde versies', 'showhideselectedversions' => 'Tuin/versjtaek geselecteerde versies', 'editundo' => 'maak óngedaon', -'diff-multi' => '({{PLURAL:$1|éin tusseligkede versie wörd|$1 tusseligkede versies waere}} neet getuund)', +'diff-multi' => '({{PLURAL:$1|Ein tusseligkende versie|$1 Tusseligkende versies}} dórch {{PLURAL:$2|eine gebroeker|$2 gebroekers}} {{PLURAL:$1|weurt|waere}} neet getuund)', +'diff-multi-manyusers' => '($1 tösseligkende versies door mier es $2 gebroekers waere neet waergaeve)', # Search results 'searchresults' => 'Zeukresultate', @@ -1071,6 +1079,7 @@ Wees zeker det deze wieziging de gesjiedenisdoorloupendheid van de pagina zal be 'searchprofile-everything-tooltip' => "Alle inhaud doorzeuke (inklusief euverlèkpagina's)", 'searchprofile-advanced-tooltip' => 'Zeuke in aongegeve naamruumdes', 'search-result-size' => '$1 ({{PLURAL:$2|1 waord|$2 wäörd}})', +'search-result-category-size' => '{{PLURAL:$1|1 categorielid|$1 categorielede}} ({{PLURAL:$2|1 ongercategorie|$2 ongercategorieë}}, {{PLURAL:$3|1 bestandj|$3 bestenj}})', 'search-result-score' => 'Relevantie: $1%', 'search-redirect' => '(doorverwiezing $1)', 'search-section' => '(subkop $1)', @@ -1149,6 +1158,7 @@ Mèrk op dat hun indexe van {{SITENAME}} content e bietje gedatierd kint zien.', 'contextlines' => 'Aantal regels per gevónje pagina', 'contextchars' => 'Aantal teikes van de conteks per reigel', 'stub-threshold' => 'Drempel veur markering begske:', +'stub-threshold-disabled' => 'Oetgezatj', 'recentchangesdays' => 'Aantal daag te tuine in de recènte verangeringe:', 'recentchangesdays-max' => '(maximaal $1 {{PLURAL:$1|daag|daag}})', 'recentchangescount' => 'Standerd aantal waer te gaeve bewèrkinge:', @@ -1182,6 +1192,7 @@ Hie volg n willekäörig gegenereerde waerde die se kins gebroeke: $1', 'prefs-files' => 'Bestenj', 'prefs-custom-css' => 'Persoonlijke CSS', 'prefs-custom-js' => 'Persoonlijke JS', +'prefs-common-css-js' => 'Gedeilde CSS/JS veur eder vormgaeving:', 'prefs-reset-intro' => 'Gebroek dees functie om dien veurkäöre te herstelle nao de standaardinstellinge. Dees hanjeling kin neet ongedaon gemaak waere.', 'prefs-emailconfirm-label' => 'E-mailbevestiging:', @@ -1219,9 +1230,15 @@ Deze informatie is zichbaar veur angere gebroekers.', 'prefs-advancedrendering' => 'Wiejer instèllinger', 'prefs-advancedsearchoptions' => 'Wiejer instèllinger', 'prefs-advancedwatchlist' => 'Wiejer instèllinger', -'prefs-display' => 'Toeaningsinstèllinger', +'prefs-displayrc' => 'Toeaningsinstèllinger', +'prefs-displaysearchoptions' => 'Toeaningsinstèllinger', +'prefs-displaywatchlist' => 'Toeaningsinstèllinger', 'prefs-diffs' => 'Vers', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => "'t E-mailadres liek geldig", +'email-address-validity-invalid' => "Gif 'n geldig e-mailadres op", + # User rights 'userrights' => 'Gebroekersrechtebeheer', 'userrights-lookup-user' => 'Beheer gebroekersgróppe', @@ -1305,6 +1322,7 @@ Deze informatie is zichbaar veur angere gebroekers.', 'right-hideuser' => "'ne gebroeker veur de euverige gebroekers verberge", 'right-ipblock-exempt' => 'IP-blokkades omzeile', 'right-proxyunbannable' => "Blokkades veur proxy's gelde neet", +'right-unblockself' => 'Óntblok eige gebroeker', 'right-protect' => 'Beveiligingsniveaus wijzige', 'right-editprotected' => "Beveiligde pagina's bewerke", 'right-editinterface' => 'De gebroekersinterface bewerke', @@ -1327,7 +1345,6 @@ Deze informatie is zichbaar veur angere gebroekers.', 'right-siteadmin' => 'De database blokkere en weer vriegaeve', 'right-reset-passwords' => 'Wachtwoorde van andere gebroekers opnieuw instelle', 'right-override-export-depth' => "Export paazjes midin geslinkdje paazjes mit 'n deepdje ven 5", -'right-versiondetail' => 'Tuun oetgebreide versieinformatie van de software', 'right-sendemail' => 'Versjik e-mail aan anger gebroekers', # User rights log @@ -1378,14 +1395,9 @@ Deze informatie is zichbaar veur angere gebroekers.', 'recentchanges-legend' => 'Opties veur recènte verangeringe', 'recentchangestext' => 'op dees pagina kins doe de recènte verangeringe in deze wiki bekieke.', 'recentchanges-feed-description' => 'Volg de meis recente bewerkinge in deze wiki via deze feed.', -'recentchanges-label-legend' => 'Legenda: $1.', -'recentchanges-legend-newpage' => '$1 - Nuuj pagina', 'recentchanges-label-newpage' => "Mit dees verangering is 'n nuuj pagina aangemaak", -'recentchanges-legend-minor' => '$1 - klein verangering', 'recentchanges-label-minor' => "Dit is 'n klein bewirking", -'recentchanges-legend-bot' => '$1 - botbewirking', 'recentchanges-label-bot' => "Dees bewirking is oetgeveurd door 'ne bot", -'recentchanges-legend-unpatrolled' => '$1 - ongekónterleerde bewirking', 'recentchanges-label-unpatrolled' => 'Dees bewirking is nog neet gekónterleerd', 'rcnote' => "Hiejónger {{PLURAL:$1|steit de lètste bewirking|staon de lètste '''$1''' bewirkinge}} van de aafgeloupe {{PLURAL:$2|daag|'''$2''' daag}}, op $4, um $5.", 'rcnotefrom' => "Verangeringe sins $2 (mit 'n maximum van $1 verangeringe).", @@ -1431,6 +1443,9 @@ Deze informatie is zichbaar veur angere gebroekers.', 'upload_directory_missing' => 'De uploadmap ($1) is neet aanwezig en kos neet aangemaak waere door de webserver.', 'upload_directory_read_only' => 'De webserver kin neet sjrieve in de uploadmap ($1).', 'uploaderror' => "fout in 't uploade", +'upload-recreate-warning' => "'''Waorsjoewing: dr is e bestandj mit deze naam verwiederd of hernump.''' + +Hiejonger waere t verwiederlogbook en t hernummingslogbook veur dees pagina waergaeve:", 'uploadtext' => "Gebroek 't óngersjtaond formeleer óm besjtande te uploade. Óm ierder biegedone besjtande te betrachte of te zeuke, gank nao de [[Special:FileList|lies van geüploade besjtande]]. Uploads waere ouch biegehauwte in 't [[Special:Log/upload|uploadlogbook]], ewegsjaffinge in 't [[Special:Log/delete|wislogbook]] @@ -1467,6 +1482,17 @@ De lètste link is bedoeld veur mediabesjtande die gein plaetje zeen.", Aangeweze {{PLURAL:\$3|bestandjstype|bestandjstypes}}zeen \$2.", 'filetype-banned-type' => "'''\".\$1\"''' is gein toegelaote bestandstype. Toegelaote {{PLURAL:\$3|bestandjtype|bestandjtypes}} zeen \$2.", 'filetype-missing' => 'Dit bestandj haet gein extensie (wie ".jpg").', +'empty-file' => 't Bestandj det se perbeers te uploade had gein inhald.', +'file-too-large' => 't Bestandj det se perbeers te uploade waas te groet.', +'filename-tooshort' => "t Bestandj det se perbeers te uploade had 'ne te kórte bestandjsnaam.", +'filetype-banned' => 't Bestandj det se perbeers te uploade waas van e neet-toegelaote bestandjstype.', +'verification-error' => 'De verificatie van t bestandj det se probeers te uploade is misluk.', +'hookaborted' => "De wieziging die se perbeers te make is aafgebraoke door 'nen oetbreidingshook.", +'illegal-filename' => 'Deze bestandjsnaam is neet toegelaote.', +'overwrite' => 'E bestandj euversjrieve geit neet.', +'unknown-error' => "dr Is 'n ónbekènde fout opgetraoje.", +'tmp-create-error' => 't Waas neet meugelik e tiedelik bestandj aan te make.', +'tmp-write-error' => 'dr Is n fout opgetraoje bie t sjrieve van t tiedelik bestandj.', 'large-file' => 'Aanbeveling: maak bestenj neet groter dan $1, dit bestand is $2.', 'largefileserver' => "'t Bestandj is groter dan de instelling van de server toestuit.", 'emptyfile' => "'t Besjtand wats re höbs geupload is laeg. Dit kump waorsjienliek door 'n typfout in de besjtandsnaom. Kiek estebleef ofs te dit besjtand wirkelik wils uploade.", @@ -1491,13 +1517,14 @@ Esse deze afbeelding in volledige resolutie höbs, upload dae afbeelding den. Wi 'file-exists-duplicate' => "Dit besjtandj is identiek aon {{PLURAL:$1|'t volgende besjtandj|de volgende besjtande}}:", 'file-deleted-duplicate' => 'n Bestandj det identiek is aan dit bestandj ([[:$1]]) is veurhaer verwiederd. Raodpleeg t verwiederingslogbook veurdet se wiejer geis.', -'successfulupload' => 'De upload is geluk', 'uploadwarning' => 'Upload waarsjuwing', 'uploadwarning-text' => 'Pas de ongerstaonde bestandjsbesjrieving aan en perbeer t daonao opnuuj.', 'savefile' => 'Bestand opsjlaon', 'uploadedimage' => 'haet ge-upload: [[$1]]', 'overwroteimage' => 'haet \'ne nuuje versie van "[[$1]]" toegevoeg', 'uploaddisabled' => 'Uploade is oetgesjakeld', +'copyuploaddisabled' => 't Uploade van bestenj via nen URL is oetgezat.', +'uploadfromurl-queued' => 'Dienen upload is in de wachrie geplaats.', 'uploaddisabledtext' => "'t uploade van bestenj is oetgesjakeld.", 'php-uploaddisabledtext' => 'PHP-bestanduploads zeen oetgesjakeld. Controleer a.u.b. de file_uploads-instelling.', 'uploadscripted' => 'Dit bestandj bevat HTML- of scriptcode die foutief door diene browser weergegaeve kinne waere.', @@ -1516,6 +1543,15 @@ Raodpleeg t verwiederingslogbook veurdet se wiejer geis.', Lèver zeker te zeen detse gesjik bös om door te gaon met 't uploade van dit bestand. 't verwiederingslogbook van dit bestand kinse hiej zeen:", 'filename-bad-prefix' => "De naam van 't bestand detse aan 't uploade bös begint met '''\"\$1\"''', wat 'ne neet-besjrievende naam is dae meestal automatisch door 'ne digitale camera wörd gegaeve. Kees estebleef 'ne dudelike naam veur dien bestand.", +'upload-success-subj' => 'De upload is geluk', +'upload-success-msg' => 'Dienen upload van [$2] is geslaag en is besjikbaar: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Uploadperbleem', +'upload-failure-msg' => 'dr Waas e perbleem mit dienen upload veur [$2]: + +$1', +'upload-warning-subj' => 'Uploadwaorsjoewing', +'upload-warning-msg' => 'dr Waas e perbleem mit dienen upload van [$2]. +Gank trök nao t [[Special:Upload/stash/$1|uploadformuleer]] om dit perbleem te verhelpe.', 'upload-proto-error' => 'Verkeerd protocol', 'upload-proto-error-text' => "Uploads via deze methode vereise URL's die beginne met http:// of ftp://.", @@ -1575,6 +1611,7 @@ Klikke op 'ne kolomkop verangert de sortering.", 'listfiles_search_for' => 'Zeuk nao bestandj:', 'imgfile' => 'bestandj', 'listfiles' => 'Lies van aafbeildinge', +'listfiles_thumb' => 'Miniatuurplaetje', 'listfiles_date' => 'Datum', 'listfiles_name' => 'Naom', 'listfiles_user' => 'Gebroeker', @@ -1687,8 +1724,8 @@ De [$2 pagina mit de besjtandjsbesjrieving] wurt hiejónger weergegaeve.', 'statistics-edits' => 'Paginabewerkinge sins t begin van {{SITENAME}}', 'statistics-edits-average' => 'Gemiddeld aantal bewerkinge per pagina', 'statistics-views-total' => "Totaal aantal weergegeve pagina's", +'statistics-views-total-desc' => "'t Bekieke van neet-bestaonde pagina's en speciaal pagina's is neet inbegrepe", 'statistics-views-peredit' => "Weergegeve pagina's per bewerking", -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Jobqueuelengte]', 'statistics-users' => 'Geregistreerde [[Special:ListUsers|gebroekers]]', 'statistics-users-active' => 'Actieve gebroekers', 'statistics-users-active-desc' => "Gebroekers die in de aafgeloupe {{PLURAL:$1|daag|$1 daag}} 'ne hanjeling höbbe oetgevoerd", @@ -1701,8 +1738,9 @@ Deze heure waarsjienlik direct nao 't zjuste ongerwerp te verwiezen.
    'ne pagina wörd gezeen es redirect wen d'r 'n sjabloon op stuit det gelink is vanaaf [[MediaWiki:Disambiguationspage]]", 'doubleredirects' => 'Dobbel redirects', -'doubleredirectstext' => 'Kiek oet: In dees lies kanne redirects sjtaon die neet dao-in toeshure. Dat kump meistal doordat nao de #REDIRECT nog anger links op de pazjena sjtaon.
    -Op eder raegel vings te de ierste redirectpazjena, de twiede redirectpazjena en de iesjte raegel van de twiede redirectpazjena. Normaal bevat dees litste de pazjena woe de iesjte redirect naotoe zouw mótte verwieze.', +'doubleredirectstext' => "Dees lies haet paazjes mit redireks die nao anger redireks gaon. +Op eder raegel vings te de ierste redirectpazjena, de twiede redirectpazjena en de iesjte raegel van de twiede redirectpazjena. Meistes bevat dees litste de pazjena woe de iesjte redirect naotoe zouw mótte verwieze. +Dórchstreipinge zègke det 't al gedaon is.", 'double-redirect-fixed-move' => "[[$1]] is verplaats en is noe 'n doorverwiezing nao [[$2]]", 'double-redirect-fixer' => 'Doorverwiezinge opsjone', @@ -1725,6 +1763,8 @@ Op eder raegel vings te de ierste redirectpazjena, de twiede redirectpazjena en 'nmembers' => '$1 {{PLURAL:$1|lid|lede}}', 'nrevisions' => '$1 {{PLURAL:$1|herzening|herzeninge}}', 'nviews' => '{{PLURAL:$1|eine kieër|$1 kieër}} bekeke', +'nimagelinks' => "Gebroek op $1 {{PLURAL:$1|pagina|pagina's}}", +'ntransclusions' => "Gebroek op $1 {{PLURAL:$1|pagina|pagina's}}", 'specialpage-empty' => 'Deze pagina is laeg.', 'lonelypages' => "Weispazjena's", 'lonelypagestext' => "Nao de ongerstäönde pagina's wörd vanoet {{SITENAME}} neet verweze. @@ -1882,34 +1922,40 @@ Infermasie daoreuver èn de individueel rechter vinjs te [[{{MediaWiki:Listgroup 'listgrouprights-removegroup-self-all' => 'Wösj alle gruup van eige gebroeker', # E-mail user -'mailnologin' => 'Gein e-mailadres bekènd veur deze gebroeker', -'mailnologintext' => "De mos zien [[Special:UserLogin|aangemèld]] en 'n gèldig e-mailadres in bie dien [[Special:Preferences|veurkäöre]] höbbe ingevuld om mail nao anger gebroekers te sjture.", -'emailuser' => "Sjik deze gebroeker 'nen e-mail", -'emailpage' => "Sjik gebroeker 'nen e-mail", -'emailpagetext' => "Es deze gebroeker e geljig e-mailadres haet opgegaeve den kint g'r via dit formuleer e berich sjikke. 't E-mailadres wat geer heet opgegeve bie eur [[Special:Preferences|veurkäöre]] zal es versjikker aangegaeve waere. +'mailnologin' => 'Gein e-mailadres bekènd veur deze gebroeker', +'mailnologintext' => "De mos zien [[Special:UserLogin|aangemèld]] en 'n gèldig e-mailadres in bie dien [[Special:Preferences|veurkäöre]] höbbe ingevuld om mail nao anger gebroekers te sjture.", +'emailuser' => "Sjik deze gebroeker 'nen e-mail", +'emailpage' => "Sjik gebroeker 'nen e-mail", +'emailpagetext' => "Es deze gebroeker e geljig e-mailadres haet opgegaeve den kint g'r via dit formuleer e berich sjikke. 't E-mailadres wat geer heet opgegeve bie eur [[Special:Preferences|veurkäöre]] zal es versjikker aangegaeve waere. Dae kin dös drek reazjere.", -'usermailererror' => "Foutmeljing biej 't zenje:", -'defemailsubject' => 'E-mail van {{SITENAME}}', -'noemailtitle' => 'Gein e-mailadres bekènd veur deze gebroeker', -'noemailtext' => 'Deze gebroeker haet gein gèldig e-mailadres opgegaeve.', -'nowikiemailtitle' => 'E-mail is neet toegestaon', -'nowikiemailtext' => 'Deze gebroeker wil geine e-mail ontvange van anger gebroekers.', -'email-legend' => 'ne E-mail versture nao ne angere gebroeker van {{SITENAME}}', -'emailfrom' => 'Ven:', -'emailto' => 'Aan:', -'emailsubject' => 'Óngerwerp:', -'emailmessage' => 'Berich:', -'emailsend' => 'Sjik berich', -'emailccme' => "Stuur 'n kopie van dit berich nao mien e-mailadres.", -'emailccsubject' => 'Kopie van dien berich aan $1: $2', -'emailsent' => 'E-mail sjikke', -'emailsenttext' => 'Die berich is versjik.', -'emailuserfooter' => 'Deze e-mail is verstuurd door $1 aan $2 door de functie "Deze gebroeker e-maile" van {{SITENAME}}.', +'usermailererror' => "Foutmeljing biej 't zenje:", +'defemailsubject' => 'E-mail van {{SITENAME}}', +'usermaildisabled' => 'Gebroeker e-mail oetgezatj.', +'usermaildisabledtext' => 'Doe kèns geinen e-mail sjikke nao anger gebroekers op deze wiki', +'noemailtitle' => 'Gein e-mailadres bekènd veur deze gebroeker', +'noemailtext' => 'Deze gebroeker haet gein gèldig e-mailadres opgegaeve.', +'nowikiemailtitle' => 'E-mail is neet toegestaon', +'nowikiemailtext' => 'Deze gebroeker wil geine e-mail ontvange van anger gebroekers.', +'email-legend' => 'ne E-mail versture nao ne angere gebroeker van {{SITENAME}}', +'emailfrom' => 'Ven:', +'emailto' => 'Aan:', +'emailsubject' => 'Óngerwerp:', +'emailmessage' => 'Berich:', +'emailsend' => 'Sjik berich', +'emailccme' => "Stuur 'n kopie van dit berich nao mien e-mailadres.", +'emailccsubject' => 'Kopie van dien berich aan $1: $2', +'emailsent' => 'E-mail sjikke', +'emailsenttext' => 'Die berich is versjik.', +'emailuserfooter' => 'Deze e-mail is verstuurd door $1 aan $2 door de functie "Deze gebroeker e-maile" van {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Systeembrich naogelaote.', +'usermessage-editor' => 'Sysyeembrich', # Watchlist 'watchlist' => 'Volglies', 'mywatchlist' => 'Volglies', -'watchlistfor' => "(veur '''$1''')", +'watchlistfor2' => 'Veur $1 $2', 'nowatchlist' => "D'r sjtit niks op dien volglies.", 'watchlistanontext' => '$1 is verplich om dien volglies in te zeen of te wiezige.', 'watchnologin' => 'De bis neet aangemèld', @@ -2024,7 +2070,10 @@ De lètste bewirking is gedaon door [[User:$3|$3]] ([[User talk:$3|euverlik]]{{i 'revertpage' => 'Wieziginge door [[Special:Contributions/$2|$2]] ([[User talk:$2|Euverlik]]) trukgedriejd tot de lètste versie door [[User:$1|$1]]', 'revertpage-nouser' => 'Wieziginge door (gwösdje gebroeker) trögkgezadj nao bie [[User:$1|$1]]', 'rollback-success' => 'Wieziginge door $1 trökgedrèjd; letste versie van $2 hersteld.', -'sessionfailure' => "d'r Liek 'n probleem te zeen mit dien aanmelsessie. Diene hanjeling is gestop oet veurzorg taenge 'n beveiligingsrisico (det bestuit oet meugelik \"hijacking\"(euverkape) van deze sessie). Gao 'n pazjena trök, laaj die pazjena opnuuj en probeer 't nog ins.", + +# Edit tokens +'sessionfailure-title' => 'Sessiefout', +'sessionfailure' => "d'r Liek 'n probleem te zeen mit dien aanmelsessie. Diene hanjeling is gestop oet veurzorg taenge 'n beveiligingsrisico (det bestuit oet meugelik \"hijacking\"(euverkape) van deze sessie). Gao 'n pazjena trök, laaj die pazjena opnuuj en probeer 't nog ins.", # Protect 'protectlogpage' => "Logbook besjermde pagina's", @@ -2151,19 +2200,23 @@ $1", 'month' => 'Van maond (en ierder):', 'year' => 'Van jaor (en ierder):', -'sp-contributions-newbies' => 'Tuin allein de biedrage van nuuj gebroekers', -'sp-contributions-newbies-sub' => 'Veur nuujelinge', -'sp-contributions-newbies-title' => 'Biedraag ven nuuj gebroekers', -'sp-contributions-blocklog' => 'Blokkeerlogbook', -'sp-contributions-deleted' => 'eweggesjafde gebroekersbiedrages', -'sp-contributions-logs' => 'logbeuk', -'sp-contributions-talk' => 'euverlèk', -'sp-contributions-userrights' => 'gebroekersrechtebeheer', -'sp-contributions-blocked-notice' => "Deze gebroeker is noe geblok. +'sp-contributions-newbies' => 'Tuin allein de biedrage van nuuj gebroekers', +'sp-contributions-newbies-sub' => 'Veur nuujelinge', +'sp-contributions-newbies-title' => 'Biedraag ven nuuj gebroekers', +'sp-contributions-blocklog' => 'Blokkeerlogbook', +'sp-contributions-deleted' => 'eweggesjafde gebroekersbiedrages', +'sp-contributions-uploads' => 'uploads', +'sp-contributions-logs' => 'logbeuk', +'sp-contributions-talk' => 'euverlèk', +'sp-contributions-userrights' => 'gebroekersrechtebeheer', +'sp-contributions-blocked-notice' => "Deze gebroeker is noe geblok. De leste bloklogregel wuuertj hiejónger t'r raodpleging gegaeve:", -'sp-contributions-search' => 'Zeuke nao biedrages', -'sp-contributions-username' => 'IP-adres of gebroekersnaam:', -'sp-contributions-submit' => 'Zeuk', +'sp-contributions-blocked-notice-anon' => "Dit IP-adres is noe geblok. +De leste bloklogregel wuuertj hiejónger t'r raodpleging gegaeve:", +'sp-contributions-search' => 'Zeuke nao biedrages', +'sp-contributions-username' => 'IP-adres of gebroekersnaam:', +'sp-contributions-toponly' => 'Nör nuujste versies getuundj', +'sp-contributions-submit' => 'Zeuk', # What links here 'whatlinkshere' => 'Links nao dees pagina', @@ -2222,7 +2275,6 @@ Zuug de [[Special:IPBlockList|lies van geblokkeerde IP-adresse]].', 'ipb-edit-dropdown' => 'Bewerk lies van rejer', 'ipb-unblock-addr' => 'Ónblokkeer $1', 'ipb-unblock' => "Ónblokkeer 'ne gebroeker of IP-adres", -'ipb-blocklist-addr' => 'Bestaonde blokkades veur $1', 'ipb-blocklist' => 'Bekiek bestaonde blokkades', 'ipb-blocklist-contribs' => 'Biedraag ven $1', 'unblockip' => 'Deblokkeer IP adres', @@ -2292,6 +2344,8 @@ Wils se de instellinge wiezige?', 'cant-block-while-blocked' => 'De kins anger gebroekers neet blokkere terwiel se zelf geblokkeerd bös.', 'cant-see-hidden-user' => 'De gebroeker dae se perbeers te blokke is al geblok en verbórge. Ómdes se \'t rèch "hideuser" neet höbs, kèns se de blok neet bekieke of bewerke.', +'ipbblocked' => 'Doe kèns gein anger gebroekers (ónt)blokke, ómdet se zèlf geblók bös.', +'ipbnounblockself' => 'Doe moogs dichzèlf neet óntblokke.', # Developer tools 'lockdb' => 'Database blokkere', @@ -2380,6 +2434,7 @@ De doeltitel "[[:$1]]" besjteit al. Wils te dit artikel wisse óm ruumde te make 'immobile-source-page' => 'Deze pagina kin neet hernömp waere.', 'immobile-target-page' => "'t Is neet meugelik te hernömmen nao die paginanaam.", 'imagenocrossnamespace' => "'n Mediabestand kin neet nao 'n anger naamruumde verplaats waere", +'nonfile-cannot-move-to-file' => 'Kèn gein neet-bestenj nao bestenj verplaatse.', 'imagetypemismatch' => "De nuje bestandjsextensie is neet gliek aan 't bestandjstype.", 'imageinvalidfilename' => 'De nuje bestandsnaam is ongeldig', 'fix-double-redirects' => 'Alle doorverwiezinge biewerke die verwieze nao de originele paginanaam', @@ -2459,6 +2514,7 @@ Alle transwiki-importhanjelinge waere opgeslage in 't [[Special:Log/import|impor 'importstart' => "Pazjena's aan 't importere ...", 'import-revision-count' => '$1 {{PLURAL:$1|versie|versies}}', 'importnopages' => "Gein pazjena's te importere.", +'imported-log-entries' => '$1 {{PLURAL:$1|logbookregel|logbookregele}} ingeveurdj.', 'importfailed' => 'Import is misluk: $1', 'importunknownsource' => 'Ónbekindj importbróntype', 'importcantopen' => "Kós 't importbestandj neet äöpene", @@ -2552,6 +2608,8 @@ Alle transwiki-importhanjelinge waere opgeslage in 't [[Special:Log/import|impor 'tooltip-rollback' => 'Mit "trökdrieje" driejs doe mit eine klik de bewirking(e) trök van de lètste gebroeker dee dees pagina haet bewirk.', 'tooltip-undo' => 'Mit "óngedaon make" driejs te dees bewirking trök en koms te in \'t bewirkingsvinster. Doe kans in de bewirkingssamevatting \'n reej opgaeve.', +'tooltip-preferences-save' => 'Slaon veurkäöre óp', +'tooltip-summary' => "Veur 'n kórte samevatting in", # Metadata 'nodublincore' => 'Dublin Core RDF metadata is oetgesjakeld op deze server.', @@ -2650,14 +2708,17 @@ $1", 'imagemaxsize' => "Meximale aafbeildjingsaafmaeting:''(veur besjrievingspaasj)''", 'thumbsize' => 'Gruutde vanne thumbnail:', 'widthheightpage' => "$1×$2, $3 {{PLURAL:$3|pazjena|pazjena's}}", -'file-info' => '(bestandsgruutde: $1, MIME-type: $2)', -'file-info-size' => '($1 × $2 pixels, besjtandjgruutde: $3, MIME-type: $4)', +'file-info' => 'bestandsgruutde: $1, MIME-type: $2', +'file-info-size' => '$1 × $2 pixels, besjtandjgruutde: $3, MIME-type: $4', 'file-nohires' => 'Gein hogere resolutie besjikbaar.', -'svg-long-desc' => '(SVG-bestandj, nominaal $1 × $2 pixels, bestandsgruutde: $3)', +'svg-long-desc' => 'SVG-bestandj, nominaal $1 × $2 pixels, bestandsgruutde: $3', 'show-big-image' => 'Vol resolutie', 'show-big-image-thumb' => 'Gruutde van deze afbeilding: $1 × $2 pixels', 'file-info-gif-looped' => 'herhaolendj', 'file-info-gif-frames' => '$1 {{PLURAL:$1|kader|kadere}}', +'file-info-png-looped' => 'herhaolendj', +'file-info-png-repeat' => '$1 {{PLURAL:$1|kieër|kieër}} aafgespeelj', +'file-info-png-frames' => '$1 {{PLURAL:$1|kader|kadere}}', # Special:NewFiles 'newimages' => 'Nuuj plaetjes', @@ -2967,27 +3028,27 @@ Alle volgende links die op dezelfde regel sjtaon, waere behanjeld es oetzunjerin 'limitall' => 'al', # E-mail address confirmation -'confirmemail' => 'Bevèstig e-mailadres', -'confirmemail_noemail' => 'Doe höbs gein geldig e-mailadres ingegaeve in dien [[Special:Preferences|veurkäöre]].', -'confirmemail_text' => "Deze wiki vereis dats te dien e-mailadres instèls iedats te e-mailfuncties +'confirmemail' => 'Bevèstig e-mailadres', +'confirmemail_noemail' => 'Doe höbs gein geldig e-mailadres ingegaeve in dien [[Special:Preferences|veurkäöre]].', +'confirmemail_text' => "Deze wiki vereis dats te dien e-mailadres instèls iedats te e-mailfuncties gebroeks. Klik op de knop hieónger óm e bevèstegingsberich nao dien adres te sjikke. D'n e-mail zal 'ne link mèt 'n code bevatte; eupen de link in diene browser óm te bevestege dat dien e-mailadres werk.", -'confirmemail_pending' => "Dao is al 'n bevestigingsberich aan dich versjik. Wens te zjus diene gebroeker aangemaak höbs, wach dan e paar minute pès 't aankump veurdets te opnuuj 'n e-mail leuts sjikke.", -'confirmemail_send' => "Sjik 'n bevèstegingcode", -'confirmemail_sent' => 'Bevèstegingsberich versjik.', -'confirmemail_oncreate' => "D'r is 'n bevestigingscode nao dien e-mailadres versjik. Dees code is neet nudig óm aan te melje, meh doe mós dees waal bevestige veurdets te de e-mailmäögelikheite van deze wiki kèns nótse.", -'confirmemail_sendfailed' => "{{SITENAME}} kós 't bevèstegingsberich neet versjikke. +'confirmemail_pending' => "Dao is al 'n bevestigingsberich aan dich versjik. Wens te zjus diene gebroeker aangemaak höbs, wach dan e paar minute pès 't aankump veurdets te opnuuj 'n e-mail leuts sjikke.", +'confirmemail_send' => "Sjik 'n bevèstegingcode", +'confirmemail_sent' => 'Bevèstegingsberich versjik.', +'confirmemail_oncreate' => "D'r is 'n bevestigingscode nao dien e-mailadres versjik. Dees code is neet nudig óm aan te melje, meh doe mós dees waal bevestige veurdets te de e-mailmäögelikheite van deze wiki kèns nótse.", +'confirmemail_sendfailed' => "{{SITENAME}} kós 't bevèstegingsberich neet versjikke. Zuug dien e-mailadres nao op óngeljige karakters. 't E-mailprogramma goof: $1", -'confirmemail_invalid' => 'Óngeljige bevèstigingscode. De code is meugelik verloupe.', -'confirmemail_needlogin' => 'Doe mós $1 óm dien e-mailadres te bevestige.', -'confirmemail_success' => 'Dien e-mailadres is bevesteg. De kins noe inlogke en van de wiki genete.', -'confirmemail_loggedin' => 'Dien e-mailadres is noe vasgelag.', -'confirmemail_error' => "Bie 't opsjlaon van eur bevèstiging is get fout gegange.", -'confirmemail_subject' => 'Bevèstiging e-mailadres veur {{SITENAME}}', -'confirmemail_body' => "Emes, waorsjienlik doe vanaaf 't IP-adres $1, heet 'n account $2 +'confirmemail_invalid' => 'Óngeljige bevèstigingscode. De code is meugelik verloupe.', +'confirmemail_needlogin' => 'Doe mós $1 óm dien e-mailadres te bevestige.', +'confirmemail_success' => 'Dien e-mailadres is bevesteg. De kins noe inlogke en van de wiki genete.', +'confirmemail_loggedin' => 'Dien e-mailadres is noe vasgelag.', +'confirmemail_error' => "Bie 't opsjlaon van eur bevèstiging is get fout gegange.", +'confirmemail_subject' => 'Bevèstiging e-mailadres veur {{SITENAME}}', +'confirmemail_body' => "Emes, waorsjienlik doe vanaaf 't IP-adres $1, heet 'n account $2 aangemaak mit dit e-mailadres op {{SITENAME}}. Eupen óm te bevèstige dat dit account wirkelik van dich is en de @@ -3000,8 +3061,20 @@ Es geer dit *neet* zeet, vólg den deze link: $5 Dees bevèstigingscode blief geljig tot $4", -'confirmemail_invalidated' => 'De e-mailbevestiging is geannuleerdj', -'invalidateemail' => 'E-mailbevestiging annulere', +'confirmemail_body_changed' => "Emes, waersjienlik doe, met 't IP-adres \$1, +haet 't e-mailadres geregistreerd veur gebroeker \"\$2\" op {{SITENAME}} gewiezig nao dit e-mailadres. + +Äöpen de volgende verwiezing in diene webbrowser om te bevestige des toe deze gebroeker bis en om de e-mailmeugelikhejen op {{SITENAME}} opnuuj te activere: + +\$3 + +Es se dichzelf '''neet''' hees aangemeld, volg den de volgende verwiezing om de bevestiging van dien e-mailadres te annulere: + +\$5 + +De bevestigingscode vervilt op \$4.", +'confirmemail_invalidated' => 'De e-mailbevestiging is geannuleerdj', +'invalidateemail' => 'E-mailbevestiging annulere', # Scary transclusion 'scarytranscludedisabled' => '[Interwikitransclusie is oetgesjakeld]', @@ -3041,6 +3114,7 @@ Bevesteg estebleef dats te dees pazjena ech obbenuujts wils aanmake.", 'table_pager_first' => 'Ierste pazjena', 'table_pager_last' => 'Lètste pazjena', 'table_pager_limit' => 'Tuin $1 resultate per pazjena', +'table_pager_limit_label' => 'Deil per paasj:', 'table_pager_limit_submit' => 'Gank', 'table_pager_empty' => 'Gein resultate', @@ -3098,6 +3172,7 @@ De kèns ouch [[Special:Watchlist/edit|'t sjtanderd bewirkingssjirm gebroeke]]." 'version-specialpages' => "Speciaal pazjena's", 'version-parserhooks' => 'Parserheuk', 'version-variables' => 'Variabele', +'version-skins' => 'Vörmgevinge', 'version-other' => 'Euverige', 'version-mediahandlers' => 'Mediaverwerkers', 'version-hooks' => 'Heuk', @@ -3109,6 +3184,13 @@ De kèns ouch [[Special:Watchlist/edit|'t sjtanderd bewirkingssjirm gebroeke]]." 'version-hook-subscribedby' => 'Geabonneerd door', 'version-version' => '(Versie $1)', 'version-license' => 'Licentie', +'version-poweredby-credits' => "Deze wiki weurt aangedreve door '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'anger', +'version-license-info' => "MediaWiki is vrieje sofware; de kins MediaWiki verspreien en/of aanpassen onger de veurwaerde van de GNU General Public License wie gepubliceerd door de Free Software Foundation; ofwaal versie 2 van de Licentie, of - nao diene wönsj - innig later versie. + +MediaWiki weurd verspreid in de haop det 't nuttig is, mer ZONGER INNIG GARANTIE; zonger zelfs de implicitiete garantie van VERKOUPBAARHEID of GESJIKHEID VEUR INNIG DOEL IN 'T BIEZÖNJER. Zuuch de GNU General Public License veur mier informatie. + +Same mit dit programma heurs se 'n [{{SERVER}}{{SCRIPTPATH}}/COPYING kopie van de GNU General Public License] te höbben ontvange; zo neet, sjrief den nao de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA of [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html laes de licentie online].", 'version-software' => 'Geïnstallieërde sofwaer', 'version-software-product' => 'Perduk', 'version-software-version' => 'Versie', @@ -3178,6 +3260,15 @@ Gaef de bestandjsnaam zónger \'t "{{ns:file}}:" veurvoogsel.', 'tags-edit' => 'bewerking', 'tags-hitcount' => '$1 {{PLURAL:$1|wieziging|wieziginge}}', +# Special:ComparePages +'comparepages' => "Vergeliek pazjena's", +'compare-selector' => 'Vergeliek pazjenaversies', +'compare-page1' => 'Paasj 1', +'compare-page2' => 'Paasj 2', +'compare-rev1' => 'Versie 1', +'compare-rev2' => 'Versie 2', +'compare-submit' => 'Vergeliek', + # Database error messages 'dberr-header' => "Deze wiki haet 'n probleem", 'dberr-problems' => 'Os excuses. Deze site ongervindj op t moment technische probleme.', @@ -3194,8 +3285,13 @@ Gaef de bestandjsnaam zónger \'t "{{ns:file}}:" veurvoogsel.', 'htmlform-float-invalid' => 'De waerd dae se haes ingegaeve is gei getal.', 'htmlform-int-toolow' => 'De ingegaeve waerd lèk ónger de maximumwaerd van $1', 'htmlform-int-toohigh' => 'De ingegaeve waerd lèk baove de maximumwaerd van $1', +'htmlform-required' => 'Dees waerd is verplich', 'htmlform-submit' => 'Slaon óp', 'htmlform-reset' => 'Maak verangeringe óngedaon', 'htmlform-selectorother-other' => 'Anges', +# SQLite database support +'sqlite-has-fts' => 'Zeuk versie $1 mit óngersteuning veur "full-text"', +'sqlite-no-fts' => 'Zeuk versie $1 zónger óngersteuning veur "fulltext"', + ); diff --git a/languages/messages/MessagesLij.php b/languages/messages/MessagesLij.php index 6236bfe2..12959f6f 100644 --- a/languages/messages/MessagesLij.php +++ b/languages/messages/MessagesLij.php @@ -138,8 +138,7 @@ $messages = array( 'tog-editondblclick' => 'Modifica e paggine co-o dópio clic (serve Javascrpt)', 'tog-editsection' => 'Modifica e seçión co-o colegamento [modifica]', 'tog-editsectiononrightclick' => 'Modifica e seçión co-o clic destro in sciô tìtolo (serve Javascipt)', -'tog-rememberpassword' => "Arregorda a mæ paròlla d'ordine", -'tog-editwidth' => 'Spaçio pe cangiâ a larghessa pinn-a', +'tog-rememberpassword' => "Arregorda a mæ paròlla d'ordine (a-o màscimo pe $1 {{PLURAL:$1|day|days}})", 'tog-previewontop' => "Veddi l'anteprimma de d'äto a-o spaçio pe cangiâ", 'tog-previewonfirst' => "Veddi l'anteprimma a-o primmo cangiamento", 'tog-enotifwatchlistpages' => "Fammelo savéi via e-mail quande 'na paggina inta mæ lista in osservassion a va cangiaa.", @@ -354,7 +353,7 @@ O to account o l'è stæto creoö. Non te ascordà de cangiâ e toe preferençe 'yourname' => 'Nomme', 'yourpassword' => 'Pòula segretta:', 'yourpasswordagain' => 'Ri-scriï a pòula segretta', -'remembermypassword' => "Arregordâ a mæ paròlla d'ordine", +'remembermypassword' => "Arregordâ a mæ paròlla d'ordine (for a maximum of $1 {{PLURAL:$1|day|days}})", 'yourdomainname' => 'Indirisso do scito:', 'login' => 'Intra', 'nav-login-createaccount' => 'Intra / Registrate', @@ -490,8 +489,6 @@ Se o s'ha intròu inte 'sto collegamento pe sbàllio, o basta sciaccâ '''Inderr Se no ti veu che i testi teu pêuan esse modificæ da quarchedùn sensa limitaçioìn, no mandâli a {{SITENAME}}.
    Inviando o testo ti diciâri, sott'a teu responsabilitæ, ch'o l'é stæto scrîto da ti personalmente oppure ch'o l'é stæto piggiòu da 'na fonte de pùbrico domìnio òu anàlogamente lìbea.
    '''NO INVIÂ MATERIÂLE COVERTO DA DRÎTI D'AUTÔ SENSA OUTORIZAÇION!'''", -'longpagewarning' => "'''ATTENSION: 'Sta paggina chì a g'ha $1 kilobyte; çerti browser porieivan avei di problemmi inta modiffica de-e paggine che s'avvixinn-an o che ecceddan i 32 kB. -Pe piaxei conscidera l'opportûnitæ de soddividde a paggina in sessioîn ciû piccinn-e.'''", 'templatesused' => "Template dêuviæ inte 'sta paggina:", 'templatesusedpreview' => "Template dêuviæ inte 'st'anteprimma:", 'template-protected' => '(protezûo)', @@ -784,7 +781,6 @@ Ti te peu strinza a vista se ti te çerni un tipo de registro, un nomme de un ut # Watchlist 'watchlist' => 'A mæ lista in osservassion', 'mywatchlist' => 'Lista in osservaçion', -'watchlistfor' => "(pe '''$1''')", 'watchnologin' => "Non ti t'æ entroö", 'watchnologintext' => 'Devvi [[Special:UserLogin|entrâ]] pe cangiâ a toa lista in osservaçion.', 'addedwatch' => 'Azzonto a a lista in osservaçion', @@ -1045,9 +1041,9 @@ Inte 'sti câxi, se o se vêu fâ coscì, o se deive stramûâ ò azzonze manual # Media information 'thumbsize' => 'Dimescion da a imàginetta:', -'file-info-size' => '($1 × $2 pixel, dimenscioîn: $3, tippo MIME: $4)', +'file-info-size' => '$1 × $2 pixel, dimenscioîn: $3, tippo MIME: $4', 'file-nohires' => 'No ghe son verscioîn a resolûxon ciû ærta.', -'svg-long-desc' => "(archivvio in formato SVG, dimensioîn nominâli $1 × $2 pixel, dimension de l'archivvio: $3)", +'svg-long-desc' => "archivvio in formato SVG, dimensioîn nominâli $1 × $2 pixel, dimension de l'archivvio: $3", 'show-big-image' => "Verscion d'ærta resolûxon", 'show-big-image-thumb' => "Dimensioîn de 'st'anteprimma: $1 × $2 pixel", diff --git a/languages/messages/MessagesLmo.php b/languages/messages/MessagesLmo.php index 0fccc91b..2f1a94f6 100644 --- a/languages/messages/MessagesLmo.php +++ b/languages/messages/MessagesLmo.php @@ -82,7 +82,7 @@ $specialPageAliases = array( 'Listfiles' => array( 'Imagin' ), 'Newimages' => array( 'ImaginNöv' ), 'Listusers' => array( 'Dupradur' ), - 'Listgrouprights' => array( 'Lista di dirit di grüp' ), + 'Listgrouprights' => array( 'Lista_di_dirit_di_grüp' ), 'Statistics' => array( 'Statìstegh' ), 'Randompage' => array( 'PaginaAzardada' ), 'Lonelypages' => array( 'PaginnDaPerLur' ), @@ -118,8 +118,7 @@ $messages = array( 'tog-editsectiononrightclick' => 'Abilitá redatazziún dai sezziún cun al clic
    süi titul dai sezziún (JavaScript)', 'tog-showtoc' => "Fà vidè l'indes per i paginn cun püssee de 3 sezión", -'tog-rememberpassword' => "Regòrdass la mè paròla d'urdin", -'tog-editwidth' => "Slarga la finèstra di mudifegh fin che la impiniss tüt 'l scherm", +'tog-rememberpassword' => "Regòrdass la mè paròla d'urdin (for a maximum of $1 {{PLURAL:$1|day|days}})", 'tog-watchcreations' => "Giunta i paginn ch'hoo creaa mì a la lista di paginn che tegni sot ögg", 'tog-watchdefault' => "Gjüntá i pagin redataa in dala lista dii pagin tegnüü d'öcc", 'tog-watchmoves' => "Giunta i paginn ch'hoo muvüü a la lista di paginn che tegni sot ögg", @@ -243,31 +242,20 @@ süi titul dai sezziún (JavaScript)', 'faqpage' => 'Project:Dumand frequent', # Vector skin -'vector-action-addsection' => 'Giunta argument', -'vector-action-delete' => 'Scancela', -'vector-action-move' => 'Sposta', -'vector-action-protect' => 'Prutegg', -'vector-action-undelete' => 'Recüpera', -'vector-action-unprotect' => 'Desbloca', -'vector-namespace-category' => 'Categuria', -'vector-namespace-help' => 'Pagina de vüt', -'vector-namespace-image' => 'File', -'vector-namespace-main' => 'Pagina', -'vector-namespace-media' => 'File mültimedial', -'vector-namespace-mediawiki' => 'Messagg', -'vector-namespace-project' => 'Pagina de servizi', -'vector-namespace-special' => 'Pagina speciala', -'vector-namespace-talk' => 'Discüssión', -'vector-namespace-template' => 'Mudel', -'vector-namespace-user' => 'Pagina da dovrée', -'vector-view-create' => 'Crea', -'vector-view-edit' => 'Mudifega', -'vector-view-history' => 'Varda la storia', -'vector-view-view' => 'Legg', -'vector-view-viewsource' => 'Varda el codes', -'actions' => 'Azión', -'namespaces' => 'Namespace', -'variants' => 'Variant', +'vector-action-addsection' => 'Giunta argument', +'vector-action-delete' => 'Scancela', +'vector-action-move' => 'Sposta', +'vector-action-protect' => 'Prutegg', +'vector-action-undelete' => 'Recüpera', +'vector-action-unprotect' => 'Desbloca', +'vector-view-create' => 'Crea', +'vector-view-edit' => 'Mudifega', +'vector-view-history' => 'Varda la storia', +'vector-view-view' => 'Legg', +'vector-view-viewsource' => 'Varda el codes', +'actions' => 'Azión', +'namespaces' => 'Namespace', +'variants' => 'Variant', 'errorpagetitle' => 'Erur', 'returnto' => 'Turna indré a $1.', @@ -441,7 +429,7 @@ Tegné cünt che certi paginn pödass che i seguiten a vedess tant 'me se a füd 'yourname' => 'El to suranóm:', 'yourpassword' => "Parola d'urdin", 'yourpasswordagain' => "Mett dent ammò la parola d'urdin", -'remembermypassword' => "Regordass la mè parola d'urdin", +'remembermypassword' => "Regordass la mè parola d'urdin (for a maximum of $1 {{PLURAL:$1|day|days}})", 'login' => 'Va dent', 'nav-login-createaccount' => 'Vena denter / Crea un cünt', 'loginprompt' => 'Par cunett a {{SITENAME}}, a duvii abilitá i galet.', @@ -563,7 +551,6 @@ Per 'sta reson chí, el pò vess identificaa dumà cunt el sò indirizz nümereg Se te vöret minga che i tò test i poden vess mudifegaa e redistribüii d'una persona qualsessia senza nissüna limitazión, mandei minga a {{SITENAME}}
    Cunt el test che te mandet tì te deciaret anca che, sota la tò respunsabilità, che el test te l'hee scrivüü depertì 'me uriginal, o pür che l'è una cobia d'una funt de dumini pübligh o un'altra funt libera in manera cumpagna.
    '''MANDA MINGA DEL MATERIAL CHE L'E' CUERT D'UN DIRIT D'AUTUR SENZA UTURIZAZIUN'''", -'longpagewarning' => "'''Feegh da ment''': Quela pagina chì l'è longa $1 kilobyte; gh'è di browser ch'i pudarissen vegh di fastidi a mudifegà paginn ch'i riven arent o ch'i gh'hann püssee de 32kb. Per piasè vardee se l'è pussibil fà giò la pagina in tuchet püssee piscinin.", 'protectedpagewarning' => "'''Ocio: quela pagina chì l'è stada blucaa in manéra che dumá i dupradur cunt i privilegg de sysop i pören mudificàla.'''", 'semiprotectedpagewarning' => "'''Nota:''' Quela pagina chì l'è stada blucada in manera che dumà i druvadur registraa i pören mudifegàla. L'ültima vus del register l'è mustrada chì de suta per riferiment:", @@ -757,39 +744,34 @@ Pröa a giuntagh denanz a la tò ricerca ''all:'' per cercà in tücc i namespac 'action-edit' => 'mudifega quela pagina chì', # Recent changes -'nchanges' => '$1 {{PLURAL:$1|mudifega|mudifegh}}', -'recentchanges' => 'Cambiament recent', -'recentchanges-legend' => 'Upzión ültem mudifegh', -'recentchangestext' => "In quela pagina chì a gh'è i cambiament püssee recent al cuntegnüü del sit.", -'recentchanges-feed-description' => "Quel feed chì 'l mustra i mudifegh püssee recent ai cuntegnüü de la wiki.", -'recentchanges-label-legend' => 'Legenda: $1.', -'recentchanges-legend-newpage' => '$1 - pagina növa', -'recentchanges-label-newpage' => "Quela mudifega chì l'ha creaa una pagina növa", -'recentchanges-legend-minor' => '$1 - mudifega minur', -'recentchanges-label-minor' => "Quela chì l'è una mudifega piscinina.", -'recentchanges-legend-bot' => "$1 - mudifega d'un bot", -'recentchanges-label-bot' => "Quela mudifega chì l'ha fada un bot", -'recentchanges-legend-unpatrolled' => '$1 - mudifega mia verificada', -'recentchanges-label-unpatrolled' => "Quela mudifega chì a l'è stada mimga anmò verificada.", -'rcnote' => "Chì de sota {{PLURAL:$1|gh'è '''1''' mudifega|a hinn i ültim '''$1''' mudifegh}} in di ültim {{PLURAL:$2|dì|'''$2''' dì}}, a partì dai $5 del $4.", -'rcnotefrom' => "Chì de sota gh'è la lista di mudifegh de $2 (fina a $1).", -'rclistfrom' => 'Fà vidè i cambiament növ a partì de $1', -'rcshowhideminor' => '$1 i mudifegh piscinín', -'rcshowhidebots' => '$1 i bot', -'rcshowhideliu' => '$1 i dupradur cunetüü', -'rcshowhideanons' => '$1 i dupradur anònim', -'rcshowhidemine' => '$1 i mè mudifich', -'rclinks' => 'Fà vedé i ültim $1 cambiament in di ültim $2 dì
    $3', -'diff' => 'dif', -'hist' => 'stòria', -'hide' => 'Scund', -'show' => 'Famm vedè', -'minoreditletter' => 'm', -'newpageletter' => 'N', -'boteditletter' => 'b', -'newsectionsummary' => '/* $1 */ sezión növa', -'rc-enhanced-expand' => 'Varda i detali (al vör el JavaScript)', -'rc-enhanced-hide' => 'Scund i detali', +'nchanges' => '$1 {{PLURAL:$1|mudifega|mudifegh}}', +'recentchanges' => 'Cambiament recent', +'recentchanges-legend' => 'Upzión ültem mudifegh', +'recentchangestext' => "In quela pagina chì a gh'è i cambiament püssee recent al cuntegnüü del sit.", +'recentchanges-feed-description' => "Quel feed chì 'l mustra i mudifegh püssee recent ai cuntegnüü de la wiki.", +'recentchanges-label-newpage' => "Quela mudifega chì l'ha creaa una pagina növa", +'recentchanges-label-minor' => "Quela chì l'è una mudifega piscinina.", +'recentchanges-label-bot' => "Quela mudifega chì l'ha fada un bot", +'recentchanges-label-unpatrolled' => "Quela mudifega chì a l'è stada mimga anmò verificada.", +'rcnote' => "Chì de sota {{PLURAL:$1|gh'è '''1''' mudifega|a hinn i ültim '''$1''' mudifegh}} in di ültim {{PLURAL:$2|dì|'''$2''' dì}}, a partì dai $5 del $4.", +'rcnotefrom' => "Chì de sota gh'è la lista di mudifegh de $2 (fina a $1).", +'rclistfrom' => 'Fà vidè i cambiament növ a partì de $1', +'rcshowhideminor' => '$1 i mudifegh piscinín', +'rcshowhidebots' => '$1 i bot', +'rcshowhideliu' => '$1 i dupradur cunetüü', +'rcshowhideanons' => '$1 i dupradur anònim', +'rcshowhidemine' => '$1 i mè mudifich', +'rclinks' => 'Fà vedé i ültim $1 cambiament in di ültim $2 dì
    $3', +'diff' => 'dif', +'hist' => 'stòria', +'hide' => 'Scund', +'show' => 'Famm vedè', +'minoreditletter' => 'm', +'newpageletter' => 'N', +'boteditletter' => 'b', +'newsectionsummary' => '/* $1 */ sezión növa', +'rc-enhanced-expand' => 'Varda i detali (al vör el JavaScript)', +'rc-enhanced-hide' => 'Scund i detali', # Recent changes linked 'recentchangeslinked' => 'Cambiament culegaa', @@ -890,7 +872,6 @@ La descrizión sura la sua [$2 pagina de descrizión del file] l'è mustrada ch 'statistics-files' => 'File caregaa sü', 'statistics-edits' => "Paginn mudifegaa dal dì che l'è nassüü 'l sit de {{SITENAME}}", 'statistics-edits-average' => 'Mudifegh in média per pagina', -'statistics-jobqueue' => 'Lungheza de la [http://www.mediawiki.org/wiki/Manual:Job_queue Cua di prucediment]', 'statistics-users' => '[[Special:ListUsers|Druvadur]] registraa', 'statistics-users-active' => 'Druvadur ativ', 'statistics-users-active-desc' => "Druvadur che i hann faa un'azión int {{PLURAL:$1|l'ültem dì|i ültem $1 dì}}", @@ -987,7 +968,6 @@ La descrizión sura la sua [$2 pagina de descrizión del file] l'è mustrada ch # Watchlist 'watchlist' => "Paginn ch'a tegni d'ögg", 'mywatchlist' => "Paginn che a tegni d'ögg", -'watchlistfor' => "(per '''$1''')", 'addedwatch' => 'Pagina giuntada a la lista di paginn sot ögg', 'addedwatchtext' => "La pagina \"[[:\$1]]\" l'è stada giuntada a la lista di [[Special:Watchlist|paginn da tegn d'ögg]]. I cambiament che vegnarà fai a 'sta pagina chì e a la sóa pagina de discüssion @@ -1195,7 +1175,6 @@ Varda [[Special:IPBlockList|lista di IP blucaa]] per vidè anmò i bloch.", 'ipb-edit-dropdown' => 'Resón del bloch', 'ipb-unblock-addr' => 'Desblòca $1', 'ipb-unblock' => 'Desbloca un duvrat o un adress IP', -'ipb-blocklist-addr' => 'Bloch esistent per $1', 'ipb-blocklist' => 'Vardee i blòch ativ', 'ipb-blocklist-contribs' => 'Cuntribüzión de $1', 'unblockip' => 'Desblòca quel druvàt chì', @@ -1349,9 +1328,9 @@ Che 'l scerna, per piasè, un nom diferent per quel articul chì.", # Media information 'imagemaxsize' => 'Limitá i imagin süi pagin da descrizziún dii imagin a:', 'thumbsize' => 'Dimensiún diapusitiif:', -'file-info-size' => '($1 × $2 pixel, dimensión : $3, sort MIME: $4)', +'file-info-size' => '$1 × $2 pixel, dimensión : $3, sort MIME: $4', 'file-nohires' => 'Nissüna resulüzión püssee granda dispunibila.', -'svg-long-desc' => "(archivi in furmaa SVG, dimensión nominaj $1 × $2 pixel, dimensión de l'archivi: $3)", +'svg-long-desc' => "archivi in furmaa SVG, dimensión nominaj $1 × $2 pixel, dimensión de l'archivi: $3", 'show-big-image' => 'Versión a resolüzión volta', 'show-big-image-thumb' => 'Dimensión de quela anteprima chì: $1 × $2 pixel', diff --git a/languages/messages/MessagesLn.php b/languages/messages/MessagesLn.php index 0ce6e5f2..5b01a4ac 100644 --- a/languages/messages/MessagesLn.php +++ b/languages/messages/MessagesLn.php @@ -24,7 +24,8 @@ $separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' ); $messages = array( # User preference toggles -'tog-underline' => 'Kotíya sulimá na bikangisi :', +'tog-underline' => 'Kotíya sulimá na bikangisi:', +'tog-rememberpassword' => 'Komíkundola bokitoli na molúki (ekosúkisa na {{PLURAL:$1|mokɔlɔ|mikɔlɔ}} $1)', # Dates 'monday' => 'mokɔlɔ ya libosó', @@ -98,18 +99,19 @@ $messages = array( 'faq' => 'Mitúná Mizóngelaka (MM)', # Vector skin -'vector-action-addsection' => 'Kobakisa mpɔ̂', -'vector-action-delete' => 'Kolímwisa', -'vector-action-move' => 'Kobóngola nkómbó', -'vector-action-protect' => 'Kobátela', -'vector-action-undelete' => 'Kolímwisa tɛ̂', -'vector-action-unprotect' => ' Kobátela tɛ̂', -'vector-view-create' => 'Kokela', -'vector-view-edit' => 'Kobɔngisa', -'vector-view-history' => 'Komɔ́nisa mokóló', -'vector-view-view' => 'Kotánga', -'vector-view-viewsource' => 'Komɔ́nisa mosólo', -'namespaces' => 'Ntáká ya nkómbó', +'vector-action-addsection' => 'Kobakisa mpɔ̂', +'vector-action-delete' => 'Kolímwisa', +'vector-action-move' => 'Kobóngola nkómbó', +'vector-action-protect' => 'Kobátela', +'vector-action-undelete' => 'Kolímwisa tɛ̂', +'vector-action-unprotect' => ' Kobátela tɛ̂', +'vector-simplesearch-preference' => 'Kolamusa bokáni bwa boluki bobakísámí (káka na Vector)', +'vector-view-create' => 'Kokela', +'vector-view-edit' => 'Kobɔngisa', +'vector-view-history' => 'Komɔ́nisa mokóló', +'vector-view-view' => 'Kotánga', +'vector-view-viewsource' => 'Komɔ́nisa mosólo', +'namespaces' => 'Ntáká ya nkómbó', 'errorpagetitle' => 'Mbéba', 'returnto' => 'Kozóngisa na $1.', @@ -121,6 +123,7 @@ $messages = array( 'searcharticle' => 'Kokɛndɛ', 'history' => 'Mokóló mwa lonkásá', 'history_short' => 'Mokóló', +'info_short' => 'Liyébisi', 'printableversion' => 'Mpɔ̂ na kofínela', 'permalink' => 'Ekangeli ya ntángo yɔ́nsɔ', 'print' => 'kobimisa nkomá', @@ -174,21 +177,22 @@ $messages = array( 'privacypage' => 'Project:Politíki ya viplívɛ', 'ok' => 'Nandimi', -'retrievedfrom' => 'Ezwámí úta « $1 »', +'retrievedfrom' => 'Ezwámí úta «$1»', 'youhavenewmessages' => 'Ozweí $1 ($2).', 'newmessageslink' => 'nsango ya sika', 'editsection' => 'kobɔngisa', 'editold' => 'kobɔngisa', 'editlink' => 'kobɔngisa', 'viewsourcelink' => 'komɔ́nisa mosólo', -'editsectionhint' => 'Kokoma sɛksíɔ : $1', +'editsectionhint' => 'Kokoma sɛksíɔ: $1', 'toc' => 'Etápe', 'showtoc' => 'komɔ́nisa', 'hidetoc' => 'kobomba', +'feedlinks' => 'Ebale:', 'site-rss-feed' => 'Ebale RSS ya $1', -'site-atom-feed' => 'Ebale Atom ya « $1 »', -'page-rss-feed' => 'Ebale RSS ya « $1 »', -'page-atom-feed' => 'Ebale Atom ya « $1 »', +'site-atom-feed' => 'Ebale Atom ya «$1»', +'page-rss-feed' => 'Ebale RSS ya «$1»', +'page-atom-feed' => 'Ebale Atom ya «$1»', 'red-link-title' => '$1 (lonkásá ezalí tɛ̂)', # Short words for each namespace, by default used in the namespace tab in monobook @@ -213,30 +217,39 @@ Ezalí listɛ́ ya nkásá gudi bizalí na [[Special:SpecialPages|{{int:special # General errors 'error' => 'Mbéba', 'databaseerror' => 'Zíko ya litákoli ya kabo', -'laggedslavemode' => "'''Likébisi''' : lonkásá óyo ekokí kokwa mbóngwana ya nsúka nyɔ́nsɔ tɛ̂", +'laggedslavemode' => "'''Likébisi''': lonkásá óyo ekokí kokwa mbóngwana ya nsúka nyɔ́nsɔ tɛ̂", 'readonly' => 'Litákoli ya kabo efúngámí', 'enterlockreason' => 'Ópésa ntína mpé ntángo ya kokanisa ya bofúngi ya litákoli ya kabo', 'internalerror' => 'Zíko ya káti', -'internalerror_info' => 'Zíko ya káti : $1', +'internalerror_info' => 'Zíko ya káti: $1', 'perfcached' => 'Bipeseli byangó bizalí o mobómbisi-lombángu mpé bikokí kozala ya lɛlɔ́ tɛ̂.', 'perfcachedts' => 'Bipeseli byangó bizalí o mobómbisi-lombángu mpé bikokí kozala ya lɛlɔ́ tɛ̂. Bizalí bya $1.', 'viewsource' => 'Komɔ́nisa mosólo', 'viewsourcefor' => 'na $1', # Login and logout pages -'yourname' => 'Nkómbó ya mosáleli :', +'yourname' => 'Nkómbó ya mosáleli:', 'yourpassword' => 'Banda nayó:', -'yourpasswordagain' => 'Banda naíno :', +'yourpasswordagain' => 'Banda naíno:', +'remembermypassword' => 'Mɛ́i-komíkitola na molúki moye mbala ilandí (ekosúkisa na {{PLURAL:$1|mokɔlɔ|mikɔlɔ}} $1)', 'login' => 'komíkitola (log in)', 'nav-login-createaccount' => 'Komíkomisa tǒ kokɔtɔ', 'userlogin' => 'Komíkomisa tǒ komíkitola', +'userloginnocreate' => 'komíkitola (log in)', 'logout' => 'kolongwa', 'userlogout' => 'Kolongwa', 'nologin' => "Omíkomísí naíno tɛ̂? '''$1'''.", 'nologinlink' => 'Míkomísá yɔ̌-mɛ́i', 'gotaccount' => "Omíkomísí naíno ? '''$1'''.", +'gotaccountlink' => 'komíkitola (log in)', 'createaccountmail' => 'na mokánda', 'mailmypassword' => 'Kotíndisa liloba-nzelá lya sika na mɛ́lɛ', +'loginlanguagelabel' => 'Lokótá: $1', + +# Password reset dialog +'oldpassword' => 'Banda kala', +'newpassword' => 'Banda sika', +'resetpass-submit-cancel' => 'Kozóngela', # Edit page toolbar 'bold_sample' => 'Nkomá ya mbinga', @@ -262,12 +275,12 @@ Ezalí listɛ́ ya nkásá gudi bizalí na [[Special:SpecialPages|{{int:special 'showpreview' => 'Kotála yambo', 'showdiff' => 'Komɔ́nisa mbóngwana', 'newarticle' => '(Sika)', -'editing' => 'Kokoma « $1 »', -'editingsection' => 'Bobɔngisi ya « $1 » (sɛksió)', -'editingcomment' => 'Bobɔngisi ya « $1 » (sɛksió ya sika)', +'editing' => 'Kokoma «$1»', +'editingsection' => 'Bobɔngisi ya «$1» (sɛksió)', +'editingcomment' => 'Bobɔngisi ya «$1» (sɛksió ya sika)', 'yourtext' => 'Nkomá na yɔ̌', -'templatesused' => '{{PLURAL:$1|Emekisele esálélí|Bimekisele bisálélí}} o lonkásá óyo :', -'templatesusedpreview' => '{{PLURAL:$1|Emekisele esálélí|Bimekisele bisálélí}} o botáli boye :', +'templatesused' => '{{PLURAL:$1|Emekisele esálélí|Bimekisele bisálélí}} o lonkásá óyo:', +'templatesusedpreview' => '{{PLURAL:$1|Emekisele esálélí|Bimekisele bisálélí}} o botáli boye:', 'template-protected' => '(na bobáteli)', 'template-semiprotected' => '(na bobáteli ya ndámbo)', @@ -381,7 +394,7 @@ Ezalí listɛ́ ya nkásá gudi bizalí na [[Special:SpecialPages|{{int:special 'uploadbtn' => 'Kotíya nkásá mɔ̌kɔ́', 'uploadlogpage' => 'Zuluná ya botómbisi likoló', 'savefile' => 'kobómbisa kásá-kásá', -'uploadedimage' => '« [[$1]] » etómbísámí likoló', +'uploadedimage' => '«[[$1]]» etómbísámí likoló', # Special:ListFiles 'listfiles_date' => 'Mokɔlɔ', @@ -467,9 +480,8 @@ Ezalí listɛ́ ya nkásá gudi bizalí na [[Special:SpecialPages|{{int:special # Watchlist 'watchlist' => 'Nkásá nalandí', 'mywatchlist' => 'Nkásá nalandí', -'watchlistfor' => "(mpɔ̂ na moto '''$1''')", 'addedwatch' => 'Ebakísámí na nkásá olandí', -'addedwatchtext' => "Lonkásá « [[:$1]] » lobakísámí na [[Special:Watchlist|nkásá olandí]]. Mbóngwana o lonkásá loye mpé o lonkásá la ntembe ikomɔ́nisama áwa, ikokɔ́mana '''mbinga''' o [[Special:RecentChanges|Lístɛ ya mbóngwana ya nsúka]] mpɔ̂ na mpási tɛ̂.", +'addedwatchtext' => "Lonkásá «[[:$1]]» lobakísámí na [[Special:Watchlist|nkásá olandí]]. Mbóngwana o lonkásá loye mpé o lonkásá la ntembe ikomɔ́nisama áwa, ikokɔ́mana '''mbinga''' o [[Special:RecentChanges|Lístɛ ya mbóngwana ya nsúka]] mpɔ̂ na mpási tɛ̂.", 'removedwatch' => 'Elongólámí na nkásá olandí', 'watch' => 'Kolanda', 'watchthispage' => 'Kolanda lonkásá óyo', diff --git a/languages/messages/MessagesLo.php b/languages/messages/MessagesLo.php index a696f820..e1048a52 100644 --- a/languages/messages/MessagesLo.php +++ b/languages/messages/MessagesLo.php @@ -108,8 +108,7 @@ $messages = array( 'tog-editsection' => 'ໃຫ້ສາມາດ ດັດແກ້ເປັນພາກ ໂດຍ ກົດລິ້ງຄ໌ [ດັດແກ້]', 'tog-editsectiononrightclick' => 'ໃຫ້ສາມາດ ດັດແກ້ ໂດຍກົດປຸ່ມຂວາ ຂອງເມົາສ໌ ຢູ່
    ຫົວຂໍ້ຂອງພາກ (JavaScript)', 'tog-showtoc' => 'ສະແດງເນື້ອໃນ (ຂອງ ໝ້າທີ່ມີຫຼາຍກວ່າ 3 ໜາຍເລກຫົວຂໍ້)', -'tog-rememberpassword' => 'ຈົດຈໍາການເຊັນເຂົ້າຂອງຂ້ອຍ ຢູ່ ຄອມພິວເຕີໜ່ວຍນີ້', -'tog-editwidth' => 'ໃຫ້ ຊ່ອງດັດແກ້ ກ້ວາງທີ່ສຸດ', +'tog-rememberpassword' => 'ຈົດຈໍາການເຊັນເຂົ້າຂອງຂ້ອຍ ຢູ່ ຄອມພິວເຕີໜ່ວຍນີ້ (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'ເພີ່ມ ໜ້າທີ່ຂ້ອຍສ້າງ ເຂົ້າໃນ ລາຍການຕິດຕາມ ຂອງ ຂ້ອຍ', 'tog-watchdefault' => 'ເພີ່ມໜ້າ ທີ່ ຂ້ອຍດັດແກ້ ໃສ່ ລາຍຕິດຕາມ ຂອງ ຂ້ອຍ', 'tog-watchmoves' => 'ເພີ່ມ ໜ້າທີ່ຂອ້ຍຍ້າຍ ໃສ່ ລາຍການຕິດຕາມຂອງຂ້ອຍ', @@ -356,7 +355,7 @@ $messages = array( 'yourname' => 'ຊື່ຜູ້ໃຊ້', 'yourpassword' => 'ລະຫັດຜ່ານ', 'yourpasswordagain' => 'ພິມລະຫັດຜ່ານອີກ', -'remembermypassword' => 'ຈົດຈໍາການເຊັນເຂົ້າຂອງຂ້ອຍ ຢູ່ ຄອມພິວເຕີໜ່ວຍນີ້', +'remembermypassword' => 'ຈົດຈໍາການເຊັນເຂົ້າຂອງຂ້ອຍ ຢູ່ ຄອມພິວເຕີໜ່ວຍນີ້ (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'ໂດເມນ ຂອງ ທ່ານ', 'login' => 'ເຊັນເຂົ້າ', 'nav-login-createaccount' => 'ເຊັນເຂົ້າ / ສ້າງບັນຊີ', @@ -725,7 +724,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'ລາຍການຕິດຕາມ', 'mywatchlist' => 'ລາຍການຕິດຕາມ', -'watchlistfor' => "(ສຳຫຼັບ '''$1''')", 'watchlistanontext' => 'ກະລຸນາ $1 ເພື່ອເບິ່ງ ຫຼື ດັດແກ້ ໜ້າຢູ່ໃນລາຍການຕິດຕາມຂອງທ່ານ.', 'watchnologin' => 'ບໍ່ໄດ້ເຊັນເຂົ້າ', 'addedwatch' => 'ເພີ່ມໃສ່ລາຍການຕິດຕາມແລ້ວ', @@ -920,7 +918,7 @@ Also see [[Special:WantedCategories|wanted categories]].', # Media information 'imagemaxsize' => 'ກຳນົດຄວາມໃຫຍ່ຂອງ ຮູບ ຫຼື ໜ້າອະທິບາຍຮູບ ບໍ່ໃຫ້ກາຍ:', 'thumbsize' => 'ຂະໜາດສະແດງ:', -'file-info-size' => '($1 × $2 ປິກເຊລ, ຂະໜາດໄຟລ໌: $3, MIME type: $4)', +'file-info-size' => '$1 × $2 ປິກເຊລ, ຂະໜາດໄຟລ໌: $3, MIME type: $4', 'file-nohires' => 'ບໍ່ມີຂະໜາດລະອຽດກວ່າ', 'show-big-image' => 'ເຕັມຂະໜາດ', 'show-big-image-thumb' => 'ຂະໜາດລອງເບິ່ງ: $1 × $2 ປິກເຊລ', diff --git a/languages/messages/MessagesLoz.php b/languages/messages/MessagesLoz.php index fb5cc9ba..ab3d3df1 100644 --- a/languages/messages/MessagesLoz.php +++ b/languages/messages/MessagesLoz.php @@ -22,8 +22,7 @@ $messages = array( 'tog-showtoolbar' => "Kamukile hloli ye ng'i toolbar (bulukezi JavaScript)", 'tog-editondblclick' => "Hloli ye ng'i petulo di 'klik' dubo (JavaScript)", 'tog-editsection' => "Nyembulisize [hloli ye ng'i] di akes di lyangutukezi ling'ki", -'tog-rememberpassword' => 'Askevusize zwa menuhile kwa bye kompyuta.', -'tog-editwidth' => "Boksi di hloli ye ng'i sa omipeti", +'tog-rememberpassword' => 'Askevusize zwa menuhile kwa bye kompyuta (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Pusize petulo a hloli di zwa mukoloko di kentezi', 'tog-watchdefault' => "Pusize petulo a hloli ye ng'i di zwa mukoloko di kentezi", 'tog-watchmoves' => 'Pusize petulo a nyanganyisoze di zwa mukoloko di kentezi', @@ -278,7 +277,7 @@ Query: $2", 'yourname' => 'Sebelu:', 'yourpassword' => 'Sebu dafi:', 'yourpasswordagain' => 'Ritapi sebu dafi:', -'remembermypassword' => 'Askevusize zwa menuhile kwa bye kompyuta.', +'remembermypassword' => 'Askevusize zwa menuhile kwa bye kompyuta (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Zwa domeni:', 'login' => 'Menuhile', 'nav-login-createaccount' => 'Menuhile / ipupezi sebelu', @@ -399,8 +398,6 @@ A sa nca di bufosi, tampi '''back'''.", 'copyrightwarning' => "Xete kenki di {{SITENAME}} sa rilisi kwa $2 (fatukile $1 di pagu). A ni tokwezi zwa selt sa kenki a ridistributi kwa tokwi, ni bulukezi.
    A sumekezi zwa selt sa dya, a kopisize di publiki domeni, a ike risorsi. '''NI BULUKEZI SELT KOPINITUMELELO E NI TUMELELO!'''", -'longpagewarning' => "'''AGTU: Bye petulo sa $1 kilobytes; browser sa di bufosikaku hloli ye ng'i petulo plusu di 32 kilobytes. -Konsidisize takubikinalisize.'''", 'templatesused' => 'Yegani sebelize di bye petulo:', 'templatesusedpreview' => 'Yegani sebelize kwa bye PendiBe:', 'template-protected' => '(sa bukelezi)', @@ -729,7 +726,6 @@ dicon sa sosize ni sa meli di kupo sebelu.', # Watchlist 'watchlist' => 'Zwa mukoloko di kentezi', 'mywatchlist' => 'Zwa mukoloko di kentezi', -'watchlistfor' => "(di '''$1''')", 'watchnologin' => 'A ni sa menuhile', 'watchnologintext' => "A sa [[Special:UserLogin|menuhile]] di hloli ye ng'i zwa mukoloko di kentezi.", 'addedwatch' => 'Tumbelize a mukoloko di kentezi', @@ -1011,9 +1007,9 @@ $1', # Media information 'widthheightpage' => '$1×$2, $3 petulo', -'file-info-size' => '($1 × $2 pixel, imegi: $3, MIME type: $4)', +'file-info-size' => '$1 × $2 pixel, imegi: $3, MIME type: $4', 'file-nohires' => 'A sa risolusi aku balise.', -'svg-long-desc' => '(SVG imegi, nominali $1 × $2 pixel, imega: $3)', +'svg-long-desc' => 'SVG imegi, nominali $1 × $2 pixel, imega: $3', 'show-big-image' => 'Risolusi bakisize', 'show-big-image-thumb' => 'PendiBe: $1 × $2 pixel', diff --git a/languages/messages/MessagesLt.php b/languages/messages/MessagesLt.php index 65cac8ff..68d0cdca 100644 --- a/languages/messages/MessagesLt.php +++ b/languages/messages/MessagesLt.php @@ -7,10 +7,13 @@ * @ingroup Language * @file * + * @author Auwris + * @author Break Through Pain * @author Dark Eagle * @author Garas * @author Homo * @author Hugo.arg + * @author Ignas693 * @author Matasg * @author Meno25 * @author Pdxx @@ -43,92 +46,92 @@ $namespaceNames = array( ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'Dvigubi peradesavimai' ), - 'BrokenRedirects' => array( 'Peradresavimai į niekur' ), + 'DoubleRedirects' => array( 'Dvigubi_peradesavimai' ), + 'BrokenRedirects' => array( 'Peradresavimai_į_niekur' ), 'Disambiguations' => array( 'Nukreipiamieji' ), 'Userlogin' => array( 'Prisijungimas' ), 'Userlogout' => array( 'Atsijungimas' ), - 'CreateAccount' => array( 'Sukurti paskyrą' ), + 'CreateAccount' => array( 'Sukurti_paskyrą' ), 'Preferences' => array( 'Nustatymai' ), 'Watchlist' => array( 'Stebimieji' ), - 'Recentchanges' => array( 'Naujausi keitimai' ), + 'Recentchanges' => array( 'Naujausi_keitimai' ), 'Upload' => array( 'Įkėlimas' ), - 'Listfiles' => array( 'Paveikslėlių sąrašas' ), - 'Newimages' => array( 'Nauji paveikslėliai' ), - 'Listusers' => array( 'Naudotojų sąrašas' ), - 'Listgrouprights' => array( 'Grupių teisių sąrašas' ), + 'Listfiles' => array( 'Paveikslėlių_sąrašas' ), + 'Newimages' => array( 'Nauji_paveikslėliai' ), + 'Listusers' => array( 'Naudotojų_sąrašas' ), + 'Listgrouprights' => array( 'Grupių_teisių_sąrašas' ), 'Statistics' => array( 'Statistika' ), - 'Randompage' => array( 'Atsitiktinis puslapis' ), - 'Lonelypages' => array( 'Vieniši puslapiai' ), - 'Uncategorizedpages' => array( 'Puslapiai be kategorijų' ), - 'Uncategorizedcategories' => array( 'Kategorijos be subkategorijų' ), - 'Uncategorizedimages' => array( 'Paveikslėliai be kategorijų' ), - 'Uncategorizedtemplates' => array( 'Šablonai be kategorijų' ), - 'Unusedcategories' => array( 'Nenaudojamos kategorijos' ), - 'Unusedimages' => array( 'Nenaudojami paveikslėliai' ), - 'Wantedpages' => array( 'Trokštamiausi puslapiai', 'Blogos nuorodos' ), - 'Wantedcategories' => array( 'Trokštamiausios kategorijos' ), - 'Wantedfiles' => array( 'Trokštami failai' ), - 'Wantedtemplates' => array( 'Trokštami šablonai' ), - 'Mostlinked' => array( 'Turintys daugiausiai nuorodų' ), - 'Mostlinkedcategories' => array( 'Kategorijos turinčios daugiausiai nuorodų' ), + 'Randompage' => array( 'Atsitiktinis_puslapis' ), + 'Lonelypages' => array( 'Vieniši_puslapiai' ), + 'Uncategorizedpages' => array( 'Puslapiai_be_kategorijų' ), + 'Uncategorizedcategories' => array( 'Kategorijos_be_subkategorijų' ), + 'Uncategorizedimages' => array( 'Paveikslėliai_be_kategorijų' ), + 'Uncategorizedtemplates' => array( 'Šablonai_be_kategorijų' ), + 'Unusedcategories' => array( 'Nenaudojamos_kategorijos' ), + 'Unusedimages' => array( 'Nenaudojami_paveikslėliai' ), + 'Wantedpages' => array( 'Trokštamiausi_puslapiai', 'Blogos_nuorodos' ), + 'Wantedcategories' => array( 'Trokštamiausios_kategorijos' ), + 'Wantedfiles' => array( 'Trokštami_failai' ), + 'Wantedtemplates' => array( 'Trokštami_šablonai' ), + 'Mostlinked' => array( 'Turintys_daugiausiai_nuorodų' ), + 'Mostlinkedcategories' => array( 'Kategorijos_turinčios_daugiausiai_nuorodų' ), 'Mostlinkedtemplates' => array( 'Šablonai' ), - 'Mostimages' => array( 'Daugiausiai naudojami paveikslėliai' ), - 'Mostcategories' => array( 'Daugiausiai naudojamos kategorijos' ), - 'Mostrevisions' => array( 'Daugiausiai keičiami' ), - 'Fewestrevisions' => array( 'Mažiausiai keičiami' ), - 'Shortpages' => array( 'Trumpiausi puslapiai' ), - 'Longpages' => array( 'Ilgiausi puslapiai' ), - 'Newpages' => array( 'Naujausi puslapiai' ), - 'Ancientpages' => array( 'Seniausi puslapiai' ), + 'Mostimages' => array( 'Daugiausiai_naudojami_paveikslėliai' ), + 'Mostcategories' => array( 'Daugiausiai_naudojamos_kategorijos' ), + 'Mostrevisions' => array( 'Daugiausiai_keičiami' ), + 'Fewestrevisions' => array( 'Mažiausiai_keičiami' ), + 'Shortpages' => array( 'Trumpiausi_puslapiai' ), + 'Longpages' => array( 'Ilgiausi_puslapiai' ), + 'Newpages' => array( 'Naujausi_puslapiai' ), + 'Ancientpages' => array( 'Seniausi_puslapiai' ), 'Deadendpages' => array( 'Puslapiai-aklavietės' ), - 'Protectedpages' => array( 'Užrakinti puslapiai' ), - 'Protectedtitles' => array( 'Apsaugoti pavadinimai' ), - 'Allpages' => array( 'Visi puslapiai' ), + 'Protectedpages' => array( 'Užrakinti_puslapiai' ), + 'Protectedtitles' => array( 'Apsaugoti_pavadinimai' ), + 'Allpages' => array( 'Visi_puslapiai' ), 'Prefixindex' => array( 'Prasidedantys' ), - 'Ipblocklist' => array( 'IP blokavimų sąrašas' ), - 'Specialpages' => array( 'Specialieji puslapiai' ), + 'Ipblocklist' => array( 'IP_blokavimų_sąrašas' ), + 'Specialpages' => array( 'Specialieji_puslapiai' ), 'Contributions' => array( 'Indėlis' ), - 'Emailuser' => array( 'Rašyti laišką' ), - 'Confirmemail' => array( 'Elektroninio pašto patvirtinimas' ), - 'Whatlinkshere' => array( 'Kas į čia rodo' ), - 'Recentchangeslinked' => array( 'Pakeitimai susijusiuose puslapiuose' ), - 'Movepage' => array( 'Puslapio pervadinimas' ), - 'Blockme' => array( 'Užblokuoti mane' ), - 'Booksources' => array( 'Knygų šaltiniai' ), + 'Emailuser' => array( 'Rašyti_laišką' ), + 'Confirmemail' => array( 'Elektroninio_pašto_patvirtinimas' ), + 'Whatlinkshere' => array( 'Kas_į_čia_rodo' ), + 'Recentchangeslinked' => array( 'Pakeitimai_susijusiuose_puslapiuose' ), + 'Movepage' => array( 'Puslapio_pervadinimas' ), + 'Blockme' => array( 'Užblokuoti_mane' ), + 'Booksources' => array( 'Knygų_šaltiniai' ), 'Categories' => array( 'Kategorijos' ), 'Export' => array( 'Eksportas' ), 'Version' => array( 'Versija' ), - 'Allmessages' => array( 'Visi pranešimai' ), + 'Allmessages' => array( 'Visi_pranešimai' ), 'Log' => array( 'Sąrašas', 'Sąrašai' ), - 'Blockip' => array( 'Blokuoti IP' ), + 'Blockip' => array( 'Blokuoti_IP' ), 'Undelete' => array( 'Netrinti' ), 'Import' => array( 'Importas' ), - 'Lockdb' => array( 'Užrakinti duomenų bazę' ), - 'Unlockdb' => array( 'Atrakinti duomenų bazę' ), - 'Userrights' => array( 'Naudotojo teisės' ), - 'MIMEsearch' => array( 'MIME paieška' ), - 'FileDuplicateSearch' => array( 'Failo dublikatų paieška' ), - 'Unwatchedpages' => array( 'Nestebimi puslapiai' ), - 'Listredirects' => array( 'Peradresavimų sąrašas' ), - 'Revisiondelete' => array( 'Redagavimo ištrynimas' ), - 'Unusedtemplates' => array( 'Nenaudojami šablonai' ), - 'Randomredirect' => array( 'Atsitiktinis peradresavimas' ), - 'Mypage' => array( 'Mano puslapis' ), - 'Mytalk' => array( 'Mano aptarimas' ), - 'Mycontributions' => array( 'Mano indėlis' ), - 'Listadmins' => array( 'Administratorių sąrašas' ), - 'Listbots' => array( 'Botų sąrašas' ), - 'Popularpages' => array( 'Populiarūs puslapiai' ), + 'Lockdb' => array( 'Užrakinti_duomenų_bazę' ), + 'Unlockdb' => array( 'Atrakinti_duomenų_bazę' ), + 'Userrights' => array( 'Naudotojo_teisės' ), + 'MIMEsearch' => array( 'MIME_paieška' ), + 'FileDuplicateSearch' => array( 'Failo_dublikatų_paieška' ), + 'Unwatchedpages' => array( 'Nestebimi_puslapiai' ), + 'Listredirects' => array( 'Peradresavimų_sąrašas' ), + 'Revisiondelete' => array( 'Redagavimo_ištrynimas' ), + 'Unusedtemplates' => array( 'Nenaudojami_šablonai' ), + 'Randomredirect' => array( 'Atsitiktinis_peradresavimas' ), + 'Mypage' => array( 'Mano_puslapis' ), + 'Mytalk' => array( 'Mano_aptarimas' ), + 'Mycontributions' => array( 'Mano_indėlis' ), + 'Listadmins' => array( 'Administratorių_sąrašas' ), + 'Listbots' => array( 'Botų_sąrašas' ), + 'Popularpages' => array( 'Populiarūs_puslapiai' ), 'Search' => array( 'Paieška' ), - 'Resetpass' => array( 'Slaptažodžio atstatymas' ), - 'Withoutinterwiki' => array( 'Be interwiki' ), - 'MergeHistory' => array( 'Sujungti istoriją' ), - 'Filepath' => array( 'Kelias iki failo' ), - 'Invalidateemail' => array( 'Nutraukti elektroninio pašto galiojimą' ), - 'Blankpage' => array( 'Tuščias puslapis' ), - 'LinkSearch' => array( 'Nuorodų paieška' ), - 'DeletedContributions' => array( 'Ištrintas indėlis' ), + 'Resetpass' => array( 'Slaptažodžio_atstatymas' ), + 'Withoutinterwiki' => array( 'Be_interwiki' ), + 'MergeHistory' => array( 'Sujungti_istoriją' ), + 'Filepath' => array( 'Kelias_iki_failo' ), + 'Invalidateemail' => array( 'Nutraukti_elektroninio_pašto_galiojimą' ), + 'Blankpage' => array( 'Tuščias_puslapis' ), + 'LinkSearch' => array( 'Nuorodų_paieška' ), + 'DeletedContributions' => array( 'Ištrintas_indėlis' ), 'Tags' => array( 'Žymos' ), ); @@ -158,7 +161,7 @@ $magicWords = array( ); $fallback8bitEncoding = 'windows-1257'; -$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' ); +$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' ); $dateFormats = array( 'ymd time' => 'H:i', @@ -186,8 +189,7 @@ $messages = array( 'tog-editsection' => 'Įjungti skyrelių redagavimą naudojant nuorodas [taisyti]', 'tog-editsectiononrightclick' => 'Įjungti skyrelių redagavimą paspaudus skyrelio pavadinimą dešiniuoju pelės klavišu (JavaScript)', 'tog-showtoc' => 'Rodyti turinį, jei puslapyje daugiau nei 3 skyreliai', -'tog-rememberpassword' => 'Prisiminti prisijungimo informaciją šiame kompiuteryje', -'tog-editwidth' => 'Praplatinti redagavimo lauką, kad būtų užpildytas visas ekranas', +'tog-rememberpassword' => 'Prisiminti prisijungimo informaciją šioje naršyklėje (daugiausiai $1 {{PLURAL:$1|dieną|dienas|dienų}})', 'tog-watchcreations' => 'Pridėti puslapius, kuriuos sukuriu, į stebimų sąrašą', 'tog-watchdefault' => 'Pridėti puslapius, kuriuos redaguoju, į stebimų sąrašą', 'tog-watchmoves' => 'Pridėti puslapius, kuriuos perkeliu, į stebimų sąrašą', @@ -333,31 +335,21 @@ $messages = array( 'faqpage' => 'Project:DUK', # Vector skin -'vector-action-addsection' => 'Pridėti temą', -'vector-action-delete' => 'Ištrinti', -'vector-action-move' => 'Perkelti', -'vector-action-protect' => 'Užrakinti', -'vector-action-undelete' => 'Atkurti', -'vector-action-unprotect' => 'Atrakinti', -'vector-namespace-category' => 'Kategorija', -'vector-namespace-help' => 'Pagalbos puslapis', -'vector-namespace-image' => 'Failas', -'vector-namespace-main' => 'Puslapis', -'vector-namespace-media' => 'Media puslapis', -'vector-namespace-mediawiki' => 'Pranešimas', -'vector-namespace-project' => 'Projekto puslapis', -'vector-namespace-special' => 'Specialusis puslapis', -'vector-namespace-talk' => 'Diskusija', -'vector-namespace-template' => 'Šablonas', -'vector-namespace-user' => 'Naudotojo puslapis', -'vector-view-create' => 'Kurti', -'vector-view-edit' => 'Redaguoti', -'vector-view-history' => 'Istorija', -'vector-view-view' => 'Skaityti', -'vector-view-viewsource' => 'Žiūrėti kodą', -'actions' => 'Veiksmai', -'namespaces' => 'Vardų sritys', -'variants' => 'Variantai', +'vector-action-addsection' => 'Pridėti temą', +'vector-action-delete' => 'Ištrinti', +'vector-action-move' => 'Perkelti', +'vector-action-protect' => 'Užrakinti', +'vector-action-undelete' => 'Atkurti', +'vector-action-unprotect' => 'Atrakinti', +'vector-simplesearch-preference' => 'Įjungti išplėstinius paieškos pasiūlymus (tik „Vector“ išvaizda)', +'vector-view-create' => 'Kurti', +'vector-view-edit' => 'Redaguoti', +'vector-view-history' => 'Istorija', +'vector-view-view' => 'Skaityti', +'vector-view-viewsource' => 'Žiūrėti kodą', +'actions' => 'Veiksmai', +'namespaces' => 'Vardų sritys', +'variants' => 'Variantai', 'errorpagetitle' => 'Klaida', 'returnto' => 'Grįžti į $1.', @@ -418,6 +410,9 @@ Pernelyg daug naudotojų skaito šį puslapį. Prašome palaukti ir bandyti į šį puslapį patekti dar kartą. $1', +'pool-timeout' => 'Baigėsi laikas laukiant užrakto', +'pool-queuefull' => 'Telkinio eilė pilna', +'pool-errorunknown' => 'Nežinoma klaida', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Apie {{SITENAME}}', @@ -582,7 +577,8 @@ Jūsų paskyra buvo sukurta. Nepamirškite pakeisti savo [[Special:Preferences|{ 'yourname' => 'Naudotojo vardas:', 'yourpassword' => 'Slaptažodis:', 'yourpasswordagain' => 'Pakartokite slaptažodį:', -'remembermypassword' => 'Prisiminti šią informaciją šiame kompiuteryje', +'remembermypassword' => 'Prisiminti prisijungimo duomenis šiame kompiuteryje (daugiausiai $1 {{PLURAL:$1|dieną|dienas|dienų}})', +'securelogin-stick-https' => 'Likite prisijungę prie HTTPS po prisijungimo', 'yourdomainname' => 'Jūsų domenas:', 'externaldberror' => 'Yra arba išorinė autorizacijos duomenų bazės klaida arba jums neleidžiama atnaujinti jūsų išorinės paskyros.', 'login' => 'Prisijungti', @@ -599,6 +595,7 @@ Jūsų paskyra buvo sukurta. Nepamirškite pakeisti savo [[Special:Preferences|{ 'gotaccount' => "Jau turite paskyrą? '''$1'''.", 'gotaccountlink' => 'Prisijunkite', 'createaccountmail' => 'el. paštu', +'createaccountreason' => 'Priežastis:', 'badretype' => 'Įvesti slaptažodžiai nesutampa.', 'userexists' => 'Įvestasis naudotojo vardas jau naudojamas. Prašome pasirinkti kitą vardą.', @@ -619,6 +616,7 @@ Patikrinkite rašybą, arba [[Special:UserLogin/signup|sukurkite naują paskyrą 'wrongpasswordempty' => 'Įvestas slaptažodis yra tuščias. Pamėginkite vėl.', 'passwordtooshort' => 'Slaptažodžiai turi būti bent $1 {{PLURAL:$1|simbolio|simbolių|simbolių}} ilgio.', 'password-name-match' => 'Jūsų slaptažodis turi skirtis nuo jūsų naudotojo vardo.', +'password-login-forbidden' => 'Šito naudotojo vardo ir slaptažodžio naudojimas yra uždraustas.', 'mailmypassword' => 'Atsiųsti naują slaptažodį el. paštu', 'passwordremindertitle' => 'Laikinasis {{SITENAME}} slaptažodis', 'passwordremindertext' => 'Kažkas (tikriausiai jūs, IP adresu $1) @@ -663,6 +661,9 @@ Palaukite prieš bandant vėl.', 'loginlanguagelabel' => 'Kalba: $1', 'suspicious-userlogout' => 'Jūsų prašymas atsijungti buvo atmestas, nes, atrodo, jį klaidingai išsiuntė naršyklė arba spartinantysis tarpinis serveris.', +# E-mail sending +'php-mail-error-unknown' => 'Nežinoma klaida PHP mail() funkcijoje', + # Password reset dialog 'resetpass' => 'Keisti slaptažodį', 'resetpass_announce' => 'Jūs prisijungėte su atsiųstu laikinuoju kodu. Norėdami užbaigti prisijungimą, čia jums reikia nustatyti naująjį slaptažodį:', @@ -714,9 +715,11 @@ Jūs galbūt jau sėkmingai pakeitėte savo slaptažodį ar gavote naują laikin 'showlivepreview' => 'Tiesioginė peržiūra', 'showdiff' => 'Rodyti skirtumus', 'anoneditwarning' => "'''Dėmesio:''' Jūs nesate prisijungęs. Jūsų IP adresas bus įrašytas į šio puslapio istoriją.", +'anonpreviewwarning' => "''Jūs nesate prisijungęs. Išsaugojant jūsų IP adresas bus rodomas šio puslapio redagavimo istorijoje.''", 'missingsummary' => "'''Priminimas:''' Jūs nenurodėte keitimo komentaro. Jei vėl paspausite „{{int:savearticle}}“, jūsų keitimas bus išsaugotas be jo.", 'missingcommenttext' => 'Prašome įvesti komentarą.', -'missingcommentheader' => "'''Priminimas:''' Jūs nenurodėte skyrelio/antraštės šiam komentarui. Jei vėl paspausite Išsaugoti, jūsų keitimas bus įrašytas be jo.", +'missingcommentheader' => "'''Priminimas:''' Jūs nenurodėte šio komentaro pavadinimo/antraštės. +Jei vėl paspausite „{{int:savearticle}}“, jūsų keitimas bus įrašytas be jo.", 'summary-preview' => 'Komentaro peržiūra:', 'subject-preview' => 'Skyrelio/antraštės peržiūra:', 'blockedtitle' => 'Naudotojas yra užblokuotas', @@ -789,7 +792,9 @@ Jūs galite [[Special:Search/{{PAGENAME}}|ieškoti šio puslapio pavadinimo]] ki 'userjsyoucanpreview' => "'''Patarimas:''' Naudokite „{{int:showpreview}}“ mygtuką, kad išmėgintumėte savo naująjį JS prieš išsaugant.", 'usercsspreview' => "'''Nepamirškite, kad jūs tik peržiūrit savo naudotojo CSS, jis dar nebuvo išsaugotas!'''", 'userjspreview' => "'''Nepamirškite, kad jūs tik testuojat/peržiūrit savo naudotojo JavaScript, jis dar nebuvo išsaugotas!'''", -'userinvalidcssjstitle' => "'''Dėmesio:''' Nėra jokios išvaizdos „$1“. Nepamirškite, kad savo .css ir .js puslapiai naudoja pavadinimą mažosiomis raidėmis, pvz., {{ns:user}}:Foo/monobook.css, o ne {{ns:user}}:Foo/Monobook.css.", +'sitecsspreview' => "'''Nepamirškite, kad jūs tik peržiūrit šio CSS .'''! N!''' Tai dar nebuvo išsaugotas!'''", +'sitejspreview' => "'''Nepamirškite, kad jūs tik peržiūrit šis JavaScript kodas .'''! N!''' Tai dar nebuvo išsaugotas!'''", +'userinvalidcssjstitle' => "'''Dėmesio:''' Nėra jokios išvaizdos „$1“. Nepamirškite, kad savo .css ir .js puslapiai naudoja pavadinimą mažosiomis raidėmis, pvz., {{ns:user}}:Foo/vector.css, o ne {{ns:user}}:Foo/Vector.css.", 'updated' => '(Atnaujinta)', 'note' => "'''Pastaba:'''", 'previewnote' => "'''Nepamirškite, kad tai tik peržiūra, pakeitimai dar nėra išsaugoti!'''", @@ -824,9 +829,6 @@ Jūs taip pat pasižadate, kad tai jūsų pačių rašytas turinys arba kopijuot Taip pat jūs pasižadate, kad tai jūsų pačių rašytas tekstas arba kopijuotas iš viešų ar panašių nemokamų šaltinių (detaliau - $1). '''NEKOPIJUOKITE AUTORINĖMIS TEISĖMIS APSAUGOTŲ DARBŲ BE LEIDIMO!'''", -'longpagewarning' => "'''DĖMESIO: Šis puslapis yra $1 kilobaitų ilgio; kai kurios -naršyklės gali turėti problemų redaguojant puslapius beveik ar virš 32 kB. -Prašome pamėginti puslapį padalinti į keletą smulkesnių dalių.'''", 'longpageerror' => "'''KLAIDA: Tekstas, kurį pateikėte, yra $1 kilobaitų ilgio, kuris yra didesnis nei daugiausiai leistini $2 kilobaitai. Jis nebus išsaugotas.'''", 'readonlywarning' => "'''DĖMESIO: Duomenų bazė buvo užrakinta techninei profilaktikai, todėl šiuo metu negalėsite išsaugoti savo pakeitimų. Siūlome nusikopijuoti tekstą į tekstinį failą ir vėliau jį čia išsaugoti.''' @@ -1005,6 +1007,8 @@ $1", 'logdelete-failure' => "'''Sąrašo rodomumas negali būti nustatytas:''' $1", 'revdel-restore' => 'Keisti matomumą', +'revdel-restore-deleted' => 'Ištrintos versijos', +'revdel-restore-visible' => 'Matomos versijos', 'pagehist' => 'Puslapio istorija', 'deletedhist' => 'Ištrinta istorija', 'revdelete-content' => 'turinys', @@ -1074,11 +1078,13 @@ Prašome patikrinti sąrašus.', # Diffs 'history-title' => '„$1“ versijų istorija', 'difference' => '(Skirtumai tarp versijų)', +'difference-multipage' => '(Skirtumai tarp puslapių)', 'lineno' => 'Eilutė $1:', 'compareselectedversions' => 'Palyginti pasirinktas versijas', 'showhideselectedversions' => 'Rodyti/slėpti pasirinktas versijas', 'editundo' => 'atšaukti', -'diff-multi' => '($1 {{PLURAL:$1|tarpinis keitimas nėra rodomas|tarpiniai keitimai nėra rodomi|tarpinių keitimų nėra rodoma}}.)', +'diff-multi' => '($2 {{PLURAL:$2|naudotojo|naudotojų|naudotojų}} $1 {{PLURAL:$1|tarpinis keitimas nėra rodomas|tarpiniai keitimai nėra rodomi|tarpinių keitimų nėra rodoma}})', +'diff-multi-manyusers' => '(daugiau nei $2 {{PLURAL:$2|naudotojo|naudotojų|naudotojų}} $1 {{PLURAL:$1|tarpinis keitimas nėra rodomas|tarpiniai keitimai nėra rodomi|tarpinių keitimų nėra rodoma}})', # Search results 'searchresults' => 'Paieškos rezultatai', @@ -1113,6 +1119,7 @@ Prašome patikrinti sąrašus.', 'searchprofile-everything-tooltip' => 'Ieškoti viso turinio (tame tarpe aptarimų puslapių)', 'searchprofile-advanced-tooltip' => 'Ieškoti skirtingose vardų srityse', 'search-result-size' => '$1 ({{PLURAL:$2|1 žodis|$2 žodžiai|$2 žodžių}})', +'search-result-category-size' => '{{PLURAL:$1|1 narys|$1 narių}} ({{PLURAL:$2|1 subkategorijoje|$2 subkategorijų}}, {{PLURAL:$3|1 failas|$3 failų}})', 'search-result-score' => 'Tinkamumas: $1%', 'search-redirect' => '(peradresavimas $1)', 'search-section' => '(skyrius $1)', @@ -1187,6 +1194,7 @@ Prašome patikrinti sąrašus.', 'contextlines' => 'Eilučių rezultate:', 'contextchars' => 'Konteksto simbolių eilutėje:', 'stub-threshold' => 'Puslapį žymėti nebaigtu, jei mažesnis nei:', +'stub-threshold-disabled' => 'Išjungtas', 'recentchangesdays' => 'Rodomos dienos paskutinių keitimų sąraše:', 'recentchangesdays-max' => '(daugiausiai $1 {{PLURAL:$1|diena|dienos|dienų}})', 'recentchangescount' => 'Numatytasis rodomas keitimų skaičius:', @@ -1220,6 +1228,7 @@ Galite panaudoti šią atsitiktinai sugeneruotą reikšmę: $1', 'prefs-files' => 'Failai', 'prefs-custom-css' => 'Asmeninis CSS', 'prefs-custom-js' => 'Asmeninis JavaSript', +'prefs-common-css-js' => 'Bendras CSS/JS visoms išvaizdoms:', 'prefs-reset-intro' => 'Jūs galite pasinaudoti šiuo puslapiu atstatyti jūsų nustatymus į svetainės numatytuosius. Tai nebeatšaukiama.', 'prefs-emailconfirm-label' => 'El. pašto patvirtinimas:', @@ -1258,9 +1267,15 @@ Jei jūs jį įvesite, jis bus naudojamas pažymėti jūsų darbą.', 'prefs-advancedrendering' => 'Papildomi nustatymai', 'prefs-advancedsearchoptions' => 'Papildomi nustatymai', 'prefs-advancedwatchlist' => 'Papildomi nustatymai', -'prefs-display' => 'Rodymo nustatymai', +'prefs-displayrc' => 'Rodymo nustatymai', +'prefs-displaysearchoptions' => 'Rodymo nuostatos', +'prefs-displaywatchlist' => 'Rodymo nuostatos', 'prefs-diffs' => 'Skirtumai', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Panašu, kad E-pašto adresas yra teisingas', +'email-address-validity-invalid' => 'Įveskite korektišką e-pašto adresą', + # User rights 'userrights' => 'Naudotojų teisių valdymas', 'userrights-lookup-user' => 'Tvarkyti naudotojo grupes', @@ -1345,6 +1360,7 @@ teisės", 'right-hideuser' => 'Blokuoti naudotojo vardą, paslepiant jį nuo viešinimo', 'right-ipblock-exempt' => 'Apeiti IP blokavimus, autoblokavimus ir pakopinius blokavimus', 'right-proxyunbannable' => 'Apeiti automatinius proxy serverių blokavimus', +'right-unblockself' => 'Atblokuoti pačius', 'right-protect' => 'Pakeisti apsaugos lygius ir redaguoti apsaugotus puslapius', 'right-editprotected' => 'Redaguoti apsaugotus puslapius (be pakopinės apsaugos)', 'right-editinterface' => 'Redaguoti naudotojo aplinką', @@ -1367,7 +1383,6 @@ teisės", 'right-siteadmin' => 'Atrakinti ir užrakinti duomenų bazę', 'right-reset-passwords' => 'Atstatyti kitų naudotojų slaptažodžius', 'right-override-export-depth' => 'Eksportuoti puslapius įtraukiant susietus puslapius iki 5 lygio gylio', -'right-versiondetail' => 'Rodyti išplėstinę programinės įrangos versijos informaciją', 'right-sendemail' => 'Siųsti el. laišką kitiems naudotojams', # User rights log @@ -1418,14 +1433,9 @@ teisės", 'recentchanges-legend' => 'Naujausių keitimų parinktys', 'recentchangestext' => 'Šiame puslapyje yra patys naujausi pakeitimai šiame projekte.', 'recentchanges-feed-description' => 'Sekite pačius naujausius projekto keitimus šiame šaltinyje.', -'recentchanges-label-legend' => 'Paaiškinimai: $1.', -'recentchanges-legend-newpage' => '$1 - naujas puslapis', 'recentchanges-label-newpage' => 'Šiuo keitimu sukurtas naujas puslapis', -'recentchanges-legend-minor' => '$1 - smulkus pakeitimas', 'recentchanges-label-minor' => 'Tai smulkus pakeitimas', -'recentchanges-legend-bot' => '$1 - automatizuotas keitimas', 'recentchanges-label-bot' => 'Šį keitimą atliko automatinė programa', -'recentchanges-legend-unpatrolled' => '$1 - nepatikrintas keitimas', 'recentchanges-label-unpatrolled' => 'Šis keitimas dar nebuvo patikrintas', 'rcnote' => "Žemiau yra {{PLURAL:$1|'''1''' pakeitimas|paskutiniai '''$1''' pakeitimai|paskutinių '''$1''' pakeitimų}} per {{PLURAL:$2|dieną|paskutiniąsias '''$2''' dienas|paskutiniųjų '''$2''' dienų}} skaičiuojant nuo $5, $4.", 'rcnotefrom' => "Žemiau yra pakeitimai pradedant '''$2''' (rodoma iki '''$1''' pakeitimų).", @@ -1472,6 +1482,9 @@ Puslapiai iš jūsų [[Special:Watchlist|stebimųjų sąrašo]] yra '''paryškin 'upload_directory_missing' => 'Nėra įkėlimo aplanko ($1) ir negali būti sukurtas tinklo serverio.', 'upload_directory_read_only' => 'Tinklapio serveris negali rašyti į įkėlimo aplanką ($1).', 'uploaderror' => 'Įkėlimo klaida', +'upload-recreate-warning' => "'''Dėmėsio: Failas šiuo pavadinimu buvo ištrintas arba pervadintas.''' + +Jūsų patogumui pateiktas įrašas apie šio puslapio trynimą ar pervadinimą:", 'uploadtext' => "Naudokitės žemiau pateikta forma failų įkėlimui. Norėdami peržiūrėti ar ieškoti anksčiau įkeltų paveikslėlių, eikite į [[Special:FileList|įkeltų failų sąrašą]], įkėlimai yra registruojami [[Special:Log/upload|įkėlimų istorijoje]], trynimai — [[Special:Log/delete|trynimų istorijoje]]. @@ -1503,6 +1516,17 @@ Norėdami panaudoti įkeltą failą puslapyje, naudokite tokias nuorodas: 'filetype-unwanted-type' => "„.$1“''' yra nepageidautinas failo tipas. {{PLURAL:$3|Pageidautinas failų tipas|pageidautini failų tipai}} yra $2.", 'filetype-banned-type' => "„.$1“''' nėra leistinas failo tipas. {{PLURAL:$3|Leistinas failų tipas|Leistini failų tipai}} yra $2.", 'filetype-missing' => 'Failas neturi galūnės (pavyzdžiui „.jpg“).', +'empty-file' => 'Failas, kurį patvirtinote, tuščias.', +'file-too-large' => 'Failas, kurį patvirtinote, pernelyg didelis.', +'filename-tooshort' => 'Failo pavadinimas per trumpas.', +'filetype-banned' => 'Šis failo tipas yra uždraustas.', +'verification-error' => 'Šis failas nepraėjo patikrinimo.', +'hookaborted' => 'Pakeitimą, kurį bandėte atlikti, nutraukė priedo gaudlys.', +'illegal-filename' => 'Failo vardas neleidžiamas.', +'overwrite' => 'Perrašyti esamą failą neleidžiama.', +'unknown-error' => 'Įvyko nežinoma klaida.', +'tmp-create-error' => 'Nepavyko sukurti laikino failo.', +'tmp-write-error' => 'Klaida rašant laikinąjį failą.', 'large-file' => 'Rekomenduojama, kad failų dydis būtų nedidesnis nei $1; šio failo dydis yra $2.', 'largefileserver' => 'Šis failas yra didesnis nei serveris yra sukonfigūruotas leisti.', 'emptyfile' => 'Panašu, kad failas, kurį įkėlėte yra tuščias. Tai gali būti dėl klaidos failo pavadinime. Pasitikrinkite ar tikrai norite įkelti šitą failą.', @@ -1528,13 +1552,14 @@ prašome eiti atgal ir įkelti šį failą kitu vardu. [[File:$1|thumb|center|$1 Jei visvien norite įkelti savo failą, prašome eiti atgal ir įkelti šį failą kitu vardu. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Šis failas yra {{PLURAL:$1|šio failo|šių failų}} dublikatas:', 'file-deleted-duplicate' => 'Failas, identiškas šiam failui ([[:$1]]), seniau buvo ištrintas. Prieš įkeldami jį vėl patikrinkite šio failo ištrynimo istoriją.', -'successfulupload' => 'Įkelta sėkmingai', 'uploadwarning' => 'Dėmesio', 'uploadwarning-text' => 'Prašome pakeisti failo aprašymą ir bandykite dar kartą.', 'savefile' => 'Išsaugoti failą', 'uploadedimage' => 'įkėlė „[[$1]]“', 'overwroteimage' => 'įkėlė naują „[[$1]]“ versiją', 'uploaddisabled' => 'Įkėlimai uždrausti', +'copyuploaddisabled' => 'Įkėlimas pagal URL išjungtas.', +'uploadfromurl-queued' => 'Jūsų įkėlimas įtrauktas į eilę.', 'uploaddisabledtext' => 'Failų įkėlimai yra uždrausti.', 'php-uploaddisabledtext' => "Failų įkėlimai uždrausti PHP nustatymuose. Patikrinkite ''file_uploads'' nustatą.", @@ -1554,6 +1579,14 @@ Patikrinkite ''file_uploads'' nustatą.", Jūs turėtumėte nuspręsti, ar verta toliau įkeldinėti šį failą. Šio failo šalinimų istorija yra pateikta dėl patogumo:", 'filename-bad-prefix' => "Jūsų įkeliamas failas prasideda su '''„$1“''', bet tai yra neapibūdinantis pavadinimas, dažniausiai priskirtas skaitmeninių kamerų. Prašome suteikti labiau apibūdinantį pavadinimą savo failui.", +'upload-success-subj' => 'Įkelta sėkmingai', +'upload-success-msg' => 'Jūsų įkėlimas iš [$2] buvo sėkmingas. Jį galima rasti čia: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Įkėlimo problema', +'upload-failure-msg' => 'Įvyko įkėlimo iš [$2] problema: + +$1', +'upload-warning-subj' => 'Įkėlimo įspėjimas', +'upload-warning-msg' => 'Įvyko įkėlimo iš [$2] problema. Jums reikėtų grįžti į [[Special:Upload/stash/$1|įkėlimo formą]], norint išspręsti šią problemą.', 'upload-proto-error' => 'Neteisingas protokolas', 'upload-proto-error-text' => 'Nuotoliniai įkėlimas reikalauja, kad URL prasidėtų http:// arba ftp://.', @@ -1567,22 +1600,23 @@ Prašome susisiekti su [[Special:ListUsers/sysop|sistemos administratoriumi]].', 'upload-http-error' => 'Įvyko HTTP klaida: $1', # img_auth script messages -'img-auth-accessdenied' => 'Prieiga uždrausta', -'img-auth-nopathinfo' => 'Trūksta PATH_INFO. +'img-auth-accessdenied' => 'Prieiga uždrausta', +'img-auth-nopathinfo' => 'Trūksta PATH_INFO. Jūsų serveris nenustatytas perduoti šią informaciją. Tai gali būti CGI paremta ir negali palaikyti img_auth. Daugiau informacijos http://www.mediawiki.org/wiki/Manual:Image_Authorization.', -'img-auth-notindir' => 'Užklaustas kelias nėra sukonfigūruotame įkėlimo kataloge.', -'img-auth-badtitle' => 'Nepavyksta padaryti leistino pavadinimo iš „$1“.', -'img-auth-nologinnWL' => 'Jūs nesate prisijungęs ir „$1“ nėra baltajame sąraše.', -'img-auth-nofile' => 'Failas „$1“ neegzistuoja.', -'img-auth-isdir' => 'Jūs bandote pasiekti katalogą „$1“. +'img-auth-notindir' => 'Užklaustas kelias nėra sukonfigūruotame įkėlimo kataloge.', +'img-auth-badtitle' => 'Nepavyksta padaryti leistino pavadinimo iš „$1“.', +'img-auth-nologinnWL' => 'Jūs nesate prisijungęs ir „$1“ nėra baltajame sąraše.', +'img-auth-nofile' => 'Failas „$1“ neegzistuoja.', +'img-auth-isdir' => 'Jūs bandote pasiekti katalogą „$1“. Leidžiama prieiga tik prie failų.', -'img-auth-streaming' => 'Siunčiamas „$1“.', -'img-auth-public' => 'img_auth.php paskirtis yra pateikti failus iš privačių projektų. +'img-auth-streaming' => 'Siunčiamas „$1“.', +'img-auth-public' => 'img_auth.php paskirtis yra pateikti failus iš privačių projektų. Šis projektas sukonfigūruotas kaip viešasis. Dėl saugumo, img_auth.php yra išjungtas.', -'img-auth-noread' => 'Naudotojas neturi teisės peržiūrėti „$1“.', +'img-auth-noread' => 'Naudotojas neturi teisės peržiūrėti „$1“.', +'img-auth-bad-query-string' => 'URL neteisingas užklausos eilutę.', # HTTP errors 'http-invalid-url' => 'Neleistinas URL: $1', @@ -1614,6 +1648,7 @@ Paspaudę ant stulpelio antraštės pakeiste išrikiavimą.', 'listfiles_search_for' => 'Ieškoti failo pavadinimo:', 'imgfile' => 'failas', 'listfiles' => 'Failų sąrašas', +'listfiles_thumb' => 'Miniatiūra', 'listfiles_date' => 'Data', 'listfiles_name' => 'Pavadinimas', 'listfiles_user' => 'Naudotojas', @@ -1727,8 +1762,8 @@ Informacija iš [$2 failo aprašymo puslapio] yra pateikiama žemiau.', 'statistics-edits' => 'Puslapių redagavimų skaičius nuo {{SITENAME}} sukūrimo', 'statistics-edits-average' => 'Vidutinis redakcijų kiekis puslapiui', 'statistics-views-total' => 'Iš viso peržiūrų', +'statistics-views-total-desc' => 'Neegzistuojančių ir specialiųjų puslapių parodymai neįtraukti', 'statistics-views-peredit' => 'Peržiūrų skaičius redakcijai', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Užduočių eilės] ilgis', 'statistics-users' => 'Registruotų [[Special:ListUsers|naudotojų]]', 'statistics-users-active' => 'Aktyvių naudotojų', 'statistics-users-active-desc' => 'Naudotojai, kurie per {{PLURAL:$1|paskutinę dieną|paskutines $1 dienų}} padarė keitimų', @@ -1743,7 +1778,7 @@ Puslapis laikomas daugiaprasmiu puslapiu, jei jis naudoja šabloną, kuris yra n 'doubleredirects' => 'Dvigubi peradresavimai', 'doubleredirectstext' => 'Šiame puslapyje yra puslapių, kurie nukreipia į kitus peradresavimo puslapius, sąrašas. Kiekvienoje eilutėje yra nuorodos į pirmąjį ir antrąjį peradresavimą, taip pat antrojo peradresavimo paskirtis, kuris paprastai yra „tikrasis“ paskirties puslapis, į kurį pirmasis peradresavimas ir turėtų rodyti. -Išbraukti įrašai yra išspręsti.', +Išbraukti įrašai yra išspręsti.', 'double-redirect-fixed-move' => '[[$1]] buvo perkeltas, dabar tai peradresavimas į [[$2]]', 'double-redirect-fixer' => 'Peradresavimų tvarkyklė', @@ -1766,6 +1801,8 @@ Kiekvienoje eilutėje yra nuorodos į pirmąjį ir antrąjį peradresavimą, tai 'nmembers' => '$1 {{PLURAL:$1|narys|nariai|narių}}', 'nrevisions' => '$1 {{PLURAL:$1|keitimas|keitimai|keitimų}}', 'nviews' => '$1 {{PLURAL:$1|parodymas|parodymai|parodymų}}', +'nimagelinks' => 'Naudojama $1 {{PLURAL:$1|puslapyje|puslapiuose|puslapių}}', +'ntransclusions' => 'naudojama $1 {{PLURAL:$1|puslapyje|puslapiuose|puslapių}}', 'specialpage-empty' => 'Šiai ataskaitai nėra rezultatų.', 'lonelypages' => 'Vieniši puslapiai', 'lonelypagestext' => 'Į šiuos puslapius nėra nuorodų ar įtraukimų iš kitų {{SITENAME}} puslapių.', @@ -1922,34 +1959,40 @@ Palaikomi protokolai: $1', 'listgrouprights-removegroup-self-all' => 'Pašalinti visas grupes iš savo paskyros', # E-mail user -'mailnologin' => 'Nėra adreso', -'mailnologintext' => 'Jums reikia būti [[Special:UserLogin|prisijungusiam]] ir turi būti įvestas teisingas el. pašto adresas jūsų [[Special:Preferences|nustatymuose]], kad siųstumėte el. laiškus kitiems nautotojams.', -'emailuser' => 'Rašyti laišką šiam naudotojui', -'emailpage' => 'Siųsti el. laišką naudotojui', -'emailpagetext' => 'Jūs gali pasinaudoti šia forma norėdami nusiųsti el. laišką šiam naudotojui. +'mailnologin' => 'Nėra adreso', +'mailnologintext' => 'Jums reikia būti [[Special:UserLogin|prisijungusiam]] ir turi būti įvestas teisingas el. pašto adresas jūsų [[Special:Preferences|nustatymuose]], kad siųstumėte el. laiškus kitiems nautotojams.', +'emailuser' => 'Rašyti laišką šiam naudotojui', +'emailpage' => 'Siųsti el. laišką naudotojui', +'emailpagetext' => 'Jūs gali pasinaudoti šia forma norėdami nusiųsti el. laišką šiam naudotojui. El. pašto adresas, kurį įvedėte [[Special:Preferences|savo naudotojo nustatymuose]], bus rodomas kaip el. pašto siuntėjo adresas, tam, kad gavėjas galėtų jums iškart atsakyti.', -'usermailererror' => 'Pašto objektas grąžino klaidą:', -'defemailsubject' => '{{SITENAME}} el. paštas', -'noemailtitle' => 'Nėra el. pašto adreso', -'noemailtext' => 'Šis naudotojas nėra nurodęs teisingo el. pašto adreso, arba yra pasirinkęs negauti el. pašto iš kitų naudotojų.', -'nowikiemailtitle' => 'El. laiškai neleidžiami', -'nowikiemailtext' => 'Šis naudotojas yra pasirinkęs negauti elektroninių laiškų iš kitų naudotojų.', -'email-legend' => 'Siųsti elektroninį laišką kitam {{SITENAME}} naudotojui', -'emailfrom' => 'Nuo:', -'emailto' => 'Kam:', -'emailsubject' => 'Tema:', -'emailmessage' => 'Tekstas:', -'emailsend' => 'Siųsti', -'emailccme' => 'Siųsti man mano laiško kopiją.', -'emailccsubject' => 'Laiško kopija naudotojui $1: $2', -'emailsent' => 'El. laiškas išsiųstas', -'emailsenttext' => 'Jūsų el. pašto žinutė išsiųsta.', -'emailuserfooter' => 'Šis elektroninis laiškas buvo išsiųstas naudotojo $1 naudotojui $2 naudojant „Rašyti elektroninį laišką“ funkciją projekte {{SITENAME}}.', +'usermailererror' => 'Pašto objektas grąžino klaidą:', +'defemailsubject' => '{{SITENAME}} el. paštas', +'usermaildisabled' => 'Naudotojo elektroninis paštas išjungtas', +'usermaildisabledtext' => 'Jūs negalite siūlsti el. laiško kitiems šio wiki projekto naudotojams.', +'noemailtitle' => 'Nėra el. pašto adreso', +'noemailtext' => 'Šis naudotojas nėra nurodęs teisingo el. pašto adreso, arba yra pasirinkęs negauti el. pašto iš kitų naudotojų.', +'nowikiemailtitle' => 'El. laiškai neleidžiami', +'nowikiemailtext' => 'Šis naudotojas yra pasirinkęs negauti elektroninių laiškų iš kitų naudotojų.', +'email-legend' => 'Siųsti elektroninį laišką kitam {{SITENAME}} naudotojui', +'emailfrom' => 'Nuo:', +'emailto' => 'Kam:', +'emailsubject' => 'Tema:', +'emailmessage' => 'Tekstas:', +'emailsend' => 'Siųsti', +'emailccme' => 'Siųsti man mano laiško kopiją.', +'emailccsubject' => 'Laiško kopija naudotojui $1: $2', +'emailsent' => 'El. laiškas išsiųstas', +'emailsenttext' => 'Jūsų el. pašto žinutė išsiųsta.', +'emailuserfooter' => 'Šis elektroninis laiškas buvo išsiųstas naudotojo $1 naudotojui $2 naudojant „Rašyti elektroninį laišką“ funkciją projekte {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Paliekamas sistemos pranešimas.', +'usermessage-editor' => 'Sistemos pranešėjas', # Watchlist 'watchlist' => 'Stebimi puslapiai', 'mywatchlist' => 'Stebimi puslapiai', -'watchlistfor' => "(naudotojo '''$1''')", +'watchlistfor2' => 'Naudotojo $1 $2', 'nowatchlist' => 'Neturite nei vieno stebimo puslapio.', 'watchlistanontext' => 'Prašome $1, kad peržiūrėtumėte ar pakeistumėte elementus savo stebimųjų sąraše.', 'watchnologin' => 'Neprisijungęs', @@ -2068,7 +2111,10 @@ Paskutimas keitimas darytas naudotojo [[User:$3|$3]] ([[User talk:$3|Aptarimas]] 'revertpage-nouser' => 'Atmesti (naudotojo vardas pašalintas) pakeitimai, grąžinta prieš tai buvusi [[User:$1|$1]] versija', 'rollback-success' => 'Atmesti $1 pakeitimai; grąžinta prieš tai buvusi $2 versija.', -'sessionfailure' => 'Atrodo yra problemų su jūsų prisijungimo sesija; šis veiksmas buvo atšauktas kaip atsargumo priemonė prieš sesijos vogimą. + +# Edit tokens +'sessionfailure-title' => 'Sesijos klaida', +'sessionfailure' => 'Atrodo yra problemų su jūsų prisijungimo sesija; šis veiksmas buvo atšauktas kaip atsargumo priemonė prieš sesijos vogimą. Prašome paspausti „atgal“ ir perkraukite puslapį iš kurio atėjote, ir pamėginkite vėl.', # Protect @@ -2198,19 +2244,23 @@ $1', 'month' => 'Nuo mėnesio (ir anksčiau):', 'year' => 'Nuo metų (ir anksčiau):', -'sp-contributions-newbies' => 'Rodyti tik naujų paskyrų įnašus', -'sp-contributions-newbies-sub' => 'Naujoms paskyroms', -'sp-contributions-newbies-title' => 'Naudotojų keitimai naujoms paskyroms', -'sp-contributions-blocklog' => 'Blokavimų istorija', -'sp-contributions-deleted' => 'ištrintas naudotojo indėlis', -'sp-contributions-logs' => 'Specialiųjų veiksmų istorija', -'sp-contributions-talk' => 'Aptarimas', -'sp-contributions-userrights' => 'naudotojų teisių valdymas', -'sp-contributions-blocked-notice' => 'Šis naudotojas šiuo metu užblokuotas. +'sp-contributions-newbies' => 'Rodyti tik naujų paskyrų įnašus', +'sp-contributions-newbies-sub' => 'Naujoms paskyroms', +'sp-contributions-newbies-title' => 'Naudotojų keitimai naujoms paskyroms', +'sp-contributions-blocklog' => 'Blokavimų istorija', +'sp-contributions-deleted' => 'ištrintas naudotojo indėlis', +'sp-contributions-uploads' => 'nuotraukos', +'sp-contributions-logs' => 'Specialiųjų veiksmų istorija', +'sp-contributions-talk' => 'Aptarimas', +'sp-contributions-userrights' => 'naudotojų teisių valdymas', +'sp-contributions-blocked-notice' => 'Šis naudotojas šiuo metu užblokuotas. Pateikiamas paskutinis blokavimo istorijos įrašas.', -'sp-contributions-search' => 'Ieškoti įnašo', -'sp-contributions-username' => 'IP adresas arba naudotojo vardas:', -'sp-contributions-submit' => 'Ieškoti', +'sp-contributions-blocked-notice-anon' => 'Šis IP adresas yra užblokuotas. +Paskutinis blokavimo įrašas pateikiamas žemiau:', +'sp-contributions-search' => 'Ieškoti įnašo', +'sp-contributions-username' => 'IP adresas arba naudotojo vardas:', +'sp-contributions-toponly' => 'Rodyti tik paskutinius keitimus', +'sp-contributions-submit' => 'Ieškoti', # What links here 'whatlinkshere' => 'Susiję puslapiai', @@ -2270,7 +2320,6 @@ Aplankykite [[Special:IPBlockList|IP blokavimų istoriją]] norėdami jį perži 'ipb-edit-dropdown' => 'Redaguoti blokavimų priežastis', 'ipb-unblock-addr' => 'Atblokuoti $1', 'ipb-unblock' => 'Atblokuoti naudotojo vardą arba IP adresą', -'ipb-blocklist-addr' => 'Egzistuojantys $1 blokavimai', 'ipb-blocklist' => 'Rodyti egzistuončius blokavimus', 'ipb-blocklist-contribs' => '$1 indėlis', 'unblockip' => 'Atblokuoti naudotoją', @@ -2343,6 +2392,8 @@ $1 jau yra užblokuotas. Ar norite pakeisti nustatymus?', 'cant-block-while-blocked' => 'Jūs negalite blokuoti kitų naudotojų kuomet pats esate užblokuotas.', 'cant-see-hidden-user' => 'Naudotojas, kurį bandote užblokuoti, jau yra užblokuotas arba paslėptas. Kadangi jūs neturi hideuser teisės, jūs negalite pamatyti arba pakeisti naudotojo blokavimo.', +'ipbblocked' => 'Jūs negalite blokuoti ar atblokuoti kitų naudotojų, nes pats esate užblokuotas', +'ipbnounblockself' => 'Jums nėra leidžiama savęs atblokuoti', # Developer tools 'lockdb' => 'Užrakinti duomenų bazę', @@ -2390,6 +2441,18 @@ o egzistuojančių puslapių sugadinti negalite. Jei pervadinate populiarų puslapį, tai gali sukelti nepageidaujamų šalutinių efektų, dėl to šį veiksmą vykdykite tik įsitikinę, kad suprantate visas pasekmes.", +'movepagetext-noredirectfixer' => "Naudodamiesi žemiau pateikta forma, pervadinsite puslapį perkeldami visą jo istoriją į naująjį pavadinimą. +Senasis pavadinimas taps nukreipiamuoju puslapiu į naująjį. +Nuorodos į senąjį puslapį nebus automatiškai pakeistos, todėl būtinai +patikrinkite, ar nesukūrėte [[Special:DoubleRedirects|dvigubų]] ar [[Special:BrokenRedirects|neveikiančių]] nukreipimų. +Jūs esate atsakingas už tai, kad nuorodos rodytų į ten, kur ir norėta. + +Primename, kad puslapis '''nebus''' pervadintas, jei jau yra puslapis nauju pavadinimu, nebent tas puslapis yra tuščias arba nukreipiamasis ir neturi redagavimo istorijos. +Taigi, jūs galite pervadinti puslapį seniau naudotu vardu, jei prieš tai jis buvo per klaidą pervadintas, o egzistuojančių puslapių sugadinti negalite. + +'''Dėmesio!''' +Jei pervadinate populiarų puslapį, tai gali sukelti nepageidaujamų šalutinių efektų, +dėl to šį veiksmą vykdykite tik įsitikinę, kad suprantate visas pasekmes.", 'movepagetalktext' => "Susietas aptarimo puslapis bus automatiškai perkeltas kartu su juo, '''išskyrus:''': *Puslapis nauju pavadinimu jau turi netuščią aptarimo puslapį, arba *Paliksite žemiau esančia varnelę nepažymėtą. @@ -2448,6 +2511,7 @@ Paskirties puslapis „[[:$1]]“ jau yra. Ar norite jį ištrinti, kad galėtum 'immobile-source-page' => 'Šio puslapio perkelti negalima.', 'immobile-target-page' => 'Negalima perkelti į paskirtąją vietą.', 'imagenocrossnamespace' => 'Negalima pervadinti failo į ne failo vardų sritį', +'nonfile-cannot-move-to-file' => 'Negalima perkelti ne failo į failų vardų sritį', 'imagetypemismatch' => 'Naujas failo plėtinys neatitinka jo tipo', 'imageinvalidfilename' => 'Failo pavadinimas yra klaidingas', 'fix-double-redirects' => 'Atnaujinti peradresavimus, kad šie rodytų į originalų straipsnio pavadinimą', @@ -2523,10 +2587,11 @@ Visi tarpprojektiniai importo veiksmai yra registruojami [[Special:Log/import|i 'import-interwiki-namespace' => 'Paskirties vardų sritis:', 'import-upload-filename' => 'Failo pavadinimas:', 'import-comment' => 'Komentaras:', -'importtext' => 'Prašome eksportuoti failą iš projekto-šaltinio naudojantis {{ns:special}}:Export priemone, išsaugokite jį savo diske ir įkelkite jį čia.', +'importtext' => 'Prašome eksportuoti iš projekto-šaltinio failo, naudojant [[Specialus: Export | Export.]]! N! Išsaugokite jį savo kompiuteryje ir įkelkite jį čia.', 'importstart' => 'Imporuojami puslapiai...', 'import-revision-count' => '$1 {{PLURAL:$1|versija|versijos|versijų}}', 'importnopages' => 'Nėra puslapių importavimui.', +'imported-log-entries' => 'Importuota $1 {{PLURAL:$1|prisijungimo įrašas|prisijungimo įrašai}}.', 'importfailed' => 'Importavimas nepavyko: $1', 'importunknownsource' => 'Nežinomas importo šaltinio tipas', 'importcantopen' => 'Nepavyksta atverti importo failo', @@ -2620,6 +2685,8 @@ Visi tarpprojektiniai importo veiksmai yra registruojami [[Special:Log/import|i 'tooltip-rollback' => 'Atšaukti atmestus šio puslapio pakeitimus į paskutinę versiją vienu spustelėjimu', 'tooltip-undo' => '„Anuliuoti“ atmeta šį keitimą ir atveria ankstesnės versijos redagavimo formą. Leidžia pridėti atmetimo priežastį komentaruose', +'tooltip-preferences-save' => 'Išsaugoti nustatymus', +'tooltip-summary' => 'Įvesti trumpą santrauką', # Stylesheets 'common.css' => '/** Čia įdėtas CSS bus taikomas visoms išvaizdoms */', @@ -2732,14 +2799,17 @@ Jį paleidus jūsų sistema gali būti pažeista.", 'imagemaxsize' => "Riboti paveikslėlių dydį:
    ''(failų aprašymo puslapiuose)''", 'thumbsize' => 'Sumažintų paveikslėlių dydis:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|puslapis|puslapiai|puslapių}}', -'file-info' => '(failo dydis: $1, MIME tipas: $2)', -'file-info-size' => '($1 × $2 taškų, failo dydis: $3, MIME tipas: $4)', +'file-info' => 'failo dydis: $1, MIME tipas: $2', +'file-info-size' => '$1 × $2 taškų, failo dydis: $3, MIME tipas: $4', 'file-nohires' => 'Geresnė raiška negalima.', -'svg-long-desc' => '(SVG failas, formaliai $1 × $2 taškų, failo dydis: $3)', +'svg-long-desc' => 'SVG failas, formaliai $1 × $2 taškų, failo dydis: $3', 'show-big-image' => 'Pilna raiška', 'show-big-image-thumb' => 'Šios peržiūros dydis: $1 × $2 taškų', 'file-info-gif-looped' => 'ciklinis', 'file-info-gif-frames' => '$1 {{PLURAL:$1|kadras|kadrai|kadrų}}', +'file-info-png-looped' => 'ciklinis', +'file-info-png-repeat' => 'grota $1 {{PLURAL:$1|kartą|kartus|kartų}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|kadras|kadrai|kadrų}}', # Special:NewFiles 'newimages' => 'Naujausių failų galerija', @@ -2810,8 +2880,8 @@ Visos kitos nuorodos toje pačioje eilutėje yra laikomos išimtimis, t. y. pusl 'exif-colorspace' => 'Spalvų pristatymas', 'exif-componentsconfiguration' => 'kiekvieno komponento reikšmė', 'exif-compressedbitsperpixel' => 'Paveikslėlio suspaudimo režimas', -'exif-pixelydimension' => 'Leistinas paveikslėlio plotis', -'exif-pixelxdimension' => 'Leistinas paveikslėlio aukštis', +'exif-pixelydimension' => 'Paveikslėlio plotis', +'exif-pixelxdimension' => 'Vaizdo aukštis', 'exif-makernote' => 'Gamintojo pastabos', 'exif-usercomment' => 'Naudotojo komentarai', 'exif-relatedsoundfile' => 'Susijusi garso byla', @@ -2827,9 +2897,9 @@ Visos kitos nuorodos toje pačioje eilutėje yra laikomos išimtimis, t. y. pusl 'exif-spectralsensitivity' => 'Spektrinis jautrumas', 'exif-isospeedratings' => 'ISO greitis', 'exif-oecf' => 'Optoelektronikos konversijos daugiklis', -'exif-shutterspeedvalue' => 'Užrakto greitis', -'exif-aperturevalue' => 'Diafragma', -'exif-brightnessvalue' => 'Šviesumas', +'exif-shutterspeedvalue' => 'APEX užrakto greičio', +'exif-aperturevalue' => 'APEX diafragma', +'exif-brightnessvalue' => 'APEX ryškumas', 'exif-exposurebiasvalue' => 'Išlaikymo paklaida', 'exif-maxaperturevalue' => 'Mažiausias lešio F numeris', 'exif-subjectdistance' => 'Objekto atstumas', @@ -3053,26 +3123,26 @@ Visos kitos nuorodos toje pačioje eilutėje yra laikomos išimtimis, t. y. pusl 'limitall' => 'visi', # E-mail address confirmation -'confirmemail' => 'Patvirtinkite el. pašto adresą', -'confirmemail_noemail' => 'Jūs neturite nurodę teisingo el. pašto adreso [[Special:Preferences|savo nustatymuose]].', -'confirmemail_text' => 'Šiame projekte būtina patvirtinti el. pašto adresą prieš naudojant el. pašto funkcijas. Spustelkite žemiau esantį mygtuką, +'confirmemail' => 'Patvirtinkite el. pašto adresą', +'confirmemail_noemail' => 'Jūs neturite nurodę teisingo el. pašto adreso [[Special:Preferences|savo nustatymuose]].', +'confirmemail_text' => 'Šiame projekte būtina patvirtinti el. pašto adresą prieš naudojant el. pašto funkcijas. Spustelkite žemiau esantį mygtuką, kad jūsų el. pašto adresu būtų išsiųstas patvirtinimo kodas. Laiške bus atsiųsta nuoroda su kodu, kuria nuėjus, el. pašto adresas bus patvirtintas.', -'confirmemail_pending' => 'Patvirtinimo kodas jums jau nusiųstas; jei neseniai sukūrėte savo paskyrą, jūs turėtumėte palaukti jo dar kelias minutes prieš prašydami naujo kodo.', -'confirmemail_send' => 'Išsiųsti patvirtinimo kodą', -'confirmemail_sent' => 'Patvirtinimo laiškas išsiųstas.', -'confirmemail_oncreate' => 'Patvirtinimo kodas buvo išsiųstas jūsų el. pašto adresu. +'confirmemail_pending' => 'Patvirtinimo kodas jums jau nusiųstas; jei neseniai sukūrėte savo paskyrą, jūs turėtumėte palaukti jo dar kelias minutes prieš prašydami naujo kodo.', +'confirmemail_send' => 'Išsiųsti patvirtinimo kodą', +'confirmemail_sent' => 'Patvirtinimo laiškas išsiųstas.', +'confirmemail_oncreate' => 'Patvirtinimo kodas buvo išsiųstas jūsų el. pašto adresu. Šis kodas nėra būtinas, kad prisijungtumėte, bet jums reikės jį duoti prieš įjungiant el. pašto paslaugas projekte.', -'confirmemail_sendfailed' => '{{SITENAME}} neišsiuntė patvirtinamojo laiško. Patikrinkite, ar adrese nėra klaidingų simbolių. +'confirmemail_sendfailed' => '{{SITENAME}} neišsiuntė patvirtinamojo laiško. Patikrinkite, ar adrese nėra klaidingų simbolių. Pašto tarnyba atsakė: $1', -'confirmemail_invalid' => 'Neteisingas patvirtinimo kodas. Kodo galiojimas gali būti jau pasibaigęs.', -'confirmemail_needlogin' => 'Jums reikia $1, kad patvirtintumėte savo el. pašto adresą.', -'confirmemail_success' => 'Jūsų el. pašto adresas patvirtintas. Dabar galite prisijungti ir mėgautis projektu.', -'confirmemail_loggedin' => 'Jūsų el. pašto adresas patvirtintas.', -'confirmemail_error' => 'Patvirtinimo metu įvyko neatpažinta klaida.', -'confirmemail_subject' => '{{SITENAME}} el. pašto adreso patvirtinimas', -'confirmemail_body' => 'Kažkas, tikriausiai jūs IP adresu $1, užregistravo +'confirmemail_invalid' => 'Neteisingas patvirtinimo kodas. Kodo galiojimas gali būti jau pasibaigęs.', +'confirmemail_needlogin' => 'Jums reikia $1, kad patvirtintumėte savo el. pašto adresą.', +'confirmemail_success' => 'Jūsų el. pašto adresas patvirtintas. Dabar galite prisijungti ir mėgautis projektu.', +'confirmemail_loggedin' => 'Jūsų el. pašto adresas patvirtintas.', +'confirmemail_error' => 'Patvirtinimo metu įvyko neatpažinta klaida.', +'confirmemail_subject' => '{{SITENAME}} el. pašto adreso patvirtinimas', +'confirmemail_body' => 'Kažkas, tikriausiai jūs IP adresu $1, užregistravo paskyrą „$2“ susietą su šiuo el. pašto adresu projekte {{SITENAME}}. Kad patvirtintumėte, kad ši dėžutė tikrai priklauso jums, ir aktyvuotumėte @@ -3086,8 +3156,22 @@ kad atšauktumėte el. pašto adreso patvirtinimą: $5 Patvirtinimo kodas baigs galioti $4.', -'confirmemail_invalidated' => 'El. pašto adreso patvirtinimas atšauktas', -'invalidateemail' => 'El. pašto patvirtinimo atšaukimas', +'confirmemail_body_changed' => 'Kažkas, tikriausiai jūs IP adresu $1, projekte {{SITENAME}} +pakeitė paskyros „$2“ el. pašto adresą. + +Kad patvirtintumėte, kad ši dėžutė tikrai priklauso jums, ir vėl aktyvuotumėte +el. pašto paslaugas projekte {{SITENAME}}, atverkite šią nuorodą savo naršyklėje: + +$3 + +Jei paskyra jums *nepriklauso*, eikite šia nuoroda, +kad atšauktumėte el. pašto adreso patvirtinimą: + +$5 + +Patvirtinimo kodas baigs galioti $4.', +'confirmemail_invalidated' => 'El. pašto adreso patvirtinimas atšauktas', +'invalidateemail' => 'El. pašto patvirtinimo atšaukimas', # Scary transclusion 'scarytranscludedisabled' => '[Tarpprojektinis įterpimas yra išjungtas]', @@ -3127,6 +3211,7 @@ Prašome patvirtinti, kad tikrai norite iš naujo sukurti puslapį.", 'table_pager_first' => 'Pirmas puslapis', 'table_pager_last' => 'Paskutinis puslapis', 'table_pager_limit' => 'Rodyti po $1 puslapyje', +'table_pager_limit_label' => 'Elementai puslapyje:', 'table_pager_limit_submit' => 'Rodyti', 'table_pager_empty' => 'Jokių rezultatų', @@ -3199,6 +3284,13 @@ Jūs taip pat galite [[Special:Watchlist/edit|naudoti standartinį redaktorių]] 'version-hook-subscribedby' => 'Užsakyta', 'version-version' => '(Versija $1)', 'version-license' => 'Licencija', +'version-poweredby-credits' => "Šis projektas naudoja '''[http://www.mediawiki.org/ MediaWiki]''', autorystės teisės © 2001-$1 $2.", +'version-poweredby-others' => 'kiti', +'version-license-info' => 'MediaWiki yra nemokama programinė įranga; galite ją platinti ir/arba modifikuoti pagal GNU General Public License, kurią publikuoja Free Software Foundation; taikoma 2-oji licenzijos versija arba (Jūsų pasirinkimu) bet kuri vėlesnė versija. + +MediaWiki yra platinama su viltimi, kad ji bus naudinga, bet BE JOKIOS GARANTIJOS; be jokios numanomos PARDAVIMO arba TINKAMUMO TAM TIKRAM TIKSLUI garantijos. Daugiau informacijos galite sužinoti GNU General Public License. + +Jūs turėjote gauti [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General Public License kopiją] kartu su šia programa, jei ne, rašykite Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, JAV arba [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html perskaitykite ją internete].', 'version-software' => 'Įdiegta programinė įranga', 'version-software-product' => 'Produktas', 'version-software-version' => 'Versija', @@ -3268,6 +3360,15 @@ Jūs taip pat galite [[Special:Watchlist/edit|naudoti standartinį redaktorių]] 'tags-edit' => 'taisyti', 'tags-hitcount' => '$1 {{PLURAL:$1|pakeitimas|pakeitimai|pakeitimų}}', +# Special:ComparePages +'comparepages' => 'Palyginti puslapius', +'compare-selector' => 'Palyginti puslapio keitimus', +'compare-page1' => 'Puslapis 1', +'compare-page2' => 'Puslapis 2', +'compare-rev1' => 'Pirma versija', +'compare-rev2' => 'Antra versija', +'compare-submit' => 'Palyginti', + # Database error messages 'dberr-header' => 'Ši svetainė turi problemų.', 'dberr-problems' => 'Atsiprašome! Svetainei iškilo techninių problemų.', @@ -3284,8 +3385,13 @@ Jūs taip pat galite [[Special:Watchlist/edit|naudoti standartinį redaktorių]] 'htmlform-float-invalid' => 'Nurodyta reikšmė nėra skaičius.', 'htmlform-int-toolow' => 'Reikšmė, kurią nurodėte, yra mažesnė nei mažiausia leistina $1', 'htmlform-int-toohigh' => 'Reikšmė, kurią nurodėte, yra didesnė nei didžiausia leistina $1', +'htmlform-required' => 'Ši vertė būtina', 'htmlform-submit' => 'Siųsti', 'htmlform-reset' => 'Atšaukti pakeitimus', 'htmlform-selectorother-other' => 'Kita', +# SQLite database support +'sqlite-has-fts' => '$1 su visatekstės paieškos palaikymu', +'sqlite-no-fts' => '$1 be visatekstės paieškos palaikymo', + ); diff --git a/languages/messages/MessagesLtg.php b/languages/messages/MessagesLtg.php index 3cab403f..5c7583f4 100644 --- a/languages/messages/MessagesLtg.php +++ b/languages/messages/MessagesLtg.php @@ -12,6 +12,25 @@ * @author Jureits */ +$namespaceNames = array( + NS_MEDIA => 'Medeja', + NS_SPECIAL => 'Seviškuo', + NS_TALK => 'Sprīža', + NS_USER => 'Lītuotuojs', + NS_USER_TALK => 'Sprīža_ap_lītuotuoju', + NS_PROJECT_TALK => 'Sprīža_ap_{{GRAMMAR:accusative|$1}}', + NS_FILE => 'Fails', + NS_FILE_TALK => 'Sprīža_ap_failu', + NS_MEDIAWIKI => 'MediaWiki', + NS_MEDIAWIKI_TALK => 'Sprīža_ap_MediaWiki', + NS_TEMPLATE => 'Taiss', + NS_TEMPLATE_TALK => 'Sprīža_ap_taisu', + NS_HELP => 'Paleigs', + NS_HELP_TALK => 'Sprīža_ap_paleigu', + NS_CATEGORY => 'Kategoreja', + NS_CATEGORY_TALK => 'Sprīža_ap_kategoreju', +); + $fallback = 'lv'; $messages = array( @@ -107,23 +126,16 @@ $messages = array( 'faqpage' => 'Project:BUV', # Vector skin -'vector-action-addsection' => 'Dalikt padaļu', -'vector-action-delete' => 'Iztreit', -'vector-action-move' => 'Puorceļt', -'vector-action-protect' => 'Apsorguot', -'vector-action-unprotect' => 'Nūjimt apsardzeibu', -'vector-namespace-category' => 'Kategoreja', -'vector-namespace-image' => 'Fails', -'vector-namespace-mediawiki' => 'Viestejums', -'vector-namespace-project' => 'Projekta puslopa', -'vector-namespace-special' => 'Specialuo puslopa', -'vector-namespace-talk' => 'Sprīža', -'vector-namespace-template' => 'Taiss', -'vector-view-edit' => 'Pataiseit', -'vector-view-history' => 'Viesture', -'vector-view-view' => 'Vērtīs', -'namespaces' => 'Vuordu pluoti', -'variants' => 'Varianti', +'vector-action-addsection' => 'Dalikt padaļu', +'vector-action-delete' => 'Iztreit', +'vector-action-move' => 'Puorceļt', +'vector-action-protect' => 'Apsorguot', +'vector-action-unprotect' => 'Nūjimt apsardzeibu', +'vector-view-edit' => 'Pataiseit', +'vector-view-history' => 'Viesture', +'vector-view-view' => 'Vērtīs', +'namespaces' => 'Vuordu pluoti', +'variants' => 'Varianti', 'errorpagetitle' => 'Klaida', 'returnto' => 'Grīztīs da puslopys $1.', @@ -238,7 +250,7 @@ Par to var ziņuot [[Special:ListUsers/sysop|kaidam administratoram]], nūruodū # Login and logout pages 'yourname' => 'Slāgvuords:', 'yourpassword' => 'Paroļs:', -'remembermypassword' => 'Atguoduot munu paroli iz ituo datora', +'remembermypassword' => 'Atguoduot muni iz ituo datora (na vaira kai $1 {{PLURAL:$1|dīnu|dīnom|dīnom}})', 'login' => 'Dasaslāgt', 'nav-login-createaccount' => 'Dasaslāgt / sataiseit jaunu lītuotuoju', 'userlogin' => 'Dasaslāgt / sataiseit jaunu lītuotuoju', @@ -248,6 +260,7 @@ Par to var ziņuot [[Special:ListUsers/sysop|kaidam administratoram]], nūruodū 'nologinlink' => 'Registrētīs', 'createaccount' => 'Sataiseit jaunu lītuotuoju', 'gotaccountlink' => 'Dasaslāgt', +'createaccountreason' => 'Īmesle:', 'mailmypassword' => 'Atsyuteit maņ jaunu paroli', 'loginlanguagelabel' => 'Volūda: $1', @@ -573,7 +586,6 @@ Lopys, kas ir tovā [[Special:Watchlist|puorraugamūs rokstu sarokstā]] ir '''r # Watchlist 'watchlist' => 'Muns davēris saroksts', 'mywatchlist' => 'Muns davēris saroksts', -'watchlistfor' => "(deļ '''$1''')", 'addedwatch' => 'Davīnuots puorraugamū sarokstam.', 'addedwatchtext' => "Lopa \"[[:\$1]]\" ir davīnuota [[Special:Watchlist|tevis puorraugamajom lopom]], kur tiks paruodeitys izmainis, kas izdareitys itymā lopā voi ituos lopys sarunu lopā, kai ari itei lopa tiks īzeimāta '''pusrasna''' [[Special:RecentChanges|pādejūs izmaiņu lopā]], lai itū byutu vīgluok pamaneit. @@ -813,9 +825,9 @@ Tys ļaun davīnuot pamatuojumu kūpsavylkumā.', 'nextdiff' => 'Jaunuokuo verseja →', # Media information -'file-info-size' => '($1 × $2 pikseli, faila izmārs: $3, MIME tips: $4)', +'file-info-size' => '$1 × $2 pikseli, faila izmārs: $3, MIME tips: $4', 'file-nohires' => 'Augstuoka izškirtspieja nav pīejama.', -'svg-long-desc' => '(SVG fails, definātais lelums $1 × $2 pikseli, faila lelums: $3)', +'svg-long-desc' => 'SVG fails, definātais lelums $1 × $2 pikseli, faila lelums: $3', 'show-big-image' => 'Pylnā lelumā', 'show-big-image-thumb' => 'Ituo pyrmsskota lelums: $1 × $2 pikseli', @@ -863,6 +875,7 @@ Puorejī lauki, piec nūklusiejuma, byus nūglobuoti. 'version-specialpages' => 'Specialuos puslopys', 'version-version' => '(Verseja $1)', 'version-license' => 'Liceņceja', +'version-poweredby-others' => 'cyti', 'version-software-product' => 'Produkts', 'version-software-version' => 'Verseja', diff --git a/languages/messages/MessagesLv.php b/languages/messages/MessagesLv.php index 9026f62a..43d870d7 100644 --- a/languages/messages/MessagesLv.php +++ b/languages/messages/MessagesLv.php @@ -43,7 +43,7 @@ $namespaceNames = array( NS_CATEGORY => 'Kategorija', NS_CATEGORY_TALK => 'Kategorijas_diskusija', ); -$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' ); +$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' ); $messages = array( # User preference toggles @@ -61,8 +61,7 @@ $messages = array( 'tog-editsection' => 'Rādīt sadaļām izmainīšanas saiti "[labot]"', 'tog-editsectiononrightclick' => "Atvērt sadaļas rediģēšanas lapu, uzklikšķinot ar labo peles pogu uz sadaļas virsraksta (izmanto ''JavaScript'')", 'tog-showtoc' => 'Parādīt satura rādītāju (lapām, kurās ir vairāk par 3 virsrakstiem)', -'tog-rememberpassword' => 'Atcerēties paroli pēc pārlūka aizvēršanas', -'tog-editwidth' => 'Parādīt izmainīšanas logu visa ekrāna platumā', +'tog-rememberpassword' => 'Atcerēties manu lietotājvārdu pēc pārlūka aizvēršanas (ne vairāk kā $1 {{PLURAL:$1|diena|dienas}}).', 'tog-watchcreations' => 'Pievienot manis radītās lapas uzraugāmo lapu sarakstam', 'tog-watchdefault' => 'Pievienot manis izmainītās lapas uzraugāmo lapu sarakstam', 'tog-watchmoves' => 'Pievienot manis pārvietotās lapas uzraugāmo lapu sarakstam', @@ -206,31 +205,21 @@ $messages = array( 'faqpage' => 'Project:BUJ', # Vector skin -'vector-action-addsection' => 'Jauna sadaļa', -'vector-action-delete' => 'Dzēst', -'vector-action-move' => 'Pārvietot', -'vector-action-protect' => 'Aizsargāt', -'vector-action-undelete' => 'Atjaunot', -'vector-action-unprotect' => 'Neaizsargāt', -'vector-namespace-category' => 'Kategorija', -'vector-namespace-help' => 'Palīdzības lapa', -'vector-namespace-image' => 'Attēls', -'vector-namespace-main' => 'Raksts', -'vector-namespace-media' => 'Multivides lapa', -'vector-namespace-mediawiki' => 'Paziņojums', -'vector-namespace-project' => 'Projekta lapa', -'vector-namespace-special' => 'Īpašā lapa', -'vector-namespace-talk' => 'Diskusija', -'vector-namespace-template' => 'Veidne', -'vector-namespace-user' => 'Lietotāja lapa', -'vector-view-create' => 'Izveidot', -'vector-view-edit' => 'Rediģēt', -'vector-view-history' => 'Hronoloģija', -'vector-view-view' => 'Skatīt', -'vector-view-viewsource' => 'Aplūkot kodu', -'actions' => 'Darbības', -'namespaces' => 'Vārdtelpas', -'variants' => 'Varianti', +'vector-action-addsection' => 'Jauna sadaļa', +'vector-action-delete' => 'Dzēst', +'vector-action-move' => 'Pārvietot', +'vector-action-protect' => 'Aizsargāt', +'vector-action-undelete' => 'Atjaunot', +'vector-action-unprotect' => 'Neaizsargāt', +'vector-simplesearch-preference' => 'Ieslēgt uzlabotās meklēšanas piedāvājumus (tikai Vector apdarē)', +'vector-view-create' => 'Izveidot', +'vector-view-edit' => 'Rediģēt', +'vector-view-history' => 'Hronoloģija', +'vector-view-view' => 'Skatīt', +'vector-view-viewsource' => 'Aplūkot kodu', +'actions' => 'Darbības', +'namespaces' => 'Vārdtelpas', +'variants' => 'Varianti', 'errorpagetitle' => 'Kļūda', 'returnto' => 'Atgriezties: $1.', @@ -291,6 +280,7 @@ Pārāk daudz lietotāju mēģina apskatīt šo lapu. Lūdzu, brīdi uzgaidiet un mēģiniet šo lapu apskatīties vēlreiz. $1', +'pool-errorunknown' => 'Nezināma kļūda', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Par {{grammar:akuzatīvs|{{SITENAME}}}}', @@ -446,7 +436,7 @@ Tavs lietotāja konts ir izveidots. Neaizmirsti, ka ir iespējams mainīt [[Spec 'yourname' => 'Tavs lietotājvārds', 'yourpassword' => 'Tava parole:', 'yourpasswordagain' => 'Atkārto paroli', -'remembermypassword' => 'Atcerēties manu paroli pēc pārlūka aizvēršanas.', +'remembermypassword' => 'Atcerēties pēc pārlūka aizvēršanas (spēkā ne vairāk kā $1 {{PLURAL:$1|diena|dienas}}).', 'yourdomainname' => 'Tavs domēns', 'externaldberror' => 'Notikusi vai nu ārējās autentifikācijas datubāzes kļūda, vai arī tev nav atļauts izmainīt savu ārējo kontu.', 'login' => 'Ieiet', @@ -463,6 +453,7 @@ Tavs lietotāja konts ir izveidots. Neaizmirsti, ka ir iespējams mainīt [[Spec 'gotaccount' => "Tev jau ir lietotājvārds? '''$1'''!", 'gotaccountlink' => 'Dodies iekšā', 'createaccountmail' => 'pa e-pastu', +'createaccountreason' => 'Iemesls:', 'badretype' => 'Tevis ievadītās paroles nesakrīt.', 'userexists' => 'Šāds lietotāja vārds jau eksistē. Izvēlies citu vārdu.', 'loginerror' => 'Neveiksmīga ieiešana', @@ -513,6 +504,9 @@ Tādēļ šobrīd no šīs IP adreses vairs nevar izveidot jaunus kontus.', Lūdzu uzgaidi pirms mēģini vēlreiz.', 'loginlanguagelabel' => 'Valoda: $1', +# E-mail sending +'php-mail-error-unknown' => 'Nezināma kļūda PHP mail() funkcijā', + # Password reset dialog 'resetpass' => 'Mainīt paroli', 'resetpass_header' => 'Mainīt konta paroli', @@ -563,10 +557,11 @@ Tu jau esi veiksmīgi nomainījis savu galveno paroli, vai arī esi pieprasījis 'showlivepreview' => 'Tūlītējs pirmskats', 'showdiff' => 'Rādīt izmaiņas', 'anoneditwarning' => "'''Uzmanību:''' tu neesi iegājis. Lapas hronoloģijā tiks ierakstīta tava IP adrese.", +'anonpreviewwarning' => "''Tu neesi ienācis. Saglabājot lapu, Tava IP adrese tiks ierakstīta šīs lapas hronoloģijā.''", 'missingsummary' => "'''Atgādinājums''': Tu neesi norādījis izmaiņu kopsavilkumu. Vēlreiz klikšķinot uz \"Saglabāt lapu\", Tavas izmaiņas tiks saglabātas bez kopsavilkuma.", 'missingcommenttext' => 'Lūdzu, ievadi tekstu zemāk redzamajā logā!', 'missingcommentheader' => "'''Atgādinājums:''' Tu šim komentāram neesi norādījis virsrakstu/tematu. -Ja tu vēlreiz uzspiedīsi uz Saglabāt, tavas izmaiņas tiks saglabātas bez tā virsraksta.", +Ja tu vēlreiz spiedīsi uz \"{{int:savearticle}}\", tavas izmaiņas tiks saglabātas bez virsraksta.", 'summary-preview' => 'Kopsavilkuma pirmskats:', 'subject-preview' => 'Kopsavilkuma/virsraksta pirmskats:', 'blockedtitle' => 'Lietotājs ir bloķēts.', @@ -674,7 +669,6 @@ Izvēloties \"Saglabāt lapu\", Tu apliecini, ka šo rakstu esi rakstījis vai p Tu apliecini, ka šo rakstu esi rakstījis vai papildinājis pats vai izmantojis informāciju no darba, ko neaizsargā autortiesības, vai tamlīdzīga brīvi pieejama resursa (sīkāk skatīt $1). '''BEZ ATĻAUJAS NEPIEVIENO DARBU, KO AIZSARGĀ AUTORTIESĪBAS!'''", -'longpagewarning' => "'''Šī lapa ir $1 kilobaitus liela. Tas var būt vairāk par lapas optimālo izmēru. Lūdzu apsver iespēju sašķelt to mazākās sekcijās.'''", 'longpageerror' => "'''Kļūda: Teksts, kuru tu mēģināji saglabāt, ir $1 kilobaitus garš, kas ir vairāk nekā pieļaujamie $2 kilobaiti. Tas nevar tikt saglabāts.'''", 'readonlywarning' => "'''Brīdinājums: Datubāze ir slēgta apkopei, tāpēc tu tagad nevarēsi saglabāt veiktās izmaiņas. @@ -719,7 +713,9 @@ Izskatās, ka lapa ir dzēsta.', Tā jau eksistē.', # Parser/template warnings -'parser-template-loop-warning' => 'Veidne ir ievietota tādā pašā veidnē: [[$1]]', +'expensive-parserfunction-category' => 'Lapas ar pārāk daudz laikietilpīgiem apstrādes funkciju izsaukumiem', +'post-expand-template-inclusion-category' => 'Lapas, kurām pārsniegts iekļauto veidņu apjoms', +'parser-template-loop-warning' => 'Veidne ir ievietota tādā pašā veidnē: [[$1]]', # "Undo" feature 'undo-success' => 'Šo izmaiņu ir iespējams atcelt. @@ -812,6 +808,8 @@ $1", 'logdelete-failure' => "'''Reģistra redzamību nevar uzstādīt:''' $1", 'revdel-restore' => 'mainīt redzamību', +'revdel-restore-deleted' => 'dzēstās versijas', +'revdel-restore-visible' => 'redzamās versijas', 'pagehist' => 'Lapas vēsture', 'deletedhist' => 'Vēsture dzēsta', 'revdelete-content' => 'saturs', @@ -857,11 +855,12 @@ $1", # Diffs 'history-title' => '"$1" versiju hronoloģija', 'difference' => '(Atšķirības starp versijām)', +'difference-multipage' => '(Atšķirības starp lapām)', 'lineno' => '$1. rindiņa:', 'compareselectedversions' => 'Salīdzināt izvēlētās versijas', 'showhideselectedversions' => 'Rādīt/slēpt izvēlētās versijas', 'editundo' => 'atcelt', -'diff-multi' => '({{PLURAL:$1|Viena starpversija nav parādīta|$1 starpversijas nav parādītas}}.)', +'diff-multi' => '({{PLURAL:$1|Viena starpversija|$1 starpversijas}} no {{PLURAL:$2|viena lietotāja|$2 lietotājiem}} nav parādīta)', # Search results 'searchresults' => 'Meklēšanas rezultāti', @@ -968,6 +967,7 @@ Pagaidām vari meklēt, izmantojot Google vai Yahoo. 'resultsperpage' => 'Lappusē parādāmo rezultātu skaits', 'contextlines' => 'Cik rindiņas parādīt katram atrastajam rezultātam', 'contextchars' => 'Konteksta simbolu skaits vienā rindiņā', +'stub-threshold-disabled' => 'Atslēgts', 'recentchangesdays' => 'Dienu skaits, kuru rādīt pēdējajās izmaiņās:', 'recentchangesdays-max' => 'Ne vairāk kā $1 {{PLURAL:$1|diena|dienas}}', 'recentchangescount' => 'Izmaiņu skaits, kuru rāda pēc noklusējuma:', @@ -1001,6 +1001,7 @@ Ja vēlies, tu vari izmantot šo nejauši uzģenerēto kodu: $1', 'prefs-files' => 'Attēli', 'prefs-custom-css' => 'Personīgais CSS', 'prefs-custom-js' => 'Personīgais JS', +'prefs-common-css-js' => 'Koplietojams CSS/JavaScript visās apdarēs:', 'prefs-emailconfirm-label' => 'E-pasta statuss:', 'prefs-textboxsize' => 'Rediģēšanas loga izmērs', 'youremail' => 'Tava e-pasta adrese:', @@ -1036,9 +1037,15 @@ Ja tu izvēlies to norādīt, tas tiks izmantots, lai identificētu tavu darbu ( 'prefs-advancedrendering' => 'Papildus uzstādījumi', 'prefs-advancedsearchoptions' => 'Papildus uzstādījumi', 'prefs-advancedwatchlist' => 'Papildus uzstādījumi', -'prefs-display' => 'Pamatuzstādījumi', +'prefs-displayrc' => 'Pamatuzstādījumi', +'prefs-displaysearchoptions' => 'Pamatuzstādījumi', +'prefs-displaywatchlist' => 'Pamatuzstādījumi', 'prefs-diffs' => 'Izmaiņas', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'E-pasta adrese šķiet derīga', +'email-address-validity-invalid' => 'Ievadi derīgu e-pasta adresi', + # User rights 'userrights' => 'Lietotāju tiesību pārvaldība', 'userrights-lookup-user' => 'Pārvaldīt lietotāja grupas', @@ -1114,6 +1121,7 @@ Ja tu izvēlies to norādīt, tas tiks izmantots, lai identificētu tavu darbu ( 'right-hideuser' => 'Bloķēt lietotājvārdu, slēpjot to no citiem lietotājiem', 'right-ipblock-exempt' => 'Apiet IP bloķēšanu, automātisku bloķēšanu un IP apgabalu bloķēšanu', 'right-proxyunbannable' => "Apiet ''proxy'' automātiskos blokus", +'right-unblockself' => 'Atbloķēt sevi', 'right-protect' => 'Izmainīt aizsargātās lapas un to aizsardzības līmeni', 'right-editprotected' => 'Labot aizsargātās lapas (bez kaskādes aizsardzības)', 'right-editinterface' => 'Izmainīt lietotāja interfeisu', @@ -1183,14 +1191,9 @@ Ja tu izvēlies to norādīt, tas tiks izmantots, lai identificētu tavu darbu ( 'recentchanges-legend' => 'Pēdējo izmaiņu iespējas', 'recentchangestext' => 'Šajā lapā ir šitajā viki izdarītās pēdējās izmaiņas.', 'recentchanges-feed-description' => 'Sekojiet līdzi jaunākajām izmaiņām vikijā izmantojot šo barotni.', -'recentchanges-label-legend' => 'Apzīmējumu skaidrojums: $1.', -'recentchanges-legend-newpage' => '$1 - jauna lapa', 'recentchanges-label-newpage' => 'Šī ir jaunizveidota lapa', -'recentchanges-legend-minor' => '$1 - maznozīmīga izmaiņa', 'recentchanges-label-minor' => 'Šī ir maznozīmīga izmaiņa', -'recentchanges-legend-bot' => '$1 - bota veikta izmaiņa', 'recentchanges-label-bot' => 'Šī ir bota veikta izmaiņa', -'recentchanges-legend-unpatrolled' => '$1 - nepatrulēts labojums', 'recentchanges-label-unpatrolled' => 'Šis labojums vēl nav pārbaudīts', 'rcnote' => 'Šobrīd ir {{PLURAL:$1|redzama pēdējā $1 izmaiņa, kas izdarīta|redzamas pēdējās $1 izmaiņas, kas izdarītas}} {{PLURAL:$2|pēdējā|pēdējās}} $2 {{PLURAL:$2|dienā|dienās}} (līdz $4, $5).', 'rcnotefrom' => "Šobrīd redzamas izmaiņas kopš '''$2''' (parādītas ne vairāk par '''$1''').", @@ -1237,6 +1240,9 @@ Lapas, kas ir tavā [[Special:Watchlist|uzraugāmo rakstu sarakstā]] ir '''trek 'upload_directory_missing' => 'Augšupielādes direktorijs ($1) ir pazudis, un to tīmekļa serveris nevar izveidot.', 'upload_directory_read_only' => 'Augšupielādes direktoriju ($1) tīmekļa serveris nevar labot.', 'uploaderror' => 'Augšupielādes kļūda', +'upload-recreate-warning' => "'''Brīdinājums: Fails ar šādu nosaukumu ir dzēsts vai pārvietots.''' + + Dzēšanas un pārvietošanas reģistri šai lapai ir uzskaitīti šeit:", 'uploadtext' => "Pirms tu kaut ko augšupielādē, noteikti izlasi un ievēro [[Project:Attēlu izmantošanas noteikumi|attēlu izmantošanas noteikumus]]. Lai aplūkotu vai meklētu agrāk augšuplādētus attēlus, @@ -1287,6 +1293,16 @@ Pārskatāmāka versija ir pieejama [[Special:NewFiles|jauno attēlu galerijā]] 'filetype-unwanted-type' => "'''\".\$1\"''' ir nevēlams failu tips. {{PLURAL:\$3|Ieteicamais faila tips|Ieteicamie failu tipi}} ir \$2.", 'filetype-banned-type' => "'''\".\$1\"''' nav atļautais failu tips. {{PLURAL:\$3|Atļautais faila tips|Atļautie failu tipi}} ir \$2.", 'filetype-missing' => 'Failam nav paplašinājuma (piem. tāda kā ".jpg").', +'empty-file' => 'Fails, ko Tu iesniedzi, bija tukšs.', +'file-too-large' => 'Fails, ko Tu iesniedzi, bija pārāk liels.', +'filename-tooshort' => 'Faila nosaukums ir pārāk īss.', +'filetype-banned' => 'Šis failu tips ir aizliegts.', +'verification-error' => 'Šis fails neizturēja failu pārbaudi.', +'illegal-filename' => 'Faila nosaukums nav atļauts.', +'overwrite' => 'Pārrakstīt jau esošu failu nav atļauts.', +'unknown-error' => 'Nezināma kļūda.', +'tmp-create-error' => 'Neizdevās izveidot pagaidu failu.', +'tmp-write-error' => 'Kļūda veidojot pagaidu failu.', 'large-file' => 'Ieteicams, lai faili nebūtu lielāki par $1; šī faila izmērs ir $2.', 'largefileserver' => 'Šis fails ir lielāks nekā serveris ņem pretī.', @@ -1299,13 +1315,14 @@ Ja tev ir šis pats attēls pilnā izmērā, augšuplādē to, ja nav, tad nomai 'fileexists-forbidden' => 'Fails ar šādu nosaukumu jau eksistē un to nevar aizvietot ar jaunu. Ja tu joprojām gribi augšuplādēt šo failu, tad mēģini vēlreiz, ar citu faila vārdu. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Fails ir kopija {{PLURAL:$1|šim failam|šiem failiem}}:', -'successfulupload' => 'Augšupielāde veiksmīga', 'uploadwarning' => 'Augšupielādes brīdinājums', 'uploadwarning-text' => 'Lūdzu, pārveido zemāk esošo faila aprakstu un mēģini vēlreiz.', 'savefile' => 'Saglabāt failu', 'uploadedimage' => 'augšupielādēja "[[$1]]"', 'overwroteimage' => 'augšupielādēta jauna "[[$1]]" versija', 'uploaddisabled' => 'Augšupielāde atslēgta', +'copyuploaddisabled' => 'URL augšupielādes nav atļautas.', +'uploadfromurl-queued' => 'Tava augšupielāde tika pievienota rindā.', 'uploaddisabledtext' => 'Failu augšupielāde ir atslēgta.', 'php-uploaddisabledtext' => 'Failu augšupielāde ir atslēgta PHP. Lūdzu, pārbaudi file_uploads uzstādījumu.', @@ -1327,6 +1344,10 @@ Apdomā labi, vai tiešām ir lietderīgi turpināt šī faila augšuplādi. Te var apskatīties dzēšanas reģistru, lai noskaidrotu kāpēc šo failu toreiz izdzēsa:", 'filename-bad-prefix' => "Faila vārds failam, kuru tu mēģini augšpulādēt, sākas ar '''\"\$1\"''', kas ir neaprakstošs vārds, kādu parasti uzģenerē digitālais fotoaparāts. Lūdzu izvēlies aprakstošāku vārdu šim failam.", +'upload-success-subj' => 'Augšupielāde veiksmīga', +'upload-success-msg' => 'Jūsu augšupielādēt no [$2] bija veiksmīga. Tā ir pieejama šeit: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Augšupielādes problēma', +'upload-warning-subj' => 'Augšupielādes brīdinājums', 'upload-proto-error' => 'Nepareizs protokols', 'upload-file-error' => 'Iekšējā kļūda', @@ -1470,7 +1491,6 @@ Apraksts ir [$2 faila apraksta lapā], kas ir parādīta zemāk.', 'statistics-edits-average' => 'Vidējais izmaiņu skaits uz lapu', 'statistics-views-total' => 'Skatījumi kopā', 'statistics-views-peredit' => 'Skatījumu skaits uz labojumu', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Darbu rindas] garums', 'statistics-users' => 'Reģistrēti lietotāji', 'statistics-users-active' => 'Aktīvi lietotāji', 'statistics-users-active-desc' => 'Lietotāji, kas ir veikuši jebkādu darbību {{PLURAL:$1|iepriekšējā dienā|iepriekšējās $1 dienās}}', @@ -1485,8 +1505,9 @@ Lapu uzskata par nozīmju atdalīšanas lapu, ja tā satur veidni, uz kuru ir sa 'doubleredirects' => 'Divkāršas pāradresācijas lapas', 'doubleredirectstext' => 'Šajā lapā ir uzskaitītas pāradresācijas lapas, kuras pāradresē uz citām pāradresācijas lapām. Katrā rindiņā ir saites uz pirmo un otro pāradresācijas lapu, kā arī pirmā rindiņa no otrās pāradresācijas lapas teksta, kas parasti ir faktiskā "gala" lapa, uz kuru vajadzētu būt saitei pirmajā lapā. -Nosvītrotie ieraksti jau ir tikuši salaboti.', +Nosvītrotie ieraksti jau ir tikuši salaboti.', 'double-redirect-fixed-move' => '[[$1]] bija ticis pārvietots, tas tagad ir pāradresācija uz [[$2]]', +'double-redirect-fixer' => 'Pāradresāciju labotājs', 'brokenredirects' => 'Kļūdainas pāradresācijas', 'brokenredirectstext' => 'Šīs ir pāradresācijas lapas uz neesošām lapām:', @@ -1507,6 +1528,8 @@ Katrā rindiņā ir saites uz pirmo un otro pāradresācijas lapu, kā arī pirm 'nmembers' => '$1 {{PLURAL:$1|lapa|lapas}}', 'nrevisions' => '$1 {{PLURAL:$1|versija|versijas}}', 'nviews' => 'skatīta $1 {{PLURAL:$1|reizi|reizes}}', +'nimagelinks' => 'Izmantots $1 {{PLURAL:$1|lapā|lapās}}', +'ntransclusions' => 'izmantots $1 {{PLURAL:$1|lapā|lapās}}', 'specialpage-empty' => 'Šim ziņojumam nav rezultātu.', 'lonelypages' => 'Lapas bez saitēm uz tām', 'uncategorizedpages' => 'Nekategorizētās lapas', @@ -1578,9 +1601,10 @@ Tu vari sašaurināt aplūkojamo reģistru, izvēloties reģistra veidu, lietot 'allinnamespace' => 'Visas lapas ($1 vārdtelpa)', 'allnotinnamespace' => 'Visas lapas (nav $1 vārdtelpa)', 'allpagesprev' => 'Iepriekšējās', -'allpagesnext' => 'Nākošās', +'allpagesnext' => 'Nākamās', 'allpagessubmit' => 'Aiziet!', 'allpagesprefix' => 'Parādīt lapas ar šādu virsraksta sākumu:', +'allpages-bad-ns' => '{{SITENAME}} nav vārdkopas "$1".', # Special:Categories 'categories' => 'Kategorijas', @@ -1639,32 +1663,37 @@ Papildu informāciju par katru individuālu piekļuves tiesību veidu, iespējam 'listgrouprights-removegroup-all' => 'Noņemt visas grupas', # E-mail user -'mailnologin' => 'Nav adreses, uz kuru sūtīt', -'mailnologintext' => 'Tev jābūt [[Special:UserLogin|iegājušam]], kā arī tev jābūt [[Special:Preferences|norādītai]] derīgai e-pasta adresei, lai sūtītu e-pastu citiem lietotājiem.', -'emailuser' => 'Sūtīt e-pastu šim lietotājam', -'emailpage' => 'Sūtīt e-pastu lietotājam', -'emailpagetext' => 'Ar šo veidni ir iespējams nosūtīt e-pastu šim lietotājam. +'mailnologin' => 'Nav adreses, uz kuru sūtīt', +'mailnologintext' => 'Tev jābūt [[Special:UserLogin|iegājušam]], kā arī tev jābūt [[Special:Preferences|norādītai]] derīgai e-pasta adresei, lai sūtītu e-pastu citiem lietotājiem.', +'emailuser' => 'Sūtīt e-pastu šim lietotājam', +'emailpage' => 'Sūtīt e-pastu lietotājam', +'emailpagetext' => 'Ar šo veidni ir iespējams nosūtīt e-pastu šim lietotājam. Tā e-pasta adrese, kuru tu esi norādījis [[Special:Preferences|savā izvēļu lapā]], parādīsies e-pasta "From" lauciņā, tādejādi saņēmējs varēs tev atbildēt.', -'defemailsubject' => 'E-pasts par {{grammar:akuzatīvs|{{SITENAME}}}}', -'noemailtitle' => 'Nav e-pasta adreses', -'noemailtext' => 'Šis lietotājs nav norādījis derīgu e-pasta adresi.', -'nowikiemailtitle' => 'E-pasts nav atļauts', -'nowikiemailtext' => 'Šis lietotājs ir vēlējies nesaņemt e-pastu no citiem lietotājiem.', -'email-legend' => 'Sūtīt e-pastu citam {{SITENAME}} lietotājam', -'emailfrom' => 'No:', -'emailto' => 'Kam:', -'emailsubject' => 'Temats:', -'emailmessage' => 'Vēstījums:', -'emailsend' => 'Nosūtīt', -'emailccme' => 'Atsūtīt man uz e-pastu mana ziņojuma kopiju.', -'emailsent' => 'E-pasts nosūtīts', -'emailsenttext' => 'Tavs e-pasts ir nosūtīts.', -'emailuserfooter' => 'Šis e-pasts ir lietotāja $1 sūtīts lietotājam $2, izmantojot "Sūtīt e-pastu šim lietotājam" funkciju {{SITENAME}}.', +'usermailererror' => 'Pasta objekts atgrieza kļūdu:', +'defemailsubject' => 'E-pasts par {{grammar:akuzatīvs|{{SITENAME}}}}', +'usermaildisabled' => 'Lietotāja e-pasts atslēgts', +'usermaildisabledtext' => 'Jūs nevarat sūtīt e-pastu citiem lietotājiem šajā viki', +'noemailtitle' => 'Nav e-pasta adreses', +'noemailtext' => 'Šis lietotājs nav norādījis derīgu e-pasta adresi.', +'nowikiemailtitle' => 'E-pasts nav atļauts', +'nowikiemailtext' => 'Šis lietotājs ir vēlējies nesaņemt e-pastu no citiem lietotājiem.', +'email-legend' => 'Sūtīt e-pastu citam {{SITENAME}} lietotājam', +'emailfrom' => 'No:', +'emailto' => 'Kam:', +'emailsubject' => 'Temats:', +'emailmessage' => 'Vēstījums:', +'emailsend' => 'Nosūtīt', +'emailccme' => 'Atsūtīt man uz e-pastu mana ziņojuma kopiju.', +'emailsent' => 'E-pasts nosūtīts', +'emailsenttext' => 'Tavs e-pasts ir nosūtīts.', +'emailuserfooter' => 'Šis e-pasts ir lietotāja $1 sūtīts lietotājam $2, izmantojot "Sūtīt e-pastu šim lietotājam" funkciju {{SITENAME}}.', + +# User Messenger +'usermessage-editor' => 'Sistēmas ziņotājs', # Watchlist 'watchlist' => 'Mani uzraugāmie raksti', 'mywatchlist' => 'Mani uzraugāmie raksti', -'watchlistfor' => "(priekš '''$1''')", 'nowatchlist' => 'Tavā uzraugāmo rakstu sarakstā nav neviena raksta.', 'watchlistanontext' => 'Lūdzu $1, lai apskatītu vai labotu savu uzraugāmo rakstu saraksta saturu.', 'watchnologin' => 'Neesi iegājis', @@ -1774,7 +1803,10 @@ Pēdējās izmaiņas saglabāja [[User:$3|$3]] ([[User talk:$3|diskusija]]{{int: 'revertpage-nouser' => 'Novērsu (lietotājvārds slēpts) izmaiņas, atjaunoju [[User:$1|$1]] versiju.', 'rollback-success' => 'Tika novērstas $1 izdarītās izmaiņas; un tika atjaunota iepriekšējā versija, kuru bija izveidojis $2.', -'sessionfailure' => "Ir radusies problēma ar sesijas autentifikāciju; + +# Edit tokens +'sessionfailure-title' => 'sesijas kļūda', +'sessionfailure' => "Ir radusies problēma ar sesijas autentifikāciju; šī darbība ir atcelta, lai novērstu lietotājvārda iespējami ļaunprātīgu izmantošanu. Lūdzu, spied \"''back''\" un atjaunini iepriekšējo lapu. Tad mēģini vēlreiz.", @@ -1896,18 +1928,21 @@ $1', 'month' => 'No mēneša (un senāki):', 'year' => 'No gada (un senāki):', -'sp-contributions-newbies' => 'Rādīt jauno lietotāju devumu', -'sp-contributions-newbies-sub' => 'Jaunie lietotāji', -'sp-contributions-blocklog' => 'Bloķēšanas reģistrs', -'sp-contributions-deleted' => 'Izdzēstais lietotāju devums', -'sp-contributions-logs' => 'reģistri', -'sp-contributions-talk' => 'diskusija', -'sp-contributions-userrights' => 'Lietotāju tiesību pārvaldība', -'sp-contributions-blocked-notice' => 'Šis lietotājs pašlaik ir nobloķēts. +'sp-contributions-newbies' => 'Rādīt jauno lietotāju devumu', +'sp-contributions-newbies-sub' => 'Jaunie lietotāji', +'sp-contributions-blocklog' => 'Bloķēšanas reģistrs', +'sp-contributions-deleted' => 'Izdzēstais lietotāju devums', +'sp-contributions-uploads' => 'augšupielādes', +'sp-contributions-logs' => 'reģistri', +'sp-contributions-talk' => 'diskusija', +'sp-contributions-userrights' => 'Lietotāju tiesību pārvaldība', +'sp-contributions-blocked-notice' => 'Šis lietotājs pašlaik ir nobloķēts. Pēdējais bloķēšanas reģistra ieraksts ir apskatāms zemāk:', -'sp-contributions-search' => 'Meklēt lietotāju veiktās izmaiņas', -'sp-contributions-username' => 'IP adrese vai lietotāja vārds:', -'sp-contributions-submit' => 'Meklēt', +'sp-contributions-blocked-notice-anon' => 'Šī IP adrese pašlaik ir nobloķēta. +Pēdējais bloķēšanas reģistra ieraksts ir apskatāms zemāk:', +'sp-contributions-search' => 'Meklēt lietotāju veiktās izmaiņas', +'sp-contributions-username' => 'IP adrese vai lietotāja vārds:', +'sp-contributions-submit' => 'Meklēt', # What links here 'whatlinkshere' => 'Norādes uz šo rakstu', @@ -1967,7 +2002,6 @@ Visus blokus var apskatīties [[Special:IPBlockList|IP bloku sarakstā]].', 'ipb-edit-dropdown' => 'Izmainīt bloķēšanas iemeslus', 'ipb-unblock-addr' => 'Atbloķēt $1', 'ipb-unblock' => 'Atbloķēt lietotāju vai IP adresi', -'ipb-blocklist-addr' => 'Skatīt $1 uzliktos, esošos blokus', 'ipb-blocklist' => 'Apskatīties esošos blokus', 'ipb-blocklist-contribs' => '$1 devums', 'unblockip' => 'Atbloķēt lietotāju', @@ -2028,6 +2062,8 @@ Tā ir bloķēta kā daļa no IP adrešu diapazona $2, kuru var atbloķēt.', 'proxyblocker-disabled' => 'Šī funkcija ir atspējota.', 'proxyblocksuccess' => 'Darīts.', 'cant-block-while-blocked' => 'Tu nevari bloķēt citus lietotājus, kamēr pats esi bloķēts.', +'ipbblocked' => 'Tu nevar bloķēt vai atbloķēt lietotājus, jo Tu pats esi bloķēts', +'ipbnounblockself' => 'Tev nav atļauts sevi atbloķēt', # Developer tools 'lockdb' => 'Bloķēt datubāzi', @@ -2108,6 +2144,7 @@ nevar pārvietot lapu uz sevi.', 'immobile-source-page' => 'Šī lapa nav pārvietojama.', 'immobile-target-page' => 'Nevar pārvietot uz mērķa nosaukumu.', 'imagenocrossnamespace' => 'Nevar pārvietot failu uz vārtelpu, kas nav paredzēta failiem.', +'nonfile-cannot-move-to-file' => 'Nevar pārvietot to, kas nav fails, uz failu vārdtelpu.', 'imagetypemismatch' => 'Jaunais faila paplašinājums neatbilst tā tipam', 'imageinvalidfilename' => 'Mērķa faila nosaukums ir nederīgs', 'fix-double-redirects' => 'Automātiski izmainīt visas pāradresācijas, kas ved uz sākotnējo nosaukumu', @@ -2179,6 +2216,7 @@ Pirmajā gadījumā var arī lietot šādu metodi, piem., [[{{#Special:Export}}/ 'importstart' => 'Importē lapas...', 'import-revision-count' => '$1 {{PLURAL:$1|versija|versijas}}', 'importnopages' => 'Nav lapu, ko importēt.', +'imported-log-entries' => '{{PLURAL:$1|Importētais|Importētie}} $1 {{PLURAL:$1|reģistra ieraksts|reģistra ieraksti}}.', 'importfailed' => 'Importēšana neizdevās: $1', 'importunknownsource' => 'Nezināms importēšanas avota veids', 'importcantopen' => 'Nevarēja atvērt importējamo failu', @@ -2273,6 +2311,8 @@ Lūdzu, mēģiniet vēlreiz.', 'tooltip-rollback' => '"Novērst" atceļ visas šī lietotāja izmaiņas vienā piegājienā', 'tooltip-undo' => '"Atgriezt" atgriež šīs izmaiņas un atver labošanas formu priekšskatījuma veidā. Tas atļauj pievienot iemeslu kopsavilkumā.', +'tooltip-preferences-save' => 'Saglabāt iestatījumus', +'tooltip-summary' => 'Ievadiet īsu kopsavilkumu', # Metadata 'nodublincore' => 'Dublin Core RDF metadati šim serverim atslēgti.', @@ -2356,13 +2396,15 @@ $1', 'imagemaxsize' => 'Attēlu apraksta lapās parādāmo attēlu maksimālais izmērs:', 'thumbsize' => 'Sīkbildes izmērs:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|lapa|lapas}}', -'file-info' => '(faila izmērs: $1, MIME tips: $2)', -'file-info-size' => '($1 × $2 pikseļi, faila izmērs: $3, MIME tips: $4)', +'file-info' => 'faila izmērs: $1, MIME tips: $2', +'file-info-size' => '$1 × $2 pikseļi, faila izmērs: $3, MIME tips: $4', 'file-nohires' => 'Augstāka izšķirtspēja nav pieejama.', -'svg-long-desc' => '(SVG fails, definētais izmērs $1 × $2 pikseļi, faila izmērs: $3)', +'svg-long-desc' => 'SVG fails, definētais izmērs $1 × $2 pikseļi, faila izmērs: $3', 'show-big-image' => 'Pilnā izmērā', 'show-big-image-thumb' => 'Šī priekšskata izmērs: $1 × $2 pikseļi', 'file-info-gif-frames' => '$1 {{PLURAL:$1|kadrs|kadri}}', +'file-info-png-repeat' => 'spēlēts $1 {{PLURAL:$1|reizi|reizes}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|kadrs|kadri}}', # Special:NewFiles 'newimages' => 'Jauno attēlu galerija', @@ -2423,8 +2465,8 @@ Pārējie lauki, pēc noklusējuma, būs paslēpti. 'exif-colorspace' => 'Krāsu telpa', 'exif-componentsconfiguration' => 'Katras sastāvdaļas nozīme', 'exif-compressedbitsperpixel' => 'Attēla kompresijas pakāpe', -'exif-pixelydimension' => 'Derīgs attēla platums', -'exif-pixelxdimension' => 'Valind image height', +'exif-pixelydimension' => 'Attēla platums', +'exif-pixelxdimension' => 'Attēla augstums', 'exif-makernote' => 'Ražotāja piezīmes', 'exif-usercomment' => 'Lietotāja komentāri', 'exif-relatedsoundfile' => 'Saistītais skaņas fails', @@ -2437,7 +2479,7 @@ Pārējie lauki, pēc noklusējuma, būs paslēpti. 'exif-spectralsensitivity' => 'Spektrālā jutība', 'exif-isospeedratings' => 'ISO jutība', 'exif-shutterspeedvalue' => 'Slēdža ātrums', -'exif-aperturevalue' => 'Apertūra', +'exif-aperturevalue' => 'APEX apertūra', 'exif-brightnessvalue' => 'Gaišums', 'exif-exposurebiasvalue' => 'Ekspozīcijas nobīde', 'exif-subjectdistance' => 'Objekta attālums', @@ -2682,6 +2724,7 @@ Lūdzu apstiprini, ka tiešām gribi izveidot šo lapu no jauna.", 'table_pager_first' => 'Pirmā lapa', 'table_pager_last' => 'Pēdējā lapa', 'table_pager_limit' => 'Rādīt $1 ierakstus vienā lapā', +'table_pager_limit_label' => 'Skaits vienā lapā:', 'table_pager_limit_submit' => 'Parādīt', 'table_pager_empty' => 'Neko neatrada', @@ -2738,6 +2781,8 @@ Var arī lietot [[Special:Watchlist/edit|standarta izmainīšanas lapu]].', 'version-hook-name' => 'Aizķeres nosaukums', 'version-version' => '(Versija $1)', 'version-license' => 'Licence', +'version-poweredby-credits' => "Šis viki darbojas ar '''[http://www.mediawiki.org/ MediaWiki]''' programmatūru, autortiesības © 2001-$1 $2.", +'version-poweredby-others' => 'citi', 'version-software' => 'Instalētā programmatūra', 'version-software-product' => 'Produkts', 'version-software-version' => 'Versija', @@ -2793,6 +2838,15 @@ Ievadi faila nosaukumu bez "{{ns:file}}:" prefiksa.', 'tags-edit' => 'labot', 'tags-hitcount' => '$1 {{PLURAL:$1|izmaiņa|izmaiņas}}', +# Special:ComparePages +'comparepages' => 'Salīdzināt lapas', +'compare-selector' => 'Salīdzināt lapu versijas', +'compare-page1' => '1. lapa', +'compare-page2' => '2. lapa', +'compare-rev1' => '1. versija', +'compare-rev2' => '2. versija', +'compare-submit' => 'Salīdzināt', + # Database error messages 'dberr-header' => 'Šim viki ir problēma', 'dberr-problems' => 'Atvainojiet! @@ -2810,8 +2864,13 @@ Ievadi faila nosaukumu bez "{{ns:file}}:" prefiksa.', 'htmlform-float-invalid' => 'Vērtība, ko Jūs norādījāt, nav skaitlis.', 'htmlform-int-toolow' => 'Vērtība, ko Jūs norādījāt, ir mazāka par $1 minimumu', 'htmlform-int-toohigh' => 'Vērtība, ko Jūs norādījāt, ir lielāka par $1 maksimumu', +'htmlform-required' => 'Šī vērtība ir obligāta', 'htmlform-submit' => 'Iesniegt', 'htmlform-reset' => 'Atcelt izmaiņas', 'htmlform-selectorother-other' => 'Citi', +# SQLite database support +'sqlite-has-fts' => '$1 ar pilnteksta meklēšanas atbalstu', +'sqlite-no-fts' => '$1 bez pilnteksta meklēšanas atbalsta', + ); diff --git a/languages/messages/MessagesLzh.php b/languages/messages/MessagesLzh.php index 3637a249..8c0899a1 100644 --- a/languages/messages/MessagesLzh.php +++ b/languages/messages/MessagesLzh.php @@ -59,9 +59,9 @@ $digitTransformTable = array( ',' => '', ); -#------------------------------------------------------------------- +# ------------------------------------------------------------------- # Default messages -#------------------------------------------------------------------- +# ------------------------------------------------------------------- # Allowed characters in keys are: A-Z, a-z, 0-9, underscore (_) and # hyphen (-). If you need more characters, you may be able to change # the regex in MagicWord::initRegex @@ -82,8 +82,7 @@ $messages = array( 'tog-editsection' => '纂段擊鏈', 'tog-editsectiononrightclick' => '纂段右擊標(JavaScript)', 'tog-showtoc' => '四章見目', -'tog-rememberpassword' => '符節通越', -'tog-editwidth' => '纂幅全', +'tog-rememberpassword' => '符節通越(達至$1日)', 'tog-watchcreations' => '哨己撰', 'tog-watchdefault' => '哨己纂', 'tog-minordefault' => '慣為校', @@ -228,31 +227,21 @@ $messages = array( 'faqpage' => 'Project:頻答問', # Vector skin -'vector-action-addsection' => '入題', -'vector-action-delete' => '刪', -'vector-action-move' => '遷', -'vector-action-protect' => '緘', -'vector-action-undelete' => '覽刪', -'vector-action-unprotect' => '啟', -'vector-namespace-category' => '類', -'vector-namespace-help' => '助', -'vector-namespace-image' => '檔', -'vector-namespace-main' => '文', -'vector-namespace-media' => '雅', -'vector-namespace-mediawiki' => '訊', -'vector-namespace-project' => '策', -'vector-namespace-special' => '奇', -'vector-namespace-talk' => '議', -'vector-namespace-template' => '模', -'vector-namespace-user' => '齋', -'vector-view-create' => '立', -'vector-view-edit' => '纂', -'vector-view-history' => '覽史', -'vector-view-view' => '閱', -'vector-view-viewsource' => '覽源', -'actions' => '動', -'namespaces' => '名集', -'variants' => '變字', +'vector-action-addsection' => '入題', +'vector-action-delete' => '刪', +'vector-action-move' => '遷', +'vector-action-protect' => '緘', +'vector-action-undelete' => '覽刪', +'vector-action-unprotect' => '啟', +'vector-simplesearch-preference' => '增尋之案(限Vector皮)', +'vector-view-create' => '立', +'vector-view-edit' => '纂', +'vector-view-history' => '覽史', +'vector-view-view' => '閱', +'vector-view-viewsource' => '覽源', +'actions' => '動', +'namespaces' => '名集', +'variants' => '變字', 'errorpagetitle' => '誤', 'returnto' => '返$1。', @@ -313,6 +302,9 @@ $messages = array( 欲試候之。 $1', +'pool-timeout' => '待鎖超時', +'pool-queuefull' => '池隊滿之', +'pool-errorunknown' => '未明之錯', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '述{{SITENAME}}', @@ -460,7 +452,8 @@ $2', 'yourname' => '名', 'yourpassword' => '符節', 'yourpasswordagain' => '復核節', -'remembermypassword' => '記之', +'remembermypassword' => '吾之簿通越(達至$1日)', +'securelogin-stick-https' => '登後仍以HTTPS通接', 'externaldberror' => '認庫之錯或禁更爾之外簿。', 'login' => '登簿', 'nav-login-createaccount' => '登簿、增簿', @@ -476,6 +469,7 @@ $2', 'gotaccount' => '有簿矣哉?往$1。', 'gotaccountlink' => '登簿', 'createaccountmail' => '同郵', +'createaccountreason' => '因:', 'badretype' => '符節不合也。', 'userexists' => '簿名存矣,惠更之', 'loginerror' => '登簿誤然', @@ -493,6 +487,7 @@ $2', 'wrongpasswordempty' => '缺符節,惠補之。', 'passwordtooshort' => '符節莫逾$1字。', 'password-name-match' => '符節與簿名異也。', +'password-login-forbidden' => '此簿與符節之用乃禁之。', 'mailmypassword' => '遣吾符節', 'passwordremindertitle' => '新臨符節自{{SITENAME}}', 'passwordremindertext' => '$1求遣{{SITENAME}}($4):"$2"之臨符節為"$3"。日到有$5。 @@ -524,6 +519,9 @@ $2', 'loginlanguagelabel' => '語:$1', 'suspicious-userlogout' => '爾欲無離也,可由壞瀏覽器或快枝代理呈送之。', +# E-mail sending +'php-mail-error-unknown' => '於 PHP mail() 參數現錯', + # Password reset dialog 'resetpass' => '變符', 'resetpass_announce' => '爾乃過郵之臨符登之。要完登,汝乃需設新符節:', @@ -574,8 +572,10 @@ $2', 'showlivepreview' => '即覽', 'showdiff' => '示異', 'anoneditwarning' => "'''警示:'''子未登簿,IP將誌。", +'anonpreviewwarning' => "''子未登簿,IP將誌。''", 'missingsummary' => "'''醒示:'''子未概之,復「{{int:savearticle}}」則文倍焉。", 'missingcommenttext' => '請贊之', +'missingcommentheader' => "'''醒示:'''子未概標之,復「{{int:savearticle}}」則文倍焉。", 'summary-preview' => '覽概:', 'subject-preview' => '覽題:', 'blockedtitle' => '子見禁', @@ -629,7 +629,11 @@ $2', '''尚未儲焉!'''", 'userjspreview' => "'''預覽簿JavaScript。''' '''尚未儲焉!'''", -'userinvalidcssjstitle' => "'''警:'''\"\$1\"無此面版。自製者,全名務小寫,如{{ns:user}}:Foo/monobook.css 而非{{ns:user}}:Foo/Monobook.css", +'sitecsspreview' => "'''預覽此CSS。''' +'''尚未儲焉!'''", +'sitejspreview' => "'''預覽此JavaScript。''' +'''尚未儲焉!'''", +'userinvalidcssjstitle' => "'''警:'''\"\$1\"無此面版。自製者,全名務小寫,如{{ns:user}}:Foo/vector.css 而非{{ns:user}}:Foo/Vector.css", 'updated' => '(新)', 'note' => "'''註'''", 'previewnote' => "'''此乃預覽,尚未儲焉。'''", @@ -654,7 +658,6 @@ $2', '''萬勿盜版!'''", 'copyrightwarning2' => "{{SITENAME}}全文,允眾人撰、纂、刪、校。不喜他纂,但去可矣。
    文務親撰,或謄公本,如$1。'''萬勿盜版!'''", -'longpagewarning' => "'''警示:此頁長$1仟位元組,逾卅二,覽器恐不盡堪,望縮斷之。'''", 'longpageerror' => "'''警示:文長$1仟位元組,越幅$2,未能儲焉。'''", 'readonlywarning' => "'''警示:修庫藏,存儲謝焉。惠謄文備用之。''' @@ -811,6 +814,8 @@ $1", 'logdelete-failure' => "'''見事無設也:''' $1", 'revdel-restore' => '動見之', +'revdel-restore-deleted' => '已刪之審', +'revdel-restore-visible' => '可見之審', 'pagehist' => '頁史', 'deletedhist' => '刪史', 'revdelete-content' => '字', @@ -876,11 +881,13 @@ $1", # Diffs 'history-title' => '$1之誌', 'difference' => '(辨異)', +'difference-multipage' => '(辨頁)', 'lineno' => '列$1:', 'compareselectedversions' => '辨二擇', 'showhideselectedversions' => '示/藏之擇', 'editundo' => '悔', -'diff-multi' => '(未示之審有$1)', +'diff-multi' => '($2作未示之審有$1)', +'diff-multi-manyusers' => '($2多作未示之審有$1)', # Search results 'searchresults' => '得尋', @@ -912,6 +919,7 @@ $1", 'searchprofile-everything-tooltip' => '尋全(含議)', 'searchprofile-advanced-tooltip' => '自定名集中尋', 'search-result-size' => '$1 ($2字)', +'search-result-category-size' => '{{PLURAL:$1|一員|員有$1}}({{PLURAL:$2|一子類有|子類有$2}},{{PLURAL:$3|檔有一|檔有$3}})', 'search-result-score' => '關:$1%', 'search-redirect' => '(轉 $1)', 'search-section' => '(節 $1)', @@ -981,6 +989,7 @@ $1", 'contextlines' => '尋分列', 'contextchars' => '列有字', 'stub-threshold' => '短頁連格式門檻(位元組):', +'stub-threshold-disabled' => '禁', 'recentchangesdays' => '近易示日:', 'recentchangesdays-max' => '最大有$1', 'recentchangescount' => '修著凡幾︰', @@ -1014,6 +1023,7 @@ $1", 'prefs-files' => '檔', 'prefs-custom-css' => '定之CSS', 'prefs-custom-js' => '定之JavaScript', +'prefs-common-css-js' => '共CSS/JavaScript於面版:', 'prefs-reset-intro' => '爾用頁重設至預之設。無修之也。', 'prefs-emailconfirm-label' => '確郵:', 'prefs-textboxsize' => '纂框量', @@ -1048,9 +1058,15 @@ $1", 'prefs-advancedrendering' => '進', 'prefs-advancedsearchoptions' => '進', 'prefs-advancedwatchlist' => '進', -'prefs-display' => '示項', +'prefs-displayrc' => '示項', +'prefs-displaysearchoptions' => '示項', +'prefs-displaywatchlist' => '示項', 'prefs-diffs' => '異', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => '電郵有效之', +'email-address-validity-invalid' => '貢一效之電郵', + # User rights 'userrights' => '秉治權任', 'userrights-lookup-user' => '司社', @@ -1137,6 +1153,7 @@ $1", 'right-hideuser' => '鎖簿名,予藏眾', 'right-ipblock-exempt' => '繞IP鎖、自鎖與圍鎖', 'right-proxyunbannable' => '繞Proxy之自鎖', +'right-unblockself' => '自解鎖', 'right-protect' => '改錮級與纂錮頁', 'right-editprotected' => '纂錮頁(無連錮)', 'right-editinterface' => '纂要', @@ -1159,7 +1176,6 @@ $1", 'right-siteadmin' => '鎖與解鎖資料庫', 'right-reset-passwords' => '設他簿之符節', 'right-override-export-depth' => '出有五層深之頁', -'right-versiondetail' => '示延用之版', 'right-sendemail' => '擬書傳予他簿', # User rights log @@ -1208,14 +1224,9 @@ $1", 'recentchanges-legend' => '近易項', 'recentchangestext' => '共筆揮新,悉列於此。', 'recentchanges-feed-description' => '跟wiki源之近易。', -'recentchanges-label-legend' => '例: $1', -'recentchanges-legend-newpage' => '$1 - 新頁', 'recentchanges-label-newpage' => '此纂開新頁', -'recentchanges-legend-minor' => '$1 - 細纂', 'recentchanges-label-minor' => '此乃細纂', -'recentchanges-legend-bot' => '$1 - 機纂', 'recentchanges-label-bot' => '此乃機纂', -'recentchanges-legend-unpatrolled' => '$1 - 未巡之纂', 'recentchanges-label-unpatrolled' => '此乃未巡之纂', 'rcnote' => "下為自$4$5起,'''$2'''日內'''$1'''近易也。", 'rcnotefrom' => "下為自'''$2'''至'''$1'''之易也。", @@ -1261,6 +1272,9 @@ $1", 'upload_directory_missing' => '目錄$1已失,無建之。', 'upload_directory_read_only' => '目錄$1禁入,無可獻。', 'uploaderror' => '進獻有變', +'upload-recreate-warning' => "'''警:同名之檔曾刪或遷之。''' + +此頁之誌刪與移於此示之以參詳也:", 'uploadtext' => "下表以獻,[[Special:FileList|載獻]]覽之。或見[[Special:Log/upload|誌獻]]與[[Special:Log/delete|誌刪]]。 欲嵌頁中,是格鏈之其一: * '''[[{{ns:file}}:File.jpg]]'''用此整獻 @@ -1293,18 +1307,30 @@ $1", 'filetype-banned-type' => "'''「.$1」'''乃無允之物類也。 允之物類有{{PLURAL:$3|一|多}}$2也。", 'filetype-missing' => '檔名無後綴也(如「.jpg」)。', +'empty-file' => '爾貢之檔乃是空也。', +'file-too-large' => '爾貢之檔過大也。', +'filename-tooshort' => '檔名過短也。', +'filetype-banned' => '此類檔已被禁也。', +'verification-error' => '檔未証也。', +'hookaborted' => '爾嘗之改被擴展鈎棄也。', +'illegal-filename' => '檔名乃為非法也。', +'overwrite' => '無蓋現有之檔也。', +'unknown-error' => '未知錯誤已發也。', +'tmp-create-error' => '無建臨檔也。', +'tmp-write-error' => '臨檔案寫錯也。', 'large-file' => '檔長$2仟位元組,不逾$1為佳。', 'emptyfile' => '無以獻,疑謬名也,惠核之。', 'fileexists' => "'''[[:$1]]'''存矣,欲蓋之則再也。 [[$1|thumb]]", 'filepageexists' => "此檔之述於'''[[:$1]]'''存矣,檔未存也。爾入述無存也。要現之,爾需纂之。", 'file-exists-duplicate' => '此檔乃重檔{{PLURAL:$1|一|數}}:', 'file-deleted-duplicate' => '此檔([[:$1]])前刪。爾需查刪錄再貢之。', -'successfulupload' => '檔案安矣', 'uploadwarning' => '慎焉!', 'uploadwarning-text' => '改下檔述再試之。', 'savefile' => '存之', 'uploadedimage' => '進獻"[[$1]]"', 'overwroteimage' => '新置「[[$1]]」矣', +'copyuploaddisabled' => '由URL之貢被禁也。', +'uploadfromurl-queued' => '爾之貢已排之。', 'uploaddisabledtext' => '檔之貢被禁也。', 'php-uploaddisabledtext' => 'PHP之貢被禁也。查 file_uploads 之。', 'uploadvirus' => '此檔含毒也! @@ -1320,6 +1346,14 @@ $1", 'upload-wasdeleted' => "'''警示:復獻棄檔,慎續之。''' 誌刪如下:", 'filename-bad-prefix' => "獻檔以'''「$1」'''首,常由相機瞎造,惠更述之。", +'upload-success-subj' => '檔案安矣', +'upload-success-msg' => '爾自[$2]之貢安矣,見於此:[[:{{ns:file}}:$1]]', +'upload-failure-subj' => '貢問', +'upload-failure-msg' => '爾自[$2]之貢現問也: + +$1', +'upload-warning-subj' => '貢警', +'upload-warning-msg' => '爾自[$2]之貢出問。爾可回[[Special:Upload/stash/$1|貢表]]修此問。', 'upload-too-many-redirects' => '網址含多轉', 'upload-unknown-size' => '未知之積', @@ -1373,6 +1407,7 @@ $1", 'listfiles_search_for' => '以媒名尋:', 'imgfile' => '檔', 'listfiles' => '見檔', +'listfiles_thumb' => '縮', 'listfiles_date' => '時', 'listfiles_name' => '名', 'listfiles_user' => '簿', @@ -1485,8 +1520,8 @@ $1", 'statistics-edits' => '自{{SITENAME}}設之頁纂數', 'statistics-edits-average' => '每頁均纂數', 'statistics-views-total' => '閱總', +'statistics-views-total-desc' => '不包無存之頁與奇頁之閱數', 'statistics-views-peredit' => '每纂閱數', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue 隊]長', 'statistics-users' => '註[[Special:ListUsers|簿]]', 'statistics-users-active' => '活簿', 'statistics-users-active-desc' => '早$1日前更動之簿', @@ -1497,7 +1532,7 @@ $1", 'doubleredirects' => '窮渡', 'doubleredirectstext' => '頁下窮渡,迭列以示。首尾宿合,宜正渡之。 -已解之。', +已解之。', 'double-redirect-fixed-move' => '[[$1]]遷畢,現渡至[[$2]]', 'double-redirect-fixer' => '修渡', @@ -1520,6 +1555,8 @@ $1", 'nmembers' => '$1戶', 'nrevisions' => '$1審', 'nviews' => '$1閱', +'nimagelinks' => '用以頁有$1', +'ntransclusions' => '用以頁有$1', 'lonelypages' => '孤寡', 'lonelypagestext' => '頁下無鏈或含', 'uncategorizedpages' => '欲訂', @@ -1667,34 +1704,40 @@ $1", 'listgrouprights-removegroup-self-all' => '除自之全組', # E-mail user -'mailnologin' => '無驛', -'mailnologintext' => '[[Special:UserLogin|登簿]]置郵,方可捎書。', -'emailuser' => '捎君', -'emailpage' => '捎書', -'emailpagetext' => '表下捎焉,以郵制君。 +'mailnologin' => '無驛', +'mailnologintext' => '[[Special:UserLogin|登簿]]置郵,方可捎書。', +'emailuser' => '捎君', +'emailpage' => '捎書', +'emailpagetext' => '表下捎焉,以郵制君。 署[[Special:Preferences|子簿郵]]以候往返。', -'usermailererror' => '驛報有誤:', -'defemailsubject' => '{{SITENAME}}來書', -'noemailtitle' => '無郵', -'noemailtext' => '此君無郵。', -'nowikiemailtitle' => '無許之郵', -'nowikiemailtext' => '此君謝收郵之。', -'email-legend' => '發郵至{{SITENAME}}之另一簿', -'emailfrom' => '自:', -'emailto' => '致:', -'emailsubject' => '題:', -'emailmessage' => '訊:', -'emailsend' => '遣', -'emailccme' => '謄複本。', -'emailccsubject' => '致$1複本:$2', -'emailsent' => '書遣矣', -'emailsenttext' => '書遣矣', -'emailuserfooter' => '此捎由$1給$2經{{SITENAME}}之「捎君」發矣。', +'usermailererror' => '驛報有誤:', +'defemailsubject' => '{{SITENAME}}來書', +'usermaildisabled' => '無他人之郵', +'usermaildisabledtext' => '無發電郵於wiki上之他戶也', +'noemailtitle' => '無郵', +'noemailtext' => '此君無郵。', +'nowikiemailtitle' => '無許之郵', +'nowikiemailtext' => '此君謝收郵之。', +'email-legend' => '發郵至{{SITENAME}}之另一簿', +'emailfrom' => '自:', +'emailto' => '致:', +'emailsubject' => '題:', +'emailmessage' => '訊:', +'emailsend' => '遣', +'emailccme' => '謄複本。', +'emailccsubject' => '致$1複本:$2', +'emailsent' => '書遣矣', +'emailsenttext' => '書遣矣', +'emailuserfooter' => '此捎由$1給$2經{{SITENAME}}之「捎君」發矣。', + +# User Messenger +'usermessage-summary' => '留系信。', +'usermessage-editor' => '系信', # Watchlist 'watchlist' => '哨站', 'mywatchlist' => '哨站', -'watchlistfor' => "('''$1'''之哨)", +'watchlistfor2' => '$1之哨 $2', 'nowatchlist' => '無哨', 'watchlistanontext' => '$1以治哨', 'watchnologin' => '未登簿', @@ -1797,7 +1840,10 @@ $NEWPAGE 'revertpage' => '去[[Special:Contributions/$2|$2]]之作(欲言之,可至[[User talk:$2|此]])為[[User:$1|$1]]之本耳', 'revertpage-nouser' => '去(刪簿)之作為[[User:$1|$1]]之本耳', 'rollback-success' => '去$1之作,復為$2之本耳。', -'sessionfailure' => '登簿有變。為防盜簿,返前重取再為之。', + +# Edit tokens +'sessionfailure-title' => '登段敗也', +'sessionfailure' => '登簿有變。為防盜簿,返前重取再為之。', # Protect 'protectlogpage' => '誌緘', @@ -1917,19 +1963,23 @@ $1', 'month' => '且不越', 'year' => '年不越', -'sp-contributions-newbies' => '惟列新進', -'sp-contributions-newbies-sub' => '予新進', -'sp-contributions-newbies-title' => '新進之功績', -'sp-contributions-blocklog' => '誌禁', -'sp-contributions-deleted' => '已刪之積', -'sp-contributions-logs' => '誌', -'sp-contributions-talk' => '議', -'sp-contributions-userrights' => '秉治權任', -'sp-contributions-blocked-notice' => '此簿現禁。 +'sp-contributions-newbies' => '惟列新進', +'sp-contributions-newbies-sub' => '予新進', +'sp-contributions-newbies-title' => '新進之功績', +'sp-contributions-blocklog' => '誌禁', +'sp-contributions-deleted' => '已刪之積', +'sp-contributions-uploads' => '貢', +'sp-contributions-logs' => '誌', +'sp-contributions-talk' => '議', +'sp-contributions-userrights' => '秉治權任', +'sp-contributions-blocked-notice' => '此簿現禁。 近誌禁之項如下示之:', -'sp-contributions-search' => '問勛', -'sp-contributions-username' => '簿名或IP址', -'sp-contributions-submit' => '問', +'sp-contributions-blocked-notice-anon' => '此IP址現禁。 +近誌禁之項如下示之:', +'sp-contributions-search' => '問勛', +'sp-contributions-username' => '簿名或IP址', +'sp-contributions-toponly' => '僅示至新審之纂', +'sp-contributions-submit' => '問', # What links here 'whatlinkshere' => '取佐', @@ -1987,7 +2037,6 @@ $1', 'ipb-edit-dropdown' => '改證', 'ipb-unblock-addr' => '赦$1', 'ipb-unblock' => '赦簿、址', -'ipb-blocklist-addr' => '$1之禁', 'ipb-blocklist' => '列禁', 'ipb-blocklist-contribs' => '$1勛績', 'unblockip' => '赦簿', @@ -2051,6 +2100,8 @@ $1已被禁矣。爾是否改此置?', 'cant-block-while-blocked' => '爾然被禁,勿施於人。', 'cant-see-hidden-user' => '簿禁或藏矣。 爾無藏之權,無視纂禁也。', +'ipbblocked' => '爾無鎖或鎖他簿,因你自封也', +'ipbnounblockself' => '你無解封自身也', # Developer tools 'lockdb' => '閉庫', @@ -2076,6 +2127,12 @@ $1已被禁矣。爾是否改此置?', 囑之者,新題若非空、渡、缺誌,則舊'''不遷'''焉。存頁勿覆,而誤遷可悔也。 +'''警示!''' +膾炙遷焉,禍生不測;戒慎行之。", +'movepagetext-noredirectfixer' => "函下遷頁,誌隨新往、舊題作渡、取佐欲移。欲查[[Special:DoubleRedirects|防窮]]、[[Special:BrokenRedirects|斷渡]]之。 + +囑之者,新題若非空、渡、缺誌,則舊'''不遷'''焉。存頁勿覆,而誤遷可悔也。 + '''警示!''' 膾炙遷焉,禍生不測;戒慎行之。", 'movearticle' => '遷文:', @@ -2123,6 +2180,7 @@ $1已被禁矣。爾是否改此置?', 'immobile-source-page' => '此頁無動也。', 'immobile-target-page' => '無動至標之標題。', 'imagenocrossnamespace' => '非動檔至非檔名間', +'nonfile-cannot-move-to-file' => '非動非檔至檔名間', 'imagetypemismatch' => '其新副檔名非配其類也', 'imageinvalidfilename' => '標之檔名乃無效也', 'fix-double-redirects' => '更指原題之任渡', @@ -2192,6 +2250,7 @@ $1已被禁矣。爾是否改此置?', 'importstart' => '入匯…', 'import-revision-count' => '有審$1', 'importnopages' => '無可匯。', +'imported-log-entries' => '已匯誌項有$1。', 'importfailed' => '入匯有變:$1', 'importunknownsource' => '入類不明', 'importcantopen' => '入未可啟', @@ -2284,6 +2343,8 @@ $1已被禁矣。爾是否改此置?', 'tooltip-upload' => '獻品備,伐步跑', 'tooltip-rollback' => '『返』乃反之上貢也。', 'tooltip-undo' => '『復』乃開表加因也。', +'tooltip-preferences-save' => '存註', +'tooltip-summary' => '輸一短摘', # Stylesheets 'common.css' => '/* 此之 CSS 用於全面也 */', @@ -2409,14 +2470,17 @@ $1', 'thumbsize' => '縮圖幅', 'widthheight' => '$1矩$2', 'widthheightpage' => '$1矩$2,共$3頁', -'file-info' => '(大小:$1,MIME類型:$2)', -'file-info-size' => '(像素$1矩$2,大小:$3,MIME類型:$4)', +'file-info' => '大小:$1,MIME類型:$2', +'file-info-size' => '像素$1矩$2,大小:$3,MIME類型:$4', 'file-nohires' => '無以更晰。', -'svg-long-desc' => '(SVG檔,貌有像素$1矩$2,幅$3)', +'svg-long-desc' => 'SVG檔,貌有像素$1矩$2,幅$3', 'show-big-image' => '全幅', 'show-big-image-thumb' => '縮圖幅有像素$1矩$2', 'file-info-gif-looped' => '循', 'file-info-gif-frames' => '$1幀', +'file-info-png-looped' => '循', +'file-info-png-repeat' => '放有$1矣', +'file-info-png-frames' => '$1幀', # Special:NewFiles 'newimages' => '新圖之廊', @@ -2506,14 +2570,14 @@ $1', 'limitall' => '全', # E-mail address confirmation -'confirmemail' => '核郵驛', -'confirmemail_noemail' => '[[Special:Preferences|簿註]]有驛。', -'confirmemail_send' => '遣核符', -'confirmemail_sent' => '核符遣矣', -'confirmemail_sendfailed' => '{{SITENAME}}信未遣焉,請核郵驛。 +'confirmemail' => '核郵驛', +'confirmemail_noemail' => '[[Special:Preferences|簿註]]有驛。', +'confirmemail_send' => '遣核符', +'confirmemail_sent' => '核符遣矣', +'confirmemail_sendfailed' => '{{SITENAME}}信未遣焉,請核郵驛。 郵者覆之:$1', -'confirmemail_body' => '持IP $1之人(亦為汝)於{{SITENAME}}建簿"$2",並呈電郵位址。 +'confirmemail_body' => '持IP $1之人(亦為汝)於{{SITENAME}}建簿"$2",並呈電郵位址。 確此簿屬爾,並用{{SITENAME}}之電郵。 於瀏覽器上開此連: @@ -2526,8 +2590,21 @@ $3 $5 確碼於$4過之。', -'confirmemail_invalidated' => '核郵驛消也', -'invalidateemail' => '消核郵驛', +'confirmemail_body_changed' => '持IP $1之人(亦為汝)於{{SITENAME}}改簿"$2"之電郵。 + +確此簿屬爾,並用{{SITENAME}}之電郵。 +於瀏覽器上開此連: + +$3 + +如此簿*非*爾之, +於瀏覽器上開此連消確: + +$5 + +確碼於$4過之。', +'confirmemail_invalidated' => '核郵驛消也', +'invalidateemail' => '消核郵驛', # Scary transclusion 'scarytranscludedisabled' => '[蓋跨共筆之轉碼者,莫之能用也]', @@ -2575,6 +2652,7 @@ $1', 'table_pager_first' => '首頁', 'table_pager_last' => '末頁', 'table_pager_limit' => '頁有物$1', +'table_pager_limit_label' => '頁之物︰', 'table_pager_limit_submit' => '往', 'table_pager_empty' => '空', @@ -2631,6 +2709,7 @@ $1', 'version-specialpages' => '奇頁', 'version-parserhooks' => '語鈎', 'version-variables' => '變數', +'version-skins' => '皮', 'version-other' => '他', 'version-mediahandlers' => '媒處', 'version-hooks' => '鈎', @@ -2642,6 +2721,13 @@ $1', 'version-hook-subscribedby' => '用於', 'version-version' => '(版 $1)', 'version-license' => '牌', +'version-poweredby-credits' => "此 Wiki 以 '''[http://www.mediawiki.org/ MediaWiki]''' 之驅,權 © 2001-$1 $2。", +'version-poweredby-others' => '其他', +'version-license-info' => 'MediaWiki乃自由軟件;爾依自由軟件基金會之GNU通用公共授權之款,就此本程序再發佈及/或修;依之二版(自選之)或後之。 + +MediaWiki乃為用之發,無擔之責也;亦無售目之默擔也。參GNU通用公共授權之詳。 + +爾乃收附本程序之[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU通用公共授權副本];如無者,致函至自由軟件基金會:51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或[http://www.gnu.org/licenses/old-licenses/gpl-2.0.html 閱之]。', 'version-software' => '裝件', 'version-software-product' => '品', 'version-software-version' => '版', @@ -2702,6 +2788,15 @@ $1', 'tags-tag' => '標名', 'tags-edit' => '纂', +# Special:ComparePages +'comparepages' => '較頁', +'compare-selector' => '較頁之審', +'compare-page1' => '頁一', +'compare-page2' => '頁二', +'compare-rev1' => '審一', +'compare-rev2' => '審二', +'compare-submit' => '較', + # HTML forms 'htmlform-invalid-input' => '爾之輸問也', 'htmlform-select-badoption' => '爾之值為非效之。', @@ -2709,8 +2804,13 @@ $1', 'htmlform-float-invalid' => '爾之值為非數字也。', 'htmlform-int-toolow' => '爾之值比$1以低', 'htmlform-int-toohigh' => '爾之值比$1以高', +'htmlform-required' => '此值必填之', 'htmlform-submit' => '呈', 'htmlform-reset' => '復', 'htmlform-selectorother-other' => '他', +# SQLite database support +'sqlite-has-fts' => '$1 含全文之尋', +'sqlite-no-fts' => '$1 不含全文之尋', + ); diff --git a/languages/messages/MessagesLzz.php b/languages/messages/MessagesLzz.php index 1767f415..3258a8b6 100644 --- a/languages/messages/MessagesLzz.php +++ b/languages/messages/MessagesLzz.php @@ -20,7 +20,7 @@ $messages = array( # User preference toggles 'tog-underline' => "Link'iş tude kogu3’uxaçki:", 'tog-highlightbroken' => 'Upşu linkepe am şekilite (alternatifi: am şekilite?) ko3\'iri.', -'tog-rememberpassword' => 'Parola-skani goişini', +'tog-rememberpassword' => 'Parola-skani goişini (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-showhiddencats' => "Şinaxeri k'at'egorepe ko3'iri", 'underline-always' => "P'anda", @@ -119,14 +119,8 @@ $messages = array( 'qbspecialpages' => 'Doxmeli sayfape', # Vector skin -'vector-action-delete' => 'Jili', -'vector-namespace-category' => "K'at'egori", -'vector-namespace-help' => "Meşvelaş t'aba", -'vector-namespace-image' => 'Dosya', -'vector-namespace-mediawiki' => 'Mesaji', -'vector-namespace-project' => "P'rojeşi t'aba", -'vector-namespace-special' => 'Doxmeli sayfa', -'vector-view-edit' => 'Doktiri', +'vector-action-delete' => 'Jili', +'vector-view-edit' => 'Doktiri', 'errorpagetitle' => 'Çilata', 'returnto' => '$1 butʼkʼaşa goikti.', @@ -226,7 +220,7 @@ Dudicoxopes oxmaruşi yasaği na ren ar, varna daha dido kʼarakʼtʼeri uğun.' # Login and logout pages 'yourname' => 'Skani maxmare-coxo:', 'yourpassword' => 'Pʼarola-skani:', -'remembermypassword' => 'Parola-skani goişini', +'remembermypassword' => 'Parola-skani goişini (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'Sitʼeşa amaxti', 'nav-login-createaccount' => 'Sitʼeşa amaxti / hesabi dokʼidi', 'userlogin' => 'Sitʼeşa amaxti / hesabi dokʼidi', @@ -489,7 +483,6 @@ Ogoruşi dudis '''all:''' pʼrefiksi okʼatute doloçʼareli na ren iri şeyi (o # Watchlist 'watchlist' => 'çkimi gotxozu listʼe', 'mywatchlist' => 'Çkimi gotxozu listʼe', -'watchlistfor' => "('''$1''' şeni)", 'addedwatch' => 'Skani gotxozu listʼeşa ikʼayitʼinu.', 'addedwatchtext' => '"[[:$1]]" coxoni butʼkʼa [[Special:Watchlist|gotxozu listʼes]] ikʼayitʼinu. @@ -705,9 +698,9 @@ Mu iqʼven başka coxo doçʼari.', 'nextdiff' => 'Ukʼaçxineri versiyoni kʼala na ren farkʼi →', # Media information -'file-info-size' => '($1 × $2 pikseli, dosyaşi didinoba: $3, MIME type: $4)', +'file-info-size' => '$1 × $2 pikseli, dosyaşi didinoba: $3, MIME type: $4', 'file-nohires' => 'Çkva kʼai ozʼiramuşis na uğun versiyoni va ren.', -'svg-long-desc' => '(SVG dosya, coxoten $1 × $2 pʼikʼseli, dosyaşi didinoba: $3)', +'svg-long-desc' => 'SVG dosya, coxoten $1 × $2 pʼikʼseli, dosyaşi didinoba: $3', 'show-big-image' => 'Tam ozʼiramuşi', 'show-big-image-thumb' => '"Evvelişen i3ʼkʼedi" fonkʼsionişi didinoba: $1 × $2 pikseli', diff --git a/languages/messages/MessagesMai.php b/languages/messages/MessagesMai.php index ac0a0b11..40cd2ed5 100644 --- a/languages/messages/MessagesMai.php +++ b/languages/messages/MessagesMai.php @@ -7,37 +7,86 @@ * @ingroup Language * @file * + * @author Ashishanchinhar * @author Ggajendra + * @author Kumariprity + * @author Manojberma77 * @author Meno25 + * @author Priyanka.rachna.jha + * @author Rajesh + * @author Umeshberma + * @author Vinitutpal */ $fallback = 'hi'; $messages = array( # User preference toggles -'tog-underline' => 'लिंककेँ रेखांकित करू:', -'tog-highlightbroken' => 'टूटल श्रृंखला एना देखाऊ (आकि फेर: एना देखाऊ?).', -'tog-justify' => 'सुगढ़ बनाऊ', -'tog-hideminor' => 'सन्निकट परिवर्त्तनमे छोट परिवर्त्तन नुकाऊ', -'tog-newpageshidepatrolled' => 'नियंत्रित सम्पादनकेँ नव पन्ना सूचीसँ नुकाऊ', -'tog-extendwatchlist' => 'ध्यानसूचीमे सभ परिवर्तन देखाऊ,खाली हालक परिवर्तन नै', -'tog-usenewrc' => 'नीक सन्निकट परिवर्त्तन प्रयोग करू (जावास्क्रिप्ट चाही)', -'tog-numberheadings' => 'शीर्षक स्वयं-क्रमांकित करू', -'tog-showtoolbar' => 'संपादन ओजारपेटी देखाऊ (जावास्क्रीप्ट)', -'tog-editondblclick' => 'दू बेर क्लीक कए पन्ना संपादित करू (जावास्क्रीप्ट)', -'tog-editsection' => '[संपादित करू] श्रृंखला द्वारा विभाग संपादनक आज्ञा दिअ', -'tog-showtoc' => 'अनुक्रम देखाऊ (जाहि पृष्ठ पर तीनसँ बेशी विभाग होए)', -'tog-editwidth' => 'सँपादन पेटी पूर्ण चौरस देखाऊ', -'tog-watchdefault' => 'हमर संपादित पृष्ठ हमर साकांक्ष सूचीमे देखाऊ', -'tog-watchdeletion' => 'हमरा द्वारा हटाओल पृष्ठ हमर साकांक्ष सूचीमे राखू', -'tog-previewontop' => 'संपादन पेटीक ऊपर दृश्य देखाऊ', -'tog-nocache' => 'पन्ना प्रतीक्षा गह्वरमे नहि राखू', -'tog-enotifusertalkpages' => 'हमर सदस्य वार्ता पृष्ठ पर भेल परिवर्त्तनक हेतु हमरा ई-मेल करथि', -'tog-enotifminoredits' => 'छोट परिवर्त्तनक हेतु सेहो हमरा ई-मेल पठाऊ', -'tog-fancysig' => 'अपरिपक्व हस्ताक्षर (स्वचालित श्रृंखलाक बिना)', -'tog-externaldiff' => 'पुरान संस्करणमे अंतर देखेबाक हेतु बाहरक प्रणालीक प्रयोग करू', +'tog-underline' => 'लिंककेँ रेखांकित करू:', +'tog-highlightbroken' => 'टूटल श्रृंखला एना देखाऊ (आकि फेर: एना देखाऊ?).', +'tog-justify' => 'सुगढ़ बनाऊ', +'tog-hideminor' => 'सन्निकट परिवर्त्तनमे छोट परिवर्त्तन नुकाऊ', +'tog-hidepatrolled' => 'सन्निकट परिवर्त्तनमे छोट परिवर्त्तन नुकाऊ', +'tog-newpageshidepatrolled' => 'नियंत्रित सम्पादनकेँ नव पन्ना सूचीसँ नुकाऊ', +'tog-extendwatchlist' => 'ध्यानसूचीमे सभ परिवर्तन देखाऊ,खाली हालक परिवर्तन नै', +'tog-usenewrc' => 'नीक सन्निकट परिवर्त्तन प्रयोग करू (जावास्क्रिप्ट चाही)', +'tog-numberheadings' => 'शीर्षक स्वयं-क्रमांकित करू', +'tog-showtoolbar' => 'संपादन ओजारपेटी देखाऊ (जावास्क्रीप्ट)', +'tog-editondblclick' => 'दू बेर क्लीक कए पन्ना संपादित करू (जावास्क्रीप्ट)', +'tog-editsection' => '[संपादित करू] श्रृंखला द्वारा विभाग संपादनक आज्ञा दिअ', +'tog-editsectiononrightclick' => 'ऐ खण्डक सम्पादन खण्डक शीर्षकेँ दहिन क्लिक कऽ सम्भव (जावास्क्रिप्ट चाही)', +'tog-showtoc' => 'अनुक्रम देखाऊ (जाहि पृष्ठ पर तीनसँ बेशी विभाग होए)', +'tog-rememberpassword' => 'ऐ गवेषकपर हमर कूटशब्द (बेशीसं बेशी $1 {{PLURAL:$1|दिन धरि| कएक दिन धरि}}) मोन राखू', +'tog-watchcreations' => 'हमर बनाओल पृष्ठ हमर साकांक्ष सूचीमे राखू', +'tog-watchdefault' => 'हमर संपादित पृष्ठ हमर साकांक्ष सूचीमे देखाऊ', +'tog-watchmoves' => 'हमरा द्वारा हटाओल पृष्ठ हमर साकांक्ष सूचीमे राखू', +'tog-watchdeletion' => 'हमरा द्वारा हटाओल पृष्ठ हमर साकांक्ष सूचीमे राखू', +'tog-minordefault' => 'हमर सभ सम्पादन पूर्वन्यस्त रूपेँ मामूली कहू', +'tog-previewontop' => 'संपादन पेटीक ऊपर दृश्य देखाऊ', +'tog-previewonfirst' => 'पहिल सम्पादनक बाद पूर्वावलोकन देखाउ', +'tog-nocache' => 'गवेषक पृष्ठ उपस्मृति अशक्त करू', +'tog-enotifwatchlistpages' => 'जौं हमर ध्यानसूचीक कोनो पन्नामे परिवर्तन हुअए तँ हमरा ई-पत्र पठाउ', +'tog-enotifusertalkpages' => 'हमर सदस्य वार्ता पृष्ठ पर भेल परिवर्त्तनक हेतु हमरा ई-मेल करथि', +'tog-enotifminoredits' => 'छोट परिवर्त्तनक हेतु सेहो हमरा ई-मेल पठाऊ', +'tog-enotifrevealaddr' => 'हमर ई-पत्र संकेत सूचना ई-पत्रमे देखाउ', +'tog-shownumberswatching' => 'ध्यान राखैबला प्रयोक्ताक संख्या', +'tog-oldsig' => 'अखुनका दस्खतक प्रारूप', +'tog-fancysig' => 'हस्ताक्षरकें विकिटेक्सटक रूपमे देखू (स्वचालित श्रृंखला हीन)', +'tog-externaleditor' => "↓पूर्वनिर्धारित रूपेँ बाह्य सम्पादक क' उपयोग करू (केवल विशेषज्ञसभक लेल, एकरा लेल संगणक पर विशेष सेटिंग चाही। [http://www.mediawiki.org/wiki/Manual:External_editors आओर जानकारी।])", +'tog-externaldiff' => 'पुरान संस्करणमे अंतर देखेबाक हेतु पूर्वनिविष्ट रूपमे बाहरक परिवर्तनक प्रयोग करू', +'tog-showjumplinks' => 'करू "तड़पान" भेटैबला लिंक सभ', +'tog-uselivepreview' => 'करू चल पूर्वावलोकन (जावास्क्रिप्ट चाही) (प्रायोगिक)', +'tog-forceeditsummary' => 'हमरा सचेत करू जखन हम खाली सम्पादम सारांशमे जाइ', +'tog-watchlisthideown' => 'हमर साकांक्ष सूचीसँ हमर सम्पादन नुकाउ', +'tog-watchlisthidebots' => 'हमर साकांक्ष सूचीसँ स्वचालित सम्पादन हटाउ', +'tog-watchlisthideminor' => 'हमर साकांक्ष सूचीसँ मामूली सम्पादन नुकाउ', +'tog-watchlisthideliu' => 'साकांक्षसूचीसँ सम्प्रवेशित प्रयोक्ताक सम्पादन हटाउ', +'tog-watchlisthideanons' => 'साकांक्षसूचीसँ अनाम प्रयोक्ताक सम्पादन हटाउ', +'tog-watchlisthidepatrolled' => 'साकांक्ष सूचीसँ संचालित सम्पादन नुकाउ', +'tog-ccmeonemails' => 'हमरा द्वारा दोसर प्रयोक्ताकेँ पठाओल ई-पत्रक कॉपी पठाउ', +'tog-diffonly' => 'फाइल-अन्तर प्रणालीक नीचाँ पन्नाक सामिग्री नै देखाउ', +'tog-showhiddencats' => 'नुकाएल संवर्ग देखाउ', +'tog-norollbackdiff' => 'प्रत्यावर्तनक बाद फाइल-अन्तर प्रणालीकेँ बिसरू', + +'underline-always' => 'सदिखन', +'underline-never' => 'कखनो नै', +'underline-default' => 'पूर्वन्यस्त गवेषक', + +# Font style option in Special:Preferences +'editfont-style' => 'सम्पादन क्षेत्र वर्णमुख प्रकार', +'editfont-default' => 'पूर्वन्यस्त गवेषक', +'editfont-monospace' => 'समेटल वर्णमुख', +'editfont-sansserif' => 'शीर्षक वर्णमुख', +'editfont-serif' => 'पाठ्य वर्णमुख', # Dates +'sunday' => 'रवि', +'monday' => 'सोम', +'tuesday' => 'मंगल', +'wednesday' => 'बुध', +'thursday' => 'बृहस्पति', +'friday' => 'शुक्र', +'saturday' => 'शनि', 'sun' => 'रवि', 'mon' => 'सोम', 'tue' => 'मंगल', @@ -82,68 +131,398 @@ $messages = array( 'nov' => 'नव.', 'dec' => 'दिस.', -'newwindow' => '(नव खिड़कीसँ खुजैछ)', -'cancel' => 'समाप्त', -'mytalk' => 'हमर वार्त्ता', - -'errorpagetitle' => 'गलती', -'tagline' => 'कतयसँ {{SITENAME}}', -'help' => 'मदति', -'search' => 'ताकू', -'searchbutton' => 'ताकू', -'searcharticle' => 'जाऊ', -'history' => 'पन्नाक इतिहास', -'printableversion' => 'प्रिंट करबा योग्य', -'permalink' => 'स्थायी लिंक', -'edit' => 'संपादन', -'editthispage' => 'एहि पृष्ठक संपादन', -'talkpage' => 'एहि पृष्ठ पर वार्त्तालाप', -'talkpagelinktext' => 'कहू', -'personaltools' => 'व्यक्तिगत उपकरण', -'talk' => 'वर्त्तालाप', -'views' => 'दृष्टि', -'toolbox' => 'उपकरण-बक्सा', -'redirectedfrom' => '(एतयसँ बहटारल $1)', -'jumpto' => 'जाऊ:', -'jumptonavigation' => 'हेलू', -'jumptosearch' => 'ताकू', +# Categories related messages +'pagecategories' => '{{PLURAL:$1|खाढी|कएटा खाढी}}', +'category_header' => 'संवर्ग "$1" मे पन्ना सभ', +'subcategories' => 'उपसंवर्ग', +'category-media-header' => 'संवर्ग "$1" मे मीडिया', +'category-empty' => "''ऐ संवर्गमे अखन कोनो पन्ना वा मीडिया नै अछि।''", +'hidden-categories' => '{{PLURAL:$1|नुकाएल वर्ग|नुकाएल वर्ग }}', +'hidden-category-category' => 'नुकाएल संवर्ग सभ', +'category-subcat-count' => '{{PLURAL:$2| ऐ संवर्गक खाली ई सभ उप संवर्ग अछिइ।.|ऐ संवर्गमे ई सभ {{PLURAL:$1| उपसंवर्ग|$1 उपसंवर्ग सभ}}, ऐमे सँ $2 सभटा।}}', +'category-subcat-count-limited' => 'ऐ संवर्गमे अछि {{PLURAL:$1|उपसंवर्ग|$1उपसंवर्ग सभ}}', +'category-article-count' => '{{PLURAL:$2|ऐ संवर्गमे खाली ई पन्ना अछि।| ई {{PLURAL:$1|पन्ना अछि|$1 पन्ना सभ अछि}} ऐ संवर्गमे, जाइमे सँ $2 सभ।}}', +'category-article-count-limited' => 'ई {{PLURAL:$1|पन्ना अछि|$1 पन्ना सभ अछि}}', +'category-file-count' => '{{PLURAL:$2| ऐ संवर्गमे मातर ई फाइल अछि।| ई {{PLURAL:$1|फाइल अछि|$1 फाइल सभ अछि}} ऐ संवर्गमे, कुल $2 सँ।}}', +'category-file-count-limited' => 'ई {{PLURAL:$1|पन्ना अछि|$1 पन्ना सभ अछि}} ऐ संवर्गमे।', +'listingcontinuesabbrev' => 'शेष आगाँ।', +'index-category' => 'क्रम कएल पन्ना सभ', +'noindex-category' => 'क्रम नै कएल पन्ना सभ', + +'mainpagetext' => "'''मीडियाविकी नीक जकाँ प्रस्थापित भेल।'''", +'mainpagedocfooter' => "सम्पर्क करू [http://meta.wikimedia.org/wiki/Help:Contents User's Guide] विकी तंत्रांशक प्रयोगक जानकारी लेल। + +==प्रारम्भ कोना करी== +* [http://www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list] +* [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ] +* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", + +'about' => 'विषयमे', +'article' => 'विषय सूची पन्ना', +'newwindow' => '(नव खिड़कीसँ खुजैछ)', +'cancel' => 'समाप्त', +'moredotdotdot' => 'आर...', +'mypage' => 'हमर पन्ना', +'mytalk' => 'हमर वार्त्ता', +'anontalk' => 'ऐ अनिकेत पता लेल विमर्श', +'navigation' => 'संचार', +'and' => ' आर', + +# Cologne Blue skin +'qbfind' => 'ताकू', +'qbbrowse' => 'गवेषण करू', +'qbedit' => 'सम्पादन करू', +'qbpageoptions' => 'ई पन्ना', +'qbpageinfo' => 'विषय', +'qbmyoptions' => 'हमर पन्ना सभ', +'qbspecialpages' => 'विशेष पन्ना सभ', +'faq' => 'त्वरित प्रश्नोत्तरी', +'faqpage' => 'Project: त्वरित प्रश्नोत्तरी', + +# Vector skin +'vector-action-addsection' => 'विचार-बिन्दु जोड़ू', +'vector-action-delete' => 'मेटाउ', +'vector-action-move' => 'घसकाउ', +'vector-action-protect' => 'रक्षण करू', +'vector-action-undelete' => 'आपस लाउ', +'vector-action-unprotect' => 'अरक्षित', +'vector-simplesearch-preference' => 'परिष्कृत खोज सुझाव समर्थ करू (सदिश स्वरूप मात्र)', +'vector-view-create' => 'बनाउ', +'vector-view-edit' => 'सम्पादन करू', +'vector-view-history' => 'इतिहास देखू', +'vector-view-view' => 'पढ़ू', +'vector-view-viewsource' => 'जड़ि देखू', +'actions' => 'क्रिया सभ', +'namespaces' => 'चेन्हासी समूह सभ', +'variants' => 'प्रकार सभ', + +'errorpagetitle' => 'गलती', +'returnto' => '$1 पर घुरु।', +'tagline' => 'कतयसँ {{SITENAME}}', +'help' => 'मदति', +'search' => 'ताकू', +'searchbutton' => 'ताकू', +'go' => 'जाउ', +'searcharticle' => 'जाऊ', +'history' => 'पन्नाक इतिहास', +'history_short' => 'इतिहास', +'updatedmarker' => 'हमर अन्तिम आगमनसँ पहिने अद्यतन कएल', +'info_short' => 'सूचना', +'printableversion' => 'प्रिंट करबा योग्य', +'permalink' => 'स्थायी लिंक', +'print' => 'छापू', +'edit' => 'संपादन', +'create' => 'बनाउ', +'editthispage' => 'एहि पृष्ठक संपादन', +'create-this-page' => 'ई पन्ना बनाउ', +'delete' => 'मेटाउ', +'deletethispage' => 'ई पन्ना मेटाउ', +'undelete_short' => 'आपस आनू {{PLURAL:$1|एक सम्पादनt|$1 सम्पादन सभ}}', +'protect' => 'बचाउ', +'protect_change' => 'बदलू', +'protectthispage' => 'ऐ पन्नाक रक्षा करू', +'unprotect' => 'रक्षा कवच हटाउ', +'unprotectthispage' => 'ऐ पन्नासँ रक्षा कवच हटाउ', +'newpage' => 'नवका पन्ना', +'talkpage' => 'एहि पृष्ठ पर वार्त्तालाप', +'talkpagelinktext' => 'कहू', +'specialpage' => 'विशेष पन्ना', +'personaltools' => 'व्यक्तिगत उपकरण', +'postcomment' => 'नव खण्ड', +'articlepage' => 'विषय-सूची पन्ना देखू', +'talk' => 'वार्तालाप', +'views' => 'दृष्टि', +'toolbox' => 'उपकरण-बक्सा', +'userpage' => 'प्रयोक्ता पन्ना देखू', +'projectpage' => 'परियोजना पन्ना देखू', +'imagepage' => 'पन्नाक पृष्ठ देखू', +'mediawikipage' => 'सन्देश पन्ना देखू', +'templatepage' => 'नमूना पृष्ठ देखू', +'viewhelppage' => 'सहायता पन्ना देखू', +'categorypage' => 'संवर्ग पन्ना देखू', +'viewtalkpage' => 'गपशप देखू', +'otherlanguages' => 'दोसर भाषामे', +'redirectedfrom' => '(एतयसँ बहटारल $1)', +'redirectpagesub' => 'पन्नाकेँ पठाउ', +'lastmodifiedat' => 'ई पन्ना अंतिम बेर संवर्धित भेल $1, केँ $2 बजे।', +'viewcount' => 'ई पन्ना देखल गेल {{PLURAL:$1|एक बेर|$1 एतेक बेर}}', +'protectedpage' => 'संरक्षित पन्ना', +'jumpto' => 'जाऊ:', +'jumptonavigation' => 'हेलू', +'jumptosearch' => 'ताकू', +'view-pool-error' => 'दुखी छी, वितरक सभ एखन व्यस्त अछि। +बड्ड बेशी लोक ऐ पन्नाकेँ देखबामे लागल छथि। +ऐ पन्नाकेँ फेरसँ देखबा लेल कनी बिलमू। +$1', +'pool-timeout' => 'प्रतीक्षा निगृहीत कालावसान', +'pool-queuefull' => 'प्रतीक्षा-पाँती पौती भरल', +'pool-errorunknown' => 'अज्ञात भ्रम', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'विषयमे {{SITENAME}}', 'aboutpage' => 'Project:विवरण', +'copyright' => '$1क अंतर्गत विषय सूची उपलब्ध अछि', 'copyrightpage' => '{{ns:project}}:सर्वाधिकार', +'currentevents' => 'आइ-काल्हिक घटना सभ', +'currentevents-url' => 'Project: आइ-काल्हिक घटना सभ', 'disclaimers' => 'अनाधिकार घोषणा', 'disclaimerpage' => 'Project:अनाधिकार घोषणा', 'edithelp' => 'संपादन सहयोग', 'edithelppage' => 'Help:संपादन', +'helppage' => 'Help: विषय सूची', 'mainpage' => 'सम्मुख पन्ना', 'mainpage-description' => 'सम्मुख पृष्ठ', -'policy-url' => 'कार्य-भार :निअम', +'policy-url' => 'Project:नीति', 'portal' => 'सामाजिक कोण', -'portal-url' => 'कार्य-भार : समूह कोण', +'portal-url' => 'Project:समूह कोण', 'privacy' => 'गोपनीयताक नियम', 'privacypage' => 'Project:गोपनीयता नियम', -'badaccess' => 'आज्ञा गल्ती', +'badaccess' => 'आज्ञा गल्ती', +'badaccess-group0' => 'अहाँकेँ आग्रह कएल क्रियाकेँ करबाक अनुमति नै अछि।', +'badaccess-groups' => 'जइ क्रियाक अहाँ आग्रह केने छी से मात्र किछु प्रयोक्ता लेल सुरक्षित अछि {{PLURAL:$2|संवर्ग|संवर्ग सभमे एकटा}}: $1', + +'versionrequired' => 'मीडियाविकीक संस्करण $1 चाही', +'versionrequiredtext' => 'ऐ पन्नाक प्रयोग लेल मीडियाविकीक संस्करण $1 चाही। +देखू ee [[Special:Version|version page]]', -'retrievedfrom' => 'प्राप्ति स्थल "$1"', -'editsection' => 'संपादन करू', -'editsectionhint' => 'संपादन शाखा: $1', -'toc' => 'विषय-सूची', -'showtoc' => 'देखाऊ', -'hidetoc' => 'नुकाऊ', -'site-rss-feed' => '$1 आरएसएस फीड', -'site-atom-feed' => '$1 अणु फीड', -'red-link-title' => 'पृष्ठ उपलब्ध नहि अछि', +'ok' => 'ठीक अछि', +'retrievedfrom' => 'प्राप्ति स्थल "$1"', +'youhavenewmessages' => 'अहाँ लग अछि $1 ($2).', +'newmessageslink' => 'नव संदेश सभ', +'newmessagesdifflink' => 'अन्तिम परिवर्तन', +'youhavenewmessagesmulti' => '$1 पर अहाँ लेल नव सन्देश अछि', +'editsection' => 'संपादन करू', +'editold' => 'सम्पादित करू', +'viewsourceold' => 'जड़ि देखू', +'editlink' => 'सम्पादन करू', +'viewsourcelink' => 'जड़ि देखू', +'editsectionhint' => 'संपादन शाखा: $1', +'toc' => 'विषय-सूची', +'showtoc' => 'देखाऊ', +'hidetoc' => 'नुकाऊ', +'thisisdeleted' => 'देखू वा जाउ $1?', +'viewdeleted' => 'देखू $1?', +'restorelink' => '{{PLURAL:$1|एकटा मेटाएल सम्पादन|$1 मेटाएल सम्पादन सभ}}', +'feedlinks' => 'सूचक:', +'feed-invalid' => 'अमान्य सूचक प्रकार मासुल', +'feed-unavailable' => 'ाधिकृत सूचक उपलब्ध नै अछि', +'site-rss-feed' => '$1 आरएसएस फीड', +'site-atom-feed' => '$1 अणु फीड', +'page-rss-feed' => '"$1" आर.एस.एस. सूचना', +'page-atom-feed' => '"$1" अणु सू़चना', +'red-link-title' => '$1 (पृष्ठ उपलब्ध नै अछि)', # Short words for each namespace, by default used in the namespace tab in monobook -'nstab-main' => 'पृष्ठ', -'nstab-user' => 'उपयोगकर्ताक पृष्ठ', +'nstab-main' => 'पृष्ठ', +'nstab-user' => 'उपयोगकर्ताक पृष्ठ', +'nstab-media' => 'मीडिया पन्ना', +'nstab-special' => 'विशिष्ट पन्ना', +'nstab-project' => 'परियोजना पन्ना', +'nstab-image' => 'फाइल', +'nstab-mediawiki' => 'संदेश', +'nstab-template' => 'नमूना', +'nstab-help' => 'सहायता पन्ना', +'nstab-category' => 'संवर्ग', + +# Main script and global functions +'nosuchaction' => 'एहेन कोनो क्रिया नै', +'nosuchactiontext' => 'ऐ सार्वत्रिक विभव संकेत द्वारा निर्दिष्ट क्रिया अमान्य अछि। +अहाँ सार्वत्रिक विभव संकेतक गलत टंकण केने हएब, वा कोनो गलत लिंकक पाछाँ गेल हएब। +ई {{अन्तर्जाल}} प्रयोक्ता द्वारा प्रयुक्त तंत्रांशमे स्थित कोनो दोषक संकेत सेहो कऽ सकैए।', +'nosuchspecialpage' => 'एहेन कोनो विशेष पन्ना नै', +'nospecialpagetext' => '<गाढ़> अहाँ एकटा अमान्य पन्नाक आग्रह केने छी। +मान्य विशेष पन्नाक सूची एतए अछि [[Special:SpecialPages|{{int:specialpages}}]]।', + +# General errors +'error' => 'भ्रम', +'databaseerror' => 'दत्तनिधि भ्रम', +'dberrortext' => 'एकटा दत्तनिधि अभ्यर्थना क्रम भंग भेल अछि। +ई तंत्रांशमे एकटा दोषक संकेत अछि। +अन्तिम बेर प्रयास कएल दत्तनिधि अभ्यर्थना रहए: +
    $1
    +प्रकार्यक अन्तर्गत "$2". । +दत्तनिधि ई दोष देखेलक "$3: $4" ।', +'dberrortextcl' => 'एकटा दत्तनिधि अभ्यर्थना क्रम भंग भेल अछि। +अन्तिम बेर प्रयास कएल दत्तनिधि अभ्यर्थना अछि: +"$1" +"$2" प्रकार्यक अन्तर्गत। +दत्तनिधि दोष देखेलक "$3: $4"', +'laggedslavemode' => "'''चेतौनी:''' पन्नापर सम्भव जे अद्यतन परिवर्तन नै हुअए।", +'readonly' => 'दत्तनिधि प्रतिबन्धित', +'enterlockreason' => 'प्रतिबन्ध लेल कारण बताउ, संगमे एकटा अंदाज सेहो बताउ जे कखन ई प्रतिबन्ध हटाएल जाएत।', +'readonlytext' => 'अखन दत्तांशनिधि नव प्रविष्टि आ आन संशोधन लेल प्रतिबन्धित अछि, सम्भवतः सामान्त दत्तांशनिधि देखभाल लेल, तकर बाद ई सामान्य भऽ जाएत। + +संचालक जे एकरा प्रतिबन्धित कएने छथि ई कारण दै छथि:$1', +'missing-article' => 'दत्तनिधि पृष्ठक वांछित पाठ्य नै ताकि सकल, माने "$1" $2 +एकर कारण कोनो पुरान फाइल चेन्हासी वा ऐतिहासिक लिंकक पाछाँ जाएब अछि, जे मेटा देल गेल छै। +जौं ई तकर कारण नै अछि, तखन अहाँकेँ तंत्रांशमे कोनो दोष भेटल अछि। +एकर खबरि पहुँचाउ [[Special:ListUsers/sysop|administrator]], केँ, अपन सार्वत्रिक विभव संकेत सूचित करैत।', +'missingarticle-rev' => '(संशोधन#: $1)', +'missingarticle-diff' => '(फाइल-अन्तर प्रणाली: $1, $2)', +'readonly_lag' => 'दत्तांशनिधि स्वचालित रूपेँ प्रतिबन्धित कएल गेल अछि जा परजीवी दतांशनिधि वितरक मूलक समक्ष नै आबि जाए।', +'internalerror' => 'आन्तरिक भ्रम', +'internalerror_info' => 'आन्तरिक भ्रम: $1', +'fileappenderrorread' => '"$1" केँ जोड़ै कालमे नै पढ़ि सकल', +'fileappenderror' => '"$1" सँ "$2" केँ नै जोड़ि सकल।', +'filecopyerror' => '"$1" सँ "$2" केँ नै अनुकृति कऽ सकल।', +'filerenameerror' => '"$1" सँ "$2" केँ नै नाम बदलि सकल।', +'filedeleteerror' => '"$1" केँ नै मेटा सकल।', +'directorycreateerror' => 'विभाग "$1" नै बना सकल।', +'filenotfound' => 'फाइल "$1" नै ताकि सकल।', +'fileexistserror' => 'फाइल "$1" पर लिखबामे अक्षम: फाइल अछि', +'unexpected' => 'आसक विपरीत परिणाम: "$1"="$2"', +'formerror' => 'फॉर्म नै पठा सकल', +'badarticleerror' => 'ई क्रिया ऐ पन्नापर नै कएल जा सकैए।', +'cannotdelete' => 'पन्ना व संचिका "$1" मेटाएल नै जा सकल।', +'badtitle' => 'खराप शीर्षक', +'badtitletext' => 'आग्रह कएल पन्नाक शीर्षक गलत, खाली, वा गलत सम्बन्धित अन्तर-न्हाषा अन्तर विकी शीर्षक छी। ई एक वा बेशी कलाकार युक्त भऽ सकैए जे शीर्षकमे प्रयुक्त नै कएल जा सकैए।', +'perfcached' => 'ई दत्तांश उपस्मृतिक आधारपर अछि आ भऽ सकैए जे अद्यतन नै हुअए।', +'perfcachedts' => 'ई दत्तांश उपस्मृतिमे अछि, आ एकर अन्तिम परिवर्धन भेल अछि $1 केँ।', +'querypage-no-updates' => 'ऐ पन्नाक नवीनीकरण अखन बन्न अछि। +एतुक्का दत्तांश अखन नवीकरण नै कएल जाएत।', +'wrong_wfQuery_params' => 'अमान्य परिमिति ऐ लेल wfQuery()
    +क्रिया : $1
    +अभ्यर्थना: $2', +'viewsource' => 'जड़ि देखू', +'viewsourcefor' => '$1 लेल।', +'actionthrottled' => 'क्रियाकेँ मोकल गेल', +'actionthrottledtext' => 'अनपेक्षित संदेश रोका लेल, अहाँकेँ ऐ क्रियाकेँ कम्मे कालमे सीमासँ बेशी बेर करबासँ रोकल गेल अछि, अहाँ ओइ सीमाकेँ पार कऽ गेल छी। +कृपया किछु काल बाद फेरसँ प्रयास करू।', +'protectedpagetext' => 'ई पन्ना सम्पादन रोकबा लेल संरक्षित अछि।', +'viewsourcetext' => 'अहाँ ऐ पन्नाक जड़िकेँ देख आ अनुकृत कऽ सकै छी:', +'protectedinterface' => 'ई पन्ना तंत्रांश लेल मध्यस्थ पाठक व्यवस्था करैत अछि, आ अपशब्द रोकबाक ब्योंत करैत अछि।', +'editinginterface' => "'''चेतौनी''' अहाँ एकटा एहेन पन्नाक सम्पादन कऽ रहल छी जे तंत्रांशक मध्यस्थ पन्नाकेँ पाठ देबा लेल प्रयोग भऽ रहल अछि। +ऐ पन्नामे परिवर्तन दोसर प्रयोक्ता लेल प्रयोक्ता मध्यस्थक रूपमे परिवर्तन करत। +अनुवाद लेल [http://translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net] जाउ, मीडियाविकी स्थानीयकरण परियोजनापर।", +'sqlhidden' => '(नुकाएल एस.क्यू.एल. अभ्यर्थना)', +'cascadeprotected' => 'ऐ पन्नाक सम्पादन सम्भव नै अछि, कारण ई ऐ मे सम्मिलित अछि, {{PLURAL:$1|पन्ना, जे अछि|पन्ना, से सभ अछि}} सुरक्षित अछि "तराउपड़ी" विकल्प खोललाक बाद: +$2', +'namespaceprotected' => "अहाँकेँ '''$1''' नाम-पेटारमे सम्पादनक अनुमति नै अछि।", +'customcssjsprotected' => 'अहाँकेँ ऐ पन्नाक सम्पादनक अधिकार नै अछि, कारण ई दोसर प्रयोक्ताक व्यक्तिगत प्रतीक छी।', +'ns-specialprotected' => 'विशेष पन्ना सभकेँ सम्पादित नै कएल जा सकैए।', +'titleprotected' => 'ऐ शीर्षकक निर्माण प्रतिबन्धित अछि [[User:$1|$1]] द्वारा। +कारण एतऽ देल अछि "\'\'$2\'\'"।', + +# Virus scanner +'virus-badscanner' => "खराप विन्यास: अज्ञात विषविधि बिम्बक: ''$1''", +'virus-scanfailed' => 'बिम्ब विफल (विध्यादेश $1)', +'virus-unknownscanner' => 'अज्ञात विषविधि निरोधक', # Login and logout pages -'nav-login-createaccount' => 'सदस्य लॉग इन', -'userlogin' => 'लॉग इन / खेसरा बनाऊ', -'userlogout' => 'फेर आयब', +'logouttext' => "'''अहाँ निष्क्रमण कऽ गेल छी।''' + +अहाँ {{अन्तर्जाल}} प्रयोग अनाम भऽ कऽ सकै छी, वा अहाँ [[Special:UserLogin|log in again]] वएह आकि कोनो आन प्रयोक्ताक रूपमे सेहू प्रयोक कऽ सकै छी। +ई मोन राखू जे किछु पन्ना एना देखा पड़ि सकैए जेना अहाँ अखनो सम्प्रवेशित होइ, जावत अहाँ अपन गवेषकक उपस्मृति मेटा नै दै छी।", +'welcomecreation' => '== स्वागत अछि, $1! == +अहाँक खाता खुजि गेल अछि। +अपन [[Special:Preferences|{{अन्तर्जाल}} preferences]] बदलब नै बिसरू।', +'yourname' => 'प्रयोक्ता:', +'yourpassword' => 'कूटशब्द:', +'yourpasswordagain' => 'कूटशब्द फेरसँ टाइप करू:', +'remembermypassword' => 'हमर सम्प्रवेश ऐ गवेषकपर मोन राखू (बेशीसँ बेशी $1 {{PLURAL:$1|दिन|दिन}})', +'securelogin-stick-https' => 'सम्प्रवेशक बाद एच.टी.टी.पी.एस.क लागिमे रहू', +'yourdomainname' => 'अहाँक प्रभावक्षेत्र:', +'externaldberror' => 'खाहे सत्यापन दतांश भ्रम छल वा अहाँ अपन बाह्य खाताकेँ अद्यतन करबामे असमर्थ छी।', +'login' => 'सम्प्रवेश', +'nav-login-createaccount' => 'सदस्य लॉग इन', +'loginprompt' => '{{अन्तर्जाल}} सम्प्रवेश लेल अहाँकेँ आवश्यक रूपेँ ज्ञापक सक्रिय करबाक चाही।', +'userlogin' => 'लॉग इन / खेसरा बनाऊ', +'userloginnocreate' => 'सम्प्रवेश', +'logout' => 'निष्क्रमण', +'userlogout' => 'फेर आयब', +'notloggedin' => 'सम्प्रवेशित नै छी', +'nologin' => 'खाता नै अछि? $1।', +'nologinlink' => 'नव खाता खोलू', +'createaccount' => 'खाता खोली', +'gotaccount' => 'पहिनहियेसँ खाता अछि? $1', +'gotaccountlink' => 'सम्प्रवेश', +'createaccountmail' => 'ई-पत्र द्वारा', +'createaccountreason' => 'कारण:', +'badretype' => 'कूटशब्द जे अहाँ भरलहुँ से मेल नै खाइए।', +'userexists' => 'जे प्रयोक्तानाम अहाँ भरलहुँ से पहिनहियेसँ प्रयोगमे अछि। +कृपा कऽ दोसर नामक चयन करू।', +'loginerror' => 'सम्प्रवेश भ्रम', +'createaccounterror' => 'खाता नै बना सकल: $1', +'nocookiesnew' => 'प्रयोक्ता खाता खुजि गेल, मुदा अहाँ सम्प्रवेशित नै छी। +{{अन्तर्जाल}} सम्प्रवेशित प्रयोक्ताक लेल ज्ञापकक प्रयोग करैत अछि। +अहाँ ज्ञापककेँ अशक्त केने छी। +कृपा कऽ ओकरा सक्रिप करू, तखन अपन प्रयोक्तानाम आ कूटशब्दक संग सम्प्रवेश करू।', +'nocookieslogin' => '{{अन्तर्जाल}} प्रयोक्ताकेँ सम्प्रवेशित करबा लेल ज्ञापकक प्रयोग करैत अछि। +अहाँ ज्ञापककेँ अशक्त केने छी। +कृपा कऽ ओकरा सक्रिय करू आ फेरसँ प्रयास करू।', +'noname' => 'अहाँ वैध प्रयोक्तानाम नै देने छी।', +'loginsuccesstitle' => 'सम्प्रवेश सफल', +'loginsuccess' => "'''अहाँ सम्प्रवेश केलहुँ {{अन्तर्जाल-पता}} \"\$1\".'''क रूपमे।", +'nosuchuser' => '"$1" नामसँ कोनो प्रयोक्ता नै अछि। +प्रयोक्तानाम ब्रह्मक्षर-लघ्वक्षर भेद युक्त अछि। +अपन ह्रिजै जाँचू, वा [[Special:UserLogin/signup|नव खाता बनाउ]] ।', +'nosuchusershort' => '"$1" नाम्ना कोनो प्रयोक्ता नै अछि। +अपन ह्रिजए सुधारू।', +'nouserspecified' => 'अहाँकेँ एकटा प्रयोक्तानाम देबऽ पड़त।', +'login-userblocked' => 'ई प्रयोक्ता प्रतिबन्धित अछि। सम्प्रवेशक अधिकार नै अछि।', +'wrongpassword' => 'गलत कूटशब्द देल गेल। +फेरसँ प्रयास करू।', +'wrongpasswordempty' => 'रिक्त कूटशब्द देल गेल। +फेरसँ प्रयास करू।', +'passwordtooshort' => 'कूटशब्द कमसँ कम {{PLURAL:$1|1 वर्ण|$1 वर्णक}} हुअए।', +'password-name-match' => 'अहाँक कूटशब्द अहाँक प्रयोक्तानामसँ भिन्न हेबाक चाही।', +'password-login-forbidden' => 'ऐ प्रयोक्तानाम आ कूटशब्दक प्रयोग प्रतिबन्धित अछि।', +'mailmypassword' => 'नूतन कूटशब्द ई-पत्रसँ पठाउ', +'passwordremindertitle' => 'नव अस्थायी कूटशब्द {{अन्तर्जाल-पता}} लेल।', +'passwordremindertext' => 'कियो (सम्भवतः अहाँ, अनिकेत $1 सँ) एकटा नव कूटशब्दक आग्रह {{अन्तर्जाल}} ($4) लेल केलौं। एकटा अस्थायी कूटशब्द प्रयोक्ता "$2" लेल बनाओल गेल अछि आ "$3" रूपमे स्थापित कएल गेल अछि। जँ ई अहाँक इच्छा अछि तँ अहाँकेँ सम्प्रवेश करए पड़त आ एकटा नव कूटशब्दक चुनाव करए पड़त। +अहाँक अस्थायी कूटशब्द खतम भऽ जाएत {{PLURAL:$5|एक दिन|$ ५ दिन}} मे।', +'noemail' => 'प्रयोक्ता "$1" लेल कोनो ई-पत्र संकेत दर्ज नै अछि।', +'noemailcreate' => 'अहाँकेँ एकटा मान्य ई-पत्र संकेत देबऽ पड़त।', +'passwordsent' => 'एकटा नव कूटशब्द "$1" लेल पंजीकृत ई-पत्र संकेतपर पठाएल गेल अछि। +जखन अहाँकेँ ई भेटैए तँ फेरसँ सम्प्रवेश करू।', +'blocked-mailpassword' => 'अहाँक अनिकेत सम्पादन लेल प्रतिबन्धित अछि, आ दुरुपयोग रोकबा लेल कूटशब्द प्रत्याहरण सेवा ऐ लेल उपलब्ध नै अछि।', +'eauthentsent' => 'एकटा पावती ई-पत्र निर्धारित ई-पत्र संकेतपर पठा देल गेल अछि। +ऐ खातापर कोनो दोसर ई-पत्र पठाएल जएबासँ पहिने, अहाँकेँ ऐ ई-पत्रक निर्देशक पालन करए पड़त, जइसँ ई पुष्ट भऽ सकए जे ई खाता वास्तवमे अहींक अछि।', +'throttled-mailpassword' => 'एकटा कूटशब्द स्मारक पहिनहिये पठाएल गेल अछि, {{PLURAL:$1|घण्टा|$1 घण्टा}}क भीतर। +दुरुपयोग रोकबा लेल, मात्र एकटा कूटशब्द {{PLURAL:$1|घण्टा|$1 घण्टा}}मे पठाएल जाएत।', +'mailerror' => 'ई-पत्र पठेबामे दिक्कत: $1', +'acct_creation_throttle_hit' => 'ऐ विकीक आगन्तुक अहाँक अनिकेतक प्रयोगसँ काल्हि बनेलन्हि अछि {{PLURAL:$1|1 खाता|$1 खाता}}', +'emailauthenticated' => 'अहाँक ई-पत्र संकेत $2 केँ $3 पर सत्यापित भेल।', +'emailnotauthenticated' => 'अहाँक ई-पत्र संकेत अखन धरि सत्यापित नै भेल अछि।', +'noemailprefs' => 'ई सभ उत्पाद काज कऽ सकए तै लेल एकटा ई-पत्र संकेतक निर्देश अपन विकल्पमे करू।', +'emailconfirmlink' => 'अपन ई-पत्र संकेत सत्यापित करू', +'invalidemailaddress' => 'अमान्य प्रारूपक कारण ऐ ई-पत्र संकेतकेँ स्वीकार नै कएल जा सकैए। +एकटा मान्य ई-पत्र संकेत लिखू वा ओइ स्थानकेँ खाली करू।', +'accountcreated' => 'खाता खुजि गेल', +'accountcreatedtext' => '$1 लेल प्रयोक्ता खाता खुजि गेल।', +'createaccount-title' => '{{अन्तर्जाल}} लेल खाता निर्माण', +'createaccount-text' => 'कियो अहाँक ई-पत्र संकेत लेल एकटा खाता {{अन्तर्जाल}} पर खोललन्हि ($4) नाम भेल "$2", कूटशब्द भेल "$3"। +अहाँ सम्प्रवेश करू आ अपन कूटशब्द बदलू। + +अहाँ ऐ संदेशकेँ बिसरि सकै छी, जँ ई खाता भ्रमवश बनल हुअए।', +'usernamehasherror' => 'प्रयोक्तानाममे चरिखाना चेन्ह नै रहि सकैए', +'login-throttled' => 'अहाँ ढ़ेर रास सम्प्रवेश प्रयास केलहुँ। +फेर प्रयास करबासँ पहिने कने काल थम्हू।', +'loginlanguagelabel' => 'भाषा : $1', +'suspicious-userlogout' => 'अहाँक निष्क्रमणक अनुरोध नै मानल गेल कारण ई लागल जे ई पुरान गवेषकक लागि वा दोसराइत उपस्मृति द्वारा पठाओल गेल छल।', + +# E-mail sending +'php-mail-error-unknown' => 'पी.एच.पी.क संदेश कार्य() मे अज्ञात दोष', + +# Password reset dialog +'resetpass' => 'कूटशब्द बदलू', +'resetpass_announce' => 'अहाँ अस्थायी ई-पत्र विध्यादेशसँ सम्प्रवेश केने छी। +सम्प्रवेश सम्पूर्ण करबा लेल, अहाँ एकटा नव कूटशब्द एतए निर्धारित करू:', +'resetpass_header' => 'खाता कूटशब्द बदलू', +'oldpassword' => 'पुरान कूटशब्द', +'newpassword' => 'नव कूटशब्द', +'retypenew' => 'नव कूटशब्द फेरसँ टंकित करू', +'resetpass_submit' => 'कूटशब्द बनाउ आ सम्प्रवेश करू', +'resetpass_success' => 'अहाँक कूटशब्द सफलतासँ बदलि देल गेल! +आब अहाँकेँ सम्प्रवेशित कऽ रहल छी...', +'resetpass_forbidden' => 'कूटशब्द सभ नै बदलल जा सकैए।', +'resetpass-no-info' => 'अहाँकेँ ऐ पन्नाकेँ पढ़बाले सम्प्रवेशित हुअए पड़त।', +'resetpass-submit-loggedin' => 'कूटशब्द बदलू', +'resetpass-submit-cancel' => 'खतम करू', +'resetpass-wrong-oldpass' => 'अमान्य अस्थायी वा अखुनका कूटशब्द। +अहाँ पहिनहिये सफलतासँ कूटशब्द बदलि लेने छी वा एकटा नव अस्थायी कूटशब्द लेल आग्रह केने छी।', +'resetpass-temp-password' => 'तात्कालिक कूटशब्द', # Edit page toolbar 'bold_sample' => 'गँहीर लेखन', @@ -166,136 +545,1949 @@ $messages = array( 'hr_tip' => 'अक्षांशीय पंक्ति (अल्प उपयोग)', # Edit pages -'summary' => 'सारांश:', -'subject' => 'विषय/मुख्यपंक्ति:', -'minoredit' => 'अल्प संपादन', -'watchthis' => 'एहि पृष्ठकेँ देखू', -'showpreview' => 'पूर्वप्रदर्शन', -'showdiff' => 'परिवर्त्तन देखाऊ', -'copyrightwarning' => 'कृपा कय बुझू जे सभटा योगदान {{SITENAME}} ई बुझि कय देल जा रहल अछि जे ई निम्नांकितक अंतर्गत अछि $2 (देखू $1 जनकारीक हेतु). जौँ अहाँ चाहैत छी जी अहाँक रचना बिना रोकटोकक संपादित नहि हो किंवा बाँटल नहि जाय, तँ एकर योगदान एतय नहि करू।
    +'summary' => 'सारांश:', +'subject' => 'विषय/मुख्यपंक्ति:', +'minoredit' => 'अल्प संपादन', +'watchthis' => 'एहि पृष्ठकेँ देखू', +'savearticle' => 'पन्नाक रक्षण करू', +'preview' => 'पूर्वावलोकन', +'showpreview' => 'पूर्वप्रदर्शन', +'showlivepreview' => 'चलित पूर्वावलोकन', +'showdiff' => 'परिवर्त्तन देखाऊ', +'anoneditwarning' => "'''चेतौनी:''' अहाँ सम्प्रवेशित नै छी। +अहाँक अनिकेत ऐ पन्नाक सम्पादन इतिहासमे दर्ज कएल जाएत।", +'anonpreviewwarning' => "'' अहाँ सम्प्रवेशित नै छी। अखन रक्षण केलासँ अहाँक अनिकेत पता ऐ पन्नाक सम्पादन इतिहासमे दर्ज भऽ जाएत।''", +'missingsummary' => "'''स्मारक:''' अहाँ सम्पादन सार नै देने छी। +जँ अहाँ फेरसँ क्लिक करब \"{{int:savearticle}}\", अहाँक सम्पादन बिना एकर संरक्षित भऽ जाएत।", +'missingcommenttext' => 'कृपा कऽ अपन विचार नीचाँ प्रविष्ट करू।', +'missingcommentheader' => "'''स्मरण:''' अहाँ कोनो विषय/ शीर्षक ऐ टिप्पणीक लेल नै देने छी। +जँ अहाँ फेरसँ क्लिक करब \"{{int:savearticle}}\" , अहाँक सम्पादन बिना एकर संरक्षित भऽ जाएत।", +'summary-preview' => 'सारांश पूर्वावलोकन', +'subject-preview' => 'विषय/ शीर्षक पूर्वावलोकन', +'blockedtitle' => 'प्रयोक्ता प्रतिबन्धित अछि।', +'blockedtext' => "''' अहाँक प्रयोक्तानाम वा अनिकेत प्रतिबन्धित कऽ देल गेल अछि।''' + +ई प्रतिबन्ध $1 द्वारा कएल गेल। +एकर कारण अछि ''$2'' । + +* प्रतिबन्धक प्रारम्भ: $8 +* प्रतिबन्धक समाप्ति: $6 +* आसन्न प्रतिबन्धसँ प्रभावित: $7 + +अहाँ $1 सँ सम्पर्क कऽ सकै छी वा दोसर [[{{MediaWiki:Grouppage-sysop}}|संचालक]] सँ प्रतिबन्धक विषयमे सम्पर्क कऽ सकै छी। +अहाँ ’ऐ प्रयोक्ताकेँ ई-पत्र दिअ’ सुविधाक प्रयोग नै कऽ सकै छी यावत एकटा मान्य ई-पत्र संकेतक विवरण अहाँक [[Special:Preferences|खाता विकल्प]] मे नै देल अछि आ अहाँकेँ एकर प्रयोग करबासँ रोकि नै देल गेल हो। +अहाँक वर्तमान अनिकेत अछि $3, आ प्रतिबन्ध संख्या अछि # $5 । +ऐ सभ विवरणक उल्लेख अहाँ अपन कोनो कएल जाइबला प्रश्नमे करू।", +'autoblockedtext' => 'अहाँक अनिकेत स्वचालित रूपेँ प्रतिबन्धित कऽ देल गेल अछि कारण एकर प्रयोग कोनो दोसर प्रयोक्ता द्वारा भऽ रहल छल, जे $1 द्वारा प्रतिबन्धतित कएल गेल। +एकर कारण अछि: +: \'\'$2\'\' । + +* प्रतिबन्धक प्रारम्भ: $8 +* प्रतिबन्धक समाप्ति: $6 +* आसन्न प्रतिबन्धसँ प्रभावित: $७ + +अहाँ $1 सँ सम्पर्क कऽ सकै छी वा दोसर [[{{MediaWiki:Grouppage-sysop}}|संचालक]] सँ प्रतिबन्धक विषयमे सम्पर्क कऽ सकै छी। +अहाँ मोन राखू जे अहाँ ’ऐ प्रयोक्ताकेँ ई-पत्र दिअ’ सुविधाक प्रयोग नै कऽ सकै छी यावत एकटा मान्य ई-पत्र संकेतक पंजीकरण अहाँक [[Special:Preferences|प्रयोक्ता विकल्प]] मे नै देल अछि आ अहाँकेँ एकर प्रयोग करबासँ रोकि नै देल गेल हो। +अहाँक वर्तमान अनिकेत अछि $3, आ प्रतिबन्ध संख्या अछि # $5 । +ऐ सभ विवरणक उल्लेख अहाँ अपन कोनो कएल जाइबला प्रश्नमे करू।', +'blockednoreason' => 'कोनो कारण देल नै अछि।', +'blockedoriginalsource' => "'''$1''' क कारण नीचाँ देल अछि।", +'blockededitsource' => "'''अहाँक सम्पादन सभ''' क पाठ '''$1''' क सन्दर्भमे नीचाँ देल अछि:", +'whitelistedittitle' => 'सम्पादन लेल सम्प्रवेश आवश्यक अछि', +'whitelistedittext' => 'अहाँकेँ $1पन्ना सम्पादन करबा लेल', +'confirmedittext' => 'पन्ना सभक सम्पादन केलासँ पूर्व अहाँ अपन ई-पत्र संकेतकेँ सत्यापित करू। +कृपा कऽ अपन ई-पत्र पता दर्ज करू आ सत्यापित करू ऐ सँ [[Special:Preferences|प्रयोक्ताक पसिन्न सभ]]', +'nosuchsectiontitle' => 'संवर्ग नै ताकि सकल', +'nosuchsectiontext' => 'अहाँ एहन संवर्गकेँ सम्पादित करबाक प्रयास केलहुँ जे अछि नै। +अहाँ जखन ई पना देख रहल छलहुँ तखन ई मेटा देल गेल हएत वा दोसर ठाम हटा देल गेल हएत।', +'loginreqtitle' => 'सम्प्रवेश आवश्यक', +'loginreqlink' => 'सम्प्रवेश', +'loginreqpagetext' => 'अहाँ निश्चयरूपेँ $1 दोसर पन्ना देखबाक लेल।', +'accmailtitle' => 'कोटशब्द पठा देल गेल।', +'accmailtext' => "एकटा बिना क्रमबला निर्माण पद्धतिसँ कूटशब्दक निर्माण [[User talk:$1|$1]] लेल $2 केँ पठाएल गेल अछि। + +ऐ खाताक कूटशब्द बदलल जा सकैए ''[[Special:ChangePassword|कूटशब्द बदलू]]'' पन्नापर सम्प्रवेश केलाक बाद।", +'newarticle' => '(नव)', +'newarticletext' => 'अहाँ एहेन पन्नाक लिंकक अनुसरण कऽ आएल छी जे पन्ना अखन बनले नै अछि। +पन्ना बनेबाक लेल नीचाँक बक्शामे टाइप केनाइ शुरू करू (देखू [[{{MediaWiki:Helppage}}| सहायता पन्ना]] विषेष जानकारी लेल)।', +'anontalkpagetext' => "----'' ई एकटा अनाम प्रयोक्ताक लेल वार्ता पन्ना छी जे अखन धरि अपन खाता नै खोलने छथि, वा जे एकर प्रयोग नै करै छथि। +हमरा सभकेँ तइ लेल अंकीय अनिकेतक प्रयोग हुनका देखार करबा लेल करऽ पड़ि रहल अछि। +ऐ तरहक अनिकेत अनेक प्रयोक्ता द्वारा साझी कएल जा सकैत अछि। +जँ अहाँ अनाम प्रयोक्ता छी आ बुझै छी जे बिना मतलबक टिप्पणी अहाँ दिस देल जा रहल अछि, तँ कृपा कऽ [[Special:UserLogin/signup|एकटा खाता खोलू]] वा [[Special:UserLogin|सम्प्रवेश]] जइसँ भविष्यमे आन अनाम प्रयोक्तासँ अहाँकेँ दिक्कत नै हो।''", +'noarticletext' => 'अखन ऐ पन्नापर कोनो पाठ नै अछि। +अहाँ [[Special:Search/{{PAGENAME}}|ऐ पन्नाक शीर्षकेँ ताकू]] आन पन्नापर, +[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} सम्बन्धी वृत्तलेख ताकू], +आकि [{{fullurl:{{FULLPAGENAME}}|action=edit}} ऐ पन्नाकेँ सम्पादित करू].', +'noarticletext-nopermission' => 'अखन ऐ पन्नापर कोनो पाठ नै अछि। +अहाँ [[Special:Search/{{PAGENAME}}|ऐ पन्ना शीर्षक लेल ताकू]]', +'userpage-userdoesnotexist' => 'प्रयोक्ता खाता "$1" पंजीकृत नै अछि। +निश्चय करू जे की अहाँ ई पन्ना बनेबाक/ सम्पादित करबाक इच्छुक छी।', +'userpage-userdoesnotexist-view' => 'प्रयोक्ता खाता "$1" पंजीकृत नै अछि।', +'blocked-notice-logextract' => 'ई प्रयोक्ता अखन प्रतिबन्धित अछि। +अद्यतन प्रतिबन्धित वृत्तलेख लेखा सन्दर्भ लेल नीचाँ देल अछि:', +'clearyourcache' => "'''टिप्पणी: संरक्षणक बाद, अहाँकेँ परिवर्तन देखबा लेल अपन गवेषकक उपस्मृतिकेँ हटबए पड़त।''' +''' मोजिल्ला/ फायरफॉक्स/ सफारी:''' दाबि कऽ राखू ''शिफ्ट'' केँ ''पुनर्भारित'' क्लिक करबाक समए, वा दाबू चाहे ''Ctrl-F5'' वा ''Ctrl-R'' (''Command-R'' मैकिनटोशपर); +'''कन्करर: ''' क्लिक करू ''पुनर्भारित करू'' वा दाबू''F5''; +'''ओपेरा:''' उपस्मृति खतम करू ''Tools → Preferences''; +'''इन्टरनेट एक्सप्लोरर:''' दाबि कऽ राखू ''Ctrl'' क्लिक करबा काल ''नवीकरण,'' वा दाबू ''Ctrl-F5'' ।", +'usercssyoucanpreview' => "''' संकेत:''' प्रयोग करू \"{{int:पूर्वदृश्य देखाउ}}\" बटन अपन नव सी.एस.एस. संरक्षण जँचबाक लेल।", +'userjsyoucanpreview' => "''' संकेत:''' प्रयोग करू \"{{int:पूर्वदृश्य देखाउ}}\" बटन अपन नव जावास्क्रिप्ट संरक्षण जँचबाक लेल।", +'usercsspreview' => "''' मोन राखू जे अहाँ मात्र अपन प्रयोक्ता सी.एस.एस. क पूर्वदृश्य देख रहल छी।''' +''' ई अखन धरि संरक्षित नै भऽ सकल!'''", +'userjspreview' => "''' मोन राखू जे अहाँ मात्र अपन प्रयोक्ता जावास्क्रिप्टक पूर्वदृश्य देख रहल छी।''' +''' ई अखन धरि संरक्षित नै भऽ सकल!'''", +'sitecsspreview' => "''' मोन राखू जे अहाँ मात्र ऐ सी.एस.एस. क पूर्वदृश्य देख रहल छी।''' +''' ई अखन धरि संरक्षित नै भऽ सकल!'''", +'sitejspreview' => "''' मोन राखू जे अहाँ मात्र ऐ जावास्क्रिप्टक पूर्वदृश्य देख रहल छी।''' +''' ई अखन धरि संरक्षित नै भऽ सकल!'''", +'userinvalidcssjstitle' => "'''चेतौनी:''' ऐ मे कोनो आवरण \"\$1\" नै अछि। +बनाएल .css आ .js पन्ना लघ्वक्षरक शीर्षकक प्रयोग करैत अछि, जेना {{ns:user}}:Foo/vector.css एकर विरुद्ध {{ns:user}}:Foo/Vector.css ।", +'updated' => '(अद्यतन कएल)', +'note' => "'''टिप्पणी:'''", +'previewnote' => "'''मोन राखू ई मातर पूर्वावलोकन छी।''' +अहाँक परिवर्तन अखन धरि सँचिआएल नै गेल अछि!", +'previewconflict' => 'ई पूर्वदृश्य देखबैए उपरका सम्पादन क्षेत्रक पाठ , ई आएत जखन अहाँ संरक्षित करब।', +'session_fail_preview' => "''' दुखी छी! अहाँक सत्रक दत्तांश खतम भऽ गेल तै कारणसँ अहाँक सम्पादनक निपटारा नै भऽ सकल।''' +फेरसँ प्रयास करू। +जँ ई फेरसँ काज नै करैए, प्रयोग करू [[Special:UserLogout|निष्क्रमण]] आ फेर सम्प्रवेश करू।", +'session_fail_preview_html' => "''' दुखी छी! हम अहाँक सम्पादनक निष्पादन नै कऽ सकलहुँ कारण सत्रक दत्तांश खतम भऽ गेल।''' +''कारण {{अन्तर्जाल}} लग काँच एच.टी.एम.एल. दत्तांश सक्रिय छै, पूर्वदृश्य जावास्क्रिप्ट आक्रमणक डरसँ नुकाएल राखल गेल अछि।'' +'''जँ ई वैध सम्पादन प्रयास अछि, कृपा कऽ पुनः प्रयास करू।''' +जँ ई अखनो काज नै कऽ रहल अछि, प्रयास करू [[Special:UserLogout|निष्क्रमण कऽ रहल छी]] आ फेरसँ सम्प्रवेश।", +'token_suffix_mismatch' => "'''अहाँक सम्पादन अस्वीकार कऽ देल गेल अछि कारण अहाँक ग्राहक प्रेष्यमान अंक विधानक विराम चेन्ह सभकेँ नष्ट कऽ देलन्हि।''' +ई सम्पादन पन्नाक पाठकेँ दूषित होएबासँ बचेबा लेल अमान्य कऽ देल गेल। +ई कखनो काल होइए जखन अहाँ जाल आधारित अनाम दोसरा लेल चल सेवा प्रयुक्त करै छी।", +'editing' => 'सम्पादन होइए $1', +'editingsection' => 'सम्पादन कऽ रहल छी $1 (खण्ड)', +'editingcomment' => 'सम्पादन कऽ रहल छी $1 (नव खण्ड)', +'editconflict' => 'सम्पादन अन्तर: $1', +'explainconflict' => "जखन अहाँ एकर सम्पादन आरम्भ केने रही तखनसँ कियो आन ऐ पन्नाकेँ बदलि देलक। +उपरका पाठ क्षेत्र अखन उपस्थित पन्नाक पाठ देखबैत अछि। +अहाँक परिवर्तन निचुलका पाठ क्षेत्रमे देखाएल अछि। +अहाँकेँ अपन परिवर्तन वर्तमान पाठमे मिलाबऽ पड़त। +'''मात्र''' \"{{int:savearticle}}\" दबलापर उपरका पाठ क्षेत्रक पाठ संरक्षित हएत।", +'yourtext' => 'अहाँक पाठ', +'storedversion' => 'पेटारमे राखल संशोधन', +'nonunicodebrowser' => "'''चेतौनी: अहाँक गवेषक सार्वत्रिकाक्षरकूट सहयोगी नै अछि।''' +एकटा अस्थायी-परोक्ष तंत्रांश अहाँकेँ सुरक्षित रूपेँ पन्नाक सम्पादनमे मदति करत: गएर-अस्की अक्षर सभ षोडशमान पद्धतिमे सम्पादन बक्सामे आएत।", +'editingold' => "'''चेतौनी: अहाँ ऐ पन्नाक एकटा पुरान संशोधनक सम्पादन कऽ रहल छी।''' +जँ अहाँ एकरा संरक्षित करै छी, कोनो संशोधन जे ऐ संशोधनक बाद भेल छै से खतम भऽ जाएत।", +'yourdiff' => 'फराक', +'copyrightwarning' => 'कृपा कय बुझू जे सभटा योगदान {{SITENAME}} ई बुझि कय देल जा रहल अछि जे ई निम्नांकितक अंतर्गत अछि $2 (देखू $1 जनकारीक हेतु). जौँ अहाँ चाहैत छी जी अहाँक रचना बिना रोकटोकक संपादित नहि हो किंवा बाँटल नहि जाय, तँ एकर योगदान एतय नहि करू।
    एतय अहाँ ईहो सप्पत खाइत छी जी ई अहाँक अपन रचना छी आकि अहाँ एकरा कोनो सार्वजनिक डोमेन किंवा ओह्ने कोनो मँगनीक संदर्भ-स्थलसँ कॉपी कएने छी। < दृढ़> सर्वाधिकार सुरक्षित कार्य एतय नहि दी।!', -'templatesusedpreview' => 'एहि पूर्वप्रदर्शनमे प्रयुक्त मास्टरफाइल:', -'template-protected' => '(सुरक्षित)', +'copyrightwarning2' => "कृपा कऽ बुझू जे सभटा योगदान {{अन्तर्जाल}} योगदानकर्ता द्वारा सम्पादित, बदलल वा हटाएल जा सकैत अछि।. जौँ अहाँ चाहैत छी जी अहाँक रचना बिना रोकटोकक संपादित नहि हो किंवा बाँटल नहि जाय, तँ एकर योगदान एतय नहि करू।
    +एतय अहाँ ईहो सप्पत खाइत छी जी ई अहाँक अपन रचना छी आकि अहाँ एकरा कोनो सार्वजनिक डोमेन किंवा ओहने कोनो मँगनीक संदर्भ-स्थलसँ कॉपी कएने छी(देखू $1 वर्णन लेल)। +''' सर्वाधिकार सुरक्षित कार्य एतय नहि दी।!'''", +'longpageerror' => "'''भ्रम: पाठ जे अहाँ देने छी से $1 किलोबाइट नमगर अछि, जे अधिकतम आकार $2 किलोबाइट सँ बेशी नमगर अछि।''' +ई संरक्षित नै कएल जा सकत।", +'readonlywarning' => "''' चेतौनी: ई दत्तनिधि सुस्थापन लेल प्रतिबन्धित कएल गेल अछि, से अहाँ अपन सम्पादनकेँ अखन संरक्षित नै कऽ सकब।''' +अहाँ पाठकेँ कर्तनलेपन द्वारा एकटा टेक्स्ट संचिकामे धऽ सकै छी आ भविष्य लेल सुरक्षित राखि सकै छी। + +संचालक जे एकरा प्रतिबन्धित केलन्हि से ई कारण देलन्हि: $1", +'protectedpagewarning' => "''' चेतौनी: ई पन्ना संरक्षित अछि से खाली संचालन अधिकारयुक्त प्रयोक्ता एकरा सम्पादित कऽ सकै छथि।''' +अद्यतन वृतलेख उल्लेख नीचाँ सन्दर्भ लेल देल जा रहल अछि:", +'semiprotectedpagewarning' => "'''चेतौनी:''' ई पन्ना संरक्षित अछि से खाली पंजीकृत प्रयोक्ता एकरा सम्पादित कऽ सकै छथि। +अद्यतन वृतलेख उल्लेख नीचाँ सन्दर्भ लेल देल जा रहल अछि:", +'cascadeprotectedwarning' => "'''चेतौनी:''' ई पन्ना संरक्षित अछि से खाली संचालन अधिकारयुक्त प्रयोक्ता एकरा सम्पादित कऽ सकै छथि, कारण ई तराउपड़ी संरक्षित {{PLURAL:$1|पन्ना|पन्ना}} मे शामिल अछि।", +'titleprotectedwarning' => "'''चेतौनी: ई पन्ना संरक्षित अछि से एकरा बनेबा लेल [[Special:ListGroupRights|specific rights]] आवश्यक अछि।''' +नीचाँ ऐ लेल अद्यतन वृत्तलेख उल्लेख देल जा रहल अछि:", +'templatesused' => '{{PLURAL:$1|नमूना|नमूना सभ}} ऐ पन्नापर प्रयुक्त:', +'templatesusedpreview' => '{{PLURAL:$1|मास्टरफाइल|सभटा मास्टरफाइल}} used in this preview:ऐ पूर्वप्रदर्शनमे प्रयुक्त :', +'templatesusedsection' => '{{PLURAL:$1|नमूना|नमूना सभ}} ऐ संवर्गमे प्रयुक्त:', +'template-protected' => '(सुरक्षित)', +'template-semiprotected' => '(अर्ध-रक्षित)', +'hiddencategories' => 'ई पन्ना सदस्य अछि {{PLURAL:$1|1 नुकाएल संवर्ग|$1 नुकाएल संवर्ग सभ}}:', +'nocreatetitle' => 'पन्ना निर्माण सीमित', +'nocreatetext' => '{{अन्तर्जाल}} नव पन्ना निर्माणक क्षमताकेँ सीमित कऽ देने अछि। +अहाँ आपस जा सकै छी आ कोनो पन्नाकेँ सम्पादित कऽ सकै छी, वा [[Special:UserLogin|log in or create an account]]', +'nocreate-loggedin' => 'अहाँकेँ नव पन्ना बनेबाक अधिकार नै अछि।', +'sectioneditnotsupported-title' => 'खंड सम्पादन समर्थन नै', +'sectioneditnotsupported-text' => 'खंड सम्पादनक ऐ पन्नापर समर्थन नै', +'permissionserrors' => 'आज्ञा गल्ती', +'permissionserrorstext' => 'अहाँके ऐ लेल अनुमति नै अछि, ऐ ले {{PLURAL:$1|कारण|कारण सभ}}:', +'permissionserrorstext-withaction' => 'अहाँके अनुमति नै अछि $2 लेल, ऐ लेल {{PLURAL:$1|कारण|कारण सभ}}:', +'recreate-moveddeleted-warn' => "'''चेतौनी''': अहाँ फेरसँ ओ पन्ना बना रहल छी जे पहिने मेटा देल गेल छै।''' + +अहाँ विचारू जे की ई सम्पादन केनाइ उचित अछि। +ऐ पन्नाक मेटाएल बला आ हटाएल वृत्तलेख एतए सुविधा लेल देल जा रहल अछि:", +'moveddeleted-notice' => 'ई पन्ना मेटा देल गेल अछि। +ऐ पन्ना लेल मेटाएल आ हटाएल बला वृत्तलेख सन्दर्भ लेल नीचाँ देल गेल अछि।', +'log-fulllog' => 'सभटा वृत्तलेख देखू', +'edit-hook-aborted' => 'सम्पादन नोकसीसँ खतम भेल। +ई कोनो कारण नै देलक।', +'edit-gone-missing' => 'पन्ना अद्यतन नै भऽ सकल। +लगैए जे ई मेटा देल गेल अछि।', +'edit-conflict' => 'सम्पादन अन्तर', +'edit-no-change' => 'अहाँक सम्पादनपर ध्यान नै देल गेल, कारण ऐ सँ पाठमे कोनो परिवर्तन नै आएल।', +'edit-already-exists' => 'नव पन्नाक निर्माण नै भऽ सकल। +ई पहिनहियेसँ वर्तमान अछि।', + +# Parser/template warnings +'expensive-parserfunction-warning' => "'''चेतौनी:''' ई पन्ना बड्ड बेसी महग विभाजक प्रकार्य आह्वान करैत अछि। + एकरा $2 सँ कम {{PLURAL:$2|call|calls}}, ओतऽ {{PLURAL:$1|ई अछि $1 call|ई सभ अछि $1 calls}}", +'expensive-parserfunction-category' => 'बड बेसी महग विभाजक आह्वानबला पन्ना सभ', +'post-expand-template-inclusion-warning' => "'''चेतौनी:''' नमूना लेबाक आकार बड्ड पैघ अछि। +किछु नमूना नै लेल जा सकत।", +'post-expand-template-inclusion-category' => 'पन्ना सभ जतए नमूना लेबाक आकार बढ़ि गेल', +'post-expand-template-argument-warning' => "'''चेतौनी''' ऐ पन्नामे नै बेशी तँ एकटा एहेन नमूना निरुपक अछि जकर बड्ड पैघ विस्तार आकार छै। +ई निरूपक सभ हटा देल गेल अछि।", +'post-expand-template-argument-category' => 'छोड़ल नमूना निरूपक बला पन्ना सभ', +'parser-template-loop-warning' => 'नमूना परिक्रम भेटल: [[$1]]', +'parser-template-recursion-depth-warning' => 'नमूना प्रत्यावर्तन गहीर सीमा पार केलक ($1)', +'language-converter-depth-warning' => 'भाषान्तर गहीर सीमा पार केलक ($1)', + +# "Undo" feature +'undo-success' => "ई सम्पादन पूर्ववत बदलल जा सकैए। +कृपा क' नीचाँक तुलनाक जाँच करू ई देखैले जे ई वएह भेल अछि जे अहाँ चाहै छलहुँ, आ तखन सम्पादन ख़तम करबा लेल नीचाँक परिवर्तन सुरक्षित करू ।", +'undo-failure' => 'मध्यवर्ती विरोधी सम्पादनक कारण ऐ सम्पादनकेँ खतम नै कएल जा सकैए।', +'undo-norev' => 'ई सम्पादन खतम नै कएला जा सकैए कारण ई अछि नै वा मेटा देल गेल अछि।', +'undo-summary' => '$1 संशोधन खतम करू [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]])', + +# Account creation failure +'cantcreateaccounttitle' => 'खाता नै बना सकल', +'cantcreateaccount-text' => "('''$1''') अनिकेत पतासँ खाता निर्माण प्रतिबन्धित कएल गेल [[User:$3|$3]]। +$3 द्वारा देल कारण अछि ''$2''", # History pages -'revisionasof' => 'अंतिम परिवर्त्तन $1', -'previousrevision' => '←पुरान परिवर्त्तन', -'cur' => 'हीन', -'last' => 'अंतिम', +'viewpagelogs' => 'ऐ पन्नाक वृत्तलेख सभ देखू', +'nohistory' => 'ऐ पन्ना लेल कोनो सम्पादन इतिहास नै अछि।', +'currentrev' => 'नूतन संशोधन', +'currentrev-asof' => '$1 क समकालिक तखुनका संशोधन', +'revisionasof' => 'अंतिम परिवर्त्तन $1', +'revision-info' => '$2 द्वारा कएल संशोधन अछि $1', +'previousrevision' => '←पुरान परिवर्त्तन', +'nextrevision' => 'नूतन संशोधन →', +'currentrevisionlink' => 'नूतन संशोधन', +'cur' => 'हीन', +'next' => 'आगाँ', +'last' => 'अंतिम', +'page_first' => 'पहिल', +'page_last' => 'अन्तिम', +'histlegend' => "फाइल तुलना तंत्रांशक चयन: संशोधन तुलनाक रेडियो बक्शाकेँ चिन्हित करू आ एन्टर बटन क्लिक करू वा सभसँ नीचाँक बटन क्लिक करू।
    +कहबी: '''({{int:cur}})''' = अद्यतन संशोधनसँ अन्तर, '''({{int:last}})''' = अद्यतनसँ पहिलुका संशोधनसँ अन्तर, '''{{int:minoreditletter}}''' = मामूली सम्पादन।", +'history-fieldset-title' => 'इतिहास खंघारू', +'history-show-deleted' => 'खाली मेटाएल', +'histfirst' => 'सभसँ पुरान', +'histlast' => 'आइ-काल्हिक', +'historysize' => '({{PLURAL:$1|1 अष्टक|$1 अष्टक}})', +'historyempty' => '(रिक्त)', + +# Revision feed +'history-feed-title' => 'संशोधन इतिहास', +'history-feed-description' => 'ऐ पन्नाक विकीपर सम्पादन इतिहास', +'history-feed-item-nocomment' => '$2 पर $1', +'history-feed-empty' => 'आग्रह कएल पन्ना नै अछि। +ई विकीसँ चाहे मेटा देल गेल अछि, वा एकर नाम बदलि देल गेल अछि। +प्रयास करू [[Special:Search|searching on the wiki]] सम्बन्धित नव पन्ना सभ लेल।', + +# Revision deletion +'rev-deleted-comment' => '(सम्पादन इतिहास हटाएल गेल)', +'rev-deleted-user' => '(प्रयोक्तानाम हटाएल गेल)', +'rev-deleted-event' => '(वृतलेख कार्य हटाएल गेल)', +'rev-deleted-user-contribs' => '[प्रयोक्तानाम वा अनिकेत हटाएल गेल- योगदानमे नुकाएल सम्पादित करू]', +'rev-deleted-text-permission' => "ऐ पन्नाक संशोधन '''मेटा देल गेल'''। +वर्णन देखि सकै छी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] मे।", +'rev-deleted-text-unhide' => "ई पन्ना सम्पादन '''मेटाएल''' गेल। +वर्णन ताकि सकै छी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] मे। +संचालकक रूपमे अहाँ अखनो [$1 ई संशोधन देखू] जँ अहाँ आगाँ बढ़ऽ चाहै छी।", +'rev-suppressed-text-unhide' => "'''ई पन्ना संशोधन '''दबाएल''' गेल। +वर्णन ताकि सकै छी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log] मे। +संचालकक रूपमे अहाँ अखनो [$1 ई संशोधन देखू] जँ अहाँ आगाँ बढ़ऽ चाहै छी।", +'rev-deleted-text-view' => "ई पन्ना संशोधन '''मेटाएल''' गेल। +संचालकक रूपमे अहाँ एकरा देख सकै छी; वर्ण भेट सकैए [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] मे।", +'rev-suppressed-text-view' => "ई पन्ना संशोधन '''दबाएल''' गेल। +संचालकक रूपमे अहाँ एकरा देख सकै छी; वर्ण भेट सकैए [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log]मे।", +'rev-deleted-no-diff' => "ऐ पन्नाक तुलना निर्धारक अहाँ नै देख सकै छी कारण कोनो एकटा संशोधन '''मेटा देल गेल''' अछि। +वर्णन देखि सकै छी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] मे।", +'rev-suppressed-no-diff' => "अहाँ तुलना निर्धारक नै देख सकै छी कारण कोनो एकटा संशोधन '''मेटाएल''' गेल अछि।", +'rev-deleted-unhide-diff' => "ऐ तुलना निर्धारकक कोनो एकटा संशोधन '''मेटाएल''' गेल अछि। +वर्णन ताकि सकै छी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] मे। +संचालकक रूपमे अहाँ अखनो [$1 ई तुलना निर्धारक देखू] जँ अहाँ आगाँ बढ़ऽ चाहै छी।", +'rev-suppressed-unhide-diff' => "ऐ तुलना निर्धारकक कोनो एकटा संशोधन '''दबाएल''' गेल अछि। +वर्णन ताकि सकै छी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log] मे। +संचालकक रूपमे अहाँ अखनो [$1 ई तुलना निर्धारक देखू] जँ अहाँ आगाँ बढ़ऽ चाहै छी।", +'rev-deleted-diff-view' => "ई पन्ना संशोधनऐ तुलना निर्धारकक कोनो एकटा संशोधन '''मेटाएल''' गेल अछि। +संचालकक रूपमे अहाँ एकरा देख सकै छी; वर्ण भेट सकैए [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] मे।", +'rev-suppressed-diff-view' => "ऐ तुलना निर्धारकक कोनो एकटा संशोधन '''दबाएल''' गेल अछि। +संचालकक रूपमे अहाँ एकरा देख सकै छी; वर्णन भेट सकैए [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log]मे।", +'rev-delundel' => 'देखाउ/ नुकाउ', +'rev-showdeleted' => 'देखाउ', +'revisiondelete' => 'मेटाउ / संशोधन फेरसँ आनू', +'revdelete-nooldid-title' => 'अमान्य लक्ष्य संशोधन', +'revdelete-nooldid-text' => 'अहाँ चाहे तँ ऐ प्रकार्यक निष्पादन लेल कोनो विशेष लक्ष्य संशोधन (संशोधन सभ) नै तँए-तफसिला केने छी, विशेष संशोधन नै उपस्थित अछि, वा अहाँ वर्तमान संशोधनकेँ नुकेबाक प्रयास कऽ रहल छी।', +'revdelete-nologtype-title' => 'कोनो वृत्तलेख प्रकार नै देल गेल', +'revdelete-nologtype-text' => 'ऐ प्रकार्यकेँ सम्पन्न करबा लेल अहाँ कोनो विशिष्ट वृत्तलेख प्रकार नै देने छी।', +'revdelete-nologid-title' => 'अमान्य वृत्तलेख प्रविष्टि', +'revdelete-nologid-text' => 'अहाँ ऐ प्रकार्यकेँ करबा लेल चाहे तँ कोनो लक्ष्य वृत्तलेख घटनाक उल्लेख नै केने छी वा ओ विशिष्ट प्रविष्टि अछिये नै।', +'revdelete-no-file' => 'विषिष्ट संचिका अछिये नै।', +'revdelete-show-file-confirm' => 'की अहाँ आश्वस्त छी जे अहाँ संचिकाक मेटाएल संशोधन देखऽ चाहै छी "$1" ऐ सँ $2 एतऽ $3?', +'revdelete-show-file-submit' => 'हँ', +'revdelete-selected' => "'''{{PLURAL:$2|चुनल संशोधन|चुनल संशोधन सभ}} एकर [[:$1]]:'''", +'logdelete-selected' => "'''{{PLURAL:$1|चुनल वृत्तलेख घटना|चुनल वृत्तलेख घटना सभ}}:'''", +'revdelete-text' => "'''मेटाएल संशोधन सभ आ घटना सभ पन्नाक इतिहास आ वृत्तलेखमे आएत, मुदा ओकर सूचीक किछु भाग सामान्य लोक लेल उपलब्ध नै रहत।''' +{{अन्तर्जाल}} पर दोसर संचालक लग अखनो नुकाएल सूची उपलब्ध छन्हि आ ओ ओकरा फेरसँ आनि सकै छथि अही मध्यस्थक द्वारा, आ से हएत जँ अतिरिक्त प्रतिबन्ध लागू रहत।", +'revdelete-confirm' => 'कृपा कऽ आश्वस्त भऽ जाउ जे अहाँ ई करऽ चाहै छी, अहाँकेँ एकर परिणामक जनतब अछि, आ अहाँ एकरा [[{{MediaWiki:Policy-url}}|निअम]] क अनुसार कऽ रहल छी।', +'revdelete-suppress-text' => "दबाबैबला काज '''मात्र''' ऐ सभ स्थितिमे प्रयोग करू: +* मानहानिक सम्भावनाबला सूचना +* भ्रमयुक्त व्यक्तिगत सूचना +*: ''घरक पता आ टेलीफोन नम्बर, सामाजिक सुरक्षा संख्या, आदि।''", +'revdelete-legend' => 'दृश्यतापर प्रतिबन्धक सीमा लगाउ', +'revdelete-hide-text' => 'संशोधन पाठ नुकाउ', +'revdelete-hide-image' => 'संचिकाक पाठ नुकाउ', +'revdelete-hide-name' => 'क्रिया आ लक्ष्य नुकाउ', +'revdelete-hide-comment' => 'सम्पादन सार नुकाउ', +'revdelete-hide-user' => 'सम्पादकक प्रयोक्तानाम/ अनिकेत नुकाउ', +'revdelete-hide-restricted' => 'संचालक आ दोसरासँ दत्तांश दबाउ', +'revdelete-radio-same' => '(नै बदलू)', +'revdelete-radio-set' => 'हँ', +'revdelete-radio-unset' => 'नै', +'revdelete-suppress' => 'संचालक आ दोसरा लेल दत्तांश दबाउ', +'revdelete-unsuppress' => 'पुनर्स्थापित संशोधल लेल प्रतिबन्ध हटाउ', +'revdelete-log' => 'कारण:', +'revdelete-submit' => 'किछु चुनलपर लागू करू{{PLURAL:$1|संशोधन|संशोधन सभ}}', +'revdelete-logentry' => '"[[$1]]"क बदलल संशोधन दृश्यता', +'logdelete-logentry' => '"[[$1]]"क बदलल घटना दृश्यता', +'revdelete-success' => "'''संशोधन दृश्यता सफलतापूर्वक अद्यतन कएल गेल।'''", +'revdelete-failure' => "$1'''संशोधन दृश्यता अद्यतन नै कएल जा सकल:'''", +'logdelete-success' => "'''वृत्तलेख दृश्यता सफलतासँ निर्धारित भेल।'''", +'logdelete-failure' => "'''वृत्तलेख दृश्यता निर्धारित नै भऽ सकल।'''$1", +'revdel-restore' => 'दृष्टिकुशलता बदलू', +'revdel-restore-deleted' => 'मेटाएल संशोधन सभ', +'revdel-restore-visible' => 'देखाइ दैत संशोधन सभ', +'pagehist' => 'पन्नाक इतिहास', +'deletedhist' => 'मेटाएल इतिहास', +'revdelete-content' => 'विषय सूची', +'revdelete-summary' => 'सम्पादन सारांश', +'revdelete-uname' => 'प्रयोक्तानाम', +'revdelete-restricted' => 'संचालक लेल प्रायोगिक प्रतिबन्ध', +'revdelete-unrestricted' => 'संचालक लेल हटाओल प्रतिबन्ध', +'revdelete-hid' => 'नुकाउ $1', +'revdelete-unhid' => 'आनू $1', +'revdelete-log-message' => '$2 लेल $1{{PLURAL:$2|संशोधन|संशोधन सभ}}', +'logdelete-log-message' => '$2 लेल $1 {{PLURAL:$2|घटना|घटना सभ}}', +'revdelete-hide-current' => 'तिथि $2, $1 क अनुक्रमकेँ नुकेबा काल भ्रम: ई वर्तमान संशोधन छी। +ई नुकाएल नै जा सकैए।', +'revdelete-show-no-access' => 'तिथि $2, $1क बौस्तुक देखेबामे भ्रम: ई बौस्तु "प्रतिबन्धित" चिन्हित कएल गेल अछि।', +'revdelete-modify-no-access' => 'तिथि $2, $1क बौस्तुक संशोधनमे भ्रम: ई बौस्तु "प्रतिबन्धित" चिन्हित कएल गेल अछि। +अहाँकेँ एकरा लग लागि नै अछि।', +'revdelete-modify-missing' => 'बौस्तुक चेन्ह-संकेत $1 मे संशोधन भ्रम: ई दत्तनिधिमे नै अछि।', +'revdelete-no-change' => "''' चेतौनी ''' बौस्तु तिथि $2, $1 पहिनहियेसँ आग्रह कएल दृश्य विकल्पयुक्त अछि।", +'revdelete-concurrent-change' => 'बौस्ति तिथि $2, $1 क संशोधनमे भ्रम: एकर स्थितिमे ककरो दोसर द्वारा कएल परिवर्तन देखल गेल जखन अहाँ एकरा संशोधित कऽ रहल छलहुँ। +कृपा कऽ वृत्तलेख सभक जाँच करू।', +'revdelete-only-restricted' => 'ई संदेश संशोधन-मेटाएब विशिष्टताक भाग अछि। परिमिति: + $1 - दिनांक + $2 - तिथि', +'revdelete-reason-dropdown' => '*सामान्य मेटेबाक कारण सभ +** सर्वाधिकारक उल्लंघन +** अनुचित व्यक्तिगत सूचना +** सम्भावित मानहानिक सूचना', +'revdelete-otherreason' => 'दोसर/ अतिरिक्त कारण:', +'revdelete-reasonotherlist' => 'दोसर कारण', +'revdelete-edit-reasonlist' => 'मेटेबाक कारणक सम्पादन करू', +'revdelete-offender' => 'संशोधन केनिहार:', + +# Suppression log +'suppressionlog' => 'दबाएलबला वृत्तलेख', + +# History merging +'mergehistory' => 'मिज्झर भेल पन्ना सभक इतिहास', +'mergehistory-header' => 'ई पन्ना अहाँकेँ एकटा स्रोत पन्नाक एकटा नव पन्नामे संशोधन इतिहासकेँ मिज्झर करबाक अनुमति दैत अछि। +सुनिश्चित होउ जे ई परिवर्तन ऐतिहासिक पन्ना सांतत्य स्थापित करत।', +'mergehistory-box' => 'दू पन्नाक संशोधनकेँ मिज्झर करू।', +'mergehistory-from' => 'मूल पन्ना:', +'mergehistory-into' => 'लक्ष्य पन्ना:', +'mergehistory-list' => 'मिज्झर योग्य सम्पादन इतिहास', +'mergehistory-merge' => '[[:$1]] एकर संशोधन सभकेँ [[:$2]] मे मिलाएल जा सकैए। +रेडियो बटन स्तम्भक प्रयोग मात्र संशोधनकेँ निर्धारित समए वा ओइसँ पहिने मिज्झर करबामे प्रयोग करू। +मोन राखू जे उपर नीचाँक लागिक प्रयोग ऐ स्तम्भकेँ पुनर्स्थापित कऽ देत।', +'mergehistory-go' => 'मिज्झर होइ योग्य सम्पादन सभकेँ देखाउ', +'mergehistory-submit' => 'संशोधन सभकेँ मिज्झर करू', +'mergehistory-empty' => 'कोनो संशोधन मिज्झर नै कएल जा सकैए।', +'mergehistory-success' => '$3 {{PLURAL:$3|संशोधन|संशोधन सभ}} एकर [[:$1]] सफलता पूर्वक मिज्झर कएल गेल [[:$2]] मे।', +'mergehistory-fail' => 'इतिहासक मिश्रणकेँ नै कऽ सकल, कृपा कऽ पन्ना आ समए परिमितिकेँ फेरसँ जाँचू।', +'mergehistory-no-source' => 'स्रोत पन्ना $1 नै अछि।', +'mergehistory-no-destination' => 'लक्ष्य पन्ना $1 नै अछि।', +'mergehistory-invalid-source' => 'स्रोत पन्ना एकटा मान्य शीर्षक हेबाक चाही।', +'mergehistory-invalid-destination' => 'लक्ष्य पन्ना एकटा मान्य शीर्षक हेबाक चाही।', +'mergehistory-autocomment' => '[[:$1]] केँ [[:$2]] मे मिलाएल गेल।', +'mergehistory-comment' => '[[:$1]] केँ [[:$2]] मे मिलाएल गेल: $3', +'mergehistory-same-destination' => 'स्रोत आ लक्ष्य पन्ना सभ एक्के नै भऽ सकैए', +'mergehistory-reason' => 'कारण:', + +# Merge log +'mergelog' => 'मिज्झरबला वृत्तलेख', +'pagemerge-logentry' => 'मिज्झर केलौं [[$1]]केँ [[$2]] मे (संशोधन $3 धरि)', +'revertmerge' => 'नै मिज्झर', +'mergelogpagetext' => 'नीचाँ एक पन्ना इतिहासक दोसरमे अद्यतन मिश्रणक सूची अछि।', # Diffs -'lineno' => 'पंक्त्ति $1:', -'editundo' => 'असंपादन', +'history-title' => '"$1" क संशोधन इतिहास', +'difference' => '(नव संशोधन सभक बीच अन्तर)', +'difference-multipage' => '(पन्ना सभक बीचमे अन्तर)', +'lineno' => 'पंक्त्ति $1:', +'compareselectedversions' => 'चयन कएल संशोधन सभक तुलना करू', +'showhideselectedversions' => 'देखाउ/ नुकाउ चयनित संशोधन सभ', +'editundo' => 'असंपादन', +'diff-multi' => '({{PLURAL:$1|मध्यबला संशोधन|$1 मध्यबला संशोधन सभ}} द्वारा {{PLURAL:$2|एकटा प्रयोक्ता|$2 प्रयोक्ता सभ}} नै देखाएल)', +'diff-multi-manyusers' => '({{PLURAL:$1|एकटा मध्यस्थ संशोधन|$1 मध्यस्थ संशोधन सभ}} $2 सँ बेसी {{PLURAL:$2|प्रयोक्ता|प्रयोक्ता सभ}} नै देखाएल)', # Search results -'powersearch' => 'त्वरित खोज', +'searchresults' => 'तकबाक फलाफल', +'searchresults-title' => 'तकबाक फलाफल "$1" लेल', +'searchresulttext' => 'तकबा लेल विशेष सूचना {{अन्तर्जालक नाम}}, देखू [[{{MediaWiki:Helppage}}|{{int:help}}]].', +'searchsubtitle' => 'अहाँ तकलौं ऐ लेल \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|"$1" सँ शुरू होइबला सभा पृष्ठ]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|सभ लिंक जकर लागि अछि "$1" सँ ]])', +'searchsubtitleinvalid' => "अहाँ तकलहुँ '''$1''' लेल", +'toomanymatches' => 'कतेको प्रयास आपस भेल, कृपा कऽ दोसर अभ्यर्थनासँ प्रयास करू।', +'titlematches' => 'पन्ना शीर्ष मेल', +'notitlematches' => 'कोनो पन्नाक शीर्ष मेल नै खाइए', +'textmatches' => 'पन्ना पाठ मेल', +'notextmatches' => 'पन्नाक पाठक किछु मेल नै खाइए', +'prevn' => 'पछिला {{PLURAL:$1|$1}}', +'nextn' => 'आगाँ {{PLURAL:$1|$1}}', +'prevn-title' => 'पहिलुका $1 {{PLURAL:$1|परिणाम|परिणाम सभ}}', +'nextn-title' => 'आगाँ $1 {{PLURAL:$1|परिणाम|परिणाम सभ}}', +'shown-title' => 'प्रति पन्ना $1 {{PLURAL:$1|परिणाम|परिणाम सभ}} देखाउ', +'viewprevnext' => 'देखू ($1 {{int:pipe-separator}} $2) ($3)', +'searchmenu-legend' => 'खोज विकल्प', +'searchmenu-exists' => "'''ऐ विकीपर एकटा पन्ना अछि \"[[:\$1]]\" नामसँ।'''", +'searchmenu-new' => "''' पन्ना निर्माण \"[[:\$1]]\" ऐ विकीपर !'''", +'searchhelp-url' => 'Help: विषय सूची', +'searchmenu-prefix' => '[[Special:PrefixIndex/$1|ऐ उपसर्गक पन्ना सभकेँ देखू]]', +'searchprofile-articles' => 'अनुक्रम पन्ना सभ', +'searchprofile-project' => 'सहायता आ परियोजना पन्ना सभ', +'searchprofile-images' => 'दृश्य-श्रव्य', +'searchprofile-everything' => 'सभटा', +'searchprofile-advanced' => 'विशिष्ट', +'searchprofile-articles-tooltip' => '$1 मे ताकू', +'searchprofile-project-tooltip' => '$1 मे ताकू', +'searchprofile-images-tooltip' => 'संचिका सभ लेल ताकू', +'searchprofile-everything-tooltip' => 'सभटा सामिग्रीमे ताकू (चर्चा पन्ना सहित)', +'searchprofile-advanced-tooltip' => 'बनाएल नामस्थान सभमे ताकू', +'search-result-size' => '$1 ({{PLURAL:$2|1 शब्द|$2 शब्द सभ}})', +'search-result-category-size' => '{{PLURAL:$1|1 सदस्य|$1 सदस्य}} ({{PLURAL:$2|1 उपसंवर्ग|$2 उपसंवर्ग}}, {{PLURAL:$3|1 संचिका|$3 संचिका}})', +'search-result-score' => 'काज: $1%', +'search-redirect' => '(रस्ता बदलेन $1)', +'search-section' => '(शाखा $1)', +'search-suggest' => 'अहाँ मोने अछि जे:$1', +'search-interwiki-caption' => 'सम्बन्धित परियोजना सभ', +'search-interwiki-default' => '$1 सभटा परिणाम:', +'search-interwiki-more' => '(आर)', +'search-mwsuggest-enabled' => 'सलाहक संग', +'search-mwsuggest-disabled' => 'कोनो सलाह नै', +'search-relatedarticle' => 'सम्बन्धी', +'mwsuggest-disable' => 'AJAX सलाह अमान्य करू', +'searcheverything-enable' => 'सभ नामस्थान सभमे ताकू', +'searchrelated' => 'सम्बन्धी', +'searchall' => 'सभटा', +'showingresults' => "नीचाँ एतऽ धरि {{PLURAL:$1|'''1''' परिणाम|'''$1''' परिणाम सभ}} #'''$2''' सँ प्रारम्भ भऽ कऽ।", +'showingresultsnum' => "नीचाँ देखबै छी {{PLURAL:$3|'''1''' परिणाम|'''$3''' परिणाम सभ}} #'''$2'''सँ प्रारम्भ भऽ कऽ।", +'showingresultsheader' => "{{PLURAL:$5|परिणाम '''$1''' एकर '''$3'''|परिणाम सभ '''$1 - $2''' एकर '''$3'''}} ऐ लेल '''$4'''", +'nonefound' => "'''टिप्पणी''': मातर किछुए निर्धारक मूलभूत रूपेँ ताकल जाइए। +सभ सामिग्रीमे (माने मंतव्य पन्ना, नमूना, इत्यादि) तकबाले अपन उत्कंठामे उपसर्ग ''all:'' लगाउ , नै तँ इच्छित निर्धारककेँ उपसर्ग सन प्रयुक्त करू।", +'search-nonefound' => 'अभ्यर्थनासँ मेल खाइत कोनो परिणाम नै भेटल।', +'powersearch' => 'त्वरित खोज', +'powersearch-legend' => 'विशेष खोज', +'powersearch-ns' => 'निर्धारकमे खोज', +'powersearch-redir' => 'रस्ता बदलेनक सूची', +'powersearch-field' => 'ऐ लेल ताकू', +'powersearch-togglelabel' => 'जाँचू:', +'powersearch-toggleall' => 'सभटा', +'powersearch-togglenone' => 'कोनो नै', +'search-external' => 'बाह्य खोज', +'searchdisabled' => '{{अन्तर्जाल}} खोज बन्न अछि। +अहाँक गूगलक माध्यमसँ ऐ बीच ताकि सकै छी। +मोन राखू जे तकर विवरणी {{अन्तर्जाल}} सामिग्री समयातीत भऽ सकैए।', + +# Quickbar +'qbsettings' => 'त्वरित दृश्य', +'qbsettings-none' => 'कोनो नै', +'qbsettings-fixedleft' => 'वाम कात सटल', +'qbsettings-fixedright' => 'दहिन दिस सटल', +'qbsettings-floatingleft' => 'वाम कात घुमैत', +'qbsettings-floatingright' => 'दहिन कात घुमैत', # Preferences page -'preferences' => 'विकल्प', -'mypreferences' => 'हमर नीकगर', +'preferences' => 'विकल्प', +'mypreferences' => 'हमर खासमखास', +'prefs-edits' => 'सम्पादनक संख्या', +'prefsnologin' => 'सम्प्रवेशित नै', +'prefsnologintext' => 'अहाँ [{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logged in] प्रयोक्ता विकल्प निर्धारण लेल प्रयोग करू।', +'changepassword' => 'कूटशब्द बदलू', +'prefs-skin' => 'रूप', +'skin-preview' => 'पूर्वावलोकन', +'datedefault' => 'कोनो मोनपसंद नै', +'prefs-datetime' => 'दिन आ तिथि', +'prefs-personal' => 'प्रयोक्ता परिचय', +'prefs-rc' => 'हालक परिवर्तन', +'prefs-watchlist' => 'साकांक्ष-सूची', +'prefs-watchlist-days' => 'साकांक्ष-सूचीमे एतेक दिन देखाएल:', +'prefs-watchlist-days-max' => 'बेसीसँ बेसी ७ दिन', +'prefs-watchlist-edits' => 'बढ़ाएल साकांक्ष सूचीमे अधिकतम परिवर्तन देखाएब:', +'prefs-watchlist-edits-max' => 'बेसीसँ बेसी:१०००', +'prefs-watchlist-token' => 'साकांक्ष-सूची खेप:', +'prefs-misc' => 'आर', +'prefs-resetpass' => 'कूटशब्द बदलू', +'prefs-email' => 'ई-पत्र चुनाव', +'prefs-rendering' => 'मुँहकान', +'saveprefs' => 'सुरक्षित करू', +'resetprefs' => 'बिन सुरक्षितकेँ हटाउ', +'restoreprefs' => 'सभटा पूर्वनिर्धारित चयनकेँ फेरसँ आनू', +'prefs-editing' => 'सम्पादन कऽ रहल छी', +'prefs-edit-boxsize' => 'सम्पादन खिड़कीक आकार', +'rows' => 'पाँती सभ', +'columns' => 'स्तम्भ सभ', +'searchresultshead' => 'ताकू', +'resultsperpage' => 'एक पन्ना एतेक बेर देखल गेल:', +'stub-threshold' => 'सीमा काटल लागि सँचियाएल (अष्टक):', +'stub-threshold-disabled' => 'अशक्त कएल', +'recentchangesdays' => 'आइ-काल्हिक परिवर्तनमे कतेक दिन देखाएल गेल:', +'recentchangesdays-max' => 'बेसीसँ बेसी $1 {{PLURAL:$1|दिन|दिन}}', +'recentchangescount' => 'पूर्वनिर्धारित रूपेँ एतेक सम्पादन देखाएल गेल:', +'prefs-help-recentchangescount' => 'ऐ मे सम्मिलित अछि आइ-काल्हिक परिवर्तन, पन्नाक इतिहास आ वृत्तलेख', +'prefs-help-watchlist-token' => 'ऐ क्षेत्रमे एकटा गुप्त चाभीसँ भरलापर अहाँक साकांक्ष सूची लेल एकटा आर.एस.एस.फीडक निर्माण हएत। +जकरा लग ऐ क्षेत्रक ई चाभी छै ओ अहाँक साकांक्ष सूचीकेँ पढ़ि सकता, से एकटा सुरक्षित मान चुनू। +एतए एकटा अनियत रूपेँ उत्पादित मान अछि जकर अहाँ प्रयोग कऽ सकै छी: $1', +'savedprefs' => 'अहाँक पसिन्न सुरक्षित कएल गेल', +'timezonelegend' => 'समय क्षेत्र', +'localtime' => 'स्थानीय समए:', +'timezoneuseoffset' => 'आन (संतुलन केनिहारक निर्देश करू)', +'timezoneoffset' => 'संतुलन घटक¹:', +'servertime' => 'वितरक समए:', +'guesstimezone' => 'गवेषकक प्रयोग कऽ भरू', +'timezoneregion-africa' => 'अफ्रीका', +'timezoneregion-america' => 'अमेरिका', +'timezoneregion-antarctica' => 'अंटार्कटिका', +'timezoneregion-arctic' => 'आर्कटिक', +'timezoneregion-asia' => 'एशिया', +'timezoneregion-atlantic' => 'अटलांटिक महासागर', +'timezoneregion-australia' => 'ऑस्ट्रेलिया', +'timezoneregion-europe' => 'यूरोप', +'timezoneregion-indian' => 'हिंद महासागर', +'timezoneregion-pacific' => 'प्रशांत महासागर', +'allowemail' => 'आन प्रयोक्ताक ई-पत्र समर्थ करू', +'prefs-searchoptions' => 'खोज विकल्प', +'prefs-namespaces' => 'नामस्थान सभ', +'defaultns' => 'नै तँ ऐ नामस्थान सभमे ताकू:', +'default' => 'पूर्वनिर्धारित', +'prefs-files' => 'संचिका सभ', +'prefs-custom-css' => 'खास सी.एस.एस.', +'prefs-custom-js' => 'खास जावास्क्रिप्ट', +'prefs-common-css-js' => 'सभ रूप लेल साझी सी.एस.एस./ जावास्क्रिप्ट:', +'prefs-reset-intro' => 'अहाँ ऐ पन्नाक प्रयोग अपन विकल्पकेँ पूर्वनिविष्ट रूपेँ जाल पुनर्निधारित करबा लेल कऽ सकै छी। +ई बदलल नै जा सकैए।', +'prefs-emailconfirm-label' => 'ई-पत्र पुष्टि:', +'prefs-textboxsize' => 'सम्पादन खिड़कीक आकार', +'youremail' => 'ई-पत्र:', +'username' => 'प्रयोक्तानाम:', +'uid' => 'प्रयोक्ताक पहिचान:', +'prefs-memberingroups' => '{{PLURAL:$1|संवर्ग|संवर्ग सभ}}:एकर सदस्य', +'prefs-registration' => 'पंजीकरणक समए:', +'yourrealname' => 'असली नाम:', +'yourlanguage' => 'भाषा:', +'yournick' => 'नव पहिचान:', +'prefs-help-signature' => 'वार्ता पन्ना सभपर टिप्पणी "~~~~" द्वारा हस्ताक्षरित हुअए जे अहाँक हस्ताक्षर आ समय-संकेतसँ मेल खाए।', +'badsig' => 'अमान्य प्रारम्भिक पहिचान। +एच.टी.एम.एल.चेन्ह जाँचू।', +'badsiglength' => 'अहाँक हस्ताक्षर बड्ड पैघ अछि। +ई $1 सँ बेसी नै हेबाक चाही {{PLURAL:$1|वर्ण|वर्ण}} पैघ।', +'yourgender' => 'पुरुख आकि स्त्री', +'gender-unknown' => 'अज्ञात', +'gender-male' => 'पुरुख', +'gender-female' => 'महिला', +'prefs-help-gender' => 'वैकल्पिक: तंत्रांश द्वारा लिंग निरपेक्ष सम्बोधन लेल प्रयुक्त। +ई सूचना सार्वजनिक हएत।', +'email' => 'ई-पत्र', +'prefs-help-realname' => 'मूल नाम वैकल्पिक अछि। +जँ अहाँ एकरा देबा लेल प्रयोग करै छी, ई अहाँकेँ काजक श्रेय देबा लेल एकर प्रयोग कएल जाएत।', +'prefs-help-email-required' => 'ई-पत्र संकेत जरूरी अछि।', +'prefs-info' => 'न्यूनतम जानकारी', +'prefs-i18n' => 'अंतर्राष्ट्रियकरण', +'prefs-signature' => 'चेन्हासी', +'prefs-dateformat' => 'तिथिक बगेबानी', +'prefs-timeoffset' => 'समए संशोधक', +'prefs-advancedediting' => 'विशिष्ट विकल्प सभ', +'prefs-advancedrc' => 'विशिष्ट विकल्प सभ', +'prefs-advancedrendering' => 'विशिष्ट विकल्प सभ', +'prefs-advancedsearchoptions' => 'विशिष्ट विकल्प सभ', +'prefs-advancedwatchlist' => 'विशिष्ट विकल्प सभ', +'prefs-displayrc' => 'दृश्य विकल्प सभ', +'prefs-displaysearchoptions' => 'दृश्य विकल्प सभ', +'prefs-displaywatchlist' => 'दृश्य विकल्प सभ', +'prefs-diffs' => 'अन्तर निर्धारक सभ', + +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'ई-पत्र संकेत मान्य बुझाइत अछि', +'email-address-validity-invalid' => 'एकटा मान्य ई-पत्र संकेत लिखू', + +# User rights +'userrights' => 'प्रयोक्ता अधिकारक प्रबन्धन', +'userrights-lookup-user' => 'प्रयोक्ता संवर्ग सभक प्रबन्ध करू', +'userrights-user-editname' => 'एकटा प्रयोक्तानाम लिखू:', +'editusergroup' => 'प्रयोक्ता संवर्ग सभक सम्पादन करू', +'editinguser' => "'''[[User:$1|$1]]''' क प्रयोक्ता अधिकार बदलल जा रहल अछि '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])", +'userrights-editusergroup' => 'प्रयोक्ता संवर्ग सभक सम्पादन करू', +'saveusergroups' => 'प्रयोक्ता संवर्ग सभकेँ सुरक्षित करू', +'userrights-groupsmember' => 'क सदस्य:', +'userrights-groupsmember-auto' => 'क जानल सदस्य:', +'userrights-groups-help' => 'अहाँ ऐ प्रयोक्ताक वर्गकेँ बदलि सकै छी: +* एकटा निशान लगाएल बक्सा माने प्रयोक्ता ओइ वर्गमे अछि। +* एकटा बिन निशान लगाएल माने प्रयोक्ता ओइ वर्गमे नै अछि। +* ई * देखबैए जे अहाँ वर्गकेँ एक बेर देलाक बाद हटा नै सकै छी, आ एकर उलट सेहो ठीक अछि।', +'userrights-reason' => 'कारण:', +'userrights-no-interwiki' => 'अहाँकेँ दोसर विकीपर प्रयोक्ता अधिकारकेँ बदलबाक अधिकार नै अछि।', +'userrights-nodatabase' => 'दत्तनिधि $1 नै अछि वा स्थानीय नै अछि।', +'userrights-nologin' => 'अहाँ [[Special:UserLogin|सम्प्रवेश]] प्रयोक्ता अधिकार देबा लेल संचालक खातासँ सम्प्रवेश करू।', +'userrights-notallowed' => 'अहाँक खाता दोसराकेँ प्रयोक्ता अधिकार नै दै छै।', +'userrights-changeable-col' => 'वर्ग जे अहाँ बदलि सकै छी', +'userrights-unchangeable-col' => 'वर्ग जे अहाँ नै बदलि सकै छी', + +# Groups +'group' => 'वर्ग:', +'group-user' => 'प्रयोक्ता सभ', +'group-autoconfirmed' => 'स्वतःअनुमोदित प्रयोक्ता सभ', +'group-bot' => 'स्वचालक', +'group-sysop' => 'माइनजन', +'group-bureaucrat' => 'अधिकारी', +'group-suppress' => 'नजरिपर नै आएल', +'group-all' => '(सभ)', + +'group-user-member' => 'प्रयोक्ता', +'group-autoconfirmed-member' => 'स्वतःअनुमोदित प्रयोक्ता', +'group-bot-member' => 'स्वचालक', +'group-sysop-member' => 'माइनजन', +'group-bureaucrat-member' => 'अधिकारी', +'group-suppress-member' => 'नजरिपर नै आएल', + +'grouppage-user' => '{{ns:project}}:प्रयोक्ता सभ', +'grouppage-autoconfirmed' => '{{ns:project}}:स्वतःअनुमोदित प्रयोक्ता सभ', +'grouppage-bot' => '{{ns:project}}:स्वचालक सभ', +'grouppage-sysop' => '{{ns:project}}:माइनजन सभ', +'grouppage-bureaucrat' => '{{ns:project}}:अधिकारी सभ', +'grouppage-suppress' => '{{ns:project}}:नजरिपर नै आएल', + +# Rights +'right-read' => 'पन्ना सभ पढ़ू', +'right-edit' => 'पन्ना सभ सम्पादन करू', +'right-createpage' => 'पन्ना सभ बनाउ (जे वार्ता पन्ना नै हुअए)', +'right-createtalk' => 'वार्ता पन्ना सभ बनाउ', +'right-createaccount' => 'नव प्रयोक्ता खाता सभ बनाउ', +'right-minoredit' => 'सम्पादन सभकेँ मामूली चिन्हित करू', +'right-move' => 'पन्ना सभ घसकाउ', +'right-move-subpages' => 'पन्ना सभकेँ उपपन्ना सभक संग घसकाउ', +'right-move-rootuserpages' => 'मूल प्रयोक्ता पन्ना सभ घसकाउ', +'right-movefile' => 'संचिका सभकेँ घसकाउ', +'right-suppressredirect' => 'पन्ना घसकेबा काल मूल पन्ना सभसँ लागि सभ नै बनाउ', +'right-upload' => 'संचिका सभ उपारोपित करू', +'right-reupload' => 'वर्तमान संचिका सभक पुनर्लेखन करू', +'right-reupload-own' => 'अपन उपारोपित पन्ना सभक पुनर्लेखन करू', +'right-reupload-shared' => 'श्रव्य-दृश्य साझी बखारीक फाइलक पुनर्लेखन स्थानीय रूपेँ करू।', +'right-upload_by_url' => 'सार्वत्रिक विभव संकेतसँ संचिका उपारोपित करू', +'right-purge' => 'जालक उपस्मृतिकेँ बिना स्वीकृतिक पन्नाक लेल खतम करू।', +'right-autoconfirmed' => 'अर्द्ध-संरक्षित पन्ना सभक सम्पादन करू।', +'right-bot' => 'स्वचालित प्रक्रियाक रूपमे देखल जाए', +'right-nominornewtalk' => 'वार्ता पन्नापर मामूली सम्पादन नव संदेश संसूचक नै आनैए', +'right-apihighlimits' => 'ए.पी.आइ. अभ्यर्थनामे पैघ सीमाक प्रयोग करू', +'right-writeapi' => 'लेख्य ए.पी.आइ.क प्रयोग', +'right-delete' => 'पन्ना सभकेँ मेटाउ', +'right-bigdelete' => 'बेशी इतिहास बला पन्ना सभकेँ मेटाउ', +'right-deleterevision' => 'निर्धारित संशोधित पन्ना मेटाउ आ फेरसँ आनू', +'right-deletedhistory' => 'मेटाएल इतिहास प्रविष्टि देखू, बिना लागिक पाठक', +'right-deletedtext' => 'मेटाएल पाठ आ दूटा मेटाएल संशोधनक बीचक परिवर्तन देखू', +'right-browsearchive' => 'मेटाएल पन्ना सभकेँ ताकू', +'right-undelete' => 'पन्ना फेरसँ आनू', +'right-suppressrevision' => 'संचालकसँ नुकाएल संशोधनकेँ पुनरीक्षित करू आ फेरसँ आनू', +'right-suppressionlog' => 'व्यक्तिगत वृत्तलेख देखू', +'right-block' => 'दोसर प्रयोक्ताकेँ सम्पादनसँ रोकू', +'right-blockemail' => 'प्रयोक्ताकेँ ई-पत्र पठेबासँ रोकू', +'right-hideuser' => 'एकटा प्रयोक्तानामकेँ प्रतिबन्धित करू, लोकसँ एकरा नुका कऽ', +'right-ipblock-exempt' => 'अनिकेत प्रतिबन्ध, स्वचालित प्रतिबन्ध आ परिक्षेत्र प्रतिबन्धकेँ नै मानू', +'right-proxyunbannable' => 'दोसराइतक स्वचालित प्रतिबन्धकेँ नै मानू', +'right-unblockself' => 'स्वयंकेँ प्रतिबन्धसँ हटाउ', +'right-protect' => 'सुरक्षा स्तर बदलू आ संरक्षित पन्ना सम्पादित करू', +'right-editprotected' => 'संरक्षित पन्ना सम्पादित करू (बिना तराउपड़ी सुरक्षाक)', +'right-editinterface' => 'प्रयोक्ता मध्यस्थक सम्पादन करू', +'right-editusercssjs' => 'दोसर प्रयोक्ताक सी.एस.एस. आ जावास्क्रिप्ट संचिका सभक सम्पादन करू', +'right-editusercss' => 'दोसर प्रयोक्ता सभक सी.एस.एस. संचिका सभक सम्पादन करू', +'right-edituserjs' => 'दोसर प्रयोक्ताक जावास्क्रिप्ट संचिका सभक सम्पादन करू', +'right-rollback' => 'कृपा कऽ अन्तिम प्रयोक्ताक सम्पादन सभकेँ प्रत्यावर्तित करू जे एक खास पन्नाकेँ सम्पादित केलन्हि', +'right-markbotedits' => 'प्रत्यावर्तित सम्पादन सभकेँ स्वचालित सम्पादन देखाउ', +'right-noratelimit' => 'दरक सीमासँ प्रभावित नै', +'right-import' => 'दोसर विकीसँ पन्ना लिअ', +'right-importupload' => 'पन्नासभकेँ संचिका उपारोपणसँ आनू', +'right-patrol' => 'दोसराक सम्पादनकेँ संचालित देखाउ', +'right-autopatrol' => 'अपन सम्पादनकेँ स्वचालित रूपेँ संचालित देखाउ', +'right-patrolmarks' => 'हालक परिवर्तनमे संचालन चेन्ह देखू', +'right-unwatchedpages' => 'बिना संचालित पन्ना सभक सूचीकेँ देखू', +'right-trackback' => 'प्रतिक्रिया दिअ', +'right-mergehistory' => 'पन्नाक इतिहास सभकेँ मिज्झर करू', +'right-userrights' => 'सभटा प्रयोक्ता अधिकारकेँ सम्पादित करू', +'right-userrights-interwiki' => 'दोसर विकीपर प्रयोक्ताक प्रयोक्ता अधिकारक सम्पादन करू', +'right-siteadmin' => 'दत्तनिधिकेँ प्रतिबन्धित करू आ फेर प्रतिबन्ध हटाउ', +'right-reset-passwords' => 'दोसर प्रयोक्ताक कूटशब्द फेरसँ बनाउ', +'right-override-export-depth' => '५ परत धरि जा पन्ना सभ निर्यात, जइमे लागिबला पन्ना सभ शामिल अछि, करू।', +'right-sendemail' => 'ई-पत्र दोसर प्रयोक्ता लोकनिकेँ पठाउ', + +# User rights log +'rightslog' => 'प्रयोक्ता अधिकार वृत्तलेख', +'rightslogtext' => 'ई प्रयोक्ता अधिकार परिवर्तन सभक वृतलेख छी।', +'rightslogentry' => 'वर्गक सदस्यता बदलल गेल $1 लेल $2 सँ $3', +'rightsnone' => '(कोनो नै)', + +# Associated actions - in the sentence "You do not have permission to X" +'action-read' => 'ई पन्ना पढ़ू', +'action-edit' => 'ऐ पन्नाकेँ सम्पादित करू', +'action-createpage' => 'पन्ना सभ बनाउ', +'action-createtalk' => 'वार्ता पन्ना सभ बनाउ', +'action-createaccount' => 'ई प्रयोक्ता खाता बनाउ', +'action-minoredit' => 'ऐ सम्पादनकेँ मामूली कहू', +'action-move' => 'ऐ पृष्ठकेँ घसकाउ', +'action-move-subpages' => 'ऐ पन्ना आ एकर उपपन्नाकेँ घसकाउ', +'action-move-rootuserpages' => 'मूल प्रयोक्ता पन्ना सभ घसकाउ', +'action-movefile' => 'ऐ संचिकाकेँ घसकाउ', +'action-upload' => 'ऐ संचिकाकेँ उपारोपित करू', +'action-reupload' => 'ऐ संचिकाक पुनर्लेखन करू', +'action-reupload-shared' => 'ऐ संचिकाकेँ साझी बखारीमे नजरि नै दिअ', +'action-upload_by_url' => 'आइ संचिकाकेँ सार्वत्रिक विभव संकेतसँ उपारोपित करू', +'action-writeapi' => 'लेख्य ए.पी.आइ.क प्रयोग करू', +'action-delete' => 'ई पन्ना मेटाउ', +'action-deleterevision' => 'ई संशोधन मेटाउ', +'action-deletedhistory' => 'ऐ पन्नाक मेटाएलबला इतिहास देखू', +'action-browsearchive' => 'मेटाएल पन्ना सभकेँ ताकू', +'action-undelete' => 'ऐ पन्नाकेँ फेरसँ आनू', +'action-suppressrevision' => 'ऐ नुकाएल संशोधनकेँ पुनरीक्षित आ पुनर्स्थापित करू', +'action-suppressionlog' => 'ऐ व्यक्तिगत वृत्तलेखकेँ देखू', +'action-block' => 'ऐ प्रयोक्ताकेँ सम्पादनसँ रोकू', +'action-protect' => 'ऐ पन्नाक सुरक्षा स्तर बदलू', +'action-import' => 'ऐ पन्नाकेँ दोसर विकीसँ आनू', +'action-importupload' => 'ऐ पन्नाकेँ संचिका उपारोपणसँ आनू', +'action-patrol' => 'दोसराक सम्पादनकेँ संचालित देखाउ', +'action-autopatrol' => 'अपन सम्पादनकेँ संचालित देखाउ', +'action-unwatchedpages' => 'बिना संचालित पन्ना सभक सूचीकेँ देखू', +'action-trackback' => 'प्रतिक्रिया दिअ', +'action-mergehistory' => 'पन्नाक इतिहासकेँ मिज्झर करू', +'action-userrights' => 'सभटा प्रयोक्ता अधिकारकेँ सम्पादित करू', +'action-userrights-interwiki' => 'दोसर विकीपर प्रयोक्ताक प्रयोक्ता अधिकारक सम्पादन करू', +'action-siteadmin' => 'दत्तनिधिकेँ प्रतिबन्धित करू आ फेर प्रतिबन्ध हटाउ', # Recent changes -'nchanges' => '$1 {{PLURAL:$1|परिवर्त्तन|परिवर्त्तन}}', -'rcnote' => "नीचाँ $3 तक पहिलुका {{PLURAL:$2|'''१''' दिनमे भेल|'''$2''' दिनमे भेल}} अंतिम $1 बदलाव {{PLURAL:$1|देल अछि|देल अछि}}।", -'rcshowhideminor' => '$1 अल्प संपादन', -'rclinks' => 'देखाऊ अंतिम $1 परिवर्त्तन अंतिम $2 दिनमे
    $3', -'diff' => 'अंतर', -'hist' => 'इति.', -'hide' => 'नुकाऊ', -'minoreditletter' => 'अ', -'newpageletter' => 'न', -'boteditletter' => 'ब', +'nchanges' => '$1 {{PLURAL:$1|परिवर्त्तन|परिवर्त्तन}}', +'recentchanges' => 'लगक परिवर्तन सभ', +'recentchanges-legend' => 'नव परिवर्तन सभक विकल्प सभ', +'recentchangestext' => 'ऐ पन्नापर विकीमे भेल सभसँ अद्यतन परिवर्तनपर नजरि राखू।', +'recentchanges-feed-description' => 'ऐ सूचना-तंत्रांशमे विकीमे भेल सभसँ लगक परिवर्तन ताकू', +'recentchanges-label-newpage' => 'ई सम्पादन एकटा नव पन्नाक निर्माण केलक।', +'recentchanges-label-minor' => 'ई एकटा लघु सम्पादन छी', +'recentchanges-label-bot' => 'ई सम्पादन यांत्रिक छल।', +'recentchanges-label-unpatrolled' => 'ऐ सम्पादनक पुनरीक्षण अखन धरि नै कएल गेल अछि।', +'rcnote' => "$5, $4 तक पहिलुका {{PLURAL:$2|'''१''' दिन|'''$2''' दिन}}मे {{PLURAL:$1|भेल '''१''' अंतिम परिवर्तन एना अछि| भेल '''$1''' परिवर्तन एना अछि}}।", +'rcnotefrom' => "नीचाँमे '''$2''' सँ भेल परिवर्तन अछि ('''$1''' धरि देखाएल)।", +'rclistfrom' => '$1 सँ शुरू भेल नव परिवर्तन देखू', +'rcshowhideminor' => '$1 अल्प संपादन', +'rcshowhidebots' => '$1 स्वचालक सभ', +'rcshowhideliu' => '$1 सम्प्रवेशित प्रयोक्ता सभ', +'rcshowhideanons' => '$1 अज्ञात प्रयोक्ता सभ', +'rcshowhidepatr' => '$1 संचालित सम्पादन', +'rcshowhidemine' => '$1 हमर सम्पादन सभ', +'rclinks' => 'देखाऊ अंतिम $1 परिवर्त्तन अंतिम $2 दिनमे
    $3', +'diff' => 'अंतर', +'hist' => 'इति.', +'hide' => 'नुकाऊ', +'show' => 'देखाउ', +'minoreditletter' => 'अ', +'newpageletter' => 'न', +'boteditletter' => 'ब', +'number_of_watching_users_pageview' => '[$1 देखै अछि {{PLURAL:$1|प्रयोक्ता|प्रयोक्ता सभ}}]', +'rc_categories' => 'संवर्ग सीमित ("|" सँ हटाउ)', +'rc_categories_any' => 'कोनो', +'newsectionsummary' => '/* $1 */ नव संवर्ग', +'rc-enhanced-expand' => 'वर्णन देखाउ (जावास्क्रिप्ट चाही)', +'rc-enhanced-hide' => 'वर्णन नुकाउ', # Recent changes linked -'recentchangeslinked' => 'संबंधित परिवर्त्तन', -'recentchangeslinked-feed' => 'संबंधित परिवर्त्तन', -'recentchangeslinked-toolbox' => 'संबंधित परिवर्त्तन', -'recentchangeslinked-title' => '"$1" मे भेल परिवर्तन', +'recentchangeslinked' => 'संबंधित परिवर्त्तन', +'recentchangeslinked-feed' => 'संबंधित परिवर्त्तन', +'recentchangeslinked-toolbox' => 'संबंधित परिवर्त्तन', +'recentchangeslinked-title' => '"$1" मे भेल परिवर्तन', +'recentchangeslinked-noresult' => 'ऐ कालमे लागिबला पन्ना सभमे कोनो परिवर्तन नै भेल।', +'recentchangeslinked-summary' => "ई विशेष पन्नासँ सम्बद्ध पन्ना सभमे (आकि कोनो विशेष वर्गक समूहमे) भेल परिवर्तनक सूची छी । +[[Special:Watchlist|your watchlist]] पर पन्नासभ '''गाढ़''' अछि।", +'recentchangeslinked-page' => 'पन्नाक नाम', +'recentchangeslinked-to' => 'देल पन्नाक सम्बन्धी पन्नामे परिवर्तन देखाउ', # Upload -'upload' => 'फाइल अपलोड करू', -'uploadbtn' => 'फाइल अपलोड', -'uploadedimage' => 'अपलोड भेल "[[$1]]"', +'upload' => 'फाइल अपलोड करू', +'uploadbtn' => 'फाइल अपलोड', +'reuploaddesc' => 'उपारोपण रद्द करू आ उपारोपण आवेदन-पत्रपर घुरू।', +'upload-tryagain' => 'संशोधित संचिका वर्णन दिअ', +'uploadnologin' => 'सम्प्रवेशित नै', +'uploadnologintext' => 'अहाँ [[Special:UserLogin|सम्प्रवेशित]] संचिका उपारोपित करबा लेल।', +'upload_directory_missing' => 'उपारोप्य निर्देशिका ($1) हेराएल अछि आ जालवितरक द्वारा नै बनाएल जा सकैए।', +'upload_directory_read_only' => 'उपारोप्य निर्देशिका ($1) जालवितरक द्वारा लिखबा योग्य नै अछि।', +'uploaderror' => 'उपारोपण भ्रम', +'upload-recreate-warning' => "'''चेतौनी: ऐ नामक संचिका मेटा वा हटा देल गेल अछि।'''", +'uploadtext' => "निचुक्का पत्र संचिका उपारोपित करबा लेल प्रयोग करू। +पहिलुका उपारोपित संचिका देखबा वा तकबा लेल जाउ [[Special:FileList|उपारोपित संचिका सभक सूची]], (पुनः) उपारोपित सेहो सम्प्रवेशित अछि [[Special:Log/upload|उपारोपित वृत्तलेख]] मे, मेटाएल सभ [[Special:Log/delete|मेटाएल वृत्तलेख]] मे। +पन्नमे एकटा संचिका देबा लेल, ऐ पत्र सभमेसँ कोनो लागिक प्रयोग करू: +* '''[[{{ns:file}}:File.jpg]]''' संचिकाक पूर्ण संस्करण देखबा लेल +* '''[[{{ns:file}}:File.png|200px|thumb|left|alt text]]''' २०० चित्राणु चाकर प्रकटन एकटा बक्शामे \"वैकल्पिक पाठ\" वामा कात वर्णनक रूपमे लिखल प्रयोग करू +* '''[[{{ns:media}}:File.ogg]]''' बिना संचिका देखेने सोझे संचिकाक लागि देब", +'upload-permitted' => 'मान्य संचिका प्रकार:$1 ।', +'upload-preferred' => 'मोनपसिन्न संचिका प्रकार:$1 ।', +'upload-prohibited' => 'प्रतिबन्धित संचिका प्रकार:$1 ।', +'uploadlog' => 'उपारोपण वृत्तलेख', +'uploadlogpage' => 'उपारोपण वृत्तलेख', +'uploadlogpagetext' => 'नीचाँ अद्यतन संचिका उपारोपणक वर्णन अछि। +देखू [[Special:NewFiles|नव संचिकाक बखारी]] बेसी स्पष्ट समुच्चा दृश्य लेल।', +'filename' => 'संचिकानाम', +'filedesc' => 'संक्षेप', +'fileuploadsummary' => 'संक्षेप:', +'filereuploadsummary' => 'संचिका परिवर्तन:', +'filestatus' => 'सर्वाधिकारक स्थिति:', +'filesource' => 'मूल:', +'uploadedfiles' => 'उपारोपित संचिका सभ', +'ignorewarning' => 'चेतौनीपर ध्यान नै दिअ आ संचिका कोनो रूपेँ संरक्षित करू', +'ignorewarnings' => 'कोनो चेतौनीपर ध्यान नै दिअ', +'minlength1' => 'संचिका नाम सभ एक वर्णसँ कम नै हुअए', +'illegalfilename' => '"$1" संचिकानाममे वर्ण अछि जे पन्ना शीर्षक लेल मान्य नै अछि। +कृपा कऽ संचिकाक नाम बदलू आ फेरसँ उपारोपित करू।', +'badfilename' => 'संचिकानाम बदलि कऽ "$1" कएल गेल।', +'filetype-badmime' => 'माइम प्रकार "$1" सन संचिका उपारोपण लेल मान्य नै अछि।', +'filetype-bad-ie-mime' => 'एकरा उपारोपित नै कऽ सकै छी कारण इन्टरनेट एक्सप्लोरर एकरा "$1" बुझत, जे अमान्य आ खतरासँ सम्भावित संचिका प्रकार अछि।', +'filetype-unwanted-type' => "'''\".\$1\"''' एक प्रकारक बिना मतलबक संचिका प्रकार अछि। +एकर बदला {{PLURAL:\$3|संचिका प्रकार अछि|संचिका प्रकार सभ अछि}} \$2 ।", +'filetype-missing' => 'ऐ फाइलमे कोनो विस्तार नै अछि (जेना ".jpg")।', +'empty-file' => 'अहाँक द्वारा देल संचिका रिक्त अछि।', +'file-too-large' => 'अहाँक द्वारा देल संचिका बड्ड पैघ अछि।', +'filename-tooshort' => 'ई संचिका नाम बड पैघ अछि |', +'filetype-banned' => 'ऐ तरहक संचिका प्रतिबंधित अछि।', +'verification-error' => 'ई संचिका संचिका-सत्यापन नै दऽ सकल।', +'hookaborted' => 'संशोधन जे अहाँ करऽ चाहलौं से विस्तार नोकसी द्वारा खतम कऽ देल गेल।', +'illegal-filename' => 'ऐ तरहक संचिका नाम अमान्य अछि।', +'overwrite' => 'वर्तमान संचिकाकेँ अधिलेखित केनाइ मान्य नै अछि।', +'unknown-error' => 'एकटा अबूझ भ्रम आए।', +'tmp-create-error' => 'अस्थायी संचिका नै बना सकल।', +'tmp-write-error' => 'अस्थायी संचिका लिखबा काल भ्रम।', +'large-file' => 'ई सुझाव अछि जे संचिका $1 सँ पैघ नै हुअए; +ई संचिका अछि $2 ।', +'largefileserver' => 'वितरक द्वारा धारण करैबला क्षमतासँ पैघ ई संचिका अछि।', +'emptyfile' => 'जे संचिका अहाँ उपारोपित केलौं से लगै छल जे रिक्त रहए। +ई संचिकानाममे गलत तंकणक कारण सम्भवतः भेल हएत। +कृपा कऽ जाँचू जे की अहाँ ऐ संचिकाकेँ ठीके उपारोपित करए चाहै छी।', +'fileexists' => "ऐ नाम्ना एकटा संचिका पहिनहियेसँ अछि, कृपा कऽ जाँचू '''[[:$1]]''' जँ अहाँ दुविधामे छी जे अहाँ एकरा बदलऽ चाहै छी वा नै। +[[$1|thumb]]", +'filepageexists' => "ऐ संचिकाक वर्णन पन्ना पहिनहिये '''[[:$1]]''' पर बना देल गेल, मुदा ऐ नामसँ कोनो संचिका अखन नै अछि। +जे संक्षेप अहाँ दऽ रहल छी से वर्णन पन्नापर नै आएत। +अहाँक संक्षेप ओतए आबए तै लेल अहाँकेँ ओकरा अपनेसँ सम्पादित करए पड़त। +[[$1|thumb]]", +'fileexists-extension' => "ऐ नामसँ एकटा संचिका पहिनहियेसँ अछि:[[$2|thumb]] +* उपारोपित संचिकाक नाम: '''[[:$1]]''' +* अखन स्थित फाइलक नाम: '''[[:$2]]''' +कृपा कऽ दोसर नाम चुनू।", +'fileexists-thumbnail-yes' => "ई संचिका लगैए जे ''(लघुचित्र)'' क छोट आकारक चित्र अछि। +[[$1|thumb]] +कृपा कऽ ऐ संचिकाकेँ जाँचू '''[[:$1]]''' । +जँ जाँचल संचिका मूल संचिकाक वएह चित्र छी तँ एकटा दोसर लघुचित्र उपारोपित करबाक आवश्यकता नै अछि।", +'file-thumbnail-no' => "संचिकानाम शुरू होइए '''$1''' सँ। +लगैए जे ई छोट आकारक ''(लघुचित्र)'' क चित्र अछि। +जँ अहाँ लग पूर्ण आनन्तर्यक चित्र अछि तँ से उपारोपित करू, नै तँ संचिकानाम बदलू।", +'fileexists-forbidden' => 'ऐ नामक एकटा संचिका पहिनहियेसँ अछि, आ फेरसँ ओ पुनर्लेखित नै कएल जा सकैए। +जँ अहाँ तैयो अपन संचिका उपारोपित करए चाहै छी तँ कृपा कऽ पाछाँ जाउ आ एकटा नव नाम चुनू। +[[File:$1|thumb|center|$1]]', +'fileexists-shared-forbidden' => 'ऐ नामसँ एकटा संचिका साझी संचिका बखारीमे पहिनहियेसँ अछि। +जँ अहाँ अखनो अपन संचिका उपारोपित करए चाहै छी, कृपा कऽ पाछाँ जाउ आ एकटा नव नाम चुनू। +[[File:$1|thumb|center|$1]]', +'file-exists-duplicate' => 'ई फाइल एकर {{PLURAL:$1|file|files}} द्वितीयक अछि:', +'file-deleted-duplicate' => 'ऐ संचिका ([[:$1]]) सँ मेल खाइत संचिका पहिनहिये मेटा देल गेल अछि। +अहाँ ओइ संचिकाक मेटाएल जएबाक इतिहास फेरसँ उपारोपित करबासँ पहिने देखू।', +'uploadwarning' => 'उपारोपण चेतौनी', +'uploadwarning-text' => 'कृपा कऽ नीचाँ देल संचिका वर्णनकेँ संशोधित करू आ फेरसँ प्रयास करू।', +'savefile' => 'संचिका संरक्षण करू', +'uploadedimage' => 'अपलोड भेल "[[$1]]"', +'overwroteimage' => 'एकर "[[$1]]" नव संस्करण उपारोपित भेल।', +'uploaddisabled' => 'उपारोपण सभ अशक्त कएल गेल।', +'copyuploaddisabled' => 'सार्वत्रिक विभव संकेत उपारोपण अशक्त कएल गेल।', +'uploadfromurl-queued' => 'अहाँक उपारोपण इन्तजारीमे अछि।', +'uploaddisabledtext' => 'संचिका उपारोपण सभ अशक्त अछि।', +'php-uploaddisabledtext' => 'पी.एच.पी.मे संचिका उपारोपण अशक्त अछि। +कृपा कऽ संचिका उपारोपण विकल्प जाँचू।', +'uploadscripted' => 'ई संचिका पर्यंकभाषा वा कूटलिपि युक्त अछि जे गवेषक द्वारा गलत रूपमे व्याख्यायित कएल जा सकैए।', +'uploadvirus' => 'ई संचिका विषविधियुक्त अछि। +वर्णन:$1', +'upload-source' => 'मूल संचिका', +'sourcefilename' => 'मूल संचिकानाम:', +'sourceurl' => 'मूल सार्वत्रिक विभव संकेत', +'destfilename' => 'लक्ष्य संचिकानाम:', +'upload-maxfilesize' => 'अधिकतम संचिका आकार:$1', +'upload-description' => 'संचिका वर्णन', +'upload-options' => 'उपारोपण विकल्प सभ', +'watchthisupload' => 'ऐ पृष्ठपर नजरि राखू', +'filewasdeleted' => 'ऐ नामक एकटा संचिका पहिने उपारोपित कएल गेल आ फेर मेटा देल गेल। +अहाँ फेरसँ एकरा उपारोपित करबासँ पहिने ई $1 जाँचू।', +'upload-wasdeleted' => "'''चेतौनी''': अहाँ फेरसँ ओ पन्ना उपारोपित कऽ रहल छी जे पहिने मेटा देल गेल छै।''' + +अहाँ विचारू जे की ई उपारोपित केनाइ उचित अछि। +ऐ पन्नाक मेटाएल बला वृत्तलेख एतए सुविधा लेल देल जा रहल अछि:", +'filename-bad-prefix' => "जे संचिका अहाँ उपारोपित कऽ रहल छी से '''\"\$1\"''' सँ शुरू होइए, ई बिन विवरणक नाम अछि जे मूल रूपेँ अंकीय कैमरा द्वारा स्वचालित रूपेँ देल जाइत अछि। +कृपा कऽ ऐ संचिका लेल एकटा बेसी वर्णनात्मक नाम चुनू।", +'upload-success-subj' => 'सफलतापूर्वक उपारोपित', +'upload-success-msg' => '[$2] सँ उपारोपन सफल भेल। ई एतए अछि: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'उपारोपण समस्या', +'upload-failure-msg' => '[$2] सँ उपारोपणमे समस्या अछि: +$1', +'upload-warning-subj' => 'उपारोपण चेतौनी', +'upload-warning-msg' => '[$2] सँ उपारोपणमे समस्या छल। अहाँ घुरि सकै छी [[Special:Upload/stash/$1|उपारोपण आवेदन]] ऐ समस्याकेँ ठीक करबा लेल।', + +'upload-proto-error' => 'गलत संविद', +'upload-proto-error-text' => 'दूरसँ उपारोपण लेल http:// or ftp:// सँ प्रारम्भ होएबला सार्वत्रिक विभव संकेत चाही।', +'upload-file-error' => 'आन्तरिक भ्रम', +'upload-file-error-text' => 'वितरकपर एकटा अस्थायी संचिका बनेबाक प्रयासमे एकटा आन्तरिक भ्रम आएल। +सम्पर्क करू [[Special:ListUsers/sysop|संचालक]] सँ।', +'upload-misc-error' => 'विचित्र उपारोपण भ्रम', +'upload-misc-error-text' => 'उपारोपण काल एकटा विचित्र भ्रम आएल। +कृपा कऽ जाँचू कि सार्वत्रिक विभव संकेत मान्य आ प्रवेश-उपयुक्त अछि आ फेरसँ प्रयास करू। +जँ समस्या रहिते अछि तँ [[Special:ListUsers/sysop|संचालक]] सँ सम्पर्क करू।', +'upload-too-many-redirects' => 'ई सार्वत्रिक विभव संकेत बड्ड बेसी घुमौआ लागिक संग अछि।', +'upload-unknown-size' => 'अज्ञात आकार', +'upload-http-error' => 'परिसंविद भ्रम आएल:$1', + +# img_auth script messages +'img-auth-accessdenied' => 'प्रवेश प्रतिबन्धित', +'img-auth-nopathinfo' => 'बाटक जानकारी नै अछि। +अहाँक वितरक ऐ सूचनाकेँ प्रसारित नै कऽ सकत। +ई सी.जी.आइ.आधारित अछि आ चित्र-समर्थन केँ समर्थन नै दऽ सकत। +देखू http://www.mediawiki.org/wiki/Manual:Image_Authorization ।', +'img-auth-notindir' => 'आग्रह कएल रस्ता विन्यासित उपारोपित निर्देशिकामे नै अछि।', +'img-auth-badtitle' => '"$1" लेल कोनो मान्य शीर्षक नै बना सकल।', +'img-auth-nologinnWL' => 'अहाँ सम्प्रवेशित नै छी आ "$1" स्वीकृत सूचीमे नै अछि।', +'img-auth-nofile' => 'संचिका "$1" नै अछि।', +'img-auth-isdir' => 'अहाँ एकटा निर्देशिका "$1" मे प्रवेशक प्रयास कऽ रहल छी। +मात्र संचिका प्रवेश मान्य छै।', +'img-auth-streaming' => '"$1" दृश्यस्यन्दन भऽ रहल अछि।', +'img-auth-public' => 'img_auth.php एकर प्रकार्य अछि व्यक्तिगत विकीसँ संचिका सभ फलित करब। +ई विकी न्यासित अछि सार्वजनिक विकी बनेबाक। +नीक सुरक्षा लेल, img_auth.php अमान्य अछि।', +'img-auth-noread' => 'प्रयोक्ताकेँ "$1" लेल प्रवेश नै अछि।', +'img-auth-bad-query-string' => 'सार्वत्रिक विभव संकेत मे एकटा अमान्य अभ्यर्थना डरीड़ अछि।', + +# HTTP errors +'http-invalid-url' => 'अमान्य सार्वत्रिक विभव संकेत:$1', +'http-invalid-scheme' => 'सार्वत्रिक विभव संकेत योजना तहत "$1" नै समर्थित अछि।', +'http-request-error' => 'अज्ञात भ्रमक कारण परिसंविद आग्रह असफल रहल।', +'http-read-error' => 'परिसंविद पठन भ्रम', +'http-timed-out' => 'परिसंविद आग्रह कालातीत', +'http-curl-error' => 'भ्रम निकालैबला सार्वत्रिक विभव संकेत:$1', +'http-host-unreachable' => 'सार्वत्रिक विभव संकेत नै पाबि सकल', +'http-bad-status' => 'परिसंविद आग्रह काल एकटा समस्या छल: $1 $2', + +# Some likely curl errors. More could be added from +'upload-curl-error6' => 'सार्वत्रिक विभव संकेत नै पाबि सकल', +'upload-curl-error6-text' => 'देल सार्वत्रिक विभव संकेत जाँचल नै जा सकल। +कृपा कऽ फेरसँ जाँचू जे सार्वत्रिक विभव संकेत सही अछि आ जालस्थल ठीक अछि।', +'upload-curl-error28' => 'उपारोपण कालातीत', +'upload-curl-error28-text' => 'ई जालस्थल प्रतिक्रिया लेल बड्ड समए लऽ रहल अछि। +कृपा कऽ जाँचू जे जालस्थल ठीक अछि, कने काल बिलमू आ फेरसँ प्रयास करू। +अहाँ कम भीड़भारबला समैमे प्रयास करू।', + +'license' => 'अधिकृत करब:', +'license-header' => 'अधिकृत करब', +'nolicense' => 'कियो नै चुनाएल', +'license-nopreview' => '(पूर्वावलोकन उपलब्ध नै अछि)', +'upload_source_url' => '(एकटा मान्य, सार्वजनिक प्रवेशबला सार्वत्रिक विभव संकेत)', +'upload_source_file' => '(अहाँक संगणकपर एकटा संचिका)', + +# Special:ListFiles +'listfiles-summary' => 'ई विशिष्ट पन्ना सभटा उपारोपित संचिका देखबैए। +पूर्वन्यस्त रूपेँ अन्तिम उपारोपित संचिका सूचीक शीर्षपर अछि। +स्तम्भ शीर्षपर एकटा क्लिक छटनीमे परिवर्तन करैए।', +'listfiles_search_for' => 'ऐ दृश्य-श्रव्य नामले ताकू:', +'imgfile' => 'संचिका', +'listfiles' => 'संचिका सूची', +'listfiles_thumb' => 'लघुचित्र', +'listfiles_date' => 'तिथि', +'listfiles_name' => 'नाम', +'listfiles_user' => 'प्रयोक्ता', +'listfiles_size' => 'आकार', +'listfiles_description' => 'वर्णन', +'listfiles_count' => 'संस्करण सभ', # File description page -'filehist' => 'फाइल इतिहास', -'imagelinks' => 'लिंक्स', +'file-anchor-link' => 'संचिका', +'filehist' => 'फाइल इतिहास', +'filehist-help' => 'तखुनका तिथि/ समए पर क्लिक करू जखुनका फाइल देखबाक अछि', +'filehist-deleteall' => 'सभटाकेँ मेटाउ', +'filehist-deleteone' => 'मेटाउ', +'filehist-revert' => 'फेरसँ वएह', +'filehist-current' => 'अखुनका', +'filehist-datetime' => 'तिथि/ समए', +'filehist-thumb' => 'लघुचित्र', +'filehist-thumbtext' => 'तखुनका लघुचित्र $1', +'filehist-nothumb' => 'कोनो लघुचित्र नै', +'filehist-user' => 'प्रयोक्ता', +'filehist-dimensions' => 'बीम', +'filehist-filesize' => 'संचिका आकार', +'filehist-comment' => 'समीक्षा', +'filehist-missing' => 'संचिका हेराएल', +'imagelinks' => 'फाइलक लिंक', +'linkstoimage' => 'ऐ {{PLURAL:$1|पन्नाक लागि |$1 पन्नाक लागि}} ऐ फाइलसँ:', +'linkstoimage-more' => '$1 सँ बेसी {{PLURAL:$1|page links|पन्ना सभक लागि}} ऐ संचिकाक। +ई सूची देखबैए {{PLURAL:$1|first page link|first $1 page links}} मात्र ऐ संचिकाक। +एकटा [[Special:WhatLinksHere/$2|पूर्ण सूची]] उपलब्ध अछि।', +'nolinkstoimage' => 'एकोटा पन्ना नै अछि जकर लागि ऐ संचिकासँ हुअए।', +'morelinkstoimage' => 'देखू [[Special:WhatLinksHere/$1|आर लागि]] ऐ संचिकाक।', +'duplicatesoffile' => 'ऐ संचिकाक {{PLURAL:$1|file is a duplicate|$1 संचिका सभ द्वितीयक अछि}} अछि ([[Special:FileDuplicateSearch/$2|आर वर्णन]]):', +'sharedupload' => 'ई फाइल $1 सँ अछि आ दोसर प्रकल्प लेल प्रयोग कएल जा सकैए।', +'sharedupload-desc-there' => 'ई संचिका $1 सँ अछि आ दोसर परियोजना लेल प्रयोग कएल जा सकैए। +कृपा कऽ देखू [$2 संचिका वर्णन पन्ना] विशेष सूचना लेल।', +'sharedupload-desc-here' => 'ई संचिका $1 सँ अछि आ ई दोसर परियोजना द्वारा प्रयोग कएल जा सकैए। +ऐ पर विवरण [$2 संचिका विवरण पन्ना] ओइपर नीचाँ देखाएल अछि।', +'filepage-nofile' => 'ऐ नामक कोनो संचिका उपलब्ध नै अछि।', +'filepage-nofile-link' => 'ऐ नामक कोनो संचिका उपलब्ध नै अछि मुदा अहाँ [$1 एकरा उपारोपित करू]।', +'uploadnewversion-linktext' => 'ऐ फाइलक नव संस्करणक उपारोपण', +'shared-repo-from' => '$1 सँ', +'shared-repo' => 'एकटा साझी बखारी', + +# File reversion +'filerevert' => '$1 लग घुरु', +'filerevert-legend' => 'घुराएल संचिका', +'filerevert-intro' => "अहाँ संचिका घुराबैले छी '''[[Media:$1|$1]]''' केँ [$4 संस्करण $3, $2 केँ] लग।", +'filerevert-comment' => 'कारण:', +'filerevert-defaultcomment' => '$2, $1 क संस्करण लग घुरल', +'filerevert-submit' => 'फेरसँ वएह', +'filerevert-success' => "'''[[Media:$1|$1]]''' घुराएल गेल [$4 version as of $3, $2] लग।", +'filerevert-badversion' => 'ओइ कालक कोनो पुरान स्थानीय संस्करण ऐ संचिकाक नै अछि।', + +# File deletion +'filedelete' => '$1 केँ मेटाउ', +'filedelete-legend' => 'संचिका मेटाउ', +'filedelete-intro' => "अहाँ संचिका '''[[Media:$1|$1]]''' केँ एकर सभटा इतिहासक संग मेटाबैबला छी।", +'filedelete-intro-old' => "अहाँ '''[[Media:$1|$1]]''' एकर संस्करण [$4 $3, $2] केँ मेटाबैबला छी।", +'filedelete-comment' => 'कारण:', +'filedelete-submit' => 'मेटाउ', +'filedelete-success' => "'''$1''' मेटाएल गेल।", +'filedelete-success-old' => "'''[[Media:$1|$1]]''' एकर संस्करण $3, $2 केँ मेटा देल गेल।", +'filedelete-nofile' => "'''$1''' नै अछि।", +'filedelete-nofile-old' => "'''$1''' एकर कोनो संचित संस्करण खास गुणक संग नै अछि।", +'filedelete-otherreason' => 'दोसर/ अतिरिक्त कारण:', +'filedelete-reason-otherlist' => 'दोसर कारण', +'filedelete-reason-dropdown' => '* सामान्य हटेबाक कारण +** सर्वाधिकार उल्लंघन +** द्वितीयक संचिका', +'filedelete-edit-reasonlist' => 'मेटेबाक कारणक सम्पादन करू', +'filedelete-maintenance' => 'सुस्थापन कालमे संचिकाकेँ मेटएबाक आ फेरसँ अनबाक क्रिया कनी काल लेल अशक्त कएल गेल अछि।', + +# MIME search +'mimesearch' => 'माइम खोज', +'mimesearch-summary' => 'ई पन्ना माइम प्रकारक संचिकाकेँ अलग करब सम्भव बनबैत अछि। +निवेशन: पाठ प्रकार/ उपप्रकार, जेना image/jpeg ।', +'mimetype' => 'माइम प्रकार:', +'download' => 'अवारोपन', + +# Unwatched pages +'unwatchedpages' => 'बिन ध्यान देल पन्ना', + +# List redirects +'listredirects' => 'रस्ता बदलेनक सूची', + +# Unused templates +'unusedtemplates' => 'बिना प्रयोगक नमूना सभ', +'unusedtemplatestext' => 'ई पन्ना {{ns:template}} नामस्थानमे सभ पन्नाकेँ सूची बनबैए, जे दोसर पन्नापर शामिल नै अछि। +मेटेबासँ पहिने दोसर नमूनाक लागिकेँ जाँचब मोन राखू।', +'unusedtemplateswlh' => 'दोसर लागि सभ', # Random page -'randompage' => 'अव्यवस्थित पृष्ठ', +'randompage' => 'अव्यवस्थित पृष्ठ', +'randompage-nopages' => 'ऐमे दोसर पन्ना नै अछि {{PLURAL:$2|namespace|namespaces}}: $1 ।', + +# Random redirect +'randomredirect' => 'मिज्झर बदलेनबला लागि', +'randomredirect-nopages' => 'नामस्थान "$1" मे कोनो बदलेनबला लागि नै अछि।', + +# Statistics +'statistics' => 'सांख्यिकी', +'statistics-header-pages' => 'पन्नाक सांख्यिकी', +'statistics-header-edits' => 'सांख्यिकीक सम्पादन करू', +'statistics-header-views' => 'सांख्यिकी देखू', +'statistics-header-users' => 'प्रयोक्ता सांख्यिकी', +'statistics-header-hooks' => 'दोसर सांख्यिकी', +'statistics-articles' => 'अनुक्रम पन्ना सभ', +'statistics-pages' => 'पन्ना सभ', +'statistics-pages-desc' => 'वार्ता पन्ना, बदलेनबला लागि सभ इत्यादि सहित सभटा पन्ना सभ।', +'statistics-files' => 'उपारोपित संचिका सभ', +'statistics-edits' => '{{अन्तर्जाल}} अएबासँ लऽ कऽ भेल पन्ना सम्पादन सभ।', +'statistics-edits-average' => 'प्रति पन्ना औसत सम्पादन', +'statistics-views-total' => 'दृश्य आइ धरि', +'statistics-views-total-desc' => 'अस्तित्वहीन पन्ना आ विशेष पन्नाक दृश्य सम्मिलित नै अछि', +'statistics-views-peredit' => 'प्रति सम्पादन देखल गेल', +'statistics-users' => '[[Special:ListUsers|users]] छथि', +'statistics-users-active' => 'सक्रिय प्रयोक्ता', +'statistics-users-active-desc' => 'प्रयोक्ता जे अन्तिम {{PLURAL:$1|दिन|$1 दिन}} मे कोनो काज केने छथि', +'statistics-mostpopular' => 'सभसँ बेसी देखल गेल पन्ना', + +'disambiguations' => 'स्पष्ट पन्ना', +'disambiguationspage' => 'नमूना: निवारण', +'disambiguations-text' => "ई सभ पन्ना '''स्पष्ट कएल''' सँ लागिमे अछि। +ओ सभ एकर बदला उचित वार्तापर लागि करथि।
    +[[MediaWiki:Disambiguationspage]] सँ लागिमे जँ नमूनाक प्रयोग करैत अछि तखने ओ '''स्पष्ट कएल''' पन्ना कहाएत।", + +'doubleredirects' => 'द्वितीयक लागिबला बदलेन', +'doubleredirectstext' => 'ई पन्ना ओइ पन्ना सभक संकलन छी जे बदलेन करैए दोसर बदलेनबला पन्नासँ। +प्रत्येक पाँती पहिल आ दोसर बदलेनक लागि रखने अछि आ संगे दोसर बदलेनक लक्ष्य सेहो, जे वास्तवमे "वास्तव" लक्ष्य पन्ना अछि, जकरापर पहिल बदलेनकेँ जेबाक चाही। + Crossed out प्रविष्टिक हल भेटल अछि।', +'double-redirect-fixed-move' => '[[$1]] घसकाएल गेल। +ई आब [[$2]] दिस जा रहल अछि।', +'double-redirect-fixer' => 'बदलेन स्थायित्व', + +'brokenredirects' => 'टूटल बदलेन सभ', +'brokenredirectstext' => 'ई बदलेन सभ नै अवस्थित पन्ना सभक दिस जाइत अछि।', +'brokenredirects-edit' => 'संपादन करू', +'brokenredirects-delete' => 'मेटाउ', + +'withoutinterwiki' => 'बिना भाषा लागिक पन्ना सभ', +'withoutinterwiki-summary' => 'ई पन्ना सभ दोसर भाषाक संस्करण सभ दिस संकेत नै करैए।', +'withoutinterwiki-legend' => 'उपसर्ग', +'withoutinterwiki-submit' => 'देखाउ', + +'fewestrevisions' => 'एकाध संशोधनबला पन्ना सभ', # Miscellaneous special pages -'nbytes' => '$1 {{PLURAL:$1|बाइट|बाइट्स}}', -'prefixindex' => 'लगाऊ सूची', +'nbytes' => '$1 {{PLURAL:$1|बाइट|बाइट्स}}', +'ncategories' => '{{PLURAL:$1|संवर्ग|कएटा संवर्ग}}', +'nlinks' => '$1 {{PLURAL:$1|लागि|लागि सभ}}', +'nmembers' => '$1 {{PLURAL:$1|सदस्य|सदस्य सभ}}', +'nrevisions' => '$1{{PLURAL:$1|संशोधन|संशोधन सभ}}', +'nviews' => '$1 {{PLURAL:$1|दृश्य|दृश्य सभ}}', +'nimagelinks' => '$1पर प्रयुक्त {{PLURAL:$1|पन्ना|पन्ना सभ}}', +'ntransclusions' => '$1पर प्रयुक्त {{PLURAL:$1|पन्ना|पन्ना सभ}}', +'specialpage-empty' => 'ऐ पन्ना लेल कोनो परिणाम नै अछि।', +'lonelypages' => 'अनाथ पन्ना सभ', +'lonelypagestext' => 'ई पन्ना सभ ने कोनो {{अन्तर्जाल}} सँ जुड़ल अछि आ नहिये अन्तर्बाह्य रूपसँ दोसर पन्नमे अछि।', +'uncategorizedpages' => 'अवर्गीकृत पन्ना सभ', +'uncategorizedcategories' => 'अवर्गीकृत संवर्ग सभ', +'uncategorizedimages' => 'अवर्गीकृत संचिका सभ', +'uncategorizedtemplates' => 'अवर्गीकृत नमूना सभ', +'unusedcategories' => 'नै प्रयोग कएल संवर्ग सभ', +'unusedimages' => 'बिना प्रयोगक संचिका सभ', +'popularpages' => 'लोकप्रिय पन्ना सभ', +'wantedcategories' => 'आवश्यक संवर्ग सभ', +'wantedpages' => 'आवश्यक पन्ना सभ', +'wantedpages-badtitle' => 'परिणाम सूचीमे अमान्य शीर्षक:$1', +'wantedfiles' => 'आवश्यक संचिका सभ', +'wantedtemplates' => 'आवश्यक नमूना सभ', +'mostlinked' => 'सभसँ बेसी लागिबला पन्ना सभ', +'mostlinkedcategories' => 'सभसँ बेसी लागिबला संवर्ग सभ', +'mostlinkedtemplates' => 'सभसँ बेसी लागिबला नमूना सभ', +'mostcategories' => 'सभसँ बेसी संवर्गबला पन्ना सभ', +'mostimages' => 'सभसँ बेसी लागिबला संचिका सभ', +'mostrevisions' => 'सभसँ बेसी संशोधनबला पन्ना सभ', +'prefixindex' => 'उपसर्गक संग सभटा पृष्ठ', +'shortpages' => 'पन्ना सभ छाँटू', +'longpages' => 'नमगर पन्ना सभ', +'deadendpages' => 'एकदमसँ अन्त भऽ जाएबला पन्ना सभ', +'deadendpagestext' => 'ई पन्ना सभ {{अन्तर्जाल}} क दोसर पन्नासँ लागिमे नै रहत।', +'protectedpages' => 'संरक्षित पन्ना सभ', +'protectedpages-indef' => 'अनन्तकालिक सुरक्षा मात्र', +'protectedpages-cascade' => 'तराउपड़ी सुरक्षा मात्र', +'protectedpagestext' => 'ई पन्ना सभ घसकएबा वा सम्पादन लेल प्रतिबन्धित अछि।', +'protectedpagesempty' => 'कोनो पन्ना ऐ सभ परिमिति लेल सुरक्षित नै राखल गेल अछि।', +'protectedtitles' => 'संरक्षित शीर्षक सभ', +'protectedtitlestext' => 'ई शीर्षक सभ बनबासँ प्रतिबन्धित अछि', +'protectedtitlesempty' => 'कोनो पन्ना ऐ सभ परिमिति लेल सुरक्षित नै राखल गेल अछि।', +'listusers' => 'प्रयोक्ता सूची', +'listusers-editsonly' => 'सम्पादन करैबला प्रयोक्ताकेँ मात्र देखाउ', +'listusers-creationsort' => 'निर्माण तिथिक हिसाबसँ छाँटू', +'usereditcount' => '$1 {{PLURAL:$1|सम्पादन|सम्पादन सभ}}', +'usercreated' => '$1 केँ बनाएल गेल $2 बजे', +'newpages' => 'नव पन्ना सभ', +'newpages-username' => 'प्रयोक्तानाम:', +'ancientpages' => 'सभसँ पुरान पन्ना सभ', +'move' => 'हटाउ', +'movethispage' => 'ऐ पृष्ठकेँ घसकाउ', +'unusedimagestext' => 'ई सभ संचिका अछि मुदा कोनो पन्नामे निवशित नै अछि। +कृपा कऽ ई बुझू जे दोसर जालस्थल सभ सोझ सार्वत्रिक विभव संकेतबला कोनो संचिकासँ लागि बना सकैए, आ तँए सरिय प्रयोगक बादो अखनो एतए सूचित कएल जा सकैए।', +'unusedcategoriestext' => 'ई संवर्ग पन्ना सभ अछि, ओना कोनो दोसर पन्ना वा संवर्ग ओकर प्रयोग करैत अछि।', +'notargettitle' => 'बिन लक्ष्यक', +'notargettext' => 'ऐ प्रकार्यकेँ सम्पन्न करबा लेल अहाँ कोनो लक्ष्य पन्ना वा प्रयोक्ता नै देने छी।', +'nopagetitle' => 'एहेन कोनो लक्ष्य पन्ना नै', +'nopagetext' => 'लक्ष्य पन्ना जे अहाँ निर्दिष्ट केने छी से नै अछि।', +'pager-newer-n' => '{{PLURAL:$1|नव 1|नव $1}}', +'pager-older-n' => '{{PLURAL:$1|साबिक 1|साबिक $1}}', +'suppress' => 'नजरिपर नै आएल', + +# Book sources +'booksources' => 'किताबक सन्दर्भ सभ', +'booksources-search-legend' => 'किताबक सन्दर्भक लेल ताकू', +'booksources-go' => 'चलू', +'booksources-text' => 'नीचाँ दोसर जालस्थलसँ लागि सभक सूची अछि जे नव आ प्रयोग कएल किताब बेचैए, आ ई पोथी सभक विषयमे ओहो सूचना दऽ सकैए जे अहाँ ताकि रहल छी:', +'booksources-invalid-isbn' => 'देल आइ.एस.बी.एन. संख्या मान्य नै बुझाइत अछि; कृपा कऽ मूल स्रोतसँ द्वितीयक बनेबा काल भेल भ्रमकेँ जाँचू।', # Special:Log -'all-logs-page' => 'सभटा लॉग', +'specialloguserlabel' => 'प्रयोक्ता:', +'speciallogtitlelabel' => 'शीर्षक:', +'log' => 'वृत्तलेख सभ', +'all-logs-page' => 'सभटा सार्वजनिक वृत्तलेख', +'alllogstext' => '{{अन्तर्जाल}} क सभटा उपलब्ध वृत्तलेखक संयुक्त दृश्य। +अहाँ दृश्यकेँ संकीर्ण करबा लेल वृत्तलेखक एकटा प्रकार चुनि सकै छी, प्रयोक्तानाम (ब्रह्मक्षर-लघ्वक्षर विचारणीय), वा प्रभावित पन्ना (एतौ ब्रह्मक्षर-लघ्वक्षर विचारणीय)।', +'logempty' => 'वृत्तलेखमे कोनो मेल खाइबला बौस्तु नै।', +'log-title-wildcard' => 'खोज शीर्षक सभ ऐ पाठसँ प्रारम्भ', # Special:AllPages -'alphaindexline' => '$1 to $2', +'allpages' => 'सभ पन्ना', +'alphaindexline' => '$1 to $2', +'nextpage' => 'अगिला पन्ना ($1)', +'prevpage' => 'पहिलुका पन्ना ($1)', +'allpagesfrom' => 'पन्ना प्रदर्शन प्रारम्भ भेल:', +'allpagesto' => 'एतऽ खतम होमएबला पन्नाक प्रदर्शन करू:', +'allarticles' => 'सभटा पन्ना', +'allinnamespace' => 'सभटा पन्ना ($1 नामगाम)', +'allnotinnamespace' => 'सभटा पन्ना ($1 नामगाममे नै)', +'allpagesprev' => 'पहिलुका', +'allpagesnext' => 'आगाँ', +'allpagessubmit' => 'जाउ', +'allpagesprefix' => 'उपसर्गक संग दृश्य पन्ना सभ:', +'allpagesbadtitle' => 'देल पन्नाक शीर्षक गलत, गलत सम्बन्धित अन्तर-भाषा अन्तर विकी शीर्षक छी। ई एक वा बेशी कलाकार युक्त भऽ सकैए जे शीर्षकमे प्रयुक्त नै कएल जा सकैए।', +'allpages-bad-ns' => '{{जालस्थल}} मे "$1" नामगाम नै अछि।', + +# Special:Categories +'categories' => 'संवर्ग सभ', +'categoriespagetext' => 'ई {{PLURAL:$1|संवर्गमे अछि|संवर्ग सभमे अछि}} पन्ना वा मीडिया। +[[Special:UnusedCategories|Unused categories]] एतए देखाएल नै अछि। +ईहो देखू [[Special:WantedCategories|wanted categories]]।', +'categoriesfrom' => 'पन्ना प्रदर्शन प्रारम्भ भेल:', +'special-categories-sort-count' => 'गानि कऽ छाँटू', +'special-categories-sort-abc' => 'वर्णाक्षरानुसार छाँटू', + +# Special:DeletedContributions +'deletedcontributions' => 'मेटाएल प्रयोक्ता योगदान सभ', +'deletedcontributions-title' => 'मेटाएल प्रयोक्ता योगदान सभ', +'sp-deletedcontributions-contribs' => 'योगदान सभ', + +# Special:LinkSearch +'linksearch' => 'बाहरक सम्बन्ध', +'linksearch-pat' => 'खोज तरीका:', +'linksearch-ns' => 'नामस्थान :', +'linksearch-ok' => 'ताकू', +'linksearch-text' => 'ब्रह्मास्त्र जेना "*.wikipedia.org" प्रयोग कएल जा सकैए।
    +सहायक संविद:$1', +'linksearch-line' => '$2 सँ $1 क लागि अछि।', +'linksearch-error' => 'निमंत्रकनामक प्रारम्भमे ब्रह्मास्त्र आबि सकैए।', + +# Special:ListUsers +'listusersfrom' => 'प्रयोक्ता प्रदर्शन प्रारम्भ भेल:', +'listusers-submit' => 'देखाउ', +'listusers-noresult' => 'कोनो प्रयोक्ता नै', +'listusers-blocked' => '(प्रतिबन्धित)', + +# Special:ActiveUsers +'activeusers' => 'सक्रिय प्रयोक्ता सभक सूची', +'activeusers-intro' => 'ई ओहेन प्रयोक्ता सभक सूची अछि जे पछिला $1 {{PLURAL:$1|दिन|दिन}} मे किछु सक्रियता देखेने छथि।', +'activeusers-count' => '$1 {{PLURAL:$1|सम्पादन|सम्पादन सभ}} paChilaa {{PLURAL:$3|दिन|$3 दिन}}', +'activeusers-from' => 'प्रयोक्ता प्रदर्शन प्रारम्भ भेल:', +'activeusers-hidebots' => 'स्वचालन नुकाउ', +'activeusers-hidesysops' => 'संचालक नुकाउ', +'activeusers-noresult' => 'कोनो प्रयोक्ता नै भेटल', + +# Special:Log/newusers +'newuserlogpage' => 'प्रयोक्ता रचना वृत्तलेख', +'newuserlogpagetext' => 'ई प्रयोक्ता निर्माणक वृत्तलेख अछि।', +'newuserlog-byemail' => 'कूटशब्द ई-पत्र द्वारा पठाएल गेल', +'newuserlog-create-entry' => 'नव प्रयोक्ता खाता', +'newuserlog-create2-entry' => 'नव खाता $1 बनेलौं', +'newuserlog-autocreate-entry' => 'खाता स्वचालित रूपेँ बनल', + +# Special:ListGroupRights +'listgrouprights' => 'प्रयोक्ता संवर्ग अधिकार', +'listgrouprights-summary' => 'ई सभ प्रयोक्ता संवर्गक एकटा सूची अछि जे ऐ विकीपरपरिभाषित अछि ओकर संसर्गित प्रवेश अधिकारक संग। +एतए [[{{MediaWiki:Listgrouprights-helppage}}|additional information]] व्यक्तिगत अधिकार लेल भऽ सकैए।', +'listgrouprights-key' => '* देल अधिकार +* निकालल अधिकार', +'listgrouprights-group' => 'वर्ग', +'listgrouprights-rights' => 'अधिकार', +'listgrouprights-helppage' => 'Help: वर्ग अधिकार', +'listgrouprights-members' => '(सदस्यक सूची)', +'listgrouprights-addgroup' => 'जोड़ू {{PLURAL:$2|वर्ग|वर्ग}}: $1', +'listgrouprights-removegroup' => 'निकालू {{PLURAL:$2|वर्ग|वर्ग}}: $1', +'listgrouprights-addgroup-all' => 'सभटा वर्ग जोड़ू', +'listgrouprights-removegroup-all' => 'सभटा वर्ग निकालू', +'listgrouprights-addgroup-self' => 'जोड़ू {{PLURAL:$2|वर्ग|वर्ग}} अपन खातामे: $1', +'listgrouprights-removegroup-self' => 'निकालू {{PLURAL:$2|वर्ग|वर्ग}} अपन खातामे: $1', +'listgrouprights-addgroup-self-all' => 'सभटा वर्गकेँ अपन खातामे जोड़ू', +'listgrouprights-removegroup-self-all' => 'सभटा वर्गकेँ अपन खातासँ निकालू', + +# E-mail user +'mailnologin' => 'कोनो पठेबाक पता नै', +'mailnologintext' => 'अहाँ [[Special:UserLogin|सम्प्रवेशित]] हेबाक चाही आ अहाँक विकल्प [[Special:Preferences|preferences]] मे एकटा मान्य ई-पत्र संकेत दोसर प्रयोक्ताकेँ पठेबा लेल हेबाक चाही।', +'emailuser' => 'ऐ प्रयोक्ताकेँ ई-पत्र पठाउ', +'emailpage' => 'ई-पत्र प्रयोक्ता', +'emailpagetext' => 'अहाँक नीचाँक आवेदन-पत्र ऐ प्रयोक्ताकेँ ई-पत्र संदेश पठेबा लेल प्रयोग कऽ सकै छी। +ई-पत्र जे अहाँ [[Special:Preferences|your user preferences]] मे देलहुँ से ई-पत्र"एतएसँ" पतासँ देखाएत, से प्राप्तकर्ता सोझे अहाँकेँ उत्तर देबामे समर्थ हेताह।', +'usermailererror' => 'ई-पत्र बौस्तु घुरल भ्रम:', +'defemailsubject' => '{{जालस्थल}} ई-पत्र', +'usermaildisabled' => 'प्रयोक्ता ई-पत्र अशक्त', +'usermaildisabledtext' => 'अहाँ दोसर प्रयोक्ताकेँ ऐ विकीपर ई-पत्र नै पठा सकै छिऐ।', +'noemailtitle' => 'कोनो ई-पत्र पता नै', +'noemailtext' => 'ई पर्योक्ता अपन कोनो मान्य ई-पत्र संकेत नै देने अछि।', +'nowikiemailtitle' => 'कोनो ई-पत्रक अनुमति नै अछि', +'nowikiemailtext' => 'ई प्रयोक्ता दोसर प्रयोक्तासँ ई-पत्र प्राप्त नै करबाक विकल्प चुनने अछि।', +'email-legend' => 'ई-पत्र दोसर {{जालस्थल}} प्रयोक्ताकेँ पठाउ', +'emailfrom' => 'एतऽसँ:', +'emailto' => 'ऐलेल:', +'emailsubject' => 'विषय:', +'emailmessage' => 'संदेश:', +'emailsend' => 'पठाउ', +'emailccme' => 'हमर संदेशक द्वितीयक हमर ई-पत्रपर पठाउ', +'emailccsubject' => 'अहाँक संदेशक द्वितीयक $1: $2', +'emailsent' => 'ई-पत्र पठेलौं', +'emailsenttext' => 'अहाँक ई-पत्र संदेश पठाएल गेल।', +'emailuserfooter' => 'ई ई-पत्र $1 सँ $2 केँ "ई-पत्र प्रयोक्ता" केँ पठाओल गेल {{जालसथल}} पर।', + +# User Messenger +'usermessage-summary' => 'प्रणाली संदेश देल।', +'usermessage-editor' => 'प्रणालीक दूत', # Watchlist -'mywatchlist' => 'हमर साकांक्ष-सूची', -'watch' => 'ताकिमे', -'unwatch' => 'छोड़ू', +'watchlist' => 'हमर साकांक्षसूची', +'mywatchlist' => 'हमर साकांक्ष-सूची', +'watchlistfor2' => '$1 $2 लेल', +'nowatchlist' => 'अहाँक साकांक्ष-सूचीमे कोनो बौस्तु नै अछि।', +'watchlistanontext' => 'कृपा कऽ $1 अहाँक साकांक्ष-सूचीकेँ देखबा वा सम्पादित करबा लेल।', +'watchnologin' => 'सम्प्रवेशित नै', +'watchnologintext' => 'अहाँ [[Special:UserLogin|सम्प्रवेशित]] साकांक्ष-सूची संशोधित करबा लेल।', +'addedwatch' => 'साकांक्ष सूचीमे जोड़ू', +'addedwatchtext' => "पन्ना \"[[:\$1]]\" अहाँक [[Special:Watchlist|साकांक्ष सूची]] मे जोड़ल गेल। +ऐ पन्नामे भविष्यक परिवर्तन आ एकर सम्बन्धित चौबटिया पन्ना एतए सूचीबद्ध रहत, आ पन्ना [[Special:RecentChanges|हालक परिवर्तन]]मे '''गाढ़''' देखाएत , जइसँ आसानीसँ एकरा चिन्हल जा सकत।", +'removedwatch' => 'साकांक्ष सूचीसँ हटाएल गेल', +'removedwatchtext' => 'पन्ना "[[:$1]]" हटाएल गेल [[Special:Watchlist|अहाँक साकांक्षसूची]] सँ।', +'watch' => 'ताकिमे', +'watchthispage' => 'ऐ पृष्ठपर नजरि राखू', +'unwatch' => 'छोड़ू', +'unwatchthispage' => 'देखनाइ छोड़ू', +'notanarticle' => 'कोनो विषय सूची नै', +'notvisiblerev' => 'कोनो दोसर प्रयोक्ता द्वारा कएल अन्तिम परिवर्तन मेटा देल गेल', +'watchnochange' => 'अहाँक साकांक्ष सूचीमे सँ कोनोमे ऐ अवधिमे सम्पादन नै कएल गेल।', +'watchlist-details' => '{{PLURAL:$1|$1 पन्ना|$1 पन्ना सभ}} अहाँक साकांक्षसूचीमे, चौबटिया पन्ना नै गानल गेल।', +'wlheader-enotif' => '* ई-पत्र सूचना लागू अछि।', +'wlheader-showupdated' => "* पन्ना सभ जे अहाँक एतए अन्तिम बेर अएलाक बाद बदलल अछि तकर सूची देल अछि '''गाढ़''' मे", +'watchmethod-recent' => 'साकांक्ष सूचीक हालक सम्पादन जाँचि रहल छी', +'watchmethod-list' => 'साकांक्ष-सूचीक हालक सम्पादनकेँ देखि रहल छी', +'watchlistcontains' => 'अहाँक साकांक्ष-सूचीमे अछि $1 {{PLURAL:$1|पन्ना|पन्ना}}।', +'iteminvalidname' => "'$1' क संग समस्या, अमान्य नाम ...", +'wlnote' => "नीचाँ {{PLURAL:$1|is the last change|are the last '''$1''' changes}} अन्तिम {{PLURAL:$2|hour|'''$2''' hours}}।", +'wlshowlast' => 'देखाउ अन्तिम $1 घण्टा $2 दिन $3', +'watchlist-options' => 'साकांक्षसूचीक विकल्प सभ', # Displayed when you click the "watch" button and it is in the process of watching 'watching' => 'ताकिमे...', 'unwatching' => 'छोड़ल ...', +'enotif_mailer' => '{{जालस्थल}} सूचना पत्रक', +'enotif_reset' => 'सभ पन्नाकेँ देखल चिन्हित करू', +'enotif_newpagetext' => 'ई एकटा नव पन्ना छी।', +'enotif_impersonal_salutation' => '{{अन्तर्जाल}} प्रयोक्ता', +'changed' => 'बदलल गेल', +'created' => 'बनाएल गेल', +'enotif_subject' => '{{अन्तर्जाल}} पन्ना $PAGETITLE भेल $CHANGEDORCREATED द्वारा $PAGEEDITOR', +'enotif_lastvisited' => 'देखू $1 अपन अन्तिम बेर अएलाक बादक परिवर्तन लेल।', +'enotif_lastdiff' => 'ऐ परिवर्तनकेँ देखबा लेल $1 देखू।', +'enotif_anon_editor' => 'गुप्त प्रयोक्ता $1', +'enotif_body' => 'प्रिय $WATCHINGUSERNAME, + + +ई {{अन्तर्जाल}} पन्ना $पन्नाशीर्षक $CHANGEDORCREATED कएल गेल $PAGEEDITDATE तिथिकेँ $PAGEEDITOR द्वारा, देखू $PAGETITLE_URL वर्तमान संस्करण लेल। + +$NEWPAGE + +सम्पादकीय: $PAGESUMMARY $PAGEMINOREDIT + +सम्पादकसँ सम्पर्क करू: +ई-पत्र: $PAGEEDITOR_EMAIL +विकी: $PAGEEDITOR_WIKI + +आन परिवर्तन भेलापर कोनो सूचना नै देल जाएत जँ अहाँ ई पन्ना नै देखब। +अपन साकांक्ष सूचीक सूचना पेबाक प्रकार अहाँ बदलि सकै छी। + + अहाँक प्रिय {{ान्तर्जाल}} सूचना प्रणाली + +-- +अपन ई-पत्र सूचना प्रकार बदलबाक लेल देखू +{{fullurl:{{#special:Preferences}}}} +अपन साकांक्ष-सूची सूचना प्रकार बदलबाक लेल देखू +{{fullurl:{{#special:Watchlist}}/edit}} + +अपन साकांक्ष-सूचीसँ कोनो पन्ना मेटेबाक लेल देखू +$UNWATCHURL + +अपन अनुभव बतेबा वा कोनो सहायता लेल: +{{fullurl:{{MediaWiki:Helppage}}}}', + +# Delete +'deletepage' => 'पन्ना मेटाउ', +'confirm' => 'पक्का छी', +'excontent' => 'विषय छल:"$1"', +'excontentauthor' => 'पाठ छल:"$1" (आ एकमात्र योगदान दैबला छल "[[Special:Contributions/$2|$2]]")', +'exbeforeblank' => 'खतम होएबाक पहिने पाठ छल:"$1"', +'exblank' => 'पन्ना खाली छल', +'delete-confirm' => '$1 केँ मेटाउ', +'delete-legend' => 'मेटाउ', +'historywarning' => "'''चेतौनी:''' जे पन्ना अहाँ मेटबैबला छी तकर इतिहास अछि लगभग $1 {{PLURAL:$1|revision|revisions}}:", +'confirmdeletetext' => 'अहाँ सभटा इतिहासक संग ऐ पन्नाकेँ हटाबऽ जा रहल छी। +अहाँ ई सुनिश्चित करू जे अहाँ ई करऽ चाहै छी, अहाँकेँ एकर परिणामक अवगति अछि आ अहाँ ई ऐ [[{{MediaWiki:Policy-url}}|नीति]] क अनुसार कऽ रहल छी।', +'actioncomplete' => 'क्रिया पूर्ण', +'actionfailed' => 'कार्य नै भेल', +'deletedtext' => '"$1" केँ मेटा देल गेल अछि। +देखू $2 हालक मेटाएल सामिग्रीक अभिलेख लेल।', +'deletedarticle' => 'मेटाएल "[[$1]]"', +'suppressedarticle' => 'दबाएल "[[$1]]"', +'dellogpage' => 'मेटाएल सामिग्रीक वृत्तलेख', +'dellogpagetext' => 'नीचाँ एकदम हालक मेटाएलबला सूची अछि।', +'deletionlog' => 'मेटाएल सामिग्रीक वृत्तलेख', +'reverted' => 'पुरान कोनो संशोधन धरि घुराउ', +'deletecomment' => 'कारण:', +'deleteotherreason' => 'दोसर/ अतिरिक्त कारण:', +'deletereasonotherlist' => 'दोसर कारण', +'deletereason-dropdown' => '* सामान्य हटेबाक कारण +** लेखक आग्रह +** सर्वाधिकार उल्लंघन +** बिना मतलबक काँट-छाँट', +'delete-edit-reasonlist' => 'मेटेबाक कारणक सम्पादन करू', +'delete-toobig' => 'ऐ पन्नामे बड्ड बेसी सम्पादन इतिहास अछि, $1 सँ बेसी {{PLURAL:$1|revision|revisions}}। +ओइ सभ पन्नाक मेटाएब प्रतिबन्धित कएल गेल अछि जइसँ आकस्मिक क्षति नै हुअए {{जालस्थलक}}।', +'delete-warning-toobig' => 'ऐ पन्नामे बड्ड सम्पादन इतिहास अछि, $1 सँ बेसी {{PLURAL:$1|revision|revisions}}। +एकरा मेटेलापर दत्तनिधि क्रिया {{जालस्थल}} खतरामे पड़त; +सतर्कीसँ आगाँ बढ़ू।', + +# Rollback +'rollback' => 'प्रत्यावर्तित सम्पादन', +'rollback_short' => 'प्रत्यावर्तन', +'rollbacklink' => 'प्रत्यावर्तन', +'rollbackfailed' => 'प्रत्यावर्तन असफल', +'cantrollback' => 'सम्पादन आपस नै भऽ सकै अछि; +अन्तिम योगदान दैबला ऐ पन्नाक एकमात्र लेखक छी।', +'alreadyrolled' => 'अन्तिम सम्पादनक प्रत्यावर्तन नै भऽ सकैए [[:$1]] by [[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); +कियो आन ऐ पन्नाकेँ पहिनहिये सम्पादित वा प्रत्यावर्तित कऽ देने अछि। +ऐ पन्नाक अन्तिम सम्पादन भेल अछि एकरा द्वारा [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])।', +'editcomment' => "सम्पादन सार छल : \"''\$1''\"।", +'revertpage' => 'सम्पादन आपस कएल गेल [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) सँ अन्तिम संशोधन धरि एकरा द्वारा [[User:$1|$1]]।', +'revertpage-nouser' => '(प्रयोक्ताक नाम हटा देल गेल अछि) द्वारा केल गेल संपादनकेँ फेरसँ पुरान स्थितिमे आनि कऽ एकर पहिलुक [[User:$1|$1]] सँ बनल संस्करणकेँ फेरसँ ताजा संस्करण बनाऊ।', +'rollback-success' => '$1 केर संपादन हटाऊ. +$2 केर संपादित आखिरी अवतरण क पुनर्स्थापित करल गेल.', + +# Edit tokens +'sessionfailure-title' => 'सत्र विफल भ गेल', +'sessionfailure' => 'एहन लागैत अछि जे अहां के लागिन सत्र में कोनो त्रुटि अछि. सत्र अपहरण से बचाबय सं सावधानीक लेल अहां के अहि क्रियाकलाप क रद्द क देल गेल. अहां पाछां के पृष्ठ पर जौउ आ पृष्ठ के फेर सं लोड क दोबारा कोशिश करू.', + # Protect -'protectlogpage' => 'सुरक्षा लॉग', -'prot_1movedto2' => '[[$1]] गेल एतय [[$2]]', +'protectlogpage' => 'सुरक्षा लॉग', +'protectlogtext' => 'नीचाँ किछु पन्ना सुरक्षा आ पन्ना असुरक्षाक सूची अछि। +देखू [[Special:ProtectedPages|protected pages list]] हालक कार्यरत पन्ना सुरक्षाक सूची लेल।', +'protectedarticle' => 'रक्षित "[[$1]]"', +'modifiedarticleprotection' => '"[[$1]]" लेल बदलैत रक्षा स्तर', +'unprotectedarticle' => 'अरक्षित "[[$1]]"', +'movedarticleprotection' => 'सुरक्षा स्तर "[[$2]]" से बदल क "[[$1]]" क देल गेल.', +'protect-title' => '"$1" लेल रक्षा स्तर बदलू', +'prot_1movedto2' => '[[$1]] गेल एतय [[$2]]', +'protect-legend' => 'सुरक्षितता निर्धारित करू.', +'protectcomment' => 'कारण:', +'protectexpiry' => 'खतम हएत:', +'protect_expiry_invalid' => 'खतम हेबाक समए सही नै अछि।', +'protect_expiry_old' => 'खतम हेबाक समए भूतमे अछि।', +'protect-unchain-permissions' => 'आर सुरक्षा विकल्पकेँ अप्रतिबन्धित करू', +'protect-text' => "अहाँ पन्नाक रक्षा स्तरकेँ एतए देखि आ परिवर्तित कऽ सकै छी '''$1'''.", +'protect-locked-blocked' => "अहाँ प्रतिबन्धमे रहि कऽ सुरक्षा स्तर नै बदलि सकै छी। +एतए पन्ना '''$1''' लेल वर्तमान नियत कएल विकल्प अछि:", +'protect-locked-dblock' => "सक्रिय दत्तनिधि प्रतिबन्धक कारण सुरक्षा स्तर नै बदलल जा सकैए। +एतए '''$1''' लेल वर्तमान नियत विकल्प देल अछि:", +'protect-locked-access' => "अहाँक खाता अहाँकेँ रक्षा स्तरमे परिवर्तनक अधिकार नै दैत अछि। +एतए '''$1'''पन्नाक वर्तमान परिस्थिति देल गेल अछि:", +'protect-cascadeon' => 'ई पन्ना अखन रक्षित अछि कारण ई ऐ मे सम्मिलित अछि {{PLURAL:$1|पन्ना, जे अछि|पन्ना सभ, जे सभ अछि}} तराउपड़ी रक्षण लागू। +अहाँ ऐ पन्नाक रक्षा स्तरकेँ बदलि सकै छी, मुदा ताइ सँ तराउपड़ी रक्षापर असर नै पड़त।', +'protect-default' => 'सभ प्रयोक्ताकेँ अधिकार दिअ', +'protect-fallback' => '"$1" अनुमति चाही', +'protect-level-autoconfirmed' => 'नव आ अपंजीकृत प्रयोक्ताकेँ प्रतिबन्धित करू', +'protect-level-sysop' => 'माइनजन मात्र', +'protect-summary-cascade' => 'तराउपड़ी', +'protect-expiring' => 'खतम हएत $1 (UTC)', +'protect-expiry-indefinite' => 'अनिश्चित', +'protect-cascade' => 'रक्षित पन्ना ऐ पन्नापर संकलित अछि (तराउपड़ी रक्षा)', +'protect-cantedit' => 'अहाँ ऐ पन्नाक रक्षा स्तरमे परिवर्तन नै कऽ सकै छी, कारण अहाँकेँ एकरा सम्पादित करबाक अनुमति नै अछि।', +'protect-othertime' => 'दोसर समए:', +'protect-othertime-op' => 'दोसर समए', +'protect-existing-expiry' => 'अखुनका खतम हेबाक समए : $3, $2', +'protect-otherreason' => 'दोसर/ अतिरिक्त कारण:', +'protect-otherreason-op' => 'दोसर कारण', +'protect-dropdown' => '*सामान्य सुरक्षा कारण +** अत्यधिक दकचब +** अत्यधिक अनपेक्षित संदेश +** नोकसानबला सम्पादन चेतौनी +** बेसी पाठकबला पन्ना', +'protect-edit-reasonlist' => 'मेटेबाक कारणक सम्पादन करू', +'protect-expiry-options' => '१ घण्टा:1 hour,१ दिन:1 day,१ सप्ताह:1 week,२ सप्ताह:2 weeks,१ मास:1 month,३ मास:3 months,६ मास:6 months,१ साल:1 year,अनिश्चित:infinite', +'restriction-type' => 'अनुमति:', +'restriction-level' => 'अवरोध स्तर:', +'minimum-size' => 'न्यून आकार', +'maximum-size' => 'अधिक आकार:', +'pagesize' => '(अष्टक)', + +# Restrictions (nouns) +'restriction-edit' => 'संपादन', +'restriction-move' => 'घसकाउ', +'restriction-create' => 'बनाउ', +'restriction-upload' => 'उपारोपण', + +# Restriction levels +'restriction-level-sysop' => 'पूर्ण सुरक्षित', +'restriction-level-autoconfirmed' => 'अर्ध-रक्षित', +'restriction-level-all' => 'कोनो स्तर', + +# Undelete +'undelete' => 'मेटाएल पन्ना देखू', +'undeletepage' => 'देखू आ फेरसँ मेटाएल पन्ना आनू', +'undeletepagetitle' => "''' ई मेटाएल संशोधन लेने अछि [[:$1|$1]]एकर''' ।", +'viewdeletedpage' => 'मेटाएल पन्ना देखू', +'undeletepagetext' => 'ई {{PLURAL:$1|page has been deleted but is|$1 pages have been deleted but are}} अखनो जोगाएल पेटारमे अछि आ फेरसँ आनल नै जा सकैए। +ई जोगाएल पेटार बीच-बीचमे साफ करबाक चाही।', +'undelete-fieldset-title' => 'संशोधन सभकेँ घुराउ', +'undeleterevisions' => '$1{{PLURAL:$1|संशोधन|संशोधन सभ}} पेटारमे जोगाएल', +'undeletehistory' => 'जँ अहाँ पन्नाकेँ फेरसँ अनै छी, सभटा संशोधन पुरान स्तरपर संशोधित भऽ जाएत। +मेटेलाक बाद जँ एकटा नव पन्ना ओही नामसँ बनाएल गेल, आनल संशोधन सभ पुरान इतिहासमे आएत।', +'undeleterevdel' => 'पुनः अननाइ सफल नै हएत जँ ई पन्नाक शीर्ष वा संचिका संशोधनकेँ आंशिक रूपेँ मेटबैए। +ओहेन स्थितिमे, अहाँ सभसँ नव मेटाएल संशोधनक आग्रह खतम कऽ सकै छी वा सोझाँ आनि सकै छी।', +'undeletehistorynoadmin' => 'ई पन्ना मेटा देल गेल अछि। +मेटेबाक कारण नीचाँक सारांशमे देल गेल अछि, प्रयोक्ता विवरणक संग जे ऐ पन्नाकेँ मेटेबासँ पूर्व संशोधित केने छथि। +ऐ मेटाएल संशोधन सभक पाठ मात्र संचालक सभ लग उपलब्ध अछि।', +'undelete-revision' => 'मेटाएल संशोधन एकर सभक $1 (अखन $4, केँ $5) द्वारा $3:', +'undeleterevision-missing' => 'अमान्य आ अनुपलब्ध संशोधन। +अहाँ लग एकटा खराप लागि हएत वा पेटारसँ संशोधन आनि लेल गेल हएत वा हटा देल गेल हएत।', +'undelete-nodiff' => 'कोनो पुरान संशोधन नै भेटल।', +'undeletebtn' => 'घुराउ', +'undeletelink' => 'देखू/ पहिने जकाँ', +'undeleteviewlink' => 'देखू', +'undeletereset' => 'फेरसँ शुरू करू', +'undeleteinvert' => 'उनटा चयन', +'undeletecomment' => 'कारण:', +'undeletedarticle' => 'फेरसँ ओहिना "[[$1]]"', +'undeletedrevisions' => '{{PLURAL:$1|1 revision|$1 revisions}} घुराएल', +'undeletedrevisions-files' => '{{PLURAL:$1|1 संशोधन|$1 संशोधन}} and {{PLURAL:$2|1 संचिका|$2 संचिका}} आनल', +'undeletedfiles' => '{{PLURAL:$1|1 संचिका|$1 संचिका सभ}} आनल', +'cannotundelete' => 'फेरसँ नै आबि सकल; +सम्भव जे कियो आन पहिनहिये एकरा आनि लेने छथि।', +'undeletedpage' => "'''$1 आनि लेल गेल'''$1 +पूछू [[Special:Log/delete|deletion log]] वर्तमान मेटाएल आ आनल सूची लेल।", +'undelete-header' => 'देखू [[Special:Log/delete|the deletion log]] हालक मेटाएल पन्ना लेल।', +'undelete-search-box' => 'मेटाएल पन्ना सभकेँ ताकू', +'undelete-search-prefix' => 'से शुरु भेल पन्ना देखाबू.', +'undelete-search-submit' => 'ताकू', +'undelete-no-results' => 'एहेन पन्ना मेटाएल पेटारमे नै भेटल।', +'undelete-filename-mismatch' => 'समयानुसार $1: संचिकानाम नै मेल खेलक संचिका संशोधन नै आनल जा सकल', +'undelete-bad-store-key' => '$1: संचिका मेटेबासँ पहिने नै भेटल संचिका संशोधन आपस नै आबि सकल।', +'undelete-cleanup-error' => 'बिना प्रयोग कएल संचिका "$1" केँ मेटेबामे भ्रम संकेत।', +'undelete-missing-filearchive' => 'संचिका पेटार चेन्ह $1 केँ नै आनि सकल कारण ई दत्तनिधिमे नै अछि। +ई पहिनहिये आनि लेल गेल हएत।', +'undelete-error-short' => 'संचिका अनबामे भ्रम : $1', +'undelete-error-long' => 'संचिका अनबामे भ्रम संकेत भेटल: +$1', +'undelete-show-file-confirm' => 'की अहाँ आश्वस्त छी जे अहाँ संचिकाक मेटाएल संशोधन देखऽ चाहै छी "$1" सँ $2 पर $3?', +'undelete-show-file-submit' => 'हँ', # Namespace form on various pages +'namespace' => 'चेन्हासी समूह', +'invert' => 'उनटा चयन', 'blanknamespace' => '(मुख्य)', # Contributions -'mycontris' => 'हमर योगदान', +'contributions' => 'प्रयोक्ताक योगदान सभ', +'contributions-title' => '$1 लेल प्रयोक्ताक अवदान', +'mycontris' => 'हमर योगदान', +'contribsub2' => '$1 ($2) लेल', +'nocontribs' => 'कोनो परिवर्तन ऐ सँ मेल नै खाइए।', +'uctop' => '(शिखर)', +'month' => 'माससँ (आ पहिने)', +'year' => 'ऐ साल (आ पहिने)', -'sp-contributions-talk' => 'कहू', +'sp-contributions-newbies' => 'नव खाताक अवदानकेँ देखाउ', +'sp-contributions-newbies-sub' => 'नब सदस्यक लेल.', +'sp-contributions-newbies-title' => 'नब सदस्यक योगदान', +'sp-contributions-blocklog' => 'प्रतिबन्धबला वृत्तलेख', +'sp-contributions-deleted' => 'प्रयोक्ताक मेटाएल योगदान सभ', +'sp-contributions-uploads' => 'उपारोपण', +'sp-contributions-logs' => 'वृत्तलेख सभ', +'sp-contributions-talk' => 'वार्त्ता', +'sp-contributions-userrights' => 'प्रयोक्ता अधिकारक प्रबन्धन', +'sp-contributions-blocked-notice' => 'ई प्रयोक्ता अखन प्रतिबन्धित अछि। +अद्यतन प्रतिबन्धित वृत्तलेख लेखा सन्दर्भ नीचाँ देल अछि:', +'sp-contributions-blocked-notice-anon' => 'ई अनिकेत अखन प्रतिबन्धित अछि। +अद्यतन प्रतिबन्धित वृत्तलेख लेखा सन्दर्भ नीचाँ देल अछि:', +'sp-contributions-search' => 'अवदानक लेल ताकू', +'sp-contributions-username' => 'अनिकेत संकेत वा प्रयोक्तानाम:', +'sp-contributions-toponly' => 'मात्र ओइ सम्पादनकेँ देखाउ जे अद्यतन संशोधन छी।', +'sp-contributions-submit' => 'ताकू', # What links here -'whatlinkshere' => 'एतय कोन लिंक अछि', -'whatlinkshere-links' => '← लिंक', +'whatlinkshere' => 'एतय कोन लिंक अछि', +'whatlinkshere-title' => '"$1" सँ सम्बन्धित पन्ना सभ', +'whatlinkshere-page' => 'पन्ना:', +'linkshere' => "ई सभ पन्ना सम्बन्धित अछि '''[[:$1]]''':", +'nolinkshere' => "'''[[:$1]]''' पर कोनो पन्नाक लागि नै अछि।", +'nolinkshere-ns' => "कोनो पन्नाक लागि '''[[:$1]]''' चुनल नामगाममे नै अछि।", +'isredirect' => 'पन्नाकेँ घुराउ', +'istemplate' => 'परागत', +'isimage' => 'सम्बन्धित चित्र', +'whatlinkshere-prev' => '{{PLURAL:$1|पहिलुका|पहिलुका सभ $1}}', +'whatlinkshere-next' => '{{PLURAL:$1|अगुलका|अगुलका $1}}', +'whatlinkshere-links' => '← लिंक', +'whatlinkshere-hideredirs' => '$1 घुरबैए', +'whatlinkshere-hidetrans' => '$1 परागत', +'whatlinkshere-hidelinks' => '$1 सम्बन्ध सभ', +'whatlinkshere-hideimages' => '$1 चित्रक लागि सभ', +'whatlinkshere-filters' => 'चलनी सभ', # Block/unblock -'blocklink' => 'प्रतिबंधित', -'contribslink' => 'योगदान', +'blockip' => 'प्रयोक्ताकेँ प्रतिबन्धित करू', +'blockip-title' => 'प्रयोक्ताकेँ प्रतिबन्धित करू', +'blockip-legend' => 'प्रयोक्ताकेँ प्रतिबन्धित करू', +'blockiptext' => 'नीचाँक आवेदनक प्रयोग कोनो खास अनिकेत वा प्रयोक्तानामक लिखैक प्रवेशकेँ प्रतिबन्धित करबा लेल करू। +ई अतत्तः करैबलाक विरुद्ध प्रयुक्त हुअए, आ एकर अनुसार [[{{MediaWiki:Policy-url}}|policy]]। +नीचाँ स्पष्ट कारण लिखू (जेना, खास पन्नाकेँ देखबैत जतए अतत्तः कएल गेल अछि)।', +'ipadressorusername' => 'अनिकेत संकेत वा प्रयोक्तानाम:', +'ipbexpiry' => 'खतम हएत:', +'ipbreason' => 'कारण:', +'ipbreasonotherlist' => 'दोसर कारण', +'ipbreason-dropdown' => '*सामान्य प्रतिबन्ध कारण +** गलत सूचना घुसेनाइ +** पन्ना सभसँ पाठ हटेनाइ +** बाहरी जालस्थलक अवांछित लागि +** फालतू/ अवांछित सामिग्रिक पान्नामे घुसाएब +** धमकीबला व्यवहार/ तंग करब +** कएक खाताकेँ गरिआएब +** अवांछित प्रयोक्तानाम', +'ipbcreateaccount' => 'खाता निर्माण रोकू', +'ipbemailban' => 'प्रयोक्ताकेँ ई-पत्र पठेबासँ रोकू', +'ipbenableautoblock' => 'स्वचालित रूपेँ ऐ प्रयोक्ताक ऐ अनिकेतक प्रयोगकेँ प्रतिबन्धित करू, आ कोनो दोसर अनिकेत पताकेँ सेहो जतएसँ ओ सम्पादनक प्रयास करथि', +'ipbsubmit' => 'ऐ प्रयोक्ताकेँ रोकू', +'ipbother' => 'दोसर समए:', +'ipboptions' => '2 घण्टा:2 hours,1 दिन:1 day,3 दिन:3 days,1 सप्ताह:1 week,2 सप्ताह:2 weeks,1 मास:1 month,3 मास:3 months,6 मास:6 months,1 साल:1 year,अनिश्चित:infinite', +'ipbotheroption' => 'आन', +'ipbotherreason' => 'दोसर/ अतिरिक्त कारण:', +'ipbhidename' => 'प्रयोक्तानामकेँ सम्पादन आ सूचीसँ हटाउ', +'ipbwatchuser' => 'ऐ प्रयोक्ताक अपन आ वार्ता पन्नापर नजरि राखू', +'ipb-change-block' => 'प्रयोक्ताकें पुनः प्रतिबन्धित करू ई विकल्पक संग', +'badipaddress' => 'अमान्य आईपी पता', +'blockipsuccesssub' => 'प्रतिबन्ध सफल भेल', +'ipb-edit-dropdown' => 'प्रतिबन्ध कारण संपादित करू', +'ipb-unblock-addr' => 'प्रतिबन्ध हटाएल $1', +'ipb-unblock' => 'प्रयोक्ता वा अनिकेतकें अप्रतिबंधित करू', +'ipb-blocklist' => 'अखुनका प्रतिबंधित देखू', +'ipb-blocklist-contribs' => '$1 लेल अवदान', +'unblockip' => 'प्रयोक्ताकेँ प्रतिबन्धसँ हटाउ', +'ipusubmit' => 'ई प्रतिबन्ध हटाउ', +'unblocked' => '[[User:$1|$1]] अप्रतिबन्धित कएल गेल', +'unblocked-id' => '$1 अप्रतिबन्धित कएल गेल', +'ipblocklist' => 'प्रतिबन्धित प्रयोक्ता सभ', +'ipblocklist-legend' => 'प्रतिबन्धित प्रयोक्ताकेँ ताकू', +'ipblocklist-submit' => 'ताकू', +'ipblocklist-localblock' => 'स्थानीय प्रतिबन्ध', +'ipblocklist-otherblocks' => 'दोसर {{PLURAL:$1|block|blocks}}', +'infiniteblock' => 'अनिश्चित', +'expiringblock' => 'खतम हएत $1 क $2 केँ', +'anononlyblock' => 'अनाम मात्र', +'noautoblockblock' => 'स्वचालित प्रतिबन्ध अशक्त', +'createaccountblock' => 'लेखा निर्माण अशक्त कएल', +'emailblock' => 'ई-पत्र प्रतिबन्धित', +'blocklist-nousertalk' => 'अपन वार्ता पन्ना सम्पादित नै कऽ सकब', +'ipblocklist-empty' => 'प्रतिबन्धसूची खाली अछि।', +'ipblocklist-no-results' => 'आग्रह कएल अनिकेत वा प्रयोक्तानाम प्रतिबन्धित नै कएल गेल।', +'blocklink' => 'प्रतिबंधित', +'unblocklink' => 'नै बारल', +'change-blocklink' => 'खण्ड बदलू', +'contribslink' => 'योगदान', +'blocklogpage' => 'प्रतिबन्धित वृत्तलेख', +'blocklogentry' => 'प्रतिबन्धित [[$1]] एकर अन्तिम तिथि अछि $2 $3', +'unblocklogentry' => 'प्रतिबन्ध हटाएल $1', +'block-log-flags-anononly' => 'गुप्त प्रयोक्ता मात्र', +'block-log-flags-nocreate' => 'लेखा निर्माण अशक्त कएल', +'block-log-flags-noautoblock' => 'स्वचालित प्रतिबन्ध अशक्त', +'block-log-flags-noemail' => 'ई-मेल अवरुद्ध', +'block-log-flags-nousertalk' => 'अपन वार्ता पन्ना सम्पादित नै कऽ सकब', +'block-log-flags-angry-autoblock' => 'नीक स्वचालित प्रतिबन्ध देल गेल', +'block-log-flags-hiddenname' => 'प्रयोक्तानाम नुकाएल', +'range_block_disabled' => 'समूह खण्ड बनेबाक संचालकक क्षमता अशक्त कएल गेल।', +'ipb_expiry_invalid' => 'खतम हेबाक समए सही नै अछि।', +'ipb_expiry_temp' => 'नुकाएल प्रयोक्तानाम खण्ड स्थायी हेबाक चाही।', +'ipb_hide_invalid' => 'ऐ खाताकेँ द्बा नै सकलौं; ऐ मे बड्ड बेसी सम्पादन हएत।', +'ipb_already_blocked' => '"$1" पहिनहियेसँ प्रतिबन्धित अछि', +'ipb-otherblocks-header' => 'दोसर {{PLURAL:$1|block|blocks}}', +'ipb_cant_unblock' => 'भ्रम: खण्ड पहिचान $1 नै भेटल। ई पहिनहिये प्रतिबन्धसँ मुक्त भऽ गेल हएत।', +'ipb_blocked_as_range' => 'भ्रम: अनिकेत $1 सोझे प्रतिबन्धित नै अछि आ अप्रतिबन्धित नै कएल जा सकैए। +ई, मुदा, क्षेत्र $2 क अन्दर प्रतिबन्धित अछि, जे अप्रतिबन्धित कएल जा सकैए।', +'ip_range_invalid' => 'अमान्य अनिकेत क्षेत्र।', +'ip_range_toolarge' => 'समूह खण्ड पैघ अछि /$1 सभकेँ अनुमति नै छै।', +'blockme' => 'हमरा प्रतिबन्धित करू', +'proxyblocker' => 'दोसराइत प्रतिबन्धक', +'proxyblocker-disabled' => 'ई प्रकार्य प्रतिबन्धित अछि।', +'proxyblockreason' => 'अहाँक अनिकेत पता प्रतिबन्धित भेल अछि कारण ई सोझे-सोझ दोसराइत अछि। +अहाँ अपन अन्तर्जाल सेवा दाता वा तकनीकी सहायकसँ सम्पर्क करू आ ऐ गम्भीर सुरक्षा समस्याक सूचना दिअ।', +'proxyblocksuccess' => 'भेल।', +'sorbsreason' => 'अहाँक अनिकेत सूचित अछि सोझे-सोझ दोसराइतक रूपमे {{जालस्थल}} क डी.एन.एस.बी.एल.मे।', + +# Developer tools +'lockdb' => 'दत्तनिधि प्रतिबंधित करू', +'unlockdb' => 'दत्तनिधि अप्रतिबंधित करू', +'lockconfirm' => 'हँ, हम सत्ते दत्तनिधिकेँ प्रतिबन्धित करए चाहै छी।', +'unlockconfirm' => 'हँ, हम सत्ते दत्तनिधिकेँ अप्रतिबन्धित करए चाहै छी।', +'lockbtn' => 'दत्तनिधि प्रतिबंधित करू', +'unlockbtn' => 'दत्तनिधि अप्रतिबंधित करू', +'locknoconfirm' => 'अहाँ स्वीकृति बक्साकें टिक नै केने छी ।', +'lockdbsuccesssub' => 'दत्तनिधि प्रतिबन्ध सफल', +'unlockdbsuccesssub' => 'दत्तनिधि प्रतिबन्ध हटेलौं', +'lockdbsuccesstext' => 'दत्तनिधि प्रतिबन्ध लगाएल गेल|
    +मोन राखू [[Special:UnlockDB|remove the lock]]अहांक रखरखाव ख़तम भेलाक बाद ।', +'unlockdbsuccesstext' => 'दत्तनिधि अप्रतिबंधित ।', # Move page -'1movedto2' => '[[$1]] गेल एतय [[$2]]', +'move-page' => '$1हटाउ', +'move-page-legend' => 'पन्ना घसकाउ', +'movepagetext' => "नीचाँक फॉर्मक प्रयोग पन्नाक नाम बदलि देत, एकर सभटा इतिहासकेँ नव नामक अन्तर्गत राखि देत। +पुरान शीर्षक नव पन्ना लेल एकटा घुरबैबला पन्ना बनि जाएत। +अहाँ घुरबैबला पन्नाकेँ अद्यतन कऽ सकै छी जे मूल शीर्षकपर स्वचालित रूपेँ जाइत अछि। +जौं अहाँ ई नै करबाक निर्णय करै छी, निश्चय करू तकबा लेल [[Special:DoubleRedirects|double]] वा +[[Special:BrokenRedirects|broken redirects]] +अहाँ ऐ लेल जिम्मीदार छी जे सम्बन्धित लिंक ओतै जाए जतए ओकरा जेबाक चाही। + +मोन राखू कि पन्ना '''नै''' घसकाउ जौं नव शीर्षकपर पहिनहियेसँ पन्ना अछि, आ तखने ई करू जखन ओ खाली हुअए वा ओ एकटा घुमबैबला पन्ना हुअए वा ओइ पन्नाक कोनो भूतकालक सम्पादन इतिहास नै हुअए। +एकर माने भेल जे अहाँ कोनो पन्नाक नाम परिवर्तन कऽ पाछाँ लऽ जा सकै छी जतए एकर नाममे परिवर्तन कएल गेल रहए जौं अहाँसँ गलती भेल अछि, आ अहाँ ओइ पन्नाकेँ फेरसँ दोबारा नै लिख सकै छी। + + +'''चेतौनी!''' +ई एकटा लोकप्रिय पन्नाक लेल एकटा भयंकर आ बिना आशाक कएल परिवर्तन भऽ सकैए। +आगाँ बढ़ैसँ पहिने अहाँ ई सुनिश्चित करू जे अहाँ एकर परिणाम बुझै छी।", +'movepagetext-noredirectfixer' => "नीचाँक फॉर्मक प्रयोग पन्नाक नाम बदलि देत, एकर सभटा इतिहासकेँ नव नामक अन्तर्गत राखि देत। +पुरान शीर्षक नव पन्ना लेल एकटा घुरबैबला पन्ना बनि जाएत। +निश्चय करू तकबा लेल [[Special:DoubleRedirects|double]] वा[[Special:BrokenRedirects|broken redirects]]। +अहाँ ऐ लेल जिम्मीदार छी जे सम्बन्धित लिंक ओतै जाए जतए ओकरा जेबाक चाही। + +मोन राखू कि पन्ना '''नै''' घसकत जौं नव शीर्षकपर पहिनहियेसँ पन्ना अछि, आ तखने ई करू जखन ओ खाली हुअए वा ओ एकटा घुमबैबला पन्ना हुअए वा ओइ पन्नाक कोनो भूतकालक सम्पादन इतिहास नै हुअए। +एकर माने भेल जे अहाँ कोनो पन्नाक नाम परिवर्तन कऽ पाछाँ लऽ जा सकै छी जतए एकर नाममे परिवर्तन कएल गेल रहए जौं अहाँसँ गलती भेल अछि, आ अहाँ ओइ पन्नाकेँ फेरसँ दोबारा नै लिख सकै छी। + + +'''चेतौनी!''' +ई एकटा लोकप्रिय पन्नाक लेल एकटा भयंकर आ बिना आशाक कएल परिवर्तन भऽ सकैए। +आगाँ बढ़ैसँ पहिने अहाँ ई सुनिश्चित करू जे अहाँ एकर परिणाम बुझै छी।", +'movepagetalktext' => "सम्बन्धित चौबटिया पन्ना स्वचालित रूपेँ घसकत एकर संग '''जौं:''' +*एकटा खाली-नै चौबटिया पन्ना पहिनहियेसँ नव नामक संग अछि, वा +*अहाँ नीचाँक बॉक्स टिक हटा दी। + +ताइ परिस्थितिमे, अहाँकेँ अपनेसँ पन्नाकेँ, आवश्यकतानुसार, घसकाबऽ वा मिज्झर करऽ पड़त।", +'movearticle' => 'पन्ना घसकाउ:', +'moveuserpage-warning' => "'''चेतौनी!'''अहाँ एकटा प्रयोक्ता पन्ना घसका रहल छी | मोन राखू कि खाली पन्ना घसकत आ प्रयोक्ताक नाम ''नै'' बदलत ।", +'movenologin' => 'सम्प्रवेशित नै छी', +'newtitle' => 'नव शीर्षकपर:', +'move-watch' => 'जड़ि पन्ना आ छीप पन्ना देखू', +'movepagebtn' => 'पन्ना घसकाउ', +'pagemovedsub' => 'घसकल', +'movepage-moved' => '\'\'\'"$1" घसकाएल गेल "$2"\'\'\' पर', +'movepage-moved-redirect' => 'एकटा पुनर्निर्देशन बनाओल गेल छै.', +'movepage-moved-noredirect' => 'पुनर्निर्देशन नहि बनाओल गेल छै.', +'articleexists' => 'ओइ नामक एकटा पन्ना पहिनहियेसँ अछि, वा जे नाम अहाँ चयन केने छी से वांछित नै अछि। +कृपा कऽ दोसर नामक चयन करू।', +'cantmove-titleprotected' => 'नब शीर्षक बनाबै सें रोकहि के कारण, अहां अहि ठाम पर कोनो आन पृष्ठक ठाम बदलि नहि सकब.', +'talkexists' => "'''ई पन्ना स्वयं घसकाएल गेल, मुदा चौबटिया पन्ना नै घसकाओल जा सकल कारण नव शीर्षकपर एकटा एहने पहिनहियेसँ अछि। +कृपा कऽ एकरा सभकेँ अपनेसँ मिज्झर करू।'''", +'movedto' => 'घसकाएल गेल', +'movetalk' => 'सम्बन्धित चौबटिया पन्नाकेँ घसकाउ', +'move-subpages' => 'उपपृष्ठ सेहो लेल जाऊ ($1 धरि)', +'move-talk-subpages' => 'वार्ता पृष्ठक उपपृष्ठ लेने जाऊ ($1 धरि)', +'1movedto2' => '[[$1]] गेल एतय [[$2]]', +'1movedto2_redir' => 'घसकाएल [[$1]] सँ [[$2]] घुरैसँ फराक', +'movelogpage' => 'वृत्तलेख हटाउ', +'movereason' => 'कारण:', +'revertmove' => 'फेरसँ वएह', +'delete_and_move' => 'मेटाउ आ हटू', +'delete_and_move_confirm' => 'हँ, पन्ना मेटाउ', +'delete_and_move_reason' => 'घसकेबा लेल जगह बनेबा लेल मेटाएल गेल', +'immobile-source-page' => 'अहि पृष्ठ के अहां कतौ नहि ल जा सकब', + +# Export +'export' => 'पन्ना सभकेँ पठाउ', +'export-submit' => 'निर्यात', +'export-addcattext' => 'अहि श्रेणी केर पन्ना जोडू', +'export-addcat' => 'जोडू', +'export-addnstext' => 'अहि नामस्थान सें पन्ना जोडू', +'export-addns' => 'जोडू', +'export-download' => 'संचिका रूपमे संरक्षण करू', +'export-templates' => 'सभटा नमूना शामिल करू', + +# Namespace 8 related +'allmessages' => 'प्रणालीक सन्देश', +'allmessagesname' => 'नाम', +'allmessagesdefault' => 'पूर्वनिर्धारित संदेश पाठ', +'allmessagesnotsupportedDB' => "ई पन्ना प्रयोगमे नै आनल जा सकैए कारण '''\$wgUseDatabaseMessages''' अशक्त कएल अछि।", +'allmessages-filter-legend' => 'चलनी', +'allmessages-filter' => 'अपन हिसाबे अनुकूलित कऽ छाँटू:', +'allmessages-filter-unmodified' => 'अपरिवर्तित', +'allmessages-filter-all' => 'सभटा', +'allmessages-filter-modified' => 'संशोधित', +'allmessages-prefix' => 'उपसर्गक आधारपर छाँटू:', +'allmessages-language' => 'भाषा:', +'allmessages-filter-submit' => 'चलू', # Thumbnails -'thumbnail-more' => 'पैघ', +'thumbnail-more' => 'पैघ', +'filemissing' => 'संचिका हेराएल', +'thumbnail_error' => 'लघुचित्र निर्माण कालमे भ्रम:$1', +'djvu_page_error' => 'डेजावू पन्ना सकक बाहर अछि', +'djvu_no_xml' => 'डेजावू संचिकाक एक्स.एम.एल. नै आनि सकलौं', +'thumbnail_invalid_params' => 'अमान्य लघुचित्र परिमिति', +'thumbnail_dest_directory' => 'लक्ष्य निर्देशिका नै बना सकल', +'thumbnail_image-type' => 'चित्र प्रकार समर्थित नै अछि', +'thumbnail_gd-library' => 'अपूर्ण जी.डी.पुस्तकालय विन्यास: प्रकार्य $1 अनुपस्थित', +'thumbnail_image-missing' => 'संचिका लगैए अनुपस्थित अछि: $1', + +# Special:Import +'import' => 'पन्ना सभकेँ आनू', +'importinterwiki' => 'ट्रान्सविकी आनू', +'import-interwiki-text' => 'एकटा विकी आ पन्ना शीर्षक अनबाले चुनू। +संशोधन तिथि आ सम्पादकक नाम सुरक्षित रहत। +सभटा ट्रान्सविकी आयात क्रिया सम्प्रवेशित अछि [[Special:Log/import|import log]] पर।', +'import-interwiki-source' => 'मूल विकी/ पन्ना:', +'import-interwiki-history' => 'अए पन्नाक सभटा इतिहास संशोधनक द्वितीयक बनाउ', +'import-interwiki-templates' => 'सभटा नमूना शामिल करू', +'import-interwiki-submit' => 'आनू', +'import-interwiki-namespace' => 'लक्ष्य नामगाम:', +'import-upload-filename' => 'संचिकानाम:', +'import-comment' => 'समीक्षा:', +'importtext' => 'मूल विकी [[Special:Export|export utility]] क प्रयोग कऽ संचिका पठाउ। +अपन संगणकमे एकरा सुरक्षित करू आ एतए उपारोपित करू।', +'importstart' => 'पन्ना सभकेँ आनि रहल छी...', +'import-revision-count' => '$1 {{PLURAL:$1|संशोधन|संशोधन सभ}}', +'importnopages' => 'कोनो पन्ना अनबा लेल नै बचल।', +'imported-log-entries' => 'अनलौं $1 {{PLURAL:$1|log entry|log entries}}।', +'importfailed' => 'आयात विफल: $1', +'importunknownsource' => 'अज्ञात आयात स्रोत प्रकार', +'importcantopen' => 'आयात संचिकाकेँ नै खोलि सकलौं', +'importbadinterwiki' => 'खराप अन्तरविकी लागि', +'importnotext' => 'खाली वा बिना पाठक', +'importsuccess' => 'आयात सफल!', +'importhistoryconflict' => 'विरोधी इतिहास संशोधन अछि (ई पन्ना भऽ सकैए पहिने आनल गेल हुअए)', +'importnosources' => 'कोनो ट्रान्सविकी आयात स्रोत परिभाषित नै अछि आ सोझ इतिहास उपारोपण अशक्त कएल अछि।', +'importnofile' => 'कोनो आयातित संचिका उपारोपित नै भेल।', +'importuploaderrorsize' => 'संचिका उपारोपण विफल भेल। +ई संचिका अनुमति देल संचिका आकारसँ पैघ अछि।', +'importuploaderrorpartial' => 'आयातित संचिकाक उपारोपण विफल भेल। +ई संचिका आंशिक रूपेँ उपारोपित भेल।', +'importuploaderrortemp' => 'आयात संचिकाक उपारोपण विफल भेल। +एकटा अस्थायी संचयिका नै अछि।', +'import-parse-failure' => 'एक्स.एम.एल. आयात विभाजन असफल भेल', +'import-noarticle' => 'कोनो पन्ना अनबा लेल नै बचल!', +'import-nonewrevisions' => 'सभटा संशोधन पहिनहियेसँ आयातित अछि।', +'xml-error-string' => '$1 पाँतीपर $2, col $3 (byte $4): $5', +'import-upload' => 'एक्स.एम.एल. दत्तांश उपारोपित करू', +'import-token-mismatch' => 'एक उखराहाक दत्तांश खतम भऽ गेल। +फेरसँ प्रयास करू।', +'import-invalid-interwiki' => 'विशिष्ट विकीसँ आयात नै कऽ सकै छी।', # Import log 'importlogpage' => 'लॉगक आयात', # Tooltip help for the actions -'tooltip-pt-userpage' => 'हमर खेसरा पन्ना', -'tooltip-pt-mytalk' => 'हमर वार्त्ता पृष्ठ', -'tooltip-pt-preferences' => 'हमर मोनपसंद', -'tooltip-pt-watchlist' => 'पन्ना सभ जकर परिवर्त्तन पर अहाँक नजरि अछि', -'tooltip-pt-mycontris' => 'हमर योगदानक सूची', -'tooltip-pt-login' => 'लॉग इन करब नीक, परञ्च आवश्यक नहि.', -'tooltip-pt-logout' => 'फेर आयब', -'tooltip-ca-talk' => 'विषयसूचीक पन्नाक संबंधमे वर्त्तालाप', -'tooltip-ca-edit' => 'अहाँ एहि पन्नाकेँ संपादित कए सकैत छी। कृपया सुरक्षित करबासँ पहिने पूर्वप्रदर्शन बटम उपयोग करू।', -'tooltip-search' => 'ताकू {{SITENAME}}', -'tooltip-n-mainpage' => 'मुख्य-पृष्ठ केँ देखू', -'tooltip-n-portal' => 'प्रोजेक्टक विषयमे,अहाँ की कए सकैत छी,वस्तु प्राप्ति स्थल', -'tooltip-n-currentevents' => 'लगक घटनाक विषयमे आधार सूचना प्राप्त करू।', -'tooltip-n-recentchanges' => 'विकीमे लगक परिवर्त्तनक सूची.', -'tooltip-n-randompage' => 'कोनो अनिर्धारित पन्ना लोड करू', -'tooltip-n-help' => 'प्राप्त करबाक स्थान.', -'tooltip-t-whatlinkshere' => 'सभटा विकी-पन्नाक सूची जकर एतय लिंक अछि', -'tooltip-t-upload' => 'चित्र आकि मीडिया फाइलकेँ अपलोड करू', -'tooltip-t-specialpages' => 'सभटा विशेष पन्नाक सूची', -'tooltip-save' => 'अपन परिवर्त्तनके सुरक्षित करू', -'tooltip-preview' => 'परिवर्त्तनक प्रदर्शन, संजोगबाक पहिने एकर प्रयोग करू!', -'tooltip-diff' => 'देखाऊ जे परिवर्त्तन अहाँ एहि लेखमे कएलहुँ।', +'tooltip-pt-userpage' => 'अहाँक खेसरा पन्ना', +'tooltip-pt-mytalk' => 'अहाँक वार्त्ता पृष्ठ', +'tooltip-pt-preferences' => 'हमर मोनपसंद', +'tooltip-pt-watchlist' => 'पन्ना सभ जकर परिवर्त्तन पर अहाँक नजरि अछि', +'tooltip-pt-mycontris' => 'अहाँक योगदानक सूची', +'tooltip-pt-login' => 'लॉग इन करब नीक, परञ्च आवश्यक नहि.', +'tooltip-pt-logout' => 'फेर आयब', +'tooltip-ca-talk' => 'विषयसूचीक पन्नाक संबंधमे वर्त्तालाप', +'tooltip-ca-edit' => 'अहाँ एहि पन्नाकेँ संपादित कए सकैत छी। कृपया सुरक्षित करबासँ पहिने पूर्वप्रदर्शन बटम उपयोग करू।', +'tooltip-ca-addsection' => 'नव खण्ड शुरू करू', +'tooltip-ca-viewsource' => 'ऐ पन्नापर वरदहस्त छै। +अहाँ एकर जड़ि देख सकै छी।', +'tooltip-ca-history' => 'ऐ पृष्ठक पहिलुका परिवर्तन सभ', +'tooltip-ca-protect' => 'ऐ पन्नाकेँ बचाउ', +'tooltip-ca-delete' => 'ऐ पन्नाकेँ मेटाउ', +'tooltip-ca-move' => 'ऐ पृष्ठकेँ हटाउ', +'tooltip-ca-watch' => 'आइ पन्नाकेँ अपन साकांक्षसूचीमे राखू', +'tooltip-ca-unwatch' => 'ऐ पन्नाकेँ हमर साकांक्ष सूचीसँ हटाउ', +'tooltip-search' => 'ताकू {{SITENAME}}', +'tooltip-search-go' => 'पृष्ठपर जाऊ जौं एनमेन पृष्ठ रहए', +'tooltip-search-fulltext' => 'ऐ जानकारीले ताकू पृष्ठ सभमे ताकू', +'tooltip-p-logo' => 'सम्मुख पन्ना देखू', +'tooltip-n-mainpage' => 'मुख्य-पृष्ठ केँ देखू', +'tooltip-n-mainpage-description' => 'मुख्या पन्नापर जाउ', +'tooltip-n-portal' => 'प्रोजेक्टक विषयमे,अहाँ की कए सकैत छी,वस्तु प्राप्ति स्थल', +'tooltip-n-currentevents' => 'लगक घटनाक विषयमे आधार सूचना प्राप्त करू।', +'tooltip-n-recentchanges' => 'विकीमे लगक परिवर्त्तनक सूची.', +'tooltip-n-randompage' => 'कोनो अनिर्धारित पन्ना लोड करू', +'tooltip-n-help' => 'प्राप्त करबाक स्थान.', +'tooltip-t-whatlinkshere' => 'सभटा विकी-पन्नाक सूची जकर एतय लिंक अछि', +'tooltip-t-recentchangeslinked' => 'ऐ पृष्ठक लागिक पन्नामे भेल नव परिवर्तन', +'tooltip-feed-rss' => 'ऐ पन्ना लेल आर.एस.एस. सूचना', +'tooltip-feed-atom' => 'ऐ पन्ना लेल अणु समदिया', +'tooltip-t-contributions' => 'ऐ प्रयोक्ताक योगदानक सूची देखू', +'tooltip-t-emailuser' => 'ऐ प्रयोक्ताकेँ ई-पत्र पठाउ', +'tooltip-t-upload' => 'चित्र आकि मीडिया फाइलकेँ अपलोड करू', +'tooltip-t-specialpages' => 'सभटा विशेष पन्नाक सूची', +'tooltip-t-print' => 'ऐ पृष्ठक छपैबला रूप', +'tooltip-t-permalink' => 'पन्नाक ऐ संवर्धनक स्थायी लिंक', +'tooltip-ca-nstab-main' => 'विषय सूचीबला पन्ना देखू', +'tooltip-ca-nstab-user' => 'प्रयोक्ता पन्नाकेँ देखू', +'tooltip-ca-nstab-media' => 'मीडिया पृष्ठ देखू', +'tooltip-ca-nstab-special' => 'ई एकटा विशिष्ट पन्ना छी, अहाँ अही पन्नाकेँ संपादित नै कऽ सकै छी', +'tooltip-ca-nstab-project' => 'परियोजना पन्ना देखू', +'tooltip-ca-nstab-image' => 'पन्नाक पृष्ठ देखू', +'tooltip-ca-nstab-template' => 'नमूना देखू', +'tooltip-ca-nstab-help' => 'सहायता पृष्ठ देखू', +'tooltip-ca-nstab-category' => 'संवर्ग पन्ना देखू', +'tooltip-minoredit' => 'एकरा मामली सम्पादन चिन्हित करू', +'tooltip-save' => 'अपन परिवर्त्तनके सुरक्षित करू', +'tooltip-preview' => 'परिवर्त्तनक प्रदर्शन, संजोगबाक पहिने एकर प्रयोग करू!', +'tooltip-diff' => 'देखाऊ जे परिवर्त्तन अहाँ एहि लेखमे कएलहुँ।', +'tooltip-compareselectedversions' => 'ऐ पन्नाक दू टा चयन कएल संशोधनक बीचक अन्तर देखू', +'tooltip-watch' => 'ऐ पन्नाकेँ अपन साकांक्ष सूचीमे जोड़ू', +'tooltip-upload' => 'उपारोपण करू', +'tooltip-rollback' => '"प्रत्यावर्तन" ऐ पन्नाक अन्तिम योगदा करैबलाक सम्पादन (सम्पादन सभ) केँ एक क्लिकमे पुरान जगहपर लऽ जाउ', +'tooltip-undo' => '"फेरसँ वएह" सम्पादनकेँ पूर्वस्थितिमे लऽ जाइए आ पूर्वावलोकन अवस्थामे सम्पादन फॉर्म खोलैए। ई सारांशमे कारण जोड़बाक विकल्प दैत अछि।', +'tooltip-preferences-save' => 'मोनपसंद के सुरक्षित करू', +'tooltip-summary' => 'छोट संक्षेप दिअ', + +# Attribution +'anonuser' => '{{SITENAME}} नुकायल प्रयोक्ता $1', +'othercontribs' => '$1 के काजुक तरहे', +'others' => 'दोसर, आन', +'nocredits' => 'अहि पन्नाक लेल क्रेडिट ज़ानकारी नहि अछि', + +# Info page +'infosubtitle' => 'पृष्ठक लेल नब गप', +'numedits' => 'सम्पादनक संख्या (पृष्ठ) : $1', +'numauthors' => 'अलग लेखकक संख्या (पृष्ठ): $1', + +# Patrol log +'patrol-log-line' => 'चेन्हासी देल $2 क $1 संचालित $3', +'patrol-log-diff' => 'संशोधन $1', + +# Browsing diffs +'previousdiff' => 'पुरान सम्पादन', +'nextdiff' => 'नव सम्पादन', + +# Media information +'file-info-size' => '$1 × $2 चित्राणु, फाइल आकार: $3, माइम प्रकार: $4', +'file-nohires' => '<छोट>ऐसँ बेशी आनन्तर्य उपलब्ध नै अछि।', +'svg-long-desc' => 'एस.वी.जी. फाइल, मामूली रूपमे $1 × $2 चित्रकण, फाइलक आकार: $3', +'show-big-image' => 'पूर्ण आनन्तर्य', +'file-info-gif-looped' => 'घुरियाएल', +'file-info-gif-frames' => '$1 {{PLURAL:$1|खाका |खाका सभ }}', +'file-info-png-looped' => 'घुरियाएल', +'file-info-png-repeat' => 'छुअल $1 {{PLURAL:$1|बेर|बेर}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|खाका |खाका सभ }}', + +# Special:NewFiles +'newimages' => 'नव संचिका सबहक पेटार', +'newimages-legend' => 'चलनी', +'newimages-label' => 'संचिका नाम (वा ओकर अंश):', +'showhidebots' => '($1 स्वचालक सभ)', +'noimages' => 'किछु देखबा योग्य नै |', +'ilsubmit' => 'ताकू', +'bydate' => 'तारीख सं', +'sp-newimages-showfrom' => '$2, $१ सं शुरू होइबला नव संचिका देखाउ', # Bad image list 'bad_image_list' => 'फॉर्मेट निम्न प्रकारेँ अछि: @@ -304,7 +2496,194 @@ $messages = array( ओही पंक्त्तिक कोनो आर लिंक अपवाद स्वरूप अछि, उदाहरणस्वरूप पन्ना जतय चित्र पंक्त्तिअहि पर होय।', +# Metadata +'metadata' => 'प्रदत्तांश', +'metadata-help' => 'ई फाइल अतिरिक्त सूचना दैत अछि, सम्भवतः ई अंकीय कैमरा वा स्कैनर द्वारा बनाएल वा अंकण कए जोड़ल गेल अछि। +जौं फाइलकेँ मूल रूपसँ परिवर्धित कएल गेल हएत तँ किछु विवरण पूर्ण रूपसँ परिवर्धित फाइलमे नै देखाएल गेल हएत।', +'metadata-expand' => 'बढ़ाओल विवरण देखाउ।', +'metadata-collapse' => 'विस्तृत विवरण नुकाउ', + +# EXIF tags +'exif-imagewidth' => 'चौड़ाई', +'exif-imagelength' => 'ऊँच', +'exif-bitspersample' => 'प्रति भाग अष्टक', +'exif-compression' => 'घोकचेनाइक पद्धति', +'exif-photometricinterpretation' => 'वर्ण बिंदु प्रकार', +'exif-orientation' => 'अभिविन्यास', +'exif-samplesperpixel' => 'खंडक प्रकार', +'exif-planarconfiguration' => 'दतांश सचियाएब', +'exif-ycbcrpositioning' => 'Y आ Cक स्थान', +'exif-imagedescription' => 'चित्र शीर्षक', + +'exif-meteringmode-0' => 'अज्ञात', +'exif-meteringmode-1' => 'औसत', +'exif-meteringmode-3' => 'ठाम', +'exif-meteringmode-4' => 'ठामे -ठाम', +'exif-meteringmode-5' => 'प्रतिमान', +'exif-meteringmode-6' => 'आंशिक', +'exif-meteringmode-255' => 'आन', + +'exif-scenecapturetype-0' => 'मानक', +'exif-scenecapturetype-1' => 'परिदृश्य', +'exif-scenecapturetype-2' => 'चित्र', +'exif-scenecapturetype-3' => 'रात्रिक दृश्य', + +'exif-gaincontrol-0' => 'कोनो नै', + +'exif-contrast-0' => 'सामान्य', +'exif-contrast-1' => 'नरम', +'exif-contrast-2' => 'पखठायल', + +'exif-saturation-0' => 'सामान्य', + +'exif-sharpness-0' => 'सामान्य', +'exif-sharpness-1' => 'नरम', +'exif-sharpness-2' => 'पखठायल', + +'exif-subjectdistancerange-0' => 'अज्ञात', +'exif-subjectdistancerange-2' => 'लग सें देखू', +'exif-subjectdistancerange-3' => 'दूर सें देखू', + +# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef +'exif-gpslatitude-n' => 'उत्तरबरिया अक्षांश', +'exif-gpslatitude-s' => 'दखिनबरिया अक्षांश', + +# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef +'exif-gpslongitude-e' => 'पुबरिया रेखांश', +'exif-gpslongitude-w' => 'पछबरिया रेखांश', + +'exif-gpsstatus-a' => 'नापी चलि रहल छै', + +# Pseudotags used for GPSSpeedRef +'exif-gpsspeed-k' => 'कि.मी. प्रति घंटा', +'exif-gpsspeed-m' => 'माईल प्रति घंटा', +'exif-gpsspeed-n' => 'गिरह', + +# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef +'exif-gpsdirection-t' => 'असल दिश', + +# External editor support +'edit-externally' => 'ऐ फाइलकेँ बाहरी अनुप्रयोगसँ हटाउ', +'edit-externally-help' => '(देखू [http://www.mediawiki.org/wiki/Manual:External_editors setup instructions] विषेष जानकारी लेल)', + +# 'all' in various places, this might be different for inflected languages +'watchlistall2' => 'सभ', +'namespacesall' => 'सभटा', +'monthsall' => 'सभ', + +# action=purge +'confirm_purge_button' => 'ठीक अछि', + +# Multipage image navigation +'imgmultipageprev' => 'पहिलुका पृष्ठ', +'imgmultipagenext' => 'अगुलका पृष्ठ', +'imgmultigo' => 'जाऊ', +'imgmultigoto' => '$1 पृष्ठ पर जाऊ', + +# Table pager +'table_pager_limit_submit' => 'जाऊ', + +# Watchlist editor +'watchlistedit-raw-titles' => 'शीर्षक', + +# Watchlist editing tools +'watchlisttools-view' => 'सम्बन्धित परिवर्तन सभकेँ देखू', +'watchlisttools-edit' => 'साकांक्षसूचीकेँ देखू आ सम्पादित करू', +'watchlisttools-raw' => 'काँच साकांक्षसूची संपादित करू', + +# Core parser functions +'duplicate-defaultsort' => '\'\'\'चेतौनी:\'\'\' पूर्वनिर्धारित विन्यास चाभी "$2" पहिलुका पूर्वनिर्धारित विन्यास चाभी "$1" केँ खतम करैए।', + +# Special:Version +'version' => 'संस्करण', +'version-extensions' => 'संस्करणक आगाँ', +'version-specialpages' => 'खास पन्ना', +'version-other' => 'आन', +'version-software-product' => 'उत्पाद', +'version-software-version' => 'संस्करण', + +# Special:FilePath +'filepath-page' => 'संचिका', +'filepath-submit' => 'जाऊ', + +# Special:FileDuplicateSearch +'fileduplicatesearch-submit' => 'ताकू', + # Special:SpecialPages -'specialpages' => 'विशेष पन्ना', +'specialpages' => 'विशेष पन्ना', +'specialpages-group-maintenance' => 'सुस्थापन प्रतिवेदन', +'specialpages-group-other' => 'दोसर विशेष पन्ना', +'specialpages-group-login' => 'सम्प्रवेश/ सम्प्रवेश आवेदन', +'specialpages-group-changes' => 'हालक परिवर्तन आ वृत्तलेख', +'specialpages-group-media' => 'मीडिया प्रतिवेदन आ उपारोपण', +'specialpages-group-users' => 'प्रयोक्ता आ अधिकार', +'specialpages-group-highuse' => 'बेसी प्रयोगबला पन्ना सभ', +'specialpages-group-pages' => 'पन्ना सभक सूची', +'specialpages-group-pagetools' => 'पन्नाक औजार सभ', +'specialpages-group-wiki' => 'विकी दत्तांश आ औजार सभ', +'specialpages-group-redirects' => 'घुरबैबला विशेष पन्ना सभ', +'specialpages-group-spam' => 'अनपेक्षित संदेश औजार', + +# Special:BlankPage +'blankpage' => 'खाली पन्ना', +'intentionallyblankpage' => 'ई पन्ना पलानि कऽ खाली छोड़ल गेल।', + +# External image whitelist +'external_image_whitelist' => '# ऐ पाँतीकेँ एकदम ओहिना छोड़ि दियौ जेना ई अछि
    +# सामान्य वैचारिक खण्ड नीचाँ राखू (// क बीचक खण्ड मात्र)।
    +# ई सभ बाहरी (ताजाताजी लागि) चित्रक सार्वत्रिक विभव संकेतसँ मेल खुआएल जाएत
    +# ओ सभ जे मेल खाएत से चित्रक रूपमे प्रदर्शित हएत, नै तँ खाली एकटा चित्रक लागि देखाएल जाएत
    +# # सँ शुरू भेल पाँती टिप्पणीक रूपमे देखल जाएत।
    +# ई ब्रह्मक्षर-लघ्वक्षरक फेरासँ स्वतंत्र अछि।
    +
    +# सभटा सामान्य कथन ऐ पाँतीसँ ऊपर राखू। ऐ पाँतीकेँ एकदम ओहिना छोड़ू जेना ई अछि 
    ', + +# Special:Tags +'tags' => 'मान्य परिवर्तन चेन्ह सभ', +'tag-filter' => '[[Special:Tags|Tag]] छन्ना:', +'tag-filter-submit' => 'चलनी', +'tags-title' => 'चेन्ह सभ', +'tags-intro' => 'ई पन्ना चेन्ह सभकेँ सूचित करैए जे तंत्रांश सम्पादनसँ चिन्हित करए, आ ओकर अर्थ सेहो।', +'tags-tag' => 'चेन्हक नाम', +'tags-display-header' => 'परिवर्तन सूची सभक रूपरंग', +'tags-description-header' => 'अर्थक पूर्ण विवरण', +'tags-hitcount-header' => 'चेन्हयुक्त परिवर्तन सभ', +'tags-edit' => 'सम्पादन करू', +'tags-hitcount' => '$1 {{PLURAL:$1|परिवर्तन|परिवर्तन सभ}}', + +# Special:ComparePages +'comparepages' => 'पन्ना सभक तुलना करू', +'compare-selector' => 'पन्ना सभक संशोधनक तुलना करू', +'compare-page1' => 'पन्ना १', +'compare-page2' => 'पन्ना २', +'compare-rev1' => 'संशोधन १', +'compare-rev2' => 'संशोधन २', +'compare-submit' => 'तुलना करू', + +# Database error messages +'dberr-header' => 'ऐ विकीमे एकटा समस्या अछि', +'dberr-problems' => 'दुखी छी! +ई जालस्थल तकनीकी समस्या अनुभव कऽ अछि।', +'dberr-again' => 'किछु काल बाट ताकू आ फेरसँ भारित करू।', +'dberr-info' => '(दत्तनिधि वितरककेँ सम्पर्क नै कऽ सकल: $1)', +'dberr-usegoogle' => 'ऐ बीचमे अहाँ गूगलसँ खोज कऽ सकै छी।', +'dberr-outofdate' => 'मोन राखू जे हमर सामिग्रीक ओकर सूची पुरान भऽ सकैए।', +'dberr-cachederror' => 'ई आग्रह कएल पन्नाक उपस्मृति संरक्षित द्वितीयक अछि, आ भऽ सकैए जे अद्यतन नै हुअए।', + +# HTML forms +'htmlform-invalid-input' => 'अहाँक किछु निवेशनमे किछु समस्या भऽ सकैए।', +'htmlform-select-badoption' => 'जे मान अहाँ देलौं से मान्य विकल्प नै अछि।', +'htmlform-int-invalid' => 'जे मान अहाँ देलौं से पूर्णांक नै छी।', +'htmlform-float-invalid' => 'जे मान अहाँ देलौं से संख्या नै छी।', +'htmlform-int-toolow' => 'जे मान अहाँ देलौं से न्यूनतम $1 सँ नीचाँ अछि।', +'htmlform-int-toohigh' => 'जे मान अहाँ देलौं से अधिकतम $1 सँ ऊपर अछि।', +'htmlform-required' => 'ई मान चाही', +'htmlform-submit' => 'दिअ', +'htmlform-reset' => 'परिवर्तन खतम करू', +'htmlform-selectorother-other' => 'आन', + +# SQLite database support +'sqlite-has-fts' => '$1 पूर्ण-पाठ खोज सहायता युक्त', +'sqlite-no-fts' => '$1 बिन पूर्ण-पाठ खोज सहायताक', ); diff --git a/languages/messages/MessagesMdf.php b/languages/messages/MessagesMdf.php index 6d0157ad..3016cf6c 100644 --- a/languages/messages/MessagesMdf.php +++ b/languages/messages/MessagesMdf.php @@ -155,8 +155,7 @@ $messages = array( 'tog-editsection' => 'Няфтемс сюлмафксть [петемс] эрь пяльксонди', 'tog-editsectiononrightclick' => 'Петнемс пялькстне: люпштамс сёрмадомбяльксть лемонц лангс видешире пуняса (JavaScript)', 'tog-showtoc' => 'Няфтемс сёрматфть потмакс (лопатнень, конатнень эса 3 сёрмадома конякста лама)', -'tog-rememberpassword' => 'Ванфтомс монь сувама лемозе тя содама машинаса', -'tog-editwidth' => 'Келептть петнема паксять сембе вальмать келес', +'tog-rememberpassword' => 'Ванфтомс монь сувама лемозе тя содама машинаса (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Сувафтомс монь тефть лопатне монь мельгеваномазон', 'tog-watchdefault' => 'Сувафтомс монь петнема лопане монь мельгеваномазон', 'tog-watchmoves' => 'Лопатнень шашфтомста сувафтомс синь монь мельгеваномазон', @@ -290,30 +289,19 @@ $messages = array( 'faqpage' => 'Project:Сидеста Кеподеви Кизефксне', # Vector skin -'vector-action-delete' => 'Нардамс', -'vector-action-move' => 'Шашфтомс', -'vector-action-protect' => 'Араламс', -'vector-action-undelete' => 'Мърдафтомс', -'vector-action-unprotect' => 'Аралама лоткамс', -'vector-namespace-category' => 'Категорие', -'vector-namespace-help' => 'Лезкс лопа', -'vector-namespace-image' => 'Файл', -'vector-namespace-main' => 'Лопа', -'vector-namespace-media' => 'Медиа лопа', -'vector-namespace-mediawiki' => 'Пачфтема', -'vector-namespace-project' => 'Проектонь лопа', -'vector-namespace-special' => 'Башка тевонь лопа', -'vector-namespace-talk' => 'Корхнема', -'vector-namespace-template' => 'Шаблон', -'vector-namespace-user' => 'Тиинь лопа', -'vector-view-create' => 'Тиемс', -'vector-view-edit' => 'Петнемс', -'vector-view-history' => 'История няфтемс', -'vector-view-view' => 'Морафтомс', -'vector-view-viewsource' => 'Лисьма няфтемс', -'actions' => 'Тефне', -'namespaces' => 'Лемботмот', -'variants' => 'Вариатт', +'vector-action-delete' => 'Нардамс', +'vector-action-move' => 'Шашфтомс', +'vector-action-protect' => 'Араламс', +'vector-action-undelete' => 'Мърдафтомс', +'vector-action-unprotect' => 'Аралама лоткамс', +'vector-view-create' => 'Тиемс', +'vector-view-edit' => 'Петнемс', +'vector-view-history' => 'История няфтемс', +'vector-view-view' => 'Морафтомс', +'vector-view-viewsource' => 'Лисьма няфтемс', +'actions' => 'Тефне', +'namespaces' => 'Лемботмот', +'variants' => 'Вариатт', 'errorpagetitle' => 'Эльбятькс', 'returnto' => 'Мърдамс $1-с.', @@ -529,7 +517,7 @@ $2', 'yourname' => 'Тиить лемоц:', 'yourpassword' => 'Сувама валце:', 'yourpasswordagain' => 'Сёрматк сувама валце омбоцекс:', -'remembermypassword' => 'Ванфтомс монь сувама лемозе тя содама машинаса', +'remembermypassword' => 'Ванфтомс монь сувама лемозе тя содам машинаса (максимум $1 {{PLURAL:$1|шис|шис}})', 'yourdomainname' => 'Тонь доменце:', 'externaldberror' => 'Лиссь эльбятькс ушеширень датабазонь вельде кемокстакшнембачк эли тондейть аф мярьгови полафнемс тонь ушеширень сёрматфтомацень.', 'login' => 'Сувама', @@ -746,8 +734,6 @@ $2', Улефтяряй мяльце тонь сёрмадоматнень петнелезь, тяза синь тят путне.
    Тон стане ина максат вал сянь колга мес сембе тонь сёрмадоматне тиить тонць эли синь сявить марстонь эли иля панжада лисьмаста. (ванк $1).
    '''ТЯТ СУВАФНЕ КОПИЯМА ВИДЕКССА АРАЛАФ МАТЕРИАЛХТ МЯРЬГОМАФТОМА!'''", -'longpagewarning' => "'''ИНГОЛЕ КАРДАМА: Тя лопать кувалмоц $1 килобайтт; кодамога интернет полатксонь вальмава стакаста петнемс лопат 32 килобайтти мала эли сяда кувака. -Эняльттяма, арьсек улендяряй кода лопать явфтомс сяда ёмла пяльксова.'''", 'longpageerror' => "'''ЭЛЬБЯТЬКС: Тонь текстцень кувалмоц $1 килобайтт, тя максимупть $2 килобайтта лама. Сонь аш кода ванфтомс.'''", 'readonlywarning' => "'''ИНГОЛЕ КАРДАМА: Датабазась пякстаф петема покаматнень сюнеда, тя пингста тондейть аш кода ванфтомс тонь петнематнень. Шятьта тондейть пароль синь ванфтомс текст файлс ди путомс тяза меле.''' @@ -931,6 +917,7 @@ $3 макссь туфталсь - ''$2''", # Diffs 'history-title' => '"$1"-нь верзиетнень историясна', 'difference' => '(Явомась верзиетнень ёткова)', +'difference-multipage' => 'Явомась лопаланготнень ёткова', 'lineno' => 'Кикссь $1:', 'compareselectedversions' => 'Путомс кочкаф верзиетнень ваксс', 'editundo' => 'валхтомс', @@ -1326,7 +1313,6 @@ $3 макссь туфталсь - ''$2''", 'fileexists-shared-forbidden' => 'Файлсь тя лемть мархта ульсь ни марстонь файл пърдафксса. Сембе сяка улендярять мяльце тя файлть тонгомс, мърдак меки ди тонк тя файлть иля лем мархта. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Тя файлсь кафонзафоль {{PLURAL:$1|файл|файлхт}}:', 'file-deleted-duplicate' => 'Файлсь сяка кода файл ([[:$1]]) нардафоль. Ванк файлонь нардама историянц сонь одукс тонгоманза инголе.', -'successfulupload' => 'Тонгодемась ётась лац', 'uploadwarning' => 'Тонгодемань инголе кардама', 'savefile' => 'Ванфтомс файл', 'uploadedimage' => 'тонгозь "[[$1]]"', @@ -1344,6 +1330,7 @@ $3 макссь туфталсь - ''$2''", Лацкаста арьсек афкукс тонь ули мяльце сонь тонгомонза эли аф. Нардама лувома информациесь тяса:", 'filename-bad-prefix' => "Тон тонгодьсак файл конань лемоц ушеды '''\"\$1\"'''-са. Стапт лепне лувовихть мезеньге аф колга азондовикс сяс мес синь эсь макссевихть тяшкскамераса тиф фотоархтофксненди (цифра камераса). Арьсек иля лем, конаса ащель информациеда лама.", +'upload-success-subj' => 'Тонгодемась ётась лац', 'upload-proto-error' => 'Аф кондясти протокол', 'upload-proto-error-text' => 'Ичкоздень тонгодеманди эряви URL-т ушедыхть http://-са эли ftp://-са.', @@ -1474,7 +1461,6 @@ $3 макссь туфталсь - ''$2''", 'statistics-edits-average' => 'Петнемат фкя лопас ётксталувксста', 'statistics-views-total' => 'Ванондомада сембоц', 'statistics-views-peredit' => 'Фкя петнемас ванондомада', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Покаматнень пулонь] кувалмоц', 'statistics-users' => 'Сёрматфтф [[Special:ListUsers|тиихне]]', 'statistics-users-active' => 'Покай тиихне', 'statistics-users-active-desc' => 'Тиихне конатне тисть мезеге ётай {{PLURAL:$1|шиня|$1 шиста}}', @@ -1485,8 +1471,8 @@ $3 макссь туфталсь - ''$2''", 'disambiguations-text' => "Ня лопатне сюлмафт '''лама смузень лопа''' мархта. Синьдеест эрявихть сюлмамс иля башка сёрмафкснень мархта.
    Лопась лувови лама смузеннекс мъзярда сон сюлмаф [[MediaWiki:Disambiguationspage]] кепотькс мархта.", 'doubleredirects' => 'Кафонзаф умборондафтфксне', -'doubleredirectstext' => 'Тя лопань лувомаса няфтевихть умборондафтфксне сюлмафт иля умборондафтфкснень мархта. Эрь луфксса (строкаса) улихть васенце ди омбоце умборондафтфкснень сюлмафкссна, тяса тага ули омбоце умборондафтфксонь васенце киксонцты сюлмафкссь, тоса ули няфтемась лопань лемонц лангс конань мархта эряволь васенце умборондафтфксть сюлмафтомс. -Туркс кикс мархта тяшксне латцефольхть.', +'doubleredirectstext' => 'Тя лопань лувомаса няфтевихть умборондафтфксне сюлмафт иля умборондафтфкснень мархта. Эрь луфксса (строкаса) улихть васенце ди омбоце умборондафтфкснень сюлмафкссна, тяса тага ули омбоце умборондафтфксонь васенце киксонцты сюлмафкссь, тоса ули няфтемась лопань лемонц лангс конань мархта эряволь васенце умборондафтфксть сюлмафтомс. +Туркс кикс мархта тяшксне латцефольхть.', 'double-redirect-fixed-move' => '[[$1]] шашфтфоль, сон тяни [[$2]]нь умборондафтфксоц', 'double-redirect-fixer' => 'Умборондафтфксонь латцема', @@ -1674,7 +1660,6 @@ $3 макссь туфталсь - ''$2''", # Watchlist 'watchlist' => 'Монь мельгеваномазе', 'mywatchlist' => 'Монь мельгеваномазе', -'watchlistfor' => "('''$1'''-нди)", 'nowatchlist' => 'Мезеге аш тонь мельгеваномасот.', 'watchlistanontext' => '$1 тонь ванома мельгеваномаста лопат ваноманкса эли петнеманкса.', 'watchnologin' => 'Апак сувак', @@ -1789,7 +1774,9 @@ $UNWATCHURL 'editcomment' => "Петнема лихтема ульсь: \"''\$1''\".", 'revertpage' => 'Петнематнень мърдафтозь [[Special:Contributions/$2|$2]] ([[User talk:$2|Корхнема]]) сядынгольдень верзиес мърдафтозе [[User:$1|$1]]', 'rollback-success' => 'Петнематнень мърдафтозе $1; сядынгольдень верзиес мърдафтозе $2.', -'sessionfailure' => 'Улема, лиссь прябала тонь сувама пингста; програмонь якамась лотказевсь сувамать върьгятемада аралама туфталонкса. Эняльттяма, люпштак "меки" ди одонзафтт лопать, конаста тон сать, меле тик сембе одукс.', + +# Edit tokens +'sessionfailure' => 'Улема, лиссь прябала тонь сувама пингста; програмонь якамась лотказевсь сувамать върьгятемада аралама туфталонкса. Эняльттяма, люпштак "меки" ди одонзафтт лопать, конаста тон сать, меле тик сембе одукс.', # Protect 'protectlogpage' => 'Аралама лувома', @@ -1981,7 +1968,6 @@ $1', 'ipb-edit-dropdown' => 'Полафтомс сёлгома туфталхт', 'ipb-unblock-addr' => 'Валхтомс $1-нь сёлгома', 'ipb-unblock' => 'Тиинь эли IP адресонь сёлгома валхтомс', -'ipb-blocklist-addr' => '$1нь тяниень сёлгоманза', 'ipb-blocklist' => 'Ваномс тяниень сёлгомат', 'ipb-blocklist-contribs' => 'Путксне $1 лопанди', 'unblockip' => 'Валхтомс сёлгома тииста', @@ -2370,10 +2356,10 @@ $1', 'imagemaxsize' => "Архтофкснень келеснон оторсна:
    ''(файлонь шарьхкотьфтема лопатненди)''", 'thumbsize' => 'Миниатюронь кувалмоц:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|лопа|лопат}}', -'file-info' => '(файлонь кувалмоц: $1, MIME сортоц: $2)', -'file-info-size' => '($1 × $2 пикселхть, файлть кувалмоц: $3, MIME сорт: $4)', +'file-info' => 'файлонь кувалмоц: $1, MIME сортоц: $2', +'file-info-size' => '$1 × $2 пикселхть, файлть кувалмоц: $3, MIME сорт: $4', 'file-nohires' => 'Сяда лама анцяйнятнень мархта архтофкс аш.', -'svg-long-desc' => '(SVG файл, $1 × $2 пиксельхть, file файлть кувалмоц: $3)', +'svg-long-desc' => 'SVG файл, $1 × $2 пиксельхть, file файлть кувалмоц: $3', 'show-big-image' => 'Няфтемс пяшксе кувалмонц', 'show-big-image-thumb' => 'Сядынголе ваномать кувалмоц: $1 × $2 пикселхть', diff --git a/languages/messages/MessagesMg.php b/languages/messages/MessagesMg.php index 8df213d2..14476533 100644 --- a/languages/messages/MessagesMg.php +++ b/languages/messages/MessagesMg.php @@ -9,6 +9,7 @@ * * @author Alno * @author Jagwar + * @author The Evil IP address * @author Urhixidur * @author לערי ריינהארט */ @@ -122,20 +123,94 @@ $namespaceAliases = array( ); $specialPageAliases = array( - 'Recentchanges' => array( 'Fanovàna farany' ), + 'DoubleRedirects' => array( 'Fihodinana_miroa' ), + 'BrokenRedirects' => array( 'Fihodinana_tapaka' ), + 'Disambiguations' => array( 'Pejy_mitovy_anarana' ), + 'Userlogin' => array( 'Fidirana' ), + 'Userlogout' => array( 'Fialàna' ), + 'CreateAccount' => array( 'Hamorona_kaonty' ), + 'Preferences' => array( 'Safidy' ), + 'Watchlist' => array( 'Lisitry_ny_pejy_arahana' ), + 'Recentchanges' => array( 'Fanovàna_farany' ), + 'Upload' => array( 'Hanafatra' ), + 'Listfiles' => array( 'Lisitran\'ny_rakitra' ), + 'Newimages' => array( 'Sary_vaovao' ), + 'Listusers' => array( 'Lisitran\'ny_mpikambana' ), + 'Listgrouprights' => array( 'Lisitry_ny_satam-pikambana' ), + 'Statistics' => array( 'Statistika' ), 'Randompage' => array( 'Kisendra' ), - 'Uncategorizedpages' => array( 'Pejy tsy misy sokajy' ), - 'Uncategorizedcategories' => array( 'Sokajy tsy misy sokajy' ), - 'Uncategorizedimages' => array( 'Sary tsy misy sokajy', 'Rakitra tsy misy sokajy' ), - 'Uncategorizedtemplates' => array( 'Endrika tsy misy sokajy' ), - 'Unusedcategories' => array( 'Sokajy tsy miasa' ), - 'Unusedimages' => array( 'Rakitra tsy miasa' ), - 'Wantedpages' => array( 'Pejy tadiavina' ), - 'Wantedcategories' => array( 'Sokajy tadiavina' ), - 'Wantedfiles' => array( 'Rakitra tadiavina' ), - 'Wantedtemplates' => array( 'Endrika tadiavina' ), - 'Mostcategories' => array( 'Pejy be sokajy indrindra' ), - 'Mostrevisions' => array( 'Pejy be mpanova indrindra' ), + 'Lonelypages' => array( 'Pejy_manirery' ), + 'Uncategorizedpages' => array( 'Pejy_tsy_misy_sokajy' ), + 'Uncategorizedcategories' => array( 'Sokajy_tsy_misy_sokajy' ), + 'Uncategorizedimages' => array( 'Sary_tsy_misy_sokajy', 'Rakitra_tsy_misy_sokajy' ), + 'Uncategorizedtemplates' => array( 'Endrika_tsy_misy_sokajy' ), + 'Unusedcategories' => array( 'Sokajy_tsy_miasa' ), + 'Unusedimages' => array( 'Rakitra_tsy_miasa', 'Sary_tsy_miasa' ), + 'Wantedpages' => array( 'Pejy_tadiavina' ), + 'Wantedcategories' => array( 'Sokajy_tadiavina' ), + 'Wantedfiles' => array( 'Rakitra_tadiavina' ), + 'Wantedtemplates' => array( 'Endrika_tadiavina' ), + 'Mostlinked' => array( 'Pejy_voarohy_indrindra' ), + 'Mostlinkedcategories' => array( 'Sokajy_voarohy_indrindra' ), + 'Mostlinkedtemplates' => array( 'Endrika_voarohy_indrindra' ), + 'Mostimages' => array( 'Rakitra_voarohy_indrindra' ), + 'Mostcategories' => array( 'Pejy_be_sokajy_indrindra' ), + 'Mostrevisions' => array( 'Pejy_be_mpanova_indrindra' ), + 'Fewestrevisions' => array( 'Pejy_vitsy_mpanova_indrindra' ), + 'Shortpages' => array( 'Pejy_fohy' ), + 'Longpages' => array( 'Pejy_lavabe' ), + 'Newpages' => array( 'Pejy_vaovao' ), + 'Ancientpages' => array( 'Pejy_antitra' ), + 'Deadendpages' => array( 'Pejy_tsy_misy_rohy' ), + 'Protectedpages' => array( 'Pejy_voaaro' ), + 'Protectedtitles' => array( 'Lohateny_voaaro' ), + 'Allpages' => array( 'Pejy_rehetra' ), + 'Prefixindex' => array( 'Index' ), + 'Ipblocklist' => array( 'Lisitry_ny_fanakanana' ), + 'Unblock' => array( 'Hanala_ny_fanakanana' ), + 'Specialpages' => array( 'Pejy_manokana' ), + 'Contributions' => array( 'Fandraisan\'anjara' ), + 'Emailuser' => array( 'Handefa_imailaka' ), + 'Confirmemail' => array( 'Hankatò_ny_adiresy_imailaka' ), + 'Whatlinkshere' => array( 'Pejy_mirohy' ), + 'Recentchangeslinked' => array( 'Fanarahana_ny_rohy' ), + 'Movepage' => array( 'Hanova_anaram-pejy' ), + 'Blockme' => array( 'Sakano_ahy' ), + 'Booksources' => array( 'Boky_loharano' ), + 'Categories' => array( 'Sokajy' ), + 'Export' => array( 'Hamoa-pejy' ), + 'Version' => array( 'Santiôna' ), + 'Allmessages' => array( 'Hafatra_rehetra' ), + 'Log' => array( 'Tatitr\'asa' ), + 'Blockip' => array( 'Hanakana' ), + 'Undelete' => array( 'Hamerina' ), + 'Import' => array( 'Hampidi-pejy' ), + 'Lockdb' => array( 'Hanidy_ny_database' ), + 'Unlockdb' => array( 'Hanala_ny_hidin\'ny_database' ), + 'Userrights' => array( 'Fahefana' ), + 'MIMEsearch' => array( 'Fikarohana_MIME' ), + 'FileDuplicateSearch' => array( 'Fikarohan-drakitra_miroa' ), + 'Unwatchedpages' => array( 'Pejy_tsy_misy_mpanaraka' ), + 'Listredirects' => array( 'Lisitry_ny_fihodinana' ), + 'Revisiondelete' => array( 'Santiôna_voafafa' ), + 'Unusedtemplates' => array( 'Endrika_tsy_misy_mpampiasa' ), + 'Randomredirect' => array( 'Fihodinana_kisendta' ), + 'Mypage' => array( 'Pejiko' ), + 'Mytalk' => array( 'Pejin-dresako' ), + 'Mycontributions' => array( 'Fandraisan\'anjarako' ), + 'Listadmins' => array( 'Lisitry_ny_mpandrindra' ), + 'Listbots' => array( 'Lisitry_ny_rôbô' ), + 'Popularpages' => array( 'Pejy_be_mpitsidika_indrindra' ), + 'Search' => array( 'Fikarohana' ), + 'Resetpass' => array( 'Hiova_tenimiafina' ), + 'Withoutinterwiki' => array( 'Tsy_misy_interwiki' ), + 'MergeHistory' => array( 'Hampiaraka_ny_tantaram-pejy' ), + 'Filepath' => array( 'Lalan-drakitra' ), + 'Blankpage' => array( 'Pejy_fotsy' ), + 'LinkSearch' => array( 'Fikarohan-drohy' ), + 'DeletedContributions' => array( 'Fandraisan\'anjara_voafafa' ), + 'Tags' => array( 'Balizy' ), + 'Activeusers' => array( 'Mpikambana_manova_matetika' ), ); $messages = array( @@ -154,8 +229,7 @@ $messages = array( 'tog-editsection' => "Ataovy mety ny fanovana fizaràna amin'ny alalan'ny rohy [hanova]", 'tog-editsectiononrightclick' => "Ovay ny fizaràna rehefa manindry ny bokotra havanana amin'ny totozy eo amin'ny lohateny hoe fizaràna (mila JavaScript)", 'tog-showtoc' => "Asehoy ny fanoroan-takila (ho an'ny pejy misy lohateny mihoatra ny 3)", -'tog-rememberpassword' => 'Tadidio ny tenimiafiko', -'tog-editwidth' => "Farany lehibe ny velaran'ny boaty fanovana", +'tog-rememberpassword' => "Tadidio ny tenimiafiko eto amin'ity solosaina ity (mandritry ny andro $1 fara-fahabetsany){{PLURAL:}}", 'tog-watchcreations' => "Ampina ao anarin'ny pejy fanaraha-maso ny pejy amboariko", 'tog-watchdefault' => "Atsofohy ao amin'ny lisitry ny pejy arahinao maso ny pejy izay ovainao na foroninao", 'tog-watchmoves' => "Ampina ao anatin'ny pejiko fanaraha-maso ny pejy soloiko anarana", @@ -300,31 +374,21 @@ $messages = array( 'faqpage' => 'Project:FMM', # Vector skin -'vector-action-addsection' => 'Hanampy lohahevitra', -'vector-action-delete' => 'Fafana', -'vector-action-move' => 'Hanolo anarana', -'vector-action-protect' => 'Arovy', -'vector-action-undelete' => 'Avereno', -'vector-action-unprotect' => 'esory ny fiarovana', -'vector-namespace-category' => 'sokajy', -'vector-namespace-help' => 'fanoroana', -'vector-namespace-image' => 'rakitra', -'vector-namespace-main' => 'pejy', -'vector-namespace-media' => 'Pejy Media', -'vector-namespace-mediawiki' => 'hafatra', -'vector-namespace-project' => 'tetikasa', -'vector-namespace-special' => 'pejy manokana', -'vector-namespace-talk' => 'resaka', -'vector-namespace-template' => 'endrika', -'vector-namespace-user' => 'pejy ny mpikambana', -'vector-view-create' => 'Foronona', -'vector-view-edit' => 'Hanova', -'vector-view-history' => 'Hijery ny tantara', -'vector-view-view' => 'Hamaky', -'vector-view-viewsource' => 'Hijery fango', -'actions' => 'Tao', -'namespaces' => 'Valam-pejy', -'variants' => "Ny ''skin'' Voasintona", +'vector-action-addsection' => 'Hanampy lohahevitra', +'vector-action-delete' => 'Fafana', +'vector-action-move' => 'Hanolo anarana', +'vector-action-protect' => 'Arovy', +'vector-action-undelete' => 'Avereno', +'vector-action-unprotect' => 'esory ny fiarovana', +'vector-simplesearch-preference' => "Alefa ny soso-kevitra mikasika ny fikarohana (ho an'ny Vector ihany)", +'vector-view-create' => 'Foronona', +'vector-view-edit' => 'Hanova', +'vector-view-history' => 'Hijery ny tantara', +'vector-view-view' => 'Hamaky', +'vector-view-viewsource' => 'Hijery fango', +'actions' => 'Tao', +'namespaces' => 'Valam-pejy', +'variants' => "Ny ''skin'' Voasintona", 'errorpagetitle' => 'Tsy fetezana', 'returnto' => "Hiverina any amin'ny $1.", @@ -385,6 +449,9 @@ Betsaka loatra ny mpikambana mitady hijery ity pejy ity. Miandrasa kely, dia avereno. $1', +'pool-timeout' => "Fe-potoana voahoatra ho an'ny hidy.", +'pool-queuefull' => 'Feno ny lisitry ny asa hatao', +'pool-errorunknown' => 'Tsi-fetezana tsy fantatra', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Mombamomba ny {{SITENAME}}', @@ -551,7 +618,8 @@ Aza hadino ny manova ny [[Special:Preferences|safidinao]]', 'yourname' => 'Solonanarana', 'yourpassword' => 'Tenimiafina', 'yourpasswordagain' => 'Avereno ampidirina eto ny tenimiafina', -'remembermypassword' => 'Tadidio ny tenimiafiko', +'remembermypassword' => '{{PLURAL:}}Tadidio ny tenimiafiko (mandritry ny $1 andro fara-fahabetsany)', +'securelogin-stick-https' => "Mijanona tafiditra amin'i HTTPS rehefa tafiditra", 'yourdomainname' => 'faritra (domaine) misy anao', 'externaldberror' => "Nisy tsy fetezana angamba teo amin'ny fanamarinana anao tamin'ny sehatra ivelan'ity wiki ity, na tsy manana alalana hanova ny kaontinao ivelany ianao.", 'login' => 'Midira', @@ -569,6 +637,7 @@ Mila manaiky cookies ianao raha te hiditra amin'ny {{SITENAME}}.", 'gotaccount' => "Efa manana kaonty? '''$1'''.", 'gotaccountlink' => 'Midira', 'createaccountmail' => "amin'ny imailaka", +'createaccountreason' => 'Antony :', 'badretype' => 'Tsy mitovy ny tenimiafina nampidirinao.', 'userexists' => 'Efa misy mampiasa io solonanarana io. Mifidiana solonanarana hafa azafady.', 'loginerror' => "Tsy fetezana teo amin'ny fidirana", @@ -590,6 +659,7 @@ Avelao mandeha ny fampidirana cookies, ary midira amin'ny kaontinao.", 'passwordtooshort' => '{{PLURAL:}}Fohy loatra io tenimiafina io. Farafahakeliny tokony hisy litera $1 ny tenimiafina.', 'password-name-match' => 'Tsy maintsy samihafa ny solonanaranao sy ny tenimiafinao tompoko.', +'password-login-forbidden' => 'Norarana ny fampiasana io anaram-pikambana ary io tenimiafina io.', 'mailmypassword' => 'Alefaso imailaka ny tenimiafiko', 'passwordremindertitle' => "Fampatsiahivana tenimiafina avy amin'i {{SITENAME}}", 'passwordremindertext' => 'Nisy olona, izay ianao ihany angamba, avy tamin\'ny adiresy IP $1, nangataka @@ -633,6 +703,9 @@ Andraso kely ary andramo indray.", 'loginlanguagelabel' => 'fiteny : $1', 'suspicious-userlogout' => "Ny fangataham-pialanao dia tsy nekena satria ohatry ny nalfan'ny mpizahan-tsehatra simba izy na kasy ny proxy.", +# E-mail sending +'php-mail-error-unknown' => "Hadisoana tsy fantatra tao amin'ny tao mial() an'i PHP.", + # Password reset dialog 'resetpass' => 'Hanova ny tenimiafina', 'resetpass_announce' => "Nihiditra tenimiafina mailaka nalefanay tamin'ny imailaka ianao. Ampidiro ity tenimiafina ity mba hanapitra ny fampidirana.", @@ -683,6 +756,7 @@ Mety efa nanova tenimiafina na nanontany tenimiafina miserana angamba ianao.', 'showlivepreview' => 'Topi-maso maikamaika', 'showdiff' => 'Asehoy ny fiovana', 'anoneditwarning' => "'''Tandremo :''' tsy niditra/nanokatra kaonty tato ianao. Ho voasoratra ao amin'ny tatitr'asan'ity pejy ity ny adiresy IP-nao.", +'anonpreviewwarning' => "''Tsy niditra ianao. Ho voatahiry ao amin'ny tantaran'ity pejy ity ny adiresy IP-nao.''", 'missingsummary' => "'''Fampandrenesana''' : Tsy nameno ny ambangovangony ianao. ra tonga dia tsindrinao ilay bokotra « tehirizo », alefa avy hatrany ny fanovànao", 'missingcommenttext' => 'Ampidiro ny ambangovangony azafady.', @@ -757,7 +831,7 @@ Ny fampidirana faran'ny laogin'ny fanakanam-pikambana dia naseho teo ambany ho a 'userjspreview' => " '''Tadidio fa manandrana/mijery tsipalotra ny fivoakan'ny JavaScript-nao fotsiny ihany ianao fa tsy mbola voatahiry akory izy io!'''", 'userinvalidcssjstitle' => "'''Fampitandremana''' : Tsy misy skin « $1 ». -Tadidio fa mampiasa soramadinika ny lohatenin'ny pejinao manan-tovana *.css sy *.js, ohatra {{ns:user}}:Foo/monobook.css fa tsy {{ns:user}}:Foo/Monobook.css.", +Tadidio fa mampiasa soramadinika ny lohatenin'ny pejinao manan-tovana *.css sy *.js, ohatra {{ns:user}}:Foo/vector.css fa tsy {{ns:user}}:Foo/Vector.css.", 'updated' => '(Voaova)', 'note' => "'''Fanamarihana:'''", 'previewnote' => "'''Topi-maso ihany ity hitanao ity, tsy mbola voatahiry ny fanovana nataonao!'''", @@ -797,10 +871,6 @@ Raha io no tahirizinao, dia ho very ny fanovana ity pejy ity rehetra taorian'io Ny zava-tsoratanao eto dia vokatr'asa naverinao soratana na nodikainao tany amina loharano ao amin'ny vala sarababem-bahoaka na loharano malalaka hafa (Jereo $1 ho an'ny antsipirihany). '''Aza mampiasa tahirin-kevitra tsy nahazoan-dalana!'''", -'longpagewarning' => "'''FAMPITANDREMANA: Mahatratra $1 kilooktety ny hangezan'ity pejy ity; -Ny navigateur sasantsasany dia mety hanana olana -amin'ny fanovana ny pejy manakaiky na mihoatra ny 32 ko. -Tsara raha saratsarahinao ho fizarana maromaro ity pejy ity.'''", 'longpageerror' => "'''Tsi-fetezana : Ny lanjan’ny lahatsoratrao dia $1 Ko, mihoatra ny $2 Ko, ilay fetra napetraka. Tsy afaka tahirizina ilay lahatsoratra.'''", 'readonlywarning' => "'''FAMPITANDREMANA: Nohidiana noho ny antony fikolokoloana aloha ny banky angona, koa tsy afaka mitahiry ny fanovana nataonao aloha ianao izao. Angamba tokony hanao Couper coller aloha @@ -971,6 +1041,8 @@ $1", 'logdelete-failure' => "'''Tsy afaka novaina ny fisehon'ny tatitr’asa''' $1", 'revdel-restore' => 'Ovay ny fahitàna', +'revdel-restore-deleted' => 'santiôna voafafa', +'revdel-restore-visible' => 'santiôna hita', 'pagehist' => "Tantaran'ilay pejy", 'deletedhist' => 'Tantara voafafa', 'revdelete-content' => 'votoatiny', @@ -1043,7 +1115,7 @@ $3 santiôna{{PLURAL:}} natsonika tamin'ny [[:$2]]", 'compareselectedversions' => 'Ampitahao ireo version voafidy', 'showhideselectedversions' => 'Asehoy/asitriho ny santiôna nofidiana', 'editundo' => 'esory', -'diff-multi' => '{{PLURAL:}}(Reviziôna anelanelany nasitrika $1)', +'diff-multi' => "({{PLURAL:$1|Famerenana tokana|Famerenana $1}} nataon'ny {{PLURAL:$2|mpikambana iray|mpikambana $2}} tsy miseho)", # Search results 'searchresults' => 'Valim-pikarohana', @@ -1153,6 +1225,7 @@ ihany no miseho amin'ny vokatry ny karoka).", 'resultsperpage' => "Isa ny valiny isakin'ny pejy :", 'contextlines' => "Isa ny andalana isakin'ny valiny :", 'contextchars' => 'Isa ny litera isaky ny andalana', +'stub-threshold-disabled' => 'Tsy alefa', 'recentchangesdays' => "Isa ny andro ho ampiseho eo amin'ny fanovàna farany", 'recentchangesdays-max' => '($1 andro{{PLURAL:$1||}} fara-faha betsany)', 'recentchangescount' => "Isan'ny fanovana haseho (tsipalotra) :", @@ -1220,7 +1293,9 @@ Tokony mba manana lohavy ambanimbany kokoa non'ny $1", 'prefs-advancedrendering' => 'Antsipirihan-tsafidy', 'prefs-advancedsearchoptions' => 'Antsipirihan-tsafidy', 'prefs-advancedwatchlist' => 'Antsipirihan-tsafidy', -'prefs-display' => 'safidim-tseho', +'prefs-displayrc' => 'safidim-tseho', +'prefs-displaysearchoptions' => 'Safidin-tseho', +'prefs-displaywatchlist' => 'Safidin-tseho', 'prefs-diffs' => 'Diff', # User rights @@ -1300,6 +1375,7 @@ Tokony mba manana lohavy ambanimbany kokoa non'ny $1", 'right-hideuser' => "Manakana mpikambana iray amin'ny fanitrihana ny anarany amin'ny vahoaka", 'right-ipblock-exempt' => 'Tsy voakasiky ny fanakanana IP, ny fanakanana mandeha ho azy (aotômatika) ary ny fanakanana sampana IP', 'right-proxyunbannable' => "Tsy voakasiky ny fanakana mande hoazy avy amin'ny proxy", +'right-unblockself' => 'Miala hidy ho azy', 'right-protect' => "Manova ny fiarovan'ny pejy sy manova ny pejy voaaro", 'right-editprotected' => 'Manova ny pejy voaaro (tsy misy fiarovana en cascade)', 'right-editinterface' => 'Manova ny interface ny mpikambana', @@ -1322,7 +1398,6 @@ Tokony mba manana lohavy ambanimbany kokoa non'ny $1", 'right-siteadmin' => 'Manidy sy manokatra ny banky angona', 'right-reset-passwords' => "Manova ny tenimiafin'ny mpikambana hafa", 'right-override-export-depth' => "Mamoaka ny pejy miaraka amin'ny zana-pejy hatramin'ny ambaratonga fahadimy", -'right-versiondetail' => "Mijery ny fampahalalàna momba ny version'ny rindrankajy", 'right-sendemail' => "Mandefa imailaka any amin'ny mpikambana hafa", # User rights log @@ -1373,14 +1448,9 @@ Tokony mba manana lohavy ambanimbany kokoa non'ny $1", 'recentchanges-legend' => 'Safidy ny fanovàna farany', 'recentchangestext' => "Jereo eto amin'ity pejy ity izay vao niova vao haingana teto amin'ity wiki ity.", 'recentchanges-feed-description' => "Arao ny fanovàna farany amin'ity wiki ity anaty topa", -'recentchanges-label-legend' => 'Maribolana : $1.', -'recentchanges-legend-newpage' => '$1 - pejy vaovao', 'recentchanges-label-newpage' => 'Namorona pejy vaovao io fanovana io', -'recentchanges-legend-minor' => '$1 - fanovana kely', 'recentchanges-label-minor' => 'Kely fotsiny ity fanovana ity', -'recentchanges-legend-bot' => "$1 - fanovana nataon'ny rôbô", 'recentchanges-label-bot' => "Nataon'ny rôbô ity fanovana ity.", -'recentchanges-legend-unpatrolled' => '$1 - fanovana mbola tsy nojerena', 'recentchanges-label-unpatrolled' => 'Ity fanovana ity dia mbola tsy voamarina', 'rcnote' => "!Ity ny {{PLURAL:$1|fanovàna farany|fanovàna farany}} $1 natao nandritra ny $2 andro, hatramin'ny $4 tamin'ny ora faha $5.", 'rcnotefrom' => "Ity eto ambany ity ny lisitry ny vao niova manomboka ny $2 (hatramin'ny $1 no miseho).", @@ -1458,6 +1528,17 @@ Raha hanisy sary ao anaty pejy, dia mampiasà rohy toy ny iray amin'ireto 'filetype-banned-type' => "Rarana ato ny karazan-drakitra '''« .$1 »''' {{PLURAL:$3||}}Ny karazan-drakitra ekena dia $2.", 'filetype-missing' => 'Tsy manan-karazan-drakitra ilay rakitra (hoatry ny « .jpg » ohatra).', +'empty-file' => 'Tsy manam-botoatiny ny rakitra nalefanao.', +'file-too-large' => 'Ngeza loatra ny rakitra nalefanao.', +'filename-tooshort' => 'Fohy loatra ny anaran-drakitra.', +'filetype-banned' => 'Voarara ato io karazan-drakitra io.', +'verification-error' => "Tsy afaka amin'ny fanamarinana rakitra ity rakitra ity.", +'hookaborted' => "Najanon'ny faraingon'itatra ny fanovana nandramanao natao.", +'illegal-filename' => "Tsy nahazoan-dàlana ny anaran'io rakitra io.", +'overwrite' => 'Tsy azo itsahina ny rakitra efa misy.', +'unknown-error' => 'Nisy tsi-fetezana nitranga.', +'tmp-create-error' => 'Tsy afaka mamorona rakitra miserana.', +'tmp-write-error' => "Tsi-fetezana teo am-panoratana an'ilay rakitra miserana", 'large-file' => "Ny haben'ny rakitra hampidirina dia tsy mahazo mihoatra ny $1 ; $2 ny lanjan'ilay rakitra tianao ho ampidirina.", 'largefileserver' => " Ngeza noho izay zakan'ny serveur io rakitra io.", @@ -1488,13 +1569,14 @@ Raha mbola te-hampiditra io rakitra io foana ianao, miverena any aoriana ary mam . [[File:$1|thumb|center|$1]]", 'file-exists-duplicate' => "Ity rakitra ity dia mitovy amin'ny rakitra {{PLURAL:$1|||}} :", 'file-deleted-duplicate' => "Efa voafafa ny rakitra mitovy amin'ity rakitra ity ([[:$1]]). Tokony jerena any amin'ny tantaran'asan'ny famafana io pejy io alohan'ny mampiditra azy indray.", -'successfulupload' => 'Voaray soa aman-tsara ny rakitra', 'uploadwarning' => 'Fampitandremana', 'uploadwarning-text' => "Ovay ny fanoritan' ilay rakitra ary andrao fanindroany.", 'savefile' => 'Tehirizo ny rakitra', 'uploadedimage' => 'tonga ny rakitra"[[$1]]"', 'overwroteimage' => "nampiditra santiôna vaovao an'ny « [[$1]] »", 'uploaddisabled' => 'Miala tsiny! Tsy azo atao ny mandefa rakitra.', +'copyuploaddisabled' => "Tsy alefa ny fandefasan-drakitra amin'ny alalan'ny URL.", +'uploadfromurl-queued' => 'Ao am-piandrasana ny fandefasan-drakitrao.', 'uploaddisabledtext' => "Tsy afaka andefasana rakitra aloha eto amin'ity wiki ity.", 'php-uploaddisabledtext' => "Ny fampidiran-drakitra dia tsy ampiasaina amin'ny PHP. Marino ny option configuration file_uploads.", @@ -1516,6 +1598,13 @@ Tokony marina ny $1 aloha ny manao fampidirana vaovao.', Marino raha tsara tohizana ny fanovana eto amin'ity pejy ity. Ny tantaran'asan'ny famafana pejy sy ny fanovan-toerana dia eo ambany :", 'filename-bad-prefix' => "Ny anaran-drakitra ho ampidirinareo dia manomboka amin'ny '''« $1 »''', anarana omena an'ny fakan-tsary elektirônika. Misafidia anaran-drakitra mambangovango.", +'upload-success-subj' => 'Voaray soa aman-tsara ny rakitra', +'upload-success-msg' => 'Eto ny rakitra nalefanao : [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Olana nitranga teo am-pandefasana', +'upload-failure-msg' => "Nisy olana tamin'ny fampidiranao [$2] : + +$1", +'upload-warning-subj' => 'Fampitandremana rehefa mampiditra', 'upload-proto-error' => 'Protokolina diso', 'upload-proto-error-text' => "Mila URL manomboka amin'ny http:// na ftp:// ny fampidiran-drakitra.", @@ -1684,7 +1773,6 @@ Aza manadino manamarina raha tsy misy rohy makany amin'ny endrika hafa alohan'ny 'statistics-edits-average' => "Isan'ny fanovana isaky ny pejy", 'statistics-views-total' => 'Tsidika', 'statistics-views-peredit' => 'Tsidika isaky ny fanovana', -'statistics-jobqueue' => 'halava ny [http://www.mediawiki.org/wiki/Manual:Job_queue Job queue]', 'statistics-users' => '[[Special:ListUsers|Mpikambana]] nisoratra anarana', 'statistics-users-active' => 'Mpikambana manova matetika', 'statistics-users-active-desc' => "Mpikambana nanao zavatra teto tanatin'ny $1 andro{{PLURAL:}}.", @@ -1867,37 +1955,43 @@ Prôtôkôly zaka : $1.', 'listgrouprights-removegroup-self-all' => "Manala ny vondrom-pikambana rehetra amin'ny kaontiny", # E-mail user -'mailnologin' => 'Tsy misy adiresy handefasana ny tenimiafina', -'mailnologintext' => "Mila [[Special:UserLogin|miditra]] ianao sady manana imailaka mandeha sy voamarina ao amin'ny [[Special:Preferences|mombamomba anao]] vao afaka mandefa imailaka amin'ny mpikambana hafa.", -'emailuser' => 'Andefaso imailaka io mpikambana io', -'emailpage' => 'Andefaso imailaka io mpikambana io', -'emailpagetext' => "Raha nametraka adiresy tena miasa tao amin'ny [[Special:Preferences|mombamomba azy io mpikambana io]], +'mailnologin' => 'Tsy misy adiresy handefasana ny tenimiafina', +'mailnologintext' => "Mila [[Special:UserLogin|miditra]] ianao sady manana imailaka mandeha sy voamarina ao amin'ny [[Special:Preferences|mombamomba anao]] vao afaka mandefa imailaka amin'ny mpikambana hafa.", +'emailuser' => 'Andefaso imailaka io mpikambana io', +'emailpage' => 'Andefaso imailaka io mpikambana io', +'emailpagetext' => "Raha nametraka adiresy tena miasa tao amin'ny [[Special:Preferences|mombamomba azy io mpikambana io]], dia ahafahana mandefa hafatra tokana ho any aminy ity fisy eto ambany ity. Ny adiresy imailakao napetrakao tao amin'ny mombamomba anao no hiseho hoe adiresin'ny mpandefa izany imailaka izany, koa afaka hovaliany izay hafatra alefanao.", -'usermailererror' => "Misy tsy mety amin'ny lohatenin'ny imailaka:", -'defemailsubject' => "imailaka avy amin'ny sehatra {{SITENAME}}", -'noemailtitle' => 'Tsy misy adiresy imailaka', -'noemailtext' => "Na tsy nanome adiresy imailaka voamarina io mpikambana io, +'usermailererror' => "Misy tsy mety amin'ny lohatenin'ny imailaka:", +'defemailsubject' => "imailaka avy amin'ny sehatra {{SITENAME}}", +'usermaildisabled' => 'Tsy azo mifandefa imailaka ny mpikambana', +'usermaildisabledtext' => "Tsy mahazo mandefa imailaka any amin'ny mpikamban'ity wiki ity ianao", +'noemailtitle' => 'Tsy misy adiresy imailaka', +'noemailtext' => "Na tsy nanome adiresy imailaka voamarina io mpikambana io, na tsy maniry handray imailaka avy amin'ny mpikambana hafa izy.", -'nowikiemailtitle' => 'Tsy manaiky imailaka alefa ho azy', -'nowikiemailtext' => "Ity mpikambana ity dia te-hahazo imailaka avy amin'ny mpikambana hafa.", -'email-legend' => "Handefa imailaka any amin'ny mpikambana hafa an'i {{SITENAME}}", -'emailfrom' => "Avy tamin'i", -'emailto' => "Ho an'i", -'emailsubject' => 'Lohateny :', -'emailmessage' => 'Hafatra', -'emailsend' => 'Alefaso', -'emailccme' => "Andefaso tahak' ity hafatra ity ahy.", -'emailccsubject' => "Tahaka ny hafatrao nalefa tany amin'i $1 : $2", -'emailsent' => 'Lasa', -'emailsenttext' => 'Lasa soa aman-tsara ny imailaka nalefanao.', -'emailuserfooter' => "Ity imailaka ity dia nalefan'i « $1 » tany amin'i « $2 » tamin'ny alalan'ny « Handefa Imailaka » an'i {{SITENAME}}.", +'nowikiemailtitle' => 'Tsy manaiky imailaka alefa ho azy', +'nowikiemailtext' => "Ity mpikambana ity dia te-hahazo imailaka avy amin'ny mpikambana hafa.", +'email-legend' => "Handefa imailaka any amin'ny mpikambana hafa an'i {{SITENAME}}", +'emailfrom' => "Avy tamin'i", +'emailto' => "Ho an'i", +'emailsubject' => 'Lohateny :', +'emailmessage' => 'Hafatra', +'emailsend' => 'Alefaso', +'emailccme' => "Andefaso tahak' ity hafatra ity ahy.", +'emailccsubject' => "Tahaka ny hafatrao nalefa tany amin'i $1 : $2", +'emailsent' => 'Lasa', +'emailsenttext' => 'Lasa soa aman-tsara ny imailaka nalefanao.', +'emailuserfooter' => "Ity imailaka ity dia nalefan'i « $1 » tany amin'i « $2 » tamin'ny alalan'ny « Handefa Imailaka » an'i {{SITENAME}}.", + +# User Messenger +'usermessage-summary' => 'Namela hafatra rindrankajy', +'usermessage-editor' => 'Mpampita hafatry ny rindrankajy', # Watchlist 'watchlist' => 'Narahiko maso', 'mywatchlist' => 'Pejy arahako-maso', -'watchlistfor' => "(ho an'ny/i '''$1''')", +'watchlistfor2' => "Ho an'i $1 $2", 'nowatchlist' => "Tsy misy n'inon'inona ao amin'ny lisitry ny pejy arahinao maso.", 'watchlistanontext' => "Andana $1 ianao mba hahita na hanova zavatra ao amin'ny pejy arahanao.", 'watchnologin' => 'Tsy tafiditra', @@ -2018,6 +2112,9 @@ Efa nataon'i [[User:$3|$3]] ([[User talk:$3|dinika]]{{int:pipe-separator}}[[Spec 'rollback-success' => "Fanalàna ny fanovana nataon'i $1 ; miverina any amin'ny santiôna farany nataon'i $2.", +# Edit tokens +'sessionfailure-title' => 'Tsi-fetezaka mikasika ny kaonty idirana', + # Protect 'protectlogpage' => 'Tatitr’asa momban’ny fiarovana', 'protectlogtext' => 'Eto ambany ny lisitry ny fiarovana/fanalana hidy ny pejy. Fanazavana fanampiny: jereo [[Special:ProtectedPages]].', @@ -2140,19 +2237,21 @@ $1', 'month' => "Tamin'ny volana (sy teo aloha) :", 'year' => "Tamin'ny taona (sy teo aloha) :", -'sp-contributions-newbies' => "Ny fandraisan'anjara ny mpikambana vaovao ihany no ampiseho eto", -'sp-contributions-newbies-sub' => "Ao amin'ny kaonty vaovao", -'sp-contributions-newbies-title' => "Fandraisan'anjara ao amin'ny kaonty vaovao", -'sp-contributions-blocklog' => 'Tatitr’asa momban’ny fanakanana', -'sp-contributions-deleted' => "fandraisan'anjara voafafa", -'sp-contributions-logs' => 'tatitr’asa', -'sp-contributions-talk' => 'Dinika', -'sp-contributions-userrights' => 'fitantanana ny satam-pikambana', -'sp-contributions-blocked-notice' => 'Ankehitriny ity mpikambana ity dia voasakana. +'sp-contributions-newbies' => "Ny fandraisan'anjara ny mpikambana vaovao ihany no ampiseho eto", +'sp-contributions-newbies-sub' => "Ao amin'ny kaonty vaovao", +'sp-contributions-newbies-title' => "Fandraisan'anjara ao amin'ny kaonty vaovao", +'sp-contributions-blocklog' => 'Tatitr’asa momban’ny fanakanana', +'sp-contributions-deleted' => "fandraisan'anjara voafafa", +'sp-contributions-logs' => 'tatitr’asa', +'sp-contributions-talk' => 'Dinika', +'sp-contributions-userrights' => 'fitantanana ny satam-pikambana', +'sp-contributions-blocked-notice' => 'Ankehitriny ity mpikambana ity dia voasakana. Miseho eo ambany eo ny laogim-panakanam-pikambana mba hampahalala :', -'sp-contributions-search' => "Hikaroka fandraisan'anjara", -'sp-contributions-username' => 'Adiresy IP na anaram-pikambana :', -'sp-contributions-submit' => 'Hikaroka', +'sp-contributions-blocked-notice-anon' => "Voasakana ity adiresy IP ity ankehitriny. +Ny iditra farany tao amin'ny laogim-panakanam-pikambana dia naseho teo ambany mba hampahalala :", +'sp-contributions-search' => "Hikaroka fandraisan'anjara", +'sp-contributions-username' => 'Adiresy IP na anaram-pikambana :', +'sp-contributions-submit' => 'Hikaroka', # What links here 'whatlinkshere' => 'Iza avy no mirohy eto', @@ -2207,7 +2306,6 @@ Fenoy etsy ambany ny antony manokana (ohatra, mitanisà pejy nosomparana).", 'ipb-edit-dropdown' => 'Hanova ny antony fanakanana tsipalotra', 'ipb-unblock-addr' => "Hanala ny sakan' i $1", 'ipb-unblock' => "Hanala ny sakan'ny mpikambana na adiresy IP", -'ipb-blocklist-addr' => "Sakana efa misy ho an'i $1", 'ipb-blocklist' => 'Hijery ny sakana efa misy', 'ipb-blocklist-contribs' => "Fandraisan'anjaran'i $1", 'unblockip' => "Esory ny sakana amin'io mpikambana io", @@ -2281,6 +2379,8 @@ Mety efa natao angamba ny fanalana sakana.', 'cant-block-while-blocked' => 'Tsy azo sakananao ny mpikambana hafa raha mbola voasakana ianao.', 'cant-see-hidden-user' => "Ny mpikambana andramanao sakanana dia efa nosakanana ary nasitrika. Noho ianao tsy manana ny zon'ny mpanitrika mpikambana (''hideuser''), tsy azonao jerena na ovaina ny sakan'ity mpikambana ity.", +'ipbblocked' => "Tsy afaka manala ny sakan'ny mpikambana hafa ianao, satria voasakana koa ianao", +'ipbnounblockself' => 'Tsy afaka manala ny sakanao ianao', # Developer tools 'lockdb' => 'Fanidiana ny banky angona', @@ -2551,6 +2651,8 @@ Ampesao ny topi-maso aloha no mihatiry.", 'tooltip-rollback' => "Manala ny fanovan'ny mpikambana farany nanova azy ilay asa « foano » (Rollback) .", 'tooltip-undo' => "Manala n'io fanovàna io ilay rohy « esory ». Mamerina ny version taloha io asa io ary afaka manometraka ny antony anatin'ny ambangovangony.", +'tooltip-preferences-save' => 'Tehirizina ny safidy', +'tooltip-summary' => 'Atsofohy eo ambangovangony fohifohy', # Stylesheets 'monobook.css' => "/* Ovay ity rakitra ity raha hampiasa takilan'angaly (stylesheet) anao manokana amin'ny wiki iray manontolo */", @@ -2642,13 +2744,15 @@ $1', 'nextdiff' => 'fampitahana manaraka →', # Media information -'mediawarning' => "'''Fampitandremana''': Tsy azo antoka ho tsy misy viriosy ity rakitra ity, ahiana hanimba ny solosainao ny fandefasana azy.", +'mediawarning' => "'''Fampitandremana''': Mety misy renifango manao ratsy io karazan-drakitra io. +Raha alefanao ilay izy, mety ho simban'io renifango io ny solosainao.", 'imagemaxsize' => "Ferana ny haben'ny sary ao amin'ny pejy famaritana ho:", 'thumbsize' => "Haben'ny thumbnail", 'widthheightpage' => '$1 × $2, pejy $3{{PLURAL:}}', -'file-info-size' => "($1 × $2 piksely, hangeza n'ilay rakitra : $3, endrika MIME : $4)", +'file-info' => 'Haben-drakitra : $1, karazana MIME : $2', +'file-info-size' => "$1 × $2 teboka, haben'ilay rakitra : $3, endrika MIME : $4", 'file-nohires' => "Tsy misy sary ngeza non'io", -'svg-long-desc' => '(rakitra SVG, hangeza $1 × $2 piksely, hangeza : $3)', +'svg-long-desc' => 'rakitra SVG, habe $1 × $2 teboka, habe : $3', 'show-big-image' => "Hijery ny tena haben'ny sary", 'show-big-image-thumb' => "Hangezan'ity topi-maso ity : $1 × $2 piksely", 'file-info-gif-looped' => 'miverimberina', @@ -2695,6 +2799,7 @@ Tokony sary tsy misy na sary tsy izy ny rohy voalohany anaty andalana iray . 'exif-samplesperpixel' => 'Mpandahatra isaky ny piksely', 'exif-planarconfiguration' => 'Fandaminana ny data', 'exif-ycbcrpositioning' => 'Fipetraky ny Y sy C', +'exif-yresolution' => 'Isan-teboka mijidina', 'exif-stripoffsets' => "Toerana isian'ny datan'ny sary", 'exif-rowsperstrip' => "Isan'ny andininy isaky ny bandy", 'exif-stripbytecounts' => "Haben'ny bandy amin'ny oktety", @@ -2715,10 +2820,15 @@ Tokony sary tsy misy na sary tsy izy ny rohy voalohany anaty andalana iray . 'exif-makernote' => 'Diniky ny mpanamboatra', 'exif-usercomment' => 'Diniky ny mpikambana', 'exif-relatedsoundfile' => 'Rakitra audio miaraka', +'exif-datetimeoriginal' => 'Daty fangalana niaviana', +'exif-datetimedigitized' => 'Daty nanaovana numerisation', +'exif-subsectime' => 'Daty nanovana', 'exif-exposuretime-format' => '$1 s ($2 s)', 'exif-fnumber' => 'Isa F', 'exif-isospeedratings' => 'ISO', 'exif-aperturevalue' => 'Sanasana', +'exif-lightsource' => 'Loharanon-kazavana', +'exif-flashenergy' => "Angôvon'akonkazavana", 'exif-filesource' => 'Fangon-drakitra', 'exif-imageuniqueid' => "ID an'io sary io manokana", 'exif-gpslatituderef' => 'Laharam-pehintany avaratra na atsimo', @@ -2727,7 +2837,11 @@ Tokony sary tsy misy na sary tsy izy ny rohy voalohany anaty andalana iray . 'exif-gpslongitude' => 'Laharan-jarahasina', 'exif-gpsaltituderef' => 'Haambo tsiahy', 'exif-gpsaltitude' => 'Haambo', +'exif-gpstimestamp' => 'Ora GPS (famantaranandro atômika)', +'exif-gpsmeasuremode' => 'Fomba fandrefesana', +'exif-gpsdop' => 'Hatsiko ny fandrefesana', 'exif-gpsspeedref' => 'Mari-drefi-kafainganana', +'exif-gpsspeed' => 'Hafaingam-pandray GPS', 'exif-gpsimgdirection' => "Fitodihan'ny sary", 'exif-gpsdestlatitude' => 'Laharam-pehintany tanjona', 'exif-gpsareainformation' => 'Anaram-paritra GPS', @@ -2962,6 +3076,15 @@ Ampidiro ny anaran-drakitra tsy misy ny tovona « {{ns:file}}: »", 'tags-edit' => 'hanova', 'tags-hitcount' => '{{PLURAL:$1|fanovana|fanovana}} $1', +# Special:ComparePages +'comparepages' => 'Hampitaha pejy', +'compare-selector' => 'Hampitaha ny santiôm-pejy', +'compare-page1' => 'Pejy 1', +'compare-page2' => 'Pejy 2', +'compare-rev1' => 'Santiôna 1', +'compare-rev2' => 'Santiôna 2', +'compare-submit' => 'Ampitahao', + # Database error messages 'dberr-header' => 'Misy olana io wiki io', 'dberr-problems' => 'Azafady Tompoko ! Manana olana ara-teknika ny sehatra.', diff --git a/languages/messages/MessagesMhr.php b/languages/messages/MessagesMhr.php index 658bc149..f745c4b3 100644 --- a/languages/messages/MessagesMhr.php +++ b/languages/messages/MessagesMhr.php @@ -16,19 +16,19 @@ $fallback = 'ru'; $namespaceNames = array( - NS_SPECIAL => 'Лӱмын ыштыме', + NS_SPECIAL => 'Лӱмын_ыштыме', NS_TALK => 'Каҥашымаш', NS_USER => 'Пайдаланыше', NS_USER_TALK => 'Пайдаланышын_каҥашымаш', NS_PROJECT_TALK => '$1ын_каҥашымаш', NS_FILE => 'Файл', - NS_FILE_TALK => 'Файлын_каҥашымаш', + NS_FILE_TALK => 'Файл_шотышто_каҥашымаш', NS_TEMPLATE => 'Ямдылык', - NS_TEMPLATE_TALK => 'Ямдылыкын_каҥашымаш', + NS_TEMPLATE_TALK => 'Ямдылык_шотышто_каҥашымаш', NS_HELP => 'Полшык', - NS_HELP_TALK => 'Полшыкын_каҥашымаш', + NS_HELP_TALK => 'Полшык_шотышто_каҥашымаш', NS_CATEGORY => 'Категорий', - NS_CATEGORY_TALK => 'Категорийын_каҥашымаш', + NS_CATEGORY_TALK => 'Категорий_шотышто_каҥашымаш', ); $namespaceAliases = array( @@ -48,6 +48,31 @@ $namespaceAliases = array( 'Обсуждение_справки' => NS_HELP_TALK, 'Категория' => NS_CATEGORY, 'Обсуждение_категории' => NS_CATEGORY_TALK, + + // Namspace changes + 'Файлын_каҥашымаш' => NS_FILE_TALK, + 'Ямдылыкын_каҥашымаш' => NS_TEMPLATE_TALK, + 'Полшыкын_каҥашымаш' => NS_HELP_TALK, + 'Категорийын_каҥашымаш' => NS_CATEGORY_TALK, +); + +$specialPageAliases = array( + 'Preferences' => array( 'Келыштарымаш' ), + 'Watchlist' => array( 'Эскерымаш_лӱмер' ), + 'Recentchanges' => array( 'Пытартыш_тӧрлатымаш-влак' ), + 'Statistics' => array( 'Иктешлымаш' ), + 'Search' => array( 'Кычалмаш' ), +); + +$magicWords = array( + 'img_right' => array( '1', 'пурла', 'справа', 'right' ), + 'img_left' => array( '1', 'шола', 'слева', 'left' ), + 'img_border' => array( '1', 'чек', 'граница', 'border' ), + 'img_sub' => array( '1', 'йымалне', 'под', 'sub' ), + 'img_super' => array( '1', 'ӱмбалне', 'над', 'super', 'sup' ), + 'img_top' => array( '1', 'кӱшычын', 'сверху', 'top' ), + 'img_middle' => array( '1', 'покшелне', 'посередине', 'middle' ), + 'img_bottom' => array( '1', 'ӱлычын', 'снизу', 'bottom' ), ); $messages = array( @@ -63,7 +88,7 @@ $messages = array( 'tog-numberheadings' => 'Вуймутым автоматик йӧн дене радамлаш', 'tog-showtoolbar' => 'Тӧрлатымаш ӱзгараҥам ончыкташ (JavaScript кӱлеш)', 'tog-showtoc' => 'Вуймут радамым ончыкташ (3 деч шуко вуймутан лаштык-влаклан)', -'tog-rememberpassword' => 'Тиде компучырышто мыйын шолыпмутым шарнаш', +'tog-rememberpassword' => 'Тиде компучырышто мыйын шолыпмутым шарнаш (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Мыйын ыштыме лаштык-влакым эскерыме лӱмерыш ешараш', 'tog-watchdefault' => 'Мыйын тӧрлатыме лаштык-влакым эскерыме лӱмерыш ешараш', 'tog-watchmoves' => 'Мыйын лӱмым вашталтыме лаштык-влакым эскерыме лӱмерыш ешараш', @@ -169,30 +194,19 @@ $messages = array( 'qbspecialpages' => 'Лӱмын ыштыме лаштык-влак', # Vector skin -'vector-action-addsection' => 'У ӱжашым тӱҥалаш', -'vector-action-delete' => 'Шӧраш', -'vector-action-move' => 'Кусараш', -'vector-action-protect' => 'Тӧрлатымаш деч аралаш', -'vector-action-undelete' => 'Шӧрымым пӧртылаш', -'vector-action-unprotect' => 'Аралаш огыл', -'vector-namespace-category' => 'Категорий', -'vector-namespace-help' => 'Полшык', -'vector-namespace-image' => 'Файл', -'vector-namespace-main' => 'Лаштык', -'vector-namespace-media' => 'Медиа-лаштык', -'vector-namespace-mediawiki' => 'Увертарымаш', -'vector-namespace-project' => 'Проект нерген', -'vector-namespace-special' => 'Лӱмын ыштыме лаштык', -'vector-namespace-talk' => 'Каҥашымаш', -'vector-namespace-template' => 'Ямдылык', -'vector-namespace-user' => 'Пайдаланышын лаштыкше', -'vector-view-create' => 'Ышташ', -'vector-view-edit' => 'Тӧрлаташ', -'vector-view-history' => 'Эртымгорным ончалаш', -'vector-view-view' => 'Лудаш', -'vector-view-viewsource' => 'Тӱҥалтыш текстым ончалаш', -'actions' => 'Сомылка-влак', -'namespaces' => 'Лӱм-влакын кумдык-влак', +'vector-action-addsection' => 'У ӱжашым тӱҥалаш', +'vector-action-delete' => 'Шӧраш', +'vector-action-move' => 'Кусараш', +'vector-action-protect' => 'Тӧрлатымаш деч аралаш', +'vector-action-undelete' => 'Шӧрымым пӧртылаш', +'vector-action-unprotect' => 'Аралаш огыл', +'vector-view-create' => 'Ышташ', +'vector-view-edit' => 'Тӧрлаташ', +'vector-view-history' => 'Эртымгорным ончалаш', +'vector-view-view' => 'Лудаш', +'vector-view-viewsource' => 'Тӱҥалтыш текстым ончалаш', +'actions' => 'Сомылка-влак', +'namespaces' => 'Лӱм-влакын кумдык-влак', 'errorpagetitle' => 'Йоҥылыш', 'returnto' => '$1 деке пӧртылаш.', @@ -323,7 +337,7 @@ $messages = array( 'yourname' => 'Пайдаланышын лӱмжӧ:', 'yourpassword' => 'Шолыпмут:', 'yourpasswordagain' => 'Шолыпмутым угыч пуртымаш:', -'remembermypassword' => 'Тиде компучырышто мыйын шолыпмутым шарнаш', +'remembermypassword' => 'Тиде компучырышто мыйын шолыпмутым шарнаш (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Тендан домен:', 'login' => 'Шке денет палымым ыште', 'nav-login-createaccount' => 'Пураш/Регистрацийым эрте', @@ -583,37 +597,32 @@ $messages = array( 'action-edit' => 'тиде лаштыкым тӧрлаташ', # Recent changes -'nchanges' => '$1 {{PLURAL:$1|тӧрлатымаш|тӧрлатымаш-влак}}', -'recentchanges' => 'Пытартыш тӧрлатымаш-влак', -'recentchanges-legend' => 'Пытартыш тӧрлатымаш-влакын келыштарымашышт', -'recentchangestext' => 'Тиде лаштыкыште пытартыш тӧрлатымашым шекланаш.', -'recentchanges-feed-description' => 'Тиде кылыште пытартыш тӧрлатымашым шекланаш.', -'recentchanges-label-legend' => 'Умылтарымаш: $1.', -'recentchanges-legend-newpage' => '$1 - у лаштык', -'recentchanges-label-newpage' => 'Тиде тӧрлатымаш дене у лаштыкым ыштеныт', -'recentchanges-legend-minor' => '$1 - изирак тӧрлатымаш', -'recentchanges-label-minor' => 'Тиде изирак тӧрлатымаш', -'recentchanges-legend-bot' => '$1 - бот тӧрлатымаш', -'recentchanges-label-bot' => 'Тиде тӧрлатымашым бот ыштен', -'recentchanges-legend-unpatrolled' => '$1 - тергымашдыме тӧрлатымаш', -'recentchanges-label-unpatrolled' => 'Тиде тӧрлатымаш эше терген налын огыл', -'rcnote' => "Ӱлнӧ {{PLURAL:$1|'''1'''|'''$1'''}} вашталтыш пытартыш {{PLURAL:$2||'''$2'''}} кечылан, $5-лан, $4-лан.", -'rclistfrom' => '$1 гыч тӱҥалын у вашталтымашым ончыкташ', -'rcshowhideminor' => 'Изирак тӧрлымым $1', -'rcshowhidebots' => 'Бот-влакым $1', -'rcshowhideliu' => 'Шолып пайдаланыше-влакым $1', -'rcshowhideanons' => 'Ончыкталтше пайдаланыше-влакым $1', -'rcshowhidemine' => 'Мыйын тӧрлымым $1', -'rclinks' => 'Пытартыш $2 кечылан $1 вашталтымашым ончыкташ
    $3', -'diff' => 'ойырт.', -'hist' => 'эрт.', -'hide' => 'шылташ', -'show' => 'ончыкташ', -'minoreditletter' => 'и', -'newpageletter' => 'У', -'boteditletter' => 'б', -'rc-enhanced-expand' => 'Тӱткынракым ончыкташ (JavaScript кӱлеш)', -'rc-enhanced-hide' => 'Рашлык-влакым шылташ', +'nchanges' => '$1 {{PLURAL:$1|тӧрлатымаш|тӧрлатымаш-влак}}', +'recentchanges' => 'Пытартыш тӧрлатымаш-влак', +'recentchanges-legend' => 'Пытартыш тӧрлатымаш-влакын келыштарымашышт', +'recentchangestext' => 'Тиде лаштыкыште пытартыш тӧрлатымашым шекланаш.', +'recentchanges-feed-description' => 'Тиде кылыште пытартыш тӧрлатымашым шекланаш.', +'recentchanges-label-newpage' => 'Тиде тӧрлатымаш дене у лаштыкым ыштеныт', +'recentchanges-label-minor' => 'Тиде изирак тӧрлатымаш', +'recentchanges-label-bot' => 'Тиде тӧрлатымашым бот ыштен', +'recentchanges-label-unpatrolled' => 'Тиде тӧрлатымаш эше терген налын огыл', +'rcnote' => "Ӱлнӧ {{PLURAL:$1|'''1'''|'''$1'''}} вашталтыш пытартыш {{PLURAL:$2||'''$2'''}} кечылан, $5-лан, $4-лан.", +'rclistfrom' => '$1 гыч тӱҥалын у вашталтымашым ончыкташ', +'rcshowhideminor' => 'Изирак тӧрлымым $1', +'rcshowhidebots' => 'Бот-влакым $1', +'rcshowhideliu' => 'Шолып пайдаланыше-влакым $1', +'rcshowhideanons' => 'Ончыкталтше пайдаланыше-влакым $1', +'rcshowhidemine' => 'Мыйын тӧрлымым $1', +'rclinks' => 'Пытартыш $2 кечылан $1 вашталтымашым ончыкташ
    $3', +'diff' => 'ойырт.', +'hist' => 'эрт.', +'hide' => 'шылташ', +'show' => 'ончыкташ', +'minoreditletter' => 'и', +'newpageletter' => 'У', +'boteditletter' => 'б', +'rc-enhanced-expand' => 'Тӱткынракым ончыкташ (JavaScript кӱлеш)', +'rc-enhanced-hide' => 'Рашлык-влакым шылташ', # Recent changes linked 'recentchangeslinked' => 'Ваш кылдалтше тӧрлатымаш-влак', @@ -685,7 +694,6 @@ $messages = array( 'statistics-edits-average' => 'Ик лаштыкым покшел тӧрлымӧ чот', 'statistics-views-total' => 'Чылажге ончымо', 'statistics-views-peredit' => 'Ик тӧрлатымашлан ончымо', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Паша черетын] кужытшо', 'statistics-users' => 'Регистрацийым эртыше [[Special:ListUsers|пайдаланыше-влак]]', 'statistics-users-active' => 'Чӱчкыдын пайдаланыше-влак', 'statistics-users-active-desc' => 'Пытартыш {{PLURAL:$1|кечыште|$1 кечыште}} иктаж-мом ыштыше пайаланыше-влак', @@ -766,7 +774,6 @@ $messages = array( # Watchlist 'watchlist' => 'Мыйын эскерымаш лӱмер', 'mywatchlist' => 'Мыйын эскерымаш лӱмер', -'watchlistfor' => "('''$1''' лан)", 'addedwatch' => 'Эскерымаш лӱмерыш ешарыме', 'addedwatchtext' => "\"[[:\$1]]\" лаштыкым тыйын [[Special:Watchlist|эскерымаш лӱмерыш]] ешарыме. Тиде лаштыкын да тудын каҥашымаш лаштыкым умбакысе тӧрлатымашым тиде спискыште ончыктымо лиеш да, сайрак ужаш манын, [[Special:RecentChanges|пытартыш тӧрлатымаш лӱмерыште]] '''кӱжгӧ шрифт''' дене ойырымо.", @@ -1011,9 +1018,9 @@ $messages = array( # Media information 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|лаштык|лаштык}}', -'file-info-size' => '($1 × $2 пиксел, файлын кугытшо: $3, MIME-тип: $4)', +'file-info-size' => '$1 × $2 пиксел, файлын кугытшо: $3, MIME-тип: $4', 'file-nohires' => 'Кугурак чаплык уке.', -'svg-long-desc' => '(SVG файл, шкенжын кугытшо: $1 × $2 пиксел, файлын кугытшо: $3)', +'svg-long-desc' => 'SVG файл, шкенжын кугытшо: $1 × $2 пиксел, файлын кугытшо: $3', 'show-big-image' => 'Шкенжын чаплыкше', 'show-big-image-thumb' => 'Ончылгоч ончымашын кугытшо $1 × $2 пиксель', diff --git a/languages/messages/MessagesMin.php b/languages/messages/MessagesMin.php new file mode 100644 index 00000000..183aecf8 --- /dev/null +++ b/languages/messages/MessagesMin.php @@ -0,0 +1,700 @@ + 'Garih bawahi link:', +'tog-highlightbroken' => 'Format link putuih macam iko (pilihan: macam iko?).', +'tog-justify' => 'Ratokan paragraf', +'tog-hideminor' => 'Suruakkan suntingan ketek di parubahan tabaru', +'tog-hidepatrolled' => 'Suruakkan suntingan nan lah dijago di parubahan tabaru', +'tog-newpageshidepatrolled' => 'Suruakkan halaman nan lah dijago dari senarai halaman baru', +'tog-extendwatchlist' => 'Kambangkan senarai pantauan untuak malihek sado parubahan, indak nan baru se', +'tog-usenewrc' => 'Gunoan parubahan terkini tingkek lanjut (perlu JavaScript)', +'tog-numberheadings' => 'Agiah nomor judua sacaro otomatis', +'tog-editsection' => 'Fungsikan penyuntingan subbagian malalui [sunting] pranala', +'tog-rememberpassword' => 'Kana log masuak denai di komputer ko (salamo of $1 {{PLURAL:$1|hari|hari}})', +'tog-watchcreations' => 'Tambahkan halaman nan denai buek ka senarai pantauan', +'tog-watchdefault' => 'Tambahkan halaman yang denai sunting ka senarai pantauan', +'tog-watchmoves' => 'Tambahkan halaman yang denai pindahkan ka senarai pantauan', +'tog-watchdeletion' => 'Tambahkan halaman yang denai hapuih ka senarai pantauan', +'tog-previewontop' => 'Tampilkan pratonton sabalun kotak suntiang', + +# Dates +'sunday' => 'Akaik', +'monday' => 'Sinayan', +'tuesday' => 'Salaso', +'wednesday' => "Raba'a", +'thursday' => 'Kamih', +'friday' => 'Jumek', +'saturday' => 'Sabtu', +'sun' => 'Aha', +'mon' => 'Sin', +'tue' => 'Sal', +'wed' => 'Rab', +'thu' => 'Kam', +'fri' => 'Jum', +'sat' => 'Sab', +'january' => 'Januari', +'february' => 'Februari', +'march' => 'Maret', +'april' => 'April', +'may_long' => 'Mei', +'june' => 'Juni', +'july' => 'Juli', +'august' => 'Agustus', +'september' => 'September', +'october' => 'Oktober', +'november' => 'November', +'december' => 'Desember', +'january-gen' => 'Januari', +'february-gen' => 'Februari', +'march-gen' => 'Maret', +'april-gen' => 'April', +'may-gen' => 'Mei', +'june-gen' => 'Juni', +'july-gen' => 'Juli', +'august-gen' => 'Agustus', +'september-gen' => 'September', +'october-gen' => 'Oktober', +'november-gen' => 'November', +'december-gen' => 'Desember', +'jan' => 'Jan', +'feb' => 'Feb', +'mar' => 'Mar', +'apr' => 'Apr', +'may' => 'Mei', +'jun' => 'Jun', +'jul' => 'Jul', +'aug' => 'Agu', +'sep' => 'Sep', +'oct' => 'Okt', +'nov' => 'Nov', +'dec' => 'Des', + +# Categories related messages +'pagecategories' => '{{PLURAL:$1|Kategori|Kategori}}', +'category_header' => 'Laman dalam kategori "$1"', +'subcategories' => 'Subkategori', +'hidden-categories' => '{{PLURAL:$1|Kategori tapandam|Kategori tapandam}}', +'category-subcat-count' => '{{PLURAL:$2|Kategori ko hanyo punyo subkategori berikut.|Kategori ko punyo {{PLURAL:$1|subkategori|$1 subkategori}}, dari total $2.}}', +'category-article-count' => '{{PLURAL:$2|Kategori ko hanyo punyo laman berikut.|Kategori ko punyo {{PLURAL:$1|laman|$1 laman}} dari total $2.}}', +'listingcontinuesabbrev' => 'cont.', + +'about' => 'Tentang', +'article' => 'Artikel', +'newwindow' => '(buka di jendela baru)', +'cancel' => 'Batalkan', +'mytalk' => 'Ota denai', +'navigation' => 'Navigasi', + +# Cologne Blue skin +'qbfind' => 'Pencarian', +'qbbrowse' => 'Browse', +'qbedit' => 'Suntiang', +'qbpageoptions' => 'Laman ko', +'qbpageinfo' => 'Konteks', +'qbmyoptions' => 'Laman denai', +'qbspecialpages' => 'Halaman istimewa', +'faqpage' => 'Project:FAQ', + +# Vector skin +'vector-action-addsection' => 'Bagian baru', +'vector-action-delete' => 'Hapuih', + +'errorpagetitle' => 'Kesalahan', +'returnto' => 'Baliak ka $1', +'tagline' => 'Dari {{SITENAME}}', +'help' => 'Bantuan', +'search' => 'Cari', +'searchbutton' => 'Cari', +'searcharticle' => 'Tuju', +'history' => 'Riwayat halaman', +'history_short' => 'Riwayat', +'printableversion' => 'Versi cetak', +'permalink' => 'Pranala permanen', +'edit' => 'Suntiang', +'create' => 'Buek', +'editthispage' => 'Suntiang laman ko', +'delete' => 'Hapuih', +'protect' => 'Lindungi', +'protect_change' => 'ubah', +'newpage' => 'Laman baru', +'talkpage' => 'Musyawarahkan laman ko', +'talkpagelinktext' => 'Kecek', +'personaltools' => 'Peralatan pribadi', +'talk' => 'Pembicaraan', +'views' => 'Tampilan', +'toolbox' => 'Kotak pakakeh', +'otherlanguages' => 'Dalam baso lain', +'redirectedfrom' => '(Dialiahkan dari $1)', +'redirectpagesub' => 'Laman pengalihan', +'lastmodifiedat' => 'Laman ko tarakhir diubah pado $1, maso $2.', +'jumpto' => 'Lompek ka:', +'jumptonavigation' => 'navigasi', +'jumptosearch' => 'cari', + +# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). +'aboutsite' => 'Tentang {{SITENAME}}', +'aboutpage' => 'Project:Perihal', +'copyright' => 'Kandungan tasadio dalam $1', +'copyrightpage' => '{{ns:project}}:Hak cipta', +'disclaimers' => 'Penyangkalan', +'disclaimerpage' => 'Project:Penyangkalan umum', +'edithelp' => 'Bantuan suntingan', +'edithelppage' => 'Help:Suntingan', +'helppage' => 'Help:Kandungan', +'mainpage' => 'Halaman Utamo', +'privacy' => 'Kebijakan privasi', +'privacypage' => 'Project:Kebijakan privasi', + +'badaccess' => 'Kesalahan hak akses', + +'retrievedfrom' => 'Diperoleh dari "$1"', +'youhavenewmessages' => 'Awak punyo $1 ($2).', +'newmessageslink' => 'pasan baru', +'newmessagesdifflink' => 'parubahan terakhir', +'editsection' => 'suntiang', +'editold' => 'suntiang', +'editlink' => 'suntiang', +'viewsourcelink' => 'Lihek sumber', +'editsectionhint' => 'Suntiang bagian: $1', +'toc' => 'Kandungan', +'showtoc' => 'tampilkan', +'hidetoc' => 'suruakkan', +'site-rss-feed' => '$1 RSS Umpan', +'site-atom-feed' => '$1 umpan Atom', +'page-rss-feed' => 'Umpan RSS "$1"', +'page-atom-feed' => '"$1" umpan Atom', +'red-link-title' => '$1 (laman alun tasadio)', + +# Short words for each namespace, by default used in the namespace tab in monobook +'nstab-main' => 'Laman', +'nstab-user' => 'Laman pangguno', +'nstab-special' => 'Laman istimewa', +'nstab-project' => 'Laman proyek', +'nstab-image' => 'Berkas', +'nstab-template' => 'Templat', +'nstab-category' => 'Kategori', + +# General errors +'missing-article' => 'Basis data indak dapek manamukan teks dari laman yang seharusnyo ado, namo "$1" $2. + +Hal ko biasonyo disebabkan dek pranala usang ka riwayat terdahulu dari laman yang lah dihapuih. + +Jiko bukan iko penyebabnyo, awak mungkin lah manamukan sabuah bug dalam perangkat lunak ko. +Sila laporkan ka [[Special:ListUsers/sysop|Pengurus]], dengan manandokan alamat URL nan dituju.', +'missingarticle-rev' => '(revisi#: $1)', +'badtitletext' => 'Permintaan judul laman indak sah, kosong, atau antarbaso atau antarwiki yang salah sambuang. Mungkin juo ado kandungan karakter yang indak buliah digunoan untuak judul.', +'viewsource' => 'Lihek sumber', + +# Login and logout pages +'yourname' => 'Namo pangguno:', +'yourpassword' => 'Kato sandi:', +'remembermypassword' => 'Kana log masuak denai di komputer ko (salamo $1 {{PLURAL:$1|hari|hari}})', +'login' => 'Masuak log', +'nav-login-createaccount' => 'Masuak log / buek akun', +'userlogin' => 'Masuak log / buek akun', +'logout' => 'Kalua log', +'userlogout' => 'Kalua log', +'nologinlink' => 'Cipta akun baru', +'mailmypassword' => 'Kirim kato sandi baru', + +# Edit page toolbar +'bold_sample' => 'Teks dicetak taba', +'bold_tip' => 'Teks dicetak taba', +'italic_sample' => 'Teks dicetak miriang', +'italic_tip' => 'Teks dicetak miriang', +'link_sample' => 'Judul pranala', +'link_tip' => 'Pranala dalam', +'extlink_sample' => 'http://www.example.com judul pranala', +'extlink_tip' => 'Pranala lua (ingek awalannyo http://)', +'headline_sample' => 'Teks tajuk', +'headline_tip' => 'Tingkek 2 tajuk', +'math_sample' => 'Masuakkan rumus di siko', +'math_tip' => 'Rumus matematika (LaTeX)', +'nowiki_sample' => 'Masuakkan disiko teks yang indak diformat', +'nowiki_tip' => 'Abaikan pemformatan wiki', +'image_tip' => 'Cantumkan berkas', +'media_tip' => 'Pranala berkas', +'sig_tip' => 'Tandotangan awak jo tando waktu', +'hr_tip' => 'Garih horizontal', + +# Edit pages +'summary' => 'Ringkasan:', +'subject' => 'Subjek/tajuk:', +'minoredit' => 'Iko di suntiang saketek', +'watchthis' => 'Pantau laman ko', +'savearticle' => 'Simpan halaman', +'preview' => 'Pratonton', +'showpreview' => 'Lihek pratonton', +'showdiff' => 'Lihek parubahan', +'anoneditwarning' => "'''Peringatan:''' Awak alun masuak log. +Alamat IP awak akan tacatat pado riwayat suntingan laman ko.", +'summary-preview' => 'Pratonton ringkasan:', +'newarticle' => '(Baru)', +'newarticletext' => "Laman nan awak cari alun ado. +Untuak mambuek laman tu, mulailah dengan menulis dalam kotak dibawah (lihek [[{{MediaWiki:Helppage}}|laman bantuan]] untuak maklumat lanjut). +Jiko awak indak sangajo sampai ka laman ko, klik tombol '''back''' pado penjelajah web awak.", +'noarticletext' => 'Kini ko indak ado teks dalam laman ko. +Awak dapek [[Special:Search/{{PAGENAME}}|mancari judul laman ko]] pado laman lain, +[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mancari log nan bakaik], +atau [{{fullurl:{{FULLPAGENAME}}|action=edit}} suntiang laman ko].', +'previewnote' => "'''Iko hanyo tampilan pratonton.''' +Parubahan yang awak lakukan alun disimpan!", +'editing' => 'Manyuntiang $1', +'editingsection' => 'Suntiang $1 (bagian)', +'copyrightwarning' => "Untuak diingek bahwa apo nan disumbang kapado {{SITENAME}} dianggap lah dilapeh dibawah $2 (lihek $1 untuak lengkapnyo). +Jiko awak indak ingin apo nan ditulis tu disuntiang dan disebarkan, jan dikirim tulisan tu ka siko.
    +Awak juo mesti bajanji bahwa itu adolah hasil karya awak surang, atau disalin dari sumber milik basamo atau sumber bebas lainnyo. +'''Jan dikirim karya punyo hak cipta tanpa izin!'''", +'templatesused' => '{{PLURAL:$1|Templat|Templat}} yang digunoan di laman iko:', +'templatesusedpreview' => '{{PLURAL:$1|Templat|Templat}} yang digunoan dalam pratonton ko:', +'template-protected' => '(dilinduangi)', +'template-semiprotected' => '(semi-perlindungan)', +'hiddencategories' => 'Laman ko marupokan kalompok dari {{PLURAL:$1|1 kategori tapandam|$1 kategori tapandam}}:', +'permissionserrorstext-withaction' => 'Awak indak punyo hak akses untuak $2, karano {{PLURAL:$1|alasan|alasan}} berikut:', + +# History pages +'viewpagelogs' => 'Lihek log untuak laman ko', +'currentrev-asof' => 'Revisi terkini pado $1', +'revisionasof' => 'Revisi per $1', +'previousrevision' => '← Revisi sabalunnyo', +'nextrevision' => 'Revisi selanjutnyo →', +'currentrevisionlink' => 'Revisi terkini', +'cur' => 'kini', +'last' => 'sabalun', +'histlegend' => "Membandingkan pilihan: Tandoi dari revisi yang ingin dibandingkan dengan memilih kotak radionyo dan tekan tombol ''Bandingkan revisi pilihan''.
    +Legend: '''({{int:kini}})''' = perbedaan jo revisi terakhir, '''({{int:dulu}})''' = perbedaan jo revisi sabalunnyo, '''{{int:k}}''' = suntingan ketek, '''{{int:b}}''' = suntingan bot.", +'history-fieldset-title' => 'Telusuri riwayat', +'histfirst' => 'Nan lamo', +'histlast' => 'Nan baru', + +# Revision deletion +'rev-delundel' => 'tampilkan/suruakkan', +'revdel-restore' => 'Ganti tampilan', + +# Merge log +'revertmerge' => 'Batal bergabung', + +# Diffs +'history-title' => 'Riwayat revisi dari "$1"', +'difference' => '(Parbedaan antaro revisi)', +'lineno' => 'Barih $1:', +'compareselectedversions' => 'Bandingkan revisi pilihan', +'editundo' => 'batalkan', + +# Search results +'searchresults' => 'Hasil pencarian', +'searchresults-title' => 'Hasil pencarian untuak "$1"', +'searchresulttext' => 'Untuak informasi lanjut tentang pencarian {{SITENAME}}, lihek [[{{MediaWiki:Helppage}}|{{int:help}}]].', +'searchsubtitle' => 'Awak mancari \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|sado laman yang dimulai jo "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|sado laman nan tapauik ka "$1"]])', +'searchsubtitleinvalid' => "Awak mancari '''$1'''", +'notitlematches' => 'Indak ado judul nan pas', +'notextmatches' => 'Indak ado judul nan pas', +'prevn' => 'sabalunnyo {{PLURAL:$1|$1}}', +'nextn' => 'salanjuiknyo {{PLURAL:$1|$1}}', +'viewprevnext' => 'Tampilkan ($1 {{int:pipe-separator}} $2) ($3)', +'search-result-size' => '$1 ({{PLURAL:$2|1 kato|$2 kato}})', +'search-redirect' => '(pengalihan $1)', +'search-section' => '(bagian $1)', +'search-suggest' => 'Mungkin maksud awak: $1', +'search-interwiki-caption' => 'Proyek badunsanak', +'search-interwiki-default' => 'Hasil $1:', +'search-interwiki-more' => '(selanjutnyo)', +'search-mwsuggest-enabled' => 'dengan saran', +'search-mwsuggest-disabled' => 'indak ado saran', +'nonefound' => "'''Catatan''': hanyo babarapo ruangnamo yang dicari sacaro default. +Cubo awali permintaan awak tu jo ''all:'' untuak mancari sado kandungan (tamasuak laman ota, templat, dll), atau gunoan ruangnamo yang diinginkan sabagai awalan.", +'powersearch' => 'Pencarian lanjut', +'powersearch-legend' => 'Pencarian lanjut', +'powersearch-ns' => 'Mancari di ruangnamo:', +'powersearch-redir' => 'Senarai pengalihan', +'powersearch-field' => 'Mancari', + +# Preferences page +'preferences' => 'Preferensi', +'mypreferences' => 'Preferensi denai', + +# Groups +'group-sysop' => 'Pengurus', + +'grouppage-sysop' => '{{ns:project}}:Pengurus', + +# User rights log +'rightslog' => 'Log parubahan hak akses', + +# Associated actions - in the sentence "You do not have permission to X" +'action-edit' => 'suntiang laman ko', + +# Recent changes +'nchanges' => '$1 {{PLURAL:$1|parubahan|parubahan}}', +'recentchanges' => 'Parubahan baru', +'recentchanges-legend' => 'Pilihan parubahan baru', +'recentchanges-feed-description' => 'Temukan parubahan baru dalam umpan wiki ko', +'rcnote' => "Berikut ko {{PLURAL:$1|'''1'''|'''$1'''}} parubahan dalam {{PLURAL:$2|hari|'''$2''' hari}} terakhir, sampai $5, pukul $4.", +'rclistfrom' => 'Tampilkan parubahan baru sejak $1', +'rcshowhideminor' => '$1 suntingan ketek', +'rcshowhidebots' => '$1 bot', +'rcshowhideliu' => '$1 pangguno masuak log', +'rcshowhideanons' => '$1 pangguno anon', +'rcshowhidemine' => '$1 suntingan denai', +'rclinks' => 'Tampilkan $1 parubahan baru dalam $2 hari terakhir
    $3', +'diff' => 'beda', +'hist' => 'versi', +'hide' => 'Suruakkan', +'show' => 'Tampilkan', +'minoreditletter' => 'k', +'newpageletter' => 'B', +'boteditletter' => 'b', +'rc-enhanced-expand' => 'Tampilkan rincian (perlu JavaScript)', +'rc-enhanced-hide' => 'Suruakkan rincian', + +# Recent changes linked +'recentchangeslinked' => 'Parubahan takaik', +'recentchangeslinked-title' => 'Parubahan nan takaik jo "$1"', +'recentchangeslinked-summary' => "Iko adolah senarai parubahan terakhir pado laman yang takaik jo laman tartantu (atau pado kalompok kategori tartantu). +Laman pado [[Special:Watchlist|Senarai pantauan]] ditandoi '''cetak taba'''.", +'recentchangeslinked-page' => 'Namo laman:', +'recentchangeslinked-to' => 'Tampilkan parubahan dari laman yang takaik jo laman yang disajikan', + +# Upload +'upload' => 'Unggah berkas', +'uploadlogpage' => 'Log unggah', +'uploadedimage' => 'unggah "[[$1]]"', + +# File description page +'filehist' => 'Riwayat berkas', +'filehist-help' => 'Klik pado tanggal/waktu untuak malihek berkas pado maso tu', +'filehist-current' => 'kini ko', +'filehist-datetime' => 'Tanggal/Waktu', +'filehist-thumb' => 'Miniatur', +'filehist-thumbtext' => 'Miniatur untuak versi per $1', +'filehist-user' => 'Pangguno', +'filehist-dimensions' => 'Dimensi', +'filehist-comment' => 'Ulasan', +'imagelinks' => 'Pranala berkas', +'linkstoimage' => 'Berikut ko ado {{PLURAL:$1|laman nan takaik|$1 laman nan takaik}} jo berkas ko:', +'sharedupload' => 'Berkas ko barasal dari $1 dan mungkin digunoan oleh berbagai proyek lain.', +'uploadnewversion-linktext' => 'Unggah versi baru dari berkas ko', + +# Statistics +'statistics' => 'Statistik', + +# Miscellaneous special pages +'nbytes' => '$1 {{PLURAL:$1|bait|bait}}', +'nmembers' => '$1 {{PLURAL:$1|anggota|anggota}}', +'prefixindex' => 'Semua laman jo awalan', +'newpages' => 'Laman baru', +'move' => 'Pindahkan', +'movethispage' => 'Pindahkan laman ko', +'pager-newer-n' => '{{PLURAL:$1|labiah baru 1|labiah baru $1}}', +'pager-older-n' => '{{PLURAL:$1|labiah lamo 1|labiah lamo $1}}', + +# Book sources +'booksources' => 'Sumber buku', +'booksources-search-legend' => 'Cari di sumber buku', +'booksources-go' => 'Tuju', + +# Special:Log +'log' => 'Log', + +# Special:AllPages +'allpages' => 'Semua laman', +'alphaindexline' => '$1 hinggo $2', +'prevpage' => 'Laman sabalunnyo ($1)', +'allpagesfrom' => 'Tampilkan laman mulai dari:', +'allpagesto' => 'Tampilkan laman hinggo:', +'allarticles' => 'Semua laman', +'allpagessubmit' => 'Tuju', + +# Special:LinkSearch +'linksearch' => 'Pranala lua', + +# Special:Log/newusers +'newuserlogpage' => 'Log pangguno baru', +'newuserlog-create-entry' => 'Mendaftar sabagai pangguno', + +# Special:ListGroupRights +'listgrouprights-members' => '(senarai anggota)', + +# E-mail user +'emailuser' => 'E-mail pangguno', + +# Watchlist +'watchlist' => 'Senarai pantauan denai', +'mywatchlist' => 'Senarai pantauan den', +'addedwatch' => 'Lah ditambahkan ka senarai pantauan', +'addedwatchtext' => "Laman \"[[:\$1]]\" lah ditambahkan ka [[Special:Watchlist|senarai pantauan awak]]. +Parubahan laman ko tamasuak laman otanyo akan ditampilkan dalam '''cetak taba''' pado [[Special:RecentChanges|senarai parubahan]] agar lebih mudah manjagonyo.", +'removedwatch' => 'Lah dihapuih dari senarai pantauan', +'removedwatchtext' => 'Laman "[[:$1]]" lah dihapuih dari [[Special:Watchlist|senarai pantauan awak]].', +'watch' => 'Pantau', +'watchthispage' => 'Pantau laman ko', +'unwatch' => 'Batal pantau', +'watchlist-details' => '{{PLURAL:$1|$1 laman|$1 laman}} dalam senarai pantauan awak, indak tamasuak laman ota.', +'wlshowlast' => 'Tampilkan $1 jam $2 hari terakhir $3', +'watchlist-options' => 'Pilihan senarai pantauan', + +# Displayed when you click the "watch" button and it is in the process of watching +'watching' => 'Mamantau...', +'unwatching' => 'indak dipantau le...', + +# Delete +'deletepage' => 'Hapuih laman', +'confirmdeletetext' => 'Awak akan mahapuih laman atau berkas basamo riwayatnyo. +Pastikan awak mainginkannyo, dan awak lah tahu sagalo akibatnyo dan sasuai jo [[{{MediaWiki:Policy-url}}|kebijakan]] yang balaku.', +'actioncomplete' => 'Proses selesai', +'deletedtext' => '"$1" lah dihapuih. +Lihek $2 untuak rekam jejak laman yang lah dihapuih.', +'deletedarticle' => 'dihapuih "[[$1]]"', +'dellogpage' => 'Log penghapusan', +'deletecomment' => 'Alasan:', +'deleteotherreason' => 'Alasan lain/tambahan:', +'deletereasonotherlist' => 'Alasan lain', + +# Rollback +'rollbacklink' => 'baliakkan', + +# Protect +'protectlogpage' => 'Log perlindungan', +'protectedarticle' => 'melindungi "[[$1]]"', +'modifiedarticleprotection' => 'maubah tingkek perlindungan "[[$1]]"', +'protectcomment' => 'Alasan:', +'protectexpiry' => 'Kadaluwarsa:', +'protect_expiry_invalid' => 'Maso kadaluwarsa indak balaku', +'protect_expiry_old' => 'Maso kadaluwarsa adolah pado maso lampau', +'protect-text' => "Awak buliah malihek jo mangganti tingkek perlindungan di siko untuak laman '''$1'''.", +'protect-locked-access' => "Akun awak indak berhak untuak maubah tingkek perlindungan laman ko. +Berikut ko pengaturan yang balaku untuak laman '''$1''':", +'protect-cascadeon' => 'Laman ko sedang dilindungi karano tamasuak dalam {{PLURAL:$1|laman|laman}} aktif perlindungan batingkek. +Awak dapek maubah tingkek perlindungannyo, walaupun indak pangaruah pado perlindungan batingkeknyo.', +'protect-default' => 'Semua pangguno diizinkan', +'protect-fallback' => 'Memerlukan hak akses "$1"', +'protect-level-autoconfirmed' => 'Blokir pangguno baru dan indak terdaftar', +'protect-level-sysop' => 'Hanya pengurus', +'protect-summary-cascade' => 'batingkek', +'protect-expiring' => 'kadaluwarsa $1 (UTC)', +'protect-cascade' => 'Lindungi semua laman yang bakaik jo laman ko (perlindungan batingkek)', +'protect-cantedit' => 'Awak indak dapek maubah tingkek perlindungan laman ko, karano awak indak berhak.', +'restriction-type' => 'Perlindungan:', +'restriction-level' => 'Tingkek larangan:', + +# Undelete +'undeletelink' => 'tampilkan/pulihkan', +'undeletedarticle' => 'dipulihkan "[[$1]]"', + +# Namespace form on various pages +'namespace' => 'Ruangnamo:', +'invert' => 'Baliakkan pilihan', +'blanknamespace' => '(Utamo)', + +# Contributions +'contributions' => 'Jariah pangguno', +'contributions-title' => 'Jariah pangguno untuak $1', +'mycontris' => 'Jariah denai', +'contribsub2' => 'Untuak $1 ($2)', +'uctop' => '(atas)', +'month' => 'Sejak bulan (dan sabalunnyo):', +'year' => 'Sejak tahun (dan sabalunnyo):', + +'sp-contributions-newbies' => 'Tampilkan jariah pangguno baru', +'sp-contributions-blocklog' => 'log pemblokiran', +'sp-contributions-search' => 'Cari jariah', +'sp-contributions-username' => 'Alamat IP atau namo pangguno:', +'sp-contributions-submit' => 'Cari', + +# What links here +'whatlinkshere' => 'Pranala baliak', +'whatlinkshere-title' => 'Laman yang bakaik ka "$1"', +'whatlinkshere-page' => 'Laman:', +'linkshere' => "Laman-laman ko bakaik ka '''[[:$1]]''':", +'isredirect' => 'laman pengalihan', +'istemplate' => 'transklusi', +'isimage' => 'pranala berkas', +'whatlinkshere-prev' => '{{PLURAL:$1|sabalunnyo|sabalunnyo $1}}', +'whatlinkshere-next' => '{{PLURAL:$1|salanjuiknyo|salanjuiknyo $1}}', +'whatlinkshere-links' => '← pranala', +'whatlinkshere-hideredirs' => '$1 pengalihan', +'whatlinkshere-hidetrans' => '$1 transklusi', +'whatlinkshere-hidelinks' => '$1 pranala', +'whatlinkshere-filters' => 'Penapis', + +# Block/unblock +'blockip' => 'Blokir pangguno', +'ipboptions' => '2 jam:2 hours,1 hari:1 day,3 hari:3 days,1 minggu:1 week,2 minggu:2 weeks,1 bulan:1 month,3 bulan:3 months,6 bulan:6 months,1 tahun:1 year,salamonyo:infinite', +'ipblocklist' => 'Senarai pemblokiran alamat IP dan namo pangguno', +'blocklink' => 'blokir', +'unblocklink' => 'hilangkan blokir', +'change-blocklink' => 'ubah blokir', +'contribslink' => 'kontrib', +'blocklogpage' => 'Log pemblokiran', +'blocklogentry' => 'memblokir [[$1]] dalam maso berlaku $2 $3', +'unblocklogentry' => 'mahilangkan blokir $1', +'block-log-flags-nocreate' => 'cipta akun dimatikan', + +# Move page +'movepagetext' => "Formulir di bawah ko digunoan untuak maubah namo suatu laman dan mamindahkan semua data riwayat ka namo baru. Judul lamo tu akan manjadi laman peralihan manuju judul yang baru. Pranala ka judul lamo indak akan baubah. Pastikan diperiksa laman yang [[Special:DoubleRedirects|peralihan ganda]] atau [[Special:BrokenRedirects|peralihan rusak]]. Awak bertanggungjawab untuak memastikan bahwa pranala tu terus manyambuang ka laman yang seharusnyo. + +Perhatikan bahwa laman '''indak''' akan dipindah apobilo lah ado laman yang manggunokan judul yang baru, kecuali bilo laman tu kosong atau marupokan laman peralihan dan indak punyo riwayat suntingan. Maksudnyo awak dapek maubah namo laman seperti samulo apobilo ado kesalahan, dan awak indak dapek manimpo laman yang lah ado. + +'''Peringatan:''' Iko dapek maakibatkan parubahan yang tak diduga pado laman yang populer. Jadi pastikan awak paham akibat tindakan ko sabalun melanjutkannyo.", +'movepagetalktext' => "Laman ota yang bakaitan akan dipindahkan sacaro otomatis '''kecuali apobilo:''' + +*Sebuah laman ota yang indak kosong lah ado pado judul baru, atau +*Awak indak memberi tando pado kotak di bawahnyo + +Dalam kasus tu, apobilo diinginkan, awak dapek mamindahkan atau manggabuangkan laman sacaro manual.", +'movearticle' => 'Pindahkan laman', +'newtitle' => 'Ka judul baru:', +'move-watch' => 'Pantau laman ko', +'movepagebtn' => 'Pindahkan laman', +'pagemovedsub' => 'Pamindahan berhasil', +'movepage-moved' => '\'\'\'"$1" lah dipindahkan ka "$2"\'\'\'', +'articleexists' => 'Laman dengan namo tu lah ado, atau namo yang awak pilih indak tapek. Silakan pilih namo lain', +'talkexists' => "'''Laman tersebut berhasil dipindahkan, tapi laman otanyo indak dapek dipindahkan karano lah ado laman ota pado judul yang baru. Silakan digabuang laman ota tu sacaro manual.'''", +'movedto' => 'dipindahkan ka', +'movetalk' => 'Pindahkan laman ota yang takaik', +'1movedto2' => 'mamindahkan [[$1]] ka [[$2]]', +'1movedto2_redir' => 'mamindahkan [[$1]] ka [[$2]] malalui peralihan', +'movelogpage' => 'Log pemindahan', +'movereason' => 'Alasan:', +'revertmove' => 'kembalikan', + +# Export +'export' => 'Ekspor laman', + +# Thumbnails +'thumbnail-more' => 'Pagadang', + +# Tooltip help for the actions +'tooltip-pt-userpage' => 'Halaman pangguno awak', +'tooltip-pt-mytalk' => 'Halaman ota awak', +'tooltip-pt-preferences' => 'Preferensi denai', +'tooltip-pt-watchlist' => 'Senarai laman nan denai pantau', +'tooltip-pt-mycontris' => 'Senarai jariah denai', +'tooltip-pt-login' => 'Awak disarankan untuak masuak log; meskipun, hal tu indak diwajibkan', +'tooltip-pt-logout' => 'Kalua log', +'tooltip-ca-talk' => 'Pembicaraan tentang isi halaman', +'tooltip-ca-edit' => 'Awak buliah suntiang laman ko. Gunokan tombol pratonton sabalun manyimpan', +'tooltip-ca-addsection' => 'Mulai bagian baru', +'tooltip-ca-viewsource' => 'Laman ko dilinduangi. +Awak hanyo buliah lihek sumber se', +'tooltip-ca-history' => 'Revisi sabalunnyo laman ko', +'tooltip-ca-protect' => 'Lindungi laman ko', +'tooltip-ca-delete' => 'Hapuih laman ko', +'tooltip-ca-move' => 'Pindahkan laman ko', +'tooltip-ca-watch' => 'Tambahkan laman ko ka senarai pantauan awak', +'tooltip-ca-unwatch' => 'Kaluaan laman ko dari senarai pantauan awak', +'tooltip-search' => 'Cari {{SITENAME}}', +'tooltip-search-go' => 'Cari suatu laman dengan namo yang samo jiko tasadio', +'tooltip-search-fulltext' => 'Cari laman yang ado teks ko', +'tooltip-n-mainpage' => 'Kunjungi Halaman Utamo', +'tooltip-n-mainpage-description' => 'Kunjungi halaman utamo', +'tooltip-n-portal' => 'Tentang proyek, apo yang dapek awak lakukan, di mano mancari sasuatu', +'tooltip-n-currentevents' => 'Temukan informasi latar dari peristiwa kini ko', +'tooltip-n-recentchanges' => 'Senarai parubahan baru dalam wiki', +'tooltip-n-randompage' => 'Tampilkan sembarang halaman', +'tooltip-n-help' => 'Tampek mancari bantuan', +'tooltip-t-whatlinkshere' => 'Senarai sado halaman wiki yang punyo pranala ka halaman ko', +'tooltip-t-recentchangeslinked' => 'Parubahan baru halaman nan bakaik jo laman ko', +'tooltip-feed-rss' => 'Umpan RSS untuak laman ko', +'tooltip-feed-atom' => 'Umpan Atom untuak laman ko', +'tooltip-t-contributions' => 'Lihek senarai jariah pangguno ko', +'tooltip-t-emailuser' => 'Kirimkan e-mail ka pangguno ko', +'tooltip-t-upload' => 'Unggah berkas', +'tooltip-t-specialpages' => 'Senarai semua halaman istimewa', +'tooltip-t-print' => 'Versi cetak halaman ko', +'tooltip-t-permalink' => 'Pranala permanen untuak revisi laman ko', +'tooltip-ca-nstab-main' => 'Lihek isi laman', +'tooltip-ca-nstab-user' => 'Lihek laman pangguno', +'tooltip-ca-nstab-special' => 'Iko adolah laman istimewa, awak indak buliah manyuntiangnyo', +'tooltip-ca-nstab-project' => 'Lihek laman proyek', +'tooltip-ca-nstab-image' => 'Lihek laman berkas', +'tooltip-ca-nstab-template' => 'Lihek templat', +'tooltip-ca-nstab-help' => 'Lihek laman bantuan', +'tooltip-ca-nstab-category' => 'Lihek laman kategori', +'tooltip-minoredit' => 'Tandoi iko sabagai suntingan ketek', +'tooltip-save' => 'Simpan yang awak ubah ko', +'tooltip-preview' => 'Pratonton parubahan, harap gunokan iko sabalun disimpan', +'tooltip-diff' => 'Lihek parubahan yang sudah awak buek tu', +'tooltip-compareselectedversions' => 'Lihek parbedaan antaro duo revisi pilihan laman ko', +'tooltip-watch' => 'Tambahkan laman ko ka senarai pantauan awak', +'tooltip-recreate' => 'Buek baliak laman walaupun sabananyo pernah dihapuih', +'tooltip-upload' => 'Mulai mamuek', +'tooltip-rollback' => '"Baliakkan" baraliah suntiang laman ko pado kontribusi tarakhir dalam sakali klik', +'tooltip-undo' => '"Indak jadi" suntiangan ko dibaliakkan dan mambuka kotak suntiang dalam mode pratonton. Alasan dapek ditambah pado kotak ringkasan.', +'tooltip-preferences-save' => 'Simpan preferensi', +'tooltip-summary' => 'Masuakan sabuah ringkasan pendek', + +# Metadata +'nodublincore' => 'Dublin Core RDF metadata dimatian untuak layanan ko', +'nocreativecommons' => 'Creative Commons RDF metadata dimatian untuak layanan ko', +'notacceptable' => 'Layanan wiki indak manyadioan data dalam format yang dapek dibaco dek pelanggan awak.', + +# Browsing diffs +'previousdiff' => '← Revisi sabalunnyo', +'nextdiff' => 'Revisi salanjuiknyo →', + +# Media information +'file-info-size' => '$1 × $2 piksel, ukuran berkas: $3, tipe MIME: $4', +'file-nohires' => 'Indak tasadio resolusi yang labiah tinggi.', +'svg-long-desc' => 'SVG berkas, nominal $1 × $2 piksel, ukuran berkas: $3', +'show-big-image' => 'Resolusi penuh', +'show-big-image-thumb' => 'Ukuran pratonton ini: $1 × $2 piksel', + +# Bad image list +'bad_image_list' => 'Formatnyo sabagai berikut: + +Hanyo butir senarai (barih diawali jo tando *) yang dihituang. +Pranala partamo pado barih tu mesti bakaik ka berkas nan buruak. +Pranala-pranala salanjuiknyo pado barih nan samo dianggap sabagai pengecualian, yaitu laman nan dapek manampilkan berkas tu.', + +# Metadata +'metadata' => 'Metadata', +'metadata-help' => 'Berkas ko mengandung informasi tambahan yang mungkin ditambahkan dek kamera digital atau pemindai yang digunokan untuak mambuek atau mendigitalisasi berkas. Jiko berkas ko lah mangalami modifikasi, rincian yang ado mungkin indak sacaro penuh merefleksikan modifikasi berkas tu.', +'metadata-expand' => 'Tampilkan rincian tambahan', +'metadata-collapse' => 'Suruakkan rincian tambahan', +'metadata-fields' => 'Pesan EXIF metadata ko akan ditampilkan pado laman informasi gambar jiko tabel metadata disuruakkan. +Nan lainnyo akan tasuruak sacaro default. +* make +* model +* datetimeoriginal +* exposuretime +* fnumber +* isospeedratings +* focallength', + +# External editor support +'edit-externally' => 'Suntiang berkas ko dengan aplikasi lua', +'edit-externally-help' => '(Lihek [http://www.mediawiki.org/wiki/Manual:External_editors instruksi pengaturan] untuak maklumat lanjutnyo)', + +# 'all' in various places, this might be different for inflected languages +'watchlistall2' => 'semua', +'namespacesall' => 'semua', +'monthsall' => 'semua', + +# Watchlist editing tools +'watchlisttools-view' => 'Tampilkan parubahan takaik', +'watchlisttools-edit' => 'Tampilkan dan suntiang senarai pantauan', +'watchlisttools-raw' => 'Suntiang senarai pantauan mentah', + +# Special:FileDuplicateSearch +'fileduplicatesearch-result-n' => 'Berkas "$1" punyo {{PLURAL:$2|1 duplikat identik|$2 duplikat identik}}.', + +# Special:SpecialPages +'specialpages' => 'Laman istimewa', + +); diff --git a/languages/messages/MessagesMk.php b/languages/messages/MessagesMk.php index 43340efa..2aacfac1 100644 --- a/languages/messages/MessagesMk.php +++ b/languages/messages/MessagesMk.php @@ -22,7 +22,7 @@ $namespaceNames = array( NS_MEDIA => 'Медија', - NS_SPECIAL => 'Специјални', + NS_SPECIAL => 'Специјална', NS_TALK => 'Разговор', NS_USER => 'Корисник', NS_USER_TALK => 'Разговор_со_корисник', @@ -40,6 +40,7 @@ $namespaceNames = array( ); $namespaceAliases = array( + 'Специјални' => NS_SPECIAL, 'Слика' => NS_FILE, 'Разговор_за_слика' => NS_FILE_TALK, ); @@ -94,15 +95,16 @@ $specialPageAliases = array( 'Disambiguations' => array( 'Појаснувања' ), 'Userlogin' => array( 'Најавување' ), 'Userlogout' => array( 'Одјавување' ), - 'CreateAccount' => array( 'СоздајКирисничкаСметка' ), + 'CreateAccount' => array( 'СоздајКорисничкаСметка' ), 'Preferences' => array( 'Нагодувања' ), - 'Watchlist' => array( 'ЛистаНаНабљудувања' ), + 'Watchlist' => array( 'СписокНаНабљудувања' ), 'Recentchanges' => array( 'СкорешниПромени' ), - 'Upload' => array( 'Подигнување', 'Подигнувања' ), - 'Listfiles' => array( 'ЛистаНаСлики', 'ЛистаНаПодатотеки' ), + 'Upload' => array( 'Подигање', 'Подигања' ), + 'UploadStash' => array( 'СкриениПодигања' ), + 'Listfiles' => array( 'СписокНаПодатотеки', 'СписокНаСлики' ), 'Newimages' => array( 'НовиСлики', 'НовиПодатотеки' ), - 'Listusers' => array( 'ЛистаНаКорисници', 'ЛистаКорисници' ), - 'Listgrouprights' => array( 'ЛистаНаГрупниПрава' ), + 'Listusers' => array( 'СписокНаКорисници', 'СписокКорисници' ), + 'Listgrouprights' => array( 'СписокНаГрупниПрава' ), 'Statistics' => array( 'Статистики' ), 'Randompage' => array( 'Случајна', 'СлучајнаСтраница' ), 'Lonelypages' => array( 'ОсамениСтраници', 'СтранциСирачиња' ), @@ -113,9 +115,9 @@ $specialPageAliases = array( 'Unusedcategories' => array( 'НеискористениКатегории' ), 'Unusedimages' => array( 'НеискористениСлики', 'НеискористениПодатотеки' ), 'Wantedpages' => array( 'ПрекинатиВрски' ), - 'Wantedcategories' => array( 'БараниКатегории' ), - 'Wantedfiles' => array( 'БараниПодатотеки' ), - 'Wantedtemplates' => array( 'БараниШаблони' ), + 'Wantedcategories' => array( 'ПотребниКатегории' ), + 'Wantedfiles' => array( 'ПотребниПодатотеки' ), + 'Wantedtemplates' => array( 'ПотребниШаблони' ), 'Mostlinked' => array( 'СоНајмногуВрски', 'СтранициСоНајмногуВрски' ), 'Mostlinkedcategories' => array( 'НајупотребуваниКатегории' ), 'Mostlinkedtemplates' => array( 'НајупотребуваниШаблони' ), @@ -132,11 +134,12 @@ $specialPageAliases = array( 'Protectedtitles' => array( 'ЗаштитениНаслови' ), 'Allpages' => array( 'СитеСтраници' ), 'Prefixindex' => array( 'ИндексНаПрефикси' ), - 'Ipblocklist' => array( 'ЛистаНаБлокираниIP' ), + 'Ipblocklist' => array( 'СписокНаБлокираниIP' ), + 'Unblock' => array( 'Одблокирај' ), 'Specialpages' => array( 'СпецијалниСтраници' ), 'Contributions' => array( 'Придонеси' ), - 'Emailuser' => array( 'Пиши е-пошта на корисникот' ), - 'Confirmemail' => array( 'Потврди е-пошта' ), + 'Emailuser' => array( 'Пиши_е-пошта_на_корисникот' ), + 'Confirmemail' => array( 'Потврди_е-пошта' ), 'Whatlinkshere' => array( 'ШтоВодиОвде' ), 'Recentchangeslinked' => array( 'ПоврзаниПромени' ), 'Movepage' => array( 'ПреместиСтраница' ), @@ -156,18 +159,20 @@ $specialPageAliases = array( 'MIMEsearch' => array( 'MIMEПребарување' ), 'FileDuplicateSearch' => array( 'ПребарувањеДупликатПодатотека' ), 'Unwatchedpages' => array( 'НенабљудуваниСтраници' ), - 'Listredirects' => array( 'ЛистаНаПренасочувања' ), + 'Listredirects' => array( 'СписокНаПренасочувања' ), 'Revisiondelete' => array( 'БришењеРевизија' ), 'Unusedtemplates' => array( 'НеискористениШаблони' ), 'Randomredirect' => array( 'СлучајноПренасочување' ), 'Mypage' => array( 'МојаСтраница' ), 'Mytalk' => array( 'МојРазговор', 'МоиРазговори' ), 'Mycontributions' => array( 'МоиПридонеси' ), - 'Listadmins' => array( 'ЛистаНаАдминистратори' ), - 'Listbots' => array( 'ЛистаНаБотови' ), + 'Myuploads' => array( 'МоиПодигања' ), + 'PermanentLink' => array( 'ПостојанаВрска' ), + 'Listadmins' => array( 'СписокНаАдминистратори' ), + 'Listbots' => array( 'СписокНаБотови' ), 'Popularpages' => array( 'ПопуларниСтраници' ), 'Search' => array( 'Барај' ), - 'Resetpass' => array( 'РесетирајЛозинка' ), + 'Resetpass' => array( 'СмениЛозинка' ), 'Withoutinterwiki' => array( 'БезИнтервики' ), 'MergeHistory' => array( 'СпојувањеИсторија' ), 'Filepath' => array( 'ПатДоПодатотека' ), @@ -177,6 +182,9 @@ $specialPageAliases = array( 'DeletedContributions' => array( 'ИзбришаниПридонеси' ), 'Tags' => array( 'Oзнаки', 'Приврзоци' ), 'Activeusers' => array( 'АктивниКорисници' ), + 'ComparePages' => array( 'СпоредиСтраници' ), + 'Badtitle' => array( 'ЛошНаслов' ), + 'DisableAccount' => array( 'ОневозможиСметка' ), ); $magicWords = array( @@ -187,17 +195,19 @@ $magicWords = array( 'toc' => array( '0', '__СОДРЖИНА__', '__TOC__' ), 'noeditsection' => array( '0', '__БЕЗ_УРЕДУВАЊЕ_НА_СЕКЦИИ__', '__NOEDITSECTION__' ), 'noheader' => array( '0', '__БЕЗНАСЛОВ__', '__NOHEADER__' ), - 'currentmonth' => array( '1', 'СЕГАШЕНМЕСЕЦ', 'CURRENTMONTH', 'CURRENTMONTH2' ), - 'currentmonthname' => array( '1', 'СЕГАШЕНМЕСЕЦИМЕ', 'CURRENTMONTHNAME' ), - 'currentmonthnamegen' => array( '1', 'СЕГАШЕНМЕСЕЦИМЕРОД', 'CURRENTMONTHNAMEGEN' ), - 'currentmonthabbrev' => array( '1', 'СЕГАШЕНМЕСЕЦСКР', 'CURRENTMONTHABBREV' ), - 'currentday' => array( '1', 'СЕГАШЕНДЕН', 'CURRENTDAY' ), - 'currentday2' => array( '1', 'СЕГАШЕНДЕН2', 'CURRENTDAY2' ), - 'currentdayname' => array( '1', 'СЕГАШЕНДЕНИМЕ', 'CURRENTDAYNAME' ), + 'currentmonth' => array( '1', 'ТЕКОВЕНМЕСЕЦ', 'CURRENTMONTH', 'CURRENTMONTH2' ), + 'currentmonth1' => array( '1', 'ТЕКОВЕНМЕСЕЦ1', 'CURRENTMONTH1' ), + 'currentmonthname' => array( '1', 'ТЕКОВЕНМЕСЕЦИМЕ', 'CURRENTMONTHNAME' ), + 'currentmonthnamegen' => array( '1', 'ТЕКОВЕНМЕСЕЦИМЕРОД', 'CURRENTMONTHNAMEGEN' ), + 'currentmonthabbrev' => array( '1', 'ТЕКОВЕНМЕСЕЦСКР', 'CURRENTMONTHABBREV' ), + 'currentday' => array( '1', 'ТЕКОВЕНДЕН', 'CURRENTDAY' ), + 'currentday2' => array( '1', 'ТЕКОВЕНДЕН2', 'CURRENTDAY2' ), + 'currentdayname' => array( '1', 'ТЕКОВЕНДЕНИМЕ', 'CURRENTDAYNAME' ), 'currentyear' => array( '1', 'СЕГАШНАГОДИНА', 'CURRENTYEAR' ), 'currenttime' => array( '1', 'СЕГАШНОВРЕМЕ', 'CURRENTTIME' ), - 'currenthour' => array( '1', 'СЕГАШЕНЧАС', 'CURRENTHOUR' ), + 'currenthour' => array( '1', 'ТЕКОВЕНЧАС', 'CURRENTHOUR' ), 'localmonth' => array( '1', 'МЕСЕЦ_ЛОКАЛНО', 'LOCALMONTH', 'LOCALMONTH2' ), + 'localmonth1' => array( '1', 'МЕСЕЦ_ЛОКАЛНО1', 'LOCALMONTH1' ), 'localmonthname' => array( '1', 'МЕСЕЦИМЕ_ЛОКАЛНО', 'LOCALMONTHNAME' ), 'localday' => array( '1', 'ДЕН_ЛОКАЛНО', 'LOCALDAY' ), 'localday2' => array( '1', 'ДЕН2_ЛОКАЛНО', 'LOCALDAY2' ), @@ -209,6 +219,7 @@ $magicWords = array( 'numberofarticles' => array( '1', 'БРОЈСТАТИИ', 'БРОЈНАСТАТИИ', 'NUMBEROFARTICLES' ), 'numberoffiles' => array( '1', 'БРОЈНАПОДАТОТЕКИ', 'NUMBEROFFILES' ), 'numberofusers' => array( '1', 'БРОЈНАКОРИСНИЦИ', 'NUMBEROFUSERS' ), + 'numberofactiveusers' => array( '1', 'БРОЈНААКТИВНИКОРИСНИЦИ', 'NUMBEROFACTIVEUSERS' ), 'numberofedits' => array( '1', 'БРОЈНАУРЕДУВАЊА', 'NUMBEROFEDITS' ), 'numberofviews' => array( '1', 'БРОЈНАПРЕГЛЕДУВАЊА', 'NUMBEROFVIEWS' ), 'pagename' => array( '1', 'СТРАНИЦА', 'PAGENAME' ), @@ -216,10 +227,11 @@ $magicWords = array( 'namespace' => array( '1', 'ИМЕПРОСТОР', 'ИМЕНСКИПРОСТОР', 'NAMESPACE' ), 'talkspace' => array( '1', 'РАЗГОВОРПРОСТОР', 'TALKSPACE' ), 'fullpagename' => array( '1', 'ЦЕЛОСНОИМЕНАСТРАНИЦА', 'FULLPAGENAME' ), - 'subpagename' => array( '1', 'ИМЕНАПОДСТРАНИЦА', 'SUBPAGENAME' ), + 'subpagename' => array( '1', 'ИМЕНАПОТСТРАНИЦА', 'SUBPAGENAME' ), 'basepagename' => array( '1', 'ИМЕНАОСНОВНАСТРАНИЦА', 'BASEPAGENAME' ), 'talkpagename' => array( '1', 'СТРАНИЦАЗАРАЗГОВОР', 'TALKPAGENAME' ), - 'subst' => array( '0', 'ЗАМЕСТ:', 'SUBST:' ), + 'subst' => array( '0', 'ЗАМЕНИ:', 'SUBST:' ), + 'safesubst' => array( '0', 'БЕЗБЗАМЕНИ', 'SAFESUBST:' ), 'msgnw' => array( '0', 'ИЗВЕШТNW:', 'MSGNW:' ), 'img_thumbnail' => array( '1', 'мини', 'мини-слика', 'thumbnail', 'thumb' ), 'img_manualthumb' => array( '1', 'мини-слика=$1', 'мини=$1', 'thumbnail=$1', 'thumb=$1' ), @@ -231,36 +243,70 @@ $magicWords = array( 'img_framed' => array( '1', 'рамка', 'ворамка', 'framed', 'enframed', 'frame' ), 'img_frameless' => array( '1', 'безрамка', 'frameless' ), 'img_page' => array( '1', 'страница=$1', 'страница $1', 'page=$1', 'page $1' ), - 'img_top' => array( '1', 'врв', 'top' ), + 'img_upright' => array( '1', 'исправено', 'исправено=$1', 'исправено $1', 'upright', 'upright=$1', 'upright $1' ), + 'img_border' => array( '1', 'граничник', 'граница', 'border' ), + 'img_baseline' => array( '1', 'основналинија', 'baseline' ), + 'img_sub' => array( '1', 'долениндекс', 'дол', 'sub' ), + 'img_super' => array( '1', 'горениндекс', 'гор', 'super', 'sup' ), + 'img_top' => array( '1', 'врв', 'најгоре', 'top' ), + 'img_text_top' => array( '1', 'текст-врв', 'текст-најгоре', 'text-top' ), 'img_middle' => array( '1', 'средина', 'middle' ), - 'img_bottom' => array( '1', 'дно', 'bottom' ), + 'img_bottom' => array( '1', 'дно', 'најдолу', 'bottom' ), + 'img_text_bottom' => array( '1', 'текст-дно', 'текст-најдолу', 'text-bottom' ), 'img_link' => array( '1', 'врска=$1', 'link=$1' ), - 'sitename' => array( '1', 'ИМЕНАСАЈТ', 'SITENAME' ), + 'img_alt' => array( '1', 'алт=$1', 'alt=$1' ), + 'sitename' => array( '1', 'ИМЕНАМРЕЖНОМЕСТО', 'ИМЕНАСАЈТ', 'SITENAME' ), 'localurl' => array( '0', 'ЛОКАЛНААДРЕСА:', 'LOCALURL:' ), 'localurle' => array( '0', 'ЛОКАЛНААДРЕСАИ:', 'LOCALURLE:' ), - 'server' => array( '0', 'СЕРВЕР', 'SERVER' ), - 'servername' => array( '0', 'ИМЕНАСЕРВЕР', 'SERVERNAME' ), + 'server' => array( '0', 'ОПСЛУЖУВАЧ', 'SERVER' ), + 'servername' => array( '0', 'ИМЕНАОПСЛУЖУВАЧ', 'SERVERNAME' ), 'grammar' => array( '0', 'ГРАМАТИКА:', 'GRAMMAR:' ), + 'gender' => array( '0', 'ПОЛ:', 'GENDER:' ), 'currentweek' => array( '1', 'СЕГАШНАСЕДМИЦА', 'CURRENTWEEK' ), + 'currentdow' => array( '1', 'ТЕКОВЕНДЕНВОСЕДМИЦАТА', 'CURRENTDOW' ), 'localweek' => array( '1', 'СЕДМИЦА_ЛОКАЛНО', 'LOCALWEEK' ), + 'localdow' => array( '1', 'ЛОКАЛЕНДЕНВОСЕДМИЦАТА', 'LOCALDOW' ), + 'revisionid' => array( '1', 'НАЗНАКАНАРЕВИЗИЈА', 'REVISIONID' ), + 'revisionday' => array( '1', 'ДЕННАРЕВИЗИЈА', 'REVISIONDAY' ), + 'revisionday2' => array( '1', 'ДЕННАРЕВИЗИЈА2', 'REVISIONDAY2' ), + 'revisionmonth' => array( '1', 'МЕСЕЦНАРЕВИЗИЈА', 'REVISIONMONTH' ), + 'revisionmonth1' => array( '1', 'МЕСЕЦНАРЕВИЗИЈА1', 'REVISIONMONTH1' ), + 'revisionyear' => array( '1', 'ГОДИНАНАРЕВИЗИЈА', 'REVISIONYEAR' ), + 'revisiontimestamp' => array( '1', 'ВРЕМЕНАРЕВИЗИЈА', 'REVISIONTIMESTAMP' ), + 'revisionuser' => array( '1', 'КОРИСНИКНАНАРЕВИЗИЈА', 'REVISIONUSER' ), 'plural' => array( '0', 'МНОЖИНА:', 'PLURAL:' ), - 'raw' => array( '0', 'РЕД:', 'RAW:' ), + 'fullurl' => array( '0', 'ПОЛНАURL:', 'FULLURL:' ), + 'raw' => array( '0', 'СИРОВО:', 'РЕД:', 'RAW:' ), 'displaytitle' => array( '1', 'ПРИКАЖИНАСЛОВ', 'DISPLAYTITLE' ), 'currentversion' => array( '1', 'ТЕКОВНАВЕРЗИЈА', 'CURRENTVERSION' ), + 'urlencode' => array( '0', 'ШИФРИРАЈURL:', 'URLENCODE:' ), + 'anchorencode' => array( '0', 'ШИФРИРАЈКОТВА', 'ANCHORENCODE' ), + 'currenttimestamp' => array( '1', 'ОЗНАЧЕНОТЕКОВНОВРЕМЕ', 'CURRENTTIMESTAMP' ), + 'localtimestamp' => array( '1', 'ОЗНАЧЕНОЛОКАЛНОВРЕМЕ', 'LOCALTIMESTAMP' ), + 'directionmark' => array( '1', 'ОЗНАКАЗАНАСОКА', 'DIRECTIONMARK', 'DIRMARK' ), 'language' => array( '0', '#ЈАЗИК:', '#LANGUAGE:' ), + 'contentlanguage' => array( '1', 'ЈАЗИКНАСОДРЖИНАТА', 'CONTENTLANGUAGE', 'CONTENTLANG' ), + 'pagesinnamespace' => array( '1', 'СТРАНИЦИВОИМЕНСКИПРОСТОР', 'PAGESINNAMESPACE:', 'PAGESINNS:' ), 'numberofadmins' => array( '1', 'БРОЈНААДМИНИСТРАТОРИ', 'NUMBEROFADMINS' ), + 'formatnum' => array( '0', 'ФОРМАТБРОЈ', 'FORMATNUM' ), + 'special' => array( '0', 'специјална', 'специјални', 'special' ), 'defaultsort' => array( '1', 'ОСНОВНОПОДРЕДУВАЊЕ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ), - 'tag' => array( '0', 'приврзок', 'tag' ), + 'tag' => array( '0', 'ознака', 'tag' ), 'hiddencat' => array( '1', '__СКРИЕНА_КАТЕГОРИЈА__', '__СКРИЕНАКАТЕГОРИЈА__', '__HIDDENCAT__' ), 'pagesincategory' => array( '1', 'СТРАНИЦИВОКАТЕГОРИЈА', 'СТРАНИЦИВОКАТ', 'PAGESINCATEGORY', 'PAGESINCAT' ), 'pagesize' => array( '1', 'ГОЛЕМИНА_НА_СТРАНИЦА', 'PAGESIZE' ), 'index' => array( '1', '__ИНДЕКС__', '__INDEX__' ), 'noindex' => array( '1', '__БЕЗИНДЕКС__', '__NOINDEX__' ), 'staticredirect' => array( '1', '__СТАТИЧНОПРЕНАСОЧУВАЊЕ__', '__STATICREDIRECT__' ), + 'protectionlevel' => array( '1', 'НИВОНАЗАШТИТА', 'PROTECTIONLEVEL' ), + 'formatdate' => array( '0', 'форматнадатум', 'formatdate', 'dateformat' ), + 'url_path' => array( '0', 'ПАТЕКА', 'PATH' ), + 'url_wiki' => array( '0', 'ВИКИ', 'WIKI' ), + 'url_query' => array( '0', 'БАРАЊЕ', 'QUERY' ), ); $linkTrail = '/^([a-zабвгдѓежзѕијклљмнњопрстќуфхцчџш]+)(.*)$/sDu'; -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $messages = array( # User preference toggles @@ -275,16 +321,15 @@ $messages = array( 'tog-numberheadings' => 'Автоматонумерирање на заглавијата', 'tog-showtoolbar' => 'Прикажи алатник за уредување (JavaScript)', 'tog-editondblclick' => 'Уредување на страници при двојно кликнување (JavaScript)', -'tog-editsection' => 'Овозможи уредување на заглавија преку [уреди] врски', +'tog-editsection' => 'Овозможи уредување на заглавија преку врските [уреди]', 'tog-editsectiononrightclick' => 'Овозможи уредување на заглавија со десен клик на нивниот наслов (JavaScript)', 'tog-showtoc' => 'Покажи содржина (за страници со повеќе од 3 заглавија)', -'tog-rememberpassword' => 'Зачувај ги моите податоци за најавување на овој компјутер', -'tog-editwidth' => 'Максимална ширина на кутијата за уредување', +'tog-rememberpassword' => 'Запомни ме на овој прелистувач (највеќе до $1 {{PLURAL:$1|ден|дена}})', 'tog-watchcreations' => 'Додавај ги страниците што ги создавам во списокот на набљудувања', 'tog-watchdefault' => 'Додавај ги страниците што ги уредувам во списокот на набљудувања', 'tog-watchmoves' => 'Додавај ги страниците што ги преместувам во списокот на набљудувања', 'tog-watchdeletion' => 'Додавај ги страниците што ги бришам во списокот на набљудувања', -'tog-minordefault' => 'Обележи ги сите уредувања како ситни по основно', +'tog-minordefault' => 'Обележувај ги сите уредувања како ситни по основно', 'tog-previewontop' => 'Прикажи го прегледот пред кутијата за уредување', 'tog-previewonfirst' => 'Прикажи преглед на првото уредување', 'tog-nocache' => 'Оневозможи кеширање на страниците во прелистувачот', @@ -426,31 +471,21 @@ $messages = array( 'faqpage' => 'Project:ЧПП', # Vector skin -'vector-action-addsection' => 'Додај тема', -'vector-action-delete' => 'Избриши', -'vector-action-move' => 'Премести', -'vector-action-protect' => 'Заштити', -'vector-action-undelete' => 'Врати', -'vector-action-unprotect' => 'Отстрани заштита', -'vector-namespace-category' => 'Категорија', -'vector-namespace-help' => 'Страница за помош', -'vector-namespace-image' => 'Податотека', -'vector-namespace-main' => 'Страница', -'vector-namespace-media' => 'Мултимедијална страница', -'vector-namespace-mediawiki' => 'Порака', -'vector-namespace-project' => 'Проектна страница', -'vector-namespace-special' => 'Специјална страница', -'vector-namespace-talk' => 'Разговор', -'vector-namespace-template' => 'Шаблон', -'vector-namespace-user' => 'Корисничка страница', -'vector-view-create' => 'Создај', -'vector-view-edit' => 'Уреди', -'vector-view-history' => 'Види историја', -'vector-view-view' => 'Читај', -'vector-view-viewsource' => 'Извор', -'actions' => 'Дејства', -'namespaces' => 'Именски простори', -'variants' => 'Варијанти', +'vector-action-addsection' => 'Додај тема', +'vector-action-delete' => 'Избриши', +'vector-action-move' => 'Премести', +'vector-action-protect' => 'Заштити', +'vector-action-undelete' => 'Врати', +'vector-action-unprotect' => 'Отстрани заштита', +'vector-simplesearch-preference' => 'Овозможи збогатени предлози при пребарување (само за рувото „Векторско“)', +'vector-view-create' => 'Создај', +'vector-view-edit' => 'Уреди', +'vector-view-history' => 'Види историја', +'vector-view-view' => 'Читај', +'vector-view-viewsource' => 'Извор', +'actions' => 'Дејства', +'namespaces' => 'Именски простори', +'variants' => 'Варијанти', 'errorpagetitle' => 'Грешка', 'returnto' => 'Назад на $1.', @@ -511,6 +546,9 @@ $messages = array( Ве молиме почекајте некое време пред повторно да се обидете да пристапите до оваа страница. $1', +'pool-timeout' => 'Истече времето за чекање на заклучувањето', +'pool-queuefull' => 'Редицата на барања е полна', +'pool-errorunknown' => 'Непозната грешка', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'За {{SITENAME}}', @@ -681,7 +719,8 @@ $2', 'yourname' => 'Корисничко име:', 'yourpassword' => 'Лозинка:', 'yourpasswordagain' => 'Повторете ја лозинката:', -'remembermypassword' => 'Запомни го моето најавување на овој компјутер', +'remembermypassword' => 'Запомни ме на овој сметач (највеќе $1 {{PLURAL:$1|ден|дена}})', +'securelogin-stick-https' => 'Останете поврзани со HTTPS по одјавата', 'yourdomainname' => 'Вашиот домен:', 'externaldberror' => 'Настана грешка при надворешното најавување на базата или пак немате дозвола да ја подновите вашата надворешна сметка.', 'login' => 'Најава', @@ -698,6 +737,7 @@ $2', 'gotaccount' => "Веќе имате корисничка сметка? '''$1'''.", 'gotaccountlink' => 'Најавете се', 'createaccountmail' => 'по е-пошта', +'createaccountreason' => 'Причина:', 'badretype' => 'Внесените лозинки не се исти.', 'userexists' => 'Корисничкото име што го внесовте веќе се користи. Ве молиме изберете друго име.', @@ -718,12 +758,13 @@ $2', Проверете да не сте направиле грешка во пишувањето, или [[Special:UserLogin/signup|создајте нова корисничка сметка]].', 'nosuchusershort' => 'Нема корисник со името „$1“. Проверете дали правилно сте напишале.', -'nouserspecified' => 'Мора да назначите корисничко име.', +'nouserspecified' => 'Мора да наведете корисничко име.', 'login-userblocked' => 'Овој корисник е блокиран. Најавувањето не е дозволено.', 'wrongpassword' => 'Внесовте погрешна лозинка. Обидете се повторно.', 'wrongpasswordempty' => 'Внесената лозинка е празна. Обидете се повторно.', 'passwordtooshort' => 'Лозинката мора да има најмалку {{PLURAL:$1|1 знак|$1 знаци}}.', 'password-name-match' => 'Лозинката мора да се разликува од корисничкото име.', +'password-login-forbidden' => 'Употребата на ова корисничко име и лозинка е забранета.', 'mailmypassword' => 'Испрати нова лозинка по е-пошта', 'passwordremindertitle' => 'Нова привремена лозинка за {{SITENAME}}', 'passwordremindertext' => 'Некој (најверојатно вие, од IP-адреса $1) побара нова лозинка за {{SITENAME}} ($4). @@ -764,6 +805,9 @@ $2', 'loginlanguagelabel' => 'Јазик: $1', 'suspicious-userlogout' => 'Вашето барање за одјава е одбиено бидејќи се чини дека е испратено од расипан прелистувач или кеширачки застапник (proxy).', +# E-mail sending +'php-mail-error-unknown' => 'Непозната грешка во функцијата mail() на PHP', + # Password reset dialog 'resetpass' => 'Промена на лозинка', 'resetpass_announce' => 'Најавени сте со привремена лозинка пратена по е-пошта. @@ -817,9 +861,11 @@ $2', 'showdiff' => 'Прикажи промени', 'anoneditwarning' => "'''Предупредување:''' Не сте најавени. Вашата IP-адреса ќе биде заведена во историјата на уредување на страницата.", +'anonpreviewwarning' => "''Не сте најавени. Ако ја зачувате, Вашата IP-адреса ќе биде заведена во историјата на уредување на страницата.''", 'missingsummary' => "'''Потсетник:''' Не внесовте опис на измените. Ако притиснете Зачувај повторно, вашите измени ќе се зачуваат без опис.", 'missingcommenttext' => 'Ве молиме внесете коментар подолу.', -'missingcommentheader' => "'''Потсетување:''' Не внесовте наслов за овој коментар. Ако повторно кликнете на Зачувај, вашето уредување ќе биде запамтено без наслов.", +'missingcommentheader' => "'''Потсетување:''' Не внесовте наслов за овој коментар. +Ако повторно кликнете на „{{int:savearticle}}“, уредувањето ќе биде зачувано без наслов.", 'summary-preview' => 'Изглед на описот:', 'subject-preview' => 'Преглед на предметот/насловот:', 'blockedtitle' => 'Корисникот е блокиран', @@ -896,8 +942,12 @@ $2', 'userjsyoucanpreview' => "'''Совет:''' Употребете го копчето „{{int:showpreview}}“ за да ја испробате вашата нова JavaScript пред да зачувате.", 'usercsspreview' => "'''Запомнете дека ова е само преглед на вашиот кориснички CSS код, страницата сè уште не е зачувана!'''", 'userjspreview' => "'''Запомнете дека ова е само преглед на вашиот JavaScript код, страницата сè уште не е зачувана!'''", -'userinvalidcssjstitle' => "'''Предупредување:''' Нема руво „$1“. -Запомнете дека сопствените .css и .js страници имаат имиња со мали букви, пр. {{ns:user}}:Некој/monobook.css наместо {{ns:user}}:Некој/Monobook.css.", +'sitecsspreview' => "'''Запомнете дека ова е само преглед на овој CSS-код.''' +'''Сè уште не е зачуван!'''", +'sitejspreview' => "'''Запомнете дека ова е само преглед на овој JavaScript-код.''' +'''Сè уште не е зачуван!'''", +'userinvalidcssjstitle' => "'''Предупредување:''' Нема руво „$1“. +Запомнете дека сопствените .css и .js страници имаат имиња со мали букви, пр. {{ns:user}}:Некој/vector.css наместо {{ns:user}}:Некој/Vector.css.", 'updated' => '(Подновено)', 'note' => "'''Напомена:'''", 'previewnote' => "'''Имајте предвид дека ова е само преглед.''' @@ -938,9 +988,6 @@ $2', 'copyrightwarning2' => "Ве молиме, имајте предвид дека сите придонеси кон {{SITENAME}} можат да бидат уредувани, менувани или отстранети од други корисници. Ако не сакате вашиот текст да биде менуван и редистрибуиран слободно, не го испраќајте овде.
    Исто така потврдувате дека текстот сте го напишале сами, или сте го копирале од јавен домен или сличен слободен извор (видетe $1 за детали).
    '''НЕ ПРАЌАЈТЕ ТЕКСТОВИ ЗАШТИТЕНИ СО АВТОРСКИ ПРАВА БЕЗ ДОЗВОЛА!'''", -'longpagewarning' => "'''ПРЕДУПРЕДУВАЊЕ: Оваа страница има $1 килобајти; -некои прелистувачи може да имаат проблеми со уредување на страниците поголеми од 32 кБ. -Размислете за разделување на страницата на помали делови.'''", 'longpageerror' => "'''ГРЕШКА: Текстот што го внесовте е голем $1 килобајти, што е повеќе од максималните $2 килобајти. Не може да се зачува.'''", 'readonlywarning' => "'''ПРЕДУПРЕДУВАЊЕ: Базата на податоци е заклучена заради одржување, па нема да можете да ги зачувате вашите промени сега. Пробајте да го зачувате текстот локално (cut & paste) во некоја податотека и да го пратите подоцна.''' @@ -1079,7 +1126,7 @@ $2', 'rev-showdeleted' => 'прикажи', 'revisiondelete' => 'Избриши/врати ревизии', 'revdelete-nooldid-title' => 'Бараната измена не постои', -'revdelete-nooldid-text' => 'Не сте посочиле измена (измени) за да се изврши оваа функција или посочената измена не постои или се обидувате да ја сокриете моменталната измена.', +'revdelete-nooldid-text' => 'Не сте посочиле измена (измени) за да се изврши оваа функција или посочената измена не постои или се обидувате да ја скриете моменталната измена.', 'revdelete-nologtype-title' => 'Не е наведен тип на дневник', 'revdelete-nologtype-text' => 'Немате наведено тип на дневник за кој треба да се изврши ова дејство.', 'revdelete-nologid-title' => 'Погрешно внесен запис во дневник.', @@ -1118,6 +1165,8 @@ $1", 'logdelete-failure' => "'''Дневникот на видливост не може да биде нагоден:''' $1", 'revdel-restore' => 'Промена на видливост', +'revdel-restore-deleted' => 'избришани ревизии', +'revdel-restore-visible' => 'видливи ревизии', 'pagehist' => 'Историја на страницата', 'deletedhist' => 'Историја на бришења', 'revdelete-content' => 'содржина', @@ -1183,15 +1232,17 @@ $1", # Diffs 'history-title' => 'Историја на ревизии за „$1“', 'difference' => '(Разлика меѓу ревизија)', +'difference-multipage' => '(Разлики помеѓу страници)', 'lineno' => 'Ред $1:', 'compareselectedversions' => 'Спореди избрани ревизии', 'showhideselectedversions' => 'Прикажи/скриј избрани ревизии', 'editundo' => 'откажи', -'diff-multi' => '({{PLURAL:$1|Не е прикажана една меѓуревзија|Не се прикажани $1 меѓуревизии}})', +'diff-multi' => '({{PLURAL:$1|Не е прикажана една меѓувремена ревизија|Не се прикажани $1 меѓувремени ревизии}} од {{PLURAL:$2|еден корисник|$2 корисници}})', +'diff-multi-manyusers' => '({{PLURAL:$1|Не е прикажана една меѓувремена ревизија направена|Не се прикажани $1 меѓувремени ревизии направени}} од повеќе од $2 {{PLURAL:$2|корисник|корисници}})', # Search results 'searchresults' => 'Резултати од пребарувањето', -'searchresults-title' => 'Резултати од пребарувањето за „$1“', +'searchresults-title' => 'Резултати од пребарувањето на „$1“', 'searchresulttext' => 'За повеќе информации во врска со пребарување на {{SITENAME}}, погледнете [[{{MediaWiki:Helppage}}|{{int:help}}]].', 'searchsubtitle' => "Пребарувате '''[[:$1]]''' на ([[Special:Prefixindex/$1|сите страници кои започнуваат со „$1“]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|сите страници кои водат до „$1“]])", 'searchsubtitleinvalid' => "Пребарувавте '''$1'''", @@ -1222,6 +1273,7 @@ $1", 'searchprofile-everything-tooltip' => 'Пребарување по сета содржина (вклучувајќи страници за разговор)', 'searchprofile-advanced-tooltip' => 'Пребарување во именски простори по избор', 'search-result-size' => '$1 ({{PLURAL:$2|1 збор|$2 збора}})', +'search-result-category-size' => '{{PLURAL:$1|1 член|$1 члена}} ({{PLURAL:$2|1 поткатегорија|$2 поткатегории}}, {{PLURAL:$3|1 податотека|$3 податотеки}})', 'search-result-score' => 'Релевантност: $1%', 'search-redirect' => '(пренасочување $1)', 'search-section' => '(пасус $1)', @@ -1271,7 +1323,7 @@ $1", 'prefsnologintext' => 'Мора да бидете [{{fullurl:{{#Special:UserLogin}}|returnto=$1}} најавени] за промена на вашите кориснички нагодувања.', 'changepassword' => 'Смени лозинка', 'prefs-skin' => 'Руво', -'skin-preview' => 'Прегледај', +'skin-preview' => 'Преглед', 'prefs-math' => 'Матем. формули', 'datedefault' => 'Небитно', 'prefs-datetime' => 'Датум и време', @@ -1299,6 +1351,7 @@ $1", 'contextlines' => 'Редови по резултат:', 'contextchars' => 'Контекст по ред:', 'stub-threshold' => 'Праг за никулци (бајти):', +'stub-threshold-disabled' => 'Оневозможено', 'recentchangesdays' => 'Денови за приказ во скорешните промени:', 'recentchangesdays-max' => '(највеќе $1 {{PLURAL:$1|ден|дена}})', 'recentchangescount' => 'Број на уредувања кои ќе се прикажат по основно:', @@ -1332,6 +1385,7 @@ $1", 'prefs-files' => 'Податотеки', 'prefs-custom-css' => 'Посебно CSS', 'prefs-custom-js' => 'Посебно JS', +'prefs-common-css-js' => 'Заеднички CSS/JS за сите изгледи:', 'prefs-reset-intro' => 'Може да ја користите оваа страница за враќање на вашите нагодувања на основно-зададените нагодувања на викито. Оваа не може да се врати.', 'prefs-emailconfirm-label' => 'Потврда на е-пошта:', 'prefs-textboxsize' => 'Големина на прозорец за уредување', @@ -1371,9 +1425,15 @@ $1", 'prefs-advancedrendering' => 'Напредни нагодувања', 'prefs-advancedsearchoptions' => 'Напредни нагодувања', 'prefs-advancedwatchlist' => 'Напредни нагодувања', -'prefs-display' => 'Нагодувања за приказ', +'prefs-displayrc' => 'Нагодувања за приказ', +'prefs-displaysearchoptions' => 'Нагодувања за приказ', +'prefs-displaywatchlist' => 'Нагодувања за приказ', 'prefs-diffs' => 'Разлики', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Се чини исправно', +'email-address-validity-invalid' => 'Се бара исправна адреса!', + # User rights 'userrights' => 'Раководење со кориснички права', 'userrights-lookup-user' => 'Раководење со кориснички групи', @@ -1458,6 +1518,7 @@ $1", 'right-hideuser' => 'Блокирање корисници, сокривање од јавноста', 'right-ipblock-exempt' => 'Заобиколување на IP блокирања, авто-блокирања и блокирања на IP рангови', 'right-proxyunbannable' => 'Заобиколување на автоматски блокирања на застапници', +'right-unblockself' => 'Сопствено одблокирање', 'right-protect' => 'Менување на степени на заштита и уредување на заштитени страници', 'right-editprotected' => 'Уредување на заштитени страници (без каскадна заштита)', 'right-editinterface' => 'Уредување на кориснички посредник', @@ -1480,7 +1541,6 @@ $1", 'right-siteadmin' => 'Заклучување и отклучување на базата на податоци', 'right-reset-passwords' => 'Менување на лозинки на други корисници', 'right-override-export-depth' => 'Извезување на страници вклучувајќи поврзани страници со длабочина до 5', -'right-versiondetail' => 'Приказ на проширени информации за верзијата на програмската опрема', 'right-sendemail' => 'Испраќање на е-пошта до други корисници', # User rights log @@ -1531,14 +1591,9 @@ $1", 'recentchanges-legend' => 'Нагодувања за скорешни промени', 'recentchangestext' => 'На оваа страница ги следите скорешните промени на викито.', 'recentchanges-feed-description' => 'Следење на најскорешните промени на викито во овие емитувања.', -'recentchanges-label-legend' => 'Легенда: $1', -'recentchanges-legend-newpage' => '$1 - нова страница', 'recentchanges-label-newpage' => 'Ова уредување создаде нова страница', -'recentchanges-legend-minor' => '$1 - ситно уредување', 'recentchanges-label-minor' => 'Ова е ситно уредување', -'recentchanges-legend-bot' => '$1 - ботовско уредување', 'recentchanges-label-bot' => 'Ова уредување е направено од бот', -'recentchanges-legend-unpatrolled' => '$1 - непатролирано уредување', 'recentchanges-label-unpatrolled' => 'Ова уредување сè уште не било патролирано', 'rcnote' => "Долу {{PLURAL:$1|е прикажана '''1''' промена|се прикажани скорешните '''$1''' промени}} {{PLURAL:$2|денес|во последниве '''$2''' дена}}, почнувајќи од $5, $4.", 'rcnotefrom' => 'Подолу се промените од $2 (се прикажуваат до $1).', @@ -1587,6 +1642,9 @@ $1", 'upload_directory_missing' => 'Папката за подигање на слики ($1) не постои и не може да биде создадена од опслужувачот.', 'upload_directory_read_only' => 'Опслужувачот не може да запишува во именикот за подигање ($1).', 'uploaderror' => 'Грешка во подигањето', +'upload-recreate-warning' => "'''Предупредување: Податотеката со тоа име е избришана или преместена.''' + +Подолу е наведена дневничката евиденција на бришење и преместување за оваа страница:", 'uploadtext' => "Користете го долниот образец за подигање на податотеки. За преглед или пребарување на претходно подигнати податотеки, погледнете ја [[Special:FileList|списокот на подигнати податотеки]]; повторните подигања се заведени во [[Special:Log/upload|дневникот на подигања]], а бришењата се заведуваат во [[Special:Log/delete|дневникот на бришења]]. @@ -1622,6 +1680,17 @@ $1", 'filetype-banned-type' => "'''„.$1“''' не е допуштен тип на податотека. {{PLURAL:$3|Допуштен тип на податотека е|Допуштени типови на податотеки се}} $2.", 'filetype-missing' => 'Податотеката нема наставка (на пр. „.jpg“).', +'empty-file' => 'Поднесената податотека е празна.', +'file-too-large' => 'Поднесената податотека е преголема.', +'filename-tooshort' => 'Името на податотеката е прекратко.', +'filetype-banned' => 'Овој тип на податотека е забранет.', +'verification-error' => 'Оваа податотека не ја помина потврдата успешно.', +'hookaborted' => 'Измените што сакате да ги направите се откажани од кука на додатокот.', +'illegal-filename' => 'Такво име за податотеката на е дозволено.', +'overwrite' => 'Не е дозволено запишување врз постоечка податотека.', +'unknown-error' => 'Се појави непозната грешка.', +'tmp-create-error' => 'Не можев да создадам привремена податотека.', +'tmp-write-error' => 'Грешка при запис на привремената податотека.', 'large-file' => 'Се препорачува податотеките да не бидат поголеми од $1; оваа податотека е $2.', 'largefileserver' => 'Големината на податотеката е поголема од максимално дозволената големина.', 'emptyfile' => 'Податотеката што ја подигнавте изгледа дека е празна. @@ -1649,13 +1718,14 @@ $1", Ако и понатаму сакате да ја подигнете податотеката, ве молиме вратете се и повторно подигнете ја податотеката со ново име. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Оваа податотека е дупликат со {{PLURAL:$1|следнава податотека|следниве податотеки}}:', 'file-deleted-duplicate' => 'Податотека индентична со податотеката ([[:$1]]) претходно била избришана. Треба да проверите во дневникот на бришења за оваа податотека пред повторно да ја подигнете.', -'successfulupload' => 'Подигањето е успешно', 'uploadwarning' => 'Предупредување при подигање', 'uploadwarning-text' => 'Изменете го описот на податотеката подолу и обидете се повторно.', 'savefile' => 'Зачувај податотека', 'uploadedimage' => 'подигнато „[[$1]]“', 'overwroteimage' => 'подигнато нова верзија на „[[$1]]“', 'uploaddisabled' => 'Забрана за подигања', +'copyuploaddisabled' => 'Подигањето од URL е оневозможено.', +'uploadfromurl-queued' => 'Вашето подигање е ставено во редица.', 'uploaddisabledtext' => 'Подигањето на податотеки е оневозможено.', 'php-uploaddisabledtext' => 'Подигањето на податотеки е оневозможено во PHP. Проверете го нагодувањето file_uploads.', @@ -1691,6 +1761,14 @@ JD # Jenoptik MGP # Pentax PICT # разни # ', +'upload-success-subj' => 'Подигањето е успешно', +'upload-success-msg' => 'Подигањето од [$2] заврши успешно. Подигнатото можете да го видите тука: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Проблем при подигањето', +'upload-failure-msg' => 'Се појави проблем со вашето подигање од [$2]: + +$1', +'upload-warning-subj' => 'Предупредување за подигањето', +'upload-warning-msg' => 'Се јави проблем при подигањето од [$2]. Можете да се вратите на [[Special:Upload/stash/$1|образецот]] за да го поправите проблемот.', 'upload-proto-error' => 'Погрешен протокол', 'upload-proto-error-text' => 'За далечинско подигање потребно е URL-то да почнува со http:// или ftp://.', @@ -1757,6 +1835,7 @@ PICT # разни 'listfiles_search_for' => 'Побарај име на податотека:', 'imgfile' => 'податотека', 'listfiles' => 'Список на податотеки', +'listfiles_thumb' => 'Минијатура', 'listfiles_date' => 'Датум', 'listfiles_name' => 'Име', 'listfiles_user' => 'Корисник', @@ -1786,7 +1865,7 @@ PICT # разни 'linkstoimage-more' => 'Повеќе од {{PLURAL:$1|една страница е поврзана|$1 страници се поврзани}} со оваа податотека. Следниов список {{PLURAL:$1|ја прикажува само првата поврзана страница|ги прикажува само првите $1 поврзани страници}} до оваа податотека. Целосен список може да добиете [[Special:WhatLinksHere/$2|тука]].', -'nolinkstoimage' => 'Нема страници кои ја користат оваа податотека.', +'nolinkstoimage' => 'Нема страници што ја користат оваа податотека.', 'morelinkstoimage' => 'Погледајте ги [[Special:WhatLinksHere/$1|останатите врски]] кон оваа податотека.', 'redirectstofile' => '{{PLURAL:$1|Следната податотека пренасочува|$1 Следните податотеки пренасочуваат}} кон оваа податотека:', 'duplicatesoffile' => '{{PLURAL:$1|Следната податотека е дупликат|$1 Следните податотеки се дупликати}} на оваа податотека ([[Special:FileDuplicateSearch/$2|повеќе информации]]):', @@ -1797,10 +1876,11 @@ PICT # разни Описот од нејзината [$2 страница за опис] е прикажан подолу.', 'filepage-nofile' => 'Не постои податотека со ова име.', 'filepage-nofile-link' => 'Нема податотека со ова име, може да ја [$1 подигнете].', -'uploadnewversion-linktext' => 'Подигни нова верзија на оваа податотека', +'uploadnewversion-linktext' => 'Подигни нова верзија на податотекава', 'shared-repo-from' => 'од $1', 'shared-repo' => 'заедничко складиште', 'shared-repo-name-wikimediacommons' => 'Заедничката Ризница', +'filepage.css' => '/* Тука поставените каскадни стилски страници (CSS) се вклучени во страницата за опис на податотеката, како и на клиентските викија */', # File reversion 'filerevert' => 'Врати $1', @@ -1874,8 +1954,8 @@ PICT # разни 'statistics-edits' => 'Број на уредувања од започнувањето на {{SITENAME}}', 'statistics-edits-average' => 'Просечен број на уредувања по страница', 'statistics-views-total' => 'Вкупно посети', +'statistics-views-total-desc' => 'Не се вклучени прегледувања на непостоечки и специјални страници', 'statistics-views-peredit' => 'Посети по уредување', -'statistics-jobqueue' => 'Должина на [http://www.mediawiki.org/wiki/Manual:Job_queue редица на чекање]', 'statistics-users' => 'Регистрирани [[Special:ListUsers|корисници]]', 'statistics-users-active' => 'Активни корисници', 'statistics-users-active-desc' => 'Корисници кои имаат извршено некое дејство {{PLURAL:$1|претходниот ден|во претходните $1 дена}}', @@ -1890,7 +1970,7 @@ PICT # разни 'doubleredirects' => 'Двојни пренасочувања', 'doubleredirectstext' => 'Оваа страница ги прикажува пренасочувачките страници до други пренасочувачки страници. Секој ред содржи врски кон првото и второто пренасочување, како и целта на второто пренасочување, кое обично ја посочува вистинската целна страница кон која првото пренасочување би требало да насочува. -Пречкртаните ставки треба да се разрешат.', +Пречкртаните ставки треба да се разрешат.', 'double-redirect-fixed-move' => 'Страницата [[$1]] е преместена. Сега пренасочува кон [[$2]]', 'double-redirect-fixer' => 'Исправувач на пренасочувања', @@ -1914,6 +1994,8 @@ PICT # разни 'nmembers' => '$1 {{PLURAL:$1|член|члена}}', 'nrevisions' => '$1 {{PLURAL:$1|измена|измени}}', 'nviews' => '$1 {{PLURAL:$1|преглед|прегледи}}', +'nimagelinks' => 'Се користи на $1 {{PLURAL:$1|страница|страници}}', +'ntransclusions' => 'се користи на $1 {{PLURAL:$1|страница|страници}}', 'specialpage-empty' => 'Нема резултати од пребарувањето за овој извештај.', 'lonelypages' => 'Осамени страници', 'lonelypagestext' => 'Следните страници не се поврзани од или трансклудирани во други страници на {{SITENAME}}.', @@ -2072,34 +2154,40 @@ PICT # разни 'listgrouprights-removegroup-self-all' => 'Може да ги избрише сите групи од сопствената корисничка сметка', # E-mail user -'mailnologin' => 'Нема адреса за праќање', -'mailnologintext' => 'Мора да бидете [[Special:UserLogin|најавени]] и да имате важечка е-поштенска адреса во вашите [[Special:Preferences|нагодувања]] за да може да праќате е-пошта до други корисници.', -'emailuser' => 'Испрати е-пошта до овој корисник', -'emailpage' => 'Е-пошта', -'emailpagetext' => 'Можете да го користите следниов образец за праќање на е-поштенска порака до овој корисник. +'mailnologin' => 'Нема адреса за праќање', +'mailnologintext' => 'Мора да бидете [[Special:UserLogin|најавени]] и да имате важечка е-поштенска адреса во вашите [[Special:Preferences|нагодувања]] за да може да праќате е-пошта до други корисници.', +'emailuser' => 'Испрати е-пошта до овој корисник', +'emailpage' => 'Е-пошта', +'emailpagetext' => 'Можете да го користите следниов образец за праќање на е-поштенска порака до овој корисник. Е-поштенската адреса која ја имате наведено во [[Special:Preferences|вашите нагодувања]] ќе се прикаже во „Од“ полето на е-пораката, со што примачот ќе може да ви одговори директно вам.', -'usermailererror' => 'Настана следната грешка при праќање е-пошта:', -'defemailsubject' => '{{SITENAME}} е-пошта', -'noemailtitle' => 'Нема е-поштенска адреса', -'noemailtext' => 'Овој корисник нема наведено важечка е-поштенска адреса.', -'nowikiemailtitle' => 'Не е допуштено користење на е-пошта', -'nowikiemailtext' => 'Овој корисник избрал да не прима е-пошта од други корисници.', -'email-legend' => 'Праќање на е-пошта до друг {{SITENAME}} корисник', -'emailfrom' => 'Од:', -'emailto' => 'До:', -'emailsubject' => 'Наслов:', -'emailmessage' => 'Порака:', -'emailsend' => 'Прати', -'emailccme' => 'Испрати ми копија на пораката по е-пошта.', -'emailccsubject' => 'Копија од вашата порака до $1: $2', -'emailsent' => 'Е-поштата е пратена', -'emailsenttext' => 'Вашата е-пошта е пратена.', -'emailuserfooter' => 'Оваа е-порака беше пратена од $1 до $2 со помош на функцијата Е-пошта на {{SITENAME}}.', +'usermailererror' => 'Настана следната грешка при праќање е-пошта:', +'defemailsubject' => '{{SITENAME}} е-пошта', +'usermaildisabled' => 'Корисничката е-пошта е оневозможена', +'usermaildisabledtext' => 'Не можете да испратите е-порака до дрги корисници на ова вики', +'noemailtitle' => 'Нема е-поштенска адреса', +'noemailtext' => 'Овој корисник нема наведено важечка е-поштенска адреса.', +'nowikiemailtitle' => 'Не е допуштено користење на е-пошта', +'nowikiemailtext' => 'Овој корисник избрал да не прима е-пошта од други корисници.', +'email-legend' => 'Праќање на е-пошта до друг {{SITENAME}} корисник', +'emailfrom' => 'Од:', +'emailto' => 'До:', +'emailsubject' => 'Наслов:', +'emailmessage' => 'Порака:', +'emailsend' => 'Прати', +'emailccme' => 'Испрати ми копија на пораката по е-пошта.', +'emailccsubject' => 'Копија од вашата порака до $1: $2', +'emailsent' => 'Е-поштата е пратена', +'emailsenttext' => 'Вашата е-пошта е пратена.', +'emailuserfooter' => 'Оваа е-порака беше пратена од $1 до $2 со помош на функцијата Е-пошта на {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Оставете системска порака.', +'usermessage-editor' => 'Системски гласник', # Watchlist 'watchlist' => 'мои набљудувања', 'mywatchlist' => 'мои набљудувања', -'watchlistfor' => "(за '''$1''')", +'watchlistfor2' => 'За $1 $2', 'nowatchlist' => 'Немате ништо во списокот на набљудувања.', 'watchlistanontext' => 'Се бара $1 за да можете да го прегледувате и уредувате списокот на набљудувања.', 'watchnologin' => 'Не сте најавени', @@ -2148,7 +2236,7 @@ PICT # разни $NEWPAGE -Опис на уредувачот: $PAGESUMMARY $PAGEMINOREDIT +Опис од уредувачот: $PAGESUMMARY $PAGEMINOREDIT Конакт на уредувачот: е-пошта: $PAGEEDITOR_EMAIL @@ -2160,7 +2248,10 @@ $NEWPAGE Системот за известување на {{SITENAME}} -- -За да ги промените нагодувањата на списокот на набљудувања, посетете ја страницата +Ако сакате да ги измените нагодувањата за известување по е-пошта, посетете ја страницата +{{fullurl:{{#special:Preferences}}}} + +Доколку сакате да ги измените нагодувањата на списокот на набљудувања, посетете ја страницата {{fullurl:{{#special:Watchlist}}/edit}} За да ја избришете страницата од списокот на набљудувања, посетете ја страницата @@ -2220,7 +2311,10 @@ $UNWATCHURL 'revertpage' => 'Отстрането уредувањето на [[Special:Contributions/$2|$2]] ([[User talk:$2|разговор]]), вратено на последната верзија на [[User:$1|$1]]', 'revertpage-nouser' => 'Вратени уредувања на (избришано корисничко име) на последната ревизија од [[User:$1|$1]]', 'rollback-success' => 'Откажани уредувањата на $1; вратено на последната верзија на $2.', -'sessionfailure' => 'Има проблем со вашата сесија; + +# Edit tokens +'sessionfailure-title' => 'Сесијата не успеа', +'sessionfailure' => 'Има проблем со вашата сесија; оваа дејство е откажано како превентива против преземање сесии. Притиснете го копчето „назад“ и повторно вчитајте ја страницата од која дојдовте и обидете се повторно.', @@ -2358,18 +2452,22 @@ $1', 'month' => 'Од месец (и порано):', 'year' => 'Од година (и порано):', -'sp-contributions-newbies' => 'Прикажи придонеси само на нови корисници', -'sp-contributions-newbies-sub' => 'За нови кориснички сметки', -'sp-contributions-newbies-title' => 'Придонеси на нови корисници', -'sp-contributions-blocklog' => 'Дневник на блокирања', -'sp-contributions-deleted' => 'избришани кориснички придонеси', -'sp-contributions-logs' => 'дневници', -'sp-contributions-talk' => 'разговор', -'sp-contributions-userrights' => 'раководење со кориснички права', -'sp-contributions-blocked-notice' => 'Овој корисник е блокиран. Последните ставки во дневникот на блокирања, за ваша информација се дадени подолу:', -'sp-contributions-search' => 'Пребарување на придонеси', -'sp-contributions-username' => 'IP-адреса или корисничко име:', -'sp-contributions-submit' => 'Пребарај', +'sp-contributions-newbies' => 'Прикажи придонеси само на нови корисници', +'sp-contributions-newbies-sub' => 'За нови кориснички сметки', +'sp-contributions-newbies-title' => 'Придонеси на нови корисници', +'sp-contributions-blocklog' => 'Дневник на блокирања', +'sp-contributions-deleted' => 'избришани кориснички придонеси', +'sp-contributions-uploads' => 'подигања', +'sp-contributions-logs' => 'дневници', +'sp-contributions-talk' => 'разговор', +'sp-contributions-userrights' => 'раководење со кориснички права', +'sp-contributions-blocked-notice' => 'Овој корисник е блокиран. Последните ставки во дневникот на блокирања, за ваша информација се дадени подолу:', +'sp-contributions-blocked-notice-anon' => 'Оваа IP-адреса е моментално блокирана. +Подолу е наведен најновиот дневнички запис на блокирање:', +'sp-contributions-search' => 'Пребарување на придонеси', +'sp-contributions-username' => 'IP-адреса или корисничко име:', +'sp-contributions-toponly' => 'Прикажувај само последни ревизии', +'sp-contributions-submit' => 'Пребарај', # What links here 'whatlinkshere' => 'Што води овде', @@ -2431,7 +2529,6 @@ $1', 'ipb-edit-dropdown' => 'Наведи причина за блокирање', 'ipb-unblock-addr' => 'Одблокирај го $1', 'ipb-unblock' => 'Одблокирај корисник или IP-адреса', -'ipb-blocklist-addr' => 'Активни блокирања за $1', 'ipb-blocklist' => 'Преглед на активни блокирања', 'ipb-blocklist-contribs' => 'Придонеси на $1', 'unblockip' => 'Деблокирај корисник', @@ -2469,8 +2566,8 @@ $1', Дневникот на блокирања, за ваша информација е прикажан подолу:', 'blocklog-showsuppresslog' => 'Овој корисник бил претходно блокиран и сокриен. Дневникот на ограничувања, за ваша информација е прикажан подолу:', -'blocklogentry' => 'блокирано [[$1]] со рок на истекување до $2, $3', -'reblock-logentry' => 'променети нагодувања за блокирање на [[$1]] со рок на истекување од $2 $3', +'blocklogentry' => 'го блокираше [[$1]] со рок на истекување до $2, $3', +'reblock-logentry' => 'ги промени нагодувањата за блокирање на [[$1]] со рок на истекување од $2 $3', 'blocklogtext' => 'Ова е дневник на блокирање и одблокирање на кориснци. Автоматски блокираните IP-адреси не се наведени. Видете го [[Special:IPBlockList|списокот на блокирани IP-адреси]].', @@ -2508,6 +2605,8 @@ $1 е веќе блокиран. Дали сакате да направите Не можете да создадете корисничка сметка.', 'cant-block-while-blocked' => 'Не можете да блокирате други корисници додека и вие самите сте блокирани.', 'cant-see-hidden-user' => 'Корисникот кој се обидувате да го блокирате е веќе блокиран и сокриен. Бидејќи вие немате права за сокривање на корисник, не можете да ги видите или уредувате корисничките блокирања.', +'ipbblocked' => 'Не можете да блокирате или одблокирате други корисници бидејќи и самите сте блокирани', +'ipbnounblockself' => 'Не е дозволено да се одблокирате самите себеси', # Developer tools 'lockdb' => 'Заклучи база на податоци', @@ -2542,6 +2641,17 @@ $1 е веќе блокиран. Дали сакате да направите Имајте предвид дека страницата '''НЕМА''' да биде преместена ако веќе постои страница со новиот наслов, освен ако е празна или ако е пренасочување и нема историја на минати уредувања. Тоа значи дека можете да ја преименувате страницата како што била претходно доколку сте направиле грешка без да ја прекриете постоечката страница. +'''ПРЕДУПРЕДУВАЊЕ!''' +Ова може да биде драстична и неочекувана промена за популарна страница; +осигурајте се дека сте ги разбрале последиците од ова пред да продолжите.", +'movepagetext-noredirectfixer' => "Со користењето на овој образец можете да преименувате страница, преместувајќи ја целата нејзина историја под ново име. +Стариот наслов ќе стане страница за пренасочување кон новиот наслов. +Автоматски можете да ги подновите пренасочувањата кои покажуваат кон првобитниот наслов. +Не заборавајте да проверите [[Special:DoubleRedirects|двојни]] и [[Special:BrokenRedirects|прекинати пренасочувања]]. +На вас е одговорноста да се осигурате дека врските ќе продолжат да насочуваат таму за каде се предвидени. + +Имајте предвид дека страницата '''НЕМА''' да биде преместена ако веќе постои страница со новиот наслов, освен ако е празна или ако е пренасочување и нема историја на минати уредувања. Тоа значи дека можете да ја преименувате страницата како што била претходно доколку сте направиле грешка без да ја прекриете постоечката страница. + '''ПРЕДУПРЕДУВАЊЕ!''' Ова може да биде драстична и неочекувана промена за популарна страница; осигурајте се дека сте ги разбрале последиците од ова пред да продолжите.", @@ -2602,6 +2712,7 @@ $1 е веќе блокиран. Дали сакате да направите 'immobile-source-page' => 'Оваа страница не може да се преместува.', 'immobile-target-page' => 'Не може да се премести под бараниот наслов.', 'imagenocrossnamespace' => 'Не може да се премести податотека во неподатотечен именски простор', +'nonfile-cannot-move-to-file' => 'Не можам да преместам неподатотека во податотечен именски простор', 'imagetypemismatch' => 'Новата наставка на податотеката не соодветствува на нејзиниот тип', 'imageinvalidfilename' => 'Целниот наслов на податотеката е невалиден', 'fix-double-redirects' => 'Подновете ги сите пренасочувања што водат кон првобитниот наслов', @@ -2669,7 +2780,7 @@ $1 е веќе блокиран. Дали сакате да направите 'importinterwiki' => 'Меѓувики увоз', 'import-interwiki-text' => 'Избери вики и наслов на страница за увоз. Датумите и имињата на уредниците ќе бидат зачувани. -Сите постапки при меѓувики увозот се заведуваат во [[Special:Log/import|дневникот на увезувања]].', +Сите постапки при увозот од другото вики се заведуваат во [[Special:Log/import|дневникот на увезувања]].', 'import-interwiki-source' => 'Извор вики/страница:', 'import-interwiki-history' => 'Копирај ги сите постари верзии за оваа страница', 'import-interwiki-templates' => 'Вклучи ги сите шаблони', @@ -2682,6 +2793,7 @@ $1 е веќе блокиран. Дали сакате да направите 'importstart' => 'Увоз на страници...', 'import-revision-count' => '$1 {{PLURAL:$1|ревизија|ревизии}}', 'importnopages' => 'Нема страници за увоз.', +'imported-log-entries' => '{{PLURAL:$1|Увезен е $1 дневнички запис|Увезени се $1 дневнички записи}}.', 'importfailed' => 'Неуспешно внесување: $1', 'importunknownsource' => 'Непознат тип за внесување', 'importcantopen' => 'Не може да се отвори увезената податотека', @@ -2703,7 +2815,7 @@ $1 е веќе блокиран. Дали сакате да направите 'xml-error-string' => '$1 во ред $2, колона $3 (бајт $4): $5', 'import-upload' => 'Подигни XML податоци', 'import-token-mismatch' => 'Губење на сесиските податоци. Обидете се повторно.', -'import-invalid-interwiki' => 'Не може да се увезува од специфицираното вики.', +'import-invalid-interwiki' => 'Не можам да увезам од наведеното вики.', # Import log 'importlogpage' => 'Дневник на увезувања', @@ -2778,6 +2890,8 @@ $1 е веќе блокиран. Дали сакате да направите 'tooltip-rollback' => '„Врати“ ги поништува последните уредувања на оваа страница со еден клик до уредувањата на претпоследниот придонесувач', 'tooltip-undo' => '„Откажи“ го поништува ова уредување и отвора прозорец за уредување. Дозволува додавање на причина во описот', +'tooltip-preferences-save' => 'Зачувај', +'tooltip-summary' => 'Внесете кратко резиме', # Stylesheets 'common.css' => '/* Тука поставениот CSS ќе се применува врз сите рува */', @@ -2911,14 +3025,17 @@ $1', 'thumbsize' => 'Големина на минијатурата:', 'widthheight' => '$1 × $2', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|страница|страници}}', -'file-info' => '(големина: $1, MIME-тип: $2)', -'file-info-size' => '($1 × $2 пиксели, големина: $3, MIME-тип: $4)', +'file-info' => 'големина: $1, MIME-тип: $2', +'file-info-size' => '$1 × $2 пиксели, големина: $3, MIME-тип: $4', 'file-nohires' => 'Не е достапна поголема резолуција.', -'svg-long-desc' => '(SVG податотека, номинално $1 × $2 пиксели, големина: $3)', +'svg-long-desc' => 'SVG податотека, номинално $1 × $2 пиксели, големина: $3', 'show-big-image' => 'Вистинска големина', 'show-big-image-thumb' => 'Големина на овој приказ: $1 × $2 пиксели', 'file-info-gif-looped' => 'кружно', 'file-info-gif-frames' => '$1 {{PLURAL:$1|кадар|кадри}}', +'file-info-png-looped' => 'кружно', +'file-info-png-repeat' => 'пуштено {{PLURAL:$1|еднаш|$1 пати}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|кадар|кадри}}', # Special:NewFiles 'newimages' => 'Галерија на нови податотеки', @@ -3044,7 +3161,7 @@ Variants for Chinese language 'exif-pixelydimension' => 'Ширина на сликата', 'exif-pixelxdimension' => 'Висина на сликата', 'exif-makernote' => 'Забелешки на произведувачот', -'exif-usercomment' => 'Коментар на корисникот', +'exif-usercomment' => 'Кориснички коментари', 'exif-relatedsoundfile' => 'Поврзана аудиоснимка', 'exif-datetimeoriginal' => 'Датум и време на сликање', 'exif-datetimedigitized' => 'Датум и време на дигитализација', @@ -3052,7 +3169,7 @@ Variants for Chinese language 'exif-subsectimeoriginal' => 'Дел од секундата во кој е фотографирано', 'exif-subsectimedigitized' => 'Дел од секундата во кој е дигитализирано', 'exif-exposuretime' => 'Експозиција', -'exif-exposuretime-format' => '$1 сек. ($2)', +'exif-exposuretime-format' => '$1 сек ($2)', 'exif-fnumber' => 'F-бр.', 'exif-fnumber-format' => 'f/$1', 'exif-exposureprogram' => 'Режим на експозиција', @@ -3126,6 +3243,7 @@ Variants for Chinese language 'exif-gpsareainformation' => 'Назив на GPS-подрачје', 'exif-gpsdatestamp' => 'GPS-датум', 'exif-gpsdifferential' => 'Диференцијална исправка на GPS', +'exif-objectname' => 'Краток наслов', # EXIF attributes 'exif-compression-1' => 'Ненабиена', @@ -3301,30 +3419,30 @@ Variants for Chinese language 'limitall' => 'сите', # E-mail address confirmation -'confirmemail' => 'Потврда на е-поштенска адреса', -'confirmemail_noemail' => 'Немате наведено важечка е-поштенска адреса во вашите [[Special:Preferences|нагодувања]].', -'confirmemail_text' => '{{SITENAME}} бара да ја потврдите вашата е-поштенска адреса пред да ги користите можностите за е-пошта. +'confirmemail' => 'Потврда на е-поштенска адреса', +'confirmemail_noemail' => 'Немате наведено важечка е-поштенска адреса во вашите [[Special:Preferences|нагодувања]].', +'confirmemail_text' => '{{SITENAME}} бара да ја потврдите вашата е-поштенска адреса пред да ги користите можностите за е-пошта. Притиснете на копчето подолу за да пратите потврдувачка е-порака на вашата адреса. Е-пораката ќе вклучи врска којашто содржи код; отворете ја врската во вашиот прелистувач за да потврдите дека вашата е-поштенска адреса е важечка.', -'confirmemail_pending' => 'Писмото со потврден код е веќе испратено. Ако сметката ја создадовте сега, тогаш веројатно ќе треба да почекате некоја минута за да пристигне, пред да побарате нов код.', -'confirmemail_send' => 'Испрати потврден код', -'confirmemail_sent' => 'Потврдната порака е испратена.', -'confirmemail_oncreate' => 'Испратен е потврден код на вашата е-поштенска адреса. +'confirmemail_pending' => 'Писмото со потврден код е веќе испратено. Ако сметката ја создадовте сега, тогаш веројатно ќе треба да почекате некоја минута за да пристигне, пред да побарате нов код.', +'confirmemail_send' => 'Испрати потврден код', +'confirmemail_sent' => 'Потврдната порака е испратена.', +'confirmemail_oncreate' => 'Испратен е потврден код на вашата е-поштенска адреса. Овој код не е потребен за најавување, но ќе треба да го внесете пред да ги вклучите е-поштенските можности во викито.', -'confirmemail_sendfailed' => '{{SITENAME}} не може да ви прати потврдна е-порака. +'confirmemail_sendfailed' => '{{SITENAME}} не може да ви прати потврдна е-порака. Проверете дали е-поштенската адреса е правилно запишана. Вратена е следнава грешка: $1', -'confirmemail_invalid' => 'Неточен потврден код. +'confirmemail_invalid' => 'Неточен потврден код. Кодот можеби е истечен.', -'confirmemail_needlogin' => 'Морате да $1 за да ја потврдите вашата е-поштенска адреса.', -'confirmemail_success' => 'Вашата е-поштенска адреса е потврдена. +'confirmemail_needlogin' => 'Морате да $1 за да ја потврдите вашата е-поштенска адреса.', +'confirmemail_success' => 'Вашата е-поштенска адреса е потврдена. Сега можете да се [[Special:UserLogin|најавите]]. Ви посакуваме пријатни мигови на викито!', -'confirmemail_loggedin' => 'Вашата е-поштенска адреса сега е потврдена.', -'confirmemail_error' => 'Нешто тргна наопаку при снимањето на вашата потврда.', -'confirmemail_subject' => '{{SITENAME}} — Потврда на е-поштенска адреса', -'confirmemail_body' => 'Некој, веројатно Вие, од IP-адресата $1, +'confirmemail_loggedin' => 'Вашата е-поштенска адреса сега е потврдена.', +'confirmemail_error' => 'Нешто тргна наопаку при снимањето на вашата потврда.', +'confirmemail_subject' => '{{SITENAME}} — Потврда на е-поштенска адреса', +'confirmemail_body' => 'Некој, веројатно Вие, од IP-адресата $1, на {{SITENAME}} ја регистрирал сметката „$2“ со оваа е-поштенска адреса . За да потврдите дека оваа сметка навистина Ви припаѓа Вам и да ја активирате @@ -3338,12 +3456,40 @@ $3 $5 Овој потврден код ќе истече на $4.', -'confirmemail_invalidated' => 'Потврдата на е-поштенската адреса е откажана', -'invalidateemail' => 'Откажување на потврда на е-пошта', +'confirmemail_body_changed' => 'Некој, веројатно Вие, од IP-адреса $1, +на {{SITENAME}} ја има променето е-поштенската адреса на сметката „$2“, наведувајќи ја оваа адреса како нова. + +За да потврдите дека оваа сметка навистина Ви припаѓа Вам и повторно да ги вклучите +е-поштенските функции на {{SITENAME}}, отворете ја следнава врска во Вашиот прелистувач: + +$3 + +Ако оваа сметка *не* Ви припаѓа Вам, проследете ја оваа врска +за да ја откажете потврдата на адресата: + +$5 + +Овој потврден код истекува на $4.', +'confirmemail_body_set' => 'Некој, веројатно Вие, од IP-адресата $1, +на {{SITENAME}} ја внел оваа е-поштенска адреса на сметката „$2“. + +За да потврдите дека оваа адреса навистина Ви припаѓа Вам и за да ги вклучите +можностите за е-пошта на {{SITENAME}}, отворете ја следнава врска во прелистувачот: + +$3 + +Ако сметката *не* е Ваша, проследете ја следнава врска +за да ја откажете потврдата: + +$5 + +Овој потврден код истекува во $4.', +'confirmemail_invalidated' => 'Потврдата на е-поштенската адреса е откажана', +'invalidateemail' => 'Откажување на потврда на е-пошта', # Scary transclusion -'scarytranscludedisabled' => '[Интервики трансклудирање е оневозможено]', -'scarytranscludefailed' => '[Неуспешно превземање на шаблонот за $1]', +'scarytranscludedisabled' => '[Превметнувањето помеѓу викијата е оневозможено]', +'scarytranscludefailed' => '[Преземањето на шаблонот за $1 не успеа]', 'scarytranscludetoolong' => '[Премногу долго URL]', # Trackbacks @@ -3384,6 +3530,7 @@ $1', 'table_pager_first' => 'Прва страница', 'table_pager_last' => 'Последна страница', 'table_pager_limit' => 'Прикажи $1 записи по страница', +'table_pager_limit_label' => 'Ставки по страница:', 'table_pager_limit_submit' => 'Оди', 'table_pager_empty' => 'Нема резултати', @@ -3400,7 +3547,7 @@ $1', 'size-gigabytes' => '$1 ГБ', # Live preview -'livepreview-loading' => 'Се вчитува…', +'livepreview-loading' => 'Вчитувам...', 'livepreview-ready' => 'Се вчитува… готово!', 'livepreview-failed' => 'Неуспешно прегледување! Пробајте со нормален преглед.', @@ -3505,6 +3652,7 @@ $1', 'version-specialpages' => 'Специјални страници', 'version-parserhooks' => 'Парсерски куки', 'version-variables' => 'Променливи', +'version-skins' => 'Рува', 'version-other' => 'Друго', 'version-mediahandlers' => 'Ракувачи со мултимедијални содржини', 'version-hooks' => 'Куки', @@ -3517,6 +3665,13 @@ $1', 'version-version' => '(Верзија $1)', 'version-svn-revision' => '(рев. $2)', 'version-license' => 'Лиценца', +'version-poweredby-credits' => "Ова вики работи на '''[http://www.mediawiki.org/ МедијаВики]''', авторски права © 2001-$1 $2.", +'version-poweredby-others' => 'други', +'version-license-info' => 'МедијаВики е слободна програмска опрема; можете да ја редистрибуирате и/или менувате под условите на ГНУ-овата општа јавна лиценца на Фондацијата за слободна програмска опрема; или верзија 2 на Лиценцата, или некоја понова верзија (по ваш избор). + +МедијаВики се нуди со надеж дека ќе биде од корист, но БЕЗ БИЛО КАКВА ГАРАНЦИЈА; дури и без подразбраната гаранција за ПРОДАЖНА ВРЕДНОСТ или ПОГОДНОСТ ЗА ДАДЕНА ЦЕЛ. За повеќе информации, погледајте ја ГНУ-овата општа јавна лиценца. + +Заедно со програмов треба да имате добиено [{{SERVER}}{{SCRIPTPATH}}/COPYING примерок од ГНУ-овата општа јавна лиценца]; ако немате добиено примерок, пишете на Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA или [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html прочитајте ја тука].', 'version-software' => 'Инсталирана програмска опрема', 'version-software-product' => 'Производ', 'version-software-version' => 'Верзија', @@ -3547,7 +3702,7 @@ $1', 'specialpages-note' => '---- * Нормални специјални страници. * Специјални страници со ограничен пристап.', -'specialpages-group-maintenance' => 'Извештаи за одржување на википедија', +'specialpages-group-maintenance' => 'Извештаи за одржување', 'specialpages-group-other' => 'Други специјални страници', 'specialpages-group-login' => 'Најава / регистрација', 'specialpages-group-changes' => 'Скорешни промени и дневници', @@ -3586,6 +3741,15 @@ $1', 'tags-edit' => 'уреди', 'tags-hitcount' => '$1 {{PLURAL:$1|промена|промени}}', +# Special:ComparePages +'comparepages' => 'Спореди страници', +'compare-selector' => 'Споредба на ревизии на страници', +'compare-page1' => 'Страница 1', +'compare-page2' => 'Страница 2', +'compare-rev1' => 'Ревизија 1', +'compare-rev2' => 'Ревизија 2', +'compare-submit' => 'Спореди', + # Database error messages 'dberr-header' => 'Ова вики не функционира како што треба', 'dberr-problems' => 'Жалиме! Ова мрежно место се соочува со технички потешкотии.', @@ -3602,8 +3766,13 @@ $1', 'htmlform-float-invalid' => 'Вредноста која ја наведовте не е број.', 'htmlform-int-toolow' => 'Вредноста која ја наведовте е под минимумот од $1', 'htmlform-int-toohigh' => 'Вредноста која ја наведовте е над максимумот од $1', +'htmlform-required' => 'Се бара оваа вредност', 'htmlform-submit' => 'Зачувај', 'htmlform-reset' => 'Откажи промени', 'htmlform-selectorother-other' => 'Друго', +# SQLite database support +'sqlite-has-fts' => '$1 со поддршка за пребарување по цели текстови', +'sqlite-no-fts' => '$1 без поддршка за пребарување по цели текстови', + ); diff --git a/languages/messages/MessagesMl.php b/languages/messages/MessagesMl.php index 6b03b6ba..35da8ff8 100644 --- a/languages/messages/MessagesMl.php +++ b/languages/messages/MessagesMl.php @@ -44,11 +44,12 @@ $namespaceNames = array( NS_TEMPLATE_TALK => 'ഫലകത്തിന്റെ_സംവാദം', NS_HELP => 'സഹായം', NS_HELP_TALK => 'സഹായത്തിന്റെ_സംവാദം', - NS_CATEGORY => 'വർഗ്ഗം', - NS_CATEGORY_TALK => 'വർഗ്ഗത്തിന്റെ_സംവാദം', + NS_CATEGORY => 'വര്‍ഗ്ഗം', + NS_CATEGORY_TALK => 'വര്‍ഗ്ഗത്തിന്റെ_സംവാദം', ); $namespaceAliases = array( + 'സം' => NS_TALK, 'അംഗം' => NS_USER, 'ഉ' => NS_USER, 'അംഗങ്ങളുടെ സംവാദം' => NS_USER_TALK, @@ -57,10 +58,17 @@ $namespaceAliases = array( 'ചിസം' => NS_FILE_TALK, 'ചിത്രം' => NS_FILE, 'ചിത്രത്തിന്റെ_സംവാദം' => NS_FILE_TALK, + 'പ്ര' => NS_FILE, + 'പ്രസം' => NS_FILE_TALK, 'ഫ' => NS_TEMPLATE, 'ഫസം' => NS_TEMPLATE_TALK, 'വി' => NS_CATEGORY, + 'വ' => NS_CATEGORY, 'വിസം' => NS_CATEGORY_TALK, + 'വസം' => NS_CATEGORY_TALK, + 'മീ' => NS_MEDIAWIKI, + 'മീസം' => NS_MEDIAWIKI_TALK, + 'പ്രത്യേ' => NS_SPECIAL, 'വിഭാഗം' => NS_CATEGORY, 'വിഭാഗത്തിന്റെ_സംവാദം' => NS_CATEGORY_TALK, 'വർഗ്ഗം' => NS_CATEGORY, @@ -72,7 +80,7 @@ $namespaceAliases = array( $specialPageAliases = array( 'DoubleRedirects' => array( 'ഇരട്ടത്തിരിച്ചുവിടലുകൾ' ), 'BrokenRedirects' => array( 'പൊട്ടിയതിരിച്ചുവിടലുകൾ' ), - 'Disambiguations' => array( 'നാനാർത്ഥങ്ങൾ' ), + 'Disambiguations' => array( 'വിവക്ഷിതങ്ങൾ' ), 'Userlogin' => array( 'പ്രവേശനം' ), 'Userlogout' => array( 'പുറത്തുകടക്കൽ' ), 'CreateAccount' => array( 'അംഗത്വമെടുക്കൽ' ), @@ -80,47 +88,49 @@ $specialPageAliases = array( 'Watchlist' => array( 'ശ്രദ്ധിക്കുന്നവ' ), 'Recentchanges' => array( 'സമീപകാലമാറ്റങ്ങൾ' ), 'Upload' => array( 'അപ്‌ലോഡ്' ), - 'Listfiles' => array( 'പ്രമാണങ്ങളുടെ പട്ടിക', 'ചിത്രങ്ങളുടെ പട്ടിക' ), - 'Newimages' => array( 'പുതിയ പ്രമാണങ്ങൾ', 'പുതിയ ചിത്രങ്ങൾ' ), - 'Listusers' => array( 'ഉപയോക്താക്കളുടെ പട്ടിക' ), - 'Listgrouprights' => array( 'സമൂഹത്തിന്റെ അവകാശങ്ങളുടെ പട്ടിക' ), + 'UploadStash' => array( 'അപ്‌ലോഡ്_മറയ്ക്കൽ' ), + 'Listfiles' => array( 'പ്രമാണങ്ങളുടെ_പട്ടിക', 'ചിത്രങ്ങളുടെ_പട്ടിക' ), + 'Newimages' => array( 'പുതിയ_പ്രമാണങ്ങൾ', 'പുതിയ_ചിത്രങ്ങൾ' ), + 'Listusers' => array( 'ഉപയോക്താക്കളുടെ_പട്ടിക' ), + 'Listgrouprights' => array( 'സമൂഹത്തിന്റെ_അവകാശങ്ങളുടെ_പട്ടിക' ), 'Statistics' => array( 'സ്ഥിതിവിവരം' ), - 'Randompage' => array( 'ക്രമരഹിതമായി', 'താളുകൾ ക്രമരഹിതമായി' ), - 'Lonelypages' => array( 'അനാഥ താളുകൾ' ), - 'Uncategorizedpages' => array( 'വർഗ്ഗീകരിക്കാത്ത താളുകൾ' ), - 'Uncategorizedcategories' => array( 'വർഗ്ഗീകരിക്കാത്ത വർഗ്ഗങ്ങൾ' ), - 'Uncategorizedimages' => array( 'വർഗ്ഗീകരിക്കാത്ത പ്രമാണങ്ങൾ' ), - 'Uncategorizedtemplates' => array( 'വർഗ്ഗീകരിക്കാത്ത ഫലകങ്ങൾ' ), - 'Unusedcategories' => array( 'ഉപയോഗിക്കാത്ത വർഗ്ഗങ്ങൾ' ), - 'Unusedimages' => array( 'ഉപയോഗിക്കാത്ത പ്രമാണങ്ങൾ' ), - 'Wantedpages' => array( 'ആവശ്യമുള്ള താളുകൾ', 'പൊട്ടിയ കണ്ണികൾ' ), - 'Wantedcategories' => array( 'ആവശ്യമുള്ള വർഗ്ഗങ്ങൾ' ), - 'Wantedfiles' => array( 'ആവശ്യമുള്ള പ്രമാണങ്ങൾ' ), - 'Wantedtemplates' => array( 'ആവശ്യമുള്ള ഫലകങ്ങൾ' ), - 'Mostlinked' => array( 'കൂടുതൽ കണ്ണികളുള്ള താളുകൾ', 'കൂടുതൽ കണ്ണികളുള്ളവ' ), - 'Mostlinkedcategories' => array( 'കൂടുതൽ കണ്ണികളുള്ള വർഗ്ഗങ്ങൾ', 'കൂടുതൽ ഉപയോഗിച്ചിട്ടുള്ള വർഗ്ഗങ്ങൾ' ), - 'Mostlinkedtemplates' => array( 'കൂടുതൽ കണ്ണികളുള്ള ഫലകങ്ങൾ', 'കൂടുതൽ ഉപയോഗിച്ചിട്ടുള്ള ഫലകങ്ങൾ' ), - 'Mostimages' => array( 'കൂടുതൽ കണ്ണികളുള്ള പ്രമാണങ്ങൾ', 'കൂടുതൽ പ്രമാണങ്ങൾ', 'കൂടുതൽ ചിത്രങ്ങൾ' ), - 'Mostcategories' => array( 'കൂടുതൽ വർഗ്ഗങ്ങൾ' ), - 'Mostrevisions' => array( 'കൂടുതൽ പുനരവലോകനങ്ങൾ' ), - 'Fewestrevisions' => array( 'കുറഞ്ഞ പുനരവലോകനങ്ങൾ' ), - 'Shortpages' => array( 'ചെറിയ താളുകൾ' ), - 'Longpages' => array( 'വലിയ താളുകൾ' ), - 'Newpages' => array( 'പുതിയ താളുകൾ' ), - 'Ancientpages' => array( 'പുരാതന താളുകൾ' ), - 'Deadendpages' => array( 'അന്ത്യസ്ഥാനത്തുള്ള താളുകൾ' ), - 'Protectedpages' => array( 'സംരക്ഷിത താളുകൾ' ), - 'Protectedtitles' => array( 'സംരക്ഷിത ശീർഷകങ്ങൾ' ), + 'Randompage' => array( 'ക്രമരഹിതം', 'ക്രമരഹിതതാൾ' ), + 'Lonelypages' => array( 'അനാഥ_താളുകൾ' ), + 'Uncategorizedpages' => array( 'വർഗ്ഗീകരിക്കാത്ത_താളുകൾ' ), + 'Uncategorizedcategories' => array( 'വർഗ്ഗീകരിക്കാത്ത_വർഗ്ഗങ്ങൾ' ), + 'Uncategorizedimages' => array( 'വർഗ്ഗീകരിക്കാത്ത_പ്രമാണങ്ങൾ' ), + 'Uncategorizedtemplates' => array( 'വർഗ്ഗീകരിക്കാത്ത_ഫലകങ്ങൾ' ), + 'Unusedcategories' => array( 'ഉപയോഗിക്കാത്ത_വർഗ്ഗങ്ങൾ' ), + 'Unusedimages' => array( 'ഉപയോഗിക്കാത്ത_പ്രമാണങ്ങൾ' ), + 'Wantedpages' => array( 'ആവശ്യമുള്ള_താളുകൾ', 'പൊട്ടിയ_കണ്ണികൾ' ), + 'Wantedcategories' => array( 'ആവശ്യമുള്ള_വർഗ്ഗങ്ങൾ' ), + 'Wantedfiles' => array( 'ആവശ്യമുള്ള_പ്രമാണങ്ങൾ' ), + 'Wantedtemplates' => array( 'ആവശ്യമുള്ള_ഫലകങ്ങൾ' ), + 'Mostlinked' => array( 'കൂടുതൽ_കണ്ണികളുള്ള_താളുകൾ', 'കൂടുതൽ_കണ്ണികളുള്ളവ' ), + 'Mostlinkedcategories' => array( 'കൂടുതൽ_കണ്ണികളുള്ള_വർഗ്ഗങ്ങൾ', 'കൂടുതൽ_ഉപയോഗിച്ചിട്ടുള്ള_വർഗ്ഗങ്ങൾ' ), + 'Mostlinkedtemplates' => array( 'കൂടുതൽ_കണ്ണികളുള്ള_ഫലകങ്ങൾ', 'കൂടുതൽ_ഉപയോഗിച്ചിട്ടുള്ള_ഫലകങ്ങൾ' ), + 'Mostimages' => array( 'കൂടുതൽ_കണ്ണികളുള്ള_പ്രമാണങ്ങൾ', 'കൂടുതൽ_പ്രമാണങ്ങൾ', 'കൂടുതൽ_ചിത്രങ്ങൾ' ), + 'Mostcategories' => array( 'കൂടുതൽ_വർഗ്ഗങ്ങൾ' ), + 'Mostrevisions' => array( 'കൂടുതൽ_പുനരവലോകനങ്ങൾ' ), + 'Fewestrevisions' => array( 'കുറഞ്ഞ_പുനരവലോകനങ്ങൾ' ), + 'Shortpages' => array( 'ചെറിയ_താളുകൾ' ), + 'Longpages' => array( 'വലിയ_താളുകൾ' ), + 'Newpages' => array( 'പുതിയ_താളുകൾ' ), + 'Ancientpages' => array( 'പുരാതന_താളുകൾ' ), + 'Deadendpages' => array( 'അന്ത്യസ്ഥാനത്തുള്ള_താളുകൾ' ), + 'Protectedpages' => array( 'സംരക്ഷിത_താളുകൾ' ), + 'Protectedtitles' => array( 'സംരക്ഷിത_ശീർഷകങ്ങൾ' ), 'Allpages' => array( 'എല്ലാതാളുകളും' ), 'Prefixindex' => array( 'പൂർവ്വപദസൂചിക' ), - 'Ipblocklist' => array( 'തടയൽ‌പട്ടിക', 'ഐപികളുടെ തടയൽ‌പട്ടിക' ), + 'Ipblocklist' => array( 'തടയൽ‌പട്ടിക', 'ഐപികളുടെ_തടയൽ‌പട്ടിക' ), + 'Unblock' => array( 'തടയൽനീക്കുക' ), 'Specialpages' => array( 'പ്രത്യേകതാളുകൾ' ), 'Contributions' => array( 'സംഭാവനകൾ' ), 'Emailuser' => array( 'ഉപയോക്തൃഇമെയിൽ' ), - 'Confirmemail' => array( 'ഇമെയിൽ സ്ഥിരീകരിക്കുക' ), + 'Confirmemail' => array( 'ഇമെയിൽ_സ്ഥിരീകരിക്കുക' ), 'Whatlinkshere' => array( 'കണ്ണികളെന്തെല്ലാം' ), - 'Recentchangeslinked' => array( 'ബന്ധപ്പെട്ട മാറ്റങ്ങൾ' ), - 'Movepage' => array( 'താൾ മാറ്റുക' ), + 'Recentchangeslinked' => array( 'ബന്ധപ്പെട്ട_മാറ്റങ്ങൾ' ), + 'Movepage' => array( 'താൾ_മാറ്റുക' ), 'Blockme' => array( 'എന്നെതടയുക' ), 'Booksources' => array( 'പുസ്തകസ്രോതസ്സുകൾ' ), 'Categories' => array( 'വർഗ്ഗങ്ങൾ' ), @@ -128,36 +138,41 @@ $specialPageAliases = array( 'Version' => array( 'പതിപ്പ്' ), 'Allmessages' => array( 'സർവ്വസന്ദേശങ്ങൾ' ), 'Log' => array( 'രേഖ', 'രേഖകൾ' ), - 'Blockip' => array( 'തടയുക', 'ഐപിയെ തടയുക', 'ഉപയോക്താവിനെ തടയുക' ), - 'Undelete' => array( 'മായ്ച്ചവ പുനഃസ്ഥാപനം' ), + 'Blockip' => array( 'തടയുക', 'ഐപിയെ_തടയുക', 'ഉപയോക്താവിനെ_തടയുക' ), + 'Undelete' => array( 'മായ്ച്ചവ_പുനഃസ്ഥാപനം' ), 'Import' => array( 'ഇറക്കുമതി' ), 'Lockdb' => array( 'ഡി.ബി.ബന്ധിക്കുക' ), 'Unlockdb' => array( 'ഡി.ബി.ബന്ധനംനീക്കുക' ), 'Userrights' => array( 'ഉപയോക്തൃഅവകാശങ്ങൾ', 'കാര്യനിർവാഹകസൃഷ്ടി', 'യന്ത്രസൃഷ്ടി' ), 'MIMEsearch' => array( 'മൈംതിരയൽ' ), - 'FileDuplicateSearch' => array( 'പ്രമാണത്തിന്റെ അപരനുള്ള തിരച്ചിൽ' ), + 'FileDuplicateSearch' => array( 'പ്രമാണത്തിന്റെ_അപരനുള്ള_തിരച്ചിൽ' ), 'Unwatchedpages' => array( 'ആരുംശ്രദ്ധിക്കാത്തതാളുകൾ' ), 'Listredirects' => array( 'തിരിച്ചുവിടൽ‌പട്ടിക' ), - 'Revisiondelete' => array( 'നാൾപ്പതിപ്പ് മായ്ക്കൽ' ), + 'Revisiondelete' => array( 'നാൾപ്പതിപ്പ്_മായ്ക്കൽ' ), 'Unusedtemplates' => array( 'ഉപയോഗിക്കാത്തഫലകങ്ങൾ' ), 'Randomredirect' => array( 'ക്രമരഹിതതിരിച്ചുവിടലുകൾ' ), - 'Mypage' => array( 'എന്റെ താൾ' ), - 'Mytalk' => array( 'എന്റെ സംവാദം' ), - 'Mycontributions' => array( 'എന്റെ സംഭാവനകൾ' ), + 'Mypage' => array( 'എന്റെതാൾ' ), + 'Mytalk' => array( 'എന്റെസംവാദം' ), + 'Mycontributions' => array( 'എന്റെസംഭാവനകൾ' ), + 'Myuploads' => array( 'ഞാൻഅപ്‌ലോഡ്‌ചെയ്തവ' ), + 'PermanentLink' => array( 'സ്ഥിരംകണ്ണി' ), 'Listadmins' => array( 'കാര്യനിർവാഹകപട്ടിക' ), - 'Listbots' => array( 'യന്ത്രങ്ങളുടെ പട്ടിക' ), - 'Popularpages' => array( 'ജനകീയതാളുകൾ' ), + 'Listbots' => array( 'യന്ത്രങ്ങളുടെ_പട്ടിക' ), + 'Popularpages' => array( 'ജനപ്രിയതാളുകൾ' ), 'Search' => array( 'അന്വേഷണം' ), - 'Resetpass' => array( 'രഹസ്യവാക്ക് മാറ്റുക' ), + 'Resetpass' => array( 'രഹസ്യവാക്ക്_മാറ്റുക' ), 'Withoutinterwiki' => array( 'അന്തർവിക്കിയില്ലാത്തവ' ), 'MergeHistory' => array( 'നാൾവഴിലയിപ്പിക്കുക' ), 'Filepath' => array( 'പ്രമാണവിലാസം' ), - 'Invalidateemail' => array( 'സാധുവല്ലാത്ത ഇമെയിൽ' ), + 'Invalidateemail' => array( 'ഇമെയിൽഅസാധുവാക്കുക' ), 'Blankpage' => array( 'ശൂന്യതാൾ' ), - 'LinkSearch' => array( 'കണ്ണികൾ തിരയുക' ), - 'DeletedContributions' => array( 'മായ്ച്ച സേവനങ്ങൾ' ), + 'LinkSearch' => array( 'കണ്ണികൾ_തിരയുക' ), + 'DeletedContributions' => array( 'മായ്ച്ച_സേവനങ്ങൾ' ), 'Tags' => array( 'റ്റാഗുകൾ' ), - 'Activeusers' => array( 'സജീവ ഉപയോക്താക്കൾ' ), + 'Activeusers' => array( 'സജീവ_ഉപയോക്താക്കൾ' ), + 'ComparePages' => array( 'താളുകളുടെതാരതമ്യം' ), + 'Badtitle' => array( 'മോശംതലക്കെട്ട്' ), + 'DisableAccount' => array( 'അംഗത്വംനിർജ്ജീവമാക്കുക' ), ); $magicWords = array( @@ -191,9 +206,9 @@ $magicWords = array( 'localtime' => array( '1', 'പ്രാദേശികസമയം', 'LOCALTIME' ), 'localhour' => array( '1', 'പ്രാദേശികമണിക്കൂർ', 'LOCALHOUR' ), 'numberofpages' => array( '1', 'താളുകളുടെയെണ്ണം', 'NUMBEROFPAGES' ), - 'numberofarticles' => array( '1', 'ലേഖങ്ങനളുടെയെണ്ണം', 'NUMBEROFARTICLES' ), + 'numberofarticles' => array( '1', 'ലേഖനങ്ങളുടെയെണ്ണം', 'NUMBEROFARTICLES' ), 'numberoffiles' => array( '1', 'പ്രമാണങ്ങളുടെയെണ്ണം', 'NUMBEROFFILES' ), - 'numberofusers' => array( '1', 'ഉപയോക്താക്കളുടെയെണ്ണം', 'അംഗങ്ങളുയെണ്ണം', 'NUMBEROFUSERS' ), + 'numberofusers' => array( '1', 'ഉപയോക്താക്കളുടെയെണ്ണം', 'അംഗങ്ങളുടെയെണ്ണം', 'NUMBEROFUSERS' ), 'numberofactiveusers' => array( '1', 'സജീവോപയാക്താക്കളുടെയെണ്ണം', 'NUMBEROFACTIVEUSERS' ), 'numberofedits' => array( '1', 'തിരുത്തലുകളുടെണ്ണം', 'NUMBEROFEDITS' ), 'numberofviews' => array( '1', 'എടുത്തുനോക്കലുകളുടെണ്ണം', 'NUMBEROFVIEWS' ), @@ -216,7 +231,8 @@ $magicWords = array( 'subjectpagename' => array( '1', 'ലേഖനതാളിന്റെപേര്‌', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ), 'subjectpagenamee' => array( '1', 'ലേഖനതാളിന്റെപേര്‌സമഗ്രം', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ), 'msg' => array( '0', 'സന്ദേശം:', 'MSG:' ), - 'subst' => array( '0', 'ബദൽ:', 'ബദൽ:', 'SUBST:' ), + 'subst' => array( '0', 'ബദൽ:', 'ഉൾപ്പെടുത്തൽ:', 'SUBST:' ), + 'safesubst' => array( '0', 'സംരക്ഷിതബദൽ:', 'സംരക്ഷിതയുൾപ്പെടുത്തൽ:', 'SAFESUBST:' ), 'msgnw' => array( '0', 'മൂലരൂപം:', 'MSGNW:' ), 'img_thumbnail' => array( '1', 'ലഘുചിത്രം', 'ലഘു', 'thumbnail', 'thumb' ), 'img_manualthumb' => array( '1', 'ലഘുചിത്രം=$1', 'ലഘു=$1', 'thumbnail=$1', 'thumb=$1' ), @@ -226,8 +242,13 @@ $magicWords = array( 'img_width' => array( '1', '$1ബിന്ദു', '$1px' ), 'img_center' => array( '1', 'നടുവിൽ', 'നടുക്ക്‌', 'center', 'centre' ), 'img_framed' => array( '1', 'ചട്ടം', 'ചട്ടത്തിൽ', 'framed', 'enframed', 'frame' ), - 'img_page' => array( '1', 'താൾ=$1', 'താൾ $1', 'page=$1', 'page $1' ), + 'img_frameless' => array( '1', 'ചട്ടരഹിതം', 'frameless' ), + 'img_page' => array( '1', 'താൾ=$1', 'താൾ_$1', 'page=$1', 'page $1' ), + 'img_upright' => array( '1', 'നേരേകുത്തനെ', 'നേരേകുത്തനെ=$1', 'നേരേകുത്തനെ_$1', 'upright', 'upright=$1', 'upright $1' ), 'img_border' => array( '1', 'അതിർവര', 'border' ), + 'img_baseline' => array( '1', 'താഴെയുള്ളവര', 'baseline' ), + 'img_sub' => array( '1', 'കീഴെയെഴുത്ത്', 'sub' ), + 'img_super' => array( '1', 'മേലേയെഴുത്ത്', 'super', 'sup' ), 'img_top' => array( '1', 'മേലെ', 'top' ), 'img_text_top' => array( '1', 'എഴുത്ത്-മേലെ', 'text-top' ), 'img_middle' => array( '1', 'മദ്ധ്യം', 'middle' ), @@ -239,6 +260,7 @@ $magicWords = array( 'ns' => array( '0', 'നാമേ:', 'NS:' ), 'localurl' => array( '0', 'ലോക്കൽയുആർഎൽ:', 'LOCALURL:' ), 'localurle' => array( '0', 'ലോക്കൽയുആർഎൽഇ:', 'LOCALURLE:' ), + 'articlepath' => array( '0', 'ലേഖനപഥം', 'ARTICLEPATH' ), 'server' => array( '0', 'സെർവർ', 'SERVER' ), 'servername' => array( '0', 'സെർവറിന്റെപേര്', 'SERVERNAME' ), 'scriptpath' => array( '0', 'സ്ക്രിപ്റ്റ്പാത്ത്', 'SCRIPTPATH' ), @@ -252,8 +274,10 @@ $magicWords = array( 'revisionday' => array( '1', 'തിരുത്തിയദിവസം', 'തിരുത്തിയദിനം', 'REVISIONDAY' ), 'revisionday2' => array( '1', 'തിരുത്തിയദിവസം2', 'തിരുത്തിയദിനം2', 'REVISIONDAY2' ), 'revisionmonth' => array( '1', 'തിരുത്തിയമാസം', 'REVISIONMONTH' ), + 'revisionmonth1' => array( '1', 'തിരുത്തിയമാസം1', 'REVISIONMONTH1' ), 'revisionyear' => array( '1', 'തിരുത്തിയവർഷം', 'REVISIONYEAR' ), 'revisiontimestamp' => array( '1', 'തിരുത്തിയസമയമുദ്ര', 'REVISIONTIMESTAMP' ), + 'revisionuser' => array( '1', 'അവസാനംതിരുത്തിയയാൾ', 'REVISIONUSER' ), 'plural' => array( '0', 'ബഹുവചനം:', 'PLURAL:' ), 'fullurl' => array( '0', 'പൂർണ്ണവിലാസം:', 'FULLURL:' ), 'raw' => array( '0', 'അസംസ്കൃതം:', 'RAW:' ), @@ -273,14 +297,20 @@ $magicWords = array( 'padleft' => array( '0', 'ഇടത്ത്നിറക്കുക', 'PADLEFT' ), 'padright' => array( '0', 'വലത്ത്നിറക്കുക', 'PADRIGHT' ), 'special' => array( '0', 'പ്രത്യേകം', 'special' ), + 'defaultsort' => array( '1', 'സ്വതവേയുള്ളക്രമപ്പെടുത്തൽ:', 'സ്വതവേയുള്ളക്രമപ്പെടുത്തൽചാവി:', 'സ്വതവേയുള്ളവർഗ്ഗക്രമപ്പെടുത്തൽ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ), + 'filepath' => array( '0', 'പ്രമാണപഥം:', 'FILEPATH:' ), 'tag' => array( '0', 'റ്റാഗ്', 'tag' ), 'hiddencat' => array( '1', '‌‌__മറഞ്ഞിരിക്കുംവർഗ്ഗം__', '__HIDDENCAT__' ), 'pagesincategory' => array( '1', 'വർഗ്ഗത്തിലുള്ളതാളുകൾ', 'PAGESINCATEGORY', 'PAGESINCAT' ), 'pagesize' => array( '1', 'താൾവലിപ്പം', 'PAGESIZE' ), 'index' => array( '1', '‌‌__സൂചിക__', '__INDEX__' ), 'noindex' => array( '1', '__സൂചികവേണ്ട__', '__NOINDEX__' ), + 'staticredirect' => array( '1', '_സ്ഥിരസ്ഥിതതിരിച്ചുവിടൽ_', '__STATICREDIRECT__' ), 'protectionlevel' => array( '1', 'സംരക്ഷണതലം', 'PROTECTIONLEVEL' ), 'formatdate' => array( '0', 'ദിനരേഖീകരണരീതി', 'ദിവസരേഖീകരണരീതി', 'formatdate', 'dateformat' ), + 'url_path' => array( '0', 'പഥം', 'PATH' ), + 'url_wiki' => array( '0', 'വിക്കി', 'WIKI' ), + 'url_query' => array( '0', 'ക്വറി', 'QUERY' ), ); $messages = array( @@ -299,8 +329,7 @@ $messages = array( 'tog-editsection' => 'ഉപവിഭാഗങ്ങളുടെ തിരുത്തൽ [തിരുത്തുക] എന്ന കണ്ണിയുപയോഗിച്ച് ചെയ്യുവാൻ അനുവദിക്കുക', 'tog-editsectiononrightclick' => 'ഉപവിഭാഗങ്ങളുടെ തലക്കെട്ടിൽ റൈറ്റ് ക്ലിക്ക് ചെയ്യുന്നതു വഴി തിരുത്താനനുവദിക്കുക (ജാവാസ്ക്രിപ്റ്റ്)', 'tog-showtoc' => 'ഉള്ളടക്കപ്പട്ടിക പ്രദർശിപ്പിക്കുക (മൂന്നിൽ കൂടുതൽ ഉപശീർഷകങ്ങളുള്ള താളുകൾക്കു മാത്രം)', -'tog-rememberpassword' => 'എന്റെ പ്രവേശം ഈ കമ്പ്യൂട്ടറിൽ ഓർത്തുവെക്കുക', -'tog-editwidth' => 'സ്ക്രീൻ മുഴുവൻ നിറയുന്ന വിധത്തിൽ തിരുത്തുവാനുള്ള പെട്ടി വിസ്താരമുള്ളതാക്കുക', +'tog-rememberpassword' => 'എന്റെ പ്രവേശിക്കൽ ഈ ബ്രൗസറിൽ ({{PLURAL:$1|ഒരു ദിവസം|$1 ദിവസം}}) ഓർത്തുവെക്കുക', 'tog-watchcreations' => 'ഞാൻ സൃഷ്ടിക്കുന്ന താളുകൾ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ ചേർക്കുക', 'tog-watchdefault' => 'ഞാൻ തിരുത്തുന്ന താളുകൾ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ ചേർക്കുക', 'tog-watchmoves' => 'ഞാൻ തലക്കെട്ടു മാറ്റുന്ന താളുകൾ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ ചേർക്കുക', @@ -315,7 +344,7 @@ $messages = array( 'tog-enotifrevealaddr' => 'വിജ്ഞാപന മെയിലുകളിൽ എന്റെ ഇമെയിൽ വിലാസം വെളിവാക്കാൻ അനുവദിക്കുക', 'tog-shownumberswatching' => 'ശ്രദ്ധിക്കുന്ന ഉപയോക്താക്കളുടെ എണ്ണം കാണിക്കുക', 'tog-oldsig' => 'നിലവിലുള്ള ഒപ്പിന്റെ രൂപം:', -'tog-fancysig' => 'ഒപ്പ് ഒരു വിക്കിടെക്സ്റ്റായി പരിഗണിക്കുക (കണ്ണി സ്വയം ചേർക്കേണ്ടതില്ല)', +'tog-fancysig' => 'ഒപ്പ് ഒരു വിക്കി എഴുത്തായി പരിഗണിക്കുക (കണ്ണി സ്വയം ചേർക്കേണ്ടതില്ല)', 'tog-externaleditor' => 'സ്വതേ ബാഹ്യ എഡിറ്റർ ഉപയോഗിക്കുക (വിദഗ്ദ്ധ ഉപയോക്താക്കൾക്കു മാത്രം, താങ്കളുടെ കമ്പ്യൂട്ടറിൽ പ്രത്യേക സജ്ജീകരണങ്ങൾ ആവശ്യമാണ്. [http://www.mediawiki.org/wiki/Manual:External_editors കൂടുതൽ വിവരങ്ങൾ.])', 'tog-externaldiff' => 'വ്യത്യാസം അറിയാൻ സ്വതേ ബാഹ്യ ഉപകരണങ്ങൾ ഉപയോഗിക്കുക (വിദഗ്ദ്ധ ഉപയോക്താക്കൾക്കു മാത്രം, താങ്കളുടെ കമ്പ്യൂട്ടറിൽ പ്രത്യേക സജ്ജീകരണങ്ങൾ ആവശ്യമാണ്. [http://www.mediawiki.org/wiki/Manual:External_editors കൂടുതൽ വിവരങ്ങൾ.])', 'tog-showjumplinks' => '"പോവുക" ഗമ്യത കണ്ണികൾ പ്രാപ്തമാക്കുക', @@ -434,7 +463,7 @@ $messages = array( # Cologne Blue skin 'qbfind' => 'കണ്ടെത്തുക', -'qbbrowse' => 'പരതുക', +'qbbrowse' => 'ബ്രൗസ്', 'qbedit' => 'തിരുത്തുക', 'qbpageoptions' => 'ഈ താൾ', 'qbpageinfo' => 'സന്ദർഭം', @@ -444,31 +473,21 @@ $messages = array( 'faqpage' => 'Project:പതിവുചോദ്യങ്ങൾ', # Vector skin -'vector-action-addsection' => 'വിഷയം ചേർക്കുക', -'vector-action-delete' => 'മായ്ക്കുക', -'vector-action-move' => 'തലക്കെട്ട് മാറ്റുക', -'vector-action-protect' => 'സം‌രക്ഷിക്കുക', -'vector-action-undelete' => 'മായ്ക്കപ്പെട്ടത് പുനഃസ്ഥാപിക്കുക', -'vector-action-unprotect' => 'സം‌രക്ഷണം നീക്കുക', -'vector-namespace-category' => 'വർഗ്ഗം', -'vector-namespace-help' => 'സഹായം താൾ', -'vector-namespace-image' => 'പ്രമാണം', -'vector-namespace-main' => 'ലേഖനം', -'vector-namespace-media' => 'മീഡിയ താൾ', -'vector-namespace-mediawiki' => 'സന്ദേശം', -'vector-namespace-project' => 'പദ്ധതി താൾ', -'vector-namespace-special' => 'പ്രത്യേക താൾ', -'vector-namespace-talk' => 'സം‌വാദം', -'vector-namespace-template' => 'ഫലകം', -'vector-namespace-user' => 'ഉപയോക്താവിന്റെ താൾ', -'vector-view-create' => 'സൃഷ്ടിക്കുക', -'vector-view-edit' => 'തിരുത്തുക', -'vector-view-history' => 'നാൾവഴി കാണുക', -'vector-view-view' => 'വായിക്കുക', -'vector-view-viewsource' => 'മൂലരൂപം കാണുക', -'actions' => 'നടപടികൾ', -'namespaces' => 'നാമമേഖല', -'variants' => 'ചരങ്ങൾ', +'vector-action-addsection' => 'വിഷയം ചേർക്കുക', +'vector-action-delete' => 'മായ്ക്കുക', +'vector-action-move' => 'തലക്കെട്ട് മാറ്റുക', +'vector-action-protect' => 'സം‌രക്ഷിക്കുക', +'vector-action-undelete' => 'മായ്ക്കപ്പെട്ടത് പുനഃസ്ഥാപിക്കുക', +'vector-action-unprotect' => 'സം‌രക്ഷണം നീക്കുക', +'vector-simplesearch-preference' => 'മെച്ചപ്പെട്ട തിരച്ചിൽ നിർദ്ദേശങ്ങൾ തരിക (വെക്റ്റർ ദൃശ്യരൂപത്തിൽ മാത്രം)', +'vector-view-create' => 'സൃഷ്ടിക്കുക', +'vector-view-edit' => 'തിരുത്തുക', +'vector-view-history' => 'നാൾവഴി കാണുക', +'vector-view-view' => 'വായിക്കുക', +'vector-view-viewsource' => 'മൂലരൂപം കാണുക', +'actions' => 'നടപടികൾ', +'namespaces' => 'നാമമേഖല', +'variants' => 'ചരങ്ങൾ', 'errorpagetitle' => 'പിഴവ്', 'returnto' => '$1 എന്ന താളിലേക്ക് തിരിച്ചുപോവുക.', @@ -515,7 +534,7 @@ $messages = array( 'viewhelppage' => 'സഹായം താൾ കാണുക', 'categorypage' => 'വർഗ്ഗം താൾ കാണുക', 'viewtalkpage' => 'സം‌വാദം കാണുക', -'otherlanguages' => 'ഇതര ഭാഷകളിൽ', +'otherlanguages' => 'ഇതരഭാഷകളിൽ', 'redirectedfrom' => '($1 എന്ന താളിൽ നിന്നും തിരിച്ചുവിട്ടതു പ്രകാരം)', 'redirectpagesub' => 'തിരിച്ചുവിടൽ താൾ', 'lastmodifiedat' => 'ഈ താൾ അവസാനം തിരുത്തപ്പെട്ടത്: $2, $1.', @@ -529,6 +548,9 @@ $messages = array( ഇനിയും താൾ ലഭ്യമാക്കുവാൻ താങ്കൾ ശ്രമിക്കുന്നതിന് മുൻപ് ദയവായി അല്പസമയം കാത്തിരിക്കുക. $1', +'pool-timeout' => 'പൂട്ട് മാറാനുള്ള കാത്തിരിപ്പ് സമയം', +'pool-queuefull' => 'പൂൾ ക്യൂ നിറഞ്ഞിരിക്കുന്നു', +'pool-errorunknown' => 'അപരിചിതമായ പിഴവ്', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} സം‌രംഭത്തെക്കുറിച്ച്', @@ -636,7 +658,7 @@ $1', 'missingarticle-rev' => '(മാറ്റം#: $1)', 'missingarticle-diff' => '(വ്യത്യാസം: $1, $2)', 'readonly_lag' => 'വിവരശേഖരം സ്വയം ബന്ധിക്കപ്പെട്ടിരിക്കുന്നു അതേസമയം കീഴ്-വിവരശേഖര സെർവറുകൾ മാസ്റ്റർ വരെ പിടിച്ചിരിക്കുന്നു', -'internalerror' => 'ആന്തരികമായ പ്രശ്നം', +'internalerror' => 'ആന്തരികപ്രശ്നം', 'internalerror_info' => 'ആന്തരികപ്രശ്നം: $1', 'fileappenderrorread' => 'കൂട്ടിച്ചേർക്കുന്ന സമയം "$1" വായിച്ചെടുക്കാൻ കഴിഞ്ഞില്ല.', 'fileappenderror' => '"$1" എന്നത് "$2"-ലേക്ക് കൂട്ടിച്ചേർക്കുവാൻ സാധിച്ചില്ല.', @@ -693,7 +715,8 @@ $2', 'yourname' => 'ഉപയോക്തൃനാമം:', 'yourpassword' => 'രഹസ്യവാക്ക്:', 'yourpasswordagain' => 'രഹസ്യവാക്ക് ഒരിക്കൽക്കൂടി:', -'remembermypassword' => 'എന്റെ പ്രവേശനം ഈ കമ്പ്യൂട്ടറിൽ ഓർത്തുവെക്കുക.', +'remembermypassword' => 'എന്റെ പ്രവേശിക്കൽ ഈ കമ്പ്യൂട്ടറിൽ ({{PLURAL:$1|ഒരു ദിവസം|$1 ദിവസം}}) ഓർത്തുവെക്കുക', +'securelogin-stick-https' => 'പ്രവേശിച്ചതിനു എച്ച്.റ്റി.റ്റി.പി.എസ്. ഉപയോഗിക്കുക', 'yourdomainname' => 'താങ്കളുടെ ഡൊമെയിൻ:', 'externaldberror' => 'ഒന്നുകിൽ ഡേറ്റാബേസ് സാധൂകരണത്തിൽ പ്രശ്നം ഉണ്ടായിരുന്നു അല്ലെങ്കിൽ നവീകരിക്കുവാൻ താങ്കളുടെ ബാഹ്യ അംഗത്വം താങ്കളെ അനുവദിക്കുന്നില്ല.', 'login' => 'പ്രവേശിക്കുക', @@ -710,7 +733,8 @@ $2', 'gotaccount' => "താങ്കൾക്ക് അംഗത്വമുണ്ടോ? '''$1'''.", 'gotaccountlink' => 'പ്രവേശിക്കുക', 'createaccountmail' => 'ഇമെയിൽ വഴി', -'badretype' => 'താങ്കൾ ടൈപ്പു ചെയ്ത രഹസ്യവാക്കുകൾ തമ്മിൽ യോജിക്കുന്നില്ല.', +'createaccountreason' => 'കാരണം:', +'badretype' => 'താങ്കൾ ടൈപ്പ് ചെയ്ത രഹസ്യവാക്കുകൾ തമ്മിൽ യോജിക്കുന്നില്ല.', 'userexists' => 'ഈ പേരിൽ മറ്റൊരു ഉപയോക്തൃനാമം നിലവിലുണ്ട്. ദയവായി മറ്റൊരു ഉപയോക്തൃനാമം തിരഞ്ഞെടുക്കുക.', 'loginerror' => 'പ്രവേശനം സാധിച്ചില്ല', 'createaccounterror' => 'അംഗത്വമെടുക്കാൻ കഴിഞ്ഞില്ല:$1', @@ -729,6 +753,7 @@ $2', 'wrongpasswordempty' => 'താങ്കൾ രഹസ്യവാക്ക് നൽകിയിരുന്നില്ല. വീണ്ടും ശ്രമിക്കുക.', 'passwordtooshort' => 'രഹസ്യവാക്കിൽ കുറഞ്ഞതു {{PLURAL:$1|ഒരു അക്ഷരം|$1 അക്ഷരങ്ങൾ}} ഉണ്ടായിരിക്കണം.', 'password-name-match' => 'താങ്കളുടെ രഹസ്യവാക്ക് ഉപയോക്തൃനാമത്തിൽ നിന്നും വ്യത്യസ്തമായിരിക്കണം.', +'password-login-forbidden' => 'ഈ ഉപയോക്തൃനാമത്തിന്റെയും രഹസ്യവാക്കിന്റെയും ഉപയോഗം നിരോധിച്ചിരിക്കുന്നു.', 'mailmypassword' => 'പുതിയ രഹസ്യവാക്ക് ഇമെയിൽ ചെയ്യുക', 'passwordremindertitle' => '{{SITENAME}} സംരംഭത്തിൽ ഉപയോഗിക്കാനുള്ള താത്ക്കാലിക രഹസ്യവാക്ക്', 'passwordremindertext' => 'ആരോ ഒരാൾ (ഒരു പക്ഷേ താങ്കളായിരിക്കാം, $1 എന്ന ഐ.പി. വിലാസത്തിൽനിന്ന്) {{SITENAME}} ($4) സംരംഭത്തിലേക്ക് പുതിയ രഹസ്യവാക്ക് ആവശ്യപ്പെട്ടിരിക്കുന്നു. "$2" എന്ന ഉപയോക്താവിന് ആവശ്യമായ ഒരു താൽകാലിക രഹസ്യവാക്കായി "$3" എന്ന് സജ്ജീകരിച്ചിരിക്കുന്നു. ഇത് താങ്കളുടെ ആവശ്യമാണെങ്കിൽ, താങ്കൾ പ്രവേശം ചെയ്ത് പുതിയ രഹസ്യവാക്ക് സജ്ജീകരിക്കേണ്ടതാണ്. താങ്കളുടെ താത്കാലിക രഹസ്യവാക്കിന്റെ കാലാവധി {{PLURAL:$5|ഒരു ദിവസമാകുന്നു|$5 ദിവങ്ങളാകുന്നു}}. @@ -761,6 +786,9 @@ $2', 'loginlanguagelabel' => 'ഭാഷ: $1', 'suspicious-userlogout' => 'ലോഗൗട്ട് ചെയ്യാനുള്ള താങ്കളുടെ അഭ്യർത്ഥന നിരസിച്ചിരിക്കുന്നു, കാരണം അത് തകർന്ന ബ്രൗസറിൽ നിന്നോ കാഷിങ് പ്രോക്സിയിൽ നിന്നോ ഉണ്ടായതുപോലെ അനുഭവപ്പെടുന്നു.', +# E-mail sending +'php-mail-error-unknown' => 'പി.എച്ച്.പി.യുടെ main() ഫങ്ഷനിൽ അപരിചിതമായ പിഴവ്', + # Password reset dialog 'resetpass' => 'രഹസ്യവാക്ക് മാറ്റുക', 'resetpass_announce' => 'താങ്കൾക്ക് ഇമെയിൽ ആയി കിട്ടിയ താൽക്കാലിക കോഡ് ഉപയോഗിച്ചാണ്‌ ഇപ്പോൾ ലോഗിൻ ചെയ്തിരിക്കുന്നതു്‌. ലോഗിൻ പ്രക്രിയ പൂർത്തിയാകുവാൻ പുതിയൊരു രഹസ്യവാക്ക് ഇവിടെ കൊടുക്കുക:', @@ -801,17 +829,18 @@ $2', # Edit pages 'summary' => 'ചുരുക്കം:', 'subject' => 'വിഷയം/തലക്കെട്ട്:', -'minoredit' => 'ഇതൊരു ചെറിയ തിരുത്തലാണ്', +'minoredit' => 'ഇതൊരു ചെറിയ തിരുത്താണ്', 'watchthis' => 'ഈ താളിലെ മാറ്റങ്ങൾ ശ്രദ്ധിക്കുക', -'savearticle' => 'സേവ് ചെയ്യുക', +'savearticle' => 'താൾ സേവ് ചെയ്യുക', 'preview' => 'എങ്ങനെയുണ്ടെന്നു കാണുക', 'showpreview' => 'എങ്ങനെയുണ്ടെന്നു കാണുക', 'showlivepreview' => 'തത്സമയ പ്രിവ്യൂ', 'showdiff' => 'മാറ്റങ്ങൾ കാണിക്കുക', 'anoneditwarning' => "'''മുന്നറിയിപ്പ്:''' താങ്കൾ ലോഗിൻ ചെയ്തിട്ടില്ല. താങ്കളുടെ ഐ.പി. വിലാസം താളിന്റെ തിരുത്തൽ ചരിത്രത്തിൽ ചേർക്കുന്നതാണ്.", +'anonpreviewwarning' => "''താങ്കൾ ലോഗിൻ ചെയ്തിട്ടില്ല. സേവ് ചെയ്യുമ്പോൾ താളിന്റെ തിരുത്തൽ ചരിത്രത്തിൽ താങ്കളുടെ ഐ.പി. വിലാസം ചേർത്തു സൂക്ഷിക്കപ്പെടും.''", 'missingsummary' => "'''ഓർമ്മക്കുറിപ്പ്:''' താങ്കൾ തിരുത്തലിന്റെ ചുരുക്കരൂപം നൽകിയിട്ടില്ല. ''സേവ് ചെയ്യുക'' ബട്ടൺ ഒരുവട്ടം കൂടി അമർത്തിയാൽ താങ്കൾ വരുത്തിയ മാറ്റം കാത്തുസൂക്ഷിക്കുന്നതാണ്.", 'missingcommenttext' => 'താങ്കളുടെ അഭിപ്രായം ദയവായി താഴെ രേഖപ്പെടുത്തുക.', -'missingcommentheader' => "'''ഓർമ്മക്കുറിപ്പ്:''' ഈ കുറിപ്പിന് താങ്കൾ വിഷയം/തലക്കെട്ട് നൽകിയിട്ടില്ല. ''സേവ് ചെയ്യുക'' എന്ന ബട്ടൺ ഒരുവട്ടം കൂടി അമർത്തിയാൽ വിഷയം/തലക്കെട്ട് ഇല്ലാതെ തന്നെ കാത്തുസൂക്ഷിക്കുന്നതാവും.", +'missingcommentheader' => "'''ഓർമ്മക്കുറിപ്പ്:''' ഈ കുറിപ്പിന് താങ്കൾ വിഷയം/തലക്കെട്ട് നൽകിയിട്ടില്ല. ''{{int:savearticle}}'' എന്ന ബട്ടൺ ഒരുവട്ടം കൂടി അമർത്തിയാൽ വിഷയം/തലക്കെട്ട് ഇല്ലാതെ തന്നെ കാത്തുസൂക്ഷിക്കുന്നതാവും.", 'summary-preview' => 'ചുരുക്കരൂപം എങ്ങനെയുണ്ടെന്നു കാണുക:', 'subject-preview' => 'വിഷയം/തലക്കെട്ട് എങ്ങനെയുണ്ടെന്ന് കാണുക:', 'blockedtitle' => 'ഉപയോക്താവിനെ തടഞ്ഞിരിക്കുന്നു', @@ -823,7 +852,7 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന * തടയലിന്റെ കാലാവധി: $6 * തടയപ്പെട്ട ഉപയോക്താവ്: $7 -ഈ തടയലിനെ പറ്റി ചർച്ച ചെയ്യാൻ താങ്കൾക്ക് $1 നേയോ മറ്റ് [[{{MediaWiki:Grouppage-sysop}}|കാര്യനിർവാഹകരെയോ]] സമീപിക്കാവുന്നതാണ്. [[Special:Preferences|താങ്കളുടെ ക്രമീകരണങ്ങളിൽ]] താങ്കൾ സാധുവായ ഇമെയിൽ വിലാസം കൊടുത്തിട്ടുണ്ടെങ്കിൽ, അതു അയക്കുന്നതിൽ നിന്നു താങ്കൾ തടയപ്പെട്ടിട്ടില്ലെങ്കിൽ, 'ഇദ്ദേഹത്തിന് ഇമെയിൽ അയക്കൂ' എന്ന സം‌വിധാനം ഉപയോഗിച്ച് താങ്കൾക്ക് മറ്റുപയോക്താക്കളുമായി ബന്ധപ്പെടാം. താങ്കളുടെ നിലവിലുള്ള ഐ.പി. വിലാസം $3 ഉം, താങ്കളുടെ തടയൽ ഐ.ഡി. #$5 ഉം ആണ്. ഇവ രണ്ടും താങ്കൾ കാര്യനിർവാഹകനെ ബന്ധപ്പെടുമ്പോൾ ചേർക്കുക.", +ഈ തടയലിനെ പറ്റി ചർച്ച ചെയ്യാൻ താങ്കൾക്ക് $1 എന്ന ഉപയോക്താവിനേയോ മറ്റ് [[{{MediaWiki:Grouppage-sysop}}|കാര്യനിർവാഹകരെയോ]] സമീപിക്കാവുന്നതാണ്. [[Special:Preferences|താങ്കളുടെ ക്രമീകരണങ്ങളിൽ]] താങ്കൾ സാധുവായ ഇമെയിൽ വിലാസം കൊടുത്തിട്ടുണ്ടെങ്കിൽ, അതു അയക്കുന്നതിൽ നിന്നു താങ്കൾ തടയപ്പെട്ടിട്ടില്ലെങ്കിൽ, 'ഇദ്ദേഹത്തിന് ഇമെയിൽ അയക്കൂ' എന്ന സം‌വിധാനം ഉപയോഗിച്ച് താങ്കൾക്ക് മറ്റുപയോക്താക്കളുമായി ബന്ധപ്പെടാം. താങ്കളുടെ നിലവിലുള്ള ഐ.പി. വിലാസം $3 ഉം, താങ്കളുടെ തടയൽ ഐ.ഡി. #$5 ഉം ആണ്. ഇവ രണ്ടും താങ്കൾ കാര്യനിർവാഹകനെ ബന്ധപ്പെടുമ്പോൾ ചേർക്കുക.", 'autoblockedtext' => 'താങ്കളുടെ ഐ.പി. വിലാസം സ്വയം തടയപ്പെട്ടിരിക്കുന്നു, മറ്റൊരു ഉപയോക്താവ് ഉപയോഗിച്ച കാരണത്താൽ $1 എന്ന കാര്യനിർവാഹകനാണ് തടഞ്ഞുവെച്ചത്. ഇതിനു കാരണമായി നൽകിയിട്ടുള്ളത്: @@ -886,7 +915,11 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന 'usercsspreview' => "'''താങ്കൾ താങ്കളുടെ സ്വന്തം സി.എസ്.എസ്. പ്രിവ്യൂ ചെയ്യുക മാത്രമേ ചെയ്യുന്നുള്ളൂ എന്ന കാര്യം ഓർമ്മിക്കുക.''' '''ഇതു സേവ് ചെയ്തിട്ടില്ല!'''", 'userjspreview' => "'''താങ്കൾ താങ്കളുടെ സ്വന്തം ജാവസ്ക്രിപ്റ്റ് പ്രിവ്യൂ ചെയ്യുക മാത്രമേ ചെയ്യുന്നുള്ളൂ എന്ന കാര്യം ഓർമ്മിക്കുക. ഇതു സേവ് ചെയ്തിട്ടില്ല!'''", -'userinvalidcssjstitle' => "'''മുന്നറിപ്പ്:''' \"\$1\" എന്ന പേരിൽ ഒരു സ്കിൻ ഇല്ല. '''.css''' ഉം '''.js''' ഉം താളുകൾ ഇംഗ്ലീഷ് ചെറിയക്ഷര തലക്കെട്ട് ആണ്‌ ഉപയോഗിക്കുന്നതെന്നു ദയവായി ഓർക്കുക. ഉദാ: {{ns:user}}:Foo/Monobook.css എന്നതിനു പകരം {{ns:user}}:Foo/monobook.css എന്നാണു ഉപയോഗിക്കേണ്ടത്.", +'sitecsspreview' => "'''താങ്കൾ ഈ സി.എസ്.എസ്.ന്റെ പ്രിവ്യൂ കാണുക മാത്രമേ ചെയ്യുന്നുള്ളൂ എന്ന കാര്യം ഓർമ്മിക്കുക.''' +'''ഇതു സേവ് ചെയ്തിട്ടില്ല!'''", +'sitejspreview' => "'''താങ്കൾ ഈ ജാവസ്ക്രിപ്റ്റ് കോഡിന്റെ പ്രിവ്യൂ കാണുക മാത്രമേ ചെയ്യുന്നുള്ളൂ എന്ന കാര്യം ഓർമ്മിക്കുക.''' +'''ഇതു സേവ് ചെയ്തിട്ടില്ല!'''", +'userinvalidcssjstitle' => "'''മുന്നറിപ്പ്:''' \"\$1\" എന്ന പേരിൽ ഒരു ദൃശ്യരൂപം ഇല്ല. '''.css''' ഉം '''.js''' ഉം താളുകൾ ഇംഗ്ലീഷ് ചെറിയക്ഷര തലക്കെട്ട് ആണ്‌ ഉപയോഗിക്കുന്നതെന്നു ദയവായി ഓർക്കുക. ഉദാ: {{ns:user}}:Foo/Vector.css എന്നതിനു പകരം {{ns:user}}:Foo/vector.css എന്നാണു ഉപയോഗിക്കേണ്ടത്.", 'updated' => '(പുതുക്കിയിരിക്കുന്നു)', 'note' => "'''പ്രത്യേക ശ്രദ്ധയ്ക്ക്:'''", 'previewnote' => "'''ഇതൊരു പ്രിവ്യൂ മാത്രമാണ്, താങ്കൾ നടത്തിയ മാറ്റങ്ങൾ സേവ് ചെയ്തിട്ടില്ല!'''", @@ -912,7 +945,7 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന താങ്കളുടെ മാറ്റങ്ങൾ മുകളിലെ ടെക്സ്റ്റ് ഏരിയയിലേക്ക് സം‌യോജിപ്പിക്കുക. താങ്കൾ '''സേവ് ചെയ്യുക''' എന്ന ബട്ടൺ അമർത്തുമ്പോൾ '''മുകളിലെ ടെക്സ്റ്റ് ഏരിയയിലുള്ള എഴുത്തുകൾ മാത്രമേ''' സേവ് ആവുകയുള്ളൂ.", 'yourtext' => 'താങ്കൾ എഴുതി ചേർത്തത്', -'storedversion' => 'സംഭരിക്കപ്പെട്ടിരിക്കുന്ന പതിപ്പ്', +'storedversion' => 'മുമ്പേയുള്ള നാൾപതിപ്പ്', 'nonunicodebrowser' => "'''മുന്നറിയിപ്പ്: താങ്കളുടെ ബ്രൗസർ യൂണീകോഡിനു സജ്ജമല്ല. താളുകൾ സുരക്ഷിതമായി തിരുത്താനുള്ള സൗകര്യം ഒരുക്കിയിട്ടുണ്ട്: ASCII അല്ലാത്ത അക്ഷരങ്ങൾ ഹെക്സാഡെസിമൽ കോഡായി തിരുത്തുവാനുള്ള പെട്ടിയിൽ പ്രത്യക്ഷപ്പെടുന്നതാണ്.'''", 'editingold' => "'''മുന്നറിയിപ്പ്: താങ്കൾ ഈ താളിന്റെ ഒരു പഴയ പതിപ്പാണ്‌ തിരുത്തുന്നത്. ഇപ്പോൾ താങ്കൾ വരുത്തിയ മാറ്റങ്ങൾ സേവ് ചെയ്താൽ ഈ പതിപ്പിനു ശേഷം വന്ന മാറ്റങ്ങളെല്ലാം നഷ്ടമാകും.'''", 'yourdiff' => 'വ്യത്യാസങ്ങൾ', @@ -924,9 +957,6 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന 'copyrightwarning2' => "{{SITENAME}} സംരംഭത്തിൽ താങ്കൾ എഴുതി ചേർക്കുന്നതെല്ലാം മറ്റുപയോക്താക്കൾ തിരുത്തുകയോ, മാറ്റം വരുത്തുകയോ, ഒഴിവാക്കുകയോ ചെയ്തേക്കാം. താങ്കൾ എഴുതി ചേർക്കുന്നതു മറ്റ് ഉപയോക്താക്കൾ തിരുത്തുന്നതിലോ ഒഴിവാക്കുന്നതിലോ താങ്കൾക്ക് എതിർപ്പുണ്ടെങ്കിൽ ദയവായി ലേഖനമെഴുതാതിരിക്കുക. ഇതു താങ്കൾത്തന്നെ എഴുതിയതാണെന്നും, അതല്ലെങ്കിൽ പകർപ്പവകാശ നിയമങ്ങളുടെ പരിധിയിലില്ലാത്ത ഉറവിടങ്ങളിൽനിന്നും പകർത്തിയതാണെന്നും ഉറപ്പാക്കുക (കുടുതൽ വിവരത്തിനു $1 കാണുക). '''പകർപ്പവകാശ സംരക്ഷണമുള്ള സൃഷ്ടികൾ ഒരു കാരണവശാലും ഇവിടെ പ്രസിദ്ധീകരിക്കരുത്!'''", -'longpagewarning' => "'''മുന്നറിയിപ്പ്:''' ഈ താളിന് $1 കിലോബൈറ്റ്സ് നീളമുണ്ട്; -ചില ബ്രൗസറുകളിൽ 32 കിലോബൈറ്റ്സിൽ കൂടിയ വലിയ താളുകൾ തിരുത്തുമ്പോൾ പ്രശ്നമുണ്ടാകാറുണ്ട്. -താളുകളുടെ ഉപവിഭാഗങ്ങൾ തിരഞ്ഞെടുത്ത് തിരുത്തുന്നത് പരിഗണിക്കുക.", 'longpageerror' => "'''പിഴവ്: താങ്കൾ സമർപ്പിച്ച എഴുത്തുകൾക്ക് $1 കിലോബൈറ്റ്സ് വലിപ്പമുണ്ട്. പരമാവധി അനുവദനീയമായ വലിപ്പം $2 കിലോബൈറ്റ്സ് ആണ്‌. അതിനാലിതു സേവ് ചെയ്യാൻ സാദ്ധ്യമല്ല.'''", 'readonlywarning' => "'''മുന്നറിയിപ്പ്: ഡേറ്റാബേസ് പരിപാലനത്തിനു വേണ്ടി ബന്ധിച്ചിരിക്കുന്നു, അതുകൊണ്ട് താങ്കളിപ്പോൾ വരുത്തിയ മാറ്റങ്ങൾ സേവ് ചെയ്യാൻ സാദ്ധ്യമല്ല.''' താങ്കൾ വരുത്തിയ മാറ്റങ്ങൾ ഒരു ടെക്സ്റ്റ് പ്രമാണത്തിലേക്ക് പകർത്തി (കട്ട് & പേസ്റ്റ്) പിന്നീടുള്ള ഉപയോഗത്തിനായി സേവ് ചെയ്യുവാൻ താല്പര്യപ്പെടുന്നു. ഡേറ്റാബേസ് ബന്ധിച്ച അഡ്മിനിസ്ട്രേറ്റർ നൽകിയ വിശദീകരണം: $1", 'protectedpagewarning' => "'''മുന്നറിയിപ്പ്: ഈ താൾ കാര്യനിർവാഹക പദവിയുള്ളവർക്കു മാത്രം തിരുത്താൻ സാധിക്കാവുന്ന തരത്തിൽ സം‌രക്ഷിക്കപ്പെട്ടിരിക്കുന്നു.''' അവലംബമായി രേഖകളിൽ ലഭ്യമായ ഏറ്റവും പുതിയ വിവരം താഴെ നൽകിയിരിക്കുന്നു:", @@ -981,7 +1011,7 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന # "Undo" feature 'undo-success' => 'ഈ തിരുത്തൽ താങ്കൾക്ക് തിരസ്ക്കരിക്കാവുന്നതാണ്‌. താഴെ കൊടുത്തിരിക്കുന്ന പതിപ്പുകൾ തമ്മിലുള്ള താരതമ്യം ഒന്നുകൂടി പരിശോധിച്ച് ഈ പ്രവൃത്തി ചെയ്യണോ എന്ന് ഒന്നുകൂടി ഉറപ്പാക്കുക. ഉറപ്പാണെങ്കിൽ തിരുത്തൽ തിരസ്ക്കരിക്കുവാൻ താൾ സേവ് ചെയ്യുക.', -'undo-failure' => 'ഇടയ്ക്കുള്ള തിരുത്തലുകൾ തമ്മിലുള്ള കോൺഫ്ലിറ്റ് കാരണം ഈ തിരുത്തൽ തിരസ്ക്കരിക്കുവാൻ പറ്റില്ല.', +'undo-failure' => 'ഇടയ്ക്കുള്ള തിരുത്തലുകൾ തമ്മിൽ സമരസപ്പെടാത്തതു കാരണം ഈ തിരുത്തൽ തിരസ്ക്കരിക്കുവാനാവില്ല.', 'undo-norev' => 'ഈ തിരുത്തൽ നിലവിലില്ലാത്തതിനാലോ മായ്ക്കപ്പെട്ടതിനാലോ പൂർവസ്ഥിതിയിലാക്കുവാൻ സാധിക്കുകയില്ല.', 'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) ചെയ്ത $1 എന്ന തിരുത്തൽ നീക്കം ചെയ്യുന്നു', @@ -1100,6 +1130,8 @@ $1", 'logdelete-failure' => "'''രേഖയുടെ ദൃശ്യത നിശ്ചിതപ്പെടുത്താൻ കഴിഞ്ഞില്ല:''' $1", 'revdel-restore' => 'കാണുന്ന രൂപത്തിൽ മാറ്റം വരുത്തുക', +'revdel-restore-deleted' => 'മായ്ക്കപ്പെട്ട നാൾപ്പതിപ്പുകൾ', +'revdel-restore-visible' => 'ദൃശ്യമായ നാൾപ്പതിപ്പുകൾ', 'pagehist' => 'താളിന്റെ നാൾവഴി', 'deletedhist' => 'ഒഴിവാക്കപ്പെട്ട നാൾവഴി', 'revdelete-content' => 'ഉള്ളടക്കം', @@ -1107,7 +1139,7 @@ $1", 'revdelete-uname' => 'ഉപയോക്തൃനാമം', 'revdelete-restricted' => 'കാര്യനിർവാഹകർക്ക് പ്രവർത്തന അതിരുകൾ ഏർപ്പെടുത്തിയിരിക്കുന്നു', 'revdelete-unrestricted' => 'കാര്യനിർവാഹകർക്ക് ഏർപ്പെടുത്തിയ പ്രവർത്തന അതിരുകൾ നീക്കം ചെയ്തിരിക്കുന്നു', -'revdelete-hid' => '$1 അപ്രത്യക്ഷമാക്കി', +'revdelete-hid' => '$1 മറച്ചു', 'revdelete-unhid' => '$1 പ്രത്യക്ഷമാക്കി', 'revdelete-log-message' => '{{PLURAL:$2|ഒരു നാൾപ്പതിപ്പിന്റെ|$2 നാൾപ്പതിപ്പുകളുടെ}} $1', 'logdelete-log-message' => '{{PLURAL:$2|സാഹചര്യങ്ങളിൽ|$2 സാഹചര്യങ്ങളിൽ}} $1', @@ -1168,11 +1200,13 @@ $1", # Diffs 'history-title' => '"$1" എന്ന താളിന്റെ നാൾവഴി', 'difference' => '(തിരഞ്ഞെടുത്ത പതിപ്പുകൾ തമ്മിലുള്ള വ്യത്യാസം)', +'difference-multipage' => '(താളുകൾ തമ്മിലുള്ള വ്യത്യാസം)', 'lineno' => 'വരി $1:', 'compareselectedversions' => 'തിരഞ്ഞെടുത്ത പതിപ്പുകൾ തമ്മിലുള്ള വ്യത്യാസം കാണുക', 'showhideselectedversions' => 'തിരഞ്ഞെടുത്ത മാറ്റങ്ങൾ പ്രദർശിപ്പിക്കുക/മറയ്ക്കുക', 'editundo' => 'മാറ്റം തിരസ്ക്കരിക്കുക', -'diff-multi' => '(ഇടക്കുള്ള {{PLURAL:$1|ഒരു പതിപ്പിലെ മാറ്റം|$1 പതിപ്പുകളിലെ മാറ്റങ്ങൾ}} ഇവിടെ കാണിക്കുന്നില്ല.)', +'diff-multi' => '(ഇടയ്ക്ക് {{PLURAL:$2|ഒരു ഉപയോക്താവ്|$2 ഉപയോക്താക്കൾ}} ചെയ്ത {{PLURAL:$1|ഒരു പതിപ്പ്|$1 പതിപ്പുകൾ}} പ്രദർശിപ്പിക്കുന്നില്ല.)', +'diff-multi-manyusers' => '(ഇടയ്ക്ക് {{PLURAL:$2|ഒന്നിലധികം|$2 എണ്ണത്തിലധികം}} ഉപയോക്താക്കൾ ചെയ്തിട്ടുള്ള {{PLURAL:$1|ഒരു പതിപ്പ്|$1 പതിപ്പുകൾ}} പ്രദർശിപ്പിക്കുന്നില്ല.)', # Search results 'searchresults' => 'തിരച്ചിലിന്റെ ഫലം', @@ -1207,6 +1241,7 @@ $1", 'searchprofile-everything-tooltip' => 'എല്ലാ ഉള്ളടക്കവും തിരയുക (സംവാദത്താളുകൾ ഉൾപ്പെടെ)', 'searchprofile-advanced-tooltip' => 'തിരഞ്ഞെടുത്ത നാമമേഖലകളിൽ തിരച്ചിൽ നടത്തുവാൻ', 'search-result-size' => '$1 ({{PLURAL:$2|ഒരു വാക്ക്|$2 വാക്കുകൾ}})', +'search-result-category-size' => '{{PLURAL:$1|ഒരു അംഗം|$1 അംഗങ്ങൾ}} ({{PLURAL:$2|ഒരു ഉപവർഗ്ഗം|$2 ഉപവർഗ്ഗങ്ങൾ}}, {{PLURAL:$3|ഒരു പ്രമാണം|$3 പ്രമാണങ്ങൾ}})', 'search-result-score' => 'സാംഗത്യം: $1%', 'search-redirect' => '(തിരിച്ചുവിടൽ താൾ $1)', 'search-section' => '(വിഭാഗം $1)', @@ -1227,7 +1262,7 @@ $1", 'nonefound' => "'''ശ്രദ്ധിക്കുക''': ചില നാമമേഖലകൾ മാത്രമേ സ്വതേ തിരയാറുള്ളൂ. എല്ലാ വിവരങ്ങളിലും തിരയാൻ '''തിരയേണ്ട നാമമേഖലകൾ''' ''എല്ലാം'' എന്നതോ ആവശ്യമായ നാമമേഖലമാത്രം തിരയുവാൻ (സംവാദം, ഫലകം, തുടങ്ങിയവ) അതു മാത്രമായോ ടിക്ക് ചെയ്യേണ്ടതാണ്.", 'search-nonefound' => 'താങ്കൾ തിരഞ്ഞ പദത്തിനു യോജിച്ച ഫലങ്ങളൊന്നും ലഭിച്ചില്ല.', 'powersearch' => 'തിരയൂ', -'powersearch-legend' => 'വികസിതമായ തിരച്ചിൽ', +'powersearch-legend' => 'വിപുലീകൃത തിരച്ചിൽ', 'powersearch-ns' => 'തിരയേണ്ട നാമമേഖലകൾ', 'powersearch-redir' => 'തിരിച്ചുവിടലുകൾ കാണിക്കുക', 'powersearch-field' => 'ഇതിനു വേണ്ടി തിരയുക', @@ -1258,7 +1293,7 @@ $1", 'datedefault' => 'ക്രമീകരണങ്ങൾ വേണ്ട', 'prefs-datetime' => 'ദിവസവും സമയവും', 'prefs-personal' => 'അഹം', -'prefs-rc' => 'പുതിയ മാറ്റങ്ങൾ', +'prefs-rc' => 'സമീപകാല മാറ്റങ്ങൾ', 'prefs-watchlist' => 'ശ്രദ്ധിക്കുന്നവ', 'prefs-watchlist-days' => 'ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ പ്രദർശിപ്പിക്കേണ്ട പരമാവധി ദിവസങ്ങൾ:', 'prefs-watchlist-days-max' => 'പരമാവധി 7 ദിവസം', @@ -1281,6 +1316,7 @@ $1", 'contextlines' => 'ഓരോ സന്ദർശനത്തിലും ചേർക്കപ്പെട്ട വരികൾ:', 'contextchars' => 'ഓരോ വരിയുടേയും പ്രസക്തി:', 'stub-threshold' => 'അപൂർണ്ണമായ കണ്ണിയെന്നു സ്ഥാപിക്കാനുള്ള ത്വരകം (ബൈറ്റുകൾ):', +'stub-threshold-disabled' => 'നിർജ്ജീവമാക്കപ്പെട്ടിരിക്കുന്നു', 'recentchangesdays' => 'പുതിയ മാറ്റങ്ങളിൽ കാണിക്കേണ്ട ദിവസങ്ങളുടെ എണ്ണം:', 'recentchangesdays-max' => 'പരമാവധി {{PLURAL:$1|ഒരു ദിവസം|$1 ദിവസങ്ങൾ}}', 'recentchangescount' => 'സ്വതേ പ്രദർശിപ്പിക്കേണ്ട തിരുത്തലുകളുടെ എണ്ണം:', @@ -1314,6 +1350,7 @@ $1", 'prefs-files' => 'പ്രമാണങ്ങൾ', 'prefs-custom-css' => 'സ്വന്തം സി.എസ്.എസ്.', 'prefs-custom-js' => 'സ്വന്തം ജെ.എസ്.', +'prefs-common-css-js' => 'എല്ലാ ദൃശ്യരൂപങ്ങൾക്കുമായി പങ്ക് വെയ്ക്കപ്പെട്ട സി.എസ്.എസ്./ജെ.എസ്.:', 'prefs-reset-intro' => 'സൈറ്റിൽ സ്വതേയുണ്ടാവേണ്ട ക്രമീകരണങ്ങൾ പുനഃക്രമീകരിക്കാൻ താങ്കൾക്ക് ഈ താൾ ഉപയോഗിക്കാവുന്നതാണ്. ഇത് തിരിച്ചു ചെയ്യാൻ സാദ്ധ്യമല്ല.', 'prefs-emailconfirm-label' => 'ഇമെയിൽ സ്ഥിരീകരണം:', @@ -1352,9 +1389,15 @@ $1", 'prefs-advancedrendering' => 'വിപുലമായ ഉപാധികൾ', 'prefs-advancedsearchoptions' => 'വിപുലമായ ഉപാധികൾ', 'prefs-advancedwatchlist' => 'വിപുലമായ ഉപാധികൾ', -'prefs-display' => 'പ്രദർശന ഐച്ഛികങ്ങൾ', +'prefs-displayrc' => 'പ്രദർശന ഐച്ഛികങ്ങൾ', +'prefs-displaysearchoptions' => 'പ്രദർശന ഐച്ഛികങ്ങൾ', +'prefs-displaywatchlist' => 'പ്രദർശന ഐച്ഛികങ്ങൾ', 'prefs-diffs' => 'വ്യത്യാസങ്ങൾ', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'സാധുതയുള്ളതെന്ന് തോന്നുന്നു', +'email-address-validity-invalid' => 'സാധുതയുള്ള വിലാസം ആവശ്യമാണ്!', + # User rights 'userrights' => 'ഉപയോക്തൃ അവകാശ പരിപാലനം', 'userrights-lookup-user' => 'ഉപയോക്തൃസംഘങ്ങളെ പരിപാലിക്കുക', @@ -1368,7 +1411,7 @@ $1", 'userrights-groups-help' => 'ഈ ഉപയോക്താവ് ഉൾപ്പെട്ടിട്ടുള്ള സംഘങ്ങൾ താങ്കൾക്ക് മാറ്റാവുന്നതാണ്: *ഉപയോക്താവ് ആ സംഘത്തിലുണ്ടെന്ന് ശരിയിട്ട ചതുരം അർത്ഥമാക്കുന്നു. *ഉപയോക്താവ് ആ സംഘത്തിലില്ലെന്ന് ശരിയിടാത്ത ചതുരം അർത്ഥമാക്കുന്നു. -*ഒരു * ഒരിക്കൽ സംഘം കൂട്ടിച്ചേർത്താൻ പിന്നീട് അത് നീക്കാൻ താങ്കൾക്ക് കഴിയില്ലന്നോ, അല്ലെങ്കിൽ തിരിച്ചോ അർത്ഥമാക്കുന്നു.', +*സംഘങ്ങളോടൊപ്പമുള്ള *, ഒരിക്കൽ മാറ്റം വരുത്തിയാൽ പിന്നീട് അതിൽ മാറ്റം വരുത്താൻ താങ്കൾക്ക് കഴിയില്ലെന്ന് അർത്ഥമാക്കുന്നു.', 'userrights-reason' => 'കാരണം:', 'userrights-no-interwiki' => 'മറ്റ് വിക്കികളിലെ ഉപയോക്തൃ അവകാശങ്ങൾ തിരുത്തുവാൻ താങ്കൾക്ക് അനുമതിയില്ല.', 'userrights-nodatabase' => '$1 എന്ന ഡാറ്റാബേസ് നിലവിലില്ല അല്ലെങ്കിൽ പ്രാദേശികമല്ല.', @@ -1382,7 +1425,7 @@ $1", 'group-user' => 'ഉപയോക്താക്കൾ', 'group-autoconfirmed' => 'യാന്ത്രികമായി സ്ഥിരീകരിക്കപ്പെട്ട ഉപയോക്താക്കൾ', 'group-bot' => 'യന്ത്രങ്ങൾ', -'group-sysop' => 'സിസോപ്പുകൾ', +'group-sysop' => 'കാര്യനിർവാഹകർ', 'group-bureaucrat' => 'ബ്യൂറോക്രാറ്റുകൾ', 'group-suppress' => 'മേൽനോട്ടങ്ങൾ', 'group-all' => '(എല്ലാം)', @@ -1417,7 +1460,7 @@ $1", 'right-upload' => 'പ്രമാണങ്ങൾ അപ്‌ലോഡ് ചെയ്യുക', 'right-reupload' => 'നിലവിലുള്ള പ്രമാണങ്ങളുടെ മുകളിലേയ്ക്ക് അപ്‌‌ലോഡ് ചെയ്യുക', 'right-reupload-own' => 'സ്വയം അപ്‌ലോഡ് ചെയ്ത പ്രമാണങ്ങൾക്കു മുകളിലേയ്ക്ക് പ്രമാണങ്ങൾ അപ്‌ലോഡ് ചെയ്യുക', -'right-reupload-shared' => 'പങ്ക് വെയ്ക്കപ്പെട്ട മീഡിയ ശേഖരിണിയെ പ്രാദേശികമായി അതിലംഘിക്കുക', +'right-reupload-shared' => 'പങ്ക് വെയ്ക്കപ്പെട്ട മീഡിയ സംഭരണിയെ പ്രാദേശികമായി അതിലംഘിക്കുക', 'right-upload_by_url' => 'യു.ആർ.എല്ലിൽ നിന്നും പ്രമാണങ്ങൾ അപ്‌ലോഡ് ചെയ്യുക', 'right-purge' => 'സ്ഥിരീകരണം ഒന്നും ഇല്ലാതെ സൈറ്റിന്റെ കാഷെ ഒരു താളിനായി പർജ് ചെയ്യുക', 'right-autoconfirmed' => 'അർദ്ധസംരക്ഷിത താളുകൾ തിരുത്തുക', @@ -1439,6 +1482,7 @@ $1", 'right-hideuser' => 'ഒരു ഉപയോക്തൃനാമത്തെ തടയുക, പരസ്യമായി കാണപ്പെടുന്നതിൽ നിന്നും മറയ്ക്കുന്നു', 'right-ipblock-exempt' => 'ഐ.പി. തടയലുകൾ, സ്വതേയുള്ള തടയലുകൾ, റേഞ്ച് തടയലുകൾ ഒക്കെ ബാധകമല്ലാതിരിക്കുക', 'right-proxyunbannable' => 'പ്രോക്സികളെ സ്വതേ തടയുന്നത് ബാധകമല്ലാതിരിക്കുക', +'right-unblockself' => 'തടയപ്പെട്ടവർ സ്വയം തടയൽ നീക്കുക', 'right-protect' => 'സംരക്ഷണ മാനത്തിൽ മാറ്റം വരുത്തുക, സംരക്ഷിത താളുകൾ തിരുത്തുക', 'right-editprotected' => 'സംരക്ഷിത താളുകൾ തിരുത്തുക (നിർഝരിത സംരക്ഷണം അല്ലാത്തത്)', 'right-editinterface' => 'ഉപയോക്തൃ സമ്പർക്കമുഖത്തിൽ മാറ്റം വരുത്തുക', @@ -1461,7 +1505,6 @@ $1", 'right-siteadmin' => 'ഡേറ്റാബേസ് തുറക്കുക, പൂട്ടുക', 'right-reset-passwords' => 'മറ്റ് ഉപയോക്താക്കളുടെ രഹസ്യവാക്കുകൾ റീസെറ്റ് ചെയ്യുക', 'right-override-export-depth' => 'കണ്ണിവത്കരിക്കപ്പെട്ട താളുകളുടെ ആഴം 5 വരെയുള്ള താളുകൾ കയറ്റുമതി ചെയ്യുക', -'right-versiondetail' => 'സോഫ്റ്റ്‌‌വെയർ പതിപ്പ് വിവരങ്ങൾ വിശദമായി കാട്ടുക', 'right-sendemail' => 'മറ്റുപയോക്താക്കൾക്ക് ഇമെയിൽ അയയ്ക്കുക', # User rights log @@ -1512,14 +1555,9 @@ $1", 'recentchanges-legend' => 'സമീപകാല മാറ്റങ്ങളുടെ ക്രമീകരണം', 'recentchangestext' => '{{SITENAME}} സംരംഭത്തിലെ ഏറ്റവും പുതിയ മാറ്റങ്ങൾ ഇവിടെ കാണാം.', 'recentchanges-feed-description' => 'ഈ ഫീഡ് ഉപയോഗിച്ച് വിക്കിയിലെ പുതിയ മാറ്റങ്ങൾ നിരീക്ഷിക്കുക.', -'recentchanges-label-legend' => 'സൂചന: $1.', -'recentchanges-legend-newpage' => '$1 - പുതിയ താൾ', 'recentchanges-label-newpage' => 'ഒരു പുതിയ താൾ സൃഷ്ടിച്ചിരിക്കുന്നു', -'recentchanges-legend-minor' => '$1 - ചെറിയ തിരുത്ത്', -'recentchanges-label-minor' => 'ഇതൊരു ചെറിയ തിരുത്തലാണ്', -'recentchanges-legend-bot' => '$1 - യന്ത്രം ഉപയോഗിച്ചുള്ള തിരുത്ത്', -'recentchanges-label-bot' => 'ഒരു യന്ത്രം നടത്തിയ തിരുത്താണിത്', -'recentchanges-legend-unpatrolled' => '$1 - റോന്തുചുറ്റപ്പെടാത്ത തിരുത്ത്', +'recentchanges-label-minor' => 'ഇതൊരു ചെറിയ തിരുത്താണ്', +'recentchanges-label-bot' => 'ഇതൊരു യന്ത്രം നടത്തിയ തിരുത്താണ്', 'recentchanges-label-unpatrolled' => 'ഇതുവരെ റോന്തു ചുറ്റപ്പെടാത്ത ഒരു തിരുത്താണിത്', 'rcnote' => "കഴിഞ്ഞ {{PLURAL:$2|ദിവസം|'''$2''' ദിവസങ്ങൾക്കുള്ളിൽ}} സംഭവിച്ച, {{PLURAL:$1|'''1''' തിരുത്തൽ|'''$1''' തിരുത്തലുകൾ}} താഴെക്കാണാം. ശേഖരിച്ച സമയം: $4, $5.", 'rcnotefrom' => '$2 മുതലുള്ള മാറ്റങ്ങൾ ($1 എണ്ണം വരെ കാണാം).', @@ -1565,6 +1603,9 @@ $1", 'upload_directory_missing' => 'അപ്‌‌ലോഡ് ഡയറക്ടറി ($1) ലഭ്യമല്ല, അത് സൃഷ്ടിക്കാൻ വെബ്‌‌സെർവറിനു സാധിക്കില്ല.', 'upload_directory_read_only' => 'വെബ് സെർവറിനു അപ്‌ലോഡ് ഡയറക്ടറിയിലേക്ക് ($1) എഴുതാൻ കഴിഞ്ഞില്ല.', 'uploaderror' => 'അപ്‌ലോഡ് പിഴവ്', +'upload-recreate-warning' => "'''ശ്രദ്ധിക്കുക: ഇതേ പേരിലുള്ള ഒരു പ്രമാണം മായ്ക്കുകയോ മാറ്റുകയോ ചെയ്തിരിക്കുന്നു.''' + +ഈ താളിന്റെ മായ്ക്കൽ രേഖയും മാറ്റൽ രേഖയും സ്ഥിരീകരിക്കുന്നതിനായി നൽകിയിരിക്കുന്നു:", 'uploadtext' => "താഴെ കാണുന്ന ഫോം പ്രമാണങ്ങൾ അപ്‌ലോഡ് ചെയ്യുവാൻ വേണ്ടി ഉപയോഗിക്കുക. നിലവിൽ അപ്‌ലോഡ് ചെയ്തിരിക്കുന്ന പ്രമാണങ്ങൾ കാണുവാൻ [[Special:FileList|അപ്‌ലോഡ് ചെയ്ത പ്രമാണങ്ങളുടെ പട്ടിക]] സന്ദർശിക്കുക. (പുതുക്കിയ) അപ്‌‌ലോഡുകൾ [[Special:Log/upload|അപ്‌ലോഡ് രേഖ]], മായ്ക്കപ്പെട്ടവ [[Special:Log/delete|മായ്ക്കൽ രേഖയിലും]] കാണാവുന്നതാണ്‌. @@ -1598,6 +1639,17 @@ $1", 'filetype-banned-type' => "'''\".\$1\"''' അനുവദനീയമല്ലാത്ത ഒരു പ്രമാണ തരം ആണ്‌. {{PLURAL:\$3|പ്രമാണ തരം|പ്രമാണ തരങ്ങൾ}} \$2 ആണ് അഭിലഷണീയം.", 'filetype-missing' => 'പ്രമാണത്തിനു എക്സ്റ്റൻഷൻ (ഉദാ: ".jpg") ഇല്ല.', +'empty-file' => 'താങ്കൾ സമർപ്പിച്ച പ്രമാണം ശൂന്യമാണ്.', +'file-too-large' => 'താങ്കൾ സമർപ്പിച്ച പ്രമാണം വളരെ വലുതാണ്.', +'filename-tooshort' => 'പ്രമാണത്തിന്റെ പേര് വളരെ ചെറുതാണ്.', +'filetype-banned' => 'ഈ തരത്തിലുള്ള പ്രമാണങ്ങൾ നിരോധിക്കപ്പെട്ടിരിക്കുന്നു.', +'verification-error' => 'ഈ പ്രമാണം പ്രമാണ പരിശോധന വിജയിച്ചിട്ടില്ല.', +'hookaborted' => 'താങ്കൾ വരുത്താൻ ശ്രമിച്ച മാറ്റം ഒരു അനുബന്ധത്തിന്റെ കൊളുത്തിനാൽ റദ്ദാക്കപ്പെട്ടു.', +'illegal-filename' => 'പ്രമാണത്തിന്റെ പേര് അനുവദനീയമല്ല.', +'overwrite' => 'നിലവിലുള്ള പ്രമാണത്തിന്റെ മുകളിൽ സ്ഥാപിക്കൽ അനുവദിച്ചിട്ടില്ല.', +'unknown-error' => 'അപരിചിതമായ പിഴവ് സംഭവിച്ചിരിക്കുന്നു.', +'tmp-create-error' => 'താത്കാലിക പ്രമാണം സൃഷ്ടിക്കാൻ കഴിയില്ല.', +'tmp-write-error' => 'താത്കാലിക പ്രമാണം സ്ഥാപിക്കാൻ ശ്രമിക്കുമ്പോൾ പിഴവുണ്ടായി.', 'large-file' => 'പ്രമാണങ്ങളുടെ വലിപ്പം $1-ൽ കൂടരുതെന്നാണ്‌ നിഷ്ക്കർഷിക്കപ്പെട്ടിരിക്കുന്നത്. ഈ പ്രമാണത്തിന്റെ വലിപ്പം $2 ആണ്‌.', 'largefileserver' => 'സെർവറിൽ ചിട്ടപ്പെടുത്തിയതുപ്രകാരം ഈ പ്രമാണത്തിന്റെ വലിപ്പം അനുവദനീയമായതിലും കൂടുതലാണ്‌.', 'emptyfile' => 'താങ്കൾ അപ്‌ലോഡ് ചെയ്ത പ്രമാണം ശൂന്യമാണെന്നു കാണുന്നു. @@ -1627,13 +1679,14 @@ $1", 'file-exists-duplicate' => 'ഈ പ്രമാണം ഇനി പറയുന്ന {{PLURAL:$1|പ്രമാണത്തിന്റെ|പ്രമാണങ്ങളുടെ}} അപരനാണ്‌:', 'file-deleted-duplicate' => 'ഈ പ്രമാണത്തിനു സദൃശമായ പ്രമാണം ([[:$1]]) മുമ്പ് മായ്ക്കപ്പെട്ടിട്ടുണ്ട്. ആ പ്രമാണത്തിന്റെ മായ്ക്കൽ ചരിത്രം എടുത്തു പരിശോധിച്ച ശേഷം മാത്രം വീണ്ടും അപ്‌‌ലോഡ് ചെയ്യുക.', -'successfulupload' => 'അപ്‌ലോഡ് വിജയിച്ചിരിക്കുന്നു', 'uploadwarning' => 'അപ്‌ലോഡ് മുന്നറിയിപ്പ്', 'uploadwarning-text' => 'ദയവായി താഴെയുള്ള പ്രമാണ വിവരണങ്ങൾ പുതുക്കി വീണ്ടും ശ്രമിക്കുക.', 'savefile' => 'പ്രമാണം കാത്ത് സൂക്ഷിക്കുക', 'uploadedimage' => '"[[$1]]" അപ്‌ലോഡ് ചെയ്തു.', 'overwroteimage' => '"[[$1]]" എന്ന പ്രമാണത്തിന്റെ പുതിയ പതിപ്പ് അപ്‌ലോഡ് ചെയ്തിരിക്കുന്നു', 'uploaddisabled' => 'അപ്‌ലോഡുകൾ പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു.', +'copyuploaddisabled' => 'യൂ.ആർ.എൽ. വഴിയുള്ള അപ്‌‌ലോഡ് നിർജ്ജീവമാക്കിയിരിക്കുന്നു.', +'uploadfromurl-queued' => 'താങ്കളുടെ അപ്‌‌ലോഡ് നിർവഹിക്കാൻ ഉൾപ്പെടുത്തിയിരിക്കുന്നു.', 'uploaddisabledtext' => 'പ്രമാണം അപ്‌ലോഡ് ചെയ്യുന്നതു സാദ്ധ്യമല്ലാതാക്കിയിരിക്കുന്നു.', 'php-uploaddisabledtext' => 'പി.എച്ച്.പി.യിൽ പ്രമാണ അപ്‌‌ലോഡുകൾ സാദ്ധ്യമല്ലാതാക്കിയിരിക്കുന്നു. ദയവായി file_uploads ക്രമീകരണങ്ങൾ പരിശോധിക്കുക.', @@ -1653,6 +1706,14 @@ $1", ഈ പ്രമാണം അപ്‌ലോഡ് ചെയ്യുന്നതു തുടരണമോ എന്നതു പരിശോധിക്കുന്നത് നന്നായിരിക്കും. താങ്കളുടെ പരിശോധനയ്ക്കായി പ്രമാണത്തിന്റെ മായ്ക്കൽ രേഖ ഇവിടെ കൊടുത്തിരിക്കുന്നു:", 'filename-bad-prefix' => "താങ്കൾ അപ്‌ലോഡ് ചെയ്യുവാൻ ശ്രമിക്കുന്ന പ്രമാണത്തിന്റെ പേര്‌ '''\"\$1\"''' എന്നാണ്‌ തുടങ്ങുന്നത്. ഇതു ഡിജിറ്റൽ ക്യാമറയിൽ പടങ്ങൾക്കു യാന്ത്രികമായി ചേർക്കുന്ന പേരാണ്‌. ദയവു ചെയ്തു താങ്കൾ അപ്‌ലോഡ് ചെയ്യുന്ന പ്രമാണത്തെ വിശദീകരിക്കുന്ന അനുയോജ്യമായ ഒരു പേരു തിരഞ്ഞെടുക്കുക.", +'upload-success-subj' => 'അപ്‌ലോഡ് വിജയിച്ചിരിക്കുന്നു', +'upload-success-msg' => 'താങ്കളുടെ [$2]-ൽ നിന്നും വിജയകരമായി അപ്‌ലോഡ് ചെയ്തിരിക്കുന്നു. [[:{{ns:file}}:$1]] കാണുക', +'upload-failure-subj' => 'അപ്‌‌ലോഡിൽ പിഴവുണ്ട്', +'upload-failure-msg' => '[$2] എന്നതിൽ നിന്നും താങ്കൾ നടത്തിയ അപ്‌‌ലോഡിൽ ഒരു പ്രശ്നമുണ്ട്: + +$1', +'upload-warning-subj' => 'അപ്‌ലോഡ് മുന്നറിയിപ്പ്', +'upload-warning-msg' => 'താങ്കൾ [$2]-ൽ നിന്നും ചെയ്ത അപ്‌ലോഡിൽ പിഴവുണ്ടായിരിക്കുന്നു. [[Special:Upload/stash/$1|അപ്‌ലോഡ് ഫോമിലേക്ക്]] തിരിച്ചുപോയി താങ്കൾക്ക് ഈ പ്രശ്നം പരിഹരിക്കാവുന്നതാണ്.', 'upload-proto-error' => 'തെറ്റായ പ്രോട്ടോക്കോൾ', 'upload-proto-error-text' => 'റിമോട്ട് അപ്‌ലോഡിനു http:// അഥവാ ftp:// എന്നു തുടങ്ങുന്ന URL വേണം.', @@ -1715,6 +1776,7 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.', 'listfiles_search_for' => 'മീഡിയ പ്രമാണം തിരയുക:', 'imgfile' => 'പ്രമാണം', 'listfiles' => 'പ്രമാണങ്ങളുടെ പട്ടിക', +'listfiles_thumb' => 'ലഘുചിത്രം', 'listfiles_date' => 'തീയതി', 'listfiles_name' => 'പേര്', 'listfiles_user' => 'ഉപയോക്താവ്', @@ -1732,7 +1794,7 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.', 'filehist-current' => 'നിലവിലുള്ളത്', 'filehist-datetime' => 'തീയതി/സമയം', 'filehist-thumb' => 'ലഘുചിത്രം', -'filehist-thumbtext' => 'മാറ്റം $1-ന്റെ ലഘുചിത്രം', +'filehist-thumbtext' => '$1-ലെ പതിപ്പിന്റെ ലഘുചിത്രം', 'filehist-nothumb' => 'ലഘുചിത്രമില്ല', 'filehist-user' => 'ഉപയോക്താവ്', 'filehist-dimensions' => 'അളവുകൾ', @@ -1829,9 +1891,9 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.', 'statistics-edits' => '{{SITENAME}} സം‌രംഭത്തിന്റെ തുടക്കം മുതലുള്ള തിരുത്തലുകൾ', 'statistics-edits-average' => 'ഒരു താളിൽ ശരാശരി തിരുത്തലുകൾ', 'statistics-views-total' => 'ആകെ സന്ദർശനങ്ങൾ', +'statistics-views-total-desc' => 'നിലവില്ലാത്ത താളുകളിലും പ്രത്യേക താളുകളിലും ഉള്ള എടുത്തുനോക്കലുകൾ ഉൾപ്പെടുത്തിയിട്ടില്ല', 'statistics-views-peredit' => 'ഓരോ തിരുത്തലിലും ഉള്ള എടുത്തുനോട്ടങ്ങൾ', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue ജോബ് ക്യൂ] നീളം', -'statistics-users' => 'രജിസ്റ്റർ ചെയ്തിട്ടുള്ള [[Special:ListUsers|ഉപയോക്താക്കൾ]]', +'statistics-users' => 'അംഗത്വമെടുത്തിട്ടുള്ള [[Special:ListUsers|ഉപയോക്താക്കൾ]]', 'statistics-users-active' => 'സജീവ ഉപയോക്താക്കൾ', 'statistics-users-active-desc' => 'കഴിഞ്ഞ {{PLURAL:$1|ദിവസം|$1 ദിവസങ്ങൾക്കുള്ളിൽ}} പ്രവർത്തിച്ചിട്ടുള്ള ഉപയോക്താക്കൾ', 'statistics-mostpopular' => 'ഏറ്റവുമധികം സന്ദർശിക്കപ്പെട്ട താളുകൾ', @@ -1842,7 +1904,7 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.', 'doubleredirects' => 'ഇരട്ട തിരിച്ചുവിടലുകൾ', 'doubleredirectstext' => 'ഈ താളിൽ ഒരു തിരിച്ചുവിടലിൽ നിന്നും മറ്റു തിരിച്ചുവിടൽ താളുകളിലേയ്ക്ക് പോകുന്ന താളുകൾ കൊടുത്തിരിക്കുന്നു. ഓരോ വരിയിലും ഒന്നാമത്തേയും രണ്ടാമത്തേയും തിരിച്ചുവിടൽ താളിലേക്കുള്ള കണ്ണികളും, രണ്ടാമത്തെ തിരിച്ചുവിടൽ താളിൽ നിന്നു ശരിയായ ലക്ഷ്യതാളിലേക്കുള്ള കണ്ണികളും ഉൾക്കൊള്ളുന്നു. -വെട്ടിക്കൊടുത്തിരിക്കുന്നവ ശരിയാക്കേണ്ടതുണ്ട്.', +വെട്ടിക്കൊടുത്തിരിക്കുന്നവ ശരിയാക്കേണ്ടതുണ്ട്.', 'double-redirect-fixed-move' => '[[$1]] മാറ്റിയിരിക്കുന്നു. ഇത് ഇപ്പോൾ [[$2]] എന്നതിലേയ്ക്ക് തിരിച്ചുവിടപ്പെട്ടിരിക്കുന്നു.', 'double-redirect-fixer' => 'തിരിച്ചുവിടൽ ശരിയാക്കിയത്', @@ -1866,6 +1928,8 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.', 'nmembers' => '{{PLURAL:$1|ഒരു അംഗം|$1 അംഗങ്ങൾ}}', 'nrevisions' => '{{PLURAL:$1|ഒരു പതിപ്പ്|$1 പതിപ്പുകൾ}}', 'nviews' => '{{PLURAL:$1|ഒരു സന്ദർശനം|$1 സന്ദർശനങ്ങൾ}}', +'nimagelinks' => '{{PLURAL:$1|ഒരു താളിൽ|$1 താളുകളിൽ}} ഉപയോഗിച്ചിരിക്കുന്നു', +'ntransclusions' => '{{PLURAL:$1|ഒരു താളിൽ|$1 താളുകളിൽ}} ഉപയോഗിച്ചിരിക്കുന്നു', 'specialpage-empty' => 'ഈ താൾ ശൂന്യമാണ്.', 'lonelypages' => 'അനാഥ താളുകൾ', 'lonelypagestext' => 'താഴെക്കാണുന്ന താളുകളിലേക്ക് {{SITENAME}} സം‌രംഭത്തിലെ മറ്റു താളുകളിൽനിന്നും കണ്ണികളോ ഉൾപ്പെടുത്തലോ നിലവിലില്ല.', @@ -1901,7 +1965,7 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.', 'protectedtitlestext' => 'താഴെക്കാണുന്ന തലക്കെട്ടുകൾ സൃഷ്ടിക്കുന്നത് നിരോധിച്ചിരിക്കുന്നു', 'protectedtitlesempty' => 'ഈ ചരങ്ങൾ ഉപയോഗിച്ചു തലക്കെട്ടുകൾ ഒന്നും തന്നെ സം‌രക്ഷിക്കപ്പെട്ടിട്ടില്ല.', 'listusers' => 'ഉപയോക്താക്കളുടെ പട്ടിക', -'listusers-editsonly' => 'തിരുത്തലുകൾ വരുത്തിയ ഉപയോക്താക്കളെമാത്രം കാണിക്കുക', +'listusers-editsonly' => 'തിരുത്തലുകൾ ചെയ്തിട്ടുള്ള ഉപയോക്താക്കളെ മാത്രം കാണിക്കുക', 'listusers-creationsort' => 'സൃഷ്ടിക്കപ്പെട്ട തീയതി അനുസരിച്ച് ക്രമീകരിക്കുക', 'usereditcount' => '{{PLURAL:$1|ഒരു തിരുത്തൽ|$1 തിരുത്തലുകൾ}}', 'usercreated' => '$1 $2-നു സൃഷ്ടിച്ചത്', @@ -1934,7 +1998,7 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.', 'speciallogtitlelabel' => 'തലക്കെട്ട്:', 'log' => 'പ്രവർത്തന രേഖകൾ', 'all-logs-page' => 'എല്ലാ പൊതുരേഖകളും', -'alllogstext' => '{{SITENAME}} സംരംഭത്തിൽ ലഭ്യമായ പ്രവർത്തന രേഖകൾ സംയുക്തമായി ഈ താളിൽ കാണാം. താങ്കൾക്ക് രേഖകളുടെ സ്വഭാവം, ഉപയോക്തൃനാമം(കേസ് സെൻസിറ്റീവ്), ബന്ധപ്പെട്ട താൾ (കേസ് സെൻസിറ്റീവ്) മുതലായവ തിരഞ്ഞെടുത്ത് അന്വേഷണം കൂടുതൽ ക്ഌപ്തപ്പെടുത്താവുന്നതാണ്.', +'alllogstext' => '{{SITENAME}} സംരംഭത്തിൽ ലഭ്യമായ വിവിധ പ്രവർത്തന രേഖകൾ ഈ താളിൽ ഒരുമിച്ച് കാണാം. താങ്കൾക്ക് രേഖകളുടെ സ്വഭാവം, ഉപയോക്തൃനാമം (കേസ് സെൻസിറ്റീവ്), ബന്ധപ്പെട്ട താൾ (കേസ് സെൻസിറ്റീവ്) മുതലായവ തിരഞ്ഞെടുത്ത് അന്വേഷണം കൂടുതൽ ക്ഌപ്തപ്പെടുത്താവുന്നതാണ്.', 'logempty' => 'പ്രവർത്തനരേഖയിൽ ബന്ധമുള്ളവ ഇല്ല.', 'log-title-wildcard' => 'ഈ വാക്കിൽ തുടങ്ങുന്ന തിരച്ചിൽ ഫലങ്ങൾ', @@ -2023,34 +2087,40 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.', 'listgrouprights-removegroup-self-all' => 'സ്വന്തം അംഗത്വത്തിൽ നിന്ന് എല്ലാ സംഘങ്ങളേയും നീക്കംചെയ്യുക', # E-mail user -'mailnologin' => 'അയയ്ക്കാനുള്ള വിലാസം ലഭ്യമല്ല', -'mailnologintext' => 'മറ്റ് ഉപയോക്താക്കൾക്കു ഇമെയിലയക്കുവാൻ താങ്കൾ [[Special:UserLogin|ലോഗിൻ]] ചെയ്തിരിക്കുകയും, സാധുവായ ഒരു ഇമെയിൽ വിലാസം താങ്കളുടെ [[Special:Preferences|ക്രമീകരണങ്ങൾ]] താളിൽ സജ്ജീകരിച്ചിരിക്കുകയും വേണം.', -'emailuser' => 'ഈ ഉപയോക്താവിനു ഇമെയിൽ അയക്കുക', -'emailpage' => 'ഉപയോക്താവിന് ഇമെയിൽ അയക്കുക', -'emailpagetext' => 'താഴെ കാണുന്ന ഫോം മറ്റൊരു ഉപയോക്താവിന്‌ ഇമെയിൽ അയക്കാൻ ഉപയോഗിക്കാവുന്നതാണ്. +'mailnologin' => 'അയയ്ക്കാനുള്ള വിലാസം ലഭ്യമല്ല', +'mailnologintext' => 'മറ്റ് ഉപയോക്താക്കൾക്കു ഇമെയിലയക്കുവാൻ താങ്കൾ [[Special:UserLogin|ലോഗിൻ]] ചെയ്തിരിക്കുകയും, സാധുവായ ഒരു ഇമെയിൽ വിലാസം താങ്കളുടെ [[Special:Preferences|ക്രമീകരണങ്ങൾ]] താളിൽ സജ്ജീകരിച്ചിരിക്കുകയും വേണം.', +'emailuser' => 'ഈ ഉപയോക്താവിനു ഇമെയിൽ അയക്കുക', +'emailpage' => 'ഉപയോക്താവിന് ഇമെയിൽ അയക്കുക', +'emailpagetext' => 'താഴെ കാണുന്ന ഫോം മറ്റൊരു ഉപയോക്താവിന്‌ ഇമെയിൽ അയക്കാൻ ഉപയോഗിക്കാവുന്നതാണ്. [[Special:Preferences|ഉപയോക്താവിന്റെ ക്രമീകരണങ്ങളിൽ]] കൊടുത്തിട്ടുള്ള ഇമെയിൽ വിലാസം "ദാതാവ്" ആയി വരുന്നതാണ്‌, അതുകൊണ്ട് സ്വീകർത്താവിന്‌ താങ്കൾക്ക് നേരിട്ട് മറുപടി അയക്കാൻ കഴിയും.', -'usermailererror' => 'മെയിലുണ്ടായ പിഴവ് തിരിച്ചയച്ചിരിക്കുന്നു:', -'defemailsubject' => '{{SITENAME}} സം‌രംഭത്തിൽ നിന്നുള്ള ഇമെയിൽ', -'noemailtitle' => 'ഇമെയിൽ വിലാസം ഇല്ല', -'noemailtext' => 'ഈ ഉപയോക്താവ് സാധുവായ ഇമെയിൽ വിലാസം നൽകിയിട്ടില്ല.', -'nowikiemailtitle' => 'ഇമെയിൽ അനുവദിക്കപ്പെട്ടിട്ടില്ല', -'nowikiemailtext' => 'ഈ ഉപയോക്താവ് മറ്റുള്ളവരിൽ നിന്നും ഇമെയിൽ സ്വീകരിക്കുന്നത് ഒഴിവാക്കിയിരിക്കുന്നു.', -'email-legend' => 'മറ്റൊരു {{SITENAME}} ഉപയോക്താവിനു ഇമെയിൽ അയയ്ക്കുക', -'emailfrom' => 'ദാതാവ്:', -'emailto' => 'സ്വീകർത്താവ്:', -'emailsubject' => 'വിഷയം:', -'emailmessage' => 'സന്ദേശം:', -'emailsend' => 'അയക്കൂ', -'emailccme' => 'ഇമെയിലിന്റെ പകർപ്പ് എനിക്കും അയക്കുക.', -'emailccsubject' => '$1 എന്ന ഉപയോക്താവിനയച്ച സന്ദേശത്തിന്റെ പകർപ്പ്: $2', -'emailsent' => 'ഇമെയിൽ അയച്ചിരിക്കുന്നു', -'emailsenttext' => 'താങ്കളുടെ ഇമെയിൽ അയച്ചു കഴിഞ്ഞിരിക്കുന്നു.', -'emailuserfooter' => 'ഈ ഇമെയിൽ {{SITENAME}} സംരംഭത്തിലെ "ഉപയോക്താവിന്‌ ഇമെയിൽ അയയ്ക്കുക" എന്ന സൌകര്യം ഉപയോഗിച്ച് $1 എന്ന ഉപയോക്താവ് $2 എന്ന ഉപയോക്താവിന് അയച്ചതാണ്.', +'usermailererror' => 'മെയിലുണ്ടായ പിഴവ് തിരിച്ചയച്ചിരിക്കുന്നു:', +'defemailsubject' => '{{SITENAME}} സം‌രംഭത്തിൽ നിന്നുള്ള ഇമെയിൽ', +'usermaildisabled' => 'ഉപയോക്തൃ ഇമെയിൽ പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു', +'usermaildisabledtext' => 'ഈ വിക്കിയിലെ മറ്റുപയോക്താക്കൾക്ക് ഇമെയിൽ അയയ്ക്കാൻ താങ്കൾക്ക് കഴിയില്ല', +'noemailtitle' => 'ഇമെയിൽ വിലാസം ഇല്ല', +'noemailtext' => 'ഈ ഉപയോക്താവ് സാധുവായ ഇമെയിൽ വിലാസം നൽകിയിട്ടില്ല.', +'nowikiemailtitle' => 'ഇമെയിൽ അനുവദിക്കപ്പെട്ടിട്ടില്ല', +'nowikiemailtext' => 'ഈ ഉപയോക്താവ് മറ്റുള്ളവരിൽ നിന്നും ഇമെയിൽ സ്വീകരിക്കുന്നത് ഒഴിവാക്കിയിരിക്കുന്നു.', +'email-legend' => 'മറ്റൊരു {{SITENAME}} ഉപയോക്താവിനു ഇമെയിൽ അയയ്ക്കുക', +'emailfrom' => 'ദാതാവ്:', +'emailto' => 'സ്വീകർത്താവ്:', +'emailsubject' => 'വിഷയം:', +'emailmessage' => 'സന്ദേശം:', +'emailsend' => 'അയക്കൂ', +'emailccme' => 'ഇമെയിലിന്റെ പകർപ്പ് എനിക്കും അയക്കുക.', +'emailccsubject' => '$1 എന്ന ഉപയോക്താവിനയച്ച സന്ദേശത്തിന്റെ പകർപ്പ്: $2', +'emailsent' => 'ഇമെയിൽ അയച്ചിരിക്കുന്നു', +'emailsenttext' => 'താങ്കളുടെ ഇമെയിൽ അയച്ചു കഴിഞ്ഞിരിക്കുന്നു.', +'emailuserfooter' => 'ഈ ഇമെയിൽ {{SITENAME}} സംരംഭത്തിലെ "ഉപയോക്താവിന്‌ ഇമെയിൽ അയയ്ക്കുക" എന്ന സൌകര്യം ഉപയോഗിച്ച് $1 എന്ന ഉപയോക്താവ് $2 എന്ന ഉപയോക്താവിന് അയച്ചതാണ്.', + +# User Messenger +'usermessage-summary' => 'വ്യവസ്ഥാസന്ദേശം ഉപേക്ഷിക്കുക.', +'usermessage-editor' => 'വ്യവസ്ഥാസന്ദേശകൻ', # Watchlist 'watchlist' => 'ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക', 'mywatchlist' => 'ഞാൻ ശ്രദ്ധിക്കുന്നവ', -'watchlistfor' => "(ഉപയോക്താവ് '''$1''')", +'watchlistfor2' => '$1 എന്ന ഉപയോക്താവ് $2.', 'nowatchlist' => 'താങ്കൾ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ ഇനങ്ങളൊന്നുമില്ല.', 'watchlistanontext' => 'താങ്കൾ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക കാണുവാനോ തിരുത്തുവാനോ $1 ചെയ്യുക.', 'watchnologin' => 'ലോഗിൻ ചെയ്തിട്ടില്ല', @@ -2094,7 +2164,7 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.', 'enotif_body' => 'പ്രിയ $WATCHINGUSERNAME, -{{SITENAME}} സം‌രംഭത്തിലെ $PAGETITLE താൾ $PAGEEDITDATE-ൽ $PAGEEDITOR എന്ന ഉപയോക്താവ് $CHANGEDORCREATED, ഇപ്പോഴുള്ള പതിപ്പിനായി $PAGETITLE_URL കാണുക. +{{SITENAME}} സം‌രംഭത്തിലെ $PAGETITLE എന്ന താൾ $PAGEEDITDATE-ൽ $PAGEEDITOR എന്ന ഉപയോക്താവ് $CHANGEDORCREATED, ഇപ്പോഴുള്ള പതിപ്പിനായി $PAGETITLE_URL കാണുക. $NEWPAGE @@ -2109,6 +2179,9 @@ $NEWPAGE താങ്കളുടെ {{SITENAME}} സുഹൃദ് അറിയിപ്പ് സജ്ജീകരണം -- +ഇമെയിൽ അറിയിപ്പ് സജ്ജീകരണങ്ങളിൽ മാറ്റംവരുത്താൻ, സന്ദർശിക്കുക +{{fullurl:{{#special:Preferences}}}} + ശ്രദ്ധിക്കുന്ന പട്ടികയിലെ ക്രമീകരണങ്ങളിൽ മാറ്റം വരുത്താൻ, സന്ദർശിക്കുക {{fullurl:{{#special:Watchlist}}/edit}} @@ -2162,7 +2235,10 @@ $UNWATCHURL 'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|സംവാദം]]) നടത്തിയ തിരുത്തലുകൾ നീക്കം ചെയ്തിരിക്കുന്നു; നിലവിലുള്ള പതിപ്പ് [[User:$1|$1]] സൃഷ്ടിച്ചതാണ്', 'revertpage-nouser' => '(ഉപയോക്തൃനാമം നീക്കിയിരിക്കുന്നു) നടത്തിയ തിരുത്തലുകൾ [[User:$1|$1]] സൃഷ്ടിച്ച അവസാന പതിപ്പിലേയ്ക്ക് മുൻപ്രാപനം ചെയ്തിരിക്കുന്നു', 'rollback-success' => '$1 ചെയ്ത തിരുത്തൽ തിരസ്ക്കരിച്ചിരിക്കുന്നു; $2 ചെയ്ത തൊട്ടു മുൻപത്തെ പതിപ്പിലേക്ക് സേവ് ചെയ്യുന്നു.', -'sessionfailure' => 'താങ്കളുടെ ലോഗിൻ സെഷനിൽ പ്രശ്നങ്ങളുള്ളതായി കാണുന്നു; + +# Edit tokens +'sessionfailure-title' => 'സെഷൻ പരാജയപ്പെട്ടിരിക്കുന്നു', +'sessionfailure' => 'താങ്കളുടെ ലോഗിൻ സെഷനിൽ പ്രശ്നങ്ങളുള്ളതായി കാണുന്നു; സെഷൻ തട്ടിയെടുക്കൽ ഒഴിവാക്കാനുള്ള മുൻകരുതലായി ഈ പ്രവൃത്തി റദ്ദാക്കിയിരിക്കുന്നു. ദയവായി പിന്നോട്ട് പോയി താങ്കൾ വന്ന താളിൽ ചെന്ന്, വീണ്ടും ശ്രമിക്കുക.', @@ -2293,18 +2369,22 @@ $1', 'month' => 'മാസം:', 'year' => 'വർഷം:', -'sp-contributions-newbies' => 'പുതിയ അംഗങ്ങൾ നടത്തിയ തിരുത്തലുകൾ മാത്രം', -'sp-contributions-newbies-sub' => 'പുതിയ ഉപയോക്താക്കൾ ചെയ്തവ', -'sp-contributions-newbies-title' => 'പുതിയ അംഗത്വമെടുത്ത ഉപയോക്താക്കളുടെ സേവനങ്ങൾ', -'sp-contributions-blocklog' => 'തടയൽ രേഖ', -'sp-contributions-deleted' => 'മായ്ക്കപ്പെട്ട ഉപയോക്തൃസംഭാവനകൾ', -'sp-contributions-logs' => 'പ്രവർത്തനരേഖകൾ', -'sp-contributions-talk' => 'സംവാദം', -'sp-contributions-userrights' => 'ഉപയോക്തൃ അവകാശങ്ങളുടെ പരിപാലനം', -'sp-contributions-blocked-notice' => 'ഈ ഉപയോക്താവ് ഇപ്പോൾ തടയപ്പെട്ടിരിക്കുകയാണ്. അവലംബമായി തടയൽ രേഖയുടെ പുതിയ ഭാഗം താഴെ കൊടുത്തിരിക്കുന്നു:', -'sp-contributions-search' => 'ചെയ്ത സേവനങ്ങൾ', -'sp-contributions-username' => 'ഐ.പി. വിലാസം അഥവാ ഉപയോക്തൃനാമം:', -'sp-contributions-submit' => 'തിരയൂ', +'sp-contributions-newbies' => 'പുതിയ അംഗങ്ങൾ നടത്തിയ തിരുത്തലുകൾ മാത്രം', +'sp-contributions-newbies-sub' => 'പുതിയ ഉപയോക്താക്കൾ ചെയ്തവ', +'sp-contributions-newbies-title' => 'പുതിയ അംഗത്വമെടുത്ത ഉപയോക്താക്കളുടെ സേവനങ്ങൾ', +'sp-contributions-blocklog' => 'തടയൽ രേഖ', +'sp-contributions-deleted' => 'മായ്ക്കപ്പെട്ട ഉപയോക്തൃസംഭാവനകൾ', +'sp-contributions-uploads' => 'അപ്‌ലോഡുകൾ', +'sp-contributions-logs' => 'പ്രവർത്തനരേഖകൾ', +'sp-contributions-talk' => 'സംവാദം', +'sp-contributions-userrights' => 'ഉപയോക്തൃ അവകാശങ്ങളുടെ പരിപാലനം', +'sp-contributions-blocked-notice' => 'ഈ ഉപയോക്താവ് ഇപ്പോൾ തടയപ്പെട്ടിരിക്കുകയാണ്. അവലംബമായി തടയൽ രേഖയുടെ പുതിയ ഭാഗം താഴെ കൊടുത്തിരിക്കുന്നു:', +'sp-contributions-blocked-notice-anon' => 'ഈ ഐ.പി. വിലാസം ഇപ്പോൾ തടയപ്പെട്ടിരിക്കുകയാണ്. +അവലംബമായി തടയൽ രേഖയുടെ പുതിയഭാഗം താഴെ കൊടുത്തിരിക്കുന്നു:', +'sp-contributions-search' => 'ചെയ്ത സേവനങ്ങൾ', +'sp-contributions-username' => 'ഐ.പി. വിലാസം അഥവാ ഉപയോക്തൃനാമം:', +'sp-contributions-toponly' => 'ഒടുവിലത്തെ നാൾപ്പതിപ്പുകൾ മാത്രം പ്രദർശിപ്പിക്കുക', +'sp-contributions-submit' => 'തിരയൂ', # What links here 'whatlinkshere' => 'അനുബന്ധകണ്ണികൾ', @@ -2365,7 +2445,6 @@ $1', 'ipb-edit-dropdown' => 'തടഞ്ഞതിന്റെ കാരണം തിരുത്തുക', 'ipb-unblock-addr' => '$1 അംഗത്വത്തിനുള്ള തടയൽ നീക്കുക', 'ipb-unblock' => 'ഒരു ഐ.പി. വിലാസത്തിനോ ഉപയോക്താവിനോ ഉള്ള തടയൽ നീക്കംചെയ്യുക', -'ipb-blocklist-addr' => '$1 അനുഭവിക്കുന്ന വിലക്കുകൾ', 'ipb-blocklist' => 'നിലവിലുള്ള തടയലുകൾ', 'ipb-blocklist-contribs' => '$1 നൽകിയ സംഭാവനകൾ', 'unblockip' => 'ഉപയോക്താവിനുള്ള തടയൽ നീക്കുക', @@ -2376,8 +2455,8 @@ $1', 'ipblocklist' => 'തടയപ്പെട്ട ഉപയോക്താക്കൾ', 'ipblocklist-legend' => 'തടഞ്ഞ ഒരു ഉപയോക്താവിനെ തിരയുക', 'ipblocklist-username' => 'ഉപയോക്തൃനാമം അല്ലെങ്കിൽ ഐ.പി. വിലാസം:', -'ipblocklist-sh-userblocks' => '$1 അംഗത്വ തടയലുകൾ', -'ipblocklist-sh-tempblocks' => '$1 താൽക്കാലിക തടയലുകൾ', +'ipblocklist-sh-userblocks' => 'അംഗത്വ തടയലുകൾ $1', +'ipblocklist-sh-tempblocks' => 'താൽക്കാലിക തടയലുകൾ $1', 'ipblocklist-sh-addressblocks' => 'ഒറ്റയൊറ്റ ഐ.പി. തടയലുകൾ $1', 'ipblocklist-submit' => 'തിരയൂ', 'ipblocklist-localblock' => 'പ്രാദേശിക തടയൽ', @@ -2435,6 +2514,8 @@ $1 നിലവിൽ തടയപ്പെട്ടതാണ്.
    'sorbs_create_account_reason' => '{{SITENAME}} ഉപയോഗിക്കുന്ന DNSBL ൽ താങ്കളുടെ ഐ.പി. വിലാസം ഒരു ഓപ്പൺ പ്രോക്സിയായാണു രേഖപ്പെടുത്തിട്ടുള്ളത്. താങ്കൾക്ക് അംഗത്വമെടുക്കാൻ സാദ്ധ്യമല്ല.', 'cant-block-while-blocked' => 'താങ്കൾ തടയപ്പെട്ടിരിക്കുമ്പോൾ മറ്റുപയോക്താക്കളെ തടയാൻ താങ്കൾക്ക് സാധിക്കില്ല.', 'cant-see-hidden-user' => 'താങ്കൾ തടയാൻ ശ്രമിക്കുന്ന ഉപയോക്താവ് മുമ്പേ തടയപ്പെടുകയും മറയ്ക്കപ്പെടുകയും ചെയ്യപ്പെട്ടതാണ്. താങ്കൾക്ക് ഉപയോക്താവിനെ മറയ്ക്കാനുള്ള അവകാശം ഇല്ലെങ്കിൽ, ഉപയോക്താവിനെതിരെ ഉള്ള തടയൽ കാണാനോ തിരുത്താനോ കഴിയുന്നതല്ല.', +'ipbblocked' => 'മറ്റുള്ളവരെ തടയാനോ അവരുടെ തടയൽ നീക്കാനോ താങ്കൾക്ക് കഴിയില്ല. കാരണം താങ്കൾ തന്നെ തടയപ്പെട്ടിരിക്കുകയാണ്', +'ipbnounblockself' => 'താങ്കൾക്ക് സ്വന്തം തടയൽ നീക്കാൻ അനുമതിയില്ല', # Developer tools 'lockdb' => 'ഡാറ്റാബേസ് ബന്ധിക്കുക', @@ -2475,6 +2556,21 @@ $1 നിലവിൽ തടയപ്പെട്ടതാണ്.
    '''മുന്നറിയിപ്പ്!:''' ഈ പ്രവൃത്തി ഒരു നല്ലതാളിൽ അപ്രതീക്ഷിതവും, ഉഗ്രവുമായ ഫലങ്ങൾ ഉണ്ടാക്കിയേക്കാം. മുന്നോട്ടു പോകുന്നതിനു മുമ്പ് താങ്കൾ ചെയ്യുന്നതെന്താണെന്ന് വ്യക്തമായി മനസ്സിലാക്കുക.", +'movepagetext-noredirectfixer' => "താഴെയുള്ള ഫോം ഒരു താളിനെ പുനർനാമകരണം ചെയ്യാനുള്ളതാണ്. +താളിന്റെ പഴയരൂപങ്ങളും ഈ മാറ്റത്തിന് വിധേയമാക്കപ്പെടും. +പഴയ തലക്കെട്ട്, പുതിയ തലക്കെട്ടുള്ള താളിലേക്കുള്ള ഒരു തിരിച്ചുവിടൽ താളായി മാറും. +പഴയതാളിലേക്കുള്ള ലിങ്കുകൾ ഈ മാറ്റത്തിൽ മാറുകയില്ല. +[[Special:DoubleRedirects|ഇരട്ട തിരിച്ചുവിടലുകളോ]], [[Special:BrokenRedirects|ഫലപ്രദമല്ലാത്ത തിരിച്ചുവിടലുകളോ]] ഉണ്ടാകുന്നുണ്ടോയെന്ന് ദയവായി പരിശോധിക്കുക. +ലിങ്കുകൾ ശരിയായി പ്രവർത്തിക്കുന്നുണ്ടോ എന്ന് പരിശോധിച്ച് ഉറപ്പു വരുത്തേണ്ടത് താങ്കളുടെ ചുമതലയാണ്. + +താങ്കൾ പുതിയതായി ഉദ്ദേശിക്കുന്ന തലക്കെട്ടിൽ ഒരു താൾ നേരത്തേ നിലവിലുണ്ടെങ്കിൽ '''പുനർനാമകരണം സാധിക്കില്ല'''. +അല്ലെങ്കിൽ അതൊരു തിരിച്ചുവിടൽ താളോ, ശൂന്യമായ താളോ അതിനു മറ്റു പഴയരൂപങ്ങൾ ഇല്ലാതിരിക്കുകയോ ചെയ്യണം. +അതായത് താങ്കൾ ഒരു താൾ തെറ്റായി പുനർനാമകരണം ചെയ്താൽ മാത്രമേ അതിനേ തിരിച്ചാക്കാൻ സാധിക്കുകയുള്ളു. +നിലവിലുള്ള ഒരു താളിന്റെ മുകളിൽ അതേ തലക്കെട്ടിൽ മറ്റൊരു താളുണ്ടാക്കാൻ സാധിക്കില്ല. + +'''മുന്നറിയിപ്പ്!:''' +ഈ പ്രവൃത്തി ഒരു നല്ലതാളിൽ അപ്രതീക്ഷിതവും, ഉഗ്രവുമായ ഫലങ്ങൾ സൃഷ്ടിച്ചേക്കാം. +മുന്നോട്ടു പോകുന്നതിനു മുമ്പ് താങ്കൾ ചെയ്യുന്നതെന്താണെന്ന് വ്യക്തമായി മനസ്സിലാക്കുക.", 'movepagetalktext' => "'''ബന്ധപ്പെട്ട സം‌വാദം താളും സ്വയം മാറ്റപ്പെടാതിരിക്കാനുള്ള കാരണങ്ങൾ''' *അതേ പേരിൽ തന്നെ ശൂന്യമല്ലാത്ത ഒരു സം‌വാദം താൾ നിലവിലുണ്ടെങ്കിൽ *താങ്കൾ താഴെയുള്ള ചെക്‍ബോക്സ് ഉപയോഗിച്ചിട്ടില്ലങ്കിൽ @@ -2529,6 +2625,7 @@ $1 നിലവിൽ തടയപ്പെട്ടതാണ്.
    'immobile-source-page' => 'ഈ താൾ മാറ്റാൻ സാദ്ധ്യമല്ല', 'immobile-target-page' => 'ലക്ഷ്യമാക്കിയ തലക്കെട്ടിലേക്ക് മാറ്റാൻ സാധിക്കില്ല.', 'imagenocrossnamespace' => 'പ്രമാണം അതിനായി അല്ലാത്ത നാമമേഖലയിലേയ്ക്ക് മാറ്റാൻ കഴിയില്ല', +'nonfile-cannot-move-to-file' => 'പ്രമാണമല്ലാത്തവ പ്രമാണം നാമമേഖലയിലേയ്ക്ക് മാറ്റാൻ കഴിയില്ല.', 'imagetypemismatch' => 'പുതിയ പ്രമാണത്തിന്റെ എക്സ്റ്റെൻഷൻ അതിന്റെ തരവുമായി ഒത്തുപോകുന്നില്ല.', 'imageinvalidfilename' => 'പ്രമാണത്തിനു ലക്ഷ്യമിട്ട പേര് അസാധുവാണ്', 'fix-double-redirects' => 'പഴയ തലക്കെട്ടിലേക്കുള്ള തിരിച്ചുവിടൽ താളുകളും ഇതോടൊപ്പം പുതുക്കുക', @@ -2607,6 +2704,7 @@ $1 നിലവിൽ തടയപ്പെട്ടതാണ്.
    'importstart' => 'താളുകൾ ഇറക്കുമതി ചെയ്യുന്നു...', 'import-revision-count' => '{{PLURAL:$1|ഒരു പതിപ്പ്|$1 പതിപ്പുകൾ}}', 'importnopages' => 'ഇറക്കുമതി ചെയ്യാൻ പറ്റിയ താളുകൾ ഇല്ല.', +'imported-log-entries' => '{{PLURAL:$1|രേഖയിലെ ഒരുൾപ്പെടുത്തൽ|രേഖയിലെ $1 ഉൾപ്പെടുത്തലുകൾ}} ഇറക്കുമതി ചെയ്തു.', 'importfailed' => 'ഇറക്കുമതി പരാജയപ്പെട്ടു: $1', 'importunknownsource' => 'അപരിചിതമായ ഇറക്കുമതി സ്രോതസ്സ് തരം', 'importcantopen' => 'ഇറക്കുമതി പ്രമാണം തുറക്കാൻ പറ്റിയില്ല', @@ -2702,6 +2800,8 @@ $1 നിലവിൽ തടയപ്പെട്ടതാണ്.
    'tooltip-upload' => 'അപ്‌ലോഡ് തുടങ്ങുക', 'tooltip-rollback' => 'അവസാനത്തെ ആൾ നടത്തിയ തിരുത്തലുകളെ ഒരൊറ്റ ക്ലിക്ക് കൊണ്ട് മുൻ അവസ്ഥയിലേക്ക് തിരിച്ചുവെയ്ക്കാൻ "റോൾബാക്ക്" സഹായിക്കുന്നു.', 'tooltip-undo' => 'മാറ്റം തിരസ്കരിക്കുക എന്നത് ഈ മാറ്റം മുൻ അവസ്ഥയിലേക്ക് മാറ്റുകയും അത് എഡിറ്റ് ഫോമിൽ പ്രിവ്യൂ ആയി കാട്ടുകയും ചെയ്യും. അതുകൊണ്ട് തിരുത്തലിന്റെ കാരണം ചുരുക്കമായി നൽകാൻ സാധിക്കുന്നതാണ്.', +'tooltip-preferences-save' => 'ക്രമീകരണങ്ങൾ ഓർത്തുവെയ്ക്കുക', +'tooltip-summary' => 'ചെറിയൊരു ചുരുക്കം ചേർക്കുക', # Stylesheets 'common.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. എല്ലാ ദൃശ്യരൂപങ്ങൾക്കും ബാധകമായിരിക്കും */', @@ -2792,7 +2892,7 @@ latex, dvips,എന്നിവ ശരിയായാണോ ഇൻസ്റ് 'patrol-log-page' => 'റോന്തുചുറ്റൽ പ്രവർത്തനരേഖ', 'patrol-log-header' => 'റോന്തുചുറ്റപ്പെട്ട നാൾപ്പതിപ്പുകളുടെ രേഖയാണിത്', 'patrol-log-line' => '$2 താളിലെ $1 റോന്തുചുറ്റപ്പെട്ടിരിക്കുന്നു $3', -'patrol-log-auto' => '(യാന്ത്രികം)', +'patrol-log-auto' => '(സ്വയം)', 'patrol-log-diff' => 'നാൾപ്പതിപ്പ് $1', 'log-show-hide-patrol' => 'റോന്തുചുറ്റൽ രേഖ $1', @@ -2815,14 +2915,17 @@ $1', 'imagemaxsize' => "ചിത്രത്തിന്റെ വലിപ്പം:
    ''(പ്രമാണത്തിന്റെ വിവരണ താളുകളിൽ)''", 'thumbsize' => 'ലഘുചിത്രത്തിന്റെ വലിപ്പം:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|താൾ|താളുകൾ}}', -'file-info' => '(പ്രമാണത്തിന്റെ വലിപ്പം: $1, MIME തരം: $2)', -'file-info-size' => '($1 × $2 പിക്സൽ, പ്രമാണത്തിന്റെ വലിപ്പം: $3, MIME തരം: $4)', +'file-info' => 'പ്രമാണത്തിന്റെ വലിപ്പം: $1, മൈം തരം: $2', +'file-info-size' => '$1 × $2 പിക്സൽ, പ്രമാണത്തിന്റെ വലിപ്പം: $3, മൈം തരം: $4', 'file-nohires' => 'കൂടുതൽ വ്യക്തതയുള്ള ചിത്രം ലഭ്യമല്ല.', -'svg-long-desc' => '(SVG പ്രമാണം, നാമമാത്രമായ $1 × $2 പിക്സലുകൾ, പ്രമാണത്തിന്റെ വലിപ്പം: $3)', +'svg-long-desc' => 'SVG പ്രമാണം, നാമമാത്രമായ $1 × $2 പിക്സലുകൾ, പ്രമാണത്തിന്റെ വലിപ്പം: $3', 'show-big-image' => 'പൂർണ്ണ റെസലൂഷൻ', 'show-big-image-thumb' => 'ഈ പ്രിവ്യൂവിന്റെ വലിപ്പം: $1 × $2 പിക്സലുകൾ', 'file-info-gif-looped' => 'പുനരാവർത്തിതം', 'file-info-gif-frames' => '{{PLURAL:$1|ഒരു ചട്ടം|$1 ചട്ടങ്ങൾ}}', +'file-info-png-looped' => 'പുനരാവർത്തിതം', +'file-info-png-repeat' => '{{PLURAL:$1|ഒരു തവണ|$1 തവണ}} പ്രവർത്തിപ്പിച്ചു', +'file-info-png-frames' => '{{PLURAL:$1|ഒരു ഫ്രെയിം|$1 ഫ്രെയിം}}', # Special:NewFiles 'newimages' => 'പുതിയ പ്രമാണങ്ങളുടെ ഗാലറി', @@ -2970,6 +3073,7 @@ $1', 'exif-gpsareainformation' => 'GPS പ്രദേശത്തിന്റെ പേര്‌', 'exif-gpsdatestamp' => 'GPS തീയതി', 'exif-gpsdifferential' => 'ജി.പി.എസ്. വ്യത്യാസം ശരിയാക്കൽ', +'exif-objectname' => 'ചെറിയ തലക്കെട്ട്', # EXIF attributes 'exif-compression-1' => 'ചുരുക്കാത്തത്', @@ -3129,24 +3233,24 @@ $1', 'limitall' => 'എല്ലാം', # E-mail address confirmation -'confirmemail' => 'ഇമെയിൽ വിലാസം സ്ഥിരീകരിക്കൽ', -'confirmemail_noemail' => '[[Special:Preferences|താങ്കളുടെ ക്രമീകരണങ്ങളുടെ കൂടെ]] സാധുവായൊരു ഇമെയിൽ വിലാസം സജ്ജീകരിച്ചിട്ടില്ല.', -'confirmemail_text' => '{{SITENAME}} സം‌രംഭത്തിൽ ഇമെയിൽ സൗകര്യം ഉപയോഗിക്കണമെങ്കിൽ താങ്കൾ താങ്കളുടെ ഇമെയിൽ വിലാസത്തിന്റെ സാധുത തെളിയിച്ചിരിക്കണം. താങ്കളുടെ ഇമെയിൽ വിലാസത്തിലേക്ക് സ്ഥിരീകരണ മെയിൽ അയക്കുവാൻ താഴെയുള്ള ബട്ടൺ അമർത്തുക. താങ്കൾക്ക് അയക്കുന്ന ഇമെയിലിൽ ഒരു സ്ഥിരീകരണ കോഡ് ഉണ്ട്. ആ കോഡിൽ അമർത്തിയാൽ താങ്കളുടെ വിലാസത്തിന്റെ സാധുത തെളിയിക്കപ്പെടും.', -'confirmemail_pending' => 'താങ്കളുടെ അംഗത്വം ഈ അടുത്ത് ഉണ്ടാക്കിയതാണെങ്കിൽ, ഒരു സ്ഥിരീകരണ കോഡ് താങ്കൾക്ക് ഇമെയിൽ ചെയ്തിട്ടുണ്ട്. പുതിയ സ്ഥിരീകരണ കോഡ് ആവശ്യപ്പെടാൻ ശ്രമിക്കുന്നതിനു മുൻപ് ആദ്യത്തെ സ്ഥിരീകരണ കോഡിനായി കുറച്ച് സമയം കാത്തിരിക്കൂ.', -'confirmemail_send' => 'സ്ഥിരീകരണ കോഡ് (confirmation code) മെയിൽ ചെയ്യുക', -'confirmemail_sent' => 'സ്ഥിരീകരണ ഇമെയിൽ അയച്ചിരിക്കുന്നു.', -'confirmemail_oncreate' => 'ഒരു സ്ഥിരീകരണ കോഡ് താങ്കളുടെ ഇമെയിൽ വിലാസത്തിലേക്ക് അയച്ചിട്ടുണ്ട്. +'confirmemail' => 'ഇമെയിൽ വിലാസം സ്ഥിരീകരിക്കൽ', +'confirmemail_noemail' => '[[Special:Preferences|താങ്കളുടെ ക്രമീകരണങ്ങളുടെ കൂടെ]] സാധുവായൊരു ഇമെയിൽ വിലാസം സജ്ജീകരിച്ചിട്ടില്ല.', +'confirmemail_text' => '{{SITENAME}} സം‌രംഭത്തിൽ ഇമെയിൽ സൗകര്യം ഉപയോഗിക്കണമെങ്കിൽ താങ്കൾ താങ്കളുടെ ഇമെയിൽ വിലാസത്തിന്റെ സാധുത തെളിയിച്ചിരിക്കണം. താങ്കളുടെ ഇമെയിൽ വിലാസത്തിലേക്ക് സ്ഥിരീകരണ മെയിൽ അയക്കുവാൻ താഴെയുള്ള ബട്ടൺ അമർത്തുക. താങ്കൾക്ക് അയക്കുന്ന ഇമെയിലിൽ ഒരു സ്ഥിരീകരണ കോഡ് ഉണ്ട്. ആ കോഡിൽ അമർത്തിയാൽ താങ്കളുടെ വിലാസത്തിന്റെ സാധുത തെളിയിക്കപ്പെടും.', +'confirmemail_pending' => 'താങ്കളുടെ അംഗത്വം ഈ അടുത്ത് ഉണ്ടാക്കിയതാണെങ്കിൽ, ഒരു സ്ഥിരീകരണ കോഡ് താങ്കൾക്ക് ഇമെയിൽ ചെയ്തിട്ടുണ്ട്. പുതിയ സ്ഥിരീകരണ കോഡ് ആവശ്യപ്പെടാൻ ശ്രമിക്കുന്നതിനു മുൻപ് ആദ്യത്തെ സ്ഥിരീകരണ കോഡിനായി കുറച്ച് സമയം കാത്തിരിക്കൂ.', +'confirmemail_send' => 'സ്ഥിരീകരണ കോഡ് (confirmation code) മെയിൽ ചെയ്യുക', +'confirmemail_sent' => 'സ്ഥിരീകരണ ഇമെയിൽ അയച്ചിരിക്കുന്നു.', +'confirmemail_oncreate' => 'ഒരു സ്ഥിരീകരണ കോഡ് താങ്കളുടെ ഇമെയിൽ വിലാസത്തിലേക്ക് അയച്ചിട്ടുണ്ട്. ലോഗിൻ ചെയ്യുന്നതിനു ഈ കോഡ് ആവശ്യമില്ല. പക്ഷെ വിക്കിയിൽ ഇമെയിലുമായി ബന്ധപ്പെട്ട സേവനങ്ങൾ ഉപയോഗിക്കുന്നതിനു മുൻപ് പ്രസ്തുത കോഡ് ഉപയോഗിച്ച് ഇമെയിൽ സ്ഥിരീകരിച്ചിരിക്കണം.', -'confirmemail_sendfailed' => '{{SITENAME}} സം‌രംഭത്തിന്‌ സ്ഥിരീകരണ ഇമെയിൽ അയക്കുവാൻ സാധിച്ചില്ല. വിലാസത്തിൽ സാധുവല്ലാത്ത അക്ഷരങ്ങൾ ഉണ്ടോ എന്നു ദയവായി പരിശോധിക്കുക. +'confirmemail_sendfailed' => '{{SITENAME}} സം‌രംഭത്തിന്‌ സ്ഥിരീകരണ ഇമെയിൽ അയക്കുവാൻ സാധിച്ചില്ല. വിലാസത്തിൽ സാധുവല്ലാത്ത അക്ഷരങ്ങൾ ഉണ്ടോ എന്നു ദയവായി പരിശോധിക്കുക. ഇമെയിൽ അയക്കാൻ ശ്രമിച്ചപ്പോൾ ലഭിച്ച മറുപടി: $1', -'confirmemail_invalid' => 'അസാധുവായ സ്ഥിരീകരണ കോഡ്. കോഡിന്റെ കാലാവധി തീർന്നിരിക്കണം.', -'confirmemail_needlogin' => 'ഇമെയിൽ വിലാസം സ്ഥിരീകരിക്കാൻ താങ്കൾ $1 ചെയ്തിരിക്കണം.', -'confirmemail_success' => 'താങ്കളുടെ ഇമെയിൽ വിലാസം സ്ഥിരീകരിക്കപ്പെട്ടിരിക്കുന്നു. താങ്കൾക്ക് ഇനി [[Special:UserLogin|ലോഗിൻ ചെയ്ത്]] വിക്കി ആസ്വദിക്കാം.', -'confirmemail_loggedin' => 'താങ്കളുടെ ഇമെയിൽ വിലാസം സ്ഥിരീകരിക്കപ്പെട്ടിരിക്കുന്നു.', -'confirmemail_error' => 'താങ്കളുടെ സ്ഥിരീകരണം സൂക്ഷിച്ചുവയ്ക്കാനുള്ള ശ്രമത്തിനിടയ്ക്ക് എന്തോ പിഴവ് സംഭവിച്ചു.', -'confirmemail_subject' => '{{SITENAME}} ഇമെയിൽ വിലാസ സ്ഥിരീകരണം', -'confirmemail_body' => '$1 എന്ന ഐ.പി. വിലാസത്തിൽ നിന്നു (ഒരു പക്ഷെ താങ്കളായിരിക്കാം), "$2" എന്ന പേരോടു കൂടിയും ഈ ഇമെയിൽ വിലാസത്തോടു കൂടിയും {{SITENAME}} സം‌രംഭത്തിൽ ഒരു അംഗത്വം സൃഷ്ടിച്ചിരിക്കുന്നു. +'confirmemail_invalid' => 'അസാധുവായ സ്ഥിരീകരണ കോഡ്. കോഡിന്റെ കാലാവധി തീർന്നിരിക്കണം.', +'confirmemail_needlogin' => 'ഇമെയിൽ വിലാസം സ്ഥിരീകരിക്കാൻ താങ്കൾ $1 ചെയ്തിരിക്കണം.', +'confirmemail_success' => 'താങ്കളുടെ ഇമെയിൽ വിലാസം സ്ഥിരീകരിക്കപ്പെട്ടിരിക്കുന്നു. താങ്കൾക്ക് ഇനി [[Special:UserLogin|ലോഗിൻ ചെയ്ത്]] വിക്കി ആസ്വദിക്കാം.', +'confirmemail_loggedin' => 'താങ്കളുടെ ഇമെയിൽ വിലാസം സ്ഥിരീകരിക്കപ്പെട്ടിരിക്കുന്നു.', +'confirmemail_error' => 'താങ്കളുടെ സ്ഥിരീകരണം സൂക്ഷിച്ചുവയ്ക്കാനുള്ള ശ്രമത്തിനിടയ്ക്ക് എന്തോ പിഴവ് സംഭവിച്ചു.', +'confirmemail_subject' => '{{SITENAME}} ഇമെയിൽ വിലാസ സ്ഥിരീകരണം', +'confirmemail_body' => '$1 എന്ന ഐ.പി. വിലാസത്തിൽ നിന്നു (ഒരു പക്ഷെ താങ്കളായിരിക്കാം), "$2" എന്ന പേരോടു കൂടിയും ഈ ഇമെയിൽ വിലാസത്തോടു കൂടിയും {{SITENAME}} സം‌രംഭത്തിൽ ഒരു അംഗത്വം സൃഷ്ടിച്ചിരിക്കുന്നു. ഈ അംഗത്വം താങ്കളുടേതാണ്‌ എന്നു സ്ഥിരീകരിക്കുവാനും {{SITENAME}} സം‌രംഭത്തിൽ ഇമെയിലുമായി ബന്ധപ്പെട്ട സേവനങ്ങൾ ഉപയോഗിക്കുവാനും താഴെ കാണുന്ന കണ്ണി ബ്രൗസറിൽ തുറക്കുക. @@ -3158,8 +3262,33 @@ $5 ഈ സ്ഥിരീകരണ കോഡിന്റെ കാലാവധി $4 നു തീരും.', -'confirmemail_invalidated' => 'ഇമെയിൽ വിലാസത്തിന്റെ സ്ഥിരീകരണം റദ്ദാക്കിയിരിക്കുന്നു', -'invalidateemail' => 'ഇമെയിൽ വിലാസ സ്ഥിരീകരണം റദ്ദാക്കുക', +'confirmemail_body_changed' => '$1 എന്ന ഐ.പി. വിലാസത്തിൽ നിന്നും ആരോ ഒരാൾ, മിക്കവാറും താങ്കളായിരിക്കാം, {{SITENAME}} സംരംഭത്തിലെ "$2" എന്ന അംഗത്വത്തിന്റെ ഇമെയിൽ വിലാസം, ഈ വിലാസമായി മാറ്റി നൽകിയിരിക്കുന്നു. + +ഈ അംഗത്വം ശരിക്കും താങ്കളുടേതാണെന്ന് സ്ഥിരീകരിക്കാനും, {{SITENAME}} സംരംഭത്തിൽ ഇമെയിൽ സൗകര്യങ്ങൾ പുനർസജ്ജമാക്കാനും, താങ്കളുടെ ബ്രൗസറിൽ ഇനി നൽകുന്ന കണ്ണി തുറക്കുക: + +$3 + +അംഗതം താങ്കളുടെത് *അല്ല* എന്നുണ്ടെങ്കിൽ ഇമെയിൽ വിലാസത്തിന്റെ സ്ഥിരീകരണം റദ്ദാക്കുവാൻ താഴെ നൽകിയിരിക്കുന്ന കണ്ണി പരിശോധിക്കുക: + +$5 + +ഈ സ്ഥിരീകരണ സൗകര്യം $4-നു അവസാനിക്കുന്നതാണ്.', +'confirmemail_body_set' => '$1 എന്ന ഐ.പി. വിലാസത്തിൽ നിന്നും ആരോ ഒരാൾ, മിക്കവാറും താങ്കളായിരിക്കും, +{{SITENAME}} സംരംഭത്തിലെ "$2" എന്ന അംഗത്വത്തിന്റെ ഇമെയിൽ വിലാസമായി ഈ വിലാസം നൽകിയിരിക്കുന്നു. + +{{SITENAME}} സംരംഭത്തിലെ ഈ അംഗത്വം താങ്കളുടെ തന്നെയാണെന്ന് ഉറപ്പാക്കാനും, +ഇമെയിൽ സൗകര്യങ്ങൾ വീണ്ടും സജ്ജമാക്കാനും ഈ കണ്ണി ബ്രൗസറിൽ തുറക്കുക: + +$3 + +ഈ അംഗത്വം താങ്കളുടേത് *അല്ല* എങ്കിൽ +ഇമെയിൽ വിലാസ സ്ഥിരീകരണം റദ്ദാക്കാൻ താഴെക്കൊടുത്തിരിക്കുന്ന കണ്ണി ഉപയോഗിക്കുക: + +$5 + +ഈ സ്ഥിരീകരണ കോഡ് $4-നു കാലഹരണപ്പെടുന്നതാണ്.', +'confirmemail_invalidated' => 'ഇമെയിൽ വിലാസത്തിന്റെ സ്ഥിരീകരണം റദ്ദാക്കിയിരിക്കുന്നു', +'invalidateemail' => 'ഇമെയിൽ വിലാസ സ്ഥിരീകരണം റദ്ദാക്കുക', # Scary transclusion 'scarytranscludedisabled' => '[അന്തർവിക്കി ഉൾപ്പെടുത്തൽ സജ്ജമല്ല]', @@ -3199,6 +3328,7 @@ $1', 'table_pager_first' => 'ആദ്യതാൾ', 'table_pager_last' => 'അവസാന താൾ', 'table_pager_limit' => 'ഓരോ താളിലും $1 ഇനങ്ങൾ വീതം പ്രദർശിപ്പിക്കുക', +'table_pager_limit_label' => 'ഓരോ താളിലുമുള്ള ഇനങ്ങൾ:', 'table_pager_limit_submit' => 'പോകൂ', 'table_pager_empty' => 'ഫലങ്ങൾ ഒന്നുമില്ല', @@ -3253,6 +3383,7 @@ $1', 'version-specialpages' => 'പ്രത്യേക താളുകൾ', 'version-parserhooks' => 'പാഴ്‌സർ കൊളുത്തുകൾ', 'version-variables' => 'ചരങ്ങൾ', +'version-skins' => 'ദൃശ്യരൂപങ്ങൾ', 'version-other' => 'മറ്റുള്ളവ', 'version-mediahandlers' => 'മീഡിയ കൈകാര്യോപകരണങ്ങൾ', 'version-hooks' => 'കൊളുത്തുകൾ', @@ -3264,6 +3395,13 @@ $1', 'version-hook-subscribedby' => 'വരിക്കാരനായത്', 'version-version' => '(പതിപ്പ് $1)', 'version-license' => 'അനുമതി', +'version-poweredby-credits' => "ഈ വിക്കി പ്രവർത്തിക്കാൻ '''[http://www.mediawiki.org/ മീഡിയവിക്കി]''' ഉപയോഗിക്കുന്നു. പകർപ്പവകാശം © 2001-$1 $2.", +'version-poweredby-others' => 'മറ്റുള്ളവർ', +'version-license-info' => 'മീഡിയവിക്കി ഒരു സ്വതന്ത്ര സോഫ്റ്റ്‌വേറാണ്; സ്വതന്ത്ര സോഫ്റ്റ്‌വേർ ഫൗണ്ടേഷൻ പ്രസിദ്ധീകരിച്ചിട്ടുള്ള ഗ്നു സാർവ്വജനിക അനുവാദപത്രത്തിന്റെ പതിപ്പ് 2 പ്രകാരമോ, അല്ലെങ്കിൽ (താങ്കളുടെ ഇച്ഛാനുസരണം) പിന്നീട് പ്രസിദ്ധീകരിച്ച ഏതെങ്കിലും പതിപ്പ് പ്രകാരമോ താങ്കൾക്കിത് പുനർവിതരണം ചെയ്യാനും ഒപ്പം/അല്ലെങ്കിൽ മാറ്റങ്ങൾ വരുത്താനും സാധിക്കുന്നതാണ്. + +മീഡിയവിക്കി താങ്കൾക്കുപകരിക്കുമെന്ന പ്രതീക്ഷയോടെയാണ് വിതരണം ചെയ്യുന്നത്, പക്ഷേ യാതൊരു ഗുണമേന്മോത്തരവാദിത്തവും വഹിക്കുന്നില്ല; വ്യാപാരയോഗ്യമെന്നോ പ്രത്യേക ഉപയോഗത്തിന് അനുയോജ്യമെന്നോ ഉള്ള യാതൊരു ഗുണമേന്മോത്തരവാദിത്തവും ഇത് ഉൾക്കൊള്ളുന്നില്ല. കൂടുതൽ വിവരങ്ങൾക്ക് ഗ്നു സാർവ്വ ജനിക അനുവാദപത്രം കാണുക. + +ഈ പ്രോഗ്രാമിനൊപ്പം [{{SERVER}}{{SCRIPTPATH}}/COPYING ഗ്നു സാർവ്വജനിക അനുവാദപത്രത്തിന്റെ ഒരു പകർപ്പ്] താങ്കൾക്ക് ലഭിച്ചിരിക്കും; ഇല്ലെങ്കിൽ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA എന്ന വിലാസത്തിലെഴുതുക അല്ലെങ്കിൽ [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html അനുവാദപത്രം ഓൺലൈൻ ആയി വായിക്കുക].', 'version-software' => 'ഇൻസ്റ്റോൾ ചെയ്ത സോഫ്റ്റ്‌വെയർ', 'version-software-product' => 'സോഫ്റ്റ്‌വെയർ ഉല്പ്പന്നം', 'version-software-version' => 'വിവരണം', @@ -3292,7 +3430,7 @@ $1', # Special:SpecialPages 'specialpages' => 'പ്രത്യേക താളുകൾ', 'specialpages-note' => '---- -* സർവോപയോഗ പ്രത്യേക താളുകൾ. +* സർവ്വോപയോഗ പ്രത്യേക താളുകൾ. * ഉപയോഗം പരിമിതപ്പെടുത്തിയിരിക്കുന്ന പ്രത്യേക താളുകൾ.', 'specialpages-group-maintenance' => 'പരിചരണം ആവശ്യമായവ', 'specialpages-group-other' => 'മറ്റു പ്രത്യേക താളുകൾ', @@ -3334,6 +3472,15 @@ $1', 'tags-edit' => 'തിരുത്തുക', 'tags-hitcount' => '{{PLURAL:$1|ഒരു മാറ്റം|$1 മാറ്റങ്ങൾ}}', +# Special:ComparePages +'comparepages' => 'താളുകൾ താരതമ്യപ്പെടുത്തുക', +'compare-selector' => 'താളിന്റെ നാൾപ്പതിപ്പുകൾ താരതമ്യപ്പെടുത്തുക', +'compare-page1' => 'താൾ 1', +'compare-page2' => 'താൾ 2', +'compare-rev1' => 'നാൾപ്പതിപ്പ് 1', +'compare-rev2' => 'നാൾപ്പതിപ്പ് 2', +'compare-submit' => 'താരതമ്യം ചെയ്യുക', + # Database error messages 'dberr-header' => 'ഈ വിക്കിയിൽ പ്രശ്നമുണ്ട്', 'dberr-problems' => 'ക്ഷമിക്കണം! ഈ സൈറ്റിൽ സങ്കേതിക തകരാറുകൾ അനുഭവപ്പെടുന്നുണ്ട്.', @@ -3350,8 +3497,13 @@ $1', 'htmlform-float-invalid' => 'താങ്കൾ നൽകിയ വില ഒരു അക്കമല്ല.', 'htmlform-int-toolow' => 'താങ്കൾ നൽകിയത് ഏറ്റവും കുറഞ്ഞ വിലയായ $1-നു താഴെയാണ്', 'htmlform-int-toohigh' => 'താങ്കൾ നൽകിയത് ഏറ്റവും കൂടിയ വിലയായ $1-നു മുകളിലാണ്', +'htmlform-required' => 'ഈ മൂല്യം ആവശ്യമാണ്', 'htmlform-submit' => 'സമർപ്പിക്കുക', 'htmlform-reset' => 'മാറ്റങ്ങൾ വേണ്ട', 'htmlform-selectorother-other' => 'മറ്റുള്ളവ', +# SQLite database support +'sqlite-has-fts' => 'പൂർണ്ണ-എഴുത്ത് തിരച്ചിൽ പിന്തുണയുള്ള $1', +'sqlite-no-fts' => 'പൂർണ്ണ-എഴുത്ത് തിരച്ചിൽ പിന്തുണയില്ലാത്ത $1', + ); diff --git a/languages/messages/MessagesMn.php b/languages/messages/MessagesMn.php index 528e7714..f82ee3a0 100644 --- a/languages/messages/MessagesMn.php +++ b/languages/messages/MessagesMn.php @@ -20,8 +20,8 @@ $namespaceNames = array( NS_USER => 'Хэрэглэгч', NS_USER_TALK => 'Хэрэглэгчийн_яриа', NS_PROJECT_TALK => '$1-н_хэлэлцүүлэг', - NS_FILE => 'Зураг', - NS_FILE_TALK => 'Зургийн_хэлэлцүүлэг', + NS_FILE => 'Файл', + NS_FILE_TALK => 'Файлын_хэлэлцүүлэг', NS_MEDIAWIKI => 'МедиаВики', NS_MEDIAWIKI_TALK => 'МедиаВикигийн_хэлэлцүүлэг', NS_TEMPLATE => 'Загвар', @@ -32,6 +32,11 @@ $namespaceNames = array( NS_CATEGORY_TALK => 'Ангиллын_хэлэлцүүлэг', ); +$namespaceAliases = array( + 'Зураг' => NS_FILE, + 'Зургийн_хэлэлцүүлэг' => NS_FILE_TALK, +); + $linkTrail = '/^([a-zабвгдеёжзийклмнопрстуфхцчшщъыьэюя“»]+)(.*)$/sDu'; $messages = array( @@ -50,8 +55,7 @@ $messages = array( 'tog-editsection' => '[Засварлах] линкээр хэсгийг засварладаг болгох', 'tog-editsectiononrightclick' => 'Хэсгийн гарчиг дээр баруун товчлуураар дарж засварладаг болгох (ЖаваСкрипт)', 'tog-showtoc' => 'Агуулгын хүснэгтийг үзүүлэх (3-с илүү хэсэгтэй хуудсуудад)', -'tog-rememberpassword' => 'Энэ компьютер дахь нэвтрэлийг санах', -'tog-editwidth' => 'Дэлгэцийг дүүргэхээр засварлах талбарыг өргөтгөх', +'tog-rememberpassword' => 'Энэхүү хөтөч дээрх нэвтрэлтийг санах (хамгийн ихдээ $1 {{PLURAL:$1|өдрийн|өдрийн}} турш)', 'tog-watchcreations' => 'Миний үүсгэсэн хуудсуудыг хянах жагсаалтанд оруулах', 'tog-watchdefault' => 'Миний засварласан хуудсуудыг хянах жагсаалтанд оруулах', 'tog-watchmoves' => 'Миний зөөсөн хуудсуудыг хянах жагсаалтанд оруулах', @@ -195,31 +199,21 @@ $messages = array( 'faqpage' => 'Project:Тогтмол тавигддаг асуултууд', # Vector skin -'vector-action-addsection' => 'Сэдэв нэмэх', -'vector-action-delete' => 'Устгах', -'vector-action-move' => 'Зөөх', -'vector-action-protect' => 'Хамгаалах', -'vector-action-undelete' => 'Үл устгах', -'vector-action-unprotect' => 'Үл хамгаалах', -'vector-namespace-category' => 'Ангилал', -'vector-namespace-help' => 'Тусламжийн хуудас', -'vector-namespace-image' => 'Файл', -'vector-namespace-main' => 'Хуудас', -'vector-namespace-media' => 'Медиа хуудас', -'vector-namespace-mediawiki' => 'Мессеж', -'vector-namespace-project' => 'Төслийн хуудас', -'vector-namespace-special' => 'Тусгай хуудас', -'vector-namespace-talk' => 'Хэлэлцүүлэг', -'vector-namespace-template' => 'Загвар', -'vector-namespace-user' => 'Хэрэглэгчийн хуудас', -'vector-view-create' => 'Үүсгэх', -'vector-view-edit' => 'Засварлах', -'vector-view-history' => 'Түүхийг үзэх', -'vector-view-view' => 'Унших', -'vector-view-viewsource' => 'Кодыг харах', -'actions' => 'Үйлдлүүд', -'namespaces' => 'Нэрний зайнууд', -'variants' => 'Хувилбарууд', +'vector-action-addsection' => 'Сэдэв нэмэх', +'vector-action-delete' => 'Устгах', +'vector-action-move' => 'Зөөх', +'vector-action-protect' => 'Хамгаалах', +'vector-action-undelete' => 'Үл устгах', +'vector-action-unprotect' => 'Үл хамгаалах', +'vector-simplesearch-preference' => 'Хайлтын сайжруулсан саналыг идэвхижүүлэх (зөвхөн Вектор скин)', +'vector-view-create' => 'Үүсгэх', +'vector-view-edit' => 'Засварлах', +'vector-view-history' => 'Түүхийг үзэх', +'vector-view-view' => 'Унших', +'vector-view-viewsource' => 'Кодыг харах', +'actions' => 'Үйлдлүүд', +'namespaces' => 'Нэрний зайнууд', +'variants' => 'Хувилбарууд', 'errorpagetitle' => 'Aлдаа', 'returnto' => '$1 руу буцах.', @@ -280,6 +274,9 @@ $messages = array( Дахин энэ хуудаст хандахынхаа өмнө түр хугацаагаар хүлээнэ үү. $1', +'pool-timeout' => 'Түгжээг хүлээх явцад хугацаа дуусав', +'pool-queuefull' => 'Пүүлийн дараалал дүүрсэн байна', +'pool-errorunknown' => 'Үл мэдэгдэх алдаа', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}}-н тухай', @@ -444,7 +441,7 @@ $2', 'yourname' => 'Хэрэглэгчийн нэр:', 'yourpassword' => 'Нууц үг:', 'yourpasswordagain' => 'Нууц үгээ дахин оруулах:', -'remembermypassword' => 'Энэ компьютер дээрх миний нэвтрэлийг сана', +'remembermypassword' => 'Энэ компьютер дээрх миний нэвтрэлтийг сана (хамгийн дээд талдаа $1 {{PLURAL:$1|өдрийн|өдрийн}} туршид)', 'yourdomainname' => 'Таны домэйн:', 'externaldberror' => 'Нэг бол гадны баталгаажуулах мэдээллийн сангийн алдаа гарсан, эсвэл та өөрийн гадны бүртгэлээ шинэчлэх эрхгүй байна.', 'login' => 'Нэвтрэх', @@ -461,6 +458,7 @@ $2', 'gotaccount' => "Та бүртгэлтэй юу? '''$1'''", 'gotaccountlink' => 'Нэвтрэх', 'createaccountmail' => 'Мэйлээр илгээх', +'createaccountreason' => 'Шалтгаан:', 'badretype' => 'Таны оруулсан хоёр нууц үг таарахгүй байна.', 'userexists' => 'Хэрэглэгчийн нэр ашиглагдаж байна. Өөр нэр сонгоно уу.', @@ -578,11 +576,12 @@ $2', 'showdiff' => 'Өөрчлөлтүүдийг харуул', 'anoneditwarning' => "'''Анхаар:''' Та нэвтрээгүй байна. Энэ хуудасны засварын түүхэнд таны IP хаяг хадгалагдана.", +'anonpreviewwarning' => "''Та нэвтрээгүй байна. Хадгалвал энэ хуудасны түүхэнд таны IP хаяг бичигдлэх болно.''", 'missingsummary' => "'''Сануулга:''' Та засварынхаа товч агуулгын тухай оруулаагүй байна. Хэрэв та Хадгалах товчийг дахин дарвал таны засвар товч агуулгагүйгээр хадгалагдана.", 'missingcommenttext' => 'Доор санал бодлоо оруулна уу.', -'missingcommentheader' => "'''Сануулга:''' Та энэ санал бодлынхоо гарчигийг бичээгүй байна. -Хэрэв та Хадгалах товчийг дахин дарвал таны засвар гарчиггүй хадгалагдах болно.", +'missingcommentheader' => "'''Сануулга:''' Та энэхүү санал бодолдоо гарчиг бичээгүй байна. +Хэрэв та {{int:savearticle}} дээр дахин дарвал таны засвар гарчиггүй хадгалагдах болно.", 'summary-preview' => 'Товч агуулгын урьдчилж харсан байдал:', 'subject-preview' => 'Сэдэв/гарчигийн урьдчилж харсан байдал:', 'blockedtitle' => 'Хэрэглэгч түгжигдлээ.', @@ -657,7 +656,7 @@ $2', '''Хараахан хадгалагдаагүй байгаа гэдгийг анхаарна уу!'''", 'userjspreview' => "'''Та өөрийн хэрэглэгчийн ЖаваСкриптийг зөвхөн урьдчилан харж байгаа бөгөөд энэ нь хараахан хадгалагдаагүй байгаа гэдгийг анхаарна уу!'''", 'userinvalidcssjstitle' => "'''Анхаар:''' \"\$1\" гэсэн арьс байхгүй байна. -Өөрсдийн .css болон .js хуудсуудыг нэрлэхэд жижиг үсэг хэрэглэдэг болохыг сануулж байна. Жишээ нь: {{ns:user}}:Foo/monobook.css гэж л хэрэглэх бөгөөд {{ns:user}}:Foo/Monobook.css гэхгүй.", +Өөрсдийн .css болон .js хуудсуудыг нэрлэхэд жижиг үсэг хэрэглэдэг болохыг сануулж байна. Жишээ нь: {{ns:user}}:Foo/vector.css гэж л хэрэглэх бөгөөд {{ns:user}}:Foo/Vector.css гэхгүй.", 'updated' => '(Шинэчлэгдсэн)', 'note' => "'''Анхааруулга:'''", 'previewnote' => "'''Энэ бол зөвхөн урьдчилж харсан байдал; засварууд одоохондоо хадгалагдаагүй байна!'''", @@ -694,8 +693,6 @@ $2', Хэрэв та өөрийн хувь нэмрээ бусдад засварлуулах, тараагдуулахыг хүсэхгүй байгаа бол энд битгий оруулаарай.
    Та мөн үүнийг өөрөө бичсэн, эсвэл нийтийн өмчид тавигдсан буюу үүнтэй адилтгаж болох сангаас хуулж тавьсан бүтээл гэдгээ амласан байгааг анхаараарай (дэлгэрэнгүй мэдээллийг $1-с авна уу). '''ЗОХИОГЧИЙН ЭРХ БҮХИЙ БҮТЭЭЛИЙГ ЗӨВШӨӨРӨЛГҮЙГЭЭР ТАВИХИЙГ ХОРИГЛОНО!'''", -'longpagewarning' => "'''АНХААР: Энэ хуудас $1 килобайт урттай байна; зарим броузеруудад 32 килобайт орчим буюу түүнээс урт хуудсыг засварлахад хүндрэлтэй байж магадгүй. -Хуудсыг жижиг хэсгүүдэд хувааж засварлахыг санал болгоё.'''", 'longpageerror' => "'''АЛДАА: Таны оруулсан текст нь $1 килобайт урттай байгаа бөгөөд энэ нь дээд хэмжээ болох $2 килобайтаас илүү урт байна. Хадгалах боломгүй байна.'''", 'readonlywarning' => "'''АНХААР: Мэдээллийн сан нь техникийн үзлэг хийхээр түр зуур түгжигдсэн байгаа тул та одоохондоо засваруудаа хадгалах боломжгүй байна. @@ -876,6 +873,8 @@ $1", 'logdelete-failure' => "'''Логийн үзэгдэх байдлыг тохируулж чадсангүй:''' $1", 'revdel-restore' => 'Харагдах байдлыг өөрчлөх', +'revdel-restore-deleted' => 'устгагдсан засварууд', +'revdel-restore-visible' => 'үзэгдэх засварууд', 'pagehist' => 'Хуудасны түүх', 'deletedhist' => 'Устгагдсан түүх', 'revdelete-content' => 'агуулга', @@ -946,11 +945,13 @@ $1", # Diffs 'history-title' => '"$1"-н засварын түүх', 'difference' => '(Засварууд хоорондын ялгаа)', +'difference-multipage' => '(Хуудсууд хоорондын ялгаа)', 'lineno' => '$1-р мөр:', 'compareselectedversions' => 'Сонгосон хувилбаруудыг харьцуулах', 'showhideselectedversions' => 'Сонгосон хувилбаруудыг үзүүлэх/нуух', 'editundo' => 'цуцлах', -'diff-multi' => 'Завсрын $1 засварыг үзүүлээгүй байна.', +'diff-multi' => '({{PLURAL:$2|Нэг хэрэглэгчийн|$2 хэрэглэгчийн}} завсрын {{PLURAL:$1|нэг засварыг|$1 засварыг}} үзүүлээгүй)', +'diff-multi-manyusers' => '($2 гаруй {{PLURAL:$2|хэрэглэгчийн}} {{PLURAL:$1|дундын нэг засварыг|дундын $1 засварыг}} үзүүлсэнгүй)', # Search results 'searchresults' => 'Хайлтын үр дүн', @@ -985,6 +986,7 @@ $1", 'searchprofile-everything-tooltip' => 'Бүх агуулгаас хайх (үүнд ярианы хуудсуудыг оролцуулах)', 'searchprofile-advanced-tooltip' => 'Сонгосон нэрний зайнуудаас хайх', 'search-result-size' => '$1 ($2 үг)', +'search-result-category-size' => '{{PLURAL:$1|1 гишүүн|$1 гишүүн}} ({{PLURAL:$2|1 дэд ангилал|$2 дэд ангилал}}, {{PLURAL:$3|1 файл|$3 файл}})', 'search-result-score' => 'Холбоо хамаарал: $1%', 'search-redirect' => '(чиглүүлэгч $1)', 'search-section' => '(Хэсэг $1)', @@ -1062,6 +1064,7 @@ $1", 'contextlines' => 'Илэрц тус бүр дэх мөрийн тоо:', 'contextchars' => 'Нэг мөр тус бүр дэх үгийн тоо:', 'stub-threshold' => 'Түүхий холбоосийг форматлах босго (байт):', +'stub-threshold-disabled' => 'Идэвхигүйжүүлсэн', 'recentchangesdays' => 'Сүүлийн өөрчлөлтүүдэд үзүүлэх өдрийн тоо:', 'recentchangesdays-max' => 'Хамгийн ихдээ $1 өдөр', 'recentchangescount' => 'Үзүүлэх засварын тоо (анхны байдалд):', @@ -1095,6 +1098,7 @@ $1", 'prefs-files' => 'Файлууд', 'prefs-custom-css' => 'Өөрийн сонгосон CSS', 'prefs-custom-js' => 'Өөрийн сонгосон JS', +'prefs-common-css-js' => 'Бүх скинд ашиглагдах CSS/ЖаваСкрипт:', 'prefs-reset-intro' => 'Та энэ хуудсыг ашиглан өөрийн тохиргоог сайтын анхны тохиргооо руу шилжүүлэх боломжтой. Энэ үйлдлийг буцаах боломжгүй.', 'prefs-emailconfirm-label' => 'Мэйлийн баталгаажуулалт:', @@ -1132,7 +1136,9 @@ $1 тэмдэгтээс богино байх ёстой.', 'prefs-advancedrendering' => 'Ахимаг хэмжээний сонголтууд', 'prefs-advancedsearchoptions' => 'Ахимаг хэмжээний сонголтууд', 'prefs-advancedwatchlist' => 'Ахимаг хэмжээний сонголтууд', -'prefs-display' => 'Харагдах байдлын сонголтууд', +'prefs-displayrc' => 'Харагдах байдлын сонголтууд', +'prefs-displaysearchoptions' => 'Харагдацийн тохиргоо', +'prefs-displaywatchlist' => 'Харагдацийн тохиргоо', 'prefs-diffs' => 'Ялгаанууд', # User rights @@ -1217,6 +1223,7 @@ $1 тэмдэгтээс богино байх ёстой.', 'right-hideuser' => 'Хэрэглэгчийн нэрийг түгжиж нийтээс нуух', 'right-ipblock-exempt' => 'IP-н түгжээ, автомат түгжээ, бүсийн түгжээг тойрч гарах', 'right-proxyunbannable' => 'Проксинуудын автомат түгжээг тойрч гарах', +'right-unblockself' => 'Өөрсдийнхөө түгжээг тайлах', 'right-protect' => 'Хамгаалалтын түвшингүүдийг өөрчилж хамгаалагдсан хуудсуудыг засварлах', 'right-editprotected' => 'Хамгаалагдсан хуудсуудыг засварлах (давхар хамгаалалтгүй)', 'right-editinterface' => 'Хэрэглэгчийн интерфэйсийг засварлах', @@ -1239,7 +1246,6 @@ $1 тэмдэгтээс богино байх ёстой.', 'right-siteadmin' => 'Мэдээллийн баазыг түгжих буюу нээх', 'right-reset-passwords' => 'Бусад хэрэглэгчдийн нууц үгсийг дахин тогтоох', 'right-override-export-depth' => '5 хүртэлх гүний хуудсуудыг холбогдсон хуудсуудтай хамт гаргах', -'right-versiondetail' => 'Программ хангамжийн дэлгэрэнгүй мэдээллийг үзүүлэх', 'right-sendemail' => 'Бусад хэрэглэгчид руу и-мэйл явуулах', # User rights log @@ -1290,14 +1296,9 @@ $1 тэмдэгтээс богино байх ёстой.', 'recentchanges-legend' => 'Сүүлийн өөрчлөлтүүдийн сонголтууд', 'recentchangestext' => 'Энэхүү хуудсанд викид хийсэн хамгийн сүүлийн өөрчлөлтүүдийг үзүүлж байна.', 'recentchanges-feed-description' => 'Вики дахь хамгийн сүүлийн өөрчлөлтүүдийг хянах.', -'recentchanges-label-legend' => 'Тайлбар: $1.', -'recentchanges-legend-newpage' => '$1 - шинэ хуудас', 'recentchanges-label-newpage' => 'Энэ засвар шинэ хуудсыг үүсгэсэн байна', -'recentchanges-legend-minor' => '$1 - бага зэргийн засвар', 'recentchanges-label-minor' => 'Энэ нь бага зэргийн засвар байна', -'recentchanges-legend-bot' => '$1 - ботын засвар', 'recentchanges-label-bot' => 'Энэ засварыг бот гүйцэтгэсэн байна', -'recentchanges-legend-unpatrolled' => '$1 - манагдаагүй засвар', 'recentchanges-label-unpatrolled' => 'Энэ засварыг одоогийн байдлаар манаагүй байна', 'rcnote' => "Доорх нь $5, $4-ий байдлаарх сүүлийн '''$2''' өдрийн турших '''$1''' засвар юм.", 'rcnotefrom' => "Доорх нь '''$2'''-с хойших өөрчлөлтүүд ('''$1''' хүртэл харуулагдсан) юм.", @@ -1344,6 +1345,9 @@ $1 тэмдэгтээс богино байх ёстой.', 'upload_directory_missing' => 'Оруулалтын лавлах ($1) олдохгүй байгаа бөгөөд вэбсервэр үүсгээгүй байж магадгүй байна.', 'upload_directory_read_only' => 'Файл оруулах каталог ($1) нь вэбсерверт бичигдэх боломгүй байна.', 'uploaderror' => 'Файл оруулахад алдаа гарлаа', +'upload-recreate-warning' => "'''Анхаар: Тэрхүү нэртэй файл нь устгагдсан эсвэл зөөгдсөн байна..''' + +Хялбараар харах үүднээс энэхүү хуудасны устгал ба зөөлтийг лог доор бичигдсэн байгаа:", 'uploadtext' => "Доорх маягтыг хэрэглэж файлыг оруулна уу. Өмнө нь оруулсан файлуудыг [[Special:FileList|оруулсан файлуудын жагсаалтаас]] харна уу. Оруулсан ба устгасан файлуудын жагсаалт нь мөн [[Special:Log/upload|файл оруулалтын логт]] бий. @@ -1378,6 +1382,17 @@ $1 тэмдэгтээс богино байх ёстой.', 'filetype-banned-type' => "'''\".\$1\"''' нь зөвшөөрөгдөхгүй файлын төрөл байна. Зөвшөөрөгдөх {{PLURAL:\$3|файлын төрөл|файлын төрлүүд}} нь \$2.", 'filetype-missing' => 'Энэ файлд өргөтгөл байхгүй байна (".jpg" гэх мэт).', +'empty-file' => 'Таны явуулсан файл хоосон байв.', +'file-too-large' => 'Таны явуулсан файл хэтэрхий том байв.', +'filename-tooshort' => 'Файлын нэр хэтэрхий богино байна.', +'filetype-banned' => 'Ийм файлын төрлийг оруулах боломжгүй.', +'verification-error' => 'Энэхүү файл нь файлын баталгаажуулалтад тэнцсэнгүй.', +'hookaborted' => 'Таны хийх гэж оролдсон өөрчлөлтийг нэмэлт хүүк хориглов.', +'illegal-filename' => 'Ийм файлын нэртэй байж болохгүй.', +'overwrite' => 'Анхнаасаа оршиж буй файлын дээгүүр бичиж болохгүй.', +'unknown-error' => 'Үл мэдэгдэх алдаа гарав.', +'tmp-create-error' => 'Түр зуурын файлыг үүсгэж чадсангүй.', +'tmp-write-error' => 'Түр зуурын файлыг бичихэд алдаа гарав.', 'large-file' => 'Файлуудын хэмжээ $1-с ихгүй байхыг зөвлөж байна; энэ файл $2 байна.', 'largefileserver' => 'Энэ файл серверийн зөвшөөрсөн хэмжээнээс том байна.', @@ -1408,13 +1423,14 @@ $1 тэмдэгтээс богино байх ёстой.', 'file-exists-duplicate' => 'Энэ файл нь дараах {{PLURAL:$1|файлтай|файлуудтай}} ижил байна:', 'file-deleted-duplicate' => 'Энэ файлтай ([[:$1]]) яг ижилхэн файл урьд өмнө устгагдсан байна. Дахин оруулахынхаа өмнө тэрхүү файлын устгалын түүхийг харна уу.', -'successfulupload' => 'Файлыг амжилттай орууллаа', 'uploadwarning' => 'Хуулах үеийн анхааруулга', 'uploadwarning-text' => 'Доорх файлын тодорхойлолтыг өөрчлөөд дахин оролдоно уу.', 'savefile' => 'Файлыг хадгалах', 'uploadedimage' => '"[[$1]]"-г орууллаа', 'overwroteimage' => '"[[$1]]"-н шинэ хувилбарыг орууллаа', 'uploaddisabled' => 'Файл оруулах боломжгүй байна.', +'copyuploaddisabled' => 'URL-аас оруулж болохгүй.', +'uploadfromurl-queued' => 'Таны оруулалсан файлыг оруулах дараалалд нэмэв.', 'uploaddisabledtext' => 'Файл оруулалтуудыг идэвхижүүлээгүй байна.', 'php-uploaddisabledtext' => 'PHP-д файл оруулахыг хориглоно. file_uploads тохиргоогоо шалгана уу.', @@ -1436,6 +1452,14 @@ file_uploads тохиргоогоо шалгана уу.', Файлын устгалын лог энд байна:", 'filename-bad-prefix' => "Таны оруулж байгаа файлын нэр '''\"\$1\"'''-р эхэлж байна. Энэ нь файлыг тодорхойлойлоогүй, голдуу дижитал аппаратын автоматаар гаргадаг нэр болно. Файланд түүнийг илүү сайн тодорхойлсон нэр өгнө үү.", +'upload-success-subj' => 'Файлыг амжилттай орууллаа', +'upload-success-msg' => '[$2]-с амжилттай оруулав. Энд байна: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Оруулах үеийн асуудал', +'upload-failure-msg' => '[$2]-с оруулахад асуудал үүсчээ: + +$1', +'upload-warning-subj' => 'Оруулах үеийн анхааруулга', +'upload-warning-msg' => '[$2]-с хийсэн оруулалтад асуудал үүсэв. [[Special:Upload/stash/$1|Оруулах талбар]] руу буцаж энэ асуудлыг шийдвэрлэж болно.', 'upload-proto-error' => 'Буруу протокол', 'upload-proto-error-text' => 'Файл оруулахад хэрэгтэй URL-үүд нь http:// эсвэл ftp://-р эхлэсэн байх шаардлагатай.', @@ -1615,7 +1639,6 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ 'statistics-edits-average' => 'Хуудас тутмын дундаж засварын тоо', 'statistics-views-total' => 'Нийт үзсэн тоо', 'statistics-views-peredit' => 'Засвар тутмыг үзсэн тоо', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Ажлын цувааны] урт', 'statistics-users' => 'Бүртгэгдсэн [[Special:ListUsers|хэрэглэгч]]', 'statistics-users-active' => 'Байнгын оролцоотой хэрэглэгч', 'statistics-users-active-desc' => 'Сүүлийн {{PLURAL:$1|өдөрт|$1 өдөрт}} үйлдэл хийсэн хэрэглэгчид', @@ -1808,34 +1831,40 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ 'listgrouprights-removegroup-self-all' => 'Өөрийн бүртгэлээс бүх бүлгийг хасах', # E-mail user -'mailnologin' => 'илгээх хаяг байхгүй', -'mailnologintext' => 'Та бусад хэрэглэгчдэд мэйл явуулахын тулд өөрийн [[Special:Preferences|хувийн тохируулгадаа]] мэйлээ оруулсан, мөн [[Special:UserLogin|нэвтэрсэн]] байх шаардлагатай.', -'emailuser' => 'Энэ хэрэглэгчид мэйл илгээх', -'emailpage' => 'Хэрэглэгчид мэйл илгээх', -'emailpagetext' => 'Энэ хэрэглэгч рүү мэйл илгээхэд доорхийг бөглөнө. +'mailnologin' => 'илгээх хаяг байхгүй', +'mailnologintext' => 'Та бусад хэрэглэгчдэд мэйл явуулахын тулд өөрийн [[Special:Preferences|хувийн тохируулгадаа]] мэйлээ оруулсан, мөн [[Special:UserLogin|нэвтэрсэн]] байх шаардлагатай.', +'emailuser' => 'Энэ хэрэглэгчид мэйл илгээх', +'emailpage' => 'Хэрэглэгчид мэйл илгээх', +'emailpagetext' => 'Энэ хэрэглэгч рүү мэйл илгээхэд доорхийг бөглөнө. Таны өөрийн [[Special:Preferences|хэрэглэгчийн тохиргоонд]] оруулсан мэйл хаяг нь "Хэнээс" гэсэн хэсэгт гарах тул хүлээн авагч хариугаа тань руу шууд илгээх боломжтой.', -'usermailererror' => 'Мэйл нь буцаж ирсэн шалтгаан:', -'defemailsubject' => '{{SITENAME}} и-мэйл', -'noemailtitle' => 'Мэйл хаяггүй байна', -'noemailtext' => 'Энэ хэрэглэгч хүчинтэй и-мэйл хаяг тохируулаагүй байна.', -'nowikiemailtitle' => 'Мэйл зөвшөөрөгдөхгүй', -'nowikiemailtext' => 'Энэ хэрэглэгч бусад хэрэглэгчдээс мэйл хүлээж авахгүй гэсэн байна.', -'email-legend' => '{{SITENAME}}-н өөр хэрэглэгч руу мэйл явуулах', -'emailfrom' => 'Хэнээс:', -'emailto' => 'Хэнд:', -'emailsubject' => 'Сэдэв:', -'emailmessage' => 'Мессэж:', -'emailsend' => 'Илгээх', -'emailccme' => 'Миний мессэжний хуулбарыг надад мэйлээр явуулна уу.', -'emailccsubject' => '$1: $2 руух таны хуулсан мэйл', -'emailsent' => 'И-мэйл илгээгдлээ', -'emailsenttext' => 'Таны мэйл илгээгдлээ.', -'emailuserfooter' => 'Энэ мэйл нь {{SITENAME}} дахь "Энэ хэрэглэгчид мэйл илгээх" функцийг ашиглан $1-с $2-д илгээгдсэн байна.', +'usermailererror' => 'Мэйл нь буцаж ирсэн шалтгаан:', +'defemailsubject' => '{{SITENAME}} и-мэйл', +'usermaildisabled' => 'Хэрэглэгчийн и-мэйлийг идэвхигүйжүүлэв', +'usermaildisabledtext' => 'Та энэ викигийн бусад хэрэглэгч руу и-мэйл явуулах боломжгүй', +'noemailtitle' => 'Мэйл хаяггүй байна', +'noemailtext' => 'Энэ хэрэглэгч хүчинтэй и-мэйл хаяг тохируулаагүй байна.', +'nowikiemailtitle' => 'Мэйл зөвшөөрөгдөхгүй', +'nowikiemailtext' => 'Энэ хэрэглэгч бусад хэрэглэгчдээс мэйл хүлээж авахгүй гэсэн байна.', +'email-legend' => '{{SITENAME}}-н өөр хэрэглэгч руу мэйл явуулах', +'emailfrom' => 'Хэнээс:', +'emailto' => 'Хэнд:', +'emailsubject' => 'Сэдэв:', +'emailmessage' => 'Мессэж:', +'emailsend' => 'Илгээх', +'emailccme' => 'Миний мессэжний хуулбарыг надад мэйлээр явуулна уу.', +'emailccsubject' => '$1: $2 руух таны хуулсан мэйл', +'emailsent' => 'И-мэйл илгээгдлээ', +'emailsenttext' => 'Таны мэйл илгээгдлээ.', +'emailuserfooter' => 'Энэ мэйл нь {{SITENAME}} дахь "Энэ хэрэглэгчид мэйл илгээх" функцийг ашиглан $1-с $2-д илгээгдсэн байна.', + +# User Messenger +'usermessage-summary' => 'Системийн мессеж үлдээв.', +'usermessage-editor' => 'Системийн мессежийг засварлагч', # Watchlist 'watchlist' => 'Миний хянаж буй хуудсууд', 'mywatchlist' => 'Миний хянаж буй хуудсуудын жагсаалт', -'watchlistfor' => "'''$1'''", +'watchlistfor2' => 'Хэрэглэгч: $1 $2', 'nowatchlist' => 'Танд хянаж буй зүйл байхгүй.', 'watchlistanontext' => 'Та өөрийн хянах листийг өөрчлөх буюу үзэхийг хүсвэл $1 хэрэгтэй.', 'watchnologin' => 'Нэвтрээгүй байна.', @@ -1951,7 +1980,10 @@ $NEWPAGE 'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|яриа]])-н хийсэн засваруудыг [[User:$1|$1]]-ий хийсэн сүүлийн засварт буцаан шилжүүллээ.', 'revertpage-nouser' => '(Хэрэглэгийн нэрийг устгасан)-н хийсэн засварыг [[User:$1|$1]]-н сүүлийн засвар руу буцаав', 'rollback-success' => '$1-н өөрчлөлтүүдийг $2-н үйлдсэн сүүлийн хувилбар руу буцаалаа.', -'sessionfailure' => 'Таны нэвтрэлд алдаа гарсан бололтой; + +# Edit tokens +'sessionfailure-title' => 'Session-д алдаа гарав', +'sessionfailure' => 'Таны нэвтрэлд алдаа гарсан бололтой; компьютерийн систем дэх мэдээллийг хууль бусаар авах явдлаас хамгаалах гэж үйлдэл цуцлагдсан байна "Back" товч дээр дарж өмнөх хуудас руугаа буцаж, дараа нь дахин оролдоно уу.', @@ -2080,19 +2112,22 @@ $1', 'month' => 'Дараах сараас (өмнөх засварууд нь ч орно):', 'year' => 'Дараах жилээс (өмнөх засварууд нь ч орно):', -'sp-contributions-newbies' => 'Зөвхөн шинэ бүртгэлүүдийн хувь нэмрийг харуулах', -'sp-contributions-newbies-sub' => 'Шинээр бүртгүүлсэн хэрэглэгчид', -'sp-contributions-newbies-title' => 'Шинэ бүртгэлүүдийн хувь нэмэр', -'sp-contributions-blocklog' => 'Түгжээний лог', -'sp-contributions-deleted' => 'устгагдсан хэрэглэгчийн хувь нэмэр', -'sp-contributions-logs' => 'логууд', -'sp-contributions-talk' => 'яриа', -'sp-contributions-userrights' => 'хэрэглэгчдийн эрхийн удирдлага', -'sp-contributions-blocked-notice' => 'Энэхүү хэрэглэгч одоогоор түгжигдсэн байна. +'sp-contributions-newbies' => 'Зөвхөн шинэ бүртгэлүүдийн хувь нэмрийг харуулах', +'sp-contributions-newbies-sub' => 'Шинээр бүртгүүлсэн хэрэглэгчид', +'sp-contributions-newbies-title' => 'Шинэ бүртгэлүүдийн хувь нэмэр', +'sp-contributions-blocklog' => 'Түгжээний лог', +'sp-contributions-deleted' => 'устгагдсан хэрэглэгчийн хувь нэмэр', +'sp-contributions-logs' => 'логууд', +'sp-contributions-talk' => 'яриа', +'sp-contributions-userrights' => 'хэрэглэгчдийн эрхийн удирдлага', +'sp-contributions-blocked-notice' => 'Энэхүү хэрэглэгч одоогоор түгжигдсэн байна. +Лавлагааны зориулалтаар түгжээний лог дээрх хамгийн сүүлийн нэмэлтийг доор оруулав:', +'sp-contributions-blocked-notice-anon' => 'Энэхүү IP хаягыг одоогоор түгжигдсэн байна. Лавлагааны зориулалтаар түгжээний лог дээрх хамгийн сүүлийн нэмэлтийг доор оруулав:', -'sp-contributions-search' => 'Хувь нэмрийг хайх', -'sp-contributions-username' => 'IP хаяг эсвэл хэрэглэгчийн нэр:', -'sp-contributions-submit' => 'Хайх', +'sp-contributions-search' => 'Хувь нэмрийг хайх', +'sp-contributions-username' => 'IP хаяг эсвэл хэрэглэгчийн нэр:', +'sp-contributions-toponly' => 'Хамгийн сүүлийн засваруудыг л үзүүлэх', +'sp-contributions-submit' => 'Хайх', # What links here 'whatlinkshere' => 'Энд холбогдсон хуудсууд', @@ -2153,7 +2188,6 @@ $1', 'ipb-edit-dropdown' => 'Түгжих шалтгаануудыг засварлах', 'ipb-unblock-addr' => '$1-н түгжээг тайлах', 'ipb-unblock' => 'Хэрэглэгчийн нэр эсвэл IP хаягийн түгжээг тайлах', -'ipb-blocklist-addr' => '$1-д байгаа түгжээнүүдийг харах', 'ipb-blocklist' => 'Байгаа түгжээнүүдийг харах', 'ipb-blocklist-contribs' => '$1-н хувь нэмэр', 'unblockip' => 'Хэрэглэгчийг идэвхижүүлэх', @@ -2229,6 +2263,8 @@ $1 нь аль хэдийнээ түгжигдсэн байна. 'cant-block-while-blocked' => 'Өөрөө түгжигдсэн үед бусад хэрэглэгчдийг түгжих боломжгүй.', 'cant-see-hidden-user' => 'Таны түгжих гэж оролдож буй хэрэглэгчийг аль хэдийнээ түгжиж, нуусан байна. Таньд хэрэглэгчийг нуух эрх байхгүй тул та хэрэглэгчийн түгжээг харах буюу засварлах боломжгүй.', +'ipbblocked' => 'Та өөрөө түгжигдсэн тул бусад хэрэглэгчдийг түгжих буюу тэдний түгжээг тайлах эрхгүй', +'ipbnounblockself' => 'Та өөрийнхөө түгжээг тайлах эрхгүй', # Developer tools 'lockdb' => 'Мэдээллийн баазыг түгжих', @@ -2317,6 +2353,7 @@ $1 нь аль хэдийнээ түгжигдсэн байна. 'immobile-source-page' => 'Энэ хуудсыг зөөх боломжгүй.', 'immobile-target-page' => 'Энэ зорьсон гарчиг руу зөөх боломжгүй.', 'imagenocrossnamespace' => 'Файлыг файлаас өөр нэрний зай руу зөөх боломжгүй', +'nonfile-cannot-move-to-file' => 'Файлын нэрний зай руу файл биш зүйлийг зөөх боломжгүй.', 'imagetypemismatch' => 'Шинэ файлын өргөтгөл төрөлтэй нь таарахгүй байна', 'imageinvalidfilename' => 'Зорьсон файлын нэр хүчингүй', 'fix-double-redirects' => 'Анхны гарчиг руу чиглэх чиглүүлэгчдийг шинэчлэх', @@ -2396,6 +2433,7 @@ $1 нь аль хэдийнээ түгжигдсэн байна. 'importstart' => 'Хуудсыг импортлож байна...', 'import-revision-count' => '$1 засвар', 'importnopages' => 'Импортлох хуудас алга байна.', +'imported-log-entries' => '$1 {{PLURAL:$1|лог руух нэмэлтийг}} оруулж ирэв.', 'importfailed' => 'Импорт бүтэлгүйтлээ: $1', 'importunknownsource' => 'Мэдэгдээгүй төрлийн импортлох эх үүсвэр', 'importcantopen' => 'Импортлосон файлыг нээж чадсангүй', @@ -2490,6 +2528,8 @@ $1 нь аль хэдийнээ түгжигдсэн байна. 'tooltip-rollback' => '"Буцаах" функцээр энэ хуудаст хийсэн засвар(ууд)ыг хамгийн сүүлийн засвар хийсэн хүний хувилбар руу ганц товшилтоор шилжүүлнэ', 'tooltip-undo' => '"Цуцлах" дээр дарснаар энэ засварыг хуучны төлөвт шилжүүлэн урьдчилж харах байдлаар засварлах талбарыг гаргана. Товч агуулгын хэсэгт шалтгаан нэмэх боломжтой болгоно.', +'tooltip-preferences-save' => 'Тохиргоог хадгалах', +'tooltip-summary' => 'Товч тайлбар оруулах', # Stylesheets 'common.css' => '/* Энд тавигдсан CSS-үүд бүх арьсанд нэмэгдэх болно */', @@ -2591,14 +2631,17 @@ $1', 'imagemaxsize' => 'Доорх шаардлагын дагуу зургын хуудсанд хязгаарлалт хийлээ:', 'thumbsize' => 'Жижиг зургийн хэмжээ:', 'widthheightpage' => '$1×$2, $3 хуудас', -'file-info' => '(файлын хэмжээ: $1, MIME төрөл: $2)', -'file-info-size' => '($1 × $2 пиксел, файлын хэмжээ: $3, MIME төрөл: $4)', +'file-info' => 'файлын хэмжээ: $1, MIME төрөл: $2', +'file-info-size' => '$1 × $2 пиксел, файлын хэмжээ: $3, MIME төрөл: $4', 'file-nohires' => 'Илүү чанартай хувилбар байхгүй байна.', -'svg-long-desc' => '(SVG файл, $1 × $2 пиксэл, файлын хэмжээ: $3)', +'svg-long-desc' => 'SVG файл, $1 × $2 пиксэл, файлын хэмжээ: $3', 'show-big-image' => 'Хамгийн сайн чанартай хувилбар', 'show-big-image-thumb' => 'Файлын одоогоор харагдаж буй хэмжээ: $1 × $2 пиксел', 'file-info-gif-looped' => 'эргэлдсэн', 'file-info-gif-frames' => '$1 {{PLURAL:$1|фрэйм}}', +'file-info-png-looped' => 'эргэлдсэн', +'file-info-png-repeat' => '$1 {{PLURAL:$1|удаа}} тоглуулсан', +'file-info-png-frames' => '$1 {{PLURAL:$1|фрэйм}}', # Special:NewFiles 'newimages' => 'Шинэ файлуудын галерэй', @@ -2883,29 +2926,29 @@ $1', 'limitall' => 'бүгдийг', # E-mail address confirmation -'confirmemail' => 'Мэйл хаягийг баталгаажуулах', -'confirmemail_noemail' => 'Та өөрийн [[Special:Preferences|хэрэглэгчийн тохиргоондоо]] хүчинтэй мэйл хаяг оруулаагүй байна.', -'confirmemail_text' => '{{SITENAME}} нь мэйлийн функцуудыг ашиглахын тулд мэйл хаягаа баталгаажуулахыг хэрэглэгчдээс шаарддаг болно. +'confirmemail' => 'Мэйл хаягийг баталгаажуулах', +'confirmemail_noemail' => 'Та өөрийн [[Special:Preferences|хэрэглэгчийн тохиргоондоо]] хүчинтэй мэйл хаяг оруулаагүй байна.', +'confirmemail_text' => '{{SITENAME}} нь мэйлийн функцуудыг ашиглахын тулд мэйл хаягаа баталгаажуулахыг хэрэглэгчдээс шаарддаг болно. Доорх товчлуурыг идэвхижүүлж өөрийн хаяг руу баталгаажуулах мэйл явуулна уу. Уг мэйл нь код бүхий холбоос агуулах бөгөөд та уг холбоосыг ачаалснаар таны мэйл хаяг баталгаажих болно.', -'confirmemail_pending' => 'Баталгаажуулах кодыг тань руу аль хэдийнээ мэйлээр явуулсан; +'confirmemail_pending' => 'Баталгаажуулах кодыг тань руу аль хэдийнээ мэйлээр явуулсан; та саяхан бүртгүүлсэн бол хэдэн минут хүлээсний дараа шинэ код нэхэх нь тохиромжтой.', -'confirmemail_send' => 'Баталгаажуулах кодыг мэйлээр илгээх.', -'confirmemail_sent' => 'Баталгаажуулах мэйл илгээгдлээ.', -'confirmemail_oncreate' => 'Таны мэйл хаяг руу баталгаажуулалтын кодыг явууллаа. +'confirmemail_send' => 'Баталгаажуулах кодыг мэйлээр илгээх.', +'confirmemail_sent' => 'Баталгаажуулах мэйл илгээгдлээ.', +'confirmemail_oncreate' => 'Таны мэйл хаяг руу баталгаажуулалтын кодыг явууллаа. Нэвтрэхийн тулд энэ код хэрэггүй ч гэсэн вики дахь мэйлтэй холбогдсон функцуудыг ашиглахын тулд хэрэг болно.', -'confirmemail_sendfailed' => '{{SITENAME}} нь таны баталгаажуулах мэйлийг явуулж чадсангүй. +'confirmemail_sendfailed' => '{{SITENAME}} нь таны баталгаажуулах мэйлийг явуулж чадсангүй. Таны мэйл хаягт хүчингүй тэмдэгт байгаа эсэхийг шалгаарай. Мэйл илгээгч дараахийг буцаав: $1', -'confirmemail_invalid' => 'Баталгаажуулах код хүчингүй байна. Кодны хугацаа хэтэрсэн байж болзошгүй.', -'confirmemail_needlogin' => '$1-г хийхийн тулд та мэйл хаягаа баталгаажуулах шаардлагатай.', -'confirmemail_success' => 'Таны мэйл хаяг баталгаажлаа. +'confirmemail_invalid' => 'Баталгаажуулах код хүчингүй байна. Кодны хугацаа хэтэрсэн байж болзошгүй.', +'confirmemail_needlogin' => '$1-г хийхийн тулд та мэйл хаягаа баталгаажуулах шаардлагатай.', +'confirmemail_success' => 'Таны мэйл хаяг баталгаажлаа. Та одоо викид [[Special:UserLogin|нэвтэрч]] үйлдэл хийх боломжтой', -'confirmemail_loggedin' => 'Таны мэйл хаяг баталгаажлаа.', -'confirmemail_error' => 'Таны баталгаажуулалтыг хадгалах үед ямар нэг алдаа гарлаа.', -'confirmemail_subject' => '{{SITENAME}}-н мэйл хаягийн баталгаажуулалт', -'confirmemail_body' => 'Хэн нэгэн, магадгүй та $1 IP хаягнаас $2 гэсэн нэрээр энэ мэйл хаягтайгаар {{SITENAME}} хуудсанд данс нээсэн байна. +'confirmemail_loggedin' => 'Таны мэйл хаяг баталгаажлаа.', +'confirmemail_error' => 'Таны баталгаажуулалтыг хадгалах үед ямар нэг алдаа гарлаа.', +'confirmemail_subject' => '{{SITENAME}}-н мэйл хаягийн баталгаажуулалт', +'confirmemail_body' => 'Хэн нэгэн, магадгүй та $1 IP хаягнаас $2 гэсэн нэрээр энэ мэйл хаягтайгаар {{SITENAME}} хуудсанд данс нээсэн байна. Энэ хэрэглэгчийн бүртгэл нь үнэхээр таных мөн бол {{SITENAME}} хуудас дээрх э-мэйл хаягаар хийж болох үйлдлүүдийг идвэхжүүлэхийн тулд дараах холбоосыг нээнэ үү. @@ -2916,8 +2959,19 @@ $3 $5 Баталгаажуулах кодны хугацаа $4-нд дуусах болно.', -'confirmemail_invalidated' => 'Мэйл хаягыг баталгаажуулах үйлдлийг цуцаллаа', -'invalidateemail' => 'Мэйл хаягыг баталгаажуулах явдлыг цуцлах', +'confirmemail_body_changed' => 'Хэн нэгэн, магадгүй та $1 IP хаягнаас {{SITENAME}} дээрх "$2" бүртгэлийн и-мэйл хаягийг сольсон байна. + +Энэ хэрэглэгчийн бүртгэл нь үнэхээр таных мөн бол {{SITENAME}} хуудас дээрх и-мэйл функцуудыг дахин идэвхжүүлэхийн тулд дараах холбоосыг хөтөчөөрөө нээнэ үү: + +$3 + +Хэрэв бүртгэл таных *биш* бол и-мэйл баталгаажуулалтыг цуцлах дараах холбоосыг нээнэ үү: + +$5 + +Баталгаажуулах кодны хугацаа $4-нд дуусах болно.', +'confirmemail_invalidated' => 'Мэйл хаягыг баталгаажуулах үйлдлийг цуцаллаа', +'invalidateemail' => 'Мэйл хаягыг баталгаажуулах явдлыг цуцлах', # Scary transclusion 'scarytranscludedisabled' => '[Интервики оруулалтыг идэвхижүүлээгүй]', @@ -2957,6 +3011,7 @@ $1', 'table_pager_first' => 'Эхний хуудас', 'table_pager_last' => 'Сүүлийн хуудас', 'table_pager_limit' => 'Хуудас бүрт $1 зүйл үзүүлэх', +'table_pager_limit_label' => 'Хуудас бүр дахь зүйлийн тоо:', 'table_pager_limit_submit' => 'Явах', 'table_pager_empty' => 'Үр дүн байхгүй байна', @@ -3024,6 +3079,8 @@ $1', 'version-hook-subscribedby' => 'Захиалсан:', 'version-version' => '(Хувилбар $1)', 'version-license' => 'Лиценз', +'version-poweredby-credits' => "Энэхүү викиг '''[http://www.mediawiki.org/ MediaWiki]''' програмаар ажиллуулдаг, зохиогчийн эрх © 2001-$1 $2.", +'version-poweredby-others' => 'бусад', 'version-software' => 'Суулгасан программ', 'version-software-product' => 'Бүтээгдэхүүн', 'version-software-version' => 'Хувилбар', @@ -3084,6 +3141,15 @@ $1', 'tags-edit' => 'засварлах', 'tags-hitcount' => '$1 {{PLURAL:$1|өөрчлөлт}}', +# Special:ComparePages +'comparepages' => 'Хуудсуудыг харьцуулах', +'compare-selector' => 'Хуудасны засваруудыг харьцуулах', +'compare-page1' => 'Нэгдүгээр хуудас', +'compare-page2' => 'Хоёрдугаар хуудас', +'compare-rev1' => 'Нэгдүгээр засвар', +'compare-rev2' => 'Хоёрдугаар засвар', +'compare-submit' => 'Харьцуулах', + # Database error messages 'dberr-header' => 'Энэхүү викид асуудал үүсэв', 'dberr-problems' => 'Уучлаарай! @@ -3101,8 +3167,13 @@ $1', 'htmlform-float-invalid' => 'Таны өгсөн утга тоо биш байна.', 'htmlform-int-toolow' => 'Таны өгсөн утга $1 гэсэн хамгийн доод утгаас бага байна', 'htmlform-int-toohigh' => 'Таны өгсөн утга $1 гэсэн хамгийн дээд утгаас их байна', +'htmlform-required' => 'Энэ утга зайлшгүй шаардлагатай', 'htmlform-submit' => 'Явуулах', 'htmlform-reset' => 'Өөрчлөлтүүдийг цуцлах', 'htmlform-selectorother-other' => 'Бусад', +# SQLite database support +'sqlite-has-fts' => '$1 (бүх текстээрх хайлтыг дэмждэг)', +'sqlite-no-fts' => '$1 (бүх текстээрх хайлтыг дэмждэггүй)', + ); diff --git a/languages/messages/MessagesMo.php b/languages/messages/MessagesMo.php index 533a710e..ab7ba56f 100644 --- a/languages/messages/MessagesMo.php +++ b/languages/messages/MessagesMo.php @@ -548,7 +548,9 @@ $messages = array( 'tooltip-rollback' => "«Ревино» анулязэ модификаря/модификэриле де пе ачастэ паӂинэ а ултимулуй контрибуитор принтр'о сингурэ апэсаре", # Media information +'file-info-size' => '$1 × $2 пиксель, мэриме фишиер: $3, тип MIME: $4', 'file-nohires' => 'Резолуций май марь ну сынт диспонибиле.', +'svg-long-desc' => 'фишиер SVG, ку дименсиуня номиналэ де $1 × $2 пиксель, мэриме фишиер: $3', 'show-big-image' => 'Мэреште резолуция имаӂиний', 'show-big-image-thumb' => 'Мэримя ачестей превизуализэрь: $1 × $2 пиксель', diff --git a/languages/messages/MessagesMr.php b/languages/messages/MessagesMr.php index a7c236bb..0c442c01 100644 --- a/languages/messages/MessagesMr.php +++ b/languages/messages/MessagesMr.php @@ -48,72 +48,72 @@ $namespaceAliases = array( 'साहाय्य_चर्चा' => NS_HELP_TALK, ); -#!!# sqlविचारा is not in normalised form, which is Sqlविचारा or Sqlविचारा +# !!# sqlविचारा is not in normalised form, which is Sqlविचारा or Sqlविचारा $specialPageAliases = array( - 'DoubleRedirects' => array( 'दुहेरी पुनर्निर्देशने' ), - 'BrokenRedirects' => array( 'चुकीची पुनर्निर्देशने' ), + 'DoubleRedirects' => array( 'दुहेरी_पुनर्निर्देशने' ), + 'BrokenRedirects' => array( 'चुकीची_पुनर्निर्देशने' ), 'Disambiguations' => array( 'नि:संदिग्धीकरण' ), 'Userlogin' => array( 'सदस्यप्रवेश' ), 'Userlogout' => array( 'सदस्यबहिर्गमन' ), 'CreateAccount' => array( 'सदस्यनोंद' ), 'Preferences' => array( 'पसंती' ), - 'Watchlist' => array( 'पहार्‍याची सूची' ), - 'Recentchanges' => array( 'अलीकडील बदल' ), + 'Watchlist' => array( 'पहार्‍याची_सूची' ), + 'Recentchanges' => array( 'अलीकडील_बदल' ), 'Upload' => array( 'चढवा' ), 'Listfiles' => array( 'चित्रयादी' ), - 'Newimages' => array( 'नवीन चित्रे' ), - 'Listusers' => array( 'सदस्यांची यादी' ), - 'Listgrouprights' => array( 'गट अधिकार यादी' ), + 'Newimages' => array( 'नवीन_चित्रे' ), + 'Listusers' => array( 'सदस्यांची_यादी' ), + 'Listgrouprights' => array( 'गट_अधिकार_यादी' ), 'Statistics' => array( 'सांख्यिकी' ), - 'Randompage' => array( 'अविशिष्ट', 'अविशिष्ट पृष्ठ' ), + 'Randompage' => array( 'अविशिष्ट', 'अविशिष्ट_पृष्ठ' ), 'Lonelypages' => array( 'एकलपाने' ), - 'Uncategorizedpages' => array( 'अवर्गीकृत पाने' ), - 'Uncategorizedcategories' => array( 'अवर्गीकृत वर्ग' ), - 'Uncategorizedimages' => array( 'अवर्गीकृत चित्रे' ), - 'Uncategorizedtemplates' => array( 'अवर्गीकृत साचे' ), - 'Unusedcategories' => array( 'न वापरलेले वर्ग' ), - 'Unusedimages' => array( 'न वापरलेली चित्रे' ), - 'Wantedpages' => array( 'हवे असलेले लेख' ), - 'Wantedcategories' => array( 'हवे असलेले वर्ग' ), + 'Uncategorizedpages' => array( 'अवर्गीकृत_पाने' ), + 'Uncategorizedcategories' => array( 'अवर्गीकृत_वर्ग' ), + 'Uncategorizedimages' => array( 'अवर्गीकृत_चित्रे' ), + 'Uncategorizedtemplates' => array( 'अवर्गीकृत_साचे' ), + 'Unusedcategories' => array( 'न_वापरलेले_वर्ग' ), + 'Unusedimages' => array( 'न_वापरलेली_चित्रे' ), + 'Wantedpages' => array( 'हवे_असलेले_लेख' ), + 'Wantedcategories' => array( 'हवे_असलेले_वर्ग' ), 'Wantedfiles' => array( 'संचिकाहवी' ), 'Wantedtemplates' => array( 'साचाहवा' ), - 'Mostlinked' => array( 'सर्वात जास्त जोडलेली' ), - 'Mostlinkedcategories' => array( 'सर्वात जास्त जोडलेले वर्ग', 'सर्वात जास्त वापरलेले वर्ग' ), - 'Mostlinkedtemplates' => array( 'सर्वात जास्त जोडलेले साचे', 'सर्वात जास्त वापरलेले साचे' ), + 'Mostlinked' => array( 'सर्वात_जास्त_जोडलेली' ), + 'Mostlinkedcategories' => array( 'सर्वात_जास्त_जोडलेले_वर्ग', 'सर्वात_जास्त_वापरलेले_वर्ग' ), + 'Mostlinkedtemplates' => array( 'सर्वात_जास्त_जोडलेले_साचे', 'सर्वात_जास्त_वापरलेले_साचे' ), 'Mostimages' => array( 'सर्वाधिकसांधलेलीसंचिका' ), - 'Mostcategories' => array( 'सर्वात जास्त वर्ग' ), + 'Mostcategories' => array( 'सर्वात_जास्त_वर्ग' ), 'Mostrevisions' => array( 'सर्वाधिकआवर्तने' ), 'Fewestrevisions' => array( 'कमीतकमीआवर्तने' ), - 'Shortpages' => array( 'छोटी पाने' ), - 'Longpages' => array( 'मोठी पाने' ), - 'Newpages' => array( 'नवीन पाने' ), - 'Ancientpages' => array( 'जुनी पाने' ), - 'Deadendpages' => array( 'टोकाची पाने' ), - 'Protectedpages' => array( 'सुरक्षित पाने' ), - 'Protectedtitles' => array( 'सुरक्षित शीर्षके' ), - 'Allpages' => array( 'सर्व पाने' ), + 'Shortpages' => array( 'छोटी_पाने' ), + 'Longpages' => array( 'मोठी_पाने' ), + 'Newpages' => array( 'नवीन_पाने' ), + 'Ancientpages' => array( 'जुनी_पाने' ), + 'Deadendpages' => array( 'टोकाची_पाने' ), + 'Protectedpages' => array( 'सुरक्षित_पाने' ), + 'Protectedtitles' => array( 'सुरक्षित_शीर्षके' ), + 'Allpages' => array( 'सर्व_पाने' ), 'Prefixindex' => array( 'उपसर्गसुची' ), 'Ipblocklist' => array( 'प्रतिबंधनसुची' ), - 'Specialpages' => array( 'विशेष पाने' ), + 'Specialpages' => array( 'विशेष_पाने' ), 'Contributions' => array( 'योगदान' ), 'Emailuser' => array( 'विपत्रवापरकर्ता' ), 'Confirmemail' => array( 'विपत्रनक्कीकरा' ), - 'Whatlinkshere' => array( 'येथे काय जोडले आहे' ), + 'Whatlinkshere' => array( 'येथे_काय_जोडले_आहे' ), 'Recentchangeslinked' => array( 'सांधलेलेअलिकडीलबदल' ), - 'Movepage' => array( 'पान हलवा' ), + 'Movepage' => array( 'पान_हलवा' ), 'Blockme' => array( 'मलाप्रतिबंधकरा' ), 'Booksources' => array( 'पुस्तकस्रोत' ), 'Categories' => array( 'वर्ग' ), 'Export' => array( 'निर्यात' ), 'Version' => array( 'आवृत्ती' ), - 'Allmessages' => array( 'सर्व निरोप' ), + 'Allmessages' => array( 'सर्व_निरोप' ), 'Log' => array( 'नोंद', 'नोंदी' ), 'Blockip' => array( 'प्रतिबंध', 'अंकपत्ताप्रतिबंध', 'सदस्यप्रतिबंध' ), - 'Undelete' => array( 'काढणे रद्द करा' ), + 'Undelete' => array( 'काढणे_रद्द_करा' ), 'Import' => array( 'आयात' ), - 'Lockdb' => array( 'कुलुपबंद करा (डेटाबेस)' ), + 'Lockdb' => array( 'कुलुपबंद_करा_(डेटाबेस)' ), 'Unlockdb' => array( 'विदागारताळेउघडा' ), - 'Userrights' => array( 'खातेदाराचे अधिकार' ), + 'Userrights' => array( 'खातेदाराचे_अधिकार' ), 'MIMEsearch' => array( 'माईमशोध' ), 'FileDuplicateSearch' => array( 'दुहेरीसंचिकाशोध' ), 'Unwatchedpages' => array( 'अप्रेक्षीतपाने' ), @@ -121,17 +121,17 @@ $specialPageAliases = array( 'Revisiondelete' => array( 'आवर्तनवगळा' ), 'Unusedtemplates' => array( 'नउपयोगातआणलेलासाचा' ), 'Randomredirect' => array( 'अविशिष्ट्पुर्ननिर्देशन' ), - 'Mypage' => array( 'माझे पान' ), - 'Mytalk' => array( 'माझ्या चर्चा' ), - 'Mycontributions' => array( 'माझे योगदान' ), - 'Listadmins' => array( 'प्रबंधकांची यादी' ), - 'Listbots' => array( 'सांगकाम्यांची यादी' ), - 'Popularpages' => array( 'प्रसिद्ध पाने' ), + 'Mypage' => array( 'माझे_पान' ), + 'Mytalk' => array( 'माझ्या_चर्चा' ), + 'Mycontributions' => array( 'माझे_योगदान' ), + 'Listadmins' => array( 'प्रबंधकांची_यादी' ), + 'Listbots' => array( 'सांगकाम्यांची_यादी' ), + 'Popularpages' => array( 'प्रसिद्ध_पाने' ), 'Search' => array( 'शोधा' ), 'Resetpass' => array( 'परवलीचाशब्दबदला' ), 'Withoutinterwiki' => array( 'विनाआंतरविकि' ), - 'MergeHistory' => array( 'इतिहास एकत्र करा' ), - 'Filepath' => array( 'संचिकेचा पत्ता (पाथ)' ), + 'MergeHistory' => array( 'इतिहास_एकत्र_करा' ), + 'Filepath' => array( 'संचिकेचा_पत्ता_(पाथ)' ), 'Invalidateemail' => array( 'चूकदिनांकविपत्र' ), 'Blankpage' => array( 'कोरेपान' ), 'LinkSearch' => array( 'दुवाशोध' ), @@ -246,14 +246,14 @@ $magicWords = array( 'revisionuser' => array( '1', 'आवृत्तीसदस्य', 'REVISIONUSER' ), 'plural' => array( '0', 'बहुवचन:', 'PLURAL:' ), 'fullurl' => array( '0', 'संपूर्णसंस्थळ', 'FULLURL:' ), - 'fullurle' => array( '0', 'संपूर्णसंस्थली :', 'संपूर्णसंस्थळी :', 'FULLURLE:' ), + 'fullurle' => array( '0', 'संपूर्णसंस्थली:', 'संपूर्णसंस्थळी:', 'FULLURLE:' ), 'raw' => array( '0', 'कच्चे:', 'RAW:' ), 'displaytitle' => array( '1', 'शीर्षकदाखवा', 'DISPLAYTITLE' ), 'rawsuffix' => array( '1', 'ॠ', 'R' ), 'newsectionlink' => array( '1', '__नवविभागदुवा__', '__NEWSECTIONLINK__' ), 'nonewsectionlink' => array( '1', '__विनानवविभागदुवा__', '__NONEWSECTIONLINK__' ), 'currentversion' => array( '1', 'सद्यआवृत्ती', 'CURRENTVERSION' ), - 'urlencode' => array( '0', 'संकेतस्थलीआंग्ल्संकेत :', 'URLENCODE:' ), + 'urlencode' => array( '0', 'संकेतस्थलीआंग्ल्संकेत:', 'URLENCODE:' ), 'anchorencode' => array( '0', 'नांगरआंग्लसंकेत', 'ANCHORENCODE' ), 'currenttimestamp' => array( '1', 'सद्यकालमुद्रा', 'CURRENTTIMESTAMP' ), 'localtimestamp' => array( '1', 'स्थानिककालमुद्रा', 'LOCALTIMESTAMP' ), @@ -266,7 +266,7 @@ $magicWords = array( 'padleft' => array( '0', 'डावाभरीव', 'भरीवडावा', 'PADLEFT' ), 'padright' => array( '0', 'उजवाभरीव', 'भरीवउजवा', 'PADRIGHT' ), 'special' => array( '0', 'विशेष', 'special' ), - 'defaultsort' => array( '1', 'अविचलवर्ग :', 'अविचलवर्गकळ :', 'अविचलवर्गवर्गीकरण:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ), + 'defaultsort' => array( '1', 'अविचलवर्ग:', 'अविचलवर्गकळ:', 'अविचलवर्गवर्गीकरण:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ), 'filepath' => array( '0', 'संचिकामार्ग:', 'FILEPATH:' ), 'tag' => array( '0', 'खूण', 'खूणगाठ', 'tag' ), 'hiddencat' => array( '1', '__वर्गलपवा__', '__HIDDENCAT__' ), @@ -311,8 +311,7 @@ $messages = array( 'tog-editsection' => '[संपादन] दुव्याने संपादन करणे शक्य करा', 'tog-editsectiononrightclick' => 'विभाग शीर्षकावर उजव्या क्लीकने संपादन करा(जावास्क्रीप्ट)', 'tog-showtoc' => '३ पेक्षा जास्त शीर्षके असताना अनुक्रमणिका दाखवा', -'tog-rememberpassword' => 'माझा प्रवेश या संगणकावर लक्षात ठेवा', -'tog-editwidth' => 'संपादन खिडकी पूर्ण रुंदीची दाखवा.', +'tog-rememberpassword' => 'माझा प्रवेश या संगणकावर लक्षात ठेवा (जास्तीत जास्त $1 {{PLURAL:$1|दिवसांकरिता}})', 'tog-watchcreations' => 'मी तयार केलेली पाने माझ्या पहार्‍याच्या सूचीत टाका', 'tog-watchdefault' => 'मी संपादित केलेली पाने माझ्या पहार्‍याच्या सूचीत टाका', 'tog-watchmoves' => 'मी स्थानांतरीत केलेली पाने माझ्या पहार्‍याच्या सूचीत टाका', @@ -349,6 +348,7 @@ $messages = array( 'underline-default' => 'न्याहाळक अविचल (browser default)', # Font style option in Special:Preferences +'editfont-style' => 'विभागाची टंकशैली संपादा:', 'editfont-default' => 'न्याहाळक अविचल', 'editfont-monospace' => 'एकलअंतर असलेला टंक', 'editfont-sansserif' => 'सॅन्स-सेरिफ टंक', @@ -446,7 +446,7 @@ $messages = array( # Cologne Blue skin 'qbfind' => 'शोध', -'qbbrowse' => 'विचरण', +'qbbrowse' => 'न्याहाळा', 'qbedit' => 'संपादन', 'qbpageoptions' => 'हे पान', 'qbpageinfo' => 'सामग्री', @@ -456,31 +456,21 @@ $messages = array( 'faqpage' => 'Project:प्रश्नावली', # Vector skin -'vector-action-addsection' => 'विषय जोडा', -'vector-action-delete' => 'वगळा', -'vector-action-move' => 'स्थानांतरण', -'vector-action-protect' => 'सुरक्षित करा', -'vector-action-undelete' => 'पुनर्स्थापित करा', -'vector-action-unprotect' => 'असुरक्षित करा', -'vector-namespace-category' => 'वर्ग', -'vector-namespace-help' => 'साहाय्य पान', -'vector-namespace-image' => 'संचिका', -'vector-namespace-main' => 'लेख', -'vector-namespace-media' => 'माध्यम पान', -'vector-namespace-mediawiki' => 'संदेश', -'vector-namespace-project' => 'प्रकल्प पान', -'vector-namespace-special' => 'विशेष पृष्ठ', -'vector-namespace-talk' => 'चर्चा', -'vector-namespace-template' => 'साचा', -'vector-namespace-user' => 'सदस्य पान', -'vector-view-create' => 'तयार करा', -'vector-view-edit' => 'संपादन', -'vector-view-history' => 'इतिहास पहा', -'vector-view-view' => 'वाचा', -'vector-view-viewsource' => 'स्रोत पहा', -'actions' => 'क्रिया', -'namespaces' => 'नामविश्वे', -'variants' => 'अस्थिर', +'vector-action-addsection' => 'विषय जोडा', +'vector-action-delete' => 'वगळा', +'vector-action-move' => 'स्थानांतरण', +'vector-action-protect' => 'सुरक्षित करा', +'vector-action-undelete' => 'पुनर्स्थापित करा', +'vector-action-unprotect' => 'असुरक्षित करा', +'vector-simplesearch-preference' => 'प्रगत शोधविकल्प सक्रिय करा (फक्त व्हेक्टर त्वचेसाठी)', +'vector-view-create' => 'तयार करा', +'vector-view-edit' => 'संपादन', +'vector-view-history' => 'इतिहास पहा', +'vector-view-view' => 'वाचा', +'vector-view-viewsource' => 'स्रोत पहा', +'actions' => 'क्रिया', +'namespaces' => 'नामविश्वे', +'variants' => 'अस्थिर', 'errorpagetitle' => 'चूक', 'returnto' => '$1 कडे परत चला.', @@ -535,9 +525,12 @@ $messages = array( 'protectedpage' => 'सुरक्षित पृष्ठ', 'jumpto' => 'येथे जा:', 'jumptonavigation' => 'सुचालन', -'jumptosearch' => 'शोधयंत्र', -'view-pool-error' => 'माफ करा. यावेळेस सर्व्हरवर ताण आहे.अनेक सदस्य हे पान बघण्याचा प्रयत्न करीत आहेत.पुन्हा या पानावर पोचण्यासाठी थोडा वेळ थांबुन परत प्रयत्न करा. +'jumptosearch' => 'शोध', +'view-pool-error' => 'माफ करा. यावेळेस सर्व्हरवर ताण आहे. अनेक सदस्य हे पान बघण्याचा प्रयत्न करीत आहेत. पुन्हा या पानावर पोचण्यासाठी थोडा वेळ थांबून परत प्रयत्‍न करा. $1', +'pool-timeout' => 'ताळ्यासाठी वाट पाहताना वेळ संपली', +'pool-queuefull' => 'सर्व्हरवर ताण आहे.', +'pool-errorunknown' => 'अपरिचित त्रूटी', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} बद्दल', @@ -624,7 +617,7 @@ $1', ही बाब संचेतनात (सॉफ्टवेअरमध्ये) क्षितिजन्तु असण्याची शक्यता निर्देशीत करते. "$2" या कार्यातून निघालेली शेवटची विदापृच्छा पुढील प्रमाणे होती:
    $1
    -MySQL ने "$3: $4" ही त्रूटी दिलेली आहे.', +मायएसक्युएलने "$3: $4" ही त्रूटी दिलेली आहे.', 'dberrortextcl' => 'चुकीच्या प्रश्नलेखनामुळे माहितीसंग्रह त्रुटी. शेवटची माहितीसंग्रहाला पाठविलेला प्रश्न होता: "$1" @@ -647,6 +640,8 @@ MySQL returned error "$3: $4".', 'readonly_lag' => 'मुख्य विदागार दात्याच्या (master database server) बरोबरीने पोहचण्यास पराधीन-विदागारदात्यास (slave server) वेळ लागल्यामुळे, विदागार आपोआप बंद झाला आहे.', 'internalerror' => 'अंतर्गत त्रूटी', 'internalerror_info' => 'अंतर्गत त्रूटी: $1', +'fileappenderrorread' => 'जोडणीच्या दरम्यान "$1" वाचता आले नाही.', +'fileappenderror' => '"$1" ते "$2" जोडता आले नाही.', 'filecopyerror' => '"$1" संचिकेची "$2" ही प्रत करता आली नाही.', 'filerenameerror' => '"$1" संचिकेचे "$2" असे नामांतर करता आले नाही.', 'filedeleteerror' => '"$1" संचिका वगळता आली नाही.', @@ -699,7 +694,8 @@ $2', 'yourname' => 'तुमचे नाव', 'yourpassword' => 'तुमचा परवलीचा शब्द', 'yourpasswordagain' => 'तुमचा परवलीचा शब्द पुन्हा लिहा', -'remembermypassword' => 'माझा परवलीचा शब्द पुढील खेपेसाठी लक्षात ठेवा.', +'remembermypassword' => 'माझा परवलीचा शब्द पुढील खेपेसाठी लक्षात ठेवा (जास्तीतजास्त $1 {{PLURAL:$1|दिवसासाठी|दिवसांसाठी}})', +'securelogin-stick-https' => 'प्रवेशानंतर एचटीटीपीएसच्या संपर्कात रहा', 'yourdomainname' => 'तुमचे क्षेत्र (डॉमेन) :', 'externaldberror' => 'विदागार ’खातरजमा’ (प्रमाणितीकरण) त्रूटी होती अथवा तुम्हाला तुमचे बाह्य खाते अद्यावत करण्याची परवानगी नाही.', 'login' => 'प्रवेश करा', @@ -716,6 +712,7 @@ $2', 'gotaccount' => "जुने खाते आहे? '''$1'''.", 'gotaccountlink' => 'प्रवेश करा', 'createaccountmail' => 'इमेल द्वारे', +'createaccountreason' => 'कारण:', 'badretype' => 'आपला परवलीचा शब्द चुकीचा आहे.', 'userexists' => 'या नावाने सदस्याची नोंदणी झालेली आहे. कृपया दुसरे सदस्य नाव निवडा.', @@ -726,21 +723,22 @@ $2', 'noname' => 'आपण नोंदणीसाठी सदस्याचे योग्य नाव लिहिले नाही.', 'loginsuccesstitle' => 'आपल्या प्रवेशाची नोंदणी यशस्वीरित्या पूर्ण झाली', 'loginsuccess' => "'''तुम्ही {{SITENAME}} वर \"\$1\" नावाने प्रवेश केला आहे.'''", -'nosuchuser' => '"$1" या नावाचा कोणताही सदस्य नाही.तुमचे शुद्धलेखन तपासा, किंवा नवीन खाते तयार करा.', +'nosuchuser' => '"$1" या नावाचा कोणताही सदस्य नाही.तुमचे शुद्धलेखन तपासा, किंवा [[Special:UserLogin/signup|नवीन खाते]] तयार करा.', 'nosuchusershort' => '"$1" या नावाचा सदस्य नाही. लिहीताना आपली चूक तर नाही ना झाली?', 'nouserspecified' => 'तुम्हाला सदस्यनाव नमुद करावे लागेल.', 'login-userblocked' => 'या सदस्याचे खाते ’प्रतिबंधित’ आहे. त्यास प्रवेश करु देणे शक्य नाही.', 'wrongpassword' => 'आपला परवलीचा शब्द चुकीचा आहे, पुन्हा एकदा प्रयत्न करा.', 'wrongpasswordempty' => 'परवलीचा शब्द रिकामा आहे; परत प्रयत्न करा.', -'passwordtooshort' => 'तुमचा परवलीचा शब्द जरूरीपेक्षा लहान आहे. यात कमीत कमी $1 अक्षरे पाहिजेत.', +'passwordtooshort' => 'तुमचा परवलीचा शब्द जरूरीपेक्षा लहान आहे. यात कमीत कमी {{PLURAL:$1|१ अक्षर |$1 अक्षरे}} पाहिजेत.', 'password-name-match' => 'आपला परवलीचा शब्द हा आपल्या सदस्यनावापेक्षा वेगळा हवा.', +'password-login-forbidden' => 'या सदस्यनामाचा व परवलीच्या शब्दाचा वापर निषिद्ध आहे.', 'mailmypassword' => 'परवलीचा नवीन शब्द इमेल पत्त्यावर पाठवा', 'passwordremindertitle' => '{{SITENAME}}करिता नवा तात्पुरता परवलीचा शब्दांक.', 'passwordremindertext' => 'कुणीतरी (कदाचित तुम्ही, अंकपत्ता $1 कडून) {{SITENAME}} करिता ’नवा परवलीचा शब्दांक पाठवावा’ अशी विनंती केली आहे ($4). "$2" सदस्याकरिता परवलीचा शब्दांक "$3" झाला आहे. -तुम्ही आता प्रवेश करा व तुमचा परवलीचा शब्दांक बदला. +तुम्ही आता प्रवेश करा व तुमचा परवलीचा शब्दांक बदला. तुमचा अस्थायी शब्दांक {{PLURAL:$5|एका दिवसात|$5 दिवसांत}} संपेल. -जर ही विनंती इतर कुणी केली असेल किंवा तुम्हाला तुमचा परवलीचा शब्दांक आठवला असेल आणि तुम्ही तो आता बदलू इच्छित नसाल तर, तुम्ही हा संदेश दूर्लक्षित करून जूना परवलीचा शब्दांक वापरत राहू शकता.', +जर ही विनंती इतर कुणी केली असेल किंवा तुम्हाला तुमचा परवलीचा शब्दांक आठवला असेल आणि तुम्ही तो आता बदलू इच्छित नसाल तर, तुम्ही हा संदेश दुर्लक्षित करून जुना परवलीचा शब्दांक वापरत राहू शकता.', 'noemail' => '"$1" सदस्यासाठी कोणताही इमेल पत्ता दिलेला नाही.', 'noemailcreate' => 'आपण वैध विरोप-पत्ता (ई-मेल ऍड्रेस) देणे आवश्यक आहे.', 'passwordsent' => '"$1" सदस्याच्या इमेल पत्त्यावर परवलीचा नवीन शब्द पाठविण्यात आलेला आहे. @@ -750,8 +748,8 @@ $2', खात्यावर कोणताही इतर ई-मेल पाठविण्यापूर्वी - तो ई-मेल पत्ता तुमचाच आहे, हे सूनिश्चित करण्यासाठी - तुम्हाला त्या ई-मेल मधील सूचनांचे पालन करावे लागेल.', 'throttled-mailpassword' => 'मागील {{PLURAL:$1|एका तासामध्ये|$1 तासांमध्ये}} परवलीचा शब्द बदलण्यासाठीची सूचना पाठविलेली आहे. दुरुपयोग टाळण्यासाठी {{PLURAL:$1|एका तासामध्ये|$1 तासांमध्ये}} फक्त एकदाच सूचना दिली जाईल.', 'mailerror' => 'विपत्र पाठवण्यात त्रूटी: $1', -'acct_creation_throttle_hit' => 'माफ करा, तुम्ही आत्तापर्यंत $1 खाती उघडली आहेत. तुम्हाला आणखी खाती उघडता येणार नाहीत.', -'emailauthenticated' => 'तुमचा इ-मेल $1 ला तपासलेला आहे.', +'acct_creation_throttle_hit' => 'माफ करा, तुम्ही आत्तापर्यंत {{PLURAL:$1|१ खाते उघडले आहे|$1 खाती उघडली आहेत}}. तुम्हाला आणखी खाती उघडता येणार नाहीत.', +'emailauthenticated' => 'तुमचा विपत्रपत्ता $3 येथे $2 यावेळी तपासण्यात आला आहे.', 'emailnotauthenticated' => 'तुमचा इमेल पत्ता तपासलेला नाही. खालील कार्यांकरिता इमेल पाठविला जाणार नाही.', 'noemailprefs' => 'खालील सुविधा कार्यान्वित करण्यासाठी इ-मेल पत्ता पुरवा.', 'emailconfirmlink' => 'आपला इमेल पत्ता तपासून पहा.', @@ -763,21 +761,30 @@ $2', जर ही नोंदणी चुकीने झाली असेल तर तुम्ही या संदेशाकडे दुर्लक्ष करू शकता.', 'usernamehasherror' => 'सदस्यनामात "हॅश" वर्ण असू शकत नाहीत.', +'login-throttled' => 'तुम्ही प्रवेश करण्यासाठी खूप प्रयत्‍न केले आहेत. +कृपया पुन्हा प्रयत्‍न करण्याआधी थांबा', 'loginlanguagelabel' => 'भाषा: $1', +'suspicious-userlogout' => 'तुमचे अदाखल होणे प्रतिबंधित झाले कारण असे दिसते की ते तुटलेल्या न्याहाळकाद्वारे पाठवले गेले.', + +# E-mail sending +'php-mail-error-unknown' => 'पीएचपीच्या विपत्र() पर्यायात अज्ञात चूक', # Password reset dialog 'resetpass' => 'परवलीचा शब्द बदला', 'resetpass_announce' => 'तुम्ही इमेलमधून दिलेल्या तात्पुरत्या शब्दांकाने प्रवेश केलेला आहे. आपली सदस्य नोंदणी पूर्ण करण्यासाठी कृपया इथे नवीन परवलीचा शब्द द्या:', 'resetpass_text' => '', -'resetpass_header' => 'परवलीचे पुर्नयोजन करा', +'resetpass_header' => 'खात्याचा परवलीचा शब्द बदला', 'oldpassword' => 'जुना परवलीचा शब्दः', 'newpassword' => 'नवीन परवलीचा शब्द:', 'retypenew' => 'पुन्हा एकदा परवलीचा शब्द', 'resetpass_submit' => 'परवलीचा शब्द टाका आणि प्रवेश करा', 'resetpass_success' => 'तुमचा परवलीचा शब्द बदललेला आहे! आता तुमचा प्रवेश करीत आहोत...', -'resetpass_forbidden' => '{{SITENAME}} वर परवलीचा शब्द बदलता येत नाही.', +'resetpass_forbidden' => 'परवलीचा शब्द बदलता येत नाही.', +'resetpass-no-info' => 'या पानामध्ये थेट जाण्यासाठी तुम्हाला प्रवेश घ्यावा लागेल.', 'resetpass-submit-loggedin' => 'परवलीचा शब्द बदला', 'resetpass-submit-cancel' => 'रद्द करा', +'resetpass-wrong-oldpass' => 'अवैध अस्थायी किंवा परवलीचा शब्द. +कदाचित तुम्ही आधीच तो यशस्वीरीत्या बदलला असेल किंवा तात्पुरता परवलीचा शब्द मागवला असेल.', 'resetpass-temp-password' => 'तात्पुरता परवलीचा शब्द', # Edit page toolbar @@ -811,9 +818,10 @@ $2', 'showlivepreview' => 'थेट झलक', 'showdiff' => 'बदल दाखवा', 'anoneditwarning' => "'''सावधानः''' तुम्ही विकिपीडियाचे सदस्य म्हणून प्रवेश (लॉग-इन) केलेला नाही. या पानाच्या संपादन इतिहासात तुमचा आय.पी. ऍड्रेस नोंदला जाईल.", +'anonpreviewwarning' => "\"'''सावधान:''' तुम्ही विकिपीडियाचे सदस्य म्हणून प्रवेश (लॉग-इन) केलेला नाही. या पानाच्या संपादन इतिहासात तुमचा आय.पी. अंकपत्ता (अ‍ॅड्रेस) नोंदला जाईल.\"", 'missingsummary' => "'''आठवण:''' तूम्ही संपादन सारांश पुरवलेला नाही.आपण जतन करा वर पुन्हा टीचकी मारली तर तेत्या शिवाय जतन होईल.", 'missingcommenttext' => 'कृपया खाली प्रतिक्रीया भरा.', -'missingcommentheader' => "'''आठवण:'''आपण या लेखनाकरिता विषय किंवा अधोरेषा दिलेली नाही .आपण पुन्ह जतन करा अशी सुचना केली तर, तुमचे संपादन त्याशिवायच जतन होईल.", +'missingcommentheader' => "'''आठवण:''' आपण या लेखनाकरिता विषय किंवा अधोरेषा दिलेली नाही. आपण पुन्हा जतन करा अशी सूचना केली तर, तुमचे संपादन त्याशिवायच जतन होईल.", 'summary-preview' => 'आढाव्याची झलक:', 'subject-preview' => 'विषय/मथळा झलक:', 'blockedtitle' => 'या सदस्यासाठी प्रवेश नाकारण्यात आलेला आहे.', @@ -830,7 +838,7 @@ $2', तुम्ही जोवर वैध इमेल पत्ता आपल्या [[Special:Preferences|माझ्या पसंती]] पानावर देत नाही तोवर तुम्ही ’सदस्याला इमेल पाठवा’ हा दुवा वापरू शकत नाही. तसेच असे करण्यापासून आपल्याला ब्लॉक केलेले नाही. तुमचा सध्याचा IP पत्ता $3 हा आहे, व तुमचा ब्लॉक क्रमांक #$5 हा आहे. कृपया या संदर्भातील चर्चेमध्ये यापैकी काहीही उद्घृत करा.", -'autoblockedtext' => 'तुमचा आंतरजालीय अंकपत्ता आपोआप स्थगीत केला आहे कारण तो इतर अशा सदस्याने वापरलाकी, ज्याला $1ने प्रतिबंधित केले. +'autoblockedtext' => 'तुमचा आंतरजालीय अंकपत्ता आपोआप स्थगित केला आहे कारण तो इतर अशा सदस्याने वापरलाकी, ज्याला $1ने प्रतिबंधित केले. आणि दिलेले कारण खालील प्रमाणे आहे :\'\'$2\'\' @@ -854,25 +862,34 @@ $2', 'loginreqlink' => 'प्रवेश करा', 'loginreqpagetext' => 'तुम्ही इतर पाने पहाण्याकरिता $1 केलेच पाहिजे.', 'accmailtitle' => 'परवलीचा शब्द पाठविण्यात आलेला आहे.', -'accmailtext' => "'$1' चा परवलीचा शब्द $2 पाठविण्यात आलेला आहे.", +'accmailtext' => '[[User talk:$1|$1]] यांसाठी अविशिष्टपनॆ निर्मित केलेला परवलीचा शब्द $2 यांना पाठवण्यात आला आहे. + +या नवीन खात्यासाठीचा परवलीचा शब्द प्रवेश घेतल्यावर [[Special:ChangePassword|येथे]] बदलता येईल.', 'newarticle' => '(नवीन लेख)', 'newarticletext' => 'तुम्हाला अपेक्षित असलेला लेख अजून लिहिला गेलेला नाही. हा लेख लिहिण्यासाठी खालील पेटीत मजकूर लिहा. मदतीसाठी [[{{MediaWiki:Helppage}}|येथे]] टिचकी द्या. जर येथे चुकून आला असाल तर ब्राउझरच्या बॅक (back) कळीवर टिचकी द्या.', -'anontalkpagetext' => "---- ''हे बोलपान अशा अज्ञात सदस्यासाठी आहे ज्यांनी खाते तयार केलेले नाही किंवा त्याचा वापर करत नाहीत. त्यांच्या ओळखीसाठी आम्ही आंतरजाल अंकपत्ता वापरतो आहोत. असा अंकपत्ता बर्‍याच लोकांचा एकच असू शकतो जर आपण अज्ञात सदस्य असाल आणि आपल्याला काही अप्रासंगिक संदेश मिळाला असेल तर कृपया [[Special:UserLogin| खाते तयार करा किंवा प्रवेश करा]] ज्यामुळे पुढे असे गैरसमज होणार नाहीत.''", +'anontalkpagetext' => "---- ''हे बोलपान अशा अज्ञात सदस्यासाठी आहे ज्यांनी खाते तयार केलेले नाही किंवा त्याचा वापर करत नाहीत. त्यांच्या ओळखीसाठी आम्ही आंतरजाल अंकपत्ता वापरतो आहोत. असा अंकपत्ता बर्‍याच लोकांचा एकच असू शकतो जर आपण अज्ञात सदस्य असाल आणि आपल्याला काही अप्रासंगिक संदेश मिळाला असेल तर कृपया [[Special:UserLogin| खाते तयार करा]] किंवा [[Special:UserLogin/signup|प्रवेश करा]] ज्यामुळे पुढे असे गैरसमज होणार नाहीत.''", 'noarticletext' => 'या लेखात सध्या काहीही मजकूर नाही. तुम्ही विकिपिडीयावरील इतर लेखांमध्ये या [[Special:Search/{{PAGENAME}}|मथळ्याच्या शोध घेऊ शकता]], [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} इतर याद्या शोधा], किंवा हा लेख [{{fullurl:{{FULLPAGENAME}}|action=edit}} लिहू शकता].', +'noarticletext-nopermission' => 'या लेखात सध्या काहीही मजकूर नाही. +तुम्ही विकिपिडीयावरील इतर लेखांमध्ये या [[Special:Search/{{PAGENAME}}|मथळ्याच्या शोध घेऊ शकता]], [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} इतर याद्या शोधा], +किंवा हा लेख [{{fullurl:{{FULLPAGENAME}}|action=edit}} लिहू शकता].', 'userpage-userdoesnotexist' => '"$1" सदस्य खाते नोंदीकॄत नाही.कृपया हे पान तुम्ही संपादीत किंवा नव्याने तयार करू इच्छिता का या बद्दल विचार करा.', 'userpage-userdoesnotexist-view' => 'सदस्यखाते "$1" हे नोंदलेले नाही.', +'blocked-notice-logextract' => 'हा सदस्य सध्या प्रतिबंधित आहे. +सर्वांत नवीन प्रतिबंधन यादी खाली संदर्भासाठी दिली आहे:', 'clearyourcache' => "'''सूचना:''' जतन केल्यानंतर, बदल पहाण्याकरिता तुम्हाला तुमच्या विचरकाची सय टाळायला लागू शकते. '''मोझील्ला/फायरफॉक्स /सफारी:''' ''Reload''करताना ''Shift''दाबून ठेवा किंवा ''Ctrl-Shift-R'' दाबा (ऍपल मॅक वर ''Cmd-shift-R'');'''IE:''' ''Refresh'' टिचकताना ''Ctrl'' दाबा,किंवा ''Ctrl-F5'' दाबा ; '''Konqueror:''': केवळ '''Reload''' टिचकवा,किवा ''F5'' दाबा; '''Opera'''उपयोगकर्त्यांना ''Tools→Preferences'' मधील सय पूर्ण रिकामी करायला लागेल.", -'usercssyoucanpreview' => "'''टीप:'''तुमचे नवे CSS जतन करण्यापूर्वी 'झलक पहा' कळ वापरा.", -'userjsyoucanpreview' => "'''टीप:'''तुमचे नवे JS जतन करण्यापूर्वी 'झलक पहा' कळ वापरा.", +'usercssyoucanpreview' => "'''टीप:'''तुमचे नवे सीएसएस जतन करण्यापूर्वी 'झलक पहा' कळ वापरा.", +'userjsyoucanpreview' => "'''टीप:''' तुमचा नवा जावास्क्रिप्ट जतन करण्यापूर्वी 'झलक पहा' कळ वापरा.", 'usercsspreview' => "'''तुम्ही तुमच्या सी.एस.एस.ची केवळ झलक पहात आहात, ती अजून जतन केलेली नाही हे लक्षात घ्या.'''", 'userjspreview' => "'''तुम्ही तुमची सदस्य जावास्क्रिप्ट तपासत आहात किंवा झलक पहात आहात ,ती अजून जतन केलेली नाही हे लक्षात घ्या!'''", -'userinvalidcssjstitle' => "'''सावधान:''' \"\$1\" अशी त्वचा नाही.custom .css आणि .js पाने lowercase title वापरतात हे लक्षात घ्या, उदा. {{ns:user}}:Foo/monobook.css या विरूद्ध {{ns:user}}:Foo/Monobook.css.", +'sitecsspreview' => "'''तुम्ही तुमच्या सी.एस.एस.ची केवळ झलक पहात आहात, ती अजून जतन केलेली नाही हे लक्षात घ्या.'''", +'sitejspreview' => "'''तुम्ही तुमच्या जावास्क्रिप्टची केवळ झलक पहात आहात, ती अजून जतन केलेली नाही हे लक्षात घ्या.'''", +'userinvalidcssjstitle' => "'''सावधान:''' \"\$1\" अशी त्वचा नाही.custom .css आणि .js पाने lowercase title वापरतात हे लक्षात घ्या, उदा. {{ns:user}}:Foo/vector.css या विरूद्ध {{ns:user}}:Foo/Vector.css.", 'updated' => '(बदल झाला आहे.)', 'note' => "'''सूचना:'''", 'previewnote' => "'''लक्षात ठेवा की ही फक्त झलक आहे, बदल अजून सुरक्षित केलेले नाहीत.'''", @@ -888,7 +905,7 @@ $2', असे कदाचित तुम्ही अनामिक proxy वापरत असल्याने होऊ शकते.'''", 'editing' => '$1 चे संपादन होत आहे.', 'editingsection' => '$1 (विभाग) संपादन', -'editingcomment' => '$1 संपादन (प्रतिक्रीया)', +'editingcomment' => '$1 चे संपादन (प्रतिक्रिया)', 'editconflict' => 'वादग्रस्त संपादन: $1', 'explainconflict' => "तुम्ही संपादनाला सुरूवात केल्यानंतर इतर कोणीतरी बदल केला आहे. वरील पाठ्यभागामध्ये सध्या अस्तिवात असलेल्या पृष्ठातील पाठ्य आहे, तर तुमचे बदल खालील पाठ्यभागात दर्शविलेले आहेत. @@ -904,18 +921,16 @@ $2', तुम्ही येथे लेखन करताना हे सुद्धा गृहित धरलेले असते की येथे केलेले लेखन तुमचे स्वतःचे आणि केवळ स्वतःच्या प्रताधिकार (कॉपीराईट) मालकीचे आहे किंवा प्रताधिकाराने गठीत न होणार्‍या सार्वजनिक ज्ञानक्षेत्रातून घेतले आहे किंवा तत्सम मुक्त स्रोतातून घेतले आहे. तुम्ही संपादन करताना तसे वचन देत आहात. '''प्रताधिकारयुक्त लेखन सुयोग्य परवानगीशिवाय मुळीच चढवू/भरू नये!'''", 'copyrightwarning2' => "{{SITENAME}} येथे केलेले कोणतेही लेखन हे इतर संपादकांकरवी बदलले अथवा काढले जाऊ शकते. जर आपणास आपल्या लेखनाचे मुक्त संपादन होणे पसंत नसेल तर येथे संपादन करू नये.
    तुम्ही येथे लेखन करताना हे सुद्धा गृहित धरलेले असते की येथे केलेले लेखन तुमचे स्वतःचे आणि केवळ स्वतःच्या प्रताधिकार (कॉपीराईट) मालकीचे आहे किंवा प्रताधिकाराने गठीत न होणार्‍या सार्वजनिक ज्ञानक्षेत्रातून घेतले आहे किंवा तत्सम मुक्त स्रोतातून घेतले आहे. तुम्ही संपादन करताना तसे वचन देत आहात (अधिक माहितीसाठी $1 पहा). '''प्रताधिकारयुक्त लेखन सुयोग्य परवानगीशिवाय मुळीच चढवू/भरू नये!'''", -'longpagewarning' => "'''इशारा: हे पृष्ठ $1 kilobytes लांबीचे आहे; काही विचरकांना सुमारे ३२ किलोबाईट्स् आणि त्यापेक्षा जास्त लांबीच्या पृष्ठांना संपादित करण्यास अडचण येऊ शकते. -कृपया या पृष्ठाचे त्याहून छोट्या भागात रुपांतर करावे.'''", 'longpageerror' => "'''त्रूटी:आपण दिलेला मजकुर जास्तीत जास्त शक्य $2 किलोबाईट पेक्षा अधिक लांबीचा $1 किलोबाईट आहे.तो जतन केला जाऊ शकत नाही.'''", 'readonlywarning' => "सावधान:विदागारास भरण-पोषणाकरिता ताळे ठोकले आहे,त्यामुळे सध्या तुम्ही तुमचे संपादन जतन करू शकत नाही.जर तुम्हाला हवे असेल तर नंतर उपयोग करण्याच्या दृष्टीने, तुम्ही मजकुर ’मजकुर संचिकेत’(टेक्स्ट फाईल मध्ये) कापून-चिटकवू शकता.''' विदागारास ताळे ठोकलेल्या प्रचालकांनी $1 असे स्पष्टीकरणे दीले आहे", -'protectedpagewarning' => "'''सूचना: हे सुरक्षीत पान आहे. फक्त प्रचालक याच्यात बदल करु शकतात.'''", -'semiprotectedpagewarning' => "'''सूचना:''' हे पान सुरक्षीत आहे. फक्त सदस्य याच्यात बदल करू शकतात.", +'protectedpagewarning' => "'''सूचना: हे सुरक्षित पान आहे. फक्त प्रचालक याच्यात बदल करु शकतात.'''", +'semiprotectedpagewarning' => "'''सूचना:''' हे पान सुरक्षित आहे. फक्त नोंदणीकृत सदस्य याच्यात बदल करू शकतात.", 'cascadeprotectedwarning' => "'''सावधान:''' हे पान निम्न-लिखीत शिडी-प्रतिबंधीत {{PLURAL:$1|पानात|पानात}} आंतरभूत असल्यामुळे,केवळ प्रचालक सुविधाप्राप्त सदस्यांनाच संपादन करता यावे असे ताळे त्यास ठोकलेले आहे :", -'titleprotectedwarning' => "सावधान:फक्त काही सदस्यानांच [[Special:ListGroupRights|विशेष आधिकार]] तयार करता यावे म्हणून ह्या पानास ताळे आहे.'''", -'templatesused' => 'या पानावर खालील साचे वापरण्यात आलेले आहेत:', -'templatesusedpreview' => 'या झलकेमध्ये वापरलेले साचे:', -'templatesusedsection' => 'या विभागात वापरलेले साचे:', +'titleprotectedwarning' => "”’सावधान: फक्त काही सदस्यानांच [[Special:ListGroupRights|विशेष आधिकार]] तयार करता यावे म्हणून ह्या पानास ताळे आहे.'''", +'templatesused' => 'या झलकेमध्ये {{PLURAL:$1|वापरलेला साचा|वापरलेले साचे}}:', +'templatesusedpreview' => 'या झलकेमध्ये {{PLURAL:$1|वापरलेला साचा|वापरलेले साचे}}:', +'templatesusedsection' => 'या विभागामध्ये {{PLURAL:$1|वापरलेला साचा|वापरलेले साचे}}:', 'template-protected' => '(सुरक्षित)', 'template-semiprotected' => '(अर्ध-सुरक्षीत)', 'hiddencategories' => 'हे पान खालील {{PLURAL:$1|एका लपविलेल्या वर्गामध्ये|$1 लपविलेल्या वर्गांमध्ये}} आहे:', @@ -934,15 +949,18 @@ $2', 'moveddeleted-notice' => 'हे पान वगळण्यात आलेले आहे. खाली संदर्भासाठी वगळण्याची सूची दिलेली आहे.', 'log-fulllog' => 'पूर्ण यादी पहा.', +'edit-hook-aborted' => 'हूकद्वारे संपादन रद्द. +कारण नाही.', 'edit-gone-missing' => 'नविन पृष्ठ तयार करता आले नाही. पूर्वीपासून अस्तित्वात आहे.', 'edit-conflict' => 'वादग्रस्त संपादन', +'edit-no-change' => 'तुमचे संपादन दुर्लक्षित करण्यात आले आहे, कारण माहितीमध्ये काहीही बदल झालेला नाही.', 'edit-already-exists' => 'नवीन पान तयार करता येऊ शकले नाही. या नावाचे पान आधीच अस्तित्वात आहे.', # Parser/template warnings -'expensive-parserfunction-warning' => 'इशारा: या पानावर खूप सारे खर्चिक पृथक्करण क्रिया कॉल्स आहेत. +'expensive-parserfunction-warning' => '”’इशारा:”’ या पानावर खूप सारे खर्चिक पृथक्करण क्रिया कॉल्स आहेत. -ते $2{{PLURAL:$2|कॉल|कॉल्स}} पेक्षा कमी असायला हवेत, सध्या $1{{PLURAL:$1| $1 कॉल| $1 कॉल्स}} एवढे आहेत.', +ते $2{{PLURAL:$2|कॉल|कॉल्स}} पेक्षा कमी असायला हवेत, सध्या $1{{PLURAL:$1| $1 कॉल| $1 कॉल्स}} एवढे आहेत.', 'expensive-parserfunction-category' => 'खूप सारे खर्चिक पार्सर क्रिया कॉल्स असणारी पाने', 'post-expand-template-inclusion-warning' => 'सूचना: साचे वाढविण्याची मर्यादा संपलेली आहे. काही साचे वगळले जातील.', @@ -950,12 +968,15 @@ $2', 'post-expand-template-argument-warning' => 'सूचना: या पानावर असा एकतरी साचा आहे जो वाढविल्यास खूप मोठा होईल. असे साचे वगळण्यात आलेले आहेत.', 'post-expand-template-argument-category' => 'अशी पाने ज्यांच्यामध्ये साचे वगळलेले आहेत', +'parser-template-loop-warning' => 'साचा चक्र मिळाले: [[$1]]', +'parser-template-recursion-depth-warning' => 'साचा पुनरावर्तन खोली मर्यादा ओलांडली ($1)', +'language-converter-depth-warning' => 'भाषा रुपांतरण खोली मर्यादा ओलांडली ($1)', # "Undo" feature 'undo-success' => 'संपादन परतवले जाऊ शकते.कृपया, आपण नेमके हेच करू इच्छीता हे खाली दिलेली तुलना पाहू निश्चीत करा,आणि नंतर संपादन परतवण्याचे काम पूर्ण करण्याकरिता इच्छीत बद्ल जतन करा.', 'undo-failure' => 'दरम्यान परस्पर विरोधी संपादने झाल्यामुळे आपण हे संपादन परतवू शकत नाही.', 'undo-norev' => 'हे संपादन परतविता आलेले नाही कारण ते अगोदरच उलटविलेले किंवा वगळलेले आहे.', -'undo-summary' => '[[विशेष:योगदान/$2|$2]] ([[सदस्य चर्चा:$2|चर्चा]])यांची आवृत्ती $1 परतवली.', +'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|चर्चा]])यांची आवृत्ती $1 परतवली.', # Account creation failure 'cantcreateaccounttitle' => 'खाते उघडू शकत नाही', @@ -999,44 +1020,80 @@ $3ने ''$2'' कारण दिले आहे.", संबधीत नव्या पानांकरिता [[Special:Search|विकिवर शोध घेण्याचा ]] प्रयत्न करा.', # Revision deletion -'rev-deleted-comment' => '(प्रतिक्रीया वगळली)', +'rev-deleted-comment' => '(प्रतिक्रिया वगळली)', 'rev-deleted-user' => '(सदस्य नाव वगळले)', 'rev-deleted-event' => '(कार्य नोंद वगळली)', +'rev-deleted-user-contribs' => '[सदस्यनाव / अंकपत्ता वगळला]', 'rev-deleted-text-permission' => "या पानाची आवृत्ती सार्वजनिक विदागारातून '''वगळण्यात आली आहे'''. [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} वगळल्याच्या नोंदीत]निर्देश असण्याची शक्यता आहे", -'rev-deleted-text-view' => "!!पानाचे हे आवर्तन सार्वजनिक विदागारातून '''वगळण्यात आले आहे'''. +'rev-deleted-text-unhide' => "पानाचे हे आवर्तन सार्वजनिक विदागारातून '''वगळले गेले आहे'''. +{{SITENAME}}च्या प्रबंधक या नात्याने तुम्ही ते [$1पाहू शकता]; [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} वगळलेल्या नोंदीत] माहिती असण्याची शक्यता आहे .", +'rev-suppressed-text-unhide' => "पानाचे हे आवर्तन सार्वजनिक विदागारातून '''लपवले गेले आहे'''. +{{SITENAME}}च्या प्रबंधक या नात्याने तुम्ही ते [$1पाहू शकता]; [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} वगळलेल्या नोंदीत] माहिती असण्याची शक्यता आहे .", +'rev-deleted-text-view' => "पानाचे हे आवर्तन सार्वजनिक विदागारातून '''वगळण्यात आले आहे'''. +{{SITENAME}}च्या प्रबंधक या नात्याने तुम्ही ते पाहू शकता; [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} वगळलेल्या नोंदीत] माहिती असण्याची शक्यता आहे .", +'rev-suppressed-text-view' => "पानाचे हे आवर्तन सार्वजनिक विदागारातून '''लपवण्यात आले आहे'''. +{{SITENAME}}च्या प्रबंधक या नात्याने तुम्ही ते पाहू शकता; [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} वगळलेल्या नोंदीत] माहिती असण्याची शक्यता आहे .", +'rev-deleted-no-diff' => "या पानाची आवृत्ती '''वगळण्यात आली आहे'''. + +[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} वगळल्याच्या नोंदीत]निर्देश असण्याची शक्यता आहे", +'rev-suppressed-no-diff' => 'तुम्ही हा फरक पाहू शकत नाही कारण या आवृत्त्यांमधील एक आवृती ”’वगळण्यात आली आहे.”’', +'rev-deleted-unhide-diff' => "पानाचे हे आवर्तन '''वगळले गेले आहे'''. +{{SITENAME}}च्या प्रबंधक या नात्याने तुम्ही ते [$1पाहू शकता]; [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} वगळलेल्या नोंदीत] माहिती असण्याची शक्यता आहे .", +'rev-suppressed-unhide-diff' => "पानाचे हे आवर्तन '''लपवले गेले आहे'''. +{{SITENAME}}च्या प्रबंधक या नात्याने तुम्ही ते [$1पाहू शकता]; [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} वगळलेल्या नोंदीत] माहिती असण्याची शक्यता आहे .", +'rev-deleted-diff-view' => "पानाचे हे आवर्तन'''वगळण्यात आले आहे'''. +{{SITENAME}}च्या प्रबंधक या नात्याने तुम्ही ते पाहू शकता; [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} वगळलेल्या नोंदीत] माहिती असण्याची शक्यता आहे .", +'rev-suppressed-diff-view' => "या फरकातील एक आवर्तन '''लपवण्यात आले आहे'''. {{SITENAME}}च्या प्रबंधक या नात्याने तुम्ही ते पाहू शकता; [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} वगळलेल्या नोंदीत] माहिती असण्याची शक्यता आहे .", 'rev-delundel' => 'दाखवा/लपवा', 'rev-showdeleted' => 'दाखवा', 'revisiondelete' => 'आवर्तने वगळा/पुनर्स्थापित करा', 'revdelete-nooldid-title' => 'अपेक्षीत आवृत्ती दिलेली नाही', 'revdelete-nooldid-text' => '!!आपण ही कृती करावयाची आवर्तने सूचीत केलेली नाहीत, दिलेले आवर्तन अस्तित्वात नाही, किंवा तुम्ही सध्याचे आवर्तन लपविण्याचा प्रयत्न करीत आहात.', +'revdelete-nologtype-title' => 'कोणताही यादीप्रकार दिलेला नाही', +'revdelete-nologtype-text' => 'ही क्रिया करण्यासाठी तुम्ही यादीप्रकार निवडला नाही.', +'revdelete-nologid-title' => 'अवैध यादी प्रविष्टी', +'revdelete-nologid-text' => 'तुम्ही हे कार्य होण्यासाठी निश्चित यादी प्रसंग निवडला नाही किंवा दिलेली प्रविष्टी अस्तित्वात नाही.', 'revdelete-no-file' => 'दर्शिवलेली संचिका अस्तित्वात नाही.', +'revdelete-show-file-confirm' => 'तुम्ही "$1" या संचिकेचे $2 येथून $3 वेळी असलेले आवर्तन नक्की पहाणार आहात?', 'revdelete-show-file-submit' => 'होय', 'revdelete-selected' => "'''[[:$1]] {{PLURAL:$2|चे निवडलेले आवर्तन|ची निवडलेली आवर्तने}}:'''", 'logdelete-selected' => "'''{{PLURAL:$1|निवडलेली नोंदीकृत घटना|निवडलेल्या नोंदीकृत घटना}}:'''", 'revdelete-text' => "'''वगळलेल्या नोंदी आणि घटना अजूनही पानाच्या इतिहासात आणि नोंदीत आढळेल,परंतु मजकुराचा भाग सार्वजनिक स्वरूपात उपलब्ध राहणार नाही.''' अजून इतर प्रतिबंध घातल्या शिवाय {{SITENAME}}चे इतर प्रबंधक झाकलेला मजकुर याच दुव्याने परतवू शकतील.", +'revdelete-confirm' => 'कृपया याची खात्री करा की तुम्ही हे करत आहात, त्याचे परिणाम जाणत आहात, आणि ते [[{{MediaWiki:Policy-url}}|मीडियाविकीच्या नीती]]नुसार आहे का?', +'revdelete-suppress-text' => "लपवण्याचा वापर '''फक्त''' पुढील गोष्टी असल्यासाठी होतो: +* अनुपयोगी माहिती +* अयोग्य व्यक्तिगत माहिती +*: ''गृहपत्ते, दूरध्वनी क्रमांक व सामाजिक सुरक्षा क्रमांक''", 'revdelete-legend' => 'दृश्य बंधने निश्चित करा', 'revdelete-hide-text' => 'आवर्तीत मजकुर लपवा', 'revdelete-hide-image' => 'संचिका मजकुर लपवा', 'revdelete-hide-name' => 'कृती आणि ध्येय लपवा', 'revdelete-hide-comment' => 'संपादन प्रतिक्रीया लपवा', 'revdelete-hide-user' => 'संपादकाचे सदस्यनाव/आंतरजाल अंकपत्ता लपवा', -'revdelete-hide-restricted' => 'ही बंधने प्रबंधक तसेच इतरांनाही लागू करा तसेच इंटरफेस ला ताळा ठोका', +'revdelete-hide-restricted' => 'ही बंधने प्रबंधक तसेच इतरांनाही लागू करा तसेच व्यक्तिरेखेला ताळा ठोका.', +'revdelete-radio-same' => '(कृपया बदलू नये)', 'revdelete-radio-set' => 'होय', 'revdelete-radio-unset' => 'नाही', 'revdelete-suppress' => 'प्रबंधक तसेच इतरांपासून विदा लपवा', 'revdelete-unsuppress' => 'पुर्नस्थापीत आवृत्तीवरील बंधने ऊठवा', 'revdelete-log' => 'कारण:', -'revdelete-submit' => 'निवडलेल्या आवृत्त्यांना लागू करा', +'revdelete-submit' => 'निवडलेल्या {{PLURAL:$1|आवृत्तीला|आवृत्त्यांना}} लागू करा', 'revdelete-logentry' => '[[$1]]ची आवर्तन सदृश्यता बदलली.', 'logdelete-logentry' => '[[$1]]ची घटना सदृश्यता बदलली.', 'revdelete-success' => "'''आवर्तनांची दृश्यता यशस्वी पणे लाविली.'''", +'revdelete-failure' => "'''आवर्तन दृश्यता अद्ययावत करता येत नाही:''' +$1", 'logdelete-success' => "'''घटनांची दृश्यता यशस्वी पणे लाविली.'''", +'logdelete-failure' => "'''यादी दृश्यता ठरवता आली नाही:''' +$1", 'revdel-restore' => 'दृश्यता बदला', +'revdel-restore-deleted' => 'वगळलेल्या आवृत्त्या', +'revdel-restore-visible' => 'दृष्य आवर्तने', 'pagehist' => 'पानाचा इतिहास', 'deletedhist' => 'वगळलेला इतिहास', 'revdelete-content' => 'कंटेंट', @@ -1048,8 +1105,25 @@ $3ने ''$2'' कारण दिले आहे.", 'revdelete-unhid' => 'अनहिड $1', 'revdelete-log-message' => '$2 {{PLURAL:$2|आवॄत्ती|आवृत्त्यां}}साठी $1', 'logdelete-log-message' => '$2 {{PLURAL:$2|घटने|घटनां}}साठी $1', +'revdelete-hide-current' => '$1 मधील $2 या वेळचे आवर्तन लपवता येत नाही, : ते सद्य पुनरावर्तन आहे. +ते लपवता येत नाही.', +'revdelete-show-no-access' => '$2, $1 ची वस्तू दाखवताना अडचण: ती "प्रतिबंधित" खूण असलेली आहे. +तुम्ही तिच्यापर्यंत पोचू शकत नाही.', +'revdelete-modify-no-access' => '$2, $1 ची वस्तू संपादताना अडचण: ती "प्रतिबंधित" खूण असलेली आहे. +तुम्ही तिच्यापर्यंत पोचू शकत नाही.', +'revdelete-modify-missing' => 'वस्तू क्र. $1 ला संपादताना त्रुटी: ती माहितीकोषात नाही!', +'revdelete-no-change' => "'''सूचना:''' $2, $1 च्या वस्तूने अगोदरच दृश्यता रुपरेषा मागितल्या आहेत.", +'revdelete-concurrent-change' => '$2, $1 ची वस्तू संपादताना चूक: तुम्ही तिला संपादताना दुसर्‍या व्यक्तिने वस्तूस संपादले असावे. +कृपया याद्या तपासा.', +'revdelete-only-restricted' => '$2, $1 ची वस्तू लपवताना चूक: तुम्ही इतर दृश्यता पर्यायांना निवडल्याशिवाय प्रचालकांपासून वस्तू लपवू शकत नाही.', +'revdelete-reason-dropdown' => '*सामान्य वगळण्याची कारणे +** प्रताधिकार उल्लंघन +** अयोग्य व्यक्तिगत माहिती +** अनुपयोगी माहिती', +'revdelete-otherreason' => 'इतर / आणखी कारण:', 'revdelete-reasonotherlist' => 'इतर कारणे', 'revdelete-edit-reasonlist' => 'वगळण्याची कारणे संपादीत करा', +'revdelete-offender' => 'आवर्तन निर्माता:', # Suppression log 'suppressionlog' => 'सप्रेशन नोंद', @@ -1075,6 +1149,7 @@ $3ने ''$2'' कारण दिले आहे.", 'mergehistory-invalid-destination' => 'लक्ष्य पानाचे शीर्षक योग्य असणे आवश्यक आहे.', 'mergehistory-autocomment' => '[[:$2]] मध्ये [[:$1]] एकत्रित केले', 'mergehistory-comment' => '[[:$2]] मध्ये [[:$1]] एकत्रित केले: $3', +'mergehistory-same-destination' => 'स्रोत व लक्ष्यपाने सारखीच असू शकत नाहीत', 'mergehistory-reason' => 'कारण:', # Merge log @@ -1084,55 +1159,79 @@ $3ने ''$2'' कारण दिले आहे.", 'mergelogpagetext' => 'एकापानाचा इतिहास इतर पानात टाकून अगदी अलिकडे एकत्रित केलेली एकत्रिकरणे निम्न्दर्शीत सूचीत आहेत.', # Diffs -'history-title' => '"$1" चा संपादन इतिहास', -'difference' => '(आवर्तनांमधील फरक)', -'lineno' => 'ओळ $1:', -'compareselectedversions' => 'निवडलेल्या आवृत्त्यांमधील बदल पहा', -'editundo' => 'उलटवा', -'diff-multi' => '({{PLURAL:$1|मधील एक आवृत्ती|मधल्या $1 आवृत्त्या}} दाखवलेल्या नाहीत.)', +'history-title' => '"$1" चा संपादन इतिहास', +'difference' => '(आवर्तनांमधील फरक)', +'difference-multipage' => '(पानांमधील फरक)', +'lineno' => 'ओळ $1:', +'compareselectedversions' => 'निवडलेल्या आवृत्त्यांमधील बदल पहा', +'showhideselectedversions' => 'निवडलेल्या आवृत्त्या दाखवा / लपवा', +'editundo' => 'उलटवा', +'diff-multi' => '{{PLURAL:$2|सदस्याची|$2 सदस्यांच्या}} ({{PLURAL:$1|आवृत्ती|$1 आवृत्त्या}} दाखवल्या नाहीत)', +'diff-multi-manyusers' => '{{PLURAL:$2|सदस्याची|$2 सदस्यांच्या}} ({{PLURAL:$1|आवृत्ती|$1 आवृत्त्या}} दाखवल्या नाहीत)', # Search results -'searchresults' => 'शोध निकाल', -'searchresults-title' => '"$1" साठीचे निकाल शोधा', -'searchresulttext' => '{{SITENAME}} वरील माहिती कशी शोधावी, याच्या माहिती करता पहा - [[{{MediaWiki:Helppage}}|{{SITENAME}} वर शोध कसा घ्यावा]].', -'searchsubtitle' => 'तुम्ही \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|"$1" ने सुरू होणारी सर्व पाने]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" ला जोडणारी सर्व पाने]]) याचा शोध घेत आहात.', -'searchsubtitleinvalid' => "तुम्ही '''$1''' या शब्दाचा शोध घेत आहात.", -'toomanymatches' => 'खूप एकसारखी उत्तरे मिळाली, कृपया पृच्छा वेगळ्या तर्‍हेने करून पहा', -'titlematches' => 'पानाचे शीर्षक जुळते', -'notitlematches' => 'कोणत्याही पानाचे शीर्षक जुळत नाही', -'textmatches' => 'पानातील मजकुर जुळतो', -'notextmatches' => 'पानातील मजकुराशी जुळत नाही', -'prevn' => 'मागील {{PLURAL:$1|$1}}', -'nextn' => 'पुढील {{PLURAL:$1|$1}}', -'viewprevnext' => 'पहा ($1 {{int:pipe-separator}} $2) ($3).', -'searchhelp-url' => 'Help:साहाय्य पृष्ठ', -'searchprofile-everything' => 'सगळे', -'searchprofile-advanced' => 'प्रगत', -'searchprofile-articles-tooltip' => '$1मध्ये शोधा', -'search-result-size' => '$1 ({{PLURAL:$2|१ शब्द|$2 शब्द}})', -'search-result-score' => 'जुळणी: $1%', -'search-redirect' => '(पुनर्निर्देशन $1)', -'search-section' => '(विभाग $1)', -'search-suggest' => 'तुम्हाला हेच म्हणायचे का: $1', -'search-interwiki-caption' => 'इतर प्रकल्प', -'search-interwiki-default' => '$1चे निकाल:', -'search-interwiki-more' => '(आणखी)', -'search-mwsuggest-enabled' => 'सजेशन्स सहित', -'search-mwsuggest-disabled' => 'सजेशन्स नाहीत', -'search-relatedarticle' => 'जवळील', -'mwsuggest-disable' => 'AJAX सजेशन्स रद्द करा', -'searchrelated' => 'जवळील', -'searchall' => 'सर्व', -'showingresults' => "#'''$2'''पासून {{PLURAL:$1|'''1'''पर्यंतचा निकाल|'''$1'''पर्यंतचे निकाल}} खाली दाखवले आहे.", -'showingresultsnum' => "खाली दिलेले #'''$2'''पासून सुरू होणारे {{PLURAL:$3|'''1''' निकाल|'''$3''' निकाल}}.", -'nonefound' => "'''सूचना''':काही नामविश्वेच नेहमी शोधली जातात. सर्व नामविश्वे शोधण्याकरीता (चर्चा पाने, साचे, इ. सकट) कॄपया शोधशब्दांच्या आधी ''all:'' लावून पहा किंवा पाहिजे असलेले नामविश्व लिहा.", -'powersearch' => 'वाढीव शोध', -'powersearch-legend' => 'वाढीव शोध', -'powersearch-ns' => 'नामविश्वांमध्ये शोधा:', -'powersearch-redir' => 'पुनर्निर्देशने दाखवा', -'powersearch-field' => 'साठी शोधा', -'search-external' => 'बाह्य शोध', -'searchdisabled' => '{{SITENAME}} शोध अनुपलब्ध केला आहे.तो पर्यंत गूगलवरून शोध घ्या.{{SITENAME}}च्या मजकुराची त्यांची सूचिबद्धता शिळी असण्याची शक्यता असु शकते हे लक्षात घ्या.', +'searchresults' => 'शोध निकाल', +'searchresults-title' => '"$1" साठीचे निकाल शोधा', +'searchresulttext' => '{{SITENAME}} वरील माहिती कशी शोधावी, याच्या माहिती करता पहा - [[{{MediaWiki:Helppage}}|{{SITENAME}} वर शोध कसा घ्यावा]].', +'searchsubtitle' => 'तुम्ही \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|"$1" ने सुरू होणारी सर्व पाने]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" ला जोडणारी सर्व पाने]]) याचा शोध घेत आहात.', +'searchsubtitleinvalid' => "तुम्ही '''$1''' या शब्दाचा शोध घेत आहात.", +'toomanymatches' => 'खूप एकसारखी उत्तरे मिळाली, कृपया पृच्छा वेगळ्या तर्‍हेने करून पहा', +'titlematches' => 'पानाचे शीर्षक जुळते', +'notitlematches' => 'कोणत्याही पानाचे शीर्षक जुळत नाही', +'textmatches' => 'पानातील मजकुर जुळतो', +'notextmatches' => 'पानातील मजकुराशी जुळत नाही', +'prevn' => 'मागील {{PLURAL:$1|$1}}', +'nextn' => 'पुढील {{PLURAL:$1|$1}}', +'prevn-title' => 'मागील $1 {{PLURAL:$1|निकाल|निकाल}}', +'nextn-title' => 'पुढील $1 {{PLURAL:$1|निकाल|निकाल}}', +'shown-title' => '$1 {{PLURAL:$1|निकाल|निकाल}} निकाल प्रतिपान पहा', +'viewprevnext' => 'पहा ($1 {{int:pipe-separator}} $2) ($3).', +'searchmenu-legend' => 'विकल्प शोधा', +'searchmenu-exists' => "'''या विकीवर \"[[:\$1]]\" या नावाचे पान आहे.'''", +'searchmenu-new' => "'''या विकीवर \"[[:\$1]]\" हे पान तयार करा!'''", +'searchhelp-url' => 'Help:साहाय्य पृष्ठ', +'searchmenu-prefix' => '[[Special:PrefixIndex/$1|या उपसर्गानिशी असलेली पाने न्याहाळा]]', +'searchprofile-articles' => 'संबंधित पाने', +'searchprofile-project' => 'सहाय्य व प्रकल्प पाने', +'searchprofile-images' => 'मल्टिमीडिया', +'searchprofile-everything' => 'सगळे', +'searchprofile-advanced' => 'प्रगत', +'searchprofile-articles-tooltip' => '$1मध्ये शोधा', +'searchprofile-project-tooltip' => '$1मध्ये शोधा', +'searchprofile-images-tooltip' => 'संचिकांसाठी शोधा', +'searchprofile-everything-tooltip' => 'सर्व पाने शोधा (चर्चापानांसहित)', +'searchprofile-advanced-tooltip' => 'निवडलेल्या नामविश्वांमध्ये शोधा:', +'search-result-size' => '$1 ({{PLURAL:$2|१ शब्द|$2 शब्द}})', +'search-result-category-size' => '{{PLURAL:$1|१ सदस्य|$1 सदस्य}} ({{PLURAL:$2|१ उपवर्ग|$2 उपउपवर्ग}}, {{PLURAL:$3|1 संचिका|$3 संचिका}})', +'search-result-score' => 'जुळणी: $1%', +'search-redirect' => '(पुनर्निर्देशन $1)', +'search-section' => '(विभाग $1)', +'search-suggest' => 'तुम्हाला हेच म्हणायचे का: $1', +'search-interwiki-caption' => 'इतर प्रकल्प', +'search-interwiki-default' => '$1चे निकाल:', +'search-interwiki-more' => '(आणखी)', +'search-mwsuggest-enabled' => 'सजेशन्स सहित', +'search-mwsuggest-disabled' => 'सजेशन्स नाहीत', +'search-relatedarticle' => 'जवळील', +'mwsuggest-disable' => 'AJAX सजेशन्स रद्द करा', +'searcheverything-enable' => 'सर्वनामविश्वांमध्ये शोधा:', +'searchrelated' => 'जवळील', +'searchall' => 'सर्व', +'showingresults' => "#'''$2'''पासून {{PLURAL:$1|'''1'''पर्यंतचा निकाल|'''$1'''पर्यंतचे निकाल}} खाली दाखवले आहे.", +'showingresultsnum' => "खाली दिलेले #'''$2'''पासून सुरू होणारे {{PLURAL:$3|'''1''' निकाल|'''$3''' निकाल}}.", +'showingresultsheader' => "'''$4''' साठी {{PLURAL:$5|'''$3'''पैकी '''$1''' निकाल|'''$3''' पैकी '''$1 - $2''' निकाल}}", +'nonefound' => "'''सूचना''':काही नामविश्वेच नेहमी शोधली जातात. सर्व नामविश्वे शोधण्याकरीता (चर्चा पाने, साचे, इ. सकट) कॄपया शोधशब्दांच्या आधी ''all:'' लावून पहा किंवा पाहिजे असलेले नामविश्व लिहा.", +'search-nonefound' => 'दिलेल्या वर्णनाशी जुळणारे निकाल नाहीत.', +'powersearch' => 'वाढीव शोध', +'powersearch-legend' => 'वाढीव शोध', +'powersearch-ns' => 'नामविश्वांमध्ये शोधा:', +'powersearch-redir' => 'पुनर्निर्देशने दाखवा', +'powersearch-field' => 'साठी शोधा', +'powersearch-togglelabel' => 'तपासा:', +'powersearch-toggleall' => 'सर्व', +'powersearch-togglenone' => 'काहीही नाही', +'search-external' => 'बाह्य शोध', +'searchdisabled' => '{{SITENAME}} शोध अनुपलब्ध केला आहे.तो पर्यंत गूगलवरून शोध घ्या.{{SITENAME}}च्या मजकुराची त्यांची सूचिबद्धता शिळी असण्याची शक्यता असु शकते हे लक्षात घ्या.', # Quickbar 'qbsettings' => 'शीघ्रपट', @@ -1143,108 +1242,133 @@ $3ने ''$2'' कारण दिले आहे.", 'qbsettings-floatingright' => 'तरंगते ऊजवे', # Preferences page -'preferences' => 'माझ्या पसंती', -'mypreferences' => 'माझ्या पसंती', -'prefs-edits' => 'संपादनांची संख्या:', -'prefsnologin' => 'प्रवेश केलेला नाही', -'prefsnologintext' => 'सदस्य पसंती बदलण्यासाठी [[Special:UserLogin|प्रवेश]] करावा लागेल.', -'changepassword' => 'परवलीचा शब्द बदला', -'prefs-skin' => 'त्वचा', -'skin-preview' => 'झलक', -'prefs-math' => 'गणित', -'datedefault' => 'प्राथमिकता नाही', -'prefs-datetime' => 'दिनांक आणि वेळ', -'prefs-personal' => 'सदस्य व्यक्तिरेखा', -'prefs-rc' => 'अलीकडील बदल', -'prefs-watchlist' => 'पहार्‍याची सूची', -'prefs-watchlist-days' => 'पहार्‍याच्या सूचीत दिसणार्‍या दिवसांची संख्या:', -'prefs-watchlist-days-max' => 'जास्तीत जास्त ७ दिवस.', -'prefs-watchlist-edits' => 'वाढीव पहार्‍याच्या सूचीत दिसणार्‍या संपादनांची संख्या:', -'prefs-watchlist-edits-max' => 'अधिकतम अंक: १०००.', -'prefs-misc' => 'इतर', -'prefs-resetpass' => 'परवलीचा शब्द बदला.', -'saveprefs' => 'जतन करा', -'resetprefs' => 'न जतन केलेले बदल रद्द करा', -'restoreprefs' => 'सर्व डिफॉल्ट मांडणी पूर्ववत करा.', -'prefs-editing' => 'संपादन', -'rows' => 'ओळी:', -'columns' => 'स्तंभ:', -'searchresultshead' => 'शोध', -'resultsperpage' => 'प्रति पान धडका:', -'contextlines' => 'प्रति धडक ओळी:', -'contextchars' => 'प्रतिओळ संदर्भ:', -'stub-threshold' => 'अंकुरीत दुव्यांच्या रचनेची नांदी (बाईट्स):', -'recentchangesdays' => 'अलिकडील बदल मधील दाखवावयाचे दिवस:', -'recentchangescount' => 'अलिकडील बदल, इतिहास व नोंद पानांमध्ये दाखवायाच्या संपादनांची संख्या:', -'savedprefs' => 'तुमच्या पसंती जतन केल्या आहेत.', -'timezonelegend' => 'वेळक्षेत्र', -'localtime' => 'स्थानिक वेळ', -'timezoneoffset' => 'समासफरक¹', -'servertime' => 'विदागारदात्याची वेळ', -'guesstimezone' => 'विचरकातून भरा', -'timezoneregion-africa' => 'आफ्रिका', -'timezoneregion-america' => 'अमेरिका', -'timezoneregion-antarctica' => 'अँटार्क्टिका', -'timezoneregion-arctic' => 'आर्क्टिक', -'timezoneregion-asia' => 'आशिया', -'timezoneregion-atlantic' => 'अटलांटिक महासागर', -'timezoneregion-australia' => 'ऑस्ट्रेलिया', -'timezoneregion-europe' => 'युरोप', -'timezoneregion-indian' => 'हिंदी महासागर', -'timezoneregion-pacific' => 'प्रशांत महासागर', -'allowemail' => 'इतर सदस्यांकडून इ-मेल येण्यास मुभा द्या', -'prefs-searchoptions' => 'शोध विकल्प', -'prefs-namespaces' => 'नामविश्वे', -'defaultns' => 'या नामविश्वातील अविचल शोध :', -'default' => 'अविचल', -'prefs-files' => 'संचिका', -'youremail' => 'आपला इमेल:', -'username' => 'सदस्यनाम:', -'uid' => 'सदस्य खाते:', -'prefs-memberingroups' => 'खालील {{PLURAL:$1|गटाचा|गटांचा}} सदस्य:', -'yourrealname' => 'तुमचे खरे नाव:', -'yourlanguage' => 'भाषा:', -'yournick' => 'आपले उपनाव (सहीसाठी)', -'badsig' => 'अयोग्य कच्ची सही;HTML खूणा तपासा.', -'badsiglength' => 'तुमची स्वाक्षरी खूप लांब आहे. +'preferences' => 'माझ्या पसंती', +'mypreferences' => 'माझ्या पसंती', +'prefs-edits' => 'संपादनांची संख्या:', +'prefsnologin' => 'प्रवेश केलेला नाही', +'prefsnologintext' => 'तुम्हाला सदस्य पसंती बदलण्यासाठी [{{fullurl:{{#Special:UserLogin}}|returnto=$1}} प्रवेश] करावा लागेल.', +'changepassword' => 'परवलीचा शब्द बदला', +'prefs-skin' => 'त्वचा', +'skin-preview' => 'झलक', +'prefs-math' => 'गणित', +'datedefault' => 'प्राथमिकता नाही', +'prefs-datetime' => 'दिनांक आणि वेळ', +'prefs-personal' => 'सदस्य व्यक्तिरेखा', +'prefs-rc' => 'अलीकडील बदल', +'prefs-watchlist' => 'पहार्‍याची सूची', +'prefs-watchlist-days' => 'पहार्‍याच्या सूचीत दिसणार्‍या दिवसांची संख्या:', +'prefs-watchlist-days-max' => 'जास्तीत जास्त ७ दिवस.', +'prefs-watchlist-edits' => 'वाढीव पहार्‍याच्या सूचीत दिसणार्‍या संपादनांची संख्या:', +'prefs-watchlist-edits-max' => 'अधिकतम अंक: १०००.', +'prefs-watchlist-token' => 'पहार्‍याच्या सूचीचा बिल्ला:', +'prefs-misc' => 'इतर', +'prefs-resetpass' => 'परवलीचा शब्द बदला.', +'prefs-email' => 'विपत्र पर्याय', +'prefs-rendering' => 'देखावा', +'saveprefs' => 'जतन करा', +'resetprefs' => 'न जतन केलेले बदल रद्द करा', +'restoreprefs' => 'सर्व डिफॉल्ट मांडणी पूर्ववत करा.', +'prefs-editing' => 'संपादन', +'prefs-edit-boxsize' => 'संपादन खिडकीचा आकार', +'rows' => 'ओळी:', +'columns' => 'स्तंभ:', +'searchresultshead' => 'शोध', +'resultsperpage' => 'प्रति पान धडका:', +'contextlines' => 'प्रति धडक ओळी:', +'contextchars' => 'प्रतिओळ संदर्भ:', +'stub-threshold' => 'अंकुरीत दुव्यांच्या रचनेची नांदी (बाईट्स):', +'stub-threshold-disabled' => 'अक्षम केले', +'recentchangesdays' => 'अलिकडील बदल मधील दाखवावयाचे दिवस:', +'recentchangesdays-max' => 'जास्तीतजास्त $1 {{PLURAL:$1|दिवस|दिवस}}', +'recentchangescount' => 'अलिकडील बदल, इतिहास व नोंद पानांमध्ये दाखवायाच्या संपादनांची संख्या:', +'prefs-help-recentchangescount' => 'यात नुकतेच झालेले बदल, पानांचे इतिहास व याद्या या गोष्टी असतात.', +'savedprefs' => 'तुमच्या पसंती जतन केल्या आहेत.', +'timezonelegend' => 'वेळक्षेत्र', +'localtime' => 'स्थानिक वेळ:', +'timezoneuseoffset' => 'इतर (वेळेतील अंतर लिहा)', +'timezoneoffset' => 'समासफरक¹:', +'servertime' => 'विदागारदात्याची वेळ', +'guesstimezone' => 'विचरकातून भरा', +'timezoneregion-africa' => 'आफ्रिका', +'timezoneregion-america' => 'अमेरिका', +'timezoneregion-antarctica' => 'अँटार्क्टिका', +'timezoneregion-arctic' => 'आर्क्टिक', +'timezoneregion-asia' => 'आशिया', +'timezoneregion-atlantic' => 'अटलांटिक महासागर', +'timezoneregion-australia' => 'ऑस्ट्रेलिया', +'timezoneregion-europe' => 'युरोप', +'timezoneregion-indian' => 'हिंदी महासागर', +'timezoneregion-pacific' => 'प्रशांत महासागर', +'allowemail' => 'इतर सदस्यांकडून इ-मेल येण्यास मुभा द्या', +'prefs-searchoptions' => 'शोध विकल्प', +'prefs-namespaces' => 'नामविश्वे', +'defaultns' => 'या नामविश्वातील अविचल शोध :', +'default' => 'अविचल', +'prefs-files' => 'संचिका', +'prefs-custom-css' => 'सीएसएस पद्धत बदला', +'prefs-custom-js' => 'जावास्क्रिप्ट पद्धत बदला', +'prefs-common-css-js' => 'मिळून वापरलेले सर्व त्वचांसाठींचे सीएसएस / जावास्क्रिप्ट:', +'prefs-emailconfirm-label' => 'विपत्र निश्चितीकरण:', +'prefs-textboxsize' => 'संपादन खिडकीचा आकार', +'youremail' => 'विपत्र:', +'username' => 'सदस्यनाम:', +'uid' => 'सदस्य खाते:', +'prefs-memberingroups' => 'खालील {{PLURAL:$1|गटाचा|गटांचा}} सदस्य:', +'prefs-registration' => 'नोंदणीची वेळ:', +'yourrealname' => 'तुमचे खरे नाव:', +'yourlanguage' => 'भाषा:', +'yournick' => 'आपले उपनाव (सहीसाठी)', +'badsig' => 'अयोग्य कच्ची सही;HTML खूणा तपासा.', +'badsiglength' => 'तुमची स्वाक्षरी खूप लांब आहे. टोपणनाव $1 {{PLURAL:$1|अक्षरापेक्षा|अक्षरांपेक्षा}} कमी लांबीचे हवे.', -'yourgender' => 'लिंग', -'gender-unknown' => 'अज्ञात', -'gender-male' => 'पुरुष', -'gender-female' => 'स्त्री', -'email' => 'विपत्र(ई-मेल)', -'prefs-help-realname' => 'तुमचे खरे नाव (वैकल्पिक): हे नाव दिल्यास आपले योगदान या नावाखाली नोंदले व दाखवले जाईल.', -'prefs-help-email' => 'विरोप(ईमेल)(वैकल्पिक):इतरांना सदस्य किंवा सदस्य_चर्चा पानातून, तुमची ओळख देण्याची आवश्यकता न ठेवता , तुमच्याशी संपर्क सुविधा पुरवते.', -'prefs-help-email-required' => 'विपत्र(ईमेल)पत्ता लागेल.', -'prefs-signature' => 'स्वाक्षरी', -'prefs-dateformat' => 'तारीख रचना', -'prefs-advancedediting' => 'प्रगत पर्याय', -'prefs-advancedrc' => 'प्रगत पर्याय', -'prefs-advancedrendering' => 'प्रगत पर्याय', -'prefs-advancedsearchoptions' => 'प्रगत पर्याय', -'prefs-advancedwatchlist' => 'प्रगत पर्याय', -'prefs-diffs' => 'फरक', +'yourgender' => 'लिंग', +'gender-unknown' => 'अज्ञात', +'gender-male' => 'पुरुष', +'gender-female' => 'स्त्री', +'email' => 'विपत्र', +'prefs-help-realname' => 'तुमचे खरे नाव (वैकल्पिक): हे नाव दिल्यास आपले योगदान या नावाखाली नोंदले व दाखवले जाईल.', +'prefs-help-email' => 'विरोप(ईमेल)(वैकल्पिक):इतरांना सदस्य किंवा सदस्य_चर्चा पानातून, तुमची ओळख देण्याची आवश्यकता न ठेवता , तुमच्याशी संपर्क सुविधा पुरवते.', +'prefs-help-email-required' => 'विपत्र(ईमेल)पत्ता लागेल.', +'prefs-info' => 'मूलभूत माहिती', +'prefs-i18n' => 'आंतरराष्ट्रीयीकरण', +'prefs-signature' => 'स्वाक्षरी', +'prefs-dateformat' => 'तारीख रचना', +'prefs-timeoffset' => 'वेळ बरोबरी', +'prefs-advancedediting' => 'प्रगत पर्याय', +'prefs-advancedrc' => 'प्रगत पर्याय', +'prefs-advancedrendering' => 'प्रगत पर्याय', +'prefs-advancedsearchoptions' => 'प्रगत पर्याय', +'prefs-advancedwatchlist' => 'प्रगत पर्याय', +'prefs-displayrc' => 'दर्शन पर्याय', +'prefs-displaysearchoptions' => 'दर्शन पर्याय', +'prefs-displaywatchlist' => 'दर्शन पर्याय', +'prefs-diffs' => 'फरक', + +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'विपत्रपत्ता वैध आहे', +'email-address-validity-invalid' => 'वैध विपत्रपत्ता लिहा', # User rights -'userrights' => 'सदस्य अधिकार व्यवस्थापन', -'userrights-lookup-user' => 'सदस्य गटांचे(ग्रूप्स) व्यवस्थापन करा.', -'userrights-user-editname' => 'सदस्य नाव टाका:', -'editusergroup' => 'सदस्य गट (ग्रूप्स) संपादीत करा', -'editinguser' => "सदस्य '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])चे सदस्य अधिकारात बदल केला जात आहे.", -'userrights-editusergroup' => 'सदस्य मंडळे संपादीत करा', -'saveusergroups' => 'सदस्य गट जतन करा', -'userrights-groupsmember' => '(चा) सभासद:', -'userrights-groups-help' => 'तुम्ही एखाद्या सदस्याचे गट सदस्यत्व बदलू शकता: +'userrights' => 'सदस्य अधिकार व्यवस्थापन', +'userrights-lookup-user' => 'सदस्य गटांचे(ग्रूप्स) व्यवस्थापन करा.', +'userrights-user-editname' => 'सदस्य नाव टाका:', +'editusergroup' => 'सदस्य गट (ग्रूप्स) संपादीत करा', +'editinguser' => "सदस्य '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])चे सदस्य अधिकारात बदल केला जात आहे.", +'userrights-editusergroup' => 'सदस्य मंडळे संपादीत करा', +'saveusergroups' => 'सदस्य गट जतन करा', +'userrights-groupsmember' => '(चा) सभासद:', +'userrights-groupsmember-auto' => 'चा निर्विवाद सदस्य:', +'userrights-groups-help' => 'तुम्ही एखाद्या सदस्याचे गट सदस्यत्व बदलू शकता: * निवडलेला चौकोन म्हणजे सदस्य त्या गटात आहे. * न निवडलेला चौकोन म्हणजे सदस्य त्या गटात नाही. * एक * चा अर्थ तुम्ही एकदा समावेश केल्यानंतर तो गट बदलू शकत नाही, किंवा काढल्यानंतर समावेश करू शकत नाही.', -'userrights-reason' => 'कारण:', -'userrights-no-interwiki' => 'इतर विकींवरचे सदस्य अधिकार बदलण्याची परवानगी तुम्हाला नाही.', -'userrights-nodatabase' => 'विदा $1 अस्तीत्वात नाही अथवा स्थानिक नाही.', -'userrights-nologin' => 'सदस्य अधिकार देण्यासाठी तुम्ही प्रबंधक म्हणून [[Special:UserLogin|प्रवेश केलेला]] असणे आवश्यक आहे.', -'userrights-notallowed' => 'तुमच्या सदस्य खात्यास सदस्य अधिकारांची निश्चिती करण्याची परवानगी नाही.', -'userrights-changeable-col' => 'गट जे तुम्ही बदलू शकता', -'userrights-unchangeable-col' => 'गट जे तुम्ही बदलू शकत नाही', +'userrights-reason' => 'कारण:', +'userrights-no-interwiki' => 'इतर विकींवरचे सदस्य अधिकार बदलण्याची परवानगी तुम्हाला नाही.', +'userrights-nodatabase' => 'विदा $1 अस्तीत्वात नाही अथवा स्थानिक नाही.', +'userrights-nologin' => 'सदस्य अधिकार देण्यासाठी तुम्ही प्रबंधक म्हणून [[Special:UserLogin|प्रवेश केलेला]] असणे आवश्यक आहे.', +'userrights-notallowed' => 'तुमच्या सदस्य खात्यास सदस्य अधिकारांची निश्चिती करण्याची परवानगी नाही.', +'userrights-changeable-col' => 'गट जे तुम्ही बदलू शकता', +'userrights-unchangeable-col' => 'गट जे तुम्ही बदलू शकत नाही', # Groups 'group' => 'गट:', @@ -1279,6 +1403,7 @@ $3ने ''$2'' कारण दिले आहे.", 'right-minoredit' => 'बदल छोटे म्हणून जतन करा', 'right-move' => 'पानांचे स्थानांतरण करा', 'right-move-subpages' => 'पाने उपपानांसकट हलवा', +'right-move-rootuserpages' => 'मूळ सदस्यपाने हलवा', 'right-movefile' => 'संचिका हलवा', 'right-suppressredirect' => 'एखाद्या पानाचे नवीन नावावर स्थानांतरण करत असताना पुनर्निर्देशन वगळा', 'right-upload' => 'संचिका चढवा', @@ -1291,20 +1416,22 @@ $3ने ''$2'' कारण दिले आहे.", 'right-bot' => 'स्वयंचलित कार्याप्रमाणे वागणूक मिळवा', 'right-nominornewtalk' => 'चर्चा पृष्ठावर छोटी संपादने जी नवीन चर्चा दर्शवितात ती नकोत', 'right-apihighlimits' => 'API पृच्छांमध्ये वरची मर्यादा वापरा', -'right-writeapi' => 'लिखित API चा उपयोग', +'right-writeapi' => 'लेखन एपीआय चा उपयोग', 'right-delete' => 'पृष्ठे वगळा', 'right-bigdelete' => 'जास्त इतिहास असणारी पाने वगळा', 'right-deleterevision' => 'एखाद्या पानाच्या विशिष्ट आवृत्त्या लपवा', 'right-deletedhistory' => 'वगळलेल्या इतिहास नोंदी, त्यांच्या संलग्न मजकूराशिवाय पहा', +'right-deletedtext' => 'वगळलेला मजकूर व वगळलेल्या आवर्तनांमधील बदल पहा', 'right-browsearchive' => 'वगळलेली पाने पहा', 'right-undelete' => 'एखादे पान पुनर्स्थापित करा', 'right-suppressrevision' => 'लपविलेल्या आवृत्त्या पहा व पुनर्स्थापित करा', 'right-suppressionlog' => 'खासगी नोंदी पहा', -'right-block' => 'इतर सदस्यांना संपादन करण्यास बंदी करा', +'right-block' => 'इतर सदस्यांना संपादन करण्यापासून प्रतिबंधित करा', 'right-blockemail' => 'एखाद्या सदस्याला इ-मेल पाठविण्यापासून थांबवा', 'right-hideuser' => 'एखादे सदस्य नाव इतरांपासून लपवा', 'right-ipblock-exempt' => 'आइपी ब्लॉक्स कडे दुर्लक्ष करा', 'right-proxyunbannable' => 'प्रॉक्सी असताना ब्लॉक्स कडे दुर्लक्ष करा', +'right-unblockself' => 'अप्रतिबंधित करा', 'right-protect' => 'सुरक्षितता पातळी बदला', 'right-editprotected' => 'सुरक्षित पाने संपादा', 'right-editinterface' => 'सदस्य पसंती बदला', @@ -1316,15 +1443,17 @@ $3ने ''$2'' कारण दिले आहे.", 'right-noratelimit' => 'रेट लिमिट्स चा परिणाम होत नाही.', 'right-import' => 'इतर विकिंमधून पाने आयात करा', 'right-importupload' => 'चढविलेल्या संचिकेतून पाने आयात करा', -'right-patrol' => 'संपादने तपासलेली (patrolled) म्हणून जतन करा', +'right-patrol' => 'इतरांची संपादने तपासलेली म्हणून जतन करा', 'right-autopatrol' => 'संपादने आपोआप तपासलेली (patrolled) म्हणून जतन करा', 'right-patrolmarks' => 'अलीकडील बदलांमधील तपासल्याच्या खूणा पहा', 'right-unwatchedpages' => 'न पाहिलेल्या पानांची यादी पहा', -'right-trackback' => 'एक ट्रॅकबॅक पाठवा', +'right-trackback' => 'एक विपरित पथ पाठवा', 'right-mergehistory' => 'पानांचा इतिहास एकत्रित करा', 'right-userrights' => 'सर्व सदस्यांचे अधिकार संपादा', 'right-userrights-interwiki' => 'इतर विकिंवर सदस्य अधिकार बदला', -'right-siteadmin' => 'डाटाबेस ला कुलुप लावा अथवा काढा', +'right-siteadmin' => 'माहितीसाठ्याला कुलुप लावा अथवा काढा', +'right-reset-passwords' => 'इतर सदस्यांचा परवलीचा शब्द पुनर्स्थापित करा', +'right-sendemail' => 'इतर सदस्यांना विपत्रे पाठवा', # User rights log 'rightslog' => 'सदस्य आधिकार नोंद', @@ -1333,7 +1462,38 @@ $3ने ''$2'' कारण दिले आहे.", 'rightsnone' => '(काहीही नाही)', # Associated actions - in the sentence "You do not have permission to X" -'action-edit' => 'हे पान संपादा', +'action-read' => 'हे पान वाचा', +'action-edit' => 'हे पान संपादा', +'action-createpage' => 'लेख बनवा', +'action-createtalk' => 'चर्चा पृष्ठे तयार करा', +'action-createaccount' => 'हे सदस्यखाते तयार करा', +'action-minoredit' => 'हे संपादन छोटे ठरवा', +'action-move' => 'हे पान स्थानांतरित करा', +'action-move-subpages' => 'हे पान व त्याची उपपाने हलवा', +'action-move-rootuserpages' => 'मूळ सदस्यपाने हलवा', +'action-movefile' => 'ही संचिका हलवा', +'action-upload' => 'ही संचिका चढवा', +'action-reupload' => 'अस्तित्वात असलेल्या संचिकेवर पुनर्लेखन करा', +'action-upload_by_url' => 'आंतरजालपत्त्यापासून संचिका चढवा', +'action-writeapi' => 'लेखन एपीआय वापरा', +'action-delete' => 'हे पान वगळा', +'action-deleterevision' => 'हे आवर्तन वगळा', +'action-deletedhistory' => 'या पानाचा वगळलेला इतिहास पहा', +'action-browsearchive' => 'वगळलेली पाने शोधा', +'action-undelete' => 'वगळ्लेले पृष्ठ पुन्हा आणा', +'action-suppressrevision' => 'लपलेले पुनरावर्तन पहा व सद्यस्थितीत आणा', +'action-suppressionlog' => 'ही खासगी यादी पहा', +'action-block' => 'या सदस्यास संपादन करण्यापासून प्रतिबंधित करा', +'action-protect' => 'या पानाशाठी सुरक्षापातळी बदला', +'action-import' => 'दुसर्‍या विकीवरुन हे पान आयात करा', +'action-importupload' => 'चढविलेल्या संचिकेतून पान आयात करा', +'action-patrol' => 'इतरांची संपादने तपासलेली म्हणून जतन करा', +'action-unwatchedpages' => 'न पाहिलेल्या पानांची यादी पहा', +'action-trackback' => 'एक विपरित पथ पाठवा', +'action-mergehistory' => 'पानाचा इतिहास विलीन करा', +'action-userrights' => 'सर्व सदस्यांचे अधिकार संपादा', +'action-userrights-interwiki' => 'इतर विकिंवरच्या सदस्यांचे अधिकार संपादा', +'action-siteadmin' => 'माहितीसाठ्याला कुलुप लावा अथवा काढा', # Recent changes 'nchanges' => '$1 {{PLURAL:$1|बदल|बदल}}', @@ -1341,6 +1501,10 @@ $3ने ''$2'' कारण दिले आहे.", 'recentchanges-legend' => 'अलीकडील बदल पर्याय', 'recentchangestext' => 'विकितील अलीकडील बदल या पानावर दिसतात.', 'recentchanges-feed-description' => 'या रसदीमधील विकीवर झालेले सर्वात अलीकडील बदल पहा.', +'recentchanges-label-newpage' => 'या संपादनाने नवीन पान तयार झाले', +'recentchanges-label-minor' => 'हा एक छोटा बदल आहे', +'recentchanges-label-bot' => 'हे संपादन एका सांगकाम्याकडून केले गेले आहे', +'recentchanges-label-unpatrolled' => 'हे संपादन अजून तपासले गेले नाही', 'rcnote' => "खाली $4, $5 पर्यंतचे गेल्या {{PLURAL:$2|'''१''' दिवसातील|'''$2''' दिवसांतील}} {{PLURAL:$1|शेवटचा '''1''' बदल|शेवटचे '''$1''' बदल}} दिलेले आहेत.", 'rcnotefrom' => 'खाली $2 पासूनचे ($1 किंवा कमी) बदल दाखवले आहेत.', 'rclistfrom' => '$1 नंतर केले गेलेले बदल दाखवा.', @@ -1380,6 +1544,7 @@ $3ने ''$2'' कारण दिले आहे.", 'upload' => 'संचिका चढवा', 'uploadbtn' => 'संचिका चढवा', 'reuploaddesc' => 'चढवायच्या पानाकडे परता', +'upload-tryagain' => 'बदललेले संचिका वर्णन पाठवा', 'uploadnologin' => 'प्रवेश केलेला नाही', 'uploadnologintext' => 'संचिका चढविण्यासाठी तुम्हाला [[Special:UserLogin|प्रवेश]] करावा लागेल.', 'upload_directory_missing' => 'अपलोड डिरेक्टरी ($1) सापडली नाही तसेच वेबसर्व्हर ती तयार करू शकलेला नाही.', @@ -1401,6 +1566,7 @@ $3ने ''$2'' कारण दिले आहे.", 'filename' => 'संचिकेचे नाव', 'filedesc' => 'वर्णन', 'fileuploadsummary' => 'आढावा:', +'filereuploadsummary' => 'संचिका बदल:', 'filestatus' => 'प्रताधिकार स्थिती:', 'filesource' => 'स्रोत:', 'uploadedfiles' => 'चढवलेल्या संचिका', @@ -1409,16 +1575,29 @@ $3ने ''$2'' कारण दिले आहे.", 'minlength1' => 'संचिकानाम किमान एक अक्षराचे हवे.', 'illegalfilename' => '"$1" या संचिकानामात शीर्षकात चालू न शकणारी अक्षरे आहेत. कृपया संचिकानाम बदलून पुन्हा चढवण्याचा प्रयत्न करा.', 'badfilename' => 'संचिकेचे नाव बदलून "$1" असे केले आहे.', +'filetype-mime-mismatch' => 'संचिका विस्तारक एमआयएमई प्रकाराशी जुळत नाही.', 'filetype-badmime' => 'विविधामाप(माईम) "$1" प्रकारच्या संचिका चढवण्यास परवानगी नाही.', +'filetype-bad-ie-mime' => 'ही संचिका चढवता येत नाही कारण इंटरनेट एक्स्प्लोरर तिला "$1" म्हणून ओळखेल. हा संचिकाप्रकार प्रतिबंधित व संभाव्य धोकादायक संचिकाप्रकार आहे.', 'filetype-unwanted-type' => "'''\".\$1\"''' ही नको असलेल्या प्रकारची संचिका आहे. \$2 {{PLURAL:\$3|ही हव्या असलेल्या प्रकारची संचिका आहे|ह्या हव्या असलेल्या प्रकारच्या संचिका आहेत}}.", 'filetype-banned-type' => "'''\".\$1\"''' ही परवानगी नसलेल्या प्रकारची संचिका आहे. \$2 ह्या परवानगी असलेल्या प्रकारच्या संचिका आहेत.", 'filetype-missing' => 'या संचिकेला एक्सटेंशन दिलेले नाही (उदा. ".jpg").', +'empty-file' => 'तुम्ही प्रस्तुत केलेली संचिका रिकामी होती.', +'file-too-large' => 'तुम्ही प्रस्तुत केलेली संचिका आकाराने खूप जास्त होती.', +'filename-tooshort' => 'तुम्ही प्रस्तुत केलेली संचिका आकाराने खूप कमी होती.', +'filetype-banned' => 'याप्रकारची संचिका प्रतिबंधित आहे.', +'verification-error' => 'संचिका पडताळणीत ही संचिका अनुत्तीर्ण झाली.', +'illegal-filename' => 'हे संचिकानाम प्रतिबंधित आहे.', +'overwrite' => 'अस्तित्वात असलेल्या संचिकेवर पुनर्लेखन प्रतिबंधित आहे.', +'unknown-error' => 'एक अज्ञात चूक उद्भवली.', +'tmp-create-error' => 'तात्पुरती संचिका करता आली नाही.', +'tmp-write-error' => 'तात्पुरती संचिका लिहताना अडचण', 'large-file' => 'संचिका $1 पेक्षा कमी आकाराची असण्याची अपेक्षा आहे, ही संचिका $2 एवढी आहे.', 'largefileserver' => 'सेवा संगणकावर (सर्वर) निर्धारित केलेल्या आकारापेक्षा या संचिकेचा आकार मोठा आहे.', 'emptyfile' => 'चढवलेली संचिका रिकामी आहे. हे संचिकानाम चुकीचे लिहिल्याने असू शकते. कृपया तुम्हाला हीच संचिका चढवायची आहे का ते तपासा.', 'fileexists' => "या नावाची संचिका आधीच अस्तित्वात आहे, कृपया ही संचिका बदलण्याबद्दल तुम्ही साशंक असाल तर '''[[:$1]]''' तपासा. [[$1|thumb]]", -'filepageexists' => "या नावाचे एक माहितीपृष्ठ (संचिका नव्हे) अगोदरच अस्तित्त्वात आहे. कृपया जर आपणांस त्यात बदल करायचा नसेल तर '''[[:$1]]''' तपासा.", +'filepageexists' => "या नावाचे एक माहितीपृष्ठ (संचिका नव्हे) अगोदरच अस्तित्त्वात आहे. कृपया जर आपणांस त्यात बदल करायचा नसेल तर '''[[:$1]]''' तपासा. +[[$1|thumb]]", 'fileexists-extension' => "या नावाची संचिका अस्तित्वात आहे: [[$2|thumb]] * चढवित असलेल्या संचिकेचे नाव: '''[[:$1]]''' * अस्तित्वात असलेल्या संचिकेचे नाव: '''[[:$2]]''' @@ -1426,18 +1605,20 @@ $3ने ''$2'' कारण दिले आहे.", 'fileexists-thumbnail-yes' => "आपण चढवित असलेली संचिका ही मोठ्या चित्राची इवलीशी प्रतिकृती ''(thumbnail)'' असण्याची शक्यता आहे. [[$1|इवलेसे]] कृपया '''[[:$1]]''' ही संचिका तपासा. जर तपासलेली संचिका ही याच आकाराची असेल तर नवीन प्रतिकृती चढविण्याची गरज नाही.", -'file-thumbnail-no' => "या संचिकेचे नाव '''$1''' पासून सुरू होत आहे. ही कदाचित झलक ''(thumbnail)'' असू शकते. +'file-thumbnail-no' => "या संचिकेचे नाव '''$1''' पासून सुरू होत आहे. ही कदाचित झलक असू शकते. जर तुमच्या कडे पूर्ण रिझोल्यूशनची संचिका असेल तर चढवा अथवा संचिकेचे नाव बदला.", 'fileexists-forbidden' => 'या नावाची संचिका अगोदरच अस्तित्त्वात आहे; कृपया पुन्हा मागे जाऊन ही संचिका नवीन नावाने चढवा. [[File:$1|thumb|center|$1]]', -'fileexists-shared-forbidden' => 'हे नाव असलेली एक संचिका शेअर्ड संचिका कोशात आधी पासून आहे; कृपया परत फिरा आणि नविन(वेगळ्या) नावाने ही संचिका पुन्हा चढवा.[[File:$1|इवले|मध्य|$1]]', +'fileexists-shared-forbidden' => 'हे नाव असलेली एक संचिका शेअर्ड संचिका कोशात आधी पासून आहे; कृपया परत फिरा आणि नविन(वेगळ्या) नावाने ही संचिका पुन्हा चढवा.[[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'ही संचिका खालील {{PLURAL:$1|संचिकेची|संचिकांची}} प्रत आहे:', -'successfulupload' => 'यशस्वीरीत्या चढवले', 'uploadwarning' => 'चढवताना सूचना', +'uploadwarning-text' => 'कृपया खालील संचिका वर्णन संपादून पुनर्प्रयत्न करा.', 'savefile' => 'संचिका जतन करा', 'uploadedimage' => '"[[$1]]" ही संचिका चढवली', 'overwroteimage' => '"[[$1]]" या संचिकेची नवीन आवृत्ती चढविली.', 'uploaddisabled' => 'संचिका चढविण्यास बंदी घालण्यात आलेली आहे.', +'copyuploaddisabled' => 'आंतरजालपत्त्याद्वारे चढवणे प्रतिबंधित आहे.', +'uploadfromurl-queued' => 'तुमचे चढवणे नोंदवण्यात आले आहे', 'uploaddisabledtext' => '{{SITENAME}} वर संचिका चढविण्यास बंदी घालण्यात आलेली आहे.', 'uploadscripted' => 'या संचिकेत HTML किंवा स्क्रिप्ट कोडचा आंतर्भाव आहे, त्याचा एखाद्या विचरकाकडून विचीत्र अर्थ लावला जाऊ शकतो.', 'uploadvirus' => 'ह्या संचिकेत व्हायरस आहे. अधिक माहिती: $1', @@ -1447,6 +1628,7 @@ $3ने ''$2'' कारण दिले आहे.", 'destfilename' => 'नवे संचिकानाम:', 'upload-maxfilesize' => 'जास्तीतजास्त संचिका आकार: $1', 'upload-description' => 'संचिका वर्णन', +'upload-options' => 'चढवण्यासाठी पर्याय', 'watchthisupload' => 'या पानावर बदलांसाठी लक्ष ठेवा.', 'filewasdeleted' => 'या नावाची संचिका या पूर्वी एकदा चढवून नंतर वगळली होती.तुम्ही ती पुन्हा चढवण्या अगोदर $1 तपासा.', 'upload-wasdeleted' => "'''सूचना: पूर्वी वगळण्यात आलेली संचिका तुम्ही पुन्हा चढवित आहात.''' @@ -1454,19 +1636,47 @@ $3ने ''$2'' कारण दिले आहे.", कृपया तुम्ही करत असलेली कृती योग्य असल्याची खात्री करून घ्या. तुमच्या सोयीसाठी वगळल्याची नोंद पुढीलप्रमाणे:", 'filename-bad-prefix' => "तुम्ही चढवत असलेल्या संचिकेचे नाव '''\"\$1\"''' पासून सुरू होते, जे की अंकीय छाउ (कॅमेरा) ने दिलेले अवर्णनात्मक नाव आहे.कृपया तुमच्या संचिकेकरिता अधिक वर्णनात्मक नाव निवडा.", +'upload-success-subj' => 'यशस्वीरीत्या चढवले', +'upload-success-msg' => 'तुमचे [$2] येथून्ब चढवणे यशस्वी ठरले. ते येथे उपलब्ध आहे: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'चढवण्यातील त्रूटि:', +'upload-failure-msg' => '[$2] येथून तुमच्या चढवण्यात चूक झाली: -'upload-proto-error' => 'चूकीचा संकेत', -'upload-proto-error-text' => 'दूरस्थ चढवण्याच्या क्रियेत http://पासून किंवा ftp://पासून सूरू होणारी URL लागतात.', -'upload-file-error' => 'अंतर्गत त्रूटी', -'upload-file-error-text' => 'विदादात्यावर तात्पुरती संचिका तयार करण्याच्या प्रयत्न करत असताना अंतर्गत तांत्रिक अडचण आली.कृपया प्रचालकांशी संपर्क करा.', -'upload-misc-error' => 'संचिका चढविताना माहित नसलेली त्रूटी आलेली आहे.', -'upload-misc-error-text' => 'चढवताना अज्ञात तांत्रिक आदचण आली.कृपया URL सुयोग्य आणि उपलब्ध आहे का ते तपासा आणि पुन्हा प्रयत्न करा.जर अडचणे भेडसावणे चालूच राहीले तर प्रचालकांसी संपर्क करा.', +$1', +'upload-warning-subj' => 'चढवताना सूचना', +'upload-warning-msg' => 'तुमच्या चढवण्यात [$2] येथून चूक झाली. तुम्ही [[Special:Upload/stash/$1|चढवण्याचा अर्ज]] पुन्हा भरुन ही चूक दूर करू शकता.', + +'upload-proto-error' => 'चूकीचा संकेत', +'upload-proto-error-text' => 'दूरस्थ चढवण्याच्या क्रियेत http://पासून किंवा ftp://पासून सूरू होणारी URL लागतात.', +'upload-file-error' => 'अंतर्गत त्रूटी', +'upload-file-error-text' => 'विदादात्यावर तात्पुरती संचिका तयार करण्याच्या प्रयत्न करत असताना अंतर्गत तांत्रिक अडचण आली.कृपया [[Special:ListUsers/sysop|प्रचालकांशी]] संपर्क करा.', +'upload-misc-error' => 'संचिका चढविताना माहित नसलेली त्रूटी आलेली आहे.', +'upload-misc-error-text' => 'चढवताना अज्ञात तांत्रिक अडचण आली.कृपया आंतरजालपत्ता सुयोग्य आणि उपलब्ध आहे का ते तपासा आणि पुन्हा प्रयत्न करा. अधिक अडचणी आल्यास तर [[Special:ListUsers/sysop|प्रचालकांशी]] संपर्क करा.', +'upload-too-many-redirects' => 'या आंतरजालपत्त्यात खूप पुनर्निर्देशने आहेत', +'upload-unknown-size' => 'अज्ञात आकारमान', +'upload-http-error' => 'एक एचटीटीपी चूक उद्भवली: $1', # img_auth script messages -'img-auth-noread' => 'तुम्हाला "$1" वाचण्याची परवानगी नाही', +'img-auth-accessdenied' => 'परवानगी नाही', +'img-auth-nopathinfo' => 'PATH_INFO आढळले नाही. +आपला सर्व्हर ही माहिती पोचवू शकत नाही. +तो सीजीआय-आधारित व img_auth ला समर्थन न देऊ शकणारा असू शकतो. +http://www.mediawiki.org/wiki/Manual:Image_Authorization पहा.', +'img-auth-badtitle' => '"$1" पासून वैध शीर्षक बनवण्यात अयशस्वी.', +'img-auth-nologinnWL' => 'तुम्ही प्रवेश घेतलेला नाही व "$1" श्वेतयादीत नाही.', +'img-auth-nofile' => '"$1" ही संचिका अस्तित्वात नाही.', +'img-auth-streaming' => 'स्ट्रीमिंग "$1".', +'img-auth-noread' => 'तुम्हाला "$1" वाचण्याची परवानगी नाही', + +# HTTP errors +'http-invalid-url' => 'अवैध आंतरजालपत्ता: $1', +'http-request-error' => 'एचटीटीपी मागणी अज्ञात कारणामुळे अयशस्वी.', +'http-read-error' => 'एचटीटीपी वाचन त्रुटी.', +'http-curl-error' => 'आंतरजालपत्ता पकडताना चूक: $1', +'http-host-unreachable' => 'आंतरजाल पत्त्यापाशी पोहोचले नाही', +'http-bad-status' => 'एचटीटीपी मागणीदरम्यान एक चूक उद्भवली: $1 $2', # Some likely curl errors. More could be added from -'upload-curl-error6' => 'URLपाशी पोहोचले नाही', +'upload-curl-error6' => 'आंतरजाल पत्त्यापाशी पोहोचले नाही', 'upload-curl-error6-text' => 'दिलेल्या URL ला पोहचू शकलो नाही.कृपया URL बरोबर असून संकेतस्थळ चालू असल्याची पुनश्च खात्री करा.', 'upload-curl-error28' => 'चढवण्यात वेळगेली', 'upload-curl-error28-text' => 'संकेतस्थळाने साद देण्यात खूप जास्त वेळ घेतला आहे,कृपया थोडा वेळ थांबा आणि पुन्हा प्रयत्न करा.कदाचित तुम्ही कमी गर्दीच्या वेळात प्रयत्न करू इच्छीताल.', @@ -1485,11 +1695,13 @@ $3ने ''$2'' कारण दिले आहे.", 'listfiles_search_for' => 'चित्र नावाने शोध:', 'imgfile' => 'संचिका', 'listfiles' => 'चित्र यादी', +'listfiles_thumb' => 'प्रारुप', 'listfiles_date' => 'दिनांक', 'listfiles_name' => 'नाव', 'listfiles_user' => 'सदस्य', 'listfiles_size' => 'आकार (बाईट्स)', 'listfiles_description' => 'वर्णन', +'listfiles_count' => 'आवृत्त्या', # File description page 'file-anchor-link' => 'संचिका', @@ -1502,24 +1714,32 @@ $3ने ''$2'' कारण दिले आहे.", 'filehist-datetime' => 'दिनांक/वेळ', 'filehist-thumb' => 'प्रारुप', 'filehist-thumbtext' => '$1 च्या आवृत्तीचे छोटे प्रारुप', +'filehist-nothumb' => 'प्रारुप नाही', 'filehist-user' => 'सदस्य', 'filehist-dimensions' => 'आकार', 'filehist-filesize' => 'संचिकेचा आकार (बाईट्स)', 'filehist-comment' => 'प्रतिक्रीया', +'filehist-missing' => 'संचिका सापडत नाही', 'imagelinks' => 'संचिका दुवे', -'linkstoimage' => 'खालील पाने या चित्राशी जोडली आहेत:', +'linkstoimage' => 'खालील {{PLURAL:$1|पान चित्राशी जोडले आहे|$1 पाने चित्राशी जोडली आहेत}}:', 'nolinkstoimage' => 'या चित्राशी जोडलेली पृष्ठे नाही आहेत.', 'morelinkstoimage' => 'या संचिकेचे [[Special:WhatLinksHere/$1|अधिक दुवे]] पहा.', -'redirectstofile' => 'खालील संचिका या संचिकेकडे पुनर्निर्देशन करतात:', -'duplicatesoffile' => 'खालील संचिका या दिलेल्या संचिकेच्या प्रती आहेत:', +'redirectstofile' => 'खालील संचिका या {{PLURAL:$1|संचिकेकडे पुनर्निर्देशन करते|$1 संचिकांकडे पुनर्निर्देशन करतात}}:', +'duplicatesoffile' => 'खालील संचिका या दिलेल्या {{PLURAL:$1|संचिकेची प्रत आहे|$1 संचिकांच्या प्रती आहेत}}. [[Special:FileDuplicateSearch/$2|अधिक माहिती]]', 'sharedupload' => 'ही संचिका $1 मधील आहे व ती इतर प्रकल्पांमध्ये वापरली गेल्याची शक्यता आहे.', +'sharedupload-desc-here' => 'ही संचिका $1 येथील असून ती इतर प्रकल्पात वापरलेली असू शकते. +तिचे तेथील [$2 संचिका वर्णन पान] खाली दाखवले आहे.', +'filepage-nofile' => 'या नावाची संचिका अस्तित्वात नाही.', +'filepage-nofile-link' => 'या नावाची संचिका अस्तित्य्वात नाही, पण तुम्ही ती [$1 चढवू शकता].', 'uploadnewversion-linktext' => 'या संचिकेची नवीन आवृत्ती चढवा', +'shared-repo-from' => '$1 पासून', +'shared-repo' => 'एक मुक्त कोश', # File reversion 'filerevert' => '$1 पूर्वपद', 'filerevert-legend' => 'संचिका पूर्वपदास', 'filerevert-intro' => 'तुम्ही [$3, $2 प्रमाणे आवर्तन$4 कडे] [[Media:$1|$1]] उलटवत आहात.', -'filerevert-comment' => 'प्रतिक्रीया:', +'filerevert-comment' => 'कारण:', 'filerevert-defaultcomment' => '$2, $1 च्या आवृत्तीत पूर्वपदास', 'filerevert-submit' => 'पूर्वपद', 'filerevert-success' => "[$3, $2 प्रमाणे आवर्तन $4]कडे '''[[Media:$1|$1]]''' उलटवण्यात आली.", @@ -1534,7 +1754,7 @@ $3ने ''$2'' कारण दिले आहे.", 'filedelete-submit' => 'वगळा', 'filedelete-success' => "'''$1'''वगळण्यात आले.", 'filedelete-success-old' => '$3, $2 वेळी \'\'\'[[Media:$1|$1]]\'\'\' चे आवर्तन वगळण्यात आले आहे .', -'filedelete-nofile' => "'''$1''' {{SITENAME}}वर अस्तित्वात नाही.", +'filedelete-nofile' => "'''$1''' अस्तित्वात नाही.", 'filedelete-nofile-old' => "सांगितलेल्या गुणधर्मानुसार '''$1'''चे कोणतेही विदा आवर्तन संचित नाही.", 'filedelete-otherreason' => 'इतर/शिवाय अधिक कारण:', 'filedelete-reason-otherlist' => 'इतर कारण', @@ -1558,28 +1778,46 @@ Input:contenttype/subtype, e.g. image/jpeg.', # Unused templates 'unusedtemplates' => 'न वापरलेले साचे', -'unusedtemplatestext' => 'या पानावर साचा नामविश्वातील अशी सर्व पाने आहेत जी कुठल्याही पानात वापरलेली नाहीत. वगळण्यापुर्वी साच्यांना जोडणारे इतर दुवे पाहण्यास विसरू नका.', +'unusedtemplatestext' => 'या पानावर साचा नामविश्वातील अशी सर्व पाने आहेत जी कुठल्याही पानात वापरलेली नाहीत. वगळण्यापूर्वी साच्यांना जोडणारे इतर दुवे पाहण्यास विसरू नका.', 'unusedtemplateswlh' => 'इतर दुवे', # Random page 'randompage' => 'अविशिष्ट लेख', -'randompage-nopages' => 'या नामविश्वात कोणतीही पाने नाहीत.', +'randompage-nopages' => 'पुढील {{PLURAL:$2|नामविश्वात|नामविश्वांत}} कोणतीही पाने नाहीत: $1.', # Random redirect 'randomredirect' => 'अविशिष्ट पुनर्निर्देशन', -'randomredirect-nopages' => 'या नामविश्वात कोणतीही पुर्ननिर्देशने नाहीत.', +'randomredirect-nopages' => '$1 या नामविश्वात कोणतीही पुर्ननिर्देशने नाहीत.', # Statistics -'statistics' => 'सांख्यिकी', -'statistics-header-users' => 'सदस्य सांख्यिकी', -'statistics-mostpopular' => 'सर्वाधिक बघितली जाणारी पाने', +'statistics' => 'सांख्यिकी', +'statistics-header-pages' => 'पृष्ठ सांख्यिकी', +'statistics-header-edits' => 'संपादन सांख्यिकी', +'statistics-header-views' => 'सांख्यिकी पहा', +'statistics-header-users' => 'सदस्य सांख्यिकी', +'statistics-header-hooks' => 'इतर सांख्यिकी', +'statistics-articles' => 'संबंधित पाने', +'statistics-pages' => 'पाने', +'statistics-pages-desc' => 'विकीमधील सर्व पाने, पुनर्निर्देशने, चर्चापानांसहित.', +'statistics-files' => 'चढवलेल्या संचिका', +'statistics-edits' => '{{SITENAME}} च्या सुरुवातीपासूनची पानांची संपादने', +'statistics-edits-average' => 'प्रतिपान सरासरी संपादने', +'statistics-views-total' => 'सर्व दाखवते', +'statistics-views-peredit' => 'प्रति संपादनामागे पाहणे', +'statistics-users' => 'नोंदणीकृत [[Special:ListUsers|सदस्य]]', +'statistics-users-active' => 'कार्यरत सदस्य', +'statistics-users-active-desc' => '{{PLURAL:$1|शेवटच्या दिवसात|शेवटच्या $1 दिवसांत}} एकतरी संपादन केलेले सदस्य', +'statistics-mostpopular' => 'सर्वाधिक बघितली जाणारी पाने', 'disambiguations' => 'नि:संदिग्धकरण पृष्ठे', 'disambiguationspage' => 'Template:नि:संदिग्धीकरण', 'disambiguations-text' => "निम्नलिखीत पाने एका '''नि:संदिग्धकरण पृष्ठास'''जोडली जातात. त्याऐवजी ती सुयोग्य विषयाशी जोडली जावयास हवीत.
    जर जर एखादे पान [[MediaWiki:Disambiguationspage]]पासून जोडलेला साचा वापरत असेल तर ते पान '''नि:संदिग्धकरण पृष्ठ''' गृहीत धरले जाते", -'doubleredirects' => 'दुहेरी-पुनर्निर्देशने', -'doubleredirectstext' => 'हे पान अशा पानांची सूची पुरवते की जी पुर्ननिर्देशीत पाने दुसर्‍या पुर्ननिर्देशीत पानाकडे निर्देशीत झाली आहेत.प्रत्येक ओळीत पहिल्या आणि दुसर्‍या पुर्ननिर्देशनास दुवा दीला आहे सोबतच दुसरे पुर्ननिर्देशन ज्या पानाकडे पोहचते ते पण दिले आहे, जे की बरोबर असण्याची शक्यता आहे ,ते वस्तुत: पहिल्या पानापासूनचेही पुर्ननिर्देशन असावयास हवे.', +'doubleredirects' => 'दुहेरी-पुनर्निर्देशने', +'doubleredirectstext' => 'हे पान अशा पानांची सूची पुरवते की जी पुर्ननिर्देशीत पाने दुसर्‍या पुर्ननिर्देशीत पानाकडे निर्देशीत झाली आहेत.प्रत्येक ओळीत पहिल्या आणि दुसर्‍या पुर्ननिर्देशनास दुवा दीला आहे सोबतच दुसरे पुर्ननिर्देशन ज्या पानाकडे पोहचते ते पण दिले आहे, जे की बरोबर असण्याची शक्यता आहे ,ते वस्तुत: पहिल्या पानापासूनचेही पुर्ननिर्देशन असावयास हवे.', +'double-redirect-fixed-move' => '[[$1]] हलवले गेले आहे. +ते [[$2]] येथे निर्देशित होते.', +'double-redirect-fixer' => 'पुनर्निर्देशन नीट करणारा', 'brokenredirects' => 'मोडके पुनर्निर्देशन', 'brokenredirectstext' => 'खालील पुनर्निर्देशने अस्तित्वात नसलेली पाने जोडतात:', @@ -1600,6 +1838,8 @@ Input:contenttype/subtype, e.g. image/jpeg.', 'nmembers' => '$1 {{PLURAL:$1|सदस्य|सदस्य}}', 'nrevisions' => '$1 {{PLURAL:$1|आवर्तन|आवर्तने}}', 'nviews' => '$1 {{PLURAL:$1|दृषीपथ|दृषीपथ}}', +'nimagelinks' => '$1{{PLURAL:$1|पानावर|पानांवर}}', +'ntransclusions' => '$1{{PLURAL:$1|पानावर|पानांवर}} वापर', 'specialpage-empty' => 'या अहवालाकरिता(रिपोर्ट)कोणताही निकाल नाही.', 'lonelypages' => 'पोरकी पाने', 'lonelypagestext' => 'खालील पानांना {{SITENAME}}च्या इतर पानांकडून दूवा जोड झालेली नाही.', @@ -1612,6 +1852,8 @@ Input:contenttype/subtype, e.g. image/jpeg.', 'popularpages' => 'प्रसिद्ध पाने', 'wantedcategories' => 'पाहिजे असलेले वर्ग', 'wantedpages' => 'पाहिजे असलेले लेख', +'wantedfiles' => 'पाहिजे असलेल्या संचिका', +'wantedtemplates' => 'पाहिजे असलेले साचे', 'mostlinked' => 'सर्वाधिक जोडलेली पाने', 'mostlinkedcategories' => 'सर्वाधिक जोडलेले वर्ग', 'mostlinkedtemplates' => 'सर्वाधिक जोडलेले साचे', @@ -1631,6 +1873,10 @@ Input:contenttype/subtype, e.g. image/jpeg.', 'protectedtitlestext' => 'पुढील शिर्षके बदल घडवण्यापासून सुरक्षीत आहेत.', 'protectedtitlesempty' => 'या नियमावलीने सध्या कोणतीही शीर्षके सुरक्षीत केलेली नाहीत.', 'listusers' => 'सदस्यांची यादी', +'listusers-editsonly' => 'फक्त संपादनांसहित सदस्य दाखवा', +'listusers-creationsort' => 'निर्मितीच्या तारखेप्रमाणे लावा', +'usereditcount' => '$1 {{PLURAL:$1|संपादन|संपादने}}', +'usercreated' => '$2 दिवशी $1 वेळी तयार झाले', 'newpages' => 'नवीन पाने', 'newpages-username' => 'सदस्य नाव:', 'ancientpages' => 'जुनी पाने', @@ -1651,6 +1897,7 @@ Input:contenttype/subtype, e.g. image/jpeg.', 'booksources-search-legend' => 'पुस्तक स्रोत शोधा', 'booksources-go' => 'चला', 'booksources-text' => 'खालील यादीत नवी आणिजुनी पुस्तके विकणार्‍या संकेतस्थळाचे दुवे आहेत,आणि त्यात कदाचित आपण शोधू पहात असलेल्या पुस्तकाची अधिक माहिती असेल:', +'booksources-invalid-isbn' => 'दिलेला आयएसबीएन वैध नाही; मूळ स्रोतातून उतरवताना झालेल्या चुकांचे निरसन करा.', # Special:Log 'specialloguserlabel' => 'सदस्य:', @@ -1680,16 +1927,17 @@ Input:contenttype/subtype, e.g. image/jpeg.', # Special:Categories 'categories' => 'वर्ग', -'categoriespagetext' => 'विकिवर खालील वर्ग आहेत. -[[Special:UnusedCategories|Unused categories]] are not shown here. -Also see [[Special:WantedCategories|wanted categories]].', +'categoriespagetext' => 'विकिवर खालील वर्ग {{PLURAL:$1|आहे|आहेत}}. +[[Special:UnusedCategories|न वापरलेले वर्ग]] येथे दाखवलेले नाहीत. +हेही पहा: [[Special:WantedCategories|पाहिजे असलेले वर्ग]].', 'categoriesfrom' => 'या शब्दापासून सुरू होणारे वर्ग दाखवा:', 'special-categories-sort-count' => 'क्रमानुसार लावा', 'special-categories-sort-abc' => 'अक्षरांप्रमाणे लावा', # Special:DeletedContributions -'deletedcontributions' => 'वगळलेली सदस्य संपादने', -'deletedcontributions-title' => 'वगळलेली सदस्य संपादने', +'deletedcontributions' => 'वगळलेली सदस्य संपादने', +'deletedcontributions-title' => 'वगळलेली सदस्य संपादने', +'sp-deletedcontributions-contribs' => 'संपादने', # Special:LinkSearch 'linksearch' => 'बाह्य दुवे', @@ -1704,6 +1952,15 @@ Also see [[Special:WantedCategories|wanted categories]].', 'listusersfrom' => 'पुढील शब्दापासुन सुरू होणारे सदस्य दाखवा:', 'listusers-submit' => 'दाखवा', 'listusers-noresult' => 'एकही सदस्य सापडला नाही.', +'listusers-blocked' => '(खंडित)', + +# Special:ActiveUsers +'activeusers' => 'कार्यरत सदस्यांची यादी', +'activeusers-count' => 'शेवटच्या {{PLURAL:$3|दिवसात|$3 दिवसांत}} $1 {{PLURAL:$1|संपादन|संपादने}}', +'activeusers-from' => 'पुढील शब्दापासुन सुरू होणारे सदस्य दाखवा:', +'activeusers-hidebots' => 'सांगकामे लपवा', +'activeusers-hidesysops' => 'प्रचालक लपवा', +'activeusers-noresult' => 'एकही सदस्य सापडला नाही.', # Special:Log/newusers 'newuserlogpage' => 'नवीन सदस्यांची नोंद', @@ -1716,41 +1973,54 @@ Also see [[Special:WantedCategories|wanted categories]].', # Special:ListGroupRights 'listgrouprights' => 'सदस्य गट अधिकार', 'listgrouprights-summary' => 'खाली या विकिवर दिलेली सदस्य गटांची यादी त्यांच्या अधिकारांसकट दर्शविलेली आहे. प्रत्येकाच्या अधिकारांची अधिक माहिती [[{{MediaWiki:Listgrouprights-helppage}}|इथे]] दिलेली आहे.', +'listgrouprights-key' => '* दिलेले अधिकार +* रद्द अधिकार', 'listgrouprights-group' => 'गट', 'listgrouprights-rights' => 'अधिकार', 'listgrouprights-helppage' => 'Help:गट अधिकार', 'listgrouprights-members' => '(सदस्यांची यादी)', +'listgrouprights-addgroup' => '{{PLURAL:$2|गट|गट}} वाढवा: $1', +'listgrouprights-removegroup' => '{{PLURAL:$2|गट|गट}} वगळा: $1', +'listgrouprights-addgroup-all' => 'सर्व गट वाढवा', 'listgrouprights-removegroup-all' => 'सर्व समूह काढून टाका', -'listgrouprights-addgroup-self' => 'स्वतःच्या खात्यात मिळवा', -'listgrouprights-removegroup-self' => 'स्वतःच्या खात्यातून काढून टाका', +'listgrouprights-addgroup-self' => 'स्वतःच्या खात्यात हे {{PLURAL:$2|गट|गट}} मिळवा: $1', +'listgrouprights-removegroup-self' => 'स्वतःच्या खात्यातून हे {{PLURAL:$2|गट|गट}} वगळा: $1', 'listgrouprights-addgroup-self-all' => 'सर्व समूह स्वतःच्या खात्यात मिळवा', 'listgrouprights-removegroup-self-all' => 'सर्व समूह स्वतःच्या खात्यातून काढून टाका', # E-mail user -'mailnologin' => 'पाठविण्याचा पत्ता नाही', -'mailnologintext' => 'इतर सदस्यांना विपत्र(ईमेल) पाठवण्याकरिता तुम्ही [[Special:UserLogin|प्रवेश केलेला]] असणे आणि शाबीत विपत्र पत्ता तुमच्या [[Special:Preferences|पसंतीत]] नमुद असणे आवश्यक आहे.', -'emailuser' => 'या सदस्याला इमेल पाठवा', -'emailpage' => 'विपत्र (ईमेल) उपयोगकर्ता', -'emailpagetext' => 'जर या सदस्याने शाबीत विपत्र (ईमेल)पत्ता तीच्या अथवा त्याच्या सदस्य पसंतीत नमुद केला असेल,तर खालील सारणी तुम्हाला एक(च) संदेश पाठवेल.तुम्ही तुमच्या सदस्य पसंतीत नमुद केलेला विपत्र पत्ता "कडून" पत्त्यात येईल म्हणजे प्राप्तकरता आपल्याला उत्तर देऊ शकेल.', -'usermailererror' => 'पत्र बाब त्रूटी वापस पाठवली:', -'defemailsubject' => '{{SITENAME}} विपत्र', -'noemailtitle' => 'विपत्र पत्ता नाही', -'noemailtext' => 'या सदस्याने शाबीत विपत्र पत्ता नमुद केलेला नाही, किंवा ’इतर सद्स्यांकडून विपत्र येऊ नये’ सोय निवडली आहे.', -'email-legend' => 'ईमेल अन्य सदस्याला पाठवा', -'emailfrom' => 'प्रेषक', -'emailto' => 'प्रति', -'emailsubject' => 'विषय', -'emailmessage' => 'संदेश:', -'emailsend' => 'पाठवा', -'emailccme' => 'माझ्या संदेशाची मला विपत्र प्रत पाठवा.', -'emailccsubject' => 'तुमच्या विपत्राची प्रत कडे $1: $2', -'emailsent' => 'विपत्र पाठवले', -'emailsenttext' => 'तुमचा विपत्र संदेश पाठवण्यात आला आहे.', +'mailnologin' => 'पाठविण्याचा पत्ता नाही', +'mailnologintext' => 'इतर सदस्यांना विपत्र(ईमेल) पाठवण्याकरिता तुम्ही [[Special:UserLogin|प्रवेश केलेला]] असणे आणि शाबीत विपत्र पत्ता तुमच्या [[Special:Preferences|पसंतीत]] नमुद असणे आवश्यक आहे.', +'emailuser' => 'या सदस्याला इमेल पाठवा', +'emailpage' => 'विपत्र (ईमेल) उपयोगकर्ता', +'emailpagetext' => 'जर या सदस्याने शाबीत विपत्र (ईमेल)पत्ता तीच्या अथवा त्याच्या सदस्य पसंतीत नमुद केला असेल,तर खालील सारणी तुम्हाला एक(च) संदेश पाठवेल.तुम्ही तुमच्या [[Special:Preferences|सदस्य पसंतीत]] नमुद केलेला विपत्र पत्ता "कडून" पत्त्यात येईल म्हणजे प्राप्तकरता आपल्याला उत्तर देऊ शकेल.', +'usermailererror' => 'पत्र बाब त्रूटी वापस पाठवली:', +'defemailsubject' => '{{SITENAME}} विपत्र', +'usermaildisabled' => 'सदस्य विपत्र निष्क्रीय आहे', +'usermaildisabledtext' => 'या विकीवर तुम्हाला इतर सदस्यांना विपत्रे पाठवता येत नाहीत', +'noemailtitle' => 'विपत्र पत्ता नाही', +'noemailtext' => 'या सदस्याने वैध विपत्र पत्ता नमूद केलेला नाही.', +'nowikiemailtitle' => 'विपत्र प्रतिबंधित', +'email-legend' => 'ईमेल अन्य सदस्याला पाठवा', +'emailfrom' => 'प्रेषक', +'emailto' => 'प्रति:', +'emailsubject' => 'विषय:', +'emailmessage' => 'संदेश:', +'emailsend' => 'पाठवा', +'emailccme' => 'माझ्या संदेशाची मला विपत्र प्रत पाठवा.', +'emailccsubject' => 'तुमच्या विपत्राची प्रत कडे $1: $2', +'emailsent' => 'विपत्र पाठवले', +'emailsenttext' => 'तुमचा विपत्र संदेश पाठवण्यात आला आहे.', +'emailuserfooter' => 'हे विपत्र $1 ने $2 ला {{SITENAME}} वरील "सदस्यास विपत्र पाठवा" वापरुन पाठवले आहे.', + +# User Messenger +'usermessage-summary' => 'प्रणाली संदेश देत आहे.', +'usermessage-editor' => 'प्रणाली संदेशवाहक', # Watchlist 'watchlist' => 'माझी पहार्‍याची सूची', 'mywatchlist' => 'माझी पहार्‍याची सूची', -'watchlistfor' => "('''$1'''करिता)", +'watchlistfor2' => '$1 $2 साठी', 'nowatchlist' => 'तुमची पहार्‍याची सूची रिकामी आहे.', 'watchlistanontext' => 'तुमच्या पहार्‍याच्या सूचीतील बाबी पाहण्याकरता किंवा संपादित करण्याकरता, कृपया $1.', 'watchnologin' => 'प्रवेश केलेला नाही', @@ -1826,7 +2096,7 @@ $NEWPAGE 'exblank' => 'पान रिकामे होते', 'delete-confirm' => '"$1" वगळा', 'delete-legend' => 'वगळा', -'historywarning' => 'सुचना: तुम्ही वगळत असलेल्या पानाला इतिहास आहे:', +'historywarning' => 'सूचना: तुम्ही वगळत असलेल्या पानाला $1 {{PLURAL:$1|आवर्तनाचा|आवर्तनांचा}} इतिहास आहे:', 'confirmdeletetext' => 'तुम्ही एक लेख त्याच्या सर्व इतिहासासोबत वगळण्याच्या तयारीत आहात. कृपया तुम्ही करत असलेली कृती ही मीडियाविकीच्या [[{{MediaWiki:Policy-url}}|नीतीनुसार]] आहे ह्याची खात्री करा. तसेच तुम्ही करीत असलेल्या कृतीचे परीणाम कृती करण्यापूर्वी जाणून घ्या.', 'actioncomplete' => 'काम पूर्ण', @@ -1845,9 +2115,9 @@ $NEWPAGE ** लेखकाची(लेखिकेची) विनंती ** प्रताधिकार उल्लंघन ** उत्पात', -'delete-edit-reasonlist' => 'वगळण्याची कारणे संपादीत करा', -'delete-toobig' => 'या पानाला खूप मोठी इतिहास यादी आहे, तसेच हे पान $1 पेक्षा जास्त वेळा बदलण्यात आलेले आहे. अशी पाने वगळणे हे {{SITENAME}} ला धोकादायक ठरू नये म्हणून शक्य केलेले नाही.', -'delete-warning-toobig' => 'या पानाला खूप मोठी इतिहास यादी आहे, तसेच हे पान $1 पेक्षा जास्त वेळा बदलण्यात आलेले आहे. +'delete-edit-reasonlist' => 'वगळण्याची कारणे संपादित करा', +'delete-toobig' => 'या पानाला खूप मोठी इतिहास यादी आहे, तसेच हे पान $1 {{PLURAL:$1|पेक्षा|पेक्षा}}पेक्षा जास्त वेळा बदलण्यात आलेले आहे. अशी पाने वगळणे हे {{SITENAME}} ला धोकादायक ठरू नये म्हणून शक्य केलेले नाही.', +'delete-warning-toobig' => 'या पानाला खूप मोठी इतिहास यादी आहे, तसेच हे पान $1 {{PLURAL:$1|पेक्षा|पेक्षा}} पेक्षा जास्त वेळा बदलण्यात आलेले आहे. अशी पाने वगळणे हे {{SITENAME}} ला धोकादायक ठरू शकते; कृपया काळजीपूर्वक हे पान वगळा.', @@ -1857,13 +2127,16 @@ $NEWPAGE 'rollbacklink' => 'द्रूतमाघार', 'rollbackfailed' => 'द्रूतमाघार फसली', 'cantrollback' => 'जुन्या आवृत्तीकडे परतवता येत नाही; शेवटचा संपादक या पानाचा एकमात्र लेखक आहे.', -'alreadyrolled' => 'Cannot rollback last edit of by [[User:$2|$2]] ([[User talk:$2|Talk]])चे शेवटाचे [[:$1]]वे संपादन माघारी परतवता येतनाही; पान आधीच कुणी माघारी परतवले आहे किंवा संपादीत केले आहे. +'alreadyrolled' => '[[User:$2|$2]] ([[User talk:$2|Talk]] [[Special:Contributions/$2|{{int:contribslink}}]])चे शेवटाचे [[:$1]]वे संपादन माघारी परतवता येत नाही; पान आधीच कुणी माघारी परतवले आहे किंवा संपादीत केले आहे. -शेवटचे संपादन [[User:$3|$3]] ([[User talk:$3|Talk]])-चे होते.', -'editcomment' => 'टिप्पणी बदला', +शेवटचे संपादन [[User:$3|$3]] ([[User talk:$3|Talk]] [[Special:Contributions/$3|{{int:contribslink}}]])-चे होते.', +'editcomment' => "संपादन सारांश \"''\$1''\" होता.", 'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|चर्चा]]) यांनी केलेले बदल [[User:$1|$1]] यांच्या आवृत्तीकडे पूर्वपदास नेले.', 'rollback-success' => '$1 ने उलटवलेली संपादने;$2 च्या आवृत्तीस परत नेली.', -'sessionfailure' => 'तुमच्या दाखल सत्रात काही समस्या दिसते;सत्र अपहारणा पासून काळजी घेण्याच्या दृष्टीने ही कृती रद्द केली गेली आहे.कपया आपल्या विचरकाच्या "back" कळीवर टिचकी मारा आणि तुम्ही ज्या पानावरून आला ते पुन्हा चढवा,आणि प्रत प्रयत्न करा.', + +# Edit tokens +'sessionfailure-title' => 'सत्र त्रुटी', +'sessionfailure' => 'तुमच्या दाखल सत्रात काही समस्या दिसते;सत्र अपहारणा पासून काळजी घेण्याच्या दृष्टीने ही कृती रद्द केली गेली आहे.कपया आपल्या विचरकाच्या "back" कळीवर टिचकी मारा आणि तुम्ही ज्या पानावरून आला ते पुन्हा चढवा,आणि प्रत प्रयत्न करा.', # Protect 'protectlogpage' => 'सुरक्षा नोंदी', @@ -1871,6 +2144,7 @@ $NEWPAGE 'protectedarticle' => '"[[$1]]" सुरक्षित केला', 'modifiedarticleprotection' => '"[[$1]]"करिता सुरक्षापातळी बदलली', 'unprotectedarticle' => '"[[$1]]" असुरक्षित केला.', +'movedarticleprotection' => 'सुरक्षापातळी "[[$2]]" येथून "[[$1]]" येथे हलवली.', 'protect-title' => '"$1" सुरक्षित करत आहे', 'prot_1movedto2' => '"[[$1]]" हे पान "[[$2]]" मथळ्याखाली स्थानांतरित केले.', 'protect-legend' => 'सुरक्षापातळीतील बदल निर्धारित करा', @@ -1893,8 +2167,13 @@ $NEWPAGE 'protect-expiry-indefinite' => 'अनंत', 'protect-cascade' => 'या पानात असलेली पाने सुरक्षित करा (सुरक्षा शिडी)', 'protect-cantedit' => 'तुम्ही या पानाची सुरक्षा पातळी बदलू शकत नाही कारण तुम्हाला तसे करण्याची परवानगी नाही.', +'protect-othertime' => 'इतर वेळ:', +'protect-othertime-op' => 'इतर वेळ', +'protect-existing-expiry' => 'शेवट दिनांक: $3, $2', +'protect-otherreason' => 'इतर / अतिरिक्त कारण:', 'protect-otherreason-op' => 'दुसरे कारण', -'protect-expiry-options' => '२ तास:2 hours,१ दिवस:1 day,३ दिवस:3 days,१ आठवडा:1 week,२ आठवडे:2 weeks,१ महिना:1 month,३ महिने:3 months,६ महिने:6 months,१ वर्ष:1 year,अनंत:infinite', +'protect-edit-reasonlist' => 'सुरक्षेची कारणे संपादित करा', +'protect-expiry-options' => '१ तास:1 hour,१ दिवस:1 day,१ आठवडा:1 week,२ आठवडे:2 weeks,१ महिना:1 month,३ महिने:3 months,६ महिने:6 months,१ वर्ष:1 year,अनंत:infinite', 'restriction-type' => 'परवानगी:', 'restriction-level' => 'सुरक्षापातळी:', 'minimum-size' => 'किमान आकार', @@ -1917,7 +2196,8 @@ $NEWPAGE 'undeletepage' => 'वगळलेली पाने पहा आणि पुनर्स्थापित करा', 'undeletepagetitle' => "'''खाली [[:$1]] च्या वगळलेल्या आवृत्त्या समाविष्ट केलेल्या आहेत'''.", 'viewdeletedpage' => 'काढून टाकलेले लेख पहा', -'undeletepagetext' => 'खालील पाने वगळली आहेत तरी सुद्धा विदागारात जतन आहेत आणि पुर्न्स्थापित करणे शक्य आहे. विदागारातील साठवण ठरावीक कालावधीने स्वच्छ करता येते.', +'undeletepagetext' => 'खालील {{PLURAL:$1|पान वगळले आहे तरीसुद्धा विदागारात जतन आहे आणि पुर्न्स्थापित करणे शक्य आहे|$1 पाने वगळली आहेत तरी सुद्धा विदागारात जतन आहेत आणि पुर्न्स्थापित करणे शक्य आहेत}}. विदागारातील साठवण ठराविक कालावधीने स्वच्छ करता येते.', +'undelete-fieldset-title' => 'आवर्तने पुनर्स्थापित करा', 'undeleteextrahelp' => "संपूर्ण पान पुनर्स्थापित करण्याकरिता,सारे रकाने रिकामे ठेवा आणि '''''पुनर्स्थापन'''''वर टिचकी मारा. निवडक पुनर्स्थापन करण्याकरिता, ज्या आवर्तनांचे पुनर्स्थापन करावयाचे त्यांचे रकाने निवडा , आणि '''''पुनर्स्थापन'''''वर टिचकी मारा. '''''पुनर्योजन ''''' वर टिचकी मारल्यास सारे रकाने आणि प्रतिक्रीया खिडकी रिकामी होईल.", 'undeleterevisions' => '$1 {{PLURAL:$1|आवर्तन|आवर्तने}}विदागारात संचीत', 'undeletehistory' => 'जर तुम्ही पान पुनर्स्थापित केले तर ,सारी आवर्तने इतिहासात पुनर्स्थापित होतील. @@ -1925,14 +2205,15 @@ $NEWPAGE 'undeleterevdel' => 'पृष्ठ पानाचे आवर्तन अर्धवट वगळले जाणार असेल तर पुनर्स्थापनाची कृती केली जाणार नाही. अशा प्रसंगी, तुम्ही अगदी अलिकडील वगळलेली आवर्तने अनचेक किंवा अनहाईड केलीच पाहिजे.', 'undeletehistorynoadmin' => 'हे पान वगळले गेले आहे.वगळण्याचे कारण खालील आढाव्यात,वगळण्यापूर्वी संपादीत करणार्‍या संपादकांच्या माहिती सोबत,दाखवले आहे. वगळलेल्या आवर्त्नांचा नेमका मजकुर केवळ प्रचालकांना उपलब्ध असेल.', -'undelete-revision' => '$1चे($2चे)आवर्तन $3 ने वगळले:', +'undelete-revision' => '$1चे($4चे, $5 येथील) आवर्तन $3 ने वगळले:', 'undeleterevision-missing' => 'अयोग्य अथवा नसापडणारे आवर्तन. तुमचा दुवा कदाचित चूकीचा असेल, किंवा आवर्तन पुनर्स्थापित केले गेले असेल किंवा विदागारातून वगळले असेल.', 'undelete-nodiff' => 'पूर्वीचे कोणतेही आवर्तन आढळले नाही.', 'undeletebtn' => 'वगळण्याची क्रिया रद्द करा', 'undeletelink' => 'पहा/पुनर्स्थापित करा', +'undeleteviewlink' => 'पहा', 'undeletereset' => 'पूर्ववत', 'undeleteinvert' => 'निवड उलट करा', -'undeletecomment' => 'प्रतिक्रीया:', +'undeletecomment' => 'प्रतिक्रिया:', 'undeletedarticle' => '"[[$1]]" पुनर्स्थापित', 'undeletedrevisions' => '{{PLURAL:$1|1 आवर्तन|$1 आवर्तने}} पुनर्स्थापित', 'undeletedrevisions-files' => '{{PLURAL:$1|1 आवर्तन|$1 आवर्तने}}आणि {{PLURAL:$2|1 संचिका|$2 संचिका}} पुनर्स्थापित', @@ -1954,6 +2235,7 @@ $NEWPAGE 'undelete-error-long' => 'संचिकेचे वगळणे उलटवताना त्रूटींचा अडथळा आला: $1', +'undelete-show-file-submit' => 'होय', # Namespace form on various pages 'namespace' => 'नामविश्व:', @@ -1970,15 +2252,23 @@ $1', 'month' => 'या महिन्यापासून (आणि पूर्वीचे):', 'year' => 'या वर्षापासून (आणि पूर्वीचे):', -'sp-contributions-newbies' => 'केवळ नवीन सदस्य खात्यांचे योगदान दाखवा', -'sp-contributions-newbies-sub' => 'नवशिक्यांसाठी', -'sp-contributions-blocklog' => 'ब्लॉक यादी', -'sp-contributions-deleted' => 'वगळलेली सदस्य संपादने', -'sp-contributions-talk' => 'चर्चा', -'sp-contributions-userrights' => 'सदस्य अधिकार व्यवस्थापन', -'sp-contributions-search' => 'योगदान शोधयंत्र', -'sp-contributions-username' => 'आंतरजाल अंकपत्ता किंवा सदस्यनाम:', -'sp-contributions-submit' => 'शोध', +'sp-contributions-newbies' => 'केवळ नवीन सदस्य खात्यांचे योगदान दाखवा', +'sp-contributions-newbies-sub' => 'नवशिक्यांसाठी', +'sp-contributions-newbies-title' => 'नवीन खात्यांसाठी सदस्य योगदान', +'sp-contributions-blocklog' => 'ब्लॉक यादी', +'sp-contributions-deleted' => 'वगळलेली सदस्य संपादने', +'sp-contributions-uploads' => 'चढवलेल्या संचिका', +'sp-contributions-logs' => 'नोंदी', +'sp-contributions-talk' => 'चर्चा', +'sp-contributions-userrights' => 'सदस्य अधिकार व्यवस्थापन', +'sp-contributions-blocked-notice' => 'हा सदस्य सध्या प्रतिबंधित आहे. +सर्वांत नवीन प्रतिबंधन यादी खाली संदर्भासाठी दिली आहे:', +'sp-contributions-blocked-notice-anon' => 'हा अंकपत्ता सध्या प्रतिबंधित आहे. +सर्वांत नवीन प्रतिबंधन यादी खाली संदर्भासाठी दिली आहे:', +'sp-contributions-search' => 'योगदान शोधयंत्र', +'sp-contributions-username' => 'आंतरजाल अंकपत्ता किंवा सदस्यनाम:', +'sp-contributions-toponly' => 'नवीन आवर्तने असलेली संपादने दाखवा', +'sp-contributions-submit' => 'शोध', # What links here 'whatlinkshere' => 'येथे काय जोडले आहे', @@ -2001,6 +2291,7 @@ $1', # Block/unblock 'blockip' => 'हा अंकपत्ता अडवा', +'blockip-title' => 'सदस्यास प्रतिबंध करा', 'blockip-legend' => 'सदस्यास प्रतिबंध करा', 'blockiptext' => 'एखाद्या विशिष्ट अंकपत्त्याची किंवा सदस्याची लिहिण्याची क्षमता प्रतिबंधीत करण्याकरिता खालील सारणी वापरा. हे केवळ उच्छेद टाळण्याच्याच दृष्टीने आणि [[{{MediaWiki:Policy-url}}|निती]]स अनुसरून केले पाहिजे. @@ -2036,8 +2327,8 @@ $1', 'ipb-edit-dropdown' => 'प्रतिबंधाची कारणे संपादा', 'ipb-unblock-addr' => '$1चा प्रतिबंध उठवा', 'ipb-unblock' => 'सदस्यनाव आणि अंकपत्त्यावरचे प्रतिबंधन उठवा', -'ipb-blocklist-addr' => '$1करिता सध्याचे प्रतिबंध पहा', 'ipb-blocklist' => 'सध्याचे प्रतिबंध पहा', +'ipb-blocklist-contribs' => '$1 साठी सदस्याचे योगदान', 'unblockip' => 'अंकपत्ता सोडवा', 'unblockiptext' => 'खाली दिलेला फॉर्म वापरून पूर्वी अडवलेल्या अंकपत्त्याला लेखनासाठी आधिकार द्या.', 'ipusubmit' => 'हा पत्ता सोडवा', @@ -2046,7 +2337,11 @@ $1', 'ipblocklist' => 'अडविलेले अंकपत्ते व सदस्य नावे', 'ipblocklist-legend' => 'प्रतिबंधीत सदस्य शोधा', 'ipblocklist-username' => 'सदस्यनाव किंवा आंतरजाल अंकपत्ता:', +'ipblocklist-sh-userblocks' => '$1खाते प्रतिबंधने', +'ipblocklist-sh-tempblocks' => '$1 तात्पुरती प्रतिबंधने', 'ipblocklist-submit' => 'शोध', +'ipblocklist-localblock' => 'स्थानिक प्रतिबंधन', +'ipblocklist-otherblocks' => '{{PLURAL:$1|दुसरे प्रतिबंधन|इतर प्रतिबंधने}}', 'blocklistline' => '$3 ($4)ला $1, $2 ने प्रतिबंधीत केले', 'infiniteblock' => 'अनंत', 'expiringblock' => 'समाप्ति $1 $2', @@ -2054,6 +2349,7 @@ $1', 'noautoblockblock' => 'स्व्यंचलितप्रतिबंधन स्थगित केले', 'createaccountblock' => 'खात्याची निर्मिती प्रतिबंधीत केली', 'emailblock' => 'विपत्र प्रतिबंधीत', +'blocklist-nousertalk' => 'ला स्वतःचे चर्चापान संपादता येत नाही', 'ipblocklist-empty' => 'प्रतिबंधन यादी रिकामी आहे.', 'ipblocklist-no-results' => 'विनंती केलेला अंकपत्ता अथवा सदस्यनाव प्रतिबंधीत केलेले नाही.', 'blocklink' => 'अडवा', @@ -2071,10 +2367,16 @@ $1', 'block-log-flags-nocreate' => 'खाते तयारकरणे अवरूद्ध केले', 'block-log-flags-noautoblock' => 'स्वयंचलित प्रतिबंधन अवरूद्ध केले', 'block-log-flags-noemail' => 'विपत्र अवरूद्ध केले', +'block-log-flags-nousertalk' => 'ला स्वतःचे चर्चापान संपादता येत नाही', +'block-log-flags-hiddenname' => 'सदस्यनाम लपवलेले आहे', 'range_block_disabled' => 'प्रचालकांची पल्ला बंधने घालण्याची क्षमता अनुपलब्ध केली आहे.', 'ipb_expiry_invalid' => 'अयोग्य समाप्ती काळ.', 'ipb_expiry_temp' => 'लपविलेले सदस्यनाम प्रतिबंधन कायमस्वरुपी असले पाहिजे.', 'ipb_already_blocked' => '"$1" आधीच अवरूद्ध केलेले आहे.', +'ipb-needreblock' => '== अगोदरच प्रतिबंधित == +$1 हा अगोदरच प्रतिबंधित आहे. +तुम्हाला रुपरेषा बदलायची आहे का?', +'ipb-otherblocks-header' => '{{PLURAL:$1|दुसरे प्रतिबंधन|इतर प्रतिबंधने}}', 'ipb_cant_unblock' => 'त्रूटी: प्रतिबंधन क्र.$1 मिळाला नाही. त्यावरील प्रतिबंधन कदाचित आधीच उठवले असेल.', 'ipb_blocked_as_range' => 'त्रूटी:अंकपत्ता IP $1 हा प्रत्यक्षपणे प्रतिबंधीत केलेला नाही आणि अप्रतिबंधीत करता येत नाही.तो,अर्थात,$2पल्ल्याचा भाग म्हाणून तो प्रतिबंधीत केलेला आहे,जो की अप्रतिबंधीत करता येत नाही.', 'ip_range_invalid' => 'अंकपत्ता अयोग्य टप्प्यात.', @@ -2085,6 +2387,8 @@ $1', 'proxyblocksuccess' => 'झाले.', 'sorbsreason' => '{{SITENAME}}ने वापरलेल्या DNSBL मध्ये तुमच्या अंकपत्त्याची नोंद उघड-उघड प्रतिनिधी म्हणून सूचित केली आहे.', 'sorbs_create_account_reason' => '{{SITENAME}}च्या DNSBLने तुमचा अंकपत्ता उघड-उघड प्रतिनिधी म्हणून सूचित केला आहे.तुम्ही खाते उघडू शकत नाही', +'cant-block-while-blocked' => 'तुम्ही स्वतः प्रतिबंधित असताना इतरांना प्रतिबंधित करू शकत नाही.', +'ipbnounblockself' => 'तुम्ही स्वतः अप्रतिबंधित करू शकत नाही', # Developer tools 'lockdb' => 'विदागारास ताळे ठोका', @@ -2107,9 +2411,9 @@ $1', 'databasenotlocked' => 'विदागारास ताळे नही', # Move page -'move-page' => '$1 हलवा', -'move-page-legend' => 'पृष्ठ स्थानांतरण', -'movepagetext' => "खालील अर्ज हा एखाद्या लेखाचे शीर्षक बदलण्यासाठी वापरता येईल. खालील अर्ज भरल्यानंतर लेखाचे शीर्षक बदलले जाईल तसेच त्या लेखाचा सर्व इतिहास हा नवीन लेखामध्ये स्थानांतरित केला जाईल. +'move-page' => '$1 हलवा', +'move-page-legend' => 'पृष्ठ स्थानांतरण', +'movepagetext' => "खालील अर्ज हा एखाद्या लेखाचे शीर्षक बदलण्यासाठी वापरता येईल. खालील अर्ज भरल्यानंतर लेखाचे शीर्षक बदलले जाईल तसेच त्या लेखाचा सर्व इतिहास हा नवीन लेखामध्ये स्थानांतरित केला जाईल. जुने शीर्षक नवीन शीर्षकाला पुनर्निर्देशित करेल. जुन्या शीर्षकाला असलेले दुवे बदलले जाणार नाहीत, तरी तुम्हाला विनंती आहे की स्थानांतरण केल्यानंतर [[Special:DoubleRedirects|दुहेरी]] अथवा [[Special:BrokenRedirects|मोडकी]] पुनर्निर्देशने तपासावीत. @@ -2121,53 +2425,65 @@ $1', '''सूचना!''' स्थानांतरण केल्याने एखाद्या महत्वाच्या लेखामध्ये अनपेक्षित बदल होऊ शकतात. तुम्हाला विनंती आहे की तुम्ही पूर्ण काळजी घ्या व होणारे परिणाम समजावून घ्या. जर तुम्हाला शंका असेल तर प्रबंधकांशी संपर्क करा.", -'movepagetalktext' => "संबंधित चर्चा पृष्ठ याबरोबर स्थानांतरीत होणार नाही '''जर:''' +'movepagetalktext' => "संबंधित चर्चा पृष्ठ याबरोबर स्थानांतरीत होणार नाही '''जर:''' * तुम्ही पृष्ठ दुसर्‍या नामविश्वात स्थानांतरीत करत असाल * या नावाचे चर्चा पान अगोदरच अस्तित्वात असेल तर, किंवा * खालील चेकबॉक्स तुम्ही काढून टाकला तर. या बाबतीत तुम्हाला स्वतःला ही पाने एकत्र करावी लागतील.", -'movearticle' => 'पृष्ठाचे स्थानांतरण', -'movenologin' => 'प्रवेश केलेला नाही', -'movenologintext' => 'पान स्थानांतरित करण्यासाठी तुम्हाला [[Special:UserLogin|प्रवेश]] करावा लागेल.', -'movenotallowed' => '{{SITENAME}}वरील पाने स्थानांतरीत करण्याची आपल्यापाशी परवानगी नाही.', -'movenotallowedfile' => 'तुम्हाला दस्तावैज स्थानांतरीत करण्याची परवानगी नाही.', -'cant-move-user-page' => 'तुम्हाला सदस्याचे दस्तावैज स्थानांतरीत करण्याची परवानगी नाही.', -'newtitle' => 'नवीन शीर्षकाकडे:', -'move-watch' => 'या पानावर लक्ष ठेवा', -'movepagebtn' => 'स्थानांतरण करा', -'pagemovedsub' => 'स्थानांतरण यशस्वी', -'movepage-moved' => '\'\'\'"$1" ला "$2" मथळ्याखाली स्थानांतरीत केले\'\'\'', -'articleexists' => 'त्या नावाचे पृष्ठ अगोदरच अस्तित्वात आहे, किंवा तुम्ही निवडलेले +'movearticle' => 'पृष्ठाचे स्थानांतरण', +'movenologin' => 'प्रवेश केलेला नाही', +'movenologintext' => 'पान स्थानांतरित करण्यासाठी तुम्हाला [[Special:UserLogin|प्रवेश]] करावा लागेल.', +'movenotallowed' => '{{SITENAME}}वरील पाने स्थानांतरीत करण्याची आपल्यापाशी परवानगी नाही.', +'movenotallowedfile' => 'तुम्हाला दस्तावैज स्थानांतरीत करण्याची परवानगी नाही.', +'cant-move-user-page' => 'तुम्हाला सदस्याचे दस्तावैज स्थानांतरीत करण्याची परवानगी नाही.', +'newtitle' => 'नवीन शीर्षकाकडे:', +'move-watch' => 'या पानावर लक्ष ठेवा', +'movepagebtn' => 'स्थानांतरण करा', +'pagemovedsub' => 'स्थानांतरण यशस्वी', +'movepage-moved' => '\'\'\'"$1" ला "$2" मथळ्याखाली स्थानांतरीत केले\'\'\'', +'movepage-moved-redirect' => 'एक पुनर्निर्देशन तयार केले आहे.', +'articleexists' => 'त्या नावाचे पृष्ठ अगोदरच अस्तित्वात आहे, किंवा तुम्ही निवडलेले नाव योग्य नाही आहे. कृपया दुसरे नाव शोधा.', -'cantmove-titleprotected' => 'नवे शीर्षक निर्मीत करण्या पासून सुरक्षीत केलेले असल्यामुळे,तुम्ही या जागी एखादे पान स्थानांतरीत करू शकत नाही.', -'talkexists' => 'पृष्ठ यशस्वीरीत्या स्थानांतरीत झाले पण चर्चा पृष्ठ स्थानांतरीत होवू +'cantmove-titleprotected' => 'नवे शीर्षक निर्मीत करण्या पासून सुरक्षीत केलेले असल्यामुळे,तुम्ही या जागी एखादे पान स्थानांतरीत करू शकत नाही.', +'talkexists' => 'पृष्ठ यशस्वीरीत्या स्थानांतरीत झाले पण चर्चा पृष्ठ स्थानांतरीत होवू शकले नाही कारण त्या नावाचे पृष्ठ आधीच अस्तित्वात होते. कृपया तुम्ही स्वतः ती पृष्ठे एकत्र करा.', -'movedto' => 'कडे स्थानांतरण केले', -'movetalk' => 'शक्य असल्यास "चर्चा पृष्ठ" स्थानांतरीत करा', -'move-subpages' => 'जर लागू असेल तर, सर्व उपपाने स्थानांतरीत करा', -'move-talk-subpages' => 'जर लागू असेल तर चर्चा पानाची सर्व उपपाने स्थानांतरीत करा', -'movepage-page-exists' => '$1 पान अगोदरच अस्तित्त्वात आहे व त्याच्यावर आपोआप पुनर्लेखन करता येणार नाही.', -'movepage-page-moved' => '$1 हे पान $2 या मथळ्याखाली स्थानांतरीत केले.', -'movepage-page-unmoved' => '$1 हे पान $2 या मथळ्याखाली स्थानांतरीत करता आलेले नाही.', -'movepage-max-pages' => 'जास्तीत जास्त $1 {{PLURAL:$1|पान|पाने}} स्थानांतरीत करण्यात {{PLURAL:$1|आलेले आहे|आलेली आहेत}} व आता आणखी पाने आपोआप स्थानांतरीत होणार नाहीत.', -'1movedto2' => '"[[$1]]" हे पान "[[$2]]" मथळ्याखाली स्थानांतरित केले.', -'1movedto2_redir' => '[[$1]] हे पान [[$2]] मथळ्याखाली स्थानांतरित केले (पुनर्निर्देशन).', -'movelogpage' => 'स्थांनांतराची नोंद', -'movelogpagetext' => 'स्थानांतरित केलेल्या पानांची यादी.', -'movereason' => 'कारण:', -'revertmove' => 'पूर्वपदास न्या', -'delete_and_move' => 'वगळा आणि स्थानांतरित करा', -'delete_and_move_text' => '==वगळण्याची आवशकता== +'movedto' => 'कडे स्थानांतरण केले', +'movetalk' => 'शक्य असल्यास "चर्चा पृष्ठ" स्थानांतरीत करा', +'move-subpages' => 'उपपाने स्थानांतरीत करा (जास्तीतजास्त $1)', +'move-talk-subpages' => 'चर्चा पानाची सर्व उपपाने स्थानांतरीत करा (जास्तीतजास्त $1)', +'movepage-page-exists' => '$1 पान अगोदरच अस्तित्त्वात आहे व त्याच्यावर आपोआप पुनर्लेखन करता येणार नाही.', +'movepage-page-moved' => '$1 हे पान $2 या मथळ्याखाली स्थानांतरीत केले.', +'movepage-page-unmoved' => '$1 हे पान $2 या मथळ्याखाली स्थानांतरीत करता आलेले नाही.', +'movepage-max-pages' => 'जास्तीत जास्त $1 {{PLURAL:$1|पान|पाने}} स्थानांतरीत करण्यात {{PLURAL:$1|आलेले आहे|आलेली आहेत}} व आता आणखी पाने आपोआप स्थानांतरीत होणार नाहीत.', +'1movedto2' => '"[[$1]]" हे पान "[[$2]]" मथळ्याखाली स्थानांतरित केले.', +'1movedto2_redir' => '[[$1]] हे पान [[$2]] मथळ्याखाली स्थानांतरित केले (पुनर्निर्देशन).', +'move-redirect-suppressed' => 'पुनर्निर्देशन लपवले', +'movelogpage' => 'स्थांनांतराची नोंद', +'movelogpagetext' => 'स्थानांतरित केलेल्या पानांची यादी.', +'movesubpage' => '{{PLURAL:$1|उपपान|उपपाने}}', +'movesubpagetext' => 'या पानास $1 {{PLURAL:$1|उपपान|उपपाने}} असून ती पुढे दर्शवली आहेत:', +'movenosubpage' => 'या पानात उपपाने नाहीत.', +'movereason' => 'कारण:', +'revertmove' => 'पूर्वपदास न्या', +'delete_and_move' => 'वगळा आणि स्थानांतरित करा', +'delete_and_move_text' => '==वगळण्याची आवशकता== लक्ष्यपान "[[:$1]]" आधीच अस्तीत्वात आहे.स्थानांतराचा मार्ग मोकळाकरण्या करिता तुम्हाला ते वगळावयाचे आहे काय?', -'delete_and_move_confirm' => 'होय, पान वगळा', -'delete_and_move_reason' => 'आधीचे पान वगळून स्थानांतर केले', -'selfmove' => 'स्रोत आणि लक्ष्य पाने समान आहेत; एखादे पान स्वत:च्याच जागी स्थानांतरीत करता येत नाही.', -'immobile-source-page' => 'हे पान हलवता येत नाही', -'imagenocrossnamespace' => 'ज्या नामविश्वात संचिका साठविता येत नाहीत, त्या नामविश्वात संचिकांचे स्थानांतरण करता येत नाही', -'imagetypemismatch' => 'दिलेले संचिकेचे एक्सटेंशन त्या संचिकेच्या प्रकाराशी जुळत नाही', +'delete_and_move_confirm' => 'होय, पान वगळा', +'delete_and_move_reason' => 'आधीचे पान वगळून स्थानांतर केले', +'selfmove' => 'स्रोत आणि लक्ष्य पाने समान आहेत; एखादे पान स्वत:च्याच जागी स्थानांतरीत करता येत नाही.', +'immobile-source-namespace' => 'नामविश्व "$1" मधील पाने हलवता आली नाहीत.', +'immobile-target-namespace' => 'नामविश्व "$1" मध्ये पाने हलवता आली नाहीत.', +'immobile-source-page' => 'हे पान हलवता येत नाही', +'immobile-target-page' => 'लक्ष्य मथळा हलवता येत नाही.', +'imagenocrossnamespace' => 'ज्या नामविश्वात संचिका साठविता येत नाहीत, त्या नामविश्वात संचिकांचे स्थानांतरण करता येत नाही', +'imagetypemismatch' => 'दिलेले संचिकेचे एक्सटेंशन त्या संचिकेच्या प्रकाराशी जुळत नाही', +'imageinvalidfilename' => 'लक्ष्यसंचिका अवैध आहे', +'move-leave-redirect' => 'मागे एक पुनर्निर्देशन ठेवा', +'semiprotectedpagemovewarning' => "'''सूचना:''' हे पान सुरक्षित आहे. फक्त नोंदणीकृत सदस्य याच्यात बदल करू शकतात. +सर्वांत ताजी यादी खाली संदर्भासाठी दिली आहे:", # Export 'export' => 'पाने निर्यात करा', @@ -2182,16 +2498,25 @@ $1', 'export-submit' => 'निर्यात करा', 'export-addcattext' => 'वर्गीकरणातून पाने भरा:', 'export-addcat' => 'भर', +'export-addnstext' => 'नामविश्वातून पाने वाढवा:', +'export-addns' => 'वाढवा', 'export-download' => 'संचिका म्हणून जतन करा', 'export-templates' => 'साचे आंतरभूत करा', # Namespace 8 related -'allmessages' => 'सर्व प्रणाली-संदेश', -'allmessagesname' => 'नाव', -'allmessagesdefault' => 'सुरुवातीचा मजकूर', -'allmessagescurrent' => 'सध्याचा मजकूर', -'allmessagestext' => 'MediaWiki नामविश्वातील सर्व प्रणाली संदेशांची यादी', -'allmessagesnotsupportedDB' => "हे पान संपादित करता येत नाही कारण'''\$wgUseDatabaseMessages''' मालवला आहे.", +'allmessages' => 'सर्व प्रणाली-संदेश', +'allmessagesname' => 'नाव', +'allmessagesdefault' => 'सुरुवातीचा मजकूर', +'allmessagescurrent' => 'सध्याचा मजकूर', +'allmessagestext' => 'मीडियाविकी नामविश्वातील सर्व प्रणाली संदेशांची यादी', +'allmessagesnotsupportedDB' => "हे पान संपादित करता येत नाही कारण'''\$wgUseDatabaseMessages''' मालवला आहे.", +'allmessages-filter-legend' => 'गाळक', +'allmessages-filter-unmodified' => 'असंपादित', +'allmessages-filter-all' => 'सर्व', +'allmessages-filter-modified' => 'संपादित', +'allmessages-prefix' => 'उपसर्गाने गाळा:', +'allmessages-language' => 'भाषा:', +'allmessages-filter-submit' => 'चला', # Thumbnails 'thumbnail-more' => 'मोठे करा', @@ -2201,6 +2526,8 @@ $1', 'djvu_no_xml' => 'DjVu संचिकेकरिता XML ओढण्यात असमर्थ', 'thumbnail_invalid_params' => 'इवल्याशाचित्राचा अयोग्य परिचय', 'thumbnail_dest_directory' => 'लक्ष्य धारिकेच्या निर्मितीस असमर्थ', +'thumbnail_image-type' => 'चित्रप्रकार समर्थित नाही', +'thumbnail_image-missing' => 'संचिका सापडत नाही: $1', # Special:Import 'import' => 'पाने आयात करा', @@ -2208,14 +2535,18 @@ $1', 'import-interwiki-text' => 'आयात करण्याकरिता एक विकि आणि पानाचा मथळा निवडा. आवर्तनांच्या तारखा आणि संपादकांची नावे जतन केली जातील. सर्व आंतरविकि आयात क्रिया [[Special:Log/import|आयात नोंदीत]] दाखल केल्या आहेत.', +'import-interwiki-source' => 'स्रोत विकी / पान:', 'import-interwiki-history' => 'या पानाकरिताची सार्‍या इतिहास आवर्तनांची नक्कल करा', +'import-interwiki-templates' => 'साचे आंतरभूत करा', 'import-interwiki-submit' => 'आयात', 'import-interwiki-namespace' => 'पाने नामविश्वात स्थानांतरीत करा:', +'import-upload-filename' => 'संचिकानाव:', 'import-comment' => 'प्रतिक्रीया:', -'importtext' => 'कृपया Special:Export सुविधा वापरून स्रोत विकिकडून संचिका निर्यात करा,ती तुमच्या तबकडीवर जतन करा आणि येथे चढवा.', +'importtext' => 'कृपया [[Special:Export|निर्यात सुविधा]] वापरून स्रोत विकिकडून संचिका निर्यात करा,ती तुमच्या तबकडीवर जतन करा आणि येथे चढवा.', 'importstart' => 'पाने आयात करत आहे...', 'import-revision-count' => '$1 {{PLURAL:$1|आवर्तन|आवर्तने}}', 'importnopages' => 'आयातीकरिता पाने नाहीत.', +'imported-log-entries' => '{{PLURAL:$1|आयात केलेली|आयात केलेल्या}} $1 {{PLURAL:$1|यादी प्रविष्टी|यादी प्रविष्ट्या}}.', 'importfailed' => 'अयशस्वी आयात: $1', 'importunknownsource' => 'आयात स्रोत प्रकार अज्ञात', 'importcantopen' => 'आयातीत संचिका उघडणे जमले नाही', @@ -2233,6 +2564,8 @@ $1', 'import-nonewrevisions' => 'सारी आवर्तने पूर्वी आयात केली होती.', 'xml-error-string' => '$1 ओळ $2मध्ये , स्तंभ $3 (बाईट $4): $5', 'import-upload' => 'XML डाटा चढवा', +'import-token-mismatch' => 'अधिवेशन माहितीची हानी. +कृपया पुन्हा प्रयत्न करा.', # Import log 'importlogpage' => 'ईम्पोर्ट सूची', @@ -2259,6 +2592,7 @@ $1', 'tooltip-ca-viewsource' => 'हे पान सुरक्षित आहे. तुम्ही याचा स्रोत पाहू शकता.', 'tooltip-ca-history' => 'या पानाच्या जुन्या आवृत्या.', 'tooltip-ca-protect' => 'हे पान सुरक्षित करा', +'tooltip-ca-unprotect' => 'पृष्ठ असुरक्षित करा', 'tooltip-ca-delete' => 'हे पान वगळा', 'tooltip-ca-undelete' => 'या पानाची वगळण्यापूर्वी केलेली संपादने पुनर्स्थापित करा', 'tooltip-ca-move' => 'हे पान स्थानांतरित करा.', @@ -2306,6 +2640,8 @@ $1', 'tooltip-rollback' => '"द्रूतमाघार" शेवटच्या सदस्याने या पानात केलेली संपादने एका झटक्यात उलटविते.', 'tooltip-undo' => '"रद्द करा" हे संपादन उलटविते व संपादन खिडकी उघडते. त्यामुळे तुम्ही बदलांचा आढावा देऊ शकता.', +'tooltip-preferences-save' => 'माझ्या पसंती जतन करा', +'tooltip-summary' => 'लहान सारांश लिहा', # Metadata 'nodublincore' => 'या विदादात्याकरिता Dublin Core RDF metadata अनुपलब्ध केला आहे.', @@ -2313,12 +2649,14 @@ $1', 'notacceptable' => 'विकि विदादाता तुमचा घेता वाचू शकेल अशा स्वरूपात(संरचनेत) विदा पुरवू शकत नाही.', # Attribution -'anonymous' => '{{SITENAME}} वरील अनामिक सदस्य', +'anonymous' => '{{SITENAME}} वरील अनामिक {{PLURAL:$1|सदस्य|सदस्य}}', 'siteuser' => 'मराठी विकिपीडियाचा सदस्य $1', +'anonuser' => '{{SITENAME}} वरील अनामी सदस्य $1', 'lastmodifiedatby' => 'या पानातील शेवटचा बदल $3ने $2, $1 यावेळी केला.', 'othercontribs' => '$1 ने केलेल्या कामानुसार.', 'others' => 'इतर', -'siteusers' => '{{SITENAME}} सदस्य $1', +'siteusers' => '{{SITENAME}} {{PLURAL:$2|सदस्य|सदस्य}} $1', +'anonusers' => '{{SITENAME}} वरील अनामी {{PLURAL:$2|सदस्य|सदस्य}} $1', 'creditspage' => 'पान श्रेय नामावली', 'nocredits' => 'या पानाकरिता श्रेय नामावलीची माहिती नाही.', @@ -2364,7 +2702,7 @@ $1', 'math_unknown_function' => 'अज्ञात कार्य', 'math_lexing_error' => 'लेक्झींग(कोशीय?)त्रूटी', 'math_syntax_error' => 'आज्ञावली-विन्यास त्रूटी', -'math_image_error' => 'PNG पालट अयशस्वी; latex, dvips, gs ची स्थापना योग्य झाली आहे काय ते तपासा आणि बदल करा', +'math_image_error' => 'पीएनजी रुपांतर अयशस्वी; लॅटेक्स, डीव्हीप्स, जीएसची स्थापना योग्य झाली आहे काय ते तपासा आणि बदल करा', 'math_bad_tmpdir' => '"गणितीय तूर्त धारिके"(math temp directory)ची निर्मीती करू शकत नाही अथवा "मॅथ तूर्त धारिकेत" लिहू शकत नाही .', 'math_bad_output' => 'गणितीय प्राप्त धारिकेची( math output directory) निर्मीती अथवा त्यात लेखन करू शकत नाही.', 'math_notexvc' => 'texvcकरणी(texvc एक्झिक्यूटेबल)चूकमुकली आहे;कृपया,सज्जीत करण्याकरिता math/README पहा.', @@ -2373,7 +2711,7 @@ $1', 'markaspatrolleddiff' => 'टेहळणी केल्याची खूण करा', 'markaspatrolledtext' => 'या पानावर गस्त झाल्याची खूण करा', 'markedaspatrolled' => 'गस्त केल्याची खूण केली', -'markedaspatrolledtext' => 'निवडलेले आवर्तनास गस्त घातल्याची खूण केली.', +'markedaspatrolledtext' => 'निवडलेल्या [[:$1]]च्या आवर्तनास गस्त घातल्याची खूण केली.', 'rcpatroldisabled' => 'अलिकडील बदलची गस्ती अनुपलब्ध', 'rcpatroldisabledtext' => 'सध्या ’अलिकडील बदल’ ची गस्त सुविधा अनुपलब्ध केली आहे.', 'markedaspatrollederror' => 'गस्तीची खूण करता येत नाही', @@ -2384,6 +2722,7 @@ $1', 'patrol-log-page' => 'टेहळणीतील नोंदी', 'patrol-log-line' => '$2चे $1 $3 गस्त घातल्याची खूण केली', 'patrol-log-auto' => '(स्वयंचलीत)', +'patrol-log-diff' => 'आवर्तन $1', # Image deletion 'deletedrevision' => 'जुनी आवृत्ती ($1) वगळली.', @@ -2401,21 +2740,26 @@ $1', 'nextdiff' => 'पुढील संपादन →', # Media information -'mediawarning' => "'''सावधान''': या संचिकेत डंखी संकेत असू शकतो,जो वापरल्याने तुमच्या संगणक प्रणालीस नाजूक परिस्थितीस सामोरे जावे लागू शकते.", +'mediawarning' => "'''सावधान''': या संचिकेत डंखी संकेत असू शकतो, जो वापरल्याने तुमच्या संचालन प्रणालीस नाजूक परिस्थितीस सामोरे जावे लागू शकते.", 'imagemaxsize' => 'संचिका वर्णन पानांवरील चित्रांना मर्यादा घाला:', 'thumbsize' => 'इवलासा आकार:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|पान|पाने}}', -'file-info' => '(संचिकेचा आकार:$1,विविधामाप(माईम)प्रकार: $2)', -'file-info-size' => '($1 × $2 pixel, संचिकेचा आकार: $3, MIME प्रकार: $4)', +'file-info' => 'संचिकेचा आकार:$1,विविधामापमाईमप्रकार: $2', +'file-info-size' => '$1 × $2 pixel, संचिकेचा आकार: $3, MIME प्रकार: $4', 'file-nohires' => 'यापेक्षा जास्त मोठे चित्र उपलब्ध नाही.', -'svg-long-desc' => '(SVG संचिका, साधारणपणे $1 × $2 pixels, संचिकेचा आकार: $3)', +'svg-long-desc' => 'SVG संचिका, साधारणपणे $1 × $2 pixels, संचिकेचा आकार: $3', 'show-big-image' => 'संपूर्ण रिजोल्यूशन', -'show-big-image-thumb' => 'या झलकेचा आकार: $1 × $2 pixels', +'show-big-image-thumb' => 'या झलकेचा आकार: $1 × $2 पिक्सेल', +'file-info-gif-frames' => '$1 {{PLURAL:$1|चौकट|चौकटी}}', +'file-info-png-repeat' => '$1 {{PLURAL:$1|वेळा दाखवले|वेळा दाखवले}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|चौकट|चौकटी}}', # Special:NewFiles 'newimages' => 'नवीन संचिकांची यादी', 'imagelisttext' => "खाली '''$1''' संचिका {{PLURAL:$1|दिली आहे.|$2 क्रमाने दिल्या आहेत.}}", -'newimages-summary' => 'हे विशेष पान शेवटी चढविलेल्या संचिका दर्शविते', +'newimages-summary' => 'हे विशेष पान शेवटी चढविलेल्या संचिका दर्शविते.', +'newimages-legend' => 'गाळक', +'newimages-label' => 'संचिकानाम (किंवा त्याचा भाग):', 'showhidebots' => '(सांगकामे $1)', 'noimages' => 'बघण्यासारखे येथे काही नाही.', 'ilsubmit' => 'शोधा', @@ -2496,8 +2840,8 @@ $1', 'exif-isospeedratings' => 'आंतरराष्ट्रीय मानक संस्थेचे वेग मुल्यमापन', 'exif-oecf' => 'दृक्वैद्यूतसंचरण परिवर्तन कारक (ऑप्टोईलेक्ट्रॉनिक कन्व्हर्शन फॅक्टर)', 'exif-shutterspeedvalue' => 'शटर वेग', -'exif-aperturevalue' => 'रन्ध्र (ऍपर्चर)', -'exif-brightnessvalue' => 'झळाळी (ब्राईटपणा)', +'exif-aperturevalue' => 'रन्ध्र', +'exif-brightnessvalue' => 'झळाळी', 'exif-exposurebiasvalue' => 'प्रभावन अभिनत (एक्सपोजर बायस)', 'exif-maxaperturevalue' => 'महत्तम जमिनी रन्ध्र(लॅंड ऍपर्चर)', 'exif-subjectdistance' => 'गोष्टीपासूनचे अंतर', @@ -2561,6 +2905,7 @@ $1', 'exif-gpsareainformation' => 'GPS विभागाचे नाव', 'exif-gpsdatestamp' => 'GPSतारीख', 'exif-gpsdifferential' => 'GPS डिफरेंशीअल सुधारणा', +'exif-objectname' => 'लघुशीर्षक', # EXIF attributes 'exif-compression-1' => 'अनाकुंचीत', @@ -2620,6 +2965,9 @@ $1', 'exif-lightsource-24' => 'ISO स्टूडीयो टंगस्टन', 'exif-lightsource-255' => 'इतर प्रकाश स्रोत', +# Flash modes +'exif-flash-mode-3' => 'स्वयंचलित स्थिती', + 'exif-focalplaneresolutionunit-2' => 'इंच', 'exif-sensingmethod-1' => 'अव्यक्त', @@ -2703,6 +3051,7 @@ $1', 'watchlistall2' => 'सर्व', 'namespacesall' => 'सर्व', 'monthsall' => 'सर्व', +'limitall' => 'सर्व', # E-mail address confirmation 'confirmemail' => 'इमेल पत्ता पडताळून पहा', @@ -2713,9 +3062,9 @@ $1', 'confirmemail_sent' => 'शाबितीकरण विपत्र पाठवले.', 'confirmemail_oncreate' => 'तुमच्या विपत्र पत्त्यावर निश्चितीकरण कुटसंकेत पाठवला होता . हा कुटसंकेत तुम्हाला खात्यात दाखल होण्याकरिता लागणार नाही,पण तुम्हाला तो कोणतीही विपत्रावर अवलंबून कोणतीही सुविधा उपलब्ध करून घेण्यापूर्वी द्यावा लागेल.', -'confirmemail_sendfailed' => 'पोच-विपत्र पाठवू शकलो नाही.अयोग्य चिन्हांकरिता पत्ता तपासा. +'confirmemail_sendfailed' => 'पोच-विपत्र पाठवू शकलो नाही. अयोग्य चिन्हांकरिता पत्ता तपासा. -मेलर वापसी: $1', +मेलर परत आले: $1', 'confirmemail_invalid' => 'अयोग्य निश्चितीकरण नियमावली.नियमावली काल समाप्त झाला असु शकेल.', 'confirmemail_needlogin' => 'तुमचा विपत्रपत्ता शाबीत करण्यासाठी तुम्ही $1 करावयास हवे.', 'confirmemail_success' => 'तुमचा विपत्रपत्ता शाबीत झाला आहे.तुम्ही आता दाखल होऊ शकता आणि विकिचा आनंद घेऊ शकता.', @@ -2739,7 +3088,7 @@ $5 # Scary transclusion 'scarytranscludedisabled' => '[आंतरविकि आंतरन्यास अनुपलब्ध केले आहे]', 'scarytranscludefailed' => '[क्षमस्व;$1करिताची साचा ओढी फसली]', -'scarytranscludetoolong' => '[URL खूप लांब आहे; क्षमस्व]', +'scarytranscludetoolong' => '[आंतरजालपत्ता खूप लांब आहे]', # Trackbacks 'trackbackbox' => 'या पानाकरिता मागेवळून पहा:
    @@ -2749,7 +3098,7 @@ $1', 'trackbackdeleteok' => 'पाठलाग यशस्वीपणे वगळला.', # Delete conflict -'deletedwhileediting' => 'सूचना: तुम्ही संपादन सुरू केल्यानंतर हे पान वगळले गेले आहे.', +'deletedwhileediting' => '”’सूचना:”’ तुम्ही संपादन सुरू केल्यानंतर हे पान वगळले गेले आहे.', 'confirmrecreate' => "तुम्ही संपादन सुरू केल्यानंतर सदस्य [[User:$1|$1]] ([[User talk:$1|चर्चा]])ने हे पान पुढील कारणाने वगळले: : ''$2'' कृपया हे पान खरेच पुन्हा निर्मीत करून हवे आहे का हे निश्चित करा.", @@ -2773,6 +3122,7 @@ $1', 'table_pager_first' => 'पहिले पान', 'table_pager_last' => 'शेवटचे पान', 'table_pager_limit' => 'एका पानावर $1 नग दाखवा', +'table_pager_limit_label' => 'निकाल प्रतिपान:', 'table_pager_limit_submit' => 'चला', 'table_pager_empty' => 'निकाल नाहीत', @@ -2789,8 +3139,8 @@ $1', 'livepreview-error' => 'संपर्कात अयशस्वी: $1 "$2".नेहमीची झलक पहा.', # Friendlier slave lag warnings -'lag-warn-normal' => '$1 सेकंदाच्या आतले बदल या यादी नसण्याची शक्यता आहे.', -'lag-warn-high' => 'विदा विदादात्यास लागणार्‍या अत्यूच्च कालावधी मूळे, $1 सेकंदापेक्षा नवे बदल या सूचीत न दाखवले जाण्याची शक्यता आहे.', +'lag-warn-normal' => '$1 {{PLURAL:$1|सेकंदाच्या|सेकंदांच्या}} आतले बदल या यादी नसण्याची शक्यता आहे.', +'lag-warn-high' => 'विदा विदादात्यास लागणार्‍या अत्युच्च कालावधी मुळे, $1 {{PLURAL:$1|सेकंदापेक्षा|सेकंदांपेक्षा}} नवे बदल या सूचीत न दाखवले जाण्याची शक्यता आहे.', # Watchlist editor 'watchlistedit-numitems' => 'चर्चा पाने सोडून, {{PLURAL:$1|1 शीर्षक पान|$1 शीर्षक पाने}} तुमच्या पहार्‍याच्या सूचीत आहेत.', @@ -2825,6 +3175,7 @@ $1', 'version-specialpages' => 'विशेष पाने', 'version-parserhooks' => 'पृथकक अंकुश', 'version-variables' => 'चल', +'version-skins' => 'त्वचा', 'version-other' => 'इतर', 'version-mediahandlers' => 'मिडिया हॅंडलर', 'version-hooks' => 'अंकुश', @@ -2836,14 +3187,16 @@ $1', 'version-hook-subscribedby' => 'वर्गणीदार', 'version-version' => '(आवृत्ती $1)', 'version-license' => 'परवाना', +'version-poweredby-credits' => "हा विकी '''[http://www.mediawiki.org/ मीडियाविकी]'''द्वारे संचालित आहे, प्रताधिकारित © २००१-$1 $2.", +'version-poweredby-others' => 'इतर', 'version-software' => 'स्थापित संगणक प्रणाली (Installed software)', 'version-software-product' => 'उत्पादन', -'version-software-version' => 'आवृत्ती(Version)', +'version-software-version' => 'आवृत्ती', # Special:FilePath 'filepath' => 'संचिका मार्ग', 'filepath-page' => 'संचिका:', -'filepath-submit' => 'मार्ग', +'filepath-submit' => 'चला', 'filepath-summary' => 'हे विशेष पान संचिकेचा संपूर्ण मार्ग कळवते. चित्रे संपूर्ण रिझोल्यूशन मध्ये दाखवली आहेत,इतर संचिका प्रकार त्यांच्या संबधीत प्रोग्रामने प्रत्यक्ष सुरू होतात. @@ -2879,12 +3232,48 @@ $1', 'specialpages-group-redirects' => 'पुनर्निर्देशन करणारी विशेष पृष्ठे', 'specialpages-group-spam' => 'उत्पात साधने', +# Special:BlankPage +'blankpage' => 'रिकामे पान', +'intentionallyblankpage' => 'हे पान मुद्दाम कोरे सोडण्यात आले आहे.', + +# Special:Tags +'tag-filter' => '[[Special:Tags|खूण]] गाळक:', +'tag-filter-submit' => 'गाळक', +'tags-title' => 'खुणा', +'tags-tag' => 'खूण नाव', +'tags-description-header' => 'अर्थाची पूर्ण माहिती', +'tags-hitcount-header' => 'खुणा केलेले बदल', +'tags-edit' => 'संपादन करा', +'tags-hitcount' => '$1 {{PLURAL:$1|बदल|बदल}}', + +# Special:ComparePages +'comparepages' => 'पानांची तुलना करा', +'compare-selector' => 'पानांच्या आवर्तनांची तुलना करा', +'compare-page1' => 'पान १', +'compare-page2' => 'पान २', +'compare-rev1' => 'आवर्तन १', +'compare-rev2' => 'आवर्तन २', +'compare-submit' => 'तुलना करा', + # Database error messages -'dberr-usegoogle' => 'तोपर्यंत गूगलवर शोधून पहा', +'dberr-header' => 'या विकीत एक चूक आहे', +'dberr-problems' => 'माफ करा, हे संकेतस्थळ सध्या तांत्रिक अडचणींना सामोरे जात आहे.', +'dberr-again' => 'थोडा वेळ थांबून पुन्हा पहा.', +'dberr-usegoogle' => 'तोपर्यंत गूगलवर शोधून पहा', +'dberr-cachederror' => 'ही मागवलेल्या पानाची सयीतील प्रत आहे, ती अद्ययावत नसण्याची शक्यता आहे.', # HTML forms -'htmlform-invalid-input' => 'तुम्ही दिलेल्या माहितीत काहीतरी गडबड आहे', -'htmlform-int-toolow' => '$1 किंवा मोठा आकडा द्या.', -'htmlform-int-toohigh' => '$1 किंवा त्याहून छोटा आकडा द्या.', +'htmlform-invalid-input' => 'तुम्ही दिलेल्या माहितीत काहीतरी गडबड आहे', +'htmlform-float-invalid' => 'तुम्ही दिलेली किंमत आकडा नाही.', +'htmlform-int-toolow' => '$1 किंवा मोठा आकडा द्या.', +'htmlform-int-toohigh' => '$1 किंवा त्याहून छोटा आकडा द्या.', +'htmlform-required' => 'ही किंमत आवश्यक आहे', +'htmlform-submit' => 'पाठवा', +'htmlform-reset' => 'बदल उलटवा', +'htmlform-selectorother-other' => 'इतर', + +# SQLite database support +'sqlite-has-fts' => 'पूर्ण-मजकूर शोध समर्थनासहित $1', +'sqlite-no-fts' => 'पूर्ण-मजकूर शोध समर्थनाविरहित $1', ); diff --git a/languages/messages/MessagesMrj.php b/languages/messages/MessagesMrj.php index 9ba6f954..980199a3 100644 --- a/languages/messages/MessagesMrj.php +++ b/languages/messages/MessagesMrj.php @@ -8,6 +8,7 @@ * @file * * @author Amdf + * @author Andrijko Z. */ $fallback = 'ru'; @@ -17,18 +18,27 @@ $namespaceNames = array( NS_SPECIAL => 'Спецӹлӹштӓш', NS_TALK => 'Кӓнгӓшӹмӓш', NS_USER => 'Сирӹшӹ', - NS_USER_TALK => 'Сирӹшӹн кӓнгӓшӹмӓшӹжӹ', - NS_PROJECT_TALK => '$1 кӓнгӓшӹмӓш', + NS_USER_TALK => 'Сирӹшӹм_кӓнгӓшӹмӓш', + NS_PROJECT_TALK => '$1_кӓнгӓшӹмӓш', NS_FILE => 'Файл', - NS_FILE_TALK => 'Файл кӓнгӓшӹмӓш', + NS_FILE_TALK => 'Файлым_кӓнгӓшӹмӓш', NS_MEDIAWIKI => 'MediaWiki', - NS_MEDIAWIKI_TALK => 'MediaWiki кӓнгӓшӹмӓш', + NS_MEDIAWIKI_TALK => 'MediaWiki-м_кӓнгӓшӹмӓш', NS_TEMPLATE => 'Шаблон', - NS_TEMPLATE_TALK => 'Шаблон кӓнгӓшӹмӓш', + NS_TEMPLATE_TALK => 'Шаблоным_кӓнгӓшӹмӓш', NS_HELP => 'Палшык', - NS_HELP_TALK => 'Палшыкын кӓнгӓшӹмӓш', + NS_HELP_TALK => 'Палшыкым_кӓнгӓшӹмӓш', NS_CATEGORY => 'Категори', - NS_CATEGORY_TALK => 'Категори кӓнгӓшӹмӓш', + NS_CATEGORY_TALK => 'Категорим_кӓнгӓшӹмӓш', +); + +$namespaceAliases = array( + 'Сирӹшӹн_кӓнгӓшӹмӓшӹжӹ' => NS_USER_TALK, + 'Файл_кӓнгӓшӹмӓш' => NS_FILE_TALK, + 'MediaWiki_кӓнгӓшӹмӓш' => NS_MEDIAWIKI_TALK, + 'Шаблон_кӓнгӓшӹмӓш' => NS_TEMPLATE_TALK, + 'Палшыкын_кӓнгӓшӹмӓш' => NS_HELP_TALK, + 'Категори_кӓнгӓшӹмӓш' => NS_CATEGORY_TALK, ); $messages = array( @@ -47,8 +57,7 @@ $messages = array( 'tog-editsection' => '«Тӧрлӓш» ажедмӓшӹм м цилӓ секцилӓнок анжыкташ', 'tog-editsectiononrightclick' => 'Секцим тӧрлӹмӹ годым артикль лӹмӹм каля доно вургымлашты темдӓлӓш (JavaScript)', 'tog-showtoc' => 'Кӧргӹштӹш лӹмвлӓм анжыкташ (3 гӹц шукырак артикль лӹмӓн ӹлӹштӓшвлӓштӹ)', -'tog-rememberpassword' => 'Мӹньӹн шотыш нäлмӹ сирмäшем ти компьютерӹштӹ äштäш', -'tog-editwidth' => 'Тöрлӹмӹ паштек цилä экран кымдык', +'tog-rememberpassword' => 'Мӹньӹн шотыш нӓлмӹ сирмӓшем ти компьютерӹштӹ ӓштӓш (максимум $1 {{PLURAL:$1|кечы|кечы}})', 'tog-watchcreations' => 'Мӹньӹн ӹштӹмӹ ӹлӹштӓшвлӓэм вӓнгӹмӹ списокыш пырташ', 'tog-watchdefault' => 'Мӹньӹн вашталтымы ӹлӹштӓшвлӓэм вӓнгӹмӹ списокыш пырташ', 'tog-watchmoves' => 'Мӹньӹн лӹмӹм вашталтымы ӹлӹштӓшвлӓэм вӓнгӹмӹ списокыш пырташ', @@ -259,7 +268,7 @@ $messages = array( # Login and logout pages 'yourname' => 'Сирӹшӹн лӹмжӹ:', 'yourpassword' => 'Пароль:', -'remembermypassword' => 'Ти компьютерӹштӹ мӹньӹн учетный сирмӓшем ӓштӓш', +'remembermypassword' => 'Ти компьютерӹштӹ мӹньӹн учетный сирмӓшем ӓштӓш (максимум $1 {{PLURAL:$1|кечы|кечы}})', 'login' => 'Системыш сирӓлтдӓ', 'nav-login-createaccount' => 'Коргӹшкӹ сирӓлтдӓ/регистрируялтда', 'userlogin' => 'Кӧргӹшкӹ сирӓлтдӓ ӓль регистрируялтда', @@ -487,7 +496,6 @@ $messages = array( # Watchlist 'watchlist' => 'Вӓнгӹмӹ список', 'mywatchlist' => 'Вӓнгӹмӹ сирмӓш, список', -'watchlistfor' => "(сирӹшӹн '''$1''')", 'addedwatch' => 'Вӓнгӹмӓш списокыш пыртымы', 'addedwatchtext' => 'Ӹлӹштӓшӹм«[[:$1]]» тӓмдӓн вӓнгӹмӹ [[Special:Watchlist|ӹлӹштӓшӹшкӹдӓ пыртымы]]. Тидӹ паштек ӹштӹмӹ ӹлӹштӓшӹн вашталтымашвлӓ ти списокышты анжыктымы дӓ тенгеок кӹжгӹ буквавлӓ доно у вашталтымашвлӓн списокышты пӓлдӹртӹмӹ лиэш[[Special:RecentChanges| пӓлдӹртӹмӹ лит]] нӹнӹм айыраш куштылгырак лижӹ манын.', 'removedwatch' => 'Вӓнгӹмӹ список гӹц карангдымы', @@ -684,9 +692,9 @@ $messages = array( 'nextdiff' => 'Вес тӧрлӹмӓш →', # Media information -'file-info-size' => '($1 × $2 пиксел, файлын размержӹ: $3, MIME-тип: $4)', +'file-info-size' => '$1 × $2 пиксел, файлын размержӹ: $3, MIME-тип: $4', 'file-nohires' => 'Кого разрешени доно верси уке.', -'svg-long-desc' => '(SVG-файл, номинально $1 × $2 пиксель, файлын размержӹ: $3)', +'svg-long-desc' => 'SVG-файл, номинально $1 × $2 пиксель, файлын размержӹ: $3', 'show-big-image' => 'Кӱкшӹрӓк разрешениӓн изображени', 'show-big-image-thumb' => 'Размер анзыц анжымы годым: $1 × $2 пиксель', diff --git a/languages/messages/MessagesMs.php b/languages/messages/MessagesMs.php index 3bda87fa..6f741d54 100644 --- a/languages/messages/MessagesMs.php +++ b/languages/messages/MessagesMs.php @@ -12,6 +12,7 @@ * @author Aviator * @author CoolCityCat * @author Diagramma Della Verita + * @author Hydra * @author Izzudin * @author Kurniasan * @author Meno25 @@ -67,90 +68,92 @@ $namespaceAliases = array( $specialPageAliases = array( - 'DoubleRedirects' => array( 'Lencongan berganda', 'Pelencongan berganda' ), - 'BrokenRedirects' => array( 'Lencongan rosak', 'Pelencongan rosak' ), + 'DoubleRedirects' => array( 'Lencongan_berganda', 'Pelencongan_berganda' ), + 'BrokenRedirects' => array( 'Lencongan_rosak', 'Pelencongan_rosak' ), 'Disambiguations' => array( 'Penyahtaksaan' ), - 'Userlogin' => array( 'Log masuk' ), - 'Userlogout' => array( 'Log keluar' ), - 'CreateAccount' => array( 'Buka akaun' ), + 'Userlogin' => array( 'Log_masuk' ), + 'Userlogout' => array( 'Log_keluar' ), + 'CreateAccount' => array( 'Buka_akaun' ), 'Preferences' => array( 'Keutamaan' ), - 'Watchlist' => array( 'Senarai pantau' ), - 'Recentchanges' => array( 'Perubahan terkini' ), - 'Upload' => array( 'Muat naik' ), - 'Listfiles' => array( 'Senarai imej' ), - 'Newimages' => array( 'Imej baru' ), - 'Listusers' => array( 'Senarai pengguna' ), - 'Listgrouprights' => array( 'Senarai hak kumpulan' ), + 'Watchlist' => array( 'Senarai_pantau' ), + 'Recentchanges' => array( 'Perubahan_terkini' ), + 'Upload' => array( 'Muat_naik' ), + 'Listfiles' => array( 'Senarai_imej' ), + 'Newimages' => array( 'Imej_baru' ), + 'Listusers' => array( 'Senarai_pengguna' ), + 'Listgrouprights' => array( 'Senarai_hak_kumpulan' ), 'Statistics' => array( 'Statistik' ), - 'Randompage' => array( 'Laman rawak' ), - 'Lonelypages' => array( 'Laman yatim' ), - 'Uncategorizedpages' => array( 'Laman tanpa kategori' ), - 'Uncategorizedcategories' => array( 'Kategori tanpa kategori' ), - 'Uncategorizedimages' => array( 'Imej tanpa kategori' ), - 'Uncategorizedtemplates' => array( 'Templat tanpa kategori' ), - 'Unusedcategories' => array( 'Kategori tak digunakan' ), - 'Unusedimages' => array( 'Imej tak digunakan' ), - 'Wantedpages' => array( 'Laman dikehendaki' ), - 'Wantedcategories' => array( 'Kategori dikehendaki' ), - 'Wantedfiles' => array( 'Fail dikehendaki' ), - 'Wantedtemplates' => array( 'Templat dikehendaki' ), - 'Mostlinked' => array( 'Laman dipaut terbanyak' ), - 'Mostlinkedcategories' => array( 'Kategori dipaut terbanyak' ), - 'Mostlinkedtemplates' => array( 'Templat dipaut terbanyak' ), - 'Mostimages' => array( 'Imej terbanyak' ), - 'Mostcategories' => array( 'Kategori terbanyak' ), - 'Mostrevisions' => array( 'Semakan terbanyak' ), - 'Fewestrevisions' => array( 'Semakan tersikit' ), - 'Shortpages' => array( 'Laman pendek' ), - 'Longpages' => array( 'Laman panjang' ), - 'Newpages' => array( 'Laman baru' ), - 'Ancientpages' => array( 'Laman lapuk' ), - 'Deadendpages' => array( 'Laman buntu' ), - 'Protectedpages' => array( 'Laman dilindungi' ), - 'Protectedtitles' => array( 'Tajuk dilindungi' ), - 'Allpages' => array( 'Semua laman' ), - 'Prefixindex' => array( 'Indeks awalan' ), - 'Ipblocklist' => array( 'Sekatan IP' ), - 'Specialpages' => array( 'Laman khas' ), + 'Randompage' => array( 'Laman_rawak' ), + 'Lonelypages' => array( 'Laman_yatim' ), + 'Uncategorizedpages' => array( 'Laman_tanpa_kategori' ), + 'Uncategorizedcategories' => array( 'Kategori_tanpa_kategori' ), + 'Uncategorizedimages' => array( 'Imej_tanpa_kategori' ), + 'Uncategorizedtemplates' => array( 'Templat_tanpa_kategori' ), + 'Unusedcategories' => array( 'Kategori_tak_digunakan' ), + 'Unusedimages' => array( 'Imej_tak_digunakan' ), + 'Wantedpages' => array( 'Laman_dikehendaki' ), + 'Wantedcategories' => array( 'Kategori_dikehendaki' ), + 'Wantedfiles' => array( 'Fail_dikehendaki' ), + 'Wantedtemplates' => array( 'Templat_dikehendaki' ), + 'Mostlinked' => array( 'Laman_dipaut_terbanyak' ), + 'Mostlinkedcategories' => array( 'Kategori_dipaut_terbanyak' ), + 'Mostlinkedtemplates' => array( 'Templat_dipaut_terbanyak' ), + 'Mostimages' => array( 'Imej_terbanyak' ), + 'Mostcategories' => array( 'Kategori_terbanyak' ), + 'Mostrevisions' => array( 'Semakan_terbanyak' ), + 'Fewestrevisions' => array( 'Semakan_tersikit' ), + 'Shortpages' => array( 'Laman_pendek' ), + 'Longpages' => array( 'Laman_panjang' ), + 'Newpages' => array( 'Laman_baru' ), + 'Ancientpages' => array( 'Laman_lapuk' ), + 'Deadendpages' => array( 'Laman_buntu' ), + 'Protectedpages' => array( 'Laman_dilindungi' ), + 'Protectedtitles' => array( 'Tajuk_dilindungi' ), + 'Allpages' => array( 'Semua_laman' ), + 'Prefixindex' => array( 'Indeks_awalan' ), + 'Ipblocklist' => array( 'Sekatan_IP' ), + 'Specialpages' => array( 'Laman_khas' ), 'Contributions' => array( 'Sumbangan' ), - 'Emailuser' => array( 'E-mel pengguna' ), - 'Confirmemail' => array( 'Sahkan e-mel' ), - 'Whatlinkshere' => array( 'Pautan ke' ), - 'Recentchangeslinked' => array( 'Perubahan berkaitan' ), - 'Movepage' => array( 'Pindah laman' ), - 'Blockme' => array( 'Sekat saya' ), - 'Booksources' => array( 'Sumber buku' ), + 'Emailuser' => array( 'E-mel_pengguna' ), + 'Confirmemail' => array( 'Sahkan_e-mel' ), + 'Whatlinkshere' => array( 'Pautan_ke' ), + 'Recentchangeslinked' => array( 'Perubahan_berkaitan' ), + 'Movepage' => array( 'Pindah_laman' ), + 'Blockme' => array( 'Sekat_saya' ), + 'Booksources' => array( 'Sumber_buku' ), 'Categories' => array( 'Kategori' ), 'Export' => array( 'Eksport' ), 'Version' => array( 'Versi' ), - 'Allmessages' => array( 'Semua pesanan', 'Semua mesej' ), - 'Blockip' => array( 'Sekat IP' ), + 'Allmessages' => array( 'Semua_pesanan', 'Semua_mesej' ), + 'Blockip' => array( 'Sekat_IP' ), 'Undelete' => array( 'Nyahhapus' ), - 'Lockdb' => array( 'Kunci pangkalan data' ), - 'Unlockdb' => array( 'Buka kunci pangkalan data' ), - 'Userrights' => array( 'Hak pengguna' ), - 'MIMEsearch' => array( 'Gelintar MIME' ), - 'FileDuplicateSearch' => array( 'Cari fail berganda' ), - 'Unwatchedpages' => array( 'Laman tak dipantau' ), - 'Listredirects' => array( 'Senarai lencongan', 'Senarai pelencongan' ), - 'Revisiondelete' => array( 'Hapus semakan' ), - 'Unusedtemplates' => array( 'Templat tak digunakan' ), - 'Randomredirect' => array( 'Lencongan rawak', 'Pelencongan rawak' ), - 'Mypage' => array( 'Laman saya' ), - 'Mytalk' => array( 'Perbincangan saya' ), - 'Mycontributions' => array( 'Sumbangan saya' ), - 'Listadmins' => array( 'Senarai pentadbir' ), - 'Listbots' => array( 'Senarai bot' ), - 'Popularpages' => array( 'Laman popular' ), + 'Lockdb' => array( 'Kunci_pangkalan_data' ), + 'Unlockdb' => array( 'Buka_kunci_pangkalan_data' ), + 'Userrights' => array( 'Hak_pengguna' ), + 'MIMEsearch' => array( 'Gelintar_MIME' ), + 'FileDuplicateSearch' => array( 'Cari_fail_berganda' ), + 'Unwatchedpages' => array( 'Laman_tak_dipantau' ), + 'Listredirects' => array( 'Senarai_lencongan', 'Senarai_pelencongan' ), + 'Revisiondelete' => array( 'Hapus_semakan' ), + 'Unusedtemplates' => array( 'Templat_tak_digunakan' ), + 'Randomredirect' => array( 'Lencongan_rawak', 'Pelencongan_rawak' ), + 'Mypage' => array( 'Laman_saya' ), + 'Mytalk' => array( 'Perbincangan_saya' ), + 'Mycontributions' => array( 'Sumbangan_saya' ), + 'Listadmins' => array( 'Senarai_pentadbir' ), + 'Listbots' => array( 'Senarai_bot' ), + 'Popularpages' => array( 'Laman_popular' ), 'Search' => array( 'Gelintar' ), - 'Resetpass' => array( 'Lupa kata laluan' ), - 'Withoutinterwiki' => array( 'Laman tanpa pautan bahasa' ), - 'MergeHistory' => array( 'Gabung sejarah' ), - 'Filepath' => array( 'Laluan fail' ), - 'Invalidateemail' => array( 'Batalkan pengesahan e-mel' ), - 'Blankpage' => array( 'Laman kosong' ), - 'LinkSearch' => array( 'Cari pautan' ), - 'DeletedContributions' => array( 'Sumbangan dihapuskan' ), + 'Resetpass' => array( 'Lupa_kata_laluan' ), + 'Withoutinterwiki' => array( 'Laman_tanpa_pautan_bahasa' ), + 'MergeHistory' => array( 'Gabung_sejarah' ), + 'Filepath' => array( 'Laluan_fail' ), + 'Invalidateemail' => array( 'Batalkan_pengesahan_e-mel' ), + 'Blankpage' => array( 'Laman_kosong' ), + 'LinkSearch' => array( 'Cari_pautan' ), + 'DeletedContributions' => array( 'Sumbangan_dihapuskan' ), + 'Tags' => array( 'Label' ), + 'Activeusers' => array( 'Pengguna_aktif' ), ); $messages = array( @@ -169,8 +172,7 @@ $messages = array( 'tog-editsection' => 'Bolehkan penyuntingan bahagian melalui pautan [sunting]', 'tog-editsectiononrightclick' => 'Bolehkan penyuntingan bahagian dengan mengklik kanan pada tajuk bahagian (JavaScript)', 'tog-showtoc' => 'Tunjukkan isi kandungan (bagi rencana yang melebihi 3 tajuk)', -'tog-rememberpassword' => 'Ingat status log masuk saya pada komputer ini', -'tog-editwidth' => 'Besarkan kotak sunting ke seluruh skrin', +'tog-rememberpassword' => 'Ingat log masuk saya di pelayar ini (tidak melebihi $1 {{PLURAL:$1|hari|hari}})', 'tog-watchcreations' => 'Tambahkan laman yang saya cipta ke dalam senarai pantau', 'tog-watchdefault' => 'Tambahkan laman yang saya sunting ke dalam senarai pantau', 'tog-watchmoves' => 'Tambahkan laman yang saya pindahkan ke dalam senarai pantau', @@ -317,31 +319,21 @@ $messages = array( 'faqpage' => 'Project:Soalan Lazim', # Vector skin -'vector-action-addsection' => 'Buka topik', -'vector-action-delete' => 'Hapuskan', -'vector-action-move' => 'Pindahkan', -'vector-action-protect' => 'Lindungi', -'vector-action-undelete' => 'Batal hapus', -'vector-action-unprotect' => 'Nyahlindung', -'vector-namespace-category' => 'Kategori', -'vector-namespace-help' => 'Laman bantuan', -'vector-namespace-image' => 'Fail', -'vector-namespace-main' => 'Laman', -'vector-namespace-media' => 'Laman media', -'vector-namespace-mediawiki' => 'Pesanan', -'vector-namespace-project' => 'Laman projek', -'vector-namespace-special' => 'Laman khas', -'vector-namespace-talk' => 'Bincang', -'vector-namespace-template' => 'Templat', -'vector-namespace-user' => 'Laman pengguna', -'vector-view-create' => 'Cipta', -'vector-view-edit' => 'Sunting', -'vector-view-history' => 'Lihat sejarah', -'vector-view-view' => 'Baca', -'vector-view-viewsource' => 'Lihat sumber', -'actions' => 'Tindakan', -'namespaces' => 'Ruang nama', -'variants' => 'Kelainan', +'vector-action-addsection' => 'Buka topik', +'vector-action-delete' => 'Hapuskan', +'vector-action-move' => 'Pindahkan', +'vector-action-protect' => 'Lindungi', +'vector-action-undelete' => 'Batal hapus', +'vector-action-unprotect' => 'Nyahlindung', +'vector-simplesearch-preference' => 'Bolehkan cadangan carian lanjutan (kulit Vector sahaja)', +'vector-view-create' => 'Cipta', +'vector-view-edit' => 'Sunting', +'vector-view-history' => 'Lihat sejarah', +'vector-view-view' => 'Baca', +'vector-view-viewsource' => 'Lihat sumber', +'actions' => 'Tindakan', +'namespaces' => 'Ruang nama', +'variants' => 'Kelainan', 'errorpagetitle' => 'Ralat', 'returnto' => 'Kembali ke $1.', @@ -402,6 +394,9 @@ Terlalu ramai pengguna cuba melihat laman ini. Sila tunggu sebentar sebelum cuba mencapai laman ini lagi. $1', +'pool-timeout' => 'Menunggu sebentar untuk dikunci', +'pool-queuefull' => 'Giliran kolam telah penuh', +'pool-errorunknown' => 'Ralat tak diketahui', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Perihal {{SITENAME}}', @@ -561,7 +556,8 @@ Akaun anda telah dibuka. Jangan lupa untuk mengubah [[Special:Preferences|keutam 'yourname' => 'Nama pengguna:', 'yourpassword' => 'Kata laluan:', 'yourpasswordagain' => 'Ulangi kata laluan:', -'remembermypassword' => 'Ingat log masuk saya di komputer ini', +'remembermypassword' => 'Ingat log masuk saya pada pelayar ini (tidak melebihi $1 {{PLURAL:$1|hari|hari}})', +'securelogin-stick-https' => 'Kekal disambungkan ke HTTPS selepas log masuk', 'yourdomainname' => 'Domain anda:', 'externaldberror' => 'Berlaku ralat pangkalan data bagi pengesahan luar atau anda tidak dibenarkan mengemaskinikan akaun luar anda.', 'login' => 'Log masuk', @@ -578,6 +574,7 @@ Akaun anda telah dibuka. Jangan lupa untuk mengubah [[Special:Preferences|keutam 'gotaccount' => "Sudah mempunyai akaun? '''$1'''.", 'gotaccountlink' => 'Log masuk', 'createaccountmail' => 'melalui e-mel', +'createaccountreason' => 'Sebab:', 'badretype' => 'Sila ulangi kata laluan dengan betul.', 'userexists' => 'Nama pengguna yang anda masukkan telah pun digunakan. Sila pilih nama yang lain.', 'loginerror' => 'Ralat log masuk', @@ -595,6 +592,7 @@ Akaun anda telah dibuka. Jangan lupa untuk mengubah [[Special:Preferences|keutam 'wrongpasswordempty' => 'Kata laluan yang dimasukkan adalah kosong. Sila cuba lagi.', 'passwordtooshort' => 'Kata laluan mestilah sekurang-kurangnya {{PLURAL:$1|1 aksara|$1 aksara}}.', 'password-name-match' => 'Kata laluan anda mesti berbeza daripada nama pengguna anda.', +'password-login-forbidden' => 'Penggunaan nama pengguna dan kata laluan ini adalah dilarang.', 'mailmypassword' => 'E-melkan kata laluan baru', 'passwordremindertitle' => 'Pengingat kata laluan daripada {{SITENAME}}', 'passwordremindertext' => 'Seseorang (mungkin anda, dari alamat IP $1) telah meminta kata laluan baru untuk {{SITENAME}} ($4). Kata laluan sementara baru untuk pengguna "$2" ialah "$3". Untuk menamatkan prosedur ini, anda perlu log masuk dan tetapkan kata laluan yang baru dengan segera. Kata laluan sementara anda akan luput dalam $5 hari. @@ -636,6 +634,9 @@ Sila tunggu sebentar dan cuba lagi.', 'loginlanguagelabel' => 'Bahasa: $1', 'suspicious-userlogout' => 'Permintaan anda untuk log keluar ditolak kerana ia kelihatan seperti dihantar oleh pelayar rosak atau proksi pengagregatan.', +# E-mail sending +'php-mail-error-unknown' => 'Ralat tak diketahui dalam fungsi mail() PHP', + # Password reset dialog 'resetpass' => 'Tukar kata laluan', 'resetpass_announce' => 'Anda sedang log masuk dengan kata laluan sementara. Untuk log masuk dengan sempurna, sila tetapkan kata laluan baru di sini:', @@ -687,9 +688,10 @@ Anda mungkin telah pun berjaya menukar kata laluan anda atau meminta kata laluan 'showlivepreview' => 'Pratonton langsung', 'showdiff' => 'Lihat perubahan', 'anoneditwarning' => "'''Amaran:''' Anda tidak log masuk. Alamat IP anda akan direkodkan dalam sejarah suntingan laman ini.", +'anonpreviewwarning' => "''Anda belum log masuk. Jika anda menyimpan laman ini, alamat IP anda akan direkodkan dalam sejarah penyuntingan laman ini.''", 'missingsummary' => "'''Peringatan:''' Anda tidak menyatakan ringkasan suntingan. Klik '''Simpan''' sekali lagi untuk menyimpan suntingan ini tanpa ringkasan.", 'missingcommenttext' => 'Sila masukkan komen dalam ruangan di bawah.', -'missingcommentheader' => "'''Peringatan:''' Anda tidak menyatakan tajuk bagi komen ini. Klik '''Simpan''' sekali lagi untuk menyimpan suntingan ini tanpa tajuk.", +'missingcommentheader' => "'''Peringatan:''' Anda tidak menyatakan tajuk bagi komen ini. Klik '''{{int:savearticle}}''' sekali lagi untuk menyimpan suntingan ini tanpa tajuk.", 'summary-preview' => 'Pratonton ringkasan:', 'subject-preview' => 'Pratonton tajuk:', 'blockedtitle' => 'Pengguna disekat', @@ -762,7 +764,11 @@ Masukan log sekatan terakhir disediakan di bawah sebagai rujukan:', 'userjsyoucanpreview' => "'''Petua:''' Gunakan butang \"{{int:showpreview}}\" untuk menguji JavaScript baru anda sebelum menyimpan.", 'usercsspreview' => "'''Ingat bahawa anda hanya sedang melihat pratonton CSS peribadi anda. Laman ini belum lagi disimpan!'''", 'userjspreview' => "'''Ingat bahawa anda hanya menguji/melihat pratonton JavaScript anda, ia belum lagi disimpan!'''", -'userinvalidcssjstitle' => "'''Amaran:''' Rupa \"\$1\" tidak wujud. Ingat bahawa laman tempahan .css dan .js menggunakan tajuk berhuruf kecil, contohnya {{ns:user}}:Anu/monobook.css tidak sama dengan {{ns:user}}:Anu/Monobook.css.", +'sitecsspreview' => "'''Ingat bahawa anda cuma melihat pratonton CSS ini.''' +'''Ia belum lagi disimpan!'''", +'sitejspreview' => "'''Ingat bahawa anda cuma melihat pratonton kod JavaScript ini.''' +'''Ia belum lagi disimpan!'''", +'userinvalidcssjstitle' => "'''Amaran:''' Rupa \"\$1\" tidak wujud. Ingat bahawa laman tempahan .css dan .js menggunakan tajuk berhuruf kecil, contohnya {{ns:user}}:Anu/vector.css tidak sama dengan {{ns:user}}:Anu/Vector.css.", 'updated' => '(Dikemaskinikan)', 'note' => "'''Catatan:'''", 'previewnote' => "'''Ini hanyalah pratonton. Perubahan masih belum disimpan!'''", @@ -799,9 +805,6 @@ Anda juga berjanji bahawa ini adalah hasil kerja tangan anda sendiri, atau disal Anda juga berjanji bahawa ini adalah hasil kerja tangan anda sendiri, atau disalin daripada domain awam atau mana-mana sumber bebas lain (lihat $1 untuk butiran lanjut). '''JANGAN KIRIM KARYA HAK CIPTA ORANG LAIN TANPA KEBENARAN!'''", -'longpagewarning' => "'''AMARAN: Panjang laman ini ialah $1 kilobait. -Terdapat beberapa pelayar web yang mempunyai masalah jika digunakan untuk menyunting laman yang menghampiri ataupun melebihi 32 kB. -Sila bahagikan rencana ini, jika boleh.'''", 'longpageerror' => "'''RALAT: Panjang teks yang dikirim ialah $1 kilobait, melebihi had maksimum $2 kilobait. Ia tidak boleh disimpan.'''", 'readonlywarning' => "'''AMARAN: Pangkalan data telah dikunci untuk penyenggaraan. Justeru, anda tidak boleh menyimpan suntingan anda pada masa sekarang. @@ -975,6 +978,8 @@ $1", 'logdelete-failure' => "'''Log nampak tidak dapat diset:''' $1", 'revdel-restore' => 'Tukar kebolehnampakan', +'revdel-restore-deleted' => 'semakan dihapuskan', +'revdel-restore-visible' => 'semakan nampak', 'pagehist' => 'Sejarah laman', 'deletedhist' => 'Sejarah yang dihapuskan', 'revdelete-content' => 'kandungan', @@ -1045,11 +1050,13 @@ Sila pastikan bahawa perubahan ini akan mengekalkan kesinambungan sejarah laman. # Diffs 'history-title' => 'Sejarah semakan bagi "$1"', 'difference' => '(Perbezaan antara semakan)', +'difference-multipage' => '(Perbezaan antara laman)', 'lineno' => 'Baris $1:', 'compareselectedversions' => 'Bandingkan versi-versi yang dipilih', 'showhideselectedversions' => 'Tunjukkan/sorokkan versi yang dipilih', 'editundo' => 'batal', -'diff-multi' => '({{PLURAL:$1|Satu|$1}} semakan pertengahan tidak ditunjukkan.)', +'diff-multi' => '($1 {{PLURAL:$1|semakan pertengahan|semakan pertengahan}} oleh $2 {{PLURAL:$2|pengguna|pengguna}} tidak dipaparkan)', +'diff-multi-manyusers' => '($1 {{PLURAL:$1|semakan pertengahan|semakan pertengahan}} oleh lebih daripada $2 {{PLURAL:$2|pengguna|pengguna}} tidak dipaparkan)', # Search results 'searchresults' => 'Hasil carian', @@ -1084,6 +1091,7 @@ Sila pastikan bahawa perubahan ini akan mengekalkan kesinambungan sejarah laman. 'searchprofile-everything-tooltip' => 'Cari semua kandungan (termasuk laman perbincangan)', 'searchprofile-advanced-tooltip' => 'Cari dalam ruang nama yang tersuai', 'search-result-size' => '$1 ({{PLURAL:$2|$2 patah perkataan}})', +'search-result-category-size' => '$1 {{PLURAL:$1|ahli|ahli}} ($2 {{PLURAL:$2|subkategori|subkategori}}, $3 {{PLURAL:$3|fail|fail}})', 'search-result-score' => 'Kaitan: $1%', 'search-redirect' => '(pelencongan $1)', 'search-section' => '(bahagian $1)', @@ -1159,6 +1167,7 @@ Cuba berikan awalan ''all:'' untuk mencari semua kandungan (termasuk laman perbi 'contextlines' => 'Bilangan baris untuk dipaparkan bagi setiap capaian:', 'contextchars' => 'Bilangan askara konteks bagi setiap baris:', 'stub-threshold' => 'Ambang bagi pemformatan pautan ke rencana ringkas (bait):', +'stub-threshold-disabled' => 'Dimatikan', 'recentchangesdays' => 'Bilangan hari dalam perubahan terkini:', 'recentchangesdays-max' => '(had $1 hari)', 'recentchangescount' => 'Bilangan suntingan yang dipaparkan mengikut tetapan tersedia:', @@ -1192,6 +1201,7 @@ Di sini ada nilai yang dihasilkan secara rawak yang boleh anda guna: $1', 'prefs-files' => 'Fail', 'prefs-custom-css' => 'CSS tempahan', 'prefs-custom-js' => 'JS tempahan', +'prefs-common-css-js' => 'CSS/JavaScript kongsi untuk semua rupa:', 'prefs-reset-intro' => 'Anda boleh menggunakan laman ini untuk menetapkan semula keutamaan anda kepada tetapan sediakala (sewaktu anda mulai menjadi ahli) tapak ini. Tindakan ini tidak boleh dibatalkan.', 'prefs-emailconfirm-label' => 'Pengesahan e-mail:', @@ -1227,9 +1237,15 @@ Tindakan ini tidak boleh dibatalkan.', 'prefs-advancedrendering' => 'Pilihan maju', 'prefs-advancedsearchoptions' => 'Pilihan maju', 'prefs-advancedwatchlist' => 'Pilihan maju', -'prefs-display' => 'Papar pilihan', +'prefs-displayrc' => 'Papar pilihan', +'prefs-displaysearchoptions' => 'Papar pilihan', +'prefs-displaywatchlist' => 'Papar pilihan', 'prefs-diffs' => 'Beza', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Alamat e-mel adalah sah', +'email-address-validity-invalid' => 'Sila masukkan alamat e-mel yang sah', + # User rights 'userrights' => 'Pengurusan hak pengguna', 'userrights-lookup-user' => 'Urus kumpulan pengguna', @@ -1313,6 +1329,7 @@ Tindakan ini tidak boleh dibatalkan.', 'right-hideuser' => 'Menyekat sesebuah nama pengguna, menyembunyikannya daripada orang ramai', 'right-ipblock-exempt' => 'Melangkau sekatan IP, sekatan automatik dan sekatan julat', 'right-proxyunbannable' => 'Melangkau sekatan proksi automatik', +'right-unblockself' => 'Menyahsekat diri sendiri', 'right-protect' => 'Menukar peringkat perlindungan dan menyunting laman yang dilindungi', 'right-editprotected' => 'Menyunting laman yang dilindungi (tanpa perlindungan melata)', 'right-editinterface' => 'Menyunting antara muka pengguna', @@ -1335,7 +1352,6 @@ Tindakan ini tidak boleh dibatalkan.', 'right-siteadmin' => 'Mengunci dan membuka kunci pangkalan data', 'right-reset-passwords' => 'Mengeset semula kata laluan pengguna lain', 'right-override-export-depth' => 'Eksport laman termasuk laman dipaut sehingga kedalaman 5', -'right-versiondetail' => 'Papar sambungan maklumat versi perisian', 'right-sendemail' => 'Kirim e-mel kepada pengguna-pengguna lain', # User rights log @@ -1386,14 +1402,9 @@ Tindakan ini tidak boleh dibatalkan.', 'recentchanges-legend' => 'Pilihan perubahan terkini', 'recentchangestext' => 'Jejaki perubahan terkini dalam {{SITENAME}} pada laman ini.', 'recentchanges-feed-description' => 'Jejaki perubahan terkini dalam {{SITENAME}} pada suapan ini.', -'recentchanges-label-legend' => 'Petunjuk: $1.', -'recentchanges-legend-newpage' => '$1 - laman baru', 'recentchanges-label-newpage' => 'Suntingan ini mencipta laman baru', -'recentchanges-legend-minor' => '$1 - suntingan kecil', 'recentchanges-label-minor' => 'Ini ialah suntingan kecil', -'recentchanges-legend-bot' => '$1 - suntingan bot', 'recentchanges-label-bot' => 'Suntingan ini dilakukan oleh bot', -'recentchanges-legend-unpatrolled' => '$1 - suntingan belum dirondai', 'recentchanges-label-unpatrolled' => 'Suntingan ini belum dirondai', 'rcnote' => "Yang berikut ialah '''$1''' perubahan terakhir sejak '''$2''' hari yang lalu sehingga $5, $4.", 'rcnotefrom' => 'Yang berikut ialah semua perubahan sejak $2 (sehingga $1).', @@ -1440,6 +1451,9 @@ terlebih dahulu untuk memuat naik fail.', 'upload_directory_missing' => 'Direktori muat naik ($1) hilang dan tidak dapat dicipta oleh pelayan web.', 'upload_directory_read_only' => 'Direktori muat naik ($1) tidak boleh ditulis oleh pelayan web.', 'uploaderror' => 'Ralat muat naik', +'upload-recreate-warning' => "'''Amaran: Sebuah fail dengan nama tersebut telah pun dihapuskan atau dipindahkan.''' + +Log penghapusan dan pemindahan untuk laman ini disediakan di bawah ini untuk kemudahan:", 'uploadtext' => "Gunakan borang di bawah untuk memuat naik fail. Untuk melihat atau mencari imej yang sudah dimuat naik, sila ke [[Special:FileList|senarai fail yang dimuat naik]]. Tindakan muat naik akan direkodkan dalam [[Special:Log/upload|log muat naik]], manakala penghapusan dalam [[Special:Log/delete|log penghapusan]]. @@ -1471,6 +1485,17 @@ Untuk menyertakan sebarang fail ke dalam sesebuah laman, gunakan pautan dengan s 'filetype-unwanted-type' => "'''\".\$1\"''' adalah jenis fail yang tidak dikehendaki. {{PLURAL:\$3|Jenis|Jenis-jenis}} fail yang diutamakan ialah \$2.", 'filetype-banned-type' => "'''\".\$1\"''' adalah jenis fail yang dilarang. {{PLURAL:\$3|Jenis|Jenis-jenis}} fail yang dibenarkan ialah \$2.", 'filetype-missing' => 'Fail ini tidak mempunyai sambungan (contohnya ".jpg").', +'empty-file' => 'Fail yang anda serahkan adalah kosong.', +'file-too-large' => 'Fail yang anda serahkan adalah terlalu besar.', +'filename-tooshort' => 'Nama fail ini terlalu pendek.', +'filetype-banned' => 'Fail jenis ini adalah dilarang.', +'verification-error' => 'Fail ini tidak lulus pengesahan fail.', +'hookaborted' => 'Pengubahsuaian yang anda buat telah disekat oleh sebuah cangkuk sambungan.', +'illegal-filename' => 'Nama fail tidak dibenarkan.', +'overwrite' => 'Menulis ganti fail yang telah wujud adalah tidak dibenarkan.', +'unknown-error' => 'Berlaku ralat yang tidak diketahui.', +'tmp-create-error' => 'Fail sementara tidak dapat dicipta.', +'tmp-write-error' => 'Fail sementara tidak dapat ditulis.', 'large-file' => 'Saiz fail ini ialah $2. Anda dinasihati supaya memuat naik fail yang tidak melebihi $1.', 'largefileserver' => 'Fail ini telah melebihi had muat naik pelayan web.', 'emptyfile' => 'Fail yang dimuat naik adalah kosong. Ini mungkin disebabkan oleh kesilapan menaip nama fail. Sila pastikan bahawa anda betul-betul mahu memuat naik fail ini.', @@ -1493,13 +1518,14 @@ Jika anda memiliki imej ini dalam leraian penuh, sila muat naik fail tersebut. S 'fileexists-shared-forbidden' => 'Sebuah fail dengan nama ini telah pun wujud dalam gedung fail kongsi. Jika anda masih mahu memuat naik fail ini, sila kembali ke borang muat naik dan gunakan nama lain. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Fail ini adalah salinan bagi {{PLURAL:$1|fail|fail-fail}} berikut:', 'file-deleted-duplicate' => 'Sebuah fail yang serupa dengan fail ini ([[:$1]]) telah pun dihapuskan sebelum ini. Anda seharusnya memeriksa sejarah penghapusan fail itu terlebih dahulu sebelum memuat naiknya sekali lagi.', -'successfulupload' => 'Muat naik berjaya', 'uploadwarning' => 'Amaran muat naik', 'uploadwarning-text' => 'Sila ubah keterangan fail di bawah dan cuba lagi.', 'savefile' => 'Simpan fail', 'uploadedimage' => 'memuat naik "[[$1]]"', 'overwroteimage' => 'memuat naik versi baru bagi "[[$1]]"', 'uploaddisabled' => 'Ciri muat naik dimatikan', +'copyuploaddisabled' => 'Ciri muat naik melalui URL telah dilumpuhkan.', +'uploadfromurl-queued' => 'Muat naik anda telah digilirkan.', 'uploaddisabledtext' => 'Ciri muat naik fail dimatikan.', 'php-uploaddisabledtext' => 'Pemuatnaikan fail PHP dilumpuhkan. Sila semak tetapan file_uploads.', 'uploadscripted' => 'Fail ini mengandungi kod HTML atau skrip yang boleh disalahtafsirkan oleh pelayar web.', @@ -1518,6 +1544,14 @@ Jika anda memiliki imej ini dalam leraian penuh, sila muat naik fail tersebut. S Anda harus mempertimbangkan perlunya memuat naik fail ini. Untuk rujukan, yang berikut ialah log penghapusan bagi fail ini:", 'filename-bad-prefix' => "Nama bagi fail yang dimuat naik bermula dengan '''\"\$1\"''', yang mana merupakan nama yang tidak deskriptif yang biasanya ditetapkan oleh kamera digital secara automatik. Sila berikan nama yang lebih deskriptif bagi fail tersebut.", +'upload-success-subj' => 'Muat naik berjaya', +'upload-success-msg' => 'Muat naik anda dari [$2] berjaya. Ia ada di sini: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Masalah muat naik', +'upload-failure-msg' => 'Terdapat masalah dengan muat naik anda daripada [$2]: + +$1', +'upload-warning-subj' => 'Amaran muat naik', +'upload-warning-msg' => 'Terdapat masalah dengan muat naik anda daripada [$2]. Anda boleh kembali ke [[Special:Upload/stash/$1|borang muat naik]] untuk mengatasi masalah ini.', 'upload-proto-error' => 'Protokol salah', 'upload-proto-error-text' => 'Muat naik jauh memerlukan URL yang dimulakan dengan http:// atau ftp://.', @@ -1578,6 +1612,7 @@ Klik di atas mana-mana lajur yang berkenaan untuk menukar tertib susunan.', 'listfiles_search_for' => 'Cari nama imej:', 'imgfile' => 'fail', 'listfiles' => 'Senarai fail', +'listfiles_thumb' => 'Thumbnail', 'listfiles_date' => 'Tarikh', 'listfiles_name' => 'Nama', 'listfiles_user' => 'Pengguna', @@ -1691,8 +1726,8 @@ Penerangan pada [$2 laman penerangan failnya] di sana ditunjukkan di bawah.', 'statistics-edits' => 'Suntingan laman sejak {{SITENAME}} dibuka', 'statistics-edits-average' => 'Purata suntingan bagi setiap laman', 'statistics-views-total' => 'Jumlah pandangan', +'statistics-views-total-desc' => 'Paparan ke laman-laman yang tidak wujud dan laman-laman khas tidak disertakan', 'statistics-views-peredit' => 'Pandangan setiap suntingan', -'statistics-jobqueue' => 'Jumlah [http://www.mediawiki.org/wiki/Manual:Job_queue tugas yang tertunggak]', 'statistics-users' => '[[Special:ListUsers|Pengguna]] berdaftar', 'statistics-users-active' => 'Pengguna aktif', 'statistics-users-active-desc' => 'Pengguna yang aktif sejak {{PLURAL:$1|semalam|$1 hari lalu}}', @@ -1704,14 +1739,14 @@ Penerangan pada [$2 laman penerangan failnya] di sana ditunjukkan di bawah.', 'doubleredirects' => 'Lencongan berganda', 'doubleredirectstext' => 'Yang berikut ialah senarai laman yang melencong ke laman lencongan lain. Setiap baris mengandungi pautan ke laman lencongan pertama dan kedua, serta baris pertama bagi teks lencongan kedua, lazimnya merupakan laman sasaran "sebenar", yang sepatutnya ditujui oleh lencongan pertama. -Masukan yang dipotong telah diselesaikan.', +Masukan yang dipotong telah diselesaikan.', 'double-redirect-fixed-move' => '[[$1]] dilencongkan ke [[$2]]', 'double-redirect-fixer' => 'Pembaiki lencongan', 'brokenredirects' => 'Lencongan rosak', 'brokenredirectstext' => 'Lencongan-lencongan berikut menuju ke laman yang tidak wujud:', 'brokenredirects-edit' => 'sunting', -'brokenredirects-delete' => 'hapus', +'brokenredirects-delete' => 'hapuskan', 'withoutinterwiki' => 'Laman tanpa pautan bahasa', 'withoutinterwiki-summary' => 'Laman-laman berikut tidak mempunyai pautan ke versi bahasa lain:', @@ -1727,6 +1762,8 @@ Masukan yang dipotong telah diselesaikan.', 'nmembers' => '$1 ahli', 'nrevisions' => '$1 semakan', 'nviews' => 'Dilihat $1 kali', +'nimagelinks' => 'Digunakan pada {{PLURAL:$1|sebuah|$1 buah}} laman', +'ntransclusions' => 'digunakan pada {{PLURAL:$1|sebuah|$1 buah}} laman', 'specialpage-empty' => 'Tiada keputusan bagi laporan ini.', 'lonelypages' => 'Laman yatim', 'lonelypagestext' => 'Laman-laman berikut tidak dipaut atau disertakan dari laman lain dalam {{SITENAME}}.', @@ -1883,37 +1920,43 @@ Anda boleh mengetahui [[{{MediaWiki:Listgrouprights-helppage}}|maklumat tambahan 'listgrouprights-removegroup-self-all' => 'Keluar daripada semua kumpulan', # E-mail user -'mailnologin' => 'Tiada alamat e-mel', -'mailnologintext' => 'Anda perlu [[Special:UserLogin|log masuk]] +'mailnologin' => 'Tiada alamat e-mel', +'mailnologintext' => 'Anda perlu [[Special:UserLogin|log masuk]] terlebih dahulu dan mempunyai alamat e-mel yang sah dalam [[Special:Preferences|laman keutamaan]] untuk mengirim e-mel kepada pengguna lain.', -'emailuser' => 'Kirim e-mel kepada pengguna ini', -'emailpage' => 'E-mel pengguna', -'emailpagetext' => 'Gunakan borang berikut untuk mengirim pesanan e-mel kepada pengguna ini. +'emailuser' => 'Kirim e-mel kepada pengguna ini', +'emailpage' => 'E-mel pengguna', +'emailpagetext' => 'Gunakan borang berikut untuk mengirim pesanan e-mel kepada pengguna ini. Alamat e-mel yang ditetapkan dalam [[Special:Preferences|keutamaan anda]] akan digunakan sebagai alamat "Daripada" dalam e-mel tersebut supaya si penerima boleh membalasnya.', -'usermailererror' => 'Objek Mail memulangkan ralat:', -'defemailsubject' => 'E-mel {{SITENAME}}', -'noemailtitle' => 'Tiada alamat e-mel', -'noemailtext' => 'Pengguna ini tidak menetapkan alamat e-mel yang sah.', -'nowikiemailtitle' => 'E-mel tidak dibenarkan', -'nowikiemailtext' => 'Pengguna ini tidak mahu menerima e-mel daripada pengguna lain.', -'email-legend' => 'Kirim e-mel kepada pengguna {{SITENAME}} lain', -'emailfrom' => 'Daripada:', -'emailto' => 'Kepada:', -'emailsubject' => 'Perkara:', -'emailmessage' => 'Pesanan:', -'emailsend' => 'Kirim', -'emailccme' => 'Kirim salinan mesej ini kepada saya.', -'emailccsubject' => 'Salinan bagi mesej anda kepada $1: $2', -'emailsent' => 'E-mel dikirim', -'emailsenttext' => 'E-mel anda telah dikirim.', -'emailuserfooter' => 'E-mel ini telah dikirim oleh $1 kepada $2 menggunakan alat "E-mel pengguna" di {{SITENAME}}.', +'usermailererror' => 'Objek Mail memulangkan ralat:', +'defemailsubject' => 'E-mel {{SITENAME}}', +'usermaildisabled' => 'E-mel pengguna telah dilumpuhkan', +'usermaildisabledtext' => 'Anda tidak boleh mengirim e-mel kepada pengguna lain di wiki ini', +'noemailtitle' => 'Tiada alamat e-mel', +'noemailtext' => 'Pengguna ini tidak menetapkan alamat e-mel yang sah.', +'nowikiemailtitle' => 'E-mel tidak dibenarkan', +'nowikiemailtext' => 'Pengguna ini tidak mahu menerima e-mel daripada pengguna lain.', +'email-legend' => 'Kirim e-mel kepada pengguna {{SITENAME}} lain', +'emailfrom' => 'Daripada:', +'emailto' => 'Kepada:', +'emailsubject' => 'Perkara:', +'emailmessage' => 'Pesanan:', +'emailsend' => 'Kirim', +'emailccme' => 'Kirim salinan mesej ini kepada saya.', +'emailccsubject' => 'Salinan bagi mesej anda kepada $1: $2', +'emailsent' => 'E-mel dikirim', +'emailsenttext' => 'E-mel anda telah dikirim.', +'emailuserfooter' => 'E-mel ini telah dikirim oleh $1 kepada $2 menggunakan alat "E-mel pengguna" di {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Meninggalkan pesanan sistem.', +'usermessage-editor' => 'Utusan sistem', # Watchlist 'watchlist' => 'Senarai pantau', 'mywatchlist' => 'Senarai pantau saya', -'watchlistfor' => "(bagi '''$1''')", +'watchlistfor2' => 'Bagi $1 $2', 'nowatchlist' => 'Tiada item dalam senarai pantau anda.', 'watchlistanontext' => 'Sila $1 terlebih dahulu untuk melihat atau menyunting senarai pantau anda.', 'watchnologin' => 'Belum log masuk', @@ -1959,14 +2002,14 @@ Jika anda mahu membuang laman tersebut daripada senarai pantau, klik \"Nyahpanta 'enotif_lastvisited' => 'Lihat $1 untuk semua perubahan sejak kunjungan terakhir anda.', 'enotif_lastdiff' => 'Rujuk $1 untuk melihat perubahan ini.', 'enotif_anon_editor' => 'pengguna tanpa nama $1', -'enotif_body' => 'Saudara/saudari $WATCHINGUSERNAME, +'enotif_body' => '$WATCHINGUSERNAME, -Laman $PAGETITLE di {{SITENAME}} telah $CHANGEDORCREATED pada $PAGEEDITDATE oleh $PAGEEDITOR, sila lihat $PAGETITLE_URL untuk versi semasa. +Laman $PAGETITLE di {{SITENAME}} telah $CHANGEDORCREATED pada $PAGEEDITDATE oleh $PAGEEDITOR; sila lihat $PAGETITLE_URL untuk semakan terkini. $NEWPAGE -Ringkasan: $PAGESUMMARY $PAGEMINOREDIT +Ringkasan penyunting: $PAGESUMMARY $PAGEMINOREDIT Hubungi penyunting tersebut: mel: $PAGEEDITOR_EMAIL @@ -1975,13 +2018,16 @@ wiki: $PAGEEDITOR_WIKI Tiada pemberitahuan lain akan dikirim berkaitan perubahan selanjutnya melainkan anda mengunjungi laman tersebut. Anda juga boleh menetapkan semula penanda pemberitahuan bagi semua laman dalam senarai pantau anda. - Sistem pemberitahuan {{SITENAME}} anda yang ramah + Sistem pemberitahuan {{SITENAME}} anda yang ramah mesra -- +Untuk mengubah tetapan pemberitahuan e-mel anda, lawati +{{fullurl:{{#special:Preferences}}}} + Untuk mengubah tetapan senarai pantau anda, lawati {{fullurl:{{#special:Watchlist}}/edit}} -Untuk memadam laman ini dari senarai pantau anda, lawati +Untuk menghapuskan laman ini dari senarai pantau anda, lawati $UNWATCHURL Maklum balas dan bantuan: @@ -2034,7 +2080,10 @@ Suntingan terakhir telah dibuat oleh [[User:$3|$3]] ([[User talk:$3|Perbualan]]{ 'revertpage' => 'Membalikkan suntingan oleh [[Special:Contributions/$2|$2]] ([[User talk:$2|Perbincangan]]) kepada versi terakhir oleh [[User:$1|$1]]', 'revertpage-nouser' => 'Membalikkan suntingan oleh (nama pengguna dibuang) kepada semakan terakhir oleh [[User:$1|$1]]', 'rollback-success' => 'Membalikkan suntingan oleh $1 kepada versi terakhir oleh $2.', -'sessionfailure' => 'Terdapat sedikit masalah pada sesi log masuk anda. + +# Edit tokens +'sessionfailure-title' => 'Kegagalan sesi', +'sessionfailure' => 'Terdapat sedikit masalah pada sesi log masuk anda. Tindakan ini telah dibatalkan untuk mencegah perampasan sesi. Sila tekan butang "back" dan muatkan semula laman yang telah anda kunjungi sebelum ini, kemudian cuba lagi.', @@ -2164,18 +2213,21 @@ $1', 'month' => 'Sebelum bulan:', 'year' => 'Sebelum tahun:', -'sp-contributions-newbies' => 'Tunjukkan sumbangan daripada akaun baru sahaja', -'sp-contributions-newbies-sub' => 'Bagi akaun-akaun baru', -'sp-contributions-newbies-title' => 'Sumbangan oleh pengguna baru', -'sp-contributions-blocklog' => 'Log sekatan', -'sp-contributions-deleted' => 'sumbangan dihapuskan', -'sp-contributions-logs' => 'log', -'sp-contributions-talk' => 'perbincangan', -'sp-contributions-userrights' => 'pengurusan hak pengguna', -'sp-contributions-blocked-notice' => 'Pengguna ini sedang disekat. Masukan log sekatan terakhir disediakan di bawah sebagai rujukan:', -'sp-contributions-search' => 'Cari sumbangan', -'sp-contributions-username' => 'Alamat IP atau nama pengguna:', -'sp-contributions-submit' => 'Cari', +'sp-contributions-newbies' => 'Tunjukkan sumbangan daripada akaun baru sahaja', +'sp-contributions-newbies-sub' => 'Bagi akaun-akaun baru', +'sp-contributions-newbies-title' => 'Sumbangan oleh pengguna baru', +'sp-contributions-blocklog' => 'Log sekatan', +'sp-contributions-deleted' => 'sumbangan dihapuskan', +'sp-contributions-uploads' => 'muat naik', +'sp-contributions-logs' => 'log', +'sp-contributions-talk' => 'perbincangan', +'sp-contributions-userrights' => 'pengurusan hak pengguna', +'sp-contributions-blocked-notice' => 'Pengguna ini sedang disekat. Masukan log sekatan terakhir disediakan di bawah sebagai rujukan:', +'sp-contributions-blocked-notice-anon' => 'Alamat IP ini sedang disekat. Masukan log sekatan terakhir disediakan di bawah sebagai rujukan:', +'sp-contributions-search' => 'Cari sumbangan', +'sp-contributions-username' => 'Alamat IP atau nama pengguna:', +'sp-contributions-toponly' => 'Hanya paparkan suntingan yang merupakan semakan terkini', +'sp-contributions-submit' => 'Cari', # What links here 'whatlinkshere' => 'Pautan ke laman ini', @@ -2239,7 +2291,6 @@ dirosakkan).', 'ipb-edit-dropdown' => 'Sunting sebab sekatan', 'ipb-unblock-addr' => 'Nyahsekat $1', 'ipb-unblock' => 'Nyahsekat nama pengguna atau alamat IP', -'ipb-blocklist-addr' => 'Sekatan sedia ada bagi $1', 'ipb-blocklist' => 'Lihat sekatan sedia ada', 'ipb-blocklist-contribs' => 'Sumbangan oleh $1', 'unblockip' => 'Nyahsekat pengguna', @@ -2310,6 +2361,8 @@ $1 telah pun disekat Adakah anda mahu menukar tetapan sekatan pengguna ini?', 'cant-block-while-blocked' => 'Anda tidak boleh menyekat orang lain sedangkan anda disekat.', 'cant-see-hidden-user' => 'Pengguna yang anda cuba sekat telahpun disekat dan tersorok. Memandangkan anda tidak mempunyai hak untuk menyorokkan pengguna, anda tidak boleh melihat atau menyunting sekatan pengguna tersebut.', +'ipbblocked' => 'Anda tidak boleh menyekat atau menyahsekat pengguna lain kerana anda sendiri telah disekat', +'ipbnounblockself' => 'Anda tidak dibenarkan menyahsekat diri sendiri', # Developer tools 'lockdb' => 'Kunci pangkalan data', @@ -2346,6 +2399,17 @@ laman tersebut kosong atau merupakan laman lencongan dan tidak mempunyai sejarah laman kepada nama yang asal jika anda telah melakukan kesilapan, dan anda tidak boleh menulis ganti laman yang telah wujud. '''AMARAN!''' Tindakan ini boleh menjadi perubahan yang tidak dijangka dan drastik bagi laman popular. Oleh itu, sila pastikan anda faham akibat yang mungkin timbul sebelum meneruskannya.", +'movepagetext-noredirectfixer' => "Borang di bawah akan menamakan semula sesebuah laman, memindahkan kesemua sejarahnya ke nama baru. +Nama lamanya akan menjadi sebuah laman lencongan ke laman baru tadi. +Pastikan [[Special:DoubleRedirects|lencongan berganda]] atau [[Special:BrokenRedirects|rosak]] sudah diperiksa. +Anda bertanggungjawab memastikan pautan-pautan sampai ke tujuan yang sepatutnya. + +Sila maklum bahawa laman tadi '''tidak''' akan dipindahkan sekiranya laman dengan tajuk yang baru tadi telah wujud, melainkan ia kosong atau sebuah pelencongan dan tiada sejarah suntingan lampau. +Ini bermakna anda boleh menamakan semula sesebuah laman balik kepada nama asalnya jika anda melakukan kesilapan, dan anda tidak boleh menulis ganti sebuah laman yang sudah wujud. + +'''AMARAN!''' +Tindakan ini boleh menjadi perubahan yang tidak dijangka dan drastik bagi laman popular; +sila pastikan anda faham akibat yang mungkin timbul sebelum meneruskannya.", 'movepagetalktext' => "Laman perbincangan yang berkaitan, jika ada, akan dipindahkan bersama-sama laman ini secara automatik '''kecuali''': * Sebuah laman perbincangan dengan nama baru telah pun wujud, atau * Anda membuang tanda kotak di bawah. @@ -2402,6 +2466,7 @@ Laman destinasi "[[:$1]]" telah pun wujud. Adakah anda mahu menghapuskannya supa 'immobile-source-page' => 'Anda tidak boleh memindahkan laman ini.', 'immobile-target-page' => 'Anda tidak boleh memindahkan laman ke tajuk itu.', 'imagenocrossnamespace' => 'Tidak boleh memindah fail ke ruang nama lain', +'nonfile-cannot-move-to-file' => 'Laman bukan fail tidak boleh dipindahkan ke ruang nama fail', 'imagetypemismatch' => 'Sambungan baru fail tersebut tidak sepadan dengan jenisnya', 'imageinvalidfilename' => 'Nama fail imej sasaran tidak sah', 'fix-double-redirects' => 'Kemas kinikan semua lencongan yang menuju ke tajuk asal', @@ -2481,6 +2546,7 @@ Simpan dalam komputer anda dan muat naiknya di sini.', 'importstart' => 'Mengimport laman...', 'import-revision-count' => '$1 semakan', 'importnopages' => 'Tiada laman untuk diimport.', +'imported-log-entries' => '$1 {{PLURAL:$1|entri log|entri log}} telah diimport.', 'importfailed' => 'Import gagal: $1', 'importunknownsource' => 'Jenis sumber import tidak dikenali', 'importcantopen' => 'Fail import tidak dapat dibuka', @@ -2573,6 +2639,8 @@ Simpan dalam komputer anda dan muat naiknya di sini.', 'tooltip-upload' => 'Muat naik', 'tooltip-rollback' => 'Balikkan semua suntingan oleh penyumbang terakhir pada laman ini dengan satu klik.', 'tooltip-undo' => 'Balikkan suntingan ini dan buka borang sunting dalam mod pratonton. Sebab boleh dinyatakan dalam ruangan ringkasan.', +'tooltip-preferences-save' => 'Simpan keutamaan', +'tooltip-summary' => 'Masukkan ringkasan pendek', # Metadata 'nodublincore' => 'Metadata RDF Dublin Core dipadamkan bagi pelayan ini.', @@ -2671,14 +2739,17 @@ Dengan menjalankannya, komputer anda mungkin akan terjejas.", 'imagemaxsize' => "Had saiz imej:
    ''(untuk laman keterangan fail)''", 'thumbsize' => 'Saiz imej ringkas:', 'widthheightpage' => '$1×$2, $3 halaman', -'file-info' => '(saiz file: $1, jenis MIME: $2)', -'file-info-size' => '($1 × $2 piksel, saiz fail: $3, jenis MIME: $4)', +'file-info' => 'saiz file: $1, jenis MIME: $2', +'file-info-size' => '$1 × $2 piksel, saiz fail: $3, jenis MIME: $4', 'file-nohires' => 'Tiada leraian lebih besar.', -'svg-long-desc' => '(Fail SVG, ukuran dasar $1 × $2 piksel, saiz fail: $3)', +'svg-long-desc' => 'Fail SVG, ukuran dasar $1 × $2 piksel, saiz fail: $3', 'show-big-image' => 'Leraian penuh', 'show-big-image-thumb' => 'Saiz pratonton ini: $1 × $2 piksel', 'file-info-gif-looped' => 'berulang', 'file-info-gif-frames' => '$1 bingkai', +'file-info-png-looped' => 'berulang', +'file-info-png-repeat' => 'dimainkan {{PLURAL:$1|sekali|sebanyak $1 kali}}', +'file-info-png-frames' => '$1 bingkai', # Special:NewFiles 'newimages' => 'Galeri fail baru', @@ -2835,6 +2906,7 @@ Ruangan lain akan disembunyikan pada sediakala. 'exif-gpsareainformation' => 'Nama kawasan GPS', 'exif-gpsdatestamp' => 'Tarikh GPS', 'exif-gpsdifferential' => 'Pembetulan pembezaan GPS', +'exif-objectname' => 'Tajuk ringkas', # EXIF attributes 'exif-compression-1' => 'Tidak dimampat', @@ -2994,30 +3066,30 @@ Ruangan lain akan disembunyikan pada sediakala. 'limitall' => 'semua', # E-mail address confirmation -'confirmemail' => 'Sahkan alamat e-mel', -'confirmemail_noemail' => 'Anda belum menetapkan alamat e-mel yang sah dalam [[Special:Preferences|laman keutamaan]] anda.', -'confirmemail_text' => '{{SITENAME}} menghendaki supaya anda mengesahkan alamat e-mel anda sebelum menggunakan ciri-ciri e-mel. +'confirmemail' => 'Sahkan alamat e-mel', +'confirmemail_noemail' => 'Anda belum menetapkan alamat e-mel yang sah dalam [[Special:Preferences|laman keutamaan]] anda.', +'confirmemail_text' => '{{SITENAME}} menghendaki supaya anda mengesahkan alamat e-mel anda sebelum menggunakan ciri-ciri e-mel. Aktifkan butang di bawah untuk mengirim e-mel pengesahan kepada alamat e-mel anda. E-mel tersebut akan mengandungi sebuah pautan yang mengandungi sebuah kod; buka pautan tersebut di pelayar anda untuk mengesahkan bahawa alamat e-mel anda.', -'confirmemail_pending' => 'Sebuah kod pengesahan telah pun di-e-melkan kepada anda. Jika anda baru sahaja +'confirmemail_pending' => 'Sebuah kod pengesahan telah pun di-e-melkan kepada anda. Jika anda baru sahaja membuka akaun, sila tunggu kehadiran e-mel tersebut selama beberapa minit sebelum meminta kod baru.', -'confirmemail_send' => 'E-melkan kod pengesahan', -'confirmemail_sent' => 'E-mel pengesahan dikirim.', -'confirmemail_oncreate' => 'Sebuah kod pengesahan telah dikirim kepada alamat e-mel anda. +'confirmemail_send' => 'E-melkan kod pengesahan', +'confirmemail_sent' => 'E-mel pengesahan dikirim.', +'confirmemail_oncreate' => 'Sebuah kod pengesahan telah dikirim kepada alamat e-mel anda. Kod ini tidak diperlukan untuk log masuk, akan tetapi anda perlu menyediakannya untuk mengaktifkan ciri-ciri e-mel yang terdapat dalam wiki ini.', -'confirmemail_sendfailed' => '{{SITENAME}} tidak dapat menghantar e-mel pengesahan anda. Sila semak alamat e-mel tersebut. +'confirmemail_sendfailed' => '{{SITENAME}} tidak dapat menghantar e-mel pengesahan anda. Sila semak alamat e-mel tersebut. Pelayan mel memulangkan: $1', -'confirmemail_invalid' => 'Kod pengesahan tidak sah. Kod tersebut mungkin sudah luput.', -'confirmemail_needlogin' => 'Anda perlu $1 terlebih dahulu untuk mengesahkan alamat e-mel anda.', -'confirmemail_success' => 'Alamat e-mel anda telah disahkan. Sekarang anda boleh melog masuk dan berseronok di wiki ini.', -'confirmemail_loggedin' => 'Alamat e-mel anda telah disahkan.', -'confirmemail_error' => 'Sesuatau yang tidak kena berlaku ketika kami menyimpan pengesahan anda.', -'confirmemail_subject' => 'Pengesahan alamat e-mel di {{SITENAME}}', -'confirmemail_body' => 'Seseorang, barangkali anda, dari alamat IP $1, telah mendaftarkan akaun "$2" dengan alamat e-mel ini di {{SITENAME}}. +'confirmemail_invalid' => 'Kod pengesahan tidak sah. Kod tersebut mungkin sudah luput.', +'confirmemail_needlogin' => 'Anda perlu $1 terlebih dahulu untuk mengesahkan alamat e-mel anda.', +'confirmemail_success' => 'Alamat e-mel anda telah disahkan. Sekarang anda boleh melog masuk dan berseronok di wiki ini.', +'confirmemail_loggedin' => 'Alamat e-mel anda telah disahkan.', +'confirmemail_error' => 'Sesuatau yang tidak kena berlaku ketika kami menyimpan pengesahan anda.', +'confirmemail_subject' => 'Pengesahan alamat e-mel di {{SITENAME}}', +'confirmemail_body' => 'Seseorang, barangkali anda, dari alamat IP $1, telah mendaftarkan akaun "$2" dengan alamat e-mel ini di {{SITENAME}}. Untuk mengesahkan bahawa akaun ini milik anda dan untuk mengaktifkan kemudahan e-mel di {{SITENAME}}, sila buka pautan ini dalam pelayar web anda: @@ -3028,8 +3100,30 @@ Jika anda tidak mendaftar di {{SITENAME}} (atau anda telah mendaftar menggunakan $5 Kod pengesahan ini akan luput pada $4.', -'confirmemail_invalidated' => 'Pengesahan alamat e-mel telah dibatalkan', -'invalidateemail' => 'Batalkan pengesahan e-mel', +'confirmemail_body_changed' => 'Seseorang, barangkali anda, dari alamat IP $1, telah menukarkan alamat e-mel bagi akaun "$2" menjadi alamat e-mel ini di {{SITENAME}}. + +Untuk mengesahkan bahawa akaun ini milik anda dan untuk mengaktifkan semula kemudahan e-mel di {{SITENAME}}, sila buka pautan ini dalam pelayar web anda: + +$3 + +Jika akaun ini *bukan* milik anda, ikuti pautan ini untuk membatalkan pengesahan alamat e-mel: + +$5 + +Kod pengesahan ini akan luput pada $4.', +'confirmemail_body_set' => 'Seseorang, barangkali anda, dari alamat IP $1, telah set semula akaun "$2" kepada alamat ini di {{SITENAME}}. + +Untuk mengesahkan bahawa akaun ini milik anda dan untuk mengaktifkan kemudahan e-mel di {{SITENAME}}, sila buka pautan ini dalam pelayar web anda: + +$3 + +Jika akaun tersebut *bukan* kepunyaan anda, ikuti pautan ini untuk membatalkan pengesahan alamat e-mel: + +$5 + +Kod pengesahan ini akan luput pada $4.', +'confirmemail_invalidated' => 'Pengesahan alamat e-mel telah dibatalkan', +'invalidateemail' => 'Batalkan pengesahan e-mel', # Scary transclusion 'scarytranscludedisabled' => '[Penyertaan pautan interwiki dilumpuhkan]', @@ -3069,6 +3163,7 @@ Sila sahkan bahawa anda mahu mencipta semula laman ini.", 'table_pager_first' => 'Muka pertama', 'table_pager_last' => 'Muka terakhir', 'table_pager_limit' => 'Papar $1 item setiap muka', +'table_pager_limit_label' => 'Bilangan item setiap laman:', 'table_pager_limit_submit' => 'Pergi', 'table_pager_empty' => 'Tiada hasil', @@ -3079,7 +3174,7 @@ Sila sahkan bahawa anda mahu mencipta semula laman ini.", 'autosumm-new' => "Mencipta laman baru dengan kandungan '$1'", # Live preview -'livepreview-loading' => 'Memuat …', +'livepreview-loading' => 'Memuatkan...', 'livepreview-ready' => 'Memuat … Sedia!', 'livepreview-failed' => 'Pratonton langsung gagal! Sila gunakan pratonton biasa.', 'livepreview-error' => 'Gagal membuat sambungan: $1 "$2". Sila gunakan pratonton biasa.', @@ -3138,6 +3233,7 @@ Anda juga boleh [[Special:Watchlist/edit|menggunakan penyunting piawai]].', 'version-specialpages' => 'Laman khas', 'version-parserhooks' => 'Penyangkuk penghurai', 'version-variables' => 'Pemboleh ubah', +'version-skins' => 'Rupa', 'version-other' => 'Lain-lain', 'version-mediahandlers' => 'Pengelola media', 'version-hooks' => 'Penyangkuk', @@ -3149,6 +3245,13 @@ Anda juga boleh [[Special:Watchlist/edit|menggunakan penyunting piawai]].', 'version-hook-subscribedby' => 'Dilanggan oleh', 'version-version' => '(Versi $1)', 'version-license' => 'Lesen', +'version-poweredby-credits' => "Wiki ini dikuasakan oleh '''[http://www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.", +'version-poweredby-others' => 'penyumbang-penyumbang lain', +'version-license-info' => 'MediaWiki adalah perisian bebas; anda boleh mengedarkannya semula dan/atau mengubah suainya di bawah terma-terma Lesen Awam GNU sebagai mana yang telah diterbitkan oleh Yayasan Perisian Bebas, sama ada versi 2 bagi Lesen tersebut, atau (berdasarkan pilihan anda) mana-mana versi selepasnya. + +MediaWiki diedarkan dengan harapan bahawa ia berguna, tetapi TANPA SEBARANG WARANTI; hatta waranti yang tersirat bagi KEBOLEHDAGANGAN mahupun KESESUAIAN UNTUK TUJUAN TERTENTU. Sila lihat Lesen Awam GNU untuk butiran lanjut. + +Anda patut telah menerima [{{SERVER}}{{SCRIPTPATH}}/COPYING sebuah salinan bagi Lesen Awam GNU] bersama-sama dengan atur cara ini; jika tidak, tulis ke Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA atau [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html baca dalam talian].', 'version-software' => 'Perisian yang dipasang', 'version-software-product' => 'Produk', 'version-software-version' => 'Versi', @@ -3219,6 +3322,15 @@ Sila masukkan nama fail tanpa awalan "{{ns:file}}:".', 'tags-edit' => 'sunting', 'tags-hitcount' => '$1 perubahan', +# Special:ComparePages +'comparepages' => 'Perbandingan laman', +'compare-selector' => 'Bandingkan semakan laman', +'compare-page1' => 'Laman 1', +'compare-page2' => 'Laman 2', +'compare-rev1' => 'Semakan 1', +'compare-rev2' => 'Semakan 2', +'compare-submit' => 'Bandingkan', + # Database error messages 'dberr-header' => 'Wiki ini dilanda masalah', 'dberr-problems' => 'Harap maaf. Tapak web ini dilanda masalah teknikal.', @@ -3235,8 +3347,13 @@ Sila masukkan nama fail tanpa awalan "{{ns:file}}:".', 'htmlform-float-invalid' => 'Nilai yang anda nyatakan bukan nombor.', 'htmlform-int-toolow' => 'Nilai yang anda nyatakan berada di bawah minimum bagi $1', 'htmlform-int-toohigh' => 'Nilai yang anda nyatakan berada di atas maksimum bagi $1', +'htmlform-required' => 'Nilai ini adalah wajib', 'htmlform-submit' => 'Hantar', 'htmlform-reset' => 'Undur perubahan', 'htmlform-selectorother-other' => 'Lain-lain', +# SQLite database support +'sqlite-has-fts' => '$1 dengan sokongan carian teks penuh', +'sqlite-no-fts' => '$1 tanpa sokongan carian teks penuh', + ); diff --git a/languages/messages/MessagesMt.php b/languages/messages/MessagesMt.php index fb17b2d4..061fdae9 100644 --- a/languages/messages/MessagesMt.php +++ b/languages/messages/MessagesMt.php @@ -48,8 +48,8 @@ $namespaceAliases = array( ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'RiindirizziDoppji' ), - 'BrokenRedirects' => array( 'RiindirizziMiksura' ), + 'DoubleRedirects' => array( 'RindirizziDoppji', 'RiindirizziDoppji' ), + 'BrokenRedirects' => array( 'RindirizziMiksura', 'RiindirizziMiksura' ), 'Disambiguations' => array( 'Diżambigwazzjoni' ), 'Userlogin' => array( 'UtentDħul' ), 'Userlogout' => array( 'UtentĦruġ' ), @@ -58,9 +58,9 @@ $specialPageAliases = array( 'Watchlist' => array( 'ListaOsservazzjoni' ), 'Recentchanges' => array( 'TibdilRiċenti' ), 'Upload' => array( 'Tella\'' ), - 'Listfiles' => array( 'ListaStampi' ), - 'Newimages' => array( 'StampiĠodda' ), - 'Listusers' => array( 'Utenti' ), + 'Listfiles' => array( 'ListaStampi', 'ListaFajls' ), + 'Newimages' => array( 'StampiĠodda', 'FajlsĠodda' ), + 'Listusers' => array( 'Utenti', 'ListaUtenti' ), 'Listgrouprights' => array( 'ListaDrittijietGruppi' ), 'Statistics' => array( 'Statistika' ), 'Randompage' => array( 'PaġnaKwalunkwe' ), @@ -70,7 +70,7 @@ $specialPageAliases = array( 'Uncategorizedimages' => array( 'StampiMhuxKategorizzati' ), 'Uncategorizedtemplates' => array( 'MudelliMhuxKategorizzati' ), 'Unusedcategories' => array( 'KategorijiMhuxUżati' ), - 'Unusedimages' => array( 'StampiMhuxUżati' ), + 'Unusedimages' => array( 'StampiMhuxUżati', 'FajlsMhuxUżati' ), 'Wantedpages' => array( 'PaġniRikjesti', 'ĦoloqMiksura' ), 'Wantedcategories' => array( 'KategorijiRikjesti' ), 'Wantedfiles' => array( 'FajlsRikjesti' ), @@ -85,20 +85,21 @@ $specialPageAliases = array( 'Shortpages' => array( 'PaġniQosra' ), 'Longpages' => array( 'PaġniTwal' ), 'Newpages' => array( 'PaġniĠodda' ), - 'Ancientpages' => array( 'PaġniAntiki' ), + 'Ancientpages' => array( 'PaġniQodma', 'PaġniAntiki' ), 'Deadendpages' => array( 'PaġniWieqfa' ), 'Protectedpages' => array( 'PaġniProtetti' ), 'Protectedtitles' => array( 'TitliProtetti' ), 'Allpages' => array( 'PaġniKollha' ), 'Prefixindex' => array( 'IndiċiPrefiss' ), 'Ipblocklist' => array( 'ListaIPImblukkati' ), + 'Unblock' => array( 'Żblokka' ), 'Specialpages' => array( 'PaġniSpeċjali' ), 'Contributions' => array( 'Kontribuzzjonijiet' ), 'Emailuser' => array( 'IbgħatUtent' ), 'Confirmemail' => array( 'KonfermaPostaElettronika' ), 'Whatlinkshere' => array( 'XiJwassalHawn' ), 'Recentchangeslinked' => array( 'TibdilRelatat' ), - 'Movepage' => array( 'MexxiPaġna' ), + 'Movepage' => array( 'Mexxi', 'MexxiPaġna' ), 'Blockme' => array( 'Imblukkani' ), 'Booksources' => array( 'SorsiKotba' ), 'Categories' => array( 'Kategoriji' ), @@ -115,7 +116,7 @@ $specialPageAliases = array( 'MIMEsearch' => array( 'FittexMIME' ), 'FileDuplicateSearch' => array( 'FittexFajlDuplikat' ), 'Unwatchedpages' => array( 'PaġniMhuxOsservati' ), - 'Listredirects' => array( 'ListaRiindirizzi' ), + 'Listredirects' => array( 'ListaRindirizzi', 'ListaRiindirizzi' ), 'Revisiondelete' => array( 'ĦassarReviżjoni' ), 'Unusedtemplates' => array( 'MudelliMhuxUżati' ), 'Randomredirect' => array( 'RiindirizzKwalunkwe' ), @@ -127,13 +128,14 @@ $specialPageAliases = array( 'Popularpages' => array( 'PaġniPopolari' ), 'Search' => array( 'Fittex' ), 'Resetpass' => array( 'BiddelPassword' ), - 'Withoutinterwiki' => array( 'BlaInterwiki' ), + 'Withoutinterwiki' => array( 'PaġniMingħajrInterwiki', 'BlaInterwiki' ), 'MergeHistory' => array( 'WaħħadKronoloġija' ), 'Filepath' => array( 'PostFajl' ), 'Invalidateemail' => array( 'PostaElettronikaInvalida' ), 'Blankpage' => array( 'PaġnaVojta' ), 'LinkSearch' => array( 'FittexĦolqa' ), 'DeletedContributions' => array( 'KontribuzzjonijietImħassra' ), + 'Activeusers' => array( 'UtentiAttivi' ), ); $magicWords = array( @@ -198,11 +200,11 @@ $magicWords = array( 'img_none' => array( '1', 'xejn', 'none' ), 'img_center' => array( '1', 'nofs', 'ċentrali', 'ċentru', 'center', 'centre' ), 'img_framed' => array( '1', 'tilat', 'b\'tilar', 'tilar', 'framed', 'enframed', 'frame' ), - 'img_frameless' => array( '1', 'bla tilar', 'frameless' ), + 'img_frameless' => array( '1', 'bla_tilar', 'frameless' ), 'img_page' => array( '1', 'paġna=$1', 'paġna $1', 'page=$1', 'page $1' ), 'img_upright' => array( '1', 'wieqaf', 'wieqaf=$1', 'wieqaf $1', 'upright', 'upright=$1', 'upright $1' ), 'img_border' => array( '1', 'bordura', 'burdura', 'border' ), - 'img_baseline' => array( '1', 'bażi tal-linja', 'baseline' ), + 'img_baseline' => array( '1', 'bażi_tal-linja', 'baseline' ), 'img_sub' => array( '1', 'bid', 'sub' ), 'img_super' => array( '1', 'tajjeb', 'super', 'sup' ), 'img_top' => array( '1', 'fuq', 'top' ), @@ -282,8 +284,7 @@ $messages = array( 'tog-editsection' => 'L-immodifikar tas-sezzjonijiet permezz tal-ħolqa [editja]', 'tog-editsectiononrightclick' => "L-immodifikar ta' sezzjonijiet bi klikk lemini fuq it-titli tas-sezzjonijiet (bżonn tal-JavaScript)", 'tog-showtoc' => "Uri l-werrej (għal paġni b'iktar minn 3 sezzjonijiet)", -'tog-rememberpassword' => 'Ftakar il-password fuq dan il-kompjuter', -'tog-editwidth' => 'Kabbar il-kaxxa tal-immodifikar għad-daqs massimu', +'tog-rememberpassword' => "Ftakar il-login tiegħi fuq dan il-browżer (għal massimu ta' {{PLURAL:$1|ġurnata|$1 ġurnata}})", 'tog-watchcreations' => "Żid il-paġni li noħloq fil-lista ta' osservazzjoni tiegħi", 'tog-watchdefault' => "Żid il-paġni li nimmodifika fil-lista ta' osservazzjoni personali", 'tog-watchmoves' => "Żid il-paġni li mmexxi fil-lista ta' osservazzjoni tiegħi", @@ -425,31 +426,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Żid diskussjoni', -'vector-action-delete' => 'Ħassar', -'vector-action-move' => 'Mexxi', -'vector-action-protect' => 'Ipproteġi', -'vector-action-undelete' => 'Irkupra', -'vector-action-unprotect' => 'Żblokka', -'vector-namespace-category' => 'Kategorija', -'vector-namespace-help' => 'Għajnuna', -'vector-namespace-image' => 'Fajl', -'vector-namespace-main' => 'Paġna', -'vector-namespace-media' => 'Fajl multimedjali', -'vector-namespace-mediawiki' => 'Messaġġ', -'vector-namespace-project' => "Paġna ta' proġett", -'vector-namespace-special' => 'Paġna speċjali', -'vector-namespace-talk' => 'Diskussjoni', -'vector-namespace-template' => 'Mudell', -'vector-namespace-user' => 'Utent', -'vector-view-create' => 'Oħloq', -'vector-view-edit' => 'Editja', -'vector-view-history' => 'Ara l-kronoloġija', -'vector-view-view' => 'Aqra', -'vector-view-viewsource' => 'Ara s-sors', -'actions' => 'Azzjonijiet', -'namespaces' => 'Spazji tal-isem', -'variants' => 'Varjanti', +'vector-action-addsection' => 'Żid diskussjoni', +'vector-action-delete' => 'Ħassar', +'vector-action-move' => 'Mexxi', +'vector-action-protect' => 'Ipproteġi', +'vector-action-undelete' => 'Irkupra', +'vector-action-unprotect' => 'Żblokka', +'vector-simplesearch-preference' => 'Ippermetti suġġerimenti għat-tfittxija avvanzata (disponibbli biss għall-aspett grafiku Vector)', +'vector-view-create' => 'Oħloq', +'vector-view-edit' => 'Editja', +'vector-view-history' => 'Ara l-kronoloġija', +'vector-view-view' => 'Aqra', +'vector-view-viewsource' => 'Ara s-sors', +'actions' => 'Azzjonijiet', +'namespaces' => 'Spazji tal-isem', +'variants' => 'Varjanti', 'errorpagetitle' => 'Problema', 'returnto' => "Erġa' lura lejn $1.", @@ -670,7 +661,7 @@ Tinsiex tippersonalizza l-[[Special:Preferences|preferenzi]] ta' {{SITENAME}}.", 'yourname' => 'Isem tal-utent:', 'yourpassword' => 'Password:', 'yourpasswordagain' => "Erġa' ikteb il-password:", -'remembermypassword' => 'Ftakar il-login tiegħi fuq dan il-kompjuter', +'remembermypassword' => "Ftakar il-login tiegħi fuq dan il-kompjuter (għal massimu ta' {{PLURAL:$1|ġurnata|$1 ġurnata}})", 'yourdomainname' => 'Id-dominju tiegħek:', 'externaldberror' => "Kien hemm problema esterna ta' awtentiċitá jew m'għandhekx permess neċċessarju sabiex tagħmel aġġornamenti fuq l-aċċess estern.", 'login' => 'Idħol', @@ -687,6 +678,7 @@ Tinsiex tippersonalizza l-[[Special:Preferences|preferenzi]] ta' {{SITENAME}}.", 'gotaccount' => "Diġa għandhek kont? '''$1'''.", 'gotaccountlink' => 'Idħol', 'createaccountmail' => 'bil-posta elettronika', +'createaccountreason' => 'Raġuni:', 'badretype' => 'Il-passwords li daħħalt ma jaqblux.', 'userexists' => 'L-isem tal-utent li daħħalt huwa diġà meħud. Jekk jogħġbok, agħżel isem differenti.', 'loginerror' => 'Problemi fil-login', @@ -709,6 +701,7 @@ Jekk jogħġbok, erġa' pprova.", Jekk jogħġbok, erġa' pprova.", 'passwordtooshort' => 'Il-password trid tkun mill-inqas {{PLURAL:$1|karattru|$1 karattri}} twila u differenti mill-isem tal-utent.', 'password-name-match' => 'Il-password trid tkun differenti mill-isem tal-utent tiegħek.', +'password-login-forbidden' => "L-użu ta' dan l-isem tal-utent u l-password huwa projbit.", 'mailmypassword' => 'Ibgħatli password ġdida', 'passwordremindertitle' => 'Password temporanju ġdid għal {{SITENAME}}', 'passwordremindertext' => 'Xi ħadd (probabbilment int, mill-indirizz IP $1) għamel rikjesta għal password ġdida għal {{SITENAME}} ($4). Password temporanja għall-utent "$2" ġiet maħluqa u din hi "$3". @@ -799,11 +792,12 @@ Jista' jkun li int diġà biddilt il-password, jew għamilt rikjesta għal passw 'showdiff' => 'Uri t-tibdiliet', 'anoneditwarning' => "'''Twissija:''' Ma rnexxilekx tidħol. L-indirizz tal-IP tiegħek se jiġi reġistrat fil-kronoloġija tal-modifikar ta' din il-paġna.", +'anonpreviewwarning' => "''Bħalissa mintix fil-kont tiegħek. Jekk issalva xi modifiki tiegħek, fil-kronoloġija tal-paġna se jiġi reġistrat l-indirizz IP tiegħek.''", 'missingsummary' => "'''Twissija:''' Ma pprovdejt l-ebda taqsira dwar il-modifika. Jekk terġa' tagħfas Modifika, l-modifika se tiġi salvata mingħajr waħda.", 'missingcommenttext' => 'Jekk jogħġbok ħalli kumment hawn taħt.', -'missingcommentheader' => "'''Twissija:''' Ma pprovdejtx suġġett/titlu għal dan il-kumment. -Jekk terġa' tagħfas Modifika, l-modifika tiegħek se tiġi salvata mingħajr waħda.", +'missingcommentheader' => "'''Twissija:''' Ma ġie speċifikat l-ebda suġġett/titlu għal dan il-kumment. +Jekk terġa' tagħfas \"{{int:savearticle}}\", il-modifika tiegħek se tiġi salvata mingħajr wieħed.", 'summary-preview' => 'Dehra proviżorja tat-taqsira:', 'subject-preview' => 'Dehra proviżorja tat-taqsira/suġġett:', 'blockedtitle' => 'L-utent ġie bblokkjat', @@ -873,8 +867,10 @@ L-aħħar daħla fir-reġistru tal-imblokki hi mogħtiha hawn taħt għal refere 'userjsyoucanpreview' => "'''Suġġeriment:''' Uża l-buttuna \"{{int:showpreview}}\" sabiex tipprova l-JavaScript il-ġdid tiegħek qabel ma ssalvah.", 'usercsspreview' => "'''Ftakar li inti qed turi dehra proviżorja tas-CSS personali. Il-modifiki li għamilt għadhom ma ġewx salvati!'''", 'userjspreview' => "'''Ftakar li inti qiegħed biss tipprova/tara dehra proviżorja tal-JavaScript personali; il-modifiki li għamilt għad iridu jiġu salvati!'''", +'sitecsspreview' => "'''Ftakar li din hija biss dehra proviżorja tas-CSS. Il-modifiki għadhom ma ġewx salvati!'''", +'sitejspreview' => "'''Ftakar li din hija biss dehra proviżorja tal-JavaScript. Il-modifiki għadhom ma ġewx salvati!'''", 'userinvalidcssjstitle' => "'''Twissija:''' M'hemm l-ebda skin bl-isem \"\$1\". -Ftakar li l-paġni .css u .js personalizzati għandhom l-ewwel ittra tat-titlu żgħira, eż. {{ns:user}}:Foo/monobook.css u mhux {{ns:user}}:Foo/Monobook.css.", +Ftakar li l-paġni .css u .js personalizzati għandhom l-ewwel ittra tat-titlu żgħira, eż. {{ns:user}}:Foo/vector.css u mhux {{ns:user}}:Foo/Vector.css.", 'updated' => '(Aġġornata)', 'note' => "'''Nota:'''", 'previewnote' => "'''Ftakar li din hija biss dehra proviżorja, u li għadha ma ġietx salvata!'''", @@ -892,11 +888,11 @@ Din il-modifika ma ġietx aċċettata sabiex ma jkunx hemm żballji fit-test tal 'editingsection' => "Modifika ta' $1 (sezzjoni)", 'editingcomment' => 'Qed jiġi editjat $1 (sezzjoni ġdida)', 'editconflict' => "Kunflitt t'editjar: $1", -'explainconflict' => "Xi ħadd modifika din il-paġna sakemm int kont qiegħed tagħmel il-modifiki. -Fiż-Żona tal-modifika superjuri jinsab il-kliem tal-paġna kif teżisti bħalissa, kif ġiet modifikata mill-utent l-ieħor. -Il-Verżjoni bil-modifiki tiegħek jinsab fiż-żona ta' modifika inferjuri. -Jekk trid il-modifiki tiegħek jiġu salvati, inti trid tgħaqqad il-modifiki tiegħek mat-test kif jeżisti bħalissa fiż-żona superjuri. -Meta tagħfas ''Modifika'', se jiġi salvat '''biss''' it-test li jinsab fiż-żona superjuri.", +'explainconflict' => "Utent ieħor biddel il-paġna meta inti kont qiegħed tagħmel il-modifiki tiegħek. +Il-kaxxa tal-modifika ta' fuq turi t-test tal-paġna kif inhu bħalissa. +Il-bidliet li għamilt huma fin-naħa t'isfel. +Jekk trid il-modifiki tiegħek jiġu salvati, hemm bżonn li tgħaqqad il-modifiki personali ma' dawk eżistenti (fil-kaxxa ta' fuq) +Meta tagħfas il-buttuna \"{{int:savearticle}}\", se jiġi salvat '''biss''' it-test li jinsab fil-kaxxa tal-modifika ta' fuq.", 'yourtext' => 'It-test tiegħek', 'storedversion' => 'Il-verżjoni maħżuna', 'nonunicodebrowser' => "'''TWISSIJA: Il-Browser tiegħek m'għandux sapport għal unicode. @@ -914,9 +910,6 @@ Jekk inti tixtieq li l-kitba tiegħek ma tiġiex modifikata jew mqassma, jekk jo Inti qiegħed ukoll qiegħed twiegħed li ktibt dan ix-xogħol int, jew ġibtu minn dominazzjoni pubblika jew resorsi b'xejn simili. (ara $1 għal aktar informazzjoni)

    '''TAGĦMILX MODIFIKI LI JINKLUDU XOGĦOL TA' ĦADDIEĦOR BLA PERMESS!'''", -'longpagewarning' => "'''TWISSIJA: Din il-paġna hija $1 kb twila; -ċerta browsers jista' jkollhom problemi biex jagħmlu modifiki lil paġni li qegħdin lejn jew aktar minn 32 kb. -Jekk jogħġbok konsidra taqsam din il-paġna f'sezzjonijiet iż-żgħar.'''", 'longpageerror' => "'''PROBLEMA: Il-Modifika li għamilt hija twila $1 ''kilobyte'', li hija aktar mill-massimu ta' $2 ''kilobyte''. Il-Modifiki ma jistgħux jiġu salvati.'''", 'readonlywarning' => "'''TWISSIJA: Id-databażi ġiet imblukkata għall-manutenzjoni, u għaldaqstant m'huwiex possibbli li ssalva l-modifiki tiegħek dal-ħin. Biex ma titlifhomx, għalissa salva xogħlok ġo fajl u ġaladarba terġa' tinfetaħ id-databażi, ikkopja kollox. Grazzi.''' @@ -1015,7 +1008,7 @@ Jista' jkun li ġiet imħassra mill-wiki, jew imsemmija mill-ġdid. Prova [[Special:Search|fittex fuq il-wiki]] għal paġni relevanti ġodda.", # Revision deletion -'rev-deleted-comment' => '(tneħħa l-kumment)', +'rev-deleted-comment' => '(tneħħija tat-taqsira)', 'rev-deleted-user' => '(l-isem tal-utent tneħħa)', 'rev-deleted-event' => '(azzjoni tal-log tneħħa)', 'rev-deleted-user-contribs' => '[isem tal-utent jew indirizz IP imneħħi - il-modifika ġie moħbiha mill-kronoloġija]', @@ -1030,6 +1023,8 @@ Dettalji jistgħu jinstabu fuq ir-[{{fullurl:{{#Special:Log}}/suppress|page={{FU Bħala amministratur inti tista' taraha; jista' jkun li hemm dettalji fir-[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} reġistru tat-tħassir].", 'rev-suppressed-text-view' => "Ir-reviżjoni ta' din il-paġna ġiet '''imħassra'''. Bħala amministratur inti xorta waħda tista' taraha; dettalji jistgħu jinstabu fuq ir-[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} reġistru tat-tħassir].", +'rev-deleted-no-diff' => "Mhuwiex possibbli illi tara dan il-konfront bejn verżjonijiet differenti minħabba li waħda mir-reviżjonijiet ġiet '''imħassra'''. +Ikkonsulta r-[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} reġistru tat-tħassir] għal aktar dettalji.", 'rev-delundel' => 'uri/aħbi', 'rev-showdeleted' => 'uri', 'revisiondelete' => 'Ħassar/irkupra reviżjonijiet', @@ -1263,6 +1258,7 @@ Innota però li l-werreja tal-kontenut ta' {{SITENAME}} f'dawn is-siti, jistgħu 'prefs-files' => 'Fajls', 'prefs-custom-css' => 'CSS personalizzat', 'prefs-custom-js' => 'JS personalizzat', +'prefs-common-css-js' => 'CSS/JS maqsum għal kull aspett grafiku:', 'prefs-emailconfirm-label' => 'Konferma tal-ittra-e:', 'prefs-textboxsize' => 'Daqs tat-tieqa tal-modifika', 'youremail' => 'E-mail:', @@ -1297,7 +1293,7 @@ Innota però li l-werreja tal-kontenut ta' {{SITENAME}} f'dawn is-siti, jistgħu 'prefs-advancedrendering' => 'Opzjonijiet avvanzati', 'prefs-advancedsearchoptions' => 'Opzjonijiet avvanzati', 'prefs-advancedwatchlist' => 'Opzjonijiet avvanzati', -'prefs-display' => "Opzjonijiet ta' viżwalizazzjoni", +'prefs-displayrc' => "Opzjonijiet ta' viżwalizazzjoni", # User rights 'userrights' => 'Ġestjoni tad-drittijiet tal-utent', @@ -1436,14 +1432,9 @@ Innota però li l-werreja tal-kontenut ta' {{SITENAME}} f'dawn is-siti, jistgħu 'recentchanges-legend' => 'Opzjonijiet tat-tibdil riċenti', 'recentchangestext' => 'Din il-paġna turi l-modifiki l-aktar riċenti għal kontenut tas-sit.', 'recentchanges-feed-description' => "Dan il-feed jirraporta l-modifiki l-aktar riċenti fil-kontenut ta' dan is-sit.", -'recentchanges-label-legend' => 'Leġġenda: $1.', -'recentchanges-legend-newpage' => '$1 - paġna ġdida', 'recentchanges-label-newpage' => 'Din il-modifika ħolqot paġna ġdida', -'recentchanges-legend-minor' => '$1 - modifika minuri', 'recentchanges-label-minor' => 'Din hi modifika minuri', -'recentchanges-legend-bot' => "$1 - modifika ta' bot", 'recentchanges-label-bot' => 'Din il-modifika ġiet effettwata minn bot', -'recentchanges-legend-unpatrolled' => '$1 - modifika mhux verifikata', 'recentchanges-label-unpatrolled' => 'Din il-modifika għadha ma ġietx verifikata', 'rcnote' => "Hawn taħt {{PLURAL:$1|tinsab l-aktar modifika riċenti|jinsabu l-'''$1''' modifiki riċenti}} għas-sit fl-aħħar {{PLURAL:$2|24 siegħa|'''$2''' ġranet}}, id-dati ġew aġġornati fil-$5 ta' $4.", 'rcnotefrom' => "Ħawn taħt jinsabu l-modifiki minn '''$2''' (sa '''$1''').", @@ -1544,7 +1535,6 @@ Jekk jogħġbok mur lura u tella' dan il-fajl b'isem ġdid. [[File:$1|thumb|cent 'fileexists-shared-forbidden' => "Fajl b'dan l-isem diġà jeżisti fl-arkivju tar-riżorsi multimedjali maqsuma. Jekk tixtieq xorta waħda li ttella' l-fajl, mur lura u tella' fajl b'isem ġdid. [[File:$1|thumb|center|$1]]", 'file-exists-duplicate' => "Dan il-fajl huwa duplikat ta' {{PLURAL:$1|dan il-fajl|dawn il-fajls}} segwenti:", 'file-deleted-duplicate' => "Fajl identiku għal dan ([[:$1]]) ġie mħassar fil-passat. Iċċekja qabel xejn il-kronoloġija tat-tħassir qabel ma tkompli ttella' l-fajl.", -'successfulupload' => "Mtella' b'suċċess", 'uploadwarning' => 'Twissija dwar it-tlugħ tal-fajls', 'savefile' => 'Salva l-fajl', 'uploadedimage' => 'tella\' "[[$1]]"', @@ -1582,6 +1572,9 @@ JD # Jenoptik MGP # Pentax PICT # misc. # ', +'upload-success-subj' => "Mtella' b'suċċess", +'upload-success-msg' => 'It-tlugħ tal-fajl minn [$2] irnexxa. Il-fajl tiegħek huwa disponibbli hawnhekk: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problem fit-tlugħ tal-fajl', 'upload-proto-error' => 'Protocol ħażin', 'upload-proto-error-text' => "Għal upload remote huwa neċessarju tispeċifika l-URL li jibda' b'http:// jew ftp://.", @@ -1720,7 +1713,6 @@ Daħħal: tip/sottotip, eż. image/jpeg.", 'statistics-edits-average' => "Medja ta' modifiki għal kull paġna", 'statistics-views-total' => "Total ta' viżti", 'statistics-views-peredit' => 'Viżti għal kull modifika', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Kju tax-xogħlijiet] li jridu jiġu esegwiti fl-isfond', 'statistics-users' => '[[Special:ListUsers|Utenti]] reġistrati', 'statistics-users-active' => 'Utenti attivi', 'statistics-mostpopular' => 'Il-paġni l-aktar miżjura', @@ -1863,6 +1855,7 @@ Ara wkoll il-[[Special:WantedCategories|kategoriji rikjesti]].', 'listusersfrom' => 'Uri utenti li jibdew minn:', 'listusers-submit' => 'Uri', 'listusers-noresult' => 'l-Ebda utent insab għal din il-kriterja.', +'listusers-blocked' => '(imblukkat)', # Special:ActiveUsers 'activeusers' => 'Lista tal-utenti attivi', @@ -1915,7 +1908,6 @@ Jista' jkun hemm [[{{MediaWiki:Listgrouprights-helppage}}|aktar informazzjoni]] # Watchlist 'watchlist' => "Lista ta' osservazzjoni tiegħi", 'mywatchlist' => 'li qed insegwi', -'watchlistfor' => "(għal '''$1''')", 'nowatchlist' => "Il-lista ta' osservazzjoni tiegħek hija vojta.", 'watchlistanontext' => "Sabiex tara u timmodifika l-lista ta' osservazzjoni tiegħek, hemm bżonn li $1.", 'watchnologin' => 'Għadek ma dħaltx ġewwa', @@ -2031,7 +2023,9 @@ L-iktar modifika riċenti fuq dil-paġna saret minn [[User:$3|$3]] ([[User talk: 'revertpage' => "Modifiki mneħħa minn [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) għall-aħħar verżjoni ta' [[User:$1|$1]]", 'rollback-success' => "Modifiki mneħħa ta' $1; Modifikata lura għall-aħħar verżjoni ta' $2.", -'sessionfailure' => "Ġie verifikat problema fis-sessjoni tal-aċċess; din l-azzjoni ġiet imħassra bħalha prekawzjoni. Mur lura fil-paġna preċedenti bl-użu tal-buttuna 'Lura' tal-browser, niżżel il-paġna mill-ġdid u erġa' prova.", + +# Edit tokens +'sessionfailure' => "Ġie verifikat problema fis-sessjoni tal-aċċess; din l-azzjoni ġiet imħassra bħalha prekawzjoni. Mur lura fil-paġna preċedenti bl-użu tal-buttuna 'Lura' tal-browser, niżżel il-paġna mill-ġdid u erġa' prova.", # Protect 'protectlogpage' => 'Protezzjoni', @@ -2107,6 +2101,7 @@ Int jista' jkollhok link ħażin, jew jista' jkun li ir-reviżjoni ġie rkuprat 'undelete-nodiff' => 'L-ebda reviżjoni preċedenti ma ġiet misjuba.', 'undeletebtn' => 'Irkupra', 'undeletelink' => 'uri/irkupra', +'undeleteviewlink' => 'uri', 'undeletereset' => 'Irrisettja', 'undeleteinvert' => 'Inverti s-selezzjoni', 'undeletecomment' => 'Raġuni:', @@ -2219,7 +2214,6 @@ Ara l-[[Special:IPBlockList|lista tal-IP imblukkati]] biex tara l-blokki attivi. 'ipb-edit-dropdown' => 'Immodifika r-raġunijiet tal-imblukkar', 'ipb-unblock-addr' => 'Żblokkja $1', 'ipb-unblock' => 'Żblokka isem tal-utent jew indirizz IP', -'ipb-blocklist-addr' => 'Uri l-blokki attivi għal $1', 'ipb-blocklist' => 'Uri l-blokki eżistenti', 'ipb-blocklist-contribs' => "Kontribuzzjonijiet ta' $1", 'unblockip' => 'Żblokkja l-utent', @@ -2257,35 +2251,38 @@ Ara l-[[Special:IPBlockList|lista tal-IP imblukkati]] biex tara l-blokki attivi. 'block-log-flags-nocreate' => 'ħolqien tal-kont imblukkat', 'block-log-flags-noautoblock' => 'blokkar awtomatiku disattivat', 'block-log-flags-noemail' => 'posta elettronika imblukkata', +'block-log-flags-nousertalk' => "ma jistax jimmodifika l-paġna ta' diskussjoni personali", 'block-log-flags-angry-autoblock' => 'blokkar awtomatiku avvanzat attivat', 'block-log-flags-hiddenname' => 'l-isem tal-utent huwa moħbi', -'range_block_disabled' => "Il-Possibilitá li timblokka intervali ta' indirizzi tal-IP mhux attiva bħalissa.", +'range_block_disabled' => "Il-possibilità li timblokka firxa ta' indirizzi IP mhux attiva bħalissa.", 'ipb_expiry_invalid' => "Il-ħin ta' skadenza huwa invalidu.", -'ipb_expiry_temp' => "Blokkijiet ta' ismijiet ta' l-utent moħbija rridu jkunu permanenti.", -'ipb_already_blocked' => 'L-utent "$1" diġà bblokkjat', +'ipb_expiry_temp' => "Blokkijiet ta' ismijiet ta' l-utent moħbija jridu jkunu permanenti.", +'ipb_hide_invalid' => "Ma jistax jitneħħa l-kont; jista' jkun li għandu ħafna modifiki.", +'ipb_already_blocked' => 'L-utent "$1" diġà imblukkat', 'ipb-needreblock' => '== Diġà imblukkat == L-utent $1 hu diġà imblukkat. Trid tbiddel l-impostazzjonijet?', 'ipb-otherblocks-header' => '{{PLURAL:$1|Blokk ieħor|Blokki oħra}}', 'ipb_cant_unblock' => 'Problema: Impossibli ssib il-blokk bl-ID $1. L-Imblokk setgħa jkun ġa sblokkat.', 'ipb_blocked_as_range' => "Problema: L-Indirizz tal-IP $1 ma jistax jiġi blokkat waħdu u ma jistax jiġi sblokkat. L-Imblokk huwa attiv però f'livell ta' interval $2, li jista' jkun sblokkat.", 'ip_range_invalid' => "Interval ta' indirizzi ta' IP mhux validi.", +'ip_range_toolarge' => "Mhumiex permessi firxa ta' blokki ikbar minn /$1.", 'blockme' => 'Imblukkani', 'proxyblocker' => "Blokki ta' proxy miftuħa", 'proxyblocker-disabled' => 'Din il-funzjoni mhijiex attivata.', -'proxyblockreason' => "L-Indirizz tal-IP tiegħek ġie bblokkjat peress li huwa proxy miftuħ. -Jekk jogħġbok, ikkuntattja lill-provdituri tas-servizz tal-internet jew lis-support tekniku tiegħek u informahom b'din il-problema serja ta' sigurtà.", -'proxyblocksuccess' => 'Blokkjat.', -'sorbsreason' => "L-Indirizz tal-IP tiegħek huwa mniżżel bħala proxy miftuħ fil-DNSBL ta' {{SITENAME}}.", -'sorbs_create_account_reason' => 'Mhux possibli toħloq aċċessi ġodda minn dan l-indirizz tal-IP minħabba li huwa mniżżel bħala proxy miftuħ fil-DNSBL użat minn {{SITENAME}}.', +'proxyblockreason' => "L-indirizz IP tiegħek ġie imblukkat peress li huwa proxy miftuħ. Jekk jogħġbok, ikkuntattja lill-provdituri tas-servizz tal-internet (ISP) jew lis-''support'' tekniku tiegħek u infurmahom b'din il-problema serja ta' sigurtà.", +'proxyblocksuccess' => 'Blokk esegwit.', +'sorbsreason' => 'L-indirizz IP tiegħek huwa mniżżel bħala proxy miftuħ fid-DNSBL użat minn {{SITENAME}}.', +'sorbs_create_account_reason' => 'L-indirizz IP tiegħek huwa mniżżel bħala proxy miftuħ fid-DNSBL użat minn {{SITENAME}}. Ma tistax toħloq kont.', 'cant-block-while-blocked' => 'Ma tistax timblokka lil utenti oħra waqt li inti mblukkat.', -'cant-see-hidden-user' => 'L-utent li qiegħed tipprova timblokk diġà ġie imblukkat u moħbi. +'cant-see-hidden-user' => 'L-utent li qiegħed tipprova timblokka diġà ġie imblukkat u moħbi. Minħabba li inti m\'għandikx id-dritt li "taħbi \'l-utent", ma tistax tara jew timmodifika l-blokk tal-utent.', +'ipbblocked' => 'Ma tistax timblokka jew tiżblokka utenti oħra, minħabba li inti stess tinsab imblukkat', +'ipbnounblockself' => "M'għandekx il-permess li tiżblokka lilek innifsek", # Developer tools -'lockdb' => 'Agħlaq id-database', -'unlockdb' => 'Iftaħ id-database', -'lockdbtext' => "Tagħlaq id-database se jisuspendi l-abbilitá ta' kull utent li jagħmlu modifiki fil-paġni, modifika l-preferenzi tagħhom, modifika l-osservazzjonijiet speċjali tagħhom, u affarijiet oħra li għadnhom bżonn modifika fid-database. -Jekk jogħġbok konferma li dan huwa li tixtieq li tagħmel, u li se tiftaħ id-database wara li l-manteniment ikun lest.", +'lockdb' => 'Agħlaq id-databażi', +'unlockdb' => 'Iftaħ id-databażi', +'lockdbtext' => "L-imblukkar tad-databażi iwassal għall-interuzzjoni, għall-utenti kollha, tal-possibilità li jimmodifikaw il-paġni jew li joħolqu oħrajn ġodda, li jbiddlu l-preferenzi tagħhom u jimmodifikaw l-elenki tal-paġni taħt osservazzjoni, u ġeneralment kull operazzjoni li għandha bżonn ta' modifiki fid-databażi. Jekk jogħġbok, ikkonferma li dan jikkorispondi effettivament għall-azzjoni li ġie rikjesta għalik u li fi tmiem il-manuntenzjoni terġa' tiżblokka d-databażi.", 'unlockdbtext' => "Tiftaħ id-database se jirkupra l-abbilità ta' kull utent li jagħmlu modifiki mill-ġdid, jagħmlu modifiki fil-preferenzi, modifiki fl-osservazzjonijiet speċjali, u affarijiet oħra li għandhom bżonn modifika fid-database. Jekk jogħġbok konferma mill-ġdid li dan huwa li tixtieq li tagħmel.", 'lockconfirm' => 'Iva, ċert li rrid nagħlaq id-database.', @@ -2344,7 +2341,7 @@ Jekk jogħġbok, waħħad iż-żewġ paġni manwalment.'''", '1movedto2' => '[[$1]] tmexxa lejn [[$2]]', '1movedto2_redir' => "[[$1]] tmexxa lejn [[$2]] permezz ta' riindirizzament", 'move-redirect-suppressed' => 'rindirizz mrażżan', -'movelogpage' => 'Ċaqlieq', +'movelogpage' => "Reġistru tat-tmexxija ta' paġni", 'movelogpagetext' => "Hawn taħt jinsab lista ta' paġni mċaqilqa.", 'movesubpage' => '{{PLURAL:$1|Sottopaġna|Sottopaġna}}', 'movenosubpage' => "Din il-paġna m'għandha l-ebda sottopaġna.", @@ -2643,10 +2640,10 @@ $1', 'imagemaxsize' => "Daqs massimu tal-istampa:
    ''(għall-paġni ta' deskrizzjoni tal-fajl)''", 'thumbsize' => 'Daqs tal-minjatura:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|paġna|paġni}}', -'file-info' => "(Dimensjoni: $1, tip ta' MIME: $2)", -'file-info-size' => "($1 × $2 pixel, dimensjoni: $3, tip ta' MIME: $4)", +'file-info' => "Dimensjoni: $1, tip ta' MIME: $2", +'file-info-size' => "$1 × $2 pixel, dimensjoni: $3, tip ta' MIME: $4", 'file-nohires' => "Mhux disponibli verżjonijiet b'risoluzzjoni akbar.", -'svg-long-desc' => '(Fajl fil-format SVG, dimensjoni nominali $1 × $2 pixel, dimensjoni tal-fajl: $3)', +'svg-long-desc' => 'Fajl fil-format SVG, dimensjoni nominali $1 × $2 pixel, dimensjoni tal-fajl: $3', 'show-big-image' => "Verżjoni b'risoluzzjoni sħiħa", 'show-big-image-thumb' => 'Dimensjoni tal-previżjoni: $1 × $2 pixel', @@ -3169,10 +3166,20 @@ Daħħal l-isem tal-fajl mingħajr il-prefiss \"{{ns:file}}:\".", 'tag-filter-submit' => 'Filtru', 'tags-edit' => 'editja', +# Special:ComparePages +'comparepages' => 'Qabbel il-paġni', +'compare-selector' => "Ikkumpara reviżjonijiet ta' paġna", +'compare-page1' => 'Paġna 1', +'compare-page2' => 'Paġna 2', +'compare-rev1' => 'Reviżjoni 1', +'compare-rev2' => 'Reviżjoni 2', +'compare-submit' => 'Qabbel', + # Database error messages 'dberr-header' => 'Din il-wiki għandha problema', 'dberr-problems' => 'Jiddispjaċina! Dan is-sit għandu diffikultajiet tekniċi.', 'dberr-again' => "Prova stenna ftit minuti u erġa' tella' l-paġna.", +'dberr-info' => '(Impossibbli li jsir kuntratt mas-server tad-databażi: $1)', # HTML forms 'htmlform-invalid-input' => "Hemm xi problemi f'dak li daħħalt", diff --git a/languages/messages/MessagesMwl.php b/languages/messages/MessagesMwl.php index f01d6770..0eac51ba 100644 --- a/languages/messages/MessagesMwl.php +++ b/languages/messages/MessagesMwl.php @@ -93,8 +93,7 @@ $messages = array( 'tog-editsection' => "Possiblitar l'eidiçon de cachos cun lhigaçones [eiditar]", 'tog-editsectiononrightclick' => "Posseblitar l'eidiçon de cachos por clique cul boton dreito ne l títalo de la seçon (JavaScrit)", 'tog-showtoc' => 'Amostrar índice (para páiginas cun mais de trés cachos)', -'tog-rememberpassword' => 'Recordar la mie palabra-chabe antre sessones', -'tog-editwidth' => "Oumentar l'anchura de la caixa d'eidiçon para prencher toda la pantalha", +'tog-rememberpassword' => 'Recordar la mie palabra-chabe antre sessones (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Ajuntar las páiginas que you criar a las minhas páiginas begiadas', 'tog-watchdefault' => 'Ajuntar las páiginas que you eiditar a las minhas páiginas begiadas', 'tog-watchmoves' => ' Ajuntar las páiginas que you mober a las minhas páiginas begiadas', @@ -374,7 +373,7 @@ Puode tener un ó mais carateres que nun puoden ser outelizados an títalos.', 'yourname' => 'Nome de Outelizador', 'yourpassword' => 'Palabra chabe', 'yourpasswordagain' => 'Repite la tue palabra-chabe', -'remembermypassword' => 'Lhembrar-se de mi neste cumputador', +'remembermypassword' => 'Lhembrar-se de mi neste cumputador (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'L tou domínio', 'login' => 'Antrar', 'nav-login-createaccount' => 'Antrar / criar cuonta', @@ -494,9 +493,6 @@ Tu puodes [[Special:Search/{{PAGENAME}}|percurar pul títalo desta páigina]] no 'copyrightwarning' => "Por fabor, bei que todas las tues cuntribuiçones an {{SITENAME}} son cunsideradas cumo feitas ne ls termos de la lhicença $2 (bei $1 pa detailhes). Se nun quieres que l tou testo seia eiditado sin piedade i reçtribuído cunsante la gana, nun l ambies.
    Tu stás, al mesmo tiempo, a garantir-mos qu'esto ye algo screbido por ti, ó algo copiado d'ua fuonte de testos an domínio público ó parecido de teor lhibre. '''NUN AMBIES TRABALHO PORTEGIDO POR DREITOS D'OUTOR SIEN L DEBIDO PERMISSO!'''", -'longpagewarning' => "'''Abiso: Esta páigina ten$1 kilobytes; alguns -nabegadores de la anternete ténen porblemas al eiditar páiginas cun mais de 32 kb. -Por fabor, pensa an scachar la páigina an cachos mais pequeinhos.'''", 'templatesused' => '{{PLURAL:$1|Modelo ousado|Modelos ousados}} nesta páigina:', 'templatesusedpreview' => '{{PLURAL:$1|Modelo outelizado|Modelos outelizados}} neste amostra:', 'template-protected' => '(portegida)', @@ -671,8 +667,6 @@ Causo l çponiblizes, este será outelizado pa te dar crédito pul tou trabalho. 'recentchanges' => 'Redadeiras altaraçones', 'recentchanges-legend' => 'Oupçones de las redadeiras altaraçones', 'recentchanges-feed-description' => 'Acumpanha las redadeiras altaraçones de l biqui por esta semiente.', -'recentchanges-legend-newpage' => '$1 - nuoba páigina', -'recentchanges-legend-minor' => '$1 - eidiçon pequerrixa', 'rcnote' => "A seguir {{PLURAL:$1|stá listada '''ua''' altaraçon feita|stan '''$1''' altaraçones feitas}} {{PLURAL:$2|ne l redadeiro die|ne ls redadeiros '''$2''' dies}}, a partir de las $5 de $4.", 'rcnotefrom' => 'Alteraçones feitas zde $2 (amostradas até $1).', 'rclistfrom' => 'Amostrar las noubas altaraçones a partir de $1', @@ -879,7 +873,6 @@ Páiginas que steian ne ls [[Special:Watchlist|tous begiados]] son amostradas an # Watchlist 'watchlist' => 'Ls mius begiados', 'mywatchlist' => 'Las mies páiginas begiadas', -'watchlistfor' => "(para '''$1''')", 'addedwatch' => 'Ajuntada a las páiginas begiadas', 'addedwatchtext' => "La páigina \"[[:\$1]]\" fui ajuntada a la tue [[Special:Watchlist|lista de páiginas begiadas]]. Altaraçones feturas na tal páigina i páiginas de çcusson a eilha associadas seran listadas alhá, cun la páigina aparecendo a '''negrito''' na [[Special:RecentChanges|lista de redadeiras altaraçones]], para que se pouda ancuntrar cun maior facelidade.", @@ -1127,9 +1120,9 @@ Premite ajuntar la rezon de la eidiçon ne l sumário.', 'nextdiff' => 'Redadeira eidiçon →', # Media information -'file-info-size' => '($1 × $2 pixel, tamanho: $3, tipo MIME: $4)', +'file-info-size' => '$1 × $2 pixel, tamanho: $3, tipo MIME: $4', 'file-nohires' => 'Sin resoluçon maior çponible.', -'svg-long-desc' => '(fexeiro SVG, de $1 × $2 pixeles, tamanho: $3)', +'svg-long-desc' => 'fexeiro SVG, de $1 × $2 pixeles, tamanho: $3', 'show-big-image' => 'Resoluçon cumpleta', 'show-big-image-thumb' => 'Tamanho desta prebison: $1 × $2 pixeles', diff --git a/languages/messages/MessagesMy.php b/languages/messages/MessagesMy.php index c3083e50..d17fafb9 100644 --- a/languages/messages/MessagesMy.php +++ b/languages/messages/MessagesMy.php @@ -20,6 +20,7 @@ * @author Purodha * @author Thanlwin * @author Thitaung + * @author Umherirrender * @author Zawthet * @author ကိုရာဝီ */ @@ -43,14 +44,14 @@ $datePreferences = array( 'my long', 'ISO 8601', ); - + $defaultDateFormat = 'my normal'; - + $dateFormats = array( 'my normal time' => 'H:i', 'my normal date' => 'j F Y', 'my normal both' => ' H:i"၊" j F Y', - + 'my long time' => 'H:i', 'my long date' => 'Y "ဇန်နဝါရီ" F"လ" j "ရက်"', 'my long both' => 'H:i"၊" Y "ဇန်နဝါရီ" F"လ" j "ရက်"', @@ -68,7 +69,7 @@ $messages = array( 'tog-numberheadings' => 'ခေါင်းစဉ်များ အား စေ့ဆော်ချက်အတိုင်း လုပ်ဆောင်ရန်', 'tog-showtoolbar' => 'ပြုပြင်ရန် ကိရိယာများ (JavaScript လိုအပ်သည်)', 'tog-editondblclick' => 'ကလစ်နှစ်ခါနှိပ်လျှင် စာမျက်နှာအားပြုပြင်ပါ (JavaScript လိုအပ်သည်)', -'tog-rememberpassword' => 'ဤ​ကွန်​ပျူ​တာ​တွင်​ကျွန်​တော့​ကို​မှတ်​ထား​ပါ​', +'tog-rememberpassword' => 'ဤကွန်ပျူတာတွင် ကျွန်ုပ်ကိုမှတ်ထားရန် (အများဆုံး $1 {{PLURAL:$1|ရက်|ရက်}}ကြာ)', 'tog-watchcreations' => 'ကျွန်ုပ်စတင်ရေးသားခဲ့သည့်စာမျက်နှာများကို စောင့်​ကြည့်​စာ​ရင်း​ထဲ ပေါင်းထည့်ပါ', 'tog-watchdefault' => 'ကျွန်ုပ် တည်းဖြတ်ခဲ့သည့် စာမျက်နှာများကို စောင့်ကြည့်စာရင်းသို့ ပေါင်းထည့်ပါ။', 'tog-watchmoves' => 'ကျွန်ုပ်ရွှေ့လိုက်သော စာမျက်နှာများကို စောင့်ကြည့်စာရင်းသို့ ပေါင်းထည့်ရန်', @@ -83,6 +84,7 @@ $messages = array( 'tog-enotifrevealaddr' => ' အသိပေးချက်အီးမေးများတွင် ကျွန်ုပ်၏ အီးမေးလိပ်စာကို ဖော်ပြရန်', 'tog-shownumberswatching' => 'စောင့်ကြည့်နေသော အသုံးပြုသူအရေအတွက်ကို ပြရန်', 'tog-oldsig' => 'ရှိနှင့်ပြီးသား လက်မှတ်၏ နမူနာ -', +'tog-forceeditsummary' => 'တည်းဖြတ်အတိုချုပ် ဗလာဖြစ်နေလျှင် သတိပေးရန်', 'tog-watchlisthideown' => 'ကျွန်ုပ်၏ တည်းဖြတ်မှုများကို စောင့်ကြည့်စာရင်းမှ ဝှက်ထားရန်', 'tog-watchlisthidebots' => 'ဘော့တည်းဖြတ်မှုများကို စောင့်ကြည့်စာရင်းမှ ဝှက်ထားရန်', 'tog-watchlisthideminor' => 'အရေးမကြီးသော တည်းဖြတ်မှုများကို စောင့်ကြည့်စာရင်းမှ ဝှက်ထားရန်', @@ -195,29 +197,20 @@ $messages = array( 'faqpage' => 'Project:မေးလေ့ရှိကြသည်များ', # Vector skin -'vector-action-addsection' => 'အကြောင်းအရာအသစ် ထပ်ထည့်ရန်', -'vector-action-delete' => 'ဖျက်​ပါ​', -'vector-action-move' => 'ရွှေ့ပါ', -'vector-action-protect' => 'ထိမ်း​သိမ်း​ပါ​', -'vector-action-undelete' => 'မဖျက်တော့ရန်', -'vector-action-unprotect' => 'မကာကွယ်တော့ရန်', -'vector-namespace-image' => 'ဖိုင်', -'vector-namespace-main' => 'စာမျက်နှာ', -'vector-namespace-media' => 'မီဒီယာ စာမျက်နှာ', -'vector-namespace-mediawiki' => 'စာသား', -'vector-namespace-project' => 'ပရောဂျက်စာမျက်နှာ', -'vector-namespace-special' => 'အထူးစာမျက်နှာ', -'vector-namespace-talk' => 'ဆွေးနွေးချက်များ', -'vector-namespace-template' => 'တမ်းပလိတ်', -'vector-namespace-user' => 'အ​သုံး​ပြု​သူ​၏ ​စာ​မျက်​နှာ​', -'vector-view-create' => 'စတင်ရေးသားရန်', -'vector-view-edit' => 'ပြင်ရန်', -'vector-view-history' => 'ရာဇဝင်ကြည့်ရန်', -'vector-view-view' => 'ဖတ်ရန်', -'vector-view-viewsource' => 'ရင်းမြစ်ကို ကြည့်ရန်', -'actions' => 'ဆောင်ရွက်ချက်များ', -'namespaces' => 'အမည်ညွှန်းများ', -'variants' => 'အမျိုးမျိုးအပြားပြား', +'vector-action-addsection' => 'အကြောင်းအရာအသစ် ထပ်ထည့်ရန်', +'vector-action-delete' => 'ဖျက်​ပါ​', +'vector-action-move' => 'ရွှေ့ပါ', +'vector-action-protect' => 'ထိမ်း​သိမ်း​ပါ​', +'vector-action-undelete' => 'မဖျက်တော့ရန်', +'vector-action-unprotect' => 'မကာကွယ်တော့ရန်', +'vector-view-create' => 'စတင်ရေးသားရန်', +'vector-view-edit' => 'ပြင်ရန်', +'vector-view-history' => 'ရာဇဝင်ကြည့်ရန်', +'vector-view-view' => 'ဖတ်ရန်', +'vector-view-viewsource' => 'ရင်းမြစ်ကို ကြည့်ရန်', +'actions' => 'ဆောင်ရွက်ချက်များ', +'namespaces' => 'အမည်ညွှန်းများ', +'variants' => 'အမျိုးမျိုးအပြားပြား', 'errorpagetitle' => 'အမှား', 'returnto' => '$1 သို့ ပြန်သွားရန်။', @@ -273,6 +266,7 @@ $messages = array( 'jumpto' => 'ဤနေရာသို့သွားရန် -', 'jumptonavigation' => 'အ​ညွှန်း​', 'jumptosearch' => 'ရှာ​ဖွေ​ရန်​', +'pool-errorunknown' => 'အမည်မသိအမှား', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} အကြောင်း', @@ -296,6 +290,10 @@ $messages = array( 'badaccess' => 'ခွင့်ပြုချက်မှ အမှား', +'versionrequired' => 'မီဒီယာဝီကီဗာရှင်း $1 လိုအပ်သည်', +'versionrequiredtext' => 'ဤစာမျက်နှာကို ကြည့်ရန် မီဒီယာဝီကီဗာရှင်း $1 လိုအပ်သည်။ +[[Special:Version|ဗားရှင်းစာမျက်နှာ]]ကို ကြည့်ပါ။', + 'ok' => 'အိုကေ', 'retrievedfrom' => '"$1" မှ ရယူရန်', 'youhavenewmessages' => 'သင့်တွင် $1 ($2) ရှိသည်။', @@ -367,59 +365,61 @@ $messages = array( 'virus-unknownscanner' => 'အမည်မသိအန်တီဗိုင်းရပ်စ် -', # Login and logout pages -'welcomecreation' => '== မင်္ဂလာပါ $1! == +'welcomecreation' => '== မင်္ဂလာပါ $1! == သင့်အကောင့်ကို ဖန်တီးပြီးပါပြီ။ [[Special:Preferences|{{SITENAME}} စိတ်​ကြိုက်​ရွေးချယ်စရာတို့]]ကို ပြောင်းရန် မမေ့ပါနှင့်။', -'yourname' => 'အသုံးပြုသူအမည် -', -'yourpassword' => 'စကားဝှက် -', -'yourpasswordagain' => 'စကားဝှက် ပြန်​ရိုက်​ပါ -', -'remembermypassword' => 'ဤ​ကွန်​ပျူ​တာ​တွင်​ကျွန်​တော့​ကို​မှတ်​ထား​ပါ​', -'yourdomainname' => 'သင့်ဒိုမိန်း -', -'login' => 'Log in ဝင်ရန်', -'nav-login-createaccount' => 'Log in ဝင်ရန်/ အကောင့် လုပ်ရန်', -'userlogin' => 'Log in ဝင်ရန်/ အကောင့် လုပ်ရန်', -'userloginnocreate' => 'Log in ဝင်ရန်', -'logout' => 'Log out ထွက်ရန်', -'userlogout' => 'Log out ထွက်ရန်', -'notloggedin' => 'logged in ဝင်မထားပါ', -'nologin' => 'အကောင့်မရှိဘဲ ဖြစ်နေပါသလား။ $1။', -'nologinlink' => 'အကောင့်လုပ်ရန်', -'createaccount' => 'အကောင့်လုပ်ရန်', -'gotaccount' => 'အကောင့်ရှိပြီးသားလား။ $1။', -'gotaccountlink' => 'Log in ဝင်ရန်', -'createaccountmail' => 'အီးမေးဖြင့်', -'badretype' => 'သင်ထည့်သွင်းလိုက်သော စကားဝှက်များ ကိုက်ညီမှု မရှိပါ။', -'userexists' => 'သင်ရွေးသော အသုံးပြုသူအမည်မှာ ရှိပြီးဖြစ်သည်။ +'yourname' => 'အသုံးပြုသူအမည် -', +'yourpassword' => 'စကားဝှက် -', +'yourpasswordagain' => 'စကားဝှက် ပြန်​ရိုက်​ပါ -', +'remembermypassword' => 'ဤ​ကွန်​ပျူ​တာ​တွင်​ ကျွနု်ပ်ကို​မှတ်​ထား​ရန် (အများဆုံး $1 {{PLURAL:$1|ရက်|ရက်}}ကြာ)', +'yourdomainname' => 'သင့်ဒိုမိန်း -', +'login' => 'Log in ဝင်ရန်', +'nav-login-createaccount' => 'Log in ဝင်ရန်/ အကောင့် လုပ်ရန်', +'userlogin' => 'Log in ဝင်ရန်/ အကောင့် လုပ်ရန်', +'userloginnocreate' => 'Log in ဝင်ရန်', +'logout' => 'Log out ထွက်ရန်', +'userlogout' => 'Log out ထွက်ရန်', +'notloggedin' => 'logged in ဝင်မထားပါ', +'nologin' => 'အကောင့်မရှိဘဲ ဖြစ်နေပါသလား။ $1။', +'nologinlink' => 'အကောင့်လုပ်ရန်', +'createaccount' => 'အကောင့်လုပ်ရန်', +'gotaccount' => 'အကောင့်ရှိပြီးသားလား။ $1။', +'gotaccountlink' => 'Log in ဝင်ရန်', +'createaccountmail' => 'အီးမေးဖြင့်', +'createaccountreason' => 'အ​ကြောင်း​ပြ​ချက် -', +'badretype' => 'သင်ထည့်သွင်းလိုက်သော စကားဝှက်များ ကိုက်ညီမှု မရှိပါ။', +'userexists' => 'သင်ရွေးသော အသုံးပြုသူအမည်မှာ ရှိပြီးဖြစ်သည်။ အခြား အမည် ရွေးပါ။', -'loginerror' => 'Login ဝင်ခြင်း အမှား', -'createaccounterror' => 'ဤအကောင့်ကို မဖန်တီးနိုင်ပါ - $1', -'noname' => 'တရားဝင် အသုံးပြုသူအမည်ကို မသတ်မှတ်ရသေးပါ။', -'loginsuccesstitle' => 'Login ဝင်​ခြင်း အောင်မြင်သည်။', -'loginsuccess' => "'''သင်သည် {{SITENAME}} သို့ \"\$1\" အဖြစ် Login ဝင်ပြီးဖြစ်သည်။'''", -'nosuchusershort' => '"$1" အမည်ဖြင့် အသုံးပြုသူမရှိပါ။ +'loginerror' => 'Login ဝင်ခြင်း အမှား', +'createaccounterror' => 'ဤအကောင့်ကို မဖန်တီးနိုင်ပါ - $1', +'noname' => 'တရားဝင် အသုံးပြုသူအမည်ကို မသတ်မှတ်ရသေးပါ။', +'loginsuccesstitle' => 'Login ဝင်​ခြင်း အောင်မြင်သည်။', +'loginsuccess' => "'''သင်သည် {{SITENAME}} သို့ \"\$1\" အဖြစ် Login ဝင်ပြီးဖြစ်သည်။'''", +'nosuchusershort' => '"$1" အမည်ဖြင့် အသုံးပြုသူမရှိပါ။ စာလုံးပေါင်း ပြန်စစ်ပေးပါရန်။', -'nouserspecified' => 'အသုံးပြုသူအမည်ကို ဖော်ပြရမည်ဖြစ်သည်။', -'login-userblocked' => 'ဤအသုံးပြုသူကို ပိတ်ပင်ထားသည်။ Login ဝင်ခြင်း ခွင့်မပြုပါ။', -'wrongpassword' => 'စကားဝှက်အမှားထည့်ထားသည်။ +'nouserspecified' => 'အသုံးပြုသူအမည်ကို ဖော်ပြရမည်ဖြစ်သည်။', +'login-userblocked' => 'ဤအသုံးပြုသူကို ပိတ်ပင်ထားသည်။ Login ဝင်ခြင်း ခွင့်မပြုပါ။', +'wrongpassword' => 'စကားဝှက်အမှားထည့်ထားသည်။ ကျေးဇူးပြု၍ ပြန်ကြိုးစားကြည့်ပါ။', -'wrongpasswordempty' => 'စကားဝှက်ထည့်ရမည်နေရာ ဗလာဖြစ်နေသည်။ +'wrongpasswordempty' => 'စကားဝှက်ထည့်ရမည်နေရာ ဗလာဖြစ်နေသည်။ ကျေးဇူးပြု၍ ပြန်ကြိုးစားကြည့်ပါ။', -'passwordtooshort' => 'စကားဝှက်တွင် စကားလုံး အနည်းဆုံး {{PLURAL:$1|တစ်လုံး|$1 လုံး}} ရှိရမည်။', -'password-name-match' => 'သင့်စကားဝှက်သည် အသုံးပြုသူအမည်နှင့် အတူတူမဖြစ်စေရဘဲ ကွဲပြားရမည်။', -'mailmypassword' => 'စကားဝှက်အသစ်ကို အီးမေး ပို့ရန်', -'passwordremindertitle' => '{{SITENAME}} အတွက် ယာယီစကားဝှက်အသစ်', -'noemail' => 'အသုံးပြုသူ "$1" အတွက် မည်သည့်အီးမေးလိပ်စာမှ မှတ်သားထားခြင်း မရှိပါ။', -'noemailcreate' => 'တရာဝင်အီးမေးလိပ်စာ ပေးရန် လိုအပ်သည်', -'mailerror' => 'မေးပို့ခြင်း အမှား - $1', -'emailauthenticated' => 'သင့်အီးမေးလိပ်စာတည်ရှိကြောင်း $2 နေ့ $3 အချိန်က အတည်ပြုလိုက်သည်။', -'emailconfirmlink' => 'အီးမေးကိုအတည်ပြုပါ', -'accountcreated' => 'အကောင့်ဖန်တီးပြီးပါပြီ', -'accountcreatedtext' => '$1 အတွက် အသုံးပြုသူအကောင့်တစ်ခု ဖန်တီးပြီးဖြစ်သည်။', -'createaccount-title' => '{{SITENAME}} အတွက် အကောင့်ပြုလုပ်ခြင်း', -'usernamehasherror' => 'အသုံးပြုသူအမည်တွင် hash စာလုံး (#) မပါရပါ', -'login-throttled' => 'သင်သည် login ဝင်ရန် အကြိမ်မြောက်မြားစွာ အားထုတ်ခဲ့ပြီးဖြစ်သည်။ +'passwordtooshort' => 'စကားဝှက်တွင် စကားလုံး အနည်းဆုံး {{PLURAL:$1|တစ်လုံး|$1 လုံး}} ရှိရမည်။', +'password-name-match' => 'သင့်စကားဝှက်သည် အသုံးပြုသူအမည်နှင့် အတူတူမဖြစ်စေရဘဲ ကွဲပြားရမည်။', +'password-login-forbidden' => 'ဤအသုံးပြုသူအမည်နှင့် စကားဝှက်အား အသုံးပြုခြင်းကို တားမြစ်ထားသည်။', +'mailmypassword' => 'စကားဝှက်အသစ်ကို အီးမေး ပို့ရန်', +'passwordremindertitle' => '{{SITENAME}} အတွက် ယာယီစကားဝှက်အသစ်', +'noemail' => 'အသုံးပြုသူ "$1" အတွက် မည်သည့်အီးမေးလိပ်စာမှ မှတ်သားထားခြင်း မရှိပါ။', +'noemailcreate' => 'တရာဝင်အီးမေးလိပ်စာ ပေးရန် လိုအပ်သည်', +'mailerror' => 'မေးပို့ခြင်း အမှား - $1', +'emailauthenticated' => 'သင့်အီးမေးလိပ်စာတည်ရှိကြောင်း $2 နေ့ $3 အချိန်က အတည်ပြုလိုက်သည်။', +'emailconfirmlink' => 'အီးမေးကိုအတည်ပြုပါ', +'accountcreated' => 'အကောင့်ဖန်တီးပြီးပါပြီ', +'accountcreatedtext' => '$1 အတွက် အသုံးပြုသူအကောင့်တစ်ခု ဖန်တီးပြီးဖြစ်သည်။', +'createaccount-title' => '{{SITENAME}} အတွက် အကောင့်ပြုလုပ်ခြင်း', +'usernamehasherror' => 'အသုံးပြုသူအမည်တွင် hash စာလုံး (#) မပါရပါ', +'login-throttled' => 'သင်သည် login ဝင်ရန် အကြိမ်မြောက်မြားစွာ အားထုတ်ခဲ့ပြီးဖြစ်သည်။ ကျေးဇူးပြု၍ ထပ်မဝင်ခင် စောင့်ပေးပါ။', -'loginlanguagelabel' => 'ဘာသာ: $1', +'loginlanguagelabel' => 'ဘာသာ: $1', # Password reset dialog 'resetpass' => 'စကားဝှက်ပြောင်းရန်', @@ -469,6 +469,7 @@ $messages = array( 'showdiff' => 'ပြင်​ဆင်​ထား​သည်​များ​ကို​ ပြရန်', 'anoneditwarning' => "'''သတိပေးချက် - ''' သင်သည် logged in ဝင်မထားပါ။ ဤစာမျက်နှာ၏ တည်းဖြတ်မှတ်တမ်းတွင် သင့် IP address ကို မှတ်သားထားမည် ဖြစ်သည်။", +'anonpreviewwarning' => 'သင်သည် logged in ဝင်မထားပါ။ သိမ်းဆည်းမည် ဆိုပါက သင်၏IP အား ဤစာမျက်နှာ မှတ်တမ်းတွင် မှတ်သားထားမည်ဖြစ်ပါသည်။', 'missingcommenttext' => 'ကျေးဇူးပြု၍ အောက်တွင် မှတ်ချက်တစ်ခုရေးပါ။', 'summary-preview' => 'အ​ကျဉ်း​ချုပ်​န​မူ​နာ:', 'subject-preview' => 'အကြောင်းအရာ/ခေါင်းကြီးပိုင်း နမူနာ -', @@ -516,6 +517,12 @@ $messages = array( 'permissionserrors' => 'ခွင့်ပြုချက်အမှားများ', 'permissionserrorstext' => 'အောက်ပါ {{PLURAL:$1|အကြောင်းပြချက်|အကြောင်းပြချက်များ}}ကြောင့် ထိုအရာအတွက် ခွင့်ပြုချက်မရှိပါ -', 'permissionserrorstext-withaction' => 'အောက်ပါ အကြောင်းပြချက် {{PLURAL:$1|ခု|ခု}} ကြောင့် $2 အတွက် ခွင့်ပြုချက်မရှိပါ -', +'recreate-moveddeleted-warn' => "'''သတိပေးချက်။ သင်သည် ယခင်က ဖျက်ထားသော စာမျက်နှာတစ်ခုကို ပြန်လည်ဖန်တီးနေသည်။''' + +သင့်အနေနှင့် ဤစာမျက်နှာကို ဆက်လက်တည်းဖြတ်ရန် သင့်တော်မည် မသင့်တော်မည်ကို စဉ်းစားသင့်သည်။ +ဖျက်ထားခြင်း နှင့် ရွှေ့ထားခြင်းတို့၏ မှတ်တမ်းကို သင့်အတွက် အလွယ်တကူ ကိုးကားနိုင်ရန် ဖော်ပြထားသည်။", +'moveddeleted-notice' => 'ဤစာမျက်နှာကို ဖျက်ထားသည်။ +ဖျက်ထားခြင်း ရွှေ့ဆိုင်းထားခြင်းတို့နှင့် ပတ်သက်သော မှတ်တမ်းကို ကိုးကားနိုင်ရန် အောက်တွင် ဖော်ပြထားသည်။', 'log-fulllog' => 'မှတ်တမ်းအပြည့်အစုံကြည့်ရန်', 'edit-gone-missing' => 'စာမျက်နှာကို အပ်ဒိတ်မလုပ်နိုင်ပါ။ အဖျက်ခံလိုက်ရပုံပေါ်သည်။', @@ -530,6 +537,7 @@ $messages = array( 'currentrev' => 'နောက်ဆုံးမူ', 'currentrev-asof' => '$1 က နောက်ဆုံး တည်းဖြတ်မူ', 'revisionasof' => '$1 ရက်နေ့က မူ', +'revision-info' => '$1 နေ့က $2 တည်းဖြတ်သည့်မူ', 'previousrevision' => 'မူဟောင်း', 'nextrevision' => 'ပိုသစ်သော တည်းဖြတ်မူ →', 'currentrevisionlink' => 'နောက်ဆုံး မူ', @@ -576,6 +584,8 @@ Legend: '''({{int:cur}})''' = နောက်ဆုံးမူနှင့် 'logdelete-logentry' => '"[[$1]]" ၏ အဖြစ်အပျက် မြင်နိုင်စွမ်းကို ပြောင်းလဲရန်', 'revdelete-success' => "'''မူမြင်နိုင်စွမ်းရှိမှုကို အောင်မြင်စွာ update လုပ်ပြီးပါပြီ။'''", 'revdel-restore' => 'မည်မျှ ရှုမြင်နိုင်သည်ကို ပြောင်းရန်', +'revdel-restore-deleted' => 'ဖျက်ပစ်လိုက်သောမူများ', +'revdel-restore-visible' => 'မြင်နိုင်သော မူများ', 'pagehist' => 'စာမျက်နှာ မှတ်တမ်း', 'deletedhist' => 'ဖျက်ပစ်လိုက်သော မှတ်တမ်း', 'revdelete-content' => 'မာတိကာ', @@ -616,6 +626,7 @@ Legend: '''({{int:cur}})''' = နောက်ဆုံးမူနှင့် # Diffs 'history-title' => '"$1" ၏ တည်းဖြတ်မူ ရာဇဝင်များ', 'difference' => 'တည်းဖြတ်မူများ အကြား ကွဲပြားမှုများ', +'difference-multipage' => '(စာမျက်နှာများကြားမှ ကွဲပြားချက်များ)', 'lineno' => 'စာကြောင်း $1 -', 'compareselectedversions' => 'ရွေးချယ်ထားသော မူများကို နှိုင်းယှဉ်ရန်', 'showhideselectedversions' => 'ရွေးချယ်ထားသော မူများကို ပြရန်/ဝှက်ရန်', @@ -724,6 +735,7 @@ Try prefixing your query with ''all:'' to search all content (including talk pag 'searchresultshead' => 'ရှာ​ဖွေ​ရန်​', 'resultsperpage' => 'စာတစ်မျက်နှာလျှင် ဝင်ကြည့်နှုန်း -', 'contextlines' => 'စာတစ်ကြောင်းလျှင် ဝင်ကြည့်နှုန်း -', +'stub-threshold-disabled' => 'ပိတ်ထားသည်', 'recentchangesdays' => 'လတ်တလောအပြောင်းအလဲများကို ပြရန်နေ့များ -', 'recentchangesdays-max' => 'အများဆုံး $1 {{PLURAL:$1|ရက်|ရက်}}', 'recentchangescount' => 'ပုံသေအားဖြင့် ပြရန် တည်းဖြတ်မှုအရေအတွက် -', @@ -783,8 +795,15 @@ HTML tags ကို စစ်ဆေးပါ။', 'prefs-advancedrendering' => 'အဆင့်မြင့် ရွေးချယ်မှု', 'prefs-advancedsearchoptions' => 'အဆင့်မြင့် ရွေးချယ်မှု', 'prefs-advancedwatchlist' => 'အဆင့်မြင့် ရွေးချယ်မှု', +'prefs-displayrc' => 'ပြသရန် ရွေးချယ်မှု', +'prefs-displaysearchoptions' => 'ပြသရန် ရွေးချယ်မှု', +'prefs-displaywatchlist' => 'ပြသရန် ရွေးချယ်မှု', 'prefs-diffs' => 'ကွဲပြားချက်', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'အီးမေးလိပ်စာ တရားဝင်ပုံပေါ်သည်', +'email-address-validity-invalid' => 'တရားဝင်အီးမေးလိပ်စာတစ်ခု ထည့်ပါ', + # User rights 'userrights' => 'အသုံးပြုသူ၏ အခွင့်အရေးများကို စီမံခန့်ခွဲခြင်း', 'userrights-lookup-user' => 'အသုံးပြုသူအုပ်စုကို စီမံရန်', @@ -844,6 +863,7 @@ HTML tags ကို စစ်ဆေးပါ။', 'right-block' => 'အခြားအသုံးပြုသူများ တည်းဖြတ်ခြင်းမှ ပိတ်ပင်ရန်', 'right-blockemail' => 'အီးမေးပို့ခြင်းမှ အသုံးပြုသူကို တားဆီးရန်', 'right-hideuser' => 'အသုံးပြုသူအမည်ကို ပိတ်ပင်ရန်နှင့် ယင်းအမည်ကို အများမမြင်နိုင်အောင် ဝှက်ထားရန်', +'right-unblockself' => 'ပိတ်ပင်ထားသည်ကို သူတို့ဘာသာ ပြန်ဖွင့်ရန်', 'right-protect' => 'ကာကွယ်မှုအဆင့် လျှော့ချရန်နှင့် ကာကွယ်ထားသည့်စာမျက်နှာများကို တည်းဖြတ်ရန်', 'right-editusercss' => 'အခြားအသုံးပြုသူများ၏ CSS ဖိုင်ကို တည်းဖြတ်ရန်', 'right-edituserjs' => 'အခြားအသုံးပြုသူများ၏ JavaScript ဖိုင်ကို တည်းဖြတ်ရန်', @@ -935,48 +955,63 @@ HTML tags ကို စစ်ဆေးပါ။', 'recentchangeslinked-to' => 'ပေးထားသော စာမျက်နှာများအစား လင့်များနှင့် ဆက်စပ်နေသာ စာမျက်နှာများ၏ အပြောင်းအလဲများကို ပြရန်', # Upload -'upload' => 'ဖိုင်​တင်​ရန်​', -'uploadbtn' => 'ဖိုင်​တင်​ရန်​', -'reuploaddesc' => 'Upload တင်နေခြင်းကို ဖျက်သိမ်းပြီး upload တင်သည့် ပုံစံသို့ ပြန်သွားရန်', -'upload-tryagain' => 'ပြုပြင်ထားသောဖိုင်၏ ဖော်ပြချက်ကို ထည့်သွင်းရန်', -'uploadnologin' => 'logged in ဝင်မထားပါ', -'uploadnologintext' => 'ဖိုင်များကို Upload တင်ရန် [[Special:UserLogin|logged in ဝင်ပြီး]] ဖြစ်ရမည်။', -'uploaderror' => 'အပ်လုပ်တင်ခြင်း အမှား', -'upload-permitted' => 'ခွင့်ပြုထားသော ဖိုင်အမျိုးအစား - $1။', -'upload-preferred' => 'အလေးပေးသော ဖိုင်အမျိုးအစား - $1။', -'upload-prohibited' => 'တားမြစ်ထားသော ဖိုင်အမျိုးအစား - $1။', -'uploadlog' => 'Upload တင်သည့် မှတ်တမ်း', -'uploadlogpage' => 'Upload တင်သည့် မှတ်တမ်း', -'filename' => 'ဖိုင်အမည်', -'filedesc' => 'အ​ကျဉ်း​ချုပ်​', -'fileuploadsummary' => 'အ​ကျဉ်း​ချုပ်​ -', -'filereuploadsummary' => 'ဖိုင်အပြောင်းအလဲများ -', -'filestatus' => 'မူပိုင်ခွင့် အခြေအနေ -', -'filesource' => 'ရင်းမြစ် -', -'uploadedfiles' => 'တင်ထားသောဖိုင်များ', -'ignorewarning' => 'သတိပေးချက်ကို လျစ်လျူရှု၍ ဖိုင်ကို သိမ်းသာသိမ်းပါ', -'ignorewarnings' => 'မည်သည့်သတိပေးချက်ကိုမဆို လျစ်လျူရှုရန်', -'minlength1' => 'ဖိုင်အမည်သည် အနည်းဆုံး အက္ခရာတစ်လုံး ရှိရမည်။', -'badfilename' => 'ဖိုင်အမည်ကို "$1" ဟု ပြောင်းလဲပြီးဖြစ်သည်။', -'filetype-badmime' => 'MIME အမျိုးအစား "$1" ဖိုင်များကို တင်ရန် ခွင့်မပြုပါ။', -'filetype-missing' => 'ဖိုင်တွင် အိတ်စတန်းရှင်း မရှိပါ (".jpg" စသည်)။', -'largefileserver' => 'ဤဖိုင်သည် ဆာဗာတွင် ခွင့်ပြုရန်သတ်မှတ်ထားသော ဖိုင်အရွယ်အစားထက် ကြီးနေသည်။', -'uploadwarning' => 'Upload တင်ရာတွင် သတ်ပေးချက်', -'savefile' => 'ဖိုင်သိမ်းရန်', -'uploadedimage' => '"[[$1]]" ပုံကို တင်ပြီးပြီဖြစ်သည်', -'overwroteimage' => '"[[$1]]" ၏ မူသစ်ကို upload တင်လိုက်ပြီ', -'uploaddisabled' => 'Upload တင်ခြင်း ပိတ်ထားသည်။', -'uploaddisabledtext' => 'ဖိုင်တင်ခြင်းများကို ပိတ်ထားသည်။', -'uploadvirus' => 'ဖိုင်တွင် ဗိုင်းရပ်စ် ပါနေပါသည်။ +'upload' => 'ဖိုင်​တင်​ရန်​', +'uploadbtn' => 'ဖိုင်​တင်​ရန်​', +'reuploaddesc' => 'Upload တင်နေခြင်းကို ဖျက်သိမ်းပြီး upload တင်သည့် ပုံစံသို့ ပြန်သွားရန်', +'upload-tryagain' => 'ပြုပြင်ထားသောဖိုင်၏ ဖော်ပြချက်ကို ထည့်သွင်းရန်', +'uploadnologin' => 'logged in ဝင်မထားပါ', +'uploadnologintext' => 'ဖိုင်များကို Upload တင်ရန် [[Special:UserLogin|logged in ဝင်ပြီး]] ဖြစ်ရမည်။', +'uploaderror' => 'အပ်လုပ်တင်ခြင်း အမှား', +'upload-permitted' => 'ခွင့်ပြုထားသော ဖိုင်အမျိုးအစား - $1။', +'upload-preferred' => 'အလေးပေးသော ဖိုင်အမျိုးအစား - $1။', +'upload-prohibited' => 'တားမြစ်ထားသော ဖိုင်အမျိုးအစား - $1။', +'uploadlog' => 'Upload တင်သည့် မှတ်တမ်း', +'uploadlogpage' => 'Upload တင်သည့် မှတ်တမ်း', +'filename' => 'ဖိုင်အမည်', +'filedesc' => 'အ​ကျဉ်း​ချုပ်​', +'fileuploadsummary' => 'အ​ကျဉ်း​ချုပ်​ -', +'filereuploadsummary' => 'ဖိုင်အပြောင်းအလဲများ -', +'filestatus' => 'မူပိုင်ခွင့် အခြေအနေ -', +'filesource' => 'ရင်းမြစ် -', +'uploadedfiles' => 'တင်ထားသောဖိုင်များ', +'ignorewarning' => 'သတိပေးချက်ကို လျစ်လျူရှု၍ ဖိုင်ကို သိမ်းသာသိမ်းပါ', +'ignorewarnings' => 'မည်သည့်သတိပေးချက်ကိုမဆို လျစ်လျူရှုရန်', +'minlength1' => 'ဖိုင်အမည်သည် အနည်းဆုံး အက္ခရာတစ်လုံး ရှိရမည်။', +'badfilename' => 'ဖိုင်အမည်ကို "$1" ဟု ပြောင်းလဲပြီးဖြစ်သည်။', +'filetype-badmime' => 'MIME အမျိုးအစား "$1" ဖိုင်များကို တင်ရန် ခွင့်မပြုပါ။', +'filetype-missing' => 'ဖိုင်တွင် အိတ်စတန်းရှင်း မရှိပါ (".jpg" စသည်)။', +'empty-file' => 'သင်တင်သွင်းလိုက်သောဖိုင်သည် ဗလာဖြစ်နေသည်။', +'file-too-large' => 'သင်တင်သွင်းလိုက်သောဖိုင်သည် ကြီးလွန်းနေသည်။', +'filename-tooshort' => 'ဖိုင်အမည်သည် တိုလွန်းသည်။', +'filetype-banned' => 'ဤဖိုင်အမျိုးအစားကို တားမြစ်ထားသည်။', +'verification-error' => 'ဤဖိုင်သည် ဖိုင်အတည်ပြုရန်စစ်ဆေးချက် မအောင်မြင်ပါ။', +'illegal-filename' => 'ဖိုင်အမည်ကို ခွင့်မပြုပါ။', +'overwrite' => 'ရှိပြီးသားဖိုင်အား ထပ်ရေးခြင်းကို ခွင့်မပြုပါ။', +'unknown-error' => 'အကြောင်းရင်းမသိရှိရသော အမှားတစ်ခု ဖြစ်ပေါ်နေသည်။', +'tmp-create-error' => 'ယာယီဖိုင် မဖန်တီးနိုင်ပါ။', +'tmp-write-error' => 'ယာယီဖိုင်ရေးသားရာတွင် အမှားဖြစ်ပေါ်နေသည်။', +'largefileserver' => 'ဤဖိုင်သည် ဆာဗာတွင် ခွင့်ပြုရန်သတ်မှတ်ထားသော ဖိုင်အရွယ်အစားထက် ကြီးနေသည်။', +'uploadwarning' => 'Upload တင်ရာတွင် သတ်ပေးချက်', +'savefile' => 'ဖိုင်သိမ်းရန်', +'uploadedimage' => '"[[$1]]" ပုံကို တင်ပြီးပြီဖြစ်သည်', +'overwroteimage' => '"[[$1]]" ၏ မူသစ်ကို upload တင်လိုက်ပြီ', +'uploaddisabled' => 'Upload တင်ခြင်း ပိတ်ထားသည်။', +'copyuploaddisabled' => 'URL လင့်မှ Upload တင်ခြင်း ပိတ်ထားသည်။', +'uploadfromurl-queued' => 'သင့် upload တင်ရန်ကို စီထားပြီးဖြစ်သည်။', +'uploaddisabledtext' => 'ဖိုင်တင်ခြင်းများကို ပိတ်ထားသည်။', +'uploadvirus' => 'ဖိုင်တွင် ဗိုင်းရပ်စ် ပါနေပါသည်။ အသေးစိတ် - $1', -'upload-source' => 'ရင်းမြစ်ဖိုင်', -'sourcefilename' => 'ရင်းမြစ်ဖိုင်အမည် -', -'sourceurl' => 'ရင်းမြစ် URL လင့် -', -'destfilename' => 'အလိုရှိရာဖိုင်အမည် -', -'upload-maxfilesize' => 'အကြီးဆုံးဖိုင်အရွယ်အစား - $1', -'upload-description' => 'ဖိုင်ဖော်ပြချက်', -'upload-options' => 'Upload တင်သည့် ရွေးချယ်မှုများ', -'watchthisupload' => 'ဤဖိုင်အား စောင့်ကြည့်ရန်', +'upload-source' => 'ရင်းမြစ်ဖိုင်', +'sourcefilename' => 'ရင်းမြစ်ဖိုင်အမည် -', +'sourceurl' => 'ရင်းမြစ် URL လင့် -', +'destfilename' => 'အလိုရှိရာဖိုင်အမည် -', +'upload-maxfilesize' => 'အကြီးဆုံးဖိုင်အရွယ်အစား - $1', +'upload-description' => 'ဖိုင်ဖော်ပြချက်', +'upload-options' => 'Upload တင်သည့် ရွေးချယ်မှုများ', +'watchthisupload' => 'ဤဖိုင်အား စောင့်ကြည့်ရန်', +'upload-success-subj' => 'အောင်မြင်စွာ ့စူသေိ တင်လိုက်သည်', +'upload-failure-subj' => 'Upload တင်ရာတွင် တွေ့သည့် ပြဿနာ', +'upload-warning-subj' => 'Upload တင်ရာတွင် သတ်ပေးချက်', 'upload-misc-error' => 'upload တင်ရာတွင် အမည်မသိ အမှား', 'upload-unknown-size' => 'မသိရှိရသော အရွယ်အစား', @@ -1004,6 +1039,7 @@ HTML tags ကို စစ်ဆေးပါ။', 'listfiles_search_for' => 'မီဒီယာအမည်ကို ရှာရန် -', 'imgfile' => 'ဖိုင်', 'listfiles' => 'ဖိုင်စာရင်း', +'listfiles_thumb' => 'နမူနာပုံငယ်', 'listfiles_date' => 'နေ့စွဲ', 'listfiles_name' => 'အမည်', 'listfiles_user' => 'အသုံးပြုသူ', @@ -1226,6 +1262,7 @@ HTML tags ကို စစ်ဆေးပါ။', 'emailuser' => 'ဤ​အ​သုံး​ပြု​သူ​အား​အီး​မေး​ပို့​ပါ​', 'emailpage' => 'အီးမေးအသုံးပြုသူ', 'defemailsubject' => '{{SITENAME}} အီးမေး', +'usermaildisabled' => 'အသုံးပြုသူအီးမေးကို ပိတ်ထားသည်', 'noemailtitle' => 'အီးမေးလိပ်စာ မရှိပါ', 'noemailtext' => 'ဤအသုံးပြုသူသည် တရားဝင်သော အီးမေးလိပ်စာကို ဖောိပြထားခြင်း မရှိပါ။', 'nowikiemailtitle' => 'မည်သည့်အီးမေးမှ ခွင့်မပြုပါ', @@ -1243,7 +1280,7 @@ HTML tags ကို စစ်ဆေးပါ။', # Watchlist 'watchlist' => 'စောင့်ကြည့်စာရင်း', 'mywatchlist' => 'စောင့်ကြည့်စာရင်း', -'watchlistfor' => "('''$1'''အတွက်)", +'watchlistfor2' => '$1 အတွက် $2', 'nowatchlist' => 'သင့်စောင့်ကြည့်စာရင်းမှာ ဘာမှ မရှိပါ။', 'watchnologin' => 'logged in ဝင်မထားပါ', 'addedwatch' => 'စောင့်ကြည့်စာရင်းသို့ ပေါင်းထည့်ပြီး', @@ -1370,15 +1407,17 @@ HTML tags ကို စစ်ဆေးပါ။', 'sp-contributions-newbies' => 'အကောင့်အသစ်များ၏ ပံ့ပိုးမှုများကိုသာ ပြရန်', 'sp-contributions-newbies-sub' => 'အကောင့်အသစ်များအတွက်', 'sp-contributions-blocklog' => 'ပိတ်ပင်တားဆီးမှု မှတ်တမ်း', +'sp-contributions-uploads' => 'အပ်လုပ်တင်ထားသည်များ', 'sp-contributions-logs' => 'မှတ်​တမ်း​များ​', 'sp-contributions-talk' => 'ဆွေးနွေးချက်', 'sp-contributions-userrights' => 'အသုံးပြုသူ၏ အခွင့်အရေးများကို စီမံခန့်ခွဲခြင်း', 'sp-contributions-search' => 'ပံ့ပိုးမှုများကို ရှာရန်', 'sp-contributions-username' => 'အိုင်ပီလိပ်စာ သို့ အသုံးပြုသူအမည် :', +'sp-contributions-toponly' => 'နောက်ဆုံးတည်းဖြတ်မူများသာပြရန်', 'sp-contributions-submit' => 'ရှာ​ဖွေ​ရန်​', # What links here -'whatlinkshere' => '', +'whatlinkshere' => 'ဘယ်ကလင့်ခ်ထားလဲ', 'whatlinkshere-title' => '"$1" ကို လင့်ထားသော စာမျက်နှာများ', 'whatlinkshere-page' => 'စာမျက်နှာ -', 'linkshere' => "အောက်ပါစာမျက်နှာများသည် '''[[:$1]]''' သို့ လင့်ထားသည် -", @@ -1419,7 +1458,6 @@ HTML tags ကို စစ်ဆေးပါ။', 'ipb-edit-dropdown' => 'ပိတ်ပင်ရသောအကြောင်းရင်းများ', 'ipb-unblock-addr' => '$1 ကို ပိတ်ထားရာမှ ပြန်ဖွင့်ရန်', 'ipb-unblock' => 'အသုံးပြုသူအမည် သို့ IP address ကို ပိတ်ထားရာမှ ပြန်ဖွင့်ပေးရန်', -'ipb-blocklist-addr' => '$1 အတွက် ရှိနှင့်ပြီးသား ပိတ်ပင်မှုများ', 'ipb-blocklist' => 'ရှိနှင့်ပြီးသား ပိတ်ပင်မှုများကို ကြည့်ရန်', 'ipb-blocklist-contribs' => '$1 အတွက် ပံ့ပိုးမှုများ', 'unblockip' => 'အသုံးပြုသူကို ပိတ်ပင်ထားရာမှ ပြန်ဖွင်ြ့ပေးရန်', @@ -1607,6 +1645,8 @@ HTML tags ကို စစ်ဆေးပါ။', 'tooltip-upload' => 'Upload တင်ခြင်း စတင်ရန်', 'tooltip-rollback' => '"နောက်ပြန် ပြန်သွားခြင်း" သည် ဤစာမျက်နှာ၏ နောက်ဆုံး တည်းဖြတ်မူသို့ ကလစ် တစ်ချက်ဖြင့် ပြန်ပြောင်းပေးသည်။', 'tooltip-undo' => '"နောက်ပြန် ပြန်သွားခြင်း" သည် ဤ တည်းဖြတ်ခြင်းကို နောက်ပြန်ပြန်ဆုတ်ပြီး နမူနာပုံနှင့်တကွ တည်းဖြတ်ရန် ပြန်ဖွင့်မည် ဖြစ်သည်။ အဘယ်ကြောင့် နောက်ပြန်သွားသည်ကို အကျဉ်းချုပ် အကြောင်းပြချက် ရေးနိုင်သည်။', +'tooltip-preferences-save' => 'ရေးချယ်စရာများကို သိမ်းရန်', +'tooltip-summary' => 'အတိုချုပ်ထည့်ရန်', # Attribution 'others' => 'အခြား', @@ -1640,7 +1680,9 @@ HTML tags ကို စစ်ဆေးပါ။', 'nextdiff' => 'ပိုသစ်သော တည်းဖြတ်မှု', # Media information +'file-info-size' => '$1 × $2 pixels, ဖိုင်အရွယ်အစား - $3, MIME အမျိုးအစား $4', 'file-nohires' => 'သည်ထက်ကြီးသော resolution မရှိပါ.', +'svg-long-desc' => 'SVG ဖိုင်, $1 × $2 pixels ကို အကြံပြုသည်, ဖိုင်အရွယ်အစား - $3', 'show-big-image' => 'resolution အပြည့်', 'show-big-image-thumb' => 'နမူနာကြည့်ရန် အရွယ်အစား - $1 × $2 pixels', @@ -1843,12 +1885,22 @@ HTML tags ကို စစ်ဆေးပါ။', 'tags-tag' => 'အမည်တွဲ အမည်', 'tags-edit' => 'ပြင်​ဆင်​ရန်', +# Special:ComparePages +'comparepages' => 'စာမျက်နှာများကို နှုိင်းယှဉ်ရန်', +'compare-selector' => 'စာမျက်နှာမူများကို နှုိင်းယှဉ်ရန်', +'compare-page1' => 'စာမျက်နှာတစ်', +'compare-page2' => 'စာမျက်နှာနှစ်', +'compare-rev1' => 'မူ တစ်', +'compare-rev2' => 'မူ နှစ်', +'compare-submit' => 'နှိုင်းယှဉ်ရန်', + # Database error messages 'dberr-header' => 'ဤဝီကီတွင် ပြဿနာတစ်ခု ရှိနေသည်', 'dberr-problems' => 'ဝမ်းနည်းပါသည်။ ဤဆိုက်သည် နည်းပညာပိုင်းဆိုင်ရာ အခက်အခဲများ ကြုံတွေ့နေရပါသည်။', # HTML forms +'htmlform-required' => 'ဤတန်ဖိုး လိုအပ်သည်', 'htmlform-submit' => 'ထည့်သွင်းရန်', 'htmlform-reset' => 'ပြောင်းလဲထားသည်များ မလုပ်တော့ရန်', 'htmlform-selectorother-other' => 'အခြား', diff --git a/languages/messages/MessagesMyv.php b/languages/messages/MessagesMyv.php index a32a3fdb..760fbf12 100644 --- a/languages/messages/MessagesMyv.php +++ b/languages/messages/MessagesMyv.php @@ -58,8 +58,10 @@ $specialPageAliases = array( 'Uncategorizedtemplates' => array( 'КатегориявтомоЛопаПарцунт' ), 'Unusedcategories' => array( 'ТевсАНолдавицяКатегорият' ), 'Unusedimages' => array( 'ТевсАНолдавицяАртовкст' ), - 'Wantedpages' => array( 'ВешемаЛопат' ), - 'Wantedcategories' => array( 'ВешемаКатегорият' ), + 'Wantedpages' => array( 'ВешезьЛопат' ), + 'Wantedcategories' => array( 'ВешезьКатегорият' ), + 'Wantedfiles' => array( 'ВешезьФайлат' ), + 'Wantedtemplates' => array( 'ВешезьЛопапарцунт' ), 'Mostlinked' => array( 'СехтеЛамоСюлмавомаПеМартот' ), 'Mostlinkedcategories' => array( 'СехтеЛамоСюлмавомаПеМартоКатегорият' ), 'Mostlinkedtemplates' => array( 'СехтеЛамоСюлмавомаПеМартоЛопаПарцунт' ), @@ -137,18 +139,24 @@ $magicWords = array( 'talkspace' => array( '1', 'КОРТАМОПОТМО', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ', 'TALKSPACE' ), 'fullpagename' => array( '1', 'ЛОПАЛЕМКУВАКАСТО', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ', 'FULLPAGENAME' ), 'talkpagename' => array( '1', 'КОРТАМОЛОПАЛЕМ', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ', 'TALKPAGENAME' ), - 'img_right' => array( '1', 'вить кедь', 'справа', 'right' ), - 'img_left' => array( '1', 'керш кедь', 'слева', 'left' ), - 'img_none' => array( '1', 'вейкеяк арась', 'без', 'none' ), + 'msg' => array( '0', 'ПАЧТЯМНЭ:', 'СООБЩЕНИЕ:', 'СООБЩ:', 'MSG:' ), + 'img_thumbnail' => array( '1', 'кенжешка', 'мини', 'миниатюра', 'thumbnail', 'thumb' ), + 'img_right' => array( '1', 'вить_кедь', 'справа', 'right' ), + 'img_left' => array( '1', 'керш_кедь', 'слева', 'left' ), + 'img_none' => array( '1', 'вейкеяк_арась', 'без', 'none' ), 'img_center' => array( '1', 'куншкасо', 'центр', 'center', 'centre' ), 'img_framed' => array( '1', 'кундсо', 'обрамить', 'framed', 'enframed', 'frame' ), 'img_frameless' => array( '1', 'кундовтомо', 'безрамки', 'frameless' ), - 'img_page' => array( '1', 'лопа=$1', 'лопа $1', 'страница=$1', 'страница $1', 'page=$1', 'page $1' ), + 'img_page' => array( '1', 'лопа=$1', 'лопа $1', 'страница=$1', 'страница $1', 'страница $1', 'page=$1', 'page $1' ), 'img_top' => array( '1', 'верькс', 'сверху', 'top' ), 'img_text_top' => array( '1', 'текст-верькс', 'текст-сверху', 'text-top' ), 'img_middle' => array( '1', 'куншка', 'посередине', 'middle' ), 'img_bottom' => array( '1', 'алкс', 'снизу', 'bottom' ), 'img_text_bottom' => array( '1', 'текст-алкс', 'текст-снизу', 'text-bottom' ), + 'sitename' => array( '1', 'САЙТЛЕМ', 'НАЗВАНИЕ_САЙТА', 'SITENAME' ), + 'gender' => array( '0', 'СЫМЕ:', 'ПОЛ:', 'GENDER:' ), + 'currentweek' => array( '1', 'МОЛИЦЯ_ТАРГО', 'ТЕКУЩАЯ_НЕДЕЛЯ', 'CURRENTWEEK' ), + 'currentdow' => array( '1', 'МОЛИЦЯ_ЧИ', 'ТЕКУЩИЙ_ДЕНЬ_НЕДЕЛИ', 'CURRENTDOW' ), 'localweek' => array( '1', 'ТЕСКЭНЬТАРГО', 'МЕСТНАЯ_НЕДЕЛЯ', 'LOCALWEEK' ), 'revisionid' => array( '1', 'ЛИЯКСТОМТОМАID', 'ИД_ВЕРСИИ', 'REVISIONID' ), 'revisionday' => array( '1', 'ЛИЯКСТОМТОМАЧЫ', 'ДЕНЬ_ВЕРСИИ', 'REVISIONDAY' ), @@ -156,13 +164,20 @@ $magicWords = array( 'revisionmonth' => array( '1', 'ЛИЯКСТОМТОМАКОВ', 'МЕСЯЦ_ВЕРСИИ', 'REVISIONMONTH' ), 'revisionyear' => array( '1', 'ЛИЯКСТОМТОМАИЕ', 'ГОД_ВЕРСИИ', 'REVISIONYEAR' ), 'plural' => array( '0', 'ЛАМОНЬЧИСЛА', 'МНОЖЕСТВЕННОЕ_ЧИСЛО:', 'PLURAL:' ), + 'lcfirst' => array( '0', 'ВАСЕНЦЕ_ТЕШТЬКЕСЬ_ВИШКИНЕ:', 'ПЕРВАЯ_БУКВА_МАЛЕНЬКАЯ:', 'LCFIRST:' ), + 'ucfirst' => array( '0', 'ВАСЕНЦЕ_ТЕШТЬКЕСЬ_ПОКШ:', 'ПЕРВАЯ_БУКВА_БОЛЬШАЯ:', 'UCFIRST:' ), + 'lc' => array( '0', 'ВИШКА_ТЕШТЬКЕСЭ:', 'МАЛЕНЬКИМИ_БУКВАМИ:', 'LC:' ), + 'uc' => array( '0', 'ПОШК_ТЕШТЬКЕСЭ:', 'БОЛЬШИМИ_БУКВАМИ:', 'UC:' ), 'raw' => array( '0', 'ВЕРЕКСТЭ', 'НЕОБРАБ:', 'RAW:' ), + 'displaytitle' => array( '1', 'НЕВТЕМС_КОНЯКС', 'ПОКАЗАТЬ_ЗАГОЛОВОК', 'DISPLAYTITLE' ), 'currentversion' => array( '1', 'ТЕВАТЕВЕРСИЯ', 'ТЕКУЩАЯ_ВЕРСИЯ', 'CURRENTVERSION' ), - 'language' => array( '0', '#КЕЛЬ', '#ЯЗЫК:', '#LANGUAGE:' ), + 'language' => array( '0', '#КЕЛЕСЬ:', '#ЯЗЫК:', '#LANGUAGE:' ), 'numberofadmins' => array( '1', 'ЗЯРОАДМИНТНЭДЕ', 'КОЛИЧЕСТВО_АДМИНИСТРАТОРОВ', 'NUMBEROFADMINS' ), - 'special' => array( '0', 'башка тевень', 'служебная', 'special' ), + 'special' => array( '0', 'башка_тевень', 'служебная', 'special' ), 'filepath' => array( '0', 'ФАЙЛАНЬКИ', 'ПУТЬ_К_ФАЙЛУ:', 'FILEPATH:' ), 'pagesize' => array( '1', 'ЛОПАКУВАЛМО', 'РАЗМЕР_СТРАНИЦЫ', 'PAGESIZE' ), + 'url_path' => array( '0', 'ЯН', 'ПУТЬ', 'PATH' ), + 'url_wiki' => array( '0', 'ВИКИ', 'WIKI' ), ); $messages = array( @@ -181,8 +196,7 @@ $messages = array( 'tog-editsection' => 'Невтемс сюлмавома пенть «витемс» эрьва секциянтень-пельксэнтень', 'tog-editsectiononrightclick' => 'Витнемс секциятнень-пелькстнэнь, лепштямс сёрмадовксонть лемензэ лангс чэерень витьёнсе повнэсэ (JavaScript)', 'tog-showtoc' => 'Невтемс сёрмадовкс потмокс (лопатненень, конатнесэ 3-до ламо сёрмадовкст)', -'tog-rememberpassword' => 'Ванстомс совамо валом те арсиймашинасонть', -'tog-editwidth' => 'Келейгавтомс витнема-петнема паксясь весе браузер вальманть келес', +'tog-rememberpassword' => 'Ледстемс совамо валом те бравзерсэнть (сех кувать $1 {{PLURAL:$1|чи|чить}})', 'tog-watchcreations' => 'Совавтомс монь теевть лопатнень ванома лем рисьмезэнь', 'tog-watchdefault' => 'Совавтомс монь витевть лопатнень ванома лем рисьмезэнь', 'tog-watchmoves' => 'Лопанть лиякстомтса, совавтык ванома лем рисьмезэнь', @@ -319,31 +333,20 @@ $messages = array( 'faqpage' => 'Project:Сеедьстэ кепедень кевкстемат', # Vector skin -'vector-action-addsection' => 'Поладомс мезде кортамс', -'vector-action-delete' => 'Нардамс', -'vector-action-move' => 'Печтевтемс', -'vector-action-protect' => 'Аравтомс ванстомас', -'vector-action-undelete' => 'Вельмевтемс нардазенть', -'vector-action-unprotect' => 'Ванстомасто саемс', -'vector-namespace-category' => 'Категория', -'vector-namespace-help' => 'Лезкс лопа', -'vector-namespace-image' => 'Файла', -'vector-namespace-main' => 'Лопа', -'vector-namespace-media' => 'Медиа лопа', -'vector-namespace-mediawiki' => 'Пачтямнэ', -'vector-namespace-project' => 'Проекттэ лопа', -'vector-namespace-special' => 'Башка тевень лопа', -'vector-namespace-talk' => 'Кортнема', -'vector-namespace-template' => 'Лопа парцун', -'vector-namespace-user' => 'Теицянь лопа', -'vector-view-create' => 'Теемс-Шкамс', -'vector-view-edit' => 'Витнемс-петнемс', -'vector-view-history' => 'Ваномс юронзо-путовксонзо', -'vector-view-view' => 'Ловномс', -'vector-view-viewsource' => 'Ваномс косто саезь', -'actions' => 'Тев теемат', -'namespaces' => 'Лемпотмот', -'variants' => 'Вариантт', +'vector-action-addsection' => 'Поладомс мезде кортамс', +'vector-action-delete' => 'Нардамс', +'vector-action-move' => 'Печтевтемс', +'vector-action-protect' => 'Аравтомс ванстомас', +'vector-action-undelete' => 'Вельмевтемс нардазенть', +'vector-action-unprotect' => 'Ванстомасто саемс', +'vector-view-create' => 'Теемс-Шкамс', +'vector-view-edit' => 'Витнемс-петнемс', +'vector-view-history' => 'Ваномс юронзо-путовксонзо', +'vector-view-view' => 'Ловномс', +'vector-view-viewsource' => 'Ваномс косто саезь', +'actions' => 'Тев теемат', +'namespaces' => 'Лемпотмот', +'variants' => 'Вариантт', 'errorpagetitle' => 'Ильведькс', 'returnto' => 'Велявтомс $1 лопантень.', @@ -399,6 +402,7 @@ $messages = array( 'jumpto' => 'Тёкадемс тей:', 'jumptonavigation' => 'Новигациясь-лездамось', 'jumptosearch' => 'вешнэме', +'pool-errorunknown' => 'Апак содань ильведькс', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} ланга', @@ -519,7 +523,7 @@ $messages = array( 'yourname' => 'Теицянь лем:', 'yourpassword' => 'Салава валот:', 'yourpasswordagain' => 'Омбоцеде сёрмадык кирдицянь леметь:', -'remembermypassword' => 'Ледстемс монь совамо валонть те арсемашинасонть', +'remembermypassword' => 'Ледстемс совамом те бравзерсэнть (сех кувать $1 {{PLURAL:$1|чи|чить}})', 'yourdomainname' => 'Эсеть доменэть:', 'login' => 'Совамо', 'nav-login-createaccount' => 'Совамо / тейть совамотарка', @@ -535,6 +539,7 @@ $messages = array( 'gotaccount' => "Совамотаркат ули? '''$1'''.", 'gotaccountlink' => 'Совамс', 'createaccountmail' => 'е-сёрмасо', +'createaccountreason' => 'Тувталось:', 'badretype' => 'Сёрмадыть салава валот кавксть: сынь аволь вейкеть.', 'userexists' => 'Те лемесь уш саезь. Арсека эсеть лия, инеськеть.', 'loginerror' => 'Совамсто ильведькс', @@ -673,8 +678,6 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь — 'copyrightwarning' => "Инескеть кирдть мельсэ {{SITENAME}}-сэ весе путовкстнэнь, лововить нолдазекс ало $2 конёвонть коряс (вант $1 педе пес). Арась мелеть витневтемс-петневтемс сёрмадовксот педе пес, иляк сестэ путо сонзэ тезэнь.
    Истяжо тезэнь материалонь максомсот, кемекстат тон тонсь сёрмадык сонзэ, али саик сонзэ вейсэнь ёнксто али олячинь порталсто. '''ИЛЯ МАКСО ВАНСТОНЬ ВИДЕЧИСЭ ЛОМАНЕНЬ ВАЖОДЕМАНТЬ АПАК КЕВКСТНЕ!'''", -'longpagewarning' => "'''ВАНОК: Те лопанть сталмозо $1 килобайтт; конат-конат интерчаматнесэ-браузертнэсэ стакасто витнемс-петнемс сёрмадовкс 32-во kб сталмосо али седе стака. -Инеськеть, паро улевель лопанть явомс вишка пельксекс.'''", 'titleprotectedwarning' => "'''ВАНОК: Те лопась сёлгозь, сонзэ шкамга-теемга [[Special:ListGroupRights|башка видечыть]] эрявить.''' Журналонь меельсе сёрмадовксось максозь ало, эрявиндеряй сонзэ ваномс.", 'templatesused' => 'Те лопасонть тевс нолдазь {{PLURAL:$1|лопа парцун|лопа парцунт}}:', @@ -754,6 +757,8 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь — 'revdelete-submit' => 'Аравтомс кочказь {{PLURAL:$1|лиякстомтомантень|лиякстомтоматненень}}', 'revdelete-logentry' => '[[$1]]-нть лиякстомтоманть неявомазо полавтовсь', 'revdel-restore' => 'Полавтомс неявомачынзэ', +'revdel-restore-deleted' => 'нардазь верзиятне', +'revdel-restore-visible' => 'неявиця верзият', 'pagehist' => 'Лопанть икелькс умазо', 'deletedhist' => 'Нардань икелькс умазо', 'revdelete-content' => 'потмозо', @@ -792,7 +797,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь — 'lineno' => 'Киксэсь $1:', 'compareselectedversions' => 'Кочказь версиятнень аравтомс карадо-каршо', 'editundo' => 'Велявтомс мекев мезе витнинь-петнинь', -'diff-multi' => '({{PLURAL:$1|$1 юткине версиясь апак невте|$1 юткине версиятне апак невте|$1 юткине версиятнеде апак невте.}})', +'diff-multi' => '↓({{PLURAL:$2|Вейке совицясь тейсь {{PLURAL:$1|юткине версия, конась|$1 юткине версият, конатне}}|$2 совицят тейсть {{PLURAL:$1| юткине версия, конась|$1 юткине версият, конатне}}}} апак невте.)', # Search results 'searchresults' => 'Мезе муевсь', @@ -999,38 +1004,34 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь — 'action-mergehistory' => 'вейтьсэндямс те лопанть юронзо-путовксонзо', # Recent changes -'nchanges' => '$1 {{PLURAL:$1|полавтнема|полавтнемат}}', -'recentchanges' => 'Чыяконь полавтнемат-лиякстомтомат', -'recentchanges-legend' => 'Улконь полавтнематнень аравтнемаст', -'recentchanges-feed-description' => 'Мельга ваннынк кода ульнесть витьнемат-петнемат wiki-сэ те максовксонть.', -'recentchanges-legend-newpage' => '$1, те - од лопа', -'recentchanges-label-newpage' => 'Те витнемась-петнемась од лопа тейсь', -'recentchanges-legend-minor' => '$1, те - а покшкэ витнема-петнема', -'recentchanges-label-minor' => 'Те а покшкэ витнемась-петнемась', -'recentchanges-legend-bot' => '$1, те - ботонь витнемазо-петнемазо', -'recentchanges-label-bot' => 'Те витнеманть-петнеманть теизе кона-кона бот', -'recentchanges-legend-unpatrolled' => '$1, те витнеманть-петнеманть мельга а ванстнить', -'rcnote' => "$5, $4 шканть коряс муят алдо {{PLURAL:$1|Меельсе '''1''' лиякстомтоманть|Меельсе '''$1''' лиякстомтоматнень}} меельсе {{PLURAL:$2|чинть|'''$2''' читнень}} шкасто.", -'rcnotefrom' => "Ало невтезь '''$2''' лиякстомтомасто саезь ('''$1''' видс).", -'rclistfrom' => 'Невтемс од витьнематнень $1-нть эйстэ саезь.', -'rcshowhideminor' => '$1 апокшкэ витнемат-петнемат', -'rcshowhidebots' => '$1 ботт', -'rcshowhideliu' => '$1 совазь уськекирдийтне', -'rcshowhideanons' => '$1 лемтеме теицят', -'rcshowhidepatr' => '$1 кона патрульсэ витьни-петни', -'rcshowhidemine' => '$1 мезе мон витнинь-петнинь', -'rclinks' => 'Невтемс меельсе $1 полавтнемат меельсе $2 чинь перть
    $3', -'diff' => 'кадовикс', -'hist' => 'ист', -'hide' => 'Кекшемс', -'show' => 'Невтемс', -'minoreditletter' => 'а', -'newpageletter' => 'О', -'boteditletter' => 'б', -'rc_categories_any' => 'Кодамо илязо уле', -'newsectionsummary' => '/* $1 */ од пелькс', -'rc-enhanced-expand' => 'Невтемс седе ламо тень ланга (JavaScript эряви)', -'rc-enhanced-hide' => 'Кекшемс келейстэ ёвтазенть', +'nchanges' => '$1 {{PLURAL:$1|полавтнема|полавтнемат}}', +'recentchanges' => 'Чыяконь полавтнемат-лиякстомтомат', +'recentchanges-legend' => 'Улконь полавтнематнень аравтнемаст', +'recentchanges-feed-description' => 'Мельга ваннынк кода ульнесть витьнемат-петнемат wiki-сэ те максовксонть.', +'recentchanges-label-newpage' => 'Те витнемась-петнемась од лопа тейсь', +'recentchanges-label-minor' => 'Те а покшкэ витнемась-петнемась', +'recentchanges-label-bot' => 'Те витнеманть-петнеманть теизе кона-кона бот', +'rcnote' => "$5, $4 шканть коряс муят алдо {{PLURAL:$1|Меельсе '''1''' лиякстомтоманть|Меельсе '''$1''' лиякстомтоматнень}} меельсе {{PLURAL:$2|чинть|'''$2''' читнень}} шкасто.", +'rcnotefrom' => "Ало невтезь '''$2''' лиякстомтомасто саезь ('''$1''' видс).", +'rclistfrom' => 'Невтемс од витьнематнень $1-нть эйстэ саезь.', +'rcshowhideminor' => '$1 апокшкэ витнемат-петнемат', +'rcshowhidebots' => '$1 ботт', +'rcshowhideliu' => '$1 совазь уськекирдийтне', +'rcshowhideanons' => '$1 лемтеме теицят', +'rcshowhidepatr' => '$1 кона патрульсэ витьни-петни', +'rcshowhidemine' => '$1 мезе мон витнинь-петнинь', +'rclinks' => 'Невтемс меельсе $1 полавтнемат меельсе $2 чинь перть
    $3', +'diff' => 'кадовикс', +'hist' => 'ист', +'hide' => 'Кекшемс', +'show' => 'Невтемс', +'minoreditletter' => 'а', +'newpageletter' => 'О', +'boteditletter' => 'б', +'rc_categories_any' => 'Кодамо илязо уле', +'newsectionsummary' => '/* $1 */ од пелькс', +'rc-enhanced-expand' => 'Невтемс седе ламо тень ланга (JavaScript эряви)', +'rc-enhanced-hide' => 'Кекшемс келейстэ ёвтазенть', # Recent changes linked 'recentchangeslinked' => 'Сюлмавозь лиякстоматне', @@ -1059,16 +1060,19 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь — 'minlength1' => 'Файлалемесь аштезэ вейке эли седе ламо тешксттнэстэ.', 'badfilename' => 'Файланть лемесь полавтозь "$1"-кс.', 'filetype-missing' => 'Файланть арась поладкс пезэ (саемга «.jpg»).', +'empty-file' => 'Тонь максовт файлась чаво.', +'filename-tooshort' => 'Файлань лементь а саты кувалмозо.', +'unknown-error' => 'А содавикс манявкс лиссь.', 'file-thumbnail-no' => "Файланть лемезэ ушодови '''$1'''. Сонсь маряви вишкалгавтозь фотокуво, покшолмазо ''(кенжешка)''. Улиндеряй файланть покш верзиязо, йовкстыка сонзэ - арась, полавтыка тетень лемензэ.", 'file-exists-duplicate' => 'Те кавонзавкс файла вана {{PLURAL:$1|те файланть|неть файлатнень}} эйстэ:', -'successfulupload' => 'Совавтовсь кода эряви', 'uploadwarning' => 'Совавтомадо кардамонь пачтямо', 'savefile' => 'Ванстомс файланть', 'uploadedimage' => 'йовкстазь "[[$1]]"', 'overwroteimage' => 'Ёвкстамс "[[$1]]" файлань од версия', 'uploaddisabled' => 'Совавтомась лоткавтозь', +'uploadfromurl-queued' => 'Ёвкстамо файлат эйсэ учовтыть пулосо', 'uploadvirus' => 'Те файласонть вирус програм! Информация: $1', 'upload-source' => 'Лисьмапрякс файла', 'sourcefilename' => 'Лисьмапря файланть лемезэ', @@ -1078,6 +1082,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь — 'upload-description' => 'Файланть йовтамозо', 'upload-options' => 'Йовкстамонь параметрат', 'watchthisupload' => 'Ваномс те лопанть мельга', +'upload-success-subj' => 'Совавтовсь кода эряви', 'upload-proto-error' => 'Аволь истямо протокол', 'upload-file-error' => 'Потмонь ильведькс', @@ -1103,6 +1108,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь — 'listfiles_search_for' => 'Вешнемс медиа лементь:', 'imgfile' => 'файл', 'listfiles' => 'Файлат-мезть', +'listfiles_thumb' => 'Кенжешка', 'listfiles_date' => 'Чи', 'listfiles_name' => 'Лемезэ', 'listfiles_user' => 'Теиця', @@ -1347,7 +1353,6 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь — # Watchlist 'watchlist' => 'Мезе мельга мон ванстнян', 'mywatchlist' => 'Мезе мельга мон ванстнян', -'watchlistfor' => "('''$1'''-те)", 'watchnologin' => 'Апак сова', 'addedwatch' => 'Топавтозь ванома потмоксоньте', 'addedwatchtext' => 'Лопась «[[:$1]]» совавтозь [[Special:Watchlist|ванома потмозот]]. @@ -1530,7 +1535,6 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь — 'blockipsuccesssub' => 'Саймес озавтовсь', 'ipb-edit-dropdown' => 'Витнемс-петнемс саймес озавтомань тувталтнэнь', 'ipb-unblock-addr' => 'Нолдамс $1-нть сайместэ', -'ipb-blocklist-addr' => 'Теицянть $1 саймес озавтоманзо', 'ipb-blocklist' => 'Ваномс саймес озавтозетнень', 'ipb-blocklist-contribs' => '$1 лопас путовкст', 'unblockip' => 'Нолдамс теицянть сайместэ', @@ -1787,13 +1791,14 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь — # Media information 'thumbsize' => 'Кенжешканть покшолмазо:', 'widthheightpage' => '$1×$2, {{PLURAL:$3|лопа|$3 лопат}}', -'file-info' => '(файлонть-путовксонть сталмозо: $1, MIME типезе: $2)', -'file-info-size' => '($1 × $2 пиксельть, файлонть-путовксонть сталмозо: $3, MIME типезе: $4)', +'file-info' => 'файлонть-путовксонть сталмозо: $1, MIME типезе: $2', +'file-info-size' => '$1 × $2 пиксельть, файлонть-путовксонть сталмозо: $3, MIME типезе: $4', 'file-nohires' => 'Арась версия покш разрешения марто.', -'svg-long-desc' => '(SVG файла, $1 × $2 пиксельть, файланть покшолмазо: $3)', +'svg-long-desc' => 'SVG файла, $1 × $2 пиксельть, файланть покшолмазо: $3', 'show-big-image' => 'Пешксе теевксесь', 'show-big-image-thumb' => 'Васнянь невтевксэнть покшолмазо: $1 × $2 пиксэлт', 'file-info-gif-looped' => 'кирьксэс аравтозь', +'file-info-png-looped' => 'кирьксэс аравтозь', # Special:NewFiles 'newimages' => 'Од файлатьнень галлереясь', @@ -1867,6 +1872,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь — 'exif-gpsdestlatitude' => 'Норовамо тарканть келелмазо', 'exif-gpsdestlongitude' => 'Норовамо тарканть кувалмозо', 'exif-gpsdatestamp' => 'GPS чи', +'exif-objectname' => 'Нурькинестэ лемезэ', # EXIF attributes 'exif-compression-1' => 'Апак сювордо', @@ -2084,6 +2090,11 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь — 'tag-filter-submit' => 'Сувтемень пачк нолдамс', 'tags-edit' => 'витнемс-петнемс', +# Special:ComparePages +'compare-page1' => 'Лопа 1', +'compare-page2' => 'Лопа 2', +'compare-submit' => 'Аравтомс карадо каршо', + # Database error messages 'dberr-header' => 'Те викисэнть проблема', diff --git a/languages/messages/MessagesMzn.php b/languages/messages/MessagesMzn.php index 4fa3f9bf..c8eedc9e 100644 --- a/languages/messages/MessagesMzn.php +++ b/languages/messages/MessagesMzn.php @@ -31,18 +31,18 @@ $namespaceNames = array( NS_SPECIAL => 'شا', NS_TALK => 'گپ', NS_USER => 'کارور', - NS_USER_TALK => 'کارور گپ', - NS_PROJECT_TALK => '$1 گپ', + NS_USER_TALK => 'کارور_گپ', + NS_PROJECT_TALK => '$1_گپ', NS_FILE => 'پرونده', - NS_FILE_TALK => 'پرونده گپ', + NS_FILE_TALK => 'پرونده_گپ', NS_MEDIAWIKI => 'مه‌دیاویکی', - NS_MEDIAWIKI_TALK => 'مه‌دیاویکی گپ', + NS_MEDIAWIKI_TALK => 'مه‌دیاویکی_گپ', NS_TEMPLATE => 'شابلون', - NS_TEMPLATE_TALK => 'شابلون گپ', + NS_TEMPLATE_TALK => 'شابلون_گپ', NS_HELP => 'رانه‌ما', - NS_HELP_TALK => 'رانه‌مائه گپ', + NS_HELP_TALK => 'رانه‌مائه_گپ', NS_CATEGORY => 'رج', - NS_CATEGORY_TALK => 'رج گپ', + NS_CATEGORY_TALK => 'رج_گپ', ); $namespaceAliases = array( @@ -71,7 +71,7 @@ $namespaceAliases = array( $magicWords = array( 'redirect' => array( '0', '#بور', '#تغییرمسیر', '#REDIRECT' ), - 'numberofpages' => array( '1', 'تعدادصفحه‌ها', 'تعداد_صفحه‌ها', 'ولگ‌ئون نمره', 'وألگ‌ئون نومره', 'NUMBEROFPAGES' ), + 'numberofpages' => array( '1', 'تعدادصفحه‌ها', 'تعداد_صفحه‌ها', 'ولگ‌ئون_نمره', 'وألگ‌ئون_نومره', 'NUMBEROFPAGES' ), ); $messages = array( @@ -90,6 +90,7 @@ $messages = array( 'tog-editsection' => 'به کار دمبدائن تیکه‌ئون دچی‌ین از طریق پیوندون [دچی‌ین]', 'tog-editsectiononrightclick' => 'به کار دمبدائن دچی‌ین قسمت‌ئون با راست کیلیک
    عناوین قسمت‌ئون ِرو (جاوااسکریپت)', 'tog-showtoc' => 'نیمایش محتوا
    (برای مقاله‌ئون با بیشته از ۳ سرفصل)', +'tog-rememberpassword' => 'مه رمز ره (تا حداکثر $1 {{PLURAL:$1|روز|روز}}) این کامپیتر دله ته ره یاد دواشه', 'tog-watchcreations' => 'ایضافه بین صفحه‌ئونی که من دِرِس هاکردمه به پیگیری‌ئون ِرج.', 'tog-watchdefault' => 'اضافه هاکردن صفحه‌هایی که چیمبه به منه پیگری ِرج', 'tog-watchmoves' => 'صفحه‌ئونی که کشمبه ره منه پِگیری ِرج دله بنویس', @@ -220,24 +221,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'ایضافه هکردن عونوان', -'vector-action-delete' => 'پاک هاکردن', -'vector-action-move' => 'دکش هاکردن', -'vector-action-protect' => 'موحافظت', -'vector-action-undelete' => 'دباره بنویشته بیّن', -'vector-action-unprotect' => 'موحافظت نکاردن', -'vector-namespace-category' => 'رج', -'vector-namespace-help' => 'راهنما ِصفحه', -'vector-namespace-image' => 'پرونده', -'vector-namespace-main' => 'صحفه', -'vector-view-create' => 'بساتن', -'vector-view-edit' => 'دچی‌ین', -'vector-view-history' => 'تاریخچه ره بَدی‌ین', -'vector-view-view' => 'بأخـونـه‌سـه‌ن', -'vector-view-viewsource' => 'چـه‌شــمـه ئـه‌شـه‌نـه‌ن', -'actions' => 'عملکاردون', -'namespaces' => 'ایسم فضائون', -'variants' => 'گویش‌ئون', +'vector-action-addsection' => 'ایضافه هکردن عونوان', +'vector-action-delete' => 'پاک هاکردن', +'vector-action-move' => 'دکش هاکردن', +'vector-action-protect' => 'موحافظت', +'vector-action-undelete' => 'دباره بنویشته بیّن', +'vector-action-unprotect' => 'موحافظت نکاردن', +'vector-simplesearch-preference' => 'فعال هاکردن پیشنهادون بگردستن پیشرفته (فقط پوسته برداری دله)', +'vector-view-create' => 'بساتن', +'vector-view-edit' => 'دچی‌ین', +'vector-view-history' => 'تاریخچه ره بَدی‌ین', +'vector-view-view' => 'بأخـونـه‌سـه‌ن', +'vector-view-viewsource' => 'چـه‌شــمـه ئـه‌شـه‌نـه‌ن', +'actions' => 'عملکاردون', +'namespaces' => 'ایسم فضائون', +'variants' => 'گویش‌ئون', 'errorpagetitle' => 'خطا!', 'returnto' => 'بردگستن تا $1', @@ -294,6 +292,7 @@ $2، $1', 'jumpto' => 'کپّل بیّن به:', 'jumptonavigation' => 'بگردستن', 'jumptosearch' => 'بخوندستن', +'pool-errorunknown' => 'خطای ناشناخته', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} درباره', @@ -384,7 +383,7 @@ $2، $1', 'yourname' => 'شمه کاروری‌نوم:', 'yourpassword' => 'شمه پسورد', 'yourpasswordagain' => 'پسورد ره دِباره بنویس', -'remembermypassword' => 'مـه کاروری نوم ئو پـأس‌واجه ره، ای کـامـپـیـوتـه‌ر ده‌لـه وه‌سـه، شـه یـاد بیـه‌ل', +'remembermypassword' => 'مـه کاروری نوم ئو پـأس‌واجه ره، ای کـامـپـیـوتـه‌ر ده‌لـه وه‌سـه، شـه یـاد بیـه‌ل (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'شمه کاروری نوم', 'login' => 'دله بوردن', 'nav-login-createaccount' => 'دله بوردن / عضو بیّن', @@ -400,6 +399,7 @@ $2، $1', 'gotaccount' => 'عضو هسنی؟ $1.', 'gotaccountlink' => 'بورین دله', 'createaccountmail' => 'ایمیل ِهمراه', +'createaccountreason' => 'دلیل:', 'badretype' => 'دِتا پسوردی که بنویشتی اتجور نینه', 'userexists' => 'این کاروری نوم وجود داشته. لطفأ ات نوم دیگه انتخاب هاکنین.', @@ -823,8 +823,9 @@ $2، $1', 'nextdiff' => 'ته‌رنه دأچیه‌ن ←', # Media information -'thumbsize' => 'أنـگـوسـی گأتی:', -'file-info-size' => '($1 × $2 پـیـکـسه‌ل, فـایـل گـأتـی: $3, MIME مـونـد: $4)', +'thumbsize' => 'أنـگـوسـی گأتی:', +'file-info-size' => '$1 × $2 پـیـکـسه‌ل, فـایـل گـأتـی: $3, MIME مـونـد: $4', +'file-info-png-frames' => '$1 {{PLURAL:$1|قاب|قاب}}', # Special:NewFiles 'newimages' => 'گالری نو عکس‌ئون', @@ -862,6 +863,19 @@ $2، $1', 'namespacesall' => 'هأمه', 'monthsall' => 'هـأمـه', +# E-mail address confirmation +'confirmemail_body_changed' => 'ات نفر، احتمالأ خاد شمِا، از نشونی آی‌پی $1 نشونی پوست ایلکتورونیک حیساب «$2» {{SITENAME}} ره تغییر هدائه. + +برای تایید این که این حیساب واقعاً شمه شه و فعال هکردن دبارهٔ ویژگی پوست ایلکتورونیک {{SITENAME}}، پیوند زیر دله ره شه مرورگر دله وا هکنین: + +$3 + +اگه این حساب شه مه نی‌یه، پیوند زیر ره دنبال هکنین تا تغییر پوست ایلیکتورونیک ره لغو هکنین: + +$5 + +این تایید یه در $4 منقضی وانه.', + # Multipage image navigation 'imgmultigo' => 'بور!', diff --git a/languages/messages/MessagesNah.php b/languages/messages/MessagesNah.php index e836d06a..dd70ecf1 100644 --- a/languages/messages/MessagesNah.php +++ b/languages/messages/MessagesNah.php @@ -82,7 +82,7 @@ $messages = array( 'tog-showtoolbar' => 'Tiquittāz in tlein motequitiltia tlapatlaliztechcopa (JavaScript)', 'tog-editondblclick' => 'Tiquimpatlāz zāzaniltin ōme clicca (JavaScript)', 'tog-showtoc' => 'Tiquittāz in tlein cah zāzotlahcuilōlco', -'tog-rememberpassword' => 'Ticpiyāz motlacalaquiliz inīn chīuhpōhualhuazco', +'tog-rememberpassword' => 'Ticpiyāz moMotlatequitiltilīltōca īhuān motlahtōlichtacāyo inīn chīuhpōhualhuazco (īxquich {{PLURAL:$1|tōnalli|tōnalli}})', 'tog-watchcreations' => 'Tiquintlachiyāz zāzaniltin tiquinchīhua', 'tog-watchdefault' => 'Tiquintlachiyāz zāzaniltin tiquimpatla', 'tog-watchmoves' => 'Tiquintlachiyāz zāzaniltin tiquinzaca', @@ -207,21 +207,15 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-delete' => 'Ticpolōz', -'vector-action-move' => 'Ticzacāz', -'vector-action-protect' => 'Ticquīxtīz', -'vector-namespace-category' => 'Neneuhcāyōtl', -'vector-namespace-mediawiki' => 'Tītlaniztli', -'vector-namespace-special' => 'Nōncuahquīzqui āmatl', -'vector-namespace-talk' => 'Tēixnāmiquiliztli', -'vector-namespace-template' => 'Nemachiyōtīlli', -'vector-namespace-user' => 'Tlatequitiltilīlli', -'vector-view-create' => 'Ticchīhuāz', -'vector-view-edit' => 'Ticpatlāz', -'vector-view-history' => 'Tlahcuilōlli tlahcuilōlloh', -'vector-view-view' => 'Tāmapōhuaz', -'vector-view-viewsource' => 'Tiquittāz in mēyalli', -'namespaces' => 'Tòkâyeyàntìn', +'vector-action-delete' => 'Ticpolōz', +'vector-action-move' => 'Ticzacāz', +'vector-action-protect' => 'Ticquīxtīz', +'vector-view-create' => 'Ticchīhuāz', +'vector-view-edit' => 'Ticpatlāz', +'vector-view-history' => 'Tlahcuilōlli tlahcuilōlloh', +'vector-view-view' => 'Tāmapōhuaz', +'vector-view-viewsource' => 'Tiquittāz in mēyalli', +'namespaces' => 'Tòkâyeyàntìn', 'errorpagetitle' => 'Ahcuallōtl', 'returnto' => 'Timocuepāz īhuīc $1.', @@ -385,7 +379,7 @@ Ye tihuelīti titēchihtoa [[Special:Preferences|motlaēlēhuiliz]].', 'yourname' => 'Motlatequitiltilīltōca:', 'yourpassword' => 'Motlahtōlichtacāyo', 'yourpasswordagain' => 'Motlahtōlichtacāyo occeppa', -'remembermypassword' => 'Ticpiyāz motlacalaquiliz inīn chīuhpōhualhuazco', +'remembermypassword' => 'Ticpiyāz motlacalaquiliz inīn chīuhpōhualhuazco (īxquich {{PLURAL:$1|tōnalli|tōnalli}})', 'yourdomainname' => 'Moāxcāyō', 'login' => 'Ximomachiyōmaca/Ximocalaqui', 'nav-login-createaccount' => 'Ximocalaqui / ximomachiyōmaca', @@ -401,6 +395,7 @@ Ye tihuelīti titēchihtoa [[Special:Preferences|motlaēlēhuiliz]].', 'gotaccount' => "¿Ye ticpiya cē cuentah? '''$1'''.", 'gotaccountlink' => 'Ximocalaqui', 'createaccountmail' => 'e-mailcopa', +'createaccountreason' => 'Tlèka:', 'badretype' => 'Ahneneuhqui motlahtōlichtacāyo.', 'userexists' => 'Ye ia in tōcāitl ōquihcuilo. Timitztlātlauhtiah xitlahcuiloa occē.', @@ -597,7 +592,7 @@ Hueliz ōmopolo huiqui nozo ōmozacac. 'difference' => '(Ahneneuhquiliztli tlapatlaliznepantlah)', 'lineno' => 'Pāntli $1:', 'editundo' => 'Tichuelōz', -'diff-multi' => '({{PLURAL:$1|Cē tlapatlaliztli nepantlah ahmo motta|$1 tlapatlaliztli nepantlah ahmo mottah}}.)', +'diff-multi' => '({{PLURAL:$1|Cē tlapatlaliztli nepantlah ahmo motta in ōquichīuh|$1 Tlapatlaliztli nepantlah ahmo mottah in ōquinchīuh}} {{PLURAL:$2|cē tlatequitiltilīlli|$2 tlatequitiltilīltin}})', # Search results 'searchresults' => 'Tlatēmoliztli', @@ -822,7 +817,6 @@ Tlahcuilōlli iuhcāyōtl {{PLURAL:\$3|moēlēhuia cah|moēlēhuiah cateh}} \$2. * Tlahcuilōlli moquetzacah: '''[[:$1]]''' * Tlahcuilōlli tlein ia ītōca: '''[[:$2]]''' Timitztlātlauhtiah, xitlahcuiloa occē tōcāitl.", -'successfulupload' => 'Cualli quetzaliztli', 'savefile' => 'Quipiyāz tlahcuilōlli', 'uploadedimage' => 'ōmoquetz "[[$1]]"', 'overwroteimage' => 'ōmoquetz yancuīc "[[$1]]" iuhcāyōtl', @@ -831,6 +825,7 @@ Timitztlātlauhtiah, xitlahcuiloa occē tōcāitl.", 'sourcefilename' => 'Tōcāhuīcpa:', 'destfilename' => 'Tōcāhuīc:', 'watchthisupload' => 'Tictlachiyāz inīn zāzanilli', +'upload-success-subj' => 'Cualli quetzaliztli', 'upload_source_file' => ' (cē tlahcuilōlli mochīuhpōhualhuazco)', @@ -931,6 +926,8 @@ Timitztlātlauhtiah, xitlahcuiloa occē tōcāitl.", 'nlinks' => '$1 {{PLURAL:$1|tzòwilistli|tzòwilistìn}}', 'nmembers' => '$1 {{PLURAL:$1|tlâkuilòpilli|tlâkuilòpiltìn}}', 'nrevisions' => '$1 {{PLURAL:$1|tlapiyaliztli|tlapiyaliztli}}', +'nimagelinks' => 'Motekìuhtia ìpan $1 {{PLURAL:$1|tlaìxtlapalli|tlaìxtlapaltìn}}', +'ntransclusions' => 'motekìuhtia ìpan $1 {{PLURAL:$1|tlaìxtlapalli|tlaìxtlapaltìn}}', 'uncategorizedpages' => 'Zāzaniltin ahmoneneuhcāyōtiah', 'uncategorizedcategories' => 'Tlaìxmatkàtlàlilòmë âmò tlatlaìxmatkàtlàlìltìn', 'uncategorizedimages' => 'Ìxiptìn âmò tlatlaìxmatkàtlàlìltìn', @@ -1023,7 +1020,6 @@ Nō xiquitta [[Special:WantedCategories|neneuhcāyōtl monequi]].', # Watchlist 'watchlist' => 'Notlachiyaliz', 'mywatchlist' => 'Notlachiyaliz', -'watchlistfor' => "('''$1''' ītechcopa)", 'watchnologin' => 'Ahmo ōtimocalac', 'addedwatch' => 'Ōmocētili tlachiyalizpan', 'removedwatch' => 'Ōmopolo īpan motlachiyaliz', @@ -1348,6 +1344,7 @@ Hueliz cah inīn huēyi tlapatlaliztli. Timitztlātlauhtia ticmatīz cuallōtl a # Media information 'widthheightpage' => '$1×$2, $3 {{PLURAL:|zāzanilli|zāzanilli}}', +'file-info-size' => '$1 × $2 pixel; zāzanilli octacayōtl: $3; machiyōtl MIME: $4', 'file-nohires' => 'Ahmo ia achi cualli ahmo occē īxiptli.', 'show-big-image' => 'Mochi cuallōtl', diff --git a/languages/messages/MessagesNan.php b/languages/messages/MessagesNan.php index 2496682b..420ed076 100644 --- a/languages/messages/MessagesNan.php +++ b/languages/messages/MessagesNan.php @@ -33,8 +33,7 @@ $messages = array( 'tog-editsection' => 'Ji̍h [siu-kái] chit-ê liân-kiat to̍h ē-tàng pian-chi̍p toāⁿ-lo̍h', 'tog-editsectiononrightclick' => 'Chiàⁿ-ji̍h (right click) toāⁿ-lo̍h (section) phiau-tê to̍h ē-tàng pian-chi̍p toāⁿ-lo̍h (su-iàu JavaScript)', 'tog-showtoc' => 'Hián-sī bo̍k-chhù (3-ê phiau-tê í-siōng ê ia̍h)', -'tog-rememberpassword' => 'Kì tiâu bi̍t-bé, āu-chōa iōng', -'tog-editwidth' => 'Pian-chi̍p keh-á thián kàu siōng khoah', +'tog-rememberpassword' => 'Kì tiâu bi̍t-bé, āu-chōa iōng (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Kā goá khui ê ia̍h ka-ji̍p kàm-sī-toaⁿ lāi-té', 'tog-watchdefault' => 'Kā goá pian-chi̍p kòe ê ia̍h ka-ji̍p kàm-sī-toaⁿ lāi-té', 'tog-watchmoves' => 'Kā goá soá ê ia̍h ka-ji̍p kàm-sī-toaⁿ', @@ -132,22 +131,12 @@ $messages = array( 'qbspecialpages' => 'Te̍k-sû-ia̍h', # Vector skin -'vector-action-delete' => 'Thâi', -'vector-action-move' => 'Sóa khì', -'vector-action-protect' => 'Pó-hō·', -'vector-action-unprotect' => 'Chhú-siau pó-hō·', -'vector-namespace-category' => 'Lūi-pia̍t', -'vector-namespace-image' => 'Tóng-àn', -'vector-namespace-main' => 'Bûn-chiuⁿ', -'vector-namespace-media' => 'Mûi-thé', -'vector-namespace-mediawiki' => 'Sìn-sit', -'vector-namespace-project' => 'Sū-kang ia̍h', -'vector-namespace-special' => 'Te̍k-sû-ia̍h', -'vector-namespace-talk' => 'thó-lūn', -'vector-namespace-template' => 'Pang-bô·', -'vector-namespace-user' => 'Iōng-chiá ê ia̍h', -'vector-view-edit' => 'Siu-kái', -'vector-view-viewsource' => 'Khoàⁿ goân-sú lōe-iông', +'vector-action-delete' => 'Thâi', +'vector-action-move' => 'Sóa khì', +'vector-action-protect' => 'Pó-hō·', +'vector-action-unprotect' => 'Chhú-siau pó-hō·', +'vector-view-edit' => 'Siu-kái', +'vector-view-viewsource' => 'Khoàⁿ goân-sú lōe-iông', 'errorpagetitle' => 'Chhò-gō·', 'returnto' => 'Tò-tńg khì $1.', @@ -260,7 +249,7 @@ Chhiaⁿ chù-ì: ū-kóa ia̍h ū khó-lêng khoàⁿ-tio̍h bē-su lí iû-go 'yourname' => 'Lí ê iōng-chiá miâ-chheng:', 'yourpassword' => 'Lí ê bi̍t-bé:', 'yourpasswordagain' => 'Têng phah bi̍t-bé:', -'remembermypassword' => 'Kì tiâu góa ê bi̍t-bé (āu-chhiú teng-ji̍p iōng).', +'remembermypassword' => 'Kì tiâu góa ê bi̍t-bé (āu-chhiú teng-ji̍p iōng) (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'Teng-ji̍p', 'nav-login-createaccount' => 'Teng-ji̍p / khui sin kháu-chō', 'loginprompt' => 'Thiⁿ ē-kha ê chu-liāu thang khui sin hō·-thâu a̍h-sī teng-ji̍p {{SITENAME}}.', @@ -353,7 +342,6 @@ Lí ê kái-piàn tī ē-kha ê bûn-jī-keh. Lí su-iàu chiōng lí chò ê k 'storedversion' => 'Chu-liāu-khò· ê pán-pún', 'editingold' => "'''KÉNG-KÒ: Lí tng teh siu-kái chit ia̍h ê 1 ê kū siu-tēng-pún. Lí nā kā pó-chûn khí lâi, chit ê siu-tēng-pún sòa-āu ê jīm-hô kái-piàn ē bô khì.'''", 'yourdiff' => 'Chha-pia̍t', -'longpagewarning' => "'''SÈ-JĪ: Pún ia̍h $1 kilobyte tn̂g; ū-ê liû-lám-khì bô-hoat-tō· pian-chi̍p 32 kb chó-iū ia̍h-sī koh khah tn̂g ê ia̍h. Chhiáⁿ khó-lū kā chit ia̍h thiah chò khah sè ê toāⁿ-lo̍h.'''", 'readonlywarning' => "'''CHÙ-Ì: Chu-liāu-khò· taⁿ só tiâu leh thang pān î-siu khang-khòe, só·-í lí hiān-chú-sî bô thang pó-chûn jīn-hô phian-chi̍p hāng-bo̍k. Lí ē-sái kā siong-koan pō·-hūn tah--ji̍p-khì 1-ê bûn-jī tóng-àn pó-chûn, āu-chhiú chiah koh kè-sio̍k.'''", 'protectedpagewarning' => "'''KÉNG-KÒ: Pún ia̍h só tiâu leh. Kan-taⁿ ū hêng-chèng te̍k-koân ê iōng-chiá (sysop) ē-sái siu-kái.'''", 'templatesused' => 'Chit ia̍h iōng chia ê pang-bô·:', @@ -478,28 +466,28 @@ Lí ê kái-piàn tī ē-kha ê bûn-jī-keh. Lí su-iàu chiōng lí chò ê k 'recentchangeslinked-noresult' => 'Lí chí-tēng ê tiâu-kiaⁿ lāi-té chhōe bô jīn-hô kái-piàn.', # Upload -'upload' => 'Kā tóng-àn chiūⁿ-bāng', -'uploadbtn' => 'Kā tóng-àn chiūⁿ-bāng', -'reuploaddesc' => 'Tò khì sàng-chiūⁿ-bāng ê pió.', -'uploadnologin' => 'Bô teng-ji̍p', -'uploadnologintext' => 'Bô [[Special:UserLogin|teng-ji̍p]] bē-sái-tit kā tóng-àn sàng-chiūⁿ-bāng.', -'uploaderror' => 'Upload chhò-gō·', -'uploadlogpagetext' => 'Í-hā sī chòe-kīn sàng-chiūⁿ-bāng ê tóng-àn ê lia̍t-toaⁿ.', -'filename' => 'Tóng-àn', -'filedesc' => 'Khài-iàu', -'fileuploadsummary' => 'Khài-iàu:', -'uploadedfiles' => 'Tóng-àn í-keng sàng chiūⁿ-bāng', -'ignorewarning' => 'Mài chhap kéng-kò, kā tóng-àn pó-chûn khí lâi.', -'ignorewarnings' => 'Mài chhap kéng-kò', -'badfilename' => 'Iáⁿ-siōng ê miâ í-keng kái chò "$1".', -'successfulupload' => 'Sàng-chiūⁿ-bāng sêng-kong', -'uploadwarning' => 'Upload kéng-kò', -'savefile' => 'Pó-chûn tóng-àn', -'uploadedimage' => 'thoân "[[$1]]" chiūⁿ-bāng', -'uploaddisabled' => 'Pháiⁿ-sè, sàng chiūⁿ-bāng ê kong-lêng bô khui.', -'sourcefilename' => 'Tóng-àn goân miâ:', -'destfilename' => 'Tóng-àn sin miâ:', -'watchthisupload' => 'Kàm-sī chit ia̍h', +'upload' => 'Kā tóng-àn chiūⁿ-bāng', +'uploadbtn' => 'Kā tóng-àn chiūⁿ-bāng', +'reuploaddesc' => 'Tò khì sàng-chiūⁿ-bāng ê pió.', +'uploadnologin' => 'Bô teng-ji̍p', +'uploadnologintext' => 'Bô [[Special:UserLogin|teng-ji̍p]] bē-sái-tit kā tóng-àn sàng-chiūⁿ-bāng.', +'uploaderror' => 'Upload chhò-gō·', +'uploadlogpagetext' => 'Í-hā sī chòe-kīn sàng-chiūⁿ-bāng ê tóng-àn ê lia̍t-toaⁿ.', +'filename' => 'Tóng-àn', +'filedesc' => 'Khài-iàu', +'fileuploadsummary' => 'Khài-iàu:', +'uploadedfiles' => 'Tóng-àn í-keng sàng chiūⁿ-bāng', +'ignorewarning' => 'Mài chhap kéng-kò, kā tóng-àn pó-chûn khí lâi.', +'ignorewarnings' => 'Mài chhap kéng-kò', +'badfilename' => 'Iáⁿ-siōng ê miâ í-keng kái chò "$1".', +'uploadwarning' => 'Upload kéng-kò', +'savefile' => 'Pó-chûn tóng-àn', +'uploadedimage' => 'thoân "[[$1]]" chiūⁿ-bāng', +'uploaddisabled' => 'Pháiⁿ-sè, sàng chiūⁿ-bāng ê kong-lêng bô khui.', +'sourcefilename' => 'Tóng-àn goân miâ:', +'destfilename' => 'Tóng-àn sin miâ:', +'watchthisupload' => 'Kàm-sī chit ia̍h', +'upload-success-subj' => 'Sàng-chiūⁿ-bāng sêng-kong', # Special:ListFiles 'listfiles' => 'Iáⁿ-siōng lia̍t-toaⁿ', @@ -641,7 +629,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'Kàm-sī-toaⁿ', 'mywatchlist' => 'Góa ê kàm-sī-toaⁿ', -'watchlistfor' => "('''$1''' ê)", 'nowatchlist' => 'Lí ê kàm-sī-toaⁿ bô pòaⁿ hāng.', 'watchnologin' => 'Bô teng-ji̍p', 'watchnologintext' => 'Lí it-tēng ài [[Special:UserLogin|teng-ji̍p]] chiah ē-tàng siu-kái lí ê kàm-sī-toaⁿ.', diff --git a/languages/messages/MessagesNap.php b/languages/messages/MessagesNap.php index 9c7d1ce3..b4c142f1 100644 --- a/languages/messages/MessagesNap.php +++ b/languages/messages/MessagesNap.php @@ -66,8 +66,7 @@ $messages = array( 'tog-editsection' => "Permette 'e cagnà 'e sezzione cu a jonta [cagna]", 'tog-editsectiononrightclick' => "Permette 'e cangne 'e sezzione cliccanno p''o tasto destro ncopp 'e titule 'e sezzione (JavaScript)", 'tog-showtoc' => "Mosta ll'innece pe 'e paggene cu cchiù 'e 3 sezzione", -'tog-rememberpassword' => "Ricurda 'a registrazzione pe' cchiu sessione", -'tog-editwidth' => "Larghezza massima d''a casella pe scrivere", +'tog-rememberpassword' => "Ricurda 'a registrazzione pe' cchiu sessione (for a maximum of $1 {{PLURAL:$1|day|days}})", 'underline-always' => 'Sèmpe', 'underline-never' => 'Màje', @@ -223,7 +222,7 @@ Putite cuntinuà a ausà {{SITENAME}} comme n'utente senza nomme, o si nò putit 'welcomecreation' => "== Bemmenuto, $1! == 'O cunto è stato criato currettamente. Nun scurdà 'e perzonalizzà 'e ppreferenze 'e {{SITENAME}}.", -'remembermypassword' => 'Allicuordate d"a password', +'remembermypassword' => 'Allicuordate d"a password (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => "Spiecà 'o dumminio", 'login' => 'Tràse', 'userlogin' => "Tràse o cria n'acciesso nuovo", diff --git a/languages/messages/MessagesNds.php b/languages/messages/MessagesNds.php index 3bb683bf..9148ff34 100644 --- a/languages/messages/MessagesNds.php +++ b/languages/messages/MessagesNds.php @@ -42,6 +42,7 @@ $namespaceAliases = array( '$1_Diskussion' => NS_PROJECT_TALK, 'Bild' => NS_FILE, 'Bild_Diskussion' => NS_FILE_TALK, + 'Bild_Diskuschoon' => NS_FILE_TALK, 'MediaWiki_Diskussion' => NS_MEDIAWIKI_TALK, 'Vorlage' => NS_TEMPLATE, 'Vorlage_Diskussion' => NS_TEMPLATE_TALK, @@ -111,7 +112,7 @@ $namespaceNames = array( ); $linkTrail = '/^([äöüßa-z]+)(.*)$/sDu'; -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $dateFormats = array( 'mdy time' => 'H:i', @@ -226,8 +227,7 @@ $messages = array( 'tog-editsection' => 'Links för dat Ännern vun en Afsatz wiesen', 'tog-editsectiononrightclick' => 'En Afsatz mit en Rechtsklick ännern (Javascript)', 'tog-showtoc' => "Wiesen vun'n Inholtsverteken bi Sieten mit mehr as dree Överschriften", -'tog-rememberpassword' => 'Duersam Inloggen', -'tog-editwidth' => 'Text-Ingaavfeld mit vulle Breed', +'tog-rememberpassword' => 'Duersam inloggen (för maximaal $1 {{PLURAL:$1|Dag|Daag}})', 'tog-watchcreations' => 'Nee schrevene Sieden op miene Oppasslist setten', 'tog-watchdefault' => 'Op ne’e un ännerte Sieden oppassen', 'tog-watchmoves' => 'Sieden, de ik schuuv, to de Oppasslist todoon', @@ -368,31 +368,21 @@ un dat [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Brukerhandbook] 'faqpage' => 'Project:Faken stellte Fragen', # Vector skin -'vector-action-addsection' => 'Thema tofögen', -'vector-action-delete' => 'Wegdoon', -'vector-action-move' => 'Schuven', -'vector-action-protect' => 'Schulen', -'vector-action-undelete' => 'Wedderhalen', -'vector-action-unprotect' => 'Freegeven', -'vector-namespace-category' => 'Kategorie', -'vector-namespace-help' => 'Hülpsied', -'vector-namespace-image' => 'Datei', -'vector-namespace-main' => 'Sied', -'vector-namespace-media' => 'Mediensied', -'vector-namespace-mediawiki' => 'Naricht', -'vector-namespace-project' => 'Projektsied', -'vector-namespace-special' => 'Spezialsied', -'vector-namespace-talk' => 'Diskuschoon', -'vector-namespace-template' => 'Vörlaag', -'vector-namespace-user' => 'Brukersied', -'vector-view-create' => 'Opstellen', -'vector-view-edit' => 'Ännern', -'vector-view-history' => 'Historie bekieken', -'vector-view-view' => 'Lesen', -'vector-view-viewsource' => 'Borntext bekieken', -'actions' => 'Akschonen', -'namespaces' => 'Naamrüüm', -'variants' => 'Varianten', +'vector-action-addsection' => 'Thema tofögen', +'vector-action-delete' => 'Wegdoon', +'vector-action-move' => 'Schuven', +'vector-action-protect' => 'Schulen', +'vector-action-undelete' => 'Wedderhalen', +'vector-action-unprotect' => 'Freegeven', +'vector-simplesearch-preference' => 'Verbeterte Söökvörslääg anstellen (blot mit’n Skin Vector)', +'vector-view-create' => 'Opstellen', +'vector-view-edit' => 'Ännern', +'vector-view-history' => 'Historie bekieken', +'vector-view-view' => 'Lesen', +'vector-view-viewsource' => 'Borntext bekieken', +'actions' => 'Akschonen', +'namespaces' => 'Naamrüüm', +'variants' => 'Varianten', 'errorpagetitle' => 'Fehler', 'returnto' => 'Trüch to $1.', @@ -607,7 +597,7 @@ Vergeet nich, de Sied för di persönlich [[Special:Preferences|intostellen]].', 'yourname' => 'Dien Brukernaam', 'yourpassword' => 'Dien Passwoort', 'yourpasswordagain' => 'Passwoort nochmal ingeven', -'remembermypassword' => 'Duersam inloggen', +'remembermypassword' => 'Duersam inloggen (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Diene Domään:', 'externaldberror' => 'Dat geev en Fehler bi de externe Authentifizerungsdatenbank oder du dröffst dien extern Brukerkonto nich ännern.', 'login' => 'Anmellen', @@ -624,6 +614,7 @@ Vergeet nich, de Sied för di persönlich [[Special:Preferences|intostellen]].', 'gotaccount' => "Hest Du al en Brukerkonto? '''$1'''.", 'gotaccountlink' => 'Anmellen', 'createaccountmail' => 'över E-Mail', +'createaccountreason' => 'Grund:', 'badretype' => 'De beiden Passwöör stimmt nich övereen.', 'userexists' => 'Disse Brukernaam is al weg. Bitte söök di en annern ut.', 'loginerror' => 'Fehler bi dat Anmellen', @@ -643,6 +634,7 @@ Kiek de Schrievwies na oder [[Special:UserLogin/signup|mell di as ne’en Bruker 'wrongpasswordempty' => 'Dat Passwoort, wat du ingeven hest, is leddig, versöök dat noch wedder.', 'passwordtooshort' => 'Passwöör mööt opminnst {{PLURAL:$1|een Teken|$1 Teken}} lang oder länger wesen.', 'password-name-match' => 'Du dröffst nich dien Brukernaam as Passwoord nehmen.', +'password-login-forbidden' => 'Dat Bruken von dissen Brukernaam un dit Passwoord is nich verlöövt.', 'mailmypassword' => 'En nee Passwoord tostüren', 'passwordremindertitle' => 'Nee Passwoort för {{SITENAME}}', 'passwordremindertext' => 'Een (IP-Adress $1) hett för en nee Passwoord to’n Anmellen bi {{SITENAME}} beden ($4). @@ -675,6 +667,9 @@ Wenn du dat Brukerkonto gor nich hebben wullst, denn is disse Naricht egaal för Tööv en Stoot, ehrdat du dat noch wedder versöchst.', 'loginlanguagelabel' => 'Spraak: $1', +# E-mail sending +'php-mail-error-unknown' => 'Unbekennten Fehler in PHP sien mail()-Funkschoon', + # Password reset dialog 'resetpass' => 'Passwoord ännern', 'resetpass_announce' => 'Du hest di mit en Kood anmellt, de di över E-Mail toschickt worrn is. Dat anmellen aftosluten, söök di nu en neet Passwoord ut:', @@ -725,9 +720,11 @@ Villicht hest du dien Passwoord al ännert oder noch wedder en nee temporär Pas 'showlivepreview' => 'Live-Vörschau', 'showdiff' => 'Ünnerscheed wiesen', 'anoneditwarning' => "'''Wohrschau:''' Du büst nich anmellt. Diene IP-Adress warrt in de Versionshistorie vun de Siet fasthollen.", +'anonpreviewwarning' => "''Du büst nich anmellt. Wenn du nu afspiekerst, dükert dien IP-Adress in de Versionsgeschicht op.''", 'missingsummary' => "'''Wohrschau:''' Du hest keen Tosamenfaten angeven, wat du ännert hest. Wenn du nu Spiekern klickst, warrt de Siet ahn Tosamenfaten spiekert.", 'missingcommenttext' => 'Geev ünnen en Tosamenfaten in.', -'missingcommentheader' => "'''WOHRSCHAU:''' Du hest keen Överschrift in dat Feld „{{MediaWiki:Subject/nds}}“ ingeven. Wenn du noch wedder op „{{MediaWiki:Savearticle/nds}}“ klickst, denn warrt dien Ännern ahn Överschrift spiekert.", +'missingcommentheader' => "'''Wohrschau:''' Du hest keen Överschrift in dat Feld „{{int:Subject}}“ ingeven. +Wenn du noch wedder op „{{int:Savearticle}}“ klickst, denn warrt dien Ännern ahn Överschrift spiekert.", 'summary-preview' => 'Vörschau vun’t Tosamenfaten:', 'subject-preview' => "Vörschau vun de Reeg ''Tosamenfaten'':", 'blockedtitle' => 'Bruker is blockt', @@ -796,7 +793,7 @@ De jüngste Indrag in dat Sperr-Logbook wart ünnen wiest:', 'userjsyoucanpreview' => "'''Tipp:''' Bruuk den Vörschau-Knoop, üm dien nieg JS vör dat Spiekern to testen.", 'usercsspreview' => "'''Denk doran, dat du blots en Vörschau vun dien CSS ankickst, dat is noch nich spiekert!'''", 'userjspreview' => "'''Denk doran, dat du blots en Vörschau vun dien JS ankiekst, dat is noch nich spiekert!'''", -'userinvalidcssjstitle' => "'''Wohrschau:''' Dat gifft keen Skin „$1“. Denk dor an, dat .css- un .js-Sieden för Brukers mit en lütten Bookstaven anfangen mööt, to’n Bispeel ''{{ns:user}}:Brukernaam/monobook.css'' un nich ''{{ns:user}}:Brukernaam/Monobook.css''.", +'userinvalidcssjstitle' => "'''Wohrschau:''' Dat gifft keen Skin „$1“. Denk dor an, dat .css- un .js-Sieden för Brukers mit en lütten Bookstaven anfangen mööt, to’n Bispeel ''{{ns:user}}:Brukernaam/vector.css'' un nich ''{{ns:user}}:Brukernaam/Vector.css''.", 'updated' => '(Ännert)', 'note' => "'''Wohrschau:'''", 'previewnote' => "'''Dit is blots en Vörschau, de Siet is noch nich spiekert!'''", @@ -833,8 +830,6 @@ Wenn du dat nich wullst, dröffst du dien Text hier nich apentlich maken.
    Du bestätigst ok, dat du den Text sülvst schreven hest oder ut en „Public Domain“-Born oder en annere fre'e Born kopeert hest (Kiek ok $1 för Details). '''Kopeer kene Warken, de enen Oorheverrecht ünnerliggt, ahn Verlööv vun de Copyright-Inhebbers!'''", -'longpagewarning' => "'''Wohrschau: Disse Sied is $1 kB groot; en poor Browsers köönt Problemen hebben, Sieden to ännern, de grötter as 32 kB sünd. -Överlegg, wat disse Sied nich villicht in lüttere Afsneed opdeelt warrn kann.'''", 'longpageerror' => "'''Fehler: Dien Text is $1 Kilobytes lang. Dat is länger as dat Maximum vun $2 Kilobytes. Kann den Text nich spiekern.'''", 'readonlywarning' => "'''Wohrscho: De Datenbank is för Pleegarbeiden sparrt worrn, so dat du de Sied en Stoot nich spiekern kannst. Seker di den Text un versöök dat later noch wedder.''' @@ -1043,7 +1038,8 @@ Seh to, dat de Versionsgeschicht vun’n Artikel vun de Historie her bi de Reeg 'compareselectedversions' => 'Ünnerscheed twischen den utwählten Versionen wiesen', 'showhideselectedversions' => 'Utwählt Versionen wiesen/versteken', 'editundo' => 'rutnehmen', -'diff-multi' => '(Twischen de beiden Versionen {{PLURAL:$1|liggt noch ene Twischenversion|doot noch $1 Twischenversionen liggen}}.)', +'diff-multi' => '({{PLURAL:$1|Een Twischenversion|$1 Twischenversionen}} von {{PLURAL:$2|een Bruker|$2 Brukers}} warrt nich wiest.)', +'diff-multi-manyusers' => '({{PLURAL:$1|Een Twischenversion|$1 Twischenversionen}} von mehr as $2 {{PLURAL:$2|Bruker|Brukers}} warrt nich wiest)', # Search results 'searchresults' => 'Söökresultaten', @@ -1078,6 +1074,7 @@ Seh to, dat de Versionsgeschicht vun’n Artikel vun de Historie her bi de Reeg 'searchprofile-everything-tooltip' => 'Allen Inholt dörsöken (inklusiv Diskuschoonssieden)', 'searchprofile-advanced-tooltip' => 'Söök in angevene Naamrüüm', 'search-result-size' => '$1 ({{PLURAL:$2|een Woort|$2 Wöör}})', +'search-result-category-size' => '{{PLURAL:$1|1 Sied|$1 Sieden}} ({{PLURAL:$2|1 Ünnerkategorie|$2 Ünnerkategorien}}, {{PLURAL:$3|1 Datei|$3 Datein}})', 'search-result-score' => 'Relevanz: $1 %', 'search-redirect' => '(Redirect $1)', 'search-section' => '(Afsnitt $1)', @@ -1154,6 +1151,7 @@ de aver nich jümmer den aktuellsten Stand weerspegelt.

    ', 'contextlines' => 'Lienen pro Treffer', 'contextchars' => 'Teken je Reeg', 'stub-threshold' => 'Grött ünner de Lenken op Stubbens un lütte Sieden farvlich kenntekent warrn schöölt (in Bytes):', +'stub-threshold-disabled' => 'Utstellt', 'recentchangesdays' => 'Daag, de de List vun de „Ne’esten Ännern“ wiesen schall:', 'recentchangesdays-max' => '(Maximal $1 {{PLURAL:$1|Dag|Daag}})', 'recentchangescount' => 'Antall Ännern, de wiest warrt:', @@ -1187,6 +1185,7 @@ Hier is en Tofalls-Slötel, den du bruken kannst: $1', 'prefs-files' => 'Datein', 'prefs-custom-css' => 'Anpasst CSS', 'prefs-custom-js' => 'Anpasst JS', +'prefs-common-css-js' => 'Deelt CSS/JavaScript för all Skins:', 'prefs-reset-intro' => 'Du kannst disse Sied bruken, dien Instellungen al op de Standardinstellung trüchtosetten. Dat kann nich wedder ungeschehn maakt warrn.', 'prefs-emailconfirm-label' => 'E-Mail-Bestätigung:', @@ -1222,8 +1221,14 @@ Dat kann nich wedder ungeschehn maakt warrn.', 'prefs-advancedrendering' => 'Anner Instellungen', 'prefs-advancedsearchoptions' => 'Anner Instellungen', 'prefs-advancedwatchlist' => 'Anner Instellungen', +'prefs-displayrc' => 'Weddergaav-Instellungen', +'prefs-displaysearchoptions' => 'Weddergaav-Instellungen', +'prefs-displaywatchlist' => 'Weddergaav-Instellungen', 'prefs-diffs' => 'Ünnerscheed', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'E-Mail-Adress lett good', + # User rights 'userrights' => 'Brukerrechten inrichten', 'userrights-lookup-user' => 'Brukergruppen verwalten', @@ -1469,7 +1474,6 @@ Wenn du ehr liekers hoochladen wullt, gah trüch un laad de Datei ünner en anne 'fileexists-shared-forbidden' => 'Dat gifft al en Datei mit dissen Naam. Gah trüch un laad de Datei ünner en annern Naam hooch. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'De Datei is desülve as disse {{PLURAL:$1|Datei|$1 Datein}}:', 'file-deleted-duplicate' => 'Jüst disse Datei ([[:$1]]) is al mal löscht worrn. Kiek man eerst, wat in dat Löschlogbook steiht, ehrdat du ehr noch wedder hoochlaadst.', -'successfulupload' => 'Datei hoochladen hett Spood', 'uploadwarning' => 'Wohrschau', 'savefile' => 'Datei spiekern', 'uploadedimage' => '„$1“ hoochladen', @@ -1491,6 +1495,7 @@ Wenn du ehr liekers hoochladen wullt, gah trüch un laad de Datei ünner en anne Bedenk di eerst, wat dat ok passt, dat du de Datei noch wedder hoochladen deist. Hier dat Logbook, wo insteiht, worüm de Sied wegsmeten worrn is:", 'filename-bad-prefix' => "De Naam vun de Datei fangt mit '''„$1“''' an. Dat is normalerwies en Naam, den de Datei automaatsch vun de Digitalkamera kriggt. De Naam beschrievt de Datei nich un seggt dor ok nix över ut. Söök di doch en Naam för de Datei ut, de ok wat över den Inholt seggt.", +'upload-success-subj' => 'Datei hoochladen hett Spood', 'upload-proto-error' => 'Verkehrt Protokoll', 'upload-proto-error-text' => 'De URL mutt mit http:// oder ftp:// anfangen.', @@ -1631,7 +1636,6 @@ Denk dor an, natokieken, wat nich noch annere Sieden na de Vörlagen wiest, ehrd 'statistics-edits-average' => 'Dörsnittlich Ännern je Sied', 'statistics-views-total' => 'Weddergeven Sieden alltohoop', 'statistics-views-peredit' => 'Weddergeven Sieden je Ännern', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Job-Queue-Längd]', 'statistics-users' => 'Anmellt [[Special:ListUsers|Brukers]]', 'statistics-users-active' => 'Aktive Brukers', 'statistics-users-active-desc' => 'Brukers, de {{PLURAL:$1|in de vergahn 24 Stünnen|in de vergahn $1 Daag}} wat daan hebbt', @@ -1823,33 +1827,38 @@ Mehr Informatschonen över enkelte Rechten staht ünner [[{{MediaWiki:Listgroupr 'listgrouprights-removegroup-self-all' => 'Kann all Gruppen vun’t egen Brukerkonto wegdoon', # E-mail user -'mailnologin' => 'Du büst nich anmellt.', -'mailnologintext' => 'Du musst [[Special:UserLogin|anmellt wesen]] un in diene [[Special:Preferences|Instellungen]] en güllige E-Mail-Adress hebben, dat du annere Brukers E-Mails tostüren kannst.', -'emailuser' => 'E-Mail an dissen Bruker', -'emailpage' => 'E-Mail an Bruker', -'emailpagetext' => 'Du kannst dissen Bruker mit dit Formular en E-Mail tostüren. As Afsenner warrt de E-Mail-Adress ut dien [[Special:Preferences|Instellen]] indragen, dat de Bruker di antern kann.', -'usermailererror' => 'Dat Mail-Objekt hett en Fehler trüchgeven:', -'defemailsubject' => '{{SITENAME}} E-Mail', -'noemailtitle' => 'Kene E-Mail-Adress', -'noemailtext' => 'Disse Bruker hett kene güllige E-Mail-Adress angeven.', -'nowikiemailtitle' => 'E-Mails sünd nich verlöövt', -'nowikiemailtext' => 'Disse Bruker will vun annere Brukers keen E-Mails tostüürt kriegen.', -'email-legend' => 'en annern Bruker op {{SITENAME}} en E-Mail tostüren', -'emailfrom' => 'Vun:', -'emailto' => 'An:', -'emailsubject' => 'Bedrap:', -'emailmessage' => 'Naricht:', -'emailsend' => 'Sennen', -'emailccme' => 'Ik will en Kopie vun mien Naricht an mien egen E-Mail-Adress hebben.', -'emailccsubject' => 'Kopie vun diene Naricht an $1: $2', -'emailsent' => 'E-Mail afsennt', -'emailsenttext' => 'Dien E-Mail is afsennt worrn.', -'emailuserfooter' => 'Disse E-Mail hett $1 över de Funkschoon „{{int:emailuser}}“ vun {{SITENAME}} $2 tostüürt.', +'mailnologin' => 'Du büst nich anmellt.', +'mailnologintext' => 'Du musst [[Special:UserLogin|anmellt wesen]] un in diene [[Special:Preferences|Instellungen]] en güllige E-Mail-Adress hebben, dat du annere Brukers E-Mails tostüren kannst.', +'emailuser' => 'E-Mail an dissen Bruker', +'emailpage' => 'E-Mail an Bruker', +'emailpagetext' => 'Du kannst dissen Bruker mit dit Formular en E-Mail tostüren. As Afsenner warrt de E-Mail-Adress ut dien [[Special:Preferences|Instellen]] indragen, dat de Bruker di antern kann.', +'usermailererror' => 'Dat Mail-Objekt hett en Fehler trüchgeven:', +'defemailsubject' => '{{SITENAME}} E-Mail', +'usermaildisabled' => 'E-Mails an Brukers utstellt', +'usermaildisabledtext' => 'Du kannst op dit Wiki keen E-Mails na annere Brukers stüren', +'noemailtitle' => 'Kene E-Mail-Adress', +'noemailtext' => 'Disse Bruker hett kene güllige E-Mail-Adress angeven.', +'nowikiemailtitle' => 'E-Mails sünd nich verlöövt', +'nowikiemailtext' => 'Disse Bruker will vun annere Brukers keen E-Mails tostüürt kriegen.', +'email-legend' => 'en annern Bruker op {{SITENAME}} en E-Mail tostüren', +'emailfrom' => 'Vun:', +'emailto' => 'An:', +'emailsubject' => 'Bedrap:', +'emailmessage' => 'Naricht:', +'emailsend' => 'Sennen', +'emailccme' => 'Ik will en Kopie vun mien Naricht an mien egen E-Mail-Adress hebben.', +'emailccsubject' => 'Kopie vun diene Naricht an $1: $2', +'emailsent' => 'E-Mail afsennt', +'emailsenttext' => 'Dien E-Mail is afsennt worrn.', +'emailuserfooter' => 'Disse E-Mail hett $1 över de Funkschoon „{{int:emailuser}}“ vun {{SITENAME}} $2 tostüürt.', + +# User Messenger +'usermessage-summary' => 'Systemnaricht trügglaten', # Watchlist 'watchlist' => 'Mien Oppasslist', 'mywatchlist' => 'Mien Oppasslist', -'watchlistfor' => "(för '''$1''')", +'watchlistfor2' => 'För $1 $2', 'nowatchlist' => 'Du hest kene Indreeg op dien Oppasslist.', 'watchlistanontext' => '$1, dat du dien Oppasslist ankieken oder ännern kannst.', 'watchnologin' => 'Du büst nich anmellt', @@ -1956,7 +1965,9 @@ De letzte Ännern is vun [[User:$3|$3]] ([[User talk:$3|Diskuschoon]]{{int:pipe- 'editcomment' => "De Ännerkommentar weer: „''$1''“.", 'revertpage' => 'Ännern vun [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskuschoon]]) rut un de Version vun [[User:$1]] wedderhaalt', 'rollback-success' => 'Ännern vun $1 trüchsett op letzte Version vun $2.', -'sessionfailure' => 'Dor weer en Problem mit diene Brukersitzung. + +# Edit tokens +'sessionfailure' => 'Dor weer en Problem mit diene Brukersitzung. Disse Akschoon is nu ut Sekerheitsgrünn afbraken, dat de Ännern nich verkehrt en annern Bruker toornt warrt. Gah een Sied trüch un versöök dat noch wedder.', @@ -2090,6 +2101,7 @@ $1', 'sp-contributions-newbies-title' => 'Brukerbidrääg vun ne’e Brukers', 'sp-contributions-blocklog' => 'Sparr-Logbook', 'sp-contributions-deleted' => 'Wegsmetene Bidrääg vun’n Bruker', +'sp-contributions-uploads' => 'hooglaadt Datein', 'sp-contributions-logs' => 'Logböker', 'sp-contributions-talk' => 'Diskuschoon', 'sp-contributions-userrights' => 'Brukerrechten inrichten', @@ -2156,7 +2168,6 @@ Op de [[Special:IPBlockList|IP-Blocklist]] is en List vun alle Blocks to finnen. 'ipb-edit-dropdown' => 'Blockgrünn ännern', 'ipb-unblock-addr' => '„$1“ freegeven', 'ipb-unblock' => 'IP-Adress/Bruker freegeven', -'ipb-blocklist-addr' => 'Aktuelle Sperren för „$1“', 'ipb-blocklist' => 'Aktuelle Sperren wiesen', 'ipb-blocklist-contribs' => 'Brukerbidrääg för „$1“', 'unblockip' => 'IP-Adress freegeven', @@ -2374,6 +2385,7 @@ All Transwiki-Import-Akschonen staht later ok in dat [[Special:Log/import|Import 'importstart' => 'Sieden warrt rinhaalt...', 'import-revision-count' => '$1 {{PLURAL:$1|Version|Versionen}}', 'importnopages' => 'Gifft kene Sieden to’n Rinhalen.', +'imported-log-entries' => '$1 {{PLURAL:$1|Logbookindrag|Logbookindrääg}} rinhaalt.', 'importfailed' => 'Import hett kenen Spood: $1', 'importunknownsource' => 'Unbekannten Typ för den Importborn', 'importcantopen' => 'Kunn de Import-Datei nich apen maken', @@ -2466,6 +2478,7 @@ All Transwiki-Import-Akschonen staht later ok in dat [[Special:Log/import|Import 'tooltip-upload' => 'Hoochladen', 'tooltip-rollback' => 'Rullt all Ännern vun’n letzten Bruker an disse Sied mit een Klick trüch.', 'tooltip-undo' => 'Rullt dit een Ännern trüch un wiest den Text in de Vörschau, dat en Grund för’t Ännern angeven warrn kann.', +'tooltip-preferences-save' => 'Instellungen spiekern', # Stylesheets 'common.css' => '/** CSS-Kood hier binnen warrt för all Stilvörlagen (Skins) inbunnen */', @@ -2566,14 +2579,17 @@ $1', 'imagemaxsize' => 'Biller op de Bildsied begrenzen op:', 'thumbsize' => 'Grött vun dat Duumnagel-Bild:', 'widthheightpage' => '$1×$2, {{PLURAL:$3|Ene Siet|$3 Sieden}}', -'file-info' => '(Grött: $1, MIME-Typ: $2)', -'file-info-size' => '($1 × $2 Pixel, Grött: $3, MIME-Typ: $4)', +'file-info' => 'Grött: $1, MIME-Typ: $2', +'file-info-size' => '$1 × $2 Pixel, Grött: $3, MIME-Typ: $4', 'file-nohires' => 'Gifft dat Bild nich grötter.', -'svg-long-desc' => '(SVG-Datei, Utgangsgrött: $1 × $2 Pixel, Dateigrött: $3)', +'svg-long-desc' => 'SVG-Datei, Utgangsgrött: $1 × $2 Pixel, Dateigrött: $3', 'show-big-image' => 'Dat Bild wat grötter', 'show-big-image-thumb' => 'Grött vun disse Vörschau: $1 × $2 Pixels', 'file-info-gif-looped' => 'löppt as Slööp', 'file-info-gif-frames' => '$1 {{PLURAL:$1|Bild|Biller}}', +'file-info-png-looped' => 'löppt as Slööp', +'file-info-png-repeat' => 'played $1 {{PLURAL:$1|maal|maal}} afspeelt', +'file-info-png-frames' => '$1 {{PLURAL:$1|Bild|Biller}}', # Special:NewFiles 'newimages' => 'Ne’e Biller', @@ -2951,6 +2967,7 @@ Wist du de Siet würklich nee anleggen?", 'table_pager_first' => 'Eerste Siet', 'table_pager_last' => 'Letzte Siet', 'table_pager_limit' => 'Wies $1 Indrääg je Siet', +'table_pager_limit_label' => 'Saken per Sied:', 'table_pager_limit_submit' => 'Los', 'table_pager_empty' => 'nix funnen', @@ -3017,6 +3034,8 @@ Du kannst ok de [[Special:Watchlist/edit|normale Sied to’n Ännern]] bruken.', 'version-hook-subscribedby' => 'Opropen vun', 'version-version' => '(Version $1)', 'version-license' => 'Lizenz', +'version-poweredby-credits' => "Dit Wiki bruukt '''[http://www.mediawiki.org/ MediaWiki]''', Copyright © 2001–$1 $2.", +'version-poweredby-others' => 'annere', 'version-software' => 'Installeerte Software', 'version-software-product' => 'Produkt', 'version-software-version' => 'Version', @@ -3087,6 +3106,15 @@ Geev den Dateinaam ahn dat Präfix „{{ns:file}}:“ in.', 'tags-edit' => 'ännern', 'tags-hitcount' => '$1 {{PLURAL:$1|Ännern|Ännern}}', +# Special:ComparePages +'comparepages' => 'Sieden verglieken', +'compare-selector' => 'Siedenversionen verglieken', +'compare-page1' => 'Sied 1', +'compare-page2' => 'Sied 2', +'compare-rev1' => 'Version 1', +'compare-rev2' => 'Version 2', +'compare-submit' => 'Verglieken', + # Database error messages 'dberr-header' => 'Dit Wiki hett en Problem', 'dberr-problems' => 'Deit uns leed. Disse Websteed hett opstunns en beten technische Problemen.', @@ -3103,8 +3131,13 @@ Geev den Dateinaam ahn dat Präfix „{{ns:file}}:“ in.', 'htmlform-float-invalid' => 'De angeven Weert is keen Tall.', 'htmlform-int-toolow' => 'De angeven Weert liggt ünner dat Minimum vun $1', 'htmlform-int-toohigh' => 'De angeven Weert liggt över dat Maximum vun $1', +'htmlform-required' => 'Disse Weert is Plicht', 'htmlform-submit' => 'Afspiekern', 'htmlform-reset' => 'Ännern trüchsetten', 'htmlform-selectorother-other' => 'Annere', +# SQLite database support +'sqlite-has-fts' => '$1 mit Stöhn för Vulltext-Söök', +'sqlite-no-fts' => '$1 ahn Stöhn för Vulltext-Söök', + ); diff --git a/languages/messages/MessagesNds_nl.php b/languages/messages/MessagesNds_nl.php index ac0c342e..d8b58e55 100644 --- a/languages/messages/MessagesNds_nl.php +++ b/languages/messages/MessagesNds_nl.php @@ -166,13 +166,13 @@ $magicWords = array( 'fullurl' => array( '0', 'HELEURL', 'VOLLEDIGEURL', 'FULLURL:' ), 'fullurle' => array( '0', 'HELEURLE', 'VOLLEDIGEURLE', 'FULLURLE:' ), 'lcfirst' => array( '0', 'HLEERSTE:', 'KLEERSTE:', 'LCFIRST:' ), - 'ucfirst' => array( '0', 'GLEERSTE:', 'UCFIRST:' ), + 'ucfirst' => array( '0', 'GLEERSTE:', 'HLEERSTE:', 'UCFIRST:' ), 'lc' => array( '0', 'KL:', 'LC:' ), 'uc' => array( '0', 'HL:', 'UC:' ), 'raw' => array( '0', 'RAUW:', 'RUW:', 'RAW:' ), 'displaytitle' => array( '1', 'TEUNTITEL', 'TOONTITEL', 'TITELTONEN', 'DISPLAYTITLE' ), 'newsectionlink' => array( '1', '__NIEJESECTIEVERWIEZING__', '__NIEUWESECTIELINK__', '__NIEUWESECTIEKOPPELING__', '__NEWSECTIONLINK__' ), - 'nonewsectionlink' => array( '1', '__GIENNIEJKOPJENVERWIEZING__', '__GEENNIEUWKOPJEVERWIJZING__', '__NONEWSECTIONLINK__' ), + 'nonewsectionlink' => array( '1', '__GIENNIEJKOPJENVERWIEZING__', '__GEENNIEUWKOPJEVERWIJZING__', '__GEENNIEUWESECTIELINK__', '__NONEWSECTIONLINK__' ), 'currentversion' => array( '1', 'DISSEVERSIE', 'HUIDIGEVERSIE', 'CURRENTVERSION' ), 'urlencode' => array( '0', 'CODEERURL', 'URLCODEREN', 'URLENCODE:' ), 'anchorencode' => array( '0', 'CODEERANKER', 'ANKERCODEREN', 'ANCHORENCODE' ), @@ -214,7 +214,7 @@ $specialPageAliases = array( 'Listfiles' => array( 'Ofbeeldingenlieste' ), 'Newimages' => array( 'Nieje_ofbeeldingen' ), 'Listusers' => array( 'Gebrukerslieste' ), - 'Listgrouprights' => array( 'Groepsrechen bekieken' ), + 'Listgrouprights' => array( 'Groepsrechen_bekieken' ), 'Statistics' => array( 'Staotestieken' ), 'Randompage' => array( 'Willekeurig_artikel' ), 'Lonelypages' => array( 'Weespagina\'s' ), @@ -308,8 +308,7 @@ $messages = array( 'tog-editsection' => 'Mit bewarkgedeeltes', 'tog-editsectiononrightclick' => 'Bewarkgedeelte mit rechtermuusknoppe bewarken (JavaScript)', 'tog-showtoc' => 'Samenvatting van de onderwarpen laoten zien (mit meer as dree onderwarpen)', -'tog-rememberpassword' => 'Vanzelf anmelden', -'tog-editwidth' => 'Bewarkingsveld over volle breedte', +'tog-rememberpassword' => 'Vanzelf anmelden (hooguut $1 {{PLURAL:$1|dag|dagen}})', 'tog-watchcreations' => "Pagina's dee-k anmaak op de volglieste zetten", 'tog-watchdefault' => "Pagina's dee-k wiezig op de volglieste zetten", 'tog-watchmoves' => "Pagina's dee-k herneume op de volglieste zetten", @@ -455,31 +454,21 @@ $messages = array( 'faqpage' => 'Project:Vragen dee vake esteld wönnen', # Vector skin -'vector-action-addsection' => 'Niej onderwarp', -'vector-action-delete' => 'Vortdoon', -'vector-action-move' => 'Herneumen', -'vector-action-protect' => 'Beveiligen', -'vector-action-undelete' => 'Weerummeplaosen', -'vector-action-unprotect' => 'Vriegeven', -'vector-namespace-category' => 'Kattegerie', -'vector-namespace-help' => 'Hulppagina', -'vector-namespace-image' => 'Bestaand', -'vector-namespace-main' => 'Pagina', -'vector-namespace-media' => 'Mediapagina', -'vector-namespace-mediawiki' => 'Tiejige', -'vector-namespace-project' => 'Prejekpagina', -'vector-namespace-special' => 'Speciale pagina', -'vector-namespace-talk' => 'Overleg', -'vector-namespace-template' => 'Mal', -'vector-namespace-user' => 'Gebrukerspagina', -'vector-view-create' => 'Anmaken', -'vector-view-edit' => 'Bewarken', -'vector-view-history' => 'Geschiedenisse bekieken', -'vector-view-view' => 'Lezen', -'vector-view-viewsource' => 'Brontekse bekieken', -'actions' => 'Haandeling', -'namespaces' => 'Naamruumtes', -'variants' => 'Variaanten', +'vector-action-addsection' => 'Niej onderwarp', +'vector-action-delete' => 'Vortdoon', +'vector-action-move' => 'Herneumen', +'vector-action-protect' => 'Beveiligen', +'vector-action-undelete' => 'Weerummeplaosen', +'vector-action-unprotect' => 'Vriegeven', +'vector-simplesearch-preference' => 'Verbeterde zeuksuggesties anzetten (allinnig mit Vector-vormgeving)', +'vector-view-create' => 'Anmaken', +'vector-view-edit' => 'Bewarken', +'vector-view-history' => 'Geschiedenisse bekieken', +'vector-view-view' => 'Lezen', +'vector-view-viewsource' => 'Brontekse bekieken', +'actions' => 'Haandeling', +'namespaces' => 'Naamruumtes', +'variants' => 'Variaanten', 'errorpagetitle' => 'Foutmelding', 'returnto' => 'Weerumme naor $1.', @@ -540,6 +529,9 @@ Te veule meensen preberen disse pagina te bekieken. Wach even veurda-j opniej toegang preberen te kriegen tot disse pagina. $1', +'pool-timeout' => "Wachtied tiejens 't wachen op vergrendeling", +'pool-queuefull' => 'De wachrie van de poel is vol', +'pool-errorunknown' => 'Onbekende fout', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Over {{SITENAME}}', @@ -702,7 +694,8 @@ Vergeet neet joew [[Special:Preferences|veurkeuren veur {{SITENAME}}]] in te ste 'yourname' => 'Gebrukersnaam', 'yourpassword' => 'Wachwoord', 'yourpasswordagain' => 'Opniej invoeren', -'remembermypassword' => 'vanzelf anmelden', +'remembermypassword' => 'Vanzelf anmelden (hooguut $1 {{PLURAL:$1|dag|dagen}})', +'securelogin-stick-https' => 'Verbunnen blieven via HTTPS naoda-j an-emeld bin', 'yourdomainname' => 'Joew domein', 'externaldberror' => 'Der gung iets fout bie de externe authenticering, of je maggen je gebrukersprefiel neet bewarken.', 'login' => 'Anmelden', @@ -719,6 +712,7 @@ Vergeet neet joew [[Special:Preferences|veurkeuren veur {{SITENAME}}]] in te ste 'gotaccount' => "Stao-j al in-eschreven? '''$1'''.", 'gotaccountlink' => 'Anmelden', 'createaccountmail' => 'per netpos', +'createaccountreason' => 'Reden:', 'badretype' => 'De wachwoorden dee-j in-etik hemmen bin neet liekeleens.', 'userexists' => 'Disse gebrukersnaam is al gebruuk. Kies een aandere naam.', @@ -743,6 +737,7 @@ Je kunnen neet anmelden.', 'wrongpasswordempty' => "Gien wachwoord in-evoerd. Prebeer 't opniej.", 'passwordtooshort' => 'Wachwoorden mutten uut teminsen {{PLURAL:$1|$1 teken|$1 tekens}} bestaon.', 'password-name-match' => 'Joew wachwoord en gebrukersnaam maggen neet liekeleens ween.', +'password-login-forbidden' => "'t Gebruuk van disse gebrukersnaam mit dit wachwoord is neet toe-estaon.", 'mailmypassword' => 'Niej wachwoord opsturen', 'passwordremindertitle' => 'Niej tiedelijk wachwoord veur {{SITENAME}}', 'passwordremindertext' => 'Der hef der ene evreugen, vanof \'t IP-adres $1 (werschienlijk jie zelf), @@ -782,6 +777,9 @@ Je mutten effen wachen veurda-j 't opniej preberen kunnen.", 'loginlanguagelabel' => 'Taal: $1', 'suspicious-userlogout' => "Joew verzeuk um of te melden is of-ewezen umdat 't dernaor uutziet dat 't verstuurd is deur een kepotte webkieker of tussenopslagbuffer", +# E-mail sending +'php-mail-error-unknown' => 'Der was een onbekende fout mit de mail()-functie van PHP', + # Password reset dialog 'resetpass' => 'Wachwoord wiezigen', 'resetpass_announce' => "Je bin an-emeld mit een veurlopige code dee mit de netpos toe-estuurd wonnen. Um 't anmelden te voltooien, mu-j een niej wachwoord invoeren:", @@ -834,9 +832,11 @@ Meschien he-j 't wachwoord al ewiezig of een niej veurlopig wachwoord an-evreuge 'showdiff' => 'Verschil bekieken', 'anoneditwarning' => "'''Waorschuwing:''' Je bin neet an-emeld. As annenieme gebruker zal joew IP-adres bie elke bewarking veur iederene zichbaor ween.", +'anonpreviewwarning' => "''Je bin neet an-emeld.'' +''Deur de bewarking op te slaon wönnen joew IP-adres op-esleugen in de paginageschiedenisse.''", 'missingsummary' => "'''Herinnering:''' je hemmen gien samenvatting op-egeven veur de bewarking. A-j noen weer op ''Opslaon'' klikken wonnen de bewarking zonder samenvatting op-esleugen.", 'missingcommenttext' => 'Plaos joew opmarking hieronder.', -'missingcommentheader' => "'''Let wel:''' je hemmen gien onderwarptitel toe-evoeg. A-j opniej op \"Pagina opslaon\" klikken wönnen de bewarking op-esleugen zonder onderwarptitel.", +'missingcommentheader' => "'''Waorschuwing:''' je hemmen der gien onderwarptitel bie ezet. A-j noen weer op \"{{int:savearticle}}\" klikken, dan wönnen de bewarking op-esleugen zonder onderwarptitel.", 'summary-preview' => 'Samenvatting naokieken:', 'subject-preview' => 'Onderwarp/kop naokieken:', 'blockedtitle' => 'Gebruker is eblokkeerd', @@ -907,7 +907,11 @@ De leste regel uut 't blokkeerlogboek steet hieronder as rifferentie:", 'usercsspreview' => "'''Dit is allinnig een controle van joew persoonlijke CSS.''' ''''t Is nog neet op-esleugen!'''", 'userjspreview' => "'''Denk deran da-j joew persoonlijke JavaScript allinnig nog mar an 't bekieken bin, 't is nog neet op-esleugen!'''", -'userinvalidcssjstitle' => "'''Waorschuwing:''' der is gien uutvoering mit de naam \"\$1\". Vergeet neet dat joew eigen .css- en .js-pagina's beginnen mit een kleine letter, bv. \"{{ns:user}}:Naam/'''m'''onobook.css\" in plaose van \"{{ns:user}}:Naam/'''M'''onobook.css\".", +'sitecsspreview' => "'''Je bin allinnig mer de CSS an 't naokieken.''' +''''t Is nog neet op-esleugen!'''", +'sitejspreview' => "'''Je bin allinnig mer de JavaScript-code an 't naokieken.''' +''''t Is nog neet op-esleugen!'''", +'userinvalidcssjstitle' => "'''Waorschuwing:''' der is gien uutvoering mit de naam \"\$1\". Vergeet neet dat joew eigen .css- en .js-pagina's beginnen mit een kleine letter, bv. \"{{ns:user}}:Naam/'''v'''ector\" in plaose van \"{{ns:user}}:Naam/'''V'''ector.css\".", 'updated' => '(Bewark)', 'note' => "'''Opmarking:'''", 'previewnote' => "'''NB: je bin de pagina allinnig nog mar an 't naokieken; de tekse is nog neet op-esleugen!'''", @@ -944,7 +948,6 @@ Deur op \"Pagina opslaon\" te klikken beleuf je ons da-j disse tekse zelf eschre 'copyrightwarning2' => "Waort je dat alle biedragen an {{SITENAME}} deur aander volk bewark of vort-edaon kan wönnen. A-j neet willen dat joew tekse deur aander volk bewark wönnen, slao de tekse dan neet op.
    Deur op \"Pagina opslaon\" te klikken beleuf je ons da-j disse tekse zelf eschreven hemmen, of over-eneumen hemmen uut een vrieje, openbaore bron (zie \$1 veur meer infermasie). '''Gebruuk gien spul mit auteursrechen, a-j daor gien toestemming veur hemmen!'''", -'longpagewarning' => "Disse pagina is $1 kB groot. 't Bewarken van grote pagina's kan veur preblemen zörgen bie ouwere webkiekers.", 'longpageerror' => "'''Foutmelding: de tekse dee-j opslaon willen is $1 kilobytes. Dit is groter as 't toe-estaone maximum van $2 kilobytes. Joew tekse kan neet op-esleugen wönnen.'''", 'readonlywarning' => "'''Waorschuwing: De databanke is op dit mement in onderhoud; 't is daorumme neet meugelijk um pagina's te wiezigen. Je kunnen de tekse 't beste op de computer opslaon en laoter opniej preberen de pagina te bewarken.''' @@ -1116,6 +1119,8 @@ $1", 'logdelete-failure' => "'''De zichbaorheid van de logboekregel kon neet in-esteld wonnen:''' $1", 'revdel-restore' => 'Zichbaorheid wiezigen', +'revdel-restore-deleted' => 'vort-edaone versies', +'revdel-restore-visible' => 'zichbaore versies', 'pagehist' => 'Paginageschiedenisse', 'deletedhist' => 'Geschiedenisse dee vort-ehaold is', 'revdelete-content' => 'inhoud', @@ -1182,11 +1187,13 @@ Kiek de logboeken nao.", # Diffs 'history-title' => 'Geschiedenisse van "$1"', 'difference' => '(Verschil tussen bewarkingen)', +'difference-multipage' => "(Verschil tussen pagina's)", 'lineno' => 'Regel $1:', 'compareselectedversions' => 'Vergeliek de ekeuzen versies', 'showhideselectedversions' => 'Ekeuzen versies weergeven/verbargen', 'editundo' => 'weerummedreien', -'diff-multi' => '(Hier {{PLURAL:$1|zit nog 1 versie|zitten nog $1 versies tussen}}.)', +'diff-multi' => '(Hier {{PLURAL:$1|zit nog 1 versie|zitten nog $1 versies}} van {{PLURAL:$2|1 gebruker|$2 gebrukers}} tussen dee der neet bie staon.)', +'diff-multi-manyusers' => '($1 tussenliggende versies deur meer as $2 gebrukers staon der neet bie)', # Search results 'searchresults' => 'Zeukrisseltaoten', @@ -1221,6 +1228,7 @@ Kiek de logboeken nao.", 'searchprofile-everything-tooltip' => "Alle inhoud deurzeuken (oek overlegpagina's)", 'searchprofile-advanced-tooltip' => 'Zeuken in de an-egeven naamruumtes', 'search-result-size' => '$1 ({{PLURAL:$2|1 woord|$2 woorden}})', +'search-result-category-size' => '{{PLURAL:$1|1 kattegerielid|$1 kattegerielejen}} ({{PLURAL:$2|1 onderkattegerie|$2 onderkattegerieën}}, {{PLURAL:$3|1 bestaand|$3 bestanen}})', 'search-result-score' => 'Rillevantie: $1%', 'search-redirect' => '(deurverwiezing $1)', 'search-section' => '(onderwarp $1)', @@ -1295,6 +1303,7 @@ Kiek de logboeken nao.", 'contextlines' => 'Antal regels per evunnen pagina', 'contextchars' => 'Antal tekens per pagina', 'stub-threshold' => 'Verwiezingsformettering van beginnetjes:', +'stub-threshold-disabled' => 'Uut-eschakeld', 'recentchangesdays' => 'Antal dagen dee de lieste "leste wiezigingen" laot zien:', 'recentchangesdays-max' => '(maximaal $1 {{PLURAL:$1|dag|dagen}})', 'recentchangescount' => 'Standard antal bewarkingen um te laoten zien:', @@ -1328,6 +1337,7 @@ Je kunnen oek disse egenereren standardcode gebruken: $1", 'prefs-files' => 'Bestanen', 'prefs-custom-css' => 'Persoonlijke CSS', 'prefs-custom-js' => 'Persoonlijke JS', +'prefs-common-css-js' => 'Edelen CSS/JS veur elke vormgeving:', 'prefs-reset-intro' => 'Je kunnen disse pagina gebruken um joew veurkeuren naor de standardinstellingen weerumme te zetten. Disse haandeling kan neet ongedaon-emaak wonnen.', 'prefs-emailconfirm-label' => 'Netposbevestiging:', @@ -1366,9 +1376,15 @@ Je kunnen oek aandere luui in staot stellen um per netpos kontak mit joe op te n 'prefs-advancedrendering' => 'Aandere instellingen', 'prefs-advancedsearchoptions' => 'Aandere instellingen', 'prefs-advancedwatchlist' => 'Aandere instellingen', -'prefs-display' => 'Weergave-instellingen', +'prefs-displayrc' => 'Weergave-instellingen', +'prefs-displaysearchoptions' => 'Weergave-instellingen', +'prefs-displaywatchlist' => 'Weergave-instellingen', 'prefs-diffs' => 'Verschillen', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Geldig netposadres', +'email-address-validity-invalid' => 'Geef een geldig netposadres op', + # User rights 'userrights' => 'Gebrukersrechenbeheer', 'userrights-lookup-user' => 'Beheer gebrukersgroepen', @@ -1452,6 +1468,7 @@ Je kunnen oek aandere luui in staot stellen um per netpos kontak mit joe op te n 'right-hideuser' => 'Een gebruker veur de overige gebrukers verbargen', 'right-ipblock-exempt' => 'IP-blokkeringen ummezeilen', 'right-proxyunbannable' => "Blokkeringen veur proxy's gellen neet", +'right-unblockself' => 'Eigen gebruker deblokkeren', 'right-protect' => "Beveiligingsnivo's wiezigen", 'right-editprotected' => "Beveiligen pagina's bewarken", 'right-editinterface' => "'t {{SITENAME}}-uterlijk bewarken", @@ -1474,7 +1491,6 @@ Je kunnen oek aandere luui in staot stellen um per netpos kontak mit joe op te n 'right-siteadmin' => 'De databanke blokkeren en weer vriegeven', 'right-reset-passwords' => 'Wachwoorden van aandere gebrukers opniej instellen', 'right-override-export-depth' => "Pagina's uutvoeren, oek de pagina's waor naor verwezen wonnen, tot een diepte van 5", -'right-versiondetail' => 'Uut-ebreide versieinfermasie van de pregrammetuur laoten zien', 'right-sendemail' => 'Berich versturen naor aandere gebrukers', # User rights log @@ -1525,14 +1541,9 @@ Je kunnen oek aandere luui in staot stellen um per netpos kontak mit joe op te n 'recentchanges-legend' => 'Opties veur leste wiezigingen', 'recentchangestext' => 'Op disse pagina ku-j de leste wiezigingen van disse wiki bekieken.', 'recentchanges-feed-description' => 'Zeuk naor de alderleste wiezingen op disse wiki in disse feed.', -'recentchanges-label-legend' => 'Legenda: $1.', -'recentchanges-legend-newpage' => '$1 - nieje pagina', 'recentchanges-label-newpage' => 'Mit disse bewarking is een nieje pagina an-emaak', -'recentchanges-legend-minor' => '$1 - kleine wieziging', 'recentchanges-label-minor' => 'Dit is een kleine wieziging', -'recentchanges-legend-bot' => '$1 - botbewarking', 'recentchanges-label-bot' => 'Disse bewarking is uut-evoerd deur een bot', -'recentchanges-legend-unpatrolled' => '$1 - bewarking is neet nao-ekeken', 'recentchanges-label-unpatrolled' => 'Disse bewarking is nog neet nao-ekeken', 'rcnote' => "Hieronder {{PLURAL:$1|steet de leste bewarking|staon de leste '''$1''' bewarkingen}} van de of-eleupen {{PLURAL:$2|dag|'''$2''' dagen}} (stand: $5, $4).", 'rcnotefrom' => 'Dit bin de wiezigingen sins $2 (maximum van $1 wiezigingen).', @@ -1579,6 +1590,9 @@ Je kunnen oek aandere luui in staot stellen um per netpos kontak mit joe op te n 'upload_directory_missing' => 'De bestaanstoevoegingsmap ($1) is vort en kon neet an-emaak wönnen deur de webserver.', 'upload_directory_read_only' => "Op 't mement ku-j gien bestanen toevoegen vanwegen technische preblemen ($1).", 'uploaderror' => "Fout bie 't toevoegen van 't bestaand", +'upload-recreate-warning' => "'''Waorschuwing: der is een bestaand mit disse naam vort-edaon of herneumd.''' + +Hieronder steet 't vortdologboek en 't herneumlogboek veur disse pagina:", 'uploadtext' => "Gebruuk 't formelier hieronder um bestanen derbie te zetten. Um bestanen te bekieken of te zeuken dee-j der eerder al bie ezet hemmen, ku-j naor de [[Special:FileList|bestaanslieste]] gaon. Bestanen en media dee nao 't vortdoon opniej derbie zet wönnen ku-j in de smiezen houwen in 't [[Special:Log/upload|logboek mit nieje bestanen]] en 't [[Special:Log/delete|vortdologboek]]. @@ -1613,6 +1627,17 @@ Zie de [[Special:NewFiles|uutstalling mit media]] veur een overzichte.', 'filetype-banned-type' => "'''\".\$1\"''' is gien toe-estaone bestaanstype. Toe-estaone {{PLURAL:\$3|bestaanstype is|bestaanstypes bin}} \$2.", 'filetype-missing' => 'Dit bestaand hef gien extensie (bv. ".jpg").', +'empty-file' => "'t Bestaand da-j op-egeven hemmen was leeg.", +'file-too-large' => "'t Bestaand da-j op-egeven hemmen was te groot.", +'filename-tooshort' => "'t Bestaand da-j op-egeven hemmen was te klein.", +'filetype-banned' => 'Dit bestaanstype is neet toe-estaon.', +'verification-error' => "Dit bestaand is 't bestaansonderzeuk neet deur-ekeumen.", +'hookaborted' => 'De wieziging dee-j preberen deur te voeren bin of-ebreuken deur een extra uutbreiding.', +'illegal-filename' => 'Disse bestaansnaam is neet toe-estaon.', +'overwrite' => "'t Overschrieven van een bestaand is neet toe-estaon.", +'unknown-error' => 'Der is een onbekende fout op-etrejen.', +'tmp-create-error' => 'Kon gien tiejelijk bestaand anmaken.', +'tmp-write-error' => "Der is een fout op-etrejen bie 't anmaken van een tiejelijk bestaand.", 'large-file' => 'Bestanen mutten neet groter ween as $1, dit bestaand is $2.', 'largefileserver' => "'t Bestaand is groter as dat de server toesteet.", 'emptyfile' => "'t Bestaand da-j toe-evoeg hemmen is leeg. Dit kan koemen deur een tikfout in de bestaansnaam. Kiek effen nao o-j dit bestaand wè bedoelen.", @@ -1641,13 +1666,14 @@ A-j 't bestaand asnog toevoegen willen, gao dan weerumme en kies een aandere naa 'file-exists-duplicate' => "Dit bestaand is liekeleens as {{PLURAL:$1|'t volgende bestaand|de volgende bestanen}}:", 'file-deleted-duplicate' => "Een bestaand dat liekeleens is an dit bestaand ([[:$1]]) is eerder al vort-edaon. Bekiek 't vortdologboek veurda-j veurdan gaon.", -'successfulupload' => 'Bestaanstoevoeging was succesvol', 'uploadwarning' => 'Waorschuwing', 'uploadwarning-text' => "Pas de bestaansbeschrieving hieronder an en prebeer 't opniej", 'savefile' => 'Bestaand opslaon', 'uploadedimage' => 'Toe-evoeg: [[$1]]', 'overwroteimage' => 'Nieje versie van "[[$1]]" toe-evoeg', 'uploaddisabled' => 'Bestanen toevoegen is neet meugelijk.', +'copyuploaddisabled' => 'Bestanen toevoegen via een webadres is uut-eschakeld.', +'uploadfromurl-queued' => 'Joew bestaanstoevoeging is in de wachrie ezet.', 'uploaddisabledtext' => 'Bestaanstoevoegingen bin uut-eschakeld.', 'php-uploaddisabledtext' => "'t Toevoegen van PHP-bestanen is uut-eschakeld. Kiek de instellingen veur 't toevoegen van bestanen effen nao.", 'uploadscripted' => 'Dit bestaand bevat HTML- of scriptcode dee verkeerd elezen kan wönnen deur de webkieker.', @@ -1666,6 +1692,15 @@ Bekiek 't vortdologboek veurda-j veurdan gaon.", Bedenk eers of 't inderdaod de bedoeling is dat dit bestaand toe-evoeg wönnen. 't Logboek mit alle vort-edaone infermasie ku-j hier vienen:", 'filename-bad-prefix' => "De naam van 't bestaand da-j toevoegen, begint mit '''\"\$1\"''', dit is een neet-beschrievende naam dee meestentieds autematisch deur een digitale camera egeven wonnen. Kies een dudelijke naam veur 't bestaand.", +'upload-success-subj' => 'Bestaanstoevoeging was succesvol', +'upload-success-msg' => "'t Bestaand [$2] steet derop. Je kunnen 't hier vienen: [[:{{ns:file}}:$1]]", +'upload-failure-subj' => "Prebleem bie 't toevoegen van 't bestaand", +'upload-failure-msg' => "Der was een prebleem bie 't toevoegen van [$2]: + +$1", +'upload-warning-subj' => "Waorschuwing veur 't toevoegen van bestanen", +'upload-warning-msg' => "Der was een prebleem mit toevoegen van 't bestaand [$2]. +Gao weerumme naor 't [[Special:Upload/stash/$1|bestaanstoevoegingsformelier]] um dit prebleem te verhelpen.", 'upload-proto-error' => 'Verkeerd protecol', 'upload-proto-error-text' => 'Um op disse meniere bestanen toe te voegen mutten webadressen beginnen mit http:// of ftp://.', @@ -1725,6 +1760,7 @@ Klikken op een kelomkop veraandert de sortering.', 'listfiles_search_for' => 'Zeuk op ofbeeldingnaam:', 'imgfile' => 'bestaand', 'listfiles' => 'Ofbeeldingenlieste', +'listfiles_thumb' => 'Ofbeeldingsoverzichte', 'listfiles_date' => 'Daotum', 'listfiles_name' => 'Naam', 'listfiles_user' => 'Gebruker', @@ -1837,7 +1873,6 @@ Vergeet neet de verwiezingen nao te kieken veurda-j de mal vortdoon.', 'statistics-edits-average' => 'Gemiddeld antal bewarkingen per pagina', 'statistics-views-total' => "Totaal antal weer-egeven pagina's", 'statistics-views-peredit' => "Weer-egeven pagina's per bewarking", -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Jobqueuelengte]', 'statistics-users' => 'In-eschreven [[Special:ListUsers|gebrukers]]', 'statistics-users-active' => 'Actieve gebrukers', 'statistics-users-active-desc' => 'Gebrukers dee de veurbieje {{PLURAL:$1|dag|$1 dagen}} een haandeling uut-evoerd hemmen', @@ -1851,7 +1886,7 @@ Pagina's wönnen ezien as een deurverwiespagina, as de mal gebruuk wönnen dee v 'doubleredirects' => 'Dubbele deurverwiezingen', 'doubleredirectstext' => "Op disse lieste staon alle pagina's dee deurverwiezen naor aandere deurverwiezingen. -Op elke regel steet de eerste en de tweede deurverwiezing, daorachter steet de doelpagina van de tweede deurverwiezing. +Op elke regel steet de eerste en de tweede deurverwiezing, daorachter steet de doelpagina van de tweede deurverwiezing. Meestentieds is leste pagina de gewunste doelpagina, waor oek de eerste pagina heer zol mutten liejen.", 'double-redirect-fixed-move' => '[[$1]] is herneumd en is noen een deurverwiezing naor [[$2]]', 'double-redirect-fixer' => 'Deurverwiezingsverbeteraar', @@ -1875,6 +1910,8 @@ Meestentieds is leste pagina de gewunste doelpagina, waor oek de eerste pagina h 'nmembers' => '$1 {{PLURAL:$1|onderwarp|onderwarpen}}', 'nrevisions' => '$1 {{PLURAL:$1|versie|versies}}', 'nviews' => '{{PLURAL:$1|1 keer|$1 keer}} bekeken', +'nimagelinks' => "Wönnen op {{PLURAL:$1|één pagina|$1 pagina's}} gebruuk", +'ntransclusions' => "wönnen op {{PLURAL:$1|één pagina|$1 pagina's}} gebruuk", 'specialpage-empty' => 'Disse pagina is leeg.', 'lonelypages' => "Weespagina's", 'lonelypagestext' => "Naor disse pagina's wönnen neet verwezen vanuut {{SITENAME}} en ze bin oek nargens in-evoeg.", @@ -2034,35 +2071,41 @@ Meer infermasie over de rechen ku-j [[{{MediaWiki:Listgrouprights-helppage}}|hie 'listgrouprights-removegroup-self-all' => 'Kan alle groepen vortdoon van eigen gebruker', # E-mail user -'mailnologin' => 'Neet an-emeld.', -'mailnologintext' => 'Je mutten [[Special:UserLogin|an-emeld]] ween en een geldig e-mailadres in "[[Special:Preferences|mien veurkeuren]]" invoeren um disse functie te kunnen gebruken.', -'emailuser' => 'Een berich sturen', -'emailpage' => 'Gebruker een berich sturen', -'emailpagetext' => "Deur middel van dit formelier ku-j een berich sturen naor disse gebruker. +'mailnologin' => 'Neet an-emeld.', +'mailnologintext' => 'Je mutten [[Special:UserLogin|an-emeld]] ween en een geldig e-mailadres in "[[Special:Preferences|mien veurkeuren]]" invoeren um disse functie te kunnen gebruken.', +'emailuser' => 'Een berich sturen', +'emailpage' => 'Gebruker een berich sturen', +'emailpagetext' => "Deur middel van dit formelier ku-j een berich sturen naor disse gebruker. 't Adres da-j op-egeven hemmen bie [[Special:Preferences|joew veurkeuren]] zal as ofzender gebruuk wonnen. De ontvanger kan dus drek beantwoorden.", -'usermailererror' => "Foutmelding bie 't versturen:", -'defemailsubject' => 'Berich van {{SITENAME}}', -'noemailtitle' => 'Gebruker hef gien netposadres op-egeven', -'noemailtext' => 'Disse gebruker hef gien geldig e-mailadres in-evoerd.', -'nowikiemailtitle' => 'Netpos is neet toe-estaon', -'nowikiemailtext' => 'Disse gebruker wil gien netpos toe-estuurd kriegen van aandere gebrukers.', -'email-legend' => 'Een berich sturen naor een aandere gebruker van {{SITENAME}}', -'emailfrom' => 'Van:', -'emailto' => 'An:', -'emailsubject' => 'Onderwarp:', -'emailmessage' => 'Berich:', -'emailsend' => 'Versturen', -'emailccme' => 'Stuur mien een kopie van dit berich.', -'emailccsubject' => 'Kopie van joew berich an $1: $2', -'emailsent' => 'Berich verstuurd', -'emailsenttext' => 'Berich is verzunnen.', -'emailuserfooter' => 'Dit berich is verstuurd deur $1 an $2 deur de functie "Een berich sturen" van {{SITENAME}} te gebruken.', +'usermailererror' => "Foutmelding bie 't versturen:", +'defemailsubject' => 'Berich van {{SITENAME}}', +'usermaildisabled' => 'Een persoonlijk berichjen sturen geet neet.', +'usermaildisabledtext' => 'Je kunnen gien berichjes sturen naor aandere gebrukers van disse wiki', +'noemailtitle' => 'Gebruker hef gien netposadres op-egeven', +'noemailtext' => 'Disse gebruker hef gien geldig e-mailadres in-evoerd.', +'nowikiemailtitle' => 'Netpos is neet toe-estaon', +'nowikiemailtext' => 'Disse gebruker wil gien netpos toe-estuurd kriegen van aandere gebrukers.', +'email-legend' => 'Een berich sturen naor een aandere gebruker van {{SITENAME}}', +'emailfrom' => 'Van:', +'emailto' => 'An:', +'emailsubject' => 'Onderwarp:', +'emailmessage' => 'Berich:', +'emailsend' => 'Versturen', +'emailccme' => 'Stuur mien een kopie van dit berich.', +'emailccsubject' => 'Kopie van joew berich an $1: $2', +'emailsent' => 'Berich verstuurd', +'emailsenttext' => 'Berich is verzunnen.', +'emailuserfooter' => 'Dit berich is verstuurd deur $1 an $2 deur de functie "Een berich sturen" van {{SITENAME}} te gebruken.', + +# User Messenger +'usermessage-summary' => 'Systeemteksen achter-eleuten', +'usermessage-editor' => 'Systeemtekse', # Watchlist 'watchlist' => 'Volglieste', 'mywatchlist' => 'Mien volglieste', -'watchlistfor' => "(veur '''$1''')", +'watchlistfor2' => 'Veur $1 ($2)', 'nowatchlist' => 'Gien artikels in volglieste.', 'watchlistanontext' => '$1 is verplich um joew volglieste te bekieken of te wiezigen.', 'watchnologin' => 'Neet an-emeld', @@ -2180,7 +2223,10 @@ De leste bewarking op disse pagina is edaon deur [[User:$3|$3]] ([[User talk:$3| 'revertpage' => 'Wiezigingen deur [[Special:Contributions/$2|$2]] hersteld tot de versie nao de leste wieziging deur $1', 'revertpage-nouser' => 'Wiezigingen deur (gebrukersnaam vort-edaon) weerummedreid naor de leste versie deur [[User:$1|$1]]', 'rollback-success' => 'Wiezigingen van $1; weerummedreid naor de leste versie van $2.', -'sessionfailure' => 'Der is een prebleem mit joew anmeldsessie. De actie is stop-ezet uut veurzörg tegen een beveiligingsrisico (dat besteet uut \'t meugelijke "kraken" van disse sessie). Gao weerumme naor de veurige pagina, laoj disse pagina opniej en prebeer \'t nog es.', + +# Edit tokens +'sessionfailure-title' => 'Sessiefout', +'sessionfailure' => 'Der is een prebleem mit joew anmeldsessie. De actie is stop-ezet uut veurzörg tegen een beveiligingsrisico (dat besteet uut \'t meugelijke "kraken" van disse sessie). Gao weerumme naor de veurige pagina, laoj disse pagina opniej en prebeer \'t nog es.', # Protect 'protectlogpage' => 'Beveiligingslogboek', @@ -2308,19 +2354,23 @@ $1", 'month' => 'Maond:', 'year' => 'Jaor:', -'sp-contributions-newbies' => 'Allinnig biedragen van anwas bekieken', -'sp-contributions-newbies-sub' => 'Veur anwas', -'sp-contributions-newbies-title' => 'Biedragen van anwas', -'sp-contributions-blocklog' => 'blokkeerlogboek', -'sp-contributions-deleted' => 'vort-edaone gebrukersbiedragen', -'sp-contributions-logs' => 'logboeken', -'sp-contributions-talk' => 'overleg', -'sp-contributions-userrights' => 'gebrukersrechenbeheer', -'sp-contributions-blocked-notice' => "Disse gebruker is op 't mement eblokkeerd. +'sp-contributions-newbies' => 'Allinnig biedragen van anwas bekieken', +'sp-contributions-newbies-sub' => 'Veur anwas', +'sp-contributions-newbies-title' => 'Biedragen van anwas', +'sp-contributions-blocklog' => 'blokkeerlogboek', +'sp-contributions-deleted' => 'vort-edaone gebrukersbiedragen', +'sp-contributions-uploads' => 'nieje bestanen', +'sp-contributions-logs' => 'logboeken', +'sp-contributions-talk' => 'overleg', +'sp-contributions-userrights' => 'gebrukersrechenbeheer', +'sp-contributions-blocked-notice' => "Disse gebruker is op 't mement eblokkeerd. De leste regel uut 't blokkeerlogboek steet hieronder as rifferentie:", -'sp-contributions-search' => 'Zeuken naor biedragen', -'sp-contributions-username' => 'IP-adres of gebrukersnaam:', -'sp-contributions-submit' => 'Zeuk', +'sp-contributions-blocked-notice-anon' => "Dit IP-adres is eblokkeerd. +De leste regel uut 't blokkeerlogboek steet as rifferentie", +'sp-contributions-search' => 'Zeuken naor biedragen', +'sp-contributions-username' => 'IP-adres of gebrukersnaam:', +'sp-contributions-toponly' => 'Allinnig de niejste versie laoten zien', +'sp-contributions-submit' => 'Zeuk', # What links here 'whatlinkshere' => 'Verwiezingen naor disse pagina', @@ -2379,7 +2429,6 @@ Op de [[Special:IPBlockList|IP-blokkeerlieste]] steet een lieste mit alle blokke 'ipb-edit-dropdown' => 'Blokkeerredens bewarken', 'ipb-unblock-addr' => 'Deblokkeer $1', 'ipb-unblock' => 'Deblokkeer een gebruker of IP-adres', -'ipb-blocklist-addr' => 'Bestaonde blokkeringen veur $1', 'ipb-blocklist' => 'Bekiek bestaonde blokkeringen', 'ipb-blocklist-contribs' => 'Biedragen van $1', 'unblockip' => 'Deblokkeer gebruker', @@ -2387,7 +2436,7 @@ Op de [[Special:IPBlockList|IP-blokkeerlieste]] steet een lieste mit alle blokke 'ipusubmit' => 'Blokkering derof haolen', 'unblocked' => '[[User:$1|$1]] is edeblokeerd', 'unblocked-id' => 'Blokkering $1 is op-eheven', -'ipblocklist' => 'Lieste van IP-adressen en gebrukers dee eblokkeerd bin', +'ipblocklist' => 'Gebrukers dee eblokkeerd bin', 'ipblocklist-legend' => 'Een eblokkeren gebruker zeuken', 'ipblocklist-username' => 'Gebrukersnaam of IP-adres:', 'ipblocklist-sh-userblocks' => 'gebrukersblokkeringen $1', @@ -2452,6 +2501,8 @@ Je kunnen gien gebrukerspagina anmaken.', 'cant-block-while-blocked' => 'Je kunnen aandere gebrukers neet blokkeren a-j zelf oek eblokkeerd bin.', 'cant-see-hidden-user' => 'De gebruker dee-j preberen te blokkeren is al eblokkeerd en verbörgen. Umda-j gien rech hemmen um gebrukers te verbargen, ku-j de blokkering van de gebruker neet bekieken of bewarken.', +'ipbblocked' => 'Je kunnen gien aandere gebrukers (de)blokkeren, umda-j zelf eblokkeerd bin', +'ipbnounblockself' => 'Je maggen je eigen neet deblokkeren', # Developer tools 'lockdb' => 'Databanke blokkeren', @@ -2487,6 +2538,17 @@ Dit betekent da-j een pagina weer naor de ouwe naam kunnen herneumen, a-j bieveu '''WAORSCHUWING!''' Veur populaire pagina's kan 't herneumen drastische en onveurziene gevolgen hemmen. Zörg derveur da-j de gevolgen overzien veurda-j veerder gaon.", +'movepagetext-noredirectfixer' => "Mit dit formelier ku-j de pagina een nieje naam geven, de geschiedenisse geet dan vanzelf mee. +De ouwe naam zal autematisch een deurverwiezing wönnen naor de nieje pagina. +Kiek oek effen nao of der gien [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|ebreuken deurverwiezingen]] bin ontstaon. +'t Is an joe um derveur te zörgen dat de deurverwiezingen naor de goeie naam gaon. + +Een pagina kan '''allinnig''' herneumd wönnen as de nieje naam neet besteet of 't een deurverwiezing is zonder veerdere geschiedenisse. +Dit betekent da-j een pagina weer naor de ouwe naam kunnen herneumen, a-j bieveurbeeld een fout emaak hemmen, zonder da-j de bestaonde pagina overschrieven. + +'''WAORSCHUWING!''' +Veur popelaire pagina's kan 't herneumen drastische en onveurziene gevolgen hemmen. +Zörg derveur da-j de gevolgen overzien veurda-j veerder gaon.", 'movepagetalktext' => "De overlegpagina dee derbie heurt krig oek een nieje titel, mar '''neet''' in de volgende gevallen: * As de pagina in een aandere naamruumte eplaos wönnen * As der al een neet-lege overlegpagina besteet onder de aandere naam @@ -2540,6 +2602,7 @@ De overige pagina's wonnen neet autematisch herneumd.", 'immobile-source-page' => 'Disse pagina kan neet herneumd wonnen.', 'immobile-target-page' => 'Kan neet herneumd wonnen naor disse paginanaam.', 'imagenocrossnamespace' => 'Een mediabestaand kan neet naor een aandere naamruumte verplaos wonnen', +'nonfile-cannot-move-to-file' => 'Je kunnen neet herneumen van en naor de bestaansnaamruumte', 'imagetypemismatch' => "De nieje bestaansextensie is neet gelieke an 't bestaanstype", 'imageinvalidfilename' => 'De nieje bestaansnaam is ongeldig', 'fix-double-redirects' => 'Alle deurverwiezingen dee naor de ouwe titel verwiezen, herneumen naor de nieje titel', @@ -2613,10 +2676,12 @@ Alle transwiki-invoerhaandelingen wönnen op-esleugen in 't [[Special:Log/import 'import-interwiki-namespace' => 'Doelnaamruumte:', 'import-upload-filename' => 'Bestaansnaam:', 'import-comment' => 'Opmarkingen:', -'importtext' => "Gebruuk de Special:Export-optie in de wiki waor de infermasie vandaonkump, slao 't op joew eigen systeem op, en stuur 't daornao hier op.", +'importtext' => "Gebruuk de [[Special:Export|uutvoerfunctie]] in de wiki waor de infermasie vandaon kump. +Slao 't op joew eigen systeem op, en stuur 't daornao hier op.", 'importstart' => "Pagina's an 't invoeren...", 'import-revision-count' => '$1 {{PLURAL:$1|versie|versies}}', 'importnopages' => "Der bin gien pagina's um in te voeren.", +'imported-log-entries' => '$1 {{PLURAL:$1|logboekregel|logboekregels}} in-evoerd.', 'importfailed' => 'Invoeren is mislok: $1', 'importunknownsource' => 'Onbekend invoerbrontype', 'importcantopen' => "Kon 't invoerbestaand neet los doon", @@ -2713,6 +2778,8 @@ De tiedelijke map is neet anwezig.", 'tooltip-rollback' => 'Mit "weerummedreien" ku-j mit één klik de bewarking(en) van de leste gebruker dee disse pagina bewark hef weerummezetten.', 'tooltip-undo' => 'A-j op "weerummedreien" klikken geet \'t bewarkingsvienster los en ku-j de veurige versie weerummezetten. Je kunnen in de bewarkingssamenvatting een reden opgeven.', +'tooltip-preferences-save' => 'Veurkeuren opslaon', +'tooltip-summary' => 'Voer een korte samenvatting in', # Metadata 'nodublincore' => 'Dublin Core RDF-metadata is uut-eschakeld op disse server.', @@ -2817,13 +2884,16 @@ $1", 'thumbsize' => "Grootte van 't ofbeeldingsoverzichte (thumbnail):", 'widthheightpage' => "$1×$2, $3 {{PLURAL:$3|pagina|pagina's}}", 'file-info' => 'Bestaansgrootte: $1, MIME-type: $2', -'file-info-size' => '($1 × $2 beeldpunten, bestaansgrootte: $3, MIME-type: $4)', +'file-info-size' => '$1 × $2 beeldpunten, bestaansgrootte: $3, MIME-type: $4', 'file-nohires' => 'Gien hogere resolusie beschikbaor.', -'svg-long-desc' => '(SVG-bestaand, uutgangsgrootte $1 × $2 beeldpunten, bestaansgrootte: $3)', +'svg-long-desc' => 'SVG-bestaand, uutgangsgrootte $1 × $2 beeldpunten, bestaansgrootte: $3', 'show-big-image' => 'Ofbeelding wat groter', 'show-big-image-thumb' => 'Grootte van disse weergave: $1 × $2 beeldpunten', 'file-info-gif-looped' => 'herhaolend', 'file-info-gif-frames' => '$1 {{PLURAL:$1|beeld|beelden}}', +'file-info-png-looped' => 'herhaolend', +'file-info-png-repeat' => '$1 {{PLURAL:$1|keer|keer}} of-espeuld', +'file-info-png-frames' => '$1 {{PLURAL:$1|beeld|beelden}}', # Special:NewFiles 'newimages' => 'Nieje ofbeeldingen', @@ -2894,8 +2964,8 @@ Alle volgende verwiezingen dee op dezelfde regel staon, wonnen behaandeld as uut 'exif-colorspace' => 'Kleurruumte', 'exif-componentsconfiguration' => 'Betekenisse van elk compenent', 'exif-compressedbitsperpixel' => 'Beeldcompressiemethode', -'exif-pixelydimension' => 'Bruukbaore ofbeeldingsbreedte', -'exif-pixelxdimension' => 'Bruukbaore ofbeeldingsheugte', +'exif-pixelydimension' => 'Ofbeeldingsbreedte', +'exif-pixelxdimension' => 'Ofbeeldingsheugte', 'exif-makernote' => 'Opmarkingen van de fabrikaant', 'exif-usercomment' => 'Opmarkingen', 'exif-relatedsoundfile' => 'Biebeheurend geluudsbestaand', @@ -2911,9 +2981,9 @@ Alle volgende verwiezingen dee op dezelfde regel staon, wonnen behaandeld as uut 'exif-spectralsensitivity' => 'Spectrale geveuligheid', 'exif-isospeedratings' => 'ISO-weerde.', 'exif-oecf' => 'Opto-elektronische conversiefactor', -'exif-shutterspeedvalue' => 'Slutersnelheid', -'exif-aperturevalue' => 'Diafragma', -'exif-brightnessvalue' => 'Helderheid', +'exif-shutterspeedvalue' => 'Slutersnelheid in APEX', +'exif-aperturevalue' => 'Diafragma in APEX', +'exif-brightnessvalue' => 'Helderheid in APEX', 'exif-exposurebiasvalue' => 'Belochtingscompensasie', 'exif-maxaperturevalue' => 'Maximale diafragmaweerde van de lenze', 'exif-subjectdistance' => 'Ofstaand tot onderwarp', @@ -2977,6 +3047,7 @@ Alle volgende verwiezingen dee op dezelfde regel staon, wonnen behaandeld as uut 'exif-gpsareainformation' => "Naam van 't GPS-gebied", 'exif-gpsdatestamp' => 'GPS-daotum', 'exif-gpsdifferential' => 'Differentiële GPS-correctie', +'exif-objectname' => 'Korte naam', # EXIF attributes 'exif-compression-1' => 'Neet ecomprimeerd', @@ -3058,6 +3129,8 @@ Alle volgende verwiezingen dee op dezelfde regel staon, wonnen behaandeld as uut 'exif-sensingmethod-7' => 'Dreeliendige sensor', 'exif-sensingmethod-8' => 'Kleurvolgende liendesensor', +'exif-filesource-3' => 'Digitale fotocamera', + 'exif-scenetype-1' => 'Een drek efotograferen ofbeelding', 'exif-customrendered-0' => 'Normaal', @@ -3134,24 +3207,24 @@ Alle volgende verwiezingen dee op dezelfde regel staon, wonnen behaandeld as uut 'limitall' => 'alles', # E-mail address confirmation -'confirmemail' => 'Bevestig netposadres', -'confirmemail_noemail' => 'Je hemmen gien geldig netposadres in-evoerd in joew [[Special:Preferences|veurkeuren]].', -'confirmemail_text' => 'Bie disse wiki mu-j je netposadres bevestigen veurda-j de berichopties gebruken kunnen. Klik op de onderstaonde knoppe um een bevestigingsberich te ontvangen. Dit berich bevat een code mit een verwiezing; um je netposadres te bevestigen mu-j disse verwiezing los doon.', -'confirmemail_pending' => 'Der is al een bevestigingscode op-estuurd; a-j net een gebrukersnaam an-emaak hemmen, wach dan eers een paor menuten tot da-j dit berich ontvungen hemmen veurda-j een nieje code anvragen.', -'confirmemail_send' => 'Stuur een bevestigingscode', -'confirmemail_sent' => 'Bevestigingsberich verstuurd.', -'confirmemail_oncreate' => "Een bevestigingscode is naor joew netposadres verstuurd. Disse code is neet neudig um an te melden, mar je mutten 't wel bevestigen veurda-j de netposmeugelijkheen van disse wiki gebruken kunnen.", -'confirmemail_sendfailed' => "{{SITENAME}} kon joe gien bevestigingscode toesturen. +'confirmemail' => 'Bevestig netposadres', +'confirmemail_noemail' => 'Je hemmen gien geldig netposadres in-evoerd in joew [[Special:Preferences|veurkeuren]].', +'confirmemail_text' => 'Bie disse wiki mu-j je netposadres bevestigen veurda-j de berichopties gebruken kunnen. Klik op de onderstaonde knoppe um een bevestigingsberich te ontvangen. Dit berich bevat een code mit een verwiezing; um je netposadres te bevestigen mu-j disse verwiezing los doon.', +'confirmemail_pending' => 'Der is al een bevestigingscode op-estuurd; a-j net een gebrukersnaam an-emaak hemmen, wach dan eers een paor menuten tot da-j dit berich ontvungen hemmen veurda-j een nieje code anvragen.', +'confirmemail_send' => 'Stuur een bevestigingscode', +'confirmemail_sent' => 'Bevestigingsberich verstuurd.', +'confirmemail_oncreate' => "Een bevestigingscode is naor joew netposadres verstuurd. Disse code is neet neudig um an te melden, mar je mutten 't wel bevestigen veurda-j de netposmeugelijkheen van disse wiki gebruken kunnen.", +'confirmemail_sendfailed' => "{{SITENAME}} kon joe gien bevestigingscode toesturen. Contreleer joew netposadres op ongeldige tekens. Fout bie 't versturen: $1", -'confirmemail_invalid' => 'Ongeldige bevestigingscode. De code kan verlopen ween.', -'confirmemail_needlogin' => 'Je mutten $1 um joew netposadres te bevestigen.', -'confirmemail_success' => 'Joew netposadres is bevestig. Je kunnen noen anmelden en {{SITENAME}} gebruken.', -'confirmemail_loggedin' => 'Joew netposadres is noen bevestig.', -'confirmemail_error' => "Der is iets fout egaon bie 't opslaon van joew bevestiging.", -'confirmemail_subject' => 'Bevestiging netposadres veur {{SITENAME}}', -'confirmemail_body' => 'Ene mit IP-adres $1, werschienlijk jie zelf, hef zien eigen mit dit netposadres eregistreerd as de gebruker "$2" op {{SITENAME}}. +'confirmemail_invalid' => 'Ongeldige bevestigingscode. De code kan verlopen ween.', +'confirmemail_needlogin' => 'Je mutten $1 um joew netposadres te bevestigen.', +'confirmemail_success' => 'Joew netposadres is bevestig. Je kunnen noen anmelden en {{SITENAME}} gebruken.', +'confirmemail_loggedin' => 'Joew netposadres is noen bevestig.', +'confirmemail_error' => "Der is iets fout egaon bie 't opslaon van joew bevestiging.", +'confirmemail_subject' => 'Bevestiging netposadres veur {{SITENAME}}', +'confirmemail_body' => 'Ene mit IP-adres $1, werschienlijk jie zelf, hef zien eigen mit dit netposadres eregistreerd as de gebruker "$2" op {{SITENAME}}. Klik op de volgende verwiezing um te bevestigen da-jie disse gebruker bin en um de netposmeugelijkheen op {{SITENAME}} te activeren: @@ -3162,8 +3235,21 @@ A-j joe eigen *neet* an-emeld hemmen, klik dan neet op disse verwiezing um de be $5 De bevestigingscode zal verlopen op $4.', -'confirmemail_invalidated' => 'De netposbevestiging is of-ebreuken', -'invalidateemail' => 'Netposbevestiging ofbreken', +'confirmemail_body_changed' => 'Ene mit IP-adres $1, werschienlijk jie zelf, +hef zien eigen mit dit netposadres eregistreerd as de gebruker "$2" op {{SITENAME}}. + +Klik op de volgende verwiezing um te bevestigen da-jie disse gebruker bin en um de netposmeugelijkheen op {{SITENAME}} te activeren: + +$3 + +A-j joe eigen *neet* an-emeld hemmen, klik dan neet op disse verwiezing +um de bevestiging van joew netposadres of te breken: + +$5 + +De bevestigingscode zal verlopen op $4.', +'confirmemail_invalidated' => 'De netposbevestiging is of-ebreuken', +'invalidateemail' => 'Netposbevestiging ofbreken', # Scary transclusion 'scarytranscludedisabled' => '[Interwiki-intergrasie is uut-eschakeld]', @@ -3201,6 +3287,7 @@ $1', 'table_pager_first' => 'Eerste pagina', 'table_pager_last' => 'Leste pagina', 'table_pager_limit' => 'Laot $1 onderwarpen per pagina zien', +'table_pager_limit_label' => 'Onderwarpen per pagina:', 'table_pager_limit_submit' => 'Zeuk', 'table_pager_empty' => 'Gien risseltaoten', @@ -3259,6 +3346,7 @@ Je kunnen oek [[Special:Watchlist/edit|'t standardbewarkingsscharm gebruken]].", 'version-specialpages' => "Speciale pagina's", 'version-parserhooks' => 'Parserhooks', 'version-variables' => 'Variabelen', +'version-skins' => 'Vormgevingen', 'version-other' => 'Overige', 'version-mediahandlers' => 'Mediaverwarkers', 'version-hooks' => 'Hooks', @@ -3270,6 +3358,8 @@ Je kunnen oek [[Special:Watchlist/edit|'t standardbewarkingsscharm gebruken]].", 'version-hook-subscribedby' => 'In-eschreven deur', 'version-version' => '(Versie $1)', 'version-license' => 'Licentie', +'version-poweredby-credits' => "Disse wiki wönnen an-estuurd deur '''[http://www.mediawiki.org/ MediaWiki]''', kopierech © 2001-$1 $2.", +'version-poweredby-others' => 'aanderen', 'version-software' => 'Pregrammetuur dee eïnstalleerd is', 'version-software-product' => 'Preduk', 'version-software-version' => 'Versie', @@ -3339,6 +3429,15 @@ Voer de bestaansnaam in zonder \'t veurvoegsel "{{ns:file}}:".', 'tags-edit' => 'bewarking', 'tags-hitcount' => '$1 {{PLURAL:$1|wieziging|wiezigingen}}', +# Special:ComparePages +'comparepages' => "Pagina's vergelieken", +'compare-selector' => 'Paginaversies vergelieken', +'compare-page1' => 'Pagina 1', +'compare-page2' => 'Pagina 2', +'compare-rev1' => 'Versie 1', +'compare-rev2' => 'Versie 2', +'compare-submit' => 'Vergelieken', + # Database error messages 'dberr-header' => 'Disse wiki hef een prebleem', 'dberr-problems' => "'t Spiet ons, mar disse webstee hef op 't mement wat technische preblemen.", @@ -3355,8 +3454,13 @@ Voer de bestaansnaam in zonder \'t veurvoegsel "{{ns:file}}:".', 'htmlform-float-invalid' => 'De weerde dee-j op-egeven hemmen is gien getal.', 'htmlform-int-toolow' => 'De in-egeven weerde lig onder de minimumweerde van $1', 'htmlform-int-toohigh' => 'De in-egeven weerde lig boven de maximumweerde van $1', +'htmlform-required' => 'Disse weerde is verplich', 'htmlform-submit' => 'Opslaon', 'htmlform-reset' => 'Wiezigingen ongedaonmaken', 'htmlform-selectorother-other' => 'Aanders', +# SQLite database support +'sqlite-has-fts' => 'Versie $1 mit ondersteuning veur "full-text" zeuken', +'sqlite-no-fts' => 'Versie $1 zonder ondersteuning veur "full-text" zeuken', + ); diff --git a/languages/messages/MessagesNe.php b/languages/messages/MessagesNe.php index a5f5d3c3..38a94dd4 100644 --- a/languages/messages/MessagesNe.php +++ b/languages/messages/MessagesNe.php @@ -7,7 +7,9 @@ * @ingroup Language * @file * + * @author Bhawani Gautam * @author Bhawani Gautam Rhk + * @author Ganesh * @author Indiver * @author Lkhatiwada * @author RajeshPandey @@ -16,6 +18,25 @@ * @author सरोज कुमार ढकाल */ +$namespaceNames = array( + NS_MEDIA => 'मीडिया', + NS_SPECIAL => 'विशेष', + NS_TALK => 'वार्तालाप', + NS_USER => 'प्रयोगकर्ता', + NS_USER_TALK => 'प्रयोगकर्ता_वार्ता', + NS_PROJECT_TALK => '$1_वार्ता', + NS_FILE => 'चित्र', + NS_FILE_TALK => 'चित्र_वार्ता', + NS_MEDIAWIKI => 'मीडियाविकि', + NS_MEDIAWIKI_TALK => 'मीडियाविकि_वार्ता', + NS_TEMPLATE => 'ढाँचा', + NS_TEMPLATE_TALK => 'ढाँचा_वार्ता', + NS_HELP => 'मद्दत', + NS_HELP_TALK => 'मद्दत_वार्ता', + NS_CATEGORY => 'श्रेणी', + NS_CATEGORY_TALK => 'श्रेणी_वार्ता', +); + $digitTransformTable = array( '0' => '०', # ० '1' => '१', # १ @@ -45,8 +66,7 @@ $messages = array( 'tog-editsection' => '[सम्पादन] सम्बन्ध मार्फत हुने खण्ड सम्पादनलाई सक्षम पार्ने', 'tog-editsectiononrightclick' => 'शीर्षकमा दाहिने क्लिकद्वारा खण्ड सम्पादन सक्षम पार्ने ( जाभा स्क्रिप्ट चाहिने )', 'tog-showtoc' => 'सामग्री तालिका हेर्ने (तीन भन्दा बढी शीर्षक भएमा)', -'tog-rememberpassword' => 'मेरो यस कम्प्युटर प्रवेशलाई सम्झनुहोस्', -'tog-editwidth' => 'सम्पादन सन्दुकलाई पूरै पर्दा ढाक्नेगरी बढाउने', +'tog-rememberpassword' => 'यस ब्राउजरमा मेरो प्रवेशलाई सम्झनुहोस् (अधिकतम $1 {{PLURAL:$1|दिन|दिनहरु}} सम्म)', 'tog-watchcreations' => 'मेरो निगरानी सूचीमा मैले सृजना गरेको पृष्ठ थप्ने', 'tog-watchdefault' => 'मैले सम्पादन गरेको पृष्ठ निगरानी सूचीमा थप्ने', 'tog-watchmoves' => 'मैले सारेको पृष्ठहरुलाई निगरानी सूचीमा थप्ने', @@ -192,31 +212,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'विषय थप्नुहोस', -'vector-action-delete' => 'हटाउने', -'vector-action-move' => 'सार्ने', -'vector-action-protect' => 'सुरक्षित गर्ने', -'vector-action-undelete' => 'हटाएको रद्द गर्ने', -'vector-action-unprotect' => 'सुरक्षा रद्द गर्ने', -'vector-namespace-category' => 'प्रकार', -'vector-namespace-help' => 'सहायता पृष्ठ', -'vector-namespace-image' => 'फाइल', -'vector-namespace-main' => 'पृष्ठ', -'vector-namespace-media' => 'मिडिया पृष्ठ', -'vector-namespace-mediawiki' => 'सन्देश', -'vector-namespace-project' => 'प्रोजेक्ट पृष्ठ', -'vector-namespace-special' => 'विशेष पृष्ठ', -'vector-namespace-talk' => 'छलफल', -'vector-namespace-template' => 'टेम्पलेट', -'vector-namespace-user' => 'प्रयोगकर्ता पृष्ठ', -'vector-view-create' => 'सृजना गर्ने', -'vector-view-edit' => 'सम्पादन', -'vector-view-history' => 'इतिहास हेर्ने', -'vector-view-view' => 'पढ्ने', -'vector-view-viewsource' => 'स्रोत हेर्ने', -'actions' => 'कार्यहरु', -'namespaces' => 'नेमस्पेस', -'variants' => 'बहुरुपहरु', +'vector-action-addsection' => 'विषय थप्नुहोस', +'vector-action-delete' => 'हटाउने', +'vector-action-move' => 'सार्ने', +'vector-action-protect' => 'सुरक्षित गर्ने', +'vector-action-undelete' => 'हटाएको रद्द गर्ने', +'vector-action-unprotect' => 'सुरक्षा रद्द गर्ने', +'vector-simplesearch-preference' => 'विशिष्ठ खोज सुझावहरु सक्रिय पार्ने (भेक्टर त्वचाको लागि मात्र)', +'vector-view-create' => 'सृजना गर्ने', +'vector-view-edit' => 'सम्पादन', +'vector-view-history' => 'इतिहास हेर्ने', +'vector-view-view' => 'पढ्ने', +'vector-view-viewsource' => 'स्रोत हेर्ने', +'actions' => 'कार्यहरु', +'namespaces' => 'नेमस्पेस', +'variants' => 'बहुरुपहरु', 'errorpagetitle' => 'त्रुटि', 'returnto' => '$1 मा फर्कनुहोस् ।', @@ -277,6 +287,9 @@ $messages = array( कृपया यो पृष्ठ पुन: हेर्नु अगाडि केही समय पर्खिदिनुहोस् । $1', +'pool-timeout' => 'समय सकियो बन्द गर्ने प्रतीक्षामा', +'pool-queuefull' => 'प्रतीक्षा पंक्ति भरियो', +'pool-errorunknown' => 'अज्ञात त्रुटि', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}}को बारेमा', @@ -444,7 +457,8 @@ $2', 'yourname' => 'प्रयोगकर्ता-नाम', 'yourpassword' => 'पासवर्ड', 'yourpasswordagain' => 'पासवर्ड फेरि टाईप गर्नुहोस्', -'remembermypassword' => 'यो कम्प्युटरमा मेरो प्रवेश याद गर्ने ।', +'remembermypassword' => 'यो कम्प्युटरमा मेरो प्रवेश याद गर । (धेरैमा $1 {{PLURAL:$1|दिन|दिनहरु}})', +'securelogin-stick-https' => 'प्रवेश गरेपछि HTTPS सित जोड़िएर बस्ने', 'yourdomainname' => 'तपाईंको ज्ञानक्षेत्र(डोमेन)', 'externaldberror' => 'यहाँ प्रमाणिकरण डेटाबेस त्रुटि भयो या त तपाईंलाई आफ्नो बाहिरी खाता अद्यतन गर्ने अनुमति छैन।', 'login' => 'प्रवेश', @@ -461,6 +475,7 @@ $2', 'gotaccount' => "के तपाईँसँग पहिले देखि नै खाता छ ? '''$1''' ।", 'gotaccountlink' => 'लग इन', 'createaccountmail' => 'इ-मेलबाट', +'createaccountreason' => 'कारण :', 'badretype' => 'तपाईंले दिनुभएको पासवर्ड मिल्दैन।', 'userexists' => 'तपाईले प्रविष्ट गर्नुभएको प्रयोगकर्ताको नाम पहिले देखिनै प्रयोगमा छ । कृपया फरक नाम छान्नुहोला ।', @@ -485,6 +500,7 @@ $2', 'wrongpasswordempty' => 'हालिएको पासवर्ड खालि थियो । कृपया फेरी प्रयास गर्नुहोला ।', 'passwordtooshort' => 'पासवर्ड कम्तिमा {{PLURAL:$1|१ अक्षर |$1 अक्षरहरु}}को हुनुपर्छ ।', 'password-name-match' => 'तपाईँको प्रवेशशव्द प्रयोगकर्ता नाम भन्दा फरक हुनुपर्छ ।', +'password-login-forbidden' => 'यो प्रयोगकर्ता नाम र प्रवेश शव्द वर्जित गरिएकोछ ।', 'mailmypassword' => 'नयाँ प्रवेशशव्द इमेल गर्नुहोस्', 'passwordremindertitle' => '{{SITENAME}}को लागि नयाँ अस्थायी पासवर्ड', 'passwordremindertext' => 'कसैले (सायद तपाईँ, IP ठेगाना $1 बाट), {{SITENAME}}($4) को लागि नयाँ प्रवेशशव्द अनुरोध गर्नुभएको छ । प्रयोगकर्ता "$2" को लागि नयाँ अस्थायी प्रवेशशव्द "$3"तयार पारिएको छ। यदि यो तपाईको इच्छामा भएको भए अहिले तपाईँले प्रवेशगरी नयाँ प्रवेशशव्द छान्नु पर्ने हुन्छ। @@ -520,6 +536,9 @@ $2', 'loginlanguagelabel' => 'भाषा: $1', 'suspicious-userlogout' => 'तपाईंको निर्गमन अनुरोध अस्विकार गरिन्छ किन कि यो खराब ब्राउजर वा क्यासिङ प्रोक्सिले पठाएको जस्तो देखिन्छ।', +# E-mail sending +'php-mail-error-unknown' => 'PHP मेल() क्रियामा अज्ञात त्रुटि', + # Password reset dialog 'resetpass' => 'प्रवेशशव्द परिवर्तन गर्नुहोस्', 'resetpass_announce' => 'तपाईंले अस्थायी ई-मेल कोडको आधारमा प्रवेश गर्नु भएकोछ। @@ -573,11 +592,12 @@ $2', 'showdiff' => 'परिवर्तन देखाउनुहोस्', 'anoneditwarning' => "'''चेतावनी:''' तपाईँले प्रवेश गर्नु भएको छैन। तपाईँको IP ठेगाना पृष्ठसम्पादन इतिहासमा दर्तागरिने छ ।", +'anonpreviewwarning' => "''तपाईंले प्रवेश गर्नु भएको छैन। संग्रह (Save) गरेको खण्डमा पृष्ठको इतिहासमा तपाईंको IP ठेगाना अंकित गरिनेछ।''", 'missingsummary' => "'''यादगर्नुहोस् :''' तपाईले सम्पादन सारांश दिनुभएको छैन । यदि तपाईले संग्रहगर्नुहोस् थिच्नुभयो भने , सारांश बिना नै संग्रहित गरिने छ ।", 'missingcommenttext' => 'कृपया टिप्पणी प्रविष्ठ गर्नुहोस् ।', -'missingcommentheader' => "'''याद गर्नुहोस् :''' तपाईँले टिप्पणीमा विषय /शिर्ष पंक्ति दिनुभएको छैन । -तपाईँले फेरि संग्रह गर्नुहोस् थिच्नु भएमा , तपाईको सम्पादन यसै रुपमा संग्रहित हुनेछ ।", +'missingcommentheader' => "'''याद गर्नुहोस् :''' तपाईँले टिप्पणीमा विषय /शीर्ष पंक्ति दिनुभएको छैन । +तपाईँले फेरि \"{{int:savearticle}}\" थिच्नु भएमा , तपाईको सम्पादन यसै रुपमा संग्रहित हुनेछ ।", 'summary-preview' => 'सारांश पूर्वालोकन:', 'subject-preview' => 'विषय/शीर्षपंक्ति पूर्वरुप:', 'blockedtitle' => 'प्रयोककर्तालाई रोक लगाइएको छ', @@ -656,6 +676,12 @@ $2', '''यसलाइ अहिले सम्म संग्रह गरिएको छैन!'''", 'userjspreview' => "'''याद राख्नुहोस तपाईँले आफ्नो प्रयोगकर्ता JavaScript को पूर्वावलोकन मात्र हेरिरहनु भएको छ। ''' '''यसलाइ अहिले सम्म संग्रह गरिएको छैन!'''", +'sitecsspreview' => "'''याद राख्नुहोस तपाईँले केवल वैश्विक CSS. को पूर्वावलोकन मात्र अवलोकन गर्नु भएको छ। ''' +'''यसलाइ अहिले सम्म संग्रह गरिएको छैन!'''", +'sitejspreview' => "याद राख्नुहोस तपाईँले केवल JavaScript code को पूर्वावलोकन मात्र हेरिरहनु भएको छ। ''' +'''यसलाइ अहिले सम्म संग्रह गरिएको छैन!'''", +'userinvalidcssjstitle' => "'''चेतावनी:''' यहाँ कुनैपनि \"\$1\" नामको स्कीन छैन । +प्रचलित .css तथा .js पृष्ठहरुले lowercase शीर्षक प्रयोग गर्छन्, जस्तै {{ns:user}}:Foo/Vector.css को सट्टामा {{ns:user}}:Foo/vector.css", 'updated' => 'नवीन', 'note' => "'''सूचना:'''", 'previewnote' => "'''यो केवल पूर्वालोकन मात्र हो; तपाईंका परिवर्तनहरू संग्रह भएका छैनन्!'''", @@ -855,6 +881,8 @@ $1", 'logdelete-failure' => "'''लग दृष्टि मिलाउन सकिएन :''' $1", 'revdel-restore' => 'दृष्टि परिवर्तन गर्ने', +'revdel-restore-deleted' => 'मेटिएको पुनरावलोकन', +'revdel-restore-visible' => 'प्रकट संशोधन', 'pagehist' => 'पृष्ठको इतिहास', 'deletedhist' => 'मेटाएका इतिहास', 'revdelete-content' => 'सामग्री', @@ -907,11 +935,13 @@ $1", # Diffs 'history-title' => '"$1" को पुनरावलोकन इतिहास', 'difference' => '(पुनरावलोकनहरुको बीचमा भिन्नता)', +'difference-multipage' => '(पृष्ठहरुमा भिन्नता)', 'lineno' => 'पंक्ति $1:', 'compareselectedversions' => 'छानिएका संस्करणहरू दाँज्नुहोस्', 'showhideselectedversions' => 'छानिएका पुनरावलोकनहरु देखाउने/लुकाउने', 'editundo' => 'रद्द गर्ने', -'diff-multi' => '({{PLURAL:$1|एक मध्य पुनरावलोकन|$1 मध्य पुनरावलोकनहरू}} नदेखाइएको)', +'diff-multi' => '({{PLURAL:$2|एक प्रयोगकर्ता|$2 प्रयोगकर्ताहरु}}द्वारा {{PLURAL:$1|एउटा मध्यवर्ती संशोधन|$1 मध्यवर्ती संशोधनहरू}} नदेखाइएको)', +'diff-multi-manyusers' => '($2 {{PLURAL:$2|भन्दा अधिक प्रयोगकर्ता|भन्दा अधिक प्रयोगकर्ताहरु}}द्वारा {{PLURAL:$1|एउटा मध्यवर्ती संशोधन|$1 मध्यवर्ती संशोधनहरु}} नदेखाइएको)', # Search results 'searchresults' => 'खोज नतिजाहरू', @@ -946,6 +976,7 @@ $1", 'searchprofile-everything-tooltip' => 'सबै सामग्री खोज्ने(वार्तालाप समेत )', 'searchprofile-advanced-tooltip' => 'अनुकुल नेमस्पेसमा खोज्ने', 'search-result-size' => '$1 ({{PLURAL:$2|1 शव्द|$2 शव्दहरु}})', +'search-result-category-size' => '{{PLURAL:$1|एक सदस्य|$1 सदस्यहरु}} ({{PLURAL:$2|1 उपश्रेणी|$2 उपश्रेणीहरु}}, {{PLURAL:$3|एउटा फाइल|$3 फाइलहरु}})', 'search-result-score' => 'मिल्ने :$1%', 'search-redirect' => '(जाने $1)', 'search-section' => '(खण्ड $1)', @@ -1023,6 +1054,7 @@ $1", 'contextlines' => 'प्रति पंक्ति मेल :', 'contextchars' => 'प्रति पंक्ति सन्दर्भ :', 'stub-threshold' => ' stub link स्वरूपण (बाइट)को निम्ति द्वार:', +'stub-threshold-disabled' => 'निष्क्रिय', 'recentchangesdays' => 'हालको परिवर्तनमा देखाउने दिनहरु:', 'recentchangesdays-max' => 'अधिकतम $1 {{PLURAL:$1|दिन|दिन}}', 'recentchangescount' => 'पूर्व निर्धारितरुपमा देखाउनुपर्ने सम्पादनहरू :', @@ -1056,6 +1088,7 @@ $1", 'prefs-files' => 'फाइलहरु', 'prefs-custom-css' => 'अनुकुलित CSS', 'prefs-custom-js' => 'अनुकुलित JS', +'prefs-common-css-js' => 'साझा CSS/जाभा स्क्रिप्ट सबै त्वचा(स्किन)को लागि:', 'prefs-reset-intro' => 'तपाईले यो पृष्ठ आफ्नो अभिरुचीहरू साइट पूर्वावस्थामा फर्काउन प्रयोग गर्न सक्नुहुन्छ । यो रद्द गर्न सक्नुहुन्छ ।', 'prefs-emailconfirm-label' => 'इ-मेल एकिन प्रक्रिया :', @@ -1098,9 +1131,15 @@ HTML ट्यागहरु जाँच्नुहोस् ।', 'prefs-advancedrendering' => 'उन्नत विकल्पहरु', 'prefs-advancedsearchoptions' => 'उन्नत विकल्पहरू', 'prefs-advancedwatchlist' => 'उन्नत विकल्पहरू', -'prefs-display' => 'प्रदर्शन विकल्पहरू', +'prefs-displayrc' => 'प्रदर्शन विकल्पहरू', +'prefs-displaysearchoptions' => 'प्रदर्शन विकल्पहरू', +'prefs-displaywatchlist' => 'प्रदर्शन विकल्पहरू', 'prefs-diffs' => 'diffs(भिन्नता)', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'ई मेल ठेगाना मान्य भएको प्रतीत हुन्छ', +'email-address-validity-invalid' => 'मान्य ईमेल ठेगाना दिनुहोस्', + # User rights 'userrights' => 'प्रयोगकर्ता अधिकार व्यवस्थापन', 'userrights-lookup-user' => 'प्रयोगकर्ता समूह व्यवस्थापन गर्नुहोस', @@ -1129,22 +1168,22 @@ HTML ट्यागहरु जाँच्नुहोस् ।', 'group-autoconfirmed' => 'स्वत निश्चित गरिएका प्रयोगकर्ताहरु', 'group-bot' => 'बोटहरु', 'group-sysop' => 'प्रबन्धकहरू', -'group-bureaucrat' => 'कुटनीतिज्ञहरु', +'group-bureaucrat' => 'प्रशासकहरु', 'group-suppress' => 'अतिदृष्टिहरु', 'group-all' => '(सबै)', 'group-user-member' => 'प्रयोगकर्ता', -'group-autoconfirmed-member' => 'स्वत: निर्धारित प्रयोगकर्ता', +'group-autoconfirmed-member' => 'स्वनिर्धारित प्रयोगकर्ता', 'group-bot-member' => 'बोट', 'group-sysop-member' => 'प्रबन्धक', -'group-bureaucrat-member' => 'कुटनीतिज्ञ', +'group-bureaucrat-member' => 'प्रशासक', 'group-suppress-member' => 'अतिदृष्टि', 'grouppage-user' => '{{ns:project}}:प्रयोगकर्ताहरु', 'grouppage-autoconfirmed' => '{{ns:project}}:स्वनिर्धारित प्रयोगकर्ताहरु', 'grouppage-bot' => '{{ns:project}}:बोटहरु', 'grouppage-sysop' => '{{ns:project}}: प्रबन्धकहरु', -'grouppage-bureaucrat' => '{{ns:project}}:कुटनीतिज्ञहरु', +'grouppage-bureaucrat' => '{{ns:project}}:प्रशासकहरु', 'grouppage-suppress' => '{{ns:project}}:अतिदृष्टि', # Rights @@ -1183,6 +1222,7 @@ HTML ट्यागहरु जाँच्नुहोस् ।', 'right-hideuser' => 'एक प्रयोगकर्ता नाम रोक्ने, सार्वजनिकहुनबाट लुकाउने', 'right-ipblock-exempt' => 'IP रोक,स्वत: रोक तथा स्तर रोक कटेर जाने', 'right-proxyunbannable' => 'प्रोक्सिको स्वत: रोक कटेर जाने', +'right-unblockself' => 'तिनीहरु आफैंलाई खुल्ला गर्छन्', 'right-protect' => 'सुरक्षा स्तर परिवर्तन गर्ने र जोगाइएका पृष्ठहरु सम्पादन गर्ने', 'right-editprotected' => 'जोगाइएका पृष्ठहरु सम्पादन गर्ने(क्यासकेडिङ्ग सुरक्षा नभएका)', 'right-editinterface' => 'प्रयोगकर्ता अन्तरमोहडा सम्पादन गर्ने', @@ -1205,7 +1245,6 @@ HTML ट्यागहरु जाँच्नुहोस् ।', 'right-siteadmin' => 'डेटाबेसको ताल्चामार्ने र ताल्चाखोल्ने', 'right-reset-passwords' => 'अरु प्रयोगकर्ताको प्रवेशशव्द पुनर्प्रविष्ठीगर्ने', 'right-override-export-depth' => 'गहिराइ ५ सम्मको लिंकगरिएका पृष्ठहरु सहित निर्यात गर्ने', -'right-versiondetail' => 'विस्तारित सफ्टवेयर संस्करण जानकारी देखाउने', 'right-sendemail' => 'अन्य प्रयोगकर्ताहरुलाई इमेल गर्ने', # User rights log @@ -1253,16 +1292,12 @@ HTML ट्यागहरु जाँच्नुहोस् ।', # Recent changes 'nchanges' => '$1 {{PLURAL:$1|परिवर्तन|परिवर्तनहरु}}', 'recentchanges' => 'नयाँ परिवर्तनहरु', -'recentchanges-legend' => 'हालैको परिवर्रन विकल्पहरु', +'recentchanges-legend' => 'हालैको परिवर्तन विकल्पहरु', 'recentchangestext' => 'विकिका भर्खरका परिवर्तनहरुलाई यस पृष्ठमा पहिल्याउने', 'recentchanges-feed-description' => 'यो फिडमा रहेको विकीको सवैभन्दा अन्तिम परिवर्तनहरुको जानकारी राख्नुहोस्', -'recentchanges-legend-newpage' => '$1 - नयाँ पृष्ठ', 'recentchanges-label-newpage' => 'यो सम्पादनले नयाँ पृष्ठ निर्माण गरेको छ', -'recentchanges-legend-minor' => 'साधारण सम्पादन -$1', 'recentchanges-label-minor' => 'यो साधारण सम्पादन हो', -'recentchanges-legend-bot' => 'बोट सम्पादन -$1', 'recentchanges-label-bot' => 'यो सम्पादन बोट द्वारा गरिएको थियो', -'recentchanges-legend-unpatrolled' => 'पट्रोल नरिएको सम्पादन -$1', 'recentchanges-label-unpatrolled' => 'यो सम्पादन अहिले सम्म पट्रोल गरिएको छैन', 'rcnote' => "तल पछिल्ला {{PLURAL:$2|day|'''$2''' दिनहरु}} मा $5, $4 सम्म भएका {{PLURAL:$1|is '''1''' change|पछिल्ला '''$1''' परिवर्तनहरु}} देखाइएको छ ।", 'rcnotefrom' => "'''$2''' देखिका परिवर्तनहरु तल ('''$1''' सम्मका देखाइन्छ)।", @@ -1342,13 +1377,23 @@ HTML ट्यागहरु जाँच्नुहोस् ।', 'filetype-unwanted-type' => "'''\".\$1\"''' फाइल नचाहिने प्रकारको फाइल हो। मुख्यतया {{PLURAL:\$3|फाइलको प्रकार हो|फाइलका प्रकार हुन्}} \$2.", 'filetype-missing' => 'फाइलको एक्स्टेन्शन छैन (उदा- ".jpg")।', +'empty-file' => 'तपाईंले बुझाएको फाइल खालि छ।', +'file-too-large' => 'तपाईंले बुझाएको फाइल अति ठूलो छ।', +'filename-tooshort' => 'फाइलको नाम अति छोटो भयो।', +'filetype-banned' => 'यस प्रकारको फाइलमाथि प्रतिबन्ध छ।', +'verification-error' => 'यो फाइलले प्रामाणिकता पार गरेन।', +'hookaborted' => 'एक्सटेन्शन हुकले गर्दा यस फाइललाई नयाँ रुप दिने क्रिया रद्द भयो।', +'illegal-filename' => 'यस्तो फाइल नामको अनुमति छैन।', +'overwrite' => 'भइरहेको फाइलमाथि अधिलेखन(Overwriting)को अनुमति छैन।', +'unknown-error' => 'एउटा अज्ञात त्रुटि भयो।', +'tmp-create-error' => 'अस्थायी फाइल सृजना गर्न सकिएन।', +'tmp-write-error' => 'अस्थायी फाइल लेख्दै गर्दा त्रुटि।', 'large-file' => 'यो सिफारिस गरिन्छ कि फाइलहरु $1 भन्दा ठूला हुनु हुँदैन; यो फाइल $2 छ।', 'fileexists-extension' => "यहि नामको एउटा फाइल पहिलेदेखि नैं छ: [[$2|thumb]] * उर्ध्वभरण हुँदै गरेको पाइलको नाम: '''[[:$1]]''' * पहिलेदेखि नैं भएको पाइअलको नाम: '''[[:$2]]''' कृपया अर्कै नाम रोज्नुहोस्।", -'successfulupload' => 'सफलतापूर्वक... पूरा भयो', 'uploadwarning' => 'उर्ध्वभरण चेतावनी', 'savefile' => 'फाइल बचत गर्नुहोस्', 'uploadedimage' => 'उर्ध्वभरण(upload) गरियो "[[$1]]"', @@ -1370,6 +1415,13 @@ HTML ट्यागहरु जाँच्नुहोस् ।', तपाईंको विचारमा के यो उचित छ कि यसको उर्ध्वभरण जारी राखियोस्, यस फाइलको मेटिएको लग सुविधाको निम्ति यहाँ दिइएकोछ :", +'upload-success-subj' => 'उर्ध्वभरण सफल', +'upload-success-msg' => '[$2]बाट त्पाईंको उर्ध्वभरण सफल भयो। त्यो यहाँ पाउन सकिनेछ: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'उर्ध्वभरण समस्या', +'upload-failure-msg' => 'तपाईंको उर्ध्वभरण [$2]बाट समस्या आएकोछ: + +$1', +'upload-warning-subj' => 'उर्ध्वभरण चेतावनी', 'upload-proto-error' => 'दूषित प्रोटोकल', 'upload-file-error' => 'आन्तरिक त्रुटि', @@ -1480,7 +1532,8 @@ HTML ट्यागहरु जाँच्नुहोस् ।', 'unusedtemplateswlh' => 'अन्य कड़ीहरु', # Random page -'randompage' => 'कुनै एक लेख', +'randompage' => 'कुनै एक लेख', +'randompage-nopages' => '{{PLURAL:$2| $1 नाम भएको कुनै पृष्ट छैन|$1 नाम भएका कुनै पृष्टहरु छैनन्}}', # Random redirect 'randomredirect' => 'कुनै एउटा अनुप्रेषितमा जाने', @@ -1501,7 +1554,6 @@ HTML ट्यागहरु जाँच्नुहोस् ।', 'statistics-edits-average' => 'प्रतिपृष्ठ औसत सम्पादन', 'statistics-views-total' => 'जम्मा हेर्नुहोस्', 'statistics-views-peredit' => 'प्रति पृष्ठ सम्पादन', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Job queue] लम्बाइ', 'statistics-users' => 'दर्तागरिएको [[Special:ListUsers|प्रयोगकर्ताहरु]]', 'statistics-users-active' => 'सकृय प्रयोगकर्ताहरु', 'statistics-users-active-desc' => 'प्रयोगकर्ताहरु जो{{PLURAL:$1|बितेको एक दिन|बितेका $1 दिनहरु}}देखि जो सक्रिय छन्', @@ -1534,6 +1586,8 @@ HTML ट्यागहरु जाँच्नुहोस् ।', 'nmembers' => '$1 {{PLURAL:$1|सदस्य|सदस्यहरू}}', 'nrevisions' => '$1 {{PLURAL:$1|पुनरावलोकन|पुनरावलोकनहरु}}', 'nviews' => '$1 {{PLURAL:$1|अवलोकन|अवलोकनहरु}}', +'nimagelinks' => '$1 {{PLURAL:$1|पृष्ठ|पृष्ठहरु}}माथि प्रयोग गरिएको', +'ntransclusions' => '$1 {{PLURAL:$1पृष्ठमा प्रयोग गरिएको|पृष्ठहरुमा प्रयोग गरिएका}}', 'specialpage-empty' => 'यो पृष्ठ खाली छ।', 'lonelypages' => 'अनाथ पृष्ठहरु', 'uncategorizedpages' => 'श्रेणीकरण नभएका पृष्ठहरु', @@ -1566,7 +1620,7 @@ HTML ट्यागहरु जाँच्नुहोस् ।', 'protectedpagesempty' => 'दिइएको प्यारामिटर प्रयोग गरि सुरक्षा गरिएका पृष्ठहरु छैनन् ।', 'protectedtitles' => 'सुरक्षा गरिएका शिर्षकहरु', 'protectedtitlestext' => 'निम्न शिर्षकहरु शृजनाहुनबाट सुरक्षित गरिएको छ', -'protectedtitlesempty' => 'दिइएको प्यारामिटर प्रयोग गरि सुरक्षा गरिएका शिर्षकहरु छैनन् ।', +'protectedtitlesempty' => 'दिइएको प्यारामिटर प्रयोग गरि सुरक्षा गरिएका शीर्षकहरु छैनन् ।', 'listusers' => 'प्रयोगकर्ता सूची', 'listusers-editsonly' => 'सम्पादन गरेका प्रयोगकर्तामात्र देखाउने', 'listusers-creationsort' => 'सृजना मिति अनुसार क्रमवद्ध गर्ने', @@ -1606,11 +1660,13 @@ HTML ट्यागहरु जाँच्नुहोस् ।', 'allpagesto' => 'निम्नमा अन्तहुने पृष्ठहरु देखाउने:', 'allarticles' => 'सबै लेखहरु', 'allinnamespace' => 'सबै पृष्ठहरु ($1 नेमस्पेस)', -'allnotinnamespace' => 'सबै पृष्ठहरु ($1 नेमस्पेसमा छिनन् )', +'allnotinnamespace' => 'सबै पृष्ठहरु ($1 नेमस्पेसमा छैनन् )', 'allpagesprev' => 'अघिल्लो', 'allpagesnext' => 'अर्को', -'allpagessubmit' => 'जानुहोस्', +'allpagessubmit' => 'जाने', 'allpagesprefix' => 'यी सुरुका अक्षरसहितका पृष्ठहरु हेर्ने:', +'allpagesbadtitle' => 'दिएको पृष्ठ शीर्षक अमान्य, खाली वा गलत रुपमा अन्तर भाषा वा अन्तर विकी सम्बन्ध गरिएको थियो। +यसमा शीर्षकमा प्रयोग गर्न नमिल्ने एक वा बढी अक्षरहरू रहेका हुनसक्छन् ।', 'allpages-bad-ns' => '{{SITENAME}} को नामस्थान छैन "$1" ।', # Special:Categories @@ -1675,32 +1731,37 @@ HTML ट्यागहरु जाँच्नुहोस् ।', 'listgrouprights-addgroup-self-all' => 'सबै समूहहरु निजी खातामा थप्ने', # E-mail user -'mailnologin' => 'ईमेल पठाउने ठेगाना नै भएन ।', -'mailnologintext' => 'तपाईले अरु प्रयोगकर्ताहरुलाई ईमेल पठाउनको लागि आफु पहिले [[Special:UserLogin|प्रवेश(लगइन)गरेको]] हुनुपर्छ र [[Special:Preferences|आफ्नो रोजाइहरुमा]] एउटा वैध ईमेल ठेगाना भएको हुनुपर्छ।', -'emailuser' => 'यो प्रयोगकर्तालाई ई-मेल पठाउनुहोस्', -'emailpage' => 'प्रयोगकर्तालाई इमेल गर्नुहोस्', -'usermailererror' => 'मेल अब्जेक्टले देखाएको त्रुटि:', -'defemailsubject' => '{{SITENAME}} ई-मेल', -'noemailtitle' => 'ईमेल ठेगाना नभएको', -'noemailtext' => 'प्रयोगकर्ताले सही ई-मेल ठेगाना दर्शाएको छैन।', -'nowikiemailtitle' => 'ई-मेलको अनुमति छैन', -'nowikiemailtext' => 'यी प्रयोगकर्ताले अरु प्रयोगकर्ताहरुबाट ई-मेल स्वीकार नगर्ने छनोट गरेकाछन्।', -'email-legend' => '{{SITENAME}}का अर्का प्रयोगकर्तालाई ई-मेल पठाउने', -'emailfrom' => 'बाट:', -'emailto' => 'लाई:', -'emailsubject' => 'विषय:', -'emailmessage' => 'सन्देश:', -'emailsend' => 'पठाउनुहोस्', -'emailccme' => 'मेरो सन्देशको एउटा प्रति मलाई ई-मेल गरिदिनुहोस्।', -'emailccsubject' => 'तपाईँको सन्देशको प्रतिलिपि $1: $2लाई', -'emailsent' => 'इमेल पठाईयो', -'emailsenttext' => 'तपाईंको ई-मेल सन्देश पठाइयो।', -'emailuserfooter' => 'यो ई-मेल $1 ले $2 लाई "ई-मेल प्रयोगकर्ता" कार्यानुरुप {{SITENAME}}मा पठाएको थियो।', +'mailnologin' => 'ईमेल पठाउने ठेगाना नै भएन ।', +'mailnologintext' => 'तपाईले अरु प्रयोगकर्ताहरुलाई ईमेल पठाउनको लागि आफु पहिले [[Special:UserLogin|प्रवेश(लगइन)गरेको]] हुनुपर्छ र [[Special:Preferences|आफ्नो रोजाइहरुमा]] एउटा वैध ईमेल ठेगाना भएको हुनुपर्छ।', +'emailuser' => 'यो प्रयोगकर्तालाई ई-मेल पठाउनुहोस्', +'emailpage' => 'प्रयोगकर्तालाई इमेल गर्नुहोस्', +'usermailererror' => 'मेल अब्जेक्टले देखाएको त्रुटि:', +'defemailsubject' => '{{SITENAME}} ई-मेल', +'usermaildisabled' => 'प्रयोगकर्ता ई-मेल निरस्त गरिएको', +'usermaildisabledtext' => 'यस विकिमा तपाईं अरु प्रयोगकर्तालाई ई-मेल पठाउन सक्नुहुन्न', +'noemailtitle' => 'ईमेल ठेगाना नभएको', +'noemailtext' => 'प्रयोगकर्ताले सही ई-मेल ठेगाना दर्शाएको छैन।', +'nowikiemailtitle' => 'ई-मेलको अनुमति छैन', +'nowikiemailtext' => 'यी प्रयोगकर्ताले अरु प्रयोगकर्ताहरुबाट ई-मेल स्वीकार नगर्ने छनोट गरेकाछन्।', +'email-legend' => '{{SITENAME}}का अर्का प्रयोगकर्तालाई ई-मेल पठाउने', +'emailfrom' => 'बाट:', +'emailto' => 'लाई:', +'emailsubject' => 'विषय:', +'emailmessage' => 'सन्देश:', +'emailsend' => 'पठाउनुहोस्', +'emailccme' => 'मेरो सन्देशको एउटा प्रति मलाई ई-मेल गरिदिनुहोस्।', +'emailccsubject' => 'तपाईँको सन्देशको प्रतिलिपि $1: $2लाई', +'emailsent' => 'इमेल पठाईयो', +'emailsenttext' => 'तपाईंको ई-मेल सन्देश पठाइयो।', +'emailuserfooter' => 'यो ई-मेल $1 ले $2 लाई "ई-मेल प्रयोगकर्ता" कार्यानुरुप {{SITENAME}}मा पठाएको थियो।', + +# User Messenger +'usermessage-summary' => 'प्रणाली सन्देश छोड़दै ।', # Watchlist 'watchlist' => 'मेरो अवलोकन', 'mywatchlist' => 'मेरो अवलोकनसूची', -'watchlistfor' => "('''$1''' को लागि)", +'watchlistfor2' => '$1को $2', 'nowatchlist' => 'तपाईको अवलोकन सूचीमा कुनै पनि सामाग्री छैन।', 'watchnologin' => 'प्रवेश (लग ईन) नगरिएको', 'watchnologintext' => 'आफ्नो अवलोकनलाइ परिवर्तन गर्नको लागि त तपाइ यसमा [[Special:UserLogin|प्रवेश(लगइन)]] गर्नुपर्छ।', @@ -1739,7 +1800,8 @@ HTML ट्यागहरु जाँच्नुहोस् ।', 'enotif_body' => 'प्रिय $WATCHINGUSERNAME, -$PAGEEDITDATE को दिन {{SITENAME}}को पृष्ठ $PAGETITLE $PAGEEDITORद्वारा $CHANGEDORCREATED, हालको संशोधनको निम्ति हेर्नुहोस् $PAGETITLE_URL । +{{SITENAME}}को पृष्ठ $PAGETITLE $PAGEEDITDATE को दिन $PAGEEDITORद्वारा $CHANGEDORCREATED, +हालको संशोधनको निम्ति हेर्नुहोस् $PAGETITLE_URL । $NEWPAGE @@ -1749,16 +1811,18 @@ $NEWPAGE मेल: $PAGEEDITOR_EMAIL विकि: $PAGEEDITOR_WIKI -तपाईं यस पृष्ठमा नगएसम्म कुनै परिवर्तन भएका खण्डमा अगाड़ि कुनै सूचना दिनेछैन। -तपाईंका सम्पूर्ण निगरानी पृष्ठहरुकोलागि तपाईंले सूचना पताकालाई निगरानी सूचीमा पुनर्बहाली गर्न सक्नुहुन्छ। +तपाईं यस पृष्ठमा नगएसम्म अब उसो कुनै परिवर्तन भएका खण्डमा कुनै सूचना दिनेछैन। +तपाईंका सम्पूर्ण निगरानी पृष्ठहरुको लागि तपाईंले सूचना पताकालाई निगरानी सूचीमा पुनर्बहाली गर्न सक्नुहुन्छ। तपाईंको मित्र {{SITENAME}} सूचना प्रणाली - -- +इमेल सूचना व्यवस्था परिवर्तन गर्न, जानुहोस् +{{fullurl:{{#special:Preferences}}}} + निगरानी सूची व्यवस्थित गर्न, जानुहोस् {{fullurl:{{#special:Watchlist}}/edit}} -निगरानी सूची मेट्न गर्न, जानुहोस् +निगरानी सूची मेट्न, जानुहोस् $UNWATCHURL प्रतिक्रिया र अन्य सहयोगको निम्ति: @@ -1912,19 +1976,23 @@ $3द्वारा $1को ($4को समय $5 मा) मेटाइए 'month' => 'महिना देखि (र पहिले):', 'year' => 'वर्ष देखि( र पहिले):', -'sp-contributions-newbies' => 'नयाँ खाताको लागि मात्र योगदानहरु देखाउने', -'sp-contributions-newbies-sub' => 'नयाँ खाताहरुको लागि', -'sp-contributions-newbies-title' => 'नयाँ खाताहरुको लागि प्रयोगकर्ताका योगदानहरु', -'sp-contributions-blocklog' => 'रोकावट लग', -'sp-contributions-deleted' => 'प्रयोगकर्ताका योगदानहरु मेटाइयो', -'sp-contributions-logs' => 'लगहरु', -'sp-contributions-talk' => 'वार्ता', -'sp-contributions-userrights' => 'प्रयोगकर्ता अधिकार व्यवस्थापन', -'sp-contributions-blocked-notice' => 'यो प्रयोगकर्तालाई अहिले रोक लगाइएको छ। +'sp-contributions-newbies' => 'नयाँ खाताको लागि मात्र योगदानहरु देखाउने', +'sp-contributions-newbies-sub' => 'नयाँ खाताहरुको लागि', +'sp-contributions-newbies-title' => 'नयाँ खाताहरुको लागि प्रयोगकर्ताका योगदानहरु', +'sp-contributions-blocklog' => 'रोकावट लग', +'sp-contributions-deleted' => 'प्रयोगकर्ताका योगदानहरु मेटाइयो', +'sp-contributions-uploads' => 'उर्ध्वभरणहरु', +'sp-contributions-logs' => 'लगहरु', +'sp-contributions-talk' => 'वार्ता', +'sp-contributions-userrights' => 'प्रयोगकर्ता अधिकार व्यवस्थापन', +'sp-contributions-blocked-notice' => 'यो प्रयोगकर्तालाई अहिले रोक लगाइएको छ। +नवीनतम रोकाइ गरेको लग प्रविष्टि सन्दर्भको निम्ति तल दिएकोछ:', +'sp-contributions-blocked-notice-anon' => 'यो IP ठेगानालाई अहिले रोक लगाइएको छ। नवीनतम रोकाइ गरेको लग प्रविष्टि सन्दर्भको निम्ति तल दिएकोछ:', -'sp-contributions-search' => 'योगदानहरु खोज्नुहोस्', -'sp-contributions-username' => 'IP ठेगाना वा प्रयोगकर्ता नाम :', -'sp-contributions-submit' => 'खोज', +'sp-contributions-search' => 'योगदानहरु खोज्नुहोस्', +'sp-contributions-username' => 'IP ठेगाना वा प्रयोगकर्ता नाम :', +'sp-contributions-toponly' => 'नवीनतम संशोधनका सम्पादनहरु देखाउनुहोस्', +'sp-contributions-submit' => 'खोज', # What links here 'whatlinkshere' => 'यहाँ के जोडिन्छ', @@ -1985,7 +2053,6 @@ $3द्वारा $1को ($4को समय $5 मा) मेटाइए 'ipb-edit-dropdown' => 'निषेध कारण सम्पादन गर्नुहोस्', 'ipb-unblock-addr' => '$1 निषेध खारेज गर्ने', 'ipb-unblock' => 'प्रयोगकर्ता वा IP माथिको निषेध खारेज गर्ने', -'ipb-blocklist-addr' => '$1माथि रहेका निषेधहरु', 'ipb-blocklist' => 'हाल रहेका निषेधहरु हेर्नुहोस्', 'ipb-blocklist-contribs' => '$1 को लागि योगदान', 'unblockip' => 'प्रयोगकर्ताको निषेध खारेज गर्नुहोस्', @@ -2049,6 +2116,7 @@ $1लाई अघिबाट नैं प्रतिबन्ध लगा 'proxyblocker' => 'प्रोक्सी निषेध गर्ने', 'proxyblocker-disabled' => 'यो कार्य निष्कृय पारिएको छ।', 'proxyblocksuccess' => 'सकियो.', +'ipbblocked' => 'तपाईंले अरु प्रयोगकर्ताहरुलाई प्रतिबन्धित गर्न वा उनीहरुको प्रतिबन्ध खोल्न सक्नुहुन्न किनभनें तपाईं आफैं प्रतिबन्धित हुनुहुन्छ।', # Developer tools 'lockdb' => 'डेटाबेस ताल्चामार्ने', @@ -2266,6 +2334,8 @@ $1लाई अघिबाट नैं प्रतिबन्ध लगा 'tooltip-rollback' => '"पूर्वरुप" ले यो पृष्ठको सम्पादन(हरु) खारेज गरी पृष्ठलाई पछिल्लो सम्पादनमा एक क्लिकमा पुर्‍याइ दिन्छ', 'tooltip-undo' => '"रद्द"ले पछिल्लो सम्पादन खारेज गरी पूर्वावलोकनमा देखाउँछ । यसले सारांशमा कारण राख्न दिनेछ।', +'tooltip-preferences-save' => 'अभिरुचिहरु संग्रह गर्नुहोस्', +'tooltip-summary' => 'छोटो सारांश हाल्नुहोस्', # Attribution 'siteuser' => '{{SITENAME}} प्रयोगकर्ता $1', @@ -2329,13 +2399,16 @@ $1लाई अघिबाट नैं प्रतिबन्ध लगा # Media information 'thumbsize' => 'थम्बनेल आकार:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|पृष्ठ|पृष्ठहरु}}', -'file-info' => 'पूरा गर्नका लागि फाइल सञ्चालन प्रकार', -'file-info-size' => '($1 × $2 पिक्सेलहरु, फाइल आकार: $3, MIME प्रकार: $4)', +'file-info' => 'फाइल आकार: $1, MIME प्रकार: $2', +'file-info-size' => '$1 × $2 पिक्सेलहरु, फाइल आकार: $3, MIME प्रकार: $4', 'file-nohires' => 'उच्च रिजोल्युशन अनुपलब्ध', -'svg-long-desc' => '(SVG फाइल,साधारण $1 × $2 पिक्सेलहरु, फाइल आकार: $3)', +'svg-long-desc' => 'SVG फाइल,साधारण $1 × $2 पिक्सेलहरु, फाइल आकार: $3', 'show-big-image' => 'पूरा रिजोल्युशन', 'show-big-image-thumb' => 'यस पूर्वावलोकनको आकार : $1 × $2 पिक्सल', 'file-info-gif-frames' => '$1 {{PLURAL:$1|फ्रेम|फ्रेमहरु}}', +'file-info-png-looped' => 'ग़ाँठो परेको', +'file-info-png-repeat' => '$1 {{PLURAL:$1|पल्ट|पल्ट}} खेलियो', +'file-info-png-frames' => '$1 {{PLURAL:$1|फ्रेम|फ्रेमहरु}}', # Special:NewFiles 'newimages' => 'नयाँ फाइलहरुको ग्यालरी', @@ -2395,8 +2468,8 @@ $1लाई अघिबाट नैं प्रतिबन्ध लगा 'exif-colorspace' => 'वर्ण स्थान', 'exif-componentsconfiguration' => 'प्रत्येक घटकको अर्थ', 'exif-compressedbitsperpixel' => 'चित्र सम्पीडन मोड', -'exif-pixelydimension' => 'चित्रको मान्य चौड़ाई', -'exif-pixelxdimension' => 'चित्रको मान्य उचाई', +'exif-pixelydimension' => 'चित्रको चौड़ाई', +'exif-pixelxdimension' => 'चित्रको उचाई', 'exif-usercomment' => 'प्रयोगकर्ताका टिप्पणखरु:', 'exif-relatedsoundfile' => 'सम्बन्धित अडियो फाइल', 'exif-datetimeoriginal' => 'डेटा सञ्चालनको मिति र समय', @@ -2408,15 +2481,18 @@ $1लाई अघिबाट नैं प्रतिबन्ध लगा 'exif-spectralsensitivity' => 'वर्णक्रमीय संवेदनशीलता', 'exif-isospeedratings' => 'आईएसओ गति रेटिंग', 'exif-oecf' => 'Optoelectronic रूपांतरण कारक', -'exif-shutterspeedvalue' => 'शटरको गति', -'exif-aperturevalue' => 'छिंड़', -'exif-brightnessvalue' => 'चमक', +'exif-shutterspeedvalue' => 'APEX शटरको गति', +'exif-aperturevalue' => 'APEX छिंड़', +'exif-brightnessvalue' => 'APEX चमक', 'exif-exposurebiasvalue' => 'एक्सपोजर पूर्वाग्रह', 'exif-maxaperturevalue' => 'अधिकतम एपर्चर भूमि', +'exif-subjectdistance' => 'विषय दूरी', 'exif-meteringmode' => 'Metering मोड', 'exif-lightsource' => 'प्रकाश स्रोत', +'exif-flash' => 'झिल्को(फ्लास)', 'exif-focallength' => 'लेंस फोकल लम्बाई', 'exif-subjectarea' => 'विषय क्षेत्र', +'exif-flashenergy' => 'फ्ल्यास ऊर्जा', 'exif-spatialfrequencyresponse' => 'स्थानिक आवृत्ति प्रतिक्रिया', 'exif-focalplanexresolution' => 'फोकल विमान एक्स संकल्प', 'exif-focalplaneyresolution' => 'फोकल प्लेन वाई रिजोलुसन', @@ -2444,6 +2520,7 @@ $1लाई अघिबाट नैं प्रतिबन्ध लगा 'exif-gpslongitude' => 'देशान्तर', 'exif-gpsaltituderef' => 'ऊंचाई संदर्भ', 'exif-gpsaltitude' => 'उँचाई', +'exif-gpstimestamp' => 'GPS समय (स्वचालित घड़ी)', 'exif-gpssatellites' => 'नाप्नकोलागि प्रयोग गरिएका उपग्रहहरु', 'exif-gpsstatus' => 'रिसिभर अवस्था', 'exif-gpsmeasuremode' => 'माप मोड', @@ -2459,6 +2536,7 @@ $1लाई अघिबाट नैं प्रतिबन्ध लगा 'exif-gpsareainformation' => 'जीपीएस क्षेत्रको नाम', 'exif-gpsdatestamp' => 'जी पी एस मिति', 'exif-gpsdifferential' => 'जीपीएस अंतर सुधार', +'exif-objectname' => 'छोटो शीर्षक', 'exif-unknowndate' => 'अज्ञात मिति', @@ -2592,12 +2670,12 @@ $1लाई अघिबाट नैं प्रतिबन्ध लगा 'limitall' => 'सबै', # E-mail address confirmation -'confirmemail' => 'इमेल ठेगाना पक्का गर्नुहोस्', -'confirmemail_send' => 'यकिन कोड मेल गर्नुहोस', -'confirmemail_sent' => 'यकिन इमेल पठाइयो ।', -'confirmemail_error' => 'तपाईंको निश्चयलाई संग्रह गर्दा केहि त्रुटि भएकोछ।', -'confirmemail_subject' => '{{SITENAME}} ई मेलl ठेगानाको पुष्टि', -'confirmemail_body' => 'कसैले, सायद तपाईंले, आई पी ठेगाना $1बाट, +'confirmemail' => 'इमेल ठेगाना पक्का गर्नुहोस्', +'confirmemail_send' => 'यकिन कोड मेल गर्नुहोस', +'confirmemail_sent' => 'यकिन इमेल पठाइयो ।', +'confirmemail_error' => 'तपाईंको निश्चयलाई संग्रह गर्दा केहि त्रुटि भएकोछ।', +'confirmemail_subject' => '{{SITENAME}} ई मेलl ठेगानाको पुष्टि', +'confirmemail_body' => 'कसैले, सायद तपाईंले, आई पी ठेगाना $1बाट, {{SITENAME}}मा एउटा खाता "$2"को नाममा यस ई मेल ठेगानामा पञ्जीकरण गरेकोछ। यो खाता साँच्ची नैं तपाईंको हो भनेर पुष्टि गर्न र {{SITENAME}}मा यो ई मेलका सुविधाहरु सक्रिय गर्न तपाईंको ब्राउजरमा यो लिंक खोल्नुहोस्: @@ -2609,8 +2687,32 @@ $3 $5 यो पुष्टिकरणको समय $4 मा सकिनेछ।', -'confirmemail_invalidated' => 'ई मेल ठेगाना रद्द भएको पुष्टिकरण', -'invalidateemail' => 'इमेल यकिन कार्य रद्द गर्नुहोस्', +'confirmemail_body_changed' => 'कसैले, सायद तपाईंले, आई पी ठेगाना $1बाट, +{{SITENAME}}मा "$2" नामको खाताको ई मेल ठेगाना यस ठेगानामा परिवर्तन गरेकोछ। + +यो खाता साँच्ची नैं तपाईंको हो भनेर पुष्टि गर्न र {{SITENAME}}मा यो ई मेलका सुविधाहरु पुनः सक्रिय गर्न तपाईंको ब्राउजरमा यो लिंक खोल्नुहोस्: + +$3 + +यदि त्यो खाता तपाईंको *होइन* भनें, ई मेल ठेगानाको पुष्टिकरण रद्द गर्न यो लिंक पहिल्याउनुहोस्: + +$5 + +यो पुष्टिकरणको समय $4 मा सकिनेछ।', +'confirmemail_body_set' => 'कसैले, सायद तपाईंले, आई पी ठेगाना $1बाट, +{{SITENAME}}मा "$2" नामको खाताको ई मेल ठेगाना यस ठेगानासित जोड़ेकोछ। + +यो खाता साँच्ची नैं तपाईंको हो भनेर पुष्टि गर्न र {{SITENAME}}मा यो ई मेलका सुविधाहरु पुनः सक्रिय गर्न तपाईंको ब्राउजरमा यो लिंक खोल्नुहोस्: + +$3 + +यदि त्यो खाता तपाईंको *होइन* भनें, ई मेल ठेगानाको पुष्टिकरण रद्द गर्न यो लिंक पहिल्याउनुहोस्: + +$5 + +यो पुष्टिकरणको समय $4 मा सकिनेछ।', +'confirmemail_invalidated' => 'ई मेल ठेगाना रद्द भएको पुष्टिकरण', +'invalidateemail' => 'इमेल यकिन कार्य रद्द गर्नुहोस्', # Scary transclusion 'scarytranscludedisabled' => '[अन्तरविकि दस्तावेज अन्तरकरण निस्क्रिय]', @@ -2646,6 +2748,7 @@ $1', 'table_pager_first' => 'प्रथम पृष्ठ', 'table_pager_last' => 'अन्तिम पृष्ठ', 'table_pager_limit' => 'प्रतिपृष्ठ $1 वस्तुहरु देखाउने', +'table_pager_limit_label' => 'प्रति पृष्ठ सामग्री:', 'table_pager_limit_submit' => 'जाउ', 'table_pager_empty' => 'नतिजाहरु छैन ।', @@ -2743,6 +2846,13 @@ $1', 'tags-edit' => 'सम्पादन गर्नुहोस्', 'tags-hitcount' => '$1 {{PLURAL:$1|परिवर्तन|परिवर्तनहरु}}', +# Special:ComparePages +'compare-page1' => 'पृष्ठ 1', +'compare-page2' => 'पृष्ठ 2', +'compare-rev1' => 'संशोधन 1', +'compare-rev2' => 'संशोधन 2', +'compare-submit' => 'दँजाउनुहोस्', + # Database error messages 'dberr-header' => 'यो विकिमा समस्या छ', 'dberr-problems' => 'क्षमा पाउँ! @@ -2750,6 +2860,7 @@ $1', 'dberr-info' => '(डेटाबेस सर्वर $1सित सम्पर्क साध्न सकिंदैन)', # HTML forms +'htmlform-required' => 'यसको मूल्य(value) चाहिन्छ', 'htmlform-submit' => 'बुझाउने', 'htmlform-reset' => 'परिवर्तनहरू परित्याग गर्नुहोस्', 'htmlform-selectorother-other' => 'अन्य', diff --git a/languages/messages/MessagesNew.php b/languages/messages/MessagesNew.php index c7150ae5..4130872f 100644 --- a/languages/messages/MessagesNew.php +++ b/languages/messages/MessagesNew.php @@ -55,8 +55,7 @@ $messages = array( 'tog-editsection' => '[सम्पादन] लिङ्कं सेक्सन सम्पादन यायेज्युगु यानादिसँ', 'tog-editsectiononrightclick' => 'सेक्सनया छ्यँआखले राइट क्लिक याना सेक्सन सम्पादन यायेज्युगु यानादिसँ (जाभास्क्रिप्ट)', 'tog-showtoc' => 'कन्टेण्टया धलः क्यनादिसँ (३गु स्वया अप्व शिर्षक दुगु पौया निंति)', -'tog-rememberpassword' => 'जिगु लग इन थ्व कम्प्युतरय् लुमंकादिसँ', -'tog-editwidth' => 'सम्पादन सन्दुकया ब्याः जायेधुंकल', +'tog-rememberpassword' => 'जिगु लग इन थ्व कम्प्युतरय् लुमंकादिसँ (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'जिं देकागु / न्ह्यथनागु पौयात जिगु दृष्टिधलः(watchlist)य् तयादिसँ', 'tog-watchdefault' => 'जिं सम्पादन यानागु पौयात जिगु वाचलिस्टय् तयादिसँ', 'tog-watchmoves' => 'जिं संकागु (move) पौयात जिगु वाचलिस्टय् तयादिसँ', diff --git a/languages/messages/MessagesNiu.php b/languages/messages/MessagesNiu.php index 607d2e00..ee194ecc 100644 --- a/languages/messages/MessagesNiu.php +++ b/languages/messages/MessagesNiu.php @@ -101,7 +101,7 @@ Ua nimo ke hiki e haau tau manako {{SITENAME}}.', 'yourname' => 'Matahigoa he tagata:', 'yourpassword' => 'Kupu fufu:', 'yourpasswordagain' => 'Liu lolomi e kupu fufu:', -'remembermypassword' => 'Manatu e haaku loko ini', +'remembermypassword' => 'Manatu e haaku loko ini (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'Hu ki loto', 'nav-login-createaccount' => 'Hu ki loto / talaga e poko', 'userlogin' => 'Hu ki loto / talaga e poko', diff --git a/languages/messages/MessagesNl.php b/languages/messages/MessagesNl.php index f80b9eb8..a3bb15a8 100644 --- a/languages/messages/MessagesNl.php +++ b/languages/messages/MessagesNl.php @@ -8,6 +8,7 @@ * @file * * @author Annabel + * @author DasRakel * @author Effeietsanders * @author Erwin * @author Erwin85 @@ -18,6 +19,7 @@ * @author Hamaryns * @author Jens Liebenau * @author Krinkle + * @author MarkvA * @author McDutchie * @author Multichill * @author Mwpnl @@ -34,7 +36,7 @@ * @author לערי ריינהארט */ -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $namespaceNames = array( NS_MEDIA => 'Media', @@ -136,6 +138,7 @@ $magicWords = array( 'subjectpagenamee' => array( '1', 'ONDERWERPPAGINANAAME', 'ARTIKELPAGINANAAME', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ), 'msg' => array( '0', 'BERICHT:', 'MSG:' ), 'subst' => array( '0', 'VERV:', 'SUBST:' ), + 'safesubst' => array( '0', 'VEILIGVERV:', 'SAFESUBST:' ), 'msgnw' => array( '0', 'BERICHTNW', 'MSGNW:' ), 'img_thumbnail' => array( '1', 'miniatuur', 'thumbnail', 'thumb' ), 'img_manualthumb' => array( '1', 'miniatuur=$1', 'thumbnail=$1', 'thumb=$1' ), @@ -159,6 +162,7 @@ $magicWords = array( 'ns' => array( '0', 'NR:', 'NS:' ), 'localurl' => array( '0', 'LOKALEURL', 'LOCALURL:' ), 'localurle' => array( '0', 'LOKALEURLE', 'LOCALURLE:' ), + 'articlepath' => array( '0', 'ARTIKELPAD', 'ARTICLEPATH' ), 'servername' => array( '0', 'SERVERNAAM', 'SERVERNAME' ), 'scriptpath' => array( '0', 'SCRIPTPAD', 'SCRIPTPATH' ), 'stylepath' => array( '0', 'STIJLPAD', 'STYLEPATH' ), @@ -174,6 +178,7 @@ $magicWords = array( 'revisionday' => array( '1', 'VERSIEDAG', 'REVISIONDAY' ), 'revisionday2' => array( '1', 'VERSIEDAG2', 'REVISIONDAY2' ), 'revisionmonth' => array( '1', 'VERSIEMAAND', 'REVISIONMONTH' ), + 'revisionmonth1' => array( '1', 'VERSIEMAAND1', 'REVISIONMONTH1' ), 'revisionyear' => array( '1', 'VERSIEJAAR', 'REVISIONYEAR' ), 'revisiontimestamp' => array( '1', 'VERSIETIJD', 'REVISIONTIMESTAMP' ), 'revisionuser' => array( '1', 'VERSIEGEBRUIKER', 'REVISIONUSER' ), @@ -181,14 +186,14 @@ $magicWords = array( 'fullurl' => array( '0', 'VOLLEDIGEURL', 'FULLURL:' ), 'fullurle' => array( '0', 'VOLLEDIGEURLE', 'FULLURLE:' ), 'lcfirst' => array( '0', 'KLEERSTE:', 'LCFIRST:' ), - 'ucfirst' => array( '0', 'GLEERSTE:', 'UCFIRST:' ), + 'ucfirst' => array( '0', 'GLEERSTE:', 'HLEERSTE:', 'UCFIRST:' ), 'lc' => array( '0', 'KL:', 'LC:' ), 'uc' => array( '0', 'HL:', 'UC:' ), 'raw' => array( '0', 'RAUW:', 'RUW:', 'RAW:' ), 'displaytitle' => array( '1', 'TOONTITEL', 'TITELTONEN', 'DISPLAYTITLE' ), 'rawsuffix' => array( '1', 'V', 'R' ), 'newsectionlink' => array( '1', '__NIEUWESECTIELINK__', '__NIEUWESECTIEKOPPELING__', '__NEWSECTIONLINK__' ), - 'nonewsectionlink' => array( '1', '__GEENNIEUWKOPJEVERWIJZING__', '__NONEWSECTIONLINK__' ), + 'nonewsectionlink' => array( '1', '__GEENNIEUWESECTIELINK__', '__GEENNIEUWKOPJEVERWIJZING__', '__NONEWSECTIONLINK__' ), 'currentversion' => array( '1', 'HUIDIGEVERSIE', 'CURRENTVERSION' ), 'urlencode' => array( '0', 'URLCODEREN', 'CODEERURL', 'URLENCODE:' ), 'anchorencode' => array( '0', 'ANKERCODEREN', 'CODEERANKER', 'ANCHORENCODE' ), @@ -214,6 +219,8 @@ $magicWords = array( 'staticredirect' => array( '1', '__STATISCHEDOORVERWIJZING__', '__STATISCHEREDIRECT__', '__STATICREDIRECT__' ), 'protectionlevel' => array( '1', 'BEVEILIGINGSNIVEAU', 'PROTECTIONLEVEL' ), 'formatdate' => array( '0', 'datumopmaak', 'formatdate', 'dateformat' ), + 'url_path' => array( '0', 'PAD', 'PATH' ), + 'url_query' => array( '0', 'ZOEKOPDRACHT', 'QUERY' ), ); $specialPageAliases = array( @@ -227,6 +234,7 @@ $specialPageAliases = array( 'Watchlist' => array( 'Volglijst' ), 'Recentchanges' => array( 'RecenteWijzigingen' ), 'Upload' => array( 'Uploaden' ), + 'UploadStash' => array( 'TijdelijkeUpload' ), 'Listfiles' => array( 'Bestandenlijst', 'Afbeeldingenlijst' ), 'Newimages' => array( 'NieuweBestanden', 'NieuweAfbeeldingen' ), 'Listusers' => array( 'Gebruikerslijst', 'Gebruikerlijst' ), @@ -259,8 +267,9 @@ $specialPageAliases = array( 'Protectedpages' => array( 'BeveiligdePaginas', 'BeveiligdePagina\'s', 'BeschermdePaginas', 'BeschermdePagina’s', 'BeschermdePagina\'s' ), 'Protectedtitles' => array( 'BeveiligdeTitels', 'BeschermdeTitels' ), 'Allpages' => array( 'AllePaginas', 'AllePagina’s', 'AllePagina\'s' ), - 'Prefixindex' => array( 'Voorvoegselindex', 'Prefixindex' ), + 'Prefixindex' => array( 'Voorvoegselindex' ), 'Ipblocklist' => array( 'Blokkeerlijst', 'IP-blokkeerlijst', 'IPblokkeerlijst', 'IpBlokkeerlijst' ), + 'Unblock' => array( 'Deblokkeren' ), 'Specialpages' => array( 'SpecialePaginas', 'SpecialePagina’s', 'SpecialePagina\'s' ), 'Contributions' => array( 'Bijdragen' ), 'Emailuser' => array( 'GebruikerE-mailen', 'E-mailGebruiker' ), @@ -291,6 +300,8 @@ $specialPageAliases = array( 'Mypage' => array( 'MijnPagina' ), 'Mytalk' => array( 'MijnOverleg' ), 'Mycontributions' => array( 'MijnBijdragen' ), + 'Myuploads' => array( 'MijnUploads' ), + 'PermanentLink' => array( 'PermanenteVerwijzing' ), 'Listadmins' => array( 'Beheerderlijst', 'Administratorlijst', 'Adminlijst', 'Beheerderslijst' ), 'Listbots' => array( 'Botlijst', 'Lijstbots' ), 'Popularpages' => array( 'PopulairePaginas', 'PopulairePagina’s', 'PopulairePagina\'s' ), @@ -305,6 +316,9 @@ $specialPageAliases = array( 'DeletedContributions' => array( 'VerwijderdeBijdragen' ), 'Tags' => array( 'Labels' ), 'Activeusers' => array( 'ActieveGebruikers' ), + 'ComparePages' => array( 'PaginasVergelijken', 'Pagina\'sVergelijken' ), + 'Badtitle' => array( 'OnjuisteNaam' ), + 'DisableAccount' => array( 'GebruikerUitschakelen' ), ); $linkTrail = '/^([a-zäöüïëéèà]+)(.*)$/sDu'; @@ -325,8 +339,7 @@ $messages = array( 'tog-editsection' => 'Bewerken van deelpagina’s mogelijk maken via [bewerken]-koppelingen', 'tog-editsectiononrightclick' => 'Bewerken van deelpagina’s mogelijk maken met een rechtermuisklik op een tussenkop (vereist JavaScript)', 'tog-showtoc' => 'Inhoudsopgave weergeven (voor pagina’s met minstens 3 tussenkoppen)', -'tog-rememberpassword' => 'Aanmeldgegevens onthouden', -'tog-editwidth' => 'Bewerkingsveld over volle breedte van het scherm weergeven', +'tog-rememberpassword' => 'Aanmeldgegevens onthouden (maximaal $1 {{PLURAL:$1|dag|dagen}})', 'tog-watchcreations' => 'Pagina’s die ik aanmaak automatisch volgen', 'tog-watchdefault' => 'Pagina’s die ik bewerk automatisch volgen', 'tog-watchmoves' => 'Pagina’s die ik hernoem automatisch volgen', @@ -473,31 +486,21 @@ $messages = array( 'faqpage' => 'Project:Veelgestelde vragen', # Vector skin -'vector-action-addsection' => 'Kopje toevoegen', -'vector-action-delete' => 'Verwijderen', -'vector-action-move' => 'Hernoemen', -'vector-action-protect' => 'Beveiligen', -'vector-action-undelete' => 'Terugplaatsen', -'vector-action-unprotect' => 'Beveiliging opheffen', -'vector-namespace-category' => 'Categorie', -'vector-namespace-help' => 'Hulppagina', -'vector-namespace-image' => 'Bestand', -'vector-namespace-main' => 'Pagina', -'vector-namespace-media' => 'Mediapagina', -'vector-namespace-mediawiki' => 'Bericht', -'vector-namespace-project' => 'Projectpagina', -'vector-namespace-special' => 'Speciale pagina', -'vector-namespace-talk' => 'Overleg', -'vector-namespace-template' => 'Sjabloon', -'vector-namespace-user' => 'Gebruikerspagina', -'vector-view-create' => 'Aanmaken', -'vector-view-edit' => 'Bewerken', -'vector-view-history' => 'Geschiedenis bekijken', -'vector-view-view' => 'Lezen', -'vector-view-viewsource' => 'Brontekst bekijken', -'actions' => 'Handelingen', -'namespaces' => 'Naamruimten', -'variants' => 'Varianten', +'vector-action-addsection' => 'Kopje toevoegen', +'vector-action-delete' => 'Verwijderen', +'vector-action-move' => 'Hernoemen', +'vector-action-protect' => 'Beveiligen', +'vector-action-undelete' => 'Terugplaatsen', +'vector-action-unprotect' => 'Beveiliging opheffen', +'vector-simplesearch-preference' => 'Verbeterde zoeksuggesties inschakelen (alleen voor het uiterlijk Vector)', +'vector-view-create' => 'Aanmaken', +'vector-view-edit' => 'Bewerken', +'vector-view-history' => 'Geschiedenis bekijken', +'vector-view-view' => 'Lezen', +'vector-view-viewsource' => 'Brontekst bekijken', +'actions' => 'Handelingen', +'namespaces' => 'Naamruimten', +'variants' => 'Varianten', 'errorpagetitle' => 'Fout', 'returnto' => 'Ga naar $1.', @@ -558,6 +561,9 @@ Te veel gebruikers proberen deze pagina te bekijken. Wacht alstublieft even voordat u opnieuw toegang probeert te krijgen tot deze pagina. $1', +'pool-timeout' => 'De maximaal te wachten tijd voor het wachten op een lock is verstreken', +'pool-queuefull' => 'De wachtrij van de poel is vol', +'pool-errorunknown' => 'Er is een onbekende fout opgetreden', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Over {{SITENAME}}', @@ -729,7 +735,8 @@ Vergeet niet uw [[Special:Preferences|voorkeuren voor {{SITENAME}}]] aan te pass 'yourname' => 'Gebruikersnaam:', 'yourpassword' => 'Wachtwoord:', 'yourpasswordagain' => 'Geef uw wachtwoord opnieuw in:', -'remembermypassword' => 'Aanmeldgegevens onthouden', +'remembermypassword' => 'Aanmeldgegevens onthouden (maximaal $1 {{PLURAL:$1|dag|dagen}})', +'securelogin-stick-https' => 'Verbonden blijven via HTTPS na aanmelden', 'yourdomainname' => 'Uw domein:', 'externaldberror' => 'Er is een fout opgetreden bij het aanmelden bij de database of u hebt geen toestemming uw externe gebruiker bij te werken.', 'login' => 'Aanmelden', @@ -746,6 +753,7 @@ Vergeet niet uw [[Special:Preferences|voorkeuren voor {{SITENAME}}]] aan te pass 'gotaccount' => "Hebt u al een gebruikersnaam? '''$1'''.", 'gotaccountlink' => 'Aanmelden', 'createaccountmail' => 'Per e-mail', +'createaccountreason' => 'Reden:', 'badretype' => 'De ingevoerde wachtwoorden verschillen van elkaar.', 'userexists' => 'De gekozen gebruikersnaam is al in gebruik. Kies een andere naam.', @@ -774,6 +782,7 @@ Probeer het opnieuw.', Probeer het opnieuw.', 'passwordtooshort' => 'Wachtwoorden moeten uit minstens {{PLURAL:$1|$1 teken|$1 tekens}} bestaan.', 'password-name-match' => 'Uw wachtwoord en uw gebruikersnaam mogen niet overeenkomen.', +'password-login-forbidden' => 'Het gebruik van deze gebruikersnaam met dit wachtwoord is niet toegestaan.', 'mailmypassword' => 'Nieuw wachtwoord e-mailen', 'passwordremindertitle' => 'Nieuw tijdelijk wachtwoord voor {{SITENAME}}', 'passwordremindertext' => 'Iemand, waarschijnlijk u, heeft vanaf IP-adres $1 een verzoek @@ -821,6 +830,9 @@ Wacht even voordat u het opnieuw probeert.', 'loginlanguagelabel' => 'Taal: $1', 'suspicious-userlogout' => 'Uw verzoek om af te melden is genegeerd, omdat het lijkt alsof het verzoek is verzonden door een browser of cacheproxy die stuk is.', +# E-mail sending +'php-mail-error-unknown' => 'Er is een onbekende fout opgetreden in de mail()-functie van PHP', + # Password reset dialog 'resetpass' => 'Wachtwoord wijzigen', 'resetpass_announce' => 'U bent aangemeld met een tijdelijke code die u per e-mail is toegezonden. @@ -875,11 +887,13 @@ Mogelijk hebt u uw wachtwoord al gewijzigd of een nieuw tijdelijk wachtwoord aan 'showdiff' => 'Wijzigingen bekijken', 'anoneditwarning' => "'''Waarschuwing:''' u bent niet aangemeld. Uw IP-adres wordt opgeslagen als u wijzigingen op deze pagina maakt.", +'anonpreviewwarning' => "''U bent niet aangemeld.'' +''Door uw bewerking op te slaan wordt uw IP-adres opgeslagen in de paginageschiedenis.''", 'missingsummary' => "'''Herinnering:''' u hebt geen samenvatting opgegeven voor uw bewerking. Als u nogmaals op ''Pagina opslaan'' klikt wordt de bewerking zonder samenvatting opgeslagen.", 'missingcommenttext' => 'Plaats uw opmerking hieronder.', 'missingcommentheader' => "'''Let op:''' U hebt geen onderwerp/kop voor deze opmerking opgegeven. -Als u opnieuw op \"opslaan\" klikt, wordt uw wijziging zonder een onderwerp/kop opgeslagen.", +Als u opnieuw op \"{{int:savearticle}}\" klikt, wordt uw wijziging zonder een onderwerp/kop opgeslagen.", 'summary-preview' => 'Samenvatting nakijken:', 'subject-preview' => 'Nakijken onderwerp/kop:', 'blockedtitle' => 'Gebruiker is geblokkeerd', @@ -956,8 +970,12 @@ De laatste regel uit het blokkeerlogboek wordt hieronder ter referentie weergege '''Deze is nog niet opgeslagen!'''", 'userjspreview' => "'''Let op: u test nu uw persoonlijke JavaScript.''' '''De pagina is niet opgeslagen!'''", +'sitecsspreview' => "'''Dit is alleen een voorvertoning van de CSS.''' +'''Deze is nog niet opgeslagen!'''", +'sitejspreview' => "'''Dit is alleen een voorvertoning van de JavaScriptcode.''' +'''Deze is nog niet opgeslagen!'''", 'userinvalidcssjstitle' => "'''Waarschuwing:''' er is geen skin \"\$1\". -Let op: uw eigen .css- en .js-pagina's beginnen met een kleine letter, bijvoorbeeld {{ns:user}}:Naam/monobook.css in plaats van {{ns:user}}:Naam/Monobook.css.", +Let op: uw eigen .css- en .js-pagina's beginnen met een kleine letter, bijvoorbeeld {{ns:user}}:Naam/vector.css in plaats van {{ns:user}}:Naam/Vector.css.", 'updated' => '(Bijgewerkt)', 'note' => "'''Opmerking:'''", 'previewnote' => "'''Let op: dit is een controlepagina; uw tekst is niet opgeslagen!'''", @@ -999,8 +1017,6 @@ Hierbij belooft u ons tevens dat u deze tekst zelf hebt geschreven of overgenome Als u niet wilt dat uw teksten rigoureus aangepast worden door anderen, plaats ze hier dan niet.
    U belooft ook dat u de oorspronkelijke auteur bent van dit materiaal of dat u het hebt gekopieerd uit een bron in het publieke domein of een soortgelijke vrije bron (zie $1 voor details). '''GEBRUIK GEEN MATERIAAL DAT BESCHERMD WORDT DOOR AUTEURSRECHT, TENZIJ U DAARVOOR TOESTEMMING HEBT!'''", -'longpagewarning' => "'''WAARSCHUWING: Deze pagina is $1 kilobyte groot; sommige browsers hebben problemen met het bewerken van pagina's die groter zijn dan 32 kilobyte. -Wellicht kan deze pagina gesplitst worden in kleinere delen.'''", 'longpageerror' => "'''FOUT: de tekst die u hebt toegevoegd is $1 kilobyte groot, wat groter is dan het maximum van $2 kilobyte. Opslaan is niet mogelijk.'''", 'readonlywarning' => "'''WAARSCHUWING: De database is geblokkeerd voor bewerkingen, waarschijnlijk voor regulier databaseonderhoud, dus u kunt deze nu niet opslaan. @@ -1173,7 +1189,7 @@ Andere beheerders van {{SITENAME}} kunnen de verborgen inhoud benaderen en de ve 'revdelete-unsuppress' => 'Beperkingen op teruggezette wijzigingen verwijderen', 'revdelete-log' => 'Reden:', 'revdelete-submit' => 'Toepassen op de geselecteerde {{PLURAL:$1|bewerking|bewerkingen}}', -'revdelete-logentry' => 'zichtbaarheid van bewerkingen is gewijzigd voor [[$1]]', +'revdelete-logentry' => 'heeft zichtbaarheid van bewerkingen voor [[$1]] gewijzigd', 'logdelete-logentry' => 'wijzigde zichtbaarheid van gebeurtenis [[$1]]', 'revdelete-success' => "'''De zichtbaarheid van de wijziging is bijgewerkt.'''", 'revdelete-failure' => "'''De zichtbaarheid van de wijziging kon niet bijgewerkt worden:''' @@ -1182,6 +1198,8 @@ $1", 'logdelete-failure' => "'''De zichtbaarheid van de logboekregel kon niet ingesteld worden:''' $1", 'revdel-restore' => 'Zichtbaarheid wijzigen', +'revdel-restore-deleted' => 'verwijderde versies', +'revdel-restore-visible' => 'zichtbare versies', 'pagehist' => 'paginageschiedenis', 'deletedhist' => 'verwijderde geschiedenis', 'revdelete-content' => 'inhoud', @@ -1252,11 +1270,13 @@ Let op dat het gebruiken van de navigatieverwijzingen deze kolom opnieuw instelt # Diffs 'history-title' => 'Geschiedenis van "$1"', 'difference' => '(Verschil tussen bewerkingen)', +'difference-multipage' => "(Verschil tussen pagina's)", 'lineno' => 'Regel $1:', 'compareselectedversions' => 'Aangevinkte versies vergelijken', 'showhideselectedversions' => 'Geselecteerde versies weergeven/verbergen', 'editundo' => 'ongedaan maken', -'diff-multi' => '({{PLURAL:$1|Eén tussenliggende versie wordt|$1 tussenliggende versies worden}} niet weergegeven)', +'diff-multi' => '({{PLURAL:$1|Eén tussenliggende versie|$1 tussenliggende versies}} door {{PLURAL:$2|één gebruiker|$2 gebruikers}} {{PLURAL:$1|wordt|worden}} niet weergegeven)', +'diff-multi-manyusers' => '($1 tussenliggende versies door meer dan $2 gebruikers worden niet weergegeven)', # Search results 'searchresults' => 'Zoekresultaten', @@ -1292,6 +1312,7 @@ Probeer een andere zoekopdracht.', 'searchprofile-everything-tooltip' => "Alle inhoud doorzoeken (inclusief overlegpagina's)", 'searchprofile-advanced-tooltip' => 'Zoeken in aangegeven naamruimten', 'search-result-size' => '$1 ({{PLURAL:$2|1 woord|$2 woorden}})', +'search-result-category-size' => '{{PLURAL:$1|1 categorielid|$1 categorieleden}} ({{PLURAL:$2|1 ondercategorie|$2 ondercategorieën}}, {{PLURAL:$3|1 bestand|$3 bestanden}})', 'search-result-score' => 'Relevantie: $1%', 'search-redirect' => '(doorverwijzing $1)', 'search-section' => '(subkop $1)', @@ -1370,6 +1391,7 @@ De gegevens over {{SITENAME}} zijn mogelijk niet bijgewerkt.', 'contextlines' => 'Regels per resultaat:', 'contextchars' => 'Context per regel:', 'stub-threshold' => 'Drempel voor markering als beginnetje:', +'stub-threshold-disabled' => 'Uitgeschakeld', 'recentchangesdays' => 'Aantal dagen weer te geven in de recente wijzigingen:', 'recentchangesdays-max' => '(maximaal $1 {{PLURAL:$1|dag|dagen}})', 'recentchangescount' => 'Standaard aantal weer te geven bewerkingen:', @@ -1403,6 +1425,7 @@ Hier volgt een willekeurig gegenereerde waarde die u kunt gebruiken: $1', 'prefs-files' => 'Bestanden', 'prefs-custom-css' => 'persoonlijke CSS', 'prefs-custom-js' => 'persoonlijke JS', +'prefs-common-css-js' => 'Gedeelde CSS/JS voor elke vormgeving:', 'prefs-reset-intro' => 'Gebruik deze functie om uw voorkeuren te herstellen naar de standaardinstellingen. Deze handeling kan niet ongedaan gemaakt worden.', 'prefs-emailconfirm-label' => 'E-mailbevestiging:', @@ -1442,9 +1465,15 @@ U kunt ook anderen in staat stellen per e-mail contact met u op te nemen via een 'prefs-advancedrendering' => 'Gevorderde instellingen', 'prefs-advancedsearchoptions' => 'Gevorderde instellingen', 'prefs-advancedwatchlist' => 'Gevorderde instellingen', -'prefs-display' => 'Weergaveinstellingen', +'prefs-displayrc' => 'Weergaveinstellingen', +'prefs-displaysearchoptions' => 'Weergaveopties', +'prefs-displaywatchlist' => 'Weergaveopties', 'prefs-diffs' => 'Verschillen', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Het e-mailadres lijkt geldig', +'email-address-validity-invalid' => 'Geef een geldig e-mailadres op', + # User rights 'userrights' => 'Gebruikersrechtenbeheer', 'userrights-lookup-user' => 'Gebruikersgroepen beheren', @@ -1528,6 +1557,7 @@ U kunt ook anderen in staat stellen per e-mail contact met u op te nemen via een 'right-hideuser' => 'Een gebruiker voor de overige gebruikers verbergen', 'right-ipblock-exempt' => 'IP-blokkades omzeilen', 'right-proxyunbannable' => "Blokkades voor proxy's gelden niet", +'right-unblockself' => 'Eigen gebruiker deblokkeren', 'right-protect' => 'Beveiligingsniveaus wijzigen', 'right-editprotected' => "Beveiligde pagina's bewerken", 'right-editinterface' => 'De gebruikersinterface bewerken', @@ -1550,7 +1580,6 @@ U kunt ook anderen in staat stellen per e-mail contact met u op te nemen via een 'right-siteadmin' => 'De database blokkeren en weer vrijgeven', 'right-reset-passwords' => 'Wachtwoorden van andere gebruikers opnieuw instellen', 'right-override-export-depth' => "Pagina's exporteren inclusief pagina's waarnaar verwezen wordt tot een diepte van vijf", -'right-versiondetail' => 'Uitgebreide versieinformatie van de software weergeven', 'right-sendemail' => 'E-mail versturen aan andere gebruikers', # User rights log @@ -1601,14 +1630,9 @@ U kunt ook anderen in staat stellen per e-mail contact met u op te nemen via een 'recentchanges-legend' => 'Opties voor recente wijzigingen', 'recentchangestext' => 'Op deze pagina kunt u de recentste wijzigingen in deze wiki bekijken.', 'recentchanges-feed-description' => 'Met deze feed kunt u de recentste wijzigingen in deze wiki bekijken.', -'recentchanges-label-legend' => 'Legenda: $1.', -'recentchanges-legend-newpage' => '$1 - nieuwe pagina', 'recentchanges-label-newpage' => 'Met deze bewerking is een nieuwe pagina aangemaakt', -'recentchanges-legend-minor' => '$1 - kleine wijziging', 'recentchanges-label-minor' => 'Dit is een kleine bewerking', -'recentchanges-legend-bot' => '$1 - botbewerking', 'recentchanges-label-bot' => 'Deze bewerking is uitgevoerd door een bot', -'recentchanges-legend-unpatrolled' => '$1 - ongecontroleerde bewerking', 'recentchanges-label-unpatrolled' => 'Deze bewerking is nog niet gecontroleerd', 'rcnote' => "Hieronder {{PLURAL:$1|staat de laatste bewerking|staan de laatste '''$1''' bewerkingen}} in de laatste {{PLURAL:$2|dag|'''$2''' dagen}}, op $4 om $5.", 'rcnotefrom' => "Wijzigingen sinds '''$2''' (met een maximum van '''$1''' wijzigingen).", @@ -1656,6 +1680,9 @@ om bestanden te uploaden.', 'upload_directory_missing' => 'De uploadmap ($1) is niet aanwezig en kon niet aangemaakt worden door de webserver.', 'upload_directory_read_only' => 'De webserver kan niet schrijven in de uploadmap ($1).', 'uploaderror' => 'Uploadfout', +'upload-recreate-warning' => "'''Waarschuwing: er is een bestand met deze naam verwijderd of hernoemd.''' + +Hieronder worden het verwijderlogboek en het hernoemingslogboek voor deze pagina weergegeven:", 'uploadtext' => "Gebruik het onderstaande formulier om bestanden te uploaden. Om eerder toegevoegde bestanden te bekijken of te zoeken kunt u naar de [[Special:FileList|bestandslijst]] gaan. Uploads en bestanden die na verwijdering opnieuw worden toegevoegd zijn na te zien in het [[Special:Log/upload|uploadlogboek]]. @@ -1695,6 +1722,17 @@ Aangewezen {{PLURAL:\$3|bestandstype is|bestandstypes zijn}} \$2.", 'filetype-banned-type' => "'''\".\$1\"''' is geen toegelaten bestandstype. Toegelaten {{PLURAL:\$3|bestandstype is|bestandstypes zijn}} \$2.", 'filetype-missing' => 'Dit bestand heeft geen extensie (zoals ".jpg").', +'empty-file' => 'Het bestand dat u probeerde te uploaden had geen inhoud.', +'file-too-large' => 'Het bestand dat u probeerde te uploaden was te groot.', +'filename-tooshort' => 'Het bestand dat u probeerde te uploaden had een te korte bestandsnaam.', +'filetype-banned' => 'Het bestand dat u probeerde te uploaden was van een niet toegelaten bestandstype.', +'verification-error' => 'De verificatie van het bestand dat u probeerde te uploaden is mislukt.', +'hookaborted' => 'De wijziging die u probeerde te maken is afgebroken door een uitbreidingshook.', +'illegal-filename' => 'Deze bestandsnaam is niet toegelaten.', +'overwrite' => 'Het overschrijven van een bestand bestand is niet toegestaan.', +'unknown-error' => 'Er is een onbekende fout opgetreden.', +'tmp-create-error' => 'Het was niet mogelijk een tijdelijk bestand aan te maken.', +'tmp-write-error' => 'Er is een fout opgetreden bij het schrijven van het tijdelijke bestand.', 'large-file' => 'Aanbeveling: maak bestanden niet groter dan $1, dit bestand is $2.', 'largefileserver' => 'Het bestand is groter dan de instelling van de server toestaat.', 'emptyfile' => 'Het bestand dat u hebt geüpload lijkt leeg te zijn. @@ -1726,13 +1764,14 @@ Als u het bestand alsnog wilt uploaden, ga dan terug en kies een andere naam. 'file-exists-duplicate' => 'Dit bestand is indentiek aan {{PLURAL:$1|het volgende bestand|de volgende bestanden}}:', 'file-deleted-duplicate' => 'Een bestand dat identiek is aan dit bestand ([[:$1]]) is voorheen verwijderd. Raadpleeg het verwijderingslogboek voordat u verder gaat.', -'successfulupload' => 'Het bestand is toegevoegd', 'uploadwarning' => 'Uploadwaarschuwing', 'uploadwarning-text' => 'Pas de onderstaande bestandsbeschrijving aan en probeer het daarna opnieuw.', 'savefile' => 'Bestand opslaan', 'uploadedimage' => 'heeft "[[$1]]" geüpload', 'overwroteimage' => 'heeft een nieuwe versie van "[[$1]]" toegevoegd', 'uploaddisabled' => 'Uploaden is uitgeschakeld', +'copyuploaddisabled' => 'Het uploaden van bestanden via een URL is uitgeschakeld.', +'uploadfromurl-queued' => 'Uw upload is in de wachtrij geplaatst.', 'uploaddisabledtext' => 'Het uploaden van bestanden is uitgeschakeld.', 'php-uploaddisabledtext' => 'PHP-bestanduploads zijn uitgeschakeld. Controleer a.u.b. de file_uploads-instelling.', 'uploadscripted' => 'Dit bestand bevat HTML- of scriptcode die foutief door uw browser kan worden weergegeven.', @@ -1767,6 +1806,15 @@ JD # Jenoptik MGP # Pentax PICT # overig # ', +'upload-success-subj' => 'Het bestand is toegevoegd', +'upload-success-msg' => 'Uw upload van [$2] is geslaagd en is beschikbaar: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Uploadprobleem', +'upload-failure-msg' => 'Er was een probleem met uw upload van [$2]: + +$1', +'upload-warning-subj' => 'Uploadwaarschuwing', +'upload-warning-msg' => 'Er was een probleem met uw upload van [$2]. +Ga terug naar het [[Special:Upload/stash/$1|uploadformulier]] om dit probleem te verhelpen.', 'upload-proto-error' => 'Verkeerd protocol', 'upload-proto-error-text' => "Uploads via deze methode vereisen URL's die beginnen met http:// of ftp://.", @@ -1833,6 +1881,7 @@ Klikken op een kolomkop verandert de sortering.', 'listfiles_search_for' => 'Zoeken naar bestand:', 'imgfile' => 'bestand', 'listfiles' => 'Bestandslijst', +'listfiles_thumb' => 'Miniatuur', 'listfiles_date' => 'Datum', 'listfiles_name' => 'Naam', 'listfiles_user' => 'Gebruiker', @@ -1877,6 +1926,7 @@ De [$2 pagina met de bestandsbeschrijving] wordt hieronder weergegeven.', 'shared-repo-from' => 'van $1', 'shared-repo' => 'een gedeelde mediadatabank', 'shared-repo-name-wikimediacommons' => 'Wikimedia Commons', +'filepage.css' => "/ * De CSS die hier geplaatst wordt, wordt opgenomen in de bestandsbeschrijvingspagina en wordt ook opgenomen op externe wiki's (via externe repositories) * /", # File reversion 'filerevert' => '$1 terugdraaien', @@ -1948,8 +1998,8 @@ Vergeet niet de "Verwijzingen naar deze pagina" te controleren alvorens dit sjab 'statistics-edits' => 'Paginabewerkingen sinds het begin van {{SITENAME}}', 'statistics-edits-average' => 'Gemiddeld aantal bewerkingen per pagina', 'statistics-views-total' => "Totaal aantal weergegeven pagina's", +'statistics-views-total-desc' => "Het bekijken van niet-bestaande pagina's en speciale pagina's is niet inbegrepen", 'statistics-views-peredit' => "Weergegeven pagina's per bewerking", -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Jobqueuelengte]', 'statistics-users' => 'Geregistreerde [[Special:ListUsers|gebruikers]]', 'statistics-users-active' => 'Actieve gebruikers', 'statistics-users-active-desc' => 'Gebruikers die in de afgelopen {{PLURAL:$1|dag|$1 dagen}} een handeling hebben uitgevoerd', @@ -1965,7 +2015,7 @@ Deze horen waarschijnlijk direct naar het juiste onderwerp te verwijzen. 'doubleredirectstext' => "Deze lijst bevat pagina's die doorverwijzen naar andere doorverwijspagina's. Elke rij bevat verwijzingen naar de eerste en de tweede doorverwijspagina en een verwijzing naar de doelpagina van de tweede doorverwijspagina. Meestal is de laatste pagina het eigenlijke doel, waar de eerste pagina naar zou moeten doorverwijzen. -Doorgehaalde regels geven aan dat het probleem al is opgelost.", +Doorgehaalde regels geven aan dat het probleem al is opgelost.", 'double-redirect-fixed-move' => '[[$1]] is verplaatst en is nu een doorverwijzing naar [[$2]]', 'double-redirect-fixer' => 'Doorverwijzingen opschonen', @@ -1988,6 +2038,8 @@ Meestal is de laatste pagina het eigenlijke doel, waar de eerste pagina naar zou 'nmembers' => '$1 {{PLURAL:$1|item|items}}', 'nrevisions' => '$1 {{PLURAL:$1|versie|versies}}', 'nviews' => '{{PLURAL:$1|1 keer|$1 keer}} bekeken', +'nimagelinks' => "Gebruikt op {{PLURAL:$1|één pagina|$1 pagina's}}", +'ntransclusions' => "gebruikt op {{PLURAL:$1|één pagina|$1 pagina's}}", 'specialpage-empty' => 'Deze pagina is leeg.', 'lonelypages' => "Weespagina's", 'lonelypagestext' => "Naar de onderstaande pagina's wordt vanuit {{SITENAME}} niet verwezen. @@ -2148,35 +2200,41 @@ Er kan [[{{MediaWiki:Listgrouprights-helppage}}|extra informatie]] over individu 'listgrouprights-removegroup-self-all' => 'Alle groepen verwijderen van eigen gebruiker', # E-mail user -'mailnologin' => 'Geen verzendadres beschikbaar', -'mailnologintext' => 'U moet [[Special:UserLogin|aangemeld]] zijn en een geldig e-mailadres in uw [[Special:Preferences|voorkeuren]] vermelden om andere gebruikers te kunnen e-mailen.', -'emailuser' => 'Deze gebruiker e-mailen', -'emailpage' => 'Gebruiker e-mailen', -'emailpagetext' => 'Via dit formulier kunt u een e-mail aan deze gebruiker verzenden. +'mailnologin' => 'Geen verzendadres beschikbaar', +'mailnologintext' => 'U moet [[Special:UserLogin|aangemeld]] zijn en een geldig e-mailadres in uw [[Special:Preferences|voorkeuren]] vermelden om andere gebruikers te kunnen e-mailen.', +'emailuser' => 'Deze gebruiker e-mailen', +'emailpage' => 'Gebruiker e-mailen', +'emailpagetext' => 'Via dit formulier kunt u een e-mail aan deze gebruiker verzenden. Het e-mailadres dat u hebt opgegeven bij [[Special:Preferences|uw voorkeuren]] wordt als afzender gebruikt. De ontvanger kan dus direct naar u reageren.', -'usermailererror' => 'Foutmelding bij het verzenden:', -'defemailsubject' => 'E-mail van {{SITENAME}}', -'noemailtitle' => 'Van deze gebruiker is geen e-mailadres bekend', -'noemailtext' => 'Deze gebruiker heeft geen geldig e-mailadres opgegeven.', -'nowikiemailtitle' => 'E-mail is niet toegestaan', -'nowikiemailtext' => 'Deze gebruiker wil geen e-mail ontvangen van andere gebruikers.', -'email-legend' => 'Een e-mail versturen naar een andere gebruiker van {{SITENAME}}', -'emailfrom' => 'Van:', -'emailto' => 'Aan:', -'emailsubject' => 'Onderwerp:', -'emailmessage' => 'Bericht:', -'emailsend' => 'Verzenden', -'emailccme' => 'Een kopie van dit bericht naar mijn e-mailadres sturen.', -'emailccsubject' => 'Kopie van uw bericht aan $1: $2', -'emailsent' => 'E-mail verzonden', -'emailsenttext' => 'Uw e-mail is verzonden.', -'emailuserfooter' => 'Deze e-mail is verstuurd door $1 aan $2 door de functie "Deze gebruiker e-mailen" van {{SITENAME}}.', +'usermailererror' => 'Foutmelding bij het verzenden:', +'defemailsubject' => 'E-mail van {{SITENAME}}', +'usermaildisabled' => 'Gebruikerse-mail uitgeschakeld', +'usermaildisabledtext' => 'U kunt geen e-mail verzenden naar andere gebruikers op deze wiki', +'noemailtitle' => 'Van deze gebruiker is geen e-mailadres bekend', +'noemailtext' => 'Deze gebruiker heeft geen geldig e-mailadres opgegeven.', +'nowikiemailtitle' => 'E-mail is niet toegestaan', +'nowikiemailtext' => 'Deze gebruiker wil geen e-mail ontvangen van andere gebruikers.', +'email-legend' => 'Een e-mail versturen naar een andere gebruiker van {{SITENAME}}', +'emailfrom' => 'Van:', +'emailto' => 'Aan:', +'emailsubject' => 'Onderwerp:', +'emailmessage' => 'Bericht:', +'emailsend' => 'Verzenden', +'emailccme' => 'Een kopie van dit bericht naar mijn e-mailadres sturen.', +'emailccsubject' => 'Kopie van uw bericht aan $1: $2', +'emailsent' => 'E-mail verzonden', +'emailsenttext' => 'Uw e-mail is verzonden.', +'emailuserfooter' => 'Deze e-mail is verstuurd door $1 aan $2 door de functie "Deze gebruiker e-mailen" van {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Systeembericht achtergelaten', +'usermessage-editor' => 'Systeembericht', # Watchlist 'watchlist' => 'Volglijst', 'mywatchlist' => 'Mijn volglijst', -'watchlistfor' => "(voor '''$1''')", +'watchlistfor2' => 'Voor $1 $2', 'nowatchlist' => 'Uw volglijst is leeg.', 'watchlistanontext' => '$1 is noodzakelijk om uw volglijst in te zien of te wijzigen.', 'watchnologin' => 'U bent niet aangemeld', @@ -2235,6 +2293,9 @@ Tenzij u deze pagina bezoekt, komen er geen verdere berichten. Op uw volglijst k Groet van uw {{SITENAME}} waarschuwingssysteem. -- +U kunt uw e-mailinstellingen wijzigen op: +{{fullurl:{{#special:Preferences}}}} + U kunt uw volglijstinstellingen wijzigen op: {{fullurl:Special:Watchlist/edit}} @@ -2295,7 +2356,10 @@ De meest recente bewerking is gemaakt door [[User:$3|$3]] ([[User talk:$3|overle 'revertpage-nouser' => 'Wijzigingen door (gebruikersnaam verwijderd) teruggedraaid naar de laatste versie door [[User:$1|$1]]', 'rollback-success' => 'De wijzigingen door $1 zijn teruggedraaid. De laatste versie van $2 is hersteld.', -'sessionfailure' => 'Er lijkt een probleem te zijn met uw aanmeldsessie. + +# Edit tokens +'sessionfailure-title' => 'Sessiefout', +'sessionfailure' => 'Er lijkt een probleem te zijn met uw aanmeldsessie. Uw handeling is gestopt uit voorzorg tegen een beveiligingsrisico (dat bestaat uit mogelijke "hijacking" van deze sessie). Ga een pagina terug, laad die pagina opnieuw en probeer het nog eens.', @@ -2431,19 +2495,23 @@ $1', 'month' => 'Van maand (en eerder):', 'year' => 'Van jaar (en eerder):', -'sp-contributions-newbies' => 'Alleen de bijdragen van nieuwe gebruikers bekijken', -'sp-contributions-newbies-sub' => 'Voor nieuwelingen', -'sp-contributions-newbies-title' => 'Bijdragen van nieuwe gebruikers', -'sp-contributions-blocklog' => 'blokkeerlogboek', -'sp-contributions-deleted' => 'verwijderde bijdragen', -'sp-contributions-logs' => 'logboeken', -'sp-contributions-talk' => 'overleg', -'sp-contributions-userrights' => 'gebruikersrechtenbeheer', -'sp-contributions-blocked-notice' => 'Deze gebruiker is op het moment geblokkeerd. +'sp-contributions-newbies' => 'Alleen de bijdragen van nieuwe gebruikers bekijken', +'sp-contributions-newbies-sub' => 'Voor nieuwelingen', +'sp-contributions-newbies-title' => 'Bijdragen van nieuwe gebruikers', +'sp-contributions-blocklog' => 'blokkeerlogboek', +'sp-contributions-deleted' => 'verwijderde bijdragen', +'sp-contributions-uploads' => 'uploads', +'sp-contributions-logs' => 'logboeken', +'sp-contributions-talk' => 'overleg', +'sp-contributions-userrights' => 'gebruikersrechtenbeheer', +'sp-contributions-blocked-notice' => 'Deze gebruiker is op het moment geblokkeerd. De laatste regel uit het blokkeerlogboek wordt hieronder ter referentie weergegeven:', -'sp-contributions-search' => 'Zoeken naar bijdragen', -'sp-contributions-username' => 'IP-adres of gebruikersnaam:', -'sp-contributions-submit' => 'Bekijken', +'sp-contributions-blocked-notice-anon' => 'Dit IP-adres is geblokkeerd. +De laatste regel uit het blokkeerlogboek wordt hieronder ter referentie weergegeven:', +'sp-contributions-search' => 'Zoeken naar bijdragen', +'sp-contributions-username' => 'IP-adres of gebruikersnaam:', +'sp-contributions-toponly' => 'Alleen nieuwste versies weergeven', +'sp-contributions-submit' => 'Bekijken', # What links here 'whatlinkshere' => 'Verwijzingen naar deze pagina', @@ -2504,7 +2572,6 @@ Zie de [[Special:IPBlockList|Lijst van geblokkeerde IP-adressen]] voor recente b 'ipb-edit-dropdown' => 'Lijst van redenen bewerken', 'ipb-unblock-addr' => '$1 deblokkeren', 'ipb-unblock' => 'Een gebruiker of IP-adres deblokkeren', -'ipb-blocklist-addr' => 'Bestaande blokkades voor $1', 'ipb-blocklist' => 'Bestaande blokkades bekijken', 'ipb-blocklist-contribs' => 'Bijdragen van $1', 'unblockip' => 'Gebruiker deblokkeren', @@ -2581,6 +2648,8 @@ U kunt geen gebruiker registreren.', 'cant-block-while-blocked' => 'U kunt andere gebruikers niet blokkeren terwijl u zelf geblokkeerd bent.', 'cant-see-hidden-user' => "De gebruiker die u probeert te blokken is al geblokkeerd en verborgen. Omdat u het recht 'hideuser' niet hebt, kunt u de blokkade van de gebruiker niet bekijken of bewerken.", +'ipbblocked' => 'U kunt geen andere gebruikers (de)blokkeren, omdat u zelf geblokkeerd bent', +'ipbnounblockself' => 'U mag uzelf niet deblokkeren', # Developer tools 'lockdb' => 'Database blokkeren', @@ -2620,6 +2689,16 @@ Een pagina kan '''alleen''' hernoemd worden als de nieuwe paginanaam niet bestaa '''WAARSCHUWING!''' Voor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben. Zorg ervoor dat u die gevolgen overziet voordat u deze handeling uitvoert.", +'movepagetext-noredirectfixer' => "Door middel van het onderstaande formulier kunt u een pagina en alle bijbehorende oude versies hernoemen. +De oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina. +Controleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan. + +Een pagina kan '''alleen''' hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is. +U kunt dus een pagina die abusievelijk is hernoemd terug hernoemen en u kunt een bestaande pagina niet overschrijven. + +'''Waarschuwing!''' +Voor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben. +Zorg ervoor dat u die gevolgen overziet voordat u deze handeling uitvoert.", 'movepagetalktext' => "De bijbehorende overlegpagina krijgt automatisch een andere naam, '''tenzij''': * De overlegpagina onder de nieuwe naam al bestaat; * U het onderstaande vinkje deselecteert.", @@ -2676,6 +2755,7 @@ Wilt u deze verwijderen om plaats te maken voor de te hernoemen pagina?', 'immobile-source-page' => 'Deze pagina kan niet hernoemd worden.', 'immobile-target-page' => 'Het is niet mogelijk te hernoemen naar die paginanaam.', 'imagenocrossnamespace' => 'Een mediabestand kan niet naar een andere naamruimte verplaatst worden', +'nonfile-cannot-move-to-file' => 'Het is niet mogelijk te hernoemen van en naar de bestandsnaamruimte', 'imagetypemismatch' => 'De nieuwe bestandsextensie is niet gelijk aan het bestandstype', 'imageinvalidfilename' => 'De nieuwe bestandsnaam is ongeldig', 'fix-double-redirects' => 'Alle doorverwijzingen bijwerken die verwijzen naar de originele paginanaam', @@ -2757,6 +2837,7 @@ Sla de uitvoer op uw eigen computer op, en voeg die daarna hier toe.', 'importstart' => "Pagina's aan het importeren…", 'import-revision-count' => '$1 {{PLURAL:$1|versie|versies}}', 'importnopages' => "Geen pagina's te importeren.", +'imported-log-entries' => '$1 {{PLURAL:$1|logboekregel|logboekregels}} geïmporteerd.', 'importfailed' => 'Import is mislukt: $1', 'importunknownsource' => 'Onbekend importbrontype', 'importcantopen' => 'Kon het importbestand niet openen', @@ -2852,6 +2933,8 @@ De tijdelijke map is niet aanwezig.', 'tooltip-upload' => 'Uploaden', 'tooltip-rollback' => 'Met "terugdraaien" draait u met één klik de bewerking(en) terug van de laatste gebruiker die deze pagina heeft bewerkt.', 'tooltip-undo' => 'Met "ongedaan maken" draait u deze bewerking terug en komt in het bewerkingsvenster. U kunt in de bewerkingssamenvatting een reden opgeven.', +'tooltip-preferences-save' => 'Voorkeuren opslaan', +'tooltip-summary' => 'Voer een korte samenvatting in', # Stylesheets 'common.css' => '/** CSS die hier wordt geplaatst heeft invloed op alle skins */', @@ -2984,14 +3067,17 @@ $1', 'thumbsize' => 'Grootte miniatuurafbeelding:', 'widthheight' => '$1x$2', 'widthheightpage' => "$1×$2, $3 {{PLURAL:$3|pagina|pagina's}}", -'file-info' => '(bestandsgrootte: $1, MIME-type: $2)', -'file-info-size' => '($1 × $2 pixels, bestandsgrootte: $3, MIME-type: $4)', +'file-info' => 'bestandsgrootte: $1, MIME-type: $2', +'file-info-size' => '$1 × $2 pixels, bestandsgrootte: $3, MIME-type: $4', 'file-nohires' => 'Geen hogere resolutie beschikbaar.', -'svg-long-desc' => '(SVG-bestand, nominaal $1 × $2 pixels, bestandsgrootte: $3)', +'svg-long-desc' => 'SVG-bestand, nominaal $1 × $2 pixels, bestandsgrootte: $3', 'show-big-image' => 'Volledige resolutie', 'show-big-image-thumb' => 'Afmetingen van deze weergave: $1 × $2 pixels', 'file-info-gif-looped' => 'herhalend', 'file-info-gif-frames' => '$1 {{PLURAL:$1|frame|frames}}', +'file-info-png-looped' => 'herhalend', +'file-info-png-repeat' => '$1 {{PLURAL:$1|keer|keer}} afgespeeld', +'file-info-png-frames' => '$1 {{PLURAL:$1|frame|frames}}', # Special:NewFiles 'newimages' => 'Nieuwe bestanden', @@ -3150,6 +3236,7 @@ Andere velden worden verborgen. 'exif-gpsareainformation' => 'Naam GPS-gebied', 'exif-gpsdatestamp' => 'GPS-datum', 'exif-gpsdifferential' => 'Differentiele GPS-correctie', +'exif-objectname' => 'Korte naam', # EXIF attributes 'exif-compression-1' => 'Ongecomprimeerd', @@ -3311,31 +3398,31 @@ Andere velden worden verborgen. 'limitall' => 'alle', # E-mail address confirmation -'confirmemail' => 'E-mailadres bevestigen', -'confirmemail_noemail' => 'U hebt geen geldig e-mailadres ingegeven in uw [[Special:Preferences|gebruikersvoorkeuren]].', -'confirmemail_text' => '{{SITENAME}} eist bevestiging van uw e-mailadres voordat u de e-mailmogelijkheden kunt gebruiken. +'confirmemail' => 'E-mailadres bevestigen', +'confirmemail_noemail' => 'U hebt geen geldig e-mailadres ingegeven in uw [[Special:Preferences|gebruikersvoorkeuren]].', +'confirmemail_text' => '{{SITENAME}} eist bevestiging van uw e-mailadres voordat u de e-mailmogelijkheden kunt gebruiken. Klik op de onderstaande knop om een bevestigingsbericht te ontvangen. Dit bericht bevat een verwijzing met een code. Open die verwijzing om uw e-mailadres te bevestigen.', -'confirmemail_pending' => 'Er is al een bevestigingsbericht aan u verzonden. +'confirmemail_pending' => 'Er is al een bevestigingsbericht aan u verzonden. Als u recentelijk uw gebruiker hebt aangemaakt, wacht dan een paar minuten totdat die aankomt voordat u opnieuw een e-mail laat sturen.', -'confirmemail_send' => 'Een bevestigingscode verzenden', -'confirmemail_sent' => 'Bevestigingscode verzonden.', -'confirmemail_oncreate' => 'Er is een bevestigingscode naar uw e-mailadres verzonden. +'confirmemail_send' => 'Een bevestigingscode verzenden', +'confirmemail_sent' => 'Bevestigingscode verzonden.', +'confirmemail_oncreate' => 'Er is een bevestigingscode naar uw e-mailadres verzonden. Deze code is niet nodig om u aan te melden, maar u dient deze wel te bevestigen voordat u de e-mailmogelijkheden van deze wiki kunt gebruiken.', -'confirmemail_sendfailed' => '{{SITENAME}} kon uw bevestigingscode niet verzenden. +'confirmemail_sendfailed' => '{{SITENAME}} kon uw bevestigingscode niet verzenden. Controleer uw e-mailadres op ongeldige tekens. Het e-mailprogramma meldde: $1', -'confirmemail_invalid' => 'Ongeldige bevestigingscode. +'confirmemail_invalid' => 'Ongeldige bevestigingscode. Mogelijk is de code verlopen.', -'confirmemail_needlogin' => 'U moet $1 om uw e-mailadres te bevestigen.', -'confirmemail_success' => 'Uw e-mailadres is bevestigd. +'confirmemail_needlogin' => 'U moet $1 om uw e-mailadres te bevestigen.', +'confirmemail_success' => 'Uw e-mailadres is bevestigd. U kunt zich nu [[Special:UserLogin|aanmelden]] en {{SITENAME}} gebruiken.', -'confirmemail_loggedin' => 'Uw e-mailadres is nu bevestigd.', -'confirmemail_error' => 'Er is iets verkeerd gegaan tijdens het opslaan van uw bevestiging.', -'confirmemail_subject' => 'Bevestiging e-mailadres voor {{SITENAME}}', -'confirmemail_body' => 'Iemand, waarschijnlijk u, met het IP-adres $1, +'confirmemail_loggedin' => 'Uw e-mailadres is nu bevestigd.', +'confirmemail_error' => 'Er is iets verkeerd gegaan tijdens het opslaan van uw bevestiging.', +'confirmemail_subject' => 'Bevestiging e-mailadres voor {{SITENAME}}', +'confirmemail_body' => 'Iemand, waarschijnlijk u, met het IP-adres $1, heeft zich met dit e-mailadres geregistreerd als gebruiker "$2" op {{SITENAME}}. Open de volgende verwijzing in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} te activeren: @@ -3347,8 +3434,32 @@ Als u uzelf *niet* hebt aangemeld, volg dan de volgende verwijzing om de bevesti $5 De bevestigingscode vervalt op $4.', -'confirmemail_invalidated' => 'De e-mailbevestiging is geannuleerd', -'invalidateemail' => 'E-mailbevestiging annuleren', +'confirmemail_body_changed' => 'Iemand, waarschijnlijk u, met het IP-adres $1, +heeft het het e-mailadres geregistreerd voor gebruiker "$2" op {{SITENAME}} gewijzigd naar dit e-mailadres. + +Open de volgende verwijzing in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren: + +$3 + +Als u uzelf *niet* hebt aangemeld, volg dan de volgende verwijzing om de bevestiging van uw e-mailadres te annuleren: + +$5 + +De bevestigingscode vervalt op $4.', +'confirmemail_body_set' => 'Iemand, waarschijnlijk u, met het IP-adres $1, +heeft het het e-mailadres voor gebruiker "$2" op {{SITENAME}} ingesteld op dit e-mailadres. + +Open de volgende verwijzing in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren: + +$3 + +Als u zelf deze wijziging *niet* hebt gemaakt, volg dan de volgende verwijzing om de bevestiging van uw e-mailadres te annuleren: + +$5 + +De bevestigingscode vervalt op $4.', +'confirmemail_invalidated' => 'De e-mailbevestiging is geannuleerd', +'invalidateemail' => 'E-mailbevestiging annuleren', # Scary transclusion 'scarytranscludedisabled' => '[Interwiki-invoeging van sjablonen is uitgeschakeld]', @@ -3388,6 +3499,7 @@ Bevestig dat u de pagina opnieuw wilt aanmaken.", 'table_pager_first' => 'Eerste pagina', 'table_pager_last' => 'Laatste pagina', 'table_pager_limit' => '$1 resultaten per pagina bekijken', +'table_pager_limit_label' => 'Items per pagina:', 'table_pager_limit_submit' => 'OK', 'table_pager_empty' => 'Geen resultaten', @@ -3464,6 +3576,7 @@ U kunt ook [[Special:Watchlist/edit|het standaard bewerkingsscherm gebruiken]].' 'version-specialpages' => "Speciale pagina's", 'version-parserhooks' => 'Parserhooks', 'version-variables' => 'Variabelen', +'version-skins' => 'Vormgevingen', 'version-other' => 'Overige', 'version-mediahandlers' => 'Mediaverwerkers', 'version-hooks' => 'Hooks', @@ -3475,6 +3588,13 @@ U kunt ook [[Special:Watchlist/edit|het standaard bewerkingsscherm gebruiken]].' 'version-hook-subscribedby' => 'Geabonneerd door', 'version-version' => '(Versie $1)', 'version-license' => 'Licentie', +'version-poweredby-credits' => "Deze wiki wordt aangedreven door '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'anderen', +'version-license-info' => 'MediaWiki is vrije software; u kunt MediaWiki verspreiden en/of aanpassen onder de voorwaarden van de GNU General Public License zoals gepubliceerd door de Free Software Foundation; ofwel versie 2 van de Licentie, of - naar uw wens - enige latere versie. + +MediaWiki wordt verspreid in de hoop dat het nuttig is, maar ZONDER ENIGE GARANTIE; zonder zelfs de impliciete garantie van VERKOOPBAARHEID of GESCHIKTHEID VOOR ENIG DOEL IN HET BIJZONDER. Zie de GNU General Public License voor meer informatie. + +Samen met dit programma hoort u een [{{SERVER}}{{SCRIPTPATH}}/COPYING kopie van de GNU General Public License] te hebben ontvangen; zo niet, schrijf dan naar de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA of [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html lees de licentie online].', 'version-software' => 'Geïnstalleerde software', 'version-software-product' => 'Product', 'version-software-version' => 'Versie', @@ -3546,6 +3666,15 @@ Voer de bestandsnaam in zonder het voorvoegsel "{{ns:file}}:".', 'tags-edit' => 'bewerken', 'tags-hitcount' => '$1 {{PLURAL:$1|wijziging|wijzigingen}}', +# Special:ComparePages +'comparepages' => "Pagina's vergelijken", +'compare-selector' => 'Paginaversies vergelijken', +'compare-page1' => 'Pagina 1', +'compare-page2' => 'Pagina 2', +'compare-rev1' => 'Versie 1', +'compare-rev2' => 'Versie 2', +'compare-submit' => 'Vergelijken', + # Database error messages 'dberr-header' => 'Deze wiki heeft een probleem', 'dberr-problems' => 'Onze excuses. Deze site ondervindt op het moment technische problemen.', @@ -3562,8 +3691,13 @@ Voer de bestandsnaam in zonder het voorvoegsel "{{ns:file}}:".', 'htmlform-float-invalid' => 'De waarde die u hebt opgegeven is geen getal.', 'htmlform-int-toolow' => 'De ingegeven waarde ligt onder de minimumwaarde van $1', 'htmlform-int-toohigh' => 'De ingegeven waarde ligt boven de maximumwaarde van $1', +'htmlform-required' => 'Deze waarde is verplicht', 'htmlform-submit' => 'Opslaan', 'htmlform-reset' => 'Wijzigingen ongedaan maken', 'htmlform-selectorother-other' => 'Anders', +# SQLite database support +'sqlite-has-fts' => 'Versie $1 met ondersteuning voor "full-text" zoeken', +'sqlite-no-fts' => 'Versie $1 zonder ondersteuning voor "full-text" zoeken', + ); diff --git a/languages/messages/MessagesNl_informal.php b/languages/messages/MessagesNl_informal.php new file mode 100644 index 00000000..e947c247 --- /dev/null +++ b/languages/messages/MessagesNl_informal.php @@ -0,0 +1,658 @@ + 'Sorry, de servers zijn op het moment overbelast. +Te veel gebruikers proberen deze pagina te bekijken. +Wacht alstublieft even voordat je opnieuw toegang probeert te krijgen tot deze pagina. + +$1', + +'badaccess-group0' => 'Je hebt geen rechten om de gevraagde handeling uit te voeren.', + +'youhavenewmessages' => 'Je hebt $1 ($2).', +'youhavenewmessagesmulti' => 'Je hebt nieuwe berichten op $1', + +# Main script and global functions +'nosuchactiontext' => 'De opdracht in de URL is ongeldig. +Mogelijk heb je een typefout gemaakt in de URL of een onjuiste verwijzing gevolgd. +Het kan ook wijzen op een fout in de software van {{SITENAME}}.', +'nospecialpagetext' => 'Je hebt een onbestaande speciale pagina opgevraagd. + +Een lijst met bestaande speciale pagina’s staat op [[Special:SpecialPages|speciale pagina’s]].', + +# General errors +'missing-article' => 'In de database is geen inhoud aangetroffen voor de pagina "$1" die er wel zou moeten zijn ($2). + +Dit kan voorkomen als je een verouderde verwijzing naar het verschil tussen twee versies van een pagina volgt of een versie opvraagt die is verwijderd. + +Als dit niet het geval is, heb je wellicht een fout in de software gevonden. +Maak hiervan melding bij een [[Special:ListUsers/sysop|systeembeheerder]] van {{SITENAME}} en vermeld daarbij de URL van deze pagina.', +'actionthrottledtext' => 'Als maatregel tegen spam is het aantal keren per tijdseenheid dat je deze handeling kunt verrichten beperkt. +De limiet is overschreden. +Probeer het over een aantal minuten opnieuw.', +'viewsourcetext' => 'Je kunt de brontekst van deze pagina bekijken en kopiëren:', +'editinginterface' => "'''Waarschuwing:''' Je bewerkt een pagina die gebruikt wordt door de software. +Bewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen. +Overweeg voor vertalingen om [http://translatewiki.net/wiki/Main_Page?setlang=nl translatewiki.net] te gebruiken, het vertalingsproject voor MediaWiki.", +'namespaceprotected' => "Je hebt geen rechten om pagina's in de naamruimte '''$1''' te bewerken.", +'customcssjsprotected' => 'Je kunt deze pagina niet bewerken, omdat die persoonlijke instellingen van een andere gebruiker bevat.', + +# Login and logout pages +'logouttext' => "'''Je bent nu afgemeld.''' + +Je kunt {{SITENAME}} nu anoniem gebruiken of weer [[Special:UserLogin|aanmelden]] als dezelfde of een andere gebruiker. +Mogelijk worden nog een aantal pagina's weergegeven alsof je aangemeld bent totdat je de cache van uw browser leegt.", +'welcomecreation' => '== Welkom, $1! == +Je gebruiker is geregistreerd. +Vergeet niet je [[Special:Preferences|voorkeuren voor {{SITENAME}}]] aan te passen.', +'yourpasswordagain' => 'Geef je wachtwoord opnieuw in:', +'yourdomainname' => 'Je domein:', +'externaldberror' => 'Er is een fout opgetreden bij het aanmelden bij de database of je hebt geen toestemming uw externe gebruiker bij te werken.', +'loginprompt' => 'Je moet cookies ingeschakeld hebben om je te kunnen aanmelden bij {{SITENAME}}.', +'gotaccount' => "Heb je al een gebruikersnaam? '''$1'''.", +'nocookiesnew' => 'De gebruiker is geregistreerd, maar niet aangemeld. +{{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers. +Schakel die in en meld daarna aan met je nieuwe gebruikersnaam en wachtwoord.', +'nocookieslogin' => '{{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers. +Cookies zijn uitgeschakeld in je browser. +Schakel deze optie aan en probeer het opnieuw.', +'noname' => 'Je hebt geen geldige gebruikersnaam opgegeven.', +'loginsuccess' => "'''Je bent nu aangemeld bij {{SITENAME}} als \"\$1\".'''", +'nouserspecified' => 'Je dient een gebruikersnaam op te geven.', +'password-name-match' => 'Je wachtwoord en uw gebruikersnaam mogen niet overeenkomen.', +'passwordremindertext' => 'Iemand, waarschijnlijk jijzelf, heeft vanaf IP-adres $1 een verzoek +gedaan tot het toezenden van een nieuw wachtwoord voor {{SITENAME}} +($4). Er is een tijdelijk wachtwoord aangemaakt voor gebruiker "$2": +"$3". Als dat je bedoeling was, meld je dan nu aan en kies een nieuw +wachtwoord. +Je tijdelijke wachtwoord vervalt over {{PLURAL:$5|$5 dag|$5 dagen}}. + +Als iemand anders dan jij dit verzoek heeft gedaan of als je zich inmiddels het +wachtwoord herinnert en het niet langer wilt wijzigen, negeer dit bericht +dan en blijf je bestaande wachtwoord gebruiken.', +'noemailcreate' => 'Je moet een geldig e-mailadres opgeven', +'passwordsent' => 'Het wachtwoord is verzonden naar het e-mailadres voor "$1". +Meld je aan nadat je het hebt ontvangen.', +'blocked-mailpassword' => 'Je IP-adres is geblokkeerd voor het maken van wijzigingen. +Om misbruik te voorkomen is het niet mogelijk om een nieuw wachtwoord aan te vragen.', +'eauthentsent' => 'Er is een bevestigingse-mail naar het opgegeven e-mailadres gezonden. +Volg de aanwijzingen in de e-mail om aan te geven dat het jouw e-mailadres is. +Tot die tijd kunnen er geen e-mails naar het e-mailadres gezonden worden.', +'acct_creation_throttle_hit' => 'Bezoekers van deze wiki met hetzelfde IP-adres als jij hebben de afgelopen dag {{PLURAL:$1|al 1 gebruiker|al $1 gebruikers}} geregistreerd, wat het maximale aantal in deze periode is. +Daarom kun je als vanaf jouw IP-adres op dit moment geen nieuwe gebruiker registreren.', +'emailauthenticated' => 'Je e-mailadres is bevestigd op $2 om $3.', +'emailnotauthenticated' => 'Je e-mailadres is niet bevestigd. +Je ontvangt geen e-mail voor de onderstaande functies.', +'noemailprefs' => 'Geef een e-mailadres op in je voorkeuren om deze functies te gebruiken.', +'emailconfirmlink' => 'Bevestig je e-mailadres', +'createaccount-text' => 'Iemand heeft een gebruiker op {{SITENAME}} ($4) aangemaakt met de naam "$2" en jouw e-mailadres. +Het wachtwoord voor "$2" is "$3". +Meld je aan en wijzig je wachtwoord. + +Negeer dit bericht als deze gebruiker zonder jouw medeweten is aangemaakt.', +'login-throttled' => 'Je hebt recentelijk te vaak geprobeerd aan te melden met een onjuist wachtwoord. +Wacht even voordat je het opnieuw probeert.', +'suspicious-userlogout' => 'Je verzoek om af te melden is genegeerd, omdat het lijkt alsof het verzoek is verzonden door een browser of cacheproxy die stuk is.', + +# Password reset dialog +'resetpass_announce' => 'Je bent aangemeld met een tijdelijke code die je per e-mail is toegezonden. +Voer een nieuw wachtwoord in om het aanmelden te voltooien:', +'resetpass_success' => 'Je wachtwoord is gewijzigd. +Bezig met aanmelden…', +'resetpass-no-info' => 'Je dient aangemeld zijn voordat je deze pagina kunt gebruiken.', +'resetpass-wrong-oldpass' => 'Het huidige of tijdelijke wachtwoord is ongeldig. +Mogelijk heb je je wachtwoord al gewijzigd of een nieuw tijdelijk wachtwoord aangevraagd.', + +# Edit page toolbar +'sig_tip' => 'Je handtekening met datum en tijd', + +# Edit pages +'anoneditwarning' => "'''Waarschuwing:''' je bent niet aangemeld. +Je IP-adres wordt opgeslagen als je wijzigingen op deze pagina maakt.", +'anonpreviewwarning' => "''Je bent niet aangemeld.'' +''Door je bewerking op te slaan wordt je IP-adres opgeslagen in de paginageschiedenis.''", +'missingsummary' => "'''Herinnering:''' je hebt geen samenvatting opgegeven voor je bewerking. +Als je nogmaals op ''Pagina opslaan'' klikt wordt de bewerking zonder samenvatting opgeslagen.", +'missingcommenttext' => 'Plaats je opmerking hieronder.', +'missingcommentheader' => "'''Let op:''' Je hebt geen onderwerp/kop voor deze opmerking opgegeven. +Als je opnieuw op \"{{int:savearticle}}\" klikt, wordt je wijziging zonder een onderwerp/kop opgeslagen.", +'blockedtext' => '\'\'\'Je gebruiker of IP-adres is geblokkeerd.\'\'\' + +De blokkade is uitgevoerd door $1. +De opgegeven reden is \'\'$2\'\'. + +* Aanvang blokkade: $8 +* Einde blokkade: $6 +* Bedoeld te blokkeren: $7 + +Je kunt contact opnemen met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]] om de blokkade te bespreken. +Je kunt geen gebruik maken van de functie "Deze gebruiker e-mailen", tenzij je een geldig e-mailadres hebt opgegeven in uw [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet geblokkeerd is. +Je huidige IP-adres is $3 en het blokkadenummer is #$5. +Vermeld alle bovenstaande gegevens als je ergens op deze blokkade reageert.', +'autoblockedtext' => 'Je IP-adres is automatisch geblokkeerd, omdat het is gebruikt door een andere gebruiker, die is geblokkeerd door $1. +De opgegeven reden is: + +:\'\'$2\'\' + +* Aanvang blokkade: $8 +* Einde blokkade: $6 +* Bedoeld te blokkeren: $7 + +Je kunt deze blokkade bespreken met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]]. + +Je kunt geen gebruik maken van de functie "Deze gebruiker e-mailen", tenzij je een geldig e-mailadres hebt opgegeven in je [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet is geblokkeerd. + +Je huidige IP-adres is $3 en het blokkadenummer is #$5. +Vermeld alle bovenstaande gegevens als je ergens op deze blokkade reageert.', +'blockededitsource' => "Hieronder staat de tekst van '''je bewerkingen''' aan '''$1''':", +'whitelistedittext' => "Je moet $1 om pagina's te bewerken.", +'confirmedittext' => 'Je moet je e-mailadres bevestigen voor je kunt bewerken. +Voer je e-mailadres in en bevestig het via [[Special:Preferences|je voorkeuren]].', +'nosuchsectiontext' => 'Je probeerde een subkopje te bewerken dat niet bestaat. +Wellicht is het verplaatst of verwijderd terwijl je de pagina aan het bekijken was.', +'loginreqpagetext' => "Je moet je $1 om andere pagina's te kunnen bekijken.", +'newarticletext' => "Deze pagina bestaat niet. +Typ in het onderstaande veld om de pagina aan te maken (meer informatie staat op de [[{{MediaWiki:Helppage}}|hulppagina]]). +Gebruik de knop '''vorige''' in je browser als je hier per ongeluk terecht bent gekomen.", +'anontalkpagetext' => "----''Deze overlegpagina hoort bij een anonieme gebruiker die hetzij geen gebruikersnaam heeft, hetzij deze niet gebruikt. +Daarom wordt het IP-adres ter identificatie gebruikt. +Het is mogelijk dat meerdere personen hetzelfde IP-adres gebruiken. +Mogelijk ontvang je hier berichten die niet voor je bedoeld zijn. +Als je dat wilt voorkomen, [[Special:UserLogin/signup|registreer je]] of [[Special:UserLogin|meld je aan]] om verwarring met andere anonieme gebruikers te voorkomen.''", +'noarticletext' => 'Deze pagina bevat geen tekst. +Je kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina\'s, [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken] of [{{fullurl:{{FULLPAGENAME}}|action=edit}} deze pagina bewerken].', +'noarticletext-nopermission' => 'Deze pagina bevat geen tekst. +Je kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina\'s of +[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken].', +'userpage-userdoesnotexist' => 'Je bewerkt een gebruikerspagina van een gebruiker die niet bestaat (gebruiker "$1"). +Controleer of je deze pagina wel wilt aanmaken/bewerken.', +'clearyourcache' => "'''Let op! Nadat je de wijzigingen hebt opgeslagen is het wellicht nodig je browsercache te legen.''' + +'''Mozilla / Firefox / Safari:''' houd ''Shift'' ingedrukt terwijl je op ''Huidige pagina vernieuwen'' klikt of typ ''Ctrl-F5'' of ''Ctrl-R'' (''Command-R'' op eenMacintosh); +'''Konqueror: '''klik ''Reload'' of typ ''F5;'' +'''Opera:''' leeg je cache in ''Extra → Voorkeuren;'' +'''Internet Explorer:''' houd ''Ctrl'' ingedrukt terwijl je op ''Vernieuwen'' klikt of type ''Ctrl-F5.''", +'usercssyoucanpreview' => "'''Tip:''' Gebruik de knop \"{{int:showpreview}}\" om je nieuwe CSS te testen alvorens op te slaan.", +'userjsyoucanpreview' => "'''Tip:''' Gebruik de knop \"{{int:showpreview}}\" om je nieuwe JavaScript te testen alvorens op te slaan.", +'usercsspreview' => "'''Dit is alleen een voorvertoning van je persoonlijke CSS. +Deze is nog niet opgeslagen!'''", +'userjspreview' => "'''Let op: je test nu je persoonlijke JavaScript.''' +'''De pagina is niet opgeslagen!'''", +'userinvalidcssjstitle' => "'''Waarschuwing:''' er is geen skin \"\$1\". +Let op: je eigen .css- en .js-pagina's beginnen met een kleine letter, bijvoorbeeld {{ns:user}}:Naam/vector.css in plaats van {{ns:user}}:Naam/Vector.css.", +'previewnote' => "'''Let op: dit is een controlepagina; je tekst is niet opgeslagen!'''", +'previewconflict' => 'Deze voorvertoning geeft aan hoe de tekst in het bovenste veld eruit ziet als je deze opslaat.', +'session_fail_preview' => "'''Je bewerking is niet verwerkt, omdat de sessiegegevens verloren zijn gegaan. +Probeer het opnieuw. +Als het dan nog niet lukt, [[Special:UserLogout|meld jezelf dan af]] en weer aan.'''", +'session_fail_preview_html' => "'''Je bewerking is niet verwerkt, omdat sessiegegevens verloren zijn gegaan.''' + +''Omdat in {{SITENAME}} ruwe HTML is ingeschakeld, is een voorvertoning niet mogelijk als bescherming tegen aanvallen met JavaScript.'' + +'''Als dit een legitieme bewerking is, probeer het dan opnieuw. +Als het dan nog niet lukt, [[Special:UserLogout|meld jezelf dan af]] en weer aan.'''", +'token_suffix_mismatch' => "'''Je bewerking is geweigerd, omdat je browser de leestekens in het bewerkingstoken onjuist heeft behandeld. +De bewerking is geweigerd om verminking van de paginatekst te voorkomen. +Dit gebeurt soms als er een webgebaseerde proxydienst wordt gebruikt die fouten bevat.'''", +'explainconflict' => "Een andere gebruiker heeft deze pagina bewerkt sinds je met je bewerking bent begonnen. +In het bovenste deel van het venster staat de tekst van de huidige pagina. +Je bewerking staat in het onderste gedeelte. +Je dient je bewerkingen in te voegen in de bestaande tekst. +'''Alleen''' de tekst in het bovenste gedeelte wordt opgeslagen als je op \"{{int:savearticle}}\" klikt.", +'yourtext' => 'Je tekst', +'nonunicodebrowser' => "'''WAARSCHUWING: Je browser kan niet goed overweg met unicode. +Hiermee wordt door de MediaWiki-software rekening gehouden zodat je toch zonder problemen pagina's kunt bewerken: niet-ASCII karakters worden in het bewerkingsveld weergegeven als hexadecimale codes.'''", +'editingold' => "'''WAARSCHUWING! +Je bewerkt een oude versie van deze pagina. +Als je je bewerking opslaat, gaan alle wijzigingen die na deze versie gemaakt zijn verloren.'''", +'copyrightwarning' => "Opgelet: alle bijdragen aan {{SITENAME}} worden geacht te zijn vrijgegeven onder de $2 (zie $1 voor details). +Als je niet wilt dat je tekst door anderen naar believen bewerkt en verspreid kan worden, kies dan niet voor ‘Pagina opslaan’.
    +Hierbij beloof je ons tevens dat je deze tekst zelf hebt geschreven of overgenomen uit een vrije, openbare bron.
    +'''GEBRUIK GEEN MATERIAAL DAT BESCHERMD WORDT DOOR AUTEURSRECHT, TENZIJ JE DAAR TOESTEMMING VOOR HEBT!'''", +'copyrightwarning2' => "Al je bijdragen aan {{SITENAME}} kunnen bewerkt, gewijzigd of verwijderd worden door andere gebruikers. +Als je niet wilt dat je teksten rigoureus aangepast worden door anderen, plaats ze hier dan niet.
    +Je belooft ook dat je de oorspronkelijke auteur bent van dit materiaal of dat je het hebt gekopieerd uit een bron in het publieke domein of een soortgelijke vrije bron (zie $1 voor details). +'''GEBRUIK GEEN MATERIAAL DAT BESCHERMD WORDT DOOR AUTEURSRECHT, TENZIJ JE DAARVOOR TOESTEMMING HEBT!'''", +'longpageerror' => "'''FOUT: de tekst die je hebt toegevoegd is $1 kilobyte groot, wat groter is dan het maximum van $2 kilobyte. +Opslaan is niet mogelijk.'''", +'readonlywarning' => "'''WAARSCHUWING: De database is geblokkeerd voor bewerkingen, waarschijnlijk voor regulier databaseonderhoud, dus je kunt deze nu niet opslaan. +Het is misschien verstandig om je tekst tijdelijk in een tekstbestand op te slaan om dit te bewaren voor wanneer de blokkering van de database opgeheven is.''' + +Een beheerder heeft de database geblokkeerd om de volgende reden: $1", +'nocreatetext' => "{{SITENAME}} heeft de mogelijkheid om nieuwe pagina's te maken beperkt. +Je kunt reeds bestaande pagina's wijzigen of je kunt [[Special:UserLogin|jezelf aanmelden of registreren]].", +'nocreate-loggedin' => "Je hebt geen rechten om nieuwe pagina's te maken.", +'permissionserrorstext' => 'Je hebt geen rechten om dit te doen om de volgende {{PLURAL:$1|reden|redenen}}:', +'permissionserrorstext-withaction' => 'Je hebt geen rechten om $2 om de volgende {{PLURAL:$1|reden|redenen}}:', +'recreate-moveddeleted-warn' => "'''Waarschuwing: je bent bezig met het aanmaken van een pagina die in het verleden verwijderd is.''' + +Overweeg of het terecht is dat je verder werkt aan deze pagina. +Voor je gemak staan hieronder het verwijderingslogboek en het hernoemingslogboek voor deze pagina:", +'edit-no-change' => 'Je bewerking is genegeerd, omdat er geen wijziging aan de tekst is gemaakt.', + +# Revision deletion +'rev-deleted-text-unhide' => "Deze versie van de pagina is '''verwijderd'''. +Achtergronden zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek]. +Als beheerder kun je [$1 deze versie bekijken] als je wil.", +'rev-suppressed-text-unhide' => "Deze paginaversie is '''onderdrukt'''. +Achtergronden zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} logboek onderdrukte versies]. +Als beheerder kun je [$1 de verschillen bekijken] als je wil.", +'rev-deleted-text-view' => "Deze bewerking is '''verwijderd'''. +Als beheerder kun je deze zien; +er kunnen details aanwezig zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].", +'rev-suppressed-text-view' => "Deze paginaversie is '''onderdrukt'''. +Als beheerder kun je deze bekijken; +achtergronden zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} logboek onderdrukte versies].", +'rev-deleted-no-diff' => "Je kunt de verschillen niet bekijken, omdat een van de versies is '''verwijderd'''. +Achtergronden zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].", +'rev-suppressed-no-diff' => "Je kunt de verschillen niet bekijken, omdat een van de versies is '''verwijderd'''.", +'rev-deleted-unhide-diff' => "Een van de bewerkingen voor de verschillen die je hebt opgevraagd is '''verwijderd'''. +Achtergronden zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek]. +Als beheerder kun je [$1 de verschillen bekijken] als je wil.", +'rev-suppressed-unhide-diff' => "Een van de versies in deze verschillen is '''onderdrukt'''. +Achtergronden zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verbergingslogboek]. +Als beheerder kunt je [$1 deze versie bekijken] als je wil.", +'rev-deleted-diff-view' => "Een van de bewerkingen voor de verschillen die je hebt opgevraagd, is '''verwijderd'''. +Als beheerder kunt je deze verschillen bekijken. Mogelijk zijn details zichtbaar in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderlogboek].", +'rev-suppressed-diff-view' => "Een van de bewerkingen voor de verschillen die je hebt opgevraagd, is '''onderdrukt'''. +Als beheerder kun je deze verschillen bekijken. Mogelijk zijn details zichtbaar in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verbergingslogboek].", +'revdelete-nooldid-text' => 'Je hebt geen doelversie(s) voor deze handeling opgegeven, de aangegeven versie bestaat niet of je probeert de laatste versie te verbergen.', +'revdelete-nologtype-text' => 'Je hebt geen logboektype opgegeven om deze handeling op uit te voeren.', +'revdelete-nologid-text' => 'Je hebt ofwel geen doellogboekregel opgegeven of de aangegeven logboekregel bestaat niet.', +'revdelete-show-file-confirm' => 'Weet je zeker dat u de verwijderde versie van het bestand "$1" van $2 om $3 wilt bekijken?', +'revdelete-confirm' => 'Bevestig dat je dit wilde doen, dat je de consequenties begrijpt en dat je dit doet in overeenstemming met het geldende [[{{MediaWiki:Policy-url}}|beleid]].', +'revdelete-show-no-access' => 'Er is een fout opgetreden bij het weergeven van het object van $1 om $2 uur: dit object is gemarkeerd als "beschermd". +Je hebt geen toegang tot dit object.', +'revdelete-modify-no-access' => 'Er is een fout opgetreden bij het wijzigen van het object van $1 om $2 uur: dit object is gemarkeerd als "beschermd". +Je hebt geen toegang tot dit object.', +'revdelete-only-restricted' => 'Er is een fout opgetreden bij het verbergen van het item van $1, $2: je kunt geen items onderdrukken uit het zicht van beheerders zonder ook een van de andere zichtbaarheidsopties te selecteren.', + +# History merging +'mergehistory-header' => 'Via deze pagina kun je versies van de geschiedenis van een bronpagina naar een nieuwere pagina samenvoegen. +Zorg dat deze wijziging de geschiedenisdoorlopendheid van de pagina behoudt.', + +# Search results +'searchsubtitle' => 'Je zocht naar \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|pagina\'s die beginnen met "$1"]] {{int:pipe-separator}}[[Special:WhatLinksHere/$1|pagina\'s die verwijzen naar "$1"]])', +'searchsubtitleinvalid' => "Je hebt gezocht naar '''$1'''", +'search-suggest' => 'Bedoelde je: $1', +'nonefound' => "'''Opmerking''': standaard worden niet alle naamruimten doorzocht. +Als je in uw zoekopdracht als voorvoegsel \"''all:''\" gebruikt worden alle pagina's doorzocht (inclusief overlegpagina's, sjablonen, enzovoort). +Je kunt ook een naamruimte als voorvoegsel gebruiken.", +'searchdisabled' => 'Zoeken in {{SITENAME}} is niet mogelijk. +Je kunt gebruik maken van Google. +De gegevens over {{SITENAME}} zijn mogelijk niet bijgewerkt.', + +# Preferences page +'prefsnologintext' => 'Je moet [{{fullurl:{{#Special:UserLogin}}|returnto=$1}} aangemeld] zijn om je voorkeuren te kunnen instellen.', +'prefs-help-watchlist-token' => 'Door hier een geheime sleutel in te vullen wordt een RSS-feed voor je volglijst aangemaakt. +Iedereen die deze sleutel kent kan je volglijst lezen, dus kies een veilige sleutel. +Hier volgt een willekeurig gegenereerde waarde die je kunt gebruiken: $1', +'savedprefs' => 'Je voorkeuren zijn opgeslagen.', +'prefs-reset-intro' => 'Gebruik deze functie om je voorkeuren te herstellen naar de standaardinstellingen. +Deze handeling kan niet ongedaan gemaakt worden.', +'youremail' => 'Je e-mailadres:', +'prefs-help-signature' => 'Reacties op de overlegpagina\'s worden meestal ondertekend met "~~~~". +De tildes worden omgezet in je ondertekening en een datum en tijd van de bewerking.', +'badsiglength' => 'Uw ondertekening is te lang. +Deze moet minder dan $1 {{PLURAL:$1|karakters|karakters}} bevatten.', +'prefs-help-realname' => 'Echte naam is optioneel, als je deze opgeeft kan deze naam gebruikt worden om je erkenning te geven voor uw werk.', +'prefs-help-email' => 'E-mailadres is optioneel, maar maakt het mogelijk om je jouw wachtwoord te e-mailen als je het bent vergeten. +Je kunt ook anderen in staat stellen per e-mail contact met je op te nemen via een verwijzing op je gebruikers- en overlegpagina zonder dat u uw identiteit prijsgeeft.', + +# User rights +'userrights-groups-help' => 'Je kunt de groepen wijzigen waar deze gebruiker lid van is. +* Een aangekruist vakje betekent dat de gebruiker lid is van de groep. +* Een niet aangekruist vakje betekent dat de gebruiker geen lid is van de groep. +* Een "*" betekent dat je een gebruiker niet uit een groep kunt verwijderen nadat je die hebt toegevoegd of vice versa.', +'userrights-no-interwiki' => "Je hebt geen rechten om gebruikersrechten op andere wiki's te wijzigen.", +'userrights-nologin' => 'Je moet jezelf [[Special:UserLogin|aanmelden]] met een gebruiker met de juiste rechten om gebruikersrechten toe te wijzen.', +'userrights-notallowed' => 'Je hebt geen rechten om gebruikersrechten toe te wijzen.', +'userrights-changeable-col' => 'Groepen die je kunt beheren', +'userrights-unchangeable-col' => 'Groepen die je niet kunt beheren', + +# Recent changes linked +'recentchangeslinked-summary' => "Deze speciale pagina geeft de laatste bewerkingen weer op pagina's waarheen verwezen wordt vanaf een aangegeven pagina of vanuit pagina's in een aangegeven pagina een categorie. +Pagina's die op [[Special:Watchlist|je volglijst]] staan worden '''vet''' weergegeven.", + +# Upload +'uploadnologintext' => 'Je moet [[Special:UserLogin|aangemeld]] zijn om bestanden te uploaden.', +'empty-file' => 'Het bestand dat je probeerde te uploaden had geen inhoud.', +'file-too-large' => 'Het bestand dat je probeerde te uploaden was te groot.', +'hookaborted' => 'De wijziging die je probeerde te maken is afgebroken door een uitbreidingshook.', +'emptyfile' => 'Het bestand dat je hebt geüpload lijkt leeg te zijn. +Dit zou kunnen komen door een typefout in de bestandsnaam. +Ga na of je dit bestand werkelijk bedoelde te uploaden.', +'fileexists' => "Er bestaat al een bestand met deze naam. +Controleer '''[[:$1]]''' als je niet zeker weet of je het huidige bestand wilt overschrijven. +[[$1|thumb]]", +'filepageexists' => "De beschrijvingspagina voor dit bestand bestaat al op '''[[:$1]]''', maar er bestaat geen bestand met deze naam. +De samenvatting die je hebt opgegeven zal niet op de beschrijvingspagina verschijnen. +Bewerk de pagina handmatig om je beschrijving daar weer te geven. [[$1|miniatuur]]", +'file-thumbnail-no' => "De bestandsnaam begint met '''$1'''. +Het lijkt een verkleinde afbeelding te zijn ''(miniatuurafbeelding)''. +Als je deze afbeelding in volledige resolutie hebt, upload die afbeelding dan. +Wijzig anders de bestandsnaam.", +'fileexists-forbidden' => 'Er bestaat al een bestand met deze naam, en dat kan niet overschreven worden. +Upload je bestand onder een andere naam. +[[File:$1|thumb|center|$1]]', +'fileexists-shared-forbidden' => 'Er bestaat al een bestand met deze naam bij de gedeelte bestanden. +Als je het bestand alsnog wilt uploaden, ga dan terug en kies een andere naam. +[[File:$1|thumb|center|$1]]', +'file-deleted-duplicate' => 'Een bestand dat identiek is aan dit bestand ([[:$1]]) is voorheen verwijderd. +Raadpleeg het verwijderingslogboek voordat je verder gaat.', +'uploadfromurl-queued' => 'Je upload is in de wachtrij geplaatst.', +'filewasdeleted' => 'Er is eerder een bestand met deze naam verwijderd. +Raadpleeg het $1 voordat je het opnieuw toevoegt.', +'upload-wasdeleted' => "'''Waarschuwing: je bent een bestand dat eerder verwijderd was aan het uploaden.''' + +Controleer of het inderdaad je bedoeling is dit bestand te uploaden. +Het verwijderingslogboek van dit bestand kunt je hier zien:", +'filename-bad-prefix' => "De naam van het bestand dat je aan het uploaden bent begint met '''\"\$1\"''', wat een niet-beschrijvende naam is die meestal automatisch door een digitale camera wordt gegeven. +Kies een duidelijke naam voor je bestand.", +'upload-success-msg' => 'Je upload van [$2] is geslaagd en is beschikbaar: [[:{{ns:file}}:$1]]', +'upload-failure-msg' => 'Er was een probleem met je upload van [$2]: + +$1', +'upload-warning-msg' => 'Er was een probleem met je upload van [$2]. +Ga terug naar het [[Special:Upload/stash/$1|uploadformulier]] om dit probleem te verhelpen.', + +# img_auth script messages +'img-auth-nopathinfo' => 'PATH_INFO mist. +Je server is niet ingesteld om deze informatie door te geven. +Misschien gebruikt deze CGI, en dan wordt img_auth niet ondersteund. +Zie http://www.mediawiki.org/wiki/Manual:Image_Authorization voor meer informatie.', +'img-auth-nologinnWL' => 'Je bent niet aangemeld en "$1" staat niet op de witte lijst.', +'img-auth-isdir' => 'Je probeert de map "$1" te benaderen. +Alleen toegang tot bestanden is toegestaan.', + +# Some likely curl errors. More could be added from +'upload-curl-error28-text' => 'Het duurde te lang voordat de website antwoordde. +Controleer of de website beschikbaar is, wacht even en probeer het dan opnieuw. +Je kunt het misschien proberen als het minder druk is.', + +'upload_source_file' => '(een bestand op je computer)', + +# File description page +'filepage-nofile-link' => 'Er bestaat geen bestand met deze naam, maar je kunt het [$1 uploaden].', + +# File reversion +'filerevert-intro' => "Je bent '''[[Media:$1|$1]]''' aan het terugdraaien tot de [$4 versie op $2, $3].", + +# File deletion +'filedelete-intro' => "Je staat op het punt om het bestand '''[[Media:$1|$1]]''' te verwijderen, inclusief alle eerdere versies.", +'filedelete-intro-old' => "Je bent de versie van '''[[Media:$1|$1]]''' van [$4 $3, $2] aan het verwijderen.", + +# Miscellaneous special pages +'notargettext' => 'Je hebt niet opgegeven voor welke pagina of gebruiker u deze handeling wilt uitvoeren.', +'nopagetext' => 'De pagina die je wilt hernoemen bestaat niet.', + +# Book sources +'booksources-text' => 'Hieronder staat een lijst met koppelingen naar andere websites die nieuwe of gebruikte boeken verkopen, en die wellicht meer informatie over het boek dat je zoekt hebben:', + +# Special:Log +'alllogstext' => 'Dit is het gecombineerde logboek van {{SITENAME}}. +Je kunt ook kiezen voor specifieke logboeken en filteren op gebruiker (hoofdlettergevoelig) en paginanaam (hoofdlettergevoelig).', + +# E-mail user +'mailnologintext' => 'Je moet [[Special:UserLogin|aangemeld]] zijn en een geldig e-mailadres in je [[Special:Preferences|voorkeuren]] vermelden om andere gebruikers te kunnen e-mailen.', +'emailpagetext' => 'Via dit formulier kun je een e-mail aan deze gebruiker verzenden. +Het e-mailadres dat je hebt opgegeven bij [[Special:Preferences|je voorkeuren]] wordt als afzender gebruikt. +De ontvanger kan dus direct naar je reageren.', +'usermaildisabledtext' => 'Je kunt geen e-mail verzenden naar andere gebruikers op deze wiki', +'emailccsubject' => 'Kopie van je bericht aan $1: $2', +'emailsenttext' => 'Je e-mail is verzonden.', + +# Watchlist +'nowatchlist' => 'Je volglijst is leeg.', +'watchlistanontext' => '$1 is noodzakelijk om je volglijst in te zien of te wijzigen.', +'watchnologintext' => 'Je dient [[Special:UserLogin|aangemeld]] te zijn om je volglijst te bewerken.', +'addedwatchtext' => "De pagina \"[[:\$1]]\" is toegevoegd aan je [[Special:Watchlist|volglijst]]. +Toekomstige bewerkingen van deze pagina en de bijbehorende overlegpagina worden op [[Special:Watchlist|je volglijst]] vermeld en worden '''vet''' weergegeven in de [[Special:RecentChanges|lijst van recente wijzigingen]].", +'removedwatchtext' => 'De pagina "[[:$1]]" is van [[Special:Watchlist|je volglijst]] verwijderd.', +'watchnochange' => "Geen van de pagina's op je volglijst is in deze periode bewerkt.", +'watchlist-details' => "Er {{PLURAL:$1|staat één pagina|staan $1 pagina's}} op je volglijst, exclusief overlegpagina's.", +'wlheader-showupdated' => "* Pagina's die zijn bewerkt sinds je laatste bezoek worden '''vet''' weergegeven", +'watchlistcontains' => "Er {{PLURAL:$1|staat 1 pagina|staan $1 pagina's}} op je volglijst.", + +'enotif_lastvisited' => 'Zie $1 voor alle wijzigingen sinds je laatste bezoek.', +'enotif_body' => 'Beste $WATCHINGUSERNAME, + +De pagina $PAGETITLE op {{SITENAME}} is $CHANGEDORCREATED op $PAGEEDITDATE door $PAGEEDITOR, zie $PAGETITLE_URL voor de huidige versie. + +$NEWPAGE + +Samenvatting van de wijziging: $PAGESUMMARY $PAGEMINOREDIT + +Contactgegevens van de auteur: +E-mail: $PAGEEDITOR_EMAIL +Wiki: $PAGEEDITOR_WIKI + +Tenzij je deze pagina bezoekt, komen er geen verdere berichten. Op je volglijst kun je voor alle gevolgde pagina\'s de waarschuwingsinstellingen opschonen. + + Groet van je {{SITENAME}} waarschuwingssysteem. + +-- +Je kunt je volglijstinstellingen wijzigen op: +{{fullurl:Special:Watchlist/edit}} + +Je kunt de pagina van uw volglijst verwijderen via de volgende verwijzing: +$UNWATCHURL + +Feedback en andere assistentie: +{{fullurl:{{MediaWiki:Helppage}}}}', + +# Delete +'historywarning' => "'''Waarschuwing:''' de pagina die je wilt verwijderen heeft ongeveer $1 {{PLURAL:$1|versie|versies}}:", +'confirmdeletetext' => 'Je staat op het punt een pagina te verwijderen, inclusief de geschiedenis. +Bevestig hieronder dat dit inderdaad je bedoeling is, dat je de gevolgen begrijpt en dat de verwijdering overeenstemt met het [[{{MediaWiki:Policy-url}}|beleid]].', + +# Edit tokens +'sessionfailure' => 'Er lijkt een probleem te zijn met je aanmeldsessie. +Je handeling is gestopt uit voorzorg tegen een beveiligingsrisico (dat bestaat uit mogelijke "hijacking" van deze sessie). +Ga een pagina terug, laad die pagina opnieuw en probeer het nog eens.', + +# Protect +'protect-text' => "Hier kun je het beveiligingsniveau voor de pagina '''$1''' bekijken en wijzigen.", +'protect-locked-blocked' => "Je kunt het beveiligingsniveau niet wijzigen terwijl je geblokkeerd bent. +Hier zijn de huidige instellingen voor de pagina '''$1''':", +'protect-locked-access' => "Je hebt geen rechten om het beveiligingsniveau te wijzigen. +Dit zijn de huidige instellingen voor de pagina '''$1''':", +'protect-cantedit' => 'Je kunt het beveiligingsniveau van deze pagina niet wijzigen, omdat je geen rechten hebt om het te bewerken.', + +# Undelete +'undeletehistory' => 'Als je een pagina terugplaatst, worden alle versies hersteld. +Als er al een nieuwe pagina met dezelfde naam is aangemaakt sinds de pagina is verwijderd, worden de eerder verwijderde versies teruggeplaatst en blijft de huidige versie intact.', +'undeleterevision-missing' => 'Ongeldige of missende versie. +Mogelijk heb je een verkeerde verwijzing of is de versie hersteld of verwijderd uit het archief.', +'undelete-show-file-confirm' => 'Weet je zeker dat je een verwijderde versie van het bestand "$1" van $2 om $3 wil bekijken?', + +# Block/unblock +'ipb-needreblock' => '== Deze gebruiker is al geblokkeerd == +$1 is al geblokkeerd. +Wil je de instellingen wijzigen?', +'proxyblockreason' => 'Dit is een automatische preventieve blokkade, omdat je gebruik maakt van een open proxyserver. +Neem contact op met je Internet-provider of je helpdesk en stel die op de hoogte van dit ernstige beveiligingsprobleem.', +'sorbsreason' => 'Je IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.', +'sorbs_create_account_reason' => 'Je IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt. +Je kunt geen gebruiker registreren.', +'cant-block-while-blocked' => 'Je kunt andere gebruikers niet blokkeren terwijl je zelf geblokkeerd bent.', +'cant-see-hidden-user' => "De gebruiker die je probeert te blokken is al geblokkeerd en verborgen. +Omdat je het recht 'hideuser' niet hebt, kun je de blokkade van de gebruiker niet bekijken of bewerken.", +'ipbblocked' => 'Je kunt geen andere gebruikers (de)blokkeren, omdat je zelf geblokkeerd bent', +'ipbnounblockself' => 'Je mag jezelf niet deblokkeren', + +# Developer tools +'lockdbtext' => "Waarschuwing: de database blokkeren heeft tot gevolg dat geen enkele gebruiker meer in staat is pagina's te bewerken, voorkeuren te wijzigen of iets anders te doen waarvoor wijzigingen in de database nodig zijn. + +Bevestig dat je deze handeling wilt uitvoeren en dat je de database vrijgeeft nadat het onderhoud is uitgevoerd.", +'unlockdbtext' => "Na het vrijgeven van de database kunnen gebruikers weer pagina's bewerken, hun voorkeuren wijzigen of iets anders te doen waarvoor er wijzigingen in de database nodig zijn. + +Bevestig dat je deze handeling wil uitvoeren.", +'locknoconfirm' => 'Je hebt je keuze niet bevestigd via het vinkvakje.', +'lockdbsuccesstext' => 'De database is afgesloten.
    +Vergeet niet de [[Special:UnlockDB|database vrij te geven]] zodra je klaar bent met je onderhoud.', + +# Move page +'movepagetext' => "Door middel van het onderstaande formulier kun je een pagina hernoemen. +De geschiedenis gaat mee naar de nieuwe pagina. +* De oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina. +* Verwijzingen naar de oude pagina worden niet aangepast. +* De pagina's die doorverwijzen naar de oorspronkelijke paginanaam worden automatisch bijgewerkt. +Als je dit niet wenst, controleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan. + +Een pagina kan '''alleen''' hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is. + +'''WAARSCHUWING!''' +Voor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben. +Zorg ervoor dat je die gevolgen overziet voordat je deze handeling uitvoert.", +'movepagetalktext' => "De bijbehorende overlegpagina krijgt automatisch een andere naam, '''tenzij''': +* De overlegpagina onder de nieuwe naam al bestaat; +* Je het onderstaande vinkje deselecteert.", +'moveuserpage-warning' => "'''Waarschuwing:''' Je gaat een gebruikerspagina hernoemen. +Houd er rekening mee dat alleen de pagina wordt hernoemd, ''niet'' de gebruiker.", +'movenologintext' => 'Je moet [[Special:UserLogin|aangemeld]] zijn om een pagina te hernoemen.', +'movenotallowed' => "Je hebt geen rechten om pagina's te hernoemen.", +'movenotallowedfile' => 'Je hebt geen rechten om bestanden te hernoemen.', +'cant-move-user-page' => "Je hebt geen rechten om gebruikerspagina's te hernoemen (met uitzondering van subpagina's).", +'cant-move-to-user-page' => 'Je hebt geen rechten om een pagina naar een gebruikerspagina te hernoemen. Hernoemen naar een subpagina is wel mogelijk.', +'cantmove-titleprotected' => 'Je kunt geen pagina naar deze paginaam hernoemen, omdat deze paginanaam beveiligd is tegen het aanmaken ervan.', +'delete_and_move_text' => '==Verwijdering nodig== +Onder de naam "[[:$1]]" bestaat al een pagina. +Wil je deze verwijderen om plaats te maken voor de te hernoemen pagina?', + +# Export +'exporttext' => 'Je kunt de tekst en geschiedenis van een pagina of pagina\'s exporteren naar XML. +Dit exportbestand is daarna te importeren in een andere MediaWiki via de [[Special:Import|importpagina]]. + +Geef in het onderstaande veld de namen van de te exporteren pagina\'s op, één pagina per regel, en geef aan of je alle versies met de bewerkingssamenvatting of alleen de huidige versies met de bewerkingssamenvatting wilt exporteren. + +In het laatste geval kun je ook een verwijzing gebruiken, bijvoorbeeld [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] voor de pagina "[[{{MediaWiki:Mainpage}}]]".', + +# Namespace 8 related +'allmessagestext' => 'Hieronder staan de systeemberichten uit de MediaWiki-naamruimte. +Ga naar [http://www.mediawiki.org/wiki/Localisation MediaWiki-lokalisatie] en [http://translatewiki.net translatewiki.net] als je wilt bijdragen aan de algemene vertaling voor MediaWiki.', + +# Special:Import +'importtext' => 'Gebruik de [[Special:Export|exportfunctie]] in de wiki waar de informatie vandaan komt, sla de uitvoer op je eigen systeem op, en voeg die daarna hier toe.', + +# Tooltip help for the actions +'tooltip-pt-userpage' => 'Jouw gebruikerspagina', +'tooltip-pt-anonuserpage' => 'Gebruikerspagina voor je IP-adres', +'tooltip-pt-mytalk' => 'Jouw overlegpagina', +'tooltip-pt-watchlist' => "Overzicht van pagina's die je volgt", +'tooltip-pt-mycontris' => 'Overzicht van je bijdragen', +'tooltip-pt-login' => 'Je wordt van harte uitgenodigd om je aan te melden als gebruiker, maar dit is niet verplicht', +'tooltip-pt-anonlogin' => 'Je wordt van harte uitgenodigd om je aan te melden als gebruiker, maar dit is niet verplicht', +'tooltip-ca-edit' => 'Je kunt deze pagina bewerken. +Gebruik de voorbeeldweergaveknop alvorens te bewaren.', +'tooltip-ca-viewsource' => 'Deze pagina is beveiligd. +Je kunt wel de broncode bekijken.', +'tooltip-ca-nstab-special' => 'Dit is een speciale pagina, je kunt de pagina zelf niet bewerken', +'tooltip-save' => 'Je wijzigingen opslaan', +'tooltip-watch' => 'Deze pagina aan je volglijst toevoegen', + +# Metadata +'notacceptable' => 'De wikiserver kan de gegevens niet leveren in een vorm die je browser kan lezen.', + +# Spam protection +'spamprotectiontext' => 'De pagina die je wilde opslaan is geblokkeerd door het spamfilter. +Meestal wordt dit door een externe verwijzing op een zwarte lijst veroorzaakt.', + +# Patrolling +'markedaspatrollederror-noautopatrol' => 'Je kunt je eigen wijzigingen niet als gecontroleerd markeren.', + +# Media information +'mediawarning' => "'''Waarschuwing''': dit bestandstype bevat mogelijk programmacode die je systeem schade kan berokkenen.", + +# E-mail address confirmation +'confirmemail_noemail' => 'Je hebt geen geldig e-mailadres ingegeven in je [[Special:Preferences|gebruikersvoorkeuren]].', +'confirmemail_text' => '{{SITENAME}} eist bevestiging van je e-mailadres voordat je de e-mailmogelijkheden kunt gebruiken. +Klik op de onderstaande knop om een bevestigingsbericht te ontvangen. +Dit bericht bevat een verwijzing met een code. +Open die verwijzing om je e-mailadres te bevestigen.', +'confirmemail_pending' => 'Er is al een bevestigingsbericht aan je verzonden. +Als je recentelijk je gebruiker hebt aangemaakt, wacht dan een paar minuten totdat die aankomt voordat je opnieuw een e-mail laat sturen.', +'confirmemail_oncreate' => 'Er is een bevestigingscode naar je e-mailadres verzonden. +Deze code is niet nodig om je aan te melden, maar je dient deze wel te bevestigen voordat je de e-mailmogelijkheden van deze wiki kunt gebruiken.', +'confirmemail_sendfailed' => '{{SITENAME}} kon je bevestigingscode niet verzenden. +Controleer je e-mailadres op ongeldige tekens. + +Het e-mailprogramma meldde: $1', +'confirmemail_needlogin' => 'Je moet $1 om je e-mailadres te bevestigen.', +'confirmemail_success' => 'Je e-mailadres is bevestigd. +Je kunt jezelf nu [[Special:UserLogin|aanmelden]] en {{SITENAME}} gebruiken.', +'confirmemail_loggedin' => 'Je e-mailadres is nu bevestigd.', +'confirmemail_error' => 'Er is iets verkeerd gegaan tijdens het opslaan van je bevestiging.', +'confirmemail_body' => 'Iemand, waarschijnlijk jijzelf, met het IP-adres $1, +heeft zich met dit e-mailadres geregistreerd als gebruiker "$2" op {{SITENAME}}. + +Open de volgende verwijzing in je webbrowser om te bevestigen dat je deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} te activeren: + +$3 + +Als je jezelf *niet* hebt aangemeld, volg dan de volgende verwijzing om de bevestiging van je e-mailadres te annuleren: + +$5 + +De bevestigingscode vervalt op $4.', +'confirmemail_body_changed' => 'Iemand, waarschijnlijk jijzelf, met het IP-adres $1, +heeft het het e-mailadres geregistreerd voor gebruiker "$2" op {{SITENAME}} gewijzigd naar dit e-mailadres. + +Open de volgende verwijzing in je webbrowser om te bevestigen dat je deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren: + +$3 + +Als je jezelf *niet* hebt aangemeld, volg dan de volgende verwijzing om de bevestiging van je e-mailadres te annuleren: + +$5 + +De bevestigingscode vervalt op $4.', + +# Delete conflict +'deletedwhileediting' => "'''Let op''': deze pagina is verwijderd terwijl je bezig was met je bewerking!", +'confirmrecreate' => "Nadat je begonnen bent met je wijziging heeft [[User:$1|$1]] ([[User talk:$1|overleg]]) deze pagina verwijderd met opgave van de volgende reden: +: ''$2'' +Bevestig dat je de pagina opnieuw wilt aanmaken.", + +# Watchlist editor +'watchlistedit-numitems' => 'Je volglijst bevat {{PLURAL:$1|1 pagina|$1 pagina’s}}, zonder overlegpagina’s.', +'watchlistedit-noitems' => 'Je volglijst bevat geen pagina’s.', +'watchlistedit-normal-explain' => 'Hieronder worden de pagina’s op je volglijst weergegeven. +Klik op het vierkantje ernaast en daarna op "{{int:Watchlistedit-normal-submit}}" om een pagina te verwijderen. +Je kunt ook de [[Special:Watchlist/raw|ruwe lijst bewerken]].', +'watchlistedit-normal-done' => 'Er {{PLURAL:$1|is 1 pagina|zijn $1 pagina’s}} verwijderd van je volglijst:', +'watchlistedit-raw-explain' => 'Hieronder staan pagina’s op je volglijst. +Je kunt de lijst bewerken door pagina’s te verwijderen en toe te voegen. +Eén pagina per regel. +Als je klaar bent, klik dan op "{{int:Watchlistedit-raw-submit}}". +Je kunt ook [[Special:Watchlist/edit|het standaard bewerkingsscherm gebruiken]].', +'watchlistedit-raw-done' => 'Jr volglijst is bijgewerkt.', + +# Special:Version +'version-license-info' => 'MediaWiki is vrije software; je kunt MediaWiki verspreiden en/of aanpassen onder de voorwaarden van de GNU General Public License zoals gepubliceerd door de Free Software Foundation; ofwel versie 2 van de Licentie, of - zo je wilt - enige latere versie. + +MediaWiki wordt verspreid in de hoop dat het nuttig is, maar ZONDER ENIGE GARANTIE; zonder zelfs de implicitiete garantie van VERKOOPBAARHEID of GESCHIKHEID VOOR ENIG DOEL IN HET BIJZONDER. Zie de GNU General Public License voor meer informatie. + +Samen met dit programma hoor je een [{{SERVER}}{{SCRIPTPATH}}/COPYING kopie van de GNU General Public License] te hebben ontvangen; zo niet, schrijf dan naar de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA of [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html lees de licentie online].', + +# Database error messages +'dberr-usegoogle' => 'Wellicht kun je in de tussentijd zoeken via Google.', + +# HTML forms +'htmlform-float-invalid' => 'De waarde die je hebt opgegeven is geen getal.', + +); diff --git a/languages/messages/MessagesNn.php b/languages/messages/MessagesNn.php index 02251fbf..2a2581e9 100644 --- a/languages/messages/MessagesNn.php +++ b/languages/messages/MessagesNn.php @@ -96,6 +96,7 @@ $bookstoreList = array( $magicWords = array( 'redirect' => array( '0', '#omdiriger', '#REDIRECT' ), 'notoc' => array( '0', '__INGAINNHALDSLISTE__', '__INGENINNHOLDSLISTE__', '__NOTOC__' ), + 'nogallery' => array( '0', '__INKJEGALLERI__', '__NOGALLERY__' ), 'forcetoc' => array( '0', '__ALLTIDINNHALDSLISTE__', '__ALLTIDINNHOLDSLISTE__', '__FORCETOC__' ), 'toc' => array( '0', '__INNHALDSLISTE__', '__INNHOLDSLISTE__', '__TOC__' ), 'noeditsection' => array( '0', '__INGABOLKENDRING__', '__INGABOLKREDIGERING__', '__INGENDELENDRING__', '__NOEDITSECTION__' ), @@ -118,6 +119,9 @@ $magicWords = array( 'pagenamee' => array( '1', 'SIDENAMNE', 'SIDENAVNE', 'PAGENAMEE' ), 'namespace' => array( '1', 'NAMNEROM', 'NAVNEROM', 'NAMESPACE' ), 'fullpagename' => array( '1', 'FULLTSIDENAMN', 'FULLPAGENAME' ), + 'subpagename' => array( '1', 'UNDERSIDENAMN', 'SUBPAGENAME' ), + 'basepagename' => array( '1', 'HOVUDSIDENAMN', 'BASEPAGENAME' ), + 'talkpagename' => array( '1', 'DISKUSJONSSIDENAMN', 'TALKPAGENAME' ), 'subst' => array( '0', 'LIMINN:', 'SUBST:' ), 'msgnw' => array( '0', 'IKWIKMELD:', 'MSGNW:' ), 'img_thumbnail' => array( '1', 'mini', 'miniatyr', 'thumbnail', 'thumb' ), @@ -128,6 +132,7 @@ $magicWords = array( 'img_width' => array( '1', '$1pk', '$1px' ), 'img_center' => array( '1', 'sentrum', 'center', 'centre' ), 'img_framed' => array( '1', 'ramme', 'ramma', 'framed', 'enframed', 'frame' ), + 'img_link' => array( '1', 'lenkje=$1', 'lenkja=$1', 'link=$1' ), 'sitename' => array( '1', 'NETTSTADNAMN', 'SITENAME' ), 'ns' => array( '0', 'NR:', 'NS:' ), 'localurl' => array( '0', 'LOKALLENKJE:', 'LOKALLENKE:', 'LOCALURL:' ), @@ -140,8 +145,16 @@ $magicWords = array( 'currentweek' => array( '1', 'VEKENRNO', 'UKENRNÅ', 'CURRENTWEEK' ), 'currentdow' => array( '1', 'VEKEDAGNRNO', 'UKEDAGNRNÅ', 'CURRENTDOW' ), 'revisionid' => array( '1', 'VERSJONSID', 'REVISIONID' ), + 'revisionday' => array( '1', 'VERSJONSDAG', 'REVISIONDAY' ), + 'revisionday2' => array( '1', 'VERSJONSDAG2', 'REVISIONDAY2' ), + 'revisionmonth' => array( '1', 'VERSJONSMÅNAD', 'REVISIONMONTH' ), + 'revisionmonth1' => array( '1', 'VERSJONSMÅNAD1', 'REVISIONMONTH1' ), + 'revisionyear' => array( '1', 'VERSJONSÅR', 'REVISIONYEAR' ), + 'revisiontimestamp' => array( '1', 'VERSJONSTIDSTEMPEL', 'REVISIONTIMESTAMP' ), + 'revisionuser' => array( '1', 'VERSJONSBRUKAR', 'REVISIONUSER' ), 'plural' => array( '0', 'FLEIRTAL:', 'PLURAL:' ), 'currentversion' => array( '1', 'VERSJONNO', 'CURRENTVERSION' ), + 'language' => array( '0', '#SPRÅK:', '#LANGUAGE:' ), 'contentlanguage' => array( '1', 'INNHALDSSPRÅK', 'CONTENTLANGUAGE', 'CONTENTLANG' ), 'pagesinnamespace' => array( '1', 'SIDERINAMNEROM', 'PAGESINNAMESPACE:', 'PAGESINNS:' ), 'numberofadmins' => array( '1', 'ADMINTAL', 'ADMINISTRATORTAL', 'NUMBEROFADMINS' ), @@ -171,92 +184,92 @@ $namespaceNames = array( ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'Doble omdirigeringar' ), + 'DoubleRedirects' => array( 'Doble_omdirigeringar' ), 'BrokenRedirects' => array( 'Blindvegsomdirigeringar' ), 'Disambiguations' => array( 'Fleirtydingssider' ), - 'Userlogin' => array( 'Logg inn' ), - 'Userlogout' => array( 'Logg ut' ), - 'CreateAccount' => array( 'Opprett konto' ), + 'Userlogin' => array( 'Logg_inn' ), + 'Userlogout' => array( 'Logg_ut' ), + 'CreateAccount' => array( 'Opprett_konto' ), 'Preferences' => array( 'Innstillingar' ), 'Watchlist' => array( 'Overvakingsliste' ), - 'Recentchanges' => array( 'Siste endringar' ), - 'Upload' => array( 'Last opp' ), + 'Recentchanges' => array( 'Siste_endringar' ), + 'Upload' => array( 'Last_opp' ), 'Listfiles' => array( 'Filliste' ), - 'Newimages' => array( 'Nye filer' ), + 'Newimages' => array( 'Nye_filer' ), 'Listusers' => array( 'Brukarliste' ), 'Listgrouprights' => array( 'Grupperettar' ), 'Statistics' => array( 'Statistikk' ), - 'Randompage' => array( 'Tilfeldig side' ), - 'Lonelypages' => array( 'Foreldrelause sider' ), - 'Uncategorizedpages' => array( 'Ukategoriserte sider' ), - 'Uncategorizedcategories' => array( 'Ukategoriserte kategoriar' ), - 'Uncategorizedimages' => array( 'Ukategoriserte filer' ), - 'Uncategorizedtemplates' => array( 'Ukategoriserte malar' ), - 'Unusedcategories' => array( 'Ubrukte kategoriar' ), - 'Unusedimages' => array( 'Ubrukte filer' ), - 'Wantedpages' => array( 'Etterspurde sider' ), - 'Wantedcategories' => array( 'Etterspurde kategoriar' ), - 'Wantedfiles' => array( 'Etterspurde filer' ), - 'Wantedtemplates' => array( 'Etterspurde malar' ), - 'Mostlinked' => array( 'Mest lenka sider' ), - 'Mostlinkedcategories' => array( 'Mest brukte kategoriar' ), - 'Mostlinkedtemplates' => array( 'Mest brukte malar' ), - 'Mostimages' => array( 'Mest brukte filer' ), - 'Mostcategories' => array( 'Flest kategoriar' ), - 'Mostrevisions' => array( 'Flest endringar' ), - 'Fewestrevisions' => array( 'Færrast endringar' ), - 'Shortpages' => array( 'Korte sider' ), - 'Longpages' => array( 'Lange sider' ), - 'Newpages' => array( 'Nye sider' ), - 'Ancientpages' => array( 'Gamle sider' ), + 'Randompage' => array( 'Tilfeldig_side' ), + 'Lonelypages' => array( 'Foreldrelause_sider' ), + 'Uncategorizedpages' => array( 'Ukategoriserte_sider' ), + 'Uncategorizedcategories' => array( 'Ukategoriserte_kategoriar' ), + 'Uncategorizedimages' => array( 'Ukategoriserte_filer' ), + 'Uncategorizedtemplates' => array( 'Ukategoriserte_malar' ), + 'Unusedcategories' => array( 'Ubrukte_kategoriar' ), + 'Unusedimages' => array( 'Ubrukte_filer' ), + 'Wantedpages' => array( 'Etterspurde_sider' ), + 'Wantedcategories' => array( 'Etterspurde_kategoriar' ), + 'Wantedfiles' => array( 'Etterspurde_filer' ), + 'Wantedtemplates' => array( 'Etterspurde_malar' ), + 'Mostlinked' => array( 'Mest_lenka_sider' ), + 'Mostlinkedcategories' => array( 'Mest_brukte_kategoriar' ), + 'Mostlinkedtemplates' => array( 'Mest_brukte_malar' ), + 'Mostimages' => array( 'Mest_brukte_filer' ), + 'Mostcategories' => array( 'Flest_kategoriar' ), + 'Mostrevisions' => array( 'Flest_endringar' ), + 'Fewestrevisions' => array( 'Færrast_endringar' ), + 'Shortpages' => array( 'Korte_sider' ), + 'Longpages' => array( 'Lange_sider' ), + 'Newpages' => array( 'Nye_sider' ), + 'Ancientpages' => array( 'Gamle_sider' ), 'Deadendpages' => array( 'Blindvegsider' ), - 'Protectedpages' => array( 'Verna sider' ), - 'Protectedtitles' => array( 'Verna sidenamn' ), - 'Allpages' => array( 'Alle sider' ), + 'Protectedpages' => array( 'Verna_sider' ), + 'Protectedtitles' => array( 'Verna_sidenamn' ), + 'Allpages' => array( 'Alle_sider' ), 'Prefixindex' => array( 'Prefiksindeks' ), 'Ipblocklist' => array( 'Blokkeringsliste' ), 'Specialpages' => array( 'Spesialsider' ), 'Contributions' => array( 'Bidrag' ), 'Emailuser' => array( 'E-post' ), - 'Confirmemail' => array( 'Stadfest e-postadresse' ), - 'Whatlinkshere' => array( 'Lenkjer hit' ), - 'Recentchangeslinked' => array( 'Relaterte endringar' ), - 'Movepage' => array( 'Flytt side' ), - 'Blockme' => array( 'Blokker meg' ), + 'Confirmemail' => array( 'Stadfest_e-postadresse' ), + 'Whatlinkshere' => array( 'Lenkjer_hit' ), + 'Recentchangeslinked' => array( 'Relaterte_endringar' ), + 'Movepage' => array( 'Flytt_side' ), + 'Blockme' => array( 'Blokker_meg' ), 'Booksources' => array( 'Bokkjelder' ), 'Categories' => array( 'Kategoriar' ), 'Export' => array( 'Eksport' ), 'Version' => array( 'Versjon' ), - 'Allmessages' => array( 'Alle systemmeldingar' ), + 'Allmessages' => array( 'Alle_systemmeldingar' ), 'Log' => array( 'Logg', 'Loggar' ), 'Blockip' => array( 'Blokker' ), 'Undelete' => array( 'Attopprett' ), 'Import' => array( 'Importer' ), - 'Lockdb' => array( 'Lås database' ), - 'Unlockdb' => array( 'Opne database' ), + 'Lockdb' => array( 'Lås_database' ), + 'Unlockdb' => array( 'Opne_database' ), 'Userrights' => array( 'Brukarrettar' ), 'MIMEsearch' => array( 'MIME-søk' ), 'FileDuplicateSearch' => array( 'Filduplikatsøk' ), - 'Unwatchedpages' => array( 'Uovervaka sider' ), + 'Unwatchedpages' => array( 'Uovervaka_sider' ), 'Listredirects' => array( 'Omdirigeringsliste' ), 'Revisiondelete' => array( 'Versjonssletting' ), - 'Unusedtemplates' => array( 'Ubrukte malar' ), - 'Randomredirect' => array( 'Tilfeldig omdirigering' ), - 'Mypage' => array( 'Sida mi' ), - 'Mytalk' => array( 'Diskusjonssida mi' ), - 'Mycontributions' => array( 'Bidraga mine' ), + 'Unusedtemplates' => array( 'Ubrukte_malar' ), + 'Randomredirect' => array( 'Tilfeldig_omdirigering' ), + 'Mypage' => array( 'Sida_mi' ), + 'Mytalk' => array( 'Diskusjonssida_mi' ), + 'Mycontributions' => array( 'Bidraga_mine' ), 'Listadmins' => array( 'Administratorliste', 'Administratorar' ), 'Listbots' => array( 'Bottliste', 'Bottar' ), - 'Popularpages' => array( 'Populære sider' ), + 'Popularpages' => array( 'Populære_sider' ), 'Search' => array( 'Søk' ), - 'Resetpass' => array( 'Nullstill passord' ), - 'Withoutinterwiki' => array( 'Utan interwiki' ), + 'Resetpass' => array( 'Nullstill_passord' ), + 'Withoutinterwiki' => array( 'Utan_interwiki' ), 'MergeHistory' => array( 'Flettehistorie' ), 'Filepath' => array( 'Filsti' ), - 'Invalidateemail' => array( 'Gjer e-post ugyldig' ), - 'Blankpage' => array( 'Tom side' ), + 'Invalidateemail' => array( 'Gjer_e-post_ugyldig' ), + 'Blankpage' => array( 'Tom_side' ), 'LinkSearch' => array( 'Lenkjesøk' ), - 'DeletedContributions' => array( 'Sletta brukarbidrag' ), + 'DeletedContributions' => array( 'Sletta_brukarbidrag' ), 'Tags' => array( 'Merke' ), ); @@ -282,8 +295,7 @@ $messages = array( 'tog-editsection' => 'Endre avsnitt ved hjelp av [endre]-lenkje', 'tog-editsectiononrightclick' => 'Endre avsnitt ved å høgreklikke på avsnittsoverskrift (JavaScript)', 'tog-showtoc' => 'Vis innhaldsliste (for sider med meir enn tre bolkar)', -'tog-rememberpassword' => 'Hugs passordet til neste gong', -'tog-editwidth' => 'Utvid endringsboksen til full skjermbreidd', +'tog-rememberpassword' => 'Hugs innlogginga mi med denne nettlesaren (for høgst {{PLURAL:$1|éin dag|$1 dagar}})', 'tog-watchcreations' => 'Legg til sidene eg opprettar på overvakingslista mi', 'tog-watchdefault' => 'Legg til sidene eg endrar på overvakingslista mi', 'tog-watchmoves' => 'Legg til sidene eg flyttar på overvakingslista mi', @@ -385,7 +397,7 @@ $messages = array( 'category_header' => 'Artiklar i kategorien «$1»', 'subcategories' => 'Underkategoriar', 'category-media-header' => 'Media i kategorien «$1»', -'category-empty' => "''Denne kategorien inneheld for tida ingen sider eller mediefiler.''", +'category-empty' => "''Kategorien inneheld for tida ingen sider eller mediefiler.''", 'hidden-categories' => '{{PLURAL:$1|Gøymd kategori|Gøymde kategoriar}}', 'hidden-category-category' => 'Gøymde kategoriar', 'category-subcat-count' => 'Kategorien har {{PLURAL:$2|berre den følgjande underkategorien|{{PLURAL:$1|den følgjande underkategorien|dei følgjande $1 underkategoriane}}, av totalt $2}}.', @@ -430,31 +442,21 @@ $messages = array( 'faqpage' => 'Project:OSS', # Vector skin -'vector-action-addsection' => 'Nytt emne', -'vector-action-delete' => 'Slett', -'vector-action-move' => 'Flytt', -'vector-action-protect' => 'Vern', -'vector-action-undelete' => 'Gjenopprett', -'vector-action-unprotect' => 'Opphev vern', -'vector-namespace-category' => 'Kategori', -'vector-namespace-help' => 'Hjelpeside', -'vector-namespace-image' => 'Fil', -'vector-namespace-main' => 'Side', -'vector-namespace-media' => 'Mediaside', -'vector-namespace-mediawiki' => 'Melding', -'vector-namespace-project' => 'Prosjektside', -'vector-namespace-special' => 'Spesialside', -'vector-namespace-talk' => 'Diskusjon', -'vector-namespace-template' => 'Mal', -'vector-namespace-user' => 'Brukarside', -'vector-view-create' => 'Opprett', -'vector-view-edit' => 'Endre', -'vector-view-history' => 'Sjå historikken', -'vector-view-view' => 'Les', -'vector-view-viewsource' => 'Sjå kjelda', -'actions' => 'Handlingar', -'namespaces' => 'Namnerom', -'variants' => 'Variantar', +'vector-action-addsection' => 'Nytt emne', +'vector-action-delete' => 'Slett', +'vector-action-move' => 'Flytt', +'vector-action-protect' => 'Vern', +'vector-action-undelete' => 'Gjenopprett', +'vector-action-unprotect' => 'Opphev vern', +'vector-simplesearch-preference' => 'Slå på betra søkjeframlegg (einast i Vector-drakta)', +'vector-view-create' => 'Opprett', +'vector-view-edit' => 'Endre', +'vector-view-history' => 'Sjå historikken', +'vector-view-view' => 'Les', +'vector-view-viewsource' => 'Sjå kjelda', +'actions' => 'Handlingar', +'namespaces' => 'Namnerom', +'variants' => 'Variantar', 'errorpagetitle' => 'Feil', 'returnto' => 'Attende til $1.', @@ -515,6 +517,9 @@ For mange brukarar prøver å sjå denne sida. Vent ei lita stund, før du prøver å sjå på sida. $1', +'pool-timeout' => 'Tidsavbrot under venting på låsing.', +'pool-queuefull' => 'Køen er full.', +'pool-errorunknown' => 'Ukjend feil', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Om {{SITENAME}}', @@ -666,7 +671,8 @@ Hugs at du kan endre på [[Special:Preferences|innstillingane]] dine.', 'yourname' => 'Brukarnamn:', 'yourpassword' => 'Passord:', 'yourpasswordagain' => 'Skriv opp att passordet', -'remembermypassword' => 'Hugs passordet.', +'remembermypassword' => 'Hugs innlogginga mi på denne datamaskinen (i høgst {{PLURAL:$1|éin dag|$1 dagar}})', +'securelogin-stick-https' => 'Fortset HTTPS-tilkopling etter innlogging.', 'yourdomainname' => 'Domenet ditt', 'externaldberror' => 'Det var anten ein ekstern databasefeil i tilgjengekontrollen, eller du har ikkje løyve til å oppdatere den eksterne kontoen din.', 'login' => 'Logg inn', @@ -683,6 +689,7 @@ Hugs at du kan endre på [[Special:Preferences|innstillingane]] dine.', 'gotaccount' => "Har du ein brukarkonto? '''$1'''.", 'gotaccountlink' => 'Logg inn', 'createaccountmail' => 'over e-post', +'createaccountreason' => 'Årsak:', 'badretype' => 'Passorda du skreiv inn er ikkje like.', 'userexists' => 'Brukarnamnet er alt i bruk. Vel eit anna.', 'loginerror' => 'Innloggingsfeil', @@ -703,6 +710,7 @@ Brukarnamn skil mellom stor og liten bokstav. Sjekk at du har skrive brukarnamet 'wrongpasswordempty' => 'Du oppgav ikkje noko passord. Ver venleg og prøv igjen.', 'passwordtooshort' => 'Passord må innehalda minst {{PLURAL:$1|eitt teikn|$1 teikn}}.', 'password-name-match' => 'Passordet ditt lyt vera noko anna enn brukarnamnet ditt.', +'password-login-forbidden' => 'Bruk av dette brukarnamnet og passordet er vorte forbode.', 'mailmypassword' => 'Send nytt passord', 'passwordremindertitle' => 'Nytt passord til {{SITENAME}}', 'passwordremindertext' => 'Nokon (truleg du, frå IP-adressa $1) bad oss sende deg eit nytt passord til {{SITENAME}} ($4). Eit mellombels passord for «$2» er oppretta, og er sett til «$3». Om det var det du ville, må du logge inn @@ -735,6 +743,9 @@ Du kan sjå bort frå denne meldinga dersom kontoen vart oppretta med eit uhell. 'loginlanguagelabel' => 'Språk: $1', 'suspicious-userlogout' => 'Førespurnaden din om å logge ut vart nekta fordi han såg ut til å vere sendt av ein øydelagt nettlesar eller mellomtenar.', +# E-mail sending +'php-mail-error-unknown' => 'Ukjend feil i PHPs mail()-funksjon', + # Password reset dialog 'resetpass' => 'Endra passord', 'resetpass_announce' => 'Du logga inn med eit mellombels passord du fekk på e-post. For å fullføre innlogginga må du lage eit nytt passord her:', @@ -786,9 +797,11 @@ Du kan allereie ha byta passordet, eller ha bede om å få eit nytt mellombels p 'showlivepreview' => 'Levande førehandsvising', 'showdiff' => 'Vis skilnad', 'anoneditwarning' => "'''Åtvaring:''' Du er ikkje innlogga. IP-adressa di vert lagra i historikken for denne sida.", +'anonpreviewwarning' => "''Du er ikkje innlogga. Lagrar du vil IP-adressa di verta førd opp i endringshistorikken til denne sida.''", 'missingsummary' => "'''Påminning:''' Du har ikkje skrive noko endringssamandrag. Dersom du trykkjer «Lagre» ein gong til, vert endringa di lagra utan.", 'missingcommenttext' => 'Ver venleg og skriv ein kommentar nedanfor.', -'missingcommentheader' => "'''Påminning:''' Du har ikkje oppgjeve noko emne/overskrift for denne kommentaren. Dersom du trykkjer «Lagre» ein gong til, vert endringa di lagra utan.", +'missingcommentheader' => "'''Påminning:''' Du har ikkje oppgjeve noko emne/overskrift for denne kommentaren. +Dersom du trykkjer «{{int:savearticle}}» ein gong til, vert endringa di lagra utan.", 'summary-preview' => 'Førehandsvising av endringssamandraget:', 'subject-preview' => 'Førehandsvising av emne/overskrift:', 'blockedtitle' => 'Brukaren er blokkert', @@ -854,7 +867,11 @@ Det siste elementet i blokkeringsloggen er oppgjeve nedanfor:', 'userjsyoucanpreview' => "''Tips:''' Bruk «{{int:showpreview}}»-knappen for å teste den nye CSS- eller JavaScript-koden din før du lagrar.", 'usercsspreview' => "'''Hugs at dette berre er ei førehandsvising av din eigen CSS og at han ikkje er lagra enno!'''", 'userjspreview' => "'''Hugs at du berre testar ditt eige JavaScript, det har ikkje vorte lagra enno!!'''", -'userinvalidcssjstitle' => "'''Åtvaring:''' Det finst ikkje noka sidedrakt som heiter «$1». Hugs på at vanlege .css- og .js-sider brukar titlar med små bokstavar, til dømes {{ns:user}}:Døme/monobook.css, og ikkje {{ns:user}}:Døme/Monobook.css.", +'sitecsspreview' => "'''Hugs at du berre førehandsviser dette stilarket. ''' +'''Det er ikkje lagra enno!'''", +'sitejspreview' => "'''Hugs at du berre førehandsviser denne JavaScript-koden.''' +'''Han er ikkje lagra enno!'''", +'userinvalidcssjstitle' => "'''Åtvaring:''' Det finst ikkje noka sidedrakt som heiter «$1». Hugs på at vanlege .css- og .js-sider brukar titlar med små bokstavar, til dømes {{ns:user}}:Døme/vector.css, og ikkje {{ns:user}}:Døme/Vector.css.", 'updated' => '(Oppdatert)', 'note' => "'''Merk:'''", 'previewnote' => "'''Hugs at dette berre er ei førehandsvising og at teksten ikkje er lagra!'''", @@ -890,7 +907,6 @@ Teksten må du ha skrive sjølv, eller kopiert frå ein ressurs som er kompatibe Teksten må du ha skrive sjølv eller ha kopiert frå ein ressurs som er kompatibel med vilkåra eller ikkje verna av opphavsrett (sjå $1 for detaljar). '''LEGG ALDRI INN MATERIALE SOM ANDRE HAR OPPHAVSRETT TIL UTAN LØYVE FRÅ DEI!'''", -'longpagewarning' => "'''ÅTVARING: Denne sida er $1 kB lang; nokre nettlesarar kan ha problem med å handsama endringar av sider som nærmar seg eller er lengre enn 32 kB. Du bør vurdere å dele opp sida i mindre bolkar.'''
    ", 'longpageerror' => "'''Feil: Teksten du har prøvd å lagre er $1 kilobyte lang, altså lenger enn $2 kilobyte som er maksimum. Han kan difor ikkje lagrast.'''", 'readonlywarning' => "'''ÅTVARING: Databasen er skriveverna på grunn av vedlikehald, så du kan ikkje lagre endringane dine akkurat no. Det kan vera lurt å kopiere teksten din til ei tekstfil, så du kan lagre han her seinare.''' @@ -989,7 +1005,7 @@ Grunnen som vart gjeven av $3 er ''$2''", 'history-feed-empty' => 'Den etterspurde sida finst ikkje. Ho kan vere sletta frå wikien, eller vere flytta. Prøv å [[Special:Search|søke på wikien]] for relevante nye sider.', # Revision deletion -'rev-deleted-comment' => '(samandraget er fjerna)', +'rev-deleted-comment' => '(endringssamandrag fjerna)', 'rev-deleted-user' => '(brukarnamnet er fjerna)', 'rev-deleted-event' => '(fjerna loggoppføring)', 'rev-deleted-user-contribs' => 'brukarnamn eller IP-adresse er fjerna - endringa er skjult i bidraga', @@ -1061,6 +1077,8 @@ $1", 'logdelete-failure' => "'''Korleis loggen skal vera synleg kunne ikkje verta stilt inn:''' $1", 'revdel-restore' => 'endra synlegheita', +'revdel-restore-deleted' => 'sletta versjonar', +'revdel-restore-visible' => 'synlege versjonar', 'pagehist' => 'Sidehistorikk', 'deletedhist' => 'Sletta historikk', 'revdelete-content' => 'innhald', @@ -1129,11 +1147,13 @@ Pass på at den nye sida også har innhald frå den innfletta sida.', # Diffs 'history-title' => 'Historikken til «$1»', 'difference' => '(Skilnad mellom versjonar)', +'difference-multipage' => '(Skilnad mellom sider)', 'lineno' => 'Line $1:', 'compareselectedversions' => 'Samanlikn valde versjonar', 'showhideselectedversions' => 'Syn/skjul valde versjonar', 'editundo' => 'angre', -'diff-multi' => '({{PLURAL:$1|Éin versjon mellom desse er ikkje vist|$1 versjonar mellom desse er ikkje viste}}.)', +'diff-multi' => '({{PLURAL:$1|Éin mellomversjon|$1 mellomversjonar}} frå {{PLURAL:$2|éin brukar|$2 brukarar}} er ikkje {{PLURAL:$1|vist|viste}})', +'diff-multi-manyusers' => '({{PLURAL:$1|Ein mellomversjon|$1 mellomversjonar}} av meir enn $2 {{PLURAL:$2|brukar|brukarar}} er ikkje {{PLURAL:$1|vist|viste}})', # Search results 'searchresults' => 'Søkjeresultat', @@ -1168,6 +1188,7 @@ Pass på at den nye sida også har innhald frå den innfletta sida.', 'searchprofile-everything-tooltip' => 'Søk i alt innhald (inkludert diskusjonssider)', 'searchprofile-advanced-tooltip' => 'Søk i visse namnerom', 'search-result-size' => '$1 ({{PLURAL:$2|eitt|$2}} ord)', +'search-result-category-size' => '{{PLURAL:$1|1 medlem|$1 medlemmer}} ({{PLURAL:$2|1 underkategori|$2 underkategoriar}}, {{PLURAL:$3|1 fil|$3 filer}})', 'search-result-score' => 'Relevans: $1 %', 'search-redirect' => '(omdirigering $1)', 'search-section' => '(bolken $1)', @@ -1245,6 +1266,7 @@ Ver merksam på at registra deira kan vera utdaterte.', 'contextlines' => 'Liner per resultat', 'contextchars' => 'Teikn per line i resultatet', 'stub-threshold' => 'Grense (i byte) for at frø/spirer skal formaterast slik:', +'stub-threshold-disabled' => 'Deaktivert', 'recentchangesdays' => 'Tal på dagar som viser på siste endringar:', 'recentchangesdays-max' => '(høgst $1 {{PLURAL:$1|dag|dagar}})', 'recentchangescount' => 'Tal på endringar som viser som standard:', @@ -1278,6 +1300,7 @@ Her er det framlegg til eit tal som kan nyttast, tilfelleleg henta fram: $1', 'prefs-files' => 'Filer', 'prefs-custom-css' => 'Eigendefinert CSS', 'prefs-custom-js' => 'Eigendefinert JavaScript', +'prefs-common-css-js' => 'Delt CSS/JavaScript for alle draktene:', 'prefs-reset-intro' => 'Du kan nytta denne sida til å tilbakestilla innstillingane dine til standardinnstillingane. Dette kan ikke tilbakestillast.', 'prefs-emailconfirm-label' => 'Stadfesting av e-post:', @@ -1314,9 +1337,15 @@ Du kan òg velje å la andre brukarar kontakte deg på e-post via brukarsida di 'prefs-advancedrendering' => 'Avanserte val', 'prefs-advancedsearchoptions' => 'Avanserte val', 'prefs-advancedwatchlist' => 'Avanserte val', -'prefs-display' => 'Val for vising', +'prefs-displayrc' => 'Val for vising', +'prefs-displaysearchoptions' => 'Val for vising', +'prefs-displaywatchlist' => 'Val for vising', 'prefs-diffs' => 'Skilnader', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'E-postadressa ser ut til å vera gyldig', +'email-address-validity-invalid' => 'Skriv inn ei gyldig e-postaddresse.', + # User rights 'userrights' => 'Administrering av brukartilgang', 'userrights-lookup-user' => 'Administrer brukargrupper', @@ -1400,6 +1429,7 @@ Du kan òg velje å la andre brukarar kontakte deg på e-post via brukarsida di 'right-hideuser' => 'Blokkere eit brukarnamn og skjule det frå ålmenta.', 'right-ipblock-exempt' => 'Kan gjere endringar frå blokkerte IP-adresser', 'right-proxyunbannable' => 'Kan gjere endringar frå blokkerte proxyar', +'right-unblockself' => 'Avblokkera seg sjølve', 'right-protect' => 'Endre vernenivå', 'right-editprotected' => 'Endre verna sider', 'right-editinterface' => 'Redigere brukargrensesnittet', @@ -1422,7 +1452,6 @@ Du kan òg velje å la andre brukarar kontakte deg på e-post via brukarsida di 'right-siteadmin' => 'Låse og låse opp databasen', 'right-reset-passwords' => 'Nullstilla passorda til andre brukarar', 'right-override-export-depth' => 'Eksporter sider inkludert lenkte sider til ei djupn på 5', -'right-versiondetail' => 'Syn utvida informasjon om versjonen av programvara', 'right-sendemail' => 'Senda e-post til andre brukarar', # User rights log @@ -1473,14 +1502,9 @@ Du kan òg velje å la andre brukarar kontakte deg på e-post via brukarsida di 'recentchanges-legend' => 'Alternativ for siste endringar', 'recentchangestext' => 'På denne sida ser du dei sist endra sidene i {{SITENAME}}.', 'recentchanges-feed-description' => 'Fylg med på dei siste endringane på denne wikien med dette abonnementet.', -'recentchanges-label-legend' => 'Forklaring: $1.', -'recentchanges-legend-newpage' => '$1 – ny side', 'recentchanges-label-newpage' => 'Denne redigeringa oppretta ei ny side', -'recentchanges-legend-minor' => '$1 – mindre endring', 'recentchanges-label-minor' => 'Dette er ei mindre endring', -'recentchanges-legend-bot' => '$1 – botendring', 'recentchanges-label-bot' => 'Denne endringa vart gjort av ein bot', -'recentchanges-legend-unpatrolled' => '$1 – upatruljert endring', 'recentchanges-label-unpatrolled' => 'Denne endringa er ikkje patruljert enno', 'rcnote' => "Nedanfor er {{PLURAL:$1|den siste endringa|dei siste '''$1''' endringane}} gjort {{PLURAL:$2|den siste dagen|dei siste '''$2''' dagane}}, sidan $4, kl. $5.", 'rcnotefrom' => "Nedanfor vert opp til '''$1''' endringar sidan ''' $2''' viste.", @@ -1527,6 +1551,9 @@ Du kan òg velje å la andre brukarar kontakte deg på e-post via brukarsida di 'upload_directory_missing' => 'Opplastingsmappa ($1) manglar og kunne ikkje opprettast av tenaren.', 'upload_directory_read_only' => 'Opplastingsmappa ($1) er skriveverna.', 'uploaderror' => 'Feil under opplasting av fil', +'upload-recreate-warning' => "'''Åtvaring: Ei fil med dette namnet er vorten sletta eller flytta.''' + +Slette- og flytteloggen til sida er gjeven opp her:", 'uploadtext' => "Bruk skjemaet under for å laste opp filer. For å sjå eller søkje i eksisterande filer, gå til [[Special:FileList|fillista]]. Opplastingar vert òg lagra i [[Special:Log/upload|opplastingsloggen]], og slettingar i [[Special:Log/delete|sletteloggen]]. @@ -1560,6 +1587,17 @@ For å bruke ei fil på ei side, bruk ei lenkje på eit liknande format: 'filetype-banned-type' => "«'''.$1'''» er ikkje ein tillaten filtype. {{PLURAL:$3|Tillaten filtype er|Tillatne filtypar er}} $2.", 'filetype-missing' => 'Fila har inga ending (som t.d. «.jpg»).', +'empty-file' => 'Fila du leverte var tom.', +'file-too-large' => 'Fila du leverte var for stor.', +'filename-tooshort' => 'Filnamnet er for kort.', +'filetype-banned' => 'Denne filtypen er ikkje tillaten.', +'verification-error' => 'Denne fila klarde ikkje verifiseringsprossesen.', +'hookaborted' => "Endringane du prøvde gjere blei avbrotne av ei ''extension hook''.", +'illegal-filename' => 'Filnamnet er ikkje tillate.', +'overwrite' => 'Det er ikkje tillate å skriva over ei eksisterande fil.', +'unknown-error' => 'Det oppstod ein ukjend feil.', +'tmp-create-error' => 'Kunne ikkje opprette midlertidig fil.', +'tmp-write-error' => 'Feil ved skriving av midlertidig fil.', 'large-file' => 'Det er tilrådd at filene ikkje er større enn $1, denne fila er $2.', 'largefileserver' => 'Denne fila er større enn det tenaren tillèt.', 'emptyfile' => 'Det ser ut til at fila du lasta opp er tom. Dette kan komma av ein skrivefeil i filnamnet. Sjekk og tenk etter om du verkeleg vil laste opp fila.', @@ -1583,13 +1621,13 @@ Om du framleis ynskjer å laste opp fila, lyt du gå attende og nytte eit anna n Om du framleis ønskjer å laste opp fila, gå tilbake og last ho opp med eit anna namn. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Denne fila er ein duplikat av følgjande {{PLURAL:$1|fil|filer}}:', 'file-deleted-duplicate' => 'Ei identisk fil ([[:$1]]) er tidlegare sletta. Du bør sjekka slettehistorikken hennar før du held fram med å lasta henne opp på nytt.', -'successfulupload' => 'Opplastinga er ferdig', 'uploadwarning' => 'Opplastingsåtvaring', 'uploadwarning-text' => 'Ver venleg og endra filskildringa nedanfor og prøv på nytt', 'savefile' => 'Lagre fil', 'uploadedimage' => 'Lasta opp «[[$1]]»', 'overwroteimage' => 'lasta opp ein ny versjon av «[[$1]]»', 'uploaddisabled' => 'Beklagar, funksjonen for opplasting er deaktivert på denne nettenaren.', +'copyuploaddisabled' => 'Opplasting gjennom URL er slege av.', 'uploaddisabledtext' => 'Filopplasting er slått av.', 'php-uploaddisabledtext' => 'PHP-filopplasting er deaktivert. Sjå innstillinga for file_uploads.', 'uploadscripted' => 'Fila inneheld HTML- eller skriptkode som feilaktig kan bli tolka og køyrd av nettlesarar.', @@ -1622,6 +1660,14 @@ JD # Jenoptik MGP # Pentax PICT # div. # ', +'upload-success-subj' => 'Opplastinga er ferdig', +'upload-success-msg' => 'Opplastinga di frå [$2] var vellukka. Han er tilgjengeleg her: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Opplastingsproblem', +'upload-failure-msg' => 'Det oppstod eit problem med opplastinga di frå [$2]: + +$1', +'upload-warning-subj' => 'Opplastingsåtvaring', +'upload-warning-msg' => 'Det oppstod eit problem med opplastinga di frå [$2]. Du kan gå attende til [[Special:Upload/stash/$1|opplastingsskjemaet]] for å løysa dette problemet.', 'upload-proto-error' => 'Feil protokoll', 'upload-proto-error-text' => 'Fjernopplasting krev nettadresser som byrjar med http:// eller ftp://.', @@ -1679,6 +1725,7 @@ For best tryggleik, er img_auth.php sett ut av funksjon.', 'listfiles_search_for' => 'Søk etter filnamn:', 'imgfile' => 'fil', 'listfiles' => 'Filliste', +'listfiles_thumb' => 'Miniatyrbilete', 'listfiles_date' => 'Dato', 'listfiles_name' => 'Namn', 'listfiles_user' => 'Brukar', @@ -1792,7 +1839,6 @@ Skildringa frå [$2 filskildringssida] der er vist nedanfor.', 'statistics-edits-average' => 'Gjennomsnittleg tal på endringar per side', 'statistics-views-total' => 'Totalt visningstal', 'statistics-views-peredit' => 'Visingar per endring', -'statistics-jobqueue' => 'Lengda på [http://www.mediawiki.org/wiki/Manual:Job_queue jobbkøen]', 'statistics-users' => 'Registrerte [[Special:ListUsers|brukarar]]', 'statistics-users-active' => 'Aktive brukarar', 'statistics-users-active-desc' => 'Brukarar som har utført handlingar {{PLURAL:$1|i dag|dei siste $1 dagane}}', @@ -1803,7 +1849,7 @@ Skildringa frå [$2 filskildringssida] der er vist nedanfor.', 'disambiguations-text' => "Sidene nedanfor har lenkje til ei '''fleirtydingsside'''. Dei bør ha lenkje til det rette oppslagsordet i staden for.
    Sider vert handsama som fleirtydingssider dersom dei inneheld ein mal som har lenkje på [[MediaWiki:Disambiguationspage]].", 'doubleredirects' => 'Doble omdirigeringar', -'doubleredirectstext' => 'Kvar line inneheld lenkjer til den første og den andre omdirigeringa, og den første lina frå den andre omdirigeringsteksten. Det gjev som regel den «rette» målartikkelen, som den første omdirigeringa skulle ha peikt på. Overstrykne liner har vorte retta på.', +'doubleredirectstext' => 'Kvar line inneheld lenkjer til den første og den andre omdirigeringa, og den første lina frå den andre omdirigeringsteksten. Det gjev som regel den «rette» målartikkelen, som den første omdirigeringa skulle ha peikt på. Overstrykne liner har vorte retta på.', 'double-redirect-fixed-move' => '[[$1]] har blitt flytta, og er no ei omdirigering til [[$2]]', 'double-redirect-fixer' => 'Omdirigeringsfiksar', @@ -1826,6 +1872,8 @@ Skildringa frå [$2 filskildringssida] der er vist nedanfor.', 'nmembers' => '$1 {{PLURAL:$1|medlem|medlemmer}}', 'nrevisions' => '{{PLURAL:$1|Éin versjon|$1 versjonar}}', 'nviews' => '{{PLURAL:$1|Éi vising|$1 visingar}}', +'nimagelinks' => 'Brukt på $1 {{PLURAL:$1|side|sider}}', +'ntransclusions' => 'brukt på $1 {{PLURAL:$1|side|sider}}', 'specialpage-empty' => 'Denne sida er tom.', 'lonelypages' => 'Foreldrelause sider', 'lonelypagestext' => 'Følgjande sider er ikkje lenkja til på andre sider på {{SITENAME}}.', @@ -1979,34 +2027,36 @@ Sjå òg [[Special:WantedCategories|ønska kategoriar]].', 'listgrouprights-removegroup-self-all' => 'Kan ta vekk alle gruppene frå sin eigen konto', # E-mail user -'mailnologin' => 'Inga avsendaradresse', -'mailnologintext' => 'Du lyt vera [[Special:UserLogin|innlogga]] og ha ei gyldig e-postadresse sett i [[Special:Preferences|brukarinnstillingane]] for å sende e-post åt andre brukarar.', -'emailuser' => 'Send e-post åt denne brukaren', -'emailpage' => 'Send e-post åt brukar', -'emailpagetext' => 'Du kan nytte skjemaet nedanfor til å sende ein e-post til denne brukaren. +'mailnologin' => 'Inga avsendaradresse', +'mailnologintext' => 'Du lyt vera [[Special:UserLogin|innlogga]] og ha ei gyldig e-postadresse sett i [[Special:Preferences|brukarinnstillingane]] for å sende e-post åt andre brukarar.', +'emailuser' => 'Send e-post åt denne brukaren', +'emailpage' => 'Send e-post åt brukar', +'emailpagetext' => 'Du kan nytte skjemaet nedanfor til å sende ein e-post til denne brukaren. E-postadressa du har sett i [[Special:Preferences|innstillingane dine]] vil dukke opp i «frå»-feltet på denne e-posten, så mottakaren er i stand til å svare.', -'usermailererror' => 'E-post systemet gav feilmelding:', -'defemailsubject' => '{{SITENAME}} e-post', -'noemailtitle' => 'Inga e-postadresse', -'noemailtext' => 'Denne brukaren har ikkje oppgjeve ei gyldig e-postadresse.', -'nowikiemailtitle' => 'Ingen e-post tillaten', -'nowikiemailtext' => 'Denne brukaren har vald å ikkje motta e-postar frå andre brukarar.', -'email-legend' => 'Send ein e-post til ein annan {{SITENAME}}-brukar', -'emailfrom' => 'Frå:', -'emailto' => 'Åt:', -'emailsubject' => 'Emne:', -'emailmessage' => 'Melding:', -'emailsend' => 'Send', -'emailccme' => 'Send meg ein kopi av meldinga mi.', -'emailccsubject' => 'Kopi av meldinga di til $1: $2', -'emailsent' => 'E-posten er sendt', -'emailsenttext' => 'E-posten er sendt.', -'emailuserfooter' => 'E-posten vart sendt av $1 til $2 via «Send e-post»-funksjonen på {{SITENAME}}.', +'usermailererror' => 'E-post systemet gav feilmelding:', +'defemailsubject' => '{{SITENAME}} e-post', +'usermaildisabled' => 'Brukare-post slegen av', +'usermaildisabledtext' => 'Du kan ikkje senda e-postar til andre brukarar på wikien', +'noemailtitle' => 'Inga e-postadresse', +'noemailtext' => 'Denne brukaren har ikkje oppgjeve ei gyldig e-postadresse.', +'nowikiemailtitle' => 'Ingen e-post tillaten', +'nowikiemailtext' => 'Denne brukaren har vald å ikkje motta e-postar frå andre brukarar.', +'email-legend' => 'Send ein e-post til ein annan {{SITENAME}}-brukar', +'emailfrom' => 'Frå:', +'emailto' => 'Åt:', +'emailsubject' => 'Emne:', +'emailmessage' => 'Melding:', +'emailsend' => 'Send', +'emailccme' => 'Send meg ein kopi av meldinga mi.', +'emailccsubject' => 'Kopi av meldinga di til $1: $2', +'emailsent' => 'E-posten er sendt', +'emailsenttext' => 'E-posten er sendt.', +'emailuserfooter' => 'E-posten vart sendt av $1 til $2 via «Send e-post»-funksjonen på {{SITENAME}}.', # Watchlist 'watchlist' => 'Overvakingsliste', 'mywatchlist' => 'Overvakingslista mi', -'watchlistfor' => "(for '''$1''')", +'watchlistfor2' => 'For $1 $2', 'nowatchlist' => 'Du har ikkje noko i overvakingslista di.', 'watchlistanontext' => 'Du lyt $1 for å vise eller endre sider på overvakingslista di.', 'watchnologin' => 'Ikkje innlogga', @@ -2121,7 +2171,10 @@ Den siste endringa vart gjort av [[User:$3|$3]] ([[User talk:$3|brukardiskusjon] 'revertpage' => 'Attenderulla endring gjort av [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusjon]]) til tidlegare versjon endra av [[User:$1|$1]]', 'revertpage-nouser' => 'Tilbakestilte endringar av (brukarnamn fjerna) til den siste versjonen av [[User:$1|$1]]', 'rollback-success' => 'Rulla attende endringane av $1, tilbake til siste versjon av $2.', -'sessionfailure' => 'Det ser ut til å vera eit problem med innloggingsøkta di. Handlinga er vorten avbroten for å vera føre var mot kidnapping av økta. Bruk attendeknappen i nettlesaren din og prøv om att.', + +# Edit tokens +'sessionfailure-title' => 'Feil med omgangen.', +'sessionfailure' => 'Det ser ut til å vera eit problem med innloggingsøkta di. Handlinga er vorten avbroten for å vera føre var mot kidnapping av økta. Bruk attendeknappen i nettlesaren din og prøv om att.', # Protect 'protectlogpage' => 'Vernelogg', @@ -2246,18 +2299,21 @@ $1', 'month' => 'Månad:', 'year' => 'År:', -'sp-contributions-newbies' => 'Vis berre bidrag frå nye brukarar', -'sp-contributions-newbies-sub' => 'Frå nye brukarkontoar', -'sp-contributions-newbies-title' => 'Brukarbidrag av nye brukarar', -'sp-contributions-blocklog' => 'blokkeringslogg', -'sp-contributions-deleted' => 'sletta brukarbidrag', -'sp-contributions-logs' => 'loggar', -'sp-contributions-talk' => 'diskusjon', -'sp-contributions-userrights' => 'administrering av brukartilgang', -'sp-contributions-blocked-notice' => 'Denne brukaren er for tida blokkert. Den siste oppføringa i blokkeringsloggen er synt nedanfor:', -'sp-contributions-search' => 'Søk etter bidrag', -'sp-contributions-username' => 'IP-adresse eller brukarnamn:', -'sp-contributions-submit' => 'Søk', +'sp-contributions-newbies' => 'Vis berre bidrag frå nye brukarar', +'sp-contributions-newbies-sub' => 'Frå nye brukarkontoar', +'sp-contributions-newbies-title' => 'Brukarbidrag av nye brukarar', +'sp-contributions-blocklog' => 'blokkeringslogg', +'sp-contributions-deleted' => 'sletta brukarbidrag', +'sp-contributions-uploads' => '↓opplastingar', +'sp-contributions-logs' => 'loggar', +'sp-contributions-talk' => 'diskusjon', +'sp-contributions-userrights' => 'administrering av brukartilgang', +'sp-contributions-blocked-notice' => 'Denne brukaren er for tida blokkert. Den siste oppføringa i blokkeringsloggen er synt nedanfor:', +'sp-contributions-blocked-notice-anon' => 'Denne IP-adressa er for tida blokkert. Den siste oppføringa i blokkeringsloggen er synt nedanfor:', +'sp-contributions-search' => 'Søk etter bidrag', +'sp-contributions-username' => 'IP-adresse eller brukarnamn:', +'sp-contributions-toponly' => 'Einast vis endringar som er dei siste på sida.', +'sp-contributions-submit' => 'Søk', # What links here 'whatlinkshere' => 'Lenkjer hit', @@ -2315,7 +2371,6 @@ Sjå [[Special:IPBlockList|blokkeringslista]] for alle blokkeringane.', 'ipb-edit-dropdown' => 'Endre grunnane for blokkering', 'ipb-unblock-addr' => 'Opphev blokkeringa av $1', 'ipb-unblock' => 'Opphev blokkeringa av eit brukarnamn eller ei IP-adresse', -'ipb-blocklist-addr' => 'Gjeldande blokkeringar av $1', 'ipb-blocklist' => 'Vis gjeldande blokkeringar', 'ipb-blocklist-contribs' => 'Bidrag frå $1', 'unblockip' => 'Opphev blokkering', @@ -2385,6 +2440,8 @@ $1 er alt blokkert. Vil du endre innstillingane?', 'sorbs_create_account_reason' => 'IP-adressa di er lista som ein open mellomtenar i DNSBL, og difor får du ikkje registrert deg.', 'cant-block-while-blocked' => 'Du kan ikkje blokkere andre medan du sjølv er blokkert.', 'cant-see-hidden-user' => 'Brukaren du prøver å blokkera har allereie vorte blokkert og skjult. Sidan du ikkje har rett til å skjula brukarar, kan du ikkje sjå eller endra blokkeringa til brukaren.', +'ipbblocked' => 'Du kan ikkje blokkera eller avblokkera andre brukarar sidan du sjølv er blokkert', +'ipbnounblockself' => 'Du kan ikkje avblokkera deg sjølv', # Developer tools 'lockdb' => 'Skrivevern (lock) database', @@ -2411,6 +2468,16 @@ $1 er alt blokkert. Vil du endre innstillingane?', Merk at sida '''ikkje''' kan flyttast dersom det allereie finst ei side med den nye tittelen. Du kan likevel flytte ei side attende dit ho vart flytt frå dersom du gjer ein feil, så lenge den sida du flytter attende til ikkje er vorten endra sidan flyttinga. ÅTVARING! Dette kan vera ei drastisk og uventa endring for ei populær side; ver sikker på at du skjønner konsekvensane av dette før du fortset.", +'movepagetext-noredirectfixer' => "Ved å bruke skjemaet under kan du få omdøypt ei side og flytt heile historikken til det nye namnet. +Den gamle tittelen vil omdirigere til den nye tittelen. +Pass på å sjekke for doble eller dårlege omdirigeringar. +Du er ansvarleg for at alle lenkjene stadig peiker dit det er meininga at dei skal peike. + +Merk at sida '''ikkje''' kan flyttast dersom det allereie finst ei side med den nye tittelen, om ho då ikkje er ei omdirigeringsside utan endringshistorikk. Dette vil seie at du kan flytte ei side attende dit ho vart flytt frå dersom du gjer ein feil, og at du ikkje kan skriva over ei side som finst. + +ÅTVARING! +Dette kan vera ei drastisk og uventa endring for ei populær side; +ver sikker på at du skjøner konsekvensane av dette før du fortset.", 'movepagetalktext' => "Den tilhøyrande diskusjonssida, om ho finst, vil automatisk bli flytt med sida '''med mindre:''' *Du flytter sida til eit anna namnerom, eller *Du fjernar merkinga i boksen nedanfor. @@ -2465,6 +2532,7 @@ Målsida «[[:$1]]» finst allereie. Vil du slette ho for å gje rom for flyttin 'immobile-source-page' => 'Denne sida kan ikkje flyttast.', 'immobile-target-page' => 'Kan ikkje flytte til det målnamnet.', 'imagenocrossnamespace' => 'Kan ikkje flytte bilete til andre namnerom enn biletnamnerommet', +'nonfile-cannot-move-to-file' => 'Kan ikkje flytta ikkje-filer til filnamnerommet.', 'imagetypemismatch' => 'Den nye filendinga høver ikkje til filtypen', 'imageinvalidfilename' => 'Målnamnet er ugyldig', 'fix-double-redirects' => 'Oppdater omdirigeringar som viser til den gamle tittelen', @@ -2538,10 +2606,11 @@ Vitja [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [ht 'import-interwiki-namespace' => 'Målnamnerom:', 'import-upload-filename' => 'Filnamn:', 'import-comment' => 'Kommentar:', -'importtext' => 'Eksporter fila frå kjeldewikien med [[Special:Export|eksporteringsverktøyet]], lagre ho på di eiga datamaskin, og last henne opp her.', +'importtext' => 'Lagre fila frå kjeldewikien med [[Special:Export|eksporteringsverktøyet]] på din eigen datamaskin, og last henne så opp her.', 'importstart' => 'Importerer sidene…', 'import-revision-count' => '$1 {{PLURAL:$1|versjon|versjonar}}', 'importnopages' => 'Ingen sider å importere.', +'imported-log-entries' => 'Importerte {{PLURAL:$1|eitt loggelement|$1 loggelement}}.', 'importfailed' => 'Importeringa var mislukka: $1', 'importunknownsource' => 'Ukjend importkjeldetype', 'importcantopen' => 'Kunne ikkje opne importfil', @@ -2634,6 +2703,8 @@ Vitja [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [ht 'tooltip-upload' => 'Start opplastinga', 'tooltip-rollback' => '«Attenderull»-knappen attenderullar endringar på denne sida med eitt klikk til den førre utgåva av ein annan brukar', 'tooltip-undo' => '«Gjer om» attenderullar endringar og opnar endringsvindauga med førehandsvising. Gjer at ein kan leggje til ei årsak samandragsboksen.', +'tooltip-preferences-save' => 'Lagra innstillingar', +'tooltip-summary' => 'Skriv inn eit kort samandrag', # Stylesheets 'common.css' => '/* CSS plassert i denne fila vil gjelde for alle utsjånader. */', @@ -2760,14 +2831,16 @@ $1', 'imagemaxsize' => "Avgrens storleiken for bilete:
    ''(for sider som skildrar filer)''", 'thumbsize' => 'Miniatyrstørrelse:', 'widthheightpage' => '$1×$2, {{PLURAL:$3|éi side|$3 sider}}', -'file-info' => '(filstorleik: $1, MIME-type: $2)', -'file-info-size' => '($1 × $2 pikslar, filstorleik: $3, MIME-type: $4)', +'file-info' => 'filstorleik: $1, MIME-type: $2', +'file-info-size' => '$1 × $2 pikslar, filstorleik: $3, MIME-type: $4', 'file-nohires' => 'Høgare oppløysing er ikkje tilgjengeleg.', -'svg-long-desc' => '(SVG-fil, standardoppløysing: $1 × $2 pikslar, filstorleik: $3)', +'svg-long-desc' => 'SVG-fil, standardoppløysing: $1 × $2 pikslar, filstorleik: $3', 'show-big-image' => 'Full oppløysing', 'show-big-image-thumb' => 'Storleiken på denne førehandsvisinga: $1 × $2 pikslar', 'file-info-gif-looped' => 'gjentatt', 'file-info-gif-frames' => '$1 {{PLURAL:$1|rame|ramer}}', +'file-info-png-looped' => '↓oppatteke', +'file-info-png-repeat' => 'spela av {{PLURAL:$1|éin gong|$1 gonger}}', # Special:NewFiles 'newimages' => 'Filgalleri', @@ -2923,6 +2996,7 @@ Dei andre felta er gøymde som standard. 'exif-gpsareainformation' => 'Namn på GPS-område', 'exif-gpsdatestamp' => 'GPS-dato', 'exif-gpsdifferential' => 'Differensiell GPS-retting', +'exif-objectname' => 'Kort tittel', # EXIF attributes 'exif-compression-1' => 'Ukomprimert', @@ -3155,6 +3229,7 @@ Du må stadfeste at du verkeleg vil nyopprette denne sida.", 'table_pager_first' => 'Fyrste side', 'table_pager_last' => 'Siste side', 'table_pager_limit' => 'Vis $1 element per side', +'table_pager_limit_label' => 'Element per side:', 'table_pager_limit_submit' => 'Gå', 'table_pager_empty' => 'Ingen resultat', @@ -3222,6 +3297,8 @@ Du kan òg [[Special:Watchlist/edit|nytte standardverktøyet]].', 'version-hook-subscribedby' => 'Brukt av', 'version-version' => '(versjon $1)', 'version-license' => 'Lisens', +'version-poweredby-credits' => "Denne wikien er dreven av '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'andre', 'version-software' => 'Installert programvare', 'version-software-product' => 'Produkt', 'version-software-version' => 'Versjon', @@ -3291,6 +3368,15 @@ Skriv inn filnamn utan «{{ns:file}}:»-prefikset.', 'tags-edit' => 'endra', 'tags-hitcount' => '{{PLURAL:$1|éi endring|$1 endringar}}', +# Special:ComparePages +'comparepages' => 'Samanlikna sider', +'compare-selector' => 'Samanlikn sideversjonar', +'compare-page1' => 'Side 1', +'compare-page2' => 'Side 2', +'compare-rev1' => 'Versjon 1', +'compare-rev2' => 'Versjon 2', +'compare-submit' => 'Samanlikna', + # Database error messages 'dberr-header' => 'Denne wikien har eit problem', 'dberr-problems' => 'Nettstaden har tekniske problem.', @@ -3307,8 +3393,13 @@ Skriv inn filnamn utan «{{ns:file}}:»-prefikset.', 'htmlform-float-invalid' => 'Verdien du valde er ikkje eit tal.', 'htmlform-int-toolow' => 'Verdien du valde er under minstetalet på $1', 'htmlform-int-toohigh' => 'Verdien du valde er over høgste moglege tal $1', +'htmlform-required' => 'Denne verdien er påkravd', 'htmlform-submit' => 'Lagre', 'htmlform-reset' => 'Gjer om endringar', 'htmlform-selectorother-other' => 'Andre', +# SQLite database support +'sqlite-has-fts' => '$1 med støtte for fulltekstsøk', +'sqlite-no-fts' => '$1 utan støtte for fulltekstsøk', + ); diff --git a/languages/messages/MessagesNo.php b/languages/messages/MessagesNo.php index 85c022fd..b849ba94 100644 --- a/languages/messages/MessagesNo.php +++ b/languages/messages/MessagesNo.php @@ -66,7 +66,7 @@ $namespaceAliases = array( 'Bildediskusjon' => NS_FILE_TALK, ); -$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' ); +$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' ); $linkTrail = '/^([æøåa-z]+)(.*)$/sDu'; $dateFormats = array( @@ -84,94 +84,97 @@ $dateFormats = array( ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'Doble omdirigeringer' ), - 'BrokenRedirects' => array( 'Ødelagte omdirigeringer' ), + 'DoubleRedirects' => array( 'Doble_omdirigeringer' ), + 'BrokenRedirects' => array( 'Ødelagte_omdirigeringer' ), 'Disambiguations' => array( 'Pekere' ), - 'Userlogin' => array( 'Logg inn' ), - 'Userlogout' => array( 'Logg ut' ), - 'CreateAccount' => array( 'Opprett konto' ), + 'Userlogin' => array( 'Logg_inn' ), + 'Userlogout' => array( 'Logg_ut' ), + 'CreateAccount' => array( 'Opprett_konto' ), 'Preferences' => array( 'Innstillinger' ), 'Watchlist' => array( 'Overvåkningsliste', 'Overvåkingsliste' ), - 'Recentchanges' => array( 'Siste endringer' ), - 'Upload' => array( 'Last opp' ), + 'Recentchanges' => array( 'Siste_endringer' ), + 'Upload' => array( 'Last_opp' ), 'Listfiles' => array( 'Filliste', 'Bildeliste', 'Billedliste' ), - 'Newimages' => array( 'Nye bilder' ), + 'Newimages' => array( 'Nye_filer', 'Nye_bilder' ), 'Listusers' => array( 'Brukerliste' ), 'Listgrouprights' => array( 'Grupperettigheter' ), 'Statistics' => array( 'Statistikk' ), - 'Randompage' => array( 'Tilfeldig side', 'Tilfeldig' ), - 'Lonelypages' => array( 'Foreldreløse sider' ), - 'Uncategorizedpages' => array( 'Ukategoriserte sider' ), - 'Uncategorizedcategories' => array( 'Ukategoriserte kategorier' ), - 'Uncategorizedimages' => array( 'Ukategoriserte filer', 'Ukategoriserte bilder' ), - 'Uncategorizedtemplates' => array( 'Ukategoriserte maler' ), - 'Unusedcategories' => array( 'Ubrukte kategorier' ), - 'Unusedimages' => array( 'Ubrukte filer', 'Ubrukte bilder' ), - 'Wantedpages' => array( 'Ønskede sider' ), - 'Wantedcategories' => array( 'Ønskede kategorier' ), - 'Wantedfiles' => array( 'Ønskede filer' ), - 'Wantedtemplates' => array( 'Ønskede maler' ), - 'Mostlinked' => array( 'Mest lenkede sider', 'Mest lenka sider' ), - 'Mostlinkedcategories' => array( 'Største kategorier' ), - 'Mostlinkedtemplates' => array( 'Mest brukte maler' ), - 'Mostimages' => array( 'Mest brukte bilder', 'Mest brukte filer' ), - 'Mostcategories' => array( 'Flest kategorier' ), - 'Mostrevisions' => array( 'Flest revisjoner' ), - 'Fewestrevisions' => array( 'Færrest revisjoner' ), - 'Shortpages' => array( 'Korte sider' ), - 'Longpages' => array( 'Lange sider' ), - 'Newpages' => array( 'Nye sider' ), - 'Ancientpages' => array( 'Gamle sider' ), + 'Randompage' => array( 'Tilfeldig', 'Tilfeldig_side' ), + 'Lonelypages' => array( 'Foreldreløse_sider' ), + 'Uncategorizedpages' => array( 'Ukategoriserte_sider' ), + 'Uncategorizedcategories' => array( 'Ukategoriserte_kategorier' ), + 'Uncategorizedimages' => array( 'Ukategoriserte_filer', 'Ukategoriserte_bilder' ), + 'Uncategorizedtemplates' => array( 'Ukategoriserte_maler' ), + 'Unusedcategories' => array( 'Ubrukte_kategorier' ), + 'Unusedimages' => array( 'Ubrukte_filer', 'Ubrukte_bilder' ), + 'Wantedpages' => array( 'Ønskede_sider', 'Ødelagte_lenker' ), + 'Wantedcategories' => array( 'Ønskede_kategorier' ), + 'Wantedfiles' => array( 'Ønskede_filer' ), + 'Wantedtemplates' => array( 'Ønskede_maler' ), + 'Mostlinked' => array( 'Mest_lenkede_sider', 'Mest_lenket' ), + 'Mostlinkedcategories' => array( 'Mest_lenkede_kategorier', 'Mest_brukte_kategorier' ), + 'Mostlinkedtemplates' => array( 'Mest_lenkede_maler', 'Mest_brukte_maler' ), + 'Mostimages' => array( 'Mest_lenkede_filer', 'Flest_filer', 'Flest_bilder' ), + 'Mostcategories' => array( 'Flest_kategorier' ), + 'Mostrevisions' => array( 'Flest_revisjoner' ), + 'Fewestrevisions' => array( 'Færrest_revisjoner' ), + 'Shortpages' => array( 'Korte_sider' ), + 'Longpages' => array( 'Lange_sider' ), + 'Newpages' => array( 'Nye_sider' ), + 'Ancientpages' => array( 'Gamle_sider' ), 'Deadendpages' => array( 'Blindveisider' ), - 'Protectedpages' => array( 'Beskyttede sider' ), - 'Protectedtitles' => array( 'Beskyttede titler' ), - 'Allpages' => array( 'Alle sider' ), + 'Protectedpages' => array( 'Beskyttede_sider' ), + 'Protectedtitles' => array( 'Beskyttede_titler' ), + 'Allpages' => array( 'Alle_sider' ), 'Prefixindex' => array( 'Prefiksindeks' ), - 'Ipblocklist' => array( 'Blokkeringsliste' ), + 'Ipblocklist' => array( 'Blokkeringsliste', 'IP-blokkeringsliste' ), + 'Unblock' => array( 'Avblokker' ), 'Specialpages' => array( 'Spesialsider' ), 'Contributions' => array( 'Bidrag' ), 'Emailuser' => array( 'E-post' ), - 'Confirmemail' => array( 'Bekreft e-postadresse' ), - 'Whatlinkshere' => array( 'Lenker hit' ), - 'Recentchangeslinked' => array( 'Relaterte endringer' ), - 'Movepage' => array( 'Flytt side' ), - 'Blockme' => array( 'Blokker meg' ), + 'Confirmemail' => array( 'Bekreft_e-postadresse' ), + 'Whatlinkshere' => array( 'Lenker_hit' ), + 'Recentchangeslinked' => array( 'Relaterte_endringer' ), + 'Movepage' => array( 'Flytt_side' ), + 'Blockme' => array( 'Blokker_meg' ), 'Booksources' => array( 'Bokkilder' ), 'Categories' => array( 'Kategorier' ), 'Export' => array( 'Eksporter' ), 'Version' => array( 'Versjon' ), - 'Allmessages' => array( 'Alle systembeskjeder' ), + 'Allmessages' => array( 'Alle_systembeskjeder' ), 'Log' => array( 'Logg', 'Logger' ), - 'Blockip' => array( 'Blokker' ), + 'Blockip' => array( 'Blokker', 'Blokker_IP', 'Blokker_bruker' ), 'Undelete' => array( 'Gjenopprett' ), 'Import' => array( 'Importer' ), - 'Lockdb' => array( 'Lås database' ), - 'Unlockdb' => array( 'Åpne database' ), + 'Lockdb' => array( 'Lås_database' ), + 'Unlockdb' => array( 'Åpne_database' ), 'Userrights' => array( 'Brukerrettigheter' ), 'MIMEsearch' => array( 'MIME-søk' ), 'FileDuplicateSearch' => array( 'Filduplikatsøk' ), - 'Unwatchedpages' => array( 'Uovervåkede sider' ), + 'Unwatchedpages' => array( 'Uovervåkede_sider' ), 'Listredirects' => array( 'Omdirigeringsliste' ), 'Revisiondelete' => array( 'Revisjonssletting' ), - 'Unusedtemplates' => array( 'Ubrukte maler' ), - 'Randomredirect' => array( 'Tilfeldig omdirigering' ), - 'Mypage' => array( 'Min side' ), - 'Mytalk' => array( 'Min diskusjon' ), - 'Mycontributions' => array( 'Mine bidrag' ), + 'Unusedtemplates' => array( 'Ubrukte_maler' ), + 'Randomredirect' => array( 'Tilfeldig_omdirigering' ), + 'Mypage' => array( 'Min_side' ), + 'Mytalk' => array( 'Min_diskusjon' ), + 'Mycontributions' => array( 'Mine_bidrag' ), 'Listadmins' => array( 'Administratorliste', 'Administratorer' ), - 'Listbots' => array( 'Robotliste', 'Liste over roboter' ), - 'Popularpages' => array( 'Populære sider' ), + 'Listbots' => array( 'Robotliste', 'Liste_over_roboter' ), + 'Popularpages' => array( 'Populære_sider' ), 'Search' => array( 'Søk' ), - 'Resetpass' => array( 'Resett passord' ), - 'Withoutinterwiki' => array( 'Uten interwiki' ), - 'MergeHistory' => array( 'Flett historikk' ), + 'Resetpass' => array( 'Endre_passord', 'TIlbakestill_passord' ), + 'Withoutinterwiki' => array( 'Uten_interwiki' ), + 'MergeHistory' => array( 'Flett_historikk' ), 'Filepath' => array( 'Filsti' ), - 'Invalidateemail' => array( 'Ugyldiggjøre e-post' ), - 'Blankpage' => array( 'Blank side' ), + 'Invalidateemail' => array( 'Ugyldiggjøre_e-post' ), + 'Blankpage' => array( 'Blank_side' ), 'LinkSearch' => array( 'Lenkesøk' ), - 'DeletedContributions' => array( 'Slettede bidrag' ), + 'DeletedContributions' => array( 'Slettede_bidrag' ), 'Tags' => array( 'Tagger' ), - 'Activeusers' => array( 'Aktive brukere' ), + 'Activeusers' => array( 'Aktive_brukere' ), + 'ComparePages' => array( 'Sammenlign_sider' ), + 'Badtitle' => array( 'Ugyldig_tittel' ), ); $magicWords = array( @@ -242,8 +245,7 @@ $messages = array( 'tog-editsection' => 'Rediger avsnitt ved hjelp av [rediger]-lenke', 'tog-editsectiononrightclick' => 'Rediger avsnitt ved å høyreklikke på avsnittsoverskrift (JavaScript)', 'tog-showtoc' => 'Vis innholdsfortegnelse (for sider med mer enn tre seksjoner)', -'tog-rememberpassword' => 'Husk passordet', -'tog-editwidth' => 'Utvid redigeringsboksen til å bruke hele skjermen', +'tog-rememberpassword' => 'Husk meg i denne nettleseren (i høyst $1 {{PLURAL:$1|dag|dager}})', 'tog-watchcreations' => 'Overvåk sider jeg oppretter', 'tog-watchdefault' => 'Overvåk alle sider jeg redigerer', 'tog-watchmoves' => 'Overvåk sider jeg flytter', @@ -388,31 +390,21 @@ $messages = array( 'faqpage' => 'Project:Ofte stilte spørsmål', # Vector skin -'vector-action-addsection' => 'Nytt emne', -'vector-action-delete' => 'Slett', -'vector-action-move' => 'Flytt', -'vector-action-protect' => 'Beskytt', -'vector-action-undelete' => 'Gjenopprett', -'vector-action-unprotect' => 'Opphev beskyttelse', -'vector-namespace-category' => 'Kategori', -'vector-namespace-help' => 'Hjelpeside', -'vector-namespace-image' => 'Fil', -'vector-namespace-main' => 'Side', -'vector-namespace-media' => 'Mediaside', -'vector-namespace-mediawiki' => 'Melding', -'vector-namespace-project' => 'Prosjektside', -'vector-namespace-special' => 'Spesialside', -'vector-namespace-talk' => 'Diskusjon', -'vector-namespace-template' => 'Mal', -'vector-namespace-user' => 'Brukerside', -'vector-view-create' => 'Opprett', -'vector-view-edit' => 'Rediger', -'vector-view-history' => 'Vis historikk', -'vector-view-view' => 'Les', -'vector-view-viewsource' => 'Vis kilden', -'actions' => 'Handlinger', -'namespaces' => 'Navnerom', -'variants' => 'Varianter', +'vector-action-addsection' => 'Nytt emne', +'vector-action-delete' => 'Slett', +'vector-action-move' => 'Flytt', +'vector-action-protect' => 'Beskytt', +'vector-action-undelete' => 'Gjenopprett', +'vector-action-unprotect' => 'Opphev beskyttelse', +'vector-simplesearch-preference' => 'Aktiver forbedrede søkeforslag (kun for drakten Vector)', +'vector-view-create' => 'Opprett', +'vector-view-edit' => 'Rediger', +'vector-view-history' => 'Vis historikk', +'vector-view-view' => 'Les', +'vector-view-viewsource' => 'Vis kilden', +'actions' => 'Handlinger', +'namespaces' => 'Navnerom', +'variants' => 'Varianter', 'errorpagetitle' => 'Feil', 'returnto' => 'Tilbake til $1.', @@ -473,6 +465,9 @@ For mange brukere forsøker å se denne siden. Vennligst vent en stund før du prøver å besøke denne siden på nytt. $1', +'pool-timeout' => 'Tidsavbudd mens man ventet på låsing', +'pool-queuefull' => 'Køen er full', +'pool-errorunknown' => 'Ukjent feil', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Om {{SITENAME}}', @@ -633,7 +628,8 @@ Ikke glem å endre [[Special:Preferences|innstillingene]] dine.', 'yourname' => 'Brukernavn:', 'yourpassword' => 'Passord:', 'yourpasswordagain' => 'Gjenta passord', -'remembermypassword' => 'Husk meg på denne datamaskinen', +'remembermypassword' => 'Husk meg på denne datamaskinen (i maks $1 {{PLURAL:$1|dag|dager}})', +'securelogin-stick-https' => 'Vær fortsatt tilkoblet til HTTPS etter innlogging', 'yourdomainname' => 'Ditt domene', 'externaldberror' => 'Det var en ekstern autentifiseringsfeil, eller du kan ikke oppdatere din eksterne konto.', 'login' => 'Logg inn', @@ -650,6 +646,7 @@ Ikke glem å endre [[Special:Preferences|innstillingene]] dine.', 'gotaccount' => "Har du allerede et brukernavn? '''$1'''.", 'gotaccountlink' => 'Logg inn', 'createaccountmail' => 'per e-post', +'createaccountreason' => 'Årsak:', 'badretype' => 'Passordene samsvarte ikke.', 'userexists' => 'Brukernavnet er allerede i bruk. Velg et nytt.', 'loginerror' => 'Innloggingsfeil', @@ -669,6 +666,7 @@ Sjekk stavemåten eller [[Special:UserLogin/signup|opprett en ny konto]].', 'wrongpasswordempty' => 'Du oppga ikke noe passord. Prøv igjen.', 'passwordtooshort' => 'Passord må ha minst {{PLURAL:$1|ett tegn|$1 tegn}}.', 'password-name-match' => 'Passordet ditt må være anderledes enn brukernavnet.', +'password-login-forbidden' => 'Bruken av disse brukernavn og passord har blitt forbudt.', 'mailmypassword' => 'Send nytt passord', 'passwordremindertitle' => 'Nytt midlertidig passord fra {{SITENAME}}', 'passwordremindertext' => 'Noen (antagelig deg, fra IP-adressen $1) ba oss sende deg et nytt @@ -706,6 +704,9 @@ Du kan ignorere denne beskjeden dersom kontoen ble opprettet ved en feil.', 'loginlanguagelabel' => 'Språk: $1', 'suspicious-userlogout' => 'Din forespørsel om å logge ut ble nektet fordi den så ut til å ha bli sendt av en ødelagt nettleser eller en mellomtjener.', +# E-mail sending +'php-mail-error-unknown' => 'Ukjent feil i PHPs mail()-funksjon', + # Password reset dialog 'resetpass' => 'Endre passord', 'resetpass_announce' => 'Du logget inn med en midlertidig e-postkode. For å fullføre innloggingen må du oppgi et nytt passord her:', @@ -758,10 +759,12 @@ Du kan ha allerede byttet passordet, eller bedt om et nytt midlertidig passord.' 'showdiff' => 'Vis endringer', 'anoneditwarning' => "'''Advarsel:''' Du er ikke logget inn. IP-adressen din blir bevart i sidens redigeringshistorikk.", +'anonpreviewwarning' => "''Du er ikke logget inn. Lagring vil registrere din IP-adresse i sidens redigeringshistorikk.''", 'missingsummary' => "'''Påminnelse:''' Du har ikke lagt inn en redigeringsforklaring. Velger du ''Lagre siden'' en gang til blir endringene lagret uten forklaring.", 'missingcommenttext' => 'Vennligst legg inn en kommentar under.', -'missingcommentheader' => "'''Merk:''' Du har ikke angitt et emne/overskrift for denne kommentaren. Om du trykker Lagre igjen, vil redigeringen din bli lagret uten en.", +'missingcommentheader' => "'''Påminnelse:''' Du har ikke angitt et emne/overskrift for denne kommentaren. +Om du trykker «{{int:savearticle}}» igjen vil redigeringen din bli lagret uten forklaring.", 'summary-preview' => 'Forhåndsvisning av redigeringsforklaring:', 'subject-preview' => 'Forhåndsvisning av emne/overskrift:', 'blockedtitle' => 'Brukeren er blokkert', @@ -832,7 +835,11 @@ Siste blokkeringsloggelement kan sees nedenfor.', 'userjsyoucanpreview' => "'''Tips:''' Bruk '{{int:showpreview}}'-knappen for å teste ditt nye JS før du lagrer.", 'usercsspreview' => "'''Husk at dette bare er en forhåndsvisning av din bruker-CSS og at den ikke er lagret!'''", 'userjspreview' => "'''Husk at dette bare er en test eller forhåndsvisning av ditt bruker-JavaScript, og det ikke er lagret!'''", -'userinvalidcssjstitle' => "'''Advarsel:''' Det finnes ikke noe utseende ved navn «$1». Husk at .css- og .js-sider bruker titler i små bokstaver, for eksempel {{ns:user}}:Eksempel/monobook.css, ikke {{ns:user}}:Eksempel/Monobook.css", +'sitecsspreview' => "'''Husk at du bare forhåndsviser denne CSS.''' +'''Den har ikke blitt lagret ennå!'''", +'sitejspreview' => "'''Husk at du bare forhåndsviser denne JavaScript-koden.''' +'''Den har ikke blitt lagret ennå!'''", +'userinvalidcssjstitle' => "'''Advarsel:''' Det finnes ikke noe utseende ved navn «$1». Husk at .css- og .js-sider bruker titler i små bokstaver, for eksempel {{ns:user}}:Eksempel/vector.css, ikke {{ns:user}}:Eksempel/Vector.css", 'updated' => '(Oppdatert)', 'note' => "'''Merk:'''", 'previewnote' => "'''Husk at dette bare er en forhåndsvisning.''' @@ -867,7 +874,6 @@ Du lover også at du har skrevet dette selv, eller kopiert det fra en ressurs so '''Ikke legg til opphavsbeskyttet materiale uten tillatelse!'''", 'copyrightwarning2' => "Vennligst merk at alle bidrag til {{SITENAME}} kan bli redigert, endret eller fjernet av andre bidragsytere. Om du ikke vil at dine bidrag skal kunne redigeres fritt, ikke legg det til her.
    Du lover også at du har skrevet dette selv, eller kopiert det fra en ressurs som er i public domain eller lignende (se $1 for detaljer). '''IKKE LEGG TIL OPPHAVSBESKYTTET MATERIALE UTEN TILLATELSE!'''", -'longpagewarning' => "'''ADVARSEL: Denne siden er $1 kB lang; noen eldre nettlesere kan ha problemer med å redigere sider som nærmer seg eller er lengre enn 32 kB. Overvei om ikke siden kan deles opp i mindre deler.'''", 'longpageerror' => "'''FEIL: Teksten du prøvde å lagre er $1 kB lang, dvs. lenger enn det maksimale $2 kB. Den kan ikke lagres.'''", 'readonlywarning' => "'''ADVARSEL: Databasen er låst på grunn av vedlikehold, så du kan ikke lagre dine endringer akkurat nå. Det kan være en god idé å @@ -1039,6 +1045,8 @@ $1", 'logdelete-failure' => "'''Loggens synlighet kunne ikke bli stilt inn:''' $1", 'revdel-restore' => 'endre synlighet', +'revdel-restore-deleted' => 'slettede revisjoner', +'revdel-restore-visible' => 'synlige revisjoner', 'pagehist' => 'Sidehistorikk', 'deletedhist' => 'Slettet historikk', 'revdelete-content' => 'innhold', @@ -1107,11 +1115,13 @@ Forsikre deg om at denne endringen vil opprettholde historisk sidekontinuitet.', # Diffs 'history-title' => 'Revisjonshistorikk for «$1»', 'difference' => '(Forskjell mellom revisjoner)', +'difference-multipage' => '(Forskjell mellom sider)', 'lineno' => 'Linje $1:', 'compareselectedversions' => 'Sammenlign valgte revisjoner', 'showhideselectedversions' => 'Vis/skjul valgte versjoner', 'editundo' => 'angre', -'diff-multi' => '({{PLURAL:$1|Én mellomrevisjon|$1 mellomrevisjoner}} ikke vist.)', +'diff-multi' => '({{PLURAL:$1|Én mellomrevisjon|$1 mellomrevisjoner}} av {{PLURAL:$2|én bruker|$2 brukere}} vises ikke)', +'diff-multi-manyusers' => '({{PLURAL:$1|Én mellomrevisjon|$1 mellomrevisjoner}} av mer enn $2 {{PLURAL:$2|bruker|brukere}} vises ikke)', # Search results 'searchresults' => 'Søkeresultat', @@ -1146,6 +1156,7 @@ Forsikre deg om at denne endringen vil opprettholde historisk sidekontinuitet.', 'searchprofile-everything-tooltip' => 'Søk i alt innhold (inkldert diskusjonssider)', 'searchprofile-advanced-tooltip' => 'Søk i visse navnerom', 'search-result-size' => '$1 ({{PLURAL:$2|ett|$2}} ord)', +'search-result-category-size' => '{{PLURAL:$1|1 medlem|$1 medlemmer}} ({{PLURAL:$2|1 underkategori|$2 underkategorier}}, {{PLURAL:$3|1 fil|$3 filer}})', 'search-result-score' => 'Relevans: $1 %', 'search-redirect' => '(omdirigering $1)', 'search-section' => '(avsnitt $1)', @@ -1221,6 +1232,7 @@ For å søke i alle, bruk prefikset ''all:'' (inkluderer diskusjonssider, maler, 'contextlines' => 'Linjer per resultat', 'contextchars' => 'Tegn per linje i resultatet', 'stub-threshold' => 'Grense for stubblenkeformatering:', +'stub-threshold-disabled' => 'Deaktivert', 'recentchangesdays' => 'Antall dager som skal vises i siste endringer:', 'recentchangesdays-max' => '(maksimum $1 {{PLURAL:$1|dag|dager}})', 'recentchangescount' => 'Antall redigeringer som skal vises som standard:', @@ -1254,6 +1266,7 @@ Her er et tilfeldig tall du kan bruke: $1', 'prefs-files' => 'Filer', 'prefs-custom-css' => 'Personlig CSS', 'prefs-custom-js' => 'Personlig Javascript', +'prefs-common-css-js' => 'Delt CSS/JS for alle drakter:', 'prefs-reset-intro' => 'Du kan bruke denne siden til å tilbakestille innstillingene dine til standardinnstillingene. Dette kan ikke tilbakestilles.', 'prefs-emailconfirm-label' => 'E-postbekreftelse:', @@ -1290,9 +1303,15 @@ Du kan også la velge å la andre brukere kontakte deg via brukersiden din uten 'prefs-advancedrendering' => 'Avanserte alternativ', 'prefs-advancedsearchoptions' => 'Avanserte alternativ', 'prefs-advancedwatchlist' => 'Avanserte alternativ', -'prefs-display' => 'Visningsalternativ', +'prefs-displayrc' => 'Visningsalternativ', +'prefs-displaysearchoptions' => 'Visningsalternativer', +'prefs-displaywatchlist' => 'Visningsalternativer', 'prefs-diffs' => 'Forskjeller', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'E-postadressen ser gyldig ut', +'email-address-validity-invalid' => 'Skriv inn en gyldig e-postadresse', + # User rights 'userrights' => 'Brukerrettighetskontroll', 'userrights-lookup-user' => 'Ordne brukergrupper', @@ -1377,6 +1396,7 @@ Du kan også la velge å la andre brukere kontakte deg via brukersiden din uten 'right-hideuser' => 'Blokkere et brukernavn og skjule det fra det offentlige', 'right-ipblock-exempt' => 'Kan redigere fra blokkerte IP-adresser', 'right-proxyunbannable' => 'Kan redigere fra blokkerte proxyer', +'right-unblockself' => 'Fjern blokkering av seg selv', 'right-protect' => 'Endre beskyttelsesnivåer', 'right-editprotected' => 'Redigere beskyttede sider', 'right-editinterface' => 'Redigere brukergrensesnittet', @@ -1399,7 +1419,6 @@ Du kan også la velge å la andre brukere kontakte deg via brukersiden din uten 'right-siteadmin' => 'Låse og låse opp databasen', 'right-reset-passwords' => 'Nullstille andre brukeres passord', 'right-override-export-depth' => 'Eksporter sider inkludert lenkede sider til en dypde på 5', -'right-versiondetail' => 'Vis utvidet informasjon om programvareversjon', 'right-sendemail' => 'Send e-post til andre brukere', # User rights log @@ -1450,14 +1469,9 @@ Du kan også la velge å la andre brukere kontakte deg via brukersiden din uten 'recentchanges-legend' => 'Alternativ for siste endringer', 'recentchangestext' => 'Vis de siste endringene til denne siden', 'recentchanges-feed-description' => 'Følg med på siste endringer i denne wikien med denne matingen.', -'recentchanges-label-legend' => 'Forklaring: $1.', -'recentchanges-legend-newpage' => '$1 – ny side', 'recentchanges-label-newpage' => 'Denne redigeringen opprettet en ny side', -'recentchanges-legend-minor' => '$1 – mindre endring', 'recentchanges-label-minor' => 'Dette er en mindre endring', -'recentchanges-legend-bot' => '$1 – botendring', 'recentchanges-label-bot' => 'Denne redigeringen ble gjort av en bot', -'recentchanges-legend-unpatrolled' => '$1 – upatruljert endring', 'recentchanges-label-unpatrolled' => 'Denne redigeringen har ikke blitt patruljert ennå', 'rcnote' => "Nedenfor vises {{PLURAL:$1|'''1''' endring|de siste '''$1''' endringene}} fra {{PLURAL:$2|det siste døgnet|de siste '''$2''' døgnene}}, per $5 $4.", 'rcnotefrom' => "Nedenfor er endringene fra '''$2''' (opp til '''$1''' vises).", @@ -1504,6 +1518,9 @@ Sider på [[Special:Watchlist|overvåkningslisten din]] er i '''fet skrift'''.", 'upload_directory_missing' => 'Oppplastingsmappen ($1) mangler og kunne ikke opprettes av tjeneren.', 'upload_directory_read_only' => 'Opplastingsmappa ($1) er ikke skrivbar for tjeneren.', 'uploaderror' => 'Feil under opplasting av fil', +'upload-recreate-warning' => "'''Advarsel: En fil med det navnet har blitt slettet eller flyttet.''' + +Slette- og flytteloggen for denne siden gjengis her:", 'uploadtext' => "Bruk skjemaet nedenfor for å laste opp filer. For å se eller søke i eksisterende filer, gå til [[Special:FileList|listen over filer]]. Opplastinger lagres også i [[Special:Log/upload|opplastingsloggen]]. @@ -1538,6 +1555,17 @@ Se [[Special:NewFiles|galleriet over nye filer]] for en mer visuell visning', 'filetype-banned-type' => "'''«$1»''' er ikke en tillatt filtype. {{PLURAL:$3|Tillatt filtype|Tillatte filtyper}} er $2.", 'filetype-missing' => 'Filen har ingen endelse (som «.jpg»).', +'empty-file' => 'Filen du sendte inn var tom.', +'file-too-large' => 'Filen du sendte inn var for stor.', +'filename-tooshort' => 'Filnavnet er for kort.', +'filetype-banned' => 'Denne filtypen er forbudt.', +'verification-error' => 'Denne filen bestod ikke filbekreftelsen.', +'hookaborted' => 'Endringene du prøvde å gjøre ble avbrutt av en utvidelseskrok.', +'illegal-filename' => 'Filnavnet er ikke tillatt.', +'overwrite' => 'Overskriving av eksisterende filer er ikke tillatt.', +'unknown-error' => 'En ukjent feil oppsto.', +'tmp-create-error' => 'Kunne ikke opprette midlertidig fil.', +'tmp-write-error' => 'Feil ved skriving av midlertidig fil.', 'large-file' => 'Det er anbefalt at filen ikke er større enn $1; denne filen er $2.', 'largefileserver' => 'Denne fila er større enn det tjeneren er satt opp til å tillate.', 'emptyfile' => 'Fila du lastet opp ser ut til å være tom. Dette kan komme av en skrivefeil i filnavnet. Sjekk om du virkelig vil laste opp denne fila.', @@ -1562,13 +1590,14 @@ Om du fortsatt ønsker å laste opp fila, gå tilbake og last den opp under et n Om du fortsatt ønsker å laste opp fila, gå tilbake og last den opp under et nytt navn. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Denne filen er en dublett av følgende {{PLURAL:$1|fil|filer}}:', 'file-deleted-duplicate' => 'En fil identisk med denne filen ([[:$1]]) har tidligere blitt slettet. Du bør sjekke denne filens slettehistorikk før du prøver å laste den opp på nytt.', -'successfulupload' => 'Opplastingen er gjennomført', 'uploadwarning' => 'Opplastingsadvarsel', 'uploadwarning-text' => 'Vennligst endre filbeskrivelsen nedenfor og prøv igjen.', 'savefile' => 'Lagre fil', 'uploadedimage' => 'lastet opp «[[$1]]»', 'overwroteimage' => 'last opp en ny versjon av «[[$1]]»', 'uploaddisabled' => 'Opplastingsfunksjonen er slått av', +'copyuploaddisabled' => 'Opplasting via nettadresse deaktivert.', +'uploadfromurl-queued' => 'Opplastingen din har blitt satt i kø.', 'uploaddisabledtext' => 'Opplasting er slått av.', 'php-uploaddisabledtext' => 'PHP-filopplasting er deaktivert. Sjekk innstillingen for file_uploads.', 'uploadscripted' => 'Denne fila inneholder HTML eller skripting som kan feiltolkes av en nettleser.', @@ -1600,6 +1629,14 @@ JD # Jenoptik MGP # Pentax PICT # div. # ', +'upload-success-subj' => 'Opplastingen er gjennomført', +'upload-success-msg' => 'Din opplasting fra [$2] var vellykket. Den er tilgjengelig her: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Opplastingsproblem', +'upload-failure-msg' => 'Det oppsto et problem med opplastingen din fra [$2]: + +$1', +'upload-warning-subj' => 'Opplastingsadvarsel', +'upload-warning-msg' => 'Det oppsto et problem med opplastingen din fra [$2]. Du kan gå tilbake til [[Special:Upload/stash/$1|opplastingsskjemaet]] for å løse dette problemet.', 'upload-proto-error' => 'Gal protokoll', 'upload-proto-error-text' => 'Fjernopplasting behøver adresser som begynner med http:// eller ftp://.', @@ -1660,6 +1697,7 @@ For best mulig sikkerhet er img_auth.php slått av.', 'listfiles_search_for' => 'Søk etter filnavn:', 'imgfile' => 'fil', 'listfiles' => 'Filliste', +'listfiles_thumb' => 'Miniatyrbilde', 'listfiles_date' => 'Dato', 'listfiles_name' => 'Navn', 'listfiles_user' => 'Bruker', @@ -1772,8 +1810,8 @@ Beskrivelsen fra [$2 filbeskrivelsessida] vises nedenfor.', 'statistics-edits' => 'Redigeringer siden {{SITENAME}} ble opprettet', 'statistics-edits-average' => 'Gjennomsnittlig antall redigeringer per side', 'statistics-views-total' => 'Totalt antall visninger', +'statistics-views-total-desc' => 'Visninger av ikke-eksisterende sider og spesielsider inkluderes ikke', 'statistics-views-peredit' => 'Visninger per redigering', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Jobbkøens] lengde', 'statistics-users' => 'Registrerte [[Special:ListUsers|brukere]]', 'statistics-users-active' => 'Aktive brukere', 'statistics-users-active-desc' => 'Brukere som har utført handlinger {{PLURAL:$1|det siste døgnet|de siste $1 dagene}}', @@ -1788,7 +1826,7 @@ En side anses om en pekerside om den inneholder en mal som det lenkes til fra [[ 'doubleredirects' => 'Doble omdirigeringer', 'doubleredirectstext' => 'Denne siden lister opp de sidene som er omdirigeringer til andre omdirigeringssider. Hver rad inneholder lenker til første og andre omdirigering, samt målet for den andre omdirigeringen, som vanligvis er den «virkelige» målsiden som den første omdirigeringen burde peke til. -Gjennomstrøkne sider har blitt fikset.', +Gjennomstrøkne sider har blitt fikset.', 'double-redirect-fixed-move' => '[[$1]] har blitt flyttet, og er nå en omdirigering til [[$2]]', 'double-redirect-fixer' => 'Omdirigeringsfikser', @@ -1811,6 +1849,8 @@ Hver rad inneholder lenker til første og andre omdirigering, samt målet for de 'nmembers' => '$1 {{PLURAL:$1|medlem|medlemmer}}', 'nrevisions' => '$1 {{PLURAL:$1|revisjon|revisjoner}}', 'nviews' => '$1 {{PLURAL:$1|visning|visninger}}', +'nimagelinks' => 'Brukt på $1 {{PLURAL:$1|side|sider}}', +'ntransclusions' => 'brukt på $1 {{PLURAL:$1|side|sider}}', 'specialpage-empty' => 'Denne siden er tom.', 'lonelypages' => 'Foreldreløse sider', 'lonelypagestext' => 'Følgende sider blir ikke lenket til eller brukt på andre sider på {{SITENAME}}.', @@ -1966,34 +2006,40 @@ Mer informasjon om de enkelte rettighetstypene kan finnes [[{{MediaWiki:Listgrou 'listgrouprights-removegroup-self-all' => 'Kan ta bort alle grupper fra egen konto', # E-mail user -'mailnologin' => 'Ingen avsenderadresse', -'mailnologintext' => 'Du må være [[Special:UserLogin|logget inn]] og ha en gyldig e-postadresse satt i [[Special:Preferences|brukerinnstillingene]] for å sende e-post til andre brukere.', -'emailuser' => 'E-post til denne brukeren', -'emailpage' => 'E-post til bruker', -'emailpagetext' => 'Du kan bruke skjemaet nedenfor for å sende en e-post til denne brukeren. +'mailnologin' => 'Ingen avsenderadresse', +'mailnologintext' => 'Du må være [[Special:UserLogin|logget inn]] og ha en gyldig e-postadresse satt i [[Special:Preferences|brukerinnstillingene]] for å sende e-post til andre brukere.', +'emailuser' => 'E-post til denne brukeren', +'emailpage' => 'E-post til bruker', +'emailpagetext' => 'Du kan bruke skjemaet nedenfor for å sende en e-post til denne brukeren. Den e-postadressen du har satt i [[Special:Preferences|innstillingene dine]] vil dukke opp i «fra»-feltet på denne e-posten, så mottakeren er i stand til å svare.', -'usermailererror' => 'E-postobjekt returnerte feilen:', -'defemailsubject' => 'E-post fra {{SITENAME}}', -'noemailtitle' => 'Ingen e-postadresse', -'noemailtext' => 'Dene brukeren har ikke oppgitt en gyldig e-postadresse.', -'nowikiemailtitle' => 'Ingen e-post tillatt', -'nowikiemailtext' => 'Denne brukeren har valgt å ikke motta e-post fra andre brukere.', -'email-legend' => 'Send en e-post til en annen {{SITENAME}}-bruker', -'emailfrom' => 'Fra:', -'emailto' => 'Til:', -'emailsubject' => 'Emne:', -'emailmessage' => 'Beskjed:', -'emailsend' => 'Send', -'emailccme' => 'Send meg en kopi av beskjeden min.', -'emailccsubject' => 'Kopi av din beskjed til $1: $2', -'emailsent' => 'E-post sendt', -'emailsenttext' => 'E-postbeskjeden er sendt', -'emailuserfooter' => 'E-posten ble sendt av $1 til $2 via «Send e-post»-funksjonen på {{SITENAME}}.', +'usermailererror' => 'E-postobjekt returnerte feilen:', +'defemailsubject' => 'E-post fra {{SITENAME}}', +'usermaildisabled' => 'Brukerepost deaktivert', +'usermaildisabledtext' => 'Du kan ikke sende epost til andre brukere på denne wikien', +'noemailtitle' => 'Ingen e-postadresse', +'noemailtext' => 'Dene brukeren har ikke oppgitt en gyldig e-postadresse.', +'nowikiemailtitle' => 'Ingen e-post tillatt', +'nowikiemailtext' => 'Denne brukeren har valgt å ikke motta e-post fra andre brukere.', +'email-legend' => 'Send en e-post til en annen {{SITENAME}}-bruker', +'emailfrom' => 'Fra:', +'emailto' => 'Til:', +'emailsubject' => 'Emne:', +'emailmessage' => 'Beskjed:', +'emailsend' => 'Send', +'emailccme' => 'Send meg en kopi av beskjeden min.', +'emailccsubject' => 'Kopi av din beskjed til $1: $2', +'emailsent' => 'E-post sendt', +'emailsenttext' => 'E-postbeskjeden er sendt', +'emailuserfooter' => 'E-posten ble sendt av $1 til $2 via «Send e-post»-funksjonen på {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Etterlater en systembeskjed.', +'usermessage-editor' => 'Systembudbringer', # Watchlist 'watchlist' => 'Overvåkningsliste', 'mywatchlist' => 'Overvåkningsliste', -'watchlistfor' => "(for '''$1''')", +'watchlistfor2' => 'For $1 $2', 'nowatchlist' => 'Du har ingenting i overvåkningslisten.', 'watchlistanontext' => 'Vennligst $1 for å vise eller redigere sider på overvåkningslisten din.', 'watchnologin' => 'Ikke logget inn', @@ -2037,6 +2083,7 @@ Fremtidige endringer til denne siden og den tilhørende diskusjonssiden blir lis 'enotif_anon_editor' => 'anonym bruker $1', 'enotif_body' => 'Kjære $WATCHINGUSERNAME, + {{SITENAME}}-siden $PAGETITLE har blitt $CHANGEDORCREATED den $PAGEEDITDATE av $PAGEEDITOR, se $PAGETITLE_URL for den nåværende revisjonen. $NEWPAGE @@ -2047,20 +2094,22 @@ Kontakt brukeren: e-post: $PAGEEDITOR_EMAIL wiki: $PAGEEDITOR_WIKI -Det vil ikke komme flere påminnelser om endringer på denne siden med mindre du besøker den. -Du kan også fjerne påminnelsesflagg for alle sider i overvåkningslisten din. +Det vil ikke komme flere varsler om endringer på denne siden med mindre du besøker den. +Du kan også fjerne varslingsflagg for alle overvåkede sider i overvåkningslisten din. -Med vennlig hilsen, -{{SITENAME}}s påminnelsessystem + Ditt vennlige varslingssystem for {{SITENAME}} -- -For å endre innstillingene i overvåkningslisten din, besøk +For å endre innstillingene for e-postvarsler, se +{{fullurl:{{#special:Preferences}}}} + +For å endre innstillingene for overvåkningslisten, se {{fullurl:{{#special:Watchlist}}/edit}} -For å slette siden fra overvåkningslisten din, besøk +For å slette en side fra overvåkningssiden, se $UNWATCHURL -Tilbakemeldinger og videre assistanse: +Tilbakemelding og videre assistanse: {{fullurl:{{MediaWiki:Helppage}}}}', # Delete @@ -2109,7 +2158,10 @@ Den siste redigeringen ble foretatt av [[User:$3|$3]] ([[User talk:$3|diskusjon] 'revertpage' => 'Tilbakestilte endring av [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusjon]]) til siste versjon av [[User:$1|$1]]', 'revertpage-nouser' => 'Tilbakestilte endringer av (fjernet brukernavn) til siste versjon av [[User:$1|$1]]', 'rollback-success' => 'Tilbakestilte endringer av $1; endret til siste versjon av $2.', -'sessionfailure' => "Det ser ut til å være et problem med innloggingen din, og den ble avbrutt av sikkerhetshensyn. Trykk ''Tilbake'' i nettleseren din, oppdater siden og prøv igjen.", + +# Edit tokens +'sessionfailure-title' => 'Sesjonsfeil', +'sessionfailure' => "Det ser ut til å være et problem med innloggingen din, og den ble avbrutt av sikkerhetshensyn. Trykk ''Tilbake'' i nettleseren din, oppdater siden og prøv igjen.", # Protect 'protectlogpage' => 'Beskyttelseslogg', @@ -2234,19 +2286,23 @@ $1', 'month' => 'Fra måned (og tidligere):', 'year' => 'Fra år (og tidligere):', -'sp-contributions-newbies' => 'Vis kun bidrag fra nye kontoer', -'sp-contributions-newbies-sub' => 'For nybegynnere', -'sp-contributions-newbies-title' => 'Bidrag av nye kontoer', -'sp-contributions-blocklog' => 'blokkeringslogg', -'sp-contributions-deleted' => 'slettede brukerbidrag', -'sp-contributions-logs' => 'logger', -'sp-contributions-talk' => 'diskusjon', -'sp-contributions-userrights' => 'brukerrettighetskontroll', -'sp-contributions-blocked-notice' => 'Denne brukeren er for tiden blokkert. +'sp-contributions-newbies' => 'Vis kun bidrag fra nye kontoer', +'sp-contributions-newbies-sub' => 'For nybegynnere', +'sp-contributions-newbies-title' => 'Bidrag av nye kontoer', +'sp-contributions-blocklog' => 'blokkeringslogg', +'sp-contributions-deleted' => 'slettede brukerbidrag', +'sp-contributions-uploads' => 'opplastinger', +'sp-contributions-logs' => 'logger', +'sp-contributions-talk' => 'diskusjon', +'sp-contributions-userrights' => 'brukerrettighetskontroll', +'sp-contributions-blocked-notice' => 'Denne brukeren er for tiden blokkert. Siste blokkeringsloggelement kan sees nedenfor.', -'sp-contributions-search' => 'Søk etter bidrag', -'sp-contributions-username' => 'IP-adresse eller brukernavn:', -'sp-contributions-submit' => 'Søk', +'sp-contributions-blocked-notice-anon' => 'Denne IP-adressen er for tiden blokkert. +Den siste oppføringen i blokkeringsloggen er vist nedenfor som referanse:', +'sp-contributions-search' => 'Søk etter bidrag', +'sp-contributions-username' => 'IP-adresse eller brukernavn:', +'sp-contributions-toponly' => 'Vis kun endringer som er gjeldende revisjoner', +'sp-contributions-submit' => 'Søk', # What links here 'whatlinkshere' => 'Lenker hit', @@ -2305,7 +2361,6 @@ Se [[Special:IPBlockList|blokkeringslisten]] for alle blokkeringer.', 'ipb-edit-dropdown' => 'Rediger blokkeringsgrunner', 'ipb-unblock-addr' => 'Avblokker $1', 'ipb-unblock' => 'Avblokker et brukernavn eller en IP-adresse', -'ipb-blocklist-addr' => 'Gjeldende blokkeringer av $1', 'ipb-blocklist' => 'Vis gjeldende blokkeringer', 'ipb-blocklist-contribs' => 'Bidrag fra $1', 'unblockip' => 'Opphev blokkering', @@ -2374,6 +2429,8 @@ $1 er blokkert fra før. Vil du endre innstillingene?', 'sorbs_create_account_reason' => 'Din IP-adresse angis som en åpen proxy i DNSBL-en brukt av {{SITENAME}}. Du kan ikke opprette en konto', 'cant-block-while-blocked' => 'Du kan ikke blokkere andre mens du selv er blokkert.', 'cant-see-hidden-user' => 'Brukeren du prøver å blokkere har allerede blitt blokkert og skjult. Ettersom du ikke har rett til å skjule brukere (hideuser), kan du ikke se eller endre brukerens blokkering.', +'ipbblocked' => 'Du kan ikke blokkere eller avblokkere andre brukere, siden du selv er blokkert', +'ipbnounblockself' => 'Du har ikke tillatelse til å avblokkere deg selv', # Developer tools 'lockdb' => 'Lås database', @@ -2414,6 +2471,17 @@ Det betyr at du kan flytte en side tilbake dit den kom fra hvis du gjør en feil '''Advarsel!''' Dette kan være en drastisk og uventet endring for en populær side; vær sikker på at du forstår konsekvensene av dette før du fortsetter.", +'movepagetext-noredirectfixer' => "Skjemaet nedenfor vil gi en side ny tittel og flytte historikken dens til det nye navnet. +Den gamle tittelen vil bli en omdirigering til den nye. +Sjekk om det blir [[Special:DoubleRedirects|doble]] eller [[Special:BrokenRedirects|ødelagte omdirigeringer]]. +Du er ansvarlig for å sjekke at lenker fortsetter å gå dit de skal. + +Merk at sider '''ikke''' blir flyttet om det allerede finnes en side med den tittelen, med mindre siden er tom eller en omdirigering og ikke har noen redigeringshistorikk. +Dette betyr at du kan endre tittelen til en tittel siden hadde tidligere, og at du ikke kan skrive over en eksisterende side. + +'''Advarsel!''' +Dette kan være en drastisk og uventen endring for en populær side; +vær sikker på at du forstår konsekvensene av dette før du fortsetter.", 'movepagetalktext' => "Den tilhørende diskusjonssiden vil automatisk bli flyttet sammen med siden '''med mindre:''' *Det allerede finnes en diskusjonsside som ikke er tom under det nye navnet, eller *Du fjerner markeringen i boksen nedenfor. @@ -2469,6 +2537,7 @@ Målsiden «[[:$1]]» finnes allerede. Vil du slette den så denne siden kan fly 'immobile-source-page' => 'Denne siden kan ikke flyttes.', 'immobile-target-page' => 'Kan ikke flytte til det navnet.', 'imagenocrossnamespace' => 'Kan ikke flytte filer til andre navnerom enn filnavnerommet', +'nonfile-cannot-move-to-file' => 'Kan ikke flytte ikke-filer til filnavnerom', 'imagetypemismatch' => 'Den nye filendelsen tilsvarer ikke filtypen', 'imageinvalidfilename' => 'Målnavnet er ugyldig', 'fix-double-redirects' => 'Oppdater omdirigeringer som fører til den gamle tittelen', @@ -2547,6 +2616,7 @@ Lagre den på din egen datamaskin og last den opp her.', 'importstart' => 'Importerer sider …', 'import-revision-count' => '({{PLURAL:$1|Én revisjon|$1 revisjoner}})', 'importnopages' => 'Ingen sider å importere.', +'imported-log-entries' => 'Importerte $1 {{PLURAL:$1|loggoppføring|loggoppføringer}}.', 'importfailed' => 'Importering mislyktes: $1', 'importunknownsource' => 'Ukjent importkildetype', 'importcantopen' => 'Kunne ikke åpne importfil', @@ -2640,6 +2710,8 @@ Du kan se på kildeteksten', 'tooltip-upload' => 'Start opplasting', 'tooltip-rollback' => '«Tilbakestill»-knappen tilbakestiller den siste bidragsyterens endring(er) på denne siden med ett klikk', 'tooltip-undo' => '«Angre» tilbakestiller denne endringen og åpner redigeringsskjemaet i forhåndsvisningsmodus. Det tillater en å legge til en begrunnelse i redigeringsforklaringen.', +'tooltip-preferences-save' => 'Lagre innstillinger', +'tooltip-summary' => 'Skriv et kort sammendrag', # Stylesheets 'common.css' => '/* CSS plassert i denne fila vil gjelde for alle utseender. */', @@ -2766,14 +2838,17 @@ Ved å åpne den kan systemet ditt kompromitteres.", 'imagemaxsize' => "Bildestørrelsesgrense:
    ''(for filbeskrivelsessider)''", 'thumbsize' => 'Miniatyrbildestørrelse:', 'widthheightpage' => '$1×$2, {{PLURAL:$3|én side|$3 sider}}', -'file-info' => '(filstørrelse: $1, MIME-type: $2)', -'file-info-size' => '($1 × $2 piksler, filstørrelse: $3, MIME-type: $4)', +'file-info' => 'filstørrelse: $1, MIME-type: $2', +'file-info-size' => '$1 × $2 piksler, filstørrelse: $3, MIME-type: $4', 'file-nohires' => 'Ingen høyere oppløsning tilgjengelig.', -'svg-long-desc' => '(SVG-fil, standardoppløsning $1 × $2 piksler, filstørrelse: $3)', +'svg-long-desc' => 'SVG-fil, standardoppløsning $1 × $2 piksler, filstørrelse: $3', 'show-big-image' => 'Full oppløsning', 'show-big-image-thumb' => 'Størrelse på denne forhåndsvisningen: $1 × $2 piksler', 'file-info-gif-looped' => 'gjentas', 'file-info-gif-frames' => '$1 {{PLURAL:$1|ramme|rammer}}', +'file-info-png-looped' => 'loopet', +'file-info-png-repeat' => 'avspilt $1 {{PLURAL:$1|gang|ganger}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|bilde|bilder}}', # Special:NewFiles 'newimages' => 'Galleri over nye filer', @@ -2932,6 +3007,7 @@ Andre vil skjules som standard. 'exif-gpsareainformation' => 'Navn på GPS-område', 'exif-gpsdatestamp' => 'GPS-dato', 'exif-gpsdifferential' => 'Differentiell GPS-korreksjon', +'exif-objectname' => 'Kort tittel', # EXIF attributes 'exif-compression-1' => 'Ukomprimert', @@ -3093,24 +3169,24 @@ Rotert 90° mot klokka og vridd vertikalt', 'limitall' => 'alle', # E-mail address confirmation -'confirmemail' => 'Bekreft e-postadresse', -'confirmemail_noemail' => 'Du har ikke oppgitt en gyldig e-postadresse i [[Special:Preferences|innstillingene dine]].', -'confirmemail_text' => 'Du må bekrefte e-postadressen din før du kan benytte deg av e-posttjenester på {{SITENAME}}. Trykk på knappen under for å sende en bekreftelsesmelding til e-postadressen din. Meldingen vil inneholde en lenke med en kode; følg lenken for å bekrefte at e-postadressen er gyldig.', -'confirmemail_pending' => 'En bekreftelseskode har allerede blitt sendt til deg på e-post; om du nylig opprettet kontoen din, kan du ønske å vente noen minutter før du spør om ny kode.', -'confirmemail_send' => 'Send en bekreftelseskode.', -'confirmemail_sent' => 'Bekreftelsesmelding sendt.', -'confirmemail_oncreate' => 'En bekreftelseskode ble sendt til din e-postadresse. Denne koden er ikke nødvendig for å logge inn, men er nødvendig for å slå på e-postbaserte tjenester i denne wikien.', -'confirmemail_sendfailed' => '{{SITENAME}} klarte ikke å sende bekreftelseskode. +'confirmemail' => 'Bekreft e-postadresse', +'confirmemail_noemail' => 'Du har ikke oppgitt en gyldig e-postadresse i [[Special:Preferences|innstillingene dine]].', +'confirmemail_text' => 'Du må bekrefte e-postadressen din før du kan benytte deg av e-posttjenester på {{SITENAME}}. Trykk på knappen under for å sende en bekreftelsesmelding til e-postadressen din. Meldingen vil inneholde en lenke med en kode; følg lenken for å bekrefte at e-postadressen er gyldig.', +'confirmemail_pending' => 'En bekreftelseskode har allerede blitt sendt til deg på e-post; om du nylig opprettet kontoen din, kan du ønske å vente noen minutter før du spør om ny kode.', +'confirmemail_send' => 'Send en bekreftelseskode.', +'confirmemail_sent' => 'Bekreftelsesmelding sendt.', +'confirmemail_oncreate' => 'En bekreftelseskode ble sendt til din e-postadresse. Denne koden er ikke nødvendig for å logge inn, men er nødvendig for å slå på e-postbaserte tjenester i denne wikien.', +'confirmemail_sendfailed' => '{{SITENAME}} klarte ikke å sende bekreftelseskode. Sjekk e-postadressen for ugyldige tegn. E-postsenderen ga følgende melding: $1', -'confirmemail_invalid' => 'Ugyldig bekreftelseskode. Koden kan ha utløpt.', -'confirmemail_needlogin' => 'Du må $1 for å bekrefte e-postadressen din.', -'confirmemail_success' => 'Din e-postadresse er nå bekreftet. Du kan nå logge inn og nyte wikien.', -'confirmemail_loggedin' => 'E-postadressen din er bekreftet.', -'confirmemail_error' => 'Noe gikk galt under lagringen av din bekreftelse.', -'confirmemail_subject' => 'Bekreftelsesmelding fra {{SITENAME}}', -'confirmemail_body' => 'Noen, antageligvis deg, har registrert kontoen «$2» på {{SITENAME}}, fra IP-adressen $1. +'confirmemail_invalid' => 'Ugyldig bekreftelseskode. Koden kan ha utløpt.', +'confirmemail_needlogin' => 'Du må $1 for å bekrefte e-postadressen din.', +'confirmemail_success' => 'Din e-postadresse er nå bekreftet. Du kan nå logge inn og nyte wikien.', +'confirmemail_loggedin' => 'E-postadressen din er bekreftet.', +'confirmemail_error' => 'Noe gikk galt under lagringen av din bekreftelse.', +'confirmemail_subject' => 'Bekreftelsesmelding fra {{SITENAME}}', +'confirmemail_body' => 'Noen, antageligvis deg, har registrert kontoen «$2» på {{SITENAME}}, fra IP-adressen $1. For å bekrefte at denne kontoen tilhører deg og for å aktivere e-posttjenester på {{SITENAME}}, åpne følgende lenke i nettleseren din: @@ -3121,8 +3197,32 @@ Om du *ikke* registrerte kontoen, følg denne lenken for å avbryte bekreftelse $5 Denne bekreftelseskoden utgår $4.', -'confirmemail_invalidated' => 'Bekreftelse av e-postadresse avbrutt', -'invalidateemail' => 'Avbryt bekreftelse av e-postadresse', +'confirmemail_body_changed' => 'Noen, antageligvis deg, fra IP-adresse $1, +har endret e-postadressen til kontoen «$2» til denne adressen på {{SITENAME}}. + +For å bekrefte at denne kontoen virkelig er din og for å reaktivere e-postegenskaper på {{SITENAME}}, åpne denne lenken i nettleseren din: + +$3 + +Dersom denne kontoen *ikke* tilhører deg, følg denne lenken +for å avbryte e-postbekreftelsen: + +$5 + +Denne bekreftelseskoden vil løpe ut $4.', +'confirmemail_body_set' => 'Noen, trolig deg, har satt e-postadressen for kontoen «$2» til denne adressen på {{SITENAME}}, fra IP-adressen $1. + +For å bekrefte at denne kontoen tilhører deg og for å slå på e-posttjenestene på {{SITENAME}}, åpne denne lenka i nettleseren din: + +$3 + +Om kontoen *ikke* tilhører deg, følg denne lenka for å avbryte bekreftelsen: + +$5 + +Denne bekreftelseskoden går ut på dato $4.', +'confirmemail_invalidated' => 'Bekreftelse av e-postadresse avbrutt', +'invalidateemail' => 'Avbryt bekreftelse av e-postadresse', # Scary transclusion 'scarytranscludedisabled' => '[Interwiki-transkludering er slått av]', @@ -3160,6 +3260,7 @@ $1', 'table_pager_first' => 'Første side', 'table_pager_last' => 'Siste side', 'table_pager_limit' => 'Vis $1 elementer per side', +'table_pager_limit_label' => 'Element per side:', 'table_pager_limit_submit' => 'Gå', 'table_pager_empty' => 'Ingen resultater', @@ -3170,7 +3271,7 @@ $1', 'autosumm-new' => 'Ny side: $1', # Live preview -'livepreview-loading' => 'Laster …', +'livepreview-loading' => 'Laster…', 'livepreview-ready' => 'Laster … Klar!', 'livepreview-failed' => 'Levende forhåndsvisning mislyktes. Prøv vanlig forhåndsvisning.', 'livepreview-error' => 'Tilkobling mislyktes: $1 «$2» @@ -3247,6 +3348,7 @@ Du kan også [[Special:Watchlist/edit|bruke standardverktøyet]].', 'version-specialpages' => 'Spesialsider', 'version-parserhooks' => 'Parsertillegg', 'version-variables' => 'Variabler', +'version-skins' => 'Drakter', 'version-other' => 'Annet', 'version-mediahandlers' => 'Mediahåndterere', 'version-hooks' => 'Haker', @@ -3258,6 +3360,13 @@ Du kan også [[Special:Watchlist/edit|bruke standardverktøyet]].', 'version-hook-subscribedby' => 'Brukes av', 'version-version' => '(versjon $1)', 'version-license' => 'Lisens', +'version-poweredby-credits' => "Denne wikien er drevet av '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'andre', +'version-license-info' => 'MediaWiki er fri programvare; du kan redistribuere det og/eller modifisere det under betingelsene i GNU General Public License som publisert av Free Software Foundation; enten versjon 2 av lisensen, eller (etter eget valg) enhver senere versjon. + +MediaWiki er distribuert i håp om at det vil være nyttig, men UTEN NOEN GARANTI; ikke engang implisitt garanti av SALGBARHET eller EGNETHET FOR ET BESTEMT FORMÅL. Se GNU General Public License for flere detaljer. + +Du skal ha mottatt [{{SERVER}}{{SCRIPTPATH}}/COPYING en kopi av GNU General Public License] sammen med dette programmet; hvis ikke, skriv til Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA eller [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html les det på nettet].', 'version-software' => 'Installert programvare', 'version-software-product' => 'Produkt', 'version-software-version' => 'Versjon', @@ -3326,6 +3435,15 @@ Skriv inn filnavn uten «{{ns:file}}:»-prefikset.', 'tags-edit' => 'rediger', 'tags-hitcount' => '{{PLURAL:$1|én endring|$1 endringer}}', +# Special:ComparePages +'comparepages' => 'Sammenlign sider', +'compare-selector' => 'Sammenlign siderevisjoner', +'compare-page1' => 'Side 1', +'compare-page2' => 'Side 2', +'compare-rev1' => 'Revisjon 1', +'compare-rev2' => 'Revisjon 2', +'compare-submit' => 'Sammenlign', + # Database error messages 'dberr-header' => 'Wikien har et problem', 'dberr-problems' => 'Siden har tekniske problemer.', @@ -3342,8 +3460,13 @@ Skriv inn filnavn uten «{{ns:file}}:»-prefikset.', 'htmlform-float-invalid' => 'Verdien du valgte er ikke et tall.', 'htmlform-int-toolow' => 'Verdien du valgte er mindre enn minimum på $1', 'htmlform-int-toohigh' => 'Verdien du valgte er over det mulige $1', +'htmlform-required' => 'Denne verdien er påkrevd', 'htmlform-submit' => 'Lagre', 'htmlform-reset' => 'Omgjør endringer', 'htmlform-selectorother-other' => 'Andre', +# SQLite database support +'sqlite-has-fts' => '$1 med støtte for fulltekstsøk', +'sqlite-no-fts' => '$1 uten støtte for fulltekstsøk', + ); diff --git a/languages/messages/MessagesNov.php b/languages/messages/MessagesNov.php index 5c8cd408..79f06b8e 100644 --- a/languages/messages/MessagesNov.php +++ b/languages/messages/MessagesNov.php @@ -170,7 +170,7 @@ $messages = array( Vu pove kontinua usa {{SITENAME}} anonimim, o vu pove riensignata kom li sami o altri usere.", 'yourname' => 'Usere-nome:', 'yourpassword' => 'Pasa-vorde:', -'remembermypassword' => 'Memora men pasa-vorde (kun kuke)', +'remembermypassword' => 'Memora men pasa-vorde (kun kuke) (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'Ensignata', 'loginprompt' => 'Vu mus lasa cookies de ensignata en {{SITENAME}}.', 'userlogin' => 'Ensignata / krea usere-registre', diff --git a/languages/messages/MessagesNso.php b/languages/messages/MessagesNso.php index 993b79a1..b733dac4 100644 --- a/languages/messages/MessagesNso.php +++ b/languages/messages/MessagesNso.php @@ -51,8 +51,7 @@ $messages = array( 'tog-editsection' => 'Dumella go fetola sekgao ka [fetola] hlomaganyo', 'tog-editsectiononrightclick' => 'Dumella go fetola sekgao ka thathapa ka lagoja thaetlele ya sekgao (JavaScript)', 'tog-showtoc' => 'Bontšha Tatelano ya dikagare (go matlakala a goba le dihlogo tša go feta 3)', -'tog-rememberpassword' => 'Gopola sedi ya go tsena yaka go khomphutha ye', -'tog-editwidth' => 'Lepokisi la diphetogo lebe le bophara ba go tlala', +'tog-rememberpassword' => 'Gopola sedi yaka ya go tsena khomphutha ye (bogolo bja $1 bja {{PLURAL:$1| ya letšatši le|ya matšatši}})', 'tog-watchcreations' => 'Tsenya matlaka a mafsa ao ke a ngwalago go lenano laka la ditlhapetšo', 'tog-watchdefault' => 'Tsenya matlaka ao ke a fetolago go lenano laka la ditlhapetšo', 'tog-watchmoves' => 'Tsenya matlaka ao ke a hudušago go lenano laka la ditlhapetšo', @@ -157,9 +156,6 @@ $messages = array( 'qbmyoptions' => 'Matlakala a ka', 'qbspecialpages' => 'Matlakala a itšego', -# Vector skin -'vector-namespace-main' => 'Letlakala', - 'errorpagetitle' => 'Phošo', 'returnto' => 'Boela go $1.', 'tagline' => 'Gotšwa go {{SITENAME}}', @@ -311,7 +307,7 @@ Tšhupaleloko (''account'') ya gago e tlhodilwe. O seke wa lebala go fetola [[Sp 'yourname' => 'Leina la mošomiši:', 'yourpassword' => 'Ditlhaka-tša-siphiri:', 'yourpasswordagain' => 'Tlanya ditlhaka-tša-siphiri gape:', -'remembermypassword' => 'Gopola sedi yaka ya go tsena khômphutha ye', +'remembermypassword' => 'Gopola sedi yaka ya go tsena khomphutha ye (bogolo bja $1 ya {{PLURAL:$1| letšatši le|matšatši a}})', 'login' => 'Tsena', 'nav-login-createaccount' => "Tsena / Tlhola tšhupaleloko (''account'')", 'loginprompt' => "O swanela ke go dumella ''cookies'' go ''browser'' go tsena go {{SITENAME}}.", @@ -325,6 +321,7 @@ Tšhupaleloko (''account'') ya gago e tlhodilwe. O seke wa lebala go fetola [[Sp 'gotaccount' => "O šetše o nale tšhupaleloko? '''$1'''.", 'gotaccountlink' => 'Tsena', 'createaccountmail' => 'ka e-mail', +'createaccountreason' => 'Lebaka:', 'badretype' => 'Ditlhaka-tša-siphiri tše o di šomišitšego ga di swane.', 'noname' => 'Gawa fana ka leina la mošomiši la go loka.', 'loginsuccesstitle' => 'O tsene ka katlego', @@ -454,10 +451,6 @@ oka [[Special:Search/{{PAGENAME}}|fetleka liena la letlakala]] matlakaleng a man 'copyrightwarning' => "Diabe kamoka go {{SITENAME}} di akanywa go ngwadiwa tlase ga $2 (lebelela $1 go hwetša taba ka bophara). Ge o sa nyake gore mengwalo ya gago e fetolwe ntle le kgaugelo goba e phatlalatšwe ntle le tumello ya gago, o seke wa fana ka mengwalo mo.
    Gape o re holofetša gore mengwalo ye e ngwadile ke wena, goba o e kopiša mothapong wa pepeneneng goba ke mahala. '''O SE TSENYE MEŠOMO YA BATHO BA BANGWE NTLE LE TUMELLO YA BONA!'''", -'longpagewarning' => "'''TEMOŠO: Letlakala le le $1 kilobytes ka botelele; -di-''browser'' tše dingwe dika ba le bothata go fetola matlakala a golena goba gofeta 32 kb. - -Ka kgopela akanya ka go roba letlakala le goba le dikgaoe tše nnyenyane.'''", 'templatesused' => '"{{PLURAL:$1|Template yeo e|Di-Template tšeo di}}\'\' šomišitšwego letlakaleng le:', 'templatesusedpreview' => '{{PLURAL:$1|"Template" yeo e|"DiTemplate" tšeo di}} šomišitšwego go taetšo ya sebopego sa letlakala:', 'template-protected' => '(e lotilwe)', @@ -833,7 +826,6 @@ Matlakala ago ba [[Special:Watchlist|lenanong la gago la matlakala ditlhapetšo] # Watchlist 'watchlist' => 'Lenano la ditlhapetšo tša ka', 'mywatchlist' => 'Lenano la ditlhapetšo tša ka', -'watchlistfor' => "(ya '''$1''')", 'addedwatch' => 'Loketšwe go lenano la ditlhapetšo', 'addedwatchtext' => "Letlakala \"[[:\$1]]\" le tsene go [[Special:Watchlist|watchlist]] ya gago. Go tloga bjale, diphetogo letlakaleng le, le letlakaleng la dipoledišano la gona, di tla bontšhwa ka mongalo wa '''bold''' gare ga [[Special:RecentChanges|list of recent changes]] gore go be bonolo gore oa bone. @@ -1128,9 +1120,9 @@ $1', # Media information 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|letlakala|matlakala}}', -'file-info-size' => '($1 × $2 pixel, bogolo ba faele: $3, Mohuta wa MIME: $4)', +'file-info-size' => '$1 × $2 pixel, bogolo ba faele: $3, Mohuta wa MIME: $4', 'file-nohires' => "Gago ''resolution'' ya go feta mo.", -'svg-long-desc' => '(SVG faele, nominally $1 × $2 pixels, bogolo ba faele: $3)', +'svg-long-desc' => 'SVG faele, nominally $1 × $2 pixels, bogolo ba faele: $3', 'show-big-image' => "''resolution'' ya gofella", 'show-big-image-thumb' => 'Bogolo ba pono: $1 × $2 pixels', diff --git a/languages/messages/MessagesNv.php b/languages/messages/MessagesNv.php index 1d290cf4..a1326e09 100644 --- a/languages/messages/MessagesNv.php +++ b/languages/messages/MessagesNv.php @@ -164,7 +164,7 @@ $messages = array( # Login and logout pages 'yourname' => 'Choyoołʼįįhí bizhiʼ:', 'yourpassword' => 'Passwordígíí:', -'remembermypassword' => 'shipassword béédíínih', +'remembermypassword' => 'shipassword béédíínih (for a maximum of $1 {{PLURAL:$1|day|days}})', 'nav-login-createaccount' => 'Log in / accountígíí ádíílííł', 'nologinlink' => 'Accountígíí ádíílííł', 'mailmypassword' => 'passwordígíí ániidí shichʼįʼ ádíílííł (e-mail)', @@ -288,7 +288,6 @@ $3', # Watchlist 'watchlist' => 'bikʼi déshʼį́į́ʼígíí', 'mywatchlist' => 'bikʼi déshʼį́į́ʼígíí', -'watchlistfor' => "('''$1''')", 'addedwatchtext' => "[[Special:Watchlist|Naaltsoos bikʼi díníʼį́į́ʼígíí]] bíhiniidééh. \"[[:\$1]]\" kʼad bikʼi díníʼį́į́ʼ.
    Nááná [[Special:RecentChanges|\"áníídí łahgo ályaaígíí\"]] bikáaʼgi díí naaltsoos kʼad kodóó '''ditą́ą''' dooleeł.", 'removedwatchtext' => '"[[:$1]]" kʼad doo [[Special:Watchlist|bikʼi díníʼį́į]] da.', 'watch' => 'bikʼi déshʼį́į́ʼ nisin', diff --git a/languages/messages/MessagesOc.php b/languages/messages/MessagesOc.php index 8458ee0a..db079055 100644 --- a/languages/messages/MessagesOc.php +++ b/languages/messages/MessagesOc.php @@ -55,91 +55,91 @@ $namespaceAliases = array( ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'Redireccions doblas', 'RedireccionsDoblas' ), - 'BrokenRedirects' => array( 'Redireccions copadas', 'RedireccionsCopadas' ), - 'Disambiguations' => array( 'Omonimia', 'Omonimias', 'Paginas d\'omonimia' ), - 'Userlogin' => array( 'Nom d\'utilizaire' ), + 'DoubleRedirects' => array( 'Redireccions_doblas', 'RedireccionsDoblas' ), + 'BrokenRedirects' => array( 'Redireccions_copadas', 'RedireccionsCopadas' ), + 'Disambiguations' => array( 'Omonimia', 'Omonimias', 'Paginas_d\'omonimia' ), + 'Userlogin' => array( 'Nom_d\'utilizaire' ), 'Userlogout' => array( 'Desconnexion' ), - 'CreateAccount' => array( 'Crear un compte', 'CrearUnCompte', 'CrearCompte' ), + 'CreateAccount' => array( 'Crear_un_compte', 'CrearUnCompte', 'CrearCompte' ), 'Preferences' => array( 'Preferéncias' ), - 'Watchlist' => array( 'Lista de seguit', 'ListraDeSeguit', 'Seguit', 'Lista de seguiment', 'ListraDeSeguiment', 'Seguiment' ), - 'Recentchanges' => array( 'Darrièrs cambiaments', 'DarrièrsCambiaments', 'Darrièras Modificacions' ), + 'Watchlist' => array( 'Lista_de_seguit', 'ListraDeSeguit', 'Seguit', 'Lista_de_seguiment', 'ListraDeSeguiment', 'Seguiment' ), + 'Recentchanges' => array( 'Darrièrs_cambiaments', 'DarrièrsCambiaments', 'Darrièras_Modificacions' ), 'Upload' => array( 'Telecargament', 'Telecargaments' ), - 'Listfiles' => array( 'Lista dels imatges', 'ListaDelsImatges' ), - 'Newimages' => array( 'Imatges novèls', 'ImatgesNovèls' ), - 'Listusers' => array( 'Lista dels utilizaires', 'ListaDelsUtilizaires' ), - 'Listgrouprights' => array( 'Lista dels gropes utilizaire', 'ListadelsGropesUtilizaire', 'ListaGropesUtilizaire', 'Tièra dels gropes utilizaire', 'TièradelsGropesUtilizaire', 'TièraGropesUtilizaire' ), + 'Listfiles' => array( 'Lista_dels_imatges', 'ListaDelsImatges' ), + 'Newimages' => array( 'Imatges_novèls', 'ImatgesNovèls' ), + 'Listusers' => array( 'Lista_dels_utilizaires', 'ListaDelsUtilizaires' ), + 'Listgrouprights' => array( 'Lista_dels_gropes_utilizaire', 'ListadelsGropesUtilizaire', 'ListaGropesUtilizaire', 'Tièra_dels_gropes_utilizaire', 'TièradelsGropesUtilizaire', 'TièraGropesUtilizaire' ), 'Statistics' => array( 'Estatisticas', 'Stats' ), - 'Randompage' => array( 'Pagina a l\'azard' ), - 'Lonelypages' => array( 'Paginas orfanèlas' ), - 'Uncategorizedpages' => array( 'Paginas sens categoria' ), - 'Uncategorizedcategories' => array( 'Categorias sens categoria' ), - 'Uncategorizedimages' => array( 'Imatges sens categoria' ), - 'Uncategorizedtemplates' => array( 'Modèls sens categoria' ), - 'Unusedcategories' => array( 'Categorias inutilizadas' ), - 'Unusedimages' => array( 'Imatges inutilizats' ), - 'Wantedpages' => array( 'Paginas demandadas' ), - 'Wantedcategories' => array( 'Categorias demandadas' ), - 'Wantedfiles' => array( 'Fichièrs demandats', 'FichièrsDemandats' ), - 'Wantedtemplates' => array( 'Modèls demandats', 'ModèlsDemandats' ), - 'Mostlinked' => array( 'Imatges mai utilizats' ), - 'Mostlinkedcategories' => array( 'Categorias mai utilizadas', 'CategoriasMaiUtilizadas' ), - 'Mostlinkedtemplates' => array( 'Modèls mai utilizats', 'ModèlsMaiUtilizats' ), - 'Mostimages' => array( 'Mai d\'imatges' ), - 'Mostcategories' => array( 'Mai de categorias' ), - 'Mostrevisions' => array( 'Mai de revisions' ), - 'Fewestrevisions' => array( 'Mens de revisions' ), - 'Shortpages' => array( 'Articles brèus' ), - 'Longpages' => array( 'Articles longs' ), - 'Newpages' => array( 'Paginas novèlas' ), - 'Ancientpages' => array( 'Paginas ancianas' ), - 'Deadendpages' => array( 'Paginas sul camin d\'enlòc' ), - 'Protectedpages' => array( 'Paginas protegidas' ), - 'Protectedtitles' => array( 'Títols protegits', 'TítolsProtegits' ), - 'Allpages' => array( 'Totas las paginas' ), + 'Randompage' => array( 'Pagina_a_l\'azard' ), + 'Lonelypages' => array( 'Paginas_orfanèlas' ), + 'Uncategorizedpages' => array( 'Paginas_sens_categoria' ), + 'Uncategorizedcategories' => array( 'Categorias_sens_categoria' ), + 'Uncategorizedimages' => array( 'Imatges_sens_categoria' ), + 'Uncategorizedtemplates' => array( 'Modèls_sens_categoria' ), + 'Unusedcategories' => array( 'Categorias_inutilizadas' ), + 'Unusedimages' => array( 'Imatges_inutilizats' ), + 'Wantedpages' => array( 'Paginas_demandadas' ), + 'Wantedcategories' => array( 'Categorias_demandadas' ), + 'Wantedfiles' => array( 'Fichièrs_demandats', 'FichièrsDemandats' ), + 'Wantedtemplates' => array( 'Modèls_demandats', 'ModèlsDemandats' ), + 'Mostlinked' => array( 'Imatges_mai_utilizats' ), + 'Mostlinkedcategories' => array( 'Categorias_mai_utilizadas', 'CategoriasMaiUtilizadas' ), + 'Mostlinkedtemplates' => array( 'Modèls_mai_utilizats', 'ModèlsMaiUtilizats' ), + 'Mostimages' => array( 'Mai_d\'imatges' ), + 'Mostcategories' => array( 'Mai_de_categorias' ), + 'Mostrevisions' => array( 'Mai_de_revisions' ), + 'Fewestrevisions' => array( 'Mens_de_revisions' ), + 'Shortpages' => array( 'Articles_brèus' ), + 'Longpages' => array( 'Articles_longs' ), + 'Newpages' => array( 'Paginas_novèlas' ), + 'Ancientpages' => array( 'Paginas_ancianas' ), + 'Deadendpages' => array( 'Paginas_sul_camin_d\'enlòc' ), + 'Protectedpages' => array( 'Paginas_protegidas' ), + 'Protectedtitles' => array( 'Títols_protegits', 'TítolsProtegits' ), + 'Allpages' => array( 'Totas_las_paginas' ), 'Prefixindex' => array( 'Indèx' ), - 'Ipblocklist' => array( 'Utilizaires blocats' ), - 'Specialpages' => array( 'Paginas especialas' ), + 'Ipblocklist' => array( 'Utilizaires_blocats' ), + 'Specialpages' => array( 'Paginas_especialas' ), 'Contributions' => array( 'Contribucions' ), - 'Emailuser' => array( 'Corrièr electronic', 'Email', 'Emèl', 'Emèil' ), - 'Confirmemail' => array( 'Confirmar lo corrièr electronic', 'Confirmarlocorrièrelectronic', 'ConfirmarCorrièrElectronic' ), - 'Whatlinkshere' => array( 'Paginas ligadas' ), - 'Recentchangeslinked' => array( 'Seguit dels ligams' ), - 'Movepage' => array( 'Tornar nomenar', 'Cambiament de nom' ), - 'Blockme' => array( 'Blocatz me', 'Blocatz-me' ), - 'Booksources' => array( 'Obratge de referéncia', 'Obratges de referéncia' ), + 'Emailuser' => array( 'Corrièr_electronic', 'Email', 'Emèl', 'Emèil' ), + 'Confirmemail' => array( 'Confirmar_lo_corrièr_electronic', 'Confirmarlocorrièrelectronic', 'ConfirmarCorrièrElectronic' ), + 'Whatlinkshere' => array( 'Paginas_ligadas' ), + 'Recentchangeslinked' => array( 'Seguit_dels_ligams' ), + 'Movepage' => array( 'Tornar_nomenar', 'Cambiament_de_nom' ), + 'Blockme' => array( 'Blocatz_me', 'Blocatz-me' ), + 'Booksources' => array( 'Obratge_de_referéncia', 'Obratges_de_referéncia' ), 'Categories' => array( 'Categorias' ), 'Export' => array( 'Exportar', 'Exportacion' ), - 'Allmessages' => array( 'Messatge sistèma', 'Messatge del sistèma' ), + 'Allmessages' => array( 'Messatge_sistèma', 'Messatge_del_sistèma' ), 'Log' => array( 'Jornal', 'Jornals' ), 'Blockip' => array( 'Blocar', 'Blocatge' ), 'Undelete' => array( 'Restablir', 'Restabliment' ), 'Import' => array( 'Impòrt', 'Importacion' ), - 'Lockdb' => array( 'Varrolhar la banca' ), - 'Unlockdb' => array( 'Desvarrolhar la banca' ), + 'Lockdb' => array( 'Varrolhar_la_banca' ), + 'Unlockdb' => array( 'Desvarrolhar_la_banca' ), 'Userrights' => array( 'Dreches', 'Permission' ), - 'MIMEsearch' => array( 'Recèrca MIME' ), - 'FileDuplicateSearch' => array( 'Recèrca fichièr en doble', 'RecèrcaFichièrEnDoble' ), - 'Unwatchedpages' => array( 'Paginas pas seguidas' ), - 'Listredirects' => array( 'Lista de las redireccions', 'Listadelasredireccions', 'Lista dels redirects', 'Listadelsredirects', 'Lista redireccions', 'Listaredireccions', 'Lista redirects', 'Listaredirects' ), - 'Revisiondelete' => array( 'Versions suprimidas' ), - 'Unusedtemplates' => array( 'Modèls inutilizats', 'Modèlsinutilizats', 'Models inutilizats', 'Modelsinutilizats', 'Modèls pas utilizats', 'Modèlspasutilizats', 'Models pas utilizats', 'Modelspasutilizats' ), - 'Randomredirect' => array( 'Redireccion a l\'azard', 'Redirect a l\'azard' ), - 'Mypage' => array( 'Ma pagina', 'Mapagina' ), - 'Mytalk' => array( 'Mas discussions', 'Masdiscussions' ), - 'Mycontributions' => array( 'Mas contribucions', 'Mascontribucions' ), - 'Listadmins' => array( 'Lista dels administrators', 'Listadelsadministrators', 'Lista dels admins', 'Listadelsadmins', 'Lista admins', 'Listaadmins' ), - 'Listbots' => array( 'Lista dels Bòts', 'ListadelsBòts', 'Lista dels Bots', 'ListadelsBots' ), - 'Popularpages' => array( 'Paginas mai visitadas', 'Paginas las mai visitadas', 'Paginasmaivisitadas' ), + 'MIMEsearch' => array( 'Recèrca_MIME' ), + 'FileDuplicateSearch' => array( 'Recèrca_fichièr_en_doble', 'RecèrcaFichièrEnDoble' ), + 'Unwatchedpages' => array( 'Paginas_pas_seguidas' ), + 'Listredirects' => array( 'Lista_de_las_redireccions', 'Listadelasredireccions', 'Lista_dels_redirects', 'Listadelsredirects', 'Lista_redireccions', 'Listaredireccions', 'Lista_redirects', 'Listaredirects' ), + 'Revisiondelete' => array( 'Versions_suprimidas' ), + 'Unusedtemplates' => array( 'Modèls_inutilizats', 'Modèlsinutilizats', 'Models_inutilizats', 'Modelsinutilizats', 'Modèls_pas_utilizats', 'Modèlspasutilizats', 'Models_pas_utilizats', 'Modelspasutilizats' ), + 'Randomredirect' => array( 'Redireccion_a_l\'azard', 'Redirect_a_l\'azard' ), + 'Mypage' => array( 'Ma_pagina', 'Mapagina' ), + 'Mytalk' => array( 'Mas_discussions', 'Masdiscussions' ), + 'Mycontributions' => array( 'Mas_contribucions', 'Mascontribucions' ), + 'Listadmins' => array( 'Lista_dels_administrators', 'Listadelsadministrators', 'Lista_dels_admins', 'Listadelsadmins', 'Lista_admins', 'Listaadmins' ), + 'Listbots' => array( 'Lista_dels_Bòts', 'ListadelsBòts', 'Lista_dels_Bots', 'ListadelsBots' ), + 'Popularpages' => array( 'Paginas_mai_visitadas', 'Paginas_las_mai_visitadas', 'Paginasmaivisitadas' ), 'Search' => array( 'Recèrca', 'Recercar', 'Cercar' ), - 'Resetpass' => array( 'Reïnicializacion del senhal', 'Reinicializaciondelsenhal' ), - 'Withoutinterwiki' => array( 'Sens interwiki', 'Sensinterwiki', 'Sens interwikis', 'Sensinterwikis' ), - 'MergeHistory' => array( 'Fusionar l\'istoric', 'Fusionarlistoric' ), - 'Filepath' => array( 'Camin del Fichièr', 'CamindelFichièr', 'CaminFichièr' ), - 'Invalidateemail' => array( 'Invalidar Corrièr electronic', 'InvalidarCorrièrElectronic' ), - 'Blankpage' => array( 'Pagina blanca', 'PaginaBlanca' ), - 'LinkSearch' => array( 'Recèrca de ligams', 'RecèrcaDeLigams' ), - 'DeletedContributions' => array( 'Contribucions escafadas', 'ContribucionsEscafadas' ), + 'Resetpass' => array( 'Reïnicializacion_del_senhal', 'Reinicializaciondelsenhal' ), + 'Withoutinterwiki' => array( 'Sens_interwiki', 'Sensinterwiki', 'Sens_interwikis', 'Sensinterwikis' ), + 'MergeHistory' => array( 'Fusionar_l\'istoric', 'Fusionarlistoric' ), + 'Filepath' => array( 'Camin_del_Fichièr', 'CamindelFichièr', 'CaminFichièr' ), + 'Invalidateemail' => array( 'Invalidar_Corrièr_electronic', 'InvalidarCorrièrElectronic' ), + 'Blankpage' => array( 'Pagina_blanca', 'PaginaBlanca' ), + 'LinkSearch' => array( 'Recèrca_de_ligams', 'RecèrcaDeLigams' ), + 'DeletedContributions' => array( 'Contribucions_escafadas', 'ContribucionsEscafadas' ), 'Tags' => array( 'Balisas' ), ); @@ -203,10 +203,10 @@ $magicWords = array( 'img_none' => array( '1', 'neant', 'nonrés', 'none' ), 'img_center' => array( '1', 'centrat', 'center', 'centre' ), 'img_framed' => array( '1', 'quadre', 'enquagrat', 'framed', 'enframed', 'frame' ), - 'img_frameless' => array( '1', 'sens_quadre', 'sens quadre', 'frameless' ), + 'img_frameless' => array( '1', 'sens_quadre', 'frameless' ), 'img_upright' => array( '1', 'redreça', 'redreça$1', 'redreça $1', 'upright', 'upright=$1', 'upright $1' ), 'img_border' => array( '1', 'bordadura', 'border' ), - 'img_baseline' => array( '1', 'linha de basa', 'baseline' ), + 'img_baseline' => array( '1', 'linha_de_basa', 'baseline' ), 'img_sub' => array( '1', 'indici', 'ind', 'sub' ), 'img_super' => array( '1', 'exp', 'super', 'sup' ), 'img_top' => array( '1', 'naut', 'top' ), @@ -215,7 +215,7 @@ $magicWords = array( 'img_bottom' => array( '1', 'bas', 'bottom' ), 'img_text_bottom' => array( '1', 'bas-tèxte', 'bas-txt', 'text-bottom' ), 'img_link' => array( '1', 'ligam=$1', 'link=$1' ), - 'sitename' => array( '1', 'NOMSIT', 'NOMSITE NOMSITI', 'SITENAME' ), + 'sitename' => array( '1', 'NOMSIT', 'NOMSITE_NOMSITI', 'SITENAME' ), 'ns' => array( '0', 'ESPACEN:', 'NS:' ), 'localurl' => array( '0', 'URLLOCALA:', 'LOCALURL:' ), 'localurle' => array( '0', 'URLLOCALAX:', 'LOCALURLE:' ), @@ -304,8 +304,7 @@ $messages = array( 'tog-editsection' => 'Modificar una seccion via los ligams [modificar]', 'tog-editsectiononrightclick' => 'Modificar una seccion en fasent un clic drech sus son títol (JavaScript)', 'tog-showtoc' => "Afichar l'ensenhador (per las paginas de mai de 3 seccions)", -'tog-rememberpassword' => 'Se remembrar de mon senhal sus aqueste ordenador (cookie)', -'tog-editwidth' => 'Afichar la fenèstra de modificacion en largor plena', +'tog-rememberpassword' => 'Se remembrar de mon senhal sus aqueste ordenador (al maximum $1 {{PLURAL:$1|jorn|jorns}})', 'tog-watchcreations' => 'Apondre las paginas que creï a ma lista de seguiment', 'tog-watchdefault' => 'Apondre las paginas que modifiqui a ma lista de seguiment', 'tog-watchmoves' => 'Apondre las paginas que tòrni nomenar a ma lista de seguiment', @@ -452,31 +451,20 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Apondre un subjècte', -'vector-action-delete' => 'Suprimir', -'vector-action-move' => 'Tornar nomenar', -'vector-action-protect' => 'Protegir', -'vector-action-undelete' => 'Restablir', -'vector-action-unprotect' => 'Desprotegir', -'vector-namespace-category' => 'Categoria', -'vector-namespace-help' => "Pagina d'ajuda", -'vector-namespace-image' => 'Fichièr', -'vector-namespace-main' => 'Pagina', -'vector-namespace-media' => 'Pagina de Mèdia', -'vector-namespace-mediawiki' => 'Messatge', -'vector-namespace-project' => 'Pagina de projècte', -'vector-namespace-special' => 'Pagina especiala', -'vector-namespace-talk' => 'Discussion', -'vector-namespace-template' => 'Modèl', -'vector-namespace-user' => "Pagina d'utilizaire", -'vector-view-create' => 'Crear', -'vector-view-edit' => 'Modificar', -'vector-view-history' => "Veire l'istoric", -'vector-view-view' => 'Legir', -'vector-view-viewsource' => 'Veire la font', -'actions' => 'Accions', -'namespaces' => 'Espacis de noms', -'variants' => 'Variantas', +'vector-action-addsection' => 'Apondre un subjècte', +'vector-action-delete' => 'Suprimir', +'vector-action-move' => 'Tornar nomenar', +'vector-action-protect' => 'Protegir', +'vector-action-undelete' => 'Restablir', +'vector-action-unprotect' => 'Desprotegir', +'vector-view-create' => 'Crear', +'vector-view-edit' => 'Modificar', +'vector-view-history' => "Veire l'istoric", +'vector-view-view' => 'Legir', +'vector-view-viewsource' => 'Veire la font', +'actions' => 'Accions', +'namespaces' => 'Espacis de noms', +'variants' => 'Variantas', 'errorpagetitle' => 'Error de títol', 'returnto' => 'Tornar a la pagina $1.', @@ -699,7 +687,7 @@ Doblidetz pas de personalizar vòstras [[Special:Preferences|{{SITENAME}} prefer 'yourname' => "Vòstre nom d'utilizaire :", 'yourpassword' => 'Vòstre senhal :', 'yourpasswordagain' => 'Picatz vòstre senhal tornarmai :', -'remembermypassword' => 'Se remembrar de mon senhal (cookie)', +'remembermypassword' => 'Me reconnectar automaticament a las visitas venentas (al maximum $1 {{PLURAL:$1|jorn|jorns}})', 'yourdomainname' => 'Vòstre domeni', 'externaldberror' => 'Siá una error s’es producha amb la banca de donadas d’autentificacion extèrna, siá sètz pas autorizat a metre a jorn vòstre compte extèrne.', 'login' => 'Identificacion', @@ -716,6 +704,7 @@ Doblidetz pas de personalizar vòstras [[Special:Preferences|{{SITENAME}} prefer 'gotaccount' => "Ja avètz un compte ? '''$1'''.", 'gotaccountlink' => 'Identificatz-vos', 'createaccountmail' => 'per corrièr electronic', +'createaccountreason' => 'Motiu :', 'badretype' => "Los senhals qu'avètz picats son pas identics.", 'userexists' => "Lo nom d'utilizaire qu'avètz picat ja es utilizat. Causissètz-ne un autre.", @@ -828,9 +817,10 @@ Benlèu ja avètz modificat vòstre senhal o demandat un senhal temporari novèl 'showdiff' => 'Cambiaments en cors', 'anoneditwarning' => "'''Atencion :''' sètz pas identificat(ada). Vòstra adreça IP serà enregistrada dins l’istoric d'aquesta pagina.", +'anonpreviewwarning' => "''Sètz pas identificat. Salvar enregistrarà vòstra adreça IP dins l’istoric de las modificacions de la pagina.''", 'missingsummary' => "'''Atencion :''' avètz pas modificat lo resumit de vòstra modificacion. Se clicatz tornarmai sul boton « Salvar », lo salvament serà fach sens avertiment mai.", 'missingcommenttext' => 'Mercé de metre un comentari çaijós.', -'missingcommentheader' => "'''Rampèl :''' Avètz pas provesit de subjècte/títol per aqueste comentari. Se clicatz tornamai sus ''Salvar'', vòstra edicion serà enregistrada sens aquò.", +'missingcommentheader' => "'''*Rampèl:''' Avètz pas escrich de títol per aqueste comentari. Se tornatz clicar sus \"{{*int:*savearticle}}\" serà enregistrat sens títol.", 'summary-preview' => 'Previsualizacion del resumit :', 'subject-preview' => 'Previsualizacion del subjècte/títol :', 'blockedtitle' => "L'utilizaire es blocat", @@ -900,7 +890,10 @@ La darrièra entrada del jornal dels blocatges es indicada çaijós a títol d 'usercsspreview' => "'''Remembratz-vos que sètz a previsualizar vòstre pròpri fuèlh CSS !''' '''Es pas estada encara enregistrada !'''", 'userjspreview' => "'''Remembratz-vos que sètz a visualizar o testar vòstre còde JavaScript e qu’es pas encara estat enregistrat !'''", -'userinvalidcssjstitle' => "'''Atencion :''' existís pas d'estil « $1 ». Remembratz-vos que las paginas personalas amb extensions .css e .js utilizan de títols en minusculas, per exemple, {{ns:user}}:Foo/monobook.css e non pas {{ns:user}}:Foo/Monobook.css.", +'sitecsspreview' => "'''Remembratz-vos que sètz a previsualizar vòstre pròpri fuèlh CSS !''' +'''Es pas estada encara enregistrada !'''", +'sitejspreview' => "'''Remembratz-vos que sètz a visualizar o testar vòstre còde JavaScript e qu’es pas encara estat enregistrat !'''", +'userinvalidcssjstitle' => "'''Atencion :''' existís pas d'estil « $1 ». Remembratz-vos que las paginas personalas amb extensions .css e .js utilizan de títols en minusculas, per exemple, {{ns:user}}:Foo/vector.css e non pas {{ns:user}}:Foo/Vector.css.", 'updated' => '(Mes a jorn)', 'note' => "'''Nòta :'''", 'previewnote' => "'''Atencion, aqueste tèxte es sonque una previsualizacion e es pas encara estat salvat !'''", @@ -931,8 +924,6 @@ Vos va caler aportar vòstras modificacions al tèxte existent. 'yourdiff' => 'Diferéncias', 'copyrightwarning' => "Totas las contribucions a {{SITENAME}} son consideradas coma publicadas jols tèrmes de la $2 (vejatz $1 per mai de detalhs). Se desiratz pas que vòstres escriches sián modificats e distribuits a volontat, mercés de los sometre pas aicí.
    Nos prometètz tanben qu'avètz escrich aquò vos-meteis, o que l’avètz copiat d’una font provenent del domeni public, o d’una ressorsa liura.'''UTILIZETZ PAS DE TRABALHS JOS COPYRIGHT SENS AUTORIZACION EXPRÈSSA !'''", 'copyrightwarning2' => "Totas las contribucions a {{SITENAME}} pòdon èsser modificadas o suprimidas per d’autres utilizaires. Se desiratz pas que vòstres escriches sián modificats e distribuits a volontat, mercés de los sometre pas aicí.
    Tanben nos prometètz qu'avètz escrich aquò vos-meteis, o que l’avètz copiat d’una font provenent del domeni public, o d’una ressorsa liura. (vejatz $1 per mai de detalhs). '''UTILIZETZ PAS DE TRABALHS JOS COPYRIGHT SENS AUTORIZACION EXPRÈSSA !'''", -'longpagewarning' => "'''AVERTIMENT : aquesta pagina a una longor de $1 ko. -De delà de 32 ko, es preferible per d'unes navigadors de devesir aquesta pagina en seccions mai pichonas. Benlèu deuriatz devesir la pagina en seccions mai pichonas.'''", 'longpageerror' => "'''ERROR : Lo tèxte qu'avètz mandat es de $1 Ko, e depassa doncas lo limit autorizat dels $2 Ko. Lo tèxte pòt pas èsser salvat.'''", 'readonlywarning' => "'''AVERTIMENT : La banca de donadas es estada varrolhada per mantenença, doncas poiretz pas salvar vòstras modificacions ara. Podètz copiar lo tèxte dins un fichièr de tèxte e lo salvar per mai tard.''' @@ -1106,6 +1097,8 @@ $1", 'logdelete-failure' => "'''La visibilitat del jornal a pas pogut èsser definida :''' $1", 'revdel-restore' => 'Modificar la visibilitat', +'revdel-restore-deleted' => 'revisions suprimidas', +'revdel-restore-visible' => 'revisions visiblas', 'pagehist' => 'Istoric de la pagina', 'deletedhist' => 'Istoric de las supressions', 'revdelete-content' => 'contengut', @@ -1176,7 +1169,7 @@ Asseguratz-vos qu'aqueste cambiament pòsca conservar la continuitat de l'istori 'compareselectedversions' => 'Comparar las versions seleccionadas', 'showhideselectedversions' => 'Afichar/amagar las versions seleccionadas', 'editundo' => 'desfar', -'diff-multi' => '({{PLURAL:$1|Una revision intermediària amagada|$1 revisions intermediàrias amagadas}})', +'diff-multi' => '({{PLURAL:$1|Una revision intermediària amagada|$1 revisions intermediàrias amagadas}}) per ({{PLURAL:$2|un utilizaire pas afichada|$2 utilizaires pas afichadas}})', # Search results 'searchresults' => 'Resultats de la recèrca', @@ -1211,6 +1204,7 @@ Asseguratz-vos qu'aqueste cambiament pòsca conservar la continuitat de l'istori 'searchprofile-everything-tooltip' => 'Recercar dins tot lo contengut (tot incluissent las paginas de discussion)', 'searchprofile-advanced-tooltip' => "Recercar dins d'espacis de noms personalizats", 'search-result-size' => '$1 ({{PLURAL:$2|1 mot|$2 mots}})', +'search-result-category-size' => '$1 membre{{PLURAL:$1||s}} ($2 soscategoria{{PLURAL:$2||s}}, $3 fichièr{{PLURAL:$3||s}})', 'search-result-score' => 'Pertinéncia : $1%', 'search-redirect' => '(redireccion cap a $1)', 'search-section' => '(seccion $1)', @@ -1288,6 +1282,7 @@ Atencion, lor indexacion de contengut {{SITENAME}} benlèu es pas a jorn.', 'contextlines' => 'Nombre de linhas per responsa :', 'contextchars' => 'Nombre de caractèrs de contèxte per linha :', 'stub-threshold' => 'Limit superior pels ligams cap als esbòsses (octets) :', +'stub-threshold-disabled' => 'Desactivat', 'recentchangesdays' => "Nombre de jorns d'afichar dins los darrièrs cambiaments :", 'recentchangesdays-max' => '(maximum $1 {{PLURAL:$1|jorn|jorns}})', 'recentchangescount' => "Nombre de modificacions d'afichar per defaut :", @@ -1321,6 +1316,7 @@ Vaquí una valor generada aleatòriament que podètz utilizar : $1', 'prefs-files' => 'Fichièrs', 'prefs-custom-css' => 'CSS personalizat', 'prefs-custom-js' => 'JS personalizat', +'prefs-common-css-js' => 'JavaScript e CSS partejat per totes los abilhatges :', 'prefs-reset-intro' => 'Podètz utilizar aquesta pagina per restablir vòstras preferéncias a las valors per defaut del site. Aquò pòt pas èsser desfach.', 'prefs-emailconfirm-label' => 'Confirmacion del corrièr electronic :', 'prefs-textboxsize' => 'Talha de la fenèstra de modificacion', @@ -1357,7 +1353,7 @@ Tanben podètz causir de permetre a d’autres de vos contactar amb l'ajuda de v 'prefs-advancedrendering' => 'Opcions avançadas', 'prefs-advancedsearchoptions' => 'Opcions avançadas', 'prefs-advancedwatchlist' => 'Opcions avançadas', -'prefs-display' => "Opcions d'afichatge", +'prefs-displayrc' => "Opcions d'afichatge", 'prefs-diffs' => 'Diferéncias', # User rights @@ -1443,6 +1439,7 @@ Tanben podètz causir de permetre a d’autres de vos contactar amb l'ajuda de v 'right-hideuser' => 'Blocar un utilizaire en amagant son nom al public', 'right-ipblock-exempt' => "Èsser pas afectat per las IP blocadas, los blocatges automatics e los blocatges de plajas d'IP", 'right-proxyunbannable' => 'Èsser pas afectat pels blocatges automatics de servidors mandataris', +'right-unblockself' => 'Se desblocar eles meteisses', 'right-protect' => 'Modificar lo nivèl de proteccion de las paginas e modificar las paginas protegidas', 'right-editprotected' => 'Modificar las paginas protegidas (sens proteccion en cascada)', 'right-editinterface' => "Modificar l'interfàcia d'utilizaire", @@ -1465,7 +1462,6 @@ Tanben podètz causir de permetre a d’autres de vos contactar amb l'ajuda de v 'right-siteadmin' => 'Varrolhar e desvarrolhar la banca de donadas', 'right-reset-passwords' => "Cambiar lo senhal d'autres utilizaires", 'right-override-export-depth' => 'Exportar las paginas en incluent las paginas ligadas fins a una prigondor de 5 nivèls', -'right-versiondetail' => 'Vejatz las entresenhas espandidas sus las versions dels logicials', 'right-sendemail' => 'Mandar un corrièl als autres utilizaires', # User rights log @@ -1516,14 +1512,9 @@ Tanben podètz causir de permetre a d’autres de vos contactar amb l'ajuda de v 'recentchanges-legend' => 'Opcions dels darrièrs cambiaments', 'recentchangestext' => 'Vaquí sus aquesta pagina, los darrièrs cambiaments de {{SITENAME}}.', 'recentchanges-feed-description' => "Seguissètz los darrièrs cambiaments d'aqueste wiki dins un flux.", -'recentchanges-label-legend' => 'Legenda : $1.', -'recentchanges-legend-newpage' => '$1 - pagina novèla', 'recentchanges-label-newpage' => 'Aquesta modificacion a creat una pagina novèla', -'recentchanges-legend-minor' => '$1 - cambiament menor', 'recentchanges-label-minor' => 'Aqueste cambiament es menor', -'recentchanges-legend-bot' => '$1 - cambiament fach per un robòt', 'recentchanges-label-bot' => 'Aqueste cambiament es estat efectuat per un bòt.', -'recentchanges-legend-unpatrolled' => '$1 - modificacion pas patrolhada', 'recentchanges-label-unpatrolled' => 'Aqueste cambiament es pas estat verificat encara.', 'rcnote' => 'Vaquí {{PLURAL:$1|lo darrièr cambiament|los $1 darrièrs cambiaments}} dempuèi {{PLURAL:$2|lo darrièr jorn|los $2 darrièrs jorns}}, determinat{{PLURAL:$1||s}} lo $4, a $5.', 'rcnotefrom' => "Vaquí los cambiaments efectuats dempuèi lo '''$2''' ('''$1''' al maximum).", @@ -1570,6 +1561,9 @@ per copiar de fichièrs sul servidor.', 'upload_directory_missing' => 'Lo repertòri d’impòrt ($1) es mancant e a pas pogut èsser creat pel servidor web.', 'upload_directory_read_only' => 'Lo servidor Web pòt escriure dins lo dorsièr cibla ($1).', 'uploaderror' => 'Error', +'upload-recreate-warning' => "'''Atencion : Un fichièr amb aqueste nom es estat suprimit o desplaçat.''' + +Lo jornal de las supressions e lo dels desplaçaments d'aquesta pagina son afichats aicí per informacion :", 'uploadtext' => "Utilizatz lo formulari çaijós per importar de fichièrs sul servidor. Per veire o recercar d'imatges mandats precedentament, consultatz [[Special:FileList|la tièra dels imatges]]. Las còpias e las supressions tanben son enregistradas dins l'[[Special:Log/upload|istoric dels impòrts]], las supressions dins l’[[Special:Log/delete|istoric de las supressions]]. @@ -1604,6 +1598,17 @@ Vejatz la [[Special:NewFiles|galariá dels imatges novèls]] per una presentacio 'filetype-banned-type' => "'''\".\$1\"''' es dins un format pas admes. {{PLURAL:\$3|Lo qu'es acceptat es|Los que son acceptats son}} \$2.", 'filetype-missing' => "Lo fichièr a pas cap d'extension (coma « .jpg » per exemple).", +'empty-file' => "Lo fichièr qu'avètz somés èra void.", +'file-too-large' => "Lo fichièr qu'avètz somés èra tròp grand.", +'filename-tooshort' => 'Lo nom de fichièr es tròp cort.', +'filetype-banned' => 'Aqueste tipe de fichièr es interdich', +'verification-error' => 'Aqueste fichièr passa pas la verificacion dels fichièrs.', +'hookaborted' => "La modificacion qu'avètz ensajat de realizar es estada anullada per un croquet d'extension.", +'illegal-filename' => 'Lo nom del fichièr es pas autorizat.', +'overwrite' => 'Espotir un fichièr existent es pas autorizat.', +'unknown-error' => "Una error desconeguda s'es producha.", +'tmp-create-error' => 'Impossible de crear lo fichièr temporari.', +'tmp-write-error' => "Error d'escritura del fichièr temporari.", 'large-file' => 'Los fichièrs importats deurián pas èsser mai gros que $1 ; aqueste fichièr fa $2.', 'largefileserver' => "La talha d'aqueste fichièr es superiora al maximum autorizat.", 'emptyfile' => 'Lo fichièr que volètz importar sembla void. Aquò pòt èsser degut a una error dins lo nom del fichièr. Verificatz que desiratz vertadièrament copiar aqueste fichièr.', @@ -1629,13 +1634,14 @@ Se volètz totjorn importar aquel fichièr, mercé de tornar en arrièr e d'util S'o volètz importar tornamai, tornatz en rèire e importatz-lo jos un autre nom. [[File:$1|thumb|center|$1]]", 'file-exists-duplicate' => 'Aqueste fichièr es un doble {{PLURAL:$1|del fichièr seguent|dels fichièrs seguents}} :', 'file-deleted-duplicate' => "Un fichièr identic a aqueste ([[:$1]]) ja es estat suprimit. Vos caldriá verificar lo jornal de las supressions d'aqueste fichièr abans de la tornar telecargar.", -'successfulupload' => 'Importacion capitada', 'uploadwarning' => 'Atencion !', 'uploadwarning-text' => 'Modificatz la descripcion del fichièr e ensajatz tornarmai.', 'savefile' => 'Salvar lo fichièr', 'uploadedimage' => '«[[$1]]» copiat sul servidor', 'overwroteimage' => 'a importat una version novèla de « [[$1]] »', 'uploaddisabled' => 'O planhèm, lo mandadís de fichièr es desactivat.', +'copyuploaddisabled' => 'Mandadís de fichièr per URL desactivat.', +'uploadfromurl-queued' => "Vòstre mandadís es estat mes dins la fila d'espèra.", 'uploaddisabledtext' => "L'impòrt de fichièrs cap al servidor es desactivat.", 'php-uploaddisabledtext' => "Lo telecargament de fichièrs es estat desactivat dins PHP. Verificatz l'opcion de configuracion file_uploads.", 'uploadscripted' => "Aqueste fichièr conten de còde HTML o un escript que poiriá èsser interpretat d'un biais incorrècte per un navigador Internet.", @@ -1667,6 +1673,10 @@ JD # Jenoptik MGP # Pentax PICT # misc. # ', +'upload-success-subj' => 'Importacion capitada', +'upload-success-msg' => 'Çò mandat es disponible aicí : [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problèma de mandadís', +'upload-failure-msg' => 'I a agut un problèma amb vòstre mandadís :$1', 'upload-proto-error' => 'Protocòl incorrècte', 'upload-proto-error-text' => "L’impòrt requerís d'URLs començant per http:// o ftp://.", @@ -1840,7 +1850,6 @@ Doblidetz pas de verificar se i a pas d’autre ligam cap als modèls abans de l 'statistics-edits-average' => 'Modificacions mejanas per pagina', 'statistics-views-total' => 'Visitas totalas', 'statistics-views-peredit' => 'Visitas per modificacions', -'statistics-jobqueue' => 'Longor de la [http://www.mediawiki.org/wiki/Manual:Job_queue lista d’espèra de tractament]', 'statistics-users' => '[[Special:ListUsers|Utilizaires]] enregistrats', 'statistics-users-active' => 'Utilizaires actius', 'statistics-users-active-desc' => "Utilizaires qu'an fach al mens una accion durant {{PLURAL:$1|lo darrièr jorn|los $1 darrièrs jorns}}", @@ -1855,7 +1864,7 @@ Una pagina es tractada coma una pagina d’omonimia s'utiliza un modèl qu'es li 'doubleredirects' => 'Redireccions doblas', 'doubleredirectstext' => 'Vaquí una lista de las paginas que redirigisson cap a de paginas que son elas-meteissas de paginas de redireccion. Cada entrada conten de ligams cap a la primièra e la segonda redireccions, e mai la primièra linha de tèxte de la segonda pagina, çò que provesís, de costuma, la « vertadièra » pagina cibla, cap a la quala la primièra redireccion deuriá redirigir. -Las entradas barradas son estadas resolgudas.', +Las entradas barradas son estadas resolgudas.', 'double-redirect-fixed-move' => '[[$1]] es estat renomenat, aquò es ara una redireccion cap a [[$2]]', 'double-redirect-fixer' => 'Corrector de redireccion', @@ -2034,36 +2043,41 @@ I pòt aver [[{{MediaWiki:Listgrouprights-helppage}}|d'entresenhas complementàr 'listgrouprights-removegroup-self-all' => 'Se pòt levar totes los gropes de son compte pròpri', # E-mail user -'mailnologin' => "Pas d'adreça", -'mailnologintext' => 'Vos cal èsser [[Special:UserLogin|connectat(ada)]] +'mailnologin' => "Pas d'adreça", +'mailnologintext' => 'Vos cal èsser [[Special:UserLogin|connectat(ada)]] e aver indicat una adreça electronica valida dins vòstras [[Special:Preferences|preferéncias]] per poder mandar un messatge a un autre utilizaire.', -'emailuser' => 'Mandar un messatge a aqueste utilizaire', -'emailpage' => 'Mandar un corrièr electronic a l’utilizaire', -'emailpagetext' => "Podètz utilizar lo formulari çaijós per mandar un corrièr electronic a aqueste utilizaire. +'emailuser' => 'Mandar un messatge a aqueste utilizaire', +'emailpage' => 'Mandar un corrièr electronic a l’utilizaire', +'emailpagetext' => "Podètz utilizar lo formulari çaijós per mandar un corrièr electronic a aqueste utilizaire. L'adreça electronica qu'avètz indicada dins [[Special:Preferences|vòstras preferéncias]] apareisserà dins lo camp « Expeditor » de vòstre messatge. E mai, lo destinatari vos poirà respondre dirèctament.", -'usermailererror' => 'Error dins lo subjècte del corrièr electronic :', -'defemailsubject' => 'Corrièr electronic mandat dempuèi {{SITENAME}}', -'noemailtitle' => "Pas d'adreça electronica", -'noemailtext' => "Aqueste utilizaire a pas especificat d'adreça electronica valida.", -'nowikiemailtitle' => 'Pas de corrièr electronic autorizat', -'nowikiemailtext' => "Aqueste utilizaire a causit de recebre pas de corrièr electronic de la part d'autres utilizaires.", -'email-legend' => 'Mandar un corrièr electronic a un autre utilizaire de {{SITENAME}}', -'emailfrom' => 'Expeditor :', -'emailto' => 'Destinatari :', -'emailsubject' => 'Subjècte :', -'emailmessage' => 'Messatge :', -'emailsend' => 'Mandar', -'emailccme' => 'Me mandar per corrièr electronic una còpia de mon messatge.', -'emailccsubject' => 'Còpia de vòstre messatge a $1 : $2', -'emailsent' => 'Messatge mandat', -'emailsenttext' => 'Vòstre messatge es estat mandat.', -'emailuserfooter' => 'Aqueste corrièr electronic es estat mandat per « $1 » a « $2 » per la foncion « Mandar un corrièr electronic a l’utilizaire » sus {{SITENAME}}.', +'usermailererror' => 'Error dins lo subjècte del corrièr electronic :', +'defemailsubject' => 'Corrièr electronic mandat dempuèi {{SITENAME}}', +'usermaildisabled' => 'Lo mandadís de corrièrs electronics entre utilizairers es desactivat', +'usermaildisabledtext' => "Podètz pas mandar de corrièrs electronics a d'autres utilizaires sur aquel wiki", +'noemailtitle' => "Pas d'adreça electronica", +'noemailtext' => "Aqueste utilizaire a pas especificat d'adreça electronica valida.", +'nowikiemailtitle' => 'Pas de corrièr electronic autorizat', +'nowikiemailtext' => "Aqueste utilizaire a causit de recebre pas de corrièr electronic de la part d'autres utilizaires.", +'email-legend' => 'Mandar un corrièr electronic a un autre utilizaire de {{SITENAME}}', +'emailfrom' => 'Expeditor :', +'emailto' => 'Destinatari :', +'emailsubject' => 'Subjècte :', +'emailmessage' => 'Messatge :', +'emailsend' => 'Mandar', +'emailccme' => 'Me mandar per corrièr electronic una còpia de mon messatge.', +'emailccsubject' => 'Còpia de vòstre messatge a $1 : $2', +'emailsent' => 'Messatge mandat', +'emailsenttext' => 'Vòstre messatge es estat mandat.', +'emailuserfooter' => 'Aqueste corrièr electronic es estat mandat per « $1 » a « $2 » per la foncion « Mandar un corrièr electronic a l’utilizaire » sus {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'A daissat un messatge de sistèma.', +'usermessage-editor' => 'Messatgièr del sistèma', # Watchlist 'watchlist' => 'Ma lista de seguiment', 'mywatchlist' => 'Lista de seguiment', -'watchlistfor' => "(per l’utilizaire '''$1''')", 'nowatchlist' => "Vòstra lista de seguiment conten pas cap d'article.", 'watchlistanontext' => 'Per poder afichar o editar los elements de vòstra lista de seguiment, vos cal vos $1.', 'watchnologin' => 'Vos sètz pas identificat(ada)', @@ -2183,7 +2197,9 @@ La darrièra modificacion es estada efectuada per [[User:$3|$3]] ([[User talk:$3 'revertpage' => 'Anullacion de las modificacions de [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussion]]) cap a la darrièra version de [[User:$1|$1]]', 'revertpage-nouser' => 'Revocacion de las modificacions per (nom d’utilizaire suprimit) a la darrièra version per [[User:$1|$1]]', 'rollback-success' => 'Anullacion de las modificacions de $1 ; retorn a la version de $2.', -'sessionfailure' => 'Vòstra sesilha de connexion sembla aver de problèmas ; + +# Edit tokens +'sessionfailure' => 'Vòstra sesilha de connexion sembla aver de problèmas ; aquesta accion es estada anullada en prevencion d’un piratatge de sesilha. Clicatz sus « Precedent » e tornatz cargar la pagina d’ont venètz, puèi ensajatz tornarmai.', @@ -2310,18 +2326,20 @@ $1", 'month' => 'A partir del mes (e precedents) :', 'year' => 'A partir de l’annada (e precedentas) :', -'sp-contributions-newbies' => 'Far veire sonque las contribucions dels utilizaires novèls', -'sp-contributions-newbies-sub' => 'Lista de las contribucions dels utilizaires novèls. Las paginas que son estadas suprimidas son pas afichadas.', -'sp-contributions-newbies-title' => 'Las contribucions de l’utilizaire pels comptes novèls', -'sp-contributions-blocklog' => 'Istoric dels blocatges', -'sp-contributions-deleted' => 'contribucions suprimidas', -'sp-contributions-logs' => 'jornals', -'sp-contributions-talk' => 'Discutir', -'sp-contributions-userrights' => 'gerir los dreches', -'sp-contributions-blocked-notice' => 'Aqueste utilizaire es actualament blocat. La darrièra entrada del jornal dels blocatges es indicada çaijós a títol d’informacion :', -'sp-contributions-search' => 'Cercar las contribucions', -'sp-contributions-username' => 'Adreça IP o nom d’utilizaire :', -'sp-contributions-submit' => 'Cercar', +'sp-contributions-newbies' => 'Far veire sonque las contribucions dels utilizaires novèls', +'sp-contributions-newbies-sub' => 'Lista de las contribucions dels utilizaires novèls. Las paginas que son estadas suprimidas son pas afichadas.', +'sp-contributions-newbies-title' => 'Las contribucions de l’utilizaire pels comptes novèls', +'sp-contributions-blocklog' => 'Istoric dels blocatges', +'sp-contributions-deleted' => 'contribucions suprimidas', +'sp-contributions-logs' => 'jornals', +'sp-contributions-talk' => 'Discutir', +'sp-contributions-userrights' => 'gerir los dreches', +'sp-contributions-blocked-notice' => 'Aqueste utilizaire es actualament blocat. La darrièra entrada del jornal dels blocatges es indicada çaijós a títol d’informacion :', +'sp-contributions-blocked-notice-anon' => 'Aquesta adreça IP es actualament blocada. +La darrièra intrada del jornal dels blocatges es indicada çaijós a títol d’informacion :', +'sp-contributions-search' => 'Cercar las contribucions', +'sp-contributions-username' => 'Adreça IP o nom d’utilizaire :', +'sp-contributions-submit' => 'Cercar', # What links here 'whatlinkshere' => 'Paginas ligadas a aquesta', @@ -2383,7 +2401,6 @@ Podètz consultar la [[Special:IPBlockList|lista dels comptes e de las adreças 'ipb-edit-dropdown' => 'Modificar los motius de blocatge per defaut', 'ipb-unblock-addr' => 'Desblocar $1', 'ipb-unblock' => "Desblocar un compte d'utilizaire o una adreça IP", -'ipb-blocklist-addr' => 'Blocatges existents per $1', 'ipb-blocklist' => 'Vejatz los blocatges existents', 'ipb-blocklist-contribs' => 'Contribucions per $1', 'unblockip' => 'Desblocar un utilizaire o una adreça IP', @@ -2453,6 +2470,8 @@ $1 ja es blocat. Volètz modificar los paramètres ?', Podètz pas crear un compte', 'cant-block-while-blocked' => "Podètz pas blocar d'autres utilizaires pendent que sètz blocat(ada).", 'cant-see-hidden-user' => "L'utilizaire qu'ensajatz de blocar es ja estat blocat e amagat. Sens lo drech hideuser, podètz pas veire o modificar lo blocatge de l'utilizaire.", +'ipbblocked' => "Podètz pas blocar o desblocar d'autres utilizaire, perque vos {{GENDER:|meteis|meteissa|meteis}} sètz {{GENDER:|blocat|blocada|blocat}}.", +'ipbnounblockself' => 'Sètz pas autorizat a vos desblocar vos meteis', # Developer tools 'lockdb' => 'Varrolhar la banca', @@ -2618,6 +2637,7 @@ Totas las accions d’importacion interwiki son conservadas dins lo [[Special:Lo 'importstart' => 'Impòrt de las paginas...', 'import-revision-count' => '$1 {{PLURAL:$1|version|versions}}', 'importnopages' => "Cap de pagina d'importar.", +'imported-log-entries' => '$1 {{PLURAL:$1|entrada|entradas}} del jornal {{PLURAL:$1|importada|importadas}}.', 'importfailed' => 'Fracàs de l’impòrt : $1', 'importunknownsource' => 'Tipe de la font d’impòrt desconegut', 'importcantopen' => "Impossible de dobrir lo fichièr d'importar", @@ -2710,6 +2730,8 @@ Totas las accions d’importacion interwiki son conservadas dins lo [[Special:Lo 'tooltip-upload' => 'Amodar lo mandadís', 'tooltip-rollback' => '"Revocar" anulla en un clic la o las edicion(s) sus aquesta pagina del darrièr contributor.', 'tooltip-undo' => '"Desfar" revòca aquesta edicion e dobrís la fenèstra d’edicion en mòde previsualizacion. Permet d’apondre una rason dins la bóstia de resumit.', +'tooltip-preferences-save' => 'Salvar las preferéncias', +'tooltip-summary' => 'Apondètz un brèu resumit', # Stylesheets 'common.css' => '/** Lo CSS plaçat aicí serà aplicat a totas las aparéncias. */', @@ -2841,9 +2863,9 @@ Se l'executatz, vòstre sistèma pòt èsser compromés.", 'thumbsize' => 'Talha de la miniatura :', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|pagina|paginas}}', 'file-info' => 'Talha del fichièr: $1, tipe MIME: $2', -'file-info-size' => '($1 × $2 pixèl, talha del fichièr: $3, tipe MIME: $4)', +'file-info-size' => '$1 × $2 pixèl, talha del fichièr: $3, tipe MIME: $4', 'file-nohires' => 'Pas de resolucion mai nauta disponibla.', -'svg-long-desc' => '(Fichièr SVG, resolucion de $1 × $2 pixèls, talha : $3)', +'svg-long-desc' => 'Fichièr SVG, resolucion de $1 × $2 pixèls, talha : $3', 'show-big-image' => 'Imatge en resolucion mai nauta', 'show-big-image-thumb' => "Talha d'aqueste apercebut : $1 × $2 pixèls", 'file-info-gif-looped' => 'en bocla', @@ -3168,25 +3190,25 @@ Los autres ligams sus la meteissa linha son considerats coma d'excepcions, per e 'limitall' => 'totes', # E-mail address confirmation -'confirmemail' => "Confirmar l'adreça de corrièr electronic", -'confirmemail_noemail' => 'L’adreça de corrièr electronic configurada dins vòstras [[Special:Preferences|preferéncias]] es pas valida.', -'confirmemail_text' => '{{SITENAME}} necessita la verificacion de vòstra adreça de corrièr electronic abans de poder utilizar tota foncion de messatjariá. Utilizatz lo boton çaijós per mandar un corrièr electronic de confirmacion a vòstra adreça. Lo corrièr contendrà un ligam contenent un còde, cargatz aqueste ligam dins vòstre navigador per validar vòstra adreça.', -'confirmemail_pending' => 'Un còde de confirmacion ja vos es estat mandat per corrièr electronic ; se venètz de crear vòstre compte, esperatz qualques minutas que l’e-mail arribe abans de demandar un còde novèl.', -'confirmemail_send' => 'Mandar un còde de confirmacion', -'confirmemail_sent' => 'Corrièr electronic de confirmacion mandat.', -'confirmemail_oncreate' => "Un còde de confirmacion es estat mandat a vòstra adreça de corrièr electronic. +'confirmemail' => "Confirmar l'adreça de corrièr electronic", +'confirmemail_noemail' => 'L’adreça de corrièr electronic configurada dins vòstras [[Special:Preferences|preferéncias]] es pas valida.', +'confirmemail_text' => '{{SITENAME}} necessita la verificacion de vòstra adreça de corrièr electronic abans de poder utilizar tota foncion de messatjariá. Utilizatz lo boton çaijós per mandar un corrièr electronic de confirmacion a vòstra adreça. Lo corrièr contendrà un ligam contenent un còde, cargatz aqueste ligam dins vòstre navigador per validar vòstra adreça.', +'confirmemail_pending' => 'Un còde de confirmacion ja vos es estat mandat per corrièr electronic ; se venètz de crear vòstre compte, esperatz qualques minutas que l’e-mail arribe abans de demandar un còde novèl.', +'confirmemail_send' => 'Mandar un còde de confirmacion', +'confirmemail_sent' => 'Corrièr electronic de confirmacion mandat.', +'confirmemail_oncreate' => "Un còde de confirmacion es estat mandat a vòstra adreça de corrièr electronic. Aqueste còde es pas requerit per se connectar, mas n'aurètz besonh per activar las foncionalitats ligadas als corrièrs electronics sus aqueste wiki.", -'confirmemail_sendfailed' => '{{SITENAME}} pòt pas mandar lo corrièr de confirmacion. +'confirmemail_sendfailed' => '{{SITENAME}} pòt pas mandar lo corrièr de confirmacion. Verificatz se vòstra adreça conten pas de caractèrs interdiches. Retorn del programa de corrièr : $1', -'confirmemail_invalid' => 'Còde de confirmacion incorrècte. Benlèu lo còde a expirat.', -'confirmemail_needlogin' => 'Vos cal vos $1 per confirmar vòstra adreça de corrièr electronic.', -'confirmemail_success' => 'Vòstra adreça de corrièr electronic es confirmada. Ara, vos podètz connectar e aprofechar del wiki.', -'confirmemail_loggedin' => 'Ara, vòstra adreça es confirmada', -'confirmemail_error' => "Un problèma s'es produch en volent enregistrar vòstra confirmacion.", -'confirmemail_subject' => 'Confirmacion d’adreça de corrièr electronic per {{SITENAME}}', -'confirmemail_body' => "Qualqu’un, probablament vos,e amb l’adreça IP $1, a enregistrat un compte « $2 » amb aquesta adreça de corrièr electronic sul site {{SITENAME}}. +'confirmemail_invalid' => 'Còde de confirmacion incorrècte. Benlèu lo còde a expirat.', +'confirmemail_needlogin' => 'Vos cal vos $1 per confirmar vòstra adreça de corrièr electronic.', +'confirmemail_success' => 'Vòstra adreça de corrièr electronic es confirmada. Ara, vos podètz connectar e aprofechar del wiki.', +'confirmemail_loggedin' => 'Ara, vòstra adreça es confirmada', +'confirmemail_error' => "Un problèma s'es produch en volent enregistrar vòstra confirmacion.", +'confirmemail_subject' => 'Confirmacion d’adreça de corrièr electronic per {{SITENAME}}', +'confirmemail_body' => "Qualqu’un, probablament vos,e amb l’adreça IP $1, a enregistrat un compte « $2 » amb aquesta adreça de corrièr electronic sul site {{SITENAME}}. Per confirmar qu'aqueste compte vos aparten vertadièrament e activar las foncions de messatjariá sus {{SITENAME}}, seguissètz lo ligam çaijós dins vòstre navigador : @@ -3198,8 +3220,25 @@ Aqueste còde de confirmacion expirarà lo $4, seguissètz l’autre ligam çaij $5 Aqueste còde de confirmacion expirarà lo $4.", -'confirmemail_invalidated' => 'Confirmacion de l’adreça de corrièr electronic anullada', -'invalidateemail' => 'Anullar la confirmacion del corrièr electronic', +'confirmemail_body_changed' => "Qualqu’un, probablament vos, a partir de l’adreça IP $1, +a modificat l’adreça de corrièr associada al compte « $2 » de {{SITENAME}} +en aquesta adreça. + +Per confirmar qu'aqueste compte vos aparten vertadièrament e per tal +de reactivar las foncions de messatjariá sus {{SITENAME}}, +seguissètz aqueste ligam dins vòstre navigador : + +$3 + +S'aqueste compte vos aparten *pas*, dobriscatz pas aqueste ligam ; +podètz seguir l’autre ligam çaijós per anullar la +confirmacion de vòstra adreça de corrièl : + +$5 + +Aqueste còde de confirmacion expirarà lo $4.", +'confirmemail_invalidated' => 'Confirmacion de l’adreça de corrièr electronic anullada', +'invalidateemail' => 'Anullar la confirmacion del corrièr electronic', # Scary transclusion 'scarytranscludedisabled' => '[La transclusion interwiki es desactivada]', @@ -3398,6 +3437,7 @@ Picatz lo nom del fichièr sens lo prefix « {{ns:file}}: ».', 'htmlform-float-invalid' => "La valor qu'avètz especificada es pas un nombre.", 'htmlform-int-toolow' => "La valor qu'avètz especificada es en dejós del minimum de $1", 'htmlform-int-toohigh' => "La valor qu'avètz especificada es en dessús del minimum de $1", +'htmlform-required' => 'Aquesta valor es obligatòria', 'htmlform-submit' => 'Sometre', 'htmlform-reset' => 'Desfar las modificacions', 'htmlform-selectorother-other' => 'Autre', diff --git a/languages/messages/MessagesOr.php b/languages/messages/MessagesOr.php index 248af8bd..03c5691c 100644 --- a/languages/messages/MessagesOr.php +++ b/languages/messages/MessagesOr.php @@ -29,6 +29,9 @@ $digitTransformTable = array( ); $messages = array( +# User preference toggles +'tog-rememberpassword' => 'ଏହି ବ୍ରାଉଜରରେ (ସବୁଠୁ ଅଧିକ ହେଲେ $1 {{PLURAL:$1|day|ଦିନ}}) ପାଇଁ ମୋ ଲଗଇନ ମନେ ରଖିଥିବେ', + 'underline-always' => 'ସବୁବେଳେ', 'underline-never' => 'କେବେନୁହେଁ', @@ -89,22 +92,23 @@ $messages = array( 'dec' => 'ଡିସେଁବର', # Categories related messages -'pagecategories' => '{{PLURAL:$1|Category|ବିଭାଗ}}', +'pagecategories' => '{{PLURAL:$1|Category|ଶ୍ରେଣୀସବୁ}}', 'category_header' => '"$1" ବିଭାଗରେ ଥିବା ଫରଦଗୁଡ଼ିକ', 'subcategories' => 'ସାନ ଶ୍ରେଣୀସବୁ', 'category-media-header' => '"$1" ବିଭାଗରେ ଥିବା ଫରଦଗୁଡ଼ିକ', -'category-empty' => "''ଏହି ଶ୍ରେଣୀ ଭିତରେ କିଛି ଫରଦ ବା ମାଧ୍ୟମ ନାହିଁ ।''", -'hidden-categories' => '{{PLURAL:$1|Hidden category|ଲୁଚିଥିବା ବିଭାଗ}}', +'category-empty' => "''ଏହି ଶ୍ରେଣୀ ଭିତରେ କିଛି ପୃଷ୍ଠା ବା ମାଧ୍ୟମ ନାହିଁ ।''", +'hidden-categories' => '{{PLURAL:$1|Hidden category|ଲୁଚିଥିବା ଶ୍ରେଣୀ}}', 'hidden-category-category' => 'ଲୁଚିରହିଥିବା ଶ୍ରେଣୀ', 'category-subcat-count' => '{{PLURAL:$2|ଏହି ଶ୍ରେଣୀଟିରେ କେବଳ ତଳେଥିବା ସାନ ଶ୍ରେଣୀଗୁଡିକ ଅଛନ୍ତି । |ଏହି ଶ୍ରେଣୀଟିରେ ସର୍ବମୋଟ $2 ରୁ ତଳେଥିବା ଏହି {{PLURAL:$1|subcategory|$1 ଶ୍ରେଣୀଗୁଡିକ}} ଅଛନ୍ତି । }}', +'category-article-count' => '{{PLURAL:$2|ଏହି ଶ୍ରେଣୀରେ ତଳେଥିବ ପୃଷ୍ଠାସବୁ ଅଛି ।|ସର୍ବମୋଟ $2 ରୁ ଏହି ଶ୍ରେଣୀ ଭିତରେ {{PLURAL:$1|ଟି ପୃଷ୍ଠା|$1ଟି ପୃଷ୍ଠା}} ଅଛି ।}}', 'listingcontinuesabbrev' => 'ଆହୁରି ଅଛି..', 'about' => 'ବାବଦରେ', -'article' => 'ସୂଚୀ ଫରଦ', -'newwindow' => 'ନୂଆ ଉଇଁଡୋରେ ଖୋଲିବ', -'cancel' => 'ନାକଚ କରିଦିଅ', +'article' => 'ସୂଚୀପତ୍ର', +'newwindow' => '(ଏହା ନୂଆ ଉଇଣ୍ଡୋରେ ଖୋଲିବ)', +'cancel' => 'ନାକଚ କରିଦିଅନ୍ତୁ', 'moredotdotdot' => 'ଅଧିକ...', -'mypage' => 'ମୋ ଫରଦ', +'mypage' => 'ମୋ ପୃଷ୍ଠା', 'mytalk' => 'ମୋ ଆଲୋଚନା', 'anontalk' => 'ଏହି ଆଇ.ପି. ଠିକଣା ଉପରେ ଆଲୋଚନା', 'navigation' => 'ଦିଗବାରେଣି', @@ -117,60 +121,61 @@ $messages = array( 'qbpageoptions' => 'ଏଇଟା ଫର୍ଦ', 'qbpageinfo' => 'ଭିତର ଚିଜ', 'qbmyoptions' => 'ମୋର ଫର୍ଦ', -'qbspecialpages' => 'ବିଶେଷ ଫରଦ', +'qbspecialpages' => 'ନିଆରା ପୃଷ୍ଠା', # Vector skin -'vector-action-addsection' => 'ଲେଖା ମିଶାଇବା', -'vector-action-delete' => 'ଲିଭେଇବେ', -'vector-action-move' => 'ଘୁଞ୍ଚାଇବେ', -'vector-action-protect' => 'କିଳିବେ', -'vector-action-undelete' => 'ଲିଭାଇବେ ନାହିଁ', -'vector-action-unprotect' => 'କିଳିବେ ନାହିଁ', -'vector-namespace-category' => 'ବିଭାଗ', -'vector-namespace-image' => 'ଫାଇଲ', -'vector-namespace-main' => 'ଫରଦ', -'vector-namespace-media' => 'ମେଡିଆ ପରଦ', -'vector-view-create' => 'ତିଆରି', -'vector-view-edit' => 'ବଦଳାଇବେ', -'vector-view-history' => 'ଇତିହାସ ଦେଖ', -'vector-view-view' => 'ପଢ଼ିବେ', -'vector-view-viewsource' => 'ଉତ୍ସ ଦେଖ', -'namespaces' => 'ନେମସ୍ପେସ', - -'errorpagetitle' => 'ଭୁଲ', -'tagline' => '{{SITENAME}} ରୁ', -'help' => 'ସାହାଯ୍ୟ', -'search' => 'ଖୋଜିବେ', -'searchbutton' => 'ଖୋଜିବେ', -'go' => 'ଯିବା', -'searcharticle' => 'ଯିବା', -'history' => 'ଫାଇଲ ଇତିହାସ', -'history_short' => 'ଇତିହାସ', -'info_short' => 'ଖବର', -'printableversion' => 'ଛପାହୋଇପାରିବା ପୃଷ୍ଠା', -'permalink' => 'ସବୁଦିନିଆ ଲିଙ୍କ', -'print' => 'ପ୍ରିଣ୍ଟ କରିବା', -'edit' => 'ବଦଳାଇବେ', -'create' => 'ତିଆରି କରିବେ', -'editthispage' => 'ଏହି ଫରଦଟିକୁ ବଦଳାଇବା', -'create-this-page' => 'ଏହି ପୃଷ୍ଠାଟି ତିଆରିବେ', -'delete' => 'ଲିଭେଇବେ', -'deletethispage' => 'ଏହି ପୃଷ୍ଠାଟି ଲିଭାଇବେ', -'protect' => 'କିଳିବେ', -'protect_change' => 'ବଦଳାଇବା', -'newpage' => 'ନୂଆ ଫରଦ', -'talkpagelinktext' => 'କଥାଭାଷା', -'specialpage' => 'ବିଶେଷ ଫରଦ', -'personaltools' => 'ନିଜର ଟୁଲ', -'talk' => 'ଆଲୋଚନା', -'views' => 'ଦେଖା', -'toolbox' => 'ଜନ୍ତ୍ର ପେଡ଼ି', -'otherlanguages' => 'ଅଲଗା ଭାଷା', -'redirectedfrom' => '($1 ରୁ ଲେଉଟି ଆସିଛି)', -'lastmodifiedat' => 'ଏହି ପୃଷ୍ଠାଟି $1 ତାରିଖ $2 ବେଳେ ବଦଳାଯାଇଥିଲା ।', -'jumpto' => 'ଡେଇଁଯିବେ', -'jumptonavigation' => 'ଦିଗବାରେଣିକୁ', -'jumptosearch' => 'ଖୋଜିବେ', +'vector-action-addsection' => 'ଲେଖା ମିଶାଇବା', +'vector-action-delete' => 'ଲିଭେଇବେ', +'vector-action-move' => 'ଘୁଞ୍ଚାଇବେ', +'vector-action-protect' => 'କିଳିବେ', +'vector-action-undelete' => 'ଲିଭାଇବେ ନାହିଁ', +'vector-action-unprotect' => 'କିଳିବେ ନାହିଁ', +'vector-simplesearch-preference' => 'ଆହୁରି ଅଧିକ ଖୋଜା ମତାମତ ଗୁଡ଼ିକ ସଚଳ କରିବେ (କେବଳ ଭେକ୍ଟର ସ୍କିନ)', +'vector-view-create' => 'ତିଆରି', +'vector-view-edit' => 'ବଦଳାଇବେ', +'vector-view-history' => 'ଇତିହାସ ଦେଖିବେ', +'vector-view-view' => 'ପଢ଼ିବେ', +'vector-view-viewsource' => 'ଉତ୍ସ ଦେଖିବେ', +'actions' => 'କାମ', +'namespaces' => 'ନେମସ୍ପେସ', +'variants' => 'ନିଆରା', + +'errorpagetitle' => 'ଭୁଲ', +'returnto' => '$1କୁ ଫେରିଯାନ୍ତୁ ।', +'tagline' => '{{SITENAME}} ରୁ', +'help' => 'ସାହାଯ୍ୟ', +'search' => 'ଖୋଜିବେ', +'searchbutton' => 'ଖୋଜିବେ', +'go' => 'ଯିବା', +'searcharticle' => 'ଯିବା', +'history' => 'ଫାଇଲ ଇତିହାସ', +'history_short' => 'ଇତିହାସ', +'info_short' => 'ଖବର', +'printableversion' => 'ଛପାହୋଇପାରିବା ପୃଷ୍ଠା', +'permalink' => 'ସବୁଦିନିଆ ଲିଙ୍କ', +'print' => 'ପ୍ରିଣ୍ଟ କରିବା', +'edit' => 'ବଦଳାଇବେ', +'create' => 'ତିଆରି କରିବେ', +'editthispage' => 'ଏହି ଫରଦଟିକୁ ବଦଳାଇବା', +'create-this-page' => 'ଏହି ପୃଷ୍ଠାଟି ତିଆରିବେ', +'delete' => 'ଲିଭେଇବେ', +'deletethispage' => 'ଏହି ପୃଷ୍ଠାଟି ଲିଭାଇବେ', +'protect' => 'କିଳିବେ', +'protect_change' => 'ବଦଳାଇବା', +'newpage' => 'ନୂଆ ପୃଷ୍ଠା', +'talkpagelinktext' => 'କଥାଭାଷା', +'specialpage' => 'ନିଆରା ପୃଷ୍ଠା', +'personaltools' => 'ନିଜର ଟୁଲ', +'talk' => 'ଆଲୋଚନା', +'views' => 'ଦେଖା', +'toolbox' => 'ଜନ୍ତ୍ର ପେଡ଼ି', +'otherlanguages' => 'ଅଲଗା ଭାଷା', +'redirectedfrom' => '($1 ରୁ ଲେଉଟି ଆସିଛି)', +'lastmodifiedat' => 'ଏହି ପୃଷ୍ଠାଟି $1 ତାରିଖ $2 ବେଳେ ବଦଳାଯାଇଥିଲା ।', +'jumpto' => 'ଡେଇଁଯିବେ', +'jumptonavigation' => 'ଦିଗବାରେଣିକୁ', +'jumptosearch' => 'ଖୋଜିବେ', +'pool-errorunknown' => 'ଅଜଣା ଅସୁବିଧା', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} ବାବଦରେ', @@ -181,14 +186,14 @@ $messages = array( 'currentevents-url' => 'Project:ଏବେକାର ଘଟଣା', 'disclaimers' => 'ଆମେ ଦାୟୀ ନୋହୁଁ', 'disclaimerpage' => 'Project:ଆମେ ଦାୟୀ ନୋହୁଁ', -'edithelp' => 'ଲେଖା ସାହାଜ୍ୟ', +'edithelp' => 'ଲେଖା ସାହାଯ୍ୟ', 'edithelppage' => 'Help:ବଦଳାଇବା', 'helppage' => 'Help:ଭିତର ଚିଜ', 'mainpage' => 'ପ୍ରଧାନ ପୃଷ୍ଠା', -'mainpage-description' => 'ମୂଳ ଫରଦ', +'mainpage-description' => 'ପ୍ରଧାନ ପୃଷ୍ଠା', 'policy-url' => 'Project:ନୀତି', -'portal' => 'କମୁନିଟି ପୋଟାଲ', -'portal-url' => 'Project:ଗୋଷ୍ଠୀ ଆଲୋଚନା ସଭା', +'portal' => 'ସଙ୍ଘ ଆଲୋଚନା ସଭା', +'portal-url' => 'Project:ସଙ୍ଘ ଆଲୋଚନା ସଭା', 'privacy' => 'ଗୁମର ନୀତି', 'privacypage' => 'Project:ଗୁମର ନୀତି', @@ -204,11 +209,11 @@ $messages = array( 'editold' => 'ବଦଳାଇବା', 'viewsourceold' => 'ଉତ୍ସ ଦେଖିବେ', 'editlink' => 'ବଦଳାଇବେ', -'viewsourcelink' => 'ଉତ୍ସ ଦେଖ', +'viewsourcelink' => 'ଉତ୍ସ ଦେଖିବେ', 'editsectionhint' => '$1 ଭାଗଟିକୁ ବଦଳାଇବେ', 'toc' => 'ଭିତର ଚିଜ', -'showtoc' => 'ଦେଖାଅ', -'hidetoc' => 'ଲୁଚାଅ', +'showtoc' => 'ଦେଖାଇବେ', +'hidetoc' => 'ଲୁଚାଇବେ', 'site-rss-feed' => '$1 ଆରେସେସ ଫିଡ଼', 'site-atom-feed' => '$1 ଆଟମ ଫିଡ଼', 'page-rss-feed' => '$1 ଟି ଆରେସେସ ଫିଡ଼', @@ -217,14 +222,14 @@ $messages = array( # Short words for each namespace, by default used in the namespace tab in monobook 'nstab-main' => 'ପୃଷ୍ଠା', -'nstab-user' => ' ଇଉଜର ଫରଦ', +'nstab-user' => 'ବ୍ୟବାହରକାରୀଙ୍କର ପୃଷ୍ଠା', 'nstab-media' => 'ମେଡିଆ ପରଦ', -'nstab-special' => 'ବିଶେଷ ଫରଦ', -'nstab-project' => 'ପ୍ରକଳ୍ପ ଫରଦ', +'nstab-special' => 'ନିଆରା ପୃଷ୍ଠା', +'nstab-project' => 'ପ୍ରକଳ୍ପ ପୃଷ୍ଠା', 'nstab-image' => 'ଫାଇଲ', 'nstab-mediawiki' => 'ଖବର', -'nstab-template' => 'ଟେଁପଲେଟ', -'nstab-category' => 'ବିଭାଗ', +'nstab-template' => 'ଟେମ୍ପଲେଟ', +'nstab-category' => 'ଶ୍ରେଣୀ:', # General errors 'error' => 'ଭୁଲ', @@ -234,11 +239,22 @@ $messages = array( ଯଦି ସେମିତି ହୋଇନଥାଏ ତେବେ ଆପଣ ଏହି ସଫଟବେରରେ କିଛି ଅସୁବିଧା ଖୋଜି ପାଇଛନ୍ତି । କେହି ଜଣେ ଟିକେ [[Special:ListUsers/sysop|ପରିଛା]] ଙ୍କୁ ଏହି ଇଉଆରେଲ (url) ସହ ଚିଠିଟିଏ ପଠାଇ ଦିଅନ୍ତୁ ।', +'badtitle' => 'ଖରାପ ନାଆଁ', +'badtitletext' => 'ଆପଣ ଅନୁରୋଧ କରିଥିବା ପୃଷ୍ଠାଟି ଭୁଲ, ଖାଲି ଅଛି ବା ବାକି ଭାଷା ସାଙ୍ଗରେ ଭୁଲରେ ଯୋଡା ଯାଇଛି ବା ଭୁଲ ଇଣ୍ଟର ଉଇକି ନାଆଁ ଦିଅଯାଇଛି । +ଏଥିରେ ଥିବା ଗୋଟିଏ ବା ଦୁଇଟି ଅକ୍ଷର ନାଆଁ ଭାବରେ ବ୍ୟବହାର କରାଯାଇ ପାରିବ ନାହିଁ ।', 'viewsource' => 'ଉତ୍ସ ଦେଖିବେ', # Login and logout pages -'yourname' => 'ଇଉଜର ନାଆଁ', -'yourpassword' => 'ପାସଉଆଡ଼', +'logouttext' => "'''ଆପଣ ଲଗାଆଉଟ କରିଦେଲେ''' + +ଆପଣ ଅଜଣା ଭାବରେ {{SITENAME}}କୁ ଯାଇପାରିବେ, କିମ୍ବା [[Special:UserLogin|ଆଉଥରେ]] ଆଗର ଇଉଜର ନାଆଁରେ/ଅଲଗା ନାଆଁରେ ଲଗଇନ କରିପାରିବେ । +ଜାଣିରଖନ୍ତୁ, କିଛି ପୃଷ୍ଠା ଲଗାଆଉଟ କଲାପରେ ବି ଆଗପରି ଦେଖାଯାଇପାରେ, ଆପଣ ବ୍ରାଉଜର କାସକୁ ହଟାଇଲା ଯାଏଁ ଏହା ଏମିତି ରହିବ ।", +'welcomecreation' => '== $1!, ଆପଣଙ୍କ ଖାତାଟି ତିଆରି ହୋଇଗଲା== +ତେବେ, ନିଜର [[Special:Preferences|{{SITENAME}} ପସନ୍ଦସବୁକୁ]] ବଦଳାଇବାକୁ ଭୁଲିବେ ନାହିଁ ।', +'yourname' => 'ବ୍ୟବାହରକାରୀଙ୍କର ନାଆଁ:', +'yourpassword' => 'ପାସବାର୍ଡ଼', +'yourpasswordagain' => 'ପାସବାର୍ଡ଼ ଆଉଥରେ:', +'remembermypassword' => 'ଏହି ବ୍ରାଉଜରରେ (ସବୁଠୁ ଅଧିକ ହେଲେ $1 {{PLURAL:$1|day|ଦିନ}}) ପାଇଁ ମୋ ଲଗଇନ ମନେ ରଖିଥିବେ', 'login' => 'ଲଗଇନ', 'nav-login-createaccount' => 'ଲଗିନ / ଖାତା ଖୋଲିବା', 'loginprompt' => "{{SITENAME}}ରେ ଲଗ ଇନ କରିବାପାଇଁ ଆପଣଙ୍କୁ '''କୁକି''' ସଚଳ କରିବାକୁ ପଡ଼ିବ ।", @@ -250,11 +266,22 @@ $messages = array( 'nologinlink' => 'ନୁଆ ଖାତାଟିଏ ଖୋଲିବା', 'createaccount' => 'ନୁଆ ଖାତା ଖୋଲିବା', 'gotaccountlink' => 'ଲଗଇନ', +'createaccountreason' => 'କାରଣ:', +'loginerror' => 'ଲଗ‌‌ଇନ ଭୁଲ', +'loginsuccesstitle' => 'ଠିକଭାବେ ଲଗଇନ ହେଲା', +'loginsuccess' => "'''ଆପଣ {{SITENAME}}ରେ \"\$1\" ଭାବରେ ଲଗଇନ କରିଛନ୍ତି ।'''", +'wrongpasswordempty' => 'ଦିଆଯାଇଥିବା ପାସବାର୍ଡ଼ଟି ଖାଲି ଛଡ଼ାଯାଇଛି ।
    +ଦୟାକରି ଆଉଥରେ ଚେଷ୍ଟା କରନ୍ତୁ ।', +'mailmypassword' => 'ପାସବାର୍ଡ଼ଟିକୁ ଇମେଲ କରି ପଠାଇବେ', +'emailconfirmlink' => 'ଆପଣଙ୍କ ଇମେଲ ଆଇ.ଡି.ଟି ଠିକ ବୋଲି ଥୟ କରନ୍ତୁ', +'accountcreated' => 'ଖାତାଟି ଖୋଲାହୋଇଗଲା', +'accountcreatedtext' => '$1 ପାଇଁ ନୂଆ ଖାତାଟିଏ ତିଆରି ହୋଇଗଲା ।', 'loginlanguagelabel' => 'ଭାଷା: $1', # Password reset dialog -'oldpassword' => 'ପୂର୍ବ ପାସଉଆଡ଼:', -'newpassword' => 'ନୁଆ ପାସଉଆଡ଼:', +'oldpassword' => 'ପୁରୁଣା ପାସଉଆଡ଼:', +'newpassword' => 'ନୂଆ ପାସବାର୍ଡ଼:', +'retypenew' => 'ପାସବାର୍ଡ଼ ଆଉଥରେ ଦିଅନ୍ତୁ:', # Edit page toolbar 'bold_sample' => 'ବୋଲ୍ଡ ଲେଖା', @@ -281,38 +308,61 @@ $messages = array( 'subject' => 'ବିଷୟ/ମୂଳ ଲେଖା', 'minoredit' => 'ଏହା ଖୁବ ଛୋଟ ବଦଳଟିଏ', 'watchthis' => 'ଏହି ପୃଷ୍ଠାଟିକୁ ଦେଖିବେ', -'savearticle' => 'ସାଇତି ରଖ', +'savearticle' => 'ସାଇତିବେ', 'preview' => 'ସାଇତିବା ଆଗରୁ ଦେଖଣା', 'showpreview' => 'ଦେଖଣା', -'showdiff' => 'ବଦଳଗୁଡିକୁ ଦେଖାଅ', -'anoneditwarning' => "'''ଜାଣିରଖଁତୁ:''' ଆପଣ ଲଗଇନ କରିନାହାଁତି । -ଏହି ଫରଦର '''ଇତିହାସ''' ଫରଦରେ ଆପଣଁକ ଆଇପି ଠିକଣାତି ସାଇତା ହୋଇଯିବ ।", +'showdiff' => 'ବଦଳଗୁଡ଼ିକ ଦେଖାଇବେ', +'anoneditwarning' => "'''ଜାଣିରଖନ୍ତୁ:''' ଆପଣ ଲଗଇନ କରିନାହାନ୍ତି । +ଏହି ଫରଦର '''ଇତିହାସ''' ପୃଷ୍ଠାରେ ଆପଣଙ୍କ ଆଇପି ଠିକଣାଟି ସାଇତା ହୋଇଯିବ ।", +'summary-preview' => 'ସାରକଥା ଦେଖଣା:', 'loginreqlink' => 'ଲଗଇନ', 'newarticle' => '(ନୁଆ)', -'noarticletext' => 'ଏହି ଫରଦଟିରେ କିଛି ବି ଲେଖା ନାହିଁ । -ଆପଣ [[Special:Search/{{PAGENAME}}|ଏହି ଲେଖାଟିର ନାଆଁ]] ବାକି ଫରଦମାନଙ୍କରେ ଖୋଜି ପାରନ୍ତି, -[{{fullurl:{{#Special:Log}}|ଫରଦ={{FULLPAGENAMEE}}}} ରେ ଯୋଡ଼ାଯାଇଥିବା ବାକି ଫରଦସବୁକୁ ଖୋଜି ପାରନ୍ତି], -କିମ୍ବା [{{fullurl:{{FULLPAGENAME}}|action=edit}} ଏହି ଫରଦଟିକୁ ବଦଳାଇ ପାରନ୍ତି] ।', +'newarticletext' => "ଆପଣ ଖୋଲିଥିବା ଲିଙ୍କଟିରେ ଏଯାଏଁ କିଛିବି ପୃଷ୍ଠା ନାହିଁ । +ଏହି ପୃଷ୍ଠାଟିକୁ ତିଆରି କରିବା ପାଇଁ ତଳ ବାକ୍ସରେ ଟାଇପ କରନ୍ତୁ (ଅଧିକ ଜାଣିବା ପାଇଁ [[{{MediaWiki:Helppage}}|ସାହାଯ୍ୟ ପୃଷ୍ଠା]] ଦେଖନ୍ତୁ) । +ଯଦି ଆପଣ ଏଠାକୁ ଭୁଲରେ ଆସିଯାଇଥାନ୍ତି ତେବେ ଆପଣଙ୍କ ବ୍ରାଉଜରର '''Back''' ପତିଟି ଦବାନ୍ତୁ ।", +'noarticletext' => 'ଏହି ପୃଷ୍ଠାଟିରେ କିଛି ବି ଲେଖା ନାହିଁ । +ଆପଣ [[Special:Search/{{PAGENAME}}|ଏହି ଲେଖାଟିର ନାଆଁ]] ବାକି ପୃଷ୍ଠାମାନଙ୍କରେ ଖୋଜି ପାରନ୍ତି, +[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}ରେ ଯୋଡ଼ାଯାଇଥିବା ବାକି ପୃଷ୍ଠାସବୁକୁ ଖୋଜି ପାରନ୍ତି], +କିମ୍ବା [{{fullurl:{{FULLPAGENAME}}|action=edit}} ଏହି ପୃଷ୍ଠାଟିକୁ ବଦଳାଇ ପାରନ୍ତି] ।', +'previewnote' => "'''ଜାଣିରଖନ୍ତୁ ଯେ, ଏହା କେବଳ ଏକ ଦେଖଣା ।''' +ଆପଣ କରିଥିବା ବଦଳସବୁ ଏଯାଏଁ ସାଇତା ଯାଇନାହିଁ!", 'editing' => '$1 କୁ ବଦଳାଉଛି', 'editingsection' => '$1 (ଭାଗ)କୁ ବଦଳାଇବେ', +'editconflict' => 'ବଦଳାଇବା ଦ୍ଵନ୍ଦ: $1', +'explainconflict' => "ଆପଣ ବଦଳାଇବା ଆରମ୍ଭ କରିବା ଭିତରେ କେହିଜଣେ ଏହି ପୃଷ୍ଠାକୁ ବଦଳାଇଛନ୍ତି ।
    +ଉପର ଲେଖା ଜାଗାଟି ଏହା ଯେମିତି ଅଛି ସେମିତି ଥିବା ଲେଖାଟି ଦେଖାଉଛି ।
    +ତଳ ଜାଗାଟିରେ ଆପଣ କରିଥିବା ବଦଳ ଦେଖାଉଛି ।
    +ଏବେ ଥିବା ଲେଖାରେ ଆପଣଙ୍କୁ ନିଜ ବଦଳକୁ ମିଶାଇବାକୁ ହେବ ।
    +ଯଦି ଆପଣ \"{{int:savearticle}}\" ଦବାନ୍ତି ତେବେ '''କେବଳ''' ଉପର ଲେଖାଟି ସାଇତା ହୋଇଯିବ ।", +'titleprotectedwarning' => "'''ଚେତାବନୀ: ଏହି ପୃଷ୍ଠାଟି କିଳାଯାଇଅଛି ଯାହାକୁ ତିଆରିବା ପାଇଁ [[Special:ListGroupRights|ବିଶେଷ କ୍ଷମତା]] ଥିବା ବ୍ୟବାହାରକାରୀ ଲୋଡ଼ା ।''' +ଆପଣଙ୍କ ସୁବିଧା ପାଇଁ ତଳେ ନଗଦ ଲଗ ପ୍ରବେଶ ଦିଆଗଲା:", 'templatesused' => 'ଏହି ଫରଦରେ ବ୍ୟବହାର କରାଯାଇଥିବା {{PLURAL:$1|ଟେମ୍ପଲେଟ|ଟେମ୍ପଲେଟସବୁ}}:', +'templatesusedpreview' => 'ଏହି ଫରଦରେ ବ୍ୟବହାର କରାଯାଇଥିବା {{PLURAL:$1|ଟେମ୍ପଲେଟ|ଟେମ୍ପଲେଟସବୁ}}:', 'template-protected' => '(କିଳାଯାଇଥିବା)', 'template-semiprotected' => '(ଅଧା କିଳାଯାଇଥିବା)', +'edit-conflict' => 'ବଦଳାଇବା ଦ୍ଵନ୍ଦ.', # History pages -'viewpagelogs' => 'ଏହି ଫରଦ ପାଇଁ ଲଗଗୁଡ଼ିକୁ ଦେଖନ୍ତୁ ।', +'viewpagelogs' => 'ଏହି ପୃଷ୍ଠା ପାଇଁ ଲଗଗୁଡ଼ିକୁ ଦେଖନ୍ତୁ ।', 'currentrev-asof' => '$1 ହୋଇଥିବା ରିଭିଜନ', 'revisionasof' => '$1 ଅନୁସାରେ କରାଯାଇଥିବା ବଦଳ', 'previousrevision' => 'ପୁରୁଣା ସଙ୍କଳନ', +'nextrevision' => 'ନୂଆ ସଙ୍କଳନ', +'currentrevisionlink' => 'ନଗଦ ସଙ୍କଳନ', 'cur' => 'ଦାନକର', 'next' => 'ପରେ', 'last' => 'ଆଗ', 'page_first' => 'ପ୍ରଥମ', +'histlegend' => "ଅଲଗା ବଛା:ସଙ୍କଳନ ସବୁର ରେଡ଼ିଓ ବାକ୍ସକୁ ବାଛି ତୁଳନା କରନ୍ତୁ ଓ ଏଣ୍ଟର ଦବାନ୍ତୁ ବା ତଳେ ଥିବା ବଟନ ଦବାନ୍ତୁ ।
    +ସାରକଥା: '''({{int:cur}})''' = ନଗଦ ସଙ୍କଳନରେ ଥିବା ତଫାତ, '''({{int:last}})''' = ଆଗ ସଙ୍କଳନ ଭିତରେ ତଫାତ, '''{{int:minoreditletter}}''' = ଟିକେ ବଦଳ ।", 'history-fieldset-title' => 'ଇତିହାସ ଖୋଜିବା', 'histfirst' => 'ସବୁଠୁ ପୁରୁଣା', 'histlast' => 'ନଗଦ', 'historyempty' => '(ଖାଲି)', +# Revision feed +'history-feed-description' => 'ଉଇକିରେ ଏହି ପୃଷ୍ଠାଟିପାଇଁ ସଙ୍କଳନ ଇତିହାସ', + # Revision deletion 'rev-delundel' => 'ଦେଖାଇବା/ଲୁଚାଇବା', 'revdelete-log' => 'କାରଣ:', @@ -325,46 +375,65 @@ $messages = array( 'revertmerge' => 'ମିଶାଇବା ନାହିଁ', # Diffs -'history-title' => '"$1" ପାଇଁ ସଁକଳନ ଇତିହାସ', +'history-title' => '"$1" ପାଇଁ ସଙ୍କଳନ ଇତିହାସ', 'difference' => '(ରିଭିଜନ ଭିତରେ ଥିବା ତଫାତ)', 'lineno' => '$1 କ ଧାଡ଼ି:', -'compareselectedversions' => 'ବଛାହୋଇଥିବା ସଁକଳନ ଗୁଡ଼ିକୁ ତଉଲ', +'compareselectedversions' => 'ବଛାହୋଇଥିବା ସଙ୍କଳନ ଗୁଡ଼ିକୁ ତଉଲ', 'editundo' => 'ପଛକୁ ଫେରିବା', # Search results -'searchresults' => 'ଖୋଜିବାରୁ ମିଳିଲା', -'searchresults-title' => '"$1" ପାଇଁ ଖୋଜିବାରୁ ମିଳିଲା', -'searchresulttext' => '{{SITENAME}} ରେ ଖୋଜିବା ବାବଦରେ ଅଧିକ ଜାଣିବା ପାଇଁ, [[{{MediaWiki:Helppage}}|{{int:help}}]] ଦେଖନ୍ତୁ', -'searchsubtitle' => 'ଆପଣ \'\'\'[[:$1]]\'\'\' ପାଇଁ ([[Special:Prefixindex/$1|"$1" ନାଆଁରେ ଆରମ୍ଭ ହୋଇଥିବା ସବୁ ପୃଷ୍ଠା]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" କୁ ଯୋଡ଼ାଥିବା ସବୁତକ ପୃଷ୍ଠା]])', -'notitlematches' => 'ପୃଷ୍ଠାଟିର ନାଆଁ ମିଶୁନାହିଁ', -'notextmatches' => 'ପୃଷ୍ଠାଟିର ନାଆଁ ମିଶୁନାହିଁ', -'prevn' => '{{PLURAL:$1|$1}}ର ଆଗରୁ', -'nextn' => '{{PLURAL:$1|$1}} ପର', -'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) ଟି ଦେଖିବେ', -'search-result-size' => '$1 ({{PLURAL:$2|1 ଶବ୍ଦ|$2 ଶବ୍ଦ}})', -'search-redirect' => '($1 କୁ ଆଗକୁ ବଢେଇନିଅ )', -'search-section' => '(ଭାଗ $1)', -'search-suggest' => 'ଆପଣ $1 ଭାବି ଖୋଜିଥିଲେ କି', -'search-interwiki-caption' => 'ସାଙ୍ଗରେ ଚାଲିଥିବା ବାକି ପ୍ରକଳ୍ପସବୁ', -'search-interwiki-default' => '$1 ଫଳାଫଳ:', -'search-interwiki-more' => '(ଅଧିକ)', -'search-mwsuggest-enabled' => 'ମତାମତ ସହ', -'search-mwsuggest-disabled' => 'ମତାମତ ନାହିଁ', -'searchall' => 'ସବୁ', -'nonefound' => "'''ଦେଖଁତୁ''': ଆପଣ ଖାଲି କିଛି ନେମସ୍ପେସକୁ ଆପେ ଆପେ ଖୋଜିପାରିବେ । -ସବୁ ପ୍ରକାରର ଲେଖା (ଆଲୋଚନା ଫରଦ, ଟେଁପଲେଟ ହେରିକା) ଖୋଜିବା ପାଇଁ ନିଜ ପ୍ରଶ୍ନ ଆଗରେ ''all:'' ଯୋଡ଼ି ଖୋଜନ୍ତୁ, ନହେଲେ ଦରକାରି ନେମସ୍ପେସକୁ ପ୍ରିଫିକ୍ସ କରି ବ୍ୟବହାର କରନ୍ତୁ ।", -'powersearch' => 'ଗହିର ଖୋଜା', -'powersearch-legend' => 'ଗହିର ଖୋଜା', -'powersearch-ns' => 'ନେମସ୍ପେସରେ ଖୋଜ', -'powersearch-redir' => 'ପଛକୁ ଲେଉଟାଯାଇଥିବା ଲେଖାଗୁଡ଼ିକର ତାଲିକା', -'powersearch-field' => 'ଖୋଜ', -'powersearch-toggleall' => 'ସବୁ', -'powersearch-togglenone' => 'କିଛି ନାହିଁ', +'searchresults' => 'ଖୋଜିବାରୁ ମିଳିଲା', +'searchresults-title' => '"$1" ପାଇଁ ଖୋଜିବାରୁ ମିଳିଲା', +'searchresulttext' => '{{SITENAME}} ରେ ଖୋଜିବା ବାବଦରେ ଅଧିକ ଜାଣିବା ପାଇଁ, [[{{MediaWiki:Helppage}}|{{int:help}}]] ଦେଖନ୍ତୁ', +'searchsubtitle' => 'ଆପଣ \'\'\'[[:$1]]\'\'\' ପାଇଁ ([[Special:Prefixindex/$1|"$1" ନାଆଁରେ ଆରମ୍ଭ ହୋଇଥିବା ସବୁ ପୃଷ୍ଠା]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" କୁ ଯୋଡ଼ାଥିବା ସବୁତକ ପୃଷ୍ଠା]])', +'searchsubtitleinvalid' => "ଆପଣ '''$1''' ଖୋଜିଥିଲେ", +'notitlematches' => 'ପୃଷ୍ଠାଟିର ନାଆଁ ମିଶୁନାହିଁ', +'notextmatches' => 'ପୃଷ୍ଠାଟିର ନାଆଁ ମିଶୁନାହିଁ', +'prevn' => '{{PLURAL:$1|$1}}ର ଆଗରୁ', +'nextn' => '{{PLURAL:$1|$1}} ପର', +'prevn-title' => 'ଆଗରୁ ମିଳିଥିବା $1ଟି {{PLURAL:$1|result|ଫଳ}}', +'nextn-title' => 'ଆଗର $1ଟି {{PLURAL:$1|result|ଫଳସବୁ}}', +'shown-title' => '$1 ପ୍ରତି ପୃଷ୍ଠାର {{PLURAL:$1|ଫଳାଫଳ|ଫଳାଫଳ}} ଦେଖାଇବେ ।', +'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) ଟି ଦେଖିବେ', +'searchmenu-new' => "'''\"[[:\$1]]\"ଟି ଏହି ଉଇକିରେ ତିଆରି କରିବେ!'''", +'searchprofile-articles' => 'ସୂଚୀ ପୃଷ୍ଠା', +'searchprofile-project' => 'ସାହାଯ୍ୟ ଓ ପ୍ରକଳ୍ପ ପୃଷ୍ଠା', +'searchprofile-images' => 'ମଲ୍ଟିମିଡ଼ିଆ', +'searchprofile-everything' => 'ସବୁକିଛି', +'searchprofile-advanced' => 'ଉନ୍ନତ', +'searchprofile-articles-tooltip' => '$1ରେ ଖୋଜିବେ', +'searchprofile-project-tooltip' => '$1ରେ ଖୋଜିବେ', +'searchprofile-images-tooltip' => 'ଫାଇଲ ସବୁ ପାଇଁ ଖୋଜିବେ', +'searchprofile-everything-tooltip' => 'ପ୍ରସଙ୍ଗ ସବୁକୁ ଖୋଜିବେ (ଆଲୋଚନା ସହ)', +'searchprofile-advanced-tooltip' => 'ନିଜେ ତିଆରିକରିହେବା ଭଳି ନେମସ୍ପେସରେ ଖୋଜିବେ', +'search-result-size' => '$1 ({{PLURAL:$2|1 ଶବ୍ଦ|$2 ଶବ୍ଦ}})', +'search-redirect' => '($1 କୁ ଆଗକୁ ବଢେଇନିଅ )', +'search-section' => '(ଭାଗ $1)', +'search-suggest' => 'ଆପଣ $1 ଭାବି ଖୋଜିଥିଲେ କି?', +'search-interwiki-caption' => 'ସାଙ୍ଗରେ ଚାଲିଥିବା ବାକି ପ୍ରକଳ୍ପସବୁ', +'search-interwiki-default' => '$1 ଫଳାଫଳ:', +'search-interwiki-more' => '(ଅଧିକ)', +'search-mwsuggest-enabled' => 'ମତାମତ ସହ', +'search-mwsuggest-disabled' => 'ମତାମତ ନାହିଁ', +'searchall' => 'ସବୁ', +'showingresults' => "ତଳେ {{PLURAL:$1|'''୧''' ଟି ଫଳ ଦେଖାଉଛୁ|'''$1'''ଟି ଫଳ}} ଯାହା #'''$2'''ରେ ଆରମ୍ଭ ହୋଇଅଛି ।", +'showingresultsheader' => "'''$4''' ପାଇଁ {{PLURAL:$5|'''$3'''ର '''$1''' ଫଳ |'''$3'''ର '''$1 - $2''' ଫଳ }}", +'nonefound' => "'''ଜାଣି ରଖନ୍ତୁ''': ଆପଣ ଖାଲି କିଛି ନେମସ୍ପେସକୁ ଆପେ ଆପେ ଖୋଜିପାରିବେ । +ସବୁ ପ୍ରକାରର ଲେଖା (ଆଲୋଚନା ପୃଷ୍ଠା, ଟେମ୍ପଲେଟ ଆଦି) ଖୋଜିବା ପାଇଁ ନିଜ ପ୍ରଶ୍ନ ଆଗରେ ''all:'' ଯୋଡ଼ି ଖୋଜନ୍ତୁ, ନହେଲେ ଦରକାରି ନେମସ୍ପେସକୁ ଲେଖାର ନାଆଁ ଆଗରେ ଯୋଡ଼ି ବ୍ୟବହାର କରନ୍ତୁ ।", +'search-nonefound' => 'ଆପଣ ଖୋଜିଥିବା ପ୍ରଶ୍ନ ପାଇଁ କିଛି ଫଳ ମିଳିଲା ନାହିଁ ।', +'powersearch' => 'ଗହିର ଖୋଜା', +'powersearch-legend' => 'ଗହିର ଖୋଜା', +'powersearch-ns' => 'ନେମସ୍ପେସରେ ଖୋଜ', +'powersearch-redir' => 'ପଛକୁ ଲେଉଟାଯାଇଥିବା ଲେଖାଗୁଡ଼ିକର ତାଲିକା', +'powersearch-field' => 'ଖୋଜ', +'powersearch-toggleall' => 'ସବୁ', +'powersearch-togglenone' => 'କିଛି ନାହିଁ', # Quickbar 'qbsettings-none' => 'କିଛି ନାହିଁ', # Preferences page +'preferences' => 'ପସନ୍ଦ', 'mypreferences' => 'ମୋ ପସନ୍ଦ', 'skin-preview' => 'ଦେଖଣା', 'searchresultshead' => 'ଖୋଜିବା', @@ -385,6 +454,12 @@ $messages = array( 'grouppage-sysop' => '{{ns:project}}:ପରିଛା (ଆଡମିନ)', +# User rights log +'rightslog' => 'ସଭ୍ୟଙ୍କ ଅଧିକାରର ଲଗ', + +# Associated actions - in the sentence "You do not have permission to X" +'action-move-subpages' => 'ଏହି ପୃଷ୍ଠାଟିକୁ ତାହାର ଉପପୃଷ୍ଠା ସହିତ ଘୁଞ୍ଚାଇବେ ।', + # Recent changes 'nchanges' => '$1 {{PLURAL:$1|ବଦଳ|ବଦଳସବୁ}}', 'recentchanges' => 'ନଗଦ ବଦଳ', @@ -394,21 +469,21 @@ $messages = array( 'recentchanges-label-minor' => 'ଏହା ଗୋଟିଏ ଛୋଟ ବଦଳ', 'recentchanges-label-bot' => "ଏହି ବଦଳଟି ଜଣେ '''ବଟ'''ଙ୍କ ଦେଇ କରାଯାଇଥିଲା", 'recentchanges-label-unpatrolled' => 'ଏହି ବଦଳଟିକୁ ଏ ଯାଏଁ ପରଖା ଯାଇନାହିଁ', -'rclistfrom' => '$1ରୁ ଆରମ୍ଭ କରି ନୂଆ ବଦଳଗୁଡ଼ିକ ଦେଖାଅ', +'rclistfrom' => '$1ରୁ ଆରମ୍ଭ କରି ନୂଆ ବଦଳଗୁଡ଼ିକ ଦେଖାଇବେ', 'rcshowhideminor' => '$1 ଟି ଛୋଟମୋଟ ବଦଳ', 'rcshowhidebots' => '$1 ଜଣ ବଟ', 'rcshowhideliu' => '$1 ଜଣ ନାଆଁ ଲେଖାଇଥିବା ଇଉଜର', 'rcshowhideanons' => '$1 ଜଣ ଅଜଣା ଇଉଜର', 'rcshowhidemine' => '$1 ମୁଁ କରିଥିବା ବଦଳ', -'rclinks' => 'ଗଲା $2 ଦିନର $1 ବଦଳଗୁଡ଼ିକୁ ଦେଖାଅ
    $3', +'rclinks' => 'ଗଲା $2 ଦିନର $1 ବଦଳଗୁଡ଼ିକୁ ଦେଖାଇବେ
    $3', 'diff' => 'ଅଦଳ ବଦଳ', 'hist' => 'ଇତିହାସ', -'hide' => 'ଲୁଚାଅ', -'show' => 'ଦେଖାଅ', +'hide' => 'ଲୁଚାଇବେ', +'show' => 'ଦେଖାଇବେ', 'minoreditletter' => 'ଟିକେ', 'newpageletter' => 'ନୂଆ', 'boteditletter' => 'ବଟ', -'rc-enhanced-expand' => 'ପୁରା ଦେଖାଅ (ଜାଭାସ୍କ୍ରିପଟ ଦରକାର)', +'rc-enhanced-expand' => 'ପୁରା ଦେଖାଇବେ (ଜାଭାସ୍କ୍ରିପଟ ଦରକାର)', 'rc-enhanced-hide' => 'ବେଶି କଥାସବୁ ଲୁଚାଇଦିଅ', # Recent changes linked @@ -416,34 +491,37 @@ $messages = array( 'recentchangeslinked-feed' => 'ଯୋଡ଼ାଥିବା ବଦଳ', 'recentchangeslinked-toolbox' => 'ଯୋଡ଼ାଥିବା ବଦଳ', 'recentchangeslinked-title' => '"$1" ସାଁଗରେ ଜୋଡ଼ାଥିବା ବଦଳ', -'recentchangeslinked-noresult' => 'ଯୋଡ଼ାଯାଇଥିବା ଫରଦ ସବୁରେ ଏଇ ସମୟ ଭିତରେ କିଛି ବଦଳାଯାଇନାହିଁ ।', +'recentchangeslinked-noresult' => 'ଯୋଡ଼ାଯାଇଥିବା ପୃଷ୍ଠା ସବୁରେ ଏଇ ସମୟସୀମା ଭିତରେ କିଛି ବଦଳାଯାଇନାହିଁ ।', 'recentchangeslinked-summary' => "ଏଇଟି କିଛିସମୟ ଆଗରୁ ନିର୍ଦ୍ଦିଷ୍ଟ ପୃଷ୍ଠାରୁ ଲିଙ୍କ ହୋଇଥିବା ଆଉ ବଦଳାଯାଇଥିବା (ଅବା ଗୋଟିଏ ନିର୍ଦ୍ଦିଷ୍ଟ ଶ୍ରେଣୀର) ପୃଷ୍ଠାସବୁର ତାଲିକା । [[Special:Watchlist|ମୋର ଦେଖାତାଲିକା]]ର ପୃଷ୍ଠା ସବୁ '''ବୋଲଡ଼'''।", 'recentchangeslinked-page' => 'ଫରଦର ନାଆଁ', 'recentchangeslinked-to' => 'ଦିଆଯାଇଥିବା ଫରଦରେ ଯୋଡ଼ା ବାକି ଫରଦମାନଙ୍କର ବଦଳ ସବୁ ଦେଖାନ୍ତୁ ।', # Upload 'upload' => 'ଫାଇଲ ଅପଲୋଡ଼ କରିବେ', +'uploadlogpage' => 'ଲଗ ଅପଲୋଡ କରିବେ', 'filedesc' => 'ସାରକଥା', 'fileuploadsummary' => 'ସାରକଥା:', +'uploadedimage' => '"[[$1]]" ଅପଲୋଡ କରାଗଲା', # Special:ListFiles 'imgfile' => 'ଫାଇଲ', 'listfiles_name' => 'ନାମ', # File description page -'file-anchor-link' => 'ଫାଇଲ', -'filehist' => 'ଫାଇଲ ଇତିହାସ', -'filehist-help' => 'ଏହା ଫାଇଲଟି ସେତେବେଳେ ଯେମିତି ଦିଶୁଥିଲା ତାହା ଦେଖିବା ପାଇଁ ତାରିଖ/ବେଳା ଉପରେ କ୍ଲିକ କରନ୍ତୁ', -'filehist-current' => 'ଏବେକାର', -'filehist-datetime' => 'ତାରିଖ/ବେଳ', -'filehist-thumb' => 'ନଖ ଦେଖଣା', -'filehist-thumbtext' => '$1 ପରିକା ସଙ୍କଳନର ନଖଦେଖଣା', -'filehist-user' => 'ବ୍ୟବାହାରକାରୀ', -'filehist-dimensions' => 'ଆକାର', -'filehist-comment' => 'ମତାମତ', -'imagelinks' => 'ଫାଇଲର ଲିଁକସବୁ', -'linkstoimage' => 'ଏହି ସବୁ{{PLURAL:$1|ପୃଷ୍ଠା|$1 ପୃଷ୍ଠାସବୁ}} ଏହି ଫାଇଲଟିକୁ ଯୋଡ଼ିଥାନ୍ତି:', -'sharedupload' => 'ଏହି ଫାଇଲଟି $1 ରୁ ଆଉ ବାକି ପ୍ରକଳ୍ପରେ ବ୍ୟବହାର କରାଯାଇପାରିବ .', +'file-anchor-link' => 'ଫାଇଲ', +'filehist' => 'ଫାଇଲ ଇତିହାସ', +'filehist-help' => 'ଏହା ଫାଇଲଟି ସେତେବେଳେ ଯେମିତି ଦିଶୁଥିଲା ତାହା ଦେଖିବା ପାଇଁ ତାରିଖ/ବେଳା ଉପରେ କ୍ଲିକ କରନ୍ତୁ', +'filehist-current' => 'ଏବେକାର', +'filehist-datetime' => 'ତାରିଖ/ବେଳ', +'filehist-thumb' => 'ନଖ ଦେଖଣା', +'filehist-thumbtext' => '$1 ପରିକା ସଙ୍କଳନର ନଖଦେଖଣା', +'filehist-user' => 'ବ୍ୟବାହାରକାରୀ', +'filehist-dimensions' => 'ଆକାର', +'filehist-comment' => 'ମତାମତ', +'imagelinks' => 'ଫାଇଲର ଲିଁକସବୁ', +'linkstoimage' => 'ଏହି ସବୁ{{PLURAL:$1|ପୃଷ୍ଠା|$1 ପୃଷ୍ଠାସବୁ}} ଏହି ଫାଇଲଟିକୁ ଯୋଡ଼ିଥାନ୍ତି:', +'sharedupload' => 'ଏହି ଫାଇଲଟି $1 ରୁ ଆଉ ବାକି ପ୍ରକଳ୍ପରେ ବ୍ୟବହାର କରାଯାଇପାରିବ .', +'uploadnewversion-linktext' => 'ଏହି ଫାଇଲର ନୂଆ ସଙ୍କଳନଟିଏ ଅପଲୋଡ଼ କରିବେ', # File reversion 'filerevert-comment' => 'କାରଣ:', @@ -452,28 +530,31 @@ $messages = array( 'filedelete-comment' => 'କାରଣ:', # Random page -'randompage' => 'ଯାହିତାହି ଫରଦଟିଏ', +'randompage' => 'ଯାହିତାହି ପୃଷ୍ଠା', # Statistics -'statistics-pages' => 'ଫରଦ', +'statistics' => 'ହିସାବ', +'statistics-pages' => 'ପୃଷ୍ଠା', 'brokenredirects-edit' => 'ବଦଳାଇବେ', # Miscellaneous special pages 'nbytes' => '$1 {{PLURAL:$1|byte|ବାଇଟ}}', 'nmembers' => '$1 {{PLURAL:$1|member|ସଭ୍ୟ}}', -'wantedcategories' => 'ଦରକାରି ବିଭାଗ', -'wantedpages' => 'ଦରକାରି ଫରଦ', +'wantedcategories' => 'ଦରକାରୀ ଶ୍ରେଣୀ', +'wantedpages' => 'ଦରକାରି ପୃଷ୍ଠା', 'wantedpages-badtitle' => '$1 ଉତ୍ତରସବୁରେ ଥିବା ଭୁଲ ଟାଇଟଲ', 'wantedfiles' => 'ଦରକାରି ଫାଇଲ', -'wantedtemplates' => 'ଦରକାରି ଟେଁପଲେଟ', -'mostlinked' => 'ବେଶି ଯୋଡ଼ାଯାଇଥିବା ଫରଦ', -'mostlinkedcategories' => 'ବେଶି ଯୋଡ଼ାଯାଇଥିବା ବିଭାଗ', -'mostlinkedtemplates' => 'ବେଶି ଯୋଡ଼ାଯାଇଥିବା ଟେଁପଲେଟ', -'mostcategories' => 'ବେଶିବିଭାଗ ଥିବା ଫରଦ', +'wantedtemplates' => 'ଦରକାରୀ ଟେମ୍ପଲେଟ', +'mostlinked' => 'ଅଧିକ ଯୋଡ଼ାଯାଇଥିବା ପୃଷ୍ଠା', +'mostlinkedcategories' => 'ବେଶି ଯୋଡ଼ାଯାଇଥିବା ଶ୍ରେଣୀ', +'mostlinkedtemplates' => 'ବେଶୀ ଯୋଡ଼ାଯାଇଥିବା ଟେମ୍ପଲେଟ', +'mostcategories' => 'ଅଧିକ ଶ୍ରେଣୀ ଥିବା ପୃଷ୍ଠା', 'mostimages' => 'ଫାଇଲରେ ବେଶି ଯୋଡ଼ାଯାଇଥିବା ଥିବା', 'prefixindex' => 'ଆଗରୁ କିଛି ଯୋଡ଼ା ସହ ଥିବା ସବୁ ଫରଦସବୁ', +'newpages' => 'ନୂଆ ପୃଷ୍ଠା', 'move' => 'ଘୁଞ୍ଚାଇବେ', +'movethispage' => 'ଏଇ ପୃଷ୍ଠାଟିକୁ ଘୁଞ୍ଚାଇବେ', 'pager-newer-n' => '{{PLURAL:$1|ନୂଆ 1|ନୂଆ $1}}', 'pager-older-n' => '{{PLURAL:$1|ପୁରୁଣା 1|ପୁରୁଣା $1}}', @@ -483,15 +564,23 @@ $messages = array( 'booksources-go' => 'ଯିବା', # Special:Log -'log' => 'ଲଗ', +'log' => 'ଲଗ', +'logempty' => 'ଲଗରେ ଥିବା ଲେଖା ସହ ମେଳଖାଉ ନାହିଁ ।', # Special:AllPages -'allpages' => 'ସବୁ ଫରଦ', +'allpages' => 'ସବୁ ପୃଷ୍ଠା', 'alphaindexline' => '$1 ରୁ $2', +'prevpage' => 'ଆଗ ପୃଷ୍ଠା ($1)', 'allpagesfrom' => 'ଏହି ନାଆଁରେ ଆରମ୍ଭ ହେଉଥିବା ପୃଷ୍ଠାଗୁଡ଼ିକୁ ଦେଖାଇବେ:', +'allpagesto' => 'ଏହି ନାଆଁରେ ଶେଷ ହେଉଥିବା ପୃଷ୍ଠାଗୁଡ଼ିକୁ ଦେଖାଇବେ:', +'allarticles' => 'ସବୁ ପୃଷ୍ଠା', 'allpagessubmit' => 'ଯିବେ', +# Special:DeletedContributions +'deletedcontributions' => 'ଲିଭାଇ ଦିଆଯାଇଥିବା ସଭ୍ୟଙ୍କ ଅବଦାନ', + # Special:LinkSearch +'linksearch' => 'ବାହାର ଲିଙ୍କ', 'linksearch-ok' => 'ଖୋଜିବା', # Special:Log/newusers @@ -503,32 +592,42 @@ $messages = array( 'emailmessage' => 'ଖବର:', # Watchlist -'watchlist' => 'ଦେଖାତାଲିକା', -'mywatchlist' => 'ମୋର ଦେଖାତାଲିକା', -'watch' => 'ଦେଖ', -'watchthispage' => 'ଏହି ପୃଷ୍ଠାଟିକୁ ଦେଖିବେ', -'unwatch' => 'ଦେଖନାହିଁ', +'watchlist' => 'ଦେଖାତାଲିକା', +'mywatchlist' => 'ମୋର ଦେଖାତାଲିକା', +'watch' => 'ଦେଖିବେ', +'watchthispage' => 'ଏହି ପୃଷ୍ଠାଟିକୁ ଦେଖିବେ', +'unwatch' => 'ଦେଖନାହିଁ', +'watchlist-details' => 'ଆପଣଙ୍କ ଦେଖଣା ତାଲିକାରେ ଆଲୋଚନା ପୃଷ୍ଠାକୁ ଛାଡ଼ି {{PLURAL:$1|$1 ଟି ପୃଷ୍ଠା|$1 ଟି ପୃଷ୍ଠା}} ଅଛି ।', +'watchlist-options' => 'ଦେଖଣା ବିକଳ୍ପସବୁ', # Displayed when you click the "watch" button and it is in the process of watching 'watching' => 'ଦେଖୁଛି...', 'unwatching' => 'ଦେଖୁନାହିଁ...', # Delete -'actioncomplete' => 'କାମଟି ପୁରା ହେଲା', -'deletedarticle' => '"[[$1]]" ଟି ଉଡ଼ିଗଲା', -'dellogpage' => 'ଲିଭାଇବା ଲଗ', -'deletecomment' => 'କାରଣ:', +'deletepage' => 'ପୃଷ୍ଠାଟି ଲିଭାଇଦେବେ', +'confirmdeletetext' => 'ଆପଣ ଗୋଟିଏ ପୃଷ୍ଠାର ଇତିହାସ ସହ ତାହାକୁ ଲିଭାଇବାକୁ ଯାଉଛନ୍ତି । +ଏହା ଥୟ କରନ୍ତୁ ଯେ ଆପଣ ଏହାର ପରିଣତି ଜାଣିଛନ୍ତି ଓ ଏହା [[{{MediaWiki:Policy-url}}|ମିଡ଼ିଆଉଇକିର ନିୟମ]] ଅନୁସାରେ କରୁଛନ୍ତି ।', +'actioncomplete' => 'କାମଟି ପୁରା ହେଲା', +'deletedtext' => '"$1"କୁ ଲିଭାଇ ଦିଆଗଲା । +ନଗଦ ଲିଭାଯାଇଥିବା ଫାଇଲର ଇତିହାସ $2ରେ ଦେଖନ୍ତୁ ।', +'deletedarticle' => '"[[$1]]" ଟି ଉଡ଼ିଗଲା', +'dellogpage' => 'ଲିଭାଇବା ଲଗ', +'deletecomment' => 'କାରଣ:', +'deleteotherreason' => 'ବାକିି କାରଣ:', +'deletereasonotherlist' => 'ବାକିି କାରଣ', # Rollback -'rollbacklink' => 'ପଛକୁ ଫେର', +'rollbacklink' => 'ପୁରାପୁରି ପଛକୁ ଫେରିଯିବେ', # Protect 'protectlogpage' => 'କିଳିବା ଲଗ', +'protectedarticle' => '"[[$1]]"ଟି କିଳାଗଲା', 'protectcomment' => 'କାରଣ:', 'protectexpiry' => 'ଅଚଳ ହେବ:', 'protect_expiry_invalid' => 'ଅଚଳ ହେବାର ବେଳଟି ଭୁଲ.', 'protect_expiry_old' => 'ଅଚଳ ହେବାର ବେଳ ଅତୀତରେ ଥିଲା.', -'protect-default' => 'ସବୁ ଇଉଜରଁକୁ ଅନୁମତି ଦିଅ', +'protect-default' => 'ସବୁ ଇଉଜରଙ୍କୁ ଅନୁମତି ଦିଅନ୍ତୁ', 'protect-fallback' => '"$1" ବାଲା ଅନୁମତି ଦରକାର', 'protect-level-autoconfirmed' => 'ନୁଆ ଓ ନାଆଁ ଲେଖାଇ ନ ଥିବା ଇଉଜରମାନକୁ ଅଟକାଁତୁ', 'protect-level-sysop' => 'କେବଳ ପରିଛାମାନଁକ ପାଇଁ', @@ -541,6 +640,7 @@ $messages = array( # Restrictions (nouns) 'restriction-edit' => 'ବଦଳାଇବେ', +'restriction-move' => 'ଘୁଞ୍ଚାଇବେ', 'restriction-create' => 'ତିଆରି', # Undelete @@ -555,22 +655,27 @@ $messages = array( 'blanknamespace' => '(ମୂଳ)', # Contributions -'contributions' => 'ଇଉଜରଙ୍କ ଦାନ', +'contributions' => 'ବ୍ୟବହାରକାରିଙ୍କ ଦାନ', 'contributions-title' => '$1 ପାଇଁ ବ୍ୟବହାରକାରୀଙ୍କ ଦାନ', 'mycontris' => 'ମୋ ଅବଦାନ', 'contribsub2' => '$1 ($2) ପାଇଁ', 'month' => 'ମାସରୁ (ଓ ତା ଆଗରୁ)', -'year' => 'ବରସରୁ (ଓ ତା ଆଗରୁ)', +'year' => 'ବର୍ଷରୁ (ଆଉ ତା ଆଗରୁ)', -'sp-contributions-talk' => 'କଥାଭାଷା', -'sp-contributions-submit' => 'ଖୋଜିବା', +'sp-contributions-newbies' => 'କେବଳ ନୂଆ ସଭ୍ୟମାନଙ୍କର ଅବଦାନ ଦେଖାଇବେ', +'sp-contributions-talk' => 'କଥାଭାଷା', +'sp-contributions-search' => 'ଅବଦାନ ପାଇଁ ଖୋଜନ୍ତୁ', +'sp-contributions-username' => 'ବ୍ୟବାହରକାରୀଙ୍କର ଆଇ.ପି. ଠିକଣା', +'sp-contributions-toponly' => 'ନଗଦ ବଦଳଗୁଡ଼ିକ ଦେଖାଇବେ', +'sp-contributions-submit' => 'ଖୋଜିବା', # What links here 'whatlinkshere' => 'ଏଠି କଣ କଣ ଲିଙ୍କ ଅଛି', -'whatlinkshere-title' => '"$1" କୁ ଫରଦ ଲିଁକ', -'whatlinkshere-page' => 'ଫରଦ', -'linkshere' => "ଏହି ଫରଦ ସବୁ '''[[:$1]]''' ସହ ଯୋଡା ଯାଇଅଛି:", -'isredirect' => 'ଅଲଗା ଫରଦକୁ ଯୋଡା ଫରଦ', +'whatlinkshere-title' => '"$1" କୁ ପୃଷ୍ଠା ଲିଙ୍କ', +'whatlinkshere-page' => 'ପୃଷ୍ଠା:', +'linkshere' => "ଏହି ପୃଷ୍ଠା ସବୁ '''[[:$1]]''' ସହ ଯୋଡା ଯାଇଅଛି:", +'isredirect' => 'ଆଉ ପୃଷ୍ଠାଟିଏକୁ ଯୋଡ଼ିବା ପୃଷ୍ଠା', +'istemplate' => 'ବାହାର', 'isimage' => 'ଚିତ୍ର ଲିଁକ', 'whatlinkshere-prev' => '{{PLURAL:$1|ଆଗ|ଆଗ $1}}', 'whatlinkshere-next' => '{{PLURAL:$1|ପର|ପର $1}}', @@ -581,18 +686,49 @@ $messages = array( 'whatlinkshere-filters' => 'ଫିଲଟରସବୁ', # Block/unblock -'ipbreason' => 'କାରଣ:', -'ipblocklist-submit' => 'ଖୋଜିବା', -'blocklink' => 'ଅଟକେଇ ଦେବେ', -'unblocklink' => 'ଛାଡ଼ିବା', -'change-blocklink' => 'ଓଗଳାକୁ ବଦଳାଇବା', -'contribslink' => 'ଅବଦାନ', -'blocklogpage' => 'ଲଗଟିକୁ ଅଟକାଇଦିଅ', +'blockip' => 'ସଭ୍ୟଙ୍କୁ ଅଟକାଇବେ', +'ipbreason' => 'କାରଣ:', +'ipboptions' => '୨ ଘଣ୍ଟା:2 hours,୧ ଦିନ:1 day,୩ ଦିନ:3 days,୧ ସପ୍ତାହ:1 week,୨ ସପ୍ତାହ:2 weeks,୧ ମାସ:1 month,୩ ମାସ:3 months,୬ ମାସ:6 months,୧ ବର୍ଷ:1 year,ଅସରନ୍ତି:infinite', +'ipblocklist-submit' => 'ଖୋଜିବା', +'blocklink' => 'ଅଟକେଇ ଦେବେ', +'unblocklink' => 'ଛାଡ଼ିବା', +'change-blocklink' => 'ଓଗଳାକୁ ବଦଳାଇବେ', +'contribslink' => 'ଅବଦାନ', +'blocklogpage' => 'ଲଗଟିକୁ ଅଟକାଇଦିଅ', +'unblocklogentry' => 'କିଳାଯାଇନଥିବା $1', +'block-log-flags-nocreate' => 'ନୂଆ ଖାତା ଖୋଲିବାକୁ ଅଚଳ କରାଯାଇଅଛି', # Move page -'movelogpage' => 'ଲଗଟିକୁ ଘୁଞ୍ଚାଅ', -'movereason' => 'କାରଣ:', -'revertmove' => 'ପଛକୁ ଫେରାଇନେବେ', +'move-page' => '$1କୁ ଘୁଞ୍ଚାଇବେ', +'movepagetext' => "ଏହି ଫର୍ମଟି ବ୍ୟବହାର କରି ଆପଣ ତଳ ପୃଷ୍ଠାଟିକୁ ବଦଳାଇ ପାରିବେ, ଏହାର ସବୁ ଇତିହାସ ଏକ ନୂଆ ନାଆଁକୁ ବଦଳିଯିବ । +ପୁରୁଣା ନାଆଁଟି ଏକ ପୁରୁଣା ନାଆଁ ଭାବରେ ଏହି ପୃଷ୍ଠା ଭାବରେ ବାଟ କଢ଼ାଇବ । +ଆପଣ ମୂଳ ଲେଖାକୁ ସେହି ପୁରୁଣା ନାଆଁ ଦେଇ ଆପେଆପେ ପଢ଼ିପାରିବେ । +ଯଦି ଆପଣ ଏହା ଚାହାନ୍ତି ନାହିଁ ତେବେ [[Special:DoubleRedirects|ଦୁଇଥର ଥିବା ପୃଷ୍ଠା]] ବା [[Special:BrokenRedirects|ଭଙ୍ଗା ଆଗ ପୃଷ୍ଠା]] ଦେଖି ପାରିବେ । + +ଲିଙ୍କସବୁ କେଉଁଠିକୁ ଯାଉଛି ତାହା ପାଇଁ ଆପଣ ଦାୟୀ ନୁହନ୍ତି । + +ମନେ ରଖନ୍ତୁ, ଆଗରୁ ଏହି ଏକା ନାଆଁରେ ପୃଷ୍ଠାଟିଏ ଥିଲେ ଏହି ପୃଷ୍ଠାଟି '''ଘୁଞ୍ଚିବ ନାହିଁ''' ଯେତେ ଯାଏଁ ତାହା ଖାଲି ନାହିଁ ବା ଆଗ ପୃଷ୍ଠାଟିର କୌଣସି ବଦଳ ଇତିହାସ ନାହିଁ ସେତେ ବେଳ ଯାଏଁ ଏହା ଏମିତି ରହିବ । ଏହାର ମାନେ ହେଉଛି, ଆପଣ ଗୋଟିଏ ପୃଷ୍ଠାର ନାଆଁକୁ ତାର ପୁରୁଣା ନାଆଁ ଦେଇପାରିବେ, କିନ୍ତୁ ଆଗରୁ ଥିବା ପୃଷ୍ଠାଟି ଉପରେ ନୂଆ ପୃଷ୍ଠାଟିଏ ଚାପି ଦେଇପାରିବେ ନାହିଁ । + +'''ଜାଣି ରଖନ୍ତୁ!''' +ଏହା ଏକ ଜଣାଶୁଣା ପୃଷ୍ଠାରେ ଆମୂଳଚୂଳ ଓ ଅଜଣା ବଦଳ କରିପାରେ; +ନିଶ୍ଚିତ କରନ୍ତୁ ଆପଣ ଆଗକୁ ବଢ଼ିବା ଆଗରୁ ଏହାର ଫଳ ବାବଦରେ ଜାଣିଛନ୍ତି ।", +'movepagetalktext' => 'ଯଦି: +*ଗୋଟିଏ ଖାଲି ଆଲୋଚନା ପୃଷ୍ଠା ସେହି ନାଆଁରେ ଥାଏ +*ଆପଣ ତଳ ବାକ୍ସକୁ ନ ବାଛନ୍ତି +ତେବେ ଏହି ପ୍ରୁଷ୍ଠା ସହ ଯୋଡାଯାଇଥିବା ଆଲୋଚନା ପ୍ରୁଷ୍ଠାକୁ ଆପେ ଆପେ ଘୁଞ୍ଚାଇଦିଆଯିବ । +ସେହି ଯାଗାରେ, ଆପଣଙ୍କୁ ପ୍ରୁଷ୍ଠାଟିକୁ ଘୁଞ୍ଚାଇବାକୁ/ମିଶାଇବାକୁ ପଡ଼ିବ ।', +'cant-move-user-page' => 'ଆପଣଙ୍କୁ ଏହି ସଭ୍ୟ ପୃଷ୍ଠାଟିକୁ ଘୁଞ୍ଚାଇବା ଲାଗି ଅନୁମତି ମିଳିନାହିଁ, କିନ୍ତୁ ନିଜର ଉପପୃଷ୍ଠା ସବୁ ଘୁଞ୍ଚାଇ ପାରିବେ ।', +'newtitle' => 'ନୂଆ ନାଆଁକୁ:', +'pagemovedsub' => 'ଘୁଞ୍ଚାଇବା ସଫଳ ହେଲା', +'movepage-moved' => '\'\'\'"$1"ରୁ "$2"\'\'\'କୁ ଘୁଞ୍ଚାଇ ଦିଆଗଲା ।', +'movepage-moved-redirect' => 'ପୃଷ୍ଠାଟିର ନାଆଁକୁ ଘୁଞ୍ଚାଇଦିଆଗଲା ।', +'move-subpages' => 'ଉପପୃଷ୍ଠା ଗୁଡ଼ିକୁ ଘୁଞ୍ଚାଇବେ ($1 ଯାଏଁ)', +'1movedto2' => '[[$1]]ରୁ [[$2]]କୁ ଘୁଞ୍ଚାଗଲା', +'1movedto2_redir' => '[[$1]]ରୁ [[$2]]କୁ ଲେଉଟାଇଦିଆଗଲା', +'movelogpage' => 'ଲଗଟିକୁ ଘୁଞ୍ଚାଇବେ', +'movenosubpage' => 'ଏହି ପୃଷ୍ଠାର ଉପପୃଷ୍ଠା ନାହିଁ ।', +'movereason' => 'କାରଣ:', +'revertmove' => 'ପଛକୁ ଫେରାଇନେବେ', # Export 'export' => 'ଫରଦସବୁ ରପ୍ତାନି କର', @@ -601,22 +737,22 @@ $messages = array( 'thumbnail-more' => 'ବଡ଼କର', # Tooltip help for the actions -'tooltip-pt-userpage' => 'ଆପଣଙ୍କ ବ୍ୟବାହାରକାରୀ ଫରଦ', -'tooltip-pt-mytalk' => 'ଆପଣଙ୍କ ଆଲୋଚନା ଫରଦ', +'tooltip-pt-userpage' => 'ଆପଣଙ୍କ ବ୍ୟବାହାରକାରୀ ପୃଷ୍ଠା', +'tooltip-pt-mytalk' => 'ଆପଣଙ୍କ ଆଲୋଚନା ପୃଷ୍ଠା', 'tooltip-pt-preferences' => 'ମୋ ପସନ୍ଦ', 'tooltip-pt-watchlist' => 'ବଦଳ ପାଇଁ ଆପଣ ଦେଖାଶୁଣା କରୁଥିବା ପୃଷ୍ଠାଗୁଡ଼ିକର ତାଲିକା', 'tooltip-pt-mycontris' => 'ଆପଣଙ୍କ ଅବଦାନ', 'tooltip-pt-login' => 'ଆପଣଙ୍କୁ ଲଗିନ କରିବାକୁ କୁହାଯାଉଅଛି ସିନା, ବାଧ୍ୟ କରାଯାଉନାହିଁ', 'tooltip-pt-logout' => 'ଲଗଆଉଟ', 'tooltip-ca-talk' => 'ଏହି ପୃଷ୍ଠାଟି ଉପରେ ଆଲୋଚନା', -'tooltip-ca-edit' => 'ଆପଣ ଏହି ପୃଷ୍ଠାଟିରେ ଅଦଳ ବଦଳ କରିପାରିବେ, ତେବେ ସାଇତିବା ଆଗରୁ ଦେଖଣା ଦେଖଁତୁ ।', -'tooltip-ca-addsection' => 'ନୂଆ ନିର୍ଘଁଟଟିଏ ଆଁରଭ କରିବା', +'tooltip-ca-edit' => 'ଆପଣ ଏହି ପୃଷ୍ଠାଟିରେ ଅଦଳ ବଦଳ କରିପାରିବେ, ତେବେ ସାଇତିବା ଆଗରୁ ଦେଖଣା ଦେଖନ୍ତୁ ।', +'tooltip-ca-addsection' => 'ନୂଆ ବିଭାଗଟିଏ ଆରମ୍ଭ କରିବେ', 'tooltip-ca-viewsource' => 'ଏହି ପୃଷ୍ଠାଟି କିଳାଯାଇଛି । ଆପଣ ଏହାର ମୂଳ ଦେଖିପାରିବେ', 'tooltip-ca-history' => 'ଏହି ପୃଷ୍ଠାର ପୁରୁଣା ସଂସ୍କରଣ', 'tooltip-ca-protect' => 'ଏହି ପୃଷ୍ଠାଟିକୁ କିଳିବେ', 'tooltip-ca-delete' => 'ଏହି ପୃଷ୍ଠାଟି ଲିଭାଇବେ', -'tooltip-ca-move' => 'ଏଇ ଫରଦଟି ଘୁଁଚାଅ', +'tooltip-ca-move' => 'ଏଇ ପୃଷ୍ଠାଟିକୁ ଘୁଞ୍ଚାଇବେ', 'tooltip-ca-watch' => 'ଆପଣଙ୍କ ଦେଖାତାଲିକାରେ ଏଇ ଫରଦଟି ମିଶାନ୍ତୁ', 'tooltip-ca-unwatch' => 'ନିଜ ଦେଖଣାତାଲିକାରୁ ଏହି ଫରଦଟି ବାହାର କରିଦିଅଁତୁ', 'tooltip-search' => '{{SITENAME}} ରେ ଖୋଜିବା', @@ -641,10 +777,11 @@ $messages = array( 'tooltip-t-permalink' => 'ବଦଳାଯାଇଥିବା ଏହି ଫରଦଟିର ସ୍ଥାୟୀ ଲିଙ୍କ', 'tooltip-ca-nstab-main' => 'ସୂଚୀ ପୃଷ୍ଠାଟି ଦେଖିବା', 'tooltip-ca-nstab-user' => 'ଫାଇଲ ପୃଷ୍ଠାଗୁଡ଼ିକ ଦେଖନ୍ତୁ', -'tooltip-ca-nstab-special' => 'ଏଇଟି ଗୋଟିଏ ବିଶେଷ ଫରଦ, ଆପଣ ଏହାକୁ ବଦଳାଇପାରିବେ ନାହିଁ', +'tooltip-ca-nstab-special' => 'ଏଇଟି ଗୋଟିଏ ନିଆରା ପୃଷ୍ଠା, ଆପଣ ଏହାକୁ ବଦଳାଇପାରିବେ ନାହିଁ', 'tooltip-ca-nstab-project' => 'ପ୍ରକଳ୍ପ ଫରଦଟି ଦେଖିବା', 'tooltip-ca-nstab-image' => 'ଫାଇଲ ପୃଷ୍ଠାଗୁଡ଼ିକ ଦେଖନ୍ତୁ', -'tooltip-ca-nstab-category' => 'ବିଭାଗ ଫରଦଟିକୁ ଖୋଲ', +'tooltip-ca-nstab-template' => 'ଟେମ୍ପଲେଟଟି ଦେଖିବା', +'tooltip-ca-nstab-category' => 'ଶ୍ରେଣୀ ପୃଷ୍ଠାଟିକୁ ଦେଖାଇବେ', 'tooltip-minoredit' => 'ଏହାକୁ ଛୋଟ ବଦଳ ଭାବେ ଗଣ', 'tooltip-save' => 'ବଦଳଗୁଡ଼ିକ ସାଇତିବେ', 'tooltip-preview' => 'ଆପଣନ୍କ ବଦଳ ଦେଖିନିଅନ୍ତୁ, ସାଇତିବା ଆଗରୁ ଏହା ବ୍ୟ୍ଅବହାର କରନ୍ତୁ!', @@ -659,6 +796,7 @@ $messages = array( 'nextdiff' => 'ନୂଆ ବଦଳ →', # Media information +'file-info-size' => '$1 × $2 ପିକସେଲ, ଫାଇଲ ଆକାର: $3, ଏମ.ଆଇ.ଏମ.ଇର ପ୍ରକାର: $4', 'file-nohires' => 'ବଡ଼ ରେଜୋଲୁସନ ନାହିଁ ।', 'show-big-image' => 'ପୁରା ବଡ଼ ଆକାରରେ', 'show-big-image-thumb' => 'ଦେଖଣା ଚିତ୍ରର ଆକାର: $1 × $2 ପିକସେଲ', @@ -691,11 +829,45 @@ $messages = array( 'monthsall' => 'ସବୁ', 'limitall' => 'ସବୁ', +# E-mail address confirmation +'confirmemail_needlogin' => 'ଆପଣଙ୍କୁ ନିଜ ଇମେଲଟିକୁ ଥୟ କରିବା ପାଇଁ $1 କରିବାକୁ ପଡ଼ିବ ।', +'confirmemail_body' => 'କେହିଜଣେ, ବୋଧହୁଏ ଆପଣ ହିଁ $1 ଆଇ.ପି. ଠିକଣାରୁ, +ଏହି ଇ-ମେଲ ଆଇ.ଡି.ରେ "$2" ନାଆଁରେ {{SITENAME}} ଠାରେ ଖାତାଟିଏ ଖୋଲିଛନ୍ତି । + +ଏହି ଖାତାଟି ସତରେ ଆପଣଙ୍କର ବୋଲି ଥୟ କରିବା ପାଇଁ ଓ {{SITENAME}}ରେ ଇ-ମେଲ ସୁବିଧାସବୁ ସଚଳ କରିବାପାଇଁ, ଏହି ଲିଙ୍କ୍ଟିକୁ ଆପଣଙ୍କ ବ୍ରାଉଜରରେ ଖୋଲନ୍ତୁ: + +$3 + +ଯଦି ଆପଣ ଖାତାଟିଏ ଆଗରୁ ଖୋଲି *ନାହାନ୍ତି* ତେବେ ଏହି ଲିଙ୍କକୁ ଯାଇ ଇ-ମେଲ ଆ.ଡି. ଥୟ କରିବାକୁ ନାକଚ କରିଦିଅନ୍ତୁ: + +$5 + +ଏହି କନଫର୍ମେସନ କୋଡ଼ $4 ବେଳେ ଅଚଳ ହୋଇଯିବ ।', + +# action=purge +'confirm_purge_button' => 'ଠିକ ଅଛି', + +# Multipage image navigation +'imgmultigo' => 'ଯିବା!', + +# Table pager +'table_pager_next' => 'ନୂଆ ପୃଷ୍ଠା', +'table_pager_limit_submit' => 'ଯିବା', + +# Auto-summaries +'autosumm-new' => '"$1" ନାଆଁରେ ପୃଷ୍ଠାଟିଏ ତିଆରିକଲେ', + +# Watchlist editor +'watchlistedit-raw-titles' => 'ନାଆଁ:', + # Watchlist editing tools +'watchlisttools-view' => 'ଦରକାରୀ ବଦଳଗୁଡ଼ିକ ଦେଖାଇବେ', 'watchlisttools-edit' => 'ଦେଖିବା ତାଲିକାଟିକୁ ଦେଖିବେ ଓ ବଦଳାଇବେ', +'watchlisttools-raw' => 'ଫାଙ୍କା ଦେଖା ତାଲିକାଟିକୁ ଦେଖିବେ ଓ ବଦଳାଇବେ', # Special:FilePath -'filepath-page' => 'ଫାଇଲ:', +'filepath-page' => 'ଫାଇଲ:', +'filepath-submit' => 'ଯିବା', # Special:FileDuplicateSearch 'fileduplicatesearch-submit' => 'ଖୋଜିବା', diff --git a/languages/messages/MessagesOs.php b/languages/messages/MessagesOs.php index d9b78fe3..0480f38f 100644 --- a/languages/messages/MessagesOs.php +++ b/languages/messages/MessagesOs.php @@ -55,7 +55,7 @@ $messages = array( 'tog-editsection' => 'Равдис «баив æй» æрвитæн тексты алы хайы дæр', 'tog-editsectiononrightclick' => 'Сæргондыл рахиз æркъæппæй фарсы хæйттæ ив (JavaScript)', 'tog-showtoc' => 'Сæргæндты номхыгъд æвдис (æртæ сæргондæй фылдæр цы фарсы ис, уым)', -'tog-rememberpassword' => 'Системæ бахъуыды кæнæд мæ пароль ацы компьютерыл.', +'tog-rememberpassword' => 'Системæ бахъуыды кæнæд мæ пароль ацы компьютерыл ($1 бонæй къаддæр æмгъуыдмæ)', 'tog-watchcreations' => 'Æз цы фæрстæ райдайын, уыдонмæ мæ цæст дарын мæ фæнды', 'tog-watchdefault' => 'Æз цы фæрстæ ивын, уыдонмæ мæ цæст дарын мæ фæнды', 'tog-watchmoves' => 'Æз цы фæрсты нæмттæ ивын, уыдонмæ мæ цæст дарын мæ фæнды', @@ -89,21 +89,21 @@ $messages = array( 'thursday' => 'Цыппæрæм', 'friday' => 'майрæмбон', 'saturday' => 'Сабат', -'sun' => 'Хц', -'mon' => 'Къ', -'tue' => 'Дц', -'wed' => 'Æр', -'thu' => 'Цп', -'fri' => 'Мрм', +'sun' => 'Хцб', +'mon' => 'Крс', +'tue' => 'Дцг', +'wed' => 'Æрт', +'thu' => 'Цпр', +'fri' => 'Мрб', 'sat' => 'Сбт', 'january' => 'январь', 'february' => 'февраль', 'march' => 'мартъи', -'april' => 'апрелы', +'april' => 'апрель', 'may_long' => 'май', 'june' => 'июнь', 'july' => 'июль', -'august' => 'августы', +'august' => 'август', 'september' => 'сентябрь', 'october' => 'октябрь', 'november' => 'ноябрь', @@ -157,55 +157,55 @@ $messages = array( 'cancel' => 'Фæстæмæ', 'moredotdotdot' => 'Фылдæр…', 'mypage' => 'Дæхи фарс', -'mytalk' => 'Дæумæ цы дзурынц', +'mytalk' => 'Мæ дискусси', 'anontalk' => 'Ацы IP-адрисы дискусси', -'navigation' => 'хъæугæ æрвитæнтæ', +'navigation' => 'Навигаци', 'and' => ' æмæ', # Cologne Blue skin 'qbfind' => 'Агур', 'qbbrowse' => 'Фен', -'qbedit' => 'Баив æй', +'qbedit' => 'Ивын', 'qbpageoptions' => 'Ацы фарс', 'qbpageinfo' => 'Фарсы контекст', 'qbmyoptions' => 'Мæ фæрстæ', 'qbspecialpages' => 'Сæрмагонд фæрстæ', +'faq' => 'FAQ', # Vector skin -'vector-action-delete' => 'Аппар', -'vector-action-protect' => 'Сæхгæн', -'vector-namespace-category' => 'Категори', -'vector-namespace-image' => 'Файл', -'vector-namespace-main' => 'Фарс', -'vector-namespace-project' => 'Проекты фарс', -'vector-namespace-template' => 'Шаблон', -'vector-namespace-user' => 'Архайæджы фарс', -'vector-view-create' => 'Скæн æй', -'vector-view-edit' => 'Баив æй', -'vector-view-history' => 'Истори', -'vector-view-view' => 'Кæс', -'vector-view-viewsource' => 'Йæ код фен', +'vector-action-addsection' => 'Нæуæг ныхас бакæн', +'vector-action-delete' => 'Аппар', +'vector-action-move' => 'Ном ивын', +'vector-action-protect' => 'Сæхгæн', +'vector-view-create' => 'Скæн æй', +'vector-view-edit' => 'Ивын', +'vector-view-history' => 'Истори', +'vector-view-view' => 'Фæрсын', +'vector-view-viewsource' => 'Йæ код фен', +'actions' => 'Архайдтæ', +'namespaces' => 'Нæмтты тыгъдæдттæ', +'variants' => 'Варианттæ', 'errorpagetitle' => 'Рæдыд', -'returnto' => '$1 фарсмæ раздæх.', +'returnto' => '$1 фарсмæ раздæхын.', 'tagline' => 'Сæрибар энциклопеди Википедийы æрмæг.', 'help' => 'Æххуыс', -'search' => 'агур', -'searchbutton' => 'агур', +'search' => 'Агуырд', +'searchbutton' => 'Агур', 'go' => 'Статьямæ', -'searcharticle' => 'Статьямæ', +'searcharticle' => 'Агур', 'history' => 'Фарсы истори', 'history_short' => 'Истори', 'info_short' => 'Информаци', 'printableversion' => 'Мыхурмæ верси', 'permalink' => 'Ацы версимæ æрвитæн', 'print' => 'Мыхуыр', -'edit' => 'Баив æй', +'edit' => 'Ивын', 'create' => 'Скæн æй', -'editthispage' => 'Ацы фарс баив', -'create-this-page' => 'Ацы фарс скæн', +'editthispage' => 'Ивын ацы фарс', +'create-this-page' => 'Ацы фарс скæнын', 'delete' => 'Аппар', -'deletethispage' => 'Аппар æй', +'deletethispage' => 'Аппарын ацы фарс', 'protect' => 'Сæхгæн', 'protect_change' => 'баив', 'protectthispage' => 'Сæхгæн ацы фарс', @@ -220,7 +220,7 @@ $messages = array( 'articlepage' => 'Фен статья', 'talk' => 'Дискусси', 'views' => 'Æркæстытæ', -'toolbox' => 'мигæнæнтæ', +'toolbox' => 'Фæрæзтæ', 'userpage' => 'Ацы архайæджы фарс фен', 'projectpage' => 'Проекты фарс фен', 'imagepage' => 'Файлы фарс фен', @@ -246,10 +246,14 @@ $messages = array( 'currentevents' => 'Ног хабæрттæ', 'currentevents-url' => 'Project:Xabar', 'disclaimers' => 'Бæрн нæ исыны тыххæй', -'disclaimerpage' => 'Project:Бæрн нæ исыны тыххæй', +'disclaimerpage' => 'Project:Нæ бæрн исыны тыххæй', +'edithelp' => 'Ивын æххуыс', +'edithelppage' => 'Help:Ивд', +'helppage' => 'Help:Сæргæндтæ', 'mainpage' => 'Сæйраг фарс', 'mainpage-description' => 'Сæйраг фарс', 'portal' => 'Архайджыты æхсæнад', +'portal-url' => 'Project:Архайджыты æхсæнад', 'privacy' => 'Хибардзинады политикæ', 'privacypage' => 'Project:Хибардзинады политикæ', @@ -262,22 +266,22 @@ $messages = array( 'retrievedfrom' => 'Ратæдзæн: «$1»', 'youhavenewmessages' => 'Райстай $1 ($2).', 'newmessageslink' => 'ног фыстæгтæ', -'newmessagesdifflink' => 'фæстаг ивддзинад', -'editsection' => 'баив æй', -'editold' => 'баив æй', +'newmessagesdifflink' => 'фæстаг ивд', +'editsection' => 'ивын', +'editold' => 'ивын', 'viewsourceold' => 'йæ код фен', -'editlink' => 'баив æй', +'editlink' => 'ивын', 'viewsourcelink' => 'йæ код фен', -'editsectionhint' => 'Баив æй: $1', +'editsectionhint' => 'Ив хай: $1', 'toc' => 'Сæргæндтæ', 'showtoc' => 'равдис', -'hidetoc' => 'бамбæхс', +'hidetoc' => 'бамбæхсын', 'viewdeleted' => '$1 фенын дæ фæнды?', 'site-rss-feed' => '$1 — RSS-уадздзаг', 'site-atom-feed' => '$1 — Atom-уадздзаг', 'page-rss-feed' => '$1 — RSS-лæсæн', 'page-atom-feed' => '$1 — Atom-лæсæн', -'red-link-title' => '$1 (фыст нæма у)', +'red-link-title' => '$1 (фыст нæу)', # Short words for each namespace, by default used in the namespace tab in monobook 'nstab-main' => 'Статья', @@ -301,7 +305,7 @@ $messages = array( 'error' => 'Рæдыд', 'databaseerror' => 'Бæрæггæнæнты базæйы рæдыд', 'readonly' => 'Бæрæггæнæнты базæ фыссынæн æхгæд у', -'missingarticle-rev' => '(верси № $1)', +'missingarticle-rev' => '(фæлтæр № $1)', 'missingarticle-diff' => '(хъауджы: $1, $2)', 'internalerror' => 'Мидæг рæдыд', 'internalerror_info' => 'Мидæг рæдыд: $1', @@ -314,7 +318,7 @@ $messages = array( 'cannotdelete' => 'Нæй аппарæн файл кæнæ фарс "$1". Æндæр исчи йæ аппæрста мыййаг.', 'badtitle' => 'Æнæмбæлон сæргонд', -'viewsource' => 'Йæ код фен', +'viewsource' => 'Код кæсын', 'viewsourcefor' => 'Фарс «$1»', 'protectedpagetext' => 'Ацы фарс у ивынæй æхгæд.', 'viewsourcetext' => 'Ацы фарсы код фенæн æмæ халдих кæнæн ис:', @@ -328,16 +332,19 @@ $messages = array( 'yourname' => 'Архайæджы ном:', 'yourpassword' => 'Пароль:', 'yourpasswordagain' => 'Дæ пароль иу хатт ма:', -'remembermypassword' => 'Системæ бахъуыды кæнæд мæ пароль ацы компьютерыл', +'remembermypassword' => 'Системæ бахъуыды кæнæд мæ пароль ацы браузеры ($1 бонæй къаддæр æмгъуыдмæ)', 'yourdomainname' => 'Дæ домен:', -'login' => 'Дæхи бавдис системæйæн', +'login' => 'Бахизын', 'nav-login-createaccount' => 'Системæйæн дæхи бавдис', -'userlogin' => 'Системæйæн дæхи бавдис', +'userlogin' => 'Бахизын / регистраци кæнын', 'logout' => 'Номсусæг суын', -'userlogout' => 'Номсусæг су', +'userlogout' => 'Рахизын', 'notloggedin' => 'Системæйæн дæхи нæ бацамыдтай', 'nologin' => "Регистрацигонд нæма дæ? '''$1'''.", 'nologinlink' => 'Регистраци', +'createaccount' => 'Регистраци кæнын', +'gotaccount' => 'Регистрацигонд дæ? $1.', +'gotaccountlink' => 'Бахизын', 'createaccountmail' => 'адрисмæ гæсгæ', 'badretype' => 'Дыууæ хатты иу пароль хъуамæ ныффыстаис', 'loginsuccess' => 'Ныр та Википедийы архайыс $1, зæгъгæ, ахæм номæй.', @@ -368,60 +375,70 @@ $messages = array( 'link_tip' => 'Мидæг æрвитæн (æндæр статьямæ)', 'extlink_sample' => 'http://www.example.com æрвитæны текст', 'extlink_tip' => 'Æддаг æрвитæн (префикс http:// ма рох кæн)', -'headline_sample' => 'Ам сæргонды текст уæд', +'headline_sample' => 'Ам сæргонд текст уæд', 'math_sample' => 'Ныффысс формулæ', 'math_tip' => 'Математикон формулæ (формат LaTeX)', +'nowiki_sample' => 'Батысс нæформатгонд текст ардæм', +'image_tip' => 'Æфтыд файл', 'media_tip' => 'Файлмæ æрвитæн', +'sig_tip' => 'Дæ ырфыст рæстæгимæ', # Edit pages -'summary' => 'Ивддзинæдты мидис:', -'subject' => 'Темæ/сæргонд:', -'minoredit' => 'Ай чысыл ивддзинад у.', -'watchthis' => 'Ацы фарсмæ дæ цæст æрдар', -'savearticle' => 'Афтæ уæд!', -'preview' => 'Разæркаст', -'showpreview' => 'Фен уал æй', -'showlivepreview' => 'Тагъд разæркаст', -'showdiff' => 'Цы баивтай ацы тексты, уый фен', -'summary-preview' => 'Ивддзинады афыст уыдзæн:', -'blockedtitle' => 'Архайæг хъодыгонд æрцыд', -'blockednoreason' => 'аххос амынд не ’рцыд', -'whitelistedittitle' => 'Ацы текст ивынмæ хъуамæ дæхи бацамонай системæйæн', -'loginreqtitle' => 'Хъуамæ дæхи бацамонай', -'accmailtitle' => 'Пароль рарвыст у.', -'newarticle' => '(Ног)', -'note' => "'''Бафиппай:'''", -'editing' => 'Ивыс: $1', -'editingsection' => 'Ивыс $1 (фарсы хай)', -'editconflict' => 'Ивыны конфликт: $1', -'yourtext' => 'Дæхи текст', -'yourdiff' => 'Хицæндзинæдтæ', -'longpagewarning' => "'''РАГФÆДЗАХСТ: Ацы фарсы бæрцуат у $1 килобайты. -Сæ бæрцуат 32 килобайтæй фылдæр кæмæн у, ахæм фæрстæ иуæй-иу браузерты раст нæ зынынц. -Кæд ахæм вариант и, уæд ацы фарсæй цалдæр фарсы скæн.'''", -'templatesused' => 'Ацы фарсы ис {{PLURAL:$1|шаблон|шаблоны}}:', -'template-protected' => '(æхгæд)', -'template-semiprotected' => '(æрдæг-æхгæд)', -'edit-conflict' => 'Иввдзинæдты конфликт.', -'edit-already-exists' => 'Ног фарс скæнæн нæй. Ахæм фарс ис.', +'summary' => 'Ивдтыты мидис:', +'subject' => 'Темæ/сæргонд:', +'minoredit' => 'Ай чысыл ивд у.', +'watchthis' => 'Цæст дарын ацы фарсмæ', +'savearticle' => 'Фæивын', +'preview' => 'Разæркаст', +'showpreview' => 'Разбакаст равдисын', +'showlivepreview' => 'Тагъд разæркаст', +'showdiff' => 'Ивд æвдисын', +'summary-preview' => 'Ивд афыст уыдзæн:', +'blockedtitle' => 'Архайæг хъодыгонд æрцыд', +'blockednoreason' => 'аххос амынд не ’рцыд', +'whitelistedittitle' => 'Ацы текст ивынмæ хъуамæ дæхи бацамонай системæйæн', +'loginreqtitle' => 'Хъуамæ дæхи бацамонай', +'accmailtitle' => 'Пароль рарвыст у.', +'newarticle' => '(Ног)', +'noarticletext' => 'Ацы фарсы ныма текст нæй. +Дæ бон у [[Special:Search/{{PAGENAME}}|бацагурын ацы фарсы ном]] æндæр фæрсты, +[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} агурын хæстæг логты], +кæнæ [{{fullurl:{{FULLPAGENAME}}|action=edit}} ивын ацы фарс].', +'noarticletext-nopermission' => 'Ацы фарсы ныма текст нæй. +Дæ бон у [[Special:Search/{{PAGENAME}}|бацагурын ацы фарсы ном]] æндæр фæрсты +кæнæ [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} агурын хæстæг логты].', +'note' => "'''Бафиппай:'''", +'editing' => 'Ивыс: $1', +'editingsection' => 'Ивыс $1 (фарсы хай)', +'editconflict' => 'Ивыны конфликт: $1', +'yourtext' => 'Дæхи текст', +'yourdiff' => 'Хицæндзинæдтæ', +'templatesused' => 'Ацы фарсы ис {{PLURAL:$1|шаблон|шаблоны}}:', +'template-protected' => '(æхгæд)', +'template-semiprotected' => '(æрдæг-æхгæд)', +'permissionserrorstext-withaction' => 'Нæй дын бар $2 {{PLURAL:$1|ай|адон}} тыххæй:', +'edit-conflict' => 'Иввдзинæдты конфликт.', +'edit-already-exists' => 'Ног фарс скæнæн нæй. Ахæм фарс ис.', # History pages 'viewpagelogs' => 'Ацы фарсæн йæ логтæ равдис', 'nohistory' => 'Ацы фарсæн иввдзинæдты истори нæй.', -'currentrev' => 'Нырыккон верси', -'currentrev-asof' => 'Нырыккон верси $1', -'revisionasof' => 'Верси $1', -'revision-info' => 'Верси $1; $2', +'currentrev' => 'Нырыккон фæлтæр', +'currentrev-asof' => 'Нырыккон фæлтæр $1', +'revisionasof' => 'Фæлтæр $1', +'revision-info' => 'Фæлтæр $1; $2', 'previousrevision' => '← Раздæры', -'nextrevision' => 'Ногдæр верси →', -'currentrevisionlink' => 'Нырыккон верси', +'nextrevision' => 'Ногдæр фæлтæр →', +'currentrevisionlink' => 'Нырыккон фæлтæр', 'cur' => 'ныр.', 'next' => 'фæдылдзог', 'last' => 'раздæры', 'page_first' => 'фыццаг', 'page_last' => 'фæстаг', -'histlegend' => 'Куыд æй æмбарын: (нырыккон) = нырыккон версийæ хъауджыдæрдзинад, (раздæры) = раздæры версийæ хъауджыдæрдзинад, Ч = чысыл ивддзинад.', +'histlegend' => "Æвзарынæн: банысан кæн фæлтæрты радиобокстæ цæмæй цæ иртæсай æмæ стæй ныххæц enter кæнæ бынæй цы ныххæцæн ис, ууыл.
    +Легендæ: '''({{int:cur}})''' = иртæсæн фæстаг фæлтæримæ, '''({{int:last}})''' = иртæсæн разфæлтæримæ, '''{{int:minoreditletter}}''' = чысыл ивд.", 'history-fieldset-title' => 'Истори фен', +'history-show-deleted' => 'Æрмæстдæр хафтытæ', 'histfirst' => 'раздæр', 'histlast' => 'фæстæдæр', 'historysize' => '({{PLURAL:$1|1 байт|$1 байты}})', @@ -432,45 +449,68 @@ $messages = array( 'history-feed-item-nocomment' => '$1 $2', # Revision deletion -'rev-deleted-comment' => '(комментарий аппæрст у)', -'rev-deleted-user' => '(архайæджы ном аппæрст у)', -'rev-deleted-event' => '(фыст аппæрст у)', -'rev-delundel' => 'равдис/бамбæхс', -'revisiondelete' => 'Аппар / рацараз фарсы верситæ', -'pagehist' => 'Фарсы истори', -'revdelete-summary' => 'ивддзинады мидис', -'revdelete-uname' => 'архайæджы ном', +'rev-deleted-comment' => '(комментарий аппæрст у)', +'rev-deleted-user' => '(архайæджы ном аппæрст у)', +'rev-deleted-event' => '(фыст аппæрст у)', +'rev-delundel' => 'равдис/бамбæхс', +'revisiondelete' => 'Аппар / рацараз фарсы фæлтæртæ', +'revdel-restore-deleted' => 'хафт ивдтытæ', +'revdel-restore-visible' => 'зынгæ ивдтытæ', +'pagehist' => 'Фарсы истори', +'revdelete-summary' => 'ивддзинады мидис', +'revdelete-uname' => 'архайæджы ном', # History merging 'mergehistory-reason' => 'Аххос:', +# Merge log +'revertmerge' => 'Ахицæн кæнын', + # Diffs -'difference' => '(Дыууæ верситы ’хсæн хъауджы)', -'lineno' => 'Рæнхъ $1:', -'editundo' => 'нæ хъæуы', +'difference' => '(Дыууæ фæлтæры ’хсæн хъауджы)', +'lineno' => 'Рæнхъ $1:', +'compareselectedversions' => 'Æвзæрст фæлтæртæ абар', +'editundo' => 'раивын', # Search results -'searchresults' => 'Цы ссардæуы', -'searchresults-title' => 'Агуырды фæстиуæг: «$1»', -'titlematches' => 'Статьяты сæргæндты æмцаутæ', -'notitlematches' => 'Фæрсты сæргæндты нæй', -'textmatches' => 'Статьяты æмцаутæ', -'prevn' => '{{PLURAL:$1|$1}} фæстæмæ', -'nextn' => '{{PLURAL:$1|$1}} размæ', -'viewprevnext' => 'Фен ($1 {{int:pipe-separator}} $2) ($3)', -'search-result-size' => '$1 ({{PLURAL:$2|$2 дзырд|$2 дзырды}})', -'search-redirect' => '(рарвыст ардыгæй: $1)', -'search-section' => '(хай $1)', -'search-suggest' => 'Кæд мыййаг агурыс: $1', -'search-interwiki-caption' => 'Æфсымæрон проекттæ', -'search-interwiki-more' => '(фылдæр)', -'search-mwsuggest-enabled' => 'æмбарынгæнæнтимæ', -'search-mwsuggest-disabled' => 'æнæ æмбарынгæнæнтæ', -'searchall' => 'æппæт', -'powersearch' => 'Сæрмагонд агуырд', -'powersearch-legend' => 'Сæрмагонд агуырд', -'powersearch-redir' => 'Рарвыстытæ дæр æвдис', -'powersearch-field' => 'Агуырд', +'searchresults' => 'Цы ссардæуы', +'searchresults-title' => 'Агуырды фæстиуæг: «$1»', +'titlematches' => 'Статьяты сæргæндты æмцаутæ', +'notitlematches' => 'Фæрсты сæргæндты нæй', +'textmatches' => 'Статьяты æмцаутæ', +'prevn' => 'рæздæры {{PLURAL:$1|$1}}', +'nextn' => 'иннæ {{PLURAL:$1|$1}}', +'prevn-title' => 'Раздæр $1 {{PLURAL:$1|фæстиуæг|фæстиуæджы}}', +'nextn-title' => 'Дарддæр $1 {{PLURAL:$1|фæстиуæг|фæстиуæджы}}', +'shown-title' => 'Æвдисын $1 {{PLURAL:$1|фæстиуæг|фæстиуæджы}} иу фарсыл', +'viewprevnext' => 'Фен ($1 {{int:pipe-separator}} $2) ($3)', +'searchmenu-exists' => "'''Ацы викийы ис фарс \"[[:\$1]]\" номимæ.'''", +'searchmenu-new' => "'''Ивын фарс \"[[:\$1]]\" ацы викийы!'''", +'searchprofile-articles' => 'Сæргæндты фæрстæ', +'searchprofile-project' => 'Æххуыс æмæ Проекты фæрстæ', +'searchprofile-images' => 'Мультимеди', +'searchprofile-everything' => 'Алцыдæр', +'searchprofile-advanced' => 'Бæстондæр', +'searchprofile-articles-tooltip' => 'Агурын ам: $1', +'searchprofile-project-tooltip' => 'Агурын ам: $1', +'searchprofile-images-tooltip' => 'Агурын файлтæ', +'searchprofile-everything-tooltip' => 'Агурын алыран дæр (дискуссийы фæрсты дæр)', +'search-result-size' => '$1 ({{PLURAL:$2|$2 дзырд|$2 дзырды}})', +'search-result-category-size' => '{{PLURAL:$1|1 уæнг|$1 уæнгы}} ({{PLURAL:$2|1 дæлкатегори|$2 дæлкатегорийы}}, {{PLURAL:$3|1 файл|$3 файлы}})', +'search-redirect' => '(рарвыст ардыгæй: $1)', +'search-section' => '(хай $1)', +'search-suggest' => 'Кæд мыййаг агурыс: $1', +'search-interwiki-caption' => 'Æфсымæрон проекттæ', +'search-interwiki-more' => '(нодзы)', +'search-mwsuggest-enabled' => 'æмбарынгæнæнтимæ', +'search-mwsuggest-disabled' => 'æнæ æмбарынгæнæнтæ', +'searchrelated' => 'хæстæг', +'searchall' => 'æппæт', +'showingresultsheader' => "{{PLURAL:$5|Фæстиуæг '''$1''' '''$3'''-йæ|Фæстиуæджы '''$1 - $2''' '''$3'''-йæ}} '''$4'''-æн", +'powersearch' => 'Сæрмагонд агуырд', +'powersearch-legend' => 'Сæрмагонд агуырд', +'powersearch-redir' => 'Рарвыстытæ дæр æвдис', +'powersearch-field' => 'Агуырд', # Quickbar 'qbsettings' => 'Навигацион таг', @@ -480,7 +520,7 @@ $messages = array( 'qbsettings-floatingleft' => 'Рахизырдыгæй ленккæнгæ', # Preferences page -'mypreferences' => 'Æрмадз', +'mypreferences' => 'Мæ фадæттæ', 'prefsnologin' => 'Системæйæн дæхи нæ бацамыдтай', 'changepassword' => 'Пароль баив', 'skin-preview' => 'Разæркаст', @@ -558,52 +598,68 @@ $messages = array( 'action-delete' => 'ацы фарс аппарын', # Recent changes -'nchanges' => '$1 {{PLURAL:$1|ивдзинад|ивддзинады}}', -'recentchanges' => 'Фæстаг ивддзинæдтæ', -'recentchangestext' => 'Ацы фарсыл ирон Википедийы фæстаг ивддзинæдтæ фенæн ис.', -'rcnote' => 'Дæлдæр нымад сты афæстаг $2 боны дæргъы конд {{PLURAL:$1|иу ивддзинад|$1 ивддзинады}}, $5, $4 уавæрмæ гæсгæ.', -'rcshowhideminor' => '$1 чысыл ивддзинæдтæ', -'rcshowhidebots' => '$1 роботты куыст', -'rcshowhidemine' => '$1, дæхæдæг цы ивддзинæдтæ скодтай, уыдон', -'rclinks' => 'Фæстаг $1 ивддзинæдтæ (афæстаг $2 боны дæргъы чи ’рцыдысты) равдис; +'nchanges' => '$1 {{PLURAL:$1|ивд|ивды}}', +'recentchanges' => 'Фæстаг ивдтытæ', +'recentchanges-legend' => 'Фæстаг ивдтыты фадæттæ', +'recentchangestext' => 'Ацы фарсыл ирон Википедийы фæстаг ивддзинæдтæ фенæн ис.', +'recentchanges-label-newpage' => 'Ацы ивд нæуæг фарс бакодта', +'recentchanges-label-minor' => 'Ай у чысыл ивд', +'recentchanges-label-bot' => 'Ацы ивд бот сарызта', +'recentchanges-label-unpatrolled' => 'Ацы ивд нырмæ нæу фидар гонд', +'rcnote' => 'Дæлдæр нымад сты афæстаг $2 боны дæргъы конд {{PLURAL:$1|иу ивд|$1 ивды}}, $5, $4 уавæрмæ гæсгæ.', +'rcnotefrom' => "Бындæр сты ивдтытæ '''$2'''-æй ('''$1'''-ы йонг æвдыст)", +'rclistfrom' => 'Равдисын ивдтытæ амæй фæстæ: $1', +'rcshowhideminor' => '$1 чысыл ивдтытæ', +'rcshowhidebots' => '$1 роботты куыст', +'rcshowhideliu' => '$1 ырбахизгæ архайæджы', +'rcshowhideanons' => '$1 сусæг архайæджы', +'rcshowhidemine' => '$1 мæ ивдтытæ', +'rclinks' => 'Фæстаг $1 ивдтытæ (афæстаг $2 боны дæргъы чи ’рцыдысты) равдис; $3', -'diff' => 'хицæн.', -'hist' => 'лог', -'hide' => 'бамбæхс', -'show' => 'Равдис', -'minoreditletter' => 'ч', -'newpageletter' => 'Н', -'boteditletter' => 'б', -'rc-enhanced-expand' => 'Лыстæгдзинæдтæ равдис (JavaScript хъæуы)', -'rc-enhanced-hide' => 'Лыстæгдзинæдтæ бамбæхс', +'diff' => 'хицæн.', +'hist' => 'лог', +'hide' => 'Бамбæхсын', +'show' => 'Равдисын', +'minoreditletter' => 'ч', +'newpageletter' => 'Н', +'boteditletter' => 'б', +'rc-enhanced-expand' => 'Лыстæгдзинæдтæ равдис (JavaScript хъæуы)', +'rc-enhanced-hide' => 'Лыстæгдзинæдтæ бамбæхс', # Recent changes linked -'recentchangeslinked' => 'Баст ивддзинæдтæ', +'recentchangeslinked' => 'Баст ивдтытæ', 'recentchangeslinked-feed' => 'Баст ивддзинæдтæ', 'recentchangeslinked-toolbox' => 'Баст ивддзинæдтæ', +'recentchangeslinked-title' => '"$1"-имæ баст ивдтытæ', 'recentchangeslinked-page' => 'Фарсы ном:', # Upload -'upload' => 'Ног файл сæвæр', -'uploadbtn' => 'Ног файл сæвæр', -'uploadnologin' => 'Системæйæн дæхи нæ бацамыдтай', -'uploaderror' => 'Файл сæвæрыны рæдыд', -'filename' => 'Файлы ном', -'minlength1' => 'Файлы номы хъуамæ æппынкъаддæр иу дамгъæ уа.', -'badfilename' => 'Нывы ном ивд æрцыдис. Ныр хуины «$1».', -'successfulupload' => 'Файлы сæвæрд фæрæстмæ', -'savefile' => 'Бавæр æй', -'uploadvirus' => 'Файлы разынд вирус! Кæс $1', -'watchthisupload' => 'Ацы файлмæ дæ цæст æрдар', +'upload' => 'Ног файл сæвæр', +'uploadbtn' => 'Ног файл сæвæр', +'uploadnologin' => 'Системæйæн дæхи нæ бацамыдтай', +'uploaderror' => 'Файл сæвæрыны рæдыд', +'uploadlogpage' => 'Æвгæндты лог', +'filename' => 'Файлы ном', +'filedesc' => 'Ивдтыты фсон:', +'minlength1' => 'Файлы номы хъуамæ æппынкъаддæр иу дамгъæ уа.', +'badfilename' => 'Нывы ном ивд æрцыдис. Ныр хуины «$1».', +'savefile' => 'Бавæр æй', +'uploadedimage' => 'бавгæндис "[[$1]]"', +'uploadvirus' => 'Файлы разынд вирус! Кæс $1', +'watchthisupload' => 'Цæст дарын ацы файлмæ', +'upload-success-subj' => 'Файлы сæвæрд фæрæстмæ', 'upload-file-error' => 'Мидæг рæдыд', +'license' => 'Лицензи:', + # Special:ListFiles 'listfiles' => 'Нывты номхыгъд', # File description page 'file-anchor-link' => 'Ныв', 'filehist' => 'Файлы истори', +'filehist-revert' => 'раивын', 'filehist-current' => 'нырыккон', 'filehist-datetime' => 'Датæ/рæстæг', 'filehist-user' => 'Архайæг', @@ -611,6 +667,7 @@ $3', 'filehist-comment' => 'Фиппаинаг', 'imagelinks' => 'Æрвитæнтæ файлмæ', 'linkstoimage' => 'Ацы нывæй пайда {{PLURAL:$1|кæны иу фарс|кæнынц ахæм фæрстæ}}:', +'nolinkstoimage' => 'Нæй ахæм фæрстæ, кæдон æрвитынц ацы файлмæ.', # File deletion 'filedelete-submit' => 'Аппар', @@ -630,7 +687,7 @@ $3', 'statistics' => 'Статистикæ', 'statistics-header-users' => 'Архайджыты статистикæ', -'brokenredirects-edit' => 'баив æй', +'brokenredirects-edit' => 'ивын', 'brokenredirects-delete' => 'аппар', 'withoutinterwiki-submit' => 'Равдис', @@ -640,6 +697,7 @@ $3', # Miscellaneous special pages 'nbytes' => '$1 {{PLURAL:$1|байт|байты}}', 'nlinks' => '$1 {{PLURAL:$1|æрвитæн|æрвитæны}}', +'nmembers' => '$1 {{PLURAL:$1|уæнг|уæнгы}}', 'nviews' => '$1 {{PLURAL:$1|æркаст|æркасты}}', 'lonelypages' => 'Сидзæр фæрстæ', 'uncategorizedpages' => 'Æнæкатегори фæрстæ', @@ -655,10 +713,11 @@ $3', 'longpages' => 'Даргъ фæрстæ', 'protectedpages' => 'Æхгæд фæрстæ', 'listusers' => 'Архайджыты номхыгъд', +'usercreated' => 'Фæзындис $1, $2-ыл', 'newpages' => 'Ног фæрстæ', 'newpages-username' => 'Архайæг:', 'ancientpages' => 'Зæронддæр фæрстæ', -'move' => 'Ном баив', +'move' => 'Сæргонд баив', 'pager-newer-n' => '{{PLURAL:$1|фæстæдæр иу|фæстæдæр $1}}', 'pager-older-n' => '{{PLURAL:$1|раздæр иу|раздæр $1}}', @@ -690,8 +749,9 @@ Also see [[Special:WantedCategories|wanted categories]].', 'special-categories-sort-abc' => 'алфавитмæ гæсгæ равæр', # Special:LinkSearch -'linksearch' => 'Æддаг æрвитæнтæ', -'linksearch-ok' => 'Агур', +'linksearch' => 'Æддаг æрвитæнтæ', +'linksearch-ok' => 'Агур', +'linksearch-line' => '$2 æрвиты $1-мæ', # Special:ListUsers 'listusers-submit' => 'Равдис', @@ -710,41 +770,50 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'Цæстдарды номхыгъд', -'mywatchlist' => 'Дæ цæст кæмæ дарыс, уыцы фæрстæ', +'mywatchlist' => 'Мæ цæстдард фæрстæ', +'watchlistfor2' => 'Архайæг: $1 $2', 'nowatchlist' => 'Иу статьямæ дæр дæ цæст нæ дарыс.', 'watchnologin' => 'Системæйæн дæхи нæ бацамыдтай', 'watchnologintext' => 'Ацы номхыгъд ивынмæ [[Special:UserLogin|хъуамæ дæхи бацамонай системæйæн]].', 'addedwatch' => 'Дæ цæст кæмæ дарыс, уыцы статьятæм бафтыд.', 'removedwatch' => 'Нал дарыс дæ цæст', 'removedwatchtext' => 'Фарсмæ «[[:$1]]» нал [[Special:Watchlist|дарыс дæ цæст]].', -'watch' => 'Дæ цæст æрдар', -'watchthispage' => 'Ацы фарсмæ дæ цæст æрдар', -'unwatch' => 'Мауал дæ цæст дар', +'watch' => 'Цæст æрдар', +'watchthispage' => 'Цæст дарын ацы фарсмæ', +'unwatch' => 'Мауал дар цæст', 'watchnochange' => 'Дæ цæст кæмæ дарыс, уыцы статьятæй иу дæр ивд не ’рцыди.', -'watchlist-details' => '$1 фарсмæ дæ цæст дарыс, дискусситы фæстæмæ.', +'watchlist-details' => '{{PLURAL:$1|$1 фарсмæ|$1 фарсмæ}} дæ цæст дарыс, дискусситы нæ нымайгæйæ.', 'watchlistcontains' => 'Дæ цæст $1 фарсмæ дарыс.', 'wlnote' => "Дæлæ афæстаг '''$2 сахаты дæргъы''' цы $1 {{PLURAL:$1|ивддзинад|ивддзинады}} æрцыди.", 'wlshowlast' => 'Фæстæг $1 сахаты, $2 боны дæргъы; $3.', +'watchlist-options' => 'Цæстдард рæгъы фадæттæ', # Displayed when you click the "watch" button and it is in the process of watching 'watching' => 'Цæстдард фæрсты номхыгъдмæ афтауын...', 'unwatching' => 'Цæстдард фæрсты номхыгъдæй аиуварс кæнын...', -'changed' => 'ивд æрцыд', +'enotif_newpagetext' => 'Ай у нæуæг фарс.', +'changed' => 'ивд æрцыд', +'enotif_anon_editor' => 'сусæг архайæг $1', # Delete -'deletepage' => 'Фарс аппар', +'deletepage' => 'Схаф фарс', 'exblank' => 'фарс афтид уыдис', +'delete-confirm' => 'Схаф "$1"', +'deletedarticle' => 'схафта "[[$1]]"', 'dellogpage' => 'Аппарыны лог', 'deletionlog' => 'аппарыны лог', 'deletecomment' => 'Аххос:', 'deleteotherreason' => 'Æндæр кæнæ уæлæмхасæн аххос:', 'deletereasonotherlist' => 'Æндæр аххос', +# Rollback +'rollbacklink' => 'æздæхын', + # Protect 'protectedarticle' => '«[[$1]]» — фарс æхгæд æрцыд', 'prot_1movedto2' => '[[$1]] хаст æрцыд [[$2]], зæгъгæ, ахæм фарсмæ', -'protectcomment' => 'Аххос:', +'protectcomment' => 'Фсон:', 'protectexpiry' => 'Кæдмæ æхгæд у:', 'protect-level-sysop' => 'Æрмæст админтæ', 'protect-othertime' => 'Æндæр рæстæг:', @@ -757,31 +826,47 @@ Also see [[Special:WantedCategories|wanted categories]].', 'restriction-edit' => 'Ивын', # Undelete -'undeletelink' => 'фен/рацараз', +'undeletelink' => 'кæсын/рацаразын', +'undeleteviewlink' => 'кæсын', # Namespace form on various pages 'namespace' => 'Нæмтты тыгъдад:', 'blanknamespace' => '(Сæйраг)', # Contributions -'contributions' => 'Йæ бавæрд', +'contributions' => 'Архайæджы бавæрд', 'contributions-title' => 'Архайæджы бавæрд: $1', -'mycontris' => 'Дæ бавæрд', -'uctop' => '(уæле баззад)', +'mycontris' => 'Мæ бавæрд', +'contribsub2' => 'Архайæг: $1 ($2)', +'uctop' => '(фæстаг)', +'month' => 'Ацы мæй (æмæ раздæр):', +'year' => 'Ацы аз (æмæ раздæр):', +'sp-contributions-newbies' => 'Æвдисын æрмæст нæуæг архайджыты бавæрд', 'sp-contributions-blocklog' => 'Хъодыты лог', +'sp-contributions-uploads' => 'бавгæндтытæ', +'sp-contributions-logs' => 'логтæ', 'sp-contributions-talk' => 'Дискусси', +'sp-contributions-search' => 'Ивдтытæ агурын', +'sp-contributions-username' => 'IP адрис кæнæ архайæджы ном:', +'sp-contributions-submit' => 'Агурын', # What links here 'whatlinkshere' => 'Цавæр æрвитæнтæ цæуынц ардæм', 'whatlinkshere-title' => '«$1»: цавæр фæрстæ æрвитынц ардæм', 'whatlinkshere-page' => 'Фарс:', +'linkshere' => "Ацы фæрстæ æрвитынц '''[[:$1]]-мæ''':", +'nolinkshere' => "Никæцы фарс æрвиты ардæм: '''[[:$1]]'''.", 'isredirect' => 'рарвысты фарс', +'istemplate' => 'æфтыдæй', 'isimage' => 'фарсы мидæг ныв', -'whatlinkshere-next' => '{{PLURAL:$1|фæдылдзог|фæдылдзог $1}}', +'whatlinkshere-prev' => '{{PLURAL:$1|раздæры|раздæры $1}}', +'whatlinkshere-next' => '{{PLURAL:$1|иннæ|иннæ $1}}', 'whatlinkshere-links' => '← æрвитæнтæ', 'whatlinkshere-hideredirs' => '$1 рарвыстытæ', +'whatlinkshere-hidetrans' => '$1 æфтыдтытæ', 'whatlinkshere-hidelinks' => '$1 æрвитæнтæ', +'whatlinkshere-hideimages' => '$1 нывмæ æрвитæнтæ', 'whatlinkshere-filters' => 'Фильтртæ', # Block/unblock @@ -789,6 +874,7 @@ Also see [[Special:WantedCategories|wanted categories]].', 'blockip-legend' => 'Бахъоды æй кæн', 'ipbreason' => 'Аххос:', 'ipbreasonotherlist' => 'Æндæр аххос', +'ipboptions' => '2 сахаты:2 hours,1 бон:1 day,3 боны:3 days,1 къуыри:1 week,2 къуырийы:2 weeks,1 мæй:1 month,3 мæййы:3 months,6 мæййы:6 months,1 аз:1 year,нæбæрæг:infinite', 'ipbotherreason' => 'Æндæр кæнæ уæлæмхасæн аххос:', 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] хъодыгонд æрцыд.
    Кæс [[Special:Ipblocklist|хъодыгонд IP-адристы номхыгъд]].', @@ -815,16 +901,20 @@ Also see [[Special:WantedCategories|wanted categories]].', 'movenologin' => 'Системæйæн дæхи нæ бацамыдтай', 'newtitle' => 'Ног ном', 'move-watch' => 'Ацы фарсмæ дæ цæст æрдар', -'movepagebtn' => 'Фарсы ном баив', +'movepagebtn' => 'Фарсы ном ивын', 'move-redirect-suppressed' => 'рарвысты фарс нæ бахъуыд', -'movereason' => 'Аххос:', +'movereason' => 'Фсон:', +'revertmove' => 'раивын', + +# Export +'export' => 'Фæрсты экспорт', # Namespace 8 related 'allmessages' => 'Æппæт техникон фыстытæ', 'allmessagesname' => 'Ном', # Thumbnails -'thumbnail-more' => 'Фестырдæр кæн', +'thumbnail-more' => 'Фестырдæр кæнын', # Special:Import 'importnotext' => 'Афтид у кæнæ текст дзы нæй', @@ -832,47 +922,55 @@ Also see [[Special:WantedCategories|wanted categories]].', # Tooltip help for the actions 'tooltip-pt-userpage' => 'Мæхи фарс (дæу тыххæй ам ныффысс)', -'tooltip-pt-mytalk' => 'Æндæр ахрхайджытæ мын цы дзурынц', -'tooltip-pt-preferences' => 'Википеди куыд кусы, уый срæвдз кæн дæ хъæуындзинæдтæм гæсгæ', -'tooltip-pt-watchlist' => 'Дæ цæст кæмæ дарыс, уыцы фæрсты номхыгъд', -'tooltip-pt-mycontris' => 'Цы у мæ бавæрд', +'tooltip-pt-mytalk' => 'Дæ дискусси', +'tooltip-pt-preferences' => 'Дæ фадæттæ', +'tooltip-pt-watchlist' => 'Фæрстæ кæй ивдтытæм ды дарыс дæ цæст', +'tooltip-pt-mycontris' => 'Дæ бавæрд', 'tooltip-pt-login' => 'Системæмæ дæхи бацамонай, кæд æцæг дæ хæс нæу, уæддæр', -'tooltip-pt-logout' => 'Регистрацигонд сеансæй рацу', -'tooltip-ca-talk' => 'Фарсыл цы фыст у, уый тыххæй дискусси', +'tooltip-pt-logout' => 'Рахизын', +'tooltip-ca-talk' => 'Фарсы тыххæй дискусси', 'tooltip-ca-edit' => 'Ацы фарс дæ бон у ивын. Дæ хорзæхæй, «Фен уал æй» джыбыйæ пайда кæн', +'tooltip-ca-addsection' => 'Нæуæг хай сараз', 'tooltip-ca-viewsource' => 'Ацы фарс ивынæй æхгæд у, фæлæ йæ код фенæн и', -'tooltip-ca-history' => 'Ацы фарсæн йæ раздæры верситæ (ивыны лог)', +'tooltip-ca-history' => 'Ацы фарсæн йæ раздæры фæлтæртæ (ивыны лог)', 'tooltip-ca-protect' => 'Ацы фарс ивддзинæдтæй сæхгæн', -'tooltip-ca-delete' => 'Аппар ацы фарс', -'tooltip-ca-move' => 'Ацы статьяйы ном баив', +'tooltip-ca-delete' => 'Аппарын ацы фарс', +'tooltip-ca-move' => 'Статьяйы ном ивын', 'tooltip-ca-watch' => 'Дæ цæст кæмæ дарыс, уыцы фæрсты номхыгъдмæ бафтау', -'tooltip-search' => 'Ацы дзырд агур', +'tooltip-ca-unwatch' => 'Айс ацы фарс дæ цæстдард рæгъæй', +'tooltip-search' => '{{SITENAME}} агурын', 'tooltip-search-go' => 'Кæд ахæм ном исты статьямæ и, уыцы статья равдис', -'tooltip-search-fulltext' => 'Ацы текст цы фæрсты и, уыдон бацагур', -'tooltip-n-mainpage' => 'Сæйраг фарсмæ рацу', -'tooltip-n-mainpage-description' => 'Сæйраг фарсмæ', -'tooltip-n-portal' => 'Проекты тыххæй æмæ, дæу цы бон у, уый тыххæй дæр', +'tooltip-search-fulltext' => 'Ацы текст цы фæрсты ис, уыдон агурын', +'tooltip-p-logo' => 'Сæйраг фарсмæ бацæуын', +'tooltip-n-mainpage' => 'Сæйраг фарсмæ ацæуын', +'tooltip-n-mainpage-description' => 'Сæйраг фарсмæ ацæуын', +'tooltip-n-portal' => 'Проект, дæ бон цы у æмæ кæм цы хъæуы агурыны тыххæй', 'tooltip-n-currentevents' => 'Ныры цаутæ', -'tooltip-n-recentchanges' => 'Чи æмæ цавæр статьяты баивта', +'tooltip-n-recentchanges' => 'Фæстаг ивдтыты рæгъ', 'tooltip-n-randompage' => 'Æнæбары æвзæрст фарс фен', -'tooltip-n-help' => 'Кæд цыдæртæ нæ бамбæрстай', +'tooltip-n-help' => 'Базонынæн бынат', 'tooltip-t-whatlinkshere' => 'Ацы фарсмæ чи ’рвитынц, ахæм фæрсты номхыгъд', -'tooltip-t-recentchangeslinked' => 'Ацы фарс кæмæ æрвиты, уыцы фæрсты фæстаг ивддзинæдтæ', +'tooltip-t-recentchangeslinked' => 'Ацы фарс кæмæ æрвиты, уыцы фæрсты фæстаг ивдтытæ', +'tooltip-feed-atom' => 'Atom feed ацы фарсæн', 'tooltip-t-contributions' => 'Ацы архайæг цы фæрстæ ивта, уый номхыгъд фен', +'tooltip-t-emailuser' => 'Арвитын фыстæг ацы архайæгмæ', 'tooltip-t-upload' => 'Нывтæ кæнæ мультимедиа-файлтæ бавæр', 'tooltip-t-specialpages' => 'Сæрмагонд фæрсты номхыгъд', 'tooltip-t-print' => 'Ацы фарс мыхуырмæ цæттæ форматы', -'tooltip-t-permalink' => 'Фарсы ацы версимæ æрвитæн (фæрстæ ивынц, ацы верси — никуы)', +'tooltip-t-permalink' => 'Фарсы ацы фæлтæрмæ æрвитæн (фæрстæ ивынц, ацы фæлтæр — нæ)', 'tooltip-ca-nstab-main' => 'Фен статья', 'tooltip-ca-nstab-user' => 'Архайæджы фарс фен', -'tooltip-ca-nstab-special' => 'Ай сæрмагонд фарс у, дæ бон нæу уымæ ивддзинæдтæ хæссын', +'tooltip-ca-nstab-special' => 'Ай сæрмагонд фарс у, дæ бон æй нæу ивын', 'tooltip-ca-nstab-project' => 'Проекты фарс', 'tooltip-ca-nstab-image' => 'Нывы фарс', 'tooltip-ca-nstab-category' => 'Категорийы фарс', -'tooltip-minoredit' => 'Чысыл ивддзинад у', -'tooltip-save' => 'Цы ивддзинæдтæ бахастай, уыдон бавæр', -'tooltip-diff' => 'Раздæры версимæ абаргæйæ цы ивддзинæдтæ хæссыс текстмæ, уый фен', +'tooltip-minoredit' => 'Чысыл ивдæй йæ банысан кæн', +'tooltip-save' => 'Бавæр дæ ивдтытæ', +'tooltip-preview' => 'Бакæс уал дæ ивдмæ. Дæ хорзæхæй ай уал сараз бавæрыны размæ!', +'tooltip-diff' => 'Æвдисы цы ивд бахастай текстмæ', 'tooltip-watch' => 'Ацы фарс, дæ цæст кæмæ дарыс, уыцы фæрсты номхыгъдмæ бафтау', +'tooltip-rollback' => '"Æздæхын" æздæхы ацы фарсы фæстаг архайæджы ивд(тытæ) иу хæстмæ', +'tooltip-undo' => '"Раивын" æздæхы ацы ивд æмæ æвдисы ивæн фарс разбакаст уавæры. Уый дын дæ бавæрдæн фсон скæныны фадат дæтты.', # Attribution 'others' => 'æндæртæ', @@ -892,12 +990,18 @@ Also see [[Special:WantedCategories|wanted categories]].', 'math_unknown_function' => 'нæзонгæ функци', 'math_syntax_error' => 'синтаксисы рæдыд', +# Patrol log +'patrol-log-auto' => '(автоматон)', +'patrol-log-diff' => 'ивд $1', + # Browsing diffs -'previousdiff' => '← Раздæры ивддзинад', -'nextdiff' => 'Фæстæдæр ивддзинад →', +'previousdiff' => '← Раздæры ивд', +'nextdiff' => 'Фæстæдæр ивд →', # Media information 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|фарс|фарсы}}', +'file-info-size' => '$1 × $2 пикселы, файлы уæз: $3, MIME тип: $4', +'show-big-image' => 'Æнæхъæнæй', # Special:NewFiles 'newimages' => 'Ног нывты галерей', @@ -905,6 +1009,13 @@ Also see [[Special:WantedCategories|wanted categories]].', 'ilsubmit' => 'Агур', 'bydate' => 'рæстæгмæ гæсгæ', +# Bad image list +'bad_image_list' => 'Формат у ахæм: + +Æрмæстдæр рæгъон рæнхъытæ (рæнхъытæ, кæдон байдауынц * символæй) нымады кæнынц. +Фыццаг æрвитæн рæнхъы хъуамæ æрвита æвзæр файлмæ. +Иннæ æрвитæнтæ уыцы рæнхъы нымады кæнынц куыд уæлвæткытæ, кæдон сты фæрстæ кæдæм ис бар бавæрын файл.', + # Metadata 'metadata' => 'Метабæрæггæнæнтæ', 'metadata-expand' => 'Фылдæр детальтæ равдис', @@ -957,12 +1068,13 @@ Also see [[Special:WantedCategories|wanted categories]].', 'watchlistedit-raw-submit' => 'Номхыгъд бафснай', # Watchlist editing tools -'watchlisttools-view' => 'Баст ивддзинæдтæ фен', -'watchlisttools-edit' => 'Номхыгъд фен/баив', +'watchlisttools-view' => 'Баст ивдтытæ фен', +'watchlisttools-edit' => 'Бакæсын æмæ ивын цæстдард рæгъ', +'watchlisttools-raw' => 'Ивын цæстдард рæгъы бындуртекст', # Special:Version 'version' => 'MediaWiki-йы верси', -'version-version' => '(Верси $1)', +'version-version' => '(Фæлтæр $1)', 'version-software-version' => 'Верси', # Special:SpecialPages diff --git a/languages/messages/MessagesPa.php b/languages/messages/MessagesPa.php index bf8afdd2..9e58c2fc 100644 --- a/languages/messages/MessagesPa.php +++ b/languages/messages/MessagesPa.php @@ -54,8 +54,7 @@ $messages = array( 'tog-numberheadings' => 'ਆਟੋ-ਨੰਬਰ ਹੈਡਿੰਗ', 'tog-showtoolbar' => 'ਐਡਿਟ ਟੂਲਬਾਰ ਵੇਖੋ (JavaScript)', 'tog-showtoc' => 'ਟੇਬਲ ਆਫ਼ ਕੰਨਟੈੱਟ ਵੇਖਾਓ (for pages with more than 3 headings)', -'tog-rememberpassword' => 'ਇਹ ਕੰਪਿਊਟਰ ਲਈ ਮੇਰਾ ਲਾਗਇਨ ਯਾਦ ਰੱਖੋ', -'tog-editwidth' => 'ਐਡਿਟ ਬਾਕਸ ਨਾਲ ਪੂਰੇ ਸਕਰੀਨ ਨੂੰ ਭਰਨ ਲਈ ਇਸ ਦੀ ਚੌੜਾਈ ਵਧਾਓ', +'tog-rememberpassword' => 'ਇਸ ਬਰਾਊਜ਼ਰ ਉੱਤੇ ਮੇਰਾ ਲਾਗਇਨ ਯਾਦ ਰੱਖੋ ($1 {{PLURAL:$1|ਦਿਨ|ਦਿਨਾਂ}} ਲਈ ਵੱਧ ਤੋਂ ਵੱਧ)', 'tog-watchcreations' => 'ਮੇਰੇ ਵਲੋਂ ਬਣਾਏ ਗਏ ਨਵੇਂ ਸਫ਼ੇ ਮੇਰੀ ਵਾਚ-ਲਿਸਟ ਵਿੱਚ ਪਾਓ', 'tog-watchdefault' => 'ਜੋ ਸਫ਼ੇ ਮੈਂ ਸੋਧਦਾ ਹਾਂ, ਓਹ ਪੇਜ ਮੇਰੀ ਵਾਚ-ਲਿਸਟ ਵਿੱਚ ਪਾਓ', 'tog-watchmoves' => 'ਮੇਰੇ ਵਲੋਂ ਭੇਜੇ ਕਿਤੇ ਸਫ਼ੇ ਨੂੰ ਮੇਰੀ ਵਾਚ-ਲਿਸਟ ਵਿੱਚ ਪਾਓ', @@ -156,29 +155,18 @@ $messages = array( 'faqpage' => 'Project:ਸਵਾਲ-ਜਵਾਬ', # Vector skin -'vector-action-delete' => 'ਹਟਾਓ', -'vector-action-move' => 'ਭੇਜੋ', -'vector-action-protect' => 'ਸੁਰੱਖਿਅਤ', -'vector-action-undelete' => 'ਹਟਾਉਣਾ ਵਾਪਸ', -'vector-action-unprotect' => 'ਅਣ-ਸੁਰੱਖਿਅਤ', -'vector-namespace-category' => 'ਕੈਟਾਗਰੀ', -'vector-namespace-help' => 'ਮੱਦਦ ਸਫ਼ਾ', -'vector-namespace-image' => 'ਫਾਇਲ', -'vector-namespace-main' => 'ਸਫ਼ਾ', -'vector-namespace-media' => 'ਮੀਡਿਆ ਸਫ਼ਾ', -'vector-namespace-mediawiki' => 'ਸੁਨੇਹਾ', -'vector-namespace-project' => 'ਸੁਰੱਖਿਅਤ ਸਫ਼ਾ', -'vector-namespace-special' => 'ਖਾਸ ਸਫ਼ਾ', -'vector-namespace-talk' => 'ਚਰਚਾ', -'vector-namespace-template' => 'ਟੈਪਲੇਟ', -'vector-namespace-user' => 'ਯੂਜ਼ਰ ਸਫ਼ਾ', -'vector-view-create' => 'ਬਣਾਓ', -'vector-view-edit' => 'ਸੋਧ', -'vector-view-history' => 'ਅਤੀਤ ਵੇਖੋ', -'vector-view-view' => 'ਪੜ੍ਹੋ', -'vector-view-viewsource' => 'ਸਰੋਤ ਵੇਖੋ', -'actions' => 'ਕਾਰਵਾਈ', -'namespaces' => 'ਨਾਂ-ਥਾਂ:', +'vector-action-delete' => 'ਹਟਾਓ', +'vector-action-move' => 'ਭੇਜੋ', +'vector-action-protect' => 'ਸੁਰੱਖਿਅਤ', +'vector-action-undelete' => 'ਹਟਾਉਣਾ ਵਾਪਸ', +'vector-action-unprotect' => 'ਅਣ-ਸੁਰੱਖਿਅਤ', +'vector-view-create' => 'ਬਣਾਓ', +'vector-view-edit' => 'ਸੋਧ', +'vector-view-history' => 'ਅਤੀਤ ਵੇਖੋ', +'vector-view-view' => 'ਪੜ੍ਹੋ', +'vector-view-viewsource' => 'ਸਰੋਤ ਵੇਖੋ', +'actions' => 'ਕਾਰਵਾਈ', +'namespaces' => 'ਨਾਂ-ਥਾਂ:', 'errorpagetitle' => 'ਗਲਤੀ', 'returnto' => '$1 ਤੇ ਵਾਪਸ ਜਾਓ', @@ -320,7 +308,7 @@ Note that some pages may continue to be displayed as if you were still logged in 'yourname' => 'ਯੂਜ਼ਰ ਨਾਂ:', 'yourpassword' => 'ਪਾਸਵਰਡ:', 'yourpasswordagain' => 'ਪਾਸਵਰਡ ਮੁੜ-ਲਿਖੋ:', -'remembermypassword' => 'ਇਹ ਕੰਪਿਊਟਰ ਲਈ ਆਪਣਾ ਲਾਗਇਨ ਯਾਦ ਰੱਖੋ', +'remembermypassword' => 'ਇਸ ਕੰਪਿਊਟਰ ਉੱਤੇ ਮੇਰਾ ਲਾਗਇਨ ਯਾਦ ਰੱਖੋ ($1 {{PLURAL:$1|ਦਿਨ|ਦਿਨਾਂ}} ਲਈ ਵੱਧ ਤੋਂ ਵੱਧ)', 'yourdomainname' => 'ਤੁਹਾਡੀ ਡੋਮੇਨ:', 'login' => 'ਲਾਗ ਇਨ', 'nav-login-createaccount' => 'ਲਾਗ ਇਨ / ਅਕਾਊਂਟ ਬਣਾਓ', @@ -336,6 +324,7 @@ Note that some pages may continue to be displayed as if you were still logged in 'gotaccount' => "ਪਹਿਲਾਂ ਹੀ ਇੱਕ ਅਕਾਊਂਟ ਹੈ? '''$1'''.", 'gotaccountlink' => 'ਲਾਗਇਨ', 'createaccountmail' => 'ਈਮੇਲ ਨਾਲ', +'createaccountreason' => 'ਕਾਰਨ:', 'badretype' => 'ਤੁਹਾਡੇ ਵਲੋਂ ਦਿੱਤੇ ਪਾਸਵਰਡ ਮਿਲਦੇ ਨਹੀਂ ਹਨ।', 'userexists' => 'ਯੂਜ਼ਰ ਨਾਂ ਪਹਿਲਾਂ ਹੀ ਵਰਤੋਂ ਅਧੀਨ ਹੈ। ਵੱਖਰਾ ਯੂਜ਼ਰ ਨਾਂ ਵਰਤੋਂ ਜੀ।', @@ -614,23 +603,22 @@ $1 ਘੰਟੇ ਵਿੱਚ। ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ, $ 'rightsnone' => '(ਕੋਈ ਨਹੀਂ)', # Recent changes -'recentchanges' => 'ਤਾਜ਼ਾ ਬਦਲਾਅ', -'recentchanges-legend-newpage' => '$1 - ਨਵਾਂ ਸਫ਼ਾ', -'rcshowhideminor' => '$1 ਛੋਟੀਆਂ ਸੋਧਾਂ', -'rcshowhidebots' => '$1 ਬੋਟ', -'rcshowhideliu' => '$1 ਲਾਗਇਨ ਹੋਏ ਯੂਜ਼ਰ', -'rcshowhideanons' => '$1 ਅਗਿਆਤ ਯੂਜ਼ਰ', -'rcshowhidemine' => '$1 ਮੇਰਾ ਐਡਿਟ', -'diff' => 'ਅੰਤਰ', -'hist' => 'ਅਤੀਤ', -'hide' => 'ਓਹਲੇ', -'show' => 'ਵੇਖੋ', -'minoreditletter' => 'ਛ', -'newpageletter' => 'ਨ', -'boteditletter' => 'ਬ', -'rc_categories_any' => 'ਕੋਈ ਵੀ', -'rc-enhanced-expand' => 'ਵੇਰਵਾ ਵੇਖੋ (ਜਾਵਾਸਕ੍ਰਿਪਟ ਲੋੜੀਦੀ ਹੈ)', -'rc-enhanced-hide' => 'ਵੇਰਵਾ ਓਹਲੇ', +'recentchanges' => 'ਤਾਜ਼ਾ ਬਦਲਾਅ', +'rcshowhideminor' => '$1 ਛੋਟੀਆਂ ਸੋਧਾਂ', +'rcshowhidebots' => '$1 ਬੋਟ', +'rcshowhideliu' => '$1 ਲਾਗਇਨ ਹੋਏ ਯੂਜ਼ਰ', +'rcshowhideanons' => '$1 ਅਗਿਆਤ ਯੂਜ਼ਰ', +'rcshowhidemine' => '$1 ਮੇਰਾ ਐਡਿਟ', +'diff' => 'ਅੰਤਰ', +'hist' => 'ਅਤੀਤ', +'hide' => 'ਓਹਲੇ', +'show' => 'ਵੇਖੋ', +'minoreditletter' => 'ਛ', +'newpageletter' => 'ਨ', +'boteditletter' => 'ਬ', +'rc_categories_any' => 'ਕੋਈ ਵੀ', +'rc-enhanced-expand' => 'ਵੇਰਵਾ ਵੇਖੋ (ਜਾਵਾਸਕ੍ਰਿਪਟ ਲੋੜੀਦੀ ਹੈ)', +'rc-enhanced-hide' => 'ਵੇਰਵਾ ਓਹਲੇ', # Recent changes linked 'recentchangeslinked' => 'ਸਬੰਧਿਤ ਬਦਲਾਅ', @@ -663,7 +651,6 @@ to upload files.', * ਅੱਪਲੋਡ ਕੀਤੀ ਫਾਇਲ ਦਾ ਨਾਂ: '''[[:$1]]''' * ਮੌਜੂਦ ਫਾਇਲ ਦਾ ਨਾਂ: '''[[:$2]]''' ਇੱਕ ਵੱਖਰਾ ਨਾਂ ਚੁਣੋ ਜੀ", -'successfulupload' => 'ਠੀਕ ਤਰ੍ਹਾਂ ਅੱਪਲੋਡ', 'uploadwarning' => 'ਅੱਪਲੋਡ ਚੇਤਾਵਨੀ', 'savefile' => 'ਫਾਇਲ ਸੰਭਾਲੋ', 'uploadedimage' => '"[[$1]]" ਅੱਪਲੋਡ', @@ -671,6 +658,8 @@ to upload files.', 'uploadvirus' => 'ਇਹ ਫਾਇਲ ਵਿੱਚ ਵਾਇਰਸ ਹੈ! ਵੇਰਵੇ ਲਈ ਵੇਖੋ: $1', 'sourcefilename' => 'ਸੋਰਸ ਫਾਇਲ ਨਾਂ:', 'watchthisupload' => 'ਇਸ ਫਾਇਲ ਨੂੰ ਵਾਚ ਕਰੋ', +'upload-success-subj' => 'ਠੀਕ ਤਰ੍ਹਾਂ ਅੱਪਲੋਡ', +'upload-warning-subj' => 'ਅੱਪਲੋਡ ਚੇਤਾਵਨੀ', 'upload-file-error' => 'ਅੰਦਰੂਨੀ ਗਲਤੀ', 'upload-misc-error' => 'ਅਣਜਾਣ ਅੱਪਲੋਡ ਗਲਤੀ', @@ -811,7 +800,6 @@ to upload files.', # Watchlist 'watchlist' => 'ਮੇਰੀ ਵਾਚ-ਲਿਸਟ', 'mywatchlist' => 'ਮੇਰੀ ਵਾਚ-ਲਿਸਟ', -'watchlistfor' => "('''$1''' ਲਈ)", 'watchnologin' => 'ਲਾਗਇਨ ਨਹੀਂ', 'addedwatch' => 'ਵਾਚ-ਲਿਸਟ ਵਿੱਚ ਸ਼ਾਮਲ', 'watch' => 'ਵਾਚ', @@ -1067,9 +1055,9 @@ to upload files.', # Media information 'thumbsize' => 'ਥੰਮਨੇਲ ਆਕਾਰ:', 'widthheightpage' => '$1×$2, $3 ਪੇਜ਼', -'file-info' => '(ਫਾਇਲ ਆਕਾਰ: $1, MIME ਕਿਸਮ: $2)', -'file-info-size' => '($1 × $2 ਪਿਕਸਲ, ਫਾਇਲ ਆਕਾਰ: $3, MIME ਕਿਸਮ: $4)', -'svg-long-desc' => '(SVG ਫਾਇਲ, nominally $1 × $2 pixels, file size: $3)', +'file-info' => 'ਫਾਇਲ ਆਕਾਰ: $1, MIME ਕਿਸਮ: $2', +'file-info-size' => '$1 × $2 ਪਿਕਸਲ, ਫਾਇਲ ਆਕਾਰ: $3, MIME ਕਿਸਮ: $4', +'svg-long-desc' => 'SVG ਫਾਇਲ, nominally $1 × $2 pixels, file size: $3', 'show-big-image' => 'ਪੂਰਾ ਰੈਜ਼ੋਲੇਸ਼ਨ', 'show-big-image-thumb' => 'ਇਹ ਝਲਕ ਦਾ ਆਕਾਰ: $1 × $2 ਪਿਕਸਲ', @@ -1160,6 +1148,7 @@ to upload files.', 'table_pager_first' => 'ਪਹਿਲਾ ਪੇਜ', 'table_pager_last' => 'ਆਖਰੀ ਪੇਜ', 'table_pager_limit' => 'ਹਰੇਕ ਪੇਜ ਲਈ $1 ਆਈਟਮਾਂ', +'table_pager_limit_label' => 'ਪ੍ਰਤੀ ਸਫ਼ਾ ਆਈਟਮਾਂ:', 'table_pager_limit_submit' => 'ਜਾਓ', 'table_pager_empty' => 'ਕੋਈ ਨਤੀਜਾ ਨਹੀਂ', diff --git a/languages/messages/MessagesPam.php b/languages/messages/MessagesPam.php index cd23c62a..b08d1057 100644 --- a/languages/messages/MessagesPam.php +++ b/languages/messages/MessagesPam.php @@ -29,8 +29,7 @@ $messages = array( Pabusten ing pamanaliling dake kapamilatan [alilan] ning suglung', 'tog-editsectiononrightclick' => "Paganan ya ing pamag-edit seksiyon (section editing) kapamilata'ning pamag right click kareng pamagat da reng seksiyon (JavaScript)", 'tog-showtoc' => 'Pakit ya ing kalamnan [table of contents] (kareng bulung a maki 3 o mas dakal a pamagat)', -'tog-rememberpassword' => 'Tandanan ya ing kanakung login keng computer a ini', -'tog-editwidth' => 'Palaparan ya ing edit box ba neng sapakan ing mabilug a screen', +'tog-rememberpassword' => 'Tandanan ya ing kanakung login keng computer a ini (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Idagdag la deng bulung a lelengan ku kareng babanten', 'tog-watchdefault' => 'Idagdag la reng bulung a inalilan ku kareng babanten', 'tog-watchmoves' => 'Idagdag la reng bulung a inalis ku kareng babanten', @@ -163,16 +162,10 @@ Pabusten ing pamanaliling dake kapamilatan [alilan] ning suglung', 'faqpage' => 'Project:MAK', # Vector skin -'vector-action-move' => 'Iyalis', -'vector-action-protect' => 'Protectan/kambilan', -'vector-action-undelete' => 'Isubli/iurung ya pangabura', -'vector-action-unprotect' => 'Idayu ya panga-protecta', -'vector-namespace-category' => 'Categoria', -'vector-namespace-help' => 'Bulung ning saup', -'vector-namespace-image' => "Simpan (''file'')", -'vector-namespace-main' => 'Bulung', -'vector-namespace-media' => 'Bulung media', -'vector-namespace-project' => 'Bulung a pang-proyectu', +'vector-action-move' => 'Iyalis', +'vector-action-protect' => 'Protectan/kambilan', +'vector-action-undelete' => 'Isubli/iurung ya pangabura', +'vector-action-unprotect' => 'Idayu ya panga-protecta', 'errorpagetitle' => 'Mali', 'returnto' => 'Magbalik king $1.', @@ -383,7 +376,7 @@ Melalang ne ing kekang account. E mo kakalingwan alilan deng kekang piniling {{S 'yourname' => 'Lagyung talagamit (Username):', 'yourpassword' => 'Kekang password:', 'yourpasswordagain' => 'Pakisulat meng pasibayu ing password:', -'remembermypassword' => 'Tandanan me ing login ku king computer a ini', +'remembermypassword' => 'Tandanan me ing login ku king computer a ini (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Ing kekang karinan (domain):', 'externaldberror' => 'Mapalyaring mika pamagkamali king external authentication (pamagpatutung panlual) ning database, o ala kang paintulut a i-update ya ing kekang account a panlual (external account).', 'login' => 'Mag log in', @@ -562,7 +555,7 @@ o [{{fullurl:{{FULLPAGENAME}}|action=edit}} i-edit ing bulung a ini].', 'usercsspreview' => "'''Tandanan mung pi-preview me mu ing kekang user CSS, e ya pa me-save!'''", 'userjspreview' => "'''Tandanan mung susubukan/pi-preview me pamu ing kekang user JavaScript, e ya pa me-save iti!'''", 'userinvalidcssjstitle' => "'''Kapiadian:''' Alang pabalat (skin) a \"\$1\". -Tandanan mung deng pasadiang bulung (custom pages) a .css ampong .js, gagamit lang bansag a mababang letra (lowercase), alm. (alimbawa), {{ns:user}}:Foo/monobook.css, at e {{ns:user}}:Foo/Monobook.css.", +Tandanan mung deng pasadiang bulung (custom pages) a .css ampong .js, gagamit lang bansag a mababang letra (lowercase), alm. (alimbawa), {{ns:user}}:Foo/vector.css, at e {{ns:user}}:Foo/Vector.css.", 'updated' => '(Mibayu)', 'note' => "'''Kapabaluan:'''", 'previewnote' => "'''Preview ya mu ini; @@ -604,9 +597,6 @@ Mangaku ka mu naman a ika mismu ing sinulat kaniti, o acopia me ketang metung a Nung e mu buri ing alilan deng alang patugut at alang lunus ing kekang sinulat, e me duduang keni.
    Mangaku ka mu naman a ika mismu ing sinulat kaniti, o akopia me ketang metung a pikuanan a mipaintulutan king malda o aliwa pang libring pikukuanan (lon me ing $1 para kareng detalle). '''E KA MANAMBAG OBRANG MAKI COPYRIGHT NUNG ALANG PAINTULUT!", -'longpagewarning' => "'''KAPIADIAN: Maki kaba yang $1 kilobyte ining bulung; -mágkasákit lang mag-edit bulung a maigit 32 kb deng aliwang browser. -Nung maliari, pakipitnan me kareng adua o maigit pang dake.'''", 'longpageerror' => "'''MALI: Miras yang $1 kilobyte ing kekang sinulat; sobra ya ketang $2 a pekamakabang maliaring iyambag. E ya ma-save iti.'''", 'readonlywarning' => "'''BABALA: Makasara ya ing database uling sasamasan de iti, ania e mo a-save ngeni detang kekang in-edit. Maliari meng i-\"cut-n-paste\" ing sinulat mu king metung a text file, at i-save mu ne mu para king tutuki.'''", @@ -1081,7 +1071,6 @@ Nung atyu keka ining larawan king bersion a pekamalino (full resolution), ilulan mibalik ka at ilulan (upload) me king lalam ning bayung lagyu. [[File:$1|thumb|center|$1]]', 'fileexists-shared-forbidden' => 'Atin nang simpan (file) a maki lagyung anti kaniti king abe-abeng simpanan (shared file repository); mibalik ka at ilulan (upload) me king lalam ning bayung lagyu. [[File:$1|thumb|center|$1]]', -'successfulupload' => 'Melaus ing pamaglulan', 'uploadwarning' => 'Babala king pamaglulan', 'savefile' => 'I-save ya ing simpan (file)', 'uploadedimage' => 'milulan ya ing "[[$1]]"', @@ -1102,6 +1091,7 @@ Pakaisipan mu sa nung ustu ing isundu mu ing pamaglulan kaniti. Makabili ya keni ing tala da reng mengabura ba meng asuri:", 'filename-bad-prefix' => "Magumpisa ya king '''\"\$1\"''' ing lagyu ning simpan (file) a kekang lululan. Iti metung yang lagyung tambing dang bibie deng digital camera, at ala yang kaugnayan ketang letratu. Mamili ka sanang lagyung mas maglarawan keng kekang simpan.", +'upload-success-subj' => 'Melaus ing pamaglulan', 'upload-proto-error' => 'E ustung protocol', 'upload-proto-error-text' => 'Mangailangan yang URL a magumpisa king http:// o ftp:// ing pang-malaut a pamaglulan (remote upload).', @@ -1381,7 +1371,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'Deng kanakung babanten', 'mywatchlist' => 'Deng kakung babanten', -'watchlistfor' => "(para '''$1''')", 'nowatchlist' => 'Ala yang laman ing kekang tala ring babanten (watchlist).', 'watchlistanontext' => 'Paki $1 ba mong akit o a-edit deng laman ning kekang tala ring babanten (watchlist).', 'watchnologin' => 'E maka-login', @@ -1501,7 +1490,9 @@ I [[User:$3|$3]] ([[User talk:$3|Talk]]) ing tawling menalili.', binalik neng [[User:$1|$1]] king tauling bersion', 'rollback-success' => 'Deng edit nang $1 a miurung; binalik nong $2 king sadiang bersion.', -'sessionfailure' => 'Balamu ating prublema king kekang login session; + +# Edit tokens +'sessionfailure' => 'Balamu ating prublema king kekang login session; mituknang ya ing kimut (action) a ini bang milisia king session hijacking (pamaniamsam session). Pakitimid me ing "mibalik" ("back") at luban meng pasibayu ing bulung a penibatan mu, potang kai subukan mung pasibayu.', @@ -1681,7 +1672,6 @@ mu nung sanu retang bulung a sinira da).', 'ipb-edit-dropdown' => 'Sangkan ning pamaniabat king pamag-edit', 'ipb-unblock-addr' => 'Ilako ya pangasabat ing $1', 'ipb-unblock' => 'Ilako ya pangasabat ing lagyungtalagamit (username) o IP address', -'ipb-blocklist-addr' => 'Lon la reng kasalungsungang makasabat para $1', 'ipb-blocklist' => 'Lon la reng kasalungsungang makasabat', 'unblockip' => 'Ilako ya pangasabat ing talagamit', 'unblockiptext' => 'Gamitan me ing form king lalam ba mung ibalik ing paintulut a sumulat (write access) king IP address o lagyungtalagamit a sadiang makasabat.', @@ -2039,10 +2029,10 @@ $1', 'imagemaxsize' => 'E la dapat migit king bilang a iti deng larawan kareng bulung pamilarawan simpan (file description pages):', 'thumbsize' => 'Kasindagul kuku (thumbnail size):', 'widthheightpage' => '$1×$2, $3 bulung', -'file-info' => '(dagul ning simpan [file]: $1, MIME type: $2)', -'file-info-size' => '($1 × $2 pixel, sukad ning simpan: $3, MIME type: $4)', +'file-info' => 'dagul ning simpan [file]: $1, MIME type: $2', +'file-info-size' => '$1 × $2 pixel, sukad ning simpan: $3, MIME type: $4', 'file-nohires' => 'Ala nang mas malino pa.', -'svg-long-desc' => '(SVG file, masasabing $1 × $2 pixels, dagul ning simpan: $3)', +'svg-long-desc' => 'SVG file, masasabing $1 × $2 pixels, dagul ning simpan: $3', 'show-big-image' => 'Pekamalino', 'show-big-image-thumb' => 'Dagul na niting preview: $1 × $2 pixels', diff --git a/languages/messages/MessagesPap.php b/languages/messages/MessagesPap.php index ca3e544c..c23ff5bb 100644 --- a/languages/messages/MessagesPap.php +++ b/languages/messages/MessagesPap.php @@ -171,7 +171,7 @@ No lubidá di kambia bo [[Special:Preferences|{{SITENAME}} preferensianan]].', 'yourname' => 'Nòmber di uzadó', 'yourpassword' => 'Kontraseña', 'yourpasswordagain' => 'Hinka kontraseña atrobe', -'remembermypassword' => 'Kordá mi', +'remembermypassword' => 'Kordá mi (for a maximum of $1 {{PLURAL:$1|day|days}})', 'userlogin' => 'Traha un kuenta nobo òf outentiká', 'userlogout' => 'Terminá sesion', 'badretype' => 'E kontraseñanan hinká no ta kuadra.', diff --git a/languages/messages/MessagesPcd.php b/languages/messages/MessagesPcd.php index 3c347d50..ca12ccc9 100644 --- a/languages/messages/MessagesPcd.php +++ b/languages/messages/MessagesPcd.php @@ -27,8 +27,7 @@ $messages = array( 'tog-editsection' => "Pérmet l'édichion del sekchion via [edit] loïens", 'tog-editsectiononrightclick' => "Pérmet l'édichion del sekchion par un droé buke su ch'tite del sekchion (i feut JavaScript)", 'tog-showtoc' => "Aficher l'tabe ed ches étnus (pou ches paches aveuc plu ed 3 intétes)", -'tog-rememberpassword' => "Warder min lodjine su chl'ordinateu-lo.", -'tog-editwidth' => "Alatcher l'boéte d'édichon pou rimplir tout ch'cassi", +'tog-rememberpassword' => "Warder min lodjine su chl'ordinateu-lo (for a maximum of $1 {{PLURAL:$1|day|days}})", 'tog-watchcreations' => "Ajouter ches paches qu'éj crée su em lisse", 'tog-watchdefault' => "Ajouter ches paches qu'éj édite su em lisse.", 'tog-watchmoves' => "Ajouter ches paches qu'éj déplache su m'lisse.", @@ -141,28 +140,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Rajouter un sujeut', -'vector-action-delete' => 'Défacer', -'vector-action-move' => "Canger ch'nom", -'vector-action-protect' => 'Garantir', -'vector-action-undelete' => "N'poin défacher", -'vector-action-unprotect' => "N'poin garantir", -'vector-namespace-help' => "Pache d'aïude", -'vector-namespace-image' => 'Fichié', -'vector-namespace-main' => 'Pache', -'vector-namespace-mediawiki' => 'Message', -'vector-namespace-special' => 'Pache éspéchiale', -'vector-namespace-talk' => 'Pérlache', -'vector-namespace-template' => 'Modéle', -'vector-namespace-user' => 'Pache dechl uzeu', -'vector-view-create' => 'Créer', -'vector-view-edit' => 'Éditer', -'vector-view-history' => "Vir l'histoère", -'vector-view-view' => 'Lire', -'vector-view-viewsource' => "Vir l'source", -'actions' => 'Acchons', -'namespaces' => "Éspaces d'chés noms", -'variants' => 'Ércanjantes', +'vector-action-addsection' => 'Rajouter un sujeut', +'vector-action-delete' => 'Défacer', +'vector-action-move' => "Canger ch'nom", +'vector-action-protect' => 'Garantir', +'vector-action-undelete' => "N'poin défacher", +'vector-action-unprotect' => "N'poin garantir", +'vector-simplesearch-preference' => "Déhousser chés avanches d'ércherche améliorées (seulemint pour Vector)", +'vector-view-create' => 'Créer', +'vector-view-edit' => 'Éditer', +'vector-view-history' => "Vir l'histoère", +'vector-view-view' => 'Lire', +'vector-view-viewsource' => "Vir l'source", +'actions' => 'Acchons', +'namespaces' => "Éspaces d'chés noms", +'variants' => 'Ércanjantes', 'errorpagetitle' => 'Bérlure', 'returnto' => 'Értrouve $1.', @@ -316,7 +308,7 @@ Si s'n'est poin ch'cas-lo, pététe éq ch'est un bogue din ch'businkillache. "nom d'uzeu:", 'yourpassword' => "Mot d'passe:", 'yourpasswordagain' => "Intrer à nouvieu ch'mot d'passe:", -'remembermypassword' => "Inrégistrer m'loguine su echl ordinateu-lo", +'remembermypassword' => "Intrer oùtonmatiquemint l'prochaine fouos (pour un maximum éd $1 {{PLURAL:$1|jour|jours}})", 'yourdomainname' => 'Vote donmène:', 'login' => 'Intrer', 'nav-login-createaccount' => 'Intrer / créer vote conpte', @@ -612,7 +604,6 @@ Ale doét mie éte pu longue éq $1 {{PLURAL:$1|caracter|caractéres}}.', # Watchlist 'watchlist' => 'Em lisse à suire', 'mywatchlist' => "M'lisse à suire", -'watchlistfor' => "(pou '''$1''')", 'addedwatch' => "Rajouté su l'lisse à suire", 'addedwatchtext' => "L' pache « [[:$1]] » o té rajoutée à vote [[Special:Watchlist|lisse à suire]].
    Chés canjemints à vnir del pache-lo pi del page éd pérlache sront mis din l'lisse. L'pache sro '''in cros''' din el [[Special:RecentChanges|lisse d'chés darins canjemints]] pou les értreuver fachilmint. Pou értirer chol pache del ''lisse à suire'', bukez su « {{MediaWiki:Unwatch}} ».", 'removedwatch' => 'Értiré del lisse à suire', @@ -695,6 +686,7 @@ Vlo chés réglages del pache '''$1''' à ch'momint-chi:", 'sp-contributions-blocklog' => 'jornal éd chés blotcåjhes', 'sp-contributions-search' => 'Tracher pou chés contérbuchons', 'sp-contributions-username' => "Adérche IP ou nom d'uzeu", +'sp-contributions-toponly' => "n'montrer qu'chés darins canjemints", 'sp-contributions-submit' => 'Tracher', # What links here @@ -826,6 +818,7 @@ Os pouvez vir l'source", 'tooltip-watch' => 'Ajouter chol pache-lo à vo lisse à suire', 'tooltip-rollback' => '« Racacher » cancéle aveuc un clic el (ou chés) modificachon(s) del pache-lo pèr sin darin contérbucheu.', 'tooltip-undo' => "« Undo » ( ''démangler'' ) értire ch'canjemint-lo pi ouvre l' fénéte d'édichon din ch'mode ''prévir''.
    In put mette un motif din ch'résumé.", +'tooltip-preferences-save' => 'Warder chés préférinches.', # Info page 'numedits' => 'Nombe ed canjemints (pache) : $1', @@ -835,9 +828,9 @@ Os pouvez vir l'source", 'nextdiff' => 'Nouvèle édichon →', # Media information -'file-info-size' => '($1 × $2 picséls, diminchon dech fichié: $3, MIME tipe: $4)', +'file-info-size' => '$1 × $2 picséls, diminchon dech fichié: $3, MIME tipe: $4', 'file-nohires' => 'Poin éd pu grande résoluchon possibe.', -'svg-long-desc' => '(Fichié SVG, résoluchon éd $1 × $2 picsels, diminchon: $3)', +'svg-long-desc' => 'Fichié SVG, résoluchon éd $1 × $2 picsels, diminchon: $3', 'show-big-image' => 'Plinne résoluchon', 'show-big-image-thumb' => 'Diminchon del intérvue-lo : $1 × $2 picséls', @@ -897,6 +890,13 @@ Chés eutes cans is s'ront muchés pèr défeut. # Special:BlankPage 'blankpage' => 'Blanke pache', +# Special:ComparePages +'compare-page1' => 'Pache 1', +'compare-page2' => 'Pache 2', +'compare-rev1' => 'Canjemint 1', +'compare-rev2' => 'Canjemint 2', +'compare-submit' => 'Aconparer', + # Database error messages 'dberr-header' => 'Ech wiki-lo il o dés problémes', diff --git a/languages/messages/MessagesPdc.php b/languages/messages/MessagesPdc.php index dbb1d753..9a6a1f55 100644 --- a/languages/messages/MessagesPdc.php +++ b/languages/messages/MessagesPdc.php @@ -117,23 +117,14 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-delete' => 'Lösche', -'vector-action-move' => 'Ziehe', -'vector-action-protect' => 'Schitze', -'vector-namespace-category' => 'Abdeeling', -'vector-namespace-help' => 'Hilfblatt', -'vector-namespace-image' => 'Feil', -'vector-namespace-main' => 'Blatt', -'vector-namespace-project' => 'Project-Blatt', -'vector-namespace-special' => 'Besunneres Blatt', -'vector-namespace-talk' => 'Dischbedutt', -'vector-namespace-template' => 'Moddel', -'vector-namespace-user' => 'Yuuser-Blatt', -'vector-view-create' => 'Schtaerte', -'vector-view-edit' => 'Ennere', -'vector-view-history' => 'Gschicht zeige', -'vector-view-view' => 'Lese', -'namespaces' => 'Blatznaame', +'vector-action-delete' => 'Lösche', +'vector-action-move' => 'Ziehe', +'vector-action-protect' => 'Schitze', +'vector-view-create' => 'Schtaerte', +'vector-view-edit' => 'Ennere', +'vector-view-history' => 'Gschicht zeige', +'vector-view-view' => 'Lese', +'namespaces' => 'Blatznaame', 'errorpagetitle' => 'Mischteek', 'returnto' => 'Zerick zum Blatt $1.', @@ -263,6 +254,7 @@ Wenns des net iss, hoscht verleicht en Fehler in de Daadebank gfunne. Bitte meld 'userlogout' => 'Geh naus', 'gotaccountlink' => 'Kumm nei', 'createaccountmail' => 'iwwer E-Mail', +'createaccountreason' => 'Grund:', 'mailmypassword' => 'Neies Paesswadd eposchde', 'noemail' => 'Yuuser „$1“ hot ken E-Mail aagewwe.', 'loginlanguagelabel' => 'Schprooch: $1', @@ -455,27 +447,24 @@ Wenns des net iss, hoscht verleicht en Fehler in de Daadebank gfunne. Bitte meld 'action-delete' => 'des Blatt zu lösche', # Recent changes -'nchanges' => '$1 {{PLURAL:$1|Ennering|Enneringe}}', -'recentchanges' => 'Was mer letscht geduh henn', -'recentchanges-legend-newpage' => '$1 - neies Blatt', -'recentchanges-legend-minor' => '$1 - gleene Ennering', -'recentchanges-label-minor' => 'Gleene Ennering', -'recentchanges-legend-bot' => '$1 - Ennering vun em Waddefresser', -'recentchanges-label-bot' => 'Ennering vun em Waddefresser', -'rcshowhideminor' => 'Gleene Enneringe $1', -'rcshowhidebots' => 'Bots $1', -'rcshowhideanons' => 'IP-Yuuser $1', -'rcshowhidemine' => 'Mei Ardickele $1', -'rclinks' => 'Zeig die letscht $1 Enneringe vun de letscht $2 Daag.
    $3', -'diff' => 'Unnerschidd', -'hist' => 'Gschicht', -'hide' => 'verschwinne losse', -'show' => 'zeige', -'minoreditletter' => 'g', -'newpageletter' => 'N', -'boteditletter' => 'W', -'rc_categories_any' => 'All', -'newsectionsummary' => 'Neier Abschnitt /* $1 */', +'nchanges' => '$1 {{PLURAL:$1|Ennering|Enneringe}}', +'recentchanges' => 'Was mer letscht geduh henn', +'recentchanges-label-minor' => 'Gleene Ennering', +'recentchanges-label-bot' => 'Ennering vun em Waddefresser', +'rcshowhideminor' => 'Gleene Enneringe $1', +'rcshowhidebots' => 'Bots $1', +'rcshowhideanons' => 'IP-Yuuser $1', +'rcshowhidemine' => 'Mei Ardickele $1', +'rclinks' => 'Zeig die letscht $1 Enneringe vun de letscht $2 Daag.
    $3', +'diff' => 'Unnerschidd', +'hist' => 'Gschicht', +'hide' => 'verschwinne losse', +'show' => 'zeige', +'minoreditletter' => 'g', +'newpageletter' => 'N', +'boteditletter' => 'W', +'rc_categories_any' => 'All', +'newsectionsummary' => 'Neier Abschnitt /* $1 */', # Recent changes linked 'recentchangeslinked' => 'Was on verlinkde Bledder geduh warre iss', @@ -641,7 +630,6 @@ Wenns des net iss, hoscht verleicht en Fehler in de Daadebank gfunne. Bitte meld # Watchlist 'watchlist' => 'Mei Watsch-Lischt', 'mywatchlist' => 'Mei Watsch-Lischt', -'watchlistfor' => "(fer '''$1''')", 'addedwatch' => 'Zu de Watsch-Lischt dezu geduh', 'watch' => 'watsche', 'watchthispage' => 'watsch des Blatt', @@ -830,7 +818,7 @@ Guck $2 fer e Lischt vun de letscht Leschunge.', # Media information 'widthheightpage' => '$1×$2, {{PLURAL:$3|1 Blatt|$3 Bledder}}', -'file-info-size' => '($1 × $2 Pixel, Daadegrees: $3, MIME-Typ: $4)', +'file-info-size' => '$1 × $2 Pixel, Daadegrees: $3, MIME-Typ: $4', # Special:NewFiles 'showhidebots' => '(Bots $1)', @@ -904,6 +892,7 @@ Guck $2 fer e Lischt vun de letscht Leschunge.', 'version-other' => 'Anneres', 'version-mediahandlers' => 'Media-Haendlers', 'version-version' => '(Version $1)', +'version-poweredby-others' => 'annere', 'version-software-version' => 'Version', # Special:FilePath @@ -931,6 +920,10 @@ Guck $2 fer e Lischt vun de letscht Leschunge.', 'tags-edit' => 'ennere', 'tags-hitcount' => '$1 {{PLURAL:$1|Ennering|Enneringe}}', +# Special:ComparePages +'compare-page1' => 'Blatt 1', +'compare-page2' => 'Blatt 2', + # HTML forms 'htmlform-reset' => 'Enneringe zerick nemme', 'htmlform-selectorother-other' => 'Annere', diff --git a/languages/messages/MessagesPdt.php b/languages/messages/MessagesPdt.php index da50f0fc..d1cbb764 100644 --- a/languages/messages/MessagesPdt.php +++ b/languages/messages/MessagesPdt.php @@ -419,7 +419,6 @@ Bitte nemm eenen aundren.', # Watchlist 'mywatchlist' => 'Miene Oppaussied', -'watchlistfor' => "(fer '''$1''')", 'addedwatch' => "No Oppausssied bieje'done", 'watch' => 'Oppausse', 'watchthispage' => 'Op dise Sied oppausse', diff --git a/languages/messages/MessagesPfl.php b/languages/messages/MessagesPfl.php index 7c35bd86..a0b896ce 100644 --- a/languages/messages/MessagesPfl.php +++ b/languages/messages/MessagesPfl.php @@ -82,9 +82,8 @@ $messages = array( 'qbmyoptions' => 'Mai Saide', # Vector skin -'vector-action-move' => 'Verschiewe', -'vector-namespace-user' => 'Benutzersaid', -'vector-view-edit' => 'Bearwaide', +'vector-action-move' => 'Verschiewe', +'vector-view-edit' => 'Bearwaide', 'errorpagetitle' => 'Fehler', 'returnto' => 'Zrick zu $1.', @@ -187,7 +186,7 @@ S kann sai, dass es ää odder meh Zaiche drin hot, wu im Titel vun de Said nid # Login and logout pages 'yourname' => 'Benutzername:', 'yourpassword' => 'Passwort:', -'remembermypassword' => 'Mai Passwort uff dem Computer merke', +'remembermypassword' => 'Mai Passwort uff dem Computer merke (hechschtens fer $1 {{PLURAL:$1|Dach|Dach}})', 'login' => 'Omelde', 'nav-login-createaccount' => 'Aamelde / Benutzerkonto aaleche', 'userlogin' => 'Omelde / Benutzerkonto anleche', @@ -455,7 +454,6 @@ Saide uff [[Special:Watchlist|Dainer Beowachdungslischt]] sin '''fett'''.", # Watchlist 'watchlist' => 'Beowachdungslischd', 'mywatchlist' => 'Mai Beowachdungslischd', -'watchlistfor' => "(fer '''$1''')", 'addedwatch' => 'Zu de Beowachdungslischt zufieche', 'addedwatchtext' => "Die Said \"[[:\$1]]\" isch zu Dainer [[Special:Watchlist|Beowachdungslischt]] zugefiecht worre. Zukimftiche Ännerunge an derre Said un de Dischbediersaid, wu dezu ghert, werre doo aagezaicht, un d Said werd '''fett''' aagezaicht in de [[Special:RecentChanges|Letschte Ännerunge]] fer dass es ääfacher isch zum finne.", @@ -695,9 +693,9 @@ Du kannscht e Grund in dr Zammfassung aagewwe', 'nextdiff' => 'Naiere Bearwaidung →', # Media information -'file-info-size' => '($1 × $2 Pixels, Dateigreß: $3, MIME-Type: $4)', +'file-info-size' => '$1 × $2 Pixels, Dateigreß: $3, MIME-Type: $4', 'file-nohires' => 'Ke hechere Ufflesung verfiechbar.', -'svg-long-desc' => '(SVG-Datei, Basisgreß $1 × $2 Pixels, Dateigreß: $3)', +'svg-long-desc' => 'SVG-Datei, Basisgreß $1 × $2 Pixels, Dateigreß: $3', 'show-big-image' => 'Gsamte Ergebnis', 'show-big-image-thumb' => 'Greß vun derre Vorschau: $1 × $2 Pixels', diff --git a/languages/messages/MessagesPl.php b/languages/messages/MessagesPl.php index 6cbad15e..98bfb67c 100644 --- a/languages/messages/MessagesPl.php +++ b/languages/messages/MessagesPl.php @@ -10,6 +10,7 @@ * @author Beau * @author Derbeth * @author Equadus + * @author Fizykaa * @author Herr Kriss * @author Holek * @author Jwitos @@ -59,6 +60,10 @@ $namespaceAliases = array( 'Dyskusja_grafiki' => NS_FILE_TALK, ); +$namespaceGenderAliases = array( + NS_USER => array( 'male' => 'Użytkownik', 'female' => 'Użytkowniczka' ), + NS_USER_TALK => array( 'male' => 'Dyskusja_użytkownika', 'female' => 'Dyskusja_użytkowniczki' ), +); $dateFormats = array( 'mdy time' => 'H:i', @@ -83,93 +88,95 @@ $separatorTransformTable = array( $linkTrail = '/^([a-zęóąśłżźćńĘÓĄŚŁŻŹĆŃ]+)(.*)$/sDu'; $specialPageAliases = array( - 'DoubleRedirects' => array( 'Podwójne przekierowania' ), - 'BrokenRedirects' => array( 'Zerwane przekierowania' ), + 'DoubleRedirects' => array( 'Podwójne_przekierowania' ), + 'BrokenRedirects' => array( 'Zerwane_przekierowania' ), 'Disambiguations' => array( 'Ujednoznacznienia' ), 'Userlogin' => array( 'Zaloguj' ), 'Userlogout' => array( 'Wyloguj' ), - 'CreateAccount' => array( 'Stwórz konto' ), + 'CreateAccount' => array( 'Stwórz_konto' ), 'Preferences' => array( 'Preferencje' ), 'Watchlist' => array( 'Obserwowane' ), - 'Recentchanges' => array( 'Ostatnie zmiany', 'OZ' ), + 'Recentchanges' => array( 'Ostatnie_zmiany', 'OZ' ), 'Upload' => array( 'Prześlij' ), 'Listfiles' => array( 'Pliki' ), - 'Newimages' => array( 'Nowe pliki' ), + 'Newimages' => array( 'Nowe_pliki' ), 'Listusers' => array( 'Użytkownicy' ), - 'Listgrouprights' => array( 'Uprawnienia grup użytkowników', 'Uprawnienia' ), + 'Listgrouprights' => array( 'Grupy_użytkowników', 'Uprawnienia_grup_użytkowników' ), 'Statistics' => array( 'Statystyka', 'Statystyki' ), - 'Randompage' => array( 'Losowa strona', 'Losowa' ), - 'Lonelypages' => array( 'Porzucone strony' ), - 'Uncategorizedpages' => array( 'Nieskategoryzowane strony' ), - 'Uncategorizedcategories' => array( 'Nieskategoryzowane kategorie' ), - 'Uncategorizedimages' => array( 'Nieskategoryzowane pliki' ), - 'Uncategorizedtemplates' => array( 'Nieskategoryzowane szablony' ), - 'Unusedcategories' => array( 'Nieużywane kategorie' ), - 'Unusedimages' => array( 'Nieużywane pliki' ), - 'Wantedpages' => array( 'Potrzebne strony' ), - 'Wantedcategories' => array( 'Potrzebne kategorie' ), - 'Wantedfiles' => array( 'Potrzebne pliki' ), - 'Wantedtemplates' => array( 'Potrzebne szablony' ), - 'Mostlinked' => array( 'Najczęściej linkowane' ), - 'Mostlinkedcategories' => array( 'Najczęściej linkowane kategorie' ), - 'Mostlinkedtemplates' => array( 'Najczęściej linkowane szablony' ), - 'Mostimages' => array( 'Najczęściej linkowane pliki' ), - 'Mostcategories' => array( 'Najwięcej kategorii' ), - 'Mostrevisions' => array( 'Najwięcej edycji', 'Najczęściej edytowane' ), - 'Fewestrevisions' => array( 'Najmniej edycji' ), - 'Shortpages' => array( 'Najkrótsze strony' ), - 'Longpages' => array( 'Najdłuższe strony' ), - 'Newpages' => array( 'Nowe strony' ), - 'Ancientpages' => array( 'Stare strony' ), - 'Deadendpages' => array( 'Bez linków' ), - 'Protectedpages' => array( 'Zabezpieczone strony' ), - 'Protectedtitles' => array( 'Zabezpieczone nazwy stron' ), - 'Allpages' => array( 'Wszystkie strony' ), - 'Prefixindex' => array( 'Strony według prefiksu' ), + 'Randompage' => array( 'Losowa_strona', 'Losowa' ), + 'Lonelypages' => array( 'Porzucone_strony' ), + 'Uncategorizedpages' => array( 'Nieskategoryzowane_strony' ), + 'Uncategorizedcategories' => array( 'Nieskategoryzowane_kategorie' ), + 'Uncategorizedimages' => array( 'Nieskategoryzowane_pliki' ), + 'Uncategorizedtemplates' => array( 'Nieskategoryzowane_szablony' ), + 'Unusedcategories' => array( 'Nieużywane_kategorie' ), + 'Unusedimages' => array( 'Nieużywane_pliki' ), + 'Wantedpages' => array( 'Potrzebne_strony' ), + 'Wantedcategories' => array( 'Potrzebne_kategorie' ), + 'Wantedfiles' => array( 'Potrzebne_pliki' ), + 'Wantedtemplates' => array( 'Potrzebne_szablony' ), + 'Mostlinked' => array( 'Najczęściej_linkowane' ), + 'Mostlinkedcategories' => array( 'Najczęściej_linkowane_kategorie' ), + 'Mostlinkedtemplates' => array( 'Najczęściej_linkowane_szablony' ), + 'Mostimages' => array( 'Najczęściej_linkowane_pliki' ), + 'Mostcategories' => array( 'Najwięcej_kategorii' ), + 'Mostrevisions' => array( 'Najwięcej_edycji', 'Najczęściej_edytowane' ), + 'Fewestrevisions' => array( 'Najmniej_edycji' ), + 'Shortpages' => array( 'Najkrótsze_strony' ), + 'Longpages' => array( 'Najdłuższe_strony' ), + 'Newpages' => array( 'Nowe_strony' ), + 'Ancientpages' => array( 'Stare_strony' ), + 'Deadendpages' => array( 'Bez_linków' ), + 'Protectedpages' => array( 'Zabezpieczone_strony' ), + 'Protectedtitles' => array( 'Zabezpieczone_nazwy_stron' ), + 'Allpages' => array( 'Wszystkie_strony' ), + 'Prefixindex' => array( 'Strony_według_prefiksu' ), 'Ipblocklist' => array( 'Zablokowani' ), - 'Specialpages' => array( 'Strony specjalne' ), + 'Unblock' => array( 'Odblokuj' ), + 'Specialpages' => array( 'Strony_specjalne' ), 'Contributions' => array( 'Wkład' ), 'Emailuser' => array( 'E-mail' ), - 'Confirmemail' => array( 'Potwierdź e-mail' ), + 'Confirmemail' => array( 'Potwierdź_e-mail' ), 'Whatlinkshere' => array( 'Linkujące' ), - 'Recentchangeslinked' => array( 'Zmiany w linkujących' ), + 'Recentchangeslinked' => array( 'Zmiany_w_linkujących' ), 'Movepage' => array( 'Przenieś' ), - 'Blockme' => array( 'Zablokuj mnie' ), + 'Blockme' => array( 'Zablokuj_mnie' ), 'Booksources' => array( 'Książki' ), 'Categories' => array( 'Kategorie' ), 'Export' => array( 'Eksport' ), 'Version' => array( 'Wersja' ), - 'Allmessages' => array( 'Wszystkie komunikaty' ), + 'Allmessages' => array( 'Wszystkie_komunikaty' ), 'Log' => array( 'Rejestr', 'Logi' ), 'Blockip' => array( 'Blokuj' ), 'Undelete' => array( 'Odtwórz' ), - 'Lockdb' => array( 'Zablokuj bazę' ), - 'Unlockdb' => array( 'Odblokuj bazę' ), - 'Userrights' => array( 'Uprawnienia użytkowników', 'Prawa użytkowników' ), - 'MIMEsearch' => array( 'Wyszukiwanie MIME' ), - 'FileDuplicateSearch' => array( 'Szukaj duplikatu pliku' ), - 'Unwatchedpages' => array( 'Nieobserwowane strony' ), + 'Lockdb' => array( 'Zablokuj_bazę' ), + 'Unlockdb' => array( 'Odblokuj_bazę' ), + 'Userrights' => array( 'Uprawnienia', 'Uprawnienia_użytkowników', 'Prawa_użytkowników' ), + 'MIMEsearch' => array( 'Wyszukiwanie_MIME' ), + 'FileDuplicateSearch' => array( 'Szukaj_duplikatu_pliku' ), + 'Unwatchedpages' => array( 'Nieobserwowane_strony' ), 'Listredirects' => array( 'Przekierowania' ), - 'Revisiondelete' => array( 'Usuń wersję' ), - 'Unusedtemplates' => array( 'Nieużywane szablony' ), - 'Randomredirect' => array( 'Losowe przekierowanie' ), - 'Mypage' => array( 'Moja strona' ), - 'Mytalk' => array( 'Moja dyskusja' ), - 'Mycontributions' => array( 'Mój wkład' ), + 'Revisiondelete' => array( 'Usuń_wersję' ), + 'Unusedtemplates' => array( 'Nieużywane_szablony' ), + 'Randomredirect' => array( 'Losowe_przekierowanie' ), + 'Mypage' => array( 'Moja_strona' ), + 'Mytalk' => array( 'Moja_dyskusja' ), + 'Mycontributions' => array( 'Mój_wkład' ), 'Listadmins' => array( 'Administratorzy' ), 'Listbots' => array( 'Boty' ), - 'Popularpages' => array( 'Popularne strony' ), + 'Popularpages' => array( 'Popularne_strony' ), 'Search' => array( 'Szukaj' ), - 'Resetpass' => array( 'Zmień hasło', 'Resetuj hasło' ), - 'Withoutinterwiki' => array( 'Strony bez interwiki' ), - 'MergeHistory' => array( 'Połącz historię' ), - 'Filepath' => array( 'Ścieżka do pliku' ), - 'Invalidateemail' => array( 'Anuluj e-mail' ), - 'Blankpage' => array( 'Pusta strona' ), - 'LinkSearch' => array( 'Wyszukiwarka linków' ), - 'DeletedContributions' => array( 'Usunięty wkład' ), + 'Resetpass' => array( 'Zmień_hasło', 'Resetuj_hasło' ), + 'Withoutinterwiki' => array( 'Strony_bez_interwiki' ), + 'MergeHistory' => array( 'Połącz_historię' ), + 'Filepath' => array( 'Ścieżka_do_pliku' ), + 'Invalidateemail' => array( 'Anuluj_e-mail' ), + 'Blankpage' => array( 'Pusta_strona' ), + 'LinkSearch' => array( 'Wyszukiwarka_linków' ), + 'DeletedContributions' => array( 'Usunięty_wkład' ), 'Tags' => array( 'Znaczniki' ), - 'Activeusers' => array( 'Aktywni użytkownicy' ), + 'Activeusers' => array( 'Aktywni_użytkownicy' ), + 'ComparePages' => array( 'Porównywanie_stron' ), ); $magicWords = array( @@ -179,6 +186,7 @@ $magicWords = array( 'forcetoc' => array( '0', '__ZESPISEM__', '__FORCETOC__' ), 'toc' => array( '0', '__SPIS__', '__TOC__' ), 'noeditsection' => array( '0', '__BEZEDYCJISEKCJI__', '__NOEDITSECTION__' ), + 'noheader' => array( '0', '__BEZNAGŁÓWKA__', '__NOHEADER__' ), 'localmonth' => array( '1', 'MIESIĄC', 'LOCALMONTH', 'LOCALMONTH2' ), 'localmonthname' => array( '1', 'MIESIĄCNAZWA', 'LOCALMONTHNAME' ), 'localmonthnamegen' => array( '1', 'MIESIĄCNAZWAD', 'LOCALMONTHNAMEGEN' ), @@ -198,6 +206,7 @@ $magicWords = array( 'namespace' => array( '1', 'NAZWAPRZESTRZENI', 'NAMESPACE' ), 'talkspace' => array( '1', 'DYSKUSJA', 'TALKSPACE' ), 'fullpagename' => array( '1', 'PELNANAZWASTRONY', 'FULLPAGENAME' ), + 'subst' => array( '0', 'podst:', 'SUBST:' ), 'img_thumbnail' => array( '1', 'mały', 'thumbnail', 'thumb' ), 'img_manualthumb' => array( '1', 'mały=$1', 'thumbnail=$1', 'thumb=$1' ), 'img_right' => array( '1', 'prawo', 'right' ), @@ -205,7 +214,8 @@ $magicWords = array( 'img_none' => array( '1', 'brak', 'none' ), 'img_center' => array( '1', 'centruj', 'center', 'centre' ), 'img_framed' => array( '1', 'ramka', 'framed', 'enframed', 'frame' ), - 'img_frameless' => array( '1', 'bezramki', 'bez ramki', 'frameless' ), + 'img_frameless' => array( '1', 'bezramki', 'bez_ramki', 'frameless' ), + 'img_page' => array( '1', 'strona=$1', 'page=$1', 'page $1' ), 'img_border' => array( '1', 'tło', 'border' ), 'img_top' => array( '1', 'góra', 'top' ), 'img_middle' => array( '1', 'środek', 'middle' ), @@ -220,10 +230,13 @@ $magicWords = array( 'ucfirst' => array( '0', 'ZWIELKIEJ:', 'ZDUŻEJ:', 'UCFIRST:' ), 'lc' => array( '0', 'MAŁE:', 'LC:' ), 'uc' => array( '0', 'WIELKIE:', 'DUŻE:', 'UC:' ), + 'newsectionlink' => array( '1', '__LINKNOWEJSEKCJI__', '__NEWSECTIONLINK__' ), 'language' => array( '0', '#JĘZYK:', '#LANGUAGE:' ), 'numberofadmins' => array( '1', 'ADMINISTRATORÓW', 'NUMBEROFADMINS' ), 'padleft' => array( '0', 'DOLEWEJ', 'PADLEFT' ), 'padright' => array( '0', 'DOPRAWEJ', 'PADRIGHT' ), + 'defaultsort' => array( '1', 'DOMYŚLNIESORTUJ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ), + 'hiddencat' => array( '1', '__KATEGORIAUKRYTA__', '__HIDDENCAT__' ), ); $messages = array( @@ -242,8 +255,7 @@ $messages = array( 'tog-editsection' => 'Możliwość edycji poszczególnych sekcji strony (link [edytuj])', 'tog-editsectiononrightclick' => 'Kliknięcie prawym klawiszem myszy na tytule sekcji rozpoczyna jej edycję (JavaScript)', 'tog-showtoc' => 'Pokazuj spis treści (na stronach z więcej niż 3 nagłówkami)', -'tog-rememberpassword' => 'Zapamiętaj hasło na tym komputerze', -'tog-editwidth' => 'Rozszerz obszar edycji do pełnej szerokości ekranu', +'tog-rememberpassword' => 'Zapamiętaj moje hasło w przeglądarce (maksymalnie przez $1 {{PLURAL:$1|dzień|dni}})', 'tog-watchcreations' => 'Dodaj do obserwowanych strony tworzone przeze mnie', 'tog-watchdefault' => 'Dodaj do obserwowanych strony, które edytuję', 'tog-watchmoves' => 'Dodaj do obserwowanych strony, które przenoszę', @@ -389,31 +401,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Dodaj temat', -'vector-action-delete' => 'Usuń', -'vector-action-move' => 'Przenieś', -'vector-action-protect' => 'Zabezpiecz', -'vector-action-undelete' => 'Odtwórz', -'vector-action-unprotect' => 'Odbezpiecz', -'vector-namespace-category' => 'Kategoria', -'vector-namespace-help' => 'Strona pomocy', -'vector-namespace-image' => 'Plik', -'vector-namespace-main' => 'Strona', -'vector-namespace-media' => 'Strona pliku', -'vector-namespace-mediawiki' => 'Komunikat', -'vector-namespace-project' => 'Strona projektu', -'vector-namespace-special' => 'Strona specjalna', -'vector-namespace-talk' => 'Dyskusja', -'vector-namespace-template' => 'Szablon', -'vector-namespace-user' => 'Strona użytkownika', -'vector-view-create' => 'Utwórz', -'vector-view-edit' => 'Edytuj', -'vector-view-history' => 'Wyświetl historię', -'vector-view-view' => 'Czytaj', -'vector-view-viewsource' => 'Tekst źródłowy', -'actions' => 'Działania', -'namespaces' => 'Przestrzenie nazw', -'variants' => 'Warianty', +'vector-action-addsection' => 'Dodaj temat', +'vector-action-delete' => 'Usuń', +'vector-action-move' => 'Przenieś', +'vector-action-protect' => 'Zabezpiecz', +'vector-action-undelete' => 'Odtwórz', +'vector-action-unprotect' => 'Odbezpiecz', +'vector-simplesearch-preference' => 'Włącz zaawansowane podpowiedzi wyszukiwania (tylko dla skórki Wektor)', +'vector-view-create' => 'Utwórz', +'vector-view-edit' => 'Edytuj', +'vector-view-history' => 'Wyświetl historię', +'vector-view-view' => 'Czytaj', +'vector-view-viewsource' => 'Tekst źródłowy', +'actions' => 'Działania', +'namespaces' => 'Przestrzenie nazw', +'variants' => 'Warianty', 'errorpagetitle' => 'Błąd', 'returnto' => 'Wróć do strony $1.', @@ -474,6 +476,9 @@ Zbyt wielu użytkowników próbuje wyświetlić tę stronę. Poczekaj chwilę przed ponowną próbą dostępu do tej strony. $1', +'pool-timeout' => 'Zbyt długi czas oczekiwania na blokadę', +'pool-queuefull' => 'Kolejka zadań jest pełna', +'pool-errorunknown' => 'Błąd nieznany', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'O {{GRAMMAR:MS.lp|{{SITENAME}}}}', @@ -638,7 +643,8 @@ Nie zapomnij dostosować [[Special:Preferences|preferencji dla {{GRAMMAR:D.lp|{{ 'yourname' => 'Nazwa {{GENDER:|użytkownika|użytkowniczki}}', 'yourpassword' => 'Hasło', 'yourpasswordagain' => 'Powtórz hasło', -'remembermypassword' => 'Zapamiętaj moje hasło na tym komputerze', +'remembermypassword' => 'Zapamiętaj moje hasło na tym komputerze (maksymalnie przez $1 {{PLURAL:$1|dzień|dni}})', +'securelogin-stick-https' => 'Po zalogowaniu utrzymuj połączenie poprzez HTTPS', 'yourdomainname' => 'Twoja domena', 'externaldberror' => 'Wystąpił błąd zewnętrznej bazy autentyfikacyjnej lub nie posiadasz uprawnień koniecznych do aktualizacji zewnętrznego konta.', 'login' => 'Zaloguj się', @@ -655,6 +661,7 @@ Nie zapomnij dostosować [[Special:Preferences|preferencji dla {{GRAMMAR:D.lp|{{ 'gotaccount' => "Masz już konto? '''$1'''.", 'gotaccountlink' => 'Zaloguj się', 'createaccountmail' => 'poprzez e‐mail', +'createaccountreason' => 'Powód', 'badretype' => 'Wprowadzone hasła różnią się między sobą.', 'userexists' => 'Wybrana przez Ciebie nazwa użytkownika jest już zajęta. Wybierz inną nazwę użytkownika.', @@ -681,6 +688,7 @@ Sprawdź poprawność pisowni.', 'wrongpasswordempty' => 'Wprowadzone hasło jest puste. Spróbuj ponownie.', 'passwordtooshort' => 'Hasło musi mieć co najmniej $1 {{PLURAL:$1|znak|znaki|znaków}}.', 'password-name-match' => 'Hasło musi być inne niż nazwa użytkownika.', +'password-login-forbidden' => 'Wykorzystanie tej nazwy użytkownika lub hasła zostało zabronione.', 'mailmypassword' => 'Wyślij mi nowe hasło poprzez e‐mail', 'passwordremindertitle' => 'Nowe tymczasowe hasło do {{GRAMMAR:D.lp|{{SITENAME}}}}', 'passwordremindertext' => 'Ktoś (prawdopodobnie Ty, spod adresu IP $1) @@ -722,6 +730,9 @@ Odczekaj chwilę zanim ponowisz próbę.', 'loginlanguagelabel' => 'Język: $1', 'suspicious-userlogout' => 'Żądanie wylogowania zostało odrzucone ponieważ wygląda na to, że zostało wysłane przez uszkodzoną przeglądarkę lub buforujący serwer proxy.', +# E-mail sending +'php-mail-error-unknown' => 'Wystąpił nieznany błąd w funkcji PHP mail()', + # Password reset dialog 'resetpass' => 'Zmień hasło', 'resetpass_announce' => '{{GENDER:|Zalogowałeś|Zalogowałaś}} się, wykorzystując tymczasowe hasło otrzymane poprzez e‐mail. @@ -775,11 +786,12 @@ Być może właśnie zmienił{{GENDER:|eś|aś|eś(‐aś)}} swoje hasło lub po 'showdiff' => 'Podgląd zmian', 'anoneditwarning' => "'''Uwaga:''' Nie jesteś {{GENDER:|zalogowany|zalogowana}}. Twój adres IP zostanie zapisany w historii edycji strony.", +'anonpreviewwarning' => "''Nie jesteś zalogowany. Jeśli zapiszesz zmiany w historii edycji strony zostanie umieszczony Twój adres IP.''", 'missingsummary' => "'''Uwaga:''' Nie wprowadz{{GENDER:|iłeś|iłaś|ono}} opisu zmian. Jeżeli nie chcesz go wprowadzać, naciśnij przycisk „Zapisz” jeszcze raz.", 'missingcommenttext' => 'Wprowadź komentarz poniżej.', -'missingcommentheader' => "'''Uwaga:''' Treść nagłówka jest pusta – uzupełnij go! -Jeśli tego nie zrobisz, Twój komentarz zostanie zapisany bez nagłówka.", +'missingcommentheader' => "'''Uwaga''' – treść tytułu lub nagłówka komentarza jest pusta. +Jeśli ponownie klikniesz „{{int:savearticle}}“, zmiany zostaną zapisane bez niego.", 'summary-preview' => 'Podgląd opisu:', 'subject-preview' => 'Podgląd nagłówka:', 'blockedtitle' => 'Użytkownik jest zablokowany', @@ -856,8 +868,12 @@ Ostatni wpis rejestru blokad jest pokazany poniżej.', 'userjsyoucanpreview' => "'''Podpowiedź:''' Użyj przycisku „Podgląd”, aby przetestować nowy kod JavaScript przed jego zapisaniem.", 'usercsspreview' => "'''Pamiętaj, że to tylko podgląd arkusza stylów CSS – nic jeszcze nie zostało zapisane!'''", 'userjspreview' => "'''Pamiętaj, że to tylko podgląd Twojego kodu JavaScript – nic jeszcze nie zostało zapisane!'''", +'sitecsspreview' => "'''Pamiętaj, że to tylko podgląd arkusza stylów CSS.''' +'''Zmiany nie zostały jeszcze zapisane!'''", +'sitejspreview' => "'''Pamiętaj, że to tylko podgląd kodu JavaScript.''' +'''Zmiany nie zostały jeszcze zapisane!'''", 'userinvalidcssjstitle' => "'''Uwaga:''' Brak skórki o nazwie „$1”. -Strony użytkownika zawierające CSS i JavaScript powinny zaczynać się małą literą, np. {{ns:user}}:Foo/monobook.css, w przeciwieństwie do nieprawidłowego {{ns:user}}:Foo/Monobook.css.", +Strony użytkownika zawierające CSS i JavaScript powinny zaczynać się małą literą, np. {{ns:user}}:Foo/vector.css, w przeciwieństwie do nieprawidłowego {{ns:user}}:Foo/Vector.css.", 'updated' => '(Zmodyfikowano)', 'note' => "'''Uwaga:'''", 'previewnote' => "'''To jest tylko podgląd – zmiany nie zostały jeszcze zapisane!'''", @@ -897,7 +913,6 @@ Zapisując swoją edycję, oświadczasz, że ten tekst jest Twoim dziełem lub p Jeśli nie chcesz, żeby Twój tekst był dowolnie zmieniany przez każdego i rozpowszechniany bez ograniczeń, nie umieszczaj go tutaj.
    Zapisując swoją edycję, oświadczasz, że ten tekst jest Twoim dziełem lub pochodzi z materiałów dostępnych na warunkach ''domeny publicznej'' lub kompatybilnych (zobacz także $1). '''PROSZĘ NIE WPROWADZAĆ MATERIAŁÓW CHRONIONYCH PRAWEM AUTORSKIM BEZ POZWOLENIA WŁAŚCICIELA!'''", -'longpagewarning' => "'''Ta strona ma {{PLURAL:$1|1 kilobajt|$1 kilobajty|$1 kilobajtów}}. Jeśli to możliwe, spróbuj podzielić tekst na mniejsze części.'''", 'longpageerror' => "'''Błąd! Wprowadzony przez Ciebie tekst ma {{PLURAL:$1|1 kilobajt|$1 kilobajty|$1 kilobajtów}}. Długość tekstu nie może przekraczać {{PLURAL:$2|1 kilobajt|$2 kilobajty|$2 kilobajtów}}. Tekst nie może być zapisany.'''", 'readonlywarning' => "'''Uwaga! Baza danych została zablokowana do celów administracyjnych. W tej chwili nie można zapisać nowej wersji strony. Zapisz jej treść do pliku, używając wytnij i wklej, aby zachować na później.''' @@ -1075,6 +1090,8 @@ $1", 'logdelete-failure' => "'''Widoczność rejestru nie może zostać ustawiona – ''' $1", 'revdel-restore' => 'zmień widoczność', +'revdel-restore-deleted' => 'usunięte wersje', +'revdel-restore-visible' => 'widoczne wersje', 'pagehist' => 'Historia edycji strony', 'deletedhist' => 'Usunięta historia edycji', 'revdelete-content' => 'zawartość', @@ -1141,11 +1158,13 @@ Użycie linków nawigacyjnych kasuje wybór w kolumnie.', # Diffs 'history-title' => 'Historia edycji „$1”', 'difference' => '(Różnice między wersjami)', +'difference-multipage' => '(Różnica między stronami)', 'lineno' => 'Linia $1:', 'compareselectedversions' => 'porównaj wybrane wersje', 'showhideselectedversions' => 'Pokaż lub ukryj zaznaczone wersje', 'editundo' => 'anuluj edycję', -'diff-multi' => '(Nie pokazano $1 {{PLURAL:$1|wersji|wersji}} pomiędzy niniejszymi.)', +'diff-multi' => '(Nie pokazano $1 wersji {{PLURAL:$1|utworzonej|utworzonych}} przez {{PLURAL:$2|jednego użytkownika|$2 użytkowników}})', +'diff-multi-manyusers' => '(Nie pokazano $1 {{PLURAL:$1|pośredniej wersji utworzonej|pośrednich wersji utworzonych}} przez {{PLURAL:$2|jednego użytkownika|$2 użytkowników}})', # Search results 'searchresults' => 'Wyniki wyszukiwania', @@ -1180,6 +1199,7 @@ Użycie linków nawigacyjnych kasuje wybór w kolumnie.', 'searchprofile-everything-tooltip' => 'Szukanie w całej zawartości (także strony dyskusji)', 'searchprofile-advanced-tooltip' => 'Szukanie w wybranych przestrzeniach nazw', 'search-result-size' => '$1 ({{PLURAL:$2|1 słowo|$2 słowa|$2 słów}})', +'search-result-category-size' => '{{PLURAL:$1|1 element|$1 elementy|$1 elementów}} ({{PLURAL:$2|1 kategoria|$2 kategorie|$2 kategorii}}, {{PLURAL:$3|1 plik|$3 pliki|$3 plików}})', 'search-result-score' => 'Trafność: $1%', 'search-redirect' => '(przekierowanie $1)', 'search-section' => '(sekcja $1)', @@ -1256,6 +1276,7 @@ Jednak informacje o treści {{GRAMMAR:D.lp|{{SITENAME}}}} mogą być w Google ni 'contextlines' => 'Pierwsze wiersze stron', 'contextchars' => 'Litery kontekstu w linijce', 'stub-threshold' => 'Maksymalny (w bajtach) rozmiar strony oznaczanej jako zalążek (stub)', +'stub-threshold-disabled' => 'Wyłączone', 'recentchangesdays' => 'Liczba dni prezentowanych w ostatnich zmianach', 'recentchangesdays-max' => '(maksymalnie $1 {{PLURAL:$1|dzień|dni}})', 'recentchangescount' => 'Domyślna liczba wyświetlanych edycji', @@ -1289,6 +1310,7 @@ Wygenerowany losowo klucz, którego możesz użyć to $1', 'prefs-files' => 'Pliki', 'prefs-custom-css' => 'własny CSS', 'prefs-custom-js' => 'własny JavaScript', +'prefs-common-css-js' => 'Wspólny CSS/JS dla wszystkich skórek', 'prefs-reset-intro' => 'Na tej stronie można przywrócić domyślne ustawienia preferencji dla tej witryny. Tej operacji nie można później cofnąć.', 'prefs-emailconfirm-label' => 'Potwierdzenie adresu e‐mail –', @@ -1327,9 +1349,15 @@ Umożliwi również innym użytkownikom skontaktowanie się z Tobą poprzez odpo 'prefs-advancedrendering' => 'Zaawansowane', 'prefs-advancedsearchoptions' => 'Zaawansowane', 'prefs-advancedwatchlist' => 'Zaawansowane', -'prefs-display' => 'Opcje wyświetlania', +'prefs-displayrc' => 'Opcje wyświetlania', +'prefs-displaysearchoptions' => 'Opcje wyświetlania', +'prefs-displaywatchlist' => 'Opcje wyświetlania', 'prefs-diffs' => 'Zmiany', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Wygląda na prawidłowy', +'email-address-validity-invalid' => 'Wymagany jest prawidłowy adres!', + # User rights 'userrights' => 'Zarządzaj uprawnieniami użytkowników', 'userrights-lookup-user' => 'Zarządzaj grupami użytkownika', @@ -1413,6 +1441,7 @@ Umożliwi również innym użytkownikom skontaktowanie się z Tobą poprzez odpo 'right-hideuser' => 'Blokowanie użytkownika, niewidoczne publicznie', 'right-ipblock-exempt' => 'Obejście blokad, automatycznych blokad i blokad zakresów, adresów IP', 'right-proxyunbannable' => 'Obejście automatycznych blokad proxy', +'right-unblockself' => 'Odblokowanie samego siebie', 'right-protect' => 'Zmiana poziomu zabezpieczenia i dostęp do edycji zabezpieczonych stron', 'right-editprotected' => 'Dostęp do edycji zabezpieczonych stron (bez zabezpieczenia dziedziczonego)', 'right-editinterface' => 'Edycja interfejsu użytkownika', @@ -1435,7 +1464,6 @@ Umożliwi również innym użytkownikom skontaktowanie się z Tobą poprzez odpo 'right-siteadmin' => 'Blokowanie i odblokowywanie bazy danych', 'right-reset-passwords' => 'Zerowanie haseł innych użytkowników', 'right-override-export-depth' => 'Eksport stron wraz z linkowanymi do głębokości 5 linków', -'right-versiondetail' => 'Podgląd szczegółowych informacji o wersji oprogramowania', 'right-sendemail' => 'Wysyłanie e‐maili do innych użytkowników', # User rights log @@ -1486,14 +1514,9 @@ Umożliwi również innym użytkownikom skontaktowanie się z Tobą poprzez odpo 'recentchanges-legend' => 'Opcje ostatnich zmian', 'recentchangestext' => 'Ta strona przedstawia historię ostatnich zmian w tej wiki.', 'recentchanges-feed-description' => 'Obserwuj najświeższe zmiany w tej wiki.', -'recentchanges-label-legend' => 'Legenda: $1.', -'recentchanges-legend-newpage' => '$1 – nowa strona', 'recentchanges-label-newpage' => 'W tej edycji utworzono nową stronę', -'recentchanges-legend-minor' => '$1 – drobna zmiana', 'recentchanges-label-minor' => 'To jest drobna zmiana', -'recentchanges-legend-bot' => '$1 – edycja bota', 'recentchanges-label-bot' => 'Ta edycja została wykonana przez bota', -'recentchanges-legend-unpatrolled' => '$1 – niesprawdzona edycja', 'recentchanges-label-unpatrolled' => 'Ta edycja nie została jeszcze sprawdzona', 'rcnote' => "Poniżej {{PLURAL:$1|znajduje się '''1''' ostatnia zmiana wykonana|znajdują się ostatnie '''$1''' zmiany wykonane|znajduje się ostatnich '''$1''' zmian wykonanych}} w ciągu {{PLURAL:$2|ostatniego dnia|ostatnich '''$2''' dni}}, licząc od $5 dnia $4.", 'rcnotefrom' => "Poniżej pokazano zmiany wykonane po '''$2''' (nie więcej niż '''$1''' pozycji).", @@ -1540,6 +1563,9 @@ Strony z [[Special:Watchlist|listy obserwowanych]] są '''wytłuszczone'''.", 'upload_directory_missing' => 'Katalog dla przesyłanych plików ($1) nie istnieje i nie może zostać utworzony przez serwer WWW.', 'upload_directory_read_only' => 'Serwer nie może zapisywać do katalogu ($1) przeznaczonego na przesyłane pliki.', 'uploaderror' => 'Błąd wysyłania', +'upload-recreate-warning' => "'''Uwaga – plik o tej nazwie został wcześniej usunięty lub przrniesiony.''' + +Poniżej znajduje się rejestr usunięć i zmian nazwy tej strony:", 'uploadtext' => "Użyj poniższego formularza do przesłania plików. Jeśli chcesz przejrzeć lub przeszukać dotychczas przesłane pliki, przejdź do [[Special:FileList|listy plików]]. Każde przesłanie zostaje odnotowane w [[Special:Log/upload|rejestrze przesyłanych plików]], a usunięcie w [[Special:Log/delete|rejestrze usuniętych]]. @@ -1573,6 +1599,17 @@ Zmień nazwę pliku i prześlij go ponownie.', 'filetype-unwanted-type' => "'''„.$1”''' nie jest zalecanym typem pliku. Pożądane są pliki w {{PLURAL:$3|formacie|formatach}} $2.", 'filetype-banned-type' => "'''„.$1”''' jest niedozwolonym typem pliku. Dopuszczalne są pliki w {{PLURAL:$3|formacie|formatach}} $2.", 'filetype-missing' => 'Plik nie ma rozszerzenia (np. „.jpg”).', +'empty-file' => 'Przesłany przez Ciebie plik jest pusty.', +'file-too-large' => 'Przesłany przez Ciebie plik jest zbyt duży.', +'filename-tooshort' => 'Nazwa pliku jest zbyt krótka.', +'filetype-banned' => 'Zabroniony format pliku.', +'verification-error' => 'Plik nie przeszedł pozytywnie weryfikacji.', +'hookaborted' => 'Zmiana, którą próbowałeś wykonać została przerwana przez hak rozszerzenia.', +'illegal-filename' => 'Niedopuszczalna nazwa pliku.', +'overwrite' => 'Nadpisanie istniejącego pliku nie jest dopuszczalne.', +'unknown-error' => 'Wystąpił nieznany błąd.', +'tmp-create-error' => 'Błąd utworzenia pliku tymczasowego.', +'tmp-write-error' => 'Błąd zapisu pliku tymczasowego.', 'large-file' => 'Zalecane jest aby rozmiar pliku nie był większy niż {{PLURAL:$1|1 bajt|$1 bajty|$1 bajtów}}. Plik ma rozmiar {{PLURAL:$2|1 bajt|$2 bajty|$2 bajtów}}.', 'largefileserver' => 'Plik jest większy niż maksymalny dozwolony rozmiar.', @@ -1602,13 +1639,14 @@ Cofnij się i załaduj plik pod inną nazwą. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Ten plik jest kopią {{PLURAL:$1|pliku|następujących plików:}}', 'file-deleted-duplicate' => 'Identyczny do tego plik ([[:$1]]) został wcześniej usunięty. Sprawdź historię usunięć tamtego pliku zanim prześlesz go ponownie.', -'successfulupload' => 'Przesłanie pliku powiodło się', 'uploadwarning' => 'Ostrzeżenie o przesyłaniu', 'uploadwarning-text' => 'Zmień poniższy opis pliku i spróbuj ponownie.', 'savefile' => 'Zapisz plik', 'uploadedimage' => 'przesłał [[$1]]', 'overwroteimage' => 'przesłano nową wersję pliku „[[$1]]“', 'uploaddisabled' => 'Przesyłanie plików wyłączone', +'copyuploaddisabled' => 'Przesyłanie poprzez podanie adres URL jest wyłączone.', +'uploadfromurl-queued' => 'Żądanie przesłania pliku zostało dołączone do kolejki.', 'uploaddisabledtext' => 'Możliwość przesyłania plików została wyłączona.', 'php-uploaddisabledtext' => 'Przesyłanie plików PHP zostało zablokowane. Sprawdź ustawienie „file_uploads”.', 'uploadscripted' => 'Plik zawiera kod HTML lub skrypt, który może zostać błędnie zinterpretowany przez przeglądarkę internetową.', @@ -1643,6 +1681,14 @@ JD # Jenoptik MGP # Pentax PICT # wiele różnych # ', +'upload-success-subj' => 'Przesłanie pliku powiodło się', +'upload-success-msg' => 'Przesłano plik z [$2]. Jest dostępny tutaj – [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problem z przesłaniem pliku', +'upload-failure-msg' => 'Wystąpił problem przy przesyłaniu pliku z [$2]: + +$1', +'upload-warning-subj' => 'Ostrzeżenie dotyczące przesyłania', +'upload-warning-msg' => 'Wystąpił problem z przesyłaniem z [$2]. Możesz wrócić do [[Special:Upload/stash/$1|formularza przesłania]] w celu rozwiązania tego problemu.', 'upload-proto-error' => 'Nieprawidłowy protokół', 'upload-proto-error-text' => 'Zdalne przesyłanie plików wymaga podania adresu URL zaczynającego się od http:// lub ftp://.', @@ -1707,6 +1753,7 @@ Kliknięcie w nagłówek kolumny zmienia sposób sortowania.', 'listfiles_search_for' => 'Szukaj pliku o nazwie', 'imgfile' => 'plik', 'listfiles' => 'Lista plików', +'listfiles_thumb' => 'Miniatura', 'listfiles_date' => 'Data', 'listfiles_name' => 'Nazwa', 'listfiles_user' => 'Użytkownik', @@ -1821,8 +1868,8 @@ Sprawdź inne linki do szablonów, zanim usuniesz tę stronę.', 'statistics-edits' => 'Edycje wykonane od powstania {{GRAMMAR:D.lp|{{SITENAME}}}}', 'statistics-edits-average' => 'Średnia liczba edycji na stronę', 'statistics-views-total' => 'Całkowita liczba odwiedzin', +'statistics-views-total-desc' => 'Odsłony stron nieistniejących oraz specjalnych nie zostały uwzględnione.', 'statistics-views-peredit' => 'Liczba odwiedzin na edycję', -'statistics-jobqueue' => 'Rozmiar [http://www.mediawiki.org/wiki/Manual:Job_queue kolejki zadań]', 'statistics-users' => 'Zarejestrowanych [[Special:ListUsers|użytkowników]]', 'statistics-users-active' => 'Aktywnych użytkowników', 'statistics-users-active-desc' => 'Użytkownicy, którzy byli aktywni w ciągu {{PLURAL:$1|ostatniego dnia|ostatnich $1 dni}}', @@ -1837,7 +1884,7 @@ Strona uznawana jest za ujednoznaczniającą, jeśli zawiera szablon linkowany p 'doubleredirects' => 'Podwójne przekierowania', 'doubleredirectstext' => 'Lista zawiera strony z przekierowaniami do stron, które przekierowują do innej strony. Każdy wiersz zawiera linki do pierwszego i drugiego przekierowania oraz link, do którego prowadzi drugie przekierowanie. Ostatni link prowadzi zazwyczaj do strony, do której powinna w rzeczywistości przekierowywać pierwsza strona. -Skreślenie oznacza naprawienie przekierowania.', +Skreślenie oznacza naprawienie przekierowania.', 'double-redirect-fixed-move' => 'Naprawa podwójnego przekierowania [[$1]] → [[$2]]', 'double-redirect-fixer' => 'Naprawiacz przekierowań', @@ -1860,6 +1907,8 @@ Każdy wiersz zawiera linki do pierwszego i drugiego przekierowania oraz link, d 'nmembers' => '$1 {{PLURAL:$1|element|elementy|elementów}}', 'nrevisions' => '$1 {{PLURAL:$1|wersja|wersje|wersji}}', 'nviews' => 'odwiedzono $1 {{PLURAL:$1|raz|razy}}', +'nimagelinks' => 'Używane na $1 {{PLURAL:$1|stronie|stronach}}', +'ntransclusions' => 'używany na $1 {{PLURAL:$1|stronie|stronach}}', 'specialpage-empty' => 'Ta strona raportu jest pusta.', 'lonelypages' => 'Porzucone strony', 'lonelypagestext' => 'Do poniższych stron nie linkuje żadna inna strona lub nie są one dołączone do innych stron w {{GRAMMAR:MS.lp|{{SITENAME}}}}.', @@ -2016,34 +2065,40 @@ Sprawdź stronę z [[{{MediaWiki:Listgrouprights-helppage}}|dodatkowymi informac 'listgrouprights-removegroup-self-all' => 'Może usunąć własne konto ze wszystkich grup', # E-mail user -'mailnologin' => 'Brak adresu', -'mailnologintext' => 'Musisz się [[Special:UserLogin|zalogować]] i mieć wpisany aktualny adres e‐mailowy w swoich [[Special:Preferences|preferencjach]], aby móc wysłać e‐mail do innego użytkownika.', -'emailuser' => 'Wyślij e‐mail do tego użytkownika', -'emailpage' => 'Wyślij e‐mail do użytkownika', -'emailpagetext' => 'Możesz użyć poniższego formularza, aby wysłać wiadomość e‐mail do tego użytkownika. +'mailnologin' => 'Brak adresu', +'mailnologintext' => 'Musisz się [[Special:UserLogin|zalogować]] i mieć wpisany aktualny adres e‐mailowy w swoich [[Special:Preferences|preferencjach]], aby móc wysłać e‐mail do innego użytkownika.', +'emailuser' => 'Wyślij e‐mail do tego użytkownika', +'emailpage' => 'Wyślij e‐mail do użytkownika', +'emailpagetext' => 'Możesz użyć poniższego formularza, aby wysłać wiadomość e‐mail do tego użytkownika. Adres e‐mailowy, który został przez Ciebie wprowadzony w [[Special:Preferences|Twoich preferencjach]], zostanie umieszczony w polu „Od”, dzięki czemu odbiorca będzie mógł Ci odpowiedzieć.', -'usermailererror' => 'Moduł obsługi poczty zwrócił błąd:', -'defemailsubject' => 'Wiadomość z {{GRAMMAR:D.lp|{{SITENAME}}}}', -'noemailtitle' => 'Brak adresu e‐mail', -'noemailtext' => 'Ten użytkownik nie podał poprawnego adresu e‐mail.', -'nowikiemailtitle' => 'Brak zezwolenia na otrzymywanie e‐maili', -'nowikiemailtext' => 'Ten użytkownik nie chce otrzymywać wiadomości e‐mail od innych użytkowników.', -'email-legend' => 'Wyślij e‐mail do innego użytkownika {{GRAMMAR:D.lp|{{SITENAME}}}}', -'emailfrom' => 'Od', -'emailto' => 'Do', -'emailsubject' => 'Temat', -'emailmessage' => 'Wiadomość', -'emailsend' => 'Wyślij', -'emailccme' => 'Wyślij mi kopię mojej wiadomości.', -'emailccsubject' => 'Kopia Twojej wiadomości do $1: $2', -'emailsent' => 'Wiadomość została wysłana', -'emailsenttext' => 'Twoja wiadomość została wysłana.', -'emailuserfooter' => 'Wiadomość e‐mail została wysłana z {{GRAMMAR:D.lp|{{SITENAME}}}} do $2 przez $1 z użyciem „Wyślij e‐mail do tego użytkownika”.', +'usermailererror' => 'Moduł obsługi poczty zwrócił błąd:', +'defemailsubject' => 'Wiadomość z {{GRAMMAR:D.lp|{{SITENAME}}}}', +'usermaildisabled' => 'E‐mail użytkownika jest wyłączony', +'usermaildisabledtext' => 'Nie możesz wysyłać e‐maili do innych użytkowników tej wiki', +'noemailtitle' => 'Brak adresu e‐mail', +'noemailtext' => 'Ten użytkownik nie podał poprawnego adresu e‐mail.', +'nowikiemailtitle' => 'Brak zezwolenia na otrzymywanie e‐maili', +'nowikiemailtext' => 'Ten użytkownik nie chce otrzymywać wiadomości e‐mail od innych użytkowników.', +'email-legend' => 'Wyślij e‐mail do innego użytkownika {{GRAMMAR:D.lp|{{SITENAME}}}}', +'emailfrom' => 'Od', +'emailto' => 'Do', +'emailsubject' => 'Temat', +'emailmessage' => 'Wiadomość', +'emailsend' => 'Wyślij', +'emailccme' => 'Wyślij mi kopię mojej wiadomości.', +'emailccsubject' => 'Kopia Twojej wiadomości do $1: $2', +'emailsent' => 'Wiadomość została wysłana', +'emailsenttext' => 'Twoja wiadomość została wysłana.', +'emailuserfooter' => 'Wiadomość e‐mail została wysłana z {{GRAMMAR:D.lp|{{SITENAME}}}} do $2 przez $1 z użyciem „Wyślij e‐mail do tego użytkownika”.', + +# User Messenger +'usermessage-summary' => 'Pozostawianie komunikatu systemowego.', +'usermessage-editor' => 'Nadawca komunikatów systemowych', # Watchlist 'watchlist' => 'Obserwowane', 'mywatchlist' => 'Obserwowane', -'watchlistfor' => "(raport dla użytkownika '''$1''')", +'watchlistfor2' => 'Dla $1 $2', 'nowatchlist' => 'Lista obserwowanych przez Ciebie stron jest pusta.', 'watchlistanontext' => '$1, aby obejrzeć lub edytować elementy listy obserwowanych.', 'watchnologin' => 'Nie jesteś zalogowany', @@ -2100,8 +2155,6 @@ wiki – $PAGEEDITOR_WIKI W przypadku kolejnych zmian nowe powiadomienia nie zostaną wysłane, dopóki nie odwiedzisz tej strony. Możesz także zresetować wszystkie flagi powiadomień na swojej liście stron obserwowanych. -$NEWPAGE - Wiadomość z systemu powiadomień {{GRAMMAR:D.lp|{{SITENAME}}}} -- @@ -2164,7 +2217,10 @@ Autorem ostatniej zmiany jest teraz [[User:$3|$3]] ([[User talk:$3|dyskusja]]{{i 'revertpage-nouser' => 'Wycofano edycje (nazwa użytkownika usunięta). Autor przywróconej wersji to [[User:$1|$1]].', 'rollback-success' => 'Wycofano edycje użytkownika $1. Przywrócono ostatnią wersję autorstwa $2.', -'sessionfailure' => 'Wystąpił problem z weryfikacją zalogowania. + +# Edit tokens +'sessionfailure-title' => 'Błąd sesji', +'sessionfailure' => 'Wystąpił problem z weryfikacją zalogowania. Polecenie zostało anulowane, aby uniknąć przechwycenia sesji. Naciśnij „wstecz” w przeglądarce, przeładuj stronę, po czym ponownie wydaj polecenie.', @@ -2298,18 +2354,22 @@ $1', 'month' => 'Do miesiąca (włącznie)', 'year' => 'Do roku (włącznie)', -'sp-contributions-newbies' => 'Pokaż wyłącznie wkład nowych użytkowników', -'sp-contributions-newbies-sub' => 'Dla nowych użytkowników', -'sp-contributions-newbies-title' => 'Wkład nowych użytkowników', -'sp-contributions-blocklog' => 'blokady', -'sp-contributions-deleted' => 'usunięty wkład użytkownika', -'sp-contributions-logs' => 'rejestry', -'sp-contributions-talk' => 'dyskusja', -'sp-contributions-userrights' => 'zarządzanie uprawnieniami użytkownika', -'sp-contributions-blocked-notice' => 'To konto użytkownika jest obecnie zablokowane. Ostatni wpis rejestru blokad jest pokazany poniżej.', -'sp-contributions-search' => 'Szukaj wkładu', -'sp-contributions-username' => 'Adres IP lub nazwa użytkownika', -'sp-contributions-submit' => 'Szukaj', +'sp-contributions-newbies' => 'Pokaż wyłącznie wkład nowych użytkowników', +'sp-contributions-newbies-sub' => 'Dla nowych użytkowników', +'sp-contributions-newbies-title' => 'Wkład nowych użytkowników', +'sp-contributions-blocklog' => 'blokady', +'sp-contributions-deleted' => 'usunięty wkład użytkownika', +'sp-contributions-uploads' => 'przesłane pliki', +'sp-contributions-logs' => 'rejestry', +'sp-contributions-talk' => 'dyskusja', +'sp-contributions-userrights' => 'zarządzanie uprawnieniami użytkownika', +'sp-contributions-blocked-notice' => 'To konto użytkownika jest obecnie zablokowane. Ostatni wpis rejestru blokad jest pokazany poniżej.', +'sp-contributions-blocked-notice-anon' => 'Ten adres IP jest obecnie zablokowany. +Poniżej znajduje się ostatni wpis w rejestrze blokowania.', +'sp-contributions-search' => 'Szukaj wkładu', +'sp-contributions-username' => 'Adres IP lub nazwa użytkownika', +'sp-contributions-toponly' => 'Pokaż wyłącznie ostatnie wersje', +'sp-contributions-submit' => 'Szukaj', # What links here 'whatlinkshere' => 'Linkujące', @@ -2372,7 +2432,6 @@ Przejdź do [[Special:IPBlockList|listy zablokowanych adresów IP]], by przejrze 'ipb-edit-dropdown' => 'Edytuj listę przyczyn blokady', 'ipb-unblock-addr' => 'Odblokuj $1', 'ipb-unblock' => 'Odblokuj użytkownika lub adres IP', -'ipb-blocklist-addr' => 'Istniejące blokady dla $1', 'ipb-blocklist' => 'Zobacz istniejące blokady', 'ipb-blocklist-contribs' => 'Wkład $1', 'unblockip' => 'Odblokuj użytkownika', @@ -2445,6 +2504,8 @@ O tym poważnym problemie dotyczącym bezpieczeństwa należy poinformować dost Nie możesz utworzyć konta', 'cant-block-while-blocked' => 'Nie możesz zablokować innych użytkowników, kiedy sam jesteś zablokowany.', 'cant-see-hidden-user' => 'Konto użytkownika, które próbujesz zablokować, zostało już zablokowane oraz ukryte. Bez uprawnienia do ukrywania kont nie możesz zobaczyć oraz modyfikować blokady tego użytkownika.', +'ipbblocked' => 'Nie możesz blokować i odblokowywać innych użytkowników, ponieważ sam jesteś zablokowany', +'ipbnounblockself' => 'Nie możesz odblokować samego siebie', # Developer tools 'lockdb' => 'Zablokuj bazę danych', @@ -2478,6 +2539,17 @@ Jesteś odpowiedzialny za to, by linki w dalszym ciągu pokazywały tam, gdzie p Strona '''nie''' zostanie przeniesiona, jeśli strona o nowej nazwie już istnieje, chyba że jest pusta lub jest przekierowaniem i ma pustą historię edycji. To oznacza, że błędną operację zmiany nazwy można bezpiecznie odwrócić, zmieniając nową nazwę strony na poprzednią, i że nie można nadpisać istniejącej strony. +'''UWAGA!''' +Może to być drastyczna lub nieprzewidywalna zmiana w przypadku popularnych stron. +Upewnij się co do konsekwencji tej operacji, zanim się na nią zdecydujesz.", +'movepagetext-noredirectfixer' => "Za pomocą poniższego formularza zmienisz nazwę strony, przenosząc jednocześnie jej historię. +Pod starym tytułem zostanie umieszczona strona przekierowująca. +Upewnij się po przeniesieniu strony, czy nie powstały [[Special:DoubleRedirects|podwójne]] lub [[Special:BrokenRedirects|zerwane przekierowania]]. +Jesteś odpowiedzialny za to, by linki w dalszym ciągu pokazywały tam, gdzie powinny. + +Strona '''nie''' zostanie przeniesiona, jeśli strona o nowej nazwie już istnieje, chyba że jest pusta lub jest przekierowaniem i ma pustą historię edycji. +To oznacza, że błędną operację zmiany nazwy można bezpiecznie odwrócić, zmieniając nową nazwę strony na poprzednią, i że nie można nadpisać istniejącej strony. + '''UWAGA!''' Może to być drastyczna lub nieprzewidywalna zmiana w przypadku popularnych stron. Upewnij się co do konsekwencji tej operacji, zanim się na nią zdecydujesz.", @@ -2537,6 +2609,7 @@ Strony nie można przenieść na nią samą.', 'immobile-source-page' => 'Tej strony nie można przenieść.', 'immobile-target-page' => 'Nie można przenieść pod wskazany tytuł.', 'imagenocrossnamespace' => 'Nie można przenieść grafiki do przestrzeni nazw nie przeznaczonej dla grafik', +'nonfile-cannot-move-to-file' => 'Nie można przenieść obiektu nie będącego plikiem do przestrzeni nazw „{{ns:file}}“', 'imagetypemismatch' => 'Nowe rozszerzenie nazwy pliku jest innego typu niż zawartość', 'imageinvalidfilename' => 'Nazwa pliku docelowego jest nieprawidłowa', 'fix-double-redirects' => 'Zaktualizuj wszystkie przekierowania wskazujące na stary tytuł', @@ -2617,6 +2690,7 @@ Zapisz go na swoim dysku, a następnie prześlij go tutaj.', 'importstart' => 'Trwa importowanie stron...', 'import-revision-count' => '$1 {{PLURAL:$1|wersja|wersje|wersji}}', 'importnopages' => 'Brak stron do importu.', +'imported-log-entries' => 'Zaimportowano $1 {{PLURAL:$1|wpis|wpisy|wpisów}} rejestru.', 'importfailed' => 'Import nie powiódł się: $1', 'importunknownsource' => 'Nieznany format importowanych danych', 'importcantopen' => 'Nie można otworzyć importowanego pliku', @@ -2711,6 +2785,8 @@ Brak katalogu dla plików tymczasowych.', 'tooltip-rollback' => '„cofnij” jednym kliknięciem wycofuje wszystkie zmiany tej strony wykonane przez ostatniego edytującego.', 'tooltip-undo' => '„anuluj edycję” wycofuje tę edycję i otwiera okno edycji w trybie podglądu. Pozwala na wpisanie powodu w opisie zmian.', +'tooltip-preferences-save' => 'Zapisz preferencje', +'tooltip-summary' => 'Wpisz krótki opis', # Stylesheets 'common.css' => '/* Umieszczony tutaj kod CSS zostanie zastosowany we wszystkich skórkach */', @@ -2843,14 +2919,17 @@ Jeśli go otworzysz, możesz zarazić swój system.", 'imagemaxsize' => "Ograniczenie wielkości obrazków
    ''(na stronach opisu plików)''", 'thumbsize' => 'Rozmiar miniaturki', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|strona|strony|stron}}', -'file-info' => '(rozmiar pliku: $1, typ MIME: $2)', -'file-info-size' => '($1 × $2 pikseli, rozmiar pliku: $3, typ MIME: $4)', +'file-info' => 'rozmiar pliku: $1, typ MIME: $2', +'file-info-size' => '$1 × $2 pikseli, rozmiar pliku: $3, typ MIME: $4', 'file-nohires' => 'Grafika w wyższej rozdzielczości jest niedostępna.', -'svg-long-desc' => '(Plik SVG, nominalnie $1 × $2 pikseli, rozmiar pliku: $3)', +'svg-long-desc' => 'Plik SVG, nominalnie $1 × $2 pikseli, rozmiar pliku: $3', 'show-big-image' => 'Pełna rozdzielczość', 'show-big-image-thumb' => 'Rozmiar podglądu: $1 × $2 pikseli', 'file-info-gif-looped' => 'zapętlony', 'file-info-gif-frames' => '$1 {{PLURAL:$1|klatka|klatki|klatek}}', +'file-info-png-looped' => 'zapętlony', +'file-info-png-repeat' => 'powtarzany $1 {{PLURAL:$1|raz|razy}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|klatka|klatki|klatek}}', # Special:NewFiles 'newimages' => 'Najnowsze pliki', @@ -3013,6 +3092,7 @@ Pozostałe pola zostaną domyślnie ukryte. 'exif-gpsareainformation' => 'Nazwa przestrzeni GPS', 'exif-gpsdatestamp' => 'Data GPS', 'exif-gpsdifferential' => 'Korekcja różnicy GPS', +'exif-objectname' => 'Krótki tytuł', # EXIF attributes 'exif-compression-1' => 'nieskompresowany', @@ -3175,30 +3255,30 @@ Pozostałe pola zostaną domyślnie ukryte. 'limitall' => 'wszystkie', # E-mail address confirmation -'confirmemail' => 'Potwierdzanie adresu e‐mail', -'confirmemail_noemail' => 'Nie {{GENDER:|podałeś|podałaś}} prawidłowego adresu e‐mail w [[Special:Preferences|preferencjach]].', -'confirmemail_text' => 'Projekt {{SITENAME}} wymaga weryfikacji adresu e‐mail przed użyciem funkcji korzystających z poczty. +'confirmemail' => 'Potwierdzanie adresu e‐mail', +'confirmemail_noemail' => 'Nie {{GENDER:|podałeś|podałaś}} prawidłowego adresu e‐mail w [[Special:Preferences|preferencjach]].', +'confirmemail_text' => 'Projekt {{SITENAME}} wymaga weryfikacji adresu e‐mail przed użyciem funkcji korzystających z poczty. Wciśnij przycisk poniżej aby wysłać na swój adres list z linkiem do strony WWW. List będzie zawierał link do strony, w którym zakodowany będzie identyfikator. Otwórz ten link w przeglądarce, czym potwierdzisz, że jesteś użytkownikiem tego adresu e‐mail.', -'confirmemail_pending' => 'Kod potwierdzenia został właśnie do Ciebie wysłany. Jeśli zarejestrował{{GENDER:|eś|aś|eś(‐aś)}} się niedawno, poczekaj kilka minut na dostarczenie wiadomości przed kolejną prośbą o wysłanie kodu.', -'confirmemail_send' => 'Wyślij kod potwierdzenia', -'confirmemail_sent' => 'Wiadomość e‐mail z kodem uwierzytelniającym została wysłana.', -'confirmemail_oncreate' => 'Link z kodem potwierdzenia został wysłany na Twój adres e‐mail. +'confirmemail_pending' => 'Kod potwierdzenia został właśnie do Ciebie wysłany. Jeśli zarejestrował{{GENDER:|eś|aś|eś(‐aś)}} się niedawno, poczekaj kilka minut na dostarczenie wiadomości przed kolejną prośbą o wysłanie kodu.', +'confirmemail_send' => 'Wyślij kod potwierdzenia', +'confirmemail_sent' => 'Wiadomość e‐mail z kodem uwierzytelniającym została wysłana.', +'confirmemail_oncreate' => 'Link z kodem potwierdzenia został wysłany na Twój adres e‐mail. Kod ten nie jest wymagany do zalogowania się, jednak będziesz musiał go aktywować otwierając, otrzymany link, w przeglądarce przed włączeniem niektórych opcji e‐mail na wiki.', -'confirmemail_sendfailed' => 'Nie udało się wysłać potwierdzającej wiadomości e‐mail. +'confirmemail_sendfailed' => 'Nie udało się wysłać potwierdzającej wiadomości e‐mail. Sprawdź poprawność adresu pod kątem literówki. System pocztowy zwrócił komunikat: $1', -'confirmemail_invalid' => 'Błędny kod potwierdzenia. +'confirmemail_invalid' => 'Błędny kod potwierdzenia. Kod może być przedawniony.', -'confirmemail_needlogin' => 'Musisz $1 aby potwierdzić adres email.', -'confirmemail_success' => 'Adres e‐mail został potwierdzony. +'confirmemail_needlogin' => 'Musisz $1 aby potwierdzić adres email.', +'confirmemail_success' => 'Adres e‐mail został potwierdzony. Możesz [[Special:UserLogin|zalogować się]] i korzystać z szerszego wachlarza funkcji wiki.', -'confirmemail_loggedin' => 'Twój adres email został zweryfikowany.', -'confirmemail_error' => 'Pojawiły się błędy przy zapisywaniu potwierdzenia.', -'confirmemail_subject' => '{{SITENAME}} – weryfikacja adresu e‐mail', -'confirmemail_body' => 'Ktoś łącząc się z komputera o adresie IP $1 +'confirmemail_loggedin' => 'Twój adres email został zweryfikowany.', +'confirmemail_error' => 'Pojawiły się błędy przy zapisywaniu potwierdzenia.', +'confirmemail_subject' => '{{SITENAME}} – weryfikacja adresu e‐mail', +'confirmemail_body' => 'Ktoś łącząc się z komputera o adresie IP $1 zarejestrował w {{GRAMMAR:MS.lp|{{SITENAME}}}} konto „$2” podając niniejszy adres e‐mail. Aby potwierdzić, że to Ty {{GENDER:|zarejestrowałeś|zarejestrowałaś}} to konto oraz, aby włączyć @@ -3213,8 +3293,36 @@ poniższy link, aby anulować potwierdzenie adresu e‐mail: $5 Kod zawarty w linku straci ważność $4.', -'confirmemail_invalidated' => 'Potwierdzenie adresu e‐mail zostało anulowane', -'invalidateemail' => 'Anulowanie potwierdzenia adresu e‐mail', +'confirmemail_body_changed' => 'Ktoś łącząc się z komputera o adresie IP $1 +zmienił w {{GRAMMAR:MS.lp|{{SITENAME}}}} ustawiony dla konta „$2” adres e‐mail na ten właśnie. + +Aby potwierdzić, że to Ty {{GENDER:|zmieniłeś|zmieniłaś}} adres otwórz w swojej +przeglądarce ten link: + +$3 + +Jeśli *nie* jest to Twoje konto, otwórz w swojej przeglądarce +poniższy link, aby anulować potwierdzenie adresu e‐mail: + +$5 + +Kod zawarty w linku straci ważność $4.', +'confirmemail_body_set' => 'Ktoś łącząc się z komputera o adresie IP $1 +ustawił w {{GRAMMAR:MS.lp|{{SITENAME}}}} dla konta „$2” adres e‐mail na ten właśnie. + +Aby potwierdzić, że to Ty {{GENDER:|ustawiłeś|ustawiłaś}} adres otwórz w swojej +przeglądarce ten link: + +$3 + +Jeśli *nie* jest to Twoje konto, otwórz w swojej przeglądarce +poniższy link, aby anulować potwierdzenie adresu e‐mail: + +$5 + +Kod zawarty w linku straci ważność $4.', +'confirmemail_invalidated' => 'Potwierdzenie adresu e‐mail zostało anulowane', +'invalidateemail' => 'Anulowanie potwierdzenia adresu e‐mail', # Scary transclusion 'scarytranscludedisabled' => '[Transkluzja przez interwiki jest wyłączona]', @@ -3258,6 +3366,7 @@ Czy na pewno chcesz ją ponownie utworzyć?", 'table_pager_first' => 'Pierwsza strona', 'table_pager_last' => 'Ostatnia strona', 'table_pager_limit' => 'Pokaż $1 pozycji na stronie', +'table_pager_limit_label' => 'Pozycji na stronie', 'table_pager_limit_submit' => 'Pokaż', 'table_pager_empty' => 'Brak wyników', @@ -3358,6 +3467,7 @@ Możesz także użyć [[Special:Watchlist/edit|standardowego edytora obserwowany 'version-specialpages' => 'Strony specjalne', 'version-parserhooks' => 'Haki analizatora składni (ang. parser hooks)', 'version-variables' => 'Zmienne', +'version-skins' => 'Skórki', 'version-other' => 'Pozostałe', 'version-mediahandlers' => 'Wtyczki obsługi mediów', 'version-hooks' => 'Haki (ang. hooks)', @@ -3369,6 +3479,13 @@ Możesz także użyć [[Special:Watchlist/edit|standardowego edytora obserwowany 'version-hook-subscribedby' => 'Zapotrzebowany przez', 'version-version' => '(Wersja $1)', 'version-license' => 'Licencja', +'version-poweredby-credits' => "To wiki korzysta z oprogramowania '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001‐$1 $2.", +'version-poweredby-others' => 'inni', +'version-license-info' => 'MediaWiki jest wolnym oprogramowaniem – możesz je dystrybuować i modyfikować zgodnie z warunkami licencji GNU General Public License opublikowanej przez Free Software Foundation w wersji 2 tej licencji lub (jeśli wolisz) dowolnej późniejszej. + +MediaWiki jest dystrybuowane w nadziei, że okaże się użyteczne ale BEZ JAKIEJKOLWIEK GWARANCJI – nawet bez domyślnej gwarancji PRZYDATNOŚCI HANDLOWEJ lub PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ. Więcej szczegółów znajdziesz w treści licencji GNU General Public License. + +Powinieneś otrzymać [{{SERVER}}{{SCRIPTPATH}}/COPYING kopię licencji GNU General Public License] wraz z niniejszym oprogramowaniem. Jeśli tak się nie stało, napisz do Free Software Foundation, Inc, 51 Franklin Street, Fifth Floor , Boston, MA 02110-1301, USA lub [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html przeczytaj licencję w Internecie].', 'version-software' => 'Zainstalowane oprogramowanie', 'version-software-product' => 'Nazwa', 'version-software-version' => 'Wersja', @@ -3439,6 +3556,15 @@ Wpisz nazwę pliku z pominięciem prefiksu „{{ns:file}}:”.', 'tags-edit' => 'edytuj', 'tags-hitcount' => '$1 {{PLURAL:$1|zmiana|zmiany|zmian}}', +# Special:ComparePages +'comparepages' => 'Porównanie stron', +'compare-selector' => 'Porównanie wersji stron', +'compare-page1' => 'Strona 1', +'compare-page2' => 'Strona 2', +'compare-rev1' => 'Wersja 1', +'compare-rev2' => 'Wersja 2', +'compare-submit' => 'Porównaj', + # Database error messages 'dberr-header' => 'Ta wiki nie działa poprawnie', 'dberr-problems' => 'Przepraszamy! Witryna ma problemy techniczne.', @@ -3455,8 +3581,13 @@ Wpisz nazwę pliku z pominięciem prefiksu „{{ns:file}}:”.', 'htmlform-float-invalid' => 'Podana wartość nie jest liczbą.', 'htmlform-int-toolow' => 'Podana wartość jest poniżej dopuszczalnego minimum $1', 'htmlform-int-toohigh' => 'Podana wartość jest powyżej dopuszczalnego maximum $1', +'htmlform-required' => 'Podanie tej wartości jest wymagane', 'htmlform-submit' => 'Zapisz', 'htmlform-reset' => 'Cofnij zmiany', 'htmlform-selectorother-other' => 'Inne', +# SQLite database support +'sqlite-has-fts' => '$1 ze wsparciem pełnotekstowego wyszukiwania', +'sqlite-no-fts' => '$1 bez wsparcia pełnotekstowego wyszukiwania', + ); diff --git a/languages/messages/MessagesPms.php b/languages/messages/MessagesPms.php index ff1e3fbb..56d1d273 100644 --- a/languages/messages/MessagesPms.php +++ b/languages/messages/MessagesPms.php @@ -12,6 +12,7 @@ * @author Dragonòt * @author SabineCretella * @author Teak + * @author The Evil IP address * @author Ævar Arnfjörð Bjarmason , Jens Frank * @author לערי ריינהארט */ @@ -54,8 +55,7 @@ dj'artìcoj ancó pa scrit", 'tog-editsection' => "Abìlita la modìfica dle session con j'anliure [modìfica]", 'tog-editsectiononrightclick' => 'Abilité la modìfica dle session ën sgnacand-je ansima
    al tìtol col tast drit dël rat (a-i va Javascript)', 'tog-showtoc' => "Buta le tàole dij contnù
    (për j'artìcoj che l'han pì che 3 session)", -'tog-rememberpassword' => "Vis-te la ciav
    (nen mach për na session
    - a l'ha da manca dij cookies)", -'tog-editwidth' => 'Slarga al màssim ël quàder ëd modìfica', +'tog-rememberpassword' => "Visesse ëd mia ciav ansima a 's navigador (për al pi $1 {{PLURAL:$1|di|di}})", 'tog-watchcreations' => 'Gionta le pàgine che i creo mi a la lista ëd lòn che im ten-o sot euj', 'tog-watchdefault' => "Gionta le pàgine che i modìfico mi a la lista dle ròbe ch'i ten-o sot-euj", 'tog-watchmoves' => 'Gionta le pàgine che i tramudo a lòn che im ten-o sot euj', @@ -201,31 +201,21 @@ dj'artìcoj ancó pa scrit", 'faqpage' => 'Project:Soèns An Ciamo', # Vector skin -'vector-action-addsection' => 'Gionta argoment', -'vector-action-delete' => 'Scancela', -'vector-action-move' => 'Tramuda', -'vector-action-protect' => 'Protegg', -'vector-action-undelete' => 'Arcùpera', -'vector-action-unprotect' => 'Sprotegg', -'vector-namespace-category' => 'Categorìa', -'vector-namespace-help' => "Pàgina d'agiut", -'vector-namespace-image' => 'Archivi', -'vector-namespace-main' => 'Pàgina', -'vector-namespace-media' => 'Pàgina con mojen', -'vector-namespace-mediawiki' => 'Mëssagi', -'vector-namespace-project' => 'Pàgina ëd proget', -'vector-namespace-special' => 'Pàgina special', -'vector-namespace-talk' => 'Discussion', -'vector-namespace-template' => 'Stamp', -'vector-namespace-user' => 'Pàgina utent', -'vector-view-create' => 'Crea', -'vector-view-edit' => 'Modìfica', -'vector-view-history' => 'Varda stòria', -'vector-view-view' => 'Les', -'vector-view-viewsource' => 'Varda sorgiss', -'actions' => 'Assion', -'namespaces' => 'Spassi nominaj', -'variants' => 'Variant', +'vector-action-addsection' => 'Gionta argoment', +'vector-action-delete' => 'Scancela', +'vector-action-move' => 'Tramuda', +'vector-action-protect' => 'Protegg', +'vector-action-undelete' => 'Arcùpera', +'vector-action-unprotect' => 'Sprotegg', +'vector-simplesearch-preference' => "Abilité ij sugeriment d'arserca ameliorà (mach për la pel Vector)", +'vector-view-create' => 'Crea', +'vector-view-edit' => 'Modìfica', +'vector-view-history' => 'Varda stòria', +'vector-view-view' => 'Les', +'vector-view-viewsource' => 'Varda sorgiss', +'actions' => 'Assion', +'namespaces' => 'Spassi nominaj', +'variants' => 'Variant', 'errorpagetitle' => 'Eror', 'returnto' => 'Torna andré a $1.', @@ -286,6 +276,9 @@ Tròpi utent a son an camin ch'a preuvo a lese sta pàgina-sì. Për piasì, speta un pòch prima ëd prové torna a vardé sta pàgina-sì. $1", +'pool-timeout' => "Ël temp a l'é finì antramentre ch'a së spetava la saradura", +'pool-queuefull' => "La coa ëd travaj a l'é pien-a", +'pool-errorunknown' => 'Eror pa conossù', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'A propòsit ëd {{SITENAME}}', @@ -447,7 +440,8 @@ Che as dësmentia pa ëd cambié ij [[Special:Preferences|"sò gust" an {{SITENA 'yourname' => 'Sò stranòm', 'yourpassword' => 'Soa ciav', 'yourpasswordagain' => 'Che a bata torna soa ciav', -'remembermypassword' => "Vis-te mia ciav për vàire session (për podèj felo a fa da manca che un a l'abia ij ''cookies'' abilità).", +'remembermypassword' => "Vis-te mia ciav ansima a st'ordinator-sì (për al pi $1 {{PLURAL:$1|di|di}})", +'securelogin-stick-https' => "Resté colegà an HTTPS apress d'esse intrà ant ël sistema", 'yourdomainname' => 'Sò domini', 'externaldberror' => "Ò che a l'é rivaje n'eror d'autenticassion esterna, ò pura a l'é chiel (chila) che a l'é nen autorisà a agiornesse sò cont estern.", 'login' => 'Rintré ant ël sistema', @@ -464,6 +458,7 @@ Che as dësmentia pa ëd cambié ij [[Special:Preferences|"sò gust" an {{SITENA 'gotaccount' => "Ha-lo già un sò cont? '''$1'''.", 'gotaccountlink' => 'Rintré ant ël sistema', 'createaccountmail' => 'për pòsta eletrònica', +'createaccountreason' => 'Rason:', 'badretype' => "Le doe ciav che a l'ha scrivù a resto diferente antra lor, e a venta che a sio mideme.", 'userexists' => "Lë stranòm anserì a l'é già dovrà. Për piasì, sern në stranòm diferent.", @@ -486,6 +481,7 @@ Controla ël nòm che it l\'has batù, o [[Special:UserLogin/signup|fà un neuv 'wrongpasswordempty' => "A l'ha butà na ciav veujda. Për piasì, che a preuva torna.", 'passwordtooshort' => 'Le ciav a devo avèj almanch {{PLURAL:$1|1 caràter|$1 caràter}}.', 'password-name-match' => 'Toa ciav a deuv esse diferenta da tò stranòm.', +'password-login-forbidden' => "L'usagi dë sto nòm utent e ciav a son ëstàit vietà.", 'mailmypassword' => 'Mandme na neuva ciav për pòsta eletrònica', 'passwordremindertitle' => 'Servissi për visé la paròla ciav ëd {{SITENAME}}', 'passwordremindertext' => "Cheidun (a l'é belfé che a sia stàit pròpe chiel, da 'nt l'adrëssa IP \$1) a l'ha ciamà che i-j mandèisso @@ -526,6 +522,9 @@ Për piasì speta prima ëd prové torna.", 'loginlanguagelabel' => 'Lenga: $1', 'suspicious-userlogout' => "Soa arcesta ëd seurte dal sistema a l'é stàita arfudà përchè a smija com s'a fussa stàita mandà da 'n navigador scolegà o da l'archiviassion an local d'un proxy.", +# E-mail sending +'php-mail-error-unknown' => 'Eror pa conossù ant la funsion PHP mail()', + # Password reset dialog 'resetpass' => 'Cambia la ciav', 'resetpass_announce' => "A l'é rintrà ant ël sistema con na ciav provisòria mandà via për pòsta eletrònica. Për podèj finì la procedura a l'ha da butesse na ciav neuva ambelessì:", @@ -577,9 +576,11 @@ Miraco it l'has già cambià la ciav o it l'has ciamà na neuva ciav a temp.", 'showlivepreview' => "Funsion ''Preuva dal viv''", 'showdiff' => 'Smon-me le modìfiche', 'anoneditwarning' => "A l'é ancó nen rintrà ant ël sistema. Soa adrëssa IP a sarà registrà ant la stòria dle modìfiche dë sta pàgina-sì.", +'anonpreviewwarning' => "''It ses pa intrà. An salvand a sarà memorisà toa adrëssa IP ant la stòria dle modìfiche dë sta pàgina-sì.''", 'missingsummary' => "'''Nòta:''' a l'ha pa butà gnun somari dla modìfica. Se a sgnaca Salva n'àutra vira, soa modìfica a resterà salvà sensa pa ëd somari.", 'missingcommenttext' => 'Për piasì che a buta un coment ambelessì sota.', -'missingcommentheader' => "'''A l'euj!:''' ës coment-sì a l'é sensa intestassion. Se a sgnaca torna \"Salva sta pàgina\" soa modìfica a sarà salvà sensa gnun-a intestassion.", +'missingcommentheader' => "'''Ch'a arcòrda:''' A l'ha pa dàit soget o intestassion për sto coment-sì. +Se a sgnaca torna \"{{int:savearticle}}\", soa modìfica a sarà salvà sensa gnun-a intestassion.", 'summary-preview' => "Preuva dl'oget:", 'subject-preview' => "Preuva d'oget/intestassion:", 'blockedtitle' => "Belavans cost ëstranòm-sì a resta col ëd n'utent che a l'é stàit disabilità a fé 'd modìfiche a j'artìcoj.", @@ -652,7 +653,11 @@ o [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 'usercsspreview' => "'''Che a varda che lòn che a s-ciàira a l'é nomach na preuva ëd sò CSS.''' '''A l'é ancó nen stàit salvà!'''", 'userjspreview' => "'''Che as visa che a l'é mach antramentr che as fa na preuva ëd sò Javascript, che a l'é ancó pa stàit salvà!'''", -'userinvalidcssjstitle' => "'''Avis:''' A-i é pa gnun-a pel \"\$1\". Che as visa che le pàgine .css e .js che un as fa daspërchiel a deuvro tute minùscole për tìtol, pr'esempi {{ns:user}}:Scaramacaj/monobook.css nopà che {{ns:user}}:Scaramacaj/Monobook.css.", +'sitecsspreview' => "'''Che a varda che a l'é mach an mente ch'a preuva sto CSS.''' +'''A l'é ancó pa stàit salvà!'''", +'sitejspreview' => "'''Che a varda che a l'é mach an mente ch'a preuva sto còdes JavaScript.''' +'''A l'é ancó pa stàit salvà!'''", +'userinvalidcssjstitle' => "'''Avis:''' A-i é pa gnun-a pel \"\$1\". Che as visa che le pàgine .css e .js che un as fa daspërchiel a deuvro tute minùscole për tìtol, pr'esempi {{ns:user}}:Scaramacaj/vector.css nopà che {{ns:user}}:Scaramacaj/Vector.css.", 'updated' => '(Agiornà)', 'note' => "'''NÒTA:'''", 'previewnote' => "'''Che a ten-a mach present che costa-sì a l'é nomach na PREUVA, e che soa version a l'é ancó pa stàita salvà!'''", @@ -688,10 +693,6 @@ Se a veul nen che sò test a peula esse modificà e distribuì da qualsëssìa p 'copyrightwarning2' => "Për piasì, che a ten-a present che tute le contribussion a {{SITENAME}} a peulo esse modificà ò scancelà da dj'àutri contributor. Se a veul nen che lòn che a scriv a ven-a modificà sensa limitassion ëd gnun-a sòrt, che a lo manda nen ambelessì.
    Ant l'istess temp, ën mandand dël material un as pija la responsabilità dë dì che a l'ha scrivusslo daspërchiel (ò daspërchila), ò pura che a l'ha copialo da na sorgiss ëd domini pùblich, ò pura da 'nt n'àutra sorgiss dla midema sòrt (che a varda $1 për avèj pì d'anformassion). '''CHE A MANDA PA DËL MATERIAL COATÀ DA DRIT D'AUTOR SENSA AVÈJ AVÙ ËL PËRMESS SCRIT DË FELO!'''", -'longpagewarning' => "'''CHE A TEN-A PRESENT!: Sta pàgina-sì a l'é longa $1 kb; chèich -programa ëd navigassion a podrìa avèj dle gran-e a modifiché dle pàgine che a-j rivo a brus -ò pura a passo ij 32 kb. -Për piasì che a varda se a-i fussa mai la possibilità dë divide sto paginon an vàire tòch pì cit.'''", 'longpageerror' => "'''EROR: Ël test che a l'ha mandà a l'é longh $1 kb, che a resta pì che ël lìmit màssim ëd $2 kb. Parèj as peul nen salvesse. A venta che a në fasa vàire pàgine diferente për rintré ant ij lìmit técnich.'''", @@ -870,6 +871,8 @@ $1", 'logdelete-failure' => "'''La visibilità dël registr a peul pa esse ampostà:''' $1", 'revdel-restore' => 'cambia visibilità', +'revdel-restore-deleted' => 'revision ëscancelà', +'revdel-restore-visible' => 'revision visìbij', 'pagehist' => 'Stòria dla pàgina', 'deletedhist' => 'Stòria scancelà', 'revdelete-content' => 'contnù', @@ -936,11 +939,13 @@ Ch'a varda mach che a-i ven-a nen fòra un rabel ant la continuità stòrica.", # Diffs 'history-title' => 'Cronologìa dle modìfiche ëd "$1"', 'difference' => '(Diferense antra revision)', +'difference-multipage' => '(Diferense tra pàgine)', 'lineno' => 'Riga $1:', 'compareselectedversions' => 'Paragon-a le version selessionà', 'showhideselectedversions' => 'Smon-e/stërmé le version selessionà', 'editundo' => "buta 'me ch'a l'era", -'diff-multi' => '({{PLURAL:$1|Na revision antërmedia|$1 revision antërmedie}} pa mostrà.)', +'diff-multi' => "({{PLURAL:$1|Na revision antërmedia|$1 revision antërmedie}} ëd {{PLURAL:$2|n'utent|$2 utent}} pa mostrà)", +'diff-multi-manyusers' => "({{PLURAL:$1|Na revision antërmedia|$1 revision antërmedie}} da pi che $2 {{PLURAL:$2|n'utent|utent}} pa mostrà)", # Search results 'searchresults' => "Arzultà dl'arserca", @@ -975,6 +980,7 @@ Ch'a varda mach che a-i ven-a nen fòra un rabel ant la continuità stòrica.", 'searchprofile-everything-tooltip' => 'Sërché daspërtut (ëdcò ant le pàgine ëd discussion)', 'searchprofile-advanced-tooltip' => 'Sërché ant jë spassi nominaj përsonalisà', 'search-result-size' => '$1 ({{PLURAL:$2|un|$2}} mòt)', +'search-result-category-size' => '{{PLURAL:$1|1 mèmber|$1 mèmber}} ({{PLURAL:$2|1 sot-categorìa|$2 sot-categorìe}}, {{PLURAL:$3|1 archivi|$3 archivi}})', 'search-result-score' => 'Arlevansa: $1%', 'search-redirect' => '(ridiression $1)', 'search-section' => '(session $1)', @@ -1050,6 +1056,7 @@ Ch'a preuva a gionté dnans a soa arserca ël prefiss ''all:'' për sërché an 'contextlines' => 'Righe ëd test për minca arzultà:', 'contextchars' => 'Caràter për riga:', 'stub-threshold' => 'Valor mìnim për j\'anliure a jë sbòss:', +'stub-threshold-disabled' => 'Disabilità', 'recentchangesdays' => "Vàire dì smon-e ant j'ùltime modìfiche:", 'recentchangesdays-max' => '(al pì $1 {{PLURAL:$1|di|di}})', 'recentchangescount' => 'Nùmer ëd modìfiche da smon-e për stàndard:', @@ -1083,6 +1090,7 @@ Ambelessì a-i é un valor generà a asar che a peul dovré: $1", 'prefs-files' => 'Archivi', 'prefs-custom-css' => 'CSS përsonaj', 'prefs-custom-js' => 'JS përsonaj', +'prefs-common-css-js' => 'CSS e JS condividù për tute le pej:', 'prefs-reset-intro' => 'A peul dovré costa pàgina për amposté torna ij sò gust a coj dë stàndard. Sòn a peul pa esse anulà.', 'prefs-emailconfirm-label' => "Conferma dl'adrëssa ëd pòsta eletrònica:", @@ -1123,9 +1131,15 @@ A peul ëdcò serne ëd lassé che j'àutri a lo contato an soa pàgina d'utent 'prefs-advancedrendering' => 'Opsion avansà', 'prefs-advancedsearchoptions' => 'Opsion avansà', 'prefs-advancedwatchlist' => 'Opsion avansà', -'prefs-display' => 'Opsion ëd visualisassion', +'prefs-displayrc' => 'Opsion ëd visualisassion', +'prefs-displaysearchoptions' => 'Opsion ëd visualisassion', +'prefs-displaywatchlist' => 'Opsion ëd visualisassion', 'prefs-diffs' => 'Diferense', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'A smija bon', +'email-address-validity-invalid' => "A-i é da manca ëd n'adrëssa bon-a!", + # User rights 'userrights' => "Gestion dij drit dj'utent", 'userrights-lookup-user' => "Gestion dle partìe d'utent", @@ -1210,6 +1224,7 @@ A peul ëdcò serne ëd lassé che j'àutri a lo contato an soa pàgina d'utent 'right-hideuser' => 'Bloché un nòm utent, stërmandlo al pùblich', 'right-ipblock-exempt' => "Dëscavalché ij blocagi ëd j'IP, ij blocagi automàtich e ij blocagi ëd partìe d'IP", 'right-proxyunbannable' => "Dëscavalché ij blòch automatich dij servent d'anonimà", +'right-unblockself' => 'Dësblochesse da soj', 'right-protect' => 'Cambié ij livej ëd protession e modifiché le pàgine protegiùe', 'right-editprotected' => 'Modifiché le pàgine protegiùe (sensa protession a cascada)', 'right-editinterface' => "Modifiché l'antërfacia utent", @@ -1232,7 +1247,6 @@ A peul ëdcò serne ëd lassé che j'àutri a lo contato an soa pàgina d'utent 'right-siteadmin' => 'Bloché e dësbloché la base ëd dàit', 'right-reset-passwords' => "Modifiché le ciav d'àutri utent", 'right-override-export-depth' => 'Esporté le pàgine ancludend le pàgine colegà fin-a a na profondeur ëd 5', -'right-versiondetail' => "Mosta j'anformassion estèise dla vërsion dël software", 'right-sendemail' => "Mandé un mëssagi an pòsta eletrònica a j'àutri utent", # User rights log @@ -1283,14 +1297,9 @@ A peul ëdcò serne ëd lassé che j'àutri a lo contato an soa pàgina d'utent 'recentchanges-legend' => "Opsion dj'ùltime modìfiche", 'recentchangestext' => 'An costa pàgina as ten cont dle modìfiche pì recente a la wiki.', 'recentchanges-feed-description' => 'Trassé le modìfiche dla wiki pì davzin-e ant ël temp an cost fluss.', -'recentchanges-label-legend' => 'Legenda: $1.', -'recentchanges-legend-newpage' => '$1 - pàgina neuva', 'recentchanges-label-newpage' => "Sta modìfica-sì a l'ha creà na neuva pàgina", -'recentchanges-legend-minor' => '$1 - modìfica cita', 'recentchanges-label-minor' => "Costa a l'é na modìfica cita", -'recentchanges-legend-bot' => '$1 - modìfica ëd trigomiro', 'recentchanges-label-bot' => "Sa modìfica a l'é stàita fàita da un trigomiro", -'recentchanges-legend-unpatrolled' => '$1 - modìfica nen verificà', 'recentchanges-label-unpatrolled' => "Sta modìfica-sì a l'é pa ancó stàita verificà", 'rcnote' => "Ambelessì sota a-i {{PLURAL:$1|é '''1''' modìfica|son j'ùltime '''$1''' modìfiche}} ant j'ùltim {{PLURAL:$2|di|'''$2''' di}}, a parte da $5 dël $4.", 'rcnotefrom' => ' Ambelessì sota a-i é la lista dle modìfiche da $2 (fin-a a $1).', @@ -1337,6 +1346,9 @@ Le pàgine dzora a [[Special:Watchlist|la lista ëd lòn ch'as ten sot-euj]] a r 'upload_directory_missing' => 'Ël repertòri ëd caria ($1) a-i é nen e a peul pa esse creà dal servent.', 'upload_directory_read_only' => "Ël servent ëd l'aragnà a-i la fa nen a scrive ansima a la diretris ëd càrich ($1).", 'uploaderror' => 'Eror dëmentré che as cariava', +'upload-recreate-warning' => "'''Atension: n'archivi con col nòm a l'é già stàit ëscancelà o tramudà.''' + +Ël registr dle scancelassion e dij tramud për sta pàgina a l'é butà ambelessì për comodità:", 'uploadtext' => "Dovra ël formolari sì-sota për carié dj'archivi. Për vardé ò sërché dle figure già carià, ch'a vada an sla [[Special:FileList|lista dle figure]], ij (ri)càrich a son ëdcò registrà ant ël [[Special:Log/upload|registr dij càrich]], jë scancelament ant ël [[Special:Log/delete|registr djë scancelament]]. @@ -1371,6 +1383,17 @@ Beiché la [[Special:NewFiles|galarìa dj'archivi neuv]] për na presentassion p 'filetype-banned-type' => "'''\".\$1\"''' a l'é na sòrt d'archivi proibìa. {{PLURAL:\$3|Cola consentìa a l'é|Cole consentìe a son}} \$2.", 'filetype-missing' => "A l'archivi a-j manca l'estension (pr'esempi \".jpg\").", +'empty-file' => "L'archivi ch'a l'ha mandà a l'era veuid.", +'file-too-large' => "L'archivi ch'a l'ha mandà a l'era tròp gròss.", +'filename-tooshort' => "Ël nòm ëd l'archivi a l'é tròp curt.", +'filetype-banned' => "Costa sòrt d'archivi a l'é proibìa.", +'verification-error' => "Cost archivi a l'ha pa passà la verìfica dj'archivi.", +'hookaborted' => "La modìfica ch'a l'ha provà a fé a l'é stàita blocà dal gancio ëd n'estension.", +'illegal-filename' => "Ël nòm dl'archivi a l'é nen consentì.", +'overwrite' => "Dzorascrive ansima a n'archivi esistent a l'é nen përmëttù.", +'unknown-error' => "A l'é capitaje n'eror nen conossù.", +'tmp-create-error' => "A l'é nen podusse creé l'archivi temporani.", +'tmp-write-error' => "Eror dë scritura dl'archivi temporani.", 'large-file' => "La racomandassion a l'é che j'archivi a sio nen pì gròss che $1; st'archivi-sì a l'amzura $2.", 'largefileserver' => "St'archivi-sì a resta pì gròss che lòn che la màchina sentral a përmet.", 'emptyfile' => "L'archivi che a l'ha pen-a carià a smija veujd. @@ -1399,13 +1422,14 @@ Se a veul ancó carié sò archivi, për piasì ch'a torna andré e ch'a deuvra 'file-exists-duplicate' => "S'archivi a l'é un duplicà ëd {{PLURAL:$1|cost-sì|costi-sì}}:", 'file-deleted-duplicate' => "N'archivi idéntich a cost-sì ([[:$1]]) a l'é scàit ëscancelà an passà. A dovrìa controlé la stòria djë scancelament ëd l'archivi prima ëd carielo torna.", -'successfulupload' => 'Carià complet', 'uploadwarning' => 'Avis che i soma dapress a carié', 'uploadwarning-text' => "Për piasì, ch'a modìfica la descrission ëd l'archivi sì-sota e ch'a preuva torna.", 'savefile' => "Salvé l'archivi", 'uploadedimage' => 'a l\'ha carià "[[$1]]"', 'overwroteimage' => 'a l\'ha carìa na version neuva ëd "[[$1]]"', 'uploaddisabled' => 'Càrich blocà.', +'copyuploaddisabled' => "Ël càrich për mojen ëd n'adrëssa dl'aragnà a l'é disabilità.", +'uploadfromurl-queued' => "Sò càrich a l'é stàit butà an coa.", 'uploaddisabledtext' => "La possibilità ëd carié dj'archivi a l'é staita disabilità.", 'php-uploaddisabledtext' => "Ij cariament d'archivi a son disabilità an PHP. Për piasì, ch'a controla l'ampostassion file_uploads.", @@ -1439,6 +1463,14 @@ JD # Jenoptik MGP # Pentax PICT # vàire marche diferente # ", +'upload-success-subj' => 'Carià con sucess', +'upload-success-msg' => "A l'ha carià da [$2] për da bin. Lòn ch'a l'ha carià a l'é disponìbil ambelessì: [[:{{ns:file}}:$1]]", +'upload-failure-subj' => 'Problema a carié', +'upload-failure-msg' => "A-i é staje un problema con lòn ch'a l'ha carià da [$2]: + +$1", +'upload-warning-subj' => "Avis antramentre ch'as caria", +'upload-warning-msg' => "A-i era un problema con lòn ch'a l'ha carià da [$2]. A peul artorné al [[Special:Upload/stash/$1|formolari për carié]] për corege ël problema.", 'upload-proto-error' => 'Protocòl cioch', 'upload-proto-error-text' => "Për carié da dij servent lontan a venta buté dj'anliure ch'as anandio për http:// ò pura ftp://.", @@ -1502,6 +1534,7 @@ Ch'a-i bata 'n colp col rat ansima a j'antestassion dle colòne për cangé l'ó 'listfiles_search_for' => "Arserché un nòm d'archivi multimojen:", 'imgfile' => 'archivi', 'listfiles' => "Lista d'archivi", +'listfiles_thumb' => 'Miniadura', 'listfiles_date' => 'Data', 'listfiles_name' => 'Nòm', 'listfiles_user' => 'Utent', @@ -1616,8 +1649,8 @@ Ch'as visa ëd controlé che në stamp a-j serva nen a dj'àutri stamp anans che 'statistics-edits' => "Pàgine modificà da quand ël {{SITENAME}} a l'é stàit tirà su", 'statistics-edits-average' => 'Media dle modìfiche për pàgina', 'statistics-views-total' => 'Total dle visualisassion', +'statistics-views-total-desc' => 'Le visualisassion ëd le pàgine pa esistente e ëd le pàgine speciaj a son nen comprèise', 'statistics-views-peredit' => 'Visualisassion për modìfica', -'statistics-jobqueue' => 'Lunghëssa dla [http://www.mediawiki.org/wiki/Manual:Job_queue Coa dij process]', 'statistics-users' => '[[Special:ListUsers|Utent]] argistrà', 'statistics-users-active' => 'Utent ativ', 'statistics-users-active-desc' => "Utent che a l'han fàit n'assion ant {{PLURAL:$1|l'ùltim di|j'ùltim $1 di}}", @@ -1629,9 +1662,9 @@ Ch'as visa ëd controlé che në stamp a-j serva nen a dj'àutri stamp anans che Na pàgina as trata coma \"pàgina ëd gestion dj'omònim\" se a deuvra në stamp dont l'anliura as treuva ant ël [[MediaWiki:Disambiguationspage]]", 'doubleredirects' => 'Ridiression dobie', -'doubleredirectstext' => "Sta pàgina-sì a a lista pàgine con rediression a àutre pàgine ëd rediression. -Vira riga a l'ha andrinta j'anliure a la prima e a la sconda rediression, ant sël pat ëd la prima riga ëd test dla seconda rediression, che për sòlit a l'ha andrinta l'artìcol ëd destinassion vèir, col andoa che a dovrìa ëmné ëdcò la prima reiression. -Le rediression scanselà a son stàite arzolvùe.", +'doubleredirectstext' => "Sta pàgina-sì a a lista dle pàgine ch'a armando a d'àutre pàgine ëd ridiression. +Vira riga a l'ha andrinta j'anliure a la prima e a la sconda ridiression, ant sël pat ëd la prima riga ëd test dla seconda ridiression, che për sòlit a l'ha andrinta l'artìcol ëd destinassion vèir, col andoa che a dovrìa ëmné ëdcò la prima ridiression. +Le ridiression sganfà a son stàite arzolvùe.", 'double-redirect-fixed-move' => "[[$1]] a l'é stàit spostà. Adess a l'é na ridiression a [[$2]].", 'double-redirect-fixer' => 'Coretor ëd ridiression', @@ -1655,6 +1688,8 @@ Adess a l'é na ridiression a [[$2]].", 'nmembers' => '$1 {{PLURAL:$1|element|element}}', 'nrevisions' => '{{PLURAL:$1|na revision|$1 revision}}', 'nviews' => '{{PLURAL:$1|na consultassion|$1 consultassion}}', +'nimagelinks' => 'Dovrà dzora a $1 {{PLURAL:$1|pàgina|pàgine}}', +'ntransclusions' => 'dovrà dzora a $1 {{PLURAL:$1|pàgina|pàgine}}', 'specialpage-empty' => 'Pàgina veujda.', 'lonelypages' => 'Pàgine daspërlor', 'lonelypagestext' => "Le pàgine ambelessì-sota a l'han gnun-e anliure che a-j men-o ansima nì a son anserìe an d'àotre pàgine ëd {{SITENAME}}.", @@ -1765,19 +1800,19 @@ Ch'a bèica ëdcò [[Special:WantedCategories|le categorìe domandà]].", 'linksearch-ok' => 'Sërché', 'linksearch-text' => 'As peulo dovresse dij ciapatut coma "*.wikipedia.org".
    Protocòj ch\'as peulo dovresse: $1', 'linksearch-line' => "$1 a l'ha n'anliura ch'a-j riva dzora da $2", -'linksearch-error' => 'Ij ciapatut as peulo butesse mach an prinsipi dël nòm dël servent.', +'linksearch-error' => 'Ij ciapatut as peulo butesse mach an prinsipi dël nòm dël sërvent.', # Special:ListUsers 'listusersfrom' => "Smon-me j'utent a parte da:", -'listusers-submit' => 'Smon', -'listusers-noresult' => 'Pa gnun utent parej.', +'listusers-submit' => 'Smon-e', +'listusers-noresult' => 'Gnun utent përparèj.', 'listusers-blocked' => '(blocà)', # Special:ActiveUsers 'activeusers' => "Lista dj'utent ativ", 'activeusers-intro' => "Costa a l'é na lista d'utent ch'a l'han avù n'atività qualsëssìa ant j'ùltim $1 {{PLURAL:$1|di|di}}.", 'activeusers-count' => "$1 {{PLURAL:$1|modìfica neuva|modìfiche neuve}} ant {{PLURAL:$3|l'ùltim di|j'ùltim $3 di}}", -'activeusers-from' => "Mosta j'utent a parte da:", +'activeusers-from' => "Smon-me j'utent a parte da:", 'activeusers-hidebots' => 'Stërma trigomiro', 'activeusers-hidesysops' => "Stërma j'aministrator", 'activeusers-noresult' => 'Pa gnun utent trovà.', @@ -1810,35 +1845,41 @@ A peulo ess-ie [[{{MediaWiki:Listgrouprights-helppage}}|anformassion adissionaj] 'listgrouprights-removegroup-self-all' => 'Gava tute le partìe da tò cont', # E-mail user -'mailnologin' => 'A-i é pa gnun-a adrëssa për mandé ël messagi', -'mailnologintext' => "A dev [[Special:UserLogin|rintré ant ël sistema]] +'mailnologin' => 'A-i é pa gnun-a adrëssa për mandé ël messagi', +'mailnologintext' => "A dev [[Special:UserLogin|rintré ant ël sistema]] e avej registrà n'adrëssa ëd pòsta eletrònica vàlida ant ij [[Special:Preferences|sò gust]] për podej mandé dij messagi ëd pòsta eletrònica a j'àutri Utent.", -'emailuser' => "Mand-je un messagi eletrònich a st'Utent-sì", -'emailpage' => "Mand-je un messagi ëd pòsta eletrònica a st'utent-sì", -'emailpagetext' => "It peule dovré la forma ambelessì për mandé un messagi e-mail a st'utent-sì. +'emailuser' => "Mand-je un messagi eletrònich a st'Utent-sì", +'emailpage' => "Mand-je un messagi ëd pòsta eletrònica a st'utent-sì", +'emailpagetext' => "It peule dovré la forma ambelessì për mandé un messagi e-mail a st'utent-sì. L'adrëssa e-mail ch'it l'has butà an [[Special:Preferences|Ij sò gust]] a sarà butò ant l'adrëssa \"From\" ëd toa e-mail, parèj ël ricevent a podrà arsponde diretament a ti.", -'usermailererror' => "L'oget che a goèrna la pòsta eletrònica a l'ha dait eror:", -'defemailsubject' => 'Messagi da {{SITENAME}}', -'noemailtitle' => 'Pa gnun-a adrëssa ëd pòsta eletrònica', -'noemailtext' => "Cost Utent-sì a l'ha pa spessificà n'adrëssa e-mail vàlida.", -'nowikiemailtitle' => 'Gnun-e e-mail', -'nowikiemailtext' => "Stutent-sì a l'ha sërnù ëd pa arseive e-mail da dj'àutri utent.", -'email-legend' => "Manda n'e-mail a n'àutr utent ëd {{SITENAME}}", -'emailfrom' => 'Da:', -'emailto' => 'A:', -'emailsubject' => 'Oget:', -'emailmessage' => 'Messagi:', -'emailsend' => 'Manda', -'emailccme' => 'Mand-ne na còpia ëdcò a mia adrëssa.', -'emailccsubject' => 'Còpia dël messagi mandà a $1: $2', -'emailsent' => 'Messagi eletrònich mandà', -'emailsenttext' => "Sò messagi eletrònich a l'é stait mandà", -'emailuserfooter' => 'St\'e-mail-sì a l\'é stàita mandà da $1 a $2 con la fonsion "E-mail utent" a {{SITENAME}}.', +'usermailererror' => "L'oget che a goèrna la pòsta eletrònica a l'ha dait eror:", +'defemailsubject' => 'Messagi da {{SITENAME}}', +'usermaildisabled' => "Pòsta eletrònica dl'utent disabilità", +'usermaildisabledtext' => "A peul pa mandé ëd mësagi ëd pòsta eletrònica a d'àutri utent dzora a sta wiki-sì", +'noemailtitle' => 'Pa gnun-a adrëssa ëd pòsta eletrònica', +'noemailtext' => "Cost Utent-sì a l'ha pa spessificà n'adrëssa e-mail vàlida.", +'nowikiemailtitle' => 'Gnun-e e-mail', +'nowikiemailtext' => "Stutent-sì a l'ha sërnù ëd pa arseive e-mail da dj'àutri utent.", +'email-legend' => "Manda n'e-mail a n'àutr utent ëd {{SITENAME}}", +'emailfrom' => 'Da:', +'emailto' => 'A:', +'emailsubject' => 'Oget:', +'emailmessage' => 'Messagi:', +'emailsend' => 'Manda', +'emailccme' => 'Mand-ne na còpia ëdcò a mia adrëssa.', +'emailccsubject' => 'Còpia dël messagi mandà a $1: $2', +'emailsent' => 'Messagi eletrònich mandà', +'emailsenttext' => "Sò messagi eletrònich a l'é stait mandà", +'emailuserfooter' => 'St\'e-mail-sì a l\'é stàita mandà da $1 a $2 con la fonsion "E-mail utent" a {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => "A l'ha lassà un mëssagi ëd sistema.", +'usermessage-editor' => 'Mëssagerìa ëd sistema', # Watchlist 'watchlist' => 'Ròba che im ten-o sot euj', 'mywatchlist' => 'Ròba che im ten-o sot euj', -'watchlistfor' => "(për '''$1''')", +'watchlistfor2' => 'Për $1 $2', 'nowatchlist' => 'A l\'ha ancó pa marcà dj\'artìcoj coma "ròba da tnì sot euj".', 'watchlistanontext' => "Për piasì, $1 për ës-ciairé ò pura modifiché j'element ëd soa lista dla ròba che as ten sot euj.", 'watchnologin' => "A l'é ancó nen rintrà ant ël sistema", @@ -1959,7 +2000,10 @@ L'ùltima modìfica a la pàgina a l'é staita faita da [[User:$3|$3]] ([[User t 'revertpage' => "Gavà via le modìfiche ëd [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]); ël contnù a l'é stait tirà andarè a l'ùltima version dl'utent [[User:$1|$1]]", 'revertpage-nouser' => "Scanselà le modìfiche dë (stranòm gavà) a l'ùltima vërsion ëd [[User:$1|$1]]", 'rollback-success' => "Modìfiche anulà da $1; tirà andré a l'ùltima version da $2.", -'sessionfailure' => "A-i son ëstaje dle gran-e con la session che a identìfica sò acess; ël sistema a l'ha nen eseguì l'ordin che a l'ha daje për precaussion. Che a torna andaré a la pàgina prima con ël boton \"andaré\" ëd sò programa ëd navigassion (browser), peuj che as carìa n'àutra vira costa pàgina-sì e che a preuva torna a fé lòn che vorìa fé.", + +# Edit tokens +'sessionfailure-title' => 'Eror ëd session', +'sessionfailure' => "A-i son ëstaje dle gran-e con la session che a identìfica sò acess; ël sistema a l'ha nen eseguì l'ordin che a l'ha daje për precaussion. Che a torna andaré a la pàgina prima con ël boton \"andaré\" ëd sò programa ëd navigassion (browser), peuj che as carìa n'àutra vira costa pàgina-sì e che a preuva torna a fé lòn che vorìa fé.", # Protect 'protectlogpage' => 'Registr dle protession', @@ -2089,18 +2133,22 @@ $1", 'month' => 'Mèis:', 'year' => 'Ann:', -'sp-contributions-newbies' => 'Smon mach ël travaj dij cont neuv', -'sp-contributions-newbies-sub' => "Për j'utent neuv", -'sp-contributions-newbies-title' => "Contribussion ëd j'utent për ij neuv cont", -'sp-contributions-blocklog' => "Fërma l'agiornament dij registr", -'sp-contributions-deleted' => "Modìfiche d'utent scancelà", -'sp-contributions-logs' => 'registr', -'sp-contributions-talk' => 'discussion', -'sp-contributions-userrights' => 'gestion dij drit utent', -'sp-contributions-blocked-notice' => "St'utent-sì a l'é blocà al moment. L'ùltima intrada dël registr dij blòch a l'é butà sì sota për arferiment:", -'sp-contributions-search' => 'Arsërca contribussion', -'sp-contributions-username' => 'Adrëssa IP ò nòm utent:', -'sp-contributions-submit' => 'Arsërca', +'sp-contributions-newbies' => 'Smon mach ël travaj dij cont neuv', +'sp-contributions-newbies-sub' => "Për j'utent neuv", +'sp-contributions-newbies-title' => "Contribussion ëd j'utent për ij neuv cont", +'sp-contributions-blocklog' => "Fërma l'agiornament dij registr", +'sp-contributions-deleted' => "Modìfiche d'utent scancelà", +'sp-contributions-uploads' => 'cariagi', +'sp-contributions-logs' => 'registr', +'sp-contributions-talk' => 'discussion', +'sp-contributions-userrights' => 'gestion dij drit utent', +'sp-contributions-blocked-notice' => "St'utent-sì a l'é blocà al moment. L'ùltima intrada dël registr dij blòch a l'é butà sì sota për arferiment:", +'sp-contributions-blocked-notice-anon' => "St'adrëssa IP a l'é blocà al moment. +L'ùltima intrada dël registr dij blocagi a l'é butà sì-sota për arferiment:", +'sp-contributions-search' => 'Arsërca contribussion', +'sp-contributions-username' => 'Adrëssa IP ò nòm utent:', +'sp-contributions-toponly' => "Mostré mach le modìfiche ch'a son j'ùltime revision", +'sp-contributions-submit' => 'Arsërca', # What links here 'whatlinkshere' => "Pàgine con dj'anliure che a men-o a costa-sì", @@ -2163,7 +2211,6 @@ Varda [[Special:IPBlockList|lista dj'IP blocà]] Për rivëdde ij blòch.", 'ipb-edit-dropdown' => 'Motiv dël blòch', 'ipb-unblock-addr' => 'Dësbloché $1', 'ipb-unblock' => "Dësbloché n'utent ò n'adrëssa IP", -'ipb-blocklist-addr' => 'Blòch esistent për $1', 'ipb-blocklist' => 'Vardé ij blòch ativ', 'ipb-blocklist-contribs' => 'Contribussion për $1', 'unblockip' => "Dësblòca st'adrëssa IP-sì", @@ -2234,6 +2281,8 @@ It veule cambié le ampostassion?", 'sorbs_create_account_reason' => "Soa adrëssa IP a l'é listà coma arpetitor doèrt (open proxy) ansima al DNSBL dovrà da {{SITENAME}}. A peul nen creésse un cont.", 'cant-block-while-blocked' => 'It peule pa bloché àutri utent an mente it ses blocà.', 'cant-see-hidden-user' => "L'utent che të stas provand a bloché a l'é già stàit blocà e stërmà. Da già ch'it l'has pa ël drit hideuser, it peule pa vëdde o modifiché ël blòch ëd l'utent.", +'ipbblocked' => "A peul pa bloché o dësbloché d'àutri utent, përchè a l'é blocà chiel-midem", +'ipbnounblockself' => 'It peule pa dësbloché ti midem', # Developer tools 'lockdb' => 'Blòca la base dat', @@ -2270,6 +2319,17 @@ Sòn a veul dì che, se a l'avèissa mai da fé n'operassion nen giusta, a podr '''ATENSION!''' Un cambiament dràstich parej a podrìa dé dle gran-e an dzora a na pàgina motobin visità. Che a varda mach dë esse pì che sigur d'avej presente le conseguense, prima che fé che fé.", +'movepagetext-noredirectfixer' => "Dovré ël formolari sì-sota a arnominërà na pàgina, tramudand tuta soa stòria al nòm neuv. +Ël tìtol vèj a vnirà na pàgina ëd ridiression al tìtol neuv. +Ch'as sigura ëd controlé le ridiression [[Special:DoubleRedirects|dobie]] o cole [[Special:BrokenRedirects|ch'a marcio nen]]. +A l'é responsàbil ëd fé an manera che j'anliure a continuo a ponté andova as pensa ch'a vado. + +Ch'a armarca che la pàgina a sarà '''pa''' tramudà s'a-i é già na pàgina con ël tìtol neuv, gavà ch'a sia veuida o na ridiression e ch'a l'abia pa na stòria ëd modìfiche passà. +Son a veul dì ch'a peul torna arnominé na pàgina andré da andova a l'avìa arnominala s'a fa n'eror, e ch'a peul pa coaté na pàgina esistenta. + +'''Avis!''' +Sossì a peul esse un cambi dràstich e pa spetà për na pàgina popolar; +për piasì ch'as renda bin cont ëd le conseguense ëd sòn prima d'andé anans.", 'movepagetalktext' => "La pàgina ëd discussion tacà a costa pàgina d'articol, se a-i é, a sarà tramudà n'automatich ansema a l'artìcol, '''gavà costi cas-sì''': *quand as tramuda la pàgina tra diferent spassi nominal, *quand na pàgina ëd discussion nen veujda a-i é già për ël nòm neuv, ò pura @@ -2326,6 +2386,7 @@ L\'artìcol ëd destinassion "[[:$1]]" a-i é già. Veul-lo scancelelo për avej 'immobile-source-page' => 'Sta pàgina-sì as peul pa tramudesse.', 'immobile-target-page' => 'As peul pa tramudess al tìtol dë sta destinassion-sì.', 'imagenocrossnamespace' => 'As peul pa tramudé un file fòra dal sò namespace', +'nonfile-cannot-move-to-file' => "As peul nen tramudesse lòn ch'a l'é pa n'archivi a lë spassi nominal dj'archivi", 'imagetypemismatch' => 'La neuva estension dël file a corispond pa a sò tipo', 'imageinvalidfilename' => "Ël nòm dël file pontà a l'é pa vàlid", 'fix-double-redirects' => 'Modìfica minca rediression che a ponta al tìtol original', @@ -2405,10 +2466,11 @@ Tute le amportassion antra wiki diferente a resto marcà ant ël [[Special:Log/i 'import-upload-filename' => 'Nòm dël file:', 'import-comment' => 'Oget:', 'importtext' => "Për piasì, che as espòrta l'archivi da 'nt la sorgiss wiki ën dovrand l'[[Special:Export|utiss d'esportassion]]. -Che as lo salva ansima a sò calcolador e peui che a lo caria ambelessì.", +Che as lo salva ansima a sò ordinator e peui che a lo caria ambelessì.", 'importstart' => 'I soma antramentr che amportoma le pàgine...', 'import-revision-count' => '{{PLURAL:$1|Na|$1}} revision', 'importnopages' => 'Pa gnun-a pàgina da amporté', +'imported-log-entries' => 'Amportà $1 {{PLURAL:$1|vos ëd registr|vos ëd registr}}.', 'importfailed' => 'Amportassion falìa: $1', 'importunknownsource' => "Sorgiss d'amportassion ëd na sòrt nen conossùa", 'importcantopen' => "L'archivi da amporté a l'é pa podusse deurbe", @@ -2503,6 +2565,8 @@ Për piasì preuva torna.', 'tooltip-rollback' => '"Rollback" a scansela con un clich le modìfiche fàite a costa pagina da l\'ùltim contribudor', 'tooltip-undo' => '"Undo" a scansela costa modìfica e a deurb la fnestra ëd modìfica an manera ëd vardé prima. At lassa gionté na spiegassion ëd la modìfica.', +'tooltip-preferences-save' => 'Salvé ij sò gust', +'tooltip-summary' => 'Anserì un curt resumé', # Stylesheets 'common.css' => '/** Ël còdes CSS che as buta ambelessì a resta dovrà ant tute le "facie" */', @@ -2605,14 +2669,17 @@ An fasend-lo travajé ansima a sò ordinator chiel a podrìa porteje ëd dann a 'imagemaxsize' => "Lìmit ëd la dimension ëd la figura:
    ''(për pàgine ëd descrission dij file)''", 'thumbsize' => 'Amzura dle figurin-e:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|pàgina|pàgine}}', -'file-info' => "(amzura dl'archivi: $1, sòrt MIME: $2)", -'file-info-size' => '($1 × $2 pixel, amzure: $3, sòrt MIME: $4)', +'file-info' => "amzura dl'archivi: $1, sòrt MIME: $2", +'file-info-size' => '$1 × $2 pixel, amzure: $3, sòrt MIME: $4', 'file-nohires' => 'Gnun-a risolussion pì bela disponibila.', -'svg-long-desc' => "(archivi an forma SVG, amzure nominaj $1 × $2 pixel, amzura dl'archivi: $3)", +'svg-long-desc' => "archivi an forma SVG, amzure nominaj $1 × $2 pixel, amzura dl'archivi: $3", 'show-big-image' => 'Version a amzura pijn-a', 'show-big-image-thumb' => 'Amzure dë sta figurin-a: $1 × $2 pixel', 'file-info-gif-looped' => 'ciclà', 'file-info-gif-frames' => '$1 {{PLURAL:$1|fnesta|fneste}}', +'file-info-png-looped' => 'an sìrcol', +'file-info-png-repeat' => 'sonà $1 {{PLURAL:$1|vira|vire}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|quàder|quàder}}', # Special:NewFiles 'newimages' => 'Galerìa ëd figure e son neuv', @@ -2765,6 +2832,7 @@ J'anliure ch'a-i ven-o dapress, ant sla midema riga, as conto për ecession (vis 'exif-gpsareainformation' => 'Nòm dlë spassi GPS', 'exif-gpsdatestamp' => 'Data dël GPS', 'exif-gpsdifferential' => 'Coression diferensial dël GPS', +'exif-objectname' => 'Tìtol curt', # EXIF attributes 'exif-compression-1' => 'Pa compress', @@ -2933,31 +3001,31 @@ J'anliure ch'a-i ven-o dapress, ant sla midema riga, as conto për ecession (vis 'limitall' => 'tùit', # E-mail address confirmation -'confirmemail' => "Confermé l'adrëssa postal", -'confirmemail_noemail' => "A l'ha pa butà gnun-a adrëssa vàlida ëd pòsta eletrònica ant ij [[Special:Preferences|sò gust]].", -'confirmemail_text' => "Costa wiki a ciama che chiel a convalida n'adrëssa postal anans che +'confirmemail' => "Confermé l'adrëssa postal", +'confirmemail_noemail' => "A l'ha pa butà gnun-a adrëssa vàlida ëd pòsta eletrònica ant ij [[Special:Preferences|sò gust]].", +'confirmemail_text' => "Costa wiki a ciama che chiel a convalida n'adrëssa postal anans che dovré lòn che toca la pòsta. Che a sgnaca ël boton ambelessì sota për fesse mandé un messa ëd conferma a soa adrëssa eletrònica. Andrinta al messagi a-i sara n'anliura (URL) con andrinta un còdes. Che a deurba st'anliura andrinta a sò programa ëd navigassion (browser) për confermé che soa adrëssa a l'é pròpe cola.", -'confirmemail_pending' => "I l'oma già mandaje sò còdes ëd conferma; +'confirmemail_pending' => "I l'oma già mandaje sò còdes ëd conferma; se a l'ha pen-a creasse sò cont, miraco a venta che a speta dontre minute che a-j riva ant la pòsta, nopà che ciamene un neuv.", -'confirmemail_send' => 'Manda un còdes ëd conferma për pòsta eletrònica', -'confirmemail_sent' => "Ël messagi ëd conferma a l'é stait mandà.", -'confirmemail_oncreate' => "Un còdes ëd conferma a l'é stait mandà a soa adrëssa ëd pòsta eletrònica. +'confirmemail_send' => 'Manda un còdes ëd conferma për pòsta eletrònica', +'confirmemail_sent' => "Ël messagi ëd conferma a l'é stait mandà.", +'confirmemail_oncreate' => "Un còdes ëd conferma a l'é stait mandà a soa adrëssa ëd pòsta eletrònica. D'ës còdes a fa pa dë manca për rintré ant ël sistema, ma a ventrà che a lo mostra al sistema për podej abilité cole funsion dla wiki che a son basà ant sla pòsta eletrònica.", -'confirmemail_sendfailed' => "{{SITENAME}} a l'ha pa podù mandete l'e-mail ëd conferma. +'confirmemail_sendfailed' => "{{SITENAME}} a l'ha pa podù mandete l'e-mail ëd conferma. Che a controla l'adrëssa che a l'ha dane, mai che a-i fusso dij caràter nen vàlid. Ël programa ëd pòsta a l'ha arspondù: $1", -'confirmemail_invalid' => 'Còdes ëd conferma nen vàlid. A podrìa ëdcò mach esse scadù.', -'confirmemail_needlogin' => 'A venta che a fasa $1 për confermé soa addrëssa postal eletrònica.', -'confirmemail_success' => "Soa adrëssa postal a l'é staita confermà, adess a peul rintré ant ël sistema e i-j auguroma da fessla bin ant la wiki!", -'confirmemail_loggedin' => "Motobin mersì. Soa adrëssa ëd pòsta eletrònica adess a l'é confermà.", -'confirmemail_error' => "Cheich-còs a l'é andà mal ën salvand soa conferma.", -'confirmemail_subject' => "Conferma dl'adrëssa postal da 'nt la {{SITENAME}}", -'confirmemail_body' => "Cheidun, a l'é belfé che a sia stait pròpe chiel (ò chila), da 'nt l'adrëssa IP \$1, +'confirmemail_invalid' => 'Còdes ëd conferma nen vàlid. A podrìa ëdcò mach esse scadù.', +'confirmemail_needlogin' => 'A venta che a fasa $1 për confermé soa addrëssa postal eletrònica.', +'confirmemail_success' => "Soa adrëssa postal a l'é staita confermà, adess a peul rintré ant ël sistema e i-j auguroma da fessla bin ant la wiki!", +'confirmemail_loggedin' => "Motobin mersì. Soa adrëssa ëd pòsta eletrònica adess a l'é confermà.", +'confirmemail_error' => "Cheich-còs a l'é andà mal ën salvand soa conferma.", +'confirmemail_subject' => "Conferma dl'adrëssa postal da 'nt la {{SITENAME}}", +'confirmemail_body' => "Cheidun, a l'é belfé che a sia stait pròpe chiel (ò chila), da 'nt l'adrëssa IP \$1, a l'ha doertà un cont utent \"\$2\" ansima a {{SITENAME}}, lassand-ne st'adrëssa ëd pòsta eletrònica-sì. Për confermé che ës cont a l'é da bon sò e për ativé @@ -2971,8 +3039,36 @@ për scanselé la conferma ëd l'adrëssa e-mail: \$5 Cost còdes ëd conferma a l'é bon fin-a al \$4.", -'confirmemail_invalidated' => "Conferma ëd l'adrëssa e-mail scanselà", -'invalidateemail' => "Scansela l'e-mail ëd conferma", +'confirmemail_body_changed' => "Cheidun, a l'é belfé ch'a sia chiel, da l'adrëssa IP \$1, +a l'ha cangià l'adrëssa ëd pòsta eletrònica dël cont \"\$2\" con st'adrëssa-sì dzora a {{SITENAME}}. + +Për confirmé che sto cont-sì a l'é pròpi sò e për riativé +le possibilità ëd pòsta eletrònica dzora a {{SITENAME}}, ch'a deurba sto colegament-sì an sò navigador: + +\$3 + +Se ël cont a l'é *nen* sò, ch'a vada andré a sto colegament-sì +për scancelé la conferma dl'adrëssa ëd pòsta eletrònica: + +\$5 + +Ës còdes ëd conferma a scadrà a \$4.", +'confirmemail_body_set' => "Quaidun, miraco chiel, da l'adrëssa IP \$1, +a l'ha ampostà l'adrëssa ëd pòsta eletrònica dël cont \"\$2\" con costa adrëssa su {{SITENAME}}. + +Për confirmé che sto cont a l'é pròpi sò e ativé torna +le funsion ëd pòsta eletrònica su {{SITENAME}}, ch'a duverta cost'anliura an sò navigador: + +\$3 + +Se ël cont a l'é *pa* sò, ch'a-j vada dapress a st'anliura +për scancelé la conferma ëd l'adrëssa ëd pòsta eletrònica: + +\$5 + +Cost còdes ëd conferma a scad ai \$4.", +'confirmemail_invalidated' => "Conferma ëd l'adrëssa e-mail scanselà", +'invalidateemail' => "Scansela l'e-mail ëd conferma", # Scary transclusion 'scarytranscludedisabled' => "[L'inclusion ëd pàgine antra wiki diferente a l'é nen abilità]", @@ -3012,6 +3108,7 @@ Për piasì, che an conferma che da bon a veul torna creélo.", 'table_pager_first' => 'Prima pàgina', 'table_pager_last' => 'Ùltima pàgina', 'table_pager_limit' => 'Smon-me $1 archivi për pàgina', +'table_pager_limit_label' => 'Oget për pàgina:', 'table_pager_limit_submit' => 'Va', 'table_pager_empty' => 'Pa gnun arsultà', @@ -3088,6 +3185,7 @@ As peul ëdcò [[Special:Watchlist/edit|dovré l'editor sòlit]].", 'version-specialpages' => 'Pàgine speciaj', 'version-parserhooks' => 'Gancio dlë scompositor', 'version-variables' => 'Variàbij', +'version-skins' => 'Pej', 'version-other' => 'Àutr', 'version-mediahandlers' => 'Gestor multimojen', 'version-hooks' => 'Gancio', @@ -3099,6 +3197,13 @@ As peul ëdcò [[Special:Watchlist/edit|dovré l'editor sòlit]].", 'version-hook-subscribedby' => 'A son scrivusse', 'version-version' => '(Version $1)', 'version-license' => 'Licensa', +'version-poweredby-credits' => "Sta wiki-sì a l'é basà su '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'àutri', +'version-license-info' => "MediaWiki a l'é un programa lìber; a peul passelo an gir e/o modifichelo sota le condission dla Licensa Pùblica General GNU coma publicà da la Free Software Foundation; o la version 2 dla licensa o (a soa decision) qualsëssìa version apress. + +MediaWiki a l'é distribuì ant la speransa che a sia ùtil, ma SENSA GNUN-A GARANSÌA; sensa gnanca la garansìa implìcita ëd COMERSIABILITA' o d'ADATAMENT A UN BUT PARTICOLAR. Ch'a lesa la Licensa General Pùblica GNU per pi 'd detaj. + +A dovrìa avèj arseivù [{{SERVER}}{{SCRIPTPATH}}/COPYING na còpia dla Licensa Pùblica General GNU] ansema a sto programa-sì; dësnò, ch'a scriva a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html ch'a la lesa an linia].", 'version-software' => 'Programa anstalà', 'version-software-product' => 'Prodot', 'version-software-version' => 'Version', @@ -3169,6 +3274,15 @@ Ch'a bata 'l nòm dl'archivi sensa pa bute-ie 'l prefiss \"{{ns:file}}:\".", 'tags-edit' => 'modìfica', 'tags-hitcount' => '$1 {{PLURAL:$1|cambiament|cambiament}}', +# Special:ComparePages +'comparepages' => 'Confronté dle pàgine', +'compare-selector' => 'Confronté le revision dle pàgine', +'compare-page1' => 'Pàgina 1', +'compare-page2' => 'Pàgina 2', +'compare-rev1' => 'Revision 1', +'compare-rev2' => 'Revision 2', +'compare-submit' => 'Confronta', + # Database error messages 'dberr-header' => "Sta wiki-sì a l'ha un problema", 'dberr-problems' => "Spiasent! Sto sit-sì a l'ha dle dificoltà técniche.", @@ -3185,8 +3299,13 @@ Ch'a bata 'l nòm dl'archivi sensa pa bute-ie 'l prefiss \"{{ns:file}}:\".", 'htmlform-float-invalid' => "Ël valor ch'it l'has spessificà a l'é pa un nùmer.", 'htmlform-int-toolow' => "Ël valor ch'it l'has spessificà a l'é sota al mìnim ëd $1.", 'htmlform-int-toohigh' => "Ël valor ch'it l'has spessificà a l'é dzora dël màssim ëd $1.", +'htmlform-required' => 'A-i é dabzògn ëd cost valor', 'htmlform-submit' => 'Spediss', 'htmlform-reset' => 'Scansela ij cambiament', 'htmlform-selectorother-other' => 'Àutr', +# SQLite database support +'sqlite-has-fts' => '$1 con arserca an test pien mantnùa', +'sqlite-no-fts' => '$1 sensa arserca an test pien mantnùa', + ); diff --git a/languages/messages/MessagesPnb.php b/languages/messages/MessagesPnb.php index 825698ad..6e91cf7e 100644 --- a/languages/messages/MessagesPnb.php +++ b/languages/messages/MessagesPnb.php @@ -133,24 +133,13 @@ $messages = array( 'qbspecialpages' => 'خاص صفحے', # Vector skin -'vector-action-delete' => 'مکاؤ', -'vector-action-move' => 'ٹرو', -'vector-action-protect' => 'بچاؤ', -'vector-action-unprotect' => 'نا بچاؤ', -'vector-namespace-category' => 'ونڈ', -'vector-namespace-help' => 'مدد آلا ورقا', -'vector-namespace-image' => 'فائل', -'vector-namespace-main' => 'ورقہ', -'vector-namespace-media' => ' میڈیا آلا ورقہ', -'vector-namespace-mediawiki' => 'سنیعا', -'vector-namespace-project' => 'بجایا ورقہ', -'vector-namespace-special' => 'خاص صفحہ', -'vector-namespace-talk' => 'گل بات', -'vector-namespace-template' => 'سانچہ', -'vector-namespace-user' => 'ورتن والے دا صفحہ', -'vector-view-create' => 'بناؤ', -'vector-view-edit' => 'لکھو', -'vector-view-viewsource' => 'ویکھو', +'vector-action-delete' => 'مکاؤ', +'vector-action-move' => 'ٹرو', +'vector-action-protect' => 'بچاؤ', +'vector-action-unprotect' => 'نا بچاؤ', +'vector-view-create' => 'بناؤ', +'vector-view-edit' => 'لکھو', +'vector-view-viewsource' => 'ویکھو', 'errorpagetitle' => 'مسئلہ', 'returnto' => 'واپس $1 چلو', @@ -288,7 +277,7 @@ $messages = array( 'yourname' => 'ورتن والہ:', 'yourpassword' => 'کنجی:', 'yourpasswordagain' => 'کنجی دوبارہ لکھو:', -'remembermypassword' => 'اس کمپیوٹر تے میرا لاگن یاد رکھو', +'remembermypassword' => 'اس کمپیوٹر تے میرا لاگن یاد رکھو (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'تواڈا علاقہ:', 'login' => 'اندر آؤ جی', 'nav-login-createaccount' => 'اندر آؤ / کھاتہ کھولو', @@ -409,8 +398,6 @@ $messages = array( اگر تسی نئیں چاندے کے تواڑی لکھائی نوں بے رحمی نال ٹھیک کیتا جاۓ تے نالے اپنی مرضی نال اونھوں چھاپیا جاۓ تے ایتدے مت لکھو۔
    تسی اے وی ساڈے نال وعدہ کر رہے او کہ اینوں تسی آپ لکھیا اے یا فیر کسی پبلک ڈومین توں یا ایہو جۓ کسے آزاد ذریعے توں نقل کیتا اے۔
    '''ایتھے او کم بغیر اجازت توں نا لکھو جیدے حق راکھویں نے '''", -'longpagewarning' => "'''ہوشیار: اے صفحہ $1 کلوبائیٹ لمبا اے؛ کچھ کھوجیاں نو 32 کلوبائیٹ توں لمبے صفحے لکھنا یا پہنچنا مسئلہ ہوندا اے۔
    -اس صفحہ نوں چھوٹے ٹوٹیاں چ تقسیم کرن دے بارے چ سوچ لو۔'''", 'templatesused' => 'اس صفحے تے ورتے گۓ {{PLURAL:$1|سانچے|سانچہ}}:', 'templatesusedpreview' => 'اس کچے کم تے ورتے گئے {{PLURAL:$1|سانچے|سانچہ}} :', 'templatesusedsection' => 'اس ٹوٹے چ استعمال کیتے گۓ سچے:', @@ -650,28 +637,28 @@ $messages = array( 'recentchangeslinked-to' => 'کھلے ہوۓ صفحے دی بجاۓ ایدے نال جڑے صفحے دیاں نویاں تبدیلیاں وکھاؤ', # Upload -'upload' => 'فائل چڑھاؤ', -'uploadbtn' => 'فائل چڑھاؤ', -'reuploaddesc' => 'فائل چڑانا چھڑو تے فائل چڑانے آلے فارم تے واپس ٹرو', -'uploadnologin' => 'لاگ ان نئیں ہوۓ', -'uploaderror' => 'فائل چڑاندیاں مسئلا ہویا اے', -'uploadlogpage' => 'اپلوڈ لاگ', -'filename' => 'فائل دا ناں', -'filedesc' => 'خلاصہ', -'fileuploadsummary' => 'خلاصہ:', -'filesource' => 'ذریعہ:', -'uploadedfiles' => 'اتے چڑھائیاں گئیاں فائلاں', -'successfulupload' => 'فائل چڑھ گئی اے', -'uploadwarning' => 'فائل چڑانے توں خبردار', -'savefile' => 'فائل بچاؤ', -'uploadedimage' => 'چڑھائی گئی"[[$1]]"', -'uploaddisabled' => 'فائل چڑانا بند اے', -'uploaddisabledtext' => 'فائل چڑانے چ رکاوٹ اے۔', -'uploadvirus' => 'اس فائل چ وائرس اے! تفصیل: $1', -'sourcefilename' => 'فائل دے ذریعے دا ناں:', -'destfilename' => 'وکی دے اتے فائل دا ناں:', -'upload-maxfilesize' => 'فائل دا زيادہ توں زيادہ ناپ: $1', -'watchthisupload' => 'اس صفحے تے نظر رکھو', +'upload' => 'فائل چڑھاؤ', +'uploadbtn' => 'فائل چڑھاؤ', +'reuploaddesc' => 'فائل چڑانا چھڑو تے فائل چڑانے آلے فارم تے واپس ٹرو', +'uploadnologin' => 'لاگ ان نئیں ہوۓ', +'uploaderror' => 'فائل چڑاندیاں مسئلا ہویا اے', +'uploadlogpage' => 'اپلوڈ لاگ', +'filename' => 'فائل دا ناں', +'filedesc' => 'خلاصہ', +'fileuploadsummary' => 'خلاصہ:', +'filesource' => 'ذریعہ:', +'uploadedfiles' => 'اتے چڑھائیاں گئیاں فائلاں', +'uploadwarning' => 'فائل چڑانے توں خبردار', +'savefile' => 'فائل بچاؤ', +'uploadedimage' => 'چڑھائی گئی"[[$1]]"', +'uploaddisabled' => 'فائل چڑانا بند اے', +'uploaddisabledtext' => 'فائل چڑانے چ رکاوٹ اے۔', +'uploadvirus' => 'اس فائل چ وائرس اے! تفصیل: $1', +'sourcefilename' => 'فائل دے ذریعے دا ناں:', +'destfilename' => 'وکی دے اتے فائل دا ناں:', +'upload-maxfilesize' => 'فائل دا زيادہ توں زيادہ ناپ: $1', +'watchthisupload' => 'اس صفحے تے نظر رکھو', +'upload-success-subj' => 'فائل چڑھ گئی اے', 'upload-proto-error' => 'غلط پروٹوکول', 'upload-file-error' => 'اندر دا مسئلا', @@ -858,7 +845,6 @@ $messages = array( # Watchlist 'watchlist' => 'میریاں اکھاں تھلے وچ', 'mywatchlist' => 'میری نظر وچ', -'watchlistfor' => "('''$1''' لئی)", 'addedwatch' => 'اکھ تھلے آگیا', 'addedwatchtext' => 'اے صفحہ "[[:$1]] تواڈیاں اکھاں تھلے آگیا اے۔
    مستقبل وچ اس صفحہ تے ایدے بارے چ گل بات نویاں تبدیلیاں وچ موٹے نظر آن گے تا کہ آسانی نال کھوجیا جا سکے۔', @@ -1200,9 +1186,9 @@ $messages = array( 'nextdiff' => 'نویں لکھائی →', # Media information -'file-info-size' => '(پکسل:$1 × $2, فائل سائز: $3, مائم ٹائپ: $4)', +'file-info-size' => 'پکسل:$1 × $2, فائل سائز: $3, مائم ٹائپ: $4', 'file-nohires' => 'اس توں وڈی فوٹو موجود نہیں۔', -'svg-long-desc' => '(ایس وی جی فائل، پکسل:$1 × $2، فائل سائز: $3)', +'svg-long-desc' => 'ایس وی جی فائل، پکسل:$1 × $2، فائل سائز: $3', 'show-big-image' => 'وڈی مورت', 'show-big-image-thumb' => 'کچے کم دے پکسل:$1 × $2', diff --git a/languages/messages/MessagesPnt.php b/languages/messages/MessagesPnt.php index 4b38efa7..c0dd0449 100644 --- a/languages/messages/MessagesPnt.php +++ b/languages/messages/MessagesPnt.php @@ -168,30 +168,19 @@ $messages = array( 'faqpage' => 'Project:Πολλά ερωτήσεις (FAQ)', # Vector skin -'vector-action-delete' => 'Σβήσον', -'vector-action-move' => 'Ετεροχλάεμαν', -'vector-action-protect' => 'Ασπάλιγμαν', -'vector-action-undelete' => 'Κλώσιμον', -'vector-action-unprotect' => 'Άνοιγμαν', -'vector-namespace-category' => 'Κατηγορίαν', -'vector-namespace-help' => 'Σελίδα βοήθειας', -'vector-namespace-image' => 'Αρχείον', -'vector-namespace-main' => 'Σελίδαν', -'vector-namespace-media' => 'Σελίδα μεσίων', -'vector-namespace-mediawiki' => 'Μένεμαν', -'vector-namespace-project' => 'Σχετικά με', -'vector-namespace-special' => 'Ειδικόν σελίδαν', -'vector-namespace-talk' => 'Καλάτσεμαν', -'vector-namespace-template' => 'Πρότυπον', -'vector-namespace-user' => 'Σελίδαν χρήστε', -'vector-view-create' => 'Ποίσον', -'vector-view-edit' => 'Άλλαξον', -'vector-view-history' => 'Τερέστεν ιστορίαν', -'vector-view-view' => 'Δεάβασον', -'vector-view-viewsource' => 'Τερέστεν κωδικόν', -'actions' => 'Ενέργειας', -'namespaces' => 'Περιοχάς', -'variants' => 'Παραλλαγάς', +'vector-action-delete' => 'Σβήσον', +'vector-action-move' => 'Ετεροχλάεμαν', +'vector-action-protect' => 'Ασπάλιγμαν', +'vector-action-undelete' => 'Κλώσιμον', +'vector-action-unprotect' => 'Άνοιγμαν', +'vector-view-create' => 'Ποίσον', +'vector-view-edit' => 'Άλλαξον', +'vector-view-history' => 'Τερέστεν ιστορίαν', +'vector-view-view' => 'Δεάβασον', +'vector-view-viewsource' => 'Τερέστεν κωδικόν', +'actions' => 'Ενέργειας', +'namespaces' => 'Περιοχάς', +'variants' => 'Παραλλαγάς', 'errorpagetitle' => 'Λάθος', 'returnto' => 'Επιστροφήν σο $1.', @@ -359,7 +348,7 @@ $messages = array( 'yourname' => 'Όνεμαν χρήστε:', 'yourpassword' => 'Σημάδι:', 'yourpasswordagain' => "Ξαν' γράψτεν το σημάδι:", -'remembermypassword' => "Αποθήκεμαν τη σημαδίμ σ' αβούτον τον υπολογιστήν", +'remembermypassword' => "Αποθήκεμαν τη σημαδίμ σ' αβούτον τον υπολογιστήν (για μέγιστον $1 {{PLURAL:$1|ημέραν|ημέρας}})", 'yourdomainname' => 'Το domain εσούν:', 'login' => 'Εμπάτε', 'nav-login-createaccount' => 'Εμπάτεν / ποισέστεν λογαρίαν', @@ -375,6 +364,7 @@ $messages = array( 'gotaccount' => "Λογαρίαν έχετε; '''$1'''.", 'gotaccountlink' => 'Εμπάτε', 'createaccountmail' => 'με ελεκτρονικόν μένεμαν', +'createaccountreason' => 'Λόγον:', 'badretype' => "Τα σημάδε ντ' εγράψετεν 'κ ταιριάζνε.", 'userexists' => "Τ' όνεμαν έχ' ατό άλλος χρήστες. Βαλέστε άλλον όνεμαν.", @@ -535,7 +525,6 @@ $messages = array( Εάν 'κ θέλετε ατό να ίνεται, να μην εφτάτε το αποθήκεμαν.
    Καμίαν κι ανασπάλλετε: Αδακά 'κ εν ο τόπον για να θέκουμε γράψιμον ντ' έγραψαν αλλ. Βαλέστε άρθρα όνταν κατέχετε τα δικαιώματα πνευματί μαναχόν. '''ΚΑΜΙΑΝ 'Κ ΘΕΚΕΤΕ ΓΡΑΨΙΜΟΝ ΑΔΑΚΑ ΟΝΤΕΣ 'Κ ΕΧΕΤΕ ΤΑ ΔΙΚΑΙΩΜΑΤΑ ΠΝΕΥΜΑΤΙ!'''", -'longpagewarning' => "'''ΩΡΙΑ: Αβούτεν η σελίδαν έχ' μέγεθος $1 kb. Μερικά browser 'κ επορούν ν' επεξεργάσκουνταν σελίδας ντ' έχνε 32 kb κιαν. Επορείτε να λύετε το πρόβλημαν αν εφτάτεν ατέναν μικρά κομμάται.'''", 'templatesused' => "{{PLURAL:$1|Πρότυπον|Πρότυπα}} το μεταχειρίσκουνταν σ' αβούτεν την σελίδαν:", 'templatesusedpreview' => "{{PLURAL:$1|Πρότυπον|Πρότυπα}} σ' αβούτον το πρώτον τέρεμαν:", 'template-protected' => '(ασπαλιγμένον)', @@ -992,7 +981,6 @@ $messages = array( # Watchlist 'watchlist' => "Σελίδας ντ' ωριάζω", 'mywatchlist' => "Σελίδας ντ' ωριάζω", -'watchlistfor' => "(για '''$1''')", 'watchnologin' => "'Κ είστουν συνδεμένος", 'addedwatch' => 'Εθέκεν σην λίσταν ωριαγματί', 'addedwatchtext' => "Η σελίδαν \"[[:\$1]]\" επήγεν σον [[Special:Watchlist|κατάλογον οριαγματί]] εσούν. @@ -1314,9 +1302,9 @@ $messages = array( # Media information 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|σελίδα|σελίδας}}', -'file-info-size' => '($1 × $2 εικονοστοιχεία, μέγεθος αρχείου: $3, MIME τύπον: $4)', +'file-info-size' => '$1 × $2 εικονοστοιχεία, μέγεθος αρχείου: $3, MIME τύπον: $4', 'file-nohires' => "'Κ εχ κι άλλο ψηλόν ανάλυσην.", -'svg-long-desc' => "(Αρχείον SVG, κατ' όνομα $1 × $2 εικονοστοιχεία, μέγεθος αρχεί: $3)", +'svg-long-desc' => "Αρχείον SVG, κατ' όνομα $1 × $2 εικονοστοιχεία, μέγεθος αρχεί: $3", 'show-big-image' => 'Τζιπ τρανόν ανάλυση', 'show-big-image-thumb' => "Μέγεθος τη πρώτ' τερεματί: $1 × $2 εικονοστοιχεία", diff --git a/languages/messages/MessagesPrg.php b/languages/messages/MessagesPrg.php index 0b223997..6b5fe579 100644 --- a/languages/messages/MessagesPrg.php +++ b/languages/messages/MessagesPrg.php @@ -27,8 +27,7 @@ $messages = array( 'tog-editsection' => 'Ermazīnginais redigīsnan stēisan pāusas sekciōnin pra "[redigīs]" autengīnsenin', 'tog-editsectiononrightclick' => 'Ermazīnginais redigīsnan stēisan pāusas sekciōnin pra tikrōman pellis knuppas gnesnan na tenesses tītelin', 'tog-showtoc' => 'Waidinnais ēnturas listin (en pāusamans sen tūls nikāi 3 sirzdatītelins)', -'tog-rememberpassword' => 'Paminnais enēisenes infōrmaciōnins en šismu kōmputerin', -'tog-editwidth' => 'Paplattinais redigīsnas laūkan en pastippan ekrānas plattu', +'tog-rememberpassword' => 'Paminnais enēisenes infōrmaciōnins en šismu kōmputerin (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Preidāis pāusans kawīdans as teīke prei majjan listin stēisan nadirītan', 'tog-watchdefault' => 'Preidāis pāusans kawīdans as redigijja prei majjan listin stēisan nadirītan', 'tog-watchmoves' => 'Preidāis pāusans, kawīdans as praskajjina prei majjan listin stēisan nadirītan', @@ -168,29 +167,18 @@ Pāusai en kategōrijai "$1"', 'faqpage' => 'Project:Ukadeznai prasīsenei', # Vector skin -'vector-action-delete' => 'Āupausinais', -'vector-action-move' => 'Prapīdais', -'vector-action-protect' => 'Kūnsteis', -'vector-action-unprotect' => 'Etkūnteis', -'vector-namespace-category' => 'Kategōrija', -'vector-namespace-help' => 'Pagalbas pāusan', -'vector-namespace-image' => 'Zūrbrukis', -'vector-namespace-main' => 'Pāusan', -'vector-namespace-media' => 'Median pāusan', -'vector-namespace-mediawiki' => 'Waīstis', -'vector-namespace-project' => 'Prōjaktas pāusan', -'vector-namespace-special' => 'Speciālin pāusan', -'vector-namespace-talk' => 'Diskusiōni', -'vector-namespace-template' => 'Šablōni', -'vector-namespace-user' => 'Tērpautajas pāusan', -'vector-view-create' => 'Teīkeis', -'vector-view-edit' => 'Redigīs', -'vector-view-history' => 'Enwaidinnais istōrijan', -'vector-view-view' => 'Skaitāis', -'vector-view-viewsource' => 'Enwaidinnais appun', -'actions' => 'Dīlasenei', -'namespaces' => 'Tītelin plattibis', -'variants' => 'Warjāntai', +'vector-action-delete' => 'Āupausinais', +'vector-action-move' => 'Prapīdais', +'vector-action-protect' => 'Kūnsteis', +'vector-action-unprotect' => 'Etkūnteis', +'vector-view-create' => 'Teīkeis', +'vector-view-edit' => 'Redigīs', +'vector-view-history' => 'Enwaidinnais istōrijan', +'vector-view-view' => 'Skaitāis', +'vector-view-viewsource' => 'Enwaidinnais appun', +'actions' => 'Dīlasenei', +'namespaces' => 'Tītelin plattibis', +'variants' => 'Warjāntai', 'errorpagetitle' => 'Blānda', 'returnto' => 'Etwartinnais si en pāusan $1.', @@ -407,7 +395,7 @@ Ni izmīrstais kitawīdintun Twajjans [[Special:Preferences|pirminiskwans per {{ 'yourname' => 'Twajā tērpautajas pabilisnā:', 'yourpassword' => 'Twājs kliptaswīrds:', 'yourpasswordagain' => 'Āntrinais kliptaswīrdan', -'remembermypassword' => 'Paminnais majjans enēisnas infōrmaciōnins en šismu kōmputerin', +'remembermypassword' => 'Paminnais majjans enēisnas infōrmaciōnins en šismu kōmputerin (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Twajā dōmeni:', 'externaldberror' => 'Tikka izwinandas autentikāntin dātanbazin blānda, anga ni assei enwarīntan kāi etnāuninlai twajjan izwinandan rekkenan.', 'login' => 'Enjaīs', @@ -605,7 +593,7 @@ Izbāndais, anga tū perarwi kwaitīwuns teīktun/redigītun šin pāusan.', 'usercsspreview' => "'''Paminnais, kāi sta ast tēr twāise CSS pirmādira - nika dabber ni pastāi enpeisātan!'''", 'userjspreview' => "'''Paminnais, kāi sta ast tēr twāise JS kōdas pirmādira - nika dabber ni pastāi enpeisātan!'''", 'userinvalidcssjstitle' => "'''Ēmpirssergīsenis:''' Ni ast prusna \"\$1\". -Paminnais kāi tērpautajas .css be .js pāusai turri pagaūtun si sen līkutan litteran, p. e.g. {{ns:user}}:Foo/monobook.css, ni {{ns:user}}:Foo/Monobook.css.", +Paminnais kāi tērpautajas .css be .js pāusai turri pagaūtun si sen līkutan litteran, p. e.g. {{ns:user}}:Foo/vector.css, ni {{ns:user}}:Foo/Vector.css.", 'updated' => '(Ernaunīntan)', 'note' => "'''Endirīsenis:'''", 'previewnote' => "'''Sta ast tēr pirmādira.''' @@ -644,9 +632,6 @@ Tū dīgi pataūkina, kāi tū peisāi din subs, anga kōpi iz \"public domain\" Ik tū ni kwaitēi, kāi twājs teksts būlai ebwīrpai kitawīdintan, be paplattintan pra eraīnan, ni endīs din stwi. Tū dīgi pataūkina, kāi tū peisāi din subs, anga kōpi iz \"public domain\" anga kittan pawīrpan appun (wīdais dīgi \$1). '''Ni endīs materiālin kūnstan sen autōras tikrōmin šlāit waldītajas preiwērpsenin!'''", -'longpagewarning' => "'''Empirssergīsenis:''' Šin pāusan ast $1 kilōbaitan ilgan; -ainuntas lasātlas mazzi turītun prōblamans redigīntei pāusans tāuwu, anga ilgaisins nikāi 32kb. -Ik sta būlai mazīngi, spēllais pāusan en mazzaisins delīkans.", 'longpageerror' => "'''Blānda!''' Teksts enwests prō tin turri {{PLURAL:$1|1 kilōbaitan|$1 kilōbaitans}}, ka ast ilgaisin nikāi preiwērptai {{PLURAL:$2|1 kilōbaits|$2 kilōbaitai}}. Teksts ni mazzi būtwei enpeisātan.", 'protectedpagewarning' => "'''Ēmpirssergīsenis: Šin pāusan pastāi pakūnstan. Tēr tērpautajai sen perwaldītajas enwarīnsenin mazzi din redigītun.'''", @@ -994,7 +979,7 @@ Tū mazzi dīgi etrīnktun dātun kitēimans drāugautwei sen tin pra tērpautaj 'prefs-advancedrendering' => 'Ēmpirsin treppušas opciōnis', 'prefs-advancedsearchoptions' => 'Ēmpirsin treppušas opciōnis', 'prefs-advancedwatchlist' => 'Ēmpirsin treppušas opciōnis', -'prefs-display' => 'Waidīnsnas opciōnis', +'prefs-displayrc' => 'Waidīnsnas opciōnis', # User rights 'userrights' => 'Perwāldais enwarīnsenins stēisan tērpautajan', @@ -1143,13 +1128,9 @@ Tū mazzi dīgi etrīnktun dātun kitēimans drāugautwei sen tin pra tērpautaj 'recentchanges-legend' => 'Panzdauman kitawīdinsnan mazīngiskwas', 'recentchangestext' => 'Šin pāusan waidinna listin stēisan panzdauman kitawīdinsnan en šissei wiki.', 'recentchanges-feed-description' => 'Nadirēis ukanāunaisins kitawīdisnans en šissei wiki.', -'recentchanges-legend-newpage' => '$1 - nāunan pāusan', 'recentchanges-label-newpage' => 'Šis redigīsenis ast teīkuns nāunan pāusan', -'recentchanges-legend-minor' => '$1 - malks redigīsenis', 'recentchanges-label-minor' => 'Sta ast malks redigīsenis', -'recentchanges-legend-bot' => '$1 - bōtas redigīsenis', 'recentchanges-label-bot' => 'Sta ast redigīsenis segītan pra bōtan', -'recentchanges-legend-unpatrolled' => '$1 - niizbandāts redigīsenis', 'recentchanges-label-unpatrolled' => 'Šis redigīsenis ni ast dabber izbandātan', 'rcnote' => "Zemmais ast {{PLURAL:$1|'''1''' kitawīdinsna segīta|panzdaumas '''$1''' kitawīdinsnas segītas}} en panzdaumamans {{PLURAL:$2|dēinan|'''$2''' dēinans}}, gīrbawintei ezze $5, $4.", 'rcnotefrom' => "Zemmais ast kitawīdisnas ezze '''$2''' (ērgi '''$1''' waidīntan).", @@ -1253,7 +1234,6 @@ Ik tū ainatīngi kwaitēi enkraūtun šin zūrbrukin, ettreppais be tērpaus n 'file-exists-duplicate' => 'Šis zūrbrukis ast kōpija {{PLURAL:$1|šisse zūrbrukin|šēisan zūrbrukin}}:', 'file-deleted-duplicate' => 'Zūrbrukis idēntiskas sen šin zūrbrukin ([[:$1]]) pastāi ankstāis āupausintan. Pirzdau tālis ēisnan, tebbei prawerru izbandātun šisse zūrbrukes āupausinsenin istōrijan.', -'successfulupload' => 'Zūrbrukes enkraūsenis izpalla', 'uploadwarning' => 'Ēmpirssergīsenis ezze enkraūsnan', 'uploadwarning-text' => 'Madli kitawīdinais zūrbukes ebpeisāsenis be bandais etkūmps', 'savefile' => 'Enpeisāis zūrbrukin', @@ -1281,6 +1261,7 @@ Tebbei prawerru prestun, anga ast tikrōmiskan ēmpirsin sadīntun enkraūtun š Šisse zūrbrukes āupausisnas registerin ast waidīntan zemmais.", 'filename-bad-prefix' => "Enkraūtas zūrbrukes pabilisnā pagaūne si sen '''\"\$1\"'''. Sta ast nidekskriptīwa pabilisnā kawīda ast preipeisātan autōmatiskai pra digitālins kāmerans. Madli etrīnkais swajasmu zūrbrukin spārtais deskriptīwan pabilīsnan.", +'upload-success-subj' => 'Zūrbrukes enkraūsenis izpalla', 'upload-proto-error' => 'Nitikrōmiskan prōtokulin', 'upload-proto-error-text' => 'Iztāliska enkraūsna izkinina, kāi URL adressi pagaūlai si sen http:// anga ftp://.', @@ -1429,7 +1410,6 @@ Tērpausna: ēnturas_tīps/pōtips, perw. image/jpeg.', 'statistics-edits-average' => 'Sirzds gīrbis stēisan redigīsenin per pāusan', 'statistics-views-total' => 'Gīrbis wisēisan kāimalukisenei:', 'statistics-views-peredit' => 'Gīrbis stēisan kāimalukisenin per redigīsenin', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue endāsnan rīkas] ilgan', 'statistics-users' => 'Registrītai [[Special:ListUsers|tērpautajai]]', 'statistics-users-active' => 'Aktīwai tērpautajai', 'statistics-users-active-desc' => 'Tērpautajai sēntei aktīwai en {{PLURAL:$1|panzdauman dēinan|panzdaumans dēinans}}', @@ -1444,7 +1424,7 @@ Pāusan ast laikātan per ainapreslinsnan pāusan ik tennan tērpaui šablōnin 'doubleredirects' => 'Dwiggubai prawessenei', 'doubleredirectstext' => 'Zemmais ast listi wisēisan pāusan sen prawessenins en pāusans, kawīdai prawedda en kittan pāusan. Erainā rindā turri ēn sen autengīnsenins en pirman be āntran prawessenin, tīt dīgi autengīnsenin kwēi wedda āntars prawessenis. Jāuku panzdaums autengīnsenin wedda en pāusan, en kawīdan prawerru prawestun pirmasmu pāusan. -Praglaubātai prawessenei ast reparītan.', +Praglaubātai prawessenei ast reparītan.', 'double-redirect-fixed-move' => 'pāusan [[$1]] pastāi praskajjintan. Teinū tennan prawedda prei [[$2]].', 'double-redirect-fixer' => 'Prawessenin tikrintajs', @@ -1644,7 +1624,6 @@ E-mail adressi kawīdan tū enpeisāi en [[Special:Preferences|twajjans pirminis # Watchlist 'watchlist' => 'Listi stēisan nadirītan', 'mywatchlist' => 'Listi stēisan nadirītan', -'watchlistfor' => "(per '''$1''')", 'nowatchlist' => 'Twajā listi stēisan nadirītan pāusan ast pāustan.', 'watchlistanontext' => 'Madli $1, kāi widālai elāmentans stesse listin stēisan nadirītan.', 'watchnologin' => 'Ni assei engūbun', @@ -1921,7 +1900,6 @@ Jaīs en [[Special:IPBlockList|listin stēisan IP adressin]] kai widālai blōki 'ipb-edit-dropdown' => 'Redigīs blōkisenes brewīnslins', 'ipb-unblock-addr' => 'Etblōkis $1', 'ipb-unblock' => 'Etblōkis tērpautajas pabilīsnan anga IP adressin', -'ipb-blocklist-addr' => 'Ekzistīntei $1 blōkisenei', 'ipb-blocklist' => 'Wīdais ekzistīntins blōkisenins', 'ipb-blocklist-contribs' => '$1 endīja', 'unblockip' => 'Etblōkis tērpautajan', @@ -2333,10 +2311,10 @@ Enskattintei din, tū mazzi ārditun twajjan sistēman.", 'imagemaxsize' => "Arāikinais bildin debban:
    ''(per zūrbrukes ebpeisāsenes pāusans)''", 'thumbsize' => 'Miniatūris debban:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|pāusan|pāusai}}', -'file-info' => '(zūrbrukes debban: $1, MIME tīps: $2)', -'file-info-size' => '($1 × $2 pikselai, zūrbrukes debban: $3, MIME tīps: $4)', +'file-info' => 'zūrbrukes debban: $1, MIME tīps: $2', +'file-info-size' => '$1 × $2 pikselai, zūrbrukes debban: $3, MIME tīps: $4', 'file-nohires' => 'Mūisesa rezōluciōni ni ast preiēiminan.', -'svg-long-desc' => '(SVG zūrbrukis, nōminalai $1 × $2 pikselai, debban: $3)', +'svg-long-desc' => 'SVG zūrbrukis, nōminalai $1 × $2 pikselai, debban: $3', 'show-big-image' => 'Pilnā rezōluciōni', 'show-big-image-thumb' => 'Pirmādiras debban: $1 × $2 pikselai', 'file-info-gif-looped' => 'kalpenintan', diff --git a/languages/messages/MessagesPs.php b/languages/messages/MessagesPs.php index 20cd7711..46fa7cf0 100644 --- a/languages/messages/MessagesPs.php +++ b/languages/messages/MessagesPs.php @@ -39,52 +39,58 @@ $namespaceAliases = array( $specialPageAliases = array( 'Userlogin' => array( 'ننوتل' ), 'Userlogout' => array( 'وتل' ), - 'CreateAccount' => array( 'کارن-حساب جوړول' ), - 'Preferences' => array( 'غوره توبونه' ), - 'Watchlist' => array( 'کتنلړليک' ), - 'Recentchanges' => array( 'اوسني بدلونونه' ), - 'Upload' => array( 'پورته کول' ), - 'Listfiles' => array( 'د انځورونو لړليک' ), - 'Newimages' => array( 'نوي انځورونه' ), - 'Listusers' => array( 'د کارونکو لړليک' ), - 'Randompage' => array( 'ناټاکلی، ناټاکلی مخ' ), - 'Lonelypages' => array( 'يتيم مخونه' ), - 'Uncategorizedpages' => array( 'ناوېشلي مخونه' ), - 'Uncategorizedcategories' => array( 'ناوېشلې وېشنيزې' ), - 'Uncategorizedimages' => array( 'ناوېشلي انځورونه، ناوېشلې دوتنې' ), - 'Uncategorizedtemplates' => array( 'ناوېشلې کينډۍ' ), - 'Unusedcategories' => array( 'ناکارېدلي وېشنيزې' ), - 'Unusedimages' => array( 'ناکارېدلې دوتنې' ), - 'Wantedcategories' => array( 'غوښتلې وېشنيزې' ), - 'Wantedfiles' => array( 'غوښتلې دوتنې' ), - 'Wantedtemplates' => array( 'غوښتلې کينډۍ' ), - 'Shortpages' => array( 'لنډ مخونه' ), - 'Longpages' => array( 'اوږده مخونه' ), - 'Newpages' => array( 'نوي مخونه' ), - 'Ancientpages' => array( 'لرغوني مخونه' ), - 'Protectedpages' => array( 'ژغورلي مخونه' ), - 'Protectedtitles' => array( 'ژغورلي سرليکونه' ), - 'Allpages' => array( 'ټول مخونه' ), - 'Specialpages' => array( 'ځانګړي مخونه' ), + 'CreateAccount' => array( 'کارن-حساب_جوړول' ), + 'Preferences' => array( 'غوره_توبونه' ), + 'Watchlist' => array( 'کتنلړ' ), + 'Recentchanges' => array( 'اوسني_بدلونونه' ), + 'Upload' => array( 'پورته_کول' ), + 'Listfiles' => array( 'د_انځورونو_لړليک' ), + 'Newimages' => array( 'نوي_انځورونه' ), + 'Listusers' => array( 'د_کارنانو_لړليک' ), + 'Statistics' => array( 'شمار' ), + 'Randompage' => array( 'ناټاکلی،_ناټاکلی_مخ' ), + 'Lonelypages' => array( 'يتيم_مخونه' ), + 'Uncategorizedpages' => array( 'ناوېشلي_مخونه' ), + 'Uncategorizedcategories' => array( 'ناوېشلې_وېشنيزې' ), + 'Uncategorizedimages' => array( 'ناوېشلي_انځورونه،_ناوېشلې_دوتنې' ), + 'Uncategorizedtemplates' => array( 'ناوېشلې_کينډۍ' ), + 'Unusedcategories' => array( 'ناکارېدلي_وېشنيزې' ), + 'Unusedimages' => array( 'ناکارېدلې_دوتنې' ), + 'Wantedcategories' => array( 'غوښتلې_وېشنيزې' ), + 'Wantedfiles' => array( 'غوښتلې_دوتنې' ), + 'Wantedtemplates' => array( 'غوښتلې_کينډۍ' ), + 'Shortpages' => array( 'لنډ_مخونه' ), + 'Longpages' => array( 'اوږده_مخونه' ), + 'Newpages' => array( 'نوي_مخونه' ), + 'Ancientpages' => array( 'لرغوني_مخونه' ), + 'Protectedpages' => array( 'ژغورلي_مخونه' ), + 'Protectedtitles' => array( 'ژغورلي_سرليکونه' ), + 'Allpages' => array( 'ټول_مخونه' ), + 'Prefixindex' => array( 'د_مختاړيو_ليکلړ' ), + 'Ipblocklist' => array( 'د_بنديزلړليک' ), + 'Unblock' => array( 'بنديز_لرې_کول' ), + 'Specialpages' => array( 'ځانګړي_مخونه' ), 'Contributions' => array( 'ونډې' ), - 'Booksources' => array( 'د کتاب سرچينې' ), + 'Booksources' => array( 'د_کتاب_سرچينې' ), 'Categories' => array( 'وېشنيزې' ), 'Export' => array( 'صادرول' ), 'Version' => array( 'بڼه' ), 'Allmessages' => array( 'ټول-پيغامونه' ), - 'Log' => array( 'يادښتونه، يادښت' ), + 'Log' => array( 'يادښتونه،_يادښت' ), + 'Blockip' => array( 'بنديز،_د_آی_پي_بنديز،_بنديز_لګېدلی_کارن_Block' ), 'Undelete' => array( 'ناړنګول' ), - 'Unwatchedpages' => array( 'ناکتلي مخونه' ), - 'Unusedtemplates' => array( 'ناکارېدلې کينډۍ' ), - 'Mypage' => array( 'زما پاڼه' ), - 'Mytalk' => array( 'زما خبرې اترې' ), + 'Unwatchedpages' => array( 'ناکتلي_مخونه' ), + 'Unusedtemplates' => array( 'ناکارېدلې_کينډۍ' ), + 'Mypage' => array( 'زما_پاڼه' ), + 'Mytalk' => array( 'زما_خبرې_اترې' ), 'Mycontributions' => array( 'زماونډې' ), 'Popularpages' => array( 'نامتومخونه' ), 'Search' => array( 'پلټنه' ), - 'Resetpass' => array( 'پټنوم بدلول، پټنوم بيا پر ځای کول، د بيا پر ځای کولو پاسپورټ' ), - 'Blankpage' => array( 'تش مخ' ), - 'LinkSearch' => array( 'د تړنې پلټنه' ), - 'DeletedContributions' => array( 'ړنګې شوي ونډې' ), + 'Resetpass' => array( 'پټنوم_بدلول،_پټنوم_بيا_پر_ځای_کول،_د_بيا_پر_ځای_کولو_پاسپورټ' ), + 'Blankpage' => array( 'تش_مخ' ), + 'LinkSearch' => array( 'د_تړنې_پلټنه' ), + 'DeletedContributions' => array( 'ړنګې_شوي_ونډې' ), + 'Badtitle' => array( 'ناسم_سرليک،_Badtitle' ), ); $magicWords = array( @@ -130,7 +136,7 @@ $magicWords = array( 'img_right' => array( '1', 'ښي', 'right' ), 'img_left' => array( '1', 'کيڼ', 'left' ), 'img_none' => array( '1', 'هېڅ', 'none' ), - 'img_center' => array( '1', 'مېنځ، center', 'center', 'centre' ), + 'img_center' => array( '1', 'مېنځ،_center', 'center', 'centre' ), 'sitename' => array( '1', 'دوېبځي_نوم', 'SITENAME' ), 'server' => array( '0', 'پالنګر', 'SERVER' ), 'servername' => array( '0', 'دپالنګر_نوم', 'SERVERNAME' ), @@ -144,7 +150,7 @@ $magicWords = array( 'hiddencat' => array( '1', '__پټه_وېشنيزه__', '__HIDDENCAT__' ), 'pagesize' => array( '1', 'مخکچه', 'PAGESIZE' ), 'index' => array( '1', '__ليکلړ__', '__INDEX__' ), - 'noindex' => array( '1', '__بې ليکلړ__', '__NOINDEX__' ), + 'noindex' => array( '1', '__بې_ليکلړ__', '__NOINDEX__' ), 'protectionlevel' => array( '1', 'ژغورکچه', 'PROTECTIONLEVEL' ), ); @@ -159,6 +165,7 @@ $defaultUserOptionOverrides = array( $messages = array( # User preference toggles 'tog-underline' => 'کرښنې تړنې:', +'tog-highlightbroken' => 'د بڼې ماتې تړنې لکه همدا (بله چاره: لکه همدا?)', 'tog-justify' => 'پاراګرافونه همجوليزول', 'tog-hideminor' => 'په وروستيو بدلونو کې واړه سمونونه پټول', 'tog-hidepatrolled' => 'په وروستيو بدلونونو کې څارل شوې سمونونه پټول', @@ -171,7 +178,7 @@ $messages = array( 'tog-editsection' => 'د [سمول] تړنې له لوري د يوې ليکنې يوه برخه د سمون وړ ګرځول', 'tog-editsectiononrightclick' => 'د ښي کلېک سره د سرليکونو د برخې سمون چارنول (جاواسکرېپټ ته اړتيا)', 'tog-showtoc' => 'نيوليک ښکاره کول (د هغو مخونو لپاره چې له ۳ نه ډېر سرليکونه لري)', -'tog-rememberpassword' => 'زما پټنوم پدې کمپيوټر په ياد ولره!', +'tog-rememberpassword' => 'زما کارن-نوم په دې کتنمل (تر $1 {{PLURAL:$1|ورځې|ورځو}}) په ياد وساته!', 'tog-watchcreations' => 'هغه مخونه چې زه يې جوړوم، زما کتنلړ کې ورګډ کړه', 'tog-watchdefault' => 'هغه مخونه چې زه يې سموم، زما کتنلړ کې ورګډ کړه', 'tog-watchmoves' => 'هغه مخونه چې زه يې لېږدوم، زما کتنلړ کې ورګډ کړه', @@ -187,6 +194,7 @@ $messages = array( 'tog-shownumberswatching' => 'د کتونکو کارنانو شمېر ښکاره کول', 'tog-oldsig' => 'د شته لاسليک مخليدنه:', 'tog-fancysig' => 'لاسليک د ويکي متن په توګه په پام کې نيول (د خپلکاره تړن د تړلو پرته)', +'tog-showjumplinks' => 'د "ورټوپ کړه" د آسانتياوو تړنې چارنول', 'tog-uselivepreview' => 'ژوندۍ مخليدنه کارول (جاوا سکرېپټ ته اړتيا) (آزمېښتي)', 'tog-forceeditsummary' => 'د يوه تش سمون لنډيز په ورکولو سره دې خبر راکړل شي', 'tog-watchlisthideown' => 'په کتنلړ کې زما سمونې پټول', @@ -311,30 +319,19 @@ $messages = array( 'faqpage' => 'Project:ډ-ځ-پ', # Vector skin -'vector-action-addsection' => 'سرليکونه ورګډول', -'vector-action-delete' => 'ړنګول', -'vector-action-move' => 'لېږدول', -'vector-action-protect' => 'پروژه', -'vector-action-undelete' => 'ناړنګول', -'vector-action-unprotect' => 'ناژغورل', -'vector-namespace-category' => 'وېشنيزه', -'vector-namespace-help' => 'لارښود مخ', -'vector-namespace-image' => 'دوتنه', -'vector-namespace-main' => 'مخ', -'vector-namespace-media' => 'د رسنۍ مخ', -'vector-namespace-mediawiki' => 'پيغام', -'vector-namespace-project' => 'د پروژې مخ', -'vector-namespace-special' => 'ځانګړی مخ', -'vector-namespace-talk' => 'خبرې اترې', -'vector-namespace-template' => 'کينډۍ', -'vector-namespace-user' => 'کارن مخ', -'vector-view-create' => 'جوړول', -'vector-view-edit' => 'سمول', -'vector-view-history' => 'پېښليک کتل', -'vector-view-view' => 'لوستل', -'vector-view-viewsource' => 'سرچينه کتل', -'actions' => 'کړنې', -'namespaces' => 'نوم-تشيالونه', +'vector-action-addsection' => 'سرليکونه ورګډول', +'vector-action-delete' => 'ړنګول', +'vector-action-move' => 'لېږدول', +'vector-action-protect' => 'پروژه', +'vector-action-undelete' => 'ناړنګول', +'vector-action-unprotect' => 'ناژغورل', +'vector-view-create' => 'جوړول', +'vector-view-edit' => 'سمول', +'vector-view-history' => 'پېښليک کتل', +'vector-view-view' => 'لوستل', +'vector-view-viewsource' => 'سرچينه کتل', +'actions' => 'کړنې', +'namespaces' => 'نوم-تشيالونه', 'errorpagetitle' => 'تېروتنه', 'returnto' => 'بېرته $1 ته وګرځه.', @@ -395,6 +392,7 @@ $messages = array( لطفاً د دې مخ د کتلو د بيا هڅې نه دمخه يو څو شېبې صبر وکړۍ. $1', +'pool-errorunknown' => 'ناجوته ستونزه', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'د {{SITENAME}} په اړه', @@ -413,7 +411,7 @@ $1', 'policy-url' => 'Project:تګلاره', 'portal' => 'د ټولنې تانبه', 'portal-url' => 'Project:د ټولنې تانبه', -'privacy' => 'د محرميت تګلاره', +'privacy' => 'د پټنتيا تګلاره', 'privacypage' => 'Project:د محرميت_تګلاره', 'badaccess' => 'د لاسرسۍ تېروتنه', @@ -535,7 +533,8 @@ $1', 'yourname' => 'کارن-نوم:', 'yourpassword' => 'پټنوم:', 'yourpasswordagain' => 'پټنوم بيا وليکه', -'remembermypassword' => 'زما پټنوم پدې کمپيوټر په ياد ولره!', +'remembermypassword' => 'زما پټنوم په دې کمپيوټر (تر $1 {{PLURAL:$1|ورځې|ورځو}}) په ياد وساته!', +'securelogin-stick-https' => 'وروسته د ننوتلو HTTPS سره تړلی پاتې کېدل', 'yourdomainname' => 'ستاسې شپول:', 'login' => 'ننوتل', 'nav-login-createaccount' => 'ننوتل / ګڼون جوړول', @@ -551,6 +550,7 @@ $1', 'gotaccount' => 'آيا وار دمخې يو ګڼون لری؟ $1.', 'gotaccountlink' => 'ننوتل', 'createaccountmail' => 'د برېښليک له مخې', +'createaccountreason' => 'سبب:', 'badretype' => 'دا پټنوم چې تاسې ليکلی د مخکني پټنوم سره ورته نه دی.', 'userexists' => 'کوم کارن نوم چې تاسې ورکړ هغه بل چا کارولی. لطفاً يو بل نوم وټاکۍ.', @@ -576,6 +576,7 @@ $1', 'wrongpasswordempty' => 'تاسې پټنوم نه دی ليکلی. لطفاً سر له نوي يې وليکۍ.', 'passwordtooshort' => 'بايد چې پټنوم مو لږ تر لږه {{PLURAL:$1|1 توری|$1 توري}} وي.', 'password-name-match' => 'ستاسې پټنوم بايد ستاسې د کارن-نوم سره توپير ولري.', +'password-login-forbidden' => 'د دې کارن-نوم او پټنوم په کارېدنې بنديز دی.', 'mailmypassword' => 'نوی پټنوم برېښليک کول', 'passwordremindertitle' => 'د {{SITENAME}} لپاره نوی لنډمهاله پټنوم', 'passwordremindertext' => 'يو چا (کېدای شي چې تاسې پخپله، د $1 IP پتې نه) @@ -599,6 +600,8 @@ $1', 'emailnotauthenticated' => 'ستاسو د برېښليک پته لا تر اوسه پورې د منلو وړ نه ده ګرځېدلې. د اړوندو بېلوونکو نښو په هکله تاسو ته هېڅ کوم برېښليک نه لېږل کېږي.', 'noemailprefs' => 'ددې لپاره چې دا کړنې کار وکړي نو تاسو يو برېښليک وټاکۍ.', 'emailconfirmlink' => 'د خپل د برېښليک پتې پخلی وکړی', +'invalidemailaddress' => 'دا برېښليک پته نه منل کېږي، دا ځکه چې دا پته يوه ناکره بڼه لري. +لطفاً د يوې کره بڼې پته وليکۍ او يا هم دا ځای تش پرېږدۍ.', 'accountcreated' => 'ګڼون مو جوړ شو.', 'accountcreatedtext' => 'د $1 لپاره يو ګڼون جوړ شو.', 'createaccount-title' => 'د {{SITENAME}} د ګڼون جوړېدنه', @@ -655,6 +658,7 @@ $1', 'showlivepreview' => 'ژوندۍ مخکتنه', 'showdiff' => 'بدلونونه ښکاره کول', 'anoneditwarning' => "'''يادونه:''' تاسې غونډال ته نه ياست ننوتي. ستاسې IP پته به د دې مخ د سمونونو په پېښليک کې ثبت شي.", +'anonpreviewwarning' => "''تاسې غونډال ته نه ياست ننوتي. خوندي کولو سره به ستاسې IP پته به د دې مخ د سمونونو په پېښليک کې ثبت شي.''", 'missingcommenttext' => 'لطفاً تبصره لاندې وليکۍ.', 'summary-preview' => 'د لنډيز مخليدنه:', 'subject-preview' => 'موضوع/سرليک مخکتنه:', @@ -727,8 +731,6 @@ $1', 'yourdiff' => 'توپيرونه', 'copyrightwarning' => "لطفاً په پام کې وساتۍ چې ټولې هغه ونډې چې تاسې يې {{SITENAME}} کې ترسره کوی هغه د $2 له مخې د خپرولو لپاره ګڼل کېږي (د لانورو تفصيلاتو لپاره $1 وګورۍ). که تاسې نه غواړۍ چې په ليکنو کې مو په بې رحمۍ سره لاسوهنې (سمونې) وشي او د نورو په غوښتنه پسې لانورې هم خپرې شي، نو دلته يې مه ځای پر ځای کوی..
    تاسې زمونږ سره دا ژمنه هم کوی چې تاسې پخپله دا ليکنه کښلې، او يا مو د ټولګړو پاڼو او يا ورته وړيا سرچينو نه کاپي کړې ده '''لطفاً د ليکوال د اجازې نه پرته د خوندي رښتو ليکنې مه خپروی!'''", -'longpagewarning' => "'''پاملرنه: همدا مخ $1 کيلوبايټه اوږد دی؛ کېدای شي چې ځينې کتنملونه د ۳۲ کيلوبايټ نه د اوږدو مخونو په سمونه کې ستونزه رامېنځ ته کړي. -لطفاً د مخ په لنډولو او په وړو برخو وېشلو باندې غور وکړی.'''", 'longpageerror' => "'''ستونزه: کوم متن چې دلته تاسو ليکلی، $1 کيلوبايټه اوږد دی او دا د همدې مخ د لوړترين ټاکلي بريده، $2 کيلوبايټه، څخه اوږد دی. ستاسو متن نه شي خوندي کېدلای.'''", 'protectedpagewarning' => "'''ګواښنه: همدا مخ تړل شوی او يوازې هغه کارنان په دې مخ کې بدلونونه راوستلای شي چې د پازوالۍ د آسانتياوو نه برخمن دي.''' @@ -767,6 +769,10 @@ $1', 'edit-already-exists' => 'په دې نوم يو نوی مخ جوړ نه شو. پدې نوم د پخوا نه يو مخ شته.', +# Parser/template warnings +'post-expand-template-inclusion-warning' => "'''ګواښنه:''' دا کينډۍ د خپل ټاکلي بريد نه ډېره لويه ده. +ځينې کينډۍ به په کې ګډې نه شي.", + # "Undo" feature 'undo-norev' => 'دا سمون ناکړ کېدلای نه شي دا ځکه چې دا سمون نشته او يا هم ړنګ شوی.', @@ -825,6 +831,8 @@ $1', 'revdelete-radio-unset' => 'نه', 'revdelete-log' => 'سبب:', 'revdel-restore' => 'ښکارېدنه بدلول', +'revdel-restore-deleted' => 'ړنګې شوې بڼې', +'revdel-restore-visible' => 'ښکاره بڼې', 'pagehist' => 'د مخ پېښليک', 'deletedhist' => 'د ړنګولو پېښليک', 'revdelete-content' => 'مېنځپانګه', @@ -858,11 +866,12 @@ $1', # Diffs 'history-title' => 'د "$1" د پېښليک بڼه', 'difference' => '(د بڼو تر مېنځ توپير)', +'difference-multipage' => '(د مخونو تر مېنځ توپير)', 'lineno' => '$1 کرښه:', 'compareselectedversions' => 'ټاکلې بڼې سره پرتلل', 'showhideselectedversions' => 'ټاکلې بڼې ښکاره کول/پټول', 'editundo' => 'ناکړ', -'diff-multi' => '({{PLURAL:$1|يوه منځګړې مخليدنه نه ده ښکاره شوې|$1 منځګړې مخليدنې نه دي ښکاره شوي}}.)', +'diff-multi' => ' د ({{PLURAL:$2| يو کارن|$2 کارنانو}} لخوا {{PLURAL:$1|يوه منځګړې بڼه|$1 منځګړې بڼې}}د نه ده ښکاره شوې)', # Search results 'searchresults' => 'د پلټنې پايلې', @@ -893,7 +902,9 @@ $1', 'searchprofile-project-tooltip' => 'په $1 کې پلټل', 'searchprofile-images-tooltip' => 'د دوتنو پلټنه', 'searchprofile-everything-tooltip' => 'د ټولې مېنځپانګې پلټنه (د خبرو اترو مخونو سره)', +'searchprofile-advanced-tooltip' => 'د خپل خوښې په نوم-تشيالونو کې پلټل', 'search-result-size' => '$1 ({{PLURAL:$2|1 ويی|$2 وييونه}})', +'search-result-category-size' => '{{PLURAL:$1|1 غړی|$1 غړي}} ({{PLURAL:$2|1 څېرمه وېشنيزه|$2 څېرمه وېشنيزې}}، {{PLURAL:$3|1 دوتنه|$3 دوتنې}})', 'search-result-score' => 'اړوندتوب: $1%', 'search-redirect' => '(د $1 مخ ګرځونه)', 'search-section' => '(برخه $1)', @@ -959,6 +970,7 @@ $1', 'columns' => 'ستنې:', 'searchresultshead' => 'پلټل', 'resultsperpage' => 'په هر مخ کې د پايلو شمېر:', +'stub-threshold-disabled' => 'ناچارند شوی', 'recentchangesdays' => 'د هغو ورځو شمېر وټاکی چې په وروستي بدلونو کې يې ليدل غواړی:', 'recentchangescount' => 'د هغو سمونو شمېر چې په تلواليزه بڼه ښکاره بايد شي:', 'prefs-help-recentchangescount' => 'پدې کې د وروستني بدلونونو، د مخونو د پېښليکونو او يادښتونه شامل دي.', @@ -988,6 +1000,7 @@ $1', 'prefs-files' => 'دوتنې', 'prefs-custom-css' => 'ځاني CSS', 'prefs-custom-js' => 'ځاني جاواسکرېپټ', +'prefs-common-css-js' => 'د ټولو پوښونو لپاره د CSS/جاواسکرېپټ دوتنه:', 'prefs-emailconfirm-label' => 'د برېښليک باورتيا:', 'prefs-textboxsize' => 'د سمون کړکۍ کچه', 'youremail' => 'برېښليک *', @@ -1019,7 +1032,9 @@ $1', 'prefs-advancedrendering' => 'پرمختللې خوښنې', 'prefs-advancedsearchoptions' => 'پرمختللې خوښنې', 'prefs-advancedwatchlist' => 'پرمختللې خوښنې', -'prefs-display' => 'د ښکارېدنې خوښنې', +'prefs-displayrc' => 'د ښکارېدنې خوښنې', +'prefs-displaysearchoptions' => 'د ښکارېدنې خوښنې', +'prefs-displaywatchlist' => 'د ښکارېدنې خوښنې', 'prefs-diffs' => 'توپيرونه', # User rights @@ -1116,12 +1131,8 @@ $1', 'recentchanges-legend' => 'د ورستي بدلونو خوښنې', 'recentchangestext' => 'په همدې مخ باندې د ويکي ترټولو تازه وروستي بدلونونه وڅارۍ.', 'recentchanges-feed-description' => 'همدلته د ويکي ترټولو تازه وروستي بدلونونه وڅارۍ او وګورۍ چې څه پېښ شوي.', -'recentchanges-label-legend' => 'څرګندونې: $1.', -'recentchanges-legend-newpage' => '$1 - نوی مخ', 'recentchanges-label-newpage' => 'دغه سمون يو نوی مخ جوړ کړی', -'recentchanges-legend-minor' => '$1 - وړوکی سمون', 'recentchanges-label-minor' => 'دا يوه وړه سمونه ده', -'recentchanges-legend-bot' => '$1 - د روباټ سمون', 'recentchanges-label-bot' => 'دغه سمون د يو روباټ لخوا ترسره شوی', 'recentchanges-label-unpatrolled' => 'دغه سمون تر اوسه پورې نه دی څارل شوی', 'rcnote' => "دلته لاندې {{PLURAL:$1|وروستی '''1''' بدلون دی|وروستي '''$1''' بدلونونه دي}} چې په {{PLURAL:$2| يوې ورځ|'''$2''' ورځو}} کې تر $4 نېټې او $5 بجو پېښ شوي.", @@ -1184,6 +1195,11 @@ $1', 'minlength1' => 'پکار ده چې د دوتنو نومونه لږ تر لږه يو حرف ولري.', 'badfilename' => 'ددغې دوتنې نوم "$1" ته واوړېده.', 'filetype-badmime' => 'د MIME بڼې "$1" د دوتنو د پورته کولو اجازه نشته.', +'empty-file' => 'کومه دوتنه چې تاسې دلته سپارلې هغه تشه ده.', +'file-too-large' => 'کومه دوتنه چې تاسې دلته سپارلې ډېره لويه ده.', +'filename-tooshort' => 'د دوتنې نوم ډېر لنډ دی', +'filetype-banned' => 'د دې بڼې په دوتنې بنديز دی', +'tmp-create-error' => 'لنډمهاله دوتنه جوړېدای نه شي', 'fileexists' => "د پخوا نه پدې نوم يوه دوتنه شته، که تاسو ډاډه نه ياست او يا هم که تاسو غواړۍ چې بدلون پکې راولۍ، لطفاً '''[[:$1]]''' وګورۍ. [[$1|thumb]]", 'fileexists-extension' => "په همدې نوم يوه بله دوتنه د پخوا نه شته: [[$2|thumb]] @@ -1194,7 +1210,6 @@ $1', که تاسې بيا هم د خپلې دوتنې پورته کول غواړۍ، نو لطفاً بېرته وګرځۍ او همدغه دوتنه بيا په يوه نوي نوم پورته کړی. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'همدا دوتنه د {{PLURAL:$1|لاندينۍ دوتنې|لاندينيو دوتنو}} غبرګه لمېسه ده:', -'successfulupload' => 'دوتنه پورته کېدل په برياليتوب سره ترسره شو', 'savefile' => 'دوتنه خوندي کړه', 'uploadedimage' => '"[[$1]]" پورته شوه', 'uploaddisabled' => 'پورته کول ناچارن شوي', @@ -1207,6 +1222,8 @@ $1', 'upload-description' => 'د دوتنې څرګندونې', 'upload-options' => 'د پورته کولو خوښنې', 'watchthisupload' => 'همدا دوتنه کتل', +'upload-success-subj' => 'دوتنه پورته کېدل په برياليتوب سره ترسره شو', +'upload-failure-subj' => 'د پورته کېدو ستونزه', 'upload-file-error' => 'کورنۍ ستونزه', 'upload-unknown-size' => 'ناڅرګنده کچه', @@ -1233,6 +1250,7 @@ $1', 'listfiles_search_for' => 'د انځور د نوم لټون:', 'imgfile' => 'دوتنه', 'listfiles' => 'د دوتنو لړليک', +'listfiles_thumb' => 'بټنوک', 'listfiles_date' => 'نېټه', 'listfiles_name' => 'نوم', 'listfiles_user' => 'کارن', @@ -1323,7 +1341,8 @@ $1', 'statistics-users-active' => 'فعاله کارنان', 'statistics-mostpopular' => 'تر ټولو ډېر کتل شوي مخونه', -'disambiguations' => 'د څرګندونې مخونه', +'disambiguations' => 'د څرګندونې مخونه', +'disambiguationspage' => 'Template:ناجوت', 'doubleredirects' => 'دوه ځلي ورګرځېدنې', @@ -1344,6 +1363,7 @@ $1', 'nmembers' => '$1 {{PLURAL:$1|غړی|غړي}}', 'nrevisions' => '$1 {{PLURAL:$1|بڼه|بڼې}}', 'nviews' => '$1 {{PLURAL:$1|کتنه|کتنې}}', +'nimagelinks' => 'په $1 {{PLURAL:$1|کارېدلی مخ|کارېدلي مخونه}}', 'specialpage-empty' => 'د دې راپور لپاره کومې پايلې نشته.', 'lonelypages' => 'يتيم مخونه', 'uncategorizedpages' => 'په وېشنيزو ناوېشلي مخونه', @@ -1475,29 +1495,35 @@ $1', 'listgrouprights-removegroup-self-all' => 'خپل ګڼون نه ټولې ډلې ليري کول', # E-mail user -'mailnologin' => 'هېڅ کومه لېږل شوې پته نشته', -'emailuser' => 'کارن ته برېښليک لېږل', -'emailpage' => 'کارن ته برېښليک لېږل', -'defemailsubject' => 'د {{SITENAME}} برېښليک', -'noemailtitle' => 'هېڅ کومه برېښليک پته نشته.', -'nowikiemailtitle' => 'د برېښليک لېږلو اجازه نشته', -'nowikiemailtext' => 'دې کارن د نورو کارنانو لخوا د برېښليک د نه ترلاسه کولو چاره خوښه کړې.', -'email-legend' => 'د {{SITENAME}} يو بل کارن ته يو برېښليک ورلېږل', -'emailfrom' => 'لېږونکی', -'emailto' => 'اخيستونکی', -'emailsubject' => 'سکالو:', -'emailmessage' => 'پيغام:', -'emailsend' => 'لېږل', -'emailccme' => 'زما د پيغام يوه بېلګه دې ماته هم برېښليک شي.', -'emailccsubject' => '$1 ته ستاسو د پيغام لمېسه: $2', -'emailsent' => 'برېښليک مو ولېږل شو', -'emailsenttext' => 'ستاسو برېښليکي پيغام ولېږل شو.', -'emailuserfooter' => 'همدا برېښليک د $1 لخوا $2 ته د {{SITENAME}} په وېبځي کې د "همدې کارونکي ته برېښليک لېږل" د کړنې په مرسته لېږل شوی دی.', +'mailnologin' => 'هېڅ کومه لېږل شوې پته نشته', +'emailuser' => 'کارن ته برېښليک لېږل', +'emailpage' => 'کارن ته برېښليک لېږل', +'defemailsubject' => 'د {{SITENAME}} برېښليک', +'usermaildisabled' => 'د کارن برېښليک ناچارند دی', +'usermaildisabledtext' => 'په دې ويکي تاسې نورو کارنانو ته برېښليک نه شی ورلېږلی', +'noemailtitle' => 'هېڅ کومه برېښليک پته نشته.', +'nowikiemailtitle' => 'د برېښليک لېږلو اجازه نشته', +'nowikiemailtext' => 'دې کارن د نورو کارنانو لخوا د برېښليک د نه ترلاسه کولو چاره خوښه کړې.', +'email-legend' => 'د {{SITENAME}} يو بل کارن ته يو برېښليک ورلېږل', +'emailfrom' => 'لېږونکی', +'emailto' => 'اخيستونکی', +'emailsubject' => 'سکالو:', +'emailmessage' => 'پيغام:', +'emailsend' => 'لېږل', +'emailccme' => 'زما د پيغام يوه بېلګه دې ماته هم برېښليک شي.', +'emailccsubject' => '$1 ته ستاسو د پيغام لمېسه: $2', +'emailsent' => 'برېښليک مو ولېږل شو', +'emailsenttext' => 'ستاسو برېښليکي پيغام ولېږل شو.', +'emailuserfooter' => 'همدا برېښليک د $1 لخوا $2 ته د {{SITENAME}} په وېبځي کې د "همدې کارونکي ته برېښليک لېږل" د کړنې په مرسته لېږل شوی دی.', + +# User Messenger +'usermessage-summary' => 'د غونډال پيغام پرېښودل.', +'usermessage-editor' => 'د غونډال پيغام رسونکی', # Watchlist 'watchlist' => 'زما کتنلړ', 'mywatchlist' => 'زما کتنلړ', -'watchlistfor' => "(د '''$1''')", +'watchlistfor2' => 'د $1 لپاره $2', 'nowatchlist' => 'ستاسو په کتلي لړليک کې هېڅ نه شته.', 'watchlistanontext' => 'د خپل کتنلړ د توکو د سمولو او کتلو لپاره $1 ترسره کړۍ.', 'watchnologin' => 'غونډال کې نه ياست ننوتي.', @@ -1681,10 +1707,12 @@ $UNWATCHURL نه ليدنه وکړۍ 'sp-contributions-newbies-sub' => 'د نوو ګڼونونو لپاره', 'sp-contributions-blocklog' => 'د بنديز يادښت', 'sp-contributions-deleted' => 'د کارن ونډې ړنګې شوې', +'sp-contributions-uploads' => 'پورته کېدنې', 'sp-contributions-logs' => 'يادښتونه', 'sp-contributions-talk' => 'خبرې اترې', 'sp-contributions-search' => 'د ونډو لټون', 'sp-contributions-username' => 'IP پته يا کارن-نوم:', +'sp-contributions-toponly' => 'يوازې هغه سمونونه چې تر ټولو تازه بڼې لري ښکاره کول', 'sp-contributions-submit' => 'پلټل', # What links here @@ -1722,7 +1750,7 @@ $UNWATCHURL نه ليدنه وکړۍ ** په مخونو کې ناندرۍ راپارېدنې/د تاوتريخوالي خپرېدو ته هڅول ** د ګڼ شمېر ګڼونونو نه ناوړه ګټه اخيستل ** نه مننونکی کارن-نوم کارول', -'ipbcreateaccount' => 'د ګڼون جوړولو مخنيوی', +'ipbcreateaccount' => 'د ګڼون جوړولو مخنيول', 'ipbsubmit' => 'په دې کارن بنديز لګول', 'ipbother' => 'بل وخت:', 'ipboptions' => '2 ساعتونه:2 hours,1 ورځ:1 day,3 ورځې:3 days,1 اوونۍ:1 week,2 اوونۍ:2 weeks,1 مياشت:1 month,3 مياشتې:3 months,6 مياشتې:6 months,1 کال:1 year,لامحدوده:infinite', @@ -1936,6 +1964,8 @@ $UNWATCHURL نه ليدنه وکړۍ 'tooltip-rollback' => 'په همدې مخ کې "په شابېول" د وروستني ونډوال سمون (سمونونه) په يوه کلېک په څټ ورګرځوي.', 'tooltip-undo' => '"ناکړ" همدا سمون پر شا ګرځوي او د سمون کړکۍ د مخکتنې په بڼه پرانيزي. دا کړنه د لنډيز په برخه کې د سمونونو د سببونو د ورګډولو آسانتيا برابروي.', +'tooltip-preferences-save' => 'غوره توبونه خوندي کول', +'tooltip-summary' => 'يو لنډ لنډيز کښل', # Attribution 'anonymous' => 'د {{SITENAME}} {{PLURAL:$1|ورکنومی کارن|ورکنومي کارنان}}', @@ -1983,14 +2013,14 @@ $UNWATCHURL نه ليدنه وکړۍ # Media information 'thumbsize' => 'د بټنوک کچه:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|مخ|مخونه}}', -'file-info-size' => '($1 × $2 پېکسل, د دوتنې کچه: $3, MIME بڼه: $4)', +'file-info-size' => '$1 × $2 پېکسل, د دوتنې کچه: $3, MIME بڼه: $4', 'file-nohires' => 'تر دې کچې لوړې بېلن نښې نشته.', -'svg-long-desc' => '(SVG دوتنه، نومېنلي $1 × $2 پېکسل، د دوتنې کچه: $3)', +'svg-long-desc' => 'SVG دوتنه، نومېنلي $1 × $2 پېکسل، د دوتنې کچه: $3', 'show-big-image' => 'بشپړ بېلن نښې', 'show-big-image-thumb' => 'د دې مخليدنې کچه: $1 × $2 pixels', # Special:NewFiles -'newimages' => 'د نوو دوتنو نندارتون', +'newimages' => 'د نوو دوتنو انځورتون', 'imagelisttext' => "دلته لاندې د '''$1''' {{PLURAL:$1|دوتنه|دوتنې}} يو لړليک دی چې اوډل شوي $2.", 'newimages-summary' => 'همدا ځانګړی مخ، وروستنۍ پورته شوې دوتنې ښکاره کوي.', 'newimages-legend' => 'چاڼګر', @@ -2046,6 +2076,7 @@ $UNWATCHURL نه ليدنه وکړۍ 'exif-gpsimgdirection' => 'د انځور لوری', 'exif-gpsareainformation' => 'د جي پي اس د سيمې نوم', 'exif-gpsdatestamp' => 'د جي پي اس نېټه', +'exif-objectname' => 'لنډ سرليک', 'exif-unknowndate' => 'نامالومه نېټه', @@ -2167,6 +2198,7 @@ $5 'table_pager_first' => 'لومړی مخ', 'table_pager_last' => 'وروستی مخ', 'table_pager_limit' => 'په يوه مخ $1 توکي ښکاره کړی', +'table_pager_limit_label' => 'په هر مخ د توکو شمېر:', 'table_pager_limit_submit' => 'ورځه', 'table_pager_empty' => 'بې پايلو', @@ -2214,15 +2246,23 @@ $5 'iranian-calendar-m12' => 'کب', # Special:Version -'version' => 'بڼه', -'version-extensions' => 'لګېدلي شاتاړي', -'version-specialpages' => 'ځانګړي مخونه', -'version-other' => 'بل', -'version-version' => '(بڼه $1)', -'version-license' => 'منښتليک', -'version-software' => 'نصب شوی ساوتری', -'version-software-product' => 'اېبره', -'version-software-version' => 'بڼه', +'version' => 'بڼه', +'version-extensions' => 'لګېدلي شاتاړي', +'version-specialpages' => 'ځانګړي مخونه', +'version-skins' => 'پوښۍ', +'version-other' => 'بل', +'version-version' => '(بڼه $1)', +'version-license' => 'منښتليک', +'version-poweredby-credits' => "دا ويکي د '''[http://www.mediawiki.org/ مېډياويکي]''' په سېک چلېږي، ټولې رښتې خوندي دي © 2001-$1 $2.", +'version-poweredby-others' => 'نور', +'version-license-info' => 'مېډياويکي يو وړيا ساوتری دی؛ تاسې يې په ډاډه زړه د GNU د ټولګړو کارېدنو د منښتليک چې د وړيا ساوتريو د بنسټ له مخې خپور شوی، خپرولی او/يا بدلولی شی؛ د منښتليک ۲ بڼه او يا (ستاسې د خوښې) هر يوه وروستۍ بڼه. + +مېډياويکي د ښه کارېدنې په نيت خپور شوی، خو د ضمني سوداګريز او يا د کوم ځانګړي کار د ضمانت نه پرته. د نورو مالوماتو لپاره د GNU د ټولګړو کارېدنو منښتليک وګورۍ. + +تاسې بايد د دې پروګرام سره يو [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU General Public License] ترلاسه کړی وي؛ که داسې نه وي، نو د وړيا ساوتريو بنسټ، Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ته يو ليک وليکۍ، او يا يې [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html پرليکه ولولۍ].', +'version-software' => 'نصب شوی ساوتری', +'version-software-product' => 'اېبره', +'version-software-version' => 'بڼه', # Special:FilePath 'filepath-page' => 'دوتنه:', @@ -2260,6 +2300,15 @@ $5 'tags-edit' => 'سمول', 'tags-hitcount' => '$1 {{PLURAL:$1|بدلون|بدلونونه}}', +# Special:ComparePages +'comparepages' => 'مخونه پرتلل', +'compare-selector' => 'د مخ بڼې سره پرتلل', +'compare-page1' => '۱ مخ', +'compare-page2' => '۲ مخ', +'compare-rev1' => '۱ بڼه', +'compare-rev2' => '۲ بڼه', +'compare-submit' => 'پرتلل', + # Database error messages 'dberr-header' => 'دا ويکي يوه ستونزه لري', 'dberr-problems' => 'اوبخښۍ! @@ -2273,6 +2322,7 @@ $5 'htmlform-float-invalid' => 'کوم څه چې تاسو ځانګړي کړي هغه يوه شمېره نه ده.', 'htmlform-int-toolow' => 'کوم ارزښت چې تاسې ځانګړی کړی هغه تر $1 لږ دی', 'htmlform-int-toohigh' => 'کوم ارزښت چې تاسې ځانګړی کړی هغه تر $1 ډېر دی', +'htmlform-required' => 'دې ارزښت ته اړتيا ده', 'htmlform-submit' => 'سپارل', 'htmlform-reset' => 'بدلونونه ناکړل', 'htmlform-selectorother-other' => 'بل', diff --git a/languages/messages/MessagesPt.php b/languages/messages/MessagesPt.php index 7c1ac6ea..526c4061 100644 --- a/languages/messages/MessagesPt.php +++ b/languages/messages/MessagesPt.php @@ -24,6 +24,7 @@ * @author MF-Warburg * @author Malafaya * @author Manuel Menezes de Sequeira + * @author Masked Rogue * @author McDutchie * @author Minh Nguyen * @author Nuno Tavares @@ -79,97 +80,99 @@ $dateFormats = array( 'dmy both' => 'H\hi\m\i\n \d\e j \d\e F \d\e Y', ); -$separatorTransformTable = array(',' => ' ', '.' => ',' ); -$linkTrail = '/^([áâãàéêçíóôõúüa-z]+)(.*)$/sDu'; # Bug 21168 +$separatorTransformTable = array( ',' => ' ', '.' => ',' ); +$linkTrail = '/^([áâãàéêẽçíòóôõq̃úüűũa-z]+)(.*)$/sDu'; # Bug 21168, 27633 $specialPageAliases = array( - 'DoubleRedirects' => array( 'Redireccionamentos duplos' ), - 'BrokenRedirects' => array( 'Redireccionamentos quebrados' ), - 'Disambiguations' => array( 'Desambiguações' ), + 'DoubleRedirects' => array( 'Redireccionamentos_duplos', 'Redirecionamentos_duplos' ), + 'BrokenRedirects' => array( 'Redireccionamentos_quebrados', 'Redirecionamentos_quebrados' ), + 'Disambiguations' => array( 'Desambiguações', 'Páginas_de_desambiguação', 'Desambiguar' ), 'Userlogin' => array( 'Entrar', 'Login' ), 'Userlogout' => array( 'Sair', 'Logout' ), - 'CreateAccount' => array( 'Criar conta' ), + 'CreateAccount' => array( 'Criar_conta' ), 'Preferences' => array( 'Preferências' ), - 'Watchlist' => array( 'Páginas vigiadas' ), - 'Recentchanges' => array( 'Mudanças recentes' ), - 'Upload' => array( 'Carregar ficheiro' ), - 'Listfiles' => array( 'Lista de ficheiros' ), - 'Newimages' => array( 'Ficheiros novos', 'Imagens novas' ), - 'Listusers' => array( 'Lista de utilizadores' ), - 'Listgrouprights' => array( 'Listar privilégios de grupos' ), + 'Watchlist' => array( 'Páginas_vigiadas', 'Artigos_vigiados', 'Vigiados' ), + 'Recentchanges' => array( 'Mudanças_recentes' ), + 'Upload' => array( 'Carregar_imagem', 'Carregar_ficheiro', 'Carregar_arquivo', 'Enviar' ), + 'Listfiles' => array( 'Lista_de_ficheiros', 'Lista_de_imagens', 'Lista_de_arquivos' ), + 'Newimages' => array( 'Ficheiros_novos', 'Imagens_novas', 'Arquivos_novos' ), + 'Listusers' => array( 'Lista_de_utilizadores', 'Lista_de_usuários' ), + 'Listgrouprights' => array( 'Lista_de_privilégios_de_grupos', 'Listar_privilégios_de_grupos' ), 'Statistics' => array( 'Estatísticas' ), - 'Randompage' => array( 'Página aleatória' ), - 'Lonelypages' => array( 'Páginas órfãs', 'Páginas sem afluentes' ), - 'Uncategorizedpages' => array( 'Páginas sem categorias' ), - 'Uncategorizedcategories' => array( 'Categorias sem categorias' ), - 'Uncategorizedimages' => array( 'Ficheiros sem categorias', 'Imagens sem categorias' ), - 'Uncategorizedtemplates' => array( 'Predefinições não categorizadas' ), - 'Unusedcategories' => array( 'Categorias não utilizadas' ), - 'Unusedimages' => array( 'Ficheiros não utilizados' ), - 'Wantedpages' => array( 'Páginas desejadas' ), - 'Wantedcategories' => array( 'Categorias desejadas' ), - 'Wantedfiles' => array( 'Ficheiros desejados' ), - 'Wantedtemplates' => array( 'Predefinições desejadas' ), - 'Mostlinked' => array( 'Páginas com mais afluentes' ), - 'Mostlinkedcategories' => array( 'Categorias com mais afluentes' ), - 'Mostlinkedtemplates' => array( 'Predefinições com mais afluentes' ), - 'Mostimages' => array( 'Ficheiros com mais afluentes', 'Imagens com mais afluentes' ), - 'Mostcategories' => array( 'Páginas com mais categorias' ), - 'Mostrevisions' => array( 'Páginas com mais revisões' ), - 'Fewestrevisions' => array( 'Páginas com menos revisões' ), - 'Shortpages' => array( 'Páginas curtas' ), - 'Longpages' => array( 'Páginas longas' ), - 'Newpages' => array( 'Páginas novas' ), - 'Ancientpages' => array( 'Página mais antigas' ), - 'Deadendpages' => array( 'Páginas sem saída' ), - 'Protectedpages' => array( 'Páginas protegidas' ), - 'Protectedtitles' => array( 'Títulos protegidos' ), - 'Allpages' => array( 'Todas as páginas' ), - 'Prefixindex' => array( 'Índice de prefixo' ), - 'Ipblocklist' => array( 'Registo de bloqueios' ), - 'Specialpages' => array( 'Páginas especiais' ), + 'Randompage' => array( 'Aleatória', 'Aleatório', 'Página_aleatória', 'Artigo_aleatório' ), + 'Lonelypages' => array( 'Páginas_órfãs', 'Páginas_sem_afluentes', 'Artigos_órfãos', 'Artigos_sem_afluentes' ), + 'Uncategorizedpages' => array( 'Páginas_não_categorizadas', 'Páginas_sem_categorias', 'Artigos_sem_categorias' ), + 'Uncategorizedcategories' => array( 'Categorias_não_categorizadas', 'Categorias_sem_categorias' ), + 'Uncategorizedimages' => array( 'Ficheiros_não_categorizados', 'Imagens_não_categorizadas', 'Imagens_sem_categorias', 'Ficheiros_sem_categorias', 'Arquivos_sem_categorias' ), + 'Uncategorizedtemplates' => array( 'Predefinições_não_categorizadas', 'Predefinições_sem_categorias' ), + 'Unusedcategories' => array( 'Categorias_não_utilizadas', 'Categorias_sem_uso' ), + 'Unusedimages' => array( 'Ficheiros_não_utilizados', 'Imagens_não_utilizadas' ), + 'Wantedpages' => array( 'Páginas_pedidas', 'Páginas_em_falta', 'Artigos_em_falta', 'Artigos_pedidos' ), + 'Wantedcategories' => array( 'Categorias_pedidas', 'Categorias_em_falta', 'Categorias_inexistentes' ), + 'Wantedfiles' => array( 'Ficheiros_pedidos', 'Imagens_pedidas', 'Ficheiros_em_falta', 'Arquivos_em_falta', 'Imagens_em_falta' ), + 'Wantedtemplates' => array( 'Predefinições_pedidas', 'Predefinições_em_falta' ), + 'Mostlinked' => array( 'Páginas_com_mais_afluentes', 'Artigos_com_mais_afluentes' ), + 'Mostlinkedcategories' => array( 'Categorias_com_mais_afluentes', 'Categorias_mais_usadas' ), + 'Mostlinkedtemplates' => array( 'Predefinições_com_mais_afluentes', 'Predefinições_mais_usadas' ), + 'Mostimages' => array( 'Ficheiros_com_mais_afluentes', 'Imagens_com_mais_afluentes', 'Arquivos_com_mais_afluentes' ), + 'Mostcategories' => array( 'Páginas_com_mais_categorias', 'Artigos_com_mais_categorias' ), + 'Mostrevisions' => array( 'Páginas_com_mais_edições', 'Artigos_com_mais_edições' ), + 'Fewestrevisions' => array( 'Páginas_com_menos_edições', 'Artigos_com_menos_edições', 'Artigos_menos_editados' ), + 'Shortpages' => array( 'Páginas_curtas', 'Artigos_curtos' ), + 'Longpages' => array( 'Páginas_longas', 'Artigos_extensos' ), + 'Newpages' => array( 'Páginas_novas', 'Artigos_novos' ), + 'Ancientpages' => array( 'Páginas_inactivas', 'Páginas_inativas', 'Artigos_inativos' ), + 'Deadendpages' => array( 'Páginas_sem_saída', 'Artigos_sem_saída' ), + 'Protectedpages' => array( 'Páginas_protegidas', 'Artigos_protegidos' ), + 'Protectedtitles' => array( 'Títulos_protegidos' ), + 'Allpages' => array( 'Todas_as_páginas', 'Todos_os_artigos', 'Todas_páginas', 'Todos_artigos' ), + 'Prefixindex' => array( 'Índice_por_prefixo', 'Índice_de_prefixo' ), + 'Ipblocklist' => array( 'Registo_de_bloqueios', 'IPs_bloqueados', 'Utilizadores_bloqueados', 'Registro_de_bloqueios', 'Usuários_bloqueados' ), + 'Unblock' => array( 'Desbloquear' ), + 'Specialpages' => array( 'Páginas_especiais' ), 'Contributions' => array( 'Contribuições' ), - 'Emailuser' => array( 'Contactar utilizador' ), - 'Confirmemail' => array( 'Confirmar correio electrónico' ), - 'Whatlinkshere' => array( 'Páginas afluentes' ), - 'Recentchangeslinked' => array( 'Alterações relacionadas' ), - 'Movepage' => array( 'Mover página' ), - 'Blockme' => array( 'Auto-bloqueio' ), - 'Booksources' => array( 'Fontes de livros' ), + 'Emailuser' => array( 'Contactar_utilizador', 'Contactar_usuário', 'Contatar_usuário' ), + 'Confirmemail' => array( 'Confirmar_correio_electrónico', 'Confirmar_e-mail', 'Confirmar_email' ), + 'Whatlinkshere' => array( 'Páginas_afluentes', 'Artigos_afluentes' ), + 'Recentchangeslinked' => array( 'Alterações_relacionadas', 'Novidades_relacionadas', 'Mudanças_relacionadas' ), + 'Movepage' => array( 'Mover_página', 'Mover', 'Mover_artigo' ), + 'Blockme' => array( 'Bloquear-me', 'Auto-bloqueio' ), + 'Booksources' => array( 'Fontes_de_livros' ), 'Categories' => array( 'Categorias' ), - 'Export' => array( 'Exportação de páginas' ), - 'Version' => array( 'Versão' ), - 'Allmessages' => array( 'Todas as mensagens' ), - 'Log' => array( 'Registos' ), - 'Blockip' => array( 'Bloquear utilizador' ), - 'Undelete' => array( 'Restaurar páginas eliminadas' ), + 'Export' => array( 'Exportar' ), + 'Version' => array( 'Versão', 'Sobre' ), + 'Allmessages' => array( 'Todas_as_mensagens', 'Todas_mensagens' ), + 'Log' => array( 'Registo', 'Registos', 'Registro', 'Registros' ), + 'Blockip' => array( 'Bloquear', 'Bloquear_IP', 'Bloquear_utilizador', 'Bloquear_usuário' ), + 'Undelete' => array( 'Restaurar', 'Restaurar_páginas_eliminadas', 'Restaurar_artigos_eliminados' ), 'Import' => array( 'Importar' ), - 'Lockdb' => array( 'Bloquear base de dados' ), - 'Unlockdb' => array( 'Desbloquear base de dados' ), - 'Userrights' => array( 'Privilégios' ), - 'MIMEsearch' => array( 'Busca MIME' ), - 'FileDuplicateSearch' => array( 'Ficheiros duplicados' ), - 'Unwatchedpages' => array( 'Páginas não vigiadas' ), - 'Listredirects' => array( 'Redireccionamentos' ), - 'Revisiondelete' => array( 'Eliminar revisão' ), - 'Unusedtemplates' => array( 'Predefinições não utilizadas' ), - 'Randomredirect' => array( 'Redireccionamento aleatório' ), - 'Mypage' => array( 'Minha página' ), - 'Mytalk' => array( 'Minha discussão' ), - 'Mycontributions' => array( 'Minhas contribuições' ), - 'Listadmins' => array( 'Administradores' ), - 'Listbots' => array( 'Robôs' ), - 'Popularpages' => array( 'Páginas populares' ), - 'Search' => array( 'Pesquisa' ), - 'Resetpass' => array( 'Alterar palavra-chave' ), - 'Withoutinterwiki' => array( 'Páginas sem interwikis' ), - 'MergeHistory' => array( 'Fundir históricos' ), - 'Filepath' => array( 'Endereço de ficheiro' ), - 'Invalidateemail' => array( 'Invalidar correio electrónico' ), - 'Blankpage' => array( 'Página em branco' ), - 'LinkSearch' => array( 'Pesquisar ligações' ), - 'DeletedContributions' => array( 'Contribuições eliminadas' ), - 'Activeusers' => array( 'Utilizadores activos' ), + 'Lockdb' => array( 'Bloquear_base_de_dados', 'Bloquear_a_base_de_dados', 'Bloquear_banco_de_dados' ), + 'Unlockdb' => array( 'Desbloquear_base_de_dados', 'Desbloquear_a_base_de_dados', 'Desbloquear_banco_de_dados' ), + 'Userrights' => array( 'Privilégios', 'Direitos', 'Estatutos' ), + 'MIMEsearch' => array( 'Busca_MIME' ), + 'FileDuplicateSearch' => array( 'Busca_de_ficheiros_duplicados', 'Busca_de_arquivos_duplicados' ), + 'Unwatchedpages' => array( 'Páginas_não_vigiadas', 'Páginas_não-vigiadas', 'Artigos_não-vigiados', 'Artigos_não_vigiados' ), + 'Listredirects' => array( 'Redireccionamentos', 'Redirecionamentos', 'Lista_de_redireccionamentos', 'Lista_de_redirecionamentos' ), + 'Revisiondelete' => array( 'Eliminar_edição', 'Eliminar_revisão', 'Apagar_edição', 'Apagar_revisão' ), + 'Unusedtemplates' => array( 'Predefinições_não_utilizadas', 'Predefinições_sem_uso' ), + 'Randomredirect' => array( 'Redireccionamento_aleatório', 'Redirecionamento_aleatório' ), + 'Mypage' => array( 'Minha_página' ), + 'Mytalk' => array( 'Minha_discussão' ), + 'Mycontributions' => array( 'Minhas_contribuições', 'Minhas_edições', 'Minhas_constribuições' ), + 'Listadmins' => array( 'Administradores', 'Admins', 'Lista_de_administradores', 'Lista_de_admins' ), + 'Listbots' => array( 'Robôs', 'Lista_de_robôs', 'Bots', 'Lista_de_bots' ), + 'Popularpages' => array( 'Páginas_populares', 'Artigos_populares' ), + 'Search' => array( 'Pesquisar', 'Busca', 'Buscar', 'Procurar', 'Pesquisa' ), + 'Resetpass' => array( 'Reiniciar_palavra-chave', 'Repor_senha', 'Zerar_senha' ), + 'Withoutinterwiki' => array( 'Páginas_sem_interwikis', 'Artigos_sem_interwikis' ), + 'MergeHistory' => array( 'Fundir_históricos', 'Fundir_edições' ), + 'Filepath' => array( 'Directório_de_ficheiro', 'Diretório_de_ficheiro', 'Diretório_de_arquivo' ), + 'Invalidateemail' => array( 'Invalidar_correio_electrónico', 'Invalidar_e-mail' ), + 'Blankpage' => array( 'Página_em_branco' ), + 'LinkSearch' => array( 'Pesquisar_links' ), + 'DeletedContributions' => array( 'Contribuições_eliminadas', 'Edições_eliminadas' ), + 'Tags' => array( 'Etiquetas' ), + 'Activeusers' => array( 'Utilizadores_activos' ), ); $magicWords = array( @@ -225,15 +228,18 @@ $magicWords = array( 'talkpagenamee' => array( '1', 'NOMEDAPAGINADEDISCUSSAOC', 'NOMEDAPÁGINADEDISCUSSÃOC', 'TALKPAGENAMEE' ), 'subjectpagename' => array( '1', 'NOMEDAPAGINADECONTEUDO', 'NOMEDAPÁGINADECONTEÚDO', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ), 'subjectpagenamee' => array( '1', 'NOMEDAPAGINADECONTEUDOC', 'NOMEDAPÁGINADECONTEÚDOC', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ), + 'img_thumbnail' => array( '1', 'miniaturadaimagem', 'miniatura', 'thumbnail', 'thumb' ), + 'img_manualthumb' => array( '1', 'miniaturadaimagem=$1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ), 'img_right' => array( '1', 'direita', 'right' ), 'img_left' => array( '1', 'esquerda', 'left' ), 'img_none' => array( '1', 'nenhum', 'none' ), 'img_center' => array( '1', 'centro', 'center', 'centre' ), - 'img_framed' => array( '1', 'comborda', 'framed', 'enframed', 'frame' ), - 'img_frameless' => array( '1', 'semborda', 'frameless' ), + 'img_framed' => array( '1', 'commoldura', 'comborda', 'framed', 'enframed', 'frame' ), + 'img_frameless' => array( '1', 'semmoldura', 'semborda', 'frameless' ), 'img_page' => array( '1', 'página=$1', 'página $1', 'page=$1', 'page $1' ), 'img_upright' => array( '1', 'superiordireito', 'superiordireito=$1', 'superiordireito $1', 'upright', 'upright=$1', 'upright $1' ), 'img_border' => array( '1', 'borda', 'border' ), + 'img_baseline' => array( '1', 'linhadebase', 'baseline' ), 'img_top' => array( '1', 'acima', 'top' ), 'img_middle' => array( '1', 'meio', 'middle' ), 'img_bottom' => array( '1', 'abaixo', 'bottom' ), @@ -299,8 +305,7 @@ $messages = array( 'tog-editsection' => 'Possibilitar a edição de secções com links [editar]', 'tog-editsectiononrightclick' => 'Possibilitar a edição de secções por clique com o botão direito no título da secção (JavaScript)', 'tog-showtoc' => 'Mostrar índice (para páginas com mais de três secções)', -'tog-rememberpassword' => 'Recordar a minha palavra-chave entre sessões', -'tog-editwidth' => 'Aumentar a largura da caixa de edição para preencher o espaço disponível', +'tog-rememberpassword' => 'Recordar os meus dados neste browser (no máximo, durante $1 {{PLURAL:$1|dia|dias}})', 'tog-watchcreations' => 'Adicionar as páginas que eu criar às minhas páginas vigiadas', 'tog-watchdefault' => 'Adicionar as páginas que eu editar às minhas páginas vigiadas', 'tog-watchmoves' => 'Adicionar as páginas que eu mover às minhas páginas vigiadas', @@ -320,7 +325,7 @@ $messages = array( 'tog-externaldiff' => 'Por omissão, utilizar diferenças externas (só para utilizadores avançados, exige configurações adicionais no seu computador. [http://www.mediawiki.org/wiki/Manual:External_editors Mais informações.])', 'tog-showjumplinks' => 'Possibilitar links de acessibilidade "{{int:jumpto}}"', 'tog-uselivepreview' => 'Usar a antevisão ao vivo (requer JavaScript; é experimental)', -'tog-forceeditsummary' => 'Avisar-me ao introduzir um resumo vazio', +'tog-forceeditsummary' => 'Avisar-me se deixar o resumo da edição vazio', 'tog-watchlisthideown' => 'Esconder as minhas edições ao listar mudanças às páginas vigiadas', 'tog-watchlisthidebots' => 'Esconder edições de robôs ao listar mudanças às páginas vigiadas', 'tog-watchlisthideminor' => 'Esconder edições menores ao listar mudanças às páginas vigiadas', @@ -328,7 +333,7 @@ $messages = array( 'tog-watchlisthideanons' => 'Esconder edições de utilizadores anónimos ao listar mudanças às páginas vigiadas', 'tog-watchlisthidepatrolled' => 'Esconder edições patrulhadas ao listar mudanças às páginas vigiadas', 'tog-nolangconversion' => 'Impossibilitar a conversão de variantes da língua', -'tog-ccmeonemails' => 'Enviar-me cópias dos correios electrónicos que eu enviar a outros utilizadores', +'tog-ccmeonemails' => 'Enviar-me cópias das mensagens por correio electrónico que eu enviar a outros utilizadores', 'tog-diffonly' => 'Não mostrar o conteúdo da página ao comparar duas edições', 'tog-showhiddencats' => 'Mostrar categorias ocultas', 'tog-noconvertlink' => 'Impossibilitar a conversão dos títulos de links', @@ -447,31 +452,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Adicionar tópico', -'vector-action-delete' => 'Eliminar', -'vector-action-move' => 'Mover', -'vector-action-protect' => 'Proteger', -'vector-action-undelete' => 'Restaurar', -'vector-action-unprotect' => 'Desproteger', -'vector-namespace-category' => 'Categoria', -'vector-namespace-help' => 'Página de ajuda', -'vector-namespace-image' => 'Ficheiro', -'vector-namespace-main' => 'Página', -'vector-namespace-media' => 'Página de multimédia', -'vector-namespace-mediawiki' => 'Mensagem', -'vector-namespace-project' => 'Página de projecto', -'vector-namespace-special' => 'Página especial', -'vector-namespace-talk' => 'Discussão', -'vector-namespace-template' => 'Predefinição', -'vector-namespace-user' => 'Página de utilizador', -'vector-view-create' => 'Criar', -'vector-view-edit' => 'Editar', -'vector-view-history' => 'Ver histórico', -'vector-view-view' => 'Ler', -'vector-view-viewsource' => 'Ver fonte', -'actions' => 'Acções', -'namespaces' => 'Espaços nominais', -'variants' => 'Variantes', +'vector-action-addsection' => 'Adicionar tópico', +'vector-action-delete' => 'Eliminar', +'vector-action-move' => 'Mover', +'vector-action-protect' => 'Proteger', +'vector-action-undelete' => 'Restaurar', +'vector-action-unprotect' => 'Desproteger', +'vector-simplesearch-preference' => 'Activar sugestões de busca melhoradas (apenas no tema Vector)', +'vector-view-create' => 'Criar', +'vector-view-edit' => 'Editar', +'vector-view-history' => 'Ver histórico', +'vector-view-view' => 'Ler', +'vector-view-viewsource' => 'Ver fonte', +'actions' => 'Acções', +'namespaces' => 'Espaços nominais', +'variants' => 'Variantes', 'errorpagetitle' => 'Erro', 'returnto' => 'Voltar para $1.', @@ -532,6 +527,9 @@ Há demasiados utilizadores a tentar visionar esta página. Espere um pouco antes de tentar aceder à página novamente, por favor. $1', +'pool-timeout' => 'Tempo limite de espera para o bloqueio excedido', +'pool-queuefull' => 'A fila de processos está cheia', +'pool-errorunknown' => 'Erro desconhecido', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Sobre a {{SITENAME}}', @@ -676,7 +674,7 @@ Consulta: $2', 'cascadeprotected' => 'Esta página foi protegida contra edições por estar incluída {{PLURAL:$1|na página listada|nas páginas listadas}} a seguir, ({{PLURAL:$1|página essa que está protegida|páginas essas que estão protegidas}} com a opção de protecção "em cascata" activada): $2', 'namespaceprotected' => "Não possui permissão para editar páginas no espaço nominal '''$1'''.", -'customcssjsprotected' => 'Não possui permissão para editar esta página, porque ela contém as configurações pessoais de outro utilizador.', +'customcssjsprotected' => 'Não tem permissão de editar esta página, porque ela contém as configurações pessoais de outro utilizador.', 'ns-specialprotected' => 'Não é possível editar páginas especiais', 'titleprotected' => 'Este título foi protegido contra criação por [[User:$1|$1]]. A justificação foi "\'\'$2\'\'".', @@ -697,7 +695,8 @@ Não se esqueça de personalizar as suas [[Special:Preferences|preferências na 'yourname' => 'Nome de utilizador:', 'yourpassword' => 'Palavra-chave:', 'yourpasswordagain' => 'Repita a palavra-chave:', -'remembermypassword' => 'Recordar a minha palavra-chave entre sessões', +'remembermypassword' => 'Recordar os meus dados neste computador (no máximo, por $1 {{PLURAL:$1|dia|dias}})', +'securelogin-stick-https' => 'Manter a ligação HTTPS após a autenticação', 'yourdomainname' => 'O seu domínio:', 'externaldberror' => 'Ocorreu um erro externo à base de dados durante a autenticação ou não lhe é permitido actualizar a sua conta externa.', 'login' => 'Autenticação', @@ -714,6 +713,7 @@ Não se esqueça de personalizar as suas [[Special:Preferences|preferências na 'gotaccount' => "Já possui uma conta? '''$1'''.", 'gotaccountlink' => 'Autentique-se', 'createaccountmail' => 'por correio electrónico', +'createaccountreason' => 'Motivo:', 'badretype' => 'As palavras-chave que introduziu não são iguais.', 'userexists' => 'O nome de utilizador que introduziu já existe. Escolha um nome diferente.', @@ -739,6 +739,7 @@ Verifique a ortografia, ou [[Special:UserLogin/signup|crie uma nova conta]].', 'wrongpasswordempty' => 'A palavra-chave não foi introduzida. Introduza-a, por favor.', 'passwordtooshort' => 'A palavra-chave deve ter no mínimo $1 {{PLURAL:$1|carácter|caracteres}}.', 'password-name-match' => 'A sua palavra-chave tem de ser diferente do seu nome de utilizador.', +'password-login-forbidden' => 'Foi proibido o uso deste nome de utilizador e palavra-chave.', 'mailmypassword' => 'Enviar uma palavra-chave nova por correio electrónico', 'passwordremindertitle' => 'Nova palavra-chave temporária na {{SITENAME}}', 'passwordremindertext' => 'Alguém (provavelmente você, a partir do endereço IP $1) solicitou uma palavra-chave nova para a sua conta na {{SITENAME}} ($4). @@ -779,6 +780,9 @@ Aguarde antes de tentar novamente, por favor.', 'loginlanguagelabel' => 'Língua: $1', 'suspicious-userlogout' => 'O seu pedido para sair foi negado porque parece ter sido enviado por um browser danificado ou por um proxy com cache.', +# E-mail sending +'php-mail-error-unknown' => 'Erro desconhecido na função mail() do PHP', + # Password reset dialog 'resetpass' => 'Alterar palavra-chave', 'resetpass_announce' => 'Autenticou-se usando uma palavra-chave temporária enviada por correio electrónico. @@ -832,10 +836,12 @@ Pode ter já alterado com sucesso a sua palavra-chave ou solicitado uma nova pal 'showdiff' => 'Mostrar alterações', 'anoneditwarning' => "'''Aviso''': Não se encontra autenticado. O seu endereço IP será registado no histórico de edições desta página.", +'anonpreviewwarning' => "''Não está autenticado. Gravar registará o seu endereço IP no histórico de edições da página.''", 'missingsummary' => "'''Atenção:''' Não introduziu um resumo da edição. Se clicar novamente \"Gravar página\" a sua edição será gravada sem resumo.", 'missingcommenttext' => 'Introduza um comentário abaixo, por favor.', -'missingcommentheader' => "'''Atenção:''' Não introduziu um assunto ou cabeçalho para este comentário. Se clicar novamente \"Gravar página\" a sua edição será gravada sem assunto ou cabeçalho.", +'missingcommentheader' => "'''Atenção:''' Não introduziu um assunto ou cabeçalho para este comentário. +Se clicar novamente \"{{int:savearticle}}\", a sua edição será gravada sem assunto ou cabeçalho.", 'summary-preview' => 'Antevisão do resumo:', 'subject-preview' => 'Antevisão do assunto/cabeçalho:', 'blockedtitle' => 'O utilizador está bloqueado', @@ -916,7 +922,11 @@ Para referência, o último registo de bloqueio é apresentado abaixo:', Este ainda não foi gravado!'''", 'userjspreview' => "'''Lembre-se que está apenas a testar ou antever o seu JavaScript particular.''' Este ainda não foi gravado!", -'userinvalidcssjstitle' => "'''Aviso:''' Não existe um tema \"\$1\". Lembre-se que as páginas .css e .js utilizam um título em minúsculas, exemplo: {{ns:user}}:Alguém/monobook.css aposto a {{ns:user}}:Alguém/Monobook.css.", +'sitecsspreview' => "'''Lembre-se de que está apenas a antever este CSS.''' +'''Ele ainda não foi gravado!'''", +'sitejspreview' => "'''Lembre-se de que está apenas a antever este código JavaScript.''' +'''Ele ainda não foi gravado!'''", +'userinvalidcssjstitle' => "'''Aviso:''' Não existe um tema \"\$1\". Lembre-se que as páginas .css e .js têm um título em minúsculas, exemplo: {{ns:user}}:Alguém/vector.css em vez de {{ns:user}}:Alguém/Vector.css.", 'updated' => '(Actualizado)', 'note' => "'''Nota:'''", 'previewnote' => "'''Lembre-se que esta é apenas uma antevisão do resultado.''' @@ -956,9 +966,6 @@ Garante-nos também que isto é algo escrito por si, ou copiado do domínio púb 'copyrightwarning2' => "Por favor, note que todas as suas contribuições na {{SITENAME}} podem ser editadas, alteradas ou removidas por outros utilizadores. Se não deseja que o seu texto seja inexoravelmente editado, não o envie. Garante-nos também que isto é algo escrito por si, ou copiado do domínio público ou de outra fonte de teor livre (veja $1 para detalhes).
    '''NÃO ENVIE TRABALHO PROTEGIDO POR DIREITOS DE AUTOR SEM A DEVIDA PERMISSÃO!'''", -'longpagewarning' => "'''AVISO:''' Esta página possui $1 kilobytes; alguns -browsers têm problemas em editar páginas maiores do que 32 kb. -Tente dividir a página em secções de menor dimensão, por favor.", 'longpageerror' => "'''Erro: O texto que submeteu ocupa $1 KB, um espaço superior ao máximo de $2 KB. A página não pode ser gravada.'''", 'readonlywarning' => "'''Aviso: A base de dados foi bloqueada para manutenção, pelo que não poderá gravar a sua edição neste momento.''' @@ -1015,7 +1022,7 @@ Devia ter menos de $2 {{PLURAL:$2|chamada|chamadas}}. Neste momento tem $1 {{PLU Estes argumentos foram omitidos.', 'post-expand-template-argument-category' => 'Páginas com omissão de argumentos para predefinições', 'parser-template-loop-warning' => 'Ciclo de predefinições detectado: [[$1]]', -'parser-template-recursion-depth-warning' => 'Atingido o limite de profundidade de recursividade de predefinição ($1)', +'parser-template-recursion-depth-warning' => 'Foi excedido o limite da profundidade de recursividade nas predefinições ($1)', 'language-converter-depth-warning' => 'O limite de profundidade do conversor de línguas excedeu a ($1)', # "Undo" feature @@ -1141,6 +1148,8 @@ $1", 'logdelete-failure' => "'''Não foi possível definir a visibilidade do registo:''' $1", 'revdel-restore' => 'Alterar visibilidade', +'revdel-restore-deleted' => 'revisões eliminadas', +'revdel-restore-visible' => 'revisões visíveis', 'pagehist' => 'Histórico da página', 'deletedhist' => 'Histórico de eliminações', 'revdelete-content' => 'conteúdo', @@ -1211,11 +1220,13 @@ Note que, se usar os links de navegação, os botões de opção voltarão aos v # Diffs 'history-title' => 'Histórico de edições de "$1"', 'difference' => '(Diferença entre edições)', +'difference-multipage' => '(Diferenças entre páginas)', 'lineno' => 'Linha $1:', 'compareselectedversions' => 'Comparar as versões seleccionadas', 'showhideselectedversions' => 'Mostrar/ocultar versões selecionadas', 'editundo' => 'desfazer', -'diff-multi' => '({{PLURAL:$1|uma edição intermédia não apresentada|$1 edições intermédias não apresentadas}})', +'diff-multi' => '({{PLURAL:$1|Uma edição intermédia|$1 edições intermédias}} de {{PLURAL:$2|um utilizador|$2 utilizadores}} {{PLURAL:$1|não apresentada|não apresentadas}})', +'diff-multi-manyusers' => '({{PLURAL:$1|Uma edição intermédia|$1 edições intermédias}} de mais de {{PLURAL:$2|um utilizador|$2 utilizadores}} não {{PLURAL:$1|apresentada|apresentadas}})', # Search results 'searchresults' => 'Resultados da pesquisa', @@ -1250,6 +1261,7 @@ Note que, se usar os links de navegação, os botões de opção voltarão aos v 'searchprofile-everything-tooltip' => 'Pesquisar em todo o conteúdo (incluindo páginas de discussão)', 'searchprofile-advanced-tooltip' => 'Personalizar os espaços nominais onde pesquisar', 'search-result-size' => '$1 ({{PLURAL:$2|1 palavra|$2 palavras}})', +'search-result-category-size' => '{{PLURAL:$1|1 membro|$1 membros}} ({{PLURAL:$2|1 subcategoria|$2 subcategorias}}, {{PLURAL:$3|1 ficheiro|$3 ficheiros}})', 'search-result-score' => 'Relevancia: $1%', 'search-redirect' => '(redireccionamento de $1)', 'search-section' => '(secção $1)', @@ -1327,6 +1339,7 @@ Note, no entanto, que a indexação da {{SITENAME}} neste motor de busca pode es 'contextlines' => 'Linhas por resultado:', 'contextchars' => 'Contexto por linha:', 'stub-threshold' => 'Links para páginas curtas terão este formato se elas ocuparem menos de (bytes):', +'stub-threshold-disabled' => 'Desactivado', 'recentchangesdays' => 'Dias a apresentar nas mudanças recentes:', 'recentchangesdays-max' => '(máximo: $1 {{PLURAL:$1|dia|dias}})', 'recentchangescount' => 'Número de edições a apresentar por omissão:', @@ -1360,6 +1373,7 @@ Eis um valor gerado aleatoriamente, que pode usar: $1", 'prefs-files' => 'Ficheiros', 'prefs-custom-css' => 'CSS personalizada', 'prefs-custom-js' => 'JS personalizado', +'prefs-common-css-js' => 'CSS/JS partilhado por todos os temas:', 'prefs-reset-intro' => 'Pode usar esta página para repor as configurações padrão das preferências. As suas preferências serão modificadas para os valores predefinidos do site. Esta operação não pode ser desfeita.', @@ -1399,9 +1413,15 @@ Também permite que outros entrem em contacto consigo através da sua página de 'prefs-advancedrendering' => 'Opções avançadas', 'prefs-advancedsearchoptions' => 'Opções avançadas', 'prefs-advancedwatchlist' => 'Opções avançadas', -'prefs-display' => 'Opções de visionamento', +'prefs-displayrc' => 'Opções de visionamento', +'prefs-displaysearchoptions' => 'Opções de apresentação', +'prefs-displaywatchlist' => 'Opções de apresentação', 'prefs-diffs' => 'Diferenças', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Parece válido', +'email-address-validity-invalid' => 'Endereço válido necessário!', + # User rights 'userrights' => 'Privilégios dos utilizadores', 'userrights-lookup-user' => 'Gerir grupos do utilizador', @@ -1485,6 +1505,7 @@ Também permite que outros entrem em contacto consigo através da sua página de 'right-hideuser' => 'Bloquear um nome de utilizador, escondendo-o do público', 'right-ipblock-exempt' => 'Contornar bloqueios de IP, bloqueios automáticos e bloqueios de gamas de IPs', 'right-proxyunbannable' => 'Contornar bloqueios automáticos de proxies', +'right-unblockself' => 'Desbloquearem-se a si próprios', 'right-protect' => 'Mudar níveis de protecção e editar páginas protegidas', 'right-editprotected' => 'Editar páginas protegidas (sem protecção em cascata)', 'right-editinterface' => 'Editar a interface de utilizador', @@ -1507,7 +1528,6 @@ Também permite que outros entrem em contacto consigo através da sua página de 'right-siteadmin' => 'Bloquear e desbloquear a base de dados', 'right-reset-passwords' => 'Repor a palavra-chave de outros utilizadores', 'right-override-export-depth' => 'Exportar páginas incluindo páginas ligadas até uma profundidade de 5', -'right-versiondetail' => 'Mostrar informações completas da versão de software', 'right-sendemail' => 'Enviar correio electrónico a outros utilizadores', # User rights log @@ -1558,14 +1578,9 @@ Também permite que outros entrem em contacto consigo através da sua página de 'recentchanges-legend' => 'Opções das mudanças recentes', 'recentchangestext' => 'Acompanhe nesta página as mudanças mais recentes da wiki.', 'recentchanges-feed-description' => "Acompanhe neste ''feed'' as mudanças mais recentes da wiki.", -'recentchanges-label-legend' => 'Legenda: $1.', -'recentchanges-legend-newpage' => '$1 - página nova', 'recentchanges-label-newpage' => 'Esta edição criou uma página nova', -'recentchanges-legend-minor' => '$1 - edição menor', 'recentchanges-label-minor' => 'Esta é uma edição menor', -'recentchanges-legend-bot' => '$1 - edição de robô', 'recentchanges-label-bot' => 'Esta edição foi feita por um robô', -'recentchanges-legend-unpatrolled' => '$1 - edição não patrulhada', 'recentchanges-label-unpatrolled' => 'Esta edição ainda não foi patrulhada', 'rcnote' => "A seguir {{PLURAL:$1|está listada '''uma''' alteração ocorrida|estão listadas '''$1''' alterações ocorridas}} {{PLURAL:$2|no último dia|nos últimos '''$2''' dias}}, a partir das $5 de $4.", 'rcnotefrom' => 'Abaixo estão as mudanças desde $2 (mostradas até $1).', @@ -1612,6 +1627,9 @@ As suas [[Special:Watchlist|páginas vigiadas]] aparecem a '''negrito'''.", 'upload_directory_missing' => 'O directório de carregamento de ficheiros ($1) não existe e o servidor de internet não conseguiu criá-lo.', 'upload_directory_read_only' => 'O servidor de internet não possui permissão de escrita no directório de carregamento de ficheiros ($1).', 'uploaderror' => 'Erro ao carregar', +'upload-recreate-warning' => "'''Aviso: Um ficheiro com esse nome foi eliminado ou movido.''' + +Para sua conveniência, é apresentado de seguida o registo de eliminação e de movimento da página:", 'uploadtext' => "Utilize o formulário abaixo para fazer upload de ficheiros novos. Para ver ou pesquisar ficheiros anteriormente enviados, consulte a [[Special:FileList|lista de ficheiros]]. Os reenvios de um ficheiro são também registados no [[Special:Log/upload|registo de uploads]] e as eliminações no [[Special:Log/delete|registo de eliminações]]. @@ -1648,6 +1666,17 @@ Altere o nome do ficheiro e tente enviá-lo novamente, por favor.', 'filetype-banned-type' => "'''\".\$1\"''' não é um tipo de ficheiro permitido. {{PLURAL:\$3|O tipo permitido é|Os tipos permitidos são}} \$2.", 'filetype-missing' => 'O ficheiro não possui uma extensão (como, por exemplo, ".jpg").', +'empty-file' => 'O ficheiro que enviou estava vazio.', +'file-too-large' => 'O ficheiro que enviou era demasiado grande.', +'filename-tooshort' => 'O nome do ficheiro é demasiado curto.', +'filetype-banned' => 'Este tipo de ficheiro é proibido.', +'verification-error' => 'O ficheiro não passou a verificação de ficheiros.', +'hookaborted' => 'A modificação que pretendia foi abortada pelo hook de uma extensão.', +'illegal-filename' => 'O nome do ficheiro não é permitido.', +'overwrite' => 'Não é permitido gravar por cima de um ficheiro existente.', +'unknown-error' => 'Ocorreu um erro desconhecido.', +'tmp-create-error' => 'Não foi possível criar o ficheiro temporário.', +'tmp-write-error' => 'Erro na escrita do ficheiro temporário.', 'large-file' => 'É recomendável que os ficheiros não sejam maiores que $1; este tem $2.', 'largefileserver' => 'O tamanho deste ficheiro é superior ao permitido pela configuração do servidor.', @@ -1678,13 +1707,14 @@ Caso deseje, mesmo assim, carregar o seu ficheiro, volte atrás e envie-o com um 'file-exists-duplicate' => 'Este ficheiro é um duplicado {{PLURAL:$1|do seguinte|dos seguintes}}:', 'file-deleted-duplicate' => 'Um ficheiro idêntico a este ([[:$1]]) foi eliminado anteriormente. Verifique o motivo da eliminação do ficheiro antes de prosseguir com o re-envio.', -'successfulupload' => 'Envio efectuado com sucesso', 'uploadwarning' => 'Aviso de envio', 'uploadwarning-text' => 'Modifique a descrição do ficheiro abaixo e tente novamente, por favor.', 'savefile' => 'Gravar ficheiro', 'uploadedimage' => 'carregou "[[$1]]"', 'overwroteimage' => 'foi enviada uma nova versão de "[[$1]]"', 'uploaddisabled' => 'Carregamentos impossibilitados', +'copyuploaddisabled' => 'Upload por URL impossibilitado.', +'uploadfromurl-queued' => 'O seu upload foi adicionado à fila.', 'uploaddisabledtext' => 'O carregamento de ficheiros está impossibilitado.', 'php-uploaddisabledtext' => 'O carregamento de ficheiros está impossibilitado no PHP. Verifique a configuração file_uploads, por favor.', @@ -1719,6 +1749,14 @@ JD # Jenoptik MGP # Pentax PICT # misc. # ', +'upload-success-subj' => 'Envio efectuado com sucesso', +'upload-success-msg' => 'O seu upload de [$2] foi bem sucedido. Está disponível aqui: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problema no upload', +'upload-failure-msg' => 'Ocorreu um problema com o seu upload de [$2]: + +$1', +'upload-warning-subj' => 'Aviso de upload', +'upload-warning-msg' => 'Ocorreu um problema no seu upload de [$2]. Pode voltar ao [[Special:Upload/stash/$1|formulário de upload]] para resolver o problema.', 'upload-proto-error' => 'Protocolo incorrecto', 'upload-proto-error-text' => 'O carregamento remoto de ficheiros requer endereços URL começados por http:// ou ftp://.', @@ -1783,6 +1821,7 @@ Clique um cabeçalho de coluna para alterar a ordenação.', 'listfiles_search_for' => 'Pesquisar por nome de imagem:', 'imgfile' => 'ficheiro', 'listfiles' => 'Ficheiros', +'listfiles_thumb' => 'Miniatura', 'listfiles_date' => 'Data', 'listfiles_name' => 'Nome', 'listfiles_user' => 'Utilizador', @@ -1895,8 +1934,8 @@ A descrição na [$2 página de descrição] é mostrada abaixo.', 'statistics-edits' => 'Edições de páginas desde que a {{SITENAME}} foi instalada', 'statistics-edits-average' => 'Média de edições por página', 'statistics-views-total' => 'Total de visionamentos', +'statistics-views-total-desc' => 'Não estão incluídos os visionamentos de páginas inexistentes e páginas especiais', 'statistics-views-peredit' => 'Visionamentos por edição', -'statistics-jobqueue' => 'Tamanho da [http://www.mediawiki.org/wiki/Manual:Job_queue fila de tarefas]', 'statistics-users' => '[[Special:ListUsers|Utilizadores]] registados', 'statistics-users-active' => 'Utilizadores activos', 'statistics-users-active-desc' => 'Utilizadores que efectuaram uma operação {{PLURAL:$1|no último dia|nos últimos $1 dias}}', @@ -1911,7 +1950,7 @@ Considera-se que uma página é de desambiguação se nela for utilizada uma pre 'doubleredirects' => 'Redireccionamentos duplos', 'doubleredirectstext' => 'Esta página lista todas as páginas que redireccionam para outras páginas de redireccionamento. Cada linha contém links para o primeiro e segundo redireccionamentos, bem como o destino do segundo redireccionamento, geralmente contendo a verdadeira página de destino, que devia ser o destino do primeiro redireccionamento. -Entradas cortadas já foram solucionadas.', +Entradas cortadas já foram solucionadas.', 'double-redirect-fixed-move' => '[[$1]] foi movido. Agora redirecciona para [[$2]].', 'double-redirect-fixer' => 'Corrector de redireccionamentos', @@ -1935,6 +1974,8 @@ Agora redirecciona para [[$2]].', 'nmembers' => '$1 {{PLURAL:$1|membro|membros}}', 'nrevisions' => '$1 {{PLURAL:$1|edição|edições}}', 'nviews' => '$1 {{PLURAL:$1|visita|visitas}}', +'nimagelinks' => 'Usada {{PLURAL:$1|numa página|em $1 páginas}}', +'ntransclusions' => 'usada {{PLURAL:$1|numa página|em $1 páginas}}', 'specialpage-empty' => 'Não existem dados para apresentar.', 'lonelypages' => 'Páginas órfãs', 'lonelypagestext' => 'As seguintes páginas não são destino de links nem são transcluídas a partir de outras páginas na {{SITENAME}}.', @@ -2052,7 +2093,7 @@ Veja também as [[Special:WantedCategories|categorias desejadas]].', 'listusersfrom' => 'Mostrar utilizadores começando por:', 'listusers-submit' => 'Mostrar', 'listusers-noresult' => 'Não foram encontrados utilizadores.', -'listusers-blocked' => '({{GENDER:$1|bloqueado|bloqueada}})', +'listusers-blocked' => '(bloqueado)', # Special:ActiveUsers 'activeusers' => 'Utilizadores activos', @@ -2091,34 +2132,40 @@ Encontram-se disponíveis [[{{MediaWiki:Listgrouprights-helppage}}|informações 'listgrouprights-removegroup-self-all' => 'Remover a própria conta de todos os grupos', # E-mail user -'mailnologin' => 'Nenhum endereço de envio', -'mailnologintext' => 'Precisa de estar [[Special:UserLogin|autenticado]] e possuir um endereço de correio válido nas suas [[Special:Preferences|preferências]], para poder enviar correio electrónico a outros utilizadores.', -'emailuser' => 'Contactar este utilizador', -'emailpage' => 'Contactar utilizador', -'emailpagetext' => 'Pode usar o formulário abaixo para enviar uma mensagem por correio electrónico para este utilizador. +'mailnologin' => 'Nenhum endereço de envio', +'mailnologintext' => 'Precisa de estar [[Special:UserLogin|autenticado]] e possuir um endereço de correio válido nas suas [[Special:Preferences|preferências]], para poder enviar correio electrónico a outros utilizadores.', +'emailuser' => 'Contactar este utilizador', +'emailpage' => 'Contactar utilizador', +'emailpagetext' => 'Pode usar o formulário abaixo para enviar uma mensagem por correio electrónico para este utilizador. O endereço de correio que introduziu nas suas [[Special:Preferences|preferências]] irá aparecer no campo do remetente da mensagem "De:", para que o destinatário lhe possa responder directamente.', -'usermailererror' => 'O sistema de correio devolveu o erro:', -'defemailsubject' => 'Correio da {{SITENAME}}', -'noemailtitle' => 'Sem endereço de correio electrónico', -'noemailtext' => 'Este utilizador não especificou um endereço de correio electrónico válido.', -'nowikiemailtitle' => 'Correio electrónico não é permitido', -'nowikiemailtext' => 'Este utilizador optou por não receber correio electrónico de outros utilizadores.', -'email-legend' => 'Enviar correio electrónico para outro utilizador da {{SITENAME}}', -'emailfrom' => 'De:', -'emailto' => 'Para:', -'emailsubject' => 'Assunto:', -'emailmessage' => 'Mensagem:', -'emailsend' => 'Enviar', -'emailccme' => 'Enviar uma cópia desta mensagem para o meu correio electrónico.', -'emailccsubject' => 'Cópia da sua mensagem para $1: $2', -'emailsent' => 'Mensagem enviada', -'emailsenttext' => 'A sua mensagem foi enviada.', -'emailuserfooter' => 'Esta mensagem foi enviada por $1 para $2 usando a opção "Contactar este utilizador" da {{SITENAME}}.', +'usermailererror' => 'O sistema de correio devolveu o erro:', +'defemailsubject' => 'Correio da {{SITENAME}}', +'usermaildisabled' => 'Correio electrónico do utilizador foi desactivado', +'usermaildisabledtext' => 'Não pode enviar correio electrónico aos outros utilizadores desta wiki', +'noemailtitle' => 'Sem endereço de correio electrónico', +'noemailtext' => 'Este utilizador não especificou um endereço de correio electrónico válido.', +'nowikiemailtitle' => 'Correio electrónico não é permitido', +'nowikiemailtext' => 'Este utilizador optou por não receber correio electrónico de outros utilizadores.', +'email-legend' => 'Enviar correio electrónico para outro utilizador da {{SITENAME}}', +'emailfrom' => 'De:', +'emailto' => 'Para:', +'emailsubject' => 'Assunto:', +'emailmessage' => 'Mensagem:', +'emailsend' => 'Enviar', +'emailccme' => 'Enviar uma cópia desta mensagem para o meu correio electrónico.', +'emailccsubject' => 'Cópia da sua mensagem para $1: $2', +'emailsent' => 'Mensagem enviada', +'emailsenttext' => 'A sua mensagem foi enviada.', +'emailuserfooter' => 'Esta mensagem foi enviada por $1 para $2 usando a opção "Contactar este utilizador" da {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Deixar mensagem de sistema.', +'usermessage-editor' => 'Editor de mensagens de sistema', # Watchlist 'watchlist' => 'Páginas vigiadas', 'mywatchlist' => 'Páginas vigiadas', -'watchlistfor' => "(para '''$1''')", +'watchlistfor2' => 'Para $1 $2', 'nowatchlist' => 'A sua lista de páginas vigiadas está vazia.', 'watchlistanontext' => '$1 para ver ou editar a sua lista de páginas vigiadas, por favor.', 'watchnologin' => 'Não está autenticado', @@ -2126,7 +2173,7 @@ O endereço de correio que introduziu nas suas [[Special:Preferences|preferênci 'addedwatch' => 'Adicionado à lista', 'addedwatchtext' => "A página \"[[:\$1]]\" foi adicionada à sua lista de [[Special:Watchlist|páginas vigiadas]], onde serão indicadas quaisquer modificações futuras desta página e da respectiva página de discussão. -O nome desta página passará a aparecer a '''negrito''' na lista de [[Special:RecentChanges|mudanças recentes]] para que a encontre facilmente.", +O nome desta página passará a aparecer a '''negrito''' na lista de [[Special:RecentChanges|mudanças recentes]], para que a encontre facilmente.", 'removedwatch' => 'Removida da lista de páginas vigiadas', 'removedwatchtext' => 'A página "[[:$1]]" foi removida da sua lista de [[Special:Watchlist|páginas vigiadas]].', 'watch' => 'Vigiar', @@ -2164,7 +2211,7 @@ O nome desta página passará a aparecer a '''negrito''' na lista de [[Special:R 'enotif_body' => 'Caro(a) $WATCHINGUSERNAME, -A página $PAGETITLE na {{SITENAME}} foi $CHANGEDORCREATED a $PAGEEDITDATE por $PAGEEDITOR; consulte $PAGETITLE_URL para a versão actual. +A página $PAGETITLE da {{SITENAME}} foi $CHANGEDORCREATED a $PAGEEDITDATE por $PAGEEDITOR; consulte $PAGETITLE_URL para ver a versão actual. $NEWPAGE @@ -2174,19 +2221,22 @@ Contacte o editor: correio electrónico: $PAGEEDITOR_EMAIL wiki: $PAGEEDITOR_WIKI -Até que visite esta página, não haverá lugar a mais notificações no caso de alterações futuras. -Pode também reactivar as notificações para todas as suas páginas vigiadas na sua lista de páginas vigiadas. +Até que visite esta página, não receberá mais notificações das alterações futuras. +Pode também reactivar as notificações para todas páginas na sua lista de páginas vigiadas. O seu sistema de notificação amigável da {{SITENAME}} -- -Para alterar as suas preferências da lista de páginas vigiadas, visite +Para alterar as suas preferências das notificações por correio electrónico, visite +{{fullurl:{{#special:Preferences}}}} + +Para alterar as suas preferências das páginas vigiadas, visite {{fullurl:{{#special:Watchlist}}/edit}} -Para retirar a página da sua lista de páginas vigiadas, visite +Para retirar a página da lista de páginas vigiadas, visite $UNWATCHURL -Contacto e assistência: +Para comentários e pedidos de ajuda: {{fullurl:{{MediaWiki:Helppage}}}}', # Delete @@ -2219,9 +2269,9 @@ Consulte $2 para um registo de eliminações recentes.', ** Violação de direitos de autor ** Vandalismo', 'delete-edit-reasonlist' => 'Editar motivos de eliminação', -'delete-toobig' => 'Esta página possui um longo histórico, com mais de $1 {{PLURAL:$1|edição|edições}}. -A eliminação de tais páginas foi restringida na {{SITENAME}}, para evitar problemas acidentais.', -'delete-warning-toobig' => 'Esta página possui um longo histórico de edições, com mais de $1 {{PLURAL:$1|edição|edições}}. +'delete-toobig' => 'Esta página tem um histórico longo, com mais de $1 {{PLURAL:$1|edição|edições}}. +A eliminação de páginas como esta foi restringida na {{SITENAME}}, para evitar problemas acidentais.', +'delete-warning-toobig' => 'Esta página tem um histórico de edições longo, com mais de $1 {{PLURAL:$1|edição|edições}}. Eliminá-la poderá causar problemas na base de dados da {{SITENAME}}; prossiga com precaução.', @@ -2239,7 +2289,10 @@ A última edição foi de [[User:$3|$3]] ([[User talk:$3|discussão]]{{int:pipe- 'revertpage' => 'Foram revertidas as edições de [[Special:Contributions/$2|$2]] ([[User talk:$2|disc]]) para a última versão por [[User:$1|$1]]', 'revertpage-nouser' => 'Revertidas as edições de (nome de utilizador removido) para a última revisão por [[User:$1|$1]]', 'rollback-success' => 'Foram revertidas as edições de $1, com o conteúdo passando a estar como na última edição de $2.', -'sessionfailure' => 'Foram detectados problemas com a sua sessão; + +# Edit tokens +'sessionfailure-title' => 'Erro de sessão', +'sessionfailure' => 'Foram detectados problemas com a sua sessão; esta operação foi cancelada como medida de protecção contra a intercepção de sessões. Clique o botão "Voltar" e recarregue a página de onde veio, depois tente novamente.', @@ -2264,7 +2317,7 @@ Consulte a [[Special:ProtectedPages|lista de páginas protegidas]] para ver as p Esta é a configuração presente para a página '''$1''':", 'protect-locked-dblock' => "Não é possível alterar os níveis de protecção, porque a base de dados está bloqueada. Esta é a configuração actual para a página '''$1''':", -'protect-locked-access' => "A sua conta não possui permissões para alterar os níveis de protecção de uma página. +'protect-locked-access' => "A sua conta não tem permissão de alterar os níveis de protecção de uma página. Esta é a configuração actual da página '''$1''':", 'protect-cascadeon' => 'Esta página está protegida porque se encontra incluída {{PLURAL:$1|na página listada a seguir, protegida|nas páginas listadas a seguir, protegidas}} com protecção em cascata. Pode alterar o nível de protecção desta página, mas isso não afectará a protecção em cascata.', @@ -2371,19 +2424,23 @@ $1', 'month' => 'Até o mês:', 'year' => 'Até o ano:', -'sp-contributions-newbies' => 'Mostrar só as contribuições das contas recentes', -'sp-contributions-newbies-sub' => 'Para contas novas', -'sp-contributions-newbies-title' => 'Contribuições de contas novas', -'sp-contributions-blocklog' => 'registo de bloqueios', -'sp-contributions-deleted' => 'contribuições eliminadas', -'sp-contributions-logs' => 'registos', -'sp-contributions-talk' => 'discussão', -'sp-contributions-userrights' => 'gestão de privilégios de utilizador', -'sp-contributions-blocked-notice' => 'Este utilizador encontra-se actualmente bloqueado. +'sp-contributions-newbies' => 'Mostrar só as contribuições das contas recentes', +'sp-contributions-newbies-sub' => 'Para contas novas', +'sp-contributions-newbies-title' => 'Contribuições de contas novas', +'sp-contributions-blocklog' => 'registo de bloqueios', +'sp-contributions-deleted' => 'contribuições eliminadas', +'sp-contributions-uploads' => 'uploads', +'sp-contributions-logs' => 'registos', +'sp-contributions-talk' => 'discussão', +'sp-contributions-userrights' => 'gestão de privilégios de utilizador', +'sp-contributions-blocked-notice' => 'Este utilizador encontra-se actualmente bloqueado. Para referência, o último registo de bloqueio é apresentado abaixo:', -'sp-contributions-search' => 'Pesquisar contribuições', -'sp-contributions-username' => 'Endereço IP ou utilizador:', -'sp-contributions-submit' => 'Pesquisar', +'sp-contributions-blocked-notice-anon' => 'Este endereço IP está bloqueado neste momento. +Para sua referência, encontra abaixo a entrada mais recente no registo de bloqueios:', +'sp-contributions-search' => 'Pesquisar contribuições', +'sp-contributions-username' => 'Endereço IP ou utilizador:', +'sp-contributions-toponly' => 'Mostrar somente as revisões mais recentes', +'sp-contributions-submit' => 'Pesquisar', # What links here 'whatlinkshere' => 'Páginas afluentes', @@ -2443,7 +2500,6 @@ Consulte a [[Special:IPBlockList|lista de IPs bloqueados]] para rever os bloquei 'ipb-edit-dropdown' => 'Editar motivos de bloqueio', 'ipb-unblock-addr' => 'Desbloquear $1', 'ipb-unblock' => 'Desbloquear um utilizador ou endereço IP', -'ipb-blocklist-addr' => 'Bloqueios em vigência para $1', 'ipb-blocklist' => 'Ver bloqueios em vigência', 'ipb-blocklist-contribs' => 'Contribuições de $1', 'unblockip' => 'Desbloquear utilizador', @@ -2515,6 +2571,8 @@ Contacte o seu fornecedor de internet ou o serviço de apoio técnico e informe- 'sorbs_create_account_reason' => "O seu endereço IP encontra-se listado como ''proxy'' aberto na DNSBL utilizada pela {{SITENAME}}. Não pode criar uma conta", 'cant-block-while-blocked' => 'Não pode bloquear outros utilizadores enquanto estiver bloqueado.', 'cant-see-hidden-user' => "O utilizador que está tentando bloquear já está bloqueado e oculto. Como não possui privilégio de bloquear utilizadores ''(hideuser)'', não pode ver ou editar o bloqueio deste utilizador.", +'ipbblocked' => 'Não pode bloquear ou desbloquear outros, porque está bloqueado', +'ipbnounblockself' => 'Não lhe é permitido desbloquear-se a si mesmo', # Developer tools 'lockdb' => 'Bloquear a base de dados', @@ -2551,6 +2609,17 @@ Isto significa que pode mover uma página de volta para o seu nome original se a '''CUIDADO!''' Numa página popular esta operação pode representar uma mudança drástica e inesperada; certifique-se de que compreende as consequências da mudança antes de prosseguir, por favor.", +'movepagetext-noredirectfixer' => "Usando o formulário abaixo, pode alterar o nome de uma página e mover todo o histórico desta para o nome novo. +A página antiga é transformada numa página de redireccionamento para a nova. +Verifique a existência de [[Special:DoubleRedirects|redireccionamentos duplos]] ou [[Special:BrokenRedirects|quebrados]]. +É da sua responsabilidade certificar-se de que os links continuam a apontar para onde é suposto. + +Note que a página '''não''' será movida se já existir uma página com o nome novo, a menos que esta página já existente esteja vazia ou seja uma página de redireccionamento e não tenha um histórico de edições. +Isto também significa que, se se tiver enganado, pode alterar o nome da página movida de volta para o seu nome original; e que não pode sobrescrever o conteúdo de uma página existente. + +'''Aviso!''' +Para páginas populares, esta operação pode representar uma mudança drástica e inesperada; +certifique-se de que compreende as consequências da operação antes de continuar.", 'movepagetalktext' => "Se existir uma página de discussão associada, ela será automaticamente movida, '''a não ser que:''' *já exista uma página de discussão com o novo título que não esteja vazia, ou *desmarque a correspondente caixa de selecção abaixo. @@ -2607,6 +2676,7 @@ não é possível mover uma página para ela mesma.', 'immobile-source-page' => 'Esta página não pode ser movida.', 'immobile-target-page' => 'Não é possível mover para esse título de destino.', 'imagenocrossnamespace' => 'Não é possível mover imagem para espaço nominal que não de imagens', +'nonfile-cannot-move-to-file' => 'Não é possível mover algo que não é um ficheiro para o espaço nominal de ficheiros', 'imagetypemismatch' => 'A extensão do novo ficheiro não corresponde ao seu tipo', 'imageinvalidfilename' => 'O nome do ficheiro alvo é inválido', 'fix-double-redirects' => 'Actualizar todos os redireccionamentos que apontem para o título original', @@ -2686,6 +2756,7 @@ Grave o ficheiro no seu computador e importe-o aqui.', 'importstart' => 'Importando páginas...', 'import-revision-count' => '{{PLURAL:$1|uma edição|$1 edições}}', 'importnopages' => 'Não existem páginas a importar.', +'imported-log-entries' => '{{PLURAL:$1|Foi importada $1 entrada|Foram importadas $1 entradas}} de registo.', 'importfailed' => 'A importação falhou: $1', 'importunknownsource' => 'Tipo da fonte de importação desconhecido', 'importcantopen' => 'Não foi possível abrir o ficheiro a importar', @@ -2783,6 +2854,8 @@ Utilize o botão "Antever resultado" antes de gravar, por favor.', 'tooltip-rollback' => '"{{int:rollbacklink}}" reverte, com um só clique, as edições do último editor desta página.', 'tooltip-undo' => '"desfazer" reverte esta edição e apresenta a página de edição no modo de antevisão. Permite colocar uma justificação no resumo da edição.', +'tooltip-preferences-save' => 'Gravar preferências', +'tooltip-summary' => 'Introduza um resumo breve', # Stylesheets 'common.css' => '/* Código CSS colocado aqui será aplicado a todos os temas */', @@ -2811,13 +2884,13 @@ Permite colocar uma justificação no resumo da edição.', 'vector.js' => '/* Código Javascript colocado aqui será carregado para utilizadores do tema Vector */', # Metadata -'nodublincore' => 'Os metadados RDF para Dublin Core foram impossibilitados neste servidor.', -'nocreativecommons' => 'Os metadados RDF para Creative Commons foram impossibilitados neste servidor.', +'nodublincore' => 'O uso de metadados RDF para Dublin Core foi impossibilitado neste servidor.', +'nocreativecommons' => 'O uso de metadados RDF da Creative Commons foi impossibilitado neste servidor.', 'notacceptable' => 'O servidor não pode fornecer os dados num formato que o seu cliente possa ler.', # Attribution 'anonymous' => '{{PLURAL:$1|Utilizador anónimo|Utilizadores anónimos}} da {{SITENAME}}', -'siteuser' => '{{GENDER:$2|um utilizador|uma utilizadora|um utilizador}} da {{SITENAME}} ($1)', +'siteuser' => '$1 da {{SITENAME}}', 'anonuser' => 'utilizador anónimo $1 da {{SITENAME}}', 'lastmodifiedatby' => 'Esta página foi modificada pela última vez às $2 de $1 por $3.', 'othercontribs' => 'Baseado no trabalho de $1.', @@ -2915,14 +2988,17 @@ Executá-lo poderá comprometer a segurança do seu sistema.", 'imagemaxsize' => "Limite de tamanho de imagens:
    ''(para páginas de descrição)''", 'thumbsize' => 'Tamanho de miniaturas:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|página|páginas}}', -'file-info' => '(tamanho: $1, tipo MIME: $2)', -'file-info-size' => '($1 × $2 pixels, tamanho: $3, tipo MIME: $4)', +'file-info' => 'tamanho: $1, tipo MIME: $2', +'file-info-size' => '$1 × $2 pixels, tamanho: $3, tipo MIME: $4', 'file-nohires' => 'Sem resolução maior disponível.', -'svg-long-desc' => '(ficheiro SVG, de $1 × $2 pixels, tamanho: $3)', +'svg-long-desc' => 'ficheiro SVG, de $1 × $2 pixels, tamanho: $3', 'show-big-image' => 'Resolução completa', 'show-big-image-thumb' => 'Dimensões desta antevisão: $1 × $2 pixels', 'file-info-gif-looped' => 'cíclico', 'file-info-gif-frames' => '$1 {{PLURAL:$1|quadro|quadros}}', +'file-info-png-looped' => 'ciclo infinito', +'file-info-png-repeat' => 'reproduzido $1 {{PLURAL:$1|vez|vezes}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|fotograma|fotogramas}}', # Special:NewFiles 'newimages' => 'Galeria de novos ficheiros', @@ -3077,6 +3153,7 @@ Caso o ficheiro tenha sido modificado a partir do seu estado original, alguns de 'exif-gpsareainformation' => 'Nome da área do GPS', 'exif-gpsdatestamp' => 'Data do GPS', 'exif-gpsdifferential' => 'Correcção do diferencial do GPS', +'exif-objectname' => 'Título curto', # EXIF attributes 'exif-compression-1' => 'Descomprimido', @@ -3236,30 +3313,30 @@ Caso o ficheiro tenha sido modificado a partir do seu estado original, alguns de 'limitall' => 'tudo', # E-mail address confirmation -'confirmemail' => 'Confirmar endereço de correio electrónico', -'confirmemail_noemail' => 'Não tem um endereço de correio electrónico válido nas suas [[Special:Preferences|preferências de utilizador]].', -'confirmemail_text' => 'A {{SITENAME}} requer que valide o seu endereço de correio electrónico antes de usar as funcionalidades de correio. +'confirmemail' => 'Confirmar endereço de correio electrónico', +'confirmemail_noemail' => 'Não tem um endereço de correio electrónico válido nas suas [[Special:Preferences|preferências de utilizador]].', +'confirmemail_text' => 'A {{SITENAME}} requer que valide o seu endereço de correio electrónico antes de usar as funcionalidades de correio. Clique o botão abaixo para enviar uma mensagem de confirmação para o seu endereço. A mensagem incluíra uma URL que contém um código; insira a URL no seu browser para confirmar que o seu endereço de correio electrónico é válido.', -'confirmemail_pending' => 'Um código de confirmação já lhe foi enviado; +'confirmemail_pending' => 'Um código de confirmação já lhe foi enviado; caso tenha criado a conta recentemente, é recomendado que aguarde alguns minutos até o receber antes de tentar pedir um novo código.', -'confirmemail_send' => 'Enviar código de confirmação', -'confirmemail_sent' => 'Correio de confirmação enviado.', -'confirmemail_oncreate' => 'Foi enviado um código de confirmação para o seu endereço de correio electrónico. +'confirmemail_send' => 'Enviar código de confirmação', +'confirmemail_sent' => 'Correio de confirmação enviado.', +'confirmemail_oncreate' => 'Foi enviado um código de confirmação para o seu endereço de correio electrónico. Este código não é necessário para se autenticar no sistema, mas será necessário para activar qualquer funcionalidade baseada no uso de correio na wiki.', -'confirmemail_sendfailed' => 'A {{SITENAME}} não conseguiu enviar o correio de confirmação. +'confirmemail_sendfailed' => 'A {{SITENAME}} não conseguiu enviar o correio de confirmação. Verifique se o seu endereço de correio electrónico possui caracteres inválidos. O sistema de correio devolveu o erro: $1', -'confirmemail_invalid' => 'Código de confirmação inválido. O código poderá ter expirado.', -'confirmemail_needlogin' => 'Precisa de $1 para confirmar o seu endereço de correio electrónico.', -'confirmemail_success' => 'O seu endereço de correio electrónico foi confirmado. +'confirmemail_invalid' => 'Código de confirmação inválido. O código poderá ter expirado.', +'confirmemail_needlogin' => 'Precisa de $1 para confirmar o seu endereço de correio electrónico.', +'confirmemail_success' => 'O seu endereço de correio electrónico foi confirmado. Pode agora [[Special:UserLogin|autenticar-se]] e desfrutar da wiki.', -'confirmemail_loggedin' => 'O seu endereço de correio electrónico foi confirmado.', -'confirmemail_error' => 'Alguma coisa correu mal ao gravar a sua confirmação.', -'confirmemail_subject' => 'Confirmação de endereço de correio electrónico da {{SITENAME}}', -'confirmemail_body' => 'Alguém, provavelmente você a partir do endereço IP $1, +'confirmemail_loggedin' => 'O seu endereço de correio electrónico foi confirmado.', +'confirmemail_error' => 'Alguma coisa correu mal ao gravar a sua confirmação.', +'confirmemail_subject' => 'Confirmação de endereço de correio electrónico da {{SITENAME}}', +'confirmemail_body' => 'Alguém, provavelmente você a partir do endereço IP $1, registou uma conta "$2" com este endereço de correio electrónico na {{SITENAME}}. Para confirmar que esta conta é realmente sua e activar @@ -3273,9 +3350,39 @@ a confirmação do endereço de correio electrónico: $5 -Este código de confirmação irá expirar às $7 de $6.', -'confirmemail_invalidated' => 'Confirmação de endereço de correio electrónico cancelada', -'invalidateemail' => 'Cancelar confirmação de correio electrónico', +Este código de confirmação expira a $4.', +'confirmemail_body_changed' => 'Alguém, provavelmente você a partir do endereço IP $1, +alterou o endereço de correio electrónico da conta "$2" para este na {{SITENAME}}. + +Para confirmar que esta conta é realmente sua e reactivar +as funcionalidades de correio electrónico na {{SITENAME}}, +abra o seguinte link no seu browser: + +$3 + +Caso a conta *não* lhe pertença, abra o seguinte link +para cancelar a confirmação do endereço de correio electrónico: + +$5 + +Este código de confirmação expira a $4.', +'confirmemail_body_set' => 'Alguém, provavelmente você a partir do endereço IP $1, +definiu o seu endereço de correio electrónico como correio da conta "$2" na {{SITENAME}}. + +Para confirmar que esta conta é realmente sua e reactivar +as funcionalidades de correio electrónico na {{SITENAME}}, +abra o seguinte link no seu browser: + +$3 + +Caso a conta *não* lhe pertença, abra o seguinte link +para cancelar a confirmação do endereço de correio electrónico: + +$5 + +Este código de confirmação expira a $4.', +'confirmemail_invalidated' => 'Confirmação de endereço de correio electrónico cancelada', +'invalidateemail' => 'Cancelar confirmação de correio electrónico', # Scary transclusion 'scarytranscludedisabled' => '[Transclusão interwikis foi impossibilitada]', @@ -3315,6 +3422,7 @@ Confirme que deseja realmente recriar esta página, por favor.", 'table_pager_first' => 'Primeira página', 'table_pager_last' => 'Última página', 'table_pager_limit' => 'Mostrar $1 por página', +'table_pager_limit_label' => 'Entradas por página:', 'table_pager_limit_submit' => 'Ir', 'table_pager_empty' => 'Sem resultados', @@ -3373,6 +3481,7 @@ Também pode [[Special:Watchlist/edit|editar a lista da maneira convencional]].' 'version-specialpages' => 'Páginas especiais', 'version-parserhooks' => "''Hooks'' do analisador sintáctico", 'version-variables' => 'Variáveis', +'version-skins' => 'Temas', 'version-other' => 'Diversos', 'version-mediahandlers' => 'Leitura e tratamento de multimédia', 'version-hooks' => 'Hooks', @@ -3384,6 +3493,13 @@ Também pode [[Special:Watchlist/edit|editar a lista da maneira convencional]].' 'version-hook-subscribedby' => 'Subscrito por', 'version-version' => '(Versão $1)', 'version-license' => 'Licença', +'version-poweredby-credits' => "Esta é uma wiki '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'outros', +'version-license-info' => 'O MediaWiki é software livre; pode redistribuí-lo e/ou modificá-lo nos termos da licença GNU General Public License, tal como publicada pela Free Software Foundation; tanto a versão 2 da Licença, como (por opção sua) qualquer versão posterior. + +O MediaWiki é distribuído na esperança de que seja útil, mas SEM QUALQUER GARANTIA; inclusive, sem a garantia implícita da POSSIBILIDADE DE SER COMERCIALIZADO ou de ADEQUAÇÂO PARA QUALQUER FINALIDADE ESPECÍFICA. Consulte a licença GNU General Public License para mais detalhes. + +Em conjunto com este programa deve ter recebido [{{SERVER}}{{SCRIPTPATH}}/COPYING uma cópia da licença GNU General Public License]; se não a recebeu, peça-a por escrito para Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ou [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html leia-a na internet].', 'version-software' => 'Software instalado', 'version-software-product' => 'Produto', 'version-software-version' => 'Versão', @@ -3455,6 +3571,15 @@ Introduza o nome do ficheiro sem o prefixo \"{{ns:file}}:\".", 'tags-edit' => 'editar', 'tags-hitcount' => '$1 {{PLURAL:$1|modificação|modificações}}', +# Special:ComparePages +'comparepages' => 'Comparar páginas', +'compare-selector' => 'Comparar edições da página', +'compare-page1' => 'Página 1', +'compare-page2' => 'Página 2', +'compare-rev1' => 'Edição 1', +'compare-rev2' => 'Edição 2', +'compare-submit' => 'Comparar', + # Database error messages 'dberr-header' => 'Esta wiki tem um problema', 'dberr-problems' => 'Desculpe! Este site está a experienciar dificuldades técnicas.', @@ -3471,8 +3596,13 @@ Introduza o nome do ficheiro sem o prefixo \"{{ns:file}}:\".", 'htmlform-float-invalid' => 'O valor que especificou não é um número.', 'htmlform-int-toolow' => 'O valor que especificou é inferior ao mínimo de $1', 'htmlform-int-toohigh' => 'O valor que especificou é superior ao máximo de $1', +'htmlform-required' => 'Este valor é necessário', 'htmlform-submit' => 'Enviar', 'htmlform-reset' => 'Desfazer alterações', 'htmlform-selectorother-other' => 'Outros', +# SQLite database support +'sqlite-has-fts' => '$1 com suporte de pesquisa de texto completo', +'sqlite-no-fts' => '$1 sem suporte de pesquisa de texto completo', + ); diff --git a/languages/messages/MessagesPt_br.php b/languages/messages/MessagesPt_br.php index 02952a29..ef39e48b 100644 --- a/languages/messages/MessagesPt_br.php +++ b/languages/messages/MessagesPt_br.php @@ -20,6 +20,7 @@ * @author Eduardo.mps * @author GKnedo * @author Giro720 + * @author GoEThe * @author Hamilton Abreu * @author Helder.wiki * @author Heldergeovane @@ -31,6 +32,7 @@ * @author Luckas Blade * @author Malafaya * @author McDutchie + * @author Raylton P. Sousa * @author Rodrigo Calanca Nishino * @author Urhixidur * @author Vuln @@ -40,10 +42,10 @@ * @author 555 */ -$fallback = 'pt'; +$fallback = 'pt'; $namespaceNames = array( - NS_MEDIA => 'Media', + NS_MEDIA => 'Mídia', NS_SPECIAL => 'Especial', NS_TALK => 'Discussão', NS_USER => 'Usuário', @@ -79,96 +81,98 @@ $dateFormats = array( ); -$separatorTransformTable = array(',' => ' ', '.' => ',' ); +$separatorTransformTable = array( ',' => ' ', '.' => ',' ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'Redirecionamentos duplos' ), - 'BrokenRedirects' => array( 'Redirecionamentos quebrados' ), - 'Disambiguations' => array( 'Páginas de desambiguação', 'Desambiguar', 'Desambiguações' ), + 'DoubleRedirects' => array( 'Redirecionamentos_duplos' ), + 'BrokenRedirects' => array( 'Redirecionamentos_quebrados' ), + 'Disambiguations' => array( 'Páginas_de_desambiguação', 'Desambiguar', 'Desambiguações' ), 'Userlogin' => array( 'Autenticar-se', 'Entrar', 'Login' ), 'Userlogout' => array( 'Sair', 'Logout' ), - 'CreateAccount' => array( 'Criar conta' ), + 'CreateAccount' => array( 'Criar_conta' ), 'Preferences' => array( 'Preferências' ), - 'Watchlist' => array( 'Páginas vigiadas', 'Artigos vigiados', 'Vigiados' ), - 'Recentchanges' => array( 'Mudanças recentes', 'Recentes' ), - 'Upload' => array( 'Carregar arquivo', 'Carregar imagem', 'Carregar ficheiro', 'Enviar' ), - 'Listfiles' => array( 'Lista de arquivos', 'Lista de imagens', 'Lista de ficheiros' ), - 'Newimages' => array( 'Arquivos novos', 'Imagens novas', 'Ficheiros novos' ), - 'Listusers' => array( 'Lista de usuários', 'Lista de utilizadores' ), - 'Listgrouprights' => array( 'Listar privilégios de grupos' ), + 'Watchlist' => array( 'Páginas_vigiadas', 'Artigos_vigiados', 'Vigiados' ), + 'Recentchanges' => array( 'Mudanças_recentes', 'Recentes' ), + 'Upload' => array( 'Carregar_arquivo', 'Carregar_imagem', 'Carregar_ficheiro', 'Enviar' ), + 'Listfiles' => array( 'Lista_de_arquivos', 'Lista_de_imagens', 'Lista_de_ficheiros' ), + 'Newimages' => array( 'Arquivos_novos', 'Imagens_novas', 'Ficheiros_novos' ), + 'Listusers' => array( 'Lista_de_usuários', 'Lista_de_utilizadores' ), + 'Listgrouprights' => array( 'Listar_privilégios_de_grupos' ), 'Statistics' => array( 'Estatísticas' ), - 'Randompage' => array( 'Aleatória', 'Aleatório', 'Página aleatória', 'Artigo aleatório' ), - 'Lonelypages' => array( 'Páginas órfãs', 'Artigos órfãos', 'Páginas sem afluentes', 'Artigos sem afluentes' ), - 'Uncategorizedpages' => array( 'Páginas sem categorias', 'Artigos sem categorias' ), - 'Uncategorizedcategories' => array( 'Categorias sem categorias' ), - 'Uncategorizedimages' => array( 'Arquivos sem categorias', 'Imagens sem categorias', 'Ficheiros sem categorias' ), - 'Uncategorizedtemplates' => array( 'Predefinições não categorizadas', 'Predefinições sem categorias' ), - 'Unusedcategories' => array( 'Categorias não utilizadas', 'Categorias sem uso' ), - 'Unusedimages' => array( 'Arquivos sem uso', 'Arquivos não utilizados', 'Imagens sem uso', 'Imagens não utilizadas', 'Ficheiros sem uso', 'Ficheiros não utilizados' ), - 'Wantedpages' => array( 'Páginas pedidas', 'Páginas em falta', 'Artigos em falta', 'Artigos pedidos' ), - 'Wantedcategories' => array( 'Categorias pedidas', 'Categorias em falta', 'Categorias inexistentes' ), - 'Wantedfiles' => array( 'Arquivos pedidos', 'Arquivos em falta', 'Ficheiros em falta', 'Imagens em falta' ), - 'Wantedtemplates' => array( 'Predefinições pedidas', 'Predefinições em falta' ), - 'Mostlinked' => array( 'Páginas com mais afluentes', 'Artigos com mais afluentes' ), - 'Mostlinkedcategories' => array( 'Categorias com mais afluentes' ), - 'Mostlinkedtemplates' => array( 'Predefinições com mais afluentes' ), - 'Mostimages' => array( 'Imagens com mais afluentes', 'Ficheiros com mais afluentes', 'Arquivos com mais afluentes' ), - 'Mostcategories' => array( 'Páginas com mais categorias', 'Artigos com mais categorias' ), - 'Mostrevisions' => array( 'Páginas com mais edições', 'Artigos com mais edições' ), - 'Fewestrevisions' => array( 'Páginas com menos edições', 'Artigos com menos edições', 'Artigos menos editados' ), - 'Shortpages' => array( 'Páginas curtas', 'Artigos curtos' ), - 'Longpages' => array( 'Páginas longas', 'Artigos extensos' ), - 'Newpages' => array( 'Páginas novas', 'Artigos novos' ), - 'Ancientpages' => array( 'Páginas inativas', 'Artigos inativos' ), - 'Deadendpages' => array( 'Páginas sem saída', 'Artigos sem saída' ), - 'Protectedpages' => array( 'Páginas protegidas', 'Artigos protegidos' ), - 'Protectedtitles' => array( 'Títulos protegidos' ), - 'Allpages' => array( 'Todas as páginas', 'Todos os artigos', 'Todas páginas', 'Todos artigos' ), - 'Prefixindex' => array( 'Índice de prefixo', 'Índice por prefixo' ), - 'Ipblocklist' => array( 'Registro de bloqueios', 'IPs bloqueados', 'Utilizadores bloqueados', 'Usuários bloqueados', 'Registo de bloqueios' ), - 'Specialpages' => array( 'Páginas especiais' ), + 'Randompage' => array( 'Aleatória', 'Aleatório', 'Página_aleatória', 'Artigo_aleatório' ), + 'Lonelypages' => array( 'Páginas_órfãs', 'Artigos_órfãos', 'Páginas_sem_afluentes', 'Artigos_sem_afluentes' ), + 'Uncategorizedpages' => array( 'Páginas_sem_categorias', 'Artigos_sem_categorias' ), + 'Uncategorizedcategories' => array( 'Categorias_sem_categorias' ), + 'Uncategorizedimages' => array( 'Arquivos_sem_categorias', 'Imagens_sem_categorias', 'Ficheiros_sem_categorias' ), + 'Uncategorizedtemplates' => array( 'Predefinições_não_categorizadas', 'Predefinições_sem_categorias' ), + 'Unusedcategories' => array( 'Categorias_não_utilizadas', 'Categorias_sem_uso' ), + 'Unusedimages' => array( 'Arquivos_sem_uso', 'Arquivos_não_utilizados', 'Imagens_sem_uso', 'Imagens_não_utilizadas', 'Ficheiros_sem_uso', 'Ficheiros_não_utilizados' ), + 'Wantedpages' => array( 'Páginas_pedidas', 'Páginas_em_falta', 'Artigos_em_falta', 'Artigos_pedidos' ), + 'Wantedcategories' => array( 'Categorias_pedidas', 'Categorias_em_falta', 'Categorias_inexistentes' ), + 'Wantedfiles' => array( 'Arquivos_pedidos', 'Arquivos_em_falta', 'Ficheiros_em_falta', 'Imagens_em_falta' ), + 'Wantedtemplates' => array( 'Predefinições_pedidas', 'Predefinições_em_falta' ), + 'Mostlinked' => array( 'Páginas_com_mais_afluentes', 'Artigos_com_mais_afluentes' ), + 'Mostlinkedcategories' => array( 'Categorias_com_mais_afluentes' ), + 'Mostlinkedtemplates' => array( 'Predefinições_com_mais_afluentes' ), + 'Mostimages' => array( 'Imagens_com_mais_afluentes', 'Ficheiros_com_mais_afluentes', 'Arquivos_com_mais_afluentes' ), + 'Mostcategories' => array( 'Páginas_com_mais_categorias', 'Artigos_com_mais_categorias' ), + 'Mostrevisions' => array( 'Páginas_com_mais_edições', 'Artigos_com_mais_edições' ), + 'Fewestrevisions' => array( 'Páginas_com_menos_edições', 'Artigos_com_menos_edições', 'Artigos_menos_editados' ), + 'Shortpages' => array( 'Páginas_curtas', 'Artigos_curtos' ), + 'Longpages' => array( 'Páginas_longas', 'Artigos_extensos' ), + 'Newpages' => array( 'Páginas_novas', 'Artigos_novos' ), + 'Ancientpages' => array( 'Páginas_inativas', 'Artigos_inativos' ), + 'Deadendpages' => array( 'Páginas_sem_saída', 'Artigos_sem_saída' ), + 'Protectedpages' => array( 'Páginas_protegidas', 'Artigos_protegidos' ), + 'Protectedtitles' => array( 'Títulos_protegidos' ), + 'Allpages' => array( 'Todas_as_páginas', 'Todos_os_artigos', 'Todas_páginas', 'Todos_artigos' ), + 'Prefixindex' => array( 'Índice_de_prefixo', 'Índice_por_prefixo' ), + 'Ipblocklist' => array( 'Registro_de_bloqueios', 'IPs_bloqueados', 'Utilizadores_bloqueados', 'Usuários_bloqueados', 'Registo_de_bloqueios' ), + 'Unblock' => array( 'Desbloquear' ), + 'Specialpages' => array( 'Páginas_especiais' ), 'Contributions' => array( 'Contribuições' ), - 'Emailuser' => array( 'Contatar usuário', 'Contactar usuário', 'Contactar utilizador' ), - 'Confirmemail' => array( 'Confirmar e-mail', 'Confirmar email' ), - 'Whatlinkshere' => array( 'Páginas afluentes', 'Artigos afluentes' ), - 'Recentchangeslinked' => array( 'Mudanças relacionadas', 'Novidades relacionadas' ), - 'Movepage' => array( 'Mover página', 'Mover', 'Mover artigo' ), + 'Emailuser' => array( 'Contatar_usuário', 'Contactar_usuário', 'Contactar_utilizador' ), + 'Confirmemail' => array( 'Confirmar_e-mail', 'Confirmar_email' ), + 'Whatlinkshere' => array( 'Páginas_afluentes', 'Artigos_afluentes' ), + 'Recentchangeslinked' => array( 'Mudanças_relacionadas', 'Novidades_relacionadas' ), + 'Movepage' => array( 'Mover_página', 'Mover', 'Mover_artigo' ), 'Blockme' => array( 'Bloquear-me', 'Auto-bloqueio' ), - 'Booksources' => array( 'Fontes de livros' ), + 'Booksources' => array( 'Fontes_de_livros' ), 'Categories' => array( 'Categorias' ), 'Export' => array( 'Exportar' ), 'Version' => array( 'Versão', 'Sobre' ), - 'Allmessages' => array( 'Todas as mensagens', 'Todas mensagens' ), + 'Allmessages' => array( 'Todas_as_mensagens', 'Todas_mensagens' ), 'Log' => array( 'Registro', 'Registos', 'Registros', 'Registo' ), - 'Blockip' => array( 'Bloquear', 'Bloquear IP', 'Bloquear utilizador', 'Bloquear usuário' ), - 'Undelete' => array( 'Restaurar', 'Restaurar páginas eliminadas', 'Restaurar artigos eliminados' ), + 'Blockip' => array( 'Bloquear', 'Bloquear_IP', 'Bloquear_utilizador', 'Bloquear_usuário' ), + 'Undelete' => array( 'Restaurar', 'Restaurar_páginas_eliminadas', 'Restaurar_artigos_eliminados' ), 'Import' => array( 'Importar' ), - 'Lockdb' => array( 'Bloquear banco de dados', 'Bloquear a base de dados' ), - 'Unlockdb' => array( 'Desbloquear banco de dados', 'Desbloquear a base de dados' ), + 'Lockdb' => array( 'Bloquear_banco_de_dados', 'Bloquear_a_base_de_dados' ), + 'Unlockdb' => array( 'Desbloquear_banco_de_dados', 'Desbloquear_a_base_de_dados' ), 'Userrights' => array( 'Privilégios', 'Direitos', 'Estatutos' ), - 'MIMEsearch' => array( 'Busca MIME' ), - 'FileDuplicateSearch' => array( 'Busca de arquivos duplicados', 'Busca de ficheiros duplicados' ), - 'Unwatchedpages' => array( 'Páginas não-vigiadas', 'Páginas não vigiadas', 'Artigos não-vigiados', 'Artigos não vigiados' ), - 'Listredirects' => array( 'Lista de redirecionamentos', 'Redirecionamentos' ), - 'Revisiondelete' => array( 'Eliminar edição', 'Eliminar revisão', 'Apagar edição', 'Apagar revisão' ), - 'Unusedtemplates' => array( 'Predefinições sem uso', 'Predefinições não utilizadas' ), - 'Randomredirect' => array( 'Redirecionamento aleatório' ), - 'Mypage' => array( 'Minha página' ), - 'Mytalk' => array( 'Minha discussão' ), - 'Mycontributions' => array( 'Minhas contribuições', 'Minhas edições' ), - 'Listadmins' => array( 'Lista de administradores', 'Administradores', 'Admins', 'Lista de admins' ), - 'Listbots' => array( 'Lista de robôs', 'Bots', 'Lista de bots' ), - 'Popularpages' => array( 'Páginas populares', 'Artigos populares' ), + 'MIMEsearch' => array( 'Busca_MIME' ), + 'FileDuplicateSearch' => array( 'Busca_de_arquivos_duplicados', 'Busca_de_ficheiros_duplicados' ), + 'Unwatchedpages' => array( 'Páginas_não-vigiadas', 'Páginas_não_vigiadas', 'Artigos_não-vigiados', 'Artigos_não_vigiados' ), + 'Listredirects' => array( 'Lista_de_redirecionamentos', 'Redirecionamentos' ), + 'Revisiondelete' => array( 'Eliminar_edição', 'Eliminar_revisão', 'Apagar_edição', 'Apagar_revisão' ), + 'Unusedtemplates' => array( 'Predefinições_sem_uso', 'Predefinições_não_utilizadas' ), + 'Randomredirect' => array( 'Redirecionamento_aleatório' ), + 'Mypage' => array( 'Minha_página' ), + 'Mytalk' => array( 'Minha_discussão' ), + 'Mycontributions' => array( 'Minhas_contribuições', 'Minhas_edições' ), + 'Listadmins' => array( 'Lista_de_administradores', 'Administradores', 'Admins', 'Lista_de_admins' ), + 'Listbots' => array( 'Lista_de_robôs', 'Bots', 'Lista_de_bots' ), + 'Popularpages' => array( 'Páginas_populares', 'Artigos_populares' ), 'Search' => array( 'Busca', 'Buscar', 'Procurar', 'Pesquisar', 'Pesquisa' ), - 'Resetpass' => array( 'Zerar senha', 'Repor senha' ), - 'Withoutinterwiki' => array( 'Páginas sem interwikis', 'Artigos sem interwikis' ), - 'MergeHistory' => array( 'Fundir históricos', 'Fundir edições' ), - 'Filepath' => array( 'Diretório de arquivo', 'Diretório de ficheiro' ), - 'Invalidateemail' => array( 'Invalidar e-mail' ), - 'Blankpage' => array( 'Página em branco' ), - 'LinkSearch' => array( 'Pesquisar links' ), - 'DeletedContributions' => array( 'Contribuições eliminadas', 'Edições eliminadas' ), - 'Activeusers' => array( 'Usuários ativos' ), + 'Resetpass' => array( 'Trocar_senha', 'Repor_senha' ), + 'Withoutinterwiki' => array( 'Páginas_sem_interwikis', 'Artigos_sem_interwikis' ), + 'MergeHistory' => array( 'Fundir_históricos', 'Fundir_edições' ), + 'Filepath' => array( 'Diretório_de_arquivo', 'Diretório_de_ficheiro' ), + 'Invalidateemail' => array( 'Invalidar_e-mail' ), + 'Blankpage' => array( 'Página_em_branco' ), + 'LinkSearch' => array( 'Pesquisar_links' ), + 'DeletedContributions' => array( 'Contribuições_eliminadas', 'Edições_eliminadas' ), + 'Tags' => array( 'Etiquetas' ), + 'Activeusers' => array( 'Usuários_ativos' ), ); $magicWords = array( @@ -224,15 +228,18 @@ $magicWords = array( 'talkpagenamee' => array( '1', 'NOMEDAPAGINADEDISCUSSAOC', 'NOMEDAPÁGINADEDISCUSSÃOC', 'TALKPAGENAMEE' ), 'subjectpagename' => array( '1', 'NOMEDAPAGINADECONTEUDO', 'NOMEDAPÁGINADECONTEÚDO', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ), 'subjectpagenamee' => array( '1', 'NOMEDAPAGINADECONTEUDOC', 'NOMEDAPÁGINADECONTEÚDOC', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ), + 'img_thumbnail' => array( '1', 'miniaturadaimagem', 'miniatura', 'thumbnail', 'thumb' ), + 'img_manualthumb' => array( '1', 'miniaturadaimagem=$1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ), 'img_right' => array( '1', 'direita', 'right' ), 'img_left' => array( '1', 'esquerda', 'left' ), 'img_none' => array( '1', 'nenhum', 'none' ), 'img_center' => array( '1', 'centro', 'center', 'centre' ), - 'img_framed' => array( '1', 'comborda', 'framed', 'enframed', 'frame' ), - 'img_frameless' => array( '1', 'semborda', 'frameless' ), + 'img_framed' => array( '1', 'commoldura', 'comborda', 'framed', 'enframed', 'frame' ), + 'img_frameless' => array( '1', 'semmoldura', 'semborda', 'frameless' ), 'img_page' => array( '1', 'página=$1', 'página $1', 'page=$1', 'page $1' ), 'img_upright' => array( '1', 'superiordireito', 'superiordireito=$1', 'superiordireito $1', 'upright', 'upright=$1', 'upright $1' ), 'img_border' => array( '1', 'borda', 'border' ), + 'img_baseline' => array( '1', 'linhadebase', 'baseline' ), 'img_top' => array( '1', 'acima', 'top' ), 'img_middle' => array( '1', 'meio', 'middle' ), 'img_bottom' => array( '1', 'abaixo', 'bottom' ), @@ -280,6 +287,7 @@ $magicWords = array( 'numberingroup' => array( '1', 'NUMERONOGRUPO', 'NÚMERONOGRUPO', 'NUMBERINGROUP', 'NUMINGROUP' ), 'staticredirect' => array( '1', '__REDIRECIONAMENTOESTATICO__', '__REDIRECIONAMENTOESTÁTICO__', '__STATICREDIRECT__' ), 'protectionlevel' => array( '1', 'NIVELDEPROTECAO', 'NÍVELDEPROTEÇÃO', 'PROTECTIONLEVEL' ), + 'url_path' => array( '0', 'CAMINHO', 'PATH' ), ); $messages = array( @@ -298,8 +306,7 @@ $messages = array( 'tog-editsection' => 'Habilitar edição de seção via links [editar]', 'tog-editsectiononrightclick' => 'Habilitar edição de seção por clique com o botão direito no título da seção (JavaScript)', 'tog-showtoc' => 'Mostrar Tabela de Conteúdos (para páginas com mais de três cabeçalhos)', -'tog-rememberpassword' => 'Lembrar senha entre sessões', -'tog-editwidth' => 'Alargar a caixa de edição para preecher a tela inteira', +'tog-rememberpassword' => 'Recordar os meus dados neste navegador (por no máximo $1 {{PLURAL:$1|dia|dias}})', 'tog-watchcreations' => 'Adicionar páginas criadas por mim à minha lista de páginas vigiadas', 'tog-watchdefault' => 'Adicionar páginas editadas por mim à minha lista de páginas vigiadas', 'tog-watchmoves' => 'Adicionar páginas movidas por mim à minha lista de páginas vigiadas', @@ -446,31 +453,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Adicionar tópico', -'vector-action-delete' => 'Eliminar', -'vector-action-move' => 'Mover', -'vector-action-protect' => 'Proteger', -'vector-action-undelete' => 'Restaurar', -'vector-action-unprotect' => 'Desproteger', -'vector-namespace-category' => 'Categoria', -'vector-namespace-help' => 'Página de ajuda', -'vector-namespace-image' => 'Arquivo', -'vector-namespace-main' => 'Página', -'vector-namespace-media' => 'Página de mídia', -'vector-namespace-mediawiki' => 'Mensagem', -'vector-namespace-project' => 'Página de projeto', -'vector-namespace-special' => 'Página especial', -'vector-namespace-talk' => 'Discussão', -'vector-namespace-template' => 'Predefinição', -'vector-namespace-user' => 'Página de usuário', -'vector-view-create' => 'Criar', -'vector-view-edit' => 'Editar', -'vector-view-history' => 'Ver histórico', -'vector-view-view' => 'Ler', -'vector-view-viewsource' => 'Ver código-fonte', -'actions' => 'Ações', -'namespaces' => 'Espaços nominais', -'variants' => 'Variantes', +'vector-action-addsection' => 'Adicionar tópico', +'vector-action-delete' => 'Eliminar', +'vector-action-move' => 'Mover', +'vector-action-protect' => 'Proteger', +'vector-action-undelete' => 'Restaurar', +'vector-action-unprotect' => 'Desproteger', +'vector-simplesearch-preference' => 'Ativar sugestões de busca melhoradas (apenas no tema Vector)', +'vector-view-create' => 'Criar', +'vector-view-edit' => 'Editar', +'vector-view-history' => 'Ver histórico', +'vector-view-view' => 'Ler', +'vector-view-viewsource' => 'Ver código-fonte', +'actions' => 'Ações', +'namespaces' => 'Espaços nominais', +'variants' => 'Variantes', 'errorpagetitle' => 'Erro', 'returnto' => 'Retornar para $1.', @@ -531,6 +528,9 @@ Muitos usuários estão tentando ver esta página. Aguarde um instante antes de tentar acessar esta página novamente. $1', +'pool-timeout' => 'Tempo limite de espera para o bloqueio excedido', +'pool-queuefull' => 'A pool queue está cheia', +'pool-errorunknown' => 'Erro desconhecido', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Sobre {{SITENAME}}', @@ -696,7 +696,8 @@ Não se esqueça de personalizar as suas [[Special:Preferences|preferências na 'yourname' => 'Nome de usuário:', 'yourpassword' => 'Senha:', 'yourpasswordagain' => 'Redigite sua senha', -'remembermypassword' => 'Lembrar da minha senha em outras sessões.', +'remembermypassword' => 'Recordar os meus dados neste computador (por no máximo $1 {{PLURAL:$1|dia|dias}})', +'securelogin-stick-https' => 'Permanecer conectado ao HTTPS após a autenticação', 'yourdomainname' => 'Seu domínio:', 'externaldberror' => 'Ocorreu ou um erro no banco de dados durante a autenticação ou não lhe é permitido atualizar a sua conta externa.', 'login' => 'Autenticar-se', @@ -713,6 +714,7 @@ Não se esqueça de personalizar as suas [[Special:Preferences|preferências na 'gotaccount' => "Já possui uma conta? '''$1'''.", 'gotaccountlink' => 'Autenticar-se', 'createaccountmail' => 'por e-mail', +'createaccountreason' => 'Razão:', 'badretype' => 'As senhas que você digitou não são iguais.', 'userexists' => 'O nome de usuário que você digitou já existe. Escolha um nome diferente.', @@ -736,6 +738,7 @@ Verifique a ortografia, ou [[Special:UserLogin/signup|crie uma nova conta]].', 'wrongpasswordempty' => 'A senha introduzida está em branco. Por favor, tente novamente.', 'passwordtooshort' => 'As senhas devem ter no mínimo {{PLURAL:$1|1 caractere|$1 caracteres}}.', 'password-name-match' => 'A sua senha deve ser diferente do seu nome de usuário.', +'password-login-forbidden' => 'Foi proibido o uso deste nome de utilizador e palavra-chave.', 'mailmypassword' => 'Enviar uma nova senha por e-mail', 'passwordremindertitle' => 'Nova senha temporária em {{SITENAME}}', 'passwordremindertext' => 'Alguém (provavelmente você, a partir do endereço de IP $1) solicitou uma nova senha para {{SITENAME}} ($4). Foi criada uma senha temporária para o usuário "$2", sendo ela "$3". Se esta era sua intenção, você precisará se autenticar e escolher uma nova senha agora. @@ -771,6 +774,9 @@ Por favor aguarde antes de tentar novamente.', 'loginlanguagelabel' => 'Língua: $1', 'suspicious-userlogout' => 'Sua solicitação para sair foi negada porque aparentemente foi enviada por um navegador danificado ou por um servidor proxy com cache.', +# E-mail sending +'php-mail-error-unknown' => 'Erro desconhecido na função mail() do PHP', + # Password reset dialog 'resetpass' => 'Alterar senha', 'resetpass_announce' => 'Você foi autenticado através de uma senha temporária. Para prosseguir, será necessário definir uma nova senha.', @@ -822,9 +828,11 @@ Você pode já ter alterado com sucesso a sua senha, ou solicitado uma nova senh 'showlivepreview' => 'Pré-visualização em tempo real', 'showdiff' => 'Mostrar alterações', 'anoneditwarning' => "'''Atenção''': Você não se encontra autenticado. O seu endereço de IP será registrado no histórico de edições desta página.", +'anonpreviewwarning' => "''Você não está logado. Gravar registará o seu endereço IP no histórico de edições desta página.''", 'missingsummary' => "'''Lembrete:''' Você não introduziu um sumário de edição. Se clicar novamente em Salvar, a sua edição será salva sem um sumário.", 'missingcommenttext' => 'Por favor, introduzida um comentário abaixo.', -'missingcommentheader' => "'''Lembrete:''' Você não introduziu um assunto/título para este comentário. Se carregar novamente em Salvar a sua edição será salva sem um título/assunto.", +'missingcommentheader' => "'''Lembrete:''' Você não introduziu um assunto/título para este comentário. +Se você clicar novamente \"{{int:savearticle}}\", a sua edição será salva sem um assunto/título.", 'summary-preview' => 'Previsão de sumário:', 'subject-preview' => 'Previsão do assunto/título:', 'blockedtitle' => 'O usuário está bloqueado', @@ -901,7 +909,11 @@ O registro de bloqueio mais recente é fornecido abaixo, para referência:', 'usercsspreview' => "'''Lembre-se de que você está apenas previsualizando o seu CSS particular.''' '''Ele ainda não foi salvo!'''", 'userjspreview' => "'''Lembre-se que está apenas testando/prevendo o seu JavaScript particular e que ele ainda não foi salvo!'''", -'userinvalidcssjstitle' => "'''Aviso:''' Não existe um tema \"\$1\". Lembre-se que as páginas .css e .js utilizam um título em minúsculas, exemplo: {{ns:user}}:Alguém/monobook.css aposto a {{ns:user}}:Alguém/Monobook.css.", +'sitecsspreview' => "'''Lembre-se de que você está apenas previsualizando este CSS.''' +'''Ele ainda não foi salvo!'''", +'sitejspreview' => "''Lembre-se de que você está apenas previsualizando este código JavaScript.''' +'''Ele ainda não foi salvo!'''", +'userinvalidcssjstitle' => "'''Aviso:''' Não existe um tema \"\$1\". Lembre-se que as páginas .css e .js utilizam um título em minúsculas, exemplo: {{ns:user}}:Alguém/vector.css aposto a {{ns:user}}:Alguém/Vector.css.", 'updated' => '(Atualizado)', 'note' => "'''Nota:'''", 'previewnote' => "'''Isto é apenas uma previsão. @@ -940,8 +952,6 @@ Você está, ao mesmo tempo, garantindo-nos que isto é algo escrito por você m 'copyrightwarning2' => "Por favor, note que todas as suas contribuições em {{SITENAME}} podem ser editadas, alteradas ou removidas por outros contribuidores. Se você não deseja que o seu texto seja inexoravelmente editado, não o envie.
    Você está, ao mesmo tempo, a garantir-nos que isto é algo escrito por si, ou algo copiado de alguma fonte de textos em domínio público ou similarmente de teor livre (veja $1 para detalhes). '''NÃO ENVIE TRABALHO PROTEGIDO POR DIREITOS DE AUTOR SEM A DEVIDA PERMISSÃO!'''", -'longpagewarning' => "'''CUIDADO: Esta página tem $1 kilobytes; alguns browsers podem ter problemas ao editar páginas maiores que 32 kb. -Por gentileza, considere quebrar a página em sessões menores.'''", 'longpageerror' => "'''ERRO: O texto de página que você submeteu tem mais de $1 quilobytes em tamanho, que é maior que o máximo de $2 quilobytes. A página não pode ser salva.'''", 'readonlywarning' => "'''Aviso: A base de dados foi bloqueada para manutenção, por isso você não poderá salvar a sua edição neste momento.''' Pode, no entanto, copiar o seu texto num editor externo e guardá-lo para posterior envio. @@ -1118,6 +1128,8 @@ $1", 'logdelete-failure' => "'''A visibilidade do registro não pôde ser estabelecida:''' $1", 'revdel-restore' => 'Alterar visibilidade', +'revdel-restore-deleted' => 'revisões eliminadas', +'revdel-restore-visible' => 'revisões visíveis', 'pagehist' => 'Histórico da página', 'deletedhist' => 'Histórico de eliminações', 'revdelete-content' => 'conteúdo', @@ -1186,11 +1198,13 @@ Certifique-se de que tal alteração manterá a continuidade das ações.', # Diffs 'history-title' => 'Histórico de edições de "$1"', 'difference' => '(Diferença entre revisões)', +'difference-multipage' => '(Diferenças entre páginas)', 'lineno' => 'Linha $1:', 'compareselectedversions' => 'Compare as versões selecionadas', 'showhideselectedversions' => 'Mostrar/esconder versões selecionadas', 'editundo' => 'desfazer', -'diff-multi' => '({{PLURAL:$1|uma edição intermediária não está sendo exibida|$1 edições intermediárias não estão sendo exibidas}}.)', +'diff-multi' => '({{PLURAL:$1|Uma edição intermediária|$1 edições intermediárias}} de {{PLURAL:$2|um usuário|$2 usuários}} {{PLURAL:$1|não apresentada|não apresentadas}})', +'diff-multi-manyusers' => '({{PLURAL:$1|Uma edição intermediária|$1 edições intermediárias}} de mais de {{PLURAL:$2|um usuário|$2 usuário}} não {{PLURAL:$1|apresentada|apresentadas}})', # Search results 'searchresults' => 'Resultados de pesquisa', @@ -1225,6 +1239,7 @@ Certifique-se de que tal alteração manterá a continuidade das ações.', 'searchprofile-everything-tooltip' => 'Pesquisar em todo o conteúdo (incluindo páginas de discussão)', 'searchprofile-advanced-tooltip' => 'Pesquisar nos espaços nominais personalizados', 'search-result-size' => '$1 ({{PLURAL:$2|1 palavra|$2 palavras}})', +'search-result-category-size' => '{{PLURAL:$1|1 membro|$1 membros}} ({{PLURAL:$2|1 subcategoria|$2 subcategorias}}, {{PLURAL:$3|1 arquivo|$3 arquivos}})', 'search-result-score' => 'Relevância: $1%', 'search-redirect' => '(redirecionamento de $1)', 'search-section' => '(seção $1)', @@ -1301,6 +1316,7 @@ Note que os índices do sistema de busca externo poderão conter referências de 'contextlines' => 'Linhas por resultado:', 'contextchars' => 'Contexto por linha:', 'stub-threshold' => 'Links para páginas de conteúdo aparecerão desta forma se elas possuírem menos de (bytes):', +'stub-threshold-disabled' => 'Desabilitado', 'recentchangesdays' => 'Dias a serem exibidos nas Mudanças recentes:', 'recentchangesdays-max' => '(máximo: $1 {{PLURAL:$1|dia|dias}})', 'recentchangescount' => 'Número de edições a serem exibidas por padrão:', @@ -1334,6 +1350,7 @@ Eis um valor gerado aleatoriamente que você pode usar: $1", 'prefs-files' => 'Arquivos', 'prefs-custom-css' => 'CSS personalizada', 'prefs-custom-js' => 'JS personalizado', +'prefs-common-css-js' => 'CSS/JS partilhado por todos os temas:', 'prefs-reset-intro' => 'Você pode usar esta página para restaurar as suas preferências para os valores predefinidos do sítio. Esta ação não pode ser desfeita.', 'prefs-emailconfirm-label' => 'Confirmação do e-mail:', @@ -1371,9 +1388,15 @@ Caso decida fornecê-lo, este será utilizado para dar-lhe crédito pelo seu tra 'prefs-advancedrendering' => 'Opções avançadas', 'prefs-advancedsearchoptions' => 'Opções avançadas', 'prefs-advancedwatchlist' => 'Opções avançadas', -'prefs-display' => 'Opções de exibição', +'prefs-displayrc' => 'Opções de exibição', +'prefs-displaysearchoptions' => 'Opções de exibição', +'prefs-displaywatchlist' => 'Opções de exibição', 'prefs-diffs' => 'Diferenças', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Parece válido', +'email-address-validity-invalid' => 'Forneça um endereço de e-mail válido', + # User rights 'userrights' => 'Gestão de privilégios de usuários', 'userrights-lookup-user' => 'Administrar grupos de usuários', @@ -1457,6 +1480,7 @@ Caso decida fornecê-lo, este será utilizado para dar-lhe crédito pelo seu tra 'right-hideuser' => 'Bloquear um nome de usuário, escondendo-o do público', 'right-ipblock-exempt' => 'Contornar bloqueios de IP, automáticos e de intervalo', 'right-proxyunbannable' => 'Contornar bloqueios automáticos de proxies', +'right-unblockself' => 'Desbloquearem-se a si próprios', 'right-protect' => 'Mudar níveis de proteção e editar páginas protegidas', 'right-editprotected' => 'Editar páginas protegidas (sem proteção em cascata)', 'right-editinterface' => 'Editar a interface de usuário', @@ -1479,7 +1503,6 @@ Caso decida fornecê-lo, este será utilizado para dar-lhe crédito pelo seu tra 'right-siteadmin' => 'Bloquear e desbloquear o banco de dados', 'right-reset-passwords' => 'Redefinir a senha de outros usuários', 'right-override-export-depth' => 'Exportar páginas incluindo páginas ligadas até uma profundidade de 5', -'right-versiondetail' => "Mostrar informação ampliada sobre a versão do ''software''.", 'right-sendemail' => 'Enviar email a outros usuários', # User rights log @@ -1530,14 +1553,9 @@ Caso decida fornecê-lo, este será utilizado para dar-lhe crédito pelo seu tra 'recentchanges-legend' => 'Opções das mudanças recentes', 'recentchangestext' => 'Veja as mais novas mudanças na {{SITENAME}} nesta página.', 'recentchanges-feed-description' => 'Acompanhe as Mudanças recentes deste wiki por este feed.', -'recentchanges-label-legend' => 'Legenda: $1.', -'recentchanges-legend-newpage' => '$1 - nova página', 'recentchanges-label-newpage' => 'Esta edição criou uma nova página', -'recentchanges-legend-minor' => '$1 - edição menor', 'recentchanges-label-minor' => 'Esta é uma edição menor', -'recentchanges-legend-bot' => '$1 - edição de robô', 'recentchanges-label-bot' => 'Esta edição foi feita por um robô', -'recentchanges-legend-unpatrolled' => '$1 - edição não patrulhada', 'recentchanges-label-unpatrolled' => 'Esta edição ainda não foi patrulhada', 'rcnote' => "A seguir {{PLURAL:$1|está listada '''uma''' alteração ocorrida|estão listadas '''$1''' alterações ocorridas}} {{PLURAL:$2|no último dia|nos últimos '''$2''' dias}}, a partir das $5 de $4.", 'rcnotefrom' => 'Abaixo estão as mudanças desde $2 (mostradas até $1).', @@ -1584,6 +1602,9 @@ Páginas que estejam em [[Special:Watchlist|sua lista de páginas vigiadas]] sã 'upload_directory_missing' => 'O diretório de upload ($1) não existe e não pôde ser criado pelo servidor.', 'upload_directory_read_only' => 'O diretório de download de arquivos ($1) não tem permissões de escrita para o servidor Web.', 'uploaderror' => 'Erro ao fazer upload', +'upload-recreate-warning' => "'''Aviso: Um arquivo com este nome foi eliminado ou movido.''' + +Para sua conveniência, é apresentado a seguir o registro de eliminação e de movimento da página:", 'uploadtext' => "Utilize o formulário abaixo para carregar novos arquivos. Para ver ou pesquisar imagens anteriormente carregadas consulte a [[Special:FileList|lista de arquivos carregados]]. (Re)Envios são também registrados no [[Special:Log/upload|registro de carregamento]], e as eliminações no [[Special:Log/delete|registro de eliminação]] @@ -1618,6 +1639,17 @@ A [[Special:NewFiles|galeria de arquivos novos]] oferece uma listagem mais visua 'filetype-banned-type' => "'''\".\$1\"''' é um tipo proibido de arquivo. {{PLURAL:\$3|O tipo permitido é|Os tipos permitidos são}} \$2.", 'filetype-missing' => 'O arquivo não possui uma extensão (como, por exemplo, ".jpg").', +'empty-file' => 'O arquivo que você enviou estava vazio.', +'file-too-large' => 'O arquivo que você enviou era demasiado grande.', +'filename-tooshort' => 'O nome do arquivo é curto demais.', +'filetype-banned' => 'Este tipo do arquivo é proibido.', +'verification-error' => 'Este arquivo não passou pela verificação de arquivos.', +'hookaborted' => 'A modificação que você tentou realizar foi abortada pelo hook de uma extensão.', +'illegal-filename' => 'Nome de arquivo não permitido.', +'overwrite' => 'Não é permitido sobrescrever um arquivo já existente.', +'unknown-error' => 'Ocorreu um erro desconhecido.', +'tmp-create-error' => 'Não foi possível criar o arquivo temporário.', +'tmp-write-error' => 'Erro ao alterar arquivo temporário.', 'large-file' => 'É recomendável que os arquivos não sejam maiores que $1; este possui $2.', 'largefileserver' => 'O tamanho deste arquivo é superior ao qual o servidor encontra-se configurado para permitir.', 'emptyfile' => 'O arquivo que está tentando carregar parece encontrar-se vazio. Isto poderá ser devido a um erro na escrita do nome do arquivo. Por favor verifique se realmente deseja carregar este arquivo.', @@ -1643,13 +1675,14 @@ Se ainda pretende carregar o seu arquivo, por favor, volte e use um novo nome. [ Se você ainda quer carregar o seu arquivo, por favor volte e use um novo nome. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Esta imagem é uma duplicata do seguinte {{PLURAL:$1|arquivo|arquivos}}:', 'file-deleted-duplicate' => 'Um arquivo idêntico a este ([[:$1]]) foi eliminado anteriormente. Verifique o motivo da eliminação de tal arquivo antes de prosseguir com o re-envio.', -'successfulupload' => 'Envio efetuado com sucesso', 'uploadwarning' => 'Aviso', 'uploadwarning-text' => 'Por favor modifique a descrição do arquivo abaixo e tente novamente', 'savefile' => 'Salvar arquivo', 'uploadedimage' => 'enviou "[[$1]]"', 'overwroteimage' => 'foi enviada uma nova versão de "[[$1]]"', 'uploaddisabled' => 'Envio de arquivos desativado.', +'copyuploaddisabled' => 'O upload por URL encontra-se desativado.', +'uploadfromurl-queued' => 'O seu upload foi adicionado à fila.', 'uploaddisabledtext' => 'O envio de arquivos encontra-se desativado.', 'php-uploaddisabledtext' => 'O carregamento de arquivos via PHP está desativado. Por favor, verifique a configuração file_uploads.', 'uploadscripted' => 'Este arquivo contém HTML ou código que pode ser erradamente interpretado por um navegador web.', @@ -1682,6 +1715,14 @@ JD # Jenoptik MGP # Pentax PICT # misc. # ', +'upload-success-subj' => 'Envio efetuado com sucesso', +'upload-success-msg' => 'O seu upload desde [$2] foi bem sucedido. Ele está disponível aqui: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problema no upload', +'upload-failure-msg' => 'Ocorreu um problema com o seu upload de [$2]: + +$1', +'upload-warning-subj' => 'Aviso de upload', +'upload-warning-msg' => 'Houve um problema com o seu formulário de carregamento [$2]. Pode voltar ao [[Special:Upload/stash/$1|formulário]] para corrigir este problema.', 'upload-proto-error' => 'Protocolo incorreto', 'upload-proto-error-text' => 'O envio de arquivos remotos requer endereços (URLs) que iniciem com http:// ou ftp://.', @@ -1743,6 +1784,7 @@ Um clique sobre um cabeçalho de coluna altera a ordenação.', 'listfiles_search_for' => 'Pesquisar por nome de imagem:', 'imgfile' => 'arquivo', 'listfiles' => 'Lista de arquivo', +'listfiles_thumb' => 'Miniatura', 'listfiles_date' => 'Data', 'listfiles_name' => 'Nome', 'listfiles_user' => 'Usuário', @@ -1855,8 +1897,8 @@ A descrição na sua [$2 página de descrição de arquivo] é exibida abaixo.', 'statistics-edits' => 'Edições de página desde que {{SITENAME}} foi instalado', 'statistics-edits-average' => 'Média de edições por página', 'statistics-views-total' => 'Total de visualizações', +'statistics-views-total-desc' => 'Visualizações de páginas não existentes e páginas especiais não estão incluídas', 'statistics-views-peredit' => 'Visualizações por edição', -'statistics-jobqueue' => 'Tamanho da [http://www.mediawiki.org/wiki/Manual:Job_queue fila de tarefas]', 'statistics-users' => '[[Special:ListUsers|Usuários]] registrados', 'statistics-users-active' => 'Usuários ativos', 'statistics-users-active-desc' => 'Usuários que efetuaram uma ação {{PLURAL:$1|no último dia|nos últimos $1 dias}}', @@ -1870,7 +1912,7 @@ Uma página é considerada como de desambiguação se utilizar uma predefiniçã 'doubleredirects' => 'Redirecionamentos duplos', 'doubleredirectstext' => 'Esta página lista as páginas que redirecionam para outros redirecionamentos. Cada linha contém ligações para o primeiro e o segundo redirecionamentos, juntamente com o alvo do segundo redirecionamento, que é geralmente a verdadeira página de destino, para a qual o primeiro redirecionamento deveria apontar. -Entradas riscadas foram resolvidas.', +Entradas riscadas foram resolvidas.', 'double-redirect-fixed-move' => '[[$1]] foi movido e agora é um redirecionamento para [[$2]]', 'double-redirect-fixer' => 'Corretor de redirecionamentos', @@ -1893,6 +1935,8 @@ Entradas riscadas foram resolvidas.', 'nmembers' => '$1 {{PLURAL:$1|membro|membros}}', 'nrevisions' => '$1 {{PLURAL:$1|revisão|revisões}}', 'nviews' => '$1 {{PLURAL:$1|visita|visitas}}', +'nimagelinks' => 'Utilizada em $1 {{PLURAL:$1|página|páginas}}', +'ntransclusions' => 'usada {{PLURAL:$1|numa página|em $1 páginas}}', 'specialpage-empty' => 'Atualmente não há dados a serem exibidos nesta página.', 'lonelypages' => 'Páginas órfãs', 'lonelypagestext' => 'As seguintes páginas não recebem ligações nem são incluídas em outras páginas do {{SITENAME}}.', @@ -2049,34 +2093,40 @@ Pode haver [[{{MediaWiki:Listgrouprights-helppage}}|informações adicionais]] s 'listgrouprights-removegroup-self-all' => 'Pode remover todos os grupos da própria conta', # E-mail user -'mailnologin' => 'Nenhum endereço de envio', -'mailnologintext' => 'Necessita de estar [[Special:UserLogin|autenticado]] e de possuir um endereço de e-mail válido nas suas [[Special:Preferences|preferências]] para poder enviar um e-mail a outros usuários.', -'emailuser' => 'Contatar este usuário', -'emailpage' => 'Contactar usuário', -'emailpagetext' => 'Você pode usar o formulário abaixo para enviar uma mensagem por correio eletrônico para este usuário. +'mailnologin' => 'Nenhum endereço de envio', +'mailnologintext' => 'Necessita de estar [[Special:UserLogin|autenticado]] e de possuir um endereço de e-mail válido nas suas [[Special:Preferences|preferências]] para poder enviar um e-mail a outros usuários.', +'emailuser' => 'Contatar este usuário', +'emailpage' => 'Contactar usuário', +'emailpagetext' => 'Você pode usar o formulário abaixo para enviar uma mensagem por correio eletrônico para este usuário. O endereço eletrônico que você inseriu em [[Special:Preferences|suas preferências de usuário]] irá aparecer como o endereço do remetente da mensagem, então o destinatário poderá responder diretamente para você.', -'usermailererror' => 'Erro no email:', -'defemailsubject' => 'E-mail: {{SITENAME}}', -'noemailtitle' => 'Sem endereço de e-mail', -'noemailtext' => 'Este usuário não especificou um endereço de e-mail válido.', -'nowikiemailtitle' => 'E-mail não permitido', -'nowikiemailtext' => 'Este usuário optou por não receber e-mail de outros usuários.', -'email-legend' => 'Enviar uma mensagem eletrônica para outro usuário da {{SITENAME}}', -'emailfrom' => 'De:', -'emailto' => 'Para:', -'emailsubject' => 'Assunto:', -'emailmessage' => 'Mensagem:', -'emailsend' => 'Enviar', -'emailccme' => 'Enviar ao meu e-mail uma cópia de minha mensagem.', -'emailccsubject' => 'Cópia de sua mensagem para $1: $2', -'emailsent' => 'E-mail enviado', -'emailsenttext' => 'Sua mensagem foi enviada.', -'emailuserfooter' => 'Este e-mail foi enviado por $1 para $2 através da opção de "contactar usuário" da {{SITENAME}}.', +'usermailererror' => 'Erro no email:', +'defemailsubject' => 'E-mail: {{SITENAME}}', +'usermaildisabled' => 'O e-mail do usuário foi desativado', +'usermaildisabledtext' => 'Você não tem como enviar e-mails a outros usuários deste wiki.', +'noemailtitle' => 'Sem endereço de e-mail', +'noemailtext' => 'Este usuário não especificou um endereço de e-mail válido.', +'nowikiemailtitle' => 'E-mail não permitido', +'nowikiemailtext' => 'Este usuário optou por não receber e-mail de outros usuários.', +'email-legend' => 'Enviar uma mensagem eletrônica para outro usuário da {{SITENAME}}', +'emailfrom' => 'De:', +'emailto' => 'Para:', +'emailsubject' => 'Assunto:', +'emailmessage' => 'Mensagem:', +'emailsend' => 'Enviar', +'emailccme' => 'Enviar ao meu e-mail uma cópia de minha mensagem.', +'emailccsubject' => 'Cópia de sua mensagem para $1: $2', +'emailsent' => 'E-mail enviado', +'emailsenttext' => 'Sua mensagem foi enviada.', +'emailuserfooter' => 'Este e-mail foi enviado por $1 para $2 através da opção de "contactar usuário" da {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Deixar mensagem de sistema.', +'usermessage-editor' => 'Mensagens de sistema', # Watchlist 'watchlist' => 'Páginas vigiadas', 'mywatchlist' => 'Páginas vigiadas', -'watchlistfor' => "(para '''$1''')", +'watchlistfor2' => 'Para $1 $2', 'nowatchlist' => 'A sua lista de páginas vigiadas não possui títulos.', 'watchlistanontext' => 'Por favor $1 para ver ou editar os itens na sua lista de páginas vigiadas.', 'watchnologin' => 'Não está autenticado', @@ -2196,7 +2246,10 @@ A última edição da página foi feita por [[User:$3|$3]] ([[User talk:$3|discu 'revertpage' => 'Foram revertidas as edições de [[Special:Contributions/$2|$2]] ([[User talk:$2|disc]]) para a última versão por [[User:$1|$1]]', 'revertpage-nouser' => 'Revertidas as edições de (nome de usuário removido) para a última revisão por [[User:$1|$1]]', 'rollback-success' => 'Foram revertidas as edições de $1, com o conteúdo passando a estar como na última edição de $2.', -'sessionfailure' => 'Foram detetados problemas com a sua sessão; + +# Edit tokens +'sessionfailure-title' => 'Erro de sessão', +'sessionfailure' => 'Foram detetados problemas com a sua sessão; Esta ação foi cancelada como medida de proteção contra a intercepção de sessões. Experimente usar o botão "Voltar" e atualizar a página de onde veio e tente novamente.', @@ -2326,18 +2379,22 @@ $1', 'month' => 'Mês (inclusive anteriores):', 'year' => 'Ano (inclusive anteriores):', -'sp-contributions-newbies' => 'Mostrar só as contribuições das contas recentes', -'sp-contributions-newbies-sub' => 'Para contas novas', -'sp-contributions-newbies-title' => 'Contribuições de contas novas', -'sp-contributions-blocklog' => 'Registro de bloqueios', -'sp-contributions-deleted' => 'contribuições eliminadas', -'sp-contributions-logs' => 'registros', -'sp-contributions-talk' => 'disc', -'sp-contributions-userrights' => 'gerenciamento de privilégios de usuários', -'sp-contributions-blocked-notice' => 'Este usuário atualmente está bloqueado. O registro de bloqueio mais recente é fornecido abaixo para referência:', -'sp-contributions-search' => 'Pesquisar contribuições', -'sp-contributions-username' => 'Endereço de IP ou usuário:', -'sp-contributions-submit' => 'Pesquisar', +'sp-contributions-newbies' => 'Mostrar só as contribuições das contas recentes', +'sp-contributions-newbies-sub' => 'Para contas novas', +'sp-contributions-newbies-title' => 'Contribuições de contas novas', +'sp-contributions-blocklog' => 'Registro de bloqueios', +'sp-contributions-deleted' => 'contribuições eliminadas', +'sp-contributions-uploads' => 'carregamentos', +'sp-contributions-logs' => 'registros', +'sp-contributions-talk' => 'disc', +'sp-contributions-userrights' => 'gerenciamento de privilégios de usuários', +'sp-contributions-blocked-notice' => 'Este usuário atualmente está bloqueado. O registro de bloqueio mais recente é fornecido abaixo para referência:', +'sp-contributions-blocked-notice-anon' => 'Este endereço IP encontra-se bloqueado. +Segue, para referência, a entrada mais recente no registro de bloqueios:', +'sp-contributions-search' => 'Pesquisar contribuições', +'sp-contributions-username' => 'Endereço de IP ou usuário:', +'sp-contributions-toponly' => 'Mostrar somente as revisões mais recentes', +'sp-contributions-submit' => 'Pesquisar', # What links here 'whatlinkshere' => 'Páginas afluentes', @@ -2397,7 +2454,6 @@ Consulte a [[Special:IPBlockList|lista de IPs bloqueados]] para rever os bloquei 'ipb-edit-dropdown' => 'Editar motivos de bloqueio', 'ipb-unblock-addr' => 'Desbloquear $1', 'ipb-unblock' => 'Desbloquear um usuário ou endereço de IP', -'ipb-blocklist-addr' => 'Bloqueios existentes para $1', 'ipb-blocklist' => 'Ver bloqueios em vigência', 'ipb-blocklist-contribs' => 'Contribuições de $1', 'unblockip' => 'Desbloquear usuário', @@ -2468,6 +2524,8 @@ $1 já se encontra bloqueado. Deseja alterar as configurações?', 'sorbs_create_account_reason' => 'O seu endereço de IP encontra-se listado como proxy aberto na DNSBL utilizada por {{SITENAME}}. Você não pode criar uma conta', 'cant-block-while-blocked' => 'Você não pode bloquear outros usuários enquanto estiver bloqueado.', 'cant-see-hidden-user' => 'O usuário que você está tentando bloquear já está bloqueado ou oculto. Como você não possui privilégio de ocultar usuários, você não pode ver ou editar o bloqueio desse usuário.', +'ipbblocked' => 'Não é possível que você bloqueie ou desbloqueie outros usuários, já que você se encontra bloqueado', +'ipbnounblockself' => 'Não é permitido que você se desbloqueie', # Developer tools 'lockdb' => 'Trancar banco de dados', @@ -2500,6 +2558,17 @@ Note que a página '''não''' será movida se já existir uma página com o novo CUIDADO! Isto pode ser uma mudança drástica e inesperada para uma página popular; por favor, tenha certeza de que compreende as consequências da mudança antes de prosseguir.", +'movepagetext-noredirectfixer' => "Usando o formulário abaixo, você irá alterar o nome de uma página e moverá todo o histórico desta para o nome novo. +A página antiga será transformada numa página de redirecionamento para a nova. +Verifique a existência de [[Special:DoubleRedirects|redirecionamentos duplos]] ou [[Special:BrokenRedirects|quebrados]]. +É sua responsabilidade certificar-se de que os links continuam a apontar para onde eles deveriam apontar. + +Note que a página '''não''' será movida se já existir uma página com o nome novo, a menos que esta página esteja vazia ou seja uma página de redirecionamento e não tenha um histórico de edições. +Isto significa que, se você cometer um engano, poderá alterar o nome da página movida de volta para o seu nome original; e que não pode sobrescrever o conteúdo de uma página existente. + +'''Aviso!''' +Para páginas populares, esta operação pode representar uma mudança drástica e inesperada; +certifique-se de que compreende as consequências da operação antes de continuar.", 'movepagetalktext' => "A página de \"discussão\" associada, se existir, será automaticamente movida, '''a não ser que:''' *Uma página de discussão com conteúdo já exista sob o novo título, ou *Você não marque a caixa abaixo. @@ -2554,6 +2623,7 @@ A página de destino ("[[:$1]]") já existe. Deseja eliminá-la de modo a poder 'immobile-source-page' => 'Esta página não pode ser movida.', 'immobile-target-page' => 'Não é possível mover para esse título de destino.', 'imagenocrossnamespace' => 'Não é possível mover imagem para espaço nominal que não de imagens', +'nonfile-cannot-move-to-file' => 'Não é possível mover não arquivos para espaço nominal de arquivos', 'imagetypemismatch' => 'A extensão do novo arquivo não corresponde ao seu tipo', 'imageinvalidfilename' => 'O nome do arquivo alvo é inválido', 'fix-double-redirects' => 'Atualizar todos os redirecionamentos que apontem para o título original', @@ -2633,6 +2703,7 @@ Salve o arquivo no seu computador e importe-o aqui.', 'importstart' => 'Importando páginas...', 'import-revision-count' => '{{PLURAL:$1|uma edição|$1 edições}}', 'importnopages' => 'Não existem páginas a importar.', +'imported-log-entries' => '{{PLURAL:$1|Importado|Importados}} $1 {{PLURAL:$1|entradas de log|entradas de log}}.', 'importfailed' => 'A importação falhou: $1', 'importunknownsource' => 'Tipo de fonte de importação desconhecida', 'importcantopen' => 'Não foi possível abrir o arquivo de importação', @@ -2725,6 +2796,8 @@ Salve o arquivo no seu computador e importe-o aqui.', 'tooltip-upload' => 'Iniciar o carregamento', 'tooltip-rollback' => '"{{int:rollbacklink}}" reverte, com um só clique, as edições do último editor desta página.', 'tooltip-undo' => '"{{int:editundo}}" reverte esta edição exibindo a caixa de edição no modo de previsão, permitindo alterações adicionais e o uso do sumário de edição para justificativas.', +'tooltip-preferences-save' => 'Salvar preferências', +'tooltip-summary' => 'Forneça um breve sumário', # Stylesheets 'common.css' => '/** o código CSS colocado aqui será aplicado a todos os temas */', @@ -2846,14 +2919,17 @@ Executá-lo poderá comprometer a segurança do seu sistema.", 'imagemaxsize' => "Limite de tamanho de imagem:
    ''(para páginas de descrição de arquivos)''", 'thumbsize' => 'Tamanho de miniaturas:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|página|páginas}}', -'file-info' => '(tamanho: $1, tipo MIME: $2)', -'file-info-size' => '($1 × $2 pixels, tamanho: $3, tipo MIME: $4)', +'file-info' => 'tamanho: $1, tipo MIME: $2', +'file-info-size' => '$1 × $2 pixels, tamanho: $3, tipo MIME: $4', 'file-nohires' => 'Sem resolução maior disponível.', -'svg-long-desc' => '(arquivo SVG, de $1 × $2 pixels, tamanho: $3)', +'svg-long-desc' => 'arquivo SVG, de $1 × $2 pixels, tamanho: $3', 'show-big-image' => 'Resolução completa', 'show-big-image-thumb' => 'Tamanho desta previsão: $1 × $2 pixels', 'file-info-gif-looped' => 'cíclico', 'file-info-gif-frames' => '$1 {{PLURAL:$1|quadro|quadros}}', +'file-info-png-looped' => 'cíclico', +'file-info-png-repeat' => 'tocado $1 {{PLURAL:$1|vez|vezes}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|quadro|quadros}}', # Special:NewFiles 'newimages' => 'Galeria de novos arquivos', @@ -3008,6 +3084,7 @@ Caso o arquivo tenha sido modificado a partir do seu estado original, alguns det 'exif-gpsareainformation' => 'Nome da área do GPS', 'exif-gpsdatestamp' => 'Data do GPS', 'exif-gpsdifferential' => 'Correção do diferencial do GPS', +'exif-objectname' => 'Título curto', # EXIF attributes 'exif-compression-1' => 'Sem compressão', @@ -3089,6 +3166,8 @@ Caso o arquivo tenha sido modificado a partir do seu estado original, alguns det 'exif-sensingmethod-7' => 'Sensor trilinear', 'exif-sensingmethod-8' => 'Sensor linear sequencial de cores', +'exif-filesource-3' => 'Câmara fotográfica digital', + 'exif-scenetype-1' => 'Imagem fotografada diretamente', 'exif-customrendered-0' => 'Processo normal', @@ -3165,25 +3244,25 @@ Caso o arquivo tenha sido modificado a partir do seu estado original, alguns det 'limitall' => 'todas', # E-mail address confirmation -'confirmemail' => 'Confirmar endereço de E-mail', -'confirmemail_noemail' => 'Não possui um endereço de e-mail válido indicado nas suas [[Special:Preferences|preferências de usuário]].', -'confirmemail_text' => 'Esta wiki requer que valide o seu endereço de e-mail antes de utilizar as funcionalidades que requerem um endereço de e-mail. Ative o botão abaixo para enviar uma confirmação para o seu endereço de e-mail. A mensagem incluíra um endereço que contém um código; carregue o endereço no seu navegador para confirmar que o seu endereço de e-mail encontra-se válido.', -'confirmemail_pending' => 'Um código de confirmação já foi enviado para você; caso tenha criado sua conta recentemente, é recomendável aguardar alguns minutos para o receber antes de tentar pedir um novo código.', -'confirmemail_send' => 'Enviar código de confirmação', -'confirmemail_sent' => 'E-mail de confirmação enviado.', -'confirmemail_oncreate' => 'Foi enviado um código de confirmação para o seu endereço de e-mail. +'confirmemail' => 'Confirmar endereço de E-mail', +'confirmemail_noemail' => 'Não possui um endereço de e-mail válido indicado nas suas [[Special:Preferences|preferências de usuário]].', +'confirmemail_text' => 'Esta wiki requer que valide o seu endereço de e-mail antes de utilizar as funcionalidades que requerem um endereço de e-mail. Ative o botão abaixo para enviar uma confirmação para o seu endereço de e-mail. A mensagem incluíra um endereço que contém um código; carregue o endereço no seu navegador para confirmar que o seu endereço de e-mail encontra-se válido.', +'confirmemail_pending' => 'Um código de confirmação já foi enviado para você; caso tenha criado sua conta recentemente, é recomendável aguardar alguns minutos para o receber antes de tentar pedir um novo código.', +'confirmemail_send' => 'Enviar código de confirmação', +'confirmemail_sent' => 'E-mail de confirmação enviado.', +'confirmemail_oncreate' => 'Foi enviado um código de confirmação para o seu endereço de e-mail. Tal código não é exigido para que possa se autenticar no sistema, mas será necessário que você o forneça antes de habilitar qualquer ferramenta baseada no uso de e-mail deste wiki.', -'confirmemail_sendfailed' => 'O {{SITENAME}} não pôde enviar o email de confirmação. +'confirmemail_sendfailed' => 'O {{SITENAME}} não pôde enviar o email de confirmação. Verifique se o seu endereço de e-mail possui caracteres inválidos. O mailer retornou: $1', -'confirmemail_invalid' => 'Código de confirmação inválido. O código poderá ter expirado.', -'confirmemail_needlogin' => 'Precisa de $1 para confirmar o seu endereço de e-mail.', -'confirmemail_success' => 'O seu endereço de e-mail foi confirmado. Pode agora se ligar.', -'confirmemail_loggedin' => 'O seu endereço de e-mail foi agora confirmado.', -'confirmemail_error' => 'Alguma coisa correu mal ao guardar a sua confirmação.', -'confirmemail_subject' => '{{SITENAME}} confirmação de endereço de e-mail', -'confirmemail_body' => 'Alguém, provavelmente você, com o endereço de IP $1, +'confirmemail_invalid' => 'Código de confirmação inválido. O código poderá ter expirado.', +'confirmemail_needlogin' => 'Precisa de $1 para confirmar o seu endereço de e-mail.', +'confirmemail_success' => 'O seu endereço de e-mail foi confirmado. Pode agora se ligar.', +'confirmemail_loggedin' => 'O seu endereço de e-mail foi agora confirmado.', +'confirmemail_error' => 'Alguma coisa correu mal ao guardar a sua confirmação.', +'confirmemail_subject' => '{{SITENAME}} confirmação de endereço de e-mail', +'confirmemail_body' => 'Alguém, provavelmente você, com o endereço de IP $1, registrou uma conta "$2" com este endereço de e-mail em {{SITENAME}}. Para confirmar que esta conta realmente é sua, e para ativar @@ -3198,8 +3277,38 @@ para cancelar a confirmação do endereço de e-mail: $5 Este código de confirmação irá expirar em $4.', -'confirmemail_invalidated' => 'Confirmação de endereço de e-mail cancelada', -'invalidateemail' => 'Cancelar confirmação de e-mail', +'confirmemail_body_changed' => 'Alguém, provavelmente você com o endereço de IP $1, +alterou o endereço de e-mail da conta "$2" para este em {{SITENAME}}. + +Para confirmar que esta conta é realmente sua e reativar +as funcionalidades de e-mail em {{SITENAME}}, +abra o seguinte link no seu navegador: + +$3 + +Caso a conta *não* lhe pertença, siga o seguinte link +para cancelar a confirmação do endereço de e-mail: + +$5 + +Este código de confirmação irá expirar em $4.', +'confirmemail_body_set' => 'Alguém, provavelmente você com o endereço IP $1, +definiu o endereço de correio eletrónico da conta "$2" para este na {{SITENAME}}. + +Para confirmar que esta conta é realmente sua e reativar +as funcionalidades de correio electrónico na {{SITENAME}}, +abra o seguinte link no seu browser: + +$3 + +Caso a conta *não* lhe pertença, siga o seguinte link +para cancelar a confirmação do endereço de correio electrónico: + +$5 + +Este código de confirmação irá expirar em $4.', +'confirmemail_invalidated' => 'Confirmação de endereço de e-mail cancelada', +'invalidateemail' => 'Cancelar confirmação de e-mail', # Scary transclusion 'scarytranscludedisabled' => '[A transclusão de páginas de outros wikis encontra-se desabilitada]', @@ -3239,6 +3348,7 @@ Por favor, confirme que realmente deseja recriar esta página.", 'table_pager_first' => 'Primeira página', 'table_pager_last' => 'Última página', 'table_pager_limit' => 'Mostrar $1 items por página', +'table_pager_limit_label' => 'Itens por página:', 'table_pager_limit_submit' => 'Ir', 'table_pager_empty' => 'Sem resultados', @@ -3296,6 +3406,7 @@ Você também pode [[Special:Watchlist/edit|editar a lista da maneira convencion 'version-specialpages' => 'Páginas especiais', 'version-parserhooks' => 'Hooks do analisador (parser)', 'version-variables' => 'Variáveis', +'version-skins' => 'Temas', 'version-other' => 'Diversos', 'version-mediahandlers' => 'Executores de média', 'version-hooks' => 'Hooks', @@ -3307,6 +3418,13 @@ Você também pode [[Special:Watchlist/edit|editar a lista da maneira convencion 'version-hook-subscribedby' => 'Subscrito por', 'version-version' => '(Versão $1)', 'version-license' => 'Licença', +'version-poweredby-credits' => "Esta é uma wiki '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'outros', +'version-license-info' => 'O MediaWiki é software livre; pode redistribuí-lo e/ou modificá-lo nos termos da licença GNU General Public License, tal como publicada pela Free Software Foundation; tanto a versão 2 da Licença, como (por opção sua) qualquer versão posterior. + +O MediaWiki é distribuído na esperança de que seja útil, mas SEM QUALQUER GARANTIA; inclusive, sem a garantia implícita da POSSIBILIDADE DE SER COMERCIALIZADO ou de ADEQUAÇÂO PARA QUALQUER FINALIDADE ESPECÍFICA. Consulte a licença GNU General Public License para mais detalhes. + +Em conjunto com este programa deve ter recebido [{{SERVER}}{{SCRIPTPATH}}/COPYING uma cópia da licença GNU General Public License]; se não a recebeu, peça-a por escrito para Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ou [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html leia-a na internet].', 'version-software' => 'Software instalado', 'version-software-product' => 'Produto', 'version-software-version' => 'Versão', @@ -3377,6 +3495,15 @@ Entre com o nome de arquivo sem fornecer o prefixo "{{ns:file}}:".', 'tags-edit' => 'editar', 'tags-hitcount' => '$1 {{PLURAL:$1|modificação|modificações}}', +# Special:ComparePages +'comparepages' => 'Comparar páginas', +'compare-selector' => 'Comparar edições da página', +'compare-page1' => 'Página 1', +'compare-page2' => 'Página 2', +'compare-rev1' => 'Edição 1', +'compare-rev2' => 'Edição 2', +'compare-submit' => 'Comparar', + # Database error messages 'dberr-header' => 'Este wiki tem um problema', 'dberr-problems' => 'Desculpe! Este sítio está passando por dificuldades técnicas.', @@ -3393,8 +3520,13 @@ Entre com o nome de arquivo sem fornecer o prefixo "{{ns:file}}:".', 'htmlform-float-invalid' => 'O valor que você especificou não é um número.', 'htmlform-int-toolow' => 'O valor que você especificou está abaixo do mínimo de $1', 'htmlform-int-toohigh' => 'O valor que você especificou está acima do máximo de $1', +'htmlform-required' => 'Este valor é necessário', 'htmlform-submit' => 'Enviar', 'htmlform-reset' => 'Desfazer alterações', 'htmlform-selectorother-other' => 'Outros', +# SQLite database support +'sqlite-has-fts' => '$1 com suporte de pesquisa de texto completo', +'sqlite-no-fts' => '$1 sem suporte de pesquisa de texto completo', + ); diff --git a/languages/messages/MessagesQqq.php b/languages/messages/MessagesQqq.php index 923f1d65..6f366c2e 100644 --- a/languages/messages/MessagesQqq.php +++ b/languages/messages/MessagesQqq.php @@ -53,6 +53,8 @@ * @author Lloffiwr * @author MF-Warburg * @author Malafaya + * @author MarkvA + * @author MaxSem * @author McDutchie * @author Meno25 * @author MichaelFrey @@ -71,6 +73,7 @@ * @author Platonides * @author Prima klasy4na * @author Prometheus.pyrphoros + * @author Psubhashish * @author Purodha * @author Rancher * @author Raymond @@ -96,6 +99,7 @@ * @author Verdy p * @author Vinhtantran * @author Waldir + * @author Whym * @author Yyy * @author פוילישער */ @@ -118,10 +122,8 @@ This is the toolbar: [[Image:Toolbar.png]]", 'tog-editsection' => "[[Special:Preferences]], tab 'Edit'. Offers user to add links in sub headings for editing sections.", 'tog-editsectiononrightclick' => "[[Special:Preferences]], tab 'Edit'. Offers user to edit a section by clicking on a section title.", 'tog-showtoc' => "[[Special:Preferences]], tab 'Misc'. Offers user to show a table of contents automatically if a page has more than three headings.", -'tog-rememberpassword' => "[[Special:Preferences]], tab 'User profile', section 'Change password'. Offers user remember login details. - -{{Identical|Remember my login on this computer}}", -'tog-editwidth' => "[[Special:Preferences]], tab 'Edit'. Offers user make give edit box full width in browser.", +'tog-rememberpassword' => "{{Identical|Remember my login on this computer}}[[Special:Preferences]], tab 'User profile', section 'Change password'. Offers user remember login details. Parameters: +* $1 is the number of days the login details are remembered.", 'tog-watchcreations' => "[[Special:Preferences]], tab 'Watchlist'. Offers user to add created pages to watchlist.", 'tog-watchdefault' => "[[Special:Preferences]], tab 'Watchlist'. Offers user to add edited pages to watchlist.", 'tog-watchmoves' => "[[Special:Preferences]], tab 'Watchlist'. Offers user to add moved pages to watchlist.", @@ -132,7 +134,9 @@ This is the toolbar: [[Image:Toolbar.png]]", 'tog-nocache' => "[[Special:Preferences]], tab 'Misc.'. Offers the user the option of disabling caching of pages in the browser", 'tog-enotifwatchlistpages' => 'Option in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}.', 'tog-enotifusertalkpages' => 'Option in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}.', -'tog-enotifminoredits' => 'Option in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}.', +'tog-enotifminoredits' => 'Option in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}. + +Is only shown if {{msg-mw|tog-enotifusertalkpages}} or/and {{msg-mw|tog-enotifwatchlistpages}} are shown.', 'tog-enotifrevealaddr' => 'Toggle option used in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}.', 'tog-shownumberswatching' => 'Toggle option used in [[Special:Preferences]], in the section for recent changes. When this option is activated, the entries in recent changes includes the number of users who watch pages.', 'tog-oldsig' => 'Used in [[Special:Preferences]], tab User profile.', @@ -191,30 +195,54 @@ This is the toolbar: [[Image:Toolbar.png]]", 'thu' => 'Abbreviation for Thursday, a day of the week.', 'fri' => 'Abbreviation for Friday, a day of the week.', 'sat' => 'Abbreviation for Saturday, a day of the week.', -'january' => 'The first month of the Gregorian calendar', -'february' => 'The second month of the Gregorian calendar', -'march' => 'The third month of the Gregorian calendar', -'april' => 'The fourth month of the Gregorian calendar', -'may_long' => 'The fifth month of the Gregorian calendar', -'june' => 'The sixth month of the Gregorian calendar', -'july' => 'The seventh month of the Gregorian calendar', -'august' => 'The eighth month of the Gregorian calendar', -'september' => 'The ninth month of the Gregorian calendar', -'october' => 'The tenth month of the Gregorian calendar', -'november' => 'The eleventh month of the Gregorian calendar', -'december' => 'The twelfth month of the Gregorian calendar', -'january-gen' => 'The first month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.', -'february-gen' => 'The second month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.', -'march-gen' => 'The third month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.', -'april-gen' => 'The fourth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.', -'may-gen' => 'The fifth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.', -'june-gen' => 'The sixth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.', -'july-gen' => 'The seventh month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.', -'august-gen' => 'The eighth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.', -'september-gen' => 'The nineth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.', -'october-gen' => 'The tenth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.', -'november-gen' => 'The eleventh month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.', -'december-gen' => 'The twelfth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.', +'january' => 'The first month of the Gregorian calendar +{{Identical|January}}', +'february' => 'The second month of the Gregorian calendar +{{Identical|February}}', +'march' => 'The third month of the Gregorian calendar +{{Identical|March}}', +'april' => 'The fourth month of the Gregorian calendar +{{Identical|April}}', +'may_long' => 'The fifth month of the Gregorian calendar +{{Identical|May}}', +'june' => 'The sixth month of the Gregorian calendar +{{Identical|June}}', +'july' => 'The seventh month of the Gregorian calendar +{{Identical|July}}', +'august' => 'The eighth month of the Gregorian calendar +{{Identical|August}}', +'september' => 'The ninth month of the Gregorian calendar +{{Identical|September}}', +'october' => 'The tenth month of the Gregorian calendar +{{Identical|October}}', +'november' => 'The eleventh month of the Gregorian calendar +{{Identical|November}}', +'december' => 'The twelfth month of the Gregorian calendar +{{Identical|December}}', +'january-gen' => 'The first month of the Gregorian calendar. Must be in genitive, if the language has a genitive case. +{{Identical|January}}', +'february-gen' => 'The second month of the Gregorian calendar. Must be in genitive, if the language has a genitive case. +{{Identical|February}}', +'march-gen' => 'The third month of the Gregorian calendar. Must be in genitive, if the language has a genitive case. +{{Identical|March}}', +'april-gen' => 'The fourth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case. +{{Identical|April}}', +'may-gen' => 'The fifth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case. +{{Identical|May}}', +'june-gen' => 'The sixth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case. +{{Identical|June}}', +'july-gen' => 'The seventh month of the Gregorian calendar. Must be in genitive, if the language has a genitive case. +{{Identical|July}}', +'august-gen' => 'The eighth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case. +{{Identical|August}}', +'september-gen' => 'The nineth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case. +{{Identical|September}}', +'october-gen' => 'The tenth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case. +{{Identical|October}}', +'november-gen' => 'The eleventh month of the Gregorian calendar. Must be in genitive, if the language has a genitive case. +{{Identical|November}}', +'december-gen' => 'The twelfth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case. +{{Identical|December}}', 'jan' => 'Abbreviation of January, the first month of the Gregorian calendar', 'feb' => 'Abbreviation of February, the second month of the Gregorian calendar', 'mar' => 'Abbreviation of March, the thrird month of the Gregorian calendar', @@ -295,52 +323,33 @@ This can also appear in the credits page if the credits feature is enabled,for e {{doc-important|Do not translate Project: part.}}", # Vector skin -'vector-action-addsection' => 'Used in the Vector skin. See for example http://translatewiki.net/wiki/Talk:Main_Page?useskin=vector', -'vector-action-delete' => 'Used in the Vector skin, as the name of a tab at the top of the page. See for example http://translatewiki.net/wiki/Main_Page?useskin=vector +'vector-action-addsection' => 'Used in the Vector skin. See for example http://translatewiki.net/wiki/Talk:Main_Page?useskin=vector', +'vector-action-delete' => 'Used in the Vector skin, as the name of a tab at the top of the page. See for example http://translatewiki.net/wiki/Main_Page?useskin=vector {{Identical|Delete}}', -'vector-action-move' => 'Used in the Vector skin, on the tabs at the top of the page. See for example http://translatewiki.net/wiki/Talk:Main_Page?useskin=vector +'vector-action-move' => 'Used in the Vector skin, on the tabs at the top of the page. See for example http://translatewiki.net/wiki/Talk:Main_Page?useskin=vector {{Identical|Move}}', -'vector-action-protect' => 'Tab at top of page, in vector skin +'vector-action-protect' => 'Tab at top of page, in vector skin {{Identical|Protect}}', -'vector-action-undelete' => 'Tab at top of page, in vector skin. +'vector-action-undelete' => 'Tab at top of page, in vector skin. {{Identical|Undelete}}', -'vector-action-unprotect' => 'Tab at top of page, in vector skin. +'vector-action-unprotect' => 'Tab at top of page, in vector skin. {{Identical|Unprotect}}', -'vector-namespace-category' => 'Tab label in the Vector skin. See for example http://translatewiki.net/wiki/Category:Translatewiki.net?useskin=vector - -{{Identical|Category}}', -'vector-namespace-help' => 'Tab label in the Vector skin. See for example http://translatewiki.net/wiki/Help:Rollback?useskin=vector', -'vector-namespace-image' => 'Tab label in the Vector skin. See for example http://translatewiki.net/wiki/File:Tournesol.png?useskin=vector - -{{Identical|File}}', -'vector-namespace-main' => 'Tab label in the Vector skin. See for example http://translatewiki.net/wiki/Main_Page?useskin=vector -{{Identical|Page}}', -'vector-namespace-mediawiki' => 'Tab label in the Vector skin. See for example http://translatewiki.net/wiki/MediaWiki:Vector-namespace-mediawiki?useskin=vector -{{Identical|Message}}', -'vector-namespace-project' => 'Tab label in the Vector skin. See for example http://translatewiki.net/wiki/Project:About?useskin=vector', -'vector-namespace-special' => 'Tab label in the Vector skin. See for example http://translatewiki.net/wiki/Special:SpecialPages?useskin=vector', -'vector-namespace-talk' => 'Tab label in the Vector skin. See for example http://translatewiki.net/wiki/Talk:Main_Page?useskin=vector -{{Identical|Discussion}}', -'vector-namespace-template' => 'Tab label in the Vector skin. See for example http://translatewiki.net/wiki/Template:Identical?useskin=vector -{{Identical|Template}}', -'vector-namespace-user' => 'Tab label in the Vector skin. See for example http://translatewiki.net/wiki/User:FuzzyBot?useskin=vector -{{Identical|User page}}', -'vector-view-create' => 'Tab label in the Vector skin. See for example http://translatewiki.net/wiki/Foo?useskin=vector +'vector-view-create' => 'Tab label in the Vector skin. See for example http://translatewiki.net/wiki/Foo?useskin=vector {{Identical|Create}}', -'vector-view-edit' => 'Tab label in the Vector skin. See for example http://translatewiki.net/wiki/Main_Page?useskin=vector +'vector-view-edit' => 'Tab label in the Vector skin. See for example http://translatewiki.net/wiki/Main_Page?useskin=vector {{Identical|Edit}}', -'vector-view-history' => 'Tab label in the Vector skin. See for example http://translatewiki.net/wiki/Main_Page?useskin=vector +'vector-view-history' => 'Tab label in the Vector skin. See for example http://translatewiki.net/wiki/Main_Page?useskin=vector {{Identical|View history}}', -'vector-view-view' => 'Tab label in the Vector skin (verb). See for example http://translatewiki.net/w/i.php?title=Main_Page&useskin=vector', -'vector-view-viewsource' => 'Tab label in the Vector skin. +'vector-view-view' => 'Tab label in the Vector skin (verb). See for example http://translatewiki.net/w/i.php?title=Main_Page&useskin=vector', +'vector-view-viewsource' => 'Tab label in the Vector skin. {{Identical|View source}}', -'actions' => '{{Identical|Action}}', -'namespaces' => '{{Identical|Namespace}}', -'variants' => 'Used by the Vector skin.', +'actions' => '{{Identical|Action}}', +'namespaces' => '{{Identical|Namespace}}', +'variants' => 'Used by the Vector skin.', 'errorpagetitle' => 'Message shown in browser title bar when encountering error operation. @@ -434,6 +443,11 @@ See also [[MediaWiki:Lastmodifiedatby/{{SUBPAGENAME}}]].', 'jumptosearch' => 'Part of the "jump to" navigation links. Hidden by default in monobook skin. The format is: [[MediaWiki:Jumpto/{{SUBPAGENAME}}|{{int:jumpto}}]] [[MediaWiki:Jumptonavigation/{{SUBPAGENAME}}|{{int:jumptonavigation}}]], {{int:jumptosearch}}. {{Identical|Search}}', +'pool-timeout' => 'Part of {{msg-mw|view-pool-error}}.', +'pool-queuefull' => 'Part of {{msg-mw|view-pool-error}} + +"Pool" refers to a pool of processes.', +'pool-errorunknown' => 'Part of {{msg-mw|view-pool-error}}.', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Used as the label of the link that appears at the footer of every page on the wiki (in most of the skins) and leads to the page that contains the site description. The link target is {{msg-mw|aboutpage}}. @@ -673,6 +687,7 @@ $1 is a filename, I think.', {{Identical|Log in}}', 'createaccountmail' => 'Button text for creating a new account and sending the new password to the specified e-mail address directly, as used on [[Special:UserLogin/signup]] if creating accounts by e-mail is allowed.', +'createaccountreason' => '{{Identical|Reason}}', 'createaccounterror' => 'Parameters: * $1 is an error message', 'nocookiesnew' => "This message is displayed when a new account was successfully created, but the browser doesn't accept cookies.", @@ -691,6 +706,7 @@ $1 is a filename, I think.', * [[Special:CreateAccount]] $1 is the minimum number of characters in the password.', +'password-login-forbidden' => 'Error message shown when the user has tried to log in using one of the special username/password combinations used for MediaWiki testing. (See [[mwr:75589]], [[mwr:75605]].)', 'mailmypassword' => 'Shown at [[Special:UserLogin]]', 'passwordremindertitle' => 'Title of e-mail which contains temporary password', 'passwordremindertext' => 'This text is used in an e-mail sent when a user requests a new temporary password (he has forgotten his password) or when an sysop creates a new user account choosing to have password and username sent to the new user by e-mail. @@ -733,7 +749,7 @@ Parameters: {{Identical|Reset password}}', 'oldpassword' => "Used on the 'User profile' tab of 'my preferences'. This is the text next to an entry box for the old password in the 'change password' section.", -'newpassword' => '{{Identical|New password}}', +'newpassword' => 'ନୂଆ ପାସବାର୍ଡ଼:', 'retypenew' => "Appears on the 'User profile' tab of the 'Preferences' special page in the 'Change password' section. It appears next to the text box for entering the new password a second time.", 'resetpass_submit' => 'Submit button on [[Special:ChangePassword]]', 'resetpass-submit-loggedin' => 'Button on [[Special:ResetPass]] to submit new password. @@ -799,11 +815,11 @@ Tip for internal links', 'showpreview' => 'The text of the button to preview the page you are editing. See also {{msg|showdiff}} and {{msg|savearticle}} for the other buttons.', 'showdiff' => 'Button below the edit page. See also {{msg|showpreview}} and {{msg|savearticle}} for the other buttons.', 'anoneditwarning' => 'Shown when editing a page anonymously.', +'anonpreviewwarning' => 'See also {{msg-mw|Anoneditwarning}}', 'missingsummary' => 'The text "edit summary" is in {{msg-mw|summary}}. The text "Save" is in {{msg-mw|savearticle}}.', 'missingcommenttext' => 'This message is shown, when the textbox by a new-section is empty.', -'missingcommentheader' => ' -The text "Save" is in {{msg-mw|savearticle}}.', +'missingcommentheader' => 'Edit summary that is shown if you enable "Prompt me when entering a blank summary" and add a new section without headline to a talk page.', 'summary-preview' => 'Preview of the edit summary, shown under the edit summary itself. Should match: {{msg-mw|summary}}.', 'subject-preview' => 'Should match {{msg-mw|subject}}', @@ -856,6 +872,8 @@ See also {{msg-mw|Noarticletext-nopermission}}.', 'userjsyoucanpreview' => 'Text displayed on every js page.', 'usercsspreview' => 'Text displayed on preview of every user .css subpage', 'userjspreview' => 'Text displayed on preview of every user .js subpage', +'sitecsspreview' => 'Text displayed on preview of .css pages in MediaWiki namespace', +'sitejspreview' => 'Text displayed on preview of .js pages in MediaWiki namespace', 'updated' => '{{Identical|Updated}}', 'previewnote' => 'Note displayed when clicking on Show preview', 'editing' => "Shown as page title when editing a page. \$1 is the name of the page that is being edited. Example: \"''Editing Main Page''\".", @@ -864,7 +882,6 @@ See also {{msg-mw|Noarticletext-nopermission}}.', 'storedversion' => 'This is used in an edit conflict as the label for the top revision that has been stored, as opposed to your version that has not been stored which is shown at the bottom of the page.', 'yourdiff' => '', 'copyrightwarning' => 'Copyright warning displayed under the edit box in editor', -'longpagewarning' => 'Warning displayed when trying to edit a long page', 'longpageerror' => 'Warning displayed when trying to save a text larger than the maximum size allowed', 'protectedpagewarning' => '{{Related|Semiprotectedpagewarning}}', 'semiprotectedpagewarning' => '{{Related|Semiprotectedpagewarning}}', @@ -892,6 +909,7 @@ Please report at [[Support]] if you are unable to properly translate this messag * $1 is the current number of parser function calls. * $2 is the allowed number of parser function calls.', 'expensive-parserfunction-category' => 'This message is used as a category name for a category where pages are placed automatically if they contain too many calls to expensive parser functions.', +'post-expand-template-inclusion-warning' => 'When templates are expanded, there is a size limit for the number of bytes yielded. Usually that occurs from excessively nested templates, recursive templates, or ones having x-zillion of #if #case or similar contructs in them. When the wikicode parser detects this, it outputs a red warning message to the page.', 'post-expand-template-inclusion-category' => 'When templates are expanded, there is a size limit for the number of bytes yielded. Usually that occurs from excessively nested templates, recursive templates, or ones having x-zillion of #if #case or similar contructs in them. When the wikicode parser detects this, it outputs a red warning message to the page.', 'language-converter-depth-warning' => 'Error message shown when a page uses too deeply nested language conversion syntax @@ -960,6 +978,7 @@ Used in History and [[Special:Contributions]].', * '''$4''' - time.", # Revision deletion +'rev-deleted-user-contribs' => 'Part of revision deletion.', 'rev-deleted-text-unhide' => 'This message is very similar to {{msg-mw|rev-suppressed-unhide-diff}}. Parameters: * $1 is a HTML link to the diff', 'rev-suppressed-unhide-diff' => 'This message is very similar to {{msg-mw|rev-deleted-unhide-diff}} and to {{msg-mw|rev-suppressed-text-unhide}}. Parameters: @@ -1141,12 +1160,20 @@ Please note that the parameters in a log entry will appear in the log only in th # Diffs 'history-title' => 'Displayed as page title when you click on the "history" tab. The parameter $1 is the normal page title.', 'difference' => 'Displayed under the title when viewing the difference between two or more edits.', +'difference-multipage' => 'Displayed under the title when viewing the difference between two or more pages. +See also {{msg-mw|difference}}.', 'lineno' => 'Message used when comparing different versions of a page (diff). $1 is a line number.', 'compareselectedversions' => 'Used as button in history pages.', 'showhideselectedversions' => 'Text of the button which brings up the [[mw:RevisionDelete|RevisionDelete]] menu.', 'editundo' => 'Undo link when viewing diffs {{Identical|Undo}}', -'diff-multi' => "This message appears in the revision history of a page when comparing two versions which aren't consecutive.", +'diff-multi' => "This message appears in the revision history of a page when comparing two versions which aren't consecutive. + +*Parameter $1 is the number of revisions +*Parameter $2 is the number of distinct users who made those revisions", +'diff-multi-manyusers' => "This message appears in the revision history of a page when comparing two versions which aren't consecutive, and the intermediate revisions have been edited by more than 100 users. Parameters: +* $1 is the number of revisions, will always be 101 or more. +* $2 is the number of users that were found, which was limited at 100.", # Search results 'searchresults-title' => 'Appears as page title in the html header of the search result special page.', @@ -1289,6 +1316,7 @@ When changing this message, please also update {{msg-mw|vector-editwarning-warni 'contextlines' => "Option on the 'Search options' tab of [[Special:Preferences]]", 'contextchars' => 'Used in Preferences/Search tab', 'stub-threshold' => 'Used in [[Special:Preferences]], tab "Misc".', +'stub-threshold-disabled' => 'Used in [[Special:Preferences]].', 'recentchangesdays' => 'Used in [[Special:Preferences]], tab "Recent changes".', 'recentchangesdays-max' => 'Shown as hint in [[Special:Preferences]], tab "Recent changes"', 'recentchangescount' => 'Used in [[Special:Preferences]], tab "Recent changes".', @@ -1362,9 +1390,20 @@ Used in [[Special:Preferences]]. Parameters are: {{Identical|Advanced options}}', 'prefs-advancedwatchlist' => 'Used in [[Special:Preferences]], tab "Watchlist". {{Identical|Advanced options}}', -'prefs-display' => '"Display" is a noun that specifies the kind of "options". So translate as "options about display", not as "display the options". +'prefs-displayrc' => '"Display" is a noun that specifies the kind of "options". So translate as "options about display", not as "display the options". + +Used in [[Special:Preferences]], tab "Recent changes". The display options refer to: +* {{msg-mw|Recentchangesdays}} +* {{msg-mw|Recentchangescount}}', +'prefs-displaysearchoptions' => '"Display" is a noun that specifies the kind of "options". So translate as "options about display", not as "display the options". -Used in [[Special:Preferences]], tab "Recent changes".', +Used in [[Special:Preferences]], tab "Search options". The display options refer to: +* {{msg-mw|Vector-simplesearch-preference}}', +'prefs-displaywatchlist' => '"Display" is a noun that specifies the kind of "options". So translate as "options about display", not as "display the options". + +Used in [[Special:Preferences]], tab "Watchlist". The display options refer to: +* {{msg-mw|Prefs-watchlist-days}} +* {{msg-mw|Prefs-watchlist-edits}}', 'prefs-diffs' => 'Used in [[Special:Preferences]], tab "Misc".', # User rights @@ -1517,6 +1556,7 @@ See also 'right-ipblock-exempt' => 'This user automatically bypasses IP blocks, auto-blocks and range blocks - so I presume - but I am uncertain', 'right-proxyunbannable' => '{{doc-right|proxyunbannable}}', +'right-unblockself' => '{{doc-right|unblockself}}', 'right-protect' => '{{doc-right|protect}}', 'right-editprotected' => '{{doc-right|editprotected}}', 'right-editinterface' => '{{doc-right|editinterface}}', @@ -1545,9 +1585,6 @@ An alternative wording for translators could be \'Get the wiki to accept a track 'right-siteadmin' => '{{doc-right|siteadmin}}', 'right-reset-passwords' => '{{doc-right}}', 'right-override-export-depth' => '{{doc-right|override-export-depth}}', -'right-versiondetail' => '{{doc-right|versiondetail}} - -Users having this right receive more detailed information on [[Special:Version]].', 'right-sendemail' => '{{doc-right}}', # User rights log @@ -1606,22 +1643,17 @@ This action allows editing of all of the "user rights", not just the rights of t 'action-siteadmin' => '{{Doc-action}}', # Recent changes -'nchanges' => 'Appears on the [[Special:RecentChanges]] special page in brackets after pages having more than one change on that date. $1 is the number of changes on that day.', -'recentchanges' => 'The text of the link in sidebar going to the special page [[Special:RecentChanges]]. Also the page title of that special page. +'nchanges' => 'Appears on the [[Special:RecentChanges]] special page in brackets after pages having more than one change on that date. $1 is the number of changes on that day.', +'recentchanges' => 'The text of the link in sidebar going to the special page [[Special:RecentChanges]]. Also the page title of that special page. {{Identical|Recent changes}}', -'recentchanges-legend' => 'Legend of the fieldset of [[Special:RecentChanges]]', -'recentchangestext' => 'Text in recent changes', -'recentchanges-label-legend' => 'Used at [[Special:RecentChanges]] and [[Special:Watchlist]].', -'recentchanges-legend-newpage' => '* $1 - message {{msg-mw|newpageletter}} ({{int:newpageletter}})', -'recentchanges-label-newpage' => 'Tooltip for {{msg-mw|newpageletter}}', -'recentchanges-legend-minor' => '* $1 - message {{msg-mw|minoreditletter}} ({{int:minoreditletter}})', -'recentchanges-label-minor' => 'Tooltip for {{msg-mw|newpageletter}}', -'recentchanges-legend-bot' => '* $1 - message {{msg-mw|boteditletter}} ({{int:boteditletter}})', -'recentchanges-label-bot' => 'Tooltip for {{msg-mw|boteditletter}}', -'recentchanges-legend-unpatrolled' => '* $1 - message {{msg-mw|unpatrolledletter}} ({{int:unpatrolledletter}})', -'recentchanges-label-unpatrolled' => 'Tooltip for {{msg-mw|unpatrolledletter}}', -'rcnote' => 'Used on [[Special:RecentChanges]]. +'recentchanges-legend' => 'Legend of the fieldset of [[Special:RecentChanges]]', +'recentchangestext' => 'Text in recent changes', +'recentchanges-label-newpage' => 'Tooltip for {{msg-mw|newpageletter}}', +'recentchanges-label-minor' => 'Tooltip for {{msg-mw|newpageletter}}', +'recentchanges-label-bot' => 'Tooltip for {{msg-mw|boteditletter}}', +'recentchanges-label-unpatrolled' => 'Tooltip for {{msg-mw|unpatrolledletter}}', +'rcnote' => 'Used on [[Special:RecentChanges]]. * $1 is the number of changes shown, * $2 is the number of days for which the changes are shown, * $3 is a date and time (deprecated), @@ -1630,50 +1662,50 @@ This action allows editing of all of the "user rights", not just the rights of t Example: "\'\'{{int:rcnote/en|50|7||24 January 2008|14:48}}\'\'"', -'rcnotefrom' => 'This message is displayed at [[Special:RecentChanges]] when viewing recentchanges from some specific time. The corrosponding message is {{msg-mw|Rclistfrom}} (without split of date and time, [[bugzilla:19104|Bug 19104]]). +'rcnotefrom' => 'This message is displayed at [[Special:RecentChanges]] when viewing recentchanges from some specific time. The corrosponding message is {{msg-mw|Rclistfrom}} (without split of date and time, [[bugzilla:19104|Bug 19104]]). Parameter $1 is the maximum number of changes that are displayed. Parameter $2 is a date and time. Parameter $3 is a date. Parameter $4 is a time.', -'rclistfrom' => 'Used on [[Special:RecentChanges]]. Parameter $1 is a link to the revision of a specific date and time. The date and the time are the link description (without split of date and time, [[bugzilla:19104|Bug 19104]]). The corrosponding message is {{msg-mw|Rcnotefrom}}.', -'rcshowhideminor' => "Option text in [[Special:RecentChanges]]. Parameters: +'rclistfrom' => 'Used on [[Special:RecentChanges]]. Parameter $1 is a link to the revision of a specific date and time. The date and the time are the link description (without split of date and time, [[bugzilla:19104|Bug 19104]]). The corrosponding message is {{msg-mw|Rcnotefrom}}.', +'rcshowhideminor' => "Option text in [[Special:RecentChanges]]. Parameters: * $1 is the 'show/hide' command, with the text taken from either {{msg-mw|show}} or {{msg-mw|hide}}.", -'rcshowhidebots' => "Option text in [[Special:RecentChanges]]. Parameters: +'rcshowhidebots' => "Option text in [[Special:RecentChanges]]. Parameters: * $1 is the 'show/hide' command, with the text taken from either {{msg-mw|show}} or {{msg-mw|hide}}. {{Identical|$1 bots}}", -'rcshowhideliu' => 'Option text in [[Special:RecentChanges]]', -'rcshowhideanons' => "Option text in [[Special:RecentChanges]]. Parameters: +'rcshowhideliu' => 'Option text in [[Special:RecentChanges]]', +'rcshowhideanons' => "Option text in [[Special:RecentChanges]]. Parameters: * $1 is the 'show/hide' command, with the text taken from either {{msg-mw|show}} or {{msg-mw|hide}}.", -'rcshowhidepatr' => "Option text in [[Special:RecentChanges]]. Parameters: +'rcshowhidepatr' => "Option text in [[Special:RecentChanges]]. Parameters: * $1 is the 'show/hide' command, with the text taken from either {{msg-mw|show}} or {{msg-mw|hide}}.", -'rcshowhidemine' => "Option text in [[Special:RecentChanges]]. Parameters: +'rcshowhidemine' => "Option text in [[Special:RecentChanges]]. Parameters: * $1 is the 'show/hide' command, with the text taken from either {{msg-mw|show}} or {{msg-mw|hide}}.", -'rclinks' => "Used on [[Special:RecentChanges]]. +'rclinks' => "Used on [[Special:RecentChanges]]. * '''\$1''' is a list of different choices with number of pages to be shown.
     Example: \"''50{{int:pipe-separator}}100{{int:pipe-separator}}250{{int:pipe-separator}}500\". * '''\$2''' is a list of clickable links with a number of days for which recent changes are to be displayed.
     Example: \"''1{{int:pipe-separator}}3{{int:pipe-separator}}7{{int:pipe-separator}}14{{int:pipe-separator}}30''\". * '''\$3''' is a block of text that consists of other messages.
     Example: \"''Hide minor edits{{int:pipe-separator}}Show bots{{int:pipe-separator}}Hide anonymous users{{int:pipe-separator}}Hide logged-in users{{int:pipe-separator}}Hide patrolled edits{{int:pipe-separator}}Hide my edits''\" List elements are separated by {{msg-mw|pipe-separator}} each. Each list element is, or contains, a link.", -'diff' => 'Short form of "differences". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...', -'hist' => 'Short form of "history". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...', -'hide' => 'Option text in [[Special:RecentChanges]], and in [[Special:WhatLinksHere]] +'diff' => 'Short form of "differences". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...', +'hist' => 'Short form of "history". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...', +'hide' => 'Option text in [[Special:RecentChanges]], and in [[Special:WhatLinksHere]] {{Identical|Hide}}', -'show' => '{{Identical|Show}}', -'minoreditletter' => "Very short form of \"'''minor edit'''\". Used in [[Special:RecentChanges]], [[Special:Watchlist]], [[Special:Contributions]] and history pages.", -'newpageletter' => "Very short form of \"'''new page'''\". Used in [[Special:RecentChanges]], [[Special:Watchlist]] and [[Special:Contributions]].", -'boteditletter' => 'Abbreviation of "bot". Appears in [[Special:RecentChanges]] and [[Special:Watchlist]].', -'unpatrolledletter' => '{{optional}} +'show' => '{{Identical|Show}}', +'minoreditletter' => "Very short form of \"'''minor edit'''\". Used in [[Special:RecentChanges]], [[Special:Watchlist]], [[Special:Contributions]] and history pages.", +'newpageletter' => "Very short form of \"'''new page'''\". Used in [[Special:RecentChanges]], [[Special:Watchlist]] and [[Special:Contributions]].", +'boteditletter' => 'Abbreviation of "bot". Appears in [[Special:RecentChanges]] and [[Special:Watchlist]].', +'unpatrolledletter' => '{{optional}} Used in {{msg-mw|Recentchanges-label-legend}}, meaning "unpatrolled".', -'sectionlink' => '{{optional}}', -'rc_categories' => "Probably to do with 'recent changes' special page, either in a particular skin, or for a particular user group. +'sectionlink' => '{{optional}}', +'rc_categories' => "Probably to do with 'recent changes' special page, either in a particular skin, or for a particular user group. I guess that this should appear before an input box where you can specify that recent changes should be shown for pages belonging to certain categories only. You name the categories in the input box, and separate them by a pipe character. If this is right, then you should be able to use 'restrict' instead of 'limit', or even 'show pages in the following categories only'.", -'rc-change-size' => '{{optional}} +'rc-change-size' => '{{optional}} Does not work under $wgMiserMode ([[mwr:48986|r48986]]).', -'newsectionsummary' => 'Default summary when adding a new section to a page.', +'newsectionsummary' => 'Default summary when adding a new section to a page.', # Recent changes linked 'recentchangeslinked' => 'Title of [[Special:RecentChangesLinked]] and display name of page on [[Special:SpecialPages]].', @@ -1715,6 +1747,7 @@ Text displayed when uploading a file using [[Special:Upload]].", * $2 is the list of file extensions that can be uploaded (Example: ''png, gif, jpg, jpeg, ogg, pdf, svg.'') * $3 is the number of allowed file formats (to be used for the PLURAL function)", 'filetype-missing' => 'Error when uploading a file with no extension', +'verification-error' => 'Error message shown when an uploaded file contents does not pass verification, i.e. the file is corrupted, it is not the type it claims to be etc.', 'large-file' => 'Variables $1 and $2 have appropriate unit symbols already. See for example [[Mediawiki:size-kilobytes]].', 'largefileserver' => 'Error message when uploading a file whose size is larger than the maximum allowed', 'emptyfile' => 'Error message when trying to upload an empty file', @@ -1748,6 +1781,12 @@ $1 is the value in KB/MB/GB', Parameters: * $1 is a link to the deletion log, with the text from {{msg|deletionlog}}.', 'filename-prefix-blacklist' => "Do not translate the file name prefixes before the hash mark (#). Leave all the wiki markup, including the spaces, as is. You can translate the text, including 'Leave this line exactly as it is'. The first line of this messages has one (1) leading space.", +'upload-success-msg' => '$1 is the local file name after uploading +$2 is the url the file was uploaded from, when using upload-by-url.', +'upload-failure-msg' => '$1 is the specific error message +$2 is the url the file tried to upload from, when using upload-by-url.', +'upload-warning-msg' => '$1 is the url the file was uploaded from, when using upload-by-url +$2 is the session key for the upload', 'upload-proto-error-text' => '"Remote upload" is explained on [http://en.wikipedia.org/wiki/Uploading_and_downloading#Remote_upload Wikipedia].', 'upload-file-error' => 'Unused on core [http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/includes/specials/SpecialUpload.php?r1=53161&r2=53282]. @@ -1760,7 +1799,8 @@ Extensions making use of it: {{Identical|Internal error}}', # img_auth script messages -'img-auth-accessdenied' => '[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Access Denied', +'img-auth-accessdenied' => '[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Access Denied +{{Identical|Access denied}}', 'img-auth-nopathinfo' => '[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Missing PATH_INFO - see english description', 'img-auth-notindir' => '[[mw:Manual:Image Authorization|Manual:Image Authorization]]: When the specified path is not in upload directory.', 'img-auth-badtitle' => '[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Bad title, $1 is the invalid title', @@ -1793,6 +1833,7 @@ If \'scheme\' is difficult to translate, then you could use \'prefix\' instead.' 'imgfile' => '{{Identical|File}}', 'listfiles' => 'Page title and grouping label for the form displayed on [[Special:ListFiles]]. {{Identical|File list}}', +'listfiles_thumb' => '{{Identical|Thumbnail}}', 'listfiles_date' => 'Column header for the result table displayed on [[Special:ListFiles]]. {{Identical|Date}}', 'listfiles_name' => 'Column header for the result table displayed on [[Special:ListFiles]]. @@ -1880,6 +1921,7 @@ $1 is the name of the shared repository. On wikimedia sites, $1 is {{msg-mw|shar * {{msg-mw|shared-repo-from}} * {{msg-mw|sharedupload}}, {{msg-mw|sharedupload-desc-here}}, {{msg-mw|sharedupload-desc-there}}', 'shared-repo-name-wikimediacommons' => '{{optional}}', +'filepage.css' => '{{Optional}}', # File reversion 'filerevert' => '{{Identical|Revert}}', @@ -1889,7 +1931,7 @@ $1 is the name of the shared repository. On wikimedia sites, $1 is {{msg-mw|shar * $1 is the name of the media * $2 is a date * $3 is a hour -* $4 is an URL and must follow square bracket: [$4 +* $4 is a URL and must follow square bracket: [$4 {{Identical|Revert}}', 'filerevert-comment' => '{{Identical|Reason}}', 'filerevert-defaultcomment' => '* $1 is a date @@ -1910,7 +1952,7 @@ $1 is the name of the shared repository. On wikimedia sites, $1 is {{msg-mw|shar * $1 is the name of the media * $2 is a date * $3 is a hour -* $4 is an URL and must follow square bracket: [$4', +* $4 is a URL and must follow square bracket: [$4', 'filedelete-comment' => '{{Identical|Reason}}', 'filedelete-submit' => 'Delete button when deleting a file for admins @@ -1977,7 +2019,6 @@ Possible alternatives to the word 'content' are 'subject matter' or 'wiki subjec 'statistics-edits-average' => 'Used in [[Special:Statistics]]', 'statistics-views-total' => 'Used in [[Special:Statistics]]', 'statistics-views-peredit' => 'Used in [[Special:Statistics]]', -'statistics-jobqueue' => 'Used in [[Special:Statistics]]', 'statistics-users' => 'Used in [[Special:Statistics]]', 'statistics-users-active' => 'Used in [[Special:Statistics]]', 'statistics-users-active-desc' => "Description shown beneath ''Active users'' in [[Special:Statistics]] @@ -2023,6 +2064,8 @@ Possible alternatives to the word 'content' are 'subject matter' or 'wiki subjec 'nmembers' => 'Appears in brackets after each category listed on the special page [[Special:WantedCategories]]. $1 is the number of members of the category.', 'nrevisions' => 'Number of revisions.', 'nviews' => 'This message is used on [[Special:PopularPages]] to say how many times each page has been viewed. Parameter $1 is the number of views.', +'nimagelinks' => 'Used on [[Special:MostLinkedFiles]] to indicate how often a specific file is used.', +'ntransclusions' => 'Used on [[Special:MostLinkedTemplates]] to indicate how often a template is in use.', 'specialpage-empty' => 'Used on a special page when there is no data. For example on [[Special:Unusedimages]] when all images are used.', 'lonelypages' => 'Name of [[Special:LonelyPages]] displayed in [[Special:SpecialPages]]', 'lonelypagestext' => 'Text displayed in [[Special:LonelyPages]]', @@ -2239,43 +2282,51 @@ See also {{msg|listgrouprights-addgroup}}.', * $2 is the number of group names in $1.', # E-mail user -'emailuser' => 'Link in the sidebar and title of [[Special:EmailUser|special page]]', -'emailpage' => "Title of special page [[Special:EmailUser]], when it is the destination of the sidebar link {{msg-mw|Emailuser}} on a user's page.", -'emailpagetext' => 'This is the text that is displayed above the e-mail form on [[Special:EmailUser]]. +'emailuser' => 'Link in the sidebar and title of [[Special:EmailUser|special page]]', +'emailpage' => "Title of special page [[Special:EmailUser]], when it is the destination of the sidebar link {{msg-mw|Emailuser}} on a user's page.", +'emailpagetext' => 'This is the text that is displayed above the e-mail form on [[Special:EmailUser]]. Special:EmailUser appears when you click on the link "E-mail this user" in the sidebar, but only if there is an e-mail address in the recipient\'s user preferences. If there isn\'t then the message [[Mediawiki:Noemailtext]] will appear instead of Special:EmailUser.', -'noemailtitle' => 'The title of the message that appears instead of Special:EmailUser after clicking the "E-mail this user" link in the sidebar, if no e-mail can be sent to the user.', -'noemailtext' => 'The text of the message that appears in [[Special:EmailUser]] after clicking the "E-mail this user" link in the sidebar, if no e-mail can be sent to the user because he has not specified or not confirmed an e-mail address.', -'nowikiemailtext' => 'This is an error message used in [[Special:Emailuser]] when called with a target user not consenting to be an e-mail recipient.', -'email-legend' => 'Title of the box in [[Special:EmailUser]]', -'emailfrom' => 'Field in [[Special:EmailUser]]. +'usermaildisabled' => 'Caption for an error message ({{msg-mw|Usermaildisabledtext}}) shown when the user-to-user e-mail feature is disabled on the wiki (see [[mw:Manual:$wgEnableEmail]], [[mw:Manual:$wgEnableUserEmail]]).', +'noemailtitle' => 'The title of the message that appears instead of Special:EmailUser after clicking the "E-mail this user" link in the sidebar, if no e-mail can be sent to the user.', +'noemailtext' => 'The text of the message that appears in [[Special:EmailUser]] after clicking the "E-mail this user" link in the sidebar, if no e-mail can be sent to the user because he has not specified or not confirmed an e-mail address.', +'nowikiemailtext' => 'This is an error message used in [[Special:Emailuser]] when called with a target user not consenting to be an e-mail recipient.', +'email-legend' => 'Title of the box in [[Special:EmailUser]]', +'emailfrom' => 'Field in [[Special:EmailUser]]. {{Identical|From}}', -'emailto' => 'Field in [[Special:EmailUser]]. +'emailto' => 'Field in [[Special:EmailUser]]. {{Identical|To}}', -'emailsubject' => 'Field in [[Special:EmailUser]]. +'emailsubject' => 'Field in [[Special:EmailUser]]. {{Identical|Subject}}', -'emailmessage' => 'Field in [[Special:EmailUser]]. +'emailmessage' => 'Field in [[Special:EmailUser]]. {{Identical|Message}}', -'emailsend' => 'Button name in [[Special:EmailUser]]. +'emailsend' => 'Button name in [[Special:EmailUser]]. {{Identical|Send}}', -'emailccme' => 'Used at [[Special:Preferences]] > E-mail', -'emailccsubject' => 'Subject of the carbon-copied email for the sender sent through MediaWiki.', -'emailuserfooter' => 'This message is appended to every email sent through the "Email user" function. +'emailccme' => 'Used at [[Special:Preferences]] > E-mail', +'emailccsubject' => 'Subject of the carbon-copied email for the sender sent through MediaWiki.', +'emailsent' => 'Title of Special:Emailuser when it says you it sent an email', +'emailsenttext' => 'When you send an e-mail, Special:Emailuser says you this (Your email has been sent).', +'emailuserfooter' => 'This message is appended to every email sent through the "Email user" function. * $1: username of the sender * $2: username of the recipient', +# User Messenger +'usermessage-summary' => 'This message is used as an edit summary for any message that is posted because of a system event. Translate "leaving a message" in the sense of: to give a message to someone; to deliver a message somewhere; to deposit.', +'usermessage-editor' => 'The user name for the user that is the editor of system messages. See [http://translatewiki.net/wiki/Thread:Support/Message_info_please discussion on Support].', + # Watchlist 'watchlist' => '{{Identical|My watchlist}}', 'mywatchlist' => 'Link at the upper right corner of the screen. {{Identical|My watchlist}}', -'watchlistfor' => 'Subtitle on [[Special:Watchlist]]. +'watchlistfor2' => 'Subtitle on [[Special:Watchlist]]. *$1: Username of current user +*$2: Tool links (View relevant changes | View and edit watchlist | Edit raw watchlist) {{Identical|For $1}}', 'nowatchlist' => 'Displayed when there is no pages in the watchlist.', 'watchlistanontext' => '* $1 is a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description', @@ -2508,26 +2559,29 @@ This message was something like "unlock move protection" in the past.', 'month' => 'Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for a dropdown box to select a specific month to view the edits made in that month, and the earlier months. See also {{msg|year}}.', 'year' => 'Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for a inputbox to select a specific year to view the edits made in that year, and the earlier years. See also {{msg|month}}.', -'sp-contributions-newbies' => 'Text of radio button on special page [[Special:Contributions]].', -'sp-contributions-newbies-sub' => "Note at the top of the page of results for a search on [[Special:Contributions]] where 'Show contributions for new accounts only' has been selected.", -'sp-contributions-newbies-title' => 'The page title in your browser bar, but not the page title. See also {{msg|sp-contributions-newbies-sub}}.', -'sp-contributions-blocklog' => 'Used as a display name for a link to the block log on for example [[Special:Contributions/Mediawiki default]] +'sp-contributions-newbies' => 'Text of radio button on special page [[Special:Contributions]].', +'sp-contributions-newbies-sub' => "Note at the top of the page of results for a search on [[Special:Contributions]] where 'Show contributions for new accounts only' has been selected.", +'sp-contributions-newbies-title' => 'The page title in your browser bar, but not the page title. See also {{msg|sp-contributions-newbies-sub}}.', +'sp-contributions-blocklog' => 'Used as a display name for a link to the block log on for example [[Special:Contributions/Mediawiki default]] {{Identical|Block log}}', -'sp-contributions-deleted' => "This is a link anchor used in [[Special:Contributions]]/''name'', when user viewing the page has the right to delete pages, or to restore deleted pages.", -'sp-contributions-logs' => "Appears as an action link in the header of the Special:Contributions/''Username'' pages (e.g. \"For Somebody (talk | block log | logs)\").", -'sp-contributions-talk' => "This is a link anchor used in the [[Special:Contributions]]/''usernamename'' pages. +'sp-contributions-deleted' => "This is a link anchor used in [[Special:Contributions]]/''name'', when user viewing the page has the right to delete pages, or to restore deleted pages.", +'sp-contributions-uploads' => '{{Identical|Upload}}', +'sp-contributions-logs' => "Appears as an action link in the header of the Special:Contributions/''Username'' pages (e.g. \"For Somebody (talk | block log | logs)\").", +'sp-contributions-talk' => "This is a link anchor used in the [[Special:Contributions]]/''usernamename'' pages. The link appears in a list of similar ones separated by {{msg-mw|pipe-separator}}, e.g. like this:
    ( talk | block log | logs | deleted contributions | rights management )", -'sp-contributions-userrights' => "This is a link anchor used in [[Special:Contributions]]/''name'', if the user viewing the page has the right to set or alter user rights.", -'sp-contributions-blocked-notice' => 'Shown on top of contributions special page of currently blocked users. Parameters: +'sp-contributions-userrights' => "This is a link anchor used in [[Special:Contributions]]/''name'', if the user viewing the page has the right to set or alter user rights.", +'sp-contributions-blocked-notice' => 'Shown on top of contributions special page of currently blocked users. Parameters: * $1 is the blocked user. Can be used for GENDER (optional) Anon version: {{msg-mw|Sp-contributions-blocked-notice-anon}}', -'sp-contributions-search' => 'Used on [[Special:Contributions]]', -'sp-contributions-username' => 'This message appears whenever someone requests [[Special:Contributions]]. +'sp-contributions-blocked-notice-anon' => 'Same as {{msg-mw|Sp-contributions-blocked-notice}} but for anonymous users.', +'sp-contributions-search' => 'Used on [[Special:Contributions]]', +'sp-contributions-username' => 'This message appears whenever someone requests [[Special:Contributions]]. {{Identical/IP address or username}}', -'sp-contributions-submit' => '{{Identical|Search}}', +'sp-contributions-toponly' => '"top revision" means the "latest revision"', +'sp-contributions-submit' => '{{Identical|Search}}', # What links here 'whatlinkshere' => 'The text of the link in the toolbox (on the left, below the search menu) going to [[Special:WhatLinksHere]].', @@ -2685,6 +2739,8 @@ Used on [[Special:Block]] as header for other blocks, i.e. from GlobalBlocking o 'proxyblocksuccess' => '{{Identical|Done}}', 'sorbs' => '{{optional}}', 'cant-see-hidden-user' => 'Used as (red) error message on Special:Block when you try to change (as sysop w/o the hideuser right) the block of a hidden user.', +'ipbblocked' => 'Error message shown when a user tries to alter block settings when they are themselves blocked.', +'ipbnounblockself' => 'Error message shown when a user without the unblockself right tries to unblock themselves.', # Developer tools 'lockdb' => 'The title of the special page [[Special:LockDB]]. @@ -2714,6 +2770,7 @@ Shown as subtitle of [[Special:MovePage/testpage]]. $1 is the title of the page Special pages mentioned: {{msg-mw|Doubleredirects}}, {{msg-mw|Brokenredirects}} See also {{msg-mw|Movepagetext-noredirectfixer|notext=1}}', +'movepagetext-noredirectfixer' => 'A variant of {{msg-mw|Movepagetext|notext=1}} displayed when the automatic redirect fixer is not enabled.', 'movepagetalktext' => "Text on the special 'Move page'. This text only appears if the talk page is not empty.", 'movearticle' => 'The text before the name of the page that you are moving. Can be translated as "Page that is going to be moved" @@ -2991,7 +3048,7 @@ See also {{msg-mw|Anonuser}} and {{msg-mw|Siteusers}}.', # Patrol log 'patrol-log-page' => 'Name of log.', 'patrol-log-header' => 'Text that appears above the log entries on the [[Special:log|patrol log]].', -'patrol-log-line' => 'Text of notes on entries in the [[Special:Log|patrol log]]. $1 is the link whose text is [[Mediawiki:patrol-log-diff]]. $2 is the name of the page. $3 appears to be [[Mediawiki:Patrol-log-auto]] (at least sometimes). +'patrol-log-line' => 'Text of notes on entries in the [http://translatewiki.net/w/i.php?title=Special%3ALog&type=patrol&user=&page=&year=&month=-1 patrol log]. $1 is the link whose text is {{msg-mw|patrol-log-diff}}. $2 is the name of the page. $3 appears to be {{msg-mw|Patrol-log-auto}} (at least sometimes). The message appears after the name of the patroller.', 'patrol-log-auto' => 'Automated edit summary when patrolling. @@ -3009,15 +3066,33 @@ The message appears after the name of the patroller.', 'mediawarning' => 'Shows up on file description pages if the file type is not listed in [[mw:Manual:$wgTrustedMediaFormats|Manual:$wgTrustedMediaFormats]].', 'imagemaxsize' => 'This is used in Special:Preferences, under Files.', 'widthheight' => '{{optional}}', -'widthheightpage' => 'This message is used on image pages in the dimensions column in the file history section for images with more than one page. Parameter $1 is the image width (in pixels), parameter $2 is the image height, and parameter $3 is the number of pages.', +'widthheightpage' => 'This message is used on image pages in the dimensions column in the file history section for images with more than one page. + +Parameters: +* $1 is the width of the image pages in pixels. +* $2 is the height of the image pages in pixels. +* $3 is the number of pages in the file.', 'file-info' => 'File info displayed on file description page.', -'file-info-size' => 'File info displayed on file description page.', +'file-info-size' => 'File info displayed on file description page. + +Parameters: +* $1 is the width of the image(s) in pixels. +* $2 is the height of the image(s) in pixels. +* $3 is the file size as a number followed by a unit — for example: 99 KB +* $4 is the MIME type, a formalized textual information — for example: image/jpeg', 'file-nohires' => 'File info displayed on file description page. For example of message in use see [[:File:Mouse10.gif]].', -'svg-long-desc' => 'Displayed under an SVG image at the image description page. Note that argument 3 is a string that includes the file size unit symbol. See for example [[:Image:Wiki.svg]].', +'svg-long-desc' => 'Displayed under an SVG image at the image description page. Note that argument 3 is a string that includes the file size unit symbol. See for example [[:File:Yes check.svg]].', 'show-big-image' => 'Displayed under an image at the image description page, when it is displayed smaller there than it was uploaded.', 'show-big-image-thumb' => 'File info displayed on file description page.', 'file-info-gif-looped' => 'Part of the information provided about a [http://en.wikipedia.org/wiki/Gif .gif file] on its file description page. Looped means repeating in the context of an animated gif. It is a sequence of images, each displayed after the other, and the first one displayed after the last, in a never ending loop. For example of message in use see [[:File:Mouse10.gif]].', 'file-info-gif-frames' => 'Part of the information provided about a [http://en.wikipedia.org/wiki/Gif .gif file] on its file description page.', +'file-info-png-looped' => 'Part of the information provided about a [http://en.wikipedia.org/wiki/APNG .apng file] on its file description page. Looped means repeating indefinetly in the context of an animated png. It is a sequence of images, each displayed after the other, and the first one displayed after the last, in a never ending loop.', +'file-info-png-repeat' => 'Part of the information provided about a [http://en.wikipedia.org/wiki/APNG .apng file] on its file description page. The sequence of images is repeating a limited amount of time. It is a sequence of images, each displayed after the other, and the first one displayed after the last, for $1 times.', +'file-info-png-frames' => 'Part of the information provided about a [http://en.wikipedia.org/wiki/APNG .apng file] on its file description page. + +The variable $1 is the number of individual frames in an animated gif file. + +For example of message in use see [[:File:Mouse10.gif]].', # Special:NewFiles 'newimages' => 'Page title of [[Special:NewImages]].', @@ -3146,7 +3221,9 @@ The sentences are for explanation only and are not shown to the user.", {{Identical|Height}}', 'exif-bitspersample' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].', -'exif-compression' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].', +'exif-compression' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail]. + +This field labels what the compression of the image is. It is commonly seen in Tiff images. It uses messages like {{msg-mw|exif-compression-1}} for the value. http://en.wikipedia.org/wiki/TIFF#TIFF_Compression_Tag has information about this field.', 'exif-photometricinterpretation' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].', 'exif-orientation' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].', 'exif-samplesperpixel' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].', @@ -3368,6 +3445,9 @@ See also Wikipedia on [http://en.wikipedia.org/wiki/Focal_length#In_photography {{Identical|Longitude}}', 'exif-gpsdatestamp' => 'Date (does not generally include time unless recorded in XMP) that GPS measurement was taken, in UTC. Since often this is at the same date as photo was taken, this is sometimes more reliable than {{msg-mw|exif-datetimeoriginal}}.', +'exif-objectname' => "This is a short name for the image or other media. (As compared to {{msg-mw|exif-imagedescription}} which is a long description of the image). This is sometimes an id number used to identify the photo, or a (short) title of the photo. + +This property is extracted based on XMP's dc:title property ( http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart1.pdf ), PNG's title keyword ( http://www.w3.org/TR/PNG/#11keywords ), or IPTC-iim 2:05 Object name property ( http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf ).", # EXIF attributes 'exif-compression-6' => '{{optional}}', @@ -3520,21 +3600,21 @@ Please leave the link http://www.mediawiki.org/wiki/Manual:External_editors exac {{Identical|All}}', # E-mail address confirmation -'confirmemail' => 'Title of [[Special:ConfirmEmail]] page.', -'confirmemail_noemail' => 'Failure message on [[Special:ConfirmEmail]].', -'confirmemail_text' => 'Explanation on [[Special:ConfirmEmail]]', -'confirmemail_pending' => 'Message on [[Special:ConfirmEmail]] when confirmation of e-mail not yet complete.', -'confirmemail_send' => 'Button label on [[Special:ConfirmEmail]]', -'confirmemail_sent' => 'Message appearing after button {{msg-mw|Confirmemail_send}} activated on [[Special:ConfirmEmail]].', -'confirmemail_sendfailed' => 'Failure message to do with [[Special:ConfirmEmail]]. +'confirmemail' => 'Title of [[Special:ConfirmEmail]] page.', +'confirmemail_noemail' => 'Failure message on [[Special:ConfirmEmail]].', +'confirmemail_text' => 'Explanation on [[Special:ConfirmEmail]]', +'confirmemail_pending' => 'Message on [[Special:ConfirmEmail]] when confirmation of e-mail not yet complete.', +'confirmemail_send' => 'Button label on [[Special:ConfirmEmail]]', +'confirmemail_sent' => 'Message appearing after button {{msg-mw|Confirmemail_send}} activated on [[Special:ConfirmEmail]].', +'confirmemail_sendfailed' => 'Failure message to do with [[Special:ConfirmEmail]]. $1 is a message from the e-mail delivery system.', -'confirmemail_needlogin' => 'Used on [[Special:ConfirmEmail]] when you are logged out. +'confirmemail_needlogin' => 'Used on [[Special:ConfirmEmail]] when you are logged out. * $1 is a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description', -'confirmemail_loggedin' => 'Explanation on [[Special:ConfirmEmail]] on completion of confirmation.', -'confirmemail_subject' => 'Text in subject box of e-mail sent to user during e-mail address confirmation +'confirmemail_loggedin' => 'Explanation on [[Special:ConfirmEmail]] on completion of confirmation.', +'confirmemail_subject' => 'Text in subject box of e-mail sent to user during e-mail address confirmation {{Identical|SITENAME e-mail address confirmation}}', -'confirmemail_body' => 'This message is sent as an e-mail to users when they add or change their e-mail adress in [[Special:Preferences]]. +'confirmemail_body' => 'This message is sent as an e-mail to users when they add or change their e-mail adress in [[Special:Preferences]]. *$1 is the IP address of the user that changed the e-mail address *$2 is the name of the user *$3 is a URL to [[Special:ConfirmEmail]] @@ -3542,8 +3622,30 @@ $1 is a message from the e-mail delivery system.', *$5 is a URL to [[Special:InvalidateEmail]] *$6 is a date *$7 is a time', -'confirmemail_invalidated' => 'This is the text of the special page [[Special:InvalidateEmail|InvalidateEmail]] (with the title in {{msg-mw|Invalidateemail}}) where user goes if he chooses the cancel e-mail confirmation link from the confirmation e-mail.', -'invalidateemail' => "This is the '''name of the special page''' where user goes if he chooses the cancel e-mail confirmation link from the confirmation e-mail.", +'confirmemail_body_changed' => 'This message is sent as an e-mail to users when they add or change their e-mail adress in [[Special:Preferences]]. + +See also [[MediaWiki:Confirmemail_body_set]]. + +*$1 is the IP address of the user that changed the e-mail address +*$2 is the name of the user +*$3 is a URL to [[Special:ConfirmEmail]] +*$4 is a time and date (duplicated by $6 and $7) +*$5 is a URL to [[Special:InvalidateEmail]] +*$6 is a date +*$7 is a time', +'confirmemail_body_set' => 'This is used in a confirmation e-mail sent when a contact e-mail address is set. + +See also [[MediaWiki:Confirmemail_body_changed]]. + +*$1 is the IP address of the user that set the e-mail address +*$2 is the name of the user +*$3 is a URL to [[Special:ConfirmEmail]] +*$4 is a time and date (duplicated by $6 and $7) +*$5 is a URL to [[Special:InvalidateEmail]] +*$6 is a date +*$7 is a time', +'confirmemail_invalidated' => 'This is the text of the special page [[Special:InvalidateEmail|InvalidateEmail]] (with the title in {{msg-mw|Invalidateemail}}) where user goes if he chooses the cancel e-mail confirmation link from the confirmation e-mail.', +'invalidateemail' => "This is the '''name of the special page''' where user goes if he chooses the cancel e-mail confirmation link from the confirmation e-mail.", # Trackbacks 'trackbackbox' => '* $1 is the content of [[MediaWiki:Trackbackexcerpt]] or [[MediaWiki:Trackback]], depending if the trackback has an excerpt @@ -3764,6 +3866,7 @@ Name of month in Hebrew calender.', # Core parser functions 'unknown_extension_tag' => '* Description: This is an error shown when you use an unknown extension tag name. This feature allows tags like

     to be called with a parser like {{#tag:pre}}.
     * Parameter $1: This is the unknown extension tag name.',
    +'duplicate-defaultsort' => 'Definition of [http://en.wikipedia.org/wiki/Sorting sort key] on Wikipedia.',
     
     # Special:Version
     'version'                          => 'Name of special page displayed in [[Special:SpecialPages]]
    @@ -3789,6 +3892,11 @@ There are no such extensions here, so look at [[wikipedia:Special:Version]] for
     
     {{Identical|Revision}}',
     'version-license'                  => '{{Identical|License}}',
    +'version-poweredby-credits'        => 'Message shown on [[Special:Version]]. Parameters are:
    +*$1: the current year
    +*$2: a list of selected MediaWiki authors',
    +'version-poweredby-others'         => 'Used at the very end of {{msg-mw|version-poweredby-credits}} on [[Special:Version]]. First, there\'s a long list of selected MediaWiki authors, then the word "and" (from {{msg-mw|and}}) follows and then this translation, which is supposed to credit the many other people than developer helping with MediaWiki.',
    +'version-license-info'             => '[[wikipedia:GNU GPL|GNU GPL]] notice shown at [[Special:Version]]. See http://www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html for available translations.',
     'version-software-product'         => 'Shown in [[Special:Version]]',
     'version-software-version'         => '{{Identical|Version}}',
     
    @@ -3846,7 +3954,9 @@ $1 is the name of the requested file.',
     'intentionallyblankpage' => 'Text displayed in [[Special:BlankPage]].',
     
     # External image whitelist
    -'external_image_whitelist' => "As usual please leave all the wiki markup, including the spaces, as they are. You can translate the text, including 'Leave this line exactly as it is'. The first line of this messages has one (1) leading space.",
    +'external_image_whitelist' => "As usual please leave all the wiki markup, including the spaces, as they are. You can translate the text, including 'Leave this line exactly as it is'. The first line of this messages has one (1) leading space.
    +
    +Definition of [http://en.wikipedia.org/wiki/Regular_expression regular expression] on Wikipedia.",
     
     # Special:Tags
     'tags'                    => "Shown on [[Special:Specialpages]] for page listing the tags that the software may mark an edit with, and their meaning. For more information on tags see [http://www.mediawiki.org/wiki/Manual:Tags Mediawiki].
    @@ -3868,6 +3978,19 @@ Used on [[Special:Tags]]. Verb. Used as display text on a link to create/edit a
     
     * $1 is the number of changes marked with the tag',
     
    +# Special:ComparePages
    +'comparepages'     => 'The title of [[Special:ComparePages]]',
    +'compare-selector' => 'Header of the form on [[Special:ComparePages]]',
    +'compare-page1'    => 'Label for the field of the 1st page in the comparison for [[Special:ComparePages]]
    +{{Identical|Page}}',
    +'compare-page2'    => 'Label for the field of the 2nd page in the comparison for [[Special:ComparePages]]
    +{{Identical|Page}}',
    +'compare-rev1'     => 'Label for the field of the 1st revision in the comparison for [[Special:ComparePages]]
    +{{Identical|Revision}}',
    +'compare-rev2'     => 'Label for the field of the 2nd revision in the comparison for [[Special:ComparePages]]
    +{{Identical|Revision}}',
    +'compare-submit'   => 'Submit button on [[Special:ComparePages]]',
    +
     # Database error messages
     'dberr-header'    => 'This message does not allow any wiki nor html markup.',
     'dberr-problems'  => 'This message does not allow any wiki nor html markup.',
    @@ -3885,4 +4008,8 @@ Used on [[Special:Tags]]. Verb. Used as display text on a link to create/edit a
     
     {{Identical|Other}}',
     
    +# SQLite database support
    +'sqlite-has-fts' => 'Shown on Special:Version, $1 is version',
    +'sqlite-no-fts'  => 'Shown on Special:Version, $1 is version',
    +
     );
    diff --git a/languages/messages/MessagesQu.php b/languages/messages/MessagesQu.php
    index af92fed0..e263f11a 100644
    --- a/languages/messages/MessagesQu.php
    +++ b/languages/messages/MessagesQu.php
    @@ -8,6 +8,7 @@
      * @file
      *
      * @author AlimanRuna
    + * @author Diego Grez
      * @author Omnipaedista
      * @author Reedy
      * @author The Evil IP address
    @@ -125,70 +126,70 @@ $specialPageAliases = array(
     );
     
     $magicWords = array(
    -	'redirect'              => array( '0', '#PUSAPUNA', '#REDIRECCIÓN', '#REDIRECT' ),
    +	'redirect'              => array( '0', '#PUSAPUNA', '#REDIRECCIÓN', '#REDIRECCION', '#REDIRECT' ),
     	'notoc'                 => array( '0', '__YUYARINANNAQ__', '__NOTDC__', '__NOTOC__' ),
    -	'nogallery'             => array( '0', '__RIKCHASUYUNNAQ__', '__NOGALERÍA__', '__NOGALLERY__' ),
    +	'nogallery'             => array( '0', '__RIKCHASUYUNNAQ__', '__NOGALERÍA__', '__NOGALERIA__', '__NOGALLERY__' ),
     	'forcetoc'              => array( '0', '__YUYARINATAATIPACHIY__', '__FORZARTDC__', '__FORZARTOC__', '__FORCETOC__' ),
     	'toc'                   => array( '0', '__YUYARINA__', '__TDC__', '__TOC__' ),
    -	'noeditsection'         => array( '0', '__AMARAKITAHUKCHAYCHU__', '__NOEDITARSECCIÓN__', '__NOEDITSECTION__' ),
    -	'noheader'              => array( '0', '__UMANNAQ__', '__NOTÍTULO__', '__NOHEADER__' ),
    -	'currentmonth'          => array( '1', 'KUNANKILLA', 'MESACTUAL', 'MES ACTUAL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
    -	'currentmonthname'      => array( '1', 'KUNANKILLASUTI', 'NOMBREMESACTUAL', 'NOMBRE MES ACTUAL', 'CURRENTMONTHNAME' ),
    -	'currentmonthnamegen'   => array( '1', 'KUNANKILLASUTIP', 'CURRENTMONTHNAMEGEN' ),
    -	'currentmonthabbrev'    => array( '1', 'KUNANKILLAPISI', 'CURRENTMONTHABBREV' ),
    -	'currentday'            => array( '1', 'KUNANPUNCHAW', 'DÍAACTUAL', 'DIAACTUAL', 'DÍA ACTUAL', 'DIA ACTUAL', 'CURRENTDAY' ),
    -	'currentday2'           => array( '1', 'KUNANPUNCHAW2', 'DÍAACTUAL2', 'DIAACTUAL2', 'DÍA ACTUAL2', 'DIA ACTUAL2', 'CURRENTDAY2' ),
    +	'noeditsection'         => array( '0', '__AMARAKITAHUKCHAYCHU__', '__NOEDITARSECCIÓN__', '__NOEDITARSECCION__', '__NOEDITSECTION__' ),
    +	'noheader'              => array( '0', '__UMANNAQ__', '__NOTÍTULO__', '__NOTITULO__', '__NOHEADER__' ),
    +	'currentmonth'          => array( '1', 'KUNANKILLA', 'MESACTUAL', 'MES_ACTUAL', 'MESACTUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
    +	'currentmonthname'      => array( '1', 'KUNANKILLASUTI', 'NOMBREMESACTUAL', 'NOMBRE_MES_ACTUAL', 'CURRENTMONTHNAME' ),
    +	'currentmonthnamegen'   => array( '1', 'KUNANKILLASUTIP', 'GENERADORNOMBREMESACTUAL', 'CURRENTMONTHNAMEGEN' ),
    +	'currentmonthabbrev'    => array( '1', 'KUNANKILLAPISI', 'ABREVIACIONNOMBREMESACTUAL', 'ABREVIACIÓNNOMBREMESACTUAL', 'CURRENTMONTHABBREV' ),
    +	'currentday'            => array( '1', 'KUNANPUNCHAW', 'DÍAACTUAL', 'DIAACTUAL', 'DÍA_ACTUAL', 'DIA_ACTUAL', 'CURRENTDAY' ),
    +	'currentday2'           => array( '1', 'KUNANPUNCHAW2', 'DÍAACTUAL2', 'DIAACTUAL2', 'DÍA_ACTUAL2', 'DIA_ACTUAL2', 'CURRENTDAY2' ),
     	'currentdayname'        => array( '1', 'KUNANPUNCHAWSUTI', 'NOMBREDÍAACTUAL', 'NOMBREDIAACTUAL', 'CURRENTDAYNAME' ),
    -	'currentyear'           => array( '1', 'KUNANWATA', 'AÑOACTUAL', 'AÑO ACTUAL', 'CURRENTYEAR' ),
    -	'currenttime'           => array( '1', 'KUNANPACHA', 'CURRENTTIME' ),
    -	'currenthour'           => array( '1', 'KUNANURA', 'HORA ACTUAL', 'HORAACTUAL', 'CURRENTHOUR' ),
    +	'currentyear'           => array( '1', 'KUNANWATA', 'AÑOACTUAL', 'AÑO_ACTUAL', 'CURRENTYEAR' ),
    +	'currenttime'           => array( '1', 'KUNANPACHA', 'HORAACTUAL', 'HORA_ACTUAL', 'CURRENTTIME' ),
    +	'currenthour'           => array( '1', 'KUNANURA', 'HORA_ACTUAL', 'HORAACTUAL', 'HORA_MINUTOS_ACTUAL', 'HORAMINUTOSACTUAL', 'CURRENTHOUR' ),
     	'localmonth'            => array( '1', 'KAYPIKILLA', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
    -	'localmonthname'        => array( '1', 'KAYPIKILLASUTI', 'LOCALMONTHNAME' ),
    -	'localmonthnamegen'     => array( '1', 'KAYPIKILLASUTIP', 'LOCALMONTHNAMEGEN' ),
    -	'localmonthabbrev'      => array( '1', 'KAYPIKILLAPISI', 'LOCALMONTHABBREV' ),
    -	'localday'              => array( '1', 'KAYPIPUNCHAW', 'DÍALOCAL', 'LOCALDAY' ),
    -	'localday2'             => array( '1', 'KAYPIPUNCHAW2', 'LOCALDAY2' ),
    -	'localdayname'          => array( '1', 'KAYPIPUNCHAWSUTI', 'LOCALDAYNAME' ),
    +	'localmonthname'        => array( '1', 'KAYPIKILLASUTI', 'NOMBREMESLOCAL', 'LOCALMONTHNAME' ),
    +	'localmonthnamegen'     => array( '1', 'KAYPIKILLASUTIP', 'GENERADORNOMBREMESLOCAL', 'LOCALMONTHNAMEGEN' ),
    +	'localmonthabbrev'      => array( '1', 'KAYPIKILLAPISI', 'ABREVIACIONMESLOCAL', 'LOCALMONTHABBREV' ),
    +	'localday'              => array( '1', 'KAYPIPUNCHAW', 'DÍALOCAL', 'DIALOCAL', 'LOCALDAY' ),
    +	'localday2'             => array( '1', 'KAYPIPUNCHAW2', 'DIALOCAL2', 'DÍALOCAL2', 'LOCALDAY2' ),
    +	'localdayname'          => array( '1', 'KAYPIPUNCHAWSUTI', 'NOMBREDIALOCAL', 'NOMBREDÍALOCAL', 'LOCALDAYNAME' ),
     	'localyear'             => array( '1', 'KAYPIWATA', 'AÑOLOCAL', 'LOCALYEAR' ),
    -	'localtime'             => array( '1', 'KAYPIPACHA', 'LOCALTIME' ),
    -	'localhour'             => array( '1', 'KAYPIURA', 'HORALOCAL', 'LOCALHOUR' ),
    -	'numberofpages'         => array( '1', 'HAYKAPANQA', 'NÚMERODEPÁGINAS', 'NUMBEROFPAGES' ),
    -	'numberofarticles'      => array( '1', 'HAYKAQILLQA', 'NÚMERODEARTÍCULOS', 'NUMBEROFARTICLES' ),
    -	'numberoffiles'         => array( '1', 'HAYKAWILLANIQI', 'NÚMERODEARCHIVOS', 'NUMBEROFFILES' ),
    -	'numberofusers'         => array( '1', 'HAYKARURAQ', 'NÚMERODEUSUARIOS', 'NUMBEROFUSERS' ),
    -	'numberofactiveusers'   => array( '1', 'HAYKARURACHKAQ', 'NÚMERODEUSUARIOSACTIVOS', 'NUMBEROFACTIVEUSERS' ),
    -	'numberofedits'         => array( '1', 'HAYKALLAMKAPUSQA', 'NÚMERODEEDICIONES', 'NUMBEROFEDITS' ),
    -	'numberofviews'         => array( '1', 'HAYKAQHAWASQA', 'HAYKAQAWASQA', 'NUMBEROFVIEWS' ),
    -	'pagename'              => array( '1', 'PANQASUTI', 'PAGENAME' ),
    -	'pagenamee'             => array( '1', 'PANQASUTIE', 'PAGENAMEE' ),
    -	'namespace'             => array( '1', 'SUTIKITI', 'NAMESPACE' ),
    -	'namespacee'            => array( '1', 'SUTIKITIE', 'NAMESPACEE' ),
    -	'talkspace'             => array( '1', 'RIMANAKUYKITI', 'RIMAYKITI', 'TALKSPACE' ),
    -	'talkspacee'            => array( '1', 'RIMANAKUYKITIE', 'RIMAYKITIE', 'TALKSPACEE' ),
    -	'subjectspace'          => array( '1', 'QILLQAKITI', 'SUBJECTSPACE', 'ARTICLESPACE' ),
    -	'subjectspacee'         => array( '1', 'QILLQAKITIE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
    -	'fullpagename'          => array( '1', 'HUNTAPANQASUTI', 'FULLPAGENAME' ),
    -	'fullpagenamee'         => array( '1', 'HUNTAPANQASUTIE', 'FULLPAGENAMEE' ),
    -	'subpagename'           => array( '1', 'URINPANQASUTI', 'SUBPAGENAME' ),
    -	'subpagenamee'          => array( '1', 'URINPANQASUTIE', 'SUBPAGENAMEE' ),
    -	'basepagename'          => array( '1', 'TIKSIPANQASUTI', 'BASEPAGENAME' ),
    -	'basepagenamee'         => array( '1', 'TIKSIPANQASUTIE', 'BASEPAGENAMEE' ),
    -	'talkpagename'          => array( '1', 'RIMANAKUYPANQASUTI', 'TALKPAGENAME' ),
    -	'talkpagenamee'         => array( '1', 'RIMANAKUYPANQASUTIE', 'TALKPAGENAMEE' ),
    -	'subjectpagename'       => array( '1', 'QILLQAPANQASUTI', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
    -	'subjectpagenamee'      => array( '1', 'QILLQAPANQASUTIE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
    -	'msg'                   => array( '0', 'WILLA:', 'MSG:' ),
    +	'localtime'             => array( '1', 'KAYPIPACHA', 'HORALOCAL', 'LOCALTIME' ),
    +	'localhour'             => array( '1', 'KAYPIURA', 'HORALOCAL', 'HORAMINUTOSLOCAL', 'LOCALHOUR' ),
    +	'numberofpages'         => array( '1', 'HAYKAPANQA', 'NÚMERODEPÁGINAS', 'NUMERODEPAGINAS', 'NUMBEROFPAGES' ),
    +	'numberofarticles'      => array( '1', 'HAYKAQILLQA', 'NÚMERODEARTÍCULOS', 'NUMERODEARTICULOS', 'NUMBEROFARTICLES' ),
    +	'numberoffiles'         => array( '1', 'HAYKAWILLANIQI', 'NÚMERODEARCHIVOS', 'NUMERODEARCHIVOS', 'NUMBEROFFILES' ),
    +	'numberofusers'         => array( '1', 'HAYKARURAQ', 'NÚMERODEUSUARIOS', 'NUMERODEUSUARIOS', 'NUMBEROFUSERS' ),
    +	'numberofactiveusers'   => array( '1', 'HAYKARURACHKAQ', 'NÚMERODEUSUARIOSACTIVOS', 'NUMERODEUSUARIOSACTIVOS', 'NUMBEROFACTIVEUSERS' ),
    +	'numberofedits'         => array( '1', 'HAYKALLAMKAPUSQA', 'NÚMERODEEDICIONES', 'NUMERODEEDICIONES', 'NUMBEROFEDITS' ),
    +	'numberofviews'         => array( '1', 'HAYKAQHAWASQA', 'HAYKAQAWASQA', 'NÚMERODEVISTAS', 'NUMERODEVISTAS', 'NUMBEROFVIEWS' ),
    +	'pagename'              => array( '1', 'PANQASUTI', 'NOMBREDEPAGINA', 'NOMBREDEPÁGINA', 'PAGENAME' ),
    +	'pagenamee'             => array( '1', 'PANQASUTIE', 'NOMBREDEPAGINAC', 'NOMBREDEPÁGINAC', 'PAGENAMEE' ),
    +	'namespace'             => array( '1', 'SUTIKITI', 'ESPACIODENOMBRE', 'NAMESPACE' ),
    +	'namespacee'            => array( '1', 'SUTIKITIE', 'ESPACIODENOMBREC', 'NAMESPACEE' ),
    +	'talkspace'             => array( '1', 'RIMANAKUYKITI', 'RIMAYKITI', 'ESPACIODEDISCUSION', 'ESPACIODEDISCUSIÓN', 'TALKSPACE' ),
    +	'talkspacee'            => array( '1', 'RIMANAKUYKITIE', 'RIMAYKITIE', 'ESPACIODEDISCUSIONC', 'TALKSPACEE' ),
    +	'subjectspace'          => array( '1', 'QILLQAKITI', 'ESPACIODEASUNTO', 'ESPACIODETEMA', 'ESPACIODEARTÍCULO', 'ESPACIODEARTICULO', 'SUBJECTSPACE', 'ARTICLESPACE' ),
    +	'subjectspacee'         => array( '1', 'QILLQAKITIE', 'ESPACIODETEMAC', 'ESPACIODEASUNTOC', 'ESPACIODEARTICULOC', 'ESPACIODEARTÍCULOC', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
    +	'fullpagename'          => array( '1', 'HUNTAPANQASUTI', 'NOMBREDEPÁGINACOMPLETA', 'NOMBREDEPAGINACOMPLETA', 'NOMBREDEPÁGINAENTERA', 'NOMBREDEPAGINAENTERA', 'FULLPAGENAME' ),
    +	'fullpagenamee'         => array( '1', 'HUNTAPANQASUTIE', 'NOMBRECOMPLETODEPAGINAC', 'NOMBRECOMPLETODEPÁGINAC', 'FULLPAGENAMEE' ),
    +	'subpagename'           => array( '1', 'URINPANQASUTI', 'NOMBREDESUBPAGINA', 'NOMBREDESUBPÁGINA', 'SUBPAGENAME' ),
    +	'subpagenamee'          => array( '1', 'URINPANQASUTIE', 'NOMBREDESUBPAGINAC', 'NOMBREDESUBPÁGINAC', 'SUBPAGENAMEE' ),
    +	'basepagename'          => array( '1', 'TIKSIPANQASUTI', 'NOMBREDEPAGINABASE', 'NOMBREDEPÁGINABASE', 'BASEPAGENAME' ),
    +	'basepagenamee'         => array( '1', 'TIKSIPANQASUTIE', 'NOMBREDEPAGINABASEC', 'NOMBREDEPÁGINABASEC', 'BASEPAGENAMEE' ),
    +	'talkpagename'          => array( '1', 'RIMANAKUYPANQASUTI', 'NOMBREDEPÁGINADEDISCUSIÓN', 'NOMBREDEPAGINADEDISCUSION', 'NOMBREDEPAGINADISCUSION', 'NOMBREDEPÁGINADISCUSIÓN', 'TALKPAGENAME' ),
    +	'talkpagenamee'         => array( '1', 'RIMANAKUYPANQASUTIE', 'NOMBREDEPÁGINADEDISCUSIÓNC', 'NOMBREDEPAGINADEDISCUSIONC', 'NOMBREDEPAGINADISCUSIONC', 'NOMBREDEPÁGINADISCUSIÓNC', 'TALKPAGENAMEE' ),
    +	'subjectpagename'       => array( '1', 'QILLQAPANQASUTI', 'NOMBREDEPAGINADETEMA', 'NOMBREDEPÁGINADETEMA', 'NOMBREDEPÁGINADEASUNTO', 'NOMBREDEPAGINADEASUNTO', 'NOMBREDEPAGINADEARTICULO', 'NOMBREDEPÁGINADEARTÍCULO', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
    +	'subjectpagenamee'      => array( '1', 'QILLQAPANQASUTIE', 'NOMBREDEPAGINADETEMAC', 'NOMBREDEPÁGINADETEMAC', 'NOMBREDEPÁGINADEASUNTOC', 'NOMBREDEPAGINADEASUNTOC', 'NOMBREDEPAGINADEARTICULOC', 'NOMBREDEPÁGINADEARTÍCULOC', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
    +	'msg'                   => array( '0', 'WILLA:', 'MSJ:', 'MSG:' ),
     	'subst'                 => array( '0', 'WAKCHAY:', 'SUBST:' ),
     	'msgnw'                 => array( '0', 'WILLAMUSUQ:', 'MSGNW:' ),
    -	'img_thumbnail'         => array( '1', 'rikchacha', 'thumbnail', 'thumb' ),
    -	'img_manualthumb'       => array( '1', 'rikchacha=$1', 'thumbnail=$1', 'thumb=$1' ),
    +	'img_thumbnail'         => array( '1', 'rikchacha', 'miniaturadeimagen', 'miniatura', 'mini', 'thumbnail', 'thumb' ),
    +	'img_manualthumb'       => array( '1', 'rikchacha=$1', 'miniaturadeimagen=$1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ),
     	'img_right'             => array( '1', 'paña', 'alliq', 'derecha', 'dcha', 'der', 'right' ),
     	'img_left'              => array( '1', 'lluqi', 'ichuq', 'izquierda', 'izda', 'izq', 'left' ),
     	'img_none'              => array( '1', 'manaima', 'mana', 'ninguna', 'nada', 'no', 'ninguno', 'none' ),
     	'img_center'            => array( '1', 'chawpi', 'centro', 'centrado', 'centrada', 'centrar', 'center', 'centre' ),
     	'img_framed'            => array( '1', 'inchuyuq', 'inchu', 'marco', 'enmarcado', 'enmarcada', 'framed', 'enframed', 'frame' ),
    -	'img_frameless'         => array( '1', 'inchunnaq', 'sinmarco', 'sin embarcar', 'sinenmarcar', 'sin enmarcar', 'frameless' ),
    -	'img_page'              => array( '1', 'panqa=$1', 'page=$1', 'page $1' ),
    +	'img_frameless'         => array( '1', 'inchunnaq', 'sinmarco', 'sin_embarcar', 'sinenmarcar', 'sin_enmarcar', 'frameless' ),
    +	'img_page'              => array( '1', 'panqa=$1', 'pagina=$1', 'página=$1', 'pagina $1', 'página $1', 'page=$1', 'page $1' ),
     	'img_upright'           => array( '1', 'sayaq', 'sayaq=$1', 'upright', 'upright=$1', 'upright $1' ),
     	'img_border'            => array( '1', 'saywa', 'borde', 'border' ),
     	'img_baseline'          => array( '1', 'tiksisiqi', 'baseline' ),
    @@ -199,64 +200,64 @@ $magicWords = array(
     	'img_middle'            => array( '1', 'ukhupi', 'middle' ),
     	'img_bottom'            => array( '1', 'sikipi', 'bottom' ),
     	'img_text_bottom'       => array( '1', 'qillqasiki', 'text-bottom' ),
    -	'img_link'              => array( '1', 'tinki=$1', 'link=$1' ),
    +	'img_link'              => array( '1', 'tinki=$1', 'vínculo=$1', 'vinculo=$1', 'enlace=$1', 'link=$1' ),
     	'img_alt'               => array( '1', 'wak=$1', 'alt=$1' ),
     	'int'                   => array( '0', 'WILLAY:', 'INT:' ),
    -	'sitename'              => array( '1', 'TIYAYSUTI', 'SITENAME' ),
    -	'ns'                    => array( '0', 'SKITI:', 'NS:' ),
    -	'localurl'              => array( '0', 'KAYLLAURL:', 'LOCALURL:' ),
    -	'localurle'             => array( '0', 'KAYLLAURLE:', 'LOCALURLE:' ),
    +	'sitename'              => array( '1', 'TIYAYSUTI', 'NOMBREDESITIO', 'SITENAME' ),
    +	'ns'                    => array( '0', 'SKITI:', 'EN:', 'NS:' ),
    +	'localurl'              => array( '0', 'KAYLLAURL:', 'URLLOCAL', 'LOCALURL:' ),
    +	'localurle'             => array( '0', 'KAYLLAURLE:', 'URLLOCALC:', 'LOCALURLE:' ),
     	'server'                => array( '0', 'SIRWIQ', 'SERVIDOR', 'SERVER' ),
     	'servername'            => array( '0', 'SIRWIQSUTI', 'NOMBRESERVIDOR', 'SERVERNAME' ),
    -	'scriptpath'            => array( '0', 'QILLQAÑAN', 'QILLQANAN', 'RUTASCRIPT', 'SCRIPTPATH' ),
    -	'grammar'               => array( '0', 'SIMIKAMACHIY:', 'GRAMMAR:' ),
    -	'gender'                => array( '0', 'QHARIWARMI:', 'QARIWARMI:', 'GÉNERO:', 'GENDER:' ),
    -	'notitleconvert'        => array( '0', '__AMASUTITAHUKCHAYCHU__', '__NOTITLECONVERT__', '__NOTC__' ),
    -	'nocontentconvert'      => array( '0', '__AMASAMIQTAHUKCHAYCHU__', '__NOCONTENTCONVERT__', '__NOCC__' ),
    -	'currentweek'           => array( '1', 'KUNANSIMANA', 'CURRENTWEEK' ),
    -	'currentdow'            => array( '1', 'KUNANSIMANAPUNCHAW', 'CURRENTDOW' ),
    -	'localweek'             => array( '1', 'KAYLLASIMANA', 'LOCALWEEK' ),
    -	'localdow'              => array( '1', 'KAYLLASIMANAPUNCHAW', 'LOCALDOW' ),
    -	'revisionid'            => array( '1', 'MUSUQCHASQAID', 'REVISIONID' ),
    -	'revisionday'           => array( '1', 'MUSUQCHASQAPUNCHAW', 'REVISIONDAY' ),
    -	'revisionday2'          => array( '1', 'MUSUQCHASQAPUNCHAW2', 'REVISIONDAY2' ),
    -	'revisionmonth'         => array( '1', 'MUSUQCHASQAKILLA', 'REVISIONMONTH' ),
    -	'revisionyear'          => array( '1', 'MUSUQCHASQAWATA', 'REVISIONYEAR' ),
    -	'revisiontimestamp'     => array( '1', 'MUSUQCHASQAPACHAQILLPA', 'REVISIONTIMESTAMP' ),
    -	'revisionuser'          => array( '1', 'MUSUQCHASQARURAQ', 'REVISIONUSER' ),
    +	'scriptpath'            => array( '0', 'QILLQAÑAN', 'QILLQANAN', 'RUTASCRIPT', 'RUTADESCRIPT', 'SCRIPTPATH' ),
    +	'grammar'               => array( '0', 'SIMIKAMACHIY:', 'GRAMATICA:', 'GRAMÁTICA:', 'GRAMMAR:' ),
    +	'gender'                => array( '0', 'QHARIWARMI:', 'QARIWARMI:', 'GÉNERO:', 'GENERO:', 'GENDER:' ),
    +	'notitleconvert'        => array( '0', '__AMASUTITAHUKCHAYCHU__', '__NOCONVERTIRTITULO__', '__NOCONVERTIRTÍTULO__', '__NOCT___', '__NOTITLECONVERT__', '__NOTC__' ),
    +	'nocontentconvert'      => array( '0', '__AMASAMIQTAHUKCHAYCHU__', '__NOCONVERTIRCONTENIDO__', '__NOCC___', '__NOCONTENTCONVERT__', '__NOCC__' ),
    +	'currentweek'           => array( '1', 'KUNANSIMANA', 'SEMANAACTUAL', 'CURRENTWEEK' ),
    +	'currentdow'            => array( '1', 'KUNANSIMANAPUNCHAW', 'DDSACTUAL', 'DIADESEMANAACTUAL', 'DÍADESEMANAACTUAL', 'CURRENTDOW' ),
    +	'localweek'             => array( '1', 'KAYLLASIMANA', 'SEMANALOCAL', 'LOCALWEEK' ),
    +	'localdow'              => array( '1', 'KAYLLASIMANAPUNCHAW', 'DDSLOCAL', 'DIADESEMANALOCAL', 'DÍADESEMANALOCAL', 'LOCALDOW' ),
    +	'revisionid'            => array( '1', 'MUSUQCHASQAID', 'IDDEREVISION', 'IDREVISION', 'IDDEREVISIÓN', 'IDREVISIÓN', 'REVISIONID' ),
    +	'revisionday'           => array( '1', 'MUSUQCHASQAPUNCHAW', 'DIADEREVISION', 'DIAREVISION', 'DÍADEREVISIÓN', 'DÍAREVISIÓN', 'REVISIONDAY' ),
    +	'revisionday2'          => array( '1', 'MUSUQCHASQAPUNCHAW2', 'DIADEREVISION2', 'DIAREVISION2', 'DÍADEREVISIÓN2', 'DÍAREVISIÓN2', 'REVISIONDAY2' ),
    +	'revisionmonth'         => array( '1', 'MUSUQCHASQAKILLA', 'MESDEREVISION', 'MESDEREVISIÓN', 'MESREVISION', 'MESREVISIÓN', 'REVISIONMONTH' ),
    +	'revisionyear'          => array( '1', 'MUSUQCHASQAWATA', 'AÑODEREVISION', 'AÑODEREVISIÓN', 'AÑOREVISION', 'AÑOREVISIÓN', 'REVISIONYEAR' ),
    +	'revisiontimestamp'     => array( '1', 'MUSUQCHASQAPACHAQILLPA', 'MARCADEHORADEREVISION', 'MARCADEHORADEREVISIÓN', 'REVISIONTIMESTAMP' ),
    +	'revisionuser'          => array( '1', 'MUSUQCHASQARURAQ', 'USUARIODEREVISION', 'USUARIODEREVISIÓN', 'REVISIONUSER' ),
     	'plural'                => array( '0', 'ACHKA:', 'PLURAL:' ),
    -	'fullurl'               => array( '0', 'HUNTAURL:', 'FULLURL:' ),
    -	'fullurle'              => array( '0', 'HUNTAURLE:', 'FULLURLE:' ),
    -	'lcfirst'               => array( '0', 'UCHUYÑAWPAQ:', 'UCHUYNAWPAQ:', 'LCFIRST:' ),
    -	'ucfirst'               => array( '0', 'HATUNÑAWPAQ:', 'HATUNNAWPAQ:', 'UCFIRST:' ),
    -	'lc'                    => array( '0', 'UCHUY:', 'LC:' ),
    -	'uc'                    => array( '0', 'HATUN:', 'UC:' ),
    +	'fullurl'               => array( '0', 'HUNTAURL:', 'URLCOMPLETA:', 'FULLURL:' ),
    +	'fullurle'              => array( '0', 'HUNTAURLE:', 'URLCOMPLETAC:', 'FULLURLE:' ),
    +	'lcfirst'               => array( '0', 'UCHUYÑAWPAQ:', 'UCHUYNAWPAQ:', 'PRIMEROMINUS;', 'PRIMEROMINÚS:', 'LCFIRST:' ),
    +	'ucfirst'               => array( '0', 'HATUNÑAWPAQ:', 'HATUNNAWPAQ:', 'PRIMEROMAYUS;', 'PRIMEROMAYÚS:', 'UCFIRST:' ),
    +	'lc'                    => array( '0', 'UCHUY:', 'MINUS:', 'MINÚS:', 'LC:' ),
    +	'uc'                    => array( '0', 'HATUN:', 'MAYUS:', 'MAYÚS:', 'UC:' ),
     	'raw'                   => array( '0', 'CHAWA:', 'RAW:' ),
     	'displaytitle'          => array( '1', 'SUTITARIKUCHIY', 'MOSTRARTÍTULO', 'MOSTRARTITULO', 'DISPLAYTITLE' ),
    -	'currentversion'        => array( '1', 'KUNANMUSUQCHASQA', 'REVISIÓNACTUAL', 'CURRENTVERSION' ),
    -	'urlencode'             => array( '0', 'URLLLAWICHAY', 'URL-LLAWICHAY', 'CODIFICAR', 'URLENCODE:' ),
    +	'currentversion'        => array( '1', 'KUNANMUSUQCHASQA', 'REVISIÓNACTUAL', 'VERSIONACTUAL', 'VERSIÓNACTUAL', 'CURRENTVERSION' ),
    +	'urlencode'             => array( '0', 'URLLLAWICHAY', 'URL-LLAWICHAY', 'CODIFICAR', 'CODIFICARURL:', 'URLENCODE:' ),
     	'anchorencode'          => array( '0', 'WATANALLAWICHAY', 'ANCHORENCODE' ),
    -	'currenttimestamp'      => array( '1', 'KUNANPACHAQILLPA', 'CURRENTTIMESTAMP' ),
    -	'localtimestamp'        => array( '1', 'KAYLLAPACHAQILLPA', 'LOCALTIMESTAMP' ),
    +	'currenttimestamp'      => array( '1', 'KUNANPACHAQILLPA', 'MARCADEHORAACTUAL', 'CURRENTTIMESTAMP' ),
    +	'localtimestamp'        => array( '1', 'KAYLLAPACHAQILLPA', 'MARCADEHORALOCAL', 'LOCALTIMESTAMP' ),
     	'directionmark'         => array( '1', 'PURIRIYSANANCHA', 'DIRECTIONMARK', 'DIRMARK' ),
    -	'language'              => array( '0', '#RIMAY:', '#LANGUAGE:' ),
    -	'contentlanguage'       => array( '1', 'SAMIQRIMAY', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
    +	'language'              => array( '0', '#RIMAY:', '#IDIOMA:', '#LANGUAGE:' ),
    +	'contentlanguage'       => array( '1', 'SAMIQRIMAY', 'IDIOMADELCONTENIDO', 'IDIOMADELCONT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
     	'pagesinnamespace'      => array( '1', 'SUTIKITIPIPANQAKUNA:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
    -	'numberofadmins'        => array( '1', 'HAYKAKAMACHIQ', 'NÚMEROADMINISITRADORES', 'NÚMEROADMINS', 'NUMBEROFADMINS' ),
    -	'formatnum'             => array( '0', 'YUPAYRIKCHAKUY', 'FORMATONÚMERO', 'FORMATNUM' ),
    +	'numberofadmins'        => array( '1', 'HAYKAKAMACHIQ', 'NÚMEROADMINISITRADORES', 'NÚMEROADMINS', 'NUMEROADMINS', 'NUMEROADMINISTRADORES', 'NUMERODEADMINISTRADORES', 'NUMERODEADMINS', 'NÚMERODEADMINISTRADORES', 'NÚMERODEADMINS', 'NÚMEROADMINIISTRADORES', 'NUMBEROFADMINS' ),
    +	'formatnum'             => array( '0', 'YUPAYRIKCHAKUY', 'FORMATONÚMERO', 'FORMATONUMERO', 'FORMATNUM' ),
     	'padleft'               => array( '0', 'PADLLUQI', 'PADICHUQ', 'PADLEFT' ),
     	'padright'              => array( '0', 'PADPAÑA', 'PADALLIQ', 'PADRIGHT' ),
    -	'special'               => array( '0', 'sapaq', 'special' ),
    -	'defaultsort'           => array( '1', 'ALLINCHAY', 'SIQINCHAY', 'ORDENAR', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
    -	'filepath'              => array( '0', 'WILLAÑIQIÑAN', 'WILLANIQINAN', 'RUTAARCHIVO', 'RUTARCHIVO', 'FILEPATH:' ),
    +	'special'               => array( '0', 'sapaq', 'especial', 'special' ),
    +	'defaultsort'           => array( '1', 'ALLINCHAY:', 'SIQINCHAY:', 'ORDENAR:', 'ORDENPREDETERMINADO:', 'CLAVEDEORDENPREDETERMINADO:', 'ORDENDECATEGORIAPREDETERMINADO:', 'ORDENDECATEGORÍAPREDETERMINADO:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
    +	'filepath'              => array( '0', 'WILLAÑIQIÑAN', 'WILLANIQINAN', 'RUTAARCHIVO', 'RUTARCHIVO', 'RUTAARCHIVO:', 'RUTARCHIVO:', 'RUTADEARCHIVO:', 'FILEPATH:' ),
     	'tag'                   => array( '0', 'unanchacha', 'UNANCHACHA', 'etiqueta', 'ETIQUETA', 'tag' ),
     	'hiddencat'             => array( '1', '__PAKASQAKATIGURIYA__', '__CATEGORÍAOCULTA__', '__HIDDENCAT__' ),
    -	'pagesincategory'       => array( '1', 'KATIGURIYAPIPANQAKUNA', 'PÁGINASENCATEGORÍA', 'PÁGINASENCAT', 'PAGSENCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
    -	'pagesize'              => array( '1', 'PANQACHHIKAN', 'PANQACHIKAN', 'PANQACHIKA', 'TAMAÑOPÁGINA', 'PAGESIZE' ),
    +	'pagesincategory'       => array( '1', 'KATIGURIYAPIPANQAKUNA', 'PÁGINASENCATEGORÍA', 'PÁGINASENCAT', 'PAGSENCAT', 'PAGINASENCATEGORIA', 'PAGINASENCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
    +	'pagesize'              => array( '1', 'PANQACHHIKAN', 'PANQACHIKAN', 'PANQACHIKA', 'TAMAÑOPÁGINA', 'TAMAÑODEPÁGINA', 'TAMAÑOPAGINA', 'TAMAÑODEPAGINA', 'PAGESIZE' ),
     	'index'                 => array( '1', '__UNANCHAY__', '__INDEXAR__', '__INDEX__' ),
     	'noindex'               => array( '1', '__AMAUNANCHAYCHU__', '__NOINDEXAR__', '__NOINDEX__' ),
    -	'numberingroup'         => array( '1', 'HUÑUPIYUPAY', 'HUNUPIYUPAY', 'NUMBERINGROUP', 'NUMINGROUP' ),
    -	'staticredirect'        => array( '1', '__TIYAQLLAPUSAPUNA__', '__STATICREDIRECT__' ),
    +	'numberingroup'         => array( '1', 'HUÑUPIYUPAY', 'HUNUPIYUPAY', 'NÚMEROENGRUPO', 'NUMEROENGRUPO', 'NUMENGRUPO', 'NÚMENGRUPO', 'NUMBERINGROUP', 'NUMINGROUP' ),
    +	'staticredirect'        => array( '1', '__TIYAQLLAPUSAPUNA__', '__REDIRECCIONESTATICA__', '__REDIRECCIÓNESTÁTICA__', '__STATICREDIRECT__' ),
     	'protectionlevel'       => array( '1', 'HAYKAAMACHAY', 'IMASINCHIAMACHAY', 'NIVELDEPROTECCIÓN', 'PROTECTIONLEVEL' ),
     );
     
    @@ -276,8 +277,7 @@ $messages = array(
     'tog-editsection'             => "Rakirilla llamk'apuyta saqillay [qillqay] t'inkiwan",
     'tog-editsectiononrightclick' => "Rakirilla llamk'apuyta saqillay paña butunta rakirip sutinpi ñit'ispa (JavaScript)",
     'tog-showtoc'                 => "Yuyarina wachuchasqata rikuchiy (kimsamanta aswan uma siq'iyuq p'anqakunapaq)",
    -'tog-rememberpassword'        => "Yaykuna rimata yuyaykuy llamk'ay tiyaypura",
    -'tog-editwidth'               => "Llamk'apuna k'itita mast'ariy lliw qhawana pampata hunt'ananpaq",
    +'tog-rememberpassword'        => "Ruraqpa sutiyta yaykuna rimaytapas yuyaykuy kay llika wamp'unapi ({{PLURAL:$1|huk p'unchawkama|$1 p'unchawkama}})",
     'tog-watchcreations'          => "Qallarisqay p'anqakunata watiqay.",
     'tog-watchdefault'            => "Hukchasqay p'anqakunata watiqay",
     'tog-watchmoves'              => "Astasqay p'anqakunata watiqay",
    @@ -424,31 +424,21 @@ $messages = array(
     'faqpage'        => 'Project:Pasaq tapuykuna',
     
     # Vector skin
    -'vector-action-addsection'   => 'Allwiyta yapay',
    -'vector-action-delete'       => 'Qulluy',
    -'vector-action-move'         => 'Astay',
    -'vector-action-protect'      => 'Amachay',
    -'vector-action-undelete'     => 'Qullusqata paqarichiy',
    -'vector-action-unprotect'    => 'Amaña amachaychu',
    -'vector-namespace-category'  => 'Katiguriya',
    -'vector-namespace-help'      => "Yanapana p'anqa",
    -'vector-namespace-image'     => 'Willañiqi',
    -'vector-namespace-main'      => "P'anqa",
    -'vector-namespace-media'     => "Midya p'anqa",
    -'vector-namespace-mediawiki' => 'Willay',
    -'vector-namespace-project'   => "Ruraykamay p'anqa",
    -'vector-namespace-special'   => "Sapaq p'anqa",
    -'vector-namespace-talk'      => 'Rimanakuy',
    -'vector-namespace-template'  => 'Plantilla',
    -'vector-namespace-user'      => "Ruraqpa p'anqan",
    -'vector-view-create'         => 'Kamariy',
    -'vector-view-edit'           => "Llamk'apuy",
    -'vector-view-history'        => 'Wiñay kawsayta qhaway',
    -'vector-view-view'           => 'Ñawiriy',
    -'vector-view-viewsource'     => 'Pukyu qillqata qhaway',
    -'actions'                    => 'Ruraykuna',
    -'namespaces'                 => "Suti k'itikuna",
    -'variants'                   => "Ñawra rikch'akuykuna",
    +'vector-action-addsection'       => 'Allwiyta yapay',
    +'vector-action-delete'           => 'Qulluy',
    +'vector-action-move'             => 'Astay',
    +'vector-action-protect'          => 'Amachay',
    +'vector-action-undelete'         => 'Qullusqata paqarichiy',
    +'vector-action-unprotect'        => 'Amaña amachaychu',
    +'vector-simplesearch-preference' => 'Maskanapaq kallpachasqa sakumanakunata atichiy (Vector qarallapi)',
    +'vector-view-create'             => 'Kamariy',
    +'vector-view-edit'               => "Llamk'apuy",
    +'vector-view-history'            => 'Wiñay kawsayta qhaway',
    +'vector-view-view'               => 'Ñawiriy',
    +'vector-view-viewsource'         => 'Pukyu qillqata qhaway',
    +'actions'                        => 'Ruraykuna',
    +'namespaces'                     => "Suti k'itikuna",
    +'variants'                       => "Ñawra rikch'akuykuna",
     
     'errorpagetitle'    => 'Pantasqa',
     'returnto'          => '$1-man kutimuy.',
    @@ -509,6 +499,9 @@ Nisyu ruraqkunam kay p'anqataqa qhawayta munachkan.
     Ama hina kaspa, ratullata suyay kay p'anqata manaraq musuqmanta qhawaykachaspa.
     
     $1",
    +'pool-timeout'      => "Wichq'aypaq suyaspa mit'a llallisqa",
    +'pool-queuefull'    => "Suyana siq'iqa huntasqañam",
    +'pool-errorunknown' => 'Mana riqsisqa pantasqa',
     
     # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
     'aboutsite'            => '{{SITENAME}}manta',
    @@ -664,10 +657,11 @@ Sutinnaq kaspaykipas {{SITENAME}}pi wamp'uytam atinki. Mana hinataq munaspaykiqa
     'welcomecreation'            => '== Allinmi hamusqayki $1! ==
     Rakiqunaykiqa kicharisqañam.
     Ama qunqaychu [[Special:Preferences|{{SITENAME}} allinkachinaykikunata]] kikinchayta.',
    -'yourname'                   => 'Ruraq sutiyki',
    +'yourname'                   => 'Ruraq sutiyki:',
     'yourpassword'               => 'Yaykuna rimayki',
     'yourpasswordagain'          => 'Yaykuna rimaykita kutipayay',
    -'remembermypassword'         => "Llamk'apuy tiyayniykunapura yuyaykuway.",
    +'remembermypassword'         => "Ruraqpa sutiyta yaykuna rimaytapas yuyaykuy llamk'ay tiyayniypura ({{PLURAL:$1|huk p'unchawkama|$1 p'unchawkama}})",
    +'securelogin-stick-https'    => "Yaykurquspa HTTPS nisqawan t'inkisqa kakuy",
     'yourdomainname'             => 'Duminyuykip sutin',
     'externaldberror'            => 'Hawa yaykuna pantasqam karqan, ichataq manam saqillasunkichu hawa rakiqunaykita musuqchayta.',
     'login'                      => 'Yaykuy',
    @@ -684,6 +678,7 @@ Ama qunqaychu [[Special:Preferences|{{SITENAME}} allinkachinaykikunata]] kikinch
     'gotaccount'                 => "Rakiqunaykiñachu kachkan? '''$1'''.",
     'gotaccountlink'             => 'Rakiqunaykita willaway',
     'createaccountmail'          => 'chaskipaq',
    +'createaccountreason'        => 'Kayrayku:',
     'badretype'                  => 'Qusqayki yaykuna rimakunaqa manam kaqllachu.',
     'userexists'                 => 'Munasqayki ruraqpa sutiykiqa kachkanñam. Ama hina kaspa, huk ruraqpa sutiykita qillqamuy.',
     'loginerror'                 => "Pantasqa llamk'apuy tiyaypa qallarisqan",
    @@ -704,6 +699,7 @@ Allin qillqasqaykita llanchiriy.',
     'wrongpasswordempty'         => 'Yaykuna rimaykita qillqamuyta qunqarqunkim, huk kutita ruraykachay.',
     'passwordtooshort'           => 'Yaykuna rimayqa {{PLURAL:$1|1 icha aswan sanampayuq|$1 icha aswan sanampayuq}} kananmi.',
     'password-name-match'        => 'Yaykuna rimaykiqa ruraqpa sutiykiman mana kaqlla kananmi.',
    +'password-login-forbidden'   => 'Kay ruraqpa sutinmanqa yaykuna rimanmanpas ama nisqam.',
     'mailmypassword'             => 'Musuq yaykuna rimata e-chaskiwan kachamuway',
     'passwordremindertitle'      => "{{SITENAME}}paq musuq mit'alla yaykuna rima",
     'passwordremindertext'       => 'Pipas (qamchiki, $1 IP huchhayuq tiyaymanta) mañakuwarqan {{SITENAME}}paq musuq yaykuna rimatam e-chaski imamaytaykiman kachayta ($4).
    @@ -736,6 +732,9 @@ Kay willay pantasqa kaptinqa, qhawarparillay.',
     'loginlanguagelabel'         => 'Rimay: $1',
     'suspicious-userlogout'      => "Lluqsiy mañakuyniykiqa mananchasqam karqan, waqllisqa wamp'unamanta icha pakaq proksimanta kachasqa kaspanchá.",
     
    +# E-mail sending
    +'php-mail-error-unknown' => 'Mana riqsisqa pantasqa PHP mail() rurananpi',
    +
     # Password reset dialog
     'resetpass'                 => 'Ruraqpa yaykuna rimanta hukchay',
     'resetpass_announce'        => "E-chaskiwan kachasqa mit'alla yaykuna rimawanmi yaykurqunki. Ama hina kaspa, musuq yaykuna rimaykita qillqamuy:",
    @@ -786,9 +785,10 @@ Yaykuna rimaykitaqa aypalla hukcharqunkiñachá icha huk mit'alla yaykuna rimata
     'showlivepreview'                  => 'Kawsaqlla qhawariy',
     'showdiff'                         => 'Hukchasqakunata rikuchiy',
     'anoneditwarning'                  => "''Paqtataq:'' Manaraqmi ruraqpa sutiykita qumurqunkichu. IP huchhaykim kay p'anqap hukchay hallch'ayninpi waqaychasqa kanqa.",
    +'anonpreviewwarning'               => "''Manam ruraqpa sutiykiwan yaykusqa kachkankichu. Imatapas waqaychaptiykiqa, IP huchhaykim hallch'asqa kanqa kay p'anqap llamk'apuy wiñay kawsayninpi.''",
     'missingsummary'                   => "'''Paqtataq:''' Manaraqmi llamk'apusqaykimanta pisichaytachu qillqamurqunki. Musuqmanta «{{int:savearticle}}» nisqapi ñit'iptiykiqa, llamk'apusqayki waqaychasqam kanqa mana pisichay kaptinpas.",
     'missingcommenttext'               => 'Ama hina kaspa, kay qatiqpi willaspa qillqamuy.',
    -'missingcommentheader'             => "'''Paqtataq:''' Manaraqmi kay willaypa umallintachu qillqamurqunki. Musuqmanta «waqaychay» nisqapi ñit'iptiykiqa, llamk'apusqayki waqaychasqam kanqa mana willaypa umallin kaptinpas.",
    +'missingcommentheader'             => "'''Paqtataq:''' Manaraqmi kay willaypa umallintachu qillqamurqunki. Musuqmanta \"{{int:savearticle}}\" nisqapi ñit'iptiykiqa, llamk'apusqayki waqaychasqam kanqa mana willaypa umallin kaptinpas.",
     'summary-preview'                  => 'Pisichayta ñawpaqta qhawarillay:',
     'subject-preview'                  => 'Yachaywata/umallita ñawpaqta qhawarillay:',
     'blockedtitle'                     => "Ruraqqa hark'asqam",
    @@ -848,7 +848,11 @@ Hark'ay hallch'api qhipaq hark'asqataqa kaypim rikunki willasunaykipaq:",
     'userjsyoucanpreview'              => "'''Kunay:''' \"{{int:showpreview}}\" nisqa ñit'inata llamk'achiy musuq JavaScript nisqata qhawanaykipaq, manaraq waqaychaspa.",
     'usercsspreview'                   => "Yuyariy, qhawarillachkankim ruraqpa CSS-niykita, manaraqmi waqaychasqachu!'''",
     'userjspreview'                    => "'''Yuyariy, qhawarillachkankim ruraqpa JavaScript-niykita, manaraqmi waqaychasqachu!'''",
    -'userinvalidcssjstitle'            => "'''Paqtataq:''' Manam kanchu \"\$1\" qara. Yuyariy, kikinpa .css, .js p'anqankunaqa uchuy sanampa umalliyuqmi, ahinataq {{ns:user}}:Foo/monobook.css manataq  {{ns:user}}:Foo/Monobook.css nisqachu.",
    +'sitecsspreview'                   => "'''Yuyariy, qhawarillachkankim kay CSS-ta.'''
    +'''Manaraqmi waqaychasqachu!'''",
    +'sitejspreview'                    => "'''Yuyariy, qhawarillachkankim kay JavaScript qillqata.'''
    +'''Manaraqmi waqaychasqachu!'''",
    +'userinvalidcssjstitle'            => "'''Paqtataq:''' Manam kanchu \"\$1\" qara. Yuyariy, kikinpa .css, .js p'anqankunaqa uchuy sanampa umalliyuqmi, ahinataq {{ns:user}}:Foo/vector.css manataq  {{ns:user}}:Foo/Vector.css nisqachu.",
     'updated'                          => '(Musuqchasqa)',
     'note'                             => "'''Musyay:'''",
     'previewnote'                      => "'''Yuyaykuy: Kayqa manaraq waqaychaspa qhawariymi!'''",
    @@ -881,8 +885,6 @@ Takyachichkankim: Kayqa ñuqap qillqasqaymi icha qispi pukyumanta iskaychamusqay
     'copyrightwarning2'                => "Lliw {{SITENAME}}paq llamk'apuykunaqa huk ruraqkunap llamk'apunallanmi, hukchanallanmi icha qullunallanmi. Llamk'asqaykikunata huk runakunap allinchayninta qispilla mast'ariyninta mana munaspaykiqa, ama kayman qillqamuychu.
    Takyachichkankim: Kayqa ñuqap qillqasqaymi, ñuqamanmi kapuwan icha qispi pukyumanta iskaychamusqaymi, nispa ($1 p'anqata qhaway).
    '''Mana saqillasqa kaspaykiqa, ama qillqarimuychu iskaychay hayñi ''(copyright)'' nisqayuq qillqakunata iskaychamuspa!'''", -'longpagewarning' => "'''Paqtataq: Kay p'anqaqa $1 kB hatunmi; huk wamp'unakunaqa sasachakunmanchá 32 kB-manta aswan hatun willañiqita llamk'apuspa. -Ama hina kaspa, hamut'ariy kay p'anqata rakiyta.'''", 'longpageerror' => "'''PANTASQA: Kachasqayki qillqaqa $1 kB hatunmi, $2 kB-manta aswan hatunmi. Manam waqaychasqa kayta atinchu.'''", 'readonlywarning' => "'''PAQTATAQ: Willañiqintinqa hark'asqam mit'awa kakuchinapaq. Chayrayku kunanqa manam atichkankichu llamk'apusqaykikunata waqaychayta. Qillqasqaykita iskaychaspa antañiqiqniykipi willañiqiman llut'amuspa chaypi waqaychariy. Kunanmanta huk pachallapi musuqmanta waqaychaykachay.''' @@ -985,7 +987,7 @@ Wikimanta qullusqachá icha astasqachá. Musuq chaniyuq p'anqakunata [[Special:Search|wikipi maskaykachay]].", # Revision deletion -'rev-deleted-comment' => '(qullusqa rimapuy)', +'rev-deleted-comment' => "(qullusqa llamk'apuna rimapuy)", 'rev-deleted-user' => '(qullusqa ruraqpa sutin)', 'rev-deleted-event' => "(qullusqa hallch'a)", 'rev-deleted-user-contribs' => "[ruraqpa sutinqa icha IP tiyayqa qichusqam - musuqchasqaqa llamk'apusqakunamanta pakasqam]", @@ -1059,6 +1061,8 @@ $1", 'logdelete-failure' => "'''Manam atinichu hallch'ap rikunalla kayninta churayta:''' $1", 'revdel-restore' => 'Rikunalla kayta hukchay', +'revdel-restore-deleted' => 'qullusqa musuqchasqakuna', +'revdel-restore-visible' => 'rikuna musuqchasqakuna', 'pagehist' => "P'anqap wiñay kawsaynin", 'deletedhist' => 'Qullusqa wiñay kawsay', 'revdelete-content' => 'samiq', @@ -1126,11 +1130,13 @@ Takyachikuy kay hukchayqa allin wiñay kawsay ñiqita ama waqllichunchu chaylla. # Diffs 'history-title' => '"$1" p\'anqata hukchasqakunap wiñay kawsaynin', 'difference' => '(Hukchasqapura wak kaynin)', +'difference-multipage' => "(P'anqakunaqa manam kaqllachu)", 'lineno' => "Siq'i $1:", 'compareselectedversions' => "Akllasqa llamk'apusqakunata wakichay", 'showhideselectedversions' => 'Akllasqa musuqchasqakunata rikuchiy/pakay', 'editundo' => 'kutichiy', -'diff-multi' => "({{PLURAL:$1|Chawpipi huk llamk'apusqaqa manam rikuchisqachu|Chawpipi $1 llamk'apusqaqa manam rikuchisqachu}}.)", +'diff-multi' => "({{PLURAL:$2|Huk ruraqpa|$2 ruraqpa}} {{PLURAL:$1|chawpipi huk llamk'apusqanqa manam rikuchisqachu|chawpipi $1 llamk'apusqankunaqa manam rikuchisqachu}})", +'diff-multi-manyusers' => "({{PLURAL:$2|Hukmanta|$2-manta}} aswan ruraqkunap {{PLURAL:$1|chawpipi huk llamk'apusqanqa manam rikuchisqachu|chawpipi $1 llamk'apusqankunaqa manam rikuchisqachu}})", # Search results 'searchresults' => 'Maskaymanta tarisqakuna', @@ -1165,6 +1171,7 @@ Takyachikuy kay hukchayqa allin wiñay kawsay ñiqita ama waqllichunchu chaylla. 'searchprofile-everything-tooltip' => "Tukuy samiqninpi maskay (rimanakuy p'anqakunapipas)", 'searchprofile-advanced-tooltip' => "Akllasqa suti k'itikunapi maskay", 'search-result-size' => '$1 ({{PLURAL:$2|1 rima|$2 rimakuna}})', +'search-result-category-size' => '{{PLURAL:$1|1 wankurisqa|$1 wankurisqa}} ({{PLURAL:$2|1 urin katiguriya|$2 urin katiguriya}}, {{PLURAL:$3|1 willañiqi|$3 willañiqi}})', 'search-result-score' => 'Chaniyuq kaynin: $1%', 'search-redirect' => '(pusapuna $1)', 'search-section' => '(raki $1)', @@ -1219,7 +1226,7 @@ Takyachikuy kay hukchayqa allin wiñay kawsay ñiqita ama waqllichunchu chaylla. 'prefs-rc' => 'Ñaqha hukchasqakuna', 'prefs-watchlist' => "Watiqasqa p'anqakuna", 'prefs-watchlist-days' => "Hayk'a p'unchawkunata watiqana sutisuyupi rikuchiy:", -'prefs-watchlist-days-max' => "(ama qanchismanta aswan p'unchaw kachunchu)", +'prefs-watchlist-days-max' => "Ama qanchismanta aswan p'unchaw kachunchu", 'prefs-watchlist-edits' => "Hayk'a hukchasqakunata hatunchasqa watiqana sutisuyupi rikuchiy:", 'prefs-watchlist-edits-max' => 'Ama waranqamanta aswan kachunchu', 'prefs-watchlist-token' => 'Watiqay sutisuyu sanancha:', @@ -1239,6 +1246,7 @@ Takyachikuy kay hukchayqa allin wiñay kawsay ñiqita ama waqllichunchu chaylla. 'contextlines' => "Siq'ikuna taripasqaman:", 'contextchars' => "Ukhunpuray sananchakuna siq'iman:", 'stub-threshold' => 'Kay hatun kaykamam t\'una qillqasqa t\'inki nisqa kachun (byte):', +'stub-threshold-disabled' => 'Ama nisqa', 'recentchangesdays' => "Ñaqha hukchasqakunapi rikuchina p'unchawkuna:", 'recentchangesdays-max' => "(ama $1-manta aswan {{PLURAL:$1|p'unchaw|p'unchaw}} kachunchu)", 'recentchangescount' => 'Rikuchina hukchasqakunap yupaynin, kikinmanta:', @@ -1271,6 +1279,7 @@ Pi kay k'itichapi llawiykita riqsiqpas watiqasqaykikunata ñawiriytam atinqa. Ch 'prefs-files' => 'Willañiqikuna', 'prefs-custom-css' => 'Munakusqa CSS', 'prefs-custom-js' => 'Munakusqa JS', +'prefs-common-css-js' => 'Tukuy qarakunapaq rakinakusqa CSS/JS:', 'prefs-reset-intro' => "Kay p'anqataqa llamk'achiyta atinki allinkachinaykikunata kikinmanta kasqaman kutichinaykipaq. Chaytataq manam kutichiyta atinkichu.", 'prefs-emailconfirm-label' => 'E-chaskita takyachiy:', @@ -1308,9 +1317,15 @@ Huk ruraqkunata ruraqpa p'anqaykimanta icha rimachinaykimanta qamman qillqamusun 'prefs-advancedrendering' => 'Ñawparikusqa akllanakuna', 'prefs-advancedsearchoptions' => 'Ñawparikusqa akllanakuna', 'prefs-advancedwatchlist' => 'Ñawparikusqa akllanakuna', -'prefs-display' => 'Akllanakunata rikuchiy', +'prefs-displayrc' => 'Akllanakunata rikuchiy', +'prefs-displaysearchoptions' => 'Akllanakunata rikuchiy', +'prefs-displaywatchlist' => 'Akllanakunata rikuchiy', 'prefs-diffs' => 'Wakin kaykuna', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'E-chaski imamaytaqa allinchá', +'email-address-validity-invalid' => 'Allin e-chaski imamaytata yaykuchiy', + # User rights 'userrights' => 'Ruraqkunata saqillanap allinkachinan', 'userrights-lookup-user' => 'Ruraqkunap huñunkunata allinkachiy', @@ -1394,6 +1409,7 @@ Huk ruraqkunata ruraqpa p'anqaykimanta icha rimachinaykimanta qamman qillqamusun 'right-hideuser' => "Ruraqpa sutinta hark'ay, sapsimanta pakaspa", 'right-ipblock-exempt' => "IP hark'ayta, kikinmanta hark'ayta, tawqa hark'aytapas pulqaspa pasay", 'right-proxyunbannable' => "Kikinmanta ''proxy'' nisqa sirwiq hark'ayta pulqaspa pasay", +'right-unblockself' => "Kikinta hark'asqamanta qispikuy", 'right-protect' => "Amachasqa kachkayta hukchay, amachasqa p'anqakunata llamk'apuy", 'right-editprotected' => "Amachasqa p'anqakunata llamk'apuy (mana phaqcha amachasqa)", 'right-editinterface' => "Ruraqpaq uyapurata llamk'apuy", @@ -1416,7 +1432,6 @@ Huk ruraqkunata ruraqpa p'anqaykimanta icha rimachinaykimanta qamman qillqamusun 'right-siteadmin' => "Willañiqintinta hark'ay, paskaypas", 'right-reset-passwords' => 'Huk ruraqkunap yaykuna rimanta kutichiy', 'right-override-export-depth' => "P'anqakunata hawaman quy, t'inkisqa p'anqakunatapas pichqa ñiqin t'inkipayasqakama", -'right-versiondetail' => "Mast'arisqa llamp'u kaqpaq musuqchasqamanta willaykunata rikuchiy", 'right-sendemail' => 'Huk ruraqkunaman e-chaskita kachay', # User rights log @@ -1467,14 +1482,9 @@ Huk ruraqkunata ruraqpa p'anqaykimanta icha rimachinaykimanta qamman qillqamusun 'recentchanges-legend' => 'Ñaqha hukchasqapaq allinkachinakuna', 'recentchangestext' => "Kay p'anqapiqa aswan qhipaq ñaqha hukchasqakunam.", 'recentchanges-feed-description' => 'Kay mikhuchinapi wikipi qhipaq ñaqha hukchasqakunata qatiy.', -'recentchanges-label-legend' => "Ch'uyanchana: $1.", -'recentchanges-legend-newpage' => "$1 - musuq p'anqa", 'recentchanges-label-newpage' => "Kayta llamk'apuptiykim musuq p'anqam tukukurqun", -'recentchanges-legend-minor' => "$1 - aslla llamk'apuy", 'recentchanges-label-minor' => "Kayqa aslla llamk'apuymi", -'recentchanges-legend-bot' => "$1 - rurana antachap llamk'apuynin", 'recentchanges-label-bot' => "Kayqa rurana antachap llamk'apusqanmi", -'recentchanges-legend-unpatrolled' => "$1 - mana patrullasqa llamk'apuy", 'recentchanges-label-unpatrolled' => "Kay llamk'apusqaqa manaraqmi patrullasqachu", 'rcnote' => "Kay qatiqpiqa qhipaq {{PLURAL:$1|'''1''' hukchasqam|'''$1''' hukchasqakunam}} qhipaq {{PLURAL:$2|p'unchawpi|'''$2''' p'unchawkunapi}}, musuqchasqa $5, $4.", 'rcnotefrom' => "Kay qatiqpiqa '''$2'''-mantapacha ('''$1'''-kama) hukchasqakunatam rikunki.", @@ -1520,6 +1530,9 @@ Huk ruraqkunata ruraqpa p'anqaykimanta icha rimachinaykimanta qamman qillqamusun 'upload_directory_missing' => 'Churkuna willañiqi churanaqa ($1) manam kanchu. Llika sirwiqpas manam atinchu churkuna willañiqi churanata kamariyta.', 'upload_directory_read_only' => "Llika sirwiqqa manam atinchu churkuna hallch'aman ($1) qillqayta.", 'uploaderror' => 'Willañiqita churkunayaptiyki pantasqam tukurqan', +'upload-recreate-warning' => "'''Paqtataq: Kay sutiyuq willañiqiqa qullusqañam icha sutin hukchasqañam.''' + +Kay qatiqpiqa kay p'anqapaq qulluy, astay hallch'akunatam rikunki:", 'uploadtext' => "Willañiqita churkunaykipaqqa kay qatiqpi kaq hunt'ana p'anqata llamk'achiy. Churkusqaña rikchakunatataq qhawanaykipaq icha maskanaykipaqqa [[Special:FileList|rikchakuna p'anqaman]] riy. Churkusqakunata [[Special:Log/upload|churkuy hallch'apim]], qullusqakunatataq [[Special:Log/delete|qulluy hallch'apim]] rikunki. @@ -1551,6 +1564,17 @@ Rikchata huk p'anqaman ch'aqtanaykipaqqa kay hunt'ana p'anqapi t'inkita llamk'ac 'filetype-unwanted-type' => "'''\".\$1\"''' nisqaqa manam munasqachu willañiqi laya. Astawan munasqa willañiqi {{PLURAL:\$3|layaqa|layakunaqa}} kaymi: \$2.", 'filetype-banned-type' => "'''\".\$1\"''' nisqaqa manam saqillasqachu willañiqi laya. Saqillasqa willañiqi {{PLURAL:\$3|layaqa|layakunaqa}} kaymi: \$2.", 'filetype-missing' => 'Manam kachkanchu willañiqip k\'askaqnin (".jpg" hina).', +'empty-file' => "Kachasqayki willañiqiqa ch'usaqmi.", +'file-too-large' => 'Kachasqayki willañiqiqa nisyu hatunmi.', +'filename-tooshort' => 'Kay willañiqi sutiqa nisyu pisillam.', +'filetype-banned' => 'Kay willañiqi layaqa manam saqillasqachu.', +'verification-error' => 'Kay willañiqiqa willañiqi chaninchaypi manam yallirqanchu.', +'hookaborted' => "Wakinchaykachasqaykitaqa mast'ari ch'iwinam puchukachirqan.", +'illegal-filename' => 'Kay willañiqi sutiqa manam saqillasqachu.', +'overwrite' => 'Kachkaqña willañiqita huknachayqa manam saqillasqachu.', +'unknown-error' => 'Mana riqsisqa pantasqam.', +'tmp-create-error' => "Manam atinichu mit'alla willañiqita qillqayta.", +'tmp-write-error' => "Mit'alla willañiqita qillqaspa pantakurqan.", 'large-file' => 'Kamalliykiku, willañiqikunaqa ama $1-manta aswan hatun kachunchu; kay willañiqiqa $2 hatunmi.', 'largefileserver' => 'Kay willañiqiqa sirwiqpi allinkachisqakama saqillasqa chhikanmanta aswan hatunmi.', 'emptyfile' => "Churkusqayki willañiqiqa ch'usaqmi rikch'akun. Pantasqa sutinchá. Ama hina kaspa, llanchiy, churkuyman munasqayki willañiqichu.", @@ -1572,13 +1596,14 @@ Kay churkunayki rikcha hunt'a chhikan kayniyuq kaptinqa, chay hunt'atam churkuy, 'fileexists-shared-forbidden' => "Kay sutiyuq willañiqiqa kachkañam rakinakusqa willañiqi qullqapi. Ama hina kaspa, churkuyta munaspaykiraq, ñawpaq p'anqaman kutispa willañiqiykita huk sutiwan churkuy. [[File:$1|thumb|center|$1]]", 'file-exists-duplicate' => 'Kay willañiqiqa kay qatiq {{PLURAL:$1|willañiqip|willañiqikunap}} iskaychasqanmi:', 'file-deleted-duplicate' => 'Kay hinalla ([[:$1]]) willañiqiña qullusqam karqa. Qhawariy imarayku qullusqa karqa, manaraq musuqmanta churkuykachaspa.', -'successfulupload' => 'Aypalla churkusqañam', 'uploadwarning' => 'Willañiqi churkuymanta paqtataq niy', 'uploadwarning-text' => 'Ama hina kaspa, kay qatiqpi kaq willañiqimanta willaykunata hukchaspa musuqmanta ruraykachay.', 'savefile' => 'Willañiqita waqaychay', 'uploadedimage' => '«[[$1]]» churkusqa.', 'overwroteimage' => '"[[$1]]" musuqmanta churkusqa', 'uploaddisabled' => 'Willañiqi churkuyman ama nisqa', +'copyuploaddisabled' => 'URL-pa churkunanqa manam atinchu.', +'uploadfromurl-queued' => 'Churkunaykiqa suyana sinruman kachasqam.', 'uploaddisabledtext' => 'Willañiqi churkuyqa manam saqillasqachu.', 'php-uploaddisabledtext' => "PHP-wan willañiqi churkuyqa hark'asqam. Ama hina kaspa, willañiqi churkuy allinkachinakunata llanchiy.", 'uploadscripted' => "Kay willañiqiqa wakichi icha HTML qillqayuqmi, llika wamp'unaqa pantalla unanchanmanchá.", @@ -1597,6 +1622,14 @@ Kay churkunayki rikcha hunt'a chhikan kayniyuq kaptinqa, chay hunt'atam churkuy, Hamut'arinaykim tiyanman, kay willañiqita musuqmanta churkuyqa allinchu mana allinchu chaylla. Kay qatiqpiqa willañiqimanta qulluy hallch'atam rikunki:", 'filename-bad-prefix' => "Churkunayasqayki willañiqip sutinqa '''\"\$1\"''' nisqawanmi qallarin. Chay sutinqa iliktruniku rikcha hap'inap kamasqanmanmi rikch'akun. Ama hina kaspa, willañiqiykita astawan t'iktuq sutinta akllay.", +'upload-success-subj' => 'Aypalla churkusqañam', +'upload-success-msg' => '[$2]-manta churkusqaykiqa aypasqam. Kaypim tarinalla: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Churkuy sasachakuy', +'upload-failure-msg' => '[$2] nisqamanta churkuyniykiwanqa sasachakuymi karqan: + +$1', +'upload-warning-subj' => 'Willañiqi churkuymanta paqtataq niy', +'upload-warning-msg' => "[$2]-manta churkuyniykiwanqa sasachakuymi karqan. [[Special:Upload/stash/$1|Churkunapaq hunt'ana p'anqaman]] kutimuykiman kay sasachakuyta allinchanaykipaq.", 'upload-proto-error' => 'Tantari qillqaqa manam allinchu', 'upload-proto-error-text' => "Huk p'anqamanta willañiqita churkunapaqqa URL tiyaypa http:// icha ftp:// nisqawan qallarinanmi.", @@ -1609,22 +1642,23 @@ Kay qatiqpiqa willañiqimanta qulluy hallch'atam rikunki:", 'upload-http-error' => 'HTTP pantasqam tukusqa: $1', # img_auth script messages -'img-auth-accessdenied' => 'Manam chayman saqisqachu', -'img-auth-nopathinfo' => "Manam kanchu PATH_INFO. +'img-auth-accessdenied' => 'Manam chayman saqisqachu', +'img-auth-nopathinfo' => "Manam kanchu PATH_INFO. Sirwiqniykiqa manam churasqachu kaymanta willananpaq. CGI nisqawanchá tiksichasqa, chayrayku manachá img_auth nisqata q'imiyta atinchu. Qhaway http://www.mediawiki.org/wiki/Manual:Image_Authorization.", -'img-auth-notindir' => 'Mañakusqa ñanqa manam churaykusqa churkuna churanapi kachkanchu.', -'img-auth-badtitle' => 'Manam atinichu "$1" nisqamanta chaniyuq sutita rurayta.', -'img-auth-nologinnWL' => 'Manam yaykusqa kachkankichu, "$1" nisqataq manam yuraq sutisuyupi kachkanchu.', -'img-auth-nofile' => '"$1" sutiyuq willañiqiqa manam kanchu.', -'img-auth-isdir' => '"$1" nisqa churanatam aypaykachachkanki. +'img-auth-notindir' => 'Mañakusqa ñanqa manam churaykusqa churkuna churanapi kachkanchu.', +'img-auth-badtitle' => 'Manam atinichu "$1" nisqamanta chaniyuq sutita rurayta.', +'img-auth-nologinnWL' => 'Manam yaykusqa kachkankichu, "$1" nisqataq manam yuraq sutisuyupi kachkanchu.', +'img-auth-nofile' => '"$1" sutiyuq willañiqiqa manam kanchu.', +'img-auth-isdir' => '"$1" nisqa churanatam aypaykachachkanki. Willañiqilla aypayllam saqillasqa.', -'img-auth-streaming' => '"$1" nisqata purichispa.', -'img-auth-public' => 'img_auth.php nisqap rurananqa akuna wikimanta willañiqikunata lluqsichinam. +'img-auth-streaming' => '"$1" nisqata purichispa.', +'img-auth-public' => 'img_auth.php nisqap rurananqa akuna wikimanta willañiqikunata lluqsichinam. Kay wikiqa sapsi wiki hinam churaykusqa. Lliwmanta aswan alliku kanapaqqa, img_auth.php manam atinchu.', -'img-auth-noread' => 'Ruraqqa "$1" nisqata ñawiriyta manam saqillasqachu.', +'img-auth-noread' => 'Ruraqqa "$1" nisqata ñawiriyta manam saqillasqachu.', +'img-auth-bad-query-string' => 'URL tiyaypa maskana qillqaqa manam allinchu.', # HTTP errors 'http-invalid-url' => 'URL tiyayqa manam allinchu: $1', @@ -1656,6 +1690,7 @@ Wachup umanpi ñit'ispaqa allichaytam hukchanki.", 'listfiles_search_for' => 'Rikchap sutinta maskay:', 'imgfile' => 'willañiqi', 'listfiles' => 'Rikchakuna', +'listfiles_thumb' => 'Uchuylla rikchacha', 'listfiles_date' => "P'unchaw", 'listfiles_name' => 'Suti', 'listfiles_user' => 'Ruraq', @@ -1768,8 +1803,8 @@ Ama hina kaspa, [$2 willañiqi ch'uyanchana p'anqata] qhaway astawan willachikun 'statistics-edits' => "P'anqa llamk'apusqakuna {{SITENAME}}-pa paqarisqanmanta", 'statistics-edits-average' => "Kuskanchaku llamk'apusqakuna p'anqaman", 'statistics-views-total' => 'Tukuy qhawasqakuna', +'statistics-views-total-desc' => "Mana kaq p'anqakunataqa sapaq p'anqakunatapas kaypi manam rikunki", 'statistics-views-peredit' => "Qhawasqakuna llamk'apusqaman", -'statistics-jobqueue' => "[http://www.mediawiki.org/wiki/Manual:Job_queue Llamk'ana sinru] chhikan", 'statistics-users' => 'Rakiqunayuq [[Special:ListUsers|ruraqkuna]]', 'statistics-users-active' => "Llamk'achkaq ruraqkuna", 'statistics-users-active-desc' => "Ñaqha {{PLURAL:$1|p'unchawpi|$1 p'unchawkunapi}} llamk'apuq ruraqkuna", @@ -1781,7 +1816,7 @@ Ama hina kaspa, [$2 willañiqi ch'uyanchana p'anqata] qhaway astawan willachikun 'doubleredirects' => 'Iskaylla pusapunakuna', 'doubleredirectstext' => "Kay p'anqapiqa huk pusapuna p'anqaman pusapuq p'anqakunap sutinkunatam rikunki. Sapa sinrupiqa ñawpaq ñiqin, iskay ñiqinpas pusapunaman t'inkikunam, iskay ñiqin pusapunap taripananpa qallariyninpas, sapsilla \"chiqap\" allin taripana qillqam, maymanchus ñawpaq ñiqin pusapuna p'anqa pusachun. -Chakapusqa taripasqakunaqa paskasqañam.", +Chakapusqa taripasqakunaqa paskasqañam.", 'double-redirect-fixed-move' => '[[$1]] nisqaqa astasqam, kunantaq [[$2]] nisqaman pusapunam', 'double-redirect-fixer' => 'Pusapuna allinchaq', @@ -1804,6 +1839,8 @@ Ama hina kaspa, [$2 willañiqi ch'uyanchana p'anqata] qhaway astawan willachikun 'nmembers' => '$1 {{PLURAL:$1|qillqa|qillqakuna}}', 'nrevisions' => "$1 {{PLURAL:$1|llamk'apusqa|llamk'apusqakuna}}", 'nviews' => '$1 {{PLURAL:$1|rikuy|rikuykuna}}', +'nimagelinks' => "$1 {{PLURAL:$1|p'anqapi|p'anqakunapi}} llamk'achisqa", +'ntransclusions' => "$1 {{PLURAL:$1|p'anqapi|p'anqakunapi}} llamk'achisqa", 'specialpage-empty' => "Kay p'anqaqa ch'usaqmi.", 'lonelypages' => "Wakcha p'anqakuna", 'lonelypagestext' => "Kay qatiq p'anqakunaqa manam {{SITENAME}}pi ima huk kaq p'anqawanpas t'inkisqachu, manam ch'aqtasqachu ima.", @@ -1959,34 +1996,40 @@ Chay kikinkunap hayñinkunamanta astawan ñawirinaykipaqqa [[{{MediaWiki:Listgro 'listgrouprights-removegroup-self-all' => 'Tukuy huñukunatam qichuyta atin kikinpa raqiqunanmanta', # E-mail user -'mailnologin' => 'Imamaytataqa ama kachaychu', -'mailnologintext' => '[[Special:UserLogin|Yaykunaykim]], [[Special:Preferences|allinkachinaykikunapi]] chaniyuq e-chaski imamaytappas kananmi tiyan huk ruraqkunaman e-chaskita kachanaykipaq.', -'emailuser' => 'Kay ruraqman e-chaskita kachay', -'emailpage' => 'E-chaski kay ruraqman:', -'emailpagetext' => "Kay hunt'ana p'anqatam llamk'achiyta atinki e-chaskita kachanaykipaq. +'mailnologin' => 'Imamaytataqa ama kachaychu', +'mailnologintext' => '[[Special:UserLogin|Yaykunaykim]], [[Special:Preferences|allinkachinaykikunapi]] chaniyuq e-chaski imamaytappas kananmi tiyan huk ruraqkunaman e-chaskita kachanaykipaq.', +'emailuser' => 'Kay ruraqman e-chaskita kachay', +'emailpage' => 'E-chaski kay ruraqman:', +'emailpagetext' => "Kay hunt'ana p'anqatam llamk'achiyta atinki e-chaskita kachanaykipaq. Qampa [[Special:Preferences|allinkachinaykikunapi]] qillqakamachisqayki imamaytaqa paqarinqa kachasqayki e-chaskipi chaskiqpa kutichisunaykita atinanpaq.", -'usermailererror' => 'Chaski llikaqa pantasqatam kutichimurqan:', -'defemailsubject' => "{{SITENAME}} p'anqamanta chaski", -'noemailtitle' => 'Manam kanchu e-chaski imamayta', -'noemailtext' => 'Kay ruraqqa manam willawarqanchu chaniyuq imamaytata.', -'nowikiemailtitle' => 'E-chaskiqa manam saqillasqachu', -'nowikiemailtext' => 'Kay ruraqqa nirqan, huk ruraqkunamanta ama e-chaskita chaskisaqchu, nispa.', -'email-legend' => '{{SITENAME}}pi huk ruraqman e-chaskita kachay', -'emailfrom' => 'Kachaq:', -'emailto' => 'Chaskiq:', -'emailsubject' => 'Yuyancha:', -'emailmessage' => 'Willay:', -'emailsend' => 'Kachay', -'emailccme' => 'Willaypa iskaychasqanta kacharimuway.', -'emailccsubject' => 'Willaypa iskaychasqan $1: $2-man', -'emailsent' => 'Chaskiqa kachasqañam', -'emailsenttext' => 'Chaskiykiqa kachasqañam.', -'emailuserfooter' => 'Kay e-chaskitaqa $1 sutiyuqmi kacharqan $2 sutiyuqman "e-chaski kachay" nisqapaq ruranawan kay tiyaypi: {{SITENAME}}.', +'usermailererror' => 'Chaski llikaqa pantasqatam kutichimurqan:', +'defemailsubject' => "{{SITENAME}} p'anqamanta chaski", +'usermaildisabled' => "Ruraqpa e-chaskinqa hark'asqam", +'usermaildisabledtext' => 'Manam atinkichu kay wikipi huk ruraqkunaman e-chaskita kachayta.', +'noemailtitle' => 'Manam kanchu e-chaski imamayta', +'noemailtext' => 'Kay ruraqqa manam willawarqanchu chaniyuq imamaytata.', +'nowikiemailtitle' => 'E-chaskiqa manam saqillasqachu', +'nowikiemailtext' => 'Kay ruraqqa nirqan, huk ruraqkunamanta ama e-chaskita chaskisaqchu, nispa.', +'email-legend' => '{{SITENAME}}pi huk ruraqman e-chaskita kachay', +'emailfrom' => 'Kachaq:', +'emailto' => 'Chaskiq:', +'emailsubject' => 'Yuyancha:', +'emailmessage' => 'Willay:', +'emailsend' => 'Kachay', +'emailccme' => 'Willaypa iskaychasqanta kacharimuway.', +'emailccsubject' => 'Willaypa iskaychasqan $1: $2-man', +'emailsent' => 'Chaskiqa kachasqañam', +'emailsenttext' => 'Chaskiykiqa kachasqañam.', +'emailuserfooter' => 'Kay e-chaskitaqa $1 sutiyuqmi kacharqan $2 sutiyuqman "e-chaski kachay" nisqapaq ruranawan kay tiyaypi: {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Llika willayta kachaspa.', +'usermessage-editor' => 'Llika willay kachaq', # Watchlist 'watchlist' => "Watiqasqa p'anqakuna", 'mywatchlist' => 'Watiqasqaykuna', -'watchlistfor' => "('''$1'''-paq)", +'watchlistfor2' => '$1-paq $2', 'nowatchlist' => 'Manam watiqasqakunachu kachkan.', 'watchlistanontext' => 'Ama hina kaspa, $1 watiqana sutisuyuykipi imakunatapas qhawanaykipaq icha hukchanaykipaq.', 'watchnologin' => 'Manam yaykurqankichu', @@ -2044,6 +2087,9 @@ Kay p\'anqata mana musuqmanta watukamuptiykiqa, manam huk hukchasqakunamanta wil Tukuy sunquwan, {{SITENAME}}pa e-chaski musyachina llikan -- +E-chaski willaykuy allinkachinakunata hukchanaykipaqqa kay p\'anqatam qhaway: +{{fullurl:{{#special:Preferences}}}} + Watiqana sutisuyuykipaq allinkachinakunata hukchanaykipaqqa kay p\'anqatam qhaway: {{fullurl:{{#special:Watchlist}}/edit}} @@ -2099,7 +2145,10 @@ Qhipaq kaq llamk'apusqaqa [[User:$3|$3]]-pa ([[User talk:$3|rimanakuy]]{{int:pip 'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|rimachina]]) sutiyuq ruraqpa hukchasqankunaqa kutichisqam [[User:$1|$1]]-pa ñawpaq hukchasqanman', 'revertpage-nouser' => "Ruraqpa hukchasqankunaqa (sutinqa qichusqam) kutichisqañam [[User:$1|$1]]-pa ñawpaq llamk'apusqanta paqarichispa", 'rollback-success' => "$1-pa hukchasqankunaqa kutichisqañam $2-pa ñawpaq llamk'apusqanta paqarichispa.", -'sessionfailure' => "Lamk'apuy tiyayniykiwanqa sasachakuymi rikch'akun; + +# Edit tokens +'sessionfailure-title' => "Llamk'ay tiyay pantasqa", +'sessionfailure' => "Lamk'apuy tiyayniykiwanqa sasachakuymi rikch'akun; kay rurayqa t'ipisqam karqan millay runap llullaspa yaykunanta hark'anapaq. Ama hina kaspa, llika wamp'unaykipi \"Ñawpaqman\" (\"Back\") ñit'ispa ñawpaq p'anqata musuqmanta chaqnamuspa huk kutita yaykuykachay.", @@ -2225,18 +2274,22 @@ $1', 'month' => 'Kay killamanta (ñawpaqmantapas):', 'year' => 'Kay watamanta (ñawpaqmantapas):', -'sp-contributions-newbies' => "Musuq ruraqkunallap llamk'apusqankunata rikuchiy", -'sp-contributions-newbies-sub' => 'Musuqkunapaq', -'sp-contributions-newbies-title' => "Musuq ruraqkunap llamk'apusqankuna", -'sp-contributions-blocklog' => "Hark'ay hallch'asqakuna", -'sp-contributions-deleted' => 'qullusqa ruraqpa hukchasqankuna', -'sp-contributions-logs' => "hallch'akuna", -'sp-contributions-talk' => 'rimanakuy', -'sp-contributions-userrights' => 'ruraqkunata saqillanap allinkachinan', -'sp-contributions-blocked-notice' => "Kay ruraqqa hark'asqam kachkan. Hark'ay hallch'api qhipaq hark'asqataqa kaypim rikunki willasunaykipaq:", -'sp-contributions-search' => "Llamk'apusqakunata maskay", -'sp-contributions-username' => 'IP huchha icha ruraqpa sutin:', -'sp-contributions-submit' => 'Maskay', +'sp-contributions-newbies' => "Musuq ruraqkunallap llamk'apusqankunata rikuchiy", +'sp-contributions-newbies-sub' => 'Musuqkunapaq', +'sp-contributions-newbies-title' => "Musuq ruraqkunap llamk'apusqankuna", +'sp-contributions-blocklog' => "Hark'ay hallch'asqakuna", +'sp-contributions-deleted' => 'qullusqa ruraqpa hukchasqankuna', +'sp-contributions-uploads' => 'churkuykuna', +'sp-contributions-logs' => "hallch'akuna", +'sp-contributions-talk' => 'rimanakuy', +'sp-contributions-userrights' => 'ruraqkunata saqillanap allinkachinan', +'sp-contributions-blocked-notice' => "Kay ruraqqa hark'asqam kachkan. Hark'ay hallch'api qhipaq hark'asqataqa kaypim rikunki willasunaykipaq:", +'sp-contributions-blocked-notice-anon' => "Kay IP tiyayqa hark'asqam kachkan. +Qhipaq hark'ay hallch'a yaykuchisqatam kay qatiqpi rikunki:", +'sp-contributions-search' => "Llamk'apusqakunata maskay", +'sp-contributions-username' => 'IP huchha icha ruraqpa sutin:', +'sp-contributions-toponly' => 'Pata musuqchasqakunallata rikuchiy', +'sp-contributions-submit' => 'Maskay', # What links here 'whatlinkshere' => "Kayman t'inkimuq", @@ -2296,7 +2349,6 @@ Willariy imaraykum hark'anki (ahinataq: sapaq wandaluchasqa p'anqakunamanta will 'ipb-edit-dropdown' => "Hark'aypa hamunta llamk'apuy", 'ipb-unblock-addr' => "Hark'asqa $1-ta qispichiy", 'ipb-unblock' => "Hark'asqa ruraqta icha IP huchhata qispichiy", -'ipb-blocklist-addr' => "Kachkaq hark'asqakuna, $1-paq", 'ipb-blocklist' => "Kachkaq hark'asqakunata qhaway", 'ipb-blocklist-contribs' => "$1-paq llamk'apusqakuna", 'unblockip' => "Hark'asqa ruraqta qispichiy", @@ -2304,7 +2356,7 @@ Willariy imaraykum hark'anki (ahinataq: sapaq wandaluchasqa p'anqakunamanta will 'ipusubmit' => "Kay hark'asqata qispichiy", 'unblocked' => "Hark'asqa [[User:$1|$1]] qispisqañam", 'unblocked-id' => "Hark'asqa $1-qa qispisqañam", -'ipblocklist' => "Hark'asqa ruraqkuna IP tiyaykunapas", +'ipblocklist' => "Hark'asqa ruraqkuna", 'ipblocklist-legend' => "Hark'asqa ruraqta tariy", 'ipblocklist-username' => 'Ruraqpa sutin icha IP huchha:', 'ipblocklist-sh-userblocks' => "$1 rakiquna hark'asqakuna", @@ -2363,6 +2415,8 @@ $1 sutiyuqqa hark'asqañam. Allinchanakunata hukchayta munankichu?", 'sorbs_create_account_reason' => 'IP huchhaykiqa kichasqa proxy nispa {{SITENAME}}pi DNSBL nisqapi qillqasqam. Manam atinkichu rakiqunata kichayta', 'cant-block-while-blocked' => "Kikiyki hark'asqa kaspaykiqa, manam huk ruraqkunata hark'ayta atinkichu.", 'cant-see-hidden-user' => "Hark'aykachasqayki ruraqqa pipapas hark'asqanñam pakasqanñapas. Ruraqta pakay hayñiyuq mana kaspaykim, manam atinkichu ruraqpaq hark'ay hallch'asqata rikuyta icha hukchasqayta.", +'ipbblocked' => "Kikiyki hark'asqa kaspaykim, manam hukkunata hark'ayta icha hark'asqa kaymanta qispichiyta atinkichu", +'ipbnounblockself' => "Kikiykitaqa manam hark'asqa kaymanta qispikuyta atinkichu", # Developer tools 'lockdb' => "Willañiqintinta hark'ay", @@ -2395,6 +2449,17 @@ Huklla kuti astasqa p'anqataqa mawk'a sutinman astayta atinkim, manataq huk mawk PAQTATAQ! Kay astayqa ancha riqsisqa p'anqata hatun mana suyapusqa hukchaymi kayta atinman; ama hina kaspa, yuyarillay imachus kay astanaykita saqispa tukunata atinman.", +'movepagetext-noredirectfixer' => "Kay hunt'ana p'anqawanqa huk p'anqam tukuy wiñay kawsasqanpas musuq sutiman astasqa kanqa. +Mawk'a sutinqa musuq sutiman pusapuq p'anqam tukunqa. +Paqtataq [[Special:DoubleRedirects|iskaylla]] icha [[Special:BrokenRedirects|p'akisqa]] pusapuna p'anqakunata allinchallay. +Ama panta t'inkimuqkunata saqiychu. Qammi chay t'inkikunap allin taripananmanta paqtachiq. + +Nisqayki musuq sutiyuq wiñay kawsasqayuq p'anqaña kachkaptinqa, kay p'anqa '''manam''' astasqa kanqachu. +Huklla kuti astasqa p'anqataqa mawk'a sutinman astayta atinkim, manataq huk mawk'a kachkaqña p'anqamanchu. + +'''Paqtataq!''' +Kay astayqa ancha riqsisqa p'anqata hatun mana suyapusqa hukchaymi kayta atinman; +ama hina kaspa, yuyarillay imachus kay astanaykita saqispa tukunata atinman.", 'movepagetalktext' => "P'anqaman kapuq rimachina p'anqaqa - kachkaspaqa - kikinmanta astasqam kanqa. '''Manallam astasqachu kanqa,''' *p'anqa huk suti huñumanta huk suti huñuman astasqa kachkaptinqa; *huk wiñay kawsasqayuq musuq sutiyuq rimachina p'anqa kachkaptinqa; @@ -2450,6 +2515,7 @@ Tukuna p\'anqaqa ("[[:$1]]") kachkañam. Astanapaq qulluyta munankichu?', 'immobile-source-page' => "Kay p'anqaqa manam astanallachu.", 'immobile-target-page' => 'Manam atinichu chay taripana sutiman astayta.', 'imagenocrossnamespace' => "Manam atinichu p'anqata astayta mana willañiqipaq suti k'itiman", +'nonfile-cannot-move-to-file' => "Manam atinichu mana willañiqi kaqta astayta willañiqipaq suti k'itiman", 'imagetypemismatch' => "Willañiqip musuq mast'arinanqa kay layapaq manam allinchu", 'imageinvalidfilename' => 'Taripana willañiqip sutinqa manam allinchu', 'fix-double-redirects' => 'Qallariy sutiman astamuq tukuy pusapunakunata musuqchay', @@ -2528,6 +2594,7 @@ Tukuy hawa wikimanta chaskisqakunaqa [[Special:Log/import|hawamanta chaskiy hall 'importstart' => "P'anqakunatam hawamanta chaskichkani...", 'import-revision-count' => "$1 {{PLURAL:$1|llamk'apusqa|llamk'apusqakuna}}", 'importnopages' => "Manam kanchu hawamanta chaskina p'anqakuna.", +'imported-log-entries' => "$1 {{PLURAL:$1|hallch'a yaykuchisqa|hallch'a yaykuchisqa}} hawamanta chaskisqam.", 'importfailed' => 'Manam atinichu hawamanta chaskiy: $1', 'importunknownsource' => 'Hawamanta chaskina pukyu layaqa manam riqsisqachu', 'importcantopen' => 'Manam atinichu kay willañiqita hawamanta chaskiyta', @@ -2620,6 +2687,8 @@ Tukuy hawa wikimanta chaskisqakunaqa [[Special:Log/import|hawamanta chaskiy hall 'tooltip-upload' => 'Churkuyta qallariy', 'tooltip-rollback' => "\"Kutichina\" nisqapi ñit'ispaykiqa huk ruraqpa tukuy qhipaq llamk'apusqankunatam huklla ñit'iyniykiwan kutichinki.", 'tooltip-undo' => "\"Kutichiy\" nisqapi ñit'ispaykiqa kay llamk'apusqatam kutichinki, p'anqata ñawpaqta qhawaspa llamk'anapaq kichaspa. Pisichaypi imarayku niyta atinki.", +'tooltip-preferences-save' => 'Akllasqakunata waqaychay', +'tooltip-summary' => 'Pisichaychata yaykuchiy', # Stylesheets 'common.css' => "/* Churamusqa CSS chantakunaqa tukuy qarakunapim llamk'anqa */", @@ -2737,14 +2806,17 @@ Payta rurachiyqa antañiqiqniykita llikaykitapas waqllinqachá.", 'imagemaxsize' => "Rikchap chhikan kayninta kaykama saywachay:
    ''(willañiqi ch'uyanchana p'anqakunapaq)''", 'thumbsize' => "Ch'iñicha rikchachap chhikan kaynin:", 'widthheightpage' => "$1×$2, $3 {{PLURAL:$3|p'anqa|p'anqakuna}}", -'file-info' => '(willañiqip chhikan kaynin: $1; MIME laya: $2)', -'file-info-size' => '($1 × $2 iñu; willañiqip chhikan kaynin: $3; MIME laya: $4)', +'file-info' => 'willañiqip chhikan kaynin: $1; MIME laya: $2', +'file-info-size' => '$1 × $2 iñu; willañiqip chhikan kaynin: $3; MIME laya: $4', 'file-nohires' => 'Manam kanchu aswan huyakuyuq rikcha.', -'svg-long-desc' => '(SVG willañiqi, rimasqakama $1 × $2 iñuyuq, willañiqip chhikan kaynin: $3)', +'svg-long-desc' => 'SVG willañiqi, rimasqakama $1 × $2 iñuyuq, willañiqip chhikan kaynin: $3', 'show-big-image' => 'Qallariy huyaku', 'show-big-image-thumb' => 'Kay ñawpaq qhawariypa chhikan kaynin: $1 × $2 iñu', 'file-info-gif-looped' => 'muyupayachisqa', 'file-info-gif-frames' => '$1 {{PLURAL:$1|inchu|inchukuna}}', +'file-info-png-looped' => 'muyupayachisqa', +'file-info-png-repeat' => '$1 {{PLURAL:$1|kuti|kuti}} pukllasqa', +'file-info-png-frames' => '$1 {{PLURAL:$1|inchu|inchukuna}}', # Special:NewFiles 'newimages' => 'Musuq rikchakunap suyu-suyun', @@ -2814,8 +2886,8 @@ Kikin siq'ipi ima qatiq t'inkillapas sapaqllatam hamut'arisqa, ahinataq siq'ipi 'exif-colorspace' => 'Llimphi suyu', 'exif-componentsconfiguration' => "Sapa ñawpariqninpa sut'in", 'exif-compressedbitsperpixel' => "Rikchap mat'isqa kaynin laya", -'exif-pixelydimension' => 'Rikchap chaniyuq suni kaynin', -'exif-pixelxdimension' => 'Rikchap chaniyuq hanaq kaynin', +'exif-pixelydimension' => 'Rikchap suni kaynin', +'exif-pixelxdimension' => 'Rikchap hanaq kaynin', 'exif-makernote' => 'Ruraqpa willasqankuna', 'exif-usercomment' => "Llamk'achiqpa willayninkuna", 'exif-relatedsoundfile' => 'Ninachiq ruqyay willañiqi', @@ -2831,9 +2903,9 @@ Kikin siq'ipi ima qatiq t'inkillapas sapaqllatam hamut'arisqa, ahinataq siq'ipi 'exif-spectralsensitivity' => 'Ispiktru musyaykuy', 'exif-isospeedratings' => 'ISO utqay chayninchay', 'exif-oecf' => "Achkiy antañiqichana t'ikrana mink'aqi", -'exif-shutterspeedvalue' => "Wichq'aqpa utqaynin", -'exif-aperturevalue' => "Illa k'ichkina", -'exif-brightnessvalue' => "K'anchay", +'exif-shutterspeedvalue' => "APEX wichq'aqpa utqaynin", +'exif-aperturevalue' => "APEX illa k'ichkina", +'exif-brightnessvalue' => "APEX k'anchay", 'exif-exposurebiasvalue' => 'Churapay pantapayay', 'exif-maxaperturevalue' => "Illa k'ichkinap lliwmanta aswan chanin", 'exif-subjectdistance' => 'Rikchachasqamanta karu kaynin', @@ -2897,6 +2969,7 @@ Kikin siq'ipi ima qatiq t'inkillapas sapaqllatam hamut'arisqa, ahinataq siq'ipi 'exif-gpsareainformation' => 'GPS suyu suti', 'exif-gpsdatestamp' => "GPS p'unchaw", 'exif-gpsdifferential' => 'GPS karuncha allinchay', +'exif-objectname' => 'Uchuy suti', # EXIF attributes 'exif-compression-1' => "Mana mat'isqa", @@ -2978,6 +3051,8 @@ Kikin siq'ipi ima qatiq t'inkillapas sapaqllatam hamut'arisqa, ahinataq siq'ipi 'exif-sensingmethod-7' => "Kimsantin siq'i musyachiq", 'exif-sensingmethod-8' => "Qatiqlla siq'i llimphi musyachiq", +'exif-filesource-3' => "Ruk'aqta sayaq rikch'a hap'ina", + 'exif-scenetype-1' => "Chiqalla hap'isqa rikcha", 'exif-customrendered-0' => 'Sapsi ruraykuy', @@ -3054,25 +3129,25 @@ Kikin siq'ipi ima qatiq t'inkillapas sapaqllatam hamut'arisqa, ahinataq siq'ipi 'limitall' => 'tukuy', # E-mail address confirmation -'confirmemail' => 'E-chaski imamaytaykita takyachiy', -'confirmemail_noemail' => 'Manaraq [[Special:Preferences|allinkachinaykikunapi]] chaniyuq e-chaski imamaytayki kachkanchu.', -'confirmemail_text' => "{{SITENAME}}piqa e-chaski imamaytaykita takyachinaykim tiyan e-chaskita llamk'achinaykipaq. Urapi butunta ñit'ipay e-chaski imamaytaykiman takyachina chaskita kachamunaykupaq. +'confirmemail' => 'E-chaski imamaytaykita takyachiy', +'confirmemail_noemail' => 'Manaraq [[Special:Preferences|allinkachinaykikunapi]] chaniyuq e-chaski imamaytayki kachkanchu.', +'confirmemail_text' => "{{SITENAME}}piqa e-chaski imamaytaykita takyachinaykim tiyan e-chaskita llamk'achinaykipaq. Urapi butunta ñit'ipay e-chaski imamaytaykiman takyachina chaskita kachamunaykupaq. Chay takyachina chaskiqa tuyru t'inkiyuqmi kanqa. Chay tuyru t'inkita qatiy e-chaski imamaytaykip chaniyuq kayninta takyachinaykipaq.", -'confirmemail_pending' => 'Takyachina tuyruqa e-chaski imamaytaykiman kachasqañam; rakiqunaykita ñaqha kichariptiykiqa, huk minutukunata suyanaykichá chayamusunaykipaq, manaraq musuq tuyruta mañakuspayki.', -'confirmemail_send' => 'Takyachina tuyruta kachamuway', -'confirmemail_sent' => 'Takyachina chaskiqa kachasqañam.', -'confirmemail_oncreate' => "Takyachina chaskiqa e-chaski imamaytaykiman kachamusqam. Yaykunaykipaqqa qatinayki manam tiyanchu, ichataq kay wikipi e-chaski ruranakunata llamk'achinaykipaq tiyanmi.", -'confirmemail_sendfailed' => '{{SITENAME}} manam atinchu takyachina e-chaskita kachayta. Ama hina kaspa, imamaytaykita mana saqillasqa sananchakunakama llanchiy. +'confirmemail_pending' => 'Takyachina tuyruqa e-chaski imamaytaykiman kachasqañam; rakiqunaykita ñaqha kichariptiykiqa, huk minutukunata suyanaykichá chayamusunaykipaq, manaraq musuq tuyruta mañakuspayki.', +'confirmemail_send' => 'Takyachina tuyruta kachamuway', +'confirmemail_sent' => 'Takyachina chaskiqa kachasqañam.', +'confirmemail_oncreate' => "Takyachina chaskiqa e-chaski imamaytaykiman kachamusqam. Yaykunaykipaqqa qatinayki manam tiyanchu, ichataq kay wikipi e-chaski ruranakunata llamk'achinaykipaq tiyanmi.", +'confirmemail_sendfailed' => '{{SITENAME}} manam atinchu takyachina e-chaskita kachayta. Ama hina kaspa, imamaytaykita mana saqillasqa sananchakunakama llanchiy. Kutichisqa chaski: $1', -'confirmemail_invalid' => "Takyachina tuyruqa manam allinchu, mawk'ayasqañachá.", -'confirmemail_needlogin' => '$1-llawanmi e-chaski imamaytaykita takyachiyta atinki.', -'confirmemail_success' => 'E-chaski imamaytaykiqa takyachisqañam. +'confirmemail_invalid' => "Takyachina tuyruqa manam allinchu, mawk'ayasqañachá.", +'confirmemail_needlogin' => '$1-llawanmi e-chaski imamaytaykita takyachiyta atinki.', +'confirmemail_success' => 'E-chaski imamaytaykiqa takyachisqañam. Kunanqa wikiman [[Special:UserLogin|yaykamuspayki]] ayniytam atinki.', -'confirmemail_loggedin' => 'E-chaski imamaytaykiqa takyachisqañam.', -'confirmemail_error' => 'Ima pantasqapas tukurqan takyachinaykita waqaychaypi.', -'confirmemail_subject' => '{{SITENAME}} e-chaski imamayta takyachina', -'confirmemail_body' => 'Pipas (qamchiki, $1 IP huchhayuq tiyaymanta) kicharirqan {{SITENAME}}paq "$2" sutiyuq rakiqunatam, kay e-chaski imamaytayuq. +'confirmemail_loggedin' => 'E-chaski imamaytaykiqa takyachisqañam.', +'confirmemail_error' => 'Ima pantasqapas tukurqan takyachinaykita waqaychaypi.', +'confirmemail_subject' => '{{SITENAME}} e-chaski imamayta takyachina', +'confirmemail_body' => 'Pipas (qamchiki, $1 IP huchhayuq tiyaymanta) kicharirqan {{SITENAME}}paq "$2" sutiyuq rakiqunatam, kay e-chaski imamaytayuq. Kay rakiquna chiqapta qamman kapuptinqa, kay t\'inkita qatiy {{SITENAME}}pi e-chaski ruranaykita takyachinaykipaq: @@ -3083,8 +3158,31 @@ Rakiquna *mana* qamman kapuptinqa, kay t\'inkita qatiy takyachinaman ama ninayki $5 Kay takyachina tuyruqa $4 pachapim puchukanqa.', -'confirmemail_invalidated' => 'E-chaski imamayta takyachinaman ama nisqam', -'invalidateemail' => 'E-chaski takyachinaman ama niy', +'confirmemail_body_changed' => 'Pipas (qamchiki, $1 IP huchhayuq tiyaymanta) hukcharqan {{SITENAME}}pi "$2" sutiyuq rakiqunapaq e-chaski imamaytatam kay imamaytaman. + +Kay rakiquna chiqapta qamman kapuptinqa, kay t\'inkita qatiy {{SITENAME}}pi e-chaski ruranaykita musuqmanta takyachinaykipaq: + +$3 + +Rakiquna *mana* qamman kapuptinqa, kay t\'inkita qatiy takyachinaman ama ninaykipaq: + +$5 + +Kay takyachina tuyruqa $4 pachapim puchukanqa.', +'confirmemail_body_set' => 'Pipas, qamchiki, $1 IP huchhayuq tiyaymanta, +hukcharqan {{SITENAME}}pi "$2" sutiyuq rakiqunapaq e-chaski imamaytatam kay imamaytaman. + +Kay rakiquna chiqapta qamman kapuptinqa, kay t\'inkita qatiy {{SITENAME}}pi e-chaski ruranaykita musuqmanta takyachinaykipaq: + +$3 + +Rakiquna *mana* qamman kapuptinqa, kay t\'inkita qatiy takyachinaman ama ninaykipaq: + +$5 + +Kay takyachina tuyruqa $4 pachapim puchukanqa.', +'confirmemail_invalidated' => 'E-chaski imamayta takyachinaman ama nisqam', +'invalidateemail' => 'E-chaski takyachinaman ama niy', # Scary transclusion 'scarytranscludedisabled' => "[Interwiki ch'aqtayman ama nisqa]", @@ -3124,6 +3222,7 @@ Ama hina kaspa, chiqapta kay p'anqatam musuqmanta kamayta munani nispa takyachiy 'table_pager_first' => "Ñawpaq ñiqin p'anqa", 'table_pager_last' => "Qhipaq ñiqin p'anqa", 'table_pager_limit' => "$1 kaqkunata p'anqaman rikuchiy", +'table_pager_limit_label' => "Huk p'anqapi hayk'a qallawakuna:", 'table_pager_limit_submit' => 'Riy', 'table_pager_empty' => 'Manam ima taripasqapas kanchu', @@ -3177,6 +3276,7 @@ Sapsilla ñawpaq qhawariyta tukuykachay.', 'version-specialpages' => "Sapaq p'anqakuna", 'version-parserhooks' => "T'ikrana ch'iwinakuna", 'version-variables' => 'Hukchakuqkuna', +'version-skins' => 'Qarakuna', 'version-other' => 'Wakin', 'version-mediahandlers' => "Midya llamk'apuq", 'version-hooks' => "Ch'iwinakuna", @@ -3188,6 +3288,13 @@ Sapsilla ñawpaq qhawariyta tukuykachay.', 'version-hook-subscribedby' => 'Kay runap mañaykusqan:', 'version-version' => '(Musuqchasqa $1)', 'version-license' => 'Saqillay', +'version-poweredby-credits' => "Kay wikitaqa '''[http://www.mediawiki.org/ MediaWiki-m]''' atichin, copyright © 2001-$1 $2.", +'version-poweredby-others' => 'hukkuna', +'version-license-info' => "MediaWiki llamp'u kaqqa qispim; mast'ariytam icha wakinchaytam atinki GNU General Public License nisqa saqillaypa kamachisqankama, Free Software Foundation nisqap uyaychasqan; saqillaypa iskay ñiqin musuqchasqan, munaspaykiqa aswan musuq musuqchasqan. + +MediaWikitaqa mast'ariyku runakunata yanapanapaqmi, ichataq MANAM FIYAKUYTA ATIYKUCHU; manapas ch'aqtasqa RURANALLA FIYAKUYTACHU manapas ima SAPAQ TUKUYNINPAQCHU. GNU General Public License nisqa saqillayta qhaway aswan yuyaykunapaq. + +[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General Public License nisqa saqillaymanta iskaychasqata] chaskiykiman kay wakichinawan; manaqa, kayman qillqamuwayku: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA icha [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html internet llikapi ñawiriy].", 'version-software' => "Tiyachisqa llamp'u kaq", 'version-software-product' => 'Ruruchisqa', 'version-software-version' => 'Musuqchasqa', @@ -3258,6 +3365,15 @@ Mana “{{ns:file}}:” k'askaqniyuq willañiqip sutinta yaykuchiy.", 'tags-edit' => "llamk'apuy", 'tags-hitcount' => '$1 {{PLURAL:$1|hukchasqa|hukchasqakuna}}', +# Special:ComparePages +'comparepages' => "P'anqakunata wakichay", +'compare-selector' => 'Musuqchasqakunata wakichay', +'compare-page1' => "P'anqa 1", +'compare-page2' => "P'anqa 2", +'compare-rev1' => 'Musuqchasqa 1', +'compare-rev2' => 'Musuqchasqa 2', +'compare-submit' => 'Wakichay', + # Database error messages 'dberr-header' => 'Kay wikiqa sasachakuyniyuqmi', 'dberr-problems' => 'Achachaw! Kay tiyayqa allwiya sasachakuykunayuqmi kachkan.', @@ -3274,8 +3390,13 @@ Mana “{{ns:file}}:” k'askaqniyuq willañiqip sutinta yaykuchiy.", 'htmlform-float-invalid' => 'Qusqayki chaniqa manam yupaychu.', 'htmlform-int-toolow' => 'Sapaqchasqayki chaniqa pisi saywa kaq $1-manta aswan pisim.', 'htmlform-int-toohigh' => 'Sapaqchasqayki chaniqa achka saywa kaq $1-manta aswan achkam.', +'htmlform-required' => 'Kay chaniqa muchusqam', 'htmlform-submit' => 'Kachay', 'htmlform-reset' => 'Hukchasqakunata kutichiy', 'htmlform-selectorother-other' => 'Wakin', +# SQLite database support +'sqlite-has-fts' => "$1 hunt'a qillqa maskana yanapawan", +'sqlite-no-fts' => "$1 mana hunt'a qillqa maskana yanapawan", + ); diff --git a/languages/messages/MessagesRgn.php b/languages/messages/MessagesRgn.php index 6ede0d6c..eef081ec 100644 --- a/languages/messages/MessagesRgn.php +++ b/languages/messages/MessagesRgn.php @@ -29,7 +29,7 @@ $messages = array( 'tog-editsection' => "S't'vù l'abilitaziòn ad'cambié al seziòn cum e' link [mudèfica]", 'tog-editsectiononrightclick' => "S't'vù l'abilitaziòn ad cambié al seziòn
    scjazénd e tast a dèstra sora e titul (u j vò JavaScript)", 'tog-showtoc' => "Fam avdé l'indiz (sol par al pàgin cun piò d'3 seziòn)", -'tog-rememberpassword' => "Arcurdam la parola d'ordin, par piasé", +'tog-rememberpassword' => "Arcurdam la parola d'ordin, par piasé (fèn a un masum $1 {{PLURAL:$1|dè|dè}})", 'tog-watchcreations' => "Mett insèn al pàgin ch't'e' fat adès, intla lèsta da tní sot'occ", 'tog-watchdefault' => "Mett insèn al pàgin ch'a j ò lavurè sora int la lèsta dal pàgin da tnì sot'òcc", 'tog-watchmoves' => "Mett insèn al pàgin ch'a j ò spustè int la lèsta dal pàgin da tnì sot'òcc", @@ -263,7 +263,7 @@ Par piasé, fa raport a un [[Special:ListUsers/sysop|aministrador]] cun la nota # Login and logout pages 'yourname' => 'Soranòm:', 'yourpassword' => 'Paróla segreta:', -'remembermypassword' => "Regèstra la mi parola d'ordin sora ste computer", +'remembermypassword' => "Regèstra la mi parola d'ordin sora ste computer (for a maximum of $1 {{PLURAL:$1|day|days}})", 'login' => 'Va dentar', 'nav-login-createaccount' => 'Va dentar / Èla la prèma volta?', 'userlogin' => 'Vèn dentar/A sit nov?', @@ -492,7 +492,6 @@ $1 {{PLURAL:$1|elemént|elemént}}', # Watchlist 'watchlist' => "Pàgin ch'a ten d'öcc", 'mywatchlist' => "Pàgin ch'a ten d'öcc", -'watchlistfor' => "(da '''$1''')", 'addedwatch' => "Mett insem a la lèsta d'pàgin sot öcc", 'addedwatchtext' => "La pàgina \"[[:\$1]]\" adès l'è int la lèsta dal [[Special:Watchlist|pàgin da tnì d'öcc]]. D'ôra inenz t'pù avdé tòt al mudèfic a sta pàgina e a la pàgina d'cunversaziòn int la [[Special:RecentChanges|lèsta d'j cambiamént rezent]], in '''gros''', acsè j 's'pò guardè mej. Se in un sgond temp t'vu cavé la pàgina dala lèsta da tnì d'öcc, s-cjaza un'ètra volta sora e' butòn \"ten d'öcc\".", @@ -703,9 +702,9 @@ Par piasé, met insem al du pàgin te, fasend copia e incola.", 'nextdiff' => 'Mudèfica piò nova →', # Media information -'file-info-size' => "($1 × $2 pixel, amsùra d'e' file: $3, tipo MIME: $4)", +'file-info-size' => "$1 × $2 pixel, amsùra d'e' file: $3, tipo MIME: $4", 'file-nohires' => "U n' è pusèbil d'avdé cun òna risoluziòn piò élta. ", -'svg-long-desc' => "(file d'taja SVG, dimensiòn numinèli $1 × $2 pixel, dimensiòn d'e' file: $3)", +'svg-long-desc' => "file d'taja SVG, dimensiòn numinèli $1 × $2 pixel, dimensiòn d'e' file: $3", 'show-big-image' => 'Versiòn ad amsura pina', 'show-big-image-thumb' => "Amsùra d'sta versiòn: $1 × $2 pixel", diff --git a/languages/messages/MessagesRif.php b/languages/messages/MessagesRif.php index 71decd06..77370423 100644 --- a/languages/messages/MessagesRif.php +++ b/languages/messages/MessagesRif.php @@ -78,10 +78,6 @@ $messages = array( 'qbedit' => 'Ẓṛeg', 'qbspecialpages' => 'Tudmawin Special', -# Vector skin -'vector-namespace-main' => 'Tasna', -'vector-namespace-mediawiki' => 'Tabrat', - 'errorpagetitle' => 'Anezri', 'returnto' => 'Dwl ghar $1.', 'tagline' => 'Zi {{SITENAME}}', @@ -168,7 +164,7 @@ teqqad ad yilli days ca n usekkil war itwagg deg isem .', # Login and logout pages 'yourname' => 'Izwl-usqdac:', 'yourpassword' => 'Tawalt n wadaf:', -'remembermypassword' => 'ejj (login) inu deg uselkim a', +'remembermypassword' => 'ejj (login) inu deg uselkim a (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'Adf', 'nav-login-createaccount' => 'Adef / egg amiḍan', 'loginprompt' => "itxessa ad-teṭfed (''cookies'') bac ad tadfed ɣar {{SITENAME}}.", @@ -270,9 +266,6 @@ mala war texsed tirra inac ad twaẓṛegent , ad twamsebḍant . Ur ten-teg ca da.
    tjadjid-anɣ Ɛawt ila qa d cekk ig yuran manaya, niɣ tesneɣlet-id zi ca n uɣbal nniḍn d alelli. '''UR SADDAF CA TIRRA ƔARSENT COPYRIGHTE BLA MA AD-IXES BAB-INES !'''", -'longpagewarning' => "'''WARNING: Tasna ya dag-s $1 kilobyte ; -ca n imsuṭṭuyen(browsers) war zemren ca ad ẓṛegen tasniwin dag-sent 32 kb niɣ ktar. -ixessa ad ten tebḍid ɣar tigezmin(sections) d timeẓyanin.'''", 'templatesused' => 'Timudmiwin itwaggen di Tasna ya:', 'templatesusedpreview' => 'Timudmiwin igg itwasxdemen dg uzar-ascan a :', 'template-protected' => '(twaḥḍa)', @@ -512,7 +505,6 @@ Tasniwin di [[Special:Watchlist|your watchlist]] d '''tizurarin'''.", # Watchlist 'watchlist' => 'Tabdart uḥṭṭu inu', 'mywatchlist' => 'Tabdart uḥṭṭu inu', -'watchlistfor' => "(i '''$1''')", 'addedwatch' => 'Temmarni ɣar Tabdart uḥṭṭu', 'addedwatchtext' => 'Tasna "[[:$1]]" Temmarni ɣar [[Special:Watchlist|Tabdart uḥṭṭu]].', 'removedwatch' => 'twakkes zi Tabdart uḥṭṭu', @@ -726,9 +718,9 @@ Bbeẓ x ufeskar n uzar-timeẓṛi zzat i gha txemmled min turid', 'nextdiff' => 'Amṣebḍi zzat →', # Media information -'file-info-size' => '($1 × $2 pixel, tiddi(size) n ufaylu: $3, anaw(type) n MIME: $4)', +'file-info-size' => '$1 × $2 pixel, tiddisize n ufaylu: $3, anawtype n MIME: $4', 'file-nohires' => 'walu ca n resolution yemɣa x wa.', -'svg-long-desc' => '(Afaylu n SVG, dis $1 × $2 pixel, Tiddi n ufaylu: $3)', +'svg-long-desc' => 'Afaylu n SVG, dis $1 × $2 pixel, Tiddi n ufaylu: $3', 'show-big-image' => 'Resolution ameqran', 'show-big-image-thumb' => 'Tiddi n uzar-ascan: $1 × $2 pixel ', diff --git a/languages/messages/MessagesRm.php b/languages/messages/MessagesRm.php index 231e0cfd..a1044ae9 100644 --- a/languages/messages/MessagesRm.php +++ b/languages/messages/MessagesRm.php @@ -14,6 +14,25 @@ * @author לערי ריינהארט */ +$namespaceNames = array( + NS_MEDIA => 'Multimedia', + NS_SPECIAL => 'Spezial', + NS_TALK => 'Discussiun', + NS_USER => 'Utilisader', + NS_USER_TALK => 'Utilisader_discussiun', + NS_PROJECT_TALK => '$1_discussiun', + NS_FILE => 'Datoteca', + NS_FILE_TALK => 'Datoteca_discussiun', + NS_MEDIAWIKI => 'MediaWiki', + NS_MEDIAWIKI_TALK => 'MediaWiki_discussiun', + NS_TEMPLATE => 'Model', + NS_TEMPLATE_TALK => 'Model_discussiun', + NS_HELP => 'Agid', + NS_HELP_TALK => 'Agid_discussiun', + NS_CATEGORY => 'Categoria', + NS_CATEGORY_TALK => 'Categoria_discussiun', +); + $messages = array( # User preference toggles 'tog-underline' => 'suttastritgar colliaziuns:', @@ -30,8 +49,7 @@ $messages = array( 'tog-editsection' => 'Mussar links [modifitgar] per modifitgar singulas secziuns', 'tog-editsectiononrightclick' => 'Activar la pussaivladad da modifitgar secziuns cun in clic dretg (basegna JavaScript)', 'tog-showtoc' => 'Mussar ina tabla da cuntegn sin paginas cun dapli che trais tetels', -'tog-rememberpassword' => 'Restar annunzià permanentamain sin quest computer', -'tog-editwidth' => "Schlargiar il champ d'entataziun per emplenir l'entir visur", +'tog-rememberpassword' => "S'annunziar permanantamain cun quest navigatur (per maximalmain $1 {{PLURAL:$1|di|dis}})", 'tog-watchcreations' => "Observar paginas ch'jau hai creà", 'tog-watchdefault' => "Observar paginas ch'jau hai edità", 'tog-watchmoves' => "Observar paginas ch'jau hai spustà", @@ -175,31 +193,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Agiuntar chapitel', -'vector-action-delete' => 'Stizzar', -'vector-action-move' => 'Spustar', -'vector-action-protect' => 'Bloccar', -'vector-action-undelete' => 'Restituir', -'vector-action-unprotect' => 'Debloccar', -'vector-namespace-category' => 'Categoria', -'vector-namespace-help' => "Pagina d'agid", -'vector-namespace-image' => 'Datoteca', -'vector-namespace-main' => 'Pagina', -'vector-namespace-media' => 'Pagina da medias', -'vector-namespace-mediawiki' => 'Communicaziun dal sistem MediaWiki', -'vector-namespace-project' => 'Pagina da project', -'vector-namespace-special' => 'Pagina speziala', -'vector-namespace-talk' => 'Discussiun', -'vector-namespace-template' => 'Model', -'vector-namespace-user' => "Pagina d'utilisader", -'vector-view-create' => 'Crear', -'vector-view-edit' => 'Modifitgar', -'vector-view-history' => 'Cronologia', -'vector-view-view' => 'Leger', -'vector-view-viewsource' => 'Mussar il code', -'actions' => 'Acziuns', -'namespaces' => 'Tip da pagina', -'variants' => 'Variantas', +'vector-action-addsection' => 'Agiuntar chapitel', +'vector-action-delete' => 'Stizzar', +'vector-action-move' => 'Spustar', +'vector-action-protect' => 'Bloccar', +'vector-action-undelete' => 'Restituir', +'vector-action-unprotect' => 'Debloccar', +'vector-simplesearch-preference' => 'Activar las propostas per tschertgar extendidas (be per il skin Vector)', +'vector-view-create' => 'Crear', +'vector-view-edit' => 'Modifitgar', +'vector-view-history' => 'Cronologia', +'vector-view-view' => 'Leger', +'vector-view-viewsource' => 'Mussar il code', +'actions' => 'Acziuns', +'namespaces' => 'Tip da pagina', +'variants' => 'Variantas', 'errorpagetitle' => 'Errur', 'returnto' => 'Enavos tar $1.', @@ -260,6 +268,9 @@ Memia blers utilisaders emprovan da chargiar questa pagina. Spetga per plaschair in mument avant che ti eprovas da puspè contemplar questa pagina. $1', +'pool-timeout' => 'Surpassà il temp durant spetgar sin la bloccada', +'pool-queuefull' => 'La colona da spetga dil pool è plaina', +'pool-errorunknown' => 'Errur nunenconuschenta', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Davart {{SITENAME}}', @@ -426,7 +437,8 @@ Betg emblida da midar tias [[Special:Preferences|preferenzas da {{SITENAME}}]].' 'yourname' => "Num d'utilisader", 'yourpassword' => 'pled-clav', 'yourpasswordagain' => 'repeter pled-clav', -'remembermypassword' => 'Memorisar il pled-clav', +'remembermypassword' => "S'annunziar permanantamain sin quest computer (per maximalmain $1 {{PLURAL:$1|di|dis}})", +'securelogin-stick-https' => "Restar collià entras HTTPS suenter l'annunzia", 'yourdomainname' => 'Vossa domain', 'externaldberror' => "U ch'i è capità ina errur cun l'autentificaziun externa u che ti na dastgas betg actualisar tes conto extern.", 'login' => "T'annunziar", @@ -443,6 +455,7 @@ Betg emblida da midar tias [[Special:Preferences|preferenzas da {{SITENAME}}]].' 'gotaccount' => "Gia in conto d'utilisader? '''$1'''.", 'gotaccountlink' => "T'annunziar", 'createaccountmail' => 'per e-mail', +'createaccountreason' => 'Motiv:', 'badretype' => 'Ils dus pleds-clav na corrispundan betg.', 'userexists' => "Quest num d'utilisader vegn gia duvrà. Tscherna per plaschair in'auter.", 'loginerror' => "Sbagl cun t'annunziar", @@ -468,6 +481,7 @@ Curregia ti\'endataziun.', 'wrongpasswordempty' => 'Ti as emblidà da scriver tes pled-clav. Prova anc ina giada.', 'passwordtooshort' => 'Tes pled-clav sto cuntegnair almain {{PLURAL:$1|in bustab|$1 bustabs}}.', 'password-name-match' => "Il pled-clav na dastga betg esser il medem sco il num d'utilisader.", +'password-login-forbidden' => "L'utilisaziun da quest num d'utilisader e pled-clav è vegnida scumandada.", 'mailmypassword' => 'Trametter in nov pled-clav per e-mail', 'passwordremindertitle' => 'Nov pled-clav temporar per {{SITENAME}}', 'passwordremindertext' => 'Insatgi (probablamain ti, cun l\'adressa dad IP $1) ha dumandà in nov pled-clav per {{SITENAME}} ($4). Il pled-clav temporar "$3" per l\'utilisader "$2" è vegnì creà. Sche quai era tes intent, ti al dovras per t\'annunziar e tscherner lura in nov pled-clav. Quest pled-clav temporar vegn a scrudar en {{PLURAL:$5|in di|$5 dis}}. @@ -504,6 +518,9 @@ Spetga per plaschair avant ch'empruvar anc ina giada.", 'loginlanguagelabel' => 'Lingua: $1', 'suspicious-userlogout' => "Tia dumonda per partir è vegnida refusada perquai ch'i para ch'ella è vegnida tramessa d'in navigatur che funcziuna betg correctamain u d'in proxy da cache.", +# E-mail sending +'php-mail-error-unknown' => 'Errur nunenconuschenta en la funcziun mail() da PHP', + # Password reset dialog 'resetpass' => 'Midar il pled-clav', 'resetpass_announce' => "Ti ès t'annunzià cun in pled-clav temporar che ti has retschavì per e-mail. @@ -555,11 +572,12 @@ Eventualmain has ti gia midà cun success tes pled-clav u dumandà per in nov pl 'showlivepreview' => 'Prevista directa', 'showdiff' => 'Mussar midadas', 'anoneditwarning' => "Vus essas betg annunziads. Empè dal num d'utilisader vign l'adressa dad IP registrada en la historia da las versiuns.", +'anonpreviewwarning' => "''Ti n'es betg t'annunzià. Cun memorisar vegn perquai tia adressa IP registrada en la cronologia da la pagina.''", 'missingsummary' => "'''Avis:''' Ti has betg inditgà ina resumaziun. Sche ti cliccas danovamain \"{{int:savearticle}}\" vegn tia midada memorisada senza ina tala.", 'missingcommenttext' => 'Endatescha per plaschair ina resumaziun.', -'missingcommentheader' => "'''Avis:''' Ti has betg inditgà ina resumaziun. -Sche ti cliccas danovamain \"{{int:savearticle}}\" vegn tia midada memorisada senza ina tala.", +'missingcommentheader' => "'''Avis:''' Ti n'has betg inditgà in subject/titel per quest commentari. +Sche ti cliccas anc ina giada sin \"{{int:savearticle}}\" vegn il commentari memorisà senza in tal.", 'summary-preview' => 'prevista da la resumaziun:', 'subject-preview' => "Prevista da l'object:", 'blockedtitle' => 'Utilisader è bloccà', @@ -636,6 +654,12 @@ L'ultima endataziun dal log da bloccar vegn mussà sutvart sco referenza:", '''El n'è anc betg memorisà.'''", 'userjspreview' => "'''Fa stim che quai è be ina prevista da tes JavaScript d'utilisader.''' '''El n'è anc betg memorisà.'''", +'sitecsspreview' => "'''Fa stim che quai è be ina prevista da quest CSS.''' +'''El n'è anc betg memorisà.'''", +'sitejspreview' => "'''Fa stim che quai è be ina prevista da quest JavaScript.''' +'''El n'è anc betg memorisà.'''", +'userinvalidcssjstitle' => "'''Attenziun:''' I n'exista nagin skin \"\$1\". +Fa stim che titels da paginas persunalisadas .css u .js vegnan scrits pitschen, p. ex. {{ns:user}}:Foo/vector.css e betg {{ns:user}}:Foo/Vector.css.", 'updated' => '(midà)', 'note' => "'''Remartga:'''", 'previewnote' => "'''Fa stim che quai è be ina prevista.''' @@ -677,9 +701,6 @@ Ti garanteschas che ti has scrit tez quai u copià dad ina funtauna ch'è 'publi Sche ti na vuls betg che tes texts pon vegnir modifitgads, na als endatescha betg qua.
    Ti confermas era che ti has scrit sez quest text u al has copià d'ina funtaunda 'public domain' u semigliant libra (guarda $1 per detagls). '''Betg trametta ovras protegidas dal dretg d'autur senza lubientscha!'''", -'longpagewarning' => "'''ADATG: Questa artitgel è $1 kilobytes gronda. Insaquants browsers -han forsa problems cun modifitgar artitgels da la grondezza 32kb u pli grond. -Ponderai per plaschair da divider quest artitgel en pli pitschnas parts. '''", 'longpageerror' => "'''Errur: Il text che ti has tramess è $1 kilobytes gronds. Quei ei pli grond ch'il maximum da $2 kilobytes. Il text na po betg vegnir memorisà. '''", 'readonlywarning' => "'''Attenziun: La banca da datas è vegnida bloccada per motivs da mantegniment, uschia che ti na sas betg memorisar tias modificaziuns gest ussa.''' Per betg perder las midadas ta recummandain nus da copiar il text en in editur da text sin tes computer ed al memorisar per pli tard. @@ -855,11 +876,12 @@ Fa stim che navigar cun agid da las coalliziuns reinizialisescha tia tscherna.', # Diffs 'history-title' => 'Cronica da versiuns da "$1"', 'difference' => '(differenza tranter versiuns)', +'difference-multipage' => '(Differenzas tranter las paginas)', 'lineno' => 'Lingia $1:', 'compareselectedversions' => 'cumparegliar las versiuns selecziunadas', 'showhideselectedversions' => 'Mussar/zuppentar las versiuns tschernidas', 'editundo' => 'revocar', -'diff-multi' => '({{PLURAL:$1|Ina versiun|$1 versiuns}} tranter en na vegnan betg mussadas.)', +'diff-multi' => '({{PLURAL:$1|Ina versiun|$1 versiuns}} {{PLURAL:$2|dad in utilisader|da $2 utilisaders}} tranter en na {{PLURAL:$1|vegn betg mussada|na vegnan betg mussadas}}.)', # Search results 'searchresults' => 'Resultats da tschertga', @@ -894,6 +916,7 @@ Fa stim che navigar cun agid da las coalliziuns reinizialisescha tia tscherna.', 'searchprofile-everything-tooltip' => 'Tschertgar en tut il cuntegn (inclusivamain paginas da discussiun)', 'searchprofile-advanced-tooltip' => 'Tschertgar en ulteriurs tips da pagina', 'search-result-size' => '$1 ({{PLURAL:$2|in pled|$2 pleds}})', +'search-result-category-size' => '{{PLURAL:$1|1 commember|$1 commembers}} ({{PLURAL:$2|1 sutcategoria|$2 sutcategorias}}, {{PLURAL:$3|1 datoteca|$3 datotecas}})', 'search-result-score' => 'Relevanza: $1 %', 'search-redirect' => '(renvià da $1)', 'search-section' => '(chapitel $1)', @@ -970,6 +993,7 @@ Considerescha che lur index da {{SITENAME}} po cuntegnair datas ch'èn betg pli 'resultsperpage' => 'resultats per pagina:', 'contextlines' => 'Lingia per resultat:', 'contextchars' => 'Segns per lingia:', +'stub-threshold-disabled' => 'Deactivà', 'recentchangesdays' => 'Dumber da dis che duain vegnir mussads en las ultimas midadas:', 'recentchangesdays-max' => 'Maximalmain $1 {{PLURAL:$1|di|dis}}', 'recentchangescount' => 'Dumber da modificaziuns che duai vegnir mussà sco standard:', @@ -1037,7 +1061,7 @@ Questa infurmaziun è publica.', 'prefs-advancedrendering' => 'Opziuns extendidas', 'prefs-advancedsearchoptions' => 'Opziuns extendidas', 'prefs-advancedwatchlist' => 'Opziuns extendidas', -'prefs-display' => 'Opziuns da visualisar', +'prefs-displayrc' => 'Opziuns da visualisar', 'prefs-diffs' => 'Cumparegliaziun da versiuns', # User rights @@ -1119,7 +1143,6 @@ Questa infurmaziun è publica.', 'right-userrights-interwiki' => "Modifitgar ils dretgs d'utilisaders sin autras wikis", 'right-siteadmin' => 'Bloccar u debloccar la banca da datas', 'right-reset-passwords' => "Redefinir pleds-clav d'auters utilisaders", -'right-versiondetail' => 'Mussar infurmaziuns detagliadas davart la software e sia versiun', 'right-sendemail' => 'Trametter e-mails ad auters utilisaders', # User rights log @@ -1170,14 +1193,9 @@ Questa infurmaziun è publica.', 'recentchanges-legend' => 'Opziuns per las ultimas midadas', 'recentchangestext' => "Sin questa pagina pos ti suandar las ultimas midadas sin '''{{SITENAME}}'''.", 'recentchanges-feed-description' => 'Suonda las ultimas midadas en la wiki cun quet feed.', -'recentchanges-label-legend' => 'Legenda: $1.', -'recentchanges-legend-newpage' => '$1 - nova pagina', 'recentchanges-label-newpage' => 'Questa modificaziun ha creà ina nova pagina', -'recentchanges-legend-minor' => '$1 - pitschna midada', 'recentchanges-label-minor' => 'Quai è ina pitschna modificaziun', -'recentchanges-legend-bot' => '$1 - midada da bot', 'recentchanges-label-bot' => 'Questa modificaziun è vegnida exequida dad in bot', -'recentchanges-legend-unpatrolled' => '$1 - midada betg controllada', 'recentchanges-label-unpatrolled' => "Questa midada n'è anc betg vegnida controllada", 'rcnote' => "Sutvart {{PLURAL:$1|è '''ina''' midada|èn las ultimas '''$1''' midadass}} {{PLURAL:$2|da l'ultim di|dals ultims '''$2''' dis}}, versiun dals $4 $5.", 'rcnotefrom' => "Midadas dapi '''$2''' (maximalmain '''$1''' vegnan mussads).", @@ -1224,6 +1242,9 @@ Paginas sin [[Special:Watchlist|tia glista d'observaziun]] èn '''grassas'''.", 'upload_directory_missing' => "L'ordinatur per chargiar viaden ($1) n'exista betg e na pudeva betg vegnir creà dal server.", 'upload_directory_read_only' => "L'ordinatur per chargiar viaden ($1) na po betg vegnir modifitgà dal server.", 'uploaderror' => 'Errur cun chargiar si', +'upload-recreate-warning' => "'''Attenziun: Ina datoteca cun quest num è vegnida stizzada u spustada.''' + +Il log da stizzar e spustar vegn mussà sutvart:", 'uploadtext' => "Utilisescha quest formular per chargiar si datotecas. Per contemplar u tschertgar datotecas gia chargiada si, visita la pagina [[Special:FileList|glista da datotecas chargiadas si]]. Tut las datotecas che vegnan chargiadas si èn era notads en il [[Special:Log/upload|log da chargiar si]], quellas ch'èn vegnidas stizzadas en il [[Special:Log/delete|log dal stizzar]]. @@ -1258,6 +1279,16 @@ Nus preferin datotecas {{PLURAL:\$3|dal tip|dals tips}} \$2.", 'filetype-banned-type' => "'''\".\$1\"''' è in tip da datoteca betg lubì. Lubidas èn datotecas {{PLURAL:\$3|dal tip|dals tips}} \$2.", 'filetype-missing' => 'La datoteca n\'ha nagina extensiun (p.ex. ".jpg").', +'empty-file' => 'La datoteca tramessa è vida.', +'file-too-large' => 'La datoteca tramessa è memia gronda.', +'filename-tooshort' => 'Il num da datoteca è memia curt.', +'filetype-banned' => 'Quest tip da datoteca è scumandà.', +'verification-error' => "Questa datoteca n'è betg passà cun success la verificaziun da datotecas.", +'illegal-filename' => "Il num da datoteca n'è betg lubì.", +'overwrite' => "Recuvrir (surscriver) datotecas existentas n'è betg lubì.", +'unknown-error' => 'Ina errur nunenconuschenta è capitada.', +'tmp-create-error' => 'Betg pussaivel da crear la datoteca temporara.', +'tmp-write-error' => 'Errur cun scriver la datoteca temporara.', 'large-file' => "Igl è recumandà che las datotecas n'èn betg pli grondas che $1; questa datoteca è $2 gronda.", 'largefileserver' => 'Questa datoteca è pli gronda che la grondezza maximala configurada.', @@ -1289,7 +1320,6 @@ Sche ti vuls anc adina chargiar si tia datoteca, turna anavos e tscherna in aute 'file-exists-duplicate' => 'Questa datoteca è in duplicat da {{PLURAL:$1|suandanta datoteca|suandantas datotecas}}:', 'file-deleted-duplicate' => 'Ina daoteca identica a questa ([[:$1]]) è vegnida stizzada pli baud. Ti duessas controllar la cronologia da stizzar da questa datoteca avant che puspè chargiar si ella.', -'successfulupload' => 'Chargia si cun success', 'uploadwarning' => 'Attenziun', 'uploadwarning-text' => 'Mida per plaschair la descripziun da la datoteca sutvart ed emprova danovamain.', 'savefile' => 'Memorisar la datoteca', @@ -1355,6 +1385,7 @@ In clic sin il titel d'ina colona mida la successiun da zavrar.", 'listfiles_search_for' => 'Tschtgar tenor il num da dateoca:', 'imgfile' => 'datoteca', 'listfiles' => 'Glista dals maletgs', +'listfiles_thumb' => 'Maletg da prevista', 'listfiles_date' => 'Data', 'listfiles_name' => 'Num', 'listfiles_user' => 'Utilisader', @@ -1460,6 +1491,7 @@ Betg emblida da controllar sche autras colliaziuns mainan als models avant ch'al 'statistics-edits' => "Modificaziuns da paginas dapi l'installaziun da {{SITENAME}}", 'statistics-edits-average' => 'Media da modificaziuns per pagina', 'statistics-views-total' => 'Visitas totalmain', +'statistics-views-total-desc' => "Visitas da paginas ch'existan betg u da paginas spezialas n'èn betg inclusas", 'statistics-views-peredit' => 'Visitas per modificaziun', 'statistics-users' => '[[Special:ListUsers|Utilisaders]] registrads', 'statistics-users-active' => 'Utilisaders activs', @@ -1470,9 +1502,9 @@ Betg emblida da controllar sche autras colliaziuns mainan als models avant ch'al 'disambiguationspage' => 'Template:disambiguiziun', 'doubleredirects' => 'Renviaments dubels', -'doubleredirectstext' => "Questa glista mussa renviaments che mainan puspè a renviaments. -Mintga colonna cuntegna colliaziuns a l'emprim ed al segund renviaments, sco era la pagina finala dal segund renviament che è probablamain la pagina a la quala duess vegnir renvià. -Elements stritgads èn gia eliminads.", +'doubleredirectstext' => "Questa glista mussa renviaments che mainan puspè a renviaments. +Mintga colonna cuntegna colliaziuns a l'emprim ed al segund renviaments, sco era la pagina finala dal segund renviament che è probablamain la pagina a la quala duess vegnir renvià. +Elements stritgads èn gia eliminads.", 'double-redirect-fixed-move' => '[[$1]] è vegnì spustà. I renviescha uss a [[$2]].', 'double-redirect-fixer' => 'Bot da renviaments', @@ -1496,6 +1528,8 @@ I renviescha uss a [[$2]].', 'nmembers' => '$1 {{PLURAL:$1|commember|commembers}}', 'nrevisions' => '{{PLURAL:$1|Ina versiun|$1 versiuns}}', 'nviews' => 'Contemplà $1 {{PLURAL:$1|giada|giadas}}', +'nimagelinks' => 'Utilisà sin $1 {{PLURAL:$1|pagina|paginas}}', +'ntransclusions' => 'utilisà sin $1 {{PLURAL:$1|pagina|paginas}}', 'specialpage-empty' => 'Questa pagina cuntegna actualmain naginas endataziuns.', 'lonelypages' => 'Paginas bandunadas', 'lonelypagestext' => "Las suandantas paginas n'èn betg integradas u n'èn betg colliadas cun autras paginas sin {{SITENAME}}.", @@ -1636,7 +1670,7 @@ L'adressa dad e-mail che ti has endatà en [[Special:Preferences|tias preferenza # Watchlist 'watchlist' => "mia glista d'observaziun", 'mywatchlist' => "Mia glista d'observaziun", -'watchlistfor' => "(per '''$1''')", +'watchlistfor2' => 'Per $1 $2', 'nowatchlist' => "Ti n'has nagins elements sin tia glista d'observaziun.", 'watchlistanontext' => "Ti stos $1 per vesair u modifitgar elements sin tia glista d'observaziun", 'watchnologin' => "Ti n'es betg t'annunzià!", @@ -1757,19 +1791,23 @@ Ti pos midar il livel da protecziun da quest\'artitgel, quai na vegn dentant bet 'month' => 'dal mais (e pli baud):', 'year' => "da l'onn (e pli baud):", -'sp-contributions-newbies' => 'Be mussar contribuziuns da contos novs', -'sp-contributions-newbies-sub' => "Per novs contos d'utilisader", -'sp-contributions-newbies-title' => "Contribuziuns da novs contos d'utilisader", -'sp-contributions-blocklog' => 'log dal bloccar', -'sp-contributions-deleted' => 'Contribuziuns da commembers stizzadas', -'sp-contributions-logs' => 'logs', -'sp-contributions-talk' => 'discussiun', -'sp-contributions-userrights' => "administraziun da dretgs d'utilisaders", -'sp-contributions-blocked-notice' => "Quai utilisader è bloccà actualmain. +'sp-contributions-newbies' => 'Be mussar contribuziuns da contos novs', +'sp-contributions-newbies-sub' => "Per novs contos d'utilisader", +'sp-contributions-newbies-title' => "Contribuziuns da novs contos d'utilisader", +'sp-contributions-blocklog' => 'log dal bloccar', +'sp-contributions-deleted' => 'Contribuziuns da commembers stizzadas', +'sp-contributions-uploads' => 'datotecas chargiadas si', +'sp-contributions-logs' => 'logs', +'sp-contributions-talk' => 'discussiun', +'sp-contributions-userrights' => "administraziun da dretgs d'utilisaders", +'sp-contributions-blocked-notice' => "Quai utilisader è bloccà actualmain. +L'ultima endataziun dal log da bloccar vegn mussà sutvart sco referenza:", +'sp-contributions-blocked-notice-anon' => "Questa adressa IP è bloccada actualmain. L'ultima endataziun dal log da bloccar vegn mussà sutvart sco referenza:", -'sp-contributions-search' => "Tschertgar contribuziuns d'utilisaders", -'sp-contributions-username' => "Adressa IP u num d'utilisader:", -'sp-contributions-submit' => 'Tschertga', +'sp-contributions-search' => "Tschertgar contribuziuns d'utilisaders", +'sp-contributions-username' => "Adressa IP u num d'utilisader:", +'sp-contributions-toponly' => "Be mussar modificaziuns ch'èn las ulimas versiuns", +'sp-contributions-submit' => 'Tschertga', # What links here 'whatlinkshere' => 'Links sin questa pagina', @@ -1900,6 +1938,8 @@ Ti na pos betg crear in conto d'utilisader.", 'cant-block-while-blocked' => 'Ti na pos betg bloccar auters utilisaders durant che ti es sez bloccà', 'cant-see-hidden-user' => "L'utilisader che ti emprovas da bloccar è gia bloccà e zuppentà. Perquai che ti h'has betg il dretg «hideuser» na pos ti betg vesair u modifitgar la bloccada da l'utilisader.", +'ipbblocked' => 'Ti na pos betg bloccar u debloccar auters utilisaders perquai che ti es sez bloccà', +'ipbnounblockself' => 'Ti na bos betg debloccar tai sez', # Developer tools 'lockdb' => 'Bloccar la banca da datas', @@ -2032,6 +2072,7 @@ La memorisescha sin tes computer e chargia si ella qua.", 'importstart' => 'Importar paginas…', 'import-revision-count' => '{{PLURAL:$1|Ina versiun|$1 versiuns}}', 'importnopages' => 'Nagina pagina per importar.', +'imported-log-entries' => 'Importà $1 {{PLURAL:$1|endataziun dal log|endataziuns dal log}}.', 'importfailed' => "Betg reussì d'importar: $1", 'importunknownsource' => "Funtauna d'import nunenconuschenta", 'importcantopen' => "Betg pussaivel dad avrir la datoteca d'import", @@ -2130,6 +2171,8 @@ Ti pos vesair il code-fundamental.', 'tooltip-upload' => 'Cumenzar da chargiar si', 'tooltip-rollback' => "Revochescha tut las modificaziuns vid questa pagina da l'ultim utilisader cun be in clic.", 'tooltip-undo' => 'Revochescha be questa midada e mussa il resultat en la prevista, per che ti pos inditgar en il champ da resumaziun in motiv.', +'tooltip-preferences-save' => 'Memorisar las preferenzas', +'tooltip-summary' => 'Endatescha ina curta resumaziun', # Stylesheets 'common.css' => '', @@ -2225,12 +2268,15 @@ $1', 'nextdiff' => 'versiun pli nova →', # Media information +'mediawarning' => "'''Attenziun''': Quest tip da datotecas po cuntegnair code malvulent. +Cun exequir questa datoteca po tes sistem vegnir donnegià.", 'imagemaxsize' => "Grondezza maximala da maletgs:
    ''(per paginas da descripziun da datotecas)''", 'thumbsize' => 'Grondezza dals maletgs da prevista:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|pagina|paginas}}', -'file-info-size' => '($1 × $2 pixels, grondezza da datoteca: $3, tip da MIME: $4)', +'file-info' => 'grondezza da datoteca: $1, tip da MIME: $2', +'file-info-size' => '$1 × $2 pixels, grondezza da datoteca: $3, tip da MIME: $4', 'file-nohires' => 'Nagina resuluziun pli auta disponibla.', -'svg-long-desc' => '(datoteca da SVG, grondezza da basa $1 × $2 pixels, grondezza da datoteca: $3)', +'svg-long-desc' => 'datoteca da SVG, grondezza da basa $1 × $2 pixels, grondezza da datoteca: $3', 'show-big-image' => 'Resoluziun cumplaina', 'show-big-image-thumb' => 'Grondezza da quest prevista: $1 × $2 pixels', 'file-info-gif-looped' => 'marscha infinit', @@ -2424,30 +2470,30 @@ Sche la datoteca è vegnida midada dal status original èn tscherts detagls even 'limitall' => 'tuts', # E-mail address confirmation -'confirmemail' => "Confermar l'adressa dad e-mail", -'confirmemail_noemail' => "Ti n'has betg inditgà ina adressa dad e-mail valida en tias [[Special:Preferences|preferenzas]].", -'confirmemail_text' => "{{SITENAME}} pretenda che ti confermas tia adressa dad e-mail avant che ti pos utilisar funcziuns dad e-mail. +'confirmemail' => "Confermar l'adressa dad e-mail", +'confirmemail_noemail' => "Ti n'has betg inditgà ina adressa dad e-mail valida en tias [[Special:Preferences|preferenzas]].", +'confirmemail_text' => "{{SITENAME}} pretenda che ti confermas tia adressa dad e-mail avant che ti pos utilisar funcziuns dad e-mail. Clicca sin il buttun sutvart per ta trametter in e-mail per confermar a tia adressa. L'e-mail cuntegna in link cun in code; Chargia la destinaziun dal link en tes navigatur per confermar che tia adressa dad e-mail è valida.", -'confirmemail_pending' => "In code per confermar è gia vegnì tramess a tai; +'confirmemail_pending' => "In code per confermar è gia vegnì tramess a tai; sche ti has creà avant curt temp tes conto duessas ti anc spitgar in per minutas per che l'e-mail possia arrivar avant che ti genereschas in nov code.", -'confirmemail_send' => 'Ma trametter in code da confermaziun', -'confirmemail_sent' => "Tramess l'e-mail da confermaziun.", -'confirmemail_oncreate' => "In code da confermaziun è vegnì tramess a tia adressa dad e-mail. +'confirmemail_send' => 'Ma trametter in code da confermaziun', +'confirmemail_sent' => "Tramess l'e-mail da confermaziun.", +'confirmemail_oncreate' => "In code da confermaziun è vegnì tramess a tia adressa dad e-mail. Quest code n'è betg necessari per t'annunziar, ma ti al stos endatar avant che la wiki po activar funcziuns dad e-mail.", -'confirmemail_sendfailed' => "{{SITENAME}} na pudeva betg trametter l'e-mail da confermaziun. +'confirmemail_sendfailed' => "{{SITENAME}} na pudeva betg trametter l'e-mail da confermaziun. Controllescha sche ti has endatà caracters nunvalids en tia adressa dad e-mail. Il server dad e-mail ha returnà: $1", -'confirmemail_invalid' => 'Il code da confermaziun è nunvalid. Il code è probablamain scrudà.', -'confirmemail_needlogin' => 'Ti stos $1 per confermar tia adressa dad e-mail.', -'confirmemail_success' => "Tia adressa dad e-mail è vegnida confermada. +'confirmemail_invalid' => 'Il code da confermaziun è nunvalid. Il code è probablamain scrudà.', +'confirmemail_needlogin' => 'Ti stos $1 per confermar tia adressa dad e-mail.', +'confirmemail_success' => "Tia adressa dad e-mail è vegnida confermada. Ussa pos ti [[Special:UserLogin|t'annunziar]] ed utilisar la wiki.", -'confirmemail_loggedin' => 'Tia adressa dad e-mail è ussa vegnida confermada.', -'confirmemail_error' => 'Insatge è crappà cun tes mail da confermaziun. Stgisa foll!', -'confirmemail_subject' => "{{SITENAME}} - Confermaziun da l'adressa dad e-mail", -'confirmemail_body' => 'Insatgi cun l\'adressa dad IP $1, probablamain ti, +'confirmemail_loggedin' => 'Tia adressa dad e-mail è ussa vegnida confermada.', +'confirmemail_error' => 'Insatge è crappà cun tes mail da confermaziun. Stgisa foll!', +'confirmemail_subject' => "{{SITENAME}} - Confermaziun da l'adressa dad e-mail", +'confirmemail_body' => 'Insatgi cun l\'adressa dad IP $1, probablamain ti, ha creà il conto "$2" sin {{SITENAME}} cun questa adressa dad e-mail. Per confermar ch quest conto tutga propi a tai e per activar las @@ -2461,8 +2507,22 @@ questa colliaziun per stizzar la confermaziun da questa adressa dad e-mail: $5 Quest code da confermaziun scroda ils $4.', -'confirmemail_invalidated' => "La confermaziun da l'adressa dad e-mail è vegnida stizzada", -'invalidateemail' => "Stizzar la confermaziun da l'adressa dad e-mail", +'confirmemail_body_changed' => 'Insatgi, probablamain ti, cun l\'adressa dad IP $1 +ha midà l\'adressa d\'e-mail sin questa adressa dal conto "$2" sin {{SITENAME}}. + +Per confermar ch quest conto tutga propi a tai e per reactivar las +funcziuns dad e-mail sin {{SITENAME}} stos ti avrir quest link en tes navigatur: + +$3 + +Sch\'il conto na tutga *betg* a tai, suanda per plaschair a questa colliaziun +per stizzar la confermaziun da questa adressa dad e-mail: + +$5 + +Quest code da confermaziun scroda ils $4.', +'confirmemail_invalidated' => "La confermaziun da l'adressa dad e-mail è vegnida stizzada", +'invalidateemail' => "Stizzar la confermaziun da l'adressa dad e-mail", # Scary transclusion 'scarytranscludedisabled' => "[L'integraziun interwiki è deactivada]", @@ -2501,6 +2561,7 @@ Conferma per plaschair che ti vuls propi crear danovamain quest artitgel.", 'table_pager_first' => 'Emprima pagina', 'table_pager_last' => 'Ultima pagina', 'table_pager_limit' => 'Mussar $1 elements per pagina', +'table_pager_limit_label' => 'Elements per pagina:', 'table_pager_limit_submit' => 'Dai', 'table_pager_empty' => 'Nagins resultats', @@ -2606,6 +2667,15 @@ Ti pos era utilisar [[Special:Watchlist/edit|la pagina da standard]].', 'tags-edit' => 'modifitgar', 'tags-hitcount' => '$1 {{PLURAL:$1|midada|midadas}}', +# Special:ComparePages +'comparepages' => 'Cumparegliar paginas', +'compare-selector' => "Cumparegliar versiuns d'ina pagina", +'compare-page1' => 'Pagina 1', +'compare-page2' => 'Pagina 2', +'compare-rev1' => 'Versiun 1', +'compare-rev2' => 'Versiun 2', +'compare-submit' => 'Cumparegliar', + # Database error messages 'dberr-header' => 'Questa wiki ha in problem', 'dberr-problems' => 'Stgisa! @@ -2623,8 +2693,13 @@ Questa pagina ha actualmain difficultads tecnicas.', 'htmlform-float-invalid' => "La valur che ti has inditgà n'è betg ina cifra.", 'htmlform-int-toolow' => 'La valur che ti has inditgà è sut il minimum da $1', 'htmlform-int-toohigh' => 'La valur che ti has inditgà è sur il maximum da $1', +'htmlform-required' => 'Questa valur è necessaria', 'htmlform-submit' => 'Trametter', 'htmlform-reset' => 'Revocar las midadas', 'htmlform-selectorother-other' => 'Auters', +# SQLite database support +'sqlite-has-fts' => '$1 cun sustegn per la retschertga da text integrala', +'sqlite-no-fts' => '$1 senza sustegn per la retschertga da text integrala', + ); diff --git a/languages/messages/MessagesRo.php b/languages/messages/MessagesRo.php index b5bfceea..e55e759e 100644 --- a/languages/messages/MessagesRo.php +++ b/languages/messages/MessagesRo.php @@ -97,7 +97,7 @@ $magicWords = array( 'img_page' => array( '1', 'pagina=$1', 'pagina $1', 'page=$1', 'page $1' ), 'img_upright' => array( '1', 'dreaptasus', 'dreaptasus=$1', 'dreaptasus $1', 'upright', 'upright=$1', 'upright $1' ), 'img_border' => array( '1', 'chenar', 'border' ), - 'img_baseline' => array( '1', 'linia de bază', 'baseline' ), + 'img_baseline' => array( '1', 'linia_de_bază', 'baseline' ), 'img_sub' => array( '1', 'indice', 'sub' ), 'img_super' => array( '1', 'exponent', 'super', 'sup' ), 'img_top' => array( '1', 'sus', 'top' ), @@ -192,94 +192,94 @@ $namespaceAliases = array( ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'Redirectări duble' ), - 'BrokenRedirects' => array( 'Redirectări invalide' ), + 'DoubleRedirects' => array( 'Redirectări_duble' ), + 'BrokenRedirects' => array( 'Redirectări_invalide' ), 'Disambiguations' => array( 'Dezambiguizări' ), 'Userlogin' => array( 'Autentificare' ), - 'Userlogout' => array( 'Ieşire' ), + 'Userlogout' => array( 'Ieșire' ), 'CreateAccount' => array( 'Înregistrare' ), - 'Preferences' => array( 'Preferinţe' ), - 'Watchlist' => array( 'Pagini urmărite' ), - 'Recentchanges' => array( 'Schimbări recente' ), + 'Preferences' => array( 'Preferințe' ), + 'Watchlist' => array( 'Pagini_urmărite' ), + 'Recentchanges' => array( 'Schimbări_recente' ), 'Upload' => array( 'Încărcare' ), - 'Listfiles' => array( 'Listă imagini' ), - 'Newimages' => array( 'Imagini noi' ), - 'Listusers' => array( 'Listă utilizatori' ), - 'Listgrouprights' => array( 'Listă drepturi grup' ), + 'Listfiles' => array( 'Listă_fișiere' ), + 'Newimages' => array( 'Imagini_noi' ), + 'Listusers' => array( 'Listă_utilizatori' ), + 'Listgrouprights' => array( 'Listă_drepturi_grup' ), 'Statistics' => array( 'Statistici' ), - 'Randompage' => array( 'Aleatoriu', 'Pagină aleatorie' ), - 'Lonelypages' => array( 'Pagini orfane' ), - 'Uncategorizedpages' => array( 'Pagini necategorizate' ), - 'Uncategorizedcategories' => array( 'Categorii necategorizate' ), - 'Uncategorizedimages' => array( 'Imagini necategorizate' ), - 'Uncategorizedtemplates' => array( 'Formate necategorizate' ), - 'Unusedcategories' => array( 'Categorii nefolosite' ), - 'Unusedimages' => array( 'Imagini nefolosite' ), - 'Wantedpages' => array( 'Pagini dorite', 'Legături invalide' ), - 'Wantedcategories' => array( 'Categorii dorite' ), - 'Wantedfiles' => array( 'Fişiere dorite' ), - 'Wantedtemplates' => array( 'Formate dorite' ), - 'Mostlinked' => array( 'Legături multe' ), - 'Mostlinkedcategories' => array( 'Categorii des folosite' ), - 'Mostlinkedtemplates' => array( 'Formate des folosite' ), - 'Mostimages' => array( 'Imagini multe' ), - 'Mostcategories' => array( 'Categorii multe' ), - 'Mostrevisions' => array( 'Revizii multe' ), - 'Fewestrevisions' => array( 'Revizii puţine' ), - 'Shortpages' => array( 'Pagini scurte' ), - 'Longpages' => array( 'Pagini lungi' ), - 'Newpages' => array( 'Pagini noi' ), - 'Ancientpages' => array( 'Pagini vechi' ), - 'Deadendpages' => array( 'Pagini fără legături' ), - 'Protectedpages' => array( 'Pagini protejate' ), - 'Protectedtitles' => array( 'Titluri protejate' ), - 'Allpages' => array( 'Toate paginile' ), + 'Randompage' => array( 'Aleatoriu', 'Pagină_aleatorie' ), + 'Lonelypages' => array( 'Pagini_orfane' ), + 'Uncategorizedpages' => array( 'Pagini_necategorizate' ), + 'Uncategorizedcategories' => array( 'Categorii_necategorizate' ), + 'Uncategorizedimages' => array( 'Imagini_necategorizate' ), + 'Uncategorizedtemplates' => array( 'Formate_necategorizate' ), + 'Unusedcategories' => array( 'Categorii_nefolosite' ), + 'Unusedimages' => array( 'Imagini_nefolosite' ), + 'Wantedpages' => array( 'Pagini_dorite', 'Legături_invalide' ), + 'Wantedcategories' => array( 'Categorii_dorite' ), + 'Wantedfiles' => array( 'Fișiere_dorite' ), + 'Wantedtemplates' => array( 'Formate_dorite' ), + 'Mostlinked' => array( 'Legături_multe' ), + 'Mostlinkedcategories' => array( 'Categorii_des_folosite' ), + 'Mostlinkedtemplates' => array( 'Formate_des_folosite' ), + 'Mostimages' => array( 'Imagini_multe' ), + 'Mostcategories' => array( 'Categorii_multe' ), + 'Mostrevisions' => array( 'Revizii_multe' ), + 'Fewestrevisions' => array( 'Revizii_puține' ), + 'Shortpages' => array( 'Pagini_scurte' ), + 'Longpages' => array( 'Pagini_lungi' ), + 'Newpages' => array( 'Pagini_noi' ), + 'Ancientpages' => array( 'Pagini_vechi' ), + 'Deadendpages' => array( 'Pagini_fără_legături' ), + 'Protectedpages' => array( 'Pagini_protejate' ), + 'Protectedtitles' => array( 'Titluri_protejate' ), + 'Allpages' => array( 'Toate_paginile' ), 'Prefixindex' => array( 'Index' ), - 'Ipblocklist' => array( 'Listă IP blocat' ), - 'Specialpages' => array( 'Pagini speciale' ), - 'Contributions' => array( 'Contribuţii' ), - 'Emailuser' => array( 'Email utilizator' ), - 'Confirmemail' => array( 'Confirmă email' ), - 'Whatlinkshere' => array( 'Ce se leagă aici' ), - 'Recentchangeslinked' => array( 'Modificări corelate' ), - 'Movepage' => array( 'Mută pagina' ), + 'Ipblocklist' => array( 'Listă_IP_blocat' ), + 'Specialpages' => array( 'Pagini_speciale' ), + 'Contributions' => array( 'Contribuții' ), + 'Emailuser' => array( 'Email_utilizator' ), + 'Confirmemail' => array( 'Confirmă_email' ), + 'Whatlinkshere' => array( 'Ce_se_leagă_aici' ), + 'Recentchangeslinked' => array( 'Modificări_corelate' ), + 'Movepage' => array( 'Mută_pagina' ), 'Blockme' => array( 'Blochează-mă' ), - 'Booksources' => array( 'Referinţe în cărţi' ), + 'Booksources' => array( 'Referințe_în_cărți' ), 'Categories' => array( 'Categorii' ), 'Export' => array( 'Exportă' ), 'Version' => array( 'Versiune' ), - 'Allmessages' => array( 'Toate mesajele' ), + 'Allmessages' => array( 'Toate_mesajele' ), 'Log' => array( 'Jurnal', 'Jurnale' ), - 'Blockip' => array( 'Blochează IP' ), + 'Blockip' => array( 'Blochează_IP' ), 'Undelete' => array( 'Restaurează' ), 'Import' => array( 'Importă' ), - 'Lockdb' => array( 'Blochează BD' ), - 'Unlockdb' => array( 'Deblochează BD' ), - 'Userrights' => array( 'Drepturi utilizator' ), - 'MIMEsearch' => array( 'Căutare MIME' ), - 'FileDuplicateSearch' => array( 'Căutare fişier duplicat' ), - 'Unwatchedpages' => array( 'Pagini neurmărite' ), - 'Listredirects' => array( 'Listă redirectări' ), - 'Revisiondelete' => array( 'Şterge revizie' ), - 'Unusedtemplates' => array( 'Formate nefolosite' ), - 'Randomredirect' => array( 'Redirectare aleatorie' ), - 'Mypage' => array( 'Pagina mea' ), - 'Mytalk' => array( 'Discuţiile mele' ), - 'Mycontributions' => array( 'Contribuţiile mele' ), - 'Listadmins' => array( 'Listă administratori' ), - 'Listbots' => array( 'Listă roboţi' ), - 'Popularpages' => array( 'Pagini populare' ), + 'Lockdb' => array( 'Blochează_BD' ), + 'Unlockdb' => array( 'Deblochează_BD' ), + 'Userrights' => array( 'Drepturi_utilizator' ), + 'MIMEsearch' => array( 'Căutare_MIME' ), + 'FileDuplicateSearch' => array( 'Căutare_fișier_duplicat' ), + 'Unwatchedpages' => array( 'Pagini_neurmărite' ), + 'Listredirects' => array( 'Listă_redirectări' ), + 'Revisiondelete' => array( 'Şterge_revizie' ), + 'Unusedtemplates' => array( 'Formate_nefolosite' ), + 'Randomredirect' => array( 'Redirectare_aleatorie' ), + 'Mypage' => array( 'Pagina_mea' ), + 'Mytalk' => array( 'Discuțiile_mele' ), + 'Mycontributions' => array( 'Contribuțiile_mele' ), + 'Listadmins' => array( 'Listă_administratori' ), + 'Listbots' => array( 'Listă_roboți' ), + 'Popularpages' => array( 'Pagini_populare' ), 'Search' => array( 'Căutare' ), - 'Resetpass' => array( 'Resetează parola' ), - 'Withoutinterwiki' => array( 'Fără legături interwiki' ), - 'MergeHistory' => array( 'Istoria combinărilor' ), - 'Filepath' => array( 'Cale fişier' ), - 'Invalidateemail' => array( 'Invalidează email' ), - 'Blankpage' => array( 'Pagină goală' ), - 'LinkSearch' => array( 'Căutare legături' ), - 'DeletedContributions' => array( 'Contibuţii şterse' ), + 'Resetpass' => array( 'Resetează_parola' ), + 'Withoutinterwiki' => array( 'Fără_legături_interwiki' ), + 'MergeHistory' => array( 'Istoria_combinărilor' ), + 'Filepath' => array( 'Cale_fișier' ), + 'Invalidateemail' => array( 'Invalidează_email' ), + 'Blankpage' => array( 'Pagină_goală' ), + 'LinkSearch' => array( 'Căutare_legături' ), + 'DeletedContributions' => array( 'Contibuții_șterse' ), 'Tags' => array( 'Etichete' ), - 'Activeusers' => array( 'Utilizatori activi' ), + 'Activeusers' => array( 'Utilizatori_activi' ), ); $datePreferences = false; @@ -311,8 +311,7 @@ $messages = array( 'tog-editsectiononrightclick' => 'Activează modificarea secţiunilor prin clic dreapta pe titlul secțiunii (JavaScript)', 'tog-showtoc' => 'Arată cuprinsul (pentru paginile cu mai mult de 3 paragrafe cu titlu)', -'tog-rememberpassword' => 'Amintește-ți între sesiuni', -'tog-editwidth' => 'Extinde câmpul de editare pe tot ecranul', +'tog-rememberpassword' => 'Autentificare automată de la acest navigator (expiră după $1 {{PLURAL:$1|zi|zile}})', 'tog-watchcreations' => 'Adaugă paginile pe care le creez la lista mea de urmărire', 'tog-watchdefault' => 'Adaugă paginile pe care le modific la lista mea de urmărire', 'tog-watchmoves' => 'Adaugă paginile pe care le redenumesc la lista de pagini urmărite', @@ -459,31 +458,21 @@ pe titlul secțiunii (JavaScript)', 'faqpage' => 'Project:Întrebări frecvente', # Vector skin -'vector-action-addsection' => 'Mesaj nou', -'vector-action-delete' => 'Ștergere', -'vector-action-move' => 'Redenumire', -'vector-action-protect' => 'Protejare', -'vector-action-undelete' => 'Recuperare', -'vector-action-unprotect' => 'Deprotejare', -'vector-namespace-category' => 'Categorie', -'vector-namespace-help' => 'Pagină de ajutor', -'vector-namespace-image' => 'Fișier', -'vector-namespace-main' => 'Articol', -'vector-namespace-media' => 'Pagină media', -'vector-namespace-mediawiki' => 'Mesaj', -'vector-namespace-project' => 'Pagină de proiect', -'vector-namespace-special' => 'Pagină specială', -'vector-namespace-talk' => 'Discuție', -'vector-namespace-template' => 'Format', -'vector-namespace-user' => 'Pagină de utilizator', -'vector-view-create' => 'Creare', -'vector-view-edit' => 'Modificare', -'vector-view-history' => 'Istoric', -'vector-view-view' => 'Lectură', -'vector-view-viewsource' => 'Sursă pagină', -'actions' => 'Acțiuni', -'namespaces' => 'Spații de nume', -'variants' => 'Variante', +'vector-action-addsection' => 'Mesaj nou', +'vector-action-delete' => 'Ștergere', +'vector-action-move' => 'Redenumire', +'vector-action-protect' => 'Protejare', +'vector-action-undelete' => 'Recuperare', +'vector-action-unprotect' => 'Deprotejare', +'vector-simplesearch-preference' => 'Permite sugestii de căutare superioară (numai interfața Vector)', +'vector-view-create' => 'Creare', +'vector-view-edit' => 'Modificare', +'vector-view-history' => 'Istoric', +'vector-view-view' => 'Lectură', +'vector-view-viewsource' => 'Sursă pagină', +'actions' => 'Acțiuni', +'namespaces' => 'Spații de nume', +'variants' => 'Variante', 'errorpagetitle' => 'Eroare', 'returnto' => 'Înapoi la $1.', @@ -544,6 +533,9 @@ Prea mulți utilizatori încearcă să vizualizeze această pagină. Vă rugăm să așteptați un moment înainte de a reîncerca accesarea paginii. $1', +'pool-timeout' => 'Timpul alocat așteptării pentru blocare a expirat', +'pool-queuefull' => 'Coada de așteptare este plină', +'pool-errorunknown' => 'Eroare necunoscută', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Despre {{SITENAME}}', @@ -617,7 +609,9 @@ $1', S-ar putea să fi introdus greșit URL-ul, sau să fi urmat o legătură incorectă. Aceasta s-ar putea să indice și un bug în programul folosit de {{SITENAME}}.', 'nosuchspecialpage' => 'Această pagină specială nu există', -'nospecialpagetext' => 'Ai cerut o [[Special:SpecialPages|pagină specială]] care nu este recunoscută de {{SITENAME}}.', +'nospecialpagetext' => 'Ați cerut o [[Special:SpecialPages|pagină specială]] invalidă. + +O listă cu paginile speciale valide se poate găsi la [[Special:SpecialPages|{{int:specialpages}}]].', # General errors 'error' => 'Eroare', @@ -704,7 +698,8 @@ Contul dumneavoatră a fost creat. Nu uitați să vă personalizați [[Special:P 'yourname' => 'Nume de utilizator:', 'yourpassword' => 'Parolă:', 'yourpasswordagain' => 'Repetați parola:', -'remembermypassword' => 'Reține-mi parola între sesiuni', +'remembermypassword' => 'Autentificare automată de la acest calculator (expiră după {{PLURAL:$1|24 de ore|$1 zile}})', +'securelogin-stick-https' => 'Rămâi conectat la HTTPS după autentificare', 'yourdomainname' => 'Domeniul dumneavoastră:', 'externaldberror' => 'A fost fie o eroare de bază de date pentru o autentificare extenă sau nu aveți permisiunea să actualizați contul extern.', 'login' => 'Autentificare', @@ -721,6 +716,7 @@ Contul dumneavoatră a fost creat. Nu uitați să vă personalizați [[Special:P 'gotaccount' => "Aveți deja un cont de utilizator? '''$1'''.", 'gotaccountlink' => 'Autentificați-vă', 'createaccountmail' => 'după e-mail', +'createaccountreason' => 'Motiv:', 'badretype' => 'Parolele pe care le-ați introdus diferă.', 'userexists' => 'Numele de utilizator pe care l-ați introdus există deja. Încercați cu un alt nume.', 'loginerror' => 'Eroare de autentificare', @@ -740,6 +736,7 @@ Verifică dacă ai scris corect sau [[Special:UserLogin/signup|creează un nou c 'wrongpasswordempty' => 'Spațiul pentru introducerea parolei nu a fost completat. Vă rugăm să încercați din nou.', 'passwordtooshort' => 'Parola trebuie să aibă cel puțin {{PLURAL:$1|1 caracter|$1 caractere}}.', 'password-name-match' => 'Parola dumneavoastră trebuie să fie diferită de numele de utilizator.', +'password-login-forbidden' => 'Utilizarea acestui nume de utilizator și a acestei parole este interzisă.', 'mailmypassword' => 'Trimite-mi parola pe e-mail!', 'passwordremindertitle' => 'Noua parolă temporară la {{SITENAME}}', 'passwordremindertext' => 'Cineva (probabil dumneavoastră, de la adresa $1) @@ -777,6 +774,9 @@ Vă rugăm să așteptați până să mai încercați.', 'loginlanguagelabel' => 'Limba: $1', 'suspicious-userlogout' => 'Cererea dumneavoastră de a închide sesiunea a fost refuzată întrucât pare că a fost trimisă printr-o eroare a navigatorului sau de un proxy memorat în cache.', +# E-mail sending +'php-mail-error-unknown' => 'Eroare necunoscută în funcția PHP mail()', + # Password reset dialog 'resetpass' => 'Modifică parola', 'resetpass_announce' => 'Sunteți autentificat cu un cod temporar trimis pe e-mail. Pentru a termina acțiunea de autentificare, trebuie să setați o parolă nouă aici:', @@ -828,9 +828,11 @@ Este posibil să fi reușit deja schimbarea parolei sau să fi cerut o parolă t 'showlivepreview' => 'Previzualizare live', 'showdiff' => 'Afișare diferențe', 'anoneditwarning' => "'''Atenție:''' Nu v-ați autentificat. Adresa IP vă va fi înregistrată în istoricul acestei pagini.", +'anonpreviewwarning' => "''Nu v-ați autentificat. Dacă salvați pagina adresa dumneavoastră IP va fi înregistrată în istoric.''", 'missingsummary' => "'''Atenție:''' Nu ați completat caseta „descriere modificări”. Dacă apăsați din nou butonul „salvează pagina” modificările vor fi salvate fără descriere.", 'missingcommenttext' => 'Vă rugăm să introduceți un comentariu.', -'missingcommentheader' => "'''Atenție:''' Nu ați furnizat un titlu/subiect pentru acest comentariu. Dacă dați click pe \"Salvați din nou\", modificarea va fi salvată fără titlu.", +'missingcommentheader' => "'''Atenție,''' nu ați pus titlu sau subiect la acest comentariu. +Dacă dați din nou clic pe „{{int:savearticle}}” modificarea va fi salvată fără titlu.", 'summary-preview' => 'Previzualizare descriere:', 'subject-preview' => 'Previzualizare subiect/titlu:', 'blockedtitle' => 'Utilizatorul este blocat', @@ -899,7 +901,11 @@ Ultima intrare în jurnalul blocărilor este afișată mai jos pentru referinț 'userjsyoucanpreview' => "'''Sfat:''' Folosiți butonul „{{int:showpreview}}” pentru a testa noul JavaScript înainte de a-l salva.", 'usercsspreview' => "'''Reține că urmărești doar o previzualizare a css-ului tău de utilizator, acesta nu este încă salvat!'''", 'userjspreview' => "'''Reține că urmărești doar un test/o previzualizare a javascript-ului tău de utilizator, acesta nu este încă salvat!'''", -'userinvalidcssjstitle' => 'Avertizare: Nu există skin "$1". Amintește-ți că paginile .css and .js specifice utilizatorilor au titluri care încep cu literă mică, de exemplu {{ns:user}}:Foo/monobook.css în comparație cu {{ns:user}}:Foo/Monobook.css.', +'sitecsspreview' => "'''Rețineți că doar previzualizați această foaie de stil.''' +'''Ea nu a fost salvată încă!'''", +'sitejspreview' => "'''Rețineți că doar previzualizați acest cod JavaScript.''' +'''El nu a fost salvat încă!'''", +'userinvalidcssjstitle' => 'Avertizare: Nu există skin "$1". Amintește-ți că paginile .css and .js specifice utilizatorilor au titluri care încep cu literă mică, de exemplu {{ns:user}}:Foo/vector.css în comparație cu {{ns:user}}:Foo/Vector.css.', 'updated' => '(Actualizat)', 'note' => "'''Notă:'''", 'previewnote' => "Aceasta este doar o previzualizare! Pentru a salva pagina în forma actuală, descrieți succint modificările efectuate și apăsați butonul '''Salvează pagina'''.", @@ -937,7 +943,6 @@ De asemenea, ne asigurați că ceea ce ați scris a fost compoziție proprie sau Dacă nu doriți ca ceea ce scrieți să fie modificat fără milă și redistribuit în voie, atunci nu trimiteți materialele respective aici.
    De asemenea, ne asigurați că ceea ce ați scris a fost compoziție proprie sau copie dintr-o resursă publică sau liberă (vedeți $1 pentru detalii). '''NU INTRODUCEŢI MATERIALE CU DREPTURI DE AUTOR FĂRĂ PERMISIUNE!'''", -'longpagewarning' => "'''ATENŢIE! Conținutul acestei pagini are $1 kB; unele browsere au probleme la modificarea paginilor în jur de 32 kB sau mai mari. Te rugăm să iei în considerare posibilitatea de a împărți pagina în mai multe secțiuni.'''", 'longpageerror' => "'''EROARE: Textul pe care vrei să-l salvezi are $1 kilobytes, ceea ce înseamnă mai mult decât maximum de $2 kilobytes. Salvarea nu este posibilă.'''", 'readonlywarning' => "'''ATENŢIE: Baza de date a fost blocată pentru întreținere, deci nu veți putea salva modificările în acest moment. Puteți copia textul într-un fișier text local pentru a-l salva când va fi posibil.''' @@ -1114,6 +1119,8 @@ $1", 'logdelete-failure' => "'''Vizibilitatea jurnalului nu poate fi definită:''' $1", 'revdel-restore' => 'Schimbă vizibilitatea', +'revdel-restore-deleted' => 'versiuni șterse', +'revdel-restore-visible' => 'versiuni vizibile', 'pagehist' => 'Istoricul paginii', 'deletedhist' => 'Istoric șters', 'revdelete-content' => 'textul versiunii', @@ -1183,11 +1190,13 @@ Folosirea linkurilor de navigare va reseta această coloană.', # Diffs 'history-title' => 'Istoricul versiunilor pentru „$1”', 'difference' => '(Diferența dintre versiuni)', +'difference-multipage' => '(Diferență între pagini)', 'lineno' => 'Linia $1:', 'compareselectedversions' => 'Compară versiunile marcate', 'showhideselectedversions' => 'Șterge/recuperează versiunile marcate', 'editundo' => 'anulare', -'diff-multi' => '({{PLURAL:$1|O revizie intermediară neafișată|$1 revizii intermediare neafișate}})', +'diff-multi' => '({{PLURAL:$1|O revizie intermediară|$1 revizii intermediare}} efectuată de {{PLURAL:$2|un utilizator|$2 utilizatori}} {{PLURAL:$1|neafișată|neafișate}})', +'diff-multi-manyusers' => '({{PLURAL:$1|O versiune intermediară efectuată de|$1 (de) versiuni intermediare efectuate de peste}} $2 {{PLURAL:$2|utilizator|utilizatori}} {{PLURAL:$1|neafișată|neafișate}})', # Search results 'searchresults' => 'Rezultatele căutării', @@ -1222,6 +1231,7 @@ Folosirea linkurilor de navigare va reseta această coloană.', 'searchprofile-everything-tooltip' => 'Caută în tot conținutul (incluzând paginile de discuție)', 'searchprofile-advanced-tooltip' => 'Caută în namespace-uri personalizate', 'search-result-size' => '$1 ({{PLURAL:$2|1 cuvânt|$2 cuvinte}})', +'search-result-category-size' => '$1 {{PLURAL:$1|element|elemente}} ($2 {{PLURAL:$2|categorie|categorii}}, $3 {{PLURAL:$3|fișier|fișiere}})', 'search-result-score' => 'Relevanță: $1%', 'search-redirect' => '(redirecționare către $1)', 'search-section' => '(secțiunea $1)', @@ -1245,7 +1255,7 @@ Folosirea linkurilor de navigare va reseta această coloană.', 'powersearch' => 'Căutare avansată', 'powersearch-legend' => 'Căutare avansată', 'powersearch-ns' => 'Căutare în spațiile de nume:', -'powersearch-redir' => 'Afișează redirectările', +'powersearch-redir' => 'Afișează redirecționările', 'powersearch-field' => 'Caută după', 'powersearch-togglelabel' => 'Marchează:', 'powersearch-toggleall' => 'Tot', @@ -1291,15 +1301,16 @@ Folosirea linkurilor de navigare va reseta această coloană.', 'prefs-editing' => 'Modificare', 'prefs-edit-boxsize' => 'Mărimea ferestrei de modificare.', 'rows' => 'Rânduri:', -'columns' => 'Coloane', +'columns' => 'Coloane:', 'searchresultshead' => 'Parametri căutare', 'resultsperpage' => 'Numărul de rezultate per pagină', 'contextlines' => 'Numărul de linii per rezultat', 'contextchars' => 'Numărul de caractere per linie', 'stub-threshold' => 'Valoarea minimă pentru un ciot (octeți):', +'stub-threshold-disabled' => 'Dezactivat', 'recentchangesdays' => 'Numărul de zile afișate în schimbări recente:', 'recentchangesdays-max' => '(maxim {{PLURAL:$1|o zi|$1 zile}})', -'recentchangescount' => 'Numărul modificărilor arătate implicit:', +'recentchangescount' => 'Numărul modificărilor afișate implicit:', 'prefs-help-recentchangescount' => 'Sunt incluse schimbările recente, istoricul paginilor și jurnalele.', 'prefs-help-watchlist-token' => 'Completând această căsuță cu o cheie secretă se va genera un flux RSS pentru lista dumneavoastră de pagini urmărite. Oricine cunoaște cheia din această căsuță va putea citi această listă, așa că alegeți o combinație sigură. @@ -1330,6 +1341,7 @@ Aici se află o combinație generată întâmplător pe care o puteți folosi: $ 'prefs-files' => 'Fișiere', 'prefs-custom-css' => 'CSS personalizat', 'prefs-custom-js' => 'JS personalizat', +'prefs-common-css-js' => 'Pagini CSS și JavaScript comune pentru toate interfețele:', 'prefs-reset-intro' => 'Poți folosi această pagină pentru a reseta preferințele la valorile implicite. Acțiunea nu este reversibilă.', 'prefs-emailconfirm-label' => 'Confirmare e-mail:', @@ -1368,9 +1380,15 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.' 'prefs-advancedrendering' => 'Opțiuni avansate', 'prefs-advancedsearchoptions' => 'Opțiuni avansate', 'prefs-advancedwatchlist' => 'Opțiuni avansate', -'prefs-display' => 'Opțiuni afișare', +'prefs-displayrc' => 'Opțiuni de afișare', +'prefs-displaysearchoptions' => 'Opțiuni de afișare', +'prefs-displaywatchlist' => 'Opțiuni de afișare', 'prefs-diffs' => 'Diferențe', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Adresa de e-mail pare validă', +'email-address-validity-invalid' => 'Introduceți o adresă de e-mail validă', + # User rights 'userrights' => 'Administrarea permisiunilor de utilizator', 'userrights-lookup-user' => 'Administrare grupuri de utilizatori', @@ -1454,6 +1472,7 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.' 'right-hideuser' => 'Blochează un nume de utilizator, ascunzându-l de public', 'right-ipblock-exempt' => 'Nu au fost afectați de blocarea făcută IP-ului.', 'right-proxyunbannable' => 'Treci peste blocarea automată a proxy-urilor', +'right-unblockself' => 'Se deblochează singur', 'right-protect' => 'Schimbă nivelurile de protejare și modifică pagini protejate', 'right-editprotected' => 'Modificare pagini protejate (fără protejare în cascadă)', 'right-editinterface' => 'Modificare interfața cu utilizatorul', @@ -1476,7 +1495,6 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.' 'right-siteadmin' => 'Blochează și deblochează baza de date', 'right-reset-passwords' => 'Resetarea parolelor altor utilizatori', 'right-override-export-depth' => 'Exportă inclusiv paginile legate până la o adâncime de 5', -'right-versiondetail' => 'Arată informații extise despre versiunea programului', 'right-sendemail' => 'Trimite e-mail altor utilizatori', # User rights log @@ -1527,14 +1545,9 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.' 'recentchanges-legend' => 'Opțiuni schimbări recente', 'recentchangestext' => 'Urmăriți în această pagină cele mai recente modificări de pe site.', 'recentchanges-feed-description' => 'Urmărește cele mai recente schimbări folosind acest flux.', -'recentchanges-label-legend' => 'Legendă: $1.', -'recentchanges-legend-newpage' => '$1 - pagină nouă', 'recentchanges-label-newpage' => 'Această modificare a creat o pagină nouă', -'recentchanges-legend-minor' => '$1 - modificare minoră', 'recentchanges-label-minor' => 'Aceasta este o modificare minoră', -'recentchanges-legend-bot' => '$1 - modificare efectuată de un robot', 'recentchanges-label-bot' => 'Această modificare a fost efectuată de un robot', -'recentchanges-legend-unpatrolled' => '$1 - modificare nepatrulată', 'recentchanges-label-unpatrolled' => 'Această modificare nu a fost patrulată încă', 'rcnote' => "Mai jos se află {{PLURAL:$|ultima modificare|ultimele '''$1''' modificări}} din {{PLURAL:$2|ultima zi|ultimele '''$2''' zile}}, începând cu $5, $4.", 'rcnotefrom' => 'Dedesubt sunt modificările de la $2 (maxim $1 de modificări sunt afișate - schimbă numărul maxim de linii alegând altă valoare mai jos).', @@ -1586,6 +1599,8 @@ Paginile pe care le [[Special:Watchlist|urmăriți]] apar în '''aldine'''.", 'upload_directory_missing' => 'Directorul în care sunt încărcate fișierele ($1) lipsește și nu poate fi creat de serverul web.', 'upload_directory_read_only' => 'Directorul de încărcare ($1) nu poate fi scris de server.', 'uploaderror' => 'Eroare la trimitere fișier', +'upload-recreate-warning' => "'''Atenție, un fișier cu același nume a fost șters sau redenumit.''' +Iată aici înregistrările relevante din jurnalul de ștergeri și redenumiri:", 'uploadtext' => "Utilizați formularul de mai jos pentru a trimite fișiere. Pentru a vizualiza sau căuta imagini deja trimise, mergeți la [[Special:FileList|lista cu imagini]]; (re)încărcările și ștergerile sunt de asemenea înregistrate în [[Special:Log/upload|jurnalul fișierelor trimise]], respectiv [[Special:Log/delete|jurnalul fișierelor șterse]]. @@ -1620,6 +1635,17 @@ Vezi [[Special:NewFiles|galeria fișierelor noi]] pentru o mai bună vizualizare 'filetype-banned-type' => "'''\".\$1\"''' este un tip de fișier nepermis. {{PLURAL:\$3|Tip de fișier permis:|Tipuri de fișiere permise:}} \$2.", 'filetype-missing' => 'Fișierul nu are extensie (precum ".jpg").', +'empty-file' => 'Fișierul pe care l-ați trimis este gol.', +'file-too-large' => 'Fișierul pe care l-ați trimis este prea mare.', +'filename-tooshort' => 'Numele fișierului este prea scurt.', +'filetype-banned' => 'Acest tip de fișier este interzis.', +'verification-error' => 'Fișierul nu a trecut testele.', +'hookaborted' => 'Modificarea pe care ați încercat s-o faceți a fost oprită de apelul unei extensii.', +'illegal-filename' => 'Numele de fișier nu este permis.', +'overwrite' => 'Nu este permisă suprascrierea unui fișier existent.', +'unknown-error' => 'S-a produs o eroare necunoscută.', +'tmp-create-error' => 'Nu s-a putut crea un fișier temporar.', +'tmp-write-error' => 'Eroare de scriere la un fișier temporar.', 'large-file' => 'Este recomandat ca fișierele să nu fie mai mari de $1; acest fișier are $2.', 'largefileserver' => 'Fișierul este mai mare decât este configurat serverul să permită.', 'emptyfile' => 'Fișierul pe care l-ați încărcat pare a fi gol. Aceasta poate fi datorită unei greșeli în numele fișierului. Verificați dacă într-adevăr doriți să încărcați acest fișier.', @@ -1644,13 +1670,14 @@ Mergeți înapoi și încărcați acest fișier sub un nume nou. [[File:$1|thumb 'fileexists-shared-forbidden' => 'Un fișier cu acest nume există deja în magazia de imagini comune; mergeți înapoi și încărcați fișierul sub un nou nume. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Acest fișier este dublura {{PLURAL:$1|fișierului|fișierelor}}:', 'file-deleted-duplicate' => 'Un fișier identic cu acesta ([[:$1]]) a fost șters anterior. Verificați istoricul ștergerilor fișierului înainte de a-l reîncărca.', -'successfulupload' => 'Fișierul a fost trimis', 'uploadwarning' => 'Avertizare la trimiterea fișierului', 'uploadwarning-text' => 'Vă rugăm să modificați descrierea fișierului mai jos și să încercați din nou.', 'savefile' => 'Salvează fișierul', 'uploadedimage' => 'a trimis [[$1]]', 'overwroteimage' => 'încărcat o versiune nouă a fișierului "[[$1]]"', 'uploaddisabled' => 'Ne pare rău, trimiterea de imagini este dezactivată.', +'copyuploaddisabled' => 'Trimiterea prin URL este dezactivată.', +'uploadfromurl-queued' => 'Fișierul a fost pus în șirul de așteptare.', 'uploaddisabledtext' => 'Încărcările de fișiere sunt dezactivate.', 'php-uploaddisabledtext' => 'Încărcarea de fișiere este dezactivată în PHP. Vă rugăm să verificați setările din file_uploads.', @@ -1671,6 +1698,14 @@ Vă rugăm să aveți în vedere dacă este utilă reîncărcarea acestuia. Jurnalul pentru această ștergere este disponibil aici:", 'filename-bad-prefix' => "Numele fișierului pe care îl încărcați începe cu '''\"\$1\"''', care este un nume non-descriptiv alocat automat în general de camerele digitale. Vă rugăm, alegeți un nume mai descriptiv pentru fișerul dumneavoastră.", +'upload-success-subj' => 'Fișierul a fost trimis', +'upload-success-msg' => 'Încărcarea de la [$2] s-a încheiat cu succes. Rezultatul este disponibil aici: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problemă la trimitere', +'upload-failure-msg' => 'A apărut o problemă cu încărcarea de la [$2]: + +$1', +'upload-warning-subj' => 'Avertizare la încărcare', +'upload-warning-msg' => 'A apărut o problemă în timpul încărcării de la [$2]. Vă puteți întoarce la [[Special:Upload/stash/$1|formularul de trimitere]]pentru a corecta această problemă.', 'upload-proto-error' => 'Protocol incorect', 'upload-proto-error-text' => 'Importul de la distanță necesită adrese URL care încep cu http:// sau ftp://.', @@ -1737,6 +1772,7 @@ O apăsare pe antetul coloanei schimbă sortarea.', 'listfiles_search_for' => 'Caută imagine după nume:', 'imgfile' => 'fișier', 'listfiles' => 'Lista imaginilor', +'listfiles_thumb' => 'Miniatură', 'listfiles_date' => 'Data', 'listfiles_name' => 'Nume', 'listfiles_user' => 'Utilizator', @@ -1862,8 +1898,8 @@ Lista tipurilor MIME recunoscute de MediaWiki poate fi găsită la [http://svn.w 'statistics-edits' => 'Editări de la instalarea {{SITENAME}}', 'statistics-edits-average' => 'Media editărilor pe pagină', 'statistics-views-total' => 'Număr de vizualizări', +'statistics-views-total-desc' => 'Vizualizările paginilor inexistente și a paginilor speciale nu sunt incluse', 'statistics-views-peredit' => 'Vizualizări pe editare', -'statistics-jobqueue' => 'Lungime [http://www.mediawiki.org/wiki/Manual:Job_queue listă de așteptare]', 'statistics-users' => '[[Special:ListUsers|Utilizatori]] înregistrați', 'statistics-users-active' => 'Utilizatori activi', 'statistics-users-active-desc' => 'Utilizatori care au efectuat o acțiune în {{PLURAL:$1|ultima zi|ultimele $1 zile}}', @@ -1878,7 +1914,7 @@ O pagină este considerată o pagină de dezambiguizare dacă folosește formate 'doubleredirects' => 'Redirecționări duble', 'doubleredirectstext' => 'Această listă conține pagini care redirecționează la alte pagini de redirecționare. Fiecare rând conține legături la primele două redirecționări, precum și ținta celei de-a doua redirecționări, care este de obicei pagina țintă "reală", către care ar trebui să redirecționeze prima pagină. -Intrările tăiate au fost rezolvate.', +Intrările tăiate au fost rezolvate.', 'double-redirect-fixed-move' => '[[$1]] a fost mutat, acum este un redirect către [[$2]]', 'double-redirect-fixer' => 'Corector de redirecționări', @@ -1901,6 +1937,8 @@ Intrările tăiate au fost rezolvate.', 'nmembers' => '$1 {{PLURAL:$1|membru|membri}}', 'nrevisions' => '{{PLURAL:$1|o revizie|$1 revizii}}', 'nviews' => '{{PLURAL:$1|o accesare|$1 accesări}}', +'nimagelinks' => 'Utilizat pe $1 {{PLURAL:$1|pagină|pagini}}', +'ntransclusions' => 'utilizat pe $1 {{PLURAL:$1|pagină|pagini}}', 'specialpage-empty' => 'Această pagină este goală.', 'lonelypages' => 'Pagini orfane', 'lonelypagestext' => 'La următoarele pagini nu se leagă nici o altă pagină din {{SITENAME}}.', @@ -1958,7 +1996,7 @@ Vă rugăm să aveți în vedere faptul că alte saituri web pot avea o legătur # Book sources 'booksources' => 'Surse de cărți', -'booksources-search-legend' => 'Caută surse pentru cărți', +'booksources-search-legend' => 'Căutare surse pentru cărți', 'booksources-go' => 'Salt', 'booksources-text' => 'Mai jos se află o listă de legături înspre alte situri care vând cărți noi sau vechi și care pot oferi informații suplimentare despre cărțile pe care le căutați:', 'booksources-invalid-isbn' => 'Codul ISBN oferit nu este valid; verificați dacă a fost copiat corect de la sursa originală.', @@ -2057,34 +2095,40 @@ Pot exista [[{{MediaWiki:Listgrouprights-helppage}}|informații adiționale]] de 'listgrouprights-removegroup-self-all' => 'Pot fi șterse toate grupurile din contul propriu', # E-mail user -'mailnologin' => 'Nu există adresă de trimitere', -'mailnologintext' => 'Trebuie să fii [[Special:UserLogin|autentificat]] și să ai o adresă validă de e-mail în [[Special:Preferences|preferințe]] pentru a trimite e-mail altor utilizatori.', -'emailuser' => 'Trimiteți un e-mail', -'emailpage' => 'E-mail către utilizator', -'emailpagetext' => 'Poți folosi formularul de mai jos pentru a trimite un e-mail acestui utilizator. +'mailnologin' => 'Nu există adresă de trimitere', +'mailnologintext' => 'Trebuie să fii [[Special:UserLogin|autentificat]] și să ai o adresă validă de e-mail în [[Special:Preferences|preferințe]] pentru a trimite e-mail altor utilizatori.', +'emailuser' => 'Trimiteți un e-mail', +'emailpage' => 'E-mail către utilizator', +'emailpagetext' => 'Poți folosi formularul de mai jos pentru a trimite un e-mail acestui utilizator. Adresa de e-mail introdusă de tine în [[Special:Preferences|preferințele de utilizator]] va apărea ca adresa expeditorului e-mail-ului, deci destinatarul va putea să îți răspundă direct.', -'usermailererror' => 'Obiectul de mail a dat eroare:', -'defemailsubject' => 'E-mail {{SITENAME}}', -'noemailtitle' => 'Fără adresă de e-mail', -'noemailtext' => 'Utilizatorul nu a specificat o adresă validă de e-mail.', -'nowikiemailtitle' => 'Nu este permis e-mail-ul', -'nowikiemailtext' => 'Acest utilizator a ales să nu primească e-mail-uri de la alți utilizatori.', -'email-legend' => 'Trimite e-mail altui utilizator de la {{SITENAME}}', -'emailfrom' => 'De la:', -'emailto' => 'Către:', -'emailsubject' => 'Subiect:', -'emailmessage' => 'Mesaj:', -'emailsend' => 'Trimite', -'emailccme' => 'Trimite-mi pe e-mail o copie a mesajului meu.', -'emailccsubject' => 'O copie a mesajului la $1: $2', -'emailsent' => 'E-mail trimis', -'emailsenttext' => 'E-mailul tău a fost trimis.', -'emailuserfooter' => 'Acest mesaj a fost trimis de $1 către $2 prin intermediul funcției „Trimite e-mail” de la {{SITENAME}}.', +'usermailererror' => 'Obiectul de mail a dat eroare:', +'defemailsubject' => 'E-mail {{SITENAME}}', +'usermaildisabled' => 'E-mail dezactivat', +'usermaildisabledtext' => 'Nu puteți trimite e-mail altor utilizatori ai acestui wiki.', +'noemailtitle' => 'Fără adresă de e-mail', +'noemailtext' => 'Utilizatorul nu a specificat o adresă validă de e-mail.', +'nowikiemailtitle' => 'Nu este permis e-mail-ul', +'nowikiemailtext' => 'Acest utilizator a ales să nu primească e-mail-uri de la alți utilizatori.', +'email-legend' => 'Trimite e-mail altui utilizator de la {{SITENAME}}', +'emailfrom' => 'De la:', +'emailto' => 'Către:', +'emailsubject' => 'Subiect:', +'emailmessage' => 'Mesaj:', +'emailsend' => 'Trimite', +'emailccme' => 'Trimite-mi pe e-mail o copie a mesajului meu.', +'emailccsubject' => 'O copie a mesajului la $1: $2', +'emailsent' => 'E-mail trimis', +'emailsenttext' => 'E-mailul tău a fost trimis.', +'emailuserfooter' => 'Acest mesaj a fost trimis de $1 către $2 prin intermediul funcției „Trimite e-mail” de la {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'a lăsat un mesaj de sistem', +'usermessage-editor' => 'Mesager de sistem', # Watchlist 'watchlist' => 'Pagini urmărite', 'mywatchlist' => 'Pagini urmărite', -'watchlistfor' => "(pentru '''$1''')", +'watchlistfor2' => 'Pentru $1 $2', 'nowatchlist' => 'Nu ați ales să urmăriți nici o pagină.', 'watchlistanontext' => 'Te rugăm să $1 pentru a vizualiza sau edita itemii de pe lista ta de urmărire.', 'watchnologin' => 'Nu sunteți autentificat', @@ -2128,7 +2172,7 @@ Modificările viitoare efectuate asupra acestei pagini dar și asupra paginii de 'enotif_anon_editor' => 'utilizator anonim $1', 'enotif_body' => 'Domnule/Doamnă $WATCHINGUSERNAME, -Pagina $PAGETITLE de la {{SITENAME}} a fost $CHANGEDORCREATED la $PAGEEDITDATE de către $PAGEEDITOR. Vedeți la $PAGETITLE_URL versiunea curentă. +Pagina $PAGETITLE de la {{SITENAME}} a fost $CHANGEDORCREATED în data de $PAGEEDITDATE de către $PAGEEDITOR. Vedeți la $PAGETITLE_URL versiunea curentă. $NEWPAGE @@ -2138,15 +2182,19 @@ Puteți contacta utilizatorul: e-mail: $PAGEEDITOR_EMAIL wiki: $PAGEEDITOR_WIKI -Nu veți mai primi notificări în cazul unor viitoare modificări în afara cazului în care vizitați pagina. Puteți de asemenea reseta notificările pentru alte pagini urmărite. +Nu veți mai primi notificări în cazul unor viitoare modificări până când nu veți vizitați pagina. +Puteți de asemenea reseta notificările pentru toate pagini pe care le urmăriți. - Al dvs. amic, sistemul de notificare de la {{SITENAME}} + Al dumneavoastră amic, sistemul de notificare de la {{SITENAME}} -- -Pentru a modifica preferințele listei de urmărire vizitați +Pentru a modifica setările notificării prin e-mail, vizitați +{{fullurl:{{#special:Preferences}}}} + +Pentru a modifica setările listei de pagini urmărite, vizitați {{fullurl:{{#special:Watchlist}}/edit}} -Pentru a nu mai urmări pagina vizitați +Pentru a nu mai urmări pagina, vizitați $UNWATCHURL Asistență și suport: @@ -2200,7 +2248,10 @@ Ultima editare a fost făcută de către [[User:$3|$3]] ([[User talk:$3|discuți 'revertpage-nouser' => 'Anularea modificărilor efectuate de (nume de utilizator șters) și revenirea la ultima modificare de către [[User:$1|$1]]', 'rollback-success' => 'Anularea modificărilor făcute de $1; revenire la ultima versiune de $2.', -'sessionfailure' => 'Se pare că este o problemă cu sesiunea de autentificare; această acțiune a fost oprită ca o precauție împotriva hijack. Apăsați "back" și reîncărcați pagina de unde ați venit, apoi reîncercați.', + +# Edit tokens +'sessionfailure-title' => 'Eroare de sesiune', +'sessionfailure' => 'Se pare că este o problemă cu sesiunea de autentificare; această acțiune a fost oprită ca o precauție împotriva hijack. Apăsați "back" și reîncărcați pagina de unde ați venit, apoi reîncercați.', # Protect 'protectlogpage' => 'Jurnal protecții', @@ -2327,19 +2378,23 @@ $1', 'month' => 'Din luna (și dinainte):', 'year' => 'Până în anul:', -'sp-contributions-newbies' => 'Arată doar contribuțiile conturilor noi', -'sp-contributions-newbies-sub' => 'Pentru începători', -'sp-contributions-newbies-title' => 'Contribuțiile utilizatorului pentru conturile noi', -'sp-contributions-blocklog' => 'jurnal blocări', -'sp-contributions-deleted' => 'contribuțiile șterse ale utilizatorului', -'sp-contributions-logs' => 'jurnale', -'sp-contributions-talk' => 'discuție', -'sp-contributions-userrights' => 'administrarea permisiunilor de utilizator', -'sp-contributions-blocked-notice' => 'Acest utilizator este momentan blocat. +'sp-contributions-newbies' => 'Arată doar contribuțiile conturilor noi', +'sp-contributions-newbies-sub' => 'Pentru începători', +'sp-contributions-newbies-title' => 'Contribuțiile utilizatorului pentru conturile noi', +'sp-contributions-blocklog' => 'jurnal blocări', +'sp-contributions-deleted' => 'contribuțiile șterse ale utilizatorului', +'sp-contributions-uploads' => 'încărcări', +'sp-contributions-logs' => 'jurnale', +'sp-contributions-talk' => 'discuție', +'sp-contributions-userrights' => 'administrarea permisiunilor de utilizator', +'sp-contributions-blocked-notice' => 'Acest utilizator este momentan blocat. Ultima blocare este indicată mai jos pentru informare:', -'sp-contributions-search' => 'Căutare contribuții', -'sp-contributions-username' => 'Adresă IP sau nume de utilizator:', -'sp-contributions-submit' => 'Caută', +'sp-contributions-blocked-notice-anon' => 'Această adresă IP este blocată acum. +Iată aici ultima înregistrare relevantă din jurnalul blocărilor:', +'sp-contributions-search' => 'Căutare contribuții', +'sp-contributions-username' => 'Adresă IP sau nume de utilizator:', +'sp-contributions-toponly' => 'Afișează numai versiunile recente', +'sp-contributions-submit' => 'Caută', # What links here 'whatlinkshere' => 'Ce trimite aici', @@ -2400,7 +2455,6 @@ Vezi [[Special:IPBlockList|lista de adrese IP și conturi blocate]] pentru a rev 'ipb-edit-dropdown' => 'Modifică motivele blocării', 'ipb-unblock-addr' => 'Deblochează utilizatorul $1', 'ipb-unblock' => 'Deblocați un nume de utilizator sau o adresă IP', -'ipb-blocklist-addr' => 'Blocări existente pentru $1', 'ipb-blocklist' => 'Vezi blocările existente', 'ipb-blocklist-contribs' => 'Contribuțiile utilizatorului $1', 'unblockip' => 'Deblochează adresă IP', @@ -2473,6 +2527,8 @@ Vă rugăm să vă contactați furnizorul de servicii Internet sau tehnicienii I Nu vă puteți crea un cont', 'cant-block-while-blocked' => 'Nu puteți bloca alți utilizatori în timp ce sunteți dumneavoastră înșivă blocat.', 'cant-see-hidden-user' => 'Utilizatorul pe care încercați să îl blocați este deja blocat și ascuns. Atata timp cât nu aveți drept de hideuser, nu puteți vedea sau modifica blocarea acestuia.', +'ipbblocked' => 'Nu puteți bloca sau debloca alți utilizatori în timp ce sunteți dumneavoastră înșivă blocat.', +'ipbnounblockself' => 'Nu aveți permisiunea de a vă debloca singur', # Developer tools 'lockdb' => 'Blochează baza de date', @@ -2515,6 +2571,17 @@ Cu alte cuvinte, veți putea muta înapoi o pagină pe care ați mutat-o greșit '''ATENȚIE!''' Aceasta poate fi o schimbare drastică și neașteptată pentru o pagină populară; vă rugăm, să vă asigurați că înțelegeți toate consecințele înainte de a continua.", +'movepagetext-noredirectfixer' => "Completând formularul de mai jos veți redenumi o pagină, mutând tot istoricul la noul nume. +Vechiul titlu va deveni o pagină de redirecționare către noul titlu. +Fiți sigur că ați verificat lista redirecționărilor [[Special:DoubleRedirects|duble]] sau [[Special:BrokenRedirects|nefuncționale]]. +Vă rugăm să rețineți că aveți responsabilitatea de a verifica dacă nu cumva destinația inițială a vechilor legături s-a modificat. + +Nu uitați că pagina '''nu va fi redenumită''' dacă o pagină cu noul titlul există deja, cu excepția cazurilor în care aceasta este complet goală și nu are istoric de modificări sau este o pagină de redirecționare. +Acest lucru înseamnă că veți putea redenumi la titlul inițial o pagină greșit redenumită, dar nu veți putea suprascrie o pagină existentă. + +'''Atenție!''' +Această acțiune poate determina o schimbare dramatică, neașteptată pentru o pagină cu trafic crescut; +asigurați-vă că înțelegeți toate consecințele înainte de a continua.", 'movepagetalktext' => "Pagina asociată de discuții, dacă există, va fi mutată automat odată cu aceasta '''afară de cazul că''': * Mutați pagina în altă secțiune a {{SITENAME}} @@ -2573,6 +2640,7 @@ Pagina destinație „[[:$1]]” există deja. Doriți să o ștergeți pentru a 'immobile-source-page' => 'Această pagină nu poate fi mutată.', 'immobile-target-page' => 'Nu poate fi mutat la destinația cu acest titlu.', 'imagenocrossnamespace' => 'Fișierul nu poate fi mutat la un spațiu de nume care nu este destinat fișierelor', +'nonfile-cannot-move-to-file' => 'Entitatea (care nu este un fișier) nu poate fi mutată în spațiul de nume destinat fișierelor', 'imagetypemismatch' => 'Extensia nouă a fișierului nu se potrivește cu tipul acestuia', 'imageinvalidfilename' => 'Numele fișierului destinație este invalid', 'fix-double-redirects' => 'Actualizează toate redirecționările care trimit la titlul original', @@ -2650,6 +2718,7 @@ Salvați-l pe calculatorul dumneavoastră și încărcați-l aici.', 'importstart' => 'Se importă paginile...', 'import-revision-count' => '$1 {{PLURAL:$1|versiune|versiuni}}', 'importnopages' => 'Nu există pagini de importat.', +'imported-log-entries' => '{{PLURAL:$1|A fost importată $1 înregistrare de jurnal|Au fost importate $1 înregistrări de jurnal}}.', 'importfailed' => 'Import eșuat: $1', 'importunknownsource' => 'Tipul sursei de import este necunoscut', 'importcantopen' => 'Fișierul importat nu a putut fi deschis', @@ -2746,6 +2815,8 @@ Un dosar temporar lipsește.', 'tooltip-rollback' => '„Revenire” anulează modificarea(ările) de pe această pagină a ultimului contribuitor printr-o singură apăsare', 'tooltip-undo' => '"Anulează" șterge această modificare și deschide formularul de modificare în modulul de previzualizare. Permite adăugarea unui motiv în descrierea modificărilor', +'tooltip-preferences-save' => 'Salvează preferințele', +'tooltip-summary' => 'Descrieți pe scurt modificarea', # Stylesheets 'common.css' => '/** CSS plasate aici vor fi aplicate tuturor aparițiilor */', @@ -2864,14 +2935,17 @@ Executându-l, sistemul dvs. poate fi compromis.", 'thumbsize' => 'Dimensiunea miniaturii:', 'widthheight' => '$1x$2', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|pagină|pagini}}', -'file-info' => '(mărime fișier: $1, tip MIME: $2)', -'file-info-size' => '($1 × $2 pixeli, mărime fișier: $3, tip MIME: $4)', +'file-info' => 'mărime fișier: $1, tip MIME: $2', +'file-info-size' => '$1 × $2 pixeli, mărime fișier: $3, tip MIME: $4', 'file-nohires' => 'Rezoluții mai mari nu sunt disponibile.', -'svg-long-desc' => '(fișier SVG, cu dimensiunea nominală de $1 × $2 pixeli, mărime fișier: $3)', +'svg-long-desc' => 'fișier SVG, cu dimensiunea nominală de $1 × $2 pixeli, mărime fișier: $3', 'show-big-image' => 'Mărește rezoluția imaginii', 'show-big-image-thumb' => 'Mărimea acestei previzualizări: $1 × $2 pixeli', 'file-info-gif-looped' => 'în buclă', 'file-info-gif-frames' => '$1 {{PLURAL:$1|imagine|imagini}}', +'file-info-png-looped' => 'în buclă', +'file-info-png-repeat' => 'redat {{PLURAL:$1|o dată|de $1 ori}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|cadru|cadre}}', # Special:NewFiles 'newimages' => 'Galeria de imagini noi', @@ -3029,6 +3103,7 @@ Altele vor fi ascunse implicit. 'exif-gpsareainformation' => 'Numele domeniului GPS', 'exif-gpsdatestamp' => 'Data GPS', 'exif-gpsdifferential' => 'Corecția diferențială GPS', +'exif-objectname' => 'Titlu scurt', # EXIF attributes 'exif-compression-1' => 'Necomprimată', @@ -3110,6 +3185,8 @@ Altele vor fi ascunse implicit. 'exif-sensingmethod-7' => 'Senzor triliniar', 'exif-sensingmethod-8' => 'Senzorul linear al culorii secvențiale', +'exif-filesource-3' => 'Aparat de fotografiat digital', + 'exif-scenetype-1' => 'O imagine fotografiată direct', 'exif-customrendered-0' => 'Prelucrare normală', @@ -3186,28 +3263,28 @@ Altele vor fi ascunse implicit. 'limitall' => 'toate', # E-mail address confirmation -'confirmemail' => 'Confirmă adresa de e-mail', -'confirmemail_noemail' => 'Nu aveți o adresă de e-mail validă setată la [[Special:Preferences|preferințe]].', -'confirmemail_text' => '{{SITENAME}} solicită validarea adresei de e-mail înaintea utilizării funcțiilor specifice poștei electronice. +'confirmemail' => 'Confirmă adresa de e-mail', +'confirmemail_noemail' => 'Nu aveți o adresă de e-mail validă setată la [[Special:Preferences|preferințe]].', +'confirmemail_text' => '{{SITENAME}} solicită validarea adresei de e-mail înaintea utilizării funcțiilor specifice poștei electronice. Apăsați butonul de mai jos pentru ca un e-mail de confirmare să fie trimis către adresa dumneavoastră. Acesta va include o legătură conținând un cod; încărcați legătura în navigator pentru a valida adresa de e-mail.', -'confirmemail_pending' => 'Un cod de confirmare a fost trimis deja la adresa de e-mail indicată; +'confirmemail_pending' => 'Un cod de confirmare a fost trimis deja la adresa de e-mail indicată; dacă ați creat recent contul, ar fi bine să așteptați câteva minute e-mailul de confirmare înainte de a cere un nou cod.', -'confirmemail_send' => 'Trimite un cod de confirmare', -'confirmemail_sent' => 'E-mailul de confirmare a fost trimis.', -'confirmemail_oncreate' => 'Un cod de confirmare a fost trimis la adresa dumnevoastră de e-mail. +'confirmemail_send' => 'Trimite un cod de confirmare', +'confirmemail_sent' => 'E-mailul de confirmare a fost trimis.', +'confirmemail_oncreate' => 'Un cod de confirmare a fost trimis la adresa dumnevoastră de e-mail. Acest cod nu este necesar pentru autentificare, dar trebuie transmis înainte de activarea oricăror funcții din wiki specifice e-mailului.', -'confirmemail_sendfailed' => 'Nu am putut trimite e-mailul de confirmare. Verificați adresa după caractere invalide. +'confirmemail_sendfailed' => 'Nu am putut trimite e-mailul de confirmare. Verificați adresa după caractere invalide. Serverul de mail a returnat: $1', -'confirmemail_invalid' => 'Cod de confirmare invalid. Acest cod poate fi expirat.', -'confirmemail_needlogin' => 'Trebuie să vă $1 pentru a vă confirma adresa de e-mail.', -'confirmemail_success' => 'Adresa de e-mail a fost confirmată. Acum vă puteți [[Special:UserLogin|autentifica]] și bucura de wiki.', -'confirmemail_loggedin' => 'Adresa de e-mail a fost confirmată.', -'confirmemail_error' => 'Ceva nu a funcționat la salvarea confirmării.', -'confirmemail_subject' => 'Confirmarea adresei de e-mail la {{SITENAME}}', -'confirmemail_body' => 'Cineva, probabil dumneavoastră de la adresa IP $1, și-a înregistrat la {{SITENAME}} contul „$2” cu această adresă de e-mail. +'confirmemail_invalid' => 'Cod de confirmare invalid. Acest cod poate fi expirat.', +'confirmemail_needlogin' => 'Trebuie să vă $1 pentru a vă confirma adresa de e-mail.', +'confirmemail_success' => 'Adresa de e-mail a fost confirmată. Acum vă puteți [[Special:UserLogin|autentifica]] și bucura de wiki.', +'confirmemail_loggedin' => 'Adresa de e-mail a fost confirmată.', +'confirmemail_error' => 'Ceva nu a funcționat la salvarea confirmării.', +'confirmemail_subject' => 'Confirmarea adresei de e-mail la {{SITENAME}}', +'confirmemail_body' => 'Cineva, probabil dumneavoastră de la adresa IP $1, și-a înregistrat la {{SITENAME}} contul „$2” cu această adresă de e-mail. Pentru a confirma că acest cont vă aparține într-adevăr și pentru a vă activa funcțiile de e-mail de la {{SITENAME}}, accesați pagina: @@ -3218,8 +3295,30 @@ Dacă însă NU este contul dumneavoastră, accesați pagina: $5 Acest cod de confirmare va expira la $4.', -'confirmemail_invalidated' => 'Confirmarea adresei de e-mail a fost anulată', -'invalidateemail' => 'Anulează confirmarea adresei de e-mail', +'confirmemail_body_changed' => 'Cineva, probabil dumneavoastră de la adresa IP $1, a schimbat adresa de e-mail asociată contului „$2” de la {{SITENAME}} cu adresa la care ați primit acest mesaj. + +Pentru a confirma că acest cont vă aparține într-adevăr și pentru a vă activa funcțiile de e-mail de la {{SITENAME}}, accesați pagina: + +$3 + +Dacă însă NU este contul dumneavoastră, accesați pagina de mai jos pentru a anula modificarea: + +$5 + +Acest cod de confirmare va expira la $4.', +'confirmemail_body_set' => 'Cineva, probabil dumneavoastră de la adresa IP $1, a asociat prezenta adresă de e-mail contului „$2” de la la {{SITENAME}}. + +Pentru a confirma că acest cont vă aparține într-adevăr și pentru a vă reactiva funcțiile de e-mail de la {{SITENAME}}, accesați pagina: + +$3 + +Dacă însă NU este contul dumneavoastră, accesați pagina de mai jos pentru a anula confirmarea adresei de e-mail: + +$5 + +Acest cod de confirmare va expira la $4.', +'confirmemail_invalidated' => 'Confirmarea adresei de e-mail a fost anulată', +'invalidateemail' => 'Anulează confirmarea adresei de e-mail', # Scary transclusion 'scarytranscludedisabled' => '[Transcluderea interwiki este dezactivată]', @@ -3259,6 +3358,7 @@ Vă rugăm să confirmați faptul că într-adevăr doriți să recreați acest 'table_pager_first' => 'Prima pagină', 'table_pager_last' => 'Ultima pagină', 'table_pager_limit' => 'Arată $1 itemi pe pagină', +'table_pager_limit_label' => 'Elemente pe pagină:', 'table_pager_limit_submit' => 'Du-te', 'table_pager_empty' => 'Nici un rezultat', @@ -3315,6 +3415,7 @@ Puteți folosi în schimb [[Special:Watchlist/edit|editorul standard]].', 'version-specialpages' => 'Pagini speciale', 'version-parserhooks' => 'Hook-uri parser', 'version-variables' => 'Variabile', +'version-skins' => 'Aspect', 'version-other' => 'Altele', 'version-mediahandlers' => 'Suport media', 'version-hooks' => 'Hook-uri', @@ -3326,6 +3427,13 @@ Puteți folosi în schimb [[Special:Watchlist/edit|editorul standard]].', 'version-hook-subscribedby' => 'Subscris de', 'version-version' => '(Versiune $1)', 'version-license' => 'Licență', +'version-poweredby-credits' => "Acest wiki este dezvoltat de '''[http://www.mediawiki.org/ MediaWiki]''', drepturi de autor © 2001-$1 $2.", +'version-poweredby-others' => 'alții', +'version-license-info' => 'MediaWiki este un software liber pe care îl puteți redistribui și/sau modifica sub termenii Licenței Publice Generale GNU publicată de Free Software Foundation – fie a doua versiune a acesteia, fie, la alegerea dumneavoastră, orice altă versiune ulterioară. + +MediaWiki este distribuit în speranța că va fi folositor, dar FĂRĂ VREO GARANȚIE, nici măcar cea implicită de COMERCIALIZARE sau de ADAPTARE PENTRU UN UN SCOP ANUME. Vedeți Licența Publică Generală GNU pentru mai multe detalii. + +În cazul în care nu ați primit [{{SERVER}}{{SCRIPTPATH}}/COPYING o copie a Licenței Publice Generale GNU] împreună cu acest program, scrieți la Free Software Foundation, Inc, 51, Strada Franklin, etajul cinci, Boston, MA 02110-1301, Statele Unite ale Americii sau [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html citiți-o online].', 'version-software' => 'Software instalat', 'version-software-product' => 'Produs', 'version-software-version' => 'Versiune', @@ -3396,6 +3504,15 @@ Introdu numele fișierului fără prefixul "{{ns:file}}:".', 'tags-edit' => 'modificare', 'tags-hitcount' => '$1 {{PLURAL:$1|modificare|modificări}}', +# Special:ComparePages +'comparepages' => 'Comparație între pagini', +'compare-selector' => 'Comparație între versiuni', +'compare-page1' => 'Pagina 1', +'compare-page2' => 'Pagina 2', +'compare-rev1' => 'Versiunea 1', +'compare-rev2' => 'Versiunea 2', +'compare-submit' => 'Comparație', + # Database error messages 'dberr-header' => 'Acest site are o problemă', 'dberr-problems' => 'Ne cerem scuze! Acest site întâmpină dificultăți tehnice.', @@ -3412,8 +3529,13 @@ Introdu numele fișierului fără prefixul "{{ns:file}}:".', 'htmlform-float-invalid' => 'Valoarea specificată nu este un număr.', 'htmlform-int-toolow' => 'Valoarea specificată este sub maximul $1', 'htmlform-int-toohigh' => 'Valoarea specificată este peste maximul $1', +'htmlform-required' => 'Completare obligatorie', 'htmlform-submit' => 'Trimite', 'htmlform-reset' => 'Anulează modificările', 'htmlform-selectorother-other' => 'Altul', +# SQLite database support +'sqlite-has-fts' => '$1 cu suport de căutare în tot textul', +'sqlite-no-fts' => '$1 fără suport de căutare în tot textul', + ); diff --git a/languages/messages/MessagesRoa_rup.php b/languages/messages/MessagesRoa_rup.php index 7ba99190..1d49ad6a 100644 --- a/languages/messages/MessagesRoa_rup.php +++ b/languages/messages/MessagesRoa_rup.php @@ -99,7 +99,7 @@ Isape a vostrã ira adratã. Nu agãrshits s-le alãxits alidzerle-a vostre ti { 'yourname' => 'Numa di ufilizitor:', 'yourpassword' => 'Cljao:', 'yourpasswordagain' => 'Bãgats-u cljao iara:', -'remembermypassword' => 'Apurã-u ligãtura-a mea pi compiuterlu aistu', +'remembermypassword' => 'Apurã-u ligãtura-a mea pi compiuterlu aistu (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'Ligats-vã', 'userlogin' => 'Ligats-vã / Fãtsets Isape', 'logout' => 'Disligats-vã', diff --git a/languages/messages/MessagesRoa_tara.php b/languages/messages/MessagesRoa_tara.php index 84af15cf..81edcbf7 100644 --- a/languages/messages/MessagesRoa_tara.php +++ b/languages/messages/MessagesRoa_tara.php @@ -37,8 +37,7 @@ $messages = array( 'tog-editsection' => 'Abilite le cangiaminde a sezione ausanne [cange]', 'tog-editsectiononrightclick' => "Abilite le cngiaminde d'a sezione ausanne 'u pulsande destre d'u mouse cazzanne sus a 'u titele (Javascript)", 'tog-showtoc' => "Fa vedè 'a taggelle de le condenute (pe le pàggene cu cchiù de 3 testete)", -'tog-rememberpassword' => "Arrecuèrdete 'u nome mije sus a stu computer", -'tog-editwidth' => "Scianghe 'a scatele de le cangiaminde pe fà anghjiè tutte 'u scherme", +'tog-rememberpassword' => "Arrencuerdete 'u nome mije sus a stu browser (pe 'nu massime de $1 {{PLURAL:$1|sciurne|sciurne}})", 'tog-watchcreations' => "Mitte le pàggene ca je agghje ccrejete jndr'à le pàggene condrollete", 'tog-watchdefault' => "Mitte le pàggene ca je agghje cangete jndr'à le pàggene condrolleteAdd pages I edit to my watchlist", 'tog-watchmoves' => "Mitte le pàggene ca je agghje spustete jndr'à le pàggene condrollete", @@ -184,31 +183,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => "Aggiunge 'na discussiona", -'vector-action-delete' => 'Scangille', -'vector-action-move' => 'Spuèste', -'vector-action-protect' => 'Protegge', -'vector-action-undelete' => 'Repristine', -'vector-action-unprotect' => 'Sprotegge', -'vector-namespace-category' => 'Categorije', -'vector-namespace-help' => "Pàgene d'aijute", -'vector-namespace-image' => 'File', -'vector-namespace-main' => 'Pàgene', -'vector-namespace-media' => 'Pàgene de le media', -'vector-namespace-mediawiki' => 'Messagge', -'vector-namespace-project' => 'Pàgene de pruggette', -'vector-namespace-special' => 'Pàgena speciale', -'vector-namespace-talk' => "'Ngazzamende", -'vector-namespace-template' => 'Template', -'vector-namespace-user' => "Pàgena de l'utende", -'vector-view-create' => 'Ccreje', -'vector-view-edit' => 'Cange', -'vector-view-history' => "Vide 'u cunde", -'vector-view-view' => 'Ligge', -'vector-view-viewsource' => "Vide 'u sorgende", -'actions' => 'Aziune', -'namespaces' => 'Namespace', -'variants' => 'Variande', +'vector-action-addsection' => "Aggiunge 'na discussiona", +'vector-action-delete' => 'Scangille', +'vector-action-move' => 'Spuèste', +'vector-action-protect' => 'Protegge', +'vector-action-undelete' => 'Repristine', +'vector-action-unprotect' => 'Sprotegge', +'vector-simplesearch-preference' => "Abbilete le suggereminde d'a ricerche avanzate (Sulamende pe le scheme a vettore)", +'vector-view-create' => 'Ccreje', +'vector-view-edit' => 'Cange', +'vector-view-history' => "Vide 'u cunde", +'vector-view-view' => 'Ligge', +'vector-view-viewsource' => "Vide 'u sorgende", +'actions' => 'Aziune', +'namespaces' => 'Namespace', +'variants' => 'Variande', 'errorpagetitle' => 'Errore', 'returnto' => 'Tuerne a $1.', @@ -269,6 +258,9 @@ Troppe utinde stonne a provene a vedè sta pàgene. Pe piacere aspitte 'nu picche e pò pruève 'n'otra vote a trasè jndr'à sta pàgene. $1", +'pool-timeout' => "Tiembe d'attese scadute pu 'u blocche", +'pool-queuefull' => "'A code de le sondagge jè chiene", +'pool-errorunknown' => 'Errore scanusciute', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Sus a {{SITENAME}}', @@ -440,7 +432,8 @@ No te sce scurdanne de cangià le [[Special:Preferences|{{SITENAME}} preferenze 'yourname' => 'Nome utende:', 'yourpassword' => 'Passuord:', 'yourpasswordagain' => "Scrive 'a passuord notra vote:", -'remembermypassword' => "Arrencuerdete 'u nome mie sus a stu combiuter", +'remembermypassword' => "Arrencuerdete 'u nome mije sus a stu combiuter (pe 'nu massime de $1 {{PLURAL:$1|sciurne|sciurne}})", +'securelogin-stick-https' => "Statte collegate ô HTTPS apprisse 'a trasute", 'yourdomainname' => "'U nome d'u dominie tue:", 'externaldberror' => "Vide bbuene, o stè 'n'errore de autendicazione a 'u database oppure tu non ge puè aggiorna 'u cunde tue esterne.", 'login' => 'Tràse', @@ -457,6 +450,7 @@ No te sce scurdanne de cangià le [[Special:Preferences|{{SITENAME}} preferenze 'gotaccount' => "Tine già 'nu cunde? '''$1'''.", 'gotaccountlink' => 'Tràse', 'createaccountmail' => 'pe e-mail', +'createaccountreason' => 'Mutive:', 'badretype' => 'Le passuord ca è scritte non ge sonde uguale.', 'userexists' => "'U nome de l'utende ca è scritte jè già ausete. Mittene n'otre.", @@ -487,6 +481,7 @@ Prueve n'otra vote.", Mitta n'otra vota.", 'passwordtooshort' => 'Le password onne a essere almene {{PLURAL:$1|1 carattere|$1 carattere}}.', 'password-name-match' => "'A password toje adda essere diverse da 'u nome utende tue.", +'password-login-forbidden' => "L'ause de stu nome utende e passuord onne state vietate.", 'mailmypassword' => 'Passuord nova pe e-mail', 'passwordremindertitle' => 'Passuord temboranea nova pe {{SITENAME}}', 'passwordremindertext' => "Quacchedune (pò essere tu, da quiste indirizze IP \$1) ha cerchete 'na nova password pe {{SITENAME}} (\$4). @@ -527,6 +522,9 @@ Pe piacere vide c'aspitte 'nu picche de timbe apprime de pruvà 'n'otra vote.", 'loginlanguagelabel' => 'Lénga: $1', 'suspicious-userlogout' => "'A richiesta toje de assè ha state bloccate purcè pare ca ha state mannate da 'nu browser scuasciate o da 'a cache de 'nu proxy.", +# E-mail sending +'php-mail-error-unknown' => "Errore scanusciute jndr'à funzione PHP mail()", + # Password reset dialog 'resetpass' => "Cange 'a password", 'resetpass_announce' => "Tu tè colleghete cu 'nu codece mannete pe e-mail temboranee. @@ -580,11 +578,12 @@ Pò essere ca tu è già cangete 'a password toje o è richieste una temboranea 'showdiff' => 'Fa vedè le cangiaminde', 'anoneditwarning' => "'''Attenziò:''' Tu non ge sinde colleghete.. L'indirizze IP tue avène reggistrete jndr'à le cangiaminde de sta pàgene.", +'anonpreviewwarning' => "''Tu non ge sì collegate. Reggistranne le cangiaminde jndr'à sta pàgene iesse l'indirizze IP tune jndr'à storie.''", 'missingsummary' => "'''Arrecuèrdete:''' Tu non g'è provvedute a 'nu riepileghe de le cangiaminde. Ce tu cazze Reggistre 'n'otra vote, 'u cangiamende tue avène memorizzete senze une.", 'missingcommenttext' => "Pe piacere mitte 'nu commende aqquà sotte.", 'missingcommentheader' => "'''Arrecuèrdete:''' Tu non g'è provvedute a 'nu soggette/testate pe stu commende. -Ce tu cazze Reggistre 'n'otra vote, 'u cangiamende tue avène memorizzete senze une.", +Ce tu cazze \"{{int:savearticle}}\" 'n'otra vote, 'u cangiamende tune avène memorizzate senze jidde.", 'summary-preview' => "Andeprime d'u riepileghe:", 'subject-preview' => "Andeprime de l'Oggette/Testete:", 'blockedtitle' => "L'utende è blocchete", @@ -663,8 +662,12 @@ L'urteme archivije de le bloccaminde se iacche aqquà sotte pe referimende:", '''Non g'à state angore reggistrete ninde!'''", 'userjspreview' => "'''Arrecuerdete ca tu ste vide/teste sulamende in andeprime 'u JavaScript tue.''' '''Non g'à state angore reggistrete ninde!'''", +'sitecsspreview' => "'''Arrecuerdete ca tu ste vide sulamende in andeprime 'u CSS tune.''' +'''Non g'à state angore reggistrate ninde!'''", +'sitejspreview' => "'''Arrecuerdete ca tu ste vide sulamende in andeprime 'u codece JavaScript tune.''' +'''Non g'à state angore reggistrate ninde!'''", 'userinvalidcssjstitle' => "'''Attenziò:''' Non ge stè 'nu skin \"\$1\". -Arrecuerdete ca jndr'à le file personalizzete .css e .js s'ause scrivere le titele cu le lettere piccenne, pe esembie {{ns:user}}:Foo/monobook.css è diverse da {{ns:user}}:Foo/Monobook.css.", +Arrecuerdete ca jndr'à le file personalizzete .css e .js s'ause scrivere le titele cu le lettere piccenne, pe esembie {{ns:user}}:Foo/vector.css è diverse da {{ns:user}}:Foo/Vector.css.", 'updated' => '(Cangiete)', 'note' => "'''Vide Bbuene:'''", 'previewnote' => "'''Queste è sole 'n'andeprime; @@ -706,9 +709,6 @@ Tu na promettere pure ca le cose ca scrive tu, sonde 'mbormaziune libbere o copi Ce tu non ge vuè ca quidde ca scrive avène cangete da tre, allore non scè scrivenne proprie aqquà.
    Tu ne stè promitte ca quidde ca scrive tu, o lè scritte cu 'u penziere tue o lè cupiate da risorse de pubbliche dominie o sembre robba libbere (vide $1 pe cchiù dettaglie). '''NO REGGISTRA' FATIJE CUPERTE DA 'U COPYRIGHT SENZA PERMESSE! NO FA STUDECARIE!'''", -'longpagewarning' => "'''ATTENZIO': Sta pàgene jè longhe $1 kilobyte; -certe brauser ponne avè probleme quanne vuè cu cange pàggene ca sonde granne cchiù o mene 32 KB. -Pe piacere considere de cangià 'a pàgene a stuezze stuezze ausanne le sezione.'''", 'longpageerror' => "'''ERRORE: 'U teste ca tu vuè ccu reggistre è luenghe $1 kilobyte, invece 'u limite massime jè de $2 kilobyte.''' Non ge puè reggistrà sta pàggene.", 'readonlywarning' => "'''FA ATTENZIO': 'U database ha state bloccate pe manutenziona, e allore tu non ge puè reggistrà le cangiaminde ca ste face mò.''' @@ -887,6 +887,8 @@ $1", 'logdelete-failure' => "'''L'archivije d'a visibbilità non ge pò essere 'mbostate:''' $1", 'revdel-restore' => "Cange 'a visibilità", +'revdel-restore-deleted' => 'revisiune scangellate', +'revdel-restore-visible' => 'Revisiune visibbele', 'pagehist' => "Storie d'a vôsce", 'deletedhist' => "Storie d'u scangellamende", 'revdelete-content' => 'condenute', @@ -956,11 +958,13 @@ Vide Bbuene ca ausanne le collegaminde de navigazzione sta culonne avène azzera # Diffs 'history-title' => 'Liste de le versiune de "$1"', 'difference' => "(Differenze 'mbrà versiune)", +'difference-multipage' => "(Differenze 'mbrà le pàggene)", 'lineno' => 'Linea $1:', 'compareselectedversions' => 'Combronde le versiune selezionete', 'showhideselectedversions' => 'Fà vedè/scunne le revisiune selezionate', 'editundo' => 'annulle', -'diff-multi' => "({{PLURAL:$1|'na versione de mmienze|$1 cchiù versiune de mmienze}} non ge se vèdene.)", +'diff-multi' => "({{PLURAL:$1|'na versione de mmienze|$1 cchiù versiune de mmienze}} de {{PLURAL:$2|'n'utende|$2 utinde}} non ge se vèdene)", +'diff-multi-manyusers' => "({{PLURAL:$1|'Na revisione de 'mmienze|$1 revisiune de 'mmienze}} non g'è viste da cchiù de $2 {{PLURAL:$2|utende|utinde}})", # Search results 'searchresults' => "Resultete d'a ricerche", @@ -995,6 +999,7 @@ Vide Bbuene ca ausanne le collegaminde de navigazzione sta culonne avène azzera 'searchprofile-everything-tooltip' => "Cirche jndr'à tutte le vosce (combrese le vosce de le 'ngazzaminde)", 'searchprofile-advanced-tooltip' => "Cirche jndr'à le namespace personalizzete", 'search-result-size' => '$1 ({{PLURAL:$2|1 parole|$2 parole}})', +'search-result-category-size' => '{{PLURAL:$1|1 membre|$1 membre}} ({{PLURAL:$2|1 sottecategorije|$2 sottecategorije}}, {{PLURAL:$3|1 file|$3 file}})', 'search-result-score' => "'Mbortanze: $1%", 'search-redirect' => '(Redirette $1)', 'search-section' => '(sezione $1)', @@ -1072,6 +1077,7 @@ Però fa attenzione purcè l'indice lore sus a {{SITENAME}} ponne condenè pàgg 'contextlines' => 'Linne pe collegamende:', 'contextchars' => 'Condeste pe linee:', 'stub-threshold' => 'Soglie pe collegamende stub de formattazione (byte):', +'stub-threshold-disabled' => 'Disabbilitate', 'recentchangesdays' => "Sciurne da fà vedè jndr'à le cangiaminde recende:", 'recentchangesdays-max' => '(massime $1 {{PLURAL:$1|sciurne|sciurne}})', 'recentchangescount' => 'Numere de cangiaminde da fà vedè pe default:', @@ -1105,6 +1111,7 @@ Aqquà ste 'nu valore generate a uecchije ca tu puè ausà: $1", 'prefs-files' => 'Fails', 'prefs-custom-css' => 'CSS Personalizzete', 'prefs-custom-js' => 'JS Personalizzete', +'prefs-common-css-js' => 'CSS/JS condivise pe tutte le sfonde:', 'prefs-reset-intro' => "Tu puè ausà sta pàgene pe azzerà le preferenze tue a quidde de default d'u site. Quiste non ge pò essere annullate.", 'prefs-emailconfirm-label' => "Conferme de l'e-mail:", @@ -1143,9 +1150,15 @@ Tu puè pure scacchià de lassà otre condatte ausanne l'utende tue o le pàggen 'prefs-advancedrendering' => 'Opzione avanzate', 'prefs-advancedsearchoptions' => 'Opzione avanzate', 'prefs-advancedwatchlist' => 'Opzione avanzate', -'prefs-display' => "Fà vedè l'opzione", +'prefs-displayrc' => "Fà vedè l'opzione", +'prefs-displaysearchoptions' => "Fà vedè l'opzione", +'prefs-displaywatchlist' => "Fà vedè l'opzione", 'prefs-diffs' => 'Diff', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => "L'indirizze e-mail pare valide", +'email-address-validity-invalid' => "Mitte 'n'indirizze e-mail valide", + # User rights 'userrights' => 'Gestione de le deritte utende', 'userrights-lookup-user' => "Gestisce le gruppe de l'utinde", @@ -1230,6 +1243,7 @@ Tu puè pure scacchià de lassà otre condatte ausanne l'utende tue o le pàggen 'right-hideuser' => "Bluecche 'nu cunde utende, scunnènnele da 'u pubbliche", 'right-ipblock-exempt' => "Zumbe le blocche de l'IP, auto blocche e le blocche a indervalle", 'right-proxyunbannable' => "Zumbe automaticamende le condrolle d'u proxy", +'right-unblockself' => 'Sbluecche lore', 'right-protect' => 'Cange le levèelle de protezione e cange le pàggene prutette', 'right-editprotected' => 'Cange le pàggene prutette (senza protezzione a cascata)', 'right-editinterface' => "Cange l'inderfacce utende", @@ -1252,7 +1266,6 @@ Tu puè pure scacchià de lassà otre condatte ausanne l'utende tue o le pàggen 'right-siteadmin' => "Blocche e sblocche 'u database", 'right-reset-passwords' => "Azzere l'otre password de l'utinde", 'right-override-export-depth' => "L'esportazione de pàggene inglude pàggene collegate 'mbonde a 'na profonnetà de 5", -'right-versiondetail' => "Fà vedè le 'mbormaziune d'a versione estese d'u software", 'right-sendemail' => "Manne 'a mail a otre utinde", # User rights log @@ -1303,14 +1316,9 @@ Tu puè pure scacchià de lassà otre condatte ausanne l'utende tue o le pàggen 'recentchanges-legend' => 'Opzione pe le cangiaminde recende', 'recentchangestext' => 'Tracce le cchiù recednde cangiaminde de Uicchi sus a sta pàgene.', 'recentchanges-feed-description' => "Tracce le urteme cangiaminde sus 'a sta Uicchipedie jndr'à quiste feed.", -'recentchanges-label-legend' => 'Legende: $1', -'recentchanges-legend-newpage' => '$1 - pàgena nove', 'recentchanges-label-newpage' => "Stu cangiamende ha ccrejate 'na pàgena nove", -'recentchanges-legend-minor' => '$1 - Cangiamende stuèdeche', 'recentchanges-label-minor' => "Quiste ète 'nu cangiamende stuèdeche", -'recentchanges-legend-bot' => '$1 - cangiamende de bot', 'recentchanges-label-bot' => "Stu cangiamende ha state fatte da 'nu bot", -'recentchanges-legend-unpatrolled' => '$1 - cangiamende non condrollate', 'recentchanges-label-unpatrolled' => "Stu cangiamende non g'à state angore condrollate", 'rcnote' => "Sotte {{PLURAL:$1|jè '''1''' cangiamende|sonde le urteme '''$1''' cangiaminde}} jndr'à l'urteme{{PLURAL:$2|sciurne|'''$2''' sciurne}}, jndr'à $5, $4.", 'rcnotefrom' => "Sotte stonne le cangiaminde da '''$2''' (fine a '''$1''' mustrete).", @@ -1359,6 +1367,9 @@ Pàggene sus 'a [[Special:Watchlist|le Pàggene condrollete]] sonde in '''grasce 'upload_directory_missing' => "'A cartelle de le carecaminde ($1) s'à perdute o pò essere ca non g'à state ccreate da 'u webserver.", 'upload_directory_read_only' => "'A cartelle d'u carecamende ($1) non ge se pò fà scrivere da 'u webserver.", 'uploaderror' => 'Errore de carecamende', +'upload-recreate-warning' => "'''Attenziò: 'Nu file cu stu nome ha state scangellate o spustate.''' + +L'archivije de de scangellaminde e de le spustaminde pe sta pàgene le puè acchià aqquà:", 'uploadtext' => "Ause 'u module aqquà sotte pe carecà le file. Pe vedè o cercà le file carecate precedendemende veje a 'a [[Special:FileList|liste de le file carecate]], le carecaminde sonde pure reggistrate jndr'à l'[[Special:Log/upload|archivije de le carecaminde]], le scangellazziune jndr'à l'[[Special:Log/delete|archivije de le scangellaminde]]. @@ -1394,6 +1405,17 @@ Pe piacere vide ce renomene 'u file e pruève a carecarle 'n'otra vote.", 'filetype-banned-type' => "'''\".\$1\"''' ète 'nu tipe de file ca non g'è permesse. {{PLURAL:\$3|'U tipe de file permesse ète|Le tipe de file permesse sonde}} \$2.", 'filetype-missing' => '\'U file non ge tène l\'estenzione (cumme a ".jpg").', +'empty-file' => "'U file ca tu è mannate ere vacande.", +'file-too-large' => "'U file ca tu è mannate ere troppe luènghe.", +'filename-tooshort' => "'U nome d'u file jè troppe curte.", +'filetype-banned' => 'Stu tipe de file jè vietate.', +'verification-error' => "Stu file non g'à passate 'a verifeche de le file.", +'hookaborted' => "'U cangiamende ca tu stè pruève a ffà ha state inderrotte da 'nu gange estese.", +'illegal-filename' => "'U nome d'u file non g'è permesse.", +'overwrite' => "'A sovrascritture de 'nu file ca esiste non ge se pò fà.", +'unknown-error' => "'N'errore scanusciute s'a verificate.", +'tmp-create-error' => 'Non ge pozze ccrejà file temboranèe.', +'tmp-write-error' => "Errore scrivenne 'u file temboranèe.", 'large-file' => "Normalmende 'u file non g'adda essere cchiù granne de $1; Stu file jè $2.", 'largefileserver' => "Stu file jè troppe gruesse pe quidde ca 'a configurazione d'u server permette.", @@ -1423,13 +1445,14 @@ ce tu vuè angore carecà stu file, pe piacere tuèrne rrete e ause 'nu nome nu 'file-exists-duplicate' => "Stu file jè 'na copie {{PLURAL:$1|d'u seguende file|de le seguende file}}:", 'file-deleted-duplicate' => "'Nu file uguale a stu file ([[:$1]]) ha state scangellate precedendemende.
    Avissa verificà 'a storie d'a scangellazzione d'u file apprime de condinuà a carecarle.", -'successfulupload' => 'Carecamende sciute apposte', 'uploadwarning' => 'Avvise de carecamende', 'uploadwarning-text' => "Pe piacere cange 'a descrizione d'u file sotte e pruève 'notra vote.", 'savefile' => "Reggistre 'u file", 'uploadedimage' => 'carechete "[[$1]]"', 'overwroteimage' => 'ha state carechete \'na versiona nove de "[[$1]]"', 'uploaddisabled' => 'Carecaminde disabbilitete', +'copyuploaddisabled' => "Carecamende da l'URL disabbilitate.", +'uploadfromurl-queued' => "'U carecamende tune ha state mise in code.", 'uploaddisabledtext' => 'Le carecaminde de le file sonde disabbilitete.', 'php-uploaddisabledtext' => "Le carecaminde de file sonde disabilitate in PHP.
    Pe piacere verifiche le 'mbostaziune d'u ''file_uploads''.", @@ -1451,6 +1474,14 @@ Tu avissa considerà ce è proprie utile carecà stu file. L'archivije de le scangellaminde pe stu file 'u iacchije aqquà pe convenienze:", 'filename-bad-prefix' => "'U nome d'u file ca tu ste careche accumenze pe '''\"\$1\"''', ca normalmende jè 'u nome ca assegne a machena fotografeche e non 'nu nome descrittive d'u file ca vuè ccu careche. Pe piacere scacchie 'n'otre nome ca jè cchiù descrittive.", +'upload-success-subj' => 'Carecamende sciute apposte', +'upload-success-msg' => "'U carecamende tue da [$2] ha riuscite. Mò jè disponibbele aqquà: [[:{{ns:file}}:$1]]", +'upload-failure-subj' => 'Careche le probbleme', +'upload-failure-msg' => "Stave 'nu probbleme cu 'u carecamende tune da [$2]: + +$1", +'upload-warning-subj' => 'Avvise de carecamende', +'upload-warning-msg' => "Stave 'nu probbleme cu 'u carecamende tune da [$2]. Tu puè turnà rrete a 'u [[Special:Upload/stash/$1|module de carecamende]] pe aggiustà stu probbleme.", 'upload-proto-error' => 'Protocolle scorrette', 'upload-proto-error-text' => "Le carecaminde remote onne abbesogne de le URL ca accumenzene cu 'a parole http:// o ftp://.", @@ -1517,6 +1548,7 @@ Ce cazze sus a 'a testate d'a colonne cange l'arrengamende.", 'listfiles_search_for' => 'Cirche pe nome de le media:', 'imgfile' => 'file', 'listfiles' => 'Liste de le fail', +'listfiles_thumb' => 'Miniature', 'listfiles_date' => 'Sciurne', 'listfiles_name' => 'Nome', 'listfiles_user' => 'Utende', @@ -1633,8 +1665,8 @@ Arrecuèrdete de condrollà pe otre collegaminde a le template apprime de scange 'statistics-edits' => 'Cangiaminde de le pàggene da quanne sta {{SITENAME}} ha state ccrejete', 'statistics-edits-average' => 'Cangiaminde medie pe pàgene', 'statistics-views-total' => 'Visite totele', +'statistics-views-total-desc' => 'Le viste cu le pàggene inesistende e le pàggene speciale non ge sonde ingluse', 'statistics-views-peredit' => 'Visite pe cangiaminde', -'statistics-jobqueue' => "Lunghezze d'a [http://www.mediawiki.org/wiki/Manual:Job_queue Code de fatije]", 'statistics-users' => '[[Special:ListUsers|Utinde reggistrete]]', 'statistics-users-active' => 'Utinde attive', 'statistics-users-active-desc' => "Sonde l'utinde ca onne fatte quacchecose jndr'à l'urteme {{PLURAL:$1|giurne|$1 giurne}}", @@ -1649,7 +1681,7 @@ Arrecuèrdete de condrollà pe otre collegaminde a le template apprime de scange 'doubleredirects' => 'Ridirezionaminde a doppie', 'doubleredirectstext' => "Sta pàgene elenghe le pàggene ca se ridirezionane sus a otre pàggene de ridirezionaminde. Ogne righe condene 'nu collegamende a 'u prime e a 'u seconde ridirezionamende pe fà vedè addò arrive 'u seconde ridirezionamende, 'u quale jè normalmende 'a pàgena de destinaziona \"rèale\", addò 'u prime ridirezionamende avesse appondà. -Le situaziune de ingrocie onne state resolte.", +Le situaziune de ingrocie onne state resolte.", 'double-redirect-fixed-move' => "[[$1]] ha state spustate. Mò s'avène redirette a [[$2]].", 'double-redirect-fixer' => 'Correttore de redirezionaminde', @@ -1673,6 +1705,8 @@ Mò s'avène redirette a [[$2]].", 'nmembers' => '$1 {{PLURAL:$1|membre|membre}}', 'nrevisions' => '$1 {{PLURAL:$1|revisione|revisiune}}', 'nviews' => '$1 {{PLURAL:$1|visite|visite}}', +'nimagelinks' => 'Ausate sus a $1 {{PLURAL:$1|pàgene|pàggene}}', +'ntransclusions' => 'ausate sus a $1 {{PLURAL:$1|pàgene|pàggene}}', 'specialpage-empty' => 'Non ge stonne resultete pe stu report.', 'lonelypages' => 'Pàggene orfane', 'lonelypagestext' => "Le pàggene ca seguene non ge sonde appondute da otre pàggene o sonde escluse jndr'à otre pàggene sus a {{SITENAME}}.", @@ -1831,34 +1865,40 @@ Ponne stà [[{{MediaWiki:Listgrouprights-helppage}}|'mbormaziune de cchiù]] sus 'listgrouprights-removegroup-self-all' => "Live tutte le gruppe da 'u cunde utende mije", # E-mail user -'mailnologin' => 'Nisciune indirizze de invie', -'mailnologintext' => "Tu a essere [[Special:UserLogin|collegate]] e a avè 'n'indirizze email valide jndr'à le [[Special:Preferences|preferenze]] tue pe mannà 'na mail a otre utinde.", -'emailuser' => "Manne n'email a stu utende", -'emailpage' => "E-mail de l'utende", -'emailpagetext' => "Tu puè ausà 'a schermate aqquà sotte pe mannà 'n'email a stu utende. +'mailnologin' => 'Nisciune indirizze de invie', +'mailnologintext' => "Tu a essere [[Special:UserLogin|collegate]] e a avè 'n'indirizze email valide jndr'à le [[Special:Preferences|preferenze]] tue pe mannà 'na mail a otre utinde.", +'emailuser' => "Manne n'email a stu utende", +'emailpage' => "E-mail de l'utende", +'emailpagetext' => "Tu puè ausà 'a schermate aqquà sotte pe mannà 'n'email a stu utende. L'indirizze e-mail ca tu è 'nzerite jndr'à le [[Special:Preferences|preferenze tue]] iesse jndr'à 'u cambe \"Da\" de l'e-mail, accussìa ce riceve 'a mail sape a ce addà responnere.", -'usermailererror' => "L'oggette ''Mail'' ha returnete 'n'errore:", -'defemailsubject' => 'e-mail de {{SITENAME}}', -'noemailtitle' => 'Nisciune indirizze e-mail', -'noemailtext' => "Stu utende non g'à specificate 'n'indirizze e-mail valide.", -'nowikiemailtitle' => 'Nisciuna e-mail è permesse', -'nowikiemailtext' => 'Stu utende ha scacchiate de nò ricevere email da otre utinde.', -'email-legend' => "Manne 'na mail a n'otre utende de {{SITENAME}}", -'emailfrom' => 'Da:', -'emailto' => 'A:', -'emailsubject' => 'Oggette:', -'emailmessage' => 'Messagge:', -'emailsend' => 'Manne', -'emailccme' => "Manneme 'n'email cu 'na copie d'u messàgge.", -'emailccsubject' => 'Copie de le messàgge tue a $1: $2', -'emailsent' => 'E-mail mannete', -'emailsenttext' => "'U messagge email tue ha state mannete.", -'emailuserfooter' => 'Sta e-mail ha state mannate da $1 a $2 da \'a funziona "E-mail a l\'utende" de {{SITENAME}}.', +'usermailererror' => "L'oggette ''Mail'' ha returnete 'n'errore:", +'defemailsubject' => 'e-mail de {{SITENAME}}', +'usermaildisabled' => "L'e-mail de l'utende è disabbilitate", +'usermaildisabledtext' => 'Tu non ge puè mannà e-mail a otre utinde sus a sta uicchi', +'noemailtitle' => 'Nisciune indirizze e-mail', +'noemailtext' => "Stu utende non g'à specificate 'n'indirizze e-mail valide.", +'nowikiemailtitle' => 'Nisciuna e-mail è permesse', +'nowikiemailtext' => 'Stu utende ha scacchiate de nò ricevere email da otre utinde.', +'email-legend' => "Manne 'na mail a n'otre utende de {{SITENAME}}", +'emailfrom' => 'Da:', +'emailto' => 'A:', +'emailsubject' => 'Oggette:', +'emailmessage' => 'Messagge:', +'emailsend' => 'Manne', +'emailccme' => "Manneme 'n'email cu 'na copie d'u messàgge.", +'emailccsubject' => 'Copie de le messàgge tue a $1: $2', +'emailsent' => 'E-mail mannete', +'emailsenttext' => "'U messagge email tue ha state mannete.", +'emailuserfooter' => 'Sta e-mail ha state mannate da $1 a $2 da \'a funziona "E-mail a l\'utende" de {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => "Lassanne 'nu messagge de sisteme.", +'usermessage-editor' => 'Messaggiatore de sisteme', # Watchlist 'watchlist' => 'Pàggene condrollete', 'mywatchlist' => 'Pàggene condrollete', -'watchlistfor' => "(pe '''$1''')", +'watchlistfor2' => 'Pe $1 $2', 'nowatchlist' => "Non ge tine pàggene jndr'à liste de le pàggene condrollete.", 'watchlistanontext' => 'Pe piacere $1 pe vedè o cangià le vosce sus a liste de le pàggene condrollete.', 'watchnologin' => 'Non ge sinde colleghete', @@ -1903,7 +1943,7 @@ Le cangiaminde future a sta pàgene e 'a pàgene de le 'ngazzaminde associete le 'enotif_body' => 'Care $WATCHINGUSERNAME, -\'A pàgene $PAGETITLE de {{SITENAME}} ha state $CHANGEDORCREATED \'u $PAGEEDITDATE da $PAGEEDITOR, vide $PAGETITLE_URL pa versiona corrende. +\'A pàgene $PAGETITLE de {{SITENAME}} ha state $CHANGEDORCREATED \'u $PAGEEDITDATE da $PAGEEDITOR, vide $PAGETITLE_URL pa revisione corrende. $NEWPAGE @@ -1914,12 +1954,15 @@ mail: $PAGEEDITOR_EMAIL uicchi: $PAGEEDITOR_WIKI Non ge stonne otre notifiche ce tu face otre cangiaminde senza ca tu visite sta pàgene. -Tu puè pure azzerà \'a spunde de le notifiche pe tutte le pàggene condrollete jndr\'à lista toje. +Tu puè pure azzerà \'a spunde de le notifiche pe tutte le pàggene condrollate jndr\'à lista toje. Statte Bbuene, \'u sisteme de notificaziune de {{SITENAME}} -- -Pe cangià le \'mbostaziune d\'a liste de le pàggene condrollete tue, vè vide +Pe cangià le \'mbostaziune de notifeche de l\'email toje, vè vide +{{fullurl:{{#special:Preferences}}}} + +Pe cangià le \'mbostaziune de l\'elenghe de le pàggene condrollate tune, vè vide {{fullurl:{{#special:Watchlist}}/edit}} Pe scangellà \'a pàgene da \'a liste de le pàggene condrollate, vè vide @@ -1981,7 +2024,10 @@ L'urteme cangiamende d'a pàgene ere de [[User:$3|$3]] ([[User talk:$3|'Ngazzami 'revertpage-nouser' => "Le cangiaminde annullate ba (nome utende luate) a l'urtema revisione da [[User:$1|$1]]", 'rollback-success' => "Cangiaminde annullate da $1; turnate rete a l'urtema versione da $2.", -'sessionfailure' => "Pare ca stonne probbleme cu 'a sessiona toje de collegamende; + +# Edit tokens +'sessionfailure-title' => 'Sessione fallite', +'sessionfailure' => "Pare ca stonne probbleme cu 'a sessiona toje de collegamende; st'azione ha state scangellate pe precauzione condre a le 'ngasinaminde d'a sessione. Pe piacere cazze \"rete\" e recareche 'a pàgene da addò tu è venute e pruève 'n'otra vote.", @@ -2120,18 +2166,22 @@ $1", 'month' => "Da 'u mese (e cchiù recende):", 'year' => "Da l'anne (e cchiù recende):", -'sp-contributions-newbies' => 'Fà vedè sulamende le condrebbute de le utinde nueve', -'sp-contributions-newbies-sub' => "Pe l'utinde nuève", -'sp-contributions-newbies-title' => "Condrebbute de l'utinde pe le cunde utinde nuéve", -'sp-contributions-blocklog' => 'Archivije de le Bloccaminde', -'sp-contributions-deleted' => "condrebbute de l'utende scangellate", -'sp-contributions-logs' => 'archivije', -'sp-contributions-talk' => 'parle', -'sp-contributions-userrights' => 'Gestione de le deritte utende', -'sp-contributions-blocked-notice' => "Stu utende jè pe mò bloccate. L'urteme archivije de le bloccaminde se iacchie aqquà sotte pe referimende:", -'sp-contributions-search' => 'Ricerche pe condrebbute', -'sp-contributions-username' => "Indirizze IP o nome de l'utende:", -'sp-contributions-submit' => 'Cirche', +'sp-contributions-newbies' => 'Fà vedè sulamende le condrebbute de le utinde nueve', +'sp-contributions-newbies-sub' => "Pe l'utinde nuève", +'sp-contributions-newbies-title' => "Condrebbute de l'utinde pe le cunde utinde nuéve", +'sp-contributions-blocklog' => 'Archivije de le Bloccaminde', +'sp-contributions-deleted' => "condrebbute de l'utende scangellate", +'sp-contributions-uploads' => 'carecaminde', +'sp-contributions-logs' => 'archivije', +'sp-contributions-talk' => 'parle', +'sp-contributions-userrights' => 'Gestione de le deritte utende', +'sp-contributions-blocked-notice' => "Stu utende jè pe mò bloccate. L'urteme archivije de le bloccaminde se iacchie aqquà sotte pe referimende:", +'sp-contributions-blocked-notice-anon' => "Stu indirizze IP jè pe mò bloccate.
    +L'urteme archivije de le bloccaminde se iacche aqquà sotte pe referimende:", +'sp-contributions-search' => 'Ricerche pe condrebbute', +'sp-contributions-username' => "Indirizze IP o nome de l'utende:", +'sp-contributions-toponly' => "Sulamende facenne vedè le cangiaminde de l'urteme revisiune", +'sp-contributions-submit' => 'Cirche', # What links here 'whatlinkshere' => 'Appondene aqquà', @@ -2193,7 +2243,6 @@ Vide [[Special:IPBlockList|'a liste de le IP bloccate]] pe revedè le blocche.", 'ipb-edit-dropdown' => "Cange le mutive d'u blocche", 'ipb-unblock-addr' => 'Sblocche $1', 'ipb-unblock' => 'Sblocche nome utende o indirizze IP', -'ipb-blocklist-addr' => 'Vide le blocche ca esistene pe $1', 'ipb-blocklist' => 'Vide le blocche ca esistene', 'ipb-blocklist-contribs' => 'Condrebbute pe $1', 'unblockip' => "Sblocche l'utende", @@ -2270,6 +2319,8 @@ Pe piacere condatte 'u provider de Indernette tue o 'u supporte tecniche e 'mbor Tu nonge puè ccrejà 'nu cunde utende", 'cant-block-while-blocked' => 'Tu non ge puè bloccà otre utinde quanne tu si blocchete.', 'cant-see-hidden-user' => "L'utende ca tu ste pruève a bloccà ha state già bloccate e scunnute. Ce tu non ge tine le deritte ''hideuser'', tu non ge puè vedè o cangià 'u blocche de l'utende.", +'ipbblocked' => 'Tu non ge puè bloccà o sbloccà otre utinde, purcé tu sì ppure bloccate', +'ipbnounblockself' => "Non ge t'è permesse de sbloccarte da sule", # Developer tools 'lockdb' => 'Blocche databeise', @@ -2308,6 +2359,17 @@ Quieste significhe ca tu puè fà turnà 'u vecchie nome 'a pàgene ce jedde ha '''ATTENZIONE!''' Quiste pò essere 'nu cangiamende drastiche e inaspettete de 'na pàgene famose assaje; pe piacere a essere secure-secure de le conseguenze prime de procedere.", +'movepagetext-noredirectfixer' => "Ausanne 'u module aqquà sotte puè renomenà 'na pàgene, spustanne tutte 'a storia soje sotte a 'u nome nuève. +'U titele vecchie addevende 'na pàgene de ridirezionamende a 'u titele nuève. +Me raccomande condrolle le redirezionaminde [[Special:DoubleRedirects|a doppie]] o [[Special:BrokenRedirects|scuasciate]]. +Tu si responsabbele de assicurarte ca le collagaminde appondene a 'u punde giuste. + +Vide ca 'a pàgene '''non''' g'avene spustate ce già stè 'na pàgene cu 'u titele nuève, a meno che non g'è vacande o jè 'nu ridirezionamende e non ge tène 'na storie de cangiaminde. +Quiste signifeche ca jè possibbele renominà 'na pàgene accume se chiamave apprime addò tu è fatte 'n'errore e non g'è possibbele sovrascirevere 'na pàgene esistende. + +'''Fà Attenziò!''' +Quiste pò essere 'nu cangiamende inaspettate pe 'na pàgene popolare; +Pe piacere ha essere secure secure de avere capite le conzeguenze apprime de scè nnande.", 'movepagetalktext' => "'A pagene de le 'ngazzaminde associete avène spustete automaticamende ce però: * Ste 'na pàgene de 'ngazzaminde chiena sotte 'a vôsce nova, o @@ -2366,6 +2428,7 @@ non ge se pò movere 'na pàgene sus a sè stesse.", 'immobile-source-page' => 'Sta pàgene non ge se pò spustà.', 'immobile-target-page' => 'Non ge puè spustà sus a stu titele de destinazione.', 'imagenocrossnamespace' => "Non ge pozze spustà 'nu file jndr'à 'nu namespace senza file", +'nonfile-cannot-move-to-file' => "Non ge pozze spustà 'nu file jndr'à 'nu namespace senza file", 'imagetypemismatch' => "L'estenziona nove d'u file non ge se accocchie cu 'u tipe sue", 'imageinvalidfilename' => "'U nome d'u file de destinazzione jè invalide", 'fix-double-redirects' => "Aggiorne ogne redirezionamende ca apponde a 'u titele origginale", @@ -2446,6 +2509,7 @@ Reggistrele sus a 'u combiuter tune e carechele aqquà.", 'importstart' => "'Mbortazione de le pàggene...", 'import-revision-count' => '$1 {{PLURAL:$1|revisione|revisiune}}', 'importnopages' => "Nisciuna pàgene da 'mbortà.", +'imported-log-entries' => "'Mbortate $1 {{PLURAL:$1|vôsce de l'archivije|vôsce de l'archivije}}.", 'importfailed' => "'Mbortaziona fallite: $1", 'importunknownsource' => "Tipe de sorgende de 'mbortaziona scanusciute", 'importcantopen' => "Non ge puè aprè 'u file 'mbortete", @@ -2544,6 +2608,8 @@ Puè vedè sulamende 'u sorgende.", 'tooltip-rollback' => '"Ripristine" annulle le cangiaminde a sta pàgene de l\'urteme condrebbutore cu \'nu cazzamende', 'tooltip-undo' => "\"Annulle\" annulle stu cangiamende e iapre 'u form de le cangiaminde facenne vedè l'andeprime. Permette de aggiungere 'nu mutive jndr'à 'u riepileghe", +'tooltip-preferences-save' => 'Reggistre le preferenze', +'tooltip-summary' => "Mitte 'nu riepileghe piccinne", # Metadata 'nodublincore' => "'U metadata ''Dublin Core RDF'' ète disabbilitate pe stu server.", @@ -2640,14 +2706,17 @@ Ce l'esegue sus a 'u sisteme tue pò essere ca se combromette.", 'imagemaxsize' => "Limite d'a dimenzione e l'immaggine:
    ''(pe le pàggene de descrizione d'u file)''", 'thumbsize' => "Dimenziona d'a miniature:", 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|pàgene|pàggene}}', -'file-info' => "(dimenzione d'u fail: $1, tipe de MIME: $2)", -'file-info-size' => "($1 × $2 pixel, dimenzione d'u fail: $3, tipe de MIME: $4)", +'file-info' => "dimenzione d'u fail: $1, tipe de MIME: $2", +'file-info-size' => "$1 × $2 pixel, dimenzione d'u fail: $3, tipe de MIME: $4", 'file-nohires' => "Manghe 'a risoluzione ierta.", -'svg-long-desc' => "(Fail SVG, nominalmende sonde $1 × $2 pixel, dimenzione d'u fail: $3)", +'svg-long-desc' => "Fail SVG, nominalmende sonde $1 × $2 pixel, dimenzione d'u fail: $3", 'show-big-image' => 'Risoluzione chiena chiena', 'show-big-image-thumb' => 'Dimenziune de sta andeprime: $1 × $2 pixels', 'file-info-gif-looped' => 'infinite', 'file-info-gif-frames' => '$1 {{PLURAL:$1|frame|frame}}', +'file-info-png-looped' => 'infinite', +'file-info-png-repeat' => 'eseguite $1 {{PLURAL:$1|vote|vote}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|frame|frame}}', # Special:NewFiles 'newimages' => 'Gallerie de le fail nuève', @@ -2803,6 +2872,7 @@ Otre avènene scunnute pe defolt. 'exif-gpsareainformation' => "Nome de l'area d'u GPS", 'exif-gpsdatestamp' => "Date d'u GPS", 'exif-gpsdifferential' => "Correzzione differenziale d'u GPS", +'exif-objectname' => 'Titele curte', # EXIF attributes 'exif-compression-1' => 'No combresse', @@ -2962,31 +3032,31 @@ Otre avènene scunnute pe defolt. 'limitall' => 'tutte', # E-mail address confirmation -'confirmemail' => "Conferme l'indirizze e-mail", -'confirmemail_noemail' => "Tu non ge tine 'n'indirizze e-mail valide configurate sus a le [[Special:Preferences|preferenze tue]].", -'confirmemail_text' => "{{SITENAME}} richiede ca tu ha validà l'indirizze email tue apprime de ausà 'a funzione de l'email. +'confirmemail' => "Conferme l'indirizze e-mail", +'confirmemail_noemail' => "Tu non ge tine 'n'indirizze e-mail valide configurate sus a le [[Special:Preferences|preferenze tue]].", +'confirmemail_text' => "{{SITENAME}} richiede ca tu ha validà l'indirizze email tue apprime de ausà 'a funzione de l'email. Cazze 'u buttone de sotte pe mannà 'na email de conferme a l'indirizze tue. L'email ca t'arrive tène 'u collegamende cu 'u codece; careche 'u collegamende jndr'à 'u browser tue pe confermà ca l'indirizze email tue è valide.", -'confirmemail_pending' => "'Nu codece de conferme ha state già mannate a l'email toje; +'confirmemail_pending' => "'Nu codece de conferme ha state già mannate a l'email toje; Ce tu recendemende è ccrejate 'nu cunde utende, tu puè aspettà quacche minute ca jidde arrive e pò puè pruvà a fà 'n'otra richieste pe 'nu codece nuève.", -'confirmemail_send' => "Manne 'nu codece de conferme", -'confirmemail_sent' => 'E-mail de conferme mannete.', -'confirmemail_oncreate' => "'Nu codece de conferme ha state mannate a l'indirizze e-mail tue. +'confirmemail_send' => "Manne 'nu codece de conferme", +'confirmemail_sent' => 'E-mail de conferme mannete.', +'confirmemail_oncreate' => "'Nu codece de conferme ha state mannate a l'indirizze e-mail tue. Stu codece non g'è richieste pe collegarte, ma tu n'è abbesogne de averle apprime ca tu ause quacche cose ca se base sus a l'use de le e-mail sus a Uicchi.", -'confirmemail_sendfailed' => "{{SITENAME}} non ge pò mannà l'email toje de conferme. +'confirmemail_sendfailed' => "{{SITENAME}} non ge pò mannà l'email toje de conferme. Pe piacere condrolle l'indirizze email ce tène carattere invalide. Destinatarie returnate: $1", -'confirmemail_invalid' => "Codece de conferme invalide. +'confirmemail_invalid' => "Codece de conferme invalide. Pò essere ca 'u codece ha scadute.", -'confirmemail_needlogin' => "A confermà $1 l'indirizze email ca è mise.", -'confirmemail_success' => "L'indirizze e-mail tue ha state confermate. +'confirmemail_needlogin' => "A confermà $1 l'indirizze email ca è mise.", +'confirmemail_success' => "L'indirizze e-mail tue ha state confermate. Tu, mò te puè [[Special:UserLogin|collegà]] e te puè devertì sus 'a Uicchipèdie.", -'confirmemail_loggedin' => "L'indirizze e-mail tue ha state confermate.", -'confirmemail_error' => "Quacchedune ha sbagliate reggistranne 'a conferma toje.", -'confirmemail_subject' => 'Indirizze email de conferme pe {{SITENAME}}', -'confirmemail_body' => "Quacchedune, pò essere tu, fa l'indirizze IP \$1, +'confirmemail_loggedin' => "L'indirizze e-mail tue ha state confermate.", +'confirmemail_error' => "Quacchedune ha sbagliate reggistranne 'a conferma toje.", +'confirmemail_subject' => 'Indirizze email de conferme pe {{SITENAME}}', +'confirmemail_body' => "Quacchedune, pò essere tu, fa l'indirizze IP \$1, ha reggistrate 'nu cunde utende \"\$2\" cu st'indirizze email sus a {{SITENAME}}. Pe confermà ca stu cunde ète avveramende 'u tue e pe attivà 'a funzione email de {{SITENAME}}, iapre stu collegamende jndr'à 'u borwser tue: @@ -2998,8 +3068,32 @@ Ce tu *NON* g'è reggistrate 'u cunde utende, segue stu collegamende pe scangell \$5 Stu codece de conferme more 'u \$4.", -'confirmemail_invalidated' => "Conferme de l'indirizze e-mail scangellete", -'invalidateemail' => "Scangille 'a conferme de l'e-mail", +'confirmemail_body_changed' => "Quacchedune, pò essere tu, da l'indirizze IP \$1, +ha cangiate l'indirizze e-mail d'u cunde utende \"\$2\" cu st'indirizze e-mail sus a {{SITENAME}}. + +Pe confermà ca stu cunde ète avveramende 'u tune e pe reattivà 'a funzione email de {{SITENAME}}, iapre stu collegamende jndr'à 'u borwser tune: + +\$3 + +Ce tu *NON* g'è reggistrate 'u cunde utende, segue stu collegamende pe scangellà l'indirizze email de conferme: + +\$5 + +Stu codece de conferme scade 'u \$4.", +'confirmemail_body_set' => "Quacchedune, pò essere tu, da l'indirizze IP \$1, +ha cangiate l'indirizze e-mail d'u cunde utende \"\$2\" cu st'indirizze e-mail sus a {{SITENAME}}. + +Pe confermà ca stu cunde ète avveramende 'u tune e pe reattivà 'a funzione email de {{SITENAME}}, iapre stu collegamende jndr'à 'u borwser tune: + +\$3 + +Ce tu *NON* g'è reggistrate 'u cunde utende, segue stu collegamende pe scangellà l'indirizze email de conferme: + +\$5 + +Stu codece de conferme scade 'u \$4.", +'confirmemail_invalidated' => "Conferme de l'indirizze e-mail scangellete", +'invalidateemail' => "Scangille 'a conferme de l'e-mail", # Scary transclusion 'scarytranscludedisabled' => "[Collegaminde 'mbrà InterUicchi disabbilitate]", @@ -3039,6 +3133,7 @@ Pe piacere conferme ca tu vuè avveramende reccrejà sta pàgene.", 'table_pager_first' => 'Prima pàgene', 'table_pager_last' => 'Urtema pàgene', 'table_pager_limit' => 'Fa vedè $1 vosce pe pàgene', +'table_pager_limit_label' => 'Vôsce pe pàggene:', 'table_pager_limit_submit' => 'Veje', 'table_pager_empty' => 'Nisciune resultete', @@ -3096,6 +3191,7 @@ Tu puè pure [[Special:Watchlist/edit|ausà 'u cangiatore standàrd]].", 'version-specialpages' => 'Pàggene speciele', 'version-parserhooks' => 'Hook analizzature', 'version-variables' => 'Variabbele', +'version-skins' => 'Skin', 'version-other' => 'Otre', 'version-mediahandlers' => 'Gestore de le Media', 'version-hooks' => 'Hook', @@ -3107,6 +3203,13 @@ Tu puè pure [[Special:Watchlist/edit|ausà 'u cangiatore standàrd]].", 'version-hook-subscribedby' => 'Sottoscritte da', 'version-version' => '(Versione $1)', 'version-license' => 'Licenze', +'version-poweredby-credits' => "Sta Uicchi jè fatte da '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'otre', +'version-license-info' => "MediaUicchi jè 'nu softuare libbere, tu 'u puè redestribbuì e/o cangiarle sotte le termine d'a GNU (Licenze Pubbleche Generale) cumme pubblecate da 'a Free Software Foundation; endrambe le versiune 2 d'a Licenze, o (a scelta toje) 'le versiune cchiù nnove. + +Mediauicchi jè destribbuite cu 'a speranze ca jè utile, ma SENZE NISCIUNA GARANZIE; senze nemmanghe 'a garanzie imblicite de COMMERCIABBELETÀ o IDONIETÀ PE 'NU SCOPE PARTICOLARE. Vatte a vide 'a GNU (Licenze Pubbleche Generale) pe cchiù 'mbormaziune. + +Avisse avè ricevute [{{SERVER}}{{SCRIPTPATH}}/COPYING 'na copie d'a GNU (Licenze Pubbleche Generale)] 'nzieme a stu programme, ce none, scrive a 'a Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor , Boston, MA 02110-1301, USA o [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html liggele sus a Indernette].", 'version-software' => 'Softuer installete', 'version-software-product' => 'Prodotte', 'version-software-version' => 'Versione', @@ -3177,6 +3280,15 @@ Mitte 'u nome d'u file senze 'u \"{{ns:file}}:\" prefisse.", 'tags-edit' => 'cange', 'tags-hitcount' => '$1 {{PLURAL:$1|cangiamende|cangiaminde}}', +# Special:ComparePages +'comparepages' => 'Combronde le pàggene', +'compare-selector' => "Combronde le revisiune d'à pàgene", +'compare-page1' => 'Pàgene 1', +'compare-page2' => 'Pàgene 2', +'compare-rev1' => 'Revisione 1', +'compare-rev2' => 'Revisione 2', +'compare-submit' => 'Combronde', + # Database error messages 'dberr-header' => "Sta Uicchi tène 'nu probbleme", 'dberr-problems' => "Simw spiacende! Stu site stè 'ngondre de le diffcoltà tecniche.", @@ -3193,8 +3305,13 @@ Mitte 'u nome d'u file senze 'u \"{{ns:file}}:\" prefisse.", 'htmlform-float-invalid' => "'U valore ca è specificate non g'è 'nu numere.", 'htmlform-int-toolow' => "'U valore ca è specificate jè sotte a 'u minime de $1", 'htmlform-int-toohigh' => "'U valore ca è specificate jè suverchie a 'u massime de $1", +'htmlform-required' => 'Stu valore jè richieste', 'htmlform-submit' => 'Conferme', 'htmlform-reset' => 'Annulle le cangiaminde', 'htmlform-selectorother-other' => 'Otre', +# SQLite database support +'sqlite-has-fts' => "$1 cu 'u supporte d'a ricerche full-text", +'sqlite-no-fts' => "$1 senze 'u supporte d'a ricerche full-text", + ); diff --git a/languages/messages/MessagesRu.php b/languages/messages/MessagesRu.php index 17b5297d..a0de2454 100644 --- a/languages/messages/MessagesRu.php +++ b/languages/messages/MessagesRu.php @@ -16,10 +16,14 @@ * @author Assele * @author Chilin * @author Claymore + * @author DCamer * @author Don Alessandro + * @author Eleferen * @author EugeneZelenko * @author Ferrer * @author Flrn + * @author G0rn + * @author Gazeb * @author Grigol * @author HalanTul * @author Huuchin @@ -35,7 +39,11 @@ * @author Putnik * @author Rubin * @author Sk + * @author TarzanASG + * @author Temuri rajavi + * @author Vago * @author VasilievVV + * @author Ytsukeng Fyvaprol * @author Александр Сигачёв * @author לערי ריינהארט * @author გიორგიმელა @@ -168,6 +176,7 @@ $magicWords = array( 'subjectpagenamee' => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ), 'msg' => array( '0', 'СООБЩЕНИЕ:', 'СООБЩ:', 'MSG:' ), 'subst' => array( '0', 'ПОДСТАНОВКА:', 'ПОДСТ:', 'SUBST:' ), + 'safesubst' => array( '0', 'ЗАЩПОДСТ:', 'SAFESUBST:' ), 'msgnw' => array( '0', 'СООБЩ_БЕЗ_ВИКИ:', 'MSGNW:' ), 'img_thumbnail' => array( '1', 'мини', 'миниатюра', 'thumbnail', 'thumb' ), 'img_manualthumb' => array( '1', 'мини=$1', 'миниатюра=$1', 'thumbnail=$1', 'thumb=$1' ), @@ -200,6 +209,7 @@ $magicWords = array( 'server' => array( '0', 'СЕРВЕР', 'SERVER' ), 'servername' => array( '0', 'НАЗВАНИЕ_СЕРВЕРА', 'SERVERNAME' ), 'scriptpath' => array( '0', 'ПУТЬ_К_СКРИПТУ', 'SCRIPTPATH' ), + 'stylepath' => array( '0', 'ПУТЬ_К_СТИЛЮ', 'STYLEPATH' ), 'grammar' => array( '0', 'ПАДЕЖ:', 'GRAMMAR:' ), 'gender' => array( '0', 'ПОЛ:', 'GENDER:' ), 'notitleconvert' => array( '0', '__БЕЗ_ПРЕОБРАЗОВАНИЯ_ЗАГОЛОВКА__', '__NOTITLECONVERT__', '__NOTC__' ), @@ -212,6 +222,7 @@ $magicWords = array( 'revisionday' => array( '1', 'ДЕНЬ_ВЕРСИИ', 'REVISIONDAY' ), 'revisionday2' => array( '1', 'ДЕНЬ_ВЕРСИИ_2', 'REVISIONDAY2' ), 'revisionmonth' => array( '1', 'МЕСЯЦ_ВЕРСИИ', 'REVISIONMONTH' ), + 'revisionmonth1' => array( '1', 'МЕСЯЦ_ВЕРСИИ_1', 'REVISIONMONTH1' ), 'revisionyear' => array( '1', 'ГОД_ВЕРСИИ', 'REVISIONYEAR' ), 'revisiontimestamp' => array( '1', 'ОТМЕТКА_ВРЕМЕНИ_ВЕРСИИ', 'REVISIONTIMESTAMP' ), 'revisionuser' => array( '1', 'ВЕРСИЯ_УЧАСНИКА', 'REVISIONUSER' ), @@ -253,6 +264,9 @@ $magicWords = array( 'staticredirect' => array( '1', '__СТАТИЧЕСКОЕ_ПЕРЕНАПРАВЛЕНИЕ__', '__STATICREDIRECT__' ), 'protectionlevel' => array( '1', 'УРОВЕНЬ_ЗАЩИТЫ', 'PROTECTIONLEVEL' ), 'formatdate' => array( '0', 'форматдаты', 'formatdate', 'dateformat' ), + 'url_path' => array( '0', 'ПУТЬ', 'PATH' ), + 'url_wiki' => array( '0', 'ВИКИ', 'WIKI' ), + 'url_query' => array( '0', 'ЗАПРОС', 'QUERY' ), ); $imageFiles = array( @@ -279,8 +293,7 @@ $messages = array( 'tog-editsection' => 'Показывать ссылку «править» для каждой секции', 'tog-editsectiononrightclick' => 'Править секции при правом щелчке мышью на заголовке (JavaScript)', 'tog-showtoc' => 'Показывать оглавление (для страниц более чем с 3 заголовками)', -'tog-rememberpassword' => 'Помнить мою учётную запись на этом компьютере', -'tog-editwidth' => 'Поле редактирования во всю ширину экрана', +'tog-rememberpassword' => 'Запомнить мой логин в этом браузере (не более $1 {{PLURAL:$1|дня|дней|дней}})', 'tog-watchcreations' => 'Добавлять созданные мной страницы в список наблюдения', 'tog-watchdefault' => 'Добавлять изменённые мной страницы в список наблюдения', 'tog-watchmoves' => 'Добавлять переименованные мной страницы в список наблюдения', @@ -425,31 +438,21 @@ $messages = array( 'faqpage' => 'Project:ЧаВО', # Vector skin -'vector-action-addsection' => 'Добавить тему', -'vector-action-delete' => 'Удалить', -'vector-action-move' => 'Переименовать', -'vector-action-protect' => 'Защитить', -'vector-action-undelete' => 'Восстановить', -'vector-action-unprotect' => 'Снять защиту', -'vector-namespace-category' => 'Категория', -'vector-namespace-help' => 'Справочная страница', -'vector-namespace-image' => 'Файл', -'vector-namespace-main' => 'Страница', -'vector-namespace-media' => 'Медиа-страница', -'vector-namespace-mediawiki' => 'Сообщение', -'vector-namespace-project' => 'О проекте', -'vector-namespace-special' => 'Служебная страница', -'vector-namespace-talk' => 'Обсуждение', -'vector-namespace-template' => 'Шаблон', -'vector-namespace-user' => 'Страница участника', -'vector-view-create' => 'Создание', -'vector-view-edit' => 'Правка', -'vector-view-history' => 'История', -'vector-view-view' => 'Чтение', -'vector-view-viewsource' => 'Просмотр разметки', -'actions' => 'Действия', -'namespaces' => 'Пространства имён', -'variants' => 'Варианты', +'vector-action-addsection' => 'Добавить тему', +'vector-action-delete' => 'Удалить', +'vector-action-move' => 'Переименовать', +'vector-action-protect' => 'Защитить', +'vector-action-undelete' => 'Восстановить', +'vector-action-unprotect' => 'Снять защиту', +'vector-simplesearch-preference' => 'Включить расширенные поисковые подсказки (только для оформления «Векторное»)', +'vector-view-create' => 'Создание', +'vector-view-edit' => 'Правка', +'vector-view-history' => 'История', +'vector-view-view' => 'Чтение', +'vector-view-viewsource' => 'Просмотр разметки', +'actions' => 'Действия', +'namespaces' => 'Пространства имён', +'variants' => 'Варианты', 'errorpagetitle' => 'Ошибка', 'returnto' => 'Возврат к странице $1.', @@ -510,6 +513,9 @@ $messages = array( Пожалуйста, подождите и повторите попытку обращения к странице позже. $1', +'pool-timeout' => 'Истекло время ожидания блокировки', +'pool-queuefull' => 'Накопитель запросов полон', +'pool-errorunknown' => 'Неизвестная ошибка', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Описание {{grammar:genitive|{{SITENAME}}}}', @@ -676,7 +682,8 @@ $2', 'yourname' => 'Имя участника:', 'yourpassword' => 'Пароль:', 'yourpasswordagain' => 'Повторный набор пароля:', -'remembermypassword' => 'Помнить мою учётную запись на этом компьютере', +'remembermypassword' => 'Помнить мою учётную запись на этом компьютере (не более $1 {{PLURAL:$1|дня|дней|дней}})', +'securelogin-stick-https' => 'Продолжить подключение по HTTPS после входа', 'yourdomainname' => 'Ваш домен:', 'externaldberror' => 'Произошла ошибка при аутентификации с помощью внешней базы данных, или у вас недостаточно прав для внесения изменений в свою внешнюю учётную запись.', 'login' => 'Представиться системе', @@ -693,6 +700,7 @@ $2', 'gotaccount' => "Вы уже зарегистрированы? '''$1'''.", 'gotaccountlink' => 'Представьтесь', 'createaccountmail' => 'по эл. почте', +'createaccountreason' => 'Причина:', 'badretype' => 'Введённые вами пароли не совпадают.', 'userexists' => 'Введённое имя участника уже используется. Пожалуйста, выберите другое имя.', @@ -713,6 +721,7 @@ $2', 'wrongpasswordempty' => 'Пожалуйста, введите непустой пароль.', 'passwordtooshort' => 'Пароль должен состоять не менее чем из $1 {{PLURAL:$1|символа|символов|символов}}.', 'password-name-match' => 'Введённый пароль должен отличаться от имени участника.', +'password-login-forbidden' => 'Использование этого имени участника и пароля запрещено.', 'mailmypassword' => 'Получить новый пароль', 'passwordremindertitle' => 'Напоминание пароля участника {{grammar:genitive|{{SITENAME}}}}', 'passwordremindertext' => 'Кто-то (вероятно, вы, с IP-адреса $1) запросил создать @@ -754,6 +763,9 @@ $2', 'loginlanguagelabel' => 'Язык: $1', 'suspicious-userlogout' => 'Ваш запрос на завершение сеанса отклонён, так как он похож на запрос, отправленный некорректным браузером или кэширующим прокси.', +# E-mail sending +'php-mail-error-unknown' => 'Неизвестная ошибка в PHP-функции mail()', + # Password reset dialog 'resetpass' => 'Изменение пароля', 'resetpass_announce' => 'Вы представились с помощью временного пароля, полученного по электронной почте. Для завершения входа в систему, вы должны установить новый пароль.', @@ -804,10 +816,11 @@ $2', 'showdiff' => 'Внесённые изменения', 'anoneditwarning' => "'''Внимание.''' Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.", +'anonpreviewwarning' => "''Вы не представились системе. Сохранение приведёт к записи вашего IP-адреса в историю изменений страницы.''", 'missingsummary' => "'''Напоминание.''' Вы не дали краткого описания изменений. При повторном нажатии на кнопку «{{int:savearticle}}», ваши изменения будут сохранены без комментария.", 'missingcommenttext' => 'Пожалуйста, введите ниже ваше сообщение.', -'missingcommentheader' => "'''Напоминание:''' Вы не указали заголовок комментария. -При повторном нажатии на кнопку сохранения, ваша правка будет записана без заголовка.", +'missingcommentheader' => "'''Напоминание.''' Вы не указали тему/заголовок для этого комментария. +При повторном нажатии на кнопку «{{int:savearticle}}», ваша правка будет записана без заголовка.", 'summary-preview' => 'Описание будет:', 'subject-preview' => 'Заголовок будет:', 'blockedtitle' => 'Участник заблокирован', @@ -879,7 +892,11 @@ $2', 'userjsyoucanpreview' => "'''Подсказка.''' Нажмите кнопку «{{int:showpreview}}», чтобы проверить ваш новый JS-файл перед сохранением.", 'usercsspreview' => "'''Помните, что это только предварительный просмотр вашего CSS-файла, он ещё не сохранён!'''", 'userjspreview' => "'''Помните, что это только предварительный просмотр вашего javascript-файла, он ещё не сохранён!'''", -'userinvalidcssjstitle' => "'''Внимание:''' тема оформления «$1» не найдена. Помните, что пользовательские страницы .css и .js должны иметь название, состоящее только из строчных букв, например «{{ns:user}}:Некто/monobook.css», а не «{{ns:user}}:Некто/Monobook.css».", +'sitecsspreview' => "'''Помните, что вы только предварительно просматриваете этот CSS.''' +'''Он ещё не сохранён!'''", +'sitejspreview' => "'''Помните, что вы только предварительно просматриваете этот JavaScript-код.''' +'''Он ещё не сохранён!'''", +'userinvalidcssjstitle' => "'''Внимание:''' тема оформления «$1» не найдена. Помните, что пользовательские страницы .css и .js должны иметь название, состоящее только из строчных букв, например «{{ns:user}}:Некто/vector.css», а не «{{ns:user}}:Некто/Vector.css».", 'updated' => '(Обновлена)', 'note' => "'''Примечание:'''", 'previewnote' => "'''Это только предварительный просмотр, текст ещё не записан!'''", @@ -920,9 +937,6 @@ $2', Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
    Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. $1). '''НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!'''", -'longpagewarning' => "'''ПРЕДУПРЕЖДЕНИЕ: Длина этой страницы составляет $1 килобайт. -Страницы, размер которых приближается к 32 КБ или превышает это значение, могут неверно отображаться в некоторых браузерах. -Пожалуйста, рассмотрите вариант разбиения страницы на меньшие части.'''", 'longpageerror' => "'''ОШИБКА: записываемый вами текст имеет размер $1 килобайт, что больше, чем установленный предел $2 килобайт. Страница не может быть сохранена.'''", 'readonlywarning' => "'''ПРЕДУПРЕЖДЕНИЕ. База данных заблокирована в связи с процедурами обслуживания, поэтому вы не можете записать ваши изменения прямо сейчас. Возможно, вам следует сохранить текст в файл, чтобы воспользоваться этим текстом позже.''' @@ -1099,6 +1113,8 @@ $1", 'logdelete-failure' => "'''Видимость журнала не установлена:''' $1", 'revdel-restore' => 'изменить видимость', +'revdel-restore-deleted' => 'удалённые версии', +'revdel-restore-visible' => 'видимые версии', 'pagehist' => 'История страницы', 'deletedhist' => 'История удалений', 'revdelete-content' => 'содержимое', @@ -1166,11 +1182,13 @@ $1", # Diffs 'history-title' => '$1 — история изменений', 'difference' => '(Различия между версиями)', +'difference-multipage' => '(Различия между страницами)', 'lineno' => 'Строка $1:', 'compareselectedversions' => 'Сравнить выбранные версии', 'showhideselectedversions' => 'Показать/скрыть выбранные версии', 'editundo' => 'отменить', -'diff-multi' => '({{PLURAL:$1|$1 промежуточная версия не показана|$1 промежуточные версии не показаны|$1 промежуточных версий не показаны.}})', +'diff-multi' => '({{PLURAL:$1|не показана $1 промежуточная версия|не показаны $1 промежуточные версии|не показаны $1 промежуточных версий}} {{PLURAL:$2|$2 участника|$2 участников|$2 участников}})', +'diff-multi-manyusers' => '({{PLURAL:$1|не показана $1 промежуточная версия|не показаны $1 промежуточные версии|не показаны $1 промежуточных версий}}, сделанные более чем {{PLURAL:$2|$1 участником|$2 участниками}})', # Search results 'searchresults' => 'Результаты поиска', @@ -1205,6 +1223,7 @@ $1", 'searchprofile-everything-tooltip' => 'Поиск на всех страницах (включая страницы обсуждения)', 'searchprofile-advanced-tooltip' => 'Искать в заданных пространствах имён', 'search-result-size' => '$1 ({{PLURAL:$2|$2 слово|$2 слова|$2 слов}})', +'search-result-category-size' => '{{PLURAL:$1|$1 элемент|$1 элемента|$1 элементов}} ({{PLURAL:$2|$2 подкатегория|$2 подкатегории|$2 подкатегорий}}, {{PLURAL:$3|$3 файл|$3 файла|$3 файлов}})', 'search-result-score' => 'Релевантность: $1 %', 'search-redirect' => '(перенаправление $1)', 'search-section' => '(раздел $1)', @@ -1219,7 +1238,7 @@ $1", 'searcheverything-enable' => 'Поиск по всем пространствам имён', 'searchrelated' => 'связанный', 'searchall' => 'все', -'showingresults' => 'Ниже {{PLURAL:$1|показан|показаны|показаны}} $1 {{PLURAL:$1|результат|результата|результатов}}, начиная с № $2.', +'showingresults' => "Ниже показаны до {{PLURAL:$1|'''1''' результат |'''$1''' результаты}}, начиная с #'''$2'''.", 'showingresultsnum' => 'Ниже {{PLURAL:$3|показан|показаны|показаны}} $3 {{PLURAL:$3|результат|результата|результатов}}, начиная с № $2.', 'showingresultsheader' => "{{PLURAL:$5|Результат '''$1''' из '''$3'''|Результаты '''$1 — $2''' из '''$3'''}} для '''$4'''", 'nonefound' => "'''Замечание.''' По умолчанию поиск производится не во всех пространствах имён. Используйте приставку ''all:'', чтобы искать во всех пространствах имён (включая обсуждения участников, шаблоны и пр.), или укажите требуемое пространство имён.", @@ -1279,6 +1298,7 @@ $1", 'contextlines' => 'Количество показываемых строк для каждой найденной:', 'contextchars' => 'Количество символов контекста на строку:', 'stub-threshold' => 'Порог для определения оформления ссылок на заготовки (в байтах):', +'stub-threshold-disabled' => 'Отключён', 'recentchangesdays' => 'Количество дней, за которые показывать свежие правки:', 'recentchangesdays-max' => '(не более $1 {{PLURAL:$1|дня|дней|дней}})', 'recentchangescount' => 'Количество правок, отображаемое по умолчанию:', @@ -1312,6 +1332,7 @@ $1", 'prefs-files' => 'Файлы', 'prefs-custom-css' => 'Собственный CSS', 'prefs-custom-js' => 'Собственный JS', +'prefs-common-css-js' => 'Общие CSS/JS для всех тем оформления:', 'prefs-reset-intro' => 'Эта страница может быть использована для сброса ваших настроек на настройки по умолчанию. Подтвердив данное действие, вы не сможете его отменить.', 'prefs-emailconfirm-label' => 'Подтверждение электронной почты:', @@ -1351,9 +1372,15 @@ $1", 'prefs-advancedrendering' => 'Расширенные настройки', 'prefs-advancedsearchoptions' => 'Расширенные настройки', 'prefs-advancedwatchlist' => 'Расширенные настройки', -'prefs-display' => 'Настройки отображения', +'prefs-displayrc' => 'Настройки отображения', +'prefs-displaysearchoptions' => 'Настройки отображения', +'prefs-displaywatchlist' => 'Настройки отображения', 'prefs-diffs' => 'Разница версий', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Выглядит корректно', +'email-address-validity-invalid' => 'Требуется корректный адрес!', + # User rights 'userrights' => 'Управление правами участника', 'userrights-lookup-user' => 'Управление группами участников', @@ -1437,6 +1464,7 @@ $1", 'right-hideuser' => 'запрет имени участника и его сокрытие', 'right-ipblock-exempt' => 'обход блокировок по IP, автоблокировок и блокировок диапазонов', 'right-proxyunbannable' => 'обход автоматической блокировки прокси', +'right-unblockself' => 'разблокирование себя самого', 'right-protect' => 'изменение уровня защиты страниц и правка защищённых страниц', 'right-editprotected' => 'правка защищённых страниц (без каскадной защиты)', 'right-editinterface' => 'изменение пользовательского интерфейса', @@ -1459,7 +1487,6 @@ $1", 'right-siteadmin' => 'блокировка и разблокировка базы данных', 'right-reset-passwords' => 'сбрасывание паролей других участников', 'right-override-export-depth' => 'экспортирование страниц, включая связанные страницы с глубиной до 5', -'right-versiondetail' => 'просмотр расширенной информации о версии программного обеспечения', 'right-sendemail' => 'отправлять электронную почту другим участникам', # User rights log @@ -1510,14 +1537,9 @@ $1", 'recentchanges-legend' => 'Настройки свежих правок', 'recentchangestext' => 'Ниже в хронологическом порядке перечислены последние изменения на страницах {{grammar:genitive|{{SITENAME}}}}.', 'recentchanges-feed-description' => 'Отслеживать последние изменения в вики в этом потоке.', -'recentchanges-label-legend' => 'Легенда: $1.', -'recentchanges-legend-newpage' => '$1 — новая страница', 'recentchanges-label-newpage' => 'Этой правкой была создана новая страница.', -'recentchanges-legend-minor' => '$1 — малое изменение', 'recentchanges-label-minor' => 'Это малозначимое изменение', -'recentchanges-legend-bot' => '$1 — правка бота', 'recentchanges-label-bot' => 'Эта правка сделана ботом', -'recentchanges-legend-unpatrolled' => '$1 — неотпатрулированная правка', 'recentchanges-label-unpatrolled' => 'Эту правку ещё не отпатрулировали', 'rcnote' => "{{PLURAL:$1|Последнее '''$1''' изменение|Последние '''$1''' изменения|Последние '''$1''' изменений}} за '''$2''' {{PLURAL:$2|день|дня|дней}}, на момент времени $5 $4.", 'rcnotefrom' => 'Ниже перечислены изменения с $2 (по $1).', @@ -1566,6 +1588,9 @@ $1", 'upload_directory_missing' => 'Директория для загрузок ($1) отсутствует и не может быть создана веб-сервером.', 'upload_directory_read_only' => 'Веб-сервер не имеет прав записи в папку ($1), в которой предполагается хранить загружаемые файлы.', 'uploaderror' => 'Ошибка загрузки файла', +'upload-recreate-warning' => "'''Внимание. Файл с таким именем был удален или переименован.'' + +Журнал удалений и переименований для этой странице приведён ниже:", 'uploadtext' => "Используя эту форму вы можете загрузить на сервер файлы. Чтобы просмотреть ранее загруженные файлы, обратитесь к [[Special:FileList|списку загруженных файлов]]. Загрузка файлов также записывается в [[Special:Log/upload|журнал загрузок]], удаления файлов записываются в [[Special:Log/delete|журнал удалений]]. @@ -1600,6 +1625,17 @@ $1", 'filetype-banned-type' => "'''\".\$1\"''' — запрещённый тип файла. {{PLURAL:\$3|Разрешённым типом файла является|Разрешённые типы файлов:}} \$2.", 'filetype-missing' => 'Отсутствует расширение у файла (например, «.jpg»).', +'empty-file' => 'Отправленный вами файл пуст.', +'file-too-large' => 'Отправленный вами файл слишком велик.', +'filename-tooshort' => 'Слишком короткое имя файла.', +'filetype-banned' => 'Этот тип файлов запрещён.', +'verification-error' => 'Этот файл не прошёл процедуру проверки.', +'hookaborted' => 'Предлагаемое вами изменение было отменено в обработчике расширения.', +'illegal-filename' => 'Недопустимое имя файла.', +'overwrite' => 'Не допускается замена существующего файла.', +'unknown-error' => 'Неизвестная ошибка.', +'tmp-create-error' => 'Невозможно создать временный файл.', +'tmp-write-error' => 'Ошибка записи во временный файл.', 'large-file' => 'Рекомендуется использовать файлы, размер которых не превышает $1 байт (размер загруженного файла составляет $2 байт).', 'largefileserver' => 'Размер файла превышает максимально разрешённый.', 'emptyfile' => 'Загруженный вами файл вероятно пустой. Возможно, это произошло из-за ошибки при наборе имени файла. Пожалуйста, проверьте, действительно ли вы хотите загрузить этот файл.', @@ -1625,13 +1661,14 @@ $1", Если вы всё-таки хотите загрузить этот файл, пожалуйста, вернитесь назад и измените имя файла. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Этот файл является дубликатом {{PLURAL:$1|следующего файла|следующих файлов}}:', 'file-deleted-duplicate' => 'Подобный файл ([[:$1]]) уже удалялся. Пожалуйста, ознакомьтесь с историей удаления файла, прежде чем загружать его снова.', -'successfulupload' => 'Загрузка успешно завершена', 'uploadwarning' => 'Предупреждение', 'uploadwarning-text' => 'Пожалуйста, измените представленное ниже описание файла и попробуйте ещё раз.', 'savefile' => 'Записать файл', 'uploadedimage' => 'загрузил «[[$1]]»', 'overwroteimage' => 'загружена новая версия «[[$1]]»', 'uploaddisabled' => 'Загрузка запрещена', +'copyuploaddisabled' => 'Загрузка по URL отключена.', +'uploadfromurl-queued' => 'Ваша загрузка поставлена в очередь.', 'uploaddisabledtext' => 'Загрузка файлов отключена.', 'php-uploaddisabledtext' => 'Загрузка файлов отключена в настройках PHP. Пожалуйста, проверьте значение свойства file_uploads.', 'uploadscripted' => 'Файл содержит HTML-код или скрипт, который может быть ошибочно обработан браузером.', @@ -1664,6 +1701,14 @@ JD # Jenoptik MGP # Pentax PICT # различные #
    ', +'upload-success-subj' => 'Загрузка успешно завершена', +'upload-success-msg' => 'Ваша загрузка [$2] прошла успешно. Вы можете посмотреть результат здесь: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Проблема загрузки', +'upload-failure-msg' => 'Обнаружена проблема с вашей загрузкой из [$2]: + +$1', +'upload-warning-subj' => 'Предупреждение при загрузке', +'upload-warning-msg' => 'При загрузке с [$2] произошла ошибка. Для исправления ошибки вернитесь на [[Special:Upload/stash/$1|upload form]].', 'upload-proto-error' => 'Неправильный протокол', 'upload-proto-error-text' => 'Для удалённой загрузки требуется адрес, начинающийся с http:// или ftp://.', @@ -1725,6 +1770,7 @@ PICT # различные 'listfiles_search_for' => 'Поиск по имени файла:', 'imgfile' => 'файл', 'listfiles' => 'Список файлов', +'listfiles_thumb' => 'Миниатюра', 'listfiles_date' => 'Дата', 'listfiles_name' => 'Имя файла', 'listfiles_user' => 'Участник', @@ -1839,8 +1885,8 @@ PICT # различные 'statistics-edits' => 'Число правок с момента установки {{grammar:genitive|{{SITENAME}}}}', 'statistics-edits-average' => 'Среднее число правок на страницу', 'statistics-views-total' => 'Всего просмотров', +'statistics-views-total-desc' => 'Не учитываются просмотры несуществующих и служебных страниц.', 'statistics-views-peredit' => 'Просмотров на правку', -'statistics-jobqueue' => 'Величина [http://www.mediawiki.org/wiki/Manual:Job_queue очереди заданий]', 'statistics-users' => 'Зарегистрированные [[Special:ListUsers|участники]]', 'statistics-users-active' => 'Активные участники', 'statistics-users-active-desc' => 'Участники, совершившие какое-либо действие за {{PLURAL:$1|последний $1 день|последние $1 дня|последние $1 дней}}', @@ -1855,7 +1901,7 @@ PICT # различные 'doubleredirects' => 'Двойные перенаправления', 'doubleredirectstext' => 'На этой странице представлен список перенаправлений на другие перенаправления. Каждая строка содержит ссылки на первое и второе перенаправления, а также целевую страницу второго перенаправления, в которой обычно указывается название страницы, куда должно ссылаться первое перенаправление. -Зачёркнутые записи были исправлены.', +Зачёркнутые записи были исправлены.', 'double-redirect-fixed-move' => 'Страница [[$1]] была переименована, сейчас она перенаправляет на [[$2]]', 'double-redirect-fixer' => 'Исправитель перенаправлений', @@ -1878,6 +1924,8 @@ PICT # различные 'nmembers' => '$1 {{PLURAL:$1|объект|объекта|объектов}}', 'nrevisions' => '$1 {{PLURAL:$1|версия|версии|версий}}', 'nviews' => '$1 {{PLURAL:$1|просмотр|просмотра|просмотров}}', +'nimagelinks' => 'Используется на $1 {{PLURAL:$1|странице|страницах|страницах}}', +'ntransclusions' => 'используется на $1 {{PLURAL:$1|странице|страницах|страницах}}', 'specialpage-empty' => 'Запрос не дал результатов.', 'lonelypages' => 'Страницы-сироты', 'lonelypagestext' => 'На следующие страницы нет ссылок с других страниц {{grammar:genitive|{{SITENAME}}}}, и они не включаются в другие страницы.', @@ -2034,34 +2082,40 @@ PICT # различные 'listgrouprights-removegroup-self-all' => 'Может удалять все группы со своей учётной записи', # E-mail user -'mailnologin' => 'Адрес для отправки отсутствует', -'mailnologintext' => 'Вы должны [[Special:UserLogin|представиться системе]] и иметь действительный адрес электронной почты в ваших [[Special:Preferences|настройках]], чтобы иметь возможность отправлять электронную почту другим участникам.', -'emailuser' => 'Письмо участнику', -'emailpage' => 'Письмо участнику', -'emailpagetext' => 'С помощью данной формы можно отправить сообщение на адрес электронной почты этого участника. +'mailnologin' => 'Адрес для отправки отсутствует', +'mailnologintext' => 'Вы должны [[Special:UserLogin|представиться системе]] и иметь действительный адрес электронной почты в ваших [[Special:Preferences|настройках]], чтобы иметь возможность отправлять электронную почту другим участникам.', +'emailuser' => 'Письмо участнику', +'emailpage' => 'Письмо участнику', +'emailpagetext' => 'С помощью данной формы можно отправить сообщение на адрес электронной почты этого участника. В качестве обратного адреса будет указан тот адрес, который вы указали в [[Special:Preferences|своих настройках]], таким образом получатель будет иметь возможность ответить непосредственно вам.', -'usermailererror' => 'При отправке сообщения электронной почты произошла ошибка:', -'defemailsubject' => 'Письмо из {{grammar:genitive|{{SITENAME}}}}', -'noemailtitle' => 'Адрес электронной почты отсутствует', -'noemailtext' => 'Этот участник не указал действительный адрес электронной почты.', -'nowikiemailtitle' => 'Нет разрешения отправлять письма', -'nowikiemailtext' => 'Этот участник указал, что не желает получать письма от других участников.', -'email-legend' => 'Отправить письмо другому участнику {{grammar:genitive|{{SITENAME}}}}', -'emailfrom' => 'От кого:', -'emailto' => 'Кому:', -'emailsubject' => 'Тема:', -'emailmessage' => 'Сообщение:', -'emailsend' => 'Отправить', -'emailccme' => 'Отправить мне копию письма.', -'emailccsubject' => 'Копия вашего сообщения для $1: $2', -'emailsent' => 'Письмо отправлено', -'emailsenttext' => 'Ваше электронное сообщение отправлено.', -'emailuserfooter' => 'Это письмо было отправлено участнику $2 от участника $1 с помощью функции «Отправить письмо» проекта {{SITENAME}}.', +'usermailererror' => 'При отправке сообщения электронной почты произошла ошибка:', +'defemailsubject' => 'Письмо из {{grammar:genitive|{{SITENAME}}}}', +'usermaildisabled' => 'Электронная почта участника отключена', +'usermaildisabledtext' => 'Вы не можете отправлять электронные письма другим участникам этой вики', +'noemailtitle' => 'Адрес электронной почты отсутствует', +'noemailtext' => 'Этот участник не указал действительный адрес электронной почты.', +'nowikiemailtitle' => 'Нет разрешения отправлять письма', +'nowikiemailtext' => 'Этот участник указал, что не желает получать письма от других участников.', +'email-legend' => 'Отправить письмо другому участнику {{grammar:genitive|{{SITENAME}}}}', +'emailfrom' => 'От кого:', +'emailto' => 'Кому:', +'emailsubject' => 'Тема:', +'emailmessage' => 'Сообщение:', +'emailsend' => 'Отправить', +'emailccme' => 'Отправить мне копию письма.', +'emailccsubject' => 'Копия вашего сообщения для $1: $2', +'emailsent' => 'Письмо отправлено', +'emailsenttext' => 'Ваше электронное сообщение отправлено.', +'emailuserfooter' => 'Это письмо было отправлено участнику $2 от участника $1 с помощью функции «Отправить письмо» проекта {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Оставить системное сообщение.', +'usermessage-editor' => 'Системная доставка', # Watchlist 'watchlist' => 'Список наблюдения', 'mywatchlist' => 'Список наблюдения', -'watchlistfor' => "(участника '''$1''')", +'watchlistfor2' => 'Для $1 $2', 'nowatchlist' => 'Ваш список наблюдения пуст.', 'watchlistanontext' => 'Вы должны $1, чтобы просмотреть или отредактировать список наблюдения.', 'watchnologin' => 'Нужно представиться системе', @@ -2121,7 +2175,10 @@ $NEWPAGE Система оповещения {{grammar:genitive|{{SITENAME}}}} -- -Изменить настройки вашего списка наблюдения +Изменение настройки уведомлений +{{fullurl:{{#special:Preferences}}}} + +Изменение настройки вашего списка наблюдения {{fullurl:{{#special:Watchlist}}/edit}} Удалить страницы из вашего списка наблюдения @@ -2181,7 +2238,10 @@ $UNWATCHURL 'revertpage' => 'Правки [[Special:Contributions/$2|$2]] ([[User talk:$2|обсуждение]]) откачены к версии [[User:$1|$1]]', 'revertpage-nouser' => 'Правки (имя участника удалено) откачены к версии [[User:$1|$1]]', 'rollback-success' => 'Откачены правки $1; возврат к версии $2.', -'sessionfailure' => 'Похоже, возникли проблемы с текущим сеансом работы; + +# Edit tokens +'sessionfailure-title' => 'Ошибка сеанса', +'sessionfailure' => 'Похоже, возникли проблемы с текущим сеансом работы; это действие было отменено в целях предотвращения «захвата сеанса». Пожалуйста, нажмите кнопку «Назад» и перезагрузите страницу, с которой вы пришли.', @@ -2310,18 +2370,22 @@ $1', 'month' => 'С месяца (и ранее):', 'year' => 'С года (и ранее):', -'sp-contributions-newbies' => 'Показать только вклад, сделанный с новых учётных записей', -'sp-contributions-newbies-sub' => 'С новых учётных записей', -'sp-contributions-newbies-title' => 'Вклад с недавно созданных учётных записей', -'sp-contributions-blocklog' => 'блокировки', -'sp-contributions-deleted' => 'удалённые правки участника', -'sp-contributions-logs' => 'журналы', -'sp-contributions-talk' => 'обсуждение', -'sp-contributions-userrights' => 'управление правами участника', -'sp-contributions-blocked-notice' => 'Этот участник в данный момент заблокирован. Ниже приведена последняя запись из журнала блокировок:', -'sp-contributions-search' => 'Поиск вклада', -'sp-contributions-username' => 'IP-адрес или имя участника:', -'sp-contributions-submit' => 'Найти', +'sp-contributions-newbies' => 'Показать только вклад, сделанный с новых учётных записей', +'sp-contributions-newbies-sub' => 'С новых учётных записей', +'sp-contributions-newbies-title' => 'Вклад с недавно созданных учётных записей', +'sp-contributions-blocklog' => 'блокировки', +'sp-contributions-deleted' => 'удалённые правки участника', +'sp-contributions-uploads' => 'загрузки', +'sp-contributions-logs' => 'журналы', +'sp-contributions-talk' => 'обсуждение', +'sp-contributions-userrights' => 'управление правами участника', +'sp-contributions-blocked-notice' => 'Этот участник в данный момент заблокирован. Ниже приведена последняя запись из журнала блокировок:', +'sp-contributions-blocked-notice-anon' => 'Этот IP-адрес в данный момент заблокирован. +Ниже приведена последняя запись из журнала блокировок:', +'sp-contributions-search' => 'Поиск вклада', +'sp-contributions-username' => 'IP-адрес или имя участника:', +'sp-contributions-toponly' => 'Показывать только правки, являющиеся последними версиями', +'sp-contributions-submit' => 'Найти', # What links here 'whatlinkshere' => 'Ссылки сюда', @@ -2382,7 +2446,6 @@ $1', 'ipb-edit-dropdown' => 'Править список причин', 'ipb-unblock-addr' => 'Разблокировать $1', 'ipb-unblock' => 'Разблокировать участника или IP-адрес', -'ipb-blocklist-addr' => 'Действующие блокировки для $1', 'ipb-blocklist' => 'Показать действующие блокировки', 'ipb-blocklist-contribs' => 'Вклад участника $1', 'unblockip' => 'Разблокировать IP-адрес', @@ -2453,6 +2516,8 @@ $1', 'sorbs_create_account_reason' => 'Ваш IP-адрес числится как открытый прокси в DNSBL. Вы не можете создать учётную запись.', 'cant-block-while-blocked' => 'Вы не можете блокировать других участников, пока вы сами заблокированы.', 'cant-see-hidden-user' => 'Участник, которого вы пытаетесь заблокировать, уже заблокирован и скрыт. Поскольку у вас нет разрешения на работу по сокрытию участников, вы не можете просмотреть или изменить данную блокировку.', +'ipbblocked' => 'Вы не можете блокировать или разблокировать других участников, так как вы сами заблокированы', +'ipbnounblockself' => 'Вы не можете разблокировать самого себя', # Developer tools 'lockdb' => 'Сделать базу данных доступной только для чтения', @@ -2490,6 +2555,17 @@ $1', Обратите внимание, что страница '''не будет''' переименована, если страница с новым названием уже существует, кроме случаев, если она является перенаправлением или пуста и не имеет истории правок. Это означает, что вы можете переименовать страницу обратно в то название, которое у него только что было, если вы переименовали по ошибке, но вы не можете случайно затереть существующую страницу. +'''ПРЕДУПРЕЖДЕНИЕ!''' +Переименование может привести к масштабным и неожиданным изменениям для ''популярных'' страниц. +Пожалуйста, прежде чем вы продолжите, убедитесь, что вы понимаете все возможные последствия.", +'movepagetext-noredirectfixer' => "Воспользовавшись формой ниже, вы переименуете страницу, одновременно переместив на новое место её журнал изменений. +Старое название станет перенаправлением на новое название. +Пожалуйста, проверьте наличие [[Special:DoubleRedirects|двойных]] и [[Special:BrokenRedirects|разорванных перенаправлений]]. +Вы отвечаете за то, что бы ссылки продолжали и далее указывают туда, куда предполагалось. + +Обратите внимание, что страница '''не будет''' переименована, если страница с новым названием уже существует, кроме случаев, если она является перенаправлением или пуста и не имеет истории правок. +Это означает, что вы можете переименовать страницу обратно в то название, которое у него только что было, если вы переименовали по ошибке, но вы не можете случайно затереть существующую страницу. + '''ПРЕДУПРЕЖДЕНИЕ!''' Переименование может привести к масштабным и неожиданным изменениям для ''популярных'' страниц. Пожалуйста, прежде чем вы продолжите, убедитесь, что вы понимаете все возможные последствия.", @@ -2550,6 +2626,7 @@ $1', 'immobile-source-page' => 'Эту страницу нельзя переименовывать.', 'immobile-target-page' => 'Нельзя присвоить странице это имя.', 'imagenocrossnamespace' => 'Невозможно дать файлу имя из другого пространства имён', +'nonfile-cannot-move-to-file' => 'Невозможно переименовывать страницы в файлы', 'imagetypemismatch' => 'Новое расширение файла не соответствует его типу', 'imageinvalidfilename' => 'Целевое имя файла ошибочно', 'fix-double-redirects' => 'Исправить перенаправления, указывающие на прежнее название', @@ -2628,6 +2705,7 @@ $1', 'importstart' => 'Импортирование страниц…', 'import-revision-count' => '$1 {{PLURAL:$1|версия|версии|версий}}', 'importnopages' => 'Нет страниц для импортирования.', +'imported-log-entries' => '{{PLURAL:$1|Импортирована $1 запись журнала|Импортировано $1 записи журнала|Импортировано $1 записей журнала}}.', 'importfailed' => 'Не удалось импортировать: $1', 'importunknownsource' => 'Неизвестный тип импортируемой страницы', 'importcantopen' => 'Невозможно открыть импортируемый файл', @@ -2720,6 +2798,8 @@ $1', 'tooltip-upload' => 'Начать загрузку', 'tooltip-rollback' => 'Одним нажатием убрать изменения, сделанные последним редактором', 'tooltip-undo' => 'Убрать внесённую правку и показать предпросмотр, с возможностью указать причину отмены', +'tooltip-preferences-save' => 'Сохранить настройки', +'tooltip-summary' => 'Введите краткое описание', # Stylesheets 'common.css' => '/** Размещённый здесь CSS будет применяться ко всем темам оформления */', @@ -2837,14 +2917,17 @@ $1', 'thumbsize' => 'Размер уменьшенной версии изображения:', 'widthheight' => '$1 × $2', 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|страница|страницы|страниц}}', -'file-info' => '(размер файла: $1, MIME-тип: $2)', -'file-info-size' => '($1 × $2 {{PLURAL:$2|пиксел|пиксела|пикселов}}, размер файла: $3, MIME-тип: $4)', +'file-info' => 'размер файла: $1, MIME-тип: $2', +'file-info-size' => '$1 × $2 пикселов, размер файла: $3, MIME-тип: $4', 'file-nohires' => 'Нет версии с большим разрешением.', -'svg-long-desc' => '(SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксел|пиксела|пикселов}}, размер файла: $3)', +'svg-long-desc' => 'SVG-файл, номинально $1 × $2 пикселов, размер файла: $3', 'show-big-image' => 'Изображение в более высоком разрешении', 'show-big-image-thumb' => 'Размер при предпросмотре: $1 × $2 {{PLURAL:$2|пиксел|пиксела|пикселов}}', 'file-info-gif-looped' => 'закольцованный', 'file-info-gif-frames' => '$1 {{PLURAL:$1|фрейм|фрейма|фреймов}}', +'file-info-png-looped' => 'закольцованный', +'file-info-png-repeat' => 'проигрывается $1 {{PLURAL:$1|раз|раза|раз}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|кадр|кадра|кадров}}', # Special:NewFiles 'newimages' => 'Галерея новых файлов', @@ -3005,6 +3088,7 @@ $1', 'exif-gpsareainformation' => 'Название области GPS', 'exif-gpsdatestamp' => 'Дата', 'exif-gpsdifferential' => 'Дифференциальная поправка', +'exif-objectname' => 'Краткое название', # EXIF attributes 'exif-compression-1' => 'Несжатый', @@ -3167,29 +3251,29 @@ $1', 'limitall' => 'все', # E-mail address confirmation -'confirmemail' => 'Подтверждение адреса электронной почты', -'confirmemail_noemail' => 'Вы не задали адрес электронной почты в своих [[Special:Preferences|настройках]], либо он некорректен.', -'confirmemail_text' => 'Вики-движок требует подтверждения адреса электронной почты перед тем, как начать с ним работать. +'confirmemail' => 'Подтверждение адреса электронной почты', +'confirmemail_noemail' => 'Вы не задали адрес электронной почты в своих [[Special:Preferences|настройках]], либо он некорректен.', +'confirmemail_text' => 'Вики-движок требует подтверждения адреса электронной почты перед тем, как начать с ним работать. Нажмите на кнопку, чтобы на указанный адрес было отправлено письмо, содержащее ссылку на специальную страницу, после открытия которой в браузере адрес электронной почты будет считаться подтверждённым.', -'confirmemail_pending' => 'Письмо с кодом подтверждения уже было отправлено. +'confirmemail_pending' => 'Письмо с кодом подтверждения уже было отправлено. Если вы недавно создали учётную запись, то, вероятно, вам следует подождать несколько минут, пока письмо придёт, перед тем, как запросить код ещё раз.', -'confirmemail_send' => 'Отправить письмо с запросом на подтверждение', -'confirmemail_sent' => 'Письмо с запросом на подтверждение отправлено.', -'confirmemail_oncreate' => 'Письмо с кодом подтверждения было отправлено на указанный вами почтовый ящик. +'confirmemail_send' => 'Отправить письмо с запросом на подтверждение', +'confirmemail_sent' => 'Письмо с запросом на подтверждение отправлено.', +'confirmemail_oncreate' => 'Письмо с кодом подтверждения было отправлено на указанный вами почтовый ящик. Данный код не требуется для входа в систему, однако вы должны указать его, прежде чем будет разрешено использование возможностей электронной почты в этом проекте.', -'confirmemail_sendfailed' => '{{SITENAME}} не может отправить письмо с запросом на подтверждение. +'confirmemail_sendfailed' => '{{SITENAME}} не может отправить письмо с запросом на подтверждение. Пожалуйста, проверьте правильность адреса электронной почты. Ответ сервера: $1', -'confirmemail_invalid' => 'Неправильный код подтверждения или срок действия кода истёк.', -'confirmemail_needlogin' => 'Вы должны $1 для подтверждения вашего адреса электронной почты.', -'confirmemail_success' => 'Ваш адрес электронной почты подтверждён.', -'confirmemail_loggedin' => 'Ваш адрес электронной почты подтверждён.', -'confirmemail_error' => 'Во время процедуры подтверждения адреса электронной почты произошла ошибка.', -'confirmemail_subject' => '{{SITENAME}}:Запрос на подтверждение адреса электронной почты', -'confirmemail_body' => 'Кто-то (возможно вы) с IP-адресом $1 зарегистрировал +'confirmemail_invalid' => 'Неправильный код подтверждения или срок действия кода истёк.', +'confirmemail_needlogin' => 'Вы должны $1 для подтверждения вашего адреса электронной почты.', +'confirmemail_success' => 'Ваш адрес электронной почты подтверждён.', +'confirmemail_loggedin' => 'Ваш адрес электронной почты подтверждён.', +'confirmemail_error' => 'Во время процедуры подтверждения адреса электронной почты произошла ошибка.', +'confirmemail_subject' => '{{SITENAME}}:Запрос на подтверждение адреса электронной почты', +'confirmemail_body' => 'Кто-то (возможно вы) с IP-адресом $1 зарегистрировал на сервере проекта {{SITENAME}} учётную запись «$2», указав этот адрес электронной почты. @@ -3205,8 +3289,36 @@ $3 $5 Код подтверждения действителен до $4.', -'confirmemail_invalidated' => 'Подтверждение адреса электронной почты отменено', -'invalidateemail' => 'Отменить подтверждение адреса эл. почты', +'confirmemail_body_changed' => 'Кто-то (возможно вы) с IP-адресом $1 +указал данный адрес электронной почты в качестве нового для учётной записи «$2» в проекте {{SITENAME}}. + +Чтобы подтвердить, что эта учётная запись действительно принадлежит вам, +и включить возможность отправки писем с сайта {{SITENAME}}, откройте приведённую ниже ссылку в браузере. + +$3 + +Если данная учётная запись *не* относится к вам, то перейдите по следующей ссылке, +чтобы отменить подтверждение адреса + +$5 + +Код подтверждения действителен до $4.', +'confirmemail_body_set' => 'Кто-то (возможно вы) с IP-адресом $1 +указал данный адрес электронной почты для учётной записи «$2» в проекте {{SITENAME}}. + +Чтобы подтвердить, что эта учётная запись действительно принадлежит вам, +и включить возможность отправки писем с сайта {{SITENAME}}, откройте приведённую ниже ссылку в браузере. + +$3 + +Если данная учётная запись *не* относится к вам, то перейдите по следующей ссылке, +чтобы отменить подтверждение адреса + +$5 + +Код подтверждения действителен до $4.', +'confirmemail_invalidated' => 'Подтверждение адреса электронной почты отменено', +'invalidateemail' => 'Отменить подтверждение адреса эл. почты', # Scary transclusion 'scarytranscludedisabled' => '[«Interwiki transcluding» отключён]', @@ -3248,6 +3360,7 @@ $1', 'table_pager_first' => 'Первая страница', 'table_pager_last' => 'Последняя страница', 'table_pager_limit' => 'Показать $1 элементов на странице', +'table_pager_limit_label' => 'Записей на страницу:', 'table_pager_limit_submit' => 'Выполнить', 'table_pager_empty' => 'Не найдено', @@ -3352,6 +3465,7 @@ $1', 'version-specialpages' => 'Служебные страницы', 'version-parserhooks' => 'Перехватчики синтаксического анализатора', 'version-variables' => 'Переменные', +'version-skins' => 'Темы оформления', 'version-other' => 'Иное', 'version-mediahandlers' => 'Обработчики медиа', 'version-hooks' => 'Перехватчики', @@ -3363,6 +3477,13 @@ $1', 'version-hook-subscribedby' => 'Подписан на', 'version-version' => '(Версия $1)', 'version-license' => 'Лицензия', +'version-poweredby-credits' => "Эта вики работает на движке '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'другие', +'version-license-info' => 'MediaWiki является свободным программным обеспечением, которое вы можете распространять и/или изменять в соответствии с условиями лицензии GNU General Public License, опубликованной фондом свободного программного обеспечения; второй версии, либо любой более поздней версии. + +MediaWiki распространяется в надежде, что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, даже без подразумеваемых гарантий КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. См. лицензию GNU General Public License для более подробной информации. + +Вы должны были получить [{{SERVER}}{{SCRIPTPATH}}/COPYING копию GNU General Public License] вместе с этой программой, если нет, то напишите Free Software Foundation, Inc., по адресу: 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA или [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html прочтите её онлайн].', 'version-software' => 'Установленное программное обеспечение', 'version-software-product' => 'Продукт', 'version-software-version' => 'Версия', @@ -3432,6 +3553,15 @@ $1', 'tags-edit' => 'править', 'tags-hitcount' => '$1 {{PLURAL:$1|изменение|изменения|изменений}}', +# Special:ComparePages +'comparepages' => 'Сравнение страниц', +'compare-selector' => 'Сравнение версий страниц', +'compare-page1' => 'Первая страница', +'compare-page2' => 'Вторая страница', +'compare-rev1' => 'Первая версия', +'compare-rev2' => 'Вторая версия', +'compare-submit' => 'Сравнить', + # Database error messages 'dberr-header' => 'Эта вики испытывает затруднения', 'dberr-problems' => 'Извините! На данном сайте возникли технические трудности.', @@ -3448,8 +3578,13 @@ $1', 'htmlform-float-invalid' => 'Указанное вами значение не является числом.', 'htmlform-int-toolow' => 'Указанное вами значение ниже минимального — $1', 'htmlform-int-toohigh' => 'указанное вами значение выше максимального — $1', +'htmlform-required' => 'Это значение необходимо', 'htmlform-submit' => 'Отправить', 'htmlform-reset' => 'Отменить изменения', 'htmlform-selectorother-other' => 'Иное', +# SQLite database support +'sqlite-has-fts' => '$1 с поддержкой полнотекстового поиска', +'sqlite-no-fts' => '$1 без поддержки полнотекстового поиска', + ); diff --git a/languages/messages/MessagesRue.php b/languages/messages/MessagesRue.php index 1417987d..f59c3247 100644 --- a/languages/messages/MessagesRue.php +++ b/languages/messages/MessagesRue.php @@ -15,6 +15,25 @@ $fallback = 'uk'; +$namespaceNames = array( + NS_MEDIA => 'Медіа', + NS_SPECIAL => 'Шпеціална', + NS_TALK => 'Діскузіа', + NS_USER => 'Хоснователь', + NS_USER_TALK => 'Діскузіа_з_хоснователём', + NS_PROJECT_TALK => 'Діскузія_ку_{{grammar:3sg|$1}}', + NS_FILE => 'Файл', + NS_FILE_TALK => 'Діскузія_ку_файлу', + NS_MEDIAWIKI => 'MediaWiki', + NS_MEDIAWIKI_TALK => 'Дізкузія_ку_MediaWiki', + NS_TEMPLATE => 'Шаблона', + NS_TEMPLATE_TALK => 'Діскузія_ку_шаблонї', + NS_HELP => 'Поміч', + NS_HELP_TALK => 'Діскузія_ку_помочі', + NS_CATEGORY => 'Катеґорія', + NS_CATEGORY_TALK => 'Діскузія_ку_катеґорії', +); + $messages = array( # User preference toggles 'tog-underline' => 'Підкреслёвати одказы:', @@ -31,8 +50,7 @@ $messages = array( 'tog-editsection' => 'Поволити едітованя секції сторінкы через одказ [едіт.]', 'tog-editsectiononrightclick' => 'Поволити едітованя секції сторінкы через кликаня правов клапков мышкы на надписы сторінок (JavaScript)', 'tog-showtoc' => 'Вказовати обсяг (на сторінках з веце як трёма надписами)', -'tog-rememberpassword' => 'Запамятати моє приголошіня на тім компютері', -'tog-editwidth' => 'Росшырёвати поле едітованя на цілу образовку', +'tog-rememberpassword' => 'Запамятати моє приголошіня на тім переглядачу (максімално $1 {{PLURAL:$1|день|днів}})', 'tog-watchcreations' => 'Придавати сторінкы створены мнов до мого списку слїдованых', 'tog-watchdefault' => 'Придавати мнов едітованы сторінкы до списку слїдованых', 'tog-watchmoves' => 'Придавати переменованы сторінкы до мого списку слїдованых', @@ -177,31 +195,21 @@ $messages = array( 'faqpage' => 'Project:Часты звідованя', # Vector skin -'vector-action-addsection' => 'Придати тему', -'vector-action-delete' => 'Вымазати', -'vector-action-move' => 'Переменовати', -'vector-action-protect' => 'Хранити', -'vector-action-undelete' => 'Обновити', -'vector-action-unprotect' => 'Одомкнути', -'vector-namespace-category' => 'Катеґорія', -'vector-namespace-help' => 'Сторінка помочі', -'vector-namespace-image' => 'Файл', -'vector-namespace-main' => 'Сторінка', -'vector-namespace-media' => 'Медіа-сторінка', -'vector-namespace-mediawiki' => 'Ознам', -'vector-namespace-project' => 'Сторінка проєкту', -'vector-namespace-special' => 'Шпеціална сторінка', -'vector-namespace-talk' => 'Діскузія', -'vector-namespace-template' => 'Шаблона', -'vector-namespace-user' => 'Сторінка хоснователя', -'vector-view-create' => 'Вытворити', -'vector-view-edit' => 'Едітовати', -'vector-view-history' => 'Відїти історію', -'vector-view-view' => 'Чітати', -'vector-view-viewsource' => 'Відїти код', -'actions' => 'Дїї', -'namespaces' => 'Просторы назв', -'variants' => 'Варіанты', +'vector-action-addsection' => 'Придати тему', +'vector-action-delete' => 'Вымазати', +'vector-action-move' => 'Переменовати', +'vector-action-protect' => 'Хранити', +'vector-action-undelete' => 'Обновити', +'vector-action-unprotect' => 'Одомкнути', +'vector-simplesearch-preference' => 'Поволити росшырены пропозіції гляданя (лем взгляд Vector )', +'vector-view-create' => 'Створити', +'vector-view-edit' => 'Едітовати', +'vector-view-history' => 'Видїти історію', +'vector-view-view' => 'Чітати', +'vector-view-viewsource' => 'Видїти код', +'actions' => 'Дїї', +'namespaces' => 'Просторы назв', +'variants' => 'Варіанты', 'errorpagetitle' => 'Хыба', 'returnto' => 'Навернутя до сторінкы «$1».', @@ -240,14 +248,14 @@ $messages = array( 'talk' => 'Діскузія', 'views' => 'Перегляды', 'toolbox' => 'Інштрументы', -'userpage' => 'Відїти сторінку хоснователя', -'projectpage' => 'Відїти сторінку проєкту', -'imagepage' => 'Відїти сторінку файлу', -'mediawikipage' => 'Відїти сторінку вістї', -'templatepage' => 'Відїти шаблону', -'viewhelppage' => 'Відїти сторінку помочі', -'categorypage' => 'Відїти сторінку катеґорії', -'viewtalkpage' => 'Відїти діскузію', +'userpage' => 'Видїти сторінку хоснователя', +'projectpage' => 'Видїти сторінку проєкту', +'imagepage' => 'Видїти сторінку файлу', +'mediawikipage' => 'Видїти сторінку повідомлїнь', +'templatepage' => 'Видїти шаблону', +'viewhelppage' => 'Видїти сторінку помочі', +'categorypage' => 'Видїти сторінку катеґорії', +'viewtalkpage' => 'Видїти діскузію', 'otherlanguages' => 'Іншыма языками', 'redirectedfrom' => '(Напрямленый з $1)', 'redirectpagesub' => 'Сторінка-напрямлїня', @@ -262,6 +270,9 @@ $messages = array( Просиме Вас, почекайте і спробуйте доступность пізнїше. $1', +'pool-timeout' => 'Час скінчіня чекать про замок', +'pool-queuefull' => 'Фронта є повна', +'pool-errorunknown' => 'Незнама хыба', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'O {{grammar:accusative|{{SITENAME}}}}', @@ -298,9 +309,9 @@ $1', 'youhavenewmessagesmulti' => 'Маєте новы ознамы на $1', 'editsection' => 'едіт.', 'editold' => 'едіт.', -'viewsourceold' => 'відїти код', +'viewsourceold' => 'видїти код', 'editlink' => 'едітовати', -'viewsourcelink' => 'відїти код', +'viewsourcelink' => 'видїти код', 'editsectionhint' => 'Едітовати секцію: $1', 'toc' => 'Обсяг', 'showtoc' => 'вказати', @@ -392,12 +403,12 @@ $1', 'wrong_wfQuery_params' => 'Неправилны параметры функцій wfQuery()
    Функція: $1
    Запрос: $2', -'viewsource' => 'Відїти код', +'viewsource' => 'Видїти код', 'viewsourcefor' => 'Сторінка «$1»', 'actionthrottled' => 'Акція была придушена', 'actionthrottledtext' => 'Взглядом ку протиспамовым опатрїням не можете жадану акцію провести барз часто в короткім часї. Спробуйте то знову о пару мінут.', 'protectedpagetext' => 'Тота сторінка была замкнута, также ся не дасть едітовати', -'viewsourcetext' => 'Можете відїти і копіровати код той сторінкы:', +'viewsourcetext' => 'Можете видїти і копіровати код той сторінкы:', 'protectedinterface' => 'Тота сторінка є частинов інтрефейсу проґрамового забезпечіня і єй можуть едітовати лем адміністраторы проєкту.', 'editinginterface' => "'''Увага:''' Едітуєте сторінку,котра є частинов текстового інтерфейсу. Зміны той сторінкы выкличуть зміну інтерфейсу про іншых хоснователїв. Про переклад увідомлїня хоснуйте [http://translatewiki.net/wiki/Main_Page?setlang=uk translatewiki.net] — проєкт, што ся занимає локалізаціёв MediaWiki.", 'sqlhidden' => '(SQL запрос скрытый)', @@ -423,23 +434,25 @@ $2', 'yourname' => 'Мено хоснователя:', 'yourpassword' => 'Гесло:', 'yourpasswordagain' => 'Повторяйте гесло:', -'remembermypassword' => 'Запамятати моє приголошіня на тім компютері', +'remembermypassword' => 'Запамятати моє приголошіня на тім компютерї (максімално $1 {{PLURAL:$1|день|днів}})', +'securelogin-stick-https' => 'Останьте припоєны через HTTPS по приголошіню', 'yourdomainname' => 'Ваша домена:', 'externaldberror' => 'Або ся стала хыба екстерной автентіфікачной датабазы, або не маєте поволено мінити своє екстерне конто.', 'login' => 'Приголошіня', -'nav-login-createaccount' => 'Приголошіня / Вытворїня конта', +'nav-login-createaccount' => 'Приголошіня / створїня конта', 'loginprompt' => 'Ку приголошіню до {{grammar:2sg|{{SITENAME}}}} мусите мати поволены cookies.', -'userlogin' => 'Приголошіня / вытворїня конта', +'userlogin' => 'Приголошіня / створїня конта', 'userloginnocreate' => 'Приголошіня', 'logout' => 'Одголосити', 'userlogout' => 'Одголошіня', 'notloggedin' => 'Не сьте приголошеный(а)', 'nologin' => "До теперь не маєте конто? '''$1'''.", -'nologinlink' => 'Вытворити конто', +'nologinlink' => 'Створити конто', 'createaccount' => 'Вытворити конто', 'gotaccount' => "Уж сьте реґістрованы? '''$1'''.", 'gotaccountlink' => 'Приголошіня', 'createaccountmail' => 'електроничнов поштов', +'createaccountreason' => 'Причіна:', 'badretype' => 'Вами написаны гесла не сугласять.', 'userexists' => 'Уведжене мено хоснователя уж екзістує. Звольте інше мено.', @@ -461,6 +474,7 @@ $2', 'wrongpasswordempty' => 'Было задане порожнє гесло. Спробуйте іщі раз.', 'passwordtooshort' => 'Гесло мусить быти довге холем $1 {{PLURAL:$1|знак|знакы|знаків}}.', 'password-name-match' => 'Ваше гесло не може быти таке саме як і ваше хосновательске мено.', +'password-login-forbidden' => 'Хоснованя того мена хоснователя і гесла было заказане.', 'mailmypassword' => 'Послати нове гесло', 'passwordremindertitle' => 'Нове дочасне гесло на {{grammar:4sg|{{SITENAME}}}}', 'passwordremindertext' => 'Хтось (може Вы, з IP адресы $1) пожадав, жебы сьме Вам послали нове гесло @@ -500,6 +514,9 @@ $2', 'loginlanguagelabel' => 'Язык: $1', 'suspicious-userlogout' => 'Ваша пожадавка на одголошіня была одвергнута, бо вызерає то так, же была послана розбитым переглядачом або кешуючім проксі-сервером.', +# E-mail sending +'php-mail-error-unknown' => 'Незнама хыба у PHP mail() функції', + # Password reset dialog 'resetpass' => 'Змінити гесло', 'resetpass_announce' => 'Приголошуєте ся дочасным геслом, котре было послане електронічнов поштов. Про закончіня приголошіня треба задати нове гесло ту:', @@ -548,6 +565,7 @@ $2', 'showlivepreview' => 'Швыдкый нагляд', 'showdiff' => 'Указати зміны', 'anoneditwarning' => "'''Увага''': Не сте приголошены. Ваша IP-адреса буде записана до історії змін той сторінкы.", +'anonpreviewwarning' => "''Не сьте приголошеный(а). Уложінём буде ваша IP адреса записана в історії той сторінкы.''", 'missingsummary' => "'''Припомянутя:''' Не задали сьте згорнутя едітації. Кідь іщі раз кликтете на Уложыти зміны, буде вапа едітація записана без згорнутя.", 'missingcommenttext' => 'Задайте коментарь', 'missingcommentheader' => "'''Припомянутя:''' Не задали сьте тему/надпис про тот коментарь. @@ -619,7 +637,11 @@ $2', 'usercsspreview' => "'''Памятайте, же собі перезерате лем нагляд вашого хосновательского CSS.''' '''Іщі не было уложено!'''", 'userjspreview' => "'''Памятайте, же тестуєте а перезерате лем нагляд вашого хосновательского JavaScript-у, іщі не быв уложеный!'''", -'userinvalidcssjstitle' => "'''Увага:''' Тема взгляду „$1“ не екзістує. Не забудьте, же хосновательске .css і .js файлы хоснують малы писмена, наприклад {{ns:user}}:{{BASEPAGENAME}}/monobook.css, а не {{ns:user}}:{{BASEPAGENAME}}/Monobook.css.", +'sitecsspreview' => "'''Памятайте, же собі перезерате лем нагляд того CSS.''' +'''Іщі не было уложене!'''", +'sitejspreview' => "'''Памятайте, же собі перезерате лем нагляд того JavaScript-у.''' +'''Іщі не быв уложеный!'''", +'userinvalidcssjstitle' => "'''Увага:''' Тема взгляду „$1“ не екзістує. Не забудьте, же хосновательске .css і .js файлы хоснують малы писмена, наприклад {{ns:user}}:{{BASEPAGENAME}}/vector.css, а не {{ns:user}}:{{BASEPAGENAME}}/Vector.css.", 'updated' => '(Зміна уложена)', 'note' => "'''Позначка:''' ", 'previewnote' => "'''Памятайте, же то лем попереднїй перегляд, @@ -656,7 +678,6 @@ $2', '''НЕ ПУБЛІКУЙТЕ ТУ БЕЗ ПОВОЛЇНЯ МАТЕРІАЛЫ, ШТО СЯ ОХРАНЮЮТЬ АВТОРЬСКЫМ ПРАВОМ!''", 'copyrightwarning2' => "Просиме Вас, уважте, што вшыткы додаваня і зміны до {{grammar:2sg|{{SITENAME}}}} можуть быти другыма хоснователями управлены, змінены ці одстранены. Покы собі не желате, жебы ваш текст быв немилосердно управляный, пак го до {{grammar:2sg|{{SITENAME}}}} не укладайте.
    Уложінём приспевку ся завязуєте, же є вашым дїлом або є скопірованый із жрідел, котры не суть хоронены авторьскым правом (тзв. public domain), детайлы найдете на $1. '''Не копіруйте дїла хоронены авторьскым правом без дозволїня!'''", -'longpagewarning' => 'УВАГА: Тота сторінка є $1 КіБ довга; дакотры переглядачі можуть мати проблемы з едітованём сторінок, котры ся ближать або суть довшы як 32 КіБ. Просиме Вас, уважте роздїлїня сторінкы на веце частей.', 'longpageerror' => "'''ХЫБА: Пробуєте уложыти текст о великости $1 КіБ, причім доволене максімум є $2 КіБ. Ваша едітація не може быти уложена.'''", 'readonlywarning' => "'''УВАГА: Датабаза была замкнута про утримованя, также не будете мочі уложыти свої зміны. Можете сі го окопіровати до файлу і уложыти го пізнїше.''' @@ -701,7 +722,7 @@ $2', 'expensive-parserfunction-warning' => 'Увага: Тота сторінка обсягує дуже много кликаня выконово нарочных функцій парсера. Поволеный ліміт є $2, теперь шак {{PLURAL:$1|ту єдно кликаня є|ту суть $2 кликаня|ту є $2 кликань}}.', -'expensive-parserfunction-category' => 'Сторінкы з дуже великым почтом кликаня функції парсера', +'expensive-parserfunction-category' => 'Сторінкы з дуже великым чіслом кликаня функції парсера', 'post-expand-template-inclusion-warning' => 'Увага: розмір шаблон про включіня є барз великый. Дакотры шаблоны не будуть включены.', 'post-expand-template-inclusion-category' => 'Сторінкы з перевышуючов великостёв включеных шаблон', @@ -832,6 +853,8 @@ $1", 'logdelete-failure' => "'''Не подарило ся наставити видительность протоколу.''' $1", 'revdel-restore' => 'Змінити видительность', +'revdel-restore-deleted' => 'вымазаны ревізії', +'revdel-restore-visible' => 'видительны ревізії', 'pagehist' => 'Історія сторінкы', 'deletedhist' => 'Вымазана історія', 'revdelete-content' => 'обсяг', @@ -899,10 +922,13 @@ $1", # Diffs 'history-title' => 'Історія змін сторінкы «$1»', 'difference' => '(роздїл міджі ревізіями)', +'difference-multipage' => '(Роздїлы міджі сторінками)', 'lineno' => 'Рядок $1:', 'compareselectedversions' => 'Порівнати выбраны верзії', 'showhideselectedversions' => 'Вказати/скрыти выбраны ревізії', 'editundo' => 'вернути назад', +'diff-multi' => '({{PLURAL:$1|Не є зображена єдна міджілегла верзія|Не суть зображены $1 міджілеглы верзії|Не є зображено $1 міджілеглых верзій}} од {{PLURAL:$2|1 хоснователя|$2 хоснователїв}} .)', +'diff-multi-manyusers' => '(Не є зображено $1 міджілеглых верзій од веце як $2 {{PLURAL:$2|хоснователя|хоснователїв}}.)', # Search results 'searchresults' => 'Резултаты гляданя', @@ -935,8 +961,9 @@ $1", 'searchprofile-project-tooltip' => 'Переглядавати: $1', 'searchprofile-images-tooltip' => 'Глядати файлы', 'searchprofile-everything-tooltip' => 'Переглядавати вшыток обсяг (рахувчі діскузны сторінкы)', -'searchprofile-advanced-tooltip' => 'Наставлити меновы просторы, в котрых ся має глядати', +'searchprofile-advanced-tooltip' => 'Задати просторы назв, де ся мать глядати', 'search-result-size' => '$1 ({{PLURAL:$2|слово|слова|слов}})', +'search-result-category-size' => '{{PLURAL:$1|1 член|$1 члена|$1 членів}} ({{PLURAL:$2|1 підкатеґорія|$2 підкатеґорії|$2 підкатеґорії}}, {{PLURAL:$3|1 файл|$3 файлы|$3 файлів}})', 'search-result-score' => 'Одповідность: $1 %', 'search-redirect' => '(напрямити $1)', 'search-section' => '(секція $1)', @@ -992,7 +1019,7 @@ $1", 'prefs-rc' => 'Послїднї зміны', 'prefs-watchlist' => 'Слїдованы сторінкы', 'prefs-watchlist-days' => 'Чісло днїв зображеных в слїдованых сторінках:', -'prefs-watchlist-days-max' => '(максімалнї 7 днїв)', +'prefs-watchlist-days-max' => 'Максімално 7 днїв', 'prefs-watchlist-edits' => 'Чісло едітовань зображеных во вылїпшенім списку слїдованых сторінок:', 'prefs-watchlist-edits-max' => 'Максімалне чісло: 1000', 'prefs-watchlist-token' => 'Ключ до списку слїдованых сторінок:', @@ -1012,6 +1039,7 @@ $1", 'contextlines' => 'Чісло рядків на резултат', 'contextchars' => 'Чісло сімболів контексту на рядок', 'stub-threshold' => 'Поріг про форматованя одказу як одказів на "stub" (v bajtech):', +'stub-threshold-disabled' => 'Выпнуте', 'recentchangesdays' => 'На кілько днїв вказовати новы едітованя', 'recentchangesdays-max' => '(максімум $1 {{PLURAL:$1|день|днї|днїв}})', 'recentchangescount' => 'Чісло імпліцітно зображованых едітовань:', @@ -1045,6 +1073,7 @@ $1", 'prefs-files' => 'Файлы', 'prefs-custom-css' => 'Властный CSS', 'prefs-custom-js' => 'Властный JS', +'prefs-common-css-js' => 'Сдїляне CSS/JS про вшыткы штілы:', 'prefs-reset-intro' => 'Помочов той сторінкы можете вшыткы наставлїня вернути на імпліцітны годноты. Тоту операцію не годен вернути назад.', 'prefs-emailconfirm-label' => 'Підтверджіня електронічной пошты:', @@ -1082,9 +1111,15 @@ $1", 'prefs-advancedrendering' => 'Розшырены можности', 'prefs-advancedsearchoptions' => 'Розшырены можности', 'prefs-advancedwatchlist' => 'Розшырены можности', -'prefs-display' => 'Наставлїня взгляду', +'prefs-displayrc' => 'Наставлїня взгляду', +'prefs-displaysearchoptions' => 'Наставлїня взгляду', +'prefs-displaywatchlist' => 'Наставлїня взгляду', 'prefs-diffs' => 'Порівнаня верзії', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Адреса ел. пошты вызерать быти правилна', +'email-address-validity-invalid' => 'Задайте правилну адресу ел. пошты', + # User rights 'userrights' => 'Справа хосновательскых ґруп', 'userrights-lookup-user' => 'Управовати хосновательскы ґрупы', @@ -1168,6 +1203,7 @@ $1", 'right-hideuser' => 'Блокованя мена хоснователя і ёго схованя', 'right-ipblock-exempt' => 'Обходжіня блокованя IP адрес, їх россягів і автоблокованя', 'right-proxyunbannable' => 'Обходжіня автоматічного блокованя проксі серверів', +'right-unblockself' => 'Одблоковати самого себе', 'right-protect' => 'Зміна уровнї замків і едітованя замкнутых сторінок', 'right-editprotected' => 'Едітованя замкнутых сторінок (без каскадового замку)', 'right-editinterface' => 'Едітованя інтерфейсу хоснователя', @@ -1190,7 +1226,6 @@ $1", 'right-siteadmin' => 'Замыкана і одомыканя датабазы', 'right-reset-passwords' => 'Наставованя гесел іншым хоснователям', 'right-override-export-depth' => 'Експорт сторінок включаючі звязаны сторінкы з глубков до 5', -'right-versiondetail' => 'Перегляд росшыреной інформації про верзію проґрамного забезпечіня', 'right-sendemail' => 'Посыланя пошты іншым хоснователям', # User rights log @@ -1241,14 +1276,9 @@ $1", 'recentchanges-legend' => 'Можности послїднїх змін', 'recentchangestext' => 'Слїдуйте послїднї зміны на {{grammar:genitive|{{SITENAME}}}} на тій сторінцї.', 'recentchanges-feed-description' => 'На тотїм каналу слїдуєте послїднї зміны на {{grammar:6sg|{{SITENAME}}}}.', -'recentchanges-label-legend' => 'Леґенда: $1.', -'recentchanges-legend-newpage' => '$1 — нова сторінка', 'recentchanges-label-newpage' => 'Тым едітованём была створена нова сторінка', -'recentchanges-legend-minor' => '$1 малы едітованя', 'recentchanges-label-minor' => 'Тото є мала зміна', -'recentchanges-legend-bot' => '$1 — ботове едітованя', 'recentchanges-label-bot' => 'Тото едітованя зроблене ботом', -'recentchanges-legend-unpatrolled' => '$1 – неперевірене едітованя', 'recentchanges-label-unpatrolled' => 'Тота зміна дотеперь не была патролёвана.', 'rcnote' => "{{PLURAL:$1|Послїдня '''$1''' зміна|Послїднї '''$1''' зміны|Послїднїх '''$1''' змін}} за '''$2''' {{PLURAL:$2|день|днї|днїв}}, на час $5, $4.", 'rcnotefrom' => 'Ниже {{PLURAL:$1|є|суть|є}} найвеце $1 {{PLURAL:$1|зміна|зміны|змін}} од $2.', @@ -1295,6 +1325,9 @@ $1", 'upload_directory_missing' => 'Адресарь про награваня файлів ($1) хыбить і вебовый сервер го не годен створити.', 'upload_directory_read_only' => 'До адресаря про начітаны файлы ($1) не має вебовый сервер права запису.', 'uploaderror' => 'При начітаваню дішло ку хыби', +'upload-recreate-warning' => "'''Увага: Файл з тов назвов быв скоре змазаный ці переменованый.''' + +Ту є про перегляд зображеный список мазаня і переменованя той сторінкы:", 'uploadtext' => "Ниже даный формулар служыть про начітаваня файлів. Уж начітаны файлы собі можете перезерати і глядати помочов [[Special:FileList|списку начітаных файлів]], качде начітаня ся тыж зазначує до [[Special:Log/upload|книгы начітаваня]], змазаня суть в [[Special:Log/delete|книзї змазаных сторінок]]. Про вложіня образку до сторінкы хоснуйте єден з наслїдуючіх способів запису: @@ -1325,6 +1358,17 @@ $1", 'filetype-unwanted-type' => "„.$1“''' є нежеланый формат файлу. {{plural:$3|Желаный формат файлів є|Желаны форматы файлів суть}} $2.", 'filetype-banned-type' => "'''„.$1“''' є недоволеный формат файлів. {{plural:$3|Поволеный формат файлів є|Поволены форматы файлів суть}} $2.", 'filetype-missing' => 'Файл не має росшыріня (наприклад, «.jpg»).', +'empty-file' => 'Начітаный файл є порожнїй.', +'file-too-large' => 'Начітаный файл є барз великый.', +'filename-tooshort' => 'Назва файлу є барз коротка.', +'filetype-banned' => 'Тот тіп файлу є заказаный.', +'verification-error' => 'Тот файл не перешов овіринём файлів.', +'hookaborted' => 'Пожадована вами зміна была одмітнута дакотрым росшырінём.', +'illegal-filename' => 'Тота назва файлу не є поволена.', +'overwrite' => 'Не є доволене переписати екзістуючій файл.', +'unknown-error' => 'Дішло ку незнамій хыбі.', +'tmp-create-error' => 'Не подарило ся створити дочасный файл.', +'tmp-write-error' => 'Хыба запису до дочасного файлу.', 'large-file' => 'Ся рекомендує, жебы довжка файлу непересяговала $1, тот файл має $2.', 'largefileserver' => 'Розмір файлу є векшый як ліміт наставленый на сервері.', 'emptyfile' => 'Файл, котрый сьте вложыли ся видить быти порожнїй. Могла то запричінити хыба в назві файлу. Просиме, перевірте ці сьте справды хотїли вложыти тот файл.', @@ -1349,13 +1393,14 @@ $1", 'fileexists-shared-forbidden' => 'Файл з тов назвов уж екзістує в здїлянім усховіщу. Кідь і наперек тому хочете ваш файл начітати, вернийте ся і звольте іншу назву. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Тот файл є дуплікат {{PLURAL:$1|файлу|такых файлів}}:', 'file-deleted-duplicate' => 'Ідентічный файл ку тому ([[:$1]]) быв уж скоре змазаный. Передтым як файл знову награєте, бы сьте мали перевірити записы о попереднёму змазаню.', -'successfulupload' => 'Начітаня было успішне', 'uploadwarning' => 'Увага про начітаня', 'uploadwarning-text' => 'Просиме, зміньте опис файлу ниже і спробуйте то знову.', 'savefile' => 'Уложыти файл', 'uploadedimage' => 'награв "[[$1]]"', 'overwroteimage' => 'начітана нова верзія "[[$1]]"', 'uploaddisabled' => 'Начітаня файлів заборонене', +'copyuploaddisabled' => 'Начітаня файлів через URL є выпнуте.', +'uploadfromurl-queued' => 'Ваша пожадавка про начітаня файлу была уложена до фронты.', 'uploaddisabledtext' => 'Начітаня файлів є выпнуте.', 'php-uploaddisabledtext' => 'В PHP є выпнуте начітаня файлів. Просиме, перевірте наставлїня file_uploads.', 'uploadscripted' => 'Тот файл обсягує HTML-код або скріпт, якый може быти неправилно інтерпретованый вебовым переглядячом.', @@ -1374,6 +1419,14 @@ $1", Уважте ці справды треба продовжовати в начітаню того файлу. Ту є даный запис з книгы змазаных файлів:", 'filename-bad-prefix' => "Назва файлу, котрый начітавате ся зачінать на '''„$1“''', што не є назва звычайно приряджована діґіталным фотоапаратом. Звольте іншу назву, котра ваш файл попише лїпше.", +'upload-success-subj' => 'Начітаня было успішне', +'upload-success-msg' => 'Файл вами начітаный з [$2] є доступный на [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Проблем з начітаным файлом', +'upload-failure-msg' => 'У вами начітаного файлу взникнув проблем з [$2]:: + +$1', +'upload-warning-subj' => 'Увага про начітаня', +'upload-warning-msg' => 'Почас вашого начітаваня файлу [$2] ся став проблем. Кідь го хочете вырїшыти, можете ся вернути до [[Special:Upload/stash/$1|формуларя начітаваня]].', 'upload-proto-error' => 'Неплатный протокол', 'upload-proto-error-text' => 'Награня вздаленого файлу пожадує зазначіня URLs з початком http:// або ftp://.', @@ -1387,22 +1440,23 @@ $1", 'upload-http-error' => 'Дішло ку хыбі HTTP: $1', # img_auth script messages -'img-auth-accessdenied' => 'Приступ одопертый', -'img-auth-nopathinfo' => 'Хыбить PATH_INFO. +'img-auth-accessdenied' => 'Приступ одопертый', +'img-auth-nopathinfo' => 'Хыбить PATH_INFO. Ваш сервер не є наставеный так, жебы давав тоту інформацію. Може фунґує помочов CGI і img_auth на нім не може фунґовати. Видьте http://www.mediawiki.org/wiki/Manual:Image_Authorization.', -'img-auth-notindir' => 'Пожадована стежка не є в конфіґурованім адресарю з начітаныма файлами.', -'img-auth-badtitle' => 'З „$1“ ся не дасть створити платна назва сторінкы.', -'img-auth-nologinnWL' => 'Не сьте приголошеный і „$1“ не є на білім списку.', -'img-auth-nofile' => 'Файл «$1» не екзістує.', -'img-auth-isdir' => 'Пробуєте приступовати до адресаря „$1“. +'img-auth-notindir' => 'Пожадована стежка не є в конфіґурованім адресарю з начітаныма файлами.', +'img-auth-badtitle' => 'З „$1“ ся не дасть створити платна назва сторінкы.', +'img-auth-nologinnWL' => 'Не сьте приголошеный і „$1“ не є на білім списку.', +'img-auth-nofile' => 'Файл «$1» не екзістує.', +'img-auth-isdir' => 'Пробуєте приступовати до адресаря „$1“. Доволеный є лем приступ к файлам.', -'img-auth-streaming' => 'Переношать ся „$1“.', -'img-auth-public' => 'Помочов img_auth.php ся поскытують файлы на пріватных вікі. +'img-auth-streaming' => 'Переношать ся „$1“.', +'img-auth-public' => 'Помочов img_auth.php ся поскытують файлы на пріватных вікі. Тота вікі є наставлена як публічна. З безпечностных причін є img_auth.php выпнуте.', -'img-auth-noread' => 'Хоснователь не має приступ про чітаня „$1“.', +'img-auth-noread' => 'Хоснователь не має приступ про чітаня „$1“.', +'img-auth-bad-query-string' => 'URL обсягує неправилный одказ.', # HTTP errors 'http-invalid-url' => 'Неправилне URL: $1', @@ -1434,6 +1488,7 @@ $1", 'listfiles_search_for' => 'Глядати файл по назві:', 'imgfile' => 'файл', 'listfiles' => 'Список файлів', +'listfiles_thumb' => 'Мініатура', 'listfiles_date' => 'Датум', 'listfiles_name' => 'Назва', 'listfiles_user' => 'Хоснователь', @@ -1464,7 +1519,7 @@ $1", Наслїдуючій список зображує лем {{PLURAL:$1|тоту першу|першы $1|першых $1}}. Можете собі посмотрити [[Special:WhatLinksHere/$2|повный список]].', 'nolinkstoimage' => 'На тот файл не одказує жадна сторінка', -'morelinkstoimage' => 'Відїти [[Special:WhatLinksHere/$1|далшы одказы]] на тот файл.', +'morelinkstoimage' => 'Видїти [[Special:WhatLinksHere/$1|далшы одказы]] на тот файл.', 'redirectstofile' => '{{plural:$1|Наслідуючій файл напрямлює|Наслїдуючі $1 файлы напрямлюють|Наслїдуючіх $1 файлів напрямлює}} на тот файл:', 'duplicatesoffile' => '{{plural:$1|Наслїдуючій файл є дуплікат|Наслїдуючі $1 файлы суть дуплікаты|Наслїдуючіх $1 файлів є дуплікатами}} того файлу ([[Special:FileDuplicateSearch/$2|детайлы]]):', 'sharedupload' => 'Тот файл є з $1 і є доступным про іншы проекты.', @@ -1547,8 +1602,8 @@ $1", 'statistics-edits' => 'Чісло едітованя од основаня вікі {{SITENAME}}', 'statistics-edits-average' => 'Середнє чісло едітовань на сторінку', 'statistics-views-total' => 'Вшыткых переглядів', +'statistics-views-total-desc' => 'Зображіня неєствуючіх і шпеціалных сторінок ся не рахують', 'statistics-views-peredit' => 'Чісло зображінь на едітованя', -'statistics-jobqueue' => 'Довжка [http://www.mediawiki.org/wiki/Manual:Job_queue фронты утримованя]', 'statistics-users' => 'Реґістрованы [[Special:ListUsers|хоснователї]]', 'statistics-users-active' => 'Актівны хоснователї', 'statistics-users-active-desc' => 'Хоснователї, котры в {{plural:$1|минулого дня|минулых $1 днїв}} провели даяку операцію', @@ -1559,9 +1614,9 @@ $1", 'disambiguations-text' => "Одказы на наслїдуючіх сторінках ведуть на '''богатозначны сторінкы'''. (сторінкы котры обсягують дакотру з тых шаблон на [[MediaWiki:Disambiguationspage|списку шаблон про богатозначны сторінкы]]) намісто на дану статю.", 'doubleredirects' => 'Двоїты напрямлїня', -'doubleredirectstext' => 'Тота сторінка обсягує сторінкы котры напрямлюють на інщы сторінкы напрямлїня. -Каждый рядок обсягує одказ на перше і друге напрямлїня, як і ціль другого напрямлїня, котре є звычайно "реална" цілёва сторінка, де перше напрямлїня бы мало вести. -Перекрижены записы были вырїшены.', +'doubleredirectstext' => 'На тій сторінцї є список напрямлїн ведучіх на далшы напрямлїня. +Каждый рядок обсягує одказ на перше і друге напрямлїня і ку тому ціль другого напрямлїня, котрый звычайно вказує мено „реалной“ цілёвой сторінкы, на котру бы ся мало перше напрямлїня одказовати. +Перечаркнуты положкы уж были вырїшены.', 'double-redirect-fixed-move' => 'Сторінка [[$1]] была переменована, нынї напрямлює на [[$2]]', 'double-redirect-fixer' => 'Оправарь напрямлїнь', @@ -1584,6 +1639,8 @@ $1", 'nmembers' => '$1 {{PLURAL:$1|обєкт|обєкты|обєктів}}', 'nrevisions' => '$1 {{PLURAL:$1|ревізія|ревізії|ревізій}}', 'nviews' => '$1 {{PLURAL:$1|навщіва|навщівы|навщів}}', +'nimagelinks' => 'Хоснованый ня $1 {{PLURAL:$1|сторінка|сторінкы|сторінках}}', +'ntransclusions' => 'хоснованый ня $1 {{PLURAL:$1|сторінка|сторінкы|сторінках}}', 'specialpage-empty' => 'Той пожадавцї не одповідають жадны записы.', 'lonelypages' => 'Статї-сыроты', 'lonelypagestext' => 'Наслїдуючі сторінкы не суть одказованы з іншых сторінок на {{grammar:6sg|{{SITENAME}}}} ани до них вложены.', @@ -1602,7 +1659,7 @@ $1", 'mostlinked' => 'Найодказованїшы сторінкы', 'mostlinkedcategories' => 'Найхоснованїшы катеґорії', 'mostlinkedtemplates' => 'Найужыванїшы шаблоны', -'mostcategories' => 'Сторінкы з найвекшым почтом катеґорій', +'mostcategories' => 'Сторінкы з найвекшым чіслом катеґорій', 'mostimages' => 'Найужыванїшы файлы', 'mostrevisions' => 'Сторінкы з найвеце ревізіями', 'prefixindex' => 'Вшыткы сторінкы з початком назв', @@ -1679,7 +1736,7 @@ $1", Невказаны суть то [[Special:UnusedCategories|нехоснованы катеґорії]]. Посмотьте ся тыж на [[Special:WantedCategories|жаданы катеґорії]].', 'categoriesfrom' => 'Вказати сторінкы, што ся зачінають на:', -'special-categories-sort-count' => 'упорядковати подля почту', +'special-categories-sort-count' => 'упорядковати подля множества', 'special-categories-sort-abc' => 'упорядковати за алфавітом', # Special:DeletedContributions @@ -1741,34 +1798,40 @@ $1", 'listgrouprights-removegroup-self-all' => 'Одстранїня свого контра з хоцьякой ґрупы', # E-mail user -'mailnologin' => 'Без адресы одосланя', -'mailnologintext' => 'Кідь хочете посылати ел. пошту іншым хоснователям, мусите ся [[Special:UserLogin|приголосити]] і мати платну адресу ел. пошты в своїм [[Special:Preferences|наставлїню]].', -'emailuser' => 'Послати е-маіл тому хоснователёві', -'emailpage' => 'Пошлийте е-пошту', -'emailpagetext' => 'Помочов ниже зображеного формуларя можете тому хоснователёви послати повідомлїня ел. поштов. +'mailnologin' => 'Без адресы одосланя', +'mailnologintext' => 'Кідь хочете посылати ел. пошту іншым хоснователям, мусите ся [[Special:UserLogin|приголосити]] і мати платну адресу ел. пошты в своїм [[Special:Preferences|наставлїню]].', +'emailuser' => 'Послати е-маіл тому хоснователёві', +'emailpage' => 'Пошлийте е-пошту', +'emailpagetext' => 'Помочов ниже зображеного формуларя можете тому хоснователёви послати повідомлїня ел. поштов. Адреса ел. пошты, котру мате зазначену в [[Special:Preferences|наставлїня]],ся обявить як адреса одосылателя пошты, жебы вам адресат міг одповісти прямо.', -'usermailererror' => 'Хыба поштового проґраму:', -'defemailsubject' => '{{SITENAME}}: лист', -'noemailtitle' => 'Без адресы ел. пошты', -'noemailtext' => 'Тот хоснователь не зазначів платну адресу ел. пошты.', -'nowikiemailtitle' => 'Ел. пошта не є доволена', -'nowikiemailtext' => 'Тот хоснователь собі не желать діставати пошту од іншых хоснователїв.', -'email-legend' => 'Одосыланя ел. пошты іншому хоснователёві {{GRAMMAR:2sg|{{SITENAME}}}}', -'emailfrom' => 'Од:', -'emailto' => 'Кому:', -'emailsubject' => 'Тема:', -'emailmessage' => 'Ознам:', -'emailsend' => 'Одослати', -'emailccme' => 'Послати копію повідомлїня на мою адресу ел. пошты.', -'emailccsubject' => 'Копія вашого повідомлїня про хоснователя $1: $2', -'emailsent' => 'Пошта одослана', -'emailsenttext' => 'Ваше повідомлїня было послане.', -'emailuserfooter' => 'Тота ел. пошта была послана з {{grammar:2sg|{{SITENAME}}}} за помочі функції „Послати ел, пошту“; одослав го хоснователь $1 хоснователёві $2', +'usermailererror' => 'Хыба поштового проґраму:', +'defemailsubject' => '{{SITENAME}}: лист', +'usermaildisabled' => 'Посыланя ел. пошты є выпнуте', +'usermaildisabledtext' => 'Не маєте право одосылати ел. пошту іншым хоснователям той вікі', +'noemailtitle' => 'Без адресы ел. пошты', +'noemailtext' => 'Тот хоснователь не зазначів платну адресу ел. пошты.', +'nowikiemailtitle' => 'Ел. пошта не є доволена', +'nowikiemailtext' => 'Тот хоснователь собі не желать діставати пошту од іншых хоснователїв.', +'email-legend' => 'Одосыланя ел. пошты іншому хоснователёві {{GRAMMAR:2sg|{{SITENAME}}}}', +'emailfrom' => 'Од:', +'emailto' => 'Кому:', +'emailsubject' => 'Тема:', +'emailmessage' => 'Ознам:', +'emailsend' => 'Одослати', +'emailccme' => 'Послати копію повідомлїня на мою адресу ел. пошты.', +'emailccsubject' => 'Копія вашого повідомлїня про хоснователя $1: $2', +'emailsent' => 'Пошта одослана', +'emailsenttext' => 'Ваше повідомлїня было послане.', +'emailuserfooter' => 'Тота ел. пошта была послана з {{grammar:2sg|{{SITENAME}}}} за помочі функції „Послати ел, пошту“; одослав го хоснователь $1 хоснователёві $2', + +# User Messenger +'usermessage-summary' => 'Зохабити сістемове повідомлїня', +'usermessage-editor' => 'Сістемовый вістник', # Watchlist 'watchlist' => 'Слїдованы сторінкы', 'mywatchlist' => 'Слїдованы сторінкы', -'watchlistfor' => "(хоснователя '''$1''')", +'watchlistfor2' => 'Про $1 ($2)', 'nowatchlist' => 'Ваш список слїдованых сторінок є порожнїй.', 'watchlistanontext' => 'Про перезераня ці управу списку слїдованых сторінок ся мусите $1.', 'watchnologin' => 'Не сьте приголошеный(а)', @@ -1810,29 +1873,33 @@ $1", 'enotif_lastvisited' => 'Видьте $1 про список вшыткых змін од минулой навщівы.', 'enotif_lastdiff' => 'Тоту зміну видьте на $1', 'enotif_anon_editor' => 'анонімный хоснователь $1', -'enotif_body' => 'Учтивый $WATCHINGUSERNAME, +'enotif_body' => 'Дорогый хоснователю $WATCHINGUSERNAME, -В $PAGEEDITDATE $CHANGEDORCREATED $PAGEEDITOR сторінку $PAGETITLE, видьте актуалну верзію на $PAGETITLE_URL . +У $PAGEEDITDATE $CHANGEDORCREATED $PAGEEDITOR сторінку $PAGETITLE, смотьте актуалну верзію на $PAGETITLE_URL . $NEWPAGE +Куртый опис змін: $PAGESUMMARY $PAGEMINOREDIT -Згорнутя едітованя: $PAGESUMMARY $PAGEMINOREDIT - -Хоснователя, котрый зміну выконав, можете контактовати: -ел. поштов: $PAGEEDITOR_EMAIL +Хоснователя, котрый учінив зміну, можете контактовати: +імейлом: $PAGEEDITOR_EMAIL на вікі: $PAGEEDITOR_WIKI -Покы сторінку не навщівите, не будуть вам посыланы далшы повідомлїня о змінах той сторінкы, припадно собі можете вынуловати флаґы в своїм списку слїдованых сторінок. - З поздравом ваш засылач повідомлїнь {{grammar:2sg|{{SITENAME}}}} +Покы сторінку не навщівите, не будуть вам посыланы далшы повідомлїя о змінах той сторінкы. +Припадно собі можете вынуловати флачы у своїм списку слїдованых сторінок. + + Поздравує ваш посылач повідомлїнь {{grammar:2sg|{{SITENAME}}}} -- +Змінити наставлїня імейловых повідомлїнь можете на +{{fullurl:{{#special:Preferences}}}} + Наставлїня слїдованых сторінок можете змінити на {{fullurl:Special:Watchlist/edit}} -Сторінку можете із своїх слїдованых вырядити на +Сторінку можете із своїх слїдованых вылучіти на $UNWATCHURL -Порада і контакты +Порада і контакт: {{fullurl:{{MediaWiki:Helppage}}}}', # Delete @@ -1881,7 +1948,10 @@ $UNWATCHURL 'revertpage' => 'Едітованя хоснователя „[[Special:Contributions/$2|$2]]“ ([[User talk:$2|діскузія]]) вернуты до минулого ставу, котрого автором є „[[User:$1|$1]]“', 'revertpage-nouser' => 'Едітованя хоснователя (мено хоснователя є сховане) вернуты до минулого ставу, котрого автором є „[[User:$1|$1]]“', 'rollback-success' => 'Едітованя хоснователя $1 было вернуте на остатню ревізію од хоснователя $2.', -'sessionfailure' => 'Здасть ся, же є даякый проблем з вашым приголошінём; + +# Edit tokens +'sessionfailure-title' => 'Хыба сеансу', +'sessionfailure' => 'Здасть ся, же є даякый проблем з вашым приголошінём; вами жадана актівіта была зрушена як превенція проти неоправненым приступам. Стисните клапку „назад“, обновте сторінку, з котрой сьте пришли і спробуйте то знову;', @@ -1901,7 +1971,7 @@ $UNWATCHURL 'protect_expiry_invalid' => 'Неправилный час укончіня', 'protect_expiry_old' => 'Час страты платности є в минулости.', 'protect-unchain-permissions' => 'Зприступнити далшы наставлїня замку', -'protect-text' => "Ту можете відїти і змінити рівень охраны сторінкы '''$1'''.", +'protect-text' => "Ту можете видїти і змінити рівень охраны сторінкы '''$1'''.", 'protect-locked-blocked' => "Не можете мінити наставлїня замків покы сьте заблокованый. Сучасне наставлїня про тоту сторінку є: '''$1''':", 'protect-locked-dblock' => "Наставлїня замків ся не дасть змінити про замкнуту датабазу. Сучасне наставлїня про тоту сторінку є: '''$1''':", @@ -1964,7 +2034,7 @@ $UNWATCHURL 'undelete-nodiff' => 'Не найджена жадна попередня верзія.', 'undeletebtn' => 'Обновити', 'undeletelink' => 'видїти/обновити', -'undeleteviewlink' => 'відїти', +'undeleteviewlink' => 'видїти', 'undeletereset' => 'Ресетовати', 'undeleteinvert' => 'Інвертовати селекцію', 'undeletecomment' => 'Причіна:', @@ -2007,19 +2077,23 @@ $1', 'month' => 'Од місяця (і скоре):', 'year' => 'Од року (і скоре):', -'sp-contributions-newbies' => 'Вказати приспевкы лем новых конт', -'sp-contributions-newbies-sub' => 'Новы хоснователї', -'sp-contributions-newbies-title' => 'Приспівкы новый хоснователїв', -'sp-contributions-blocklog' => 'Лоґ блокованя', -'sp-contributions-deleted' => 'вымазаны приспевкы хоснователя', -'sp-contributions-logs' => 'лоґы', -'sp-contributions-talk' => 'діскузія', -'sp-contributions-userrights' => 'Справа хосновательскых прав', -'sp-contributions-blocked-notice' => 'Тот хоснователь є теперь блокованый. +'sp-contributions-newbies' => 'Вказати приспевкы лем новых конт', +'sp-contributions-newbies-sub' => 'Новы хоснователї', +'sp-contributions-newbies-title' => 'Приспівкы новый хоснователїв', +'sp-contributions-blocklog' => 'Лоґ блокованя', +'sp-contributions-deleted' => 'вымазаны приспевкы хоснователя', +'sp-contributions-uploads' => 'награваня', +'sp-contributions-logs' => 'лоґы', +'sp-contributions-talk' => 'діскузія', +'sp-contributions-userrights' => 'Справа хосновательскых прав', +'sp-contributions-blocked-notice' => 'Тот хоснователь є теперь блокованый. +Послїднїй запис в лоґах блоковань є такый:', +'sp-contributions-blocked-notice-anon' => 'Тота IP адреса є теперь блокована. Послїднїй запис в лоґах блоковань є такый:', -'sp-contributions-search' => 'Глядати приспевкы', -'sp-contributions-username' => 'IP-адреса або мено хоснователя:', -'sp-contributions-submit' => 'Найти', +'sp-contributions-search' => 'Глядати приспевкы', +'sp-contributions-username' => 'IP-адреса або мено хоснователя:', +'sp-contributions-toponly' => 'Вказати лем актуалны ревізії', +'sp-contributions-submit' => 'Найти', # What links here 'whatlinkshere' => 'Одказы на тоту сторінку', @@ -2080,7 +2154,6 @@ $1', 'ipb-edit-dropdown' => 'Едітовати причіны блоковань', 'ipb-unblock-addr' => 'Одблоковати $1', 'ipb-unblock' => 'Одблоковати хоснователя або IP адресу', -'ipb-blocklist-addr' => 'Екзістуючі блокованя про $1', 'ipb-blocklist' => 'Вказати екзістуючі блокованя', 'ipb-blocklist-contribs' => 'Приспевкы хоснователя $1', 'unblockip' => 'Одблоковати хоснователя', @@ -2149,6 +2222,8 @@ $1 є уж заблокованый(а). Хочете змінити наста 'sorbs_create_account_reason' => 'Ваша IP-адреса є веджена як одкрытый проксі в DNSBL. З той адресы собі не можете створити конто.', 'cant-block-while-blocked' => 'Не можете блоковати іншых хоснователїв, кідь сьте сам заблокованый(а).', 'cant-see-hidden-user' => 'Хоснователь, котрого хочете заблоковати, уж быв заблокованый і схованый. Кідьже не маєте права hideuser, не можете собі наставлїня блокованя того хоснователя посмотрити ани го змінити.', +'ipbblocked' => 'Не можете блоковати або одблоковати іншых хоснователїв, {{GENDER:|сам|сама|сам}} сьте {{GENDER:|заблокованый|заблокована|заблокованый}}', +'ipbnounblockself' => 'Не маєте доволене одблоковати {{GENDER:|сам|сама|сам}} себе', # Developer tools 'lockdb' => 'Замкнути датабазу', @@ -2183,6 +2258,18 @@ $1 є уж заблокованый(а). Хочете змінити наста '''ВАРОВАНЯ!''' Тота дїя може ся стати причінов серіозных а неочекованых змін популарных сторінок. Просиме Вас, перед далшым кроком ся утвердьте, же розуміте вшыткы можны наслїдкы.", +'movepagetext-noredirectfixer' => "Хоснувчі форму ниже, можете переменовати сторінку, єдным разом перемістивши на нове місце і лоґ єй едітовань. +Стара назва стане перенапрямлинём на нову назву. +Можете автоматично обновити перенапрямлиня на страу назву. +Кідь вы тото не зробите, просиме Вас, перевірте наявність [[Special:DoubleRedirects|подвойных]] ці [[Special:BrokenRedirects|розорваных]] перенапрямлинь. +Вы зодповідаєте за то, жебы одказы і надалей вказували там, де мають. + +Уважте, же сторінка '''не''' буде переменована, кідь сторінка з новов назвов уж екзістує, окрем того, коли она порожня або є напрямлинём, а лоґ єй едітовань порожнїй. +То значіть, же вы можете вернути сторінцї стару назву, кідь вы переменовали єй помылково, але вы не можете переписати екзістуючу сторінку. + +'''ВАРОВАНЯ!''' +Тота дїя може ся стати причінов серіозных а неочекаваных змін популарных сторінок. +Просиме Вас, перед далшым кроком ся утвердьте, же розуміте вшыткы можны наслїдкы.", 'movepagetalktext' => "Асоціована діскузна сторінка буде автоматічно переменована, '''окрем:''' * Непорожня сторінка діскузії з таков назвов уж екзістує або * Не означіли сьте в полічку ниже. @@ -2216,7 +2303,7 @@ $1 є уж заблокованый(а). Хочете змінити наста 'movepage-page-unmoved' => 'Сторінка $1 не може быти переменована на $2.', 'movepage-max-pages' => '{{PLURAL:$1|Была переменована максімално поволена єдна сторінка|Были переменованы максімално поволены $1 сторінкы|Было переменоване максімално поволеных $1 сторінок}}, веце їх уж автоматічно переменованых не буде.', '1movedto2' => 'переменовав «[[$1]]» на «[[$2]]»', -'1movedto2_redir' => 'переменовав «[[$1]]» на «[[$2]]» поверх напрямлиня', +'1movedto2_redir' => 'переменовав «[[$1]]» на «[[$2]]» поверьх напрямлїня', 'move-redirect-suppressed' => 'напрямлїня не створене', 'movelogpage' => 'Лоґ переменовань', 'movelogpagetext' => 'Тото є список вшыткых переменованый сторінок.', @@ -2239,6 +2326,7 @@ $1 є уж заблокованый(а). Хочете змінити наста 'immobile-source-page' => 'Тота сторінка ся не дасть переменовати.', 'immobile-target-page' => 'Сторінка ся не дасть переменовати на дану назву.', 'imagenocrossnamespace' => 'Не дасть ся переменовати файл мімо простор назв файлів', +'nonfile-cannot-move-to-file' => 'До простору назв {{ns:file}} ся не дають переменовати сторінкы неналежачі ку файлу', 'imagetypemismatch' => 'Нове росшырїня файлу не одповідать ёго тіпу', 'imageinvalidfilename' => 'Назва цілёвого файлу не є платна', 'fix-double-redirects' => 'Оправити вшыткы напрямлїня на початкову назву', @@ -2311,10 +2399,11 @@ $1 є уж заблокованый(а). Хочете змінити наста 'import-interwiki-namespace' => 'Цілёвый простор назв:', 'import-upload-filename' => 'Назва файлу:', 'import-comment' => 'Коментарь:', -'importtext' => 'Просиме Вас, експортуйте сторінку з іншой вікі помочов [[Special:Export| експорт]], уложте файл на ваш діск а потім го награйте ту.', +'importtext' => 'Просиме Вас, експортуйте сторінку з іншой вікі помочов [[Special:Export|інштрументу на експорт]], уложте файл на ваш діск а потім го награйте ту.', 'importstart' => 'Імпорт сторінок…', 'import-revision-count' => '$1 {{PLURAL:$1|ревізія|ревізії|ревізій}}', 'importnopages' => 'Не є што імпортовати.', +'imported-log-entries' => '{{PLURAL:$1|Наімпортованый 1 протоколовачій запис|Наімпортованы $1 протоколовачі записы|Наімпортованых $1 протоколовачіх записів}}.', 'importfailed' => 'Імпорт ся не подарив: $1', 'importunknownsource' => 'Незнамый тіп імпортованой сторінкы', 'importcantopen' => 'Не дало ся отворити файл імпорту', @@ -2393,21 +2482,23 @@ $1 є уж заблокованый(а). Хочете змінити наста 'tooltip-ca-nstab-media' => 'Вказати сторінку файлу', 'tooltip-ca-nstab-special' => 'Шпеціална сторінка, она є недоступна про едітованя', 'tooltip-ca-nstab-project' => 'Сторінка проєкту', -'tooltip-ca-nstab-image' => 'Відїти код сторінкы', +'tooltip-ca-nstab-image' => 'Видїти код сторінкы', 'tooltip-ca-nstab-mediawiki' => 'Вказати повідомлїня сістемы', 'tooltip-ca-nstab-template' => 'Видїти шаблону', -'tooltip-ca-nstab-help' => 'Відїти сторінку помочі', +'tooltip-ca-nstab-help' => 'Видїти сторінку помочі', 'tooltip-ca-nstab-category' => 'Сторінка катеґорії', 'tooltip-minoredit' => 'Позначіти тото як незначне едітованя', 'tooltip-save' => 'Уложыти вашы зміны', 'tooltip-preview' => 'Нагляд сторінкы, просиме Вас, хоснуйте перед уложінём!', 'tooltip-diff' => 'Вказати зміны, што были зроблены в тексті.', -'tooltip-compareselectedversions' => 'Відїти роздїл міджі двома указаныма верзіями той сторінкы.', +'tooltip-compareselectedversions' => 'Видїти роздїл міджі двома указаныма верзіями той сторінкы.', 'tooltip-watch' => 'Придати тоту сторінку до списку слїдованых', 'tooltip-recreate' => 'Обновити сторінку і кідь была змазана', 'tooltip-upload' => 'Почати одосыланя', 'tooltip-rollback' => 'Єдным кликом вернути зміны, зроблены послїдным приспівателём', 'tooltip-undo' => 'Зрушыти зміны і вказати попереднїй перегляд. Доволяє придати причіну до ресуме.', +'tooltip-preferences-save' => 'Уложыти наставлїня', +'tooltip-summary' => 'Задайте курте згорнутя', # Metadata 'nodublincore' => 'На тім сервері є выпнуте ґенерованя метадат Dublin Core RDF.', @@ -2496,26 +2587,32 @@ $1', 'nextdiff' => 'Новше едітованя →', # Media information +'mediawarning' => "'''Увага''': Тот тіп файлу може обсяговати шкодливый код. +Отворінём файлу можете огрозити свій компютер.", 'imagemaxsize' => "Максімалный розмір образку:
    ''(на сторінцї з пописом файлу)''", 'thumbsize' => 'Великость нагляду:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|сторінка|сторінкы|сторінок}}', -'file-info-size' => '($1 × $2 пікселів, розмір файлу: $3, MIME-тип: $4)', +'file-info' => 'розмір файлу: $1, MIME-тіп: $2', +'file-info-size' => '$1 × $2 пікселів, розмір файлу: $3, MIME-тип: $4', 'file-nohires' => 'Не є верзія з векшым розлишінём.', -'svg-long-desc' => '(SVG-файл, номінално $1 × $2 пікселів, розмір файлу: $3)', +'svg-long-desc' => 'SVG-файл, номінално $1 × $2 пікселів, розмір файлу: $3', 'show-big-image' => 'Повне розлишіня', 'show-big-image-thumb' => 'Розмір перегляду: $1 × $2 пікселів', 'file-info-gif-looped' => 'в слючцї', 'file-info-gif-frames' => '$1 {{PLURAL:$1|снимок|снимкы|снимків}}', +'file-info-png-looped' => 'в слючцї', +'file-info-png-repeat' => 'повторяне $1{{PLURAL:$1|раз|разы}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|снимок|снимкы|снимків}}', # Special:NewFiles 'newimages' => 'Ґалерія новых файлів', 'imagelisttext' => "Ниже є {{plural:$1|єден файл|список '''$1''' файлів сортованых $2|список '''$1''' файлів сортованых $2}}.", 'newimages-summary' => 'На тій шпеціалній сторінцї ся зображують остатнї начітаны файлы.', 'newimages-legend' => 'Філтер', -'newimages-label' => 'Назва файлу (або єй частина):', +'newimages-label' => 'Назва файлу (або єй часть):', 'showhidebots' => '($1 ботів)', -'noimages' => 'Не є што відїти.', +'noimages' => 'Не є што зобразити.', 'ilsubmit' => 'Глядати', 'bydate' => 'подля датуму', 'sp-newimages-showfrom' => 'Вказати новы файлы почінаючі од $2, $1', @@ -2579,8 +2676,8 @@ $1', 'exif-colorspace' => 'Фаребный простор', 'exif-componentsconfiguration' => 'Конфіґурація компонентів фарбы', 'exif-compressedbitsperpixel' => 'Компрімачный режім', -'exif-pixelydimension' => 'Платна шырка образу', -'exif-pixelxdimension' => 'Платна вышка образу', +'exif-pixelydimension' => 'Шырка образчіка', +'exif-pixelxdimension' => 'Вышка образчіка', 'exif-makernote' => 'Позначкы выробника', 'exif-usercomment' => 'Додатковый коментарь', 'exif-relatedsoundfile' => 'Звязаный звуковый файл', @@ -2596,9 +2693,9 @@ $1', 'exif-spectralsensitivity' => 'Спектрална чутливость', 'exif-isospeedratings' => 'Світлочутливость ISO', 'exif-oecf' => 'OECF (коефіцієнт оптікоелектрічного перетворїня)', -'exif-shutterspeedvalue' => 'Швыдкость спущі', -'exif-aperturevalue' => 'Цлона', -'exif-brightnessvalue' => 'Світлость', +'exif-shutterspeedvalue' => 'Експозічный час (APEX)', +'exif-aperturevalue' => 'Цлона (APEX)', +'exif-brightnessvalue' => 'Яс (APEX)', 'exif-exposurebiasvalue' => 'Компензація експозіції', 'exif-maxaperturevalue' => 'Найменша цлона', 'exif-subjectdistance' => 'Далеко ку обєкту', @@ -2662,6 +2759,7 @@ $1', 'exif-gpsareainformation' => 'Назва области GPS', 'exif-gpsdatestamp' => 'GPS датум', 'exif-gpsdifferential' => 'Діференціална корекція GPS', +'exif-objectname' => 'Курта назва', # EXIF attributes 'exif-compression-1' => 'Нестиснутый', @@ -2819,25 +2917,25 @@ $1', 'limitall' => 'вшыткы', # E-mail address confirmation -'confirmemail' => 'Підтверджіня адресы ел. пошты', -'confirmemail_noemail' => 'Во своїм [[Special:Preferences|хосновательскім наставлїню]] сьте не зазначіли платну адресу ел. пошты.', -'confirmemail_text' => 'Тота вікі выжадує, жебы сьте перед хоснованым дакотрых функцій підтвердили свою адресу електронічной пошты. Кликнутём на клапку ниже одошлете підтверджовачій лист на вами зазначену адресу. Тот лист обсягує одказ і код підтверджіня; зображінём одказованой сторінкы во своїм інтернетовім переглядачу підтвердите, же зазначена адреса є платна.', -'confirmemail_pending' => 'Підтверджовачій код быв посланый ва вашу адресу ел. пошты. +'confirmemail' => 'Підтверджіня адресы ел. пошты', +'confirmemail_noemail' => 'Во своїм [[Special:Preferences|хосновательскім наставлїню]] сьте не зазначіли платну адресу ел. пошты.', +'confirmemail_text' => 'Тота вікі выжадує, жебы сьте перед хоснованым дакотрых функцій підтвердили свою адресу електронічной пошты. Кликнутём на клапку ниже одошлете підтверджовачій лист на вами зазначену адресу. Тот лист обсягує одказ і код підтверджіня; зображінём одказованой сторінкы во своїм інтернетовім переглядачу підтвердите, же зазначена адреса є платна.', +'confirmemail_pending' => 'Підтверджовачій код быв посланый ва вашу адресу ел. пошты. Кідь сьте собі конто створили перед моментом, спробуйте на доручіня коду пару минут почекати, покы пожадате о новый.', -'confirmemail_send' => 'Одослати підтверджовачій код', -'confirmemail_sent' => 'Підтверджовачій лист быв посланый.', -'confirmemail_oncreate' => 'На вашу адресу ел. пошты быв посланый підтверджовачій код. +'confirmemail_send' => 'Одослати підтверджовачій код', +'confirmemail_sent' => 'Підтверджовачій лист быв посланый.', +'confirmemail_oncreate' => 'На вашу адресу ел. пошты быв посланый підтверджовачій код. Тот код не треба про приголошіня, але буде го треба про актівацію дакотрых функцій заложеных на хоснованю ел. пошты.', -'confirmemail_sendfailed' => '{{GRAMMAR:3sg|{{SITENAME}}}} ся не подарило одослати підтверджовачій лист. Перевірте ці адреса не обсягує хыбны буквы. +'confirmemail_sendfailed' => '{{GRAMMAR:3sg|{{SITENAME}}}} ся не подарило одослати підтверджовачій лист. Перевірте ці адреса не обсягує хыбны буквы. Поштовый проґрам одповив: $1', -'confirmemail_invalid' => 'Неплатный підтверджовачій код. Може уж уплинула платность коду.', -'confirmemail_needlogin' => 'Про підтверджіня своёй адрес ел. пошты ся мусите $1.', -'confirmemail_success' => 'Ваша адреса ел. пошты была підтверджена. Нынї ся можете [[Special:UserLogin|приголосити]] і хосновати вікі.', -'confirmemail_loggedin' => 'Ваша адреса ел. пошты была підтверджена.', -'confirmemail_error' => 'Не подарило ся уложыти ваше підтверджіня.', -'confirmemail_subject' => 'Підтверджіня адресы ел. пошты про {{grammar:4sg|{{SITENAME}}}}', -'confirmemail_body' => 'Хтось (асі вы, з IP адресы $1) собі реґістровав конто з меном "$2" і тов адресов ел. пошты на {{grammar:6sg|{{SITENAME}}}}. +'confirmemail_invalid' => 'Неплатный підтверджовачій код. Може уж уплинула платность коду.', +'confirmemail_needlogin' => 'Про підтверджіня своёй адрес ел. пошты ся мусите $1.', +'confirmemail_success' => 'Ваша адреса ел. пошты была підтверджена. Нынї ся можете [[Special:UserLogin|приголосити]] і хосновати вікі.', +'confirmemail_loggedin' => 'Ваша адреса ел. пошты была підтверджена.', +'confirmemail_error' => 'Не подарило ся уложыти ваше підтверджіня.', +'confirmemail_subject' => 'Підтверджіня адресы ел. пошты про {{grammar:4sg|{{SITENAME}}}}', +'confirmemail_body' => 'Хтось (асі вы, з IP адресы $1) собі реґістровав конто з меном "$2" і тов адресов ел. пошты на {{grammar:6sg|{{SITENAME}}}}. Кідь собі желате актівовати функції ел. пошты на {{grammar:6sg|{{SITENAME}}}}, так про підтверджіня, же тота адреса справды належыть вам, перейдите своїм інтернетовым переглядачом на наслїдуючу адресу: @@ -2848,8 +2946,35 @@ $3 $5 Платность того коду підтверджіня експірує $4.', -'confirmemail_invalidated' => 'Підтверджіня адресы електронічной пошты было зрушене', -'invalidateemail' => 'Зрушыти підтверджіня адресы електронічной пошты', +'confirmemail_body_changed' => 'Хтось (асі вы, з IP адресы $1), +змінив адресу ел. пошты ку конту "$2" на {{grammar:6sg|{{SITENAME}}}} на тоту адресу. + +Кідь собі желате актівовати функції ел. пошты на {{grammar:6sg|{{SITENAME}}}}, так про підтверджіня, же тота адреса справды належыть вам, перейдите своїм інтернетовым переглядачом на наслїдуючу адресу: + +$3 + +Кідь сьте о тото підтверджіня *не жадали*, кликните на наслїднїй одказ, котрым підтверджіня зрушыте: + +$5 + +Платность того коду підтверджіня експірує $4.', +'confirmemail_body_set' => 'Дахто (асі вы, з IP адресы $1) наставив імейлову адресу +конта „$2“ на {{grammar:6sg|{{SITENAME}}}} на тоту адресу. + +Кідь хочете знову актівовати імейловы функції на +{{grammar:6sg|{{SITENAME}}}}, так про підтверджіня, же тота адреса справды +належыть вам, ідьте своїм інтернетовым перезерачом на адресу ниже: + +$3 + +Кідь вам тото конто *не належыть*, кликните на наступный +одказ з чім підтверджіня зрушыте: + +$5 + +Платность того коду кінчіть $4.', +'confirmemail_invalidated' => 'Підтверджіня адресы електронічной пошты было зрушене', +'invalidateemail' => 'Зрушыти підтверджіня адресы електронічной пошты', # Scary transclusion 'scarytranscludedisabled' => '[Вкладаня шаблон міджі вікі є выпнуте]', @@ -2889,6 +3014,7 @@ $1', 'table_pager_first' => 'Перша сторінка', 'table_pager_last' => 'Послїдня сторінка', 'table_pager_limit' => 'Вказовати $1 елементів на сторінцї', +'table_pager_limit_label' => 'Записів на сторінку:', 'table_pager_limit_submit' => 'Выконати', 'table_pager_empty' => 'Ніч не было найджене', @@ -2944,6 +3070,7 @@ $1', 'version-specialpages' => 'Шпеціалны сторінкы', 'version-parserhooks' => 'Припойны пункты парсера', 'version-variables' => 'Перемінны', +'version-skins' => 'Взгляды', 'version-other' => 'Інше', 'version-mediahandlers' => 'Обслуга медії', 'version-hooks' => 'Припойны пункты', @@ -2955,6 +3082,13 @@ $1', 'version-hook-subscribedby' => 'Підписаный на', 'version-version' => '(Верзія $1)', 'version-license' => 'Ліценція', +'version-poweredby-credits' => "Тота вікі біжыть на '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001–$1 $2.", +'version-poweredby-others' => 'іншы', +'version-license-info' => 'MediaWiki є слободный софтвер; можете го шырити або управляти подля подмінок GNU General Public License, выдаваной Free Software Foundation; будь верзія 2 той ліценції або (подля вашого уважіня) будьяка пізнїша верзія. + +MediaWiki є дістрібуована в надїї, же буде хосновна, але БЕЗ БУДЬЯКОЙ ЗАРУКЫ; не давають ся ани зарукы ПРОДАЙНОСТИ або ВАЛУШНОСТИ ПРО СТАНОВЛЕНЫЙ ЦІЛЬ. Детайлы ся дочітате в текстї GNU General Public License. + +[{{SERVER}}{{SCRIPTPATH}}/COPYING Kopii GNU General Public License] сьте мали обтримати вєдно з тым проґрамом, кідь нїт, напиште на Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA або [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html сі єй прочітайте онлайн].', 'version-software' => 'Іншталованый софтвер', 'version-software-product' => 'Продукт', 'version-software-version' => 'Верзія', @@ -3024,6 +3158,15 @@ $1', 'tags-edit' => 'едітовати', 'tags-hitcount' => '$1 {{PLURAL:$1|зміна|зміны|змін}}', +# Special:ComparePages +'comparepages' => 'Порівнаня сторінок', +'compare-selector' => 'Порівнаня ревізій сторінок', +'compare-page1' => 'Сторінка 1', +'compare-page2' => 'Сторінка 2', +'compare-rev1' => 'Ревізія 1', +'compare-rev2' => 'Ревізія 2', +'compare-submit' => 'Порівнати', + # Database error messages 'dberr-header' => 'Тота вікі має даякы проблемы', 'dberr-problems' => 'Перебачте! Тот сервер має теперь технічны проблемы.', @@ -3040,8 +3183,13 @@ $1', 'htmlform-float-invalid' => 'Зазначена величіна не є чісло.', 'htmlform-int-toolow' => 'Вами зазначена величіна є менша як доволене мінімум $1', 'htmlform-int-toohigh' => 'Вами зазначена величіна є менша як доволене максімум $1', +'htmlform-required' => 'Тота величіна є повинна', 'htmlform-submit' => 'Одослати', 'htmlform-reset' => 'Вернути зміны', 'htmlform-selectorother-other' => 'Інше', +# SQLite database support +'sqlite-has-fts' => '$1 з підпоров повнотекстового гляданя', +'sqlite-no-fts' => '$1 без підпоры повнотекстового гляданя', + ); diff --git a/languages/messages/MessagesRuq_cyrl.php b/languages/messages/MessagesRuq_cyrl.php index e56f776e..0fbdd0f4 100644 --- a/languages/messages/MessagesRuq_cyrl.php +++ b/languages/messages/MessagesRuq_cyrl.php @@ -255,11 +255,10 @@ $3', 'allpagessubmit' => 'Треме', # Watchlist -'watchlist' => 'Мај клајаеру', -'mywatchlist' => 'Мај клајаере', -'watchlistfor' => "(пентру '''$1''')", -'watch' => 'клајаере', -'unwatch' => 'Деклајаера', +'watchlist' => 'Мај клајаеру', +'mywatchlist' => 'Мај клајаере', +'watch' => 'клајаере', +'unwatch' => 'Деклајаера', # Displayed when you click the "watch" button and it is in the process of watching 'watching' => 'О клајаере...', diff --git a/languages/messages/MessagesRuq_latn.php b/languages/messages/MessagesRuq_latn.php index 81be996f..b1c840e1 100644 --- a/languages/messages/MessagesRuq_latn.php +++ b/languages/messages/MessagesRuq_latn.php @@ -255,11 +255,10 @@ $3', 'allpagessubmit' => 'Treme', # Watchlist -'watchlist' => 'Maj klăaeru', -'mywatchlist' => 'Maj klăaere', -'watchlistfor' => "(pentru '''$1''')", -'watch' => 'klăaere', -'unwatch' => 'Deklăaera', +'watchlist' => 'Maj klăaeru', +'mywatchlist' => 'Maj klăaere', +'watch' => 'klăaere', +'unwatch' => 'Deklăaera', # Displayed when you click the "watch" button and it is in the process of watching 'watching' => 'O klăaere...', diff --git a/languages/messages/MessagesSa.php b/languages/messages/MessagesSa.php index aa0e8977..b853caa6 100644 --- a/languages/messages/MessagesSa.php +++ b/languages/messages/MessagesSa.php @@ -8,12 +8,15 @@ * @file * * @author Bharata + * @author Bhawani Gautam * @author Hemant wikikosh1 * @author Hrishikesh.kb + * @author Htt * @author Kaustubh * @author Mahitgar * @author Naveen Sankar * @author Omnipaedista + * @author Vibhijain * @author రాకేశ్వర */ @@ -35,109 +38,121 @@ $digitTransformTable = array( $linkPrefixExtension = false; $namespaceNames = array( - NS_MEDIA => 'माध्यम', + NS_MEDIA => 'माध्यमम्', NS_SPECIAL => 'विशेष', - NS_TALK => 'संभाषणं', + NS_TALK => 'सम्भाषणम्', NS_USER => 'योजकः', - NS_USER_TALK => 'योजकसंभाषणं', - NS_PROJECT_TALK => '$1संभाषणं', - NS_FILE => 'चित्रं', - NS_FILE_TALK => 'चित्रसंभाषणं', + NS_USER_TALK => 'योजकसम्भाषणम्', + NS_PROJECT_TALK => '$1सम्भाषणम्', + NS_FILE => 'चित्रम्', + NS_FILE_TALK => 'चित्रसम्भाषणम्', NS_MEDIAWIKI => 'मिडीयाविकी', - NS_MEDIAWIKI_TALK => 'मिडियाविकीसंभाषणं', - NS_TEMPLATE => 'बिंबधर', - NS_TEMPLATE_TALK => 'बिंबधर संभाषणं', - NS_HELP => 'सहाय्य', - NS_HELP_TALK => 'सहाय्यसंभाषणं', + NS_MEDIAWIKI_TALK => 'मिडियाविकीसम्भाषणम्', + NS_TEMPLATE => 'फलकम्', + NS_TEMPLATE_TALK => 'फलकस्य_सम्भाषणम्', + NS_HELP => 'सहाय्यम्', + NS_HELP_TALK => 'सहाय्यस्य_सम्भाषणम्', NS_CATEGORY => 'वर्गः', - NS_CATEGORY_TALK => 'वर्गसंभाषणं', + NS_CATEGORY_TALK => 'वर्गसम्भाषणम्', ); $namespaceAliases = array( - 'उपकारः' => NS_HELP, - 'उपकारसंभाषणं' => NS_HELP_TALK, + 'माध्यम' => NS_MEDIA, + 'संभाषणं' => NS_TALK, + 'योजकसंभाषणं' => NS_USER_TALK, + '$1संभाषणं' => NS_PROJECT_TALK, + 'चित्रं' => NS_FILE, + 'चित्रसंभाषणं' => NS_FILE_TALK, + 'मिडियाविकीसंभाषणं' => NS_MEDIAWIKI_TALK, + 'बिंबधर' => NS_TEMPLATE, + 'बिंबधर संभाषणं' => NS_TEMPLATE_TALK, + 'सहाय्य' => NS_HELP, + 'सहाय्यसंभाषणं' => NS_HELP_TALK, + 'उपकारः' => NS_HELP, + 'उपकारसंभाषणं' => NS_HELP_TALK, + 'वर्गसंभाषणं' => NS_CATEGORY_TALK, ); $specialPageAliases = array( 'DoubleRedirects' => array( 'पुनर्निर्देशनद्वंद्व' ), 'BrokenRedirects' => array( 'खण्डीतपुनर्निर्देशन' ), 'Disambiguations' => array( 'नि:संदिग्धीकरण' ), - 'Userlogin' => array( 'सदस्यप्रवेश' ), + 'Userlogin' => array( 'सदस्यप्रवेशन' ), 'Userlogout' => array( 'सदस्यबहिर्गमन' ), 'CreateAccount' => array( 'सृज्उपयोजकसंज्ञा' ), - 'Preferences' => array( 'प्रियविकल्प' ), - 'Watchlist' => array( 'निरीक्षा सूची' ), - 'Recentchanges' => array( 'नवीनतम परिवर्तन' ), + 'Preferences' => array( 'इष्टतमानि' ), + 'Watchlist' => array( 'निरीक्षा_सूची' ), + 'Recentchanges' => array( 'नवीनतम_परिवर्तन' ), 'Upload' => array( 'भारंन्यस्यति' ), - 'Listfiles' => array( 'चित्रसूची' ), - 'Newimages' => array( 'नूतनसंचिका' ), + 'Listfiles' => array( 'चित्रसूची', 'संचिकासूचि' ), + 'Newimages' => array( 'नूतनसंचिका', 'नूतनचित्रानि' ), 'Listusers' => array( 'सदस्यासूची' ), 'Listgrouprights' => array( 'गटअधिकारसूची' ), 'Statistics' => array( 'सांख्यिकी' ), - 'Randompage' => array( 'अविशीष्टपृष्ठ' ), - 'Lonelypages' => array( 'अकलपृष्ठ' ), - 'Uncategorizedpages' => array( 'अवर्गीकृतपृष्ठ' ), + 'Randompage' => array( 'अविशीष्टपृष्ठम्' ), + 'Lonelypages' => array( 'अकलपृष्टानि' ), + 'Uncategorizedpages' => array( 'अवर्गीकृतपृष्टानि' ), 'Uncategorizedcategories' => array( 'अवर्गीकृतवर्ग' ), - 'Uncategorizedimages' => array( 'अवर्गीकृतसंचिका' ), - 'Uncategorizedtemplates' => array( 'अवर्गीकृतबिंबधर' ), + 'Uncategorizedimages' => array( 'अवर्गीकृतसंचिका', 'अवर्गीकृतचित्रानि' ), + 'Uncategorizedtemplates' => array( 'अवर्गीकृतफलकानि' ), 'Unusedcategories' => array( 'अप्रयूक्तवर्ग' ), 'Unusedimages' => array( 'अप्रयूक्तसंचिका' ), - 'Wantedpages' => array( 'प्रार्थितलेख' ), + 'Wantedpages' => array( 'प्रार्थितपृष्टानि' ), 'Wantedcategories' => array( 'प्रार्थितवर्ग' ), 'Wantedfiles' => array( 'प्रार्थितसंचिका' ), - 'Wantedtemplates' => array( 'प्रार्थितबिंबधर' ), - 'Mostlinked' => array( 'अधिकतमसम्भन्दिन् पृष्ठ' ), - 'Mostlinkedcategories' => array( 'अधिकतमसम्भन्दिन् वर्ग' ), - 'Mostlinkedtemplates' => array( 'अधिकतमसम्भन्दिन् बिंबधर' ), - 'Mostimages' => array( 'अधिकतमसम्भन्दिन् संचिका' ), + 'Wantedtemplates' => array( 'प्रार्थितफलकानि' ), + 'Mostlinked' => array( 'अधिकतमसम्भन्दिन्_पृष्टानि', 'अधिकतमसम्भन्दिन्' ), + 'Mostlinkedcategories' => array( 'अधिकतमसम्भन्दिन्_वर्ग' ), + 'Mostlinkedtemplates' => array( 'अधिकतमसम्भन्दिन्_फलकानि' ), + 'Mostimages' => array( 'अधिकतमसम्भन्दिन्_संचिका' ), 'Mostcategories' => array( 'अधिकतमवर्ग' ), - 'Mostrevisions' => array( 'अधिकतमपरिवर्त' ), + 'Mostrevisions' => array( 'अधिकतमपरिवर्तन' ), 'Fewestrevisions' => array( 'स्वल्पपरिवर्तन' ), - 'Shortpages' => array( 'लघुपृष्ठ' ), - 'Longpages' => array( 'दीर्घपृष्ठ' ), - 'Newpages' => array( 'नूतनपृष्ठ' ), - 'Ancientpages' => array( 'पूर्वतनपृष्ठ' ), - 'Deadendpages' => array( 'निराग्रपृष्ठ' ), - 'Protectedpages' => array( 'सुरक्षितपृष्ठ' ), - 'Protectedtitles' => array( 'सुरक्षितशिर्षक' ), - 'Allpages' => array( 'सर्वपृष्ठ' ), + 'Shortpages' => array( 'लघुपृष्टानि' ), + 'Longpages' => array( 'दीर्घपृष्टानि' ), + 'Newpages' => array( 'नूतनपृष्टानि' ), + 'Ancientpages' => array( 'पूर्वतनपृष्टानि' ), + 'Deadendpages' => array( 'निराग्रपृष्टानि' ), + 'Protectedpages' => array( 'सुरक्षितपृष्टानि' ), + 'Protectedtitles' => array( 'सुरक्षितशिर्षकम्' ), + 'Allpages' => array( 'सर्वपृष्टानि' ), 'Prefixindex' => array( 'उपसर्गअनुक्रमणी' ), 'Ipblocklist' => array( 'प्रतिबन्धसूची' ), - 'Specialpages' => array( 'विशेषपृष्ठ' ), - 'Contributions' => array( 'योगदान' ), + 'Specialpages' => array( 'विशेषपृष्टानि' ), + 'Contributions' => array( 'योगदानम्' ), 'Emailuser' => array( 'विपत्रयोजक' ), 'Confirmemail' => array( 'विपत्रपुष्टिकृते' ), - 'Whatlinkshere' => array( 'किमपृष्ठ सम्बद्धंकरोति' ), - 'Recentchangeslinked' => array( 'नवीनतमसम्भन्दिन परिवर्त' ), + 'Whatlinkshere' => array( 'किमपृष्ठ_सम्बद्धंकरोति' ), + 'Recentchangeslinked' => array( 'नवीनतमसम्भन्दिन_परिवर्त' ), 'Movepage' => array( 'पृष्ठस्थानान्तर' ), 'Blockme' => array( 'मदर्थेप्रतिबन्ध' ), 'Booksources' => array( 'पुस्तकस्रोत' ), - 'Categories' => array( 'वर्ग' ), + 'Categories' => array( 'वर्गः' ), 'Export' => array( 'निर्यात' ), 'Version' => array( 'आवृत्ती' ), 'Allmessages' => array( 'सर्वप्रणाली-संदेश' ), 'Log' => array( 'अङ्कन' ), 'Blockip' => array( 'सदस्यप्रतिबन्ध' ), - 'Undelete' => array( 'प्रत्यादिश् परित्याग' ), + 'Undelete' => array( 'प्रत्यादिश्_परित्याग' ), 'Import' => array( 'आयात' ), 'Lockdb' => array( 'विदाद्वारंबन्ध्' ), 'Unlockdb' => array( 'विवृतविदाद्वारंतालक' ), 'Userrights' => array( 'योजकआधिकार' ), - 'MIMEsearch' => array( 'विविधामाप (माईम) शोधसि' ), + 'MIMEsearch' => array( 'विविधामाप_(माईम)_शोधसि' ), 'FileDuplicateSearch' => array( 'अनुकृतसंचिकाशोध' ), 'Unwatchedpages' => array( 'अनिरिक्षीतपृष्ठ' ), 'Listredirects' => array( 'विचालन्‌सूची' ), 'Revisiondelete' => array( 'आवृत्तीपरित्याग' ), 'Unusedtemplates' => array( 'अप्रयूक्तबिंबधर' ), 'Randomredirect' => array( 'अविशीष्टविचालन्‌' ), - 'Mypage' => array( 'मदीयपृष्ठ' ), - 'Mytalk' => array( 'मदीयसंवाद' ), - 'Mycontributions' => array( 'मदीययोगदान' ), + 'Mypage' => array( 'मम_पृष्टम्' ), + 'Mytalk' => array( 'मदीयसंवादम्' ), + 'Mycontributions' => array( 'मदीययोगदानम्' ), 'Listadmins' => array( 'प्रचालकसूची' ), 'Listbots' => array( 'स्वयंअनुकृसूची' ), - 'Popularpages' => array( 'लोकप्रियपृष्ठ' ), + 'Popularpages' => array( 'लोकप्रियपृष्टानि' ), 'Search' => array( 'शोध' ), - 'Resetpass' => array( 'सङ्केतशब्दपुन:प्रयु्क्ता' ), + 'Resetpass' => array( 'सङ्केतशब्दपुन:प्रयुक्ता' ), 'Withoutinterwiki' => array( 'आन्तरविकिहीन' ), 'MergeHistory' => array( 'इतिहाससंयोग' ), 'Filepath' => array( 'संचिकापथ' ), @@ -267,8 +282,7 @@ $messages = array( 'tog-editsection' => '[संपादयतु़] इति संबंधनद्वारा विभाग-संपादनं समर्थयतु।', 'tog-editsectiononrightclick' => 'विभाग-शीर्षकाणामुपरि दक्षिणक्लिक्कारेण विभागसंपादनं समर्थयतु (जावास्क्रिप्टम् आवश्यकम्)।', 'tog-showtoc' => 'अनुक्रमणिकां दर्शयतु (त्र्यधिकशीर्षकयुतेषु पृष्ठेषु)।', -'tog-rememberpassword' => 'अस्मिन् संगणके मम संप्रवेशः (लॉगिन् इति) स्मृतीभवेत्।', -'tog-editwidth' => 'संपादन-कोष्ठकं पटलव्यापिरूपेण दर्शयतु।', +'tog-rememberpassword' => 'अस्मिन् संगणके मम प्रवेशसंबंधि-सूचनाः स्मरतु (अधिकतम $1 {{PLURAL:$1|दिनम्|दिनानि}} पर्यन्तम्)', 'tog-watchcreations' => 'मया रचितानि पृष्ठाणि मम निरीक्षासूचिकायां योजयतु।', 'tog-watchdefault' => 'मया संपादितानि पृष्ठाणि मम निरीक्षासूचिकायां योजयतु।', 'tog-watchmoves' => 'मया चालितानि पृष्ठाणि मम निरीक्षासूचिकायां योजयतु।', @@ -276,7 +290,7 @@ $messages = array( 'tog-minordefault' => 'मम सर्वाणि संपादनानि लघुत्वेन वर्तन्ते।', 'tog-previewontop' => 'सम्पादन-पिटकस्योपरि प्राग्दृश्यं दर्शयतु।', 'tog-previewonfirst' => 'प्रथम-संपादन-पश्चात् प्राग्दृश्यं दर्शयतु।', -'tog-nocache' => 'पृष्ठाणि उपस्मृतौ (कैश्-इत्यस्मिन्) मा धारयतु।', +'tog-nocache' => 'पृष्ठ धारक-ब्राउजरं निस्क्रियतु ।', 'tog-enotifwatchlistpages' => 'मम निरीक्षासूचिकायां सतां पृष्ठाणां परिवर्तनसमये मां विद्युत्पत्रेण (ईमेल् इति) ज्ञापयतु।', 'tog-enotifusertalkpages' => 'मम योजकसंभाषणपृष्ठे परिवर्तिते सति मां विद्युत्पत्रेण (ईमेल् इति) ज्ञापयतु।', 'tog-enotifminoredits' => 'लघुपरिवर्तनेषु सत्सु अपि मां विद्युत्पत्रेण (ईमेल् इति) ज्ञापयतु।', @@ -284,7 +298,7 @@ $messages = array( 'tog-shownumberswatching' => 'निरीक्षमतां प्रयोक्तृणां संख्यां दर्शयतु।', 'tog-oldsig' => 'अधुनातनानां हस्ताक्षराणां प्रारूपम्।', 'tog-fancysig' => 'हस्ताक्षराणि विकिपाठवत् सन्तु (स्वचालित-संबंधनेभ्यः रहितानि)।', -'tog-externaleditor' => 'अकथिते (बाइ डिफाल्ट् इति), बाह्य संपादकं प्रयोजयतु (केवलेभ्यः निपुणेभ्यः, भवतः संगणके विशेषाः न्यासाः (सेटिंग्स् इति) आवश्यकाः)।', +'tog-externaleditor' => 'Use external editor by default (for experts only, needs special settings on your computer. [http://www.mediawiki.org/wiki/Manual:External_editors More information.])', 'tog-externaldiff' => 'अकथिते (बाइ डिफाल्ट् इति), बाह्य अंतरक्रमादेशं प्रयोजयतु (केवलेभ्यः निपुणेभ्यः, भवतः संगणके विशेषाः न्यासाः आवश्यकाः)।', 'tog-showjumplinks' => '"इत्येतत् प्रति कूर्दयतु" इति संबंधनानि समर्थयतु।', 'tog-uselivepreview' => 'संपादनेन सहैव प्राग्दृश्यं दर्शयतु (जावास्क्रिप्टम् आवश्यकम्) (प्रयोगात्मकम्)।', @@ -407,31 +421,21 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.', 'faqpage' => 'Project:बहुधा पृष्टव्याः प्रश्नाः', # Vector skin -'vector-action-addsection' => 'विषयं योजयतु', -'vector-action-delete' => 'अपाकरोतु', -'vector-action-move' => 'चालयतु', -'vector-action-protect' => 'सुरक्षितं करोतु', -'vector-action-undelete' => 'अपाकरणस्य निरसनम्', -'vector-action-unprotect' => 'सुरक्षितीकरणस्य निरसनम्', -'vector-namespace-category' => 'श्रेणी', -'vector-namespace-help' => 'सहायकपृष्ठम्', -'vector-namespace-image' => 'सञ्चिका', -'vector-namespace-main' => 'पृष्ठम्', -'vector-namespace-media' => 'माध्यम-पृष्ठम्', -'vector-namespace-mediawiki' => 'संदेशः', -'vector-namespace-project' => 'प्रकल्पपृष्ठम्', -'vector-namespace-special' => 'विशिष्टपृष्ठम्', -'vector-namespace-talk' => 'चर्चा', -'vector-namespace-template' => 'संफलकम्', -'vector-namespace-user' => 'प्रयोक्तृ-पृष्ठम्', -'vector-view-create' => 'सृजतु', -'vector-view-edit' => 'सम्पादयतु', -'vector-view-history' => 'इतिहासं दर्शयतु', -'vector-view-view' => 'पठतु', -'vector-view-viewsource' => 'स्रोतसं दर्शयतु', -'actions' => 'क्रियाः', -'namespaces' => 'नामाकाशानि', -'variants' => 'प्रकीर्णत्वेन', +'vector-action-addsection' => 'विषयं योजयतु', +'vector-action-delete' => 'अपाकरोतु', +'vector-action-move' => 'चालयतु', +'vector-action-protect' => 'सुरक्षितं करोतु', +'vector-action-undelete' => 'अपाकरणस्य निरसनम्', +'vector-action-unprotect' => 'सुरक्षितीकरणस्य निरसनम्', +'vector-simplesearch-preference' => 'संवर्धिताः अन्वेषणोपक्षेपाः समर्थीकरोतु। (केवलं वैक्टर-स्किन् इत्यस्यार्थे)', +'vector-view-create' => 'सृजतु', +'vector-view-edit' => 'सम्पादयतु', +'vector-view-history' => 'इतिहासं दर्शयतु', +'vector-view-view' => 'पठतु', +'vector-view-viewsource' => 'स्रोतसं दर्शयतु', +'actions' => 'क्रियाः', +'namespaces' => 'नामाकाशानि', +'variants' => 'प्रकीर्णत्वेन', 'errorpagetitle' => 'विभ्रमः', 'returnto' => '$1 इत्येतद् प्रति निवर्तताम्।', @@ -487,6 +491,13 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.', 'jumpto' => 'कूर्दयतु अत्र :', 'jumptonavigation' => 'सुचलनम्', 'jumptosearch' => 'अन्वेषणम्', +'view-pool-error' => 'क्षम्यताम्, परिवेषणयन्त्राणि अतिभारितानि अस्मिन् समये। +बहवः प्रयोक्तारः एतत् पृष्ठं द्रष्टुं प्रयतमानाः सन्ति। +कृपया किंचित्कालं प्रतीक्षताम् भवान्, तदा क्रियताम् प्रयासः। +$1', +'pool-timeout' => 'कालावधिः समाप्ता, यन्त्रणस्यार्थे प्रतीक्षते', +'pool-queuefull' => 'कुण्डपंक्तिः (पूल् क्यू इत्येषा) पूर्णा अस्ति।', +'pool-errorunknown' => 'अज्ञाता त्रुटिः', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} इत्यस्य विषये', @@ -508,7 +519,12 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.', 'privacy' => 'नैजता-नीतिः', 'privacypage' => 'Project:नैजता-नीतिः', -'badaccess' => 'अनुज्ञा-विभ्रमः', +'badaccess' => 'अनुज्ञा-विभ्रमः', +'badaccess-group0' => 'भवदर्थम्, अत्र प्रार्थिता क्रिया प्रवर्तितुं न अनुमतम्।', +'badaccess-groups' => 'भवता प्रार्थिता क्रिया केवले {{PLURAL:$2|अस्मिन् समूहे|एतेषु समूहेषु}} अनुमता अस्ति: $1।', + +'versionrequired' => 'मीडीयाविके: $1 संस्करण आवश्यकः ।', +'versionrequiredtext' => 'एतत्पृष्ठं प्रयोक्तुं मीडियाविकि इत्येतस्य $1तमा आवृत्तिः आवश्यकी। पश्यतु [[Special:Version|आवृत्ति-सूचिका]]', 'ok' => 'आम्', 'pagetitle' => '', @@ -526,6 +542,7 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.', 'toc' => 'अन्तर्विषयाः', 'showtoc' => 'दर्शयतु', 'hidetoc' => 'गोपयतु', +'thisisdeleted' => '$1 दर्शयेत् वा प्रत्यानयेत् वा?', 'viewdeleted' => '$1 पश्यतु?', 'feedlinks' => 'अनुबन्ध:', 'site-rss-feed' => '$1 आरएसएस पूरणम्', @@ -551,22 +568,30 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.', 'nosuchspecialpage' => 'एतादृश विशेष पृष्टम् नास्ति', # General errors -'error' => 'विभ्रम', -'databaseerror' => 'दत्ताधार-विभ्रमः', -'readonly' => 'डाटाबेस बन्धितमस्ति', -'missing-article' => 'दत्ताधारेण(डाटाबेस् इत्यनेन) "$1" $2 इतिनामकं पृष्ठं नैव प्राप्तम्, यत्तु प्राप्तीभवितव्यमासीत्। +'error' => 'विभ्रम', +'databaseerror' => 'दत्ताधार-विभ्रमः', +'readonly' => 'डाटाबेस बन्धितमस्ति', +'missing-article' => 'दत्ताधारेण(डाटाबेस् इत्यनेन) "$1" $2 इतिनामकं पृष्ठं नैव प्राप्तम्, यत्तु प्राप्तीभवितव्यमासीत्। कदाचित् एवं तु अवसिते सति अंतरे अथवा अपाकृतस्य पृष्ठस्य इतिहास-संबंधनात् भवति। यदि न एवं विद्यते, तदा भवता क्रमादेश-कीटकं अन्विष्टम्। कृपया केनचित् [[Special:ListUsers/sysop|प्रचालकेन]] सह अस्य पृष्ठस्य URL इत्येतद्- ज्ञापनपूर्वकं संभाषताम्।', -'missingarticle-rev' => '(आवृत्तिः# :$1)', -'missingarticle-diff' => '(व्यतिरेक: $1, $2)', -'unexpected' => 'अप्रतीक्षितमूल्यम् : "$1"="$2"।', -'badtitletext' => 'प्रार्थितं पृष्ठ-शीर्षकं अमान्यं वा, रिक्तं वा, अथवा अशुद्धतया संबंद्धं आंतर्भाषिकं, आंतर्विकीयं वा शीर्षकमस्ति। अस्मिन् एकं एकाधिकानि वा एतादृशाणि अक्षराणि विद्यन्ते येषां प्रयोगं शीर्षकेषु अशक्यम्।', -'viewsource' => 'स्रोतः दर्शयतु', -'viewsourcefor' => '$1 कृते', +'missingarticle-rev' => '(आवृत्तिः# :$1)', +'missingarticle-diff' => '(व्यतिरेक: $1, $2)', +'internalerror' => 'आन्तरिका त्रुटिः', +'internalerror_info' => 'आन्तरिका त्रुटिः: $1', +'directorycreateerror' => '$1 इति निर्देशिकां स्रष्टुं न अपारयत्', +'unexpected' => 'अप्रतीक्षितमूल्यम् : "$1"="$2"।', +'formerror' => 'त्रुटिः : प्रारूपं समर्पयितुं न अपारयत्', +'badarticleerror' => 'अस्मिन् पृष्ठे एषा क्रिया कर्तुं न शक्या।', +'badtitletext' => 'प्रार्थितं पृष्ठ-शीर्षकं अमान्यं वा, रिक्तं वा, अथवा अशुद्धतया संबंद्धं आंतर्भाषिकं, आंतर्विकीयं वा शीर्षकमस्ति। अस्मिन् एकं एकाधिकानि वा एतादृशाणि अक्षराणि विद्यन्ते येषां प्रयोगं शीर्षकेषु अशक्यम्।', +'viewsource' => 'स्रोतः दर्शयतु', +'viewsourcefor' => '$1 कृते', + +# Virus scanner +'virus-unknownscanner' => 'अज्ञातं विषाणुप्रतिकारकम्:', # Login and logout pages 'welcomecreation' => '==स्वागतम्‌, $1!== @@ -575,7 +600,7 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.', 'yourname' => 'प्रयोक्तृ-नाम :', 'yourpassword' => 'रहस्यवाक् :', 'yourpasswordagain' => 'रहस्यवाक् पुनः लिखतु।', -'remembermypassword' => 'अस्मिन् संगणके मम प्रवेशसंबंधि-सूचनाः स्मरतु', +'remembermypassword' => 'अस्मिन् संगणके मम प्रवेशसंबंधि-सूचनाः स्मरतु (अधिकतम् $1 {{PLURAL:$1|दिन्|दिन्}})', 'login' => 'प्रविशतु', 'nav-login-createaccount' => 'प्रविशतु / लेखां सृजतु', 'userlogin' => 'प्रविशतु / लेखां सृजतु', @@ -586,8 +611,11 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.', 'nologinlink' => 'लेखां रचयतु', 'createaccount' => 'लेखां रचयतु', 'gotaccountlink' => 'प्रविशतु', +'createaccountreason' => 'कारणम्', +'createaccounterror' => '$1 इति लेखां स्रष्टुं न अपारयत्', 'loginsuccesstitle' => 'सुस्वागतम्‌। प्रवेशः सिद्धः।', 'mailmypassword' => 'नूतनं रहस्यवाक् विद्युत्पत्रेण प्रेषयतु', +'accountcreated' => 'खाता निर्मित', 'loginlanguagelabel' => 'भाषा : $1', # Password reset dialog @@ -692,6 +720,8 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.', 'revdelete-radio-set' => 'हाँ', 'revdelete-log' => 'कारणम् :', 'revdel-restore' => 'दृश्यतां परिवर्तयतु', +'revdel-restore-deleted' => 'विलोपितानि संशोधनानि', +'revdel-restore-visible' => 'दृष्टिगोचर संशोधनानि', 'pagehist' => 'पुटस्य चरित्रम्', 'revdelete-uname' => 'उपयोक्तृ-नाम', 'revdelete-otherreason' => 'अन्य/अधिक कारणम् :', @@ -711,42 +741,96 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.', 'editundo' => 'अकरोतु', # Search results -'searchresults' => 'अन्वेषण फलानि', -'searchresults-title' => '"$1" इत्यस्य कृते अन्वेषण-फलानि', -'searchresulttext' => '{{SITENAME}} इत्यस्मिन् अन्वेषणे सहाय्यार्थम् [[{{MediaWiki:Helppage}}|{{int:help}}]] इत्येतत् पश्यतु ।', -'searchsubtitle' => 'भवान् \'\'\'[[:$1]]\'\'\'([[Special:Prefixindex/$1|सर्वाणि "$1" इत्यस्माद् आरभमन्तः पृष्ठाणि]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|सर्वाणि "$1" इत्येतत्प्रति संबद्धानि पृष्ठाणि]]) इत्यस्य कृते अन्विष्टवान्।', -'searchsubtitleinvalid' => "भवता '''$1''' इत्यस्य कृते अन्वेषणं कृतम्", -'notitlematches' => 'न कस्यापि पृष्ठस्य शीर्षकम् अस्य समम्।', -'notextmatches' => 'न कस्यापि पृष्ठस्य पाठः अस्य सममस्ति', -'prevn' => 'पूर्वतनानि {{PLURAL:$1|$1}}', -'nextn' => 'आगामि{{PLURAL:$1|$1}}', -'viewprevnext' => 'दर्शयतु ($1 {{int:pipe-separator}} $2) ($3)', -'searchprofile-everything' => 'सर्वम्', -'search-result-size' => '$1 ({{PLURAL:$2|1 शब्दम्|$2 शब्दे}})', -'search-redirect' => '($1 इतीदं अनुप्रेषितम्)', -'search-section' => '(विभागः $1)', -'search-suggest' => 'किं भवतः आशयः एवमस्ति : $1', -'search-interwiki-caption' => 'बन्धु-प्रकल्पाः', -'search-interwiki-default' => '$1 परिणामाः :', -'search-interwiki-more' => '(अधिकानि)', -'search-mwsuggest-enabled' => 'उपक्षेपेभ्यः सह', -'search-mwsuggest-disabled' => 'नात्र उपक्षेपाः', -'searchall' => 'सर्वाणि', -'nonefound' => "'''सूचना''': स्वतः अत्र केषुचिदेव नामाकाशेषु अन्वेषणं क्रियते। +'searchresults' => 'अन्वेषण फलानि', +'searchresults-title' => '"$1" इत्यस्य कृते अन्वेषण-फलानि', +'searchresulttext' => '{{SITENAME}} इत्यस्मिन् अन्वेषणे सहाय्यार्थम् [[{{MediaWiki:Helppage}}|{{int:help}}]] इत्येतत् पश्यतु ।', +'searchsubtitle' => 'भवान् \'\'\'[[:$1]]\'\'\'([[Special:Prefixindex/$1|सर्वाणि "$1" इत्यस्माद् आरभमन्तः पृष्ठाणि]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|सर्वाणि "$1" इत्येतत्प्रति संबद्धानि पृष्ठाणि]]) इत्यस्य कृते अन्विष्टवान्।', +'searchsubtitleinvalid' => "भवता '''$1''' इत्यस्य कृते अन्वेषणं कृतम्", +'notitlematches' => 'न कस्यापि पृष्ठस्य शीर्षकम् अस्य समम्।', +'notextmatches' => 'न कस्यापि पृष्ठस्य पाठः अस्य सममस्ति', +'prevn' => 'पूर्वतनानि {{PLURAL:$1|$1}}', +'nextn' => 'आगामि{{PLURAL:$1|$1}}', +'prevn-title' => 'विगत {{PLURAL:$1|परिणाम| परिणामानि}}', +'nextn-title' => 'अवर {{PLURAL:$1| १ परिणाम| $1 परिणामानि}}', +'shown-title' => 'प्रत्येक पृष्ठे $1 {{PLURAL:$1|परिणामं|परिणामान्}}प्रदर्शयतु', +'viewprevnext' => 'दर्शयतु ($1 {{int:pipe-separator}} $2) ($3)', +'searchmenu-new' => "'''अश्मिन् विकिते \"[[:\$1]]\" पृष्ठं सृजतु!'''", +'searchprofile-articles' => 'सामग्री पृष्ठानि', +'searchprofile-project' => 'सहायता तथा परियोजनासहित पृष्ठानि', +'searchprofile-images' => 'बहुमाध्यमः', +'searchprofile-everything' => 'सर्वम्', +'searchprofile-advanced' => 'उन्नतमः', +'searchprofile-articles-tooltip' => '$1 स्थले अन्वेशयतु', +'searchprofile-project-tooltip' => '$1 स्थले अन्वेशयतु', +'searchprofile-images-tooltip' => 'सञ्चिकान् अन्वेशयतु', +'searchprofile-everything-tooltip' => '(चर्चा पृष्ठसहित) सम्पूर्ण पठनीय सामग्रीं अन्वेषयतु', +'searchprofile-advanced-tooltip' => 'विशेष नामस्थाने अन्वेषयतु', +'search-result-size' => '$1 ({{PLURAL:$2|1 शब्दम्|$2 शब्दे}})', +'search-redirect' => '($1 इतीदं अनुप्रेषितम्)', +'search-section' => '(विभागः $1)', +'search-suggest' => 'किं भवतः आशयः एवमस्ति : $1', +'search-interwiki-caption' => 'बन्धु-प्रकल्पाः', +'search-interwiki-default' => '$1 परिणामाः :', +'search-interwiki-more' => '(अधिकानि)', +'search-mwsuggest-enabled' => 'उपक्षेपेभ्यः सह', +'search-mwsuggest-disabled' => 'नात्र उपक्षेपाः', +'searchall' => 'सर्वाणि', +'showingresultsheader' => "'''$4''' निमित्तये {{PLURAL:$5|'''$3'''स्य '''$1''' परिणाम|'''$3'''स्य '''$1 - $2''' परिणामानि}}", +'nonefound' => "'''सूचना''': स्वतः अत्र केषुचिदेव नामाकाशेषु अन्वेषणं क्रियते। सकले घटके अन्वेषणं कर्तुं स्व अन्वेषणपदेभ्यः पूर्वं ''all:'' इति योजयतु, अथवा इष्टं नामाकाशं पूर्वलग्नरूपेण योजयतु।", -'powersearch' => 'प्रगतम् अन्वेषणम्', -'powersearch-legend' => 'प्रगतम् अन्वेषणम्', -'powersearch-ns' => 'नामाकाशेषु अन्विष्यतु :', -'powersearch-redir' => 'अनुप्रेषणानां सूचिकां दर्शयतु।', -'powersearch-field' => 'इत्यस्मै अन्विष्यतु', -'powersearch-toggleall' => 'सर्वम्', +'powersearch' => 'प्रगतम् अन्वेषणम्', +'powersearch-legend' => 'प्रगतम् अन्वेषणम्', +'powersearch-ns' => 'नामाकाशेषु अन्विष्यतु :', +'powersearch-redir' => 'अनुप्रेषणानां सूचिकां दर्शयतु।', +'powersearch-field' => 'इत्यस्मै अन्विष्यतु', +'powersearch-toggleall' => 'सर्वम्', +'powersearch-togglenone' => 'नास्ति', +'search-external' => 'वाह्य अन्वेषणम्', +'searchdisabled' => '{{SITENAME}} अन्वेषणं निष्क्रियम् +अश्मिन् समये भवान् गूगल माध्यमेन अन्वेषणं कर्तुं शक्नोति +स्मरयतु यत् {{SITENAME}} इति स्थलस्य क्रमाङ्का नैव अद्यातना इति सोच्यते।', + +# Quickbar +'qbsettings' => 'शीघ्रपट', +'qbsettings-none' => 'नास्ति', +'qbsettings-fixedleft' => 'बामे स्थापितः', +'qbsettings-fixedright' => 'दक्षिणे स्थापितः', # Preferences page -'preferences' => 'इष्टतमानि', -'mypreferences' => 'मम वरीयांसि', -'yourlanguage' => 'भाषा:', -'email' => 'विद्युत्पत्रव्यवस्था', +'preferences' => 'इष्टतमानि', +'mypreferences' => 'मम वरीयांसि', +'prefs-edits' => 'सम्पादनानां सख्याः', +'prefsnologin' => 'नैव प्रविष्ट', +'changepassword' => 'प्रवेश शव्दं परिवर्तयतु', +'prefs-skin' => 'त्वचा', +'skin-preview' => 'प्राग्दृश्यम्', +'datedefault' => 'वरीयांसि नास्ति', +'prefs-datetime' => 'दिनांक तथा समय', +'prefs-personal' => 'योजकः व्यक्तिरेखा', +'prefs-rc' => 'नवतमानि परिवर्तनानि', +'prefs-watchlist' => 'दृष्टि सूची', +'prefs-watchlist-days' => 'दृष्टि सूची दर्शनार्थे दिवसानि', +'prefs-watchlist-days-max' => 'अधिकतम ७ दिवसानि', +'prefs-watchlist-edits-max' => 'अधिकतम संख्या: १०००', +'prefs-misc' => 'विविधः', +'prefs-resetpass' => 'प्रवेश शव्दं परिवर्तयतु', +'prefs-email' => 'इमेल वैकल्पिकाः', +'prefs-rendering' => 'स्वरुपः', +'saveprefs' => 'संरक्षतु', +'resetprefs' => 'असंरक्षित परिवर्तनानि विलोपयतु', +'restoreprefs' => 'समग्राः व्यवस्थादय व्यवस्थानुसारे पुनः संरक्षतु', +'prefs-editing' => 'सम्पादनशील:', +'rows' => 'पंक्ति', +'columns' => 'अध: पंक्त्याः', +'searchresultshead' => 'अन्वेषणम्', +'resultsperpage' => 'प्रति पृष्ट हिट्स:', +'stub-threshold-disabled' => 'निष्क्रियः', +'recentchangesdays' => 'दिवसानि पर्यन्तो सद्यावधि-परिवर्तनानि दृश्यतु:', +'recentchangesdays-max' => 'अधिकतम $1 {{PLURAL:$1|दिवसः|दिवसानि}}', +'recentchangescount' => 'सम्पादन संख्यकानि व्यवस्थानुसारेण दृश्यतु:', +'yourlanguage' => 'भाषा:', +'email' => 'विद्युत्पत्रव्यवस्था', # Groups 'group-sysop' => 'प्रबंधकाः', @@ -798,6 +882,7 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.', 'upload' => 'संचिकाम् उद्भारयतु', 'uploadbtn' => 'संचिकाम् उद्भारयतु', 'uploadlogpage' => 'उद्भारण-सूचिका', +'filedesc' => 'सांक्षेपिक', 'uploadedimage' => '"[[$1]]" इत्येतद् उद्भारितमस्ति', # Special:ListFiles @@ -824,7 +909,10 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.', 'randompage' => 'अविशिष्ट पृष्ठ', # Statistics -'statistics' => 'स्थितिगणितम्', +'statistics' => 'स्थितिगणितम्', +'statistics-users-active' => 'सक्रिय सदस्य', + +'doubleredirects' => 'दुगुनी-अनुप्रेषिते', # Miscellaneous special pages 'nbytes' => '$1 {{PLURAL:$1|बैटम्|बैटानि}}', @@ -876,7 +964,6 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.', # Watchlist 'watchlist' => 'मम निरीक्षासूचिका', 'mywatchlist' => 'मम निरीक्षासूचिका', -'watchlistfor' => "('''$1''' इत्यस्य कृते)", 'addedwatch' => 'निरीक्षासूचिकायां योजितम्', 'addedwatchtext' => 'भवतः [[Special:Watchlist|ध्यानसूचिकायां]] "[[:$1]]" इत्येतत् योजितमस्ति। इदानींप्रभृति अस्मिन् पृष्ठे तथा अस्य चर्चापृष्ठे सन्तः परिवर्तनानि भवतः निरीक्षासूचिकायां द्रक्ष्यन्ते तथा च [[Special:RecentChanges|सद्यःपरिवर्तितानां सूचिकायां]] इदं पृष्ठं स्थूलाक्षरैः द्रक्ष्यते, यस्मात् भवान् सरलतया इदं पश्यतु

    निरीक्षासूचिकातः निराकर्तुमिच्छति चेत्, "मा निरीक्षताम्" इत्यसमिन् नोदयतु।', @@ -930,8 +1017,13 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.', 'restriction-type' => 'अनुमतिः:', 'restriction-level' => 'सुरक्षा-स्तरः :', +# Restriction levels +'restriction-level-sysop' => 'पूर्ण सुरक्षित', +'restriction-level-autoconfirmed' => 'अर्ध सुरक्षित', + # Undelete 'undeletelink' => 'दर्शयतु/पुनःस्थापयतु', +'undeleteviewlink' => 'द्र्ष्टुमिच्छामि', 'undeletedarticle' => '"[[$1]]" इत्येतद् पुनःस्थापितमस्ति।', # Namespace form on various pages @@ -1073,6 +1165,7 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.', 'tooltip-undo' => '"अकरोतु" इत्येतद् इदं संपादनं विपरीतीकरोति, तथा च संपादन-प्रारूपं प्राग्दृश्य-रूपेण उद्घाटयति। अस्य सारांशे कारणमपि लेखितुं शक्यते।', +'tooltip-summary' => 'संक्षिप्त-सारांशं प्रविष्टतु', # Skin names 'skinname-standard' => 'पूर्व', @@ -1087,9 +1180,9 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.', 'nextdiff' => 'नवतरं संपादनम् →', # Media information -'file-info-size' => '($1 × $2 पिक्सेलानि, संचिकायाः आकारः: $3, MIME-प्रकारः: $4)', +'file-info-size' => '$1 × $2 पिक्सेलानि, संचिकायाः आकारः: $3, MIME-प्रकारः: $4', 'file-nohires' => 'उच्चतरं विभेदनं नोपलब्धम्', -'svg-long-desc' => '(SVG संचिका, साधारणतया $1 × $2 पिक्सेलानि, संचिकायाः आकारः : $3)', +'svg-long-desc' => 'SVG संचिका, साधारणतया $1 × $2 पिक्सेलानि, संचिकायाः आकारः : $3', 'show-big-image' => 'पूर्णं विभेदनम्', 'show-big-image-thumb' => 'अस्य प्राग्दृश्यस्य आकारः : $1 × $2 पिक्सेलानि', diff --git a/languages/messages/MessagesSah.php b/languages/messages/MessagesSah.php index 9cc8bbf2..67eb5159 100644 --- a/languages/messages/MessagesSah.php +++ b/languages/messages/MessagesSah.php @@ -53,8 +53,7 @@ $messages = array( 'tog-editsection' => '[Көннөрүү] диэн ыйынньыгынан сиэксийэны көннөрүү', 'tog-editsectiononrightclick' => 'Сиэксийэ баһыгар уҥа тимэҕинэн
    баттаан сиэксийэни көннөрүү (JavaScript)', 'tog-showtoc' => 'Иһинээҕитин көрдөр (ыстатыйа үстэн ордук бас тыллаах буоллаҕына)', -'tog-rememberpassword' => 'Ааппын бу көмпүүтэргэ сигээ', -'tog-editwidth' => 'Көннөрүү түннүгэ муҥутуур кэтиттээх буоллун', +'tog-rememberpassword' => 'Миигин бу браузерга сигээ ($1 {{PLURAL:$1|күн|күнтэн ордуга суох}})', 'tog-watchcreations' => 'Суруйбут ыстатыйаларбын кэтээн көрүүгэ киллэрэн ис', 'tog-watchdefault' => 'Уларыппыт сирэйдэрбин кэтээн көрүү испииһэгэр киллэрэн ис', 'tog-watchmoves' => 'Аатын уларыппыт сирэйдэрбин кэтээн көрүү испииһэгэр киллэрэн ис', @@ -200,31 +199,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Тиэмэ эбии', -'vector-action-delete' => 'Сот', -'vector-action-move' => 'Аатын уларыт', -'vector-action-protect' => 'Уларыйбат гын', -'vector-action-undelete' => 'Төннөр', -'vector-action-unprotect' => 'Көмүскэлин уһул', -'vector-namespace-category' => 'Категория', -'vector-namespace-help' => 'Көмө сирэй', -'vector-namespace-image' => 'Билэ', -'vector-namespace-main' => 'Сирэй', -'vector-namespace-media' => 'Миэдьийэ сирэй', -'vector-namespace-mediawiki' => 'Сурук', -'vector-namespace-project' => 'Бырайыак туһунан', -'vector-namespace-special' => 'Анал сирэй', -'vector-namespace-talk' => 'Ырытыы', -'vector-namespace-template' => 'Халыып', -'vector-namespace-user' => 'Кыттааччы тус сирэйэ', -'vector-view-create' => 'Ай', -'vector-view-edit' => 'Уларыт', -'vector-view-history' => 'Устуоруйатын көрүү', -'vector-view-view' => 'Ааҕыы', -'vector-view-viewsource' => 'Бэлиэлэрин көрүү', -'actions' => 'Дьайыылар', -'namespaces' => 'Аат даллара', -'variants' => 'Барыллар', +'vector-action-addsection' => 'Тиэмэ эбии', +'vector-action-delete' => 'Сот', +'vector-action-move' => 'Аатын уларыт', +'vector-action-protect' => 'Уларыйбат гын', +'vector-action-undelete' => 'Төннөр', +'vector-action-unprotect' => 'Көмүскэлин уһул', +'vector-simplesearch-preference' => 'Көрдөбүл этэн биэриилэрин кэҥэтиллибит барылын туруор («Векторга» эрэ)', +'vector-view-create' => 'Ай', +'vector-view-edit' => 'Уларыт', +'vector-view-history' => 'Устуоруйатын көрүү', +'vector-view-view' => 'Ааҕыы', +'vector-view-viewsource' => 'Бэлиэлэрин көрүү', +'actions' => 'Дьайыылар', +'namespaces' => 'Аат даллара', +'variants' => 'Барыллар', 'errorpagetitle' => 'Сыыһа', 'returnto' => 'Төттөрү $1 сирэйгэ.', @@ -285,6 +274,9 @@ $messages = array( Бука диэн, кэтэһэ түһэн баран өссө боруобалаар. $1', +'pool-timeout' => 'Хааччахтааһыны кэтэһии болдьоҕо ааста', +'pool-queuefull' => 'Көрдөбүллэри хомуйуу туолбут', +'pool-errorunknown' => 'Биллибэт алҕас', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} туһунан', @@ -445,7 +437,8 @@ $2', 'yourname' => 'Кыттааччы аатыҥ:', 'yourpassword' => 'Киирии тыла:', 'yourpasswordagain' => 'Киирии тылгын хатылаа:', -'remembermypassword' => 'Миигин бу көмпүүтэргэ сигээ', +'remembermypassword' => 'Миигин бу көмпүүтэргэ сигээ ($1 {{PLURAL:$1|күн|күнтэн ордуга суох}})', +'securelogin-stick-https' => 'Киирэн баран HTTPS нөҥүө холбонууну салгыырга', 'yourdomainname' => 'Эн дөмүөнүҥ:', 'externaldberror' => 'Тас киирии билиитин олоҕун сыыһата буолла, эбэтэр тас киирии билииҥ олоҕун саҥардар кыаҕыҥ суох.', 'login' => 'Киир', @@ -462,6 +455,7 @@ $2', 'gotaccount' => "Бэлиэтэммитиҥ дуо? '''$1'''.", 'gotaccountlink' => 'Аатыҥ', 'createaccountmail' => 'e-mail-ынан', +'createaccountreason' => 'Төрүөтэ:', 'badretype' => 'Киирии тылларыҥ сөп түбэспэтилэр.', 'userexists' => 'Суруйбут аатыҥ бэлиэр баар. Атын аатта тал.', @@ -483,6 +477,7 @@ $2', 'passwordtooshort' => 'Киирии тылыҥ наһаа кылгас. Кырата {{PLURAL:$1|1 бэлиэлээх|$1 бэлиэлээх}} буолуохтаах.', 'password-name-match' => 'Киирии тыл ааккыттан атын буолуохтаах.', +'password-login-forbidden' => 'Маннык ааты уонна киирии тылы туһаныы бобуллар.', 'mailmypassword' => 'Саҥа киирии тылла ыыттар', 'passwordremindertitle' => '{{SITENAME}} киирии тылын санатыы', 'passwordremindertext' => 'Ким эрэ (бадаҕа эн бу IP-аадырыстан: $1), {{SITENAME}} ($4) киирии тылын саҥаттан ыытыҥ диэбит. @@ -525,6 +520,9 @@ $2', 'loginlanguagelabel' => 'Омугун тыла: $1', 'suspicious-userlogout' => 'Сеансы түмүктүүр ыйытыгыҥ ылыныллыбата, тоҕо диэтэххэ браузер эбэтэр кээштыыр прокси алҕас ыыппыт ыйытыктарыгар майгынныыр.', +# E-mail sending +'php-mail-error-unknown' => 'mail() PHP-функциятыгар туох эрэ алҕас тахсыбыт', + # Password reset dialog 'resetpass' => 'Киирии тылы уларытыы', 'resetpass_announce' => 'Бу быстах кэмҥэ туттуллар киирии тылынан киирдиҥ. Түмүккэ саҥа киирии тылла суруй:', @@ -577,9 +575,11 @@ $2', 'showlivepreview' => 'Түргэнник эрдэ көрүү', 'showdiff' => 'Уларытыылар', 'anoneditwarning' => "'''Болҕой:''' Системаҕа киирбэтэххин. Онон аатыҥ оннугар IP аадаырыһыҥ бу сирэй историятыгар киириэ.", +'anonpreviewwarning' => "''Эн тиһиккэ ааккын эппэттэххин. Уларытыыгын бигэргэттэххинэ IP-аадырыһыҥ сирэй устуоруйатыгар суруллуо.''", 'missingsummary' => "'''Санатыы:''' Уларыппытыҥ кылгас быһаарыытын суруйбатаххын. Уларытыыны бигэргэттэххинэ улартытыыҥ хос быһаарыыта суох барыа.", 'missingcommenttext' => 'Манна хос быһаарыыны суруй.', -'missingcommentheader' => "'''Санатыы:''' Хос быһаарыы аатын суруйбатаххын. Бигэргэттэххинэ быһаарыыҥ аата суох барыа.", +'missingcommentheader' => "'''Санатыы:''' Хос быһаарыы аатын суруйбатаххын. +«{{int:savearticle}}» тимэҕи баттаан бигэргэттэххинэ быһаарыыҥ аата суох барыа.", 'summary-preview' => 'Хос быһаарыыны көрүү:', 'subject-preview' => 'Аатын/тиэмэтин көрүү:', 'blockedtitle' => 'Кыттааччы уларытар кыаҕа быһылынна', @@ -652,7 +652,11 @@ IP-аадырыһа эрэ көстөр. 'usercsspreview' => "'''Умнума: бу CSS тургутуута эрэ. Билигин оҥорбутуҥ бигэргэтиллэ илик!'''", 'userjspreview' => "'''Умнума: бу JavaScript тургутуутэ эрэ, уларыппытыҥ бигэргэтиллэ илик!'''", -'userinvalidcssjstitle' => "'''Болҕой:''' Бу тиэмэ «$1» суох. Кыттааччы .css и .js сирэйдэрэ кыра буукубаннан суруллуохтаахтар, холобур «{{ns:user}}:Ньургун/monobook.css», маннык буолуо суохтаах «{{ns:user}}:Ньургун/Monobook.css».", +'sitecsspreview' => "'''Бу CSS бигэргэппэккэ көрө олороргун умнума.''' +'''Бигэргэтиллэ илик!'''", +'sitejspreview' => "'''Бу JavaScript-куодун бигэргэппэккэ көрө олороргун умнума.''' +'''Бигэргэтиллэ илик!'''", +'userinvalidcssjstitle' => "'''Болҕой:''' Бу тиэмэ «$1» суох. Кыттааччы .css и .js сирэйдэрэ кыра буукубаннан суруллуохтаахтар, холобур «{{ns:user}}:Ньургун/vector.css», маннык буолуо суохтаах «{{ns:user}}:Ньургун/Vector.css».", 'updated' => '(Саҥардылынна)', 'note' => "'''Хос быһаарыы:'''", 'previewnote' => "'''Бу көрүү эрэ; уларытыылар бигэргэтиллэ иликтэр!'''", @@ -688,9 +692,6 @@ IP-аадырыһа эрэ көстөр. '''КИМ ЭРЭ БАС БИЛЭР МАТЫРЫЙААЛЫН КИНИТТЭН КӨҤҮЛЭ СУОХ МАННА УГУМА!'''", 'copyrightwarning2' => "Болҕой, эн суруйбут матырыйаалгын ким баҕарар уларытар уонна суох гынар бырааптаах. Суруйбуккун уларыталларын сөбүлээбэт буоллаххына манна суруйума.
    Эбиитин манна суруйдаххына, уларытыы ааптара мин буолабын, эбэтэр көҥүл туһанары уонна уларытары көҥүллүүр сиртэн ыллым диэн бигэргэтэҕин (маны көр $1).
    '''КИМ ЭРЭ БАС БИЛИИТИН МАННА КИНИТТЭН КӨҤҮЛЭ СУОХ УГУМА!'''", -'longpagewarning' => "'''СЭРЭТИИ: Бу сирэй ыйааһына $1 килобайт. -Сорох интэриниэт бырагырааммаларыгар 32 kБ ыйааһыҥҥа чугаһыыр сирэйдэр үчүгэйдик көстүбэттэр. -Онон бука диэн бу сирэйи кыра сирэйдэргэ хайытар туһунан толкуйдааҥ.'''", 'longpageerror' => "'''ERROR: The text you have submitted is $1 kilobytes long, which is longer than the maximum of $2 kilobytes. It cannot be saved.''' '''АЛҔАС: Суруйар кэрчиккит $1 килобайт ыйааһыннаах, онтуккут көҥүллэммит $2 килобайты куоһарар. Маннык хаалар кыаҕа суох'''", @@ -873,6 +874,8 @@ $1", 'logdelete-failure' => "'''Сурунаал дөбөҥө быһаарыллыбата:''' $1", 'revdel-restore' => 'Көстүүтүн уларытыы', +'revdel-restore-deleted' => 'сотуллубут барыллар', +'revdel-restore-visible' => 'көстөр барыллар', 'pagehist' => 'Историятын сирэйэ', 'deletedhist' => 'Сотуллубут история', 'revdelete-content' => 'иһинээҕитэ', @@ -940,11 +943,13 @@ $1", # Diffs 'history-title' => 'Көннөрүү историята "$1"', 'difference' => '(Торумнар бэйэ-бэйэлэриттэн уратылара)', +'difference-multipage' => '(Сирэйдэр ыккардыларынааҕы уратылар)', 'lineno' => '$1 строка:', 'compareselectedversions' => 'Талыллыбыт торумнары тэҥнээ', 'showhideselectedversions' => 'Талыллыбыт барыллары көрдөр/кистээ', 'editundo' => 'төнүн', -'diff-multi' => '({{PLURAL:$1|$1 орто торум көрдөрүллүбэтэ|$1 орто торумнар көрдөрүллүбэтилэр|$1.}})', +'diff-multi' => '({{PLURAL:$2|$2 кыттааччы|$2 ахсааннаах кыттааччы}} {{PLURAL:$1|$1 ыккардынааҕы барыла көрдөрүллүбэтэ|$1 ахсааннаах ыккардынааҕы барыла көрдөрүллүбэтэ|$1.}})', +'diff-multi-manyusers' => '(Кырата {{PLURAL:$2|$1 кыттааччы|$2 ахсааннаах кыттааччы}} оҥорбут {{PLURAL:$1|ыккардынааҕы $1 барыла|ыккардынааҕы $1 барыллара}} көрдөрүллүбэтэ)', # Search results 'searchresults' => 'Булулунна', @@ -979,6 +984,7 @@ $1", 'searchprofile-everything-tooltip' => 'Сирэйдэргэ барытыгар (ырытыы гиэннэригэр эмиэ) көрдөөһүн', 'searchprofile-advanced-tooltip' => 'Этиллибит аат далларыгар көрдөөһүн', 'search-result-size' => '$1 ({{PLURAL:$2|1 тыл|$2 тыл}})', +'search-result-category-size' => '{{PLURAL:$1|$1 элэмиэн|$1 элэмиэннэр}} ({{PLURAL:$2|$2 субкатегория|$2 субкатегориялар}}, {{PLURAL:$3|$3 билэ|$3 билэлэр}})', 'search-result-score' => 'Релевантноһа: $1%', 'search-redirect' => '(утаарыы $1)', 'search-section' => '($1 сиэксийэ)', @@ -1053,6 +1059,7 @@ $1", 'contextlines' => 'Булуллубут сирэй хас строкатын көрдөрөрө:', 'contextchars' => 'Строкааҕа контекст бэлиэлэрин ахсаана:', 'stub-threshold' => 'омооннорго ыйынньыктары оҥоруу боруога:', +'stub-threshold-disabled' => 'Арахсыбыт', 'recentchangesdays' => 'Хас хонук иһинэн уларытыылары көрдөрөргө:', 'recentchangesdays-max' => '(улааппыта $1 күн)', 'recentchangescount' => 'Саҥа уларытыылар көрдөрүллэр ахсааннара:', @@ -1086,6 +1093,7 @@ $1", 'prefs-files' => 'Билэлэр', 'prefs-custom-css' => 'Бэйэ CSS', 'prefs-custom-js' => 'Бэйэ JS', +'prefs-common-css-js' => 'Бары тиэмэлэргэ биир CSS/JS', 'prefs-reset-intro' => 'Бу сирэй көмөтүнэн туруорууларгын саҥаттан туруорар турукка төннөрүөххүн сөп. Маны бигэргэттэххинэ билигин баар туруоруулары дэбигис сөргүппэккин.', 'prefs-emailconfirm-label' => 'Эл. почтаны бигэргэтии:', @@ -1124,9 +1132,15 @@ $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}} 'prefs-advancedrendering' => 'Дириҥэтиллибит туруоруулар', 'prefs-advancedsearchoptions' => 'Дириҥэтиллибит туруоруулар', 'prefs-advancedwatchlist' => 'Дириҥэтиллибит туруоруулар', -'prefs-display' => 'Туруоруулары көрдөр', +'prefs-displayrc' => 'Туруоруулары көрдөр', +'prefs-displaysearchoptions' => 'Көстүүтүн туруоруулара', +'prefs-displaywatchlist' => 'Көстүүтүн туруоруулара', 'prefs-diffs' => 'Уратылара', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Сөп курдук көстөр', +'email-address-validity-invalid' => 'Алҕаһа суох аадырыс ирдэнэр', + # User rights 'userrights' => 'Кыттааччылар бырааптарын салайыы', 'userrights-lookup-user' => 'Кыттаачылар бөлөхтөрүн салайыы', @@ -1210,6 +1224,7 @@ $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}} 'right-hideuser' => 'Кыттааччы аатын бобуу уонна кистээһин', 'right-ipblock-exempt' => 'IP хааччахтааһынын, аптамаатынан уонна диапазоннары хааччахтааһыны тумнуу', 'right-proxyunbannable' => 'Прокси аптааматынан хааччахтааһынын тумнуу', +'right-unblockself' => 'хааччаҕы бэйэ устуута', 'right-protect' => 'Сирэйдэр көмүскэллэрин таһымын уонна көмүскэммит сирэйдэри уларытыы', 'right-editprotected' => 'Көмүскэллээх сирэйдэри уларытыыы (каскаднай көмүскэллэрэ суох буоллаҕына)', 'right-editinterface' => 'Кыттааччы интерфейсын уларытыы', @@ -1232,7 +1247,6 @@ $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}} 'right-siteadmin' => 'Билэ олоҕор (database) киирэри бобуу уонна көҥүллээһин', 'right-reset-passwords' => 'атын кыттааччылар киирии тылларын уларытыы', 'right-override-export-depth' => 'сирэйдэри таһаарааһын (экспортааһын), ситимнээх сирэйдэри 5-с таһымҥа дылы холбоон туран', -'right-versiondetail' => 'программнай обеспечение барылын туһунан сиһилии көрүү', 'right-sendemail' => 'Атын кыттааччыларга эл. почтаны ыытарга', # User rights log @@ -1283,14 +1297,9 @@ $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}} 'recentchanges-legend' => 'Кэлиҥҥи уларытыылар хайдах көстөллөрүн туруоруу', 'recentchangestext' => 'Манна хаһан оҥоһуллубуттарынан сааһыланан {{SITENAME}} кэнники уларыытыылара көстөллөр.', 'recentchanges-feed-description' => 'Бу ботуокка биики бүтэһик уларыйыыларын кэтииргэ.', -'recentchanges-label-legend' => 'Легендата: $1.', -'recentchanges-legend-newpage' => '$1 — саҥа сирэй', 'recentchanges-label-newpage' => 'Бу уларытыы түмүгэр саҥа сирэй айыллыбыт.', -'recentchanges-legend-minor' => '$1 — суолтата суох уларытыы', 'recentchanges-label-minor' => 'Бу улахан суолтата суох уларытыы', -'recentchanges-legend-bot' => '$1 — робот көннөрүүтэ', 'recentchanges-label-bot' => 'Бу уларытыыны робот оҥорбут', -'recentchanges-legend-unpatrolled' => '$1 — ботуруулламматах уларытыы', 'recentchanges-label-unpatrolled' => 'Бу уларытыы өссө ботурууллана илик', 'rcnote' => "{{PLURAL:$2|хонук|'''$2''' хонуктар}} иһинэн бүтэһик {{PLURAL:$1|'''1''' уларыйыы|'''$1''' уларыйыылар}}, $5, $4.", 'rcnotefrom' => "Мантан '''$2''' маныаха '''$1''' дылы уларыыйылар көрдөрүлүннүлэр.", @@ -1336,6 +1345,9 @@ $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}} 'upload_directory_missing' => 'Суруйуу паапката ($1) суох, ону ааһан сиэрбэр ону бэйэтэ оҥорор кыаҕа суох.', 'upload_directory_read_only' => '($1) директорияҕа сиэрбэр билэни суруйар кыаҕа суох.', 'uploaderror' => 'Билэ суруллубата', +'upload-recreate-warning' => "'''Болҕой. Маннык ааттаах билэ хаһан эрэ сотуллубут эбэтэр аата уларытыллыбыт.'' + +Сотуу уонна аат уларытыытын сурунаала аллара көстөр:", 'uploadtext' => "Бу форманы туһанан сиэрбэргэ билэлэри суруйуоххун сөп. Урут суруллубут билэлэри көрөргө манна тиий: [[Special:FileList|ойуулар тиһиктэрэ]]. Билэлэри суруйуу уонна иккистээн суруйуу устуоруйата [[Special:Log/upload|манна]], сотуу устуоруйата [[Special:Log/delete|манна]] көстөллөр. @@ -1370,6 +1382,17 @@ $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}} 'filetype-banned-type' => "'''\".\$1\"''' — билэ бобуллубут көрүҥэ. Көҥүллэммит билэ {{PLURAL:\$3|көрүҥэ|көрүҥнэрэ}}: \$2.", 'filetype-missing' => 'Билэ расширенията суох (холобур ".jpg").', +'empty-file' => 'Ыыппыт билэҥ кураанах.', +'file-too-large' => 'Ыыппыт билэҥ наһаа улахан эбит.', +'filename-tooshort' => 'Билэҥ аата наһаа кылгас.', +'filetype-banned' => 'Билэ маннык көрүҥэ бобуулаах.', +'verification-error' => 'Бу билэ тургутуллубатах.', +'hookaborted' => 'Эн киллэрбит уларытыыгын кэҥэтии таҥастааччыта оннугар төннөрбүт.', +'illegal-filename' => 'Билэ маннык ааттанара сатаммат.', +'overwrite' => 'Баар билэни уларытар сатаммат.', +'unknown-error' => 'Биллибэт алҕас.', +'tmp-create-error' => 'Быстах кэмнээх билэни оҥорор табыллыбат.', +'tmp-write-error' => 'Быстаах кэмнээх билэҕэ суруйуу алҕаһа таҕыста.', 'large-file' => 'Манна $1 байт аннынан ыйааһыннаах ойуулары туттар ордук (эн суруйбут билэҥ $2 байтаах).', 'largefileserver' => 'Билэ ыйааһына көҥүллэммиттэн ордук.', 'emptyfile' => 'Суруйбут билэҥ арааһа кураанах быһылаах. Баҕар билэ аатын сыыһа суруйбутуҥ буолаарай. Өссө төгүл көр.', @@ -1396,13 +1419,14 @@ $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}} Ол да буоллар билэни киллэриэххин баҕарар буоллаххына төннөн атыннык ааттаа. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Бу билэ атын {{PLURAL:$1|билэ дубликаата|билэлэр дубликааттара}} буолар:', 'file-deleted-duplicate' => 'Маннык билэ ([[:$1]]) урут сотуллубут эбит. Суруттарыаҥ иннинэ бастаан тоҕо сотуллубутун көр.', -'successfulupload' => 'Сатанна', 'uploadwarning' => 'Сэрэтии', 'uploadwarning-text' => 'Бука диэн аллара баар билэ туһунан суругу уларыт уонна өссө хатылаа.', 'savefile' => 'Билэни суруттарыы', 'uploadedimage' => 'суруттарылынна "[[$1]]"', 'overwroteimage' => '"[[$1]]" киллэриллибит саҥа торума', 'uploaddisabled' => 'Суруттарыы бобуллубут', +'copyuploaddisabled' => 'URL көмөтүнэн хачайдыыр кыах араарыллыбыт.', +'uploadfromurl-queued' => 'Эн хачайдааһыныҥ уочаркка туруорулунна.', 'uploaddisabledtext' => 'Билэлэри суруттарар көҥүллэммэт.', 'php-uploaddisabledtext' => 'PHP туруорууларыгар билэни киллэрии араарыллыбыт. Бука диэн, file_uploads туруоруутун көр.', 'uploadscripted' => 'Бу билэ HTML эбэтэр скрипт куодтаах эбит. Интэриниэт көрдөрөр бырагыраамма ону сыыһа ааҕыан сөп.', @@ -1434,6 +1458,14 @@ JD # Jenoptik MGP # Pentax PICT # misc. # ', +'upload-success-subj' => 'Сатанна', +'upload-success-msg' => '[$2] хачайдааһын табылынна. Ол түмүгүн манна көрүөххүн сөп: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Хачайдааһын моһуога', +'upload-failure-msg' => 'Эн хачайдааһыныҥ (мантан [$2]) моһуогурда: + +$1', +'upload-warning-subj' => 'Хачайдыырга сэрэтии', +'upload-warning-msg' => '[$2] хачайдыырга алҕас таҕыста. Ол алҕаһы көннөрөргө манна төнүн [[Special:Upload/stash/$1|upload form]].', 'upload-proto-error' => 'Сыыһа боротокуол', 'upload-proto-error-text' => 'Ыраахтан суруттарарга маннык аадырыстар наадалар: http:// эбэтэр ftp://.', @@ -1497,6 +1529,7 @@ PICT # misc. 'listfiles_search_for' => 'Миэдьийэни (ойууну) аатынан көрдөтүү:', 'imgfile' => 'билэ', 'listfiles' => 'Билэлэр', +'listfiles_thumb' => 'Ойуучаан', 'listfiles_date' => 'Күнэ-ыйа', 'listfiles_name' => 'Аата', 'listfiles_user' => 'Кыттааччы', @@ -1610,8 +1643,8 @@ PICT # misc. 'statistics-edits' => '{{SITENAME}} оҥоһуллуоҕуттан көннөрүү ахсаана', 'statistics-edits-average' => 'Биир сирэйгэ ортотунан хас көннөрүү тиксэрэ', 'statistics-views-total' => 'Көрүү ахсаана', +'statistics-views-total-desc' => 'Суох уонна аналлаах сирэйдэри көрүү ааҕыллыбат', 'statistics-views-peredit' => 'Биир улартыыга тиксэр көрүү ахсаана', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Job queue] кээмэйэ', 'statistics-users' => 'Бэлиэтэммит [[Special:ListUsers|кыттааччы]] ахсаана', 'statistics-users-active' => 'Көхтөөх кыттааччылар ахсааннара', 'statistics-users-active-desc' => 'Ааспыт {{PLURAL:$1|биир хонук иһигэр|$1 хонукка}} тугу эмэ оҥорбут кыттааччылар', @@ -1624,7 +1657,7 @@ PICT # misc. 'doubleredirects' => 'Хос көһөрөөһүн', 'doubleredirectstext' => 'Бу сирэйгэ атын сиргэ утаарар хос утаарыылар тиһиктэрэ көстөр. Хас устуруока аайы бастакы уонна иккис утаарыга сигэ баар, ону таһынан иккис утаарыыга баар сирэй аадырыһа (аата) баар, ол аата бастакы утаарыы дьиҥинэн ханна утаарыахтааҕа көстөр. -Сотуллубут суруктар көннөрүллүбүттэр.', +Сотуллубут суруктар көннөрүллүбүттэр.', 'double-redirect-fixed-move' => '[[$1]] сирэй аата уларытыллыбыт, билигин манна утаарар [[$2]]', 'double-redirect-fixer' => 'Утаарыылары көннөрөөччү', @@ -1647,6 +1680,8 @@ PICT # misc. 'nmembers' => '$1 {{PLURAL:$1|кыттааччы|кыттааччылаах}}', 'nrevisions' => '$1 {{PLURAL:$1|барыллаах|барыл баар}}', 'nviews' => '$1 көрүүлээх', +'nimagelinks' => '$1 {{PLURAL:$1|сирэйгэ|ахсааннаах сирэйгэ}} туттуллар', +'ntransclusions' => '$1 {{PLURAL:$1|сирэйгэ|ахсааннаах сирэйгэ}} туттуллар', 'specialpage-empty' => 'Көрдөөн тугу да булбата.', 'lonelypages' => 'Атын сирэйдэри кытта сибээһэ суох сирэйдэр', 'lonelypagestext' => 'Манна көстөр сирэйдэргэ {{SITENAME}} атын сирэйдэрэ сигэммэттэр.', @@ -1804,35 +1839,41 @@ PICT # misc. 'listgrouprights-removegroup-self-all' => 'Бары бөлөхтөрү бэйэтин аатыттан сотуон сөп', # E-mail user -'mailnologin' => 'Аадырыһа суох', -'mailnologintext' => 'Атын кыттааччылары кытта e-mail көмөтүнэн суруйсуоххун баҕарар буоллаххына бэйэҕин [[Special:UserLogin|билиһиннэриэхтээххин]] уонна e-mail аадырыскын [[Special:Preferences|туруорууларгар]] суруйуохтааххын.', -'emailuser' => 'Кыттааччыга сурук', -'emailpage' => 'Кыттааччыга E-mail ыыт', -'emailpagetext' => 'Бу фуорма көмөтүнэн кыттааччыга сурук ыытыаххын сөп. +'mailnologin' => 'Аадырыһа суох', +'mailnologintext' => 'Атын кыттааччылары кытта e-mail көмөтүнэн суруйсуоххун баҕарар буоллаххына бэйэҕин [[Special:UserLogin|билиһиннэриэхтээххин]] уонна e-mail аадырыскын [[Special:Preferences|туруорууларгар]] суруйуохтааххын.', +'emailuser' => 'Кыттааччыга сурук', +'emailpage' => 'Кыттааччыга E-mail ыыт', +'emailpagetext' => 'Бу фуорма көмөтүнэн кыттааччыга сурук ыытыаххын сөп. "Кимтэн" графааҕа эн [[Special:Preferences|туруорууларгар]] баар аадырыһыҥ киириэҕэ, онон туппут киһи хардарар кыахтаныа.', -'usermailererror' => 'Сурук кыайан барбата:', -'defemailsubject' => '{{SITENAME}} эл. почтата', -'noemailtitle' => 'E-mail суох', -'noemailtext' => 'Бу кыттааччы e-mail аадырыһын эппэтэх.', -'nowikiemailtitle' => 'Сурук ыытар кыах суох', -'nowikiemailtext' => 'Бу кыттааччы сурук тутуон баҕарбат.', -'email-legend' => '{{SITENAME}} атын кыттааччытыгар сурук ыытарга', -'emailfrom' => 'Кимтэн:', -'emailto' => 'Кимиэхэ:', -'emailsubject' => 'Сурук аата:', -'emailmessage' => 'Сурук:', -'emailsend' => 'Ыыт', -'emailccme' => 'Сурукпун бэйэбэр эмиэ ыыт.', -'emailccsubject' => 'Эн суругуҥ куоппуйата $1: $2', -'emailsent' => 'Сурук барда', -'emailsenttext' => 'Эн суругуҥ ыытылынна.', -'emailuserfooter' => 'Бу сурук $2 кыттааччыга $1 кыттааччыттан «Сурукта ыыт» диэн функция көмөтүнэн {{SITENAME}} саайтан ыытыллыбыт.', +'usermailererror' => 'Сурук кыайан барбата:', +'defemailsubject' => '{{SITENAME}} эл. почтата', +'usermaildisabled' => 'Кыттааччы эл почтата арахса сылдьар', +'usermaildisabledtext' => 'Эн атын кыттааччыларга эл. почтанан сурук ыытар кыаҕыҥ суох эбит', +'noemailtitle' => 'E-mail суох', +'noemailtext' => 'Бу кыттааччы e-mail аадырыһын эппэтэх.', +'nowikiemailtitle' => 'Сурук ыытар кыах суох', +'nowikiemailtext' => 'Бу кыттааччы сурук тутуон баҕарбат.', +'email-legend' => '{{SITENAME}} атын кыттааччытыгар сурук ыытарга', +'emailfrom' => 'Кимтэн:', +'emailto' => 'Кимиэхэ:', +'emailsubject' => 'Сурук аата:', +'emailmessage' => 'Сурук:', +'emailsend' => 'Ыыт', +'emailccme' => 'Сурукпун бэйэбэр эмиэ ыыт.', +'emailccsubject' => 'Эн суругуҥ куоппуйата $1: $2', +'emailsent' => 'Сурук барда', +'emailsenttext' => 'Эн суругуҥ ыытылынна.', +'emailuserfooter' => 'Бу сурук $2 кыттааччыга $1 кыттааччыттан «Сурукта ыыт» диэн функция көмөтүнэн {{SITENAME}} саайтан ыытыллыбыт.', + +# User Messenger +'usermessage-summary' => 'Тиһилик биллэриитин хааллар.', +'usermessage-editor' => 'Тиһилик биллэрээччитэ', # Watchlist 'watchlist' => 'Мин кэтээһиним', 'mywatchlist' => 'Кэтиир сирэйдэрим', -'watchlistfor' => "('''$1''' киэнэ)", +'watchlistfor2' => '$1 $2 аналлаах', 'nowatchlist' => 'Эн кэтиир сирэйдэриҥ суохтар.', 'watchlistanontext' => 'Кэтэбилиҥ сирэйин көрөргөр эбэтэр уларытаргар маны оҥор: $1.', 'watchnologin' => 'Бэйэҕин билиһиннэр', @@ -1949,7 +1990,10 @@ $UNWATCHURL 'revertpage' => '([[User talk:$2|Ырытыы]]) көннөрүүлэрэ: [[Special:Contributions/$2|$2]] бу торумҥа: [[User:$1|$1]] төннөрүлүннүлэр', 'revertpage-nouser' => 'Бу киһи (аата көстүбэт) уларытыылара бу киһи барылыгар төннөрүлүннүлэр [[User:$1|$1]]', 'rollback-success' => '$1 көннөрүүлэр бу торумҥа төннөрүлүннүлэр: $2.', -'sessionfailure' => 'Арааһа туох эрэ сатаммата, дьайыыҥ оҥоһуллубата. Браузергар "Төнүн" тимэҕи баттаа уонна бу иннинээҕи сирэйгин иккистээн киллэрэн көр.', + +# Edit tokens +'sessionfailure-title' => 'Сиэссийэ алҕаһа', +'sessionfailure' => 'Арааһа туох эрэ сатаммата, дьайыыҥ оҥоһуллубата. Браузергар "Төнүн" тимэҕи баттаа уонна бу иннинээҕи сирэйгин иккистээн киллэрэн көр.', # Protect 'protectlogpage' => 'Харысхал сурунаала (көннөрүүттэн көмүскэммит билэлэр испииһэктэрэ)', @@ -2081,18 +2125,22 @@ $1', 'month' => 'Ыйтан бэттэх:', 'year' => 'Сылтан бэттэх:', -'sp-contributions-newbies' => 'Саҥа эрэ ааттан оҥоһуллубут уларытыылары көрдөр', -'sp-contributions-newbies-sub' => 'Саҥа ааттартан', -'sp-contributions-newbies-title' => 'Саҥа бэйэлэрин билиһиннэрбит дьон уларытыылара', -'sp-contributions-blocklog' => 'Бобуу сурунаала', -'sp-contributions-deleted' => 'кыттааччы сотуллубут көннөрүүлэрэ', -'sp-contributions-logs' => 'сурунааллар', -'sp-contributions-talk' => 'ырытыы', -'sp-contributions-userrights' => 'кыттааччылар бырааптарын салайыы', -'sp-contributions-blocked-notice' => 'Бу кыттааччы бырайыакка кыттара билигин бобуллубут. Хааччах сурунаалыгар ол туһунан бүтэһик сурук:', -'sp-contributions-search' => 'Кыттааччы оҥорбут уларытыыларын көрдөөһүн', -'sp-contributions-username' => 'IP аадырыһа эбэтэр аата:', -'sp-contributions-submit' => 'Көрдөө', +'sp-contributions-newbies' => 'Саҥа эрэ ааттан оҥоһуллубут уларытыылары көрдөр', +'sp-contributions-newbies-sub' => 'Саҥа ааттартан', +'sp-contributions-newbies-title' => 'Саҥа бэйэлэрин билиһиннэрбит дьон уларытыылара', +'sp-contributions-blocklog' => 'Бобуу сурунаала', +'sp-contributions-deleted' => 'кыттааччы сотуллубут көннөрүүлэрэ', +'sp-contributions-uploads' => 'киллэриилэр', +'sp-contributions-logs' => 'сурунааллар', +'sp-contributions-talk' => 'ырытыы', +'sp-contributions-userrights' => 'кыттааччылар бырааптарын салайыы', +'sp-contributions-blocked-notice' => 'Бу кыттааччы бырайыакка кыттара билигин бобуллубут. Хааччах сурунаалыгар ол туһунан бүтэһик сурук:', +'sp-contributions-blocked-notice-anon' => 'Бу IP бырайыакка кыттара билигин бобуллубут. +Хааччах сурунаалыгар ол туһунан бүтэһик сурук:', +'sp-contributions-search' => 'Кыттааччы оҥорбут уларытыыларын көрдөөһүн', +'sp-contributions-username' => 'IP аадырыһа эбэтэр аата:', +'sp-contributions-toponly' => 'Кэнники барыллары эрэ көрдөр', +'sp-contributions-submit' => 'Көрдөө', # What links here 'whatlinkshere' => 'Манна сигэнэллэр', @@ -2155,7 +2203,6 @@ $1', 'ipb-edit-dropdown' => 'Бобуу биричиинэтин уларыт', 'ipb-unblock-addr' => '$1 бобуутун суох гын', 'ipb-unblock' => 'Кыттаачыны эбэтэр IP-ны бобуллубуттар испииһэктэриттэн таһаар', -'ipb-blocklist-addr' => '$1 бобууларын көрдөр', 'ipb-blocklist' => 'Бобуулары көрдөр', 'ipb-blocklist-contribs' => '$1 кыттааччы кылаата/киллэриитэ', 'unblockip' => 'Кыттааччыны көҥүллээ', @@ -2224,6 +2271,8 @@ $1 бэлиэр хааччахтаммыт. Хааччахтааһын туру 'sorbs_create_account_reason' => 'Эн IP-ҥ {{SITENAME}} саайт DNSBL-гар аһаҕас прокси быһыытынан сылдьар. Саҥаттан бэлиэтэнэр кыаҕыҥ суох.', 'cant-block-while-blocked' => 'Бэйэҥ хааччахтаммыт кэмҥэр атын кыттааччылары хааччахтыыр кыаҕыҥ суох.', 'cant-see-hidden-user' => 'Эн хааччахтаары гыммыт кыттааччыҥ урут хааччахтаммыт уонна кистэммит эбит. Кыттааччылары кистиир кыаҕыҥ суох буолан ол туһунан суругу көрөр да уларытар да быраабыҥ суох.', +'ipbblocked' => 'Атын кыттааччылары хааччахтыыр да, хааччахтарын да устар кыаҕыҥ суох, тоҕо диэтэххэ бэйэҥ хааччахтааххын', +'ipbnounblockself' => 'Эн бэйэҥ хааччаххын кыайан устубаккын', # Developer tools 'lockdb' => 'Билии олоҕо (database) хатаммыт (көрүөххэ эрэ сөп)', @@ -2258,6 +2307,18 @@ $1 бэлиэр хааччахтаммыт. Хааччахтааһын туру Өскө маннык ааттаах сирэй номнуо баар буоллаҕына сирэй аата '''уларыйыа суоҕа''', арай ол сирэй кураанах эбэтэр утаарар сирэй буолбатах буоллаҕына. Ол аата эн сирэй аатын сыыһа уларыппыт буоллаххына төттөрү урукку аатыгар төннөрүөххүн сөп гынан баран баар сирэйи алҕас сотор кыаҕыҥ суох. +'''СЭРЭТИИ!''' +Сирэй аатын уларытыы улахан уонна эрдэттэн өйдөммөтөх содуллаах буолуон сөп. +Онон, бука диэн салгыаҥ иннинэ үчүгэйдик толкуйдаа.", +'movepagetext-noredirectfixer' => "Манна баар форманы туһанан сирэй аатын уларытыаххын сөп. +Бу түбэлтэҕэ уларытыы сурунаала саҥа сиргэ көһөр. +Урукку аат саҥа сирэйгэ утаарар сирэйгэ кубулуйар. +Бука диэн [[Special:DoubleRedirects|хос ыйынньыктар]] уонна [[Special:BrokenRedirects|быстыбыт сигэниилэр]] баалларын көр. +Сигэлэр сөпкө ыйалларын эн ситиһиэхтээххин. + +Өскө маннык ааттаах сирэй хайыы-үйэ баар буоллаҕына сирэй аата '''уларыйыа суоҕа''', арай ол сирэй кураанах эбэтэр утаарар сирэй буолбатах буоллаҕына. +Ол аата эн сирэй аатын сыыһа уларыппыт буоллаххына төттөрү урукку аатыгар төннөрүөххүн сөп гынан баран, баар сирэйи алҕас сотор кыаҕыҥ суох. + '''СЭРЭТИИ!''' Сирэй аатын уларытыы улахан уонна эрдэттэн өйдөммөтөх содуллаах буолуон сөп. Онон, бука диэн салгыаҥ иннинэ үчүгэйдик толкуйдаа.", @@ -2317,6 +2378,7 @@ $1 бэлиэр хааччахтаммыт. Хааччахтааһын туру 'immobile-source-page' => 'Бу сирэйи аатын уларытар табыллыбат.', 'immobile-target-page' => 'Сирэйгэ бу ааты иҥэрэр табыллыбат.', 'imagenocrossnamespace' => 'Ойууга атын аат далыттан аат биэрэр сатаммат', +'nonfile-cannot-move-to-file' => 'Сирэйдэри билэ гынан ааттарын уларытар табыллыбат', 'imagetypemismatch' => 'Билэ саҥа расширенията тиибигэр сөп түбэспэт', 'imageinvalidfilename' => 'Билэ аата сыыһалаах', 'fix-double-redirects' => 'Утаарыылары урукку ааттарыгар төннөр', @@ -2400,6 +2462,7 @@ $1 бэлиэр хааччахтаммыт. Хааччахтааһын туру 'importstart' => 'Сирэйдэри импортааһын...', 'import-revision-count' => '$1 {{PLURAL:$1|торум|торумнар}}', 'importnopages' => 'Импортка аналлаах сирэй суох.', +'imported-log-entries' => 'Сурунаал $1 {{PLURAL:$1|суруга|суруктара}} импортаннылар.', 'importfailed' => 'Импортыыр табыллыбата: $1', 'importunknownsource' => 'Импортанар сирэй биллибэт көрүҥнээх', 'importcantopen' => 'Импортанар билэ кыайан арыллыбат', @@ -2493,6 +2556,8 @@ $1 бэлиэр хааччахтаммыт. Хааччахтааһын туру 'tooltip-rollback' => 'Биир баттааһынынан бүтэһик көннөрүүлэри оҥорбут киһи уларытыыларын суох оҥорорго.', 'tooltip-undo' => 'Бүтэһик көннөрүүнү суох оҥор уонна уларытыах иннинэ хайдах көстүөхтээҕин көрдөрөр түннүгү таһаар. Уларытыы төрүөтүн быһаарар кыаҕы биэр.', +'tooltip-preferences-save' => 'Туруоруулары бигэргэт', +'tooltip-summary' => 'Кылгастык бу туһунан суруй', # Stylesheets 'common.css' => '/** Манна оҥоһуллубут CSS атын скиннарга эмиэ олохтонуо */', @@ -2598,19 +2663,22 @@ $1', 'nextdiff' => 'Кэннинээҕи уларытыыга →', # Media information -'mediawarning' => "'''Сэрэтии''': Бу билэ иһигэр бырагыраамма куода баар. +'mediawarning' => "'''Сэрэтии''': Бу билэ иһигэр бырагыраамма куода баар. Куһаҕан буоллаҕына систиэмэни алдьатыан сөп.", 'imagemaxsize' => "Ойуу улаханын хааччахтааһын:
    ''(билэ туһунан сирэйгэ аналлаах)''", 'thumbsize' => 'Кыра ойуу (миниатюра) кээмэйэ:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|сирэй|сирэй}}', -'file-info' => '(билэ кээмэйэ: $1, MIME тиибэ: $2)', -'file-info-size' => '($1 × $2 пииксэл, билэ кээмэйэ: $3, MIME тиибэ: $4)', +'file-info' => 'билэ кээмэйэ: $1, MIME тиибэ: $2', +'file-info-size' => '$1 × $2 пииксэл, билэ кээмэйэ: $3, MIME тиибэ: $4', 'file-nohires' => 'Бу ойуу маннааҕар улахан торума суох.', -'svg-long-desc' => '(SVG билэ, номинальнай кээмэйэ $1 × $2 пииксэл, билэ кээмэйэ: $3)', +'svg-long-desc' => 'SVG билэ, номинальнай кээмэйэ $1 × $2 пииксэл, билэ кээмэйэ: $3', 'show-big-image' => 'Ойуу бэйэтин толору кээмэйэ', 'show-big-image-thumb' => 'Хачайдыах иннинэ көрүү кээмэйэ: $1 × $2 пииксэл', 'file-info-gif-looped' => 'хатаммыт (бобуллубут)', 'file-info-gif-frames' => '$1 {{PLURAL:$1|фреймнаах|фреймнардаах}}', +'file-info-png-looped' => 'төттөрү эргийэр', +'file-info-png-repeat' => '{{PLURAL:$1|биирдэ|төгүл}} оонньонор $1', +'file-info-png-frames' => '$1 {{PLURAL:$1|фреймнаах|фреймнардаах}}', # Special:NewFiles 'newimages' => 'Саҥа билэлэр галереялара', @@ -2768,6 +2836,7 @@ $1', 'exif-gpsareainformation' => 'GPS оройуонун аата', 'exif-gpsdatestamp' => 'GPS ыйа-күнэ', 'exif-gpsdifferential' => 'GPS көннөрүүтүн дифференциала', +'exif-objectname' => 'Кылгас аата', # EXIF attributes 'exif-compression-1' => 'Хам тутуллубатах', @@ -2849,6 +2918,8 @@ $1', 'exif-sensingmethod-7' => 'Үс өҥнөөх линейнай сенсор', 'exif-sensingmethod-8' => 'Линейный сенсор с последовательным измерением цвета', +'exif-filesource-3' => 'Цифровой фотоаппарат', + 'exif-scenetype-1' => 'Объект бэйэтин хаартыскаҕа түһэриллибит', 'exif-customrendered-0' => 'Оҥоһуллубатах', @@ -2925,30 +2996,30 @@ $1', 'limitall' => 'бары', # E-mail address confirmation -'confirmemail' => 'Электроннай аадырыһы бигэргэтии', -'confirmemail_noemail' => '[[Special:Preferences|Бэйэҥ туруорууларгар]] электроннай аадырыскын суруйбатаххын эбэтэр сыыһа суруйбуккун.', -'confirmemail_text' => '{{SITENAME}} движога үлэлиэҥ иннинэ электроннай аадырыскын бигэргэтэри эрэйэр. +'confirmemail' => 'Электроннай аадырыһы бигэргэтии', +'confirmemail_noemail' => '[[Special:Preferences|Бэйэҥ туруорууларгар]] электроннай аадырыскын суруйбатаххын эбэтэр сыыһа суруйбуккун.', +'confirmemail_text' => '{{SITENAME}} движога үлэлиэҥ иннинэ электроннай аадырыскын бигэргэтэри эрэйэр. Аналлаах тимэҕи баттаан эппит аадырыскар сурукта ыыттар. Ол суругу арыйдаххына, аадырыһыҥ бигэргэтиллиэ.', -'confirmemail_pending' => 'Бигэргэтии куода номнуо ыытыллыбыт. +'confirmemail_pending' => 'Бигэргэтии куода номнуо ыытыллыбыт. Бэйэҕин соторутааҕыта билиһиннэрбит буоллаххына ол сурук кэлэрин кыратык кэтэһэ түс. Ол кэннэ, кэлбэтэҕинэ, куоду өссө көрдөөр.', -'confirmemail_send' => 'Бигэргэтии куодун почтанан ыыт', -'confirmemail_sent' => 'Бигэргэтэр сурук ыытылынна.', -'confirmemail_oncreate' => 'Бигэргэтэр сурук эппит почтаҕар ыытылынна. +'confirmemail_send' => 'Бигэргэтии куодун почтанан ыыт', +'confirmemail_sent' => 'Бигэргэтэр сурук ыытылынна.', +'confirmemail_oncreate' => 'Бигэргэтэр сурук эппит почтаҕар ыытылынна. Бу бигэргэтии систиэмэҕэ киирэри хааччахтаабат эрээри, электроннай почтаны манна туһанаргар бигэргэтэриҥ наада.', -'confirmemail_sendfailed' => '{{SITENAME}} бигэргэтэр суруга кыайан ыытыллыбата. +'confirmemail_sendfailed' => '{{SITENAME}} бигэргэтэр суруга кыайан ыытыллыбата. Электроннай аадырыскын сөпкө суруйбуккун бэрэбиэркэлээ. Сурук барбатах төрүөтэ: $1', -'confirmemail_invalid' => 'Бигэргэтии куода сыыһа эбэтэр болдьоҕо ааспыт.', -'confirmemail_needlogin' => '$1 - маны оҥордоххуна аадырыскын бигэргэтиэҥ.', -'confirmemail_success' => 'Электроннай аадырыһыҥ бигэргэтилиннэ. +'confirmemail_invalid' => 'Бигэргэтии куода сыыһа эбэтэр болдьоҕо ааспыт.', +'confirmemail_needlogin' => '$1 - маны оҥордоххуна аадырыскын бигэргэтиэҥ.', +'confirmemail_success' => 'Электроннай аадырыһыҥ бигэргэтилиннэ. [[Special:UserLogin|Ааккын этэн]] биикигэ киириэххин сөп.', -'confirmemail_loggedin' => 'Электроннай почтаҥ аадырыһа бигэргэтилиннэ.', -'confirmemail_error' => 'Бигэргэтии кэмигэр моһол таҕыста.', -'confirmemail_subject' => '{{SITENAME}}: эл. почта аадырыһын бигэргэтии', -'confirmemail_body' => 'Ким эрэ, баҕар эн буолуо бу IP-ттан: $1, {{SITENAME}} сиэрбэригэр +'confirmemail_loggedin' => 'Электроннай почтаҥ аадырыһа бигэргэтилиннэ.', +'confirmemail_error' => 'Бигэргэтии кэмигэр моһол таҕыста.', +'confirmemail_subject' => '{{SITENAME}}: эл. почта аадырыһын бигэргэтии', +'confirmemail_body' => 'Ким эрэ, баҕар эн буолуо бу IP-ттан: $1, {{SITENAME}} сиэрбэригэр «$2» диэн ааты бэлиэтээтэ уонна бу электроннай аадырыһы ыйда. Маны сөбүлэһэр буоллаххына бу ыйынньыгы: $3 баттаан @@ -2957,8 +3028,36 @@ $1', Оттон бу туһунан тугу да билбэт буоллаххына бу ыйынньыгынан баран эл. почтаҕын сотон кэбис: $5', -'confirmemail_invalidated' => 'Электроннай почта аадырыһын бигэргэтиини суох оҥоһулунна', -'invalidateemail' => 'Эл. почта бигэргэтээһинин араарга', +'confirmemail_body_changed' => 'Ким эрэ (баҕар эн буолуо) маннык IP-ттан: $1 +бу аадырыһы «$2» диэн {{SITENAME}} кыттаччыта бэйэтин саҥа аадырыһын курдук эттэ. + +Бу кытааччы аата кырдьык эйиэнэ буоларын бигэргэтэр буоллаххына, +уонна {{SITENAME}} саайтан эйиэхэ сурук кэлэрин сөбүлэһэр буоллаххына, аллара баар сигэни арый. + +$3 + +Өскө бу аат эйиэхэ сыһыана суох буоллаҕына, бу сигэнэн бараҥҥын, +аадырыс бигэргэтиитин уурат + +$5 + +Бигэргэтии куода баччаҕа дылы болдьохтоох: $4.', +'confirmemail_body_set' => 'Ким эрэ (баҕар эн буолуо) маннык IP-ттан: $1 +бу аадырыһы «$2» диэн {{SITENAME}} кыттааччыта бэйэтин аадырыһын курдук эттэ. + +Бу кытааччы кырдьык Эн бэйэҥ буоларын бигэргэтэр буоллаххына, +уонна {{SITENAME}} саайтан эйиэхэ сурук кэлэрин сөбүлэһэр буоллаххына, аллара баар сигэни баттаа: + +$3 + +Өскө бу аат эйиэхэ сыһыана суох буоллаҕына, бу сигэнэн бараҥҥын, +аадырыс бигэргэтиитин уурат: + +$5 + +Бигэргэтии куода баччаҕа дылы болдьохтоох: $4.', +'confirmemail_invalidated' => 'Электроннай почта аадырыһын бигэргэтиини суох оҥоһулунна', +'invalidateemail' => 'Эл. почта бигэргэтээһинин араарга', # Scary transclusion 'scarytranscludedisabled' => '[Interwiki transcluding араҕыста]', @@ -2998,6 +3097,7 @@ $1', 'table_pager_first' => 'Бастакы сирэй', 'table_pager_last' => 'Бүтэһик сирэй', 'table_pager_limit' => 'Сирэйгэ бачча $1 пууну көрдөр', +'table_pager_limit_label' => 'Сирэйгэ суруллуу ахсаана:', 'table_pager_limit_submit' => 'Толор', 'table_pager_empty' => 'Туох да көстүбэтэ', @@ -3056,6 +3156,7 @@ $1', 'version-specialpages' => 'Аналлаах сирэйдэр', 'version-parserhooks' => 'синтаксическай анализатор перехватчиктара', 'version-variables' => 'Уларыйар дааннайдар (переменнайдар)', +'version-skins' => 'Тас көстүү барыллара', 'version-other' => 'Атын', 'version-mediahandlers' => 'Медиа уларытааччылар', 'version-hooks' => 'Перехватчиктар', @@ -3067,6 +3168,13 @@ $1', 'version-hook-subscribedby' => 'Суруттарыыта:', 'version-version' => '(Торум $1)', 'version-license' => 'Лиссиэнзийэ', +'version-poweredby-credits' => "Бу биики бу движокка олоҕурар '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'атыттар', +'version-license-info' => 'MediaWiki көҥүл тарҕанар бырагырааммаларга киирэр, кинини көмпүүтэр аһаҕас бырагырааммаларын пуондатын GNU General Public License усулуобуйатынан көҥүл тарҕатаргыт уонна/эбэтэр уларытаргыт көҥүллэнэр; иккис эбэтэр онтон хойукку ханнык баҕарар барылыттан саҕалаан. + +MediaWiki туһалаах буоллун диэн тарҕатыллар, ол эрээри АТЫЫЛАНАР СЫАННАҺА эбэтэр ХАННЫК ЭРЭ ЧОПЧУ СОРУККА СӨП ТҮБЭҺИИТЭ бигэргэтиллибэт (гарантията суох). Сиһилии GNU General Public License усулуобуйатын көрүҥ. + +[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General Public License копиятын] бу бырагыраамманы кытта ылыахтаах этигит, ол сатамматах буоллаҕына Free Software Foundation, Inc. тэрилтэҕэ сурукта суруйуҥ, бу аадырыска: 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA эбэтэр [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html саайка киирэн ааҕыҥ].', 'version-software' => 'Туруоруллубут бырагырааммалар', 'version-software-product' => 'Бородуукта', 'version-software-version' => 'Барыл (торум)', @@ -3136,6 +3244,15 @@ $1', 'tags-edit' => 'уларытыы', 'tags-hitcount' => '$1 {{PLURAL:$1|уларытыы|уларытыылар}}', +# Special:ComparePages +'comparepages' => 'Сирэйдэри тэҥнииргэ', +'compare-selector' => 'Сирэйдэр барылларын тэҥнииргэ', +'compare-page1' => 'Бастакы сирэй', +'compare-page2' => 'Иккис сирэй', +'compare-rev1' => 'Бастакы барыл', +'compare-rev2' => 'Иккис барыл', +'compare-submit' => 'Тэҥнииргэ', + # Database error messages 'dberr-header' => 'Бу биики туга эрэ сатаммата', 'dberr-problems' => 'Баалаама! Бу саайт техническэй ыарахаттары көрсүбүт.', @@ -3152,8 +3269,13 @@ $1', 'htmlform-float-invalid' => 'Эн суруйбутуҥ чыыһыла буолбатах.', 'htmlform-int-toolow' => 'Эппит чыыһылаҥ минимальнайтан кыра — $1', 'htmlform-int-toohigh' => 'Эппит чыыһылаҥ максимальнайтан улахан — $1', +'htmlform-required' => 'Бу хайаан да наада', 'htmlform-submit' => 'Ыыт', 'htmlform-reset' => 'Уларытыыны төннөр', 'htmlform-selectorother-other' => 'Атын', +# SQLite database support +'sqlite-has-fts' => '$1 толору тиэкистээх көрдөөһүнү өйүүр', +'sqlite-no-fts' => '$1 толору тиэкистээх көрдөөһүнү өйөөбөт', + ); diff --git a/languages/messages/MessagesSc.php b/languages/messages/MessagesSc.php index 1e543df6..708aeb38 100644 --- a/languages/messages/MessagesSc.php +++ b/languages/messages/MessagesSc.php @@ -71,8 +71,7 @@ $messages = array( 'tog-editsection' => 'Acontza setziones dae su butone [acontza]', 'tog-editsectiononrightclick' => "Abilita s'acontzu de is setziones cun dòpiu click in is tìtulos de is setziones (esigit JavaScript)", 'tog-showtoc' => "Ammustra s'ìndixe de is cuntènnidos (pro pàginas cun prus de 3 setziones)", -'tog-rememberpassword' => 'Ammenta sa password in custu computer', -'tog-editwidth' => 'Amànnia su box pro acontzare a sa largària màssima', +'tog-rememberpassword' => 'Ammenta sa sessione in custu navigadore (pro unu màssimu de $1 {{PLURAL:$1|die|dies}})', 'tog-watchcreations' => 'Aciungi is pàginas chi apo creadu a sa watchlist mea', 'tog-watchdefault' => 'Aciungi is pàginas chi apo acontzadu a sa watchlist mea', 'tog-watchmoves' => 'Aciungi is pàginas chi apo mòvidu a sa watchlist mea', @@ -205,30 +204,19 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Giunghe cuntierra', -'vector-action-delete' => 'Cantzella', -'vector-action-move' => 'Move', -'vector-action-protect' => 'Ampara', -'vector-action-undelete' => 'Recùpera', -'vector-namespace-category' => 'Categoria', -'vector-namespace-help' => 'Pàgina de agiudu', -'vector-namespace-image' => 'File', -'vector-namespace-main' => 'Pàgina', -'vector-namespace-media' => 'Pàgina de multimedia', -'vector-namespace-mediawiki' => 'Messàgiu', -'vector-namespace-project' => 'Pàgina de servìtziu', -'vector-namespace-special' => 'Pàgina spetziale', -'vector-namespace-talk' => 'Cuntierra', -'vector-namespace-template' => 'Template', -'vector-namespace-user' => 'Pàgina usuàriu', -'vector-view-create' => 'Crea', -'vector-view-edit' => 'Acontza', -'vector-view-history' => 'Càstia istòria', -'vector-view-view' => 'Leghe', -'vector-view-viewsource' => 'Càstia mitza', -'actions' => 'Atziones', -'namespaces' => 'Nùmene-logos', -'variants' => 'Variantes', +'vector-action-addsection' => 'Giunghe cuntierra', +'vector-action-delete' => 'Cantzella', +'vector-action-move' => 'Move', +'vector-action-protect' => 'Ampara', +'vector-action-undelete' => 'Recùpera', +'vector-view-create' => 'Crea', +'vector-view-edit' => 'Acontza', +'vector-view-history' => 'Càstia istòria', +'vector-view-view' => 'Leghe', +'vector-view-viewsource' => 'Càstia mitza', +'actions' => 'Atziones', +'namespaces' => 'Nùmene-logos', +'variants' => 'Variantes', 'errorpagetitle' => 'Faddina', 'returnto' => 'Torra a $1.', @@ -284,6 +272,7 @@ $messages = array( 'jumpto' => 'Bae a:', 'jumptonavigation' => 'navigadura', 'jumptosearch' => 'chirca', +'pool-errorunknown' => 'Faddina disconnota', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'A propòsitu de {{SITENAME}}', @@ -415,7 +404,7 @@ No iscaressa de personalizare sas [[Special:Preferences|preferèntzias de {{SITE 'yourname' => 'Nùmene usuàriu', 'yourpassword' => 'Password:', 'yourpasswordagain' => 'Repite sa password:', -'remembermypassword' => 'Ammenta sa password in custu computer', +'remembermypassword' => 'Ammenta sa password in custu carculadore (pro unu màssimu de $1 {{PLURAL:$1|die|dies}})', 'yourdomainname' => 'Spetzificare su domìniu', 'login' => 'Intra', 'nav-login-createaccount' => 'Intra / crea account', @@ -431,6 +420,7 @@ No iscaressa de personalizare sas [[Special:Preferences|preferèntzias de {{SITE 'gotaccount' => 'Tenes giai unu account? $1.', 'gotaccountlink' => 'Identifica·ti', 'createaccountmail' => 'via e-mail', +'createaccountreason' => 'Motivu:', 'badretype' => 'Sas passwords chi as insertau non currenspundint.', 'userexists' => 'Su nùmene usuàriu insertadu est giai impreadu. Sèbera unu nùmene diferente.', @@ -513,6 +503,7 @@ Pro praxere, cando dda retzis identìfica·ti torra.', 'showdiff' => 'Ammustra is mudàntzias', 'anoneditwarning' => "'''Atentzione:''' Non ses identificadu (log in). S'indiritzu IP tuo at a èsser registradu in sa stòria de custa pàgina.", +'anonpreviewwarning' => "''Non ses identificadu. Sarbende s'indiritzu IP tuo at a èsser registradu in sa stòria de sa pàgina.''", 'missingcommenttext' => 'Inserta unu cummentu inoghe a suta.', 'summary-preview' => 'Antiprima ogetu:', 'subject-preview' => 'Antiprima tema/tìtulu:', @@ -616,6 +607,8 @@ Cosas de ammentare: '''({{int:cur}})''' = diferèntzias cun sa versione currente 'revdelete-show-file-submit' => 'Eja', 'revdelete-radio-set' => 'Eja', 'revdel-restore' => 'Muda sa visibilidade', +'revdel-restore-deleted' => 'revisiones burradas', +'revdel-restore-visible' => 'revisiones visìbiles', 'pagehist' => 'Istòria de sa pàgina', 'deletedhist' => 'Istòria fuliada', 'revdelete-content' => 'cuntènnidu', @@ -722,6 +715,7 @@ Prova a seberare ''totu:'' pro chircare in totu su cuntènnidu (inclùdidas pàg 'resultsperpage' => 'Risultati da visualizzare per pagina', 'contextlines' => 'Righe di testo da mostrare per ciascun risultato', 'contextchars' => 'Caratteri per linea', +'stub-threshold-disabled' => 'Disativadu', 'recentchangescount' => 'Nùmeru de acontzos de amostare pro definidura:', 'savedprefs' => 'Is preferèntzias tuas sunt stadas sarbadas.', 'timezonelegend' => 'Zona de oràriu:', @@ -821,12 +815,8 @@ Prova a seberare ''totu:'' pro chircare in totu su cuntènnidu (inclùdidas pàg 'recentchanges' => 'Ùrtimas mudàntzias', 'recentchanges-legend' => 'Possibilidades subra ùrtimas mudàntzias', 'recentchanges-feed-description' => 'Custu feed riportada is ùrtimas mudàntzias a is cuntènnidos de su giassu.', -'recentchanges-label-legend' => 'Cosas de ammentare: $1.', -'recentchanges-legend-newpage' => '$1 - pàgina noa', 'recentchanges-label-newpage' => 'Custu acontzu at creadu una pàgina noa', -'recentchanges-legend-minor' => '$1 - acontzu minore', 'recentchanges-label-minor' => 'Custu est unu acontzu minore', -'recentchanges-legend-bot' => '$1 - acontzu dae bot', 'recentchanges-label-bot' => 'Custu acontzu est stadu fatu dae unu bot', 'rcnote' => "Inoghe sighende {{PLURAL:$1|b'est s'ùrtima mudàntzia|bi sunt is ùrtimas '''$1''' mudàntzias}} {{PLURAL:$2|in s'ùrtima die|in is ùrtimas '''$2''' dies}}; is datos sunt agiornados a $5, $4.", 'rcnotefrom' => "Sas chi sighint sunt sas mudàntzias dae '''$2''' (fintzas a '''$1''').", @@ -885,7 +875,6 @@ Càstia sa [[Special:NewFiles|galleria de files nous]] pro una presentada prus b 'filesource' => 'Orìgine:', 'uploadedfiles' => 'Files carrigadus', 'badfilename' => 'Su nùmene de su file est stadu cunvertidu in "$1".', -'successfulupload' => 'Carrigamentu acabau', 'uploadwarning' => 'Avvisu de carrigamentu', 'savefile' => 'Sarva file', 'uploadedimage' => 'carrigadu "[[$1]]"', @@ -894,6 +883,7 @@ Càstia sa [[Special:NewFiles|galleria de files nous]] pro una presentada prus b 'sourceurl' => 'Diretzione originària:', 'destfilename' => 'Nùmene de su file de destinatzione:', 'upload-description' => 'Descritzione de su file', +'upload-success-subj' => 'Carrigamentu acabau', 'upload-file-error' => 'Faddina a intru', @@ -966,7 +956,7 @@ Càstia sa [[Special:NewFiles|galleria de files nous]] pro una presentada prus b 'doubleredirects' => 'Redirects dòpios', 'doubleredirectstext' => 'Custa pàgina cuntenet una lista de pàginas ki re-indiritzant a àteras pàginas de re-indiritzamentu. Ogni lìnia cuntenet ligàmines a su primu e a su de duos re-indiritzamentu, aici comente sa prima lìnia de sa de duos re-indiritzamentos, chi de sòlitu adòbiat s\'artìculu "beru", a sa cale fintzas su primu re-indiritzamentu dia depet puntare. -Is re-indiritzamentos cantzellados sunt stados curretos.', +Is re-indiritzamentos cantzellados sunt stados curretos.', 'brokenredirects' => 'Redirects isballiaus', 'brokenredirectstext' => 'Custus redirects ligant cun pàginas chi no esistint.', @@ -1076,10 +1066,12 @@ S'indiritzu chi as insertadu in is [[Special:Preferences|preferèntzias usuàriu 'emailsent' => 'E-mail ispedia', 'emailsenttext' => 'Sa e-mail tua est istada imbiada.', +# User Messenger +'usermessage-editor' => 'Missu de su sistema', + # Watchlist 'watchlist' => 'Sa watchlist mea', 'mywatchlist' => 'Sa watchlist mea', -'watchlistfor' => "(pro '''$1''')", 'nowatchlist' => 'No as indicadu pàginas in sa watchlist tua.', 'watchnologin' => 'No intrau (log in)', 'watchnologintext' => 'Devi prima fare il [[Special:UserLogin|login]] @@ -1446,9 +1438,9 @@ Podes agiùnger unu motivu in s\'ogetu de s\'acontzu.', 'nextdiff' => 'Acontzu in fatu →', # Media information -'file-info-size' => '($1 × $2 pixels, mannesa de su file: $3, tipu de MIME: $4)', +'file-info-size' => '$1 × $2 pixels, mannesa de su file: $3, tipu de MIME: $4', 'file-nohires' => 'Non si tenent risolutziones prus artas.', -'svg-long-desc' => '(file in formadu SVG, mannesa nominale $1 × $2 pixel, mannesa de su file: $3)', +'svg-long-desc' => 'file in formadu SVG, mannesa nominale $1 × $2 pixel, mannesa de su file: $3', 'show-big-image' => 'Versione a risolutzione arta', 'show-big-image-thumb' => 'Mannesa de custa antiprima: $1 × $2 pixels', diff --git a/languages/messages/MessagesScn.php b/languages/messages/MessagesScn.php index 2dc46624..bb64cd55 100644 --- a/languages/messages/MessagesScn.php +++ b/languages/messages/MessagesScn.php @@ -150,8 +150,7 @@ $messages = array( 'tog-editsection' => 'Abbìlita lu canciamentu dî sezzioni tràmiti lu culligamentu [cancia]', 'tog-editsectiononrightclick' => 'Abbìlita lu canciamentu dî sezzioni tràmiti duppiu click supra lu tìtulu dâ sezzioni (richiedi Javascript)', 'tog-showtoc' => "Ammustra l'ìndici (pi artìculi cu cchiù di 3 sezzioni)", -'tog-rememberpassword' => "Arricorda la password (richiedi l'usu di cookie)", -'tog-editwidth' => 'Aumenta a lu màssimu la larghizza dâ casella di canciamentu', +'tog-rememberpassword' => "Arricorda la password (richiedi l'usu di cookie) (for a maximum of $1 {{PLURAL:$1|day|days}})", 'tog-watchcreations' => "Agghiunci li pàggini criati a l'ossirvati spiciali", 'tog-watchdefault' => "Agghiunci li pàggini canciati a l'ossirvati spiciali", 'tog-watchmoves' => "Agghiunci li pàggini spustati a l'ossirvati spiciali", @@ -296,31 +295,20 @@ $messages = array( 'faqpage' => 'Project:Dumanni comuni', # Vector skin -'vector-action-addsection' => 'Agghiunci argumentu', -'vector-action-delete' => 'Elìmina', -'vector-action-move' => 'Sposta', -'vector-action-protect' => 'Pruteggi', -'vector-action-undelete' => 'Riprìstina', -'vector-action-unprotect' => 'Sblocca', -'vector-namespace-category' => 'Catigurìa', -'vector-namespace-help' => 'Aiutu', -'vector-namespace-image' => 'File', -'vector-namespace-main' => 'Pàggina', -'vector-namespace-media' => 'File multimediali', -'vector-namespace-mediawiki' => 'Misaggiu', -'vector-namespace-project' => 'Pàggina di sirviziu', -'vector-namespace-special' => 'Pàggina spiciali', -'vector-namespace-talk' => 'Discussioni', -'vector-namespace-template' => 'Template', -'vector-namespace-user' => 'Utenti', -'vector-view-create' => 'Crea', -'vector-view-edit' => 'Cancia', -'vector-view-history' => 'Talìa a storia', -'vector-view-view' => 'Leggi', -'vector-view-viewsource' => 'Talìa la fonti', -'actions' => 'Azzioni', -'namespaces' => 'Namespace', -'variants' => 'Varianti', +'vector-action-addsection' => 'Agghiunci argumentu', +'vector-action-delete' => 'Elìmina', +'vector-action-move' => 'Sposta', +'vector-action-protect' => 'Pruteggi', +'vector-action-undelete' => 'Riprìstina', +'vector-action-unprotect' => 'Sblocca', +'vector-view-create' => 'Crea', +'vector-view-edit' => 'Cancia', +'vector-view-history' => 'Talìa a storia', +'vector-view-view' => 'Leggi', +'vector-view-viewsource' => 'Talìa la fonti', +'actions' => 'Azzioni', +'namespaces' => 'Namespace', +'variants' => 'Varianti', 'errorpagetitle' => 'Erruri', 'returnto' => 'Ritorna a $1.', @@ -379,6 +367,7 @@ $messages = array( 'view-pool-error' => "Ci spiaci, li server ni stu mumentu sunu troppu carichi. Troppi utenti stannu circannu di taliari sta pàggina. Aspetta n'anticchia prima di pruvari a ritaliari sta pàggina. $1", +'pool-errorunknown' => 'Erruri scanusciutu', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Àutri nfurmazzioni supra {{SITENAME}}', @@ -538,7 +527,7 @@ L'account hà statu criatu currettamenti. Nun ti scurdari di pirsunalizzari li [ 'yourname' => "Lu tò nomu d'utenti (''user name'')", 'yourpassword' => "La tò ''password''", 'yourpasswordagain' => "Scrivi la password n'àutra vota", -'remembermypassword' => "Ricòrdami la mè ''password'' duranti li sissioni.", +'remembermypassword' => "Ricòrdami la mè ''password'' duranti li sissioni (for a maximum of $1 {{PLURAL:$1|day|days}})", 'yourdomainname' => 'Lu tò dominiu', 'externaldberror' => "S'havi virificatu n'erruri cû server d'autinticazzioni sternu, oppuru nun si disponi di l'auturizzazzioni nicissari p'aggiurnari lu propiu accessu sternu.", 'login' => 'Trasi', @@ -555,6 +544,7 @@ L'account hà statu criatu currettamenti. Nun ti scurdari di pirsunalizzari li [ 'gotaccount' => "Hai già nu cuntu? '''$1'''.", 'gotaccountlink' => 'Trasi', 'createaccountmail' => 'via e-mail', +'createaccountreason' => 'Mutivu:', 'badretype' => "La ''password'' chi mittisti nun è bona.", 'userexists' => 'Lu nomu utenti nzeritu è già usatu. Ti prijamu pirciò di vuliri scègghiri nu nomu utenti diversu.', 'loginerror' => "Erruri nta l'accessu", @@ -657,6 +647,7 @@ Pò èssiri ca ggià canciasti cu successu la tò password o c'addumannasti na n 'showlivepreview' => "Funzioni ''Live preview''", 'showdiff' => 'Ammustra li canciamenti', 'anoneditwarning' => "'''Accura''': nun hai esiquitu lu login. Lu tò ndirizzu IP veni riggistratu ntâ cronoluggìa di sta pàggina.", +'anonpreviewwarning' => "''Nun trasisti comu utiliggaturi loggatu. Sarbannu, lu tò nnirizzu IP veni arriggistratu ntâ storia dî canciamenti.''", 'missingsummary' => "'''Accura:''' Nun hà statu spicificatu l'uggettu di stu canciamentu. Primennu di novu '''Sarva''' lu canciamentu veni sarvatu cu l'uggettu vacanti.", 'missingcommenttext' => 'Nziriri un cummentu ccà sutta.', 'missingcommentheader' => "'''Accura:''' Nun hà statu spicificatu la ntistazzioni di stu cummentu. Primennu di novu '''Sarva''' lu canciamentu veni saravtu senza ntistazzioni.", @@ -725,7 +716,7 @@ Siddu sî n’utenti anònimu e riteni ca li cummenti prisenti nta sta pàggina 'usercsspreview' => "'''Arricorda ca stai sulu visualizzannu n'antiprima dû tò CSS pirsunali.''' '''Nun hà ancora statu sarvatu!'''", 'userjspreview' => "'''Arricorda ca stai sulu tistanno/vidennu 'n antiprima lu tò javascript pirsunali, nun hà statu ancora sarvatu!'''", -'userinvalidcssjstitle' => "'''Accura:''' Nun esisti arcuna skin cu nomu \"\$1\". S'arricorda ca li pàggini pi li .css e .js pirsunalizzati hannu la nizziali dû tìtulu minùscula, p'asempiu {{ns:user}}:Asempiu/monobook.js e nun {{ns:user}}:Asempiu/Monobook.css.", +'userinvalidcssjstitle' => "'''Accura:''' Nun esisti arcuna skin cu nomu \"\$1\". S'arricorda ca li pàggini pi li .css e .js pirsunalizzati hannu la nizziali dû tìtulu minùscula, p'asempiu {{ns:user}}:Asempiu/vector.js e nun {{ns:user}}:Asempiu/Vector.css.", 'updated' => '(Aggiurnatu)', 'note' => "'''Accura:'''", 'previewnote' => "'''Ricurdàtivi ca chista è sulu n'antiprima, e ca nun hà statu ancora sarvata!'''", @@ -755,7 +746,6 @@ Primennu lu pulsanti '{{int:savearticle}}', veni sarvatu '''sulu''' lu testu cun Vuatri prumittiti puru chi lu scrivìstivu chî vostri palori, o chi lu cupiàstivu di nu duminiu pùbbricu o di risursi sìmili '''NUN SUTTAMITTÌTI MATIRIALI SUTTA COPYRIGHT SENZA PIRMISSU!'''", 'copyrightwarning2' => "Nota: tutti li cuntribbuti mannati a {{SITENAME}} ponnu èssiri mudificati o cancillati di parti di l'àutri participanti. Siddu nun addisìi ca li tò testi ponnu èssiri mudificati senza arcunu riguardu, nun mannàrili a stu situ.
    Cu la mannata dû testu dichiari noltri, sutta la tò rispunzabbilitati, ca lu testu hà statu scrittu di tia pirsunalmenti oppuru c'hà statu cupiatu di na fonti di pùbbricu dominiu o analucamenti lìbbira. (vidi $1 pi maiuri dittagghi) '''NUN MANNARI MATIRIALI CUPERTU DI DRITTU D'AUTURI SENZA AUTURIZZAZZIONI!'''", -'longpagewarning' => "'''ACCURA: Sta pàggina è longa $1 kilobyte. Arcuni browser putìssiru prisintari dî prubbremi ntô canciari pàggini ca s'avvicìnanu o sùpiranu 32 kb. Pi favuri pigghia n cunzidirazzioni la pussibbilitati di suddivìdiri la pàggina n sizzioni cchiù nichi.'''", 'longpageerror' => "'''ERRURI: Lu testu ca hai suttamissu è longu $1 kilobyte, ch'è cchiù dû màssimu di $2 kilobyte. Nun pò èssiri sarvatu.'''", 'readonlywarning' => "'''ACCURA: Lu database è fermu pi manutinzioni, pirciò nun poi sarvari li tò canciamenti nta stu mumentu. La cosa megghia è fari un copia e ncolla dû testu nta n'àutru prugramma e sarvàrilu pi quannu lu database è accissìbbili.''' @@ -1080,6 +1070,7 @@ S'havi accirtari ca la cuntinuità storica di la pàggina nun veni altirata.", 'contextlines' => 'Righi di testu pi ognunu risurtatu:', 'contextchars' => 'Nùmmaru di caràttiri di cuntestu:', 'stub-threshold' => 'Valuri minimu pî liami a li stub:', +'stub-threshold-disabled' => 'Disabbìlitatu', 'recentchangesdays' => "Nùmmuru di jorna a ammustrari nte l'urtimi cancaiamenti:", 'recentchangesdays-max' => '(màssimu $1 {{PLURAL:$1|jornu|jorna}})', 'recentchangescount' => 'Nùmmiru di canciamenti da ammustrari di default:', @@ -1146,7 +1137,7 @@ L'operazioni nun pò èssiri annullata.", 'prefs-advancedrendering' => 'Opzioni avanzati', 'prefs-advancedsearchoptions' => 'Opzioni avanzati', 'prefs-advancedwatchlist' => 'Opzioni avanzati', -'prefs-display' => 'Opzioni di visualizzazioni', +'prefs-displayrc' => 'Opzioni di visualizzazioni', 'prefs-diffs' => 'Diffirenzi', # User rights @@ -1252,7 +1243,6 @@ L'operazioni nun pò èssiri annullata.", 'right-siteadmin' => 'Blocca a sblocca lu databasi', 'right-reset-passwords' => 'Reimposta la password di autri utenti', 'right-override-export-depth' => 'Esporta pàggini cumpresi li pàggini culligati finu ô quintu liveddu', -'right-versiondetail' => 'Talìa li informazioni cumpleti dô software', # User rights log 'rightslog' => "Dritti di l'utenti", @@ -1302,14 +1292,9 @@ L'operazioni nun pò èssiri annullata.", 'recentchanges-legend' => 'Opzioni ùrtimi canciamenti', 'recentchangestext' => 'Chista pàggina prisenta li canci cchiù ricenti ê cuntinuti dô situ.', 'recentchanges-feed-description' => 'Stu feed riporta li canciamenti cchiù ricenti a li cuntinuti dû situ.', -'recentchanges-label-legend' => 'Liggenda: $1.', -'recentchanges-legend-newpage' => '$1 - pàggina nova', 'recentchanges-label-newpage' => 'This edit havi creatu na nova pàggina', -'recentchanges-legend-minor' => '$1 - canciamentu nicu', 'recentchanges-label-minor' => 'Chista è nu canciamentu nnicu', -'recentchanges-legend-bot' => '$1 - canciamentu dô bot', 'recentchanges-label-bot' => 'Stu canciamentu fu fattu dû bot', -'recentchanges-legend-unpatrolled' => '$1 - canciamentu nun virificatu', 'recentchanges-label-unpatrolled' => 'Stu canciamentu nun havi ancora statu virificatu', 'rcnote' => "Ccà sutta {{PLURAL:$1|c'è lu canciamentu cchiù ricenti appurtatu|cci sunnu l'ùrtimi '''$1''' canciamenti appurtati}} ô situ {{PLURAL:$2|nta l'ùrtimi 24 uri|nta l'ùrtimi '''$2''' giorni}}; li dati sunnu aggiurnati ê $5 dû $4.", 'rcnotefrom' => 'Ccà sutta cci sunnu li canciamenti a pàrtiri dû $2 (ammustrati nzinu ô $1).', @@ -1384,6 +1369,7 @@ Pi nziriri nu file nta na pàggina, fai nu lijami accussì: 'filetype-unwanted-type' => "Caricari file di tipu '''\".\$1\"''' è scunsigghiatu. {{PLURAL:\$3|Lu tipu di file cunsigghiatu è|Li tipi di file cunsigghiati sunnu}} \$2.", 'filetype-banned-type' => "Caricari file di tipu '''\".\$1\"''' non è cunzintitu. {{PLURAL:\$3|Lu tipu di file cunzintitu è|Li tipi di file cunzintiti sunnu}} \$2.", 'filetype-missing' => 'Lu file è privu d\'estinzioni (p\'asèmpiu ".jpg").', +'unknown-error' => 'Ci fù un erruri scanusciutu', 'large-file' => 'Si raccumanna di nun supirari li diminzioni di $1 pi ognunu file; stu file è granni $2.', 'largefileserver' => 'Lu file sùpira li diminzioni cunzintiti dâ cunfigurazzioni dû server.', 'emptyfile' => "Lu file appena carricatu pari èssiri vacanti. Chistu putissi èssiri duvutu a n'erruri ntô nomu dû file. Virificari ca si ntenni riarmenti carricari stu file.", @@ -1404,7 +1390,6 @@ Siddu si disponi dâ mmàggini ntâ risuluzzioni urigginali, si prega di carric 'fileexists-shared-forbidden' => "Nu file cu stu nomu asisti già nta l'archiviu dî risursi multimidiali cundivisi. Siddu voi ancora carricari lu file, pi favuri torna n'arreri e cancia lu nomu ca voi dari a lu file. [[File:$1|thumb|center|$1]]", 'file-exists-duplicate' => 'Stu file è na copia duppiuni {{PLURAL:$1|dû|dî}} file ccà di sècutu:', 'file-deleted-duplicate' => "Nu file lu stissu comu a chistu file ([[:$1]]) vinni scanciallatu prima di ora. S'aviss'a cuntrullari la stòria e lu picchì dâ scancillazzioni dû file prima di ri-caricàrilu.", -'successfulupload' => 'Carricamentu cumplitatu', 'uploadwarning' => 'Avvisu di Upload', 'uploadwarning-text' => 'Cancia cà sutta la discrizzioni di lu file e prova arré', 'savefile' => 'Sarva file', @@ -1439,6 +1424,7 @@ JD # Jenoptik MGP # Pentax PICT # arcuni # ', +'upload-success-subj' => 'Carricamentu cumplitatu', 'upload-proto-error' => 'Protucollu erratu', 'upload-proto-error-text' => "Pi l'upload rimotu è nicissariu spicificari URL ca nìzzianu cu http:// oppuru ftp://.", @@ -1584,7 +1570,6 @@ Appressu veni ammustrata la discrizioni prisenti nâ [$2 paggina di discrizzioni 'statistics-edits-average' => 'Media dî canci pi pàggina', 'statistics-views-total' => 'Visualizzazioni totali', 'statistics-views-peredit' => 'Visualizzazioni pî canci', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Cuda dî prucessi] a esiquiri n background', 'statistics-users' => '[[Special:ListUsers|Utilizzatura]] riggistrati', 'statistics-users-active' => 'Utilizzatura attivi', 'statistics-users-active-desc' => "Utilizzatura chi fìciru n'azzioni {{PLURAL:$1|ni l'ultimu ionnu|nî l'ultimi $1 ionna}}", @@ -1596,9 +1581,9 @@ Appressu veni ammustrata la discrizioni prisenti nâ [$2 paggina di discrizzioni Vèninu cunzidirati pàggini di disambiguazzioni tutti chiddi ca cuntèninu li template alincati 'n [[MediaWiki:Disambiguationspage]]", 'doubleredirects' => 'Rinnirizzamenti duppi', -'doubleredirectstext' => 'Chista pàggina alenca li pàggini chi rinnirìzzanu a àutri pàggini di rinnirizzamentu. +'doubleredirectstext' => 'Chista pàggina alenca li pàggini chi rinnirìzzanu a àutri pàggini di rinnirizzamentu. Ognuna riga cunteni li culligamenti a lu primu e a lu secunnu redirect, oltri â prima riga di testu dû secunnu redirect ca di sòlitu cunteni la pàggina di distinazzioni "curretta" â quali avissi a puntari macari lu primu redirect. -Li redirect cancillati furunu curretti.', +Li redirect cancillati furunu curretti.', 'double-redirect-fixed-move' => "[[$1]] fu spustata 'n modu automàticu, ora è nu redirect a [[$2]]", 'double-redirect-fixer' => 'Curritturi di redirect', @@ -1801,7 +1786,6 @@ Protucolli suppurtati: $1', # Watchlist 'watchlist' => 'Lista taliata mia', 'mywatchlist' => 'Lista taliata mia', -'watchlistfor' => "(di l'utenti '''$1''')", 'nowatchlist' => "Nun hai innicatu pàggini a tèniri d'occhiu.", 'watchlistanontext' => "Pi visualizzari e canciari l'alencu di l'ossirvati spiciali è nicissariu $1.", 'watchnologin' => 'Nun hai effittuatu lu login', @@ -1909,7 +1893,9 @@ Lu canciamentu cchiù ricenti â pàggina fu appurtata di [[User:$3|$3]] ([[User 'editcomment' => "Â discrizzioni â mudìfica era: \"''\$1''\".", 'revertpage' => "Canciu narrè di [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussioni]]) cu l'ùrtima virsioni di [[User:$1|$1]]", 'rollback-success' => 'Annullati li canciamenti di $1; ritornata â virsioni pricidenti di $2.', -'sessionfailure' => 'S\'hà virificatu un prubbrema cu la tò sissioni di login; + +# Edit tokens +'sessionfailure' => 'S\'hà virificatu un prubbrema cu la tò sissioni di login; lu sistema nun hà esiquitu lu cumannu mpartitu pi pricauzzioni. Pi favuri utilizza lu tastu "\'n arreri" dû tò browser, ricàrrica la pàggina e riprova di novu.', @@ -2098,7 +2084,6 @@ Pi maggiuri nfurmazzioni, talìa la [[Special:IPBlockList|lista di l'IP bluccati 'ipb-edit-dropdown' => 'Mutivi pô bloccu', 'ipb-unblock-addr' => 'Sblocca $1', 'ipb-unblock' => "Sblocca n'utenti o nu ndirizzu IP", -'ipb-blocklist-addr' => 'Alenca li blocchi attivi pi $1', 'ipb-blocklist' => 'Alenca li blocchi attivi', 'ipb-blocklist-contribs' => 'Cuntribbuti di $1', 'unblockip' => 'Sblocca ndirizzu IP', @@ -2402,6 +2387,7 @@ Visita [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [ht 'tooltip-upload' => 'Ncigna carricamentu', 'tooltip-rollback' => '"Rollback" annulla li canci di l\'ùrtinu cuntribbuturi â sta pâggina cu nu sulu clic.', 'tooltip-undo' => '"Annulla" pirmetti di annullari sta mudìfica e grapi lu mòdulu di mudifica ntâ mudalità di antiprima. Pirmetti di nsiriri na mutivazziopni nti l\'uggettu dâ mudifica.', +'tooltip-preferences-save' => 'Sarva prifirenzi', # Stylesheets 'common.css' => "/* Li stili CSS nziriti ccà s'àpplicanu a tutti li skin */", @@ -2510,10 +2496,10 @@ $1', 'imagemaxsize' => "Diminzioni màssima dî mmàggini:
    ''(pi li pàggini di discrizzioni dô file)''", 'thumbsize' => 'Grannizza dî miniaturi:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|pàggina|pàggini}}', -'file-info' => '(Diminzioni: $1, tipu MIME: $2)', -'file-info-size' => '($1 × $2 pixel, diminzioni: $3, tipu MIME: $4)', +'file-info' => 'Diminzioni: $1, tipu MIME: $2', +'file-info-size' => '$1 × $2 pixel, diminzioni: $3, tipu MIME: $4', 'file-nohires' => 'Nun sunnu dispunìbbili virsioni a risuluzzioni cchiù elivata.', -'svg-long-desc' => '(file SVG, dimensioni nominali $1 × $2 pixel, dimensioni dô file: $3)', +'svg-long-desc' => 'file SVG, dimensioni nominali $1 × $2 pixel, dimensioni dô file: $3', 'show-big-image' => 'Virsioni a àuta risuluzzioni', 'show-big-image-thumb' => "Diminzioni di st'antiprima: $1 × $2 pixel", 'file-info-gif-looped' => 'luppatu', diff --git a/languages/messages/MessagesSco.php b/languages/messages/MessagesSco.php index e9a89e92..1a5f1ba6 100644 --- a/languages/messages/MessagesSco.php +++ b/languages/messages/MessagesSco.php @@ -37,8 +37,7 @@ $messages = array( 'tog-editsection' => 'Enable section editin via [edit] airtins', 'tog-editsectiononrightclick' => 'Enable section editin bi richt-dabbin on section teitles (JavaScript)', 'tog-showtoc' => 'Shaw table o contents (for pages wi mair nor 3 heidins)', -'tog-rememberpassword' => 'Mynd password ower sessions', -'tog-editwidth' => 'Edit box haes fou weenth', +'tog-rememberpassword' => 'Mynd password ower sessions (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Add pages ye mak tar yer watchleet', 'tog-watchdefault' => 'Add pages ye edit tae yer watchleet', 'tog-watchmoves' => 'Eik pages A move tae ma watchleet', @@ -176,21 +175,15 @@ $messages = array( 'faqpage' => 'Project:ASQ', # Vector skin -'vector-action-delete' => 'Delete', -'vector-action-move' => 'Flit', -'vector-action-protect' => 'Fend', -'vector-namespace-category' => 'Category', -'vector-namespace-image' => 'File', -'vector-namespace-main' => 'Page', -'vector-namespace-mediawiki' => 'Message', -'vector-namespace-template' => 'Template', -'vector-namespace-user' => 'Uiser page', -'vector-view-create' => 'Mak', -'vector-view-edit' => 'Edit', -'vector-view-history' => 'See history', -'vector-view-viewsource' => 'View soorce', -'actions' => 'Actions', -'namespaces' => 'Namespaces', +'vector-action-delete' => 'Delete', +'vector-action-move' => 'Flit', +'vector-action-protect' => 'Fend', +'vector-view-create' => 'Mak', +'vector-view-edit' => 'Edit', +'vector-view-history' => 'See history', +'vector-view-viewsource' => 'View soorce', +'actions' => 'Actions', +'namespaces' => 'Namespaces', 'errorpagetitle' => 'Error', 'returnto' => 'Return tae $1.', @@ -393,7 +386,7 @@ Mynd an chynge yer [[Special:Preferences|{{SITENAME}} preferences]].', 'yourname' => 'Yer uiser name', 'yourpassword' => 'Passwaird:', 'yourpasswordagain' => 'Retype passwaird:', -'remembermypassword' => 'Mynd ma password across sessions.', +'remembermypassword' => 'Mynd ma password across sessions (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Yer domain:', 'externaldberror' => "Aither the wis an external authenteication database mishanter, or ye'r no alloued tae update yer external accoont.", 'login' => 'Log in', @@ -565,7 +558,7 @@ Yer block ID is $5. Please include this ID in ony argies ye mak.', 'userjsyoucanpreview' => "'''Tip:''' Uise the 'Show preview' button tae proof yer new JS afore savin.", 'usercsspreview' => "'''Mynd that ye'r juist previewin yer uiser CSS, it haesna yet been hained!'''", 'userjspreview' => "'''Mynd that ye're juist testin/previewing yer uiser JavaScript; it haesna been hained yet!'''", -'userinvalidcssjstitle' => "'''Warnin:''' There isnae a skin \"\$1\". Mynd that yer ain .css an .js pages uise a lowercase teetle, e.g. {{ns:user}}:Foo/monobook.css instead o {{ns:user}}:Foo/Monobook.css.", +'userinvalidcssjstitle' => "'''Warnin:''' There isnae a skin \"\$1\". Mynd that yer ain .css an .js pages uise a lowercase teetle, e.g. {{ns:user}}:Foo/vector.css instead o {{ns:user}}:Foo/Vector.css.", 'updated' => '(Updatit)', 'note' => "'''Mynd:'''", 'previewnote' => "'''Mynd that this is juist a scance-ower, an haesna been hained yet!'''", @@ -600,7 +593,6 @@ Gin ye dinna want yer writin tae be editit athoot mercy and redistribute at will YYe'r promisin us forbye that ye wrat this yersel, or copied it frae a public domain or siclike free resoorce (see $1 for details). '''DINNA SUBMIT COPYRICHTIT WARK ATHOOT PERMEISSION!'''", -'longpagewarning' => "WARNIN: This page is $1 kilobytes lang; some brousers micht hae trouble editin pages approachin or langer nor 32 kb. Please conseider brakkin the page intae smaa'er sections.", 'longpageerror' => "'''ERROR: The text ye hae submitted is $1 kilobytes lang, an that's langer than the maximum of $2 kilobytes. It canna be hained.'''", 'readonlywarning' => "WARNIN: The database haes been lockit for maintenance, sae ye'll no can hain yer edits richt nou. Ye micht wish tae cut-n-paste the text intil a text file an hain it for later.", @@ -751,6 +743,7 @@ there micht be parteeculars in the [{{fullurl:{{#Special:Log}}/suppress|page={{F 'resultsperpage' => 'Hits tae shaw per page', 'contextlines' => 'Lines tae shaw per hit', 'contextchars' => 'Characters o context per line', +'stub-threshold-disabled' => 'Tuckie', 'recentchangescount' => 'Nummer o teitles in recent chynges', 'savedprefs' => 'Yer preferences haes been hained.', 'timezoneoffset' => 'Affset', @@ -1347,7 +1340,7 @@ In the saicont case ye can uise an airtin forbye, for exemplar [[{{#Special:Expo # Media information 'mediawarning' => "'''Warnin''': This file micht haud mislushious code; bi executin it yer seestem micht be compromised.", 'imagemaxsize' => 'Limit eimages on eimage description pages tae:', -'file-info-size' => '($1 × $2 pixels, file size: $3, MIME type: $4)', +'file-info-size' => '$1 × $2 pixels, file size: $3, MIME type: $4', # Special:NewFiles 'newimages' => 'Gallery o new files', diff --git a/languages/messages/MessagesSd.php b/languages/messages/MessagesSd.php index 74a0cfcf..2a4ec705 100644 --- a/languages/messages/MessagesSd.php +++ b/languages/messages/MessagesSd.php @@ -253,24 +253,13 @@ $messages = array( 'faqpage' => 'Project:ڪپوس', # Vector skin -'vector-action-delete' => 'ڊاھيو', -'vector-action-move' => 'چوريو', -'vector-action-protect' => 'تحفظيو', -'vector-action-unprotect' => 'اڻتحفظيو', -'vector-namespace-category' => 'زمرو', -'vector-namespace-help' => 'امدادي صفحو', -'vector-namespace-image' => 'فائيل', -'vector-namespace-main' => 'صفحو', -'vector-namespace-media' => 'ذريعاتي صفحو', -'vector-namespace-mediawiki' => 'نياپو', -'vector-namespace-project' => 'رٿائي صفحو', -'vector-namespace-special' => 'خاص صفحو', -'vector-namespace-talk' => 'بحث', -'vector-namespace-template' => 'سانچو', -'vector-namespace-user' => 'تعارفي صفحو', -'vector-view-create' => 'سرجيو', -'vector-view-edit' => 'سنواريو', -'vector-view-viewsource' => 'ڪوڊ ڏسو', +'vector-action-delete' => 'ڊاھيو', +'vector-action-move' => 'چوريو', +'vector-action-protect' => 'تحفظيو', +'vector-action-unprotect' => 'اڻتحفظيو', +'vector-view-create' => 'سرجيو', +'vector-view-edit' => 'سنواريو', +'vector-view-viewsource' => 'ڪوڊ ڏسو', 'errorpagetitle' => 'چُڪَ', 'returnto' => '$1 ڏانهن وَرو.', @@ -402,7 +391,7 @@ $messages = array( # Login and logout pages 'yourname' => 'يُوزرنانءُ:', 'yourpassword' => 'ڳجھو لفظ:', -'remembermypassword' => 'هن ڳڻپيوڪر تي مون کي ياد رکو', +'remembermypassword' => 'هن ڳڻپيوڪر تي مون کي ياد رکو (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'لاگ اِن', 'nav-login-createaccount' => 'لاگ اِن ٿيو / کاتو کوليو', 'loginprompt' => '{{SITENAME}} ۾ لاگ اِن ٿيڻ لاءِ ڪوڪيز جي قبوليت لازمي آهي.', @@ -493,7 +482,6 @@ $messages = array( 'copyrightwarning' => "ياد رکندا ته {{SITENAME}} لاءِ سموريون ڀاڱيداريون $2 تحت پڌريون ڪجن ٿيون (تفصيلن لاءِ $1 ڏسندا). اوهان جي تحرير کي {{SITENAME}} جي قائدن تحت ترميمي سگهجي ٿو. جيڪڏهن اوهان نه ٿا چاهيو ته اوهان جي لکڻين کي بي رحميءَ سان ترميميو وڃي يا ورهائي عام ڪيو وڃي ته پوءِ پنهنجي لکڻي هتي جمع نه ڪرايو. پنهنجو مواد هتي جمع ڪرڻ جو مطلب هوندو ته توهان کي جمع ڪرايل مواد جي مفت فراهمي ۽ کُليل تبديليءَ تي ڪو به اعتراز ناهي.
    توهان اهڙي پڪ ڏيڻ جا پابند پڻ آهيو ته توهان جو جمع ڪرايل مواد توهان جو پنهنجو لکيل آهي يا وري توهان ڪنهن مفت وسيلي تان ڪاپي ڪيو آهي. '''تحفظيل حق ۽ واسطا رکندڙ مواد واسطيدار مالڪ کان اڳواٽ اجازت وٺڻ کان سواءِ هتي جمع نه ڪريو.'''", -'longpagewarning' => "'''خبردار: هيءُ صفحو $1 ڪلوٻاٽڻيون وڏو آهي؛ 32 ڪلوٻاٽڻين کان وڏا صفحا سنواريندي ڪن جھانگوئن سان مسئلا ٿين ٿا. مهرباني ڪري هن صفحي کي ننڍن سيڪشنز ۾ ٽوڙڻ تي ويچاريندا.'''", 'templatesused' => 'هن صفحي تي استعمال ٿيندڙ سانچا:', 'templatesusedpreview' => 'هن پيش نگاهه ۾ استعمال ٿيل سانچا:', 'template-protected' => '(تحفظيل)', @@ -715,7 +703,6 @@ $1 {{PLURAL:$1|اکر|اکرن}} کان ننڍي هوڻ گھرجي.', # Watchlist 'watchlist' => 'منهنجي ٽيٽ فهرست', 'mywatchlist' => 'منهنجي ٽيٽ فهرست', -'watchlistfor' => "(براءِ '''$1''')", 'addedwatch' => 'ٽيٽ فھرست ۾ شامل ڪيو ويو.', 'addedwatchtext' => "صفحو بعنوان \"[[:\$1]]\" اوهان جي [[Special:Watchlist|ٽيٽ فهرست]] ۾ شامل ٿي ويو. استقبالي تبديليون هتي درج ٿينديون وينديون. اهو صفحو [[Special:RecentChanges|تازين تبديلين]] واري صفحي تي '''گهرن''' اکرن ۾ نمايان ڪري ڏيکاريو ويندو. جيڪڏهن اوهان اهو سڀ نه ٿا چاهيو ته '''اڻ ٽيٽيو''' تي ڪلڪ ڪريو.", 'removedwatch' => 'ٽيٽ فهرست مان هٽايو ويو', @@ -918,9 +905,9 @@ $1 {{PLURAL:$1|اکر|اکرن}} کان ننڍي هوڻ گھرجي.', 'nextdiff' => 'نئون تفاوت -->', # Media information -'file-info-size' => '($1 × $2 عڪسلون، فائيل سائيز: $3، MIME ٽائيپ: $4)', +'file-info-size' => '$1 × $2 عڪسلون، فائيل سائيز: $3، MIME ٽائيپ: $4', 'file-nohires' => 'اڃا سنهو تحلل ميسر ناهي.', -'svg-long-desc' => '(ايس وي جي فائيل، اٽڪل $1 × $2 عڪسلون، فائيل سائيز: $3)', +'svg-long-desc' => 'ايس وي جي فائيل، اٽڪل $1 × $2 عڪسلون، فائيل سائيز: $3', 'show-big-image' => 'سنهو ترين تحلل', 'show-big-image-thumb' => 'هن پيش نگاهه جي ماپ: $1 × $2 عڪسلون', diff --git a/languages/messages/MessagesSdc.php b/languages/messages/MessagesSdc.php index 466f33ff..991b312a 100644 --- a/languages/messages/MessagesSdc.php +++ b/languages/messages/MessagesSdc.php @@ -118,8 +118,7 @@ $messages = array( 'tog-editsection' => 'Mudìfigga di li sezzioni attrabessu lu cullegamentu [mudifigga]', 'tog-editsectiononrightclick' => "Mudìfigga di li sezzioni attrabessu lu clic dresthu i' lu tìturu (nezzessàriu JavaScript)", 'tog-showtoc' => "Musthra l'indizi pa li pàgini cun più di 3 sezzioni", -'tog-rememberpassword' => "Ammenta la paràura d'órdhini (nezzessàriu azzittà li cookie)", -'tog-editwidth' => 'Aumenta a la massima larghèzia la casella di mudìfigga', +'tog-rememberpassword' => "Ammenta la paràura d'órdhini (nezzessàriu azzittà li cookie) (for a maximum of $1 {{PLURAL:$1|day|days}})", 'tog-watchcreations' => "Aggiungi li pàgini criaddi a l'abbaidaddi ippiziari", 'tog-watchdefault' => "Aggiungi li pàgini mudìfiggaddi a l'abbaidaddi ippiziari", 'tog-watchmoves' => "Aggiungi li pàgini ippusthaddi a l'abbaidaddi ippiziari", @@ -249,15 +248,11 @@ Li sighenti cullegamenti so in linga ingrese: 'faqpage' => 'Project:FAQ (infuimmazioni e aggiuddu)', # Vector skin -'vector-action-delete' => 'Canzella', -'vector-action-move' => 'Ippustha', -'vector-namespace-category' => 'Categuria', -'vector-namespace-image' => 'File', -'vector-namespace-main' => 'Pàgina', -'vector-namespace-talk' => 'Dischussioni', -'vector-view-create' => 'Cria', -'vector-view-edit' => 'Mudifigga', -'vector-view-view' => 'Leggi', +'vector-action-delete' => 'Canzella', +'vector-action-move' => 'Ippustha', +'vector-view-create' => 'Cria', +'vector-view-edit' => 'Mudifigga', +'vector-view-view' => 'Leggi', 'errorpagetitle' => 'Errori', 'returnto' => 'Turra a $1.', @@ -462,7 +457,7 @@ La registhrazioni è isthadda criadda currettamenti. No dimintiggà di passunari 'yourname' => 'Innòmu utenti', 'yourpassword' => "Paràura d'órdhini", 'yourpasswordagain' => "Ripeti la paràura d'órdhini", -'remembermypassword' => "Ammenta la paràura d'órdhini", +'remembermypassword' => "Ammenta la paràura d'órdhini (for a maximum of $1 {{PLURAL:$1|day|days}})", 'yourdomainname' => 'Ippizzificà lu dumìniu', 'externaldberror' => "S'è verifiggaddu un errori cu lu server di autentificazioni esthernu, oppuru nò si diponi di l'autorizazioni nezzessàri pa aggiornà la propria registhrazioni estherna.", 'login' => 'Intra', @@ -633,7 +628,7 @@ S'ài sighiddu lu cullegamentu pa un'errori, è suffizenti incalchà lu buttoni 'userjsyoucanpreview' => "'''Suggerimentu:''' Usa lu buttoni '''Visuarizza antiprimma''' pa prubà li nobi JS primma di sàivvaddi.", 'usercsspreview' => "'''Ammitanti ch'è soru un'antiprimma di lu propriu CSS passunari; li mudìfigghi nò so ancora isthaddi sàivvaddi!'''", 'userjspreview' => "'''Ammitanti ch'è soru un'antiprimma pa prubà lu propriu JavaScript passunari; li mudìfigghi nò so ancora isthaddi sàivvaddi!'''", -'userinvalidcssjstitle' => "'''Attinzioni:''' Nò isisthi nisciun aipettu gràficu \"\$1\". Amminta chi li pàgini pa li .css e .js passunari àni lu primu caràtteri di lu tìturu minori, cumenti {{ns:user}}:Foo/monobook.css e nò {{ns:user}}:Foo/Monobook.css.", +'userinvalidcssjstitle' => "'''Attinzioni:''' Nò isisthi nisciun aipettu gràficu \"\$1\". Amminta chi li pàgini pa li .css e .js passunari àni lu primu caràtteri di lu tìturu minori, cumenti {{ns:user}}:Foo/vector.css e nò {{ns:user}}:Foo/Vector.css.", 'updated' => '(Aggiornaddu)', 'note' => "'''NOTA:'''", 'previewnote' => "'''Attinzioni: chistha è soru un'antiprimma. Li mudifigghi a la pagina NÒ so ancora isthaddi saivvaddi!'''", @@ -667,7 +662,6 @@ Inviendi lu testhu ài la ripunsabiriddai chi lu testhu sia toiu oppuru sia i lu Inviendi lu testhu ài la ripunsabiriddai chi lu testhu sia toiu oppuru sia i lu pùbbriggu dumìniu (vedi $1 pa maggiori dettàgli). '''NÒ INVIÀ MATERIARI CUBERTHU DA DIRITTU D'AUTORI CHENA AUTORIZZAZIONI!'''", -'longpagewarning' => "'''ATTINZIONI: Chistha pàgina è longa $1 kilobyte; zerthuni nabiggadori pudiani abé dei prubremi. Si pussìbiri suddibidì la pàgina in sezzioni o sottupàgini minori.'''", 'longpageerror' => "'''ERRORI: Lu testhu ch'ài inviaddu è longu $1 kB (kilobytes), più di la misura massima cunsintidda di $2 kB. Lu testhu nò pò assé sàivvaddu.'''", 'readonlywarning' => "'''ATTINZIONI: La bancadati è isthadda broccadda pa manutinzioni, dunca abà è impussìbiri saivvà li mudìfigghi. Pa no pirdhilli, copia lu testhu mudifiggaddu in un file i' lu to' elaburaddori e torra a saivvallu candu la bancadati sarà ibbruccadda.'''", 'protectedpagewarning' => "'''ATTINZIONI: Chista pàgina è isthadda broccadda parchì soru l'utenti cun pribiréggi di amministhradori possiano mudìfiggarla.'''", @@ -1052,7 +1046,6 @@ S'è la matessi immàgina, i' li misuri originari, nò è nezzessàriu carriggà Si si diponi di l'immàgina i' la risoruzioni originari, pa piazeri carriggalla. A l'invessu, pa piazeri ciambà l'innòmmu di lu file.", 'fileexists-forbidden' => "Un file cun chisthu innòmmu isisthi già. Turrà indareddu e mudìfiggà l'innòmmu cu' lu quari carriggà lu file. [[File:$1|thumb|center|$1]]", 'fileexists-shared-forbidden' => "Un file cun chisthu innòmmu isisthi già i l'archìbiu di li risuzzi mùrthimediari cundibisi. Turrà indareddu e mudìfiggà l'innòmmu cu' lu quari carriggà lu file. [[File:$1|thumb|center|$1]]", -'successfulupload' => 'Carriggamentu cumpritaddu', 'uploadwarning' => 'Avvisu di carriggamentu', 'savefile' => 'Saivva file', 'uploadedimage' => 'ha carriggaddu "[[$1]]"', @@ -1069,6 +1062,7 @@ Si si diponi di l'immàgina i' la risoruzioni originari, pa piazeri carriggalla. Pa piazeri verifigga si vói carriggà avveru chisthu file; inogghi v'è lu rigisthru cu' la mutibazioni di la canzilladdura:", 'filename-bad-prefix' => "L'innòmmu di lu file chi sei carrigghendi ischumenza cun '''\"\$1\"''', ch'è un'innòmmu nò dischrittibu assignaddu automatiggamenti da li fotocameri. Pa piazieri sciubarà un'innòmmu più dischrittibu pa lu file tóiu.", +'upload-success-subj' => 'Carriggamentu cumpritaddu', 'upload-proto-error' => 'Protocollu ibbagliaddu', 'upload-proto-error-text' => 'Pa lu cariggamentu "luntanu" è nezzessàriu ippizzificà indirizzi ch\'ischumenzani cun http:// oppuru ftp://.', @@ -1317,7 +1311,6 @@ Also see [[Special:WantedCategories|wanted categories]].", # Watchlist 'watchlist' => 'Abbaidaddi ippiziari', 'mywatchlist' => 'Abbaidaddi ippiziari', -'watchlistfor' => "(pa '''$1''')", 'nowatchlist' => "La listha di l'abbaidaddi ippiziari è biodda.", 'watchlistanontext' => "Pa visuarizzà e mudìfiggà l'erencu di l'abbaidaddi ippiziari è nezzessàriu $1.", 'watchnologin' => 'Intradda nò effettuadda', @@ -1422,7 +1415,9 @@ Pa piazzeri, cunfèimma chi vói canzillà avveru, ch'ài cumpresu li cunsiguèn 'cantrollback' => "Impussìbiri annullà li mudìfigghi; l'utenti chi n'è l'autori è l'unicu cuntribudori di la pàgina.", 'editcomment' => "L'oggettu di la mudìfigga era: \"''\$1''\".", 'rollback-success' => 'Annulladdi li mudìfigghi di $1; turradda a la versioni prizzidenti di $2.', -'sessionfailure' => "S'è verifigaddu un probrema i' la sissioni ch'identifigga l'intradda; lu sistham nò à eseguiddu lu cumandu imparthiddu pa precauzioni. Turrà a la pàgina prizzidenti cu' lu buttoni \"Indareddu\" di lu proprio nabigaddori, turrà a carriggà la pàgina e riprubà.", + +# Edit tokens +'sessionfailure' => "S'è verifigaddu un probrema i' la sissioni ch'identifigga l'intradda; lu sistham nò à eseguiddu lu cumandu imparthiddu pa precauzioni. Turrà a la pàgina prizzidenti cu' lu buttoni \"Indareddu\" di lu proprio nabigaddori, turrà a carriggà la pàgina e riprubà.", # Protect 'protectlogpage' => 'Prutizioni', @@ -1565,7 +1560,6 @@ $1", 'ipb-edit-dropdown' => 'Mutibi pa lu broccu', 'ipb-unblock-addr' => 'Ibbrucca $1', 'ipb-unblock' => "Ibbrucca un'utenti o un'indirizzu IP", -'ipb-blocklist-addr' => 'Erenca i brocchi attibi pa $1', 'ipb-blocklist' => 'Erenca i brocchi attibi', 'unblockip' => "Ibbrucca l'utenti", 'unblockiptext' => "Usà lu mòdulu in giossu pa turrà l'intradda i'ischrittura a un'utenti o indirizzu IP broccaddu.", @@ -1895,9 +1889,9 @@ $1", 'thumbsize' => 'Mannària di li miniadduri:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|pàgina|pàgini}}', 'file-info' => 'Misuri: $1, tipu MIME: $2', -'file-info-size' => '($1 × $2 punti, misuri: $3, tipu MIME: $4)', +'file-info-size' => '$1 × $2 punti, misuri: $3, tipu MIME: $4', 'file-nohires' => 'Nò so dipunìbiri versioni a risoruzioni maggiori.', -'svg-long-desc' => '(file in fuimmaddu SVG, misuri nominari $1 × $2 punti, misuri di lu file: $3)', +'svg-long-desc' => 'file in fuimmaddu SVG, misuri nominari $1 × $2 punti, misuri di lu file: $3', 'show-big-image' => 'Versioni a altha risoruzioni', 'show-big-image-thumb' => "Misuri di chisth'antiprimma: $1 × $2 punti", diff --git a/languages/messages/MessagesSe.php b/languages/messages/MessagesSe.php index 8c6e7502..73a9cb4f 100644 --- a/languages/messages/MessagesSe.php +++ b/languages/messages/MessagesSe.php @@ -27,8 +27,7 @@ $messages = array( 'tog-editsection' => 'Čájet rievdadanliŋkkaid juohke oasáža bájabealde', 'tog-editsectiononrightclick' => 'Rievdat osiid nu ahte deaddilat bájilčállaga sáhpána olggeš boaluin (JavaScript)', 'tog-showtoc' => 'Čájet sisdoallologahallama siidduin, main lea eanet go golbma bájilčállaga', -'tog-rememberpassword' => 'Muite mu dieđuid dán dihtoris', -'tog-editwidth' => 'Ođasmahttinlođa lea olles siiddu viidosaš', +'tog-rememberpassword' => 'Muite mu dieđuid dán dihtoris (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Lasit čuovvunlistui siidduid maid lean álggahan', 'tog-watchdefault' => 'Lasit čuovvunlistui siidduid maid lean ođasmahttán', 'tog-watchmoves' => 'Lasit čuovvunlistui siidduid maid lean sirdán', @@ -133,9 +132,6 @@ $messages = array( 'qbmyoptions' => 'Ásahusat', 'qbspecialpages' => 'Doaibmasiiddut', -# Vector skin -'vector-namespace-image' => 'Fiila', - 'errorpagetitle' => 'Feaila', 'returnto' => 'Máhcat siidui $1.', 'tagline' => '{{SITENAME}}', @@ -277,7 +273,7 @@ Du geavaheaddjidovddaldat lea dál anus. 'yourname' => 'Geavaheaddjidovddaldat', 'yourpassword' => 'Suollemassátni:', 'yourpasswordagain' => 'Čále suollemassáni ođđasit:', -'remembermypassword' => 'Muite mu', +'remembermypassword' => 'Muite mu (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Fierbmenamma', 'login' => 'Čálligoađe sisa', 'nav-login-createaccount' => 'Daga ođđa geavaheaddjidovddaldaga dahje čálligoađe sisa', @@ -608,37 +604,37 @@ $1 {{int:pipe-separator}} $2', 'recentchangeslinked-title' => '"$1" laktaseaddji rievdadusat', # Upload -'upload' => 'Lasit fiilla', -'uploadbtn' => 'Lasit fiilla', -'reuploaddesc' => 'Máhca sáddenskovvái.', -'uploadnologin' => 'It leat čálligoahtán sisa', -'uploadnologintext' => 'Don fertet leat [[Special:UserLogin|čálligoahtán sisa]], ovdalgo sáhtát vurket fiillaid.', -'uploaderror' => 'Vurkenfeaila', -'uploadlog' => 'Fiilalogga', -'uploadlogpage' => 'Fiilalogga', -'filename' => 'Fiilla namma:', -'filedesc' => 'Čoahkkáigeassu', -'fileuploadsummary' => 'Čoahkkáigeassu', -'filesource' => 'Gáldu:', -'uploadedfiles' => 'Lasihuvvon fiillat', -'ignorewarning' => 'Vurke fuolatkeahttá varuhusas', -'minlength1' => 'Fiilla namas ferte leat unnimustá okta mearka.', -'badfilename' => 'Fiilla nama rievdaduvvui: $1.', -'filetype-missing' => 'Fiillas vailui fiilageažus – ovdamearkkan .jpg.', -'large-file' => 'Fiilla max. sturrodat lea $1. Fiila man lasihit lea $2.', -'largefileserver' => 'Dát fiila lea menddo stuoris.', -'successfulupload' => 'Lasiheapmi lihkosmuvai', -'uploadwarning' => 'Lasihanvaruhus', -'savefile' => 'Vurke', -'uploadedimage' => 'vurkii fiilla [[$1]]', -'uploaddisabled' => '{{GRAMMAR:genitive|{{SITENAME}}}} ii sáhte lasihit fiillaid.', -'uploaddisabledtext' => 'Fiillaid vurken lea váldojuvvon eret anus.', -'uploadscripted' => 'Dát fiila sisdisdoalla HTML-koda dahje skriptaid, maid neahttabláđejeaddji sáhttá vahagis dahkat.', -'uploadvirus' => 'Fiila sisdoalla virusa. Dárkilut dieđut: $1', -'sourcefilename' => 'Gáldonamma', -'destfilename' => 'Mearrenamma', -'watchthisupload' => 'Čuovo dán siiddu', -'filewasdeleted' => 'Dán nammasaš fiila lea lasihuvvon ja sihkojuvvon jo ovda. Dárkis $1 ovdalgo joatkat.', +'upload' => 'Lasit fiilla', +'uploadbtn' => 'Lasit fiilla', +'reuploaddesc' => 'Máhca sáddenskovvái.', +'uploadnologin' => 'It leat čálligoahtán sisa', +'uploadnologintext' => 'Don fertet leat [[Special:UserLogin|čálligoahtán sisa]], ovdalgo sáhtát vurket fiillaid.', +'uploaderror' => 'Vurkenfeaila', +'uploadlog' => 'Fiilalogga', +'uploadlogpage' => 'Fiilalogga', +'filename' => 'Fiilla namma:', +'filedesc' => 'Čoahkkáigeassu', +'fileuploadsummary' => 'Čoahkkáigeassu', +'filesource' => 'Gáldu:', +'uploadedfiles' => 'Lasihuvvon fiillat', +'ignorewarning' => 'Vurke fuolatkeahttá varuhusas', +'minlength1' => 'Fiilla namas ferte leat unnimustá okta mearka.', +'badfilename' => 'Fiilla nama rievdaduvvui: $1.', +'filetype-missing' => 'Fiillas vailui fiilageažus – ovdamearkkan .jpg.', +'large-file' => 'Fiilla max. sturrodat lea $1. Fiila man lasihit lea $2.', +'largefileserver' => 'Dát fiila lea menddo stuoris.', +'uploadwarning' => 'Lasihanvaruhus', +'savefile' => 'Vurke', +'uploadedimage' => 'vurkii fiilla [[$1]]', +'uploaddisabled' => '{{GRAMMAR:genitive|{{SITENAME}}}} ii sáhte lasihit fiillaid.', +'uploaddisabledtext' => 'Fiillaid vurken lea váldojuvvon eret anus.', +'uploadscripted' => 'Dát fiila sisdisdoalla HTML-koda dahje skriptaid, maid neahttabláđejeaddji sáhttá vahagis dahkat.', +'uploadvirus' => 'Fiila sisdoalla virusa. Dárkilut dieđut: $1', +'sourcefilename' => 'Gáldonamma', +'destfilename' => 'Mearrenamma', +'watchthisupload' => 'Čuovo dán siiddu', +'filewasdeleted' => 'Dán nammasaš fiila lea lasihuvvon ja sihkojuvvon jo ovda. Dárkis $1 ovdalgo joatkat.', +'upload-success-subj' => 'Lasiheapmi lihkosmuvai', 'upload-proto-error' => 'Feaila protokollas', 'upload-file-error' => 'Stuorra feaila', @@ -849,7 +845,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'Čuovvunlistu', 'mywatchlist' => 'Čuovvunlistu', -'watchlistfor' => '$1', 'nowatchlist' => 'Du čuovvunlisttus eai leat siiddut.', 'watchlistanontext' => 'Don fertet $1, jus hálidat geavahit čuovvunlisttu.', 'watchnologin' => 'It leat čálligoahtán sisa', diff --git a/languages/messages/MessagesSei.php b/languages/messages/MessagesSei.php index b856a7f8..c716fb09 100644 --- a/languages/messages/MessagesSei.php +++ b/languages/messages/MessagesSei.php @@ -27,8 +27,7 @@ $messages = array( 'tog-editsection' => 'Ton ticpatlöx seccion [edit] linkám via', 'tog-editsectiononrightclick' => 'Ton ticpatlöx seccion pok clickám mii
    seccion titelám iti (JavaScript)', 'tog-showtoc' => 'Cohuatlöx insacualte (páhinám bajlip 3 text corridór mii)', -'tog-rememberpassword' => 'Qualtiinii he quimx canj jan ordinator iti', -'tog-editwidth' => 'Cui ticpatlöx janvam', +'tog-rememberpassword' => 'Qualtiinii he quimx canj jan ordinator iti (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Plusöx páhinám he hun he listade cáminot', 'tog-watchdefault' => 'Plusöx páhinám he ticpatlöx he listade cáminot', 'tog-watchmoves' => 'Plusöx páhinám he yacom he listade cáminot', @@ -331,7 +330,7 @@ Mecaitom coccebj creatöx. Quiix hequáatlaácde {{SITENAME}} pos-poop.", 'yourname' => 'Caitom ID:', 'yourpassword' => 'Quimx canj:', 'yourpasswordagain' => 'Vanquimx canj:', -'remembermypassword' => 'Qualtiinii he quimx canj jan ordinator iti', +'remembermypassword' => 'Qualtiinii he quimx canj jan ordinator iti (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Hedomino:', 'externaldberror' => 'Pos-römjde authenticacionde database extername jöx me necoccebj permiccionde updatan mecaitom externom.', 'login' => 'Caápo', @@ -485,7 +484,7 @@ Me coccebj römjasi poop, clickom meback-buttonde browser coccebj perfectua.', 'userjsyoucanpreview' => "'''Tip:''' Usadad 'Cohuatlöx cuáxiit' testom me hun JS xuniim 'depre.", 'usercsspreview' => "'''He cuáxiit he CSSde caitom, zo necoccebj xuniim!'''", 'userjspreview' => "'''He cuáxiit/testom he JavaScriptde caitom, zo necoccebj xuniim!'''", -'userinvalidcssjstitle' => "'''Attencion:''' Skin \"\$1\" coccebj ne'dáár. Regardom .css ö .js páhinám usadad titlenam lowercase zo, yanuiíxzo mii yahöxde ti {{ns:user}}:Foo/monobook.css opposadadde {{ns:user}}:Foo/Monobook.css.", +'userinvalidcssjstitle' => "'''Attencion:''' Skin \"\$1\" coccebj ne'dáár. Regardom .css ö .js páhinám usadad titlenam lowercase zo, yanuiíxzo mii yahöxde ti {{ns:user}}:Foo/vector.css opposadadde {{ns:user}}:Foo/Vector.css.", 'updated' => '(varupdatenám)', 'note' => "'''Notificacion:'''", 'previewnote' => "'''Jan coccebj cuáxiit zo; quiíx necoccebj xuniim!'''", @@ -508,8 +507,6 @@ Jan lajxepe occuram me usadad proxy service anon web-based buggy.'''", 'nonunicodebrowser' => "'''ATTENCION: Mebrowser necoccebj compliantede 'unicode' (characterám sans huáp ti). Workaround coccebj hant itide me permiccion ticpatlöx páhinám: non-ASCII characterám coccebj codes hexidecimales.'''", 'editingold' => "'''ATTENCION: Me coccebj ticpatlöx revicion outdatenam zode jan páhina. Me xuniim zo, jömde quiíx hunde jan revicion coccebj delar poop.'''", 'yourdiff' => 'Quiíx', -'longpagewarning' => "'''ATTENCION: Jan páhina coccebj $1 kilobynám; browserám pac pos-coccebj problemámde ticpatlöx páhinám necade jöx plusöxde 32 kb. -Cahöx ticpatlöx jan páhina minöx seccion iti.'''", 'longpageerror' => "'''RÖMJ: Textua zo mexuniim coccebj $1 kilobytenám, jan coccebj plusöxde maxde $2 kilobytenám. Zo necoccebj xuniim.'''", 'readonlywarning' => "'''ATTENCION: Database zo coccebj lockomde kyépöx, zo necoccebj posde xuniim meticpatlöx cmaa. Me coccebj considerom ''cut-n-paste'' textua zo ciúchande textua iti ö xuniimde diijömdexepe.'''", 'protectedpagewarning' => "'''ATTENCION: Jan páhina coccebj lockomde sysopám coccebj ticpatlöx zo permiccional.'''", @@ -891,7 +888,6 @@ iitom e-iitomde diijömde caitóm.', # Watchlist 'watchlist' => 'He listade cáminot', 'mywatchlist' => 'He listade cáminot', -'watchlistfor' => "('''$1''' mii)", 'nowatchlist' => 'Hecoccebj 0 itémii helistade cáminot iti.', 'watchnologin' => 'Necaápo', 'watchnologintext' => 'Zo coccebj Neces [[Special:UserLogin|caápo]] ticpatlöx helistade cáminot.', diff --git a/languages/messages/MessagesSgs.php b/languages/messages/MessagesSgs.php new file mode 100644 index 00000000..17be53f2 --- /dev/null +++ b/languages/messages/MessagesSgs.php @@ -0,0 +1,1935 @@ + 'Medėjė', + NS_SPECIAL => 'Specēlos', + NS_TALK => 'Aptarėms', + NS_USER => 'Nauduotuos', + NS_USER_TALK => 'Nauduotuojė_aptarėms', + NS_PROJECT_TALK => '$1_aptarėms', + NS_FILE => 'Abruozdielis', + NS_FILE_TALK => 'Abruozdielė_aptarėms', + NS_MEDIAWIKI => 'MediaWiki', + NS_MEDIAWIKI_TALK => 'MediaWiki_aptarėms', + NS_TEMPLATE => 'Šabluons', + NS_TEMPLATE_TALK => 'Šabluona_aptarėms', + NS_HELP => 'Pagelba', + NS_HELP_TALK => 'Pagelbas_aptarėms', + NS_CATEGORY => 'Kateguorėjė', + NS_CATEGORY_TALK => 'Kateguorėjės_aptarėms', +); + +/** + * Aliases from the fallback language 'lt' to avoid breakage of links + */ + +$namespaceAliases = array( + 'Specialus' => NS_SPECIAL, + 'Aptarimas' => NS_TALK, + 'Naudotojas' => NS_USER, + 'Naudotojo_aptarimas' => NS_USER_TALK, + '$1_aptarimas' => NS_PROJECT_TALK, + 'Vaizdas' => NS_FILE, + 'Vaizdo_aptarimas' => NS_FILE_TALK, + 'MediaWiki_aptarimas' => NS_MEDIAWIKI_TALK, + 'Šablonas' => NS_TEMPLATE, + 'Šablono_aptarimas' => NS_TEMPLATE_TALK, + 'Pagalba' => NS_HELP, + 'Pagalbos_aptarimas' => NS_HELP_TALK, + 'Kategorija' => NS_CATEGORY, + 'Kategorijos_aptarimas' => NS_CATEGORY_TALK, +); + +$messages = array( +# User preference toggles +'tog-underline' => 'Pabrauktė nūruodas:', +'tog-highlightbroken' => 'Fuormoutė nasontiu poslapiu nūruodas šėtēp (prīšėngā - šėtēp ?).', +'tog-justify' => 'Līgintė pastraipas palē abi poses', +'tog-hideminor' => 'Pakavuotė mažus pataisėmus vielībūju taisīmu sārašė', +'tog-extendwatchlist' => 'Ėšpliestė keravuojamu sāraša, kū ruodītu vėsus tėnkamus pakeitėmus', +'tog-usenewrc' => 'Pažongē ruodomė vielibė̅jė pakeitėmā (JavaScript)', +'tog-numberheadings' => 'Autuomatėškā numeroutė skėrsnelios', +'tog-showtoolbar' => 'Ruodītė redagavėma rakondinė (JavaScript)', +'tog-editondblclick' => 'Poslapiu redagavėms dvėgobu paspaudėmu (JavaScript)', +'tog-editsection' => 'Ijongtė skėrsneliu redagavėma nauduojant nūruodas [taisītė]', +'tog-editsectiononrightclick' => 'Ijongtė skėrsneliu redagavėma paspaudos skėrsnelė pavadėnėma
    dešėniouju pelies klavėšu (JavaScript)', +'tog-showtoc' => 'Ruodītė torėni, jē poslapī daugiau kāp 3 skėrsnelē', +'tog-rememberpassword' => 'Atmintė prėsėjongėma infuormacėjė šėtom kuompioterī (for a maximum of $1 {{PLURAL:$1|day|days}})', +'tog-watchcreations' => 'Pridietė poslapius, katrūs sokorio, i keravuojamu sāraša', +'tog-watchdefault' => 'Pridietė poslapius, katrūs taisau, i keravuojamu sāraša', +'tog-watchmoves' => 'Pridietė poslapius, katrūs parkelio, i keravuojamu sāraša', +'tog-watchdeletion' => 'Pridietė poslapius, katrūs ėštrino, i keravuojamu sāraša', +'tog-minordefault' => 'Palē nutīliejėma pažīmietė redagavėmus kāp mažus', +'tog-previewontop' => 'Ruodītė parvaiza vėrš redagavėma lauka', +'tog-previewonfirst' => 'Ruodītė straipsnė parvėiza pėrmu redagavėmu', +'tog-nocache' => "Nenauduotė poslapiu kaupėma (''caching'')", +'tog-enotifwatchlistpages' => 'Siōstė mon gromata, kūmet pakeitams poslapis, katra stebiu', +'tog-enotifusertalkpages' => 'Siōstė mon gromata, kūmet pakaitams mona nauduotuojė aptarėma poslapis', +'tog-enotifminoredits' => 'Siōstė mon gromata, kūmet poslapė keitėms īr mažos', +'tog-enotifrevealaddr' => 'Ruodītė mona el. pašta adresa primėnėma gromatuos', +'tog-shownumberswatching' => 'Ruodītė keravuojantiu nauduotuoju skatliu', +'tog-fancysig' => 'Parašos ba autuomatėniu nūruodu', +'tog-externaleditor' => 'Palē nutīliejėma nauduotė ėšuorini radaktuoriu', +'tog-externaldiff' => 'Palē nutīliejėma nauduotė ėšuorinė skėrtomu ruodīma pruograma', +'tog-showjumplinks' => 'Ijongtė „paršuoktė i“ pasėikiamoma nūruodas', +'tog-uselivepreview' => 'Nauduotė tėisiogėne parvėiza (JavaScript) (Eksperimentėnis)', +'tog-forceeditsummary' => 'Klaustė, kumet palėiku toščē pakeitėma kuomentara', +'tog-watchlisthideown' => 'Kavuotė mona pakeitėmos keravuojamu sarašė', +'tog-watchlisthidebots' => 'Kavuotė robotu pakeitėmos keravuojamu sārašė', +'tog-watchlisthideminor' => 'Kavuotė mažos pakeitėmos keravuojamu sarašė', +'tog-watchlisthideliu' => 'Kavuotė prisėjongosium nauduotuojum keitėmus keravuojamu sārošė', +'tog-watchlisthideanons' => 'Kavuotė anonimėniu nauduotuoju keitėmus keravuojamu sarašė', +'tog-nolangconversion' => 'Ėšjongtė variantu keitėma', +'tog-ccmeonemails' => 'Siōstė mon gromatu kopėjės, katros siontiu kėtėims nauduotojams', +'tog-diffonly' => 'Neruodītė poslapė torėnė puo skėrtomās', +'tog-showhiddencats' => 'Ruodītė pakavuotas kateguorėjės', +'tog-norollbackdiff' => 'Nekrēptė diemesė i skėrtoma atlėkus atmetėma', + +'underline-always' => 'Visumet', +'underline-never' => 'Nikumet', +'underline-default' => 'Palē naršīklės nostatīmos', + +# Dates +'sunday' => 'sekma dėina', +'monday' => 'pėrmadėinis', +'tuesday' => 'ontradėinis', +'wednesday' => 'trečiadėinis', +'thursday' => 'ketvėrtadėinis', +'friday' => 'pėnktadėinis', +'saturday' => 'subata', +'sun' => 'Sekm', +'mon' => 'Pėrm', +'tue' => 'Ontr', +'wed' => 'Treč', +'thu' => 'Ketv', +'fri' => 'Pėnk', +'sat' => 'Sub', +'january' => 'sausė', +'february' => 'vasarė', +'march' => 'kuova', +'april' => 'balondė', +'may_long' => 'gegožės', +'june' => 'bėrželė', +'july' => 'lėipas', +'august' => 'rogpjūtė', +'september' => 'siejės', +'october' => 'spalė', +'november' => 'lapkrėstė', +'december' => 'groudė', +'january-gen' => 'Sausis', +'february-gen' => 'Vasaris', +'march-gen' => 'Kuovs', +'april-gen' => 'Balondis', +'may-gen' => 'Gegožė', +'june-gen' => 'Bėrželis', +'july-gen' => 'Lėipa', +'august-gen' => 'Rogpjūtis', +'september-gen' => 'Siejė', +'october-gen' => 'Spalis', +'november-gen' => 'Lapkrėstis', +'december-gen' => 'Groudis', +'jan' => 'sau', +'feb' => 'vas', +'mar' => 'kuo', +'apr' => 'bal', +'may' => 'geg', +'jun' => 'bėr', +'jul' => 'lėi', +'aug' => 'rgp', +'sep' => 'sie', +'oct' => 'spa', +'nov' => 'lap', +'dec' => 'grd', + +# Categories related messages +'pagecategories' => '{{PLURAL:$1|Kateguorėjė|Kateguorėjės|Kateguorėju}}', +'category_header' => 'Kateguorėjės „$1“ straipsnē', +'subcategories' => 'Subkateguorėjės', +'category-media-header' => 'Abruozdielis kateguorėjuo „$1“', +'category-empty' => "''Šėta kateguorėjė nūnā netor nė vėina straipsnė a faila.''", +'hidden-categories' => '{{PLURAL:$1|Pakavuota kateguorėjė|Pakavuotas kateguorėjės}}', +'hidden-category-category' => 'Pakavuotas kateguorėjės', +'category-subcat-count' => '{{PLURAL:$2|Tuo kateguorėjuo īr vėina subkateguorėjė.|{{PLURAL:$1|Ruodoma|Ruodomas|Ruodoma}} $1 {{PLURAL:$1|subkateguorėjė|subkateguorėjės|subkateguorėju}} (ėš vėsa īr $2 {{PLURAL:$2|subkateguorėjė|subkateguorėjės|subkateguorėju}}).}}', +'category-article-count' => '{{PLURAL:$2|Tuo kateguorėjuo īr vėins poslapis.|{{PLURAL:$1|Ruodoms|Ruodomė|Ruodoma}} $1 tuos kateguorėjės {{PLURAL:$1|poslapis|poslapē|poslapiu}} (ėš vėsa kateguorėjuo īr $2 {{PLURAL:$2|poslapis|poslapē|poslapiu}}).}}', +'listingcontinuesabbrev' => 'tes.', + +'about' => 'Aple', +'article' => 'Straipsnis', +'newwindow' => '(īr atverams naujam longė)', +'cancel' => 'Nutrauktė', +'moredotdotdot' => 'Daugiau...', +'mypage' => 'Mona poslapis', +'mytalk' => 'Mona aptarėms', +'anontalk' => 'Šėta IP aptarėms', +'navigation' => 'Naršīms', +'and' => ' ėr', + +# Cologne Blue skin +'qbfind' => 'Ėiškuotė', +'qbbrowse' => 'Naršītė', +'qbedit' => 'Taisītė', +'qbpageoptions' => 'Tas poslapis', +'qbpageinfo' => 'Konteksts', +'qbmyoptions' => 'Mona poslapē', +'qbspecialpages' => 'Specēlė̅jė poslapē', +'faq' => 'DOK', +'faqpage' => 'Project:DOK', + +# Vector skin +'vector-action-addsection' => 'Pridietė tema', +'vector-action-delete' => 'Trintė', +'vector-action-move' => 'Parvadintė', +'vector-action-protect' => 'Ožrakintė', +'vector-action-undelete' => 'Atkortė', +'vector-action-unprotect' => 'Atrakintė', +'vector-view-create' => 'Sokortė', +'vector-view-edit' => 'Taisītė', +'vector-view-history' => 'Veizietė istuorėjė', +'vector-view-view' => 'Skaitītė', +'vector-view-viewsource' => 'Veizietė kuoda', +'actions' => 'Vēksmā', +'namespaces' => 'Vardū srėtīs', +'variants' => 'Variantā', + +'errorpagetitle' => 'Klaida', +'returnto' => 'Grīžtė i $1.', +'tagline' => 'Straipsnis ėš {{SITENAME}}.', +'help' => 'Pagelba', +'search' => 'Ėiškuotė', +'searchbutton' => 'Ėiškuok', +'go' => 'Ēk', +'searcharticle' => 'Ēk', +'history' => 'Poslapė istuorėjė', +'history_short' => 'Istuorėjė', +'updatedmarker' => 'atnaujėnta nu paskotėnė mona apsėlonkīma', +'info_short' => 'Infuormacėjė', +'printableversion' => 'Versėjė spausdintė', +'permalink' => 'Nulatėnė nūruoda', +'print' => 'Spausdėntė', +'edit' => 'Taisītė', +'create' => 'Sokortė', +'editthispage' => 'Taisītė ton poslapė', +'create-this-page' => 'Sokortė ta poslapi', +'delete' => 'Trintė', +'deletethispage' => 'Trintė ton poslapė', +'protect' => 'Ožrakintė', +'protect_change' => 'pakeistė', +'protectthispage' => 'Ožrakintė šėta poslapi', +'unprotect' => 'Atrakintė', +'unprotectthispage' => 'Atrakintė šėta poslapi', +'newpage' => 'Naus poslapis', +'talkpage' => 'Aptartė šėta poslapi', +'talkpagelinktext' => 'Aptarėms', +'specialpage' => 'Specēlosis poslapis', +'personaltools' => 'Persuonalėnē rakondā', +'postcomment' => 'Rašītė kuomentara', +'articlepage' => 'Veizietė straipsnė', +'talk' => 'Aptarėms', +'views' => 'Parveizėtė', +'toolbox' => 'Rakondā', +'userpage' => 'Ruodītė nauduotoja poslapi', +'projectpage' => 'Ruodītė pruojekta poslapi', +'imagepage' => 'Veizietė abruozdielė poslapi', +'mediawikipage' => 'Ruodītė pranešėma poslapi', +'templatepage' => 'Ruodītė šabluona poslapi', +'viewhelppage' => 'Ruodītė pagelbuos poslapi', +'categorypage' => 'Ruodītė kateguorėjės poslapi', +'viewtalkpage' => 'Ruodītė aptarėma poslapi', +'otherlanguages' => 'Kėtuom kalbuom', +'redirectedfrom' => '(Nokreipta ėš $1)', +'redirectpagesub' => 'Nokreipėma poslapis', +'lastmodifiedat' => 'Šėts poslapis paskotini karta pakeists $1 $2.', +'viewcount' => 'Tas poslapis bova atverts $1 {{PLURAL:$1|čiesa|čiesus|čiesu}}.', +'protectedpage' => 'Ožrakints poslapis', +'jumpto' => 'Paršuoktė i:', +'jumptonavigation' => 'navėgacėjė', +'jumptosearch' => 'paėiška', + +# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). +'aboutsite' => 'Aple {{SITENAME}}', +'aboutpage' => 'Project:Aple', +'copyright' => 'Turinīs pateikts so $1 licencėjė.', +'copyrightpage' => '{{ns:project}}:Autuoriu teisės', +'currentevents' => '** Vielībė̅jė ivīkē **', +'currentevents-url' => 'Project:Vielībė̅jė ivīkē', +'disclaimers' => 'Atsakuomībės aprėbuojims', +'disclaimerpage' => 'Project:Atsakuomībės aprėbuojims', +'edithelp' => 'Kāp redagoutė', +'edithelppage' => 'Help:Redagavėms', +'helppage' => 'Help:Torėnīs', +'mainpage' => 'Pėrms poslapis', +'mainpage-description' => 'Pėrms poslapis', +'policy-url' => 'Project:Puolitėka', +'portal' => 'Kuolektīvs', +'portal-url' => 'Project:Kuolektīvs', +'privacy' => 'Privatoma puolitėka', +'privacypage' => 'Project:Privatoma puolitėka', + +'badaccess' => 'Privėlėju klaida', +'badaccess-group0' => 'Tomstā nelēdama ivīkdītė veiksma, katruo prašiet.', + +'ok' => 'Gerā', +'retrievedfrom' => 'Gautė ėš „$1“', +'youhavenewmessages' => 'Tamsta toret $1 ($2).', +'newmessageslink' => 'naujū žėnotiu', +'newmessagesdifflink' => 'paskotinis pakeitėms', +'youhavenewmessagesmulti' => 'Toret naujū žėnotiu $1', +'editsection' => 'taisītė', +'editold' => 'taisītė', +'viewsourceold' => 'veizietė šaltėni', +'editlink' => 'keistė', +'viewsourcelink' => 'veizietė kuoda', +'editsectionhint' => 'Redagoutė skirsneli: $1', +'toc' => 'Torėnīs', +'showtoc' => 'ruodītė', +'hidetoc' => 'kavuotė', +'thisisdeleted' => 'Veizėtė a atkortė $1?', +'viewdeleted' => 'Ruodītė $1?', +'restorelink' => '$1 {{PLURAL:$1|ėštrinta keitėma|ėštrintos keitėmos|ėštrintū keitėmu}}', +'feedlinks' => 'Šaltėnis:', +'site-rss-feed' => '$1 RSS šaltėnis', +'site-atom-feed' => '$1 Atom šaltėnis', +'page-rss-feed' => '„$1“ RSS šaltėnis', +'page-atom-feed' => '„$1“ Atom šaltėnis', +'red-link-title' => '$1 (poslapis da neparašīts)', + +# Short words for each namespace, by default used in the namespace tab in monobook +'nstab-main' => 'Poslapis', +'nstab-user' => 'Nauduotuojė poslapis', +'nstab-media' => 'Abruozdielė poslapis', +'nstab-special' => 'Specēlos poslapis', +'nstab-project' => 'Proujekta poslapis', +'nstab-image' => 'Fails', +'nstab-mediawiki' => 'Teksts', +'nstab-template' => 'Šabluons', +'nstab-help' => 'Pagelbuos poslapis', +'nstab-category' => 'Kateguorėjė', + +# Main script and global functions +'nosuchaction' => 'Nier tuokė veiksma', +'nosuchspecialpage' => 'Nier tuokė specēlėjė poslapė', +'nospecialpagetext' => 'Tamsta prašiet nelaistėna specēlė̅jė poslapė, laistėnū specēliūju poslapiu sōraša rasėt [[Special:SpecialPages|specēliūju poslapiu sārošė]].', + +# General errors +'error' => 'Klaida', +'databaseerror' => 'Doumenū bazės klaida', +'laggedslavemode' => 'Diemesė: Poslapī gal nesmatītė naujausiu pakeitėmu.', +'readonly' => 'Doumenū bazė ožrakėnta', +'enterlockreason' => 'Iveskėt ožrakėnėma prižasti, tēpuogi kumet daugmaž bus atrokėnta', +'readonlytext' => 'Doumenū bazė daba īr ožrakėnta naujėm irašam a kėtėm keitėmam, +mažo doumenū bazės techninē pruofilaktėkā, +puo tuo vėsks griš i sava viežes. +Ožrakėnusiuojo admėnėstratuoriaus pateikts rakėnima paaiškėnims: $1', +'missing-article' => 'Doumenū bazė nerada poslapė teksta, katra ana torietu rastė, pavadėnta „$1“ $2. + +Paprastā tas būn dielē pasenosės skėrtoma vuo istuorėjės nūruodas i poslapi, katros bova ėštrėnts. + +Jēgo tas nie šėts varėjants, Tamsta mažo raduot klaida pruogramėnė ironguo. +Prašuom aple šėtā paskelbtė [[Special:ListUsers/sysop|adminėstratoriō]], nepamėršdamė nuruodītė nūruoda.', +'missingarticle-rev' => '(versėjė#: $1)', +'missingarticle-diff' => '(Skėrt.: $1, $2)', +'readonly_lag' => 'Doumenū bazė bova autuomatėškā ožrakėnta, kuol pagelbinės doumenū bazės pasvīs pagrėndine', +'internalerror' => 'Vėdėnė klaida', +'internalerror_info' => 'Vėdėnė klaida: $1', +'filecopyerror' => 'Nepavīkst kopėjoutė faila ėš „$1“ i „$2“.', +'filerenameerror' => 'Nepavīkst parvardėntė faila ėš „$1“ i „$2“.', +'filenotfound' => 'Nepavīkst rastė faila „$1“.', +'fileexistserror' => 'Nepavīkst irašītė i faila „$1“: tas fails jau īr', +'unexpected' => 'Natėkieta raikšmie: „$1“=„$2“.', +'cannotdelete' => 'Nepavīka ėštrintė nuruodīta poslapė a faila. (Mažo kažkas padarė pėrmesnis šėta)', +'badtitle' => 'Bluogs pavadėnėms', +'badtitletext' => 'Nuruodīts poslapė pavadėnėms bova neleistėns, toščės a neteisėngā sojongts terpkalbinis a terppruojektėnis pavadėnėms. Anamė gal būtė vėins a daugiau sėmbuoliu, neleistėnū pavadėnėmūs', +'perfcachedts' => 'Ruodoma ėšsauguota doumenū kopėjė, katra bova atnaujėnta $1.', +'querypage-no-updates' => 'Atnaujėnėmā tam poslapiō nūnā ėšjongtė īr. Doumenīs nūnā čė nebus atnaujėntė.', +'wrong_wfQuery_params' => 'Netaisingė parametrā i funkcėjė wfQuery()
    +Funkcėjė: $1
    +Ožklausėms: $2', +'viewsource' => 'Veizėtė kuoda', +'viewsourcefor' => 'poslapiō $1', +'protectedpagetext' => 'Šėts poslapis īr ožrakints, saugont anū nū redagavėma.', +'viewsourcetext' => 'Tomsta galėt veizietė ėr kopėjoutė poslapė kuoda:', +'protectedinterface' => 'Šėtom poslapi īr pruogramėnės ironguos sasajuos teksts katros īr apsauguots, kū neprietelē anū nasogadėntu.', +'editinginterface' => "'''Diemesė:''' Tamsta keitat poslapi, katros īr nauduojams programėnės irongas sōsajės tekstė. Pakeitėmā tamė poslapū tēpuogi pakeis nauduotuojė sōsajės ėšruoda ė kėtėims nauduotujams. Jēgo nuorėt pargoldītė, siūluom pasėnauduotė [http://translatewiki.net/wiki/Main_Page?setlang=bat-smg „translatewiki.net“], „MediaWiki“ lokalėzacėjės pruojėktu.", +'sqlhidden' => '(SQL ožklausa pakavuota)', +'namespaceprotected' => "Tamsta netorėt teisiu keistė poslapiu '''$1''' srėtī.", +'ns-specialprotected' => 'Specēlė̅ jė poslapē negal būtė keitamė.', + +# Login and logout pages +'logouttext' => "'''Daba Tamsta esat atsėjongės.''' + +Galėt ė tuoliau nauduotė {{SITENAME}} anuonimėškā aba prisėjonkėt ėš naujė šėtuo patiu a kėto nauduotuojė vardu. +Pastebiejims: katruos nekatruos poslapiuos ė tuoliau gal ruodītė būktā būtomiet prisėjongės lėgė tuol, kumet ėšvalīsėt sava naršīklės dietovė (''cache'').", +'welcomecreation' => '== Svēkė, $1! == + +Tamstas paskīra bova sokorta. Neožmėrškėt pakeistė sava {{SITENAME}} nustatīmu.', +'yourname' => 'Nauduotuojė vards:', +'yourpassword' => 'Slaptažuodis:', +'yourpasswordagain' => 'Pakartuoket slaptažuodė:', +'remembermypassword' => 'Atmintė šėta infuormacėjė šėtom kuompioteri(for a maximum of $1 {{PLURAL:$1|day|days}})', +'yourdomainname' => 'Tamstas domens:', +'login' => 'Prisėjongtė', +'nav-login-createaccount' => 'Prėsėjongtė / sokortė paskīra', +'loginprompt' => 'Ijonkėt pakavukus, jēgo nuorėt prisėjongtė pri {{SITENAME}}.', +'userlogin' => 'Prėsėjongtė / sokortė paskīra', +'logout' => 'Atsėjongtė', +'userlogout' => 'Atsėjongtė', +'notloggedin' => 'Neprisėjongis', +'nologin' => "Netorėt prisėjongėma varda? '''$1'''.", +'nologinlink' => 'Sokorkėt paskīra', +'createaccount' => 'Sokortė paskīra', +'gotaccount' => "Jau torėt paskīra? '''$1'''.", +'gotaccountlink' => 'Prisėjonkėt', +'badretype' => 'Ivestė slaptažuodē nesotamp.', +'userexists' => 'Irašīts nauduotuojė vards jau īr nauduojams. +Prašuom pasėrėnktė kėtuoki varda.', +'loginerror' => 'Prisėjongėma klaida', +'nocookiesnew' => 'Nauduotuojė paskīra bova sokurta, ale Tamsta nēsot prisėjongis. {{SITENAME}} nauduo pakavukus, kū prijongtu nauduotuojus. Tamsta esot ėšjongis anūs. Prašuom ijongtė pakavukus, tumet prisėjonkėt so sava nauju nauduotuojė vardu ė slaptažuodiu.', +'nocookieslogin' => "Vikipedėjė nauduo pakavukus (''cookies''), kū prijongtu nauduotuojus. Tamsta esat ėšjongės anūs. Prašuom ijongtė pakavukus ė pamiegītė viel.", +'loginsuccesstitle' => 'Siekmingā prisėjongiet.', +'loginsuccess' => "'''Nūnā Tamsta esot prisėjongės pri {{SITENAME}} kāp „$1“.'''", +'nosuchuser' => 'Nier anėjuokė nauduotuojė pavadėnta „$1“. +Patikrėnkėt rašība, aba [[Special:UserLogin/signup|sokorkėt naujė paskīra]].', +'nosuchusershort' => 'Nier juokė nauduotuojė, pavadėnta „$1“. Patėkrinkėt rašība.', +'nouserspecified' => 'Tamstā rēk nuruodītė nauduotuojė varda.', +'wrongpassword' => 'Ivests neteisings slaptažuodis. Pameginket dā karta.', +'wrongpasswordempty' => 'Ivests slaptažuodis īr tošts. Pameginket vielėk.', +'passwordtooshort' => 'Tamstas slaptažuodis nier laistėns aba par tromps īr. Ans tor būtė nuors {{PLURAL:$1|1 sėmbuolė|$1 sėmbuoliu}} ėlgoma ė skėrtės nū Tamstas nauduotuojė varda.', +'mailmypassword' => 'Atsiōstė naujė slaptažuodi pašto', +'passwordremindertitle' => 'Laikėns {{SITENAME}} slaptažuodis', +'passwordremindertext' => 'Kažkastā (tėkriausē Tamsta, IP adreso $1) +paprašė, kū atsiōstomiet naujė slaptažuodi pruojektō {{SITENAME}} ($4). +Laikėns slaptažuodis nauduotuojō „$2“ bova sokorts ėr nustatīts kāp „$3“. +Jēgo Tamsta nuoriejot ana pakeistė tūmet torietomiet prisėjongtė ė daba pakeistė sava slaptažuodi. + +Jēgo kažkas kėts atlėka ta prašīma aba Tamsta prisėmėniet sava slaptažuodi ė +nebnuorėt ana pakeistė, Tamsta galėt tėisiuog nekreiptė diemiesė ė šėta gruomata ė tuoliau +nauduotis sava senu slaptažuodžiu.', +'noemail' => 'Nier anėjuokė el. pašta adresa ivesta nauduotuojō „$1“.', +'passwordsent' => 'Naus slaptažuodis bova nusiōsts i el. pašta adresa, +ožregėstrouta nauduotuojė „$1“. +Prašuom prisėjongtė vielē, kumet Tamsta gausėt anū.', +'blocked-mailpassword' => 'Tamstas IP adresos īr ožblokouts nū redagavėma, tudie neleidama nauduotė slaptažuodė priminėma funkcėjės, kū apsėsauguotomė nū pėktnaudžēvėma.', +'eauthentsent' => 'Patvėrtėnėma gruomata bova nusiōsta i paskėrta el. pašta adresa. +Prīš ėšsiontiant kėta gruomata i Tamstas diežote, Tamsta torėt vīkdītė nuruodīmus gruomatuo, kū patvėrtėntomiet, kū diežotė tėkrā īr Tamstas.', +'throttled-mailpassword' => 'Slaptažuodžė priminims jau bova ėšsiōsts, par paskotėnes $1 adīnas. Nuorint apsėsauguotė nū pėktnaudžēvėma, slaptažuodė priminims gal būt ėšsiōsts tėk kas $1 adīnas.', +'mailerror' => 'Klaida siontiant pašta: $1', +'acct_creation_throttle_hit' => 'Tamsta jau sokūriet $1 prisėjongėma varda. Daugiau nebgalėma.', +'emailauthenticated' => 'Tamstas el. pašta adresos bova ožtvirtėnts $1.', +'emailnotauthenticated' => 'Tamstas el. pašta adresos da nier patvėrtėnts. Anėjuokės gruomatas +nebus siontamas ni vėinam žemiau ėšvardėntam puoslaugiō.', +'noemailprefs' => 'Nuruodėkīt el. pašta adresa, kū vėiktu šėtos funkcėjės.', +'emailconfirmlink' => 'Patvėrtinkėt sava el. pašta adresa', +'accountcreated' => 'Nauduotuos sokorts', +'accountcreatedtext' => 'Nauduotuos $1 sokorts.', +'createaccount-title' => '{{SITENAME}} paskīruos kūrėms', +'loginlanguagelabel' => 'Kalba: $1', + +# Password reset dialog +'resetpass' => 'Keistė slaptažuodi', +'resetpass_header' => 'Keistė paskīruos slaptažuodi', +'oldpassword' => 'Sens slaptažuodis:', +'newpassword' => 'Naus slaptažuodis:', +'retypenew' => 'Pakartuokėt nauja slaptažuodi:', +'resetpass_submit' => 'Nostatītė slaptažuodi ė prėsėjongtė', +'resetpass_success' => 'Tamstas slaptažuodis pakeists siekmėngā! Daba prėsėjongiama...', +'resetpass-temp-password' => 'Laikėns slaptažuodis:', + +# Edit page toolbar +'bold_sample' => 'Pastuorints teksts', +'bold_tip' => 'Pastuorintė teksta', +'italic_sample' => 'Teksts kursīvu', +'italic_tip' => 'Teksts kursīvu', +'link_sample' => 'Nūruodas pavadinėms', +'link_tip' => 'Vėdinė nūruoda', +'extlink_sample' => 'http://www.example.com nūruodas pavadėnėms', +'extlink_tip' => 'Ėšuorėnė nūruoda (nepamėrškėt http:// priraša)', +'headline_sample' => 'Skīrė pavadėnėms', +'headline_tip' => 'Ontra līgė skīrė pavadėnėms', +'math_sample' => 'Iveskėt fuormolė', +'math_tip' => 'Matematinė fuormolė (LaTeX fuormato)', +'nowiki_sample' => 'Iterpkėt nefuormouta teksta čė', +'nowiki_tip' => 'Ėgnoroutė wiki fuormata', +'image_sample' => 'Pavīzdīs.jpg', +'image_tip' => 'Idietė abruozdieli', +'media_sample' => 'Pavīzdīs.ogg', +'media_tip' => 'Nūruoda i media faila', +'sig_tip' => 'Tomstas parašos ėr čiesos', +'hr_tip' => 'Guorizuontali linėjė (nenauduokėt ba reikala)', + +# Edit pages +'summary' => 'Kuomentars:', +'subject' => 'Tema/ontraštė:', +'minoredit' => 'Mažos pataisims', +'watchthis' => 'Keravuotė šėta poslapė', +'savearticle' => 'Ėšsauguotė poslapė', +'preview' => 'Parveiza', +'showpreview' => 'Ruodītė parveiza', +'showlivepreview' => 'Tėisiuogėnė parvaiza', +'showdiff' => 'Ruodītė skėrtomus', +'anoneditwarning' => "'''Diemesė:''' Tomsta nesat prisėjungės. Jūsa IP adresos būs irašīts i šiuo poslapė istuorėjė.", +'missingsummary' => "'''Priminėms:''' Tamsta nenuruodiet pakeitėma kuomentara. Jēgo viel paspausėt ''Ėšsauguotė'', Tamstas pakeitėms bus ėšsauguots ba anuo.", +'missingcommenttext' => 'Prašuom ivestė kuomentara.', +'summary-preview' => 'Kuomentara parvaiza:', +'subject-preview' => 'Skėrsnelė/ontraštės parvaiza:', +'blockedtitle' => 'Nauduotuos īr ožblokouts', +'blockedtext' => "'''Tamstas nauduotuojė vards a IP adresos īr ožblokouts.''' + +Ožbluokava $1. +Nuruodīta prižastis īr ''$2''. + +* Bluokavėma pradžia: $8 +* Bluokavėma pabenga: $6 +* Numatīts bluokoujamasės: $7 + +Tamsta galėt sosėsėiktė so $1 a kėtu +[[{{MediaWiki:Grouppage-sysop}}|adminėstratuoriom]], kū aptartė ožbluokavėma. +Tamsta negalėt nauduotės funkcėjė „Rašītė laiška tam nauduotuojō“, jēgo nesot pateikis tėkra sava el. pašta adresa sava [[Special:Preferences|paskīruos nustatīmūs]] ė nesot ožblokouts nu anuos nauduojėma. +Tamstas dabartėnis IP adresos īr $3, a bluokavėma ID īr #$5. Prašuom nuruodītė šėtā, kumet kreipiatės diel atbluokavėma.", +'autoblockedtext' => "Tamstas IP adresos bova autuomatėškā ožblokouts, kadongi ana nauduojė kėts nauduotuos, katra ožbluokava $1. +Nuruodīta prīžastis īr tuokė: + +:''$2'' + +* Bluokavėma pradžė: $8 +* Bluokavėma pabenga: $6 +* Numatuoms bluokavėma čiesos: $7 + +Tamsta galėt sosėsėiktė so $1 aba kėtu [[{{MediaWiki:Grouppage-sysop}}|adminėstratuoriom]], kū aprokoutomėt biedas diel bluokavėma. + +Tamsta negalėt nauduotės fonkcėjė „Rašītė gruomata tam nauduotuojō“, jēgo nesot nuruode tėkra el. pašta adresa sava [[Special:Preferences|nauduotuojė nustatīmūs]]. Tēpuogi Tamsta negalat nauduotės ta fonkcėjė, jēgo Tamstā ožblokouts anuos nauduojėms. + +Tamstas IP adresos īr $3, bluokavėma ID īr $5. +Prašuom nuruodītė šėtūs doumenis visūmet, kumet kreipiatės diel bluokavėma.", +'blockednoreason' => 'prīžastis nier nuruodīta', +'blockedoriginalsource' => "Žemiau īr ruodoms '''$1''' torėnīs:", +'blockededitsource' => "''Tamstas keitimu'' teksts poslapiui '''$1''' īr ruodoms žemiau:", +'whitelistedittitle' => 'Nuorėnt redagoutė rēk prisėjongtė', +'whitelistedittext' => 'Tamsta torėt $1, kū keistomėt poslapius.', +'nosuchsectiontitle' => 'Nier tuokė skīrė', +'loginreqlink' => 'prisėjongtė', +'accmailtitle' => 'Slaptažuodis ėšsiūsts īr.', +'accmailtext' => "Nauduotuojė '$1' slaptažuodis nusiūsts i $2 īr.", +'newarticle' => '(Naus)', +'newarticletext' => "Tamsta pakliovuot i nūnā neesoti poslapi. +Nuoriedamė sokortė poslapi, pradiekėt rašītė žemiau esontiamė ivedima pluotė +(platiau [[{{MediaWiki:Helppage}}|pagelbas poslapī]]). +Jēgo pakliovuot čė netīčiuom, paprastiausē paspauskėt naršīklės mīgtoka '''atgal'''.", +'anontalkpagetext' => "----''Tas īr anonimėnė nauduotuojė, katros nier sosėkūrės aba nenauduo paskīruos, aptarėmu poslapis. +Dielē tuo nauduojams IP adresos anuo atpažėnėmō. +Tas IP adresos gal būtė dalinams keletō nauduotuoju. +Jēgo Tamsta esat anonimėnis nauduotuos ėr veizėt, kū kuomentarā nier skėrtė Tamstā, [[Special:UserLogin/signup|sokorkėt paskīra]] aba [[Special:UserLogin|prisėjonkėt]], ė nebūsėt maišuoms so kėtās anonimėnēs nauduotuojās.''", +'noarticletext' => 'Tuo čiesu tamė poslapī nier juokė teksta. +Tamsta galėt [[Special:Search/{{PAGENAME}}|ėiškuotė šėta poslapė pavadėnėma]] kėtūs poslapiūs, +[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ėiškuotė sosėjosiu regėstru], +aba [{{fullurl:{{FULLPAGENAME}}|action=edit}} keistė ta poslapi].', +'userpage-userdoesnotexist' => 'Nauduotuojė paskīra „$1“ nier ožregėstrouta. Prašuom patikrėntė, a Tamsta nuorėt kortė/keistė ta poslapi.', +'clearyourcache' => "'''Diemesė:''' ėšsauguojus Tamstā gal prireiktė ėšvalītė Tamstas naršīklės rėnktovė, kū paveizėtomėt pakeitėmus. '''Mozilla / Safari / Konqueror:''' laikīdami ''Shift'' pasėrinkėt ''Atsiōstė ėš nauja'', a paspauskėt ''Ctrl-Shift-R'' (sėstemuo Apple Mac ''Cmd-Shift-R''); '''IE:''' laikīdamė ''Ctrl'' paspauskėt ''Atnaujėntė'', o paspauskėt ''Ctrl-F5''; '''Konqueror:''' paprastiausē paspauskėt ''Perkrautė'' mīgtoka, o paspauskėt ''F5''; '''Opera''' nauduotuojam gal prireiktė pėlnā ėšvalītė anū rėnktovė ''Rakondā→Nustatīmā''.", +'usercssyoucanpreview' => "'''Patarėms:''' Nauduokit „Ruodītė parvaiza“ mīgtoka, kū ėšmiegintomiet sava naujaji CSS priš ėšsaugont.", +'userjsyoucanpreview' => "'''Patarėms:''' Nauduokit „Ruodītė parvaiza“ mīgtoka, kū ėšmiegintomiet sava naujaji JS priš ėšsaugont.", +'usercsspreview' => "'''Napamirškėt, kū Tamsta tėk parveizėt sava nauduotoja CSS, ans da nabova ėšsauguots!'''", +'userjspreview' => "'''Nepamirškėt, kū Tamsta tėk testoujat/parvaizėt sava nauduotoja ''JavaScript'', ans da nabova ėšsauguots!'''", +'userinvalidcssjstitle' => "'''Diemesė:''' Nė juokės ėšruodos „$1“. Napamirškėt, kū sava .css ėr .js poslapē nauduo pavadėnėma mažuosiomės raidiemis, pvz., Nauduotuos:Foo/vector.css, o ne Nauduotuos:Foo/Vector.css.", +'updated' => '(Atnaujėnta)', +'note' => "'''Pastebiejims:'''", +'previewnote' => "'''Nepamėrškėt, kū tas tėktās pervaiza, pakeitėmā da nier ėšsauguotė!'''", +'previewconflict' => 'Šėta parvaiza paruod teksta ėš vėršotinėjė teksta redagavėma lauka tēp, kāp ans bus ruodoms, jei pasirinksėt anū ėšsauguotė.', +'session_fail_preview' => "'''Atsiprašuom! Mes nagalėm vīkdītė Tamstas keitėma diel sesėjės doumenū praradima. +Prašuom pamiegintė vielēk. Jei šėtā napaded, pamieginkėt atsėjongtė ėr prėsėjongtė atgal.'''", +'session_fail_preview_html' => "'''Atsėprašuom! Mes nagalėm apdoroutė Tamstas keitėma diel sesėjės doumenū praradėma.''' +''Kadaogi šėtom pruojekte grīnasės HTML īr ijongts, parveiza īr pasliepta kāp atsargoma prėimonė priš JavaScript atakas.'' +'''Jei tā teisiets keitėma bandīms, prašuom pamiegint viel. Jei šėtā napaded, pamieginkėt atsėjongtė ėr prėsėjongtė atgal.'''", +'editing' => 'Taisuoms straipsnis - $1', +'editingsection' => 'Taisuoms $1 (skėrsnelis)', +'editingcomment' => 'Taisuoms $1 (naus skīrius)', +'editconflict' => 'Ėšpreskėt kuonflėkta: $1', +'explainconflict' => "Kažėn kas kėts jau pakeitė poslapi nū tuo čiesa, kumet Tamsta pradiejuot ana redagoutė. +Vėršotėniamė tekstėniamė laukė pateikta šėtu čiesu esontė poslapė versėjė. +Tamstas pakeitėmā pateiktė žemiau esontiamė laukė. +Tamstā rēk sojongtė Tamstas pakeitėmus so esontė versėjė. +Kumet paspausėte „{{int:savearticle}}“, bus irašīts '''tėktās''' teksts vėršotėniam tekstėniam laukė.", +'yourtext' => 'Tamstas teksts', +'storedversion' => 'Ėšsauguota versėjė', +'editingold' => "'''ISPIEJIMS: Tamsta keitat ne naujausė poslapė versėjė. +Jēgo ėšsauguosėt sava pakeitėmus, paskum darītė pakeitėmā prapols.'''", +'yourdiff' => 'Skėrtomā', +'copyrightwarning' => "Primenam, kū vėsks, kas patenk i {{SITENAME}}, īr laikuoma pavėišėnto palē $2 (platiau - $1). Jēgo nenuorit, kū Tamstas duovis būtou ba pasėgailiejėma keitams ė platėnams, nerašīkėt čė.
    +Tamsta tēpuogi pasėžadat, kū tas īr Tamstas patėis rašīts torėnīs a kuopėjouts ėš vėišū a panašiū valnū šaltėniu. +'''NEKOPĖJOUKĖT AUTUORĖNIEM TEISIEM APSAUGUOTU DARBŪ BA LEIDĖMA!'''", +'copyrightwarning2' => "Primenam, kū vėsks, kas patenk i {{SITENAME}} gal būtė keitama, perdaruoma, a pašalėnama kėtū nauduotuoju. Jēgo nenuorėt, kū Tamstas duovis būtu ba pasėgailiejėma keitams, čiuonās nerašīkėt.
    +Tēpuogi Tamsta pasėžadat, kū tas īr Tamstas rašīts teksts aba kuopėjouts +ėš vėišū liousū šaltėniu (detaliau - $1). +'''NEKUOPĖJOUKAT AUTUORĖNIEM TEISIEM APSAUGUOTU DARBŪ BA LEIDĖMA!'''", +'readonlywarning' => "'''DIEMESĖ: Doumenū bazė bova ožrakėnta teknėnē pruofilaktėkā, +tudie negaliesėt ėšsauguotė sava pakeitėmu daba. Tamsta galėt nosėkopėjoutė teksta i tekstėni faila +ė paskum ikeltė ana čė.'''", +'protectedpagewarning' => "'''DIEMESĖ: Šėts poslapis īr ožrakints ėr anū redagoutė gal tėk admėnėstratuorė teises torėntīs prietelē.'''", +'semiprotectedpagewarning' => "'''Pastebiejėms:''' Šėts poslapis bova ožrakėnts ėr anuo gal redagoutė tėk regėstroutė nauduotojā.", +'titleprotectedwarning' => "'''DIEMESĖ: Tas poslapis bova ožrakėnts tēp, ka tėktās kāpkatrė nauduotuojē galietu ana sokortė.'''", +'templatesused' => '{{PLURAL:$1|Šabluons|Šabluonā}}, katrėi īr nauduojamė poslapī:', +'templatesusedpreview' => '{{PLURAL:$1|Šabluons|Šabluonā}}, nauduotė šėtuo parvaizuo:', +'templatesusedsection' => 'Šabluonā, nauduotė šėtom skėrsnelī:', +'template-protected' => '(apsauguots)', +'template-semiprotected' => '(posiau apsauguots)', +'hiddencategories' => 'Tas poslapis prėklausa $1 {{PLURAL:$1|pakavuotā kateguorėjē|pakavuotoms kateguorėjėms|pakavuotu kateguorėju}}:', +'nocreatetitle' => 'Poslapiu kūrims aprėbuots', +'nocreatetext' => '{{SITENAME}} aprėbuojė galėmībe kortė naujus poslapius. +Tamsta galėt grīžtė ė redagoutė nūnā esonti poslapi, a [[Special:UserLogin|prėsėjongtė a sokortė paskīra]].', +'permissionserrors' => 'Teisiu klaida', +'permissionserrorstext' => 'Tamsta netorėt teisiu šėta darītė diel {{PLURAL:$1|tuos prīžastėis|tū prīžastiū}}:', +'permissionserrorstext-withaction' => 'Tamsta netorėt leidėma $2 dielē {{PLURAL:$1|tos prīžastėis|tū prīžastiu}}:', +'recreate-moveddeleted-warn' => "'''Diemesė: Tomsta atkoriat poslapi, katros onkstiau bova ėštrints.''' + +Tomsta torėt nosprēst, a pritėnk tuoliau redagoutė šėta poslapi. +Šėta poslapė šalėnėmu istuorėjė īr pateikta patuogoma vardan:", +'moveddeleted-notice' => 'Tas poslapis bova ėštrėnts. +Ėštrėnta poslapė versėju sārašos īr pateikts paveiziejėmō žemiau.', +'edit-conflict' => 'Redagavėma kuonflėktos', + +# "Undo" feature +'undo-success' => 'Keitėms gal būtė atšaukts. Prašuom patėkrėntė palīgėnėma, asonti žemiau, kū patvėrtėntomiet, kū Tamsta šėta ė nuorėt padarītė, ė tumet ėšsauguokit pakeitėmos, asontios žemiau, kū ožbėngtomiet keitėma atšaukėma.', +'undo-failure' => 'Keitėms nagal būt atšaukts diel konflėktounantiu tarpėniu pakeitėmu.', +'undo-summary' => 'Atšauktė [[Special:Contributions/$2|$2]] ([[User talk:$2|Aptarėms]]) versėje $1', + +# Account creation failure +'cantcreateaccount-text' => "Paskīrū kūrėma ėš šėta IP adresa ('''$1''') ožbluokava [[User:$3|$3]]. + +$3 nuruodīta prīžastis īr ''$2''", + +# History pages +'viewpagelogs' => 'Ruodītė šėtuo poslapė specēliōsios vaiksmos', +'nohistory' => 'Šėts poslapis netor keitėmu istuorėjės.', +'currentrev' => 'Dabartėnė versėjė', +'currentrev-asof' => 'Dabartėnė $1 versėjė', +'revisionasof' => '$1 versėjė', +'revision-info' => '$1 versėjė nauduotuojė $2', +'previousrevision' => '←Onkstesnė versėjė', +'nextrevision' => 'Paskesnė versėjė→', +'currentrevisionlink' => 'Dabartėnė versėjė', +'cur' => 'dab', +'next' => 'kėts', +'last' => 'pask', +'page_first' => 'pėrm', +'page_last' => 'pask', +'histlegend' => "Skėrtomā terp versėju: pažīmiekit līginamas versėjės ė spauskėt ''Enter'' klavėša a mīgtuka apatiuo.
    +Žīmiejimā: (dab) = palīginims so vielibiausė versėjė, +(pask) = palīginims so priš ta bovosia versėjė, S = mažos pataisims.", +'history-fieldset-title' => 'Naršītė istuorėjuo', +'histfirst' => 'Seniausė', +'histlast' => 'Vielibė̅jė', +'historysize' => '($1 {{PLURAL:$1|baits|baitā|baitu}})', +'historyempty' => '(nieka nier)', + +# Revision feed +'history-feed-title' => 'Versėju istuorėjė', +'history-feed-item-nocomment' => '$1 $2', +'history-feed-empty' => 'Prašuoms poslapis nēgzėstuo. +Ans galiejė būtė ėštrėnts ėš pruojekta, aba parvardėnts. +Pamiegīkėt [[Special:Search|ėiškoutė pruojektė]] sosėjosiu naujū poslapiu.', + +# Revision deletion +'rev-delundel' => 'ruodītė/kavuotė', +'revisiondelete' => 'Trintė/atkortė versėjės', +'logdelete-selected' => "{{PLURAL:$2|Pasėrinkts|Pasėrinktė|Pasėrinktė}} '''$1''' istuorėjės {{PLURAL:$2|atėtėkims|atsėtėkimā|atsėtėkimā}}:", +'revdelete-text' => "'''Ėštrintuos versėjės ėr ivīkē vistėik da bus ruodomė poslapė istuorėjuo ėr specēliūju veiksmū istuorėjuo, no anū torėnė dalīs nabus vėišā pasėikiamos.''' +Kėtė admėnėstratuorē šėtom pruojekte vėsdar galės pasėiktė pasliepta torėni ėr galės ana atkortė viel par šėta pate sasaja, nabent īr nostatītė papėlduomė aprėbuojėmā.", +'revdelete-unsuppress' => 'Šalėntė apribuojėmos atkortuos versėjės', +'logdelete-logentry' => 'pakeists [[$1]] atsėtėkima veiziemoms', +'revdel-restore' => 'Keistė veizėmuma', +'revdelete-edit-reasonlist' => 'Keistė trīnėma prīžastis', + +# Suppression log +'suppressionlog' => 'Trīnėma istuorėjė', + +# History merging +'mergehistory-success' => '$3 [[:$1]] versėju siekmėngā sojongta so [[:$2]].', + +# Merge log +'revertmerge' => 'Atskėrtė', + +# Diffs +'history-title' => 'Poslapė „$1“ istuorėjė', +'difference' => '(Skėrtomā terp versėju)', +'lineno' => 'Eilotė $1:', +'compareselectedversions' => 'Palīgintė pasėrinktas versėjės', +'editundo' => 'atšauktė', +'diff-multi' => '($1 {{PLURAL:$1|tarpėnis keitėms nier ruoduoms|tarpėnē keitėmā nier ruoduomė|tarpėniu keitėmu nier ruoduoma}}.)', + +# Search results +'searchresults' => 'Paėiškuos rezoltatā', +'searchresults-title' => 'Paėiškuos rezoltatā "$1"', +'searchresulttext' => 'Daugiau infuormacėjės aple paėiška pruojektė {{SITENAME}} rasėt [[{{MediaWiki:Helppage}}|{{int:help}}]].', +'searchsubtitle' => 'Tamsta ėiškuojot \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|vėsė poslapē katrėi prasėded so "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|vėsė poslapē katrėi ruod i "$1"]])', +'searchsubtitleinvalid' => 'Jėškuom „$1“', +'titlematches' => 'Straipsniu pavadėnėmu atitėkmenīs', +'notitlematches' => 'Juokiū pavadinėma atitikmenū', +'textmatches' => 'Poslapė torėnė atėtikmenīs', +'notextmatches' => 'Juokiū poslapė teksta atitikmenū', +'prevn' => 'onkstesnius {{PLURAL:$1|$1}}', +'nextn' => 'paskesnius {{PLURAL:$1|$1}}', +'viewprevnext' => 'Veizėtė ($1 {{int:pipe-separator}} $2) ($3).', +'searchmenu-legend' => 'Paėiškuos nustatīmā', +'searchmenu-exists' => "'''Poslapis pavadėnts „[[$1]]“ šėtuo wiki'''", +'searchmenu-new' => "'''Sokortė poslapi „[[:$1]]“ šėtuo wiki!'''", +'searchhelp-url' => 'Help:Torėnīs', +'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Ėiškuotė poslapiu so šėtuom prīšdielio]]', +'searchprofile-articles' => 'Torėnė poslapē', +'searchprofile-project' => 'Pruojėkta poslapē', +'searchprofile-images' => 'Failā', +'searchprofile-everything' => 'Vėsks', +'searchprofile-advanced' => 'Prapliesta', +'searchprofile-articles-tooltip' => 'Ėiškuotė čiuonās: $1', +'searchprofile-project-tooltip' => 'Ėiškuotė čiuonās: $1', +'searchprofile-images-tooltip' => 'Ėiškuotė failu', +'searchprofile-everything-tooltip' => 'Ėiškuotė vėsuo torėnė (tuom patėm ėr aptarėma poslapiu)', +'search-result-size' => '$1 ({{PLURAL:$2|1 žuodis|$2 žuodē|$2 žuodiu}})', +'search-result-score' => 'Tėnkamoms: $1%', +'search-redirect' => '(paradresavėms $1)', +'search-section' => '(skīrios $1)', +'search-suggest' => 'Mažo nuoriejot $1', +'search-interwiki-caption' => 'Dokterėnē pruojektā', +'search-interwiki-default' => '$1 rezoltatā:', +'search-interwiki-more' => '(daugiau)', +'search-mwsuggest-enabled' => 'so pasiūlīmās', +'search-mwsuggest-disabled' => 'nie pasiūlīmu', +'search-relatedarticle' => 'Sosėjėn', +'mwsuggest-disable' => 'Kavuotė AJAX pasiūlīmus', +'searchrelated' => 'sosėjėn', +'searchall' => 'vėsė', +'showingresults' => "Žemiau ruodoma lėgė '''$1''' {{PLURAL:$1|rezoltata|rezoltatu|rezoltatu}} pradedont #'''$2'''.", +'showingresultsnum' => "Žemiau ruodoma '''$3''' {{PLURAL:$3|rezoltata|rezoltatu|rezoltatu}} pradedant #'''$2'''.", +'nonefound' => "'''Pastebiejėms''': Palē nutīliejėma ėiškuoma tėktās kāp katruosė vardū srėtīsė. Pamiegīkėt prirašītė prėišdieli ''all:'', jēgo nuorėt ėiškiuotė vėsa torėnė (tamė tarpė aptarėma poslapius, šabluonus ė tēp tuoliau), aba nauduokėt nuorėma vardū srėti kāp prėišdieli.", +'search-nonefound' => 'Nier rezoltatu, katrėi atitėktu ožklausėma.', +'powersearch' => 'Ėiškuotė', +'powersearch-legend' => 'Prapliesta paėiška', +'powersearch-ns' => 'Ėiškoutė vardū srėtīsė:', +'powersearch-redir' => 'Itrauktė paradresavėmus', +'powersearch-field' => 'Ėiškoutė', +'search-external' => 'Ėšuorėnė paėiška', + +# Quickbar +'qbsettings' => 'Greitasā pasėrėnkėms', +'qbsettings-none' => 'Neruodītė', + +# Preferences page +'preferences' => 'Nustatīmā', +'mypreferences' => 'Mona nustatīmā', +'prefs-edits' => 'Keitėmu skaitlius:', +'prefsnologin' => 'Naprisėjongis', +'prefsnologintext' => 'Tamstā rēk būtė [{{fullurl:{{#Special:UserLogin}}|returnto=$1}} prisėjongosam], kū galietomiet keistė sava nustatīmus.', +'changepassword' => 'Pakeistė slaptažuodė', +'prefs-skin' => 'Ėšruoda', +'skin-preview' => 'Parveiza', +'prefs-math' => 'Matematėka', +'datedefault' => 'Juokė pasėrėnkėma', +'prefs-datetime' => 'Data ė čiesos', +'prefs-personal' => 'Nauduotuojė pruopilis', +'prefs-rc' => 'Vielībė̅jė pakeitėmā', +'prefs-watchlist' => 'Keravuojamu sārašos', +'prefs-watchlist-days' => 'Kėik dėinū ruodītė keravuojamu sārašė:', +'prefs-watchlist-days-max' => '(daugiausē 7 dėinas)', +'prefs-watchlist-edits' => 'Kėik pakeitėmu ruodītė ėšpliestiniam keravuojamu sārašė:', +'prefs-watchlist-edits-max' => '(dėdliausias skaitlius: 1000)', +'prefs-misc' => 'Ivairė nustatīmā', +'prefs-resetpass' => 'Keistė slaptažuodi', +'saveprefs' => 'Ėšsauguotė', +'resetprefs' => 'Atstatītė nostatīmos', +'restoreprefs' => 'Atstatītė vėsus numatītūsius nustatīmus', +'prefs-editing' => 'Redagavėms', +'prefs-edit-boxsize' => 'Redagavėma longa dėdoms.', +'rows' => 'Eilotės:', +'columns' => 'Štolpalē:', +'searchresultshead' => 'Paėiškuos nostatīmā', +'resultsperpage' => 'Rezoltatu poslapie:', +'contextlines' => 'Eilotiu rezoltatė:', +'contextchars' => 'Konteksta sėmbuoliu eilotie:', +'stub-threshold' => 'Minimums nabėngta poslapė fuormatavėmō:', +'recentchangesdays' => 'Ruodomas dėinas vielībūju pakeitėmu sārašė:', +'recentchangesdays-max' => '(daugiausē $1 {{PLURAL:$1|dėina|dėinū|dėinas}})', +'recentchangescount' => 'Numatītasā keitėmu skaitlius, ruodoms vielībūju keitėmu, poslapiu istuorėjėsė ė notėkėmu sarašūsė:', +'savedprefs' => 'Nostatīmā siekmėngā ėšsauguotė.', +'timezonelegend' => 'Čiesa zuona', +'localtime' => 'Vėitinis čiesos:', +'timezoneuseserverdefault' => 'Nauduotė palē nutīliejėma ėš serverė', +'timezoneuseoffset' => 'Kėta (patikslėntė skėrtoma)', +'timezoneoffset' => 'Skėrtoms¹:', +'servertime' => 'Serverė čiesos:', +'guesstimezone' => 'Paimtė ėš naršīklės', +'timezoneregion-africa' => 'Afrėka', +'timezoneregion-america' => 'Amerėka', +'timezoneregion-antarctica' => 'Antarktėda', +'timezoneregion-asia' => 'Azėjė', +'timezoneregion-atlantic' => 'Atlanta ondenīns', +'timezoneregion-australia' => 'Australėjė', +'timezoneregion-europe' => 'Euruopa', +'timezoneregion-indian' => 'Indėjės ondenīns', +'timezoneregion-pacific' => 'Ramosis ondenīns', +'allowemail' => 'Lēstė siūstė el. gramuotelės ėš kėtū nauduotuoju', +'prefs-searchoptions' => 'Paėiškuos nustatīmā', +'prefs-namespaces' => 'Vardū srėtīs', +'defaultns' => 'Palē nutīliejėma ėiškuotė šėtuosė vardū srėtīsė:', +'default' => 'palē nūtīliejėma', +'prefs-files' => 'Failā', +'youremail' => 'El. pašts:', +'username' => 'Nauduotuojė vards:', +'uid' => 'Nauduotuojė ID:', +'prefs-memberingroups' => '{{PLURAL:$1|Gropės|Gropiu}} narīs:', +'yourrealname' => 'Tėkros vards:', +'yourlanguage' => 'Aplėnkuos kalba:', +'yourvariant' => 'Variants', +'yournick' => 'Pasėrinkts slapīvardis:', +'badsig' => 'Neteisings parašas; patėkrinkėt HTML žīmės.', +'badsiglength' => 'Tamstas parašos īr par ėlgs. +Ana gal sodarītė ne daugiau kāp $1 {{PLURAL:$1|sėmbuolis|sėmbuolē|sėmbuoliu}}.', +'yourgender' => 'Lītis:', +'gender-unknown' => 'Nier nuruodīta', +'gender-male' => 'Vīrs', +'gender-female' => 'Muoterėška', +'email' => 'El. pašts', +'prefs-help-realname' => 'Tėkrs vards nier privaluoms, vuo jēgo Tamsta ana ivesėt, ons bus nauduojams Tamstas darba pažīmiejėmō.', +'prefs-help-email' => 'El. pašta adresos nier privaloms, ale uns leid Tamstā gautė nauja slaptažuodi, jēgo pamėršuot kuoks uns bova, ė tēpuogi Tamsta galėt leistė kėtėims pasėiktė Tamsta par Tamstas nauduotuojė a nauduotuojė aptarėma poslapi neatsklėidont Tamstas tapatoma.', + +# User rights +'userrights' => 'Nauduotuoju teisiu valdīms', +'userrights-lookup-user' => 'Tvarkītė nauduotuojė gropės', +'userrights-user-editname' => 'Iveskėt nauduotuojė varda:', +'editusergroup' => 'Redagoutė nauduotuojė gropes', +'editinguser' => "Taisuoms nauduotuos '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])", +'userrights-editusergroup' => 'Keistė nauduotuoju gropes', +'saveusergroups' => 'Sauguotė nauduotuoju gropes', +'userrights-groupsmember' => 'Narīs:', +'userrights-reason' => 'Prīžastis:', + +# Groups +'group' => 'Gropė:', +'group-user' => 'Nauduotuojē', +'group-autoconfirmed' => 'Autuomatėškā patvirtėntė nauduotuojē', +'group-bot' => 'Buotā', +'group-sysop' => 'Adminėstratuorē', +'group-bureaucrat' => 'Biorokratā', +'group-all' => '(vėsė)', + +'group-user-member' => 'Nauduotuos', +'group-bot-member' => 'Buots', +'group-sysop-member' => 'Adminėstratuorius', +'group-bureaucrat-member' => 'Biorokrats', + +'grouppage-user' => '{{ns:project}}:Nauduotuojē', +'grouppage-autoconfirmed' => '{{ns:project}}:Automatėškā patvėrtintė nauduotuojē', +'grouppage-bot' => '{{ns:project}}:Robuotā', +'grouppage-sysop' => '{{ns:project}}:Adminėstratuorē', +'grouppage-bureaucrat' => '{{ns:project}}:Biorokratā', + +# Rights +'right-read' => 'Skaitītė poslapius', +'right-edit' => 'Keistė poslapius', + +# User rights log +'rightslog' => 'Nauduotuoju teisiu istuorėjė', +'rightslogtext' => 'Pateikiams nauduotuoju teisiu pakeitėmu sārašos.', +'rightslogentry' => 'pakeista $1 gropės narīstė ėš $2 i $3. Sveikėnam!', +'rightsnone' => '(juokiū)', + +# Associated actions - in the sentence "You do not have permission to X" +'action-edit' => 'redagoutė ta poslapi', +'action-undelete' => 'atkortė ta poslapi', +'action-patrol' => 'pažīmietė kėtū keitėmus kāp patikrėntus', +'action-userrights' => 'keistė vėsū nauduotuoju teises', + +# Recent changes +'nchanges' => '$1 {{PLURAL:$1|pakeitėms|pakeitėmā|pakeitėmu}}', +'recentchanges' => 'Vielībė̅jė pakeitėmā', +'recentchanges-legend' => 'Vielībuju pakeitėmu pasėrinkėmā', +'recentchangestext' => 'Tamė poslapī īr patīs vielībė̅ jė paketėmā tom pruojėktė.', +'recentchanges-feed-description' => 'Keravuokėt patius vielībiausius pakeitėmus pruojektō tamė šaltėnī.', +'rcnote' => "Žemiau īr '''$1''' {{PLURAL:$1|paskotinis pakeitims|paskotinē pakeitimā|paskotiniu pakeitimu}} par $2 {{PLURAL:$2|paskotinė̅jė dėina|paskotėniasės '''$2''' dėinas|paskotėniuju '''$2''' dėinū}} skaitlioujant nū $4, $5.", +'rcnotefrom' => 'Žemiau īr pakeitėma pradedant nū $2 (ruodom lėgė $1 pakeitėmu).', +'rclistfrom' => 'Ruodītė naujus pakeitėmus pradedant nū $1', +'rcshowhideminor' => '$1 mažus pakeitėmus', +'rcshowhidebots' => '$1 robuotus', +'rcshowhideliu' => '$1 prėsėjongusiūm nauduotuojūm pakeitėmus', +'rcshowhideanons' => '$1 anuonimėnius nauduotuojus', +'rcshowhidepatr' => '$1 patikrėntus pakeitėmus', +'rcshowhidemine' => '$1 mona pakeitėmus', +'rclinks' => 'Ruodītė paskotėnius $1 pakeitėmu par paskotėnė̅sēs $2 dėinū
    $3', +'diff' => 'skėrt', +'hist' => 'ist', +'hide' => 'Kavuotė', +'show' => 'Ruodītė', +'minoreditletter' => 'm', +'newpageletter' => 'N', +'boteditletter' => 'r', +'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|keravuojontis nauduotuos|keravuojontīs nauduotuojē|keravuojontiu nauduotuoju}}]', +'rc_categories' => 'Ruodītė tėk šėtas kateguorėjės (atskirkit nauduodamė „|“)', +'rc_categories_any' => 'Bikuokė', +'newsectionsummary' => '/* $1 */ naus skėrsnelis', +'rc-enhanced-expand' => 'Ruodītė detales (rēk JavaScript)', +'rc-enhanced-hide' => 'Kavuotė detales', + +# Recent changes linked +'recentchangeslinked' => 'Sosėjėn pakeitėmā', +'recentchangeslinked-feed' => 'Sosėjėn pakeitėmā', +'recentchangeslinked-toolbox' => 'Sosėjėn pakeitėmā', +'recentchangeslinked-title' => 'So $1 sosėje pakeitimā', +'recentchangeslinked-noresult' => 'Nier juokiū pakeitėmu sosėitous poslapious douto čieso.', +'recentchangeslinked-summary' => "Šėtom specēliajam poslapi ruodomė vielībė̅jė pakeitėmā poslapiūs, i katrūs īr nuruodoma. Poslapē ėš Tamstas [[Special:Watchlist|keravuojamu sāraša]] īr '''pastuorėntė'''.", +'recentchangeslinked-page' => 'Poslapė pavadinėms:', +'recentchangeslinked-to' => 'Ruodītė so doutu poslapiu sosėjosiu puslapiu pakeitėmus', + +# Upload +'upload' => 'Ikeltė faila', +'uploadbtn' => 'Ikeltė faila', +'reuploaddesc' => 'Sogrīžtė i ikielima fuorma.', +'uploadnologin' => 'Naprėsėjongis', +'uploadnologintext' => 'Nuoriedamė ikeltė faila, torėt būt [[Special:UserLogin|prėsėjongis]].', +'upload_directory_read_only' => 'Tėnklapė serveris nagal rašītė i ikielima papke ($1).', +'uploaderror' => 'Ikielima soklīdims', +'uploadtext' => "Nauduokėtės žemiau pateikta skvarma kū ikeltomėt failus. +Nuoriedamė parveizietė ar ėiškuotė unkstiau ikeltū abruozdieliu, ēkėt i [[Special:FileList|ikeltū failu saraša]], ikielėmā ėr ėštrīnėmā īr ožregėstroujamė [[Special:Log/upload|ikielėmu istuorėjuo]], trīnėmā - [[Special:Log/delete|trīnėmu istuorėjuo]]. + +Nuoriedamė panauduotė ikelta faila poslapī, nauduokėt tuokės nūoruodas: +* '''[[{{ns:file}}:File.jpg]]''' +* '''[[{{ns:file}}:File.png|200px|thumb|left|alt text]]''' aba +* '''[[{{ns:media}}:File.ogg]]''' tėisiuogėnē nūruodā i faila.", +'upload-permitted' => 'Laistėnė failu tėpā: $1.', +'upload-preferred' => 'Pageidajamė failu tėpā: $1.', +'upload-prohibited' => 'Oždraustė failu tėpā: $1.', +'uploadlog' => 'ikielimu istuorėjė', +'uploadlogpage' => 'Ikielimu istuorėjė', +'uploadlogpagetext' => 'Žemiau pateikiam paskotėniu failu ikielima istuorėjė.', +'filename' => 'Faila vards', +'filedesc' => 'Kuomentars', +'fileuploadsummary' => 'Kuomentars:', +'uploadedfiles' => 'Ikeltė failā', +'ignorewarning' => 'Nekrėiptė diemiesė i parspiejėma ėr ėšauguotė faila vėsvėin.', +'ignorewarnings' => 'Nekrėiptė diemesė i vėsuokius perspiejimos', +'minlength1' => 'Faila pavadinėms tor būtė nuors vėina raidie.', +'illegalfilename' => 'Faila vardė „$1“ īr sėmbuoliu, katrėi nier leidami poslapė pavadinėmūs. Prašuom parvadėntė faila ė miegītė ikeltė ana par naujė.', +'badfilename' => 'Faila pavadinėms pakeists i „$1“.', +'filetype-missing' => 'Fails netor galūnės (kāp pavīzdīs „.jpg“).', +'emptyfile' => 'Panašu, ka fails, katra ikieliet īr toščias. Tas gal būtė diel klaiduos faila pavadėnėmė. Pasėtėkrinkėt a tėkrā nuorėt ikeltė šėta faila.', +'fileexists' => "Fails so tuokiu vardu jau īr, prašuom paveizėtė '''[[:$1]]''', jēgo nesat ožtėkrėnts, a nuorit ana parrašītė. +[[$1|thumb]]", +'fileexists-extension' => "Fails so pavėdiu pavadinėmu jau īr: [[$2|thumb]] +* Ikeliama faila pavadinėms: '''[[:$1]]''' +* Jau esontė faila pavadinėms: '''[[:$2]]''' +Prašuom ėšsėrėnktė kėta varda.", +'file-exists-duplicate' => 'Tas fails īr {{PLURAL:$1|šėta faila|šėtū failu}} doblėkats:', +'uploadwarning' => 'Diemesė', +'savefile' => 'Ėšsauguotė faila', +'uploadedimage' => 'ikielė „[[$1]]“', +'overwroteimage' => 'ikruovė nauja „[[$1]]“ versėjė', +'uploaddisabledtext' => 'Failu ikielėmā oždraustė īr.', +'uploadscripted' => 'Šėts failos tor HTML a programėni kuoda, katros gal būtė klaidėngā soprasts interneta naršīklės.', +'uploadvirus' => 'Šėtom faile īr virosas! Ėšsamiau: $1', +'sourcefilename' => 'Ikeliams fails', +'destfilename' => 'Nuorims faila pavadinims', +'upload-maxfilesize' => 'Dėdliausias faila dėdoms: $1', +'watchthisupload' => 'Keravuotė šėta poslapė', +'upload-wasdeleted' => "'''Parspiejėms: Tamsta ikeliat faila, katros unkstiau bova ėštrėnts.''' + +Tamsta torietomiet nusprēstė, a īr naudėnga tuoliau ikeldinietė ta faila. +Tuo faila pašalinėma istuorėjė īr pateikta dielē patuogoma:", +'upload-success-subj' => 'Ikelt siekmėngā', + +'upload-proto-error' => 'Nateisėngs protuokols', +'upload-proto-error-text' => 'Nutuolinē ikielims raikalaun, kū URL prasėdietu http:// o ftp://.', +'upload-file-error' => 'Vėdėnė klaida', +'upload-file-error-text' => 'Ivīka vėdėnė klaida bandont sokortė laikinaji faila serverī. Prašuom sosėsėiktė so sistemuos admėnėstratuoriom.', +'upload-misc-error' => 'Nažėnuoma ikielėma klaida', +'upload-misc-error-text' => 'Ivīka nežėnuoma klaida vīkstont ikielėmō. Prašuom patėkrėnt, kū URL teisėngs teipuogi pasėikiams ėr pamiegīkit viel. Jē bieda ėšlėik, sosėsėikėt so sistemuos admėnėstratuoriom.', + +# Some likely curl errors. More could be added from +'upload-curl-error6' => 'Napavīkst pasėiktė URL', +'upload-curl-error6-text' => 'Pataikts URL nagal būt pasėikts. Prašuom patėkrėntė, kū URL īr teisings ėr svetainė veik.', +'upload-curl-error28' => 'Par ėlgā ikeliama', +'upload-curl-error28-text' => 'Atsakontė svetainė ožtronk par ėlgā. Patėkrėnkėt, a svetainė veik, palaukėt tropoti ė vielē pamiegīkit. Mažo Tamstā rēktu pamiegītė ne tuokio apkrauto čieso.', + +'license' => 'Licensėjė', +'license-header' => 'Licensėjė', +'nolicense' => 'Nepasėrėnkt', +'license-nopreview' => '(Parveiza negalėma)', +'upload_source_url' => ' (tėkrs, vėišā priėinams URL)', +'upload_source_file' => ' (fails Tamstas kompioterī)', + +# Special:ListFiles +'listfiles-summary' => 'Tas specēlus poslapis ruod vėsus ikeltus failus. +Palē numatīma paskiausē ikeltė failā īr ruoduomė sāroša vėršou. +Paspaude ont štolpelė ontraštės pakeisėt ėšruokavėma.', +'imgfile' => 'fails', +'listfiles' => 'Failu sārašos', +'listfiles_name' => 'Pavadinėms', +'listfiles_user' => 'Nauduotuos', +'listfiles_size' => 'Dėdoms', +'listfiles_description' => 'Aprašīms', +'listfiles_count' => 'Versėjės', + +# File description page +'file-anchor-link' => 'Fails', +'filehist' => 'Abruozdielė istuorėjė', +'filehist-help' => 'Paspauskėt ont datas/čiesa, ka paveizietomėt faila tuoki, kokis ons bova tū čiesu.', +'filehist-deleteall' => 'trintė vėsus', +'filehist-deleteone' => 'trintė šėta', +'filehist-revert' => 'sogōžėntė', +'filehist-current' => 'dabartėnis', +'filehist-datetime' => 'Data/Čiesos', +'filehist-thumb' => 'Miniatiūra', +'filehist-thumbtext' => 'Versėjės $1 miniatiūra', +'filehist-user' => 'Nauduotuos', +'filehist-dimensions' => 'Mierā', +'filehist-filesize' => 'Faila dėdoms', +'filehist-comment' => 'Kuomentars', +'imagelinks' => 'Faila nūruodas', +'linkstoimage' => '{{PLURAL:$1|Šėts poslapis|Šėtė poslapē}} nuruod i šėta faila:', +'nolinkstoimage' => 'I faila neruod anėjuoks poslapis.', +'sharedupload' => 'Tas fails īr ėš $1 ė gal būtė nauduojams kėtūs pruojektūs.', +'uploadnewversion-linktext' => 'Ikeltė nauja faila versėje', + +# File reversion +'filerevert' => 'Sogrōžėntė $1', +'filerevert-legend' => 'Faila sogrōžinėms', +'filerevert-intro' => 'Tamsta grōžėnat \'\'\'[[Media:$1|$1]]\'\'\' i versėje $4 ($2, $3).', +'filerevert-comment' => 'Kuomentars:', +'filerevert-submit' => 'Grōžėntė', + +# File deletion +'filedelete' => 'Trintė $1', +'filedelete-legend' => 'Trintė faila', +'filedelete-intro' => "Tamsta roušeties ėštrėntė faila '''[[Media:$1|$1]]''' so vėsa anuo istuorėjė.", +'filedelete-comment' => 'Prīžastis:', +'filedelete-submit' => 'Trintė', +'filedelete-success' => "'''$1''' bova ėštrints.", +'filedelete-nofile' => "'''$1''' nēsa.", +'filedelete-otherreason' => 'Kėta/papėlduoma prīžastis:', +'filedelete-reason-otherlist' => 'Kėta prīžastis', +'filedelete-reason-dropdown' => '*Dažnas trīnėma prīžastīs +** Autorīstės teisiu pažeidėmā +** Pasėkartuojontis fails', +'filedelete-edit-reasonlist' => 'Keistė trīnėma prīžastis', + +# MIME search +'mimesearch' => 'MIME paėiška', +'mimesearch-summary' => 'Šėts poslapis laid ruodīti failus vagol anū MIME tipa. Iveskėt: torėnėtips/potipis, pvz. image/jpeg.', +'mimetype' => 'MIME tips:', +'download' => 'parsėsiūstė', + +# Unwatched pages +'unwatchedpages' => 'Nekeravuojėmė poslapē', + +# List redirects +'listredirects' => 'Paradresavėmu sārašos', + +# Unused templates +'unusedtemplates' => 'Nenauduojamė šabluonā', +'unusedtemplatestext' => 'Šėts poslapis ruod sāraša poslapiu, esontiu šabluonu vardū srėtī, katrė nė iterptė i juoki kėta poslapi. Nepamėrškėt patėkrėntė kėtū nūruodu priš anūs ėštrėnont.', +'unusedtemplateswlh' => 'kėtas nūruodas', + +# Random page +'randompage' => 'Bikuoks poslapis', +'randompage-nopages' => 'Šėtuo vardū srėti nier anėjuokiu poslapiu.', + +# Random redirect +'randomredirect' => 'Bikuoks paradresavėms', +'randomredirect-nopages' => 'Šėtuo vardū srėti nier anėjuokiū paradresavėmu.', + +# Statistics +'statistics' => 'Statėstėka', +'statistics-header-pages' => 'Poslapiu statėstėka', +'statistics-header-edits' => 'Redagavėmu statėstėka', +'statistics-header-views' => 'Parveizu statistėka', +'statistics-header-users' => 'Nauduotuoju statėstėka', +'statistics-articles' => 'Torėnė poslapē', +'statistics-pages' => 'Poslapē', +'statistics-files' => 'Ikeltė failā', +'statistics-edits' => 'Poslapiu redagavėmu skaitlius nū {{SITENAME}} sokūrėma', +'statistics-edits-average' => 'Vėdotėnis keitėmu skaitlius poslapiō', +'statistics-users' => 'Ožsėregėstravosiu [[Special:ListUsers|nauduotuoju]]', +'statistics-users-active' => 'Aktīviu nauduotuoju', +'statistics-mostpopular' => 'Daugiausē ruodītė poslapē', + +'disambiguations' => 'Daugiareikšmiu žuodiu poslapē', + +'doubleredirects' => 'Dvėgobė paradresavėmā', +'doubleredirectstext' => 'Tėi paradresavėmā ruod i kėtus paradresavėma poslapius. Kuožnuo eilotē pamėnavuots pėrmasā ėr ontrasā paradresavėmā, tēpuogi ontrojė paradresavėma paskėrtis, katra paprastā ė paruod i tėkraji poslapi, i katra pėrmasā paradresavėms ė torietu ruodītė.', +'double-redirect-fixed-move' => '[[$1]] bova parkelts, daba tas īr paradresavėms i [[$2]]', + +'brokenredirects' => 'Neveikiantīs paradresavėmā', +'brokenredirectstext' => 'Žemiau ėšvardintė paradresavėma poslapē ruod i nasontius poslapius:', +'brokenredirects-edit' => 'redagoutė', +'brokenredirects-delete' => 'trintė', + +'withoutinterwiki' => 'Poslapē ba kalbū nūruodu', +'withoutinterwiki-summary' => 'Šėtė poslapē neruod i kėtū kalbū versėjės:', +'withoutinterwiki-submit' => 'Ruodītė', + +'fewestrevisions' => 'Straipsnē so mažiausė pakeitėmu', + +# Miscellaneous special pages +'nbytes' => '$1 {{PLURAL:$1|baits|baitā|baitu}}', +'ncategories' => '$1 {{PLURAL:$1|kateguorėjė|kateguorėjės|kateguorėju}}', +'nlinks' => '$1 {{PLURAL:$1|nūruoda|nūruodas|nūruodu}}', +'nmembers' => '$1 {{PLURAL:$1|narīs|narē|nariū}}', +'nrevisions' => '$1 {{PLURAL:$1|pakeitėms|pakeitėmā|pakeitėmu}}', +'nviews' => '$1 {{PLURAL:$1|paruodīms|paruodīmā|paruodīmu}}', +'specialpage-empty' => 'Šėtā ataskaitā nie rezoltatu.', +'lonelypages' => 'Vėinišė straipsnē', +'lonelypagestext' => 'I šėtuos poslapius nier nūruodu ėš kėtū šėta pruojekta poslapiu.', +'uncategorizedpages' => 'Poslapē, napriskėrtė juokē kateguorėjē', +'uncategorizedcategories' => 'Kateguorėjės, naprėskėrtas juokē kateguorėjē', +'uncategorizedimages' => 'Abruozdielē, nepriskėrtė juokē kateguorėjē', +'uncategorizedtemplates' => 'Šabluonā, nepriskėrtė juokē kateguorėjē', +'unusedcategories' => 'Nenauduojamas kateguorėjės', +'unusedimages' => 'Nenauduojamė failā', +'wantedcategories' => 'Nuorėmiausės kateguorėjės', +'wantedpages' => 'Nuorėmiausē poslapē', +'wantedfiles' => 'Nuorėmė failā', +'wantedtemplates' => 'Nuorėmė šabluonā', +'mostlinked' => 'Daugiausē ruodomė straipsnē', +'mostlinkedcategories' => 'Daugiausē ruodomas kateguorėjės', +'mostlinkedtemplates' => 'Daugiausē ruodomė šabluonā', +'mostcategories' => 'Straipsnē so daugiausē kateguorėju', +'mostimages' => 'Daugiausē ruodomė abruozdielē', +'mostrevisions' => 'Straipsnē so daugiausē keitėmu', +'prefixindex' => 'Vėsė poslapē so prīšdielio', +'shortpages' => 'Trompiausė poslapē', +'longpages' => 'Ėlgiausė poslapē', +'deadendpages' => 'Straipsnē-aklavėitės', +'deadendpagestext' => 'Tė poslapē netor nūruodu i kėtus poslapius šėtom pruojektė.', +'protectedpages' => 'Apsauguotė poslapē', +'protectedpagestext' => 'Šėtē poslapē īr apsauguotė nū parkielėma a redagavėma', +'protectedpagesempty' => 'Šėtu čiesu nier apsauguots anėjuoks fails so šėtās parametrās.', +'protectedtitles' => 'Apsauguotė pavadinėmā', +'protectedtitlesempty' => 'Šėtou čieso nier anėjuokė pavadinėma, katros apsauguots tās parametrās.', +'listusers' => 'Sārašos nauduotuoju', +'listusers-editsonly' => 'Ruodītė tėktās nauduotuojus katrėi īr atlėkė pakeitėmus', +'newpages' => 'Naujausė straipsnē', +'newpages-username' => 'Nauduotuojė vards:', +'ancientpages' => 'Seniausė poslapē', +'move' => 'Parvadintė', +'movethispage' => 'Parvadintė šėta poslapi', +'unusedimagestext' => 'Primenam, kū kėtas svetainės gal būtė nuruodiosės i abruozdieli tėisiogėniu URL, no vėstėik gal būtė šėtom sārašė, nuors ėr īr aktīvē naudounams.', +'unusedcategoriestext' => 'Šėtū kateguorėju poslapē sokortė, nuors juoks kėts straipsnis a kateguorėjė ana nenauduo.', +'notargettitle' => 'Nenuruodīts objekts', +'notargettext' => 'Tamsta nenuruodiet nuorima poslapė a nauduotuojė, +katram ivīkdītė šėta funkcėjė.', +'pager-newer-n' => '$1 {{PLURAL:$1|paskesnis|paskesni|paskesniū}}', +'pager-older-n' => '{{PLURAL:$1|senesnis|senesni|senesniū}}', + +# Book sources +'booksources' => 'Knīngu šaltinē', +'booksources-search-legend' => 'Knīngu šaltiniu paėiška', +'booksources-go' => 'Ēk!', + +# Special:Log +'specialloguserlabel' => 'Nauduotuos:', +'speciallogtitlelabel' => 'Pavadėnims:', +'log' => 'Specēliūju veiksmū istuorėjė', +'all-logs-page' => 'Vėsos istuorėjės', +'alllogstext' => 'Bėndra idietu failu, ėštrīnėmu, ožrakėnėmu, bluokavėmu ė prėvėlėju soteikėmu istuorėjė. +Īr galėmībė somažintė rezoltatu skaitliu patėkslėnont vēksma tėpa, nauduotuojė a sosėjosė poslapė.', +'logempty' => 'Istuorėjuo nier anėjuokiū atitinkontiu atsėtėkimu.', +'log-title-wildcard' => 'Ėiškuotė pavadinėmu, katrė prasėded šėtuo teksto', + +# Special:AllPages +'allpages' => 'Vėsė straipsnē', +'alphaindexline' => 'Nu $1 lėg $2', +'nextpage' => 'Kėts poslapis ($1)', +'prevpage' => 'Unkstesnis poslapis ($1)', +'allpagesfrom' => 'Ruodītė poslapius pradedont nu:', +'allpagesto' => 'Ruodītė poslapius, basėbengėnčios so:', +'allarticles' => 'Vėsė straipsnē', +'allinnamespace' => 'Vėsė poslapē (srėtis - $1)', +'allnotinnamespace' => 'Vėsė poslapē (nesontīs šiuo srėtie - $1)', +'allpagesprev' => 'Onkstesnis', +'allpagesnext' => 'Sekontis', +'allpagessubmit' => 'Tink', +'allpagesprefix' => 'Ruodītė poslapios so prīdelēs:', +'allpagesbadtitle' => 'Douts poslapė pavadėnėms īr neteisings a tor terpkalbėnė a terppruojektėnė prīdielė. Anamė īr vėns a kelė žėnklā, katrū negal nauduotė pavadėnėmūs.', +'allpages-bad-ns' => '{{SITENAME}} netor „$1“ vardū srėtėis.', + +# Special:Categories +'categories' => 'Kateguorėjės', +'categoriespagetext' => 'Pruojekte īr šėtuos kateguorėjės. +[[Special:UnusedCategories|Unused categories]] are not shown here. +Also see [[Special:WantedCategories|wanted categories]].', +'categoriesfrom' => 'Ruodītė kateguorėjės pradedont nu:', + +# Special:DeletedContributions +'deletedcontributions' => 'Panaikėnts nauduotuojė duovis', +'deletedcontributions-title' => 'Ėštrėnts nauduotuojė duovis', + +# Special:LinkSearch +'linksearch' => 'Ėšuorėnės nūruodas', +'linksearch-ns' => 'Vardū srėtis:', +'linksearch-ok' => 'Ėiškuotė', + +# Special:ListUsers +'listusersfrom' => 'Ruodītė nauduotuojus pradedont nū:', +'listusers-submit' => 'Ruodītė', +'listusers-noresult' => 'Nerast anėjuokiū nauduotuoju.', + +# Special:Log/newusers +'newuserlogpage' => 'Nauduotuojė kūrėma regėstros', +'newuserlog-byemail' => 'slaptažuodis ėšsiōsts par el. pašta', +'newuserlog-create-entry' => 'Naus nauduotuos', + +# Special:ListGroupRights +'listgrouprights' => 'Nauduotuoju gropiu teisės', +'listgrouprights-group' => 'Gropė', +'listgrouprights-members' => '(nariū sārošos)', + +# E-mail user +'mailnologin' => 'Nier adresa', +'mailnologintext' => 'Tamstā reik būtė [[Special:UserLogin|prisėjongosiam]] +ė tor būtė ivests teisings el. pašta adresos Tamstas [[Special:Preferences|nustatīmuos]], +kū siōstomiet el. gruomatas kėtėm nauduotuojam.', +'emailuser' => 'Rašītė gruomata šėtam nauduotuojō', +'emailpage' => 'Siūstė el. gruomata nauduotuojui', +'usermailererror' => 'Pašta objekts grōžėna klaida:', +'noemailtitle' => 'Nier el. pašta adreso', +'noemailtext' => 'Šėts nauduotuos nier nuruodės teisėnga el.pašta adresa a īr pasėrinkės negautė el. pašta ėš kėtū nauduotuoju.', +'email-legend' => 'Siūstė elektruonėne gruomata kėtam {{SITENAME}} nauduotuojō', +'emailfrom' => 'Nū:', +'emailmessage' => 'Pranešėms:', +'emailsend' => 'Siōstė', +'emailccme' => 'Siōstė monei mona gruomatas kuopėjė.', +'emailccsubject' => 'Gruomatas kuopėjė nauduotuojō $1: $2', +'emailsent' => 'El. gruomata ėšsiōsta', +'emailsenttext' => 'Tamstas el. pašta žėnotė ėšsiōsta.', + +# Watchlist +'watchlist' => 'Keravuojamė straipsnē', +'mywatchlist' => 'Keravuojamė poslapē', +'nowatchlist' => 'Netorėt anėvėina keravuojama poslapė.', +'watchlistanontext' => 'Prašuom $1, ka parveizietomėt a pakeistomiet elementus sava keravuojamu sārašė.', +'watchnologin' => 'Neprisėjongės', +'watchnologintext' => 'Tamstā rēk būtė [[Special:UserLogin|prisėjongosiam]], ka pakeistomiet sava keravuojamu sāraša.', +'addedwatch' => 'Pridieta pri keravuojamu', +'addedwatchtext' => "Poslapis \"[[\$1]]\" idiets i [[Special:Watchlist|keravuojamu sāraša]]. +Būsantīs poslapė ėr atėtinkama aptarėma poslapė pakeitėmā bus paruoduomė keravuojamu poslapiu sārašė, +tēpuogi bus '''parīškintė''' [[Special:RecentChanges|vielībūju pakeitėmu sārašė]], kū ėšsėskėrtom ėš kėtū straipsniu. +Jēgo bikumet ožsėnuorietomiet liautėis keravuotė straipsnė, spauskat \"nebkeravuotė\" vėršotėniam meniū.", +'removedwatch' => 'Pašalėntė ėš keravuojamu', +'removedwatchtext' => 'Poslapis „[[:$1]]“ pašalėnts ėš [[Special:Watchlist|Tamstas keravuojamu sāraša]].', +'watch' => 'Keravuotė', +'watchthispage' => 'Keravuotė šėta poslapė', +'unwatch' => 'Nebkeravuotė', +'unwatchthispage' => 'Nustuotė keravuotė', +'notanarticle' => 'Ne torėnė poslapis', +'watchnochange' => 'Pasėrėnkto čieso nebova redagouts nė vėins keravuojams straipsnis.', +'watchlist-details' => 'Keravuojama $1 {{PLURAL:$1|poslapis|$1 poslapē|$1 poslapiu}} neskaitlioujant aptarėmu poslapiu.', +'wlheader-enotif' => '* El. pašta primėnėmā ijongtė īr.', +'wlheader-showupdated' => "* Poslapē, katrėi pakeistė nu Tamstas paskotėnė apsėlonkėma čiesa anūs, īr pažīmietė '''pastuorintā'''", +'watchmethod-recent' => 'tėkrėnamė vielībė̅jė pakeitėmā keravuojamiems poslapiams', +'watchmethod-list' => 'Ėiškuoma vielībūju pakeitėmu keravuojamūs poslapiūs', +'watchlistcontains' => 'Tamstas kervuojamu sārašė īr $1 {{PLURAL:$1|poslapis|poslapē|poslapiu}}.', +'wlnote' => "Ruoduoma '''$1''' paskotėniu pakeitėmu, atlėktū par '''$2''' paskotėniu adīnu.", +'wlshowlast' => 'Ruodītė paskotėniu $1 adīnu, $2 dėinū a $3 pakeitėmus', +'watchlist-options' => 'Keravuojamu sāroša pasėrinkėmā', + +# Displayed when you click the "watch" button and it is in the process of watching +'watching' => 'Itraukiama i keravuojamu sāraša...', +'unwatching' => 'Šalėnama ėš keravuojamu sāraša...', + +'enotif_reset' => 'Pažīmietė vėsus poslapius kāp aplonkītus', +'enotif_newpagetext' => 'Tas īr naus poslapis.', +'changed' => 'pakeitė', +'created' => 'sokūrė', +'enotif_anon_editor' => 'anuonėminis nauduotuos $1', + +# Delete +'deletepage' => 'Trintė poslapi', +'confirm' => 'Ožtvėrtinu', +'excontent' => 'boves torinīs: „$1“', +'excontentauthor' => 'boves torinīs: „$1“ (redagava tėktās „[[Special:Contributions/$2|$2]]“)', +'exbeforeblank' => 'priš ėštrinant torinīs bova: „$1“', +'exblank' => 'poslapis bova tuščes', +'delete-confirm' => 'Ėštrėnta "$1"', +'delete-legend' => 'Trīnėms', +'historywarning' => 'Diemesė: Trėnams poslapis tor istuorėjė:', +'confirmdeletetext' => 'Tamsta pasėrėnkuot ėštrėntė poslapi a abruozdieli draugum so vėsa anuo istuorėjė. +Prašuom patvėrtėntė, kū Tamsta tėkrā nuorėt šėtu padarītė, žėnuot aple galėmus padarėnius, ė kū Tamsta šėtā daruot atsėžvelgdamė i [[{{MediaWiki:Policy-url}}|puolitėka]].', +'actioncomplete' => 'Vēksmos atlėkts īr', +'deletedtext' => '„$1“ ėštrints. +Paskotiniu pašalinėmu istuorėjė - $2.', +'deletedarticle' => 'ėštrīnė „[[$1]]“', +'suppressedarticle' => 'apžabuots „[[$1]]“', +'dellogpage' => 'Pašalinėmu istuorėjė', +'dellogpagetext' => 'Žemiau īr pateikiams paskotiniu ėštrīnimu sārašos.', +'deletionlog' => 'pašalinėmu istuorėjė', +'reverted' => 'Atkorta i onkstesne versėje', +'deletecomment' => 'Prīžastis:', +'deleteotherreason' => 'Kėta/papėlduoma prižastis:', +'deletereasonotherlist' => 'Kėta prižastis', +'deletereason-dropdown' => '*Dažnas trīnėma prižastīs +** Autorė prašīms +** Autorėniu teisiu pažeidėms +** Vandalėzmos', +'delete-edit-reasonlist' => 'Keistė trėnėma prīžastis', + +# Rollback +'rollback' => 'Atmestė pakeitėmos', +'rollback_short' => 'Atmestė', +'rollbacklink' => 'atmestė', +'rollbackfailed' => 'Atmetims napavīka', +'cantrollback' => 'Negalėma atmestė redagavėma; paskotinis keitės nauduotuos īr tuo poslapė autorius.', +'alreadyrolled' => 'Nepavīka atmestė paskotėnė [[User:$2|$2]] ([[User talk:$2|Aptarėms]]) darīta straipsnė [[$1]] keitėma; +kažkas jau pakeitė straipsnė arba sospiejė pėrmiesnis atmestė keitėma. + +Galėnis keitėms dėrbts nauduotuojė [[User:$3|$3]] ([[User talk:$3|Aptarėms]]).', +'editcomment' => "Redagavėma kuomentars bova: „''$1''“.", +'revertpage' => 'Atmests [[Special:Contributions/$2|$2]] ([[User talk:$2|Aptarėms]]) pakeitėms; sogrōžėnta nauduotuojė [[User:$1|$1]] versėjė', +'rollback-success' => 'Atmestė $1 keitėmā; grōžėnta i paskotėne $2 versėje.', + +# Edit tokens +'sessionfailure' => 'Atruod kū īr biedū so Tamstas prėsėjongėma sesėjė; šėts veiksmos bova atšaukts kāp atsargoma prėimonė priš sesėjės vuogėma. +Prašoum paspaustė „atgal“ ėr parkrautė poslapi ėš katruo atiejot, ė pamieginkėt vielē.', + +# Protect +'protectlogpage' => 'Rakinėmu istuorėjė', +'protectlogtext' => 'Žemiau īr poslapė ožrakinėmu tēpuogi atrakinėmu istuorėjė. Nūnā veikiantiu poslapiu apsaugū sāraša sorasėt [[Special:ProtectedPages|apsauguotu poslapiu sarašė]].', +'protectedarticle' => 'ožrakina „[[$1]]“', +'modifiedarticleprotection' => 'pakeists „[[$1]]“ apsauguos līgis', +'unprotectedarticle' => 'atrakėna „[[$1]]“', +'protect-title' => 'Nustatuoms apsauguojėma līgis poslapiō „$1“', +'prot_1movedto2' => 'Straipsnis [[$1]] parvadints i [[$2]]', +'protect-legend' => 'Ožrakinėma patvėrtinėms', +'protectcomment' => 'Prīžastis:', +'protectexpiry' => 'Beng galiuotė:', +'protect_expiry_invalid' => 'Galiuojėma čiesos īr nateisėngs.', +'protect_expiry_old' => 'Galiuojėma čiesos īr praėitī.', +'protect-text' => "Čė Tamsta galėt paveizėtė ė pakeistė apsauguos līgi šėtuo poslapio '''$1'''.", +'protect-locked-access' => "Tamstas paskīra netor teisiu keistė poslapiu apsauguos līgiu. +Čė īr dabartėnē nustatīmā poslapiō '''$1''':", +'protect-cascadeon' => 'Tas poslapis nūnā īr apsauguots, kadongi ons īr itraukts i {{PLURAL:$1|ta poslapi, apsauguota|tūs poslapiūs, apsauguotus}} „pakuopėnės apsauguos“ pasėrėnkėmu. Tamsta galėt pakeistė šėta poslapė apsauguos līgi, no tas nepaveiks pakuopėnės apsauguos.', +'protect-default' => 'Leistė vėsėms nauduotuojams', +'protect-fallback' => 'Rēkalautė „$1“ teisės', +'protect-level-autoconfirmed' => 'Blokoutė naujē prisėregėstravosius ė neregėstroutus nauduotuojus', +'protect-level-sysop' => 'Tėktās adminėstratuorē', +'protect-summary-cascade' => 'pakuopėnė apsauga', +'protect-expiring' => 'beng galiuotė $1 (UTC)', +'protect-expiry-indefinite' => 'nerėbuotā', +'protect-cascade' => 'Apsaugotė poslapius, itrauktus i šėta poslapi (pakuopėnė apsauga).', +'protect-cantedit' => 'Tamsta negalėt keistė šėta poslapė apsauguojėma līgiu, kagongi netorėt teisiu anuo redagoutė.', +'protect-othertime' => 'Kėts čiesos:', +'protect-othertime-op' => 'kėts čiesos', +'protect-existing-expiry' => 'Esams rakėnėma ožsėbengėma čiesos: $3, $2', +'protect-otherreason' => 'Kėta/papėlduoma prīžastis:', +'protect-otherreason-op' => 'kėta/papėlduoma prīžastis', +'protect-dropdown' => '*Iprastas ožrakinėma prīžastīs +** Intensīvus vandalėzmos +** Intensīvus nūruodu reklamavėms +** Neproduktīvi redagavėma vaina +** Dėdlė svarboma poslapis', +'protect-edit-reasonlist' => 'Keistė ožrakinėma prīžastis', +'protect-expiry-options' => '1 adīna:1 hour,1 dėina:1 day,1 nedielė:1 week,2 nedielės:2 weeks,1 mienou:1 month,3 mieniesē:3 months,6 mieniesē:6 months,1 metā:1 year,par omžius:infinite', +'restriction-type' => 'Laidėms:', +'restriction-level' => 'Aprėbuojėma līgis:', +'minimum-size' => 'Minėmalus dėdoms', +'maximum-size' => 'Dėdliausis dėdoms', +'pagesize' => '(baitās)', + +# Restrictions (nouns) +'restriction-edit' => 'Redagavėms', +'restriction-move' => 'Parvadėnėms', +'restriction-create' => 'Sokortė', +'restriction-upload' => 'Ikeltė', + +# Restriction levels +'restriction-level-sysop' => 'pėlnā apsauguota', +'restriction-level-autoconfirmed' => 'posiau apsauguota', +'restriction-level-all' => 'bikuoks', + +# Undelete +'undelete' => 'Atstatītė ėštrinta poslapi', +'undeletepage' => 'Ruodītė ė atkortė ėštrintos poslapios', +'viewdeletedpage' => 'Ruodītė ėštrintos poslapios', +'undeletepagetext' => 'Žemiau ėšvardėntė poslapē īr ėštrėntė, no da laikuomi +arkīve, tudie anie gal būt atstatītė. Arkīvs gal būt perēodėškā valuoms.', +'undeleteextrahelp' => "Nuoriedamė atkortė vėsa poslapi, palikit vėsas varnales napažīmietas ėr +spauskėt '''''Atkortė'''''. Nuoriedamiė atlėktė pasirėnktini atstatīma, pažīmiekit varnales šėtū versėju, katras nuorietomiet atstatītė, ėr spauskėt '''''Atkortė'''''. Paspaudus +'''''Ėš naujė''''' bos ėšvalītuos vėsos varnalės ėr kuomentara lauks.", +'undeleterevisions' => '$1 {{PLURAL:$1|versėjė|versėjės|versėju}} soarkīvouta', +'undeletehistory' => 'Jē atstatīsėt straipsni, istuorėjuo bos atstatītuos vėsos versėjės. +Jē puo ėštrīnima bova sokuots straipsnis tuokiuo patio pavadėnėmo, +atstatītuos versėjės atsiras onkstesnie istuorėjuo, o dabartėnė +versėjė lėks napakeista. Atkoriant īr prarondamė apribuojimā failu versėjuom.', +'undeleterevdel' => 'Atkorėms nebus ivīkdīts, jē šėtā nulems paskotėnės poslapė versėjės dalini ėštrīnima. +Tuokēs atvejās, Tamstā rēk atžīmietė a atkavuotė naujausēs ėštrintas versėjės. +Failu versėjės, katrū netorėt teisiu veizėtė, nebus atkortas.', +'undeletehistorynoadmin' => 'Šėts straipsnis bova ėštrints. Trīnima prižastis +ruodoma žemiau, teipuogi kas redagava poslapi +lėgė trīnima. Ėštrintū poslapiu tekstos īr galėmas tėk admėnėstratuoriam.', +'undelete-revision' => 'Ėštrėnta $1 versėjė, katra $4 d. $5 padėrba $3:', +'undeleterevision-missing' => 'Neteisėnga a dėngosė versėjė. Tamsta mažo torėt bluoga nūruoda, a versėjė bova atkorta a pašalėnta ėš arkīva.', +'undeletebtn' => 'Atkortė', +'undeletelink' => 'veizietė/atstatītė', +'undeletereset' => 'Ėš naujė', +'undeleteinvert' => 'Žīmietė prīšėngā', +'undeletecomment' => 'Kuomentars:', +'undeletedarticle' => 'atkorta „[[$1]]“', +'undeletedrevisions' => 'atkorta $1 {{PLURAL:$1|versėjė|versėjės|versėju}}', +'undeletedrevisions-files' => 'atkorta $1 {{PLURAL:$1|versėjė|versėjės|versėju}} ėr $2 {{PLURAL:$2|fails|failā|failu}}', +'undeletedfiles' => 'atkorta $1 {{PLURAL:$1|fails|failā|failu}}', +'undeletedpage' => "'''$1 bova atkurts''' +Parveizėkiet [[Special:Log/delete|trīnimu sāraša]], nuoriedamė rastė paskotėniu trīnimu ėr atkorėmu sāraša.", +'undelete-header' => 'Veizėkit [[Special:Log/delete|trīnima istuorėjuo]] paskoteniausē ėštrintū poslapiu.', +'undelete-search-box' => 'Ėiškuotė ėštrintū poslapiu', +'undelete-search-prefix' => 'Ruodītė poslapios pradedant so:', +'undelete-search-submit' => 'Ėiškuotė', +'undelete-no-results' => 'Nabova rasta juokė atėtėnkontė poslapė ėštrīnima arkīve.', +'undelete-show-file-confirm' => 'A ėš tėkrā nuorėt parveizietė ėštrėnta faila „$1“ $2 $3 versėjė?', +'undelete-show-file-submit' => 'Tēp', + +# Namespace form on various pages +'namespace' => 'Vardū srėtis:', +'invert' => 'Žīmietė prīšėngā', +'blanknamespace' => '(Pagrėndinė)', + +# Contributions +'contributions' => 'Nauduotuojė duovis', +'contributions-title' => 'Nauduotuojė $1 duovis', +'mycontris' => 'Mona duovis', +'contribsub2' => 'Nauduotuojė $1 ($2)', +'uctop' => ' (paskotinis)', +'month' => 'Nu mienėsė (ėr onkstiau):', +'year' => 'Nu metu (ėr onkstiau):', + +'sp-contributions-newbies' => 'Ruodītė tėk naujū prieteliu duovios', +'sp-contributions-newbies-sub' => 'Naujuoms paskīruoms', +'sp-contributions-newbies-title' => 'Nauduotuoju keitėmā naujuoms paskīruoms', +'sp-contributions-blocklog' => 'Bluokavėmu istuorėjė', +'sp-contributions-deleted' => 'Panaikėnts nauduotuojė duovis', +'sp-contributions-talk' => 'Aptarėms', +'sp-contributions-userrights' => 'Nauduotuoju teisiu valdīms', +'sp-contributions-search' => 'Ėiškuotė duovė', +'sp-contributions-username' => 'IP adresos a nauduotuojė vards:', +'sp-contributions-submit' => 'Ėiškuotė', + +# What links here +'whatlinkshere' => 'Sosėjėn straipsnē', +'whatlinkshere-title' => 'Poslapē, katrėi ruod i "$1"', +'whatlinkshere-page' => 'Poslapis:', +'linkshere' => "Šėtė poslapē ruod i '''[[:$1]]''':", +'nolinkshere' => "I '''[[:$1]]''' nūruodu nier.", +'nolinkshere-ns' => "Nurodītuo vardū srėtī anė vėins poslapis neruod i '''[[:$1]]'''.", +'isredirect' => 'nukreipēmasės poslapis', +'istemplate' => 'iterpims', +'isimage' => 'abruozdielė nūruoda', +'whatlinkshere-prev' => '$1 {{PLURAL:$1|onkstesnis|onkstesni|onkstesniū}}', +'whatlinkshere-next' => '$1 {{PLURAL:$1|kėts|kėtė|kėtū}}', +'whatlinkshere-links' => '← nūruodas', +'whatlinkshere-hideredirs' => '$1 nukreipėmus', +'whatlinkshere-hidetrans' => '$1 itraukėmus', +'whatlinkshere-hidelinks' => '$1 nūruodas', +'whatlinkshere-hideimages' => '$1 abruozdieliu nūruodas', +'whatlinkshere-filters' => 'Fėltrā', + +# Block/unblock +'blockip' => 'Ožblokoutė nauduotuoja', +'blockip-legend' => 'Blokoutė nauduotuoja', +'blockiptext' => 'Nauduokėt šėta fuorma noriedamė oždraustė redagavėma teises nuruodīto IP adreso a nauduotuojo. Tas torietu būt atlėikama tam, kū sostabdītomiet vandalėzma, ė vagol [[{{ns:project}}:Puolitėka|puolitėka]]. +Žemiau nuruodīkėt tėkslē prižastė.', +'ipaddress' => 'IP adresos', +'ipadressorusername' => 'IP adresos a nauduotuojė vards', +'ipbexpiry' => 'Galiuojėma čiesos', +'ipbreason' => 'Prīžastis:', +'ipbreasonotherlist' => 'Kėta prīžastis', +'ipbreason-dropdown' => '*Dažniausės bluokavėma prižastīs +** Melagėngas infuormacėjės rašīms +** Torėnė trīnims ėš poslapiu +** Spaminims +** Zaunu/bikuo rašīms i poslapios +** Gondinėmā/Pėktžuodiavėmā +** Pėktnaudžiavėms paskėruomis +** Netėnkams nauduotuojė vards', +'ipbanononly' => 'Blokoutė tėktās anuonimėnius nauduotuojus', +'ipbcreateaccount' => 'Nelaistė kortė paskīrū', +'ipbemailban' => 'Nelaistė nauduotuojō siōstė el. gruomatas', +'ipbenableautoblock' => 'Autuomatėškā blokoutė tuo nauduotuojė paskiausē nauduota IP adresa, ė bikuokius paskesnius IP adresus, ėš katrū ons miegin redagoutė', +'ipbsubmit' => 'Blokoutė šėta nauduotuoja', +'ipbother' => 'Kėtuoks čiesos', +'ipboptions' => '2 adīnas:2 hours,1 dėina:1 day,3 dėinas:3 days,1 nedielė:1 week,2 nedielės:2 weeks,1 mienou:1 month,3 mienesē:3 months,6 mienesē:6 months,1 metā:1 year,omžėms:infinite', +'ipbotheroption' => 'kėta', +'ipbotherreason' => 'Kėta/papėlduoma prižastis', +'ipbwatchuser' => 'Keravuotė tuo nauduotuojė poslapi ėr anuo aptarėma poslapi', +'ipb-change-block' => 'Parblokoutė ta nauduotuoja so šėtās nustatīmās', +'badipaddress' => 'Nelaistėns IP adresos', +'blockipsuccesssub' => 'Ožblokavėms pavīka', +'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] bova ožblokouts. +
    Aplonkīkėt [[Special:IPBlockList|IP blokavėmu istuorėjė]] noriedamė ana parveizėtė.', +'ipb-edit-dropdown' => 'Redagoutė blokavėmu prīžastis', +'ipb-unblock-addr' => 'Atblokoutė $1', +'ipb-unblock' => 'Atblokoutė nauduotuojė varda a IP adresa', +'ipb-blocklist' => 'Ruodītė asontius bluokavėmus', +'ipb-blocklist-contribs' => '$1 duovis', +'unblockip' => 'Atbluokoutė nauduotuoja', +'unblockiptext' => 'Nauduokėt šėta fuorma, kū atkortomiet rašīma teises +onkstiau ožbluokoutam IP adresō a nauduotuojō.', +'ipusubmit' => 'Atblokoutė šėta adresa', +'unblocked' => '[[User:$1|$1]] bova atbluokouts', +'unblocked-id' => 'Bluokavėms $1 bova pašalėnts', +'ipblocklist' => 'Blokoutė IP adresā ė nauduotuojē', +'ipblocklist-legend' => 'Rastė ožblokouta nauduotuoja', +'ipblocklist-username' => 'Nauduotuos a IP adresos:', +'ipblocklist-submit' => 'Ėiškuotė', +'blocklistline' => '$1, $2 ožblokava $3 ($4)', +'infiniteblock' => 'neribuotā', +'expiringblock' => 'beng galiuotė $1 $2', +'anononlyblock' => 'vėn anuonėmā', +'noautoblockblock' => 'autuomatinis blokavėms ėšjongts', +'createaccountblock' => 'paskīrū korėms oždrausts īr', +'emailblock' => 'el. pašts ožblokouts', +'ipblocklist-empty' => 'Blokavėmu sarašos toščias.', +'ipblocklist-no-results' => 'Prašuoms IP adresos a nauduotuojė vards ožblokouts nier.', +'blocklink' => 'ožblokoutė', +'unblocklink' => 'atbluokoutė', +'change-blocklink' => 'keistė bluokavėma nustatīmus', +'contribslink' => 'duovis', +'autoblocker' => 'Autuomatėnis ožbluokavėms, nes dalėnaties IP adreso so nauduotuojo "$1". Prīžastės - "$2".', +'blocklogpage' => 'Ožblokavėmu istuorėjė', +'blocklogentry' => 'ožblokava „[[$1]]“, blokavėma čiesos - $2 $3', +'reblock-logentry' => 'pakeistė [[$1]] bluokavėma nustatīmā, naus bluokavėma čiesos īr $2 $3', +'blocklogtext' => 'Čė īr nauduotuoju blokavėma ėr atblokavėma sārašos. Autuomatėškā blokoutė IP adresā nier ėšvardėntė. Jeigu nuorėt paveizėtė nūnā blokoujamus adresus, veizėkėt [[Special:IPBlockList|IP ožbluokavėmu istuorėjė]].', +'unblocklogentry' => 'atbluokava $1', +'block-log-flags-anononly' => 'vėn anonėmėnē nauduotuojē', +'block-log-flags-nocreate' => 'privėlėju kūrėms ėšjungts', +'block-log-flags-noautoblock' => 'automatėnis blokavėms ėšjungts', +'block-log-flags-noemail' => 'e-pašts bluokouts īr', +'ipb_expiry_invalid' => 'Galiuojėma čiesos nelaistėns.', +'ipb_already_blocked' => '„$1“ jau ožblokouts', +'ipb-needreblock' => '== Jau ožblokouts == +$1 jau īr ožblokouts. A nuorėt pakeistė nustatīmus?', +'proxyblocksuccess' => 'Padarīt.', + +# Developer tools +'unlockdbtext' => 'Atrakėnos doumenū baze grōžėns galimībe vėsėm +nauduotuojam redagoutė poslapios, keistė anū nostatīmos, keistė anū keravuojamu sāraša ė +kėtos dalīkos, rēkalaujontios pakeitėmu doumenū bazė. +Prašuom patvėrtėntė šėtā, kū ketinat padarītė.', +'locknoconfirm' => 'Tamsta neoždiejot patvėrtinėma varnalės.', +'unlockdbsuccesstext' => 'Doumenū bazė bova atrakėnta.', + +# Move page +'move-page' => 'Pervadėntė $1', +'move-page-legend' => 'Poslapė pervadėnims', +'movepagetext' => "Nauduodamė žemiau pateikta fuorma, parvadinsėt poslapi neprarasdamė anuo istuorėjės. +Senasā pavadinėms pataps nukrēpiamouju - ruodīs i naujīji. +Tamsta esat atsakėngs ož šėta, kū nūruodas ruodītu i ten, kor ė nuorieta. + +Primenam, kū poslapis '''nebus''' parvadints, jēgo jau īr poslapis naujo pavadinėmo, nebent tas poslapis īr tuščės a nukreipēmasis ė netor redagavėma istuorėjės. +Tumet, Tamsta galėt parvadintė poslapi seniau nauduota vardu, jēgo priš šėta ons bova par klaida parvadints, a egzėstounantiu poslapiu sogadintė negalėt. + +'''DIEMESĖ!''' +Jēgo parvadinat puopoliaru poslapi, tas gal sokeltė nepagēdaunamu šalotiniu efektu, tudie šėta veiksma vīkdīkit tėk isitėkine, +kū soprantat vėsas pasiekmes.", +'movepagetalktext' => "Sosėits aptarėma poslapis bus autuomatėškā parkelts draugom so ano, '''ėšskīrus:''': +*Poslapis nauju pavadinėmo tor netoštė aptarėma poslapi, a +*Paliksėt žemiau asontė varnale nepažīmieta. +Šėtās atviejās Tamsta sava nužiūra torėt parkeltė a apjongtė aptarėma poslapi.", +'movearticle' => 'Parvadintė poslapi:', +'movenologin' => 'Neprisėjongės', +'movenologintext' => 'Nuoriedamė parvadintė poslapi, torėt būtė ožsėregėstravės nauduotuos ė tēpuogi būtė [[Special:UserLogin|prisėjongės]].', +'newtitle' => 'Naus pavadėnėms:', +'move-watch' => 'Keravuotė šėta poslapi', +'movepagebtn' => 'Parvadintė poslapė', +'pagemovedsub' => 'Parvadinta siekmingā', +'movepage-moved' => '\'\'\'"$1" bova parvadints i "$2"\'\'\'', +'movepage-moved-redirect' => 'Nukreipims bova sokorts.', +'articleexists' => 'Straipsnis so tuokiu vardo jau īr +a parinktāsis vards īr bluogs. +Parinkat kėta varda.', +'talkexists' => "'''Patsā poslapis bova siekmėngā parvadints, no aptarėmu poslapis nabova parkelts, kadongi nauja +pavadėnėma straipsnis jau tor aptarėmu poslapi. +Prašuom sojongtė šėtuos poslapios.'''", +'movedto' => 'parvadints i', +'movetalk' => 'Parkeltė sosėta aptarėma poslapi.', +'1movedto2' => 'Straipsnis [[$1]] parvadints i [[$2]]', +'1movedto2_redir' => '[[$1]] parvadints i [[$2]] (onkstiau bova nukrēpamāsis)', +'movelogpage' => 'Parvardinėmu istuorėjė', +'movelogpagetext' => 'Sārašos parvadintu poslapiu.', +'movereason' => 'Prīžastis:', +'revertmove' => 'atmestė', +'delete_and_move' => 'Ėštrintė ė parkeltė', +'delete_and_move_text' => '==Rēkalings ėštrīnims== +Paskėrties straipsnis „[[:$1]]“ jau īr. A nuorėt ana ėštrintė, kū galietomiet parvadintė?', +'delete_and_move_confirm' => 'Tēp, trintė poslapi', +'delete_and_move_reason' => 'Ėštrinta diel parkielima', +'move-leave-redirect' => 'Parvadėnant paliktė nukreipėma', + +# Export +'export' => 'Ekspuortoutė poslapius', +'exportcuronly' => 'Eksportoutė tėktās dabartėne versėjė, neitraukiant istuorėjės', +'export-submit' => 'Eksportoutė', +'export-addcattext' => 'Pridietė poslapius ėš kateguorėjės:', +'export-addcat' => 'Pridietė', +'export-download' => 'Sauguotė kāp faila', + +# Namespace 8 related +'allmessages' => 'Vėsė sėstemas tekstā ė pranešėmā', +'allmessagesname' => 'Pavadėnėms', +'allmessagesdefault' => 'Pradėnis teksts', +'allmessagescurrent' => 'Dabartėnis teksts', +'allmessagestext' => 'Čė pateikamė sėstemėniu pranešėmu sārašos, esontis MediaWiki srėtie.', +'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' nepalaikuoms īr, nes nustatīms '''\$wgUseDatabaseMessages''' ėšjungts īr.", + +# Thumbnails +'thumbnail-more' => 'Padėdintė', +'thumbnail_error' => 'Klaida koriant somažėnta pavēkslieli: $1', +'thumbnail_invalid_params' => 'Nalaistieni miniatiūras parametrā', +'thumbnail_dest_directory' => 'Nepavīkst sokortė paskėrtėis papkes', + +# Special:Import +'import' => 'Importoutė poslapius', +'import-revision-count' => '$1 {{PLURAL:$1|versėjė|versėjės|versėju}}', + +# Import log +'importlogpage' => 'Impuorta istuorėjė', +'import-logentry-upload-detail' => '$1 {{PLURAL:$1|keitims|keitimā|keitimu}}', +'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|keitims|keitimā|keitimu}} ėš $2', + +# Tooltip help for the actions +'tooltip-pt-userpage' => 'Tamstas nauduotuojė poslapis', +'tooltip-pt-anonuserpage' => 'Nauduotuojė poslapis Tamstas IP adresō', +'tooltip-pt-mytalk' => 'Tamstas aptarėma poslapis', +'tooltip-pt-preferences' => 'Mona nostatīmā', +'tooltip-pt-watchlist' => 'Poslapiu sārašos, katrūs Tamsta pasėrėnkuot keravuotė.', +'tooltip-pt-mycontris' => 'Tamstas darītu keitimu sārašos', +'tooltip-pt-login' => 'Rekuomendoujam prėsėjongtė, nuors tas nėr privaluoma.', +'tooltip-pt-logout' => 'Atsėjongtė', +'tooltip-ca-talk' => 'Poslapė torėnė aptarėms', +'tooltip-ca-edit' => 'Tamsta galėt keistė ta poslapi. Nepamėrškėt paspaustė parvaizuos mīgtoka priš ėšsauguodamė.', +'tooltip-ca-addsection' => 'Pradietė nauja skīriu', +'tooltip-ca-viewsource' => 'Poslapis īr ožrakints. Galėt parveizėt torini.', +'tooltip-ca-history' => 'Unkstesnės poslapė versėjės.', +'tooltip-ca-protect' => 'Ožrakintė šėta poslapi', +'tooltip-ca-delete' => 'Trėntė ta poslapi', +'tooltip-ca-move' => 'Parvadėntė poslapi', +'tooltip-ca-watch' => 'Pridietė poslapi i keravuojamu sāraša', +'tooltip-ca-unwatch' => 'Pašalėntė poslapi ėš keravuojamu sāraša', +'tooltip-search' => 'Ėiškuotė šėtom pruojektė', +'tooltip-search-go' => 'Ētė i poslapi su tuokiu pavadėnėmu jēgo tuoks īr', +'tooltip-search-fulltext' => 'Ėiškuotė poslapiu so tuokiu tekstu', +'tooltip-p-logo' => 'Pėrms poslapis', +'tooltip-n-mainpage' => 'Aplonkītė pėrma poslapi', +'tooltip-n-mainpage-description' => 'Ētė i pėrma poslapi', +'tooltip-n-portal' => 'Aple pruojekta, ka galėma vēktė, kamė ka rastė', +'tooltip-n-currentevents' => 'Raskėt naujausė infuormacėjė', +'tooltip-n-recentchanges' => 'Vielībūju pakeitėmu sārašos tamė projektė.', +'tooltip-n-randompage' => 'Atidarītė bikuoki straipsni', +'tooltip-n-help' => 'Vėita, katruo rasėt rūpėmus atsakīmus.', +'tooltip-t-whatlinkshere' => 'Poslapiu sārašos, ruodantiu i čė', +'tooltip-t-recentchangeslinked' => 'Paskotėnē pakeitėmā straipsnious, pasėikiamous ėš šėta straipsnė', +'tooltip-feed-rss' => 'Šėta poslapė RSS šaltėnis', +'tooltip-feed-atom' => 'Šėta poslapė Atom šaltėnis', +'tooltip-t-contributions' => 'Ruodītė šėta nauduotuojė keitėmu sāraša', +'tooltip-t-emailuser' => 'Siōstė gromata šėtom prietėliō', +'tooltip-t-upload' => 'Idietė abruozdielios a medėjės failos', +'tooltip-t-specialpages' => 'Specēliūju poslapiu sārašos', +'tooltip-t-print' => 'Šėta poslapė versėjė spausdėnėmō', +'tooltip-t-permalink' => 'Vėslaikėnė nūruoda i šėta poslapė versėje', +'tooltip-ca-nstab-main' => 'Ruodītė poslapė torėni', +'tooltip-ca-nstab-user' => 'Ruodītė nauduotuojė poslapi', +'tooltip-ca-nstab-special' => 'Šėts poslapis īr specēlosis - anuo nagalėm redagoutė.', +'tooltip-ca-nstab-project' => 'Ruodītė pruojekta poslapi', +'tooltip-ca-nstab-image' => 'Ruodītė abruozdielė poslapi', +'tooltip-ca-nstab-template' => 'Ruodītė šabluona', +'tooltip-ca-nstab-help' => 'Ruodītė pagelbas poslapi', +'tooltip-ca-nstab-category' => 'Ruodītė kateguorėjės poslapi', +'tooltip-minoredit' => 'Pažīmietė pakeitėma kāp maža', +'tooltip-save' => 'Ėšsauguotė pakeitėmos', +'tooltip-preview' => 'Pakeitėmu parveiza, prašuom parveizėt priš ėšsaugont!', +'tooltip-diff' => 'Ruod, kuokios pakeitėmos padariet tekste.', +'tooltip-compareselectedversions' => 'Veizėtė abodvėju pasėrėnktū poslapė versėju skėrtomos.', +'tooltip-watch' => 'Pridietė šėta poslapi i keravuojamu sāraša', +'tooltip-recreate' => 'Atkortė poslapi napaisant šėto, kū ans bova ėštrints', +'tooltip-rollback' => 'Atšauktė atmestus šėta poslapė keitėmus i vielībiause versėje par vėina paspaudėma', +'tooltip-undo' => '"Anolioutė" atmeta ta keitėma ėr atidara unkstesnies versėjės redagavėma skvarma. Leid pridietė atmetėma prīžasti kuomentarūsė.', + +# Attribution +'anonymous' => 'Neregėstrouts nauduotuos', +'siteuser' => '{{SITENAME}} nauduotuos $1', +'lastmodifiedatby' => 'Šėta poslapi paskotini karta redagava $3 $2, $1.', +'others' => 'kėtė', +'siteusers' => '{{SITENAME}} {{PLURAL:$2|nauduotuos|nauduotuojē}} $1', +'creditspage' => 'Poslapė kūriejē', + +# Spam protection +'spamprotectiontitle' => 'Prišreklamėnis fėltros', +'spamprotectiontext' => 'Poslapis, katra nuoriejot ėšsauguotė bova ožblokouts prišreklamėnė fėltra. Šėtā tėkriausē sokielė nūruoda i kėta svetaine. Ėšėmkit nūruoda ė pamieginkėt viel.', +'spamprotectionmatch' => 'Šėts tekstos bova atpažėnts prišreklamėnė fėltra: $1', +'spambot_username' => "''MediaWiki'' reklamu šalėnėms", +'spam_reverting' => 'Atkoriama i onkstesne versėje, katra nator nūruodu i $1', +'spam_blanking' => 'Vėsos versėjės toriejė nūruodu i $1. Ėšvaluoma', + +# Info page +'numedits' => 'Pakeitimu skaitlius (straipsnis): $1', +'numtalkedits' => 'Pakeitėmu skaitlius (aptarėma poslapis): $1', +'numwatchers' => 'Keravuojantiu skaitlius: $1', + +# Math options +'mw_math_png' => 'Vėsumet fuormuotė PNG', +'mw_math_simple' => 'HTML paprastās atvejās, kėtēp - PNG', +'mw_math_html' => 'HTML kumet imanuoma, kėtēp - PNG', +'mw_math_source' => 'Paliktė TeX fuormata (tekstinems naršīklems)', +'mw_math_modern' => 'Rekomendounama muodernioms naršīklems', +'mw_math_mathml' => 'MathML jēgo imanuoma (ekspermentinis)', + +# Math errors +'math_failure' => 'Nepavīka apdoruotė', +'math_unknown_error' => 'nežinuoma klaida', +'math_unknown_function' => 'nežinuoma funkcėjė', + +# Patrolling +'markaspatrolleddiff' => 'Žīmietė, kū patikrėnta', +'markaspatrolledtext' => 'Pažīmietė, ka poslapis patėkrėnts īr', +'markedaspatrolled' => 'Pažīmiets kāp patėkrints', +'markedaspatrolledtext' => 'Pasėrinkta versėjė siekmingā pažīmieta kāp patėkrinta', + +# Patrol log +'patrol-log-page' => 'Patikrinėma istuorėjė', +'patrol-log-line' => 'Poslapė „$2“ $1 pažīmieta kāp patėkrinta $3', +'patrol-log-auto' => '(autuomatėškā)', +'patrol-log-diff' => 'versėjė $1', +'log-show-hide-patrol' => '$1 patvirtėnėmu saraša', + +# Image deletion +'deletedrevision' => 'Ėštrinta sena versėjė $1.', +'filedeleteerror-short' => 'Klaida trėnont faila: $1', + +# Browsing diffs +'previousdiff' => '← Onkstesnis pakeitėms', +'nextdiff' => 'Paskesinis pakeitėms →', + +# Media information +'mediawarning' => "'''Diemesė''': Šėts fails gal torietė kenksmėnga kuoda, anū palaidus Tamstas sėstėma gal būtė sogadinta.", +'imagemaxsize' => 'Rėbuotė abruozdieliu dėdoma anū aprašīma poslapī lėgė:', +'thumbsize' => 'Somažėntu pavēkslieliu didums:', +'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|poslapis|poslapē|poslapiu}}', +'file-info' => 'faila dėdoms: $1, MIME tips: $2', +'file-info-size' => '$1 × $2 taškū, faila dėdoms: $3, MIME tips: $4', +'file-nohires' => 'Geresnis ėšraiškėms negalėms.', +'svg-long-desc' => 'SVG fails, fuormalē $1 × $2 puškiu, faila dėdoms: $3', +'show-big-image' => 'Pėlns ėšraiškėms', +'show-big-image-thumb' => 'Šėtuos parvaizos dėdums: $1 × $2 puškiu', + +# Special:NewFiles +'newimages' => 'Naujausiu abruozdieliu galerėjė', +'imagelisttext' => "Žemiau īr '''$1''' failu sārašos, sorūšiouts $2.", +'newimages-label' => 'Faila vards (ar anuo dalis):', +'showhidebots' => '($1 robotos)', +'ilsubmit' => 'Ėiškoutė', +'bydate' => 'palē data', +'sp-newimages-showfrom' => 'Ruodītė naujus abruozdielius pradedant nū $2, $1', + +# Bad image list +'bad_image_list' => 'Fuormats tuoks īr: + +Tėk eilotės, prasėdedantės *, īr itraukiamas. Pėrmuojė nūruoda eilotie tor būtė nūruoda i bluoga abruozdieli. +Vėsas kėtas nūoruodas tuo patiuo eilotie īr laikomas ėšėmtim, tas rēšk ka poslapē, katrūs leidama iterptė abruozdieli.', + +# Metadata +'metadata' => 'Metadoumenīs', +'metadata-help' => 'Šėtom failė īr papėlduomos infuormacėjės, tikriausē pridietos skaitmeninės kameruos a skanėrė, katros bova nauduots anam sokortė a parkeltė i skaitmenėni fuormata. Jēgo fails bova pakeists ėš pradėnės versėjės, katruos nekatruos datalės gal nepėlnā atspėndietė nauja faila.', +'metadata-expand' => 'Ruodītė ėšpliestinė infuormacėjė', +'metadata-collapse' => 'Kavuotė ėšpliestinė infuormacėjė', +'metadata-fields' => 'EXIF metadoumenū laukā, nuruodītė tamė pranešėmė, bus itrauktė i abruozdielė poslapi, kumet metadoumenū lentelė bus suskleista. Palē nutīliejėma kėtė laukā bus pakavuotė. +* make +* model +* datetimeoriginal +* exposuretime +* fnumber +* isospeedratings +* focallength', + +# EXIF tags +'exif-imagewidth' => 'Platoms', +'exif-imagelength' => 'Aukštoms', +'exif-orientation' => 'Pasokims', +'exif-xresolution' => 'Gorizuontalus ėšraiškėms', +'exif-datetime' => 'Faila keitėma data ė čiesos', +'exif-imagedescription' => 'Abruozdielė pavadėnėms', +'exif-make' => 'Kameras gamėntuos', +'exif-model' => 'Kameras muodelis', +'exif-colorspace' => 'Spalvū pristatīms', +'exif-compressedbitsperpixel' => 'Abruozdielė sospaudėma rėžėms', +'exif-datetimeoriginal' => 'Doumenū generavėma data ė čiesos', +'exif-exposuretime' => 'Ėšlaikīma čiesos', +'exif-fnumber' => 'F skaitlius', +'exif-brightnessvalue' => 'Švėisoms', +'exif-lightsource' => 'Švėisuos šaltėnis', +'exif-flash' => 'Blėcos', +'exif-focallength' => 'Žėdinė nutuolėms', +'exif-flashenergy' => 'Blėca energėjė', +'exif-contrast' => 'Kuontrasts', + +'exif-orientation-1' => 'Standartėšks', + +'exif-xyresolution-i' => '$1 puškē cuolī', +'exif-xyresolution-c' => '$1 puškē centėmetrė', + +'exif-componentsconfiguration-0' => 'nēsa', + +'exif-exposureprogram-0' => 'Nenūruodīta', + +'exif-contrast-0' => 'Paprasts', +'exif-contrast-1' => 'Mažos', +'exif-contrast-2' => 'Dėdlis', + +# External editor support +'edit-externally' => 'Atdarītė ėšuoriniam redaktuorio', +'edit-externally-help' => 'Nuoriedamė gautė daugiau infuormacėjės, veiziekėt [http://www.mediawiki.org/wiki/Manual:External_editors kruovėma instrokcėjės].', + +# 'all' in various places, this might be different for inflected languages +'recentchangesall' => 'vėsos', +'imagelistall' => 'vėsė', +'watchlistall2' => 'vėsos', +'namespacesall' => 'vėsas', +'monthsall' => 'vėsė', + +# E-mail address confirmation +'confirmemail' => 'Patvirtėnkėt el. pašta adresa', +'confirmemail_noemail' => 'Tamsta netorėt nuruodės teisėnga el. pašta adresa [[Special:Preferences|sava nustatīmūs]].', +'confirmemail_text' => 'Šėtom pruojektė īr rēkalėnga patvirtėntė el. pašta adresa prīš nauduojont el. pašta funkcėjės. Spauskėt žemiau esonti mīgtoka, +kū Tamstas el. pašta adresu būtom ėšsiōsts patvirtėnėma kods. +Gruomatuo bus atsiōsta nūruoda so kodu, katra nuējus, el. pašta adresos bus patvirtėnts.', +'confirmemail_send' => 'Ėšsiōstė patvirtėnėma koda', +'confirmemail_sent' => 'Patvirtėnėma gruomata ėšsiōsta.', +'confirmemail_needlogin' => 'Tamstā rēk $1, kū patvirtėntomiet sava el. pašta adresa.', +'confirmemail_loggedin' => 'Tamstas el. pašta adresos ožtvėrtints īr.', +'confirmemail_body' => 'Kažėnkas, mosiet Tamsta IP adreso $1, ožregėstrava +paskīra „$2“ sosėita so šėtuom el. pašta adresu pruojektė {{SITENAME}}. + +Kū patvirtėntomiet, kū ta diežotė ėš tėkrā prėklausa Tamstā, ėr aktīvoutomiet +el. pašta puoslaugi pruojėktė {{SITENAME}}, atdarīkiet ta nūruoda sava naršīklie: + +$3 + +Jēgo paskīra regėstravuot *ne* Tamsta, tumet ēkėt ta nūruoda, +kū atšauktomiet el. pašta adresa patvirtėnėma: + +$5 + +Patvirtėnėma kods bengs galiuotė $4.', +'invalidateemail' => 'El. pašta patvirtėnėma atšaukėms', + +# Trackbacks +'trackbackremove' => '([$1 Trintė])', + +# Delete conflict +'deletedwhileediting' => 'Diemesė: Šėts poslapis ėštrints po šėta, kumet pradiejot redagoutė!', +'recreate' => 'Atkortė', + +# action=purge +'confirm_purge_button' => 'Tink', + +# Multipage image navigation +'imgmultipageprev' => '← unkstesnis poslapis', +'imgmultipagenext' => 'kėts poslapis →', +'imgmultigo' => 'Ētė!', +'imgmultigoto' => 'Ētė i poslapi $1', + +# Table pager +'ascending_abbrev' => 'dėdiejėma tvarka', +'descending_abbrev' => 'mažiejontė tvarka', +'table_pager_next' => 'Kėts poslapis', +'table_pager_prev' => 'Onkstesnis poslapis', +'table_pager_first' => 'Pėrms poslapis', +'table_pager_last' => 'Paskotėnis poslapis', +'table_pager_limit' => 'Ruodītė $1 elementu par poslapi', +'table_pager_limit_submit' => 'Ruodītė', +'table_pager_empty' => 'Juokiū rezoltatu', + +# Auto-summaries +'autosumm-blank' => 'Šalėnams ciels torėnīs ėš poslapė', +'autosumm-replace' => "Poslapis keitams so '$1'", +'autoredircomment' => 'Nukreipama i [[$1]]', +'autosumm-new' => 'Naus poslapis: $1', + +# Live preview +'livepreview-loading' => 'Kraunama īr…', +'livepreview-ready' => 'Ikeliama… Padarīta!', + +# Friendlier slave lag warnings +'lag-warn-normal' => 'Pakeitėmā, naujesnė kāp $1 {{PLURAL:$1|sekondė|sekondės|sekondiu}}, tamė sārašė gal būtė neruodomė.', +'lag-warn-high' => 'Dielē dėdlė doumenū bazės pasėlikėma pakeitėmā, naujesnė nēgo $1 {{PLURAL:$1|sekondė|sekondės|sekondiu}}, tamė sarašė gal būtė neruodomė.', + +# Watchlist editor +'watchlistedit-numitems' => 'Tamstas keravuojamu sārašė īr $1 poslapiu neskaitliuojant aptarėmu poslapiu.', +'watchlistedit-noitems' => 'Tamstas keravuojamu sārašė nė juokiū poslapiu.', +'watchlistedit-normal-title' => 'Keistė keravuojamu sāroša', +'watchlistedit-normal-legend' => 'Šalėntė poslapios ėš keravuojamu sāraša', +'watchlistedit-normal-explain' => 'Žemiau īr ruodomė poslapē Tamstas keravuojamu sārašė. +Nuoriedamė pašalėntė poslapi, pri anuo oždiekėt varnale ė paspauskėt „Šalėntė poslapios“. +Tamsta tēpuogi galėt [[Special:Watchlist/raw|redagoutė grīnaji keravuojamu sāraša]].', +'watchlistedit-normal-submit' => 'Šalėntė poslapios', +'watchlistedit-normal-done' => '$1 {{PLURAL:$1|poslapis bova pašalėnts|poslapē bova pašalėntė|poslapiu bova pašalėnta}} ėš Tamstas keravuojamu saraša:', +'watchlistedit-raw-title' => 'Keistė grīnōjė keravuojamu sāraša', +'watchlistedit-raw-legend' => 'Keistė grīnōjė keravuojamu sāraša', +'watchlistedit-raw-explain' => 'Žemiau ruodomė poslapē Tamstas keravuojamu sārašė, ė gal būtė pridietė i a pašalėntė ėš sāraša; vėins poslapis eilotie. Bėngė paspauskėt „Atnaujėntė keravuojamu sāraša“. Tamsta tēpuogi galėt [[Special:Watchlist/edit|nauduotė standartėni radaktuoriu]].', +'watchlistedit-raw-titles' => 'Poslapē:', +'watchlistedit-raw-submit' => 'Atnaujėntė keravuojamu sāraša', +'watchlistedit-raw-done' => 'Tamstas keravuojamu sārošos bova atnaujėnts.', +'watchlistedit-raw-added' => '$1 {{PLURAL:$1|poslapis bova pridiets|poslapē bova pridietė|poslapiu bova pridieta}}:', +'watchlistedit-raw-removed' => '$1 {{PLURAL:$1|poslapis bova pašalėnts|poslapē bova pašalėntė|poslapiu bova pašalėnta}}:', + +# Watchlist editing tools +'watchlisttools-view' => 'Veizietė sosėjosius pakeitėmus', +'watchlisttools-edit' => 'Veizietė ėr keistė keravuojamu straipsniu sāraša', +'watchlisttools-raw' => 'Keistė nebėngta keravuojamu straipsniu sāraša', + +# Special:Version +'version' => 'Versėjė', +'version-license' => 'Licenzėjė', + +# Special:FilePath +'filepath' => 'Faila maršrots', +'filepath-page' => 'Fails:', + +# Special:FileDuplicateSearch +'fileduplicatesearch' => 'Ėiškuotė doblikoutu failu', +'fileduplicatesearch-legend' => 'Ėiškuotė doblėkatu', +'fileduplicatesearch-filename' => 'Faila vards:', +'fileduplicatesearch-submit' => 'Ėiškuotė', +'fileduplicatesearch-info' => '$1 × $2 pėkseliu
    Faila dėdoms: $3
    MIME tėps: $4', + +# Special:SpecialPages +'specialpages' => 'Specēlė̅jė poslapē', +'specialpages-note' => '---- +* Normalūs specēlė̅jė puslapē. +* Apribuotė specēlė̅jė puslapē.', +'specialpages-group-maintenance' => 'Sėstemas palaikīma pranešėmā', +'specialpages-group-other' => 'Kėtė specēlė̅jė poslapē', +'specialpages-group-login' => 'Prisėjongėms / Registracėjė', +'specialpages-group-changes' => 'Vielībiė̅ jė pakeitėmā ė regėstrā', +'specialpages-group-media' => 'Infuormacėjė aple failus ėr anū pakruovėms', +'specialpages-group-users' => 'Nauduotuojē ė teisės', +'specialpages-group-highuse' => 'Platē nauduojamė poslapē', +'specialpages-group-pages' => 'Poslapiu sarašas', +'specialpages-group-pagetools' => 'Poslapiu rakondā', +'specialpages-group-wiki' => 'Wiki doumenīs ė rakondā', +'specialpages-group-redirects' => 'Specēlė̅jė nukreipėma poslapē', +'specialpages-group-spam' => 'Šlamšta valdīma rakondā', + +# Special:BlankPage +'blankpage' => 'Toščias poslapis', + +# Special:Tags +'tags-edit' => 'taisītė', + +); diff --git a/languages/messages/MessagesSh.php b/languages/messages/MessagesSh.php index 54863482..2c80150a 100644 --- a/languages/messages/MessagesSh.php +++ b/languages/messages/MessagesSh.php @@ -12,16 +12,22 @@ */ $namespaceNames = array( + NS_TALK => 'Razgovor', NS_USER => 'Korisnik', NS_USER_TALK => 'Razgovor_sa_korisnikom', + NS_PROJECT_TALK => 'Razgovor_o_$1', NS_FILE => 'Datoteka', NS_FILE_TALK => 'Razgovor_o_datoteci', NS_TEMPLATE => 'Šablon', NS_TEMPLATE_TALK => 'Razgovor_o_šablonu', + NS_HELP => 'Pomoć', + NS_HELP_TALK => 'Razgovor_o_pomoći', NS_CATEGORY => 'Kategorija', NS_CATEGORY_TALK => 'Razgovor_o_kategoriji', ); +$linkTrail = '/^([a-zčćđžš]+)(.*)$/sDu'; + $messages = array( # User preference toggles 'tog-underline' => 'Podvuci linkove:', @@ -38,8 +44,7 @@ $messages = array( 'tog-editsection' => 'Omogući uređivanje sekcija preko [uredi] linkova', 'tog-editsectiononrightclick' => 'Uključite uređivanje odjeljka sa pritiskom na desno dugme miša u naslovu odjeljka (JavaScript)', 'tog-showtoc' => 'Prikaži sadržaj (u svim stranicama sa više od tri podnaslova)', -'tog-rememberpassword' => 'Upamti moju lozinku na ovom kompjuteru za buduće posjete', -'tog-editwidth' => 'Proširi kutiju za uređivanje da ispuni cijeli ekran', +'tog-rememberpassword' => 'Upamti moju prijavu za ovaj preglednik (za maksimum od $1 {{PLURAL:$1|dan|dana}})', 'tog-watchcreations' => 'Dodaj stranice koje sam napravio u moj spisak praćenja', 'tog-watchdefault' => 'Dodaj stranice koje uređujem u moj spisak praćenja', 'tog-watchmoves' => 'Dodaj stranice koje premještam u moj spisak praćenja', @@ -183,31 +188,21 @@ $messages = array( 'faqpage' => 'Project:ČPP', # Vector skin -'vector-action-addsection' => 'Dodaj temu', -'vector-action-delete' => 'Brisanje', -'vector-action-move' => 'Preusmjeri', -'vector-action-protect' => 'Zaštiti', -'vector-action-undelete' => 'Vrati obrisano', -'vector-action-unprotect' => 'Oslobodi od zaštite', -'vector-namespace-category' => 'Kategorija', -'vector-namespace-help' => 'Stranica pomoći', -'vector-namespace-image' => 'Datoteka', -'vector-namespace-main' => 'Stranica', -'vector-namespace-media' => 'Medijska stranica', -'vector-namespace-mediawiki' => 'Poruka', -'vector-namespace-project' => 'Stranica projekta', -'vector-namespace-special' => 'Posebna stranica', -'vector-namespace-talk' => 'Razgovor', -'vector-namespace-template' => 'Šablon', -'vector-namespace-user' => 'Korisnička stranica', -'vector-view-create' => 'Napravi', -'vector-view-edit' => 'Uredi', -'vector-view-history' => 'Pregled historije', -'vector-view-view' => 'Čitaj', -'vector-view-viewsource' => 'Vidi izvor (source)', -'actions' => 'Akcije', -'namespaces' => 'Imenski prostori', -'variants' => 'Varijante', +'vector-action-addsection' => 'Dodaj temu', +'vector-action-delete' => 'Brisanje', +'vector-action-move' => 'Preusmjeri', +'vector-action-protect' => 'Zaštiti', +'vector-action-undelete' => 'Vrati obrisano', +'vector-action-unprotect' => 'Oslobodi od zaštite', +'vector-simplesearch-preference' => 'Omogući napredne sugestije pretrage (samo vector skin)', +'vector-view-create' => 'Napravi', +'vector-view-edit' => 'Uredi', +'vector-view-history' => 'Pregled historije', +'vector-view-view' => 'Čitaj', +'vector-view-viewsource' => 'Vidi izvor (source)', +'actions' => 'Akcije', +'namespaces' => 'Imenski prostori', +'variants' => 'Varijante', 'errorpagetitle' => 'Greška', 'returnto' => 'Povratak na $1.', @@ -268,6 +263,9 @@ Previše korisnika pokušava da pregleda ovu stranicu. Molimo pričekajte trenutak prije nego što ponovno pokušate pristupiti ovoj stranici. $1', +'pool-timeout' => 'Zaustavi čekanje za zaključavanje', +'pool-queuefull' => 'Red na pool je prenapunjen', +'pool-errorunknown' => 'nepoznata greška', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'O projektu {{SITENAME}}', @@ -434,7 +432,8 @@ Ne zaboravite izmijeniti vlastite [[Special:Preferences|{{SITENAME}} postavke]]. 'yourname' => 'Korisničko ime:', 'yourpassword' => 'Lozinka/zaporka:', 'yourpasswordagain' => 'Ponovno utipkajte lozinku/zaporku:', -'remembermypassword' => 'Upamti moju lozinku na ovom kompjuteru za buduće posjete', +'remembermypassword' => 'Upamti moju lozinku na ovom kompjuteru (za maksimum od $1 {{PLURAL:$1|dan|dana}})', +'securelogin-stick-https' => 'Ostanite povezani na HTTPS nakon prijave', 'yourdomainname' => 'Vaš domen:', 'externaldberror' => 'Došlo je do greške pri vanjskoj autorizaciji baze podataka ili vam nije dopušteno osvježavanje Vašeg vanjskog korisničkog računa.', 'login' => 'Prijavi se', @@ -451,6 +450,7 @@ Ne zaboravite izmijeniti vlastite [[Special:Preferences|{{SITENAME}} postavke]]. 'gotaccount' => "Imate račun? '''$1'''.", 'gotaccountlink' => 'Prijavi se', 'createaccountmail' => 'e-mailom', +'createaccountreason' => 'Razlog:', 'badretype' => 'Lozinke koje ste unijeli se ne poklapaju.', 'userexists' => 'Korisničko ime koje ste unijeli je već u upotrebi. Molimo Vas da izaberete drugo ime.', @@ -479,6 +479,7 @@ Molimo Vas da pokušate ponovno.', Molimo Vas da pokušate ponovno.', 'passwordtooshort' => 'Lozinka mora imati najmanje {{PLURAL:$1|1 znak|$1 znakova}}.', 'password-name-match' => 'Vaša lozinka mora biti različita od Vašeg korisničkog imena.', +'password-login-forbidden' => 'Korištenje ovog korisničkog imena i lozinke je zabranjeo.', 'mailmypassword' => 'Pošalji mi novu lozinku putem E-maila', 'passwordremindertitle' => 'Nova privremena lozinka za {{SITENAME}}', 'passwordremindertext' => 'Neko (vjerovatno Vi, sa IP adrese $1) je zahtjevao da vam pošaljemo novu šifru za {{SITENAME}} ($4). Privremena šifra za korisnika "$2" je napravljena i glasi "$3". Ako ste to željeli, sad treba da se prijavite i promjenite šifru. @@ -517,6 +518,9 @@ Molimo Vas da sačekate prije nego što pokušate ponovo.', 'loginlanguagelabel' => 'Jezik: $1', 'suspicious-userlogout' => 'Vaš zahtjev za odjavu je odbijen jer je poslan preko pokvarenog preglednika ili keširanog proksija.', +# E-mail sending +'php-mail-error-unknown' => 'Nepoznata greška u PHP funkciji mail()', + # Password reset dialog 'resetpass' => 'Promijeni korisničku šifru', 'resetpass_announce' => 'Prijavili ste se sa privremenim kodom koji ste dobili na e-mail. @@ -567,11 +571,12 @@ Možda ste već uspješno promijenili Vašu lozinku ili ste tražili novu privre 'showdiff' => 'Prikaži izmjene', 'anoneditwarning' => "'''Upozorenje:''' Niste prijavljeni. Vaša IP adresa će biti zabilježena u historiji ove stranice.", +'anonpreviewwarning' => "''Niste prijavljeni. Vaša IP adresa će biti zabilježena u historiji ove stranice.''", 'missingsummary' => "'''Podsjećanje:''' Niste unijeli sažetak izmjene. Ako kliknete na Sačuvaj/Snimi, Vaša izmjena će biti snimljena bez sažetka.", 'missingcommenttext' => 'Molimo unesite komentar ispod.', 'missingcommentheader' => "'''Podsjetnik:''' Niste napisali temu/naslov za ovaj komentar. -Ako ponovo kliknete na '''Snimi stranicu''', Vaše izmjene će biti snimljene bez teme/naslova.", +Ako ponovo kliknete na '''{{int:savearticle}}''', Vaše izmjene će biti snimljene bez teme/naslova.", 'summary-preview' => 'Pretpregled sažetka:', 'subject-preview' => 'Pretpregled teme/naslova:', 'blockedtitle' => 'Korisnik je blokiran', @@ -651,8 +656,12 @@ Posljednje stavke evidencije blokiranja možete pogledati ispod:', '''Još uvijek nije snimljen!'''", 'userjspreview' => "'''Zapamite da je ovo samo test/pretpregled Vaše JavaScript-e.''' '''Još uvijek nije snimljena!'''", +'sitecsspreview' => "'''Zapamtite ovo je samo izgled Vašeg CSS-a.''' +'''Još uvijek nije snimljen!'''", +'sitejspreview' => "'''Zapamtite ovo je samo izgled ovog koda JavaScripte.''' +'''Još uvijek nije snimljen!'''", 'userinvalidcssjstitle' => "'''Upozorenje:''' Ne postoji interfejs (skin) pod imenom \"\$1\". -Ne zaboravite da imena stranica s .css i .js kodom počinju malim slovom, npr. {{ns:user}}:Foo/monobook.css, a ne {{ns:user}}:Foo/Monobook.css.", +Ne zaboravite da imena stranica s .css i .js kodom počinju malim slovom, npr. {{ns:user}}:Foo/vector.css, a ne {{ns:user}}:Foo/Vector.css.", 'updated' => '(Osvježeno)', 'note' => "'''Napomena:'''", 'previewnote' => "'''Upamtite da je ovo samo pretpregled.''' @@ -691,9 +700,6 @@ Također obećavate kako ste ga napisali sami ili kopirali iz izvora u javnoj do 'copyrightwarning2' => "Zapamtite da svaki doprinos na stranici {{SITENAME}} može biti izmijenjen, promijenjen ili uklonjen od strane ostalih korisnika. Ako ne želite da ovo desi sa Vašim tekstom, onda ga nemojte slati ovdje.
    Također nam garantujete da ste ovo Vi napisali, ili da ste ga kopirali iz javne domene ili sličnog slobodnog izvora informacija (pogledajte $1 za više detalja). '''NE ŠALJITE DJELA ZAŠTIĆENA AUTORSKIM PRAVOM BEZ DOZVOLE!'''", -'longpagewarning' => "'''PAŽNJA''': Ova stranica ima $1 kilobajta; -neki preglednici mogu imati problema kad uređujete stranice skoro ili veće od 32 kilobajta. -Molimo Vas da razmotrite razbijanje stranice na manje dijelove.", 'longpageerror' => "'''Greška: Tekst, koji ste poslali, je dug $1 kilobajta, što je veće od maksimuma, koji iznosi $2 kilobajta. Stranica ne može biti spremljena.'''", 'readonlywarning' => "'''PAŽNJA: Baza je zaključana zbog održavanja, tako da nećete moći da snimite svoje izmjene za sada. @@ -873,6 +879,8 @@ $1", 'logdelete-failure' => "'''Registar vidljivosti nije mogao biti postavljen:''' $1", 'revdel-restore' => 'promijeni dostupnost', +'revdel-restore-deleted' => 'izbrisane izmjene', +'revdel-restore-visible' => 'vidljive izmjene', 'pagehist' => 'Historija stranice', 'deletedhist' => 'Izbrisana historija', 'revdelete-content' => 'sadržaj', @@ -941,11 +949,13 @@ Korištenje navigacionih linkova će resetovati ovaj stupac.', # Diffs 'history-title' => 'Historija izmjena stranice "$1"', 'difference' => '(Razlika između revizija)', +'difference-multipage' => '(Razlika između stranica)', 'lineno' => 'Linija $1:', 'compareselectedversions' => 'Uporedite označene verzije', 'showhideselectedversions' => 'Pokaži/sakrij odabrane verzije', 'editundo' => 'ukloni ovu izmjenu', -'diff-multi' => '({{plural:$1|Nije prikazana jedna međuverzija|Nisu prikazane $1 međuverzije|Nije prikazano $1 međuverzija}})', +'diff-multi' => '({{PLURAL:$1|Nije prikazana jedna međuverzija|Nisu prikazane $1 međuverzije|Nije prikazano $1 međuverzija}}) od strane {{PLURAL:$2|korisnika|korisnika}}', +'diff-multi-manyusers' => '({{PLURAL:$1|Nije prikazana jedna međuverzija|Nisu prikazane $1 međuverzije|Nije prikazano $1 međuverzija}}) od strane {{PLURAL:$2|korisnika|korisnika}}', # Search results 'searchresults' => 'Rezultati pretrage', @@ -980,6 +990,7 @@ Korištenje navigacionih linkova će resetovati ovaj stupac.', 'searchprofile-everything-tooltip' => 'Pretraži sve sadržaje (ukljujući i stranice za razgovor)', 'searchprofile-advanced-tooltip' => 'Traži u ostalim imenskim prostorima', 'search-result-size' => '$1 ({{PLURAL:$2|1 riječ|$2 riječi}})', +'search-result-category-size' => '{{PLURAL:$1|1 član|$1 člana|$1 članova}} ({{PLURAL:$2|1 podkategorija|$2 podkategorije|$2 podkategorija}}, {{PLURAL:$3|1 datoteka|$3 datoteke|$3 datoteka}})', 'search-result-score' => 'Relevantnost: $1%', 'search-redirect' => '(preusmjeravanje $1)', 'search-section' => '(sekcija $1)', @@ -1057,6 +1068,7 @@ Uzmite u obzir da njegovi indeksi za ovu Wiki ne moraju biti ažurirani.', 'contextlines' => 'Linija po pogotku:', 'contextchars' => 'Karaktera konteksta po liniji:', 'stub-threshold' => 'Formatiranje linkova stranica u začetku (bajtova):', +'stub-threshold-disabled' => 'Isključen/a', 'recentchangesdays' => 'Broj dana za prikaz u nedavnim izmjenama:', 'recentchangesdays-max' => '(najviše $1 {{PLURAL:$1|dan|dana}})', 'recentchangescount' => 'Broj uređivanja za prikaz po pretpostavkama:', @@ -1090,6 +1102,7 @@ Ovdje su navedene neke nasumično odabrane vrijednosti koje možete koristiti: $ 'prefs-files' => 'Datoteke', 'prefs-custom-css' => 'Prilagođeni CSS', 'prefs-custom-js' => 'Prilagođeni JS', +'prefs-common-css-js' => 'Zajednički CSS/JS za sve izglede (skinove):', 'prefs-reset-intro' => 'Možete koristiti ovu stranicu da poništite Vaše postavke na ovom sajtu na pretpostavljene vrijednosti. Ovo se ne može vratiti unazad.', 'prefs-emailconfirm-label' => 'E-mail potvrda:', @@ -1129,9 +1142,15 @@ Također omogućuje drugim korisnicima da vas kontaktiraju preko Vaše korisnič 'prefs-advancedrendering' => 'Napredne opcije', 'prefs-advancedsearchoptions' => 'Napredne opcije', 'prefs-advancedwatchlist' => 'Napredne opcije', -'prefs-display' => 'Postavke displeja', +'prefs-displayrc' => 'Postavke displeja', +'prefs-displaysearchoptions' => 'Postavke displeja', +'prefs-displaywatchlist' => 'Postavke prikaza', 'prefs-diffs' => 'Razlike', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'E-mail adresa izgleda valjano', +'email-address-validity-invalid' => 'Unesite valjanu e-mail adresu', + # User rights 'userrights' => 'Postavke korisničkih prava', 'userrights-lookup-user' => 'Menadžment korisničkih prava', @@ -1215,6 +1234,7 @@ Također omogućuje drugim korisnicima da vas kontaktiraju preko Vaše korisnič 'right-hideuser' => 'Blokiranje korisničkog imena, i njegovo sakrivanje od javnosti', 'right-ipblock-exempt' => 'Zaobilaženje IP blokada, autoblokada i blokada IP grupe', 'right-proxyunbannable' => 'Zaobilaženje automatskih blokada proxy-ja', +'right-unblockself' => 'Deblokiranje samog sebe', 'right-protect' => 'Promjena nivoa zaštite i uređivanje zaštićenih stranica', 'right-editprotected' => 'Uređivanje zaštićenih stranica (bez povezanih zaštita)', 'right-editinterface' => 'Uređivanje korisničkog interfejsa', @@ -1237,7 +1257,6 @@ Također omogućuje drugim korisnicima da vas kontaktiraju preko Vaše korisnič 'right-siteadmin' => 'Zaključavanje i otključavanje baze podataka', 'right-reset-passwords' => 'Resetiranje lozinke drugih korisnika', 'right-override-export-depth' => 'Izvoz stranica uključujući povezane stranice do dubine od 5 linkova', -'right-versiondetail' => 'Prikaži informaciju o proširenoj verziji softvera', 'right-sendemail' => 'Slanje e-maila drugim korisnicima', # User rights log @@ -1288,14 +1307,9 @@ Također omogućuje drugim korisnicima da vas kontaktiraju preko Vaše korisnič 'recentchanges-legend' => 'Postavke za Nedavne promjene', 'recentchangestext' => 'Na ovoj stranici možete pratiti nedavne izmjene.', 'recentchanges-feed-description' => 'Praćenje nedavnih izmjena na ovom wikiju u ovom feedu.', -'recentchanges-label-legend' => 'Legenda: $1.', -'recentchanges-legend-newpage' => '$1 - nova stranica', 'recentchanges-label-newpage' => 'Ovom izmjenom je stvorena nova stranica', -'recentchanges-legend-minor' => '$1 - manja izmjena', 'recentchanges-label-minor' => 'Ovo je manja izmjena', -'recentchanges-legend-bot' => '$1 - izmjena bota', 'recentchanges-label-bot' => 'Ovu je izmjenu učinio bot', -'recentchanges-legend-unpatrolled' => '$1 - nepatrolirana izmjena', 'recentchanges-label-unpatrolled' => 'Ova izmjena još nije patrolirana', 'rcnote' => "Ispod {{PLURAL:$1|je '''$1''' promjena|su '''$1''' zadnje promjene|su '''$1''' zadnjih promjena}} u {{PLURAL:$2|posljednjem '''$2''' danu|posljednja '''$2''' dana|posljednjih '''$2''' dana}}, od $4, $5.", 'rcnotefrom' => "Ispod {{PLURAL:$1|je '''$1''' izmjena|su '''$1''' zadnje izmjene|su '''$1''' zadnjih izmjena}} u {{PLURAL:$2|posljednjem '''$2''' danu|posljednja '''$2''' dana|posljednjih '''$2''' dana}}, od $4, $5.", @@ -1342,6 +1356,9 @@ Stranice koje su na vašem [[Special:Watchlist|spisku praćenja]] su '''podeblja 'upload_directory_missing' => 'Folder za postavljanje ($1) nedostaje i webserver ga ne može napraviti.', 'upload_directory_read_only' => 'Folder za postavljanje ($1) na webserveru je postavljen samo za čitanje.', 'uploaderror' => 'Greška pri slanju', +'upload-recreate-warning' => "'''Upozorenje: Datoteka s tim imenom je obrisana ili premještena.''' + +Zapisnik brisanja i premještanja za ovu stranicu je dostupan ovdje na uvid:", 'uploadtext' => "Koristite formu ispod za postavljanje datoteka. Da bi ste vidjeli ili pretražili ranije postavljene datoteke, pogledajte [[Special:FileList|spisak postavljenih datoteka]], ponovna postavljanja su također zapisana u [[Special:Log/upload|evidenciji postavljanja]], a brisanja u [[Special:Log/delete|evidenciji brisanja]]. @@ -1377,6 +1394,17 @@ Molimo Vas da promijenite ime datoteke i pokušate da je ponovo postavite.', 'filetype-banned-type' => "'''\".\$1\"''' nije dopuštena vrsta datoteke. {{PLURAL:\$3|Dopuštena vrsta datoteke je|Dopuštene vrste datoteka su}} \$2.", 'filetype-missing' => 'Datoteka nema ekstenziju (poput ".jpg").', +'empty-file' => 'Datoteka koju ste poslali je bila prazna.', +'file-too-large' => 'Datoteka koju ste poslali je bila prevelika.', +'filename-tooshort' => 'Ime datoteke je prekratko.', +'filetype-banned' => 'Ova vrsta datoteke je zabranjena.', +'verification-error' => 'Ova datoteka nije prošla provjeru.', +'hookaborted' => 'Izmjena koju ste pokušali napraviti prekinuta je od strane ekstenzije.', +'illegal-filename' => 'Ime datoteke nije dopušteno.', +'overwrite' => 'Presnimavanje preko postojeće datoteke nije dozvoljeno.', +'unknown-error' => 'Desila se nepoznata greška.', +'tmp-create-error' => 'Nije moguće napraviti privremenu datoteku.', +'tmp-write-error' => 'Greška pri pisanju privremene datoteke.', 'large-file' => 'Preporučeno je da datoteke nisu veće od $1; Ova datoteka je velika $2.', 'largefileserver' => 'Ova datoteka je veća nego što server dopušta.', @@ -1405,13 +1433,14 @@ Ako i dalje želite da postavite ovu datoteku, molimo Vas da se vratite i pošal 'fileexists-shared-forbidden' => 'Datoteka sa ovim imenom već postoji u zajedničkoj ostavi; molimo Vas da se vratite i pošaljete ovu datoteku pod novim imenom. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Ova datoteka je dvojnik {{PLURAL:$1|slijedećoj datoteci|slijedećim datotekama}}:', 'file-deleted-duplicate' => 'Datoteka koje je identična ovoj datoteci ([[:$1]]) je ranije bila obrisana. Trebate provjeriti historiju brisanja te datoteke prije nego što nastavite sa njenim ponovnim postavljanjem.', -'successfulupload' => 'Uspješno slanje', 'uploadwarning' => 'Upozorenje pri slanju', 'uploadwarning-text' => 'Molimo izmijeniti opis datoteke ispod i pokušajte kasnije.', 'savefile' => 'Snimi datoteku', 'uploadedimage' => 'postavljeno "[[$1]]"', 'overwroteimage' => 'postavljena nova verzija datoteke "[[$1]]"', 'uploaddisabled' => 'Slanje fajlova je isključeno', +'copyuploaddisabled' => 'Postavljanje putem URL nije omogućeno.', +'uploadfromurl-queued' => 'Vaše postavljanje je na čekanju.', 'uploaddisabledtext' => 'Postavljanje datoteka je onemogućeno.', 'php-uploaddisabledtext' => 'Postavljanje datoteka preko PHP je onemogućeno. Molimo provjerite postavku za postavljanje datoteka.', @@ -1433,6 +1462,14 @@ Potrebno je da razmotrite da li je u redu nastaviti sa postavljanjem ove datotek Registar brisanja za ovu datoteku je prikazan ovdje kao referenca:", 'filename-bad-prefix' => "Naziv datoteke koju postavljate počinje sa '''\"\$1\"''', što je naziv koji obično automatski dodjeljuju digitalni fotoaparati i kamere. Molimo Vas da odaberete naziv datoteke koji opisuje njen sadržaj.", +'upload-success-subj' => 'Uspješno slanje', +'upload-success-msg' => 'Vaša datoteka iz [$2] je uspješno postavljena. Dostupna je ovdje: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problem pri postavljanju', +'upload-failure-msg' => 'Nastao je problem s Vašim postavljanjem iz [$2]: + +$1', +'upload-warning-subj' => 'Upozorenje pri slanju', +'upload-warning-msg' => 'Nastao je problem sa vašim postavljanjem sa [$2]. Morate se vratiti na [[Special:Upload/stash/$1|formular za postavljanje]] kako biste riješili ovaj problem.', 'upload-proto-error' => 'Pogrešan protokol', 'upload-proto-error-text' => 'Postavljanje sa vanjske lokacije zahtjeva URL-ove koji počinju sa http:// ili ftp://.', @@ -1499,6 +1536,7 @@ Klikom na zaglavlje kolone možete promjeniti način sortiranja.', 'listfiles_search_for' => 'Traži ime medija:', 'imgfile' => 'datoteka', 'listfiles' => 'Spisak slika', +'listfiles_thumb' => 'Smanjeni pregled', 'listfiles_date' => 'Datum', 'listfiles_name' => 'Naziv', 'listfiles_user' => 'Korisnik', @@ -1613,8 +1651,8 @@ Prije brisanja provjerite da li druge stranice vode na te šablone.', 'statistics-edits' => 'Broj izmjena od kako je instalirana {{SITENAME}}', 'statistics-edits-average' => 'Prosječno izmjena po stranici', 'statistics-views-total' => 'Ukupno pregleda', +'statistics-views-total-desc' => 'Pregledi nepostojećih stranica i posebnih stranica nisu uključeni', 'statistics-views-peredit' => 'Pregleda po izmjeni', -'statistics-jobqueue' => 'Dužina [http://www.mediawiki.org/wiki/Manual:Job_queue akcija na čekanju]', 'statistics-users' => 'Registrovani [[Special:ListUsers|korisnici]]', 'statistics-users-active' => 'Aktivni korisnici', 'statistics-users-active-desc' => 'Korisnici koju su izvršili akciju u toku {{PLURAL:$1|zadnjeg dana|zadnja $1 dana|zadnjih $1 dana}}', @@ -1627,9 +1665,9 @@ Po pravilu, one se trebaju povezati sa konkretnim člankom.
    Stranica se smatra stranicom za razvrstavanje, ukoliko koristi šablon koji je povezan sa spiskom [[MediaWiki:Disambiguationspage|stranica za razvrstavanje]]", 'doubleredirects' => 'Dvostruka preusmjerenja', -'doubleredirectstext' => 'This page lists pages which redirect to other redirect pages. -Each row contains links to the first and second redirect, as well as the target of the second redirect, which is usually the "real" target page, which the first redirect should point to. -Crossed out entries have been solved.', +'doubleredirectstext' => 'Ova stranica prikazuje stranice koje preusmjeravaju na druga preusmjerenja. +Svaki red sadrži veze na prvo i drugo preusmjerenje, kao i na prvu liniju teksta drugog preusmjerenja, što obično daje "pravi" ciljni članak, na koji bi prvo preusmjerenje i trebalo da pokazuje. +Precrtane stavke su riješene.', 'double-redirect-fixed-move' => '[[$1]] je premješten, sada je preusmjerenje na [[$2]]', 'double-redirect-fixer' => 'Popravljač preusmjerenja', @@ -1652,6 +1690,8 @@ Each row contains links to the first and second redirect, as well as the target 'nmembers' => '$1 {{PLURAL:$1|član|članova}}', 'nrevisions' => '$1 {{PLURAL:$1|revizija|revizije|revizija}}', 'nviews' => '$1 {{PLURAL:$1|pregled|pregleda}}', +'nimagelinks' => 'Koristi se na $1 {{PLURAL:$1|stranici|stranice|stranica}}', +'ntransclusions' => 'koristi se na $1 {{PLURAL:$1|stranici|stranice|stranica}}', 'specialpage-empty' => 'Ne postoje rezultati za ovaj izvještaj.', 'lonelypages' => 'Stranice - siročići', 'lonelypagestext' => 'Slijedeće stranice nemaju linkove na ostalim stranicama na ovoj {{SITENAME}}.', @@ -1810,34 +1850,40 @@ O svakoj od njih postoje i [[{{MediaWiki:Listgrouprights-helppage}}|dodatne info 'listgrouprights-removegroup-self-all' => 'Može ukloniti sve grupe sa svog računa', # E-mail user -'mailnologin' => 'Nema adrese za slanje', -'mailnologintext' => 'Morate biti [[Special:UserLogin|prijavljeni]] i imati ispravnu adresu e-pošte u vašim [[Special:Preferences|podešavanjima]] da biste slali e-poštu drugim korisnicima.', -'emailuser' => 'Pošalji E-mail ovom korisniku', -'emailpage' => 'Pošalji e-mail ovom korisniku', -'emailpagetext' => 'Možete korisiti formu ispod za slanje e-mail poruka ovom korisniku. +'mailnologin' => 'Nema adrese za slanje', +'mailnologintext' => 'Morate biti [[Special:UserLogin|prijavljeni]] i imati ispravnu adresu e-pošte u vašim [[Special:Preferences|podešavanjima]] da biste slali e-poštu drugim korisnicima.', +'emailuser' => 'Pošalji E-mail ovom korisniku', +'emailpage' => 'Pošalji e-mail ovom korisniku', +'emailpagetext' => 'Možete korisiti formu ispod za slanje e-mail poruka ovom korisniku. E-mail adresa koju ste unijeli u [[Special:Preferences|Vašim korisničkim postavkama]] će biti prikazana kao adresa pošiljaoca, tako da će primaoc poruke moći da Vam odgovori.', -'usermailererror' => 'Objekat maila je vratio grešku:', -'defemailsubject' => '{{SITENAME}} e-pošta', -'noemailtitle' => 'Nema adrese e-pošte', -'noemailtext' => 'Ovaj korisnik nije naveo ispravnu adresu e-pošte.', -'nowikiemailtitle' => 'E-mail nije dozvoljen', -'nowikiemailtext' => 'Ovaj korisnik je odabrao da ne prima e-mail poštu od drugih korisnika.', -'email-legend' => 'Slanje e-maila drugom {{SITENAME}} korisniku', -'emailfrom' => 'Od:', -'emailto' => 'Za:', -'emailsubject' => 'Tema:', -'emailmessage' => 'Poruka:', -'emailsend' => 'Pošalji', -'emailccme' => 'Pošalji mi kopiju moje poruke.', -'emailccsubject' => 'Kopiranje Vaše poruke za $1: $2', -'emailsent' => 'E-mail poruka poslata', -'emailsenttext' => 'Vaša poruka je poslata e-poštom.', -'emailuserfooter' => 'Ovaj e-mail je poslao $1 korisniku $2 putem funkcije "Pošalji e-mail korisniku" sa {{SITENAME}}.', +'usermailererror' => 'Objekat maila je vratio grešku:', +'defemailsubject' => '{{SITENAME}} e-pošta', +'usermaildisabled' => 'Korisnički e-mail onemogućen', +'usermaildisabledtext' => 'Ne možete poslati e-mail drugim korisnicima na ovoj wiki', +'noemailtitle' => 'Nema adrese e-pošte', +'noemailtext' => 'Ovaj korisnik nije naveo ispravnu adresu e-pošte.', +'nowikiemailtitle' => 'E-mail nije dozvoljen', +'nowikiemailtext' => 'Ovaj korisnik je odabrao da ne prima e-mail poštu od drugih korisnika.', +'email-legend' => 'Slanje e-maila drugom {{SITENAME}} korisniku', +'emailfrom' => 'Od:', +'emailto' => 'Za:', +'emailsubject' => 'Tema:', +'emailmessage' => 'Poruka:', +'emailsend' => 'Pošalji', +'emailccme' => 'Pošalji mi kopiju moje poruke.', +'emailccsubject' => 'Kopiranje Vaše poruke za $1: $2', +'emailsent' => 'E-mail poruka poslata', +'emailsenttext' => 'Vaša poruka je poslata e-poštom.', +'emailuserfooter' => 'Ovaj e-mail je poslao $1 korisniku $2 putem funkcije "Pošalji e-mail korisniku" sa {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Ostavljanje sistemske poruke.', +'usermessage-editor' => 'Sistem za poruke', # Watchlist 'watchlist' => 'Moj spisak praćenja', 'mywatchlist' => 'Moj spisak praćenja', -'watchlistfor' => "(za '''$1''')", +'watchlistfor2' => 'Za $1 $2', 'nowatchlist' => 'Nemate ništa na svom spisku praćenih članaka.', 'watchlistanontext' => 'Molimo da $1 da možete vidjeti ili urediti stavke na Vašem spisku praćenja.', 'watchnologin' => 'Niste prijavljeni', @@ -1958,7 +2004,10 @@ Posljednja izmjena je bila od korisnika [[User:$3|$3]] ([[User talk:$3|razgovor] 'revertpage-nouser' => 'Vraćene izmjene korisnika (korisničko ime uklonjeno) na posljednju reviziju koju je načinio [[User:$1|$1]]', 'rollback-success' => 'Poništene izmjene korisnika $1; vraćeno na posljednju verziju koju je snimio $2.', -'sessionfailure' => "Izgleda da postoji problem sa vašom sesijom; ova akcija je otkazana kao prevencija protiv napadanja sesija. Kliknite \"back\" (''nazad'') i osvježite stranicu sa koje ste došli, i opet pokušajte.", + +# Edit tokens +'sessionfailure-title' => 'Greška u sesiji', +'sessionfailure' => "Izgleda da postoji problem sa vašom sesijom; ova akcija je otkazana kao prevencija protiv napadanja sesija. Kliknite \"back\" (''nazad'') i osvježite stranicu sa koje ste došli, i opet pokušajte.", # Protect 'protectlogpage' => 'Registar zaštite', @@ -2093,19 +2142,23 @@ $1', 'month' => 'Od mjeseca (i ranije):', 'year' => 'Od godine (i ranije):', -'sp-contributions-newbies' => 'Pokaži doprinose samo novih korisnika', -'sp-contributions-newbies-sub' => 'Prikaži samo doprinose novih korisnika', -'sp-contributions-newbies-title' => 'Doprinosi novih korisnika', -'sp-contributions-blocklog' => 'registar blokiranja', -'sp-contributions-deleted' => 'obrisani doprinosi korisnika', -'sp-contributions-logs' => 'registri', -'sp-contributions-talk' => 'razgovor', -'sp-contributions-userrights' => 'postavke korisničkih prava', -'sp-contributions-blocked-notice' => 'Ovaj korisnik je trenutno blokiran. +'sp-contributions-newbies' => 'Pokaži doprinose samo novih korisnika', +'sp-contributions-newbies-sub' => 'Prikaži samo doprinose novih korisnika', +'sp-contributions-newbies-title' => 'Doprinosi novih korisnika', +'sp-contributions-blocklog' => 'registar blokiranja', +'sp-contributions-deleted' => 'obrisani doprinosi korisnika', +'sp-contributions-uploads' => 'postavljanja', +'sp-contributions-logs' => 'registri', +'sp-contributions-talk' => 'razgovor', +'sp-contributions-userrights' => 'postavke korisničkih prava', +'sp-contributions-blocked-notice' => 'Ovaj korisnik je trenutno blokiran. Posljednje stavke evidencije blokiranja možete pogledati ispod:', -'sp-contributions-search' => 'Pretraga doprinosa', -'sp-contributions-username' => 'IP adresa ili korisničko ime:', -'sp-contributions-submit' => 'Traži', +'sp-contributions-blocked-notice-anon' => 'Ova IP adresa je trenutno blokirana. +Posljednje stavke zapisnika blokiranja možete pogledati ispod:', +'sp-contributions-search' => 'Pretraga doprinosa', +'sp-contributions-username' => 'IP adresa ili korisničko ime:', +'sp-contributions-toponly' => 'Prikaži samo izmjene koje su posljednje revizije', +'sp-contributions-submit' => 'Traži', # What links here 'whatlinkshere' => 'Šta je povezano ovdje', @@ -2166,7 +2219,6 @@ Unesite konkretan razlog ispod (na primjer, navodeći koje konkretne stranice su 'ipb-edit-dropdown' => 'Uredi razloge blokiranja', 'ipb-unblock-addr' => 'Deblokiraj $1', 'ipb-unblock' => 'Deblokiraj korisničko ime ili IP adresu', -'ipb-blocklist-addr' => 'Postojeće blokade za $1', 'ipb-blocklist' => 'Vidi postojeće blokade', 'ipb-blocklist-contribs' => 'Doprinosi za $1', 'unblockip' => 'Odblokiraj korisnika', @@ -2244,6 +2296,8 @@ Ne možete napraviti račun', 'cant-block-while-blocked' => 'Ne možete blokirati druge korisnike dok ste blokirani.', 'cant-see-hidden-user' => 'Korisnik kojeg pokušavate blokirati je već blokiran i sakriven. Pošto nemate prava hideuser (sakrivanje korisnika), ne možete vidjeti ni urediti korisnikovu blokadu.', +'ipbblocked' => 'Ne možete blokirati ili deblokirati druge korisnike, jer ste i sami blokirani', +'ipbnounblockself' => 'Nije Vam dopušteno da deblokirate samog sebe', # Developer tools 'lockdb' => 'Zaključajte bazu', @@ -2281,6 +2335,17 @@ To znači da stranicu možete ponovno preimenovati u stari naslov ako je u pitan '''UPOZORENJE!''' Ovo može biti drastična i neočekivana promjena za popularnu stranicu; budite sigurni da ste shvatili sve posljedice prije nego što nastavite.", +'movepagetext-noredirectfixer' => "Koristeći obrazac ispod ćete preimenovati stranicu i premjestiti cijelu njenu historiju na novi naziv. +Stari naziv će postati preusmjerenje na novi naziv. +Molimo provjerite da li postoje [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|nedovršena preusmjerenja]]. +Vi ste za to odgovorni te morate provjeriti da li su linkovi ispravni i da li vode tamo gdje bi trebali. + +Imajte na umu da stranica '''neće''' biti premještena ako već postoji stranica s tim imenom, osim ako je prazna ili je preusmjerenje ili nema ranije historije. +Ovo znali da možete preimenovati stranicu nazad gdje je ranije bila preimenovana ako ste pogriješili a ne možete ponovo preimenovati postojeću stranicu. + +'''Pažnja!''' +Imajte na umu da preusmjeravanje popularnog članka može biti +drastična i neočekivana promjena za korisnike; molimo budite sigurni da ste shvatili posljedice prije nego što nastavite.", 'movepagetalktext' => "Odgovarajuća stranica za razgovor, ako postoji, će automatski biti premještena istovremeno '''osim:''' *Neprazna stranica za razgovor već postoji pod novim imenom, ili *Odznačite donju kutiju. @@ -2336,6 +2401,7 @@ Da li je želite obrisati kako bi ste mogli izvršiti premještanje?', 'immobile-source-page' => 'Ova stranica se ne može premještati.', 'immobile-target-page' => 'Ne može se preusmjeriti na taj odredišni naslov.', 'imagenocrossnamespace' => 'Ne može se premjestiti datoteka u nedatotečni imenski prostor', +'nonfile-cannot-move-to-file' => 'Ne mogu se premjestiti podaci u datotečni imenski prostor', 'imagetypemismatch' => 'Ekstenzija nove datoteke ne odgovara njenom tipu', 'imageinvalidfilename' => 'Ciljno ime datoteke nije valjano', 'fix-double-redirects' => 'Ažuriraj sva preusmjerenja koja vode ka originalnom naslovu', @@ -2416,6 +2482,7 @@ Snimite je na Vašem računaru i pošaljite ovdje.', 'importstart' => 'Uvoženje stranica…', 'import-revision-count' => '$1 {{PLURAL:$1|revizija|revizije|revizija}}', 'importnopages' => 'Nema stranica za uvoz.', +'imported-log-entries' => '{{PLURAL:$1|Uvezena $1 stavka registra|Uvezene $1 stavke registra|Uvezeno $1 stavki registra}}.', 'importfailed' => 'Uvoz nije uspio: $1', 'importunknownsource' => 'Nepoznat izvorni tip uvoza', 'importcantopen' => 'Ne može se otvoriti uvozna datoteka', @@ -2515,6 +2582,8 @@ Možete vidjeti njen izvor', 'tooltip-rollback' => '"Povrat" briše izmjenu/e posljednjeg uređivača ove stranice jednim klikom', 'tooltip-undo' => 'Vraća ovu izmjenu i otvara formu uređivanja u modu pretpregleda. Dozvoljava unošenje razloga za to u sažetku.', +'tooltip-preferences-save' => 'Snimi postavke', +'tooltip-summary' => 'Unesite kratki sažetak', # Metadata 'nodublincore' => 'Dublin Core RDF metapodaci onemogućeni za ovaj server.', @@ -2604,19 +2673,22 @@ $1', 'nextdiff' => 'Novija izmjena →', # Media information -'mediawarning' => "'''Upozorenje''': Ova datoteka može sadržavati loš kod. +'mediawarning' => "'''Upozorenje''': Ova datoteka sadrži loš kod. Njegovim izvršavanjem možete da ugrozite Vaš sistem.", 'imagemaxsize' => "Ograničenje veličine slike:
    ''(za stranice opisa datoteke)''", 'thumbsize' => 'Veličina umanjenog prikaza:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|stranica|stranice|stranica}}', -'file-info' => '(veličina datoteke: $1, MIME tip: $2)', -'file-info-size' => '($1 × $2 piksela, veličina datoteke/fajla: $3, MIME tip: $4)', +'file-info' => 'veličina datoteke: $1, MIME tip: $2', +'file-info-size' => '$1 × $2 piksela, veličina datoteke/fajla: $3, MIME tip: $4', 'file-nohires' => 'Veća rezolucija nije dostupna.', -'svg-long-desc' => '(SVG fajl, nominalno $1 × $2 piksela, veličina fajla: $3)', +'svg-long-desc' => 'SVG fajl, nominalno $1 × $2 piksela, veličina fajla: $3', 'show-big-image' => 'Puna rezolucija', 'show-big-image-thumb' => 'Veličina ovog prikaza: $1 × $2 piksela', 'file-info-gif-looped' => 'stalno iznova', 'file-info-gif-frames' => '$1 {{PLURAL:$1|sličica|sličice|sličica}}', +'file-info-png-looped' => 'stalno iznova', +'file-info-png-repeat' => 'pregledano $1 {{PLURAL:$1|put|puta}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|sličica|sličice|sličica}}', # Special:NewFiles 'newimages' => 'Galerija novih slika', @@ -2772,6 +2844,7 @@ Svi drugi linkovi u istoj liniji se smatraju izuzecima, npr. kod stranica gdje s 'exif-gpsareainformation' => 'Naziv GPS područja', 'exif-gpsdatestamp' => 'GPS datum', 'exif-gpsdifferential' => 'GPS diferencijalna korekcija', +'exif-objectname' => 'Kratki naslov', # EXIF attributes 'exif-compression-1' => 'Nekompresovano', @@ -2938,31 +3011,31 @@ Svi drugi linkovi u istoj liniji se smatraju izuzecima, npr. kod stranica gdje s 'limitall' => 'sve', # E-mail address confirmation -'confirmemail' => 'Potvrdite adresu e-pošte', -'confirmemail_noemail' => 'Niste unijeli tačnu e-mail adresu u Vaše [[Special:Preferences|korisničke postavke]].', -'confirmemail_text' => 'Ova viki zahtjeva da potvrdite adresu Vaše e-pošte prije nego što koristite mogućnosti e-pošte. ž +'confirmemail' => 'Potvrdite adresu e-pošte', +'confirmemail_noemail' => 'Niste unijeli tačnu e-mail adresu u Vaše [[Special:Preferences|korisničke postavke]].', +'confirmemail_text' => 'Ova viki zahtjeva da potvrdite adresu Vaše e-pošte prije nego što koristite mogućnosti e-pošte. ž Aktivirajte dugme ispod kako bi ste poslali poštu za potvrdu na Vašu adresu. Pošta uključuje poveznicu koja sadrži kod; učitajte poveznicu u Vaš brauzer da bi ste potvrdili da je adresa Vaše e-pošte valjana.', -'confirmemail_pending' => 'Kod za potvrdu Vam je već poslan putem e-maila; +'confirmemail_pending' => 'Kod za potvrdu Vam je već poslan putem e-maila; ako ste nedavno otvorili Vaš račun, trebali bi pričekati par minuta da poslana pošta stigne, prije nego što ponovno zahtijevate novi kod.', -'confirmemail_send' => 'Pošaljite kod za potvrdu', -'confirmemail_sent' => 'E-pošta za potvrđivanje poslata.', -'confirmemail_oncreate' => 'Kod za potvrđivanje Vam je poslat na Vašu e-mail adresu. +'confirmemail_send' => 'Pošaljite kod za potvrdu', +'confirmemail_sent' => 'E-pošta za potvrđivanje poslata.', +'confirmemail_oncreate' => 'Kod za potvrđivanje Vam je poslat na Vašu e-mail adresu. Taj kod nije neophodan za prijavljivanje, ali Vam je potreban kako bi ste omogućili funkcije wikija zasnovane na e-mailu.', -'confirmemail_sendfailed' => '{{SITENAME}} Vam ne može poslati poštu za potvrđivanje. +'confirmemail_sendfailed' => '{{SITENAME}} Vam ne može poslati poštu za potvrđivanje. Provjerite adresu zbog nepravilnih karaktera. Povratna pošta: $1', -'confirmemail_invalid' => 'Netačan kod za potvrdu. +'confirmemail_invalid' => 'Netačan kod za potvrdu. Moguće je da je kod istekao.', -'confirmemail_needlogin' => 'Morate $1 da bi ste potvrdili Vašu e-mail adresu.', -'confirmemail_success' => 'Adresa vaše e-pošte je potvrđena. +'confirmemail_needlogin' => 'Morate $1 da bi ste potvrdili Vašu e-mail adresu.', +'confirmemail_success' => 'Adresa vaše e-pošte je potvrđena. Možete sad da se [[Special:UserLogin|prijavite]] i uživate u viki.', -'confirmemail_loggedin' => 'Adresa Vaše e-pošte je potvrđena.', -'confirmemail_error' => 'Nešto je pošlo krivo prilikom snimanja vaše potvrde.', -'confirmemail_subject' => '{{SITENAME}} adresa e-pošte za potvrdu', -'confirmemail_body' => 'Neko, vjerovatno Vi, je sa IP adrese $1 registrovao nalog "$2" sa ovom adresom e-pošte na {{SITENAME}}. +'confirmemail_loggedin' => 'Adresa Vaše e-pošte je potvrđena.', +'confirmemail_error' => 'Nešto je pošlo krivo prilikom snimanja vaše potvrde.', +'confirmemail_subject' => '{{SITENAME}} adresa e-pošte za potvrdu', +'confirmemail_body' => 'Neko, vjerovatno Vi, je sa IP adrese $1 registrovao nalog "$2" sa ovom adresom e-pošte na {{SITENAME}}. Da potvrdite da ovaj nalog stvarno pripada vama i da aktivirate mogućnost e-pošte na {{SITENAME}}, otvorite ovaj link u vašem pregledniku: @@ -2972,8 +3045,34 @@ Ako ovo niste vi, pratite ovaj link da prekinete prijavu: $5 Ovaj kod za potvrdu će isteći u $4.', -'confirmemail_invalidated' => 'Potvrda e-mail adrese otkazana', -'invalidateemail' => 'Odustani od e-mail potvrde', +'confirmemail_body_changed' => 'Neko, vjerovatno Vi, je sa IP adrese $1 +je promijenio adresu e-pošte računa "$2" na ovu adresu za {{SITENAME}}. + +Da potvrdite da ovaj nalog stvarno pripada Vama i da reaktivirate mogućnosti e-pošte na {{SITENAME}}, otvorite ovaj link u Vašem pregledniku: + +$3 + +Ako ovaj račun *ne* pripada Vama, pratite ovaj link da prekinete odobravanje adrese e-pošte: + +$5 + +Ovaj kod za potvrdu će isteći u $4.', +'confirmemail_body_set' => 'Netko, vjerovatno Vi, sa IP adrese $1, +je postavio e-mail adresu za račun "$2" na ovoj adresi za {{SITENAME}}. + +Da potvrdite kako ovaj račun uistinu pripada Vama i reaktivirate +e-mail postavke na {{SITENAME}}, otvoriti ovaj link u vašem pregledniku: + +$3 + +Ako račun *ne* pripada Vama, pratite ovaj link +kako bi poništili potvrdu e-mail adrese: + +$5 + +Ovaj kod za potvrdu će isteći u $4.', +'confirmemail_invalidated' => 'Potvrda e-mail adrese otkazana', +'invalidateemail' => 'Odustani od e-mail potvrde', # Scary transclusion 'scarytranscludedisabled' => '[Međuwiki umetanje je isključeno]', @@ -3014,6 +3113,7 @@ Molimo Vas da potvrdite da stvarno želite da ponovo napravite ovaj članak.", 'table_pager_first' => 'Prva stranica', 'table_pager_last' => 'Zadnja stranica', 'table_pager_limit' => 'Pokaži $1 stavki po stranici', +'table_pager_limit_label' => 'Stavke po stranici:', 'table_pager_limit_submit' => 'Idi', 'table_pager_empty' => 'Bez rezultata', @@ -3070,6 +3170,7 @@ Također možete [[Special:Watchlist/edit|koristiti standardni uređivač]].', 'version-specialpages' => 'Posebne stranice', 'version-parserhooks' => 'Kuke parsera', 'version-variables' => 'Promjenjive', +'version-skins' => 'Izgledi (skinovi)', 'version-other' => 'Ostalo', 'version-mediahandlers' => 'Upravljači medije', 'version-hooks' => 'Kuke', @@ -3081,6 +3182,13 @@ Također možete [[Special:Watchlist/edit|koristiti standardni uređivač]].', 'version-hook-subscribedby' => 'Pretplaćeno od', 'version-version' => '(Verzija $1)', 'version-license' => 'Licenca', +'version-poweredby-credits' => "Ova wiki je zasnovana na '''[http://www.mediawiki.org/ MediaWiki]''', autorska prava zadržana © 2001-$1 $2.", +'version-poweredby-others' => 'ostali', +'version-license-info' => 'Mediawiki je slobodni softver, možete ga redistribuirati i/ili mijenjati pod uslovima GNU opće javne licence kao što je objavljeno od strane Fondacije Slobodnog Softvera, bilo u verziji 2 licence, ili (po vašoj volji) nekoj od kasniji verzija. + +Mediawiki se distriburia u nadi da će biti korisna, ali BEZ IKAKVIH GARANCIJA, čak i bez ikakvih posrednih garancija o KOMERCIJALNOSTI ili DOSTUPNOSTI ZA ODREĐENU SVRHU. Pogledajte GNU opću javnu licencu za više detalja. + +Trebali biste dobiti [{{SERVER}}{{SCRIPTPATH}}/KOPIJU GNU opće javne licence] zajedno s ovim programom, ako niste, pišite Fondaciji Slobodnog Softvera na adresu Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ili je pročitajte [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html online].', 'version-software' => 'Instalirani softver', 'version-software-product' => 'Proizvod', 'version-software-version' => 'Verzija', @@ -3151,6 +3259,15 @@ Unesite ime datoteke bez "{{ns:file}}:" prefiksa.', 'tags-edit' => 'uređivanje', 'tags-hitcount' => '$1 {{PLURAL:$1|izmjena|izmjene|izmjena}}', +# Special:ComparePages +'comparepages' => 'Usporedi stranice', +'compare-selector' => 'Usporedi revizije stranica', +'compare-page1' => 'Stranica 1', +'compare-page2' => 'Stranica 2', +'compare-rev1' => 'Ispravljanje 1', +'compare-rev2' => 'Ispravljanje 2', +'compare-submit' => 'Usporedi', + # Database error messages 'dberr-header' => 'Ovaj wiki ima problem', 'dberr-problems' => 'Žao nam je! Ova stranica ima tehničke poteškoće.', @@ -3167,8 +3284,13 @@ Unesite ime datoteke bez "{{ns:file}}:" prefiksa.', 'htmlform-float-invalid' => 'Vrijednost koju ste unijeli nije broj.', 'htmlform-int-toolow' => 'Vrijednost koju ste unijeli je ispod minimuma od $1', 'htmlform-int-toohigh' => 'Vrijednost koju ste unijeli je iznad maksimuma od $1', +'htmlform-required' => 'Ova vrijednost je obavezna', 'htmlform-submit' => 'Unesi', 'htmlform-reset' => 'Vrati izmjene', 'htmlform-selectorother-other' => 'Ostalo', +# SQLite database support +'sqlite-has-fts' => '$1 sa podrškom pretrage cijelog teksta', +'sqlite-no-fts' => '$1 bez podrške pretrage cijelog teksta', + ); diff --git a/languages/messages/MessagesShi.php b/languages/messages/MessagesShi.php index 2a12c4c2..8f271cc2 100644 --- a/languages/messages/MessagesShi.php +++ b/languages/messages/MessagesShi.php @@ -11,8 +11,6 @@ * @author Zanatos */ -$fallback = 'ar'; - $messages = array( # User preference toggles 'tog-underline' => 'krrj du izdayn:', @@ -29,8 +27,7 @@ $messages = array( 'tog-editsection' => 'Mmurzm i imbddln n w-ayyawn izdayn n « [Bddel] »', 'tog-editsectiononrightclick' => 'Yan uklik s tsga tafasi f uzwl n w-ayyaw bac ad tsbadlt ɣtad (ira JavaScript)', 'tog-showtoc' => 'Mel Taflwit n tngawin (i tisniwin lli dar 3 w-ayyawn)', -'tog-rememberpassword' => 'Sektid akccum inu ɣu-amsuddas ad', -'tog-editwidth' => 'Simɣur tanaka n-umẓṛag ard tamu amiẓar', +'tog-rememberpassword' => 'Askti nu ukcum ɣ Urdinaturad (Iɣ kullu tggut $1 {{PLURAL:$1|Ass|Ass}})', 'tog-watchcreations' => 'Zaydn tasniwin lli skrɣ i umuɣ n tilli ssuġiɣ.', 'tog-watchdefault' => 'Zaydn tasniwin lli tżrigɣ i umuɣ n tilli tsaggaɣ', 'tog-watchmoves' => 'Zayd tisniwin lli smattayɣ i tilli tsggaɣ.', @@ -174,31 +171,21 @@ $messages = array( 'faqpage' => 'Project: Isqqsit li bdda', # Vector skin -'vector-action-addsection' => 'Zayd amli', -'vector-action-delete' => 'Ḥiyd', -'vector-action-move' => 'Smmatti', -'vector-action-protect' => 'Ḥbu', -'vector-action-undelete' => 'Rard may mayḥiydn', -'vector-action-unprotect' => 'Ḥiyd aḥbu', -'vector-namespace-category' => 'Taggayt', -'vector-namespace-help' => 'Tasnat n w-aws', -'vector-namespace-image' => 'Asdaw', -'vector-namespace-main' => 'Tasna', -'vector-namespace-media' => 'Tasnat ntuzzumt', -'vector-namespace-mediawiki' => 'Tabrat', -'vector-namespace-project' => 'Tasnat n tuwuri', -'vector-namespace-special' => 'Tsnat timẓlit', -'vector-namespace-talk' => 'Amsgdal', -'vector-namespace-template' => 'Talɣa', -'vector-namespace-user' => 'Tasnat user', -'vector-view-create' => 'Skert', -'vector-view-edit' => 'Ara', -'vector-view-history' => 'Mel amzruy', -'vector-view-view' => 'ɣr', -'vector-view-viewsource' => 'Ẓr asagm', -'actions' => 'Imskarn', -'namespaces' => 'Ismawn n tɣula', -'variants' => 'lmotaghayirat', +'vector-action-addsection' => 'Zayd amli', +'vector-action-delete' => 'Ḥiyd', +'vector-action-move' => 'Smmatti', +'vector-action-protect' => 'Ḥbu', +'vector-action-undelete' => 'Rard may mayḥiydn', +'vector-action-unprotect' => 'Ḥiyd aḥbu', +'vector-simplesearch-preference' => 'Mmurzm immalatn n icnubcn lan atig (I Vector waḥdut )', +'vector-view-create' => 'Skert', +'vector-view-edit' => 'Ara', +'vector-view-history' => 'Mel amzruy', +'vector-view-view' => 'ɣr', +'vector-view-viewsource' => 'Ẓr asagm', +'actions' => 'Imskarn', +'namespaces' => 'Ismawn n tɣula', +'variants' => 'lmotaghayirat', 'errorpagetitle' => 'Laffut', 'returnto' => 'Urri s $1.', @@ -257,6 +244,9 @@ $messages = array( 'view-pool-error' => 'Surf, iqddacn žayn ɣilad. mnnaw midn yaḍnin ay siggiln tasna yad. Qqel imik fad addaɣ talst at tarmt at lkmt tasna yad $1', +'pool-timeout' => 'Tzrit tizi n uql lli yak ittuykfan. Ggutn midn lli iran ad iẓr tasna yad. Urrid yan imik..', +'pool-queuefull' => 'Umuɣ n twuri iẓun (iεmr)', +'pool-errorunknown' => 'Anzri (error) ur ittuyssan.', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'F {{SITENAME}}', @@ -390,7 +380,7 @@ lcont nek tuyskar . 'yourname' => 'smiyt o-msxdam:', 'yourpassword' => 'awal iḥdan:', 'yourpasswordagain' => 'Зawd ara awal iḥdan:', -'remembermypassword' => 'Askti nu ukcum ɣ lurdinaturad', +'remembermypassword' => 'Askti nu ukcum ɣ Urdinaturad (Iɣ kullu tggut $1 {{PLURAL:$1|Ass|Ass}})', 'yourdomainname' => 'Taɣult nek', 'externaldberror' => 'Imma tlla ɣin kra lafut ɣu ukcumnk ulla urak ittuyskar at tsbddelt lkontnk nbrra.', 'login' => 'Kcm ɣid', @@ -407,6 +397,7 @@ lcont nek tuyskar . 'gotaccount' => 'Is nit dark amidan(lkunt)? $1.', 'gotaccountlink' => 'Kcm', 'createaccountmail' => 'S tirawt taliktunant', +'createaccountreason' => 'Maɣ:', 'badretype' => 'Tasarut lin tgit ur dis tucka.', 'userexists' => 'Asaɣ nu umsqdac li tskcmt illa yad', 'loginerror' => 'Gar akccum', @@ -424,6 +415,9 @@ Ussaɣ n isqdacn ḥiln hlli. 'emailconfirmlink' => 'Als i tasna nk n tbratin izd nit nttat ayan.', 'loginlanguagelabel' => 'Tutlayt: $1', +# E-mail sending +'php-mail-error-unknown' => 'Kra ur igadda tasɣnt btbratin() n PHP.', + # Password reset dialog 'resetpass' => 'bddl taguri n uzray', 'resetpass_announce' => 'Tkcmt {{GENDER:||e|(e)}} s yat tangalt lli kin ilkmt s tbrat emeil . tangaltad ur tgi abla tin yat twalt. Bac ad tkmlt tqqiyyidank kcm tangalt tamaynut nk ɣid:', @@ -472,6 +466,7 @@ Han irwas is yad tsbadlt awal n uzri niɣd is ḍalbt yan yaḍn n yat tklit.', 'showlivepreview' => 'Iẓṛi izrbn (ⵉⵥⵕⵉ ⵉⵣⵔⴱⵏ)', 'showdiff' => 'Mel imbddln lli ifttun', 'anoneditwarning' => "Han ''' ur ttuyssant ''' rad ibayn IP nk ɣ umzrut n tasna yad, ur sul iḥba tamagit nk", +'anonpreviewwarning' => 'ur ittuyssan mat tgit. Iɣ tgdl tawuri nk, tansa nk IP rad tbayn ɣ umzruy n imbdln n tasna yad.', 'missingsummary' => "'''Adakt nskti :''' ur ta tfit awal imun n imbddln nk. Iɣ tklikkit tiklit yaḍn f tjrrayt « {{int:savearticle}} », aẓṛig rad ittuyskar blla tsnt", 'missingcommenttext' => 'Σafak skjm awnnit (aɣfawal) nk ɣ uflla.', @@ -561,6 +556,8 @@ ikhssak ola kiyi ador tnqilt ɣtamani yadni. 'revdelete-unsuppress' => 'Kkiss iqqntn i imcggrn llid n surri.', 'revdelete-log' => 'Maɣ..acku:', 'revdel-restore' => 'sbadl tannayt', +'revdel-restore-deleted' => 'Imsurritn lli ttuykkasnin', +'revdel-restore-visible' => 'Imsurritn lli baynnin', 'pagehist' => 'Amzruy n tasna', 'deletedhist' => 'Amzruy lli ittuykkasn', 'revdelete-content' => 'Mayllan', @@ -604,11 +601,13 @@ ikhssak ola kiyi ador tnqilt ɣtamani yadni. # Diffs 'history-title' => 'Asakud n umcggr n « $1 »', 'difference' => 'laḥna gr tamzwarut d tamǧarut', +'difference-multipage' => 'Amzaray (laḥna) gr tisniwin', 'lineno' => 'Izriri $1:', 'compareselectedversions' => 'Snahya gr ilqmn lli tuystaynin', 'showhideselectedversions' => 'Ml/Ḥbu ilqmn lli ittuystayn', 'editundo' => 'Urri', -'diff-multi' => '({{PLURAL:$1|Gr yan usurri|$1 gr isuritn}} ura tuyfsar)', +'diff-multi' => '({{PLURAL:$1|yan ulqm gratsn|$1 ilqmn gratsn}} z {{PLURAL:$2|umqdac|$2 imqdacn}} {{PLURAL:$1|iḥba|ḥban}})', +'diff-multi-manyusers' => '({{PLURAL:$1|yan ulqm n gratsn|$1 ilqmn ngratsn}} zdar mnnaw {{PLURAL:$2|amcgr |n $2 imcgrn}} {{PLURAL:$1|iḥba|lli iḥban}})', # Search results 'searchresults' => 'Mad akkan icnubcn', @@ -710,6 +709,7 @@ Izdar ad urtili ɣ isbidn n mayllan ɣ {{SITENAME}} .', 'contextlines' => 'stour gh natija', 'contextchars' => 'lhrof gh natija', 'stub-threshold' => 'wasla n do amzdoy itforma (bytes):', +'stub-threshold-disabled' => 'moattal', 'recentchangesdays' => 'adad liyam lmroda gh ahdat tghyirat', 'localtime' => '↓Tizi n ugmaḍ ad:', 'servertime' => 'Asaru n Tizi', @@ -974,19 +974,21 @@ Ha riglaj n ɣila lli f tlla tasna '''$1''' :", 'month' => 'Z usggas (d urbur):', 'year' => 'Z usggas (d urbur):', -'sp-contributions-newbies' => 'Ad ur tmlt abla tiwuriwin n wiyyaḍ', -'sp-contributions-newbies-sub' => 'Z imiḍan (comptes) imaynutn', -'sp-contributions-newbies-title' => 'Tiwuriwin n umqdac z imḍan imaynutn', -'sp-contributions-blocklog' => 'Tinɣmas n willi ttuyqqanin (blocage)', -'sp-contributions-deleted' => 'Tiwuriwin lli ittuykkasnin', -'sp-contributions-logs' => 'Iɣmisn', -'sp-contributions-talk' => 'Sgdl (discuter)', -'sp-contributions-userrights' => 'Sgiddi izrfan', -'sp-contributions-blocked-notice' => 'Amsqdac ad ittuysbddad. Maf ittuysbddad illa ɣ uɣmmis n n willi n sbid. Mayad ɣ trit ad tsnt maɣ', -'sp-contributions-search' => 'Cnubc f tiwuriwin', -'sp-contributions-username' => 'Tansa IP niɣ assaɣ nu umsqdac:', -'sp-contributions-submit' => 'Cabba (Sigl)', -'sp-contributions-explain' => '↓', +'sp-contributions-newbies' => 'Ad ur tmlt abla tiwuriwin n wiyyaḍ', +'sp-contributions-newbies-sub' => 'Z imiḍan (comptes) imaynutn', +'sp-contributions-newbies-title' => 'Tiwuriwin n umqdac z imḍan imaynutn', +'sp-contributions-blocklog' => 'Tinɣmas n willi ttuyqqanin (blocage)', +'sp-contributions-deleted' => 'Tiwuriwin lli ittuykkasnin', +'sp-contributions-logs' => 'Iɣmisn', +'sp-contributions-talk' => 'Sgdl (discuter)', +'sp-contributions-userrights' => 'Sgiddi izrfan', +'sp-contributions-blocked-notice' => 'Amsqdac ad ittuysbddad. Maf ittuysbddad illa ɣ uɣmmis n n willi n sbid. Mayad ɣ trit ad tsnt maɣ', +'sp-contributions-blocked-notice-anon' => 'Tansa yad IP ttuysbddad. Maf ittuysbddad illa ɣ uɣmmis n n willi n sbid. Mayad ɣ trit ad tsnt maɣ', +'sp-contributions-search' => 'Cnubc f tiwuriwin', +'sp-contributions-username' => 'Tansa IP niɣ assaɣ nu umsqdac:', +'sp-contributions-toponly' => 'Ad urtmlt adla mat ittuyẓran tigira yad', +'sp-contributions-submit' => 'Cabba (Sigl)', +'sp-contributions-explain' => '↓', # What links here 'whatlinkshere' => 'May izdayn ɣid', @@ -1134,8 +1136,9 @@ Maya Iẓḍar ad iglb zzu uzddar ar aflla tasna yad lli bdda n nttagga. Illa fl 'nextdiff' => 'Ambdl d ittfrn →', # Media information -'file-info-size' => '($1 × $2 piksil, asdaw tugut: $3, MIME anaw: $4)', +'file-info-size' => '$1 × $2 piksil, asdaw tugut: $3, MIME anaw: $4', 'file-nohires' => '↓Ur tlli tabudut tamqrant.', +'svg-long-desc' => 'Asdaw SVG, Tabadut n $1 × $2 ifrdan, Tiddi : $3', 'show-big-image' => 'balak', 'show-big-image-thumb' => 'Size of this preview: $1 × $2 pixels', @@ -1263,6 +1266,7 @@ Wiyyaḍ raggis ḥbun s ɣiklli sttin kkan gantn 'version-extension-functions' => 'lkhdaym n limtidad', 'version-parser-extensiontags' => 'imarkiwn n limtidad n lmohalil', 'version-parser-function-hooks' => 'lkhtatif ndala', +'version-poweredby-others' => 'wiyyad', 'version-software-product' => 'lmntoj', 'version-software-version' => 'noskha', @@ -1298,6 +1302,15 @@ Wiyyaḍ raggis ḥbun s ɣiklli sttin kkan gantn 'tags-hitcount-header' => 'tghyiran markanin', 'tags-edit' => 'bddl', +# Special:ComparePages +'comparepages' => 'qarnn tiwriqin', +'compare-selector' => 'qarn lmorajaa ntwriqin', +'compare-page1' => 'tawriqt 1', +'compare-page2' => 'tawriqt 2', +'compare-rev1' => 'morajaa 1', +'compare-rev2' => 'morajaa 2', +'compare-submit' => 'qarn', + # HTML forms 'htmlform-submit' => 'sifd', 'htmlform-reset' => 'sglbd tghyirat', diff --git a/languages/messages/MessagesSi.php b/languages/messages/MessagesSi.php index 0495e462..928e2f84 100644 --- a/languages/messages/MessagesSi.php +++ b/languages/messages/MessagesSi.php @@ -20,7 +20,9 @@ * @author තඹරු විජේසේකර * @author දසනැබළයෝ * @author නන්දිමිතුරු + * @author පසිඳු කාවින්ද * @author බිඟුවා + * @author රොමානිස් සැමුවෙල් * @author ශ්වෙත */ @@ -52,100 +54,104 @@ $namespaceAliases = array( ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'ද්විත්ව යළි-යොමුකිරීම්' ), - 'BrokenRedirects' => array( 'භින්න යළි-යොමුකිරීම්' ), + 'DoubleRedirects' => array( 'ද්විත්ව_යළි-යොමුකිරීම්' ), + 'BrokenRedirects' => array( 'භින්න_යළි-යොමුකිරීම්' ), 'Disambiguations' => array( 'වක්‍රෝත්තිහරණයන්' ), - 'Userlogin' => array( 'පරිශීලක ප්‍රවිෂ්ටය' ), - 'Userlogout' => array( 'පරිශීලක නිෂ්ක්‍රමණය' ), - 'CreateAccount' => array( 'ගිණුම තැනීමට' ), + 'Userlogin' => array( 'පරිශීලක_ප්‍රවිෂ්ටය' ), + 'Userlogout' => array( 'පරිශීලක_නිෂ්ක්‍රමණය' ), + 'CreateAccount' => array( 'ගිණුම_තැනීමට' ), 'Preferences' => array( 'අභිරුචියන්' ), - 'Watchlist' => array( 'මුරලැයිස්තුව' ), - 'Recentchanges' => array( 'මෑත වෙනස්වීම්' ), - 'Upload' => array( 'උඩුගත කිරීම' ), - 'Listfiles' => array( 'රූප ලැයිස්තුව' ), - 'Newimages' => array( 'අලුත් රූප' ), - 'Listusers' => array( 'පරිශීලකයන් ලැයිස්තු ගත කරන්න', 'පරිශීලක ලැයිස්තුව' ), - 'Listgrouprights' => array( 'කණ්ඩායම් හිමිකම් ලැයිස්තුගතකරන්න' ), - 'Statistics' => array( 'සංඛ්‍යාන දත්ත' ), - 'Randompage' => array( 'අහඹු ලෙස', 'අහඹු පිටුව' ), - 'Lonelypages' => array( 'හුදකලා පිටුව' ), - 'Uncategorizedpages' => array( 'ප්‍රවර්ගීකරනය නොකල පිටු' ), - 'Uncategorizedcategories' => array( 'ප්‍රවර්ගීකරනය නොකල ප්‍රවර්ග' ), - 'Uncategorizedimages' => array( 'ප්‍රවර්ගීකරනය නොකල රූප' ), - 'Uncategorizedtemplates' => array( 'ප්‍රවර්ගීකරනය නොකල සැකිලි' ), - 'Unusedcategories' => array( 'හාවිතා නොවන ප්‍රවර්ග' ), - 'Unusedimages' => array( 'හාවිතා නොවන රූප' ), - 'Wantedpages' => array( 'අවශ්‍ය පිටු' ), - 'Wantedcategories' => array( 'අවශ්‍ය ප්‍රවර්ග' ), - 'Wantedfiles' => array( 'අවශ්‍ය ගොනු' ), - 'Wantedtemplates' => array( 'අවශ්‍ය සැකිලි' ), - 'Mostlinked' => array( 'බොහෝ ලෙසින් සබැඳි' ), - 'Mostlinkedcategories' => array( 'බොහෝ ලෙසින් සබැඳි ප්‍රවර්ග', 'බෙහෙවින් භාවිතවූ ප්‍රවර්ග' ), - 'Mostlinkedtemplates' => array( 'බොහෝ ලෙසින් සබැඳි සැකිලි', 'බෙහෙවින් භාවිතවූ සැකිලි' ), - 'Mostimages' => array( 'බොහෝ රූප' ), - 'Mostcategories' => array( 'බොහෝ ප්‍රවර්ග' ), - 'Mostrevisions' => array( 'බොහෝ සංශෝධන' ), - 'Fewestrevisions' => array( 'අතිස්වල්ප සංශෝධන' ), - 'Shortpages' => array( 'කොට පිටුව' ), - 'Longpages' => array( 'දිගු පිටුව' ), - 'Newpages' => array( 'නව පිටුව' ), - 'Ancientpages' => array( 'පුරාතන පිටුව' ), - 'Deadendpages' => array( 'අග ඇවුරුණු පිටුව' ), - 'Protectedpages' => array( 'ආරක්ෂිත පිටුව' ), - 'Protectedtitles' => array( 'ආරක්ෂිත ශීර්ෂයන්' ), - 'Allpages' => array( 'සියළු පිටු' ), - 'Prefixindex' => array( 'උපසර්ග සූචිය' ), - 'Ipblocklist' => array( 'අන්තර්ජාල ලිපින වාරණ ලැයිස්තුව' ), - 'Specialpages' => array( 'විශේෂ පිටු' ), + 'Watchlist' => array( 'මුර_ලැයිස්තුව' ), + 'Recentchanges' => array( 'මෑත_වෙනස්වීම්' ), + 'Upload' => array( 'උඩුගත_කිරීම' ), + 'Listfiles' => array( 'රූප_ලැයිස්තුව' ), + 'Newimages' => array( 'නව_ගොනු', 'නව_රූප' ), + 'Listusers' => array( 'පරිශීලකයන්_ලැයිස්තු_ගත_කරන්න', 'පරිශීලක_ලැයිස්තුව' ), + 'Listgrouprights' => array( 'කණ්ඩායම්_හිමිකම්_ලැයිස්තුගතකරන්න' ), + 'Statistics' => array( 'සංඛ්‍යාන_දත්ත' ), + 'Randompage' => array( 'අහඹු', 'අහඹු_පිටුව' ), + 'Lonelypages' => array( 'හුදකලා_පිටු' ), + 'Uncategorizedpages' => array( 'ප්‍රවර්ගීකරනය_නොකල_පිටු' ), + 'Uncategorizedcategories' => array( 'ප්‍රවර්ගීකරනය_නොකල_ප්‍රවර්ග' ), + 'Uncategorizedimages' => array( 'ප්‍රවර්ගීකරනය_නොකල_රූප' ), + 'Uncategorizedtemplates' => array( 'ප්‍රවර්ගීකරනය_නොකල_සැකිලි' ), + 'Unusedcategories' => array( 'හාවිතා_නොවන_ප්‍රවර්ග' ), + 'Unusedimages' => array( 'හාවිතා_නොවන_රූප' ), + 'Wantedpages' => array( 'අවශ්‍ය_පිටු' ), + 'Wantedcategories' => array( 'අවශ්‍ය_ප්‍රවර්ග' ), + 'Wantedfiles' => array( 'අවශ්‍ය_ගොනු' ), + 'Wantedtemplates' => array( 'අවශ්‍ය_සැකිලි' ), + 'Mostlinked' => array( 'බෙහෙවින්_සබැඳි_පිටු', 'බෙහෙවින්_සබැඳි' ), + 'Mostlinkedcategories' => array( 'බෙහෙවින්_සබැඳි_ප්‍රවර්ග', 'බෙහෙවින්_භාවිත_ප්‍රවර්ග' ), + 'Mostlinkedtemplates' => array( 'බෙහෙවින්_සබැඳි_සැකිලි', 'බෙහෙවින්_භාවිත_සැකිලි' ), + 'Mostimages' => array( 'බෙහෙවින්_සබැඳි_ගොනු', 'බොහෝ_ගොනු', 'බොහෝ_රූප' ), + 'Mostcategories' => array( 'බොහෝ_ප්‍රවර්ග' ), + 'Mostrevisions' => array( 'බොහෝ_සංශෝධන' ), + 'Fewestrevisions' => array( 'අතිස්වල්ප_සංශෝධන' ), + 'Shortpages' => array( 'කෙටි_පිටු' ), + 'Longpages' => array( 'දිගු_පිටු' ), + 'Newpages' => array( 'නව_පිටුව' ), + 'Ancientpages' => array( 'පුරාතන_පිටු' ), + 'Deadendpages' => array( 'අග_ඇවුරුණු_පිටුව' ), + 'Protectedpages' => array( 'ආරක්‍ෂිත_පිටුව' ), + 'Protectedtitles' => array( 'ආරක්‍ෂිත_ශීර්ෂයන්' ), + 'Allpages' => array( 'සියළු_පිටු' ), + 'Prefixindex' => array( 'උපසර්ග_සූචිය' ), + 'Ipblocklist' => array( 'වාරණ_ලැයිස්තුව', 'වාරණ_ලයිස්තුගතකරන්න_', 'IP_වාරණ_ලැයිස්තුව' ), + 'Unblock' => array( 'වාරණය_ඉවත්කල' ), + 'Specialpages' => array( 'විශේෂ_පිටු' ), 'Contributions' => array( 'දායකත්ව' ), - 'Emailuser' => array( 'පරිශීලකට විද්‍යුත්-තැපැලක් යැවිම' ), - 'Confirmemail' => array( 'විද්‍යුත්-තැපෑල තහවුරු කරන්න' ), - 'Whatlinkshere' => array( 'මෙහි කුමක් සබැඳී ඇතිද' ), - 'Recentchangeslinked' => array( 'සබැඳුනු මෑත වෙනස්වීම්', 'මෑතවෙනස් වීම්' ), - 'Movepage' => array( 'පිටුව ගෙන යනවා' ), - 'Blockme' => array( 'මා වාරණය කරන්න' ), - 'Booksources' => array( 'ග්‍රන්ථ මූලාශ්‍ර' ), - 'Categories' => array( 'ප්‍රවර්ගයන්' ), + 'Emailuser' => array( 'පරිශීලකට_විද්‍යුත්-තැපැලක්_යැවිම' ), + 'Confirmemail' => array( 'විද්‍යුත්-තැපෑල_තහවුරු_කරන්න' ), + 'Whatlinkshere' => array( 'මෙහි_කුමක්_සබැඳී_ඇතිද' ), + 'Recentchangeslinked' => array( 'සබැඳුනු_මෑත_වෙනස්කිරීම්', 'මෑත_වෙනස්කිරීම්' ), + 'Movepage' => array( 'පිටුව_ගෙන_යන්න' ), + 'Blockme' => array( 'මා_වාරණය_කරන්න' ), + 'Booksources' => array( 'ග්‍රන්ථ_මූලාශ්‍ර' ), + 'Categories' => array( 'ප්‍රවර්ග' ), 'Export' => array( 'නිර්යාතකරන්න' ), - 'Version' => array( 'අනුවාදය' ), - 'Allmessages' => array( 'සියළු පණිවුඩ' ), - 'Log' => array( 'ලඝු සටහන', 'ලඝු සටහන්' ), - 'Blockip' => array( 'අන්තර්ජාල ලිපිනය වාරණය කරන්න' ), - 'Undelete' => array( 'මකාදැමීම අවලංගු කරන්න' ), - 'Import' => array( 'ආයාත කරන්න' ), - 'Lockdb' => array( 'දත්ත ගබඩාව අවුරන්න' ), - 'Unlockdb' => array( 'දත්ත ගබඩාව ඇවුරුම අවලංගු කරන්න' ), - 'Userrights' => array( 'පරිශීලක හිමිකම්' ), - 'MIMEsearch' => array( 'MIME ගවේෂණය' ), - 'FileDuplicateSearch' => array( 'ගොනු අනුපිටපත් ගවේෂණය' ), - 'Unwatchedpages' => array( 'මුර නොකල පිටු' ), - 'Listredirects' => array( 'යළි-යොමුකිරීම් ලැයිස්තුගතකරන්න' ), - 'Revisiondelete' => array( 'සංශෝධන මකාදමන්න' ), - 'Unusedtemplates' => array( 'භාවිත නොකල සැකිලි' ), - 'Randomredirect' => array( 'අහඹු යළි-යොමුකිරිම' ), - 'Mypage' => array( 'මගේ පිටුව' ), - 'Mytalk' => array( 'මගේ සාකච්ඡාව' ), - 'Mycontributions' => array( 'මගේ දායකත්වය' ), - 'Listadmins' => array( 'පරිපාලකයන් ලැයිස්තුගත කරන්න' ), - 'Listbots' => array( 'රොබෝවරුන් ලැයිස්තුගතකරන්න' ), - 'Popularpages' => array( 'ජනප්‍රිය පිටු' ), + 'Version' => array( 'සංශෝධනය' ), + 'Allmessages' => array( 'සියළු_පණිවුඩ' ), + 'Log' => array( 'ලඝු_සටහන', 'ලඝු_සටහන්' ), + 'Blockip' => array( 'වාරණය_කරන්න', 'IP_වාරණය_කරන්න', 'පරිශීලක_වාරණය_කරන්න' ), + 'Undelete' => array( 'මකාදැමීම_අවලංගු_කරන්න' ), + 'Import' => array( 'ආයාත_කරන්න' ), + 'Lockdb' => array( 'දත්ත_සංචිතය_අවුරන්න' ), + 'Unlockdb' => array( 'දත්ත_සංචිතය_ඇවුරුම_අවලංගු_කරන්න' ), + 'Userrights' => array( 'පරිශීලක_හිමිකම්' ), + 'MIMEsearch' => array( 'MIME_ගවේෂණය' ), + 'FileDuplicateSearch' => array( 'ගොනු_අනුපිටපත්_ගවේෂණය' ), + 'Unwatchedpages' => array( 'මුර_නොකල_පිටු' ), + 'Listredirects' => array( 'යළි-යොමුකිරීම්_ලැයිස්තුගතකරන්න' ), + 'Revisiondelete' => array( 'සංශෝධන_මකාදමන්න' ), + 'Unusedtemplates' => array( 'භාවිත_නොකල_සැකිලි' ), + 'Randomredirect' => array( 'අහඹු_යළි-යොමුකිරිම' ), + 'Mypage' => array( 'මගේ_පිටුව' ), + 'Mytalk' => array( 'මගේ_සාකච්ඡාව' ), + 'Mycontributions' => array( 'මගේ_දායකත්වය' ), + 'Listadmins' => array( 'පරිපාලකයන්_ලැයිස්තුගත_කරන්න' ), + 'Listbots' => array( 'රොබෝවන්_ලැයිස්තුගත_කරන්න' ), + 'Popularpages' => array( 'ජනප්‍රිය_පිටු' ), 'Search' => array( 'ගවේෂණය' ), - 'Resetpass' => array( 'මුර පදය ප්‍රතිෂ්ඨාපනය කරන්න' ), - 'Withoutinterwiki' => array( 'අන්තර් විකි නොමැතිව' ), - 'MergeHistory' => array( 'ඒකාබද්ධ ඉතිහාසය' ), - 'Filepath' => array( 'ගොනු පෙත' ), - 'Invalidateemail' => array( 'විද්්‍යුත් තැපෑල අනීතික කරන්න' ), - 'Blankpage' => array( 'හිස් පිටුව' ), - 'LinkSearch' => array( 'සබැඳි ගවේෂණය' ), - 'DeletedContributions' => array( 'මකාදැමුණු දායකත්වයන්' ), + 'Resetpass' => array( 'මුරපදය_වෙනස්_කරන්න', 'මුරපදය_ප්‍රතිස්ථාපනය_කරන්න' ), + 'Withoutinterwiki' => array( 'අන්තර්_විකි_නොමැතිව' ), + 'MergeHistory' => array( 'ඒකාබද්ධ_ඉතිහාසය' ), + 'Filepath' => array( 'ගොනු_පෙත' ), + 'Invalidateemail' => array( 'විද්‍යුත්_තැපෑල_අනීතික_කරන්න' ), + 'Blankpage' => array( 'හිස්_පිටුව' ), + 'LinkSearch' => array( 'සබැඳි_ගවේෂණය' ), + 'DeletedContributions' => array( 'මකාදැමුණු_දායකත්වයන්' ), 'Tags' => array( 'ටැග' ), - 'Activeusers' => array( 'ක්‍රියාකාරීපරිශීලකයන්' ), + 'Activeusers' => array( 'ක්‍රියාකාරී_පරිශීලකයන්' ), + 'Badtitle' => array( 'නුසුසුදු_මාතෘකාව' ), ); $magicWords = array( 'redirect' => array( '0', '#යළියොමුව', '#REDIRECT' ), - 'currentmonth' => array( '1', 'වත්මන්මාසය', 'CURRENTMONTH', 'CURRENTMONTH2' ), + 'currentmonth' => array( '1', 'වත්මන්මාසය', 'වත්මන්මාසය2', 'CURRENTMONTH', 'CURRENTMONTH2' ), + 'currentmonth1' => array( '1', 'වත්මන්මාසය1', 'CURRENTMONTH1' ), 'currentmonthname' => array( '1', 'වත්මන්මාසනාමය', 'CURRENTMONTHNAME' ), + 'currentmonthnamegen' => array( '1', 'වත්මන්මාසනාමයපොදු', 'CURRENTMONTHNAMEGEN' ), 'currentmonthabbrev' => array( '1', 'වත්මන්මාසයකෙටි', 'CURRENTMONTHABBREV' ), 'currentday' => array( '1', 'වත්මන්දිනය', 'CURRENTDAY' ), 'currentday2' => array( '1', 'වත්මන්දිනය2', 'CURRENTDAY2' ), @@ -155,6 +161,7 @@ $magicWords = array( 'currenthour' => array( '1', 'වත්මන්පැය', 'CURRENTHOUR' ), 'localmonth' => array( '1', 'දේශීයමාසය', 'LOCALMONTH', 'LOCALMONTH2' ), 'localmonthname' => array( '1', 'දේශීයමාසනාමය', 'LOCALMONTHNAME' ), + 'localmonthnamegen' => array( '1', 'දේශීයමාසනාමයපොදු', 'LOCALMONTHNAMEGEN' ), 'localmonthabbrev' => array( '1', 'දේශීයමාසයකෙටි', 'LOCALMONTHABBREV' ), 'localday' => array( '1', 'දේශීයදිනය', 'LOCALDAY' ), 'localday2' => array( '1', 'දේශීයදිනය2', 'LOCALDAY2' ), @@ -168,21 +175,27 @@ $magicWords = array( 'numberofusers' => array( '1', 'පරිශීලකයන්සංඛ්‍යාව', 'NUMBEROFUSERS' ), 'numberofedits' => array( '1', 'සංස්කරණසංඛ්‍යාව', 'NUMBEROFEDITS' ), 'pagename' => array( '1', 'පිටුනාමය', 'PAGENAME' ), + 'namespace' => array( '1', 'නාමඅවකාශය', 'NAMESPACE' ), + 'namespacee' => array( '1', 'නාමඅවකාශයන්', 'NAMESPACEE' ), + 'msg' => array( '0', 'පණිවුඩ:', 'MSG:' ), 'img_right' => array( '1', 'දකුණ', 'right' ), 'img_left' => array( '1', 'වම', 'left' ), 'img_none' => array( '1', 'නොමැත', 'none' ), 'img_width' => array( '1', '$1පික්', '$1px' ), 'img_center' => array( '1', 'මධ්‍යය', 'center', 'centre' ), + 'img_border' => array( '1', 'දාරය', 'border' ), + 'img_sub' => array( '1', 'උප', 'sub' ), + 'img_middle' => array( '1', 'මැද', 'middle' ), 'special' => array( '0', 'විශේෂ', 'special' ), ); $messages = array( # User preference toggles 'tog-underline' => 'සබැඳි යටීර කිරීම:', -'tog-highlightbroken' => 'භින්න සබැඳියන් ආකෘතිකරණය මේ අයුරින් කරන්න (විකල්ප: මේ අයුරින් කරන්න?).', -'tog-justify' => 'ඡේදයන් justify කරන්න', -'tog-hideminor' => 'මෑත වෙනස්වීකිරීම්වල සුළු සංස්කරණ සඟවන්න', -'tog-hidepatrolled' => 'විමසුමට ලක්කෙරුණු සංස්කරණයන්, මෑත වෙනස්වීම් හී නොපෙන්වන්න', +'tog-highlightbroken' => 'භින්න වූ සබැඳියන් මේ අයුරින් ආකෘතිකරණය කරන්න (විකල්පය: මේ අයුරින්?)', +'tog-justify' => 'ඡේදයන් පේළ ගස්වන්න', +'tog-hideminor' => 'මෑත වෙනස් කිරීම්වල සුළු සංස්කරණ සඟවන්න', +'tog-hidepatrolled' => 'මෑත වෙනස් කිරීම්වල මුර සංචාරය කරන ලද සංස්කරණ සඟවන්න', 'tog-newpageshidepatrolled' => 'විමසුමට ලක්කෙරුණු පිටු, අළුත් පිටු ලැයිස්තුවෙහි නොපෙන්වන්න', 'tog-extendwatchlist' => 'මෑත වෙනස්වීම් පමණක් නොව, අදාළ සියළු වෙනස්වීම් දක්වා පෙන්වන අයුරින් මුර-ලැයිස්තුව පුළුල් කරන්න', 'tog-usenewrc' => 'ආවර්ධිත මෑත වෙනස්වීම් භාවිතා කරන්න (ජාවාස්ක්‍රිප්ට් ඇවැසිය)', @@ -192,8 +205,7 @@ $messages = array( 'tog-editsection' => '[සංස්කරණය] සබැඳියාවන් මගින් ඡේද සංස්කරණය සක්‍රීය කරන්න', 'tog-editsectiononrightclick' => 'ඡේද ශීර්ෂ මත දකුණු-ක්ලික් කිරීමෙන් ඡේද සංස්කරණය සක්‍රීය කරන්න (ජාවාස්ක්‍රිප්ට්)', 'tog-showtoc' => 'පටුන පෙන්වන්න ( තුනකට වඩා වැඩියෙන් ශීර්ෂ-නාම අඩංගු පිටු සඳහා)', -'tog-rememberpassword' => 'මාගේ ප්‍රවිෂ්ටය පිළිබඳ විස්තර මෙම පරිගණකය තුල ධාරණය කර තබා ගන්න', -'tog-editwidth' => 'සම්පූර්ණ තිරය පිරෙන පරිදී සංස්කරණ කොටුව පළල් කරන්න', +'tog-rememberpassword' => 'මගේ ප්‍රවිෂ්ටය මෙම ගවේශකයෙහි උපරිම ලෙස {{PLURAL:$1|දිනයක්|දින $1ක්}} මතක තබා ගන්න', 'tog-watchcreations' => 'මම තනන පිටු මගේ මුර-ලැයිස්තුවට එක් කරන්න', 'tog-watchdefault' => 'මම සංස්කරණය කරන පිටු මගේ මුර-ලැයිස්තුවට එක් කරන්න', 'tog-watchmoves' => 'මම ගෙනයන පිටු මගේ මුර-ලැයිස්තුවට එක් කරන්න', @@ -201,7 +213,7 @@ $messages = array( 'tog-minordefault' => 'සියළු සංස්කරණයන් පෙර-නිමියෙන් සුළු-සංස්කරණ ලෙස සලකුණු කරන්න', 'tog-previewontop' => 'සංස්කරණ කොටුවට ඉදිරියෙන් පෙර-දසුන පෙන්වන්න', 'tog-previewonfirst' => 'පළමු සංස්කරණයෙහිදී පෙර-දසුන පෙන්වන්න', -'tog-nocache' => 'පිටු කෑෂ්කිරීම (caching) අක්‍රීය කරන්න', +'tog-nocache' => 'ගවේශක පිටු මතක තබා ගැනීම අක්‍රීය කරන්න', 'tog-enotifwatchlistpages' => 'මගේ මුර-ලැයිස්තුවේ පිටුවක් වෙනස් වූ විට මා හට විද්‍යුත්-තැපෑලක් එවන්න', 'tog-enotifusertalkpages' => 'මගේ පරිශීලක සාකච්ඡා පිටුව වෙනස් වූ විට මා හට විද්‍යුත්-තැපෑලක් එවන්න', 'tog-enotifminoredits' => 'පිටුවල සුළු-සංස්කරණයකදී පවා මට ඊ- තැපැල් ලිපියක් එවන්න', @@ -209,8 +221,8 @@ $messages = array( 'tog-shownumberswatching' => 'මුර කරනු ලබන පරිශීලකයන් සංඛ්‍යාව පෙන්වන්න', 'tog-oldsig' => 'පවතින අත්සනෙහි පූර්ව දර්ශනය:', 'tog-fancysig' => 'අත්සන විකිපෙළ (ස්වයංක්‍රීය සබැඳියක් විරහිතව) ලෙසින් සලකන්න', -'tog-externaleditor' => 'පෙරනිමියෙන් බාහිර සංස්කාරකයක් භාවිත කරන්න (ප්‍රවීණයන් සඳහා පමණි, ඔබගේ පරිගණකයට විශේෂ සැකසුම් යෙදිය යුතුවේ)', -'tog-externaldiff' => 'පෙරනිමියෙන් බාහිර වෙනස භාවිතා කරන්න (ප්‍රවීණයන් සඳහා පමණයි, ඔබගේ පරිගණකයෙහි විශේෂ පරිස්ථිතීන් අවශ්‍යයයි)', +'tog-externaleditor' => 'බාහිර සම්පාදකයක් භාවිත කරන්න (ප්‍රවීණයන් සඳහා පමණි, ඔබගේ පරිගණකයේ විශේෂිත වූ සැකසුම් අවශ්‍ය වේ. [http://www.mediawiki.org/wiki/Manual:External_editors තවත් තොරතුරු.])', +'tog-externaldiff' => 'බාහිර ප්‍රභේදයක් භාවිත කරන්න (ප්‍රවීණයන් සඳහා පමණි, ඔබගේ පරිගණකයේ විශේෂිත වූ සැකසුම් අවශ්‍ය වේ. [http://www.mediawiki.org/wiki/Manual:External_editors තවත් තොරතුරු.])', 'tog-showjumplinks' => '"වෙත පනින්න" යන ප්‍රවේශතා සබැඳියන් සක්‍රීය කරන්න', 'tog-uselivepreview' => 'තත්කාල පෙර-දසුන භාවිතා කරන්න (ජාවාස්ක්‍රිප්ට්) (පරීක්ෂණාත්මක)', 'tog-forceeditsummary' => 'හිස් සංස්කරණ සාරාංශයකට මා ඇතුළු වන විට මාහට ඉඟි කරන්න', @@ -325,7 +337,7 @@ $messages = array( 'mypage' => 'මගේ පිටුව', 'mytalk' => 'මගේ සාකච්ඡා', 'anontalk' => 'මෙම IP ලිපිනය සඳහා සාකච්ඡාව', -'navigation' => 'සංචලනය', +'navigation' => 'යාත්‍රණය', 'and' => ' සහ', # Cologne Blue skin @@ -340,37 +352,27 @@ $messages = array( 'faqpage' => 'Project:නිති-විමසන-පැන', # Vector skin -'vector-action-addsection' => 'මාතෘකාව එක්කරන්න', -'vector-action-delete' => 'මකාදමන්න', -'vector-action-move' => 'ගෙනයන්න', -'vector-action-protect' => 'ආරක්ෂා කරන්න', -'vector-action-undelete' => 'මකාදැමීම අවලංගු කරන්න', -'vector-action-unprotect' => 'ආරක්ෂා‍ නොකරන්න', -'vector-namespace-category' => 'ප්‍රවර්ගය', -'vector-namespace-help' => 'උදවු පිටුව', -'vector-namespace-image' => 'ගොනුව', -'vector-namespace-main' => 'පිටුව', -'vector-namespace-media' => 'මාධ්‍ය පිටුව', -'vector-namespace-mediawiki' => 'පණිවුඩය', -'vector-namespace-project' => 'ව්‍යාපෘති පිටුව', -'vector-namespace-special' => 'විශේෂ පිටුව', -'vector-namespace-talk' => 'සාකච්ඡාව', -'vector-namespace-template' => 'සැකිල්ල', -'vector-namespace-user' => 'පරිශීලක පිටුව', -'vector-view-create' => 'තනන්න', -'vector-view-edit' => 'සංස්කරණය කරන්න', -'vector-view-history' => 'ඉතිහාසය නරඹන්න', -'vector-view-view' => 'කියවන්න', -'vector-view-viewsource' => 'මූලාශ්‍රය නරඹන්න', -'actions' => 'කාර්යයන්', -'namespaces' => 'නාමඅවකාශයන්', -'variants' => 'ප්‍රභේද්‍යයන්', +'vector-action-addsection' => 'මාතෘකාව එක්කරන්න', +'vector-action-delete' => 'මකාදමන්න', +'vector-action-move' => 'ගෙනයන්න', +'vector-action-protect' => 'ආරක්‍ෂණය කරන්න', +'vector-action-undelete' => 'මකාදැමීම අවලංගු කරන්න', +'vector-action-unprotect' => 'ආරක්ෂා‍ නොකරන්න', +'vector-simplesearch-preference' => 'වැඩිදියුණුකළ සෙවුම් යෝජනා සක්‍රීය කරන්න ("Vector" තීමය සඳහා පමණි)', +'vector-view-create' => 'තනන්න', +'vector-view-edit' => 'සංස්කරණය කරන්න', +'vector-view-history' => 'ඉතිහාසය නරඹන්න', +'vector-view-view' => 'කියවන්න', +'vector-view-viewsource' => 'මූලාශ්‍රය නරඹන්න', +'actions' => 'කාර්යයන්', +'namespaces' => 'නාමඅවකාශයන්', +'variants' => 'ප්‍රභේද', 'errorpagetitle' => 'දෝෂය', 'returnto' => '$1 ට නැවත යන්න.', 'tagline' => '{{SITENAME}} වෙතින්', 'help' => 'උදවු', -'search' => 'ගවේෂණය', +'search' => 'සොයන්න', 'searchbutton' => 'සොයන්න', 'go' => 'යන්න', 'searcharticle' => 'යන්න', @@ -419,16 +421,18 @@ $messages = array( 'protectedpage' => 'ආරක්ෂිත පිටුව', 'jumpto' => 'වෙත යන්න:', 'jumptonavigation' => 'සංචලනය', -'jumptosearch' => 'ගවේෂණය', +'jumptosearch' => 'සොයන්න', 'view-pool-error' => "සමාවන්න, ස'වරයන් (server) මෙම අවස්ථාවෙහිදී අධිභාරණය (overloade) වී ඇත. පමණට වඩා පරිශීලක පිරිසක් මෙම පිටුව නැරඹීමට යත්න දරති. මද වේලාවක් පමාවී නැවත උත්සාහකරන්න. $1", +'pool-timeout' => 'අගුල සඳහා බලාපොරොත්තුවෙන් සිටීම කල් ඉකුත්වනලදී', +'pool-queuefull' => 'පොරොත්තු ලේඛනය පිරී ඇත', +'pool-errorunknown' => 'හඳුනා නොගත් දෝෂය', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). -'aboutsite' => '{{SITENAME}} පිළිබඳ -', +'aboutsite' => '{{SITENAME}} පිළිබඳ', 'aboutpage' => 'Project:පිළිබඳ', 'copyright' => ' $1 යටතේ අන්තර්ගතය දැක ගත හැක.', 'copyrightpage' => '{{ns:project}}:කර්තෘ-හිමිකම්', @@ -444,7 +448,7 @@ $1", 'policy-url' => 'Project:ප්‍රතිපත්තිය', 'portal' => 'ප්‍රජා ද්වාරය', 'portal-url' => 'Project:ප්‍රජා ද්වාරය', -'privacy' => 'පෞද්ගලිකත්ව ප්‍රතිපත්තිය', +'privacy' => 'පුද්ගලිකත්ව ප්‍රතිපත්තිය', 'privacypage' => 'Project:පුද්ගලිකත්ව ප්‍රතිපත්තිය', 'badaccess' => 'අවසරදීමේ දෝෂයකි', @@ -467,7 +471,7 @@ $1", 'viewsourceold' => 'මූලාශ්‍රය නරඹන්න', 'editlink' => 'සංස්කරණය', 'viewsourcelink' => 'මූලාශ්‍රය නරඹන්න', -'editsectionhint' => 'ඡේද සංස්කරණය: $1', +'editsectionhint' => 'ඡේදය සංස්කරණය කරන්න: $1', 'toc' => 'පටුන', 'showtoc' => 'පෙන්වන්න', 'hidetoc' => 'සඟවන්න', @@ -478,7 +482,7 @@ $1", 'feed-invalid' => 'දායකත්ව පෝෂකයෙහි ශෛලිය අනීතිකය.', 'feed-unavailable' => 'සමග්‍රහ පෝෂකයන් නොමැත', 'site-rss-feed' => '$1 RSS පෝෂකය', -'site-atom-feed' => '$1 Atom පෝෂකය', +'site-atom-feed' => '$1 අටොම් පෝෂකය', 'page-rss-feed' => '"$1" RSS පෝෂකය', 'page-atom-feed' => '"$1" Atom පෝෂකය', 'feed-atom' => 'Atom', @@ -598,7 +602,8 @@ $2', 'yourname' => 'පරිශීලක නාමය:', 'yourpassword' => 'මුරපදය:', 'yourpasswordagain' => 'මුරපදය යළි ඇතුළු කරන්න:', -'remembermypassword' => 'මාගේ ප්‍රවිෂ්ටය පිළිබඳ විස්තර මෙම පරිගණක මතකයෙහි රඳවා තබා ගන්න', +'remembermypassword' => 'මාගේ පිවිසීම මෙම browser මතකයෙහි (උපරිම ලෙස{{PLURAL:$1|දිනයක්|දින $1 ක්}}) තබාගන්න', +'securelogin-stick-https' => 'ඇතුල්වීමෙන් පසුවද HTTPS හරහා සම්බන්ධ වන්න', 'yourdomainname' => 'ඔබගේ වසම:', 'externaldberror' => 'එක්කෝ සත්‍යාවත් දත්ත-ගබඩා දෝෂයක් පැවතුනි නැතිනම් ඔබගේ බාහිර ගිණුම යාවත්කාලීන කිරීමට ඔබ හට අවසර දී නොමැත.', 'login' => 'පිවිසෙන්න', @@ -606,30 +611,31 @@ $2', 'loginprompt' => '{{SITENAME}} වෙත ප්‍රවිෂ්ට වීම සඳහා ඔබ විසින් කුකීස් සක්‍රීය කොට තිබිය යුතුය.', 'userlogin' => 'පිවිසෙන්න / නව ගිණුමක් තනන්න', 'userloginnocreate' => 'ප්‍රවිෂ්ට වන්න', -'logout' => 'නිෂ්ක්‍රමණය', +'logout' => 'නික්මීම', 'userlogout' => 'නික්මීම', -'notloggedin' => 'ප්‍රවිෂ්ට වී නොමැත', +'notloggedin' => 'ප්‍රවිසී නැත', 'nologin' => "ඔබ හට ගිණුමක් නොමැතිද? '''$1'''.", 'nologinlink' => 'ගිණුමක් තනන්න', 'createaccount' => 'ගිණුම තනන්න', 'gotaccount' => "දැනටමත් ගිණුමක් තිබේද? '''$1'''.", 'gotaccountlink' => 'ප්‍රවිෂ්ට වන්න', 'createaccountmail' => 'විද්‍යුත් තැපෑල මගින්', +'createaccountreason' => 'හේතුව:', 'badretype' => 'ඔබ ඇතුළු කල මුරපදය නොගැලපේ.', 'userexists' => 'ඔබ ඇතුළු කල පරිශීලක නාමය දැනටමත් භාවිතයෙහි ඇත. කරුණාකර වෙනත් නමක් තෝරා ගන්න.', -'loginerror' => 'ප්‍රවිෂ්ට වීමේ දෝෂයකි', +'loginerror' => 'ප්‍රවිසීමේ දෝෂයකි', 'createaccounterror' => 'ගිණුම නිර්මාණය කළ නොහැකි විය:$1', -'nocookiesnew' => 'පරිශීලක ගිණුම තනා ඇති නමුදු, ඔබ ප්‍රවිෂ්ට වී නොමැත. +'nocookiesnew' => 'පරිශීලක ගිණුම තනා ඇති නමුදු, ඔබ ප්‍රවිසී නැත. පරිශීලකයන් ප්‍රවිෂ්ට කර ගැනීම සඳහා, {{SITENAME}} විසින් කුකී භාවිතා කරයි. ඔබ විසින් කුකී අක්‍රීය කර ඇත. -කරුණාකර ඒවා සක්‍රීය කොට, ඔබගේ නව පරිශීලක-නාමය හා මුර-පදය ඇසුරෙන් ප්‍රවිෂ්ට වන්න.', +කරුණාකර ඒවා සක්‍රීය කොට, ඔබගේ නව පරිශීලක-නාමය හා මුර-පදය ඇසුරෙන් පිවිසෙන්න.', 'nocookieslogin' => 'පරිශීලකයන් ප්‍රවිෂ්ට කර ගැනීම සඳහා, {{SITENAME}} විසින් කුකී භාවිතා කරනු ලැබේ. ඔබ විසින් කුකී අක්‍රීය නොට ඇත. කරුණාකර, ඒවා සක්‍රීය කොට, නැවත උත්සාහ ‍කරන්න.', 'noname' => 'වලංගු පරිශීලක-නාමයක් සඳහන් කිරීමට ඔබ අසමත් වී ඇත.', -'loginsuccesstitle' => 'ප්‍රවිෂ්ට වීම සාර්ථකයි', -'loginsuccess' => "'''ඔබ දැන්, \"\$1\" ලෙස, {{SITENAME}}ට ප්‍රවිෂ්ට විමට සමත් වී ඇත.'''", +'loginsuccesstitle' => 'ප්‍රවිසීම සාර්ථකයි', +'loginsuccess' => "'''ඔබ දැන්, \"\$1\" ලෙස, {{SITENAME}} වෙත ප්‍රවිෂ්ට විමට සමත් වී ඇත.'''", 'nosuchuser' => '"$1" යන නමැති පරිශීලකයෙකු නොමැත. පරිශීලක නාමයන්හි මහාප්‍රාණ ආදිය සැලකේ. ඔබගේ අක්ෂර-වින්‍යාසය පිරික්සා බැලීම හෝ, [[Special:UserLogin/signup|නව ගිණුමක් තැනීම]] හෝ සිදුකරන්න.', @@ -643,6 +649,7 @@ $2', නැවත උත්සාහ කරන්න.', 'passwordtooshort' => 'මුරපදය අඩුම වශයෙන් {{PLURAL:$1|එක් අක්ෂරයක්|අක්ෂර $1 ක්}} සහිත විය යුතුය.', 'password-name-match' => 'ඔබගේ මුරපදය, ඔබගේ පරිශීලක නාමයෙන් වෙනස් එකක් විය යුතුය.', +'password-login-forbidden' => 'මෙම පරිශීලක නාමයේ හා මුරපදයේ භාවිතය වලක්වා ඇත.', 'mailmypassword' => 'නව මුරපදය විද්‍යුත් තැපෑල‍ට යවන්න', 'passwordremindertitle' => '{{SITENAME}} සඳහා නව තාවකාලික මුර-පදය', 'passwordremindertext' => 'යම් අයෙකු ($1 අන්තර්ජාල ලිපිනය තුලින් සමහර විට ඔබ) විසින් {{SITENAME}} ($4)සඳහා නව මුර-පදයක් ඉල්ලා සිට ඇත. පරිශීලක "$2" වෙනුවෙන් තාවකාලික මුර-පදයක් තනා "$3" බවට නියම කර ඇත. මෙය ඔබගේ අභිලාශය වූයේ නම් ඔබ විසින් ළහිළහියේ ප්‍රවිෂ්ට වී, නව මුර-පදයක් තෝරා ගත යුතුව ඇත.ඔබගේ තාවකාලික මුරපදය {{PLURAL:$5|එක් දිනකින්|දින $5 කින්}}කල් ඉකුත්වනු ඇත. @@ -680,6 +687,9 @@ $2', 'loginlanguagelabel' => 'භාෂාව: $1', 'suspicious-userlogout' => 'නිෂ්ක්‍රමණය සඳහා ඔබගේ අයැදුම නිෂ්ප්‍රභා කෙරුනේ එය යොමු කොට ඇත්තේ භින්න(කැඩුනු) බ්‍රවුසරයකින් හෝ නිවේෂණය කෙරෙමින් පවතින ප්‍රොක්සියක් වෙතින් යැයි බැලූ බැල්මට පෙනෙන බැවිනි.', +# E-mail sending +'php-mail-error-unknown' => 'php mail() ශ්‍රිතයේ හඳුනානොගත් ගැටළුවකි', + # Password reset dialog 'resetpass' => 'මුර-පදය වෙනස් කරන්න', 'resetpass_announce' => 'විද්‍යුත්-තැපෑලෙන් එවනු ලැබූ තාවකාලික කේතයක් උපයෝගීකර ඔබ පිවිසීඇත. @@ -706,16 +716,16 @@ $2', 'italic_tip' => 'ඇලකුරු පෙළ', 'link_sample' => 'සබැඳි ශීර්ෂය', 'link_tip' => 'අභ්‍යන්තර සබැඳිය', -'extlink_sample' => 'http://www.example.com සබැඳියෙහි ශීර්ෂය', +'extlink_sample' => 'http://www.example.com සබැඳුම් මාතෘකාව', 'extlink_tip' => 'බාහිර සබැඳිය ( http:// උපසර්ගය සිහි තබාගන්න)', -'headline_sample' => 'සිරස්තල පෙළ', -'headline_tip' => '2වන මට්ටමෙහි සිරස්තලය', +'headline_sample' => 'සිරස්තල පෙළ', +'headline_tip' => '2 වන මට්ටමෙහි සිරස්තලය', 'math_sample' => 'සූත්‍රය මෙහි රුවන්න', 'math_tip' => 'ගණිත සූත්‍රය (LaTeX)', 'nowiki_sample' => 'ආකෘතිකරණය-නොකල පෙළ මෙහි රුවන්න', 'nowiki_tip' => 'විකි ආකෘතිකරණය නොසලකාහරින්න', 'image_sample' => 'නිදසුන.jpg', -'image_tip' => 'නිවේශිත(embedded) ගොනුව', +'image_tip' => 'කා වැද්දූ ගොනුව', 'media_sample' => 'නිදසුන.ogg', 'media_tip' => 'ගොනු සබැඳිය', 'sig_tip' => 'වේලා-මුද්‍රාව හා සමග ඔබගේ විද්‍යුත් අත්සන', @@ -731,13 +741,14 @@ $2', 'showpreview' => 'පෙරදසුන පෙන්වන්න', 'showlivepreview' => 'තත්කාල පෙර-දසුන', 'showdiff' => 'වෙනස්කිරීම් පෙන්වන්න', -'anoneditwarning' => "'''අවවාදයයි:''' ඔබ පරිශීලකයෙකු වශයෙන් පද්ධතියට ප්‍රවිෂ්ටවී නැත. -එබැව්න් මෙම පිටුවෙහි සංස්කරණ ඉතිහාසයෙහි, ඔබගේ IP ලිපිනය සටහන් කරගනු ඇත.", +'anoneditwarning' => "'''අවවාදයයි:''' ඔබ පරිශීලකයෙකු වශයෙන් පද්ධතියට ප්‍රවිෂ්ට වී නොමැත. +ඔබගේ අයිපී යොමුව මෙම පිටුවෙහි සංස්කරණ ඉතිහාසයෙහි වාර්තාගත වෙනු ඇත", +'anonpreviewwarning' => 'අවවාදයයි: ඔබ පරිශීලකයෙකු වශයෙන් පද්ධතියට ප්‍රවිෂ්ට වී නොමැත. එමනිසා මෙම පිටුවෙහි සංස්කරණ ඉතිහාසයෙහි, ඔබගේ අන්තර්ජාල ලිපිනය සටහන් කරගැනීමට සිදුවනු ඇත.', 'missingsummary' => "'''සිහිගැන්වීමයි:''' ඔබ විසින් සංස්කරණ සාරාංශයක් සපයා නොමැත. ඔබ නැවතත් සුරැකීම ක්ලික් කලහොත්, ඔබගේ සංස්කරණය එවැන්නක් විරහිතවම සුරැකෙනු ඇත.", 'missingcommenttext' => 'කරුණාකර පහතින් පරිකථනයක් ඇතුළු කරන්න.', 'missingcommentheader' => "'''සිහිගැන්වීමයි:''' මෙම පරිකථනය සඳහා ඔබ විසින් විෂයයක්/සිරස්තලයක් සපයා නොමැත. -ඔබ නැවතත් සුරැකීම ක්ලික් කලහොත්, ඔබගේ සංස්කරණය එවැන්නක් විරහිතවම සුරැකෙනු ඇත.", +ඔබ නැවතත් \"{{int:savearticle}}\" ක්ලික් කලහොත්, ඔබගේ සංස්කරණය එවැන්නක් විරහිතවම සුරැකෙනු ඇත.", 'summary-preview' => 'සාරාංශ පෙර-දසුන:', 'subject-preview' => 'විෂයය/සිරස්තලය හි පෙර-දසුන:', 'blockedtitle' => 'පරිශීලකයා වාරණය කර ඇත', @@ -780,7 +791,7 @@ $2', 'nosuchsectiontext' => 'ඔබ උත්සාහ කළේ නොපවතින කොටසක් සංස්කරණය කිරීමටයි. එම කොටස ඔබ පිටුව නරඹමින් සිටින අතරතුර මකා දමනු ලැබ හෝ දලනය කිරීමට ලක් කර හෝ තිබිය හැක.', 'loginreqtitle' => 'ප්‍රවිෂ්ට වී සිටීම අවශ්‍යයි', -'loginreqlink' => 'ප්‍රවිෂ්ටය', +'loginreqlink' => 'පිවිසෙන්න', 'loginreqpagetext' => 'අනෙකුත් පිටු නරඹනු වස් ඔබ $1 විය යුතුය.', 'accmailtitle' => 'මුර-පදය යවන ලදි', 'accmailtext' => "[[User talk:$1|$1]] සඳහා අහඹු ලෙස ජනනය කරන ලද මුරපදයක් $2 වෙත යවා ඇත. @@ -816,12 +827,16 @@ $2', '''එය තවමත් සුරැකීමට ලක් කොට නොමැත!'''", 'userjspreview' => "'''ඔබ සිදුකරන්නේ ඔබගේ පරිශීලක ජාවාස්ක්‍රිප්ට් පරික්ෂා කිරීම/පෙර-දසුන පමණක් බව ධාරණය කරන්න.''' '''එය තවමත් සුරැකීමට ලක් කොට නොමැත!'''", +'sitecsspreview' => "'''ඔබ දකින්නේ මෙම CSS හි පෙරදසුනක් පමණක් බව සිහි තබාගන්න.''' +'''එය තවමත් සුරැකීමට ලක් කොට නොමැත!'''", +'sitejspreview' => "'''ඔබ දකින්නේ මෙම JavaScript කේතයෙහි පෙරදසුනක් පමණක් බව සිහි තබාගන්න.''' +'''එය තවමත් සුරැකීමට ලක් කොට නොමැත!'''", 'userinvalidcssjstitle' => "'''අවවාදයයි:''' ඡවියක් නොමැත \"\$1\". -රීති ප්‍රකාරව .css හා .js පිටු විසින් ඉංග්‍රීසි කුඩා-අකුරු ශීර්ෂ භාවිතා කෙරෙන බව සිහි තබා ගන්න, නිදසුන. {{ns:user}}:Foo/monobook.css මිස {{ns:user}}:Foo/Monobook.css නොවන බව.", +රීති ප්‍රකාරව .css හා .js පිටු විසින් ඉංග්‍රීසි කුඩා-අකුරු ශීර්ෂ භාවිතා කෙරෙන බව සිහි තබා ගන්න, නිදසුන. {{ns:user}}:Foo/vector.css මිස {{ns:user}}:Foo/Vector.css නොවන බව.", 'updated' => '(යාවත්කාලීන)', 'note' => "'''සටහන:'''", -'previewnote' => "'''මෙය පෙරදසුනක් පමණකි; -වෙනස්වීම් සුරැකීම තවමත් සිදුකොට නොමැත!'''", +'previewnote' => "'''මෙය පෙරදසුනක් පමණි.''' +ඔබගේ වෙනස්කිරීම් තවමත් සුරක්ෂිත කොට නොමැත!", 'previewconflict' => 'ඔබ විසින් සුරැකීම තෝරාගත්තොත්, ඉහළ පෙළ සංස්කරණ සරියෙහි, පෙළ දර්ශනය විය හැකි අයුර මෙම පෙර-දසුනෙන් ආවර්ජනය වේ.', 'session_fail_preview' => "'''කණගාටුයි! සැසි දත්ත හානියක් හේතුවෙන් අප විසින් ඔබගේ සංස්කරණය ක්‍රියායයනය කිරීමට නොහැකි වී ඇත. කරුණාකර නැවත උත්සාහ කරන්න. @@ -857,9 +872,6 @@ $2', 'copyrightwarning2' => "{{SITENAME}} වෙත දායක වෙමින් ඔබ විසින් යොමු කෙරෙන කෘති, එවැනිම දායකත්වයක් සපයන වෙනයම් ඕනෑම අයෙකුන් විසින්, සංස්කරණය කිරීම, වෙනස් කිරීම, හෝ ඉවත් කිරීම සිදුවිය හැක්කක් බව කරුණාවෙන් සලකන්න.ඔබගේ ලියැවිලි, හිත්පිත් නැතිවා සේ පෙනෙන ඉතා රළු අයුරින් සංස්කරණයට ලක් කිරීම නොකල යුතු යැයි ඔබ හඟින්නේ නම්, ඔබගේ කෘති මෙහි පල කිරීමෙන් වලකින්න.
    එසේ ම මෙය ඔබ විසින් ම ලියූ බවට හෝ පොදු විෂයපථයකින්, ඊ‍ට ස‍මාන නිදහස් මූලාශ්‍රයකින් උපුටා ගත් බව‍ට හෝ අපහ‍‍ට සහතික විය යුතු ය. (තොරතුරු සඳහා $1 බලන්න). ''' හිමිකම් ඇවුරුණු දේ අනවසරයෙන් ප්‍රකාශ කිරිමෙන් වලකින්න!'''", -'longpagewarning' => "'''අවවාදයයි: මෙම පිටුව කිලෝ බයිට් $1 ක් දිගුය; -කිලෝ බයිට 32ට කිට්ටු හෝ ඊට වඩා දිගු පිටු සංස්කරණය කිරීම සමහරක් බ්‍රවුසර වලට දුෂ්කර විය හැක. -එබැවින් මෙම ‍පිටුව කුඩා කොටස් වලට බෙදීම පිළිබඳව අවධානය යොමු කරන්න.'''", 'longpageerror' => "'''දෝෂය: ඔබ විසින් ඉදිරිපත් කර ඇති පෙළ, කිලෝබයිට් $1 ක් දිගු වන අතර, උපරිමය වන කිලෝබයිට් $2 ට වඩා දිගය. එය සුරැකිය නොහැක.'''", 'readonlywarning' => "'''අවවාදයයි: නඩත්තු කටයුතු සඳහා දත්ත-සංචිතය අවහිරකර ඇති බැවින් ඔබගේ සංස්කරණයන් දැන්මම සුරැකීමට ඔබ හට නොහැක. @@ -1034,6 +1046,8 @@ $1", 'logdelete-failure' => "'''සටහන් දෘශ්‍යතාවය නියම කිරීම කල නොහැකි විය:''' $1", 'revdel-restore' => 'දෘශ්‍යතාවය වෙනස් කරන්න', +'revdel-restore-deleted' => 'සංශෝධන මකා දමන ලදී', +'revdel-restore-visible' => 'දෘශ්‍ය සංශෝධන', 'pagehist' => 'පිටු ඉතිහාසය', 'deletedhist' => 'මකාදැමූ ඉතිහාසය', 'revdelete-content' => 'අන්තර්ගතය', @@ -1104,11 +1118,13 @@ $1", # Diffs 'history-title' => '"$1"හි සංශෝධන ඉතිහාසය', 'difference' => '(අනුවාද අතර වෙනස්කම්)', +'difference-multipage' => 'පිටු අතර වෙනස', 'lineno' => 'පේළිය $1:', 'compareselectedversions' => 'තෝරාගත් සංශෝධන සසඳන්න', 'showhideselectedversions' => 'තෝරාගත් සංශෝධන පෙන්වන්න/සඟවන්න', 'editundo' => 'අහෝසි කරන්න', -'diff-multi' => '({{PLURAL:$1|එක් අතරමැදි සංශෝධනයක්| අතරමැදි සංශෝධන $1 ක්}} පෙන්නුම් කර නොමැත.)', +'diff-multi' => '({{PLURAL:$2|one user|$2 users}} විසින් සිදුකල {{PLURAL:$1|එක් අතරමැදි සංශෝධනයක්| අතරමැදි සංශෝධන $1 ක්}} පෙන්නුම් කර නොමැත.)', +'diff-multi-manyusers' => '(පරිශීලකයන් $2 කට වඩා වැඩි ගණනකගේ ආසන්න පුනරීක්‍ෂණ $1ක් පෙන්වා නොමැත)', # Search results 'searchresults' => 'ගවේෂණ ප්‍රතිඵල', @@ -1142,7 +1158,8 @@ $1", 'searchprofile-images-tooltip' => 'ගොනු සඳහා ගවේෂණය කරන්න', 'searchprofile-everything-tooltip' => 'සියළු අන්තර්ගතය ගවේෂණය කරන්න(සාකච්ඡා පිටුද ඇතුළුව)', 'searchprofile-advanced-tooltip' => 'අභිරුචි නාමඅවකාශයන්හි ගවේෂණය කරන්න', -'search-result-size' => '$1 ({{PLURAL:$2|වචන1 ක් |වචන $2 ක්}})', +'search-result-size' => '$1 ({{PLURAL:$2|වචන 1 ක් |වචන $2 ක්}})', +'search-result-category-size' => '{{PLURAL:$1|එක් සාමාජීකයෙන්|සාමාජීකයන් $1 ක්}} ({{PLURAL:$2|එක් උප-ප්‍රවර්ගයක්|උප-ප්‍රවර්ග $2 ක්}}, {{PLURAL:$3|එක් ගොනුවක්|ගොනු $3 ක්}})', 'search-result-score' => 'අදාළතාව: $1%', 'search-redirect' => '($1 යළි-යොමු කරන්න)', 'search-section' => '($1 ඡේදය)', @@ -1200,9 +1217,10 @@ $1", 'prefs-rc' => '‍නව වෙනස්වීම්', 'prefs-watchlist' => 'මුර-ලැයිස්තුව', 'prefs-watchlist-days' => 'මුර-ලැයිස්තුවෙහි පෙන්විය යුතු දිනයන්:', -'prefs-watchlist-days-max' => '(උපරිමයෙන් දින7 ක්)', +'prefs-watchlist-days-max' => 'Maximum 7 days +උපරිමය දින 7 කි', 'prefs-watchlist-edits' => 'ආවර්ධිත මුර-ලැයිස්තුවෙහි පෙන්විය යුතු උපරිම වෙනස්වීම් සංඛ්‍යාව:', -'prefs-watchlist-edits-max' => '(උපරිම සංඛ්‍යාව: 1000)', +'prefs-watchlist-edits-max' => 'උපරිම සංඛ්‍යාව: 1000', 'prefs-watchlist-token' => 'මුරලැයිස්තු ටෝකනය:', 'prefs-misc' => 'විවිධ', 'prefs-resetpass' => 'මුර-පදය වෙනස් කරන්න', @@ -1220,6 +1238,7 @@ $1", 'contextlines' => 'හිට් එකකට පේළි ගණන:', 'contextchars' => 'එක් පේළියකට සන්දර්භය:', 'stub-threshold' => 'කොට සබැඳි ආකෘතිකරණය සඳහා සීමකය (බයිට්):', +'stub-threshold-disabled' => 'අක්‍රිය කෙරිණි', 'recentchangesdays' => 'මෑත වෙනස්වීම්හි පෙන්විය යුතු දිනයන්:', 'recentchangesdays-max' => '(උපරිමයෙන් {{PLURAL:$1|එක් දිනක්|දින $1 ක්}})', 'recentchangescount' => 'පෙරනිමියෙන් පෙන්විය යුතු සංස්කරණ ගණන:', @@ -1253,6 +1272,7 @@ $1", 'prefs-files' => 'ගොනු', 'prefs-custom-css' => 'අභිරුචි CSS', 'prefs-custom-js' => ' අභිරුචි JS', +'prefs-common-css-js' => 'සියළු සිවි සඳහා හවුලේ භාවිත CSS/ජාවා ස්ක්‍රිප්ට්:', 'prefs-reset-intro' => 'ඔබගේ අභිප්‍රේතයන්, අඩවි පෙරනිමි වෙතට යළි-පිහිටුවීම සඳහා, ඔබ හට මෙම පිටුව භාවිතා කල හැක. මෙය අහෝසි කල නොහැක.', 'prefs-emailconfirm-label' => 'විද්‍යුත්-ලිපිනය තහවුරුකිරීම:', @@ -1293,9 +1313,15 @@ HTML ටැගයන් පිරික්සන්න.', 'prefs-advancedrendering' => 'ප්‍රගත විකල්පයන්', 'prefs-advancedsearchoptions' => 'ප්‍රගත විකල්පයන්', 'prefs-advancedwatchlist' => 'ප්‍රගත විකල්පයන්', -'prefs-display' => 'දර්ශන විකල්පයන්', +'prefs-displayrc' => 'දර්ශන විකල්පයන්', +'prefs-displaysearchoptions' => 'විකල්ප පෙන්වන්න', +'prefs-displaywatchlist' => 'විකල්ප පෙන්වන්න', 'prefs-diffs' => 'වෙනස', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'විද්‍යුත්-තැපැල් ලිපිනය අනීතික බවක් පෙනෙයි.', +'email-address-validity-invalid' => 'නීතික විද්‍යුත්-තැපැල් ලිපිනයක් ඇතුලත් කරන්න', + # User rights 'userrights' => 'පරිශීලක හිමිකම් කළමනාකරණය', 'userrights-lookup-user' => 'පරිශීලක කණ්ඩායම් කළමනාකරණය කරන්න', @@ -1380,6 +1406,7 @@ HTML ටැගයන් පිරික්සන්න.', 'right-hideuser' => 'පරිශීලක නාමයක් වාරණය කරමින්, එය ප්‍රජාව වෙතින් සඟවන්න', 'right-ipblock-exempt' => 'අන්තර්ජාල ලිපින වාරණයන්, ස්වයංක්‍රීය-වාරණයන් හා පරාස වාරණයන් මඟ හරින්න', 'right-proxyunbannable' => 'ප්‍රතියුක්තයන්ගේ ස්වයංක්‍රීයව වාරණයන් මඟහරින්න', +'right-unblockself' => 'ඔවුන් විසින්ම වාරණයෙන් මුදවීම', 'right-protect' => 'ආරක්ෂණ මට්ටම් වෙනස් කරමින් ආරක්ෂිත පිටු සංස්කරණය කරන්න', 'right-editprotected' => 'ආරක්ෂිත පිටු සංස්කරණය කරන්න (තීරු-දර්ශන ආරක්ෂණය විරහිත)', 'right-editinterface' => 'පරිශීලක අතුරු-මුව සංස්කරණය කරන්න', @@ -1402,7 +1429,6 @@ HTML ටැගයන් පිරික්සන්න.', 'right-siteadmin' => 'දත්ත-ගබඩාව අවුරන්න හා ඇවුරුම ඉවත් කරන්න', 'right-reset-passwords' => 'අනෙක් පරිශීලකගේ මුරපදය ප්‍රතිෂ්ඨාපනය කරන්න', 'right-override-export-depth' => '5වන මට්ටම දක්වා සබැඳි පිටු ද සහිතව පිටු නිර්යාත කරන්න', -'right-versiondetail' => 'විස්කෘත මෘදුකාංග අනුවාද විස්තර පෙන්වන්න', 'right-sendemail' => 'අනෙක් පරිශීලකයන්ට ඊ-ලිපි යවන්න', # User rights log @@ -1453,14 +1479,9 @@ HTML ටැගයන් පිරික්සන්න.', 'recentchanges-legend' => '‍නව වෙනස්වීම් සැකසුම් තෝරාගැනීම', 'recentchangestext' => 'මෙම පිටුවේ විකියට සිදුකල ඉතා මෑත වෙනස්වීම් පසුහඹන්න.', 'recentchanges-feed-description' => 'මෙම පෝෂකයෙහි විකියට බොහෝ මෑතදී සිදුකල වෙනස්වීම් හෙළිකරන්න.', -'recentchanges-label-legend' => 'පුරාවෘත්තය : $1', -'recentchanges-legend-newpage' => '$1 - නව පිටුව', 'recentchanges-label-newpage' => 'මෙම සංස්කරණය නව පිටුවක් නිර්මාණය කරන ලදී', -'recentchanges-legend-minor' => '$1- සුළු සංස්කරණය', 'recentchanges-label-minor' => 'මෙය සුළු සංස්කරණයකි', -'recentchanges-legend-bot' => '$1 - bot සංස්කරණය', 'recentchanges-label-bot' => 'මෙම සංස්කරණය රොබෝවක් (bot) විසින් කරනලද්දකි', -'recentchanges-legend-unpatrolled' => '$1 - විමර්ශනය නොකළ සංස්කරණ', 'recentchanges-label-unpatrolled' => 'මෙම සංස්කරණය තවම විමර්ශනය කර නොමැත', 'rcnote' => "$4 දින, $5 වන තෙක්, අවසන් {{PLURAL:$2|දිනදී|දින '''$2''' තුලදී}} සිදුවී ඇති, {{PLURAL:$1| '''1''' ක් වෙනස|අවසන් වෙනස්වීම් '''$1''' }} පහත දැක්වේ.", 'rcnotefrom' => "'''$2''' න් පසු සිදුවී ඇති වෙනස්කම් මෙහි පහත දැක්වේ ('''$1''' ක ප්‍රමාණයක උපරිමයක් පෙන්වා ඇත).", @@ -1509,6 +1530,9 @@ HTML ටැගයන් පිරික්සන්න.', 'upload_directory_missing' => 'උඩුගත ඩිරෙක්ටරිය ($1) සොයාගත නොහැකි අතර එය වෙබ්-සේවාදායකය විමින් තැනිය නොහැකි විය.', 'upload_directory_read_only' => 'වෙබ්-සේවාදායකය විසින් උඩුගත ඩිරෙක්ටරිය ($1) වෙත ලිවීමට නොහැකි විය.', 'uploaderror' => 'උඩුගත කිරීම් දෝෂයක්', +'upload-recreate-warning' => "'''අවවාදයයි: මෙම නම තිබූ ගොනුවක් මකාදැමීමට හෝ ගෙනයෑමට හෝ ලක්ව ඇත.''' + +ඔබගේ පහසුව තකා මෙම පිටුවවෙහි මකාදැමුමෙහි හා ගෙනයෑමෙහි ලඝු සටහන මෙහි දැක්වේ:", 'uploadtext' => "ගොනු උඩුගත කිරීම සඳහා පහත ආකෘති පත්‍රය භාවිතා කරන්න. පෙරදී උඩුගතකෙරුණු ගොනු නැරඹුම හෝ ගවේෂණය සඳහා [[Special:FileList|උඩුගතකෙරුණු ගොනු ලැයිස්තුව]] වෙත යන්න, (යළි)උඩුගතකෙරුම්ද [[Special:Log/upload|උඩුගතකෙරුම් ලඝු-සටහන]] තුල සටහන් කර ඇති අතර, මකාදැමුම් [[Special:Log/delete|මකාදැමුම් ලඝු-සටහන]] හි ඇත. @@ -1544,6 +1568,17 @@ HTML ටැගයන් පිරික්සන්න.', 'filetype-banned-type' => "'''\".\$1\"''' යනු අවසරලත් ගොනු වර්ගයක් නොවේ. අවසරලත් {{PLURAL:\$3|ගොනු වර්ගය|ගොනු වර්ගයන්}} වන්නේ \$2.", 'filetype-missing' => 'ගොනුවට (".jpg" වැනි) ප්‍රසර්ජනයක් නොමැත.', +'empty-file' => 'ඔබ ඉදිරිපත්කල ගොනුව හිස් එකකි.', +'file-too-large' => 'ඔබ විසින් යොමන ලද ගොනුව පමණට වඩා විශෘලය.', +'filename-tooshort' => 'ගොනුනාමය කෙටි වැඩිය.', +'filetype-banned' => 'මෙම වර්ගය තහනම් කර ඇත.', +'verification-error' => 'මෙම ගොනුව සත්‍යායනය කිරීමෙන් සමත් වූ බවට පිළිගත නොහැක.', +'hookaborted' => 'දිගු ආකුශයක් (කොක්කක්) විසින් ඔබ උත්සාහ කල වෙනස්කිරීම රෝධනය කරන ලදි.', +'illegal-filename' => 'පිටු-නාමයට ඉඩ දෙනු නොලැබේ.', +'overwrite' => 'දැනට බවතින ගොනුවක් උපරිලේඛනය (උඩින් ලිවීඹ) කෙරුමට ඉඩදෙනු නොලැබේ.', +'unknown-error' => 'හඳුනා නොගත් දෝෂයක් ඇතිවිය.', +'tmp-create-error' => 'තාවකාලික ගොනුවක් තැනීම කල නොහැකි විය.', +'tmp-write-error' => 'තාවකාලික ගොනුව ලිවීමේදී දෝෂයක් හට ගැනුනි.', 'large-file' => 'ගොනුවල විශාලත්වය $1 ට වඩා වැඩි නොවීම නිර්දේශ කරනු ලැබේ; මෙම ගොනුව $2 ක් විශාලය.', 'largefileserver' => 'සේවාදායකයේ හැඩගස්වීම ප්‍රකාර ඉඩ ලබා දෙන ප්‍රමාණයට වඩා මෙම ගොනුව විශාලය.', @@ -1573,13 +1608,14 @@ HTML ටැගයන් පිරික්සන්න.', 'file-exists-duplicate' => 'මෙම ගොනුව පහත {{PLURAL:$1|ගොනුවෙහි|ගොනු වල}} අනුපිටපතකි:', 'file-deleted-duplicate' => 'මෙම ([[:$1]]) ගොනුවට සර්වසාම්‍ය ගොනුවක් පෙරදී මකාදමා ඇත. එය යළි-උඩුගත කිරීම සඳහා කටයුතු කිරීමට පෙර එම ගොනුවෙහි මකාදැමීම් ඉතිහාසය ඔබ විසින් පරීක්ෂා කර බැලිය යුතුව ඇත.', -'successfulupload' => 'සාර්ථක උඩුගත කිරීමකි', 'uploadwarning' => 'උඩුගත කිරීම් අවවාදයකි', 'uploadwarning-text' => 'කරුණාකර පහත ගොනු විස්තරය වෙනස් කර නැවත උත්සාහ කරන්න.', 'savefile' => 'ගොනුව සුරකින්න', 'uploadedimage' => '"[[$1]]" උඩුගත කරන ලදි', 'overwroteimage' => ' "[[$1]]" හි නව අනුවාදයක් උඩුගත කරන ලදි', 'uploaddisabled' => 'උඩුගත කිරීම් අක්‍රීය කර ඇත', +'copyuploaddisabled' => 'URL මගින් උඩුගත කිරීම අක්‍රීය කොට ඇත.', +'uploadfromurl-queued' => 'ඔබගේ උඩුගත කිරීම පෙළ ගස්වා ඇත.', 'uploaddisabledtext' => ' {{SITENAME}} හි ගොනු උඩුගත කිරීම් අක්‍රීය කර ඇත.', 'php-uploaddisabledtext' => 'PHP හි ගොනු උඩුගතකිරීම් අක්‍රීය කොට ඇත. කරුණාකර ගොනු_උඩුගතකිරීම් පරිස්ථිතිය පරික්ෂා කර බලන්න.', @@ -1615,6 +1651,14 @@ JD # ජෙනොප්ටික් MGP # පෙන්ටැක්ස් PICT # විවිධ. # ', +'upload-success-subj' => 'සාර්ථක උඩුගත කිරීමකි', +'upload-success-msg' => '[$2]වෙතින් ඔබගේ උඩුගත කිරීම සාර්ථක විය. එය මෙහි ඇත: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'උඩුගත කිරීමේ ගැටළුව', +'upload-failure-msg' => 'ඔබගේ [$2] උඩුගතකිරීම හා බැඳි ගැටළුවක් විය: + +$1', +'upload-warning-subj' => 'උඩුගතකිරීම් අවවාදය', +'upload-warning-msg' => '[$2] වෙතින් ඔබගේ උඩුගතකෙරුමෙහි ගැටළුවක් පැන නැගිනි. මෙම ගැටළුව විසඳනු වස් [[Special:Upload/stash/$1|උඩුගතකෙරුම් ආකෘතිපත්‍රය]] වෙත පෙරළා පිවිසීමට ඔබට හැකියාව ඇත.', 'upload-proto-error' => 'සදොස් මූලලේඛය', 'upload-proto-error-text' => 'දුරස්ථ උඩුගත කිරීම් සඳහා, කලාප ලිපිනයන් (URLලයන්) http:// හෝ ftp:// යන්නෙන් ආරම්භ විය යුතුයි.', @@ -1680,6 +1724,7 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization බලන්න.', 'listfiles_search_for' => 'මාධ්‍ය නාමය සඳහා ගවේෂණය කරන්න:', 'imgfile' => 'ගොනුව', 'listfiles' => 'ගොනු ලැයිස්තුව', +'listfiles_thumb' => 'සිඟිති-රූපය', 'listfiles_date' => 'දිනය', 'listfiles_name' => 'නම', 'listfiles_user' => 'පරිශීලක', @@ -1796,8 +1841,8 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization බලන්න.', 'statistics-edits' => '{{SITENAME}} පිහිටුවීමෙන් අනතුරුව සිදුවූ පිටු සංස්කරණයන්', 'statistics-edits-average' => 'එක් පිටුවකට සංස්කරණයන්හි මධ්‍යක අගය', 'statistics-views-total' => 'නැරඹුම් එකතුව', +'statistics-views-total-desc' => 'විශේෂ හා දැනට නොපවතින පිටු වල දසුන් එක් කොට නැත', 'statistics-views-peredit' => 'එක් සංස්කරණයකට නැරඹුම් ගණන', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue කාර්යය පෝලිමෙහි] දිග', 'statistics-users' => 'ලේඛනගත [[Special:ListUsers|පරිශීලකයෝ]]', 'statistics-users-active' => 'ක්‍රියාශීලි පරිශීලකයන්', 'statistics-users-active-desc' => 'පසුගිය {{PLURAL:$1|දිනය|දින $1}} තුලදී කිසියම් ක්‍රියාවක් සිදු කල පරිශීලකයන්', @@ -1811,11 +1856,11 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization බලන්න.', 'doubleredirects' => 'ද්විත්ව යළි-යොමුකිරීම්', 'doubleredirectstext' => 'අනෙකුත් යළි-යොමුවීම් පිටුවලට යළි-යොමුවන පිටුවල ලැයිස්තුවක් මෙම පිටුවේ දැක්වේ. -එක් එක් පේළියක අඩංගු වන්නේ පළමු හා දෙවන යළි-යොමුවීම් වලට සබැඳි හා ඒ සමග පළමු යළි-යොමුව එල්ල වන්නාවූ, සාමාන්‍යයෙන් "සත්‍ය" ඉලක්ක පිටුව වන, දෙවන යළි-යොමුවේ ඉලක්කයයි.කපා හැරි නිවේශිතයන් පිලිබඳ ගැටළු විසඳා ඇත.', +එක් එක් පේළියක අඩංගු වන්නේ පළමු හා දෙවන යළි-යොමුවීම් වලට සබැඳි හා ඒ සමග පළමු යළි-යොමුව එල්ල වන්නාවූ, සාමාන්‍යයෙන් "සත්‍ය" ඉලක්ක පිටුව වන, දෙවන යළි-යොමුවේ ඉලක්කයයි.කපා හැරි නිවේශිතයන් පිලිබඳ ගැටළු විසඳා ඇත.', 'double-redirect-fixed-move' => '[[$1]] ගෙන ගොස් ඇත, එය දැන් [[$2]] වෙතට යළි-යොමුවකි', 'double-redirect-fixer' => 'යළි-යොමුවීම් උපස්ථායක', -'brokenredirects' => 'බිඳුනු යළි-යොමු (Broken redirects)', +'brokenredirects' => 'භින්න වූ ආපසු හැරවුම්', 'brokenredirectstext' => 'මෙහි පහත දැක්වෙන යළි-යොමුවීම් නොපවතින පිටු වලට සබැඳේ:', 'brokenredirects-edit' => 'සංස්කරණය', 'brokenredirects-delete' => 'මකා දැමීම', @@ -1834,6 +1879,8 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization බලන්න.', 'nmembers' => '{{PLURAL:$1|එක් සාමාජිකයෙකි|සාමාජීකයන් $1 කි}}', 'nrevisions' => '{{PLURAL:$1|එක් සංශෝධනයකි|සංශෝධන $1 කි }}', 'nviews' => ' {{PLURAL:$1|නැරඹුම් එකකි|නැරඹුම් $1 කි}}', +'nimagelinks' => '{{PLURAL:$1|පිටු|පිටු}} $1 ක භාවිතාකර ඇත', +'ntransclusions' => '{{PLURAL:$1|පිටු|පිටු}} $1 ක භාවිතාකර ඇත', 'specialpage-empty' => 'මෙම වාර්තාවට ප්‍රතිඵල කිසිවක් නොමැත.', 'lonelypages' => 'හුදෙකලා පිටු', 'lonelypagestext' => 'පහත පිටු, {{SITENAME}} හි අනෙකුත් පිටුවලින් සබැඳි නොමැත.', @@ -1858,7 +1905,7 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization බලන්න.', 'prefixindex' => 'උපසර්ගය සහිත සියළු පිටු', 'shortpages' => 'කෙටි පිටු', 'longpages' => 'දිගු පිටු', -'deadendpages' => 'ආවෘත-අගැති (Dead-end) පිටු', +'deadendpages' => 'අපගත-සීමා පිටු', 'deadendpagestext' => 'පහත පිටු, {{SITENAME}} හි අනෙකුත් පිටු වෙත සබැඳී නොමැත.', 'protectedpages' => 'ආරක්ෂිත පිටු', 'protectedpages-indef' => 'අනිශ්චිත ආරක්ෂණයන් පමණයි', @@ -1890,7 +1937,7 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization බලන්න.', 'suppress' => 'ප්‍රමාද දෝෂය', # Book sources -'booksources' => 'ග්‍රන්ථ මූලාශ්‍ර', +'booksources' => 'මූලාශ්‍ර පොත්', 'booksources-search-legend' => 'ග්‍රන්ථ මූලාශ්‍ර සඳහා ගවේෂණය කරන්න', 'booksources-isbn' => 'ISBN:', 'booksources-go' => 'යන්න', @@ -1992,34 +2039,40 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization බලන්න.', 'listgrouprights-removegroup-self-all' => 'සියළු කාණ්ඩයන් ස්වීය ගිණුමෙන් ඉවත් කරන්න', # E-mail user -'mailnologin' => 'යායුතු ලිපිනය නොමැත', -'mailnologintext' => 'අනෙකුත් පරිශීලකයන්හට විද්‍යුත්-තැපැල් යැවුමට පෙරාතුව, ඔබ [[Special:UserLogin|ප්‍රවිෂ්ට වී]], ඔබගේ [[Special:Preferences|අභිරුචියන්හි]] නීතික විද්‍යුත්-තැපැල් ලිපිනයක් සඳහන් කර තිබිය යුතුය.', -'emailuser' => 'මෙම පරිශීලක වෙත විද්‍යුත්-ලිපියක් යවන්න', -'emailpage' => ' පරිශීලකට විද්‍යුත්-ලිපියක් යවන්න', -'emailpagetext' => 'මෙම පරිශීලකයා හට විද්‍යුත්-තැපෑල් පණිවුඩයක් යැවීම සඳහා මෙම ආකෘති පත්‍රය භාවිතා කිරීමට ඔබ හට හැක. +'mailnologin' => 'යායුතු ලිපිනය නොමැත', +'mailnologintext' => 'අනෙකුත් පරිශීලකයන්හට විද්‍යුත්-තැපැල් යැවුමට පෙරාතුව, ඔබ [[Special:UserLogin|ප්‍රවිෂ්ට වී]], ඔබගේ [[Special:Preferences|අභිරුචියන්හි]] නීතික විද්‍යුත්-තැපැල් ලිපිනයක් සඳහන් කර තිබිය යුතුය.', +'emailuser' => 'මෙම පරිශීලක වෙත විද්‍යුත්-ලිපියක් යවන්න', +'emailpage' => ' පරිශීලකට විද්‍යුත්-ලිපියක් යවන්න', +'emailpagetext' => 'මෙම පරිශීලකයා හට විද්‍යුත්-තැපෑල් පණිවුඩයක් යැවීම සඳහා මෙම ආකෘති පත්‍රය භාවිතා කිරීමට ඔබ හට හැක. ලබන්නා විසින් සෘජු ලෙස ඔබ හට පිළිතුරු එවනු හැකි වන පරිදි, ඔබ විසින් [[Special:Preferences|ඔබගේ පරිශීලක අභිරුචියන්]] හි ඇතුළත් කල විද්‍යුත්-තැපැල් ලිපිනය, විද්‍යුත්-තැපෑලෙහි "වෙතින්" ලිපිනයෙහි පෙන්නුම් කරනු ඇත.', -'usermailererror' => 'Mail object විසින් පහත දෝෂය එවනලදී:', -'defemailsubject' => '{{SITENAME}} විද්‍යුත්-තැපෑල', -'noemailtitle' => 'විද්‍යුත්-ලිපිනයක් නොමැත', -'noemailtext' => 'මෙම පරිශීලකයා නීතික විද්‍යුත්-තැපැල් ලිපිනයක් සඳහන් කර නැත.', -'nowikiemailtitle' => 'විද්‍යුත්-තැපෑලයන් කිසිවක් සඳහා අවසර නොමැත', -'nowikiemailtext' => 'අනෙකුත් පරිශීලකයන්ගෙන් විද්‍යුත්-තැපැල් ලැබ නොගැනුම මෙම පරිශිලකයා විසින් තෝරාගෙන ඇත.', -'email-legend' => 'වෙනත් {{SITENAME}} පරිශීලකයෙකුට විද්‍යුත්-තැපෑලක් යවන්න', -'emailfrom' => 'වෙතින්:', -'emailto' => 'වෙතට:', -'emailsubject' => 'විෂයය:', -'emailmessage' => 'පණිවුඩය:', -'emailsend' => 'යවන්න', -'emailccme' => 'මගේ පණිවුඩයෙහි පිටපතක් මා වෙත විද්‍යුත්-තැපැල් කරන්න.', -'emailccsubject' => '$1: $2 වෙත ඔබගේ පණිවුඩය පිටපත් කරන්න', -'emailsent' => 'විද්‍යුත්-තැපෑල යවන ලදි', -'emailsenttext' => 'ඔබගේ විද්‍යුත්-තැපැල් පණිවුඩය යවා ඇත.', -'emailuserfooter' => '{{SITENAME}} හි " පරිශීලකට විද්‍යුත්-තැපැලක් යවන්න" ශ්‍රිතය අනුසාරයෙන් $1 විසින් $2 වෙත විද්‍යුත්-තැපෑලක් යවන ලදි.', +'usermailererror' => 'Mail object විසින් පහත දෝෂය එවනලදී:', +'defemailsubject' => '{{SITENAME}} විද්‍යුත්-තැපෑල', +'usermaildisabled' => 'ඔබගේ විද්‍යුත්-තැපෑල අක්‍රීය කොට ඇත', +'usermaildisabledtext' => 'මෙම විකියෙහි අනෙකුත් පරිශීලකයන් හට විද්‍යුත්-ගැපැල් යැවීමට ඔබ හට නොහැක', +'noemailtitle' => 'විද්‍යුත්-ලිපිනයක් නොමැත', +'noemailtext' => 'මෙම පරිශීලකයා නීතික විද්‍යුත්-තැපැල් ලිපිනයක් සඳහන් කර නැත.', +'nowikiemailtitle' => 'විද්‍යුත්-තැපෑලයන් කිසිවක් සඳහා අවසර නොමැත', +'nowikiemailtext' => 'අනෙකුත් පරිශීලකයන්ගෙන් විද්‍යුත්-තැපැල් ලැබ නොගැනුම මෙම පරිශිලකයා විසින් තෝරාගෙන ඇත.', +'email-legend' => 'වෙනත් {{SITENAME}} පරිශීලකයෙකුට විද්‍යුත්-තැපෑලක් යවන්න', +'emailfrom' => 'වෙතින්:', +'emailto' => 'වෙතට:', +'emailsubject' => 'විෂයය:', +'emailmessage' => 'පණිවුඩය:', +'emailsend' => 'යවන්න', +'emailccme' => 'මගේ පණිවුඩයෙහි පිටපතක් මා වෙත විද්‍යුත්-තැපැල් කරන්න.', +'emailccsubject' => '$1: $2 වෙත ඔබගේ පණිවුඩය පිටපත් කරන්න', +'emailsent' => 'විද්‍යුත්-තැපෑල යවන ලදි', +'emailsenttext' => 'ඔබගේ විද්‍යුත්-තැපැල් පණිවුඩය යවා ඇත.', +'emailuserfooter' => '{{SITENAME}} හි " පරිශීලකට විද්‍යුත්-තැපැලක් යවන්න" ශ්‍රිතය අනුසාරයෙන් $1 විසින් $2 වෙත විද්‍යුත්-තැපෑලක් යවන ලදි.', + +# User Messenger +'usermessage-summary' => 'පද්ධති පණිවුඩයක් තබමි.', +'usermessage-editor' => 'පද්ධති පණිවුඩ කරු', # Watchlist 'watchlist' => 'මගේ මුර-ලැයිස්තුව', 'mywatchlist' => 'මගේ මුර ලැයිස්තුව', -'watchlistfor' => "('''$1''' සඳහා)", +'watchlistfor2' => '$1 සඳහා ($2)', 'nowatchlist' => 'ඔබගේ මුර-ලැයිස්තුවේ කිසිදු අයිතමයක් නොමැත.', 'watchlistanontext' => 'ඔබගේ මුර-ලැයිස්තුවෙහි අයිතම නැරඹීමට හෝ සංස්කරණය කිරීමට හෝ කරුණාකර $1 සපුරන්න.', 'watchnologin' => 'ප්‍රවිෂ්ට වී නොමැත', @@ -2061,32 +2114,35 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization බලන්න.', 'enotif_lastvisited' => 'ඔබගේ අවසාන පිවිසුමට පසු සිදුවූ සියළු වෙනස්වීම් නැරඹුමට $1 බලන්න.', 'enotif_lastdiff' => 'මෙම වෙනස නැරඹීම සඳහා $1 බලන්න.', 'enotif_anon_editor' => 'නිර්නාමික පරිශීලක $1', -'enotif_body' => 'සාදර $WATCHINGUSERNAME, +'enotif_body' => 'හිතවත් $WATCHINGUSERNAME, -{{SITENAME}} හි $PAGETITLE පිටුව, $PAGEEDITDATE දිනදී $PAGEEDITOR විසින් $CHANGEDORCREATED කර ඇති අතර, වත්මන් අනුවාදය සඳහා $PAGETITLE_URL බලන්න. +{{SITENAME}} මත ඇති $PAGETITLE පිටුව $PAGEEDITOR විසින් $PAGEEDITDATE වැනි දින $CHANGEDORCREATED, වර්තමාන සංශෝධනය සදහා $PAGETITLE_URL බලන්න. $NEWPAGE -සංස්කාරකගේ සාරාංශය: $PAGESUMMARY $PAGEMINOREDIT +Editor\'s summary: $PAGESUMMARY $PAGEMINOREDIT -සංස්කාරක හා සම්බන්ධවීමට: -තැපෑල: $PAGEEDITOR_EMAIL -විකි: $PAGEEDITOR_WIKI +Contact the editor: +mail: $PAGEEDITOR_EMAIL +wiki: $PAGEEDITOR_WIKI -ඔබ විසින් මෙම පිටුව වෙත පිවිසුනොත් මිස ඉදිරියෙහිදී සිදුවිය හැකි වෙනස්වීම් අභිමුඛයෙහි වෙනත් කිසිම දෑනුම්දීම් සිදුනොවනු ඇත. -ඔබගේ මුර ලැයිස්තුවෙහි ඔබගේ සියළු මුරකෙරුණු පිටු සඳහා දැනුම්දීමේ සලකුණු ප්‍රත්‍යාරම්භ කෙරුමද ඔබ හට සිදුකල හැක. +There will be no other notifications in case of further changes unless you visit this page. +You could also reset the notification flags for all your watched pages on your watchlist. - ඔබගේ හිතවත් {{SITENAME}} හි දැනුම්දීමේ පද්ධතිය + Your friendly {{SITENAME}} notification system -- -ඔබගේ මුරලැයිස්තු පරිස්ථිතීන් වෙනස්කිරීම සඳහා -{{fullurl:{{#special:Watchlist}}/edit}} වෙත පිවිසෙන්න +To change your email notification settings, visit +{{fullurl:{{#special:Preferences}}}} + +To change your watchlist settings, visit +{{fullurl:{{#special:Watchlist}}/edit}} -ඔබගේ මුරලැයිස්තුවෙන් පිටුව මකා දැමීම සඳහා වූ -$UNWATCHURL වෙත පිවිසෙන්න +To delete the page from your watchlist, visit +$UNWATCHURL -ප්‍රතිපෝෂණය හා වැඩිමනත් සහාය: +Feedback and further assistance: {{fullurl:{{MediaWiki:Helppage}}}}', # Delete @@ -2142,7 +2198,10 @@ $UNWATCHURL වෙත පිවිසෙන්න 'revertpage-nouser' => '(පරිශිලක නම ඉවත් කිරීමෙන්) සංස්කරණයන් [[User:$1|$1]] මඟින් කළ අවසන් සංශෝධනයට ප්‍රතිවර්තනය කෙරිණි', 'rollback-success' => ' $1 විසින් සිදුකල සංස්කරණයන් ප්‍රතිවර්තනය කරන ලදි; $2 ගේ අවසන් අනුවාදය වෙතට යළි වෙනස් කරන ලදි .', -'sessionfailure' => 'ඔබගේ ප්‍රවිෂ්ට වීමේ සැසියෙහි කිසියම් ගැටළුකාරී තත්ත්වයක් පැන නැගී ඇත; + +# Edit tokens +'sessionfailure-title' => 'සැසි ඇණ හිටීම', +'sessionfailure' => 'ඔබගේ ප්‍රවිෂ්ට වීමේ සැසියෙහි කිසියම් ගැටළුකාරී තත්ත්වයක් පැන නැගී ඇත; සැසි පරිග්‍රහණයට එරෙහි ආරක්ෂිත පියවරක් ලෙස මෙම ක්‍රියාව අත්හැරදමා ඇත. "පසුපසට" බොත්තම ක්ලික් කර ඔබ පැමිණි පිටුව යළිපූරණය නොට නැවත උත්සාහ කරන්න.', @@ -2234,7 +2293,7 @@ $2 ගේ අවසන් අනුවාදය වෙතට යළි වෙන එක්කෝ ඔබගේ සබැඳිය සදොස්ය, නැතහොත් සංශෝධනය ප්‍රතිෂ්ඨාපනයට හෝ සංරක්ෂිතයෙන් ඉවත් කිරීමට හෝ ලක්ව තිබේ.', 'undelete-nodiff' => 'පූර්ව සංශෝධන කිසිවක් සොයා ගත නොහැකි විය.', 'undeletebtn' => 'ප්‍රතිෂ්ඨාපනය', -'undeletelink' => 'නරඹන්න/ප්‍රතිෂ්ඨාපනය කරන්න', +'undeletelink' => 'බලන්න/යලි පිහිටුවන්න', 'undeleteviewlink' => 'නරඹන්න', 'undeletereset' => 'ප්‍රත්‍යාරම්භ කරන්න', 'undeleteinvert' => 'තෝරාගැනුම කණපිට පෙරලන්න', @@ -2280,19 +2339,23 @@ $1', 'month' => 'මෙම මස (හා ඉන් පෙර) සිට:', 'year' => 'මෙම වසර (හා ඉන් පෙරාතුව) සිට:', -'sp-contributions-newbies' => 'නව ගිණුම් වලට පමණක් අදාල දායකත්ව පෙන්වන්න', -'sp-contributions-newbies-sub' => 'නව ගිණුම් වලට අදාල', -'sp-contributions-newbies-title' => 'නව ගිණුම් වලට අදාල පරිශීලක දායකත්ව', -'sp-contributions-blocklog' => 'වාරණ සටහන', -'sp-contributions-deleted' => 'මකාදැමූ පරිශීලක දායකත්වයන්', -'sp-contributions-logs' => 'සටහන්', -'sp-contributions-talk' => 'සාකච්ඡාව', -'sp-contributions-userrights' => 'පරිශීලක හිමිකම් කළමනාකරණය', -'sp-contributions-blocked-notice' => 'මෙම පරිශීලකයා දැනට අවහිර කරනු ලැබ තිබේ. +'sp-contributions-newbies' => 'නව ගිණුම් වලට පමණක් අදාල දායකත්ව පෙන්වන්න', +'sp-contributions-newbies-sub' => 'නව ගිණුම් වලට අදාල', +'sp-contributions-newbies-title' => 'නව ගිණුම් වලට අදාල පරිශීලක දායකත්ව', +'sp-contributions-blocklog' => 'වාරණ සටහන', +'sp-contributions-deleted' => 'මකාදැමූ පරිශීලක දායකත්වයන්', +'sp-contributions-uploads' => 'උඩුගත කිරීම්', +'sp-contributions-logs' => 'සටහන්', +'sp-contributions-talk' => 'සාකච්ඡාව', +'sp-contributions-userrights' => 'පරිශීලක හිමිකම් කළමනාකරණය', +'sp-contributions-blocked-notice' => 'මෙම පරිශීලකයා දැනට අවහිර කරනු ලැබ තිබේ. නවතම අවහිර කිරීම් ලඝු සටහන පහත යොමුවෙන් සපයනු ලැබේ:', -'sp-contributions-search' => 'දායකත්ව පිළිබඳ ගවේෂණය කරන්න', -'sp-contributions-username' => 'පරිශීලක නාමය හෝ IP ලිපිනය:', -'sp-contributions-submit' => 'ගවේෂණය කරන්න', +'sp-contributions-blocked-notice-anon' => 'මෙම අන්තර්ජාල ලිපිනය දැනට වාරණය කොට ඇත. +ඔබගේ උපමානයන් සඳහා නවතම වාරණ ලඝු නිවේශිතය මෙහි පහත දක්වා ඇත:', +'sp-contributions-search' => 'දායකත්ව පිළිබඳ ගවේෂණය කරන්න', +'sp-contributions-username' => 'පරිශීලක නාමය හෝ IP ලිපිනය:', +'sp-contributions-toponly' => 'නවතම අනුවාදයන් වන සංස්කරණයන් පමණක් පෙන්වයි', +'sp-contributions-submit' => 'ගවේෂණය කරන්න', # What links here 'whatlinkshere' => 'සබැඳි පිටු', @@ -2354,7 +2417,6 @@ $1', 'ipb-edit-dropdown' => 'සංස්කරණ වාරණ හේතූන්', 'ipb-unblock-addr' => '$1වාරණය අත්හිටුවන්න', 'ipb-unblock' => 'පරිශීලක නාමයක හෝ අන්තර්ජාල ලිපිනයක වාරණය අත්හිටුවන්න', -'ipb-blocklist-addr' => '$1 සඳහා පවතින වාරණයන් නරඹන්න', 'ipb-blocklist' => 'පවතින වාරණයන් නරඹන්න', 'ipb-blocklist-contribs' => '$1 සඳහා දායකත්වයන්', 'unblockip' => 'පරිශීලකයාගේ වාරණය අත්හිටුවන්න', @@ -2362,7 +2424,7 @@ $1', 'ipusubmit' => 'මෙම වාරණය කිරීම අත්හිටුවන්න', 'unblocked' => '[[User:$1|$1]] වාරණය අත්හිටුවා ඇත', 'unblocked-id' => '$1 වාරණය ඉවත් කරගන්නා ලදි', -'ipblocklist' => 'වාරණයකල IP ලිපින හා පරිශීලක-නාම', +'ipblocklist' => 'වාරණය කල පරිශීලකයන්', 'ipblocklist-legend' => 'වාරණය කෙරුනු පරිශීලකයා සොයන්න', 'ipblocklist-username' => 'පරිශීලක නාමය හෝ IP ලිපිනය:', 'ipblocklist-sh-userblocks' => 'ගිණුම් වාරණයන් $1', @@ -2399,7 +2461,7 @@ $1 ගේ වාරණයට හේතුව මෙය වේ: "$2"', වර්තමානයෙහි ක්‍රියාත්මක වන තහනම් හා වාරණ සඳහා [[Special:IPBlockList|අන්තර්ජාල ලිපිනයන් වාරණ ලැයිස්තුව]] බලන්න.', 'unblocklogentry' => '$1 හි වාරණය අත්හිටුවන ලදි', 'block-log-flags-anononly' => 'නිර්නාමික පරිශීලකයන් පමණි', -'block-log-flags-nocreate' => 'ගිණුම් තැනීම අක්‍රීයකර ඇත', +'block-log-flags-nocreate' => 'ගිණුම් තැනීම අක්‍රීය කර ඇත', 'block-log-flags-noautoblock' => 'ස්වයංක්‍රීය වාරණය අක්‍රීය කොට ඇත', 'block-log-flags-noemail' => 'විද්‍යුත්-තැපෑල වාරණය කොට ඇත', 'block-log-flags-nousertalk' => 'ස්වීය සාකච්ඡා පිටුව සංස්කරණය කල නොහැක', @@ -2432,6 +2494,8 @@ $1 දැනටමත් වාරණය කොට ඇත. ඔබ හට ගිණුමක් තැනිය නොහැක', 'cant-block-while-blocked' => 'ඔබ වාරණයට ලක්ව සිටින අතරතුර අනෙක් පරිශීලකයන් වාරණය කිරීමට ඔබ හට නොහැක.', 'cant-see-hidden-user' => 'අවහිර කිරීමට උත්සාහ කරන පරිශීලකයා දැනටමත් අවහිර කර සඟවා ඇත.පරිශීලක සැඟවුම් අයිතිය ඔබ සතු නොවන බැවින් ,ඔබට පරිශීලක අවහිරය නැරඹීමට හෝ සංස්කරණය කිරීමට නොහැකිය.', +'ipbblocked' => 'ඔබද වාරණය කොට ඇති බැවින් අනෙකුත් පරිශීලකයන් වාරණය කිරීම හෝ වාරණයෙන් මුදවීම ඔබ හට කල නොහැක', +'ipbnounblockself' => 'ඔබ විසින්ම ඔබගේ වාරණයෙන් බැහැර වීමට ඉඩදෙනු නොලැබේ', # Developer tools 'lockdb' => 'දත්ත-ගබඩාව අවුරන්න', @@ -2470,6 +2534,18 @@ $1 දැනටමත් වාරණය කොට ඇත. '''අවවාදයයි!''' මෙම වෙනස ජනප්‍රිය පිටුවකට උග්‍ර හා අනපේක්‍ෂිත වෙනස්කමක් විය හැක; බිඳක් නැවැතී මෙහි ප්‍රතිවිපාක සිතාබලන්න.", +'movepagetext-noredirectfixer' => "පහත ආකෘතිය භාවිතා කිරීමෙන්, එහි සියළු ඉතිහාසය නව නාමයට අනුයුක්ත කරමින්, පිටුවක නම-වෙනස් කිරීම සිදුවේ. +නව නාමය වෙත යළි-යොමු පිටුවක් බවට පැරැණි නාමය පත් වෙයි. +ආදිමය නාමය වෙත ස්වයංක්‍රීයව එල්ල වන යළි-යොමු යාවත්කාලීන කිරීම් ඔබට සිදු කල හැක. +එසේ සිදු කිරීමට ඔබ නොරිසි නම්, [[Special:DoubleRedirects|ද්විත්ව]] හෝ [[Special:BrokenRedirects|භින්න යළි-යොමු වීම්]] පරික්ෂා කර බැලීමට යුහුසුළු වන්න. +නියමිත යොමු කරා සබැඳියන් දිගටම එල්ල වන බව සහතික කිරීම ඔබගේ වගකීමකි. + +නව නාමය සහිත පිටුවක් දැනටමත් තිබේ නම්, එය හිස් නම් හෝ යළි-යොමුවක් හා එහි පූර්ව සංස්කරණ ඉතිහාසයක් නොමැති නම් මිස, පිටුව ගෙනයෑම සිදු ''නොකරන''' බව සලකන්න. +මෙහි අරුත වන්නේ, ඔබ විසින් අත්වැරැද්දක් සිදුවුනි නම්, නම වෙනස් කල යම් පිටුවක නම ‍වෙනස් කිරීමට පැවැති පිටුවට ආපසු නම වෙනස් කල හැකි බවත්, එනමුදු දැනට පවතින පිටුවක් අධිලිවීමකට ලක් කිරීම සිදු කල නොහැකි බවත්ය. + +'''අවවාදයයි!''' +මෙම වෙනස ජනප්‍රිය පිටුවකට උග්‍ර හා අනපේක්‍ෂිත වෙනස්කමක් විය හැක; +බිඳක් නැවැතී මෙහි ප්‍රතිවිපාක සිතාබලන්න", 'movepagetalktext' => "එය සමග ආශ්‍රිත සාකච්ඡා පිටුව ස්වයංක්‍රීය ලෙස ගෙනයාම වළක්වන '''වැළැහීම්:''' *නව පිටු නාමය යටතේ, හිස්-නොවන සාකච්ඡා පිටුවක් දැනටමත් පැවැතීම, හෝ *පහත කොටුව ඔබ විසින් නොතේරූ නිසාවෙන්. @@ -2504,7 +2580,7 @@ $1 දැනටමත් වාරණය කොට ඇත. 'movepage-page-unmoved' => ' $1 පිටුව $2 වෙත ගෙනයෑම සිදුකල නොහැකි විය.', 'movepage-max-pages' => '{{PLURAL:$1|එක් පිටුවක|පිටු $1 ක}} උපරිමයකට යටත්ව ගෙනයෑම සිදුකර ඇති අතර ස්වයංක්‍රීය ලෙස ගෙනයෑම තවදුරටත් සිදු නොවනු ඇත.', '1movedto2' => '[[$1]] යන්න [[$2]] වෙත ගෙන යන ලදි', -'1movedto2_redir' => 'යළි-යොමුකිරීමක් මගින් [[$2]] වෙත [[$1]] ගෙන යන ලදි', +'1movedto2_redir' => 'ආපසු හරවා යැවීමක් ඔස්සේ [[$2]] වෙත [[$1]] ගෙන යන ලදි', 'move-redirect-suppressed' => 'යළි-යොමුකිරීම් යටපත් කෙරිණි', 'movelogpage' => 'ගෙනයෑම් සටහන', 'movelogpagetext' => 'පහත දැක්වෙන්නේ ගෙනගිය පිටු ලැයිස්තුවකි.', @@ -2527,6 +2603,7 @@ $1 දැනටමත් වාරණය කොට ඇත. 'immobile-source-page' => 'මෙම පිටුව ගෙනයාහැක්කක් නොවේ.', 'immobile-target-page' => 'එම අන්ත ශීර්ෂයට ගෙන යෑම කල නොහැක.', 'imagenocrossnamespace' => 'ගොනුවක්, ගොනුවක්-නොවන නාමඅවකාශයකට ගෙනයෑම කල නොහැක', +'nonfile-cannot-move-to-file' => 'ගොනුවක්-නොවන්න ගොනු නාමඅවකාශයට ගෙනයෑම කල නොහැක', 'imagetypemismatch' => 'නව ගොනු ප්‍රසර්ජනය එහි වර්ගය හා නොගැලපේ', 'imageinvalidfilename' => 'ඉලක්කගත ගොනු නාමය අනීතිකයි', 'fix-double-redirects' => 'මුල් ශීර්ෂයට එල්ලවන කිසියම් යළි-යොමුවීම් උඩුගත කරන්න', @@ -2602,11 +2679,12 @@ $1 දැනටමත් වාරණය කොට ඇත. 'import-interwiki-namespace' => 'ගමනාන්ත නාමඅවකාශය:', 'import-upload-filename' => 'ගොනු-නාමය:', 'import-comment' => 'පරිකථනය:', -'importtext' => '[[Special:Export|නිර්යාත උපයුක්තය]] භාවිතා කරමින් ගොනුව මූල විකියෙන් නිර්යාත කිරීමට කාරුණික වන්න. -ඔය ඔබගේ පරිගණකයෙහි සුරැක මෙහි උඩුගත කරන්න.', +'importtext' => 'කරුණාකර [[Special:Export|නිර්යාත උපයුක්තය]] භාවිත කරමින් මූලාශ්‍ර විකිය මගින් ගොනුව නිර්යාත කරන්න . +එය ඔබේ පරිගණකයෙහි සුරක්ෂිත කොට මෙතැනට උඩුගත කරන්න.', 'importstart' => 'පිටු ආයාත කරමින්...', 'import-revision-count' => ' {{PLURAL:$1|සංශෝධනය|සංශෝධන $1 ක්}}', 'importnopages' => 'ආයාත කිරීමට කිසිදු පිටුවක් නොමැත.', +'imported-log-entries' => '{{PLURAL:$1|එක් ලඝු සටහනක්|ලඝු සටහන් $1 ක්}} ආනයනය කෙරිණි.', 'importfailed' => 'ආයාත කිරීම අසාර්ථකයි: $1', 'importunknownsource' => 'අඥාත ආයාත මූලාශ්‍ර වර්ගය', 'importcantopen' => 'ආයාත ගොනුව විවෘත කිරීමට නොහැකි විය', @@ -2647,7 +2725,7 @@ $1 දැනටමත් වාරණය කොට ඇත. 'tooltip-pt-preferences' => 'මගේ අභිරුචි', 'tooltip-pt-watchlist' => 'වෙනස්වීම් සිදුවී තිබේදැයි යන්න පිලිබඳව ඔබගේ විමසුමට ලක්ව ඇති පිටු ලැයිස්තුව', 'tooltip-pt-mycontris' => 'ඔබගේ දායකත්වයන් ලැයිස්තුව‍', -'tooltip-pt-login' => 'එය අවශ්‍ය‍යෙන් කල යුත්තක් ‍නොවුනද, ප්‍රවිෂ්ට වීම සඳහා ඔබ ධෛර්යමත් කරනු ලැබේ.', +'tooltip-pt-login' => 'ප්‍රවිෂ්ට වීම සදහා ඔබට අනුබල දෙයි; එසේ වුවත්, එය අනුගම්‍ය නොවේ', 'tooltip-pt-anonlogin' => 'එය අවශ්‍ය‍යෙන් කල යුත්තක් ‍නොවුනද, ප්‍රවිෂ්ට වීම සඳහා ඔබ ධෛර්යමත් කරනු ලැබේ.', 'tooltip-pt-logout' => 'නික්මීම', 'tooltip-ca-talk' => 'අන්තර්ගත පිටුව පිළිබඳ සාකච්ඡාව', @@ -2664,17 +2742,17 @@ $1 දැනටමත් වාරණය කොට ඇත. 'tooltip-ca-move' => 'මෙම පිටුව ගෙන යන්න', 'tooltip-ca-watch' => 'මෙම පිටුව ඔබගේ මුර-ලැයිස්තුවට එක් කරන්න', 'tooltip-ca-unwatch' => 'මෙම පිටුව ඔබගේ මුර-ලැයිස්තුවෙන් ඉවත් කරන්න', -'tooltip-search' => '{{SITENAME}} ගවේෂණය', +'tooltip-search' => '{{SITENAME}} ගවේෂණය කරන්න', 'tooltip-search-go' => 'මෙම නාමය එලෙසම ඇති පිටුවක් ඇත්නම් එය වෙත යන්න', 'tooltip-search-fulltext' => 'මෙම පෙළ අඩංගු පිටු ගවේෂණය කරන්න', -'tooltip-p-logo' => 'මුල් පිටුව', +'tooltip-p-logo' => 'මුල් පිටුව වෙත ගමන් කරන්න', 'tooltip-n-mainpage' => 'මුල් පිටුව‍ට පිවිසෙන්න', 'tooltip-n-mainpage-description' => 'මුල් පිටුව‍ට පිවිසෙන්න', -'tooltip-n-portal' => 'ව්‍යාපෘතියට අදාළව, ඔබට සිදුකල හැකි දෑ, අවශ්‍ය දෑ සොයා ගත හැකි අයුරු, යනාදී වැදගත් තොරතුරු', +'tooltip-n-portal' => 'ව්‍යාපෘති පිළිබඳ, ඔබට කල හැක්කේ කුමක්ද, තොරතුරු සොයාගත හැක්කේ කොතැනද', 'tooltip-n-currentevents' => 'කාලීන සිදුවීම් පිළිබඳ පසුබිම් තොරතුරු සොයා දැනගන්න', 'tooltip-n-recentchanges' => 'විකියෙහි මෑත වෙනස්වීම් දැක්වෙන ලැයිස්තුවක්.', 'tooltip-n-randompage' => 'අහඹු පිටුවක් ප්‍රවේශනය කරන්න', -'tooltip-n-help' => 'තොරතුරු සොයාගතහැකි තැන.', +'tooltip-n-help' => 'සොයා දැනගත හැකි තැන.', 'tooltip-t-whatlinkshere' => 'මෙය හා සබැ‍ඳෙන සියළු විකි පිටු ලැයිස්තුව', 'tooltip-t-recentchangeslinked' => 'මෙම පිටුව හා සබැඳි පිටුවල ‍නව වෙනස්වීම්', 'tooltip-feed-rss' => 'මෙම පිටුව සඳහා RSS පෝෂකය', @@ -2706,6 +2784,8 @@ $1 දැනටමත් වාරණය කොට ඇත. 'tooltip-rollback' => '"ප්‍රතිවර්තනය" එක් වරක් ක්ලික් කිරීමෙහි ප්‍රතිඵලය වනුයේ, සංස්කරණය(න්) ප්‍රතිවර්තනය වී, අවසන් දායකයා විසින් සැදූ මෙම පිටුව වෙත පිටුව ගෙන ඒමයි.', 'tooltip-undo' => '"අහෝසි" මගින් සිදුකෙරෙනුයේ මෙම සංස්කරණය ප්‍රතිවර්තනය කොට, සංස්කරණ-ආකෘතිය, පෙරදසුන් මාදිලියෙහි විවෘත කිරීමයි. සාරාංශයෙහි, මේ පිළිබඳව හේතුවක් පල කිරීමට, ඔබට ඉඩ සැලසේ.', +'tooltip-preferences-save' => 'අභිරුචීන් සුරකින්න', +'tooltip-summary' => 'කෙටි සාරාංශයක් ඇතුළත් කරන්න', # Stylesheets 'common.css' => '/* මෙහි CSS බහාලීම සියළු ඡවියයන් භාවිතා කරන පරිශීලකයන් හට බලපෑම් සිදු කල හැක */', @@ -2825,14 +2905,17 @@ $1', 'imagemaxsize' => "රූප ප්‍රමාණ සීමාව:
    ''(ගොනු විස්තර පිටු සඳහා)''", 'thumbsize' => 'සිඟිති-රූපයේ විශාලත්වය:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|පිටුව|පිටු}}', -'file-info' => '(ගොනු විශාලත්වය: $1, MIME වර්ගය: $2)', -'file-info-size' => '($1 × $2 පික්සල, ගොනු විශාලත්වය: $3, MIME ශෛලිය: $4)', +'file-info' => 'ගොනු විශාලත්වය: $1, MIME වර්ගය: $2', +'file-info-size' => '$1 × $2 පික්සල, ගොනු විශාලත්වය: $3, MIME ශෛලිය: $4', 'file-nohires' => 'මෙයට ඉහල විසර්ජනයක්(resolution) දක්වා එළඹිය නොහැක.', -'svg-long-desc' => '(SVG ගොනුව, නාමමාත්‍රිකව $1 × $2 පික්සල්, ගොනු විශාලත්වය: $3)', +'svg-long-desc' => 'SVG ගොනුව, නාමමාත්‍රිකව $1 × $2 පික්සල්, ගොනු විශාලත්වය: $3', 'show-big-image' => 'පූර්ණ විභේදනය (Full resolution)', 'show-big-image-thumb' => 'පෙර නැරඹුමෙහි විශාලත්වය: $1 × $2 පික්සල', 'file-info-gif-looped' => 'වලිත', 'file-info-gif-frames' => '$1 {{PLURAL:$1රාමුව|රාමු}}', +'file-info-png-looped' => 'ලුපගත වී ඇත', +'file-info-png-repeat' => '$1 {{PLURAL:$1|එක් වරක්| $1 වරක්}} ප්‍රතිවාදනය කෙරිණි', +'file-info-png-frames' => '$1 {{PLURAL:$1|රාමුව|රාමු}}', # Special:NewFiles 'newimages' => 'නව ගොනු ගැලරිය', @@ -2951,8 +3034,8 @@ Variants for Chinese language 'exif-colorspace' => 'වර්ණ අවකාශය', 'exif-componentsconfiguration' => 'එක් එක් සංරචකයේ අර්ථය', 'exif-compressedbitsperpixel' => 'රූප සම්පීඩන මාදිලිය', -'exif-pixelydimension' => 'නීතිකරූප පළල', -'exif-pixelxdimension' => 'නීතික රූප උස', +'exif-pixelydimension' => 'ප්‍රතිබිම්බයෙහි පළල', +'exif-pixelxdimension' => 'ප්‍රතිබිම්බයෙහි උස', 'exif-makernote' => 'නිෂ්පාදකගේ සටහන්', 'exif-usercomment' => 'පරිශීලක පරිකථනයන්', 'exif-relatedsoundfile' => 'සහසම්බන්ධිත ශ්‍රව්‍ය ගොනුව', @@ -2969,9 +3052,9 @@ Variants for Chinese language 'exif-spectralsensitivity' => 'වර්ණාවලී සංවේදිතාවය', 'exif-isospeedratings' => 'ISO වේග ඇගැයුම', 'exif-oecf' => 'ප්‍රකාශවිද්‍යුත් අනුවර්තන සාධකය', -'exif-shutterspeedvalue' => 'ෂටර වේගය', -'exif-aperturevalue' => 'විවරය', -'exif-brightnessvalue' => 'දීප්තතාවය', +'exif-shutterspeedvalue' => 'APEX ශටර වේගය', +'exif-aperturevalue' => 'APEX විවරය', +'exif-brightnessvalue' => 'APEX දීප්තිය', 'exif-exposurebiasvalue' => 'නිරාවරණ නැඹුරුව', 'exif-maxaperturevalue' => 'උපරිම භූමි විවරය', 'exif-subjectdistance' => 'වස්තු දුර', @@ -3036,6 +3119,7 @@ Variants for Chinese language 'exif-gpsareainformation' => 'GPS සරියෙහි නම', 'exif-gpsdatestamp' => 'GPS දිනය', 'exif-gpsdifferential' => 'GPS ආන්තරීක ශෝධනය', +'exif-objectname' => 'කෙටි මාතෘකාව', # EXIF attributes 'exif-compression-1' => 'අසංක්ෂිප්ත', @@ -3137,7 +3221,7 @@ Variants for Chinese language 'exif-sensingmethod-7' => 'ත්‍රිරේඛීය සංවේදකය', 'exif-sensingmethod-8' => 'වර්ණ අනුක්‍රමික රේඛීය සංවේදකය', -'exif-filesource-3' => 'DSC (ආන්තර පරිලෝකන වර්ණමිතිය)', +'exif-filesource-3' => 'සංඛ්‍යාංක නිශ්චල කැමරාව', 'exif-scenetype-1' => 'සෘජු ලෙස ඡායරූපගතකල රූපයන්', @@ -3215,31 +3299,31 @@ Variants for Chinese language 'limitall' => 'සියල්ලම', # E-mail address confirmation -'confirmemail' => 'විද්‍යුත්-තැපැල් ලිපිනය තහවුරු කරන්න', -'confirmemail_noemail' => 'ඔබගේ [[Special:Preferences|පරිශීලක අභිරුචියන්]] හි නීතික විද්‍යුත්-තැපැල් ලිපිනයක් ඔබ විසින් පිහිටුවා නොමැත.', -'confirmemail_text' => 'විද්‍යුත්-තැපැල් අංගයන් භාවිතා කිරීමට පෙර ඔබගේ විද්‍යුත්-තැපැල් ලිපිනය නීතිකරණය කල යුතු බවට {{SITENAME}} අවධාරණය කරයි. +'confirmemail' => 'විද්‍යුත්-තැපැල් ලිපිනය තහවුරු කරන්න', +'confirmemail_noemail' => 'ඔබගේ [[Special:Preferences|පරිශීලක අභිරුචියන්]] හි නීතික විද්‍යුත්-තැපැල් ලිපිනයක් ඔබ විසින් පිහිටුවා නොමැත.', +'confirmemail_text' => 'විද්‍යුත්-තැපැල් අංගයන් භාවිතා කිරීමට පෙර ඔබගේ විද්‍යුත්-තැපැල් ලිපිනය නීතිකරණය කල යුතු බවට {{SITENAME}} අවධාරණය කරයි. ඔබගේ ලිපිනයට තහවුරුකරණ තැපෑලක් යවනු සඳහා පහත බොත්තම සක්‍රියනය කරන්න. මෙම තැපෑල කේතයක් අඩංගු සබැඳියක් සහිත වනු ඇත; ඔබගේ විද්‍යුත්-තැපැල් ලිපිනය නීතික බව තහවුරු කරනු වස් මෙම සබැඳිය ඔබගේ බ්‍රවුසරයෙහි ප්‍රවේශනය කරන්න.', -'confirmemail_pending' => 'තහවුරු කිරීමේ කේතයක් දැනටමත් ඔබට විද්‍යුත්-තැපැල් කොට ඇත; +'confirmemail_pending' => 'තහවුරු කිරීමේ කේතයක් දැනටමත් ඔබට විද්‍යුත්-තැපැල් කොට ඇත; ඔබ විසින් ගිණුම තැනුවේ මෑතකදී නම්, නව තේකයක් ඉල්ලා සිටීමට පෙර එය ඔබ වෙත ලඟා වීම සඳහා විනාඩි කිහිපයක් රැඳී සිටින්න.', -'confirmemail_send' => 'තහවුරුකිරීමේ කේතයක් තැපැල් කරන්න', -'confirmemail_sent' => 'තහවුරුකිරීමේ විද්‍යුත්-තැපෑලක් යැවිණි.', -'confirmemail_oncreate' => 'ඔබගේ විද්‍යුත්-තැපැල් ලිපිනයට තහවුරුකිරීමේ කේතයක් යවන ලදි. +'confirmemail_send' => 'තහවුරුකිරීමේ කේතයක් තැපැල් කරන්න', +'confirmemail_sent' => 'තහවුරුකිරීමේ විද්‍යුත්-තැපෑලක් යැවිණි.', +'confirmemail_oncreate' => 'ඔබගේ විද්‍යුත්-තැපැල් ලිපිනයට තහවුරුකිරීමේ කේතයක් යවන ලදි. ප්‍රවිෂ්ට වීමට මෙම කේතය අනවශ්‍ය නමුදු, විකියෙහි විද්‍යුත්-තැපැල් සම්බන්ධ අංගයන් කිසිවක් හෝ සක්‍රීය කිරීමට පෙර මෙය ඉදිරිපත් කල යුතු වේ.', -'confirmemail_sendfailed' => 'ඔබගේ තහවුරුකිරීමේ තැපෑල යැවීමට {{SITENAME}} හට නොහැකි විය. +'confirmemail_sendfailed' => 'ඔබගේ තහවුරුකිරීමේ තැපෑල යැවීමට {{SITENAME}} හට නොහැකි විය. අනීතික අක්ෂර තිබේදැයි ඔබගේ විද්‍යුත් තැපැල් ලිපිනය පරික්ෂා කර බලන්න. තැපැල්කරු ආපසු දැනුම්දුන්නේ: $1', -'confirmemail_invalid' => 'තහවුරුකරණ කේතය අනීතිකයි. +'confirmemail_invalid' => 'තහවුරුකරණ කේතය අනීතිකයි. කේතය කල් ඉකුත්වූ එකක් විය හැක.', -'confirmemail_needlogin' => 'ඔබගේ විද්‍යුත්-තැපැල් ලිපිනය තහවුරුකිරීමට ඔබ $1 වී සිටිය යුතුය.', -'confirmemail_success' => 'ඔබගේ විද්‍යුත්-තැපැල් ලිපිනය තහවුරුකොට ඇත. +'confirmemail_needlogin' => 'ඔබගේ විද්‍යුත්-තැපැල් ලිපිනය තහවුරුකිරීමට ඔබ $1 වී සිටිය යුතුය.', +'confirmemail_success' => 'ඔබගේ විද්‍යුත්-තැපැල් ලිපිනය තහවුරුකොට ඇත. ඔබහට දැන් [[Special:UserLogin|පුවිෂ්ට වී]] විකිය භුක්තිවිඳිය හැක.', -'confirmemail_loggedin' => 'ඔබගේ විද්‍යුත්-තැපැල් ලිපිනය දැන් තහවුරුකොට ඇත.', -'confirmemail_error' => 'ඔබගේ තහවුරුකිරීම සුරැකීමට උත්සාහ කිරීමේදී යම් ගැටළුවක් පැනනැගුණි.', -'confirmemail_subject' => '{{SITENAME}} විද්‍යුත්-තැපැල් ලිපිනය තහවුරුකිරීම', -'confirmemail_body' => 'යම් අයෙකු, අන්තර්ජාල ලිපිනය $1 මගින්, සමහර විට ඔබ, +'confirmemail_loggedin' => 'ඔබගේ විද්‍යුත්-තැපැල් ලිපිනය දැන් තහවුරුකොට ඇත.', +'confirmemail_error' => 'ඔබගේ තහවුරුකිරීම සුරැකීමට උත්සාහ කිරීමේදී යම් ගැටළුවක් පැනනැගුණි.', +'confirmemail_subject' => '{{SITENAME}} විද්‍යුත්-තැපැල් ලිපිනය තහවුරුකිරීම', +'confirmemail_body' => 'යම් අයෙකු, අන්තර්ජාල ලිපිනය $1 මගින්, සමහර විට ඔබ, {{SITENAME}} හි "$2" නමැති ගිණුමක් මෙම විද්‍යුත්-තැපැල් ලිපිනය සහිතව ලියාපදිංචි කර ඇත . මෙම ගිණුම ඇත්ත වශයෙන්ම ඔබගේ බව සහතික කිරීමට හා {{SITENAME}} හි, @@ -3253,8 +3337,36 @@ $3 $5 මෙම සහතික කිරීමේ කේතයෙහි වලංගු බව $4 වන විට ඉකුත් වේ.', -'confirmemail_invalidated' => 'විද්‍යුත්-ගැපැල් ලිපිනය තහවුරුකිරීම අවලංගු කෙරිණි', -'invalidateemail' => 'විද්‍යුත්-තැපැල් තහවුරුකිරීම අවලංගු කරන්න', +'confirmemail_body_changed' => 'යම් අයෙකු, අන්තර්ජාල ලිපිනය $1 මගින්, සමහර විට ඔබ, +{{SITENAME}} හි "$2" නමැති ගිණුමෙහි විද්‍යුත්-තැපැල් ලිපිනය වෙනස් කර ඇත . + +මෙම ගිණුම ඇත්ත වශයෙන්ම ඔබගේ බව සහතික කිරීමට හා {{SITENAME}} හි, +විද්‍යුත්-තැපැල් විශේෂාංග සක්‍රීයනය කරනු වස්, ඔබගේ බ්‍රවුසරයෙහි පහත සබැඳිය විවෘත කරන්න: + +$3 + +මෙම ගිණුම, ඔබ හට අයක් *නොවේ* නම්, මෙම සබැඳිය ඔස්සේ සපැමිණ +විද්‍යුත්-තැපැල් ලිපින සහතික කිරීම අත්හරින්න: + +$5 + +මෙම සහතික කිරීමේ කේතයෙහි වලංගු බව $4 වන විට ඉකුත් වේ', +'confirmemail_body_set' => 'යමෙක්, සමහරවිට ඔබ, $1 යන අයිපී ලිපිනය මගින්, +has set the e-mail address of the account "$2" to this address on {{SITENAME}}. + +To confirm that this account really does belong to you and reactivate +e-mail features on {{SITENAME}}, open this link in your browser: + +$3 + +If the account does *not* belong to you, follow this link +to cancel the e-mail address confirmation: + +$5 + +This confirmation code will expire at $4.', +'confirmemail_invalidated' => 'විද්‍යුත්-ගැපැල් ලිපිනය තහවුරුකිරීම අවලංගු කෙරිණි', +'invalidateemail' => 'විද්‍යුත්-තැපැල් තහවුරුකිරීම අවලංගු කරන්න', # Scary transclusion 'scarytranscludedisabled' => '[අන්තර්විකී අන්තඃගතකිරීම් අක්‍රීය කොට ඇත]', @@ -3296,6 +3408,7 @@ $1', 'table_pager_first' => 'පළමු පිටුව', 'table_pager_last' => 'අවසාන පිටුව', 'table_pager_limit' => 'එක් පිටුවක් වෙනුවෙන් අයිතම $1 පෙන්වන්න', +'table_pager_limit_label' => 'එක් පිටුවකට අයිතම:', 'table_pager_limit_submit' => 'යන්න', 'table_pager_empty' => 'ප්‍රතිඵල නොමැත', @@ -3419,6 +3532,7 @@ $1', 'version-specialpages' => 'විශේෂ පිටු', 'version-parserhooks' => 'ව්‍යාකරණ විග්‍රහක හසුරු', 'version-variables' => 'විචල්‍යයන්', +'version-skins' => 'ඡවිය', 'version-other' => 'වෙනත්', 'version-mediahandlers' => 'මාධ්‍ය හසුරුවනය', 'version-hooks' => 'හසුරු', @@ -3430,6 +3544,13 @@ $1', 'version-hook-subscribedby' => 'දායකවී ඇත්තේ', 'version-version' => '(අනුවාදය $1)', 'version-license' => 'බලපත්‍රය', +'version-poweredby-credits' => "මෙම විකිය '''[http://www.mediawiki.org/ MediaWiki]''' මගින් බලගන්වා ඇත, copyright © 2001-$1 $2.", +'version-poweredby-others' => 'අනෙකුත්', +'version-license-info' => 'MediaWiki යනු නිදහස් මෘදුකාංගයකි; නිදහස් මෘදුකාංග පදනමේ (Free Software Foundation) හි GNU General Public License නම් බලපත්‍රයේ වගන්තිවලට අනුව ඔබට එය නැවත බෙදාහැරීම සහ/හෝ සංස්කරණය කළ හැක; ඒ, එම බලපත්‍රයේ 2වන හෝ (ඔබට කැමති නම්) ඉන්පසු එන සංස්කරණයකට අනුවය. + +MediaWiki බෙදාහැර ඇත්තේ එය ප්‍රයෝජනවත්වේය යන බලාපොරොත්තුව ඇතිවය, නමුත් *කිසිදු වගකීමක් රහිතව*ය; අඩු තරමේ *විකිණිය හැකිබව* හෝ *කිසියම් කාර්යයකට ප්‍රයෝජනයට ගත හැකිබව* යන්න පිළිබඳ වගකීමක් හෝ රහිතවය. වැඩි විස්තර සඳහා GNU General Public License බලන්න. + +ඔබට මෙම මෘදුකාංගය සමග [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General Public License හි පිටපතක්] ලැබී තිබිය යුතුය; නැතිනම්, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA වෙත ලියන්න හෝ [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html එය මාර්ගගතව කියවන්න].', 'version-software' => 'ස්ථාපිත මෘදුකාංග', 'version-software-product' => 'නිෂ්පාදනය', 'version-software-version' => 'අනුවාදය', @@ -3500,6 +3621,15 @@ $1', 'tags-edit' => 'සංස්කරණය', 'tags-hitcount' => '{{PLURAL:$1|වෙනස්කම|වෙනස්කම් $1 }}', +# Special:ComparePages +'comparepages' => 'පිටු සසඳන්න', +'compare-selector' => 'පිටුවේ සංශෝධන සසඳන්න', +'compare-page1' => 'පිටුව 1', +'compare-page2' => 'පිටුව 2', +'compare-rev1' => '1වන සංශෝධනය', +'compare-rev2' => '2වන සංශෝධනය', +'compare-submit' => 'සසඳන්න', + # Database error messages 'dberr-header' => 'මෙම විකියෙහි ගැටළුවක් පවතියි', 'dberr-problems' => 'සමාවන්න! මෙම අඩවිය තාක්ෂණික ගැටළු අත්දකියි.', @@ -3516,8 +3646,13 @@ $1', 'htmlform-float-invalid' => 'ඔබ ඉදිරිපත් කල අගය සංඛ්‍යාවක් නොවේ.', 'htmlform-int-toolow' => 'ඔබ විසින් හුවාදක්වා ඇති අගය, අවම අගය වන $1 ට වඩා අඩුය', 'htmlform-int-toohigh' => 'ඔබ විසින් හුවාදක්වා ඇති අගය, උපරිම අගය වන $1 ට වඩා වැඩිය', +'htmlform-required' => 'මෙම අගය ඇවැසිය', 'htmlform-submit' => 'යොමුකරන්න', 'htmlform-reset' => 'වෙනස්කිරීම් අහෝසිකරන්න', 'htmlform-selectorother-other' => 'වෙනත්', +# SQLite database support +'sqlite-has-fts' => '$1 සම්පූර්ණ-පෙළ සෙවුම් සහය සමග', +'sqlite-no-fts' => '$1 සම්පූර්ණ-පෙළ සෙවුම් සහය රහිතව', + ); diff --git a/languages/messages/MessagesSimple.php b/languages/messages/MessagesSimple.php index dd4d376b..8de0e3ad 100644 --- a/languages/messages/MessagesSimple.php +++ b/languages/messages/MessagesSimple.php @@ -1,12 +1,20 @@ 'Start', +'vector-view-edit' => 'Change', + +); diff --git a/languages/messages/MessagesSk.php b/languages/messages/MessagesSk.php index 616e90e8..08f2b9c3 100644 --- a/languages/messages/MessagesSk.php +++ b/languages/messages/MessagesSk.php @@ -291,8 +291,7 @@ $messages = array( 'tog-editsection' => 'Umožniť úpravu sekcie pomocu odkazov [upraviť]', 'tog-editsectiononrightclick' => 'Umožniť upravovať sekcie po kliknutí pravým tlačidlom na nadpisy sekcií (JavaScript)', 'tog-showtoc' => 'Zobrazovať obsah (pre stránky s viac ako 3 nadpismi)', -'tog-rememberpassword' => 'Zapamätať si heslo na tomto počítači', -'tog-editwidth' => 'Rozšíriť textové pole na úpravy na celú obrazovku', +'tog-rememberpassword' => 'Zapamätať si prihlásenie na tomto počítači (najviac $1 {{PLURAL:$1|deň|dni|dní}})', 'tog-watchcreations' => 'Pridávať stránky, ktoré vytvorím, automaticky medzi sledované', 'tog-watchdefault' => 'Pridávať stránky, ktoré upravujem, automaticky medzi sledované', 'tog-watchmoves' => 'Pridávať stránky, ktoré presuniem, do môjho zoznamu sledovaných', @@ -439,31 +438,21 @@ $messages = array( 'faqpage' => 'Project:Často kladené otázky', # Vector skin -'vector-action-addsection' => 'Pridať tému', -'vector-action-delete' => 'Zmazať', -'vector-action-move' => 'Presunúť', -'vector-action-protect' => 'Zamknúť', -'vector-action-undelete' => 'Obnoviť', -'vector-action-unprotect' => 'Odomknúť', -'vector-namespace-category' => 'Kategória', -'vector-namespace-help' => 'Pomocník', -'vector-namespace-image' => 'Súbor', -'vector-namespace-main' => 'Stránka', -'vector-namespace-media' => 'Stránka súboru', -'vector-namespace-mediawiki' => 'Správa', -'vector-namespace-project' => 'Stránka projektu', -'vector-namespace-special' => 'Špeciálna stránka', -'vector-namespace-talk' => 'Diskusia', -'vector-namespace-template' => 'Šablóna', -'vector-namespace-user' => 'Používateľská stránka', -'vector-view-create' => 'Vytvoriť', -'vector-view-edit' => 'Upraviť', -'vector-view-history' => 'Zobraziť históriu', -'vector-view-view' => 'Čítať', -'vector-view-viewsource' => 'Zobraziť zdroj', -'actions' => 'Operácie', -'namespaces' => 'Menné priestory', -'variants' => 'Varianty', +'vector-action-addsection' => 'Pridať tému', +'vector-action-delete' => 'Zmazať', +'vector-action-move' => 'Presunúť', +'vector-action-protect' => 'Zamknúť', +'vector-action-undelete' => 'Obnoviť', +'vector-action-unprotect' => 'Odomknúť', +'vector-simplesearch-preference' => 'Povoliť rozšírené návrhy hľadania (iba pre tému Vector)', +'vector-view-create' => 'Vytvoriť', +'vector-view-edit' => 'Upraviť', +'vector-view-history' => 'Zobraziť históriu', +'vector-view-view' => 'Čítať', +'vector-view-viewsource' => 'Zobraziť zdroj', +'actions' => 'Operácie', +'namespaces' => 'Menné priestory', +'variants' => 'Varianty', 'errorpagetitle' => 'Chyba', 'returnto' => 'Späť na $1.', @@ -524,6 +513,9 @@ Príliš veľa používateľov sa pokúša zobraziť túto stránku. Prosím, počkajte chvíľu predtým, než sa pokúsite na túto stránku dostať znova. $1', +'pool-timeout' => 'Bol prekročený vyhradený čas čakania na zámok', +'pool-queuefull' => 'Front je plný', +'pool-errorunknown' => 'Neznáma chyba', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'O {{GRAMMAR:lokál|{{SITENAME}}}}', @@ -687,7 +679,8 @@ Nezabudnite si nastaviť svoje [[Special:Preferences|používateľské nastaveni 'yourname' => 'Používateľské meno:', 'yourpassword' => 'Heslo:', 'yourpasswordagain' => 'Zopakujte heslo:', -'remembermypassword' => 'Pamätať si prihlásenie na tomto počítači', +'remembermypassword' => 'Pamätať si prihlásenie na tomto počítači (naviac $1 {{PLURAL:$1|deň|dni|dní}})', +'securelogin-stick-https' => 'Zostať pripojený cez HTTPS po prihlásení', 'yourdomainname' => 'Vaša doména:', 'externaldberror' => 'Buď nastala chyba externej autentifikačnej databázy alebo vám nie je povolené aktualizovať váš externý účet.', 'login' => 'Prihlásiť', @@ -704,6 +697,7 @@ Nezabudnite si nastaviť svoje [[Special:Preferences|používateľské nastaveni 'gotaccount' => "Máte už vytvorený účet? '''$1'''.", 'gotaccountlink' => 'Prihlásiť', 'createaccountmail' => 'e-mailom', +'createaccountreason' => 'Dôvod:', 'badretype' => 'Zadané heslá nie sú rovnaké.', 'userexists' => 'Zadané používateľské meno už používa niekto iný. Zadajte iné meno.', @@ -724,6 +718,7 @@ Skontrolujte preklepy alebo sa [[Special:UserLogin/signup|zaregistrujte ako nov 'wrongpasswordempty' => 'Zadané heslo bolo prázdne. Skúste prosím znova.', 'passwordtooshort' => 'Heslo musí mať dĺžku aspoň $1 {{PLURAL:$1|znak|znaky|znakov}}.', 'password-name-match' => 'Vaše heslo musí byť iné ako vaše používateľské meno.', +'password-login-forbidden' => 'Použitie tohto používateľského mena a hesla bolo zakázané.', 'mailmypassword' => 'Pošlite mi e-mailom dočasné heslo', 'passwordremindertitle' => 'Nové dočasné heslo pre {{GRAMMAR:akuzatív|{{SITENAME}}}}', 'passwordremindertext' => 'Niekto (pravdepodobne vy, z IP adresy $1) @@ -765,6 +760,9 @@ Prosím, počkajte predtým, než to skúsite znova.', 'loginlanguagelabel' => 'Jazyk: $1', 'suspicious-userlogout' => 'Vaša požiadavka odhlásiť sa bola zamietnutá, pretože to vyzerá, že ju poslal pokazený prehliadač alebo proxy server.', +# E-mail sending +'php-mail-error-unknown' => 'Neznáma chyba vo funkcii PHP mail()', + # Password reset dialog 'resetpass' => 'Zmeniť heslo', 'resetpass_announce' => 'Prishlásili ste sa pomocou dočasného emailom zaslaného kódu. Pre dokončenie prihlásenia je potrebné tu nastaviť nové heslo:', @@ -817,9 +815,11 @@ Je možné, že sa vám už podarilo úspešne zmeniť svoje heslo alebo ste si 'showdiff' => 'Zobraziť rozdiely', 'anoneditwarning' => "'''Upozornenie:''' Nie ste prihlásený. Vaša IP adresa bude zaznamenaná v histórii úprav tejto stránky.", +'anonpreviewwarning' => "''Nie ste prihlásený. Uložením zaznamenáte svoju IP adresu do histórie úprav tejto stránky.''", 'missingsummary' => "'''Pripomienka:''' Neposkytli ste zhrnutie úprav. Ak kliknete znova na Uložiť, vaše úpravy sa uložia bez zhrnutia úprav.", 'missingcommenttext' => 'Prosím, dolu napíšte komentár.', -'missingcommentheader' => "'''Pripomienka:''' Neposkytli ste predmet/hlavičku tohto komentára. Ak znova kliknete na tlačidlo Uložiť, vaša úprava sa uloží bez nej.", +'missingcommentheader' => "'''Pripomienka:''' Neposkytli ste predmet/hlavičku tohto komentára. +Ak znova kliknete na tlačidlo „{{int:savearticle}}“, vaša úprava sa uloží bez nej.", 'summary-preview' => 'Náhľad zhrnutia:', 'subject-preview' => 'Náhľad predmetu/hlavičky:', 'blockedtitle' => 'Používateľ je zablokovaný', @@ -893,7 +893,11 @@ Dolu je pre informáciu posledná položka zo záznamu blokovaní:', 'userjsyoucanpreview' => "'''Tip:''' Váš nový JS pred uložením otestujete stlačením tlačidla „{{int:showpreview}}“.", 'usercsspreview' => "'''Nezabudnite, že toto je iba náhľad vášho používateľského CSS, ešte nebolo uložené!'''", 'userjspreview' => "'''Nezabudnite, že iba testujete/náhľad vášho používateľského JavaScriptu, ešte nebol uložený!'''", -'userinvalidcssjstitle' => "'''Upozornenie:''' Neexistuje vzhľad „$1“. Pamätajte, že vlastné .css a .js stránky používajú názov s malými písmenami, napr. {{ns:user}}:Foo/monobook.css a nie {{ns:user}}:Foo/Monobook.css.", +'sitecsspreview' => "'''Nezabudnite, že toto je iba náhľad tohto CSS.''' +'''Zatiaľ nebolo uložené!'''", +'sitejspreview' => "'''Nezabudnite, že toto je iba náhľad tohto JavaScriptu.''' +'''Zatiaľ nebol uložený!'''", +'userinvalidcssjstitle' => "'''Upozornenie:''' Neexistuje vzhľad „$1“. Pamätajte, že vlastné .css a .js stránky používajú názov s malými písmenami, napr. {{ns:user}}:Foo/vector.css a nie {{ns:user}}:Foo/Vector.css.", 'updated' => '(Aktualizovaný)', 'note' => "'''Poznámka: '''", 'previewnote' => "'''Nezabudnite, toto je iba náhľad stránky, ktorú upravujete. @@ -933,9 +937,6 @@ z voľného diela (public domain) alebo podobného zdroja neobmedzeného autorsk Týmto sa právne zaväzujete, že ste tento text buď napísali sám, alebo že je skopírovaný z voľného diela (public domain) alebo podobného zdroja neobmedzeného autorskými právami (podrobnosti: $1). '''NEUMIESTŇUJTE SEM BEZ POVOLENIA DIELA CHRÁNENÉ AUTORSKÝM PRÁVOM!'''", -'longpagewarning' => "'''UPOZORNENIE: Táto stránka má $1 kilobajtov; niektoré -prehliadače by mohli mať problémy s úpravou stránok, ktorých veľkosť sa blíži k alebo presahuje 32 kb. -Zvážte, či by nebolo možné rozdeliť stránku na menšie sekcie.'''", 'longpageerror' => "'''CHYBA: Text, ktorý ste poslali má $1 kilobajtov, čo je viac ako maximum $2 kilobajtov. Nie je možné ho uložiť.'''", 'readonlywarning' => "'''UPOZORNENIE: Databáza bola počas upravovania stránky zamknutá z dôvodu údržby, takže stránku momentálne nemôžete uložiť. Môžete skopírovať a vložiť @@ -1114,6 +1115,8 @@ $1", 'logdelete-failure' => "'''Viditeľnosť záznamu nebolo možné nastaviť:''' $1", 'revdel-restore' => 'Zmeniť viditeľnosť', +'revdel-restore-deleted' => 'zmazané revízie', +'revdel-restore-visible' => 'viditeľné revízie', 'pagehist' => 'História stránky', 'deletedhist' => 'Zmazaná história', 'revdelete-content' => 'obsah', @@ -1180,11 +1183,13 @@ Uistite sa, že táto zmena zachová historickú kontinuitu zmien stránky.', # Diffs 'history-title' => 'História revízií „$1“', 'difference' => '(Rozdiel medzi revíziami)', +'difference-multipage' => '(Rozdiel medzi stránkami)', 'lineno' => 'Riadok $1:', 'compareselectedversions' => 'Porovnať označené verzie', 'showhideselectedversions' => 'Zobraziť/skryť vybrané revízie', 'editundo' => 'vrátiť', -'diff-multi' => '{{PLURAL:$1|Jedna medziľahlá revízia nie je zobrazená|$1 medziľahlé revízie nie sú zobrazené|$1 medziľahlých revízií nie je zobrazených}}.', +'diff-multi' => '{{PLURAL:$1|Jedna medziľahlá revízia|$1 medziľahlé revízie|$1 medziľahlých revízií}} od {{PLURAL:$2|jedného používateľa|$2 používateľov}} {{PLURAL:$1|nie je zobrazená|nie sú zobrazené|nie je zobrazených}}.', +'diff-multi-manyusers' => '({{PLURAL:$1|$1 medziľahlá revízia|$1 medziľahlé revízie|$1 medziľahlých revízií}} od viac ako {{PLURAL:$2|$2 používateľa|$2 používateľov}} {{PLURAL:$1|nie je zobrazená|nie sú zobrazené|nie je zobrazených}})', # Search results 'searchresults' => 'Výsledky vyhľadávania', @@ -1219,6 +1224,7 @@ Uistite sa, že táto zmena zachová historickú kontinuitu zmien stránky.', 'searchprofile-everything-tooltip' => 'Hľadať v celom obsahu (vrátane diskusných stránok)', 'searchprofile-advanced-tooltip' => 'Hľadať vo vymenovaných menných priestoroch', 'search-result-size' => '$1 ({{PLURAL:$2|1 slovo|$2 slová|$2 slov}})', +'search-result-category-size' => '{{PLURAL:$1|1 člen|$1 členovia|$1 členov}} ({{PLURAL:$2|1 podkategória|$2 podkategórie|$2 podkategórií}}, {{PLURAL:$3|1 súbor|$3 súbory|$3 súborov}})', 'search-result-score' => 'Relevancia: $1%', 'search-redirect' => '(presmerovanie $1)', 'search-section' => '(sekcia $1)', @@ -1293,6 +1299,7 @@ Uistite sa, že táto zmena zachová historickú kontinuitu zmien stránky.', 'contextlines' => 'Počet zobrazených riadkov z každej nájdenej stránky:', 'contextchars' => 'Počet kontextových znakov v riadku', 'stub-threshold' => 'Prah formátovania výhonkov (v bajtoch):', +'stub-threshold-disabled' => 'Vypnuté', 'recentchangesdays' => 'Koľko dní zobrazovať v posledných úpravách:', 'recentchangesdays-max' => '(maximálne $1 {{PLURAL:$1|deň|dni|dní}})', 'recentchangescount' => 'Štandardne zobrazovaný počet úprav:', @@ -1325,6 +1332,7 @@ Tu je náhodne vytvorená hodnota, ktorú môžete použiť: $1', 'prefs-files' => 'Súbory', 'prefs-custom-css' => 'Vlastný CSS', 'prefs-custom-js' => 'Vlastný JS', +'prefs-common-css-js' => 'Spoločné CSS/JS pre všetky témy vzhľadu:', 'prefs-reset-intro' => 'Túto stránku môžete použiť na vrátenie predvolených hodnôt vašich nastavení. Túto operáciu nemožno vrátiť.', 'prefs-emailconfirm-label' => 'Potvrdenie emailu:', @@ -1361,9 +1369,15 @@ Musí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.', 'prefs-advancedrendering' => 'Rozšírené možnosti', 'prefs-advancedsearchoptions' => 'Rozšírené možnosti', 'prefs-advancedwatchlist' => 'Rozšírené možnosti', -'prefs-display' => 'Možnosti zobrazenia', +'prefs-displayrc' => 'Možnosti zobrazenia', +'prefs-displaysearchoptions' => 'Možnosti zobrazenia', +'prefs-displaywatchlist' => 'Možnosti zobrazenia', 'prefs-diffs' => 'Rozdiely', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Formát e-mailovej adresa vyzerá byť správny', +'email-address-validity-invalid' => 'Zadajte platnú e-mailovú adresu', + # User rights 'userrights' => 'Spravovanie používateľských práv', 'userrights-lookup-user' => 'Spravovať skupiny používateľov', @@ -1447,6 +1461,7 @@ Musí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.', 'right-hideuser' => 'Zablokovať používateľské meno tak, že bude verejnosti skryté', 'right-ipblock-exempt' => 'Obchádzať blokovanie IP adries, rozsahov a automatické blokovanie', 'right-proxyunbannable' => 'Obchádzať automatické blokovanie proxy serverov', +'right-unblockself' => 'Odblokovať samých seba', 'right-protect' => 'Meniť úroveň zamknutia a upravovať zamknuté stránky', 'right-editprotected' => 'Upravovať zamknuté schránky (bez kaskádovej ochrany)', 'right-editinterface' => 'Upravovať správy používateľského rozhrania', @@ -1469,7 +1484,6 @@ Musí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.', 'right-siteadmin' => 'Zamykať a odomykať databázu', 'right-reset-passwords' => 'Zmeniť heslo iných používateľov', 'right-override-export-depth' => 'Exportovať stránky vrátane okdazovaných stránok do hĺbky 5 odkazov', -'right-versiondetail' => 'Zobraziť podrobné informácie o verzii softvéru', 'right-sendemail' => 'Posielať e-mail ostatným používateľom', # User rights log @@ -1520,14 +1534,9 @@ Musí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.', 'recentchanges-legend' => 'Možnosti posledných zmien', 'recentchangestext' => 'Pomocou tejto stránky sledujete posledné úpravy wiki.', 'recentchanges-feed-description' => 'Sledovať posledné úpravy tejto wiki týmto kanálom.', -'recentchanges-label-legend' => 'Legenda: $1.', -'recentchanges-legend-newpage' => '$1 - nová stránka', 'recentchanges-label-newpage' => 'Táto úprava vytvorila novú stránku.', -'recentchanges-legend-minor' => '$1 - drobná úprava', 'recentchanges-label-minor' => 'Toto je drobná úprava', -'recentchanges-legend-bot' => '$1 - úprava bota', 'recentchanges-label-bot' => 'Túto úpravy vykonal robot', -'recentchanges-legend-unpatrolled' => '$1 - nestrážená úprava', 'recentchanges-label-unpatrolled' => 'Táto úprava zatiaľ nebola strážená', 'rcnote' => "Tu {{PLURAL:$1|je posledná úprava|sú posledné '''$1''' úpravy|je posledných '''$1''' úprav}} počas {{PLURAL:$2|posledného dňa|posledných '''$2''' dní}} z $4, $5.", 'rcnotefrom' => "Nižšie sú zobrazené úpravy od '''$2''' (do '''$1''').", @@ -1574,6 +1583,9 @@ Stránky, ktoré sa nachádzajú vo vašom [[Special:Watchlist|zozname sledovan 'upload_directory_missing' => 'Adresár pre nahrávanie ($1) chýba a webový server ho nedokáže vytvoriť.', 'upload_directory_read_only' => 'Webový server nemôže zapisovať do adresára pre nahrávanie ($1).', 'uploaderror' => 'Chyba pri nahrávaní', +'upload-recreate-warning' => "'''Upozornenie: Súbor s týmto názvom bol zmazaný alebo presunutý.''' + +Ďalšie informácie si môžete pozrieť v zázname zmazaní a presunutí:", 'uploadtext' => "Tento formulár použite na nahrávanie súborov. Už nahrané súbory môžete zobraziť alebo hľadať v [[Special:FileList|zozname nahraných súborov]]. Nahrávania a mazania sa tiež zaznamenávajú v [[Special:Log/upload|zázname nahrávaní]]. @@ -1609,6 +1621,17 @@ Vizuálny prehľad nájdete v [[Special:NewFiles|galérii novo nahraných súbor 'filetype-banned-type' => "„.$1“''' nie je povolený typ súboru. {{PLURAL:$3|Povolený typ súborov je|Povolené typy súborov sú}} $2.", 'filetype-missing' => 'Súbor nemá príponu (ako „.jpg“).', +'empty-file' => 'Súbor, ktorý ste poslali bol prázdny.', +'file-too-large' => 'Súbor, ktorý ste poslali bol príliš veľký.', +'filename-tooshort' => 'Názov súboru je príliš krátky.', +'filetype-banned' => 'Tento typ súboru nie je povolené nahrať.', +'verification-error' => 'Tento súbor neprešiel overením súboru.', +'hookaborted' => 'Zmena, ktorú ste sa pokúšali vykonať bola zrušená prípojným bodom rozšírenia.', +'illegal-filename' => 'Názov súboru nie je povolený.', +'overwrite' => 'Prepísanie existujúceho súboru nie je povolené.', +'unknown-error' => 'Vyskytla sa neznáma chyba.', +'tmp-create-error' => 'Nepodarilo sa vytvoriť dočasný súbor.', +'tmp-write-error' => 'Chyba pri zapisovaní dočasného súboru.', 'large-file' => 'Odporúča sa aby veľkosť súborov neprekračovala $1; tento súbor má $2.', 'largefileserver' => 'Tento súbor je väčší ako je možné nahrať na server (z dôvodu obmedzenia veľkosti súboru v konfigurácii servera).', 'emptyfile' => 'Zdá sa, že súbor, ktorý ste nahrali je prázdny. Mohlo sa stať, že ste urobili v názve súboru preklep. Prosím, skontrolujte, či skutočne chcete nahrať tento súbor.', @@ -1634,13 +1657,14 @@ Ak si aj tak želáte nahrať svoj súbor, choďte prosím späť a nahrajte ten Ak ho chcete aj napriek tomu nahrať, choďte prosím späť a použite iný názov. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Tento súbor je duplikátom {{PLURAL:$1|nasledovného súboru|nasledovných súborov}}:', 'file-deleted-duplicate' => 'Súbor zhodný s týmto súborom ([[:$1]]) už bol v minulosti zmazaný. Mali by ste skontrolovať históriu nahrávania tohto súboru predtým, než budete pokračovať v jeho nahrávaní.', -'successfulupload' => 'Nahranie bolo úspešné', 'uploadwarning' => 'Varovanie pri nahrávaní', 'uploadwarning-text' => 'Prosím, zmeňte popis súboru nižšie a skúste to znova.', 'savefile' => 'Uložiť súbor', 'uploadedimage' => 'nahraný „[[$1]]“', 'overwroteimage' => 'bola nahraná nová verzia „[[$1]]“', 'uploaddisabled' => 'Prepáčte, nahrávanie je vypnuté.', +'copyuploaddisabled' => 'Nahrávanie prostredníctvom URL nie je povolené.', +'uploadfromurl-queued' => 'Súbor, ktorý ste dali nahrať bol uložený do fronty.', 'uploaddisabledtext' => 'Nahrávanie súborov je vypnuté.', 'php-uploaddisabledtext' => 'Nahrávanie PHP súborov je vypnuté. Prosím, skontrolujte nastavenie file_uploads.', 'uploadscripted' => 'Tento súbor obsahuje kód HTML alebo skript, ktorý može byť chybne interpretovaný prehliadačom.', @@ -1673,6 +1697,14 @@ JD # Jenoptik MGP # Pentax PICT # rôzne # ', +'upload-success-subj' => 'Nahranie bolo úspešné', +'upload-success-msg' => 'Nahranie súboru [$2]prebehlo úspešne. Je dostupný tu: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problém s nahrávaním', +'upload-failure-msg' => 'Vyskytol sa problém s vašim nahrávaním z [$2]: + +$1', +'upload-warning-subj' => 'Upozornenie pri nahrávaní', +'upload-warning-msg' => 'Nastal problém pri nahrávaní z [$2]. Môžete sa vrátiť na [[Special:Upload/stash/$1|nahrávací formulár]] a tento problém napraviť.', 'upload-proto-error' => 'Nesprávny protokol', 'upload-proto-error-text' => 'Vzdialené nahrávanie vyžaduje, aby URL začínali http:// alebo ftp://.', @@ -1736,6 +1768,7 @@ Kliknutím na hlavičku stĺpca zmeníte poradie triedenia.', 'listfiles_search_for' => 'Hľadať názov súboru:', 'imgfile' => 'súbor', 'listfiles' => 'Zoznam obrázkov', +'listfiles_thumb' => 'Náhľad', 'listfiles_date' => 'Dátum', 'listfiles_name' => 'Názov', 'listfiles_user' => 'Používateľ', @@ -1846,8 +1879,8 @@ Môžete si pozrieť [[Special:WhatLinksHere/$2|úplný zoznam]].', 'statistics-edits' => 'Úprav stránok od založenia {{GRAMMAR:genitív|{{SITENAME}}}}', 'statistics-edits-average' => 'Priemerný počet úprav na stránku', 'statistics-views-total' => 'Celkom zobrazení', +'statistics-views-total-desc' => 'Zobrazenia neexistujúcich stránok a špeciálnych stránok nie sú zahrnuté', 'statistics-views-peredit' => 'Zobrazení na úpravu', -'statistics-jobqueue' => 'Dĺžka [http://www.mediawiki.org/wiki/Manual:Job_queue frontu úloh]', 'statistics-users' => 'Registrovaných [[Special:ListUsers|používateľov]]', 'statistics-users-active' => 'Aktívnych používateľov', 'statistics-users-active-desc' => 'Používatelia, ktorí za {{PLURAL:$1|posledný deň|posledné $1 dni|posledných $1 dní}} vykonali nejakú operáciu', @@ -1862,7 +1895,7 @@ Stránka sa považuje za rozlišovaciu, keď používa šablónu, na ktorú odka 'doubleredirects' => 'Dvojité presmerovania', 'doubleredirectstext' => 'Táto stránka obsahuje zoznam stránok, ktoré presmerovávajú na iné presmerovacie stránky. Každý riadok obsahuje odkaz na prvé a druhé presmerovanie a tiež prvý riadok z textu na ktorý odkazuje druhé presmerovanie, ktoré zvyčajne odkazuje na „skutočný“ cieľ, na ktorý má odkazovať prvé presmerovanie. -Prečiarknuté položky boli vyriešené.', +Prečiarknuté položky boli vyriešené.', 'double-redirect-fixed-move' => 'Stránka [[$1]] bola presunutá, teraz je presmerovaním na [[$2]]', 'double-redirect-fixer' => 'Korektor presmerovaní', @@ -1885,6 +1918,8 @@ Každý riadok obsahuje odkaz na prvé a druhé presmerovanie a tiež prvý riad 'nmembers' => '$1 {{PLURAL:$1|člen|členovia|členov}}', 'nrevisions' => '$1 {{PLURAL:$1|revízia|revízie|revízií}}', 'nviews' => '$1 {{PLURAL:$1|návšteva|návštevy|návštev}}', +'nimagelinks' => 'Použité na $1 {{PLURAL:$1|stránke|stránkach}}', +'ntransclusions' => 'použité na $1 {{PLURAL:$1|stránke|stránkach}}', 'specialpage-empty' => 'Táto správa neobsahuje žiadne položky.', 'lonelypages' => 'Opustené stránky', 'lonelypagestext' => 'Na nasledujúce stránky neodkazujú ani ich nepoužívajú ako šablónu žiadne iné stránky z {{GRAMMAR:genitív|{{SITENAME}}}}.', @@ -2042,35 +2077,41 @@ Môžete si prečítať [[{{MediaWiki:Listgrouprights-helppage}}|ďalšie inform 'listgrouprights-removegroup-self-all' => 'Z vlastného účtu je možné odstrániť všetky skupiny', # E-mail user -'mailnologin' => 'Žiadna adresa na zaslanie', -'mailnologintext' => 'Musíte byť [[Special:UserLogin|prihlásený]] a mať platnú e-mailovú adresu vo vašich [[Special:Preferences|nastaveniach]], aby ste mohli iným používateľom posielať e-maily.', -'emailuser' => 'E-mail tomuto používateľovi', -'emailpage' => 'E-mail používateľovi', -'emailpagetext' => 'Ak tento používateľ zadal platnú emailovú adresu vo svojich nastaveniach, +'mailnologin' => 'Žiadna adresa na zaslanie', +'mailnologintext' => 'Musíte byť [[Special:UserLogin|prihlásený]] a mať platnú e-mailovú adresu vo vašich [[Special:Preferences|nastaveniach]], aby ste mohli iným používateľom posielať e-maily.', +'emailuser' => 'E-mail tomuto používateľovi', +'emailpage' => 'E-mail používateľovi', +'emailpagetext' => 'Ak tento používateľ zadal platnú emailovú adresu vo svojich nastaveniach, môžete mu pomocou nasledovného formulára poslať email. Emailová adresa, ktorú ste zadali vo svojich [[Special:Preferences|nastaveniach]] sa zobrazí ako adresa odosielateľa emailu, aby vám mohol príjemca priamo odpovedať.', -'usermailererror' => 'Emailový program vrátil chybu:', -'defemailsubject' => 'email {{GRAMMAR:genitív|{{SITENAME}}}}', -'noemailtitle' => 'Chýba e-mailová adresa', -'noemailtext' => 'Tento používateľ neuviedol svoju platnú e-mailovú adresu.', -'nowikiemailtitle' => 'Posielanie emailov nie je umožnené', -'nowikiemailtext' => 'Tento používateľ sa rozhodol, že si neželá prijímať emaily od ostatných používateľov.', -'email-legend' => 'Poslať email používateľovi {{GRAMMAR:genitív|{{SITENAME}}}}', -'emailfrom' => 'Od:', -'emailto' => 'Komu:', -'emailsubject' => 'Predmet:', -'emailmessage' => 'Správa:', -'emailsend' => 'Odoslať', -'emailccme' => 'Pošli mi emailom kópiu mojej správy.', -'emailccsubject' => 'Kópia správy pre $1: $2', -'emailsent' => 'E-mail bol odoslaný', -'emailsenttext' => 'Vaša e-mailová správa bola odoslaná.', -'emailuserfooter' => 'Tento email poslal $1 používateľovi $2 pomocou funkcie „Email používateľovi” na {{GRAMMAR:lokál|{{SITENAME}}}}.', +'usermailererror' => 'Emailový program vrátil chybu:', +'defemailsubject' => 'email {{GRAMMAR:genitív|{{SITENAME}}}}', +'usermaildisabled' => 'Používateľ má vypnuté používanie emailu', +'usermaildisabledtext' => 'Nemôžete posielať emaily ostatným používateľom na tejto wiki', +'noemailtitle' => 'Chýba e-mailová adresa', +'noemailtext' => 'Tento používateľ neuviedol svoju platnú e-mailovú adresu.', +'nowikiemailtitle' => 'Posielanie emailov nie je umožnené', +'nowikiemailtext' => 'Tento používateľ sa rozhodol, že si neželá prijímať emaily od ostatných používateľov.', +'email-legend' => 'Poslať email používateľovi {{GRAMMAR:genitív|{{SITENAME}}}}', +'emailfrom' => 'Od:', +'emailto' => 'Komu:', +'emailsubject' => 'Predmet:', +'emailmessage' => 'Správa:', +'emailsend' => 'Odoslať', +'emailccme' => 'Pošli mi emailom kópiu mojej správy.', +'emailccsubject' => 'Kópia správy pre $1: $2', +'emailsent' => 'E-mail bol odoslaný', +'emailsenttext' => 'Vaša e-mailová správa bola odoslaná.', +'emailuserfooter' => 'Tento email poslal $1 používateľovi $2 pomocou funkcie „Email používateľovi” na {{GRAMMAR:lokál|{{SITENAME}}}}.', + +# User Messenger +'usermessage-summary' => 'Zanechanie správy systému.', +'usermessage-editor' => 'Správy systému', # Watchlist 'watchlist' => 'Sledované stránky', 'mywatchlist' => 'Sledované stránky', -'watchlistfor' => "(používateľa '''$1''')", +'watchlistfor2' => '$1 $2', 'nowatchlist' => 'V zozname sledovaných stránok nemáte žiadne položky.', 'watchlistanontext' => 'Prosím $1 pre prezeranie alebo úpravu vášho zoznamu sledovaných stránok.', 'watchnologin' => 'Nie ste prihlásený/á', @@ -2183,7 +2224,10 @@ Autorom poslednej úpravy je [[User:$3|$3]] ([[User talk:$3|Diskusia]]{{int:pipe 'revertpage' => 'Posledné úpravy používateľa [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusia]]) vrátené; bola obnovená posledná úprava $1', 'revertpage-nouser' => 'Vrátené úpravy (meno používateľa odstránené) na poslednú revíziu od [[User:$1|$1]]', 'rollback-success' => 'Úpravy $1 vrátené; obnovená posledná verzia od $2.', -'sessionfailure' => 'Zdá sa, že je problém s vašou prihlasovacou reláciou; + +# Edit tokens +'sessionfailure-title' => 'Chyba relácie', +'sessionfailure' => 'Zdá sa, že je problém s vašou prihlasovacou reláciou; táto akcia bola zrušená ako prevencia proti zneužitiu relácie (session). Prosím, stlačte "naspäť", obnovte stránku, z ktorej ste sa sem dostali, a skúste to znova.', @@ -2314,18 +2358,22 @@ $1', 'month' => 'Mesiac:', 'year' => 'Rok:', -'sp-contributions-newbies' => 'Zobraziť len príspevky nových účtov', -'sp-contributions-newbies-sub' => 'Príspevky nováčikov', -'sp-contributions-newbies-title' => 'Príspevky nových používateľov', -'sp-contributions-blocklog' => 'záznam blokovaní', -'sp-contributions-deleted' => 'zmazané príspevky používateľa', -'sp-contributions-logs' => 'záznamy', -'sp-contributions-talk' => 'diskusia', -'sp-contributions-userrights' => 'spravovanie používateľských práv', -'sp-contributions-blocked-notice' => 'Tento používateľ je momentálne zablokovaný. Dolu je uvedená posledná položka zo záznamu blokovaní:', -'sp-contributions-search' => 'Hľadať príspevky', -'sp-contributions-username' => 'IP adresa alebo meno používateľa:', -'sp-contributions-submit' => 'Hľadať', +'sp-contributions-newbies' => 'Zobraziť len príspevky nových účtov', +'sp-contributions-newbies-sub' => 'Príspevky nováčikov', +'sp-contributions-newbies-title' => 'Príspevky nových používateľov', +'sp-contributions-blocklog' => 'záznam blokovaní', +'sp-contributions-deleted' => 'zmazané príspevky používateľa', +'sp-contributions-uploads' => 'nahrané súbory', +'sp-contributions-logs' => 'záznamy', +'sp-contributions-talk' => 'diskusia', +'sp-contributions-userrights' => 'spravovanie používateľských práv', +'sp-contributions-blocked-notice' => 'Tento používateľ je momentálne zablokovaný. Dolu je uvedená posledná položka zo záznamu blokovaní:', +'sp-contributions-blocked-notice-anon' => 'Táto IP adresa je momentálne zablokovaná. +Nižšie si môžete pozrieť najnovšiu položku záznamu blokovaní:', +'sp-contributions-search' => 'Hľadať príspevky', +'sp-contributions-username' => 'IP adresa alebo meno používateľa:', +'sp-contributions-toponly' => 'Zobraziť iba posledné revízie', +'sp-contributions-submit' => 'Hľadať', # What links here 'whatlinkshere' => 'Odkazy na túto stránku', @@ -2386,7 +2434,6 @@ Nižšie uveďte konkrétny dôvod (napríklad uveďte konkrétne stránky, ktor 'ipb-edit-dropdown' => 'Upraviť dôvody pre blokovanie', 'ipb-unblock-addr' => 'Odblokovať $1', 'ipb-unblock' => 'Odblokovať používateľa alebo IP adresu', -'ipb-blocklist-addr' => 'Existujúce blokovania pre $1', 'ipb-blocklist' => 'Zobraziť existujúce blokovania', 'ipb-blocklist-contribs' => 'Príspevky $1', 'unblockip' => 'Odblokovať používateľa', @@ -2457,6 +2504,8 @@ $1 je už zablokovaný. Chcete zmeniť voľby blokovania?', 'sorbs_create_account_reason' => 'Vaša IP adresa je vedená ako nezabezpečený proxy server v databáze DNSBL, ktorú používa {{SITENAME}}. Nemôžete si vytvoriť účet.', 'cant-block-while-blocked' => 'Nemôžete blokovať iných používateľov, kým ste zablokovaný.', 'cant-see-hidden-user' => 'Používateľ, ktorého sa pokúšate zablokovať už bol zablokovaný a skrytý. Pretože nemáte právo hideuser, nemôžete vidieť ani upravovať blokovanie používateľa.', +'ipbblocked' => 'Nemôžete zablokovať ani odblokovať iných používateľov, pretože ste sami zablokovaní', +'ipbnounblockself' => 'Nie je povolené, aby ste sa sami odblokovali', # Developer tools 'lockdb' => 'Zamknúť databázu', @@ -2498,6 +2547,19 @@ Toto neplatí iba ak je stránka prázdna alebo presmerovacia a nemá žiadne pr To znamená, že môžete premenovať stránku späť na názov, ktorý mala pred premenovaním, ak ste sa pomýlili, a že nemôžete prepísať existujúcu stránku. +'''UPOZORNENIE!''' +Toto môže byť drastická a nečakaná zmena pre populárnu stránku; +ubezpečte sa preto, skôr ako budete pokračovať, že chápete dôsledky svojho činu.", +'movepagetext-noredirectfixer' => "Pomocou tohto formulára premenujete stránku a premiestnite všetky jej predchádzajúce verzie pod zadaný nový názov. +Starý názov sa stane presmerovacou stránkou na nový názov. +Ubezpečte sa, že ste skontrolovali výskyt [[Special:DoubleRedirects|dvojitých]] a [[Special:BrokenRedirects|pokazených]] presmerovaní. +Vy ste zodpovedný za to, aby odkazy naďalej ukazovali tam, kam majú. + +Uvedomte si, že stránka sa '''nepremiestni''', ak pod novým názvom už stránka existuje. +Toto neplatí iba ak je stránka prázdna alebo presmerovacia a nemá žiadne predchádzajúce verzie. +To znamená, že môžete premenovať stránku späť na názov, ktorý mala pred premenovaním, ak ste sa pomýlili, a že nemôžete prepísať +existujúcu stránku. + '''UPOZORNENIE!''' Toto môže byť drastická a nečakaná zmena pre populárnu stránku; ubezpečte sa preto, skôr ako budete pokračovať, že chápete dôsledky svojho činu.", @@ -2560,6 +2622,7 @@ Cieľová stránka „[[:$1]]“ už existuje. Chcete ho vymazať a vytvoriť ta 'immobile-source-page' => 'Túto stránku nemožno presunúť.', 'immobile-target-page' => 'Nie je možné presunúť na cieľovú stránku z daným názvom.', 'imagenocrossnamespace' => 'Obrázok nemožno presunúť mimo menného priestoru obrázkov', +'nonfile-cannot-move-to-file' => 'Nie je možné presunúť objekt, ktorý nie je súbor do menného priestoru Súbor', 'imagetypemismatch' => 'Nová prípona súboru nezodpovedá jeho typu', 'imageinvalidfilename' => 'Cieľový názov obrázka nie je platný', 'fix-double-redirects' => 'Aktualizovať všetky presmerovania odkazujúce na pôvodný názov', @@ -2639,6 +2702,7 @@ Uložte ho na svoj disk a nahrajte sem.', 'importstart' => 'Importujú sa stránky...', 'import-revision-count' => '$1 {{PLURAL:$1|revízia|revízie|revízií}}', 'importnopages' => 'Žiadne stránky pre import.', +'imported-log-entries' => '{{PLURAL:$1|Importovaná $1 položka záznamu|Importované $1 položky záznamu|Importovaných $1 položiek záznamu}}.', 'importfailed' => 'Chyba pri importe: $1', 'importunknownsource' => 'Neznámy typ zdroja pre import', 'importcantopen' => 'Nedal sa otvoriť súbor importu', @@ -2732,6 +2796,8 @@ Uložte ho na svoj disk a nahrajte sem.', 'tooltip-rollback' => '„Rollback” vracia úpravy posledného prispievateľa tejto stránky jedným kliknutím.', 'tooltip-undo' => '„Vrátiť” vráti túto úpravu a otvorí formulár úprav v režime náhľadu. Umožnuje do zhrnutia pridanie dôvodu.', +'tooltip-preferences-save' => 'Uložiť nastavenia', +'tooltip-summary' => 'Zadajte krátke zhrnutie', # Stylesheets 'common.css' => '/* Tu umiestnené CSS bude ovplyvňovať všetky štýly */', @@ -2862,14 +2928,17 @@ Jeho spustením môžete kompromitovať svoj systém.", 'imagemaxsize' => "Obmedziť veľkosť obrázka:
    ''(na popisnej stránke súboru)''", 'thumbsize' => 'Veľkosť náhľadu:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|stránka|stránky|stránok}}', -'file-info' => '(veľkosť súboru: $1, MIME typ: $2)', -'file-info-size' => '($1 × $2 pixelov, veľkosť súboru: $3, MIME typ: $4)', +'file-info' => 'veľkosť súboru: $1, MIME typ: $2', +'file-info-size' => '$1 × $2 pixelov, veľkosť súboru: $3, MIME typ: $4', 'file-nohires' => 'Nie je dostupné vyššie rozlíšenie.', -'svg-long-desc' => '(SVG súbor, $1 × $2 pixelov, veľkosť súboru: $3)', +'svg-long-desc' => 'SVG súbor, $1 × $2 pixelov, veľkosť súboru: $3', 'show-big-image' => 'Obrázok vo vyššom rozlíšení', 'show-big-image-thumb' => 'Veľkosť tohto náhľadu: $1 × $2 pixelov', 'file-info-gif-looped' => 'v cykle', 'file-info-gif-frames' => '$1 {{PLURAL:$1|rámec|rámce|rámcov}}', +'file-info-png-looped' => 'opakované', +'file-info-png-repeat' => 'prehrané $1-krát{{PLURAL:$1|||}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|rámec|rámce|rámcov}}', # Special:NewFiles 'newimages' => 'Galéria nových obrázkov', @@ -2939,8 +3008,8 @@ Každý ďalší odkaz na rovnakom riadku sa považuje za výnimku, t.j. článk 'exif-colorspace' => 'Farebný priestor', 'exif-componentsconfiguration' => 'Význam jednotlivých zložiek', 'exif-compressedbitsperpixel' => 'Komprimované bity na pixel', -'exif-pixelydimension' => 'Platná šírka obrázka', -'exif-pixelxdimension' => 'Platná vyška obrázka', +'exif-pixelydimension' => 'Šírka obrázka', +'exif-pixelxdimension' => 'Výška obrázka', 'exif-makernote' => 'Poznámka výrobcu', 'exif-usercomment' => 'Komentár používateľa', 'exif-relatedsoundfile' => 'Súvisiaci zvukový súbor', @@ -2956,9 +3025,9 @@ Každý ďalší odkaz na rovnakom riadku sa považuje za výnimku, t.j. článk 'exif-spectralsensitivity' => 'Spektrálna citlivosť', 'exif-isospeedratings' => 'Rýchlostné ohodnotenie ISO', 'exif-oecf' => 'Optoelektronický konverzný činiteľ', -'exif-shutterspeedvalue' => 'Rýchlosť uzávierky', -'exif-aperturevalue' => 'Clona', -'exif-brightnessvalue' => 'Jas', +'exif-shutterspeedvalue' => 'Rýchlosť uzávierky APEX', +'exif-aperturevalue' => 'Clona APEX', +'exif-brightnessvalue' => 'Jas APEX', 'exif-exposurebiasvalue' => 'Expozičné skreslenie', 'exif-maxaperturevalue' => 'Maximálna krajinná clona', 'exif-subjectdistance' => 'Vzdialenosť subjektu', @@ -3022,6 +3091,7 @@ Každý ďalší odkaz na rovnakom riadku sa považuje za výnimku, t.j. článk 'exif-gpsareainformation' => 'Názov GPS oblasti', 'exif-gpsdatestamp' => 'Dátum GPS', 'exif-gpsdifferential' => 'Diferenciálna korekcia GPS', +'exif-objectname' => 'Krátky názov', # EXIF attributes 'exif-compression-1' => 'Bez kompresie', @@ -3181,31 +3251,31 @@ Každý ďalší odkaz na rovnakom riadku sa považuje za výnimku, t.j. článk 'limitall' => 'všetky', # E-mail address confirmation -'confirmemail' => 'Potvrdiť e-mailovú adresu', -'confirmemail_noemail' => 'Nenastavili ste platnú emailovú adresu vo svojich [[Special:Preferences|Nastaveniach]].', -'confirmemail_text' => '{{SITENAME}} vyžaduje, aby ste potvrdili platnosť vašej e-mailovej adresy +'confirmemail' => 'Potvrdiť e-mailovú adresu', +'confirmemail_noemail' => 'Nenastavili ste platnú emailovú adresu vo svojich [[Special:Preferences|Nastaveniach]].', +'confirmemail_text' => '{{SITENAME}} vyžaduje, aby ste potvrdili platnosť vašej e-mailovej adresy pred používaním e-mailových funkcií. Kliknite na tlačidlo dole, aby sa na vašu adresu odoslal potvrdzovací e-mail. V e-maili bude aj odkaz obsahujúci kód; otvorte odkaz vo vašom prehliadači, čím potvrdíte, že vaša e-mailová adresa je platná.', -'confirmemail_pending' => 'Potvrdzovací kód vám už bol zaslaný; ak ste si účet vytvorili len nedávno +'confirmemail_pending' => 'Potvrdzovací kód vám už bol zaslaný; ak ste si účet vytvorili len nedávno mali by ste počkať niekoľko minút, kým vám bude email doručený, predtým než si vyžiadate nový kód.', -'confirmemail_send' => 'Odoslať potvrdzovací kód', -'confirmemail_sent' => 'Potvrdzovací e-mail odoslaný.', -'confirmemail_oncreate' => 'Na vašu emailovú adresu bol odoslaný potvrdzovací kód. +'confirmemail_send' => 'Odoslať potvrdzovací kód', +'confirmemail_sent' => 'Potvrdzovací e-mail odoslaný.', +'confirmemail_oncreate' => 'Na vašu emailovú adresu bol odoslaný potvrdzovací kód. Tento kód nie je potrebný na prihlásenie, ale budete ho musieť poskytnúť pred zapnutím vlastností wiki využívajcich email.', -'confirmemail_sendfailed' => 'Z {{GRAMMAR:genitív|{{SITENAME}}}} nebolo možné odoslať potvrdzovací e-mail. +'confirmemail_sendfailed' => 'Z {{GRAMMAR:genitív|{{SITENAME}}}} nebolo možné odoslať potvrdzovací e-mail. Skontrolujte neplatné znaky vo vašej emailovej adrese. Hlásenie programu, ktorý odosielal poštu: $1', -'confirmemail_invalid' => 'Neplatný potvrdzovací kód. Kód možno vypršal.', -'confirmemail_needlogin' => 'Musíte sa $1 na potvrdenie vašej emailovaj adresy.', -'confirmemail_success' => 'Vaša e-mailová adresa bola potvrdená. Môžete sa prihlásiť a využívať wiki.', -'confirmemail_loggedin' => 'Vaša e-mailová adresa bola potvrdená.', -'confirmemail_error' => 'Niečo sa pokazilo pri ukladaní vášho potvrdenia.', -'confirmemail_subject' => '{{SITENAME}} - potvrdenie e-mailovej adresy', -'confirmemail_body' => 'Niekto, pravdepodobne vy z IP adresy $1, zaregistroval účet +'confirmemail_invalid' => 'Neplatný potvrdzovací kód. Kód možno vypršal.', +'confirmemail_needlogin' => 'Musíte sa $1 na potvrdenie vašej emailovaj adresy.', +'confirmemail_success' => 'Vaša e-mailová adresa bola potvrdená. Môžete sa prihlásiť a využívať wiki.', +'confirmemail_loggedin' => 'Vaša e-mailová adresa bola potvrdená.', +'confirmemail_error' => 'Niečo sa pokazilo pri ukladaní vášho potvrdenia.', +'confirmemail_subject' => '{{SITENAME}} - potvrdenie e-mailovej adresy', +'confirmemail_body' => 'Niekto, pravdepodobne vy z IP adresy $1, zaregistroval účet „$2“ s touto e-mailovou adresou na {{GRAMMAR:lokál|{{SITENAME}}}}. Pre potvrdenie, že tento účet skutočne patrí vám a pre aktivovanie @@ -3219,8 +3289,37 @@ Ak ste to *neboli* vy, otvorte tento odkaz, $5 Tento potvrdzovací kód vyprší $4.', -'confirmemail_invalidated' => 'Potvrdenie emailovej adresy bolo zrušené', -'invalidateemail' => 'Zrušiť potvrdenie emailovej adresy', +'confirmemail_body_changed' => 'Niekto, pravdepodobne vy, z IP adresy $1, +zmenil emailovú adresu účtu „$2“ na túto adresu na {{GRAMMAR:lokál|{{SITENAME}}}}. + +Aby ste potvrdili, že tento účet skutočne patrí vám a znova +aktivovali funkcie emailu na{{GRAMMAR:lokál|{{SITENAME}}}}, +otvorte nasledovný odkaz v prehliadači: + +$3 + +Ak vám účet *nepatrí*, otvorte namiesto toho tento odkaz, +ktorý zruší potvrdenie emailovej adresy: + +$5 + +Platnosť tohto potvrdzovacieho kódu vyprší $4.', +'confirmemail_body_set' => 'Niekto, pravdepodobne vy, z IP adresy $1, +nastavil e-mailovú adresu účtu „$2“ na túto adresu na {{GRAMMAR:genitív|{{SITENAME}}}}. + +Ak chcete potvrdiť, že tento účet skutočne patrí vám a aktivovať +e-mailové funkcie na {{GRAMMAR:genitív|{{SITENAME}}}}, otvorte tento odkaz vo vašom prehliadači: + +$3 + +Ak účet nie je *nepatrí* patrí k vám, nasledujte tento odkaz, +ktorú zruší potvrdenie e-mailovej adresy: + +$5 + +Platnosť tohto potvrdzovacieho kódu vyprší $4.', +'confirmemail_invalidated' => 'Potvrdenie emailovej adresy bolo zrušené', +'invalidateemail' => 'Zrušiť potvrdenie emailovej adresy', # Scary transclusion 'scarytranscludedisabled' => '[Transklúzia interwiki je vypnutá]', @@ -3260,6 +3359,7 @@ Prosím, potvrďte, že túto stránku chcete skutočne znovu vytvoriť.", 'table_pager_first' => 'Prvá stránka', 'table_pager_last' => 'Posledná stránka', 'table_pager_limit' => 'Zobraziť $1 položiek na stránku', +'table_pager_limit_label' => 'Položiek na stránku:', 'table_pager_limit_submit' => 'Spustiť', 'table_pager_empty' => 'Bez výsledkov', @@ -3320,6 +3420,7 @@ Tiež môžete [[Special:Watchlist/edit|použiť štandardný editor]].', 'version-specialpages' => 'Špeciálne stránky', 'version-parserhooks' => 'Prípojné body syntaktického analyzátora', 'version-variables' => 'Premenné', +'version-skins' => 'Témy vzhľadu', 'version-other' => 'Iné', 'version-mediahandlers' => 'Obsluha multimédií', 'version-hooks' => 'Prípojné body', @@ -3331,6 +3432,13 @@ Tiež môžete [[Special:Watchlist/edit|použiť štandardný editor]].', 'version-hook-subscribedby' => 'Pripojené', 'version-version' => '(Verzia $1)', 'version-license' => 'Licencia', +'version-poweredby-credits' => "Táto wiki beží na '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'ďalší', +'version-license-info' => 'MediaWiki je slobodný softvér; môžete ho šíriť a / alebo modifikovať podľa podmienok GNU General Public License, ktorú vydala Free Software Foundation; a to buď verzie 2 tejto licencie alebo (podľa vášho uváženia) ktorejkoľvek neskoršej verzie. + +MediaWiki je šírený v nádeji, že bude užitočný, avšak BEZ AKEJKOĽVEK ZÁRUKY; neposkytujú sa ani implicitné záruky PREDAJNOSTI alebo VHODNOSTI NA URČITÝ ÚČEL. Ďalšie informácie nájdete v GNU General Public License. + +Spolu s týmto programom by ste obdržať [{{SERVER}}{{SCRIPTPATH}}/COPYING kópiu GNU General Public License]. Ak nie, napíšte na adresu Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA alebo [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html si ju prečítajte online].', 'version-software' => 'Nainštalovaný softvér', 'version-software-product' => 'Produkt', 'version-software-version' => 'Verzia', @@ -3401,6 +3509,15 @@ Zadajte názov súboru bez predpony „{{ns:file}}:“.', 'tags-edit' => 'upraviť', 'tags-hitcount' => '$1 {{PLURAL:$1|zmena|zmeny|zmien}}', +# Special:ComparePages +'comparepages' => 'Porovnať stránky', +'compare-selector' => 'Porovnať revízie stránky', +'compare-page1' => 'Stránka 1', +'compare-page2' => 'Stránka 2', +'compare-rev1' => 'Revízia 1', +'compare-rev2' => 'Revízia 2', +'compare-submit' => 'Porovnať', + # Database error messages 'dberr-header' => 'Táto wiki má problém', 'dberr-problems' => 'Prepáčte! Táto stránka má práve technické problémy.', @@ -3417,8 +3534,13 @@ Zadajte názov súboru bez predpony „{{ns:file}}:“.', 'htmlform-float-invalid' => 'Hodnota, ktorú ste zadali nie je číslo.', 'htmlform-int-toolow' => 'Hodnota, ktorú ste zadali je menšia ako minimálna hodnota $1', 'htmlform-int-toohigh' => 'Hodnota, ktorú ste zadali je väčšia ako maximálna hodnota $1', +'htmlform-required' => 'Vyplnenie tejto hodnoty je povinné', 'htmlform-submit' => 'Odoslať', 'htmlform-reset' => 'Vrátiť zmeny', 'htmlform-selectorother-other' => 'Iné', +# SQLite database support +'sqlite-has-fts' => '$1 s podporou vyhľadávania v plnom texte', +'sqlite-no-fts' => '$1 bez podpory vyhľadávania v plnom texte', + ); diff --git a/languages/messages/MessagesSl.php b/languages/messages/MessagesSl.php index c20588e9..276d76f9 100644 --- a/languages/messages/MessagesSl.php +++ b/languages/messages/MessagesSl.php @@ -9,6 +9,7 @@ * * @author Dbc334 * @author Freakolowsky + * @author McDutchie * @author Smihael * @author XJamRastafire * @author Yerpo @@ -37,7 +38,7 @@ $namespaceNames = array( $specialPageAliases = array( 'DoubleRedirects' => array( 'DvojnePreusmeritve' ), - 'BrokenRedirects' => array( 'PokvarjenePreusmeritve' ), + 'BrokenRedirects' => array( 'PretrganePreusmeritve' ), 'Disambiguations' => array( 'Razločitve' ), 'Userlogin' => array( 'Prijava' ), 'Userlogout' => array( 'Odjava' ), @@ -51,7 +52,7 @@ $specialPageAliases = array( 'Listusers' => array( 'SeznamUporabnikov' ), 'Listgrouprights' => array( 'SeznamPravicSkupin' ), 'Statistics' => array( 'Statistika' ), - 'Randompage' => array( 'Nakljucno', 'NakljucnaStran' ), + 'Randompage' => array( 'Naključno', 'NaključnaStran' ), 'Lonelypages' => array( 'OsiroteleStrani' ), 'Uncategorizedpages' => array( 'NekategoriziraneStrani' ), 'Uncategorizedcategories' => array( 'NekategoriziraneKategorije' ), @@ -59,43 +60,74 @@ $specialPageAliases = array( 'Uncategorizedtemplates' => array( 'NekategoriziranePredloge' ), 'Unusedcategories' => array( 'NeuporabljeneKategorije' ), 'Unusedimages' => array( 'NeuporabljeneDatoteke', 'NeuporabljeneSlike' ), - 'Wantedpages' => array( 'ZeleneStrani' ), - 'Wantedcategories' => array( 'ZeleneKategorije' ), - 'Wantedfiles' => array( 'ZeleneDatoteke' ), - 'Wantedtemplates' => array( 'ZelenePredloge' ), + 'Wantedpages' => array( 'ŽeleneStrani' ), + 'Wantedcategories' => array( 'ŽeleneKategorije' ), + 'Wantedfiles' => array( 'ŽeleneDatoteke' ), + 'Wantedtemplates' => array( 'ŽelenePredloge' ), 'Mostlinked' => array( 'NajboljPovezaneStrani' ), - 'Mostcategories' => array( 'NajvecKategorij' ), - 'Mostrevisions' => array( 'NajvecRedakcij' ), + 'Mostlinkedcategories' => array( 'NajboljPovezaneKategorije' ), + 'Mostlinkedtemplates' => array( 'NajboljPovezanePredloge' ), + 'Mostimages' => array( 'NajboljPovezaneDatoteke' ), + 'Mostcategories' => array( 'NajvečKategorij' ), + 'Mostrevisions' => array( 'NajvečRedakcij' ), 'Fewestrevisions' => array( 'NajmanjRedakcij' ), 'Shortpages' => array( 'KratkeStrani' ), 'Longpages' => array( 'DolgeStrani' ), 'Newpages' => array( 'NoveStrani' ), 'Ancientpages' => array( 'StarodavneStrani' ), - 'Protectedpages' => array( 'ZasciteneStrani' ), - 'Protectedtitles' => array( 'ZasciteniNaslovi' ), + 'Protectedpages' => array( 'ZaščiteneStrani' ), + 'Protectedtitles' => array( 'ZaščiteniNaslovi' ), 'Allpages' => array( 'VseStrani' ), + 'Unblock' => array( 'Odblokiraj' ), 'Specialpages' => array( 'PosebneStrani' ), 'Contributions' => array( 'Prispevki' ), + 'Whatlinkshere' => array( 'KajSePovezujeSem' ), + 'Movepage' => array( 'PrestaviStran', 'PremakniStran' ), + 'Blockme' => array( 'BlokirajMe' ), + 'Booksources' => array( 'ViriKnjig' ), + 'Categories' => array( 'Kategorije' ), 'Export' => array( 'Izvozi' ), - 'Version' => array( 'Verzija' ), + 'Version' => array( 'Različica', 'Verzija' ), + 'Allmessages' => array( 'VsaSporočila' ), + 'Log' => array( 'Dnevnik', 'Dnevniki' ), + 'Blockip' => array( 'Blokiraj', 'BlokirajIP', 'BlokirajUporabnika' ), + 'Undelete' => array( 'Obnovi' ), + 'Import' => array( 'Uvoz' ), + 'MIMEsearch' => array( 'IskanjeMIME' ), + 'Unwatchedpages' => array( 'NespremljaneStrani' ), 'Mypage' => array( 'MojaStran' ), 'Mytalk' => array( 'MojPogovor' ), + 'Mycontributions' => array( 'MojiPrispevki' ), + 'Listadmins' => array( 'SeznamAdministratorjev' ), + 'Listbots' => array( 'SeznamBotov' ), + 'Popularpages' => array( 'PriljubljeneStrani' ), 'Search' => array( 'Iskanje' ), + 'Resetpass' => array( 'SpremeniGeslo', 'PonastaviGeslo' ), + 'Withoutinterwiki' => array( 'BrezInterwikijev' ), + 'MergeHistory' => array( 'ZdružiZgodovino' ), + 'Filepath' => array( 'PotDatoteke' ), + 'Blankpage' => array( 'PraznaStran' ), + 'DeletedContributions' => array( 'IzbrisaniPrispevki' ), + 'Activeusers' => array( 'AktivniUporabniki' ), ); $magicWords = array( 'redirect' => array( '0', '#PREUSMERITEV', '#REDIRECT' ), 'notoc' => array( '0', '__BREZKAZALAVSEBINE__', '__NOTOC__' ), 'nogallery' => array( '0', '__BREZGALERIJE__', '__NOGALLERY__' ), + 'forcetoc' => array( '0', '__VSILIKAZALOVSEBINE__', '__FORCETOC__' ), 'toc' => array( '0', '__POGLAVJE__', '__TOC__' ), + 'noeditsection' => array( '0', '__BREZUREJANJARAZDELKOV__', '__NOEDITSECTION__' ), + 'img_thumbnail' => array( '1', 'sličica', 'thumbnail', 'thumb' ), + 'img_manualthumb' => array( '1', 'sličica=$1', 'thumbnail=$1', 'thumb=$1' ), 'img_right' => array( '1', 'desno', 'right' ), 'img_left' => array( '1', 'levo', 'left' ), 'img_none' => array( '1', 'brez', 'none' ), - 'img_width' => array( '1', '$1pik', '$1px' ), + 'img_width' => array( '1', '$1_pik', '$1px' ), 'img_center' => array( '1', 'sredina', 'sredinsko', 'center', 'centre' ), 'img_framed' => array( '1', 'okvir', 'okvirjeno', 'framed', 'enframed', 'frame' ), 'img_frameless' => array( '1', 'brezokvirja', 'frameless' ), - 'img_page' => array( '1', 'stran=$1m stran $1', 'page=$1', 'page $1' ), + 'img_page' => array( '1', 'stran=$1', 'm_stran $1', 'page=$1', 'page $1' ), 'img_upright' => array( '1', 'zgorajdesno', 'zgorajdesno=$1', 'zgorajdesno $1', 'upright', 'upright=$1', 'upright $1' ), 'img_border' => array( '1', 'obroba', 'border' ), 'img_sub' => array( '1', 'pod', 'podpisano', 'sub' ), @@ -116,8 +148,12 @@ $magicWords = array( 'noindex' => array( '1', '__BREZKAZALA__', '__NOINDEX__' ), 'staticredirect' => array( '1', '__STATICNAPREUSMERITEV__', '__STATICREDIRECT__' ), 'protectionlevel' => array( '1', 'STOPNJAZASCITE', 'PROTECTIONLEVEL' ), + 'url_path' => array( '0', 'POT', 'PATH' ), + 'url_query' => array( '0', 'POIZVEDBA', 'QUERY' ), ); +$linkTrail = '/^([a-zčćđžš]+)(.*)$/sDu'; + $datePreferences = array( 'default', 'dmy short', @@ -144,7 +180,7 @@ $dateFormats = array( ); $fallback8bitEncoding = "iso-8859-2"; -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $messages = array( # User preference toggles @@ -162,8 +198,7 @@ $messages = array( 'tog-editsection' => 'Omogoči urejanje delov prek povezav [{{int:editsection}}]', 'tog-editsectiononrightclick' => 'Omogoči urejanje razdelkov z desnim klikanjem njihovih naslovov (zahteva JavaScript)', 'tog-showtoc' => 'Prikaži vsebino (strani z več kot tremi naslovi)', -'tog-rememberpassword' => 'Geslo si zapomni skozi vse seje', -'tog-editwidth' => 'Razširi urejevalno polje čez vso širino zaslona', +'tog-rememberpassword' => 'Zapomni si me v tem brskalniku (za največ $1 {{PLURAL:$1|dan|dneva|dni}})', 'tog-watchcreations' => 'Vse ustvarjene strani dodaj na spisek nadzorov', 'tog-watchdefault' => 'Dodaj na spisek nadzorov vse članke, ki sem jih ustvaril/-a ali spremenil/-a', 'tog-watchmoves' => 'Dodaj strani, ki jih premaknem, na moj spisek nadzorov', @@ -303,31 +338,21 @@ in [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Uporabniški priroč 'faqpage' => 'Project:Najpogostejša vprašanja', # Vector skin -'vector-action-addsection' => 'Dodaj temo', -'vector-action-delete' => 'Izbriši', -'vector-action-move' => 'Prestavi', -'vector-action-protect' => 'Zaščiti', -'vector-action-undelete' => 'Vrni', -'vector-action-unprotect' => 'Odstrani zaščito', -'vector-namespace-category' => 'Kategorija', -'vector-namespace-help' => 'Stran s pomočjo', -'vector-namespace-image' => 'Datoteka', -'vector-namespace-main' => 'Stran', -'vector-namespace-media' => 'Multimedijska stran', -'vector-namespace-mediawiki' => 'Sporočilo', -'vector-namespace-project' => 'Projektna stran', -'vector-namespace-special' => 'Posebna stran', -'vector-namespace-talk' => 'Pogovor', -'vector-namespace-template' => 'Predloga', -'vector-namespace-user' => 'Uporabniška stran', -'vector-view-create' => 'Ustvari', -'vector-view-edit' => 'Uredi', -'vector-view-history' => 'Zgodovina', -'vector-view-view' => 'Preberi', -'vector-view-viewsource' => 'Izvorno besedilo', -'actions' => 'Dejanja', -'namespaces' => 'Imenski prostori', -'variants' => 'Različice', +'vector-action-addsection' => 'Dodaj temo', +'vector-action-delete' => 'Izbriši', +'vector-action-move' => 'Prestavi', +'vector-action-protect' => 'Zaščiti', +'vector-action-undelete' => 'Vrni', +'vector-action-unprotect' => 'Odstrani zaščito', +'vector-simplesearch-preference' => 'Omogoči izboljšane predloge iskanja (samo koža Vector)', +'vector-view-create' => 'Ustvari', +'vector-view-edit' => 'Uredi', +'vector-view-history' => 'Zgodovina', +'vector-view-view' => 'Preberi', +'vector-view-viewsource' => 'Izvorno besedilo', +'actions' => 'Dejanja', +'namespaces' => 'Imenski prostori', +'variants' => 'Različice', 'errorpagetitle' => 'Napaka', 'returnto' => 'Vrnite se na $1.', @@ -388,6 +413,9 @@ Preveč uporabnikov skuša obiskati to stran. Prosimo za potrpežljivost, obiščite nas spet kmalu. $1', +'pool-timeout' => 'Časovno obdobje čakanja na zaklep', +'pool-queuefull' => 'Čakalna vrsta zaloge je polna', +'pool-errorunknown' => 'Neznana napaka', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'O {{GRAMMAR:dajalnik|{{SITENAME}}}}', @@ -555,7 +583,8 @@ Ne pozabite si prilagoditi vaših [[Special:Preferences|nastavitev {{GRAMMAR:rod 'yourname' => 'Uporabniško ime', 'yourpassword' => 'Geslo', 'yourpasswordagain' => 'Ponovno vpišite geslo', -'remembermypassword' => 'Zapomni si me (samodejna prijava)', +'remembermypassword' => 'Zapomni si me na tem računalniku (za največ $1 {{PLURAL:$1|dan|dneva|dni}})', +'securelogin-stick-https' => 'Po prijavi ostani povezan preko HTTPS', 'yourdomainname' => 'Domena', 'externaldberror' => 'Pri potrjevanju istovetnosti je prišlo do notranje napake ali pa za osveževanje zunanjega računa nimate dovoljenja.', 'login' => 'Prijava', @@ -572,6 +601,7 @@ Ne pozabite si prilagoditi vaših [[Special:Preferences|nastavitev {{GRAMMAR:rod 'gotaccount' => 'Račun že imate? $1.', 'gotaccountlink' => 'Prijavite se', 'createaccountmail' => 'Po e-pošti', +'createaccountreason' => 'Razlog:', 'badretype' => 'Gesli, ki ste ju vnesli, se ne ujemata.', 'userexists' => 'Uporabniško ime, ki ste ga vnesli, je že zasedeno. Prosimo, izberite si drugo.', @@ -596,6 +626,7 @@ Preverite črkovanje.', 'wrongpasswordempty' => 'Vpisali ste prazno geslo. Prosimo, poskusite znova.', 'passwordtooshort' => 'Geslo mora imeti najmanj $1 {{PLURAL:$1|znak|znaka|znake|znakov|znakov}}.', 'password-name-match' => 'Vaše geslo se mora razlikovati od vašega uporabniškega imena.', +'password-login-forbidden' => 'Uporaba tega uporabniškega imena in gesla je prepovedana.', 'mailmypassword' => 'Pošlji mi novo geslo', 'passwordremindertitle' => 'Novo začasno geslo za {{GRAMMAR:tožilnik|{{SITENAME}}}}', 'passwordremindertext' => 'Nekdo (verjetno vi, z IP-naslova $1) je zahteval novo @@ -641,6 +672,9 @@ Prosimo počakajte, preden poskusite znova.', 'loginlanguagelabel' => 'Jezik: $1', 'suspicious-userlogout' => 'Vaša zahteva za odjavo je bila zavrnjena, saj kaže, da je bila poslana iz pokvarjenega brskalnika ali proxyja s predpomnilnikom.', +# E-mail sending +'php-mail-error-unknown' => 'Neznana napaka v funkciji PHP mail()', + # Password reset dialog 'resetpass' => 'Spremeni geslo', 'resetpass_announce' => 'Trenutno ste prijavljeni z začasno e-poštno kodo. @@ -693,10 +727,11 @@ Morda ste že uspešno spremenili geslo ali pa ste zahtevali novo začasno geslo 'showlivepreview' => 'Predogled v živo', 'showdiff' => 'Prikaži spremembe', 'anoneditwarning' => "'''Opozorilo''': niste prijavljeni. V zgodovino strani se bo zapisal vaš IP-naslov.", +'anonpreviewwarning' => 'Niste prijavljeni. Ob spremembi strani se bo vaš IP-naslov zapisal v zgodovini urejanja te strani.', 'missingsummary' => "'''Opozorilo:''' Niste napisali povzetka urejanja. Ob ponovnem kliku gumba ''Shrani'' se bo vaše urejanje shranilo brez njega.", 'missingcommenttext' => 'Prosimo, vpišite v spodnje polje komentar.', 'missingcommentheader' => "'''Opozorilo:''' Niste vnesli zadeve/naslova za ta komentar. -Če boste ponovno kliknili Shrani stran, bo vaše urejanje shranjeno brez le-tega.", +Če boste ponovno kliknili »{{int:savearticle}}«, bo vaše urejanje shranjeno brez le-tega.", 'summary-preview' => 'Predogled povzetka', 'subject-preview' => 'Predogled zadeve/naslova:', 'blockedtitle' => 'Uporabnik je blokiran', @@ -765,8 +800,12 @@ Najnovejši vnos v dnevniku blokad je prikazan spodaj:', '''Ni še bil shranjen!'''", 'userjspreview' => "'''Ne pozabite, da svoj uporabniški JavaScript le preizkušate/predogledujete.''' '''Ni še bil shranjen!'''", +'sitecsspreview' => "'''Ne pozabite, da ta CSS samo preizkušate.''' +'''Ni še bil shranjen!'''", +'sitejspreview' => "'''Ne pozabite, da kodo tega JavaScripta samo preizkušate.''' +'''Ni še bila shranjena!'''", 'userinvalidcssjstitle' => "'''Opozorilo:''' Koža »$1« ne obstaja. -Vedite, da .css in .js strani po meri uporabljajo naslov z malo začetnico, npr. {{ns:user}}:Blabla/monobook.css namesto {{ns:user}}:Blabla/Monobook.css.", +Vedite, da .css in .js strani po meri uporabljajo naslov z malo začetnico, npr. {{ns:user}}:Blabla/vector.css namesto {{ns:user}}:Blabla/Vector.css.", 'updated' => '(Posodobljeno)', 'note' => "'''Opomba:'''", 'previewnote' => "'''Stran le predogledujete in še ni shranjena!'''", @@ -805,9 +844,6 @@ Poleg tega zagotavljate, da ste prispevke napisali oziroma ustvarili sami ali pa Če niste pripravljeni na neusmiljeno urejanje in prosto razširjanje vašega gradiva, ga ne prispevajte.
    Poleg tega zagotavljate, da ste prispevke napisali oziroma ustvarili sami ali pa prepisali iz javno dostopnega ali podobnega prostega vira (za podrobnosti glej $1). '''Ne dodajajte avtorsko zaščitenega dela brez dovoljenja!'''", -'longpagewarning' => 'Stran je dolga $1 {{PLURAL:$1|kilobajt|kilobajta|kilobajte|kilobajtov|kilobajtov}}; -nekateri brskalniki imajo lahko težave z urejanjem strani, daljših od 32 KB. -Prosimo, razmislite o razdelitvi strani na manjše razdelke.', 'longpageerror' => "'''Napaka: Predloženo besedilo je dolgo $1 {{PLURAL:$1|kilobajt|kilobajta|kilobajte|kilobajtov|kilobajtov}}, s čimer presega največjo dovoljeno dolžino $2 {{PLURAL:$2|kilobajta|kilobajtov|kilobajtov|kilobajtov|kilobajtov}}.''' Zato ga ni mogoče shraniti.", 'readonlywarning' => "'''Opozorilo: Zbirka podatkov je zaradi vzdrževanja začasno zaklenjena, kar pomeni, da sprememb trenutno ne morete shraniti. Prosimo, prenesite besedilo v urejevalnik in ga dodajte pozneje.''' @@ -982,6 +1018,8 @@ $1", 'logdelete-failure' => "'''Vidnost dnevnika ne more biti nastavljena!:''' $1", 'revdel-restore' => 'Spremeni vidnost', +'revdel-restore-deleted' => 'izbrisane redakcije', +'revdel-restore-visible' => 'vidne redakcije', 'pagehist' => 'Zgodovina strani', 'deletedhist' => 'Zgodovina brisanja', 'revdelete-content' => 'vsebino', @@ -1052,11 +1090,13 @@ Upoštevajte, da bo uporaba navigacijskih gumbov ponastavila ta stolpec.', # Diffs 'history-title' => 'Zgodovina strani »$1«', 'difference' => '(Primerjava redakcij)', +'difference-multipage' => '(Razlika med stranmi)', 'lineno' => 'Vrstica $1:', 'compareselectedversions' => 'Primerjaj izbrani redakciji', 'showhideselectedversions' => 'Prikaži/skrij izbrane redakcije', 'editundo' => 'razveljavi', -'diff-multi' => '({{PLURAL:$1|$1 vmesna redakcija ni prikazana|$1 vmesni redakciji nista prikazani|$1 vmesne redakcije niso prikazane|$1 vmesnih redakcij ni prikazanih}})', +'diff-multi' => '({{PLURAL:$1|$1 vmesna redakcija|$1 vmesni redakciji|$1 vmesne redakcije|$1 vmesnih redakcij}} {{PLURAL:$2|$2 uporabnika|$2 uporabnikov}} {{PLURAL:$1|ni prikazana|nista prikazani|niso prikazane|ni prikazanih}})', +'diff-multi-manyusers' => '({{PLURAL:$1|$1 vmesna redakcija|$1 vmesni redakciji|$1 vmesne redakcije|$1 vmesnih redakcij}} več kot $2 {{PLURAL:$2|uporabnika|uporabnikov}} {{PLURAL:$1|ni prikazana|nista prikazani|niso prikazane|ni prikazanih}})', # Search results 'searchresults' => 'Izid iskanja', @@ -1091,6 +1131,7 @@ Upoštevajte, da bo uporaba navigacijskih gumbov ponastavila ta stolpec.', 'searchprofile-everything-tooltip' => 'Išči po vsej vsebini (vključno s pogovornimi stranmi)', 'searchprofile-advanced-tooltip' => 'Iskanje v imenskih prostorih po meri', 'search-result-size' => '$1 ({{PLURAL:$2|1 beseda|2 besedi|$2 besede|$2 besed|$2 besed}})', +'search-result-category-size' => '$1 {{PLURAL:$1|član|člana|člani|članov}} ($1 {{PLURAL:$2|podkategorija|podkategoriji|podkategorije|podkategorij}}, $1 {{PLURAL:$3|datoteka|datoteki|datoteke|datotek}})', 'search-result-score' => 'Ustreznost: $1%', 'search-redirect' => '(preusmeritev $1)', 'search-section' => '(razdelek $1)', @@ -1167,6 +1208,7 @@ Upoštevajte, da so njihovi podatki vsebine {{GRAMMAR:rodilnik|{{SITENAME}}}} mo 'contextlines' => 'Vrstic na zadetek:', 'contextchars' => 'Znakov na vrstico:', 'stub-threshold' => 'Prag označevanja škrbin (v bajtih):', +'stub-threshold-disabled' => 'Onemogočeno', 'recentchangesdays' => 'Število dni prikazanih v zadnjih spremembah:', 'recentchangesdays-max' => 'Največ $1 {{PLURAL:$1|dan|dneva|dnevi|dni}}', 'recentchangescount' => 'Privzeto število prikazanih urejanj:', @@ -1200,6 +1242,7 @@ Tukaj je naključno ustvarjena vrednost, ki jo lahko uporabite: $1', 'prefs-files' => 'Datoteke', 'prefs-custom-css' => 'CSS po meri', 'prefs-custom-js' => 'JS po meri', +'prefs-common-css-js' => 'Skupni CSS/JS za vse kože:', 'prefs-reset-intro' => 'To stran lahko uporabite za ponastavitev nastavitev na privzete za to spletišče. Tega ni mogoče razveljaviti.', 'prefs-emailconfirm-label' => 'Potrditev e-pošte:', @@ -1240,9 +1283,15 @@ Poleg tega vpisan e-poštni naslov omogoča drugim, da vam lahko pošiljajo elek 'prefs-advancedrendering' => 'Napredne možnosti', 'prefs-advancedsearchoptions' => 'Napredne možnosti', 'prefs-advancedwatchlist' => 'Napredne možnosti', -'prefs-display' => 'Prikaži možnosti', +'prefs-displayrc' => 'Možnosti prikaza', +'prefs-displaysearchoptions' => 'Možnosti prikaza', +'prefs-displaywatchlist' => 'Možnosti prikaza', 'prefs-diffs' => 'Primerjave', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Izgleda veljaven', +'email-address-validity-invalid' => 'Obvezen je veljaven naslov!', + # User rights 'userrights' => 'Upravljanje s pravicami uporabnikov', 'userrights-lookup-user' => 'Upravljanje z uporabniškimi skupinami', @@ -1326,6 +1375,7 @@ Poleg tega vpisan e-poštni naslov omogoča drugim, da vam lahko pošiljajo elek 'right-hideuser' => 'Blokiranje uporabnika, in skritje pred javnostjo', 'right-ipblock-exempt' => 'Izogne se blokadam IP-naslova, samodejnim blokadam in blokadam območij', 'right-proxyunbannable' => 'Izogne se samodejnim blokadam proxyjev', +'right-unblockself' => 'Deblokiraj samega sebe', 'right-protect' => 'Spreminjanje stopnje zaščite in urejanje zaščitenih strani', 'right-editprotected' => 'Urejanje zaščitenih strani (brez kaskadne zaščite)', 'right-editinterface' => 'Urejanje uporabniškega vmesnika', @@ -1348,7 +1398,6 @@ Poleg tega vpisan e-poštni naslov omogoča drugim, da vam lahko pošiljajo elek 'right-siteadmin' => 'Zaklepanje in odklepanje baze podatkov', 'right-reset-passwords' => 'Ponastavljanje gesla drugih uporabnikov', 'right-override-export-depth' => 'Izvoz strani, vključno s povezaimi straneh do globine 5', -'right-versiondetail' => 'Pregledovanje razširjenih informacij o različici programske opreme', 'right-sendemail' => 'Pošiljanje e-pošte drugim uporabnikom', # User rights log @@ -1399,14 +1448,9 @@ Poleg tega vpisan e-poštni naslov omogoča drugim, da vam lahko pošiljajo elek 'recentchanges-legend' => 'Možnosti zadnjih sprememb', 'recentchangestext' => 'Na tej strani lahko spremljajte najnedavnejše spremembe wikija.', 'recentchanges-feed-description' => 'Spremljajte najnovejše spremembe wikija prek tega vira.', -'recentchanges-label-legend' => 'Legenda: $1.', -'recentchanges-legend-newpage' => '$1 - nova stran', 'recentchanges-label-newpage' => 'S tem urejanjem je bila ustvarjena nova stran', -'recentchanges-legend-minor' => '$1 - manjše urejanje', 'recentchanges-label-minor' => 'To je manjše urejanje', -'recentchanges-legend-bot' => '$1 - urejanja bota', 'recentchanges-label-bot' => 'To urejanje je bilo izvedeno z botom', -'recentchanges-legend-unpatrolled' => '$1 - ne-patruljirano urejanje', 'recentchanges-label-unpatrolled' => 'To urejanje še ni bilo pregledano', 'rcnote' => "Prikazujem {{PLURAL:$1|zadnjo spremembo|zadnji '''$1''' spremembi|zadnje '''$1''' spremembe|zadnjih '''$1''' sprememb|zadnjih '''$1''' sprememb}} v {{PLURAL:$2|zadnjem|zadnjih|zadnjih|zadnjih|zadnjih}} '''$2''' {{PLURAL:$2|dnevu|dneh|dneh|dneh|dneh}}, od $5, $4.", 'rcnotefrom' => "Navedene so spremembe od '''$2''' dalje (prikazujem jih do '''$1''').", @@ -1453,6 +1497,9 @@ Strani iz [[Special:Watchlist|vašega spiska nadzorov]] so '''odebeljene'''.", 'upload_directory_missing' => 'Mapa za nalaganje datotek ($1) manjka in je ni bilo mogoče ustvariti s spletnim strežnikom.', 'upload_directory_read_only' => 'V mapo za nalaganje datotek ($1) spletni strežnik ne more pisati.', 'uploaderror' => 'Napaka', +'upload-recreate-warning' => "'''Opozorilo: Datoteka s tem imenom je bila izbrisana ali prestavljena.''' + +Dnevnik brisanja in prestavitev za to stran sta navedena tukaj:", 'uploadtext' => "Spodnji obrazec lahko uporabite za nalaganje datotek. Za ogled ali iskanje že naloženih pojdite na [[Special:FileList|seznam naloženih datotek]], ponovne naložitve so zapisane tudi v [[Special:Log/upload|dnevniku nalaganja]], izbrisi pa v [[Special:Log/delete|dnevniku brisanja]]. @@ -1487,6 +1534,17 @@ Za grafični pogled obiščite [[Special:NewFiles|galerijo novih datotek]].', 'filetype-banned-type' => "'''».$1«''' ni dovoljena datotečna vrsta. {{PLURAL:$3|Dovoljena datotečna vrsta je|Dovoljeni datotečni vrsti sta|Dovoljene datotečne vrste so|Dovoljene datotečne vrste so}} $2.", 'filetype-missing' => 'Datoteka nima končnice (kot ».jpg«).', +'empty-file' => 'Datoteka, ki ste jo poslali, je prazna', +'file-too-large' => 'Datoteka, ki ste jo poslali, je prevelika', +'filename-tooshort' => 'Ime datoteke je prekratko', +'filetype-banned' => 'Ta vrsta datoteke je prepovedana', +'verification-error' => 'Ta datoteka ni opravila preverjanja datoteke', +'hookaborted' => 'Spremembo, ki ste jo poskušali narediti, je prekinila razširitev.', +'illegal-filename' => 'Ime datoteke ni dovoljeno', +'overwrite' => 'Prepisovanje obstoječe datoteke ni dovoljeno', +'unknown-error' => 'Prišlo je do neznane napake.', +'tmp-create-error' => 'Začasne datoteke ni bilo mogoče ustvariti', +'tmp-write-error' => 'Napaka pri pisanju začasne datoteke', 'large-file' => 'Priporočeno je, da datoteke niso večje od $1; ta datoteka je $2.', 'largefileserver' => 'Velikost datoteke presega strežnikove nastavitve.', 'emptyfile' => 'Kaže, da je aložena datoteka prazna. @@ -1517,13 +1575,14 @@ Prosimo, vrnite se in naložite svojo datoteko pod drugim imenom. 'file-exists-duplicate' => 'Ta datoteka je dvojnik {{PLURAL:$1|naslednje datoteke|naslednjih datotek}}:', 'file-deleted-duplicate' => 'Datoteka je identična tej ([[:$1]]), ki je bila predhodno izbrisana. Preverite zgodovino brisanja datoteke, preden jo ponovno naložite.', -'successfulupload' => 'Datoteka je bila uspešno naložena', 'uploadwarning' => 'Opozorilo!', 'uploadwarning-text' => 'Prosimo, spremenite opis datoteke spodaj in poskusite ponovno.', 'savefile' => 'Shrani datoteko', 'uploadedimage' => 'je naložil(-a) datoteko »[[$1]]«', 'overwroteimage' => 'je naložil(-a) novo različico datoteke »[[$1]]«', 'uploaddisabled' => 'Nalaganje je onemogočeno', +'copyuploaddisabled' => 'Nalaganje preko URL je onemogočeno', +'uploadfromurl-queued' => 'Vaše nalaganje je bilo postavljeno v čakalno vrsto.', 'uploaddisabledtext' => 'Nalaganje datotek je onemogočeno.', 'php-uploaddisabledtext' => 'Nalaganje datotek je onemogočeno v PHP. Prosimo preverite file_uploads nastavitev.', @@ -1559,6 +1618,14 @@ JD # Jenoptik MGP # Pentax PICT # mešano # ', +'upload-success-subj' => 'Datoteka je bila uspešno naložena', +'upload-success-msg' => 'Vaša datoteka iz [$2] je bila uspešno naložena. Na voljo je tukaj: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Težava pri nalaganju', +'upload-failure-msg' => 'Prišlo je do težave z vašo naloženo datoteko iz [$2]: + +$1', +'upload-warning-subj' => 'Opozorilo pri nalaganju', +'upload-warning-msg' => 'Prišlo je do težave pri nalaganju datoteke iz [$2]. Lahko se vrnete na [[Special:Upload/stash/$1|obrazec za nalaganje]], da odpravite težavo.', 'upload-proto-error' => 'Nepravilni protokol', 'upload-proto-error-text' => 'Oddaljeno nalaganje zahteva, da se URL začenja s http:// ali ftp://.', @@ -1625,6 +1692,7 @@ Za spremembo razvrščanja kliknete na glavo stolpca.', 'listfiles_search_for' => 'Išči po imenu datoteke:', 'imgfile' => 'dat.', 'listfiles' => 'Seznam datotek', +'listfiles_thumb' => 'Sličica', 'listfiles_date' => 'Datum', 'listfiles_name' => 'Ime', 'listfiles_user' => 'Uporabnik', @@ -1740,8 +1808,8 @@ Preden jih izbrišete, preverite še druge povezave nanje.', 'statistics-edits' => 'Urejanja strani od postavitve {{GRAMMAR:rodilnik|{{SITENAME}}}}', 'statistics-edits-average' => 'Povprečno število urejanj na stran', 'statistics-views-total' => 'Vseh ogledov', +'statistics-views-total-desc' => 'Ogledi neoobstoječih in posebnih strani niso vključeni', 'statistics-views-peredit' => 'Razmerje med ogledi in urejanji', -'statistics-jobqueue' => 'Dolžina [http://www.mediawiki.org/wiki/Manual:Job_queue vrste opravil]', 'statistics-users' => 'Registrirani [[Special:ListUsers|uporabniki]]', 'statistics-users-active' => 'Aktivni uporabniki', 'statistics-users-active-desc' => 'Uporabniki, ki so izvedli dejanje v {{PLURAL:$1|zadnjem dnevu|zadnjih $1 dneh}}', @@ -1756,7 +1824,7 @@ Stran se obravnava kot razločitvena, če uporablja predloge povezane iz [[Media 'doubleredirects' => 'Dvojne preusmeritve', 'doubleredirectstext' => 'Ta stran navaja strani, ki se preusmerjajo na druge preusmeritvene strani. Vsaka vrstica vsebuje povezavo do prve in druge preusmeritve, kakor tudi do cilja druge preusmeritve, ki je po navadi »prava« ciljna stran, na katero naj bi kazala prva preusmeritev. -Prečrtani vnosi so bili razrešeni.', +Prečrtani vnosi so bili razrešeni.', 'double-redirect-fixed-move' => 'Stran [[$1]] je bil premaknjen. Sedaj je preusmeritev na [[$2]].', 'double-redirect-fixer' => 'Popravljalec preusmeritev', @@ -1780,6 +1848,8 @@ Sedaj je preusmeritev na [[$2]].', 'nmembers' => '$1 {{PLURAL:$1|element|elementa|elementi|elementov|elementov}}', 'nrevisions' => '$1 {{PLURAL:$1|redakcija|redakciji|redakcije|redakcij|redakcij}}', 'nviews' => '$1 {{PLURAL:$1|ogled|ogleda|ogledi|ogledov|ogledov}}', +'nimagelinks' => 'Uporabljeno na $1 {{PLURAL:$1|strani|straneh}}', +'ntransclusions' => 'uporabljeno na $1 {{PLURAL:$1|strani|straneh}}', 'specialpage-empty' => 'Za to poročilo ni rezultatov.', 'lonelypages' => 'Osirotele strani', 'lonelypagestext' => 'Naslednje strani niso povezane ali vključene v nobeno drugo stran na {{GRAMMAR:locative|{{SITENAME}}}}.', @@ -1936,34 +2006,40 @@ Na voljo so morda [[{{MediaWiki:Listgrouprights-helppage}}|dodatne informacije]] 'listgrouprights-removegroup-self-all' => 'Lastni račun odstrani iz vseh skupin', # E-mail user -'mailnologin' => 'Manjka naslov pošiljatelja', -'mailnologintext' => 'Za pošiljanje e-pošte drugim uporabnikom se [[Special:UserLogin|prijavite]] in v [[Special:Preferences|nastavitvah]] vpišite veljaven e-poštni naslov.', -'emailuser' => 'Pošlji uporabniku e-pismo', -'emailpage' => 'Pošlji uporabniku e-pismo', -'emailpagetext' => 'S spodnjim obrazcem lahko uporabniku pošljete e-poštno sporočilo. +'mailnologin' => 'Manjka naslov pošiljatelja', +'mailnologintext' => 'Za pošiljanje e-pošte drugim uporabnikom se [[Special:UserLogin|prijavite]] in v [[Special:Preferences|nastavitvah]] vpišite veljaven e-poštni naslov.', +'emailuser' => 'Pošlji uporabniku e-pismo', +'emailpage' => 'Pošlji uporabniku e-pismo', +'emailpagetext' => 'S spodnjim obrazcem lahko uporabniku pošljete e-poštno sporočilo. E-poštni naslov, ki ste ga vpisali v [[Special:Preferences|uporabniških nastavitvah]], bo v e-sporočilu naveden kot naslov »Od:«, tako da bo prejemnik lahko odgovoril neposredno vam.', -'usermailererror' => 'Predmet e-pošte je vrnil napako:', -'defemailsubject' => 'Elektronska pošta {{GRAMMAR:rodilnik|{{SITENAME}}}}', -'noemailtitle' => 'Ni e-poštnega naslova', -'noemailtext' => 'Uporabnik ni navedel veljavnega e-poštnega naslova.', -'nowikiemailtitle' => 'E-pošta ni dovoljena', -'nowikiemailtext' => 'Ta uporabnik se je odločil, da ne bo prejmal e-pošte od drugih uporabnikov.', -'email-legend' => 'Pošlji e-pošto drugemu uporabniku {{GRAMMAR:akuzativ|{{SITENAME}}}}', -'emailfrom' => 'Od:', -'emailto' => 'Za:', -'emailsubject' => 'Zadeva:', -'emailmessage' => 'Sporočilo:', -'emailsend' => 'Pošlji', -'emailccme' => 'Po elektronski pošti mi pošlji kopijo mojega sporočila.', -'emailccsubject' => 'Kopija tvojega sporočila iz $1: $2', -'emailsent' => 'E-pismo je poslano!', -'emailsenttext' => 'E-pismo je poslano.', -'emailuserfooter' => 'To e-poštno sporočilo je bilo poslano od $1 uporabniku $2 preko funkcije »{{int:emailpage}}« na {{GRAMMAR:dative|{{SITENAME}}}}.', +'usermailererror' => 'Predmet e-pošte je vrnil napako:', +'defemailsubject' => 'Elektronska pošta {{GRAMMAR:rodilnik|{{SITENAME}}}}', +'usermaildisabled' => 'Uporabniška e-pošta je onemogočena', +'usermaildisabledtext' => 'Na tem wikiju ne morete poslati e-pošte drugim uporabnikom', +'noemailtitle' => 'Ni e-poštnega naslova', +'noemailtext' => 'Uporabnik ni navedel veljavnega e-poštnega naslova.', +'nowikiemailtitle' => 'E-pošta ni dovoljena', +'nowikiemailtext' => 'Ta uporabnik se je odločil, da ne bo prejmal e-pošte od drugih uporabnikov.', +'email-legend' => 'Pošlji e-pošto drugemu uporabniku {{GRAMMAR:akuzativ|{{SITENAME}}}}', +'emailfrom' => 'Od:', +'emailto' => 'Za:', +'emailsubject' => 'Zadeva:', +'emailmessage' => 'Sporočilo:', +'emailsend' => 'Pošlji', +'emailccme' => 'Po elektronski pošti mi pošlji kopijo mojega sporočila.', +'emailccsubject' => 'Kopija tvojega sporočila iz $1: $2', +'emailsent' => 'E-pismo je poslano!', +'emailsenttext' => 'E-pismo je poslano.', +'emailuserfooter' => 'To e-poštno sporočilo je bilo poslano od $1 uporabniku $2 preko funkcije »{{int:emailpage}}« na {{GRAMMAR:dative|{{SITENAME}}}}.', + +# User Messenger +'usermessage-summary' => 'Pusti sistemsko sporočilo.', +'usermessage-editor' => 'Sistemski sporočevalec', # Watchlist 'watchlist' => 'Spisek nadzorov', 'mywatchlist' => 'Spisek nadzorov', -'watchlistfor' => "(za '''$1''')", +'watchlistfor2' => 'Za $1 $2', 'nowatchlist' => 'Vaš spisek nadzorov je prazen.', 'watchlistanontext' => 'Za pregled ali urejanje vsebine vašega spiska nadzorov se morate $1.', 'watchnologin' => 'Niste prijavljeni', @@ -2024,6 +2100,9 @@ Na spisku nadzorov lahko tudi ponastavite zastavice obveščanj za vse spremljan Vaš opozorilni sistem {{GRAMMAR:rodilnik|{{SITENAME}}}} -- +Za spremembo nastavitev e-poštnih obvestil obiščite +{{fullurl:{{#special:Preferences}}}} + Za spremembo nastavitev spiska nadzorov obiščite {{fullurl:{{#special:Watchlist}}/edit}} @@ -2084,7 +2163,10 @@ Zadnji je stran urejal uporabnik [[User:$3|$3]] ([[User talk:$3|pogovor]]{{int:p 'revertpage-nouser' => 'vrnitev sprememb (uporabniško ime odstranjeno) na zadnje urejanje uporabnika [[User:$1|$1]]', 'rollback-success' => 'Razveljavljene spremembe uporabnika $1; vrnjeno na urejanje uporabnika $2.', -'sessionfailure' => 'Vaša prijava ni uspela; da bi preprečili ugrabitev seje, je bilo dejanje preklicano. Prosimo, izberite »Nazaj« in ponovno naložite stran, s katere prihajate, nato poskusite znova.', + +# Edit tokens +'sessionfailure-title' => 'Neuspeh seje', +'sessionfailure' => 'Vaša prijava ni uspela; da bi preprečili ugrabitev seje, je bilo dejanje preklicano. Prosimo, izberite »Nazaj« in ponovno naložite stran, s katere prihajate, nato poskusite znova.', # Protect 'protectlogpage' => 'Dnevnik zaščit strani', @@ -2219,19 +2301,23 @@ $1', 'month' => 'Od meseca (in prej):', 'year' => 'Od leta (in prej):', -'sp-contributions-newbies' => 'Prikaži samo prispevke novih računov', -'sp-contributions-newbies-sub' => 'Prispevki novincev', -'sp-contributions-newbies-title' => 'Uporabniški prispevki novih računov', -'sp-contributions-blocklog' => 'dnevnik blokiranja', -'sp-contributions-deleted' => 'izbrisani uporabnikovi prispevki', -'sp-contributions-logs' => 'dnevniki', -'sp-contributions-talk' => 'pogovor', -'sp-contributions-userrights' => 'upravljanje s pravicami uporabnikov', -'sp-contributions-blocked-notice' => 'Ta uporabnik je trenutno blokiran. +'sp-contributions-newbies' => 'Prikaži samo prispevke novih računov', +'sp-contributions-newbies-sub' => 'Prispevki novincev', +'sp-contributions-newbies-title' => 'Uporabniški prispevki novih računov', +'sp-contributions-blocklog' => 'dnevnik blokiranja', +'sp-contributions-deleted' => 'izbrisani uporabnikovi prispevki', +'sp-contributions-uploads' => 'naložene datoteke', +'sp-contributions-logs' => 'dnevniki', +'sp-contributions-talk' => 'pogovor', +'sp-contributions-userrights' => 'upravljanje s pravicami uporabnikov', +'sp-contributions-blocked-notice' => 'Ta uporabnik je trenutno blokiran. +Najnovejši vnos v dnevniku blokad je naveden spodaj:', +'sp-contributions-blocked-notice-anon' => 'Ta IP-naslov je trenutno blokiran. Najnovejši vnos v dnevniku blokad je naveden spodaj:', -'sp-contributions-search' => 'Išči prispevke', -'sp-contributions-username' => 'IP-naslov ali uporabniško ime:', -'sp-contributions-submit' => 'Išči', +'sp-contributions-search' => 'Išči prispevke', +'sp-contributions-username' => 'IP-naslov ali uporabniško ime:', +'sp-contributions-toponly' => 'Prikaži samo vrhnje redakcije', +'sp-contributions-submit' => 'Išči', # What links here 'whatlinkshere' => 'Kaj se povezuje sem', @@ -2292,7 +2378,6 @@ Oglejte si [[Special:IPBlockList|seznam blokiranih IP-naslovov]] za pregled blok 'ipb-edit-dropdown' => 'Uredi razloge blokade', 'ipb-unblock-addr' => 'Deblokiraj $1', 'ipb-unblock' => 'Odblokirajte uporabniško ime ali IP-naslov', -'ipb-blocklist-addr' => 'Obstoječe blokade za $1', 'ipb-blocklist' => 'Ogled obstoječih blokad', 'ipb-blocklist-contribs' => 'Prispevki za $1', 'unblockip' => 'Deblokirajte uporabnika', @@ -2367,6 +2452,8 @@ Računa žal ne morete ustvariti.', 'cant-block-while-blocked' => 'Ne morete blokirati drugih uporabnikove, medtem ko ste sami blokirani.', 'cant-see-hidden-user' => 'Uporabnik, ki ga poskušate blokirate, je že blokiran in skrit. Ker nimate pravice hideuser, si ne morete ogledati ali urejati uporabnikove blokade.', +'ipbblocked' => 'Ne morete blokirati ali deblokirati drugih uporabnikov, saj ste sami blokirani', +'ipbnounblockself' => 'Ni vam dovoljeno deblokirati samega sebe', # Developer tools 'lockdb' => 'Zakleni zbirko podatkov', @@ -2403,6 +2490,17 @@ To pomeni, da lahko, če se zmotite, strani vrnete prvotno ime, ne morete pa pre '''Opozorilo!''' Prestavitev strani je lahko za priljubljeno stran velika in nepričakovana sprememba, zato pred izbiro ukaza dobro premislite.", +'movepagetext-noredirectfixer' => "Z uporabo spodnjega obrazca lahko preimenujete stran tako, da prestavite vso njeno zgodovino na novo ime. +Star naslov bo postal preusmeritvena stran na nov naslov. +Ne pozabite preveriti [[Special:DoubleRedirects|dvojnih]] ali [[Special:BrokenRedirects|pretrganih preusmeritev]]. +Vi ste odgovorni, da vse povezave še naprej kažejo tja, kamor naj bi. + +Upoštevajte, da stran '''ne''' bo prestavljena, če že obstaja stran z novim naslovom, razen če je prazna ali preusmeritev brez pretekle zgodovine urejanj. +To pomeni, da lahko stran preimenujete nazaj, če ste naredili napako, vendar ne morete prepisati obstoječe strani. + +'''Opozorilo!''' +To je lahko velika in nepričakovana sprememba za priljubljeno stran; +prosimo, pred nadaljevanjem se prepričajte, da razumete posledice tega dejanja.", 'movepagetalktext' => "Če obstaja, bo samodejno prestavljena tudi pripadajoča pogovorna stran, '''razen kadar''' *pod novim imenom že obstaja neprazna pogovorna stran ali *ste odkljukali spodnji okvirček. @@ -2460,6 +2558,7 @@ strani ni mogoče prestaviti samo vaše.', 'immobile-source-page' => 'Te strani ni mogoče prestaviti.', 'immobile-target-page' => 'Ne morem premakniti na ta ciljni naslov.', 'imagenocrossnamespace' => 'Ne morem premakniti datoteke izven imenskega prostora datotek', +'nonfile-cannot-move-to-file' => 'Ne morem premakniti nedatoteko v imenski prostor datotek', 'imagetypemismatch' => 'Nova končnica datoteke se ne ujema z njeno vrsto', 'imageinvalidfilename' => 'Ciljno ime datoteke je neveljavno', 'fix-double-redirects' => 'Posodobi vse preusmeritve, ki kažejo na prvotni naslov', @@ -2541,6 +2640,7 @@ Shranite jo na vaš računalnik in naložite tukaj.', 'importstart' => 'Uvažam strani ...', 'import-revision-count' => '$1 {{PLURAL:$1|redakcija|redakciji|redakcije|redakcij|redakcij}}', 'importnopages' => 'Ni strani za uvoz.', +'imported-log-entries' => '{{PLURAL:$1|Uvožen je bil $1 dnevniški vnos|Uvožena sta bila $1 dnevniška vnosa|Uvoženi so bili $1 dnevniški vnosi|Uvoženih je bilo $1 dnevniških vnosov}}.', 'importfailed' => 'Uvoz ni uspel: $1', 'importunknownsource' => 'Neznana vrsta vira uvoza', 'importcantopen' => 'Neuspešno odpiranje uvožene datoteke', @@ -2638,6 +2738,8 @@ Prosimo, poskusite znova.', 'tooltip-rollback' => 'Funkcija »Vrni« z enim klikom povrne vsa urejanja zadnjega urejevalca te strani', 'tooltip-undo' => '"Razveljavi" vrne to urejanje in odpre predogled v oknu za urejanje. Omogoča vnos pojasnila v povzetku urejanja.', +'tooltip-preferences-save' => 'Shrani nastavitve', +'tooltip-summary' => 'Vnesite kratek povzetek', # Metadata 'nodublincore' => 'Metapodatki Dublin Core RDF so na tem strežniku onemogočeni.', @@ -2734,13 +2836,16 @@ Z njenim zagonom lahko ogrozite vaš sistem.", 'widthheight' => '$1 × $2', 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|stran|strani}}', 'file-info' => 'Velikost datoteke: $1, MIME-vrsta: $2', -'file-info-size' => '($1 × $2 točk, velikost datoteke: $3, MIME-vrsta: $4)', +'file-info-size' => '$1 × $2 točk, velikost datoteke: $3, vrsta MIME: $4', 'file-nohires' => 'Slika višje ločljivosti ni na voljo.', -'svg-long-desc' => '(datoteka SVG, v izvirniku $1 × $2 slikovnih točk, velikost datoteke: $3)', +'svg-long-desc' => 'datoteka SVG, v izvirniku $1 × $2 slikovnih točk, velikost datoteke: $3', 'show-big-image' => 'Slika v višji ločljivosti', 'show-big-image-thumb' => 'Velikost predogleda: $1 × $2 točk', 'file-info-gif-looped' => 'ponavljajoče', 'file-info-gif-frames' => '$1 {{PLURAL:$1|sličica|sličici|sličice|sličic}}', +'file-info-png-looped' => 'ponavljajoče', +'file-info-png-repeat' => 'predvajano {{PLURAL:$1|$1-krat}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|sličica|sličici|sličice|sličic}}', # Special:NewFiles 'newimages' => 'Galerija novih datotek', @@ -2898,6 +3003,7 @@ Druga bodo po privzetem skrita. 'exif-gpsareainformation' => 'Ime GPS-območja', 'exif-gpsdatestamp' => 'GPS-datum', 'exif-gpsdifferential' => 'Diferencialni popravek GPS', +'exif-objectname' => 'Kratek naslov', # EXIF attributes 'exif-compression-1' => 'Nestisnjeno', @@ -3060,27 +3166,27 @@ Druga bodo po privzetem skrita. 'limitall' => 'vse', # E-mail address confirmation -'confirmemail' => 'Potrditev naslova elektronske pošte', -'confirmemail_noemail' => 'Nimate določenega veljavnega e-poštnega naslova v vaših [[Special:Preferences|uporabniških nastavitvah]].', -'confirmemail_text' => 'Za uporabo e-poštnih možnosti {{GRAMMAR:rodilnik|{{SITENAME}}}} morate najprej potrditi svoj e-poštni naslov. +'confirmemail' => 'Potrditev naslova elektronske pošte', +'confirmemail_noemail' => 'Nimate določenega veljavnega e-poštnega naslova v vaših [[Special:Preferences|uporabniških nastavitvah]].', +'confirmemail_text' => 'Za uporabo e-poštnih možnosti {{GRAMMAR:rodilnik|{{SITENAME}}}} morate najprej potrditi svoj e-poštni naslov. S klikom spodnjega gumba pošljite nanj potrditveno sporočilo in sledite prejetim navodilom. Ali ste svoj e-poštni naslov že potrdili, lahko preverite v nastavitvah.', -'confirmemail_pending' => 'Potrditveno geslo vam je že bilo poslano; če ste pred kratkim ustvarili svoj račun, boste na njega morali počakati nekaj minut da prispe, preden boste poskušali zahtevali novo geslo.', -'confirmemail_send' => 'Pošlji mi potrditveno sporočilo', -'confirmemail_sent' => 'Potrditveno e-sporočilo je bilo poslano.', -'confirmemail_oncreate' => 'Potrditveno geslo je bilo poslano na vaš e-poštni naslov. +'confirmemail_pending' => 'Potrditveno geslo vam je že bilo poslano; če ste pred kratkim ustvarili svoj račun, boste na njega morali počakati nekaj minut da prispe, preden boste poskušali zahtevali novo geslo.', +'confirmemail_send' => 'Pošlji mi potrditveno sporočilo', +'confirmemail_sent' => 'Potrditveno e-sporočilo je bilo poslano.', +'confirmemail_oncreate' => 'Potrditveno geslo je bilo poslano na vaš e-poštni naslov. To geslo ni potrebno za vpis, vendar ga boste morali vnesti pred omogočanjem katere koli funkcije temelječe na e-pošti na wikiju.', -'confirmemail_sendfailed' => 'Potrditvenega sporočila ni bilo mogoče poslati. +'confirmemail_sendfailed' => 'Potrditvenega sporočila ni bilo mogoče poslati. Prosimo, preverite, če niste naslova vnesli napačno. Posrednik e-pošte je vrnil: $1', -'confirmemail_invalid' => 'Potrditveno geslo je neveljavno. Morda je poteklo.', -'confirmemail_needlogin' => 'Za potrditev svojega e-poštnega naslova se morate $1.', -'confirmemail_success' => 'Vaš e-poštni naslov je potrjen. Zdaj se lahko prijavite in uporabljate wiki.', -'confirmemail_loggedin' => 'Svoj elektronski naslov ste uspešno potrdili.', -'confirmemail_error' => 'Vaša potrditev se žal ni shranila.', -'confirmemail_subject' => 'Potrditev e-poštnega naslova', -'confirmemail_body' => 'Nekdo, verjetno vi, z IP-naslovom $1, +'confirmemail_invalid' => 'Potrditveno geslo je neveljavno. Morda je poteklo.', +'confirmemail_needlogin' => 'Za potrditev svojega e-poštnega naslova se morate $1.', +'confirmemail_success' => 'Vaš e-poštni naslov je potrjen. Zdaj se lahko prijavite in uporabljate wiki.', +'confirmemail_loggedin' => 'Svoj elektronski naslov ste uspešno potrdili.', +'confirmemail_error' => 'Vaša potrditev se žal ni shranila.', +'confirmemail_subject' => 'Potrditev e-poštnega naslova', +'confirmemail_body' => 'Nekdo, verjetno vi, z IP-naslovom $1, je v {{GRAMMAR:dajalnik|{{SITENAME}}}} ustvaril račun »$2« in zanj vpisal ta elektronski naslov. Da bi potrdili, da ta račun resnično pripada vam in s tem @@ -3094,8 +3200,36 @@ in tako prekličite potrditev elektronskega naslova: $5 Potrditvena koda bo potekla $4.', -'confirmemail_invalidated' => 'Potrditev e-poštnega naslova preklicana', -'invalidateemail' => 'Prekliči potrditev e-poštnega naslova', +'confirmemail_body_changed' => 'Nekdo, najverjetneje vi, je z IP-naslova $1 +na strani {{SITENAME}} spremenil e-poštni naslov računa »$2« na ta naslov. + +Da potrdite lastništvo tega računa in ponovno aktivirate +e-poštne funkcije na {{GRAMMAR:dajalnik|{{SITENAME}}}}, odprite to povezavo v vašem brskalniku: + +$3 + +Če omenjeni račun *ni* vaš, sledite spodnji povezavi za preklic +potrditve e-poštnega naslova: + +$5 + +Potrditvena koda poteče $4.', +'confirmemail_body_set' => 'Nekdo, najverjetneje vi, je z IP-naslova $1 +na strani {{SITENAME}} nastavil e-poštni naslov računa »$2« na ta naslov. + +Da potrdite lastništvo tega računa in ponovno aktivirate +e-poštne funkcije na {{GRAMMAR:dajalnik|{{SITENAME}}}}, odprite to povezavo v vašem brskalniku: + +$3 + +Če omenjeni račun *ni* vaš, sledite spodnji povezavi za preklic +potrditve e-poštnega naslova: + +$5 + +Potrditvena koda poteče $4.', +'confirmemail_invalidated' => 'Potrditev e-poštnega naslova preklicana', +'invalidateemail' => 'Prekliči potrditev e-poštnega naslova', # Scary transclusion 'scarytranscludedisabled' => '[Prevključevanje med wikiji je onemogočeno]', @@ -3137,6 +3271,7 @@ Prosimo, potrdite, da jo resnično želite znova ustvariti.", 'table_pager_first' => 'Prva stran', 'table_pager_last' => 'Zadnja stran', 'table_pager_limit' => 'Prikaži $1 postavk na stran', +'table_pager_limit_label' => 'Postavk na stran:', 'table_pager_limit_submit' => 'Pojdi', 'table_pager_empty' => 'Ni zadetkov', @@ -3194,6 +3329,7 @@ Uporabite lahko tudi [[Special:Watchlist/edit|standardni urejevalnik]].', 'version-specialpages' => 'Posebne strani', 'version-parserhooks' => 'Razširitve razčlenjevalnika', 'version-variables' => 'Spremenljivke', +'version-skins' => 'Kože', 'version-other' => 'Ostalo', 'version-mediahandlers' => 'Upravljavci predstavnostnih vsebin', 'version-hooks' => 'Razširitve', @@ -3205,6 +3341,13 @@ Uporabite lahko tudi [[Special:Watchlist/edit|standardni urejevalnik]].', 'version-hook-subscribedby' => 'Naročen s strani', 'version-version' => '(Različica $1)', 'version-license' => 'Dovoljenje', +'version-poweredby-credits' => "Ta wiki poganja '''[http://www.mediawiki.org/ MediaWiki]''', vse pravice pridržave © 2001-$1 $2.", +'version-poweredby-others' => 'drugi', +'version-license-info' => 'MediaWiki je prosto programje; lahko ga razširjate in / ali spreminjate pod pogoji GNU General Public License, kot ga je objavila Free Software Foundation; bodisi License različice 2 ali (po vaši izbiri) katere koli poznejše različice. + +MediaWiki je razširjan v upanju, da bo uporaben, vendar BREZ KAKRŠNEGA KOLI ZAGOTOVILA; tudi brez posrednega jamstva PRODAJNE VREDNOSTI ali PRIMERNOSTI ZA DOLOČEN NAMEN. Oglejte si GNU General Public License za več podrobnosti. + +Skupaj s programom bi morali bi prejeti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopijo GNU General Public License]; če je niste, pišite Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ali jo [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html preberite na spletu].', 'version-software' => 'Nameščena programska oprema', 'version-software-product' => 'Izdelek', 'version-software-version' => 'Različica', @@ -3275,6 +3418,15 @@ Vnesite ime datoteke brez predpone »{{ns:image}}:«.', 'tags-edit' => 'uredi', 'tags-hitcount' => '$1 {{PLURAL:$1|sprememba|spremembi|spremembe|sprememb|sprememb}}', +# Special:ComparePages +'comparepages' => 'Primerjaj strani', +'compare-selector' => 'Primerjaj redakcije strani', +'compare-page1' => 'Stran 1', +'compare-page2' => 'Stran 2', +'compare-rev1' => 'Redakcija 1', +'compare-rev2' => 'Redakcija 2', +'compare-submit' => 'Primerjaj', + # Database error messages 'dberr-header' => 'Ta wiki ima težavo', 'dberr-problems' => 'Oprostite! @@ -3292,8 +3444,13 @@ Ta stran se sooča s tehničnimi težavami.', 'htmlform-float-invalid' => 'Vrednost, ki ste jo vnesli, ni število.', 'htmlform-int-toolow' => 'Vrednost, ki ste jo vnesli, je manjša od najmanjše dovoljene vrednosti $1', 'htmlform-int-toohigh' => 'Vrednost, ki ste jo vnesli, je večja od največje dovoljene vrednosti $1', +'htmlform-required' => 'Ta vrednost je zahtevana', 'htmlform-submit' => 'Pošlji', 'htmlform-reset' => 'Razveljavi spremembe', 'htmlform-selectorother-other' => 'Drugo', +# SQLite database support +'sqlite-has-fts' => '$1 s podporo iskanju polnih besedil', +'sqlite-no-fts' => '$1 brez podpore iskanju polnih besedil', + ); diff --git a/languages/messages/MessagesSli.php b/languages/messages/MessagesSli.php index bac2d401..dc75586a 100644 --- a/languages/messages/MessagesSli.php +++ b/languages/messages/MessagesSli.php @@ -37,8 +37,7 @@ $messages = array( 'tog-editsection' => 'Verknipfunga zim Beoarbeeta voo eenzelna Obschieta oazeega', 'tog-editsectiononrightclick' => 'Eenzelne Obschniete dorch Rechtsklick beoarbeeta (JavaScript)', 'tog-showtoc' => 'Inhaltsverzeichnis aozäan bei meh wie drei Ieberschrifta', -'tog-rememberpassword' => 'Notzer sull uff de Lengde oagemeldt blein (login uff diesem Rechner speichern)', -'tog-editwidth' => 'Eingabefeld erweitern, im dann ganza Bildschirm auszufiella', +'tog-rememberpassword' => 'Notzer sull uff de Lengde oagemeldt blein (login uff diesem Rechner speichern) (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Salber derstallte Seyta automatisch beobachta', 'tog-watchdefault' => 'Salber geänderte on neu erstellte Seyta automatisch beobachta (zu menner Beobachtungsliste hinzufügen)', 'tog-watchmoves' => 'Vo merr salber verschobene Seyta autoatisch beobachta', @@ -65,74 +64,31 @@ $messages = array( 'tog-watchlisthideliu' => 'Bearbeitungen angemeldeter Benutzer ausblenden', 'tog-watchlisthideanons' => 'Bearbeitungen anonymer Benutzer (IP-Adressen) ausblenden', 'tog-watchlisthidepatrolled' => 'Kontrollierte Änderungen ei der Beobachtungsliste ausblenda', -'tog-nolangconversion' => 'Konvertierung von Sprachvarianten deaktivieren', -'tog-ccmeonemails' => 'Schicke mir Kopien der E-Mails, die ich anderen Benutzern sende', -'tog-diffonly' => 'Zeige beim Versionsvergleich nur die Unterschiede, nicht die vollständige Seite', 'tog-showhiddencats' => 'Vestackte Kategorien oazäan', 'tog-norollbackdiff' => 'Underschied noachm Zericksatza underdricka', -'underline-always' => 'immer', -'underline-never' => 'nie', 'underline-default' => 'obhängig voo dan Eistellunga der Suchmaschine', # Font style option in Special:Preferences 'editfont-style' => 'Schriftfamilie fier dann Text eim Beorbeetungsfanster:', 'editfont-default' => 'obhängig voo dan Eistellunga der Suchmaschine', 'editfont-monospace' => 'Schrift miet faster Zeechabreite', -'editfont-sansserif' => 'Serifenlose Groteskschrift', 'editfont-serif' => 'Schrift miet Serifen', # Dates -'sunday' => 'Sunntich', -'monday' => 'Montich', -'tuesday' => 'Dienstich', -'wednesday' => 'Mietwuch', -'thursday' => 'Dunnstich', -'friday' => 'Freitich', -'saturday' => 'Sinnomd', -'sun' => 'Su', -'mon' => 'Mu', -'tue' => 'Di', -'wed' => 'Mi', -'thu' => 'Du', -'fri' => 'Fr', -'sat' => 'Si', -'january' => 'Januar', -'february' => 'Februar', -'march' => 'März', -'april' => 'Oapril', -'may_long' => 'Mai', -'june' => 'Juni', -'july' => 'Juli', -'august' => 'August', -'september' => 'September', -'october' => 'Oktober', -'november' => 'November', -'december' => 'Dezember', -'january-gen' => 'Januar', -'february-gen' => 'Februars', -'march-gen' => 'Märzes', -'april-gen' => 'Aprils', -'may-gen' => 'Mais', -'june-gen' => 'Junis', -'july-gen' => 'Julis', -'august-gen' => 'Augusts', -'september-gen' => 'Septembers', -'october-gen' => 'Oktobers', -'november-gen' => 'Novembers', -'december-gen' => 'Dezembers', -'jan' => 'Jan.', -'feb' => 'Feb.', -'mar' => 'Mär.', -'apr' => 'Apr.', -'may' => 'Mai', -'jun' => 'Jun.', -'jul' => 'Jul.', -'aug' => 'Aug.', -'sep' => 'Sep.', -'oct' => 'Okt.', -'nov' => 'Nov.', -'dec' => 'Dez.', +'sunday' => 'Sunntich', +'monday' => 'Montich', +'tuesday' => 'Dienstich', +'wednesday' => 'Mietwuch', +'thursday' => 'Dunnstich', +'friday' => 'Freitich', +'saturday' => 'Sinnomd', +'sun' => 'Su', +'mon' => 'Mu', +'thu' => 'Du', +'sat' => 'Si', +'april' => 'Oapril', +'january-gen' => 'Januar', # Categories related messages 'pagecategories' => '{{PLURAL:$1|Heetgruppe|Heetgruppa}}', @@ -168,103 +124,66 @@ $messages = array( 'moredotdotdot' => 'Mehr ...', 'mypage' => 'Eigene Seyte', 'mytalk' => 'Mei Dischkur', -'anontalk' => 'Diskussionsseite dieser IP', -'navigation' => 'Navigation', 'and' => ', und', # Cologne Blue skin 'qbfind' => 'Fenda', -'qbbrowse' => 'Blättern', 'qbedit' => 'Ändern', 'qbpageoptions' => 'Seytaoptiona', 'qbpageinfo' => 'Seytadata', 'qbmyoptions' => 'Menne Seyta', 'qbspecialpages' => 'Spezialseyta', -'faq' => 'FAQ', -'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Obschnitt hinzufiega', -'vector-action-delete' => 'Läscha', -'vector-action-move' => 'Verschieba', -'vector-action-protect' => 'Schützen', -'vector-action-undelete' => 'Wiederherstella', -'vector-action-unprotect' => 'Freigahn', -'vector-namespace-category' => 'Kategorie', -'vector-namespace-help' => 'Hilfeseyte', -'vector-namespace-image' => 'Datei', -'vector-namespace-main' => 'Seyte', -'vector-namespace-media' => 'Mediaseyte', -'vector-namespace-mediawiki' => 'MediaWiki-Systemtext', -'vector-namespace-project' => 'Projektseyte', -'vector-namespace-special' => 'Spezialseyte', -'vector-namespace-talk' => 'Dischkur', -'vector-namespace-template' => 'Vierlooche', -'vector-namespace-user' => 'Notzerseyte', -'vector-view-create' => 'Erstella', -'vector-view-edit' => 'Bearbeita', -'vector-view-history' => 'Versionsgeschichte', -'vector-view-view' => 'Lessa', -'vector-view-viewsource' => 'Quelltext siehn', -'actions' => 'Aksjonna', -'namespaces' => 'Noamensraum:', -'variants' => 'Varianta', - -'errorpagetitle' => 'Fehler', -'returnto' => 'Zurück zur Seite $1.', -'tagline' => 'Aus {{SITENAME}}', -'help' => 'Hilfe', -'search' => 'Siche', -'searchbutton' => 'Sicha', -'go' => 'Ausfiehrn', -'searcharticle' => 'Seyte', -'history' => 'Versionen', -'history_short' => 'Geschichte', -'updatedmarker' => '(geändert)', -'info_short' => 'Information', -'printableversion' => 'Druckversion', -'permalink' => 'Permanentlink', -'print' => 'Drucken', -'edit' => 'Beoarbeita', -'create' => 'Erstella', -'editthispage' => 'Seyte beoarbeeta', -'create-this-page' => 'Seyte erstella', -'delete' => 'Löschen', -'deletethispage' => 'Diese Seyte löschen', -'undelete_short' => '{{PLURAL:$1|1 Version|$1 Versionen}} wiederherstellen', -'protect' => 'Schützen', -'protect_change' => 'ändern', -'protectthispage' => 'Seite schützen', -'unprotect' => 'Freigahn', -'unprotectthispage' => 'Schutz aufheben', -'newpage' => 'Neue Seyte', -'talkpage' => 'Diskussion', -'talkpagelinktext' => 'Dischkur', -'specialpage' => 'Spezialseyte', -'personaltools' => 'Persönliche Werkzeuge', -'postcomment' => 'Neuer Obschnitt', -'articlepage' => 'Seyte', -'talk' => 'Dischkur', -'views' => 'Oansichta', -'toolbox' => 'Werkzeuge', -'userpage' => 'Nutzerseyte oazeiga', -'projectpage' => 'Projektseyte', -'imagepage' => 'Dateiseyte oazeiga', -'mediawikipage' => 'Dischkurseyte oazeiga', -'templatepage' => 'Vurloogaseyte oazeiga', -'viewhelppage' => 'Hilfeseyte oanzeiga', -'categorypage' => 'Heetgruppeseyte oazeiga', -'viewtalkpage' => 'Dischkur', -'otherlanguages' => 'Ei andern Sproacha', -'redirectedfrom' => '(Weitergeleitet vo $1)', -'redirectpagesub' => 'Weiterleitung', -'lastmodifiedat' => 'Diese Seyte wurde zuletzt oam $1 im $2 Seeger geändert.', -'viewcount' => 'Diese Seyte wurde bisher {{PLURAL:$1|eimuol|$1 times}} oabgerufa.', -'protectedpage' => 'Geschützte Seyte', -'jumpto' => 'Wechseln zu:', -'jumptonavigation' => 'Navigation', -'jumptosearch' => 'Siche', -'view-pool-error' => 'Entschuldigung, de Server sein eim Moment ieberlastet. +'vector-action-addsection' => 'Obschnitt hinzufiega', +'vector-action-delete' => 'Läscha', +'vector-action-move' => 'Verschieba', +'vector-action-undelete' => 'Wiederherstella', +'vector-action-unprotect' => 'Freigahn', +'vector-view-create' => 'Erstella', +'vector-view-edit' => 'Bearbeita', +'vector-view-view' => 'Lessa', +'vector-view-viewsource' => 'Quelltext siehn', +'actions' => 'Aksjonna', +'namespaces' => 'Noamensraum:', +'variants' => 'Varianta', + +'search' => 'Siche', +'searchbutton' => 'Sicha', +'go' => 'Ausfiehrn', +'searcharticle' => 'Seyte', +'history_short' => 'Geschichte', +'updatedmarker' => '(geändert)', +'permalink' => 'Permanentlink', +'edit' => 'Beoarbeita', +'create' => 'Erstella', +'editthispage' => 'Seyte beoarbeeta', +'create-this-page' => 'Seyte erstella', +'deletethispage' => 'Diese Seyte löschen', +'unprotect' => 'Freigahn', +'newpage' => 'Neue Seyte', +'talkpage' => 'Diskussion', +'talkpagelinktext' => 'Dischkur', +'specialpage' => 'Spezialseyte', +'postcomment' => 'Neuer Obschnitt', +'articlepage' => 'Seyte', +'talk' => 'Dischkur', +'views' => 'Oansichta', +'userpage' => 'Nutzerseyte oazeiga', +'projectpage' => 'Projektseyte', +'imagepage' => 'Dateiseyte oazeiga', +'mediawikipage' => 'Dischkurseyte oazeiga', +'templatepage' => 'Vurloogaseyte oazeiga', +'viewhelppage' => 'Hilfeseyte oanzeiga', +'categorypage' => 'Heetgruppeseyte oazeiga', +'viewtalkpage' => 'Dischkur', +'otherlanguages' => 'Ei andern Sproacha', +'redirectedfrom' => '(Weitergeleitet vo $1)', +'lastmodifiedat' => 'Diese Seyte wurde zuletzt oam $1 im $2 Seeger geändert.', +'viewcount' => 'Diese Seyte wurde bisher {{PLURAL:$1|eimuol|$1 times}} oabgerufa.', +'protectedpage' => 'Geschützte Seyte', +'jumptosearch' => 'Siche', +'view-pool-error' => 'Entschuldigung, de Server sein eim Moment ieberlastet. Zu viele Benutzer versicha, diese Seyte zu besicha. Bitte warte eenige Minuta, bevor du is noo eemoll versichst. @@ -275,11 +194,7 @@ $1', 'aboutpage' => 'Project:Ieber', 'copyright' => 'Inhalt ies verfügbar unter der $1.', 'copyrightpage' => '{{ns:project}}:Urheberrecht', -'currentevents' => 'Aktuelle Ereignisse', -'currentevents-url' => 'Project:Aktuelle Ereignisse', -'disclaimers' => 'Impressum', 'disclaimerpage' => 'Project:Impressum', -'edithelp' => 'Bearbeitungshilfe', 'edithelppage' => 'Help:Bearbeitungshilfe', 'helppage' => 'Help:Hilfe', 'mainpage' => 'Heetseyte', @@ -287,17 +202,13 @@ $1', 'policy-url' => 'Project:Leitlinien', 'portal' => '{{SITENAME}}-Portal', 'portal-url' => 'Project:Nutzerportal', -'privacy' => 'Datenschutz', -'privacypage' => 'Project:Datenschutz', 'badaccess' => 'Kenne ausreichenden Rechte', -'badaccess-group0' => 'Du hast nicht die erforderliche Berechtigung für diese Aktion.', 'badaccess-groups' => 'Diese Aktion ies beschränkt uff Benutzer, de {{PLURAL:$2|der Gruppe|anner der Gruppen}} „$1“ angehören.', 'versionrequired' => 'Version $1 vo MediaWiki ies erforderlich', 'versionrequiredtext' => 'Version $1 vo MediaWiki ies erforderlich, im diese Seyte zu nutza. Siehe de [[Special:Version|Versionsseyte]]', -'ok' => 'OK', 'retrievedfrom' => 'voo "$1"', 'youhavenewmessages' => 'Du hust $1 ($2).', 'newmessageslink' => 'Neue Noachrichta', @@ -315,7 +226,6 @@ $1', 'thisisdeleted' => '$1 oanseha oder wiederherstella?', 'viewdeleted' => '$1 oanzeega?', 'restorelink' => '$1 {{PLURAL:$1|gelöschte Version|gelöschte Versiona}}', -'feedlinks' => 'Feed:', 'feed-invalid' => 'Ungültiger Abonnement-Typ.', 'feed-unavailable' => 'Es steha keene Feeds zur Verfiegung.', 'site-rss-feed' => 'RSS-Feed fier $1', @@ -330,14 +240,11 @@ $1', 'nstab-media' => 'Media', 'nstab-special' => 'Spezialseyte', 'nstab-project' => 'Portalseyte', -'nstab-image' => 'Datei', 'nstab-mediawiki' => 'MediaWiki-Systemtext', 'nstab-template' => 'Vierlooche', 'nstab-help' => 'Hilfeseyte', -'nstab-category' => 'Kategorie', # Main script and global functions -'nosuchaction' => 'Diese Aktion gibt es nicht', 'nosuchactiontext' => "De ei dar URL oagegebene Aksjonn werd vu MediaWiki ne understietzt. Is koan a Schreibfahler ei dar URL vorliega oder is wurde a fahlerhafter Link oageklickt. Is koan siech au im an'n Programmierfahler ei dar Software, de uff {{SITENAME}} benutzt werd, handeln.", @@ -347,7 +254,6 @@ Is koan siech au im an'n Programmierfahler ei dar Software, de uff {{SITENAME}} Oalle verfügbara Spezialseyta sein ei der [[Special:SpecialPages|Liste der Spezialseyta]] zu finda.', # General errors -'error' => 'Fehler', 'databaseerror' => 'Fehler ei der Datenbank', 'dberrortext' => 'Is ies a Datenbankfahler uffgetreten. Dar Grund koan a Programmierfahler sei. @@ -360,30 +266,8 @@ De letzte Datenbankobfroage lautete: „$1“ aus dar Funksjonn „$2 De Datenbank meldete dann Fahler: „$3: $4“.", 'laggedslavemode' => 'Achtung: Die angezeigte Seite enthält unter Umständen nicht die jüngsten Bearbeitungen.', 'readonly' => 'Datenbanksperre', -'enterlockreason' => 'Bitte gib einen Grund ein, warum die Datenbank gesperrt werden soll und eine Abschätzung über die Dauer der Sperrung', -'readonlytext' => 'Die Datenbank ist vorübergehend für Neueinträge und Änderungen gesperrt. Bitte versuche es später noch einmal. - -Grund der Sperrung: $1', -'missing-article' => 'Der Text für „$1“ $2 wurde nicht in der Datenbank gefunden. - -Die Seite ist möglicherweise gelöscht oder verschoben worden. - -Falls dies nicht der Fall ist, hast du eventuell einen Fehler in der Software gefunden. Bitte melde dies einem [[Special:ListUsers/sysop|Administrator]] unter Nennung der URL.', -'missingarticle-rev' => '(Versionsnummer: $1)', -'missingarticle-diff' => '(Unterschied zwischen Versionen: $1, $2)', -'readonly_lag' => 'Die Datenbank wurde automatisch für Schreibzugriffe gesperrt, damit sich die verteilten Datenbankserver (slaves) mit dem Hauptdatenbankserver (master) abgleichen können.', -'internalerror' => 'Interner Fehler', -'internalerror_info' => 'Interner Fehler: $1', 'fileappenderror' => 'Konnte „$1“ ne oa „$2“ oahänga.', -'filecopyerror' => 'Die Datei „$1“ konnte nicht nach „$2“ kopiert werden.', -'filerenameerror' => 'Die Datei „$1“ konnte nicht nach „$2“ umbenannt werden.', -'filedeleteerror' => 'Die Datei „$1“ konnte nicht gelöscht werden.', -'directorycreateerror' => 'Das Verzeichnis „$1“ konnte nicht angelegt werden.', -'filenotfound' => 'Die Datei „$1“ wurde nicht gefunden.', -'fileexistserror' => 'In die Datei „$1“ konnte nicht geschrieben werden, da die Datei bereits vorhanden ist.', 'unexpected' => 'Unerwarteter Wert: „$1“=„$2“.', -'formerror' => 'Fehler: Die Eingaben konnten nicht verarbeitet werden.', -'badarticleerror' => 'Diese Aktion kann auf diese Seite nicht angewendet werden.', 'cannotdelete' => 'De Seyte oder Datei „$1“ koan ne geläscht waan. Meeglicherweise wurde se bereits vu jemand anders entfernt.', 'badtitle' => 'Ungültiger Tittel', @@ -428,9 +312,8 @@ Beachte, doas einige Seyta noo oazeiga kinna, doas du oagemeldet best, sulange d Dei Benutzerkonto wurde eigerichtet. Vergiss nä, denne [[Special:Preferences|{{SITENAME}}-Eistellunga]] oazupoassa.', 'yourname' => 'Benutzernoame:', -'yourpassword' => 'Passwort:', 'yourpasswordagain' => 'Passwort wiederhola:', -'remembermypassword' => 'uff diesem Computer dauerhaft oanmelda', +'remembermypassword' => 'uff diesem Computer dauerhaft oanmelda (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Denne Domain:', 'externaldberror' => 'Entweder is leit a Fahler bei der externa Authentifizierung vur, oder du darfst dei externes Benutzerkonto ne aktualisiera.', 'login' => 'Oanmelda', @@ -519,10 +402,6 @@ Meeglicherweise host du dei Poaßwurt bereits erfolgreich geändert oder a neues 'resetpass-temp-password' => 'Temporäres Poaßwurt:', # Edit page toolbar -'bold_sample' => 'Fetter Text', -'bold_tip' => 'Fetter Text', -'italic_sample' => 'kursiver Text', -'italic_tip' => 'kursiver Text', 'link_sample' => 'Verknipfungstext', 'link_tip' => 'Interne Verknipfung', 'extlink_sample' => 'http://www.example.com Verknipfungstittel', @@ -530,25 +409,19 @@ Meeglicherweise host du dei Poaßwurt bereits erfolgreich geändert oder a neues 'headline_sample' => 'Ieberschreft (Ebene 2)', 'headline_tip' => 'Ebene 2 Ieberschreft', 'math_sample' => 'Formel hier eifiega', -'math_tip' => 'mathematische Formel (LaTeX)', 'nowiki_sample' => 'unformatierta Text hier eifiega', 'nowiki_tip' => 'unformatierter Text (nowiki)', -'image_sample' => 'Beispiel.jpg', 'image_tip' => 'Verknipfung miet Datei', -'media_sample' => 'Beispiel.ogg', 'media_tip' => 'Verknipfung miet Mediadatei', 'sig_tip' => 'Denne Underschrift miet Zeetstempel', 'hr_tip' => 'Hurizuntale Linie (sporsam verwenda)', # Edit pages 'summary' => 'Zusammafoassung:', -'subject' => 'Betreff:', 'minoredit' => 'Ocke Kleenigkeeta wurda verändert', 'watchthis' => 'Diese Seyte beoboachta', 'savearticle' => 'Seyte oabspeichern', -'preview' => 'Vorschau', 'showpreview' => 'Vorschau zeega', -'showlivepreview' => 'Live-Vorschau', 'showdiff' => 'Änderunga zeega', 'anoneditwarning' => "Du beorbeetest diese Seyte unoagemeldet. Wenn du speicherst, wird denne aktuelle IP-Atresse ei dar Versionsgeschichte uffgezeechnet on ies damit unwiderruflich '''eeffentlich''' einsehbar.", 'missingsummary' => "'''Hinweis:''' Du host kenne Zusommafassung oagegahn. Wenn du erneut uff „Seyte speichern“ klickst, werd denne Änderung ohne Zusommafassung iebernumma.", @@ -597,7 +470,6 @@ Bitte fiege olle Informationa jeder Oafroage hinzu, de du stallt.", 'loginreqlink' => 'Oanmelda', 'loginreqpagetext' => 'Du mußt diech $1, im Seyta lasa zu kinna.', 'accmailtitle' => 'Passwurt wourde verschickt', -'newarticle' => '(Neu)', 'newarticletext' => "Du best an'm Link zu a'r Seyte gefolgt, de ne vorhanden ies. Im de Seyte oazulega, trage denn Text ei de undastehende Box a (siehe de [[{{MediaWiki:Helppage}}|Hilfeseyte]] fier meh Informationen). Best du fälschlicherweise hier, klicke de '''Zerricke'''-Schaltfläche dennes Browsers.", @@ -617,9 +489,7 @@ oder ei dann zugehieriga [{{fullurl:{{#special:Log}}|pa '''Beachte:''' Noach damm Speichern mußt du dennen Browser oaweisa, de neue Version zu loada: '''Mozilla/Firefox:''' ''Strg-Shift-R'', '''Internet Explorer:''' ''Strg-F5'', '''Opera:''' ''F5'', '''Safari:''' ''Cmd-Shift-R'', '''Konqueror:''' ''F5''.", 'userjspreview' => "== Vurschau Dennes Nutzer-JavaScript == '''Beachte:''' Noach damm Speichern mußt du dennen Browser oaweisa, de neue Version zu loada: '''Mozilla/Firefox:''' ''Strg-Shift-R'', '''Internet Explorer:''' ''Strg-F5'', '''Opera:''' ''F5'', '''Safari:''' ''Cmd-Shift-R'', '''Konqueror:''' ''F5''.", -'userinvalidcssjstitle' => "'''OCHTICHE:''' Skin „$1“ existiert ne. Bedenke, doß nutzerspezifische .css- und .js-Seyta miet a'm Kleenbuchstaba oafanga missa, olso beispielsweise ''{{ns:user}}:Mustermann/monobook.css'' oa Stalle vu ''{{ns:user}}:Mustermoan/Monobook.css''.", -'updated' => '(Geändert)', -'note' => "'''Hinweis:'''", +'userinvalidcssjstitle' => "'''OCHTICHE:''' Skin „$1“ existiert ne. Bedenke, doß nutzerspezifische .css- und .js-Seyta miet a'm Kleenbuchstaba oafanga missa, olso beispielsweise ''{{ns:user}}:Mustermann/vector.css'' oa Stalle vu ''{{ns:user}}:Mustermoan/Vector.css''.", 'previewnote' => "'''Dies ies oack eene Vorschau, de Seyte wurde noo nee gespeichert!'''", 'previewconflict' => 'Diese Vurschau gitt dann Inhalt des obern Textfeldes wieder. Su werd de Seyte aussahn, wenn du jitz speicherst.', 'session_fail_preview' => "'''Denne Beoarbeetung konnte ne gespeichert waan, do Sitzungsdaten verlorn geganga sein. @@ -643,7 +513,6 @@ Doas undere Textfeld enthält denne Änderungen. Bitte fiege denne Änderungen ei doas obere Textfeld a. '''Ock''' dar Inhalt des oberen Textfeldes werd gespeichert, wenn du uff „{{int:savearticle}}“ klickst!", 'yourtext' => 'Deen Text', -'storedversion' => 'Gespeicherte Version', 'nonunicodebrowser' => "'''Ochtiche:''' Dei Browser koan Unicode-Zeicha ne richtig veroarbeeta. Bitte verwende a'n andern Browser im Seyta zu beoarbeeta.", 'editingold' => "'''OCHTICHE: Du beoarbeetest anne aale Version dieser Seyte. Wenn du speicherst, waan olle neueren Versionen ieberschrieba.'''", 'yourdiff' => 'Underschiede', @@ -655,8 +524,6 @@ Reiche hier kenne Texte a, falls du ne wielst, doß diese ohne Einschränkung ge Du bestätigst hiermit au, doß du diese Texte selbst geschrieba host oder diese vu a'r gemeinfreien Quelle kopiert host (siehe $1 fier wettere Details). '''IEBERTRAGE OHNE GENEHMIGUNG KENNE URHEBERRECHTLICH GESCHIETZTEN INHALTE!'''", -'longpagewarning' => "'''Warnung:''' Diese Seyte ies $1 KB gruß; einige Browser kinnta Probleme hoan, Seyta zu beoarbeeta, de grießer ols 32 KB sein. -Ieberlege bitte, ob anne Uffteilung dar Seyte ei klennere Obschnitte meeglich ies.", 'longpageerror' => "'''Fahler: Dar Text, dann du zu speichern versuchst, ies $1 KB gruß. Doas ies grießer ols doas erlaubte Maximum vu $2 KB – Speicherung ne meeglich.'''", 'readonlywarning' => "'''OCHTICHE: De Datenbank wurde fier Wartungsoarbeeta gesperrt, su doaß denne Änderunga derzeit ne gespeichert waan kinna. Sechere dann Text bitte lokal uff demm Computer und versiche zu a'm späteren Zeitpunkt, de Änderunga zu iebertraga.''' @@ -675,7 +542,6 @@ Grund fier de Sperre: $1", 'nocreatetitle' => 'De Erstellung neuer Seyta ies eengeschränkt.', 'nocreatetext' => 'Uff {{SITENAME}} wurde doas Erstalla neuer Seyta eengeschränkt. Du koast bestiehende Seyten ändern oder diech [[Special:UserLogin|oamelda]].', 'nocreate-loggedin' => 'Du host kenne Berechtigung, neue Seyta zu erstalla.', -'permissionserrors' => 'Berechtigungsfehler', 'permissionserrorstext' => 'Du best ne berechtigt, de Aksjonn auszufiehra. {{PLURAL:$1|Grund|Grinde}}:', 'permissionserrorstext-withaction' => 'Du best nee berechtigt, $2. {{PLURAL:$1|Grund|Griende}}:', @@ -719,26 +585,18 @@ Grund dar Sperre: ''$2''", # History pages 'viewpagelogs' => 'Logbicher fier diese Seite oazeega', 'nohistory' => 'Is gitt kenne Versionsgeschichte fier diese Seyte.', -'currentrev' => 'Aktuelle Version', 'currentrev-asof' => 'Aktuelle Version vum $1', 'revisionasof' => 'Version vum $1', 'revision-info' => 'Version vum $4, $5 Seeger vu $2', 'previousrevision' => '← aale Version', 'nextrevision' => 'Neue Version →', -'currentrevisionlink' => 'Aktuelle Version', -'cur' => 'Aktuell', -'next' => 'Nächste', -'last' => 'Vorherige', 'page_first' => 'Oanfoang', -'page_last' => 'Ende', 'histlegend' => 'Zerr Oazeege dar Änneronga eefach de zu vergleichenda Versiona auswähla on de Schaltfläche „{{int:compareselectedversions}}“ klicka.
    * (Aktuell) = Underschied zerr aktuella Version, (Vurherige) = Underschied zerr vurheriga Version * Seegerzeit/Datum = Version zu dieser Zeit, Benutzername/IP-Atresse des Beorbeeters, K = Kleene Ännerong', 'history-fieldset-title' => 'Suche ei dar Versionsgeschichtla', 'history-show-deleted' => 'ock geläschte Versiona', 'histfirst' => 'aalteste', -'histlast' => 'Neueste', -'historysize' => '({{PLURAL:$1|1 Byte|$1 Bytes}})', 'historyempty' => '(laar)', # Revision feed @@ -759,7 +617,6 @@ Nähere Oagaba zum Läschvorgang suwie anne Begrindung fenda siech eim [{{fullur 'rev-suppressed-text-view' => "Diese Version wurde '''underdrickt'''. Administratorn kinna se eensahn; Details stiehn eim [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Underdrickungs-Logbuch].", 'rev-delundel' => 'zeege/verstecke', -'rev-showdeleted' => 'zeige', 'revisiondelete' => 'Versiona löscha/wiederherstella', 'revdelete-nooldid-title' => 'Keene Version oangegeba', 'revdelete-nooldid-text' => 'Du host entweder kenne Version oagegahn, uff de diese Aksjonn ausgefiehrt waan sull, de gewählte Version ies ne vorhanden oder du versichst, de aktuelle Version zu entferna.', @@ -790,15 +647,12 @@ $1", 'logdelete-success' => "'''Logbuchoasecht erfolgreich geändert.'''", 'logdelete-failure' => "'''Logbuchsichtbarkeit koan ne geändert waan:''' $1", -'revdel-restore' => 'Sichtbarkeit ändern', -'pagehist' => 'Versionsgeschichte', 'deletedhist' => 'Geläschte Versiona', 'revdelete-content' => 'Seytainhoalt', 'revdelete-summary' => 'Zusommafoassungskommentar', 'revdelete-uname' => 'Benutzernoame', 'revdelete-restricted' => 'Einschränkungen gelten au fier Administratorn', 'revdelete-unrestricted' => 'Einschränkungen fier Administratorn uffgehobn', -'revdelete-hid' => 'versteckte $1', 'revdelete-unhid' => 'machte $1 wieder effentlich', 'revdelete-log-message' => '$1 fier $2 {{PLURAL:$2|Version|Versiona}}', 'logdelete-log-message' => '$1 fier $2 {{PLURAL:$2|Logbucheintrag|Logbucheinträge}}', @@ -823,7 +677,6 @@ Stelle secher, doaß de Versionsgeschichte a'r Seyte historisch korrekt ies.", 'mergehistory-list' => 'Versionen, de vereinigt waan kinna', 'mergehistory-merge' => 'De folgenda Versionen vu „[[:$1]]“ kinna noach „[[:$2]]“ iebertraga waan. Markiere de Version, bis zu dar (einschließlich) de Versionen iebertraga waan sulln. Bitte beachte, doaß de Nutzung dar Navigationslinks de Auswoahl zerrickesetzt.', 'mergehistory-go' => 'Zeige Versiona, de vereinigt waan kinna', -'mergehistory-submit' => 'Vereinige Versionen', 'mergehistory-empty' => 'Is kinna kenne Versiona vereinigt waan.', 'mergehistory-success' => '{{PLURAL:$3|1 Version|$3 Versiona}} vu „[[:$1]]“ erfolgreich noach „[[:$2]]“ vereinigt.', 'mergehistory-fail' => 'Versionsvereinigung ne meeglich, bitte prife de Seyte und de Zeitoagaba.', @@ -837,7 +690,6 @@ Stelle secher, doaß de Versionsgeschichte a'r Seyte historisch korrekt ies.", 'mergehistory-reason' => 'Begriendung:', # Merge log -'mergelog' => 'Vereinigungs-Logbuch', 'pagemerge-logentry' => 'vereinigte [[$1]] ei [[$2]] (Versionen bis $3)', 'revertmerge' => 'Vereinigung rieckgängig macha', 'mergelogpagetext' => 'Dies ies doas Logbuch dar vereinigta Versionsgeschichta.', @@ -845,7 +697,6 @@ Stelle secher, doaß de Versionsgeschichte a'r Seyte historisch korrekt ies.", # Diffs 'history-title' => 'Versionsgeschichte vun „$1“', 'difference' => '(Underschied zwischa Versiona)', -'lineno' => 'Zeile $1:', 'compareselectedversions' => 'Gewählte Versiona vergleichen', 'editundo' => 'rieckgängig', 'diff-multi' => '(Dar Versionsvergleich bezieht {{PLURAL:$1|1 dazwischenliegende Version|$1 dazwischenliegende Versionen}} miet a.)', @@ -863,61 +714,43 @@ Stelle secher, doaß de Versionsgeschichte a'r Seyte historisch korrekt ies.", 'notextmatches' => 'Kenne Iebereinstimmunga miet Inhalta', 'prevn' => 'vurherige {{PLURAL:$1|$1}}', 'nextn' => 'nächste {{PLURAL:$1|$1}}', -'nextn-title' => '{{PLURAL:$1|Folgendes Ergebnis|Folgende $1 Ergebnisse}}', 'shown-title' => 'Zeige $1 {{PLURAL:$1|Ergebnis|Ergebnisse}} pro Seyte', -'viewprevnext' => 'Zeige ($1 {{int:pipe-separator}} $2) ($3)', 'searchmenu-legend' => 'Suchoptiona', 'searchmenu-exists' => "'''Is gitt anne Seyte, de dann Noama „[[:$1]]“ hoot'''", 'searchmenu-new' => "'''Erstalle de Seyte „[[:$1|$1]]“ ei diesem Wiki.'''", -'searchhelp-url' => 'Help:Hilfe', 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Zeige olle Seyta, de miet damm Sichbegriff oafanga]]', 'searchprofile-articles' => 'Inhaltsseyta', 'searchprofile-project' => 'Helfe on Projektseyta', -'searchprofile-images' => 'Multimedia', 'searchprofile-everything' => 'Olles', -'searchprofile-advanced' => 'Erweitert', 'searchprofile-articles-tooltip' => 'Sucha ei $1', 'searchprofile-project-tooltip' => 'Sucha ei $1', 'searchprofile-images-tooltip' => 'Noach Bildern sucha', 'searchprofile-everything-tooltip' => 'Gesamta Inhalt durchsicha (inklusive Dischkursseyta)', 'searchprofile-advanced-tooltip' => 'Siche ei wettern Noamensräuma', 'search-result-size' => '$1 ({{PLURAL:$2|1 Wurt|$2 Wärter}})', -'search-result-score' => 'Relevanz: $1 %', 'search-redirect' => '(Weiterleitung vu „$1“)', 'search-section' => '(Obschnitt $1)', 'search-suggest' => 'Meitest du „$1“?', 'search-interwiki-caption' => 'Schwasterprujätte', -'search-interwiki-default' => '$1 Ergebnisse:', -'search-interwiki-more' => '(weitere)', 'search-mwsuggest-enabled' => 'miet Vurschläga', 'search-mwsuggest-disabled' => 'kääne Vurschläge', -'search-relatedarticle' => 'Verwandte', 'mwsuggest-disable' => 'Vurschläge per Ajax deaktiviern', -'searchrelated' => 'verwandt', 'searchall' => 'olle', 'showingresults' => "Hier {{PLURAL:$1|ies '''1''' Ergebnis|sein '''$1''' Ergebnisse}}, beginnend miet Nummer '''$2.'''", 'showingresultsnum' => "Hier {{PLURAL:$3|ies '''1''' Ergebnis|sein '''$3''' Ergebnisse}}, beginnend miet Nummer '''$2.'''", 'showingresultsheader' => "{{PLURAL:$5|Ergebnis '''$1''' vu '''$3'''|Ergebnisse '''$1–$2''' vu '''$3'''}} fier '''$4'''", 'nonefound' => "'''Hinweis:''' Is waan standardmäßig ocke eenige Noamensräume dorchsucht. Setze ''all:'' vur denn Suchbegriff, im olle Seita (inkl. Diskussionsseiten, Vorlagen usw.) zu dorchsucha oder gezielt dan Noama des zu dorchsuchenden Noamensraumes.", 'search-nonefound' => 'Fier denne Sichoafroage wurden kenne Ergebnisse gefunda.', -'powersearch' => 'Erweiterte Suche', -'powersearch-legend' => 'Erweiterte Suche', 'powersearch-ns' => 'Suche ei Noamasräuma:', 'powersearch-redir' => 'Weiterleitunga oanzeega:', 'powersearch-field' => 'Suche noach:', -'powersearch-togglelabel' => 'Wähle aus:', 'powersearch-toggleall' => 'Olle', 'powersearch-togglenone' => 'Kenne', -'search-external' => 'Externe Suche', 'searchdisabled' => 'De {{SITENAME}}-Siche ies deaktiviert. Du koast underdessa miet Google sicha. Bitte bedenke, doaß dar Sichindex fier {{SITENAME}} veraltet sei koan.', # Quickbar -'qbsettings' => 'Seytaleiste', -'qbsettings-none' => 'Keene', -'qbsettings-fixedleft' => 'Links, fest', -'qbsettings-fixedright' => 'Rechts, fest', -'qbsettings-floatingleft' => 'Links, schwebend', -'qbsettings-floatingright' => 'Rechts, schwebend', +'qbsettings' => 'Seytaleiste', +'qbsettings-none' => 'Keene', # Preferences page 'preferences' => 'Eenstellunga', @@ -926,64 +759,39 @@ Stelle secher, doaß de Versionsgeschichte a'r Seyte historisch korrekt ies.", 'prefsnologin' => 'Ne oagemeldet', 'prefsnologintext' => 'Du mußt [{{fullurl:{{#special:UserLogin}}|returnto=$1}} oagemeldet] sei, im denne Einstellunga ändern zu kinna.', 'changepassword' => 'Poaßwurt ändern', -'prefs-skin' => 'Skin', -'skin-preview' => 'Vorschau', -'prefs-math' => 'TeX', -'datedefault' => 'Standard', -'prefs-datetime' => 'Datum und Zeit', 'prefs-personal' => 'Nutzerdaten', 'prefs-rc' => 'Letzte Änderunga', -'prefs-watchlist' => 'Beobachtungsliste', 'prefs-watchlist-days' => 'Oazoahl dar Tage, de de Beobachtungsliste standardmäßig umfassa sull:', -'prefs-watchlist-days-max' => 'Maximal 7 Tage', 'prefs-watchlist-edits' => 'Maximale Zoahl dar Eenträge:', 'prefs-watchlist-edits-max' => 'Maximale Oazoahl: 1000', -'prefs-watchlist-token' => 'Beobachtungslisten-Token:', -'prefs-misc' => 'Verschiedenes', 'prefs-resetpass' => 'Poaßwurt ändern', -'prefs-email' => 'E-Mail-Optionen', 'prefs-rendering' => 'Aussahn', 'saveprefs' => 'Eenstallunga speichern', -'resetprefs' => 'Eingaben verwerfen', 'restoreprefs' => 'Olle Standardeinstallunga wiederherstalla', 'prefs-editing' => 'Beorbeeta', 'prefs-edit-boxsize' => 'Griße des Beoarbeetungsfansters:', 'rows' => 'Zeila:', 'columns' => 'Spalta:', -'searchresultshead' => 'Suche', 'resultsperpage' => 'Treffer pro Seyte:', 'contextlines' => 'Zeila pro Treffer:', 'contextchars' => 'Zeecha pro Zeile:', 'stub-threshold' => 'Linkformatierung klenner Seyta (ei Byte):', 'recentchangesdays' => 'Oazoahl dar Tage, de de Liste dar „Letzta Änderunga“ standardmäßig imfassa sull:', -'recentchangesdays-max' => 'Maximal $1 {{PLURAL:$1|Tag|Tage}}', 'recentchangescount' => 'Oazoahl dar standardmäßig oagezeigta Beoarbeetunga:', 'savedprefs' => 'Denne Einstallunga waan gespeichert.', -'timezonelegend' => 'Zeitzone:', 'localtime' => 'Urtszeit:', -'timezoneuseserverdefault' => 'Standardzeit des Servers', 'timezoneuseoffset' => 'Andere (Underschied oagahn)', 'timezoneoffset' => 'Underschied¹:', 'servertime' => "Aktuelle Zeit uff'm Server:", 'guesstimezone' => 'Vum Browser iebernahma', 'timezoneregion-africa' => 'Offreka', -'timezoneregion-america' => 'Amerika', -'timezoneregion-arctic' => 'Arktis', -'timezoneregion-asia' => 'Asien', -'timezoneregion-atlantic' => 'Atlantischer Ozean', 'allowemail' => 'E-Mail-Empfang vu andern Benutzern ermeeglichn', 'prefs-searchoptions' => 'Sichoptiona', 'prefs-namespaces' => 'Noamasräume', 'defaultns' => 'Andernfoalls ei diesen Noamasräumen sicha:', -'default' => 'Voreinstellung', -'prefs-files' => 'Dateien', -'prefs-custom-css' => 'Benutzerdefinierte CSS', 'prefs-custom-js' => 'Nutzerdefiniertes JS', -'prefs-emailconfirm-label' => 'E-Mail-Bestätigung:', 'prefs-textboxsize' => 'Griße des Beoarbeetungsfansters', -'youremail' => 'E-Mail-Adresse:', 'username' => 'Benutzernoame:', -'uid' => 'Benutzer-ID:', 'prefs-memberingroups' => 'Mitglied dar {{PLURAL:$1|Nutzergruppe|Nutzergruppen}}:', 'yourrealname' => 'Echter Noame:', 'yourlanguage' => 'Sproache der Benutzeroberfläche:', @@ -991,20 +799,15 @@ Stelle secher, doaß de Versionsgeschichte a'r Seyte historisch korrekt ies.", 'yournick' => 'Unterschrift:', 'badsig' => 'De Syntax dar Underschrift ies ungiltig; bitte HTML ieberpriefa.', 'badsiglength' => 'Ihre Underschrift derf ne länger sein als wie $1 {{PLURAL:$1|character|Zeecha}}.', -'yourgender' => 'Geschlecht:', 'gender-unknown' => 'ne oagagahn', -'gender-male' => 'männlich', -'gender-female' => 'weiblich', -'email' => 'E-mail', 'prefs-help-realname' => 'Optional. Dei echter Noame werd denn Beiträga zugeordnet.', 'prefs-help-email' => "De Angabe a'r E-Mail ies optional, ermeeglicht oaber de Zusendung annes Ersatzpoaßwurtes, wenn du dei Poaßwurt vergessen host. Miet andern Nutzern koast du au ieber de Nutzerdischkurseyta Kontakt uffnahma, ohne doaß du denne Identität uffelähn mußt.", 'prefs-help-email-required' => 'Is werd anne giltige E-Mail-Atresse benetigt.', -'prefs-info' => 'Basisinformationen', 'prefs-signature' => 'Underschrift', 'prefs-dateformat' => 'Datumsfurmat', 'prefs-timeoffset' => 'Zeitunderschied', -'prefs-display' => 'Oazeigeoptiona', +'prefs-displayrc' => 'Oazeigeoptiona', # User rights 'userrights' => 'Nutzerrechteverwaltung', @@ -1018,7 +821,6 @@ Miet andern Nutzern koast du au ieber de Nutzerdischkurseyta Kontakt uffnahma, o 'userrights-groups-help' => 'Du koast de Gruppenzugehierigkeit fier diesen Nutzer ändern: * A markiertes Kästchen bedeutet, doaß dar Nutzer Mitglied dieser Gruppe ies * A * bedeutet, doaß du doas Nutzerrecht noach Erteilung ne wieder zerrickenahma koast (oder umgekehrt).', -'userrights-reason' => 'Grund:', 'userrights-no-interwiki' => 'Du host kenne Berechtigung, Nutzerrechte ei andern Wikis zu ändern.', 'userrights-nodatabase' => 'De Datenbank $1 ies ne vurhanda oder ne lokal.', 'userrights-nologin' => "Du mußt diech miet a'm Administrator-Nutzerkonto [[Special:UserLogin|oamelda]], im Nutzerrechte zu ändern.", @@ -1027,28 +829,17 @@ Miet andern Nutzern koast du au ieber de Nutzerdischkurseyta Kontakt uffnahma, o 'userrights-unchangeable-col' => 'Gruppazugehierigkeit, de du ne ändern koast', # Groups -'group' => 'Gruppe:', -'group-user' => 'Benutzer', -'group-autoconfirmed' => 'Automatisch bestätigte Benutzer', -'group-bot' => 'Bots', -'group-sysop' => 'Administratora', -'group-bureaucrat' => 'Birokrata', -'group-suppress' => 'Oversighter', -'group-all' => '(olle)', +'group-sysop' => 'Administratora', +'group-bureaucrat' => 'Birokrata', +'group-all' => '(olle)', 'group-user-member' => 'Notzer', 'group-autoconfirmed-member' => 'Automatisch bestätigter Nutzer', -'group-bot-member' => 'Bot', -'group-sysop-member' => 'Administrator', 'group-bureaucrat-member' => 'Birokrat', -'group-suppress-member' => 'Oversighter', -'grouppage-user' => '{{ns:project}}:Benutzer', 'grouppage-autoconfirmed' => '{{ns:project}}:Automatisch bestätigte Nutzer', -'grouppage-bot' => '{{ns:project}}:Bots', 'grouppage-sysop' => '{{ns:project}}:Administratora', 'grouppage-bureaucrat' => '{{ns:project}}:Bierokrata', -'grouppage-suppress' => '{{ns:project}}:Oversighter', # Rights 'right-read' => 'Seyta lasa', @@ -1110,10 +901,8 @@ Miet andern Nutzern koast du au ieber de Nutzerdischkurseyta Kontakt uffnahma, o 'right-sendemail' => 'E-Mails oa andere Nutzer senda', # User rights log -'rightslog' => 'Rechte-Logbuch', 'rightslogtext' => 'Dies ies doas Logbuch dar Änderunga dar Nutzerrechte.', 'rightslogentry' => 'änderte de Nutzerrechte fier „$1“ vu „$2“ uff „$3“', -'rightsnone' => '(–)', # Associated actions - in the sentence "You do not have permission to X" 'action-read' => 'de Seyte zu lasa', @@ -1157,21 +946,14 @@ Miet andern Nutzern koast du au ieber de Nutzerdischkurseyta Kontakt uffnahma, o 'recentchanges-legend' => 'Oazeigeoptiona', 'recentchangestext' => "Uff dieser Seyte koanst du de letzta Änderunga uff '''{{SITENAME}}''' noachverfolga.", 'recentchanges-feed-description' => 'Verfolge miet diesem Feed de letzta Änneronga ei {{SITENAME}}.', -'recentchanges-label-legend' => 'Legende: $1.', -'recentchanges-legend-newpage' => '$1 - neue Seyte', 'recentchanges-label-newpage' => 'Neue Seyte', -'recentchanges-legend-minor' => '$1 - klenne Änderung', 'recentchanges-label-minor' => 'Klenne Änderung', -'recentchanges-legend-bot' => "$1 - Änderung durch an'n Bot", 'recentchanges-label-bot' => "Änderung durch an'n Bot", -'recentchanges-legend-unpatrolled' => '$1 - ne-kontrollierte Änderung', 'rcnote' => "Oagezeegt {{PLURAL:$1|wird '''1''' Ännerong|waan de letzta '''$1''' Änneronga}} {{PLURAL:$2|des letzta Taages|dar letzta '''$2''' Taage}}. Stand: $4, $5. (N – neuer Eentrag; K – kleene Ännerong; B – Ännerong dorch eena Bot; ''(± Zoahl)'' – Greeßaännerong ei Byte)", 'rcnotefrom' => "Oagezeigt waan de Änderunga seit '''$2''' (max. '''$1''' Einträge).", 'rclistfrom' => 'Oack Änneronga seit $1 zeiga.', 'rcshowhideminor' => 'Klenne Änderunga $1', -'rcshowhidebots' => 'Bots $1', 'rcshowhideliu' => 'Oagemeldete Benutzer $1', -'rcshowhideanons' => 'Anonyme Benutzer $1', 'rcshowhidepatr' => 'Kontrollierte Änderunga $1', 'rcshowhidemine' => 'Eegene Beiträge $1', 'rclinks' => 'Zeige de letzta $1 Änneronga dar letzta $2 Taage.
    $3', @@ -1179,9 +961,6 @@ Miet andern Nutzern koast du au ieber de Nutzerdischkurseyta Kontakt uffnahma, o 'hist' => 'Versiona', 'hide' => 'ausblenda', 'show' => 'eenblenda', -'minoreditletter' => 'K', -'newpageletter' => 'N', -'boteditletter' => 'B', 'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|beobachtender|beobachtende}} Nutzer]', 'rc_categories' => 'Ock Seyta aus dann Kategorien (getrennt miet „|“):', 'rc_categories_any' => 'Olle', @@ -1209,20 +988,11 @@ Miet andern Nutzern koast du au ieber de Nutzerdischkurseyta Kontakt uffnahma, o 'upload_directory_missing' => 'Doas Upload-Verzeichnis ($1) fahlt und konnte durch dann Webserver au ne erstellt waan.', 'upload_directory_read_only' => 'Dar Webserver hoot kenne Schreibrechte fier doas Upload-Verzeichnis ($1).', 'uploaderror' => 'Fehler beim Huchloada', -'upload-permitted' => 'Erlaubte Dateitypen: $1.', -'upload-preferred' => 'Bevorzugte Dateitypen: $1.', 'upload-prohibited' => 'Ne erlaubte Dateitypen: $1.', -'uploadlog' => 'Datei-Logbuch', -'uploadlogpage' => 'Datei-Logbuch', 'uploadlogpagetext' => "Dies ies doas Logbuch dar huchgeloadena Dateien, siehe au de [[Special:NewFiles|Galerie neuer Dateien]] fier an'n visuellen Ieberblick.", 'filename' => 'Dateinoame', -'filedesc' => 'Beschreibung', -'fileuploadsummary' => 'Beschreibung/Quelle:', 'filereuploadsummary' => 'Dateiänderunga:', -'filestatus' => 'Copyright-Status:', -'filesource' => 'Quelle:', 'uploadedfiles' => 'Huchgeloadene Dateien', -'ignorewarning' => 'Warnung ignorieren und Datei speichern', 'ignorewarnings' => 'Warnunga ignoriera', 'minlength1' => "Dateinoama missa mindestens an'n Buchstaba lang sei.", 'illegalfilename' => 'Dar Dateinoame „$1“ enthält mindestens a ne erlaubtes Zeicha. Bitte benenne de Datei im und versiche se erneut huchzuloada.', @@ -1242,21 +1012,14 @@ Bitte priefe '''[[:$1]]''', wenn du dir ne secher biest, ob du se ände Bitte priefe, ob du doas Bild ei voller Ufflesung vorliegen host und loade dieses under damm Originalnoama huch.", 'file-exists-duplicate' => 'Diese Datei ies a Duplikat dar fulgenda {{PLURAL:$1|Datei|$1 Dateien}}:', 'file-deleted-duplicate' => 'Anne identische Datei dieser Datei ([[:$1]]) wurde frieher geläscht. Ieberpriefe doas Läsch-Logbuch, bevor du se huchlädst.', -'successfulupload' => 'Erfolgreich huchgeloada', -'uploadwarning' => 'Warnung', -'savefile' => 'Datei speichern', 'uploadedimage' => 'hoot „[[$1]]“ huchgeloada', 'overwroteimage' => 'hoot anne neue Version vu „[[$1]]“ huchgeloada', 'uploaddisabled' => 'Huchlada deaktiviert', 'uploaddisabledtext' => 'Doas Huchloada vu Dateien ies deaktiviert.', 'uploadscripted' => "Diese Datei enthält HTML- oder Scriptcode, dar irrtiemlich vu a'm Webbrowser ausgefiehrt waan kennte.", 'uploadvirus' => "Diese Datei enthält an'n Virus! Details: $1", -'upload-source' => 'Quelldatei', -'sourcefilename' => 'Quelldatei:', -'sourceurl' => 'Quell-URL:', 'destfilename' => 'Zielnoame:', 'upload-maxfilesize' => 'Maximale Dateigriße: $1', -'upload-description' => 'Dateibeschreibung', 'upload-options' => 'Huchloade-Optionen', 'watchthisupload' => 'Diese Datei beobachta', 'filewasdeleted' => 'Anne Datei miet diesem Noama wurde schunnt eemoll huchgeloada und zwischenzeitlich wieder geläscht. Bitte priefe zuerst dann Eintrag eim $1, bevor du de Datei wirklich speicherst.', @@ -1266,10 +1029,10 @@ Bitte priefe sorgfältig, ob doas erneute Huchloada dann Richtlinien entspricht. Zu denner Information folgt doas Läsch-Logbuch miet dar Begrindung fier de vorhergehende Läschung:", 'filename-bad-prefix' => "Dar Dateinoame beginnt miet '''„$1“'''. Dies ies eim allgemeena dar vu a'r Digitalkamera vorgegebene Dateinoame und daher ne sehr aussagekräftig. Bitte gieb dar Datei an'n Noama, dar dann Inhalt besser beschreibt.", +'upload-success-subj' => 'Erfolgreich huchgeloada', 'upload-proto-error' => 'Foalsches Protokoll', 'upload-proto-error-text' => 'De URL muuß miet http:// oder ftp:// beginna.', -'upload-file-error' => 'Interner Fehler', 'upload-file-error-text' => "Bei dar Erstellung a'r temporären Datei uff'd Server ies a interner Fahler uffgetreta. Bitte informiere an'n [[Special:ListUsers/sysop|System-Administrator]].", 'upload-misc-error' => 'Unbekennter Fahler beim Huchloada', @@ -1281,9 +1044,8 @@ Wenn doas Problem wetter bestieht, informiere an'n [[Special:ListUsers/sysop|Sys 'upload-http-error' => 'A HTTP-Fahler ies uffgetreta: $1', # img_auth script messages -'img-auth-accessdenied' => 'Zugriff verweigert', -'img-auth-nofile' => 'Datei „$1“ existiert ne.', -'img-auth-streaming' => 'Loade „$1“.', +'img-auth-nofile' => 'Datei „$1“ existiert ne.', +'img-auth-streaming' => 'Loade „$1“.', # Some likely curl errors. More could be added from 'upload-curl-error6' => 'URL ies nee erreichbar', @@ -1291,33 +1053,23 @@ Wenn doas Problem wetter bestieht, informiere an'n [[Special:ListUsers/sysop|Sys 'upload-curl-error28' => 'Zeitieberschreitung beim Huchloada', 'upload-curl-error28-text' => "De Seyte braucht zu lange fier anne Antwurt. Priefe, ob de Seyte online ies, warte an'n kurza Moment und versiche is doann erneut. Is koan sinnvoll sei, an'n erneuta Versich zu a'm andern Zeitpunkt zu probieren.", -'license' => 'Lizenz:', -'license-header' => 'Lizenz', 'nolicense' => 'kenne Vurauswoahl', 'license-nopreview' => '(is ies kenne Vurschau verfiegbar)', 'upload_source_url' => ' (giltige, effentlich zugängliche URL)', 'upload_source_file' => ' (anne Datei uff dennem Computer)', # Special:ListFiles -'listfiles-summary' => "Diese Spezialseyte listet olle huchgeloadena Dateien uff. Standardmäßig waan de zuletzt huchgeloadena Dateien zuerst oagezeigt. Durch an'n Klick uff de Spaltenieberschrifta koan de Sortierung umgedreht waan oder is koan noach a'r andern Spalte sortiert waan.", -'listfiles_search_for' => 'Siche nooch Datei:', -'imgfile' => 'Datei', -'listfiles' => 'Dateiliste', -'listfiles_date' => 'Datum', -'listfiles_name' => 'Noame', -'listfiles_user' => 'Benutzer', -'listfiles_size' => 'Greeße', -'listfiles_description' => 'Beschreibung', -'listfiles_count' => 'Versionen', +'listfiles-summary' => "Diese Spezialseyte listet olle huchgeloadena Dateien uff. Standardmäßig waan de zuletzt huchgeloadena Dateien zuerst oagezeigt. Durch an'n Klick uff de Spaltenieberschrifta koan de Sortierung umgedreht waan oder is koan noach a'r andern Spalte sortiert waan.", +'listfiles_search_for' => 'Siche nooch Datei:', +'listfiles_name' => 'Noame', +'listfiles_size' => 'Greeße', # File description page -'file-anchor-link' => 'Datei', 'filehist' => 'Dateiversiona', 'filehist-help' => 'Klicke uff eenen Zeitpunkt, im diese Version zu loada.', 'filehist-deleteall' => 'Olle Versiona läscha', 'filehist-deleteone' => 'Diese Version läscha', 'filehist-revert' => 'zerricke scherga', -'filehist-current' => 'aktuell', 'filehist-datetime' => 'Version vum', 'filehist-thumb' => 'Vurschaubild', 'filehist-thumbtext' => 'Vurschaubild fier Version vum $1', @@ -1325,7 +1077,6 @@ Wenn doas Problem wetter bestieht, informiere an'n [[Special:ListUsers/sysop|Sys 'filehist-user' => 'Nutzer', 'filehist-dimensions' => 'Moaße', 'filehist-filesize' => 'Dateigrieße', -'filehist-comment' => 'Kommentar', 'filehist-missing' => 'Datei fahlt', 'imagelinks' => 'Woas fiehrt bies zum hier', 'linkstoimage' => 'De {{PLURAL:$1|folgende Seyte verwendet|folgenden $1 Seyta verwenda}} diese Datei:', @@ -1345,7 +1096,6 @@ Anne [[Special:WhatLinksHere/$2|vullständige Liste]] ies verfiegbar.', 'filerevert' => 'Zerrickesetza vun „$1“', 'filerevert-legend' => 'Datei zerrickesetza', 'filerevert-intro' => "Du setzt de Datei '''[[Media:$1|$1]]''' uff de [$4 Version vum $2, $3 Seeger] zerricke.", -'filerevert-comment' => 'Grund:', 'filerevert-defaultcomment' => 'Zerrickegesetzt uff de Version vum $1, $2 Seeger', 'filerevert-submit' => 'Zerrickesetza', 'filerevert-success' => "'''[[Media:$1|$1]]''' wurde uff de [$4 Version vum $2, $3 Seeger] zerrickegesetzt.", @@ -1362,7 +1112,6 @@ Anne [[Special:WhatLinksHere/$2|vullständige Liste]] ies verfiegbar.', 'filedelete-success-old' => "Vu dar Datei '''„[[Media:$1|$1]]“''' wurde de Version vum $2, $3 Seeger geläscht.", 'filedelete-nofile' => "'''„$1“''' ies ne vurhanda.", 'filedelete-nofile-old' => "Is gitt vu '''„$1“''' kenne archivierte Version miet dann oagegebenen Attributen.", -'filedelete-otherreason' => 'Anderer/ergänzender Grund:', 'filedelete-reason-otherlist' => 'Oanderer Grund', 'filedelete-reason-dropdown' => '* Allgemeene Läschgrinde ** Urheberrechtsverletzung @@ -1372,7 +1121,6 @@ Anne [[Special:WhatLinksHere/$2|vullständige Liste]] ies verfiegbar.', # MIME search 'mimesearch' => 'Suche noach MIME-Typ', 'mimesearch-summary' => 'Uff dieser Spezialseyte kinna de Dateien noach damm MIME-Typ gefiltert waan. Die Eingabe muuß emmer dann Medien- und Subtyp beinhalten: image/jpeg (siehe Dateibeschreibungsseyte).', -'mimetype' => 'MIME-Typ:', 'download' => 'Herunderloada', # Unwatched pages @@ -1392,15 +1140,12 @@ Ieberpriefe andere Links zu dann Vurloaga, bevor du diese läscht.', 'randompage-nopages' => 'Is sein kenne Seyta {{PLURAL:$2|eim folgenda Noamasraum|ei dann folgenden Noamasräumen}} enthaala: „$1“', # Random redirect -'randomredirect' => 'Zufällige Weiterleitung', 'randomredirect-nopages' => 'Eim Noamasraum „$1“ sein kenne Weiterleitunga vurhanda.', # Statistics -'statistics' => 'Statistik', 'statistics-header-pages' => 'Seytastatistik', 'statistics-header-edits' => 'Beoarbeetungsstatistik', 'statistics-header-views' => 'Seytauffrufstatistik', -'statistics-header-users' => 'Benutzerstatistik', 'statistics-header-hooks' => 'Andere Statistika', 'statistics-articles' => 'Inhaltsseyta', 'statistics-pages' => 'Seyta', @@ -1410,9 +1155,7 @@ Ieberpriefe andere Links zu dann Vurloaga, bevor du diese läscht.', 'statistics-edits-average' => 'Beoarbeetunga pro Seyte eim Durchschnitt', 'statistics-views-total' => 'Seytaaufrufe gesamt', 'statistics-views-peredit' => 'Seyta uffruffe pro Beoarbeetung', -'statistics-jobqueue' => 'Länge dar [http://www.mediawiki.org/wiki/Manual:Job_queue Ufftragswarteschlange]', 'statistics-users' => 'Registrierte [[Special:ListUsers|Nutzer]]', -'statistics-users-active' => 'Aktive Benutzer', 'statistics-users-active-desc' => 'Nutzer miet Beoarbeetunga {{PLURAL:$1|enn letzta 24 Stunden|enn vergangenen $1 Tagen}}', 'statistics-mostpopular' => 'Meistbesichte Seyta', @@ -1423,9 +1166,8 @@ Ieberpriefe andere Links zu dann Vurloaga, bevor du diese läscht.', 'doubleredirects' => 'Doppelte Weiterleitunga', 'doubleredirectstext' => 'Diese Liste enthält Weiterleitunga, de uff wettere Wetterleitunga verlinka. Jede Zeile enthält Links zu dar erschta und zweeta Wetterleitung suwie doas Ziel dar zweeta Wetterleitung, welches fier gewehnlich die gewünschte Zielseyte ies, uff de bereits de erschte Wetterleitung zeiga sullte. -Durchgestrichene Einträge wurden bereits erledigt.', +Durchgestrichene Einträge wurden bereits erledigt.', 'double-redirect-fixed-move' => 'doppelte Wetterleitung uffgelest: [[$1]] → [[$2]]', -'double-redirect-fixer' => 'RedirectBot', 'brokenredirects' => 'Kaputte Wetterleitunga', 'brokenredirectstext' => 'Diese Spezialseyte listet Weiterleitunga uff ne existierende Seyta uff.', @@ -1434,15 +1176,11 @@ Jede Zeile enthält Links zu dar erschta und zweeta Wetterleitung suwie doas Zie 'withoutinterwiki' => 'Seyta ohne Links zu andern Sproacha', 'withoutinterwiki-summary' => 'De folgenda Seyta verlinken ne uff andere Sproachversionen.', -'withoutinterwiki-legend' => 'Präfix', -'withoutinterwiki-submit' => 'Zeige', 'fewestrevisions' => 'Seyta miet dann wenigsta Versionen', # Miscellaneous special pages -'nbytes' => '$1 {{PLURAL:$1|Byte|Bytes}}', 'ncategories' => '$1 {{PLURAL:$1|Kategorie|Kategoria}}', -'nlinks' => '{{PLURAL:$1|1 Link|$1 Links}}', 'nmembers' => '{{PLURAL:$1|1 Eentrag|$1 Eenträge}}', 'nrevisions' => '{{PLURAL:$1|1 Beoarbeetung|$1 Beoarbeetunga}}', 'nviews' => '{{PLURAL:$1|1 Obfroage|$1 Obfroaga}}', @@ -1453,8 +1191,6 @@ Jede Zeile enthält Links zu dar erschta und zweeta Wetterleitung suwie doas Zie 'uncategorizedcategories' => 'Ne kategorisierte Kategorien', 'uncategorizedimages' => 'Ne kategorisierte Dateien', 'uncategorizedtemplates' => 'Ne kategorisierte Vurlagen', -'unusedcategories' => 'Unbenutzte Kategorien', -'unusedimages' => 'Unbenutzte Dateien', 'popularpages' => 'Beliebteste Seyta', 'wantedcategories' => 'Nutzte, oaber ne oagelegte Kategorien', 'wantedpages' => 'Gewinschte Seyta', @@ -1464,7 +1200,6 @@ Jede Zeile enthält Links zu dar erschta und zweeta Wetterleitung suwie doas Zie 'mostlinkedcategories' => 'Meistbenutzte Heetgruppa', 'mostlinkedtemplates' => 'Meistbenutzte Vurlooga', 'mostcategories' => 'Meistkategorisierte Seyta', -'mostimages' => 'Meistbenutzte Dateien', 'mostrevisions' => 'Seyta miet dann meesta Versionen', 'prefixindex' => 'Olle Seita (mit Präfix)', 'shortpages' => 'Korze Seyta', @@ -1495,9 +1230,7 @@ Jede Zeile enthält Links zu dar erschta und zweeta Wetterleitung suwie doas Zie 'notargettext' => 'Du host ne oagegahn, uff welche Seyte diese Funksjonn oagewendet waan sull.', 'nopagetitle' => 'Zielseyte ne vurhanda', 'nopagetext' => 'De oagegebene Zielseyte ies ne vorhanden.', -'pager-newer-n' => '{{PLURAL:$1|nächster|nächste $1}}', 'pager-older-n' => '{{PLURAL:$1|vurheriger|vurherige $1}}', -'suppress' => 'Oversight', # Book sources 'booksources' => 'ISBN-Siche', @@ -1508,7 +1241,6 @@ Jede Zeile enthält Links zu dar erschta und zweeta Wetterleitung suwie doas Zie Bitte priefe, ob korrekt vu dar Quelle iebertraga wurde.', # Special:Log -'specialloguserlabel' => 'Benutzer:', 'speciallogtitlelabel' => 'Tittel:', 'log' => 'Logbicher', 'all-logs-page' => 'Olle effentlicha Logbicher', @@ -1519,7 +1251,6 @@ De Ausgabe koan durch de Auswoahl des Logbuchtyps, des Nutzers oder des Seytatit # Special:AllPages 'allpages' => 'Olle Seyta', -'alphaindexline' => '$1 bis $2', 'nextpage' => 'Nächste Seyte ($1)', 'prevpage' => 'Vurherige Seyte ($1)', 'allpagesfrom' => 'Seyta oazeega oab:', @@ -1528,7 +1259,6 @@ De Ausgabe koan durch de Auswoahl des Logbuchtyps, des Nutzers oder des Seytatit 'allinnamespace' => 'Olle Seyta (Noamasraum: $1)', 'allnotinnamespace' => 'Olle Seyta (ne eim $1 Noamasraum)', 'allpagesprev' => 'Vurherige', -'allpagesnext' => 'Nächste', 'allpagessubmit' => 'Oawenda', 'allpagesprefix' => 'Seyta oazeiga mit Präfix:', 'allpagesbadtitle' => 'Dar eingegebene Seytanoame ies ungiltig: Ar hoot entweder a vorangestelltes Sproach-, a Interwiki-Kürzel oder enthält a oder mehrere Zeichen, welche in Seytanoama ne verwendet waan dirfa.', @@ -1544,13 +1274,10 @@ Siehe au de Liste dar [[Special:WantedCategories|gewienschta Heetgruppa]].', 'special-categories-sort-abc' => 'Sortierung noach Alphabet', # Special:DeletedContributions -'deletedcontributions' => 'Geläschte Beiträge', -'deletedcontributions-title' => 'Geläschte Beiträge', -'sp-deletedcontributions-contribs' => 'Benutzerbeiträge', +'deletedcontributions' => 'Geläschte Beiträge', +'deletedcontributions-title' => 'Geläschte Beiträge', # Special:LinkSearch -'linksearch' => 'Weblink-Suche', -'linksearch-pat' => 'Suchmuster:', 'linksearch-ns' => 'Noamensraum:', 'linksearch-ok' => 'Sucha', 'linksearch-text' => 'Diese Spezialseite ermeeglicht de Siche noach Seyta, ei denen bestimmte Weblinks enthalten sein. Dabei kinna Wildcards wie beispielsweise *.example.com benutzt waan.
    Understitzte Protokolle: $1', @@ -1559,12 +1286,9 @@ Siehe au de Liste dar [[Special:WantedCategories|gewienschta Heetgruppa]].', # Special:ListUsers 'listusersfrom' => 'Zeige Benutzer ob:', -'listusers-submit' => 'Zeige', 'listusers-noresult' => 'Kenn Benutzer gefunda.', -'listusers-blocked' => '(gesperrt)', # Special:ActiveUsers -'activeusers' => 'Liste aktiver Benutzer', 'activeusers-noresult' => 'Kenne Benutzer gefunda.', # Special:Log/newusers @@ -1579,10 +1303,7 @@ Siehe au de Liste dar [[Special:WantedCategories|gewienschta Heetgruppa]].', 'listgrouprights' => 'Nutzergruppen-Rechte', 'listgrouprights-summary' => 'Dies ies anne Liste dar ei diesem Wiki definierten Nutzergruppen und dar damit verbundenen Rechte. Zusätzliche Informationen ieber einzelne Rechte kinna [[{{MediaWiki:Listgrouprights-helppage}}|hier]] gefunda waan.', -'listgrouprights-group' => 'Gruppe', -'listgrouprights-rights' => 'Rechte', 'listgrouprights-helppage' => 'Help:Grupparechte', -'listgrouprights-members' => '(Mitgliederliste)', 'listgrouprights-addgroup' => 'Nutzer zu {{PLURAL:$2|dieser Gruppe|diesen Gruppen}} hinzufiega: $1', 'listgrouprights-removegroup' => 'Nutzer aus {{PLURAL:$2|dieser Gruppe|diesen Gruppen}} entferna: $1', 'listgrouprights-addgroup-all' => 'Nutzer zu olla Gruppa hinzufiega', @@ -1596,26 +1317,20 @@ Zusätzliche Informationen ieber einzelne Rechte kinna [[{{MediaWiki:Listgroupri 'emailpagetext' => 'Du koast damm Nutzer miet damm onda stiehenda Formular anne E-Mail senda. Ols Obsender werd de E-Mail-Adtresse aus denn [[Special:Preferences|Einstellunga]] eingetraga, damit dar Nutzer dir antwurta koan.', 'usermailererror' => "Doas E-Mail-Objekt gab an'n Fahler zerricke:", -'defemailsubject' => '{{SITENAME}}-E-Mail', 'noemailtitle' => 'Kenne E-Mail-Atresse', 'noemailtext' => 'Dieser Nutzer hoot kenne giltige E-Mail-Atresse oagegahn.', 'nowikiemailtitle' => 'E-Mail-Versand nee meegliech', 'email-legend' => "E-Mail oa an'n andern {{SITENAME}}-Nutzer senda", 'emailfrom' => 'Vun:', 'emailto' => 'Oa:', -'emailsubject' => 'Betreff:', 'emailmessage' => 'Noachricht:', 'emailsend' => 'Senda', 'emailccme' => 'Sende anne Kopie dar E-Mail oa miech', 'emailccsubject' => 'Kopie denner Noachricht oa $1: $2', -'emailsent' => 'E-Mail verschickt', 'emailsenttext' => 'Denne E-Mail wurde verschickt.', 'emailuserfooter' => 'Diese E-Mail wurde vu {{SITENAME}}-Nutzer „$1“ oa „$2“ gesendet.', # Watchlist -'watchlist' => 'Beobachtungsliste', -'mywatchlist' => 'Beobachtungsliste', -'watchlistfor' => "(fier '''$1''')", 'nowatchlist' => 'Du host kenne Einträge uff denner Beobachtungsliste.', 'watchlistanontext' => 'Du mußt diech $1, im denne Beobachtungsliste zu sahn oder Einträge uff ihr zu beoarbeeta.', 'watchnologin' => 'Du best ne oagemeldet', @@ -1634,7 +1349,6 @@ Wenn du de Seyte wieder voo denner Beobachtungsliste entferna mechtest, klicke u 'unwatch' => 'nä mehr beobachta', 'unwatchthispage' => 'Nä mehr beobachta', 'notanarticle' => 'Keene Seyte', -'notvisiblerev' => 'Version wurde gelöscht', 'watchnochange' => 'Kenne dar vu dir beobachteta Seyta wurde während des oagezeigta Zeitraums beoarbeetet.', 'watchlist-details' => 'Du beobachtest {{PLURAL:$1|1 Seyte|$1 Seyta}}.', 'wlheader-enotif' => '* Dar E-Mail-Benoachrichtigungsdienst ies aktiviert.', @@ -1651,17 +1365,15 @@ Wenn du de Seyte wieder voo denner Beobachtungsliste entferna mechtest, klicke u 'watching' => 'Beobachta …', 'unwatching' => 'Nee beobachta …', -'enotif_mailer' => '{{SITENAME}}-E-Mail-Benoachrichtigungsdienst', -'enotif_reset' => 'Olle Seyta ols besucht markiern', -'enotif_newpagetext' => 'Doas ies anne neue Seyte.', -'enotif_impersonal_salutation' => '{{SITENAME}}-Benutzer', -'changed' => 'geändert', -'created' => 'erzeugt', -'enotif_subject' => '[{{SITENAME}}] De Seyte "$PAGETITLE" wurde vu $PAGEEDITOR $CHANGEDORCREATED', -'enotif_lastvisited' => "Olle Änderunga uff a'n Blick: $1", -'enotif_lastdiff' => 'Siehe $1 noach dieser Änderung.', -'enotif_anon_editor' => 'Anonymer Nutzer $1', -'enotif_body' => 'Hallo $WATCHINGUSERNAME, +'enotif_mailer' => '{{SITENAME}}-E-Mail-Benoachrichtigungsdienst', +'enotif_reset' => 'Olle Seyta ols besucht markiern', +'enotif_newpagetext' => 'Doas ies anne neue Seyte.', +'created' => 'erzeugt', +'enotif_subject' => '[{{SITENAME}}] De Seyte "$PAGETITLE" wurde vu $PAGEEDITOR $CHANGEDORCREATED', +'enotif_lastvisited' => "Olle Änderunga uff a'n Blick: $1", +'enotif_lastdiff' => 'Siehe $1 noach dieser Änderung.', +'enotif_anon_editor' => 'Anonymer Nutzer $1', +'enotif_body' => 'Hallo $WATCHINGUSERNAME, de {{SITENAME}}-Seyte „$PAGETITLE“ wurde vu $PAGEEDITOR oam $PAGEEDITDATE im $PAGEEDITTIME Seeger $CHANGEDORCREATED. @@ -1705,8 +1417,6 @@ Rickmeldungen und wettere Helfe: {{fullurl:{{MediaWiki:Helppage}}}}', 'deletionlog' => 'Läsch-Logbuch', 'reverted' => 'Uff anne aale Version zerrickegesetzt', 'deletecomment' => 'Begriendung:', -'deleteotherreason' => 'Anderer/ergänzender Grund:', -'deletereasonotherlist' => 'Anderer Grund', 'deletereason-dropdown' => '* Allgemeene Läschgrinde ** Wunsch des Autors ** Urheberrechtsverletzung @@ -1727,7 +1437,9 @@ De letzte Änderung stommt vu [[User:$3|$3]] ([[User talk:$3|Dischkur]]{{int:pip 'editcomment' => "De Änderungszusommafassung lautet: ''„$1“''.", 'revertpage' => 'Änderunga vu [[Special:Contributions/$2|$2]] ([[User talk:$2|Dischkur]]) rickgängig gemacht und letzte Version vu [[User:$1|$1]] wiederhergestellt', 'rollback-success' => 'De Änderunga vu $1 wurden rickgängig gemacht und de letzte Version vu $2 wurde wiederhergestellt.', -'sessionfailure' => "Is goab a Problem miet dar Iebertragung denner Nutzerdaten. + +# Edit tokens +'sessionfailure' => "Is goab a Problem miet dar Iebertragung denner Nutzerdaten. Diese Aksjonn wurde daher sicherheetsholber obgebrochen, im anne foalsche Zuordnung denner Änderunga zu an'm andern Nutzer zu verhindern. Bitte gieh zerricke und versiche dann Vurgang erneut auszufiehrn.", @@ -1742,8 +1454,6 @@ Siehe de [[Special:ProtectedPages|Liste dar geschietzta Seyta]] fier olle aktuel 'protect-title' => 'Schutz ändern vu „$1“', 'prot_1movedto2' => 'hoot „[[$1]]“ nooch „[[$2]]“ verschoba', 'protect-legend' => 'Seytaschutzstatus ändern', -'protectcomment' => 'Grund:', -'protectexpiry' => 'Sperrdauer:', 'protect_expiry_invalid' => 'De eengegebene Lengde ies ungieltig.', 'protect_expiry_old' => 'De Sperrzeit liegt ei dar Vergangenheet.', 'protect-text' => 'Hier koast du dan Schutzstatus fier de Seite „$1“ asahn on ändern.', @@ -1755,15 +1465,10 @@ Siehe de [[Special:ProtectedPages|Liste dar geschietzta Seyta]] fier olle aktuel 'protect-fallback' => 'Is wird de „$1“-Berechtigung beneetigt.', 'protect-level-autoconfirmed' => 'Sperrung fier neue on nee registrierte Benutzer', 'protect-level-sysop' => 'Oack Administratora', -'protect-summary-cascade' => 'kaskadierend', 'protect-expiring' => 'bis $2, $3 Seeger (UTC)', -'protect-expiry-indefinite' => 'unbeschränkt', 'protect-cascade' => 'Kaskadierende Sperre – olle ei diese Seyte eingebundena Vorlaga waan ebenfoalls gesperrt.', 'protect-cantedit' => 'Du koast de Sperre dieser Seite nee ändern, doo du keene Berechtigung zim Beoarbeeta dar Seite host.', -'protect-othertime' => 'Andere Sperrdauer:', -'protect-othertime-op' => 'andere Sperrdauer', 'protect-existing-expiry' => 'Aktuelles Seytaschutzende: $2, $3 Seeger', -'protect-otherreason' => 'Anderer/ergänzender Grund:', 'protect-otherreason-op' => 'anderer/ergänzender Grund', 'protect-dropdown' => '*Allgemeene Schutzgrinde ** Weblink-Spam @@ -1776,7 +1481,6 @@ Siehe de [[Special:ProtectedPages|Liste dar geschietzta Seyta]] fier olle aktuel 'restriction-level' => 'Schutzhiehe', 'minimum-size' => 'Mindestgreeße', 'maximum-size' => 'Maximalgreeße:', -'pagesize' => '(Bytes)', # Restrictions (nouns) 'restriction-edit' => 'Beorbeeta', @@ -1799,7 +1503,6 @@ Siehe de [[Special:ProtectedPages|Liste dar geschietzta Seyta]] fier olle aktuel 'undeleteextrahelp' => '* Im de Seyte komplett miet olla Versionen wiederherzustella, wähle kenne Version aus, gib anne Begrindung oa und klicke uff „Wiederherstellen“. * Mechtest du ock bestimmte Versionen wiederherstella, su wähle diese bitte einzeln anhand dar Markierungen aus, gib anne Begrindung oa und klicke dann uff „Wiederherstella“. * „Obbrecha“ laart doas Kommentarfeld und entfernt olle Markierungen bei dann Versionen.', -'undeleterevisions' => '{{PLURAL:$1|1 Version|$1 Versionen}} archiviert', 'undeletehistory' => 'Wenn du diese Seyte wiederherstellst, waan au olle aaln Versionen wiederhergestellt. Wenn seit dar Läschung anne neue Seyte gleichen Noamens erstellt wurde, waan de wiederhergestellta Versionen chronologisch ei de Versionsgeschichte eingeordnet.', 'undeleterevdel' => "De Wiederherstellung werd ne durchgefiehrt, wenn de aktuellste Version versteckt ies oder versteckte Teele enthält. @@ -1813,17 +1516,11 @@ Dar aktuelle Text dar geläschta Seyte ies ock Administratoren zugänglich.', 'undeletebtn' => 'Wiederherstalla', 'undeletelink' => 'oasahn/wiederherstella', 'undeleteviewlink' => 'oasahn', -'undeletereset' => 'Abbrechen', 'undeleteinvert' => 'Auswoahl umkehra', 'undeletecomment' => 'Begrindung:', 'undeletedarticle' => 'hoot „[[$1]]“ wiederhergestellt', -'undeletedrevisions' => '{{PLURAL:$1|1 Version wurde|$1 Versionen wurden}} wiederhergestellt', 'undeletedrevisions-files' => '{{PLURAL:$1|1 Version|$1 Versionen}} und {{PLURAL:$2|1 Datei|$2 Dateien}} wurden wiederhergestallt', -'undeletedfiles' => '{{PLURAL:$1|1 Datei wurde|$1 Dateien wurden}} wiederhergestellt', 'cannotundelete' => 'Wiederherstellung fehlgeschlaga; jemand anderes hoot de Seyte bereits wiederhergestellt.', -'undeletedpage' => "'''„$1“''' wurde wiederhergestellt. - -Eim [[Special:Log/delete|Läsch-Logbuch]] fendest du anne Iebersicht dar geläschta und wiederhergestellta Seyta.", 'undelete-header' => 'Siehe eim [[Special:Log/delete|Läsch-Logbuch]] noach kierzlich geläschta Seyta.', 'undelete-search-box' => 'Siche noach geläschta Seyta', 'undelete-search-prefix' => 'Sichbegriff (Wortanfang ohne Wildcards):', @@ -1846,19 +1543,16 @@ $1", 'blanknamespace' => '(Seyta)', # Contributions -'contributions' => 'Benutzerbeiträge', 'contributions-title' => 'Benutzerbeiträge voo „$1“', 'mycontris' => 'Vu mer verändart', 'contribsub2' => 'Fier $1 ($2)', 'nocontribs' => 'Is wurden kenne Nutzerbeiträge miet diesen Kriterien gefunda.', -'uctop' => '(aktuell)', 'month' => 'on Moonat:', 'year' => 'bis Joahr:', 'sp-contributions-newbies' => 'Zeige oack Beiträge neuer Benutzer', 'sp-contributions-newbies-sub' => 'Fier Neulinge', 'sp-contributions-newbies-title' => 'Nutzerbeiträge vu neua Nutzern', -'sp-contributions-blocklog' => 'Sperr-Logbuch', 'sp-contributions-deleted' => 'Geläschte Beiträge', 'sp-contributions-logs' => 'Logbicher', 'sp-contributions-talk' => 'Dischkur', @@ -1875,29 +1569,21 @@ $1", 'nolinkshere' => "Kenne Seyte verlinkt uff '''„[[:$1]]“'''.", 'nolinkshere-ns' => "Kenne Seyte verlinkt uff '''„[[:$1]]“''' eim gewählta Noamasraum.", 'isredirect' => 'Weiterleitungsseyte', -'istemplate' => 'Vorlageneinbindung', -'isimage' => 'Dateilink', 'whatlinkshere-prev' => '{{PLURAL:$1|vurheriger|vurherige $1}}', -'whatlinkshere-next' => '{{PLURAL:$1|nächster|nächste $1}}', -'whatlinkshere-links' => '← Links', 'whatlinkshere-hideredirs' => 'Weiterleitunga $1', 'whatlinkshere-hidetrans' => 'Vurlageneinbindunga $1', -'whatlinkshere-hidelinks' => 'Links $1', -'whatlinkshere-hideimages' => 'Dateilinks $1', -'whatlinkshere-filters' => 'Filter', # Block/unblock -'blockip' => 'IP-Atresse/Benutzer sperra', -'blockip-legend' => 'IP-Atresse/Benutzer sperra', -'blockiptext' => "Mit diesem Formular sperrst du anne IP-Atresse oder an'n Nutzernoama, su doaß vu dort kenne Änderunga meh vorgenumma waan kinna. +'blockip' => 'IP-Atresse/Benutzer sperra', +'blockip-legend' => 'IP-Atresse/Benutzer sperra', +'blockiptext' => "Mit diesem Formular sperrst du anne IP-Atresse oder an'n Nutzernoama, su doaß vu dort kenne Änderunga meh vorgenumma waan kinna. Dies sullte ock erfolga, im Vandalismus zu verhindern und ei Iebereinstimmung miet dann [[{{MediaWiki:Policy-url}}|Richtlinien]]. Bitte gib dann Grund fier de Sperre oa.", -'ipaddress' => 'IP-Atresse oder Benutzernoame:', -'ipadressorusername' => 'IP-Atresse oder Benutzernoame:', -'ipbexpiry' => 'Sperrdauer:', -'ipbreason' => 'Begriendung:', -'ipbreasonotherlist' => 'Andere Begrindung', -'ipbreason-dropdown' => '* Allgemeene Sperrgrinde +'ipaddress' => 'IP-Atresse oder Benutzernoame:', +'ipadressorusername' => 'IP-Atresse oder Benutzernoame:', +'ipbreason' => 'Begriendung:', +'ipbreasonotherlist' => 'Andere Begrindung', +'ipbreason-dropdown' => '* Allgemeene Sperrgrinde ** Eenfiega foalscher Informationa ** Laara vu Seyta ** Fiegt massenweise externe Links a @@ -1905,90 +1591,76 @@ Bitte gib dann Grund fier de Sperre oa.", ** bedrohliches Verhaala/Belästigung ** Missbrauch durch mehrere Nutzerkonten ** Ungeeigneter Nutzernoame', -'ipbanononly' => 'Ock anonyme Nutzer sperra', -'ipbcreateaccount' => 'Erstellung vu Nutzerkonten verhindern', -'ipbemailban' => 'E-Mail-Versand sperra', -'ipbenableautoblock' => 'Sperre de aktuell vu diesem Benutzer genutzte IP-Atresse suwie automatisch olle folgenda, vu denen aus ar Beoarbeetunga oder doas Oalega vu Benutzeraccounts versucht', -'ipbsubmit' => 'IP-Atresse/Benutzer sperra', -'ipbother' => 'Ondere Dauer (englsch):', -'ipboptions' => '2 Stonda:2 hours,1 Taag:1 day,3 Taage:3 days,1 Wuche:1 week,2 Wucha:2 weeks,1 Moonat:1 month,3 Moonate:3 months,6 Moonate:6 months,1 Joahr:1 year,Unbeschränkt:infinite', -'ipbotheroption' => 'Oandere Dauer', -'ipbotherreason' => 'Andere/ergänzende Begrindung:', -'ipbhidename' => 'Nutzernoame ei Beoarbeetunga und Listen verstecka', -'ipbwatchuser' => 'Nutzer(dischkur)seyte beobachta', -'ipballowusertalk' => 'Nutzer darf eegene Dischkurseyta während senner Sperre beoarbeeta', -'ipb-change-block' => 'Sperre miet diesen Sperrparametern erneuern', -'badipaddress' => 'De IP-Atresse hoot a foalsches Furmat.', -'blockipsuccesssub' => 'Sperre erfolgreich', -'blockipsuccesstext' => 'Dar Nutzer/de IP-Atresse [[Special:Contributions/$1|$1]] wurde gesperrt.
    +'ipbanononly' => 'Ock anonyme Nutzer sperra', +'ipbcreateaccount' => 'Erstellung vu Nutzerkonten verhindern', +'ipbemailban' => 'E-Mail-Versand sperra', +'ipbenableautoblock' => 'Sperre de aktuell vu diesem Benutzer genutzte IP-Atresse suwie automatisch olle folgenda, vu denen aus ar Beoarbeetunga oder doas Oalega vu Benutzeraccounts versucht', +'ipbsubmit' => 'IP-Atresse/Benutzer sperra', +'ipbother' => 'Ondere Dauer (englsch):', +'ipboptions' => '2 Stonda:2 hours,1 Taag:1 day,3 Taage:3 days,1 Wuche:1 week,2 Wucha:2 weeks,1 Moonat:1 month,3 Moonate:3 months,6 Moonate:6 months,1 Joahr:1 year,Unbeschränkt:infinite', +'ipbotheroption' => 'Oandere Dauer', +'ipbotherreason' => 'Andere/ergänzende Begrindung:', +'ipbhidename' => 'Nutzernoame ei Beoarbeetunga und Listen verstecka', +'ipbwatchuser' => 'Nutzer(dischkur)seyte beobachta', +'ipballowusertalk' => 'Nutzer darf eegene Dischkurseyta während senner Sperre beoarbeeta', +'ipb-change-block' => 'Sperre miet diesen Sperrparametern erneuern', +'badipaddress' => 'De IP-Atresse hoot a foalsches Furmat.', +'blockipsuccesstext' => 'Dar Nutzer/de IP-Atresse [[Special:Contributions/$1|$1]] wurde gesperrt.
    Zur Uffhebung dar Sperre siehe ie [[Special:IPBlockList|Liste oller aktiven Sperra]].', -'ipb-edit-dropdown' => 'Sperrgrinde beoarbeeta', -'ipb-unblock-addr' => '„$1“ freigahn', -'ipb-unblock' => 'IP-Atresse/Nutzer freigahn', -'ipb-blocklist-addr' => 'Aktuelle Sperre fier „$1“ onzeiga', -'ipb-blocklist' => 'Olle aktuellen Sperra oazeiga', -'ipb-blocklist-contribs' => 'Nutzerbeiträge fier „$1“', -'unblockip' => 'IP-Atresse freigahn', -'unblockiptext' => "Miet diesem Formular koast du anne IP-Atresse oder an'n Nutzer freigahn.", -'ipusubmit' => 'Freigahn', -'unblocked' => '[[User:$1|$1]] wurde freigegahn', -'unblocked-id' => 'Sperr-ID $1 wurde freigegahn', -'ipblocklist' => 'Gesperrte IP-Atressa on Benutzernoama', -'ipblocklist-legend' => "Siche noach a'm gesperrta Nutzer", -'ipblocklist-username' => 'Nutzernoame oder IP-Atresse:', -'ipblocklist-sh-userblocks' => 'Benutzersperra $1', -'ipblocklist-sh-tempblocks' => 'Befristete Sperra $1', -'ipblocklist-sh-addressblocks' => 'IP-Sperra $1', -'ipblocklist-submit' => 'Sucha', -'ipblocklist-localblock' => 'Lokale Sperre', -'ipblocklist-otherblocks' => 'Andere {{PLURAL:$1|Sperre|Sperra}}', -'blocklistline' => '$1, $2 sperrte $3 (bis $4)', -'infiniteblock' => 'unbegrenzt', -'expiringblock' => 'endet oam $1 im $2 Seeger', -'anononlyblock' => 'ocke Anonyme', -'noautoblockblock' => 'Autoblock deaktiviert', -'createaccountblock' => 'Erstellung vu Nutzerkonten gesperrt', -'emailblock' => 'E-Mail-Versand gesperrt', -'blocklist-nousertalk' => 'darf eegene Dischkurseyte ne beoarbeeta', -'ipblocklist-empty' => 'De Liste enthält kenne Eenträge.', -'ipblocklist-no-results' => 'De gesuchte IP-Atresse/dar Nutzernoame ies ne gesperrt.', -'blocklink' => 'Sperra', -'unblocklink' => 'freigahn', -'change-blocklink' => 'Sperre ändern', -'contribslink' => 'Beiträge', -'autoblocker' => 'Automatische Sperre, do du anne gemeinsame IP-Atresse miet [[User:$1|$1]] benutzt. Grund dar Nutzersperre: „$2“.', -'blocklogpage' => 'Benutzersperr-Logbuch', -'blocklogentry' => 'sperrte „[[$1]]“ fier dan Zeitraum: $2 $3', -'reblock-logentry' => 'änderte de Sperre fier „[[$1]]“ fier dann Zeitraum: $2 $3', -'blocklogtext' => 'Dies ies doas Logbuch ieber Sperrunga und Entsperrunga vu Nutzern und IP-Atressa. +'ipb-edit-dropdown' => 'Sperrgrinde beoarbeeta', +'ipb-unblock-addr' => '„$1“ freigahn', +'ipb-unblock' => 'IP-Atresse/Nutzer freigahn', +'ipb-blocklist' => 'Olle aktuellen Sperra oazeiga', +'ipb-blocklist-contribs' => 'Nutzerbeiträge fier „$1“', +'unblockip' => 'IP-Atresse freigahn', +'unblockiptext' => "Miet diesem Formular koast du anne IP-Atresse oder an'n Nutzer freigahn.", +'ipusubmit' => 'Freigahn', +'unblocked' => '[[User:$1|$1]] wurde freigegahn', +'unblocked-id' => 'Sperr-ID $1 wurde freigegahn', +'ipblocklist' => 'Gesperrte IP-Atressa on Benutzernoama', +'ipblocklist-legend' => "Siche noach a'm gesperrta Nutzer", +'ipblocklist-username' => 'Nutzernoame oder IP-Atresse:', +'ipblocklist-sh-userblocks' => 'Benutzersperra $1', +'ipblocklist-sh-tempblocks' => 'Befristete Sperra $1', +'ipblocklist-sh-addressblocks' => 'IP-Sperra $1', +'ipblocklist-submit' => 'Sucha', +'ipblocklist-otherblocks' => 'Andere {{PLURAL:$1|Sperre|Sperra}}', +'blocklistline' => '$1, $2 sperrte $3 (bis $4)', +'expiringblock' => 'endet oam $1 im $2 Seeger', +'anononlyblock' => 'ocke Anonyme', +'createaccountblock' => 'Erstellung vu Nutzerkonten gesperrt', +'blocklist-nousertalk' => 'darf eegene Dischkurseyte ne beoarbeeta', +'ipblocklist-empty' => 'De Liste enthält kenne Eenträge.', +'ipblocklist-no-results' => 'De gesuchte IP-Atresse/dar Nutzernoame ies ne gesperrt.', +'blocklink' => 'Sperra', +'unblocklink' => 'freigahn', +'autoblocker' => 'Automatische Sperre, do du anne gemeinsame IP-Atresse miet [[User:$1|$1]] benutzt. Grund dar Nutzersperre: „$2“.', +'blocklogentry' => 'sperrte „[[$1]]“ fier dan Zeitraum: $2 $3', +'reblock-logentry' => 'änderte de Sperre fier „[[$1]]“ fier dann Zeitraum: $2 $3', +'blocklogtext' => 'Dies ies doas Logbuch ieber Sperrunga und Entsperrunga vu Nutzern und IP-Atressa. Automatisch gesperrte IP-Atressa waan ne erfasst. Siehe de [[Special:IPBlockList|Liste dar gesperrta IP-Atressa und Nutzernoama]] fier olle aktiven Sperra.', -'unblocklogentry' => 'hoot de Sperre voo „$1“ uffgehoba', -'block-log-flags-anononly' => 'ock Anonyme', -'block-log-flags-nocreate' => 'Erstellung voo Benutzerkonta gesperrt', -'block-log-flags-noautoblock' => 'Autoblock deaktiviert', -'block-log-flags-noemail' => 'E-Mail-Versand gesperrt', -'block-log-flags-nousertalk' => 'darf eegene Dischkurseyte ne beoarbeeta', -'block-log-flags-angry-autoblock' => 'erweiterter Autoblock aktiviert', -'block-log-flags-hiddenname' => 'Nutzernoame versteckt', -'range_block_disabled' => 'De Meeglichkeit, ganze Atressräume zu sperra, ies ne aktiviert.', -'ipb_expiry_invalid' => 'De eingegebene Dauer ies ungiltig.', -'ipb_expiry_temp' => 'Versteckte Nutzernoamas-Sperra sulla permanent sei.', -'ipb_already_blocked' => '„$1“ wurde bereits gesperrt.', -'ipb-needreblock' => '== Sperre vurhanda == +'unblocklogentry' => 'hoot de Sperre voo „$1“ uffgehoba', +'block-log-flags-anononly' => 'ock Anonyme', +'block-log-flags-nocreate' => 'Erstellung voo Benutzerkonta gesperrt', +'block-log-flags-nousertalk' => 'darf eegene Dischkurseyte ne beoarbeeta', +'block-log-flags-hiddenname' => 'Nutzernoame versteckt', +'range_block_disabled' => 'De Meeglichkeit, ganze Atressräume zu sperra, ies ne aktiviert.', +'ipb_expiry_invalid' => 'De eingegebene Dauer ies ungiltig.', +'ipb_expiry_temp' => 'Versteckte Nutzernoamas-Sperra sulla permanent sei.', +'ipb-needreblock' => '== Sperre vurhanda == „$1“ ies bereits gesperrt. Mechtest du de Sperrparameter ändern?', -'ipb-otherblocks-header' => 'Andere {{PLURAL:$1|Sperre|Sperra}}', -'ipb_cant_unblock' => 'Fahler: Sperr-ID $1 ne gefunda. De Sperre wurde bereits uffgehuba.', -'ipb_blocked_as_range' => 'Fahler: De IP-Atresse $1 wurde ols Teel dar Bereichssperre $2 indirekt gesperrt. Anne Entsperrung vu $1 alleene ies ne meeglich.', -'ip_range_invalid' => 'Ungiltiger IP-Atressbereich.', -'blockme' => 'Sperre miech', -'proxyblocker' => 'Proxy blocker', -'proxyblocker-disabled' => 'Diese Funksjonn ies deaktiviert.', -'proxyblockreason' => 'Denne IP-Atresse wurde gesperrt, do se a offener Proxy ies. Bitte kontaktiere denn Internet-Provider oder denne Systemadministratoren und informiere se ieber dieses meegliche Sicherheetsproblem.', -'proxyblocksuccess' => 'Fattich', -'sorbsreason' => 'De IP-Atresse ies ei dar DNSBL vu {{SITENAME}} ols offener PROXY gelistet.', -'sorbs_create_account_reason' => 'De IP-Atresse ies ei dar DNSBL vu {{SITENAME}} ols offener PROXY gelistet. Doas Oalega neuer Nutzer ies ne meeglich.', -'cant-block-while-blocked' => 'Du koast kenne andern Nutzer sperra, während du selbst gesperrt best', +'ipb-otherblocks-header' => 'Andere {{PLURAL:$1|Sperre|Sperra}}', +'ipb_cant_unblock' => 'Fahler: Sperr-ID $1 ne gefunda. De Sperre wurde bereits uffgehuba.', +'ipb_blocked_as_range' => 'Fahler: De IP-Atresse $1 wurde ols Teel dar Bereichssperre $2 indirekt gesperrt. Anne Entsperrung vu $1 alleene ies ne meeglich.', +'ip_range_invalid' => 'Ungiltiger IP-Atressbereich.', +'blockme' => 'Sperre miech', +'proxyblocker-disabled' => 'Diese Funksjonn ies deaktiviert.', +'proxyblockreason' => 'Denne IP-Atresse wurde gesperrt, do se a offener Proxy ies. Bitte kontaktiere denn Internet-Provider oder denne Systemadministratoren und informiere se ieber dieses meegliche Sicherheetsproblem.', +'proxyblocksuccess' => 'Fattich', +'sorbsreason' => 'De IP-Atresse ies ei dar DNSBL vu {{SITENAME}} ols offener PROXY gelistet.', +'sorbs_create_account_reason' => 'De IP-Atresse ies ei dar DNSBL vu {{SITENAME}} ols offener PROXY gelistet. Doas Oalega neuer Nutzer ies ne meeglich.', +'cant-block-while-blocked' => 'Du koast kenne andern Nutzer sperra, während du selbst gesperrt best', # Developer tools 'lockdb' => 'Datenbank sperra', @@ -2000,7 +1672,6 @@ Siehe de [[Special:IPBlockList|Liste dar gesperrta IP-Atressa und Nutzernoama]] 'lockbtn' => 'Datenbank sperra', 'unlockbtn' => 'Datenbank freigahn', 'locknoconfirm' => 'Du host doas Bestätigungsfeld ne markiert.', -'lockdbsuccesssub' => 'Datenbank wurde erfolgreich gesperrt', 'unlockdbsuccesssub' => 'Datenbank wourde erfolgreich freigegahn', 'lockdbsuccesstext' => 'De {{SITENAME}}-Datenbank wurde gesperrt.
    Bitte gib de Datenbank [[Special:UnlockDB|wieder frei]], sobald de Wartung obgeschlossa ies.', 'unlockdbsuccesstext' => 'De {{SITENAME}}-Datenbank wourde freigegahn.', @@ -2034,10 +1705,8 @@ Bite dan '''neua''' Tittel under '''Ziel''' eintraga, darunder de Umbenennung bi 'movenotallowed' => 'Du host kenne Berechtigung, Seyta zu verschieba.', 'cant-move-user-page' => 'Du host kenne Berechtigung, Nutzerhauptseyta zu verschieba.', 'cant-move-to-user-page' => 'Du host ne de Berechtigung, Seyta uff anne Nutzerseyte zu verschieba (miet Ausnahme vu Nutzerunderseyta).', -'newtitle' => 'Ziel:', 'move-watch' => 'Diese Seyte beobachta', 'movepagebtn' => 'Seite verschieba', -'pagemovedsub' => 'Verschiebung erfolgreich', 'movepage-moved' => "'''De Seyte „$1“ wurde noach „$2“ verschoba.'''", 'articleexists' => 'Under diesem Noama existiert bereits eene Seyte. Bite wähle eena andern Noama.', 'cantmove-titleprotected' => 'De Verschiebung koan ne durchgefiehrt waan, do dar Zieltittel zur Erstellung gesperrt ies.', @@ -2053,7 +1722,6 @@ Bite dan '''neua''' Tittel under '''Ziel''' eintraga, darunder de Umbenennung bi '1movedto2' => 'hoot „[[$1]]“ noach „[[$2]]“ verschoba', '1movedto2_redir' => 'hoot „[[$1]]“ noach „[[$2]]“ verschoba on dabei eene Weiterleitung ieberschrieba', 'move-redirect-suppressed' => 'Weiterleitung underdrickt', -'movelogpage' => 'Verschiebungs-Logbuch', 'movelogpagetext' => 'Dies ies anne Liste oller verschobena Seyta.', 'movesubpage' => '{{PLURAL:$1|Underseyte|Underseyta}}', 'movenosubpage' => 'Diese Seyte hoot kenne Underseyta.', @@ -2091,26 +1759,17 @@ Alternativ ies dar Export au miet dar Syntax [[{{#Special:Export}}/{{MediaWiki:M 'export-submit' => 'Seyta exportiera', 'export-addcattext' => 'Seyta aus Kategorie hinzufiega:', 'export-addcat' => 'Hinzufiega', -'export-addns' => 'Hinzufügen', 'export-download' => 'Ols XML-Datei speichern', -'export-templates' => 'Inklusive Vorlagen', 'export-pagelinks' => 'Verlinkte Seyta automatisch miet exportiera, bis zer Rekursionstiefe vu:', # Namespace 8 related -'allmessages' => 'MediaWiki-Systemtexte', -'allmessagesname' => 'Noame', -'allmessagesdefault' => 'Standardtext', -'allmessagescurrent' => 'Aktueller Text', -'allmessagestext' => 'Dies ies anne Liste dar MediaWiki-Systemtexte. +'allmessagesname' => 'Noame', +'allmessagestext' => 'Dies ies anne Liste dar MediaWiki-Systemtexte. Besiche de Seyta [http://www.mediawiki.org/wiki/Localisation MediaWiki-Lokalisierung] und [http://translatewiki.net translatewiki.net], wenn du diech oa dar Lokalisierung vu MediaWiki beteiliga mechtest.', -'allmessagesnotsupportedDB' => 'Diese Spezialseyte stieht ne zur Verfigung, do se ieber dann Parameter $wgUseDatabaseMessages deaktiviert wurde.', -'allmessages-filter-legend' => 'Filter', -'allmessages-filter-unmodified' => 'Unverändert', -'allmessages-filter-all' => 'Olle', -'allmessages-filter-modified' => 'Verändert', -'allmessages-prefix' => 'Präfixfilter:', -'allmessages-language' => 'Sproache:', -'allmessages-filter-submit' => 'Lus', +'allmessagesnotsupportedDB' => 'Diese Spezialseyte stieht ne zur Verfigung, do se ieber dann Parameter $wgUseDatabaseMessages deaktiviert wurde.', +'allmessages-filter-all' => 'Olle', +'allmessages-language' => 'Sproache:', +'allmessages-filter-submit' => 'Lus', # Thumbnails 'thumbnail-more' => 'vergrießern', @@ -2124,20 +1783,16 @@ Besiche de Seyta [http://www.mediawiki.org/wiki/Localisation MediaWiki-Lokalisie # Special:Import 'import' => 'Seyta importiern', -'importinterwiki' => 'Transwiki-Import', 'import-interwiki-text' => 'Wähle a Wiki und anne Seyte zum Importiera aus. De Versionsdaten und Nutzernoama bleiba dabei erhalta. Olle Transwiki-Import-Aksjonna waan eim [[Special:Log/import|Import-Logbuch]] protokolliert.', 'import-interwiki-source' => 'Quell-Wiki/-Seyte:', 'import-interwiki-history' => 'Importiere olle Versionen dieser Seyte', 'import-interwiki-templates' => 'Olle Vurloaga einschließen', -'import-interwiki-submit' => 'Import', 'import-interwiki-namespace' => 'Zielnoamasraum:', 'import-upload-filename' => 'Dateinoame:', -'import-comment' => 'Grund:', 'importtext' => 'Uff dieser Spezialseyte kinna ieber de [[Special:Export|Exportfunktion]] eim Quellwiki exportierte Seyta ei dieses Wiki importiert waan.', 'importstart' => 'Importiere Seyte …', -'import-revision-count' => '– {{PLURAL:$1|1 Version|$1 Versionen}}', 'importnopages' => 'Kenne Seyte zum Importiern vurhanda.', 'importfailed' => 'Import fehlgeschlaga: $1', 'importunknownsource' => 'Unbekennte Importquelle', @@ -2154,16 +1809,13 @@ Olle Transwiki-Import-Aksjonna waan eim [[Special:Log/import|Import-Logbuch]] pr 'import-parse-failure' => 'Fahler beim XML-Import:', 'import-noarticle' => 'Is wurde kenne zu importierende Seyte oagegahn!', 'import-nonewrevisions' => 'Is sein kenne neua Versiona zum Import vorhanden, olle Versiona wurden bereits frieher importiert.', -'xml-error-string' => '$1 Zeile $2, Spalte $3, (Byte $4): $5', 'import-upload' => 'XML-Daten importiera', 'import-token-mismatch' => 'Verlust dar Sessiondaten. Bitte versuche is erneut.', 'import-invalid-interwiki' => "Aus damm oagegahn'n Wiki ies kee Import meeglich.", # Import log -'importlogpage' => 'Import-Logbuch', 'importlogpagetext' => 'Administrativer Import vu Seyta miet Versionsgeschichte vu andern Wikis.', 'import-logentry-upload' => "hoot „[[$1]]“ vu a'r Datei importiert", -'import-logentry-upload-detail' => '$1 {{PLURAL:$1|Version|Versionen}}', 'import-logentry-interwiki' => 'hoot „$1“ importiert (Transwiki)', 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|Version|Versiona}} vun $2', @@ -2197,12 +1849,8 @@ Olle Transwiki-Import-Aksjonna waan eim [[Special:Log/import|Import-Logbuch]] pr 'tooltip-n-mainpage' => 'Heetseyte oanzeiga', 'tooltip-n-mainpage-description' => 'Heetseyte besicha', 'tooltip-n-portal' => 'Iebers Portal: woas du tun koast, wo woas zu finda ies', -'tooltip-n-currentevents' => 'Hintergrundinformationen zu aktuellen Ereignissen', -'tooltip-n-recentchanges' => 'Liste der letzten Änderungen in {{SITENAME}}', 'tooltip-n-randompage' => 'Zufällige Seyte', -'tooltip-n-help' => 'Hilfeseite anzeigen', 'tooltip-t-whatlinkshere' => 'Liste oller Seyta, de hierher zeiga', -'tooltip-t-recentchangeslinked' => 'Letzte Änderungen an Seiten, die von hier verlinkt sind', 'tooltip-feed-rss' => 'RSS-Feed fier diese Seyte', 'tooltip-feed-atom' => 'Atom-Feed fier diese Seyte', 'tooltip-t-contributions' => 'Liste dar Beiträge voo diesem Benutzer oasahn', @@ -2240,7 +1888,6 @@ Olle Transwiki-Import-Aksjonna waan eim [[Special:Log/import|Import-Logbuch]] pr # Attribution 'anonymous' => '{{PLURAL:$1|Anonymer Nutzer|Anonyme Nutzer}} uff {{SITENAME}}', 'siteuser' => '{{SITENAME}}-Benutzer $1', -'anonuser' => 'Anonymer {{SITENAME}}-Benutzer $1', 'lastmodifiedatby' => 'Diese Seyte wurde zuletzt oam $1 im $2 Seeger vu $3 geändert.', 'othercontribs' => 'Basierend uff dar Orbeet vu $1.', 'others' => 'oandera', @@ -2249,11 +1896,8 @@ Olle Transwiki-Import-Aksjonna waan eim [[Special:Log/import|Import-Logbuch]] pr 'nocredits' => 'Fier diese Seyte sein kenne Informationa vorhanda.', # Spam protection -'spamprotectiontitle' => 'Spamschutzfilter', 'spamprotectiontext' => "De Seyte, de du speichern wielst, wurde vum Spamschutzfilter blockiert. Doas leit woahrscheinlich oa an'm Link uff anne externe Seyte.", 'spamprotectionmatch' => "'''Dar folgende Text wurde vum Spamfilter gefunda: ''$1'''''", -'spambot_username' => 'MediaWiki-Spam-Säuberung', -'spam_reverting' => 'Letzte Version ohne Links zu $1 wiederhergestellt.', 'spam_blanking' => 'Olle Versionen enthielta Links zu $1, bereinigt.', # Info page @@ -2270,7 +1914,6 @@ Olle Transwiki-Import-Aksjonna waan eim [[Special:Log/import|Import-Logbuch]] pr 'mw_math_html' => 'Wenn meeglich ols HTML darstella, sunst PNG', 'mw_math_source' => 'Ols TeX belassen (fier Textbrowser)', 'mw_math_modern' => 'Empfehlenswert fier moderne Browser', -'mw_math_mathml' => 'MathML (experimentell)', # Math errors 'math_failure' => 'Parser-Fahler', @@ -2298,8 +1941,6 @@ Olle Transwiki-Import-Aksjonna waan eim [[Special:Log/import|Import-Logbuch]] pr 'patrol-log-page' => 'Kontroll-Logbichl', 'patrol-log-header' => 'Dies ies doas Kontroll-Logbuch.', 'patrol-log-line' => 'hoot $1 vu „$2“ ols kontrolliert markiert $3', -'patrol-log-auto' => '(automatisch)', -'patrol-log-diff' => 'Version $1', 'log-show-hide-patrol' => 'Kontroll-Logbichl $1', # Image deletion @@ -2323,22 +1964,17 @@ Durch doas Herunderloada und Effna dar Datei koan dei Computer beschädigt waan. 'imagemaxsize' => "Maximale Bildgrieße:
    ''(fier Dateibeschreibungsseyta)''", 'thumbsize' => 'Standardgriße dar Vurschaubilder (Thumbnails):', 'widthheightpage' => '$1×$2, {{PLURAL:$3|1 Seyte|$3 Seyta}}', -'file-info' => '(Dateigreeße: $1, MIME-Typ: $2)', -'file-info-size' => '($1 × $2 Pixel, Dateigreeße: $3, MIME-Typ: $4)', +'file-info' => 'Dateigreeße: $1, MIME-Typ: $2', +'file-info-size' => '$1 × $2 Pixel, Dateigreeße: $3, MIME-Typ: $4', 'file-nohires' => 'Kenne hiehere Uffleesung vurhanda.', -'svg-long-desc' => '(SVG-Datei, Basisgreeße: $1 × $2 Pixel, Dateigreeße: $3)', +'svg-long-desc' => 'SVG-Datei, Basisgreeße: $1 × $2 Pixel, Dateigreeße: $3', 'show-big-image' => 'Version ei hieherer Uffleesung', 'show-big-image-thumb' => 'small>Greeße dar Vuroasicht: $1 × $2 Pixel', -'file-info-gif-looped' => 'Endlosschleife', -'file-info-gif-frames' => '$1 {{PLURAL:$1|Bild|Bilder}}', # Special:NewFiles -'newimages' => 'Neue Dateien', 'imagelisttext' => "Hier ies anne Liste vu '''$1''' {{PLURAL:$1|Datei|Dateien}}, sortiert $2.", 'newimages-summary' => 'Diese Spezialseyte zeigt de zuletzt huchgeloadena Dateien oa.', -'newimages-legend' => 'Filter', 'newimages-label' => 'Dateinoame (oder a Teel davon):', -'showhidebots' => '(Bots $1)', 'noimages' => 'Kenne Dateien gefunda.', 'ilsubmit' => 'Sucha', 'bydate' => 'noach Datum', @@ -2365,134 +2001,64 @@ Darauf folgende Seitalinks ei derselba Zeile definiera Ausnahma, ei deren Kontex * focallength', # EXIF tags -'exif-imagewidth' => 'Breite', 'exif-imagelength' => 'Länge', 'exif-bitspersample' => 'Bits pro Forbkomponente', 'exif-compression' => 'Oart dar Kompression', 'exif-photometricinterpretation' => 'Pixelzusommasetzung', -'exif-orientation' => 'Kameraausrichtung', 'exif-samplesperpixel' => 'Oazoahl Komponenten', -'exif-planarconfiguration' => 'Datenausrichtung', 'exif-ycbcrsubsampling' => 'Subsampling Rate vu Y bis C', -'exif-ycbcrpositioning' => 'Y und C Positionierung', 'exif-xresolution' => 'Horizontale Ufflesung', 'exif-yresolution' => 'Vertikale Ufflesung', 'exif-resolutionunit' => 'Maßeinheet dar Ufflesung', -'exif-stripoffsets' => 'Bilddaten-Versatz', 'exif-rowsperstrip' => 'Oazoahl Zeila pro Streifa', 'exif-stripbytecounts' => 'Bytes pro komprimiertem Streifa', -'exif-jpeginterchangeformat' => 'Offset zu JPEG SOI', 'exif-jpeginterchangeformatlength' => 'Griße dar JPEG-Daten ei Bytes', 'exif-transferfunction' => 'Iebertragungsfunksjonn', 'exif-whitepoint' => 'Manuell miet Messung', 'exif-primarychromaticities' => 'Primäre Forboart', -'exif-ycbcrcoefficients' => 'YCbCr-Koeffizienten', 'exif-referenceblackwhite' => 'Schworz/Weeß-Referenzpunkte', -'exif-datetime' => 'Speicherzeitpunkt', 'exif-imagedescription' => 'Bildtittel', -'exif-make' => 'Hersteller', -'exif-model' => 'Modell', -'exif-software' => 'Software', 'exif-artist' => 'Fotogroaf', -'exif-copyright' => 'Urheberrechte', -'exif-exifversion' => 'Exif-Version', 'exif-flashpixversion' => 'understitzte Flashpix-Version', 'exif-colorspace' => 'Forbraum', -'exif-componentsconfiguration' => 'Bedeutung einzelner Komponenten', -'exif-compressedbitsperpixel' => 'Komprimierte Bits pro Pixel', 'exif-pixelydimension' => 'Giltige Bildbreite', 'exif-pixelxdimension' => 'Giltige Bildhiehe', 'exif-makernote' => 'Herstallernotiz', 'exif-usercomment' => 'Nutzerkommentare', 'exif-relatedsoundfile' => 'Zugehierige Tondatei', -'exif-datetimeoriginal' => 'Erfassungszeitpunkt', -'exif-datetimedigitized' => 'Digitalisierungszeitpunkt', -'exif-subsectime' => 'Speicherzeitpunkt (1/100 s)', -'exif-subsectimeoriginal' => 'Erfassungszeitpunkt (1/100 s)', -'exif-subsectimedigitized' => 'Digitalisierungszeitpunkt (1/100 s)', -'exif-exposuretime' => 'Belichtungsdauer', 'exif-exposuretime-format' => '$1 Sekunda ($2)', -'exif-fnumber' => 'Blende', -'exif-exposureprogram' => 'Belichtungsprogramm', -'exif-spectralsensitivity' => 'Spectral Sensitivity', -'exif-isospeedratings' => 'Film- oder Sensorempfindlichkeit (ISO)', -'exif-oecf' => 'Optoelektronischer Umrechnungsfaktor', -'exif-shutterspeedvalue' => 'Belichtungszeitwert', -'exif-aperturevalue' => 'Blendenwert', -'exif-brightnessvalue' => 'Helligkeitswert', -'exif-exposurebiasvalue' => 'Belichtungsvorgabe', 'exif-maxaperturevalue' => 'Grießte Blende', -'exif-subjectdistance' => 'Entfernung', 'exif-meteringmode' => 'Messverfoahrn', -'exif-lightsource' => 'Lichtquelle', -'exif-flash' => 'Blitz', -'exif-focallength' => 'Brennweite', -'exif-subjectarea' => 'Bereich', -'exif-flashenergy' => 'Blitzstärke', -'exif-spatialfrequencyresponse' => 'Spatial-Frequenz', 'exif-focalplanexresolution' => 'Sensorufflesung hurizuntal', 'exif-focalplaneyresolution' => 'Sensorufflesung vertikal', 'exif-focalplaneresolutionunit' => 'Einheet dar Sensorufflesung', 'exif-subjectlocation' => 'Motivstandurt', -'exif-exposureindex' => 'Belichtungsindex', -'exif-sensingmethod' => 'Messmethode', 'exif-filesource' => 'Quelle dar Datei', 'exif-scenetype' => 'Szenatyp', -'exif-cfapattern' => 'CFA-Muster', 'exif-customrendered' => 'Nutzerdefinierte Bildveroarbeetung', -'exif-exposuremode' => 'Belichtungsmodus', 'exif-whitebalance' => 'Weeßabgleich', -'exif-digitalzoomratio' => 'Digitalzoom', 'exif-focallengthin35mmfilm' => 'Brennweite (Kleenbildäquivalent)', 'exif-scenecapturetype' => 'Uffnahmeoart', -'exif-gaincontrol' => 'Verstärkung', -'exif-contrast' => 'Kontrast', -'exif-saturation' => 'Sättigung', -'exif-sharpness' => 'Schärfe', 'exif-devicesettingdescription' => 'Geräteeinstallung', -'exif-subjectdistancerange' => 'Motiventfernung', -'exif-imageuniqueid' => 'Bild-ID', -'exif-gpsversionid' => 'GPS-Tag-Version', -'exif-gpslatituderef' => 'nördl. oder südl. Breite', -'exif-gpslatitude' => 'Geografische Breite', -'exif-gpslongituderef' => 'östl. oder westl. Länge', -'exif-gpslongitude' => 'Geografische Länge', 'exif-gpsaltituderef' => 'Bezugshiehe', 'exif-gpsaltitude' => 'Hiehe', -'exif-gpstimestamp' => 'GPS-Zeit', 'exif-gpssatellites' => 'Fier de Messung benutzte Satelliten', -'exif-gpsstatus' => 'Empfängerstatus', 'exif-gpsmeasuremode' => 'Messverfoahrn', -'exif-gpsdop' => 'Maßpräzision', 'exif-gpsspeedref' => 'Geschwindigkeitseinheet', -'exif-gpsspeed' => 'Geschwindigkeit des GPS-Empfängers', 'exif-gpstrackref' => 'Referenz fier Bewegungsrichtung', -'exif-gpstrack' => 'Bewegungsrichtung', 'exif-gpsimgdirectionref' => 'Referenz fier de Ausrichtung des Bildes', -'exif-gpsimgdirection' => 'Bildrichtung', 'exif-gpsmapdatum' => 'Geodätisches Datum nutzt', 'exif-gpsdestlatituderef' => 'Referenz fier de Breite', -'exif-gpsdestlatitude' => 'Breite', 'exif-gpsdestlongituderef' => 'Referenz fier de Länge', -'exif-gpsdestlongitude' => 'Länge', 'exif-gpsdestbearingref' => 'Referenz fier Motivrichtung', -'exif-gpsdestbearing' => 'Motivrichtung', 'exif-gpsdestdistanceref' => 'Referenz fier de Motiventfernung', -'exif-gpsdestdistance' => 'Motiventfernung', 'exif-gpsprocessingmethod' => 'Noame des GPS-Verfahras', 'exif-gpsareainformation' => 'Noame des GPS-Gebietes', -'exif-gpsdatestamp' => 'GPS-Datum', -'exif-gpsdifferential' => 'GPS-Differentialkorrektur', - -# EXIF attributes -'exif-compression-1' => 'Unkomprimiert', 'exif-unknowndate' => 'Unbekenntes Datum', -'exif-orientation-1' => 'Normal', 'exif-orientation-2' => 'Hurizuntal gespiegelt', 'exif-orientation-3' => 'Im 180° gedreht', -'exif-orientation-4' => 'Vertikal gespiegelt', 'exif-orientation-5' => 'Entgegen damm Seegerzeigersinn im 90° gedreht und vertikal gespiegelt', 'exif-orientation-6' => 'Im 90° eim Seegerzeigersinn gedreht', 'exif-orientation-7' => 'Im 90° eim Seegerzeigersinn gedreht und vertikal gespiegelt', @@ -2504,43 +2070,24 @@ Darauf folgende Seitalinks ei derselba Zeile definiera Ausnahma, ei deren Kontex 'exif-componentsconfiguration-0' => 'Existiert ne', 'exif-exposureprogram-0' => 'Unbekennt', -'exif-exposureprogram-1' => 'Manuell', -'exif-exposureprogram-2' => 'Standardprogramm', -'exif-exposureprogram-3' => 'Zeitautomatik', -'exif-exposureprogram-4' => 'Blendenautomatik', 'exif-exposureprogram-5' => 'Kreativprogramm miet Bevorzugung huher Schärfentiefe', 'exif-exposureprogram-6' => "Aksjonn-Programm miet Bevorzugung a'r kurza Belichtungszeit", -'exif-exposureprogram-7' => 'Portrait-Programm', 'exif-exposureprogram-8' => 'Landschoftsuffnahma', -'exif-subjectdistance-value' => '$1 Meter', - 'exif-meteringmode-0' => 'Unbekennt', -'exif-meteringmode-1' => 'Durchschnittlich', -'exif-meteringmode-2' => 'Mittenzentriert', -'exif-meteringmode-3' => 'Spotmessung', 'exif-meteringmode-4' => 'Mehfachspotmessung', -'exif-meteringmode-5' => 'Muster', 'exif-meteringmode-6' => 'Bildteel', 'exif-meteringmode-255' => 'Unbekennt', -'exif-lightsource-0' => 'Unbekennt', -'exif-lightsource-1' => 'Taageslicht', -'exif-lightsource-2' => 'Fluoreszierend', -'exif-lightsource-3' => 'Glihlompe', -'exif-lightsource-4' => 'Blitz', -'exif-lightsource-9' => 'Schie Waater', -'exif-lightsource-10' => 'Bewelkt', -'exif-lightsource-11' => 'Schoatta', -'exif-lightsource-12' => 'Tageslicht fluoreszierend (D 5700–7100 K)', -'exif-lightsource-13' => 'Tagesweeß fluoreszierend (N 4600–5400 K)', -'exif-lightsource-14' => 'Kaltweeß fluoreszierend (W 3900–4500 K)', -'exif-lightsource-15' => 'Weeß fluoreszierend (WW 3200–3700 K)', -'exif-lightsource-17' => 'Standardlicht A', -'exif-lightsource-18' => 'Standardlicht B', -'exif-lightsource-19' => 'Standardlicht C', -'exif-lightsource-24' => 'ISO Studio Kunstlicht', -'exif-lightsource-255' => 'Andere Lichtquelle', +'exif-lightsource-0' => 'Unbekennt', +'exif-lightsource-1' => 'Taageslicht', +'exif-lightsource-3' => 'Glihlompe', +'exif-lightsource-9' => 'Schie Waater', +'exif-lightsource-10' => 'Bewelkt', +'exif-lightsource-11' => 'Schoatta', +'exif-lightsource-13' => 'Tagesweeß fluoreszierend (N 4600–5400 K)', +'exif-lightsource-14' => 'Kaltweeß fluoreszierend (W 3900–4500 K)', +'exif-lightsource-15' => 'Weeß fluoreszierend (WW 3200–3700 K)', # Flash modes 'exif-flash-fired-0' => 'kee Blitz', @@ -2550,83 +2097,32 @@ Darauf folgende Seitalinks ei derselba Zeile definiera Ausnahma, ei deren Kontex 'exif-flash-return-3' => 'Reflexion des Blitz festgestallt', 'exif-flash-mode-1' => 'erzwungenes Blitza', 'exif-flash-mode-2' => 'Blitz obgeschaltet', -'exif-flash-mode-3' => 'Automatik', 'exif-flash-function-1' => 'Kenne Blitzfunksjonn', -'exif-flash-redeye-1' => 'Rotaugen Reduktion', - -'exif-focalplaneresolutionunit-2' => 'Zoll', -'exif-sensingmethod-1' => 'Undefiniert', 'exif-sensingmethod-2' => 'Ein-Chip-Forbsensor', 'exif-sensingmethod-3' => 'Zwee-Chip-Forbsensor', 'exif-sensingmethod-4' => 'Drei-Chip-Forbsensor', 'exif-sensingmethod-5' => 'Forbraum sequentiell Sensor', -'exif-sensingmethod-7' => 'Trilinearer Sensor', 'exif-sensingmethod-8' => 'Forbraum linear sequentieller Sensor', -'exif-scenetype-1' => 'Normal', - -'exif-customrendered-0' => 'Standard', 'exif-customrendered-1' => 'Nutzerdefiniert', -'exif-exposuremode-0' => 'Automatische Belichtung', -'exif-exposuremode-1' => 'Manuelle Belichtung', -'exif-exposuremode-2' => 'Belichtungsreihe', - -'exif-whitebalance-0' => 'Automatisch', -'exif-whitebalance-1' => 'Manuell', - -'exif-scenecapturetype-0' => 'Standard', 'exif-scenecapturetype-1' => 'Landschoft', -'exif-scenecapturetype-2' => 'Portrait', 'exif-scenecapturetype-3' => 'Noachtszene', 'exif-gaincontrol-0' => 'Keene', -'exif-gaincontrol-1' => 'Gering', -'exif-gaincontrol-2' => 'High gain up', -'exif-gaincontrol-3' => 'Low gain down', -'exif-gaincontrol-4' => 'High gain down', -'exif-contrast-0' => 'Normal', 'exif-contrast-1' => 'Schwoch', 'exif-contrast-2' => 'Stork', -'exif-saturation-0' => 'Normal', -'exif-saturation-1' => 'Gering', 'exif-saturation-2' => 'Huch', -'exif-sharpness-0' => 'Normal', -'exif-sharpness-1' => 'Gering', 'exif-sharpness-2' => 'Stork', 'exif-subjectdistancerange-0' => 'Unbekennt', -'exif-subjectdistancerange-1' => 'Makro', -'exif-subjectdistancerange-2' => 'Nah', -'exif-subjectdistancerange-3' => 'Entfernt', - -# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef -'exif-gpslatitude-n' => 'nördl. Breite', -'exif-gpslatitude-s' => 'südl. Breite', -# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef -'exif-gpslongitude-e' => 'östl. Länge', -'exif-gpslongitude-w' => 'westl. Länge', - -'exif-gpsstatus-a' => 'Messung läuft', 'exif-gpsstatus-v' => 'Interoperabilität vu Messunga', -'exif-gpsmeasuremode-2' => '2-dimensionale Messung', -'exif-gpsmeasuremode-3' => '3-dimensionale Messung', - -# Pseudotags used for GPSSpeedRef -'exif-gpsspeed-k' => 'km/h', -'exif-gpsspeed-m' => 'mph', -'exif-gpsspeed-n' => 'Knoten', - -# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef -'exif-gpsdirection-t' => 'Tatsächliche Richtung', -'exif-gpsdirection-m' => 'Magnetische Richtung', - # External editor support 'edit-externally' => 'Diese Datei miet eenem externen Programm beorbeeta', 'edit-externally-help' => '(Siehe de [http://www.mediawiki.org/wiki/Manual:External_editors Installationsanweisunga] fier weitere Informationa)', @@ -2646,7 +2142,6 @@ Darauf folgende Seitalinks ei derselba Zeile definiera Ausnahma, ei deren Kontex 'confirmemail_pending' => "Is wurde dir bereits a Bestätigungscode per E-Mail zugeschickt. Wenn du dei Nutzerkonto erscht vur kurzem erstallt host, warte bitte noo a poar Minuta uff de E-Mail, bevor du an'n neua Code anforderst.", 'confirmemail_send' => 'Bestätigungscode zuschicka', -'confirmemail_sent' => 'Bestätigungs-E-Mail wurde verschickt.', 'confirmemail_oncreate' => 'A Bestätigungs-Code wurde oa denne E-Mail-Atresse gesandt. Dieser Code werd fier de Oameldung ne benetigt, jedoch werd ar zer Aktivierung dar E-Mail-Funksjonna innerhalb des Wikis gebraucht.', 'confirmemail_sendfailed' => '{{SITENAME}} konnte de Bestätigungs-E-Mail ne oa diech versenda. Bitte priefe de E-Mail-Atresse uff ungiltige Zeecha. @@ -2686,7 +2181,6 @@ Dieser Bestätigungscode ies giltig bis $6, $7 Seeger.', 'trackbackbox' => 'Trackbacks fier diese Seyte:
    $1', 'trackbackremove' => '([$1 läscha])', -'trackbacklink' => 'Trackback', 'trackbackdeleteok' => 'Trackback wurde erfolgreich geläscht.', # Delete conflict @@ -2698,14 +2192,12 @@ Bitte bestätige, doß du diese Seyte wirklich neu erstalla mechta.", 'recreate' => 'Erneut oalähn', # action=purge -'confirm_purge_button' => 'OK', 'confirm-purge-top' => 'Diese Seyte aus damm Server-Cache läscha?', 'confirm-purge-bottom' => "Laart dann Cache a'r Seyte und erzwingt de Oazeige dar aktuella Version.", # Multipage image navigation 'imgmultipageprev' => '← vurherige Seyte', 'imgmultipagenext' => 'nächste Seyte →', -'imgmultigo' => 'OK', 'imgmultigoto' => 'Gieh zo Seyte $1', # Table pager @@ -2748,11 +2240,9 @@ Bitte bestätige, doß du diese Seyte wirklich neu erstalla mechta.", 'watchlistedit-raw-explain' => 'Dies sein de Einträge denner Beobachtungsliste eim Listenfurmat. De Einträge kinna zeilaweise geläscht oder hinzugefiegt waan. Pro Zeile ies a Eintrag erlaubt. Wenn du fattig best, klicke uff „Beobachtungsliste speichern“. Du koast au de [[Special:Watchlist/edit|Standard-Beoarbeetungsseyte]] benutza.', -'watchlistedit-raw-titles' => 'Einträge:', 'watchlistedit-raw-submit' => 'Beobachtungsliste speichern', 'watchlistedit-raw-done' => 'Denne Beobachtungsliste wurde gespeichert.', 'watchlistedit-raw-added' => '{{PLURAL:$1|1 Eintrag wurde|$1 Einträge wurden}} hinzugefiegt:', -'watchlistedit-raw-removed' => '{{PLURAL:$1|1 Eintrag wurde|$1 Einträge wurden}} entfernt:', # Watchlist editing tools 'watchlisttools-view' => 'Beobachtungsliste: Änneronga', @@ -2764,13 +2254,8 @@ Du koast au de [[Special:Watchlist/edit|Standard-Beoarbeetungsseyte]] benutza.', 'duplicate-defaultsort' => 'Ochtiche: Dar Sortierungsschlissel „$2“ ieberschreibt dann vorher verwendeta Schlissel „$1“.', # Special:Version -'version' => 'Version', -'version-extensions' => 'Installierte Erweiterungen', 'version-specialpages' => 'Spezialseyta', -'version-parserhooks' => 'Parser-Hooks', -'version-variables' => 'Variablen', 'version-other' => 'Oanderes', -'version-mediahandlers' => 'Medien-Handler', 'version-hooks' => "Schnittstalla ''(Hooks)''", 'version-extension-functions' => 'Funksjonnsuffruffe', 'version-parser-extensiontags' => "Parser-Erweiterunga ''(tags)''", @@ -2778,22 +2263,14 @@ Du koast au de [[Special:Watchlist/edit|Standard-Beoarbeetungsseyte]] benutza.', 'version-skin-extension-functions' => 'Skin-Erweiterungs-Funksjonna', 'version-hook-name' => 'Schnittstallanoame', 'version-hook-subscribedby' => 'Uffruff vu', -'version-version' => '(Version $1)', -'version-license' => 'Lizenz', -'version-software' => 'Installierte Software', -'version-software-product' => 'Produkt', -'version-software-version' => 'Version', # Special:FilePath -'filepath' => 'Dateipfad', -'filepath-page' => 'Datei:', 'filepath-submit' => 'Pfad sucha', 'filepath-summary' => 'Miet dieser Spezialseyte lässt siech dar komplette Pfad dar aktuella Version einer Datei ohne Umweg obfroaga. De oagefroagte Datei werd direkt dargestallt bzw. miet der verkniepfta Oawendung gestartet. De Eengabe muuß ohne dann Zusatz „{{ns:file}}:“ erfolga.', # Special:FileDuplicateSearch -'fileduplicatesearch' => 'Datei-Duplikat-Suche', 'fileduplicatesearch-summary' => 'Siche noach Datei-Duplikaten uff Basis ihres Hash-Wertes. De Eengabe muuß ohne dann Zusatz „{{ns:file}}:“ erfolga.', @@ -2805,22 +2282,19 @@ De Eengabe muuß ohne dann Zusatz „{{ns:file}}:“ erfolga.', 'fileduplicatesearch-result-n' => 'De Datei „$1“ hoot {{PLURAL:$2|1 identisches Duplikat|$2 identische Duplikate}}.', # Special:SpecialPages -'specialpages' => 'Spezialseyta', -'specialpages-note' => '---- +'specialpages' => 'Spezialseyta', +'specialpages-note' => '---- * Spezialseyta fier Jedermoan * Spezialseyta fier Nutzer miet erweiterta Rechta', -'specialpages-group-maintenance' => 'Wartungslisten', -'specialpages-group-other' => 'Andere Spezialseyta', -'specialpages-group-login' => 'Oamelda', -'specialpages-group-changes' => 'Letzte Änderunga und Logbicher', -'specialpages-group-media' => 'Media', -'specialpages-group-users' => 'Benutzer on Rechte', -'specialpages-group-highuse' => 'Häufig benutzte Seyta', -'specialpages-group-pages' => 'Lista vu Seyta', -'specialpages-group-pagetools' => 'Seytawerkzeuge', -'specialpages-group-wiki' => 'Systemdaten und Werkzeuge', -'specialpages-group-redirects' => 'Weiterleitende Spezialseyta', -'specialpages-group-spam' => 'Spam-Werkzeuge', +'specialpages-group-other' => 'Andere Spezialseyta', +'specialpages-group-login' => 'Oamelda', +'specialpages-group-changes' => 'Letzte Änderunga und Logbicher', +'specialpages-group-media' => 'Media', +'specialpages-group-users' => 'Benutzer on Rechte', +'specialpages-group-highuse' => 'Häufig benutzte Seyta', +'specialpages-group-pages' => 'Lista vu Seyta', +'specialpages-group-pagetools' => 'Seytawerkzeuge', +'specialpages-group-redirects' => 'Weiterleitende Spezialseyta', # Special:BlankPage 'blankpage' => 'Laare Seyte', @@ -2837,13 +2311,12 @@ De Eengabe muuß ohne dann Zusatz „{{ns:file}}:“ erfolga.', #Fragmente regulärer Ausdricke noach dieser Zeile eintraga. Diese Zeile ne verändern", # Special:Tags -'tags' => 'Giltige Änderungsmarkierungn', -'tag-filter-submit' => 'Filter', -'tags-title' => 'Markierunga', -'tags-intro' => 'Diese Seyte zeigt olle Markierunga, de fier Beoarbeetunga verwendet waan, suwie deren Bedeutung.', -'tags-tag' => 'Markierungsnoame', -'tags-edit' => 'beoarbeeta', -'tags-hitcount' => '$1 {{PLURAL:$1|Änderung|Änderunga}}', +'tags' => 'Giltige Änderungsmarkierungn', +'tags-title' => 'Markierunga', +'tags-intro' => 'Diese Seyte zeigt olle Markierunga, de fier Beoarbeetunga verwendet waan, suwie deren Bedeutung.', +'tags-tag' => 'Markierungsnoame', +'tags-edit' => 'beoarbeeta', +'tags-hitcount' => '$1 {{PLURAL:$1|Änderung|Änderunga}}', # Database error messages 'dberr-header' => 'Dieses Wiki hoot a Problem', diff --git a/languages/messages/MessagesSma.php b/languages/messages/MessagesSma.php index bad581d9..8b635505 100644 --- a/languages/messages/MessagesSma.php +++ b/languages/messages/MessagesSma.php @@ -205,7 +205,7 @@ $messages = array( # Login and logout pages 'yourname' => 'Nuhtjiennomme:', 'yourpassword' => 'Loevesbaakoe:', -'remembermypassword' => 'Måjhtije mov loggesïjse nille dïhte daatovre', +'remembermypassword' => 'Måjhtije mov loggesïjse nille dïhte daatovre (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Dov domäne:', 'login' => 'Logge sïjse', 'nav-login-createaccount' => 'Logge sïjse / skaepede nuhtjien', @@ -290,9 +290,6 @@ Gïemhpes logge sïjse vihth männgan datne åtna låhka dïhte.', 'copyrightwarning' => "Tjaeleste gaajhke värrhtoedimmieh gåajkoe {{SITENAME}} lea ahte gïehtjele goh maam buektedh nuelesne $2 (vuajna $1 ihke detaaljeh). Bïjre datne ijje sïjhtedh dov tjaalege galka värrhtoedimmieh jallh kåpieeres minngesne jeatjebh daerpies voete, galka datne ijje tjaala daesnie.
    Datne luhpede mijjieh aaj datne tjaala tjaalege jïjtje, jallh kåpieeret raejeste gaaltjie goh ijje vaarjele dejstie bäjjesereaktah, jallh plïerehke.
    '''LISSEHTE IJJE OLKESE BÄJJESEREAKTAHVAARJELE ÏEBNE NAMHTAH LUHPIE!'''", -'longpagewarning' => "'''VAAROEHTIDH: Dïhte bielie lea $1 kilobyteh guhkie; såemies -gaskeviermie-låhkoeh åtna tsagkeseh värrhtoedimmie bielih stoerre jallh guhkies enn 32 kb. -Joekedidh värrhtoedimmie sïjse unnebe sektiovneh.'''", 'templatesused' => '{{PLURAL:$1|Maal|Maler}}Maaleh nuhtjie nille dïhte bielie:', 'templatesusedpreview' => '{{PLURAL:$1|Maal|Maaleh}} nuhtjie sïjse dïhte åvte-vuesiehtidh:', 'template-protected' => '(vaarjeleme)', @@ -555,7 +552,6 @@ Dov dorje värrhtoedimmie gååvnese bielieh, jallh [[Special:UserLogin|logge s # Watchlist 'watchlist' => 'Mov sïektjedhlästoe', 'mywatchlist' => 'Mov sïektjedhlästoe', -'watchlistfor' => "(ihke '''$1''')", 'addedwatch' => 'Lissiehtidh gåajkoe sïektjedhlästoe', 'removedwatch' => 'Sihkojuvvon raejeste sïektjedhlästoe', 'removedwatchtext' => 'Bielie "[[:$1]]" lea sihkojuvvon raejeste [[Special:Watchlist|dov sïektjedhlästoe]].', @@ -785,10 +781,10 @@ Gïemhpes veeljeme jeatjebh nomme.', 'nextdiff' => 'Minngebe joekehts →', # Media information -'file-info' => '(baalka stoerre: $1, MIME-vuekie: $2)', -'file-info-size' => '($1 × $2 pixel, baalka stoerre: $3, MIME-vuekie: $4)', +'file-info' => 'baalka stoerre: $1, MIME-vuekie: $2', +'file-info-size' => '$1 × $2 pixel, baalka stoerre: $3, MIME-vuekie: $4', 'file-nohires' => 'Ijje jïlle bäjjeselöösninge jaksoes.', -'svg-long-desc' => '(SVG baalka, maadth-stoerre $1 × $2 pixel, baalka stoerre: $3)', +'svg-long-desc' => 'SVG baalka, maadth-stoerre $1 × $2 pixel, baalka stoerre: $3', 'show-big-image' => 'Dïeves stoerre', 'show-big-image-thumb' => 'Stoerre ihke dïhte vuesiehtidh: $1 × $2 pixel', diff --git a/languages/messages/MessagesSn.php b/languages/messages/MessagesSn.php index 866bd47f..9b7a4256 100644 --- a/languages/messages/MessagesSn.php +++ b/languages/messages/MessagesSn.php @@ -94,7 +94,7 @@ Usakanganwe kuchinga [[Special:Preferences|mapreferences ako {{SITENAME}}]].', 'yourname' => 'Zita:', 'yourpassword' => 'Password:', 'yourpasswordagain' => 'Nyorazve password:', -'remembermypassword' => 'Ndiyeuke', +'remembermypassword' => 'Ndiyeuke (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'Gamuchirwa', 'userlogin' => 'Gamuchirwa / Gadzira Akaunzi', 'logout' => 'Chibuda', diff --git a/languages/messages/MessagesSo.php b/languages/messages/MessagesSo.php index a8738519..fc9ea2d7 100644 --- a/languages/messages/MessagesSo.php +++ b/languages/messages/MessagesSo.php @@ -14,49 +14,48 @@ $messages = array( # User preference toggles -'tog-underline' => 'Hoos ka calaamaday linkyada:', +'tog-underline' => 'Linkiga hoos ka calaamadeysan:', 'tog-highlightbroken' => 'Wax ka bedel linkiyada halaabay Sidaan oo kale (alternative: sidaan oo kale?).', 'tog-justify' => 'Geesdhig baaragaraafyada', -'tog-hideminor' => 'Qari wax ka bedelka yar ee isbedelada dhow', +'tog-hideminor' => 'Qari bedelada yar ee isbedelada dhow', 'tog-hidepatrolled' => 'Qari wax bedelkii ugu danbeeyay oo la waardiyeeyay', 'tog-newpageshidepatrolled' => 'Ka qari maqaalada la waardiyeeyay maqaalada kale ee cusub', 'tog-extendwatchlist' => "Balaari liiska waardiyeyska si loo arko isbedelada la'xiriira, ma ahan kaliya kuwa cusub", 'tog-usenewrc' => "Isticmaal isbdelada dhowdhow oo la'horumariyey (waxaa loo baahanyahay JavaScript)", 'tog-numberheadings' => 'Lambarada automaatik ahaan u tirinaayo Cinwaanada', -'tog-showtoolbar' => 'Itusi qalabka shaqada ee wax ka bedelka (waxaa loo baahanyahay JavaScript)', +'tog-showtoolbar' => 'Itus bedelka qalabka shaqada (waxaa loo baahanyahay JavaScript)', 'tog-editondblclick' => 'wax ka bedel maqaalada labo jeer la riixay (waxaa loo baahanyahay JavaScript)', 'tog-editsection' => 'Fasax wax ka bedelida cutubyada dhinaca linkiyada [wax ka bedel]', 'tog-editsectiononrightclick' => 'Fasax cutub wax ka bedelida hadii batoonka midig ee dooliga
    dhag lagu siiyo cinwaanka korkiisa (JavaScript)', -'tog-showtoc' => "I'tus bogga cinwaanada (boggaga leh in kabada 3 cinwaan)", -'tog-rememberpassword' => 'Kumbuyuutarkaan ku xasuusnaaw gudagaleyheyga', -'tog-editwidth' => 'Sanduuqa wax ka bedelka wuxuu leeyahay balaarnaan buuxda', -'tog-watchcreations' => 'Boggaga aan qoro kudar liiska-waardiyaha', -'tog-watchdefault' => 'Boggaga aan wax ka bedelo kudar liiska-waardiyaha', +'tog-showtoc' => "I'tus jadwalka (boggaga leh in kabadan 3 qoraalada sare)", +'tog-rememberpassword' => 'Kumbuyuutarkaan ku xasuusnaaw gudagalkeyga (ilaa $1 {{PLURAL:$1|maalin|maalmood}})', +'tog-watchcreations' => 'Ku dar boggaga aan aniga sameeyay liiskayga waardiyaha', +'tog-watchdefault' => 'Ku dar boggaga aan aniga wax ka bedelo liiskayga waardiyaha', 'tog-watchmoves' => 'Boggaga aan wareejiyo ku dar liiska-waardiyaha', 'tog-watchdeletion' => 'Boggaga aan tirtiro ku dar liiska-waardiyaha', 'tog-minordefault' => 'Isbedelada yaryar marwalba calaamadey', -'tog-previewontop' => "Horfiirinta kahor i'tus sanduuqa wax ka bedelida", +'tog-previewontop' => 'Itus horfiirinta kahor sanduuqa wax ka bedelida', 'tog-previewonfirst' => 'Horfiirinta itus marka ugu horeeyso oo aan wax ka bedelo', 'tog-nocache' => 'Dami browsaha maqaalada duubo', 'tog-enotifwatchlistpages' => 'E-mail ii soo dir markii oo isbedelo maqaalada ku jira liiska waardiyaheyga', 'tog-enotifusertalkpages' => 'E-mail ii soo dir markii boggayga wadahadalka oo isbedelo', -'tog-enotifminoredits' => 'Ii soo dir xataa e-mail markii isbedelo yar lagu sameeyo bogyada', +'tog-enotifminoredits' => 'E-mail Ii soo dir xataa markii bedelo yar lagu sameeyo bogyada', 'tog-enotifrevealaddr' => 'Iigu soo bandhig cinwaankayga e-mailka ah fariimaha wargelinta', 'tog-shownumberswatching' => "I'tus tirada isticmaalayaasha wax waardiyeynaayo", 'tog-oldsig' => 'itusi saxiixa jiro', 'tog-fancysig' => "u isticmaal saxiixa sida qoraalada wiki (ayada oo linki auomaatik la'aan)", 'tog-externaleditor' => "Isticmaal qoraal wax ka bedelyaal ka madaxbanaan (La'iskuogyahay)", 'tog-externaldiff' => "Isticmaal qoraal wax ka bedelyaal ka madaxbanaan oo (La'iskuogyahay)", -'tog-showjumplinks' => 'Shid "ku bood" meelaha la geli karo', +'tog-showjumplinks' => 'Shid "ku bood" links-ka la geli karo', 'tog-uselivepreview' => 'Isticmaal horfiirinta tooska ah (JavaScript) (Wuxuu ku jiraa tijaabo)', 'tog-forceeditsummary' => "I'xasuusi markii uusan qoraalkeyga raacsiisnay faahfaahin gaaban", -'tog-watchlisthideown' => 'Maqaalada aan waxka bedelay ka qari liiska waardiyaha', -'tog-watchlisthidebots' => 'Ka qari botka labedelay liiska waardiyaha', -'tog-watchlisthideminor' => 'Ka qari waxka bedelada yar liiska waardiyeynta', +'tog-watchlisthideown' => 'Ka qari wax bedelkeyga liiska waardiyaha', +'tog-watchlisthidebots' => 'Ka qari bedelada robotka liiska waardiyaha', +'tog-watchlisthideminor' => 'Ka qari bedelyada yar liiska waardiyaha', 'tog-watchlisthideliu' => 'Ka qari isbedelada ee sameeyeen isticmaalada soo gelay liiska waardiyaha', 'tog-watchlisthideanons' => 'Ka qari isbedelada ee sameeyeen isticmaalada la aqoon liiska waardiyaha', 'tog-watchlisthidepatrolled' => 'Ka qari isbedelada la waardiyeeyay liiska waardiyaha', -'tog-ccmeonemails' => 'Ii soo dir koobiga E-boostada aan u diro isticmaalayaasha kale', +'tog-ccmeonemails' => 'Ii soo dir e-mailada aan u diro isticmaalada kale oo koobi ah', 'tog-diffonly' => 'Kaladuwanaanshaha hoostooda qari qoraalka bogga', 'tog-showhiddencats' => 'Itusi ereykoobyada qarsoon', 'tog-norollbackdiff' => 'ha isticmaalin kala duwanaanshaha markii aad dib u soo celisay kadib', @@ -89,7 +88,7 @@ $messages = array( 'february' => 'Febraayo', 'march' => 'Maarso', 'april' => 'Abriil', -'may_long' => 'Maajo', +'may_long' => 'May', 'june' => 'Juun', 'july' => 'Luuliyo', 'august' => 'Agoosto', @@ -101,7 +100,7 @@ $messages = array( 'february-gen' => 'Febraayo', 'march-gen' => 'Maarso', 'april-gen' => 'Abriil', -'may-gen' => 'Maajo', +'may-gen' => 'May', 'june-gen' => 'Juun', 'july-gen' => 'Luuliyo', 'august-gen' => 'Agoosto', @@ -113,7 +112,7 @@ $messages = array( 'feb' => 'Feb', 'mar' => 'Maar', 'apr' => 'Abr', -'may' => 'Maj', +'may' => 'May', 'jun' => 'Juun', 'jul' => 'Luu', 'aug' => 'Ago', @@ -126,10 +125,10 @@ $messages = array( 'pagecategories' => '{{PLURAL:$1|Qeybta|Qeybaha}}', 'category_header' => 'Maqaalada ku jirta qeybta "$1"', 'subcategories' => 'Qeybaha hoose', -'category-media-header' => 'war saxaafadeeda ku jirta qeybta"$1"', +'category-media-header' => 'Wararka ku jiro qeybta"$1"', 'category-empty' => "''Qeybtaan hadda wax maqaal ah kuma jirto''", 'hidden-categories' => '{{PLURAL:$1|Qeybta qarsan|Qeybaha qarsan}}', -'hidden-category-category' => 'Qeybta qarsoon', +'hidden-category-category' => 'Qeybaha qarsoon', 'category-subcat-count' => '{{PLURAL:$2|Qeybtaan hadda waxaa ku jirto oo kaliya qeybtaan hoose.|Qeybtaan waxaa ku jirto {{PLURAL:$1|oo qeybta hoose|$1 oo ah qeybaha hoose}} waana $2 oo dhamaantood ah.}}', 'category-subcat-count-limited' => 'Qeybtaan waxaa ku jirto {{PLURAL:$1| oo ah qeybta hoose|$1 oo ah qeybaha hoose}}.', 'category-article-count' => '{{PLURAL:$2|Qeybtaan waxaa ku jirto intaan oo maqaal kaliya.| waxaa meeshaan ku jirto {{PLURAL:$1| oo maqaal|$1 oo maqaalo ah}} waxeena ku jiraan qeybtaan, waana $2 oo dhamaantood ah.}}', @@ -147,20 +146,20 @@ $messages = array( * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", -'about' => 'Warbixin', +'about' => 'Ku saabsan', 'article' => 'Maqaalada kooban', 'newwindow' => '(dariishad cusub aa furmeeyso)', 'cancel' => 'iska xir', 'moredotdotdot' => 'wax kale', 'mypage' => 'Boggeyga', 'mytalk' => 'Wadahadalkeyga', -'anontalk' => 'Wadahadalka IP:gan', -'navigation' => 'Navigation', +'anontalk' => 'Wadahadalka ciwaanka IP:kaan', +'navigation' => 'Jihada', 'and' => ' iyo', # Cologne Blue skin 'qbfind' => 'Raadi', -'qbbrowse' => 'Ka dhax raadi', +'qbbrowse' => 'Ka soo raadi', 'qbedit' => 'Wax ka bedel', 'qbpageoptions' => 'Boggaan', 'qbpageinfo' => 'isku xiran', @@ -170,23 +169,24 @@ $messages = array( 'faqpage' => 'Project:SIL', # Vector skin -'vector-action-addsection' => 'Eray ku dar', -'vector-action-delete' => 'Tirtir', -'vector-action-move' => 'Wareeji', -'vector-action-protect' => 'Difaac', -'vector-action-undelete' => 'La tirtirin', -'vector-action-unprotect' => 'La difaacin', -'vector-view-create' => 'Sameey', -'vector-view-edit' => 'Wax ka bedel', -'vector-view-history' => 'Itusi taariikhda', -'vector-view-view' => 'Akhri', -'vector-view-viewsource' => 'Itusi ereykoodka', -'actions' => 'Waxa dhacaayo', -'namespaces' => 'Qeybta Magacyada', +'vector-action-addsection' => 'Hadal ku dar', +'vector-action-delete' => 'Tirtir', +'vector-action-move' => 'Wareeji', +'vector-action-protect' => 'Difaac', +'vector-action-undelete' => 'La tirtirin', +'vector-action-unprotect' => "Ha'difaacin", +'vector-simplesearch-preference' => 'Shid kuwa ugu fiican oo kuu soo jeedinaayo raadinta (Jirka vector kaliya)', +'vector-view-create' => 'Sameey', +'vector-view-edit' => 'Wax ka bedel', +'vector-view-history' => 'Itusi taariikhda', +'vector-view-view' => 'Akhri', +'vector-view-viewsource' => 'Itusi xogta', +'actions' => 'Waxa dhacaayo', +'namespaces' => 'Qeybta Magacyada', 'errorpagetitle' => 'Qalad', 'returnto' => 'Ku noqo $1.', -'tagline' => 'Ka {{SITENAME}}', +'tagline' => 'Ka socoto {{SITENAME}}', 'help' => 'Caawinaad', 'search' => 'Raadi', 'searchbutton' => 'Raadi', @@ -221,27 +221,31 @@ $messages = array( 'talk' => 'Wadahadal', 'views' => 'Muuqaalka', 'toolbox' => 'Qalabka shaqada', -'userpage' => 'Fiiri bogga isticmaalaha', -'projectpage' => 'Fiiri bogga mashruuca', -'imagepage' => 'Itusi fileka bogga', +'userpage' => 'Itus bogga isticmaalaha', +'projectpage' => 'Itus bogga mashruuca', +'imagepage' => 'Itusi faylka bogga', 'mediawikipage' => 'Fiiri bogga fariinta', 'templatepage' => 'Fiiri bogga tusmada', 'viewhelppage' => 'Fiiri bogga caawinaada', 'categorypage' => 'Itusi qeybta bogga', 'viewtalkpage' => 'Fiiri bogga wadahadalka', 'otherlanguages' => 'Luqadaha kale', -'redirectedfrom' => '(Waxaa laga soo dhiibay $1)', -'redirectpagesub' => 'Bogga la soo dhiibay', +'redirectedfrom' => '(Waxaa laga soo wareejiyay $1)', +'redirectpagesub' => 'Bogga loo wareejiyay', 'lastmodifiedat' => 'Boggan waxaa markii ugu dambeysay wax laga bedelay $2, $1.', 'viewcount' => 'Boggaan waxaa soo booqday {{PLURAL:$1|mar|$1 jeer}}.', -'protectedpage' => "Bog la'difaacay", +'protectedpage' => "Bogga la'difaacay", 'jumpto' => 'U bood:', +'jumptonavigation' => 'jihada', 'jumptosearch' => 'raadi', 'view-pool-error' => 'Naga raali noqo, kombiyutarkaan hadda woo buuxsamay. Dad badan ayaa waqtigaan xaadirka ah fiirinooyo boggaan. Fadlan sug intii aad markale ka soo gali kartid. $1', +'pool-timeout' => 'Waqtiga woo ka dhamaaday xiritaanka', +'pool-queuefull' => 'Safka shaqeenta Pool woo buuxsamay', +'pool-errorunknown' => 'Qalad la aqoon', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Ku saabsan {{SITENAME}}', @@ -264,7 +268,7 @@ $1', 'privacypage' => 'Project:siyaasada u gaarka ah', 'badaccess' => 'Qalad dhinaca ogolaashada', -'badaccess-group0' => 'Laguuma ogalaan in aad sameyso waxaad rabtid', +'badaccess-group0' => 'Laguuma ogolo in aad sameyso waxa aad rabtid', 'badaccess-groups' => 'Wixii aad na weydiisay waxaa loogu tala galay isticmaaleyaashaan u gaarka ah {{PLURAL:$2|kooxdaan|qaar ka mid ah kooxdaan}}: $1.', 'versionrequired' => 'Nuuca $1 oo MediaWiki ah aa loo baahanyahy', @@ -273,33 +277,33 @@ fiiri [[Special:Version|nooca bogga]].', 'ok' => 'waayahay', 'retrievedfrom' => 'Waxaa laga keenay "$1"', -'youhavenewmessages' => 'Waxaa kuu taala $1 ($2).', +'youhavenewmessages' => 'Waxaa heysataa $1 ($2).', 'newmessageslink' => 'Fariimaha cusub', -'newmessagesdifflink' => 'Isbedelkii ugu dambeeyay', +'newmessagesdifflink' => 'bedelkii ugu dambeeyay', 'youhavenewmessagesmulti' => '$1 waxaa kuu yaalo fariimo cusub', 'editsection' => 'Wax ka bedel', 'editold' => 'Wax ka bedel', -'viewsourceold' => 'Itusi ereykoodka', +'viewsourceold' => 'Itusi xogta', 'editlink' => 'wax ka bedel', -'viewsourcelink' => 'Itusi ereykoodka', +'viewsourcelink' => 'Itusi xogta', 'editsectionhint' => 'Wax ka bedel: $1', -'toc' => 'oo kooban', +'toc' => 'waxa ku qoran', 'showtoc' => "I'tus", 'hidetoc' => 'qari', 'thisisdeleted' => 'Fiiri ama dib u sooceli $1?', 'viewdeleted' => 'Fiiri $1?', 'restorelink' => '{{PLURAL:$1|halxabo oo bedelkii la tirtiray edit|$1 wax bedelyadii la tirtiray}}', 'feedlinks' => 'Quudinta wararka:', -'site-rss-feed' => '$1 RSS feed', +'site-rss-feed' => '$1 RSS quudiye', 'site-atom-feed' => '$1 Atom quudiye', 'page-rss-feed' => '"$1" RSS quudiye', 'page-atom-feed' => '"$1" Atom quudiye', 'red-link-title' => '$1 (Boggan wali lama qorin)', # Short words for each namespace, by default used in the namespace tab in monobook -'nstab-main' => 'Maqaal', +'nstab-main' => 'Bog', 'nstab-user' => 'Bogga isticmaalaha', -'nstab-media' => 'Bogga war saxaafadeedka', +'nstab-media' => 'Bogga wararka', 'nstab-special' => 'Bogga khaaska ah', 'nstab-project' => 'Bogga mashruuca', 'nstab-image' => 'Fayl', @@ -316,45 +320,56 @@ fiiri [[Special:Version|nooca bogga]].', Waxaa meeshaan ka heli kartaa liiska bogyaasha khaaska ah oo jiro [[Special:SpecialPages|{{int:specialpages}}]].', # General errors -'error' => 'Qalad', -'databaseerror' => 'Qalad ka dhacday database;ka', -'laggedslavemode' => 'Digniin: Waxaa lagayaabaa bogaan in uusan wax cusub ku kordhin.', -'enterlockreason' => 'Ku qor sababta loo xiraayo, kuna siidar waqtigii la soo fasaxaayo maqaalka.', -'missingarticle-diff' => '(Kala duwanaanshaha: $1, $2)', -'internalerror' => 'Qalad gudaha ah', -'fileappenderrorread' => 'Ma akhri karin "$1" markii oo ku daraayay.', -'filenotfound' => 'Ma oo san helin faylka "$1".', -'cannotdelete' => 'Boggaan ama file\'ka "$1" mala tirtiri karo. +'error' => 'Qalad', +'databaseerror' => 'Qalad ka dhacday database;ka', +'laggedslavemode' => 'Digniin: Waxaa lagayaabaa bogaan in uusan wax cusub ku soo kordhin.', +'enterlockreason' => 'Ku qor sababta loo xiraayo, kuna siidar waqtigii la soo fasaxaayo maqaalka.', +'missingarticle-diff' => '(Duwanaan: $1, $2)', +'internalerror' => 'Qalad gudaha ah', +'internalerror_info' => 'Qalad gudaha ah: $1', +'fileappenderrorread' => 'Ma akhri karin "$1" markii oo ku daraayay.', +'fileappenderror' => 'Ma ku dari karin "$1" ilaa "$2".', +'filecopyerror' => 'Ma koobi gareen karin faylka "$1" ilaa "$2".', +'filerenameerror' => 'Maka bedeli karin magaca faylka "$1" ilaa "$2".', +'filedeleteerror' => 'Ma tirtiri karin faylka "$1".', +'directorycreateerror' => 'Ma sameyn karin maktabad "$1".', +'filenotfound' => 'Ma oo san helin faylka "$1".', +'fileexistserror' => 'Ma ku qori karin faylka "$1": faylkan woo jiraa.', +'unexpected' => 'Qiimo loo maleeneenin: "$1"="$2".', +'badarticleerror' => 'Shaqadaan ma lagu sameyn karo boggaan.', +'cannotdelete' => 'Boggaan ama file\'ka "$1" mala tirtiri karo. waxaa laga yaabaa in oo qof kale tirtiray .', -'badtitle' => 'Cinwaan qaldan', -'viewsource' => 'Itusi ereykoodka', -'viewsourcefor' => ' ku socoto $1', -'actionthrottled' => 'Waala ceejiyay', -'actionthrottledtext' => 'Hadii aan ahay ka hortaga spamka, laguuma ogolo shaqadaan badan oo ku qabatay waqti sidaan u yar,waadna ku xad gudubtay halihii laguu oglolaa. +'badtitle' => 'Qoraal xun', +'viewsource' => 'Itusi xogta', +'viewsourcefor' => ' ku socoto $1', +'actionthrottled' => 'Shaqada waala ceejiyay', +'actionthrottledtext' => 'Hadii aan ahay ka hortaga spamka, laguuma ogolo shaqadaan badan oo waqti sidaan u yar ku qabatay,waadna ku xad gudubtay halihii laguu oglolaa. fadlan waxyar kadib ku soo noqo.', -'protectedpagetext' => 'Boggaan woo xiranyahay si aan wax looga bedelin.', -'viewsourcetext' => 'Waad fiirin kartaa waana koobi gareen kartaa ereykoodka boggaan', -'cascadeprotected' => 'Boggaan waxaa laga difaacay in wax laga bedelo, sababtoo ah waxoo ka midyahay {{PLURAL:$1|bog, oo ah |bogyaalo ah, waana}} kuwa laga difaacay "qoraalada kaskade" dooqyada neh waa la furay: +'protectedpagetext' => 'Boggaan waala difaacay si aan wax looga bedelin.', +'viewsourcetext' => 'Waad fiirin kartaa waana koobi gareen kartaa xogta boggaan:', +'cascadeprotected' => 'Boggaan waxaa laga difaacay in wax laga bedelo, sababtoo ah waxoo ka midyahay {{PLURAL:$1|bog, oo ah |bogyaalo ah, waana}} kuwa laga difaacay "qoraalada kaskadka ah" dooqyada woo u furanyahay: $2', -'namespaceprotected' => "Ma laguu ogolo in aad wax ka bedeshid maqaalada ku jiro '''$1''' dhinaca magacyada.", -'ns-specialprotected' => 'Bogyaasha gaarka ah wax malaga bedeli karo.', -'titleprotected' => 'Qoraalkaan aad qortay waxaa difaacay [[User:$1|$1]] si loo sameynin. +'namespaceprotected' => "Ma laguu ogolo in aad wax ka bedesho maqaalada ku jirto '''$1''' meesha magacyada.", +'customcssjsprotected' => 'Ma laguu ogolo in aad wax ka badashid boggaan, sababtoo ah waxaa ku jiro isticmaalo kale waxyaabo u shaqsi ah.', +'ns-specialprotected' => 'Bogyaasha gaarka ah wax malaga bedeli karo.', +'titleprotected' => 'Qoraalkaan aad qortay waxaa difaacay [[User:$1|$1]] si loo sameynin. Sababta neh waxaa waaye "\'\'$2\'\'".', # Virus scanner +'virus-scanfailed' => 'baaritaanka woo shaqeesmi waayay (koodka $1)', 'virus-unknownscanner' => 'ka hor tagga fayruska la aqoon:', # Login and logout pages 'logouttext' => "'''Hada waad ka baxday.''' Waad sii isticmaali kartaa {{SITENAME}} adoona lagu aqoon, ama [[Special:UserLogin|gudaha gal]] adiga oo isticmaalaya magacaagii hore ama mid ka duwan. OGEYSIIS waxaa lagayabaa bogyaasha qaarkood in ay yiraahdaan wali gudaha ayaad ku jirtaa, ilaa inta aad ka nadiifineesid browsahaaga Internetka.", -'welcomecreation' => "== Ku soo dhawoow, $1! == +'welcomecreation' => "== Soo dhawoow, $1! == Akoon kaada waa la sameeyay. -Ha' hilmaamin in aad wax ka bedesho [[Special:Preferences|{{SITENAME}} dooqaaga]].", +Ha' hilmaamin in aad wax ka bedesho [[Special:Preferences|{{SITENAME}} dooqyadaada]].", 'yourname' => 'Magaca gudagalka:', 'yourpassword' => 'Eraysir:', 'yourpasswordagain' => 'Markale qor erayga sirta ah:', -'remembermypassword' => 'Kumbuyuutarkaan ku xasuusnaaw gudagalkeyga', +'remembermypassword' => 'Kumbuyuutarkaan ku xasuusnaaw magaceyga gudagalka (ilaa $1 {{PLURAL:$1|maalin|maalmood}})', 'yourdomainname' => 'Magacaga shabakada', 'login' => 'Gudaha gal', 'nav-login-createaccount' => 'Gudaha gal / sameyso akoon', @@ -370,11 +385,12 @@ Ha' hilmaamin in aad wax ka bedesho [[Special:Preferences|{{SITENAME}} dooqaaga] 'gotaccount' => "Waan heystaa gudagale? '''$1'''.", 'gotaccountlink' => 'Gudaha gal', 'createaccountmail' => 'E-mail ahaan', +'createaccountreason' => 'Sababta:', 'badretype' => 'Ereyada sirta ah oo qortay ma islahan.', 'userexists' => 'Magaca isticmaalaha aad qortay woo jiraa. Fadlan dooro magac kale.', 'loginerror' => 'Qalad gudagalista', -'createaccounterror' => 'Ma sameen karin akoon: $1', -'nocookiesnew' => "Magaca isticmaalahaan waa la sameeyay, laakiin adiga gudaha uma gelin. +'createaccounterror' => 'Ma sameeyn karin akoon: $1', +'nocookiesnew' => "Magaca isticmaalahaan waa la sameeyay, laakiin adiga gudaha uma soo gelin. {{SITENAME}} waxoo isticmaalaa cookies si ee gudaha u galaan isticmaale yaasha. Adiga cookies'kaaga woo dansanyahay . Fadlan shid, kadib neh gudaha ku gal magacaaga cusub ee gudagalaha ah iyo ereygaaga sirta ah.", @@ -383,7 +399,7 @@ Cookies'kaaga woo dansanyahay. Fadlan shid markale neh ku noqo.", 'noname' => "Magaca gudagalaha sax ma'aha.", 'loginsuccesstitle' => 'Gudagalida waa la dhamaystiray', -'loginsuccess' => "'''Hada waxaad gudaha ugu soo gashay {{SITENAME}} sida \"\$1\".'''", +'loginsuccess' => "'''Waxaa hadda gudaha ugu soo gashay {{SITENAME}} sida \"\$1\".'''", 'nosuchuser' => 'Ma jiro isticmaalo leh magacaan "$1". Magacyada way kala waaweyn yihiin. Sax hingaada, ama [[Special:UserLogin/signup|samayso magac gudagale ah]].', @@ -396,7 +412,7 @@ Sax hingaada, ama [[Special:UserLogin/signup|samayso magac gudagale ah]].', 'password-name-match' => 'Eraygaaga sirta ah waa in oo ka badalnaadaa magacaaga gudagale', 'mailmypassword' => 'E-mail iigu soo dir ereysir cusub', 'passwordremindertitle' => 'Eraysir ku meelgaar ah oo loogu talagalay {{SITENAME}}', -'passwordremindertext' => 'Qof (laga yaabo in aad adiga tahay, kana soo galay cinwaanka-IP $1) ayaa eraysir oo cusub u codsaday {{SITENAME}} ($4). +'passwordremindertext' => 'Qof (laga yaabo in aad adiga tahay, kana soo galay cinwaanka-IP-ka $1) ayaa eraysir oo cusub u codsaday {{SITENAME}} ($4). Eraysir oo ku meelgaar ah oo loogu talagalay isticmaalaha "$2" ayaa la sameeyay waxaana loo diray "$3". Hadii uu ahaa qofka rabay, waxaa la rabaa in aad hadda gudaha u gashid isla markaas neh eraysir cusub dooratid. Eraygaan sirta oo ku meelgaarka ah waxoo dhici doonaa ilaa {{PLURAL:$5|maalin|$5 maalmood}}. @@ -404,18 +420,20 @@ Eraygaan sirta oo ku meelgaarka ah waxoo dhici doonaa ilaa {{PLURAL:$5|maalin|$ Hadii u qofkale sameeyay codsigaan, ama aad soo xasuusatay eraysirkaagii, oo aadan u baahnayn in aad bedeshid, iska ilow farriintaan siina wado eraysirkaagi hore.', 'noemail' => 'E-mailkiisa lama haayo isticmaalaha "$1".', -'noemailcreate' => 'Waa in aad ciwaan e-mail sax ah keentaa.', +'noemailcreate' => 'Waa in aad ciwaan e-mail oo sax ah keentaa.', 'passwordsent' => 'Eraysir oo cusub ayaa e-mail loogu diray isticmaalaha "$1". Fadlan gudaha u gal markii aad fariintaas heshid.', 'blocked-mailpassword' => 'Cinwaankaada IP:ka waxaa laga mamnuucay in oo wax bedelo, sidoo kale looma ogolo in oo bedelo ereyga sirta ah si oo uuga fakado danbiga lagu heesto', -'eauthentsent' => "Xaqiijin e-mail ah ayaa loo diray e-mailkan aad dooray. -Intii aadan wax e-mail ah loogu soo dirin akoon'kaada, waa in aad daba kacdaa waxa kuugu jiro e-mailka, si aad u xaqiijisid in aad e-mailka leedahay adi.", -'mailerror' => 'Waxaa dhacay qalad markii loo diraayey e-mail: $1', +'eauthentsent' => "Xaqiijin e-mail ah ayaa loo diray e-mailkan aad dooratay. +Intii aadan wax e-mail ah lagu soo dirin koontada, waa in aad daba kacdaa waxa kuugu jiro e-mailka, si aad u xaqiijisid in aad adiga leedahay akoon'ka.", +'mailerror' => 'Qalad dirida e-mailka: $1', 'acct_creation_throttle_hit' => "Dadka soo booqanaayo wiki:gaan oo isticmaalaayo cinwaankaaga IP:ka waxay sameeyeen {{PLURAL:$1|1 magac gudagale ah|$1 magac gudagalayaal ah}} maalintii ugu dambeysay, taasina waa inta ugu badan ee la'ogolyahay muddadaas. Sidaas daraadeed, booqoshadayaasha isticmaalaya cinwaankaan-IP:ka hadda ma'sameysankaraan magac gudagale danbe.", 'emailauthenticated' => 'E-mailkaada waxaa lagu xaqiijiyay $2 markey ahayd $3.', 'emailnotauthenticated' => 'Ciwaankaada e-mailka weli lama xaqiijinin. Wax e-mail ah oo ku saabsan arrimaha soo socdo looma soo diridoono.', 'emailconfirmlink' => 'Soo xaqiiji ciwaankaada e-mailka', +'invalidemailaddress' => 'e-mailkaan lama ogolaan karo ayada oo ku ku jirto format la aqoonsan.. +Fadlan ku qor ciwaan leh format sax ah ama ebar ka dhig meesha.', 'accountcreated' => "Akoon aa la'sameeyay", 'accountcreatedtext' => "Akoonka isticmaalaha $1 waa la'sameeyay.", 'createaccount-title' => 'Waxaa akoon loo sameeyay {{SITENAME}}', @@ -431,29 +449,43 @@ Fadlan waxyar sug intii aadan soo gelin.', 'resetpass' => 'Bedel ereysirka', 'resetpass_announce' => 'waxaa ku soo geshay eraysir ku meelgaar ah oo e-mail laguugu soo diray. Hadii aad rabtid in aad dhameestirtid gudagelkaaga, waa in aad meeshaan ku qortaa eraysir oo cusub:', -'resetpass_header' => 'bedel ereyga sirta ee koontada', +'resetpass_header' => 'bedel ereyga sirta ee akoon-ka', 'oldpassword' => 'Ereysirkii hore:', 'newpassword' => 'Ereysir cusub:', 'retypenew' => 'Qor mar labaad ereysirka cusub:', -'resetpass_forbidden' => 'ereyada sirka ah mala bedeli karo', +'resetpass_success' => 'Ereysirkaada si fiican oo kuugu bedelmay! +Hadda gudaha ku gal', +'resetpass_forbidden' => 'ereyada sirta ah mala bedeli karo', +'resetpass-no-info' => 'Waa in aad gudaha u gashaa hadii aad rabto in aad si toos ah ugu soo gudubto boggaan.', 'resetpass-submit-loggedin' => 'bedel ereysirka', 'resetpass-submit-cancel' => 'Iska xir', 'resetpass-temp-password' => 'Ereysir ku meel gaar ah:', # Edit page toolbar -'media_tip' => 'Linkiga file-ka', +'bold_sample' => 'Far butac ah', +'bold_tip' => 'Far butac ah', +'italic_sample' => 'Farta caatada ah', +'italic_tip' => 'Farta caatada ah', +'link_sample' => 'Qoraalka linkiga', +'headline_sample' => 'Qoraalka madaxa hore', +'nowiki_tip' => 'Iska dhagooleey formatka wiki', +'image_tip' => 'Fayl la soo galiyay', +'media_tip' => 'Linkiga file-ka', # Edit pages -'minoredit' => 'Kan waa wax ka bedel yar', -'watchthis' => 'Boggaan waardiyey', -'savearticle' => 'Bogga kaydi', -'preview' => 'Horfiiri', -'showpreview' => 'Itus horfiirinta', -'showlivepreview' => 'Horfiirin toos ah', -'showdiff' => 'Itus isbedelka', -'anoneditwarning' => "'''Digniin:''' Gudaha kuma jirtid. Cinwaankaaga IP:ga waxaa lagu diiwaangelindoonaa taariikhda bedelida bogan.", -'blockedtitle' => 'Isticmaalaha waa la mamnuucay', -'blockedtext' => "'''Magacaaga gudagalaha ama ciwaanka IP'ka waa la mamnuucay.''' +'summary' => 'Qoraal kooban:', +'minoredit' => 'Kan waa wax ka bedel yar', +'watchthis' => 'Boggaan waardiyey', +'savearticle' => 'Bogga kaydi', +'preview' => 'Horfiiri', +'showpreview' => 'Itus horfiirinta', +'showlivepreview' => 'Horfiirin toos ah', +'showdiff' => 'Itus isbedelka', +'anoneditwarning' => "'''Digniin:''' Gudaha kuma jirtid. Cinwaankaaga IP:ga waxaa lagu diiwaangelindoonaa taariikhda bedelida bogan.", +'anonpreviewwarning' => "''Ma soo gelin. Hadii aad keydisid waxaa ciwaankaada IP:ka lagu duubaa taariikhda bedelka boggaan.''", +'missingcommenttext' => 'Fadlan ku qor hoostaan hadalkaaga.', +'blockedtitle' => 'Isticmaalaha waa la mamnuucay', +'blockedtext' => "'''Magacaaga gudagalaha ama ciwaanka IP'ka waa la mamnuucay.''' Mamnuucida waxaa sameeyay $1. Sababta neh waxaa waaye ''$2''. @@ -466,49 +498,75 @@ Waxaa la xiriiri kartaa $1 ama mid ka mid ah [[{{MediaWiki:Grouppage-sysop}}|m Ma isticmaali kartid 'e-mailka isticmaalahaan' soo diray hadii aad heesato maa hinee ciwaan e-mail oo kuugu jiro [[Special:Preferences|koontadaada]] oona lagaa mamnuucin in aad isticmaasho. Ciwaankaada IP'ka waa $3, gudagalahaaga la mamnuucay neh waa #$5. fadlan ku soo dar su'aalahaaga waxa kor ku qoran.", -'blockednoreason' => 'wax sabab ah kama bixin', -'blockedoriginalsource' => "Ereykoodka '''$1''' hoos ka fiiri:", -'blockededitsource' => "Qoraalkii '''aad waxkaga bedashay''' '''$1''' waxaad ku arkikartaa hoos:", -'whitelistedittitle' => 'Waxaa loo baahanyahay gudagal si aad wax uga bedeshid', -'whitelistedittext' => 'Waa in aad $1 si aad wax uga bedeshid boggaga.', -'confirmedittext' => 'Waa in aad xaqiijisaa e-mailkaada inta aadan sameynin bogaga. +'blockednoreason' => 'wax sabab ah kama bixin', +'blockedoriginalsource' => "Xogta '''$1''' hoos aad ka arki kartaa:", +'blockededitsource' => "Qoraalkii '''aad waxkaga bedashay''' '''$1''' waxaad ku arkikartaa hoos:", +'whitelistedittitle' => 'Waxaa loo baahanyahay gudagal si aad wax uga bedeshid', +'whitelistedittext' => 'Waa in aad $1 si aad wax uga bedeshid boggaga.', +'confirmedittext' => 'Waa in aad xaqiijisaa e-mailkaada inta aadan bogaga wax ka bedelin. fadlan ku dar kuna xaqiiji e-mailkaada meesha [[Special:Preferences|dooqyada gudagalahaaga]].', -'loginreqtitle' => 'Waxaa loo baahanyahay gudagalid', -'loginreqlink' => 'Gudaha gal', -'loginreqpagetext' => 'Waa in aad $1 si aad u fiirisid bogyaasha kale.', -'accmailtitle' => "Ereysirka waa la'diray.", -'accmailtext' => 'Ereysirka "$1" waxaa loo diray $2.', -'newarticle' => '(Cusub)', -'anontalkpagetext' => "----''Meeshaan waa bogga wadahadalka isticmaalayaasha aanan la aqoonsanin oo aanan weli sameysanin akoon ama aanan weli isticmaali. Si loo kala sooco isticmaalayaasha, waa in aan isticmaalnaa lambar cinwaaneedka IP:ga. Cinwaanka IP:ga waxaa suurto gal ah in ay wada isticmaalaan dad badan. Hadii aad tahay isticmaale aanan la'aqoonsanin oo aad dareemaysid in laguu gafay, fadlan ka sameyso akoon meeshaan [[Special:UserLogin|sameyso akoon ama gudaha gal]] si aad uga dhowrsatid in laguugu qaldo isticmaalayaasha kale oo aann la'aqoonsanin.''", -'userpage-userdoesnotexist-view' => 'Isticmaalahaan "$1" lama diiwaan gelinin.', -'blocked-notice-logextract' => 'Isticmaalahaan hadda waa la mamnuucay. +'nosuchsectiontext' => 'Waxaa baroobeysay in aad wax ka bedesho maqaal jirin. +Waxaa laga yaabaa in la wareejiyay ama la tirtiray adiga oo fiirinaayo bogga.', +'loginreqtitle' => 'Waxaa loo baahanyahay gudagalid', +'loginreqlink' => 'Gudaha gal', +'loginreqpagetext' => 'Waa in aad $1 si aad u fiirisid bogyaasha kale.', +'accmailtitle' => "Ereysirka waa la'diray.", +'accmailtext' => 'Ereysirka "$1" waxaa loo diray $2.', +'newarticle' => '(Cusub)', +'newarticletext' => "Waxaa soo raacday link kula soo xiriiriyay bog oo hadda wali jirin. +Hadii aad rabto in aad sameyso bogga, hoos ka bilaaw qoraalkaada (fiiri [[{{MediaWiki:Helppage}}|bogga caawinaada]] wax war ah oo kale). +hadii aad meeshaan ku soo qaldantay, riix batoonka barowsahaaga '''gadaal uuga noqo''' .", +'anontalkpagetext' => "----''Meeshaan waa bogga wadahadalka isticmaalayaasha la aqoon oo aanan weli sameysanin akoon, ama wali isticmaalin. +Sidaas darteed, waa in aan isticmaalnaa lambar cinwaaneedka IP:ga. Cinwaanka IP:ga waxaa suurto gal ah in ay wada isticmaalaan dad badan. Hadii aad tahay isticmaale aanan la'aqoonsanin oo aad dareemaysid in laguu gafay, fadlan [[Special:UserLogin/signup|sameyso akoon]] ama [[Special:UserLogin|gudaha gal]] si aad u dhowrsatid in hadhowdi laguugu qaldo isticmaalada kale oo aann la'aqoonsanin.''", +'noarticletext' => 'Boggaan hadda wax qoraal ah kuma qorno. +Waxaa [[Special:Search/{{PAGENAME}}|magaca boggaan]] ka raadin kartaa bogyaasha kale, +[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} raadi kuwo la mid ah], +ama [{{fullurl:{{FULLPAGENAME}}|action=edit}} wax ka bedel boggaan].', +'noarticletext-nopermission' => 'Hadda boggaan wax qoraal ah kuma qorno. +Waxaa [[Special:Search/{{PAGENAME}}|magaca boggaan ka raadin kartaa]] boggaga kale ama [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ka raadi gudagalayaasha kale].', +'userpage-userdoesnotexist' => 'Isticmaalahan "$1" ma diiwaangashno. +Fadlan fiiri hadii aad rabto in aad sameeyso/wax ka bedesho boggaan.', +'userpage-userdoesnotexist-view' => 'Isticmaalahaan "$1" ma diiwaangashno.', +'blocked-notice-logextract' => 'Isticmaalahaan hadda waa la mamnuucay. Mamnuucida ugu danbeyso in oo soo galo hoostaan ee ku qorantahay', -'usercssyoucanpreview' => "'''Ogeysiis:''' Isticmaal batoonka \"{{int:showpreview}}\" si aad u baroobeeso CSS'gaaga cusub intii aadan kaydin.", -'userjsyoucanpreview' => "'''Ogeysiis:''' Isticmaal batoonka \"{{int:showpreview}}\" si aad u baroobeeso JavaScriptigaaga cusub intii aadan kaysin.", -'userjspreview' => "'''Waa in aad ogaataa waxaa baroobeynoosaa/fiirinoysaa kaliya JavaScript'ka isticmaalahaaga.''' +'usercssyoucanpreview' => "'''Ogeysiis:''' Isticmaal batoonka \"{{int:showpreview}}\" si aad u baroobeeso CSS'gaaga cusub intii aadan kaydin.", +'userjsyoucanpreview' => "'''Ogeysiis:''' Isticmaal batoonka \"{{int:showpreview}}\" si aad u baroobeeso JavaScriptigaaga cusub intii aadan kaydin.", +'userjspreview' => "'''Waa in aad ogaataa waxaa baroobeynoosaa/fiirinoysaa kaliya JavaScript'ka isticmaalahaaga.''' '''wali lama keydin!'''", -'updated' => '(waa la opdate gareeyay)', -'note' => "'''fiiro gaar:'''", -'previewnote' => "'''Waxa aad aragtid waa horfiirin; wixii aad bedeshay lama keydinin!'''", -'session_fail_preview' => "'''Waan ka xunahay! Wixii aad bedeshay ma'suurto galin in la'keydiyo cilad dhacday awgeed. +'updated' => '(waa la opdate gareeyay)', +'note' => "'''fiiro gaar ah:'''", +'previewnote' => "'''Waxa aad aragtid waa horfiirin; wixii aad bedeshay lama keydinin!'''", +'session_fail_preview' => "'''Waan ka xunahay! Wixii aad bedeshay ma'suurto galin in la'keydiyo cilad dhacday awgeed. Fadlan markale isku day. Hadii aysan weli shaqaynin, ka bax ee markale soo gudagal.'''", -'session_fail_preview_html' => "'''Waan ka xunahay! Wixii aad bedeshay ma'suurto galin in la'keydiyo cilad dhacday awgeed.''' +'session_fail_preview_html' => "'''Waan ka xunahay! Wixii aad bedeshay ma'suurto galin in la'keydiyo cilad dhacday awgeed.''' ''Sababtoo ah {{SITENAME}}han wuxuu leeyahay HTML ceyriin ah, horfiirintiisa waxaa loo qariyey si looga hortago weerar ka yimaada JavaScriptga.'' '''Hadii wax ka bedlkaan uu yahay mid xaq ah, fadlan markale isku day. Hadii aysan weli shaqaynin, is kuday inaad ka baxdo ee markale soo gudagal.'''", -'editing' => 'Waxaa wax ka bedeloosaa $1', -'editingsection' => 'Waxaa wax ka bedeloosaa $1 (qaar)', -'yourtext' => 'Qoraalkaaga', -'editingold' => "'''DIGNIIN: Waxaad wax ka bedeli rabtaa boggan caddadkiisa duqoobay. +'editing' => 'Waxaa wax ka badaloosaa $1', +'editingsection' => 'Waxaa wax ka badaloosaa $1 (qeyb yar)', +'editingcomment' => 'Waxaa wax ka badaloosaa $1 (qeyb yar)', +'editconflict' => 'Isku dhac badalaadka: $1', +'yourtext' => 'Qoraalkaaga', +'editingold' => "'''DIGNIIN: Waxaad wax ka bedeli rabtaa boggan caddadkiisa duqoobay. Hadii aad keydisid, waxaa dhumidoona caddadyadii kan ka dambeeyey.'''", -'yourdiff' => 'Kaladuwanaanshaha', -'semiprotectedpagewarning' => "'''Fiiro gaar ah:''' Beyjkan waa laxiray, kuwa magaca gudagal ka leh kaliya ayaa wax ka badalikara.", -'template-protected' => '(waa la difaacay)', -'hiddencategories' => 'Boggaan waxoo ka mid yahay {{PLURAL:$1|1 qeyb oo qarsoon|$1 oo ah qeybaha qarsoon}}:', -'nocreate-loggedin' => 'Laguuma ogola inaad beyjaj cusub ku sameysid {{SITENAME}}han.', -'permissionserrors' => 'Cillado ogolaashada ah', -'edit-conflict' => 'Wax bedel isku dhacay', +'yourdiff' => 'Kala duwanaanshaha', +'protectedpagewarning' => "'''Digniin: Boggaan waa la difaacay si ee isticmaalada heesto maamulnimada kaliya wax uuga badali karaan''' +Fariintii gudagalihii ugu danbeeyay hoostaan ee ku qorontahay:", +'semiprotectedpagewarning' => "'''Fiiro gaar ah:''' Beyjkan waa laxiray, kuwa magaca gudagal ka leh kaliya ayaa wax ka badalikara.", +'template-protected' => '(waa la difaacay)', +'template-semiprotected' => '(difaaca-fudud)', +'hiddencategories' => 'Boggaan waxoo ka mid yahay {{PLURAL:$1|1 qeyb oo qarsoon|$1 oo ah qeybaha qarsoon}}:', +'nocreate-loggedin' => 'Ma laguu ogolo in aad sameyso boggag cusub.', +'permissionserrors' => 'Cillado ogolaashada ah', +'permissionserrorstext-withaction' => 'Ma laguu ogolo in aad $2, ku sameysid {{PLURAL:$1| sabab|sababahaan }} la xiriiro:', +'recreate-moveddeleted-warn' => "'''Digniin: waxaa dib u sameyn rabtaa bog mar hore la tirtiray.''' + +Waa in aad si fiican uuga fikirtaa hadii ee habboontahay sii socoshada bedelaadka boggaan. +Tirtiraha iyo wareejinta gudagalaha boggaan waxaad ka arki kartaa meeshaan:", +'moveddeleted-notice' => 'Boggaan waa la tirtiray. +Tirtiraha iyo wareejinta gudagalaha boggaan waxaad ka arki kartaa hoostaan.', +'edit-conflict' => 'Wax bedel isku dhacay', # Account creation failure 'cantcreateaccounttitle' => "Ma' sameynkaro gudagal (akoon)", @@ -517,28 +575,32 @@ Hadii aad keydisid, waxaa dhumidoona caddadyadii kan ka dambeeyey.'''", Sababta neh waxaa qoray $3 waa ''$2''", # History pages +'viewpagelogs' => 'Fiiri guadagalayaasha boggaan', 'currentrev' => 'Cadadka cusub', -'previousrevision' => '←Caddad ka duqsanŠ', +'currentrev-asof' => 'Kala duwanaanshihii ugu danbeeyay oo dhacay $1', +'revisionasof' => 'Muuqaalkii $1', +'revision-info' => 'Nuucii ahaa $1 ee $2', +'previousrevision' => '←Bedelaadka ka duqsan', 'nextrevision' => 'Caddad ka cusub→', 'currentrevisionlink' => 'Caddadka hada muuqda', -'cur' => 'kur', -'next' => 'Ku xiga', +'cur' => 'kan hadda', +'next' => 'kan ku xiga', 'last' => 'Ugu dambeeyo', -'page_first' => 'Ugu horeeyo', -'page_last' => 'ugu dambeeyo', -'histlegend' => "Xarafka Diff : waxoo isku aadinaa maqaalada aad rabtid in aad isku fiirisid kadib neh riix gal ama batoonka kuyaalo hoosta.
    +'page_first' => 'kan ugu horeeyo', +'page_last' => 'Kan ugu dambeeyo', +'histlegend' => "Xarafka Duwanaan : waxoo isku fiirinaa bedelaadyada kadib neh riix gal ama batoonka kuyaalo hoosta.
    micnaha: '''({{int:cur}})''' = kala duwanaanshaha maqaaladii ugu danbeeyay, '''({{int:last}})''' = kala duwanaanshaha maqaaladii ka horeeyay, '''{{int:minoreditletter}}''' = bedelada yar.", -'history-fieldset-title' => 'Gudaha u gal taariikhda', +'history-fieldset-title' => 'Soo raadi taariikhda', 'history-show-deleted' => 'Wixii la tirtiray kaliya', -'histfirst' => 'Wixii ugu danbeeyay', -'histlast' => 'ugu cusub', +'histfirst' => 'Kuwii ugu dhawaa', +'histlast' => 'Kuwii ugu cusbaa', 'historyempty' => '(waa ebar)', # Revision feed 'history-feed-title' => 'Taariikhda caddadyaasha', 'history-feed-empty' => 'Beyjka aad dooneyso majiro. -Waxaa lagayaabaa in laga tir tiray wikigan, ama magacii laga badalay. -Iskuday in aad [[Special:Search|karaadiso wikigan]] beyjaj laxiira oo cusub.', +Waxaa lagayaabaa in laga tirtiray wikigan, ama magacii laga badalay. +Iskuday in aad [[Special:Search|ka raadiso wikigaan]] Beyjajka la heli karo oo cusub.', # Revision deletion 'rev-deleted-user' => '(magaca isticmaalaha waa laga saaray)', @@ -551,6 +613,8 @@ sababteeda neh waxaa laga heli kartaa [{{fullurl:{{#Special:Log}}/delete|page={ 'revdelete-radio-set' => 'Haa', 'revdelete-radio-unset' => 'Maya', 'revdelete-log' => 'Sababta:', +'revdel-restore' => 'badal muuqaalka', +'revdel-restore-deleted' => 'kuwii la tirtiray badalyadooda', 'pagehist' => 'Taariikhda bogga', 'revdelete-content' => 'oo kooban', 'revdelete-uname' => 'Magaca isticmaalaha', @@ -558,40 +622,59 @@ sababteeda neh waxaa laga heli kartaa [{{fullurl:{{#Special:Log}}/delete|page={ 'revdelete-reasonotherlist' => 'sabababaha kale', # History merging -'mergehistory-from' => 'Ereykoodka bogga:', +'mergehistory-from' => 'Xogta bogga:', 'mergehistory-reason' => 'Sabab:', # Diffs -'difference' => '(Qeybaha kala duwan)', -'editundo' => 'ka noqo', +'history-title' => 'Bedelaadka taariikhiga "$1"', +'difference' => '(Qeybaha kala duwan)', +'lineno' => 'Safka $1:', +'compareselectedversions' => 'Isku aadi bedelaadka aad dooratay', +'showhideselectedversions' => 'Itusi/qari bedelaadyada aad dooratay', +'editundo' => 'ka noqo', # Search results 'searchresults' => 'Raadi natiijooyinka', -'searchresults-title' => 'Natiijoojika raadinta ku aadan "$1"', +'searchresults-title' => 'Raadi natiijoojika "$1"', 'searchsubtitle' => 'Waxaad raadisay \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|dhamaan bogyaasha ka bilaawdo "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|dhamaan bogyaasha la xiriiro "$1"]])', -'searchsubtitleinvalid' => "Waxaad raadisay '''$1'''", +'searchsubtitleinvalid' => "Waxaa raadisay '''$1'''", 'prevn' => 'Ka horeeya {{PLURAL:$1|$1}}', 'nextn' => 'Ku xiga {{PLURAL:$1|$1}}', +'prevn-title' => 'kan ka horeeyay $1 {{PLURAL:$1|natiijo|natiijooyinka}}', +'nextn-title' => 'Kan ku xiga $1 {{PLURAL:$1|natiijo|natiijooyinka}}', +'shown-title' => 'Itusi $1 {{PLURAL:$1|natiijo|natiijooyinka}} halkii bog', 'viewprevnext' => 'Fiiri ($1 {{int:pipe-separator}} $2) ($3).', 'searchmenu-legend' => 'Raadi doorashooyinka', +'searchmenu-exists' => "'''Wikigaan woo ku jiraa bog la dhoho \"[[:\$1]]\" .'''", +'searchmenu-new' => "'''Ku sameey bogga \"[[:\$1]]\" wikigaan!'''", 'searchhelp-url' => 'Help:Caawinaad', 'searchprofile-articles' => 'Maqaalada kooban', +'searchprofile-project' => 'Caawin iyo Bogga mashruuca', 'searchprofile-everything' => 'Wax kasto', +'searchprofile-advanced' => 'La talin', 'searchprofile-articles-tooltip' => 'Ka raadi $1', 'searchprofile-project-tooltip' => 'Ka raadi $1', -'searchprofile-images-tooltip' => 'Maqaalo raadi', +'searchprofile-images-tooltip' => 'Raadi faylyada', 'searchprofile-everything-tooltip' => 'Raadi wax kasto oo kooban ( xattaa bogga wadahadalka)', 'searchprofile-advanced-tooltip' => 'Ka raadi qeybta isticmaalada', 'search-result-size' => '$1 ({{PLURAL:$2|1 eray|$2 erayo}})', +'search-result-category-size' => '{{PLURAL:$1|1 ka mid ah|$1 ka mid ah}} ({{PLURAL:$2|1 qeybta hoose|$2 qeybaha hoose}}, {{PLURAL:$3|1 fayl|$3 fayl-yo}})', +'search-redirect' => '(waxaa loo wareejiyay $1)', 'search-section' => '(maqaalka $1)', 'search-suggest' => 'Waxaa ka waday miyaa: $1', +'search-interwiki-default' => '$1 natiijooyinka:', 'search-interwiki-more' => '(wax kale)', 'search-mwsuggest-enabled' => 'soojeedin', 'search-mwsuggest-disabled' => 'soojeedin malahan', 'search-relatedarticle' => 'La xiriiro', 'searchrelated' => 'La xiriiro', 'searchall' => 'Dhamaan', +'showingresultsheader' => "{{PLURAL:$5|Natiijada '''$1''' ee '''$3'''|Natiijooyinka '''$1 - $2''' ee '''$3'''}} oo ah '''$4'''", +'search-nonefound' => 'Wax natiijo oo ka soo baxay ma jirto wixii aad raadisay', 'powersearch' => 'Sidii aad wax uugu raadin laheed', +'powersearch-legend' => 'Sidii aad wax uugu raadin laheed', +'powersearch-ns' => 'ka raadi meesha magacyada:', +'powersearch-redir' => 'liista inta la wareejiyay', 'powersearch-field' => 'Raadi', 'powersearch-togglelabel' => 'Fiiri', 'powersearch-toggleall' => 'Dhamaan', @@ -609,7 +692,7 @@ sababteeda neh waxaa laga heli kartaa [{{fullurl:{{#Special:Log}}/delete|page={ 'skin-preview' => 'Horfiirin', 'prefs-math' => 'Xisaab', 'datedefault' => "Ma'jiro dooq", -'prefs-datetime' => 'Taariikhda iyo saacadda', +'prefs-datetime' => 'Taariikhda iyo waqtiga', 'prefs-rc' => 'Isbedelada dhow', 'prefs-watchlist' => 'liiska-waardiyaha', 'prefs-watchlist-days' => 'Tirada maalamaha ay ku jirayaan liiska-waardiyaha:', @@ -619,6 +702,7 @@ sababteeda neh waxaa laga heli kartaa [{{fullurl:{{#Special:Log}}/delete|page={ 'searchresultshead' => 'Raadi', 'recentchangesdays' => 'Tirada maalmaha lagu tusaayo isbedelada dhow:', 'savedprefs' => 'Dooqyadaada waa la keydiyey.', +'timezonelegend' => 'Soonaha waqtiga:', 'localtime' => 'Waqtigaaga', 'timezoneregion-africa' => 'Afrika', 'timezoneregion-america' => 'Ameerika', @@ -627,6 +711,7 @@ sababteeda neh waxaa laga heli kartaa [{{fullurl:{{#Special:Log}}/delete|page={ 'timezoneregion-asia' => 'Aasiya', 'timezoneregion-atlantic' => 'Badweynta Atlaantik', 'allowemail' => 'Ogolow in e-mail ay kaagatimaado isticmaalayaasha kale', +'prefs-searchoptions' => 'Dooqyada raadinta', 'youremail' => 'E-mail:', 'username' => 'Gudagal:', 'uid' => 'Lambarka isticmaalaha:', @@ -645,7 +730,8 @@ Waa in aysan ka badanin $1 {{PLURAL:$1|eray|erayo}}.', 'prefs-help-email-required' => 'Waxaa loo baahanyahay e-mail.', # User rights -'saveusergroups' => 'Kaydi kooxaha isticmaalayaasha', +'saveusergroups' => 'Kaydi kooxaha isticmaalayaasha', +'userrights-groupsmember' => 'Ka mid ah:', # Groups 'group' => 'Koox:', @@ -682,68 +768,129 @@ Waa in aysan ka badanin $1 {{PLURAL:$1|eray|erayo}}.', 'action-delete' => 'tirtir boggaan', 'action-browsearchive' => 'Raadi maqaalada la tirtiray', 'action-undelete' => 'ha tirtirin boggaan', +'action-block' => 'ka mamnuuc isticmaalahaan in oo wax badalo', # Recent changes -'nchanges' => '$1 {{PLURAL:$1|bedelka|bedelada}}', -'recentchanges' => 'Isbedelada dhow', -'recentchangestext' => 'Dabagal isbedelada dhow ee wikiga oo ku dhacay bogaan.', -'recentchanges-label-newpage' => 'Wax bedelkaan waxoo sameeyay bog cusub', -'rcshowhideminor' => '$1 bedelada yar', -'rcshowhidebots' => '$1 botyaalo', -'rcshowhideliu' => '$1 isticmaalada-soo galay', -'rcshowhideanons' => '$1 isticmaalada la aqoon', -'rcshowhidepatr' => '$1 bedelada la waardiyeeyay', -'rcshowhidemine' => '$1 bedelaadeyda', -'rclinks' => 'Itusi isbadeladii $1 ee ugu danbeeyay oo dhacay wixii ka danbeeyay $2 maalmood
    $3', -'hide' => 'Qari', -'show' => 'Itus', -'minoreditletter' => 'by', -'newpageletter' => 'BC', -'rc_categories' => 'Waxoo u gaar yahay qeybaha (u kala qeybsan "|")', +'nchanges' => '$1 {{PLURAL:$1|bedelka|bedelada}}', +'recentchanges' => 'Isbedelada dhow', +'recentchanges-legend' => 'Dooqyada isbedelada dhow', +'recentchangestext' => 'Dabagal isbedelada dhow ee wikiga oo ku dhacay bogaan.', +'recentchanges-feed-description' => 'Dabagal isbedelada dhow ee wikiga oo ku dhacay feedkaan', +'recentchanges-label-newpage' => 'Wax bedelkaan waxoo sameeyay bog cusub', +'recentchanges-label-minor' => 'Kan waa bedel yar', +'recentchanges-label-bot' => 'Badalkaan waxaa sameeyay bot', +'recentchanges-label-unpatrolled' => 'bedelkaan hadda wali lama waardiyeen', +'rcnotefrom' => "Hoostaan waa isbedaladii dhacay '''$2''' (waxaad arkoosaa ilaa '''$1''' ).", +'rclistfrom' => 'Itusi isbedelada cusub oo ka bilaabaneyso $1', +'rcshowhideminor' => '$1 bedelada yar', +'rcshowhidebots' => '$1 botyaalo', +'rcshowhideliu' => '$1 isticmaalada-soo galay', +'rcshowhideanons' => '$1 isticmaalada la aqoon', +'rcshowhidepatr' => '$1 bedelada la waardiyeeyay', +'rcshowhidemine' => '$1 wax badalkeyga', +'rclinks' => 'Itusi isbadeladii $1 ee ugu danbeeyay oo dhacay wixii ka danbeeyay $2 maalmood
    $3', +'diff' => 'duwanaan', +'hist' => 'taariikh', +'hide' => 'Qari', +'show' => 'Itus', +'minoreditletter' => 'by', +'newpageletter' => 'BC', +'boteditletter' => 'b', +'rc_categories' => 'Waxoo u gaar yahay qeybaha (u kala qeybsan "|")', +'rc-enhanced-expand' => 'Itus ka hadalka (waxaa loo baahanyahay JavaScript)', +'rc-enhanced-hide' => 'Qari ka hadalka', # Recent changes linked -'recentchangeslinked' => "Isbedelada la'xiriira", -'recentchangeslinked-title' => 'Wax bedelka la xiriiro "$1"', -'recentchangeslinked-page' => 'Magaca bogga:', +'recentchangeslinked' => "Isbedelada la'xiriira", +'recentchangeslinked-toolbox' => "Isbedelada la'xiriira", +'recentchangeslinked-title' => 'Wax bedelka la xiriiro "$1"', +'recentchangeslinked-summary' => "Liiskaan waa badalyada mardhow lagu sameeyay bogyaasha la xiriiray boggaga khaaska ah (ama ka mid ahaa qeybaha khaaska ah). +Boggaga ku jiro [[Special:Watchlist|liiskaaga waardiyaha]] waa '''butac'''.", +'recentchangeslinked-page' => 'Magaca bogga:', +'recentchangeslinked-to' => 'Itusi isbedelada boggaga la xiriiro bogga aan ku siiyay', # Upload -'upload' => 'Soo geli file', -'uploadbtn' => 'Soo geli file', -'uploadnologin' => 'Gudaha kuma jirtid', -'uploaderror' => 'Qalad soo gelinta', -'uploadlog' => 'soo gelinta gudagalkeeda', -'uploadlogpage' => 'Soo gelinta gudagalkeeda', -'filename' => 'Magaca faylka', -'filestatus' => 'Qeybta ogolaashada koobiga:', -'ignorewarning' => 'Iska dhagooley digniinta ee faylka keedi', -'ignorewarnings' => 'Iska dhagooley digkiinwalba', -'minlength1' => 'Faylka magaciisa waa in uu ugu yaraan noqdaa hal xaraf.', -'badfilename' => 'Faylka magaciisa waxaa lagu badalay "$1".', -'large-file' => "waxaa loo baahanyahay in ay san file'yada ka weynaan $1; +'upload' => 'Soo geli file', +'uploadbtn' => 'Soo geli file', +'uploadnologin' => 'Gudaha kuma jirtid', +'uploaderror' => 'Qalad soo gelinta', +'uploadlog' => 'gudagalaha soo galiyay', +'uploadlogpage' => 'Gudagalaha soo galiyay', +'filename' => 'Magaca faylka', +'filedesc' => 'Qoraal kooban', +'filestatus' => 'Qaabka ogolaashada koobiga:', +'ignorewarning' => 'Iska dhagooleey digniinta faylka neh keydi', +'ignorewarnings' => 'Iska dhagooley digniin walba', +'minlength1' => 'Faylka magaciisa waa in uu ugu yaraan noqdaa hal xaraf.', +'badfilename' => 'Faylka magaciisa waxaa lagu badalay "$1".', +'filetype-banned' => 'Faylka nuucaan waa laga mamnuucay', +'illegal-filename' => "Magaca file'kaan lama ogola", +'unknown-error' => 'Qalad la aqoon aa dhacay.', +'tmp-create-error' => 'Mala sameyn karin fayl kumeel gaar ah.', +'large-file' => "waxaa loo baahanyahay in ay san file'yada ka weynaan $1; file'kaan waa $2.", -'uploadwarning' => 'Digniin waxa aad soo gelineesid', -'savefile' => 'Faylka kaydi', -'uploadedimage' => 'waxaa la soo galiyay "[[$1]]"', -'overwroteimage' => 'waxaa la soo galiyay nuuc cusub oo ah "[[$1]]"', -'watchthisupload' => 'Boggaan waardiyey', +'uploadwarning' => 'Digniin waxa aad soo gelineesid', +'savefile' => 'Faylka kaydi', +'uploadedimage' => 'waxaa la soo galiyay "[[$1]]"', +'overwroteimage' => 'waxaa la soo galiyay nuuc cusub oo ah "[[$1]]"', +'uploaddisabled' => 'wax soo gelinta waa la xiray.', +'copyuploaddisabled' => 'wax soo gelinta dhinaca URL:ka waa la xiray', +'uploadfromurl-queued' => 'Waxa aad soo gelineesid saf oo galay.', +'uploaddisabledtext' => 'soo gelinta faylyada waa la xiray', +'uploadvirus' => 'faylka waxaa ku jiro fayrus! +ku saabsan: $1', +'upload-options' => 'Dooqyada soo gelinta', +'watchthisupload' => 'Boggaan waardiyey', +'upload-failure-subj' => 'Dhibaatada soo gelinta', +'upload-warning-subj' => 'Digniin waxa aad soo gelineesid', + +'upload-unknown-size' => 'lama yaqaano weyninka', + +# img_auth script messages +'img-auth-streaming' => 'Woo dareeraa "$1".', + +# Some likely curl errors. More could be added from +'upload-curl-error28' => 'Waqtiga woo ka dhamaaday soo gelinta', + +'license' => 'Laysinka:', +'license-header' => 'Laysinka', +'nolicense' => 'Mala dooran', +'license-nopreview' => '(Hor fiirin malahan)', +'upload_source_file' => '(Faylka kombiyutarkaada)', + +# Special:ListFiles +'listfiles_search_for' => 'Raadi magacyada wararka:', # File description page 'file-anchor-link' => 'Fayl', +'filehist' => 'Taariikhda faylka', +'filehist-help' => 'Riix taariikhda/waqtiga si aad u argto faylka sida oo ahaa markiisa hore.', 'filehist-deleteall' => 'dirtir dhamaantood', 'filehist-deleteone' => 'tirtir', +'filehist-revert' => 'soo celin', +'filehist-current' => 'waxa hadda jiro', +'filehist-datetime' => 'Taariikhda/Waqtiga', 'filehist-user' => 'Isticmaale', +'filehist-comment' => 'Ka hadalka', +'imagelinks' => 'Faylka la xiriira', +'linkstoimage' => 'Halahaan {{PLURAL:$1|bog waxey la xiriiraan|$1 boggag ah waxey la xiriiraan}} faylkan:', 'nolinkstoimage' => "Ma'ay jiraan beyjaj ku xiran faylkaan.", # File reversion 'filerevert-comment' => 'Sababta:', # File deletion -'filedelete' => 'Tirtir $1', -'filedelete-legend' => 'Tirtit faylka', -'filedelete-intro' => "Waxaad tirtireysaa '''[[Media:$1|$1]]'''.", -'filedelete-comment' => 'Sababta loo tirtiray:', -'filedelete-submit' => 'Tirtir', -'filedelete-success' => "'''$1''' waala tirtiray.", +'filedelete' => 'Tirtir $1', +'filedelete-legend' => 'Tirtit faylka', +'filedelete-intro' => "Waxaad tirtireysaa '''[[Media:$1|$1]]'''.", +'filedelete-comment' => 'Sababta loo tirtiray:', +'filedelete-submit' => 'Tirtir', +'filedelete-success' => "'''$1''' waala tirtiray.", +'filedelete-reason-otherlist' => 'sababaha kale', +'filedelete-edit-reasonlist' => 'Wax ka bedel sababta loo tirtiray', + +# MIME search +'mimesearch' => 'MIME raadi', # Random page 'randompage' => 'Ku nasiibso bog', @@ -752,21 +899,32 @@ file'kaan waa $2.", 'brokenredirects-delete' => 'tirtir', # Miscellaneous special pages +'nbytes' => '$1 {{PLURAL:$1|bayt|bayt}}', +'nmembers' => ' $1 {{PLURAL:$1|ka mid ah|ka mid ah}}', 'lonelypages' => 'Boggaga agoonta ah', 'uncategorizedpages' => 'Maqaalada aan la aruurin', 'popularpages' => 'Boggaga caanka ah', -'shortpages' => 'Boggaga gaagaaban', +'prefixindex' => 'Dhamaan boggaga leh qoraalka hore', +'shortpages' => 'Boggaga gaaban', 'longpages' => 'Boggaga dhaadheer', 'deadendpages' => 'Boggaga aanan la daba joogin', 'deadendpagestext' => 'Boggogaan linki lamalaha boggaga kale ee wikiga .', 'protectedpages' => "Boggag la'difaacay", +'usercreated' => 'Waxoo sameeyay $1 at $2', 'newpages' => 'Bogyaalo cusub', 'newpages-username' => 'Magaca gudagalka:', 'ancientpages' => 'Boggaga duqoobay', 'move' => 'Wareeji', +'pager-newer-n' => '{{PLURAL:$1|ka cusub 1|ka cusub $1}}', +'pager-older-n' => '{{PLURAL:$1|ka duqsan 1|ka duqsan $1}}', # Book sources -'booksources-go' => 'Soco', +'booksources' => 'Xogta buuga', +'booksources-search-legend' => 'Raadi xogta buuga', +'booksources-go' => 'Soco', + +# Special:Log +'log' => 'Guda galayaasha', # Special:AllPages 'allpages' => 'Dhamaan boggaga', @@ -788,7 +946,9 @@ file'kaan waa $2.", 'special-categories-sort-count' => 'xisaabi marka aad tirisid', # Special:LinkSearch -'linksearch-ok' => 'Raadi', +'linksearch-ns' => 'Meesha magacyada:', +'linksearch-ok' => 'Raadi', +'linksearch-line' => '$1 waxoo ka socdaa $2', # Special:ListUsers 'listusersfrom' => "I'tus isticmaalayaasha laga bilaabo:", @@ -797,8 +957,12 @@ file'kaan waa $2.", 'listusers-blocked' => '(waa la mamnuucay)', # Special:Log/newusers +'newuserlogpage' => 'Gudagalaha Isticmaale sameeyay', 'newuserlog-create-entry' => 'Isticmaale cusub', +# Special:ListGroupRights +'listgrouprights-members' => '(Inta ka mid ah liiskooda)', + # E-mail user 'mailnologin' => "Ma'jiro cinwaan wax lagu diro", 'mailnologintext' => 'Waa in aad [[Special:UserLogin|gudaha ku jirtaa]] @@ -838,26 +1002,35 @@ Hadii aad rabootid in aad boggan ka saartid wardiyeynta, dhagsii \"Ha' wardiyeyn 'unwatchthispage' => 'Jooji waardiyeyntiisa', 'watchlistcontains' => 'Liiskaaga waardiyeynta waxaa ku jiro $1 {{PLURAL:$1|bog|boggag}}.', 'wlshowlast' => 'Itus wixii ka danbeeyay $1 saacadood $2 maalmood $3', +'watchlist-options' => 'Dooqyada liiska waardiyaha', # Displayed when you click the "watch" button and it is in the process of watching 'watching' => 'Daawasho...', # Delete 'confirm' => 'Xaqiiji', -'excontent' => "qoraalka wuxuu ahaa: '$1'", +'excontent' => "qoraalka waxoo ahaa: '$1'", 'exbeforeblank' => 'Intii la masaxin waxaa ku qornaa: "$1"', 'exblank' => 'Bogga waxba kuma jirin', 'delete-confirm' => 'Tirtir "$1"', 'delete-legend' => 'Tirtir', 'historywarning' => 'Digniin: Bogga aad tirtirirabtid wuxuu leeyahay taariikkh hore:', 'actioncomplete' => "Amarka waa la'dhamaystiray", +'actionfailed' => 'Shaqada waad ku guul dareesatay', +'deletedarticle' => 'waxoo tirtiray "[[$1]]"', +'dellogpage' => 'Tirtiraha guda galaheeda', # Rollback -'rollback_short' => 'Dib u soo celi', +'rollback_short' => 'Dib u soo celi', +'rollbacklink' => 'dib u soo celi', +'revertpage' => 'Waxoo dib u noqay bedelaadka [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) kuna celiyay bedelkii ka danbeeyay ee [[User:$1|$1]]', +'revertpage-nouser' => 'Waxoo dib u noqay bedelyada (magaca isticmaalaha waa laga saaray) kuna celiyay [[User:$1|$1]]', +'rollback-success' => 'Waxoo dib u noqay bedelaadka $1; +waxoo dib ugu celiyay bedelaadka $2.', # Protect -'protectedarticle' => 'la\'difaacay "[[$1]]"', -'protect-title' => 'la\'difaacaa "$1"', +'protectedarticle' => 'waxoo difaacay "[[$1]]"', +'protect-title' => 'Ka badal heerka difaacida "$1"', 'prot_1movedto2' => '[[$1]] waxaa loo wareejiyey [[$2]]', 'protect-legend' => 'Xaqiiji difaacida', 'protectcomment' => 'Sababta loo difaacaayo', @@ -865,7 +1038,9 @@ Hadii aad rabootid in aad boggan ka saartid wardiyeynta, dhagsii \"Ha' wardiyeyn 'protect_expiry_invalid' => "Wakhtiga dhicitaanka sax ma'aha.", 'protect_expiry_old' => 'Wakhtiga dhictaanka waa mid laga soo dhaafay.', 'protect-default' => "(la'isku ogyahay)", -'protect-expiring' => 'wuxuu dhacaayaa $1 (UTC)', +'protect-fallback' => 'waxaa loo baahanyahay "$1" ogolaasho', +'protect-level-sysop' => 'Maamulada kaliya', +'protect-expiring' => 'waxoo dhacaa $1 (UTC)', 'protect-cascade' => 'Is daba dhiga difaacida - difaac bogga walba oo lagu daro boggaan.', 'protect-othertime' => 'Waqti kale:', 'protect-othertime-op' => 'waqti kale', @@ -884,6 +1059,7 @@ Hadii aad rabootid in aad boggan ka saartid wardiyeynta, dhagsii \"Ha' wardiyeyn 'undeletepage' => "Fiiri dibna u sooceli boggaga la'tirtiray", 'viewdeletedpage' => "Fiiri boggaga la'tirtiray", 'undeletebtn' => 'Sooceli', +'undeletelink' => 'fiiri/mar kale sameey', 'undeleteviewlink' => 'itusi', 'undeletereset' => 'Dib u habeey', 'undeletedarticle' => 'La\' sooceliyey "[[$1]]"', @@ -896,18 +1072,55 @@ Hadii aad rabootid in aad boggan ka saartid wardiyeynta, dhagsii \"Ha' wardiyeyn 'undelete-search-submit' => 'Raadi', # Namespace form on various pages -'invert' => 'Dabagedi dalabka', +'namespace' => 'Meesha magacyada:', +'invert' => 'Dabagedi dalabka', +'blanknamespace' => '(Muhiim)', # Contributions -'mycontris' => 'Wax qoraalkeyga', - -'sp-contributions-talk' => 'Wadahadal', -'sp-contributions-submit' => 'Raadi', +'contributions' => 'Isticmaalada wax ku darsaday', +'contributions-title' => 'Waxa oo ku darsaday isticmaalaha $1', +'mycontris' => 'Wax qoraalkeyga', +'uctop' => '(kor)', +'month' => 'Bilaawga bisha (iyo wixii ka danbeeyay):', +'year' => 'Bilaawga sanadka (iyo wixii ka danbeeyay):', + +'sp-contributions-newbies' => 'Itus akoonada cusub kaliya oo wax ku darsaday', +'sp-contributions-blocklog' => 'mamnuucyada', +'sp-contributions-uploads' => 'kuwa la soo geliyay', +'sp-contributions-logs' => 'Guda galayaasha', +'sp-contributions-talk' => 'Wadahadal', +'sp-contributions-search' => 'Raadi si aad wax uugu darsatid', +'sp-contributions-username' => 'Ciwaanka IP:ga ama magaca isticmaalaha:', +'sp-contributions-submit' => 'Raadi', + +# What links here +'whatlinkshere' => 'Maxaa meeshaan la xiriiro', +'whatlinkshere-title' => 'Boggaga la xiriiro "$1"', +'whatlinkshere-page' => 'Bogga:', +'linkshere' => "Bogyaashaan waxey la xiriiraan '''[[:$1]]''':", +'nolinkshere' => "Boggag la xiriiro '''[[:$1]]''' ma jirto.", +'isredirect' => 'bogga loo wareejiyay', +'isimage' => 'Sawirka la xiriiro', +'whatlinkshere-prev' => '{{PLURAL:$1|kii ka horeeyay|kii ka horeeyay $1}}', +'whatlinkshere-next' => '{{PLURAL:$1|kan ku xiga|kan ku xiga $1}}', +'whatlinkshere-links' => '← kuwa la xiriiro', +'whatlinkshere-hideredirs' => '$1 la wareejiyay', +'whatlinkshere-hidelinks' => '$1 waxoo la xiriiraa', +'whatlinkshere-hideimages' => '$1 sawirka inta oo la xiriiro', # Block/unblock +'ipboptions' => '2 saacadood:2 hours,1 maalin:1 day,3 maalmood:3 days,1 isbuuc:1 week,2 isbuuc:2 weeks,1 bil:1 month,3 bilood:3 months,6 bilood:6 months,1 sano:1 year,waligeed:infinite', +'ipblocklist' => 'isticmaalada la mamnuucay', +'ipblocklist-submit' => 'Raadi', 'anononlyblock' => 'qarsoon. kaliya', +'blocklink' => 'mamnuuc', +'unblocklink' => 'ka qaad mamnuucida', +'change-blocklink' => 'wax ka bedel mamnuucida', 'contribslink' => 'ku darsasho', 'autoblocker' => 'Waxaa automaatik u xirista keenay in mudo dhow uu cinwaanka IP:ga isticmaalay "[[User:$1|$1]]". Sababta keentay in loo xiro $1 waa: "\'\'\'$2\'\'\'"', +'blocklogpage' => 'Mamnuucida guda galaheeda', +'blocklogentry' => 'waxoo mamnuucay [[$1]] waxoona mamnuucida ku egyahay $2 $3', +'unblocklogentry' => 'lama mamnuucin $1', 'block-log-flags-anononly' => "Isticmaalayaasha aanan la'aqoonsanin oo kaliya", 'block-log-flags-nocreate' => 'sameynta gudagalah lamaogola', 'blockme' => 'I mamnuuc', @@ -919,8 +1132,11 @@ Hadii aad rabootid in aad boggan ka saartid wardiyeynta, dhagsii \"Ha' wardiyeyn 'movetalk' => "Wareejiyey bogga wadahadalka la'xiriira", '1movedto2' => '[[$1]] waxaa loo wareejiyey [[$2]]', '1movedto2_redir' => '[[$1]] waxaa loo wareejiyey [[$2]] si loo sii toosiyo', +'movelogpage' => 'Wareejinta guda galaheeda', +'revertmove' => 'soo celin', # Export +'export' => 'Dhoofi boggag', 'export-addcattext' => 'Ku dar maqaalo laga soo qaaday qeybaha:', 'export-addns' => 'Ku dar', @@ -930,41 +1146,71 @@ Hadii aad rabootid in aad boggan ka saartid wardiyeynta, dhagsii \"Ha' wardiyeyn 'allmessagesdefault' => "Qoraalka la'isku ogyahay", 'allmessagescurrent' => 'Qoraalka hada qoran', 'allmessagestext' => 'Liiskan waxaa ku qoran dhamaan fariimaha lagahelikaro xarun magaceedka MediaWiki. -Please visit [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [http://translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.', +Fadlan booqo [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [http://translatewiki.net translatewiki.net] hadii aad rabto in aad wax ku darsatid MediaWiki si aad gabi ahaanbo afkaaga ugu fasirtid.', 'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' la'ma isticmaalikaro, '''\$wgUseDatabaseMessages''' oo dansan daraadeed.", 'allmessages-language' => 'Luqad:', 'allmessages-filter-submit' => 'Soco', +# Thumbnails +'thumbnail-more' => 'Weyneey', + # Tooltip help for the actions -'tooltip-pt-userpage' => 'Bogeyga isticmaalaha', -'tooltip-pt-preferences' => 'Dooqyadeyda', -'tooltip-ca-talk' => 'Wadahadal ku saabsan bogga qoraalka', -'tooltip-ca-edit' => 'Boggaan wax waad ka bedelikartaa. Intii aadan kaydinin fadlan isticmaal batoonka horfiirinta.', -'tooltip-ca-addsection' => 'Ku darso fikrad wadahadalkaan.', -'tooltip-ca-history' => 'Noocyadii hore ee boggaan.', -'tooltip-ca-delete' => 'Bogaan tirtir', -'tooltip-ca-undelete' => "Sooceli qoraaladii lagu sameeyay boggaan intii aanan la'tirtirin ka hor", -'tooltip-ca-move' => 'Wareeji boggaan', -'tooltip-search' => 'Raadi{{SITENAME}}', -'tooltip-search-go' => 'Aad bog oo magacaan ku qoran hadii oo jiro', -'tooltip-search-fulltext' => 'Qoraalkaan ka raadi bogyaasha', -'tooltip-p-logo' => 'Bogga Hore', -'tooltip-n-mainpage' => 'Soo booqo bogga hore', -'tooltip-n-portal' => 'Faahfaahinta mashruuca, waxaad ku caawinkartid, xageed ka helikartaa waxaad u baahantahay', -'tooltip-n-recentchanges' => 'tirada Intii ugu danbeysay oo wax laga bedelay wiki', -'tooltip-n-randompage' => 'Ku nasiibso bog', -'tooltip-t-emailuser' => 'E-mail u dir isticmaalahaan', -'tooltip-t-specialpages' => 'Liiska boggaga qaaska ah oo dhan', -'tooltip-ca-nstab-main' => 'Itusi bogga qoraaka kooban', -'tooltip-ca-nstab-user' => 'Fiiri bogga isticmaalaha', -'tooltip-ca-nstab-media' => 'Fiiri bogga saxaafada', -'tooltip-ca-nstab-special' => 'Kani bogg khaas ah, waxba kama bedelikartid boggaan', -'tooltip-ca-nstab-project' => 'Itusi bogga mashruuca', -'tooltip-ca-nstab-image' => 'Fiiri bogga sawirada', -'tooltip-ca-nstab-mediawiki' => 'Fiiri bogga fariimaha sistamka', -'tooltip-ca-nstab-template' => 'Fiiri tusmada', -'tooltip-ca-nstab-help' => 'Fiiri bogga caawinaad', -'tooltip-ca-nstab-category' => 'Itusi qeybta bogga', +'tooltip-pt-userpage' => 'Bogeyga isticmaalaha', +'tooltip-pt-mytalk' => 'Bogaaga wadahadalka', +'tooltip-pt-preferences' => 'Dooqyadeyda', +'tooltip-pt-mycontris' => 'Liiska intii aad ku darsatay', +'tooltip-pt-login' => 'Waxaa loo baahanyahay in aad gudaha gashid; laakiin, laasim ma ahan', +'tooltip-pt-logout' => 'Ka bax', +'tooltip-ca-talk' => 'Wadahadal ku saabsan bogga qoraalka', +'tooltip-ca-edit' => 'Boggaan wax waad ka bedelikartaa. Intii aadan kaydinin fadlan isticmaal batoonka horfiirinta.', +'tooltip-ca-addsection' => 'Ku darso fikrad wadahadalkaan.', +'tooltip-ca-viewsource' => 'Boggaan waa la difaacay. +Waxaa fiiri kartaa cadaadkiisa', +'tooltip-ca-history' => 'Noocyadii hore ee boggaan.', +'tooltip-ca-protect' => 'Difaac boggaan', +'tooltip-ca-delete' => 'Bogaan tirtir', +'tooltip-ca-undelete' => "Sooceli qoraaladii lagu sameeyay boggaan intii aanan la'tirtirin ka hor", +'tooltip-ca-move' => 'Wareeji boggaan', +'tooltip-ca-watch' => 'Boggaan ku dar liiskaaga waardiyaha', +'tooltip-ca-unwatch' => 'Boggaan ka saar liiskaaga waardiyaha', +'tooltip-search' => 'Ka raadi {{SITENAME}}', +'tooltip-search-go' => 'Aad bog oo magacaan ku qoran hadii oo jiro', +'tooltip-search-fulltext' => 'Qoraalkaan ka raadi bogyaasha', +'tooltip-p-logo' => 'Bogga Hore', +'tooltip-n-mainpage' => 'Soo booqo bogga hore', +'tooltip-n-mainpage-description' => 'Booqo bogga hore', +'tooltip-n-portal' => 'Faahfaahinta mashruuca, waxaad ku caawinkartid, xageed ka helikartaa waxaad u baahantahay', +'tooltip-n-currentevents' => 'Soo raadi war ku saabsan hadda waxa dhacaayo', +'tooltip-n-recentchanges' => 'tirada Intii ugu danbeysay oo wax laga bedelay wiki', +'tooltip-n-randompage' => 'Ku nasiibso bog', +'tooltip-n-help' => 'Meesha lagu ogaan karo', +'tooltip-t-whatlinkshere' => 'Liiska inta bog oo wiki ah oo meeshaan la xiriiro', +'tooltip-t-recentchangeslinked' => 'Isbedelada dhow ee boggaga oo laga soo xiriiriyay boggaan', +'tooltip-feed-atom' => 'Atom aa quudiyo boggaan', +'tooltip-t-contributions' => 'Itusi liiska inta wax oo ku darsaday isticmaalahaan', +'tooltip-t-emailuser' => 'E-mail u dir isticmaalahaan', +'tooltip-t-upload' => 'Soo geli fayl', +'tooltip-t-specialpages' => 'Liiska boggaga qaaska ah oo dhan', +'tooltip-t-print' => 'Nuuca la soo daabici karo ee boggaan', +'tooltip-t-permalink' => 'Linkiga daaimka ah ee bedelaadka boggaan', +'tooltip-ca-nstab-main' => 'Itusi bogga qoraaka kooban', +'tooltip-ca-nstab-user' => 'Fiiri bogga isticmaalaha', +'tooltip-ca-nstab-media' => 'Fiiri bogga saxaafada', +'tooltip-ca-nstab-special' => 'Kani bogg khaas ah, waxba kama bedelikartid boggaan', +'tooltip-ca-nstab-project' => 'Itusi bogga mashruuca', +'tooltip-ca-nstab-image' => 'Fiiri bogga sawirada', +'tooltip-ca-nstab-mediawiki' => 'Fiiri bogga fariimaha sistamka', +'tooltip-ca-nstab-template' => 'Fiiri tusmada', +'tooltip-ca-nstab-help' => 'Fiiri bogga caawinaad', +'tooltip-ca-nstab-category' => 'Itusi qeybta bogga', +'tooltip-minoredit' => 'Calaamadeey kan in oo yahay bedel yar', +'tooltip-save' => 'kaydso badalyadaada', +'tooltip-preview' => 'Feerinta wixii aad bedeshay, fadlan kan isticmaal intii aadan kaydinin!', +'tooltip-diff' => 'Fiiri waxa aad ka badashay qoraalka', +'tooltip-compareselectedversions' => 'Fiiri sida ee u kala duwanyihiin bedelaadka labada aad ka dooratay boggaan', +'tooltip-watch' => 'Boggaan ku dar liiskaaga waardiyaha', +'tooltip-rollback' => '"Dib u soo celi" waxoo gadaal u soo celinaa bedel (yadii) boogaan oo sameeyay kii ugu danbeeyay oo ku darsaday adiga oo isticmaalaaya hal riix', +'tooltip-summary' => 'ku qor qoraal kooban', # Attribution 'anonymous' => "{{PLURAL:$1|Isticmaalaha|Isticmaaleyaasa}} aanan la'aqoonsanin ee {{SITENAME}}", @@ -975,19 +1221,31 @@ Please visit [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] # Info page 'numwatchers' => 'Tirada waardiyeyaasha: $1', +# Patrol log +'patrol-log-line' => 'waxa la calaamadeeyay $1 ee $2 waxaa la waardiyeeyay $3', +'patrol-log-diff' => 'bedelaadka $1', + # Browsing diffs 'previousdiff' => '← bedelkii ka duqsanaa', 'nextdiff' => 'Bedelkii ugu cusbaa →', +# Media information +'file-info-size' => '$1 × $2 pixels, weyninka faylka : $3, nuuca MIME: $4', + # Special:NewFiles 'imagelisttext' => "Hoos waxaa yaala liiska '''$1''' {{PLURAL:$1|file|faylalka}} oo u kala soocan $2.", 'ilsubmit' => 'Raadi', 'bydate' => 'hab taariikheed', +# External editor support +'edit-externally-help' => '(Ka fiiri wax war ah oo kale [http://www.mediawiki.org/wiki/Manual:External_editors sidii oo wax ugu habeysmi lahaa] )', + # 'all' in various places, this might be different for inflected languages 'recentchangesall' => 'dhamaan', 'imagelistall' => 'dhamaan', 'watchlistall2' => 'dhamaan', +'namespacesall' => 'dhamaan', +'monthsall' => 'Dhamaan', # E-mail address confirmation 'confirmemail_noemail' => 'Kuma haysatid cinwaan E-boosto sax [[Special:Preferences|isticmaala dooqiisa]].', @@ -1003,10 +1261,19 @@ Please visit [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] # Auto-summaries 'autosumm-new' => 'Bog cusub: $1', +# Watchlist editing tools +'watchlisttools-edit' => 'Fiiri iyo wax ka badal liiska waardiyaha', +'watchlisttools-raw' => 'Badal liiska waardiyeenta ceeriinka ah', + +# Special:Version +'version-poweredby-others' => 'kuwa kale', + # Special:FilePath +'filepath-page' => 'Fayl:', 'filepath-submit' => 'Soco', # Special:FileDuplicateSearch +'fileduplicatesearch-legend' => 'Raadi mid tusaale ah', 'fileduplicatesearch-submit' => 'Raadi', # Special:SpecialPages @@ -1016,4 +1283,11 @@ Please visit [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] # Special:BlankPage 'blankpage' => 'Bog masaxan', +# Database error messages +'dberr-usegoogle' => 'Waxaa baroobeen kartaa in aad ka raadiso google', + +# HTML forms +'htmlform-reset' => 'Ka noqo wax bedelka', +'htmlform-selectorother-other' => 'kuwa kale', + ); diff --git a/languages/messages/MessagesSq.php b/languages/messages/MessagesSq.php index ed310302..5df68ac8 100644 --- a/languages/messages/MessagesSq.php +++ b/languages/messages/MessagesSq.php @@ -52,7 +52,11 @@ $namespaceAliases = array( ); $specialPageAliases = array( + 'Userlogin' => array( 'HyrjePërdoruesi' ), + 'Userlogout' => array( 'DaljePërdoruesi' ), + 'CreateAccount' => array( 'HapLlogari' ), 'Preferences' => array( 'Preferencat' ), + 'Recentchanges' => array( 'NdryshimeSëFundmi' ), 'Upload' => array( 'Ngarko' ), 'Listfiles' => array( 'ListaSkedave' ), 'Newimages' => array( 'SkedaTëReja' ), @@ -76,6 +80,7 @@ $specialPageAliases = array( 'Protectedpages' => array( 'FaqeteMbrojtura' ), 'Protectedtitles' => array( 'TitujteMbrojtur' ), 'Allpages' => array( 'TëgjithaFaqet' ), + 'Unblock' => array( 'Zhblloko' ), 'Specialpages' => array( 'FaqetSpeciale' ), 'Contributions' => array( 'Kontributet' ), 'Emailuser' => array( 'EmailPërdoruesit' ), @@ -96,17 +101,21 @@ $specialPageAliases = array( 'Mypage' => array( 'FaqjaIme' ), 'Mytalk' => array( 'DiskutimiImë' ), 'Mycontributions' => array( 'KontributetëMiat' ), + 'Myuploads' => array( 'NgarkimeteMia' ), 'Listadmins' => array( 'RreshtoAdmin' ), 'Listbots' => array( 'RreshtoBotët' ), 'Popularpages' => array( 'FaqetëFamshme' ), 'Search' => array( 'Kërkim' ), + 'Resetpass' => array( 'NdryshoFjalëkalimin' ), + 'Withoutinterwiki' => array( 'PaInterwiki' ), 'Blankpage' => array( 'FaqeBosh' ), 'DeletedContributions' => array( 'GrisKontributet' ), ); $magicWords = array( 'redirect' => array( '0', '#RIDREJTO', '#REDIRECT' ), - 'currentmonth' => array( '1', 'MUAJIMOMENTAL', 'CURRENTMONTH', 'CURRENTMONTH2' ), + 'currentmonth' => array( '1', 'MUAJIMOMENTAL', 'MUAJIMOMENTAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ), + 'currentmonth1' => array( '1', 'MUAJIMOMENTAL1', 'CURRENTMONTH1' ), 'currentmonthname' => array( '1', 'EMRIIMUAJITMOMENTAL', 'CURRENTMONTHNAME' ), 'currentday' => array( '1', 'DITASOT', 'CURRENTDAY' ), 'currentday2' => array( '1', 'DITASOT2', 'CURRENTDAY2' ), @@ -139,7 +148,7 @@ $magicWords = array( 'talkpagenamee' => array( '1', 'EMRIIFAQESSËDISKUTIMITE', 'TALKPAGENAMEE' ), 'subst' => array( '0', 'ZËVN', 'SUBST:' ), 'img_thumbnail' => array( '1', 'parapamje', 'pamje', 'thumbnail', 'thumb' ), - 'img_manualthumb' => array( '1', 'parapamje=$1', 'thumbnail=$1', 'thumb=$1' ), + 'img_manualthumb' => array( '1', 'parapamje=$1', 'pamje=$1', 'thumbnail=$1', 'thumb=$1' ), 'img_right' => array( '1', 'djathtas', 'right' ), 'img_left' => array( '1', 'majtas', 'left' ), 'img_none' => array( '1', 's\'ka', 'none' ), @@ -178,7 +187,7 @@ $dateFormats = array( 'dmy both' => 'j F Y H:i', ); -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $messages = array( # User preference toggles @@ -196,8 +205,7 @@ $messages = array( 'tog-editsection' => 'Lejo redaktimin e seksioneve me [redakto] lidhje', 'tog-editsectiononrightclick' => 'Lejo redaktimin e seksioneve me djathtas-shtypje
    mbi emrin e seksionit (JavaScript)', 'tog-showtoc' => 'Trego tabelën e përmbajtjeve
    (për faqet me më shume se 3 tituj)', -'tog-rememberpassword' => 'Mbaj mënd fjalëkalimin për vizitën e ardhshme', -'tog-editwidth' => 'Kutija e redaktimit ka gjerësi te plotë', +'tog-rememberpassword' => 'Mbaj mënd fjalëkalimin për vizitën e ardhshme (më së shumti për $1 {{PLURAL:$1|ditë|ditë}})', 'tog-watchcreations' => 'Shto faqet që krijoj tek lista mbikqyrëse', 'tog-watchdefault' => 'Shto faqet që redaktoj tek lista mbikqyrëse', 'tog-watchmoves' => 'Shto faqet që zhvendos tek lista mbikqyrëse', @@ -341,31 +349,21 @@ $messages = array( 'faqpage' => 'Project:Pyetje e Përgjigje', # Vector skin -'vector-action-addsection' => 'Fillo një temë të re', -'vector-action-delete' => 'Grise', -'vector-action-move' => 'Zhvendose', -'vector-action-protect' => 'Mbroje', -'vector-action-undelete' => 'Jo e grisur', -'vector-action-unprotect' => 'Liroje', -'vector-namespace-category' => 'Kategoria', -'vector-namespace-help' => 'Ndihmë', -'vector-namespace-image' => 'Skeda', -'vector-namespace-main' => 'Faqe', -'vector-namespace-media' => 'Media-faqe', -'vector-namespace-mediawiki' => 'Mesazh', -'vector-namespace-project' => 'Faqe e mbrojtur', -'vector-namespace-special' => 'Faqe speciale', -'vector-namespace-talk' => 'Diskutimet', -'vector-namespace-template' => 'Stampa', -'vector-namespace-user' => 'Përdoruesi', -'vector-view-create' => 'Krijo', -'vector-view-edit' => 'Redakto', -'vector-view-history' => 'Shiko historikun', -'vector-view-view' => 'Lexoni', -'vector-view-viewsource' => 'Shikoni tekstin', -'actions' => 'Veprimet', -'namespaces' => 'Emri i hapësirës', -'variants' => 'Variante', +'vector-action-addsection' => 'Fillo një temë të re', +'vector-action-delete' => 'Grise', +'vector-action-move' => 'Zhvendose', +'vector-action-protect' => 'Mbroje', +'vector-action-undelete' => 'Jo e grisur', +'vector-action-unprotect' => 'Liroje', +'vector-simplesearch-preference' => 'Aktivizoni kërkim të avancuar (vetëm për Vektor)', +'vector-view-create' => 'Krijo', +'vector-view-edit' => 'Redakto', +'vector-view-history' => 'Shiko historikun', +'vector-view-view' => 'Lexoni', +'vector-view-viewsource' => 'Shikoni tekstin', +'actions' => 'Veprimet', +'namespaces' => 'Emri i hapësirës', +'variants' => 'Variante', 'errorpagetitle' => 'Gabim', 'returnto' => 'Kthehu tek $1.', @@ -426,6 +424,9 @@ Shumë përdorues po përpiqen të shikojnë këtë faqe. Ju lutemi prisni pak para se të hapni sërish këtë faqe. $1', +'pool-timeout' => 'Koha duke pritur për të bllokoet', +'pool-queuefull' => 'Radhja është e plotë', +'pool-errorunknown' => 'Gabim i panjohur', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Rreth {{SITENAME}}', @@ -590,7 +591,8 @@ Arsyeja e dhënë është ''$2''.", 'yourname' => 'Fusni nofkën tuaj', 'yourpassword' => 'Fusni fjalëkalimin tuaj', 'yourpasswordagain' => 'Fusni fjalëkalimin përsëri', -'remembermypassword' => 'Mbaj mënd fjalëkalimin tim për tërë vizitat e ardhshme.', +'remembermypassword' => 'Mbaj mënd fjalëkalimin tim për tërë vizitat e ardhshme (për një kohë maksimale prej $1 {{PLURAL:$1|dite|ditësh}})', +'securelogin-stick-https' => 'Qëndro i lidhur me HTTPS pas hyrjes me emrin përkatës', 'yourdomainname' => 'Faqja juaj', 'externaldberror' => 'Ose kishte një gabim tek regjistri i identifikimit të jashtëm, ose nuk ju lejohet të përtërini llogarinë tuaje të jashtme.', 'login' => 'Hyni', @@ -607,6 +609,7 @@ Arsyeja e dhënë është ''$2''.", 'gotaccount' => "Keni një llogari? '''$1'''.", 'gotaccountlink' => 'Hyni', 'createaccountmail' => 'me email', +'createaccountreason' => 'Arsyeja:', 'badretype' => 'Fjalëkalimet nuk janë njësoj.', 'userexists' => 'Nofka që kërkuat është në përdorim. Zgjidhni një nofkë tjetër.', 'loginerror' => 'Gabim hyrje', @@ -625,6 +628,7 @@ Kontrolloni shkrimin ose [[Special:UserLogin/signup|hapni një llogari të re]]. 'wrongpasswordempty' => 'Fjalëkalimi juaj ishte bosh. Ju lutemi provoni përsëri.', 'passwordtooshort' => 'Fjalëkalimi juaj është i pavlefshëm ose tepër i shkurtër. Ai duhet të ketë së paku {{PLURAL:$1|1 shkronjë|$1 shkronja}} dhe duhet të jetë i ndryshëm nga emri i përdoruesit.', 'password-name-match' => 'Fjalëkalimi juaj duhet të jetë i ndryshëm nga emri juaj.', +'password-login-forbidden' => 'Përdorimi i kësaj nofke dhe fjalëkalimi është i ndaluar.', 'mailmypassword' => 'Më dërgo një fjalëkalim të ri tek adresa ime', 'passwordremindertitle' => 'Kërkesë për fjalëkalim të ri tek {{SITENAME}}', 'passwordremindertext' => 'Dikush (sigurisht ju, nga adresa IP adresa $1) kërkoi një fjalëkalim të ri për hyrje tek {{SITENAME}} ($4). U krijua fjalëkalimi i përkohshëm për përdoruesin "$2" dhe u dërgua tek "$3". Nëse ky ishte tentimi juaj duhet që të kyçeni dhe ndërroni fjalëkalimin tani. Fjalëkalimi juaj i përkohshëm do të skadojë {{PLURAL:$5|një dite|$5 ditësh}}. @@ -655,6 +659,9 @@ Duhet të hyni brenda dhe të ndërroni fjalëkalimin tani nëse ky person jeni 'loginlanguagelabel' => 'Gjuha: $1', 'suspicious-userlogout' => 'Kërkesa juaj për të shkëputet u mohua sepse duket sikur është dërguar nga një shfletues të thyer ose caching proxy.', +# E-mail sending +'php-mail-error-unknown' => 'Gabim i panjohur në funksionin e postës PHP ()', + # Password reset dialog 'resetpass' => 'Ndrysho fjalëkalimin', 'resetpass_announce' => 'Ju keni hyrë me një kod të përkohshëm. @@ -706,6 +713,7 @@ Për të hyrë tërësisht duhet të vendosni një fjalëkalim të ri këtu:', 'showdiff' => 'Trego ndryshimet', 'anoneditwarning' => "Ju nuk jeni regjistruar. IP adresa juaj do të regjistrohet në historinë e redaktimeve të kësaj faqe. You are not logged in. Your IP address will be recorded in this page's edit history.", +'anonpreviewwarning' => 'Nuk jeni futur me emrin tuaj duke u inçizuar të dhënat IP adresën tuaj në këtë faqe dhe është ndryshuar historia.', 'missingsummary' => "'''Vërejtje:''' Ju nuk keni shtuar një përmbledhje për redaktimet.", 'missingcommenttext' => 'Ju lutemi shtoni një koment në vazhdim.', 'missingcommentheader' => "'''Kujdes:''' Ju nuk keni dhënë një titull për këtë koment. @@ -781,7 +789,11 @@ Regjistri i bllokuar hyrjen e fundit është më poshtë, për referencë:', 'userjsyoucanpreview' => "'''Këshillë:''' Përdorni butonin 'Trego parapamjen' për të provuar ndryshimet tuaja të faqeve css/js përpara se të kryeni ndryshimet.", 'usercsspreview' => "'''Vini re! Kjo është vetëm një parapamje e faqes suaj CSS. Akoma nuk është ruajtur!'''", 'userjspreview' => "'''Vini re se kjo është vetëm një provë ose parapamje e faqes tuaj JavaScript, ajo nuk është ruajtur akoma!'''", -'userinvalidcssjstitle' => "'''Kujdes:''' Nuk ka pamje të quajtur \"\$1\". Vini re se faqet .css dhe .js përdorin titull me gërma të vogla, p.sh. {{ns:user}}:Foo/monobook.css, jo {{ns:user}}:Foo/Monobook.css.", +'sitecsspreview' => "'''Vini re! Kjo është vetëm një parapamje e faqes suaj CSS.''' +'''Akoma nuk është ruajtur!'''", +'sitejspreview' => "'''Vini re se kjo është vetëm një provë ose parapamje e faqes tuaj JavaScript.''' +'''Nuk është ruajtur akoma!'''", +'userinvalidcssjstitle' => "'''Kujdes:''' Nuk ka pamje të quajtur \"\$1\". Vini re se faqet .css dhe .js përdorin titull me gërma të vogla, p.sh. {{ns:user}}:Foo/vector.css, jo {{ns:user}}:Foo/Vector.css.", 'updated' => '(E ndryshuar)', 'note' => "'''Shënim:'''", 'previewnote' => "'''Kini kujdes se kjo është vetëm një parapamje, nuk është ruajtur akoma!'''", @@ -813,9 +825,6 @@ Ju duhet të përputhni ndryshimet tuaja me tekstin ekzistues. 'copyrightwarning2' => "Ju lutem vini re se të gjitha kontributet tek {{SITENAME}} mund të redaktohen, ndryshohen apo fshihen nga përdorues të tjerë. Në qoftë se nuk dëshironi që shkrimet tuaja të redaktohen pa mëshirë mos i jepni këtu.
    Po na premtoni që ç'ka po jepni këtu e keni kontributin tuaj ose e keni kopjuar nga domeni publik apo nga burime të tjera të lira sipas ligjeve përkatëse (shikoni $1 për hollësirat). '''NDALOHET DHËNIA E PUNIMEVE PA PASUR LEJE NGA AUTORI NË MOSPËRPUTHJE ME KËTË LICENSË!'''", -'longpagewarning' => 'KUJDES: Kjo faqe është $1 kilobytes e gjatë; disa -shfletues mund të kenë probleme për të redaktuar faqe që afrohen ose janë akoma më shumë se 32 kb. -Konsideroni ta ndani faqen në disa seksione më të vogla.', 'longpageerror' => "'''GABIM: Tesksti që ju po e redaktoni është $1 KB i gjatë dhe është më i gjatë se maksimumi i lejuar prej $2 KB. Ndryshimet nuk mund të ruhen.'''", 'readonlywarning' => "'''KUJDES: Baza e të dhënave është mbyllur për mirëmbajtje, pra ju nuk do të mund të ruani redaktimin tuaj për momentin. Ju ndoshta doni të kopjoni tekstin në një tekst dokument dhe të e ruani për më vonë.''' @@ -986,6 +995,8 @@ Si një administrator ju mund ta shikoni këtë ndryshim; detajet mund të gjend 'logdelete-failure' => "'''Dukshmëria nuk u vendos:''' $1", 'revdel-restore' => 'Ndrysho dukshmërinë', +'revdel-restore-deleted' => 'fshij rivizonet', +'revdel-restore-visible' => 'rivizionet e dukshme', 'pagehist' => 'Historiku i faqes', 'deletedhist' => 'Historiku i grisjeve', 'revdelete-content' => 'përmbajtja', @@ -1055,11 +1066,13 @@ Kini kujdes se përdorimi i lidhjeve të shfletimit do të ndryshojë përzgjedh # Diffs 'history-title' => 'Historiku i redaktimeve te "$1"', 'difference' => '(Ndryshime midis versioneve)', +'difference-multipage' => '(Ndryshimi midis faqeve)', 'lineno' => 'Rreshti $1:', 'compareselectedversions' => 'Krahasoni versionet e zgjedhura', 'showhideselectedversions' => 'Shfaq/fshih versionet e zgjedhura', 'editundo' => 'ktheje', -'diff-multi' => '({{PLURAL:$1|Një redaktim ndërmjet nuk është|$1 redaktime ndërmjet nuk janë}} treguar.)', +'diff-multi' => '({{PLURAL:$1|Një version i ndërmjetshëm|$1 versione të ndërmjetshme}} nga {{PLURAL:$2|një përdorues|$2 përdorues}} i/të pashfaqur)', +'diff-multi-manyusers' => '({{PLURAL:$1|Një versioni i ndërmjetshëm|$1 versione të ndërmjetshme}} nga më shumë se $2 {{PLURAL:$2|përdorues|përdorues}} i/të pashfaqur)', # Search results 'searchresults' => 'Rezultatet e kërkimit', @@ -1094,6 +1107,7 @@ Kini kujdes se përdorimi i lidhjeve të shfletimit do të ndryshojë përzgjedh 'searchprofile-everything-tooltip' => 'Kërko gjithë përmbajtjen (duke përfshirë edhe faqet e diskutimit)', 'searchprofile-advanced-tooltip' => 'Kërkimi në hapësina', 'search-result-size' => '$1 ({{PLURAL:$2|1 fjalë|$2 fjalë}})', +'search-result-category-size' => '{{PLURAL:$1|1 anëtar|$1 anëtarë}} ({{PLURAL:$2|1 nën-kategori|$2 nën-kategori}}, {{PLURAL:$3|1 skedë|$3 skeda}})', 'search-result-score' => 'Përkatësia: $1%', 'search-redirect' => '(përcjellim $1)', 'search-section' => '(seksioni $1)', @@ -1168,6 +1182,7 @@ Kini kujdes se përdorimi i lidhjeve të shfletimit do të ndryshojë përzgjedh 'contextlines' => 'Sa rreshta të tregohen për përputhje:', 'contextchars' => 'Sa germa të tregohen për çdo rresht:', 'stub-threshold' => 'Kufiri për formatin e lidhjeve cung (B):', +'stub-threshold-disabled' => 'Çaktivizuar', 'recentchangesdays' => 'Numri i ditëve të treguara në ndryshime së fundmi:', 'recentchangesdays-max' => '(maksimum $1 {{PLURAL:$1|dit|ditë}})', 'recentchangescount' => 'Numri i redaktimeve për të treguar:', @@ -1201,6 +1216,7 @@ Kini kujdes se përdorimi i lidhjeve të shfletimit do të ndryshojë përzgjedh 'prefs-files' => 'Figura', 'prefs-custom-css' => 'CSS i përpunuem', 'prefs-custom-js' => 'JavaScripti i përpunuar', +'prefs-common-css-js' => 'CSS/Javascript të përbashkët për të gjitha pamjet:', 'prefs-reset-intro' => 'Mundeni me përdorë këtë faqe për me i kthy parapëlqimet tueja në ato të paracaktuemet e faqes. Kjo nuk mundet me u zhbâ.', 'prefs-emailconfirm-label' => 'Konfirmimi i emailit:', @@ -1238,8 +1254,15 @@ Kjo informatë është publike.', 'prefs-advancedrendering' => 'Opsionet e avancuar', 'prefs-advancedsearchoptions' => 'Opsionet e avancuar', 'prefs-advancedwatchlist' => 'Opsionet e avancuar', +'prefs-displayrc' => 'Shfaq opsionet', +'prefs-displaysearchoptions' => 'Shfaq opsionet', +'prefs-displaywatchlist' => 'Shfaq opsionet', 'prefs-diffs' => 'Ndryshimet', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'E-mail adresa është e vlefshme.', +'email-address-validity-invalid' => 'Futni një e-mali adresë të vlefshme.', + # User rights 'userrights' => 'Ndrysho privilegjet e përdoruesve', 'userrights-lookup-user' => 'Ndrysho grupet e përdoruesit', @@ -1323,6 +1346,7 @@ Kjo informatë është publike.', 'right-hideuser' => 'Blloko përdorues, duke fshehur nga publiku', 'right-ipblock-exempt' => 'Anashkalo bllokimet e IP-ve, auto-bllokimet dhe linjën e bllokimeve', 'right-proxyunbannable' => 'Anashkalo bllokimet automatike të ndërmjetësve', +'right-unblockself' => 'Zhblloko veten', 'right-protect' => 'Ndrysho nivelin mbrojtës dhe redakto faqet e mbrojtura', 'right-editprotected' => 'Redakto faqet e mbrojtura (pa ndryshuar mbrojtjen)', 'right-editinterface' => 'Ndrysho parapamjen e përdoruesit', @@ -1444,6 +1468,9 @@ Faqet [[Special:Watchlist|nën mbikqyrjen tuaj]] duken të '''theksuara'''.", 'upload_directory_missing' => 'Direktoriumi ($1) i ngarkimit po mungon dhe nuk është arritur që të krijohet nga webserveri.', 'upload_directory_read_only' => 'Skedari i ngarkimit ($1) nuk mund të shkruhet nga shërbyesi.', 'uploaderror' => 'Gabim dhënie', +'upload-recreate-warning' => "'''Kujdes: Një skedarë me atë emër është fshirë apo lëvizur.''' + +Regjistri i fshirjes dhe lëvizjes për këtë faqe për lehtësim ofrohen këtu:", 'uploadtext' => "Përdorni formularin e mëposhtëm për të ngarkuar skeda. Për të parë ose kërkuar skeda të ngarkuara më parë, shkoni tek [[Special:FileList|lista e ngarkimeve të skedave]], (ri)ngarkimet janë gjithashtu të regjistruara tek [[Special:Log/upload|regjistri i ngarkimeve]], grisjet tek [[Special:Log/delete|regjistri i grisjeve]]. @@ -1479,6 +1506,17 @@ Parapëlqehet {{PLURAL:\$3|skeda të jetë e |skedat të jenë të}} llojit \$2. 'filetype-banned-type' => "'''\".\$1\"''' nuk është lloj i lejuar i skedave. Si {{PLURAL:\$3|i lejuar është lloji i skedës|të lejuara janë llojet e skedave}} \$2.", 'filetype-missing' => 'Skeda nuk ka mbaresë (si p.sh. ".jpg").', +'empty-file' => 'Skeda që paraqitët ishte bosh.', +'file-too-large' => 'Skeda që paraqitët ishte shumë e madhe.', +'filename-tooshort' => 'Emri i skedës është shumë i shkurtër.', +'filetype-banned' => 'Kjo lloji i skedës është e ndalur.', +'verification-error' => 'Kjo skedë nuk e kaloi verifikimin e skedave.', +'hookaborted' => 'Modifikimi që ju provuat ta bëni u ndërpre nga një goditje shtesë.', +'illegal-filename' => 'Emri i skedarit nuk lejohet.', +'overwrite' => 'Mbishkrimi i një skede ekzistuese nuk lejohet.', +'unknown-error' => 'Një gabim i panjohur.', +'tmp-create-error' => 'Nuk mund të krijohej skeda e përkohëshme.', +'tmp-write-error' => 'Gabim gjatë shkrimit të skedës së përkohshme.', 'large-file' => 'Është e këshillueshme që skedat të jenë jo më shumë se $1; kjo skedë është $2.', 'largefileserver' => 'Skeda është më e madhe se sa serveri e lejon këtë.', @@ -1506,13 +1544,14 @@ Nëse keni këtë figurë me madhësi të plotë ju lutem të ngarkoni atë, pë 'file-exists-duplicate' => 'Kjo skedë është dyfish i {{PLURAL:$1|skedës|skedave}} në vijim:', 'file-deleted-duplicate' => 'Një skedë identike më këtë skedë ([[:$1]]) është grisur më përpara. Ju duhet të kontrolloni historikun e grisjes të asaj skede përpara se ta ri-ngarkoni atë.', -'successfulupload' => 'Dhënie e sukseshme', 'uploadwarning' => 'Kujdes dhënie', 'uploadwarning-text' => 'Ju lutemi modifikoni përshkrimin e skedës dhe provojen përsëri.', 'savefile' => 'Ruaj skedën', 'uploadedimage' => 'dha "[[$1]]"', 'overwroteimage' => 'dha dhe zëvendësoi me një version të ri të "[[$1]]"', 'uploaddisabled' => 'Ndjesë, dhëniet janë bllokuar në këtë shërbyes dhe nuk është gabimi juaj.', +'copyuploaddisabled' => 'Ngarkimi nga URL-ja u çaktivizua.', +'uploadfromurl-queued' => 'Ngarkimi juaj ka qenë në radhë.', 'uploaddisabledtext' => 'Ngarkimi i skedave është i ndaluar.', 'php-uploaddisabledtext' => 'Ngarkimet e skedave në PHP janë të çaktivizuara. Ju lutemi kontrolloni parametrat e ngarkimeve të skedave.', @@ -1533,6 +1572,14 @@ Duhet të mendoheni nëse është e pranueshme ngarkimi i kësaj skede. Regjistri i grisjes së skedës jepet më poshtë:", 'filename-bad-prefix' => "Emri i skedës që po ngarkoni fillon me '''\"\$1\"''' dhe nuk është veçantisht përshkrues pasi përdoret nga shumë kamera. Ju lutem zgjidhni një emër më përshkrues për skedën tuaj.", +'upload-success-subj' => 'Dhënie e sukseshme', +'upload-success-msg' => 'Ngarkimi juaj nga [$2] ishte i suksesshëm. Mund të gjendet këtu: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problem gjatë ngarkimit', +'upload-failure-msg' => 'Kishte një problem me ngarkimin tuaj nga [$2]: + +$1', +'upload-warning-subj' => 'Paralajmërim për ngarkimin', +'upload-warning-msg' => 'Kishte një problem me ngarkimin tuaj nga [$2]. Ju mund të ktheheni tek [[Special:Upload/stash/$1|forma e ngarkimit]] për të korrgjuar këtë problem.', 'upload-proto-error' => 'Protokoll i gabuar', 'upload-proto-error-text' => 'Ngarkimet nga rrjeti kërkojnë që adresa URL të fillojë me http:// ose ftp://.', @@ -1598,6 +1645,7 @@ Shtypni kolonat e tjera për të ndryshuar radhitjen.', 'listfiles_search_for' => 'Kërko për emrin e figurës:', 'imgfile' => 'skeda', 'listfiles' => 'Lista e figurave', +'listfiles_thumb' => 'Parapamje', 'listfiles_date' => 'Data', 'listfiles_name' => 'Emri', 'listfiles_user' => 'Përdoruesi', @@ -1712,8 +1760,8 @@ Mos harroni të shihni nyje tjera të stampave para grisjes së tyre.', 'statistics-edits' => 'Redaktimet e faqes që kur {{SITENAME}} u regjistrua', 'statistics-edits-average' => 'Ndryshime mesatare për faqe', 'statistics-views-total' => 'Shikimet gjithsej', +'statistics-views-total-desc' => 'Shikimet tek faqet joekzistuese dhe faqet speciale nuk janë të përfshira', 'statistics-views-peredit' => 'Shikimet për redaktim', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Gjatësia e radhës së punës]', 'statistics-users' => '[[Special:ListUsers|Përdoruesit]] e regjistruar', 'statistics-users-active' => 'Përdoruesit aktiv', 'statistics-users-active-desc' => 'Përdoruesit që kanë së paku një veprim në {{PLURAL:$1|ditën|$1 ditët}} e fundit', @@ -1726,10 +1774,9 @@ Ato duhet të kenë lidhje të drejtpërdrejtë tek artikujt e nevojshëm.
    Një faqe trajtohet si faqe kthjelluese nëse përdor stampat e lidhura nga [[MediaWiki:Disambiguationspage]]", 'doubleredirects' => 'Përcjellime dopjo', -'doubleredirectstext' => 'Kujdes: Kjo listë mund të ketë lidhje gabim. D.m.th. ka tekst dhe lidhje mbas #REDIRECT-it të parë. - -
    -Çdo rresht ka lidhje tek përcjellimi i parë dhe i dytë, gjithashtu ka edhe rreshtin e parë të tekstit të përcjellimit të dytë, duke dhënë dhe artikullin e "vërtetë", me të cilin përcjellimi i parë duhet të lidhet.', +'doubleredirectstext' => "Kjo faqe liston faqet përcjellëse tek faqet e tjera përcjellëse. +Secili rresht përmban lidhjet tek përcjellimi i parë dhe përcjellimi i dytë, gjithashtu synimin e përcjellimit të dytë, që është zakonisht faqja synuese '''e vërtetë''', që faqja w parë duhej të ishte përcjellëse e kësaj faqeje. +Kalimet nga hyrjet janë zgjidhur.", 'double-redirect-fixed-move' => '[[$1]] u zhvendos, tani është gjendet në [[$2]]', 'double-redirect-fixer' => 'Rregullues zhvendosjesh', @@ -1752,6 +1799,8 @@ Një faqe trajtohet si faqe kthjelluese nëse përdor stampat e lidhura nga [[Me 'nmembers' => '$1 {{PLURAL:$1|antar|antarë}}', 'nrevisions' => '$1 {{PLURAL:$1|version|versione}}', 'nviews' => '$1 {{PLURAL:$1|shikim|shikime}}', +'nimagelinks' => 'Përdorur në $1 {{PLURAL:$1|faqe|faqe}}', +'ntransclusions' => 'përdorur në $1 {{PLURAL:$1|faqe|faqe}}', 'specialpage-empty' => 'Kjo faqe është boshe.', 'lonelypages' => 'Artikuj të palidhur', 'lonelypagestext' => 'Faqet në vijim nuk janë të lidhura ose nuk janë të përfshira në faqet tjera në {{SITENAME}}.', @@ -1908,34 +1957,40 @@ Protokolle të mbështetura: $1', 'listgrouprights-removegroup-self-all' => 'Hiq të gjitha grupet nga llogaria', # E-mail user -'mailnologin' => "S'ka adresë dërgimi", -'mailnologintext' => 'Duhet të keni [[Special:UserLogin|hyrë brenda]] dhe të keni një adresë të saktë në [[Special:Preferences|parapëlqimet]] tuaja për tu dërguar email përdoruesve të tjerë.', -'emailuser' => 'Email përdoruesit', -'emailpage' => 'Dërgo email përdoruesve', -'emailpagetext' => 'Mund të përdorni formularin e mëposhtëm për të dërguar e-mail tek ky përdorues. +'mailnologin' => "S'ka adresë dërgimi", +'mailnologintext' => 'Duhet të keni [[Special:UserLogin|hyrë brenda]] dhe të keni një adresë të saktë në [[Special:Preferences|parapëlqimet]] tuaja për tu dërguar email përdoruesve të tjerë.', +'emailuser' => 'Email përdoruesit', +'emailpage' => 'Dërgo email përdoruesve', +'emailpagetext' => 'Mund të përdorni formularin e mëposhtëm për të dërguar e-mail tek ky përdorues. Adresa e email-it që shkruat tek [[Special:Preferences|preferencat tuaja]] do të duket si "Nga" adresa e email-it, pra marrësi do të ketë mundësinë t\'ju përgjigjet direkt.', -'usermailererror' => 'Objekti postal ktheu gabimin:', -'defemailsubject' => '{{SITENAME}} email', -'noemailtitle' => "S'ka adresë email-i", -'noemailtext' => 'Ky përdorues nuk ka përcaktuar një adresë të vlefshme e-mail.', -'nowikiemailtitle' => 'Nuk lejohet postë elektronike', -'nowikiemailtext' => 'Ky përdorues ka zgjedhur të mos pranojë porosi elektronike nga përdoruesit tjerë.', -'email-legend' => 'Dërgoni porosi elektronike një përdoruesi të {{SITENAME}}', -'emailfrom' => 'Nga:', -'emailto' => 'Për:', -'emailsubject' => 'Subjekti:', -'emailmessage' => 'Porosia:', -'emailsend' => 'Dërgo', -'emailccme' => 'Ma dërgo edhe mua një kopje të këtij emaili.', -'emailccsubject' => 'Kopje e emailit tuaj për $1: $2', -'emailsent' => 'Email-i u dërgua', -'emailsenttext' => 'Email-i është dërguar.', -'emailuserfooter' => 'Kjo porosi elektronike u dërgua nga $1 tek $2 nga "Dërgoi postë elektronike përdoruesit" funksion në {{SITENAME}}.', +'usermailererror' => 'Objekti postal ktheu gabimin:', +'defemailsubject' => '{{SITENAME}} email', +'usermaildisabled' => 'Email-i i përdoruesit çaktivizua', +'usermaildisabledtext' => 'Ju nuk mund të dërgoni e-mail tek përdoruesit e tjerë në këtë wiki', +'noemailtitle' => "S'ka adresë email-i", +'noemailtext' => 'Ky përdorues nuk ka përcaktuar një adresë të vlefshme e-mail.', +'nowikiemailtitle' => 'Nuk lejohet postë elektronike', +'nowikiemailtext' => 'Ky përdorues ka zgjedhur të mos pranojë porosi elektronike nga përdoruesit tjerë.', +'email-legend' => 'Dërgoni porosi elektronike një përdoruesi të {{SITENAME}}', +'emailfrom' => 'Nga:', +'emailto' => 'Për:', +'emailsubject' => 'Subjekti:', +'emailmessage' => 'Porosia:', +'emailsend' => 'Dërgo', +'emailccme' => 'Ma dërgo edhe mua një kopje të këtij emaili.', +'emailccsubject' => 'Kopje e emailit tuaj për $1: $2', +'emailsent' => 'Email-i u dërgua', +'emailsenttext' => 'Email-i është dërguar.', +'emailuserfooter' => 'Kjo porosi elektronike u dërgua nga $1 tek $2 nga "Dërgoi postë elektronike përdoruesit" funksion në {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Lënia e mesazhit të sistemit.', +'usermessage-editor' => 'I dërguari i sistemit', # Watchlist 'watchlist' => 'Lista mbikqyrëse', 'mywatchlist' => 'Lista mbikqyrëse', -'watchlistfor' => "(për '''$1''')", +'watchlistfor2' => 'Për $1 $2', 'nowatchlist' => 'Nuk keni asnjë faqe në listën mbikqyrëse.', 'watchlistanontext' => 'Ju lutemi $1 për të parë redaktimet e artikujve në listë tuaj mbikqyrëse.', 'watchnologin' => 'Nuk keni hyrë brënda', @@ -2052,7 +2107,10 @@ Redaktimi i fundit është bërë nga [[User:$3|$3]] ([[User talk:$3|diskuto]]{{ 'revertpage' => 'Ndryshimet e [[Special:Contributions/$2|$2]] ([[User talk:$2|diskutimet]]) u kthyen mbrapsht, artikulli tani ndodhet në versionin e fundit nga [[User:$1|$1]].', 'revertpage-nouser' => 'U rikthyen redaktimet nga (përdoruesi i larguar) në versionin e fundit nga [[User:$1|$1]]', 'rollback-success' => 'Ndryshimet e $1 u kthyen mbrapsh; artikulli ndodhet tek verzioni i $2.', -'sessionfailure' => 'Duket se ka një problem me seancën tuaj hyrëse; ky veprim është anuluar për tu mbrojtur nga ndonjë veprim dashakeq kundrejt shfletimit tuaj. Ju lutemi kthehuni mbrapsh, rifreskoni faqen prej nga erdhët dhe provojeni përsëri veprimin.', + +# Edit tokens +'sessionfailure-title' => 'Dështim sesioni', +'sessionfailure' => 'Duket se ka një problem me seancën tuaj hyrëse; ky veprim është anuluar për tu mbrojtur nga ndonjë veprim dashakeq kundrejt shfletimit tuaj. Ju lutemi kthehuni mbrapsh, rifreskoni faqen prej nga erdhët dhe provojeni përsëri veprimin.', # Protect 'protectlogpage' => 'Regjistri i mbrojtjeve', @@ -2182,19 +2240,23 @@ $1', 'month' => 'Nga muaji (dhe më herët):', 'year' => 'Nga viti (dhe më herët):', -'sp-contributions-newbies' => 'Trego vetëm redaktimet e llogarive të reja', -'sp-contributions-newbies-sub' => 'Për newbies', -'sp-contributions-newbies-title' => 'Kontributet e përdoruesit për kontot e reja', -'sp-contributions-blocklog' => 'Regjistri i bllokimeve', -'sp-contributions-deleted' => 'kontributet e grisura', -'sp-contributions-logs' => 'Regjistrat', -'sp-contributions-talk' => 'Diskutoni', -'sp-contributions-userrights' => 'menaxhimi i të drejtave të përdoruesit', -'sp-contributions-blocked-notice' => 'Ky përdorues është i bllokuar. +'sp-contributions-newbies' => 'Trego vetëm redaktimet e llogarive të reja', +'sp-contributions-newbies-sub' => 'Për newbies', +'sp-contributions-newbies-title' => 'Kontributet e përdoruesit për kontot e reja', +'sp-contributions-blocklog' => 'Regjistri i bllokimeve', +'sp-contributions-deleted' => 'kontributet e grisura', +'sp-contributions-uploads' => 'ngarkimet', +'sp-contributions-logs' => 'Regjistrat', +'sp-contributions-talk' => 'Diskutoni', +'sp-contributions-userrights' => 'menaxhimi i të drejtave të përdoruesit', +'sp-contributions-blocked-notice' => 'Ky përdorues është i bllokuar. Bllokimi i fundit është shfaqur më poshtë për referencë:', -'sp-contributions-search' => 'Kërko tek kontributet', -'sp-contributions-username' => 'IP Addresa ose Përdoruesi:', -'sp-contributions-submit' => 'Kërko', +'sp-contributions-blocked-notice-anon' => 'Kjo adresë IP është e bllokuar aktualisht. +Bllokimi i funditë është më poshtë për referencë:', +'sp-contributions-search' => 'Kërko tek kontributet', +'sp-contributions-username' => 'IP Addresa ose Përdoruesi:', +'sp-contributions-toponly' => 'Trego vetëm redaktimet që janë versionet më të fundit', +'sp-contributions-submit' => 'Kërko', # What links here 'whatlinkshere' => 'Lidhjet këtu', @@ -2255,7 +2317,6 @@ Shiko te [[Special:IPBlockList|Lista e përdoruesve dhe e IP adresave të blloku 'ipb-edit-dropdown' => 'Redakto arsyet e bllokimit', 'ipb-unblock-addr' => 'Çblloko $1', 'ipb-unblock' => 'Çblloko përdorues dhe IP të bllokuara', -'ipb-blocklist-addr' => 'Shikoni bllokime në fuqi për $1', 'ipb-blocklist' => 'Përdorues dhe IP adresa të bllokuara', 'ipb-blocklist-contribs' => 'Kontributet për $1', 'unblockip' => 'Çblloko përdoruesin', @@ -2330,6 +2391,8 @@ Ajo është, megjithatë, e bllokuar si pjesë e rangut $2, që nuk mund të zhb 'cant-block-while-blocked' => 'Ju nuk mund të bllokoni përdorues të tjerë ndërkohë që jeni i bllokuar.', 'cant-see-hidden-user' => 'Përdoruesi që po përpiqeni të bllokoni është i bllokuar dhe i fshehur. Përderisa ju nuk keni të drejtën e fshehjes së përdoruesve, ju nuk mund të shikoni ose redaktoni bllokimet e përdoruesit.', +'ipbblocked' => 'Ju nuk mund të bllokoni ose zhbllokoni përdoruesit e tjerë, sepse jeni për vete i bllokuar', +'ipbnounblockself' => 'Ju nuk mund të zhbllokoni veten tuaj', # Developer tools 'lockdb' => 'Blloko regjistrin', @@ -2366,6 +2429,17 @@ Kjo do të thotë se mund ta zhvendosni një faqe prapë tek emri i vjetër n.q. '''KUJDES!''' Ky mund të jetë një ndryshim i madh dhe i papritur për një faqe të shumë-frekuentuar; ju lutem, kini kujdes dhe mendohuni mirë para se të përdorni këtë funksion.", +'movepagetext-noredirectfixer' => "Duke përdorur formularin e mëposhtëm do të ndërroni titullin e një faqeje, duke zhvendosur gjithë historinë përkatëse tek titulli i ri. +Titulli i vjetër do të bëhet një faqe përcjellëse tek titulli i ri. +Lidhjet tek faqja e vjetër nuk do të ndryshohen; +duhet të kontrolloni mirëmbajtjen për përcjellime të [[Special:DoubleRedirects|dyfishta]] ose të [[Special:BrokenRedirects|prishura]]. +Keni përgjegjësinë për tu siguruar që lidhjet të vazhdojnë të jenë të sakta. + +Vini re se kjo faqe '''nuk''' do të zhvendoset n.q.s. ekziston një faqe me titullin e ri, përveçse kur ajo të jetë bosh ose një përcjellim dhe të mos ketë një histori të vjetër. +Kjo do të thotë se mund ta zhvendosni një faqe prapë tek emri i vjetër n.q.s. keni bërë një gabim, dhe s'mund ta prishësh një faqe që ekziston. + +'''KUJDES!''' +Ky mund të jetë një ndryshim i madh dhe gjëra të papritura mund të ndodhin për një faqe të shumë-frekuentuar; ju lutem, kini kujdes dhe mendohuni mirë para se të përdorni këtë funksion.", 'movepagetalktext' => "Faqja a bashkangjitur e diskutimit, n.q.s. ekziston, do të zhvendoset automatikisht '''përveçse''' kur: *Zhvendosni një faqe midis hapësirave të ndryshme, *Një faqe diskutimi jo-boshe ekziston nën titullin e ri, ose @@ -2421,6 +2495,7 @@ Faqja "[[:$1]]" ekziston, dëshironi ta grisni për të mundësuar zhvendosjen?' 'immobile-source-page' => 'Kjo faqe është e pa lëvizshme.', 'immobile-target-page' => 'Nuk mund të zhvendoset tek titulli i destinuar.', 'imagenocrossnamespace' => 'Nuk mund të lëvizet skeda tek hapësira e jo-skedës', +'nonfile-cannot-move-to-file' => 'Nuk mund të lëvizet jo-skeda tek hapësira e skedës', 'imagetypemismatch' => 'Skeda e re nuk përputhet me llojin e vet', 'imageinvalidfilename' => 'Emri i skedës së synuar është i pavlefshëm', 'fix-double-redirects' => 'Përditësoni çdo përcjellim që tregon titullin origjinal', @@ -2496,6 +2571,7 @@ Të gjitha veprimet e importit transwiki janë të regjistruara tek [[Special:Lo 'importstart' => 'Duke importuar faqet...', 'import-revision-count' => '$1 {{PLURAL:$1|version|versione}}', 'importnopages' => "S'ka faqe për tu importuar.", +'imported-log-entries' => 'Importuar $1 {{PLURAL:$1|hyrje|hyrje}}', 'importfailed' => 'Importimi dështoi: $1', 'importunknownsource' => 'Lloj burimi importi i panjohur', 'importcantopen' => 'Nuk mund të hapë skedën e importuar', @@ -2592,6 +2668,8 @@ Ju lutemi provoni përsëri.', 'tooltip-upload' => 'Fillo ngarkimin', 'tooltip-rollback' => '"Rikthimi" rikthen ndryshimet tek kjo faqe nga redaktuesi i fundit vetëm me një klikim.', 'tooltip-undo' => '"Zhbëj" rikthen këtë ndryshim deh hap formën e redaktimit në mënyrë parapamjeje. Lejon që të shtoni një arsye tek përmbledhja.', +'tooltip-preferences-save' => 'Ruaj parapëlqimet', +'tooltip-summary' => 'Fusni një përmbledhje të shkurtër', # Stylesheets 'monobook.css' => '/* redaktoni këtë faqe për të përshtatur pamjen Monobook për tëra faqet tuaja */', @@ -2688,18 +2766,22 @@ $1', 'nextdiff' => 'Ndryshimi më pas →', # Media information -'mediawarning' => "'''Kujdes''': Kjo skedë mund të ketë përmbajtje të dëmshme, duke e përdorur sistemi juaj mund të rrezikohet.", +'mediawarning' => "''Kujdes''': Kjo skedë mund të ketë përmbajtje të dëmshme. +Duke e përdorur sistemi juaj mund të rrezikohet.", 'imagemaxsize' => "Kufizoni madhësinë e fotos:
    ''(për faqet e përshkrimit të skedave)''", 'thumbsize' => 'Madhësia fotove përmbledhëse:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|faqe|faqe}}', -'file-info' => '(madhësia skedës: $1, lloji MIME: $2)', -'file-info-size' => '($1 × $2 pixela, madhësia e skedës: $3, tipi MIME: $4)', +'file-info' => 'madhësia skedës: $1, lloji MIME: $2', +'file-info-size' => '$1 × $2 pixela, madhësia e skedës: $3, tipi MIME: $4', 'file-nohires' => 'Nuk ka rezolucion më të madh.', -'svg-long-desc' => '(skedë SVG, fillimisht $1 × $2 pixel, madhësia e skedës: $3)', +'svg-long-desc' => 'skedë SVG, fillimisht $1 × $2 pixel, madhësia e skedës: $3', 'show-big-image' => 'Rezolucion i plotë', 'show-big-image-thumb' => 'Madhësia e këtij shikimi: $1 × $2 pixel', 'file-info-gif-looped' => 'kthyer', 'file-info-gif-frames' => '$1 {{PLURAL:$1|kornizë|korniza}}', +'file-info-png-looped' => 'kthyer', +'file-info-png-repeat' => 'luajtur $1 herë', +'file-info-png-frames' => '$1 {{PLURAL:$1|kornizë|korniza}}', # Special:NewFiles 'newimages' => 'Galeria e figurave të reja', @@ -2855,6 +2937,7 @@ Të tjerat do të fshihen. 'exif-gpsareainformation' => 'Emri i zonës GPS', 'exif-gpsdatestamp' => 'E dhënë GPS', 'exif-gpsdifferential' => 'Korrigjim diferencial i GPS', +'exif-objectname' => 'Titull i shkurtër', # EXIF attributes 'exif-compression-1' => 'E pangjeshur', @@ -3012,25 +3095,25 @@ Të tjerat do të fshihen. 'limitall' => 'Të gjitha', # E-mail address confirmation -'confirmemail' => 'Vërtetoni adresën tuaj', -'confirmemail_noemail' => 'Ju nuk keni dhënë email të sakt te [[Special:Preferences|parapëlqimet e juaja]].', -'confirmemail_text' => 'Për të marrë email duhet të vërtetoni adresen tuaj. Shtypni butonin e mëposhtëm për të dërguar një email vërtetimi tek adresa juaj. Email-i do të përmbajë një lidhje me kod të shifruar. Duke ndjekur lidhjen nëpërmjet shfletuesit tuaj do të vërtetoni adresën.', -'confirmemail_pending' => "Një kod vërtetimi ju është dërguar më parë. Nëse sapo hapët llogarinë tuaj prisni disa minuta deri sa t'iu arrijë mesazhi përpara se të kërkoni një kod të ri.", -'confirmemail_send' => 'Dërgo vërtetimin', -'confirmemail_sent' => 'Email-i për vërtetim është dërguar.', -'confirmemail_oncreate' => 'Një kod vërtetimi është dërguar tek adresa juaj e email-it. +'confirmemail' => 'Vërtetoni adresën tuaj', +'confirmemail_noemail' => 'Ju nuk keni dhënë email të sakt te [[Special:Preferences|parapëlqimet e juaja]].', +'confirmemail_text' => 'Për të marrë email duhet të vërtetoni adresen tuaj. Shtypni butonin e mëposhtëm për të dërguar një email vërtetimi tek adresa juaj. Email-i do të përmbajë një lidhje me kod të shifruar. Duke ndjekur lidhjen nëpërmjet shfletuesit tuaj do të vërtetoni adresën.', +'confirmemail_pending' => "Një kod vërtetimi ju është dërguar më parë. Nëse sapo hapët llogarinë tuaj prisni disa minuta deri sa t'iu arrijë mesazhi përpara se të kërkoni një kod të ri.", +'confirmemail_send' => 'Dërgo vërtetimin', +'confirmemail_sent' => 'Email-i për vërtetim është dërguar.', +'confirmemail_oncreate' => 'Një kod vërtetimi është dërguar tek adresa juaj e email-it. Ky kod nuk kërkohet për të hyrë brenda në llogarinë tuaj, por nevojitet për të mundësuar mjetet që përdorin email në këtë wiki.', -'confirmemail_sendfailed' => '{{SITENAME}} nuk mundi ta çojë email-in tuaj konfirmues. +'confirmemail_sendfailed' => '{{SITENAME}} nuk mundi ta çojë email-in tuaj konfirmues. Ju lutemi kontrolloni adresen e emial-it tuaj per gabime ne shkrim. Postieri u kthye: $1', -'confirmemail_invalid' => 'Kodi i shifrimit të vërtetimit është gabim ose ka skaduar.', -'confirmemail_needlogin' => 'Ju duhet të $1 për ta konfirmuar email-adresën', -'confirmemail_success' => 'Adresa juaj është vërtetuar. Mund të hyni brënda dhe të përdorni wiki-n.', -'confirmemail_loggedin' => 'Adresa juaj është vërtetuar.', -'confirmemail_error' => 'Pati gabim gjatë ruajtjes së vërtetimit tuaj.', -'confirmemail_subject' => 'Vërtetim adrese nga {{SITENAME}}', -'confirmemail_body' => 'Dikush, me gjasë ju, nga IP adresa $1, +'confirmemail_invalid' => 'Kodi i shifrimit të vërtetimit është gabim ose ka skaduar.', +'confirmemail_needlogin' => 'Ju duhet të $1 për ta konfirmuar email-adresën', +'confirmemail_success' => 'Adresa juaj është vërtetuar. Mund të hyni brënda dhe të përdorni wiki-n.', +'confirmemail_loggedin' => 'Adresa juaj është vërtetuar.', +'confirmemail_error' => 'Pati gabim gjatë ruajtjes së vërtetimit tuaj.', +'confirmemail_subject' => 'Vërtetim adrese nga {{SITENAME}}', +'confirmemail_body' => 'Dikush, me gjasë ju, nga IP adresa $1, ka regjistruar një llogari "$2" me këtë e-mail adresë në {{SITENAME}}. Për të konfirmuar se kjo llogari ju përket me të vërtetë dhe për të aktivizuar @@ -3044,8 +3127,36 @@ për të anuluar konfirmimin e e-mail adresës: $5 Ky kod i konfirmimit skadon me $4.', -'confirmemail_invalidated' => 'Vërtetimi i adresës së email-it është tërhequr', -'invalidateemail' => 'Tërhiq vërtetimin e email-it', +'confirmemail_body_changed' => 'Dikush, me gjasë ju, nga IP adresa $1, +ka ndryshuar e-mail adresën e llogarisë "$2" me këtë adresë në {{SITENAME}}. + +Për të konfirmuar se kjo llogari ju përket me të vërtetë dhe për të rizaktivizuar +funksionet e \'\'e-mail\'\'-it në {{SITENAME}}, hapni këtë lidhje në shfletuesin tuaj: + +$3 + +Nëse llogaria *nuk* ju përket, ndiqni këtë lidhje +për të anuluar konfirmimin e e-mail adresës: + +$5 + +Ky kod i konfirmimit skadon me $4.', +'confirmemail_body_set' => 'Dikush, me gjasë ju, nga IP adresa $1, +ka ndryshuar e-mail adresën e llogarisë "$2" me këtë adresë në {{SITENAME}}. + +Për të konfirmuar se kjo llogari ju përket me të vërtetë dhe për të riaktivizuar +funksionet e \'\'e-mail\'\'-it në {{SITENAME}}, hapni këtë lidhje në shfletuesin tuaj: + +$3 + +Nëse llogaria *nuk* ju përket, ndiqni këtë lidhje +për të anuluar konfirmimin e e-mail adresës: + +$5 + +Ky kod i konfirmimit skadon me $4.', +'confirmemail_invalidated' => 'Vërtetimi i adresës së email-it është tërhequr', +'invalidateemail' => 'Tërhiq vërtetimin e email-it', # Scary transclusion 'scarytranscludedisabled' => '[Lidhja Interwiki nuk është i mundshëm]', @@ -3085,6 +3196,7 @@ Ju lutem konfirmoni nëse dëshironi me të vertetë ta rikrijoni këtë artikul 'table_pager_first' => 'Faqja e parë', 'table_pager_last' => 'Faqja e fundit', 'table_pager_limit' => 'Trego $1 rreshta për faqe', +'table_pager_limit_label' => 'Artikuj per faqe:', 'table_pager_limit_submit' => 'Shko', 'table_pager_empty' => "S'ka rezultate", @@ -3140,6 +3252,7 @@ Ju gjithashtu mund [[Special:Watchlist/edit|të përdorni redaktuesin standart]] 'version-specialpages' => 'Faqe speciale', 'version-parserhooks' => 'Parser goditje', 'version-variables' => 'Variabël', +'version-skins' => 'Pamjet', 'version-other' => 'Të tjera', 'version-mediahandlers' => 'Mbajtesit e Media-s', 'version-hooks' => 'Goditjet', @@ -3151,6 +3264,13 @@ Ju gjithashtu mund [[Special:Watchlist/edit|të përdorni redaktuesin standart]] 'version-hook-subscribedby' => 'Abonuar nga', 'version-version' => '(Versioni $1)', 'version-license' => 'Licensa', +'version-poweredby-credits' => "Ky wiki është mundësuar nga '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'të tjerë', +'version-license-info' => 'MediaWiki është një softuer i lirë; ju mund ta shpërndani dhe redakatoni atë nën kushtet GNU General Public License si e publikuar nga fondacioni Free Software; ose versioni 2 i licensës, ose çdo version më i vonshëm. + +MediaWiki është shpërndarë me shpresën se do të jetë i dobishëm, por PA ASNJË GARANCI; as garancinë e shprehur të SHITJES apo PËRDORIMIT PËR NJË QËLLIM TË CAKTUAR. Shikoni GNU General Public License për më shumë detaje. + +Ju duhet të keni marrë [{{SERVER}}{{SCRIPTPATH}}/COPYING një kopje të GNU General Public License] së bashku me këtë program; nëse jo, shkruani tek Free Software Foundation, Inc., 51 Rruga Franklin, Kati i pestë, Boston, MA 02110-1301, ShBA ose [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html lexojeni atë online].', 'version-software' => 'Softuerët e instaluar', 'version-software-product' => 'Produkti', 'version-software-version' => 'Versioni', @@ -3220,6 +3340,15 @@ Faqet speciale normale. 'tags-edit' => 'redakto', 'tags-hitcount' => '$1 {{PLURAL:$1|ndryshim|ndryshime}}', +# Special:ComparePages +'comparepages' => 'Krahasoni faqet', +'compare-selector' => 'Krahasoni versionet e faqeve', +'compare-page1' => 'Faqe 1', +'compare-page2' => 'Faqe 2', +'compare-rev1' => 'Version 1', +'compare-rev2' => 'Version 2', +'compare-submit' => 'Krahasimi', + # Database error messages 'dberr-header' => 'Kjo wiki ka një problem', 'dberr-problems' => 'Na vjen keq! @@ -3237,8 +3366,13 @@ Kjo faqe është duke përjetuar vështirësi teknike.', 'htmlform-float-invalid' => 'Vlera që ju e specifikuat nuk është numër.', 'htmlform-int-toolow' => 'Vlera që ju e përcaktuat është nën minimumin e $1', 'htmlform-int-toohigh' => 'Vlera që ju e përcaktuat është mbi maksimumin e $1', +'htmlform-required' => 'Kjo vlerë është e nevojshme', 'htmlform-submit' => 'Dërgo', 'htmlform-reset' => 'Zhbëj ndryshimin', 'htmlform-selectorother-other' => 'Gjitha', +# SQLite database support +'sqlite-has-fts' => '$1 me mbështetje të kërkimit me teskt të plotë', +'sqlite-no-fts' => '$1 pa mbështetje të kërkimit me teskt të plotë', + ); diff --git a/languages/messages/MessagesSr.php b/languages/messages/MessagesSr.php index 4fd8913b..406c6f89 100644 --- a/languages/messages/MessagesSr.php +++ b/languages/messages/MessagesSr.php @@ -18,7 +18,7 @@ $linkTrail = '/^([abvgdđežzijklljmnnjoprstćufhcčdžšабвгдђежзиј $messages = array( # Vector skin -'vector-view-viewsource' => 'Погледај код', +'vector-view-viewsource' => 'Изворник', # Special:LinkSearch 'linksearch' => 'Претрага интернет веза', diff --git a/languages/messages/MessagesSr_ec.php b/languages/messages/MessagesSr_ec.php index caca1c1a..ea5f8f8d 100644 --- a/languages/messages/MessagesSr_ec.php +++ b/languages/messages/MessagesSr_ec.php @@ -11,6 +11,7 @@ * @author CERminator * @author Charmed94 * @author FriedrickMILBarbarossa + * @author Helios13 * @author Kale * @author Meno25 * @author Millosh @@ -86,6 +87,67 @@ $datePreferenceMigrationMap = array( 'h:mm d mon y', ); +$specialPageAliases = array( + 'DoubleRedirects' => array( 'Двострука_преусмерења' ), + 'BrokenRedirects' => array( 'Покварена_преусмерења' ), + 'Disambiguations' => array( 'Вишезначне_одреднице' ), + 'CreateAccount' => array( 'ОтвориНалог' ), + 'Preferences' => array( 'Подешавања' ), + 'Watchlist' => array( 'СписакНадгледања' ), + 'Recentchanges' => array( 'СкорашњеИзмене' ), + 'Upload' => array( 'Пошаљи' ), + 'Listfiles' => array( 'СписакСлика' ), + 'Newimages' => array( 'НовиФајлови', 'НовеСлике' ), + 'Listusers' => array( 'СписакКорисника', 'КорисничкиСписак' ), + 'Listgrouprights' => array( 'СписакКорисничкихПрава' ), + 'Statistics' => array( 'Статистике' ), + 'Randompage' => array( 'СлучајнаСтрана' ), + 'Lonelypages' => array( 'Сирочићи' ), + 'Uncategorizedpages' => array( 'ЧланциБезКатегорија' ), + 'Uncategorizedcategories' => array( 'КатегоријеБезКатегорија' ), + 'Uncategorizedimages' => array( 'СликеБезКатегорија', 'ФајловиБезКатегорија' ), + 'Uncategorizedtemplates' => array( 'ШаблониБезКатегорија' ), + 'Unusedcategories' => array( 'НеискоришћенеКатегорије' ), + 'Unusedimages' => array( 'НеискоришћенеСлике', 'НеискоришћениФајлови' ), + 'Wantedpages' => array( 'ТраженеСтране' ), + 'Wantedcategories' => array( 'ТраженеКатегорије' ), + 'Wantedfiles' => array( 'ТраженеСлике' ), + 'Wantedtemplates' => array( 'ТражениШаблони' ), + 'Mostlinked' => array( 'НајповезанијеСтране' ), + 'Mostlinkedcategories' => array( 'НајповезанијеКатегорије' ), + 'Mostlinkedtemplates' => array( 'НајповезанијиШаблони' ), + 'Mostimages' => array( 'НајповезанијеСлике' ), + 'Mostcategories' => array( 'ЧланциСаНајвишеКатегорија' ), + 'Mostrevisions' => array( 'ЧланциСаНајвишеРевизија' ), + 'Fewestrevisions' => array( 'ЧланциСаНајмањеРевизија' ), + 'Shortpages' => array( 'КраткиЧланци' ), + 'Longpages' => array( 'ДугачкеСтране' ), + 'Newpages' => array( 'НовеСтране' ), + 'Ancientpages' => array( 'НајстаријиЧланци' ), + 'Protectedpages' => array( 'ЗаштићенеСтранице' ), + 'Specialpages' => array( 'СпецијалнеСтране' ), + 'Contributions' => array( 'Доприноси' ), + 'Confirmemail' => array( 'ПотврдиЕ-пошту' ), + 'Movepage' => array( 'Преусмери' ), + 'Blockme' => array( 'БлокирајМе' ), + 'Categories' => array( 'Категорије' ), + 'Export' => array( 'Извези' ), + 'Version' => array( 'Верзија' ), + 'Allmessages' => array( 'СвеПоруке' ), + 'Blockip' => array( 'Блокирај', 'БлокирајИП', 'БлокирајКорисника' ), + 'Import' => array( 'Увези' ), + 'Lockdb' => array( 'ЗакључајБазу' ), + 'Unlockdb' => array( 'ОткључајБазу' ), + 'Listredirects' => array( 'СписакПреусмерења' ), + 'Mypage' => array( 'МојаСтраница' ), + 'Mytalk' => array( 'МојРазговор' ), + 'Mycontributions' => array( 'МојиДоприноси' ), + 'Listadmins' => array( 'ПописАдминистратора' ), + 'Listbots' => array( 'ПописБотова' ), + 'Search' => array( 'Претражи' ), + 'Activeusers' => array( 'АктивниКорисници' ), +); + $datePreferences = array( 'default', 'hh:mm d. month y.', @@ -147,18 +209,18 @@ $dateFormats = array( 'h:mm d. mon y. date' => 'j. M Y.', 'h:mm d mon y date' => 'j M Y', - 'hh:mm d. month y. both' =>'H:i, j. F Y.', - 'hh:mm d month y both' =>'H:i, j F Y', - 'hh:mm dd.mm.yyyy both' =>'H:i, d.m.Y', - 'hh:mm d.m.yyyy both' =>'H:i, j.n.Y', - 'hh:mm d. mon y. both' =>'H:i, j. M Y.', - 'hh:mm d mon y both' =>'H:i, j M Y', - 'h:mm d. month y. both' =>'G:i, j. F Y.', - 'h:mm d month y both' =>'G:i, j F Y', - 'h:mm dd.mm.yyyy both' =>'G:i, d.m.Y', - 'h:mm d.m.yyyy both' =>'G:i, j.n.Y', - 'h:mm d. mon y. both' =>'G:i, j. M Y.', - 'h:mm d mon y both' =>'G:i, j M Y', + 'hh:mm d. month y. both' => 'H:i, j. F Y.', + 'hh:mm d month y both' => 'H:i, j F Y', + 'hh:mm dd.mm.yyyy both' => 'H:i, d.m.Y', + 'hh:mm d.m.yyyy both' => 'H:i, j.n.Y', + 'hh:mm d. mon y. both' => 'H:i, j. M Y.', + 'hh:mm d mon y both' => 'H:i, j M Y', + 'h:mm d. month y. both' => 'G:i, j. F Y.', + 'h:mm d month y both' => 'G:i, j F Y', + 'h:mm dd.mm.yyyy both' => 'G:i, d.m.Y', + 'h:mm d.m.yyyy both' => 'G:i, j.n.Y', + 'h:mm d. mon y. both' => 'G:i, j. M Y.', + 'h:mm d mon y both' => 'G:i, j M Y', ); /* NOT USED IN STABLE VERSION */ @@ -217,7 +279,7 @@ $magicWords = array( 'lc' => array( '0', 'ЛЦ:', 'LC:' ), 'uc' => array( '0', 'УЦ:', 'UC:' ), ); -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $messages = array( # User preference toggles @@ -235,8 +297,7 @@ $messages = array( 'tog-editsection' => 'Везе за уређивање појединачних одељака', 'tog-editsectiononrightclick' => 'Уређивање одељака десним кликом на њихове наслове (јаваскрипт)', 'tog-showtoc' => 'Прикажи садржај за странице које имају више од три поднаслова', -'tog-rememberpassword' => 'Памти лозинку кроз више сеанси', -'tog-editwidth' => 'Рашири поље за измене преко целог екрана', +'tog-rememberpassword' => 'Запамти ме на овом прегледачу (најдуже $1 {{PLURAL:$1|дан|дана|дана}})', 'tog-watchcreations' => 'Додај странице које направим у списак надгледања', 'tog-watchdefault' => 'Додај странице које изменим у списак надгледања', 'tog-watchmoves' => 'Додај странице које преместим у списак надгледања', @@ -381,31 +442,21 @@ $messages = array( 'faqpage' => 'Project:НПП', # Vector skin -'vector-action-addsection' => '+', -'vector-action-delete' => 'Обриши', -'vector-action-move' => 'Премести', -'vector-action-protect' => 'Заштити', -'vector-action-undelete' => 'Врати', -'vector-action-unprotect' => 'Скини заштиту', -'vector-namespace-category' => 'Категорија', -'vector-namespace-help' => 'Страна помоћи', -'vector-namespace-image' => 'Датотека', -'vector-namespace-main' => 'Страница', -'vector-namespace-media' => 'Страница на податотека', -'vector-namespace-mediawiki' => 'Порука', -'vector-namespace-project' => 'Пројекат', -'vector-namespace-special' => 'Посебна страница', -'vector-namespace-talk' => 'Разговор', -'vector-namespace-template' => 'Шаблон', -'vector-namespace-user' => 'Корисник', -'vector-view-create' => 'Направи', -'vector-view-edit' => 'Уреди', -'vector-view-history' => 'Историја', -'vector-view-view' => 'Читај', -'vector-view-viewsource' => 'Изворник', -'actions' => 'Акције', -'namespaces' => 'Именски простори', -'variants' => 'Варијанте', +'vector-action-addsection' => '+', +'vector-action-delete' => 'Обриши', +'vector-action-move' => 'Премести', +'vector-action-protect' => 'Заштити', +'vector-action-undelete' => 'Врати', +'vector-action-unprotect' => 'Скини заштиту', +'vector-simplesearch-preference' => 'Проширени предлози за претрагу (само за тему Вектор)', +'vector-view-create' => 'Направи', +'vector-view-edit' => 'Уреди', +'vector-view-history' => 'Историја', +'vector-view-view' => 'Читај', +'vector-view-viewsource' => 'Изворник', +'actions' => 'Акције', +'namespaces' => 'Именски простори', +'variants' => 'Варијанте', 'errorpagetitle' => 'Грешка', 'returnto' => 'Повратак на $1.', @@ -466,6 +517,9 @@ $messages = array( Сачекате неко време пре него што поново покушате да јој приступите. $1', +'pool-timeout' => 'Истек времена чека на закључавање', +'pool-queuefull' => 'Скуп процеса је пун', +'pool-errorunknown' => 'Непозната грешка', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'О пројекту {{SITENAME}}', @@ -635,7 +689,8 @@ $2', 'yourname' => 'Корисничко име:', 'yourpassword' => 'Лозинка:', 'yourpasswordagain' => 'Потврдите лозинку:', -'remembermypassword' => 'Запамти ме на овом рачунару', +'remembermypassword' => 'Запамти ме на овом прегледачу (најдуже $1 {{PLURAL:$1|дан|дана|дана}})', +'securelogin-stick-https' => 'Останите повезани на HTTPS након пријаве', 'yourdomainname' => 'Домен:', 'externaldberror' => 'Дошло је до грешке при идентификацији базе података или немате овлашћења да ажурирате свој спољни налог.', 'login' => 'Пријави ме', @@ -652,6 +707,7 @@ $2', 'gotaccount' => "Имате налог? Идите на страницу ''$1''.", 'gotaccountlink' => 'Пријава', 'createaccountmail' => 'Е-поштом', +'createaccountreason' => 'Разлог:', 'badretype' => 'Лозинке које сте унели се не поклапају.', 'userexists' => 'Корисничко име је заузето. Изаберите друго.', 'loginerror' => 'Грешка при пријављивању', @@ -675,6 +731,7 @@ $2', 'wrongpasswordempty' => 'Нисте унели лозинку. Покушајте поново.', 'passwordtooshort' => 'Лозинка мора имати најмање {{PLURAL:$1|један знак|$1 знака|$1 знакова}}.', 'password-name-match' => 'Лозинка се мора разликовати од корисничког имена.', +'password-login-forbidden' => 'Коришћење овог корисничког имена и лозинке је забрањено.', 'mailmypassword' => 'Пошаљи ми нову лозинку', 'passwordremindertitle' => '{{SITENAME}} – подсетник за лозинку', 'passwordremindertext' => 'Неко, вероватно ви, са ИП адресе $1 је затражио нову лозинку на викију {{SITENAME}} ($4). @@ -715,6 +772,9 @@ $2', 'loginlanguagelabel' => 'Језик: $1', 'suspicious-userlogout' => 'Ваш захтев за одјаву је одбијен јер је послат од стране неисправног прегледача или посредника.', +# E-mail sending +'php-mail-error-unknown' => 'Непозната грешка у функцији PHP mail()', + # Password reset dialog 'resetpass' => 'Промена лозинке', 'resetpass_announce' => 'Пријављени сте с привременом лозинком. @@ -768,10 +828,12 @@ $2', 'showdiff' => 'Прикажи измене', 'anoneditwarning' => "'''Пажња:''' Нисте пријављени. Ваша IP адреса ће бити забележена у историји ове странице.", +'anonpreviewwarning' => "''Нисте пријављени. Ваша IP адреса ће бити забележена у историји ове странице.''", 'missingsummary' => "'''Напомена:''' нисте унели сажетак измене. Ако поново кликнете на „{{int:savearticle}}“, ваша измена ће бити сачувана без сажетка.", 'missingcommenttext' => 'Унесите коментар испод.', -'missingcommentheader' => "'''Подсетник:''' Нисте навели наслов овог коментара. Уколико кликнете ''Сними поново'', ваш коментар ће бити снимљен без наслова.", +'missingcommentheader' => "'''Напомена:''' нисте унели тему/наслов овог коментара. +Ако поново кликнете на „{{int:savearticle}}“, ваша измена ће бити сачувана без теме/наслова.", 'summary-preview' => 'Преглед сажетка:', 'subject-preview' => 'Преглед теме/наслова:', 'blockedtitle' => 'Корисник је блокиран.', @@ -849,7 +911,12 @@ $2', '''Страница још увек није сачувана.'''", 'userjspreview' => "'''Ово је само преглед јаваскрипта.''' '''Страница још увек није сачувана.'''", -'userinvalidcssjstitle' => "'''Пажња:''' Не постоји кожа \"\$1\". Запамтите да личне .css и .js странице користе мала почетна слова, нпр. {{ns:user}}:Петар/monobook.css а не {{ns:user}}:Петар/Monobook.css.", +'sitecsspreview' => "'''Ово је само преглед CSS-а.''' +'''Страница још увек није сачувана.'''", +'sitejspreview' => "'''Ово је само преглед јаваскрипта.''' +'''Страница још увек није сачувана.'''", +'userinvalidcssjstitle' => "'''Упозорење:''' не постоји тема „$1“. +Прилагођене странице CSS и јаваскрипт почињу малим словом, нпр. {{ns:user}}:Foo/vector.css, а не {{ns:user}}:Foo/Vector.css.", 'updated' => '(Ажурирано)', 'note' => "'''Напомена:'''", 'previewnote' => "'''Ово је само преглед.''' @@ -890,7 +957,6 @@ $2', Ако не желите да се ваши прилози немилосрдно мењају, не шаљите их овде.
    Такође нам обећавате да сте ово сами написали или умножили с извора у јавном власништву (погледајте $1 за детаље). '''Не шаљите радове заштићене ауторским правима без дозволе!'''", -'longpagewarning' => "'''ПАЖЊА: Ова страница има $1 килобајта; неки браузери имају проблема са уређивањем страница које имају близу или више од 32 килобајта. Молимо вас да размотрите разбијање странице на мање делове.'''", 'longpageerror' => "'''Грешка: текст који сте унели је величине $1 килобајта, што је веће од дозвољених $2 килобајта. Страница не може бити сачувана.'''", 'readonlywarning' => "'''Упозорење: база података је закључана ради одржавања, тако да нећете моћи да сачувате измене. @@ -1070,6 +1136,8 @@ $1", 'logdelete-failure' => "'''Видљивост историје није постављена:''' $1", 'revdel-restore' => 'промени видљивост', +'revdel-restore-deleted' => 'обрисане измене', +'revdel-restore-visible' => 'видљиве измене', 'pagehist' => 'Историја странице', 'deletedhist' => 'Обрисана историја', 'revdelete-content' => 'садржај', @@ -1139,11 +1207,13 @@ $1", # Diffs 'history-title' => 'Историја измена за „$1“', 'difference' => '(разлике између измена)', +'difference-multipage' => '(разлике између страница)', 'lineno' => 'Линија $1:', 'compareselectedversions' => 'Упореди изабране измене', 'showhideselectedversions' => 'Прикажи/сакриј изабране измене', 'editundo' => 'поништи', -'diff-multi' => '({{PLURAL:$1|Једна ревизија није приказана|$1 ревизије нису приказане|$1 ревизија није приказано}}.)', +'diff-multi' => '({{PLURAL:$1|није приказана међуизмена|нису приказане $1 међуизмене|није приказано $1 међуизмена}} {{PLURAL:$2|једног|$2|$2}} корисника)', +'diff-multi-manyusers' => '({{PLURAL:$1|Није приказана међуизмена|Нису приказане $1 међуизмене|Није приказано $1 међуизмена}} од више од $2 {{PLURAL:$2|корисника|корисника|корисника}})', # Search results 'searchresults' => 'Резултати претраге', @@ -1178,6 +1248,7 @@ $1", 'searchprofile-everything-tooltip' => 'Претражи сав садржај (укључујући странице за разговор)', 'searchprofile-advanced-tooltip' => 'Тражи у прилагођеним именским просторима', 'search-result-size' => '$1 ({{PLURAL:$2|1 реч|$2 речи|$2 речи}})', +'search-result-category-size' => '{{PLURAL:$1|1 члан|$1 члана|$1 чланова}}, ({{PLURAL:$2|1 поткатегорија|$2 поткатегорије|$2 поткатегорија}}, {{PLURAL:$3|1 датотека|$3 датотеке|$3 датотека}})', 'search-result-score' => 'Релевантност: $1%', 'search-redirect' => '(преусмерење $1)', 'search-section' => '(одељак $1)', @@ -1255,6 +1326,7 @@ $1", 'contextlines' => 'Линија по поготку:', 'contextchars' => 'Знакова по линији:', 'stub-threshold' => 'Праг за обликовање везе као клице (у бајтовима):', +'stub-threshold-disabled' => 'Онемогућено', 'recentchangesdays' => 'Број дана у скорашњим изменама:', 'recentchangesdays-max' => '(највише $1 {{PLURAL:$1|дан|дана|дана}})', 'recentchangescount' => 'Број измена за приказ:', @@ -1288,6 +1360,7 @@ $1", 'prefs-files' => 'Датотеке', 'prefs-custom-css' => 'Прилагођени CSS', 'prefs-custom-js' => 'Прилагођени јаваскрипт', +'prefs-common-css-js' => 'Дељени CSS/јаваскрипт за све теме:', 'prefs-reset-intro' => 'Можете користити ову страницу да поништите своје поставке на подразумеване вредности. Ова радња се не може вратити.', 'prefs-emailconfirm-label' => 'Потврда е-адресе:', @@ -1328,9 +1401,15 @@ $1", 'prefs-advancedrendering' => 'Напредне поставке', 'prefs-advancedsearchoptions' => 'Напредне поставке', 'prefs-advancedwatchlist' => 'Напредне поставке', -'prefs-display' => 'Опције приказа', +'prefs-displayrc' => 'Поставке приказа', +'prefs-displaysearchoptions' => 'Поставке приказа', +'prefs-displaywatchlist' => 'Поставке приказа', 'prefs-diffs' => 'Разлике', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Е-адреса је исправна', +'email-address-validity-invalid' => 'Унесите исправну е-адресу', + # User rights 'userrights' => 'Управљање корисничким правима', 'userrights-lookup-user' => 'Управљај корисничким групама', @@ -1414,6 +1493,7 @@ $1", 'right-hideuser' => 'блокирање корисничког имена и његово сакривање од јавности', 'right-ipblock-exempt' => 'заобилажење блокирања IP адресе, самоблокирања и блокирања опсега', 'right-proxyunbannable' => 'заобилажење самоблокирања посредника', +'right-unblockself' => 'деблокирање самог себе', 'right-protect' => 'мењање заштићених страница и степена заштите', 'right-editprotected' => 'уређивање заштићених страница (с преносивом заштитом)', 'right-editinterface' => 'уређивање корисничког сучеља', @@ -1436,7 +1516,6 @@ $1", 'right-siteadmin' => 'закључавање и откључавање базе података', 'right-reset-passwords' => 'поништавање туђих лозинки', 'right-override-export-depth' => 'извоз страница укључујући и повазене странице до дубине од пет веза', -'right-versiondetail' => 'Покажи детаљније информације о верзији софтвера', 'right-sendemail' => 'слање е-порука другим корисницима', # User rights log @@ -1487,14 +1566,9 @@ $1", 'recentchanges-legend' => 'Поставке скорашњих измена', 'recentchangestext' => 'Пратите скорашње измене на овој страници.', 'recentchanges-feed-description' => 'Пратите скорашње измене уз помоћ овог довода.', -'recentchanges-label-legend' => 'Легенда: $1.', -'recentchanges-legend-newpage' => '$1 - нова страница', 'recentchanges-label-newpage' => 'Нова страница', -'recentchanges-legend-minor' => '$1 - мала измена', 'recentchanges-label-minor' => 'Мања измена', -'recentchanges-legend-bot' => '$1 - измена бота', 'recentchanges-label-bot' => 'Ову измену је направио бот', -'recentchanges-legend-unpatrolled' => '$1 - непатролирана измена', 'recentchanges-label-unpatrolled' => 'Ова измена још увек није прегледана', 'rcnote' => "Испод {{PLURAL:$1|је '''1''' измена|су последње '''$1''' измене|су последњих '''$1''' измена}} {{PLURAL:$2|претходни дан|у последњa '''$2''' дана|у последњих '''$2''' дана}}, од $4; $5.", 'rcnotefrom' => 'Испод су измене од $3; $4 (до $1 измена).', @@ -1541,6 +1615,9 @@ $1", 'upload_directory_missing' => 'Фасцикла за слање ($1) недостаје и сервер је не може направити.', 'upload_directory_read_only' => 'Сервер не може да пише по фасцикли за слање ($1).', 'uploaderror' => 'Грешка при слању', +'upload-recreate-warning' => "'''Упозорење: датотека с тим називом је обрисана или премештена.''' + +Историја брисања и премештања се налази испод:", 'uploadtext' => "Користите образац испод да бисте послали датотеке. Постојеће датотеке можете пронаћи у [[Special:FileList|списку послатих датотека]], поновна слања су записана у [[Special:Log/upload|историји слања]], а брисања у [[Special:Log/delete|историји брисања]]. @@ -1576,6 +1653,17 @@ $1", 'filetype-banned-type' => '„.$1“ је забрањен тип датотеке. {{PLURAL:$3|Пожељна врста датотеке је|Пожељне врсте датотека су}} $2.', 'filetype-missing' => 'Ова датотека нема екстензију.', +'empty-file' => 'Послата датотека је празна.', +'file-too-large' => 'Послата датотека је превелика.', +'filename-tooshort' => 'Назив датотеке је прекратак.', +'filetype-banned' => 'Врста датотеке је забрањена.', +'verification-error' => 'Ова датотека није прошла проверу.', +'hookaborted' => 'Измена је одбачена од стране куке проширења.', +'illegal-filename' => 'Назив датотеке је забрањен.', +'overwrite' => 'Замењивање постојеће датотеке је забрањено.', +'unknown-error' => 'Дошло је до непознате грешке.', +'tmp-create-error' => 'Привремена датотека није направљена.', +'tmp-write-error' => 'Грешка при писању привремене датотеке.', 'large-file' => 'Препоручљиво је да датотеке не буду веће од $1; ова датотека је $2.', 'largefileserver' => 'Ова датотека прелази ограничење величине.', 'emptyfile' => 'Датотека коју сте послали је празна. @@ -1607,13 +1695,14 @@ $1", 'file-exists-duplicate' => 'Ово је дупликат {{PLURAL:$1|следеће датотеке|следећих датотека}}:', 'file-deleted-duplicate' => 'Датотека истоветна овој ([[:$1]]) је претходно обрисана. Погледајте историју брисања пре поновног слања.', -'successfulupload' => 'Слање је успело.', 'uploadwarning' => 'Упозорење при слању', 'uploadwarning-text' => 'Измените опис датотеке и покушајте поново.', 'savefile' => 'Сачувај датотеку', 'uploadedimage' => '{{GENDER:|је послао|је послала|је послао}} „[[$1]]“', 'overwroteimage' => '{{GENDER:|је послао|је послала|је послао}} ново издање „[[$1]]“', 'uploaddisabled' => 'Слање је онемогућено.', +'copyuploaddisabled' => 'Слање путем URL адресе је онемогућено.', +'uploadfromurl-queued' => 'Слање је стављено на списак чекања.', 'uploaddisabledtext' => 'Слање је онемогућено.', 'php-uploaddisabledtext' => 'Слање датотека је онемогућено у PHP-у. Проверите поставке file_uploads.', @@ -1636,6 +1725,14 @@ $1", Разлог брисања ове датотеке:", 'filename-bad-prefix' => "Назив датотеке коју шаљете почиње са '''\"\$1\"''', а њега обично додељују дигитални фотоапарати. Изаберите назив датотеке који описује њен садржај.", +'upload-success-subj' => 'Успешно слање', +'upload-success-msg' => 'Датотека из [$2] је послата. Доступна је овде: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Грешка при слању', +'upload-failure-msg' => 'Дошло је до проблема при слању из [$2]: + +$1', +'upload-warning-subj' => 'Упозорење при слању', +'upload-warning-msg' => 'Дошло је до грешке при слању из [$2]. Вратите се на [[Special:Upload/stash/$1|страницу за слање датотека]] да бисте решили проблем.', 'upload-proto-error' => 'Неисправан протокол', 'upload-proto-error-text' => 'Слање са спољне локације захтева адресу која почиње са http:// или ftp://.', @@ -1702,6 +1799,7 @@ $1", 'listfiles_search_for' => 'Назив датотеке:', 'imgfile' => 'датотека', 'listfiles' => 'Списак датотека', +'listfiles_thumb' => 'Умањени приказ', 'listfiles_date' => 'Датум', 'listfiles_name' => 'Назив', 'listfiles_user' => 'Корисник', @@ -1816,8 +1914,8 @@ $1", 'statistics-edits' => 'Број измена страница откад постоји {{SITENAME}}', 'statistics-edits-average' => 'Просечан број измена по страници', 'statistics-views-total' => 'Укупно прегледа', +'statistics-views-total-desc' => 'Прегледи непостојећих и посебних страница нису укључени', 'statistics-views-peredit' => 'Прегледа по измени', -'statistics-jobqueue' => 'Дужина [http://www.mediawiki.org/wiki/Manual:Job_queue реда за послове]', 'statistics-users' => 'Уписани корисници ([[Special:ListUsers|списак чланова]])', 'statistics-users-active' => 'Активни корисници', 'statistics-users-active-desc' => 'Корисници који су извршили бар једну радњу {{PLURAL:$1|претходни дан|у последња $1 дана|у последњих $1 дана}}', @@ -1830,9 +1928,9 @@ $1", Страница се сматра вишезначном одредницом ако користи шаблон који је повезан са списком [[MediaWiki:Disambiguationspage]].", 'doubleredirects' => 'Двострука преусмерења', -'doubleredirectstext' => 'Ова страна показује списак страна које преусмеравају на друге стране преусмерења. -Сваки ред садржи везе према првом и другом редиректу, као и циљану страну другог редиректа, која је обично „прави“ чланак, на кога прво преусмерење треба да показује. -Прецртани уноси су већ решени.', +'doubleredirectstext' => 'Ова страница приказује странице које преусмеравају на друга преусмерења. +Сваки ред садржи везе према првом и другом преусмерењу, као и одредишну страницу другог преусмерења која је обично „прави“ чланак на кога прво преусмерење треба да упућује. +Прецртани уноси су већ решени.', 'double-redirect-fixed-move' => '[[$1]] је премештен. Сада је преусмерење на [[$2]].', 'double-redirect-fixer' => 'Исправљач преусмерења', @@ -1856,6 +1954,8 @@ $1", 'nmembers' => '$1 {{PLURAL:$1|члан|члана|чланова}}', 'nrevisions' => '$1 {{PLURAL:$1|измена|измене|измена}}', 'nviews' => '$1 {{PLURAL:$1|преглед|прегледа|прегледа}}', +'nimagelinks' => 'Користи се на $1 {{PLURAL:$1|страници|странице|страница}}', +'ntransclusions' => 'користи се на $1 {{PLURAL:$1|страници|странице|страница}}', 'specialpage-empty' => 'Нема резултата за овај извештај.', 'lonelypages' => 'Сирочићи', 'lonelypagestext' => 'Следеће странице нису повезане с другим страницама, нити су укључене трансклузијом у друге странице.', @@ -1989,7 +2089,7 @@ $1", 'newuserlogpage' => 'Историја отварања налога', 'newuserlogpagetext' => 'Ово је историја нових корисника.', 'newuserlog-byemail' => 'лозинка је послата е-поштом', -'newuserlog-create-entry' => '– нови корисник', +'newuserlog-create-entry' => 'Нови корисник', 'newuserlog-create2-entry' => '{{GENDER:|је отворио|је отворила|је отворио}} налог за $1', 'newuserlog-autocreate-entry' => 'Налог је аутоматски направљен', @@ -2013,34 +2113,40 @@ $1", 'listgrouprights-removegroup-self-all' => 'Уклони све групе са свог налога', # E-mail user -'mailnologin' => 'Нема адресе за слање', -'mailnologintext' => 'Морате бити [[Special:UserLogin|пријављени]] и имати исправну е-адресу у [[Special:Preferences|подешавањима]] да бисте слали е-поруке другим корисницима.', -'emailuser' => 'Пошаљи е-поруку', -'emailpage' => 'Слање е-порука', -'emailpagetext' => 'Користите овај образац да пошаљете е-поруку овом кориснику. +'mailnologin' => 'Нема адресе за слање', +'mailnologintext' => 'Морате бити [[Special:UserLogin|пријављени]] и имати исправну е-адресу у [[Special:Preferences|подешавањима]] да бисте слали е-поруке другим корисницима.', +'emailuser' => 'Пошаљи е-поруку', +'emailpage' => 'Слање е-порука', +'emailpagetext' => 'Користите овај образац да пошаљете е-поруку овом кориснику. Е-адреса коју сте унели у [[Special:Preferences|подешавањима]] ће бити приказана као адреса пошиљаоца, тако да ће прималац поруке моћи да вам одговори.', -'usermailererror' => 'Објекат поште је вратио грешку:', -'defemailsubject' => '{{SITENAME}} е-пошта', -'noemailtitle' => 'Нема е-адресе', -'noemailtext' => 'Овај корисник није навео исправну е-адресу.', -'nowikiemailtitle' => 'Е-пошта није дозвољена', -'nowikiemailtext' => 'Овај корисник је одлучио да не прима е-поруке од других корисника.', -'email-legend' => 'Слање е-порука другом кориснику', -'emailfrom' => 'Од:', -'emailto' => 'За:', -'emailsubject' => 'Наслов:', -'emailmessage' => 'Порука:', -'emailsend' => 'Пошаљи', -'emailccme' => 'Пошаљи ми примерак поруке е-поштом', -'emailccsubject' => 'Примерак ваше поруке за $1: $2', -'emailsent' => 'Порука је послата', -'emailsenttext' => 'Ваша порука је послата е-поштом.', -'emailuserfooter' => 'Ову е-поруку је {{GENDER:|послао|послала|послао}} $1 кориснику $2 путем е-поште с викија {{SITENAME}}.', +'usermailererror' => 'Објекат поште је вратио грешку:', +'defemailsubject' => '{{SITENAME}} е-пошта', +'usermaildisabled' => 'Корисничка е-пошта је онемогућена', +'usermaildisabledtext' => 'Не можете да шаљете е-поруке другим корисницима овог викија', +'noemailtitle' => 'Нема е-адресе', +'noemailtext' => 'Овај корисник није навео исправну е-адресу.', +'nowikiemailtitle' => 'Е-пошта није дозвољена', +'nowikiemailtext' => 'Овај корисник је одлучио да не прима е-поруке од других корисника.', +'email-legend' => 'Слање е-порука другом кориснику', +'emailfrom' => 'Од:', +'emailto' => 'За:', +'emailsubject' => 'Наслов:', +'emailmessage' => 'Порука:', +'emailsend' => 'Пошаљи', +'emailccme' => 'Пошаљи ми примерак поруке е-поштом', +'emailccsubject' => 'Примерак ваше поруке за $1: $2', +'emailsent' => 'Порука је послата', +'emailsenttext' => 'Ваша порука је послата е-поштом.', +'emailuserfooter' => 'Ову е-поруку је {{GENDER:|послао|послала|послао}} $1 кориснику $2 путем е-поште с викија {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Слање системске поруке.', +'usermessage-editor' => 'Уређивач системских порука', # Watchlist 'watchlist' => 'Списак надгледања', 'mywatchlist' => 'Списак надгледања', -'watchlistfor' => "(за '''$1''')", +'watchlistfor2' => 'За $1 $2', 'nowatchlist' => 'Ваш списак надгледања је празан.', 'watchlistanontext' => 'Морате бити $1 да бисте гледали и уређивали ставке на вашем списку надгледања.', 'watchnologin' => 'Нисте пријављени', @@ -2087,23 +2193,25 @@ $1", 'enotif_body' => 'Поштовани $WATCHINGUSERNAME, -Страница $PAGETITLE на викију {{SITENAME}} је $CHANGEDORCREATED дана $PAGEEDITDATE од стране $PAGEEDITOR. -Погледајте $PAGETITLE_URL за текућу измену. +Страница $PAGETITLE на викију {{SITENAME}} је $CHANGEDORCREATED дана $PAGEEDITDATE од стране {{GENDER:$PAGEEDITOR|корисника|кориснице|корисника}} $PAGEEDITOR. Погледајте $PAGETITLE_URL за текућу измену. $NEWPAGE -Сажетак уредника: $PAGESUMMARY $PAGEMINOREDIT +Сажетак: $PAGESUMMARY $PAGEMINOREDIT -Контактирајте уредника: +Контакт: е-адреса: $PAGEEDITOR_EMAIL вики: $PAGEEDITOR_WIKI Неће бити других обавештења у случају даљих измена уколико не посетите ову страницу. -Можете и поништити поставке обавештења за све странице у вашем списку надгледања. +Можете и да поништите поставке обавештења за све странице у вашем списку надгледања. - Срдачан поздрав, {{SITENAME}} +Срдачан поздрав, {{SITENAME}} -- +Да бисте променили поставке у вези с е-обавештењима, посетите +{{fullurl:{{#special:Preferences}}}} + Да бисте променили поставке у вези са списком надгледања, посетите {{fullurl:{{#special:Watchlist}}/edit}} @@ -2162,7 +2270,10 @@ $UNWATCHURL 'revertpage-nouser' => 'Враћене су измене корисника (корисничко име је уклоњено) на последњу измену члана [[User:$1|$1]]', 'rollback-success' => 'Измене је {{GENDER:|вратио|вратила|вратио}} $1; враћена је последња измена {{GENDER:$2|корисника|кориснице|корисника}} $2.', -'sessionfailure' => 'Изгледа да постоји проблем с вашом сесијом; + +# Edit tokens +'sessionfailure-title' => 'Сесија је окончана', +'sessionfailure' => 'Изгледа да постоји проблем с вашом сесијом; ова радња је отказана да би се избегла злоупотреба. Вратите се на претходну страницу, поново је учитајте и покушајте поново.', @@ -2299,19 +2410,23 @@ $1', 'month' => 'од месеца (и раније):', 'year' => 'од године (и раније):', -'sp-contributions-newbies' => 'Прикажи само прилоге нових налога', -'sp-contributions-newbies-sub' => 'За новајлије', -'sp-contributions-newbies-title' => 'Прилози корисника с новим налозима', -'sp-contributions-blocklog' => 'историја блокирања', -'sp-contributions-deleted' => 'обрисани прилози', -'sp-contributions-logs' => 'историје', -'sp-contributions-talk' => 'разговор', -'sp-contributions-userrights' => 'подешавање корисничких права', -'sp-contributions-blocked-notice' => 'Овај корисник је тренутно блокиран. +'sp-contributions-newbies' => 'Прикажи само прилоге нових налога', +'sp-contributions-newbies-sub' => 'За новајлије', +'sp-contributions-newbies-title' => 'Прилози корисника с новим налозима', +'sp-contributions-blocklog' => 'историја блокирања', +'sp-contributions-deleted' => 'обрисани прилози', +'sp-contributions-uploads' => 'слања', +'sp-contributions-logs' => 'историје', +'sp-contributions-talk' => 'разговор', +'sp-contributions-userrights' => 'подешавање корисничких права', +'sp-contributions-blocked-notice' => 'Овај корисник је тренутно блокиран. Последњи унос у дневник блокирања је понуђен испод као референца:', -'sp-contributions-search' => 'Претрага прилога', -'sp-contributions-username' => 'IP адреса или корисничко име:', -'sp-contributions-submit' => 'Претражи', +'sp-contributions-blocked-notice-anon' => 'Овој IP адреси је тренутно забрањен приступ. +Извештај о блокираним корисницима се налази испод:', +'sp-contributions-search' => 'Претрага прилога', +'sp-contributions-username' => 'IP адреса или корисничко име:', +'sp-contributions-toponly' => 'Прикажи само најновије измене', +'sp-contributions-submit' => 'Претражи', # What links here 'whatlinkshere' => 'Шта је повезано овде', @@ -2375,12 +2490,11 @@ $1', 'ipb-edit-dropdown' => 'Уреди разлоге блокирања', 'ipb-unblock-addr' => 'Деблокирај $1', 'ipb-unblock' => 'Деблокирај корисничко име или IP адресу', -'ipb-blocklist-addr' => 'Постојећи блокови за $1', 'ipb-blocklist' => 'Погледај постојећа блокирања', 'ipb-blocklist-contribs' => 'Прилози за $1', 'unblockip' => 'Деблокирај корисника', 'unblockiptext' => 'Користите образац испод да бисте вратили право писања блокираној IP адреси или корисничком имену.', -'ipusubmit' => 'Уклони ово блокирање', +'ipusubmit' => 'Деблокирај', 'unblocked' => '[[User:$1|$1]] је деблокиран', 'unblocked-id' => 'Блокирање $1 је уклоњено', 'ipblocklist' => 'Блокирани корисници', @@ -2414,7 +2528,7 @@ $1', 'blocklog-showsuppresslog' => '{{GENDER:|Овај корисник је раније блокиран и сакривен|Ова корисница је раније блокирана и сакривена|Овај корисник је раније блокиран и сакривен}}. Историја сакривања се налази испод:', 'blocklogentry' => 'је блокирао „[[$1]]” са временом истицања блокаде од $2 $3', -'reblock-logentry' => 'промењена подешавања блока за [[$1]] са временом истека $2 ($3)', +'reblock-logentry' => 'је променио подешавања блока за [[$1]] са временом истека $2 ($3)', 'blocklogtext' => 'Ово је историја блокирања корисника. Аутоматски забрањене IP адресе нису исписане овде. Погледајте [[Special:IPBlockList|забрањене IP адресе]] за списак тренутних блокова.', @@ -2450,6 +2564,8 @@ $1 је већ блокиран. Да ли желите да промените 'cant-block-while-blocked' => 'Не можете да блокирате друге кориснике док сте блокирани.', 'cant-see-hidden-user' => 'Члан коме желите да забраните приступ је већ блокиран и сакривен. С обзиром на то да немате права за сакривање корисника, не можете да видите нити измените забрану.', +'ipbblocked' => 'Не можете забранити или вратити приступ другим корисницима јер сте и сами блокирани', +'ipbnounblockself' => 'Није вам дозвољено да деблокирате себе', # Developer tools 'lockdb' => 'Закључај базу', @@ -2488,6 +2604,17 @@ $1 је већ блокиран. Да ли желите да промените Страница '''неће''' бити премештена ако већ постоји страница с тим именом, осим ако је она празна, садржи преусмерење или нема историју измена. То значи да можете вратити страницу на претходно место ако погрешите, али не можете заменити постојећу страницу. +'''Пажња!''' +Ово може представљати драстичну и неочекивану измену за популарну страницу; +добро размислите о последицама пре него што наставите.", +'movepagetext-noredirectfixer' => "Доњи образац ће преименовати страницу, премештајући целу историју на ново име. +Стари наслов постаће преусмерење на нови наслов. +Погледајте [[Special:DoubleRedirects|двострука]] или [[Special:BrokenRedirects|неисправна]] преусмерења. +На вама је одговорност да везе и даље иду тамо где би требало да иду. + +Страница '''неће''' бити премештена ако већ постоји страница с тим именом, осим ако је она празна, садржи преусмерење или нема историју измена. +То значи да можете вратити страницу на претходно место ако погрешите, али не можете заменити постојећу страницу. + '''Пажња!''' Ово може представљати драстичну и неочекивану измену за популарну страницу; добро размислите о последицама пре него што наставите.", @@ -2549,6 +2676,7 @@ $1 је већ блокиран. Да ли желите да промените 'immobile-source-page' => 'Ова страница се не може преместити.', 'immobile-target-page' => 'Не може да се премести на циљани наслов.', 'imagenocrossnamespace' => 'Датотека се не може преместити у именски простор који не припада датотекама.', +'nonfile-cannot-move-to-file' => 'Не-датотеке не можете преместити у именски простор за датотеке', 'imagetypemismatch' => 'Нови наставак за фајлове се не поклапа са својим типом.', 'imageinvalidfilename' => 'Циљано име фајла је погрешно.', 'fix-double-redirects' => 'Освежава било које преусмерење које веже на оригинални наслов', @@ -2628,6 +2756,7 @@ $1 је већ блокиран. Да ли желите да промените 'importstart' => 'Увожење страница у току...', 'import-revision-count' => '$1 {{PLURAL:$1|ревизија|ревизије|ревизија}}', 'importnopages' => 'Нема страница за увоз.', +'imported-log-entries' => '{{PLURAL:$1|Увезена је $1 ставка извештаја|Увезене су $1 ставке извештаја|Увезено је $1 ставки извештаја}}.', 'importfailed' => 'Увоз није успео: $1', 'importunknownsource' => 'Непознати тип извора уноса', 'importcantopen' => 'Неуспешно отварање фајла за увоз', @@ -2722,6 +2851,8 @@ $1 је већ блокиран. Да ли желите да промените 'tooltip-upload' => 'Почни слање', 'tooltip-rollback' => '„Врати“ враћа последње измене корисника у једном кораку (клику)', 'tooltip-undo' => 'Враћа ову измену и отвара образац за уређивање.', +'tooltip-preferences-save' => 'Сачувај поставке', +'tooltip-summary' => 'Унесите кратак сажетак', # Stylesheets 'common.css' => '/** CSS стављен овде ће се односити на све коже */', @@ -2820,14 +2951,17 @@ $1', 'imagemaxsize' => "Ограничење величине слике:
    ''(за стране описа фајлова)''", 'thumbsize' => 'Величина умањеног приказа :', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|страница|странице|страница}}', -'file-info' => '(величина фајла: $1, MIME тип: $2)', -'file-info-size' => '($1 × $2 пиксела, величина фајла: $3, MIME тип: $4)', +'file-info' => 'величина: $1, MIME тип: $2', +'file-info-size' => '$1×$2 пиксела, величина: $3, MIME тип: $4', 'file-nohires' => 'Није доступна већа величина.', -'svg-long-desc' => '(SVG фајл, номинално $1 × $2 пиксела, величина фајла: $3)', +'svg-long-desc' => 'SVG датотека, номинално $1×$2 тачака, величина: $3', 'show-big-image' => 'Пуна величина', 'show-big-image-thumb' => 'Величина овог приказа: $1×$2 пиксела', 'file-info-gif-looped' => 'петља', 'file-info-gif-frames' => '$1 {{PLURAL:$1|кадар|кадра|кадрова}}', +'file-info-png-looped' => 'петља', +'file-info-png-repeat' => 'поновљено $1 {{PLURAL:$1|пут|пута|пута}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|кадар|кадра|кадрова}}', # Special:NewFiles 'newimages' => 'Галерија нових слика', @@ -2987,6 +3121,7 @@ $1', 'exif-gpsareainformation' => 'Име GPS подручја', 'exif-gpsdatestamp' => 'GPS датум', 'exif-gpsdifferential' => 'GPS диференцијална исправка', +'exif-objectname' => 'Кратак наслов', # EXIF attributes 'exif-compression-1' => 'Несажето', @@ -3147,29 +3282,29 @@ $1', 'limitall' => 'све', # E-mail address confirmation -'confirmemail' => 'Потврда е-адресе', -'confirmemail_noemail' => 'Немате потврђену адресу ваше е-поште у вашим [[Special:Preferences|корисничким подешавањима интерфејса]].', -'confirmemail_text' => '{{SITENAME}} захтева да потврдите е-адресу пре него што почнете да користите могућности е-поште. +'confirmemail' => 'Потврда е-адресе', +'confirmemail_noemail' => 'Немате потврђену адресу ваше е-поште у вашим [[Special:Preferences|корисничким подешавањима интерфејса]].', +'confirmemail_text' => '{{SITENAME}} захтева да потврдите е-адресу пре него што почнете да користите могућности е-поште. Кликните на дугме испод за слање поруке на вашу е-адресу. У поруци ће се налазити веза с потврдним кодом; унесите је у прегледач да бисте потврдили да је ваша е-адреса исправна.', -'confirmemail_pending' => 'Код потврде је већ послат на Вашу е-пошру; +'confirmemail_pending' => 'Код потврде је већ послат на Вашу е-пошру; Ако сте скоро направили Ваш налог, вероватно би требало да одчекате неколико минута, како би код стигао, пре него што затражите нови.', -'confirmemail_send' => 'Пошаљи кôд за потврду', -'confirmemail_sent' => 'Е-пошта за потврђивање послата.', -'confirmemail_oncreate' => 'Код за потврду је послат на вашу имејл адресу. +'confirmemail_send' => 'Пошаљи кôд за потврду', +'confirmemail_sent' => 'Е-пошта за потврђивање послата.', +'confirmemail_oncreate' => 'Код за потврду је послат на вашу имејл адресу. Овај код није потребан да бисте се улоговали, али ће од Вас бити тражено да га приложите да би омогућили погодности Викија везане за коришћење мејлова.', -'confirmemail_sendfailed' => '{{SITENAME}} није успела да пошање е-пошту. +'confirmemail_sendfailed' => '{{SITENAME}} није успела да пошање е-пошту. Проверита адресу због неправилних карактера. Враћено: $1', -'confirmemail_invalid' => 'Потврдни кôд је неисправан. Вероватно је истекао.', -'confirmemail_needlogin' => 'Морате бити $1 да бисте потврдили е-адресу.', -'confirmemail_success' => 'Адреса ваше е-поште је потврђена. Можете сада да се пријавите и уживате у викију.', -'confirmemail_loggedin' => 'Адреса ваше е-поште је сада потврђена.', -'confirmemail_error' => 'Нешто је пошло по злу приликом снимања ваше потврде.', -'confirmemail_subject' => '{{SITENAME}} – потврда е-адресе', -'confirmemail_body' => 'Неко са IP адресе $1 отвори налог „$2“ на сајту {{SITENAME}}, наводећи ову е-адресу. +'confirmemail_invalid' => 'Потврдни кôд је неисправан. Вероватно је истекао.', +'confirmemail_needlogin' => 'Морате бити $1 да бисте потврдили е-адресу.', +'confirmemail_success' => 'Адреса ваше е-поште је потврђена. Можете сада да се пријавите и уживате у викију.', +'confirmemail_loggedin' => 'Адреса ваше е-поште је сада потврђена.', +'confirmemail_error' => 'Нешто је пошло по злу приликом снимања ваше потврде.', +'confirmemail_subject' => '{{SITENAME}} – потврда е-адресе', +'confirmemail_body' => 'Неко са IP адресе $1 отвори налог „$2“ на сајту {{SITENAME}}, наводећи ову е-адресу. Да потврдите да овај налог стварно припада вама, као и да омогућите могућности е-поште, отворите ову везу у прегледачу: @@ -3182,8 +3317,30 @@ $3 $5 Овај потврдни кôд истиче у $4.', -'confirmemail_invalidated' => 'Потврда е-поште је отказана', -'invalidateemail' => 'Отказивање потврде е-поште', +'confirmemail_body_changed' => 'Неко, вероватно ви, са ИП адресе $1 је променио е-адресу налога „$2“ у ову адресу на викију {{SITENAME}}. + +Да бисте потврдили да овај налог стварно припада вама и поново активирали могућности коришћења е-поште на викију {{SITENAME}}, отворите следећу везу у прегледачу: + +$3 + +Ако налог *не* припада вама, пратите следећу везу да бисте отказали потврду е-адресе: + +$5 + +Овај потврдни кôд истиче $6 у $7.', +'confirmemail_body_set' => 'Неко, вероватно ви, са ИП адресе $1 је променио е-адресу налога „$2“ у ову адресу на викију {{SITENAME}}. + +Да бисте потврдили да овај налог стварно припада вама и поново активирали коришћења е-поште на викију {{SITENAME}}, отворите следећу везу у прегледачу: + +$3 + +Ако налог *не* припада вама, пратите следећу везу да бисте отказали потврду е-адресе: + +$5 + +Овај потврдни кôд истиче $6 у $7.', +'confirmemail_invalidated' => 'Потврда е-поште је отказана', +'invalidateemail' => 'Отказивање потврде е-поште', # Scary transclusion 'scarytranscludedisabled' => '[Интервики укључивање је онемогућено]', @@ -3223,6 +3380,7 @@ $1', 'table_pager_first' => 'Прва страница', 'table_pager_last' => 'Последња страница', 'table_pager_limit' => 'Прикажи $1 ставки по страници', +'table_pager_limit_label' => 'Ставки по страници:', 'table_pager_limit_submit' => 'Иди', 'table_pager_empty' => 'Нема резултата', @@ -3281,6 +3439,7 @@ $1', 'version-specialpages' => 'Посебне странице', 'version-parserhooks' => 'Куке рашчлањивача', 'version-variables' => 'Променљиве', +'version-skins' => 'Теме', 'version-other' => 'Остало', 'version-mediahandlers' => 'Руководиоци медијима', 'version-hooks' => 'Куке', @@ -3292,6 +3451,13 @@ $1', 'version-hook-subscribedby' => 'Пријављен од', 'version-version' => '(издање $1)', 'version-license' => 'Лиценца', +'version-poweredby-credits' => "Овај вики покреће '''[http://www.mediawiki.org/ МедијаВики]''', ауторска права © 2001–$1 $2.", +'version-poweredby-others' => 'остали', +'version-license-info' => 'Медијавики је слободан софтвер; можете га расподељивати и мењати под условима ГНУ-ове опште јавне лиценце (ОЈЛ) коју је објавила Задужбина за слободан софтвер, било да је у питању друго или новије издање лиценце. + +Медијавики се расподељује у нади да ће бити користан, али БЕЗ ИКАКВЕ ГАРАНЦИЈЕ; чак и без имплицитне гаранције о ПРОДАЈИ или ПОГОДНОСТИ ЗА ОДРЕЂЕНЕ НАМЕНЕ. Погледајте ГНУ-ову општу јавну лиценцу за више детаља. + +Требало би да сте примили [{{SERVER}}{{SCRIPTPATH}}/COPYING примерак ГНУ-ове опште јавне лиценце] заједно с овим програмом. Ако нисте, пишите Задужбини за слободан софтвер, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA или [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html прочитајте на мрежи].', 'version-software' => 'Инсталиран софтвер', 'version-software-product' => 'Производ', 'version-software-version' => 'Издање', @@ -3362,6 +3528,15 @@ $1', 'tags-edit' => 'уреди', 'tags-hitcount' => '$1 {{PLURAL:$1|измена|измене|измена}}', +# Special:ComparePages +'comparepages' => 'Упоређивање страница', +'compare-selector' => 'Упоређивање измена странице', +'compare-page1' => 'Страна 1:', +'compare-page2' => 'Страна 2:', +'compare-rev1' => 'Ревизија 1:', +'compare-rev2' => 'Ревизија 2:', +'compare-submit' => 'Упореди', + # Database error messages 'dberr-header' => 'Овај вики има проблем', 'dberr-problems' => 'Дошло је до техничких проблема.', @@ -3378,8 +3553,13 @@ $1', 'htmlform-float-invalid' => 'Наведена вредност није број.', 'htmlform-int-toolow' => 'Наведена вредност је испод минимума од $1', 'htmlform-int-toohigh' => 'Наведена вредност је изнад максимума од $1', +'htmlform-required' => 'Ова вредност се мора навести', 'htmlform-submit' => 'Пошаљи', 'htmlform-reset' => 'Врати измене', 'htmlform-selectorother-other' => 'Друго', +# SQLite database support +'sqlite-has-fts' => '$1 с подршком претраге пуног текста', +'sqlite-no-fts' => '$1 без подршке претраге пуног текста', + ); diff --git a/languages/messages/MessagesSr_el.php b/languages/messages/MessagesSr_el.php index d9426460..79b7d2fd 100644 --- a/languages/messages/MessagesSr_el.php +++ b/languages/messages/MessagesSr_el.php @@ -39,7 +39,7 @@ $namespaceNames = array( NS_CATEGORY_TALK => 'Razgovor_o_kategoriji', ); -# Aliases to cyrillic namespaces +# Aliases to cyrillic namespaces $namespaceAliases = array( "Медија" => NS_MEDIA, "Посебно" => NS_SPECIAL, @@ -114,7 +114,7 @@ $dateFormats = array( '6:12, 5. јан 2001.', '6:12, 5 јан 2001', */ - + 'hh:mm d. month y. time' => 'H:i', 'hh:mm d month y time' => 'H:i', 'hh:mm dd.mm.yyyy time' => 'H:i', @@ -129,30 +129,30 @@ $dateFormats = array( 'h:mm d mon y time' => 'G:i', 'hh:mm d. month y. date' => 'j. F Y.', - 'hh:mm d month y date' => 'j F Y', - 'hh:mm dd.mm.yyyy date' => 'd.m.Y', - 'hh:mm d.m.yyyy date' => 'j.n.Y', + 'hh:mm d month y date' => 'j F Y', + 'hh:mm dd.mm.yyyy date' => 'd.m.Y', + 'hh:mm d.m.yyyy date' => 'j.n.Y', 'hh:mm d. mon y. date' => 'j. M Y.', - 'hh:mm d mon y date' => 'j M Y', + 'hh:mm d mon y date' => 'j M Y', 'h:mm d. month y. date' => 'j. F Y.', - 'h:mm d month y date' => 'j F Y', - 'h:mm dd.mm.yyyy date' => 'd.m.Y', - 'h:mm d.m.yyyy date' => 'j.n.Y', + 'h:mm d month y date' => 'j F Y', + 'h:mm dd.mm.yyyy date' => 'd.m.Y', + 'h:mm d.m.yyyy date' => 'j.n.Y', 'h:mm d. mon y. date' => 'j. M Y.', - 'h:mm d mon y date' => 'j M Y', - - 'hh:mm d. month y. both' =>'H:i, j. F Y.', - 'hh:mm d month y both' =>'H:i, j F Y', - 'hh:mm dd.mm.yyyy both' =>'H:i, d.m.Y', - 'hh:mm d.m.yyyy both' =>'H:i, j.n.Y', - 'hh:mm d. mon y. both' =>'H:i, j. M Y.', - 'hh:mm d mon y both' =>'H:i, j M Y', - 'h:mm d. month y. both' =>'G:i, j. F Y.', - 'h:mm d month y both' =>'G:i, j F Y', - 'h:mm dd.mm.yyyy both' =>'G:i, d.m.Y', - 'h:mm d.m.yyyy both' =>'G:i, j.n.Y', - 'h:mm d. mon y. both' =>'G:i, j. M Y.', - 'h:mm d mon y both' =>'G:i, j M Y', + 'h:mm d mon y date' => 'j M Y', + + 'hh:mm d. month y. both' => 'H:i, j. F Y.', + 'hh:mm d month y both' => 'H:i, j F Y', + 'hh:mm dd.mm.yyyy both' => 'H:i, d.m.Y', + 'hh:mm d.m.yyyy both' => 'H:i, j.n.Y', + 'hh:mm d. mon y. both' => 'H:i, j. M Y.', + 'hh:mm d mon y both' => 'H:i, j M Y', + 'h:mm d. month y. both' => 'G:i, j. F Y.', + 'h:mm d month y both' => 'G:i, j F Y', + 'h:mm dd.mm.yyyy both' => 'G:i, d.m.Y', + 'h:mm d.m.yyyy both' => 'G:i, j.n.Y', + 'h:mm d. mon y. both' => 'G:i, j. M Y.', + 'h:mm d mon y both' => 'G:i, j M Y', ); @@ -209,7 +209,7 @@ $magicWords = array( 'ucfirst' => array( '0', 'UCPRVI:', 'UCFIRST:' ), ); -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $messages = array( # User preference toggles @@ -227,8 +227,7 @@ $messages = array( 'tog-editsection' => 'Omogući izmenu delova [uredi] vezama', 'tog-editsectiononrightclick' => 'Omogući izmenu delova desnim klikom
    na njihove naslove (zahteva JavaScript)', 'tog-showtoc' => 'Prikaži sadržaj (u člancima sa više od 3 podnaslova)', -'tog-rememberpassword' => 'Pamti lozinku kroz više seansi', -'tog-editwidth' => 'Raširi polje za izmene preko celog ekrana', +'tog-rememberpassword' => 'Zapamti moju lozinku na ovom računaru (najviše $1 {{PLURAL:$1|dan|dana}})', 'tog-watchcreations' => 'Dodaj stranice koje pravim u moj spisak nadgledanja', 'tog-watchdefault' => 'Dodaj stranice koje menjam u moj spisak nadgledanja', 'tog-watchmoves' => 'Dodaj stranice koje premeštam u moj spisak nadgledanja', @@ -373,31 +372,20 @@ $messages = array( 'faqpage' => 'Project:NPP', # Vector skin -'vector-action-addsection' => '+', -'vector-action-delete' => 'Obriši', -'vector-action-move' => 'Premesti', -'vector-action-protect' => 'Zaštiti', -'vector-action-undelete' => 'Vrati', -'vector-action-unprotect' => 'Skini zaštitu', -'vector-namespace-category' => 'Kategorija', -'vector-namespace-help' => 'Strana pomoći', -'vector-namespace-image' => 'Datoteka', -'vector-namespace-main' => 'Strana', -'vector-namespace-media' => 'Stranica medija', -'vector-namespace-mediawiki' => 'Poruka', -'vector-namespace-project' => 'Projekat', -'vector-namespace-special' => 'Posebna stranica', -'vector-namespace-talk' => 'Razgovor', -'vector-namespace-template' => 'Šablon', -'vector-namespace-user' => 'Korisnik', -'vector-view-create' => 'Napravi', -'vector-view-edit' => 'Uredi', -'vector-view-history' => 'Istorija', -'vector-view-view' => 'Čitaj', -'vector-view-viewsource' => 'Izvornik', -'actions' => 'Akcije', -'namespaces' => 'Imenski prostori', -'variants' => 'Varijante', +'vector-action-addsection' => '+', +'vector-action-delete' => 'Obriši', +'vector-action-move' => 'Premesti', +'vector-action-protect' => 'Zaštiti', +'vector-action-undelete' => 'Vrati', +'vector-action-unprotect' => 'Skini zaštitu', +'vector-view-create' => 'Napravi', +'vector-view-edit' => 'Uredi', +'vector-view-history' => 'Istorija', +'vector-view-view' => 'Čitaj', +'vector-view-viewsource' => 'Izvornik', +'actions' => 'Akcije', +'namespaces' => 'Imenski prostori', +'variants' => 'Varijante', 'errorpagetitle' => 'Greška', 'returnto' => 'Povratak na $1.', @@ -628,7 +616,7 @@ Ne zaboravite da prilagodite svoja [[Special:Preferences|podešavanja]].', 'yourname' => 'Korisničko ime', 'yourpassword' => 'Lozinka:', 'yourpasswordagain' => 'Ponovite lozinku', -'remembermypassword' => 'Zapamti me', +'remembermypassword' => 'Zapamti moju lozinku na ovom računaru (najviše $1 {{PLURAL:$1|dan|dana}})', 'yourdomainname' => 'Domen:', 'externaldberror' => 'Došlo je ili do greške pri spoljašnjoj autentifikaciji baze podataka ili vam nije dozvoljeno da ažurirate svoj spoljašnji nalog.', 'login' => 'Prijavi me', @@ -645,6 +633,7 @@ Ne zaboravite da prilagodite svoja [[Special:Preferences|podešavanja]].', 'gotaccount' => "Imate nalog? Idite na stranicu ''$1''.", 'gotaccountlink' => 'Prijavi me', 'createaccountmail' => 'E-poštom', +'createaccountreason' => 'Razlog:', 'badretype' => 'Lozinke koje ste uneli se ne poklapaju.', 'userexists' => 'Korisničko ime koje ste uneli već je u upotrebi. Molimo izaberite drugo ime.', @@ -665,6 +654,7 @@ Proverite da li ste ga dobro ukucali, ili [[Special:UserLogin/signup|napravite n 'wrongpasswordempty' => 'Lozinka koju ste uneli je prazna. Molimo pokušajte ponovo.', 'passwordtooshort' => 'Lozinka mora imati najmanje {{PLURAL:$1|1 znak|$1 znaka/znakova}}.', 'password-name-match' => 'Vaša lozinka mora biti drugačija od vašeg korisničkog imena.', +'password-login-forbidden' => 'Korišćenje ovog naloga je zabranjeno.', 'mailmypassword' => 'Pošalji mi novu lozinku', 'passwordremindertitle' => '{{SITENAME}} podsetnik za šifru', 'passwordremindertext' => 'Neko (verovatno vi, sa IP adrese $1) je zahtevao da vam pošaljemo novu @@ -759,9 +749,11 @@ Možda ste već uspešno promenili lozinku ili zatražili novu privremenu.', 'showdiff' => 'Prikaži promene', 'anoneditwarning' => "'''Pažnja:''' Niste prijavljeni. Vaša IP adresa će biti zabeležena u istoriji ove stranice.", +'anonpreviewwarning' => "''Niste prijavljeni. Čuvanje će postaviti Vašu IP adresu u stranici za uređivanje.''", 'missingsummary' => "'''Podsetnik:''' Niste uneli opis izmene. Ukoliko kliknete Snimi stranicu ponovo, vaše izmene će biti snimljene bez opisa.", 'missingcommenttext' => 'Molimo unestite komentar ispod.', -'missingcommentheader' => "'''Podsetnik:''' Niste naveli naslov ovog komentara. Ukoliko kliknete ''Snimi ponovo'', vaš komentar će biti snimljen bez naslova.", +'missingcommentheader' => "'''Podsetnik:''' Niste naveli naslov za ovaj komentar. +Ako opet kliknete \"{{int:savearticle}}\", Vaš komentar će biti snimljen bez njega.", 'summary-preview' => 'Pretpregled opisa izmene:', 'subject-preview' => 'Pretpregled predmeta/odeljka:', 'blockedtitle' => 'Korisnik je blokiran', @@ -830,7 +822,7 @@ Podaci o poslednjem blokiranju su priloženi ispod kao dodatna informacija:', 'userjsyoucanpreview' => "'''Savet:''' Korisitite dugme \"{{int:showpreview}}\" da biste testirali svoj novi JavaScript pre snimanja.", 'usercsspreview' => "'''Zapamtite ovo je samo pretpregled vašeg CSS, još uvek nije snimljen!'''", 'userjspreview' => "'''Zapamtite ovo je samo pretpregled vaše JavaScript-e i da još uvek nije snimljen!'''", -'userinvalidcssjstitle' => "'''Pažnja:''' Ne postoji koža \"\$1\". Zapamtite da lične .css i .js koriste mala početna slova, npr. {{ns:user}}:Petar/monobook.css a ne {{ns:user}}:Petar/Monobook.css.", +'userinvalidcssjstitle' => "'''Pažnja:''' Ne postoji koža \"\$1\". Zapamtite da lične .css i .js koriste mala početna slova, npr. {{ns:user}}:Petar/vector.css a ne {{ns:user}}:Petar/Vector.css.", 'updated' => '(Ažurirano)', 'note' => "'''Napomena:'''", 'previewnote' => "'''Ovo samo pretpregled; izmene još nisu sačuvane!'''", @@ -864,7 +856,6 @@ Takođe nam obećavate da ste ovo sami napisali ili prekopirali iz izvora u javn 'copyrightwarning2' => "Napomena: Sve vaše doprinose ostali korisnici mogu da menjaju ili uklone. Ako ne želite da se vaši doprinosi nemilosrdno menjaju, ne šaljite ih ovde.
    Takođe nam obećavate da ste ovo sami napisali ili prekopirali iz izvora u javnom vlasništvu ili sličnog slobodnog izvora (vidite $1 za detalje). '''NE ŠALJITE RADOVE ZAŠTIĆENE AUTORSKIM PRAVIMA BEZ DOZVOLE!'''", -'longpagewarning' => "'''PAŽNJA: Ova stranica ima $1 kilobajta; neki brauzeri imaju problema sa uređivanjem stranica koje imaju blizu ili više od 32 kilobajta. Molimo vas da razmotrite razbijanje stranice na manje delove.'''", 'longpageerror' => "'''GREŠKA: Tekst koji snimate je velik $1 kilobajta, što je veće od maksimalno dozvoljene veličine koja iznosi $2 kilobajta. Nemoguće je snimiti stranicu.'''", 'readonlywarning' => "'''PAŽNJA: Baza je upravo zaključana zbog održavanja, tako da sada nećete moći da snimite svoje izmene. Možda bi bilo dobro da iskopirate tekst u neki editor teksta i sačuvate za kasnije.''' @@ -1023,6 +1014,8 @@ Drugi administratori na {{SITENAME}} će još uvek imati pristup ovom skrivenom $1", 'logdelete-success' => "'''Vidnost loga je uspešno podešena.'''", 'revdel-restore' => 'Promena vidnosti', +'revdel-restore-deleted' => 'izbrisane revizije', +'revdel-restore-visible' => 'vidljive revizije', 'pagehist' => 'Istorija stranice', 'deletedhist' => 'Obrisana istorija', 'revdelete-content' => 'sadržaj', @@ -1078,6 +1071,7 @@ $1", # Diffs 'history-title' => 'Istorija izmena za „$1”', 'difference' => '(Razlika između revizija)', +'difference-multipage' => '(razlike između stranica)', 'lineno' => 'Linija $1:', 'compareselectedversions' => 'Uporedi označene verzije', 'showhideselectedversions' => 'Prikaži/sakrij odabrane revizije', @@ -1256,7 +1250,7 @@ Takođe možete podesiti da drugi mogu da vas kontaktiraju preko vaše korisnič 'prefs-advancedrendering' => 'Napredne opcije', 'prefs-advancedsearchoptions' => 'Napredne opcije', 'prefs-advancedwatchlist' => 'Napredne opcije', -'prefs-display' => 'Opcije prikaza', +'prefs-displayrc' => 'Opcije prikaza', 'prefs-diffs' => 'Revizije', # User rights @@ -1413,14 +1407,9 @@ Takođe možete podesiti da drugi mogu da vas kontaktiraju preko vaše korisnič 'recentchanges-legend' => 'Podešavanja skorašnjih izmena', 'recentchangestext' => 'Ovde pratite najskorije izmene na vikiju.', 'recentchanges-feed-description' => 'Pratite skorašnje izmene uz pomoć ovog fida.', -'recentchanges-label-legend' => 'Legenda: $1.', -'recentchanges-legend-newpage' => '$1 - nova stranica', 'recentchanges-label-newpage' => 'Ovom izmenom je napravljena nova strana.', -'recentchanges-legend-minor' => '$1 - mala izmena', 'recentchanges-label-minor' => 'Ovo je mala izmena', -'recentchanges-legend-bot' => '$1 - izmena bota', 'recentchanges-label-bot' => 'Ovu izmenu je napravio bot', -'recentchanges-legend-unpatrolled' => '$1 - nepatrolirana izmena', 'recentchanges-label-unpatrolled' => 'Ova izmena još uvek nije patrolirana', 'rcnote' => "Ispod {{PLURAL:$1|je '''1''' promena|su poslednje '''$1''' promene|su poslednjih '''$1''' promena}} u {{PLURAL:$2|poslednjem danu|poslednja '''$2''' dana|poslednjih '''$2''' dana}}, od $5, $4.", 'rcnotefrom' => 'Ispod su promene od $2 (do $1 prikazano).', @@ -1500,6 +1489,7 @@ Poželjni {{PLURAL:\$3|tip fajla je|tipovi fajlova su}} \$2.", 'filetype-banned-type' => "'''\".\$1\"''' je zabranjen tip fajla. Poželjni {{PLURAL:\$3|tip fajla je|tipovi fajlova su}} \$2.", 'filetype-missing' => 'Ovaj fajl nema ekstenziju (npr ".jpg").', +'filename-tooshort' => 'Ime fajla je prekratko.', 'large-file' => 'Preporučljivo je da fajlovi ne budu veći od $1; ovaj fajl je $2.', 'largefileserver' => 'Ovaj fajl je veći nego što je podešeno da server dozvoli.', 'emptyfile' => 'Fajl koji ste poslali deluje da je prazan. Ovo je moguće zbog greške u imenu fajla. Molimo proverite da li stvarno želite da pošaljete ovaj fajl.', @@ -1527,7 +1517,6 @@ Molimo vratite se i pošaljite ovaj fajl pod novim imenom. [[File:$1|thumb|cente 'file-exists-duplicate' => 'Ovaj fajl je duplikat {{PLURAL:$1|sledećeg fajla|sledeđih fajlova}}:', 'file-deleted-duplicate' => 'Fajl identičan ovom ([[:$1]]) je već bio obrisan. Trebalo bi da proverite istoriju brisanja fajla pre ponovnog slanja.', -'successfulupload' => 'Uspešno slanje', 'uploadwarning' => 'Upozorenje pri slanju', 'uploadwarning-text' => 'Molimo Vas da izmenite opis fajla ispod i pokušate ponovo.', 'savefile' => 'Snimi fajl', @@ -1553,6 +1542,9 @@ Molimo, proverite podešavanja file_uploads.', Razmislite da li ste sigurni da želite poslati ovaj fajl. Razlog brisanja ovog fajla ranije je:", 'filename-bad-prefix' => "Ime ovog fajla počinje sa '''\"\$1\"''', što nije opisno ime, najčešće je nazvan automatski sa digitalnim fotoaparatom. Molimo izaberite opisnije ime za vaš fajl.", +'upload-success-subj' => 'Uspešno slanje', +'upload-failure-subj' => 'Greška pri slanju', +'upload-warning-subj' => 'Upozorenje pri slanju', 'upload-proto-error' => 'Nekorektni protokol', 'upload-proto-error-text' => 'Slanje eksternih fajlova zahteva URLove koji počinju sa http:// ili ftp://.', @@ -1704,7 +1696,6 @@ Ne zaboravite da proverite ostale poveznice ka šablonima pre nego što ih obri 'statistics-edits-average' => 'Prosečan broj izmena po stranici', 'statistics-views-total' => 'Ukupan broj pregleda', 'statistics-views-peredit' => 'Pregledi po izmeni', -'statistics-jobqueue' => 'Dužina [http://www.mediawiki.org/wiki/Manual:Job_queue reda za poslove]', 'statistics-users' => 'Registrovani [[Special:ListUsers|korisnici]]', 'statistics-users-active' => 'Aktivni korisnici', 'statistics-users-active-desc' => 'Korisnici koji su izvršili makar jednu akciju tokom {{PLURAL:$1|zadnjeg dana|$1 zadnjih dana}}', @@ -1717,9 +1708,9 @@ Ne zaboravite da proverite ostale poveznice ka šablonima pre nego što ih obri Stranica se smatra višeznačnom odrednicom ako koristi šablon koji je upućen sa stranice [[MediaWiki:Disambiguationspage]].", 'doubleredirects' => 'Dvostruka preusmerenja', -'doubleredirectstext' => 'Ova strana pokazuje spisak strana koje preusmeravaju na druge strane preusmerenja. -Svaki red sadrži veze prema prvom i drugom redirektu, kao i ciljanu stranu drugog redirekta, koja je obično „pravi“ članak, na koga prvo preusmerenje treba da pokazuje. -Precrtani unosi su već rešeni.', +'doubleredirectstext' => 'Ova stranica pokazuje spisak stranica koje preusmeravaju na druge stranice preusmerenja. +Svaki red sadrži veze prema prvom i drugom preusmerenju, kao i ciljanu stranicu drugog preusmerenja, koja je obično „pravi“ članak, na koga prvo preusmerenje treba da pokazuje. +Precrtani unosi su već rešeni.', 'double-redirect-fixed-move' => '[[$1]] je premešten, sada je preusmerenje na [[$2]]', 'double-redirect-fixer' => 'Popravljač preusmerenja', @@ -1897,35 +1888,36 @@ Mogle bi Vas interesovati [[{{MediaWiki:Listgrouprights-helppage}}|dodatne infor 'listgrouprights-removegroup-self-all' => 'Ukloni sve grupe sa svog naloga', # E-mail user -'mailnologin' => 'Nema adrese za slanje', -'mailnologintext' => 'Morate biti [[Special:UserLogin|prijavljeni]] i imati ispravnu adresu e-pošte u vašim [[Special:Preferences|podešavanjima]] +'mailnologin' => 'Nema adrese za slanje', +'mailnologintext' => 'Morate biti [[Special:UserLogin|prijavljeni]] i imati ispravnu adresu e-pošte u vašim [[Special:Preferences|podešavanjima]] da biste slali e-poštu drugim korisnicima.', -'emailuser' => 'Pošalji e-poštu ovom korisniku', -'emailpage' => 'Pošalji e-pismo korisniku', -'emailpagetext' => 'Možete koristiti ovaj formular da pošaljete e-poštu ovom korisniku. +'emailuser' => 'Pošalji e-poštu ovom korisniku', +'emailpage' => 'Pošalji e-pismo korisniku', +'emailpagetext' => 'Možete koristiti ovaj formular da pošaljete e-poštu ovom korisniku. Adresa e-pošte koju ste vi uneli u svojim [[Special:Preferences|korisničkim podešavanjima]] će se pojaviti kao "From" adresa poruke, tako da će primalac moći direktno da Vam odgovori.', -'usermailererror' => 'Objekat pošte je vratio grešku:', -'defemailsubject' => '{{SITENAME}} e-pošta', -'noemailtitle' => 'Nema adrese e-pošte', -'noemailtext' => 'Ovaj korisnik nije naveo ispravnu adresu e-pošte.', -'nowikiemailtitle' => 'Nije omogućeno slanje mejlova', -'nowikiemailtext' => 'Ovaj korisnik je onemogućio slanje imejlova od drugih korisnika.', -'email-legend' => 'Pošaljite mejl drugom korisniku na {{SITENAME}}', -'emailfrom' => 'Od:', -'emailto' => 'Za:', -'emailsubject' => 'Naslov:', -'emailmessage' => 'Poruka:', -'emailsend' => 'Pošalji', -'emailccme' => 'Pošalji mi kopiju moje poruke u moje sanduče e-pošte.', -'emailccsubject' => 'Kopija vaše poruke na $1: $2', -'emailsent' => 'Poruka poslata', -'emailsenttext' => 'Vaša poruka je poslata elektronskom poštom.', -'emailuserfooter' => 'Ovaj imejl posla $1 saradniku $2 pomoću "Pošalji imejl" funkcije na sajtu "{{SITENAME}}".', +'usermailererror' => 'Objekat pošte je vratio grešku:', +'defemailsubject' => '{{SITENAME}} e-pošta', +'usermaildisabled' => 'Korisnikova e-pošta je onemogućena', +'usermaildisabledtext' => 'Ne možete da šaljete e-poruke drugim korisnicima ovog vikija', +'noemailtitle' => 'Nema adrese e-pošte', +'noemailtext' => 'Ovaj korisnik nije naveo ispravnu adresu e-pošte.', +'nowikiemailtitle' => 'Nije omogućeno slanje mejlova', +'nowikiemailtext' => 'Ovaj korisnik je onemogućio slanje imejlova od drugih korisnika.', +'email-legend' => 'Pošaljite mejl drugom korisniku na {{SITENAME}}', +'emailfrom' => 'Od:', +'emailto' => 'Za:', +'emailsubject' => 'Naslov:', +'emailmessage' => 'Poruka:', +'emailsend' => 'Pošalji', +'emailccme' => 'Pošalji mi kopiju moje poruke u moje sanduče e-pošte.', +'emailccsubject' => 'Kopija vaše poruke na $1: $2', +'emailsent' => 'Poruka poslata', +'emailsenttext' => 'Vaša poruka je poslata elektronskom poštom.', +'emailuserfooter' => 'Ovaj imejl posla $1 saradniku $2 pomoću "Pošalji imejl" funkcije na sajtu "{{SITENAME}}".', # Watchlist 'watchlist' => 'Spisak nadgledanja', 'mywatchlist' => 'Spisak nadgledanja', -'watchlistfor' => "(za '''$1''')", 'nowatchlist' => 'Nemate ništa na svom spisku nadgledanja.', 'watchlistanontext' => 'Morate biti $1 da biste gledali ili menjali stavke na vašem spisku nadgledanja.', 'watchnologin' => 'Niste prijavljeni', @@ -2049,7 +2041,9 @@ Poslednja izmena od korisnika [[User:$3|$3]] ([[User talk:$3|razgovor]]{{int:pip 'editcomment' => "Komentar izmene je: \"''\$1''\".", 'revertpage' => 'Vraćene izmene od [[{{ns:special}}:Contributions/$2|$2]] ([[User_talk:$2|razgovor]]) na poslednju izmenu od korisnika [[User:$1|$1]]', 'rollback-success' => 'Vraćene izmene od strane $1; na poslednju izmenu od strane $2.', -'sessionfailure' => 'Izgleda da postoji problem sa vašom seansom prijave; + +# Edit tokens +'sessionfailure' => 'Izgleda da postoji problem sa vašom seansom prijave; ova akcija je prekinuta kao predostrožnost protiv preotimanja seansi. Molimo kliknite "back" i ponovo učitajte stranu odakle ste došli, a onda pokušajte ponovo.', @@ -2185,6 +2179,7 @@ $1', 'sp-contributions-newbies-title' => 'Doprinosi korisnika sa novim nalozima', 'sp-contributions-blocklog' => 'istorija blokiranja', 'sp-contributions-deleted' => 'obrisane izmene korisnika', +'sp-contributions-uploads' => 'slanja', 'sp-contributions-logs' => 'istorije', 'sp-contributions-talk' => 'razgovor', 'sp-contributions-userrights' => 'podešavanje korisničkih prava', @@ -2256,13 +2251,12 @@ stranice su vandalizovane).', 'ipb-edit-dropdown' => 'Menjajte razloge bloka', 'ipb-unblock-addr' => 'Deblokiraj $1', 'ipb-unblock' => 'Deblokiraj korisničko ime ili IP adresu', -'ipb-blocklist-addr' => 'Postojeći blokovi za $1', 'ipb-blocklist' => 'Pogledajte postojeće blokove', 'ipb-blocklist-contribs' => 'Doprinosi za $1', 'unblockip' => 'Deblokiraj korisnika', 'unblockiptext' => 'Upotrebite donji upitnik da biste vratili pravo pisanja ranije blokiranoj IP adresi ili korisničkom imenu.', -'ipusubmit' => 'Ukloni ovaj blok', +'ipusubmit' => 'Deblokiraj', 'unblocked' => '[[User:$1|$1]] je deblokiran', 'unblocked-id' => 'Blok $1 je uklonjen', 'ipblocklist' => 'Blokirane IP adrese i korisnička imena', @@ -2293,7 +2287,7 @@ ranije blokiranoj IP adresi ili korisničkom imenu.', 'blocklog-showlog' => 'Ovaj korisnik je već bio blokiran. Dnevnik blokiranja je ponuđen ispod kao referenca:', 'blocklogentry' => 'je blokirao „[[$1]]” sa vremenom isticanja blokade od $2 $3', -'reblock-logentry' => 'promenjena podešavanja bloka za [[$1]] sa vremenom isteka $2 ($3)', +'reblock-logentry' => 'je promenio podešavanja bloka za [[$1]] sa vremenom isteka $2 ($3)', 'blocklogtext' => 'Ovo je istorija blokiranja korisnika. Automatski zabranjene IP adrese nisu ispisane ovde. Pogledajte [[Special:IPBlockList|zabranjene IP adrese]] za spisak trenutnih blokova.', @@ -2302,7 +2296,7 @@ Pogledajte [[Special:IPBlockList|zabranjene IP adrese]] za spisak trenutnih blok 'block-log-flags-nocreate' => 'onemogućeno otvaranje naloga', 'block-log-flags-noautoblock' => 'isključeno automatsko blokiranje', 'block-log-flags-noemail' => 'zabranjena e-pošta', -'block-log-flags-nousertalk' => 'ne može da izmeni sopstvenu stranu za razgovor', +'block-log-flags-nousertalk' => 'zabranjeno uređivanje sopstvene stranice za razgovor', 'block-log-flags-angry-autoblock' => 'omogućen je poboljšani autoblok', 'block-log-flags-hiddenname' => 'korisničko ime sakriveno', 'range_block_disabled' => 'Administratorska mogućnost da blokira blokove IP adresa je isključena.', @@ -2699,10 +2693,10 @@ Njegovim izvršavanjem biste mogli da oštetite Vaš sistem.", 'imagemaxsize' => "Ograničenje veličine slike:
    ''(za strane opisa fajlova)''", 'thumbsize' => 'Veličina umanjenog prikaza :', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|stranica|stranice|stranica}}', -'file-info' => '(veličina fajla: $1, MIME tip: $2)', -'file-info-size' => '($1 × $2 piksela, veličina fajla: $3, MIME tip: $4)', +'file-info' => 'veličina fajla: $1, MIME tip: $2', +'file-info-size' => '$1 × $2 piksela, veličina fajla: $3, MIME tip: $4', 'file-nohires' => 'Nije dostupna veća rezolucija', -'svg-long-desc' => '(SVG fajl, nominalno $1 × $2 piksela, veličina fajla: $3)', +'svg-long-desc' => 'SVG fajl, nominalno $1 × $2 piksela, veličina fajla: $3', 'show-big-image' => 'Puna rezolucija', 'show-big-image-thumb' => 'Veličina ovog prikaza: $1 × $2 piksela', 'file-info-gif-frames' => '$1 {{PLURAL:$1|frejm|frejmova}}', @@ -3234,6 +3228,14 @@ Unesite ime fajla bez prefiksa "{{ns:file}}:".', 'tags-edit' => 'uredi', 'tags-hitcount' => '$1 {{PLURAL:$1|izmena|izmena}}', +# Special:ComparePages +'comparepages' => 'Uporedi strane', +'compare-selector' => 'Upoređivanje izmena stranice', +'compare-page1' => 'Strana 1', +'compare-page2' => 'Strana 2', +'compare-rev2' => 'Revizija 2', +'compare-submit' => 'Uporedi', + # Database error messages 'dberr-header' => 'Ovaj viki ima problem', 'dberr-problems' => 'Žao nam je! Ovaj sajt ima tehničkih poteškoća.', @@ -3250,6 +3252,7 @@ Unesite ime fajla bez prefiksa "{{ns:file}}:".', 'htmlform-float-invalid' => 'Vrednost koju ste zadali nije broj.', 'htmlform-int-toolow' => 'Vrednosti koju ste naveli je ispod minimuma od $1', 'htmlform-int-toohigh' => 'Vrednost koju ste naveli je iznad maksimuma od $1', +'htmlform-required' => 'Ova vrednost se mora navesti', 'htmlform-submit' => 'Pošalji', 'htmlform-reset' => 'Vrati izmene', 'htmlform-selectorother-other' => 'Drugo', diff --git a/languages/messages/MessagesSrn.php b/languages/messages/MessagesSrn.php index fb4c24e6..33ccb266 100644 --- a/languages/messages/MessagesSrn.php +++ b/languages/messages/MessagesSrn.php @@ -165,8 +165,7 @@ $messages = array( 'tog-editsection' => 'Gi primisi fu kenki pisi-papira nanga [kenki]-miti', 'tog-editsectiononrightclick' => "Gi primisi fu kenki pisi-papira nanga wan naki n'a leti-anu sey na tapu wan pisi-ede (JavaScript)", 'tog-showtoc' => 'Sori san de (gi papira nanga moro leki 3 pisi-ede)', -'tog-rememberpassword' => 'Memre mi psawortu', -'tog-editwidth' => 'A kenki boksu span na marki na ala tu sei', +'tog-rememberpassword' => 'Memre mi psawortu (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Tan luku den papira di mi meki', 'tog-watchdefault' => 'Tan luku den papira di mi kenki', 'tog-watchmoves' => 'Tan luku den papira di mi froysi', @@ -462,7 +461,7 @@ No fergiti fu kenki den seti fu yu gi {{SITENAME}}.', 'yourname' => 'Kebroikiman nen:', 'yourpassword' => 'Psa wortu:', 'yourpasswordagain' => 'Psa wortu ete wan leysi:', -'remembermypassword' => 'Tan memre mi kebroikiman nen nanga psa wortu.', +'remembermypassword' => 'Tan memre mi kebroikiman nen nanga psa wortu (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Yu domein:', 'login' => 'Psa kon', 'nav-login-createaccount' => 'Psa kon / meki wan account', @@ -594,9 +593,6 @@ yu kenki no kibri ete!'''", Efu yu no wani dati trawan e kenki noso panya san yu skrifi, no skrifi noti dyaso.
    Yu e pramisi unu dati na yu skrifi disi yusrefi, noso yu teki en puru fu wan fri, opo presi.
    '''NO KEBROIKI SANI DI KIBRI BAKA SKRIFIMAN-LETI, SONDRO FU ABI PRIMISI FU DU SO!'''", -'longpagewarning' => "'''WARSKOW: A papira disi de $1 kilobyte bigi; -Son browser abi problema fu kenki papira di bigi moro leki 32 kb. -Kande yu kan prati a papira disi ini moro pikin pisi.'''", 'templatesused' => 'Template di ben kebroiki tapu a papira disi:', 'templatesusedpreview' => 'Template di ben kebroiki ini a Luku-na-fesi disi:', 'templatesusedsection' => 'Ankra teki opo disi seksi:', @@ -985,7 +981,6 @@ Papira ini [[Special:Watchlist|yu Tan Luku réy]] '''fatu'''.", # Watchlist 'watchlist' => 'Mi Tan Luku réy', 'mywatchlist' => 'Mi Tan luku réy', -'watchlistfor' => "(fu '''$1''')", 'addedwatch' => 'Presi a yu sirey', 'addedwatchtext' => "A papira \"[[:\$1]]\" ben presi a yu [[Special:Watchlist|sirey]]. Folo kenki fu disi papira nanga a taki sey opo [[Special:Watchlist|yu sirey]] nanga sey '''deku''' ini a [[Special:RecentChanges|rey fu bakseywan kenki]]. @@ -1199,9 +1194,9 @@ Yu ka luku a source.', # Media information 'widthheightpage' => '$1×$2, $3 peprewoysi', -'file-info-size' => '($1 × $2 pixel, file marki: $3, MIME-type: $4)', +'file-info-size' => '$1 × $2 pixel, file marki: $3, MIME-type: $4', 'file-nohires' => 'Moro srapu no de.', -'svg-long-desc' => '(SVG file, marki $1 × $2 pixel, bigi: $3)', +'svg-long-desc' => 'SVG file, marki $1 × $2 pixel, bigi: $3', 'show-big-image' => 'Moro srapu', 'show-big-image-thumb' => 'Bigi fu a luku-na-fesi disi: $1 × $2 pixel', diff --git a/languages/messages/MessagesSs.php b/languages/messages/MessagesSs.php index 7112f096..56c4439f 100644 --- a/languages/messages/MessagesSs.php +++ b/languages/messages/MessagesSs.php @@ -95,19 +95,13 @@ $messages = array( 'qbspecialpages' => 'Emakhasi labalulekile', # Vector skin -'vector-action-addsection' => 'Ngeta sihloko', -'vector-action-move' => 'Khweshisa', -'vector-namespace-help' => 'Likhasi lelusito', -'vector-namespace-main' => 'Likhasi', -'vector-namespace-mediawiki' => 'Mlayeto', -'vector-namespace-special' => 'Likhasi lelibalulekile', -'vector-namespace-talk' => 'Ingcoco', -'vector-namespace-user' => 'Likhasi lemuntfu', -'vector-view-create' => 'Create', -'vector-view-edit' => 'Hlela', -'vector-view-history' => 'Bona umlandvo', -'vector-view-view' => 'Fundza', -'actions' => 'Tento', +'vector-action-addsection' => 'Ngeta sihloko', +'vector-action-move' => 'Khweshisa', +'vector-view-create' => 'Create', +'vector-view-edit' => 'Hlela', +'vector-view-history' => 'Bona umlandvo', +'vector-view-view' => 'Fundza', +'actions' => 'Tento', 'returnto' => 'Buyela ku $1.', 'help' => 'Sita', diff --git a/languages/messages/MessagesSt.php b/languages/messages/MessagesSt.php index 6fd46ee8..a3b5de72 100644 --- a/languages/messages/MessagesSt.php +++ b/languages/messages/MessagesSt.php @@ -85,7 +85,7 @@ $messages = array( # Login and logout pages 'yourpasswordagain' => 'Ngola lepetjo hape', -'remembermypassword' => 'O nkgopole', +'remembermypassword' => 'O nkgopole (for a maximum of $1 {{PLURAL:$1|day|days}})', 'nologinlink' => 'Ingodisetse', 'createaccount' => 'Ingodisetse', 'gotaccount' => "O se o ingodisitse? '''$1'''.", diff --git a/languages/messages/MessagesStq.php b/languages/messages/MessagesStq.php index fa6ceb9d..d1d41ccf 100644 --- a/languages/messages/MessagesStq.php +++ b/languages/messages/MessagesStq.php @@ -52,8 +52,7 @@ $messages = array( 'tog-editsection' => 'Links toun Beoarbaidjen fon eenpelde Ousatse anwiese', 'tog-editsectiononrightclick' => 'Eenpelde Ousatse mäd Gjuchtsklik beoarbaidje (JavaScript)', 'tog-showtoc' => 'Anwiesen fon n Inhooldsferteeknis bie Artikkele mäd moor as 3 Uurskrifte', -'tog-rememberpassword' => 'Duurhaft Ienlogjen', -'tog-editwidth' => 'Iengoawefäild wieder moakje, uum dän ganse Bieldeschärm uuttoufällen', +'tog-rememberpassword' => 'Mäd dissen Browser duurhaft ounmälded blieuwe (Maximoal foar $1 {{PLURAL:$1|Dai|Deege}})', 'tog-watchcreations' => 'Aal do sälwen näi anlaide Sieden beooboachtje', 'tog-watchdefault' => 'Aal do sälwen annerde Sieden beooboachtje', 'tog-watchmoves' => 'Aal do sälwen ferskäuwene Sieden beooboachtje', @@ -195,31 +194,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Ousnit bietouföigje', -'vector-action-delete' => 'Läskje', -'vector-action-move' => 'Ferskuuwe', -'vector-action-protect' => 'Skutsje', -'vector-action-undelete' => 'Wierhäärstaale', -'vector-action-unprotect' => 'Fräireeke', -'vector-namespace-category' => 'Kategorie', -'vector-namespace-help' => 'Hälpesiede', -'vector-namespace-image' => 'Doatäi', -'vector-namespace-main' => 'Siede', -'vector-namespace-media' => 'Mediensiede', -'vector-namespace-mediawiki' => 'Mediawiki-Systemättergjucht', -'vector-namespace-project' => 'Projektsiede', -'vector-namespace-special' => 'Spezioalsiede', -'vector-namespace-talk' => 'Diskussion', -'vector-namespace-template' => 'Foarloage', -'vector-namespace-user' => 'Benutsersiede', -'vector-view-create' => 'Moakje', -'vector-view-edit' => 'Beoarbaidje', -'vector-view-history' => 'Versionsgeskichte', -'vector-view-view' => 'Leese', -'vector-view-viewsource' => 'Wältext bekiekje', -'actions' => 'Aktione', -'namespaces' => 'Noomeruume', -'variants' => 'Variante', +'vector-action-addsection' => 'Ousnit bietouföigje', +'vector-action-delete' => 'Läskje', +'vector-action-move' => 'Ferskuuwe', +'vector-action-protect' => 'Skutsje', +'vector-action-undelete' => 'Wierhäärstaale', +'vector-action-unprotect' => 'Fräireeke', +'vector-simplesearch-preference' => 'Uutwiedede Säikfoarsleeke aktivierje (bloot Vector)', +'vector-view-create' => 'Moakje', +'vector-view-edit' => 'Beoarbaidje', +'vector-view-history' => 'Versionsgeskichte', +'vector-view-view' => 'Leese', +'vector-view-viewsource' => 'Wältext bekiekje', +'actions' => 'Aktione', +'namespaces' => 'Noomeruume', +'variants' => 'Variante', 'errorpagetitle' => 'Failer', 'returnto' => 'Tourääch tou Siede $1.', @@ -280,6 +269,9 @@ Tou fuul Benutsere fersäike, disse Siede tou besäiken. Täif n poor Minuten, eer du et noch n Moal fersäkst. $1', +'pool-timeout' => 'Tiedferloop unner dät Täiwen ap ju Speerenge', +'pool-queuefull' => 'Pooltäiweslange is ful', +'pool-errorunknown' => 'Uunbekoanden Failer', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Uur {{SITENAME}}', @@ -443,7 +435,8 @@ Ferjeet nit, dien [[Special:Preferences|{{SITENAME}}-Ienstaalengen]] antoupaasje 'yourname' => 'Benutsernoome:', 'yourpassword' => 'Paaswoud:', 'yourpasswordagain' => 'Paaswoud wierhoalje:', -'remembermypassword' => 'duurhaft anmäldje', +'remembermypassword' => 'Ap dissen Computer duurhaft ounmälded blieuwe (Maximoal foar $1 {{PLURAL:$1|Dai|Deege}})', +'securelogin-stick-https' => 'Ätter dät Anmäldjen mäd HTTOS ferbuunen blieuwe', 'yourdomainname' => 'Dien Domain:', 'externaldberror' => 'Äntweeder deer lait n Failer bie ju externe Authentifizierenge foar, of du duurst din extern Benutzerkonto nit aktualisierje.', 'login' => 'Anmäldje', @@ -460,6 +453,7 @@ Ferjeet nit, dien [[Special:Preferences|{{SITENAME}}-Ienstaalengen]] antoupaasje 'gotaccount' => "Du hääst al n Konto? '''$1'''.", 'gotaccountlink' => 'Hier gungt dät ätter dän Login', 'createaccountmail' => 'Uur Email', +'createaccountreason' => 'Gruund:', 'badretype' => 'Do bee Paaswoude stimme nit uureen.', 'userexists' => 'Disse Benutsernoomen is al ferroat. Wääl jädden n uur.', 'loginerror' => 'Failer bie ju Anmäldenge', @@ -478,6 +472,7 @@ Uurpröif ju Skrieuwwiese (Groot-/Littekskrieuwenge beoachtje) of [[Special:User 'wrongpasswordempty' => 'Du hääst ferjeeten, dien Paaswoud ientoureeken. Fersäk dät jädden fonnäien.', 'passwordtooshort' => 'Paaswoude mouten mindestens {{PLURAL:$1|1 Teeken|$1 Teekene}} loang weese.', 'password-name-match' => 'Dien Paaswoud mout sik fon din Benutsernoome unnerskeede.', +'password-login-forbidden' => 'Ju Ferweendeenge fon dissen Benutsernoome un Paaswoud is nit ferlööwed.', 'mailmypassword' => 'Näi Paaswoud touseende', 'passwordremindertitle' => 'Näi Paaswoud foar n {{SITENAME}}-Benutserkonto', 'passwordremindertext' => 'Wäl (woarskienelk du sälwen, fon ju IP-Adresse $1) häd n näi Paaswoud foar ju Anmäldenge bie {{SITENAME}} ($4) anfoarderd. Dät automatisk generierde tiedwiese Paaswoud foar Benutser "$2" lut nu: "$3". Is dät wät du foarhiest, dan skääst du die nu anmäldje un dät Paaswoud annerje. Dät tiedwiese Paaswoud lapt ou in {{PLURAL:$5|aan Dai|$5 Deege}}. @@ -514,6 +509,9 @@ Täif, eer du fon näien fersäkst.', 'loginlanguagelabel' => 'Sproake: $1', 'suspicious-userlogout' => 'Dien Oumälde-Anfroage wuud ferwäigerd, deer ju fermoudelk fon n defekten Browser of n Cache-Proxy soand wuud.', +# E-mail sending +'php-mail-error-unknown' => 'Uunbekoanden Failer mäd ju Funktion mail() fon PHP', + # Password reset dialog 'resetpass' => 'Paaswoud annerje', 'resetpass_announce' => 'Anmäldenge mäd dän uur E-Mail tousoande Code. Uum ju Anmäldenge outousluuten, moast du nu n näi Paaswoud wääle.', @@ -564,9 +562,10 @@ Muugelkerwiese hääst du dien Paaswoud al mäd Ärfoulch annerd of n näi tiede 'showlivepreview' => 'Live-Foarbekiek', 'showdiff' => 'Annerengen wiese', 'anoneditwarning' => "'''Woarskauenge:''' Du beoarbaidest disse Siede, man du bäst nit anmälded. Wan du spiekerst, wäd dien aktuelle IP-Adresse in ju Versionsgeskichte apteekend un is deermäd '''eepentelk''' ientousjoon.", +'anonpreviewwarning' => '"Du bäst nit ounmälded. Bie dät Spiekerjen wäd dien IP-Adrässe in ju Versionsgeskichte apteekend."', 'missingsummary' => "'''Waiwiesenge:''' Du hääst neen Touhoopefoatenge anroat. Wan du fonnäien ap „Siede spiekerje“ klikst, wäd dien Annerenge sunner Touhoopefoatenge uurnuumen.", 'missingcommenttext' => 'Reek jädden ne Touhoopefoatenge ien.', -'missingcommentheader' => "'''OACHTENGE:''' Du hääst neen Uurschrift in dät Fäild „Beträft:“ ienroat. Wan du fonnäien ap „Siede spiekerje“ klikst, wäd dien Beoarbaidenge sunner Uurschrift spiekerd.", +'missingcommentheader' => "'''OACHTENGE:''' Du hääst neen Uurskrift in dät Fäild „Beträft:“ ienroat. Wan du fonnäien ap „{{int:savearticle}}“ klikst, wäd dien Beoarbaidenge sunner Uurskrift spiekerd.", 'summary-preview' => 'Foarbekiek fon ju Touhoopefoatengsriege:', 'subject-preview' => 'Themoa bekiekje:', 'blockedtitle' => 'Benutser is blokkierd', @@ -644,7 +643,11 @@ Foar Information foulget n aktuellen Iendraach uut dät Benutser-Logbouk:', '''Beoachtje:''' Ätter dät Spiekerjen moast du dien Browser anwiese, ju näie Version tou leeden: '''Mozilla/Firefox:''' ''Strg-Shift-R'', '''Internet Explorer:''' ''Strg-F5'', '''Opera:''' ''F5'', '''Safari:''' ''Cmd-Shift-R'', '''Konqueror:''' ''F5''.", 'userjspreview' => "== Foarskau fon dien Benutser-CSS == '''Beoachtje:''' Ätter dät Spiekerjen moast du dien Browser kweede, ju näie Version tou leeden: '''Mozilla/Firefox:''' ''Strg-Shift-R'', '''Internet Explorer:''' ''Strg-F5'', '''Opera:''' ''F5'', '''Safari:''' ''Cmd-Shift-R'', '''Konqueror:''' ''F5''.", -'userinvalidcssjstitle' => "'''Woarschauenge:''' Deer existiert neen Skin \"\$1\". Betoank jädden, dät benutserspezifiske .css- un .js-Sieden män n Littek-Bouksteeuwe anfange mouten, also t.B. ''{{ns:user}}:Mustermann/monobook.css'', nit ''{{ns:user}}:Mustermann/Monobook.css''.", +'sitecsspreview' => '"Beoachtje, dät du bloot ne Foarskau fon dit CSS bekiekest." +"Der wuud noch nit spiekerd!"', +'sitejspreview' => "'''Beoachtje, dät du bloot n Foarbekiek fon dit JavaScript bekiekest.''' +'''Dät is noch nit spiekerd!'''", +'userinvalidcssjstitle' => "'''Woarskauenge:''' Deer existiert neen Skin \"\$1\". Betoank jädden, dät benutserspezifiske .css- un .js-Sieden män n Littek-Bouksteeuwe anfange mouten, also t.B. ''{{ns:user}}:Mustermann/vector.css'', nit ''{{ns:user}}:Mustermann/Vector.css''.", 'updated' => '(Annerd)', 'note' => "'''Waiwiesenge:'''", 'previewnote' => "'''Dit is man ne Foarbekiek, die Artikkel wuude noch nit spiekerd!'''", @@ -679,7 +682,6 @@ Du toukwäst uus hiermäd, dät du dän Text '''sälwen ferfoated''' hääst, d 'copyrightwarning2' => 'Aal Biedraage tou dän {{SITENAME}} konnen fon uur Ljuude ferannerd un fersprat wäide. Fals Jie nit moaten dät Jou Oarbaid hier fon uur Ljuude ferannerd un fersprat wäd, dan drukke Jie nit ap "Spiekerje". Jie fersicherje hiermäd uk, dät Jie dän Biedraach sälwen ferfoated hääbe blw. dät hie neen froamd Gjucht ferlätset (sjuch fääre: $1).', -'longpagewarning' => "'''WOARSCHAUENGE: Disse Siede is $1 kb groot; eenige Browsere kuuden Probleme hääbe, Sieden tou beoarbaidjen, do der gratter as 32 kb sunt. Uurlääse Jou jädden, of ne Oudeelenge fon do Sieden in litjere Ousnitte muugelk is.'''", 'longpageerror' => "'''FAILER: Die Text, dän du tou spiekerjen fersäkst, is $1 KB groot. Dät is gratter as dät ferlööwede Maximum fon $2 KB – Spiekerenge nit muugelk.'''", 'readonlywarning' => "'''WOARSKAUENGE: Ju Doatenboank wuude foar Wartengsoarbaiden speerd, so dät dien Annerengen apstuuns nit spiekerd wäide konnen. Sicherje dän Text jädden lokoal ap dien Computer un fersäik tou n leeteren Tiedpunkt, do Annerengen tou uurdreegen.''' @@ -847,6 +849,8 @@ $1", 'logdelete-failure' => "'''Logbouksichtboarkaid kon nit annerd wäide:''' $1", 'revdel-restore' => 'Sichtboarhaid annerje', +'revdel-restore-deleted' => 'läskede Versione', +'revdel-restore-visible' => 'sichtboare Revisione', 'pagehist' => 'Siedegeskichte', 'deletedhist' => 'Läskede Versione', 'revdelete-content' => 'Siedeninhoold', @@ -914,11 +918,13 @@ Staal deertruch sicher, dät ju Versionsgeskichte fon n Artikkel historisk akroa # Diffs 'history-title' => 'Versionsgeskichte fon "$1"', 'difference' => '(Unnerskeed twiske Versione)', +'difference-multipage' => '(Unnerskeed twiske Sieden)', 'lineno' => 'Riege $1:', 'compareselectedversions' => 'Wäälde Versione ferglieke', 'showhideselectedversions' => 'Uutwäälde Versione wiese/fersteete', 'editundo' => 'tounichte moakje', -'diff-multi' => '(Die Versionsfergliek belukt {{PLURAL:$1|ne deertwiske lääsende Version|$1 deertwiske lääsende Versione}} mee ien.)', +'diff-multi' => ' ({{PLURAL:$1|Ne deertwiske lääsende Version|$1 deertwiske lääsende Versione}} fon {{PLURAL:$2|n Benutser|$2 Benutsere}} {{PLURAL:$1|wäd|wäide}} nit wiesd)', +'diff-multi-manyusers' => ' ({{PLURAL:$1|Ne deertwiske lääsende Version|$1 deertwiske lääsende Versione}} fon moor as {{PLURAL:$2|Benutser|$2 Benutsere}} nit wiesd)', # Search results 'searchresults' => 'Säikresultoate', @@ -953,6 +959,7 @@ Staal deertruch sicher, dät ju Versionsgeskichte fon n Artikkel historisk akroa 'searchprofile-everything-tooltip' => 'Gansen Inhoold truchsäike (inklusive Diskussionssieden)', 'searchprofile-advanced-tooltip' => 'Säik in wiedere Noomensruume', 'search-result-size' => '$1 ({{PLURAL:$2|1 Woud|$2 Woude}})', +'search-result-category-size' => '{{PLURAL:$1|1 Siede|$1 Sieden}} ({{PLURAL:$2|1 Unnerkategorie|$2 Unnerkategorien}}, {{PLURAL:$3|1 Doatäi|$3 Doatäie}})', 'search-result-score' => 'Relevanz: $1 %', 'search-redirect' => '(Wiederlaitenge $1)', 'search-section' => '(Apsnit $1)', @@ -1027,6 +1034,7 @@ Staal deertruch sicher, dät ju Versionsgeskichte fon n Artikkel historisk akroa 'contextlines' => 'Teekene pro Träffer:', 'contextchars' => 'Teekene pro Riege:', 'stub-threshold' => 'Kuute Artikkele markierje bi (in Byte):', +'stub-threshold-disabled' => 'Deaktivierd', 'recentchangesdays' => 'Antaal fon Deege, do ju Lieste fon „Lääste Annerengen“ standoardmäitich uumfoatje skäl:', 'recentchangesdays-max' => '(Maximoal $1 {{PLURAL:$1|Dai|Deege}})', 'recentchangescount' => 'Antaal fon do standoardmäitich anwiesde Beoarbaidengen:', @@ -1060,6 +1068,7 @@ Hier n toufällich generierden Wäid, dän du ferweende koast: $1', 'prefs-files' => 'Doatäie', 'prefs-custom-css' => 'Benutserdefinierde CSS', 'prefs-custom-js' => 'Benutserdefinierd JS', +'prefs-common-css-js' => 'Gemeensoam CSS/JS foar aal Skins:', 'prefs-reset-intro' => 'Du koast disse Siede bruuke, uum do Ienstaalengen ap do Standoarde touräächtousätten. Dät kon nit moor tourääch troald wäide.', 'prefs-emailconfirm-label' => 'E-Mail-Bestäätigenge:', @@ -1097,9 +1106,15 @@ Mäd uur Benutsere koast du uk uur do Benutserdiskussionssieden Kontakt apnieme, 'prefs-advancedrendering' => 'Uutwiedede Optione', 'prefs-advancedsearchoptions' => 'Uutwiedede Optione', 'prefs-advancedwatchlist' => 'Uutwiedede Optione', -'prefs-display' => 'Anwies-Optione', +'prefs-displayrc' => 'Anwies-Optione', +'prefs-displaysearchoptions' => 'Anwies-Optione', +'prefs-displaywatchlist' => 'Anwies-Optione', 'prefs-diffs' => 'Versionsfergliek', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Gultige E-Mail-Adrässe', +'email-address-validity-invalid' => 'Ne gultige E-Mail-Adrässe is nöödich.', + # User rights 'userrights' => 'Benutsergjuchteferwaltenge', 'userrights-lookup-user' => 'Ferwaltede Gruppentouheeregaid', @@ -1182,6 +1197,7 @@ Mäd uur Benutsere koast du uk uur do Benutserdiskussionssieden Kontakt apnieme, 'right-hideuser' => 'Speer un ferbiergje n Benutsernoome', 'right-ipblock-exempt' => 'Uutnoame fon IP-Speeren, Autoblocks un Rangespeeren', 'right-proxyunbannable' => 'Uutnoame fon automatiske Proxyspeeren', +'right-unblockself' => 'Sik sälwen äntspeere', 'right-protect' => 'Siedenskutsstatus annerje', 'right-editprotected' => 'Skutsede Sieden beoarbaidje (sunner Kaskadenskuts)', 'right-editinterface' => 'Benutserinterface beoarbaidje', @@ -1204,7 +1220,6 @@ Mäd uur Benutsere koast du uk uur do Benutserdiskussionssieden Kontakt apnieme, 'right-siteadmin' => 'Doatenboank speere un äntspeere', 'right-reset-passwords' => 'Dät Paaswoud fon n uur Benutser touräächsätte', 'right-override-export-depth' => 'Exportier Sieden touhoope mäd ferlinkede Sieden bit tou ne Djüpte fon 5', -'right-versiondetail' => 'Detailinformatione uur ju Software un hiere Versionsdoaten ienkiekje', 'right-sendemail' => 'E-Mails an uur Benutsere seende', # User rights log @@ -1255,14 +1270,9 @@ Mäd uur Benutsere koast du uk uur do Benutserdiskussionssieden Kontakt apnieme, 'recentchanges-legend' => 'Anwiesoptione', 'recentchangestext' => "Ap disse Siede koast du do lääste Annerengen ap '''{{SITENAME}}''' ättergunge.", 'recentchanges-feed-description' => 'Ferfoulge mäd dissen Feed do lääste Annerengen in {{SITENAME}}.', -'recentchanges-label-legend' => 'Legende: $1.', -'recentchanges-legend-newpage' => '$1 - näie Siede', 'recentchanges-label-newpage' => 'Näie Siede', -'recentchanges-legend-minor' => '$1 - litje Annerenge', 'recentchanges-label-minor' => 'Litje Annerenge', -'recentchanges-legend-bot' => '$1 - Annerenge truch n Bot', 'recentchanges-label-bot' => 'Annerenge truch n Bot', -'recentchanges-legend-unpatrolled' => '$1 - nit-kontrollierde Annerenge', 'recentchanges-label-unpatrolled' => 'Nit-kontrollierde Annerenge', 'rcnote' => "Anwiesd {{PLURAL:$1|wäd '''1''' Annerenge|wäide do lääste '''$1''' Annerengen}} in {{PLURAL:$2|dän lääste Dai|do lääste '''$2''' Deege}} siet $5, $4.", 'rcnotefrom' => "Anwiesd wäide do Annerengen siet '''$2''' (max. '''$1''' Iendraage).", @@ -1309,6 +1319,9 @@ Mäd uur Benutsere koast du uk uur do Benutserdiskussionssieden Kontakt apnieme, 'upload_directory_missing' => 'Dät Upload-Ferteeknis ($1) failt un kuud truch dän Webserver uk nit moaked wäide.', 'upload_directory_read_only' => 'Die Webserver häd neen Skrieuwgjuchte foar dät Upload-Ferteeknis ($1).', 'uploaderror' => 'Failer bie dät Hoochleeden', +'upload-recreate-warning' => "'''Woarschauenge: ne Doatäi fon dissen Noome wuud al läsked of ferschäuwen.''' + +Der foulget n Uutsuch uut dät Läsk- un Ferschuuwengs-Logbouk fon disse Doatäi.", 'uploadtext' => "Bruuk dit Formular uum näie Doatäie hoochtouleeden. Gung tou ju [[Special:FileList|Lieste fon hoochleedene Doatäie]], uum foarhoundene Doatäie tou säiken un antouwiesen. Sjuch uk dät [[Special:Log/upload|Doatäi-]] un [[Special:Log/delete|Läsk-Logbouk]]. @@ -1353,6 +1366,17 @@ Beoachtje, dät, juust as bie normoale Sieden-Inhoolde, uur Benutsere dien Doat 'filetype-banned-type' => "'''„.$1“''' is n nit ferlööwed Doatäiformoat. Ferlööwed {{PLURAL:$3|is|sunt}} $2.", 'filetype-missing' => 'Ju hoochtouleedende Doatäi häd neen Fergratterenge (t. B. „.jpg“).', +'empty-file' => 'Ju uurdraine Doatäi is loos', +'file-too-large' => 'Ju uurdraine Doatäi is tou groot', +'filename-tooshort' => 'Die Doatäinoome is tou kuut', +'filetype-banned' => 'Disse Doatäi-Eendenge is speerd.', +'verification-error' => 'Disse Doatäi häd ju Doatäiwröige nit truchsteen.', +'hookaborted' => 'Die Fersäik, ju Annerenge truchtoufieren, is apgruund fon n Extension-Hook failsloain.', +'illegal-filename' => 'Die Doatäinoome is nit ferlööwed', +'overwrite' => 'Dät Uurskrieuwen fon ne existierdende Doatäi is nit toulät.', +'unknown-error' => 'N uunbekoanden Failer is aptreeden.', +'tmp-create-error' => 'Tiedwiese Doatäie konnen nit moaked wäide', +'tmp-write-error' => 'Failer bie dät Skrieuwen fon ju tiedwiese Doatäi', 'large-file' => 'Jädden neen Bielde uur $1 hoochleede; disse Doatäi is $2 groot.', 'largefileserver' => 'Disse Doatäi is tou groot, deer die Server so konfigurierd is, dät Doatäien bloot bit tou ne bestimde Grööte apzeptierd wäide.', 'emptyfile' => 'Ju hoochleedene Doatäi is loos. Die Gruund kon n Typfailer in dän Doatäinoome weese. Kontrollierje jädden, of du ju Doatäi wuddelk hoochleede wolt.', @@ -1378,13 +1402,14 @@ Pröif, of du ju Bielde in fulle Aplöösenge foarlääsen hääst un leed ju un Wan du ju Doatäi daach hoochleede moatest, gung dan tourääch un leed dien Doatäi unner n uur Noome hooch. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Disse Doatäi is n Duplikoat fon foulgjende {{PLURAL:$1|Doatäi|$1 Doatäie}}:', 'file-deleted-duplicate' => 'Ne identiske Doatäi fon disse Doatäi ([[:$1]]) wuud fröier läsked. Wröich dät Läsklogbouk, eer du ju hoochlatst.', -'successfulupload' => 'Mäd Ärfoulch hoochleeden', 'uploadwarning' => 'Woarskauenge', 'uploadwarning-text' => 'Annerje hierunner ju Doatäibeskrieuwenge un fersäik dät nochmoal.', 'savefile' => 'Doatäi spiekerje', 'uploadedimage' => '"[[$1]]" hoochleeden', 'overwroteimage' => 'häd ne näie Version fon „[[$1]]“ hoochleeden', 'uploaddisabled' => 'Äntskeeldigenge, dät Hoochleeden is apstuuns deaktivierd.', +'copyuploaddisabled' => 'Dät Hoochleeden fon URLs is deaktivierd', +'uploadfromurl-queued' => 'Dien Hoochleedenge fint sik nu in je Täiweslange.', 'uploaddisabledtext' => 'Dät Hoochleeden fon Doatäie is nit muugelk.', 'php-uploaddisabledtext' => 'PHP-Doatäi-Uploads wuuden deaktivierd. Wröich ju file_uploads-Ienstaalenge.', 'uploadscripted' => 'Disse Doatäi änthaalt HTML- of Scriptcode, ju bie Fersjoon fon aan Webbrowser apfierd wäide kuude.', @@ -1404,6 +1429,14 @@ Pröif suurgfooldich, of dät fernäide Hoochleeden do Gjuchtlienjen äntspräkt Tou Dien Information foulget dät Läsk-Logbouk mäd ju Begründenge foar ju foargungende Läskenge:", 'filename-bad-prefix' => "Die Doatäinoome begint mäd '''„$1“'''. Dit is in algemeenen die fon ne Digitoalkamera foarroate Doatäinoome un deeruum nit gjucht uurtjuugend. Reek ju Doatäi n Noome, die dän Inhoold beeter beskrift.", +'upload-success-subj' => 'Mäd Ärfoulch hoochleeden', +'upload-success-msg' => 'Dät Hoochleeden fon [$2] is glukked. Ju stoant hier tou Ferföigenge: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Hoochleedefailer', +'upload-failure-msg' => 'Dät roat n Problem mäd dien hoochleedene Doatäi fon [$2]: + +$1', +'upload-warning-subj' => 'Hoochleede-Woarskauenge', +'upload-warning-msg' => 'Dät roat n Problem bie dät Hoochleeden fon [$2]. Gung wier ätter [[Special:Upload/stash/$1|Hoochleedeformular]] wai, uum dit Problem tou löösen.', 'upload-proto-error' => 'Falsk Protokol', 'upload-proto-error-text' => 'Ju URL mout mäd http:// of ftp:// ounfange.', @@ -1463,6 +1496,7 @@ Uut Sicherhaidsgruunde is img_auth.php deaktivierd.', 'listfiles_search_for' => 'Säik ätter Doatäi:', 'imgfile' => 'Doatäi', 'listfiles' => 'Bieldelieste', +'listfiles_thumb' => 'Foarbekiekbielde', 'listfiles_date' => 'Doatum', 'listfiles_name' => 'Noome', 'listfiles_user' => 'Benutser', @@ -1573,8 +1607,8 @@ Ne [[Special:WhatLinksHere/$2|fulständige Lieste]] is ferföigboar.', 'statistics-edits' => 'Siedenbeoarbaidengen siet {{SITENAME}} waas ounfangd', 'statistics-edits-average' => 'Beoarbaidengen pro Siede in n Truchsleek', 'statistics-views-total' => 'Siedenaproupe mädnunner', +'statistics-views-total-desc' => 'Aproupe fon nit bestoundende Sieden un fon Spezialsieden wäide nit in Reekenge nuumen', 'statistics-views-peredit' => 'Siedenaproupe pro Beoarbaidenge', -'statistics-jobqueue' => 'Laangte fon ju [http://www.mediawiki.org/wiki/Manual:Job_queue Jobqueue]', 'statistics-users' => 'Registrierde [[Special:ListUsers|Benutsere]]', 'statistics-users-active' => 'Aktive Benutsere', 'statistics-users-active-desc' => 'Benutsere mäd Beoarbaidengen {{PLURAL:$1|in do lääste 24 Uuren|in do fergeene $1 Deege}}', @@ -1588,8 +1622,8 @@ Ne Siede wäd as Begriepskläärengssiede behonneld, wan [[MediaWiki:Disambiguat 'doubleredirects' => 'Dubbelde Fäärelaitengen', 'doubleredirectstext' => 'Disse Lieste änthoalt Fääreleedengen, do der ap wiedere Fääreleedengen ferlinkje. -Älke Riege änthoalt Links tou ju eerste un twäide Fääreleedenge as uk dät Siel fon ju twäide Fääreleedenge, wät foar gewöönelk ju wonskede Sielsiede is, ap ju al ju eerste Fääreleedenge wiese schuul. -Truchstriekene Iendraage wuuden al oumoaked.', +Älke Riege änthoalt Links tou ju eerste un twäide Fääreleedenge as uk dät Siel fon ju twäide Fääreleedenge, wät foar gewöönelk ju wonskede Sielsiede is, ap ju al ju eerste Fääreleedenge wiese skuul. +Truchstriekene Iendraage wuuden al oumoaked.', 'double-redirect-fixed-move' => 'dubbelde Fäärelaitenge aplöösd: [[$1]] → [[$2]]', 'double-redirect-fixer' => 'RedirectBot', @@ -1612,6 +1646,8 @@ Ne Siede wäd as Begriepskläärengssiede behonneld, wan [[MediaWiki:Disambiguat 'nmembers' => '{{PLURAL:$1|1 Iendraach|$1 Iendraage}}', 'nrevisions' => '{{PLURAL:$1|1 Beoarbaideng|$1 Beoarbaidengen}}', 'nviews' => '{{PLURAL:$1|1 Oufroage|$1 Oufroagen}}', +'nimagelinks' => 'Ferwoand ap $1 {{PLURAL:$1|Siede|Sieden}}', +'ntransclusions' => 'ferwoand ap $1 {{PLURAL:$1|Siede|Sieden}}', 'specialpage-empty' => 'Ju Siede änthaalt aktuell neen Iendraage.', 'lonelypages' => 'Ferwaisde Sieden', 'lonelypagestext' => 'Do foulgjende Sieden sunt nit ferlinked of ienbuunen fon uur Sieden in {{SITENAME}}.', @@ -1768,34 +1804,40 @@ Informatione uurhäär uur eenpelde Gjuchte konnen [[{{MediaWiki:Listgrouprights 'listgrouprights-removegroup-self-all' => 'Kon aal Gruppen fon dät oaine Konto wächhoalje', # E-mail user -'mailnologin' => 'Du bäst nit anmälded.', -'mailnologintext' => 'Du moast [[Special:UserLogin|anmälded weese]] un sälwen ne [[Special:Preferences|gultige E-Mail-Adrässe]] anroat hääbe, uum uur Benutsere ne E-Mail tou seenden.', -'emailuser' => 'Seende E-Mail an dissen Benutser', -'emailpage' => 'E-mail an Benutser', -'emailpagetext' => 'Du koast dän Benutser mäd dän unner stoundene Formular ne E-Mail seende. +'mailnologin' => 'Du bäst nit anmälded.', +'mailnologintext' => 'Du moast [[Special:UserLogin|anmälded weese]] un sälwen ne [[Special:Preferences|gultige E-Mail-Adrässe]] anroat hääbe, uum uur Benutsere ne E-Mail tou seenden.', +'emailuser' => 'Seende E-Mail an dissen Benutser', +'emailpage' => 'E-mail an Benutser', +'emailpagetext' => 'Du koast dän Benutser mäd dän unner stoundene Formular ne E-Mail seende. As Ouseender wäd ju E-Mail-Adresse uut dien [[Special:Preferences|Ienstaalengen]] iendrain, deermäd die Benutser die oantwoudje kon.', -'usermailererror' => 'Dät Mail-Objekt roat n Failer tourääch:', -'defemailsubject' => '{{SITENAME}}-E-Mail', -'noemailtitle' => 'Neen Email-Adrässe', -'noemailtext' => 'Dissen Benutser häd neen gultige Email-Adrässe anroat.', -'nowikiemailtitle' => 'E-Mail-Ferseendenge nit muugelk', -'nowikiemailtext' => 'Dissen Benutser moate neen E-Mails fon uur Benutsere kriege.', -'email-legend' => 'E-Mail an n uur {{SITENAME}}-Benutser seende', -'emailfrom' => 'Fon:', -'emailto' => 'An:', -'emailsubject' => 'Beträf:', -'emailmessage' => 'Ättergjucht:', -'emailsend' => 'Seende', -'emailccme' => 'Seend ne Kopie fon ju E-Mail an mie', -'emailccsubject' => 'Kopie fon dien Ättergjucht an $1: $2', -'emailsent' => 'Begjucht fersoand', -'emailsenttext' => 'Jou Begjucht is soand wuuden.', -'emailuserfooter' => 'Disse E-Mail wuude fon „Benutzer:$1“ an „Benutzer:$2“ mäd Hälpe fon ju „E-Mail an dissen Benutser“-Funktion fon {{SITENAME}} fersoand.', +'usermailererror' => 'Dät Mail-Objekt roat n Failer tourääch:', +'defemailsubject' => '{{SITENAME}}-E-Mail', +'usermaildisabled' => 'E-Mail-Ämfangst deaktivierd', +'usermaildisabledtext' => 'Du koast in dissen Wiki neen E-Mails an uur Benutsere seende', +'noemailtitle' => 'Neen Email-Adrässe', +'noemailtext' => 'Dissen Benutser häd neen gultige Email-Adrässe anroat.', +'nowikiemailtitle' => 'E-Mail-Ferseendenge nit muugelk', +'nowikiemailtext' => 'Dissen Benutser moate neen E-Mails fon uur Benutsere kriege.', +'email-legend' => 'E-Mail an n uur {{SITENAME}}-Benutser seende', +'emailfrom' => 'Fon:', +'emailto' => 'An:', +'emailsubject' => 'Beträf:', +'emailmessage' => 'Ättergjucht:', +'emailsend' => 'Seende', +'emailccme' => 'Seend ne Kopie fon ju E-Mail an mie', +'emailccsubject' => 'Kopie fon dien Ättergjucht an $1: $2', +'emailsent' => 'Begjucht fersoand', +'emailsenttext' => 'Jou Begjucht is soand wuuden.', +'emailuserfooter' => 'Disse E-Mail wuude fon „Benutzer:$1“ an „Benutzer:$2“ mäd Hälpe fon ju „E-Mail an dissen Benutser“-Funktion fon {{SITENAME}} fersoand.', + +# User Messenger +'usermessage-summary' => 'Systemättergjucht spiekerd.', +'usermessage-editor' => 'System-Messenger', # Watchlist 'watchlist' => 'Beooboachtengslieste', 'mywatchlist' => 'Beooboachtengslieste', -'watchlistfor' => "(foar '''$1''')", +'watchlistfor2' => 'Fon $1 $2', 'nowatchlist' => 'Du hääst neen Iendraage ap dien Beooboachtengslieste. Du moast anmälded weese, dät die een Beooboachtengslieste tou Ferföigenge stoant.', 'watchlistanontext' => 'Du moast die $1, uum dien Beooboachtengslieste tou sjoon of Iendraage ap hier tou beoarbaidjen.', 'watchnologin' => 'Du bäst nit anmälded', @@ -1911,7 +1953,10 @@ Ju lääste Annerenge stamt fon [[User:$3|$3]] ([[User talk:$3|Diskussion]]{{int 'revertpage' => 'Tounichte moakede Beoarbaidengen fon [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) tou ju lääste Version fon [[User:$1|$1]]', 'revertpage-nouser' => 'Annerengen fon (Benutsernoome wächhoald) touräächtroald un lääste Version fon [[User:$1|$1]] wier häärstoald', 'rollback-success' => 'Do Annerengen fon $1 wuuden tourääch annerd un ju lääste Version fon $2 wuude wier moaked.', -'sessionfailure' => 'Dät roat n Problem mäd ju Uurdreegenge fon dien Benutserdoaten. Disse Aktion wuude deeruum sicherheidshoolwe oubreeken, uum ne falske Touoardnenge fon dien Annerengen tou n uur Benutser tou ferhinnerjen. Gung jädden tourääch un fersäik dän Foargong fonnäien uuttoufieren.', + +# Edit tokens +'sessionfailure-title' => 'Sittengsfailer', +'sessionfailure' => 'Dät roat n Problem mäd ju Uurdreegenge fon dien Benutserdoaten. Disse Aktion wuude deeruum sicherheidshoolwe oubreeken, uum ne falske Touoardnenge fon dien Annerengen tou n uur Benutser tou ferhinnerjen. Gung jädden tourääch un fersäik dän Foargong fonnäien uuttoufieren.', # Protect 'protectlogpage' => 'Siedenskuts-Logbouk', @@ -2037,18 +2082,22 @@ $1', 'month' => 'un Mound:', 'year' => 'bit Jier:', -'sp-contributions-newbies' => 'Wies bloot Biedraage fon näie Benutsere', -'sp-contributions-newbies-sub' => 'Foar Näilinge', -'sp-contributions-newbies-title' => 'Benutserbiedraage fon näie Benutsere', -'sp-contributions-blocklog' => 'Speerlogbouk', -'sp-contributions-deleted' => 'Läskede Benutserbiedraage', -'sp-contributions-logs' => 'Logbouke', -'sp-contributions-talk' => 'Diskussion', -'sp-contributions-userrights' => 'Benutsergjuchteferwaltenge', -'sp-contributions-blocked-notice' => 'Dissen Benutser is apstuuns speerd. Hier foulget die aktuelle Iendraach uut dät Benutser-Logbouk:', -'sp-contributions-search' => 'Säike ätter Benutserbiedraage', -'sp-contributions-username' => 'IP-Adrässe af Benutsernoome:', -'sp-contributions-submit' => 'Säike (014)', +'sp-contributions-newbies' => 'Wies bloot Biedraage fon näie Benutsere', +'sp-contributions-newbies-sub' => 'Foar Näilinge', +'sp-contributions-newbies-title' => 'Benutserbiedraage fon näie Benutsere', +'sp-contributions-blocklog' => 'Speerlogbouk', +'sp-contributions-deleted' => 'Läskede Benutserbiedraage', +'sp-contributions-uploads' => 'Hoochleedene Doatäie', +'sp-contributions-logs' => 'Logbouke', +'sp-contributions-talk' => 'Diskussion', +'sp-contributions-userrights' => 'Benutsergjuchteferwaltenge', +'sp-contributions-blocked-notice' => 'Dissen Benutser is apstuuns speerd. Hier foulget die aktuelle Iendraach uut dät Benutser-Logbouk:', +'sp-contributions-blocked-notice-anon' => 'Dissen Benutser is apstuuns speerd. +Foar Information foulget die aktuelle Iendraach uut dät Speer-Logbouk:', +'sp-contributions-search' => 'Säike ätter Benutserbiedraage', +'sp-contributions-username' => 'IP-Adrässe af Benutsernoome:', +'sp-contributions-toponly' => 'Bloot aktuelle Versione wiese', +'sp-contributions-submit' => 'Säike (014)', # What links here 'whatlinkshere' => 'Links ap disse Siede', @@ -2109,7 +2158,6 @@ Reek dän Gruund foar ju Speere oun.', 'ipb-edit-dropdown' => 'Speergruunde beoarbaidje', 'ipb-unblock-addr' => '"$1" fräireeke', 'ipb-unblock' => 'IP-Adrässe/Benutser fräireeke', -'ipb-blocklist-addr' => 'Aktuelle Speeren foar $1', 'ipb-blocklist' => 'Aal aktuelle Speeren anwiese', 'ipb-blocklist-contribs' => 'Benutserbiedreege foar „$1“', 'unblockip' => 'IP-Adrässe fräireeke', @@ -2179,6 +2227,8 @@ Sjuch ju [[Special:IPBlockList|Lieste fon de speerde IP-Adrässe un Benutsernoom 'sorbs_create_account_reason' => 'Dien IP-Adrässe is in ju DNSBL fon {{SITENAME}} as eepene PROXY liested. Du koast neen Benutser-Account anlääse.', 'cant-block-while-blocked' => 'Du duurst neen uur Benutsere speere, wan du sälwen speerd bäst.', 'cant-see-hidden-user' => 'Die Benutser, dän du fersäkst tou speeren, wuud al speerd un ferstat. Deer du dät „hideuser“-Gjucht nit hääst, koast du ju Benutserspeere nit sjo un nit beoarbaidje.', +'ipbblocked' => 'Du koast naan uur Benutser speere of äntspeere, deer du sälwen speerd bäst', +'ipbnounblockself' => 'Du hääst nit ju Begjuchtigenge, die sälwen tou äntspeeren', # Developer tools 'lockdb' => 'Doatenboank speere', @@ -2212,6 +2262,17 @@ Beoachtje, dät ju Siede '''nit''' ferskäuwen wäd, wan dät al ne Siede mäd d '''WOARSKAUENGE!''' Dit kon ne drastiske un uunferwachtede Ferannerenge reeke foar ne beljoowede Siede; wääs die deeruum sicher, dät du do Konsequenzen deerfon iensjuchst, eer du fääre moakest.", +'movepagetext-noredirectfixer' => "Mäd dän unnerstoundende Formular koast du ne Siede uumenaame, wierbie du ju mädsamt aal Versione ap dän näien Tittel ferskufst. +Die oolde Tittel wäd deerätter tou dän näie fäärelaitje. +Staal sicher, dät di in n Anslus aal [[Special:DoubleRedirects|dubbelde]] of [[Special:BrokenRedirects|breekene Fäärelaitengen]] wröigest. +Du bäst deerfoar feroantwoudelk, dät Links uk fääre ap dät korrekte Siel ferwiese. + +Ju Siede wäd ‘’‘nit’‘’ferschäuwen, sowied et al ne Siede mäd dän foarsäine Tittel rakt, of ju moaste loos weese of ne Fäärelaitenge sunner Versionsgeskichte. +Dät betjut, dät du ju Uumenaamenge tourääch traale koast, wan du n Failer moaked hääst. Du koast deerjuun neen Siede uurskrieuwe. + +'''WOARSKAUENGE!''' +Ju Ferskuuwenge kon fierräkkende un uunferwachtede Foulgen foar oafte besoachte Sieden hääbe. +Du skuust deeruum do Konsequenze fersteen hääbe, eer du nu fääregungst.", 'movepagetalktext' => "Ju touheerige Diskussionssiede wäd, sofier deer, mee ferskäuwen, '''of dät moast weese dät''' * der bestoant al n Diskussionssiede mäd dän näie Noome * du wäälst ju unnerstoundene Option ou. @@ -2267,6 +2328,7 @@ Moatest du him foar ju Ferskuuwenge läskje?', 'immobile-source-page' => 'Disse Siede is nit ferskuuwboar.', 'immobile-target-page' => 'Der kon nit ap disse Sielsiede ferskäuwen wäide.', 'imagenocrossnamespace' => 'Doatäie konnen nit uut dän {{ns:file}}-Noomensruum hääruut ferskäuwen wäide', +'nonfile-cannot-move-to-file' => 'Nit-Doatäie konnen nit in dän {{ns:file}}-Noomensruum hääroun ferskäuwen wäide', 'imagetypemismatch' => 'Ju näie Doatäifergratterenge is nit mäd ju oolde identisk', 'imageinvalidfilename' => 'Die Siel-Doatäinoome is nit gultich', 'fix-double-redirects' => 'Ätter dät Ferskuuwen dubbelde Fäärelaitengen aplööse', @@ -2345,6 +2407,7 @@ Do ap dän lokoale Reekener spiekerje un deerätter hier hoochleede.', 'importstart' => 'Sieden importierje …', 'import-revision-count' => '– {{PLURAL:$1|1 Version|$1 Versione}}', 'importnopages' => 'Neen Sieden toun Importierjen anweesend.', +'imported-log-entries' => '$1 {{PLURAL:$1|lLogboukiendraach|Logboukiendraage}} importierd.', 'importfailed' => 'Import failsloain: $1', 'importunknownsource' => 'Uunbekoande Importwälle', 'importcantopen' => 'Importdoatäi kuude nit eepend wäide', @@ -2437,6 +2500,8 @@ Do ap dän lokoale Reekener spiekerje un deerätter hier hoochleede.', 'tooltip-upload' => 'Hoochleeden startje', 'tooltip-rollback' => 'moaket aal lääste Annerengen fon ju Siede, do der fon dän glieke Benutser moaked sunt, truch aan Klik tounichte.', 'tooltip-undo' => 'moaket bloot disse eene Annerenge tounichte un wiest dät Resultoat in dän Foarbekiek an, deermäd in ju Touhoopefoatengsriege ne Begruundenge ounroat wäide kon.', +'tooltip-preferences-save' => 'Ienstaalengen spiekerje', +'tooltip-summary' => 'Reek ne kuute Touhoopefoatenge ien', # Stylesheets 'common.css' => '/** CSS an disse Steede wirket sik ap aal Skins uut */', @@ -2533,18 +2598,21 @@ $1', 'nextdiff' => 'Tou ne näiere Version →', # Media information -'mediawarning' => "'''Woarschauenge:''' Disse Oard fon Doatäi kon n schoadelken Programcode änthoolde. Truch dät Deelleeden un Eepenjen fon disse Doatäi kon dän Computer Schoade toubroacht wäide.", +'mediawarning' => "'''Woarskauenge:''' Disse Oard fon Doatäi kon n skoadelken Programcode änthoolde. Truch dät Deelleeden un Eepenjen fon disse Doatäi kon dän Computer Skoade toubroacht wäide.", 'imagemaxsize' => "Maximoale Bieldegrööte:
    ''(foar Doatäibeskrieuwengssieden)''", 'thumbsize' => 'Grööte fon do Foarskaubielden (thumbnails):', 'widthheightpage' => '$1×$2, {{PLURAL:$3|1 Siede|$3 Sieden}}', -'file-info' => '(Doatäigrööte: $1, MIME-Typ: $2)', -'file-info-size' => '($1 × $2 Pixel, Doatäigrööte: $3, MIME-Typ: $4)', +'file-info' => 'Doatäigrööte: $1, MIME-Typ: $2', +'file-info-size' => '$1 × $2 Pixel, Doatäigrööte: $3, MIME-Typ: $4', 'file-nohires' => 'Neen haagere Aplöösenge foarhounden.', -'svg-long-desc' => '(SVG-Doatäi, Basisgrööte: $1 × $2 Pixel, Doatäigrööte: $3)', +'svg-long-desc' => 'SVG-Doatäi, Basisgrööte: $1 × $2 Pixel, Doatäigrööte: $3', 'show-big-image' => 'Bielde in hooge Aplöösenge', 'show-big-image-thumb' => 'Grööte fon disse Foarschau: $1 × $2 Pixel', 'file-info-gif-looped' => 'Eendloos-Strik', 'file-info-gif-frames' => '$1 {{PLURAL:$1|Bielde|Bielden}}', +'file-info-png-looped' => 'Eendloos-Strik', +'file-info-png-repeat' => '$1-{{PLURAL:$1|Moal|Moale}} ouspield', +'file-info-png-frames' => '$1 {{PLURAL:$1|Bielde|Bielden}}', # Special:NewFiles 'newimages' => 'Näie Bielden', @@ -2703,6 +2771,7 @@ wiedere standdoardmäitich "ienklapte" Details konnen anwiesd wäide. 'exif-gpsareainformation' => 'Noome fon dät GPS-Gestrich', 'exif-gpsdatestamp' => 'GPS-Doatum', 'exif-gpsdifferential' => 'GPS-Differentioalkorrektur', +'exif-objectname' => 'Kuuten Tittel', # EXIF attributes 'exif-compression-1' => 'Uunkomprimierd', @@ -2860,24 +2929,24 @@ wiedere standdoardmäitich "ienklapte" Details konnen anwiesd wäide. 'limitall' => 'aal', # E-mail address confirmation -'confirmemail' => 'Email-Adrässe bestäätigje', -'confirmemail_noemail' => 'Du hääst neen gultige E-Mail-Adresse in dien [[Special:Preferences|persöönelke Ienstaalengen]] iendrain.', -'confirmemail_text' => '{{SITENAME}} ärfoardert, dät du dien E-Mail-Adresse bestäätigest (authentifizierje), eer du do fergratterde E-Mail-Funktione benutsje koast. Truch n Klik ap ju Skaltfläche unner wäd ne E-Mail an die fersoand. Disse E-Mail änthaalt ne Ferbiendenge mäd n Bestäätigengs-Code. Truch Klikken ap disse Ferbiendenge wäd bestäätiged, dät dien E-Mail-Adresse gultich is.', -'confirmemail_pending' => 'Der wuude die al n Bestäätigengs-Code per E-Mail tousoand. Wan du dien Benutserkonto eerste knu moaked hääst, täif noch n poor Minuten ap ju E-Mail, eer du n näien Code anfoarderst.', -'confirmemail_send' => 'Bestäätigengscode touseende', -'confirmemail_sent' => 'Bestäätigengs-E-Mail wuude fersoand.', -'confirmemail_oncreate' => 'N Bestäätigengs-Code wuude an dien E-Mail-Adresse soand. Dissen Code is foar ju Anmäldenge nit nöödich, man daach wäd er tou ju Aktivierenge fon do E-Mail-Funktione binne dän Wiki bruukt.', -'confirmemail_sendfailed' => '{{SITENAME}} kuud ju Bestäätigengs-E-Mail nit an die ferseende. +'confirmemail' => 'Email-Adrässe bestäätigje', +'confirmemail_noemail' => 'Du hääst neen gultige E-Mail-Adresse in dien [[Special:Preferences|persöönelke Ienstaalengen]] iendrain.', +'confirmemail_text' => '{{SITENAME}} ärfoardert, dät du dien E-Mail-Adresse bestäätigest (authentifizierje), eer du do fergratterde E-Mail-Funktione benutsje koast. Truch n Klik ap ju Skaltfläche unner wäd ne E-Mail an die fersoand. Disse E-Mail änthaalt ne Ferbiendenge mäd n Bestäätigengs-Code. Truch Klikken ap disse Ferbiendenge wäd bestäätiged, dät dien E-Mail-Adresse gultich is.', +'confirmemail_pending' => 'Der wuude die al n Bestäätigengs-Code per E-Mail tousoand. Wan du dien Benutserkonto eerste knu moaked hääst, täif noch n poor Minuten ap ju E-Mail, eer du n näien Code anfoarderst.', +'confirmemail_send' => 'Bestäätigengscode touseende', +'confirmemail_sent' => 'Bestäätigengs-E-Mail wuude fersoand.', +'confirmemail_oncreate' => 'N Bestäätigengs-Code wuude an dien E-Mail-Adresse soand. Dissen Code is foar ju Anmäldenge nit nöödich, man daach wäd er tou ju Aktivierenge fon do E-Mail-Funktione binne dän Wiki bruukt.', +'confirmemail_sendfailed' => '{{SITENAME}} kuud ju Bestäätigengs-E-Mail nit an die ferseende. Wröich ju E-Mail-Adresse ap uungultige Teekene. Touräächmäldenge fon dän Mailserver: $1', -'confirmemail_invalid' => 'Uungultigen Bestäätigengscode. Eventuell is die Code al wier uungultich wuuden.', -'confirmemail_needlogin' => 'Du moast die $1, uum dien E-Mail-Adresse tou bestäätigjen.', -'confirmemail_success' => 'Dien E-Mail-Adresse wuude mäd Ärfoulch bestäätiged. Du koast die nu [[Special:UserLogin|ienlogje]].', -'confirmemail_loggedin' => 'Dien E-Mail-Adresse wuude mäd Ärfoulch bestäätiged.', -'confirmemail_error' => 'Et roat n Failer bie ju Bestäätigenge fon dien E-Mail-Adresse.', -'confirmemail_subject' => '[{{SITENAME}}] - Bestäätigenge fon ju E-Mail-Adresse', -'confirmemail_body' => 'Moin, +'confirmemail_invalid' => 'Uungultigen Bestäätigengscode. Eventuell is die Code al wier uungultich wuuden.', +'confirmemail_needlogin' => 'Du moast die $1, uum dien E-Mail-Adresse tou bestäätigjen.', +'confirmemail_success' => 'Dien E-Mail-Adresse wuude mäd Ärfoulch bestäätiged. Du koast die nu [[Special:UserLogin|ienlogje]].', +'confirmemail_loggedin' => 'Dien E-Mail-Adresse wuude mäd Ärfoulch bestäätiged.', +'confirmemail_error' => 'Et roat n Failer bie ju Bestäätigenge fon dien E-Mail-Adresse.', +'confirmemail_subject' => '[{{SITENAME}}] - Bestäätigenge fon ju E-Mail-Adresse', +'confirmemail_body' => 'Moin, wäl mäd ju IP-Adresse $1, woarskienelk du sälwen, häd dät Benutserkonto "$2" in {{SITENAME}} registrierd. @@ -2892,8 +2961,36 @@ Wan du dät naamde Benutserkonto *nit* registrierd hääst, foulgje dissen Link, $5 Disse Bestäätigengscode is gultich bit $4.', -'confirmemail_invalidated' => 'E-Mail-Adressbestäätigenge oubreeke', -'invalidateemail' => 'E-Mail-Adressbestäätigenge oubreeke', +'confirmemail_body_changed' => 'Moin, + +wäl mäd ju IP-Adresse $1, woarskienelk du sälwen, häd ju E-Mail-Adresse fon dät Benutserkonto "$2" ap {{SITENAME}} annerd. + +Uum tou bestäätigjen, dät dit Benutserkonto wuddelk tou die heert un uum do E-Mail-Features ap {{SITENAME}} tou reaktivierjen, eepenje dissen Link: + +$3 + +Fals dät Konto *nit* die heert, foulge dissen Link, +uum ju E-Mail-Adräs-Bestäätigenge outoubreeken: + +$5 + +Disse Bestäätigengskode is gultich bit $4', +'confirmemail_body_set' => 'Wäl mäd ju IP-Adresse $1, woarskienelk du sälwen, +häd ju E-Mail-Adresse fon dät Benutserkonto "$2" ap {{SITENAME}} tou disse E-Mail-Adresse annerd. + +Uum tou bestäätigjen, dät dit Benutserkonto wuddelk tou die heert +un uum do E-Mail-Funktione ap {{SITENAME}} tou reaktivierjen, eepenje dissen Link: + +$3 + +Fals dät Konto *nit* die heert, foulge dissen Link, +uum ju E-Mail-Adresse-Bestäätigenge outoubreeken: + +$5 + +Disse Bestäätigengskode is gultich bit $4', +'confirmemail_invalidated' => 'E-Mail-Adressbestäätigenge oubreeke', +'invalidateemail' => 'E-Mail-Adressbestäätigenge oubreeke', # Scary transclusion 'scarytranscludedisabled' => '[Interwiki-Ienbiendenge is deaktivierd]', @@ -2935,6 +3032,7 @@ Bestäätigje, dät du disse Siede wuddelk näi moakje moatest.", 'table_pager_first' => 'Eerste Siede', 'table_pager_last' => 'Lääste Siede', 'table_pager_limit' => 'Wies $1 Iendraage pro Siede', +'table_pager_limit_label' => 'Positione pro Siede:', 'table_pager_limit_submit' => 'Loos', 'table_pager_empty' => 'Neen Resultoate', @@ -2989,6 +3087,7 @@ Du koast dien Beooboachtengslieste uk in dät [[Special:Watchlist/raw|Liestenfor 'version-specialpages' => 'Spezioalsieden', 'version-parserhooks' => 'Parser-Hooks', 'version-variables' => 'Variablen', +'version-skins' => 'Benutseruurflächen', 'version-other' => 'Uurswät', 'version-mediahandlers' => 'Medien-Handlere', 'version-hooks' => "Snitsteeden ''(Hooks)''", @@ -3000,6 +3099,13 @@ Du koast dien Beooboachtengslieste uk in dät [[Special:Watchlist/raw|Liestenfor 'version-hook-subscribedby' => 'Aproup fon', 'version-version' => '(Version $1)', 'version-license' => 'Lizenz', +'version-poweredby-credits' => "Disse Website nutset '''[http://www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.", +'version-poweredby-others' => 'uur', +'version-license-info' => "MediaWiki is fräie Software, dät hat dät ju ätter do Bedingengen fon ju truch de Free Software Foundation fereepenlikede ''GNU General Public License'', fääreferdeeld un/ of modifizierd wäide kon. Deerbie kon ju version 2, of ätter oainen Uurdeel, älke näiere Version fon ju Lizenz ferwoand wäide. + +MediaWiki wäd ferdeeld in ju Hoopenge, dät et nutselk weese skäl, man SUNNER EENIGE GARANTIE un sogoar sunner ju implizierde Garantie fon ne MÄÄRKEDGÄNGEGAID of OAINENGE FOAR N BESTIMDEN TSWÄK. Hiertou sunt wiedere Waiwiesengen in ju ''GNU General Public License'' äntheelden. + +Ne [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie fon ju ''GNU General Public License''] skuul touhoope mäd dissen Program ferdeeld wuuden weese. Insofier dät nit dän Fal waas, kon ne Kopie bie ju Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, skriftlek anfoarderd of ap do hiere Website [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html online leesen] wäide.", 'version-software' => 'Installierde Software', 'version-software-product' => 'Produkt', 'version-software-version' => 'Version', @@ -3067,6 +3173,15 @@ Ju Iengoawe mout sunner dän Tousats „{{ns:file}}:“ geböäre.', 'tags-edit' => 'beoarbaidje', 'tags-hitcount' => '$1 {{PLURAL:$1|Annerenge|Annerengen}}', +# Special:ComparePages +'comparepages' => 'Sieden ferglieke', +'compare-selector' => 'Siedeversione ferglieke', +'compare-page1' => 'Siede 1', +'compare-page2' => 'Siede 2', +'compare-rev1' => 'Version 1', +'compare-rev2' => 'Version 2', +'compare-submit' => 'Fergliek', + # Database error messages 'dberr-header' => 'Dit Wiki häd n Problem', 'dberr-problems' => 'Äntskeeldenge. Disse Siede häd apstuuns techniske Meelasje.', @@ -3083,8 +3198,13 @@ Ju Iengoawe mout sunner dän Tousats „{{ns:file}}:“ geböäre.', 'htmlform-float-invalid' => 'Die anroate Wäid is neen Taal.', 'htmlform-int-toolow' => 'Die anroate Wäid is unner dät Minimum fon $1', 'htmlform-int-toohigh' => 'Die anroate Wäid is buppe dät Maximum fon $1', +'htmlform-required' => 'Dissen Wäid is nöödich', 'htmlform-submit' => 'Uurdreege', 'htmlform-reset' => 'Annerengen touräächtraale', 'htmlform-selectorother-other' => 'Uur', +# SQLite database support +'sqlite-has-fts' => 'Version $1 mäd Unnerstutsenge foar ju Fultäkstsäike', +'sqlite-no-fts' => 'Version $1 sunner Unnerstutsenge foaar ju Fultäkstsäike', + ); diff --git a/languages/messages/MessagesSu.php b/languages/messages/MessagesSu.php index b17da3cb..bf750732 100644 --- a/languages/messages/MessagesSu.php +++ b/languages/messages/MessagesSu.php @@ -141,8 +141,7 @@ $messages = array( 'tog-editsection' => 'Tambahkeun tumbu [édit] ngarah bisa ngarobah eusi bab', 'tog-editsectiononrightclick' => 'Fungsikeun ngédit sub-bagean kalawan klik-katuhu dina judul bagean (JavaScript)', 'tog-showtoc' => 'Témbongkeun daptar eusi
    (pikeun kaca nu leuwih ti tilu subjudul)', -'tog-rememberpassword' => 'Inget sandi nembus rintakan', -'tog-editwidth' => 'Legaan kotak édit luyu jeung lébar layar', +'tog-rememberpassword' => 'Apalkeun login kuring dina ieu panyungsi (pikeun paling lila $1 {{PLURAL:$1|poé|poé}})', 'tog-watchcreations' => 'Awaskeun kaca jieunan kuring', 'tog-watchdefault' => 'Tambahkeun kaca nu diédit ku anjeun kana awaskeuneun anjeun', 'tog-watchmoves' => 'Awaskeun kaca nu dipindahkeun ku kuring', @@ -283,31 +282,20 @@ $messages = array( 'faqpage' => 'Project:NLD', # Vector skin -'vector-action-addsection' => 'Jieun jejer anyar', -'vector-action-delete' => 'Hapus', -'vector-action-move' => 'Pindahkeun', -'vector-action-protect' => 'Konci', -'vector-action-undelete' => 'Bolaykeun ngahapus', -'vector-action-unprotect' => 'Buka konci', -'vector-namespace-category' => 'Kategori', -'vector-namespace-help' => 'Kaca pitulung', -'vector-namespace-image' => 'Koropak', -'vector-namespace-main' => 'Kaca', -'vector-namespace-media' => 'Kaca média', -'vector-namespace-mediawiki' => 'Surat', -'vector-namespace-project' => 'Kaca proyék', -'vector-namespace-special' => 'Kaca husus', -'vector-namespace-talk' => 'Sawala', -'vector-namespace-template' => 'Citakan', -'vector-namespace-user' => 'Kaca pamaké', -'vector-view-create' => 'Jieun', -'vector-view-edit' => 'Édit', -'vector-view-history' => 'Témbongkeun jujutan', -'vector-view-view' => 'Baca', -'vector-view-viewsource' => 'Témbongkeun sumber', -'actions' => 'Peta', -'namespaces' => 'Spasi ngaran', -'variants' => 'Varian', +'vector-action-addsection' => 'Jieun jejer anyar', +'vector-action-delete' => 'Hapus', +'vector-action-move' => 'Pindahkeun', +'vector-action-protect' => 'Konci', +'vector-action-undelete' => 'Bolaykeun ngahapus', +'vector-action-unprotect' => 'Buka konci', +'vector-view-create' => 'Jieun', +'vector-view-edit' => 'Édit', +'vector-view-history' => 'Témbongkeun jujutan', +'vector-view-view' => 'Baca', +'vector-view-viewsource' => 'Témbongkeun sumber', +'actions' => 'Peta', +'namespaces' => 'Spasi ngaran', +'variants' => 'Varian', 'errorpagetitle' => 'Kasalahan', 'returnto' => 'Balik deui ka $1.', @@ -368,6 +356,7 @@ Loba teuing nu nyoba muka ieu kaca. Mangga cobian sanés waktos. $1', +'pool-errorunknown' => 'Éror teu dipikawanoh', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Ngeunaan {{SITENAME}}', @@ -527,7 +516,8 @@ Tong hilap ngarobih [[Special:Preferences|{{SITENAME}} préferénsi]] anjeun.', 'yourname' => 'Ngaran pamaké anjeun', 'yourpassword' => 'Sandi anjeun', 'yourpasswordagain' => 'Ketik deui sandi anjeun', -'remembermypassword' => 'Inget sandi kuring nembus rintakan.', +'remembermypassword' => 'Apalkeun login kuring dina ieu komputer (pikeun paling lila $1 {{PLURAL:$1|poé|poé}})', +'securelogin-stick-https' => 'Terus nyambung ka HTTPS sanggeus login', 'yourdomainname' => 'Domain anjeun', 'externaldberror' => 'Aya kasalahan dina pangkalan data oténtikasi luar, atawa anjeun mémang teu diwenangkeun pikeun ngaropéa rekening luar anjeun.', 'login' => 'Asup log', @@ -544,6 +534,7 @@ Tong hilap ngarobih [[Special:Preferences|{{SITENAME}} préferénsi]] anjeun.', 'gotaccount' => "Geus boga rekening? '''$1'''.", 'gotaccountlink' => 'Asup log', 'createaccountmail' => 'ku surélék', +'createaccountreason' => 'Alesan:', 'badretype' => 'Sandi nu diasupkeun teu cocog.', 'userexists' => 'Ngaran pamaké nu diasupkeun ku anjeun geus aya nu maké. Mangga pilih ngaran nu séjén.', @@ -564,6 +555,7 @@ Pariksa éjahanana, atawa paké formulir di handap pikeun [[Special:UserLogin/si 'wrongpasswordempty' => 'Sandina can kaeusian. Cobaan deui!', 'passwordtooshort' => 'Sandina kudu diwangun ku sahanteuna {{PLURAL:$1|1 karakter|$1 karakter}}.', 'password-name-match' => 'Sandi anjeun kudu béda ti landihan.', +'password-login-forbidden' => 'Sandiasma jeung sandina teu bisa dipaké.', 'mailmypassword' => 'Kirim sandi anyar ngaliwatan surélék', 'passwordremindertitle' => 'Pangéling sandi ti {{SITENAME}}', 'passwordremindertext' => 'Aya (jigana anjeun ti alamat IP $1) nu ménta sangkan dikiriman sandi anyar asup log {{SITENAME}} ($4). Saheulaanan, sandi anyar keur pamaké "$2" ayeuna diganti jadi "$3". Anjeun kudu asup log sarta ngarobah sandi anjeun ayeuna. Ieu sandi bakal kadaluwarsa dina {{PLURAL:$5|sapoé|$5 poé}}. @@ -648,6 +640,7 @@ Bisa jadi anjeun geus ngaganti sandina atawa ménta sandi saheulaanan anu anyar. 'showlivepreview' => 'Pramidang saharita', 'showdiff' => 'Témbongkeun parobahan', 'anoneditwarning' => "'''Perhatosan:''' Anjeun can asup log. IP anjeun kacatet dina jujutan kaca ieu", +'anonpreviewwarning' => '"Anjeun can asup log. Mun disimpen, alamat IP anjeun bakal kacatet dina jujutan ieu kaca."', 'missingsummary' => "'''Pépéling:''' Anjeun can ngeusian sari éditan. Mun anjeun ngaklik deui Simpen, éditan anjeun bakal disimpen tanpa sari éditan", 'missingcommenttext' => 'Mangga tulis koméntar di handapeun ieu.', 'missingcommentheader' => "'''Pépéling:''' Anjeun can ngeusian judul pikeun ieu koméntar. Mun anjeun ngaklik deui Simpen, éditan anjeun bakal disimpen tanpa judul.", @@ -722,7 +715,11 @@ Pikeun rujukan, éntri log panungtung dipidangkeun di handap:', 'userjsyoucanpreview' => "Tip:''' Paké tombol \"{{int:showpreview}}\" pikeun nyobaan JavaScript anyar anjeun méméh nyimpen.", 'usercsspreview' => "'''Inget yén anjeun ukur nyawang css pamaké anjeun, can disimpen!'''", 'userjspreview' => "'''Inget yén anjeun ukur nguji/nyawang ''javascript'' pamaké anjeun, can disimpen!'''", -'userinvalidcssjstitle' => "'''Awas''': kulit \"\$1\" mah teu aya. Sing émut yén kaca .css jeung .js mah migunakeun aksara leutik dina judulna, contona baé {{ns:user}}:Foo/monobook.css lawan {{ns:user}}:Foo/Monobook.css.", +'sitecsspreview' => "'''Inget yén ieu CSS ukur pramidang.''' +'''Can disimpen!'''", +'sitejspreview' => "'''Inget yén ieu kodeu JavaScript ukur pramidang.''' +'''Can disimpen!'''", +'userinvalidcssjstitle' => "'''Awas''': kulit \"\$1\" mah teu aya. Sing émut yén kaca .css jeung .js mah migunakeun aksara leutik dina judulna, contona baé {{ns:user}}:Foo/vector.css lawan {{ns:user}}:Foo/Vector.css.", 'updated' => '(Geus diropéa)', 'note' => "'''Catetan:'''", 'previewnote' => "'''Inget yén ieu ukur sawangan, can disimpen!'''", @@ -752,7 +749,6 @@ Anjeun ogé jangji yén tulisan ieu dijieun ku sorangan, atawa disalin ti ''doma 'copyrightwarning2' => "Catet yén sadaya kontribusi ka {{SITENAME}} bisa diédit, dirobah, atawa dihapus ku kontributor séjén. Mun anjeun teu miharep tulisan anjeun dirobah, ulah ngintunkeun ka dieu.
    Anjeun ogé mastikeun yén ieu téh pituin tulisan anjeun, atawa salinan ti domain umum atawa sumberdaya bébas séjénna (tempo $1 pikeun écésna). '''ULAH NGINTUNKEUN KARYA NU MIBANDA HAK CIPTA TANPA WIDI!'''", -'longpagewarning' => 'PERHATOSAN: Kaca ieu panjangna $1 kb; sababaraha panyungsi boga masalah dina ngédit kaca nu panjangna nepi ka 32 kb. Mun bisa mah bagi-bagi ieu kaca jadi sababaraha bab.', 'longpageerror' => "'''SALAH: Téks anu dikirimkeun gedéna $1 kb, leuwih ti maksimum $2 kb. Téks teu bisa disimpen.'''", 'readonlywarning' => "'''PERHATOSAN''': pangkalan data dikonci pikeun diropéa, anjeun moal bisa nyimpen éditan anjeun ayeuna. Cobi ''cut-n-paste'' téksna ka na koropak téks sarta simpen dina waktu séjén. @@ -909,6 +905,8 @@ $1", 'logdelete-failure' => "'''Visibilitas log teu bisa disét:''' $1", 'revdel-restore' => 'robah panémbong', +'revdel-restore-deleted' => 'révisi nu dihapus', +'revdel-restore-visible' => 'révisi nu katémbong', 'pagehist' => 'Sajarah kaca', 'deletedhist' => 'Sajarah nu dihapus', 'revdelete-content' => 'eusi', @@ -972,11 +970,13 @@ Pastikeun yén ieu parobahan bisa miara jujutan kaca sagemblengna.', # Diffs 'history-title' => 'Jujutan révisi "$1"', 'difference' => '(Béda antarrévisi)', +'difference-multipage' => '(béda antarkaca)', 'lineno' => 'Baris ka-$1:', 'compareselectedversions' => 'Bandingkeun vérsi nu dipilih', 'showhideselectedversions' => 'Témbongkeun/sumputkeun révisi nu dipilih', 'editundo' => 'bolaykeun', -'diff-multi' => '({{PLURAL:$1|Hiji|$1}} révisi antara teu ditembongkeun.)', +'diff-multi' => '({{PLURAL:$1|Hiji révisi antara|$1 révisi antara}} karya {{PLURAL:$2|hiji pamaké|$2 pamaké}} teu ditémbongkeun)', +'diff-multi-manyusers' => '({{PLURAL:$1|Hiji révisi antara|$1 révisi antara}} karya leuwih ti {{PLURAL:$2|pamaké|pamaké}} teu ditémbongkeun)', # Search results 'searchresults' => 'Hasil néangan', @@ -1010,6 +1010,7 @@ Pastikeun yén ieu parobahan bisa miara jujutan kaca sagemblengna.', 'searchprofile-images-tooltip' => 'Pilari koropak/file', 'searchprofile-everything-tooltip' => 'Pilari di sakabéh eusi (kaasup kaca obrolan)', 'search-result-size' => '$1 ({{PLURAL:$2|1 kecap|$2 kecap}})', +'search-result-category-size' => '{{PLURAL:$1|1 anggota|$1 anggota}} ({{PLURAL:$2|1 subkatégori|$2 subkatégori}}, {{PLURAL:$3|1 berkas|$3 berkas}})', 'search-result-score' => 'Kacocogan: $1%', 'search-redirect' => '(alihan $1)', 'search-section' => '(bagean $1)', @@ -1083,6 +1084,7 @@ Coba susud dimimitian ku ''all:'' pikeun nyusud sakabéh kandunganana (kaasup ka 'contextlines' => 'Jumlah baris sakali némbongan', 'contextchars' => 'Karakter kontéks per baris', 'stub-threshold' => 'Wates ambang pikeun format tumbu taratas (bit):', +'stub-threshold-disabled' => 'Tumpur', 'recentchangesdays' => 'Jumlah poé nu dipidangkeun dina Nu anyar robah:', 'recentchangesdays-max' => 'Panglilana $1 {{PLURAL:$1|poé|poé}}', 'recentchangescount' => 'Jumlah éditan anu ditémbongkeun ceuk bawaanana:', @@ -1146,8 +1148,15 @@ Mun geus anggeus teu bisa dibolaykeun.', 'prefs-advancedrendering' => 'Pilihan lengkep', 'prefs-advancedsearchoptions' => 'Pilihan lengkep', 'prefs-advancedwatchlist' => 'Pilihan lengkep', +'prefs-displayrc' => 'Pilihan pidangan', +'prefs-displaysearchoptions' => 'Pilihan pidangan', +'prefs-displaywatchlist' => 'Pilihan pidangan', 'prefs-diffs' => 'Béda', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Alamat surélék sigana bener', +'email-address-validity-invalid' => 'Asupkeun alamat ratron nu bener', + # User rights 'userrights' => 'Manajemén hak pamaké', 'userrights-lookup-user' => 'Atur gorombolan pamaké', @@ -1276,11 +1285,8 @@ Mun geus anggeus teu bisa dibolaykeun.', 'recentchanges-legend' => 'Pilihan parobahan anyar', 'recentchangestext' => 'Lacak parobahan ka wiki panganyarna na kaca ieu.', 'recentchanges-feed-description' => 'Manggihan parobahan panganyarna dina wiki di asupan ieu.', -'recentchanges-legend-newpage' => '$1 - kaca anyar', 'recentchanges-label-newpage' => 'Ieu parobahan bakal ngahasillkeun kaca anyar', -'recentchanges-legend-minor' => '$1 - éditan minor', 'recentchanges-label-minor' => 'Ieu éditan minor', -'recentchanges-legend-bot' => '$1 - robahan bot', 'recentchanges-label-bot' => 'Ieu parobahan dijieun ku bot', 'rcnote' => "Di handap ieu {{PLURAL:$1|'''1''' parobahan| '''$1''' parobahan anyar}} dina {{PLURAL:$2|poé|'''$2''' poé}} ahir, nepi $5, $4.", 'rcnotefrom' => 'Di handap ieu parobahan saprak $2 (nu ditémbongkeun nepi ka $1).', @@ -1324,6 +1330,9 @@ Mun geus anggeus teu bisa dibolaykeun.', 'uploadnologintext' => 'Anjeun kudu [[Special:UserLogin|asup log]] pikeun ngamuat koropak.', 'upload_directory_read_only' => 'Diréktori muatan ($1) teu bisa ditulis ku server ramat.', 'uploaderror' => 'Kasalahan muat', +'upload-recreate-warning' => "'''Awas: berkas nu ngaranna kitu geus kungsi dihapus atawa dipindahkeun.''' + +Log hahapus jeung pipindah pikeun ieu kaca dipidangkeun di handap:", 'uploadtext' => "HEUP! Méméh anjeun ngamuat di dieu, pastikeun yén anjeun geus maca sarta tumut ka kawijakan maké gambar. Mun geus aya koropak na wiki nu ngaranna sarua jeung nu disebutkeun ku anjeun, koropak nu geus lila bakal diganti otomatis. Mangka, iwal ti pikeun ngaropéa hiji koropak, tangtu leuwih hadé mun anjeun mariksa heula bisi koropak nu sarupa geus aya. @@ -1362,6 +1371,13 @@ Catet yén salaku kaca wiki, nu séjén bisa ngarobah atawa ngahapus muatan anje 'filetype-banned-type' => "'''\".\$1\"''' kaasup tipeu koropak nu teu dicaram. {{PLURAL:\$3|Nu diwidian nyaéta|Nu diwidian nyaéta}} \$2.", 'filetype-missing' => 'Koropakna teu boga éksténsi (misalna ".jpg").', +'empty-file' => 'Berkas nu dikirim kosong.', +'file-too-large' => 'Berkas nu dikirim gedé teuing.', +'filename-tooshort' => 'Ngaran berkas pondok teuing.', +'filetype-banned' => 'Jenis berkas ieu dipahing.', +'verification-error' => 'Ieu berkas teu lulus vérifikasi.', +'illegal-filename' => 'Ngaran berkas dipahing.', +'tmp-create-error' => 'Teu bisa nyieun berkas sementara.', 'large-file' => 'Hadéna mah koropak nu dimuat téh teu leuwih ti $1 bit; ieu koropak gedéna $2 bit.', 'largefileserver' => 'Ieu koropak badag teuing, ngaleuwihan wates nu diwenangkeun ku server.', 'emptyfile' => "Koropak nu dimuatkeun ku anjeun jigana kosong. Hal ieu bisa jadi alatan sarupaning ''typo'' na ngaran koropakna. Mangga parios deui yén anjeun leres-leres hoyong ngamuat koropak éta.", @@ -1374,7 +1390,6 @@ Pilih ngaran séjén.", 'fileexists-forbidden' => 'Koropak nu ngaranna ieu geus aya; mangga balik deui sarta muatkeun koropakna maké ngaran nu béda. [[File:$1|thumb|center|$1]]', 'fileexists-shared-forbidden' => "Koropak nu ngaranna ieu geus aya dina gudang koropak babagi (''shared file repository''); mangga balik deui sarta muatkeun koropak ieu maké ngaran nu béda. [[File:$1|thumb|center|$1]]", 'file-exists-duplicate' => 'Gambar ieu duplikat sareng {{PLURAL:$1|gambar|gambar}}:', -'successfulupload' => 'Ngamuat geus hasil', 'uploadwarning' => 'Pépéling ngamuat', 'uploadwarning-text' => 'Ropéa pedaran berkas di handap terus cobaan deui.', 'savefile' => 'Simpen koropak', @@ -1393,6 +1408,7 @@ Pilih ngaran séjén.", 'upload-options' => 'Pilihan muat', 'watchthisupload' => 'Awaskeun ieu kaca', 'filewasdeleted' => 'Ngaran koropak ieu geus di hapus. Anjeun kudu ningali ka $1 sa acan muatkeun koropak deui', +'upload-success-subj' => 'Ngamuat geus hasil', 'upload-proto-error' => 'Salah protokol', 'upload-file-error' => 'Kasalahan internal', @@ -1518,7 +1534,6 @@ Saméméh ngahapus, pariksa heula bisi aya tumbu ka ieu citakan.', 'statistics-pages' => 'Kaca', 'statistics-pages-desc' => 'Sakabéh kaca di ieu wiki, kaasup kaca obrolan, alihan, jeung nu lianna.', 'statistics-files' => 'Koropak nu geus dimuat', -'statistics-jobqueue' => 'Panjang [http://www.mediawiki.org/wiki/Manual:Job_queue antrian pagawéan]', 'statistics-users-active' => 'Pamaké getol', 'statistics-mostpopular' => 'Kaca nu pangmindengna dibuka', @@ -1709,7 +1724,6 @@ Alamat surélék nu diasupkeun kana [[Special:Preferences|préferénsi pamaké a # Watchlist 'watchlist' => 'Awaskeuneun', 'mywatchlist' => 'Awaskeuneun', -'watchlistfor' => "(keur '''$1''')", 'nowatchlist' => 'Anjeun teu boga awaskeuneun.', 'watchlistanontext' => 'Mangga $1 pikeun némbongkeun atawa ngarobah béréndélan awaskeuneun anjeun.', 'watchnologin' => 'Can asup log', @@ -1817,7 +1831,9 @@ Hal ieu teu diwenangkeun pikeun nyegah karuksakan {{SITENAME}} nu teu dihaja.', 'editcomment' => "Komentar ngéditna: \"''\$1''\".", 'revertpage' => 'Malikkeun éditan $2, diganti deui ka vérsi ahir ku $1', 'rollback-success' => 'Mulangkeun éditan $1; balik deui ka vérsi panungtung ku $2.', -'sessionfailure' => 'Sigana aya masalah jeung termin log anjeun; peta ieu geus dibolaykeun salaku pépéling pikeun ngalawan ayana pangbajak. Mangga pencét "back" jeung muat ulang ti kaca asal anjeun, lajeng cobaan deui.', + +# Edit tokens +'sessionfailure' => 'Sigana aya masalah jeung termin log anjeun; peta ieu geus dibolaykeun salaku pépéling pikeun ngalawan ayana pangbajak. Mangga pencét "back" jeung muat ulang ti kaca asal anjeun, lajeng cobaan deui.', # Protect 'protectlogpage' => 'Log_koncian', @@ -1989,7 +2005,6 @@ Pikeun rujukan, éntri log panungtung dipidangkeun di handap:', 'ipb-edit-dropdown' => 'Édit alesan meungpeuk', 'ipb-unblock-addr' => 'Buka peungpeuk $1', 'ipb-unblock' => 'Nyabut peungpeuk pamaké atawa alamat IP', -'ipb-blocklist-addr' => 'Tempo peungpeuk nu diterapkeun keur $1', 'ipb-blocklist' => 'Tempo peungpeuk nu diteurapkeun', 'ipb-blocklist-contribs' => 'Ilubiung $1', 'unblockip' => 'Buka peungpeuk pamaké', @@ -2353,10 +2368,10 @@ $1', # Media information 'imagemaxsize' => 'Watesan gambar na kaca dadaran gambar nepi ka:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|kaca|kaca}}', -'file-info' => '(ukuran koropak: $1, tipeu MIME: $2)', -'file-info-size' => '($1 × $2 piksel, ukuran koropak: $3, tipeu MIME: $4)', +'file-info' => 'ukuran koropak: $1, tipeu MIME: $2', +'file-info-size' => '$1 × $2 piksel, ukuran koropak: $3, tipeu MIME: $4', 'file-nohires' => 'Euweuh résolusi nu leuwih luhur.', -'svg-long-desc' => '(Koropak SVG, nominalna $1 × $2 piksel, ukuranana $3)', +'svg-long-desc' => 'Koropak SVG, nominalna $1 × $2 piksel, ukuranana $3', 'show-big-image' => 'Résolusi pinuh', 'show-big-image-thumb' => 'Ukuran ieu pidangan: $1 × $2 piksel', @@ -2743,6 +2758,13 @@ Coba ku sawangan normal.', 'tags-edit' => 'édit', 'tags-hitcount' => '$1 {{PLURAL:$1|parobahan|parobahan}}', +# Special:ComparePages +'compare-page1' => 'Kaca 1', +'compare-page2' => 'Kaca 2', +'compare-rev1' => 'Révisi 1', +'compare-rev2' => 'Révisi 2', +'compare-submit' => 'Bandingkeun', + # Database error messages 'dberr-header' => 'Aya masalah dina ieu wiki', 'dberr-problems' => 'Punten! Nuju aya gangguan téhnis.', diff --git a/languages/messages/MessagesSv.php b/languages/messages/MessagesSv.php index 4da0595a..18e72285 100644 --- a/languages/messages/MessagesSv.php +++ b/languages/messages/MessagesSv.php @@ -9,6 +9,7 @@ * * @author Ainali * @author Boivie + * @author Dafer45 * @author EPO * @author Fluff * @author GameOn @@ -36,6 +37,7 @@ * @author Skalman * @author StefanB * @author Steinninn + * @author Str4nd * @author Tobulos1 * @author Where next Columbus * @author Where next Columbus? @@ -69,59 +71,59 @@ $namespaceAliases = array( 'Hjälp_diskussion' => NS_HELP_TALK ); +#!!# Translation Prefixindex for Prefixindex is not in normalised form, which is PrefixIndex $specialPageAliases = array( - 'DoubleRedirects' => array( 'Dubbla omdirigeringar' ), - 'BrokenRedirects' => array( 'Trasiga omdirigeringar', 'Dåliga omdirigeringar' ), + 'DoubleRedirects' => array( 'Dubbla_omdirigeringar' ), + 'BrokenRedirects' => array( 'Trasiga_omdirigeringar', 'Dåliga_omdirigeringar' ), 'Disambiguations' => array( 'Förgreningssidor' ), 'Userlogin' => array( 'Inloggning' ), 'Userlogout' => array( 'Utloggning' ), - 'CreateAccount' => array( 'Skapa konto' ), + 'CreateAccount' => array( 'Skapa_konto' ), 'Preferences' => array( 'Inställningar' ), 'Watchlist' => array( 'Bevakningslista', 'Övervakningslista' ), - 'Recentchanges' => array( 'Senaste ändringar' ), + 'Recentchanges' => array( 'Senaste_ändringar' ), 'Upload' => array( 'Uppladdning' ), 'Listfiles' => array( 'Fillista', 'Bildlista' ), - 'Newimages' => array( 'Nya bilder' ), + 'Newimages' => array( 'Nya_bilder' ), 'Listusers' => array( 'Användare', 'Användarlista' ), 'Listgrouprights' => array( 'Grupprättighetslista' ), 'Statistics' => array( 'Statistik' ), 'Randompage' => array( 'Slumpsida' ), - 'Lonelypages' => array( 'Övergivna sidor', 'Sidor utan länkar till' ), - 'Uncategorizedpages' => array( 'Okategoriserade sidor' ), - 'Uncategorizedcategories' => array( 'Okategoriserade kategorier' ), - 'Uncategorizedimages' => array( 'Okategoriserade filer', 'Okategoriserade bilder' ), - 'Uncategorizedtemplates' => array( 'Okategoriserade mallar' ), - 'Unusedcategories' => array( 'Oanvända kategorier' ), - 'Unusedimages' => array( 'Oanvända filer', 'Oanvända bilder' ), - 'Wantedpages' => array( 'Önskade sidor', 'Trasiga länkar' ), - 'Wantedcategories' => array( 'Önskade kategorier' ), - 'Wantedfiles' => array( 'Önskade filer' ), - 'Wantedtemplates' => array( 'Önskade mallar' ), - 'Mostlinked' => array( 'Mest länkade sidor' ), - 'Mostlinkedcategories' => array( 'Största kategorier' ), - 'Mostlinkedtemplates' => array( 'Mest använda mallar' ), - 'Mostimages' => array( 'Mest länkade filer', 'Flest bilder' ), - 'Mostcategories' => array( 'Flest kategorier' ), - 'Mostrevisions' => array( 'Flest versioner' ), - 'Fewestrevisions' => array( 'Minst versioner' ), - 'Shortpages' => array( 'Korta sidor' ), - 'Longpages' => array( 'Långa sidor' ), - 'Newpages' => array( 'Nya sidor' ), - 'Ancientpages' => array( 'Gamla sidor' ), - 'Deadendpages' => array( 'Sidor utan länkar', 'Sidor utan länkar från' ), - 'Protectedpages' => array( 'Skyddade sidor' ), - 'Protectedtitles' => array( 'Skyddade titlar' ), - 'Allpages' => array( 'Alla sidor' ), - 'Prefixindex' => array( 'Prefixindex' ), + 'Lonelypages' => array( 'Föräldralösa_sidor', 'Övergivna_sidor', 'Sidor_utan_länkar_till' ), + 'Uncategorizedpages' => array( 'Okategoriserade_sidor' ), + 'Uncategorizedcategories' => array( 'Okategoriserade_kategorier' ), + 'Uncategorizedimages' => array( 'Okategoriserade_filer', 'Okategoriserade_bilder' ), + 'Uncategorizedtemplates' => array( 'Okategoriserade_mallar' ), + 'Unusedcategories' => array( 'Oanvända_kategorier' ), + 'Unusedimages' => array( 'Oanvända_filer', 'Oanvända_bilder' ), + 'Wantedpages' => array( 'Önskade_sidor', 'Trasiga_länkar' ), + 'Wantedcategories' => array( 'Önskade_kategorier' ), + 'Wantedfiles' => array( 'Önskade_filer' ), + 'Wantedtemplates' => array( 'Önskade_mallar' ), + 'Mostlinked' => array( 'Mest_länkade_sidor' ), + 'Mostlinkedcategories' => array( 'Största_kategorier' ), + 'Mostlinkedtemplates' => array( 'Mest_använda_mallar' ), + 'Mostimages' => array( 'Mest_länkade_filer', 'Flest_bilder' ), + 'Mostcategories' => array( 'Flest_kategorier' ), + 'Mostrevisions' => array( 'Flest_versioner' ), + 'Fewestrevisions' => array( 'Minst_versioner' ), + 'Shortpages' => array( 'Korta_sidor' ), + 'Longpages' => array( 'Långa_sidor' ), + 'Newpages' => array( 'Nya_sidor' ), + 'Ancientpages' => array( 'Gamla_sidor' ), + 'Deadendpages' => array( 'Sidor_utan_länkar', 'Sidor_utan_länkar_från' ), + 'Protectedpages' => array( 'Skyddade_sidor' ), + 'Protectedtitles' => array( 'Skyddade_titlar' ), + 'Allpages' => array( 'Alla_sidor' ), 'Ipblocklist' => array( 'Blockeringslista' ), 'Specialpages' => array( 'Specialsidor' ), 'Contributions' => array( 'Bidrag' ), 'Emailuser' => array( 'E-mail' ), - 'Confirmemail' => array( 'Bekräfta epost' ), - 'Whatlinkshere' => array( 'Länkar hit' ), - 'Recentchangeslinked' => array( 'Senaste relaterade ändringar' ), + 'Confirmemail' => array( 'Bekräfta_epost' ), + 'Whatlinkshere' => array( 'Länkar_hit' ), + 'Recentchangeslinked' => array( 'Senaste_relaterade_ändringar' ), 'Movepage' => array( 'Flytta' ), - 'Blockme' => array( 'Blockera mig' ), + 'Blockme' => array( 'Blockera_mig' ), 'Booksources' => array( 'Bokkällor' ), 'Categories' => array( 'Kategorier' ), 'Export' => array( 'Exportera' ), @@ -130,32 +132,32 @@ $specialPageAliases = array( 'Blockip' => array( 'Blockera' ), 'Undelete' => array( 'Återställ' ), 'Import' => array( 'Importera' ), - 'Lockdb' => array( 'Lås databasen' ), - 'Unlockdb' => array( 'Lås upp databasen' ), + 'Lockdb' => array( 'Lås_databasen' ), + 'Unlockdb' => array( 'Lås_upp_databasen' ), 'Userrights' => array( 'Rättigheter' ), 'MIMEsearch' => array( 'MIME-sökning' ), 'FileDuplicateSearch' => array( 'Dublettfilsökning' ), - 'Unwatchedpages' => array( 'Obevakade sidor' ), + 'Unwatchedpages' => array( 'Obevakade_sidor' ), 'Listredirects' => array( 'Omdirigeringar' ), - 'Revisiondelete' => array( 'Radera version' ), - 'Unusedtemplates' => array( 'Oanvända mallar' ), + 'Revisiondelete' => array( 'Radera_version' ), + 'Unusedtemplates' => array( 'Oanvända_mallar' ), 'Randomredirect' => array( 'Slumpomdirigering' ), - 'Mypage' => array( 'Min sida' ), - 'Mytalk' => array( 'Min diskussion' ), - 'Mycontributions' => array( 'Mina bidrag' ), + 'Mypage' => array( 'Min_sida' ), + 'Mytalk' => array( 'Min_diskussion' ), + 'Mycontributions' => array( 'Mina_bidrag' ), 'Listadmins' => array( 'Administratörer' ), 'Listbots' => array( 'Robotlista' ), - 'Popularpages' => array( 'Populära sidor' ), + 'Popularpages' => array( 'Populära_sidor' ), 'Search' => array( 'Sök' ), - 'Resetpass' => array( 'Återställ lösenord' ), - 'Withoutinterwiki' => array( 'Utan interwikilänkar' ), - 'MergeHistory' => array( 'Slå ihop historik' ), + 'Resetpass' => array( 'Återställ_lösenord' ), + 'Withoutinterwiki' => array( 'Utan_interwikilänkar' ), + 'MergeHistory' => array( 'Slå_ihop_historik' ), 'Filepath' => array( 'Filsökväg' ), - 'Invalidateemail' => array( 'Ogiltigförklara epost' ), - 'Blankpage' => array( 'Tom sida' ), + 'Invalidateemail' => array( 'Ogiltigförklara_epost' ), + 'Blankpage' => array( 'Tom_sida' ), 'LinkSearch' => array( 'Länksökning' ), - 'DeletedContributions' => array( 'Raderade bidrag' ), - 'Tags' => array( 'Taggar' ), + 'DeletedContributions' => array( 'Raderade_bidrag' ), + 'Tags' => array( 'Märken', 'Taggar' ), ); $magicWords = array( @@ -251,7 +253,7 @@ $magicWords = array( 'revisionyear' => array( '1', 'REVISIONSÅR', 'REVISIONYEAR' ), 'revisiontimestamp' => array( '1', 'REVISIONSTIDSSTÄMPEL', 'REVISIONTIMESTAMP' ), 'revisionuser' => array( '1', 'REVISIONSANVÄNDARE', 'REVISIONUSER' ), - 'fullurl' => array( '0', 'FULLURL:. FULLTURL:', 'FULLURL:' ), + 'fullurl' => array( '0', 'FULLTURL:', 'FULLURL:' ), 'fullurle' => array( '0', 'FULLTURLE:', 'FULLURLE:' ), 'lcfirst' => array( '0', 'LBFÖRST:', 'LCFIRST:' ), 'ucfirst' => array( '0', 'UCFIRST', 'SBFÖRST:', 'UCFIRST:' ), @@ -318,8 +320,7 @@ $messages = array( 'tog-editsection' => 'Aktivera redigering av avsnitt genom [redigera]-länkar', 'tog-editsectiononrightclick' => 'Aktivera redigering av avsnitt genom högerklick på underrubriker (Javascript)', 'tog-showtoc' => 'Visa innehållsförteckning (för sidor som har minst fyra rubriker)', -'tog-rememberpassword' => 'Kom ihåg lösenordet till nästa besök', -'tog-editwidth' => 'Utvidga redigeringsrutan till att fylla hela skärmen', +'tog-rememberpassword' => 'Kom ihåg min inloggning på den här webbläsaren (i maximalt $1 {{PLURAL:$1|dag|dagar}})', 'tog-watchcreations' => 'Lägg till sidor jag skapar i min bevakningslista', 'tog-watchdefault' => 'Lägg till sidor jag redigerar i min bevakningslista', 'tog-watchmoves' => 'Lägg till sidor jag flyttar i min bevakningslista', @@ -467,31 +468,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Nytt ämne', -'vector-action-delete' => 'Radera', -'vector-action-move' => 'Flytta', -'vector-action-protect' => 'Skrivskydda', -'vector-action-undelete' => 'Återställ', -'vector-action-unprotect' => 'Ta bort skrivskydd', -'vector-namespace-category' => 'Kategori', -'vector-namespace-help' => 'Hjälpsida', -'vector-namespace-image' => 'Fil', -'vector-namespace-main' => 'Sida', -'vector-namespace-media' => 'Mediasida', -'vector-namespace-mediawiki' => 'Systemmeddelande', -'vector-namespace-project' => 'Projektsida', -'vector-namespace-special' => 'Specialsida', -'vector-namespace-talk' => 'Diskussion', -'vector-namespace-template' => 'Mall', -'vector-namespace-user' => 'Användarsida', -'vector-view-create' => 'Skapa', -'vector-view-edit' => 'Redigera', -'vector-view-history' => 'Visa historik', -'vector-view-view' => 'Visa', -'vector-view-viewsource' => 'Visa källa', -'actions' => 'Åtgärder', -'namespaces' => 'Namnrymder', -'variants' => 'Varianter', +'vector-action-addsection' => 'Nytt ämne', +'vector-action-delete' => 'Radera', +'vector-action-move' => 'Flytta', +'vector-action-protect' => 'Skrivskydda', +'vector-action-undelete' => 'Återställ', +'vector-action-unprotect' => 'Ta bort skrivskydd', +'vector-simplesearch-preference' => 'Aktivera utökade sökförslag (endast Vector-utseendet)', +'vector-view-create' => 'Skapa', +'vector-view-edit' => 'Redigera', +'vector-view-history' => 'Visa historik', +'vector-view-view' => 'Visa', +'vector-view-viewsource' => 'Visa källa', +'actions' => 'Åtgärder', +'namespaces' => 'Namnrymder', +'variants' => 'Varianter', 'errorpagetitle' => 'Fel', 'returnto' => 'Tillbaka till $1.', @@ -552,6 +543,9 @@ För många användare försöker visa denna sida. Vänta en liten stund och försök igen lite senare. $1', +'pool-timeout' => 'Timeout i väntan på låsning', +'pool-queuefull' => 'Kön är full', +'pool-errorunknown' => 'Okänt fel', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Om {{SITENAME}}', @@ -714,7 +708,8 @@ Glöm inte att justera dina [[Special:Preferences|{{SITENAME}}-inställningar]]. 'yourname' => 'Användarnamn:', 'yourpassword' => 'Lösenord:', 'yourpasswordagain' => 'Upprepa lösenord', -'remembermypassword' => 'Automatisk inloggning i framtiden.', +'remembermypassword' => 'Spara min inloggning på den här datorn (i max $1 {{PLURAL:$1|dag|dagar}})', +'securelogin-stick-https' => 'Fortsätt vara ansluten till HTTPS efter inloggning', 'yourdomainname' => 'Din domän', 'externaldberror' => 'Antingen inträffade autentiseringsproblem med en extern databas, eller så får du inte uppdatera ditt externa konto.', 'login' => 'Logga in', @@ -731,6 +726,7 @@ Glöm inte att justera dina [[Special:Preferences|{{SITENAME}}-inställningar]]. 'gotaccount' => "Har du redan ett användarkonto? '''$1'''.", 'gotaccountlink' => 'Logga in', 'createaccountmail' => 'med e-post', +'createaccountreason' => 'Orsak:', 'badretype' => 'De lösenord du uppgett överenstämmer inte med varandra.', 'userexists' => 'Det valda användarnamnet används redan. Välj ett annat namn.', @@ -754,6 +750,7 @@ Kontrollera din stavning, eller [[Special:UserLogin/signup|skapa ett nytt konto] 'wrongpasswordempty' => 'Lösenordet som angavs var blankt. Var god försök igen.', 'passwordtooshort' => 'Lösenord måste innehålla minst {{PLURAL:$1|$1 tecken}}.', 'password-name-match' => 'Ditt lösenord måste vara olikt ditt användarnamn.', +'password-login-forbidden' => 'Användningen av dessa användarnamn och lösenord har förbjudits.', 'mailmypassword' => 'Skicka nytt lösenord', 'passwordremindertitle' => 'Nytt temporärt lösenord från {{SITENAME}}', 'passwordremindertext' => 'Någon (förmodligen du, från IP-adressen $1) har begärt ett nytt lösenord till {{SITENAME}} ($4). Ett tillfälligt lösenordet för användaren "$2" har skapats och det blev "$3". Om detta var vad du önskade, så behöver du nu logga in och välja ett nytt lösenord. Ditt tillfälliga lösenord går ut om {{PLURAL:$5|en dag|$5 dagar}}. @@ -790,6 +787,9 @@ Vänta innan du försöker igen.', 'loginlanguagelabel' => 'Språk: $1', 'suspicious-userlogout' => 'Din begäran om att logga ut nekades eftersom det ser ut som det skickades av en trasig webbläsare eller cachande proxy.', +# E-mail sending +'php-mail-error-unknown' => "Okänt fel i PHP's mail()-funktion", + # Password reset dialog 'resetpass' => 'Ändra lösenord', 'resetpass_announce' => 'Du loggade in med ett temporärt lösenord. För att slutföra inloggningen måste du välja ett nytt lösenord.', @@ -842,10 +842,12 @@ Du kanske redan har lyckats ändra ditt lösenord eller begärt ett nytt tillfä 'showdiff' => 'Visa ändringar', 'anoneditwarning' => "'''Varning:''' Du är inte inloggad. Din IP-adress kommer att sparas i historiken för den här sidan.", +'anonpreviewwarning' => "''Du är inte inloggad. Vid spara kommer att din IP-adress registreras på denna sidas redigeringshistorik.''", 'missingsummary' => "'''Påminnelse:''' Du har inte skrivit någon redigeringskommentar. Om du klickar på Spara igen, kommer din redigering att sparas utan en sådan.", 'missingcommenttext' => 'Var god och skriv in en kommentar nedan.', -'missingcommentheader' => "'''OBS:''' Du har inte skrivit någon rubrik till den här kommentaren. Om du trycker på \"Spara\" igen, så sparas kommentaren utan någon rubrik.", +'missingcommentheader' => "'''Påminnelse:''' Du har inte skrivit något ämne/rubrik för den här kommentaren. +Om du trycker på \"{{int:savearticle}}\" igen, kommer din redigering sparas utan rubrik.", 'summary-preview' => 'Förhandsgranskning av sammanfattning:', 'subject-preview' => 'Rubrikförhandsgranskning:', 'blockedtitle' => 'Användaren är blockerad', @@ -908,13 +910,21 @@ eller [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE} 'userpage-userdoesnotexist-view' => 'Kontot "$1" är inte registrerat.', 'blocked-notice-logextract' => 'Användaren är blockerad. Orsaken till senaste blockeringen kan ses nedan:', -'clearyourcache' => "'''Observera: Sedan du sparat sidan kan du behöva tömma din webbläsares cache för att se ändringarna.''' '''Mozilla/Firefox/Safari:''' håll ner ''Skift'' och klicka på ''Reload'' eller tryck antingen ''Ctrl-F5'' eller ''Ctrl-R'' (''Command-R'' på Macintosh); '''Konqueror:''': klicka ''Reload'' eller tryck ''F5;'' '''Opera:''' rensa cachen i ''Tools → Preferences;'' '''Internet Explorer:''' håll ner ''Ctrl'' och klicka på ''Refresh'' eller tryck ''Ctrl-F5.''", +'clearyourcache' => "'''Observera: Sedan du sparat sidan kan du behöva tömma din webbläsares cache för att se ändringarna.''' +'''Mozilla/Firefox/Safari:''' håll ner ''Skift'' och klicka på ''Reload'' eller tryck antingen ''Ctrl-F5'' eller ''Ctrl-R'' (''Command-R'' på Macintosh); +'''Konqueror:''': klicka ''Reload'' eller tryck ''F5;'' +'''Opera:''' rensa cachen i ''Tools → Preferences;'' +'''Internet Explorer:''' håll ner ''Ctrl'' och klicka på ''Refresh'' eller tryck ''Ctrl-F5.''", 'usercssyoucanpreview' => "'''Tips:''' Använd \"{{int:showpreview}}\"-knappen för att testa din nya css innan du sparar.", 'userjsyoucanpreview' => "'''Tips:''' Använd \"{{int:showpreview}}\"-knappen för att testa din nya JavaScript innan du sparar.", 'usercsspreview' => "'''Kom ihåg att du bara förhandsgranskar din användar-CSS. Den har inte sparats än!'''", 'userjspreview' => "'''Kom ihåg att du bara testar/förhandsgranskar ditt JavaScript, det har inte sparats än!'''", -'userinvalidcssjstitle' => "'''Varning:''' Skalet \"\$1\" finns inte. Kom ihåg att .css- och .js-sidor för enskilda användare börjar på liten bokstav. Exempel: {{ns:user}}:Foo/monobook.css i stället för {{ns:user}}:Foo/Monobook.css.", +'sitecsspreview' => "'''Kom ihåg att du bara förhandsgranskar detta CSS.''' +'''Det har ännu inte sparats!'''", +'sitejspreview' => "'''Kom ihåg att du bara förhandsgranskar denna JavaScript-kod.''' +'''Det har ännu inte sparats!'''", +'userinvalidcssjstitle' => "'''Varning:''' Skalet \"\$1\" finns inte. Kom ihåg att .css- och .js-sidor för enskilda användare börjar på liten bokstav. Exempel: {{ns:user}}:Foo/vector.css i stället för {{ns:user}}:Foo/Vector.css.", 'updated' => '(Uppdaterad)', 'note' => "'''Obs!'''", 'previewnote' => "'''Detta är bara en förhandsvisning; @@ -953,9 +963,6 @@ Du lovar oss också att du skrev texten själv, eller kopierade från kulturellt 'copyrightwarning2' => "Observera att alla bidrag till {{SITENAME}} kan komma att redigeras, ändras, eller tas bort av andra deltagare. Om du inte vill se din text förändrad efter andras gottfinnade skall du inte skriva in någon text här.
    Du lovar oss också att du skrev texten själv, eller kopierade från kulturellt allmängods som inte skyddas av upphovsrätt, eller liknande källor - se $1 för detaljer. '''LÄGG INTE UT UPPHOVSRÄTTSSKYDDAT MATERIAL HÄR UTAN TILLÅTELSE!'''", -'longpagewarning' => "'''VARNING: Den här sidan är $1 kilobyte lång; -vissa webbläsare kan ha problem att redigera sidor som närmar sig eller är större än 32 kB. -Överväg att bryta upp sidan i mindre delar.'''", 'longpageerror' => "'''FEL: Texten som du försöker spara är $1 kilobyte, vilket är mer än det maximalt tillåtna $2 kilobyte. Den kan inte sparas.'''", 'readonlywarning' => "'''VARNING: Databasen är tillfälligt låst för underhåll. Du kommer inte att kunna spara dina ändringar just nu. Det kan vara klokt att kopiera över texten till din egen dator, tills databasen är upplåst igen.''' @@ -1007,7 +1014,7 @@ Antalet anrop får vara högst $2, nu görs {{PLURAL:$#|$1 anrop}}.', 'expensive-parserfunction-category' => 'Sidor med för många resurskrävande parserfunktioner', 'post-expand-template-inclusion-warning' => 'Varning: Den här sidan innehåller för mycket mallinklusioner. Några av mallarna kommer inte att inkluderas.', -'post-expand-template-inclusion-category' => 'Sidor som inkluderar för mycket mallar', +'post-expand-template-inclusion-category' => 'Sidor som inkluderar för mycket mallkod', 'post-expand-template-argument-warning' => 'Varning: Sidan innehåller en eller flera mallparametrar som blir för långa när de expanderas. Dessa parametrar har uteslutits.', 'post-expand-template-argument-category' => 'Sidor med uteslutna mallparametrar', @@ -1079,15 +1086,15 @@ Som administratör kan du se den; det kan finnas mer information i [{{fullurl:{{ Som administratör kan du se den; det kan finnas mer information i [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} undanhållandeloggen].", 'rev-deleted-no-diff' => "Du kan inte se den här diffen på grund av att en av versionerna har '''raderats'''. Det kan finnas mer information i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} raderingsloggen].", -'rev-suppressed-no-diff' => "Du kan inte se skillnaden för en av revisionerna har blivit '''raderad'''.", +'rev-suppressed-no-diff' => "Du kan inte se den här diffen för en av sidversionerna har '''raderats'''.", 'rev-deleted-unhide-diff' => "En av versionerna för den här diffen har '''raderats'''. Det kan finnas mer information i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} raderingsloggen]. Som administratör kan du fortfarande [$1 se den här diffen] om du önskar att fortsätta.", 'rev-suppressed-unhide-diff' => "En av versionerna för denna diff har blivit '''undanhållen'''. Det kan finnas detaljer i [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} undanhållandeloggen]. Som administratör kan du fortfarande [$1 se denna diff] om du önskar fortsätta.", -'rev-deleted-diff-view' => "En av revisionerna för denna diff har blivit '''raderad'''. -Som en administratör kan du se denna diff, det kan finnas detaljer i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} raderingsloggen].", +'rev-deleted-diff-view' => "En av sidversionerna i denna diff har '''raderats'''. +Som administratör kan du se denna diff. Mer information kan finnas i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} raderingsloggen].", 'rev-suppressed-diff-view' => "En av versionerna för denna diff har blivit '''undanhållen'''. Som administratör kan du se denna diff; det kan finnas detaljer i [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} undanhållandeloggen].", 'rev-delundel' => 'visa/göm', @@ -1135,6 +1142,8 @@ $1", 'logdelete-failure' => "'''Loggens synlighet kunde inte ställas in:''' $1", 'revdel-restore' => 'ändra synlighet', +'revdel-restore-deleted' => 'borttagna versioner', +'revdel-restore-visible' => 'synliga versioner', 'pagehist' => 'Sidhistorik', 'deletedhist' => 'Raderad historik', 'revdelete-content' => 'innehåll', @@ -1203,11 +1212,13 @@ Se till att sidhistorikens kontinuitet behålls när du sammanfogar historik.', # Diffs 'history-title' => 'Versionshistorik för "$1"', 'difference' => '(Skillnad mellan versioner)', +'difference-multipage' => '(Skillnad mellan sidor)', 'lineno' => 'Rad $1:', 'compareselectedversions' => 'Jämför angivna versioner', 'showhideselectedversions' => 'Visa/dölj valda versioner', 'editundo' => 'gör ogjord', -'diff-multi' => '({{PLURAL:$1|En mellanliggande version|$1 mellanliggande versioner}} visas inte.)', +'diff-multi' => '({{PLURAL:$1|En mellanliggande version|$1 mellanliggande versioner}} av {{PLURAL:$2|en användare|$2 användare}} visas inte)', +'diff-multi-manyusers' => '({{PLURAL:$1|En mellanliggande version|$1 mellanliggande versioner}} av mer än $2 {{PLURAL:$2|en användare|$2 användare}} visas inte)', # Search results 'searchresults' => 'Sökresultat', @@ -1242,6 +1253,7 @@ Se till att sidhistorikens kontinuitet behålls när du sammanfogar historik.', 'searchprofile-everything-tooltip' => 'Sök allt innehåll (inklusive diskussionssidor)', 'searchprofile-advanced-tooltip' => 'Sök i vissa namnrymder', 'search-result-size' => '$1 ({{PLURAL:$2|1 ord|$2 ord}})', +'search-result-category-size' => '{{PLURAL:$1|1 medlem|$1 medlemmar}} ({{PLURAL:$2|1 underkategori|$2 underkategorier}}, {{PLURAL:$3|1 fil|$3 filer}})', 'search-result-score' => 'Relevans: $1%', 'search-redirect' => '(omdirigering $1)', 'search-section' => '(avsnitt $1)', @@ -1318,6 +1330,7 @@ Notera dock att deras indexering av {{SITENAME}} kan vara något föråldrad.', 'contextlines' => 'Antal rader per träff:', 'contextchars' => 'Tecken per rad:', 'stub-threshold' => 'Gräns för stubblänk-formatering (byte):', +'stub-threshold-disabled' => 'Avaktiverat', 'recentchangesdays' => 'Antal dygn som skall visas i "senaste ändringarna":', 'recentchangesdays-max' => '(maximalt $1 {{PLURAL:$1|dygn|dygn}})', 'recentchangescount' => 'Antal redigeringar som visas som standard:', @@ -1351,6 +1364,7 @@ Här är ett slumpmässigt genererat värde som du kan använda: $1', 'prefs-files' => 'Filer', 'prefs-custom-css' => 'personlig CSS', 'prefs-custom-js' => 'personlig JavaScript', +'prefs-common-css-js' => 'Delad CSS/JS för alla teman:', 'prefs-reset-intro' => 'Du kan använda den här sidan till att återställa dina inställningar till webbplatsens standardinställningar. Detta kan inte återställas.', 'prefs-emailconfirm-label' => 'E-postbekräftelse:', @@ -1388,9 +1402,15 @@ Du kan också välja att låta andra användare kontakta dig genom din användar 'prefs-advancedrendering' => 'Avancerade alternativ', 'prefs-advancedsearchoptions' => 'Avancerade alternativ', 'prefs-advancedwatchlist' => 'Avancerade alternativ', -'prefs-display' => 'Visningsalternativ', +'prefs-displayrc' => 'Visningsalternativ', +'prefs-displaysearchoptions' => 'Visningalternativ', +'prefs-displaywatchlist' => 'Visningalternativ', 'prefs-diffs' => 'Skillnader', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Ser giltig ut', +'email-address-validity-invalid' => 'Giltig adress krävs!', + # User rights 'userrights' => 'Hantering av användarrättigheter', 'userrights-lookup-user' => 'Hantera användargrupper', @@ -1474,6 +1494,7 @@ Du kan också välja att låta andra användare kontakta dig genom din användar 'right-hideuser' => 'Blockera användarnamn och dölja det från blockeringsloggen', 'right-ipblock-exempt' => 'Kan redigera från blockerade IP-adresser', 'right-proxyunbannable' => 'Kan redigera från blockerade proxyer', +'right-unblockself' => 'Avblockera sig själva', 'right-protect' => 'Ändra skyddsnivåer och redigera skyddade sidor', 'right-editprotected' => 'Redigera skyddade sidor', 'right-editinterface' => 'Redigera användargränssnittet', @@ -1496,7 +1517,6 @@ Du kan också välja att låta andra användare kontakta dig genom din användar 'right-siteadmin' => 'Låsa och låsa upp databasen', 'right-reset-passwords' => 'Återställa andra användares lösenord', 'right-override-export-depth' => 'Exportera sidor inklusive länkade sidor till ett djup på 5', -'right-versiondetail' => 'Visa den utökade mjukvaruversionsinformationen', 'right-sendemail' => 'Skicka e-post till andra användare', # User rights log @@ -1547,14 +1567,9 @@ Du kan också välja att låta andra användare kontakta dig genom din användar 'recentchanges-legend' => 'Alternativ för senaste ändringarna', 'recentchangestext' => 'Följ de senaste ändringarna i wikin på denna sida.', 'recentchanges-feed-description' => 'Följ de senaste ändringarna i wikin genom den här matningen.', -'recentchanges-label-legend' => 'Förklaring: $1', -'recentchanges-legend-newpage' => '$1 - ny sida', 'recentchanges-label-newpage' => 'Denna redigering skapade en ny sida', -'recentchanges-legend-minor' => '$1 - mindre ändring', 'recentchanges-label-minor' => 'Detta är en mindre ändring', -'recentchanges-legend-bot' => '$1 - botredigering', 'recentchanges-label-bot' => 'Denna redigering gjordes av en bot', -'recentchanges-legend-unpatrolled' => '$1 - okontrollerad redigering', 'recentchanges-label-unpatrolled' => 'Denna redigering har inte blivit kontrollerad ännu', 'rcnote' => "Nedan visas {{PLURAL:$1|'''1''' ändring|de senaste '''$1''' ändringarna}} från {{PLURAL:$2|det senaste dygnet|de senaste '''$2''' dygnen}}, per $4, kl. $5.", 'rcnotefrom' => "Nedan visas ändringar sedan '''$2''' (upp till '''$1''' visas).", @@ -1601,6 +1616,9 @@ Sidor på [[Special:Watchlist|din bevakningslista]] är markerade med '''fetstil 'upload_directory_missing' => 'Uppladdningskatalogen ($1) saknas och kunde inte skapas av webbservern.', 'upload_directory_read_only' => 'Webbservern kan inte skriva till uppladdningskatalogen ($1).', 'uploaderror' => 'Fel vid uppladdningen', +'upload-recreate-warning' => "'''Varning: En fil med det namnet har tagits bort eller flyttats.''' + +Raderings- och sidflyttningsloggen för denna sida återges här:", 'uploadtext' => "Använd formuläret nedan för att ladda upp filer. För att titta på eller leta efter filer som redan har laddats upp, se [[Special:FileList|listan över uppladdade filer]]. Uppladdningar loggförs även i [[Special:Log/upload|uppladdningsloggen]], och raderingar i [[Special:Log/delete|raderingsloggen]]. @@ -1635,6 +1653,17 @@ Se [[Special:NewFiles|galleriet över nya filer]] för en mer visuell översikt. 'filetype-banned-type' => "'''\".\$1\"''' är inte en tillåten filtyp. {{PLURAL:\$3|Tillåtna filtyper|Tillåten filtyp}} är \$2.", 'filetype-missing' => 'Filnamnet saknar ändelse (t ex ".jpg").', +'empty-file' => 'Filen du skickade var tom.', +'file-too-large' => 'Filen du skickade var för stor.', +'filename-tooshort' => 'Filnamnet är för kort.', +'filetype-banned' => 'Denna typ av fil är förbjuden.', +'verification-error' => 'Denna fil klarade inte verifieringen.', +'hookaborted' => 'Ändringen du försökte göra avbröts av en extension hook.', +'illegal-filename' => 'Filnamnet är inte tillåtet.', +'overwrite' => 'Det är inte tillåtet att skriva över en befintlig fil.', +'unknown-error' => 'Ett okänt fel uppstod.', +'tmp-create-error' => 'Kunde inte skapa temporär fil.', +'tmp-write-error' => 'Fel vid skrivning av temporär fil.', 'large-file' => 'Det rekommenderas att filer inte är större än $1; denna fil är $2.', 'largefileserver' => 'Denna fil är större än vad servern ställts in att tillåta.', @@ -1662,13 +1691,14 @@ Om du fortfarande vill ladda upp din fil, var god gå tillbaka och välj ett nyt Om du ändå vill ladda upp din fil, gå då tillbaka och använd ett annat namn. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Den här filen är en dubblett till följande {{PLURAL:$1|fil|filer}}:', 'file-deleted-duplicate' => 'En identisk fil till den här filen ([[:$1]]) har tidigare raderats. Du bör kontrollera den filens raderingshistorik innan du fortsätter att återuppladda den.', -'successfulupload' => 'Uppladdningen lyckades', 'uploadwarning' => 'Uppladdningsvarning', 'uploadwarning-text' => 'Var god och ändra filbeskrivningen nedanför och försök igen.', 'savefile' => 'Spara fil', 'uploadedimage' => 'laddade upp "[[$1]]"', 'overwroteimage' => 'laddade upp ny version av "[[$1]]"', 'uploaddisabled' => 'Uppladdningsfunktionen är avstängd', +'copyuploaddisabled' => 'Uppladdning med URL avstängt.', +'uploadfromurl-queued' => 'Din uppladdning har lagts i kö.', 'uploaddisabledtext' => 'Uppladdning av filer är avstängd.', 'php-uploaddisabledtext' => 'PHP filuppladdningar är avaktiverade. Kolla inställningarna för file_uploads.', 'uploadscripted' => 'Denna fil innehåller HTML eller script som felaktigt kan komma att tolkas av webbläsare.', @@ -1702,6 +1732,14 @@ JD # Jenoptik MGP # Pentax PICT # allmänt bildprefix # ', +'upload-success-subj' => 'Uppladdningen lyckades', +'upload-success-msg' => 'Din uppladdning från [$2] lyckades. Den finns tillgänglig här: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Uppladdningsproblem', +'upload-failure-msg' => 'Det uppstod ett problem med din uppladdning från [$2]: + +$1', +'upload-warning-subj' => 'Uppladdningsvarning', +'upload-warning-msg' => 'Det uppstod ett problem med din uppladdning från [$2]. Du kan återvända till [[Special:Upload/stash/$1|uppladdningsformuläret]] för att rätta till detta problem.', 'upload-proto-error' => 'Felaktigt protokoll', 'upload-proto-error-text' => 'Fjärruppladdning kräver URL:ar som börjar med http:// eller ftp://.', @@ -1764,6 +1802,7 @@ Genom att klicka på rubrikerna för kolumnerna kan man ändra sorteringsordning 'listfiles_search_for' => 'Sök efter filnamn:', 'imgfile' => 'fil', 'listfiles' => 'Fillista', +'listfiles_thumb' => 'Miniatyrbild', 'listfiles_date' => 'Datum', 'listfiles_name' => 'Namn', 'listfiles_user' => 'Användare', @@ -1877,8 +1916,8 @@ Innan mallarna raderas, kontrollera att det inte finns andra länkar till dem.', 'statistics-edits' => 'Sidredigeringar sedan {{SITENAME}} startades', 'statistics-edits-average' => 'Redigeringar per sida i genomsnitt', 'statistics-views-total' => 'Totalt antal sidvisningar', +'statistics-views-total-desc' => 'Visningar av icke-existerande sidor och specialsidor ingår inte', 'statistics-views-peredit' => 'Antal sidvisningar per redigering', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Jobbköns] längd', 'statistics-users' => 'Registrerade [[Special:ListUsers|användare]]', 'statistics-users-active' => 'Aktiva användare', 'statistics-users-active-desc' => 'Användare som utfört någon åtgärd under {{PLURAL:$1|det senaste dygnet|de senaste $1 dagarna}}', @@ -1892,7 +1931,7 @@ En sida anses vara en förgreningssida om den inkluderar en mall som länkas til 'doubleredirects' => 'Dubbla omdirigeringar', 'doubleredirectstext' => 'Det här är en lista över sidor som dirigerar om till andra omdirigeringssidor. Varje rad innehåller länkar till den första och andra omdirigeringsidan, samt till målet för den andra omdirigeringen. Målet för den andra omdirigeringen är ofta den "riktiga" sidan, som den första omdirigeringen egentligen ska leda till. -Stryk över poster som har åtgärdats.', +Stryk över poster som har åtgärdats.', 'double-redirect-fixed-move' => '[[$1]] har flyttats, och är nu en omdirigering till [[$2]]', 'double-redirect-fixer' => 'Omdirigeringsrättaren', @@ -1915,6 +1954,8 @@ En sida anses vara en förgreningssida om den inkluderar en mall som länkas til 'nmembers' => '$1 {{PLURAL:$1|medlem|medlemmar}}', 'nrevisions' => '$1 {{PLURAL:$1|version|versioner}}', 'nviews' => '$1 {{PLURAL:$1|visning|visningar}}', +'nimagelinks' => 'Använd på $1 {{PLURAL:$1|sida|sidor}}', +'ntransclusions' => 'använd på $1 {{PLURAL:$1|sida|sidor}}', 'specialpage-empty' => 'Den här sidan är tom.', 'lonelypages' => 'Föräldralösa sidor', 'lonelypagestext' => 'Följande sidor länkas inte till från någon annan sida på {{SITENAME}}.', @@ -2071,34 +2112,40 @@ Det kan finnas [[{{MediaWiki:Listgrouprights-helppage}}|ytterligare information] 'listgrouprights-removegroup-self-all' => 'Kan ta bort alla grupperna från sitt eget konto', # E-mail user -'mailnologin' => 'Ingen adress att skicka till', -'mailnologintext' => 'För att kunna skicka e-post till andra användare, måste du vara [[Special:UserLogin|inloggad]] och ha angivit en korrekt e-postadress i dina [[Special:Preferences|användarinställningar]].', -'emailuser' => 'Skicka e-post till den här användaren', -'emailpage' => 'Skicka e-post till användare', -'emailpagetext' => 'Du kan använda det här formuläret för att skicka e-post till den här användaren. +'mailnologin' => 'Ingen adress att skicka till', +'mailnologintext' => 'För att kunna skicka e-post till andra användare, måste du vara [[Special:UserLogin|inloggad]] och ha angivit en korrekt e-postadress i dina [[Special:Preferences|användarinställningar]].', +'emailuser' => 'Skicka e-post till den här användaren', +'emailpage' => 'Skicka e-post till användare', +'emailpagetext' => 'Du kan använda det här formuläret för att skicka e-post till den här användaren. Den e-postadress du har angivit i [[Special:Preferences|dina användarinställningar]] kommer att visas som "Från"-adress i meddelandet, så att mottagaren har möjlighet att svara direkt till dig.', -'usermailererror' => 'Fel i hanteringen av mail:', -'defemailsubject' => '{{SITENAME}} e-post', -'noemailtitle' => 'Ingen e-postadress', -'noemailtext' => 'Den här användaren har inte angivit en giltig e-postadress.', -'nowikiemailtitle' => 'Ingen e-post tillåten', -'nowikiemailtext' => 'Den här användaren har valt att inte motta e-post från andra användare.', -'email-legend' => 'Skicka ett mail till en annan användare på {{SITENAME}}', -'emailfrom' => 'Från:', -'emailto' => 'Till:', -'emailsubject' => 'Ämne:', -'emailmessage' => 'Meddelande:', -'emailsend' => 'Skicka', -'emailccme' => 'Skicka en kopia av meddelandet till mig.', -'emailccsubject' => 'Kopia av ditt meddelande till $1: $2', -'emailsent' => 'E-post har nu skickats', -'emailsenttext' => 'Din e-post har skickats.', -'emailuserfooter' => 'Detta e-brev skickades av $1 till $2 genom "Skicka e-post"-funktionen på {{SITENAME}}.', +'usermailererror' => 'Fel i hanteringen av mail:', +'defemailsubject' => '{{SITENAME}} e-post', +'usermaildisabled' => 'Användar-epost avaktiverat', +'usermaildisabledtext' => 'Du kan inte skicka e-post till andra användare på den här wikin', +'noemailtitle' => 'Ingen e-postadress', +'noemailtext' => 'Den här användaren har inte angivit en giltig e-postadress.', +'nowikiemailtitle' => 'Ingen e-post tillåten', +'nowikiemailtext' => 'Den här användaren har valt att inte motta e-post från andra användare.', +'email-legend' => 'Skicka ett mail till en annan användare på {{SITENAME}}', +'emailfrom' => 'Från:', +'emailto' => 'Till:', +'emailsubject' => 'Ämne:', +'emailmessage' => 'Meddelande:', +'emailsend' => 'Skicka', +'emailccme' => 'Skicka en kopia av meddelandet till mig.', +'emailccsubject' => 'Kopia av ditt meddelande till $1: $2', +'emailsent' => 'E-post har nu skickats', +'emailsenttext' => 'Din e-post har skickats.', +'emailuserfooter' => 'Detta e-brev skickades av $1 till $2 genom "Skicka e-post"-funktionen på {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Lämnar systemmeddelande.', +'usermessage-editor' => 'Systemmeddelare', # Watchlist 'watchlist' => 'Bevakningslista', 'mywatchlist' => 'Min bevakningslista', -'watchlistfor' => "(för '''$1''')", +'watchlistfor2' => 'För $1 $2', 'nowatchlist' => 'Du har inga sidor i din bevakningslista.', 'watchlistanontext' => 'Du måste $1 för att se eller redigera din bevakningslista.', 'watchnologin' => 'Inte inloggad', @@ -2158,6 +2205,9 @@ Du kan också ta bort flaggan för meddelanden om ändringar på alla sidor i di Hälsningar från {{SITENAME}}s meddelandesystem -- +För att ändra inställningarna för dina uppdateringar via e-post, besök +{{fullurl:{{#special:Preferences}}}} + För att ändra inställningarna i din bevakningslista, besök {{fullurl:{{#special:Watchlist}}/edit}} @@ -2214,7 +2264,10 @@ Sidan ändrades senast av [[User:$3|$3]] ([[User talk:$3|diskussion]]{{int:pipe- 'revertpage-nouser' => 'Återställda redigeringar av (användarnamn borttaget) till senaste version av [[User:$1|$1]]', 'rollback-success' => 'Återställde ändringar av $1; ändrade tillbaka till senaste version av $2.', -'sessionfailure' => 'Något med din session som inloggad är på tok. Din begärda åtgärd har avbrutits, för att förhindra att någon kapar din session. Klicka på "Tillbaka" i din webbläsare och ladda om den sida du kom ifrån. Försök sedan igen.', + +# Edit tokens +'sessionfailure-title' => 'Sessionsfel', +'sessionfailure' => 'Något med din session som inloggad är på tok. Din begärda åtgärd har avbrutits, för att förhindra att någon kapar din session. Klicka på "Tillbaka" i din webbläsare och ladda om den sida du kom ifrån. Försök sedan igen.', # Protect 'protectlogpage' => 'Skrivskyddslogg', @@ -2343,19 +2396,23 @@ $1', 'month' => 'Från månad (och tidigare):', 'year' => 'Från år (och tidigare):', -'sp-contributions-newbies' => 'Visa endast bidrag från nya konton', -'sp-contributions-newbies-sub' => 'Från nya konton', -'sp-contributions-newbies-title' => 'Bidrag från nya konton', -'sp-contributions-blocklog' => 'blockeringslogg', -'sp-contributions-deleted' => 'raderade användarbidrag', -'sp-contributions-logs' => 'loggar', -'sp-contributions-talk' => 'diskussion', -'sp-contributions-userrights' => 'hantering av användarrättigheter', -'sp-contributions-blocked-notice' => 'Användaren är blockerad. +'sp-contributions-newbies' => 'Visa endast bidrag från nya konton', +'sp-contributions-newbies-sub' => 'Från nya konton', +'sp-contributions-newbies-title' => 'Bidrag från nya konton', +'sp-contributions-blocklog' => 'blockeringslogg', +'sp-contributions-deleted' => 'raderade användarbidrag', +'sp-contributions-uploads' => 'uppladdningar', +'sp-contributions-logs' => 'loggar', +'sp-contributions-talk' => 'diskussion', +'sp-contributions-userrights' => 'hantering av användarrättigheter', +'sp-contributions-blocked-notice' => 'Användaren är blockerad. Orsaken till senaste blockeringen kan ses nedan:', -'sp-contributions-search' => 'Sök efter användarbidrag', -'sp-contributions-username' => 'IP-adress eller användarnamn:', -'sp-contributions-submit' => 'Sök', +'sp-contributions-blocked-notice-anon' => 'Denna IP-adress är för närvarande blockerad. +Den senaste posten i blockeringsloggen visas nedan som referens:', +'sp-contributions-search' => 'Sök efter användarbidrag', +'sp-contributions-username' => 'IP-adress eller användarnamn:', +'sp-contributions-toponly' => 'Visa endast aktuella sidversioner', +'sp-contributions-submit' => 'Sök', # What links here 'whatlinkshere' => 'Vad som länkar hit', @@ -2416,7 +2473,6 @@ Ange orsak nedan (exempelvis genom att nämna sidor som blivit vandaliserade).', 'ipb-edit-dropdown' => 'Redigera blockeringsanledningar', 'ipb-unblock-addr' => 'Ta bort blockering av $1', 'ipb-unblock' => 'Ta bort blockering av en användare eller IP-adress', -'ipb-blocklist-addr' => 'Gällande blockeringar av $1', 'ipb-blocklist' => 'Visa gällande blockeringar', 'ipb-blocklist-contribs' => 'Bidrag från $1', 'unblockip' => 'Ta bort blockering av användare/IP-adress', @@ -2434,8 +2490,8 @@ Ange orsak nedan (exempelvis genom att nämna sidor som blivit vandaliserade).', 'ipblocklist-localblock' => 'Lokalblockering', 'ipblocklist-otherblocks' => 'Övriga {{PLURAL:$1|blockering|blockeringar}}', 'blocklistline' => '$1, $2 blockerade $3 ($4)', -'infiniteblock' => 'för evigt', -'expiringblock' => 'utgår den $1 kl $2', +'infiniteblock' => 'på obestämd tid', +'expiringblock' => 'upphör den $1 kl $2', 'anononlyblock' => 'endast oinloggade', 'noautoblockblock' => 'utan automatisk blockering', 'createaccountblock' => 'kontoregistrering blockerad', @@ -2489,6 +2545,8 @@ $1 är redan blockerad. Vill du ändra inställningarna?', Du får inte skapa ett användarkonto', 'cant-block-while-blocked' => 'Du kan inte blockera andra användare medan du är blockerad.', 'cant-see-hidden-user' => 'Användaren du försöker blockera är redan blockerad och gömd. Eftersom du inte har hideuser-rättigheter, kan du inte se eller redigera användarens blockering.', +'ipbblocked' => 'Du kan inte blockera eller avblockera andra användare, eftersom du själv är blockerad', +'ipbnounblockself' => 'Du har inte tillåtelse att avblockera dig själv', # Developer tools 'lockdb' => 'Lås databas', @@ -2524,6 +2582,17 @@ Det innebär att du kan flytta tillbaks en sida om du råkar göra fel, och att '''VARNING!''' Att flytta en populär sida kan vara en drastisk och oväntad ändring; därför bör du vara säker på att du förstår konsekvenserna innan du fortsätter med flytten.", +'movepagetext-noredirectfixer' => "Formuläret nedan kommer att byta namn på en sida, och flytta hela sin historik till det nya namnet. +Den gamla titeln kommer att bli en omdirigeringssida till den nya titeln. +Glöm inte att kontrollera [[Special:DoubleRedirects|dubbla]] eller [[Special:BrokenRedirects|brutna omdirigeringar]]. +Du är ansvarig för att se till att länkar fortsätter att peka där de förväntas gå. + +Observera att sidan '''inte''' kommer att flyttas om det finns redan en sida på den nya titeln, förutom om den är tom eller en omdirigering och saknar tidigare redigeringshistorik. +Detta innebär att du kan byta tillbaka namnet på en sida om du av misstag bytt namn på den, och du kan inte skriva över en befintlig sida. + +'''Varning!''' +Detta kan vara en drastisk och oväntad förändring för en populär sida; +se till att du förstår konsekvenserna av detta innan du fortsätter.", 'movepagetalktext' => "Diskussionssidan kommer att även den automatiskt flyttas '''om inte''': *Det redan finns en diskussionssida som inte är tom med det nya namnet, eller *Du avmarkerar rutan nedan. @@ -2579,6 +2648,7 @@ Den titel du vill flytta sidan till, "[[:$1]]", finns redan. Vill du radera den 'immobile-source-page' => 'Denna sida är inte flyttbar.', 'immobile-target-page' => 'Kan inte flytta till det målnamnet.', 'imagenocrossnamespace' => 'Kan inte flytta filer till andra namnrymder än filnamnrymden', +'nonfile-cannot-move-to-file' => 'Kan inte flytta icke-fil till filnamnrymden', 'imagetypemismatch' => 'Den nya filändelsen motsvarar inte filtypen', 'imageinvalidfilename' => 'Önskat filnamn är ogiltigt', 'fix-double-redirects' => 'Uppdatera omdirigeringar som leder till den gamla titeln', @@ -2660,6 +2730,7 @@ Spara den på din dator och ladda upp den här.', 'importstart' => 'Importerar sidor....', 'import-revision-count' => '$1 {{PLURAL:$1|version|versioner}}', 'importnopages' => 'Det finns inga sidor att importera.', +'imported-log-entries' => 'Importerade $1 {{PLURAL: $1 |loggpost|loggposter}}.', 'importfailed' => 'Importen misslyckades: $1', 'importunknownsource' => 'Okänd typ av importkälla', 'importcantopen' => 'Misslyckades med att öppna importfilen.', @@ -2754,6 +2825,8 @@ Vänligen använd förhandsgranskningsknappen innan du sparar.', 'tooltip-rollback' => '"Tillbakarullning" tar med en knapptryckning bort ändringar som gjorts av den som senast redigerade sidan', 'tooltip-undo' => '"Gör ogjord" återställer denna redigering och öppnar redigeringsrutan med förhandsgranskning. Ger möjlighet att skriva en motivering i redigeringssammanfattningen', +'tooltip-preferences-save' => 'Spara inställningar', +'tooltip-summary' => 'Skriv en kort sammanfattning', # Stylesheets 'common.css' => '/* CSS som skrivs här påverkar alla skal */', @@ -2884,14 +2957,17 @@ Om du kör den kan din dator skadas.", 'imagemaxsize' => "Begränsa bilders storlek:
    ''(för filbeskrivningssidor)''", 'thumbsize' => 'Storlek på minibild:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|sida|sidor}}', -'file-info' => '(filstorlek: $1, MIME-typ: $2)', -'file-info-size' => '($1 × $2 pixel, filstorlek: $3, MIME-typ: $4)', +'file-info' => 'filstorlek: $1, MIME-typ: $2', +'file-info-size' => '$1 × $2 pixel, filstorlek: $3, MIME-typ: $4', 'file-nohires' => 'Det finns ingen version med högre upplösning.', -'svg-long-desc' => '(SVG-fil, grundstorlek: $1 × $2 pixel, filstorlek: $3)', +'svg-long-desc' => 'SVG-fil, grundstorlek: $1 × $2 pixel, filstorlek: $3', 'show-big-image' => 'Högupplöst version', 'show-big-image-thumb' => 'Storlek på förhandsvisningen: $1 × $2 pixel', 'file-info-gif-looped' => 'upprepad', 'file-info-gif-frames' => '$1 {{PLURAL:$1|ram|ramar}}', +'file-info-png-looped' => 'loopad', +'file-info-png-repeat' => 'spelad $1 {{PLURAL:$1|gång|gånger}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|bild|bilder}}', # Special:NewFiles 'newimages' => 'Galleri över nya filer', @@ -3049,6 +3125,7 @@ Den första länken på en rad måste vara en länk till en otillåten fil. 'exif-gpsareainformation' => 'GPS-områdets namn', 'exif-gpsdatestamp' => 'GPS-datum', 'exif-gpsdifferential' => 'Differentiell GPS-korrektion', +'exif-objectname' => 'Kort titel', # EXIF attributes 'exif-compression-1' => 'Inte komprimerad', @@ -3208,25 +3285,25 @@ Den första länken på en rad måste vara en länk till en otillåten fil. 'limitall' => 'alla', # E-mail address confirmation -'confirmemail' => 'Bekräfta e-postadress', -'confirmemail_noemail' => 'Du har inte angivit någon giltig e-postadress i dina [[Special:Preferences|inställningar]].', -'confirmemail_text' => 'Innan du kan använda {{SITENAME}}s funktioner för e-post måste du bekräfta din e-postadress. Aktivera knappen nedan för att skicka en bekräftelsekod till din e-postadress. Mailet kommer att innehålla en länk, som innehåller en kod. Genom att klicka på den länken eller kopiera den till din webbläsares fönster för webbadresser, bekräftar du att din e-postadress fungerar.', -'confirmemail_pending' => 'En bekräftelsekod har redan skickats till din epostadress. Om du skapade ditt konto nyligen, så kanske du vill vänta några minuter innan du begär en ny kod.', -'confirmemail_send' => 'Skicka bekräftelsekod', -'confirmemail_sent' => 'E-post med bekräftelse skickat.', -'confirmemail_oncreate' => 'En bekräftelsekod skickades till din epostadress. Koden behövs inte för att logga in, men du behöver koden för att få tillgång till de epostbaserade funktionerna på wikin.', -'confirmemail_sendfailed' => '{{SITENAME}} kunde inte skicka din e-postbekräftelse. +'confirmemail' => 'Bekräfta e-postadress', +'confirmemail_noemail' => 'Du har inte angivit någon giltig e-postadress i dina [[Special:Preferences|inställningar]].', +'confirmemail_text' => 'Innan du kan använda {{SITENAME}}s funktioner för e-post måste du bekräfta din e-postadress. Aktivera knappen nedan för att skicka en bekräftelsekod till din e-postadress. Mailet kommer att innehålla en länk, som innehåller en kod. Genom att klicka på den länken eller kopiera den till din webbläsares fönster för webbadresser, bekräftar du att din e-postadress fungerar.', +'confirmemail_pending' => 'En bekräftelsekod har redan skickats till din epostadress. Om du skapade ditt konto nyligen, så kanske du vill vänta några minuter innan du begär en ny kod.', +'confirmemail_send' => 'Skicka bekräftelsekod', +'confirmemail_sent' => 'E-post med bekräftelse skickat.', +'confirmemail_oncreate' => 'En bekräftelsekod skickades till din epostadress. Koden behövs inte för att logga in, men du behöver koden för att få tillgång till de epostbaserade funktionerna på wikin.', +'confirmemail_sendfailed' => '{{SITENAME}} kunde inte skicka din e-postbekräftelse. Kontrollera om e-postadressen innehåller ogiltiga tecken. Mailservern svarade: $1', -'confirmemail_invalid' => 'Ogiltig bekräftelsekod. Dess giltighetstid kan ha löpt ut.', -'confirmemail_needlogin' => 'Du behöver $1 för att bekräfta din e-postadress', -'confirmemail_success' => 'Din e-postadress har bekräftats. +'confirmemail_invalid' => 'Ogiltig bekräftelsekod. Dess giltighetstid kan ha löpt ut.', +'confirmemail_needlogin' => 'Du behöver $1 för att bekräfta din e-postadress', +'confirmemail_success' => 'Din e-postadress har bekräftats. Du kan nu [[Special:UserLogin|logga in]] och använda wikin.', -'confirmemail_loggedin' => 'Din e-postadress är nu bekräftad.', -'confirmemail_error' => 'Någonting gick fel när din bekräftelse skulle sparas.', -'confirmemail_subject' => 'Bekräftelse av e-postadress på {{SITENAME}}', -'confirmemail_body' => 'Någon, troligen du, har från IP-adressen $1 registrerat användarkontot "$2" med denna e-postadress på {{SITENAME}}. +'confirmemail_loggedin' => 'Din e-postadress är nu bekräftad.', +'confirmemail_error' => 'Någonting gick fel när din bekräftelse skulle sparas.', +'confirmemail_subject' => 'Bekräftelse av e-postadress på {{SITENAME}}', +'confirmemail_body' => 'Någon, troligen du, har från IP-adressen $1 registrerat användarkontot "$2" med denna e-postadress på {{SITENAME}}. För att bekräfta att detta konto verkligen är ditt, och för att aktivera funktionerna för e-post på {{SITENAME}}, öppna denna länk i din webbläsare: @@ -3237,8 +3314,36 @@ Om det *inte* är du som registrerat kontot, följ denna länk för att avbryta $5 Denna bekräftelsekod kommer inte att fungera efter $4.', -'confirmemail_invalidated' => 'Bekräftelsen av e-postadressen har ogiltigförklarats', -'invalidateemail' => 'Avbryt bekräftelse av e-postadress', +'confirmemail_body_changed' => 'Någon, troligen du, har från IP-adressen $1 +registrerat användarkontot "$2" med denna e-postadress på {{SITENAME}}. + +För att bekräfta att detta konto verkligen är ditt, och för att aktivera +funktionerna för e-post på {{SITENAME}}, öppna denna länk i din webbläsare: + +$3 + +Om det *inte* är du som registrerat kontot, följ denna länk +för att avbryta bekräftelsen av e-postadressen: + +$5 + +Denna bekräftelsekod kommer inte att fungera efter $4.', +'confirmemail_body_set' => 'Någon, förmodligen du, från IP-adressen $1, +har satt e-postadressen till kontot "$2" till den här adressen {{SITENAME}}. + +För att bekräfta att kontot verkligen tillhör dig, bör du återaktivera +e-post funktionerna på {{SITENAME}}, öppna denna länk i din webbläsare: + +$3 + +Om kontot *inte* tillhör dig, följ den här länken +för att avbryta bekräftelsen av e-postadressen: + +$5 + +Denna bekräftelsekod kommer att sluta fungera efter $4.', +'confirmemail_invalidated' => 'Bekräftelsen av e-postadressen har ogiltigförklarats', +'invalidateemail' => 'Avbryt bekräftelse av e-postadress', # Scary transclusion 'scarytranscludedisabled' => '[Interwiki-inklusion är inte aktiverad]', @@ -3278,6 +3383,7 @@ Bekräfta att du verkligen vill återskapa sidan.", 'table_pager_first' => 'Första sidan', 'table_pager_last' => 'Sista sidan', 'table_pager_limit' => 'Visa $1 poster per sida', +'table_pager_limit_label' => 'Objekt per sida:', 'table_pager_limit_submit' => 'Utför', 'table_pager_empty' => 'Inga resultat', @@ -3342,6 +3448,7 @@ Du kan också [[Special:Watchlist/edit|använda standardeditorn]].', 'version-specialpages' => 'Specialsidor', 'version-parserhooks' => 'Parsertillägg', 'version-variables' => 'Variabler', +'version-skins' => 'Utseenden', 'version-other' => 'Annat', 'version-mediahandlers' => 'Mediahanterare', 'version-hooks' => 'Hakar', @@ -3353,6 +3460,13 @@ Du kan också [[Special:Watchlist/edit|använda standardeditorn]].', 'version-hook-subscribedby' => 'Används av', 'version-version' => '(Version $1)', 'version-license' => 'Licens', +'version-poweredby-credits' => "Den här wikin drivs av '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'andra', +'version-license-info' => 'MediaWiki är fri programvara; du kan distribuera det och/eller modifiera det under villkoren i GNU General Public License, publicerad av Free Software Foundation; antingen version 2 av licensen, eller (om du önskar) någon senare version. + +MediaWiki distribueras i hopp om att det ska vara användbart, men UTAN NÅGON GARANTI, även utan underförstådd garanti om SÄLJBARHET eller LÄMPLIGHET FÖR ETT VISST SYFTE. Se GNU General Public License för fler detaljer. + +Du bör ha fått [{{SERVER}}{{SCRIPTPATH}}/COPYING en kopia av GNU General Public License] tillsammans med detta program; om inte, skriv till Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA eller [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html läs den online].', 'version-software' => 'Installerad programvara', 'version-software-product' => 'Produkt', 'version-software-version' => 'Version', @@ -3422,6 +3536,15 @@ Skriv filnamnet utan prefixet "{{ns:file}}:" .', 'tags-edit' => 'redigera', 'tags-hitcount' => '$1 {{PLURAL:$1|ändring|ändringar}}', +# Special:ComparePages +'comparepages' => 'Jämför sidor', +'compare-selector' => 'Jämför sidversioner', +'compare-page1' => 'Sida 1', +'compare-page2' => 'Sida 2', +'compare-rev1' => 'Version 1', +'compare-rev2' => 'Version 2', +'compare-submit' => 'Jämför', + # Database error messages 'dberr-header' => 'Den här wikin har ett problem', 'dberr-problems' => 'Ursäkta! Denna sajt har just nu tekniska problem.', @@ -3438,8 +3561,13 @@ Skriv filnamnet utan prefixet "{{ns:file}}:" .', 'htmlform-float-invalid' => 'Värdet du valde är inte en siffra.', 'htmlform-int-toolow' => 'Värdet du valde är under minimumet på $1', 'htmlform-int-toohigh' => 'Värdet du valde är över maximumet på $1', +'htmlform-required' => 'Det här värdet krävs', 'htmlform-submit' => 'Spara', 'htmlform-reset' => 'Ogör ändringar', 'htmlform-selectorother-other' => 'Andra', +# SQLite database support +'sqlite-has-fts' => '$1 med stöd för fulltextsökning', +'sqlite-no-fts' => '$1 utan stöd för fulltextsökning', + ); diff --git a/languages/messages/MessagesSw.php b/languages/messages/MessagesSw.php index 46f4d642..bfd543d0 100644 --- a/languages/messages/MessagesSw.php +++ b/languages/messages/MessagesSw.php @@ -8,6 +8,7 @@ * @file * * @author Ikiwaner + * @author Jagwar * @author Lloffiwr * @author Malangali * @author Marcos @@ -136,8 +137,7 @@ $messages = array( 'tog-editsection' => 'Wezesha sehemu ya kuandikia kwa kutumia viungo vya [hariri]', 'tog-editsectiononrightclick' => 'Wezesha sehemu ya kuandikia kwa kubonyeza kitufe cha kulia cha puku yako juu ya sehemu ya majina husika (JavaScript)', 'tog-showtoc' => 'Onyesha mistari ya yaliyomo (kwa kila kurasa iliyo na zaidi ya vichwa vya habari 3)', -'tog-rememberpassword' => 'Kumbuka kuingia kwangu katika kompyuta hii', -'tog-editwidth' => 'Sanduku la kuhariri liwe na upana wa kujaza skrini nzima', +'tog-rememberpassword' => 'Kumbuka kuingia kwangu pamoja na neno la siri katika kivinjari hiki (kwa muda usiozidi {{PLURAL:$1|siku}} $1)', 'tog-watchcreations' => 'Weka kurasa nilizoumba katika maangalizi yangu', 'tog-watchdefault' => 'Weka kurasa zote nilizohariri katika maangalizi yangu', 'tog-watchmoves' => 'Weka kurasa zote nilizohamisha katika maangalizi yangu', @@ -283,31 +283,21 @@ $messages = array( 'faqpage' => 'Project:Maswali Yaulizwayo Marakwamara', # Vector skin -'vector-action-addsection' => 'Weka mada', -'vector-action-delete' => 'Futa', -'vector-action-move' => 'Hamisha', -'vector-action-protect' => 'Linda', -'vector-action-undelete' => 'Rudisha', -'vector-action-unprotect' => 'Ondoa tunzo', -'vector-namespace-category' => 'Jamii', -'vector-namespace-help' => 'Ukurasa wa msaada', -'vector-namespace-image' => 'Faili', -'vector-namespace-main' => 'Ukurasa', -'vector-namespace-media' => 'Ukurasa wa faili', -'vector-namespace-mediawiki' => 'Ujumbe', -'vector-namespace-project' => 'Ukurasa wa mradi', -'vector-namespace-special' => 'Ukurasa maalum', -'vector-namespace-talk' => 'Majadiliano', -'vector-namespace-template' => 'Kigezo', -'vector-namespace-user' => 'Ukurasa wa mtumiaji', -'vector-view-create' => 'Anzisha', -'vector-view-edit' => 'Hariri', -'vector-view-history' => 'Fungua historia', -'vector-view-view' => 'Soma', -'vector-view-viewsource' => 'Kuonyesha kodi', -'actions' => 'Vitendo', -'namespaces' => 'Maeneo ya wiki', -'variants' => 'Vibadala', +'vector-action-addsection' => 'Weka mada', +'vector-action-delete' => 'Futa', +'vector-action-move' => 'Hamisha', +'vector-action-protect' => 'Linda', +'vector-action-undelete' => 'Rudisha', +'vector-action-unprotect' => 'Ondoa tunzo', +'vector-simplesearch-preference' => 'Kuwezesha madokezo imara ya tafutaji (umbo la Vector tu)', +'vector-view-create' => 'Anzisha', +'vector-view-edit' => 'Hariri', +'vector-view-history' => 'Fungua historia', +'vector-view-view' => 'Soma', +'vector-view-viewsource' => 'Kuonyesha kodi', +'actions' => 'Vitendo', +'namespaces' => 'Maeneo ya wiki', +'variants' => 'Vibadala', 'errorpagetitle' => 'Hitilafu', 'returnto' => 'Rudia $1.', @@ -368,6 +358,8 @@ Watumiaji wengi mno wanajaribu kutazama ukurasa huu. Tafadhali subiri kwa muda kadhaa kabla ya kujaribu kufungua tena. $1', +'pool-queuefull' => 'Foleni ya michakato imejaa', +'pool-errorunknown' => 'Hitilafu isiyojulikana', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Kuhusu {{SITENAME}}', @@ -491,7 +483,7 @@ Tafadhali ripoti hili kwa [[Special:ListUsers/sysop|mkabidhi]], na uache jina la 'cannotdelete' => 'Haikuweza kufuta kurasa au faili linaloitwa "$1". Huenda likawa tayari lishafutwa na mtu mwingine.', 'badtitle' => 'Jina halifai', -'badtitletext' => 'Jina la ukurasa ulilotaka ni batilifu, tupu, au limeungwa vibaya na jina la lugha nyingine au Wiki nyingine. Labda linazo herufi moja a zaidi ambazo hazitumiki katika majina.', +'badtitletext' => 'Jina la ukurasa ulilotaka ni batilifu, tupu, au limeungwa vibaya na jina la lugha nyingine au Wiki nyingine. Labda linazo herufi moja au zaidi ambazo hazitumiki katika majina.', 'perfcached' => 'Data zifuatazo zinatoka kwenye kache na huenda si ya kisasa.', 'perfcachedts' => 'Data zifuatazo zimetoka kwenye kache iliobadilishwa mara ya mwisho saa $3, tarehe $2.', 'querypage-no-updates' => 'Mabadiliko kwa ajili ya ukurasa huu yamesimamishwa. @@ -534,7 +526,8 @@ Usisahau kubadilisha mapendekezo yako ya [[Special:Preferences|{{SITENAME}}]].', 'yourname' => 'Jina la mtumiaji:', 'yourpassword' => 'Neno la siri:', 'yourpasswordagain' => 'Andika tena neno la siri', -'remembermypassword' => 'Nikumbuke katika tarakilishi hii', +'remembermypassword' => 'Kumbuka kuingia kwangu katika kivinjari hiki (kwa muda usiozidi {{PLURAL:$1|siku}} $1)', +'securelogin-stick-https' => 'Endelea kushikamana na HTTPS baada ya kuingia', 'yourdomainname' => 'Tovuti yako:', 'externaldberror' => 'Huenda kulikuwa na hitilafu ya database au labda hauruhusiwi kubadilisha akaunti yako ya nje.', 'login' => 'Ingia', @@ -551,6 +544,7 @@ Usisahau kubadilisha mapendekezo yako ya [[Special:Preferences|{{SITENAME}}]].', 'gotaccount' => "Unayo akaunti tayari? '''$1'''", 'gotaccountlink' => 'Ingia', 'createaccountmail' => 'Kwa barua pepe', +'createaccountreason' => 'Sababu:', 'badretype' => 'Maneno uliyoyaandika ni tofauti.', 'userexists' => 'Jina la mtumiaji uliloingiza tayari linatumika. Tafadhali chagua jina lingine.', @@ -574,6 +568,7 @@ Jaribu tena.', 'wrongpasswordempty' => 'Neno la siri lilikuwa tupu. Jaribu tena.', 'passwordtooshort' => 'Ni lazima neno la siri liwe na {{PLURAL:$1|herufi}} $1 au zaidi.', 'password-name-match' => 'Neno lako la siri lazima liwe tofauti na jina lako la mtumiaji.', +'password-login-forbidden' => 'Imekatzwa kutumia jina hili la mtumiaji pamoja na neno hili la siri.', 'mailmypassword' => 'Nitume neno la siri jipya kwa barua-pepe', 'passwordremindertitle' => 'Neno la siri jipya la muda kwa ajili ya {{SITENAME}}', 'passwordremindertext' => 'Mtu mmoja (yamkini wewe, kutoka anwani ya IP $1) @@ -666,6 +661,7 @@ Inawezekana ikawa tayari umefaulu kubadilisha neno lako la siri au neno la siri 'showlivepreview' => 'Tazama moja kwa moja', 'showdiff' => 'Onyesha mabadiliko', 'anoneditwarning' => "'''Ilani:''' Wewe hujaingia rasmi kwenye tovuti. Anwani ya IP ya tarakilishi yako itahifadhiwa katika historia ya uhariri wa ukurasa huu.", +'anonpreviewwarning' => "''Hujaingia rasmi kwenye tovuti. Ukihifadhi ukurasa anwani ya IP ya tarakilishi yako itahifadhiwa katika historia ya uhariri wa ukurasa huu.''", 'missingsummary' => "'''Taarifa:''' Hujaandika muhtasari ya kuhariri. Ukibonyeza 'Hifadhi ukurasa' tena, badilisho lako litahifadhiwa bila muhtasari.", 'missingcommenttext' => 'Tafadhali andika muhtasari chini.', @@ -745,8 +741,12 @@ Rejea kumbukumbu ya uzuio ya mwisho inayoandikwa chini:', '''Haijahifadhiwa bado!'''", 'userjspreview' => "'''Kumbuka kwamba unajaribu/kuhakiki mandhari ya ukurasa wako wa JavaScript tu.''' '''Haijahifadhiwa bado!'''", +'sitecsspreview' => "'''Kumbuka kwamba unahakiki tu mandhari ya CSS hii.''' +'''Haijahifadhiwa bado!'''", +'sitejspreview' => "'''Kumbuka kwamba unahakiki tu mandhari ya JavaScript hii.''' +'''Haijahifadhiwa bado!'''", 'userinvalidcssjstitle' => "'''Onyo:''' Hakuna umbo \"\$1\". -Kumbuka kwamba desturi ya kurasa za .css na .js hutumia herufi ndogo, yaani, {{ns:user}}:Foo/monobook.css na si {{ns:user}}:Foo/Monobook.css.", +Kumbuka kwamba desturi ya kurasa za .css na .js hutumia herufi ndogo, yaani, {{ns:user}}:Foo/vector.css na si {{ns:user}}:Foo/Vector.css.", 'updated' => '(Imesasishwa)', 'note' => "'''Taarifa:'''", 'previewnote' => "'''Hii ni hakikisho tu; mabadiliko hayajahifadhiwa bado!'''", @@ -786,8 +786,6 @@ Unakuwa unaahidi kwamba maandishi unayoyaingia ni yako tu, au uliyapata kutoka b Ikiwa hutaki maandishi yako yasihaririwe na yeyote, basi usiyaweke hapa.
    Pia una tuahidi kwamba umeandika haya wewe mwenyewe, au umenakili kutoka katika tovuti ya umma au chanzo cha wazi sawa na hiki (tazama $1 kwa maelezo). '''Usiandike makala yenye hakimiliki bila ya ruhusa halali!'''", -'longpagewarning' => "'''ILANI: Urefu wa ukurasa huu ni kilobaiti $1; vivinjari kadhaa vinaweza kuwa na matatizo ukihariri ukurasa wenye urefu zaidi ya kb 32 hivi. -Tafadhali fikiria kuhusu kuvunja ukurasa kwa vipande vifupi.'''", 'longpageerror' => "'''Hitilafu: Maandishi uliyoyaweka yana urefu wa kilobati $1, ambayo ni marefu kuliko kiwango cha kawaida cha kilobaiti $2.''' Hayawezi kuhifadhiwa.", 'readonlywarning' => "'''Onyo: Hifadhidata imefungwa kwa ajili ya matengenezo, kwa hiyo hautakuwa na uwezo wa kuhifadhi maharirio yako kwa sasa.''' @@ -829,6 +827,13 @@ Inaonekana kwamba ukurasa umefutwa.', 'edit-already-exists' => 'Haikufanikiwa kuanzisha ukurasa mpya. Ukurasa wa jina hilo unapatikana tayari.', +# Parser/template warnings +'post-expand-template-inclusion-warning' => "'''Ilani:''' Kigezo kinajumlisha ukubwa uliozidi mno. +Baadhi ya vigezo havitaweza kuingizwa.", +'post-expand-template-inclusion-category' => 'Kurasa ambapo vigezo vinajumlisha ukubwa uliozidi', +'post-expand-template-argument-warning' => "'''Ilani:'''Ukurasa huu una agumeni ya kigezo moja au zaidi, ambayo ukubwa wake wa kupanuliwa unazidi mpaka. Agumeni hizi hazikutumika.", +'post-expand-template-argument-category' => 'Kurasa zenye vigezo vilivyoruka agumeni', + # "Undo" feature 'undo-success' => 'Sahihisho linaweza kutenguliwa. Tafadhali tazama linganisho lililopo chini ili kuthibitisha kwamba kutengua ndiyo inayotakiwa, na kisha uhifadhi mabadiliko ili kukamilisha kutengua sahihisho.', @@ -931,6 +936,8 @@ $1", 'logdelete-failure' => "'''Kubadilisha uwezo wa kuona kumbukumbu ulifaulu:''' $1", 'revdel-restore' => 'badilisha mwonekano', +'revdel-restore-deleted' => 'mapitio yaliyofutwa', +'revdel-restore-visible' => 'mapitio yanayoonekana', 'pagehist' => 'Historia ya ukurasa', 'deletedhist' => 'Historia iliyofutwa', 'revdelete-content' => 'maandiko', @@ -984,11 +991,12 @@ Tazama [[Special:IPBlockList|orodha ya uzuio wa IP]] kuona orodha ya zuio zilizo # Diffs 'history-title' => 'Historia ya mapitio ya "$1"', 'difference' => '(Tofauti baina ya mapitio)', +'difference-multipage' => '(Tofauti kati ya kurasa)', 'lineno' => 'Mstari $1:', 'compareselectedversions' => 'Linganisha mapitio mawili uliyochagua', 'showhideselectedversions' => 'Onyesha/ficha mapitio yaliyoteuliwa', 'editundo' => 'tengua', -'diff-multi' => '(Hatuonyeshi {{PLURAL:$1|pitio moja la katikati|mapitio $1 ya katikati}}.)', +'diff-multi' => '(Haionyeshwi {{PLURAL:$1|pitio moja la katikati lililoandikwa|mapitio $1 ya katikati yaliyoandikwa}} na {{PLURAL:$2|mtumiaji moja|watumiaji $2}})', # Search results 'searchresults' => 'Matokeo ya utafutaji', @@ -1023,6 +1031,7 @@ Tazama [[Special:IPBlockList|orodha ya uzuio wa IP]] kuona orodha ya zuio zilizo 'searchprofile-everything-tooltip' => 'Tafuta wiki nzima (pamoja na kurasa za majadiliano)', 'searchprofile-advanced-tooltip' => 'Tafuta katika maeneo ya wiki utakayoyachagua', 'search-result-size' => '$1 ({{PLURAL:$2|neno 1|maneno $2}})', +'search-result-category-size' => '{{PLURAL:$1|ukurasa 1|kurasa $1}} ({{PLURAL:$2|kijamii 1|vijamii $2}}, {{PLURAL:$3|faili 1|mafaili $3}})', 'search-result-score' => 'Kiwango cha ulinganisho na ulizo: $1%', 'search-redirect' => '(elekezo toka kwa $1)', 'search-section' => '(fungu $1)', @@ -1100,6 +1109,7 @@ Ujue lakini kwamba kumbukumbu za {{SITENAME}} kule Google labda zilipitwa na wak 'contextlines' => 'Mistari kwa kila tokeo:', 'contextchars' => 'Herufi za muktadha kwa kila mstari:', 'stub-threshold' => 'Kiwango cha juu cha kuonyesha kiungo kama kiungo kinachoelekea mbegu (baiti):', +'stub-threshold-disabled' => 'Imelemazwa', 'recentchangesdays' => 'Ionyeshwe siku ngapi kwenye orodha ya mabadiliko ya karibuni?', 'recentchangesdays-max' => 'Isizidi {{PLURAL:$1|siku}} $1', 'recentchangescount' => 'Idadi ya masahihisho yatakayoonyeshwa kwa kawaida:', @@ -1133,6 +1143,7 @@ Hapo kuna ufunguo uliotolewa na programu kwa kubahatisha, ambao unaweza kuutumia 'prefs-files' => 'Mafaili', 'prefs-custom-css' => 'CSS niliyotunga mwenyewe', 'prefs-custom-js' => 'JS niliyotunga mwenyewe', +'prefs-common-css-js' => 'CSS/JS inayoshirikishwa na maumbo yote:', 'prefs-reset-intro' => 'Unaweza kutumia ukurasa huu ili kurudisha mapendekezo yako kwenye yale ya msingi ya tovuti. Hutaweza kulibatilisha tendo hili baadaye.', 'prefs-emailconfirm-label' => 'Kuhakikisha barua pepe:', @@ -1172,9 +1183,15 @@ Pia unaweza kuchagua kuwawezesha watumiaji wengine wawasiliane nawe kwa kupitia 'prefs-advancedrendering' => 'Hitiari za hali ya juu', 'prefs-advancedsearchoptions' => 'Hitiari za hali ya juu', 'prefs-advancedwatchlist' => 'Hitiari za hali ya juu', -'prefs-display' => 'Hitiari za kutandaza', +'prefs-displayrc' => 'Hitiari za kutandaza', +'prefs-displaysearchoptions' => 'Mapendekezo ya kuzinza', +'prefs-displaywatchlist' => 'Mapendekezo ya kuzinza', 'prefs-diffs' => 'Tofauti', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Inaonekana kwamba anwani wa barua pepe iko halisi', +'email-address-validity-invalid' => 'Andika anwani halisi ya barua pepe', + # User rights 'userrights' => 'Usimamizi wa wezo za mtumiaji', 'userrights-lookup-user' => 'Kusimamia kundi za watumiaji', @@ -1307,13 +1324,10 @@ Pia unaweza kuchagua kuwawezesha watumiaji wengine wawasiliane nawe kwa kupitia 'recentchanges-legend' => "Machaguo ya 'mabadaliko ya karibuni'", 'recentchangestext' => 'Orodha ya mabadilisho yaliyofanywa katika {{SITENAME}} siku zilizopita.', 'recentchanges-feed-description' => 'Tumia tawanyiko hili kufuatilia mabadiliko yote ya hivi karibuni katika Wiki.', -'recentchanges-label-legend' => 'Hekaya: $1.', -'recentchanges-legend-newpage' => '$1 - ukurasa mpya', 'recentchanges-label-newpage' => 'Ukurasa mpya ulianzishwa hapo', -'recentchanges-legend-minor' => '$1 - badiliko dogo', 'recentchanges-label-minor' => 'Hili ni badiliko dogo', -'recentchanges-legend-bot' => '$1 - sahihisho la bot', 'recentchanges-label-bot' => 'Sahihisho hili lilitekelezwa na bot', +'recentchanges-label-unpatrolled' => 'Haririo hili bado halijafanyiwa doria', 'rcnote' => "{{PLURAL:$1|Linalofuata ni badiliko '''1'''|Yanayofuata ni mabadiliko '''$1''' ya mwisho}} kutoka katika {{PLURAL:$2|siku iliyopita|siku '''$2''' zilizopita}}, hadi saa $5, tarehe $4.", 'rcnotefrom' => "Hapo chini yaonekana mabadiliko tangu '''$2''' (tunaonyesha hadi '''$1''').", 'rclistfrom' => 'Onyesha mabadiliko mapya kuanzia $1', @@ -1356,6 +1370,9 @@ Pia unaweza kuchagua kuwawezesha watumiaji wengine wawasiliane nawe kwa kupitia 'uploadnologin' => 'Hujaingia', 'uploadnologintext' => 'Lazima [[Special:UserLogin|uingie akaunti yako]] ile upakie mafaili.', 'uploaderror' => 'Hitilafu ya kupia', +'upload-recreate-warning' => "'''Ilani: Faili lenye jina hilo limeshafutwa au limeshasogezwa.''' + +Rejea kumbukumbu za kufuta au kuhamisha ukurasa huu zinazotolewa chini:", 'uploadtext' => "Tumia fomu hapo chini kwa kupakizia mafaili. Kwa kutazama au kutafuta faili zilizopakiwa awali, tafadhali nenda kwenye [[Special:FileList|orodha ya mafaili yaliyopakiwa]]. Kwa zile faili ambazo zishapitiwa, basi angalia [[Special:Log/upload|kumbukumbu ya mafaili]]. Kwa mafaili yaliyofutwa, tafadhali [[Special:Log/delete|tazama hapa]]. @@ -1391,6 +1408,16 @@ Tafadhali uweke jina jipya kwenye faili, halafu jaribu kulipakia upya.', 'filetype-banned-type' => "'''\".\$1\"''' sio aina la faili linaloruhusiwa. {{PLURAL:\$3|Aina ya faili linaloruhusiwa|Aina za faili zinazoruhusiwa}} ni \$2.", 'filetype-missing' => 'Faili halina mnyambuliko (kama ".jpg").', +'empty-file' => 'Faili ulilowasilisha ni tupu.', +'file-too-large' => 'Faili ulilowasilisha ni kubwa mno.', +'filename-tooshort' => 'Jina la faili ni fupi mno.', +'filetype-banned' => 'Aina hili la faili haliruhusiwi.', +'verification-error' => 'Faili hili halikupitishwa katika ukaguzi wa faili.', +'illegal-filename' => 'Jina hilo la faili haliruhusiwi.', +'overwrite' => 'Kuandikiza faili lililopo tayari hairuhusiwi.', +'unknown-error' => 'Ilitokea hitilafu isiyojulikana.', +'tmp-create-error' => 'Haikuweza kuanzisha faili la muda.', +'tmp-write-error' => 'Hitilafu ya kuandika faili la muda.', 'large-file' => 'Tunashauri mafaili yasizidi $1; faili hili lina $2.', 'largefileserver' => 'Faili hili ni kubwa kuliko seva ilivyopangwa kuruhusu.', @@ -1422,13 +1449,14 @@ Kama bado unataka kupakia faili lako, tafadhali rudi na utumie jina jipya. 'file-exists-duplicate' => 'Faili hili ni nakala ya {{PLURAL:$1|faili lifuatalo|mafaili yafuatayo}}:', 'file-deleted-duplicate' => 'Faili linalofanana na faili hili ([[:$1]]) limeshafutwa hapo awali. Tazama kumbukumbu za kufuta faili lile kabla hujaendelea kulipakia upya.', -'successfulupload' => 'Upakiaji ulifaulu', 'uploadwarning' => 'Ilani kuhusu kupakia', 'uploadwarning-text' => 'Tafadhali ubadilishe maelezo ya faili hapo chini, halafu jaribu tena.', 'savefile' => 'Hifadhi faili', 'uploadedimage' => 'ameipakia "[[$1]]"', 'overwroteimage' => 'alipakia toleo jipya la "[[$1]]"', 'uploaddisabled' => 'Upakiaji umelemazwa.', +'copyuploaddisabled' => 'Kupakia kwa kupitia URL kumelemazwa.', +'uploadfromurl-queued' => 'Upakiaji wako umewekwa kwenye foleni.', 'uploaddisabledtext' => 'Upakiaji wa mafaili umelemazwa.', 'php-uploaddisabledtext' => 'Upakiaji wa mafaili umelemazwa katika PHP. Tafadhali utazame kipimo cha file_uploads.', @@ -1451,6 +1479,14 @@ Fikiria kama inafaa kuendelea kupakia faili hili. Kumbukumbu ya kufuta faili hili inapatikana hapa kukusaidia:", 'filename-bad-prefix' => "Jina la faili unalolipakia huanza na '''\"\$1\"''', ambalo ni jina lisilo na maana yanayoeleweka kirahisi, ya aina inayotolewa huwa na kamera dijiti. Tafadhali chagua jina linaloeleweka kirahisi kwa ajili ya faili lako.", +'upload-success-subj' => 'Upakiaji ulifaulu', +'upload-success-msg' => 'Umefaulu kupakia faili kutoka kwa [$2]. Faili linapatikana hapa: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Hitilafu ya kupakia', +'upload-failure-msg' => 'Kulikuwa na tatizo ulipopakia faili kutoka kwa [$2]: + +$1', +'upload-warning-subj' => 'Ilani ya kupakia', +'upload-warning-msg' => 'Kulitokea tatizo na upakiaji wako kuanzia [$2]. Unaweza kurudi katika [[Special:Upload/stash/$1|fomu ya kupakia]] ili kurekebisha tatizo hili.', 'upload-proto-error' => 'Itifaki isio sahihi', 'upload-proto-error-text' => 'Upakiaji wa mbali lazima URL ianze na http:// au ftp://.', @@ -1502,6 +1538,7 @@ Ukibofya kichwa cha safu mtindo wa kupanga orodha utabadilika.', 'listfiles_search_for' => 'Tafuta jina la faili:', 'imgfile' => 'faili', 'listfiles' => 'Orodha ya mafaili', +'listfiles_thumb' => 'Picha ndogo', 'listfiles_date' => 'Tarehe', 'listfiles_name' => 'Jina', 'listfiles_user' => 'Mtumiaji', @@ -1616,8 +1653,8 @@ Kumbuka kuhakikisha kwamba hakuna viungo vingine vinavyoelekea kigezo fulani kab 'statistics-edits' => 'Kurasa zilizohaririwa tangu {{SITENAME}} ilivyoanzishwa', 'statistics-edits-average' => 'Wastani wa uhariri kwa kurasa', 'statistics-views-total' => 'Jumla ya mitazamaji', +'statistics-views-total-desc' => 'Ziara za kurasa zisizopatikana na kurasa maalum hazihesabiwi', 'statistics-views-peredit' => 'Mitazamaji kwa haririo', -'statistics-jobqueue' => 'Urefu wa [http://www.mediawiki.org/wiki/Manual:Job_queue foleni ya kazi]', 'statistics-users' => '[[Special:ListUsers|Watumiaji]] waliojisajiri', 'statistics-users-active' => 'Watumiaji wanaofanya kazi', 'statistics-users-active-desc' => 'Watumiaji waliofanya kazi katika siku {{PLURAL:$1|iliyopita|$1 zilizopita}}', @@ -1630,6 +1667,8 @@ Ni afadhali kiungo kiende makala inayostahili moja kwa moja.
    Kurasa za kutofautishana maana ni zile zinazotumia kigezo kinachoorodheshwa katika ukurasa wa [[MediaWiki:Disambiguationspage]].", 'doubleredirects' => 'Maelekezo mawilimawili', +'doubleredirectstext' => 'Ukurasa huu unaorodhesha kurasa zinazoelekeza kurasa zingine za kuelekeza. +Katika kila mstari kuna viungo vinavyokwenda katika kurasa za kuelekeza zote mbili, pamoja na ukurasa wa mwishilio mwa elekezo la pili. Ukurasa huu wa mwishilio huwa ni ukurasa unaostahili kuelekezwa kutoka kwa ukurasa wa kuelekeza wa kwanza. Vitu vilivyokatwa kwa mstari vimeshatatuliwa.', 'double-redirect-fixed-move' => '[[$1]] umehamishwa. Sasa unaelekeza [[$2]].', 'double-redirect-fixer' => 'Boti ya kurekebisha maelekezo', @@ -1653,6 +1692,8 @@ Sasa unaelekeza [[$2]].', 'nmembers' => '{{PLURAL:$1|kitu|vitu}} $1', 'nrevisions' => '{{PLURAL:$1|pitio|mapitio}} $1', 'nviews' => '{{PLURAL:$1|mtazamaji|mitazamaji}} $1', +'nimagelinks' => 'Inatumika katika {{PLURAL:$1|ukurasa moja tu|kurasa $1}}', +'ntransclusions' => 'inatumika katika {{PLURAL:$1|ukurasa moja tu|kurasa $1}}', 'specialpage-empty' => 'Hakuna matokeo katika taarifa hii.', 'lonelypages' => 'Kurasa ambazo haziungwi kutoka ukurasa mwingine wowote', 'uncategorizedpages' => 'Kurasa ambazo hazijawekwa katika jamii', @@ -1751,7 +1792,7 @@ Tazama pia [[Special:WantedCategories|jamii zinazohitajika]].', 'linksearch-ok' => 'Tafuta', 'linksearch-text' => 'Alama maalum za kutafuta kama "*.wikipedia.org" zinaweza kutumika.
    Itifaki zinazoungwa mkono: $1', -'linksearch-line' => '$2 lina kiungo kinachokupeleka hadi $1', +'linksearch-line' => '$2 umeungwa kutoka $1', 'linksearch-error' => 'Alama maalum za kutafuta zinaweza kutumika mwanzoni mwa URL tu.', # Special:ListUsers @@ -1797,34 +1838,36 @@ Labda patakuwa na [[{{MediaWiki:Listgrouprights-helppage}}|maelezo mengine]] kuh 'listgrouprights-removegroup-self-all' => 'Kuondoa makundi yote kutoka akaunti ya binafsi', # E-mail user -'mailnologin' => 'Hakuna anwani wa kutuma', -'mailnologintext' => 'Ukitaka kutuma barua pepe kwa watumiaji wengine inabidi uwe [[Special:UserLogin|umeshaingia kwenye akaunti yako]] na pia uwe na anwani ya barua pepe sahihi pale [[Special:Preferences|mapendekezo yako]].', -'emailuser' => 'Mtumie mtumiaji huyu barua pepe', -'emailpage' => 'Kumtumia mtumiaji barua pepe', -'emailpagetext' => 'Utumie fomu iliopo chini ili kutuma barua pepe kwa mtumiaji huyu. +'mailnologin' => 'Hakuna anwani wa kutuma', +'mailnologintext' => 'Ukitaka kutuma barua pepe kwa watumiaji wengine inabidi uwe [[Special:UserLogin|umeshaingia kwenye akaunti yako]] na pia uwe na anwani ya barua pepe sahihi pale [[Special:Preferences|mapendekezo yako]].', +'emailuser' => 'Mtumie mtumiaji huyu barua pepe', +'emailpage' => 'Kumtumia mtumiaji barua pepe', +'emailpagetext' => 'Utumie fomu iliopo chini ili kutuma barua pepe kwa mtumiaji huyu. Anwani yako ya barua pepe ulioitaja katika [[Special:Preferences|mapendekezo yako]] itaandikwa kwenye sanduku la anwani "Kutoka kwa" katika barua pepe, ili mtu atakayeipokea aweze kukujibu moja kwa moja.', -'usermailererror' => 'Chombo cha ujumbe kimerejesha hitilafu:', -'defemailsubject' => 'Barua pepe ya {{SITENAME}}', -'noemailtitle' => 'Anwani ya barua pepe hakuna', -'noemailtext' => 'Mtumiaji huyu hajataja anwani sahihi ya barua pepe.', -'nowikiemailtitle' => 'Barua pepe haziruhusiwi', -'nowikiemailtext' => 'Mtumiaji huyu hajakubali kupokea barua pepe kutoka kwa watumiaji wengine.', -'email-legend' => 'Tuma barua pepe kwa mtumiaji mwingine wa {{SITENAME}}', -'emailfrom' => 'Kutoka kwa:', -'emailto' => 'Kwa:', -'emailsubject' => 'Mada:', -'emailmessage' => 'Ujumbe:', -'emailsend' => 'Tuma', -'emailccme' => 'Tuma nakala ya barua yangu ya pepe kwangu.', -'emailccsubject' => 'Nakala ya barua pepe uliotuma kwa $1: $2', -'emailsent' => 'Barua pepe imetumwa', -'emailsenttext' => 'Barua pepe yako imetumwa.', -'emailuserfooter' => 'Barua pepe hii imetumwa na $1 kwa $2 kwa kutumia zana ya "Kumtumia mtumiaji barua pepe" iliyopo {{SITENAME}}.', +'usermailererror' => 'Chombo cha ujumbe kimerejesha hitilafu:', +'defemailsubject' => 'Barua pepe ya {{SITENAME}}', +'usermaildisabled' => 'Uwezo wa kutuma barua pepe kwa mtumiaji umesitishwa', +'usermaildisabledtext' => 'Huwezi kutuma barua pepe kwa watumiaji wengine wa wiki hii', +'noemailtitle' => 'Anwani ya barua pepe hakuna', +'noemailtext' => 'Mtumiaji huyu hajataja anwani sahihi ya barua pepe.', +'nowikiemailtitle' => 'Barua pepe haziruhusiwi', +'nowikiemailtext' => 'Mtumiaji huyu hajakubali kupokea barua pepe kutoka kwa watumiaji wengine.', +'email-legend' => 'Tuma barua pepe kwa mtumiaji mwingine wa {{SITENAME}}', +'emailfrom' => 'Kutoka kwa:', +'emailto' => 'Kwa:', +'emailsubject' => 'Mada:', +'emailmessage' => 'Ujumbe:', +'emailsend' => 'Tuma', +'emailccme' => 'Tuma nakala ya barua yangu ya pepe kwangu.', +'emailccsubject' => 'Nakala ya barua pepe uliotuma kwa $1: $2', +'emailsent' => 'Barua pepe imetumwa', +'emailsenttext' => 'Barua pepe yako imetumwa.', +'emailuserfooter' => 'Barua pepe hii imetumwa na $1 kwa $2 kwa kutumia zana ya "Kumtumia mtumiaji barua pepe" iliyopo {{SITENAME}}.', # Watchlist 'watchlist' => 'Maangalizi yangu', 'mywatchlist' => 'Maangalizi yangu', -'watchlistfor' => "(kwa '''$1''')", +'watchlistfor2' => 'Kwa ajili ya $1 $2', 'nowatchlist' => 'Hamna vitu katika maangalizi yako.', 'watchlistanontext' => 'Tafadhali $1 ili kutazama au kuhariri vitu vilivyopo katika orodha yako ya maangalizi.', 'watchnologin' => 'Hujaingia', @@ -1945,6 +1988,9 @@ ukurasa huu una mhariri mmoja tu.', 'revertpage-nouser' => 'Masahihisho ya mtumiaji (jina lake limefichwa) yamerudishwa hadi pitio la mwisho lililotengenezwa na [[User:$1|$1]].', 'rollback-success' => 'Masahihisho aliyeyafanya $1 yalirejeshwa hadi kufika sahihisho la mwisho aliyefanya $2.', +# Edit tokens +'sessionfailure-title' => 'Kushindikana cha kipindi', + # Protect 'protectlogpage' => 'Kumbukumbu ya ulindaji', 'protectedarticle' => 'aliulinda "[[$1]]"', @@ -2041,19 +2087,23 @@ $1', 'month' => 'Kutoka mwezi (na zamani zaidi):', 'year' => 'Kutoka mwakani (na zamani zaidi):', -'sp-contributions-newbies' => 'Onyesha michango ya akaunti mpya tu', -'sp-contributions-newbies-sub' => 'Kwa akaunti mpya', -'sp-contributions-newbies-title' => 'Michango ya watumiaji wenye akaunti mpya', -'sp-contributions-blocklog' => 'Kumbukumbu ya uzuio', -'sp-contributions-deleted' => 'michango iliyofutwa ya mtumiaji', -'sp-contributions-logs' => 'kumbukumbu', -'sp-contributions-talk' => 'majadiliano', -'sp-contributions-userrights' => 'usimamizi wa wezo za mtumiaji', -'sp-contributions-blocked-notice' => 'Mtumiaji huyu bado amezuiwa. +'sp-contributions-newbies' => 'Onyesha michango ya akaunti mpya tu', +'sp-contributions-newbies-sub' => 'Kwa akaunti mpya', +'sp-contributions-newbies-title' => 'Michango ya watumiaji wenye akaunti mpya', +'sp-contributions-blocklog' => 'Kumbukumbu ya uzuio', +'sp-contributions-deleted' => 'michango iliyofutwa ya mtumiaji', +'sp-contributions-uploads' => 'vipakizaji', +'sp-contributions-logs' => 'kumbukumbu', +'sp-contributions-talk' => 'majadiliano', +'sp-contributions-userrights' => 'usimamizi wa wezo za mtumiaji', +'sp-contributions-blocked-notice' => 'Mtumiaji huyu bado amezuiwa. Rejea kumbukumbu ya uzuio ya mwisho inayoandikwa chini:', -'sp-contributions-search' => 'Tafuta michango', -'sp-contributions-username' => 'Anwani ya IP au jina la mtumiaji:', -'sp-contributions-submit' => 'Tafuta', +'sp-contributions-blocked-notice-anon' => 'Anwani huyu ya IP bado imezuiwa. +Rejea kumbukumbu ya uzuio ya mwisho inayoandikwa chini:', +'sp-contributions-search' => 'Tafuta michango', +'sp-contributions-username' => 'Anwani ya IP au jina la mtumiaji:', +'sp-contributions-toponly' => 'Yaonyeshwe maharirio ya mwisho tu katika ukurasa', +'sp-contributions-submit' => 'Tafuta', # What links here 'whatlinkshere' => 'Viungo viungavyo ukurasa huu', @@ -2078,6 +2128,9 @@ Rejea kumbukumbu ya uzuio ya mwisho inayoandikwa chini:', 'blockip' => 'Zuia mtumiaji', 'blockip-title' => 'Kumzuia mtumiaji', 'blockip-legend' => 'Kumzuia mtumiaji', +'blockiptext' => 'Tumia fomu iliyopo chini kumzuia mtu asihariri kwa kupitia anwani fulani wa IP au kwa kutumia jina fulani la mtumiaji. +Nia ya kumzuia mtu inatakiwa kuwa kuzuia uharibifu tu, na ifanikiwe kutokana na masharti ya [[{{MediaWiki:Policy-url}}|sera]]. +Andika sababu ya kuzuia chini (kwa mfano, kwa kutaja mifano ya kurasa zilizoharibiwa).', 'ipaddress' => 'Anwani ya IP:', 'ipadressorusername' => 'Anwani ya IP au jina la mtumiaji:', 'ipbexpiry' => 'Itakwisha:', @@ -2106,10 +2159,13 @@ Rejea kumbukumbu ya uzuio ya mwisho inayoandikwa chini:', 'badipaddress' => 'Anwani batili ya IP', 'blockipsuccesssub' => 'Kulifaulu kumzuia', 'ipb-edit-dropdown' => 'Hariri sababu za kuzuia', +'ipb-unblock-addr' => 'Acha kumzuia $1', +'ipb-unblock' => 'Acha kumzuia mtumiaji au anwani wa IP', 'ipb-blocklist-contribs' => 'Michango ya $1', -'ipblocklist' => 'Anwani za IP na majina ya watumiaji waliozuiliwa', +'ipblocklist' => 'Watumiaji waliozuiliwa', 'ipblocklist-username' => 'Jina la mtumiaji au anwani ya IP:', 'ipblocklist-submit' => 'Tafuta', +'ipblocklist-otherblocks' => ' {{PLURAL:$1|Uzuio mwingine|Zuio zingine}}', 'blocklistline' => '$1, $2 alimzuia $3 ($4)', 'infiniteblock' => 'milele', 'expiringblock' => 'inakwisha tarehe $1 saa $2', @@ -2189,6 +2245,8 @@ Chagua jina lengine.', 'movetalk' => 'Hamisha ukurasa wake wa majadiliano', 'move-subpages' => 'Hamisha kurasa ndogo (hadi $1)', 'move-talk-subpages' => 'Hamisha kurasa ndogo za ukurasa wa majadiliano (hadi $1)', +'movepage-page-moved' => 'Ukurasa wa $1 umehamishwa hadi $2.', +'movepage-page-unmoved' => 'Ukurasa wa $1 hakuweza kuhamishwa hadi $2.', '1movedto2' => '[[$1]] umesogezwa hapa [[$2]]', '1movedto2_redir' => 'alihamisha [[$1]] kwenda [[$2]] kwa kutengeneza elekezo', 'movelogpage' => 'Kumbukumbu ya uhamiaji', @@ -2206,6 +2264,7 @@ Chagua jina lengine.', 'immobile-source-page' => 'Ukurasa huu hauwezi kuhamishwa.', 'immobile-target-page' => 'Kuhamisha katika jina hilo la mwishilio haiwezikani.', 'imagenocrossnamespace' => 'Faili linaweza kuhamishwa katika eneo la wiki la faili tu.', +'nonfile-cannot-move-to-file' => 'Ni mafaili tu yanayoweza kuhamishwa katika eneo la faili', 'imageinvalidfilename' => 'Jina la faili la mwishilio ni batili', 'fix-double-redirects' => 'Sasisha maelekezo yanayoelekeza jina la awali la faili', 'move-leave-redirect' => 'Weka elekezo mahali pake', @@ -2279,12 +2338,14 @@ Ulihafadhi katika tarakalishi yako, halafu ulipakie hapa.', 'importstart' => 'Kurasa zinaletwa...', 'import-revision-count' => '{{PLURAL:$1|pitio|mapitio}} $1', 'importnopages' => 'Hakuna kurasa za kuleta.', +'imported-log-entries' => 'Kumbukumbu $1 {{PLURAL:$1|ililetwa|zililetwa}}.', 'importfailed' => 'Kuleta hakufaulu: $1', 'importunknownsource' => 'Aina ya kitu unacholeta haijulikani', 'importcantopen' => 'Faili lililoletwa halikuweza kufunguliwa', 'importbadinterwiki' => 'Kiungo kibovu kati za wiki', 'importnotext' => 'Tupu au bila maandishi', 'importsuccess' => 'Kuleta kumekamilishwa!', +'import-noarticle' => 'Hakuna kurasa za kuleta!', 'import-token-mismatch' => 'Data ya kipindi zilipotelewa. Tafadhali jaribu tena.', @@ -2356,6 +2417,8 @@ Tafadhali jaribu tena.', 'tooltip-upload' => 'Kuanza kupakia', 'tooltip-rollback' => '"Rejesha" inarejesha (ma)sahihisho ya ukurasa huu yaliyofanyika na yule aliyeuhariri mwishoni, kwa kubofya mara moja tu.', 'tooltip-undo' => 'Ukibonyeza "tengua" sahihisho hili litarejeshwa na hakiki yake itaonekana pamoja na dirisha la kuhariri, ili uweze kuandika sababu na maelezo kwenye muhtasari.', +'tooltip-preferences-save' => 'Uhifadhi mapendekezo', +'tooltip-summary' => 'Andika muhtasari mfupi', # Attribution 'anonymous' => '{{PLURAL:$1|mtumiaji bila jina|watumiaji bila majina}} wa {{SITENAME}}', @@ -2381,6 +2444,7 @@ Tafadhali jaribu tena.', 'math_unknown_error' => 'hitilafu isiyojulikana', # Patrol log +'patrol-log-line' => 'aliweka alama ya kufanyiwa doria katika $1 ya $2 $3', 'patrol-log-auto' => '(kwa kujiendesha)', 'patrol-log-diff' => 'pitio la $1', @@ -2401,12 +2465,13 @@ Ukilitekeleza faili, mashine yako huenda ikawa matatani.', 'imagemaxsize' => "Kikomo cha ukubwa wa picha:
    ''(cha kurasa za maelezo ya mafaili)''", 'thumbsize' => 'Ukubwa wa picha ndogo:', 'widthheightpage' => '$1×$2, {{PLURAL:$3|ukurasa|kurasa}} $3', -'file-info' => '(ukubwa wa faili: $1, aina ya MIME: $2)', -'file-info-size' => '(piseli $1 × $2, saizi ya faili: $3, aina ya MIME: $4)', +'file-info' => 'ukubwa wa faili: $1, aina ya MIME: $2', +'file-info-size' => 'piseli $1 × $2, saizi ya faili: $3, aina ya MIME: $4', 'file-nohires' => 'Hakuna saizi kubwa zaidi.', -'svg-long-desc' => '(faili la SVG, husemwa kuwa piseli $1 × $2, saizi ya faili: $3)', +'svg-long-desc' => 'faili la SVG, husemwa kuwa piseli $1 × $2, saizi ya faili: $3', 'show-big-image' => 'Ukubwa wa awali', 'show-big-image-thumb' => 'Ukubwa wa hakikisho hili: piseli $1 x $2', +'file-info-png-repeat' => 'inachezwa {{PLURAL:$1|mara}} $1', # Special:NewFiles 'newimages' => 'Mkusanyiko wa mafaili mapya', @@ -2457,6 +2522,8 @@ likifupishwa. Nyuga zingine zitafichwa kama chaguo-msingi. 'exif-copyright' => 'Mwenye hatimiliki', 'exif-exifversion' => 'Mtindo wa Exif', 'exif-componentsconfiguration' => 'Maana ya kila kijenzi', +'exif-pixelydimension' => 'Upana wa picha', +'exif-pixelxdimension' => 'Urefu wa picha', 'exif-makernote' => 'Maelezo ya mtengenezaji', 'exif-usercomment' => 'Maoni ya mtumiaji', 'exif-relatedsoundfile' => 'Faili la sauti linalohusika', @@ -2474,7 +2541,9 @@ likifupishwa. Nyuga zingine zitafichwa kama chaguo-msingi. 'exif-gpsdestlatitude' => 'Latitudo ya kikomo', 'exif-gpsdestlongitude' => 'Longitudo ya kikomo', 'exif-gpsdestdistance' => 'Mbali wa kikomo', +'exif-gpsareainformation' => 'Jina la eneo la GPS', 'exif-gpsdatestamp' => 'Tarehe ya GPS', +'exif-objectname' => 'Jina fupi', 'exif-unknowndate' => 'Tarehe haijulikani', @@ -2559,31 +2628,31 @@ likifupishwa. Nyuga zingine zitafichwa kama chaguo-msingi. 'limitall' => 'zote', # E-mail address confirmation -'confirmemail' => 'Kuyakinisha anwani ya barua pepe', -'confirmemail_noemail' => 'Hakuna anwani ya barua pepe halali kwenye [[Special:Preferences|mapendekezo yako]].', -'confirmemail_text' => '{{SITENAME}} inakutakia uyakinishe anwani yako ya barua pepe kabla kutumia zana zinazohusika barua pepe. +'confirmemail' => 'Kuyakinisha anwani ya barua pepe', +'confirmemail_noemail' => 'Hakuna anwani ya barua pepe halali kwenye [[Special:Preferences|mapendekezo yako]].', +'confirmemail_text' => '{{SITENAME}} inakutakia uyakinishe anwani yako ya barua pepe kabla kutumia zana zinazohusika barua pepe. Bofya kibonyezi cha chini kuituma barua pepe ya kuyakinisha kwa anwani yako. Ndani ya barua pepe patakuwa na kiungo chenye ishara; tumia kiungo kwenye kivinjari chako ili kuyakinisha kwamba anwani yako ya barua pepe ni halali.', -'confirmemail_pending' => 'Ishara za kuidhinisha zimeshatumwa kwako kwa njia ya barua pepe; +'confirmemail_pending' => 'Ishara za kuidhinisha zimeshatumwa kwako kwa njia ya barua pepe; ikiwa umeanzisha akaunti yako sasa hivi tu, tafadhali subiri dakika chache zifike, kabla hujaribu kuomba ishara zingine.', -'confirmemail_send' => 'Nitumie ishara za kuyakinisha', -'confirmemail_sent' => 'Barua pepe ya kuyakinisha imetumwa.', -'confirmemail_oncreate' => 'Ishara za kuyakinisha zilitumwa kwa anwani yako ya barua pepe. +'confirmemail_send' => 'Nitumie ishara za kuyakinisha', +'confirmemail_sent' => 'Barua pepe ya kuyakinisha imetumwa.', +'confirmemail_oncreate' => 'Ishara za kuyakinisha zilitumwa kwa anwani yako ya barua pepe. Huhitaji ishara hizi ili kuingia akaunti yako, lakini utazihitaji ili kuwezesha zana zozote za wiki hii zinazotumia barua pepe.', -'confirmemail_sendfailed' => '{{SITENAME}} haikufaulu kutuma barua pepe ya kuyakinisha kwako. +'confirmemail_sendfailed' => '{{SITENAME}} haikufaulu kutuma barua pepe ya kuyakinisha kwako. Tafadhali uhakikishe kwamba hakuna ishara batili katika anwani yako ya barua pepe. Huduma ya barua pepe inasema: $1', -'confirmemail_invalid' => 'Ishara za kuyakinisha ni batili. +'confirmemail_invalid' => 'Ishara za kuyakinisha ni batili. Huenda zimepitwa na wakati.', -'confirmemail_needlogin' => 'Unahitajika $1 kuthibitisha anwani ya barua pepe yako.', -'confirmemail_success' => 'Barua pepe yako imethibitishwa. +'confirmemail_needlogin' => 'Unahitajika $1 kuthibitisha anwani ya barua pepe yako.', +'confirmemail_success' => 'Barua pepe yako imethibitishwa. Sasa unaweza [[Special:UserLogin|kuingia]] na kuifurahia {{SITENAME}}.', -'confirmemail_loggedin' => 'Anwani ya barua pepe yako imethibishwa sasa.', -'confirmemail_error' => 'Kuna mambo yameenda kombo hifadhi ukamilisho wako.', -'confirmemail_subject' => 'Barua pepe ya uthibitisho ya {{SITENAME}}', -'confirmemail_body' => 'Kuna mtu, huenda ikawa wewe, kutoka anwani ya IP $1, amesajili akaunti "$2" na anwani ya barua pepe hii kwenye {{SITENAME}}. +'confirmemail_loggedin' => 'Anwani ya barua pepe yako imethibishwa sasa.', +'confirmemail_error' => 'Kuna mambo yameenda kombo hifadhi ukamilisho wako.', +'confirmemail_subject' => 'Barua pepe ya uthibitisho ya {{SITENAME}}', +'confirmemail_body' => 'Kuna mtu, huenda ikawa wewe, kutoka anwani ya IP $1, amesajili akaunti "$2" na anwani ya barua pepe hii kwenye {{SITENAME}}. Kuthibitisha ya kwamba akaunti hii inamilikiwa na wewe, unatakiwa kuwezesha njia ya barua pepe kwenye {{SITENAME}}, fungua kiungo hiki katika kivinjari chako: @@ -2594,13 +2663,38 @@ na kama *huja* sajili akaunti hii, fuata kiungo hiki ili kubatilisha uthibitisho $5 Kodi hizi za uthibitisho zitaishia mnamo $4.', -'confirmemail_invalidated' => 'Uthibitisho wa barua pepe umebatilishwa.', -'invalidateemail' => 'Batilisha barua pepe ya uthibitisho.', +'confirmemail_body_changed' => 'Kuna mtu, huenda ikawa wewe, kutoka anwani ya IP $1, ambaye amebadilisha anwani ya barua pepe ya akaunti "$2" iwe anwani ya barua pepe hii, kule {{SITENAME}}. + +Ili kuthibitisha ya kwamba akaunti hii inamilikiwa na wewe, pamoja na kuwezesha upya zana zinazotumia barua pepe kule {{SITENAME}}, ufungue kiungo hiki katika kivinjari chako: + +$3 + +na kama *huja* sajili akaunti hii, fuata kiungo hiki ili kubatilisha uthibitisho wa anwani ya barua pepe: + +$5 + +Ishara hizi za uthibitisho zitaishia mnamo $4.', +'confirmemail_body_set' => 'Kuna mtu, huenda ikawa wewe, kutoka anwani ya IP $1, ambaye ameweka anwani ya barua pepe ya akaunti "$2" iwe anwani ya barua pepe hii, kule {{SITENAME}}. + +Ili kuthibitisha ya kwamba akaunti hii inamilikiwa na wewe, pamoja na kuwezesha upya zana zinazotumia barua pepe kule {{SITENAME}}, ufungue kiungo hiki katika kivinjari chako: + +$3 + +na kama *huja* sajili akaunti hii, fuata kiungo hiki ili kubatilisha uthibitisho wa anwani ya barua pepe: + +$5 + +Ishara hizi za uthibitisho zitaishia mnamo $4.', +'confirmemail_invalidated' => 'Uthibitisho wa barua pepe umebatilishwa.', +'invalidateemail' => 'Batilisha barua pepe ya uthibitisho.', # Scary transclusion 'scarytranscludefailed' => '[Kuleta kigezo imeshindikana kwa ajili ya $1]', 'scarytranscludetoolong' => '[URL ni ndefu mno]', +# Trackbacks +'trackbackremove' => '([$1 Futa])', + # Delete conflict 'deletedwhileediting' => "'''Ilani''': Ukurasa huu ulifutwa ulipokwisha kuanza huuhariri!", 'confirmrecreate' => "Mtumiaji [[User:$1|$1]] ([[User talk:$1|majadiliano]]) aliufuta ukurasa huu wakati umeshaanza kuuhariri, akaandika sababu hii ya kufuta: @@ -2627,6 +2721,7 @@ Tafadhali uthibitishe kwamba kweli unataka kuanzisha ukurasa huu upya.", 'table_pager_first' => 'Ukurasa wa kwanza', 'table_pager_last' => 'Ukurasa wa mwisho', 'table_pager_limit' => 'Ionyeshwe vitu $1 katika kila ukurasa', +'table_pager_limit_label' => 'Vitu katika kila ukurasa:', 'table_pager_limit_submit' => 'Nenda', 'table_pager_empty' => 'Hakuna matokeo', @@ -2674,15 +2769,26 @@ Pia unaweza [[Special:Watchlist/edit|kutumia kihariri cha kawaida]].', 'watchlisttools-edit' => 'Tazama na hariri maangalizi', 'watchlisttools-raw' => 'Hariri maangalizi ghafi', +# Core parser functions +'duplicate-defaultsort' => '\'\'\'Ilani:\'\'\' Neno msingi "$2" ya kupanga inafanya vingine na neno msingi "$1" ya kupanga lilotangulia.', + # Special:Version -'version' => 'Toleo', -'version-specialpages' => 'Kurasa maalum', -'version-other' => 'Zingine', -'version-version' => '(Toleo $1)', -'version-license' => 'Ruhusa', -'version-software' => 'Bidhaa pepe iliyosakinishwa', -'version-software-product' => 'Bidhaa', -'version-software-version' => 'Toleo', +'version' => 'Toleo', +'version-specialpages' => 'Kurasa maalum', +'version-skins' => 'Maumbo', +'version-other' => 'Zingine', +'version-version' => '(Toleo $1)', +'version-license' => 'Ruhusa', +'version-poweredby-credits' => "Wiki hii inaendeshwa na bidhaa pepe ya '''[http://www.mediawiki.org/ MediaWiki]''', hakimiliki © 2001-$1 $2.", +'version-poweredby-others' => 'wengine', +'version-license-info' => 'MediaWiki ni bidhaa pepe huru; unaweza kuigawanyika pamoja na kuitumia na kuibadilisha kutokana na masharti ya leseni ya GNU General Public License inayotolewa na Free Software Foundation (Shirika la Bidhaa Pepe Huru); ama toleo 2 la hakimiliki, ama (ukitaka) toleo lolote linalofuata. + +MediaWiki inagawanyiwa kwa kutumaini kwamba ni ya manufaa, lakini BILA JUKUMU; hata bila jukumu linalojitokeza la KUWA TAYARI KUUZIKA au KUFAA KWA KUSUDI FULANI. Tazama leseni ya GNU General Public License kuona maelezo mengine. + +Huwa unapokea [{{SERVER}}{{SCRIPTPATH}}/COPYING nakala ya GNU General Public License] pamoja na programu hii; la sivyo, andika kuomba nakala kwa Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA au [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html uisome mkondoni].', +'version-software' => 'Bidhaa pepe iliyosakinishwa', +'version-software-product' => 'Bidhaa', +'version-software-version' => 'Toleo', # Special:FilePath 'filepath' => 'Njia ya faili', @@ -2726,6 +2832,16 @@ Andika jina la faili bila kiambishi awali cha "{{ns:file}}:".', 'blankpage' => 'Ukurasa tupu', 'intentionallyblankpage' => 'Ukurasa huu umeachwa tupu kwa makusudi.', +# External image whitelist +'external_image_whitelist' => ' #Acha mstari huu jinsi ilivyo

    +#Weka vipande vya uchanuzi wa kawaida (regex) (kipande kinachoingia kati ya // tu) hapo chini
    +#Vipande hivi vitaoanishwa na URL ya picha za nje (na kiungo cha moto)
    +#Vipande vinavyooanishwa vitaonekana kama picha, la sivyo, itaonyeshwa kiungo kinachokwenda katika picha tu
    +#Mistari inayoanza na # zinatumiwa kama maelezo
    +#Haitofautishana kati ya herufi kubwa na ndogo
    +
    +#Weka vipande vyote vya regex juu ya mstari huu. Acha mstari huu jinsi ilivyo
    ', + # Special:Tags 'tag-filter' => 'Chujio cha [[Special:Tags|tagi]]:', 'tag-filter-submit' => 'Chuja', @@ -2734,6 +2850,15 @@ Andika jina la faili bila kiambishi awali cha "{{ns:file}}:".', 'tags-edit' => 'hariri', 'tags-hitcount' => '{{PLURAL:$1|badiliko|mabadiliko}} $1', +# Special:ComparePages +'comparepages' => 'Linganisha kurasa', +'compare-selector' => 'Kulinganisha mapitio', +'compare-page1' => 'Ukurasa wa kwanza', +'compare-page2' => 'Ukurasa wa pili', +'compare-rev1' => 'Pitio la kwanza', +'compare-rev2' => 'Pitio la pili', +'compare-submit' => 'Linganisha', + # Database error messages 'dberr-header' => 'Wiki imekuta tatizo', 'dberr-problems' => 'Kumradhi! @@ -2751,6 +2876,7 @@ Tovuti hii inapata matatatizo wakati huu.', 'htmlform-float-invalid' => 'Kitu ulichokiandika si namba.', 'htmlform-int-toolow' => 'Namba uliyoiandika iko chini ya kiwango cha chini cha $1', 'htmlform-int-toohigh' => 'Namba uliyoiandika iko juu ya kiwango cha juu cha $1', +'htmlform-required' => 'Ni lazima kujaza kitu hapa', 'htmlform-submit' => 'Wasilisha', 'htmlform-reset' => 'Tengua mabadiliko', 'htmlform-selectorother-other' => 'Nyingine', diff --git a/languages/messages/MessagesSzl.php b/languages/messages/MessagesSzl.php index 2a7cef1b..c0080552 100644 --- a/languages/messages/MessagesSzl.php +++ b/languages/messages/MessagesSzl.php @@ -7,6 +7,7 @@ * @ingroup Language * @file * + * @author Britscher * @author Danny B. * @author Djpalar * @author Herr Kriss @@ -22,42 +23,41 @@ $fallback = 'pl'; $messages = array( # User preference toggles -'tog-underline' => 'Podkryślyńy linkůw:', +'tog-underline' => 'Podsztrychńyńcy linkůw:', 'tog-highlightbroken' => 'Uoznocz tak linki do zajtůw kere ńy trefjům (abo: dołůncz pytajńik?).', 'tog-justify' => 'Wyrůwnowej tekst we akapitach (justowańy)', -'tog-hideminor' => 'Schow drobne pomjyńańa we "Pomjyńanych na uostatku"', -'tog-hidepatrolled' => 'Schowej sprowdzůne sprowjyńa we ńydowno pomjyńanych', -'tog-newpageshidepatrolled' => 'Schowej sprowdzůne zajty na wykoźe nowych zajtůw', -'tog-extendwatchlist' => 'Pokoż na mjij pozorliśće wszyjske, a ńy yno uostatńe půmjyńańa', +'tog-hideminor' => 'Schow drobne pomjyńańa we ńydowno pomjyńanych', +'tog-hidepatrolled' => 'Schow sprowdzůne sprowjyńa we ńydowno pomjyńanych', +'tog-newpageshidepatrolled' => 'Schow sprowdzůne zajty na wykoźe nowych zajtůw', +'tog-extendwatchlist' => 'Pokoż na mojij pozůrliśće wszyjske, a ńyjyno uostatńe sprowjyńa', 'tog-usenewrc' => 'Używej poszyrzyńo ńydowno pomjyńanych (JavaScript)', 'tog-numberheadings' => 'Automatyczno numeracyjo titlůw', -'tog-showtoolbar' => 'Pokoż pasek przirzůndůw (JavaScript)', -'tog-editondblclick' => 'Przyńdź do sprowjańo po podwůjnym klikńyńću (JavaScript)', +'tog-showtoolbar' => 'Pokoż gurt werkcojgůw (JavaScript)', +'tog-editondblclick' => 'Edycja napoczynajům dwa klikńyńća (JavaScript)', 'tog-editsection' => 'Kożdo tajla zajty sprowjano uosobno', -'tog-editsectiononrightclick' => 'Klikńyńće prawym kneflym myszy na titlu tajli
    napoczyno jigo sprowjańy(JavaScript)', -'tog-showtoc' => 'Pokoż spis treśći (na zajtach, kere majům wjyncyj jak trzi tajle)', -'tog-rememberpassword' => 'Pamjyntej můj ausdruk na tym komputrze', -'tog-editwidth' => 'Poszyrz plac sprowjyń na cołki ekran', -'tog-watchcreations' => 'Dowom pozůr na zajty, kere żech naszkryfloł', -'tog-watchdefault' => 'Dowom pozůr na zajty, kere żech sprowjoł', -'tog-watchmoves' => 'Dowom pozůr na zajty, kere żech przećepnył', -'tog-watchdeletion' => 'Dowom pozůr na zajty, kere żech wyćepnył', +'tog-editsectiononrightclick' => 'Klikńyńće prawym kneflym myszy na titlu tajli
    napoczyno jego sprowjańy(JavaScript)', +'tog-showtoc' => 'Pokoż spis treśći (na zajtach, kere majům wjyncy jak trzi tajle)', +'tog-rememberpassword' => 'Pamjyntej můj ausdruk na tym kůmputrze (nojdalij bez $1 {{PLURAL:$1|dźyń|dńůw}})', +'tog-watchcreations' => 'Dowům pozůr na zajty, kere żech naszkryfloł', +'tog-watchdefault' => 'Dowům pozůr na zajty, kere żech sprowjoł', +'tog-watchmoves' => 'Dowům pozůr na zajty, kere żech przećepnył', +'tog-watchdeletion' => 'Dowům pozůr na zajty, kere żech wyćepnył', 'tog-minordefault' => 'Kożde moje sprowjańy je ńywjelge', -'tog-previewontop' => 'Pokoż poglůnd przed placym sprowjańo', -'tog-previewonfirst' => 'Pokoż poglůnd zajty przi pjyrszym sprowjańu', +'tog-previewontop' => 'Uobźyrej przed placym sprowjańo', +'tog-previewonfirst' => 'Obźyrej zajta przi pjyrszym sprowjańu', 'tog-nocache' => 'Wypńij podrynczno pamjyńć', 'tog-enotifwatchlistpages' => 'Wyślij e-brifa, kej ftoś zmjyńi zajta, na kero dowom pozůr', -'tog-enotifusertalkpages' => 'Wyślij e-brifa, kej zajta mojij godki bydźe zmjyńono', -'tog-enotifminoredits' => 'Wyślij e-brifa tyž w takim raźe, kej by chodźiuo uo drobne pomjyńańa', -'tog-enotifrevealaddr' => 'Ńy chow mojigo e-brifa w powjadomjyńach', +'tog-enotifusertalkpages' => 'Wyślij e-brifa, kej zajta mojij godki bydźe pomjyńono', +'tog-enotifminoredits' => 'Wyślij e-brifa tyż, kej by szło uo drobne pomjyńańa', +'tog-enotifrevealaddr' => 'Ńy chow mojigo e-brifa we powjadomjyńach', 'tog-shownumberswatching' => 'Pokoż, wjela sprowjorzy dowo pozůr', 'tog-oldsig' => 'Teroźni wyglůnd Twojygo szrajbowańo', 'tog-fancysig' => 'Szrajbńij s kodůma wiki (bez autůmatycznygo linka)', -'tog-externaleditor' => 'Sztandardowo używej zewnyntrznygo edytora (jyno do ekspertůw, trza mjyć ekstra sztalowańy we systymje)', -'tog-externaldiff' => 'Sztandardowo używej zewnyntrzny program do filowańo w pomjyńańach (jyno do ekspertůw, trza mjyć ekstra sztalowańy we systymje)', +'tog-externaleditor' => 'Sztandardowo używej zewnyntrzny edytor (jyno do ekspertůw, trza mjyć ekstra sztalowańy we systymje)', +'tog-externaldiff' => 'Sztandardowo używej zewnyntrzny program do filowańo we pomjyńańach (jyno do ekspertůw, trza mjyć ekstra sztalowańy we systymje)', 'tog-showjumplinks' => 'Zapńij cajchnůndzki "przyńdź do"', -'tog-uselivepreview' => 'Używej dynamicznygo poglůndu (JavaScript) (experymentalny)', -'tog-forceeditsummary' => 'Dej znoć, kejbych ńic ńy naszkryfloł w uopiśe pomjyńań', +'tog-uselivepreview' => 'Używej dynamiczne uobźyrańy (JavaScript) (eksperymentalny)', +'tog-forceeditsummary' => 'Pedź, kejbych ńic ńy naszkryfloł we uopiśe pomjyńań', 'tog-watchlisthideown' => 'Schow moje pomjyńańa we artiklach, na kere dowom pozůr', 'tog-watchlisthidebots' => 'Schow pomjyńańa sprowjone bez boty we artiklach, na kere dowom pozůr', 'tog-watchlisthideminor' => 'Schow ńywjelge pomjyńańa w artiklach, na kere dowom pozůr', @@ -74,8 +74,11 @@ $messages = array( 'underline-default' => 'Podug sztalowańo uoglůndarki', # Font style option in Special:Preferences -'editfont-style' => 'Styl czćůnki we placu sprowjyń:', -'editfont-default' => 'Domyślno przeglůndarki', +'editfont-style' => 'Styl czćůnki we placu sprowjyń:', +'editfont-default' => 'Domyślno przeglůndarki', +'editfont-monospace' => 'Monotypowe krojło', +'editfont-sansserif' => 'Bezszeryfowe krojło', +'editfont-serif' => 'Szeryfowe krojło', # Dates 'sunday' => 'Ńedźela', @@ -144,6 +147,8 @@ $messages = array( 'category-file-count' => '{{PLURAL:$2|W katygoryji snojduje śe jydyn plik.|W katygoryji {{PLURAL:$1|je pokozany $1 plik|sům pokozane $1 pliki|je pokozanych $1 plikůw}} s cołkyj liczby $2 plikůw.}}', 'category-file-count-limited' => 'W katygoryji {{PLURAL:$1|je pokozany $1 plik|sům pokozane $1 pliki|je pokozanych $1 plikůw}}.', 'listingcontinuesabbrev' => 'ć.d.', +'index-category' => 'Indeksowane zajty', +'noindex-category' => 'Ńyindeksowane zajty', 'mainpagetext' => "'''Sztalowańy MediaWiki śe udoło.'''", 'mainpagedocfooter' => 'Uobezdrzij [http://meta.wikimedia.org/wiki/Help:Contents przewodńik sprowjacza], kaj sům informacyje uo dźołańu uoprogramowańo MediaWiki. @@ -175,11 +180,19 @@ $messages = array( 'faq' => 'FAQ', 'faqpage' => 'Project:FAQ', +# Vector skin +'vector-view-edit' => '↓ Sprowjej', +'vector-view-history' => '↓Uobocz gyszichta', +'vector-view-view' => 'Czytej', +'actions' => '↓ Akcyje', +'namespaces' => '↓ Raumy mjan', +'variants' => '↓ Warjanty', + 'errorpagetitle' => 'Feler', 'returnto' => 'Nazod do zajty $1.', 'tagline' => 'S {{GRAMMAR:D.lp|{{SITENAME}}}}', 'help' => 'Půmoc', -'search' => 'Szukej', +'search' => 'Sznupej', 'searchbutton' => 'Sznupej', 'go' => 'Przyńdź', 'searcharticle' => 'Przyńdź', @@ -190,7 +203,7 @@ $messages = array( 'printableversion' => 'Wersyjo do durku', 'permalink' => 'Bezpostrzedńi link', 'print' => 'Durkuj', -'edit' => 'sprowjej', +'edit' => 'Sprowjej', 'create' => 'Stwůrz', 'editthispage' => 'Sprowjej ta zajta', 'create-this-page' => 'Stwůrz ta zajta', @@ -204,12 +217,12 @@ $messages = array( 'unprotectthispage' => 'Uodymkńij ta zajta', 'newpage' => 'Nowy artikel', 'talkpage' => 'Godej uo tym artiklu', -'talkpagelinktext' => 'dyskusyjo', +'talkpagelinktext' => 'Dyskusyjo', 'specialpage' => 'Špecyjalno zajta', 'personaltools' => 'Uosobiste', 'postcomment' => 'Skůmyntuj', 'articlepage' => 'Zajta artikla', -'talk' => 'dyskusyjo', +'talk' => 'Dyskusyjo', 'views' => 'Widok', 'toolbox' => 'Werkcojg', 'userpage' => 'Zajta sprowjorza', @@ -235,19 +248,19 @@ $messages = array( 'aboutpage' => 'Project:Uo serwiśe', 'copyright' => 'Tekst udostympńany na licencyji $1.', 'copyrightpage' => '{{ns:project}}:Prawa autorske', -'currentevents' => 'Bježůnce wydařyńa', -'currentevents-url' => 'Project:Bježůnce wydařyńa', -'disclaimers' => 'Informacyje prawne', -'disclaimerpage' => 'Project:Informacyje prawne', +'currentevents' => 'Aktualne przitrefjyńa', +'currentevents-url' => 'Project:Aktualne przitrefjyńa', +'disclaimers' => 'Prawne informacyje', +'disclaimerpage' => 'Project:Prawne informacyje', 'edithelp' => 'Pomoc we pomjyńańu', 'edithelppage' => 'Help:Jak pomjyńać zajta', -'helppage' => 'Help:Pomoc', +'helppage' => 'Help:Spis treśći', 'mainpage' => 'Przodńo zajta', 'mainpage-description' => 'Przodńo zajta', 'policy-url' => 'Project:Prawidua', -'portal' => 'Portal užytkowńikůw', -'portal-url' => 'Project:Portal užytkowńikůw', -'privacy' => 'Zasady chrońyńo prywatnośći', +'portal' => 'Portal używaczůw', +'portal-url' => 'Project:Portal używaczůw', +'privacy' => 'Prowidła chrůńyńo prywatności', 'privacypage' => 'Project:Zasady chrońyńo prywatnośći', 'badaccess' => 'Felerne uprawńyńo', @@ -263,7 +276,7 @@ $messages = array( 'newmessageslink' => 'nowe powjadůmjyńa', 'newmessagesdifflink' => 'uostatńe pomjyńyńy', 'youhavenewmessagesmulti' => 'Mosz nowe powjadůmjyńa: $1', -'editsection' => 'sprowjej', +'editsection' => 'Sprowjej', 'editold' => 'sprowjej', 'viewsourceold' => 'pokoż zdrzůdło', 'editlink' => 'sprowjej', @@ -282,7 +295,7 @@ $messages = array( 'site-atom-feed' => 'Kanau Atom {{GRAMMAR:D.lp|$1}}', 'page-rss-feed' => 'Kanau RSS "$1"', 'page-atom-feed' => 'Kanau Atom "$1"', -'red-link-title' => '$1 (ńy ma zajty)', +'red-link-title' => '$1 (ńy mo zajty)', # Short words for each namespace, by default used in the namespace tab in monobook 'nstab-main' => 'Zajta', @@ -383,7 +396,7 @@ Uotwarli my sam lo Ćebje kůnto. 'yourname' => 'Mjano užytkowńika:', 'yourpassword' => 'Hasuo:', 'yourpasswordagain' => 'Naškryflej hasuo zaś', -'remembermypassword' => 'Zapamjyntej moje hasuo na tym kůmputře', +'remembermypassword' => '↓Spamjyntej můj ausdruk na tym kůmputrze (nojdalij bez $1 {{PLURAL:$1|dźyń|dni}})', 'yourdomainname' => 'Twoja domyna', 'externaldberror' => 'Je jaki feler we zewnyntřnyj baźe autentyfikacyjnyj, abo ńy moš uprawńyń potřebnych do aktualizacyji zewnyntřnego kůnta.', 'login' => 'Zaloguj śe', @@ -537,11 +550,11 @@ Možeš to zrobić we [[Special:Preferences|swojich štalowańach]].', 'accmailtitle' => 'Hasuo wysuane.', 'accmailtext' => 'Hasuo užytkowńika "$1" zostauo wysuane pod adres $2.', 'newarticle' => '(Nowy)', -'newarticletext' => 'Ńy ma sam ješče artikla uo tym tytule. W polu ńižyj možeš naškryflać jygo pjyršy fragmynt. Kej chćoužeś zrobić co inkše, naćiś ino knefel "Nazod".', +'newarticletext' => 'Ńy ma sam jeszcze artikla uo tyj titli. Eli chcesz go sprowjać, naszkryflej niżyj jego tekst (wjyncy informacyj najdźesz [[{{MediaWiki:Helppage}}|na zajće půmocy]]). Eli żeś chćoł zrobić cosik inksze, naćiś ino knefel "Nazod".', 'anontalkpagetext' => "---- ''To jest zajta godki lo užytkowńikůw anůnimowych - takich, keři ńy majům ješče swojigo kůnta abo ńy chcům go terozki užywać. By jeich idyntyfikować, užywomy numerůw IP. Jeli ježeś anůnimowym užytkowńikym a wydowo Ći śe, aže zamjyščůne sam kůmyntoře ńy sům skjyrowane do Ćebje, [[Special:UserLogin|utwůř proša kůnto]] abo [[Special:UserLogin|zalůguj śe]] - bez tůž uńikńeš potym podobnych ńyporozumjyń.''", -'noarticletext' => 'Ńy můmy zajty uo takij titli. Mogesz [{{fullurl:{{FULLPAGENAME}}|action=edit}} wćepać artikel {{FULLPAGENAME}}] abo [[Special:Search/{{PAGENAME}}|szukać {{PAGENAME}} we inkszych artiklach]].', +'noarticletext' => 'Ńy můmy zajta uo takij titli. Mogesz [{{fullurl:{{FULLPAGENAME}}|action=edit}} wćepać artikel {{FULLPAGENAME}}] abo [[Special:Search/{{PAGENAME}}|sznupać {{PAGENAME}} we inkszych]].', 'userpage-userdoesnotexist' => 'Užytkowńik "$1" ńy je zareještrowany. Sprowdź eli na pewno chćoužeś stwořyć/pomjynić gynau ta zajta.', 'clearyourcache' => "'''Dej pozůr:''' Coby uobejřeć pomjyńańo pů naškryflańu nowych štalowań poleć přeglůndorce wyčyśćić zawartość pamjyńći podrynčnyj (cache). '''Mozilla / Firefox / Safari:''' přitřimej ''Shift'' klikajůnc na ''Uodśwjyž'' abo wciś ''Ctrl-Shift-R'' (''Cmd-Shift-R'' na Macintoshu), '''IE :''' přitřimej ''Ctrl'' klikajůnc na ''Uodśwjyž'' abo wciś ''Ctrl-F5''; '''Konqueror:''': kliknij knefel ''Uodśwjyž'' abo wciś ''F5''; užytkowńicy '''Opery''' mogům być zmušeńi coby coukym wyčyśćić jejich pamjyńć podrynčno we menu ''Werkcojgi→Preferencyje''.; '''Internet Explorer:''' třim ''Ctrl'' a wćiś ''Uodśwjyž'', abo wćiś ''Ctrl-F5''.", 'usercssyoucanpreview' => "'''Podpowjydź:''' Užyj knefla \"Podglůnd\", coby přetestować Twůj nowy arkuš stylůw CSS abo kod JavaScript před jego zašrajbowańym.", @@ -549,7 +562,7 @@ Jeli ježeś anůnimowym užytkowńikym a wydowo Ći śe, aže zamjyščůne sam 'usercsspreview' => "'''Pamjyntej, aže to je na raźe ino podglůnd Twojego arkuša stylůw CSS.''' '''Ńic ješče ńy zostouo naškryflone!'''", 'userjspreview' => "'''Pamjyntej, aže to je na raźe ino podglůnd Twojego JavaScriptu - nic ješče ńy zostouo naškryflone!'''", -'userinvalidcssjstitle' => "'''Pozůr:''' Ńy mo skůrki uo mjańe \"\$1\". Pamjyntej, aže zajty užytkowńika zawjyrajůnce CSS i JavaScript powinny začynać śe mouům buchštabům, np. {{ns:user}}:Foo/monobook.css.", +'userinvalidcssjstitle' => "'''Pozůr:''' Ńy mo skůrki uo mjańe \"\$1\". Pamjyntej, aže zajty užytkowńika zawjyrajůnce CSS i JavaScript powinny začynać śe mouům buchštabům, np. {{ns:user}}:Foo/vector.css.", 'updated' => '(Pomjyńano)', 'note' => "'''Pozůr:'''", 'previewnote' => "'''To je ino podglůnd - artikel ješče ńy je naškryflany!'''", @@ -580,7 +593,6 @@ By wćepać swoje pomjyńańo muśiš pomjyńać tekst w polu na wjyrchu. 'copyrightwarning2' => "Pamjyntej uo tym, aže couki wkuod do {{GRAMMAR:MS.lp|{{SITENAME}}}} može być sprowjany, pomjyńany abo wyćepany bez inkšych užytkownikůw. Jak ńy chceš, coby koždy můg go zmjyńać i dali rozpowšychńać bez uograničyń, ńy wćepuj go sam.
    Škryflajůnc sam tukej pośwjadčoš tyž, co te pisańy je twoje wuasne, abo žeś go wźůn(a) s matyrjouůw kere sům na public domain, abo kůmpatybilne (kuknij tyž: $1). '''PROŠA ŃY WĆEPYWAĆ SAM MATYRJOUŮW KERE SŮM CHRŮŃONE PRAWYM AUTORSKIM BEZ DOZWOLEŃO WUAŚĆIĆELA!'''", -'longpagewarning' => "'''Dej pozůr: Ta zajta je $1 kilobajt-y/-ůw wjelgo; w ńykerych přyglůndarkach můgům wystůmpić problymy w sprowjańu zajtůw kere majům wjyncyj jak 32 kilobajty. Kejbyś ůmjou, podźel tekst na myńše tajle.'''", 'longpageerror' => "'''Feler: Tekst kery žeś sam wćepywou mo $1 kilobajtůw. Maksymalno dugość tekstu ńy može być wjynkšo kej $2 kilobajtůw. Twůj tekst ńy bydźe sam naškryflany.'''", 'readonlywarning' => "'''Dej pozůr: Baza danych zostoua filowo zawarto skuli potřeb admińistracyjnych. Bestůž ńy do śe terozki naškryflać Twojich pomjyńań. Radzymy přećepać nowy tekst kajś do plika tekstowego (wytnij/wklej) a wćepać sam zaś po uodymkńyńću bazy.''' @@ -589,7 +601,7 @@ Admińistrator kery zawar baza dou take wyjaśńyńe: $1", 'semiprotectedpagewarning' => "'''Pozůr:''' Ta zajta zostoua zawarto a ino zaregišterowani užytkownicy mogům jům sprowjać.", 'cascadeprotectedwarning' => "'''Dej pozůr:''' Ta zajta zostoua zawarto a ino užytkowńicy s uprawńyńami admińistratora mogům jům sprowjać. Zajta ta je podpjynto pod {{PLURAL:$1|nastympujůnco zajta, kero zostoua zawarto|nastympujůncych zajtach, kere zostouy zawarte}} ze zauůnčonům opcjům dźedźičyńo:", 'titleprotectedwarning' => "'''DEJ POZŮR: Zajta uo tym titlu zostoua zawarto a ino ńykeři užytkowńicy mogům jům wćepać.'''", -'templatesused' => 'Šablůny užyte na tyj zajće:', +'templatesused' => '↓ {{PLURAL:$1|Szablon|Szablůny}} użyte na tyj zajće:', 'templatesusedpreview' => 'Šablůny užyte we tym podglůńdźe:', 'templatesusedsection' => 'Šablůny užyte w tyj tajli:', 'template-protected' => '(zawarty před sprowjańym)', @@ -753,7 +765,7 @@ Inkśi admińistratoři {{GRAMMAR:D.lp|{{SITENAME}}}} dali bydům mjeć dostymp 'difference' => '(Růžńice mjyndzy škryflańami)', 'lineno' => 'Lińja $1:', 'compareselectedversions' => 'porůwnej wybrane wersyje', -'editundo' => 'cofej', +'editundo' => 'uodćepej', 'diff-multi' => '(Ńy pokozano {{PLURAL:$1|jydnyj wersyji postředńij|$1 wersyji postředńich}}.)', # Search results @@ -769,14 +781,15 @@ Inkśi admińistratoři {{GRAMMAR:D.lp|{{SITENAME}}}} dali bydům mjeć dostymp 'notextmatches' => 'Ńy znejdźono we tekście zajtůw', 'prevn' => 'popředńe {{PLURAL:$1|$1}}', 'nextn' => 'nastympne {{PLURAL:$1|$1}}', +'shown-title' => '↓Pokoż $1 {{PLURAL:$1|wynik|wyniki|wynikůw}} lo zajta', 'viewprevnext' => 'Uobezdřij ($1 {{int:pipe-separator}} $2) ($3)', 'searchmenu-legend' => 'Uopcyje sznupańo', 'searchmenu-exists' => "'''Ńy ma zajty uo mjańy \"[[:\$1]]\" na tyj wiki'''", 'searchmenu-new' => "'''Stwůrz zajta „[[:$1|$1]]” na tyj wiki!'''", 'searchhelp-url' => 'Help:Pomoc', 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Przeglůndej zajty kere s anfanga majům tyn przedrostek]]', -'searchprofile-articles' => 'Zajty', -'searchprofile-project' => 'Zajty kere ńy sům we głůwnyj przestrzyńi mjan', +'searchprofile-articles' => '↓Zajty', +'searchprofile-project' => 'Zajty půmocy a projektu', 'searchprofile-images' => 'Pliki', 'searchprofile-everything' => 'Wszyjstko', 'searchprofile-advanced' => 'Zaawansowane', @@ -785,7 +798,7 @@ Inkśi admińistratoři {{GRAMMAR:D.lp|{{SITENAME}}}} dali bydům mjeć dostymp 'searchprofile-images-tooltip' => 'Sznupańy za plikůma', 'searchprofile-everything-tooltip' => 'Sznupej we cołkij zawartości (wroz ze zajtami godki)', 'searchprofile-advanced-tooltip' => 'Sznupańy we wybranych przestrzyńach mjan', -'search-result-size' => '$1 ({{PLURAL:$2|1 suowo|$2 suowa|$2 suůw}})', +'search-result-size' => '$1 ({{PLURAL:$2|1 słowo|$2 słowa|$2 słůw}})', 'search-result-score' => 'Akuratność: $1%', 'search-redirect' => '(překerowańy $1)', 'search-section' => '(tajla $1)', @@ -1034,6 +1047,7 @@ Inkśi admińistratoři {{GRAMMAR:D.lp|{{SITENAME}}}} dali bydům mjeć dostymp 'recentchanges-legend' => 'Uopcyje půmjyńanych na uostatku', 'recentchangestext' => 'Ta zajta předstawjo historyjo uostatńich půmjyńań na tyj wiki', 'recentchanges-feed-description' => 'Dowej pozůr na půmjyńane na uostatku na tyj wiki.', +'recentchanges-label-newpage' => '↓ W tyj edycyji sprowjůno nowy artikel', 'rcnote' => "Půńižej {{PLURAL:$1|pokozano uostatńo zmjano dokůnano|pokazano uostatńy '''$1''' zmjany naškryflane|pokozano uostatńich '''$1''' škryflań zrobjůnych}} bez {{PLURAL:$2|uostatńi dźyń|uostatńich '''$2''' dńi}}, začynojůnc uod $5 dńa $4.", 'rcnotefrom' => 'Půńižej pokazano půmjyńańo zrobjůne pů $2 (ńy wjyncyj jak $1 pozycji).', 'rclistfrom' => 'Pokož půmjyńańo uod $1', @@ -1130,7 +1144,6 @@ Jak chceš wćepać ta, bydźeš muśou zmjyńić mjano wćepywanygo terozki pli Idź nazod i wćepej tyn plik pod inkšym mjanym. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Tyn plik je kopjům {{PLURAL:$1|plika|nastypujůncych plikůw:}}', 'file-deleted-duplicate' => 'Identyczny plik jak tyn plik ([[:$1]]) zostoł wyćepany. Sprowdź historyja wyćepań tamtygo plika ńim wćepńesz go nazod.', -'successfulupload' => 'Wćepańe plika udouo śe', 'uploadwarning' => 'Uostřežyńe uo wćepywańu', 'savefile' => 'Naškryflej plik', 'uploadedimage' => 'wćepano "[[$1]]"', @@ -1149,6 +1162,7 @@ Idź nazod i wćepej tyn plik pod inkšym mjanym. [[File:$1|thumb|center|$1]]', Zastanůw śe, čy powinno śe go sam wćepywać. Rejer wyćepań tygo plika je podany půńižej, cobyś miou wygoda:", 'filename-bad-prefix' => "Mjano plika, kery wćepuješ, začyno śe uod '''\"\$1\"''' – je to mjano nojčynśćy připisywane autůmatyčńy bez cyfrowe fotoaparaty, uůno ńy dowo žodnych informacyji uo zawartośći plika. Prošymy cobyś nadou plikowi inkše, lepij zrozůmjaue mjano.", +'upload-success-subj' => 'Wćepańe plika udouo śe', 'upload-proto-error' => 'Ńyprowiduowy protokůu', 'upload-proto-error-text' => 'Zdalne přesůuańy plikůw wymago podańo adresu URL kery začyno śe na http:// abo ftp://.', @@ -1206,7 +1220,7 @@ Dostympno je tyž [[Special:WhatLinksHere/$2|pouno lista]].', 'morelinkstoimage' => 'Pokož [[Special:WhatLinksHere/$1|wjyncy uodnośnikůw]] do tygo plika.', 'redirectstofile' => '{{PLURAL:$1|Nastympujůncy plik překerowuje|Nastympujůnce pliki překerowujům}} ku tymu plikowi:', 'duplicatesoffile' => '{{PLURAL:$1|Nastympujůncy plik je kopjům|Nastympujůnce pliki sům kopjůma}} tygo plika:', -'sharedupload' => 'Tyn plik je wćepńynty na wspůlny serwer a inksze projekty tyż můgům go używać.', +'sharedupload' => 'Tyn plik je wćepńynty na $1 a inksze projekty tyż go mogům używać.', 'uploadnewversion-linktext' => 'Wćepńij nowšo wersyjo tygo plika', # File reversion @@ -1276,7 +1290,6 @@ Dostympno je tyž [[Special:WhatLinksHere/$2|pouno lista]].', 'statistics-edits-average' => 'Strzedńo liczba sprowjyń na zajta', 'statistics-views-total' => 'Cołkowito liczba bezuchůw', 'statistics-views-peredit' => 'Liczba bezuchůw na sprowjyńy', -'statistics-jobqueue' => 'Rozmjor [http://www.mediawiki.org/wiki/Manual:Job_queue raji zadań]', 'statistics-users' => 'Zarejerowanych [[Special:ListUsers|użytkowńikůw]]', 'statistics-users-active' => 'Aktywnych użytkowńikůw', 'statistics-users-active-desc' => 'Użytkowńiki, kere bůły aktywne bez {{PLURAL:$1|uostatńi dźyń|uostatńich $1 dńi}}', @@ -1471,7 +1484,6 @@ Adres e-brifa, kery zostoł bez Ćebje wkludzůny we [[Special:Preferences|Twoji # Watchlist 'watchlist' => 'Pozorlista', 'mywatchlist' => 'Moja pozůrlista', -'watchlistfor' => "(dla užytkowńika '''$1''')", 'nowatchlist' => 'Ńy ma žodnych pozycyji na liśće zajtůw, na kere dowoš pozůr.', 'watchlistanontext' => '$1 coby uobejřeć abo sprowjać elymynty listy zajtůw, na kere dowoš pozůr', 'watchnologin' => 'Ńy jest žeś zalůgowany', @@ -1583,7 +1595,9 @@ Autorym ostatńygo pomjyńyńo je terozki [[User:$3|$3]] ([[User talk:$3|godka]] 'revertpage' => 'Wycofano sprowjyńe użytkowńika [[Special:Contributions/$2|$2]] ([[User talk:$2|godka]]). Autor prziwrůcůnej wersyji to [[User:$1|$1]].', 'rollback-success' => 'Wycofano sprowjyńa užytkowńika $1. Přiwrůcůno uostatńo wersyja autorstwa $2.', -'sessionfailure' => 'Feler weryfikacyji zalůgowańo. + +# Edit tokens +'sessionfailure' => 'Feler weryfikacyji zalůgowańo. Polecyńy zostouo anulowane, aby ůńiknůńć přechwycyńo sesyji. Naćiś „cofej”, přeuaduj zajta, a potym zaś wydej polecyńy', @@ -1608,9 +1622,9 @@ Coby přejřeć lista uobecńy zawartych zajtůw, přeńdź na zajta wykazu [[Sp 'protect-locked-dblock' => "Ńy idźe půmjyńić poźůmu zawarća s kuli tygo co baza danych tyž je zawarto. Uobecne štalowańa dla zajty '''$1''' to:", 'protect-locked-access' => "Ńy moš uprowńyń coby pomjyńyć poziům zawarcia zajty. Uobecne ustawjyńo dlo zajty '''$1''' to:", 'protect-cascadeon' => 'Ta zajta je zawarto od pomjyńań, po takjymu, co jei užywo {{PLURAL:$1|ta zajta, kero je zawarto|nastympůjůnce zajty, kere zostauy zawarte}} a opcyjo dźedźičyńo je zaůončono. Možeš pomjyńyć poziům zawarcia tyi zajty, ale dlo dźedźičyńo zawarcia to ńy mo wpuywu.', -'protect-default' => '(důmyślny)', +'protect-default' => 'Wszyjske używocze mogům sprowjać', 'protect-fallback' => 'Wymago pozwolynjo "$1"', -'protect-level-autoconfirmed' => 'tylko zaregišterůwani', +'protect-level-autoconfirmed' => 'Blokuj nowe a ńyregistrowane używocze', 'protect-level-sysop' => 'Ino admini', 'protect-summary-cascade' => 'dźedźičyńy', 'protect-expiring' => 'wygaso $1 (UTC)', @@ -1719,7 +1733,7 @@ $1', 'sp-contributions-newbies-title' => 'Wkłod nowych użytkowńików', 'sp-contributions-blocklog' => 'zawarća', 'sp-contributions-deleted' => 'Wyćepane sprowjyńa użytkowńika', -'sp-contributions-talk' => 'dyskusyjo', +'sp-contributions-talk' => '↓ dyskusyjo', 'sp-contributions-userrights' => 'Zařůndzańy prowami užytkowńikůw', 'sp-contributions-search' => 'Šnupej za wkuodym', 'sp-contributions-username' => 'Adres IP abo mjano užytkowńika', @@ -1785,7 +1799,6 @@ Přyńdź do [[Special:IPBlockList|listy zawartych adresůw IP]] coby přejřeć 'ipb-edit-dropdown' => 'Sprowjej powody zawjyrańo uod sprowjyń', 'ipb-unblock-addr' => 'Uodymknij $1', 'ipb-unblock' => 'Uodymknij užytkowńika abo adres IP', -'ipb-blocklist-addr' => 'Istńejůnce zawarća uod sprowjyń lů $1', 'ipb-blocklist' => 'Zoboč istńijůnce zawarća', 'ipb-blocklist-contribs' => 'Wkłod $1', 'unblockip' => 'Uodymkńij sprowjyńo užytkowńikowi', @@ -2017,48 +2030,49 @@ Wšyjstke uoperacyje importu transwiki sům uodnotowywane w [[Special:Log/import 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|wersyja|wersyje|wersyji}} ze $2', # Tooltip help for the actions -'tooltip-pt-userpage' => 'Moja perzůnalno zajta', +'tooltip-pt-userpage' => 'Mojo perzůnalno zajta', 'tooltip-pt-anonuserpage' => 'Zajta užytkowńika do adresu IP spod kerygo sprowjoš', -'tooltip-pt-mytalk' => 'Moja zajta dyskusyje', +'tooltip-pt-mytalk' => 'Mojo zajta dyskusyje', 'tooltip-pt-anontalk' => 'Godka užytkowńika do adresu IP spod kerygo sprowjoš', 'tooltip-pt-preferences' => 'Moje preferéncyje', 'tooltip-pt-watchlist' => 'Lista artiklůw na kere daješ pozor', 'tooltip-pt-mycontris' => 'Lista uody mje sprowjonych', -'tooltip-pt-login' => 'My by chćeli cobyś śe zalůgowou, ale to ńy je uobowjůnzek.', +'tooltip-pt-login' => 'My by chćeli, cobyś śe zalůgowoł, nale to ńy je powinne', 'tooltip-pt-anonlogin' => 'Zachyncůmy do zalůgowańo śe, nale to ńy je uobowjůnzek', 'tooltip-pt-logout' => 'Wyloguj sie z wiki', -'tooltip-ca-talk' => 'Godej uo tym artiklu', -'tooltip-ca-edit' => 'Možeš sprowjać ta zajta. Ńim naškryfloš půmjyńańo, klikńij we knefel "podglůnd".', -'tooltip-ca-addsection' => 'Dodej kůmyntoř do godki', +'tooltip-ca-talk' => 'Dyskusyjo uo tym artiklu', +'tooltip-ca-edit' => 'Mogesz sprowjać ta zajta. Podwjela spamjyntosz půmjyńańo, klikńij we knefel "Uobźyrej".', +'tooltip-ca-addsection' => '↓Przidej nowy tymat', 'tooltip-ca-viewsource' => 'Ta zajta je zabezpječůno. Možeš śe uofilować tekst źrůduowy.', -'tooltip-ca-history' => 'Starše wersyje tyi zajty.', +'tooltip-ca-history' => 'Storsz wersyje tyj zajty', 'tooltip-ca-protect' => 'Zawřij ta zajta', 'tooltip-ca-delete' => 'Wyćep ta zajta', 'tooltip-ca-undelete' => 'Přiwrůć wersyja tyi zajty spřed wyćepańo', 'tooltip-ca-move' => 'Přećepnij ta zajta kaj indziy.', 'tooltip-ca-watch' => 'Dodej artikel do pozorlisty', 'tooltip-ca-unwatch' => 'Wyciep ten artikel z pozorlisty', -'tooltip-search' => 'Šnupej we serwisie {{SITENAME}}', +'tooltip-search' => 'Sznupej we serwiśe {{SITENAME}}', 'tooltip-search-go' => 'Přyńdź do zajty uo gynau takym titlu, uo ile sam je', -'tooltip-search-fulltext' => 'Šnupej za wprowadzůnym tekstym na zajtach', -'tooltip-p-logo' => 'Přodńo zajta', +'tooltip-search-fulltext' => 'Sznupej wćepany tekst na zajće', +'tooltip-p-logo' => 'Przodńo zajta', 'tooltip-n-mainpage' => 'Przelyź na Przodńo zajta', -'tooltip-n-portal' => 'Uo projekće, co sam možeš majštrować, kaj idźe znolyźć informacyje', -'tooltip-n-currentevents' => 'Informacyje uo aktualnych wydařyńach', -'tooltip-n-recentchanges' => 'Lista půmjyńanych na uostatku na wiki', -'tooltip-n-randompage' => 'Pokož losowo zajta', -'tooltip-n-help' => 'Zapoznej sie z obsůgą wiki', -'tooltip-t-whatlinkshere' => 'Pokož lista zajtůw kere sam sům adrésowane', -'tooltip-t-recentchangeslinked' => 'Půmjyńane na uostatku w zajtach adresowanych do tyi zajty', +'tooltip-n-mainpage-description' => 'Przelyź na przodńo zajta', +'tooltip-n-portal' => 'Uo projekće, co mogesz robić, kaj mogesz nolyźć informacyje', +'tooltip-n-currentevents' => 'Informacyje uo aktualnych przitrefjyńach', +'tooltip-n-recentchanges' => 'Lista ńydowno pomjyńanych we wiki', +'tooltip-n-randompage' => 'Pokoż losowo zajta', +'tooltip-n-help' => 'Sam śe mogesz moc przewjedźeć', +'tooltip-t-whatlinkshere' => 'Pokoż zajty, kere sam linkujům', +'tooltip-t-recentchangeslinked' => 'Ńydowno půmjyńane na zajtach, do kerych ta zajta linkuje', 'tooltip-feed-rss' => 'Kanau RSS do tyj zajty', 'tooltip-feed-atom' => 'Kanau Atom do tyi zajty', 'tooltip-t-contributions' => 'Pokož lista sprowjyń tygo užytkowńika', 'tooltip-t-emailuser' => 'Wyślij e-brif do tygo užytkowńika', -'tooltip-t-upload' => 'Wćepńij plik na serwer', -'tooltip-t-specialpages' => 'Lista wšyskich ekstra zajtów', +'tooltip-t-upload' => 'Wćepej plik na serwer', +'tooltip-t-specialpages' => 'Lista wszyjskich ekstra zajtůw', 'tooltip-t-print' => 'Wersyja do wydruku', 'tooltip-t-permalink' => 'Stouy link do tyi wersyji zajty', -'tooltip-ca-nstab-main' => 'Uobejřij zajta artikla', +'tooltip-ca-nstab-main' => 'Uobźyrej zajta artikla', 'tooltip-ca-nstab-user' => 'Pokož uosobisto zajta užytkowńika', 'tooltip-ca-nstab-media' => 'Uobejřij zajta artikla', 'tooltip-ca-nstab-special' => 'To je ekstra zajta. Ńy možeš jei sprowjać.', @@ -2169,10 +2183,10 @@ $1', 'imagemaxsize' => 'Na zajtach uopisu plikůw uůgrańič rozmjar uobrazkůw do:', 'thumbsize' => 'Rozmjar mińjatůrki', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|zajta|zajty|zajtůw}}', -'file-info' => '(rozmjor plika: $1, typ MIME: $2)', -'file-info-size' => '($1 × $2 pikseli, rozmior plika: $3, typ MIME: $4)', +'file-info' => 'rozmjor plika: $1, typ MIME: $2', +'file-info-size' => '$1 × $2 pikseli, rozmior plika: $3, typ MIME: $4', 'file-nohires' => 'Uobrozek we wjynkšej rozdźelčośći ńy je dostympny.', -'svg-long-desc' => '(Plik SVG, nůminalńe $1 × $2 pixelůw, rozmior plika: $3)', +'svg-long-desc' => 'Plik SVG, nůminalńe $1 × $2 pixelůw, rozmior plika: $3', 'show-big-image' => 'Oryginalno rozdźelčość', 'show-big-image-thumb' => 'Rozmiar podglůndu: $1 × $2 pikseli', @@ -2189,11 +2203,11 @@ $1', 'sp-newimages-showfrom' => 'pokož nowe pliki začynajůnc uod $2, $1', # Bad image list -'bad_image_list' => 'Dane noležy prowadźić we formaće: +'bad_image_list' => 'Dane trza wćepać we formaće: -Ino elementy tyi listy (linie kere majům na přodku *) bierymy pod uwoga. -Pjerwšy link w lińii muśi być linkym do zabrůńůnygo pliku. -Nostympne linki w lińii uwažůmy za wyjůntki, to sům nazwy zajtůw, kaj plik uo zakozanyj nazwje idźe wstawić.', +Jyno tajle listy (lińije, kere śe napoczynajům uod *) absztychujemy. +Pjyrszy link w lińiji muśi być linkym do zakozanygo pliku. +Nostypmne linki w lińiji sům uwożane za wyjimki – sům to mjana zajtůw, na kerych idzie użyć plik ze zakozanym mjanym.', # Metadata 'metadata' => 'Metadane', diff --git a/languages/messages/MessagesTa.php b/languages/messages/MessagesTa.php index 74a9abfa..79b38894 100644 --- a/languages/messages/MessagesTa.php +++ b/languages/messages/MessagesTa.php @@ -52,6 +52,18 @@ $namespaceAliases = array( $magicWords = array( 'redirect' => array( '0', '#வழிமாற்று', '#REDIRECT' ), + 'img_right' => array( '1', 'வலது', 'right' ), + 'img_left' => array( '1', 'இடது', 'left' ), + 'img_none' => array( '1', 'ஒன்றுமில்லை', 'none' ), + 'img_center' => array( '1', 'மையம்', 'center', 'centre' ), + 'img_top' => array( '1', 'மேல்', 'top' ), + 'img_middle' => array( '1', 'மத்தியில்', 'middle' ), + 'img_bottom' => array( '1', 'கீழ்', 'bottom' ), + 'plural' => array( '0', 'பன்மை', 'PLURAL:' ), + 'special' => array( '0', 'சிறப்பு', 'special' ), + 'pagesize' => array( '1', 'பக்க_அளவு', 'PAGESIZE' ), + 'url_path' => array( '0', 'வழி', 'PATH' ), + 'url_wiki' => array( '0', 'விக்கி', 'WIKI' ), ); $linkTrail = "/^([\xE0\xAE\x80-\xE0\xAF\xBF]+)(.*)$/sDu"; @@ -72,8 +84,7 @@ $messages = array( 'tog-editsection' => '(தொகு) இணைப்பின் வழியாக பிரிவுத் தொகுப்பை முடுக்கு', 'tog-editsectiononrightclick' => 'பிரிவுத் தலைப்பின் மீது வலச் சொடுக்குவதன் மூலம் பகுதி தொகுப்பை முடுக்கு (ஜாவா நிரல்)', 'tog-showtoc' => 'உள்ளடக்க அட்டவணையைக் காண்பி
    (மூன்றுக்கு மேற்பட்ட தலைப்புகளையுடைய கட்டுரைகளுக்கு)', -'tog-rememberpassword' => 'அமர்வுகளுக்கிடையே கடவுச்சொல்லை ஞாபகத்தில் வைத்துக்கொள்', -'tog-editwidth' => 'முழுத்திரையை நிரப்புமளவுக்கு, தொகுக்குமிடத்தை விரிவுபடுத்தவும்', +'tog-rememberpassword' => 'எனது புகுபதிவு பற்றிய விவரங்களை இவ்வுலாவியில் (மிக அதிகமாக $1 {{PLURAL:$1|நாள்|நாட்கள்}}) நினைவில் வைத்திருக்கவும்.', 'tog-watchcreations' => 'நான் உருவாக்கிய பக்கங்களை எனது கவனிப்புப் பட்டியலில் சேர்க்கவும்.', 'tog-watchdefault' => 'நான் தொகுத்த பக்கங்களை, என் கவனிப்புப் பட்டியலில் சேர்', 'tog-watchmoves' => 'நான் நகர்த்திய பக்கங்களை என் கவனிப்புப் பட்டியலில் சேர்.', @@ -131,18 +142,18 @@ $messages = array( 'thu' => 'வியா', 'fri' => 'வெள்', 'sat' => 'சனி', -'january' => 'சனவரி', +'january' => 'ஜனவரி', 'february' => 'பெப்ரவரி', 'march' => 'மார்ச்', 'april' => 'ஏப்ரல்', 'may_long' => 'மே', -'june' => 'சூன்', -'july' => 'சூலை', -'august' => 'ஆகத்து', +'june' => 'ஜூன்', +'july' => 'ஜூலை', +'august' => 'ஆகஸ்ட்', 'september' => 'செப்டெம்பர்', 'october' => 'அக்டோபர்', 'november' => 'நவம்பர்', -'december' => 'திசம்பர்', +'december' => 'டிசம்பர்', 'january-gen' => 'சனவரி', 'february-gen' => 'பெப்ரவரி', 'march-gen' => 'மார்ச்', @@ -218,31 +229,21 @@ $messages = array( 'faqpage' => 'Project:அடிக்கடி கேட்கப்படும் கேள்விகள்', # Vector skin -'vector-action-addsection' => 'தலைப்பைச் சேர்', -'vector-action-delete' => 'நீக்குக', -'vector-action-move' => 'நகர்த்தவும்', -'vector-action-protect' => 'காக்கவும்', -'vector-action-undelete' => 'நீக்கத்தை நிறுத்து', -'vector-action-unprotect' => 'காப்பைநீக்கு', -'vector-namespace-category' => 'பகுப்பு', -'vector-namespace-help' => 'உதவிப் பக்கம்', -'vector-namespace-image' => 'கோப்பு', -'vector-namespace-main' => 'பக்கம்', -'vector-namespace-media' => 'ஊடகப் பக்கம்', -'vector-namespace-mediawiki' => 'தகவல்', -'vector-namespace-project' => 'திட்டத்தின் பக்கம்', -'vector-namespace-special' => 'சிறப்புப் பக்கம்', -'vector-namespace-talk' => 'உரையாடல்', -'vector-namespace-template' => 'வார்ப்புரு', -'vector-namespace-user' => 'பயனர் பக்கம்', -'vector-view-create' => 'உருவாக்கவும்', -'vector-view-edit' => 'தொகு', -'vector-view-history' => 'வரலாற்றைக் காட்டவும்', -'vector-view-view' => 'வாசிக்கவும்', -'vector-view-viewsource' => 'மூலத்தைக் காட்டவும்', -'actions' => 'செயல்கள்', -'namespaces' => 'பெயர்வெளிகள்', -'variants' => 'மாற்றுக்கள் +'vector-action-addsection' => 'தலைப்பைச் சேர்', +'vector-action-delete' => 'நீக்குக', +'vector-action-move' => 'நகர்த்தவும்', +'vector-action-protect' => 'காக்கவும்', +'vector-action-undelete' => 'நீக்கத்தை நிறுத்து', +'vector-action-unprotect' => 'காப்பைநீக்கு', +'vector-simplesearch-preference' => 'மேம்பட்ட தேடுதல் முடிவுகளைச் செயல்படுத்தவும் (Vector தோல் மட்டும்)', +'vector-view-create' => 'உருவாக்கவும்', +'vector-view-edit' => 'தொகு', +'vector-view-history' => 'வரலாற்றைக் காட்டவும்', +'vector-view-view' => 'வாசிக்கவும்', +'vector-view-viewsource' => 'மூலத்தைக் காட்டவும்', +'actions' => 'செயல்கள்', +'namespaces' => 'பெயர்வெளிகள்', +'variants' => 'மாற்றுக்கள் மாற்றுருவங்கள்', @@ -305,6 +306,8 @@ $messages = array( நீங்கள் மறுபடியும் இப்பக்கத்தை அணுக முயலும் முன் சற்றே பொறுக்கவும். $1', +'pool-queuefull' => 'பணி வரிசையில் இடம் இல்லை', +'pool-errorunknown' => 'அறியப்படாத தவறு', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} பற்றி', @@ -343,7 +346,7 @@ $1', 'editold' => 'தொகு', 'viewsourceold' => 'மூலத்தை காட்டுக', 'editlink' => 'தொகு', -'viewsourcelink' => 'மூலத்தை காண்க', +'viewsourcelink' => 'மூலத்தைக் காண்க', 'editsectionhint' => '$1 பகுதியை தொகு', 'toc' => 'பொருளடக்கம்', 'showtoc' => 'காட்டு', @@ -461,7 +464,8 @@ MySQL returned error "$3: $4".', 'yourname' => 'பயனர் பெயர்:', 'yourpassword' => 'கடவுச்சொல்:', 'yourpasswordagain' => 'கடவுச்சொல்லைத் திரும்ப தட்டச்சிடுக:', -'remembermypassword' => 'எனது கடவுச்சொல்லை அமர்வுகளிடையே நினைவில் வைத்திருக்கவும்.', +'remembermypassword' => 'எனது கடவுச்சொல்லை (கூடியது $1 {{PLURAL:$1|நாள்|நாட்கள்}}) அமர்வுகளிடையே நினைவில் வைத்திருக்கவும்.', +'securelogin-stick-https' => 'புகுபதிகைக்குப் பிறகும் HTTPS-இலேயே இருக்கவும்', 'yourdomainname' => 'உங்கள் உரிமைப்பரப்பு:', 'externaldberror' => 'வெளி உறுதிப்படுத்தலில் ஏற்பட்ட தவறு காரணமாக உங்கள் வெளி கணக்கை இற்றைப்படுத்த முடியாது.', 'login' => 'புகுபதிகை', @@ -478,6 +482,7 @@ MySQL returned error "$3: $4".', 'gotaccount' => "ஏற்கனவே பயனர் கணக்கு உள்ளதா? '''$1'''.", 'gotaccountlink' => 'புகுபதிகை', 'createaccountmail' => 'மின்னஞ்சல் மூலம்', +'createaccountreason' => 'காரணம்:', 'badretype' => 'நீங்கள் பதிந்த கடவுச்சொல் பொருத்தமாக இல்லை.', 'userexists' => 'நீர் பதிந்த பயனர் பெயர் ஏற்கெனவே பாயன்பாட்டில் உள்ளது. அருள் கூர்ந்து வேறு பயனர் பெயரைத் தெரிவுச் செய்க.', 'loginerror' => 'புகுபதிகைத் தவறு', @@ -562,8 +567,8 @@ MySQL returned error "$3: $4".', 'extlink_tip' => 'வெளியிணைப்பு (http:// முன்னிணைப்பை மறக்காதீர்)', 'headline_sample' => 'தலைப்பு', 'headline_tip' => 'இரண்டாம் படித் தலைப்பு', -'math_sample' => 'இங்கே சூத்திரத்தைப் புகுத்தவும்', -'math_tip' => 'கணிதச் சூத்திரம் (LaTeX)', +'math_sample' => 'இங்கே வாய்பாட்டை இடுக', +'math_tip' => 'கணித வாய்பாடு (LaTeX)', 'nowiki_sample' => 'விக்கி நிரலாக்கத்தால் புறக்கணிக்கப்படவேண்டிய உரையை இங்கே இடவும்', 'nowiki_tip' => 'விக்கி நிரலாக்கத்தைப் புறக்கணி', 'image_tip' => 'பொதிந்துள்ள படிமம்', @@ -583,11 +588,13 @@ MySQL returned error "$3: $4".', 'showdiff' => 'மாற்றங்களைக் காட்டு', 'anoneditwarning' => "'''எச்சரிக்கை:''' நீங்கள் புகுபதிகை செய்யவில்லை. உங்கள் ஐ.பி. முகவரி இப்பக்கத்தின் தொகுப்பு வரலாற்றில் பதிவு செய்யப்படும்.", +'anonpreviewwarning' => 'நீங்கள் புகுபதிகை செய்யவில்லை. இந்த பக்கத்தை சேமித்தால் உஙகள் ஐ.பி. முகவரி இதன் வரலாற்றுப் பக்கத்தில் பதிவாகும்.', 'missingsummary' => "'''நினைவூட்டல்:''' நீர் தொகுப்புச் சுருக்கமொன்றைக் கொடுக்கவில்லை. இன்னொரு முறை பக்கத்தை சேமி என்பதை அழுத்தினால் உங்கள் தொகுப்பு சுருக்கமெதுவுமில்லாமல் சேமிக்கப்படும்.", 'missingcommenttext' => 'கீழே சுருக்கமொன்றக் குறிப்பிடவும்.', -'missingcommentheader' => "'''நினைவூட்டல்:''' நீர் உட்பொருள்/தலைப்பு சுருக்கமொன்றைக் கொடுக்கவில்லை. -இன்னொரு முறை பக்கத்தை சேமி என்பதை அழுத்தினால் உங்கள் சுருக்கமெதுவுமில்லாமல் சேமிக்கப்படும்.", +'missingcommentheader' => "'''நினைவூட்டல்:''' தாங்கள் தொகுத்தற்கான சுருக்கமான உரையை கொடுக்கவில்லை. + +இன்னொருமுறை 'சேமி' என்பதனை அழுத்தினால் எந்தவித சுருக்கமான உரையின்றி சேமிக்கப்படும்.", 'summary-preview' => 'சுருக்க முன்தோற்றம்:', 'subject-preview' => 'உட்பொருள்/தலைப்பு முன்தோற்றம்:', 'blockedtitle' => 'பயனர் தடுக்கப்பட்டுள்ளார்', @@ -651,7 +658,7 @@ $1 பயனரையோ அல்லது வேறு [[{{MediaWiki:Grouppage 'usercsspreview' => "'''உங்களது பயனர் சி.எஸ்.எஸ். இன் முன் தோற்றத்தை மட்டுமே காண்கிறீர்கள் என்பதை நினைவில் கொள்ளவும்.''' '''இது இன்னமும் சேமிக்கப்படவில்லை!'''", 'userjspreview' => "'''நீர் உமது ஜாவா நிரலை சோதிக்கிறீர் அல்லது முன் தோற்றத்தைப் பார்க்கிறீர் என்பதை நினைவக்கவும், இன்னமும் சேமிக்கப்படவில்லை!'''", -'userinvalidcssjstitle' => "'''எச்சரிக்கை:''' \"\$1\" என்றப் பெயரில் தோல்லொறுக் கிடையாது. சி.எஸ்.எஸ் மற்றும் ஜெ.எஸ். பக்கங்கள் ஆங்கில கீழ் வரிசைப் பெயர்களைக் கொண்டிருக்க வேண்டும் என்பதைக் கவனிக்கவும். எ+கா: {{ns:user}}:Foo/monobook.css என்பது சரியான வடிவம் {{ns:user}}:Foo/Monobook.css என்பது பிழையான வடிவம்.", +'userinvalidcssjstitle' => "'''எச்சரிக்கை:''' \"\$1\" என்றப் பெயரில் தோல்லொறுக் கிடையாது. சி.எஸ்.எஸ் மற்றும் ஜெ.எஸ். பக்கங்கள் ஆங்கில கீழ் வரிசைப் பெயர்களைக் கொண்டிருக்க வேண்டும் என்பதைக் கவனிக்கவும். எ+கா: {{ns:user}}:Foo/vector.css என்பது சரியான வடிவம் {{ns:user}}:Foo/Vector.css என்பது பிழையான வடிவம்.", 'updated' => '(இற்றைப்படுத்தப்பட்டது)', 'note' => "'''குறிப்பு:'''", 'previewnote' => "'''இது ஒரு முன்தோற்றம் மட்டுமே, உங்கள் மாற்றங்கள் இன்னும் சேமிக்கப்படவில்லை!'''", @@ -682,7 +689,6 @@ $1 பயனரையோ அல்லது வேறு [[{{MediaWiki:Grouppage '''பதிப்புரிமையுள்ள ஆக்கங்களை அனுமதியின்றி சமர்ப்பிக்க வேண்டாம்!'''", 'copyrightwarning2' => "{{SITENAME}} தளத்துக்கான உமது பங்களிப்புக்கள் அனைத்தும் வேறு பயனர்களால் தொகுக்கப் படவோ, மாற்றங்கள் செய்யப்படவோ அல்லது நீக்கப்படவோ கூடும். உமது பங்களிப்புகள் கடுமையாகத் தொகுக்கப்படுவதை நீர் விரும்பாவிடில் இங்கே சமர்ப்பிக்காதீர்.
    நீர் இதை எழுதியதாகவோ, அல்லது வேறு பொதுக் களம் அல்லது அது போன்ற விடுதலையளிக்கும் மூலங்களிலிருந்து பிரதி பண்ணியிருப்பதாகவோ உறுதி கூறுகிறீர்.(மேலதிக தகவல்களுக்கு $1).'''பதிப்புரிமையுள்ள ஆக்கங்களை அனுமதியின்றி சமர்ப்பிக்காதீர்!'''", -'longpagewarning' => "'''எச்சரிக்கை: இந்தப் பக்கம் $1 கிலோபைட்ஸ் நீளமானது; 32 kb யை அண்மிக்கும் அல்லது அதிலும் கூடிய அளவுள்ள பக்கங்களைத் தொகுப்பதில் சில உலாவிகளுக்கு பிரச்சினை உண்டு. தயவுசெய்து பக்கங்களைச் சிறிய பகுதிகளாகப் பிரிப்பது பற்றிக் கவனத்தில் எடுக்கவும்.'''", 'longpageerror' => "'''தவறு: நீங்கள் இட்ட உரை $1 கிலோபைட்டுகள் நீளமானது, $2 கிலோபைட்டிலும் கூடிய அளவுள்ள பக்கங்கள் இங்கே அனுமதிக்கப்படுவதில்லை. உங்கள் உரையை சேமிக்க முடியாது.'''", 'readonlywarning' => "'''எச்சரிக்கை: பராமரிப்புக்காகத் தரவுவழங்கன் பூட்டப்பட்டுள்ளது, எனவே உங்கள் தொகுப்புக்களை இப்பொழுது சேமிக்க முடியாது. உங்கள் உரையை இன்னொரு உரைக் கோப்பில் வெட்டி ஒட்டி சேமித்துவைத்துப் பின்பு உபயோகிக்கலாம்.''' @@ -826,6 +832,8 @@ $1 பயனரையோ அல்லது வேறு [[{{MediaWiki:Grouppage 'revdelete-success' => "'''திருத்தங்களை பார்வையிடும் வசதியை வெற்றிகரமாக நிகழ்நிலைப்படுத்தப்பட்டுள்ளது.'''", 'logdelete-success' => "'''நிகழ்வு பார்வையியலுமை வெற்றிகரமாக அமைக்கப்பட்டது.'''", 'revdel-restore' => 'பார்வையியலுமையை மாற்றுக', +'revdel-restore-deleted' => 'நீக்கப்பட்ட மாற்றங்கள்', +'revdel-restore-visible' => 'வெளிப்படையாகத்தெரியும் மாற்றங்கள்', 'pagehist' => 'பக்க வரலாறு', 'deletedhist' => 'நீக்கப்பட்ட வரலாறு', 'revdelete-content' => 'உள்ளடக்கத்தை', @@ -882,11 +890,12 @@ $1 பயனரையோ அல்லது வேறு [[{{MediaWiki:Grouppage # Diffs 'history-title' => '"$1" பக்கத்தின் திருத்த வரலாறு', 'difference' => '(திருத்தங்களுக்கிடையான வேறுபாடு)', +'difference-multipage' => 'பக்கங்களுக்கு இடையேயான வேறுபாடு', 'lineno' => 'வரிசை $1:', 'compareselectedversions' => 'தெரிவு செய்யப்பட்ட பதிப்புக்களை ஒப்பிடவும்', 'showhideselectedversions' => 'தெரிவு செய்யப்பட்ட மாற்றங்களை காட்டு/மறை', 'editundo' => 'மீளமை', -'diff-multi' => '({{PLURAL:$1|ஒரு இடைப்பட்ட திருத்தம்|$1 இடைப்பட்ட திருத்தங்கள்}} காட்டப்படவில்லை.)', +'diff-multi' => '({{PLURAL:$1|ஒரு இடைப்பட்ட திருத்தம்|$1 இடைப்பட்ட திருத்தங்கள்}} {{PLURAL:$2|பயனர்|$2 பயனர்கள்}} செய்தவைகளை காட்டப்படவில்லை.)', # Search results 'searchresults' => 'தேடல் முடிவுகள்', @@ -977,9 +986,9 @@ $1 பயனரையோ அல்லது வேறு [[{{MediaWiki:Grouppage 'prefs-rc' => 'அண்மைய மாற்றங்கள்', 'prefs-watchlist' => 'கவனிப்புப் பட்டியல்', 'prefs-watchlist-days' => 'கவனிப்புப் பட்டியலில் காட்டவேண்டிய நாட்கள்:', -'prefs-watchlist-days-max' => '(கூடியது 7 நாட்கள்)', +'prefs-watchlist-days-max' => '(அதிகபட்சம் 7 நாட்கள்)', 'prefs-watchlist-edits' => 'விரிவாக்கப்பட்ட கவனிப்புப் பட்டியலில் காட்டவேண்டிய தொகுப்புகளின் எண்ணிக்கை:', -'prefs-watchlist-edits-max' => '(மிகக்கூடிய எண்: 1000)', +'prefs-watchlist-edits-max' => '(அதிகபட்ச எண்: 1000)', 'prefs-watchlist-token' => 'கவனிப்பு பட்டியலின் அடையாளம்:', 'prefs-misc' => 'பலதரப்பட்டவை', 'prefs-resetpass' => 'கடவுச்சொல்லை மாற்றுக', @@ -997,6 +1006,7 @@ $1 பயனரையோ அல்லது வேறு [[{{MediaWiki:Grouppage 'contextlines' => 'அடித்தலொன்றுக்குக் காட்டப்பட வேண்டிய வரிகள்:', 'contextchars' => 'ஒரு வரிக்கான இடம்சார் எழுத்துக்கள்', 'stub-threshold' => 'stub link சீர்படுத்தலுக்கான எல்லை (பைட்டுகள்):', +'stub-threshold-disabled' => 'செயலிழக்கம் செய்யப்பட்டுள்ளது', 'recentchangesdays' => 'அண்மைய மாற்றங்களில் காட்ட வேண்டிய நாட்களின் எண்ணிக்கை:', 'recentchangesdays-max' => 'மிக அதிகமாக $1 {{PLURAL:$1|நாள்|நாட்கள்}}', 'recentchangescount' => 'மொத்த தொகுப்புக்களின் எண்ணிக்கையை தானகவே காட்ட:', @@ -1058,7 +1068,9 @@ $1 பயனரையோ அல்லது வேறு [[{{MediaWiki:Grouppage 'prefs-advancedrendering' => 'மேம்பட்ட விருப்பத்தேர்வுகள்', 'prefs-advancedsearchoptions' => 'மேம்பட்ட விருப்பத்தேர்வுகள்', 'prefs-advancedwatchlist' => 'மேம்பட்ட விருப்பத்தேர்வுகள்', -'prefs-display' => 'விருப்பத்தேர்வுகளைக் காட்டு', +'prefs-displayrc' => 'விருப்பத்தேர்வுகளைக் காட்டு', +'prefs-displaysearchoptions' => 'விருப்பத்தேர்வுகளைக் காட்டு', +'prefs-displaywatchlist' => 'விருப்பத்தேர்வுகளைக் காட்டு', 'prefs-diffs' => 'வித்தியாசங்கள்', # User rights @@ -1190,11 +1202,8 @@ $1 பயனரையோ அல்லது வேறு [[{{MediaWiki:Grouppage 'recentchanges-legend' => 'அண்மைய மாற்றங்களின் தேர்வுகள்', 'recentchangestext' => 'இந்த விக்கிக்கு மிக அண்மையில் செய்யப்பட்ட மாற்றங்களை, இந்தப் பக்கத்தில் காணலாம்.', 'recentchanges-feed-description' => 'இவ்வுள்ளீட்டில் இந்த விக்கியில் செய்யப்பட்ட் மிக அண்மைய மாற்றங்கள் கவனிக்கப்படுகின்றன.', -'recentchanges-legend-newpage' => '$1 - புதிய பக்கம்', 'recentchanges-label-newpage' => 'இந்தத் தொகுப்பு ஒரு புதிய பக்கத்தை உருவாக்கியுள்ளது', -'recentchanges-legend-minor' => '$1 - சிறிய தொகுப்பு', 'recentchanges-label-minor' => 'இது ஒரு சிறு தொகுப்பு', -'recentchanges-legend-bot' => '$1 - தானியங்கியின் தொகுப்பு', 'recentchanges-label-bot' => 'இந்த தொகுப்பானது ஒரு தானியங்கியால் செய்யப்பட்டதாகும்', 'recentchanges-label-unpatrolled' => 'இந்த தொகுப்பு இன்னும் ரோந்திடப்படவில்லை', 'rcnote' => "கீழே காணப்படுவது $4 ஆம் தேதி $5 மணிக்கு் உள்ளபடி கடைசி {{PLURAL:$2|24 மணிகளில்|'''$2''' நாட்களில்}} செய்யப்பட்ட {{PLURAL:$1|'''ஒரு''' மாற்றம்|'''$1''' கடைசி மாற்றங்கள்}} ஆகும்.", @@ -1271,6 +1280,16 @@ $1 பயனரையோ அல்லது வேறு [[{{MediaWiki:Grouppage 'filetype-banned-type' => "'''\".\$1\"''' அனுமதிக்கப்படாத கோப்பு வகையாகும். அனுமதிக்கப்பட்ட {{PLURAL:\$3|கோப்புவகை|கோப்புவகைகள்}} \$2 என்பது(வை) ஆகும்.", 'filetype-missing' => 'இந்தக் கோப்பு நீட்சையைக் (எ+கா ".jpg") கொண்டிருக்கவில்லை.', +'empty-file' => 'தாங்கள் சமர்ப்பித்த கோப்பில் ஒன்றுமில்லை.', +'file-too-large' => 'தாங்கள் சமர்ப்பித்த கோப்பு மிகப்பெரியது.', +'filename-tooshort' => 'தாங்கள் சமர்ப்பித்த கோப்பு மிகவும் சிறியது.', +'filetype-banned' => 'இந்த வகையான கோப்பு தடை செய்யப்பட்டுள்ளது.', +'verification-error' => 'இந்த கோப்பு, கோப்பின் சரிபார்ப்பிற்கான சோதனையில் வெற்றியடையவில்லை.', +'illegal-filename' => 'கோப்பின் பெயரை கொடுக்கமுடியாது.', +'overwrite' => 'முன்பே உள்ள கோப்பின் மேல் எழுத அனுமதியில்லை.', +'unknown-error' => 'இனம் தெரியாத ஒரு தவறு நிகழ்ந்துவிட்டது', +'tmp-create-error' => 'தற்காலிக கோப்பினை உருவாக்க முடியவில்லை.', +'tmp-write-error' => 'தற்காலிக கோப்பினை எழுதும் போது ஏற்பட்டத்தவறு.', 'large-file' => 'பரிந்துரைகப்படும் கோப்புகளின் உச்ச அளவு $1; இந்தக் கோப்பின் அளவு $2.', 'largefileserver' => 'வழங்கனால் ஏற்கக் கூடிய உச்ச அளவு கோப்பைவிட இக்கோப்பு பெரியதாகும்.', 'emptyfile' => 'நீங்கள் பதிவேற்றிய கோப்பு வெற்றாக உள்ளது. இது கோப்பின் பெயரை பிழையாக தட்டச்சிட்டத்தக காரணமாக ஏற்பட்டிருக்கலாம். அருள் கூர்ந்து இக்கோப்பை நீங்கள் பதிவேற்ற வேண்டுமாக என்பதைக் கருதவும்.', @@ -1294,13 +1313,13 @@ $1 பயனரையோ அல்லது வேறு [[{{MediaWiki:Grouppage [[File:$1|thumb|center|$1]]', 'fileexists-shared-forbidden' => 'இப்பெயரைக் கொண்ட கோப்பு ஏற்கனவே பொதுக் கோப்பகத்தில் உள்ளது; நீங்கள் தவறாது இக்கோப்பைப் பதிவேற்ற வேண்டுமென்றால் அருள் கூர்ந்து வேறு பெயரின் கீழ் பதிவேற்றவும்.[[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'கீழ்காணும் கோப்புக்கள் இந்த கோப்பை போலவே இருக்கின்றன. {{PLURAL:$1|கோப்பு|கோப்புக்கள்}}:', -'successfulupload' => 'வெற்றிகரமான பதிவேற்றம்', 'uploadwarning' => 'பதிவேற்றல் எச்சரிக்கை', 'uploadwarning-text' => 'கீழுள்ள கோப்புச் சுருக்கத்தை மாற்றி விட்டு மீண்டும் சமர்ப்பியுங்கள்', 'savefile' => 'கோப்பைச் சேமி', 'uploadedimage' => '"[[$1]]" பதிவேற்றப்பட்டது', 'overwroteimage' => '"[[$1]]" கோப்பின் புதிய பதிப்பை பதிவேற்று', 'uploaddisabled' => 'பதிவேற்றம் செயலிழக்கச் செய்யப்பட்டுள்ளது', +'uploadfromurl-queued' => 'தங்களுடைய பதிவேற்றம் வரிசையில் உள்ளது.', 'uploaddisabledtext' => 'கோப்பு பதிவேற்றங்கள் செயலிழக்கச் செய்யப்பட்டுள்ளன.', 'uploadscripted' => 'இந்தக் கோப்பு உலாவியால் பிழையாக விளங்கிக் கொள்ளக்கூடிய எச்.டி.எம்.எல். அல்லது வேறு நிரல்களைக் கொண்டுள்ளது.', 'uploadvirus' => 'கோப்பு நச்சுநிரலைக் (வைரஸ்) கொண்டுள்ளது! விபரங்கள்:$1', @@ -1318,6 +1337,9 @@ $1 பயனரையோ அல்லது வேறு [[{{MediaWiki:Grouppage இக்கோப்பை பதிவேற்றுவது சரியா என்பதைக் கருதவும். உங்கள் வசதிக்காக இக்கோப்பிற்காக நீக்கல் பதிவு தரப்பட்டுள்ளது:", 'filename-bad-prefix' => "நீங்கள் பதிவேற்ற எத்தனிக்கும் கோப்பின் பெயர் '''\"\$1\"''' என்பதுடன் தொடங்குகிறது, பொதுவாக இது எண்மருவி கமெராக்கலால் தானியக்கமாக வழங்கப்புடும் பெயராகும். அருள் கூர்ந்து கோப்பிற்கு விளக்கமான பெயரொன்றைக் கொடுக்கவும்.", +'upload-success-subj' => 'வெற்றிகரமான பதிவேற்றம்', +'upload-failure-subj' => 'பதிவேற்றத்தில் ஏற்பட்டத் தொல்லை', +'upload-warning-subj' => 'பதிவேற்றல் எச்சரிக்கை', 'upload-proto-error' => 'பிழையான நெறி', 'upload-proto-error-text' => 'தொலைவுப் பதிவேற்றத்துக்கு யு.ஆர்.எல். http:// அல்லது ftp:// என்ற முன்னொட்டுடன் தொடங்கவேண்டும்.', @@ -1356,13 +1378,13 @@ $1 பயனரையோ அல்லது வேறு [[{{MediaWiki:Grouppage # File description page 'file-anchor-link' => 'கோப்பு', 'filehist' => 'கோப்பு வரலாறு', -'filehist-help' => 'குறித்த நேரத்தில் இருந்த படிமத்தைப் பார்க்க அந்நேரத்தின் மீது சொடுகவும்.', +'filehist-help' => 'குறித்த நேரத்தில் இருந்த படிமத்தைப் பார்க்க அந்நேரத்தின் மீது சொடுக்கவும்.', 'filehist-deleteall' => 'சகலதையும் நீக்கு', 'filehist-deleteone' => 'நீக்குக', 'filehist-revert' => 'முன்நிலையாக்கு', 'filehist-current' => 'தற்போதைய', 'filehist-datetime' => 'நாள்/நேரம்', -'filehist-thumb' => 'படத்தின் கட்டைவிரல் அளவு தோற்றம்', +'filehist-thumb' => 'நகம் அளவு சிறுபடம்', 'filehist-thumbtext' => '$1 -ல் இருந்த பதிப்பின் சிறு தோற்றம்', 'filehist-nothumb' => 'சிறுதோற்றம் இல்லை', 'filehist-user' => 'பயனர்', @@ -1491,7 +1513,7 @@ $1 பயனரையோ அல்லது வேறு [[{{MediaWiki:Grouppage 'uncategorizedtemplates' => 'வகைப்படுத்தப்படாத வார்ப்புருக்கள்', 'unusedcategories' => 'பயன்படுத்தப்படாத பகுப்புகள்', 'unusedimages' => 'பயன்படுத்தப்படாத படிமங்கள்', -'popularpages' => 'பிரபலமான பக்கங்கள்', +'popularpages' => 'அடிக்கடி பார்க்கப்படும் பக்கங்கள்', 'wantedcategories' => 'வேண்டிய பகுப்புகள்', 'wantedpages' => 'வேண்டிய பக்கங்கள்', 'wantedfiles' => 'வேண்டிய கோப்புகள்', @@ -1640,7 +1662,6 @@ $1 பயனரையோ அல்லது வேறு [[{{MediaWiki:Grouppage # Watchlist 'watchlist' => 'என் கவனிப்புப் பட்டியல்', 'mywatchlist' => 'என் கவனிப்புப் பட்டியல்', -'watchlistfor' => "('''$1''' பயனருக்கான)", 'nowatchlist' => 'உங்களுடைய கவனிப்புப் பட்டியலில் ஒரு விடயமும் இல்லை.', 'watchlistanontext' => 'உமது கவனிப்புப் பட்டியலை பார்க அல்லது தொகுக்க அருள் கூர்ந்து $1.', 'watchnologin' => 'புகுபதிகை செய்யப்படவில்லை.', @@ -1752,7 +1773,9 @@ $NEWPAGE 'editcomment' => "தொகுப்பிற்கான சிறுகுறிப்புக்கள் இவை:\"''\$1''\".", 'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|பேச்சு]]) செய்தத் தொகுப்புகள் நீக்கப்பட்டு [[User:$1|$1]] இன் பதிப்புக்கு முன்நிலையாக்கப்பட்டது', 'rollback-success' => '$1 செய்தத் தொகுப்புகள் நீக்கப்பட்டு $2 இன் பதிப்புக்கு முன்நிலையாக்கப்பட்டது.', -'sessionfailure' => 'உங்கள் புகுபதிகை அமர்வில் பிரச்சினை உள்ளது போல தோன்றுகிறது. செல்வழி திருட்டுக் கெதிரான முன்னெச்செரிக்கையாக இந்த நடவடிக்கை இரத்துச் செய்யப்பட்டது. உங்கள் உலாவியின் பின் செல்வதற்கான பொத்தானைச் செருகி மீண்டும் முயலவும்.', + +# Edit tokens +'sessionfailure' => 'உங்கள் புகுபதிகை அமர்வில் பிரச்சினை உள்ளது போல தோன்றுகிறது. செல்வழி திருட்டுக் கெதிரான முன்னெச்செரிக்கையாக இந்த நடவடிக்கை இரத்துச் செய்யப்பட்டது. உங்கள் உலாவியின் பின் செல்வதற்கான பொத்தானைச் செருகி மீண்டும் முயலவும்.', # Protect 'protectlogpage' => 'காப்புப் பதிகை', @@ -1878,7 +1901,7 @@ $1', 'sp-contributions-submit' => 'தேடுக', # What links here -'whatlinkshere' => 'இப் பக்கத்தை இணைத்தவை', +'whatlinkshere' => 'இப்பக்கத்தை இணைத்தவை', 'whatlinkshere-title' => '"$1" பக்கத்துக்கு இணைக்கப்பட்டவை', 'whatlinkshere-page' => 'பக்கம்:', 'linkshere' => "'''[[:$1]]''' பின்வரும் பக்கங்களில் இப்பக்கம் இணைக்கப்பட்டுள்ளது:", @@ -1930,7 +1953,6 @@ $1', 'ipb-edit-dropdown' => 'தடை காரணங்கள் தொகு', 'ipb-unblock-addr' => '$1 இன் தடையை நீக்கு', 'ipb-unblock' => 'ஐ.பி. அல்லது பயனருக்கான தடையை நீக்கு', -'ipb-blocklist-addr' => '$1 இற்கு தற்போதுள்ள தடுப்புகள்', 'ipb-blocklist' => 'தற்போதுள்ள தடுப்புகளைப் பார்', 'unblockip' => 'பயனர் தடையை நீக்கு', 'unblockiptext' => 'முன்னர் தடுக்கப்பட்ட ஐ.பி. முகவரி அல்லது பயனர்பெயரின் எழுத்து அணுக்கத்தை மீழ்விப்பதற்கு கீழேயுள்ள படிவத்தை பயன்படுத்தவும்.', @@ -1971,7 +1993,7 @@ $1', 'ipb_blocked_as_range' => 'தவறு:இந்த ஐ.பி. $1 நேரடியாக தடைச் செய்யப்படவில்லை எனவே தடையை நீக்க முடியாது. இது $2 என்ற ஐ.பி. வீச்சு தடைச் செய்யப்பட்டதால் தடைச் செய்யப்பட்டுள்ளது இவ்வீச்சிற்கான தடையை நீக்க முடியும்.', 'ip_range_invalid' => 'செல்லுபடியற்ற ஐ.பி. வீச்சு', 'blockme' => 'என்னை தடைச் செய்', -'proxyblocker' => 'புரொக்சி தடுப்பி', +'proxyblocker' => 'மறைவணுக்கம் (புரொக்சி) தடுப்பி', 'proxyblocker-disabled' => 'இந்தச் செயல் செயலிழக்கச் முடக்கப்பட்டுள்ளது.', 'proxyblocksuccess' => 'வெற்றி.', @@ -2111,7 +2133,7 @@ $1', 'import-nonewrevisions' => 'எல்லாத் திருத்தங்களும் முன்னர் இறக்கப்பட்டுள்ளன.', 'xml-error-string' => '$1 நிரை $2, நிரல் $3 (பைட் $4): $5', 'import-upload' => 'XML தரவை பதிவேற்று', -'import-token-mismatch' => 'உங்கள் அமர்வின் தரவுகள் அழிந்துவிட்டன. தயவுசெய்து மீண்டும் முயற்சிக்கவும்.', +'import-token-mismatch' => 'உங்கள் அமர்வின் தரவுகள் அழிந்துவிட்டன. அருள்கூர்ந்து மீண்டும் முயல்க.', 'import-invalid-interwiki' => 'குறிப்பிட்ட விக்கியில் இருந்து இறக்குமதி செய்யமுடியாது .', # Import log @@ -2133,7 +2155,7 @@ $1', 'tooltip-pt-anonlogin' => 'நீங்கள் புகுபதிகைச் செய்ய ஊக்குவிக்கப்படுகிறீர்கள் எனினும் இது கட்டாயமல்ல.', 'tooltip-pt-logout' => 'விடுபதிகை', 'tooltip-ca-talk' => 'உள்ளடக்கப் பக்கம் தொடர்பான உரையாடல் பக்கம்', -'tooltip-ca-edit' => 'நீங்கள் இப்பக்கத்தை தொகுக்க முடியும். "முன்தோற்றம் காட்டு" பொத்தானைப் பயன்படுத்திய பின்னர் உங்கள் மாற்றங்களை சேமிக்கவும்.', +'tooltip-ca-edit' => 'நீங்கள் இப்பக்கத்தைத் தொகுக்க முடியும். "முன்தோற்றம் காட்டு" பொத்தானைப் பயன்படுத்திய பின்னர் உங்கள் மாற்றங்களை சேமிக்கவும்.', 'tooltip-ca-addsection' => 'புதிய பகுதியைத் தொடங்கு', 'tooltip-ca-viewsource' => 'இப்பக்கம் காக்கப்பட்டுள்ளது. நீங்கள் இதன் மூலத்தைப் பார்க்கலாம்.', 'tooltip-ca-history' => 'இப்பக்கத்தின் பழைய பதிப்புகள்.', @@ -2146,7 +2168,7 @@ $1', 'tooltip-search' => '{{SITENAME}}-இல் தேடுக', 'tooltip-search-go' => 'இப்பெயரைக் கொண்டப் பக்கம் இருப்பின் அதற்கு நேரடியாகச் செல்க', 'tooltip-search-fulltext' => 'இச்சொற்களைக் கொண்டப் பக்கங்களைத் தேடுக', -'tooltip-p-logo' => 'முகப்புப் பக்கம் செல்', +'tooltip-p-logo' => 'முதற் பக்கம்', 'tooltip-n-mainpage' => 'முதற் பக்கத்துக்குச் செல்லவும்', 'tooltip-n-mainpage-description' => 'முதற்பக்கத்துக்குச் செல்க', 'tooltip-n-portal' => 'திட்டம் பற்றி தெரிந்துக் கொள்ள, நீங்கள் என்ன செய்ய முடியும், தேவையானவற்றை எங்கு தேட என்பனவற்றை அறிய', @@ -2167,7 +2189,7 @@ $1', 'tooltip-ca-nstab-main' => 'உள்ளடக்கப் பக்கத்தைப் பார்', 'tooltip-ca-nstab-user' => 'பயனர் பக்கத்தைப் பார்', 'tooltip-ca-nstab-media' => 'ஊடகக் கோப்பைப் பார்', -'tooltip-ca-nstab-special' => 'இது ஒரு சிறப்புப் பக்கமாகும், இப்பக்கத்தை நீங்கள் நேரடியாக தொகுக்க முடியாது', +'tooltip-ca-nstab-special' => 'இது ஒரு சிறப்புப் பக்கமாகும், இப்பக்கத்தை நீங்கள் நேரடியாகத் தொகுக்க முடியாது', 'tooltip-ca-nstab-project' => 'திட்டப்பக்கத்தைப் பார்', 'tooltip-ca-nstab-image' => 'கோப்புப் பக்கத்தைப் பார்', 'tooltip-ca-nstab-mediawiki' => 'முறைமைசார் தகவல்களைப் பார்', @@ -2183,7 +2205,7 @@ $1', 'tooltip-recreate' => 'ஏற்கனவே நீக்கப்பட்டிருந்தாலும் இப்பக்கத்தை மீண்டும் உருவாக்கு', 'tooltip-upload' => 'பதிவேற்றத்தை தொடங்கு', 'tooltip-rollback' => '"முன்பிருந்த நிலைக்குக் கொண்டுவருதல்" என்பது தொகுப்புக்கள் அனைத்தையும் பழையபடி இப்பக்கத்தில் கடைசி பயனர் தொகுத்த நிலைக்கு ஒரே ஒரு சொடுக்கில் கொண்டுவரும்.', -'tooltip-undo' => '"பின்வாங்கு" எனபது முனபு செய்த தொகுப்புக்களை இல்லாது செய்கிறது. மேலும் தாங்கள் செய்த தொகுப்பினை முன்தோற்ற நிலைக்கு கொண்டுவந்து காட்டும். அது தங்களுக்கு சிறுகுறிப்பு பகுதியில் அதற்கான காரணத்தை கூற அனுமதிக்கிறது.', +'tooltip-undo' => '"பின்வாங்கு" என்பது முன்பு செய்த தொகுப்புக்களை இல்லாது செய்கிறது. மேலும் தாங்கள் செய்த தொகுப்பினை முன்தோற்ற நிலைக்கு கொண்டுவந்து காட்டும். அது தங்களுக்குச் சிறுகுறிப்புப் பகுதியில் அதற்கான காரணத்தைக் கூற அனுமதிக்கிறது.', # Metadata 'notacceptable' => 'உங்களது சேவையாளர் வாசிக்க கூடிய விதத்தில் இந்த விக்கியால தரவுகளை வழங்க முடியாது.', @@ -2219,16 +2241,16 @@ $1', 'skinname-cologneblue' => 'கொலோன் (Cologne) நீலம் Blue', # Math options -'mw_math_png' => 'எப்போதும் PNG ஆக மாற்று', -'mw_math_simple' => 'சிக்கலற்றதாயின் HTML அல்லது PNG', -'mw_math_html' => 'கூடுமானால் HTML அல்லது PNG', +'mw_math_png' => 'எப்போதும் பி.என்.ஞ்சி (PNG) ஆக மாற்று', +'mw_math_simple' => 'சிக்கலற்றதாயின் எச்.டி.எம்.எல் (HTML), இல்லாவிடில் பி.என்.ஞ்சி (PNG)', +'mw_math_html' => 'கூடுமானால் எச்.டி.எம்.எல் (HTML), இல்லாவிடில் பி.என்.ஞ்சி (PNG)', 'mw_math_source' => 'TeX ஆக விட்டு வை (உரைசார் உலாவிகளுக்கு)', 'mw_math_modern' => 'புதிய உலாவிகளுக்குப் பரிந்துரைக்கப்படுவது', 'mw_math_mathml' => 'கூடுமாயின் MathML (சோதனை)', # Math errors 'math_failure' => 'பாகுபடுத்தல் தோல்வி', -'math_unknown_error' => 'அறியப்படாத தவறு', +'math_unknown_error' => 'அறியாத ஏதோவொரு பிழை', 'math_unknown_function' => 'அறியப்படாத செயற்பாடு', 'math_lexing_error' => 'தொகுத்தல் (லெக்சிங்) தவறு', 'math_syntax_error' => 'தொடரமைப்புத் தவறு', @@ -2272,10 +2294,10 @@ $1', 'imagemaxsize' => "படிமங்களின் உச்ச அளவு:
    ''(கோப்புக்களின் விவர பக்கங்களுக்கு)''", 'thumbsize' => 'சிறு முன்தோற்றத்தின் பரிமாணம்:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|பக்கம்|பக்கங்கள்}}', -'file-info' => '(கோப்பின் அளவு: $1, MIME வகை: $2)', -'file-info-size' => '($1 × $2 பிக்சல், கோப்பின் அளவு: $3, MIME வகை: $4)', +'file-info' => 'கோப்பின் அளவு: $1, MIME வகை: $2', +'file-info-size' => '$1 × $2 படவணுக்கள், கோப்பின் அளவு: $3, MIME வகை: $4', 'file-nohires' => 'இதைவிட அளவில் பெரிய படிமம் இல்லை.', -'svg-long-desc' => '(SVG கோப்பு, பெயரளவில் $1 × $2 பிக்சல்கள், கோப்பு அளவு: $3)', +'svg-long-desc' => 'SVG கோப்பு, பெயரளவில் $1 × $2 பிக்சல்கள், கோப்பு அளவு: $3', 'show-big-image' => 'முழு அளவிலான படிமம்', 'show-big-image-thumb' => 'இந்த முன்தோற்றத்தின் பரிமாணம்: $1 × $2 பிக்சல்கள்', @@ -2315,7 +2337,7 @@ $1', 'exif-imagewidth' => 'அகலம்', 'exif-imagelength' => 'உயரம்', 'exif-compression' => 'சுருக்கத் திட்டம்', -'exif-photometricinterpretation' => 'பிக்சல் பொதிவு', +'exif-photometricinterpretation' => 'படவணுக்கள் (பிக்சல்) அமைப்புருவாக்கம்', 'exif-orientation' => 'திசை', 'exif-samplesperpixel' => 'அங்கங்களின் எண்ணிக்கை', 'exif-planarconfiguration' => 'தரவு அமைவு', @@ -2325,7 +2347,7 @@ $1', 'exif-stripoffsets' => 'படிமத் தரவு அமைவிடம்', 'exif-rowsperstrip' => 'ஒரு பட்டையில் உள்ள நிரைகளின் எண்ணிக்கை', 'exif-stripbytecounts' => 'சுருக்கப்பட்ட பட்டியில் உள்ள பைட்டுகள்', -'exif-jpeginterchangeformatlength' => 'JPEG தரவுகளின் பைட் அளவு', +'exif-jpeginterchangeformatlength' => 'சே.பி.இ.சி (JPEG) தரவுகளின் பைட் அளவு', 'exif-transferfunction' => 'இடமாற்ற செயல்முறை', 'exif-datetime' => 'கோப்பு மாற்ற நாள் நேரம்', 'exif-imagedescription' => 'படிம தலைப்பு', @@ -2334,8 +2356,8 @@ $1', 'exif-software' => 'பயன்படுத்தப்பட்ட மென்பொருள்', 'exif-artist' => 'ஆக்கர்', 'exif-copyright' => 'பதிப்புரிமையாளர்', -'exif-exifversion' => 'எக்ஃசிஃப் பதிப்பு', -'exif-flashpixversion' => 'ஆதரவுள்ள பிளாஷொபிக்ஸ் பதிப்பு', +'exif-exifversion' => 'எக்ஃசிஃப் (Exif) பதிப்பு', +'exif-flashpixversion' => 'பயன்வழக்கிலுள்ள பிளாழ்சுபிக்ஃசு (Flashpix) பதிப்பு', 'exif-colorspace' => 'நிற வெளி', 'exif-componentsconfiguration' => 'ஒவ்வெரு அங்கத்தினதும் பொருள்', 'exif-compressedbitsperpixel' => 'படிம சுறுக்க முறை', @@ -2361,7 +2383,7 @@ $1', 'exif-exposurebiasvalue' => 'மறைநீக்கக் கோடல்', 'exif-subjectdistance' => 'கருப்பொருளின் தூரம்', 'exif-lightsource' => 'ஒளி மூலம்', -'exif-flash' => 'திடீர் ஒளி', +'exif-flash' => 'திடீர் ஒளிபாய்ச்சி', 'exif-focallength' => 'வில்லைக் குவியம் (குவியத்தொலைவு)', 'exif-subjectarea' => 'பொருள் பகுதி', 'exif-flashenergy' => 'திடீர் ஒளி வலு', @@ -2369,7 +2391,7 @@ $1', 'exif-focalplaneyresolution' => 'Y குவியத் தளத்தில் நுணுக்கம்', 'exif-focalplaneresolutionunit' => 'குவியத் தள நுணுக்கத்தின் அலகு', 'exif-subjectlocation' => 'பொருளின் இடம்', -'exif-exposureindex' => 'மறைநீக்கச் சுட்டி', +'exif-exposureindex' => 'திறப்புச் சுட்டெண்', 'exif-sensingmethod' => 'உணர்வு முறை', 'exif-filesource' => 'கோப்பு மூலம்', 'exif-scenetype' => 'காட்சி வகை', @@ -2377,7 +2399,7 @@ $1', 'exif-exposuremode' => 'மறைநீக்க முறை', 'exif-whitebalance' => 'வெள்ளைச் சமநிலை', 'exif-digitalzoomratio' => 'எண்மருவி பெருப்பித்தல் விகிதம்', -'exif-focallengthin35mmfilm' => '35 மி.மி. படச்சுருளில் குவியத்தூரம்', +'exif-focallengthin35mmfilm' => '35 மி.மி. படச்சுருளில் குவியத்தொலைவு', 'exif-scenecapturetype' => 'பிடிக்கப்பட்ட காட்சி வகை', 'exif-gaincontrol' => 'காட்சிக் கட்டுப்பாடு', 'exif-contrast' => 'உறழ்பொருவு', @@ -2395,7 +2417,7 @@ $1', 'exif-gpssatellites' => 'பயன்படுத்தப்பட்ட செய்மதிகள்', 'exif-gpsstatus' => 'வாங்கியின் நிலை', 'exif-gpsmeasuremode' => 'அளவீட்டு முறை', -'exif-gpsdop' => 'அலவீட்டு செம்மை', +'exif-gpsdop' => 'அளவீட்டுத் துல்லியம்', 'exif-gpsspeedref' => 'வேகதின் அலகு', 'exif-gpsspeed' => 'புவியிடம் காலம் விரைவு காட்டியின் வேகம்', 'exif-gpstrack' => 'அசைவுத் திசை', @@ -2418,10 +2440,10 @@ $1', 'exif-componentsconfiguration-0' => 'இல்லை', 'exif-exposureprogram-0' => 'வரையறுக்கப்படவில்லை', -'exif-exposureprogram-1' => 'மனிதச்செயல்', +'exif-exposureprogram-1' => 'கைமுறை', 'exif-exposureprogram-2' => 'வழக்கமான நிரல்', -'exif-exposureprogram-3' => 'துவார முன்னுரிமை', -'exif-exposureprogram-4' => 'மூடி முன்னுரிமை', +'exif-exposureprogram-3' => 'துளை முன்னுரிமை', +'exif-exposureprogram-4' => 'மறைப்பான்விரைவு முன்னுரிமை', 'exif-subjectdistance-value' => '$1 மீட்டர்கள்', @@ -2434,16 +2456,16 @@ $1', 'exif-meteringmode-255' => 'மற்றவை', 'exif-lightsource-0' => 'தெரியாது', -'exif-lightsource-1' => 'நாள் ஒளி', +'exif-lightsource-1' => 'பகலொளி', 'exif-lightsource-2' => 'உடனொளிர்வு விளக்கு', -'exif-lightsource-3' => 'தங்ஸ்தன் (வெள்ளொளிர்வு விளக்கு)', +'exif-lightsource-3' => 'தங்கிசிட்டன் இழை (விளக்கு ஒளி)', 'exif-lightsource-4' => 'திடீர் ஒளி', -'exif-lightsource-9' => 'சிறப்பான தட்பவெப்பம்', -'exif-lightsource-10' => 'முகிழ் மூட்டம்', +'exif-lightsource-9' => 'நல்ல வானிலை', +'exif-lightsource-10' => 'மோடம் (கார்முகில் மூட்டம்)', 'exif-lightsource-11' => 'நிழல்', -'exif-lightsource-12' => 'நாள் ஒளி உடனொளிர்வு விளக்கு (D 5700 – 7100K)', +'exif-lightsource-12' => 'பகலொளி உடனொளிர்வு (புளோரசெண்ட்டு) விளக்கு (D 5700 – 7100K)', 'exif-lightsource-13' => 'நாள் வெள்ளை உடனொளிர் (N 4600 – 5400K)', -'exif-lightsource-14' => 'குளிர் வெள்ளை உடனொளிர் (W 3900 – 4500K)', +'exif-lightsource-14' => 'தண்மையான வெள்ளை உடனொளிர்ச்சி (புளோரசெண்ட்டு) (W 3900 – 4500K)', 'exif-lightsource-15' => 'வெள்ளை உடனொளிர் (WW 3200 – 3700K)', 'exif-lightsource-17' => 'சீர்தர ஒளி A', 'exif-lightsource-18' => 'சீர்தர ஒளி B', @@ -2460,14 +2482,14 @@ $1', 'exif-customrendered-0' => 'சாதரணச் செயற்பாடு', 'exif-customrendered-1' => 'வடிவமைக்கப்பட்ட செயற்பாடு', -'exif-exposuremode-0' => 'தானியக்க மறைநீக்கம்', +'exif-exposuremode-0' => 'தானியக்க திறப்பு', 'exif-exposuremode-2' => 'தானியக்க அடைப்புக் குறி', 'exif-whitebalance-0' => 'தானியக்க வெள்ளைச் சமநிலை', 'exif-scenecapturetype-0' => 'சீர்தர', -'exif-scenecapturetype-1' => 'நிலக்காட்சி', -'exif-scenecapturetype-2' => 'உருவப்படம்', +'exif-scenecapturetype-1' => 'அகலவாட்டு', +'exif-scenecapturetype-2' => 'நெடுக்கு வாட்டு (உருவப்படம்)', 'exif-scenecapturetype-3' => 'இராக் காட்சி', 'exif-gaincontrol-0' => 'எதுவுமில்லை', @@ -2655,6 +2677,7 @@ $5 'version-hook-subscribedby' => 'பயன்பாடு', 'version-version' => '(பதிப்பு $1)', 'version-license' => 'அனுமதி', +'version-poweredby-others' => 'மற்றவைகள்', 'version-software' => 'நிறுவப்பட்ட மென்பொருள்', 'version-software-product' => 'உற்பத்திப்பொருள்', 'version-software-version' => 'பதிப்பு', @@ -2704,7 +2727,15 @@ $5 'tags-edit' => 'தொகு', 'tags-hitcount' => '$1 {{PLURAL:$1|மாற்றம்|மாற்றங்கள்}}', +# Special:ComparePages +'compare-page1' => 'பக்கம் 1', +'compare-page2' => 'பக்கம் 2', +'compare-rev1' => 'திருத்தம் 1', +'compare-rev2' => 'திருத்தம் 2', +'compare-submit' => 'ஒப்பிடு', + # HTML forms +'htmlform-required' => 'இதன் உட்பொருள் தேவையானது (கொடுக்கப்பட வேண்டும்)', 'htmlform-submit' => 'சமர்ப்பி', 'htmlform-reset' => 'மாற்றங்களை இல்லாது செய்', 'htmlform-selectorother-other' => 'மற்றவை', diff --git a/languages/messages/MessagesTcy.php b/languages/messages/MessagesTcy.php index 4629ca75..9f591338 100644 --- a/languages/messages/MessagesTcy.php +++ b/languages/messages/MessagesTcy.php @@ -27,8 +27,7 @@ $messages = array( 'tog-editsection' => 'ಪುಟೊತ ಭಾಗಲೊನ್ [ಸಂಪಾದನೆ] ಲಿಂಕ್’ಲೆನ್ ಒತ್ತ್’ದ್ ಬದಲ್ ಮನ್ಪುಲೆಕ ಉಪ್ಪಡ್', 'tog-editsectiononrightclick' => 'ಪುಟೊತ ವಿಭಾಗೊಲೆನ್ ಐತ ಹೆಡ್ಡಿಂಗ್’ನ್ ರೈಟ್ ಕ್ಲಿಕ್ ಮಲ್ತ್’ದ್ ಸಂಪಾದನೆ ಮಲ್ಪುಲೆಕ ಉಪ್ಪಡ್ (JavaScript)', 'tog-showtoc' => 'ಪರಿವಿಡಿನ್(ಟೇಬಲ್ ಆಫ್ ಕಂಟೆಂಟ್ಸ್) ತೊಜ್ಪಾಲೆ (ಮೂಜೆರ್ದ್ ಜಾಸ್ತಿ ಹೆಡ್ಡಿಂಗ್ ಉಪ್ಪುನಂಚಿನ ಪುಟೊಲೆಗ್)', -'tog-rememberpassword' => 'ಈ ಕಂಪ್ಯೂಟರ್’ಡ್ ಎನ್ನ ಲಾಗಿನ್ನ್ ನೆನಪುಡು ದೀಲ', -'tog-editwidth' => 'ಸಂಪಾದನೆ ಅಂಕಣ ಪೂರ್ತಿ ಅಗೆಲ ಉಪ್ಪಡ್', +'tog-rememberpassword' => 'ಈ ಕಂಪ್ಯೂಟರ್’ಡ್ ಎನ್ನ ಲಾಗಿನ್ನ್ ನೆನಪುಡು ದೀಲ (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'ಯಾನ್ ಶುರು ಮಲ್ತಿನ ಪುಟೊಲೆನ್ ಯೆನ್ನ ವೀಕ್ಷಣಾಪಟ್ಟಿಗ್ ಸೇರ್ಪಾಲೆ', 'tog-watchdefault' => 'ಯಾನ್ ಸಂಪಾದನೆ ಮನ್ಪುನಂಚಿನ ಪುಟೊಲೆನ್ ವೀಕ್ಷಣಾಪಟ್ಟಿಗ್ ಸೇರ್ಪಾಲೆ', 'tog-watchmoves' => 'ಯಾನ್ ಮೂವ್ ಮಲ್ತಿನಂಚಿನ ಪುಟೊಲೆನ್ ಎನ್ನ ವೀಕ್ಷಣಾಪಟ್ಟಿಗ್ ಸೇರ್ಪಾಲೆ', @@ -555,7 +554,6 @@ $messages = array( # Watchlist 'watchlist' => 'ವೀಕ್ಷಣಾ ಪಟ್ಟಿ', 'mywatchlist' => 'ಎನ್ನ ವೀಕ್ಷಣಾಪಟ್ಟಿ', -'watchlistfor' => "('''$1''' ಇಂದೆತ)", 'watch' => 'ತೂಲೆ', 'watchthispage' => 'ಈ ಪುಟೊನು ತೂಲೆ', 'unwatch' => 'ವೀಕ್ಷಣಾಪಟ್ಟಿರ್ದ್ ದೆಪ್ಪು', @@ -705,9 +703,9 @@ $messages = array( 'nextdiff' => 'ಪೊಸ ಎಡಿಟ್ →', # Media information -'file-info-size' => '($1 × $2 ಪಿಕ್ಸೆಲ್, ಫೈಲ್’ದ ಗಾತ್ರ: $3, MIME ಪ್ರಕಾರ: $4)', +'file-info-size' => '$1 × $2 ಪಿಕ್ಸೆಲ್, ಫೈಲ್’ದ ಗಾತ್ರ: $3, MIME ಪ್ರಕಾರ: $4', 'file-nohires' => 'ಇಂದೆರ್ದ್ ಜಾಸ್ತಿ ವಿವರವಾಯಿನ ನೋಟ ಇಜ್ಜಿ.', -'svg-long-desc' => '(ಎಸ್.ವಿ.ಜಿ ಫೈಲ್, ಸುಮಾರಾದ್ $1 × $2 ಪಿಕ್ಸೆಲ್, ಫೈಲ್’ದ ಗಾತ್ರ: $3)', +'svg-long-desc' => 'ಎಸ್.ವಿ.ಜಿ ಫೈಲ್, ಸುಮಾರಾದ್ $1 × $2 ಪಿಕ್ಸೆಲ್, ಫೈಲ್’ದ ಗಾತ್ರ: $3', 'show-big-image' => 'ಪೂರ್ತಿ ರೆಸೊಲ್ಯೂಶನ್', 'show-big-image-thumb' => 'ಈ ಮುನ್ನೋಟದ ಗಾತ್ರ: $1 × $2 ಪಿಕ್ಸೆಲ್', diff --git a/languages/messages/MessagesTe.php b/languages/messages/MessagesTe.php index d236fc9f..c1a71016 100644 --- a/languages/messages/MessagesTe.php +++ b/languages/messages/MessagesTe.php @@ -11,12 +11,15 @@ * @author Kiranmayee * @author Meno25 * @author Mpradeep + * @author Praveen Illa * @author Ravichandra * @author Sunil Mohan + * @author The Evil IP address * @author Urhixidur * @author Veeven * @author Ævar Arnfjörð Bjarmason * @author לערי ריינהארט + * @author రహ్మానుద్దీన్ * @author రాకేశ్వర * @author వైజాసత్య */ @@ -102,7 +105,7 @@ $specialPageAliases = array( 'Booksources' => array( 'పుస్తకమూలాలు' ), 'Categories' => array( 'వర్గాలు' ), 'Export' => array( 'ఎగుమతి' ), - 'Version' => array( 'ప్రతి' ), + 'Version' => array( 'కూర్పు' ), 'Allmessages' => array( 'అన్నిసందేశాలు' ), 'Log' => array( 'చిట్టా', 'చిట్టాలు' ), 'Blockip' => array( 'అడ్డగించు', 'ఐపినిఅడ్డగించు', 'వాడుకరినిఅడ్డగించు' ), @@ -114,7 +117,7 @@ $specialPageAliases = array( 'Randomredirect' => array( 'యాదుచ్చికదారిమార్పు' ), 'Mypage' => array( 'నాపేజీ' ), 'Mytalk' => array( 'నాచర్చ' ), - 'Mycontributions' => array( 'నా మార్పులు-చేర్పులు' ), + 'Mycontributions' => array( 'నా_మార్పులు-చేర్పులు' ), 'Popularpages' => array( 'ప్రాచుర్యంపొందినపేజీలు' ), 'Search' => array( 'అన్వేషణ' ), 'Resetpass' => array( 'సంకేతపదముమార్చు' ), @@ -125,6 +128,8 @@ $specialPageAliases = array( $magicWords = array( 'redirect' => array( '0', '#దారిమార్పు', '#REDIRECT' ), + 'notoc' => array( '0', '__విషయసూచికవద్దు__', '__NOTOC__' ), + 'toc' => array( '0', '__విషయసూచిక__', '__TOC__' ), 'pagename' => array( '1', 'పేజీపేరు', 'PAGENAME' ), 'img_right' => array( '1', 'కుడి', 'right' ), 'img_left' => array( '1', 'ఎడమ', 'left' ), @@ -149,8 +154,7 @@ $messages = array( 'tog-editsection' => '[మార్చు] లింకు ద్వారా విభాగం మార్పు కావాలి', 'tog-editsectiononrightclick' => 'విభాగం పేరు మీద కుడి క్లిక్కుతో విభాగం మార్పు కావాలి (జావాస్క్రిప్టు)', 'tog-showtoc' => 'విషయసూచిక చూపించు (3 కంటే ఎక్కువ శీర్షికలున్న పేజీలకు)', -'tog-rememberpassword' => 'ఈ కంప్యూటరులో నేను అన్ని సెషన్లలోనూ నా లాగిన్ను గుర్తుపెట్టుకో', -'tog-editwidth' => 'మార్పు పెట్టెని తెర వెడల్పంతా విస్తరించు', +'tog-rememberpassword' => 'ఈ విహారిణిలో నా ప్రవేశాన్ని గుర్తుంచుకో (గరిష్ఠంగా $1 {{PLURAL:$1|రోజు|రోజుల}}కి)', 'tog-watchcreations' => 'నేను సృష్టించిన పేజీలను నా వీక్షణ జాబితాకు కలుపు', 'tog-watchdefault' => 'నేను దిద్దుబాట్లు చేసిన పేజీలను నా వీక్షణ జాబితాకు కలుపు', 'tog-watchmoves' => 'నేను తరలించిన పేజీలను నా వీక్షణ జాబితాకు కలుపు', @@ -286,7 +290,7 @@ $messages = array( # Cologne Blue skin 'qbfind' => 'వెతుకు', 'qbbrowse' => 'విహరించు', -'qbedit' => 'మార్చు', +'qbedit' => 'సవరించు', 'qbpageoptions' => 'ఈ పేజీ', 'qbpageinfo' => 'సందర్భం', 'qbmyoptions' => 'నా పేజీలు', @@ -295,31 +299,21 @@ $messages = array( 'faqpage' => 'Project:తరచూ అడిగే ప్రశ్నలు', # Vector skin -'vector-action-addsection' => 'విషయాన్ని చేర్చు', -'vector-action-delete' => 'తొలగించు', -'vector-action-move' => 'తరలించు', -'vector-action-protect' => 'సంరక్షించు', -'vector-action-undelete' => 'తిరిగి చేర్చు', -'vector-action-unprotect' => 'సంరక్షించ వద్దు', -'vector-namespace-category' => 'వర్గం', -'vector-namespace-help' => 'సహాయపు పేజీ', -'vector-namespace-image' => 'ఫైలు', -'vector-namespace-main' => 'పేజీ', -'vector-namespace-media' => 'మాధ్యమ పేజీ', -'vector-namespace-mediawiki' => 'సందేశం', -'vector-namespace-project' => 'ప్రాజెక్టు పేజీ', -'vector-namespace-special' => 'ప్రత్యేక పేజీ', -'vector-namespace-talk' => 'చర్చ', -'vector-namespace-template' => 'మూస', -'vector-namespace-user' => 'వాడుకరి పేజీ', -'vector-view-create' => 'సృష్టించు', -'vector-view-edit' => 'మార్చు', -'vector-view-history' => 'చరిత్రని చూడండి', -'vector-view-view' => 'చదువు', -'vector-view-viewsource' => 'మూలాన్ని చూడండి', -'actions' => 'చర్యలు', -'namespaces' => 'నేంస్పేసులు', -'variants' => 'వైవిధ్యాలు', +'vector-action-addsection' => 'విషయాన్ని చేర్చు', +'vector-action-delete' => 'తొలగించు', +'vector-action-move' => 'తరలించు', +'vector-action-protect' => 'సంరక్షించు', +'vector-action-undelete' => 'తిరిగి చేర్చు', +'vector-action-unprotect' => 'సంరక్షించ వద్దు', +'vector-simplesearch-preference' => 'మెరుగైన అన్వేషణ సలహాలని చేతనంచేయి (వెక్టర్ అలంకారానికి మాత్రమే)', +'vector-view-create' => 'సృష్టించు', +'vector-view-edit' => 'సవరించు', +'vector-view-history' => 'చరిత్రని చూడండి', +'vector-view-view' => 'చదువు', +'vector-view-viewsource' => 'మూలాన్ని చూడండి', +'actions' => 'చర్యలు', +'namespaces' => 'నేంస్పేసులు', +'variants' => 'వైవిధ్యాలు', 'errorpagetitle' => 'పొరపాటు', 'returnto' => 'తిరిగి $1కి.', @@ -329,27 +323,27 @@ $messages = array( 'searchbutton' => 'వెతుకు', 'go' => 'వెళ్లు', 'searcharticle' => 'వెళ్లు', -'history' => 'పుట చరిత్ర', +'history' => 'పేజీ చరిత్ర', 'history_short' => 'చరిత్ర', 'updatedmarker' => 'నేను కిందటిసారి వచ్చిన తరువాత జరిగిన మార్పులు', 'info_short' => 'సమాచారం', 'printableversion' => 'ముద్రించుకోదగ్గ కూర్పు', 'permalink' => 'శాశ్వత లింకు', 'print' => 'ముద్రించు', -'edit' => 'మార్చు', +'edit' => 'సవరించు', 'create' => 'సృష్టించు', -'editthispage' => 'ఈ పుటని మార్చండి', +'editthispage' => 'ఈ పేజీని సవరించండి', 'create-this-page' => 'ఈ పేజీని సృష్టించండి', -'delete' => 'తుడిచివేయి', -'deletethispage' => 'ఈ పుటను తొలగించు', +'delete' => 'తీసివేయి', +'deletethispage' => 'ఈ పేజీని తొలగించండి', 'undelete_short' => '{{PLURAL:$1|ఒక్క రచనను|$1 రచనలను}} పునఃస్థాపించు', 'protect' => 'సంరక్షించు', 'protect_change' => 'మార్చు', 'protectthispage' => 'ఈ పేజీని సంరక్షించు', 'unprotect' => 'సంరక్షించ వద్దు', 'unprotectthispage' => 'ఈ పేజీని సంరక్షించవద్దు', -'newpage' => 'కొత్త పుట', -'talkpage' => 'ఈ పుటని చర్చించండి', +'newpage' => 'కొత్త పేజీ', +'talkpage' => 'ఈ పేజీని చర్చించండి', 'talkpagelinktext' => 'చర్చ', 'specialpage' => 'ప్రత్యేక పేజీ', 'personaltools' => 'వ్యక్తిగత పనిముట్లు', @@ -380,6 +374,9 @@ $messages = array( ఈ పేజీని వీక్షించడానికి కొద్దిసేపు నిరీక్షించండి. $1', +'pool-timeout' => 'తాళం కొరకు వేచివుండడానికి కాలపరిమితి అయిపోయింది', +'pool-queuefull' => 'సమూహపు వరుస నిండుగా ఉంది', +'pool-errorunknown' => 'గుర్తుతెలియని పొరపాటు', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} గురించి', @@ -394,7 +391,7 @@ $1', 'edithelppage' => 'Help:దిద్దుబాట్లు ఎలా చెయ్యాలి', 'helppage' => 'Help:సూచిక', 'mainpage' => 'మొదటి పేజీ', -'mainpage-description' => 'మొదటి పుట', +'mainpage-description' => 'మొదటి పేజీ', 'policy-url' => 'Project:విధానం', 'portal' => 'సముదాయ పందిరి', 'portal-url' => 'Project:సముదాయ పందిరి', @@ -415,9 +412,9 @@ $1', 'newmessagesdifflink' => 'క్రితం సంచికతో గల తేడాలు', 'youhavenewmessagesmulti' => '$1లో మీకో సందేశం ఉంది', 'editsection' => 'మార్చు', -'editold' => 'మార్చు', +'editold' => 'సవరించు', 'viewsourceold' => 'మూలాన్ని చూడండి', -'editlink' => 'మార్చు', +'editlink' => 'సవరించు', 'viewsourcelink' => 'మూలాన్ని చూడండి', 'editsectionhint' => 'విభాగాన్ని మార్చు: $1', 'toc' => 'విషయ సూచిక', @@ -436,10 +433,10 @@ $1', 'red-link-title' => '$1 (పుట లేదు)', # Short words for each namespace, by default used in the namespace tab in monobook -'nstab-main' => 'పుట', -'nstab-user' => 'వాడుకరి పుట', +'nstab-main' => 'పేజీ', +'nstab-user' => 'వాడుకరి పేజీ', 'nstab-media' => 'మీడియా పేజీ', -'nstab-special' => 'ప్రత్యేక పుట', +'nstab-special' => 'ప్రత్యేక పేజీ', 'nstab-project' => 'ప్రాజెక్టు పేజీ', 'nstab-image' => 'దస్త్రం', 'nstab-mediawiki' => 'సందేశం', @@ -547,13 +544,14 @@ $2', 'yourname' => 'వాడుకరిపేరు:', 'yourpassword' => 'మీ సంకేతపదం', 'yourpasswordagain' => 'సంకేతపదాన్ని మళ్ళీ ఇవ్వండి:', -'remembermypassword' => 'ఈ కంప్యూటరులో నన్ను గుర్తుపెట్టుకో', +'remembermypassword' => 'ఈ కంప్యూటరులో నా ప్రవేశాన్ని గుర్తుంచుకో (గరిష్ఠంగా $1 {{PLURAL:$1|రోజు|రోజుల}}కి)', +'securelogin-stick-https' => 'ప్రవేశం తర్వాత కూడా HTTPSకి అనుసంధానమై ఉండు', 'yourdomainname' => 'మీ డోమైను', 'externaldberror' => 'డేటాబేసు అధీకరణలో పొరపాటు జరిగింది లేదా మీ బయటి ఖాతాని తాజాకరించడానికి మీకు అనుమతి లేదు.', 'login' => 'ప్రవేశించండి', 'nav-login-createaccount' => 'లోనికి ప్రవేశించండి / ఖాతాని సృష్టించుకోండి', 'loginprompt' => '{{SITENAME}}లోకి ప్రవేశించాలంటే మీ విహారిణిలో కూకీలు చేతనమై ఉండాలి.', -'userlogin' => 'ప్రవేశం / ఖాతా సృష్టింపు', +'userlogin' => 'ప్రవేశంచు / ఖాతా సృష్టించు', 'userloginnocreate' => 'ప్రవేశించండి', 'logout' => 'నిష్క్రమించు', 'userlogout' => 'నిష్క్రమించు', @@ -564,6 +562,7 @@ $2', 'gotaccount' => "ఇప్పటికే మీకు ఖాతా ఉందా? '''$1'''.", 'gotaccountlink' => 'ప్రవేశించండి', 'createaccountmail' => 'ఈ-మెయిలు ద్వారా', +'createaccountreason' => 'కారణం:', 'badretype' => 'మీరు ఇచ్చిన రెండు సంకేతపదాలు ఒకదానితో మరొకటి సరిపోలడం లేదు.', 'userexists' => 'మీరిచ్చిన వాడుకరిపేరు ఇప్పటికే వాడుకలో ఉంది. వేరే పేరు ఎంచుకోండి.', @@ -589,6 +588,7 @@ $2', 'wrongpasswordempty' => 'ఖాళీ సంకేతపదం ఇచ్చారు. మళ్ళీ ప్రయత్నించండి.', 'passwordtooshort' => 'మీ సంకేతపదం కనీసం {{PLURAL:$1|1 అక్షరం|$1 అక్షరాల}} పొడవు ఉండాలి.', 'password-name-match' => 'మీ సంకేతపదం మీ వాడుకరిపేరుకి భిన్నంగా ఉండాలి.', +'password-login-forbidden' => 'ఈ వాడుకరిపేరు మరియు సంకేతపదాలను ఉపయోగించడం నిషిద్ధం.', 'mailmypassword' => 'కొత్త సంకేతపదాన్ని ఈ-మెయిల్లో పంపించు', 'passwordremindertitle' => '{{SITENAME}} కోసం కొత్త తాత్కాలిక సంకేతపదం', 'passwordremindertext' => '{{SITENAME}} ($4) లో కొత్త సంకేతపదం పంపించమని ఎవరో (బహుశ మీరే, ఐ.పీ. చిరునామా $1 నుండి) అడిగారు. వాడుకరి "$2" కొరకు "$3" అనే తాత్కాలిక సంకేతపదం సిద్ధంచేసి ఉంచాం. మీ ఉద్దేశం అదే అయితే, ఇప్పుడు మీరు సైటులోనికి ప్రవేశించి కొత్త సంకేతపదాన్ని ఎంచుకోవచ్చు. మీ తాత్కాలిక సంకేతపదం {{PLURAL:$5|ఒక రోజు|$5 రోజుల}}లో కాలంచెల్లుతుంది. @@ -625,6 +625,9 @@ $2', 'loginlanguagelabel' => 'భాష: $1', 'suspicious-userlogout' => 'సరిగా పనిచేయని విహారిణి లేదా కాషింగ్ ప్రాక్సీ వల్ల పంపబడడం చేత, నిష్క్రమించాలనే మీ అభ్యర్థనని నిరాకరించారు.', +# E-mail sending +'php-mail-error-unknown' => 'PHP యొక్క mail() ఫంక్షన్‍లో ఏదో తెలియని లోపం దొర్లింది', + # Password reset dialog 'resetpass' => 'సంకేతపదాన్ని మార్చండి', 'resetpass_announce' => 'మీకు పంపిన తాత్కాలిక సంకేతంతో ప్రవేశించివున్నారు. @@ -668,16 +671,18 @@ $2', 'subject' => 'విషయం/శీర్షిక:', 'minoredit' => 'ఇది ఒక చిన్న మార్పు', 'watchthis' => 'ఈ పుట మీద కన్నేసి ఉంచు', -'savearticle' => 'పుటను భద్రపరుచు', -'preview' => 'సరిచూడు', -'showpreview' => 'సరిచూడు', +'savearticle' => 'పేజీని భద్రపరచు', +'preview' => 'మునుజూపు', +'showpreview' => 'మునుజూపు', 'showlivepreview' => 'తాజా మునుజూపు', 'showdiff' => 'తేడాలను చూపించు', 'anoneditwarning' => "'''హెచ్చరిక:''' మీరు లోనికి ప్రవేశించలేదు. ఈ పేజీ దిద్దుబాటు చరిత్రలో మీ ఐపీ చిరునామా నమోదవుతుంది.", +'anonpreviewwarning' => "''మీరు లోనికి ప్రవేశించలేదు. భద్రపరిస్తే ఈ పేజీ యొక్క దిద్దుబాటు చరిత్రలో మీ ఐపీ చిరునామా నమోదవుతుంది.''", 'missingsummary' => "'''గుర్తు చేస్తున్నాం:''' మీరు దిద్దుబాటు సారాంశమేమీ ఇవ్వలేదు. పేజీని మళ్ళీ భద్రపరచమని చెబితే సారాంశమేమీ లేకుండానే దిద్దుబాటును భద్రపరుస్తాం.", 'missingcommenttext' => 'కింద ఓ వ్యాఖ్య రాయండి.', -'missingcommentheader' => "'''గుర్తు చేస్తున్నాం''': ఈ వ్యాఖ్యకు మీరు విషయం/శీర్షిక పెట్టలేదు. పేజీని మళ్ళీ భద్రపరచమని చెబితే, మీ విభాగాన్ని శీర్షికేమీ లేకుండానే భద్రపరుస్తాం.", +'missingcommentheader' => "'''గుర్తు చేస్తున్నాం''': ఈ వ్యాఖ్యకు మీరు విషయం/శీర్షిక పెట్టలేదు. +\"{{int:savearticle}}\"ని మళ్ళీ నొక్కితే, మీ మార్పుకి విషయం/శీర్షిక ఏమీ లేకుండానే భద్రపరుస్తాం.", 'summary-preview' => 'మీరు రాసిన సారాంశం:', 'subject-preview' => 'విషయం/శీర్షిక మునుజూపు:', 'blockedtitle' => 'సభ్యునిపై నిరోధం అమలయింది', @@ -748,8 +753,13 @@ $2', 'usercsspreview' => "'''మీరు వాడుకరి CSSను కేవలం సరిచూస్తున్నారని గుర్తుంచుకోండి.''' '''దాన్నింకా భద్రపరచలేదు!'''", 'userjspreview' => "'''గుర్తుంచుకోండి, మీరింకా మీ వాడుకరి జావాస్క్రిప్ట్‌ను భద్రపరచలేదు, కేవలం పరీక్షిస్తున్నారు/సరిచూస్తున్నారు!'''", -'userinvalidcssjstitle' => "'''హెచ్చరిక:''' \"\$1\" అనే తొడుగు లేదు. .css మరియు .js పేజీల పేర్లు ఇంగ్లీషు లోవరు కేసులోనే ఉండాలన్న సంగతి గుర్తుంచుకోండి. ఉదాహరణకు {{ns:user}}:Foo/monobook.css. అంతేగానీ, {{ns:user}}:Foo/Monobook.css -ఇలా కాదు.", -'updated' => '(తాజా అయ్యింది)', +'sitecsspreview' => "'''మీరు చూస్తున్నది ఈ CSS మునుజూపును మాత్రమేనని గుర్తుంచుకోండి.''' +'''దీన్నింకా భద్రపరచలేదు!'''", +'sitejspreview' => "'''మీరు చూస్తున్నది ఈ JavaScript మునుజూపును మాత్రమేనని గుర్తుంచుకోండి.''' +'''దీన్నింకా భద్రపరచలేదు!'''", +'userinvalidcssjstitle' => "'''హెచ్చరిక:''' \"\$1\" అనే అలంకారం లేదు. +అభిమత .css మరియు .js పుటల శీర్షికలు ఇంగ్లీషు చిన్నబడి అక్షరాల లోనే ఉండాలని గుర్తుంచుకోండి, ఉదాహరణకు ఇలా {{ns:user}}:Foo/vector.css అంతేగానీ, {{ns:user}}:Foo/Vector.css ఇలా కాదు.", +'updated' => '(నవీకరించబడింది)', 'note' => "'''గమనిక:'''", 'previewnote' => "'''ఇది మునుజూపు మాత్రమే; మార్పులని ఇంకా భద్రపరచలేదు!'''", @@ -781,7 +791,6 @@ $2', 'copyrightwarning2' => "{{SITENAME}}లో ప్రచురించే రచనలన్నిటినీ ఇతర రచయితలు సరిదిద్దడం, మార్చడం, తొలగించడం చేసే అవకాశం ఉంది. మీ రచనలను అలా నిర్దాక్షిణ్యంగా దిద్దుబాట్లు చెయ్యడం మీకిష్టం లేకపోతే, వాటిని ఇక్కడ ప్రచురించకండి.
    ఈ రచనను మీరే చేసారని, లేదా ఏదైనా సార్వజనిక వనరు నుండి కాపీ చేసి తెచ్చారని, లేదా అలాంటి ఉచిత, స్వేచ్ఛా వనరు నుండి తెచ్చారని మాకు వాగ్దానం చేస్తున్నారు. (వివరాలకు $1 చూడండి). '''తగు అనుమతులు లేకుండా కాపీ హక్కులు గల రచనలను సమర్పించకండి!'''", -'longpagewarning' => "'''హెచ్చరిక: ఈ పేజీ సైజు $1 కిలోబైట్లు ఉంది; 32 kb కంటే పెద్ద పేజీల తోటి కొన్ని బ్రౌజర్లు ఇబ్బంది పడతాయి. పేజీని చిన్న పేజీలుగా విడగొట్టడానికి అవకాశం ఉందేమో చూడండి. '''", 'longpageerror' => "'''లోపం: మీరు సమర్పించిన టెక్స్టు, గరిష్ఠ పరిమితి అయిన $2 కిలోబైట్లను మించి $1 కిలోబైట్ల పొడవుంది. దీన్ని భద్రపరచలేము.'''", 'readonlywarning' => "'''హెచ్చరిక: నిర్వహణ కొరకు డేటాబేసుకి తాళం వేసారు, కాబట్టి మీ మార్పుచేర్పులను ఇప్పుడు భద్రపరచలేరు. మీ మార్పులను ఒక ఫాఠ్య ఫైలులోకి కాపీ చేసి భద్రపరచుకొని, తరువాత సమర్పించండి.''' @@ -957,6 +966,8 @@ $1", 'logdelete-failure' => "'''చిట్టా కనబడే పద్ధతిని అమర్చలేకపోయాం:''' $1", 'revdel-restore' => 'దృశ్యతని మార్చు', +'revdel-restore-deleted' => 'తొలగించిన కూర్పులు', +'revdel-restore-visible' => 'కనిపిస్తున్న కూర్పులు', 'pagehist' => 'పేజీ చరిత్ర', 'deletedhist' => 'తొలగించిన చరిత్ర', 'revdelete-content' => 'సమాచారాన్ని', @@ -1024,11 +1035,13 @@ $1", # Diffs 'history-title' => '"$1" కూర్పుల చరితం', 'difference' => '(సంచికల మధ్య తేడా)', +'difference-multipage' => '(పేజీల మధ్య తేడా)', 'lineno' => 'పంక్తి $1:', 'compareselectedversions' => 'ఎంచుకున్న సంచికలను పోల్చిచూడు', 'showhideselectedversions' => 'ఎంచుకున్న కూర్పులను చూపించు/దాచు', 'editundo' => 'మార్పుని రద్దుచెయ్యి', -'diff-multi' => '(మధ్యలో ఉన్న {{PLURAL:$1|ఒక కూర్పును|$1 కూర్పులను}} చూపించటం లేదు.)', +'diff-multi' => '({{PLURAL:$2|ఒక వాడుకరి|$2 వాడుకరుల}} యొక్క {{PLURAL:$1|ఒక మధ్యంతర కూర్పును|$1 మధ్యంతర కూర్పులను}} చూపించట్లేదు)', +'diff-multi-manyusers' => '$2 మంది పైన ({{PLURAL:$2|ఒక వాడుకరి|వాడుకరుల}} యొక్క {{PLURAL:$1|ఒక మధ్యంతర కూర్పును|$1 మధ్యంతర కూర్పులను}} చూపించట్లేదు)', # Search results 'searchresults' => 'అన్వేషణ ఫలితాలు', @@ -1063,6 +1076,7 @@ $1", 'searchprofile-everything-tooltip' => 'అన్ని చోట్లా (చర్చా పేజీలతో సహా) వెతకండి', 'searchprofile-advanced-tooltip' => 'కస్టం నేంస్పేసులలో వెదుకు', 'search-result-size' => '$1 ({{PLURAL:$2|1 పదం|$2 పదాలు}})', +'search-result-category-size' => '{{PLURAL:$1|1 సభ్యుడు|$1 సభ్యులు}} ({{PLURAL:$2|1 ఉవవర్గం|$2 ఉపవర్గాలు}}, {{PLURAL:$3|1 దస్త్రం|$3 దస్త్రాలు}})', 'search-result-score' => 'సంబంధం: $1%', 'search-redirect' => '(దారిమార్పు $1)', 'search-section' => '(విభాగం $1)', @@ -1137,6 +1151,7 @@ $1", 'contextlines' => 'హిట్టుకు లైన్లు:', 'contextchars' => 'లైనుకు సందర్భాలు:', 'stub-threshold' => 'మొలక లింకు ఫార్మాటింగు కొరకు హద్దు (బైట్లు):', +'stub-threshold-disabled' => 'అచేతనం', 'recentchangesdays' => 'ఇటీవలి మార్పులు లో చూపించవలసిన రోజులు:', 'recentchangesdays-max' => '($1 {{PLURAL:$1|రోజు|రోజులు}} గరిష్ఠం)', 'recentchangescount' => 'అప్రమేయంగా చూపించాల్సిన దిద్దుబాట్ల సంఖ్య:', @@ -1169,6 +1184,7 @@ $1", 'prefs-files' => 'ఫైళ్ళు', 'prefs-custom-css' => 'ప్రత్యేక CSS', 'prefs-custom-js' => 'ప్రత్యేక JS', +'prefs-common-css-js' => 'అన్ని అలంకారాలకై పంచుకోబడిన CSS/JS:', 'prefs-reset-intro' => 'ఈ పేజీలో, మీ అభిరుచులను సైటు డిఫాల్టు విలువలకు మార్చుకోవచ్చు. మళ్ళీ వెనక్కి తీసుకుపోలేరు.', 'prefs-emailconfirm-label' => 'ఈ-మెయిల్ నిర్ధారణ:', 'prefs-textboxsize' => 'ఎడిటింగ్ విండో పరిమాణం', @@ -1204,9 +1220,15 @@ $1", 'prefs-advancedrendering' => 'ఉన్నత ఎంపికలు', 'prefs-advancedsearchoptions' => 'ఉన్నత ఎంపికలు', 'prefs-advancedwatchlist' => 'ఉన్నత ఎంపికలు', -'prefs-display' => 'ప్రదర్శన ఎంపికలు', +'prefs-displayrc' => 'ప్రదర్శన ఎంపికలు', +'prefs-displaysearchoptions' => 'ప్రదర్శన ఎంపికలు', +'prefs-displaywatchlist' => 'ప్రదర్శన ఎంపికలు', 'prefs-diffs' => 'తేడాలు', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'ఈ-మెయిలు చిరునామా సరిగానే ఉన్నట్టుంది', +'email-address-validity-invalid' => 'దయచేసి సరైన ఈమెయిలు చిరునామాని ఇవ్వండి', + # User rights 'userrights' => 'వాడుకరి హక్కుల నిర్వహణ', 'userrights-lookup-user' => 'వాడుకరి సమూహాలను సంభాళించండి', @@ -1290,6 +1312,7 @@ $1", 'right-hideuser' => 'ప్రజలకు కనబడకుండా చేసి, సభ్యనామాన్ని నిరోధించు', 'right-ipblock-exempt' => 'ఐపీ నిరోధాలు, ఆటో నిరోధాలు, శ్రేణి నిరోధాలను తప్పించు', 'right-proxyunbannable' => 'ప్రాక్సీల ఆటోమాటిక్ నిరోధాన్ని తప్పించు', +'right-unblockself' => 'వారినే అనిరోధించుకోవడం', 'right-protect' => 'సంరక్షణ స్థాయిలను మార్చు, సంరక్షిత పేజీలలో దిద్దుబాటు చెయ్యి', 'right-editprotected' => 'సంరక్షిత పేజీలలో దిద్దుబటు చెయ్యి (కాస్కేడింగు సంరక్షణ లేనివి)', 'right-editinterface' => 'యూజరు ఇంటరుఫేసులో దిద్దుబాటు చెయ్యి', @@ -1312,7 +1335,6 @@ $1", 'right-siteadmin' => 'డేటాబేసును లాక్, అన్‌లాక్ చెయ్యి', 'right-reset-passwords' => 'మిగతా వాడుకరుల సందేశమును మార్చుము', 'right-override-export-depth' => '5 లింకుల లోతు వరకు ఉన్న పేజీలతో సహా, పేజీలను ఎగుమతి చెయ్యి', -'right-versiondetail' => 'మృదూపకరణ సంచిక యొక్క విస్తరిత సమాచారాన్ని చూడడం', 'right-sendemail' => 'ఇతర వాడుకరులకు ఈ-మెయిలు పంపించగలగడం', # User rights log @@ -1322,8 +1344,8 @@ $1", 'rightsnone' => '(ఏమీలేవు)', # Associated actions - in the sentence "You do not have permission to X" -'action-read' => 'ఈ పేజీని చూసే', -'action-edit' => 'ఈ పుటని మార్చే', +'action-read' => 'ఈ పేజీని చదవండి', +'action-edit' => 'ఈ పేజీని సవరించండి', 'action-createpage' => 'పేజీలను సృష్టించే', 'action-createtalk' => 'చర్చాపేజీలను సృష్టించే', 'action-createaccount' => 'ఈ వాడుకరి ఖాతాని సృష్టించే', @@ -1363,14 +1385,9 @@ $1", 'recentchanges-legend' => 'ఇటీవలి మార్పుల ఎంపికలు', 'recentchangestext' => 'వికీలో ఇటీవల జరిగిన మార్పులను ఈ పుటలో గమనించవచ్చు.', 'recentchanges-feed-description' => 'ఈ ఫీడు ద్వారా వికీలో జరుగుతున్న మార్పుల గురించి ఎప్పటికప్పుడు సమాచారాన్ని పొందండి.', -'recentchanges-label-legend' => 'సూచిక: $1.', -'recentchanges-legend-newpage' => '$1 - కొత్త పేజీ', 'recentchanges-label-newpage' => 'ఈ మార్పు కొత్త పేజీని సృష్టించింది', -'recentchanges-legend-minor' => '$1 - చిన్న మార్పు', 'recentchanges-label-minor' => 'ఇది ఒక చిన్న మార్పు', -'recentchanges-legend-bot' => '$1 - బాటు చేసిన మార్పు', 'recentchanges-label-bot' => 'ఈ మార్పును ఒక బాటు చేసింది', -'recentchanges-legend-unpatrolled' => '$1 - నిఘాలో లేని మార్పు', 'recentchanges-label-unpatrolled' => 'ఈ దిద్దుబాటు మీద నిఘా లేదు', 'rcnote' => "$4 నాడు $5 సమయానికి, గత {{PLURAL:$2|ఒక్క రోజులో|'''$2''' రోజులలో}} చేసిన చివరి {{PLURAL:$1|ఒక్క మార్పు కింద ఉంది|'''$1''' మార్పులు కింద ఉన్నాయి}}.", 'rcnotefrom' => '$2 నుండి జరిగిన మార్పులు ($1 వరకు చూపబడ్డాయి).', @@ -1403,7 +1420,7 @@ $1", 'recentchangeslinked-title' => '$1 కు సంబంధించిన మార్పులు', 'recentchangeslinked-noresult' => 'మీరిచ్చిన కాలంలో ఇక్కడికి లింకు ఉన్న పేజీలలో ఎటువంటు మార్పులూ జరగలేదు.', 'recentchangeslinked-summary' => "దీనికి లింకై ఉన్న పేజీల్లో జరిగిన చివరి మార్పులు ఇక్కడ చూడవచ్చు. మీ వీక్షణ జాబితాలో ఉన్న పేజీలు '''బొద్దు'''గా ఉంటాయి.", -'recentchangeslinked-page' => 'పుట పేరు:', +'recentchangeslinked-page' => 'పేజీ పేరు:', 'recentchangeslinked-to' => 'ఇచ్చిన పేజీకి లింకయివున్న పేజీలలో జరిగిన మార్పులను చూపించు', # Upload @@ -1416,6 +1433,9 @@ $1", 'upload_directory_missing' => 'ఎగుమతి డైరెక్టరీ ($1) తప్పింది మరియు వెబ్ సర్వర్ దాన్ని సృష్టించలేకున్నది.', 'upload_directory_read_only' => 'అప్‌లోడు డైరెక్టరీ ($1), వెబ్‌సర్వరు రాసేందుకు అనుకూలంగా లేదు.', 'uploaderror' => 'ఎక్కింపు పొరపాటు', +'upload-recreate-warning' => "'''హెచ్చరిక: ఆ పేరుతో ఉన్న దస్త్రాన్ని తరలించి లేదా తొలగించి ఉన్నారు.''' + +మీ సౌకర్యం కోసం ఈ పుట యొక్క తొలగింపు మరియు తరలింపు చిట్టాని ఇక్కడ ఇస్తున్నాం:", 'uploadtext' => "దస్త్రాలను ఎక్కించడానికి ఈ కింది ఫారాన్ని ఉపయోగించండి. గతంలో ఎక్కించిన దస్త్రాలను చూడడానికి లేదా వెతకడానికి [[Special:FileList|ఎక్కించిన దస్త్రాల యొక్క జాబితా]]కు వెళ్ళండి, (పునః)ఎక్కింపులు [[Special:Log/upload|ఎక్కింపుల చిట్టా]] లోనూ తొలగింపులు [[Special:Log/delete|తొలగింపుల చిట్టా]] లోనూ కూడా నమోదవుతాయి. @@ -1450,6 +1470,17 @@ $1", 'filetype-banned-type' => "'''\".\$1\"''' అనే ఫైలు రకాన్ని అనుమతించం. అనుమతించే {{PLURAL:\$3|ఫైలు రకం ఇదీ|ఫైలు రకాలు ఇవీ}}: \$2.", 'filetype-missing' => 'ఫైలుకి పొడగింపు (".jpg" లాంటిది) లేదు.', +'empty-file' => 'మీరు సమర్పించిన దస్త్రం ఖాళీగా ఉంది.', +'file-too-large' => 'మీరు సమర్పించిన దస్త్రం చాలా పెద్దగా ఉంది.', +'filename-tooshort' => 'దస్త్రపు పేరు మరీ చిన్నగా ఉంది.', +'filetype-banned' => 'ఈ రకపు దస్త్రాలని నిషేధించాము.', +'verification-error' => 'దస్త్రపు తనిఖీలో ఈ దస్త్రం ఉత్తీర్ణమవలేదు.', +'hookaborted' => 'మీరు చేయప్రత్నించిన మార్పుని ఒక పొడగింత కొక్కెం విచ్ఛిన్నం చేసింది.', +'illegal-filename' => 'ఆ దస్త్రపుపేరు అనుమతించబడదు.', +'overwrite' => 'ఇప్పటికే ఉన్న దస్త్రాన్ని తిరిగరాయడం అనుమతించబడదు.', +'unknown-error' => 'ఏదో తెలియని పొరపాటు జరిగింది.', +'tmp-create-error' => 'తాత్కాలిక దస్త్రాన్ని సృష్టించలేకపోయాం.', +'tmp-write-error' => 'తాత్కాలిక దస్త్రాన్ని రాయడంలో పొరపాటు.', 'large-file' => 'ఫైళ్ళు $1 కంటే పెద్దవిగా ఉండకుండా ఉంటే మంచిది; ఈ ఫైలు $2 ఉంది.', 'largefileserver' => 'ఈ ఫైలు సైజు సర్వరులో విధించిన పరిమితి కంటే ఎక్కువగా ఉంది.', 'emptyfile' => 'మీరు అప్‌లోడు చేసిన ఫైలు ఖాళీగా ఉన్నట్లుంది. ఫైలు పేరును ఇవ్వడంలో స్పెల్లింగు తప్పు దొర్లి ఉండొచ్చు. మీరు అప్‌లోడు చెయ్యదలచింది ఇదో కాదో నిర్ధారించుకోండి.', @@ -1474,13 +1505,14 @@ $1", ఇప్పటికీ మీ ఫైలుని ఎగుమతి చేయాలనుకుంటే, వెనక్కివెళ్ళి మరో పేరు వాడండి. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'ఈ ఫైలు క్రింద పేర్కొన్న {{PLURAL:$1|ఫైలుకి|ఫైళ్ళకి}} నకలు:', 'file-deleted-duplicate' => 'గతంలో ఈ ఫైలు లాంటిదే ఒక ఫైలుని ([[:$1]]) తొలగించివున్నారు. మీరు దీన్ని ఎగుమతి చేసేముందు ఆ ఫైలు యొక్క తొలగింపు చరిత్రని ఒక్కసారి చూడండి.', -'successfulupload' => 'అప్‌లోడు జయప్రదం', 'uploadwarning' => 'ఎక్కింపు హెచ్చరిక', 'uploadwarning-text' => 'ఫైలు వివరణని క్రింద మార్చి మళ్ళీ ప్రయత్నించండి.', 'savefile' => 'దస్త్రాన్ని భద్రపరచు', 'uploadedimage' => '"[[$1]]"ని ఎక్కించారు', 'overwroteimage' => '"[[$1]]" యొక్క కొత్త కూర్పును ఎక్కించారు', 'uploaddisabled' => 'క్షమించండి, అప్‌లోడు చెయ్యడం ప్రస్తుతానికి ఆపబడింది', +'copyuploaddisabled' => 'URL ద్వారా ఎక్కింపుని అశక్తం చేసారు.', +'uploadfromurl-queued' => 'మీ ఎక్కింపు వరుసలో ఉంది.', 'uploaddisabledtext' => 'ఫైళ్ళ ఎగుమతులను అచేతనం చేసారు.', 'php-uploaddisabledtext' => 'PHPలో ఫైలు ఎక్కింపులు అచేతనమై ఉన్నాయి. దయచేసి file_uploads అమరికని చూడండి.', @@ -1500,6 +1532,14 @@ $1", కొనసాగే ముందు ఈ ఫైలుని ఎక్కించడం సరియో కాదో చూసుకోండి. సౌలభ్యంకోసం ఈ ఫైలు యొక్క తొలగింపు చిట్టాని ఇక్కడ ఇస్తున్నాం:", 'filename-bad-prefix' => "మీరు అప్లోడు చేస్తున్న ఫైలు పేరు '''\"\$1\"''' తో మొదలవుతుంది. ఇది డిజిటల్ కెమెరాలు ఆటోమాటిగ్గా ఇచ్చే పేరు. మరింత వివరంగా ఉండే పేరును ఎంచుకోండి.", +'upload-success-subj' => 'అప్‌లోడు జయప్రదం', +'upload-success-msg' => '[$2] నుండి మీ ఎక్కింపు సఫలమైంది. అది ఇక్కడ అందుబాటులో ఉంది: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'ఎక్కింపు సమస్య', +'upload-failure-msg' => '[$2] నుండి మీ ఎక్కింపుతో ఏదో సమస్య ఉంది: + +$1', +'upload-warning-subj' => 'ఎక్కింపు హెచ్చరిక', +'upload-warning-msg' => '[$2] నుండి మీ ఎక్కింపులో ఏదో సమస్య ఉంది. దాన్ని సరిచేయడానికి మీరు తిరిగి [[Special:Upload/stash/$1|ఎక్కింపు ఫారానికి]] వెళ్ళవచ్చు.', 'upload-proto-error' => 'తప్పు ప్రోటోకోల్', 'upload-proto-error-text' => 'రిమోట్ అప్‌లోడులు చెయ్యాలంటే URLలు http:// లేదా ftp:// తో మొదలు కావాలి.', @@ -1560,6 +1600,7 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.', 'listfiles_search_for' => 'మీడియా పేరుకై వెతుకు:', 'imgfile' => 'ఫైలు', 'listfiles' => 'ఫైళ్ళ జాబితా', +'listfiles_thumb' => 'నఖచిత్రం', 'listfiles_date' => 'తేదీ', 'listfiles_name' => 'పేరు', 'listfiles_user' => 'వాడుకరి', @@ -1674,8 +1715,8 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.', 'statistics-edits' => '{{SITENAME}}ని మొదలుపెట్టినప్పటినుండి జరిగిన మార్పులు', 'statistics-edits-average' => 'పేజీకి సగటు మార్పులు', 'statistics-views-total' => 'మొత్తం వీక్షణలు', +'statistics-views-total-desc' => 'ఉనికిలో లేని పుటలకు మరియు ప్రత్యేక పుటలకు వచ్చిన సందర్శనలని కలుపలేదు', 'statistics-views-peredit' => 'ఒక మార్పుకి వీక్షణలు', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue పనుల వరుస] పొడవు', 'statistics-users' => 'నమోదైన [[Special:ListUsers|వాడుకర్లు]]', 'statistics-users-active' => 'క్రియాశీల వాడుకర్లు', 'statistics-users-active-desc' => 'గత {{PLURAL:$1|రోజు|$1 రోజుల}}లో ఒక్క చర్యైనా చేసిన వాడుకరులు', @@ -1686,15 +1727,15 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.', 'disambiguations-text' => "కింది పేజీలు '''అయోమయ నివృత్తి''' పేజీకి లింకవుతున్నాయి. కానీ అవి సంబంధిత పేజీకి నేరుగా లింకు అవాలి.
    [[MediaWiki:Disambiguationspage]] నుంది లింకు ఉన్న మూసను వాడే పేజీని అయోమయ నివృత్తి పేజీగా భావిస్తారు.", 'doubleredirects' => 'జంట దారిమార్పులు', -'doubleredirectstext' => 'ఒక దారిమార్పు పేజీ నుంచి ఇంకొక దారిమార్పు పేజీకి దారిమార్పు కలిగి వున్నా వ్యాసముల జాబితా ఇక్కడ ఉంటుంది. -ప్రతీ వరుసలోను మొదటి, రెండవ దారిమార్పు లింకులు, రెండో దారిమార్పు పేజీలోని వ్యాసపు మొదటి లైను ఉన్నాయి. మొదటి దారిమార్పు యొక్క అసలైన లక్ష్యం ఈ రెండో దారిమార్పు పేజీయే! -కొట్టివేయబడిన వాటిని సరిదిద్దడము పూర్తి అయినది', +'doubleredirectstext' => 'ఇతర దారిమార్పు పుటలకి తీసుకెళ్ళే దారిమార్పులని ఈ పుట చూపిస్తుంది. +ప్రతీ వరుసలో మొదటి మరియు రెండవ దారిమార్పులకు లంకెలు, ఆలానే రెండవ దారిమార్పు పుట యొక్క లక్ష్యం ఉన్నాయి. సాధారణంగా ఈ రెండవ దారిమార్పు యొక్క లక్ష్యమే "అసలైనది", అదే మొదటి దారిమార్పు యొక్క లక్ష్యంగా ఉండాలి. +కొట్టివేయబడిన పద్దులు పరిష్కరించబడ్డవి.', 'double-redirect-fixed-move' => '[[$1]]ని తరలించారు, అది ప్రస్తుతం [[$2]]కి దారిమార్పు.', 'double-redirect-fixer' => 'దారిమార్పు సరిద్దువారు', 'brokenredirects' => 'తెగిపోయిన దారిమార్పులు', 'brokenredirectstext' => 'కింది దారిమార్పులు లేని-పేజీలకు మళ్ళించుతున్నాయి:', -'brokenredirects-edit' => 'మార్చు', +'brokenredirects-edit' => 'సవరించు', 'brokenredirects-delete' => 'తొలగించు', 'withoutinterwiki' => 'భాషా లింకులు లేని పేజీలు', @@ -1711,6 +1752,8 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.', 'nmembers' => '{{PLURAL:$1|ఒక ఉపవర్గం/పేజీ/ఫైలు|$1 ఉపవర్గాలు/పేజీలు/ఫైళ్లు}}', 'nrevisions' => '{{PLURAL:$1|ఒక సంచిక|$1 సంచికలు}}', 'nviews' => '$1 {{PLURAL:$1|దర్శనము|దర్శనలు}}', +'nimagelinks' => '$1 {{PLURAL:$1|పుట|పుటల}}లో ఉపయోగించారు', +'ntransclusions' => '$1 {{PLURAL:$1|పుట|పుటల}}లో ఉపయోగించారు', 'specialpage-empty' => 'ఈ పేజీ ఖాళీగా ఉంది.', 'lonelypages' => 'అనాధ పేజీలు', 'lonelypagestext' => 'కింది పేజీలకు {{SITENAME}}లోని ఏ ఇతర పేజీ నుండి కూడా లింకులు లేవు లేదా ఇవి మరే ఇతర పేజీలోనూ కలపబడలేదు.', @@ -1750,7 +1793,7 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.', 'listusers-creationsort' => 'చేరిన తేదీ క్రమంలో చూపించు', 'usereditcount' => '$1 {{PLURAL:$1|మార్పు|మార్పులు}}', 'usercreated' => '$1న $2కి చేరారు', -'newpages' => 'కొత్త పుటలు', +'newpages' => 'కొత్త పేజీలు', 'newpages-username' => 'వాడుకరిపేరు:', 'ancientpages' => 'పాత పేజీలు', 'move' => 'తరలించు', @@ -1790,7 +1833,7 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.', 'prevpage' => 'మునుపటి పేజీ ($1)', 'allpagesfrom' => 'ఇక్కడ మొదలు పెట్టి పేజీలు చూపించు:', 'allpagesto' => 'ఇక్కడవరకు ఉన్న పేజీలు చూపించు:', -'allarticles' => 'అన్ని పుటలు', +'allarticles' => 'అన్ని పేజీలు', 'allinnamespace' => 'అన్ని పేజీలు ($1 namespace)', 'allnotinnamespace' => 'అన్ని పేజీలు ($1 నేంస్పేస్ లేనివి)', 'allpagesprev' => 'పూర్వపు', @@ -1866,33 +1909,39 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.', 'listgrouprights-removegroup-self-all' => 'స్వంత ఖాతా నుండి అన్ని సమూహాలనూ తొలగించుకోగలగడం', # E-mail user -'mailnologin' => 'పంపించవలసిన చిరునామా లేదు', -'mailnologintext' => 'ఇతరులకు ఈ-మెయిలు పంపించాలంటే, మీరు [[Special:UserLogin|లాగిన్‌]] అయి ఉండాలి, మరియు మీ [[Special:Preferences|అభిరుచుల]]లో సరైన ఈ-మెయిలు చిరునామా ఇచ్చి ఉండాలి.', -'emailuser' => 'ఈ వాడుకరికి ఈ-మెయిలుని పంపించండి', -'emailpage' => 'వాడుకరికి ఈ-మెయిలుని పంపించు', -'emailpagetext' => 'వాడుకరికి ఈమెయిలు సందేశము పంపించుటకు క్రింది ఫారంను ఉపయోగించవచ్చు. [[Special:Preferences|మీ వాడుకరి అభిరుచుల]]లో మీరిచ్చిన ఈ-మెయిలు చిరునామా "నుండి" ఆ సందేశం వచ్చినట్లుగా ఉంటుంది, కనుక వేగుని అందుకునేవారు నేరుగా మీకు జవాబివ్వగలుగుతారు.', -'usermailererror' => 'మెయిలు ఆబ్జెక్టు ఈ లోపాన్ని చూపింది:', -'defemailsubject' => '{{SITENAME}} ఈ-మెయిలు', -'noemailtitle' => 'ఈ-మెయిలు చిరునామా లేదు', -'noemailtext' => 'ఈ వాడుకరి సరైన ఈ-మెయిలు చిరునామాని ఇవ్వలేదు.', -'nowikiemailtitle' => 'ఈ-మెయిళ్ళను అనుమతించరు', -'nowikiemailtext' => 'ఇతర వాడుకరుల నుండి ఈ-మెయిళ్ళను అందుకోడానికి ఈ వాడుకరి సుముఖంగా లేరు.', -'email-legend' => 'మరో {{SITENAME}} వాడుకరికి వేగు పంపించండి', -'emailfrom' => 'ఎవరు:', -'emailto' => 'ఎవరికి:', -'emailsubject' => 'విషయం:', -'emailmessage' => 'సందేశం:', -'emailsend' => 'పంపించు', -'emailccme' => 'సందేశపు ఒక ప్రతిని నాకు ఈమెయిలు పంపు.', -'emailccsubject' => '$1 కు మీరు పంపిన సందేశపు ప్రతి: $2', -'emailsent' => 'ఈ-మెయిలు పంపించాం', -'emailsenttext' => 'మీ ఈ-మెయిలు సందేశం పంపబడింది.', -'emailuserfooter' => 'ఈ ఈ-మెయిలుని $2 కి {{SITENAME}} లోని "వాడుకరికి ఈమెయిలు" అనే సౌలభ్యం ద్వారా $1 పంపించారు.', +'mailnologin' => 'పంపించవలసిన చిరునామా లేదు', +'mailnologintext' => 'ఇతరులకు ఈ-మెయిలు పంపించాలంటే, మీరు [[Special:UserLogin|లాగిన్‌]] అయి ఉండాలి, మరియు మీ [[Special:Preferences|అభిరుచుల]]లో సరైన ఈ-మెయిలు చిరునామా ఇచ్చి ఉండాలి.', +'emailuser' => 'ఈ వాడుకరికి ఈ-మెయిలుని పంపించండి', +'emailpage' => 'వాడుకరికి ఈ-మెయిలుని పంపించు', +'emailpagetext' => 'వాడుకరికి ఈమెయిలు సందేశము పంపించుటకు క్రింది ఫారంను ఉపయోగించవచ్చు. [[Special:Preferences|మీ వాడుకరి అభిరుచుల]]లో మీరిచ్చిన ఈ-మెయిలు చిరునామా "నుండి" ఆ సందేశం వచ్చినట్లుగా ఉంటుంది, కనుక వేగుని అందుకునేవారు నేరుగా మీకు జవాబివ్వగలుగుతారు.', +'usermailererror' => 'మెయిలు ఆబ్జెక్టు ఈ లోపాన్ని చూపింది:', +'defemailsubject' => '{{SITENAME}} ఈ-మెయిలు', +'usermaildisabled' => 'వాడుకరి ఈ-మెయిళ్ళు అచేతనం చేసారు', +'usermaildisabledtext' => 'ఈ వికీలో మీరు ఇతర వాడుకరులకి ఈ-మెయిళ్ళని పంపించలేరు', +'noemailtitle' => 'ఈ-మెయిలు చిరునామా లేదు', +'noemailtext' => 'ఈ వాడుకరి సరైన ఈ-మెయిలు చిరునామాని ఇవ్వలేదు.', +'nowikiemailtitle' => 'ఈ-మెయిళ్ళను అనుమతించరు', +'nowikiemailtext' => 'ఇతర వాడుకరుల నుండి ఈ-మెయిళ్ళను అందుకోడానికి ఈ వాడుకరి సుముఖంగా లేరు.', +'email-legend' => 'మరో {{SITENAME}} వాడుకరికి వేగు పంపించండి', +'emailfrom' => 'ఎవరు:', +'emailto' => 'ఎవరికి:', +'emailsubject' => 'విషయం:', +'emailmessage' => 'సందేశం:', +'emailsend' => 'పంపించు', +'emailccme' => 'సందేశపు ఒక ప్రతిని నాకు ఈమెయిలు పంపు.', +'emailccsubject' => '$1 కు మీరు పంపిన సందేశపు ప్రతి: $2', +'emailsent' => 'ఈ-మెయిలు పంపించాం', +'emailsenttext' => 'మీ ఈ-మెయిలు సందేశం పంపబడింది.', +'emailuserfooter' => 'ఈ ఈ-మెయిలుని $2 కి {{SITENAME}} లోని "వాడుకరికి ఈమెయిలు" అనే సౌలభ్యం ద్వారా $1 పంపించారు.', + +# User Messenger +'usermessage-summary' => 'వ్యవస్థ సందేశాన్ని వదిలివేస్తున్నాం.', +'usermessage-editor' => 'వ్యవస్థ సందేశకులు', # Watchlist 'watchlist' => 'నా వీక్షణ జాబితా', 'mywatchlist' => 'నా వీక్షణ జాబితా', -'watchlistfor' => "('''$1''' కొరకు)", +'watchlistfor2' => '$1 కొరకు $2', 'nowatchlist' => 'మీ వీక్షణ జాబితా ఖాళీగా ఉంది.', 'watchlistanontext' => 'మీ వీక్షణ జాబితా లోని అంశాలను చూసేందుకు లేదా మార్చేందుకు మీరు $1 ఉండాలి.', 'watchnologin' => 'లాగిన్‌ అయిలేరు', @@ -1904,7 +1953,7 @@ http://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.', 'removedwatchtext' => '"[[:$1]]" అనే పేజీ [[Special:Watchlist|మీ వీక్షణ జాబితా]] నుండి తొలగించబడినది.', 'watch' => 'వీక్షించు', 'watchthispage' => 'ఈ పుట మీద కన్నేసి ఉంచు', -'unwatch' => 'వీక్షించ వద్దు', +'unwatch' => 'వీక్షించవద్దు', 'unwatchthispage' => 'వీక్షణను ఆపు', 'notanarticle' => 'వ్యాసం పేజీ కాదు', 'notvisiblerev' => 'ఈ కూర్పును తొలగించాం', @@ -1962,7 +2011,7 @@ $UNWATCHURL కి వెళ్ళండి. {{fullurl:{{MediaWiki:helppage}}}}', # Delete -'deletepage' => 'పుటని తొలగించు', +'deletepage' => 'పేజీని తొలగించు', 'confirm' => 'ధృవీకరించు', 'excontent' => "ఇదివరకు విషయ సంగ్రహం: '$1'", 'excontentauthor' => 'ఉన్న విషయ సంగ్రహం: "$1" (మరియు దీని ఒకే ఒక్క రచయిత "[[Special:Contributions/$2|$2]]")', @@ -2006,7 +2055,10 @@ $UNWATCHURL కి వెళ్ళండి. 'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|చర్చ]]) చేసిన మార్పులను [[User:$1|$1]] యొక్క చివరి కూర్పు వరకు తిప్పికొట్టారు.', 'revertpage-nouser' => '(తొలగించిన వాడుకరిపేరు) చేసిన మార్పులను [[User:$1|$1]] యొక్క చివరి కూర్పుకి తిప్పికొట్టారు', 'rollback-success' => '$1 చేసిన దిద్దుబాట్లను వెనక్కు తీసుకెళ్ళాం; తిరిగి $2 చేసిన చివరి కూర్పుకు మార్చాం.', -'sessionfailure' => 'మీ ప్రవేశపు సెషనుతో ఏదో సమస్య ఉన్నట్లుంది; + +# Edit tokens +'sessionfailure-title' => 'సెషను వైఫల్యం', +'sessionfailure' => 'మీ ప్రవేశపు సెషనుతో ఏదో సమస్య ఉన్నట్లుంది; సెషను హైజాకు కాకుండా ఈ చర్యను రద్దు చేసాం. "back" కొట్టి, ఎక్కడి నుండి వచ్చారో ఆ పేజీని మళ్ళీ లోడు చేసి, తిరిగి ప్రయత్నించండి.', @@ -2132,24 +2184,28 @@ $UNWATCHURL కి వెళ్ళండి. 'month' => 'ఈ నెల నుండి (అంతకు ముందువి):', 'year' => 'ఈ సంవత్సరం నుండి (అంతకు ముందువి):', -'sp-contributions-newbies' => 'కొత్త ఖాతాల యొక్క రచనలని మాత్రమే చూపించు', -'sp-contributions-newbies-sub' => 'కొత్తవారి కోసం', -'sp-contributions-newbies-title' => 'కొత్త ఖాతాల వాడుకరుల మార్పుచేర్పులు', -'sp-contributions-blocklog' => 'నిరోధాల చిట్టా', -'sp-contributions-deleted' => 'తొలగించబడిన వాడుకరి రచనలు', -'sp-contributions-logs' => 'చిట్టాలు', -'sp-contributions-talk' => 'చర్చ', -'sp-contributions-userrights' => 'వాడుకరి హక్కుల నిర్వహణ', -'sp-contributions-blocked-notice' => 'ఈ వాడుకరిపై ప్రస్తుతం నిరోధం ఉంది. +'sp-contributions-newbies' => 'కొత్త ఖాతాల యొక్క రచనలని మాత్రమే చూపించు', +'sp-contributions-newbies-sub' => 'కొత్తవారి కోసం', +'sp-contributions-newbies-title' => 'కొత్త ఖాతాల వాడుకరుల మార్పుచేర్పులు', +'sp-contributions-blocklog' => 'నిరోధాల చిట్టా', +'sp-contributions-deleted' => 'తొలగించబడిన వాడుకరి రచనలు', +'sp-contributions-uploads' => 'ఎక్కింపులు', +'sp-contributions-logs' => 'చిట్టాలు', +'sp-contributions-talk' => 'చర్చ', +'sp-contributions-userrights' => 'వాడుకరి హక్కుల నిర్వహణ', +'sp-contributions-blocked-notice' => 'ఈ వాడుకరిపై ప్రస్తుతం నిరోధం ఉంది. నిరోధపు చిట్టాలోని చివరి పద్దుని మీ సమాచారంకోసం ఇస్తున్నాం:', -'sp-contributions-search' => 'రచనల కోసం అన్వేషణ', -'sp-contributions-username' => 'ఐపీ చిరునామా లేదా వాడుకరిపేరు:', -'sp-contributions-submit' => 'వెతుకు', +'sp-contributions-blocked-notice-anon' => 'ఈ ఐపీ చిరునామాపై ప్రస్తుతం నిరోధం ఉంది. +నిరోధపు చిట్టాలోని చివరి పద్దుని మీ సమాచారంకోసం ఇస్తున్నాం:', +'sp-contributions-search' => 'రచనల కోసం అన్వేషణ', +'sp-contributions-username' => 'ఐపీ చిరునామా లేదా వాడుకరిపేరు:', +'sp-contributions-toponly' => 'చిట్టచివరి కూర్పులను మాత్రమే చూపించు', +'sp-contributions-submit' => 'వెతుకు', # What links here 'whatlinkshere' => 'ఇక్కడికి లంకెలున్న పుటలు', 'whatlinkshere-title' => '"$1"కి లింకున్న పుటలు', -'whatlinkshere-page' => 'పుట:', +'whatlinkshere-page' => 'పేజీ:', 'linkshere' => "కిందనున్న పేజీల నుండి '''[[:$1]]'''కు లింకులు ఉన్నాయి:", 'nolinkshere' => "'''[[:$1]]'''కు ఏ పేజీ నుండీ లింకు లేదు.", 'nolinkshere-ns' => "'''[[:$1]]''' పేజీకి లింకయ్యే పేజీలు ఎంచుకున్న నేంస్పేసులో లేవు.", @@ -2206,7 +2262,6 @@ $UNWATCHURL కి వెళ్ళండి. 'ipb-edit-dropdown' => 'నిరోధపు కారణాలను మార్చండి', 'ipb-unblock-addr' => '$1 పై ఉన్న నిరోధాన్ని తొలగించండి', 'ipb-unblock' => 'వాడుకరిపేరు లేక ఐపీ అడ్రసుపై ఉన్న నిరోధాన్ని తొలగించండి', -'ipb-blocklist-addr' => '$1 పై ఉన్న నిరోధాలు', 'ipb-blocklist' => 'అమల్లో ఉన్న నిరోధాలను చూపించు', 'ipb-blocklist-contribs' => '$1 యొక్క మార్పులు-చేర్పులు', 'unblockip' => 'సభ్యునిపై నిరోధాన్ని తొలగించు', @@ -2275,6 +2330,8 @@ $1ని ఇప్పటికే నిరోధించారు. ఆ అమ 'sorbs_create_account_reason' => 'మీ ఐపీ అడ్రసు DNSBL లో ఓపెను ప్రాక్సీగా నమోదయి ఉంది. మీరు ఎకౌంటును సృష్టించజాలరు.', 'cant-block-while-blocked' => 'నిరోధంలో ఉన్న మీరు ఇతర వాడుకరులపై నిరోధం అమలుచేయలేరు.', 'cant-see-hidden-user' => 'మీరు నిరోధించదలచిన వాడుకరి ఇప్పటికే నిరోధించబడి, దాచబడి ఉన్నారు. మీకు హక్కు లేదు కాబట్టి, ఆ వాడుకరి నిరోధాన్ని చూడటంగానీ, దాన్ని మార్చడంగానీ చెయ్యలేరు.', +'ipbblocked' => 'మీరు ఇతర వాడుకరులని నిరోధించలేరు లేదా అనిరోధించలేరు, ఎందుకంటే మిమ్మల్ని మీరే నిరోధించుకున్నారు', +'ipbnounblockself' => 'మిమ్మల్ని మీరే అనిరోధించుకునే అనుమతి మీకు లేదు', # Developer tools 'lockdb' => 'డాటాబేసును లాక్‌ చెయ్యి', @@ -2312,6 +2369,16 @@ $1ని ఇప్పటికే నిరోధించారు. ఆ అమ '''హెచ్చరిక!''' ఈ మార్పు బాగా జనరంజకమైన పేజీలకు అనూహ్యం కావచ్చు; దాని పరిణామాలను అర్ధం చేసుకుని ముందుకుసాగండి.", +'movepagetext-noredirectfixer' => "కింది ఫారాన్ని వాడి, ఓ పేజీ పేరు మార్చవచ్చు. దాని చరిత్ర పూర్తిగా కొత్త పేరుకు తరలిపోతుంది. +పాత శీర్షిక కొత్తదానికి దారిమార్పు పేజీగా మారిపోతుంది. +[[Special:DoubleRedirects|double]] లేదా [[Special:BrokenRedirects|broken redirects]] లను చూడటం మరువకండి. +లింకులు వెళ్ళాల్సిన చోటికి వెళ్తున్నాయని నిర్ధారించుకోవాల్సిన బాధ్యత మీదే. +కొత్త పేరుతో ఈసరికే ఏదైనా పేజీ ఉంటే - అది ఖాళీగా ఉన్నా లేక మార్పుచేర్పుల చరిత్ర ఏమీ లేని దారిమార్పు పేజీ అయినా తప్ప- తరలింపు ’’’జరుగదు’’’ అని గమనించండి. +అంటే, ఏదైనా పొరపాటు జరిగితే పేరును తిరిగి పాత పేరుకే మార్చగలరు తప్ప, ఈపాటికే ఉన్న పేజీపై ఓవరరైటు చెయ్యలేరు. + +'''హెచ్చరిక!''' +బహుళ వ్యాప్తి పొందిన ఓ పేజీలో ఈ మార్పు చాలా తీవ్రమైనది, ఊహించనిదీ అవుతుంది. +దాని పర్యవసానాలు అర్థం చేసుకున్నాకే ముందుకు వెళ్ళండి.", 'movepagetalktext' => "దానితో పాటు సంబంధిత చర్చా పేజీ కూడా ఆటోమాటిక్‌‌గా తరలించబడుతుంది, '''కింది సందర్భాలలో తప్ప:''' *ఒక నేంస్పేసు నుండి ఇంకోదానికి తరలించేటపుడు, *కొత్త పేరుతో ఇప్పటికే ఒక చర్చా పేజీ ఉంటే, @@ -2367,6 +2434,7 @@ $1ని ఇప్పటికే నిరోధించారు. ఆ అమ 'immobile-source-page' => 'ఈ పేజీని తరలించలేరు.', 'immobile-target-page' => 'ఆ లక్ష్యిత శీర్షికకి తరలించలేము.', 'imagenocrossnamespace' => 'ఫైలును, ఫైలుకు చెందని నేమ్‌స్పేసుకు తరలించలేం', +'nonfile-cannot-move-to-file' => 'దస్త్రాలు కానివాటిని దస్త్రపు పేరుబరికి తరలించలేరు', 'imagetypemismatch' => 'ఈ కొత్త ఫైలు ఎక్స్‌టెన్షన్ ఫైలు రకానికి సరిపోలేదు', 'imageinvalidfilename' => 'లక్ష్యిత దస్త్రపు పేరు చెల్లనిది', 'fix-double-redirects' => 'పాత పేజీని సూచిస్తున్న దారిమార్పులను తాజాకరించు', @@ -2404,14 +2472,14 @@ $1ని ఇప్పటికే నిరోధించారు. ఆ అమ 'allmessagesname' => 'పేరు', 'allmessagesdefault' => 'డీఫాల్టు పాఠ్యం', 'allmessagescurrent' => 'ప్రస్తుత పాఠ్యం', -'allmessagestext' => 'మీడియావికీ నేంస్పేసులో ఉన్న అన్ని సిస్టం సందేశాల జాబితా ఇది. -మీరు అన్ని వికీపీడియాలకూ కలిపి ఒకేసారి అనువదించాలని అనుకుంటే, దయచేసి [http://www.mediawiki.org/wiki/Localisation మీడియావికీ అనువాదం] మరియూ [http://translatewiki.net బేటావికీ] సైట్లను చూడండి.', +'allmessagestext' => 'మీడియావికీ పేరుబరిలో ఉన్న అంతరవర్తి సందేశాల జాబితా ఇది. +సాధారణ మీడియావికీ స్థానికీకరణకి మీరు తోడ్పడాలనుకుంటే, దయచేసి [http://www.mediawiki.org/wiki/Localisation మీడియావికీ స్థానికీకరణ] మరియు [http://translatewiki.net ట్రాన్స్‌లేట్‌వికీ.నెట్] సైట్లను చూడండి.', 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' అన్నది అచేతనం చేసి ఉన్నందువల్ల ఈ పేజీని వాడలేరు.", 'allmessages-filter-legend' => 'వడపోత', 'allmessages-filter' => 'కస్టమైజేషను స్థితిని బట్టి వడకట్టు:', -'allmessages-filter-unmodified' => 'మార్చాబడనిది', +'allmessages-filter-unmodified' => 'మార్చబడనివి', 'allmessages-filter-all' => 'అన్నీ', -'allmessages-filter-modified' => 'మార్చబడినది', +'allmessages-filter-modified' => 'మార్చబడినవి', 'allmessages-prefix' => 'ఉపసర్గ పై వడపోత:', 'allmessages-language' => 'భాష:', 'allmessages-filter-submit' => 'వెళ్ళు', @@ -2446,6 +2514,7 @@ $1ని ఇప్పటికే నిరోధించారు. ఆ అమ 'importstart' => 'పేజీలను దిగుమతి చేస్తున్నాం...', 'import-revision-count' => '$1 {{PLURAL:$1|కూర్పు|కూర్పులు}}', 'importnopages' => 'దిగుమతి చెయ్యడానికి పేజీలేమీ లేవు.', +'imported-log-entries' => '$1 {{PLURAL:$1|చిట్టా పద్దు దిగుమతయ్యింది|చిట్టా పద్దులు దిగుమతయ్యాయి}}.', 'importfailed' => 'దిగుమతి కాలేదు: $1', 'importunknownsource' => 'దిగుమతి చేసుకుంటున్న దాని మాతృక రకం తెలియదు', 'importcantopen' => 'దిగుమతి చేయబోతున్న ఫైలును తెరవలేకపోతున్నాను', @@ -2502,8 +2571,8 @@ $1ని ఇప్పటికే నిరోధించారు. ఆ అమ 'tooltip-search-go' => 'ఇదే పేరుతో పేజీ ఉంటే అక్కడికి తీసుకెళ్ళు', 'tooltip-search-fulltext' => 'పేజీలలో ఈ పాఠ్యం కొరకు వెతుకు', 'tooltip-p-logo' => 'మొదటి పుటను దర్శించండి', -'tooltip-n-mainpage' => 'మొదటి పుటని దర్శించండి', -'tooltip-n-mainpage-description' => 'మొదటి పుటని దర్శించండి', +'tooltip-n-mainpage' => 'మొదటి పేజీని దర్శించండి', +'tooltip-n-mainpage-description' => 'మొదటి పేజీని దర్శించండి', 'tooltip-n-portal' => 'ప్రాజెక్టు గురించి, మీరేం చేయవచ్చు, సమాచారం ఎక్కడ దొరుకుతుంది', 'tooltip-n-currentevents' => 'వర్తమాన ఘటనలకు సంబంధించిన సమాచారాన్ని పొందండి.', 'tooltip-n-recentchanges' => 'వికీలో ఇటీవల జరిగిన మార్పుల జాబితా.', @@ -2540,6 +2609,8 @@ $1ని ఇప్పటికే నిరోధించారు. ఆ అమ 'tooltip-rollback' => '"రద్దుచేయి" అనేది ఈ పేజీని చివరిగా మార్చినవారి మార్పులని రద్దుచేస్తుంది', 'tooltip-undo' => '"దిద్దుబాటుని రద్దుచేయి" ఈ మార్పుని రద్దుచేస్తుంది మరియు దిద్దుబాటు ఫారాన్ని మునుజూపులో తెరుస్తుంది. సారాంశానికి కారణాన్ని చేర్చే వీలుకల్పిస్తుంది', +'tooltip-preferences-save' => 'అభిరుచులను భద్రపరచు', +'tooltip-summary' => 'చిన్న సారాంశాన్ని ఇవ్వండి', # Metadata 'nodublincore' => 'డబ్లిన్ కోర్ RDF మెటాడేటాను ఈ సర్వరుకు అశక్తం చేసాం.', @@ -2645,14 +2716,17 @@ $1', 'imagemaxsize' => "బొమ్మ పరిమాణంపై పరిమితి:
    ''(దస్త్రపు వివరణ పుటల కొరకు)''", 'thumbsize' => 'నఖచిత్రం వైశాల్యం:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|పేజీ|పేజీలు}}', -'file-info' => '(ఫైలు పరిమాణం: $1, MIME రకం: $2)', -'file-info-size' => '($1 × $2 పిక్సెళ్ళు, ఫైలు పరిమాణం: $3, MIME రకం: $4)', +'file-info' => 'ఫైలు పరిమాణం: $1, MIME రకం: $2', +'file-info-size' => '$1 × $2 పిక్సెళ్ళు, ఫైలు పరిమాణం: $3, MIME రకం: $4', 'file-nohires' => 'మరింత స్పష్టమైన బొమ్మ లేదు.', -'svg-long-desc' => '(SVG ఫైలు, నామమాత్రంగా $1 × $2 పిక్సెళ్ళు, ఫైలు పరిమాణం: $3)', +'svg-long-desc' => 'SVG ఫైలు, నామమాత్రంగా $1 × $2 పిక్సెళ్ళు, ఫైలు పరిమాణం: $3', 'show-big-image' => 'అసలు పరిమాణం', 'show-big-image-thumb' => 'ఈ మునుజూపు సైజు: $1 × $2 pixels', 'file-info-gif-looped' => 'లూపులో పడింది', 'file-info-gif-frames' => '$1 {{PLURAL:$1|ఫ్రేము|ఫ్రేములు}}', +'file-info-png-looped' => 'పునరావృతమవుతుంది', +'file-info-png-repeat' => '{{PLURAL:$1|ఒకసారి|$1 సార్లు}} ఆడించారు', +'file-info-png-frames' => '$1 {{PLURAL:$1|ఫ్రేము|ఫ్రేములు}}', # Special:NewFiles 'newimages' => 'కొత్త ఫైళ్ళ కొలువు', @@ -2807,6 +2881,7 @@ $1', 'exif-gpsareainformation' => 'GPS ప్రదేశం యొక్క పేరు', 'exif-gpsdatestamp' => 'GPS తేదీ', 'exif-gpsdifferential' => 'GPS తేడా సవరణ', +'exif-objectname' => 'పొట్టి శీర్షిక', # EXIF attributes 'exif-compression-1' => 'కుదించని', @@ -2888,6 +2963,8 @@ $1', 'exif-sensingmethod-7' => 'త్రిసరళరేఖా సెన్సర్', 'exif-sensingmethod-8' => 'వర్ణ అనుక్రమ రేఖా సెన్సర్', +'exif-filesource-3' => 'సాంఖ్యీక సాధారణ కెమెరా', + 'exif-scenetype-1' => 'ఎటువంటి హంగులూ లేకుండా ఫొటోతీయబడిన బొమ్మ', 'exif-customrendered-0' => 'సాధారణ ప్రక్రియ', @@ -2964,27 +3041,27 @@ $1', 'limitall' => 'అన్నీ', # E-mail address confirmation -'confirmemail' => 'ఈ-మెయిలు చిరునామా ధృవీకరించండి', -'confirmemail_noemail' => '[[Special:Preferences|మీ అభిరుచులలో]] ఈమెయిలు అడ్రసు పెట్టి లేదు.', -'confirmemail_text' => '{{SITENAME}}లో ఈ-మెయిలు అంశాల్ని వాడుకునే ముందు మీ ఈ-మెయిలు చిరునామాను నిర్ధారించవలసిన అవసరం ఉంది. +'confirmemail' => 'ఈ-మెయిలు చిరునామా ధృవీకరించండి', +'confirmemail_noemail' => '[[Special:Preferences|మీ అభిరుచులలో]] ఈమెయిలు అడ్రసు పెట్టి లేదు.', +'confirmemail_text' => '{{SITENAME}}లో ఈ-మెయిలు అంశాల్ని వాడుకునే ముందు మీ ఈ-మెయిలు చిరునామాను నిర్ధారించవలసిన అవసరం ఉంది. కింది మీటను నొక్కగానే మీరిచ్చిన చిరునామాకు ధృవీకరణ మెయిలు వెళ్తుంది. ఆ మెయిల్లో ఒక సంకేతం కలిగిన ఒక లింకు ఉంటుంది; ఆ లింకును మీ బ్రౌజరులో తెరవండి. ఈ-మెయిలు చిరునామా ధృవీకరణ అయిపోతుంది.', -'confirmemail_pending' => 'ఒక నిర్ధారణ కోడుని మీకు ఇప్పటికే ఈ-మెయిల్లో పంపించాం; కొద్దిసేపటి క్రితమే మీ ఖాతా సృష్టించి ఉంటే, కొత్త కొడు కోసం అభ్యర్థన పంపేముందు కొద్ది నిమిషాలు వేచిచూడండి.', -'confirmemail_send' => 'ఒక ధృవీకరణ సంకేతాన్ని పంపించు', -'confirmemail_sent' => 'ధృవీకరణ ఈ-మెయిలును పంపబడినది', -'confirmemail_oncreate' => 'మీ ఈ-మెయిలు చిరునామాకి ఒక ధృవీకరణ సంకేతాన్ని పంపించాం. +'confirmemail_pending' => 'ఒక నిర్ధారణ కోడుని మీకు ఇప్పటికే ఈ-మెయిల్లో పంపించాం; కొద్దిసేపటి క్రితమే మీ ఖాతా సృష్టించి ఉంటే, కొత్త కొడు కోసం అభ్యర్థన పంపేముందు కొద్ది నిమిషాలు వేచిచూడండి.', +'confirmemail_send' => 'ఒక ధృవీకరణ సంకేతాన్ని పంపించు', +'confirmemail_sent' => 'ధృవీకరణ ఈ-మెయిలును పంపబడినది', +'confirmemail_oncreate' => 'మీ ఈ-మెయిలు చిరునామాకి ఒక ధృవీకరణ సంకేతాన్ని పంపించాం. లోనికి ప్రవేశించేందుకు ఆ సంకేతం అవసరంలేదు, కానీ ఈ వికీలో ఈ-మెయిలు ఆధారిత సౌలభ్యాలను చేతనం చేసేముందు దాన్ని ఇవ్వవలసి ఉంటుంది.', -'confirmemail_sendfailed' => '{{SITENAME}} మీ నిర్ధారణ మెయిలుని పంపలేకపోయింది. +'confirmemail_sendfailed' => '{{SITENAME}} మీ నిర్ధారణ మెయిలుని పంపలేకపోయింది. మీ ఈమెయిల్ చిరునామాలో తప్పులున్నాయేమో సరిచూసుకోండి. మెయిలరు ఇలా చెప్పింది: $1', -'confirmemail_invalid' => 'ధృవీకరణ సంకేతం సరైనది కాదు. దానికి కాలం చెల్లి ఉండవచ్చు.', -'confirmemail_needlogin' => 'మీ ఈమెయిలు చిరునామాని దృవపరచటానికి మీరు $1 ఉండాలి.', -'confirmemail_success' => 'మీ ఈ-మెయిలు చిరునామా ధృవీకరించబడింది. +'confirmemail_invalid' => 'ధృవీకరణ సంకేతం సరైనది కాదు. దానికి కాలం చెల్లి ఉండవచ్చు.', +'confirmemail_needlogin' => 'మీ ఈమెయిలు చిరునామాని దృవపరచటానికి మీరు $1 ఉండాలి.', +'confirmemail_success' => 'మీ ఈ-మెయిలు చిరునామా ధృవీకరించబడింది. ఇక [[Special:UserLogin|లోనికి ప్రవేశించి]] వికీని అస్వాదించండి.', -'confirmemail_loggedin' => 'మీ ఈ-మెయిలు చిరునామా ఇప్పుడు రూఢి అయింది.', -'confirmemail_error' => 'మీ ధృవీకరణను భద్రపరచడంలో ఏదో లోపం జరిగింది.', -'confirmemail_subject' => '{{SITENAME}} ఈ-మెయిలు చిరునామా ధృవీకరణ', -'confirmemail_body' => '$1 ఐపీ చిరునామా నుండి ఎవరో, బహుశా మీరే, +'confirmemail_loggedin' => 'మీ ఈ-మెయిలు చిరునామా ఇప్పుడు రూఢి అయింది.', +'confirmemail_error' => 'మీ ధృవీకరణను భద్రపరచడంలో ఏదో లోపం జరిగింది.', +'confirmemail_subject' => '{{SITENAME}} ఈ-మెయిలు చిరునామా ధృవీకరణ', +'confirmemail_body' => '$1 ఐపీ చిరునామా నుండి ఎవరో, బహుశా మీరే, {{SITENAME}}లో "$2" అనే ఖాతాని ఈ ఈ-మెయిలు చిరునామాతో నమోదుచేసుకున్నారు. ఆ ఖాతా నిజంగా మీదే అని నిర్ధారించేందుకు మరియు {{SITENAME}}లో ఈ-మెయిలు సౌలభ్యాలని @@ -2997,8 +3074,22 @@ $3 $5 ఈ నిర్ధారణా సంకేతం $4కి కాలంచెల్లుతుంది.', -'confirmemail_invalidated' => 'ఈ-మెయిలు చిరునామా నిర్ధారణని రద్దుచేసాం', -'invalidateemail' => 'ఈ-మెయిలు నిర్ధారణని రద్దుచేయండి', +'confirmemail_body_changed' => '$1 ఐపీ చిరునామా నుండి ఎవరో, బహుశా మీరే, +{{SITENAME}}లో "$2" అనే ఖాతా యొక్క ఈ-మెయిలు చిరునామాని ఈ చిరునామాకి మార్చారు. + +ఆ ఖాతా నిజంగా మీదే అని నిర్ధారించేందుకు మరియు {{SITENAME}}లో +ఈ-మెయిలు సౌలభ్యాలని పునఃచేతనం చేసుకునేందుకు, ఈ లంకెని మీ విహారిణిలో తెరవండి: + +$3 + +ఒకవేళ ఆ ఖాతా మీది *కాకపోతే*, ఈ-మెయిలు చిరునామా నిర్ధారణని రద్దుచేసేందుకు +ఈ లంకెని అనుసరించండి: + +$5 + +ఈ నిర్ధారణా సంకేతం $4కి కాలంచెల్లుతుంది.', +'confirmemail_invalidated' => 'ఈ-మెయిలు చిరునామా నిర్ధారణని రద్దుచేసాం', +'invalidateemail' => 'ఈ-మెయిలు నిర్ధారణని రద్దుచేయండి', # Scary transclusion 'scarytranscludedisabled' => '[ఇతరవికీల మూసలను ఇక్కడ వాడటాన్ని అనుమతించటం లేదు]', @@ -3034,9 +3125,10 @@ $1', 'descending_abbrev' => 'అవరోహణ', 'table_pager_next' => 'తరువాతి పేజీ', 'table_pager_prev' => 'ముందరి పేజీ', -'table_pager_first' => 'మొదటి పుట', +'table_pager_first' => 'మొదటి పేజీ', 'table_pager_last' => 'చివరి పేజీ', 'table_pager_limit' => 'పేజీకి $1 అంశాలను చూపించు', +'table_pager_limit_label' => 'పేజీకి ఎన్ని అంశాలు:', 'table_pager_limit_submit' => 'వెళ్ళు', 'table_pager_empty' => 'ఫలితాలు లేవు', @@ -3092,6 +3184,7 @@ $1', 'version-specialpages' => 'ప్రత్యేక పేజీలు', 'version-parserhooks' => 'పార్సరు కొక్కాలు', 'version-variables' => 'చరరాశులు', +'version-skins' => 'అలంకారాలు', 'version-other' => 'ఇతర', 'version-mediahandlers' => 'మీడియాను ఫైళ్లను నడిపించే పొడిగింపులు', 'version-hooks' => 'కొక్కాలు', @@ -3103,6 +3196,13 @@ $1', 'version-hook-subscribedby' => 'ఉపయోగిస్తున్నవి', 'version-version' => '(సంచిక $1)', 'version-license' => 'లైసెన్సు', +'version-poweredby-credits' => "ఈ వికీ '''[http://www.mediawiki.org/ మీడియావికీ]'''చే శక్తిమంతం, కాపీహక్కులు © 2001-$1 $2.", +'version-poweredby-others' => 'ఇతరులు', +'version-license-info' => 'మీడియావికీ అన్నది స్వేచ్ఛా మృదూపకరణం; మీరు దీన్ని పునఃపంపిణీ చేయవచ్చు మరియు/లేదా ఫ్రీ సాఫ్ట్‌వేర్ ఫౌండేషన్ ప్రచురించిన గ్నూ జనరల్ పబ్లిక్ లైసెస్సు వెర్షను 2 లేదా (మీ ఎంపిక ప్రకారం) అంతకంటే కొత్త వెర్షను యొక్క నియమాలకు లోబడి మార్చుకోవచ్చు. + +మీడియావికీ ప్రజోపయోగ ఆకాంక్షతో పంపిణీ చేయబడుతుంది, కానీ ఎటువంటి వారంటీ లేకుండా; కనీసం ఏదైనా ప్రత్యేక ఉద్దేశానికి సరిపడుతుందని గానీ లేదా వస్తుత్వం యొక్క అంతర్నిహిత వారంటీ లేకుండా. మరిన్ని వివరాలకు గ్నూ జనరల్ పబ్లిక్ లైసెన్సుని చూడండి. + +ఈ ఉపకరణంతో పాటు మీకు [{{SERVER}}{{SCRIPTPATH}}/COPYING గ్నూ జనరల్ పబ్లిక్ లైసెన్సు యొక్క ఒక కాపీ] అందివుండాలి; లేకపోతే, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA అన్న చిరునామాకి వ్రాయండి లేదా [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html జాలం లోనే చదవండి].', 'version-software' => 'ప్రవేశపెట్టిన సాఫ్టువేర్లు', 'version-software-product' => 'ప్రోడక్టు', 'version-software-version' => 'వెర్షను', @@ -3127,7 +3227,7 @@ $1', 'fileduplicatesearch-result-n' => '"$1" అనే పేరుగల ఫైలుకు {{PLURAL:$2|ఒక మారుప్రతి ఉంది|$2 మారుప్రతులున్నాయి}}.', # Special:SpecialPages -'specialpages' => 'ప్రత్యేక పుటలు', +'specialpages' => 'ప్రత్యేక పేజీలు', 'specialpages-note' => '---- * మామూలు ప్రత్యేక పేజీలు. * నియంత్రిత ప్రత్యేక పేజీలు.', @@ -3171,6 +3271,15 @@ $1', 'tags-edit' => 'మార్చు', 'tags-hitcount' => '$1 {{PLURAL:$1|మార్పు|మార్పులు}}', +# Special:ComparePages +'comparepages' => 'పుటల పోలిక', +'compare-selector' => 'పుట కూర్పుల పోలిక', +'compare-page1' => 'పుట 1', +'compare-page2' => 'పుట 2', +'compare-rev1' => 'కూర్పు 1', +'compare-rev2' => 'కూర్పు 2', +'compare-submit' => 'పోల్చిచూడు', + # Database error messages 'dberr-header' => 'ఈ వికీ సమస్యాత్మకంగా ఉంది', 'dberr-problems' => 'క్షమించండి! ఈ సైటు సాంకేతిక సమస్యలని ఎదుర్కొంటుంది.', @@ -3187,8 +3296,13 @@ $1', 'htmlform-float-invalid' => 'మీరిచ్చిన విలువ ఒక సంఖ్య కాదు.', 'htmlform-int-toolow' => 'మీరిచ్చిన విలువ $1 యొక్క కనిష్ఠ విలువ కంటే తక్కువగా ఉంది.', 'htmlform-int-toohigh' => 'మీరిచ్చిన విలువ $1 యొక్క గరిష్ఠ విలువకంటే ఎక్కవగా ఉంది.', +'htmlform-required' => 'ఈ విలువ తప్పనిసరి', 'htmlform-submit' => 'దాఖలుచెయ్యి', 'htmlform-reset' => 'మార్పులను రద్దుచెయ్యి', 'htmlform-selectorother-other' => 'ఇతర', +# SQLite database support +'sqlite-has-fts' => '$1 పూర్తి-పాఠ్య అన్వేషణ తోడ్పాటుతో', +'sqlite-no-fts' => '$1 పూర్తి-పాఠ్య అన్వేషణ తోడ్పాటు లేకుండా', + ); diff --git a/languages/messages/MessagesTet.php b/languages/messages/MessagesTet.php index 7d38545a..60a1cfab 100644 --- a/languages/messages/MessagesTet.php +++ b/languages/messages/MessagesTet.php @@ -38,35 +38,36 @@ $namespaceAliases = array( $specialPageAliases = array( 'CreateAccount' => array( 'Rejista' ), 'Preferences' => array( 'Preferénsia' ), - 'Watchlist' => array( 'Lista hateke' ), - 'Recentchanges' => array( 'Mudansa foufoun sira' ), - 'Upload' => array( 'Tau iha arkivu laran' ), - 'Listfiles' => array( 'Lista imajen' ), - 'Newimages' => array( 'Imajen foun' ), - 'Listusers' => array( 'Lista uza-na\'in' ), + 'Watchlist' => array( 'Lista_hateke' ), + 'Recentchanges' => array( 'Mudansa_foufoun_sira' ), + 'Upload' => array( 'Tau_iha_arkivu_laran' ), + 'Listfiles' => array( 'Lista_imajen' ), + 'Newimages' => array( 'Imajen_foun' ), + 'Listusers' => array( 'Lista_uza-na\'in' ), 'Statistics' => array( 'Estatístika' ), - 'Randompage' => array( 'Pájina ruma' ), - 'Shortpages' => array( 'Pájina badak' ), - 'Longpages' => array( 'Pájina naruk' ), - 'Protectedpages' => array( 'Pájina sira-ne\'ebé proteje tiha' ), - 'Allpages' => array( 'Pájina hotu' ), - 'Ipblocklist' => array( 'Lista ema sira-ne\'ebé blokeiu tiha' ), - 'Specialpages' => array( 'Pájina espesiál sira' ), + 'Randompage' => array( 'Pájina_ruma' ), + 'Shortpages' => array( 'Pájina_badak' ), + 'Longpages' => array( 'Pájina_naruk' ), + 'Protectedpages' => array( 'Pájina_sira-ne\'ebé_proteje_tiha' ), + 'Allpages' => array( 'Pájina_hotu' ), + 'Ipblocklist' => array( 'Lista_ema_sira-ne\'ebé_blokeiu_tiha' ), + 'Specialpages' => array( 'Pájina_espesiál_sira' ), 'Contributions' => array( 'Kontribuisaun' ), - 'Emailuser' => array( 'Haruka korreiu eletróniku' ), - 'Whatlinkshere' => array( 'Pájina sira ne\'ebé bá iha ne\'e' ), + 'Emailuser' => array( 'Haruka_korreiu_eletróniku' ), + 'Whatlinkshere' => array( 'Pájina_sira_ne\'ebé_bá_iha_ne\'e' ), 'Movepage' => array( 'Book' ), 'Categories' => array( 'Kategoria' ), 'Export' => array( 'Esporta' ), 'Version' => array( 'Versaun' ), - 'Allmessages' => array( 'Mensajen hotu' ), + 'Allmessages' => array( 'Mensajen_hotu' ), 'Blockip' => array( 'Blokeiu' ), 'Undelete' => array( 'Restaurar' ), - 'Userrights' => array( 'Kuana', 'Priviléjiu' ), - 'Mypage' => array( 'Ha\'u-nia pájina' ), - 'Listadmins' => array( 'Lista administradór' ), + 'Import' => array( 'Importa' ), + 'Userrights' => array( 'Priviléjiu' ), + 'Mypage' => array( 'Ha\'u-nia_pájina' ), + 'Listadmins' => array( 'Lista_administradór' ), 'Search' => array( 'Buka' ), - 'Withoutinterwiki' => array( 'Laiha interwiki' ), + 'Withoutinterwiki' => array( 'Laiha_interwiki' ), ); $messages = array( @@ -144,7 +145,7 @@ $messages = array( 'dec' => 'Dez.', # Categories related messages -'pagecategories' => '{{PLURAL:$1|Kategoría|Kategoría}}', +'pagecategories' => '{{PLURAL:$1|Kategoria|Kategoria}}', 'category_header' => 'Artigu iha kategoría "$1"', 'subcategories' => 'Sub-kategoria sira', 'category-empty' => "''Kategoria ne'e agora la iha pájina sira.''", @@ -170,7 +171,9 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-view-edit' => 'Edita', +'vector-view-create' => 'Kria', +'vector-view-edit' => 'Edita', +'vector-view-history' => 'Haree istória', 'errorpagetitle' => 'Sala', 'returnto' => 'Fali ba $1.', @@ -194,7 +197,7 @@ $messages = array( 'deletethispage' => "Halakon pájina ne'e", 'undelete_short' => 'Restaurar {{PLURAL:$1|versaun ida|versaun $1}}', 'protect' => 'Proteje', -'protect_change' => 'filak', +'protect_change' => 'muda', 'protectthispage' => "Proteje pájina ne'e", 'unprotect' => 'La proteje', 'unprotectthispage' => "La proteje pájina ne'e", @@ -213,7 +216,7 @@ $messages = array( 'categorypage' => 'Haree pájina kategoría nian', 'viewtalkpage' => 'Haree diskusaun', 'otherlanguages' => 'Iha lian seluk', -'lastmodifiedat' => "Muda ikus pájina ne'e nian iha $1, $2.", +'lastmodifiedat' => "Mudansa ba dala ikus pájina ne'e nian iha $1, $2.", 'protectedpage' => 'Pájina maka ema ruma proteje tiha', 'jumpto' => 'Bá:', 'jumptonavigation' => 'hatudu-dalan', @@ -240,7 +243,7 @@ $messages = array( 'badaccess' => 'Ita la iha permisaun...', 'badaccess-group0' => "Ó la bele halo ne'e.", -'badaccess-groups' => "Ba halo ne'e tenke iha {{PLURAL:$2|lubu|lubu ida husi}} $1.", +'badaccess-groups' => "De'it uza-na'in sira-ne'ebé iha {{PLURAL:$2|grupu|grupu ida husi}} $1 bele halo ne'e.", 'versionrequired' => 'Presiza MediaWiki versaun $1', 'versionrequiredtext' => "Presiza MediaWiki versaun $1 ba uza pájina ne'e. Haree [[Special:Version|pájina versaun]].", @@ -293,8 +296,8 @@ Lista ida pájina espesiál nian [[Special:SpecialPages|iha ne'e]].", # Login and logout pages 'welcomecreation' => "== Loron di'ak, $1! == -Ó kria konta ó-nia. -La haluha filak ó-nia [[Special:Preferences|preferénsia]].", +Agora Ita iha konta iha ne'e. +La haluha muda Ita-nia [[Special:Preferences|preferénsia]].", 'yourname' => "Naran uza-na'in:", 'login' => 'Log in', 'nav-login-createaccount' => 'Log in / kriar konta ida', @@ -318,15 +321,18 @@ Check your spelling, ka [[Special:UserLogin/signup|kria konta foun]].', 'resetpass_text' => "", # Edit page toolbar -'link_tip' => 'Ligasaun ba laran', -'extlink_tip' => "Ligasaun ba li'ur (tau tan http://)", -'image_sample' => 'Ezemplu.jpg', -'media_sample' => 'Ezemplu.ogg', +'link_tip' => 'Ligasaun ba laran', +'extlink_sample' => "http://www.example.com ligasaun ba li'ur", +'extlink_tip' => "Ligasaun ba li'ur (tau tan http://)", +'image_sample' => 'Ezemplu.jpg', +'media_sample' => 'Ezemplu.ogg', +'sig_tip' => 'Ita-nia asinatura ho data/oras', # Edit pages +'summary' => 'Rezumu:', 'minoredit' => "Ne'e muda ki'ik", 'watchthis' => "Hateke pájina ne'e", -'savearticle' => 'Filak pájina', +'savearticle' => 'Muda pájina', 'showdiff' => 'Hatudu diferensa sira', 'anoneditwarning' => 'Ó lá\'os "log-in" iha momentu.', 'blockedtitle' => "Uza-na'in la bele edita (blokeiu)", @@ -372,10 +378,15 @@ Check your spelling, ka [[Special:UserLogin/signup|kria konta foun]].', 'history-feed-item-nocomment' => '$1 iha $2', # Revision deletion -'rev-delundel' => 'hatudu/subar', -'revisiondelete' => 'Halakon/restaurar versaun', -'revdelete-hide-user' => "Subar naran edita-na'in/IP", -'revdelete-edit-reasonlist' => 'Edita lista motivu nian', +'rev-delundel' => 'hatudu/subar', +'revisiondelete' => 'Halakon/restaurar versaun', +'revdelete-show-file-submit' => 'Sin', +'revdelete-hide-user' => "Subar naran edita-na'in/IP", +'revdelete-radio-set' => 'Sin', +'revdelete-radio-unset' => 'Lae', +'revdelete-uname' => "naran uza-na'in", +'revdelete-hid' => 'subar $1', +'revdelete-edit-reasonlist' => 'Edita lista motivu nian', # Diffs 'lineno' => 'Liña $1:', @@ -393,6 +404,7 @@ Check your spelling, ka [[Special:UserLogin/signup|kria konta foun]].', 'searchall' => 'hotu', 'powersearch' => 'Buka', 'powersearch-field' => 'Buka', +'powersearch-toggleall' => 'Hotu', # Preferences page 'preferences' => 'Preferénsia', @@ -461,9 +473,9 @@ Check your spelling, ka [[Special:UserLogin/signup|kria konta foun]].', 'right-userrights-interwiki' => "Edita priviléjiu uza-na'in iha wiki seluk sira", # User rights log -'rightslog' => "Lista filak priviléjiu uza-na'in", -'rightslogtext' => "Ne'e lista ba filak lubu uza-na'in.", -'rightslogentry' => 'filak lubu $1 nian husi $2 ba $3', +'rightslog' => "Lista mudansa priviléjiu uza-na'in", +'rightslogtext' => "Ne'e lista mudansa priviléjiu uza-na'in sira nian.", +'rightslogentry' => 'muda grupu $1 nian husi $2 ba $3', 'rightsnone' => '(mamuk)', # Associated actions - in the sentence "You do not have permission to X" @@ -503,9 +515,10 @@ Check your spelling, ka [[Special:UserLogin/signup|kria konta foun]].', 'recentchangeslinked-page' => 'Naran pájina nian:', # Upload -'upload' => 'Tau iha arkivu laran', -'uploadbtn' => 'Tau iha arkivu laran', -'watchthisupload' => "Hateke pájina ne'e", +'upload' => 'Tau iha arkivu laran', +'uploadbtn' => 'Tau iha arkivu laran', +'fileuploadsummary' => 'Rezumu:', +'watchthisupload' => "Hateke pájina ne'e", 'license' => 'Lisensa:', 'license-header' => 'Lisensa:', @@ -539,7 +552,7 @@ Check your spelling, ka [[Special:UserLogin/signup|kria konta foun]].', 'randompage' => 'Pájina ruma', # Statistics -'statistics' => 'Estátistika', +'statistics' => 'Estatístika', 'brokenredirects-edit' => 'edita', 'brokenredirects-delete' => 'halakon', @@ -614,10 +627,9 @@ Check your spelling, ka [[Special:UserLogin/signup|kria konta foun]].', # Watchlist 'watchlist' => "Ha'u-nia lista hateke", 'mywatchlist' => "Ha'u-nia lista hateke", -'watchlistfor' => "('''$1''' nian)", 'addedwatch' => 'tau tan tiha ba lista hateke', 'removedwatch' => 'La hateke pájina ona', -'removedwatchtext' => 'La hateke pájina "[[:$1]]" ona.', +'removedwatchtext' => 'La hateke pájina "[[:$1]]" ona (haree [[Special:Watchlist|"lista hateke"]]).', 'watch' => 'Hateke', 'watchthispage' => "Hateke pájina ne'e", 'unwatch' => 'La hateke ona', @@ -630,8 +642,9 @@ Check your spelling, ka [[Special:UserLogin/signup|kria konta foun]].', 'enotif_newpagetext' => "Ne'e pájina foun.", 'enotif_impersonal_salutation' => "Uza-na'in {{SITENAME}} nian", -'changed' => 'filak', -'created' => 'kria', +'changed' => 'muda ona', +'created' => 'kria ona', +'enotif_subject' => '$PAGEEDITOR $CHANGEDORCREATED pájina $PAGETITLE iha {{SITENAME}}', # Delete 'deletepage' => 'Halakon pájina', @@ -663,7 +676,7 @@ Check your spelling, ka [[Special:UserLogin/signup|kria konta foun]].', 'protect-otherreason' => 'Motivu seluk/ida tan:', 'protect-otherreason-op' => 'Motivu seluk', 'protect-edit-reasonlist' => 'Edita lista motivu nian', -'protect-expiry-options' => '1 hour:1 hours,1 loron:1 day,1 semana:1 week,2 semana:2 weeks,1 fulan:1 month,3 fulan:3 months,6 fulan:6 months,1 tinan:1 year,infinite:infinite', +'protect-expiry-options' => '1 oras:1 hour,1 loron:1 day,1 semana:1 week,2 semana:2 weeks,1 fulan:1 month,3 fulan:3 months,6 fulan:6 months,1 tinan:1 year,infinite:infinite', 'restriction-type' => 'Permisaun:', # Restrictions (nouns) @@ -672,13 +685,15 @@ Check your spelling, ka [[Special:UserLogin/signup|kria konta foun]].', 'restriction-create' => 'Kria', # Undelete -'undelete' => 'Haree pájina halakon tiha', -'undeletebtn' => 'Restaurar', -'undeletelink' => 'lee/restaurar', -'undeletecomment' => 'Razaun:', -'undeletedarticle' => 'restaurar "[[$1]]"', -'undeletedrevisions' => 'restaurar {{PLURAL:$1|versaun|versaun}} $1', -'undelete-search-submit' => 'Buka', +'undelete' => 'Haree pájina halakon tiha', +'undeletebtn' => 'Restaurar', +'undeletelink' => 'lee/restaurar', +'undeleteviewlink' => 'haree', +'undeletecomment' => 'Razaun:', +'undeletedarticle' => 'restaurar "[[$1]]"', +'undeletedrevisions' => 'restaurar {{PLURAL:$1|versaun|versaun}} $1', +'undelete-search-submit' => 'Buka', +'undelete-show-file-submit' => 'Sin', # Namespace form on various pages 'namespace' => 'Espasu pájina nian:', @@ -751,13 +766,18 @@ Check your spelling, ka [[Special:UserLogin/signup|kria konta foun]].', 'export' => 'Esporta pájina sira', 'export-submit' => 'Esporta', 'export-addcat' => 'Tau tan', +'export-addns' => 'Tau tan', # Namespace 8 related -'allmessagesname' => 'Naran', -'allmessagescurrent' => 'Testu atuál', +'allmessagesname' => 'Naran', +'allmessagescurrent' => 'Testu atuál', +'allmessages-filter-all' => 'Hotu', +'allmessages-language' => 'Lian:', # Special:Import -'import-comment' => 'Komentáriu:', +'import-interwiki-submit' => 'Importa', +'import-comment' => 'Komentáriu:', +'import-revision-count' => '{{PLURAL:$1|versaun ida|versaun $1}}', # Import log 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|versaun|versaun}} husi $2', @@ -770,7 +790,7 @@ Check your spelling, ka [[Special:UserLogin/signup|kria konta foun]].', 'tooltip-pt-login' => 'Ami rekomenda identifikasaun ("log in"), maibé Ita-Boot la presiza halo ne\'e', 'tooltip-pt-logout' => 'Husik', 'tooltip-ca-talk' => 'Diskusaun kona-ba konteúdu pájina nian', -'tooltip-ca-edit' => "Ó bele filak pájina ne'e. Please use the preview button before saving.", +'tooltip-ca-edit' => "Ita bele edita pájina ne'e. Please use the preview button before saving.", 'tooltip-ca-addsection' => 'Tau tan seksaun foun ida.', 'tooltip-ca-viewsource' => "Ema ruma proteje tiha pájina ne'e. Ó bele lee testu.", @@ -803,7 +823,9 @@ Check your spelling, ka [[Special:UserLogin/signup|kria konta foun]].', 'tooltip-watch' => 'Tau pájina ne\'e ba Ita-nia "lista hateke"', # Attribution -'lastmodifiedatby' => "$3 filak ikus pájina ne'e iha $1, $2.", +'siteuser' => "uza-na'in {{SITENAME}} nian $1", +'lastmodifiedatby' => "Pájina ne'e $3 mak muda ba dala ikus iha $1, $2.", +'siteusers' => "{{PLURAL:$2|uza-na'in|uza-na'in}} {{SITENAME}} nian $1", # Skin names 'skinname-standard' => 'Klásiku', @@ -823,10 +845,16 @@ Check your spelling, ka [[Special:UserLogin/signup|kria konta foun]].', 'ilsubmit' => 'Buka', # EXIF tags +'exif-make' => 'Fabrikante kámara nian', +'exif-model' => 'Kámara', 'exif-artist' => 'Autór', +'exif-flash' => 'Flax', 'exif-meteringmode-255' => 'Seluk', +# Pseudotags used for GPSSpeedRef +'exif-gpsspeed-k' => 'km iha oras', + # External editor support 'edit-externally-help' => "(Haree [http://www.mediawiki.org/wiki/Manual:External_editors iha ne'e] ba informasaun barak liu)", @@ -836,6 +864,7 @@ Check your spelling, ka [[Special:UserLogin/signup|kria konta foun]].', 'watchlistall2' => 'hotu', 'namespacesall' => 'hotu', 'monthsall' => 'hotu', +'limitall' => 'hotu', # action=purge 'confirm_purge_button' => 'OK', @@ -855,7 +884,7 @@ Check your spelling, ka [[Special:UserLogin/signup|kria konta foun]].', 'autosumm-new' => "Pájina foun: '$1'", # Watchlist editor -'watchlistedit-normal-title' => 'Filak lista hateke', +'watchlistedit-normal-title' => 'Edita lista hateke', 'watchlistedit-raw-titles' => 'Títulu sira:', 'watchlistedit-raw-added' => '{{PLURAL:$1|Títulu ida|Títulu $1}} tau tan tiha:', 'watchlistedit-raw-removed' => '{{PLURAL:$1|Títulu ida|Títulu $1}} hasai tiha:', @@ -872,6 +901,9 @@ Check your spelling, ka [[Special:UserLogin/signup|kria konta foun]].', 'version-software-product' => 'Produtu', 'version-software-version' => 'Versaun', +# Special:FilePath +'filepath-submit' => 'Bá', + # Special:FileDuplicateSearch 'fileduplicatesearch-submit' => 'Buka', @@ -886,4 +918,17 @@ Check your spelling, ka [[Special:UserLogin/signup|kria konta foun]].', # Special:BlankPage 'blankpage' => 'Pájina mamuk', +# Special:Tags +'tags-edit' => 'edita', + +# Special:ComparePages +'compare-page1' => 'Pájina 1', +'compare-page2' => 'Pájina 2', +'compare-rev1' => 'Versaun 1', +'compare-rev2' => 'Versaun 2', +'compare-submit' => 'Halo komparasaun', + +# Database error messages +'dberr-header' => "Wiki ne'e iha problema", + ); diff --git a/languages/messages/MessagesTg_cyrl.php b/languages/messages/MessagesTg_cyrl.php index 98754a7e..9d8b5313 100644 --- a/languages/messages/MessagesTg_cyrl.php +++ b/languages/messages/MessagesTg_cyrl.php @@ -84,8 +84,7 @@ $messages = array( 'tog-editsection' => 'Иҷозат додани вироиши қисмати саҳифа ба воситаи пайванди [вироиш]', 'tog-editsectiononrightclick' => 'Ба кор андохтани вироиши сарлавҳаҳои қисматҳо бо клики рост (ҶаваСкрипт)', 'tog-showtoc' => 'Намоиши феҳристи мундариҷон (барои мақолаҳои бо беш аз 3 сарлавҳа)', -'tog-rememberpassword' => 'Маро дар хотири компютер нигоҳ дор', -'tog-editwidth' => 'Васеъ кардани қуттии вироиш то ҳадде, ки тамоми саҳифаро баргирад', +'tog-rememberpassword' => 'Вуруди манро дар ин мурургар дар хотир нигоҳ дор (ҳадди аксар то $1 {{PLURAL:$1|рӯз|рӯз}})', 'tog-watchcreations' => 'Дохил намудани саҳифаҳое, ки ман сохтаам ба феҳристи назароти ман', 'tog-watchdefault' => 'Саҳифаҳои эҷодкардаамро ба феҳристи пайгириам илова кунед', 'tog-watchmoves' => 'Саҳифаҳои кӯчонидаамро ба феҳристи пайгириҳоям илова кунед', @@ -230,31 +229,20 @@ $messages = array( 'faqpage' => 'Project:Саволҳои тез-тез пурсидашуда', # Vector skin -'vector-action-addsection' => 'Иловаи унвон', -'vector-action-delete' => 'Ҳазф', -'vector-action-move' => 'Кӯчонидан', -'vector-action-protect' => 'Муҳофизат', -'vector-action-undelete' => 'Эҳё', -'vector-action-unprotect' => 'Ба дар овардан аз муҳофизат', -'vector-namespace-category' => 'Гурӯҳ', -'vector-namespace-help' => 'Саҳифаи роҳнамо', -'vector-namespace-image' => 'Парванда', -'vector-namespace-main' => 'Саҳифа', -'vector-namespace-media' => 'Саҳифаи расона', -'vector-namespace-mediawiki' => 'Пайғом', -'vector-namespace-project' => 'Саҳифаи лоиҳа', -'vector-namespace-special' => 'Саҳифаи вижа', -'vector-namespace-talk' => 'Баҳс', -'vector-namespace-template' => 'Шаблон', -'vector-namespace-user' => 'Саҳифаи корбарӣ', -'vector-view-create' => 'Эҷод', -'vector-view-edit' => 'Вироиш', -'vector-view-history' => 'Намоиши таърих', -'vector-view-view' => 'Хондан', -'vector-view-viewsource' => 'Намоиши манбаъ', -'actions' => 'Амалкардҳо', -'namespaces' => 'Фазоҳои ном', -'variants' => 'Вариантҳо', +'vector-action-addsection' => 'Иловаи унвон', +'vector-action-delete' => 'Ҳазф', +'vector-action-move' => 'Кӯчонидан', +'vector-action-protect' => 'Муҳофизат', +'vector-action-undelete' => 'Эҳё', +'vector-action-unprotect' => 'Ба дар овардан аз муҳофизат', +'vector-view-create' => 'Эҷод', +'vector-view-edit' => 'Вироиш', +'vector-view-history' => 'Намоиши таърих', +'vector-view-view' => 'Хондан', +'vector-view-viewsource' => 'Намоиши манбаъ', +'actions' => 'Амалкардҳо', +'namespaces' => 'Фазоҳои ном', +'variants' => 'Вариантҳо', 'errorpagetitle' => 'Хато', 'returnto' => 'Бозгашт ба $1.', @@ -315,6 +303,7 @@ $messages = array( Лутфан қабл аз талош дубора барои дидани ин саҳифа муддате сабр кунед. $1', +'pool-errorunknown' => 'Хатогии ношинос', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Дар бораи {{SITENAME}}', @@ -476,7 +465,7 @@ $1', 'yourname' => 'Номи корбар', 'yourpassword' => 'Калимаи убур\\пароль', 'yourpasswordagain' => 'Калимаи убурро боз нависед', -'remembermypassword' => 'Манро дар хотир нигоҳ дор', +'remembermypassword' => 'Вуруди манро дар ин мурургар дар хотир нигоҳ дор (то ҳадди аксар $1 {{PLURAL:$1|рӯз|рӯз}})', 'yourdomainname' => 'Домейни Шумо', 'externaldberror' => 'Хатое дар иртибот бо пойгоҳи дода рух дода аст ё ин ки шумо иҷозат ба рӯзрасонии ҳисоби берунии худро надоред.', 'login' => 'Вуруд', @@ -493,6 +482,7 @@ $1', 'gotaccount' => "Ҳисоби корбарӣ доред? '''$1'''.", 'gotaccountlink' => 'Вуруд шавед', 'createaccountmail' => 'бо почтаи электронӣ', +'createaccountreason' => 'Сабаб:', 'badretype' => 'Калимаҳои убуре, ки ворид кардаед бо ҳамдигар мувофиқат намекунанд.', 'userexists' => 'Номи корбарии дохил кардашуда мавриди истифода аст. Номи дигарероро интихоб кунед.', @@ -653,7 +643,7 @@ $1', 'userjsyoucanpreview' => "'''Эзоҳ:''' Пеш парвандаи CSS ё JS худро захира кунед, бо истифода аз тугмаи \"Пешнамоиш\" метавонед онро озмоиш кунед.", 'usercsspreview' => "'''Фаромӯш накунед, ки шумо фақат CSS корбариатонро пешнамоиш карда истодааед ва он ҳанӯз захира нашудааст!'''", 'userjspreview' => "'''Фаромӯш накунед, ки шумо фақат ҶаваСкрипти корбариатонро имтиҳон,пешнамоиш карда истодаед ва он ҳанӯз захира нашудааст!'''", -'userinvalidcssjstitle' => "'''Ҳушдор:'''Пӯсте бо номи \"\$1\" вуҷуд надорад. Таваҷҷӯҳ кунед ки саҳифаҳои .css ва .js бо ҳарфҳои хурд навишта мешаванд, Намуна. {{ns:user}}:Фу/monobook.css дар муқобили корбар {{ns:user}}:Фу/Monobook.css.", +'userinvalidcssjstitle' => "'''Ҳушдор:'''Пӯсте бо номи \"\$1\" вуҷуд надорад. Таваҷҷӯҳ кунед ки саҳифаҳои .css ва .js бо ҳарфҳои хурд навишта мешаванд, Намуна. {{ns:user}}:Фу/vector.css дар муқобили корбар {{ns:user}}:Фу/Vector.css.", 'updated' => '(Ба рӯз шуда)', 'note' => "'''Эзоҳ:'''", 'previewnote' => "'''Ин фақат пешнамоиш аст; дигаргуниҳо ҳоло захира нашудаанд!'''", @@ -685,8 +675,6 @@ $1', 'copyrightwarning' => "Ҳамаи ҳиссагузорӣ ба {{SITENAME}} аз рӯи қонунҳои зерин $2 (нигаред $1 барои маълумоти бештар) ҳиссагузорӣ мешаванд. Агар Шумо намехоҳед, ки навиштаҷоти Шумо вироиш ва паҳн нашаванд, Шумо метавонед ин мақоларо нафиристед.
    Шумо ваъда медиҳед, ки худатон ин мақоларо навиштед ё ки аз сарчашмаҳои кушод нусхабардорӣ кардаед. '''АСАРҲОИ ҚОБИЛИ ҲУҚУҚИ МУАЛЛИФРО БЕ ИҶОЗАТ НАФИРИСТЕД!'''", 'copyrightwarning2' => "Лутфан таваҷҷӯҳ дошта бошед ки ҳамаи ҳиссагузориҳо ба {{SITENAME}} бо таҳти \"Иҷозатномаи мустанадоти Озод GNU\" мунташир мешаванд. (барои ҷузъиёти бештар нигаред ба \$1). Агар намехоҳед навиштаҳоятон бераҳмона вироиш шуда ва ба дилхоҳ тавзеҳ шавад, инҷо нафиристед.
    Ҳамин тавр шумо қавл медиҳед, ки худатонро инро навиштаед ё онро аз як манбаи озод бо моликияти умумӣ ё мушобеҳи он нусхабардорӣ кардаед. '''КОРҲОИ ҲУҚУҚИ ИНҲИСОРИ МУАЛЛИФРО (ТАКСИР) БЕ ИҷОЗАТЕ НАФИРИСТЕД!'''", -'longpagewarning' => "'''Ҳушдор: Ин саҳифа $1 килобайт дароз аст; баъзе мурургарҳо мумкин ба вироиши саҳифаҳои наздик ба 32 kb ё дарозтар аз он мушкили дошта бошанд. -Лутфан дар барои ба қисматҳои хурд ҷудо кардани ин саҳифа фикр кунед.'''", 'longpageerror' => "'''ХАТО: Матне ки ирсол кардаед $1 килобайт ҳаҷм дорад, ки ин миқдор аз миқдори пешина $2 килобайт бештар аст. Наметавон онро захира кард.'''", 'readonlywarning' => "'''ҲУШДОР: Пойгоҳи дода барои нигоҳдорӣ қуфл шудааст, бинобар ин наметавонед вироишҳоятонро ҳоло фавран захира кунед. Агар мехоҳед матнро дар як парвандаи матнӣ часпонед ва барои оянда онро захира кунед.'''", 'protectedpagewarning' => "'''ҲУШДОР: Ин саҳифа қуфл шудааст то фақат корбароне бо имтиёзи мудир (ё болотар) битавонанд онро вироиш кунанд.'''", @@ -1157,7 +1145,6 @@ $1', Агар акси бо андозаи калонтар доред, онро боргузорӣ кунед, вагарна лутфан номи парвандаро тағйир диҳед.", 'fileexists-forbidden' => 'Дар ҳоли ҳозир, парвандае бо ҳамин ном вуҷуд дорад; лутфан бар гардед ва парвандаи мавриди назари худро бо номи дигар бор кунед. [[File:$1|thumb|center|$1]]', 'fileexists-shared-forbidden' => 'Дар ҳоли ҳозир парванде бо ҳамин ном дар анбори муштараки парвандаҳо вуҷуд дорад; лутфан бар гардед ва парвандаи мавриди назари худро бо номи дигар бо кунед. [[File:$1|thumb|center|$1]]', -'successfulupload' => 'Фиристодан бомуваффақият', 'uploadwarning' => 'Огоҳии фиристодан', 'savefile' => 'Захираи парванда', 'uploadedimage' => 'боршуда "[[$1]]"', @@ -1176,6 +1163,7 @@ $1', Шумо бояд биандешед, ки оё давом додани боргузории ин парванда муносиб аст ё на. Гузориши ҳазфи марбут ба ин парванда дар зер оварда шудааст:", 'filename-bad-prefix' => "Номи парвандае, ки шумо боргузори карданиед бо '''\"\$1\"''' оғоз мешавад, ки як пешванди махсуси аксҳои сабтшуда тавассути аксбардоракҳои рақамӣ аст. Лутфан номи беҳтари тавсифотӣ барои парванда интихоб кунед.", +'upload-success-subj' => 'Фиристодан бомуваффақият', 'upload-proto-error' => 'Қарордоди нодуруст', 'upload-proto-error-text' => 'Боргузори аз дурдаст бо нишонаҳое, ки бо http:// ё ftp:// оғоз мешаванд, ниёз дорад.', @@ -1469,7 +1457,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'Феҳристи назароти ман', 'mywatchlist' => 'Феҳристи назароти ман', -'watchlistfor' => "(барои '''$1''')", 'nowatchlist' => 'Дар феҳристи пайгириҳои шумо ҳеҷ мавриде нест.', 'watchlistanontext' => 'Лутфан барои мушоҳида ва вироиши феҳристи пайгириҳои худ аз $1 истифода кунед.', 'watchnologin' => 'Вуруд нашуда', @@ -1581,7 +1568,9 @@ $NEWPAGE 'editcomment' => "Хулосаи вироиш ин буд: \"''\$1''\".", 'revertpage' => 'Вироиши [[Special:Contributions/$2|$2]] ([[User talk:$2|Баҳс]]) вогардонида шуд ба охирин тағйире, ки [[User:$1|$1]] анҷом дода буд', 'rollback-success' => 'Вироишҳои $1 вогардонӣ шуд; саҳифа ба вироиши $2 баргардонида шуд.', -'sessionfailure' => 'Ба назар мерасад, мушкилие дар мавриди нишасти корбарии шумо вуҷуд дорад; амали дархостшуда ба унвони иқдоми пешгирона дар баробари рабуда шудани иттилооти нишасти корбарӣ, лағв шуд. Лутфан тугмаи "бозгашт"-ро дар мурургари худ пахш кунед ва саҳифае, ки аз он инҷо расидаед муҷаддадан фарохонӣ кунед, сипас муҷаддадан боз саъй кунед.', + +# Edit tokens +'sessionfailure' => 'Ба назар мерасад, мушкилие дар мавриди нишасти корбарии шумо вуҷуд дорад; амали дархостшуда ба унвони иқдоми пешгирона дар баробари рабуда шудани иттилооти нишасти корбарӣ, лағв шуд. Лутфан тугмаи "бозгашт"-ро дар мурургари худ пахш кунед ва саҳифае, ки аз он инҷо расидаед муҷаддадан фарохонӣ кунед, сипас муҷаддадан боз саъй кунед.', # Protect 'protectlogpage' => 'Гузориши муҳофизат', @@ -1753,7 +1742,6 @@ $1', 'ipb-edit-dropdown' => 'Далели қатъи дастрасӣ', 'ipb-unblock-addr' => 'Боз кардани $1', 'ipb-unblock' => 'Боз кардани номи корбарӣ ё нишонаи IP', -'ipb-blocklist-addr' => 'Бастаҳои мавҷуд барои $1', 'ipb-blocklist' => 'Дидани бастаҳои мавҷуд', 'unblockip' => 'Боз кардани корбар', 'unblockiptext' => 'Барои барқарор кардан дастрасии навиштан барои нишонаи IP ё номи корбарии қаблан баста шуда, аз форми зерин истифода кунед.', @@ -2121,10 +2109,10 @@ $1', 'imagemaxsize' => 'Маҳуд кардани аксҳо дар саҳифаҳои тавсифоти парванда ба:', 'thumbsize' => 'Андозаи ангуштдона (thumbnail):', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|саҳифа|саҳифаҳо}}', -'file-info' => '(андозаи парванда: $1, навъи MIME: $2)', -'file-info-size' => '($1 × $2 пиксел, ҳаҷми парванда: $3, навъи MIME: $4)', +'file-info' => 'андозаи парванда: $1, навъи MIME: $2', +'file-info-size' => '$1 × $2 пиксел, ҳаҷми парванда: $3, навъи MIME: $4', 'file-nohires' => 'Нусхаи ҳаҷман ва сифатан баландтар дастрас нест.', -'svg-long-desc' => '(SVG парванда, исмӣ $1 × $2 пиксел, андозаи парванда: $3)', +'svg-long-desc' => 'SVG парванда, исмӣ $1 × $2 пиксел, андозаи парванда: $3', 'show-big-image' => 'Акси пурра', 'show-big-image-thumb' => 'Андозаи ин пешнамоиш: $1 × $2 пиксел', diff --git a/languages/messages/MessagesTg_latn.php b/languages/messages/MessagesTg_latn.php index a930a21b..968163cc 100644 --- a/languages/messages/MessagesTg_latn.php +++ b/languages/messages/MessagesTg_latn.php @@ -26,8 +26,7 @@ $messages = array( 'tog-editsection' => 'Içozat dodani viroişi qismati sahifa ba vositai pajvandi [viroiş]', 'tog-editsectiononrightclick' => 'Ba kor andoxtani viroişi sarlavhahoi qismatho bo kliki rost (ÇavaSkript)', 'tog-showtoc' => 'Namoişi fehristi mundariçon (baroi maqolahoi bo beş az 3 sarlavha)', -'tog-rememberpassword' => 'Maro dar xotiri kompjuter nigoh dor', -'tog-editwidth' => "Vase' kardani quttiji viroiş to hadde, ki tamomi sahifaro bargirad", +'tog-rememberpassword' => 'Maro dar xotiri kompjuter nigoh dor (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Doxil namudani sahifahoe, ki man soxtaam ba fehristi nazaroti man', 'tog-watchdefault' => 'Sahifahoi eçodkardaamro ba fehristi pajgiriam ilova kuned', 'tog-watchmoves' => 'Sahifahoi kūconidaamro ba fehristi pajgirihojam ilova kuned', @@ -172,31 +171,20 @@ $messages = array( 'faqpage' => 'Project:Savolhoi tez-tez pursidaşuda', # Vector skin -'vector-action-addsection' => 'Ilovai unvon', -'vector-action-delete' => 'Hazf', -'vector-action-move' => 'Kūconidan', -'vector-action-protect' => 'Muhofizat', -'vector-action-undelete' => 'Ehjo', -'vector-action-unprotect' => 'Ba dar ovardan az muhofizat', -'vector-namespace-category' => 'Gurūh', -'vector-namespace-help' => 'Sahifai rohnamo', -'vector-namespace-image' => 'Parvanda', -'vector-namespace-main' => 'Sahifa', -'vector-namespace-media' => 'Sahifai rasona', -'vector-namespace-mediawiki' => 'Pajƣom', -'vector-namespace-project' => 'Sahifai loiha', -'vector-namespace-special' => 'Sahifai viƶa', -'vector-namespace-talk' => 'Bahs', -'vector-namespace-template' => 'Şablon', -'vector-namespace-user' => 'Sahifai korbarī', -'vector-view-create' => 'Eçod', -'vector-view-edit' => 'Viroiş', -'vector-view-history' => "Namoişi ta'rix", -'vector-view-view' => 'Xondan', -'vector-view-viewsource' => "Namoişi manba'", -'actions' => 'Amalkardho', -'namespaces' => 'Fazohoi nom', -'variants' => 'Variantho', +'vector-action-addsection' => 'Ilovai unvon', +'vector-action-delete' => 'Hazf', +'vector-action-move' => 'Kūconidan', +'vector-action-protect' => 'Muhofizat', +'vector-action-undelete' => 'Ehjo', +'vector-action-unprotect' => 'Ba dar ovardan az muhofizat', +'vector-view-create' => 'Eçod', +'vector-view-edit' => 'Viroiş', +'vector-view-history' => "Namoişi ta'rix", +'vector-view-view' => 'Xondan', +'vector-view-viewsource' => "Namoişi manba'", +'actions' => 'Amalkardho', +'namespaces' => 'Fazohoi nom', +'variants' => 'Variantho', 'errorpagetitle' => 'Xato', 'returnto' => 'Bozgaşt ba $1.', @@ -401,7 +389,7 @@ Tanzim kardani [[Special:Preferences|tarçihoti {{SITENAME}}]] xudro faromūş n 'yourname' => 'Nomi korbar', 'yourpassword' => 'Kalimai ubur\\parolь', 'yourpasswordagain' => 'Kalimai uburro boz navised', -'remembermypassword' => 'Manro dar xotir nigoh dor', +'remembermypassword' => 'Manro dar xotir nigoh dor (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Domejni Şumo', 'externaldberror' => 'Xatoe dar irtibot bo pojgohi doda rux doda ast jo in ki şumo içozat ba rūzrasoniji hisobi beruniji xudro nadored.', 'login' => 'Vurud', @@ -548,7 +536,7 @@ jo [{{fullurl:{{FULLPAGENAME}}|action=edit}} in sahifaro viroiş kuned].' 'usercssyoucanpreview' => "'''Ezoh:''' Peş parvandai CSS jo JS xudro zaxira kuned, bo istifoda az tugmai \"Peşnamoiş\" metavoned onro ozmoiş kuned.", 'userjsyoucanpreview' => "'''Ezoh:''' Peş parvandai CSS jo JS xudro zaxira kuned, bo istifoda az tugmai \"Peşnamoiş\" metavoned onro ozmoiş kuned.", 'userjspreview' => "'''Faromūş nakuned, ki şumo faqat ÇavaSkripti korbariatonro imtihon,peşnamoiş karda istodaed va on hanūz zaxira naşudaast!'''", -'userinvalidcssjstitle' => "'''Huşdor:'''Pūste bo nomi \"\$1\" vuçud nadorad. Tavaççūh kuned ki sahifahoi .css va .js bo harfhoi xurd navişta meşavand, Namuna. {{ns:user}}:Fu/monobook.css dar muqobili korbar {{ns:user}}:Fu/Monobook.css.", +'userinvalidcssjstitle' => "'''Huşdor:'''Pūste bo nomi \"\$1\" vuçud nadorad. Tavaççūh kuned ki sahifahoi .css va .js bo harfhoi xurd navişta meşavand, Namuna. {{ns:user}}:Fu/vector.css dar muqobili korbar {{ns:user}}:Fu/Vector.css.", 'updated' => '(Ba rūz şuda)', 'note' => "'''Ezoh:'''", 'previewnote' => "'''In faqat peşnamoiş ast; digarguniho holo zaxira naşudaand!'''", @@ -579,8 +567,6 @@ Agar şumo onro zaxira kuned, har taƣjire ki pas az in nusxa ançom şuda, az b 'copyrightwarning' => "Hamai hissaguzorī ba {{SITENAME}} az rūi qonunhoi zerin $2 (nigared $1 baroi ma'lumoti beştar) hissaguzorī meşavand. Agar Şumo namexohed, ki naviştaçoti Şumo viroiş va pahn naşavand, Şumo metavoned in maqolaro nafiristed.
    Şumo va'da medihed, ki xudaton in maqolaro navişted jo ki az sarcaşmahoi kuşod nusxabardorī kardaed. '''ASARHOI QOBILI HUQUQI MUALLIFRO BE IÇOZAT NAFIRISTED!'''", 'copyrightwarning2' => "Lutfan tavaççūh doşta boşed ki hamai hissaguzoriho ba {{SITENAME}} bo tahti \"Içozatnomai mustanadoti Ozod GNU\" muntaşir meşavand. (baroi çuz'ijoti beştar nigared ba \$1). Agar namexohed naviştahojaton berahmona viroiş şuda va ba dilxoh tavzeh şavad, inço nafiristed.
    Hamin tavr şumo qavl medihed, ki xudatonro inro naviştaed jo onro az jak manbai ozod bo molikijati umumī jo muşobehi on nusxabardorī kardaed. '''KORHOI HUQUQI INHISORI MUALLIFRO (TAKSIR) BE IçOZATE NAFIRISTED!'''", -'longpagewarning' => "'''Huşdor: In sahifa $1 kilobajt daroz ast; ba'ze mururgarho mumkin ba viroişi sahifahoi nazdik ba 32 kb jo daroztar az on muşkili doşta boşand. -Lutfan dar baroi ba qismathoi xurd çudo kardani in sahifa fikr kuned.'''", 'longpageerror' => "'''XATO: Matne ki irsol kardaed $1 kilobajt haçm dorad, ki in miqdor az miqdori peşina $2 kilobajt beştar ast. Nametavon onro zaxira kard.'''", 'protectedpagewarning' => "'''HUŞDOR: In sahifa qufl şudaast to faqat korbarone bo imtijozi mudir (jo bolotar) bitavonand onro viroiş kunand.'''", 'semiprotectedpagewarning' => "'''Tavaççūh:''' In sahifa qufl şudaast to tanho korbaroni sabtinomkarda qodir ba viroişi on boşand.", @@ -1016,7 +1002,6 @@ Lutfan jak nomi digarero intixob kuned.", 'fileexists-thumbnail-yes' => "Az aks ba nazar merasad, ki aksi andozaaş xurd ''(anguştdona)''. [[$1|thumb]] Lutan parvandaro '''[[:$1]]''' barrasī kuned. Agar parvandai barrasişuda aksi xurd karda şudai on parvandai aslī ast, nijoze ba borguzoriji aksi xurd nest.", -'successfulupload' => 'Firistodan bomuvaffaqijat', 'uploadwarning' => 'Ogohiji firistodan', 'savefile' => 'Zaxirai parvanda', 'uploadedimage' => 'borşuda "[[$1]]"', @@ -1033,6 +1018,7 @@ Agar parvandai barrasişuda aksi xurd karda şudai on parvandai aslī ast, nijoz Şumo bojad biandeşed, ki ojo davom dodani borguzoriji in parvanda munosib ast jo na. Guzorişi hazfi marbut ba in parvanda dar zer ovarda şudaast:", 'filename-bad-prefix' => "Nomi parvandae, ki şumo borguzori kardanied bo '''\"\$1\"''' oƣoz meşavad, ki jak peşvandi maxsusi akshoi sabtşuda tavassuti aksbardorakhoi raqamī ast. Lutfan nomi behtari tavsifotī baroi parvanda intixob kuned.", +'upload-success-subj' => 'Firistodan bomuvaffaqijat', 'upload-proto-error' => 'Qarordodi nodurust', 'upload-proto-error-text' => 'Borguzori az durdast bo nişonahoe, ki bo http:// jo ftp:// oƣoz meşavand, nijoz dorad.', @@ -1307,7 +1293,6 @@ Jak klik kardani rūi unvoni sutunho boisi taƣjiri tartibi namoişi parvandaho # Watchlist 'watchlist' => 'Fehristi nazaroti man', 'mywatchlist' => 'Fehristi nazaroti man', -'watchlistfor' => "(baroi '''$1''')", 'nowatchlist' => 'Dar fehristi pajgirihoi şumo heç mavride nest.', 'watchlistanontext' => 'Lutfan baroi muşohida va viroişi fehristi pajgirihoi xud az $1 istifoda kuned.', 'watchnologin' => 'Vurud naşuda', @@ -1390,7 +1375,9 @@ Nigared ba $2 baroi guzorişi hazfi oxirin.', 'editcomment' => "Xulosai viroiş in bud: \"''\$1''\".", 'revertpage' => 'Viroişi [[Special:Contributions/$2|$2]] ([[User talk:$2|Bahs]]) vogardonida şud ba oxirin taƣjire, ki [[User:$1|$1]] ançom doda bud', 'rollback-success' => 'Viroişhoi $1 vogardonī şud; sahifa ba viroişi $2 bargardonida şud.', -'sessionfailure' => 'Ba nazar merasad, muşkilie dar mavridi nişasti korbariji şumo vuçud dorad; amali darxostşuda ba unvoni iqdomi peşgirona dar barobari rabuda şudani ittilooti nişasti korbarī, laƣv şud. Lutfan tugmai "bozgaşt"-ro dar mururgari xud paxş kuned va sahifae, ki az on inço rasidaed muçaddadan faroxonī kuned, sipas muçaddadan boz sa\'j kuned.', + +# Edit tokens +'sessionfailure' => 'Ba nazar merasad, muşkilie dar mavridi nişasti korbariji şumo vuçud dorad; amali darxostşuda ba unvoni iqdomi peşgirona dar barobari rabuda şudani ittilooti nişasti korbarī, laƣv şud. Lutfan tugmai "bozgaşt"-ro dar mururgari xud paxş kuned va sahifae, ki az on inço rasidaed muçaddadan faroxonī kuned, sipas muçaddadan boz sa\'j kuned.', # Protect 'protectlogpage' => 'Guzorişi muhofizat', @@ -1555,7 +1542,6 @@ Baroi barrasī ba [[Special:IPBlockList|fehristi nişonahoi IP va nomhoi korbari 'ipb-edit-dropdown' => "Daleli qat'i dastrasī", 'ipb-unblock-addr' => 'Boz kardani $1', 'ipb-unblock' => 'Boz kardani nomi korbarī jo nişonai IP', -'ipb-blocklist-addr' => 'Bastahoi mavçud baroi $1', 'ipb-blocklist' => 'Didani bastahoi mavçud', 'unblockip' => 'Boz kardani korbar', 'unblockiptext' => 'Baroi barqaror kardan dastrasiji naviştan baroi nişonai IP jo nomi korbariji qablan basta şuda, az formi zerin istifoda kuned.', @@ -1920,10 +1906,10 @@ $1', Bo içroi on, sistemai şumo şojad oseb bubinad.", 'thumbsize' => 'Andozai anguştdona (thumbnail):', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|sahifa|sahifaho}}', -'file-info' => "(andozai parvanda: $1, nav'i MIME: $2)", -'file-info-size' => "($1 × $2 piksel, haçmi parvanda: $3, nav'i MIME: $4)", +'file-info' => "andozai parvanda: $1, nav'i MIME: $2", +'file-info-size' => "$1 × $2 piksel, haçmi parvanda: $3, nav'i MIME: $4", 'file-nohires' => 'Nusxai haçman va sifatan balandtar dastras nest.', -'svg-long-desc' => '(SVG parvanda, ismī $1 × $2 piksel, andozai parvanda: $3)', +'svg-long-desc' => 'SVG parvanda, ismī $1 × $2 piksel, andozai parvanda: $3', 'show-big-image' => 'Aksi purra', 'show-big-image-thumb' => 'Andozai in peşnamoiş: $1 × $2 piksel', diff --git a/languages/messages/MessagesTh.php b/languages/messages/MessagesTh.php index 3c01a61b..1cc26fe5 100644 --- a/languages/messages/MessagesTh.php +++ b/languages/messages/MessagesTh.php @@ -10,6 +10,7 @@ * @author Ans * @author Harley Hartwell * @author Horus + * @author Korrawit * @author LMNOP at Thai Wikipedia (manop@itshee.com) since July 2007 * @author Manop * @author Mopza @@ -126,7 +127,7 @@ $specialPageAliases = array( 'Resetpass' => array( 'ตั้งรหัสผ่านใหม่' ), 'Withoutinterwiki' => array( 'หน้าที่ไม่มีลิงก์ข้ามภาษา' ), 'MergeHistory' => array( 'รวมประวัติ' ), - 'Filepath' => array( 'ตำแหน่งไฟล์' ), + 'Filepath' => array( 'พาธของไฟล์', 'ตำแหน่งไฟล์' ), 'Invalidateemail' => array( 'ยกเลิกการยืนยันทางอีเมล' ), 'Blankpage' => array( 'หน้าว่าง' ), 'LinkSearch' => array( 'ค้นหาเว็บลิงก์' ), @@ -194,8 +195,7 @@ $messages = array( 'tog-editsection' => 'เปิดการแก้ไขเฉพาะส่วนโดยใช้ลิงก์ [แก้ไข]', 'tog-editsectiononrightclick' => 'เปิดการแก้ไขเฉพาะส่วนโดยคลิกขวาที่หัวข้อ (จาวาสคริปต์)', 'tog-showtoc' => 'แสดงสารบัญ
    (สำหรับหน้าที่มีมากกว่า 3 หัวข้อ)', -'tog-rememberpassword' => 'จำการล็อกอินบนคอมพิวเตอร์นี้', -'tog-editwidth' => 'ทำให้กล่องแก้ไขกว้างเต็มหน้าจอ', +'tog-rememberpassword' => 'จำข้อมูลการเข้าสู่ระบบของฉันในเบราว์เซอร์นี้ (สูงสุด $1 {{PLURAL: $1 | วัน | วัน}})', 'tog-watchcreations' => 'นำหน้าที่สร้างใส่รายการเฝ้าดู', 'tog-watchdefault' => 'นำหน้าที่แก้ไขใส่รายการเฝ้าดู', 'tog-watchmoves' => 'นำหน้าที่เปลี่ยนชื่อใส่รายการเฝ้าดู', @@ -308,7 +308,7 @@ $messages = array( 'index-category' => 'หน้าที่มีดัชนี', 'noindex-category' => 'หน้าที่ไม่มีดัชนี', -'mainpagetext' => "'''ซอฟต์แวร์มีเดียวิกิได้ถูกติดตั้งเรียบร้อย'''", +'mainpagetext' => "'''ติดตั้งซอฟต์แวร์มีเดียวิกิเรียบร้อย'''", 'mainpagedocfooter' => 'ศึกษา[http://meta.wikimedia.org/wiki/Help:Contents คู่มือการใช้งาน] สำหรับเริ่มต้นใช้งานซอฟต์แวร์วิกิ == เริ่มต้น == @@ -340,31 +340,21 @@ $messages = array( 'faqpage' => 'Project:คำถามที่ถามบ่อย', # Vector skin -'vector-action-addsection' => 'เพิ่มหัวข้อใหม่', -'vector-action-delete' => 'ลบ', -'vector-action-move' => 'ย้าย', -'vector-action-protect' => 'ป้องกัน', -'vector-action-undelete' => 'ยกเลิกการลบ', -'vector-action-unprotect' => 'ยกเลิกการป้องกัน', -'vector-namespace-category' => 'หมวดหมู่', -'vector-namespace-help' => 'หน้าช่วยเหลือ', -'vector-namespace-image' => 'ไฟล์', -'vector-namespace-main' => 'หน้า', -'vector-namespace-media' => 'หน้าที่เป็นสื่อ', -'vector-namespace-mediawiki' => 'ข้อความ', -'vector-namespace-project' => 'หน้าโครงการ', -'vector-namespace-special' => 'หน้าพิเศษ', -'vector-namespace-talk' => 'สนทนา', -'vector-namespace-template' => 'แม่แบบ', -'vector-namespace-user' => 'หน้าของผู้ใช้', -'vector-view-create' => 'สร้าง', -'vector-view-edit' => 'แก้ไข', -'vector-view-history' => 'ดูประวัติ', -'vector-view-view' => 'อ่าน', -'vector-view-viewsource' => 'ดูโค้ด', -'actions' => 'การกระทำ', -'namespaces' => 'เนมสเปซ', -'variants' => 'สิ่งที่แตกต่าง', +'vector-action-addsection' => 'เพิ่มหัวข้อใหม่', +'vector-action-delete' => 'ลบ', +'vector-action-move' => 'ย้าย', +'vector-action-protect' => 'ป้องกัน', +'vector-action-undelete' => 'ยกเลิกการลบ', +'vector-action-unprotect' => 'ยกเลิกการป้องกัน', +'vector-simplesearch-preference' => 'เปิดใช้งานคำแนะนำการค้นหาขั้นสูง (สำหรับสกิน Vector เท่านั้น)', +'vector-view-create' => 'สร้าง', +'vector-view-edit' => 'แก้ไข', +'vector-view-history' => 'ดูประวัติ', +'vector-view-view' => 'อ่าน', +'vector-view-viewsource' => 'ดูโค้ด', +'actions' => 'การกระทำ', +'namespaces' => 'เนมสเปซ', +'variants' => 'สิ่งที่แตกต่าง', 'errorpagetitle' => 'มีข้อผิดพลาด', 'returnto' => 'กลับไปสู่ $1', @@ -425,6 +415,9 @@ $messages = array( กรุณารอสักครู่ก่อนที่จะเข้าดูหน้านี้อีกครั้งหนึ่ง $1', +'pool-timeout' => 'เกินเวลารอการล็อค', +'pool-queuefull' => 'พื้นที่รองรับคิวเต็ม', +'pool-errorunknown' => 'เกิดความผิดพลาดไม่ทราบสาเหตุ', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'เกี่ยวกับ {{SITENAME}}', @@ -582,7 +575,8 @@ $1', 'yourname' => 'ชื่อผู้ใช้', 'yourpassword' => 'รหัสผ่าน', 'yourpasswordagain' => 'พิมพ์รหัสผ่านอีกครั้ง:', -'remembermypassword' => 'จำการล็อกอินบนคอมพิวเตอร์นี้', +'remembermypassword' => 'จำฉันจากเครื่องนี้ (เป็นเวลาอย่างมาก $1 {{PLURAL:$1|วัน|วัน}})', +'securelogin-stick-https' => 'ยังคงเชื่อมต่อกับ HTTPS หลังจากล็อกอิน', 'yourdomainname' => 'โดเมนของคุณ:', 'externaldberror' => 'เกิดความผิดพลาดในการระบุตัวตนจากภายนอก หรือคุณไม่มีสิทธิในการแก้ไขบัญชีอื่น', 'login' => 'ล็อกอิน', @@ -599,6 +593,7 @@ $1', 'gotaccount' => "มีบัญชีผู้ใช้แล้วหรือไม่ '''$1'''", 'gotaccountlink' => 'ล็อกอิน', 'createaccountmail' => 'ผ่านทางอีเมล', +'createaccountreason' => 'เหตุผล:', 'badretype' => 'รหัสผ่านที่ใส่ไม่ถูกต้อง', 'userexists' => 'ชื่อบัญชีที่ใส่มีผู้อื่นใช้แล้ว กรุณาเลือกชื่ออื่น', 'loginerror' => 'ล็อกอินผิดพลาด', @@ -618,6 +613,7 @@ $1', 'wrongpasswordempty' => 'ยังไม่ได้ระบุรหัสผ่าน กรุณาลองใหม่', 'passwordtooshort' => 'รหัสผ่านต้องมีความยาวอย่างน้อย {{PLURAL:$1|$1 ตัวอักษร}}', 'password-name-match' => 'รหัสผ่านของคุณต้องไม่เหมือนกันกับชื่อผู้ใช้ของคุณ', +'password-login-forbidden' => 'ชื่อผู้ใช้และรหัสผ่านนี้ถูกห้ามมิให้ใช้', 'mailmypassword' => 'อีเมลรหัสผ่านใหม่', 'passwordremindertitle' => 'คำบอกรหัสผ่านจาก {{SITENAME}}', 'passwordremindertext' => 'ผู้ใดผู้หนึ่ง (ซึ่งอาจจะเป็นคุณได้ใช้หมายเลขไอพี $1) ขอให้ส่งรหัสผ่านใหม่ @@ -656,6 +652,9 @@ $1', 'loginlanguagelabel' => 'ภาษา: $1', 'suspicious-userlogout' => 'คำขอของคุณเพื่อออกจากระบบถูกปฏิเสธ เพราะดูเหมือนว่าจะส่งมาจากเบราว์เซอร์หรือพร็อกซี่แคชที่เสีย', +# E-mail sending +'php-mail-error-unknown' => 'ข้อผิดพลาดที่ไม่รู้จักในฟังก์ชัน mail() ของ PHP', + # Password reset dialog 'resetpass' => 'เปลี่ยนรหัสผ่าน', 'resetpass_announce' => 'คุณล็อกอินผ่านรหัสอีเมลชั่วคราว คุณต้องใส่ค่ารหัสผ่านใหม่เพื่อเสร็จสิ้นขั้นตอนการล็อกอิน:', @@ -704,9 +703,10 @@ $1', 'showlivepreview' => 'แสดงตัวอย่างทันที', 'showdiff' => 'แสดงความเปลี่ยนแปลง', 'anoneditwarning' => "'''คำเตือน:''' หมายเลขไอพีของคุณจะถูกเก็บไว้ในส่วนประวัติของหน้านี้เนื่องจากคุณไม่ได้ล็อกอิน", +'anonpreviewwarning' => 'คุณยังไม่ได้ล็อกอิน การบันทึกจะเก็บเลขที่อยู่ไอพีของคุณไว้ในประวัติของหน้านี้', 'missingsummary' => "'''อย่าลืม:''' คุณยังไม่ได้ระบุคำอธิบายการแก้ไขครั้งนี้ ถ้าคุณกดบันทึกไปส่วนคำอธิบายการแก้ไขนั้นจะว่างและไม่แสดงผล", 'missingcommenttext' => 'กรุณาใส่ความเห็นด้านล่าง', -'missingcommentheader' => "'''อย่าลืม:''' คุณยังไม่ได้ใส่หัวข้อ/จ่าหัวสำหรับความเห็นในครั้งนี้ ถ้าคุณกดบันทึกไปส่วนหัวข้อความเห็นจะว่างไม่แสดงผล", +'missingcommentheader' => "'''อย่าลืม:''' คุณยังไม่ได้ใส่หัวข้อ/จ่าหัวสำหรับความเห็นในครั้งนี้ ถ้าคุณกด {{int:savearticle}} อีกครั้งหนึ่ง การแก้ไขของคุณจะไม่มีหัวข้อ", 'summary-preview' => 'ตัวอย่างคำอธิบายการแก้ไข:', 'subject-preview' => 'ตัวอย่างหัวข้อ:', 'blockedtitle' => 'ผู้ใช้ถูกห้ามใช้งาน', @@ -779,7 +779,11 @@ $1 เป็นผู้ดำเนินการบล็อกในคร 'usercsspreview' => "'''อย่าลืมว่าสไตล์ชีตที่คุณสร้างยังไม่ได้ถูกบันทึก''' '''นี่คือการแสดงตัวอย่างเท่านั้น!'''", 'userjspreview' => "'''อย่าลืมว่าจาวาสคริปต์ยังไม่ได้ถูกบันทึก ขณะนี้แสดงเพียงตัวอย่างเท่านั้น!'''", -'userinvalidcssjstitle' => "'''คำเตือน:''' ไม่มีแบบหน้าตา \"\$1\" อย่าลืมว่าหน้า .css และ .js ที่ปรับแต่งเอง ใช้เป็นอักษรตัวพิมพ์เล็กทั้งหมด เช่น ใช้ {{ns:user}}:Foo/monobook.css แทนที่จะเป็น {{ns:user}}:Foo/Monobook.css", +'sitecsspreview' => "'''โปรดจำไว้ว่า คุณกำลังแสดงตัวอย่าง CSS นี้เท่านั้น''' +'''มันยังไม่ได้ถูกบันทึก!'''", +'sitejspreview' => "'''โปรดจำไว้ว่า คุณกำลังแสดงตัวอย่างรหัส JavaScript นี้เท่านั้น''' +'''มันยังไม่ได้ถูกบันทึก!'''", +'userinvalidcssjstitle' => "'''คำเตือน:''' ไม่มีแบบหน้าตา \"\$1\" อย่าลืมว่าหน้า .css และ .js ที่ปรับแต่งเอง ใช้เป็นอักษรตัวพิมพ์เล็กทั้งหมด เช่น ใช้ {{ns:user}}:Foo/vector.css แทนที่จะเป็น {{ns:user}}:Foo/Vector.css", 'updated' => '(ปรับปรุงแล้ว)', 'note' => "'''คำแนะนำ:'''", 'previewnote' => "'''ตรงนี้เป็นการแสดงตัวอย่างเท่านั้น การเปลี่ยนแปลงยังไม่ได้ถูกบันทึก!'''", @@ -814,9 +818,6 @@ $1 เป็นผู้ดำเนินการบล็อกในคร ถ้าคุณไม่ต้องการให้งานของคุณถูกแก้ไข หรือไม่ต้องการให้งานเผยแพร่ตามที่กล่าวไว้ อย่าส่งข้อความของคุณเข้ามาที่นี่
    นอกจากนี้คุณแน่ใจว่าข้อความที่ส่งเข้ามาคุณได้เขียนด้วยตัวเอง ไม่ได้คัดลอก ทำซ้ำส่วนหนึ่งส่วนใดหรือทั้งหมดจากแหล่งอื่น (ดูรายละเอียดที่ $1) '''อย่าส่งงานที่มีลิขสิทธิ์เข้ามาก่อนได้รับอนุญาตจากเจ้าของ!'''", -'longpagewarning' => "'''คำเตือน: หน้านี้มีความยาว $1 กิโลไบต์ ซึ่งเว็บเบราว์เซอร์บางตัวอาจจะมีปัญหาในการแก้ไขหน้าที่ความยาวเกินกว่า 32 กิโลไบต์ - -ลองพิจารณาแบ่งหน้าออกเป็นหัวข้อย่อย'''", 'longpageerror' => "'''ผิดพลาด: ข้อความที่คุณส่งเข้ามามีขนาด $1 กิโลไบต์ ซึ่งเกินกว่าขนาดที่กำหนดไว้ที่ $2 กิโลไบต์ จึงไม่สามารถบันทึกได้'''", 'readonlywarning' => "'''คำเตือน: ขณะนี้ฐานข้อมูลถูกล็อกเพื่อบำรุงรักษา จึงไม่สามารถบันทึกข้อมูลที่แก้ไขได้ แนะนำให้คัดลอกไปเก็บไว้ที่อื่นก่อนแล้วนำมาบันทึกในเว็บไซต์นี้ภายหลัง''' @@ -991,6 +992,8 @@ $1", 'logdelete-failure' => "'''ไม่สามารถตั้งค่าการแสดงผลของรายการแก้ไขได้:''' $1", 'revdel-restore' => 'เปลี่ยนทัศนวิสัย', +'revdel-restore-deleted' => 'รุ่นที่ถูกลบ', +'revdel-restore-visible' => 'การแก้ไขที่มองเห็นได้', 'pagehist' => 'ประวัติหน้า', 'deletedhist' => 'ลบประวัติ', 'revdelete-content' => 'เนื้อหา', @@ -1059,11 +1062,13 @@ $1", # Diffs 'history-title' => 'ประวัติการแก้ไขหน้า "$1"', 'difference' => '(ความแตกต่างระหว่างรุ่นปรับปรุง)', +'difference-multipage' => '(ความแตกต่างระหว่างหน้าต่างๆ)', 'lineno' => 'แถว $1:', 'compareselectedversions' => 'เปรียบเทียบสองรุ่นที่เลือก', 'showhideselectedversions' => 'แสดง/ซ่อน รุ่นที่เลือก', 'editundo' => 'ย้อน', -'diff-multi' => '({{PLURAL:$1|การแก้ไขหนึ่งรุ่นระหว่างรุ่นที่เปรียบเทียบ|การแก้ไข $1 รุ่นระหว่างรุ่นที่เปรียบเทียบ}}ไม่แสดงผล)', +'diff-multi' => 'การแก้ไข({{PLURAL:$1|หนึ่งรุ่นระหว่างรุ่นที่เปรียบเทียบ|$1 รุ่นระหว่างรุ่นที่เปรียบเทียบ}} โดย {{PLURAL:$2|หนึ่งผู้ใช้|$2 ผู้ใช้}} ไม่แสดงผล)', +'diff-multi-manyusers' => 'การแก้ไข({{PLURAL:$1|หนึ่งรุ่นระหว่างรุ่นที่เปรียบเทียบ|$1 รุ่นระหว่างรุ่นที่เปรียบเทียบ}} โดยผู้ใช้มากกว่า {{PLURAL:$2|หนึ่งผู้ใช้|$2 ผู้ใช้}} ไม่แสดงผล)', # Search results 'searchresults' => 'ค้นหา', @@ -1098,6 +1103,7 @@ $1", 'searchprofile-everything-tooltip' => 'ค้นเนื้อหาทั้งหมด (รวมถึงหน้าอภิปราย)', 'searchprofile-advanced-tooltip' => 'ค้นหาในเนมสเปซที่เลือกเอง', 'search-result-size' => '$1 ({{PLURAL:$2|1 คำ|$2 คำ}})', +'search-result-category-size' => '{{PLURAL:$1|1 สมาชิก|$1 สมาชิก}} ({{PLURAL:$2|1 ประเภทย่อย|$2 หมวดหมู่ย่อย}}, {{PLURAL:$3|1 ไฟล์|$3 ไฟล์}})', 'search-result-score' => 'ความเกี่ยวข้อง : $1%', 'search-redirect' => '(เปลี่ยนทาง $1)', 'search-section' => '(ส่วน $1)', @@ -1173,6 +1179,7 @@ $1", 'contextlines' => 'บรรทัดที่แสดงต่อรายการ:', 'contextchars' => 'ตัวอักษรต่อบรรทัด:', 'stub-threshold' => 'ขีดแบ่งสำหรับ รูปแบบโครง (ความยาวบทความ):', +'stub-threshold-disabled' => 'ปิดการใช้งาน', 'recentchangesdays' => 'จำนวนวันที่แสดงในปรับปรุงล่าสุด:', 'recentchangesdays-max' => '(สูงสุด $1 {{PLURAL:$1|วัน|วัน}})', 'recentchangescount' => 'จำนวนการแก้ไขที่แสดงโดยปริยาย:', @@ -1206,6 +1213,7 @@ $1", 'prefs-files' => 'ไฟล์', 'prefs-custom-css' => 'สไตล์ชีตปรับแต่งเอง', 'prefs-custom-js' => 'จาวาสคริปต์ปรับแต่งเอง', +'prefs-common-css-js' => 'CSS / JavaScript ที่ใช้ร่วมกันสำหรับสกินทั้งหมด:', 'prefs-reset-intro' => 'คุณสามารถใช้หน้านี้เพื่อล้างการตั้งค่าของคุณกลับไปเป็นค่าตั้งต้นทั้งหมด เมื่อล้างแล้วจะไม่สามารถย้อนกลับได้', 'prefs-emailconfirm-label' => 'การยืนยันอีเมล:', @@ -1219,7 +1227,7 @@ $1", 'yourlanguage' => 'ภาษา:', 'yourvariant' => 'ภาษาอื่น', 'yournick' => 'ลายเซ็น:', -'prefs-help-signature' => 'คอมเมนต์ในหน้าูพูดคุยควรจะเซ็นลงท้ายด้วย "~~~~" ซึ่งจะถูกแปลงเป็นลายเซ็นต์และลงวันที่เขียน', +'prefs-help-signature' => 'คอมเมนต์ในหน้าูพูดคุยควรจะเซ็นลงท้ายด้วย "~~~~" ซึ่งจะถูกแปลงเป็นลายเซ็นและลงวันที่เขียน', 'badsig' => 'ลายเซ็นที่ใช้ผิดพลาด กรุณาตรวจสอบคำสั่งเอชทีเอ็มแอล', 'badsiglength' => 'ลายเซ็นยาวเกินไป ต้องมีความยาวไม่เกิน $1 {{PLURAL:$1|ตัวอักษร|ตัวอักษร}}', 'yourgender' => 'เพศ:', @@ -1242,9 +1250,15 @@ $1", 'prefs-advancedrendering' => 'การตั้งค่าขั้นสูง', 'prefs-advancedsearchoptions' => 'การตั้งค่าขั้นสูง', 'prefs-advancedwatchlist' => 'การตั้งค่าขั้นสูง', -'prefs-display' => 'ค่าการแสดงผล', +'prefs-displayrc' => 'ค่าการแสดงผล', +'prefs-displaysearchoptions' => 'ค่าการแสดงผล', +'prefs-displaywatchlist' => 'ค่าการแสดงผล', 'prefs-diffs' => 'ส่วนต่างการแก้ไข', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'ที่อยู่อีเมลดูเหมือนว่าถูกต้อง', +'email-address-validity-invalid' => 'ป้อนที่อยู่อีเมลที่ถูกต้อง', + # User rights 'userrights' => 'บริหารสิทธิผู้ใช้', 'userrights-lookup-user' => 'บริหารสิทธิผู้ใช้', @@ -1311,7 +1325,7 @@ $1", 'right-purge' => 'ล้างแคชของเว็บไซต์โดยไม่จำเป็นต้องยืนยัน', 'right-autoconfirmed' => 'แก้ไขหน้าที่ถูกกึ่งล็อก', 'right-bot' => 'กำหนดว่าเป็นกระบวนการอัตโนมัติ', -'right-nominornewtalk' => 'ไม่มีการแก้ไขเล็กน้อยที่หน้าสนทนาที่ทำให้การเตือนข้อความใหม่ปรากฎ', +'right-nominornewtalk' => 'ไม่มีการแก้ไขเล็กน้อยที่หน้าสนทนาที่ทำให้การเตือนข้อความใหม่ปรากฏ', 'right-apihighlimits' => 'ใช้ข้อจำกัดที่สูงขึ้นในคำสั่งเอพีไอ', 'right-writeapi' => 'ใช้การเขียนเอพีไอ', 'right-delete' => 'ลบหน้า', @@ -1328,6 +1342,7 @@ $1", 'right-hideuser' => 'บล็อกผู้ใช้และซ่อนไม่ให้ผู้อื่นเห็น', 'right-ipblock-exempt' => 'ผ่านการบล็อกหมายเลขไอพี บล็อกแบบอัตโนมัติ และบล็อกเป็นช่วง', 'right-proxyunbannable' => 'ผ่านการบล็อกแบบอัตโนมัติของพร็อกซี', +'right-unblockself' => 'ยกเลิกการปิดกั้นด้วยเอง', 'right-protect' => 'เปลี่ยนระดับการล็อกและแก้ไขหน้าที่ถูกล็อก', 'right-editprotected' => 'แก้ไขหน้าที่ถูกล็อก (ที่ไม่ล็อกแบบสืบทอด)', 'right-editinterface' => 'แก้ไขอินเตอร์เฟซของผู้ใช้', @@ -1350,7 +1365,6 @@ $1", 'right-siteadmin' => 'ล็อกและปลดล็อกฐานข้อมูล', 'right-reset-passwords' => 'ตั้งรหัสผ่านของผู้ใช้อื่นใหม่', 'right-override-export-depth' => 'ส่งออกหน้า รวมหน้าที่เชื่อมโยงกับหน้านี้สูงสุด 5 ลำดับชั้น', -'right-versiondetail' => 'แสดงข้อมูลรุ่นปรับปรุงของซอฟต์แวร์', 'right-sendemail' => 'ส่งอีเมลไปยังผู้ใช้อื่นๆ', # User rights log @@ -1401,14 +1415,9 @@ $1", 'recentchanges-legend' => 'ตัวเลือกปรับปรุงล่าสุด', 'recentchangestext' => 'ในหน้านี้เป็นรายการล่าสุดที่มีการปรับปรุง', 'recentchanges-feed-description' => 'ฟีดนี้แสดงการเปลี่ยนแปลงล่าสุด', -'recentchanges-label-legend' => 'สัญลักษณ์: $1', -'recentchanges-legend-newpage' => '$1 - หน้าใหม่', 'recentchanges-label-newpage' => 'การแก้ไขนี้เป็นการสร้างหน้าใหม่', -'recentchanges-legend-minor' => '$1 - การแก้ไขเล็กน้อย', 'recentchanges-label-minor' => 'เป็นการแก้ไขเล็กน้อย', -'recentchanges-legend-bot' => '$1 - การแก้ไขโดยบอต', 'recentchanges-label-bot' => 'การแก้ไขนี้กระทำโดยบอต', -'recentchanges-legend-unpatrolled' => '$1 - การแก้ไขที่รอตรวจสอบ', 'recentchanges-label-unpatrolled' => 'การแก้ไขนี้ยังไม่ได้ตรวจสอบ', 'rcnote' => "รายการด้านล่างคือการแก้ไข {{PLURAL:$1|'''1''' รายการ|ล่าสุด '''$1''' รายการ}} ในช่วง {{PLURAL:$2|1 วัน|'''$2''' วัน}}ที่ผ่านมา ตั้งแต่วันที่ $5; $4", 'rcnotefrom' => "แสดงการเปลี่ยนแปลงตั้งแต่ '''$2''' (แสดง '''$1''' รายการ)", @@ -1455,6 +1464,9 @@ $1", 'upload_directory_missing' => 'ไดเรกทอรีสำหรับอัปโหลด ($1) หายไป และไม่สามารถสร้างขึ้นใหม่โดยเว็บเซิร์ฟเวอร์', 'upload_directory_read_only' => 'ไม่สามารถเก็บข้อมูลในไดเรกทอรี ($1) ปัญหาเกิดที่เว็บเซิร์ฟเวอร์', 'uploaderror' => 'เกิดความขัดข้องในการอัปโหลด', +'upload-recreate-warning' => "'''คำเตือน: ไฟล์ชื่อดังกล่าวถูกลบหรือถูกย้ายไปแล้ว''' + +ปูมการลบและปูมการย้ายของหน้านี้ถูกนำมาไว้ด้านล่างเพื่อความสะดวก:", 'uploadtext' => "กรุณาใช้แบบฟอร์มด้านล่างในการอัปโหลดไฟล์ สำหรับการดูหรือการค้นหาไฟล์ที่เคยอัปโหลดก่อนหน้านี้ ให้ไปที่[[Special:FileList|รายชื่อไฟล์ที่ถูกอัปโหลด]] การอัปโหลดและการอัปโหลดซ้ำดูได้ที่[[Special:Log/upload|บันทึกการอัปโหลด]] และการลบไฟล์ดูได้ที่[[Special:Log/delete|บันทึกการลบ]] @@ -1462,7 +1474,7 @@ $1", * '''[[{{ns:file}}:File.jpg]]''' เพื่อใช้รูปขนาดเต็ม * '''[[{{ns:file}}:File.png|200px|thumb|left|ข้อความอธิบาย]]''' เพื่อใช้รูปย่อขนาดกว้าง 200 พิกเซลในกล่องที่จัดชิดซ้าย โดยมี \"ข้อความอธิบาย\" เป็นคำบรรยายใต้ภาพ * '''[[{{ns:media}}:File.ogg]]''' สำหรับการเชื่อมโยงไฟล์โดยตรง โดยไม่ปรากฏไฟล์นั้นออกมา", -'upload-permitted' => 'ชนิดชองไฟล์ที่อนุญาตให้ใช้ได้: $1', +'upload-permitted' => 'ชนิดของไฟล์ที่อนุญาตให้ใช้ได้: $1', 'upload-preferred' => 'ชนิดของไฟล์ที่ควรใช้: $1', 'upload-prohibited' => 'ชนิดของไฟล์ที่ไม่อนุญาตให้ใช้: $1', 'uploadlog' => 'บันทึกการอัปโหลด', @@ -1486,6 +1498,17 @@ $1", 'filetype-unwanted-type' => "{{PLURAL:\$3|ไฟล์|ไฟล์}}ชนิด '''\".\$1\"''' เป็นไฟล์ที่ไม่สามารถอัปโหลดได้ ไฟล์ที่สามารถใช้ได้ ได้แก่ \$2", 'filetype-banned-type' => "ไม่อนุญาตให้ใช้ไฟล์ชนิด '''\".\$1\"''' {{PLURAL:\$3|ชนิดของไฟล์|ชนิดของไฟล์}}ที่อนุญาตให้ใช้ได้คือ \$2", 'filetype-missing' => 'นามสกุลไฟล์หายไป (เช่น ".jpg")', +'empty-file' => 'ไฟล์ที่คุณส่งมานั้นไม่มีข้อมูล', +'file-too-large' => 'ไฟล์ที่คุณส่งมามีขนาดใหญ่เกินไป', +'filename-tooshort' => 'ชื่อไฟล์สั้นเกินไป', +'filetype-banned' => 'ไฟล์ประเภทนี้ถูกห้าม', +'verification-error' => 'ไฟล์นี้ไม่ผ่านการพิสูจน์ยืนยันไฟล์', +'hookaborted' => 'สิ่งที่คุณพยายามที่จะทำการปรับเปลี่ยนได้ถูกยกเลิกโดยส่วนขยาย', +'illegal-filename' => 'ชื่อไฟล์นี้ไม่ได้รับอนุญาต', +'overwrite' => 'ไม่อนุญาตให้เขียนทับไฟล์ที่มีอยู่แล้ว', +'unknown-error' => 'เกิดข้อผิดพลาดไม่ทราบสาเหตุ', +'tmp-create-error' => 'ไม่สามารถสร้างไฟล์ชั่วคราว', +'tmp-write-error' => 'เกิดข้อผิดพลาดในการเขียนไฟล์ชั่วคราว', 'large-file' => 'ไฟล์ไม่ควรมีขนาดใหญ่กว่า $1 ไฟล์นี้มีขนาด $2', 'largefileserver' => 'ไฟล์นี้มีขนาดใหญ่กว่าค่าที่อนุญาตให้ใช้ได้', 'emptyfile' => 'ไฟล์ที่อัปโหลดมาเหมือนไฟล์ว่าง อาจเกิดจากปัญหาพิมพ์ชื่อไฟล์ผิด กรุณาตรวจสอบไฟล์อีกครั้ง และแน่ใจว่าต้องการที่จะอัปโหลดไฟล์นี้', @@ -1513,13 +1536,14 @@ $1", 'file-exists-duplicate' => 'ไฟล์นี้ซ้ำกับ{{PLURAL:$1|ไฟล์|ไฟล์}}ต่อไปนี้:', 'file-deleted-duplicate' => 'ไฟล์ที่ตรงกับชื่อนี้ ([[:$1]]) เคยถูกลบไปก่อนหน้า คุณควรตรวจสอบว่าประวัติการลบของไฟล์ก่อนดำเนินการอัปโหลดใหม่', -'successfulupload' => 'อัปโหลดสำเร็จ', 'uploadwarning' => 'คำเตือนการอัปโหลด', 'uploadwarning-text' => 'กรุณาแก้ไขคำอธิบายไฟล์ด้านล่างนี้ แล้วลองใหม่อีกครั้ง', 'savefile' => 'บันทึกไฟล์', 'uploadedimage' => '"[[$1]]" ถูกอัปโหลด', 'overwroteimage' => 'อัปโหลดรุ่นใหม่ของ "[[$1]]"', 'uploaddisabled' => 'อัปโหลดปิดการใช้งาน', +'copyuploaddisabled' => 'การอัปโหลดโดย URL ได้ถูกปิดการใช้งานไว้', +'uploadfromurl-queued' => 'การอัพโหลดของคุณได้ถูกจัดในคิวแล้ว', 'uploaddisabledtext' => 'การอัปโหลดไฟล์ถูกปิดการใช้งาน', 'php-uploaddisabledtext' => 'การอัปโหลดไฟล์ถูกปิดการใช้งานใน PHP กรุณาตรวจสอบการตั้งค่า file_uploads', @@ -1539,6 +1563,14 @@ $1", โปรดพิจารณาความเหมาะสมว่าจะยังอัปโหลดไฟล์นี้ต่อหรือไม่ นี่คือปูมการลบของไฟล์เพื่อประกอบการตัดสินใจ:", 'filename-bad-prefix' => "ไฟล์ที่คุณกำลังจะอัปโหลดเข้ามานี้มีชื่อที่ขึ้นต้นด้วย '''\"\$1\"''' ซึ่งเป็นชื่อที่ไม่สื่อความหมายใดๆ (โดยปกติแล้วชื่อนี้จะถูกตั้งมาโดยกล้องถ่ายรูปดิจิทัล). กรุณาตั้งชื่อไฟล์ใหม่ที่สื่อความหมายมากกว่าเดิม", +'upload-success-subj' => 'อัปโหลดสำเร็จ', +'upload-success-msg' => 'การอัปโหลดของคุณจาก [$2] สำเร็จแล้ว และสามารถใช้ไฟล์ได้ที่นี่: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'ปัญหาการอัปโหลด', +'upload-failure-msg' => 'พบปัญหาการอัปโหลดของคุณจาก [$2]: + +$1', +'upload-warning-subj' => 'คำเตือนการอัปโหลด', +'upload-warning-msg' => 'พบปัญหาการอัปโหลดของคุณจาก [$2] คุณอาจกลับไปยัง[[Special:Upload/stash/$1|ฟอร์มอัปโหลด]]เพื่อแก้ไขปัญหานี้', 'upload-proto-error' => 'โพรโทคอลไม่ถูกต้อง', 'upload-proto-error-text' => 'การอัปโหลดโดยตรงจากเว็บต้องการยูอาร์แอลที่ขึ้นต้นด้วย http:// หรือ ftp://', @@ -1580,7 +1612,7 @@ $1", # Some likely curl errors. More could be added from 'upload-curl-error6' => 'ไม่สามารถติดต่อยูอาร์แอลได้', -'upload-curl-error6-text' => 'ยูอาร์แอลที่ใส่ค่ามาไม่สามารถติดต่อได กรุณาตรวจสอบอีกครั้งว่ายูอาร์แอลนั้นถูกต้อง และเว็บไซต์นั้นยังใช้งานได้ตามปกติ', +'upload-curl-error6-text' => 'ยูอาร์แอลที่ใส่ค่ามาไม่สามารถติดต่อได้ กรุณาตรวจสอบอีกครั้งว่ายูอาร์แอลนั้นถูกต้อง และเว็บไซต์นั้นยังใช้งานได้ตามปกติ', 'upload-curl-error28' => 'เวลาอัปโหลดถูกตัด', 'upload-curl-error28-text' => 'เว็บไซต์นี้ใช้เวลานานเกินไปในการเชื่อมต่อ กรุณาตรวจสอบว่าเว็บนี้ยังใช้งานได้ตามปกติ หรืออาจจะรอสักครู่แล้วลองอัปโหลดใหม่', @@ -1598,6 +1630,7 @@ $1", 'listfiles_search_for' => 'ค้นหาชื่อภาพ:', 'imgfile' => 'ไฟล์', 'listfiles' => 'รายชื่อไฟล์', +'listfiles_thumb' => 'รูปย่อ', 'listfiles_date' => 'วันที่', 'listfiles_name' => 'ชื่อ', 'listfiles_user' => 'ผู้ใช้', @@ -1710,8 +1743,8 @@ $1", 'statistics-edits' => 'แก้ไขทั้งหมดตั้งแต่{{SITENAME}}ภาษาไทยถูกก่อตั้งขึ้นมา', 'statistics-edits-average' => 'จำนวนแก้ไขต่อหน้าโดยเฉลี่ย', 'statistics-views-total' => 'จำนวนการเข้าชมทั้งหมด', +'statistics-views-total-desc' => 'ไม่นับรวมจำนวนการเข้าชมหน้าที่ไม่มีอยู่และหน้าพิเศษ', 'statistics-views-peredit' => 'จำนวนการเข้าดูต่อการแก้ไข:', -'statistics-jobqueue' => 'ความยาว[http://www.mediawiki.org/wiki/Manual:Job_queue คิวงาน]', 'statistics-users' => '[[Special:ListUsers|ผู้ใช้]]ที่ลงทะเบียน', 'statistics-users-active' => 'ผู้ใช้ที่ยังแก้ไขอยู่', 'statistics-users-active-desc' => 'ผู้ใช้ที่ได้แก้ไขในช่วง $1 วันที่ผ่านมา', @@ -1726,7 +1759,7 @@ $1", 'doubleredirects' => 'หน้าเปลี่ยนทางซ้ำซ้อน', 'doubleredirectstext' => 'หน้านี้แสดงรายการชื่อที่เปลี่ยนทางไปยังหน้าเปลี่ยนทางอื่น แต่ละแถวคือลิงก์ของการเปลี่ยนทางครั้งแรกและครั้งที่สอง พร้อมกับหน้าปลายทางของการเปลี่ยนทางครั้งที่สอง ซึ่งควรแก้ไขการเปลี่ยนทางครั้งแรกเป็นหน้าปลายทางดังกล่าว -รายการที่ ขีดฆ่า คือรายการที่แก้ไขแล้ว', +รายการที่ ขีดฆ่า คือรายการที่แก้ไขแล้ว', 'double-redirect-fixed-move' => '[[$1]] ถูกเปลี่ยนชื่อแล้ว และเปลี่ยนทางไปยัง [[$2]]', 'double-redirect-fixer' => 'Redirect fixer', @@ -1749,6 +1782,8 @@ $1", 'nmembers' => '$1 {{PLURAL:$1|หน้า|หน้า}}', 'nrevisions' => '$1 ครั้ง', 'nviews' => '$1 ครั้ง', +'nimagelinks' => 'ใช้ใน $1 {{PLURAL: $1|หน้า|หน้า}}', +'ntransclusions' => 'ใช้ใน $1 {{PLURAL: $1|หน้า|หน้า}}', 'specialpage-empty' => 'ไม่มีหน้าที่เรียกดู', 'lonelypages' => 'หน้าสุดทาง', 'lonelypagestext' => 'หน้าต่อไปนี้ไม่มีการเชื่อมโยงหรือถูกรวมไว้ในหน้าอื่นใน {{SITENAME}}', @@ -1793,8 +1828,8 @@ $1", 'ancientpages' => 'หน้าที่ไม่ได้แก้ไขนานสุด', 'move' => 'เปลี่ยนชื่อ', 'movethispage' => 'เปลี่ยนชื่อหน้านี้', -'unusedimagestext' => 'ไฟล์ดังต่อไปนี้ปรากฎแต่ไม่มีการเรียกใช้ที่หน้าใดๆ เลย -ภาพนี้อาจจะถูกใช้จากเว็บไซต์อื่น ซึ่งลิงก์มาภาพในหน้านี้โดยตรง ดังนั้นไฟล์ดังกล่าวจะยังปรากฎในรายการนี้แม้ว่าจะมีการใช้อย่างต่อเนื่อง', +'unusedimagestext' => 'ไฟล์ดังต่อไปนี้ปรากฏแต่ไม่มีการเรียกใช้ที่หน้าใดๆ เลย +ภาพนี้อาจจะถูกใช้จากเว็บไซต์อื่น ซึ่งลิงก์มาภาพในหน้านี้โดยตรง ดังนั้นไฟล์ดังกล่าวจะยังปรากฏในรายการนี้แม้ว่าจะมีการใช้อย่างต่อเนื่อง', 'unusedcategoriestext' => 'หมวดหมู่ต่อไปนี้ยังมีอยู่ถึงแม้ว่าจะไม่มีว่าไม่มีหน้าไหนหรือบทความไหนใช้ส่วนนี้', 'notargettitle' => 'ไม่พบหน้าปลายทาง', 'notargettext' => 'ไม่ได้ใส่หน้าปลายทางหรือชื่อผู้ใช้ที่ต้องการใช้คำสั่งนี้', @@ -1823,7 +1858,7 @@ $1", # Special:AllPages 'allpages' => 'หน้าทุกหน้า', -'alphaindexline' => '$1 ไป $2', +'alphaindexline' => '$1 ถึง $2', 'nextpage' => 'ถัดไป ($1)', 'prevpage' => 'ก่อนหน้า ($1)', 'allpagesfrom' => 'เริ่มแสดงผลจาก:', @@ -1904,34 +1939,40 @@ $1", 'listgrouprights-removegroup-self-all' => 'ลบทุกกลุ่มออกจากชื่อผู้ใช้นี้', # E-mail user -'mailnologin' => 'ไม่มีการส่งอีเมล', -'mailnologintext' => 'ต้องการทำ[[Special:UserLogin|ล็อกอิน]]และตั้งค่าอีเมลในส่วน[[Special:Preferences|การตั้งค่า]] เพื่อจะส่งอีเมลหาผู้ใช้คนอื่น', -'emailuser' => 'ส่งอีเมลหาผู้ใช้นี้', -'emailpage' => 'อีเมลผู้ใช้', -'emailpagetext' => 'คุณสามารถใช้แบบฟอร์มด้านล่างส่งอีเมลหาผู้ใช้คนนี้ +'mailnologin' => 'ไม่มีการส่งอีเมล', +'mailnologintext' => 'ต้องการทำ[[Special:UserLogin|ล็อกอิน]]และตั้งค่าอีเมลในส่วน[[Special:Preferences|การตั้งค่า]] เพื่อจะส่งอีเมลหาผู้ใช้คนอื่น', +'emailuser' => 'ส่งอีเมลหาผู้ใช้นี้', +'emailpage' => 'อีเมลผู้ใช้', +'emailpagetext' => 'คุณสามารถใช้แบบฟอร์มด้านล่างส่งอีเมลหาผู้ใช้คนนี้ ชื่ออีเมลผู้ส่งจะใช้ชื่ออีเมลที่ได้ระบุไว้แล้วใน[[Special:Preferences|การตั้งค่าส่วนตัวของคุณ]] ซึ่งผู้รับสามารถตอบกลับได้', -'usermailererror' => 'การส่งอีเมลผิดพลาด:', -'defemailsubject' => '{{SITENAME}} อีเมล', -'noemailtitle' => 'ไม่ได้ตั้งอีเมล', -'noemailtext' => 'ผู้ใช้คนนี้ไม่ได้ตั้งค่าอีเมล', -'nowikiemailtitle' => 'ไม่อนุญาตให้ใช้อีเมล', -'nowikiemailtext' => 'ผู้ใช้ท่านนี้เลือกไม่รับอีเมล์จากผู้ใช้อื่น', -'email-legend' => 'ส่งอีเมลถึงผู้ใช้อื่นใน {{SITENAME}}', -'emailfrom' => 'จาก:', -'emailto' => 'ถึง:', -'emailsubject' => 'หัวเรื่อง:', -'emailmessage' => 'ข้อความ:', -'emailsend' => 'ส่ง', -'emailccme' => 'ส่งอีเมลสำเนากลับมา', -'emailccsubject' => 'ส่งข้อความซ้ำไปที่$1: $2', -'emailsent' => 'อีเมลได้ถูกส่งเรียบร้อย', -'emailsenttext' => 'อีเมลได้ถูกส่งเรียบร้อย', -'emailuserfooter' => 'อีเมลฉบับนี้ถูกส่งโดย $1 ถึง $2 ด้วยฟังก์ชัน "อีเมลผู้ใช้รายนี้" ที่ {{SITENAME}}', +'usermailererror' => 'การส่งอีเมลผิดพลาด:', +'defemailsubject' => '{{SITENAME}} อีเมล', +'usermaildisabled' => 'การส่งอีเมลหาผู้ใช้ไม่สามารถใช้งานได้', +'usermaildisabledtext' => 'คุณไม่สามารถส่งอีเมลไปหาผู้ใช้อื่นบนวิกินี้', +'noemailtitle' => 'ไม่ได้ตั้งอีเมล', +'noemailtext' => 'ผู้ใช้คนนี้ไม่ได้ตั้งค่าอีเมล', +'nowikiemailtitle' => 'ไม่อนุญาตให้ใช้อีเมล', +'nowikiemailtext' => 'ผู้ใช้ท่านนี้เลือกไม่รับอีเมลจากผู้ใช้อื่น', +'email-legend' => 'ส่งอีเมลถึงผู้ใช้อื่นใน {{SITENAME}}', +'emailfrom' => 'จาก:', +'emailto' => 'ถึง:', +'emailsubject' => 'หัวเรื่อง:', +'emailmessage' => 'ข้อความ:', +'emailsend' => 'ส่ง', +'emailccme' => 'ส่งอีเมลสำเนากลับมา', +'emailccsubject' => 'ส่งข้อความซ้ำไปที่$1: $2', +'emailsent' => 'อีเมลได้ถูกส่งเรียบร้อย', +'emailsenttext' => 'อีเมลได้ถูกส่งเรียบร้อย', +'emailuserfooter' => 'อีเมลฉบับนี้ถูกส่งโดย $1 ถึง $2 ด้วยฟังก์ชัน "อีเมลผู้ใช้รายนี้" ที่ {{SITENAME}}', + +# User Messenger +'usermessage-summary' => 'ฝากข้อความของระบบ', +'usermessage-editor' => 'ตัวส่งข้อความของระบบ', # Watchlist 'watchlist' => 'รายการเฝ้าดู', 'mywatchlist' => 'รายการเฝ้าดู', -'watchlistfor' => "(สำหรับ '''$1''')", +'watchlistfor2' => 'สำหรับ $1 ($2)', 'nowatchlist' => 'ไม่ได้ใส่หน้าไหนเข้ารายการเฝ้าดู', 'watchlistanontext' => 'กรุณา $1 เพื่อที่จะดูหรือแก้ไขหน้าในรายการเฝ้าดู', 'watchnologin' => 'ไม่ได้ล็อกอิน', @@ -2049,7 +2090,10 @@ $UNWATCHURL 'revertpage' => 'ย้อนการแก้ไขของ [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) ไปยังรุ่นของ [[User:$1|$1]]', 'revertpage-nouser' => 'ย้อนการแก้ไขโดย (ชื่อผู้ใช้ถูกลบออก) ไปยังรุ่นล่าสุดโดย [[User:$1|$1]]', 'rollback-success' => 'ย้อนรุ่นที่แก้ไขโดย $1 ไปยังรุ่นล่าสุดที่แก้ไขโดย $2 แล้ว', -'sessionfailure' => 'ท่าทางจะมีปัญหาเกี่ยวการล็อกอินในช่วงเวลานี้ เกิดจากทางระบบป้องกันการลักลอบการขโมยล็อกอิน กรุณาย้อนกลับไปหน้าก่อนหน้า และลองโหลดใหม่อีกครั้ง', + +# Edit tokens +'sessionfailure-title' => 'Session นี้ล้มเหลว', +'sessionfailure' => 'ท่าทางจะมีปัญหาเกี่ยวการล็อกอินในช่วงเวลานี้ เกิดจากทางระบบป้องกันการลักลอบการขโมยล็อกอิน กรุณาย้อนกลับไปหน้าก่อนหน้า และลองโหลดใหม่อีกครั้ง', # Protect 'protectlogpage' => 'บันทึกการล็อก', @@ -2172,19 +2216,23 @@ $1', 'month' => 'จากเดือน (และก่อนหน้า):', 'year' => 'จากปี (และก่อนหน้า):', -'sp-contributions-newbies' => 'แสดงการแก้ไขของผู้ใช้ใหม่เท่านั้น', -'sp-contributions-newbies-sub' => 'สำหรับผู้ใช้ใหม่', -'sp-contributions-newbies-title' => 'เรื่องที่เขียนโดยบัญชีผู้ใช้ใหม่', -'sp-contributions-blocklog' => 'บันทึกการบล็อก', -'sp-contributions-deleted' => 'การแก้ไขที่ถูกลบ', -'sp-contributions-logs' => 'ปูม', -'sp-contributions-talk' => 'พูดคุย', -'sp-contributions-userrights' => 'บริหารสิทธิผู้ใช้', -'sp-contributions-blocked-notice' => 'ปัจจุบันเลขที่อยู่ไอพีนี้ถูกบล็อก +'sp-contributions-newbies' => 'แสดงการแก้ไขของผู้ใช้ใหม่เท่านั้น', +'sp-contributions-newbies-sub' => 'สำหรับผู้ใช้ใหม่', +'sp-contributions-newbies-title' => 'เรื่องที่เขียนโดยบัญชีผู้ใช้ใหม่', +'sp-contributions-blocklog' => 'บันทึกการบล็อก', +'sp-contributions-deleted' => 'การแก้ไขที่ถูกลบ', +'sp-contributions-uploads' => 'อัปโหลด', +'sp-contributions-logs' => 'ปูม', +'sp-contributions-talk' => 'พูดคุย', +'sp-contributions-userrights' => 'บริหารสิทธิผู้ใช้', +'sp-contributions-blocked-notice' => 'ปัจจุบันเลขที่อยู่ไอพีนี้ถูกบล็อก +ปูมการบล็อกล่าสุดแสดงด้านล่างนี้เพื่อการอ้างอิง:', +'sp-contributions-blocked-notice-anon' => 'ปัจจุบันเลขที่อยู่ไอพีนี้ถูกบล็อก ปูมการบล็อกล่าสุดแสดงด้านล่างนี้เพื่อการอ้างอิง:', -'sp-contributions-search' => 'ค้นหาการแก้ไข', -'sp-contributions-username' => 'หมายเลขไอพีหรือชื่อผู้ใช้:', -'sp-contributions-submit' => 'สืบค้น', +'sp-contributions-search' => 'ค้นหาการแก้ไข', +'sp-contributions-username' => 'หมายเลขไอพีหรือชื่อผู้ใช้:', +'sp-contributions-toponly' => 'แสดงเฉพาะการแก้ไขรุ่นล่าสุด', +'sp-contributions-submit' => 'สืบค้น', # What links here 'whatlinkshere' => 'หน้าที่ลิงก์มา', @@ -2244,8 +2292,7 @@ $1', 'ipb-edit-dropdown' => 'แก้ไขสาเหตุการบล็อก', 'ipb-unblock-addr' => 'เลิกบล็อก $1', 'ipb-unblock' => 'เลิกบล็อกผู้ใช้หรือหมายเลขไอพี', -'ipb-blocklist-addr' => 'ดูการบล็อกที่มีอยู่สำหรับ $1', -'ipb-blocklist' => 'ดูการปล็อกปัจจุบัน', +'ipb-blocklist' => 'ดูการบล็อกปัจจุบัน', 'ipb-blocklist-contribs' => 'ผลงานที่สร้างสรรค์โดย $1', 'unblockip' => 'ปลดบล็อกผู้ใช้', 'unblockiptext' => 'ใช้แบบฟอร์มด้านล่างสำหรับบล็อกหรือเลิกบล็อกหมายเลขไอพี หรือผู้ใช้', @@ -2295,7 +2342,7 @@ $1', 'range_block_disabled' => 'ยกเลิกการบล็อกช่วงไอพีของผู้ดูแลระบบ', 'ipb_expiry_invalid' => 'ค่าวันหมดอายุไม่ถูกต้อง', 'ipb_expiry_temp' => 'ผู้ใช้ที่ถูกบล็อกจะซ่อนโดยถาวร', -'ipb_hide_invalid' => 'ไม่สามารถยับยั้งชื่อผู้ใช้นี้ได้; เนื่องจากอาจจะมีการแก้ไขมากเกินไป', +'ipb_hide_invalid' => 'ไม่สามารถยับยั้งชื่อผู้ใช้นี้ได้ เนื่องจากอาจจะมีการแก้ไขมากเกินไป', 'ipb_already_blocked' => '"$1" ถูกบล็อกแล้วก่อนหน้านี้', 'ipb-needreblock' => '== ถูกบล็อกแล้ว == $1 ถูกบล็อกแล้ว คุณต้องการแก้ไขหรือไม่', @@ -2313,6 +2360,8 @@ $1 ถูกบล็อกแล้ว คุณต้องการแก้ 'sorbs_create_account_reason' => 'หมายเลขไอพีของคุณอยู่ในพร็อกซีเปิดในส่วน DNSBL ที่ถูกใช้งานในเว็บไซต์ ดังนั้นคุณไม่สามารถสร้างชื่อบัญชีผู้ใช้ได้', 'cant-block-while-blocked' => 'คุณไม่สามารถบล็อกผู้ใช้อื่นในขณะที่คุณกำลังถูกบล็อก', 'cant-see-hidden-user' => 'ผู้ใช่ที่คุณกำลังพยายามระงับนั้นได้ถูกระงับหรือซ่อนเดิมอยู่แล้ว ในขณะที่ีคุณไม่มีสิทธิ์ในการซ่อนผู้ใช้ คุณไม่สามารถดูหรือแก้ไขการระงับผู้ใช้ได้', +'ipbblocked' => 'คุณไม่สามารถบล็อกหรือปลดบล็อกผู้ใช้คนอื่น เนื่องจากคุณกำลังถูกบล็อก', +'ipbnounblockself' => 'คุณไม่ได้รับอนุญาตให้ปลดบล็อกตนเอง', # Developer tools 'lockdb' => 'ล็อกฐานข้อมูล', @@ -2343,6 +2392,17 @@ $1 ถูกบล็อกแล้ว คุณต้องการแก้ คำเตือน! การเปลี่ยนชื่อจะมีผลอย่างมากกับสถิติของหน้านิยมที่มีคนเข้าดูมาก ให้แน่ใจว่าต้องการเปลี่ยนชื่อในครั้งนี้", +'movepagetext-noredirectfixer' => "การใช้แบบฟอร์มด้านล่างนี้จะเปลี่ยนชื่อหน้า ซึ่งจะทำให้ประวัติทั้งหมดย้ายไปยังชื่อใหม่ +ชื่อเรื่องเก่าจะกลายเป็นหน้าเปลี่ยนทางไปยังชื่อเรื่องใหม่ +อย่าลืมตรวจสอบ[[Special:DoubleRedirects|หน้าเปลี่ยนทางซ้ำซ้อน]]หรือ[[Special:BrokenRedirects|หน้าเปลี่ยนทางที่เสีย]] +คุณจะเป็นผู้รับผิดชอบเพื่อให้แน่ใจว่าการเชื่อมโยงต่าง ๆ ชี้ไปยังที่ที่พวกมันควรจะไป + +โปรดทราบว่าหน้าดังกล่าวจะ'''ไม่'''ถูกย้าย ถ้ามีหน้าที่ใช้ชื่อเรื่องใหม่อยู่แล้ว เว้นแต่เป็นหน้าว่างหรือหน้าเปลี่ยนทาง และไม่มีประวัติการแก้ไขในอดีต +ซึ่งหมายความว่า คุณสามารถเปลี่ยนชื่อหน้ากลับไปเป็นชื่อเดิมหากคุณทำผิดพลาด และคุณไม่สามารถเขียนทับหน้าที่มีอยู่แล้วได้ + +'''คำเตือน!''' +สิ่งนี้อาจเป็นการเปลี่ยนแปลงที่รุนแรงและไม่คาดคิดสำหรับหน้าที่เป็นที่นิยม +โปรดแน่ใจว่าคุณเข้าใจในผลของการกระทำนี้ก่อนที่จะดำเนินการต่อไป", 'movepagetalktext' => "หน้าพูดคุยของหน้านี้จะถูกเปลี่ยนชื่อตามไปด้วย '''เว้นเสียแต่:''' *หน้าพูดคุยไม่ว่างมีแล้วที่ชื่อใหม่ หรือ *ได้เลือกไม่ต้องการเปลี่ยนชื่อด้านล่าง @@ -2397,6 +2457,7 @@ $1 ถูกบล็อกแล้ว คุณต้องการแก้ 'immobile-source-page' => 'หน้านี้ไม่สามารถเปลี่ยนชื่อได้', 'immobile-target-page' => 'ไม่สามารถเปลี่ยนไปยังชื่อที่ต้องการได้', 'imagenocrossnamespace' => 'ไม่สามารถย้ายไฟล์ไปยังเนมสเปซที่ไม่รองรับ', +'nonfile-cannot-move-to-file' => 'ไม่สามารถย้ายจากเนมสเปซอื่นมาเป็นเนมสเปซไฟล์', 'imagetypemismatch' => 'นามสกุลของไฟล์ใหม่ไม่ตรงกับชนิดของไฟล์', 'imageinvalidfilename' => 'ชื่อไฟล์เป้าหมายไม่ถูกต้อง', 'fix-double-redirects' => 'อัปเดตหน้าเปลี่ยนทางทุกหน้าที่โอนไปยังชื่อเดิม', @@ -2405,9 +2466,9 @@ $1 ถูกบล็อกแล้ว คุณต้องการแก้ บันทึกการป้องกันล่าสุดถูกแสดงไว้ด้านล่างเพื่อการอ้างอิง", 'semiprotectedpagemovewarning' => "'''หมายเหตุ:''' หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้น รายการแก้ไขล่าสุดได้ถูกแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง", -'move-over-sharedrepo' => '== มีไฟล์เดิมปรากฎ == -ไฟล์ [[:$1]] มีปรากฎเดิมอยู่แล้วในคลังเก็บภาพส่วนกลาง การย้ายไฟล์ที่มีชื่อเรื่องนี้อาจจะเป็นการเขียนทับไฟล์เดิมในคลับเก็บได้', -'file-exists-sharedrepo' => 'ชื่อไฟล์นี้มีปรากฎเดิมอยู่แล้วในคลังเก็บภาพส่วนกลาง +'move-over-sharedrepo' => '== มีไฟล์เดิมปรากฏ == +ไฟล์ [[:$1]] มีปรากฏเดิมอยู่แล้วในคลังเก็บภาพส่วนกลาง การย้ายไฟล์ที่มีชื่อเรื่องนี้อาจจะเป็นการเขียนทับไฟล์เดิมในคลังเก็บได้', +'file-exists-sharedrepo' => 'ชื่อไฟล์นี้มีปรากฏเดิมอยู่แล้วในคลังเก็บภาพส่วนกลาง กรุณาเลือกชื่ออื่น', # Export @@ -2439,9 +2500,9 @@ $1 ถูกบล็อกแล้ว คุณต้องการแก้ 'allmessagesnotsupportedDB' => "หน้านี้ไม่สามารถใช้งานได้เนื่องจาก '''\$wgUseDatabaseMessages''' ถูกระงับการใช้งาน", 'allmessages-filter-legend' => 'กรอง', 'allmessages-filter' => 'กรองตามสถานะที่เลือก:', -'allmessages-filter-unmodified' => 'มีการแก้ไข', +'allmessages-filter-unmodified' => 'ไม่มีการแก้ไข', 'allmessages-filter-all' => 'ทั้งหมด', -'allmessages-filter-modified' => 'ไม่มีการแก้ไข', +'allmessages-filter-modified' => 'มีการแก้ไข', 'allmessages-prefix' => 'กรองด้วยคำข้างหน้า:', 'allmessages-language' => 'ภาษา:', 'allmessages-filter-submit' => 'ไป', @@ -2473,6 +2534,7 @@ $1 ถูกบล็อกแล้ว คุณต้องการแก้ 'importstart' => 'กำลังนำเข้าหน้า...', 'import-revision-count' => '$1 {{PLURAL:$1|รุ่นการแก้ไข|รุ่นการแก้ไข}}', 'importnopages' => 'ไม่มีหน้าให้นำเข้า', +'imported-log-entries' => 'นำ $1 {{PLURAL:$1| เข้าระบบ | รายการบันทึก}}', 'importfailed' => 'การนำเข้าไม่สำเร็จ: $1', 'importunknownsource' => 'ไม่ทราบชนิดของไฟล์นำเข้า', 'importcantopen' => 'ไม่สามารถเปิดไฟล์นำเข้าได้', @@ -2568,6 +2630,8 @@ $1 ถูกบล็อกแล้ว คุณต้องการแก้ 'tooltip-upload' => 'เริ่มอัปโหลด', 'tooltip-rollback' => '"ถอยกลับฉุกเฉิน" ใช้ย้อนการแก้ไขของหน้านี้ไปยังรุ่นโดยผู้ใช้ก่อนหน้าในคลิกเดียว', 'tooltip-undo' => '"ย้อน" ใช้ย้อนการแก้ไขครั้งนี้และเปิดฟอร์มให้แก้ไข สามารถเพิ่มคำอธิบายในตอนท้าย', +'tooltip-preferences-save' => 'บันทึกการตั้งค่า', +'tooltip-summary' => 'ใส่คำอธิบายอย่างย่อสั้น ๆ', # Stylesheets 'common.css' => '/** CSS ที่อยู่ในหน้านี้จะมีผลต่อทุกสกินในเว็บไซต์ */', @@ -2679,14 +2743,17 @@ $1', 'imagemaxsize' => "ขนาดภาพที่จำกัด:
    ''(สำหรับหน้าอธิบายภาพ)''", 'thumbsize' => 'ขนาดรูปย่อ:', 'widthheightpage' => '{{PLURAL:$3|หน้า|หน้า}} $1×$2, $3', -'file-info' => '(ขนาดไฟล์: $1, ชนิดไมม์: $2)', -'file-info-size' => '($1 × $2 พิกเซล, ขนาดไฟล์: $3, ชนิดไมม์: $4)', +'file-info' => 'ขนาดไฟล์: $1, ชนิดไมม์: $2', +'file-info-size' => '$1 × $2 พิกเซล, ขนาดไฟล์: $3, ชนิดไมม์: $4', 'file-nohires' => 'ไม่มีภาพความละเอียดสูงกว่านี้', -'svg-long-desc' => '(ไฟล์ SVG, $1 × $2 พิกเซล (พอเป็นพิธี), ขนาดไฟล์: $3)', +'svg-long-desc' => 'ไฟล์ SVG, $1 × $2 พิกเซล พอเป็นพิธี, ขนาดไฟล์: $3', 'show-big-image' => 'ความละเอียดสูงสุด', 'show-big-image-thumb' => 'ขนาดของภาพแสดงผล: $1 × $2 พิกเซล', 'file-info-gif-looped' => 'วนซ้ำ', 'file-info-gif-frames' => '$1 {{PLURAL:$1|เฟรม|เฟรม}}', +'file-info-png-looped' => 'วนซ้ำ', +'file-info-png-repeat' => 'เล่นแล้ว $1 {{PLURAL:$1|ครั้ง|ครั้ง}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|เฟรม|เฟรม}}', # Special:NewFiles 'newimages' => 'แกลลอรีภาพใหม่', @@ -2839,6 +2906,7 @@ $1', 'exif-gpsareainformation' => 'ชื่อของพื้นที่จีพีเอส', 'exif-gpsdatestamp' => 'วันที่จีพีเอส', 'exif-gpsdifferential' => 'การปรับแค่ข้อแตกต่างจีพีเอส', +'exif-objectname' => 'ชื่อเรื่องสั้น', # EXIF attributes 'exif-compression-1' => 'ไม่ได้บีบอัด', @@ -2996,24 +3064,24 @@ $1', 'limitall' => 'ทั้งหมด', # E-mail address confirmation -'confirmemail' => 'ยืนยันอีเมล', -'confirmemail_noemail' => 'ไม่ได้ใส่อีเมลในส่วน [[Special:Preferences|การตั้งค่าส่วนตัว]]', -'confirmemail_text' => 'ถ้าต้องการใช้คำสั่งพิเศษในด้านอีเมสล จำเป็นต้องใส่ค่าอีเมลก่อน โดยกดที่ปุ่มด้านล่าง และทางระบบจะส่งไปที่อีเมลนี้ ในอีเมลจะมีลิงก์ซึ่งมีรหัสสำหรับยืนยันอีเมล', -'confirmemail_pending' => 'รหัสยืนยันได้ถูกส่งไปที่อีเมลของคุณ ถ้าได้สร้างบัญชีเร็วนี้ ให้รอซักครู่ก่อนที่จะขอรหัสอีกครั้งหนึ่ง', -'confirmemail_send' => 'ส่งรหัสยืนยันผ่านทางอีเมล', -'confirmemail_sent' => 'อีเมลยืนยันได้ส่งเรียบร้อย', -'confirmemail_oncreate' => 'รหัสยืนยันได้ถูกส่งไปที่อีเมล อย่างไรก็ตามรหัสนี้ไม่จำเป็นสำหรับการล็อกอิน เว้นเสียแต่ว่าต้องการใช้คำสั่งพิเศษในด้านอีเมลของวิกินี้', -'confirmemail_sendfailed' => 'ขออภัย {{SITENAME}}ภาษาไทยไม่สามารถส่งอีเมลให้คุณยืนยันการใช้งานได้ +'confirmemail' => 'ยืนยันอีเมล', +'confirmemail_noemail' => 'ไม่ได้ใส่อีเมลในส่วน [[Special:Preferences|การตั้งค่าส่วนตัว]]', +'confirmemail_text' => 'ถ้าต้องการใช้คำสั่งพิเศษในด้านอีเมสล จำเป็นต้องใส่ค่าอีเมลก่อน โดยกดที่ปุ่มด้านล่าง และทางระบบจะส่งไปที่อีเมลนี้ ในอีเมลจะมีลิงก์ซึ่งมีรหัสสำหรับยืนยันอีเมล', +'confirmemail_pending' => 'รหัสยืนยันได้ถูกส่งไปที่อีเมลของคุณ ถ้าได้สร้างบัญชีเร็วนี้ ให้รอซักครู่ก่อนที่จะขอรหัสอีกครั้งหนึ่ง', +'confirmemail_send' => 'ส่งรหัสยืนยันผ่านทางอีเมล', +'confirmemail_sent' => 'อีเมลยืนยันได้ส่งเรียบร้อย', +'confirmemail_oncreate' => 'รหัสยืนยันได้ถูกส่งไปที่อีเมล อย่างไรก็ตามรหัสนี้ไม่จำเป็นสำหรับการล็อกอิน เว้นเสียแต่ว่าต้องการใช้คำสั่งพิเศษในด้านอีเมลของวิกินี้', +'confirmemail_sendfailed' => 'ขออภัย {{SITENAME}}ภาษาไทยไม่สามารถส่งอีเมลให้คุณยืนยันการใช้งานได้ กรุณาตรวจสอบอีเมลว่าถูกต้อง และไม่มีอักขระที่ไม่สามารถใช้ได้ ข้อความตีกลับ: $1', -'confirmemail_invalid' => 'รหัสยืนยันไม่ถูกต้อง หรือรหัสหมดอายุ', -'confirmemail_needlogin' => 'ต้องทำการ $1 เพื่อยืนยันอีเมลของคุณว่าถูกต้อง', -'confirmemail_success' => 'อีเมลคุณได้รับการยืนยันแล้ว คุณอาจจะล็อกอินและมีความสุขกับวิกิ', -'confirmemail_loggedin' => 'อีเมลคุณได้รับการยืนยันแล้ว', -'confirmemail_error' => 'มีปัญหาเกิดขึ้นในการยืนยันอีเมล', -'confirmemail_subject' => '{{SITENAME}} ยืนยันการใช้งานอีเมล', -'confirmemail_body' => 'ใครบางคน ซึ่งอาจจะเป็นคุณ จากหมายเลขไอพี $1 ได้ลงทะเบียนในชื่อ "$2" โดยใช้อีเมลนี้ที่ {{SITENAME}} +'confirmemail_invalid' => 'รหัสยืนยันไม่ถูกต้อง หรือรหัสหมดอายุ', +'confirmemail_needlogin' => 'ต้องทำการ $1 เพื่อยืนยันอีเมลของคุณว่าถูกต้อง', +'confirmemail_success' => 'อีเมลคุณได้รับการยืนยันแล้ว คุณอาจจะล็อกอินและมีความสุขกับวิกิ', +'confirmemail_loggedin' => 'อีเมลคุณได้รับการยืนยันแล้ว', +'confirmemail_error' => 'มีปัญหาเกิดขึ้นในการยืนยันอีเมล', +'confirmemail_subject' => '{{SITENAME}} ยืนยันการใช้งานอีเมล', +'confirmemail_body' => 'ใครบางคน ซึ่งอาจจะเป็นคุณ จากหมายเลขไอพี $1 ได้ลงทะเบียนในชื่อ "$2" โดยใช้อีเมลนี้ที่ {{SITENAME}} เพื่อยืนยันว่าบัญชีผู้ใช้นี้เป็นของคุณอย่างแน่อน และใช้งานฟีเจอร์ส่งอีเมลหาผู้ใช้บน {{SITENAME}} กดลิงก์นี้ในเว็บเบราวเซอร์ของคุณ: @@ -3024,8 +3092,34 @@ $3 $5 รหัสยืนยันนี้จะหมดอายุเมื่อ $4', -'confirmemail_invalidated' => 'การยืนยันทางอีเมลได้ถูกยกเลิกแล้ว', -'invalidateemail' => 'ยกเลิกการยืนยันทางอีเมล', +'confirmemail_body_changed' => 'ใครบางคน ซึ่งอาจจะเป็นคุณ จากเลขที่อยู่ไอพี $1 ได้เปลี่ยนที่อยู่อีเมลสำหรับบัญชีผู้ใช้ "$2" ไปยังที่อยู่นี้บน {{SITENAME}} + +เพื่อยืนยันว่าบัญชีผู้ใช้นี้เป็นของคุณอย่างแน่นอนและเปิดใช้งานฟีเจอร์ส่งอีเมลหาผู้ใช้บน {{SITENAME}} อีกครั้งหนึ่ง กดลิงก์นี้ในเว็บเบราวเซอร์ของคุณ: + +$3 + +ถ้าบัญชีผู้ใช้นี้*ไม่*ได้เป็นของคุณ กรุณากดลิงก์ด้านล่างเพื่อยกเลิกการยืนยันที่อยู่อีเมล + +$5 + +รหัสยืนยันนี้จะหมดอายุเมื่อ $4', +'confirmemail_body_set' => 'ใครสักคนจากที่อยู่ไอพี $1 ซึ่งอาจเป็นคุณ +ได้กำหนดที่อยู่อีเมลของบัญชี "$2" บน {{SITENAME}} มายังที่อยู่อีเมลนี้ + +เพื่อยืนยันว่าบัญชีนี้เป็นของคุณจริง ๆ +และเปิดใช้งานคุณสมบัติอีเมลบน {{SITENAME}} อีกครั้ง +ให้เปิดลิงก์ต่อไปนี้ในเบราว์เซอร์ของคุณ: + +$3 + +หากบัญชีดังกล่าว *ไม่ใช่* ของคุณ +ให้เปิดลิงก์ต่อไปนี้เพื่อยกเลิกการยืนยันที่อยู่อีเมล: + +$5 + +รหัสยืนยันนี้จะหมดอายุเมื่อ $4', +'confirmemail_invalidated' => 'การยืนยันทางอีเมลได้ถูกยกเลิกแล้ว', +'invalidateemail' => 'ยกเลิกการยืนยันทางอีเมล', # Scary transclusion 'scarytranscludedisabled' => '[ส่งค่าของอินเตอร์วิกิถูกระงับ]', @@ -3049,7 +3143,7 @@ $1', # action=purge 'confirm_purge_button' => 'ตกลง', 'confirm-purge-top' => 'ล้างแคชสำหรับหน้านี้หรือไม่', -'confirm-purge-bottom' => 'การกำจัดหน้าจะล้างแคชของหน้านี้และบังคับให้ฉบับปรับปรุงล่าสุดปรากฎขึ้น', +'confirm-purge-bottom' => 'การกำจัดหน้าจะล้างแคชของหน้านี้และบังคับให้ฉบับปรับปรุงล่าสุดปรากฏขึ้น', # Multipage image navigation 'imgmultipageprev' => '← หน้าก่อนหน้า', @@ -3065,6 +3159,7 @@ $1', 'table_pager_first' => 'หน้าแรก', 'table_pager_last' => 'หน้าสุดท้าย', 'table_pager_limit' => 'แสดง $1 รายการต่อหน้า', +'table_pager_limit_label' => 'รายการต่อหน้า:', 'table_pager_limit_submit' => 'ค้นหา', 'table_pager_empty' => 'ไม่พบที่ต้องการ', @@ -3126,6 +3221,7 @@ $1', 'version-specialpages' => 'หน้าพิเศษ', 'version-parserhooks' => 'ฮุกที่มีการพาร์สค่า', 'version-variables' => 'ตัวแปร', +'version-skins' => 'รูปลักษณ์', 'version-other' => 'อื่นๆ', 'version-mediahandlers' => 'ตัวจัดการเกี่ยวกับสื่อ (media handler)', 'version-hooks' => 'ฮุก', @@ -3137,6 +3233,13 @@ $1', 'version-hook-subscribedby' => 'สนับสนุนโดย', 'version-version' => '(รุ่น $1)', 'version-license' => 'สัญญาอนุญาต', +'version-poweredby-credits' => "วิกินี้จัดทำโดย '''[http://www.mediawiki.org/ MediaWiki]''', สงวนลิขสิทธิ์ © 2001-$1 โดย $2.", +'version-poweredby-others' => 'ผู้อื่น', +'version-license-info' => 'มีเดียวิกิเป็นซอฟต์แวร์เสรี คุณสามารถแจกจ่ายต่อ และ/หรือ แก้ไขโปรแกรมได้ภายใต้เงื่อนไขของ GNU General Public License ที่เผยแพร่โดยมูลนิธิซอฟต์แวร์เสรี ในรุ่นที่ 2 ของใบอนุญาตหรือรุ่นอื่นใด (ตามที่คุณเลือก) + +มีเดียวิกิมีการแจกจ่ายโดยหวังว่าจะเป็นประโยชน์ แต่ไม่มีการรับประกันใดๆ ทั้งสิ้น ไม่มีแม้การรับประกันโดยนัยเพื่อการค้า หรือความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ ดู GNU General Public License เพื่อดูรายละเอียดเพิ่มเติม + +คุณควรจะได้รับ [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU General Public License] พร้อมกับโปรแกรมนี้ หากไม่พบ กรุณาเขียนจดหมายถึง Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA หรือ [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html อ่านออนไลน์]', 'version-software' => 'ซอฟต์แวร์ที่ติดตั้ง', 'version-software-product' => 'ชื่อ', 'version-software-version' => 'รุ่น', @@ -3188,7 +3291,7 @@ $1', 'external_image_whitelist' => ' #เว้นบรรทัดนี้ไว้จากการแก้ไข
     #ใส่คำอธิบายปกติ (เฉพาะในส่วนที่อยู่ระหว่างสัญลักษณ์ //) ด้านล่างนี้
     #ซึ่งคำอธิบายดังกล่าวจะถูกจับคู่กับ URL ของรูปถ่ายภายนอก
    -#ถ้าตรงกันจะปรากฎเป็นภาพออกมา หรือมิเช่นนั้นจะปรากฎเป็นลิงก์ไปยังรูปภาพนั้น
    +#ถ้าตรงกันจะปรากฏเป็นภาพออกมา หรือมิเช่นนั้นจะปรากฏเป็นลิงก์ไปยังรูปภาพนั้น
     #บรรทัดที่ขึ้นต้นด้วย # จะถูกกำหนดเป็นหมายเหตุเพิ่มเติม
     #กรุณาพิมพ์ตัวพิมพ์เล็ก-ใหญ่ตามชื่อไฟล์ให้ตรงกัน
     
    @@ -3207,6 +3310,15 @@ $1',
     'tags-edit'               => 'แก้ไข',
     'tags-hitcount'           => '$1 การเปลี่ยนแปลง',
     
    +# Special:ComparePages
    +'comparepages'     => 'เปรียบเทียบหน้า',
    +'compare-selector' => 'เปรียบเทียบรุ่นของหน้า',
    +'compare-page1'    => 'หน้า 1',
    +'compare-page2'    => 'หน้า 2',
    +'compare-rev1'     => 'รุ่น 1',
    +'compare-rev2'     => 'รุ่น 2',
    +'compare-submit'   => 'เปรียบเทียบ',
    +
     # Database error messages
     'dberr-header'      => 'วิกินี้กำลังประสบปัญหา',
     'dberr-problems'    => 'ขออภัย เว็บไซต์นี้กำลังพบกับข้อผิดพลาดทางเทคนิค',
    @@ -3223,8 +3335,13 @@ $1',
     'htmlform-float-invalid'       => 'ค่าที่คุณกำนหดไม่ใช่ตัวเลข',
     'htmlform-int-toolow'          => 'ค่าที่คุณกำหนดนั้นต่ำกว่าค่าต่ำสุดที่ $1',
     'htmlform-int-toohigh'         => 'ค่าที่คุณกำหนดนั้นเกินกว่าค่าสูงสุดที่ $1',
    +'htmlform-required'            => 'จำเป็นต้องกรอกข้อมูลนี้',
     'htmlform-submit'              => 'ส่งข้อมูล',
     'htmlform-reset'               => 'ยกเลิกการเปลื่ยนแปลง',
     'htmlform-selectorother-other' => 'อื่นๆ',
     
    +# SQLite database support
    +'sqlite-has-fts' => 'รุ่น $1 พร้อมการสนับสนุนการค้นหาข้อความแบบเต็ม',
    +'sqlite-no-fts'  => 'รุ่น $1 โดยไม่มีการสนับสนุนการค้นหาข้อความแบบเต็ม',
    +
     );
    diff --git a/languages/messages/MessagesTi.php b/languages/messages/MessagesTi.php
    index 585c5892..2eb4d355 100644
    --- a/languages/messages/MessagesTi.php
    +++ b/languages/messages/MessagesTi.php
    @@ -151,9 +151,6 @@ $messages = array(
     'allpagesnext'   => 'ዝቕጽል',
     'allpagessubmit' => 'ኪድ',
     
    -# Watchlist
    -'watchlistfor' => "(ን'''$1''')",
    -
     # Protect
     'pagesize' => '(ባይታት)',
     
    diff --git a/languages/messages/MessagesTk.php b/languages/messages/MessagesTk.php
    index f782f6ea..0dcde1e2 100644
    --- a/languages/messages/MessagesTk.php
    +++ b/languages/messages/MessagesTk.php
    @@ -10,6 +10,7 @@
      * @author Flrn
      * @author Hanberke
      * @author Runningfridgesrule
    + * @author The Evil IP address
      */
     
     $namespaceNames = array(
    @@ -48,8 +49,7 @@ $messages = array(
     'tog-editsection'             => 'Her bir bölümde [redaktirle] çykgydyny görkez',
     'tog-editsectiononrightclick' => 'Bölümleri bölümiň adyna sag tyklap redaktirlemäge mümkinçilik döret (JavaScript)',
     'tog-showtoc'                 => 'Mazmun tablisasyny görkez (3 sanydan köp ady bar bolan sahypalar üçin)',
    -'tog-rememberpassword'        => 'Parolymy ýatda sakla',
    -'tog-editwidth'               => 'Özgerdiş gutusyny tutuş ekrany doldurar ýaly edip giňelt',
    +'tog-rememberpassword'        => 'Sessiýamy şu brauzerde ýatda sakla  (iň köp $1 {{PLURAL:$1|günläp|günläp}})',
     'tog-watchcreations'          => 'Döreden sahypalarymy gözegçilik sanawyma goş',
     'tog-watchdefault'            => 'Redaktirlän sahypalarymy gözegçilik sanawyma goş',
     'tog-watchmoves'              => 'Adyny üýtgeden sahypalarymy gözegçilik sanawyma goş',
    @@ -194,31 +194,21 @@ kiçi kategoriýadan {{PLURAL:$1|sany kiçi kategoriýa|$1 sany kiçi kategoriý
     'faqpage'        => 'Project:KSS',
     
     # Vector skin
    -'vector-action-addsection'   => 'Tema goş',
    -'vector-action-delete'       => 'Öçür',
    -'vector-action-move'         => 'Adyny üýtget',
    -'vector-action-protect'      => 'Goraga al',
    -'vector-action-undelete'     => 'Öçürmäni yzyna al',
    -'vector-action-unprotect'    => 'Goragy aýyr',
    -'vector-namespace-category'  => 'Kategoriýa',
    -'vector-namespace-help'      => 'Ýardam sahypasy',
    -'vector-namespace-image'     => 'Faýl',
    -'vector-namespace-main'      => 'Sahypa',
    -'vector-namespace-media'     => 'Media sahypasy',
    -'vector-namespace-mediawiki' => 'Habarlaşyk',
    -'vector-namespace-project'   => 'Taslama sahypasy',
    -'vector-namespace-special'   => 'Ýörite sahypa',
    -'vector-namespace-talk'      => 'Çekişme',
    -'vector-namespace-template'  => 'Şablon',
    -'vector-namespace-user'      => 'Ulanyjy sahypasy',
    -'vector-view-create'         => 'Döret',
    -'vector-view-edit'           => 'Redaktirle',
    -'vector-view-history'        => 'Geçmişi gör',
    -'vector-view-view'           => 'Oka',
    -'vector-view-viewsource'     => 'Çeşmäni gör',
    -'actions'                    => 'Hereketler',
    -'namespaces'                 => 'At giňişlikleri',
    -'variants'                   => 'Wariantlar',
    +'vector-action-addsection'       => 'Tema goş',
    +'vector-action-delete'           => 'Öçür',
    +'vector-action-move'             => 'Adyny üýtget',
    +'vector-action-protect'          => 'Goraga al',
    +'vector-action-undelete'         => 'Öçürmäni yzyna al',
    +'vector-action-unprotect'        => 'Goragy aýyr',
    +'vector-simplesearch-preference' => 'Giňeldilen gözleg tekliplerini aç (Diňe Vector bezegi üçin)',
    +'vector-view-create'             => 'Döret',
    +'vector-view-edit'               => 'Redaktirle',
    +'vector-view-history'            => 'Geçmişi gör',
    +'vector-view-view'               => 'Oka',
    +'vector-view-viewsource'         => 'Çeşmäni gör',
    +'actions'                        => 'Hereketler',
    +'namespaces'                     => 'At giňişlikleri',
    +'variants'                       => 'Wariantlar',
     
     'errorpagetitle'    => 'Säwlik',
     'returnto'          => '$1.',
    @@ -279,6 +269,9 @@ Biçak köp ulanyjy şu sahypany görmäge synanyşýar.
     Bir sellem garaşyp, soňra synanyşmagyňyzy towakga edýäris.
     
     $1',
    +'pool-timeout'      => 'Blokirleme üçin wagtyň gutarmagyna garaşylýar',
    +'pool-queuefull'    => 'Howzuň nobaty doly',
    +'pool-errorunknown' => 'Näbelli säwlik',
     
     # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
     'aboutsite'            => '{{SITENAME}} hakynda',
    @@ -445,7 +438,7 @@ Hasabyňyz açyldy.
     'yourname'                   => 'Ulanyjy adyňyz:',
     'yourpassword'               => 'Parolyňyz:',
     'yourpasswordagain'          => 'Paroly gaýtadan ýaz:',
    -'remembermypassword'         => 'Parolymy ýatda sakla',
    +'remembermypassword'         => 'Sessiýamy şu kompýuterde ýatda sakla  (iň köp $1 {{PLURAL:$1|günläp|günläp}})',
     'yourdomainname'             => 'Siziň domeniňiz:',
     'externaldberror'            => 'Ýa tassyklama maglumat bazasynyň säwligi bar ýa-da öz ulanyjy hasabyňyzy täzelemegiňize rugsat berilmeýär.',
     'login'                      => 'Sessiýa aç',
    @@ -462,6 +455,7 @@ Hasabyňyz açyldy.
     'gotaccount'                 => "Eýýäm hasap açdyňyzmy? '''$1'''.",
     'gotaccountlink'             => 'Onda giriberiň!',
     'createaccountmail'          => 'e-poçta bilen',
    +'createaccountreason'        => 'Sebäp:',
     'badretype'                  => 'Girizen parollaryňyz biri-birine gabat gelmeýär.',
     'userexists'                 => 'Girizen ulanyjy adyňyz ulanylýar.
     Başga bir at saýlamagyňyzy haýyş edýäris.',
    @@ -573,10 +567,12 @@ Parolyňyzy eýýäm şowlulyk bilen üýtgeden ýa-da täze wagtlaýyn parol ta
     'showlivepreview'                  => 'Gönümel deslapky syn',
     'showdiff'                         => 'Üýtgeşmeleri görkez',
     'anoneditwarning'                  => "'''Duýduryş:''' Sessiýa açmansyňyz. Şonuň üçin hem IP adresiňiz bu sahypanyň özgerdişler geçmişine ýazylyp alynjakdyr.",
    +'anonpreviewwarning'               => "''Sessiýa açmadyňyz. Ýazdyrsaňyz, sahypanyň redaktirleme geçmişine IP adresiňiz ýazylar.''",
     'missingsummary'                   => "'''Ýatlatma:''' Redaktirleme mazmunyny ýazmadyňyz.
     Sahypany ýazdyr düwmesine ýene bir gezek bassaňyz, özgerdişiňiz mazmunsyz ýazdyrylar.",
     'missingcommenttext'               => 'Aşakda teswir ýazmagyňyzy haýyş edýäris.',
    -'missingcommentheader'             => "'''Ýatlatma:''' Bu teswir üçin tema/at görkezmediňiz. Eger Ýazdyr düwmesine gaýtadan bassaňyz, özgerdişiňiz temasyz/atsyz ýazdyrylar.",
    +'missingcommentheader'             => "'''Ýatladyjy:''' Bu teswir üçin tema/setirbaş görkezmediňiz. 
    +Eger \"{{int:savearticle}}\" düwmesine gaýtadan bassaňyz, özgerdişiňiz temasyz/setirbaşsyz ýazdyrylar.",
     'summary-preview'                  => 'Deslapky synyň mazmuny:',
     'subject-preview'                  => 'Temanyň/adyň deslapky syny:',
     'blockedtitle'                     => 'Ulanyjy blokirlenen',
    @@ -653,8 +649,8 @@ Salgylanmak üçin iň soňky blokirleme gündeligi ýazgysy aşakda berilýär:
     '''Ol heniz ýazdyrylan däldir!'''",
     'userjspreview'                    => "'''Bu ulanyjy JavaScriptiňiziň ýöne bir barlagy/deslapky syny.'''
     '''Ol heniz ýazdyrylan däldir!'''",
    -'userinvalidcssjstitle'            => "''Duýduryş:''' \"\$1\" atly bezeg ýok. 
    -Hususy .css we .js sahypalarynyň setir harp bilen ýazylýandygyny ýatda saklaň, ýagny {{ns:user}}:Ulanyjy/Monobook.css däl-de, eýsem {{ns:user}}:Ulanyjy/monobook.css.",
    +'userinvalidcssjstitle'            => "''Duýduryş:''' \"\$1\" atly bezeg ýok.
    +Hususy .css we .js sahypalarynyň setir harp bilen ýazylýandygyny ýatda saklaň, ýagny {{ns:user}}:Ulanyjy/Vector.css däl-de, eýsem {{ns:user}}:Ulanyjy/vector.css.",
     'updated'                          => '(Täzelenen)',
     'note'                             => "'''Bellik:'''",
     'previewnote'                      => "'''Bu bir ýöne deslapky syn. Üýtgeşmeleriňiz heniz ýazdyrylan däldir!'''",
    @@ -696,9 +692,6 @@ Mundan hem başga, siz bu ýere goşant goşmak bilen bu goşandyň özüňiz ta
     Eger-de işiňiziň gypynç etmezden redaktirlenmegini islemeýän bolsaňyz, onda ony goşant etmäň.
    Şeýle-de, siz ony özüňiziň ýazandygyňyza ýa-da jemgyýetçilige açyk bir çeşmeden ýa-da bolmasa şoňa meňzeş bir erkin çeşmeden göçürip alandygyňyza güwä geçýärsiňiz (jikme-jiklikler üçin serediň: $1). '''Awtorlyk hukugy bar bolan hiç biri işi rugsat almazdan goşmaň!'''", -'longpagewarning' => "'''Duýduryş:''' Bu sahypanyň uzynlygy $1 kilobaýt; -käbir brauzerlerde 32kb çemesi ýa-da ondanam uzyn sahypalar redaktirlenen mahaly problema ýüz çykmagy mümkin. -Sahypany has kiçi böleklere bölmekligi göz öňünde tutmagyňyzy haýyş edýäris.", 'longpageerror' => "'''Säwlik: Ýazan tekstiňiziň uzynlygy $1 kilobaýt bolup, ol maksimum uzynlykdan $2 kilobaýt artykmaç.''' Ýazdyrmaklyk mümkin däl.", 'readonlywarning' => "'''Duýduryş: Maglumat bazasy tehniki işler sebäpli gulplanypdyr, Şonuň üçinem häzirlikçe özgerdişleriňizi ýazdyryp bilmersiňiz.''' @@ -878,6 +871,8 @@ $1", 'logdelete-failure' => "'''Gündelik görünme derejesini sazlap bolmaýar:''' $1", 'revdel-restore' => 'Görnüşi üýtget', +'revdel-restore-deleted' => 'öçürilen wersiýalar', +'revdel-restore-visible' => 'görünýän wersiýalar', 'pagehist' => 'Sahypanyň geçmişi', 'deletedhist' => 'Öçürilen geçmiş', 'revdelete-content' => 'mazmun', @@ -947,11 +942,13 @@ Nawigasiýa çykgytlaryny ulanmaklygyň bu sütüni başky ýagdaýyna getirjekd # Diffs 'history-title' => '"$1" sahypasynyň geçmişi', 'difference' => '(Wersiýalaryň aratapawudy)', +'difference-multipage' => '(Sahypalaryň arasyndaky tapawut)', 'lineno' => 'Setir $1:', 'compareselectedversions' => 'Saýlanan wersiýalary deňeşdir', 'showhideselectedversions' => 'Saýlanan wersiýalary görkez/gizle', 'editundo' => 'yzyna al', -'diff-multi' => '(Görkezilmeýän {{PLURAL:$1|$1 sany aralyk wersiýa|$1 sany aralyk wersiýa}} bar.)', +'diff-multi' => '({{PLURAL:$2|Bir ulanyjy|$2 ulanyjy}} tarapyndan edilen {{PLURAL:$1|aralyk wersiýa|$1 sany aralyk wersiýa}} görkezilmeýär)', +'diff-multi-manyusers' => '($2 ulanyjydan köp {{PLURAL:$2|ulanyjy|ulanyjy}} tarapyndan edilen {{PLURAL:$1|aralyk wersiýa|$1 sany aralyk wersiýa}} görkezilmeýär)', # Search results 'searchresults' => 'Gözleg netijeleri', @@ -986,6 +983,7 @@ Nawigasiýa çykgytlaryny ulanmaklygyň bu sütüni başky ýagdaýyna getirjekd 'searchprofile-everything-tooltip' => 'Ähli sahypalardan gözle (şol sanda çekişme sahypalaryndan)', 'searchprofile-advanced-tooltip' => 'Hususy at giňişliklerinde gözle', 'search-result-size' => '$1 ({{PLURAL:$2|1 söz|$2 söz}})', +'search-result-category-size' => '{{PLURAL:$1|1 agza|$1 agza}} ({{PLURAL:$2|1 kiçi kategoriýa|$2 kiçi kategoriýa}}, {{PLURAL:$3|1 faýl|$3 faýl}})', 'search-result-score' => 'Kybapdaşlyk: $1%', 'search-redirect' => '(gönükdirme $1)', 'search-section' => '(bölüm $1)', @@ -1063,6 +1061,7 @@ Emma olaryň {{SITENAME}} indeksleriniň möwriti geçen bolmagy mümkindir.', 'contextlines' => 'Netije başyna setir sany:', 'contextchars' => 'Setir başyna harp sany:', 'stub-threshold' => 'Ownuk makala çykgydynyň formaty üçin bosaga (baýt):', +'stub-threshold-disabled' => 'Ýapyk', 'recentchangesdays' => 'Soňky üýtgeşmelerde görkeziljek gün sany:', 'recentchangesdays-max' => '(maksimum $1 {{PLURAL:$1|gün|gün}})', 'recentchangescount' => 'Gaýybana görkeziljek özgerdiş sany:', @@ -1096,6 +1095,7 @@ Gabat gelşine görä döredilen şu bahany ulanyp bilersiňiz: $1', 'prefs-files' => 'Faýllar', 'prefs-custom-css' => 'Hususy CSS', 'prefs-custom-js' => 'Hususy JS', +'prefs-common-css-js' => 'Ähli bezegler üçin paýlaşylýan CSS/JavaScript:', 'prefs-reset-intro' => 'Bu sahypada öz ileri tutmalaryňyzy saýtyň gaýybana ýagdaýyna getirip bilersiňiz. Yzyna dikeldip bolmaýar.', 'prefs-emailconfirm-label' => 'E-poçta tassyklamasy:', 'prefs-textboxsize' => 'Redaktirleme penjiresiniň ölçegi', @@ -1131,7 +1131,9 @@ $1 {{PLURAL:$1|simwoldan|simwoldan}} köp bolmaly däl.', 'prefs-advancedrendering' => 'Giňeldilen opsiýalar', 'prefs-advancedsearchoptions' => 'Giňeldilen opsiýalar', 'prefs-advancedwatchlist' => 'Giňeldilen opsiýalar', -'prefs-display' => 'Görkeziş opsiýalary', +'prefs-displayrc' => 'Görkeziş opsiýalary', +'prefs-displaysearchoptions' => 'Görkeziş opsiýalary', +'prefs-displaywatchlist' => 'Görkeziş opsiýalary', 'prefs-diffs' => 'Tapawutlar', # User rights @@ -1217,6 +1219,7 @@ $1 {{PLURAL:$1|simwoldan|simwoldan}} köp bolmaly däl.', 'right-hideuser' => 'Ulanyjy adyny blokirle we ony jemgyýetçilikden gizle', 'right-ipblock-exempt' => 'IP blokirlemelerden, awtoblokirlemelerden we diapazon blokirlemelerinden aýlanyp geç', 'right-proxyunbannable' => 'Proksileriň awtomatik blokirlemelerinden aýlanyp geç', +'right-unblockself' => 'Öz blokirlemesini aýyr', 'right-protect' => 'Gorag derejelerini üýtget we goragly sahypalary redaktirle', 'right-editprotected' => 'Goragly sahypalary redaktirle (goragy kaskadlamazdan)', 'right-editinterface' => 'Ulanyjy interfeýsini redaktirle', @@ -1239,7 +1242,6 @@ $1 {{PLURAL:$1|simwoldan|simwoldan}} köp bolmaly däl.', 'right-siteadmin' => 'Maglumat bazasyny gulpla we aç', 'right-reset-passwords' => 'Başga ulanyjylaryň parollaryny başky ýagdaýyna getir', 'right-override-export-depth' => 'Sahypalary, şol sanda çykgytly sahypalary 5-e çenli çuňlukda eksportirle', -'right-versiondetail' => 'Giňeldilen programma wersiýasy maglumatyny görkez', 'right-sendemail' => 'Başga ulanyjylara e-poçta iber', # User rights log @@ -1290,14 +1292,9 @@ $1 {{PLURAL:$1|simwoldan|simwoldan}} köp bolmaly däl.', 'recentchanges-legend' => 'Soňky üýtgeşmeleriň opsiýalary', 'recentchangestext' => 'Wikidäki iň soňky üýtgeşmeleri şu sahypadan yzarlaň.', 'recentchanges-feed-description' => 'Bu lentadaky wikide edilen iň soňky üýtgeşmeleri yzarlaň.', -'recentchanges-label-legend' => 'Şertli belgiler: $1.', -'recentchanges-legend-newpage' => '$1 - täze sahypa', 'recentchanges-label-newpage' => 'Bu özgerdiş täze bir sahypa döretdi', -'recentchanges-legend-minor' => '$1 - ujypsyzja özgerdiş', 'recentchanges-label-minor' => 'Bu bir ujypsyzja özgerdiş', -'recentchanges-legend-bot' => '$1 - bot özgerdişi', 'recentchanges-label-bot' => 'Bu özgerdiş bir bot tarapyndan amala aşyryldy', -'recentchanges-legend-unpatrolled' => '$1 - patrullyk edilmedik özgerdiş', 'recentchanges-label-unpatrolled' => 'Bu özgerdişe heniz patrullyk edilmändir', 'rcnote' => "Aşakda $5, $4 senesinden başlap, soňky {{PLURAL:$2|1 günde|'''$2''' günde}} edilen {{PLURAL:$1|'''1''' üýtgeşme|'''$1''' üýtgeşme}} görkezilýär.", 'rcnotefrom' => '$2 senesinden bäri edilen özgerdişler aşakda görkezilýär ($1 sanysyna çenli).', @@ -1344,6 +1341,9 @@ $1 {{PLURAL:$1|simwoldan|simwoldan}} köp bolmaly däl.', 'upload_directory_missing' => '($1) ýükleme direktoriýasy ýok we web serwer ony döredip bilmeýär.', 'upload_directory_read_only' => '($1) ýükleme direktoriýasyna web serweriň ýazmak rugsady ýok.', 'uploaderror' => 'Ýükleme säwligi', +'upload-recreate-warning' => "Üns beriň: Şeýle atly bir faýl öçürildi ýa-da geçirildi.''' + +Bu sahypanyň öçürme ýa-da at üýtgetme gündeligi aşakda berilýär:", 'uploadtext' => "Faýl ýüklemek üçin aşakdaky formdan peýdalanyň. Ozaldan ýüklenilgi faýllary görmek ýa-da agtarmak üçin [[Special:FileList|ýüklenilgi faýllaryň sanawyna]] serediň, (gaýtadan) ýüklenenler [[Special:Log/upload|ýükleme gündeliginde]], öçürilenler [[Special:Log/delete|öçürme gündeliginde]] saklanylýar. @@ -1379,6 +1379,17 @@ Ileri tutulýan {{PLURAL:\$3|faýl görnüşi|faýl görnüşleri}} \$2.", 'filetype-banned-type' => "'''\".\$1\"''' rugsat berilýän faýl görnüşi däl. Rugsat berilýän {{PLURAL:\$3|faýl görnüşi|faýl görnüşleri}} \$2.", 'filetype-missing' => 'Faýlyň hiçhili giňeltmesi ýok (".jpg" ýaly).', +'empty-file' => 'Tabşyran faýlyňyz boş.', +'file-too-large' => 'Tabşyran faýlyňyz örän uly.', +'filename-tooshort' => 'Faýl ady örän gysga.', +'filetype-banned' => 'Bu görnüşdäki faýllar gadagan.', +'verification-error' => 'Bu faýl barlag prosedurasyndan geçmedi.', +'hookaborted' => 'Etjek bolýan üýtgeşikligiňiz giňeltme gaňyrçagy tarapyndan bes edildi.', +'illegal-filename' => 'Faýl adyna rugsat berilmeýär.', +'overwrite' => 'Bar bolan faýlyň üstüne ýazmaklyga rugsat berilmeýär.', +'unknown-error' => 'Näbelli bir säwlik ýüze çykdy.', +'tmp-create-error' => 'Wagtlaýyn faýl döredip bolmady.', +'tmp-write-error' => 'Wagtlaýyn faýl ýazmakda säwlik.', 'large-file' => 'Faýllaryň $1 ölçeginden has uly bolmaklygy maslahat berilmeýär; bu faýlyň ölçegi $2.', 'largefileserver' => 'Bu faýl serweriň rugsat berýän ölçeginden has uly.', @@ -1409,13 +1420,14 @@ Faýlyňyzy şonda-da ýüklemek isleýän bolsaňyz, onda yza gaýdyp täze bir Faýlyňyzy şonda-da ýüklemek isleýän bolsaňyz, onda yza gaýdyp täze bir at ulanmagyňyzy haýyş edýäris. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Bu faýl aşakdaky {{PLURAL:$1|faýlyň|faýllaryň}} dublikatydyr:', 'file-deleted-duplicate' => 'Şu faýl bilen birmeňzeş bir faýl ([[:$1]]) ozal öçürilipdir. Bu faýly gaýtadan ýüklemänkäňiz şol faýlyň öçürme geçmişini barlaň.', -'successfulupload' => 'Şowly ýükleme', 'uploadwarning' => 'Ýükleme duýduryşy', 'uploadwarning-text' => 'Aşakdaky faýl düşündirişini üýtgediň we gaýtadan synanyşyň.', 'savefile' => 'Faýly ýazdyr', 'uploadedimage' => 'Ýüklenen: "[[$1]]"', 'overwroteimage' => '"[[$1]]" faýlynyň täze wersiýasy ýüklendi', 'uploaddisabled' => 'Ýüklemeklik ýapyk', +'copyuploaddisabled' => 'URL arkaly ýüklemek ýapyk.', +'uploadfromurl-queued' => 'Ýüklemäňiz nobata goýuldy.', 'uploaddisabledtext' => 'Faýl ýüklemeklik ýapyk.', 'php-uploaddisabledtext' => 'PHP-de faýl ýüklemek ýapyk dur. file_uploads sazlamasyny barlap görüň.', 'uploadscripted' => 'Bu faýlda web brauzeri tarapyndan ýalňyş teswirlenmegi mümkin bolan bir HTML ýa-da skript kody bar.', @@ -1435,6 +1447,14 @@ Faýly ýüklemekligiň ýerliklidigini ýa-da däldigini göz öňünde tutuň. Bu faýlyň öçürme gündeligi aşakda berilýär:", 'filename-bad-prefix' => "Ýükleýän faýlyňyzyň ady umuman sanly kameralar tarapyndan awtomatik usulda goşulýan düşnüksiz '''\"\$1\"''' bilen başlanýar. Faýlyňyz üçin has düşnükli bir at saýlamagyňyzy haýyş edýäris.", +'upload-success-subj' => 'Şowly ýükleme', +'upload-success-msg' => '[$2] ýüklemäňiz şowly boldy. Ol şu ýerde elýeterli: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Ýükleme problemasy', +'upload-failure-msg' => '[$2] adresinden eden ýüklemäňizde bir problema bar: + +$1', +'upload-warning-subj' => 'Ýükleme duýduryşy', +'upload-warning-msg' => '[$2] adresinden eden ýüklemäňizde bir problema ýüze çykdy. Ony düzetmek üçin [[Special:Upload/stash/$1|ýükleme formuna]] dolanyp bilersiňiz.', 'upload-proto-error' => 'Nädogry protokol', 'upload-proto-error-text' => 'Uzakdan ýükleme, http:// ýa-da ftp:// bilen başlaýan URL talap edýär.', @@ -1614,7 +1634,6 @@ Giriş formaty: mazmuntip/kiçitip, meselem surat/jpeg.', 'statistics-edits-average' => 'Sahypa başyna ortaça özgerdiş', 'statistics-views-total' => 'Jemi synlama', 'statistics-views-peredit' => 'Özgerdiş başyna synlama', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Tabşyryk nobatynyň] uzynlygy', 'statistics-users' => 'Hasaba alnan [[Special:ListUsers|ulanyjylar]]', 'statistics-users-active' => 'Işjeň ulanyjylar', 'statistics-users-active-desc' => 'Soňky {{PLURAL:$1|1 günde|$1 günde}} haýsydyr bir iş geçiren ulanyjylar', @@ -1628,8 +1647,8 @@ Olar muňa derek degişli anyk sahypa çykgyt bermelidir.
    'doubleredirects' => 'Jübüt gönükdirmeler', 'doubleredirectstext' => 'Bu sahypa başga gönükdirme sahypalaryna gönükdirýän sahypalaryň sanawyny görkezýär. -Her bir hatar birinji we ikinji gönükdirmeleri, şeýle-de ikinji gönükdirmäniň maksady bolup durýan hem-de şol bir wagtyň özünde birinji gönükdirmäniň adatça barmaly ýeri bolan "hakyky" maksat edinilýän sahypany öz içine alýar. -Üsti çyzylan ýazgylar düzedilenlerdir.', +Her bir hatar birinji we ikinji gönükdirmeleri, şeýle-de ikinji gönükdirmäniň maksady bolup durýan hem-de şol bir wagtyň özünde birinji gönükdirmäniň adatça barmaly ýeri bolan "hakyky" maksat edinilýän sahypany öz içine alýar. +Üsti çyzylan ýazgylar düzedilenlerdir.', 'double-redirect-fixed-move' => '[[$1]] sahypasynyň ady üýtgedildi. Ol indi [[$2]] sahypasyna gönükdirýär.', 'double-redirect-fixer' => 'Gönükdirme bejeriji', @@ -1809,34 +1828,40 @@ Goldanylýan protokollar: $1', 'listgrouprights-removegroup-self-all' => 'Ähli toparlary öz hasabyňdan aýyr', # E-mail user -'mailnologin' => 'Iberer ýaly adres ýok', -'mailnologintext' => 'Başga ulanyjylara e-poçta ibermek üçin [[Special:UserLogin|sessiýaňyz açyk bolmaly]] hem-de [[Special:Preferences|ileri tutmalarda]] dogry bir e-poçta adresiňiz bolmalydyr.', -'emailuser' => 'Bu ulanyja e-poçta iber', -'emailpage' => 'Ulanyja e-poçta iber', -'emailpagetext' => 'Bu ulanyja e-poçta habarlaşygy ibermek üçin aşakdaky formdan peýdalanyp bilersiňiz. +'mailnologin' => 'Iberer ýaly adres ýok', +'mailnologintext' => 'Başga ulanyjylara e-poçta ibermek üçin [[Special:UserLogin|sessiýaňyz açyk bolmaly]] hem-de [[Special:Preferences|ileri tutmalarda]] dogry bir e-poçta adresiňiz bolmalydyr.', +'emailuser' => 'Bu ulanyja e-poçta iber', +'emailpage' => 'Ulanyja e-poçta iber', +'emailpagetext' => 'Bu ulanyja e-poçta habarlaşygy ibermek üçin aşakdaky formdan peýdalanyp bilersiňiz. [[Special:Preferences|Ulanyjy ileri tutmalaryňyzda]] görkezen e-poçta adresiňiz e-poçtanyň "Kimden" adresinde peýda bolar, şeýlelikde kabul ediji size gönüden-göni jogap berip biler.', -'usermailererror' => 'E-poçta säwlige duçar boldy:', -'defemailsubject' => '{{SITENAME}} e-poçtasy', -'noemailtitle' => 'E-poçta adresi ýok', -'noemailtext' => 'Bu ulanyjy dogry bir e-poçta adresini görkezmändir.', -'nowikiemailtitle' => 'E-poçta ibermeklige rugsat berilmeýär', -'nowikiemailtext' => 'Bu ulanyjy başga ulanyjylardan e-poçta almak islemeýär.', -'email-legend' => 'Başga {{SITENAME}} ulanyjysyna e-poçta iber', -'emailfrom' => 'Kimden:', -'emailto' => 'Kime:', -'emailsubject' => 'Tema:', -'emailmessage' => 'Habarlaşyk:', -'emailsend' => 'Iber', -'emailccme' => 'Habarlaşygymyň özüme-de bir nusgasyny iber.', -'emailccsubject' => '$1 ulanyjysyna iberen habarlaşygyňyzyň nusgasy: $2', -'emailsent' => 'E-poçta iberildi', -'emailsenttext' => 'E-poçtaňyz iberildi.', -'emailuserfooter' => 'Bu e-poçta $1 tarapyndan $2 ulanyjysyna {{SITENAME}} saýtyndaky "Ulanyja e-poçta iber" funksiýasy arkaly iberildi.', +'usermailererror' => 'E-poçta säwlige duçar boldy:', +'defemailsubject' => '{{SITENAME}} e-poçtasy', +'usermaildisabled' => 'Ulanyjy e-poçtasy ýapyk', +'usermaildisabledtext' => 'Bu wikide başga ulanyjylara e-poçta iberip bilmeýärsiňiz.', +'noemailtitle' => 'E-poçta adresi ýok', +'noemailtext' => 'Bu ulanyjy dogry bir e-poçta adresini görkezmändir.', +'nowikiemailtitle' => 'E-poçta ibermeklige rugsat berilmeýär', +'nowikiemailtext' => 'Bu ulanyjy başga ulanyjylardan e-poçta almak islemeýär.', +'email-legend' => 'Başga {{SITENAME}} ulanyjysyna e-poçta iber', +'emailfrom' => 'Kimden:', +'emailto' => 'Kime:', +'emailsubject' => 'Tema:', +'emailmessage' => 'Habarlaşyk:', +'emailsend' => 'Iber', +'emailccme' => 'Habarlaşygymyň özüme-de bir nusgasyny iber.', +'emailccsubject' => '$1 ulanyjysyna iberen habarlaşygyňyzyň nusgasy: $2', +'emailsent' => 'E-poçta iberildi', +'emailsenttext' => 'E-poçtaňyz iberildi.', +'emailuserfooter' => 'Bu e-poçta $1 tarapyndan $2 ulanyjysyna {{SITENAME}} saýtyndaky "Ulanyja e-poçta iber" funksiýasy arkaly iberildi.', + +# User Messenger +'usermessage-summary' => 'Ulgam habary goýuň.', +'usermessage-editor' => 'Ulgam habarçysy', # Watchlist 'watchlist' => 'Gözegçilik sanawym', 'mywatchlist' => 'Gözegçilik sanawym', -'watchlistfor' => "('''$1''' üçin)", +'watchlistfor2' => '$1 üçin $2', 'nowatchlist' => 'Gözegçilik sanawyňyzda hiçhili sahypa ýok.', 'watchlistanontext' => 'Gözegçilik sanawyňyzdaky sahypalary görmek ýa-da redaktirlemek üçin $1.', 'watchnologin' => 'Sessiýa açmansyňyz', @@ -1960,7 +1985,10 @@ Iň soňky özgerdiş eden: [[User:$3|$3]] ([[User talk:$3|Çekişme]]{{int:pipe 'revertpage-nouser' => '(ulanyjy ady aýyrylan) tarapyndan edilen özgerdişler [[User:$1|$1]] tarapyndan redaktirlenen soňky wersiýasyna yzyna getirildi.', 'rollback-success' => '$1 tarapyndan edilen özgerdişler yzyna getirildi; $2 tarapyndan edilen soňky wersiýa gaýdyp gelindi.', -'sessionfailure' => 'Giriş sessiýaňyz bilen baglanyşykly bir probleme bar ýaly; + +# Edit tokens +'sessionfailure-title' => 'Sessiýa şowsuzlygy', +'sessionfailure' => 'Giriş sessiýaňyz bilen baglanyşykly bir probleme bar ýaly; sessiýaňyzyň birugsat ele geçirilmezligi üçin bu iş goýbolsun edildi. "Yza" düwmwsine basyň we gelen sahypaňyzy gaýtadan ýükläň, soňra ýaňadan synynyşyp görüň.', @@ -2097,19 +2125,22 @@ $1', 'month' => 'Aý:', 'year' => 'Ýyl:', -'sp-contributions-newbies' => 'Diňe täze hasap açan ulanyjylaryň goşantlaryny görkez', -'sp-contributions-newbies-sub' => 'Täze hasaplar üçin', -'sp-contributions-newbies-title' => 'Täze hasaplar üçin ulanyjy goşantlary', -'sp-contributions-blocklog' => 'Blokirleme gündeligi', -'sp-contributions-deleted' => 'öçürilen ulanyjy goşantlary', -'sp-contributions-logs' => 'gündelikler', -'sp-contributions-talk' => 'çekişme', -'sp-contributions-userrights' => 'ulanyjy hukuklary dolandyryşy', -'sp-contributions-blocked-notice' => 'Bu ulanyjy şu wagt blokirlengi. +'sp-contributions-newbies' => 'Diňe täze hasap açan ulanyjylaryň goşantlaryny görkez', +'sp-contributions-newbies-sub' => 'Täze hasaplar üçin', +'sp-contributions-newbies-title' => 'Täze hasaplar üçin ulanyjy goşantlary', +'sp-contributions-blocklog' => 'Blokirleme gündeligi', +'sp-contributions-deleted' => 'öçürilen ulanyjy goşantlary', +'sp-contributions-logs' => 'gündelikler', +'sp-contributions-talk' => 'çekişme', +'sp-contributions-userrights' => 'ulanyjy hukuklary dolandyryşy', +'sp-contributions-blocked-notice' => 'Bu ulanyjy şu wagt blokirlengi. +Salgylanmak üçin iň soňky blokirleme gündeligi ýazgysy aşakda berilýär:', +'sp-contributions-blocked-notice-anon' => 'Bu IP adresi şu wagt blokirlengi. Salgylanmak üçin iň soňky blokirleme gündeligi ýazgysy aşakda berilýär:', -'sp-contributions-search' => 'Goşantlary gözle', -'sp-contributions-username' => 'IP adresi ýa-da ulanyjy ady:', -'sp-contributions-submit' => 'Gözle', +'sp-contributions-search' => 'Goşantlary gözle', +'sp-contributions-username' => 'IP adresi ýa-da ulanyjy ady:', +'sp-contributions-toponly' => 'Diňe iň soňky wersiýalary görkez', +'sp-contributions-submit' => 'Gözle', # What links here 'whatlinkshere' => 'Bu sahypa çykgytlar', @@ -2170,7 +2201,6 @@ Aşakda blokirlemäniň takyk sebäbini ýazyň (meselem: wandalizm eden sahypal 'ipb-edit-dropdown' => 'Blokirleme sebäplerini redaktirle', 'ipb-unblock-addr' => '$1 üçin blokirlemäni aýyr', 'ipb-unblock' => 'Ulanyjy adynyň ýa-da IP adresiniň blokirlemesini aýyr', -'ipb-blocklist-addr' => '$1 üçin bar bolan blokirlemeler', 'ipb-blocklist' => 'Bar bolan blokirlemeleri görkez', 'ipb-blocklist-contribs' => '$1 ulanyjysynyň goşantlary', 'unblockip' => 'Ulanyjynyň blokirlemesini aýyr', @@ -2245,6 +2275,8 @@ Internet üpjün edijiňiz ýa-da goldaw gullugy bilen habarlaşyp, olary bu çy Hasap açyp bilmeýärsiňiz.', 'cant-block-while-blocked' => 'Özüňiz blokirlengikäňiz başga ulanyjylary blokirläp bilmeýärsiňiz.', 'cant-see-hidden-user' => 'Blokirlejek bolýan ulanyjyňyz eýýäm blokirlenipdir hem-de gizlenilipdir. Ulanyjy gizlemek hukugyňyz ýokdugy sebäpli, ulanyjynyň blokirlemesini görüp ýa-da redaktirläp bilmeýärsiňiz.', +'ipbblocked' => 'Beýleki ulanyjylary blokirläp ýa-da olaryň blokirlemesini aýryp bilmeýärsiňiz, sebäbi özüňiz blokirlenipsiňiz', +'ipbnounblockself' => 'Öz blokirlemäňizi aýyrmagyňyza rugsat berilmeýär', # Developer tools 'lockdb' => 'Maglumat bazasy gulply', @@ -2334,6 +2366,7 @@ Ady üýgetmek üçin ony öçürmek isleýärsiňizmi?', 'immobile-source-page' => 'Bu sahypanyň ady üýtgedilmeýär.', 'immobile-target-page' => 'Niýetlenilýän ada üýtgedip bolmaýar.', 'imagenocrossnamespace' => 'Faýlyň adyny faýl däl at giňişliklerine üýtgedip bolmaýar', +'nonfile-cannot-move-to-file' => 'Faýl dälleri faýl at giňişligine geçirip bolmaýar', 'imagetypemismatch' => 'Täze faýl giňeltmesi onuň görnüşine gabat gelmeýär', 'imageinvalidfilename' => 'Maksat edinilýän faýlyň ady nädogry', 'fix-double-redirects' => 'Başdaky ady görkezýän gönükdirmeleri täzele', @@ -2413,6 +2446,7 @@ Kompýuteriňize ýazdyryň we şu ýere ýükläň.', 'importstart' => 'Sahypalar importirlenýär...', 'import-revision-count' => '$1 {{PLURAL:$1|wersiýa|wersiýa}}', 'importnopages' => 'Importirlemäge sahypa ýok.', +'imported-log-entries' => '$1 {{PLURAL:$1|gündelik ýazgysyny|sany gündelik ýazgysyny}} importirledi.', 'importfailed' => 'Importirleme şowsuz: $1', 'importunknownsource' => 'Näbelli importirleme çeşmesi görnüşi', 'importcantopen' => 'Importirlenen faýly açyp bolmady', @@ -2507,6 +2541,8 @@ Onuň çeşmesini görüp bilersiňiz', 'tooltip-rollback' => '"Öňki katdyna getir" ýeke gezek tyklananda bu sahypa iň soňky goşant goşanyň özgerdişlerini yzyna getirýär', 'tooltip-undo' => '"Yzyna al" bu özgerdişi yzyna getirýär we özgerdiş formuny deslapky syn modunda açýar. Mazmun üçin bir sebäp goşmaga rugsat berýär', +'tooltip-preferences-save' => 'Ileri tutmalary ýazdyr', +'tooltip-summary' => 'Gysgaça düşündiriş giriziň', # Metadata 'nodublincore' => 'Bu serwer üçin Dublin Core RDF metamaglumatlary ýapyldy.', @@ -2602,14 +2638,17 @@ Ony işletseňiz iş ulgamyňyza howp astyna salmagyňyz mümkin.", 'imagemaxsize' => "Surat ölçeginiň çägi:
    ''(faýl düşündiriş sahypalary üçin)''", 'thumbsize' => 'Miniatýura ölçegi:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|sahypa|sahypa}}', -'file-info' => '(faýl ölçegi: $1, MIME tipi: $2)', -'file-info-size' => '($1 × $2 piksel, faýlyň ölçegi: $3, MIME tipli: $4)', +'file-info' => 'faýl ölçegi: $1, MIME tipi: $2', +'file-info-size' => '$1 × $2 piksel, faýlyň ölçegi: $3, MIME tipli: $4', 'file-nohires' => 'Wersiýanyň mundan uly ölçegi ýok.', -'svg-long-desc' => '(SVG faýly, nominal $1 × $2 piksel, faýl ölçegi: $3)', +'svg-long-desc' => 'SVG faýly, nominal $1 × $2 piksel, faýl ölçegi: $3', 'show-big-image' => 'Suratyň doly ölçegi', 'show-big-image-thumb' => 'Deslapky synyň ölçegi: $1 × $2 piksel', 'file-info-gif-looped' => 'halkaly', 'file-info-gif-frames' => '$1 {{PLURAL:$1|kadr|kadr}}', +'file-info-png-looped' => 'halkaly', +'file-info-png-repeat' => '$1 {{PLURAL:$1|gezek|gezek}} görkezildi', +'file-info-png-frames' => '$1 {{PLURAL:$1|kadr|kadr}}', # Special:NewFiles 'newimages' => 'Täze faýllaryň galereýasy', @@ -2919,28 +2958,28 @@ Ondan soňraky çykgyt(lar) kadadan çykma hökmünde kabul edilýär, meselem: 'limitall' => 'ählisi', # E-mail address confirmation -'confirmemail' => 'E-poçta adresini tassykla', -'confirmemail_noemail' => '[[Special:Preferences|Ulanyjy sazlamalaryňyzda]] bellenilen dogry bir e-poçta adresiňiz ýok.', -'confirmemail_text' => '{{SITENAME}} saýtynyň e-poçta amallaryny ulanmak üçin, ilki bilen e-poçta adresiňiziň tassyklanmagy zerurdyr. +'confirmemail' => 'E-poçta adresini tassykla', +'confirmemail_noemail' => '[[Special:Preferences|Ulanyjy sazlamalaryňyzda]] bellenilen dogry bir e-poçta adresiňiz ýok.', +'confirmemail_text' => '{{SITENAME}} saýtynyň e-poçta amallaryny ulanmak üçin, ilki bilen e-poçta adresiňiziň tassyklanmagy zerurdyr. Adresiňize tassyklama e-poçtasyny ibermek üçin aşakdaky düwmä basyň. Iberiljek habarda içinde kod ýazylan bir çykgyt bolar; e-poçta adresiňiziň dogrudygyny tassyklamak üçin ol çykgydy öz brauzeriňizde açyň.', -'confirmemail_pending' => 'Tassyklama kody size eýýäm ugradylypdyr; +'confirmemail_pending' => 'Tassyklama kody size eýýäm ugradylypdyr; eger hasabyňyzy ýaňy-ýakynda açan bolsaňyz, ol gelýänçä biraz tagapyl ediň, bolmasa täze kod sorap bilersiňiz.', -'confirmemail_send' => 'Tassyklama koduny ugrat', -'confirmemail_sent' => 'Tassyklama e-poçtasy ugradyldy.', -'confirmemail_oncreate' => 'Tassyklama kody e-poçta adresiňize iberildi. +'confirmemail_send' => 'Tassyklama koduny ugrat', +'confirmemail_sent' => 'Tassyklama e-poçtasy ugradyldy.', +'confirmemail_oncreate' => 'Tassyklama kody e-poçta adresiňize iberildi. Sessiýa açmak üçin bu kod gerek däldir, emma bu wikidäki haýsydyr bir bir e-poçta amalyny işletmek üçin muny üpjün etmegiňiz zerurdyr.', -'confirmemail_sendfailed' => '{{SITENAME}} tassyklama poçtaňyzy iberip bilmedi. E-poçtaňyz nädogry ýazylan bolmagy ähtimal. Barlap görüň. +'confirmemail_sendfailed' => '{{SITENAME}} tassyklama poçtaňyzy iberip bilmedi. E-poçtaňyz nädogry ýazylan bolmagy ähtimal. Barlap görüň. Serwer yzyna gaýtardy:$1', -'confirmemail_invalid' => 'Nädogry tassyklama kody. Koduň möhleti gutaran bolmagy ahmal.', -'confirmemail_needlogin' => 'E-poçta adresiňizi tassyklamak üçin $1.', -'confirmemail_success' => 'E-poçta adresiňiz tassyklandy. [[Special:UserLogin|Sessiýa açyň-da]] wikini ulanyberiň.', -'confirmemail_loggedin' => 'E-poçta adresiňiz tassyklandy.', -'confirmemail_error' => 'Tassyklamaňyz ýazdyrylanda bir ýalňyşlyk boldy.', -'confirmemail_subject' => '{{SITENAME}} e-poçta adres tassyklamasy.', -'confirmemail_body' => 'Kimdir biri, ähtimal özüňiz, $1 IP adresinden, +'confirmemail_invalid' => 'Nädogry tassyklama kody. Koduň möhleti gutaran bolmagy ahmal.', +'confirmemail_needlogin' => 'E-poçta adresiňizi tassyklamak üçin $1.', +'confirmemail_success' => 'E-poçta adresiňiz tassyklandy. [[Special:UserLogin|Sessiýa açyň-da]] wikini ulanyberiň.', +'confirmemail_loggedin' => 'E-poçta adresiňiz tassyklandy.', +'confirmemail_error' => 'Tassyklamaňyz ýazdyrylanda bir ýalňyşlyk boldy.', +'confirmemail_subject' => '{{SITENAME}} e-poçta adres tassyklamasy.', +'confirmemail_body' => 'Kimdir biri, ähtimal özüňiz, $1 IP adresinden, {{SITENAME}} saýtynda bu e-poçta adresi bilen $2 hasabyny açdy. Bu hasabyň hakykatdan-da size degişlidigini tassyklamak hem-de {{SITENAME}} saýtyndaky @@ -2954,8 +2993,22 @@ Eger-de hasaby siz *açmadyk bolsaňyz*, e-poçta adresi tassyklamasyny $5 Bu tassyklama kody $4 senesine çenli güýjüni saklaýar.', -'confirmemail_invalidated' => 'E-poçta tassyklamasy ýatyryldy', -'invalidateemail' => 'E-poçta tassyklamasyny ýatyr', +'confirmemail_body_changed' => 'Kimdir biri, ähtimal özüňiz, $1 IP adresinden, +{{SITENAME}} saýtynda bu e-poçta adresi üçin $2 hasabyny açdy. + +Bu hasabyň hakykatdan-da size degişlidigini tassyklamak hem-de {{SITENAME}} saýtyndaky +e-poçta funksiýalaryny täzeden işjeňleşdirmek üçin aşakdaky çykgydy öz brauzeriňizde açyň: + +$3 + +Eger-de hasap size *degişli däl* bolsa, onda e-poçta adresi tassyklamasyny +ýatyrmak üçin aşakdaky çykgydy yzarlaň: + +$5 + +Bu tassyklama kody $4 senesine çenli güýjüni saklaýar.', +'confirmemail_invalidated' => 'E-poçta tassyklamasy ýatyryldy', +'invalidateemail' => 'E-poçta tassyklamasyny ýatyr', # Scary transclusion 'scarytranscludedisabled' => '[Interwiki atanaklaýyn girizme ýapyk]', @@ -2995,6 +3048,7 @@ Sahypany gaýtadan döretmek isleýän bolsaňyz, tassyklamagyňyzy haýyş edý 'table_pager_first' => 'Birinji sahypa', 'table_pager_last' => 'Soňky sahypa', 'table_pager_limit' => 'Sahypa başyna $1 element görkez', +'table_pager_limit_label' => 'Sahypa başyna element:', 'table_pager_limit_submit' => 'Git', 'table_pager_empty' => 'Netije ýok', @@ -3062,6 +3116,13 @@ Bolanyňyzdan soňra "{{int:Watchlistedit-raw-submit}}" düwmesine basyň. 'version-hook-subscribedby' => 'Abuna ýazylan', 'version-version' => '(Wersiýa $1)', 'version-license' => 'Ygtyýarnama', +'version-poweredby-credits' => "Bu wiki '''[http://www.mediawiki.org/ MediaWiki]''' arkaly üpjün edilýär, awtorlyk hukugy © 2001-$1 $2.", +'version-poweredby-others' => 'beýlekiler', +'version-license-info' => 'MediaWiki erkin programmadyr; MediaWiki-ni Erkin programma fondy tarapyndan çazp edilen GNU General Public License lisenziýasynyň ikini wersiýasynyň ýa-da (islegiňize görä) has täzeki bir wersiýasynyň şertlerine laýyklykda täzeden paýlap we/ýa-da üýtgedip bilersiňiz. + +MediaWiki programmasy peýdaly bolar diýen umyt bilen paýlanylýar, emma onuň üçin hatda TÄJIRÇILIK GYMMATY ýa-da KESGITLENILEN MAKSADA ÝARAMLYLYK boýunça hem hiç hili KEPILLIK BERILMEÝÄR. Has giňişleýin maglumat üçin GNU General Public License lisenziýasyna serediň. + +Bu programmanyň ýany bilen siz [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General Public License lisenziýasynyň bir nusgasyny] hem edinen bolmaly. Eger edinmedik bolsaňyz, onda Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA adresine ýazyň ýa-da [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html lisenziýasyny onlaýn okaň].', 'version-software' => 'Gurlan programma üpjünçiligi', 'version-software-product' => 'Önüm', 'version-software-version' => 'Wersiýa', @@ -3132,6 +3193,15 @@ Faýlyň adyny "{{ns:file}}:" pristawkasyz giriziň.', 'tags-edit' => 'redaktirle', 'tags-hitcount' => '$1 {{PLURAL:$1|üýtgeşme|üýtgeşme}}', +# Special:ComparePages +'comparepages' => 'Sahypalary deňeşdir', +'compare-selector' => 'Sahypa wersiýalaryny deňeşdir', +'compare-page1' => 'Sahypa 1', +'compare-page2' => 'Sahypa 2', +'compare-rev1' => 'Wersiýa 1', +'compare-rev2' => 'Wersiýa 2', +'compare-submit' => 'Deňeşdir', + # Database error messages 'dberr-header' => 'Bu wikiniň bir problemasy bar', 'dberr-problems' => 'Bagyşlaň! Bu saýtda tehniki kynçylyklar ýüze çykdy.', @@ -3148,8 +3218,13 @@ Faýlyň adyny "{{ns:file}}:" pristawkasyz giriziň.', 'htmlform-float-invalid' => 'Görkezen bahaňyz san däl.', 'htmlform-int-toolow' => 'Görkezen bahaňyz $1 minimumyndan pes.', 'htmlform-int-toohigh' => 'Görkezen bahaňyz $1 maksimumyndan ýokary.', +'htmlform-required' => 'Bu baha hökmandyr', 'htmlform-submit' => 'Tabşyr', 'htmlform-reset' => 'Üýtgeşmeleri yzyna al', 'htmlform-selectorother-other' => 'Başga', +# SQLite database support +'sqlite-has-fts' => '$1 (doly tekstli gözleg goldawly)', +'sqlite-no-fts' => '$1 (doly tekstli gözleg goldawsyz)', + ); diff --git a/languages/messages/MessagesTl.php b/languages/messages/MessagesTl.php index 71277bcb..13c3ce25 100644 --- a/languages/messages/MessagesTl.php +++ b/languages/messages/MessagesTl.php @@ -19,25 +19,25 @@ $namespaceNames = array( NS_SPECIAL => 'Natatangi', NS_TALK => 'Usapan', NS_USER => 'Tagagamit', - NS_USER_TALK => 'Usapang tagagamit', - NS_PROJECT_TALK => 'Usapang $1', + NS_USER_TALK => 'Usapang_tagagamit', + NS_PROJECT_TALK => 'Usapang_$1', NS_FILE => 'Talaksan', - NS_FILE_TALK => 'Usapang talaksan', + NS_FILE_TALK => 'Usapang_talaksan', NS_MEDIAWIKI => 'MediaWiki', - NS_MEDIAWIKI_TALK => 'Usapang MediaWiki', + NS_MEDIAWIKI_TALK => 'Usapang_MediaWiki', NS_TEMPLATE => 'Suleras', - NS_TEMPLATE_TALK => 'Usapang suleras', + NS_TEMPLATE_TALK => 'Usapang_suleras', NS_HELP => 'Tulong', - NS_HELP_TALK => 'Usapang tulong', - NS_CATEGORY => 'Kaurian', - NS_CATEGORY_TALK => 'Usapang kaurian', + NS_HELP_TALK => 'Usapang_tulong', + NS_CATEGORY => 'Kategorya', + NS_CATEGORY_TALK => 'Usapang_kategorya', ); $namespaceAliases = array( 'Talaksan' => NS_FILE, 'Usapang talaksan' => NS_FILE_TALK, - 'Kategorya' => NS_CATEGORY, - 'Usapang kategorya' => NS_CATEGORY_TALK, + 'Kaurian' => NS_CATEGORY, + 'Usapang_kaurian' => NS_CATEGORY_TALK, ); $specialPageAliases = array( @@ -146,8 +146,7 @@ $messages = array( 'tog-editsection' => 'Payagan ang mga pagbabagong panseksyon sa mga [baguhin] na kawing', 'tog-editsectiononrightclick' => 'Payagan ang mga pagbabagong panseksyon sa pakanang pagpindot ng mga panseksyong pamagat (JavaScript)', 'tog-showtoc' => 'Ipakita ang talaan ng mga nilalaman (sa mga pahinang may higit sa 3 punong pamagat)', -'tog-rememberpassword' => 'Tandaan ang paglagda ko sa kompyuter na ito', -'tog-editwidth' => 'Palaparin ang kahon ng pagbabago upang mapuno ang buong tanawan', +'tog-rememberpassword' => 'Tandaan ang paglagda ko sa panghanaphanap na ito (pinakamarami na ang $1 {{PLURAL:$1|araw|mga araw}})', 'tog-watchcreations' => 'Idagdag ang mga pahinang nilikha ko sa aking tala ng mga binabantayan', 'tog-watchdefault' => 'Idagdag ang mga pahinang binago ko sa aking tala ng mga binabantayan', 'tog-watchmoves' => 'Idagdag ang mga pahinang inilipat ko sa aking tala ng mga binabantayan', @@ -294,31 +293,21 @@ $messages = array( 'faqpage' => "Project:Mga malimit itanong (''FAQ'')", # Vector skin -'vector-action-addsection' => 'Magdagdag ng paksa', -'vector-action-delete' => 'Burahin', -'vector-action-move' => 'Ilipat', -'vector-action-protect' => 'Ipagsanggalang', -'vector-action-undelete' => 'Alisin ang pagbubura', -'vector-action-unprotect' => 'Alisin ang pagsasanggalang', -'vector-namespace-category' => 'Kategorya', -'vector-namespace-help' => 'Pahina ng tulong', -'vector-namespace-image' => 'Talaksan', -'vector-namespace-main' => 'Pahina', -'vector-namespace-media' => 'Pahina ng midya', -'vector-namespace-mediawiki' => 'Mensahe', -'vector-namespace-project' => 'Pahina ng proyekto', -'vector-namespace-special' => 'Natatanging pahina', -'vector-namespace-talk' => 'Usapan', -'vector-namespace-template' => 'Suleras', -'vector-namespace-user' => 'Pahina ng tagagamit', -'vector-view-create' => 'Likhain', -'vector-view-edit' => 'Baguhin', -'vector-view-history' => 'Tingnan ang kasaysayan', -'vector-view-view' => 'Basahin', -'vector-view-viewsource' => 'Tingnan ang pinagmulan', -'actions' => 'Mga kilos', -'namespaces' => 'Mga ngalan-espasyo', -'variants' => 'Naiiba pa', +'vector-action-addsection' => 'Magdagdag ng paksa', +'vector-action-delete' => 'Burahin', +'vector-action-move' => 'Ilipat', +'vector-action-protect' => 'Ipagsanggalang', +'vector-action-undelete' => 'Alisin ang pagbubura', +'vector-action-unprotect' => 'Alisin ang pagsasanggalang', +'vector-simplesearch-preference' => 'Paganahin ang pinainam na mga mungkahi sa paghahanap (pabalat na Vector lang)', +'vector-view-create' => 'Likhain', +'vector-view-edit' => 'Baguhin', +'vector-view-history' => 'Tingnan ang kasaysayan', +'vector-view-view' => 'Basahin', +'vector-view-viewsource' => 'Tingnan ang pinagmulan', +'actions' => 'Mga kilos', +'namespaces' => 'Mga ngalan-espasyo', +'variants' => 'Naiiba pa', 'errorpagetitle' => 'Pagkakamali', 'returnto' => 'Bumalik sa $1.', @@ -379,6 +368,9 @@ Masyadong maraming tagagamit ay sinusubukang tingnan ang pahinang ito. Mangyari lamang na maghintay po nang sandali bago niyo pong subukang mataanin muli ang pahinang ito. $1', +'pool-timeout' => 'Ang pagpapahinga ay naghihintay ng kandado', +'pool-queuefull' => 'Puno na ang pisan ng mga pila', +'pool-errorunknown' => 'Hindi nalalamang kamalian', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Tungkol sa {{SITENAME}}', @@ -547,7 +539,8 @@ Huwag kalimutang baguhin ang iyong [[Special:Preferences|mga kagustuhan sa {{SIT 'yourname' => 'Bansag:', 'yourpassword' => 'Hudyat:', 'yourpasswordagain' => 'Hudyat mo uli:', -'remembermypassword' => 'Tandaan ang hudyat sa kompyuter na ito', +'remembermypassword' => 'Tandaan ang paglagda ko sa kompyuter na ito (pinakamarami na ang $1 {{PLURAL:$1|araw|mga araw}})', +'securelogin-stick-https' => 'Manatiling konektado sa HTTPS matapos lumagda', 'yourdomainname' => 'Dominyo mo:', 'externaldberror' => 'Maaaring may kamalian sa pagpapatotoo ng kalipunan ng mga dato o kaya hindi ka pinahintulutang isapanahon ng iyong panlabas na kuwenta o patnugutan.', 'login' => 'Lumagda', @@ -564,6 +557,7 @@ Huwag kalimutang baguhin ang iyong [[Special:Preferences|mga kagustuhan sa {{SIT 'gotaccount' => 'May kuwenta ka na ba? $1.', 'gotaccountlink' => 'Lumagda', 'createaccountmail' => 'sa pamamagitan ng e-liham', +'createaccountreason' => 'Dahilan:', 'badretype' => 'Hindi magkatugma ang ipinasok mong mga hudyat.', 'userexists' => 'May gumagamit na ng ganyang pangalang pantagagamit. Pumili lamang ng iba pang pangalan.', @@ -592,6 +586,7 @@ Pakisubok muli.', Pakisubok muli.', 'passwordtooshort' => 'Ang mga hudyat ay dapat mayroong {{PLURAL:$1|1 panitik|$1 panitik}} (karakter).', 'password-name-match' => 'Dapat magkaiba ang hudyat mo sa bansag mo.', +'password-login-forbidden' => 'Ipinagbabawal ang paggamit ng ganitong pangalan ng tagagamit at hudyat.', 'mailmypassword' => 'Ipadala sa pamamagitan ng e-liham ang bagong hudyat', 'passwordremindertitle' => 'Bagong pansamantalang hudyat para sa {{SITENAME}}', 'passwordremindertext' => 'Mayroong (na maaaring ikaw, mula sa adres ng IP na $1) humiling ng isang bagong @@ -635,6 +630,9 @@ Maghintay po muna bago subukan uli.', 'loginlanguagelabel' => 'Wika: $1', 'suspicious-userlogout' => "Tinanggihan ang inyong kahilingang umalis sa pagkalagda dahil tila ito ay ipinadala ng sirang pambasa-basa o apoderadong pambaon (''caching proxy'')", +# E-mail sending +'php-mail-error-unknown' => 'Hindi malamang kamalian sa tungkulin ng liham ng PHP ()', + # Password reset dialog 'resetpass' => 'Palitan ang hudyat', 'resetpass_announce' => 'Lumagda ka sa pamamagitan ng isang pansamantalang ini-e-liham na kodigo. @@ -688,11 +686,12 @@ Maaaring matagumpay mo nang nabago ang iyong hudyat o nakahiling na ng isang bag 'showdiff' => 'Ipakita ang mga pagbabago', 'anoneditwarning' => "'''Babala:''' Hindi ka nakalagda. Matatala ang adres ng IP mo sa kasaysayan ng pagbabago ng pahinang ito.", +'anonpreviewwarning' => "''Hindi ka nakalagda. Itatala sa inyong pagtatala ang inyong adres ng IP sa kasaysayan ng pagbabago ng pahinang ito.''", 'missingsummary' => "'''Paalala:''' Hindi ka nagbigay ng buod ng pagbabago. Kapag pinindot mo uli ang Sagip, masasagip ang pagbabago mo na wala nito.", 'missingcommenttext' => 'Magbigay ng isang kumento/puna sa ibaba.', -'missingcommentheader' => "'''Paalala:''' Hindi ka nagbigay ng isang paksa/paulo para sa puna/kumentong ito. -Kapag pinindot mo uli ang Sagip, masasagip ang pagbabago mo na wala nito.", +'missingcommentheader' => "'''Paalala:''' Hindi ka nagbigay ng isang paksa/paulo para sa punang ito. +Kapag pinindot mo uli ang \"{{int:savearticle}}\", masasagip ang pagbabago mo na wala nito.", 'summary-preview' => 'Paunang tingin sa buod:', 'subject-preview' => 'Paunang tingin sa paksa/paulo:', 'blockedtitle' => 'Hinarang ang tagagamit', @@ -771,8 +770,12 @@ Ang pinakahuling entrada sa talaan ng pagharang ay ibinigay sa baba para sa iny '''Hindi pa ito nasasagip!'''", 'userjspreview' => "'''Tandaang pagsubok/paunang tingin mo pa lang ito ng iyong JavaScript.''' '''Hindi pa ito nasasagip!'''", +'sitecsspreview' => "'''Tandaan mong paunang tingin pa lamang ito ng nasabing CSS.''' +'''Hindi pa ito nasasagip!'''", +'sitejspreview' => "'''Tandaan mong paunang tingin pa lamang ito ng nasabing kodigong JavaScript.''' +'''Hindi pa ito nasasagip!'''", 'userinvalidcssjstitle' => "'''Babala:''' Walang pabalat na \"\$1\". -Tandaang gumagamit ang pinasadyang mga pahinang .css at .js ng mga pamagat na may maliliit na mga titik, halimbawa na ang {{ns:user}}:Foo/monobook.css na taliwas sa {{ns:user}}:Foo/Monobook.css.", +Tandaang gumagamit ang pinasadyang mga pahinang .css at .js ng mga pamagat na may maliliit na mga titik, halimbawa na ang {{ns:user}}:Foo/vector.css na taliwas sa {{ns:user}}:Foo/Vector.css.", 'updated' => '(Naisapanahon na)', 'note' => "'''Paunawa:'''", 'previewnote' => "'''Isang lamang itong paunang tingin; @@ -813,7 +816,6 @@ Nangangako ka rin sa amin na ikaw mismo ang sumulat nito, sumipi/kumopya nito mu Kung ayaw mong mabago nang labis-labis ang mga isinulat mo, mas mabuting huwag mo na lamang ipasa iyan dito.
    Nangangako ka rin sa amin na ikaw ang mismong sumulat nito, o sinipi/kinopya mo ito mula sa isang pinagmulang nasa dominyo na ng publiko o katulad (tingnan ang $1 para sa mga detalye). '''HUWAG MAGTALA NG AKDANG NAKAKARAPATANG-ARI (NAKAKOPIRAYT) NA HINDI MUNA HUMIHINGI NG PAHINTULOT!'''", -'longpagewarning' => "'''BABALA: May habang $1 ''kilobyte'' ang pahinang ito; maaaring magkaroon ng suliranin sa pagbabago ng mga pahina ang ilang mga pantingin-tinging (''browser'') malapit nang umabot o mas mahaba na sa 32kb. Isaalang-alang ang paghahati ng pahina patungo sa mas maliliit na mga seksyon/bahagi.'''", 'longpageerror' => "'''KAMALIAN: May habang $1 ''kilobyte'' ang ipinasa mong teksto, na mas mahaba kaysa $2 ''kilobyte'' na siyang pinakamataas na nakatakdang halaga. Hindi ito masasagip.'''", 'readonlywarning' => "'''BABALA: Ikinandado ang kalipunan ng dato para sa gawaing pampagpapanatili, kaya't hindi mo pa masasagip ang mga pagbabagong ginawa mo ngayon. @@ -991,6 +993,8 @@ $1", 'logdelete-failure' => "'''Hindi maitakda ang kaantasan ng pagpapakita ng kalap:''' $1", 'revdel-restore' => 'Baguhin ang kaantasan ng pagpapakita', +'revdel-restore-deleted' => 'naburang mga binago', +'revdel-restore-visible' => 'makikitang mga binago', 'pagehist' => 'Kasaysayan ng pahina', 'deletedhist' => 'Naburang kasaysayan', 'revdelete-content' => 'nilalaman', @@ -1059,11 +1063,13 @@ Tiyakin na ang pagbabago ay makapagpapanatili ng pagkakatuluy-tuloy ng pahinang # Diffs 'history-title' => 'Kasaysayan ng pagbabago ng "$1"', 'difference' => '(Pagkakaiba sa pagitan ng mga pagbabago)', +'difference-multipage' => '(Pagkakaiba sa pagitan ng mga pahina)', 'lineno' => 'Linya $1:', 'compareselectedversions' => 'Paghambingin ang mga napiling bersyon', 'showhideselectedversions' => 'Ipakita/itago ang napiling mga bersyon', 'editundo' => 'ibalik', -'diff-multi' => '({{PLURAL:$1|Isang panggitnang pagbabago|$1 panggitnang pagbabago}} ang hindi ipinakita.)', +'diff-multi' => '({{PLURAL:$1|Isang panggitnang pagbabago|$1 panggitnang mga pagbabago}} ng {{PLURAL:$2|isang tagagamit|$2 mga tagagamit}} ang hindi ipinakikita.)', +'diff-multi-manyusers' => '({{PLURAL:$1|Isang panggitnang pagbabago|$1 panggitnang mga pagbabago}} ng {{PLURAL:$2|isang tagagamit|$2 mga tagagamit}} ang hindi ipinapakikita.)', # Search results 'searchresults' => 'Kinalabasan/Resulta ng paghahanap', @@ -1098,6 +1104,7 @@ Tiyakin na ang pagbabago ay makapagpapanatili ng pagkakatuluy-tuloy ng pahinang 'searchprofile-everything-tooltip' => 'Hanapin ang lahat ng nilalaman (kabilang ang mga pahina ng usapan)', 'searchprofile-advanced-tooltip' => 'Hanapin sa pinasadyang mga espasyo ng pangalan', 'search-result-size' => '$1 ({{PLURAL:$2|1 salita|$2 salita}})', +'search-result-category-size' => '{{PLURAL:$1|isang kasapi|$1 kasapi}} ({{PLURAL:$2|isang subkategorya|$2 subkategorya}}, {{PLURAL:$3|isang talaksan|$3 talaksan}})', 'search-result-score' => 'Kaugnayan: $1%', 'search-redirect' => '(ipanuto/ituro ang $1)', 'search-section' => '(seksyong $1)', @@ -1173,6 +1180,7 @@ Subuking lagyan ng unlapi/paunang ''all:'' upang hanapin ang lahat ng mga nialal 'contextlines' => 'Linya bawat pagtama:', 'contextchars' => 'Konteksto ng bawat guhit:', 'stub-threshold' => 'Kakayanan para sa pagpopormat ng kawing ng usbong (mga \'\'byte\'\'):', +'stub-threshold-disabled' => 'Hindi pinagagana', 'recentchangesdays' => 'Mga araw na ipapakita sa kamakailan lamang na mga pagbabago:', 'recentchangesdays-max' => '(pinakamataas na ang $1 {{PLURAL:$1|araw|mga araw}})', 'recentchangescount' => 'Bilang ng mga pagbabagong ipapakita sa pamamagitan ng likas na katakdaan:', @@ -1204,6 +1212,7 @@ Subuking lagyan ng unlapi/paunang ''all:'' upang hanapin ang lahat ng mga nialal 'prefs-files' => 'Mga talaksan', 'prefs-custom-css' => 'Pasadyang CSS', 'prefs-custom-js' => 'Pasadyang JS', +'prefs-common-css-js' => 'Naibahaging CSS/JS para sa lahat ng pabalat:', 'prefs-reset-intro' => 'Magagamit mo ang pahinang ito upang muling maitakda ang mga kagustuhan mo sa likas na pagtatakda ng sityo. Hindi ito maibabalik sa dating gawi.', 'prefs-emailconfirm-label' => 'Kumpirmasyon ng e-liham:', @@ -1243,9 +1252,15 @@ Mapipili mo ring payagan ang ibang tagagamit na makapagugnayan sa iyo sa pamamag 'prefs-advancedrendering' => 'Masulong na mga mapagpipilian', 'prefs-advancedsearchoptions' => 'Masulong na mga mapagpipilian', 'prefs-advancedwatchlist' => 'Masulong na mga mapagpipilian', -'prefs-display' => 'Ipakita ang mga pagpipilian', +'prefs-displayrc' => 'Ipakita ang mga pagpipilian', +'prefs-displaysearchoptions' => 'Ipakita ang mga pagpipilian', +'prefs-displaywatchlist' => 'Ipakita ang mga pagpipilian', 'prefs-diffs' => 'Mga pagkakaiba', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Mukhang katanggap-tanggap ang tirahan ng e-liham', +'email-address-validity-invalid' => 'Magpasok ng isang tanggap na tirahan ng e-liham', + # User rights 'userrights' => 'Pamamahala ng mga karapatan ng tagagamit', 'userrights-lookup-user' => 'Pamahalaan ang mga pangkat ng tagagamit', @@ -1329,6 +1344,7 @@ Mapipili mo ring payagan ang ibang tagagamit na makapagugnayan sa iyo sa pamamag 'right-hideuser' => 'Harangin ang isang tagagamit, na itinatago mula sa publiko', 'right-ipblock-exempt' => 'Laktawan ang mga pagharang/paghadlang na pang-IP, kusang pagharang/paghadlang at mga saklaw ng pagharang/paghadlang', 'right-proxyunbannable' => 'Laktawan ang mga kusang pagharang ng mga kahalili', +'right-unblockself' => 'Tanggalin ang pagkakaharang ng kanilang mga sarili', 'right-protect' => 'Baguhin ang mga antas ng panananggalang at baguhin ang mga pahinang nakasanggalang', 'right-editprotected' => 'Baguhin ang mga pahinang nakasanggalang (walang baita-baitang na panananggalang)', 'right-editinterface' => 'Baguhin ang ugnayang-hangganan ng tagagamit', @@ -1351,7 +1367,6 @@ Mapipili mo ring payagan ang ibang tagagamit na makapagugnayan sa iyo sa pamamag 'right-siteadmin' => 'Ikandado at alisin ang pagkakakandado ng kalipunan ng dato', 'right-reset-passwords' => 'Mulng itakda ang mga hudyat ng iba pang mga tagagamit', 'right-override-export-depth' => 'Iluwas ang mga pahina na kabilang ang mga pahinang nakakawing magpahanggang sa isang lalim na 5', -'right-versiondetail' => 'Ipakita ang karugtong na kabatiran ng bersyong pangsopwer', 'right-sendemail' => 'Magpadala ng e-liham sa ibang mga tagagamit', # User rights log @@ -1402,14 +1417,9 @@ Mapipili mo ring payagan ang ibang tagagamit na makapagugnayan sa iyo sa pamamag 'recentchanges-legend' => 'Mga pagpipilian para sa kamakailang mga pagbabago', 'recentchangestext' => 'Subaybayan ang mga pinakahuling pagbabago sa wiki sa pahinang ito.', 'recentchanges-feed-description' => 'Sundan ang pinakahuling mga pagbabago sa wiki sa pamamagitan ng feed na ito.', -'recentchanges-label-legend' => 'Kahulugan : $1.', -'recentchanges-legend-newpage' => '$1 - bagong pahina', 'recentchanges-label-newpage' => 'Lumikha ng isang bagong pahina ang pagbabagong ito', -'recentchanges-legend-minor' => '$1 - maliliit na pagbabago', 'recentchanges-label-minor' => 'Isa itong munting pagbabago', -'recentchanges-legend-bot' => '$1 - binago ng bot', 'recentchanges-label-bot' => 'Gawa ng isang bot ang pagbabagong ito', -'recentchanges-legend-unpatrolled' => '$1 - hindi napatrulyang pagbabago', 'recentchanges-label-unpatrolled' => 'Hindi pa napapatrulyahan ang pagbabagong ito', 'rcnote' => "Nasa ibaba {{PLURAL:$1|ang '''1''' pagbabago|ang pinakahuling '''$1''' mga pagbabago}} sa huling {{PLURAL:$2|araw|'''$2''' mga araw}}, mula noong $5, $4.", 'rcnotefrom' => "Nasa ibaba ang mga pagbabago mula pa noong '''$2''' (ipinapakita ang magpahanggang sa '''$1''').", @@ -1456,6 +1466,9 @@ upang makapagkarga ng talaksan.', 'upload_directory_missing' => 'Nawawala ang direktoryo ng pagkarga ($1) at hindi na mailikha ng webserver.', 'upload_directory_read_only' => 'Ang direktoryo ng pagkarga ($1) ay hindi maisulat ng webserver.', 'uploaderror' => 'Kamalian sa pagkarga', +'upload-recreate-warning' => "'''Babala: Ang isang talaksan na may ganyang pangalan ay nabura o inilipat.''' + +Ang talaan ng pagbubura at paglipat para sa pahinang ito ay ibinigay dito para sa kaginhawahan:", 'uploadtext' => "Gamitin ang pormularyong nasa ibaba para magkarga ng mga talaksan. Para tingnan o maghanap ng mga dati nang naikargang mga talaksan pumunta sa [[Special:FileList|talaan ng ikinargang mga talaksan]], ang (muling) mga pagkakarga ay nakatala rin sa [[Special:Log/upload|talaan ng pagkarga]], ang mga binura/nabura sa [[Special:Log/delete|talaan ng pagbubura]]. @@ -1490,6 +1503,17 @@ Ang ninanais na {{PLURAL:\$3|uri ng talaksan ay ang|mga uri ng talaksan ay ang m 'filetype-banned-type' => "Isang hindi pinapahintulutang uri ng talaksan ang '''\".\$1\"'''. Ang pinapahintulutang {{PLURAL:\$3|uri ng talaksan ay ang|mga uri ng talaksan ay ang mga}} \$2.", 'filetype-missing' => 'Walang karugtong/hulapi ang talaksan (katulad ng ".jpg").', +'empty-file' => 'Walang laman ang ipinasa mong talaksan.', +'file-too-large' => 'Napakalaki ng ipinasa mong talaksan.', +'filename-tooshort' => 'Napakaikli ng pangalan ng talaksan.', +'filetype-banned' => 'Pinagbabawal ang ganitong uri ng talaksan.', +'verification-error' => 'Hindi pumasa sa pagpapatunay na pangtalaksan ang ganitong talaksan.', +'hookaborted' => 'Ang pagbabagong sinubok mong gawin ay hindi itinuloy ng isang kawil ng dugtong.', +'illegal-filename' => 'Hindi pinapayagan ang pangalan ng talaksan.', +'overwrite' => 'Hindi pinapahintulutan ang pagsusulat sa ibabaw ng umiiral na talaksan.', +'unknown-error' => 'Naganap ang isang hindi nakikilalang kamalian.', +'tmp-create-error' => 'Hindi malikha ang pansamantalang talaksan.', +'tmp-write-error' => 'Kamalian sa pagsusulat ng pansamantalang talaksan.', 'large-file' => 'Iminumungkahing hindi hihigit ang laki ng mga talaksan sa $1; ang talaksang ito ay $2.', 'largefileserver' => 'Mas malaki ang talaksan kaysa nakatakdang papahintulutan ng serbidor.', @@ -1516,13 +1540,14 @@ Kung nais mo pa ring ikarga pataas ang iyong talaksan, paki bumalik lamang at gu bumalik at ikarga ang talaksan na ito sa bagong pangalan. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Ang talaksang ito ay isang kakambal ng sumusunod na {{PLURAL:$1|talaksan|mga talaksan}}:', 'file-deleted-duplicate' => 'Dating nabura ang isang talaksang katulad ng talaksang ito ([[:$1]]). Dapat mong suriin ang kasaysayan ng pagbubura ng talaksang iyon bago magpatuloy sa muling pagkarga nito.', -'successfulupload' => 'Matagumpay na pagkakarga', 'uploadwarning' => 'Babala sa pagkakarga', 'uploadwarning-text' => 'Pakibago ang nasa ibabang paglalarawan ng talaksan at subukan muli.', 'savefile' => 'Sagipin ang talaksan', 'uploadedimage' => 'ikinarga ang "[[$1]]"', 'overwroteimage' => 'nagkarga ng isang bagong bersyon ng "[[$1]]"', 'uploaddisabled' => 'Hindi pinagana ang mga pagkarga', +'copyuploaddisabled' => 'Ikargang paitaas ayon sa hindi pinaganang URL.', +'uploadfromurl-queued' => 'Inilagay sa pila ang iyong pagkakargang paitaas.', 'uploaddisabledtext' => 'Hindi pinagana ang mga pagkakarga ng talaksan.', 'php-uploaddisabledtext' => 'Hindi pinapagana ang mga pagkakarga ng talaksang PHP. Pakisuri ang katakdaan ng mga_pagkakarga_ng_talaksan.', 'uploadscripted' => 'Naglalaman ang talaksan na ito ng HTML o kodigong script na maaaring mali ang pagkaintindi ng isang web browser.', @@ -1541,6 +1566,14 @@ bumalik at ikarga ang talaksan na ito sa bagong pangalan. [[File:$1|thumb|center Ikunsidera mo kung nararapat ba na ipagpatuloy ang pagkarga ng talaksang ito. Ibinigay ang tala ng pagbura ng talaksang ito para konbinyente:", 'filename-bad-prefix' => "Ang talaksan na ikakarga mo ay nagsisimula sa '''\"\$1\"''', na isang hindi naglalarawang pangalan na karaniwang tinatakda ng mga kamerang digital. Paki pili ang isang mas naglalarawang pangalan para sa iyong talaksan.", +'upload-success-subj' => 'Matagumpay na pagkakarga', +'upload-success-msg' => 'Matagumpay ang ikinarga mo mula sa [$2]. Makukuha ito mula rito: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Problema sa pagkarga', +'upload-failure-msg' => 'May suliranin sa iyong pagkakarga mula sa [$2]: + +$1', +'upload-warning-subj' => 'Babala sa pagkakarga', +'upload-warning-msg' => 'May suliranin sa iyong pagkakarga mula sa [$2]. Maaari kang magbalik sa [[Special:Upload/stash/$1|upload form]] upang itama ang suliraning ito.', 'upload-proto-error' => 'Maling protokolo', 'upload-proto-error-text' => 'Nangangailangan ang malayong pagkarga ng mga URL na nagsisimula sa http:// o ftp://.', @@ -1606,6 +1639,7 @@ Mababago ang pagkakapangkat-pangkat sa pamamagitan ng pagpindot sa isang paulo n 'listfiles_search_for' => 'Hanapin ang pangalan ng midya:', 'imgfile' => 'talaksan', 'listfiles' => 'Talaan ng talaksan', +'listfiles_thumb' => 'Kagyat', 'listfiles_date' => 'Petsa', 'listfiles_name' => 'Pangalan', 'listfiles_user' => 'Tagagamit', @@ -1720,8 +1754,8 @@ Ang paglalarawang nasa ibabaw ng [$2 pahina ng paglalarawan ng talaksan] nito do 'statistics-edits' => 'Naihanda na ang mga pagbabago ng pahina mula sa {{SITENAME}}', 'statistics-edits-average' => 'Karaniwang pagbabago sa bawat pahina', 'statistics-views-total' => 'Kalahatang pagdayo', +'statistics-views-total-desc' => 'Hindi kabilang ang mga pagtanaw sa mga pahinang hindi umiiral at mga pahinang natatangi', 'statistics-views-peredit' => 'Pagtingin sa bawat pagbabago', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Bilang ng gagawin]', 'statistics-users' => 'Mga nakatalang [[Special:ListUsers|tagagamit]]', 'statistics-users-active' => 'Mga masusugid na tagagamit (mga nakatalang mang-aambag sa buwang ito)', 'statistics-users-active-desc' => 'Mga tagagamit na nagsagawa ng isang galaw/gawain sa huling {{PLURAL:$1|araw|$1 mga araw}}', @@ -1735,7 +1769,7 @@ Tinuturing ang isang pahina bilang pahinang naglilinaw kung ginagamit nito ang i 'doubleredirects' => 'Mga dobleng karga', 'doubleredirectstext' => 'Nagtatala ang pahinang ito ng mga pahinang pumupunta sa iba pang mga pahinang nililipatan. Naglalaman ang bawat hanay ng mga kawing sa una ang pangalawang kapupuntahan, maging ng puntiryang pangalawang kapupuntahan, na karaniwang "tunay" na puntiryang pahina, na dapat kinatuturuan ng unang pupuntahan. -Nasugpo na ang mga ipinasok na inekisan.', +Nasugpo na ang mga ipinasok na inekisan.', 'double-redirect-fixed-move' => 'Inilipat na ang [[$1]], isa na ngayon itong panuto/panturo patungo sa [[$2]]', 'double-redirect-fixer' => 'Tagapagayos ng panuto/panturo', @@ -1758,6 +1792,8 @@ Nasugpo na ang mga ipinasok na inekisan.', 'nmembers' => '$1 {{PLURAL:$1|kasapi|mga kasapi}}', 'nrevisions' => '$1 {{PLURAL:$1|pagbabago|mga pagbabago}}', 'nviews' => '$1 {{PLURAL:$1|nakita|mga nakikita}}', +'nimagelinks' => 'Ginamit sa $1 {{PLURAL:$1|pahina|mga pahina}}', +'ntransclusions' => 'ginamit sa $1 {{plural:$1|pahina|mga pahina}}', 'specialpage-empty' => 'Walang resulta para sa ulat na ito.', 'lonelypages' => 'Mga inulilang pahina', 'lonelypagestext' => 'Ang mga sumusunod ng mga pahina ay hindi nakaturo mula sa ibang mga pahina sa wiking ito.', @@ -1914,34 +1950,40 @@ Maaaring may mga [[{{MediaWiki:Listgrouprights-helppage}}|karagdagang kabatiran] 'listgrouprights-removegroup-self-all' => 'Alisin ang lahat ng mga pangkat mula sa sariling akawnt', # E-mail user -'mailnologin' => 'Walang adres na mapagpapadalahan', -'mailnologintext' => 'Kailangan mong [[Special:UserLogin|lumagda]] at magkaroon ng tanggap na e-liham sa iyong [[Special:Preferences|mga kagustuhan]] para makapagpadala ng e-liham sa ibang mga tagagamit.', -'emailuser' => 'Padalhan ng e-liham ang tagagamit', -'emailpage' => 'Magpadala ng e-liham sa tagagamit', -'emailpagetext' => 'Magagamit mo ang pormularyo sa ibaba para makapagpadala ng mensahe sa pamamagitan ng isang e-liham para sa tagagamit na ito. +'mailnologin' => 'Walang adres na mapagpapadalahan', +'mailnologintext' => 'Kailangan mong [[Special:UserLogin|lumagda]] at magkaroon ng tanggap na e-liham sa iyong [[Special:Preferences|mga kagustuhan]] para makapagpadala ng e-liham sa ibang mga tagagamit.', +'emailuser' => 'Padalhan ng e-liham ang tagagamit', +'emailpage' => 'Magpadala ng e-liham sa tagagamit', +'emailpagetext' => 'Magagamit mo ang pormularyo sa ibaba para makapagpadala ng mensahe sa pamamagitan ng isang e-liham para sa tagagamit na ito. Ang ipinasok mong adres ng e-liham sa [[Special:Preferences|iyong mga kagustuhan ng tagagamit]] ay lilitaw bilang adres na "Mula kay" ng e-liham, para tuwirang makatugon sa iyo ang nakatanggap.', -'usermailererror' => 'Pagkakamaling sanhi ng pagkakabalik ng liham mula sa puntirya:', -'defemailsubject' => 'E-liham ng {{SITENAME}}', -'noemailtitle' => 'Walang adres ng e-liham', -'noemailtext' => 'Ang tagagamit na ito ay hindi tumukoy ng isang tanggap na adres ng e-liham.', -'nowikiemailtitle' => 'Walang pinapahintulutang e-liham', -'nowikiemailtext' => 'Pinili ng tagagamit na ito na huwag makatanggap ng e-liham mula sa ibang mga tagagamit.', -'email-legend' => 'Magpadala ng e-liham patungo sa isa pang tagagamit ng {{SITENAME}}', -'emailfrom' => 'Mula kay:', -'emailto' => 'Para kay:', -'emailsubject' => 'Paksa:', -'emailmessage' => 'Mensahe:', -'emailsend' => 'Ipadala', -'emailccme' => 'Padalhan ako ng sipi ng aking mensahe sa pamamagitan ng e-liham.', -'emailccsubject' => 'Kopya ng iyong mensahe sa $1: $2', -'emailsent' => 'Naipadala na ang e-liham', -'emailsenttext' => 'Naipadala na ang mensahe ng iyong e-liham.', -'emailuserfooter' => 'Ipinadala ang e-liham na ito ni $1 para kay $2 sa pamamagitan ng tungkuling "Magpadala ng e-liham" na nasa {{SITENAME}}.', +'usermailererror' => 'Pagkakamaling sanhi ng pagkakabalik ng liham mula sa puntirya:', +'defemailsubject' => 'E-liham ng {{SITENAME}}', +'usermaildisabled' => 'Hindi pinagana ang e-liham ng tagagamit', +'usermaildisabledtext' => 'Hindi maaaring magpadala ng e-liham sa ibang mga tagagamit sa wiki na ito.', +'noemailtitle' => 'Walang adres ng e-liham', +'noemailtext' => 'Ang tagagamit na ito ay hindi tumukoy ng isang tanggap na adres ng e-liham.', +'nowikiemailtitle' => 'Walang pinapahintulutang e-liham', +'nowikiemailtext' => 'Pinili ng tagagamit na ito na huwag makatanggap ng e-liham mula sa ibang mga tagagamit.', +'email-legend' => 'Magpadala ng e-liham patungo sa isa pang tagagamit ng {{SITENAME}}', +'emailfrom' => 'Mula kay:', +'emailto' => 'Para kay:', +'emailsubject' => 'Paksa:', +'emailmessage' => 'Mensahe:', +'emailsend' => 'Ipadala', +'emailccme' => 'Padalhan ako ng sipi ng aking mensahe sa pamamagitan ng e-liham.', +'emailccsubject' => 'Kopya ng iyong mensahe sa $1: $2', +'emailsent' => 'Naipadala na ang e-liham', +'emailsenttext' => 'Naipadala na ang mensahe ng iyong e-liham.', +'emailuserfooter' => 'Ipinadala ang e-liham na ito ni $1 para kay $2 sa pamamagitan ng tungkuling "Magpadala ng e-liham" na nasa {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Nag-iiwan ng mensaheng pangsistema.', +'usermessage-editor' => 'Mensahero ng sistema', # Watchlist 'watchlist' => 'Mga binabantayan ko', 'mywatchlist' => 'Bantayan ko', -'watchlistfor' => "(para sa '''$1''')", +'watchlistfor2' => 'Para sa $1 $2', 'nowatchlist' => 'Wala kang pahinang binabantayan.', 'watchlistanontext' => 'Paki $1 upang makita o mabago ang mga aytem sa iyong binabantayan.', 'watchnologin' => 'Di ka naka-lagda', @@ -2057,7 +2099,10 @@ Ang huling pagbabago sa pahina ay ginawa ni [[User:$3|$3]] ([[User talk:$3|Usapa 'revertpage' => 'Ibinalik ang mga pagbabago ni [[Special:Contributions/$2|$2]] ([[User talk:$2|Usapan]]) patungo sa huling rebisyon ni [[User:$1|$1]]', 'revertpage-nouser' => 'Ibinalik ang mga pagbabago ni (tinanggal ang bansag) patungo sa huling rebisyon ni [[User:$1|$1]]', 'rollback-success' => 'Ibinalik ang mga pagbabago ni $1; ibinalik sa huling bersyon ni $2.', -'sessionfailure' => "Tila mayroong suliraning may kaugnayan sa iyong sesyon/panahon ng pagkakalagda; + +# Edit tokens +'sessionfailure-title' => 'Nabigong pulong', +'sessionfailure' => "Tila mayroong suliraning may kaugnayan sa iyong sesyon/panahon ng pagkakalagda; Kinansela ang galaw/gawaing ito bilang pagiingat laban sa pagnanakaw (panghahaydyak) ng sesyon/panahon. Pakipindot ang pindutang \"ibalik\" (''back'') at ikarga uli ang pinanggalingan mong pahina, sumubok uli pagkaraan.", @@ -2189,19 +2234,23 @@ $1', 'month' => 'Mula sa buwan (at nauna):', 'year' => 'Mula sa taon (at nauna):', -'sp-contributions-newbies' => 'Ipakita ang mga ambag ng mga bagong kuwenta lamang', -'sp-contributions-newbies-sub' => 'Para sa mga bagong kuwenta', -'sp-contributions-newbies-title' => 'Mga ambag ng tagagamit para sa mga bagong kuwenta/akawnt', -'sp-contributions-blocklog' => 'Tala ng paglipat', -'sp-contributions-deleted' => 'naburang mga ambag ng tagagamit', -'sp-contributions-logs' => 'mga tala', -'sp-contributions-talk' => 'usapan', -'sp-contributions-userrights' => 'pamamahala ng mga karapatan ng tagagamit', -'sp-contributions-blocked-notice' => 'Kasalukuyang hinarang ang tagagamit na ito. +'sp-contributions-newbies' => 'Ipakita ang mga ambag ng mga bagong kuwenta lamang', +'sp-contributions-newbies-sub' => 'Para sa mga bagong kuwenta', +'sp-contributions-newbies-title' => 'Mga ambag ng tagagamit para sa mga bagong kuwenta/akawnt', +'sp-contributions-blocklog' => 'Tala ng paglipat', +'sp-contributions-deleted' => 'naburang mga ambag ng tagagamit', +'sp-contributions-uploads' => 'mga ikinargang paitaas', +'sp-contributions-logs' => 'mga tala', +'sp-contributions-talk' => 'usapan', +'sp-contributions-userrights' => 'pamamahala ng mga karapatan ng tagagamit', +'sp-contributions-blocked-notice' => 'Kasalukuyang hinarang ang tagagamit na ito. Ang pinakahuling entrada sa talaan ng pagharang ay ibinigay sa ibaba para sa pagsangguni:', -'sp-contributions-search' => 'Maghanap ng ambag', -'sp-contributions-username' => 'IP Address o bansag:', -'sp-contributions-submit' => 'Hanapin', +'sp-contributions-blocked-notice-anon' => 'Kasalukuyang hinarang ang adres ng IP na ito. +Ang pinakahuling entrada sa talaan ng pagharang ay ibinigay sa ibaba para sa pagsangguni:', +'sp-contributions-search' => 'Maghanap ng ambag', +'sp-contributions-username' => 'IP Address o bansag:', +'sp-contributions-toponly' => 'Ipakita lang ang mga pamamatnugot na mga huling rebisyon', +'sp-contributions-submit' => 'Hanapin', # What links here 'whatlinkshere' => 'Mga nakaturo dito', @@ -2262,7 +2311,6 @@ Tingnan ang [[Special:IPBlockList|talaan ng mga hinadlangang IP]] upang makita a 'ipb-edit-dropdown' => 'Baguhin ang mga dahilan sa pagharang', 'ipb-unblock-addr' => 'Tanggalin ang pagkaharang ng $1', 'ipb-unblock' => 'Tanggalin ang pagkaharang ng isang bansag o IP address', -'ipb-blocklist-addr' => 'Umiiral na pagharang/paghadlang para kay $1', 'ipb-blocklist' => 'Tingnan ang umiiral na mga pagharang/paghadlang', 'ipb-blocklist-contribs' => 'Mga ambag ni $1', 'unblockip' => 'Tanggalin ang pagharang/paghadlang sa tagagamit', @@ -2335,6 +2383,8 @@ Hinarang/hinadlangan na si $1. Ibig mo bang baguhin ang mga pagtatakda?', 'cant-block-while-blocked' => 'Hindi mo mahahadlangan/mahaharang ang ibang mga tagagamit habang hinahadlangan ka.', 'cant-see-hidden-user' => 'Ang tagagamit na sinusubukan mong hadlangan ay naharang at naikubli na. Dahil wala kang karapatang magkubli ng tagagamit, hindi mo makikita o mababago ang paghadlang sa tagagamit.', +'ipbblocked' => 'Hindi mo mahahadlangan o tanggalin ang hadlang ng ibang mga tagagamit, dahil hinadlangan ka rin', +'ipbnounblockself' => 'Hindi ka pinahihintulutang tanggalin ang pagharang sa iyo.', # Developer tools 'lockdb' => 'Ikandado ang kalipunan ng datos', @@ -2373,6 +2423,17 @@ Nangangahulugan ito na maaari mong muling pangalanan ang isang pahina pabalik sa '''BABALA!''' Maaaring itong maging isang marahas at hindi inaaasang pagbabago para sa isang bantog na pahina; pakitiyak na nauunawaan mo ang mga kahihinatnan nito bago magpatuloy.", +'movepagetext-noredirectfixer' => "Ang paggamit ng pormularyo sa ibaba ay muling magpapangalan ng isang pahina, na maglilipat sa lahat ng kasaysayan nito papunta sa bagong pangalan. +Ang lumang pamagat ay magiging isang pahina binago ang pupuntahan papunta sa bagong pamagat. +Tiyaking suriin ang [[Special:DoubleRedirects|nagkadalawa]] o [[Special:BrokenRedirects|putol na mga pagpapapunta]]. +Ikaw ang may pananagutan sa pagtitiyak na ang mga kawin ay patuloy na nakaturo kung saan sila dapat pumunta. + +Tandaan na ang pahina ay '''hindi''' ililipat kung mayroon nang isang pahina sa bagong pamagat, maliban na lang kung wala itong laman o isang pagpapapunta sa ibang lugar at walang nakaraang kasaysayan ng pagbago. +Nangangahulugan ito na maaari mong muling pangalanan ang isang pahina pabalik sa kung saan ito nagsimulang muling pinangalanan kung nagkamali ka, at hindi mo mapangibabawan ang isang umiiral na pahina. + +'''Babala!''' +Maaari itong maging isang marahas at hindi inaasahang pagbabago para sa isang tanyag na pahina; +mangyaring tiyakin na nauunawaan mo ang mga kahihinatnan nito bago magpatuloy.", 'movepagetalktext' => "Kusa/awtomatikong ililipat din ang mga kasama/kakabit na mga kaugnay na mga pahina '''maliban na lamang kung''': *Mayroon nang isang pahina ng usapang may laman na at umiiral na sa ilalim ng isang bagong pangalan, o *Hindi mo nilagyan ng tsek ang kahong nasa ibaba. @@ -2429,6 +2490,7 @@ Mayroon na ang pupuntahang artikulo na "[[$1]]". Nais mo bang burahin ito para m 'immobile-source-page' => 'Hindi naililipat ang pahinang ito.', 'immobile-target-page' => 'Hindi makakalipat papunta sa ganyang kapupuntahang pamagat.', 'imagenocrossnamespace' => 'Hindi mailipat ang talaksan patungo sa hindi pangtalaksang espasyo ng pangalan', +'nonfile-cannot-move-to-file' => 'Hindi maililipat ang hindi talaksan sa puwang na pampangalan ng talaksan', 'imagetypemismatch' => 'Hindi tumutugma sa uri nito ang bagong pandugtong/karugtong ng talaksan', 'imageinvalidfilename' => 'Hindi tanggap ang patutunguhan/puntiryang pangalan ng talaksan.', 'fix-double-redirects' => 'Isapanahon ang kahit anong panuto/panutong tumuturo sa orihinal na pamagat', @@ -2508,6 +2570,7 @@ Sagipin mo ito sa iyong kompyuter at papaitaas na ikarga ito rito.', 'importstart' => 'Inaangkat na ang mga pahina...', 'import-revision-count' => '$1 {{PLURAL:$1|pagbabago|mga pagbabago}}', 'importnopages' => 'Walang mga pahinang maangkat.', +'imported-log-entries' => 'Inangkat na $1 {{PLURAL:$1|pagpasok sa talaan|mga pagpasok sa talaan}}.', 'importfailed' => 'Bigo ang pag-angkat: $1', 'importunknownsource' => 'Hindi alam na pinagmulang uri ng angkat', 'importcantopen' => 'Hindi mabuksan ang talaksan ng angkat', @@ -2600,6 +2663,8 @@ Sagipin mo ito sa iyong kompyuter at papaitaas na ikarga ito rito.', 'tooltip-upload' => 'Simulan ang pagkarga', 'tooltip-rollback' => 'Ibinabalik ng "Pagulungin pabalik sa dati" ang (mga) pagbabago sa pahinang ito patungo sa huling bersyon ng huling tagapagambag sa pamamagitan ng isang pindot lamang.', 'tooltip-undo' => 'Ibinabalit ng "Ibalik" ang pagbabagong ito at binubuksan ang pahinang gawaan ng pagbabago sa anyong paunang-tingin muna. Nagpapahintulot na makapagdagdag ng dahilan sa buod.', +'tooltip-preferences-save' => 'Itakda ang mga kagustuhan', +'tooltip-summary' => 'Magbigay ng maikling buod', # Stylesheets 'common.css' => '/* Ang inilagay na CSS dito ay gagamitin para sa lahat ng mga pabalat */', @@ -2729,14 +2794,17 @@ Maaaring manganib ang iyong sistema kapag ipinagana mo ito.", 'imagemaxsize' => "Takdang hangganan sa laki ng larawan:
    ''(para sa mga pahina ng paglalarawan ng talaksan)''", 'thumbsize' => 'Maliit na sukat (parang "kuko sa hinlalaki" lamang):', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|pahina|mga pahina}}', -'file-info' => '(sukat ng talaksan: $1, tipo ng MIME: $2)', -'file-info-size' => '($1 × $2 piksel, sukat ng talaksan: $3, tipo ng MIME: $4)', +'file-info' => 'sukat ng talaksan: $1, tipo ng MIME: $2', +'file-info-size' => '$1 × $2 piksel, sukat ng talaksan: $3, tipo ng MIME: $4', 'file-nohires' => 'Walang makuhang mas mataas na resolusyon (kalinawan).', -'svg-long-desc' => '(Talaksang SVG, nasa mga bilang na $1 × $2 mga piksel, sukat ng talaksan: $3)', +'svg-long-desc' => 'Talaksang SVG, nasa mga bilang na $1 × $2 mga piksel, sukat ng talaksan: $3', 'show-big-image' => 'Buong resolusyon (kalinawan)', 'show-big-image-thumb' => 'Laki ng paunang tinging ganito: $1 × $2 mga piksel', 'file-info-gif-looped' => 'nasilo na', 'file-info-gif-frames' => '$1 {{PLURAL:$1|banhay|mga banhay}}', +'file-info-png-looped' => 'nakalikaw', +'file-info-png-repeat' => 'pinaandar ng $1 {{PLURAL:$1|ulit|mga ulit}}', +'file-info-png-frames' => ' $1 {{PLURAL:$1|kuwadro|mga kuwadro}}', # Special:NewFiles 'newimages' => 'Galerya ng mga bagong talaksan', @@ -2895,6 +2963,7 @@ Nakatakdang itago ang iba pa. 'exif-gpsareainformation' => 'Pangalan ng lugar ng GPS', 'exif-gpsdatestamp' => 'Petsa ng GPS', 'exif-gpsdifferential' => 'Pagtatama sa pakakaiba ng GPS', +'exif-objectname' => 'Maiksing pamagat', # EXIF attributes 'exif-compression-1' => 'Walang kompresyon', @@ -3058,26 +3127,26 @@ Nakatakdang itago ang iba pa. 'limitall' => 'lahat', # E-mail address confirmation -'confirmemail' => 'Patotohanan ang adres ng e-liham', -'confirmemail_noemail' => 'Wala kang nakatakdang tanggap na adres ng e-liham sa iyong [[Special:Preferences|mga kagustuhan ng tagagamit]].', -'confirmemail_text' => "Pinagagawa ng {{SITENAME}} na patotohanan mo ang iyong adres ng e-liham bago gamitin ang mga kasangkapang-katangian ng e-liham. Pindutin at buhayin ang pindutan sa ibaba para makapagpadala ng isang makapagpapatotoong e-liham (kompirmasyon) patungo sa iyong adres. +'confirmemail' => 'Patotohanan ang adres ng e-liham', +'confirmemail_noemail' => 'Wala kang nakatakdang tanggap na adres ng e-liham sa iyong [[Special:Preferences|mga kagustuhan ng tagagamit]].', +'confirmemail_text' => "Pinagagawa ng {{SITENAME}} na patotohanan mo ang iyong adres ng e-liham bago gamitin ang mga kasangkapang-katangian ng e-liham. Pindutin at buhayin ang pindutan sa ibaba para makapagpadala ng isang makapagpapatotoong e-liham (kompirmasyon) patungo sa iyong adres. Makakasama sa liham ang isang kawing na naglalaman ng kodigo; Ikarga ang kawing sa iyong pantingin-tingin (''browser'') para mapatotohanang katanggap-tanggap ang iyong adres ng e-liham.", -'confirmemail_pending' => 'Naipadala na sa iyong e-liham ang kodigo ng pagpapatotoo (kumpirmasyon); kung kamakailan mo lamang nilikha ang iyong kuwenta/akawnt, maaaring ibigin mong maghintay ng ilang minuto para makarating muna ito bago subuking humiling ng isang bagong kodigo.', -'confirmemail_send' => 'Magpadala ng isang kodigo ng pagpapatotoo (kumpirmasyon)', -'confirmemail_sent' => 'Naipadala na ang magpapatotoong e-liham (kumpirmasyon).', -'confirmemail_oncreate' => 'Nagpadala na ng isang kodigo ng pagpapatotoo (kumpirmasyon) patungo sa iyong adres ng e-liham. Hindi kailangan ang kodigong ito para makalagda, ngunit kailangan mong ibigay muna ito bago paganahin/paandarin ang anumang pang e-liham na kasangkapang-katangiang nasa loob ng wiki.', -'confirmemail_sendfailed' => 'Hindi maipadala ng {{SITENAME}} ang iyong liham ng pagpapatotoo (kumpirmasyon). +'confirmemail_pending' => 'Naipadala na sa iyong e-liham ang kodigo ng pagpapatotoo (kumpirmasyon); kung kamakailan mo lamang nilikha ang iyong kuwenta/akawnt, maaaring ibigin mong maghintay ng ilang minuto para makarating muna ito bago subuking humiling ng isang bagong kodigo.', +'confirmemail_send' => 'Magpadala ng isang kodigo ng pagpapatotoo (kumpirmasyon)', +'confirmemail_sent' => 'Naipadala na ang magpapatotoong e-liham (kumpirmasyon).', +'confirmemail_oncreate' => 'Nagpadala na ng isang kodigo ng pagpapatotoo (kumpirmasyon) patungo sa iyong adres ng e-liham. Hindi kailangan ang kodigong ito para makalagda, ngunit kailangan mong ibigay muna ito bago paganahin/paandarin ang anumang pang e-liham na kasangkapang-katangiang nasa loob ng wiki.', +'confirmemail_sendfailed' => 'Hindi maipadala ng {{SITENAME}} ang iyong liham ng pagpapatotoo (kumpirmasyon). Pakisuri ang iyong adres ng e-liham kung may mga hindi tanggap na mga panitik/karakter. Ibinalik ng tagapagpadala ang: $1', -'confirmemail_invalid' => 'Hindi tamang kodigo ng kumpirmasyon. Maaaring lumagpas na sa taning ang kodigo.', -'confirmemail_needlogin' => 'Kailangan mong $1 upang kumpirmahin/mapatotohanan ang iyong adres ng e-liham.', -'confirmemail_success' => 'Nakumpirma/napatotohanan na ang adres ng e-liham mo. Maaari ka ng [[Special:UserLogin|lumagda]] at maglibang sa wiki.', -'confirmemail_loggedin' => 'Nakumpirma/napatotohanan na ngayon ang adres ng e-liham mo.', -'confirmemail_error' => 'May nangyaring kamalian sa pagsasagip ng iyong kumpirmasyon.', -'confirmemail_subject' => 'Kumpirmasyon/pagpapatotoong pang-adres ng e-liham ng {{SITENAME}}', -'confirmemail_body' => 'May isa, maaaring ikaw, na mula sa adres ng IP na $1, +'confirmemail_invalid' => 'Hindi tamang kodigo ng kumpirmasyon. Maaaring lumagpas na sa taning ang kodigo.', +'confirmemail_needlogin' => 'Kailangan mong $1 upang kumpirmahin/mapatotohanan ang iyong adres ng e-liham.', +'confirmemail_success' => 'Nakumpirma/napatotohanan na ang adres ng e-liham mo. Maaari ka ng [[Special:UserLogin|lumagda]] at maglibang sa wiki.', +'confirmemail_loggedin' => 'Nakumpirma/napatotohanan na ngayon ang adres ng e-liham mo.', +'confirmemail_error' => 'May nangyaring kamalian sa pagsasagip ng iyong kumpirmasyon.', +'confirmemail_subject' => 'Kumpirmasyon/pagpapatotoong pang-adres ng e-liham ng {{SITENAME}}', +'confirmemail_body' => 'May isa, maaaring ikaw, na mula sa adres ng IP na $1, ang nagtala ng isang akawnt/kuwentang "$2" na mayroong ganitong adres ng e-liham sa {{SITENAME}}. Para patotohanang ikaw nga ang may-ari ng kuwentang ito at para buhayin ang mga kasangkapang-katanginan ng e-liham sa {{SITENAME}}, buksan ang kawing na ito sa iyong pantingin-tingin (\'\'browser\'\'): @@ -3090,8 +3159,35 @@ para kanselahin o huwag nang ituloy ang pagpapatotoo (kumpirmasyon) ng adres ng $5 Magwawakas ang pagiging mabisa ng kodigo ng pagpapatotoong ito sa $4.', -'confirmemail_invalidated' => 'Hindi itinuloy/kinansela ang pagpapatotoo ng e-liham', -'invalidateemail' => 'Huwag ituloy/kanselahin ang pagpapatotoo ng e-liham', +'confirmemail_body_changed' => 'May isa, maaaring ikaw, na mula sa adres ng IP na $1, +ang nagbago ng adres ng e-liham ng akawnt na "$2" sa ganitong adres sa {{SITENAME}}. + +Para patotohanang ikaw nga ang may-ari ng kuwentang ito at para buhaying muli ang mga kasangkapang-katanginan ng e-liham sa {{SITENAME}}, buksan ang kawing na ito sa iyong pantingin-tingin: + +$3 + +Kung *hindi* iyo ang akawnt, sundan mo ang kawing na ito +para huwag nang ituloy ang pagpapatotoo ng adres ng e-liham: + +$5 + +Magwawakas ang kodigo ng pagpapatotoong ito sa $4.', +'confirmemail_body_set' => 'May isang tao, maaaring ikaw, mula sa tirahan ng IP na $1, +ang nagtakda ng tirahan ng e-liham ng akawnt na "$2" papunta sa tirahang ito sa {{SITENAME}}. + +Upang tiyakin na ang akawnt na ito ay talagang sa iyo at muling buhayin +ang mga tampok ng e-liham sa {{SITENAME}}, buksan ang kawing na ito sa iyong pantingin-tingin: + +$3 + +Kung ang akawnt ay *hindi* iyo, sundan ang kawing na ito +upang huwag ituloy ang pagpapatunay ng tirahan ng e-liham: + +$5 + +Mawawalan ng bisa ang kodigong ito ng pagpapatunay pagsapit ng $4.', +'confirmemail_invalidated' => 'Hindi itinuloy/kinansela ang pagpapatotoo ng e-liham', +'invalidateemail' => 'Huwag ituloy/kanselahin ang pagpapatotoo ng e-liham', # Scary transclusion 'scarytranscludedisabled' => '[Nakapatay ang interwiki transcluding]', @@ -3133,6 +3229,7 @@ Pakitiyak kung ibig mo talagang likhain muli ang pahinang ito.", 'table_pager_first' => 'Unang pahina', 'table_pager_last' => 'Huling pahina', 'table_pager_limit' => 'Ipakita ang $1 aytem bawat pahina', +'table_pager_limit_label' => 'Mga bagay sa bawat pahina:', 'table_pager_limit_submit' => 'Punta', 'table_pager_empty' => 'Walang resulta', @@ -3234,6 +3331,7 @@ Maaari mo ring [[Special:Watchlist/edit|gamitin ang pangkaraniwang pampatnugot]] 'version-specialpages' => 'Natatanging mga pahina', 'version-parserhooks' => "Mga pangkawit ng banghay (''parser'')", 'version-variables' => 'Mga bagay na nababago/nagbabago', +'version-skins' => 'Mga pabalat', 'version-other' => 'Iba pa', 'version-mediahandlers' => 'Mga tagahawak/tagapamahala ng midya', 'version-hooks' => 'Mga pangkawit', @@ -3245,6 +3343,11 @@ Maaari mo ring [[Special:Watchlist/edit|gamitin ang pangkaraniwang pampatnugot]] 'version-hook-subscribedby' => 'Sinuskribi ng/ni/nina', 'version-version' => '(Bersyon $1)', 'version-license' => 'Lisensiya', +'version-poweredby-credits' => "Ang wiking ito ay pinapatakbo ng '''[http://www.mediawiki.org/ MediaWiki]''', karapatang-ari © 2001-$1 $2.", +'version-poweredby-others' => 'iba pa', +'version-license-info' => 'Ang MediaWiki ay isang malayang sopwer; maaari mo itong ipamahagi at/o baguhin ito sa ilalim ng mga patakaran ng Pangkalahatang Pangmadlang Lisensiyang GNU ayon sa pagkakalathala ng Pundasyon ng Malayang Sopwer; na maaaring bersyong 2 ng Lisensiya, o (kung nais mo) anumang susunod na bersyon. +Ang MediaWiki ay ipinamamahagi na umaasang magiging gamitin, subaliut WALANG ANUMANG KATIYAKAN; ni walang pahiwatig ng PAGIGING MABENTA o KAANGKUPAN PARA ISANG TIYAK NA LAYUNIN. Tingnan ang Pangkalahatang Pangmadlang Lisensiyang GNU para sa mas marami pang mga detalye. +Dapat na nakatanggap ka ng [{{SERVER}}{{SCRIPTPATH}}/COPYING isang sipi ng Pangkalahatang Pangmadlang Lisensiyang GNU] kasama ang programang ito; kung hindi, sumulat sa Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html basahin ito habang nasa Internet].', 'version-software' => 'Inistalang software', 'version-software-product' => 'Produkto', 'version-software-version' => 'Bersyon', @@ -3313,6 +3416,15 @@ Ipasok ang pangalan ng talaksan na wala ang unlaping \"{{ns:image}}:\".", 'tags-edit' => 'baguhin', 'tags-hitcount' => '$1 {{PLURAL:$1|pagbabago|mga pagbabago}}', +# Special:ComparePages +'comparepages' => 'Paghambingin ang mga pahina', +'compare-selector' => 'Paghambingin ang mga pahina ng rebisyon', +'compare-page1' => 'Pahina 1', +'compare-page2' => 'Pahina 2', +'compare-rev1' => 'Rebisyon 1', +'compare-rev2' => 'Rebisyon 2', +'compare-submit' => 'Paghambingin', + # Database error messages 'dberr-header' => 'May isang suliranin ang wiking ito', 'dberr-problems' => 'Paumanhin! Dumaranas ng mga kahirapang teknikal ang sityong ito.', @@ -3329,8 +3441,13 @@ Ipasok ang pangalan ng talaksan na wala ang unlaping \"{{ns:image}}:\".", 'htmlform-float-invalid' => 'Ang tinukoy mong halagay ay hindi isang bilang.', 'htmlform-int-toolow' => 'Ang tinukoy mong halaga ay mas mababa kaysa sa pinakamababa ng $1', 'htmlform-int-toohigh' => 'Ang tinukoy mong halaga ay mahigit kaysa pinakamataas ng $1', +'htmlform-required' => 'Kailangan ang halagang ito', 'htmlform-submit' => 'Ipasa', 'htmlform-reset' => 'Bawiin ang mga pagbabago', 'htmlform-selectorother-other' => 'Iba pa', +# SQLite database support +'sqlite-has-fts' => '$1 na may suportang paghahanap ng buong teksto', +'sqlite-no-fts' => '$1 na walang suporta ng paghahanap ng buong teksto', + ); diff --git a/languages/messages/MessagesTn.php b/languages/messages/MessagesTn.php index ca78461a..e1c0e632 100644 --- a/languages/messages/MessagesTn.php +++ b/languages/messages/MessagesTn.php @@ -94,7 +94,7 @@ O ipuletse akhaonte. O seka wa lebala go fetola tse o di dikgatlhegelo tsa gago 'yourname' => 'Leina la modirisi:', 'yourpassword' => 'Selotlolo sa sephiri:', 'yourpasswordagain' => 'Kwala selotlolo sa gago sa sephiri gape:', -'remembermypassword' => 'Gakologelwa ikwadiso yame mo khompiutareng e', +'remembermypassword' => 'Gakologelwa ikwadiso yame mo khompiutareng e (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'Ikwadise', 'userlogin' => 'Ikwadise / ipulela tsebe', 'logout' => 'Tswala', diff --git a/languages/messages/MessagesTo.php b/languages/messages/MessagesTo.php index f00e9436..9226fb60 100644 --- a/languages/messages/MessagesTo.php +++ b/languages/messages/MessagesTo.php @@ -16,7 +16,7 @@ $messages = array( # User preference toggles 'tog-underline' => 'Ngaahi fehokotaki ʻoku laineʻi ʻi lalo:', 'tog-highlightbroken' => 'Ngaohi ʻa e ngaahi fehokotaki maumau ʻoku pehē (meʻa kehe ʻoku pehē ?).', -'tog-rememberpassword' => 'Manatuʻi ʻeku kau-ki-ai ʻi he komipiuta ʻeni', +'tog-rememberpassword' => 'Manatuʻi ʻeku kau-ki-ai ʻi he komipiuta ʻeni (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Tānaki ngaahi peesi ʻoku fakatupu ʻe au ki he hokohoko leʻo', 'tog-watchdefault' => 'Tānaki ngaahi peesi ʻoku fatu ʻe au ki he hokohoko leʻo', 'tog-watchmoves' => 'Tānaki ki heʻeku hokohoko leʻo ʻa e ngaahi peesi kuo ʻunu ʻe au', @@ -269,7 +269,7 @@ Kuo fakatupu hoʻo tohi kau-ki-ai. ʻOua ʻe ngalo ke liliu hoʻo faʻiteliha {{ 'yourname' => 'Hingoa ʻetita', 'yourpassword' => 'Leatapu', 'yourpasswordagain' => 'Toe ʻai leatapu', -'remembermypassword' => 'Manatuʻi au', +'remembermypassword' => 'Manatuʻi au (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'ho ngāueʻanga', 'login' => 'Kau ki ai', 'nav-login-createaccount' => 'Kau ki ai', @@ -567,7 +567,6 @@ Ko e ʻuhinga loka ko e $1 ia.", [[$1|thumb]]", 'fileexists-forbidden' => 'ʻOku toka ʻi ai ha peesi mo e hingoa ē, pea ʻe ʻikai lava liliu; fakamolemole ʻe foki pea hiki hake ʻa e failé ni mo e ha hingoa foʻou. [[File:$1|thumb|center|$1]]', 'fileexists-shared-forbidden' => 'ʻOku toka ʻi ai ha peesi mo e hingoa ē ʻi he kalasi vahevahe; fakamolemole ʻe foki pea hiki hake ʻa e failé ni mo e ha hingoa foʻou. [[File:$1|thumb|center|$1]]', -'successfulupload' => 'Kuo ola ʻa e hiki hake', 'uploadwarning' => 'Tokanga hiki hake', 'savefile' => 'Haofaki faitaá ni', 'uploadedimage' => '"[[$1]]" ʻosi hiki hake', @@ -578,6 +577,7 @@ Ko e ʻuhinga loka ko e $1 ia.", 'destfilename' => 'Hingoa ʻo e faile ʻe ʻalu ki ai:', 'watchthisupload' => 'Leʻo he pēsí ni', 'filewasdeleted' => 'Kuo hiki hake ʻa e faile mo e hingoa ʻeni pea naʻe tāmateʻi ia. Kuo pau te ke vakai ki he $1 ʻi muʻa haʻo feinga ʻo toe hiki hake ia.', +'upload-success-subj' => 'Kuo ola ʻa e hiki hake', 'license' => 'Laiseni:', 'license-header' => 'Laiseni:', @@ -765,7 +765,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'Hokohoko leʻo ʻaʻaku', 'mywatchlist' => 'Hokohoko leʻo ʻaʻaku', -'watchlistfor' => "(maʻa e '''$1''')", 'nowatchlist' => 'ʻOku ʻikai ha meʻa ʻi hoʻo hokohoko leʻo.', 'watchlistanontext' => 'Kātaki, ʻe $1 kapau te ke fievakai pe fiefatu ha ngaahi meʻa ʻi hoʻo hokohoko leʻo.', 'watchnologin' => 'Teʻeki kau ki ai', diff --git a/languages/messages/MessagesTpi.php b/languages/messages/MessagesTpi.php index c3c6a2ea..edaba022 100644 --- a/languages/messages/MessagesTpi.php +++ b/languages/messages/MessagesTpi.php @@ -45,8 +45,7 @@ $messages = array( 'tog-editsection' => 'Soim ol [senisim] link long wanwan hap bilong ol pes', 'tog-editsectiononrightclick' => 'Senisim ol hap bilong pes taim yu paitim nem bilong hap
    wantaim raithan-klik (i nidim Javascript)', 'tog-showtoc' => 'Soim ol nem bilong hap insait long liklik bokis, taim igat antap long 3 hap long pes', -'tog-rememberpassword' => 'Holim nem bilong yusa bilong mi long dispela kompiuta', -'tog-editwidth' => 'Larim bokis bilong senisim igo bikpela olgeta', +'tog-rememberpassword' => 'Holim nem bilong yusa bilong mi long dispela kompiuta (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Putim ol nupela pes mi wokim long lukautbuk', 'tog-watchdefault' => 'Putim ol pes mi senisim long lukautbuk bilong mi', 'tog-watchmoves' => 'Putim ol pes mi surikim long lukautbuk bilong mi', @@ -152,20 +151,14 @@ $messages = array( 'qbspecialpages' => 'Ol sipesol pes', # Vector skin -'vector-action-delete' => 'Rausim', -'vector-action-move' => 'Surikim', -'vector-action-protect' => 'Tambuim', -'vector-namespace-category' => 'Grup', -'vector-namespace-image' => 'Fail', -'vector-namespace-mediawiki' => 'Mesej', -'vector-namespace-special' => 'Sipesol pes', -'vector-namespace-talk' => 'Toktok', -'vector-namespace-template' => 'Templet', -'vector-view-create' => 'Kirapim', -'vector-view-edit' => 'Senisim', -'vector-view-history' => 'Ol senis', -'vector-view-view' => 'Rit', -'vector-view-viewsource' => 'Lukim as tok', +'vector-action-delete' => 'Rausim', +'vector-action-move' => 'Surikim', +'vector-action-protect' => 'Tambuim', +'vector-view-create' => 'Kirapim', +'vector-view-edit' => 'Senisim', +'vector-view-history' => 'Ol senis', +'vector-view-view' => 'Rit', +'vector-view-viewsource' => 'Lukim as tok', 'errorpagetitle' => 'Samting i kranki', 'returnto' => 'Go bek long $1', @@ -271,14 +264,15 @@ $messages = array( 'viewsourcefor' => 'bilong $1', # Login and logout pages -'yourname' => 'Yusanem:', -'yourpassword' => 'Paswot:', -'logout' => 'Logaut', -'userlogout' => 'Logaut', -'gotaccountlink' => 'Log in', -'createaccountmail' => 'Long e-mel', -'mailmypassword' => 'E-mel nupela paswot', -'loginlanguagelabel' => 'Tokples: $1', +'yourname' => 'Yusanem:', +'yourpassword' => 'Paswot:', +'logout' => 'Logaut', +'userlogout' => 'Logaut', +'gotaccountlink' => 'Log in', +'createaccountmail' => 'Long e-mel', +'createaccountreason' => 'As bilong en:', +'mailmypassword' => 'E-mel nupela paswot', +'loginlanguagelabel' => 'Tokples: $1', # Edit page toolbar 'link_sample' => 'Link taitel', @@ -607,7 +601,7 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'Lukautbuk bilong mi', 'mywatchlist' => 'Lukautbuk bilong mi', -'watchlistfor' => "(bilong '''$1''')", +'watchlistfor2' => 'Bilong $1 $2', 'nowatchlist' => 'Nogat wanpela samting istap long lukautbuk bilong yu.', 'watchlistanontext' => 'Yu mas $1 long lukim o senisim ol samting long lukautbuk bilong yu.', 'watchnologintext' => 'Yu mas [[Special:UserLogin|login]] long senisim lukautbuk bilong yu.', @@ -845,8 +839,9 @@ Yu inap lukim as tok bilong em', 'watchlisttools-raw' => 'Senisim lukautbuk insait long wanpela bokis', # Special:Version -'version-other' => 'Narapela', -'version-license' => 'Laisens', +'version-other' => 'Narapela', +'version-license' => 'Laisens', +'version-poweredby-others' => 'ol narapela', # Special:FilePath 'filepath-page' => 'Fail:', @@ -865,6 +860,10 @@ Yu inap lukim as tok bilong em', # Special:Tags 'tags-edit' => 'senisim', +# Special:ComparePages +'compare-page1' => 'Pes 1', +'compare-page2' => 'Pes 2', + # HTML forms 'htmlform-selectorother-other' => 'Narapela', diff --git a/languages/messages/MessagesTr.php b/languages/messages/MessagesTr.php index 1b999727..2707fc8a 100644 --- a/languages/messages/MessagesTr.php +++ b/languages/messages/MessagesTr.php @@ -19,12 +19,14 @@ * @author Karduelis * @author Katpatuka * @author Mach + * @author Manco Capac * @author Metal Militia * @author Mirzali * @author Mskyrider * @author Myildirim2007 * @author Runningfridgesrule * @author Srhat + * @author Stultiwikia * @author Suelnur * @author Szoszv * @author Tarikozket @@ -71,7 +73,7 @@ $specialPageAliases = array( 'Watchlist' => array( 'İzlemeListesi' ), 'Recentchanges' => array( 'SonDeğişiklikler' ), 'Upload' => array( 'Yükle' ), - 'Listfiles' => array( 'DosyaListesi' ), + 'Listfiles' => array( 'DosyaListesi', 'DosyaListele' ), 'Newimages' => array( 'YeniDosyalar' ), 'Listusers' => array( 'KullanıcıListesi' ), 'Listgrouprights' => array( 'GrupHaklarıListesi' ), @@ -105,6 +107,7 @@ $specialPageAliases = array( 'Allpages' => array( 'TümSayfalar' ), 'Prefixindex' => array( 'ÖnekDizini' ), 'Ipblocklist' => array( 'IPEngelListesi' ), + 'Unblock' => array( 'EngeliKaldır' ), 'Specialpages' => array( 'ÖzelSayfalar' ), 'Contributions' => array( 'Katkılar' ), 'Emailuser' => array( 'E-postaGönder' ), @@ -135,6 +138,8 @@ $specialPageAliases = array( 'Mypage' => array( 'BenimSayfam' ), 'Mytalk' => array( 'MesajSayfam' ), 'Mycontributions' => array( 'Katkılarım' ), + 'Myuploads' => array( 'Yüklemelerim' ), + 'PermanentLink' => array( 'KalıcıBağ' ), 'Listadmins' => array( 'HizmetliListesi' ), 'Listbots' => array( 'BotListesi' ), 'Popularpages' => array( 'PopülerSayfalar' ), @@ -149,6 +154,9 @@ $specialPageAliases = array( 'DeletedContributions' => array( 'SilinenKatkılar' ), 'Tags' => array( 'Etiketler' ), 'Activeusers' => array( 'AktifKullanıcılar' ), + 'ComparePages' => array( 'SayfaKarşılaştır' ), + 'Badtitle' => array( 'KötüBaşlık' ), + 'DisableAccount' => array( 'HesapKapat' ), ); $magicWords = array( @@ -159,16 +167,16 @@ $magicWords = array( 'toc' => array( '0', '__İÇİNDEKİLER__', '__TOC__' ), 'noeditsection' => array( '0', '__DEĞİŞTİRYOK__', '__NOEDITSECTION__' ), 'noheader' => array( '0', '__BAŞLIKYOK__', '__NOHEADER__' ), - 'currentmonth' => array( '1', 'MEVCUTAY', 'MEVCUTAY2', 'CURRENTMONTH', 'CURRENTMONTH2' ), - 'currentmonth1' => array( '1', 'MEVCUTAY1', 'CURRENTMONTH1' ), - 'currentmonthname' => array( '1', 'MEVCUTAYADI', 'CURRENTMONTHNAME' ), - 'currentmonthabbrev' => array( '1', 'MEVCUTAYKISALTMASI', 'CURRENTMONTHABBREV' ), - 'currentday' => array( '1', 'MEVCUTGÜN', 'CURRENTDAY' ), - 'currentday2' => array( '1', 'MEVCUTGÜN2', 'CURRENTDAY2' ), - 'currentdayname' => array( '1', 'MEVCUTGÜNADI', 'CURRENTDAYNAME' ), - 'currentyear' => array( '1', 'MEVCUTYIL', 'CURRENTYEAR' ), - 'currenttime' => array( '1', 'MEVCUTZAMAN', 'CURRENTTIME' ), - 'currenthour' => array( '1', 'MEVCUTSAAT', 'CURRENTHOUR' ), + 'currentmonth' => array( '1', 'MEVCUTAY', 'MEVCUTAY2', 'GÜNCELAY', 'GÜNCELAY2', 'CURRENTMONTH', 'CURRENTMONTH2' ), + 'currentmonth1' => array( '1', 'MEVCUTAY1', 'GÜNCELAY1', 'CURRENTMONTH1' ), + 'currentmonthname' => array( '1', 'MEVCUTAYADI', 'GÜNCELAYADI', 'CURRENTMONTHNAME' ), + 'currentmonthabbrev' => array( '1', 'MEVCUTAYKISALTMASI', 'GÜNCELAYKISALTMASI', 'CURRENTMONTHABBREV' ), + 'currentday' => array( '1', 'MEVCUTGÜN', 'GÜNCELGÜN', 'CURRENTDAY' ), + 'currentday2' => array( '1', 'MEVCUTGÜN2', 'GÜNCELGÜN2', 'CURRENTDAY2' ), + 'currentdayname' => array( '1', 'MEVCUTGÜNADI', 'GÜNCELGÜNADI', 'CURRENTDAYNAME' ), + 'currentyear' => array( '1', 'MEVCUTYIL', 'GÜNCELYIL', 'CURRENTYEAR' ), + 'currenttime' => array( '1', 'MEVCUTZAMAN', 'GÜNCELZAMAN', 'CURRENTTIME' ), + 'currenthour' => array( '1', 'MEVCUTSAAT', 'GÜNCELSAAT', 'CURRENTHOUR' ), 'localmonth' => array( '1', 'YERELAY', 'YERELAY2', 'LOCALMONTH', 'LOCALMONTH2' ), 'localmonth1' => array( '1', 'YERELAY1', 'LOCALMONTH1' ), 'localmonthname' => array( '1', 'YERELAYADI', 'LOCALMONTHNAME' ), @@ -191,10 +199,10 @@ $magicWords = array( 'pagenamee' => array( '1', 'SAYFAADIU', 'PAGENAMEE' ), 'namespace' => array( '1', 'İSİMALANI', 'NAMESPACE' ), 'namespacee' => array( '1', 'İSİMALANIU', 'NAMESPACEE' ), - 'talkspace' => array( '1', 'TARTIŞMAALANI', 'TALKSPACE' ), - 'talkspacee' => array( '1', 'TARTIŞMAALANIU', 'TALKSPACEE' ), - 'subjectspace' => array( '1', 'KONUALANI', 'MADDEALANI', 'SUBJECTSPACE', 'ARTICLESPACE' ), - 'subjectspacee' => array( '1', 'KONUALANIU', 'MADDEALANIU', 'SUBJECTSPACEE', 'ARTICLESPACEE' ), + 'talkspace' => array( '1', 'TARTIŞMAALANI', 'TARTIŞMABOŞLUĞU', 'TALKSPACE' ), + 'talkspacee' => array( '1', 'TARTIŞMAALANIU', 'TARTIŞMABOŞLUĞUU', 'TALKSPACEE' ), + 'subjectspace' => array( '1', 'KONUALANI', 'MADDEALANI', 'KONUBOŞLUĞU', 'MADDEBOŞLUĞU', 'SUBJECTSPACE', 'ARTICLESPACE' ), + 'subjectspacee' => array( '1', 'KONUALANIU', 'MADDEALANIU', 'KONUBOŞLUĞUU', 'MADDEBOŞLUĞUU', 'SUBJECTSPACEE', 'ARTICLESPACEE' ), 'fullpagename' => array( '1', 'TAMSAYFAADI', 'FULLPAGENAME' ), 'fullpagenamee' => array( '1', 'TAMSAYFAADIU', 'FULLPAGENAMEE' ), 'subpagename' => array( '1', 'ALTSAYFAADI', 'SUBPAGENAME' ), @@ -206,7 +214,8 @@ $magicWords = array( 'subjectpagename' => array( '1', 'KONUSAYFASIADI', 'MADDESAYFASIADI', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ), 'subjectpagenamee' => array( '1', 'KONUSAYFASIADIU', 'MADDESAYFASIADIU', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ), 'msg' => array( '0', 'MSJ:', 'MSG:' ), - 'subst' => array( '0', 'KOPYALA:', 'SUBST:' ), + 'subst' => array( '0', 'KOPYALA:', 'AKTAR:', 'SUBST:' ), + 'safesubst' => array( '0', 'GÜVENLİAKTAR:', 'SAFESUBST:' ), 'msgnw' => array( '0', 'MSJNW:', 'MSGNW:' ), 'img_thumbnail' => array( '1', 'küçükresim', 'küçük', 'thumbnail', 'thumb' ), 'img_manualthumb' => array( '1', 'küçükresim=$1', 'küçük=$1', 'thumbnail=$1', 'thumb=$1' ), @@ -231,7 +240,8 @@ $magicWords = array( 'img_link' => array( '1', 'bağlantı=$1', 'link=$1' ), 'int' => array( '0', 'İNT:', 'INT:' ), 'sitename' => array( '1', 'SİTEADI', 'SITENAME' ), - 'ns' => array( '0', 'İA:', 'NS:' ), + 'ns' => array( '0', 'AA:', 'AB:', 'NS:' ), + 'nse' => array( '0', 'AAU:', 'ABU:', 'NSE:' ), 'localurl' => array( '0', 'YERELURL:', 'LOCALURL:' ), 'localurle' => array( '0', 'YERELURLU:', 'LOCALURLE:' ), 'server' => array( '0', 'SUNUCU', 'SERVER' ), @@ -242,8 +252,8 @@ $magicWords = array( 'gender' => array( '0', 'CİNSİYET:', 'GENDER:' ), 'notitleconvert' => array( '0', '__BAŞLIKDÖNÜŞÜMÜYOK__', '__BDY__', '__NOTITLECONVERT__', '__NOTC__' ), 'nocontentconvert' => array( '0', '__İÇERİKDÖNÜŞÜMÜYOK__', '__İDY__', '__NOCONTENTCONVERT__', '__NOCC__' ), - 'currentweek' => array( '1', 'MEVCUTHAFTA', 'CURRENTWEEK' ), - 'currentdow' => array( '1', 'MEVCUTHAFTANINGÜNÜ', 'CURRENTDOW' ), + 'currentweek' => array( '1', 'MEVCUTHAFTA', 'GÜNCELHAFTA', 'CURRENTWEEK' ), + 'currentdow' => array( '1', 'MEVCUTHAFTANINGÜNÜ', 'GÜNCELHAFTANINGÜNÜ', 'CURRENTDOW' ), 'localweek' => array( '1', 'YERELHAFTA', 'LOCALWEEK' ), 'localdow' => array( '1', 'YERELHAFTANINGÜNÜ', 'LOCALDOW' ), 'revisionid' => array( '1', 'SÜRÜMNO', 'REVISIONID' ), @@ -264,8 +274,8 @@ $magicWords = array( 'displaytitle' => array( '1', 'BAŞLIKGÖSTER', 'DISPLAYTITLE' ), 'newsectionlink' => array( '1', '__YENİBAŞLIKBAĞLANTISI__', '__NEWSECTIONLINK__' ), 'nonewsectionlink' => array( '1', '__YENİBAŞLIKBAĞLANTISIYOK__', '__NONEWSECTIONLINK__' ), - 'currentversion' => array( '1', 'MEVCUTSÜRÜM', 'CURRENTVERSION' ), - 'currenttimestamp' => array( '1', 'MEVCUTZAMANBİLGİSİ', 'CURRENTTIMESTAMP' ), + 'currentversion' => array( '1', 'MEVCUTSÜRÜM', 'GÜNCELSÜRÜM', 'CURRENTVERSION' ), + 'currenttimestamp' => array( '1', 'MEVCUTZAMANBİLGİSİ', 'GÜNCELZAMANBİLGİSİ', 'CURRENTTIMESTAMP' ), 'localtimestamp' => array( '1', 'YERELZAMANBİLGİSİ', 'LOCALTIMESTAMP' ), 'language' => array( '0', '#DİL:', '#LİSAN:', '#LANGUAGE:' ), 'contentlanguage' => array( '1', 'İÇERİKDİLİ', 'İÇERİKLİSANI', 'CONTENTLANGUAGE', 'CONTENTLANG' ), @@ -273,7 +283,7 @@ $magicWords = array( 'numberofadmins' => array( '1', 'HİZMETLİSAYISI', 'NUMBEROFADMINS' ), 'special' => array( '0', 'özel', 'special' ), 'defaultsort' => array( '1', 'VARSAYILANSIRALA:', 'VARSAYILANSIRALAMAANAHTARI:', 'VARSAYILANKATEGORİSIRALA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ), - 'filepath' => array( '0', 'DOSYA YOLU:', 'FILEPATH:' ), + 'filepath' => array( '0', 'DOSYA_YOLU:', 'FILEPATH:' ), 'tag' => array( '0', 'etiket', 'tag' ), 'hiddencat' => array( '1', '__GİZLİKAT__', '__GİZLİKATEGORİ__', '__HIDDENCAT__' ), 'pagesincategory' => array( '1', 'KATEGORİDEKİSAYFALAR', 'KATTAKİSAYFALAR', 'PAGESINCATEGORY', 'PAGESINCAT' ), @@ -286,7 +296,7 @@ $magicWords = array( 'formatdate' => array( '0', 'formattarihi', 'tarihformatı', 'formatdate', 'dateformat' ), ); -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $linkTrail = '/^([a-zÇĞçğİıÖöŞşÜüÂâÎîÛû]+)(.*)$/sDu'; $messages = array( @@ -305,8 +315,7 @@ $messages = array( 'tog-editsection' => 'Bölümleri [değiştir] bağlantıları ile değiştirebilme olanağı ver', 'tog-editsectiononrightclick' => 'Bölümleri bölüm başlığına sağ tıklayarak değiştirebilme olanağı ver (JavaScript)', 'tog-showtoc' => 'İçindekiler tablosunu göster (3 taneden fazla başlığı olan sayfalar için)', -'tog-rememberpassword' => 'Parolayı hatırla', -'tog-editwidth' => 'Yazma alanını tüm ekranı dolduracak şekilde genişlet', +'tog-rememberpassword' => 'Girişimi bu tarayıcıda hatırla (en fazla $1 {{PLURAL:$1|gün|gün}} için)', 'tog-watchcreations' => 'Oluşturmuş olduğum sayfaları izleme listeme ekle', 'tog-watchdefault' => 'Değişiklik yapılan sayfayı izleme listesine ekle', 'tog-watchmoves' => 'Taşıdığım sayfaları izleme listeme ekle', @@ -361,8 +370,8 @@ $messages = array( 'sun' => 'Paz', 'mon' => 'Pzt', 'tue' => 'Sal', -'wed' => 'Çar', -'thu' => 'Per', +'wed' => 'Çrş', +'thu' => 'Prş', 'fri' => 'Cum', 'sat' => 'Cts', 'january' => 'Ocak', @@ -403,18 +412,18 @@ $messages = array( 'dec' => 'Ara', # Categories related messages -'pagecategories' => 'Sayfa {{PLURAL:$1|kategorisi|kategorileri}}', +'pagecategories' => '{{PLURAL:$1|Kategori|Kategoriler}}', 'category_header' => '"$1" kategorisindeki sayfalar', -'subcategories' => 'Alt Kategoriler', +'subcategories' => 'Alt kategoriler', 'category-media-header' => '"$1" kategorisindeki medya', 'category-empty' => "''Bu kategoride henüz herhangi bir madde ya da medya bulunmamaktadır.''", 'hidden-categories' => '{{PLURAL:$1|Gizli kategori|Gizli kategoriler}}', 'hidden-category-category' => 'Gizli kategoriler', -'category-subcat-count' => '{{PLURAL:$2|Bu kategori sadece aşağıdaki alt kategoriyi içermektedir.|Bu kategori toplam $2 kategoriden {{PLURAL:$1|alt kategori|$1 alt kategori}}ye sahiptir}}', +'category-subcat-count' => '{{PLURAL:$2|Bu kategori sadece aşağıdaki alt kategoriyi içermektedir.|Bu kategoride aşağıdaki {{PLURAL:$1|alt kategori|$1 alt kategori}} dahil $2 alt kategori vardır.}}', 'category-subcat-count-limited' => 'Bu kategori aşağıdaki {{PLURAL:$1|alt kategoriye|$1 alt kategoriye}} sahiptir.', -'category-article-count' => '{{PLURAL:$2|Bu kategori sadece aşağıdaki sayfayı içermektedir.|Toplam $2 den, aşağıdaki {{PLURAL:$1|sayfa|$1 sayfa}} bu kategoridedir.}}', +'category-article-count' => '{{PLURAL:$2|Bu kategori sadece aşağıdaki sayfayı içermektedir.|Toplam $2 taneden, aşağıdaki {{PLURAL:$1|sayfa|$1 sayfa}} bu kategoridedir.}}', 'category-article-count-limited' => 'Aşağıdaki {{PLURAL:$1|sayfa|$1 sayfa}} mevcut kategoridedir.', -'category-file-count' => '{{PLURAL:$2|Bu kategori sadece aşağıdaki dosyayı içerir.|Toplam $2 den, aşağıdaki {{PLURAL:$1|dosya|$1 dosya}} bu kategoridedir.}}', +'category-file-count' => '{{PLURAL:$2|Bu kategori sadece aşağıdaki dosyayı içerir.|Toplam $2 taneden, aşağıdaki {{PLURAL:$1|dosya|$1 dosya}} bu kategoridedir.}}', 'category-file-count-limited' => 'Aşağıdaki {{PLURAL:$1|dosya|$1 dosya}} mevcut kategoridedir.', 'listingcontinuesabbrev' => '(devam)', 'index-category' => 'Dizinli sayfalar', @@ -436,7 +445,7 @@ $messages = array( 'mypage' => 'sayfam', 'mytalk' => 'Mesaj sayfam', 'anontalk' => "Bu IP'nin iletileri", -'navigation' => 'gezinti', +'navigation' => 'Gezinti', 'and' => ' ve', # Cologne Blue skin @@ -451,31 +460,21 @@ $messages = array( 'faqpage' => 'Project:SSS', # Vector skin -'vector-action-addsection' => 'Konu ekle', -'vector-action-delete' => 'Sil', -'vector-action-move' => 'Taşı', -'vector-action-protect' => 'Koru', -'vector-action-undelete' => 'Silinmeyi geri al', -'vector-action-unprotect' => 'Korumayı kaldır', -'vector-namespace-category' => 'Kategori', -'vector-namespace-help' => 'Yardım sayfası', -'vector-namespace-image' => 'Dosya', -'vector-namespace-main' => 'Sayfa', -'vector-namespace-media' => 'Ortam sayfası', -'vector-namespace-mediawiki' => 'İleti', -'vector-namespace-project' => 'Proje sayfası', -'vector-namespace-special' => 'Özel sayfa', -'vector-namespace-talk' => 'Tartışma', -'vector-namespace-template' => 'Şablon', -'vector-namespace-user' => 'Kullanıcı sayfası', -'vector-view-create' => 'Oluştur', -'vector-view-edit' => 'Düzenle', -'vector-view-history' => 'Geçmişi gör', -'vector-view-view' => 'Oku', -'vector-view-viewsource' => 'Kaynağı gör', -'actions' => 'Eylemler', -'namespaces' => 'İsim alanları', -'variants' => 'Türevler', +'vector-action-addsection' => 'Konu ekle', +'vector-action-delete' => 'Sil', +'vector-action-move' => 'Taşı', +'vector-action-protect' => 'Koru', +'vector-action-undelete' => 'Silinmeyi geri al', +'vector-action-unprotect' => 'Korumayı kaldır', +'vector-simplesearch-preference' => 'Gelişmiş arama önerilerini getir (Sadece Vector görünümü için)', +'vector-view-create' => 'Oluştur', +'vector-view-edit' => 'Düzenle', +'vector-view-history' => 'Geçmişi gör', +'vector-view-view' => 'Oku', +'vector-view-viewsource' => 'Kaynağı gör', +'actions' => 'Eylemler', +'namespaces' => 'Ad alanları', +'variants' => 'Türevler', 'errorpagetitle' => 'Hata', 'returnto' => '$1 sayfasına dön.', @@ -485,12 +484,12 @@ $messages = array( 'searchbutton' => 'Ara', 'go' => 'Git', 'searcharticle' => 'Git', -'history' => 'Sayfanın geçmişi', +'history' => 'Sayfa geçmişi', 'history_short' => 'Geçmiş', 'updatedmarker' => 'son ziyaretimden sonra güncellenmiş', 'info_short' => 'Bilgi', 'printableversion' => 'Yazdırılabilir sürüm', -'permalink' => 'Bu hâline bağlantı', +'permalink' => 'Kalıcı bağlantı', 'print' => 'Bastır', 'edit' => 'Düzenle', 'create' => 'Oluştur', @@ -500,7 +499,7 @@ $messages = array( 'deletethispage' => 'Bu sayfayı sil', 'undelete_short' => '$1 değişikliği geri getir', 'protect' => 'Korumaya al', -'protect_change' => 'Değiştir', +'protect_change' => 'değiştir', 'protectthispage' => 'Sayfayı koruma altına al', 'unprotect' => 'Korumayı kaldır', 'unprotectthispage' => 'Sayfa korumasını kaldır', @@ -522,13 +521,13 @@ $messages = array( 'viewhelppage' => 'Yardım sayfasına bak', 'categorypage' => 'Kategori sayfasını göster', 'viewtalkpage' => 'Tartışma sayfasına git', -'otherlanguages' => 'Diğer diller', +'otherlanguages' => 'Diğer dillerde', 'redirectedfrom' => '($1 sayfasından yönlendirildi)', 'redirectpagesub' => 'Yönlendirme sayfası', 'lastmodifiedat' => 'Bu sayfa son olarak $2, $1 tarihinde güncellenmiştir.', 'viewcount' => 'Bu sayfaya {{PLURAL:$1|bir|$1 }} defa erişilmiş.', 'protectedpage' => 'Korumalı sayfa', -'jumpto' => 'Git ve:', +'jumpto' => 'Atla:', 'jumptonavigation' => 'kullan', 'jumptosearch' => 'ara', 'view-pool-error' => 'Üzgünüz, sunucular şu anda aşırı yüklendi. @@ -536,6 +535,9 @@ Birçok kullanıcı bu sayfayı görüntülemeye çalışıyor. Lütfen bu sayfaya tekrar erişmeyi denemeden önce biraz bekleyin. $1', +'pool-timeout' => 'Kilit için zaman bitimi bekleniyor', +'pool-queuefull' => 'Havuz sırası dolu', +'pool-errorunknown' => 'Bilinmeyen hata', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} hakkında', @@ -545,7 +547,7 @@ $1', 'currentevents' => 'Güncel olaylar', 'currentevents-url' => 'Project:Güncel olaylar', 'disclaimers' => 'Sorumluluk reddi', -'disclaimerpage' => 'Project:Genel_sorumluluk_reddi', +'disclaimerpage' => 'Project:Genel sorumluluk reddi', 'edithelp' => 'Nasıl değiştirilir?', 'edithelppage' => 'Help:Sayfa nasıl değiştirilir', 'helppage' => 'Help:İçindekiler', @@ -571,7 +573,7 @@ $1', 'newmessagesdifflink' => 'son değişiklik', 'youhavenewmessagesmulti' => "$1'de yeni mesajınız var.", 'editsection' => 'düzenle', -'editold' => 'Değiştir', +'editold' => 'değiştir', 'viewsourceold' => 'kaynağı gör', 'editlink' => 'değiştir', 'viewsourcelink' => 'kaynağı gör', @@ -586,13 +588,13 @@ $1', 'feed-invalid' => 'Hatalı besleme tipi.', 'feed-unavailable' => 'Sendikalaşma özet akışları geçerli değil.', 'site-rss-feed' => '$1 RSS Aboneliği', -'site-atom-feed' => '$1 Atom Beslemesi', +'site-atom-feed' => '$1 Atom beslemesi', 'page-rss-feed' => '"$1" RSS Beslemesi', -'page-atom-feed' => '"$1" Atom Beslemesi', +'page-atom-feed' => '"$1" Atom beslemesi', 'red-link-title' => '$1 (sayfa mevcut değil)', # Short words for each namespace, by default used in the namespace tab in monobook -'nstab-main' => 'Sayfa', +'nstab-main' => 'Madde', 'nstab-user' => 'Kullanıcı sayfası', 'nstab-media' => 'Medya sayfası', 'nstab-special' => 'Özel sayfa', @@ -630,12 +632,12 @@ Veritabanının verdiği hata mesajı "$3: $4"', 'readonlytext' => 'Veritabanı olağan bakım/onarım çalışmaları sebebiyle, geçici olarak giriş ve değişiklik yapmaya kapatılmıştır. Kısa süre sonra normale dönecektir. Veritabanını kilitleyen operatörün açıklaması: $1', -'missing-article' => 'Veritabanı, bulunması istenen "$1" $2 isimli sayfaya ait metni bulamadı. +'missing-article' => 'Veritabanında bulunması istenen "$1" $2 adlı sayfaya ait metin bulunamadı. -Bu durum sayfanın, silinmiş bir sayfanın geçmiş sürümü olmasından kaynaklanabilir. +Bu durum, genellikle silinmiş bir sayfanın geçmiş bir sürümüne yönlendirilmekten kaynaklanır. -Eğer neden bu değilse, yazılımda bir hata ile karşılaşmış olabilirsiniz -Lütfen bunu bir [[Special:ListUsers/sysop|hizmetliye]], URL\'yi not ederek iletin', +Eğer neden bu değilse yazılımda bir hata ile karşılaşmış olabilirsiniz. +Lütfen URL\'yi not ederek bunu bir [[Special:ListUsers/sysop|hizmetliye]] iletin.', 'missingarticle-rev' => '(revizyon#: $1)', 'missingarticle-diff' => '(Fark: $1, $2)', 'readonly_lag' => 'Yedek sunucular ana sunucu ile güncellemeye çalışırken veritabanı otomatik olarak kilitlendi.', @@ -655,7 +657,7 @@ Lütfen bunu bir [[Special:ListUsers/sysop|hizmetliye]], URL\'yi not ederek ilet 'cannotdelete' => '"$1" sayfa ya da dosyası silinemedi. Başka bir kullanıcı tarafından silinmiş olabilir.', 'badtitle' => 'Geçersiz başlık', -'badtitletext' => 'Girilen sayfa ismi ya hatalı ya boş ya da diller arası bağlantı veya vikiler arası bağlantı içerdiğinden geçerli değil. Başlıklarda kullanılması yasak olan bir ya da daha çok karakter içeriyor olabilir.', +'badtitletext' => 'Girilen sayfa adı ya hatalı ya boş ya da diller arası bağlantı veya vikiler arası bağlantı içerdiğinden geçerli değil. Başlıklarda kullanılması yasak olan bir ya da daha çok karakter içeriyor olabilir.', 'perfcached' => 'Veriler daha önceden hazırlanmış olabilir. Bu sebeple güncel olmayabilir!', 'perfcachedts' => 'Aşağıda saklanmış bilgiler bulunmaktadır, son güncelleme tarihi: $1.', 'querypage-no-updates' => 'Şu an için güncellemeler devre dışı bırakıldı. Buradaki veri hemen yenilenmeyecektir.', @@ -694,26 +696,28 @@ Web tarayıcınızın önbelleğini temizleyene kadar bazı sayfalar sanki hala Hesabınız açıldı. [[Special:Preferences|{{SITENAME}} tercihlerinizi]] değiştirmeyi unutmayın.', -'yourname' => 'Kullanıcı adınız:', +'yourname' => 'Kullanıcı adı:', 'yourpassword' => 'Parola:', -'yourpasswordagain' => 'Parolayı yeniden yaz', -'remembermypassword' => 'Parolayı hatırla.', +'yourpasswordagain' => 'Parolayı yeniden yaz:', +'remembermypassword' => 'Girişimi bu bilgisayarda hatırla (en fazla $1 {{PLURAL:$1|gün|gün}} için)', +'securelogin-stick-https' => "Giriş yaptıktan sonra HTTPS'e bağlı kal", 'yourdomainname' => 'Alan adınız', 'externaldberror' => 'Ya doğrulama veritabanı hatası var ya da kullanıcı hesabınızı güncellemeye yetkiniz yok.', 'login' => 'Oturum aç', -'nav-login-createaccount' => 'Oturum aç ya da yeni hesap edin', +'nav-login-createaccount' => 'Oturum aç / yeni hesap oluştur', 'loginprompt' => '{{SITENAME}} sitesinde oturum açabilmek için çerezleri etkinleştirmeniz gerekmektedir.', -'userlogin' => 'Oturum aç', +'userlogin' => 'Oturum aç / hesap oluştur', 'userloginnocreate' => 'Giriş yap', 'logout' => 'Oturumu kapat', 'userlogout' => 'Oturumu kapat', 'notloggedin' => 'Oturum açık değil', -'nologin' => "Daha üye değil misiniz? '''$1'''", -'nologinlink' => 'Eğer şimdiye kadar kayıt olmadıysanız bu bağlantıyı takip edin.', -'createaccount' => 'Yeni hesap aç', -'gotaccount' => "Daha önceden kayıt oldunuz mu? '''$1'''.", -'gotaccountlink' => 'Eğer önceden hesap açtırdıysanız bu bağlantıdan giriş yapınız.', +'nologin' => "Kayıtlı değil misiniz? '''$1'''", +'nologinlink' => 'Hesap oluşturun', +'createaccount' => 'Hesap oluştur', +'gotaccount' => "Çoktan kayıt oldunuz mu? '''$1'''.", +'gotaccountlink' => 'Oturum açın', 'createaccountmail' => 'e-posta ile', +'createaccountreason' => 'Sebep:', 'badretype' => 'Girdiğiniz şifreler birbirleriyle uyuşmuyor.', 'userexists' => 'Girdiğiniz kullanıcı adı kullanımda. Lütfen farklı bir kullanıcı adı seçin.', 'loginerror' => 'Oturum açma hatası.', @@ -736,6 +740,7 @@ Yazılışı kontrol edin veya [[Special:UserLogin/signup|yeni bir hesap açın] 'wrongpasswordempty' => 'Boş parola girdiniz. Lütfen tekrar deneyiniz.', 'passwordtooshort' => 'Parolalar en az {{PLURAL:$1|1 karakter|$1 karakter}} uzunluğunda olmalı.', 'password-name-match' => 'Şifreniz kullanıcı adınızdan farklı olmalıdır.', +'password-login-forbidden' => 'Bu kullanıcı adı ve şifre kullanımı yasaklanmıştır', 'mailmypassword' => 'Bana e-posta ile yeni parola gönder', 'passwordremindertitle' => '{{SITENAME}} için yeni geçici şifre', 'passwordremindertext' => 'Birisi (muhtemelen siz, $1 IP adresinden) {{SITENAME}} ($4) için yeni bir parola gönderilmesi istedi. "$2" kullanıcısına geçici olarak "$3" parolası oluşturuldu. Eğer bu sizin isteğiniz ise, oturum açıp yeni bir parola oluşturmanız gerekmektedir. Geçici parolanızın süresi {{PLURAL:$5|1 gün|$5 gün}} içinde dolacaktır. @@ -773,6 +778,9 @@ Lütfen tekrar denemeden önce bekleyin.', 'loginlanguagelabel' => 'Dil: $1', 'suspicious-userlogout' => 'Çıkış isteğiniz reddedildi çünkü bozuk bir tarayıcı ya da önbellekli vekil tarafından gönerilmiş gibi görünüyor.', +# E-mail sending +'php-mail-error-unknown' => "PHP's mail() fonksiyonunda bilinmeyen hata", + # Password reset dialog 'resetpass' => 'Parolayı değiştir', 'resetpass_announce' => 'Size gönderilen muvakkat bir parola ile oturum açtınız. @@ -796,40 +804,42 @@ Girişi bitirmek için, burada yeni bir parola yazın:', # Edit page toolbar 'bold_sample' => 'Kalın yazı', 'bold_tip' => 'Kalın yazı', -'italic_sample' => 'İtalik yazı', -'italic_tip' => 'İtalik yazı', +'italic_sample' => 'Eğik yazı', +'italic_tip' => 'Eğik yazı', 'link_sample' => 'Bağlantı başlığı', 'link_tip' => 'İç bağlantı', 'extlink_sample' => 'http://www.example.com adres açıklaması', 'extlink_tip' => 'Dış bağlantı (Adresin önüne http:// koymayı unutmayın)', -'headline_sample' => 'Başlık yazısı', +'headline_sample' => 'Başlık metni', 'headline_tip' => '2. seviye başlık', 'math_sample' => 'Matematiksel-ifadeyi-girin', 'math_tip' => 'Matematik formülü (LaTeX formatında)', -'nowiki_sample' => 'Serbest format yazınızı buraya yazınız', -'nowiki_tip' => 'wiki formatlamasını devre dışı bırak', +'nowiki_sample' => 'Biçimlendirilmeyecek metni buraya girin', +'nowiki_tip' => 'viki formatlamasını devre dışı bırak', 'image_sample' => 'Örnek.jpg', 'image_tip' => 'Gömülü dosya', 'media_sample' => 'Örnek.ogg', -'media_tip' => 'Medya dosyasına bağlantı', -'sig_tip' => 'İmzanız ve tarih', +'media_tip' => 'Dosya bağlantısı', +'sig_tip' => 'İmzanız ve zaman', 'hr_tip' => 'Yatay çizgi (çok sık kullanmayın)', # Edit pages 'summary' => 'Özet:', 'subject' => 'Konu/başlık:', 'minoredit' => 'Küçük değişiklik', -'watchthis' => 'Sayfayı izle', +'watchthis' => 'Bu sayfayı izle', 'savearticle' => 'Sayfayı kaydet', -'preview' => 'Ön izleme', -'showpreview' => 'Ön izlemeyi göster', +'preview' => 'Önizleme', +'showpreview' => 'Önizlemeyi göster', 'showlivepreview' => 'Canlı ön izleme', 'showdiff' => 'Değişiklikleri göster', -'anoneditwarning' => 'Oturum açmadığınızdan maddenin değişiklik kayıtlarına rumuzunuz yerine IP adresiniz kaydedilecektir.', +'anoneditwarning' => "'''Uyarı:''' Oturum açmadınız. +IP adresiniz sayfanın değişiklik geçmişine kaydedilecektir.", +'anonpreviewwarning' => "''Giriş yapmadınız. Kaydederseniz, sayfanın değişiklik geçmişine IP adresiniz yazılır.''", 'missingsummary' => "'''Uyarı:''' Herhangi bir özet yazmadın. Kaydet tuşuna tekrar basarsan sayfa özetsiz kaydedilecek.", 'missingcommenttext' => 'Lütfen aşağıda bir açıklama yazınız.', -'missingcommentheader' => "'''Hatırlatıcı:''' Bu yorum için konu/başlık sunmadınız. Eğer tekrar Kaydet tuşuna basarsanız, değişikliğiniz konu/başlık olmadan kaydedilecektir.", +'missingcommentheader' => "'''Hatırlatma''' Bu yorum için bir konu/başlık sunmadınız. Eğer \"((int: savearticle))\" tuşuna tekrar basarsanız, değişikliğiniz konu/başlık olmadan kaydedilecektir.", 'summary-preview' => 'Ön izleme özeti:', 'subject-preview' => 'Konu/Başlık ön izlemesi:', 'blockedtitle' => 'Kullanıcı erişimi engellendi.', @@ -877,15 +887,17 @@ Siz sayfayı görüntülerken taşınmış veya silinmiş olabilir.', Bu yeni hesap için parola, giriş yapıldıktan sonra ''[[Special:ChangePassword|parolayı değiştir]]'' bölümünde değiştirilebilir.", 'newarticle' => '(Yeni)', -'newarticletext' => "Henüz varolmayan bir sayfaya konulmuş bir bağlantıya tıkladınız. Bu sayfayı oluşturmak için aşağıdaki metin kutusunu kullanınız. Bilgi için [[{{MediaWiki:Helppage}}|yardım sayfasına]] bakınız. Buraya yanlışlıkla geldiyseniz, programınızın '''Geri''' tuşuna tıklayınız.", +'newarticletext' => "Henüz varolmayan bir sayfaya konulmuş bir bağlantıya tıkladınız. +Sayfayı oluşturmak için aşağıdaki metin kutusunu kullanın. ([[{{MediaWiki:Helppage}}|yardım sayfasına]] bakınız). +Buraya yanlışlıkla geldiyseniz tarayıcınızın '''geri''' tuşuna tıklayın.", 'anontalkpagetext' => "----''Bu sayfa henüz bir kullanıcı hesabı oluşturmamış veya hesabını kullanmayan bir anonim kullanıcının ileti sayfasıdır. Bu nedenle bu kişiyi belirtmek için rakamsal IP adresini kullanmak zorundayız. Bu gibi IP adresleri birçok kullanıcı tarafından paylaşılabilir. Eğer siz de bir anonim kullanıcıysanız ve size sizin ilginiz olmayan iletiler geliyorsa, lütfen diğer anonim kullanıcılarla olabilecek olan karmaşayı önlemek için [[Special:UserLogin/signup|bir hesap edinin]] veya [[Special:UserLogin|oturum açın]].''", 'noarticletext' => 'Bu sayfa şu anda boştur. -Bu başlığı diğer sayfalarda [[Special:Search/{{PAGENAME}}|arayabilir]], -[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili günlükleri arayabilir], +Bu başlığı [[Special:Search/{{PAGENAME}}|diğer sayfalarda arayabilir]], +[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili kayıtları arayabilir], ya da bu sayfayı [{{fullurl:{{FULLPAGENAME}}|action=edit}} değiştirebilirsiniz].', 'noarticletext-nopermission' => 'Bu sayfa şu anda boştur. Bu başlığı [[Special:Search/{{PAGENAME}}|diğer sayfalarda arayabilir]] -ya da [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili günlükleri tarayabilirsiniz].', +ya da [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili kayıtları tarayabilirsiniz].', 'userpage-userdoesnotexist' => '"$1" kullanıcı hesabı kayıtlı değil. Bu sayfayı oluşturmak/değiştirmek istiyorsanız lütfen kontrol edin.', 'userpage-userdoesnotexist-view' => '"$1" kullanıcı hesabı kayıtlı değil.', 'blocked-notice-logextract' => 'Bu kullanıcı şuanda engellenmiş. @@ -895,7 +907,11 @@ Son engelleme günlüğü girdisi referans için aşağıda sağlanmıştır:', 'userjsyoucanpreview' => "'''İpucu:''' Kaydetmeden önce \"{{int:showpreview}}\"e tıklayarak yeni JavaScript'inizi test edin.", 'usercsspreview' => "'''Sadece kullanıcı CSS dosyanızın önizlemesini görüyorsun.''' '''Kullanıcı CSS dosyası henüz kaydolmadı!'''", 'userjspreview' => "'''Sadece test ediyorsun ya da önizleme görüyorsun - kullanıcı JavaScript'i henüz kaydolmadı.'''", -'userinvalidcssjstitle' => "''Uyarı:''' \"\$1\" adıyla bir tema yoktur. tema-adı.css ve .js dosyalarının adları küçük harf ile yazması gerek, yani {{ns:user}}:Temel/'''M'''onobook.css değil, {{ns:user}}:Temel/'''m'''onobook.css.", +'sitecsspreview' => "'''Sadece kullanıcı CSS dosyanızın önizlemesini görüyorsunuz.''' +'''Henüz kaydedilmedi!'''", +'sitejspreview' => "'''Sadece kullanıcı JavaScript kod dosyanızın önizlemesini görüyorsunuz.''' +'''Henüz kaydedilmedi!'''", +'userinvalidcssjstitle' => "''Uyarı:''' \"\$1\" adıyla bir tema yoktur. tema-adı.css ve .js dosyalarının adları küçük harf ile yazması gerek, yani {{ns:user}}:Temel/'''V'''ector.css değil, {{ns:user}}:Temel/'''v'''ector.css.", 'updated' => '(Güncellendi)', 'note' => "'''Not: '''", 'previewnote' => "'''Bu yalnızca bir önizlemedir, ve değişiklikleriniz henüz kaydedilmemiştir!'''", @@ -931,7 +947,6 @@ Ayrıca, buraya katkıda bulunarak, bu katkının kendiniz tarafından yazıldı '''
    TELİF HAKKI İLE KORUNAN HİÇBİR ÇALIŞMAYI BURAYA EKLEMEYİNİZ!
    '''", 'copyrightwarning2' => 'Lütfen, {{SITENAME}} sitesine bulunacağınız tüm katkıların diğer üyeler tarafından düzenlenebileceğini, değiştirilebileceğini ya da silinebileceğini hatırlayın. Yazılarınızın merhametsizce değiştirilebilmesine rıza göstermiyorsanız buraya katkıda bulunmayın.
    Ayrıca bu ekleyeceğiniz yazıyı sizin yazdığınızı ya da serbest kopyalama izni veren bir kaynaktan kopyaladığınızı bize taahhüt etmektesiniz (ayrıntılar için referans: $1).', -'longpagewarning' => "'''UYARI: Bu sayfa $1 kilobayt büyüklüğündedir; bazı tarayıcılar değişiklik yaparken 32 kb ve üstü büyüklüklerde sorunlar yaşayabilir. Sayfayı bölümlere ayırmaya çalışın.'''", 'longpageerror' => "'''HATA: Girdiğiniz metnin uzunluğu $1 kilobayt, ve en fazla uzunluktan $2 kilobayt daha fazladır. Kaydedilmesi mümkün değildir.'''", 'readonlywarning' => "'''DİKKAT: Bakım nedeni ile veritabanı şu anda kilitlidir. Bu sebeple değişiklikleriniz şu anda kaydedilememektedir. Yazdıklarınızı başka bir editöre alıp saklayabilir ve daha sonra tekrar buraya getirip kaydedebilirsiniz''' @@ -947,8 +962,8 @@ Son günlük girdisi referans amaçlı aşağıda verilmiştir:", 'templatesused' => 'Bu sayfada kullanılan {{PLURAL:$1|şablon|şablonlar}}:', 'templatesusedpreview' => 'Bu önizlemede kullanılan {{PLURAL:$1|şablon|şablonlar}}:', 'templatesusedsection' => 'Bu bölümde kullanılan {{PLURAL:$1|şablon|şablonlar}}:', -'template-protected' => '(koruma)', -'template-semiprotected' => '(yarı-koruma)', +'template-protected' => '(korumada)', +'template-semiprotected' => '(yarı-korumada)', 'hiddencategories' => 'Bu sayfa {{PLURAL:$1|1 gizli kategoriye|$1 gizli kategoriye}} mensuptur:', 'nocreatetitle' => 'Sayfa oluşturulması sınırlandı', 'nocreatetext' => '{{SITENAME}}, yeni sayfa oluşturulabilmesini engelledi. @@ -962,9 +977,9 @@ Geri giderek varolan sayfayı değiştirebilirsiniz ya da kayıtlı iseniz [[Spe 'recreate-moveddeleted-warn' => "'''Uyarı: Daha önceden silinmiş bir sayfayı tekrar oluşturuyorsunuz.''' Sayfayı değiştirmeye devam etmenin uygun olup olmadığını düşünmelisiniz. -Sayfanın silme ve taşıma günlüğü uygunluk için burada verilmiştir:", +Sayfanın silme ve taşıma kaydı kolaylık için burada verilmiştir:", 'moveddeleted-notice' => 'Bu sayfa silinmiş. -Sayfanın silme ve taşıma günlüğü referans için aşağıda verilmiştir.', +Sayfanın silme ve taşıma kaydı referans için aşağıda verilmiştir.', 'log-fulllog' => 'Tam günlüğü gör', 'edit-hook-aborted' => 'Değişiklik çengelle durduruldu. Bir açıklama verilmedi.', @@ -980,11 +995,11 @@ Sayfa zaten mevcut.', Bu $2 çağrıdan az olmalı, şu anda {{PLURAL:$1|1 çağrı var|$1 çağrı var}}.', 'expensive-parserfunction-category' => 'Çok fazla zengin derleyici fonksiyonu çağrısına sahip sayfalar', -'post-expand-template-inclusion-warning' => 'Uyarı: Katılan şablon içeriği çok geniş. -Bazı şablonlar sayfaya katılmayacak.', -'post-expand-template-inclusion-category' => 'Şablon içerik genişliği sınırı aşılan sayfalar', -'post-expand-template-argument-warning' => 'Uyarı: Bu sayfa çok fazla genişleme boyutuna sahip bir şablon değişkeninden en az bir tane içeriyor. -Bu değişkenler atlandı.', +'post-expand-template-inclusion-warning' => "'''Uyarı''': Şablon içeriği çok büyük. +Bazı şablonlar eklenemeyecek.", +'post-expand-template-inclusion-category' => 'Şablon içerme büyüklüğü sınırı aşılan sayfalar', +'post-expand-template-argument-warning' => "'''Uyarı:''' Bu sayfa çok fazla genişleme boyutuna sahip en az bir şablon değişkeni içeriyor. +Bu değişkenler atlandı.", 'post-expand-template-argument-category' => 'Geçersiz şablon değiştirgenleri içeren sayfalar', 'parser-template-loop-warning' => 'Şablon düğümü tespit edildi: [[$1]]', 'parser-template-recursion-depth-warning' => 'Şablon özyineleme yoğunluğu sınırı aşıldı ($1)', @@ -1006,10 +1021,10 @@ $3 tarafından verilen sebep ''$2''", 'viewpagelogs' => 'Bu sayfa ile ilgili kayıtları göster', 'nohistory' => 'Bu sayfanın geçmiş sürümü yok.', 'currentrev' => 'Güncel sürüm', -'currentrev-asof' => '$1 itibarı ile sayfanın şu anki hâli.', -'revisionasof' => 'Sayfanın $1 tarihindeki hâli', +'currentrev-asof' => '$1 itibarı ile sayfanın şu anki hâli', +'revisionasof' => '$1 tarihindeki hâli', 'revision-info' => '$2 tarafından oluşturulmuş $1 tarihli sürüm', -'previousrevision' => '← Önceki hali', +'previousrevision' => '← Önceki hâli', 'nextrevision' => 'Sonraki hali →', 'currentrevisionlink' => 'en güncel halini göster', 'cur' => 'fark', @@ -1017,9 +1032,8 @@ $3 tarafından verilen sebep ''$2''", 'last' => 'son', 'page_first' => 'ilk', 'page_last' => 'son', -'histlegend' => "Fark seçimi: karşılaştırmayı istediğiniz 2 sürümün önündeki dairelere tıklayıp, enter'a basın ya da sayfanın en altında bulunan düğmeye basın.
    -Tanımlar: '''({{int:cur}})''' = güncel sürümle aradaki fark, -'''({{int:last}})''' = bir önceki sürümle aradaki fark, '''{{int:minoreditletter}}''' = küçük değişiklik.", +'histlegend' => "Fark seçimi: karşılaştırmayı istediğiniz 2 sürümün önündeki daireleri işaretleyip, enter'a ya da sayfanın en altında bulunan düğmeye basın.
    +Tanımlar: '''({{int:cur}})''' = güncel sürümle aradaki fark, '''({{int:last}})''' = bir önceki sürümle aradaki fark, '''{{int:minoreditletter}}''' = küçük değişiklik.", 'history-fieldset-title' => 'Geçmişe gözat', 'history-show-deleted' => 'Sadece silinenler', 'histfirst' => 'En eski', @@ -1107,7 +1121,9 @@ $1", 'logdelete-success' => "'''Günlük görünürlüğü başarıyla ayarlandı.'''", 'logdelete-failure' => "'''Günlük görünürlüğü ayarlanamadı:''' $1", -'revdel-restore' => 'Görünürlüğü değiştir', +'revdel-restore' => 'görünürlüğü değiştir', +'revdel-restore-deleted' => 'silinmiş revizyonlar', +'revdel-restore-visible' => 'görünür revizyonlar', 'pagehist' => 'Sayfa geçmişi', 'deletedhist' => 'Silinmiş geçmiş', 'revdelete-content' => 'içerik', @@ -1177,11 +1193,13 @@ Gezinti bağlantılarının bu sütunu sıfırlayacağını unutmayın.', # Diffs 'history-title' => '"$1" sayfasının geçmişi', 'difference' => '(Sürümler arası farklar)', +'difference-multipage' => '(Sayfalar arasındaki fark)', 'lineno' => '$1. satır:', 'compareselectedversions' => 'Seçilen sürümleri karşılaştır', 'showhideselectedversions' => 'Seçili sürümleri göster/gizle', 'editundo' => 'geri al', -'diff-multi' => '(Gösterilmeyen {{PLURAL:$1|$1 ara değişiklik|$1 ara değişiklik}} bulunmaktadır.)', +'diff-multi' => '({{PLURAL:$2|Bir kullanıcı|$2 kullanıcı}} tarafından yapılan {{PLURAL:$1|bir ara revizyon|$1 ara revizyon}} gösterilmiyor)', +'diff-multi-manyusers' => '($2 kullancıdan fazla {{PLURAL:$2|kullanıcı|kullanıcı}} tarafından yapılan {{PLURAL:$1|bir ara revizyon|$1 ara revizyon}} gösterilmiyor)', # Search results 'searchresults' => 'Arama sonuçları', @@ -1212,13 +1230,14 @@ Gezinti bağlantılarının bu sütunu sıfırlayacağını unutmayın.', 'searchprofile-advanced' => 'Gelişmiş', 'searchprofile-articles-tooltip' => '$1 içinde ara', 'searchprofile-project-tooltip' => '$1 içinde ara', -'searchprofile-images-tooltip' => 'Dosyalar için ara', -'searchprofile-everything-tooltip' => 'Tüm içeriği ara (tartışma sayfaları dahil)', +'searchprofile-images-tooltip' => 'Dosya ara', +'searchprofile-everything-tooltip' => 'Tüm içerikte ara (tartışma sayfaları dahil)', 'searchprofile-advanced-tooltip' => 'Özel ad alanlarında ara', 'search-result-size' => '$1 ({{PLURAL:$2|1 kelime|$2 kelime}})', +'search-result-category-size' => '{{PLURAL:$1|1 üye|$1 üye}} ({{PLURAL:$2|1 altkategori|$2 altkategori}}, {{PLURAL:$3|1 dosya|$3 dosya}})', 'search-result-score' => 'Uygunluk: $1%', -'search-redirect' => '(yönlendirme $1)', -'search-section' => '(bölüm $1)', +'search-redirect' => '($1 sayfasından yönlendirme)', +'search-section' => '($1 bölümü)', 'search-suggest' => 'Bunu mu demek istediniz: $1', 'search-interwiki-caption' => 'Kardeş projeler', 'search-interwiki-default' => '$1 sonuçlar:', @@ -1291,6 +1310,7 @@ Aramanızın başına '''all:''' önekini ekleyerek tüm içeriği aramayı (tar 'contextlines' => 'Bulunan madde için ayrılan satır sayısı', 'contextchars' => 'Satırdaki karakter sayısı', 'stub-threshold' => 'Taslak bağlantısı formatı için baraj (bayt):', +'stub-threshold-disabled' => 'Devre dışı', 'recentchangesdays' => 'Son değişikliklerde gösterilecek günler:', 'recentchangesdays-max' => '(en fazla $1 {{PLURAL:$1|gün|gün}})', 'recentchangescount' => 'Varsayılan olarak gösterilecek değişiklik sayısı:', @@ -1324,15 +1344,16 @@ Kullanabileceğiniz rastgele-üretilmiş bir değer: $1', 'prefs-files' => 'Dosyalar', 'prefs-custom-css' => 'Özel CSS', 'prefs-custom-js' => 'Özel JS', +'prefs-common-css-js' => 'Tüm kaplamalar için paylaşılan CSS/JS:', 'prefs-reset-intro' => 'Bu sayfayı tercihlerinizi site varsayılanına döndürmek için kullanabilirsiniz. Bu geri alınamaz.', 'prefs-emailconfirm-label' => 'E-posta doğrulaması:', 'prefs-textboxsize' => 'Değiştirme penceresinin boyutu', -'youremail' => 'E-posta adresiniz*', +'youremail' => 'E-posta:', 'username' => 'Kullanıcı adı:', 'uid' => 'Kayıt numarası:', 'prefs-memberingroups' => '{{PLURAL:$1|grup|grup}} üyesi:', 'prefs-registration' => 'Kayıt zamanı:', -'yourrealname' => 'Gerçek isminiz:', +'yourrealname' => 'Gerçek adınız:', 'yourlanguage' => 'Dil:', 'yourvariant' => 'Sizce:', 'yournick' => 'İmzalarda gözükmesini istediğiniz isim', @@ -1360,9 +1381,15 @@ Aynı zamanda diğer kullanıcıların kullanıcı ve kullanıcı mesaj sayfalar 'prefs-advancedrendering' => 'Gelişmiş seçenekler', 'prefs-advancedsearchoptions' => 'Gelişmiş seçenekler', 'prefs-advancedwatchlist' => 'Gelişmiş seçenekler', -'prefs-display' => 'Görüntü seçenekleri', +'prefs-displayrc' => 'Görüntü seçenekleri', +'prefs-displaysearchoptions' => 'Görüntüleme seçenekleri', +'prefs-displaywatchlist' => 'Görüntüleme seçenekleri', 'prefs-diffs' => 'Farklar', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'E-posta adresi geçerli görünüyor', +'email-address-validity-invalid' => 'Geçerli bir e-posta adresi girin', + # User rights 'userrights' => 'Kullanıcı hakları yönetimi', 'userrights-lookup-user' => 'Kullanıcı gruplarını düzenle', @@ -1446,6 +1473,7 @@ Aynı zamanda diğer kullanıcıların kullanıcı ve kullanıcı mesaj sayfalar 'right-hideuser' => 'Bir kullanıcı adını engelle, genelden gizleyerek', 'right-ipblock-exempt' => 'IP engellemelerini atla, otomatik engelle ve aralık engellemeleri', 'right-proxyunbannable' => 'Proxylerin otomatik engellemelerini atla', +'right-unblockself' => 'Kendi engellemesini kaldır', 'right-protect' => 'Koruma seviyelerini değiştir ve korumalı sayfalarda değişiklik yap', 'right-editprotected' => 'Korumalı sayfalarda değişiklik yap (korumayı basamaklamadan)', 'right-editinterface' => 'Kullanıcı arayüzünü değiştirmek', @@ -1468,7 +1496,6 @@ Aynı zamanda diğer kullanıcıların kullanıcı ve kullanıcı mesaj sayfalar 'right-siteadmin' => 'Veritabanını kilitle ve kilidi aç', 'right-reset-passwords' => 'Diğer kullanıcıların parolalarını sıfırla', 'right-override-export-depth' => "Sayfaları, derinlik 5'e kadar bağlantılı sayfalarla beraber, dışa aktar", -'right-versiondetail' => 'Genişletilmiş yazılım sürüm bilgilerini göster', 'right-sendemail' => 'Diğer kullanıcılara e-posta gönder', # User rights log @@ -1518,31 +1545,26 @@ Aynı zamanda diğer kullanıcıların kullanıcı ve kullanıcı mesaj sayfalar 'recentchanges' => 'Son değişiklikler', 'recentchanges-legend' => 'Son değişiklikler seçenekleri', 'recentchangestext' => 'Yapılan en son değişiklikleri bu sayfadan izleyin.', -'recentchanges-feed-description' => "Bu beslemedeki viki'de yapılan en son değişiklikleri takip edin.", -'recentchanges-label-legend' => 'Açıklamalar: $1.', -'recentchanges-legend-newpage' => '$1 - yeni sayfa', +'recentchanges-feed-description' => "Bu beslemede, viki'de yapılan en son değişiklikleri takip edin.", 'recentchanges-label-newpage' => 'Bu değişiklik yeni bir sayfa oluşturdu', -'recentchanges-legend-minor' => '$1 - küçük değişiklik', 'recentchanges-label-minor' => 'Bu küçük bir değişiklik', -'recentchanges-legend-bot' => '$1 - bot değişikliği', 'recentchanges-label-bot' => 'Bu değişiklik bir bot tarafından yapıldı', -'recentchanges-legend-unpatrolled' => '$1 - gözlenmemiş değişiklik', 'recentchanges-label-unpatrolled' => 'Bu değişiklik henüz gözlenmemiş', 'rcnote' => "$4 tarihi ve saat $5 itibarı ile, son {{PLURAL:$2|1 günde|'''$2''' günde}} yapılan, {{PLURAL:$1|'''1''' değişiklik|'''$1''' değişiklik}}, aşağıdadır.", -'rcnotefrom' => '$2 tarihinden itibaren yapılan değişiklikler aşağıdadır (en fazla $1 adet madde gösterilmektedir).', -'rclistfrom' => '$1 tarihinden beri yapılan değişiklikleri göster', -'rcshowhideminor' => 'küçük değişiklikleri $1', +'rcnotefrom' => "'''$2''' tarihinden itibaren yapılan değişiklikler aşağıdadır (en fazla $1 tanesi gösterilmektedir).", +'rclistfrom' => '$1 tarihinden itibaren yeni değişiklikleri göster', +'rcshowhideminor' => 'Küçük değişiklikleri $1', 'rcshowhidebots' => 'botları $1', -'rcshowhideliu' => 'kayıtlı kullanıcıları $1', -'rcshowhideanons' => 'anonim kullanıcıları $1', -'rcshowhidepatr' => 'izlenmiş değişiklikleri $1', -'rcshowhidemine' => 'değişikliklerimi $1', +'rcshowhideliu' => 'Kayıtlı kullanıcıları $1', +'rcshowhideanons' => 'Anonim kullanıcıları $1', +'rcshowhidepatr' => 'İzlenmiş değişiklikleri $1', +'rcshowhidemine' => 'Değişikliklerimi $1', 'rclinks' => 'Son $2 günde yapılan son $1 değişikliği göster;
    $3', 'diff' => 'fark', 'hist' => 'geçmiş', 'hide' => 'gizle', 'show' => 'göster', -'minoreditletter' => 'K', +'minoreditletter' => 'k', 'newpageletter' => 'Y', 'boteditletter' => 'b', 'number_of_watching_users_pageview' => '[$1 izlenilen {{PLURAL:$1|kullanıcı|kullanıcı}}]', @@ -1557,11 +1579,11 @@ Aynı zamanda diğer kullanıcıların kullanıcı ve kullanıcı mesaj sayfalar 'recentchangeslinked-feed' => 'İlgili değişiklikler', 'recentchangeslinked-toolbox' => 'İlgili değişiklikler', 'recentchangeslinked-title' => '"$1" ile ilişkili değişiklikler', -'recentchangeslinked-noresult' => 'Verilen süre içerisinde belirtilen sayfaya bağlı diğer sayfalarda değişiklik bulunmamaktadır.', +'recentchangeslinked-noresult' => 'Verilen dönemde bağlantılı sayfalarda değişiklik yok.', 'recentchangeslinked-summary' => "Aşağıdaki liste, belirtilen sayfaya (ya da belirtilen kategorinin üyelerine) bağlantı veren sayfalarda yapılan son değişikliklerin listesidir. -[[Special:Watchlist|İzleme listenizdeki]] sayfalar '''kalın''' yazıyla belirtilmiştir.", +[[Special:Watchlist|İzleme listenizdeki]] sayfalar '''kalın''' olarak belirtilmiştir.", 'recentchangeslinked-page' => 'Sayfa adı:', -'recentchangeslinked-to' => 'Verilen sayfa yerine verilen sayfaya bağlantı vermiş olan sayfaları göster', +'recentchangeslinked-to' => 'Belirtilen sayfadan verilenler yerine, sayfaya verilen bağlantıları göster.', # Upload 'upload' => 'Dosya yükle', @@ -1573,6 +1595,9 @@ Aynı zamanda diğer kullanıcıların kullanıcı ve kullanıcı mesaj sayfalar 'upload_directory_missing' => 'Yükleme dizini ($1) kayıp ve websunucusu tarafından oluşturulamıyor.', 'upload_directory_read_only' => 'Dosya yükleme dizinine ($1) web sunucusunun yazma izni yok.', 'uploaderror' => 'Yükleme hatası', +'upload-recreate-warning' => "'''Uyarı: Bu adı taşıyan bir dosya silindi veya taşındı.''' + +Bu sayfanın silme ve taşıma günlüğü kolaylık için burada sağlanmıştır:", 'uploadtext' => "Dosya yüklemek için aşağıdaki formu kullanın. Önceden yüklenmiş dosyaları görmek ya da aramak için [[Special:FileList|yüklenmiş dosyalar listesine]] bakın, (tekrar) yüklenenler [[Special:Log/upload|yükleme günlüğü]]nde, silinenler [[Special:Log/delete|silinme günlüğü]]nde tutulumaktadır. @@ -1584,10 +1609,10 @@ Bir sayfaya dosya koymak için bağlantınızda aşağıdaki formlardan birini k 'upload-preferred' => 'Tercih edilen dosya türleri: $1.', 'upload-prohibited' => 'Yasaklanan dosya türleri: $1.', 'uploadlog' => 'yükleme kaydı', -'uploadlogpage' => 'Dosya yükleme kayıtları', +'uploadlogpage' => 'Dosya yükleme kaydı', 'uploadlogpagetext' => 'Aşağıda en son eklenen [[Special:NewFiles|dosyaların bir listesi]] bulunmaktadır.', 'filename' => 'Dosya adı', -'filedesc' => 'Dosya ile ilgili açıklama', +'filedesc' => 'Açıklama', 'fileuploadsummary' => 'Özet:', 'filereuploadsummary' => 'Dosya değişiklikleri:', 'filestatus' => 'Telif hakkı durumu:', @@ -1604,6 +1629,17 @@ Bir sayfaya dosya koymak için bağlantınızda aşağıdaki formlardan birini k 'filetype-unwanted-type' => "'''\".\$1\"''' istenmeyen bir dosya türüdür. Önerilen {{PLURAL:\$3|dosya türü|dosya türleri}} \$2.", 'filetype-banned-type' => "'''\".\$1\"''' izin verilen bir dosya türü değil. İzin verilen {{PLURAL:\$3|dosya türü|dosya türleri}} \$2.", 'filetype-missing' => 'Dosyanın hiçbir uzantısı yok (".jpg" gibi).', +'empty-file' => 'Gönderdiğiniz dosya boştu.', +'file-too-large' => 'Gönderdiğiniz dosya çok büyük.', +'filename-tooshort' => 'Dosya adı çok kısa.', +'filetype-banned' => 'Bu tür dosyalar yasaklanmıştır.', +'verification-error' => 'Bu dosya, dosya doğrulamasını geçemedi.', +'hookaborted' => 'Yapmaya çalıştığınız değişiklik bir uzantı çengeliyle iptal edildi.', +'illegal-filename' => 'Dosya adına izin verilmiyor.', +'overwrite' => 'Varolan dosyanın üzerine yazmaya izin verilmiyor.', +'unknown-error' => 'Bilinmeyen bir hata oluştu.', +'tmp-create-error' => 'Geçici dosya oluşturulamadı.', +'tmp-write-error' => 'Geçici dosya yazılırken hata.', 'large-file' => 'Dosyaların $1 boyutundan daha büyük olmaması önerilmektedir; bu dosyanın boyutu $2.', 'largefileserver' => 'Bu dosyanın uzunluğu sunucuda izin verilenden daha büyüktür.', @@ -1631,13 +1667,14 @@ Dosyanızı yinede yüklemek istiyorsanız, lütfen geri dönüp yeni bir isim k Dosyanızı yinede yüklemek istiyorsanız, lütfen geri gidip yeni bir isim kullanın. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Bu dosya aşağıdaki {{PLURAL:$1|dosyanın|dosyaların}} kopyasıdır:', 'file-deleted-duplicate' => 'Bu dosyanın özdeşi olan başka bir dosya ([[:$1]]) daha önceden silindi. Bu dosyayı yeniden yüklemeden önce diğer dosyanın silme kayıtlarını kontrol etmelisiniz.', -'successfulupload' => 'Yükleme başarılı', 'uploadwarning' => 'Yükleme uyarısı', 'uploadwarning-text' => 'Lütfen aşağıdaki dosya açıklamasını değiştirin ve tekrar deneyin.', 'savefile' => 'Dosyayı kaydet', 'uploadedimage' => 'Yüklenen: "[[$1]]"', 'overwroteimage' => '"[[$1]]" resminin yeni sürümü yüklenmiştir', 'uploaddisabled' => 'Geçici olarak şu anda herhangi bir dosya yüklenmez. Biraz sonra bir daha deneyiniz.', +'copyuploaddisabled' => 'URL ile yükleme devre dışı.', +'uploadfromurl-queued' => 'Yüklemeniz sıraya alınmıştır.', 'uploaddisabledtext' => 'Dosya yüklemeleri devredışı bırakılmıştır.', 'php-uploaddisabledtext' => 'PHP dosyası yüklemeleri devre dışıdır. Lütfen file_uploads ayarını kontrol edin.', 'uploadscripted' => 'Bu dosya bir internet tarayıcısı tarafından hatalı çevrilebilecek bir HTML veya script kodu içermektedir.', @@ -1671,6 +1708,14 @@ JD # Jenoptik MGP # Pentax PICT # misc. #
    ', +'upload-success-subj' => 'Yükleme başarılı', +'upload-success-msg' => '[$2] yüklemeniz başarılı oldu. Yüklemeniz burada mevcut: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Yükleme sorunu', +'upload-failure-msg' => '[$2] adresinden yapılan yüklemenizle ilgili bir sorun var: + +$1', +'upload-warning-subj' => 'Yükleme uyarısı', +'upload-warning-msg' => '[$2] yüklemenizde bir sorun oluştu. Sorunu düzeltmek için [[Special:Upload/stash/$1|yükleme formuna]] geri dönebilirsiniz.', 'upload-proto-error' => 'Hatalı protokol', 'upload-proto-error-text' => "Uzaktan yükleme, http:// veya ftp:// ile başlayan URL'ler gerektirmektedir.", @@ -1736,6 +1781,7 @@ Bir sütünun başlığına tıklayarak sıralamayı değiştirebilirsiniz.', 'listfiles_search_for' => 'Medya adı ara:', 'imgfile' => 'dosya', 'listfiles' => 'Dosya listesi', +'listfiles_thumb' => 'Küçük resim', 'listfiles_date' => 'Tarih', 'listfiles_name' => 'Ad', 'listfiles_user' => 'Kullanıcı', @@ -1746,14 +1792,14 @@ Bir sütünun başlığına tıklayarak sıralamayı değiştirebilirsiniz.', # File description page 'file-anchor-link' => 'Dosya', 'filehist' => 'Dosya geçmişi', -'filehist-help' => 'Dosyanın geçmişini görebilmek için Gün/Zaman bölümündeki tarihleri tıklayınız.', +'filehist-help' => 'Dosyanın herhangi bir zamandaki hâli için ilgili tarih/saat kısmına tıklayın.', 'filehist-deleteall' => 'Hepsini sil', 'filehist-deleteone' => 'sil', 'filehist-revert' => 'geri al', -'filehist-current' => 'Şimdiki', -'filehist-datetime' => 'Gün/Zaman', +'filehist-current' => 'şimdiki', +'filehist-datetime' => 'Tarih/Saat', 'filehist-thumb' => 'Küçük resim', -'filehist-thumbtext' => '$1 tarihindeki sürümün küçültülmüş hali', +'filehist-thumbtext' => '$1 tarihindeki sürümün küçültülmüş hâli', 'filehist-nothumb' => 'Küçük resim yok', 'filehist-user' => 'Kullanıcı', 'filehist-dimensions' => 'Boyutlar', @@ -1765,13 +1811,14 @@ Bir sütünun başlığına tıklayarak sıralamayı değiştirebilirsiniz.', 'linkstoimage-more' => "$1'den fazla {{PLURAL:$1|sayfa|sayfa}} bu dosyaya bağlantı veriyor. Sıradaki liste sadece bu dosyaya bağlantı veren {{PLURAL:$1|ilk dosyayı|ilk $1 dosyayı}} gösteriyor. [[Special:WhatLinksHere/$2|Tam bir liste]] mevcuttur.", -'nolinkstoimage' => 'Bu görüntü dosyasına bağlanan sayfa yok.', +'nolinkstoimage' => 'Bu dosyaya bağlantı veren bir sayfa yok.', 'morelinkstoimage' => 'Bu dosyaya [[Special:WhatLinksHere/$1|daha fazla bağlantıları]] gör.', 'redirectstofile' => 'Şu {{PLURAL:$1|dosya|$1 dosya}}, bu dosyaya yönlendiriyor:', 'duplicatesoffile' => 'Şu {{PLURAL:$1|dosya|$1 dosya}}, bu dosyanın kopyası ([[Special:FileDuplicateSearch/$2|daha fazla ayrıntı]]):', 'sharedupload' => 'Bu dosya $1 deposundan ve diğer projelerde kullanılıyor olabilir.', 'sharedupload-desc-there' => 'Bu dosya $1 deposundan ve diğer projeler tarafından kullanılıyor olabilir. Daha fazla bilgi için lütfen [$2 dosya açıklama sayfasına] bakın.', -'sharedupload-desc-here' => 'Bu dosya $1 deposundan ve diğer projeler tarafından kullanılıyor olabilir. [$2 Dosya açıklama sayfasındaki] açıklama aşağıda gösteriliyor.', +'sharedupload-desc-here' => 'Bu dosya $1 deposundan ve diğer projeler tarafından kullanılıyor olabilir. +Aşağıda [$2 dosya açıklama sayfasındaki] açıklama gösteriliyor.', 'filepage-nofile' => 'Bu isimde bir dosya yok.', 'filepage-nofile-link' => 'Bu isimde bir dosya yok, ama siz [$1 yükleyebilirsiniz].', 'uploadnewversion-linktext' => 'Dosyanın yenisini yükleyin', @@ -1846,8 +1893,8 @@ Sıradaki liste sadece bu dosyaya bağlantı veren {{PLURAL:$1|ilk dosyayı|ilk 'statistics-edits' => '{{SITENAME}} kurulduğundan beri yapılan sayfa değişiklikleri', 'statistics-edits-average' => 'Her sayfadaki ortalama değişiklik', 'statistics-views-total' => 'Toplam görüntüleme', +'statistics-views-total-desc' => 'Varolmayan ve özel sayfaların görüntülenmeleri dahil edilmemiştir.', 'statistics-views-peredit' => 'Değişiklik başına görüntüleme', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue İş sırası] uzunluğu', 'statistics-users' => 'Kayıtlı [[Special:ListUsers|kullanıcılar]]', 'statistics-users-active' => 'Aktif kullanıcılar', 'statistics-users-active-desc' => 'Son {{PLURAL:$1|gün|$1 günde}} çalışma yapan kullanıcılar', @@ -1860,7 +1907,7 @@ Sıradaki liste sadece bu dosyaya bağlantı veren {{PLURAL:$1|ilk dosyayı|ilk 'doubleredirects' => 'Çift yönlendirmeler', 'doubleredirectstext' => 'Bu sayfa diğer yönlendirme sayfalarına yönlendirme yapan sayfaları listeler. Her satırın içerdiği bağlantılar; birinci ve ikinci yönlendirme, ayrıca ikinci yönlendirmenin hedefi, ki bu genelde birinci yönlendirmenin göstermesi gereken "gerçek" hedef sayfasıdır. -Üstü çizili girdiler çözülmüştür.', +Üstü çizili girdiler çözülmüştür.', 'double-redirect-fixed-move' => '[[$1]] taşındı, artık [[$2]] sayfasına yönlendiriyor', 'double-redirect-fixer' => 'Yönlendirme tamircisi', @@ -1880,9 +1927,11 @@ Her satırın içerdiği bağlantılar; birinci ve ikinci yönlendirme, ayrıca 'nbytes' => '$1 {{PLURAL:$1|bayt|bayt}}', 'ncategories' => '{{PLURAL:$1|kategori|kategoriler}}', 'nlinks' => '$1 {{PLURAL:$1|bağlantı|bağlantılar}}', -'nmembers' => '{{PLURAL:$1|üye|üyeler}}', +'nmembers' => '{{PLURAL:$1|üye|üye}}', 'nrevisions' => '{{PLURAL:$1|değişiklik|değişiklikler}}', 'nviews' => '$1 {{PLURAL:$1|görünüm|görünüm}}', +'nimagelinks' => '$1 {{PLURAL:$1|sayfada|sayfada}} kullanılıyor', +'ntransclusions' => '$1 {{PLURAL:$1|sayfada|sayfada}} kullanılıyor', 'specialpage-empty' => 'Bu rapor için hiç sonuç yok.', 'lonelypages' => 'Kendisine hiç bağlantı olmayan sayfalar', 'lonelypagestext' => 'Aşağıdaki sayfalara {{SITENAME}} sitesindeki diğer sayfalardan bağlantı verilmemiş ya da çapraz dahil edilmemişler.', @@ -2039,34 +2088,40 @@ Bireysel haklarla ilgili [[{{MediaWiki:Listgrouprights-helppage}}|daha fazla bil 'listgrouprights-removegroup-self-all' => 'Kendi hesabından tüm grupları çıkarabilir', # E-mail user -'mailnologin' => 'Gönderi adresi yok.', -'mailnologintext' => 'Diğer kullanıcılara e-posta gönderebilmeniz için [[Special:UserLogin|oturum aç]]malısınız ve [[Special:Preferences|tercihler]] sayfasında geçerli bir e-posta adresiniz olmalı.', -'emailuser' => 'Kullanıcıya e-posta gönder', -'emailpage' => 'Kullanıcıya e-posta gönder', -'emailpagetext' => 'Bu kullanıcıya e-posta mesajı göndermek için aşağıdaki formu kullanabilirsiniz. +'mailnologin' => 'Gönderi adresi yok.', +'mailnologintext' => 'Diğer kullanıcılara e-posta gönderebilmeniz için [[Special:UserLogin|oturum aç]]malısınız ve [[Special:Preferences|tercihler]] sayfasında geçerli bir e-posta adresiniz olmalı.', +'emailuser' => 'Bu kullanıcıya e-posta gönder', +'emailpage' => 'Kullanıcıya e-posta gönder', +'emailpagetext' => 'Bu kullanıcıya e-posta mesajı göndermek için aşağıdaki formu kullanabilirsiniz. [[Special:Preferences|Kullanıcı tercihlerinizde]] girdiğiniz e-posta adresiniz, e-postanın "From (Kimden)" adresinde görünecektir, bu yüzden alıcı size direk cevap verebilecektir.', -'usermailererror' => 'E-posta hizmeti hata verdi:', -'defemailsubject' => '{{SITENAME}} e-posta', -'noemailtitle' => 'e-posta adresi yok', -'noemailtext' => 'Bu kullanıcı geçerli bir e-posta adresi belirtmemiş.', -'nowikiemailtitle' => 'E-postalara izin verilmiyor', -'nowikiemailtext' => 'Bu kullanıcı, diğer kullanıcılardan e-posta almamayı tercih etti.', -'email-legend' => 'Diğer {{SITENAME}} kullanıcısına e-posta gönder', -'emailfrom' => 'Kimden:', -'emailto' => 'Kime:', -'emailsubject' => 'Konu:', -'emailmessage' => 'E-posta:', -'emailsend' => 'Gönder', -'emailccme' => 'Mesajın bir kopyasını da bana gönder.', -'emailccsubject' => "$1'e gönderdiğiniz mesajın kopyası: $2", -'emailsent' => 'E-posta gönderildi', -'emailsenttext' => 'E-postanız gönderildi.', -'emailuserfooter' => 'Bu e-posta $1 tarafından $2 kullanıcısına, {{SITENAME}} sitesindeki "Kullanıcıya e-posta gönder" fonksiyonu ile gönderilmiştir.', +'usermailererror' => 'E-posta hizmeti hata verdi:', +'defemailsubject' => '{{SITENAME}} e-posta', +'usermaildisabled' => 'Kullanıcı e-postası devre dışı', +'usermaildisabledtext' => 'Bu vikide diğer kullanıcılara e-posta gönderemezsiniz', +'noemailtitle' => 'e-posta adresi yok', +'noemailtext' => 'Bu kullanıcı geçerli bir e-posta adresi belirtmemiş.', +'nowikiemailtitle' => 'E-postalara izin verilmiyor', +'nowikiemailtext' => 'Bu kullanıcı, diğer kullanıcılardan e-posta almamayı tercih etti.', +'email-legend' => 'Diğer {{SITENAME}} kullanıcısına e-posta gönder', +'emailfrom' => 'Kimden:', +'emailto' => 'Kime:', +'emailsubject' => 'Konu:', +'emailmessage' => 'E-posta:', +'emailsend' => 'Gönder', +'emailccme' => 'Mesajın bir kopyasını da bana gönder.', +'emailccsubject' => "$1'e gönderdiğiniz mesajın kopyası: $2", +'emailsent' => 'E-posta gönderildi', +'emailsenttext' => 'E-postanız gönderildi.', +'emailuserfooter' => 'Bu e-posta $1 tarafından $2 kullanıcısına, {{SITENAME}} sitesindeki "Kullanıcıya e-posta gönder" fonksiyonu ile gönderilmiştir.', + +# User Messenger +'usermessage-summary' => 'Sistem mesajı bırakın.', +'usermessage-editor' => 'Sistem habercisi', # Watchlist 'watchlist' => 'İzleme listem', 'mywatchlist' => 'İzleme listem', -'watchlistfor' => "('''$1''' için)", +'watchlistfor2' => '$1 için $2', 'nowatchlist' => 'İzleme listesinde hiçbir madde bulunmuyor.', 'watchlistanontext' => 'Lütfen izleme listenizdeki maddeleri görmek ya da değiştirmek için $1.', 'watchnologin' => 'Oturum açık değil.', @@ -2081,9 +2136,9 @@ Kolayca seçilebilmeleri için de [[Special:RecentChanges|son değişiklikler li Sayfayı izleme listenizden çıkarmak istediğinizde "sayfayı izlemeyi durdur" bağlantısına tıklayabilirsiniz.', 'removedwatch' => 'İzleme listenizden silindi', 'removedwatchtext' => '"[[:$1]]" sayfası [[Special:Watchlist|izleme listenizden]] silinmiştir.', -'watch' => 'İzlemeye al', +'watch' => 'İzle', 'watchthispage' => 'Sayfayı izle', -'unwatch' => 'Sayfa izlemeyi durdur', +'unwatch' => 'İzleme', 'unwatchthispage' => 'Sayfa izlemeyi durdur', 'notanarticle' => 'İçerik sayfası değil', 'notvisiblerev' => 'Revizyon silinmiş', @@ -2151,8 +2206,8 @@ Geri bildirim ve daha fazla yardım için: 'historywarning' => "'''Uyarı:''' Silmek üzere olduğunuz sayfanın yaklaşık olarak $1 {{PLURAL:$1|sürüme|sürüme}} sahip bir geçmişi var:", 'confirmdeletetext' => 'Bu sayfayı veya dosyayı tüm geçmişi ile birlikte veritabanından kalıcı olarak silmek üzeresiniz. Bu işlemden kaynaklı doğabilecek sonuçların farkında iseniz ve işlemin [[{{MediaWiki:Policy-url}}|Silme kurallarına]] uygun olduğuna eminseniz, işlemi onaylayın.', -'actioncomplete' => 'İşlem tamamlandı.', -'actionfailed' => 'Eylem başarısız oldu', +'actioncomplete' => 'İşlem tamamlandı', +'actionfailed' => 'İşlem başarısız oldu', 'deletedtext' => '"$1" silindi. Yakın zamanda silinenleri görmek için: $2.', 'deletedarticle' => '"[[$1]]" silindi', @@ -2178,7 +2233,7 @@ dikkatle devam edin.', # Rollback 'rollback' => 'değişiklikleri geri al', 'rollback_short' => 'geri al', -'rollbacklink' => 'eski haline getir', +'rollbacklink' => 'geridöndür', 'rollbackfailed' => 'geri alma işlemi başarısız', 'cantrollback' => 'Sayfaya son katkıda bulunan kullanıcı, sayfaya katkıda bulunmuş tek kişi olduğu için, değişiklikler geri alınamıyor.', 'alreadyrolled' => '[[User:$2|$2]] ([[User talk:$2|Talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tarafından [[:$1]] sayfasında yapılmış son değişiklik geriye alınamıyor; @@ -2190,7 +2245,10 @@ Son değişikliği yapan: [[User:$3|$3]] ([[User talk:$3|Talk]]{{int:pipe-separa 'revertpage-nouser' => '(kullanıcı adı çıkarılmış) tarafından yapılan değişiklikler [[User:$1|$1]] tarafından yapılan son revizyona geri alındı', 'rollback-success' => '$1 tarafından yapılan değişiklikler geri alınarak; $2 tarafından değiştirilmiş önceki sürüme geri dönüldü.', -'sessionfailure' => 'Giriş oturumunuzla ilgili bir sorun var gibi görünüyor; + +# Edit tokens +'sessionfailure-title' => 'Oturum başarısızlığı', +'sessionfailure' => 'Giriş oturumunuzla ilgili bir sorun var gibi görünüyor; bu eylem, oturum gaspına karşı önlem olarak iptal edildi. Lütfen "geri" gidin ve geldiğiniz sayfayı yeniden yükleyin, sonra tekrar deneyin.', @@ -2322,35 +2380,39 @@ $1', 'month' => 'Ay:', 'year' => 'Yıl:', -'sp-contributions-newbies' => 'Sadece yeni hesap açan kullanıcıların katkılarını göster', -'sp-contributions-newbies-sub' => 'Yeni kullanıcılar için', -'sp-contributions-newbies-title' => 'Yeni hesaplar için kullanıcı katkıları', -'sp-contributions-blocklog' => 'Engel kaydı', -'sp-contributions-deleted' => 'silinen kullanıcı katkıları', -'sp-contributions-logs' => 'günlükler', -'sp-contributions-talk' => 'tartışma', -'sp-contributions-userrights' => 'kullanıcı hakları yönetimi', -'sp-contributions-blocked-notice' => 'Bu kullanıcı engellenmiştir. Referans için en son engellenme kaydı aşağıda belirtilmiştir:', -'sp-contributions-search' => 'Katkıları ara', -'sp-contributions-username' => 'IP veya kullanıcı:', -'sp-contributions-submit' => 'Ara', +'sp-contributions-newbies' => 'Sadece yeni kullanıcıların katkılarını göster', +'sp-contributions-newbies-sub' => 'Yeni kullanıcılar için', +'sp-contributions-newbies-title' => 'Yeni hesaplar için kullanıcı katkıları', +'sp-contributions-blocklog' => 'Engel kaydı', +'sp-contributions-deleted' => 'silinen kullanıcı katkıları', +'sp-contributions-uploads' => 'yüklenenler', +'sp-contributions-logs' => 'kayıtlar', +'sp-contributions-talk' => 'tartışma', +'sp-contributions-userrights' => 'kullanıcı hakları yönetimi', +'sp-contributions-blocked-notice' => 'Bu kullanıcı engellenmiştir. Referans için en son engellenme kaydı aşağıda belirtilmiştir:', +'sp-contributions-blocked-notice-anon' => 'Bu IP adresi şu anda engellenmiş. +Son engelleme günlüğü girdisi kaynak amacıyla aşağıda verilmiştir:', +'sp-contributions-search' => 'Katkıları ara', +'sp-contributions-username' => 'IP adresi veya kullanıcı adı:', +'sp-contributions-toponly' => 'Sadece son revizyon olan değişiklikleri göster', +'sp-contributions-submit' => 'Ara', # What links here 'whatlinkshere' => 'Sayfaya bağlantılar', 'whatlinkshere-title' => '"$1" maddesine bağlantı veren sayfalar', 'whatlinkshere-page' => 'Sayfa:', 'linkshere' => "'''[[:$1]]''' sayfasına bağlantısı olan sayfalar:", -'nolinkshere' => "'''[[:$1]]''' sayfasına bağlantı yapan sayfa yok.", +'nolinkshere' => "'''[[:$1]]''' sayfasına bağlantı veren sayfa yok.", 'nolinkshere-ns' => "Seçilen ad alanında hiçbir sayfa '''[[:$1]]''' sayfasına bağlanmıyor.", 'isredirect' => 'yönlendirme sayfası', -'istemplate' => 'ekleme', +'istemplate' => 'dönüştürülme', 'isimage' => 'dosya bağlantısı', 'whatlinkshere-prev' => '{{PLURAL:$1|önceki|önceki $1}}', 'whatlinkshere-next' => '{{PLURAL:$1|sonraki|sonraki $1}}', 'whatlinkshere-links' => '← bağlantılar', -'whatlinkshere-hideredirs' => 'yönlendirmeleri $1', -'whatlinkshere-hidetrans' => 'Çapraz eklemeleri $1', -'whatlinkshere-hidelinks' => 'bağlantıları $1', +'whatlinkshere-hideredirs' => 'Yönlendirmeleri $1', +'whatlinkshere-hidetrans' => 'Dönüştürmeleri $1', +'whatlinkshere-hidelinks' => 'Bağlantıları $1', 'whatlinkshere-hideimages' => 'Resim bağlantılarını $1', 'whatlinkshere-filters' => 'Süzgeçler', @@ -2378,7 +2440,7 @@ $1', 'ipbenableautoblock' => 'Bu kullanıcı tarafından kullanılan son IP adresini ve değişiklik yapmaya çalıştığı sonraki IP adreslerini otomatik olarak engelle', 'ipbsubmit' => 'Bu kullanıcıyı engelle', 'ipbother' => 'Farklı zaman', -'ipboptions' => '2 saat:2 hours,1 gün:1 day,3 gün:3 days,1 hafta:1 week,2 hafta:2 weeks,1 ay:1 month,3 ay:3 months,6 ay:6 months,1 yıl:1 year,Süresiz:infinite', +'ipboptions' => '2 saat:2 hours,1 gün:1 day,3 gün:3 days,1 hafta:1 week,2 hafta:2 weeks,1 ay:1 month,3 ay:3 months,6 ay:6 months,1 yıl:1 year,süresiz:infinite', 'ipbotheroption' => 'farklı', 'ipbotherreason' => 'Başka/ek sebepler:', 'ipbhidename' => 'Kullanıcı adını katkılarda ve listelerde gizle', @@ -2392,7 +2454,6 @@ $1', 'ipb-edit-dropdown' => 'Engelleme nedenleri düzenle', 'ipb-unblock-addr' => '$1 için engellemeyi kaldır', 'ipb-unblock' => 'Engellemeyi kaldır', -'ipb-blocklist-addr' => '$1 için mevcut engellemeler', 'ipb-blocklist' => 'Mevcut olan engellemeleri göster', 'ipb-blocklist-contribs' => '$1 için katkılar', 'unblockip' => 'Kullanıcının engellemesini kaldır', @@ -2420,11 +2481,11 @@ $1', 'ipblocklist-empty' => 'Engelleme listesi boş.', 'ipblocklist-no-results' => 'İstenen IP adresi ya da kullanıcı adı engellenmedi.', 'blocklink' => 'engelle', -'unblocklink' => 'engellemeyi kaldır', +'unblocklink' => 'engeli kaldır', 'change-blocklink' => 'engeli değiştir', -'contribslink' => 'Katkılar', +'contribslink' => 'katkılar', 'autoblocker' => 'Otomatik olarak engellendiniz çünkü yakın zamanda IP adresiniz "[[User:$1|$1]]" kullanıcısı tarafından kullanılmıştır. $1 isimli kullanıcının engellenmesi için verilen sebep: "\'\'\'$2\'\'\'"', -'blocklogpage' => 'Erişim engelleme kayıtları', +'blocklogpage' => 'Engel kaydı', 'blocklog-showlog' => 'Bu kullanıcı daha önceden engellenmiş. Engelleme günlüğü referans için aşağıda sağlanmıştır:', 'blocklog-showsuppresslog' => 'Bu kullanıcı daha önceden engellenmiş ve gizlenmiş. @@ -2465,6 +2526,8 @@ Lütfen İnternet sevis sağlayınız ile ya da teknik destek ile irtibat kurun Hesap oluşturamazsınız", 'cant-block-while-blocked' => 'Siz engelliyken başka kullanıcıları engelleyemezsiniz.', 'cant-see-hidden-user' => 'Engellemek istediğiniz kullanıcı zaten engellenmiş ve gizlenmiş. Kullanıcıgizle yetkiniz olmadığı için, kullanıcının engellenmesini göremez ya da değiştiremezsiniz.', +'ipbblocked' => 'Diğer kullanıcıları engelleyemez ya da engellemesini kaldıramazsınız, çünkü kendiniz engellenmişsiz', +'ipbnounblockself' => 'Kendi engellemenizi kaldırmanıza izniniz yok', # Developer tools 'lockdb' => 'Veritabanı kilitli', @@ -2496,6 +2559,17 @@ Eğer yeni isimde bir madde zaten varsa isim değişikliği '''yapılmayacaktır '''UYARI!''' Bu değişim popüler bir sayfa için beklenmeyen sonuçlar doğurabilir; lütfen değişikliği yapmadan önce olabilecekleri göz önünde bulundurun.", +'movepagetext-noredirectfixer' => "Aşağıdaki formu doldurmak bir sayfayı yeniden adlandırır, tüm geçmişini yeni ada taşır. +Eski başlık yeni başlığa bir yönlendirme sayfası olur. +[[Special:DoubleRedirects|Çift]] ya da [[Special:BrokenRedirects|nozuk yönlendirmeler]] sayfalarını kontrol edin. +Bağlantıların gitmeleri gereken yerlere gittiklerinden emin olmak sizin sorumluluğunuzdadır. + +Yeni başlıkta mevcut bir sayfa varsa, boş yada bir yönlendirme olmadıkça ve değişiklik geçmişi bulunmadıkça, sayfa '''taşınmayacaktır'''. +Bu şu anlama gelir, bir sayfayı yanlışlık yaparsanız sayfayı eski adıyla yeniden adlandırabilirsiniz, bu mevcut sayfanın üzerine yazmaz. + +'''Uyarı!''' +Bu popüler bir sayfa için etkili ve beklenmedik bir değişiklik olabilir; +Lütfen onaylamadan önce bunun sonuçlarını anladığınızdan emin olun.", 'movepagetalktext' => "İlişikteki tartışma sayfası da (eğer varsa) otomatik olarak yeni isme taşınacaktır. Ama şu durumlarda '''taşınmaz''': *Alanlar arası bir taşıma ise, (örnek: \"Project:\" --> \"Help:\") @@ -2533,7 +2607,7 @@ Lütfen başka bir isim deneyiniz.', '1movedto2' => '[[$1]] sayfasının yeni adı: [[$2]]', '1movedto2_redir' => '[[$1]] başlığı [[$2]] sayfasına yönlendirildi', 'move-redirect-suppressed' => 'yönlendirme bastırılmış', -'movelogpage' => 'İsim değişikliği kayıtları', +'movelogpage' => 'Taşıma kaydı', 'movelogpagetext' => 'Aşağıda bulunan liste adı değiştirilmiş sayfaları gösterir.', 'movesubpage' => '{{PLURAL:$1|Subpage|Alt sayfalar}}', 'movesubpagetext' => 'Bu sayfanın aşağıda gösterilen $1 {{PLURAL:$1|altsayfası|altsayfası}} vardır.', @@ -2553,6 +2627,7 @@ Lütfen başka bir isim deneyiniz.', 'immobile-source-page' => 'Bu sayfanın adı değiştirilemez.', 'immobile-target-page' => 'Bu hedef başlığına taşınamaz.', 'imagenocrossnamespace' => 'Dosya, dosyalar için olmayan ad alanına taşınamaz', +'nonfile-cannot-move-to-file' => 'Dosya olmayanlar, dosya ad alanına taşınamaz', 'imagetypemismatch' => 'Yeni dosya eklentisi tipiyle eşleşmiyor', 'imageinvalidfilename' => 'Hedef dosya adı geçersiz', 'fix-double-redirects' => 'Orijinal başlığa işaret eden yönlendirmeleri güncelle', @@ -2567,7 +2642,7 @@ Son günlük girdisi referans amaçlı aşağıda verilmiştir:", Lütfen başka bir isim seçin.', # Export -'export' => 'Sayfa kaydet', +'export' => 'Sayfaları dışa aktar', 'exporttext' => 'Belirli bir sayfa ya da sayfa takımının metni ve değiştirme geçmişini XML ile sarılı olarak dışa aktarabilirsiniz. Bu, MedyaViki kullanan başka bir vikide [[Special:Import|içe aktarım sayfası]] ile içe aktarılabilir. @@ -2588,8 +2663,8 @@ Sonuncu durumda, bir link de kullanabilirsiniz, ör: "[[{{MediaWiki:Mainpage}}]] # Namespace 8 related 'allmessages' => 'Sistem iletileri', -'allmessagesname' => 'İsim', -'allmessagesdefault' => 'Orjinal metin', +'allmessagesname' => 'Ad', +'allmessagesdefault' => 'Varsayılan mesaj metni', 'allmessagescurrent' => 'Kullanımdaki metin', 'allmessagestext' => 'Bu liste MediaWiki ad alanında mevcut olan sistem mesajlarının listesidir. Genel MediaWiki yerelleştirmesine katkıda bulunmak isterseniz, lütfen [http://www.mediawiki.org/wiki/Localisation MediaWiki Yerelleştirmesi] ve [http://translatewiki.net translatewiki.net] sayfalarını ziyaret edin.', @@ -2606,7 +2681,7 @@ Genel MediaWiki yerelleştirmesine katkıda bulunmak isterseniz, lütfen [http:/ # Thumbnails 'thumbnail-more' => 'Büyüt', 'filemissing' => 'Dosya bulunmadı', -'thumbnail_error' => 'Ön izleme oluşturmada hata: $1', +'thumbnail_error' => 'Küçük resim oluşturmada hata: $1', 'djvu_page_error' => 'DjVu sayfası kapsamdışı', 'djvu_no_xml' => 'DjVu dosyası için XML alınamıyor', 'thumbnail_invalid_params' => 'Geçersiz küçük resim parametreleri', @@ -2633,6 +2708,7 @@ Bilgisayarınıza kaydedin ve buraya yükleyin.', 'importstart' => 'Sayfalar aktarmaktadır...', 'import-revision-count' => '$1 {{PLURAL:$1|revizyon|revizyon}}', 'importnopages' => 'Aktarılacak dosya yok.', +'imported-log-entries' => '$1 {{PLURAL:$1|günlük girdisi|günlük girdisi}} içe aktardı.', 'importfailed' => '$1 aktarımı başarısız', 'importunknownsource' => 'Bilinmeyen içeri aktarım kaynak türü', 'importcantopen' => 'İçeri aktarma dosyası açılamadı', @@ -2669,49 +2745,49 @@ Geçici dosya kayıp.', 'tooltip-pt-anonuserpage' => 'The user page for the ip you', 'tooltip-pt-mytalk' => 'Mesaj sayfanız', 'tooltip-pt-anontalk' => 'Bu IP adresinden yapılmış değişiklikleri tartış', -'tooltip-pt-preferences' => 'Ayarlarım', -'tooltip-pt-watchlist' => 'İzlemeye aldığım sayfalar', -'tooltip-pt-mycontris' => 'Yaptığınız katkıların listesi', -'tooltip-pt-login' => 'Oturum açmanız tavsiye olunur ama mecbur değilsiniz.', +'tooltip-pt-preferences' => 'Tercihleriniz (ayarlarınız)', +'tooltip-pt-watchlist' => 'Değişiklikler için izlemeye aldığınız sayfaların listesi', +'tooltip-pt-mycontris' => 'Katkılarınızın listesi', +'tooltip-pt-login' => 'Mecbur değilsiniz fakat oturum açmanız tavsiye olunur', 'tooltip-pt-anonlogin' => 'Oturum açmanız tavsiye olunur ama mecbur değilsiniz.', 'tooltip-pt-logout' => 'Sistemden çık', -'tooltip-ca-talk' => 'İçerik ile ilgili görüş belirt', -'tooltip-ca-edit' => 'Bu sayfayı değiştirebilirsiniz. Kaydetmeden önce önizleme yapmayı unutmayın.', -'tooltip-ca-addsection' => 'Yeni bir bölüm başlat.', -'tooltip-ca-viewsource' => 'Bu sayfa koruma altında. Sadece kaynak kodunu sadece görebilirsiniz. İçeriği değiştiremezsiniz.', -'tooltip-ca-history' => 'Bu sayfanın geçmiş versiyonları.', +'tooltip-ca-talk' => 'İçerik ile ilgili tartışma', +'tooltip-ca-edit' => 'Bu sayfayı değiştirebilirsiniz. Lütfen kaydetmeden önce önizleme düğmesini kullanın.', +'tooltip-ca-addsection' => 'Yeni bir altbaşlık aç', +'tooltip-ca-viewsource' => 'Bu sayfa koruma altında. Sadece kaynağını görebilirsiniz.', +'tooltip-ca-history' => 'Bu sayfanın geçmiş sürümleri', 'tooltip-ca-protect' => 'Bu sayfayı koru', 'tooltip-ca-unprotect' => 'Bu sayfanın korumasını kaldır', -'tooltip-ca-delete' => 'Sayfayı sil', +'tooltip-ca-delete' => 'Bu sayfayı sil', 'tooltip-ca-undelete' => 'Sayfayı silinmeden önceki haline geri getirin', -'tooltip-ca-move' => 'Sayfanın adını değiştir', -'tooltip-ca-watch' => 'Bu sayfayı izlemeye al', -'tooltip-ca-unwatch' => 'Bu sayfayı izlemeyi bırakın', +'tooltip-ca-move' => 'Bu sayfayı taşı', +'tooltip-ca-watch' => 'Bu sayfayı izleme listenize ekleyin', +'tooltip-ca-unwatch' => 'Bu sayfayı izleme listenizden çıkarın', 'tooltip-search' => '{{SITENAME}} içinde ara', 'tooltip-search-go' => 'Eğer varsa, tam bu addaki bir sayfaya git', -'tooltip-search-fulltext' => 'Bu metin için sayfaları ara', +'tooltip-search-fulltext' => 'Sayfalarda bu metni ara', 'tooltip-p-logo' => 'Ana sayfa', -'tooltip-n-mainpage' => 'Ana sayfaya dön', +'tooltip-n-mainpage' => 'Ana sayfaya git', 'tooltip-n-mainpage-description' => 'Ana sayfaya git', -'tooltip-n-portal' => 'Proje üzerine, ne nerdedir, neler yapılabilir', +'tooltip-n-portal' => 'Proje hakkında, neler yapabilirsiniz, ne nerdedir', 'tooltip-n-currentevents' => 'Güncel olaylarla ilgili son bilgiler', -'tooltip-n-recentchanges' => 'Vikide yapılmış son değişikliklerin listesi.', +'tooltip-n-recentchanges' => 'Vikide yapılmış son değişikliklerin listesi', 'tooltip-n-randompage' => 'Rastgele bir maddeye gidin', -'tooltip-n-help' => 'Yardım almak için.', -'tooltip-t-whatlinkshere' => 'Bu sayfaya bağlantı vermiş diğer viki sayfalarının listesi', -'tooltip-t-recentchangeslinked' => 'Bu sayfaya bağlantı veren sayfalardaki son değişiklikler', +'tooltip-n-help' => 'Yardım almak için', +'tooltip-t-whatlinkshere' => 'Bu sayfaya bağlantı vermiş tüm viki sayfalarının listesi', +'tooltip-t-recentchangeslinked' => 'Bu sayfadan bağlantı verilen sayfalardaki son değişiklikler', 'tooltip-feed-rss' => 'Bu sayfa için RSS beslemesi', 'tooltip-feed-atom' => 'Bu sayfa için atom beslemesi', -'tooltip-t-contributions' => 'Kullanıcının katkı listesini gör', -'tooltip-t-emailuser' => 'Kullanıcıya e-posta gönder', +'tooltip-t-contributions' => 'Kullanıcının katkılarının listesini gör', +'tooltip-t-emailuser' => 'Bu kullanıcıya e-posta gönder', 'tooltip-t-upload' => 'Dosya yükle', -'tooltip-t-specialpages' => 'Tüm özel sayfaların listesini göster', -'tooltip-t-print' => 'Bu sayfanın basılmaya uygun görünümü', +'tooltip-t-specialpages' => 'Tüm özel sayfaların listesi', +'tooltip-t-print' => 'Bu sayfanın basılmaya uygun sürümü', 'tooltip-t-permalink' => 'Sayfanın bu sürümüne kalıcı bağlantı', -'tooltip-ca-nstab-main' => 'Sayfayı göster', +'tooltip-ca-nstab-main' => 'İçerik sayfasını göster', 'tooltip-ca-nstab-user' => 'Kullanıcı sayfasını göster', 'tooltip-ca-nstab-media' => 'Medya sayfasını göster', -'tooltip-ca-nstab-special' => 'Bu özel sayfa olduğu için değişiklik yapamazsınız.', +'tooltip-ca-nstab-special' => 'Bu özel sayfa olduğu için üzerinde değişiklik yapamazsınız.', 'tooltip-ca-nstab-project' => 'Proje sayfasını göster', 'tooltip-ca-nstab-image' => 'Dosya sayfasını göster', 'tooltip-ca-nstab-mediawiki' => 'Sistem mesajını göster', @@ -2720,15 +2796,16 @@ Geçici dosya kayıp.', 'tooltip-ca-nstab-category' => 'Kategori sayfasını göster', 'tooltip-minoredit' => 'Küçük değişiklik olarak işaretle', 'tooltip-save' => 'Değişiklikleri kaydet', -'tooltip-preview' => 'Önizleme; kaydetmeden önce bu özelliği kullanarak değişikliklerinizi gözden geçirin!', -'tooltip-diff' => 'Metine yaptığınız değişiklikleri gösterir.', -'tooltip-compareselectedversions' => 'Seçilmiş iki sürüm arasındaki farkları göster.', -'tooltip-watch' => 'Sayfayı izleme listene ekle', +'tooltip-preview' => 'Değişikliklerinizi gözden geçirin, lütfen kaydetmeden önce bunu kullanın!', +'tooltip-diff' => 'Metin üzerinde yaptığınız değişiklikleri gösterir', +'tooltip-compareselectedversions' => 'Bu sayfanın seçilmiş iki sürümü arasındaki farkları gör.', +'tooltip-watch' => 'Sayfayı izleme listenize ekleyin', 'tooltip-recreate' => 'Silinmiş olmasına rağmen sayfayı geri getir', 'tooltip-upload' => 'Yüklemeyi başlat', -'tooltip-rollback' => '"Geri dönüş" tek tıklamayla bu sayfaya son katkı yapanın değişikliklerini geri döndürür', -'tooltip-undo' => '"Geri al" bu değişikliği geri döndürür ve değişiklik formunu önizleme modunda açar. -Özet için bir sebep eklemeye izin verir', +'tooltip-rollback' => '"Geridöndür" tek tıklamayla bu sayfaya son katkı yapanın değişikliklerini geri alır', +'tooltip-undo' => '"Geri al" bu değişikliği geri alır ve değişiklik formunu önizleme modunda açar.Özete bir sebep eklemeye olanak tanır.', +'tooltip-preferences-save' => 'Tercihleri kaydet', +'tooltip-summary' => 'Kısa bir özet girin', # Stylesheets 'common.css' => '/* Buraya konulacak CSS kodu tüm temalarda etkin olur */', @@ -2828,8 +2905,8 @@ $1', 'filedelete-archive-read-only' => '"$1" arşiv dizini websunucusu tarafından yazılabilir değil.', # Browsing diffs -'previousdiff' => '← Önceki sürümle aradaki fark', -'nextdiff' => 'Sonraki sürümle aradaki fark →', +'previousdiff' => '← Önceki değişiklik', +'nextdiff' => 'Sonraki değişiklik →', # Media information 'mediawarning' => "'''Uyarı''': Bu dosya türü kötü niyetli kodlar içerebilir. @@ -2837,14 +2914,17 @@ Bunu çalıştırarak, sisteminiz tehlikeye atılabilir.", 'imagemaxsize' => "Resim boyutu sınırı:
    ''(dosya açıklama sayfaları için)''", 'thumbsize' => 'Küçük boyut:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|sayfa|sayfa}}', -'file-info' => '(dosya boyutu: $1, MIME tipi: $2)', -'file-info-size' => '($1 × $2 piksel, dosya boyutu: $3, MIME tipi: $4)', -'file-nohires' => 'Daha yüksek çözünürlüğe sahip sürüm bulunmamaktadır.', -'svg-long-desc' => '(SVG dosyası, sözde $1 × $2 piksel, dosya boyutu: $3)', +'file-info' => 'dosya boyutu: $1, MIME tipi: $2', +'file-info-size' => '$1 × $2 piksel, dosya boyutu: $3, MIME tipi: $4', +'file-nohires' => 'Daha yüksek çözünürlük yok.', +'svg-long-desc' => 'SVG dosyası, sözde $1 × $2 piksel, dosya boyutu: $3', 'show-big-image' => 'Tam çözünürlük', 'show-big-image-thumb' => 'Ön izleme boyutu: $1 × $2 piksel', 'file-info-gif-looped' => 'döngüye girdi', 'file-info-gif-frames' => '$1 {{PLURAL:$1|kare|kare}}', +'file-info-png-looped' => 'döngüye girdi', +'file-info-png-repeat' => '$1 {{PLURAL:$1|defa|defa}} oynatıldı', +'file-info-png-frames' => '$1 {{PLURAL:$1|frame|frames}}', # Special:NewFiles 'newimages' => 'Yeni dosya galerisi', @@ -2865,11 +2945,11 @@ Bunu çalıştırarak, sisteminiz tehlikeye atılabilir.", 'hours-abbrev' => 's', # Bad image list -'bad_image_list' => 'Format şu şekildedir: +'bad_image_list' => 'Biçim aşağıdaki gibidir: -Sadece liste öğeleri (* ile başlayanlar) dikkate alınmaktadır. +Sadece liste öğeleri (* ile başlayan satırlar) dikkate alınmaktadır. Satırdaki ilk bağlantı, kötü dosyaya giden bir bağlantı olmalıdır. -Ondan sonraki bağlantılar istisna olarak kabul edilmektedir. Örneğin: dosya, sayfada satır içinde görünebilir.', +Takip eden bağlantılar istisna olarak kabul edilmektedir. Örneğin: dosya, sayfada satır içinde görünebilir.', # Variants for Tajiki language 'variantname-tg' => 'tg', @@ -3010,6 +3090,7 @@ Ondan sonraki bağlantılar istisna olarak kabul edilmektedir. Örneğin: dosya, 'exif-gpsareainformation' => 'GPS alan adı', 'exif-gpsdatestamp' => 'GPS zamanı', 'exif-gpsdifferential' => 'GPS differential correction', +'exif-objectname' => 'Kısa başlık', # EXIF attributes 'exif-compression-1' => 'Sıkıştırılmamış', @@ -3177,40 +3258,40 @@ Ondan sonraki bağlantılar istisna olarak kabul edilmektedir. Örneğin: dosya, 'exif-gpsdirection-m' => 'Manyetik yönü', # External editor support -'edit-externally' => 'Dosya üzerinde bilgisayarınızda bulunan uygulamalar ile değişiklikler yapın', +'edit-externally' => 'Dosyayı harici bir uygulamayla değiştirin.', 'edit-externally-help' => '(Daha fazla bilgi için metadaki [http://www.mediawiki.org/wiki/Manual:External_editors dış uygulama ayarları] (İngilizce) sayfasına bakabilirsiniz)', # 'all' in various places, this might be different for inflected languages 'recentchangesall' => 'hepsi', 'imagelistall' => 'Tümü', 'watchlistall2' => 'Hepsini göster', -'namespacesall' => 'Hepsi', +'namespacesall' => 'hepsi', 'monthsall' => 'hepsi', 'limitall' => 'tümü', # E-mail address confirmation -'confirmemail' => 'E-posta adresini onayla', -'confirmemail_noemail' => '[[Special:Preferences|Kullanıcı tercihlerinizde]] tanımlanmış uygun bir e-posta adresiniz yok.', -'confirmemail_text' => "Viki'nin e-posta işlevlerini kullanmabilmek için, önce e-posta adresinizin doğrulanması gerekiyor. +'confirmemail' => 'E-posta adresini onayla', +'confirmemail_noemail' => '[[Special:Preferences|Kullanıcı tercihlerinizde]] tanımlanmış uygun bir e-posta adresiniz yok.', +'confirmemail_text' => "Viki'nin e-posta işlevlerini kullanmabilmek için, önce e-posta adresinizin doğrulanması gerekiyor. Adresinize onay e-postası göndermek için aşağıdaki butonu tıklayın. Gönderilecek iletide adresinizi onaylamak için tarayıcınızla erişebileceğiniz, onay kodu içeren bir bağlantı olacak; linki tarayıcınıda açın ve e-posta adresinizin geçerliliğini doğrulayın.", -'confirmemail_pending' => 'Bir doğrulama kodu size zaten e-postalandı; +'confirmemail_pending' => 'Bir doğrulama kodu size zaten e-postalandı; Eğer hesabınızı yeni oluşturduysanız, yeni bir kod istemeye çalışmadan önce gelmesini biraz beklemeyi isteyebilirsiniz.', -'confirmemail_send' => 'Onay kodu gönder', -'confirmemail_sent' => 'Onay e-postası gönderildi.', -'confirmemail_oncreate' => 'Bir doğrulama kodu e-posta adresinize gönderildi. +'confirmemail_send' => 'Onay kodu gönder', +'confirmemail_sent' => 'Onay e-postası gönderildi.', +'confirmemail_oncreate' => 'Bir doğrulama kodu e-posta adresinize gönderildi. Giriş yapmak için bu kod gerekli değildir, ancak bu vikideki herhangi bir e-posta tabanlı özelliği devreye sokmak için bunu sağlamak zorundasınız.', -'confirmemail_sendfailed' => '{{SITENAME}} Onay maili gönderemedi. Geçersiz karakterler olabilir adresi kontrol edin +'confirmemail_sendfailed' => '{{SITENAME}} Onay maili gönderemedi. Geçersiz karakterler olabilir adresi kontrol edin Mail yazılımı iade etti:$1', -'confirmemail_invalid' => 'Geçersiz onay kodu. Onay kodunun son kullanma tarihi geçmiş olabilir.', -'confirmemail_needlogin' => 'E-posta adresinizi onaylamak için önce $1 yapmalısınız.', -'confirmemail_success' => "E-posta adresiniz onaylandı. Oturum açıp Viki'nin tadını çıkarabilirsiniz.", -'confirmemail_loggedin' => 'E-posta adresiniz onaylandı.', -'confirmemail_error' => 'Onayınız bilinmeyen bir hata nedeniyle kaydedilemedi.', -'confirmemail_subject' => '{{SITENAME}} e-posta adres onayı.', -'confirmemail_body' => 'Birisi, muhtemelen siz, $1 IP adresinden, +'confirmemail_invalid' => 'Geçersiz onay kodu. Onay kodunun son kullanma tarihi geçmiş olabilir.', +'confirmemail_needlogin' => 'E-posta adresinizi onaylamak için önce $1 yapmalısınız.', +'confirmemail_success' => "E-posta adresiniz onaylandı. Oturum açıp Viki'nin tadını çıkarabilirsiniz.", +'confirmemail_loggedin' => 'E-posta adresiniz onaylandı.', +'confirmemail_error' => 'Onayınız bilinmeyen bir hata nedeniyle kaydedilemedi.', +'confirmemail_subject' => '{{SITENAME}} e-posta adres onayı.', +'confirmemail_body' => 'Birisi, muhtemelen siz, $1 IP adresinden, {{SITENAME}} sitesinde bu e-posta adresi ile $2 hesabını açtı. Bu hesabın gerçekten size ait olduğunu onaylamak ve {{SITENAME}} sitesindeki @@ -3224,8 +3305,33 @@ iptal etmek için aşağıdaki bağlantıyı takip edin: $5 Bu onay kodu $4 tarihine kadar geçerli olacak.', -'confirmemail_invalidated' => 'E-posta adresi doğrulaması iptal edildi', -'invalidateemail' => 'E-posta doğrulamasını iptal et', +'confirmemail_body_changed' => 'Birisi, muhtemelen siz, $1 IP adresinden, +{{SITENAME}} sitesinde "$2" hesabı için e-posta adresini değiştirdi. + +Bu hesabın gerçekten size ait olduğunu onaylamak ve {{SITENAME}} sitesindeki +e-posta işlevlerini tekrar aktif hale getirmek için aşağıdakı bağlantıyı tarayıcınızda açın.: + +$3 + +Eğer hesap size ait *değilse*, e-posta adresi doğrulamasını +iptal etmek için aşağıdaki bağlantıyı takip edin: + +$5 + +Bu onay kodu $4 tarihine kadar geçerli olacak.', +'confirmemail_body_set' => 'Birisi $1 IP adresiyle {{SITENAME}} sitesinde "$2" kullanıcı hesabının e-posta adresi olarak bu e-posta adresini belirtti. + +Eğer bu işlemi yapan sizseniz ve {{SITENAME}} sitesindeki e-posta işlevlerini tekrar aktif etmek istiyorsanız alttaki bağlantıyı tarayıcınızda açmanız gerekiyor: + +$3 + +Eğer bu işlemi yapan siz değilseniz ve böyle bir üyeliğiniz yoksa e-posta onay işlemini iptal etmek için alttaki bağlantıyı tarayıcınızda açmanız gerekiyor: + +$5 + +Bu onay kodu $4 tarihine kadar geçerlidir.', +'confirmemail_invalidated' => 'E-posta adresi doğrulaması iptal edildi', +'invalidateemail' => 'E-posta doğrulamasını iptal et', # Scary transclusion 'scarytranscludedisabled' => '[Vikilerarası çapraz ekleme devre dışı]', @@ -3270,6 +3376,7 @@ Sayfayı baştan açmak isityorsanız, lütfen onaylayın.", 'table_pager_first' => 'İlk', 'table_pager_last' => 'Son', 'table_pager_limit' => 'Her sayfada $1 nesne göster', +'table_pager_limit_label' => 'Sayfa başına öğe:', 'table_pager_limit_submit' => 'Git', 'table_pager_empty' => 'Sonuç yok', @@ -3318,7 +3425,7 @@ Ayrıca [[Special:Watchlist/edit|standart düzenleme sayfasını]] da kullanabil # Core parser functions 'unknown_extension_tag' => 'Bilinmeyen eklenti etiketi "$1"', -'duplicate-defaultsort' => 'Uyarı: Varsayılan "$2" sınıflandırma anahtarı, önceki "$1" sınıflandırma anahtarını geçersiz kılıyor.', +'duplicate-defaultsort' => '\'\'\'Uyarı:\'\'\' Varsayılan "$2" sınıflandırma anahtarı, önceki "$1" sınıflandırma anahtarını geçersiz kılıyor.', # Special:Version 'version' => 'Sürüm', @@ -3326,6 +3433,7 @@ Ayrıca [[Special:Watchlist/edit|standart düzenleme sayfasını]] da kullanabil 'version-specialpages' => 'Özel sayfalar', 'version-parserhooks' => 'Derleyici çengelleri', 'version-variables' => 'Değişkenler', +'version-skins' => 'Görünümler', 'version-other' => 'Diğer', 'version-mediahandlers' => 'Ortam işleyiciler', 'version-hooks' => 'Çengeller', @@ -3337,6 +3445,13 @@ Ayrıca [[Special:Watchlist/edit|standart düzenleme sayfasını]] da kullanabil 'version-hook-subscribedby' => 'Abone olan', 'version-version' => '(Sürüm $1)', 'version-license' => 'Lisans', +'version-poweredby-credits' => "Bu wiki '''[http://www.mediawiki.org/ MediaWiki]''' programı kullanılarak oluşturulmuştur, telif © 2001-$1 $2.", +'version-poweredby-others' => 'diğerleri', +'version-license-info' => "MediaWiki özgür bir yazılımdır; MediaWiki'yi, Özgür Yazılım Vakfı tarafından yayımlanmış olan GNU Genel Kamu Lisansının 2. veya (seçeceğiniz) daha sonraki bir sürümünün koşulları altında yeniden dağıtabilir ve/veya değiştirebilirsiniz. + +MediaWiki yazılımı faydalı olacağı ümidiyle dağıtılmaktadır; ancak kastedilen SATILABİLİRLİK veya BELİRLİ BİR AMACA UYGUNLUK garantisi hariç HİÇBİR GARANTİSİ YOKTUR. Daha fazla ayrıntı için GNU Genel Kamu Lisansı'na bakınız. + +Bu programla birlikte [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU Genel Kamu Lisansının bir kopyasını] da edinmiş olmalısınız; eğer edinmediyseniz, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA adresine yazın veya [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html lisansı çevrim içi olarak okuyun].", 'version-software' => 'Yüklü yazılım', 'version-software-product' => 'Ürün', 'version-software-version' => 'Versiyon', @@ -3387,10 +3502,10 @@ Dosya adını "{{ns:file}}:" öneki olmadan gir.', # External image whitelist 'external_image_whitelist' => ' #Bu satırı olduğu gibi bırakın
     #Düzenli ifade parçalarını (sadece // arasında kalan kısmı) aşağıya ekleyin
    -#Bunlar dış (hotlink) resimlerin URLleri ile eşlenecektir
    +#Bunlar harici (hotlink) resimlerin URLleri ile eşlenecektir
     #Eşleşenler resim olarak görünecek, aksi takdirde sadece resme bir bağlantı görünecektir
     # # ile başlayan satırlar yorum olarak muamele görecektir
    -#Bu büyük-küçük harf duyarsızdır
    +#Büyük-küçük harf duyarsızdır
     
     #Bütün düzenli ifade parçalarını bu satırın üstüne ekleyin. Bu satırı olduğu gibi bırakın
    ', @@ -3407,6 +3522,15 @@ Dosya adını "{{ns:file}}:" öneki olmadan gir.', 'tags-edit' => 'değiştir', 'tags-hitcount' => '$1 {{PLURAL:$1|değişiklik|değişiklik}}', +# Special:ComparePages +'comparepages' => 'Sayfaları karşılaştır', +'compare-selector' => 'Sayfa sürümlerini karşılaştır', +'compare-page1' => 'Sayfa 1', +'compare-page2' => 'Sayfa 2', +'compare-rev1' => 'Sürüm 1', +'compare-rev2' => 'Sürüm 2', +'compare-submit' => 'Karşılaştır', + # Database error messages 'dberr-header' => 'Bu vikinin bir sorunu var', 'dberr-problems' => 'Üzgünüz! Bu site teknik zorluklar yaşıyor.', @@ -3423,8 +3547,13 @@ Dosya adını "{{ns:file}}:" öneki olmadan gir.', 'htmlform-float-invalid' => 'Belirttiğiniz değer bir sayı değil.', 'htmlform-int-toolow' => "Belirttiğiniz değer asgari $1'in altında", 'htmlform-int-toohigh' => "Belirttiğiniz değer azami $1'in üstünde", +'htmlform-required' => 'Bu değer gereklidir', 'htmlform-submit' => 'Gönder', 'htmlform-reset' => 'Değişiklikleri geri al', 'htmlform-selectorother-other' => 'Diğer', +# SQLite database support +'sqlite-has-fts' => '$1 tam-metin arama desteği ile', +'sqlite-no-fts' => '$1 tam-metin arama desteği olmaksızın', + ); diff --git a/languages/messages/MessagesTs.php b/languages/messages/MessagesTs.php index 146080bd..bec0df41 100644 --- a/languages/messages/MessagesTs.php +++ b/languages/messages/MessagesTs.php @@ -16,7 +16,7 @@ $messages = array( 'tog-hideminor' => 'Tumbeta mindzulamiso leyi tsongo', 'tog-usenewrc' => 'Kucinca ka sweswinyana loku hlutiweke (JavaScript)', 'tog-showtoc' => 'Komba nxaxamelo wa leswingandzeni (eka tinhlokomhaka tinharhu kumbe kutlula)', -'tog-rememberpassword' => 'Tsundzuka ku nghena eka Khompuyuta leyi', +'tog-rememberpassword' => 'Tsundzuka ku nghena eka Khompuyuta leyi (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Hoxa matluka lawa ndzi matumbuluxaka eka leswi ndziswi languteke', 'tog-watchdefault' => 'Hoxa matluka lawa ndzi malulamisaka eka leswi ndziswi languteke', 'tog-watchmoves' => "Hoxa matluka lawa ndzi mayisaka kun'wana eka leswi ndziswi languteke", diff --git a/languages/messages/MessagesTt_cyrl.php b/languages/messages/MessagesTt_cyrl.php index a92e6efc..6fc942c9 100644 --- a/languages/messages/MessagesTt_cyrl.php +++ b/languages/messages/MessagesTt_cyrl.php @@ -105,33 +105,103 @@ $namespaceAliases = array( 'Törkem_bäxäse' => NS_CATEGORY_TALK, ); +$specialPageAliases = array( + 'DoubleRedirects' => array( 'Икеле_күчеш' ), + 'BrokenRedirects' => array( 'Өзелгән_күчеш' ), + 'Userlogin' => array( 'Кулланучы_исеме' ), + 'Userlogout' => array( 'Чыгу' ), + 'CreateAccount' => array( 'Теркәлү' ), + 'Preferences' => array( 'Көйләнмәләр' ), + 'Watchlist' => array( 'Күзәтү_исемлеге' ), + 'Recentchanges' => array( 'Соңгы_үзгәртүләр' ), + 'Upload' => array( 'Йөкләү' ), + 'Listfiles' => array( 'Файллар_исемлеге' ), + 'Newimages' => array( 'Яңа_файл' ), + 'Listusers' => array( 'Кулланучылар_исемлеге' ), + 'Listgrouprights' => array( 'Төркемнәр_исемлеге' ), + 'Statistics' => array( 'Статистика' ), + 'Randompage' => array( 'Очраклы_мәкалә' ), + 'Uncategorizedpages' => array( 'Үзләштерелмәгән_битләр' ), + 'Uncategorizedcategories' => array( 'Үзләштерелмәгән__бүлекләр' ), + 'Uncategorizedimages' => array( 'Үзләштерелмәгән_файллар' ), + 'Uncategorizedtemplates' => array( 'Үзләштерелмәгән__үрнәкләр' ), + 'Unusedcategories' => array( 'Кулланылмаучы_бүлекләр' ), + 'Unusedimages' => array( 'Кулланылмаучы__файллар' ), + 'Wantedpages' => array( 'Мондый_бит_юк' ), + 'Wantedcategories' => array( 'Мондый_бүлек_юк' ), + 'Wantedfiles' => array( 'Мондый_файл_юк' ), + 'Wantedtemplates' => array( 'Мондый_үрнәк_юк' ), + 'Mostcategories' => array( 'Зур_төркемнәр' ), + 'Mostrevisions' => array( 'Зур_үзгәртүләр' ), + 'Fewestrevisions' => array( 'Кечкенә_үзгәртүләр' ), + 'Shortpages' => array( 'Кыска_битләр' ), + 'Longpages' => array( 'Озын_битләр' ), + 'Newpages' => array( 'Яңа_бит' ), + 'Ancientpages' => array( 'Иске_битләр' ), + 'Protectedpages' => array( 'Якланган_битләр' ), + 'Protectedtitles' => array( 'Якланган_башлыклар' ), + 'Allpages' => array( 'Барлык_битләр' ), + 'Specialpages' => array( 'Махсус_битләр' ), + 'Contributions' => array( 'Кертемнәр' ), + 'Emailuser' => array( 'Кулланучының_E-mail\'лы' ), + 'Confirmemail' => array( 'Электрон_почтаны_раслау' ), + 'Whatlinkshere' => array( 'Биткә_юнәлтүче_сылтамалар' ), + 'Recentchangeslinked' => array( 'Бәйләнгән_соңгы_үзгәртүләр' ), + 'Movepage' => array( 'Битне_күчерү' ), + 'Booksources' => array( 'Китап_чыганаклары' ), + 'Categories' => array( 'Төркемнәр' ), + 'Export' => array( 'Экспорт' ), + 'Version' => array( 'Юрама' ), + 'Allmessages' => array( 'Барлык_хатлар' ), + 'Log' => array( 'Көндәлек' ), + 'Import' => array( 'Импорт' ), + 'Mypage' => array( 'Сәхифәм' ), + 'Mytalk' => array( 'Бәхәсем' ), + 'Listadmins' => array( 'Идарәчеләр_исемлеге' ), + 'Listbots' => array( 'Ботлар_исемлеге' ), + 'Popularpages' => array( 'Популяр_битләр' ), + 'Search' => array( 'Эзләү' ), + 'Tags' => array( 'Теглар' ), + 'Activeusers' => array( 'Актив_кулланучылар' ), +); + $magicWords = array( - 'redirect' => array( '0', '#yünältü', '#перенаправление', '#перенапр', '#REDIRECT' ), - 'notoc' => array( '0', '__ETYUQ__', '__БЕЗ_ОГЛ__', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__NOTOC__' ), + 'redirect' => array( '0', '#ЮНӘЛТҮ', '#перенаправление', '#перенапр', '#REDIRECT' ), + 'notoc' => array( '0', '__БАШЛЫКЮК__', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__БЕЗ_ОГЛ__', '__NOTOC__' ), 'forcetoc' => array( '0', '__ETTIQ__', '__ОБЯЗ_ОГЛ__', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__FORCETOC__' ), - 'toc' => array( '0', '__ET__', '__ОГЛ__', '__ОГЛАВЛЕНИЕ__', '__TOC__' ), - 'noeditsection' => array( '0', '__BÜLEMTÖZÄTÜYUQ__', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ), - 'currentmonth' => array( '1', 'AĞIMDAĞI_AY', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ), - 'currentmonthname' => array( '1', 'AĞIMDAĞI_AY_İSEME', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ), - 'currentmonthnamegen' => array( '1', 'AĞIMDAĞI_AY_İSEME_GEN', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_РОД', 'CURRENTMONTHNAMEGEN' ), - 'currentday' => array( '1', 'AĞIMDAĞI_KÖN', 'ТЕКУЩИЙ_ДЕНЬ', 'CURRENTDAY' ), - 'currentdayname' => array( '1', 'AĞIMDAĞI_KÖN_İSEME', 'НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ', 'CURRENTDAYNAME' ), - 'currentyear' => array( '1', 'AĞIMDAĞI_YIL', 'ТЕКУЩИЙ_ГОД', 'CURRENTYEAR' ), - 'currenttime' => array( '1', 'AĞIMDAĞI_WAQIT', 'ТЕКУЩЕЕ_ВРЕМЯ', 'CURRENTTIME' ), - 'numberofarticles' => array( '1', 'MÄQÄLÄ_SANI', 'КОЛИЧЕСТВО_СТАТЕЙ', 'NUMBEROFARTICLES' ), - 'pagename' => array( '1', 'BİTİSEME', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ), - 'namespace' => array( '1', 'İSEMARA', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ), + 'toc' => array( '0', '__ЭЧТЕЛЕК__', '__ОГЛАВЛЕНИЕ__', '__ОГЛ__', '__TOC__' ), + 'noeditsection' => array( '0', '__БҮЛЕКҮЗГӘРТҮЮК__', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ), + 'currentmonth' => array( '1', 'АГЫМДАГЫ_АЙ', 'АГЫМДАГЫ_АЙ2', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ), + 'currentmonthname' => array( '1', 'АГЫМДАГЫ_АЙ_ИСЕМЕ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ), + 'currentmonthnamegen' => array( '1', 'АГЫМДАГЫ_АЙ_ИСЕМЕ_GEN', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_РОД', 'CURRENTMONTHNAMEGEN' ), + 'currentday' => array( '1', 'АГЫМДАГЫ_КӨН', 'ТЕКУЩИЙ_ДЕНЬ', 'CURRENTDAY' ), + 'currentday2' => array( '1', 'АГЫМДАГЫ_КӨН2', 'ТЕКУЩИЙ_ДЕНЬ_2', 'CURRENTDAY2' ), + 'currentdayname' => array( '1', 'АГЫМДАГЫ_КӨН_ИСЕМЕ', 'НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ', 'CURRENTDAYNAME' ), + 'currentyear' => array( '1', 'АГЫМДАГЫ_ЕЛ', 'ТЕКУЩИЙ_ГОД', 'CURRENTYEAR' ), + 'currenttime' => array( '1', 'АГЫМДАГЫ_ВАКЫТ', 'ТЕКУЩЕЕ_ВРЕМЯ', 'CURRENTTIME' ), + 'numberofarticles' => array( '1', 'МӘКАЛӘ_САНЫ', 'КОЛИЧЕСТВО_СТАТЕЙ', 'NUMBEROFARTICLES' ), + 'pagename' => array( '1', 'БИТ_ИСЕМЕ', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ), + 'namespace' => array( '1', 'ИСЕМНӘР_МӘЙДАНЫ', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ), + 'msg' => array( '0', 'ХӘБӘР', 'СООБЩЕНИЕ:', 'СООБЩ:', 'MSG:' ), 'subst' => array( '0', 'TÖPÇEK:', 'ПОДСТ:', 'ПОДСТАНОВКА:', 'SUBST:' ), - 'img_right' => array( '1', 'uñda', 'справа', 'right' ), - 'img_left' => array( '1', 'sulda', 'слева', 'left' ), - 'img_none' => array( '1', 'yuq', 'без', 'none' ), - 'int' => array( '0', 'EÇKE:', 'ВНУТР:', 'INT:' ), - 'sitename' => array( '1', 'SÄXİFÄİSEME', 'НАЗВАНИЕ_САЙТА', 'SITENAME' ), + 'img_right' => array( '1', 'уңда', 'справа', 'right' ), + 'img_left' => array( '1', 'сулда', 'слева', 'left' ), + 'img_none' => array( '1', 'юк', 'без', 'none' ), + 'img_width' => array( '1', '$1пкс', '$1px' ), + 'img_center' => array( '1', 'үзәк', 'центр', 'center', 'centre' ), + 'int' => array( '0', 'ЭЧКЕ:', 'ВНУТР:', 'INT:' ), + 'sitename' => array( '1', 'СӘХИФӘ_ИСЕМЕ', 'НАЗВАНИЕ_САЙТА', 'SITENAME' ), 'ns' => array( '0', 'İA:', 'ПИ:', 'NS:' ), 'localurl' => array( '0', 'URINLIURL:', 'ЛОКАЛЬНЫЙ_АДРЕС:', 'LOCALURL:' ), 'localurle' => array( '0', 'URINLIURLE:', 'ЛОКАЛЬНЫЙ_АДРЕС_2:', 'LOCALURLE:' ), + 'language' => array( '0', '#ТЕЛ:', '#ЯЗЫК:', '#LANGUAGE:' ), + 'special' => array( '0', 'махсус', 'служебная', 'special' ), + 'tag' => array( '0', 'тамга', 'метка', 'тег', 'тэг', 'tag' ), + 'noindex' => array( '1', '__ИНДЕКССЫЗ__', '__БЕЗ_ИНДЕКСА__', '__NOINDEX__' ), ); +$linkTrail = '/^([a-zабвгдеёжзийклмнопрстуфхцчшщъыьэюяӘәӨөҮүҖҗҢңҺһ]+)(.*)$/sDu'; + $messages = array( # User preference toggles 'tog-underline' => 'Сылтамаларның астына сызу:', @@ -148,8 +218,7 @@ $messages = array( 'tog-editsection' => 'Һәр бүлектә «үзгәртү» сылтамасы күрсәтелсен', 'tog-editsectiononrightclick' => 'Бүлек исеменә тычканның уң чирттермәсе белән төрткәч үзгәртү бите ачылсын (JavaScript кирәк)', 'tog-showtoc' => 'Эчтәлек күрсәтелсен (3 тән күбрәк башламлы битләрдә)', -'tog-rememberpassword' => 'Хисап язмам бу компьютерда хәтерләнсен', -'tog-editwidth' => 'Үзгәртү урыны күзәтүче тәрәзәсенең тулы киңлегендә', +'tog-rememberpassword' => 'Хисап язмамны бу браузерда саклансын (иң күп $1 {{PLURAL:$1|көн|көн|көн}}гә кадәр)', 'tog-watchcreations' => 'Төзегән битләрем күзәтү исемлегемә өстәлсен', 'tog-watchdefault' => 'Үзгәрткән битләрем күзәтү исемлегемә өстәлсен', 'tog-watchmoves' => 'Күчергән битләрем күзәтү исемлегемә өстәлсен', @@ -295,31 +364,21 @@ $messages = array( 'faqpage' => 'Project:ЕБС', # Vector skin -'vector-action-addsection' => 'Яңа тема өстәү', -'vector-action-delete' => 'Бетерү', -'vector-action-move' => 'Күчерү', -'vector-action-protect' => 'Яклау', -'vector-action-undelete' => 'Кайтару', -'vector-action-unprotect' => 'Яклауны бетерү', -'vector-namespace-category' => 'Төркем', -'vector-namespace-help' => 'Ярдәм бите', -'vector-namespace-image' => 'Файл', -'vector-namespace-main' => 'Бит', -'vector-namespace-media' => 'Медиа-бит', -'vector-namespace-mediawiki' => 'Хәбәр', -'vector-namespace-project' => 'Проект бите', -'vector-namespace-special' => 'Махсус бит', -'vector-namespace-talk' => 'Бәхәс', -'vector-namespace-template' => 'Үрнәк', -'vector-namespace-user' => 'Кулланучы бите', -'vector-view-create' => 'Төзү', -'vector-view-edit' => 'Үзгәртү', -'vector-view-history' => 'Тарихын карау', -'vector-view-view' => 'Уку', -'vector-view-viewsource' => 'Чыганагын карау', -'actions' => 'Хәрәкәт', -'namespaces' => 'Исемнәр мәйданы', -'variants' => 'Төрләр', +'vector-action-addsection' => 'Яңа тема өстәү', +'vector-action-delete' => 'Бетерү', +'vector-action-move' => 'Күчерү', +'vector-action-protect' => 'Яклау', +'vector-action-undelete' => 'Кайтару', +'vector-action-unprotect' => 'Яклауны бетерү', +'vector-simplesearch-preference' => 'Эзләү өчен киңәйтелгән ярдәм хәбәрләрен күрсәтү («Векторлы» бизәлеше өчен генә кулланылыа)', +'vector-view-create' => 'Төзү', +'vector-view-edit' => 'Үзгәртү', +'vector-view-history' => 'Тарихын карау', +'vector-view-view' => 'Уку', +'vector-view-viewsource' => 'Чыганагын карау', +'actions' => 'Хәрәкәт', +'namespaces' => 'Исемнәр мәйданы', +'variants' => 'Төрләр', 'errorpagetitle' => 'Хата', 'returnto' => '$1 битенә кайту.', @@ -380,6 +439,9 @@ $messages = array( Бу биткә соңарак керүегез сорала. $1', +'pool-timeout' => 'Кысылуның вакыты узды', +'pool-queuefull' => 'Сорауларны саклау бите тулы', +'pool-errorunknown' => 'Билгесез хата', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} турында', @@ -546,7 +608,8 @@ $2', 'yourname' => 'Кулланучы исеме:', 'yourpassword' => 'Серсүз:', 'yourpasswordagain' => 'Серсүзне кабат кертү:', -'remembermypassword' => 'Кулланучы исемемне бу компьютерда онытмаска', +'remembermypassword' => 'Хисап язмамны бу браузерда саклансын (иң күп $1 {{PLURAL:$1|көн|көн|көн}}гә кадәр)', +'securelogin-stick-https' => 'Керүдән соң HTTPS буенча тоташтыруны дәвам итәргә', 'yourdomainname' => 'Сезнең доменыгыз:', 'externaldberror' => 'Тышкы мәгълүмат базасы ярдәмендә аутентификация үткәндә хата чыкты, яисә тышкы хисап язмагызга үзгәрешләр кертү хокукыгыз юк.', 'login' => 'Керү', @@ -563,6 +626,7 @@ $2', 'gotaccount' => "Сез инде теркәлдегезме? '''$1'''.", 'gotaccountlink' => 'Керү', 'createaccountmail' => 'электрон почта аша', +'createaccountreason' => 'Сәбәп:', 'badretype' => 'Кертелгән серсүзләр бер үк түгел.', 'userexists' => 'Кертелгән исем кулланыла. Зинһар, башка исем сайлагыз.', @@ -583,6 +647,7 @@ $2', 'wrongpasswordempty' => 'Серсүз юлы буш булырга тиеш түгел.', 'passwordtooshort' => 'Сезсүз $1 {{PLURAL:$1|символдан}} торырга тиеш.', 'password-name-match' => 'Кертелгән серсүз кулланучы исеменнән аерылырга тиеш.', +'password-login-forbidden' => 'Бу кулланучы исемен һәм серсүзне куллану тыелган', 'mailmypassword' => 'Электрон почтага яңа серсүз җибәрү', 'passwordremindertitle' => '{{SITENAME}} кулланучысына вакытлы серсүз тапшыру', 'passwordremindertext' => 'Кемдер (бәлки, сездер, IP адресы: $1) {{SITENAME}} ($4) өчен яңа серсүз соратты. $2 өчен яңа серсүз: $3. Әгәр бу сез булсагыз, системага керегез һәм серсүзне алмаштырыгыз. Яңа серсүз $5 {{PLURAL:$5|көн}} гамәлдә булачак. @@ -615,6 +680,9 @@ $2', 'loginlanguagelabel' => 'Тел: $1', 'suspicious-userlogout' => 'Сезнең эшчәнлекне бетерү соравыгыз кире кагылды, чөнки ул ялгыш браузер яисә кэшлаучы прокси аша җибәрелергэ мөмкин.', +# E-mail sending +'php-mail-error-unknown' => 'PHP mail() функциясендә билгесез хата', + # Password reset dialog 'resetpass' => 'Серсүзне үзгәртү', 'resetpass_announce' => 'Сез электрон почта аша вакытлыча бирелгән серсүз ярдәмендә кердегез. Системага керүне төгәлләү өчен яңа серсүз төзегез.', @@ -665,10 +733,11 @@ $2', 'showlivepreview' => 'Тиз алдан карау', 'showdiff' => 'Кертелгән үзгәртүләр', 'anoneditwarning' => "'''Игътибар''': Сез системага кермәгәнсез. IP адресыгыз бу битнең тарихына язылачак.", +'anonpreviewwarning' => "''Сез системада теркәлмәдегез.Сезнең тарафтан эшләнгән барлык үзгәртүләр дә сезнең IP-юлламагызны саклауга китерә.''", 'missingsummary' => "'''Искәртү.''' Сез үзгәртүгә кыскача тасвирлау язмадыгыз. Сез «Битне саклау» төймәсенә тагын бер тапкыр бассагыз, үзгәртүләр тасвирламасыз сакланачак.", 'missingcommenttext' => 'Аска тасвирлама язуыгыз сорала.', -'missingcommentheader' => "'''Искәртү:''' Сез тасвирламага исем бирмәдегез. -«Битне сакларга» төймәсенә кабат бассагыз, үзгәртүләр исемсез язылачак.", +'missingcommentheader' => "''Искәртү:''' Сез тасвирламага исем бирмәдегез. +«{{int:savearticle}}» төймәсенә кабат бассагыз, үзгәртүләр исемсез язылачак.", 'summary-preview' => 'Тасвирламаны алдан карау:', 'subject-preview' => 'Башисемне алдан карау:', 'blockedtitle' => 'Кулланучы тыелды', @@ -739,7 +808,11 @@ $2', 'userjsyoucanpreview' => "'''Ярдәм:''' \"{{int:showpreview}}\" төймәсенә басып, яңа JS-файлны тикшереп була.", 'usercsspreview' => "'''Бу бары тик CSS-файлны алдан карау гына, ул әле сакланмаган!'''", 'userjspreview' => "'''Бу бары тик JavaScript файлын алдан карау гына, ул әле сакланмаган!'''", -'userinvalidcssjstitle' => "'''Игътибар:''' \"\$1\" бизәү темасы табылмады. Кулланучының .css һәм .js битләре исемнәре бары тик кечкенә (юл) хәрефләрдән генә торырга тиеш икәнен онытмагыз. Мисалга: {{ns:user}}:Foo/monobook.css, ә {{ns:user}}:Foo/Monobook.css түгел!", +'sitecsspreview' => "'''онытмагыз, бу бары тик CSS-файлны алдан карау гына.''' +'''Ул әле сакланмаган!'''", +'sitejspreview' => "'''Бу бары тик JavaScript файлын алдан карау гына.''' +'''Ул әле сакланмаган!'''", +'userinvalidcssjstitle' => "'''Игътибар:''' \"\$1\" бизәү темасы табылмады. Кулланучының .css һәм .js битләре исемнәре бары тик кечкенә (юл) хәрефләрдән генә торырга тиеш икәнен онытмагыз. Мисалга: {{ns:user}}:Foo/vector.css, ә {{ns:user}}:Foo/Vector.css түгел!", 'updated' => '(Яңартылды)', 'note' => "'''Искәрмә:'''", 'previewnote' => "'''Бу фәкать алдан карау гына, үзгәртүләрегез әле сакланмаган!'''", @@ -779,9 +852,6 @@ $2', Әгәр аларның үзгәртелүен теләмәсәгез, монда өстәмәвегез сорала.
    Сез өстәмәләрнең авторы булырга яисә мәгълүматның ирекле чыганаклардан алынуын күрсәтергә тиеш (карагыз: $1). '''МАХСУС РӨХСӘТТӘН БАШКА АВТОРЛЫК ХОКУКЫ БУЕНЧА САКЛАНУЧЫ МӘГЪЛҮМАТЛАР УРНАШТЫРМАГЫЗ!'''", -'longpagewarning' => "'''Кисәтү:''' Бу битнең зурлыгы - $1 килобайт. -32 Кб яисә аннан зуррак битләр кайбер браузерларда ялгыш күренергә мөмкин. -Текстны берничә өлешкә бүләргә тәгъдим ителә.", 'longpageerror' => "'''ХАТА: сакланучы текст зурлыгы - $1 килобайт, бу $2 килобайт чигеннән күбрәк. Бит саклана алмый.'''", 'readonlywarning' => "'''Кисәтү: мәгълүматлар базасында техник эшләр башкарыла, сезнең үзгәртүләр хәзер үк саклана алмый. Текст югалмасын өчен аны компьютерыгызга саклап тора аласыз.''' @@ -924,6 +994,8 @@ $3 күрсәткән сәбәп: ''$2''", 'revdelete-nologid-title' => 'Көндәлектәге язма хаталы', 'revdelete-no-file' => 'Бу файл бар түгел', 'revdelete-show-file-submit' => 'Әйе', +'revdelete-selected' => "'''[[:$1]] битенең {{PLURAL:$2|Сайланган юрама|сайланган юрамалары}}:'''", +'logdelete-selected' => "'''Журналның {{PLURAL:$1|Сайланган язма|сайланган язмалары}} :'''", 'revdelete-legend' => 'Чикләүләр урнаштыр:', 'revdelete-hide-text' => 'Битнең бу юрамасы текстын яшер', 'revdelete-hide-image' => 'Файл эчендәгеләрне качыр', @@ -932,6 +1004,8 @@ $3 күрсәткән сәбәп: ''$2''", 'revdelete-radio-set' => 'Әйе', 'revdelete-radio-unset' => 'Юк', 'revdel-restore' => 'күренүчәнлекне үзгәртү', +'revdel-restore-deleted' => 'бетерелгән юрамалар', +'revdel-restore-visible' => 'күрсәтелгән юрамалар', 'pagehist' => 'битнең тарихы', 'deletedhist' => 'Бетерүләр тарихы', 'revdelete-content' => 'эчтәлек', @@ -1067,6 +1141,7 @@ $3 күрсәткән сәбәп: ''$2''", 'contextlines' => 'Һәрбер табылдыкта күрсәтелүче юллар саны:', 'contextchars' => 'Бер юлга туры килгән тамгалар:', 'stub-threshold' => 'Ясалма сылтамаларның бизәлеше буенча чикләүләр (байтларда):', +'stub-threshold-disabled' => 'Ябылган', 'recentchangesdays' => 'Соңгы үзгәртүләрне күрсәтүче көннәр саны:', 'recentchangesdays-max' => '( $1 {{PLURAL:$1|көннән}} дә артык булмаска тиеш)', 'recentchangescount' => 'Төп буларак кулланучы үзгәртүләр саны:', @@ -1098,6 +1173,7 @@ $3 күрсәткән сәбәп: ''$2''", 'prefs-files' => 'Файллар', 'prefs-custom-css' => 'Үземнең CSS', 'prefs-custom-js' => 'Үземнең JS', +'prefs-common-css-js' => 'Барлык бизәлешләр өчен гомуми CSS/JS:', 'prefs-reset-intro' => 'Бу бит сезнең көйләнмәләрегезне бетерү өчен кулланыла. Бу эшне башкару нәтиҗәсендә сез яңадан үз көйләнмәләрне яңадан кайтара алмыйсыз.', 'prefs-emailconfirm-label' => 'E-mail раслау', 'prefs-textboxsize' => 'Үзгәртү тәрәзәсенең зурлыгы', @@ -1135,6 +1211,9 @@ $3 күрсәткән сәбәп: ''$2''", 'prefs-advancedrendering' => 'Киңәйтелгән көйләүләр', 'prefs-advancedsearchoptions' => 'Киңәйтелгән көйләүләр', 'prefs-advancedwatchlist' => 'Киңәйтелгән көйләүләр', +'prefs-displayrc' => 'Күрсәтү көйләнмәләре', +'prefs-displaysearchoptions' => 'Күрсәтү көйләнмәләре', +'prefs-displaywatchlist' => 'Күрсәтү көйләнмәләре', 'prefs-diffs' => 'Юрамалар аермасы', # User rights @@ -1211,12 +1290,8 @@ $3 күрсәткән сәбәп: ''$2''", 'recentchanges-legend' => 'Соңгы үзгәртүләр көйләүләре', 'recentchangestext' => 'Бу биттә {{grammar:genitive|{{SITENAME}}}} проектының соңгы үзгәртүләре күрсәтелә.', 'recentchanges-feed-description' => 'Бу агымда соңгы үзгәртүләрне күзәтү.', -'recentchanges-label-legend' => 'Махсус тамгалар: $1.', -'recentchanges-legend-newpage' => '$1 — яңа бит', 'recentchanges-label-newpage' => 'Бу үзгәртү белән яңа бит төзелде', -'recentchanges-legend-minor' => '$1 — кече үзгәртү', 'recentchanges-label-minor' => 'Бу кече үзгәртү', -'recentchanges-legend-bot' => '$1 — ботның үзгәртүе', 'recentchanges-label-bot' => 'Бу үзгәртү бот белән эшләнгән иде', 'rcnote' => 'Аста $4 $5 вакытынна соңгы {{PLURAL:$2|1|$2}} көн эчендә булган соңгы {{PLURAL:$1|1|$1}} үзгәртмә күрсәтелә:', 'rcnotefrom' => "Астарак '''$2''' башлап ('''$1''' кадәр) үзгәртүләр күрсәтелгән.", @@ -1264,6 +1339,7 @@ $3 күрсәткән сәбәп: ''$2''", 'upload_directory_missing' => '$1 Йөкләнү директориясе юк', 'upload_directory_read_only' => 'Моңа Сезнең хокукларыгыз юк һәм веб-сервер $1 папкасыны йөкли алмый.', 'uploaderror' => 'Файлны йөкләүдә хата', +'upload-recreate-warning' => "'''Игътибар: Мондый исемле файл бетерелгән яки исеме алмаштырылган '''", 'uploadtext' => "Бу форманы кулланып серверга файллар йөкли аласыз. Элегрәк йөкләнелгән файлларны карау өчен [[Special:FileList|йөкләнелгән файллар исемлегенә]] мәрәҗәгать итегез. Шулай ук ул [[Special:Log/upload|йөкләнмәләр исемлегенә]] һәм [[Special:Log/delete|бетерелгән файллар]] исемлегенә дә языла. Файлны мәкаләгә йөкләү өчен Сез менә бу үрнәкләрне куллана аласыз: @@ -1297,10 +1373,18 @@ $3 күрсәткән сәбәп: ''$2''", 'filetype-banned-type' => "'''\".\$1\"''' — тыелган файл төре. {{PLURAL:\$3|Киңәйтелгән файл төре булып|Киңәйтелгән файл төре:}} \$2.", 'filetype-missing' => "Файлның киңәйтелмәсе юк ''(мәсәлән,«.jpg»)''.", +'empty-file' => 'Сезнең тарафтан җибәрелгән файл буш.', +'file-too-large' => 'Сезнең тарафтан җибәрелгән файл артык зур.', +'filename-tooshort' => 'Файлның исеме артык кыска.', +'filetype-banned' => 'Бу файл төре тыелган.', +'verification-error' => 'Бу файл әлегә тикшерү узмаган.', +'illegal-filename' => 'Мондый файл исеменә рөхсәт юк', 'savefile' => 'Файлны саклау', 'uploadedimage' => '«[[$1]]» йөкләнгән', 'overwroteimage' => '«[[$1]]» файлының яңа юрамасы йөкләнелде', 'uploaddisabled' => 'Йөкләү тыелган', +'copyuploaddisabled' => 'URL адресы буенча йөкләү ябылган.', +'uploadfromurl-queued' => 'Сезнең йөкләвегез чиратка куелды.', 'uploaddisabledtext' => 'Файлларны йөкләү ябылган.', 'upload-source' => 'Файлның чыганагы', 'sourcefilename' => 'Файлның чыганагы:', @@ -1330,6 +1414,7 @@ JD # Jenoptik MGP # Pentax PICT # төрле # ', +'upload-success-subj' => 'Йөкләү әйбәт үтте', # HTTP errors 'http-read-error' => 'HTTP укуда хата.', @@ -1343,6 +1428,7 @@ PICT # төрле # Special:ListFiles 'imgfile' => 'файл', 'listfiles' => 'Сүрәтләр исемлеге', +'listfiles_thumb' => 'Миниатюра', 'listfiles_date' => 'Вакыт', 'listfiles_name' => 'Ат', 'listfiles_user' => 'Кулланучы', @@ -1427,7 +1513,6 @@ PICT # төрле 'statistics-edits-average' => 'Бер биткә уртача үзгәртүләр исәбе', 'statistics-views-total' => 'Барлык каралган битләр', 'statistics-views-peredit' => 'Үзгәртүләргә карау', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Эшләнәчәк эшләр] чираты', 'statistics-users' => 'Теркәлгән [[Special:ListUsers|кулланучылар]]', 'statistics-users-active' => 'Актив кулланучылар', 'statistics-users-active-desc' => '{{PLURAL:$1|$1 көн }} өчендә нинди дә булса үзгәртүләр керткән кулланучылар', @@ -1579,7 +1664,6 @@ PICT # төрле # Watchlist 'watchlist' => 'Күзәтү исемлегем', 'mywatchlist' => 'Күзәтү исемлегем', -'watchlistfor' => "('''$1''' өчен)", 'nowatchlist' => 'Күзәтү исемлегегездә битләр юк.', 'watchnologin' => 'Кермәдегез', 'watchnologintext' => 'Күзәтү исемлегегезне үзгәртү өчен сез [[Special:UserLogin|керергә]] тиешсез.', @@ -1973,6 +2057,8 @@ $1', 'tooltip-upload' => 'Йөкләүне башлау', 'tooltip-rollback' => "\"Кире кайтару\" соңгы кулланучының бу биттә ясаган '''барлык''' үзгәртүләрен бетерә.", 'tooltip-undo' => 'Бу үзгәртүне алдан карап үткәрмәү. Шулай ук үткәрмәүнең сәбәбен язып була.', +'tooltip-preferences-save' => 'Көйләнмәләрегезне саклау', +'tooltip-summary' => 'Кыска исемен кертү', # Stylesheets 'common.css' => '/* Монда урнаштырылган CSS башкаларында да урнашачак */', @@ -2046,9 +2132,10 @@ $1', 'thumbsize' => 'Рәсемнең кечерәйтелгән юрамасы өчен:', 'widthheight' => '$1 × $2', 'widthheightpage' => '$1 × $2, $3{{PLURAL:$1|бит|битләр}}', -'file-info-size' => '($1 × $2 нокта, файлның зурлыгы: $3, MIME тибы: $4)', +'file-info' => 'файл зурлыгы: $1, MIME-тип: $2', +'file-info-size' => '$1 × $2 нокта, файлның зурлыгы: $3, MIME тибы: $4', 'file-nohires' => 'Югары ачыклык белән юрама юк.', -'svg-long-desc' => '(SVG файлы, шартлы $1 × $2 нокта, файлның зурлыгы: $3)', +'svg-long-desc' => 'SVG файлы, шартлы $1 × $2 нокта, файлның зурлыгы: $3', 'show-big-image' => 'Тулы ачыклык', 'show-big-image-thumb' => 'Алдан карау зурлыгы: $1 × $2 нокта', @@ -2093,8 +2180,8 @@ $1', 'exif-colorspace' => 'Төсләр тирәлеге', 'exif-componentsconfiguration' => 'Төсләр төзелешенең конфигурациясе', 'exif-compressedbitsperpixel' => 'Кысылудан соң төснең тирәнлеге', -'exif-pixelydimension' => 'Рәсемнең тулы биеклеге', -'exif-pixelxdimension' => 'Рәсемнең тулы киңлеге', +'exif-pixelydimension' => 'Рәсемнең киңлеге', +'exif-pixelxdimension' => 'Рәсемнең биеклеге', 'exif-makernote' => 'Җитештерүче турында өстәмә мәгълүматлар', 'exif-usercomment' => 'Өстәмә җавап', 'exif-relatedsoundfile' => 'Тавыш файлы җавабы', @@ -2111,9 +2198,9 @@ $1', 'exif-spectralsensitivity' => 'Спектраль сизүчәнлек', 'exif-isospeedratings' => 'ISO яктылык сизүчәнлеге', 'exif-oecf' => 'OECF (оптоэлектрик күчерү коэффициенты)', -'exif-shutterspeedvalue' => 'Саклау', -'exif-aperturevalue' => 'Диафрагма', -'exif-brightnessvalue' => 'Яктылык', +'exif-shutterspeedvalue' => 'APEX саклау', +'exif-aperturevalue' => 'APEX диафрагма', +'exif-brightnessvalue' => 'APEX яктылык', 'exif-exposurebiasvalue' => 'Экспозиция компенсациясе', 'exif-maxaperturevalue' => 'Диафрагманың минималь саны', 'exif-subjectdistance' => 'Җисемгә кадәр ераклык', @@ -2176,6 +2263,8 @@ $1', 'exif-lightsource-9' => 'Яхшы һава торышы', 'exif-lightsource-11' => 'Күләгә', +'exif-sensingmethod-1' => 'Билгесез', + 'exif-scenecapturetype-0' => 'Стандарт', 'exif-scenecapturetype-1' => 'Ландшафт', 'exif-scenecapturetype-2' => 'Портрет', @@ -2327,6 +2416,15 @@ $1', 'tags-tag' => 'Тег исеме', 'tags-edit' => 'үзгәртү', +# Special:ComparePages +'comparepages' => 'Битләрне чагыштыру', +'compare-selector' => 'Битләрнең юрамаларын чагыштыру', +'compare-page1' => 'Беренче сәхифә', +'compare-page2' => 'Икенче сәхифә', +'compare-rev1' => 'Беренче юрама', +'compare-rev2' => 'Икенче юрама', +'compare-submit' => 'Чагыштыр', + # Database error messages 'dberr-header' => 'Бу вики авырлык кичерә', 'dberr-problems' => 'Гафу итегез! Сайтта техник кыенлыклар чыкты.', diff --git a/languages/messages/MessagesTt_latn.php b/languages/messages/MessagesTt_latn.php index 389ba6ff..b1c71978 100644 --- a/languages/messages/MessagesTt_latn.php +++ b/languages/messages/MessagesTt_latn.php @@ -107,6 +107,7 @@ $messages = array( 'tog-editsection' => 'Här bülektä «üzgärtü» sıltaması kürsätelsen', 'tog-editsectiononrightclick' => 'Bülek isemenä tıçqannıñ uñ çirttermäse belän törtkäç üzgärtü bite açılsın (JavaScript kiräk)', 'tog-showtoc' => 'Eçtälek kürsätelsen (3 tän kübräk başlamlı bitlärdä)', +'tog-rememberpassword' => 'Xisap yazmamnı bu brauzerda saqlansın (iñ küp $1 {{PLURAL:$1|kön|kön|kön}}gä qädär)', 'tog-watchcreations' => 'Tözegän bitlärem küzätü isemlegemä östälsen', 'tog-watchdefault' => 'Üzgärtkän bitlärem küzätü isemlegemä östälsen', 'tog-watchmoves' => 'Küçergän bitlärem küzätü isemlegemä östälsen', @@ -252,20 +253,21 @@ $messages = array( 'faqpage' => 'Project:YBS', # Vector skin -'vector-action-addsection' => 'Yaña tema östäw', -'vector-action-delete' => 'Beterü', -'vector-action-move' => 'Küçerü', -'vector-action-protect' => 'Yaqlaw', -'vector-action-undelete' => 'Qaytaru', -'vector-action-unprotect' => 'Yaqlawnı beterü', -'vector-view-create' => 'Tözü', -'vector-view-edit' => 'Üzgärtü', -'vector-view-history' => 'Tarixın qaraw', -'vector-view-view' => 'Uqu', -'vector-view-viewsource' => 'Çığanağın qaraw', -'actions' => 'Xäräkät', -'namespaces' => 'İsemnär mäydanı', -'variants' => 'Törlär', +'vector-action-addsection' => 'Yaña tema östäw', +'vector-action-delete' => 'Beterü', +'vector-action-move' => 'Küçerü', +'vector-action-protect' => 'Yaqlaw', +'vector-action-undelete' => 'Qaytaru', +'vector-action-unprotect' => 'Yaqlawnı beterü', +'vector-simplesearch-preference' => 'Ezläw öçen kiñäytelgän yärdäm xäbärlären kürsätü («Vektorlı» bizäleşe öçen genä qullanılıa)', +'vector-view-create' => 'Tözü', +'vector-view-edit' => 'Üzgärtü', +'vector-view-history' => 'Tarixın qaraw', +'vector-view-view' => 'Uqu', +'vector-view-viewsource' => 'Çığanağın qaraw', +'actions' => 'Xäräkät', +'namespaces' => 'İsemnär mäydanı', +'variants' => 'Törlär', 'errorpagetitle' => 'Xata', 'returnto' => '$1 bitenä qaytu.', @@ -326,6 +328,9 @@ Bu bitne qararğa teläwçelär artıq küp. Bu bitkä soñaraq kerüegez sorala. $1', +'pool-timeout' => 'Qısılunıñ waqıtı uzdı', +'pool-queuefull' => 'Sorawlarnı saqlaw bite tulı', +'pool-errorunknown' => 'Bilgesez xata', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} turında', @@ -492,7 +497,8 @@ Saytnıñ şäxsi [[Special:Preferences|köylänmälären]] qararğa onıtmağı 'yourname' => 'Qullanuçı iseme:', 'yourpassword' => 'Sersüz:', 'yourpasswordagain' => 'Sersüzne qabat kertü:', -'remembermypassword' => 'Tanı mine kergändä.', +'remembermypassword' => 'Xisap yazmamnı bu brauzerda saqlansın (iñ küp $1 {{PLURAL:$1|kön|kön|kön}}gä qädär)', +'securelogin-stick-https' => 'Kerüdän soñ HTTPS buyınça totaştırunı däwam itärgä', 'yourdomainname' => 'Sezneñ domenığız:', 'externaldberror' => 'Tışqı mäğlümat bazası yärdämendä awtentifikatsiä ütkändä xata çıqtı, yäisä tışqı xisap yazmağızğa üzgäreşlär kertü xoquqığız yuq.', 'login' => 'Kerü', @@ -509,6 +515,7 @@ Saytnıñ şäxsi [[Special:Preferences|köylänmälären]] qararğa onıtmağı 'gotaccount' => "Sez inde terkäldegezme? '''$1'''.", 'gotaccountlink' => 'Kerü', 'createaccountmail' => 'elektron poçta aşa', +'createaccountreason' => 'Säbäp:', 'badretype' => 'Kertelgän sersüzlär ber ük tügel.', 'userexists' => 'Kertelgän isem qullanıla. Zinhar, başqa isem saylağız.', @@ -612,8 +619,11 @@ Sez sersüzegezne üzgärtkän yäisä yaña waqıtlı sersüz soratqan bulırğ 'showlivepreview' => 'Tiz aldan qaraw', 'showdiff' => 'Kertelgän üzgärtülär', 'anoneditwarning' => "'''İğtibar''': Sez sistemağa kermägänsez. IP adresığız bu bitneñ tarixına yazılaçaq.", +'anonpreviewwarning' => "''Sez sistemada terkälmädegez.Sezneñ taraftan eşlängän barlıq üzgärtülär dä sezneñ IP-yullamağıznı saqlawğa kiterä.''", 'missingsummary' => "'''İskärtü.''' Sez üzgärtügä qısqaça taswirlaw yazmadığız. Sez «Bitne saqlaw» töymäsenä tağın ber tapqır bassağız, üzgärtülär taswirlamasız saqlanaçaq.", 'missingcommenttext' => 'Asqa taswirlama yazuığız sorala.', +'missingcommentheader' => "''İskärtü:''' Sez taswirlamağa isem birmädegez. +«{{int:savearticle}}» töymäsenä qabat bassağız, üzgärtülär isemsez yazılaçaq.", 'summary-preview' => 'Taswirlamanı aldan qaraw:', 'subject-preview' => 'Başisemne aldan qaraw:', 'blockedtitle' => 'Qullanuçı tıyıldı', @@ -684,6 +694,7 @@ Monı '''Mozilla / Firefox''': ''Ctrl+Shift+R'', '''Safari''': ''Cmd+Shift+R'', 'userjsyoucanpreview' => "'''Yärdäm:''' \"{{int:showpreview}}\" töymäsenä basıp, yaña JS-faylnı tikşerep bula.", 'usercsspreview' => "'''Bu barı tik CSS-faylnı aldan qaraw ğına, ul äle saqlanmağan!'''", 'userjspreview' => "'''Bu barı tik JavaScript faylın aldan qaraw ğına, ul äle saqlanmağan!'''", +'userinvalidcssjstitle' => "'''İğtibar:''' \"\$1\" bizäw teması tabılmadı. Qullanuçınıñ .css häm .js bitläre isemnäre barı tik keçkenä (yul) xäreflärdän genä torırğa tieş ikänen onıtmağız. Misalğa: {{ns:user}}:Foo/vector.css, ä {{ns:user}}:Foo/Vector.css tügel!", 'updated' => '(Yañartıldı)', 'note' => "'''İskärmä:'''", 'previewnote' => "'''Bu fäqät aldan qaraw ğına, üzgärtüläregez äle saqlanmağan!'''", @@ -723,9 +734,6 @@ Sez östämälärneñ avtorı bulırğa yäisä mäğlümatnıñ irekle çığan Ägär alarnıñ üzgärtelüen telämäsägez, monda östämäwegez sorala.
    Sez östämälärneñ avtorı bulırğa yäisä mäğlümatnıñ irekle çığanaqlardan alınuın kürsätergä tieş (qarağız: $1). '''MAXSUS RÖXSÄTTÄN BAŞQA AVTORLIQ XOQUQI BUYINÇA SAQLANUÇI MÄĞLÜMATLAR URNAŞTIRMAĞIZ!'''", -'longpagewarning' => "'''Kisätü:''' Bu bitneñ zurlığı - $1 kilobayt. -32 Kb yäisä annan zurraq bitlär qayber brauzerlarda yalğış kürenergä mömkin. -Tekstnı berniçä öleşkä bülärgä täğdim itelä.", 'longpageerror' => "'''XATA: saqlanuçı tekst zurlığı - $1 kilobayt, bu $2 kilobayt çigennän kübräk. Bit saqlana almıy.'''", 'readonlywarning' => "'''Kisätü: mäğlümatlar bazasında texnik eşlär başqarıla, sezneñ üzgärtülär xäzer ük saqlana almıy. Tekst yuğalmasın öçen anı kompyuterığızğa saqlap tora alasız.''' @@ -870,6 +878,8 @@ Sez idaräçe bulu säbäple, [$1 yäşerelgän yuramanı qarıy alasız]", 'revdelete-radio-set' => 'Äye', 'revdelete-radio-unset' => 'Yuq', 'revdel-restore' => 'kürenüçänlekne üzgärtü', +'revdel-restore-deleted' => 'beterelgän yuramalar', +'revdel-restore-visible' => 'kürsätelgän yuramalar', 'pagehist' => 'bitneñ tarixı', 'deletedhist' => 'Beterülär tarixı', 'revdelete-content' => 'eçtälek', @@ -1005,6 +1015,7 @@ Barlıq alannarda (bäxäs bitläre, ürnäklär, h.b.) ezläw öçen ''all'' s 'contextlines' => 'Härber tabıldıqta kürsätelüçe yullar sanı:', 'contextchars' => 'Ber yulğa turı kilgän tamğalar:', 'stub-threshold' => 'Yasalma sıltamalarnıñ bizäleşe buyınça çikläwlär (baytlarda):', +'stub-threshold-disabled' => 'Yabılğan', 'recentchangesdays' => 'Soñğı üzgärtülärne kürsätüçe könnär sanı:', 'recentchangesdays-max' => '( $1 {{PLURAL:$1|könnän}} dä artıq bulmasqa tieş)', 'recentchangescount' => 'Töp bularaq qullanuçı üzgärtülär sanı:', @@ -1036,6 +1047,7 @@ Barlıq alannarda (bäxäs bitläre, ürnäklär, h.b.) ezläw öçen ''all'' s 'prefs-files' => 'Fayllar', 'prefs-custom-css' => 'Üzemneñ CSS', 'prefs-custom-js' => 'Üzemneñ JS', +'prefs-common-css-js' => 'Barlıq bizäleşlär öçen ğomumi CSS/JS:', 'prefs-reset-intro' => 'Bu bit sezneñ köylänmäläregezne beterü öçen qullanıla. Bu eşne başqaru näticäsendä sez yañadan üz köylänmälärne yañadan qaytara almıysız.', 'prefs-emailconfirm-label' => 'E-mail raslaw', 'prefs-textboxsize' => 'Üzgärtü täräzäseneñ zurlığı', @@ -1073,6 +1085,9 @@ Ul $1 {{PLURAL:$1|xäreftän}} kübräk bulırğa tieş tügel.', 'prefs-advancedrendering' => 'Kiñäytelgän köyläwlär', 'prefs-advancedsearchoptions' => 'Kiñäytelgän köyläwlär', 'prefs-advancedwatchlist' => 'Kiñäytelgän köyläwlär', +'prefs-displayrc' => 'Kürsätü köylänmäläre', +'prefs-displaysearchoptions' => 'Kürsätü köylänmäläre', +'prefs-displaywatchlist' => 'Kürsätü köylänmäläre', 'prefs-diffs' => 'Yuramalar ayırması', # User rights @@ -1197,6 +1212,7 @@ Ul $1 {{PLURAL:$1|xäreftän}} kübräk bulırğa tieş tügel.', 'upload_directory_missing' => '$1 Yöklänü direktoriäse yuq', 'upload_directory_read_only' => 'Moña Sezneñ xoquqlarığız yuq häm web-server $1 papqasını yökli almıy.', 'uploaderror' => 'Faylnı yökläwdä xata', +'upload-recreate-warning' => "'''İğtibar: Mondıy isemle fayl beterelgän yäki iseme almaştırılğan '''", 'uploadtext' => "Bu formanı qullanıp serverğa fayllar yökli alasız. Elegräk yöklänelgän fayllarnı qaraw öçen [[Special:FileList|Yöklänelgän fayllar isemlegenä]] märäcäğät itegez. Şulay uq ul [[Special:Log/upload|yöklänmälär isemlegenä]] häm [[Special:Log/delete|beterelgän fayllar]] isemlegenä dä yazıla. Faylnı mäqälägä yökläw öçen Sez menä bu ürnäklärne qullana alasız: @@ -1230,12 +1246,18 @@ Faylnı mäqälägä yökläw öçen Sez menä bu ürnäklärne qullana alasız: 'filetype-banned-type' => "'''\".\$1\"''' — tıyılğan fayl töre. {{PLURAL:\$3|Kiñäytelgän fayl töre bulıp|Kiñäytelgän fayl töre:}} \$2.", 'filetype-missing' => "Faylnıñ kiñäytelmäse yuq ''(mäsälän,«.jpg»)''.", -'successfulupload' => 'Yökläw uñışlı uzdı', +'empty-file' => 'Sezneñ taraftan cibärelgän fayl buş.', +'file-too-large' => 'Sezneñ taraftan cibärelgän fayl artıq zur.', +'filename-tooshort' => 'Faylnıñ iseme artıq qısqa.', +'filetype-banned' => 'Bu fayl töre tıyılğan.', +'verification-error' => 'Bu fayl älegä tikşerü uzmağan.', 'uploadwarning' => 'Yökläw kisätmäse', 'savefile' => 'Faylnı saqlaw', 'uploadedimage' => '«[[$1]]» yöklängän', 'overwroteimage' => '«[[$1]]» faylınıñ yaña yuraması yöklänelde', 'uploaddisabled' => 'Yökläw tıyılğan', +'copyuploaddisabled' => 'URL adresı buyınça yökläw yabılğan.', +'uploadfromurl-queued' => 'Sezneñ yökläwegez çiratqa quyıldı.', 'uploaddisabledtext' => 'Fayllarnı yökläw yabılğan.', 'upload-source' => 'Faylnıñ çığanağı', 'sourcefilename' => 'Faylnıñ çığanağı:', @@ -1265,6 +1287,7 @@ JD # Jenoptik MGP # Pentax PICT # törle # ', +'upload-success-subj' => 'Yökläw äybät ütte', 'license' => 'Litsenziäse:', 'license-header' => 'Litsenziäse', @@ -1907,6 +1930,8 @@ Zinhar başqa isem saylağız.', 'tooltip-upload' => 'Yökläwne başlaw', 'tooltip-rollback' => "\"Kire qaytaru\" soñğı qullanuçınıñ bu bittä yasağan '''barlıq''' üzgärtülären beterä.", 'tooltip-undo' => 'Bu üzgärtüne aldan qarap ütkärmäw. Şulay uq ütkärmäwneñ säbäben yazıp bula.', +'tooltip-preferences-save' => 'Köylänmäläregezne saqlaw', +'tooltip-summary' => 'Qısqa isemen kertü', # Stylesheets 'common.css' => '/* Monda urnaştırılğan CSS başqalarında da urnaşaçaq */', @@ -1981,7 +2006,10 @@ $1', 'thumbsize' => 'Räsemneñ keçeräytelgän yuraması öçen:', 'widthheight' => '$1 × $2', 'widthheightpage' => '$1 × $2, $3{{PLURAL:$1|bit|bitlär}}', +'file-info' => 'fayl zurlığı: $1, MIME-tip: $2', +'file-info-size' => '$1 × $2 noqta, faylnıñ zurlığı: $3, MIME tibı: $4', 'file-nohires' => 'Yuğarı açıqlıq belän yurama yuq.', +'svg-long-desc' => 'SVG faylı, şartlı $1 × $2 noqta, faylnıñ zurlığı: $3', 'show-big-image' => 'Tulı açıqlıq', 'show-big-image-thumb' => 'Aldan qaraw zurlığı: $1 × $2 noqta', @@ -2221,6 +2249,9 @@ Yulnıñ berençe sıltaması quyma öçen tıyılğan räsemgä sıltama bulır 'tag-filter-submit' => 'Filtrlaw', 'tags-edit' => 'üzgärtü', +# Special:ComparePages +'compare-submit' => 'Çağıştır', + # Database error messages 'dberr-header' => 'Bu wiki awırlıq kiçerä', 'dberr-problems' => 'Ğafu itegez! Saytta texnik qıyınlıqlar çıqtı.', diff --git a/languages/messages/MessagesTyv.php b/languages/messages/MessagesTyv.php index bbad4a5c..3b49888f 100644 --- a/languages/messages/MessagesTyv.php +++ b/languages/messages/MessagesTyv.php @@ -62,7 +62,7 @@ $messages = array( 'tog-hideminor' => 'Сөөлгү өскерлиишкиннер арында бичии өскерлиишкиннерни чажырар', 'tog-showtoolbar' => 'Өскертир херекселдерни көргүзер (JavaScript)', 'tog-editondblclick' => 'Арынны өскертирде ийи катап базар (JavaScript)', -'tog-rememberpassword' => 'Мени сактып алыр', +'tog-rememberpassword' => 'Remember my login on this computer (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchlisthideown' => 'Хайгаарылга даңзызындан мээң өскерлиишкиннерымны чажырары', 'tog-watchlisthidebots' => 'Хайгаарылга даңзызындан роботтарның өскерлиишкиннерын чажырары', 'tog-watchlisthideminor' => 'Хайгаарылга даңзызындан бичии өскерлиишкиннерны чажырары', @@ -147,13 +147,12 @@ $messages = array( 'qbspecialpages' => 'Тускай арыннар', # Vector skin -'vector-action-delete' => 'Ырадыры', -'vector-action-move' => 'Шимчээри', -'vector-action-protect' => 'Камгалаары', -'vector-namespace-category' => 'Бөлүк', -'vector-view-edit' => 'Өскертири', -'vector-view-history' => 'Төөгүнү көөрү', -'vector-view-view' => 'Номчууру', +'vector-action-delete' => 'Ырадыры', +'vector-action-move' => 'Шимчээри', +'vector-action-protect' => 'Камгалаары', +'vector-view-edit' => 'Өскертири', +'vector-view-history' => 'Төөгүнү көөрү', +'vector-view-view' => 'Номчууру', 'errorpagetitle' => 'Алдаг', 'returnto' => '$1 деп арынже эглири.', @@ -271,7 +270,7 @@ $messages = array( # Login and logout pages 'yourname' => 'Aжыглакчының ады', 'yourpassword' => 'Чажыт сөс', -'remembermypassword' => 'Адымны сактып алыры', +'remembermypassword' => 'Мени бо компютерде сактып алыры (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'Кирери', 'nav-login-createaccount' => 'Кирери / бүрүткел бижикти бүдүрери', 'userlogin' => 'Кирери / бүрүткел бижикти бүдүрери', @@ -483,8 +482,6 @@ The password for this new account can be changed on the ''[[Special:ChangePasswo # Recent changes 'nchanges' => '$1 {{PLURAL:$1|өскерлиишкин}}', 'recentchanges' => 'Амгы өскерлиишкиннер', -'recentchanges-legend-newpage' => '$1 — чаа арын', -'recentchanges-legend-minor' => '$1 — бичии өскерлиишкин', 'recentchanges-label-minor' => 'Бо өскерлиишкин биче-дир', 'rcshowhideminor' => 'Бичии өскерлиишкиннерни $1', 'rcshowhidebots' => 'Роботтарну $1', @@ -922,6 +919,10 @@ The password for this new account can be changed on the ''[[Special:ChangePasswo 'tag-filter-submit' => 'Шүүрү', 'tags-edit' => 'өскертири', +# Special:ComparePages +'compare-page1' => 'Арын 1', +'compare-page2' => 'Арын 2', + # HTML forms 'htmlform-submit' => 'Күүcедири', diff --git a/languages/messages/MessagesUdm.php b/languages/messages/MessagesUdm.php index 0235c656..3c0d30c2 100644 --- a/languages/messages/MessagesUdm.php +++ b/languages/messages/MessagesUdm.php @@ -37,7 +37,7 @@ $namespaceNames = array( $linkTrail = '/^([a-zа-яёӝӟӥӧӵ“»]+)(.*)$/sDu'; $fallback8bitEncoding = 'windows-1251'; -$separatorTransformTable = array(',' => ' ', '.' => ',' ); +$separatorTransformTable = array( ',' => ' ', '.' => ',' ); $messages = array( # User preference toggles diff --git a/languages/messages/MessagesUg.php b/languages/messages/MessagesUg.php index 2c5d62c6..0e929755 100644 --- a/languages/messages/MessagesUg.php +++ b/languages/messages/MessagesUg.php @@ -6,7 +6,7 @@ * * @ingroup Language * @file - * @comment falls back to Uyghurche‎ (Latin) + * @comment falls back to Uighur (Arabic script) - ug-arab. */ -$fallback = 'ug-latn'; +$fallback = 'ug-arab'; diff --git a/languages/messages/MessagesUg_arab.php b/languages/messages/MessagesUg_arab.php index 4cfb5d99..ebbdfcc9 100644 --- a/languages/messages/MessagesUg_arab.php +++ b/languages/messages/MessagesUg_arab.php @@ -48,8 +48,7 @@ $messages = array( 'tog-editsection' => '[تەھرىر] ئۇلانمىسىنى چېكىپ ئابزاس تەھرىرلەشكە يول قوي', 'tog-editsectiononrightclick' => 'ماۋزۇنى چاشقىنەكتە ئوڭ چېكىپ ئابزاس تەھرىرلەشكە يول قوي (JavaScript زۆرۈر)', 'tog-showtoc' => 'مەزمۇن جەدۋىلى كۆرسەت (بىر بەتتە 3 تىن ئارتۇق ماۋزۇ بار بەتكە قارىتىلغان)', -'tog-rememberpassword' => 'بۇ كومپيۇتېردا كىرگىنىمنى ئەستە ساقلا', -'tog-editwidth' => 'تەھرىرلەش رامكىسىنى كېڭەيتىپ پۈتۈن ئېكرانغا تولدۇر', +'tog-rememberpassword' => 'بۇ كومپيۇتېردا كىرگىنىمنى ئەستە ساقلا(ئەڭ ئۇزۇن بولغاندا $1 {{PLURAL:$1|كۈن|كۈن}})', 'tog-watchcreations' => 'مەن قۇرغان بەتنى كۆزەت تىزىملىكىمگە قوش', 'tog-watchdefault' => 'مەن تەھرىرلىگەن بەتنى كۆزەت تىزىملىكىمگە قوش', 'tog-watchmoves' => 'مەن يۆتكىگەن بەتنى كۆزەت تىزىملىكىمگە قوش', @@ -193,31 +192,21 @@ $messages = array( 'faqpage' => 'Project:كۆپ كۆرۈلىدىغان مەسىلىلەر', # Vector skin -'vector-action-addsection' => 'يېڭى باش تېما قوش', -'vector-action-delete' => 'ئۆچۈر', -'vector-action-move' => 'يۆتكە', -'vector-action-protect' => 'قوغدا', -'vector-action-undelete' => 'ئەسلىگە قايتۇر', -'vector-action-unprotect' => 'قوغدىما', -'vector-namespace-category' => 'تۈر', -'vector-namespace-help' => 'ياردەم بەت', -'vector-namespace-image' => 'ھۆججەت', -'vector-namespace-main' => 'بەت', -'vector-namespace-media' => 'ۋاسىتە بېتى', -'vector-namespace-mediawiki' => 'ئۇچۇر', -'vector-namespace-project' => 'قۇرۇلۇش بېتى', -'vector-namespace-special' => 'ئالاھىدە بەت', -'vector-namespace-talk' => 'مۇنازىرە', -'vector-namespace-template' => 'قېلىپ', -'vector-namespace-user' => 'ئىشلەتكۈچى بېتى', -'vector-view-create' => 'قۇر', -'vector-view-edit' => 'تەھرىر', -'vector-view-history' => 'تارىخ كۆرسەت', -'vector-view-view' => 'ئوقۇ', -'vector-view-viewsource' => 'مەنبەنى كۆرسەت', -'actions' => 'مەشغۇلات', -'namespaces' => 'ئات بوشلۇقى', -'variants' => 'ۋارىيانتلار', +'vector-action-addsection' => 'يېڭى باش تېما قوش', +'vector-action-delete' => 'ئۆچۈر', +'vector-action-move' => 'يۆتكە', +'vector-action-protect' => 'قوغدا', +'vector-action-undelete' => 'ئەسلىگە قايتۇر', +'vector-action-unprotect' => 'قوغدىما', +'vector-simplesearch-preference' => 'ئالىي ئىزدەش تەكلىپىنى ئاچ (Vector تېرىدىلا)', +'vector-view-create' => 'قۇر', +'vector-view-edit' => 'تەھرىر', +'vector-view-history' => 'تارىخ كۆرسەت', +'vector-view-view' => 'ئوقۇ', +'vector-view-viewsource' => 'مەنبەنى كۆرسەت', +'actions' => 'مەشغۇلات', +'namespaces' => 'ئات بوشلۇقى', +'variants' => 'ۋارىيانتلار', 'errorpagetitle' => 'خاتالىق', 'returnto' => '$1 غا قايت.', @@ -278,6 +267,9 @@ $messages = array( بۇ بەتنى قايتا زىيارەت قىلىشتىن ئىلگىرى سەل كۈتۈڭ. $1', +'pool-timeout' => 'قۇلۇپنى ساقلاش ۋاقىت ھالقىدى', +'pool-queuefull' => 'قاچا ئۆچرىتى توشتى', +'pool-errorunknown' => 'نامەلۇم خاتالىق', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} ھەققىدە', @@ -462,7 +454,7 @@ $2', 'yourname' => 'ئىشلەتكۈچى ئاتى:', 'yourpassword' => 'ئىم:', 'yourpasswordagain' => 'ئاچقۇچنى قايتا بەسىڭ:', -'remembermypassword' => 'بۇ كومپيۇتېردا كىرگىنىمنى ئەستە ساقلا', +'remembermypassword' => 'بۇ كومپيۇتېردا كىرگىنىمنى ئەستە ساقلا(ئەڭ ئۇزۇن بولغاندا $1 {{PLURAL:$1|كۈن|كۈن}})', 'yourdomainname' => 'دائىرە ئاتىڭىز:', 'externaldberror' => 'بۇ سانداننى دەلىللەش خاتالىقى ياكى سىرتقى ھېساباتىڭىزنى يېڭىلاشنى چەكلىگەنلىكتىن بولغان بولۇشى مۇمكىن.', 'login' => 'تىزىمغا كىر', @@ -479,6 +471,7 @@ $2', 'gotaccount' => "ھېساباتىم بار؟ '''$1'''.", 'gotaccountlink' => 'تىزىمغا كىر', 'createaccountmail' => 'ئېلخەتتە', +'createaccountreason' => 'سەۋەب:', 'badretype' => 'سىز كىرگۈزگەن ئىم ماس كەلمىدى.', 'userexists' => 'كىرگۈزگەن ئىشلەتكۈچى ئاتى ئىشلىتىلىۋاتىدۇ. باشقا ئاتنى تاللاڭ.', @@ -607,11 +600,12 @@ $2', 'showdiff' => 'ئۆزگەرتىشنى كۆرسەت', 'anoneditwarning' => "'''ئاگاھلاندۇرۇش:''' سىز تېخى كىرمىدىڭىز. سىزنىڭ IP ئادرېسىڭىز بۇ بەتنىڭ تەھرىرلەش تارىخىغا خاتىرىلىنىدۇ.", +'anonpreviewwarning' => "''سىز تېخى تىزىمغا كىرمىدىڭىز. سىزنىڭ IP ئادرېسىڭىز بۇ بەتنىڭ تەھرىرلەش تارىخىغا خاتىرىلىنىدۇ.''", 'missingsummary' => "'''ئەسكەرتىش:''' سىز تەھرىرلەش ئۈزۈندىسى تەمىنلىمىدىڭىز. . ئەگەر ساقلانى يەنە بىر قېتىم چەكسىڭىز، تەھرىرلىگىنىڭىزنى ئۈزۈندە يوق ھالەتتە ساقلايدۇ.", 'missingcommenttext' => 'تۆۋەندە ئىزاھات كىرگۈزۈڭ.', -'missingcommentheader' => "'''ئەسكەرتىش:''' سىز ئىزاھاتقا ماۋزۇ تەمىنلىمىدىڭىز. -ئەگەر ساقلانى يەنە بىر قېتىم چەكسىڭىز، تەھرىرلىگىنىڭىزنى ماۋزۇسىز ھالەتتە ساقلايدۇ.", +'missingcommentheader' => "'''ئەسكەرتىش:''' سىز ئىزاھاتقا ماۋزۇ تەمىنلىمىدىڭىز. +ئەگەر \"{{int:savearticle}}\"نى يەنە بىر قېتىم چەكسىڭىز، تەھرىرلىگىنىڭىزنى ماۋزۇسىز ھالەتتە ساقلايدۇ.", 'summary-preview' => 'ئۈزۈندە ئالدىن كۆزىتىش:', 'subject-preview' => 'تېما/ماۋزۇنى ئالدىن كۆزەت:', 'blockedtitle' => 'ئىشلەتكۈچى چەكلەنگەن', @@ -688,7 +682,7 @@ $2', 'userjspreview' => "'''دىققەت سىز پەقەت ئۆزىڭىزنىڭ شەخسىي JavaScript نى ئالدىن كۆزىتىۋاتىسىز/سىناۋاتىسىز.''' '''ئۇ تېخى ساقلانمىدى!'''", 'userinvalidcssjstitle' => "'''ئاگاھلاندۇرۇش:''' تېرە\\\"\$1\" مەۋجۇد ئەمەس. -ئادەتلەنگەن .css ۋە .js تور بەت ماۋزۇسىغا كىچىك يېزىلىشتىكى ھەرپ ئىشلىتىلىدۇ، مەسىلەن، {{ns:user}}:Foo/monobook.css بىلەن {{ns:user}}:Foo/Monobook.css ئوخشاش ئەمەس.", +ئادەتلەنگەن .css ۋە .js تور بەت ماۋزۇسىغا كىچىك يېزىلىشتىكى ھەرپ ئىشلىتىلىدۇ، مەسىلەن، {{ns:user}}:Foo/vector.css بىلەن {{ns:user}}:Foo/Vector.css ئوخشاش ئەمەس.", 'updated' => '(يېڭىلاندى)', 'note' => "'''ئىزاھات:'''", 'previewnote' => "'''ئېسىڭىزدە بولسۇنكى بۇ پەقەتلا ئالدىن كۆزىتىش.''' @@ -730,9 +724,6 @@ $2', ئەگەر يازمىڭىزنىڭ خالىغانچە ئۆزگەرتىلىشى ياكى قايتا تارقىلىشىنى خالىمىسىڭىز، يوللىماڭ.
    سىز يوللىغان مەزمۇننىڭ ئۆزىڭىزنىڭ يازغانلىقى ياكى يەرلىك تور دائىرىسىدىن ياكى ئەركىن مەنبە ($1 دىكى تەپسىلاتنى كۆرۈڭ) دىن كەلگەنلىكىگە كاپالەتلىك قىلىڭ. '''ئىجازەتكە ئېرىشمەي تۇرۇپ يوللىماڭ!'''", -'longpagewarning' => "'''ئاگاھلاندۇرۇش:''' بۇ بەتنىڭ چوڭلۇقى $1 كىلوبايت؛ -بەزى تور كۆرگۈ چوڭلۇقى 32kb غا يېقىنلاشقان ياكى چوڭ بولغان بەتنى تەھرىرلىگەندە مەسىلە كۆرۈلۈشى مۇمكىن. -بۇ بەتنى تېخىمۇ كۆپ كىچىك بۆلەككە بۆلۈشنى ئويلىشىپ بېقىڭ.", 'longpageerror' => "'''خاتالىق: سىز يوللىغان تېكستنىڭ چوڭلۇقى $1 كىلوبايت، بۇ $2 كىلوبايتلىق ئەڭ چوڭ قىممەتتىن ئېشىپ كەتتى.''' ئۇنى ساقلىغىلى بولمايدۇ.", 'readonlywarning' => "'''ئاگاھلاندۇرۇش: ساندان قۇلۇپلىنىپ ئاسرىلىۋاتىدۇ، شۇڭلاشقا ئۆزگەرتىشىڭىزنى ساقلىيالمايسىز.''' @@ -910,6 +901,8 @@ $1", 'logdelete-failure' => "'''خاتىرىنىڭ كۆرۈنۈشچانلىقىنى تەڭشىيەلمىدى:''' $1", 'revdel-restore' => 'كۆرۈنۈشچانلىقنى ئۆزگەرت', +'revdel-restore-deleted' => 'ئۆچۈرۈلگەن تۈزىتىلگەن نەشرى', +'revdel-restore-visible' => 'كۆرۈنىدىغان تۈزىتىلگەن نەشرى', 'pagehist' => 'بەتنىڭ تارىخى', 'deletedhist' => 'ئۆچۈرۈلگەن تارىخ', 'revdelete-content' => 'مەزمۇن', @@ -977,11 +970,13 @@ $1", # Diffs 'history-title' => '"$1" نىڭ ئۆزگەرتىش خاتىرىسى', 'difference' => '(تۈزەتكەن نەشرىلىرىنىڭ پەرقى)', +'difference-multipage' => '(بەتلەر ئارىسىدىكى پەرق)', 'lineno' => '$1 -قۇر:', 'compareselectedversions' => 'تاللانغان نەشرىنى سېلىشتۇر', 'showhideselectedversions' => 'تاللانغان تۈزىتىلگەن نەشرىنى كۆرسەت/يوشۇر', 'editundo' => 'يېنىۋال', -'diff-multi' => '({{PLURAL:$1| بىر ئوتتۇرىدىكى تۈزىتىلگەن نەشرى |$1 ئوتتۇرىدىكى تۈزىتىلگەن نەشرى }} كۆرسىتىلمىدى)', +'diff-multi' => '({{PLURAL:$2|ئىشلەتكۈچى|$2 ئىشلەتكۈچى}} نىڭ{{PLURAL:$1|تۈزىتىلگەن نەشرى|$1 تۈزىتىلگەن نەشرى}} كۆرسىتىلمىدى)', +'diff-multi-manyusers' => '( $2 دىن كۆپ{{PLURAL:$2|ئىشلەتكۈچى|ئىشلەتكۈچى}} نىڭ {{PLURAL:$1|تۈزىتىلگەن نەشرى|$1 تۈزىتىلگەن نەشرى}} كۆرسىتىلمىدى)', # Search results 'searchresults' => 'ئىزدەش نەتىجىسى', @@ -1016,6 +1011,7 @@ $1", 'searchprofile-everything-tooltip' => 'ھەممە مەزمۇننى ئىزدە (مۇنازىرە بەتمۇ ئىچىدە)', 'searchprofile-advanced-tooltip' => 'ئادەتلەنگەن ئات بوشلۇقىدىن ئىزدە', 'search-result-size' => '$1 ({{PLURAL:$2|1 سۆز|$2 سۆز}})', +'search-result-category-size' => '{{PLURAL:$1|1 ئەزا|$1 ئەزا}}({{PLURAL:$2|1 تارماق تۈر|$2 تارماق تۈر}}, {{PLURAL:$3|1 ھۆججەت|$3 ھۆججەت}})', 'search-result-score' => 'باغلىنىشچانلىق: $1%', 'search-redirect' => '($1 قايتا نىشانلا)', 'search-section' => '(ئابزاس $1)', @@ -1092,6 +1088,7 @@ $1", 'contextlines' => 'ھەر ئۇلانمىدىكى قۇر سانى:', 'contextchars' => 'ھەر قۇردىكى ھەرپ سانى:', 'stub-threshold' => 'قىسقا بەت ئۇلانمىسى فورمات چەك قىممىتى (بايت) :', +'stub-threshold-disabled' => 'چەكلەنگەن', 'recentchangesdays' => 'يېقىنقى ئۆزگەرتىشنىڭ كۆرۈنىدىغان كۈن سانى:', 'recentchangesdays-max' => 'ئەڭ چوڭ $1 {{PLURAL:$1|كۈن|كۈن}}', 'recentchangescount' => 'كۆرسىتىدىغان تەھرىرنىڭ كۆڭۈلدىكى سانى:', @@ -1125,6 +1122,7 @@ $1", 'prefs-files' => 'ھۆججەتلەر', 'prefs-custom-css' => 'ئىختىيارى CSS', 'prefs-custom-js' => 'ئىختىيارى JS', +'prefs-common-css-js' => 'ھەممە تېرىدە ھەمبەھىرلەنگەن CSS/JS:', 'prefs-reset-intro' => 'سىز بۇ بەتنى ئىشلىتىپ تەڭشەكلىرىڭىزنى تور بېكەتنىڭ كۆڭۈلدىكى قىممىتىگە تەڭشىيەلەيسىز. بۇ مەشغۇلاتتىن يانغىلى بولمايدۇ.', 'prefs-emailconfirm-label' => 'ئېلخەت جەزملەش:', @@ -1169,7 +1167,9 @@ HTML بەلگىسىنى تەكشۈرۈڭ.', 'prefs-advancedrendering' => 'ئالىي تاللانما', 'prefs-advancedsearchoptions' => 'ئالىي تاللانما', 'prefs-advancedwatchlist' => 'ئالىي تاللانما', -'prefs-display' => 'كۆرسىتىش تاللانما', +'prefs-displayrc' => 'كۆرسىتىش تاللانما', +'prefs-displaysearchoptions' => 'كۆرسىتىش تاللانما', +'prefs-displaywatchlist' => 'كۆرسىتىش تاللانما', 'prefs-diffs' => 'پەرقلەر', # User rights @@ -1255,6 +1255,7 @@ HTML بەلگىسىنى تەكشۈرۈڭ.', 'right-hideuser' => 'ئىشلەتكۈچى ئاتىنى چەكلە، كۆپچىلىككە نىسبەتەن يوشۇر', 'right-ipblock-exempt' => 'IP چەكلەش، ئاپتوماتىك چەكلەش ۋە دائىرە چەكلەشتىن ئايلىنىپ ئۆت', 'right-proxyunbannable' => 'ۋاكالەتچىنى ئاپتوماتىك چەكلەشتىن ئايلىنىپ ئۆت', +'right-unblockself' => 'چەكلەشنى بىكار قىل', 'right-protect' => 'قوغداش دەرىجىسىنى ئۆزگەرتىپ، قوغدالغان بەتنى تەھرىرلە', 'right-editprotected' => 'قوغدالغان بەتنى تەھرىرلە (زەنجىرسىمان قۇلۇپلانمىغان)', 'right-editinterface' => 'ئىشلەتكۈچى كۆرۈنمە يۈزىنى تەھرىرلە', @@ -1277,7 +1278,6 @@ HTML بەلگىسىنى تەكشۈرۈڭ.', 'right-siteadmin' => 'ساندان قۇلۇپلا ۋە قۇلۇپ ئاچ', 'right-reset-passwords' => 'باشقا ئىشلەتكۈچى ئىمنى ئەسلىگە قايتۇر', 'right-override-export-depth' => 'بەت قەۋەتلىك ئۇلىنىشى بار بەتنى چىقار', -'right-versiondetail' => 'كېڭەيتىلگەن يۇمشاق دېتال نەشر ئۇچۇرىنى كۆرسەت', 'right-sendemail' => 'باشقا ئىشلەتكۈچىگە ئېلخەت يوللا', # User rights log @@ -1328,14 +1328,9 @@ HTML بەلگىسىنى تەكشۈرۈڭ.', 'recentchanges-legend' => 'يېقىنقى ئۆزگەرتىش تاللانمىسى', 'recentchangestext' => 'بۇ wiki نىڭ يېقىنقى ئۆزگىرىشىنى ئىز قوغلا.', 'recentchanges-feed-description' => 'بۇ قانالنىڭ wiki دىكى يېقىنقى ئۆزگىرىشىنى ئىز قوغلا.', -'recentchanges-label-legend' => 'رەسىم چۈشەندۈرۈشى :$1', -'recentchanges-legend-newpage' => '$1 - يېڭى بەت', 'recentchanges-label-newpage' => 'بۇ قېتىملىق تەھىر يېڭى بەتتىن بىرنى قۇرىدۇ', -'recentchanges-legend-minor' => '$1 - ئازراقلا تەھرىر', 'recentchanges-label-minor' => 'بۇ ئازراقلا تەھرىرلەش', -'recentchanges-legend-bot' => '$1 - ماشىنا ئادەم تەھرىرى', 'recentchanges-label-bot' => 'بۇ تەھرىرنى ماشىنا ئادەم ئېلىپ بارغان', -'recentchanges-legend-unpatrolled' => '$1 - كۆزىتىلمىگەن تەھرىر', 'recentchanges-label-unpatrolled' => 'بۇ تەھرىر تېخى كۆزىتىلمىگەن', 'rcnote' => "تۆۋەندىكى $4 $5 يېقىنقى {{PLURAL:$2|كۈن|'''$2''' كۈن}} ئىچىدىكى {{PLURAL:$1| '''1''' ئۆزگەرتىش| '''$1''' ئۆزگەرتىش}} خاتىرىسى", 'rcnotefrom' => "تۆۋەندىكىسى '''$2''' نىڭ ئۆزگەرتىشى (ئەڭ كۆپ بولغاندا '''$1''' كۆرسىتىدۇ )", @@ -1382,6 +1377,8 @@ HTML بەلگىسىنى تەكشۈرۈڭ.', 'upload_directory_missing' => 'يۈكلەش مۇندەرىجىسى ($1) يوقالغان، تور بەت مۇلازىمىتىرى قۇرالمايدۇ.', 'upload_directory_read_only' => 'تور مۇلازىمىتىرىنىڭ يۈكلەش مۇندەرىجىسى ($1) گە يېزىش ھوقۇقى يوق.', 'uploaderror' => 'يۈكلەش خاتالىقى', +'upload-recreate-warning' => "'''ئاگاھلاندۇرۇش: ئوخشاش ئاتلىق ھۆججەتتىن بىرى ئىلگىرى ئۆچۈرۈلگەن ياكى باشقا جايغا يۆتكەلگەن.''' +پايدىلىنىش ئۈچۈن بۇ بەتنىڭ ئۆچۈرۈش ۋە يۆتكەش خاتىرىسى بۇ جايدا تەمىنلەندى:", 'uploadtext' => "تۆۋەندىكى كۆزنەكنى ئىشلىتىپ ھۆججەت يۈكلەڭ. ئىلگىرى يۈكلەنگەن ھۆججەتلەرنى كۆرۈش ياكى ئىزدەشتە [[Special:FileList|ھۆججەت يۈكلەش تىزىملىكى]]گە كىرىپ، (يېڭىدىن) يۈكلەنگەننى [[Special:Log/upload|يۈكلەش خاتىرىسى]]دە خاتىرىلىنىدۇ، ئۆچۈرۈلگىنى [[Special:Log/delete|ئۆچۈرۈش خاتىرىسى]]دە خاتىرىلىنىدۇ. @@ -1417,6 +1414,17 @@ HTML بەلگىسىنى تەكشۈرۈڭ.', 'filetype-banned-type' => "'''\".\$1\"''' يول قويمايدىغان ھۆججەت تىپى. يول قويىدىغان {{PLURAL:\$3|بىر|بىر قانچە}} ھۆججەت تىپى \$2.", 'filetype-missing' => 'بۇ ھۆججەتنىڭ كېڭەيتىلگەن ئاتى يوق (مەسىلەن ".jpg").', +'empty-file' => 'يوللىغان ھۆججىتىڭىز بوش.', +'file-too-large' => 'يوللىغان ھۆججىتىڭىز بەك چوڭ.', +'filename-tooshort' => 'ھۆججەت ئاتى بەك قىسقا.', +'filetype-banned' => 'بۇ خىل ھۆججەت چەكلەنگەن.', +'verification-error' => 'ھۆججەت دەلىللەشتىن ئۆتەلمىدى.', +'hookaborted' => 'سىز سىنىغان ئۆزگەرتىش قىستۇرما ئىلمەك تەرىپىدىن توختىتىلدى.', +'illegal-filename' => 'ھۆججەت ئاتىغا يول قويمايدۇ.', +'overwrite' => 'مەۋجۇد ھۆججەت قاپلاشقا يول قويمايدۇ.', +'unknown-error' => 'نامەلۇم خاتالىق كۆرۈلدى.', +'tmp-create-error' => 'ۋاقىتلىق ھۆججەت قۇرالمىدى.', +'tmp-write-error' => 'ۋاقىتلىق ھۆججەت يېزىش خاتالىقى.', 'large-file' => 'تەۋسىيە قىلىنىدىغان ھۆججەت چوڭلۇقى $1 دىن ئېشىپ كەتمەيدۇ؛ بۇ ھۆججەتنىڭ چوڭلۇقى $2.', 'largefileserver' => 'بۇ ھۆججەتنىڭ چوڭلۇقى مۇلازىمىتىر سەپلىمىسى يول قويىدىغان ھۆججەتتىنمۇ چوڭ.', @@ -1447,13 +1455,14 @@ HTML بەلگىسىنى تەكشۈرۈڭ.', 'file-exists-duplicate' => 'بۇ ھۆججەت تۆۋەندىكى{{PLURAL:$1|بىر|بىر قانچە}} ھۆججەت بىلەن تەكرار:', 'file-deleted-duplicate' => 'ئوخشاش ئاتتىكى بىر ھۆججەت ([[:$1]]) بايىلا ئۆچۈرۈلگەن. سىز قايتا يۈكلەشتىن ئىلگىرى شۇ ھۆججەتنىڭ ئۆچۈرۈش خاتىرىسىنى تەكشۈرۈپ بېقىڭ.', -'successfulupload' => 'مۇۋەپپەقىيەتلىك يۈكلەندى', 'uploadwarning' => 'يۈكلەش ئاگاھلاندۇرۇشى', 'uploadwarning-text' => 'تۆۋەندىكى ھۆججەت چۈشەندۈرۈشىنى ئۆزگەرتىپ ئاندىن قايتا سىناڭ.', 'savefile' => 'ھۆججەت ساقلا', 'uploadedimage' => '"[[$1]]" يۈكلەنگەن', 'overwroteimage' => ' "[[$1]]" نىڭ يېڭى نەشرى يۈكلەندى', 'uploaddisabled' => 'يۈكلەش چەكلەنگەن', +'copyuploaddisabled' => 'URL ئارقىلىق يۈكلەش ئىقتىدارى چەكلەنگەن.', +'uploadfromurl-queued' => 'يۈكلەش قاتارغا تىزىلدى.', 'uploaddisabledtext' => 'ھۆججەت يۈكلەش چەكلەنگەن.', 'php-uploaddisabledtext' => 'PHP ھۆججەت يۈكلەش چەكلەنگەن. file_uploads تەڭشىكىنى تەكشۈرۈڭ.', @@ -1475,6 +1484,14 @@ HTML بەلگىسىنى تەكشۈرۈڭ.', قولايلىق بولۇشى ئۈچۈن بۇ ھۆججەتنىڭ ئۆچۈرۈش خاتىرىسى تۆۋەندە تەمىنلەندى:", 'filename-bad-prefix' => "سىز يۈكلىگەن ھۆججەتنىڭ ئاتى'''\\\"\$1\\\"''' دىن باشلىنىپتۇ، بۇ خىل مەنىسى يوق ھۆججەت ئاتىنى رەقەملىك فوتو ئاپپارات ئۆزلۈكىدىن ھاسىل قىلىدۇ. ھۆججىتىڭىزگە تېخىمۇ ئەھمىيەتلىك ھۆججەت ئاتىدىن بىرنى تاللاڭ.", +'upload-success-subj' => 'مۇۋەپپەقىيەتلىك يۈكلەندى', +'upload-success-msg' => '[$2] دىن مۇۋەپپەقىيەتلىك يۈكلىدىڭىز. ئۇنىڭ مەۋجۇد ئورنى: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'يۈكلەش كاشىلىسى', +'upload-failure-msg' => '[$2] دىن يۈكلەشتە خاتالىق بار: + +$1', +'upload-warning-subj' => 'يۈكلەش ئاگاھلاندۇرۇشى', +'upload-warning-msg' => '[$2] دىن يۈكلىگىنىڭىزدىن خاتالىق كۆرۈلدى. سىز [[Special:Upload/stash/$1|يۈكلەش جەدۋىلى]]گە قايتىپ مەسىلىنى تۈزەتسىڭىز بولىدۇ.', 'upload-proto-error' => 'كېلىشىم خاتالىقى', 'upload-proto-error-text' => 'يىراقتىن يۈكلەيدىغان URL http:// ياكى ftp:// دىن باشلىنىدۇ.', @@ -1655,7 +1672,6 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى 'statistics-edits-average' => 'ھەر بىر بەتنىڭ ئوتتۇرىچە تەھرىر سانى', 'statistics-views-total' => 'كۆرسىتىش ئومۇمى سانى', 'statistics-views-peredit' => 'ھەر قېتىملىق تەھرىرنى كۆرسىتىش سانى', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue خىزمەت قاتارى] ئۇزۇنلۇقى', 'statistics-users' => 'خەتلەتكەن [[Special:ListUsers|ئىشلەتكۈچى]]', 'statistics-users-active' => 'ئاكتىپ ئىشلەتكۈچى', 'statistics-users-active-desc' => 'ئالدىنقى {{PLURAL:$1|كۈن|$1 كۈن}} دىكى مەشغۇلات قىلغان ئىشلەتكۈچىلەر', @@ -1849,34 +1865,40 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى 'listgrouprights-removegroup-self-all' => 'شەخسىي ھېساباتىمدىن ھەممە گۇرۇپپىنى چىقىرىۋەت', # E-mail user -'mailnologin' => 'يوللايدىغان ئادرېس يوق', -'mailnologintext' => 'سىز ئالدى بىلەن [[Special:UserLogin|تىزىمغا كىر]]ىپ، [[Special:Preferences|مايىللىق]] تەڭشىكىدە ئىناۋەتلىك ئېلخەت ئادرېسىڭىزدىن بىرسى بولغاندا ئاندىن باشقا ئىشلەتكۈچىلەرگە ئېلخەت يوللىيالايسىز.', -'emailuser' => 'بۇ ئىشلەتكۈچىگە ئېلخەت يوللا', -'emailpage' => 'بۇ ئىشلەتكۈچىگە ئېلخەت يوللا', -'emailpagetext' => 'سىز تۆۋەندىكى جەدۋەلنى ئىشلىتىپ، بۇ ئىشلەتكۈچىگە ئېلخەت يوللىيالايسىز. +'mailnologin' => 'يوللايدىغان ئادرېس يوق', +'mailnologintext' => 'سىز ئالدى بىلەن [[Special:UserLogin|تىزىمغا كىر]]ىپ، [[Special:Preferences|مايىللىق]] تەڭشىكىدە ئىناۋەتلىك ئېلخەت ئادرېسىڭىزدىن بىرسى بولغاندا ئاندىن باشقا ئىشلەتكۈچىلەرگە ئېلخەت يوللىيالايسىز.', +'emailuser' => 'بۇ ئىشلەتكۈچىگە ئېلخەت يوللا', +'emailpage' => 'بۇ ئىشلەتكۈچىگە ئېلخەت يوللا', +'emailpagetext' => 'سىز تۆۋەندىكى جەدۋەلنى ئىشلىتىپ، بۇ ئىشلەتكۈچىگە ئېلخەت يوللىيالايسىز. [[Special:Preferences|ئىشلەتكۈچى مايىللىقىڭىز]]دىكى ئېلخەت ئادرېسى "يوللىغۇچى" ستونىدا كۆرۈنىدۇ، مۇشۇنداق بولغاندا شۇ ئىشلەتكۈچى سىزگە بىۋاسىتە جاۋاب قايتۇرالايدۇ.', -'usermailererror' => 'Mail ئوبيېكتى خاتالىق قايتۇردى:', -'defemailsubject' => '{{SITENAME}} ئېلخەت', -'noemailtitle' => 'ئېلخەت ئادرېس يوق', -'noemailtext' => 'بۇ ئىشلەتكۈچى تېخى ئىناۋەتلىك ئېلخەت ئادرېسى بەلگىلىمىگەن.', -'nowikiemailtitle' => 'ئېلخەتكە يول قويمايدۇ', -'nowikiemailtext' => 'بۇ ئىشلەتكۈچى باشقىلارنىڭ ئېلخىتىنى قوبۇل قىلماسلىقنى تاللىغان.', -'email-legend' => 'باشقا {{SITENAME}} ئىشلەتكۈچىگە ئېلخەت يوللا', -'emailfrom' => 'يوللىغۇچى:', -'emailto' => 'قوبۇللىغۇچى:', -'emailsubject' => 'تېما:', -'emailmessage' => 'ئۇچۇر:', -'emailsend' => 'يوللا', -'emailccme' => 'ئۇچۇرۇمنىڭ كۆچۈرۈلمىسىدىن بىرنى ئېلخىتىمگە يوللا.', -'emailccsubject' => 'ئۇچۇرىڭىزنى كۆچۈرۈدىغان ئورۇن: $1: $2', -'emailsent' => 'ئېلخەت يوللاندى', -'emailsenttext' => 'ئېلخىتىڭىز يوللاندى.', -'emailuserfooter' => '$1 بۇ ئېلخەتنى $2 غا {{SITENAME}} نىڭ "ئېلخەت ئىشلەتكۈچى" ئىقتىدارى ئارقىلىق يوللانغان.', +'usermailererror' => 'Mail ئوبيېكتى خاتالىق قايتۇردى:', +'defemailsubject' => '{{SITENAME}} ئېلخەت', +'usermaildisabled' => 'ئىشلەتكۈچى ئېلخەت چەكلەنگەن', +'usermaildisabledtext' => 'سىز بۇ wiki دىكى باشقا ئىشلەتكۈچىگە ئېلخەت يوللىيالمايسىز.', +'noemailtitle' => 'ئېلخەت ئادرېس يوق', +'noemailtext' => 'بۇ ئىشلەتكۈچى تېخى ئىناۋەتلىك ئېلخەت ئادرېسى بەلگىلىمىگەن.', +'nowikiemailtitle' => 'ئېلخەتكە يول قويمايدۇ', +'nowikiemailtext' => 'بۇ ئىشلەتكۈچى باشقىلارنىڭ ئېلخىتىنى قوبۇل قىلماسلىقنى تاللىغان.', +'email-legend' => 'باشقا {{SITENAME}} ئىشلەتكۈچىگە ئېلخەت يوللا', +'emailfrom' => 'يوللىغۇچى:', +'emailto' => 'قوبۇللىغۇچى:', +'emailsubject' => 'تېما:', +'emailmessage' => 'ئۇچۇر:', +'emailsend' => 'يوللا', +'emailccme' => 'ئۇچۇرۇمنىڭ كۆچۈرۈلمىسىدىن بىرنى ئېلخىتىمگە يوللا.', +'emailccsubject' => 'ئۇچۇرىڭىزنى كۆچۈرۈدىغان ئورۇن: $1: $2', +'emailsent' => 'ئېلخەت يوللاندى', +'emailsenttext' => 'ئېلخىتىڭىز يوللاندى.', +'emailuserfooter' => '$1 بۇ ئېلخەتنى $2 غا {{SITENAME}} نىڭ "ئېلخەت ئىشلەتكۈچى" ئىقتىدارى ئارقىلىق يوللانغان.', + +# User Messenger +'usermessage-summary' => 'سىستېما ئۇچۇرىنى ساقلاپ قال', +'usermessage-editor' => 'سىستېما خەۋەرچىسى', # Watchlist 'watchlist' => 'كۆزەت تىزىملىكىم', 'mywatchlist' => 'كۆزەت تىزىملىكىم', -'watchlistfor' => "('''$1''' نىڭ كۆزەت تىزىملىكى)", +'watchlistfor2' => '$1 $2 ئۈچۈن', 'nowatchlist' => 'كۆزەت تىزىملىكىڭىز بوش.', 'watchlistanontext' => '$1 كۆزەت تىزىملىكىڭىزنى كۆرۈپ تەھرىرلەڭ.', 'watchnologin' => 'تىزىمغا كىرمىدى', @@ -1998,7 +2020,10 @@ $UNWATCHURL زىيارەت قىلىڭ 'revertpage-nouser' => '(چىقىرىۋېتىلگەن ئىشلەتكۈچى)نىڭ تەھرىرىدىن [[User:$1|$1]] نىڭ ئاخىرقى تۈزىتىلگەن نەشرىگە ئەاسلىگە كەلتۈرۈلدى', 'rollback-success' => '$1 نىڭ تەھرىرى ئەسلىگە كەلتۈرۈلدى؛ $2 نىڭ ئاخىرقى تۈزىتىلگەن نەشرىگە ئۆزگەرتىلدى.', -'sessionfailure' => 'تىزىمغا كىرگەندە مەسىلە كۆرۈلگەندەك تۇرىدۇ؛ + +# Edit tokens +'sessionfailure-title' => 'تىزىمغا كىرىش ئۇچۇرى مەغلۇپ بولدى', +'sessionfailure' => 'تىزىمغا كىرگەندە مەسىلە كۆرۈلگەندەك تۇرىدۇ؛ قوغدىنىش تەدبىرى سۈپىتىدە بۇ مەشغۇلات بىكار قىلىندى. \\"كەينى\\"نى چېكىپ قايتا سىناڭ.', @@ -2135,19 +2160,22 @@ $1', 'month' => 'ئايدىن بۇيان (ياكى ئىلگىرى):', 'year' => 'يىلدىن بۇيان (ياكى ئىلگىرى):', -'sp-contributions-newbies' => 'يېڭى قۇرۇلغان ئىشلەتكۈچى تۆھپىسىنىلا كۆرسەت', -'sp-contributions-newbies-sub' => 'يېڭى ھېسابات', -'sp-contributions-newbies-title' => 'يېڭى ھېساباتنىڭ ئىشلەتكۈچى تۆھپىسى', -'sp-contributions-blocklog' => 'چەكلەنگەن خاتىرە', -'sp-contributions-deleted' => 'ئۆچۈرۈلگەن ئىشلەتكۈچىنىڭ تۆھپىسى', -'sp-contributions-logs' => 'خاتىرە', -'sp-contributions-talk' => 'مۇنازىرە', -'sp-contributions-userrights' => 'ئىشلەتكۈچى ھوقۇقى باشقۇرۇش', -'sp-contributions-blocked-notice' => 'بۇ ئىشلەتكۈچى نۆۋەتتە چەكلەنگەن. +'sp-contributions-newbies' => 'يېڭى قۇرۇلغان ئىشلەتكۈچى تۆھپىسىنىلا كۆرسەت', +'sp-contributions-newbies-sub' => 'يېڭى ھېسابات', +'sp-contributions-newbies-title' => 'يېڭى ھېساباتنىڭ ئىشلەتكۈچى تۆھپىسى', +'sp-contributions-blocklog' => 'چەكلەنگەن خاتىرە', +'sp-contributions-deleted' => 'ئۆچۈرۈلگەن ئىشلەتكۈچىنىڭ تۆھپىسى', +'sp-contributions-logs' => 'خاتىرە', +'sp-contributions-talk' => 'مۇنازىرە', +'sp-contributions-userrights' => 'ئىشلەتكۈچى ھوقۇقى باشقۇرۇش', +'sp-contributions-blocked-notice' => 'بۇ ئىشلەتكۈچى نۆۋەتتە چەكلەنگەن. پايدىلىنىش ئۈچۈن يېقىنقى چەكلەش خاتىرە تۈرلىرى تۆۋەندە تەمىنلەندى:', -'sp-contributions-search' => 'تۆھپە ئىزدە', -'sp-contributions-username' => 'IP ئادرېس ياكى ئىشلەتكۈچى ئاتى:', -'sp-contributions-submit' => 'ئىزدە', +'sp-contributions-blocked-notice-anon' => 'بۇ IP ئادرېس نۆۋەتتە چەكلەنگەن. +پايدىلىنىش ئۈچۈن تۆۋەندە يېقىنقى چەكلەش خاتىرە تۈرلىرى تەمىنلەندى:', +'sp-contributions-search' => 'تۆھپە ئىزدە', +'sp-contributions-username' => 'IP ئادرېس ياكى ئىشلەتكۈچى ئاتى:', +'sp-contributions-toponly' => 'ئەڭ يېڭى تۈزىتىلگەن نەشرىنىلا كۆرسەت', +'sp-contributions-submit' => 'ئىزدە', # What links here 'whatlinkshere' => 'بۇ جايدىكى ئۇلانما', @@ -2208,7 +2236,6 @@ $1', 'ipb-edit-dropdown' => 'چەكلەش سەۋەبىنى تەھرىرلە', 'ipb-unblock-addr' => '$1 چەكلەشنى بىكار قىل', 'ipb-unblock' => 'چەكلەش بىكار قىلىغان ئىشلەتكۈچى ئاتى ياكى IP ئادرېس', -'ipb-blocklist-addr' => '$1 نىڭ نۆۋەتتىكى چەكلىشى', 'ipb-blocklist' => 'نۆۋەتتىكى چەكلەشنى كۆرسەت', 'ipb-blocklist-contribs' => '$1 نىڭ ئىشلەتكۈچى تۆھپىسى', 'unblockip' => 'چەكلەش بىكار قىلىنغان ئىشلەتكۈچى', @@ -2286,6 +2313,8 @@ $1 ئاللىبۇرۇن چەكلەنگەن. 'cant-block-while-blocked' => 'ئەگەر سىز چەكلەنسىڭىز باشقىلارنى چەكلىيەلمەيسىز.', 'cant-see-hidden-user' => 'سىز چەكلىمەكچى بولغان ئىشلەتكۈچى ئاللىبۇرۇن چەكلىنىپ يوشۇرۇلغان. ھازىر سىزنىڭ ئىشلەتكۈچى يوشۇرۇش ھوقۇقىڭىز يوق، سىز بۇ چەكلەنگەن ئىشلەتكۈچىنى كۆرسىتىپ ياكى تەھرىرلىيەلمەيسىز.', +'ipbblocked' => 'سىز بااشقا ئىشلەتكۈچىنى چەكلەپ ياكى چەكلەشنى بىكار قىلالمايسىز چۈنكى ئۆزىڭىز چەكلەندىڭىز.', +'ipbnounblockself' => 'سىز ئۆزىڭىزنىڭ چەكلىنىشىنى بىكارقىلالمايسىز.', # Developer tools 'lockdb' => 'سانداننى قۇلۇپلا', @@ -2382,6 +2411,7 @@ $1 ئاللىبۇرۇن چەكلەنگەن. 'immobile-source-page' => 'بۇ بەتنى يۆتكىگىلى بولمايدۇ.', 'immobile-target-page' => 'بۇ نىشان ماۋزۇغا يۆتكىگىلى بولمايدۇ.', 'imagenocrossnamespace' => 'ھۆججەتنى غەيرى ھۆججەت ئات بوشلۇقىغا يۆتكىگىلى بولمايدۇ.', +'nonfile-cannot-move-to-file' => 'غەيرى ھۆججەتنى ھۆججەت ئات بوشلۇقىغا يۆتكىگىلى بولمايدۇ.', 'imagetypemismatch' => 'بۇ يېڭى كېڭەيتىلگەن ئات بىلەن باشقا تىپ ماسلاشمىدى.', 'imageinvalidfilename' => 'نىشان ھۆججەت ئاتى ئىناۋەتسىز', 'fix-double-redirects' => 'ئەسلى ماۋزۇغا قايتا نىشانلانغان ھەممە ئۇلىنىشنى يېڭىلا.', @@ -2460,6 +2490,7 @@ $1 ئاللىبۇرۇن چەكلەنگەن. 'importstart' => 'بەت ئەكىرىۋاتىدۇ…', 'import-revision-count' => '$1 {{PLURAL:$1|تۈزىتىش|تۈزىتىش}}', 'importnopages' => 'ئەكىرىدىغان بەت يوق.', +'imported-log-entries' => '$1 {{PLURAL:$1|خاتىرە تۈرى|خاتىرە تۈرى}} ئەكىرىلدى.', 'importfailed' => 'ئەكىرىش مەغلۇپ بولدى: $1', 'importunknownsource' => 'نامەلۇم مەنبە ئەكىرىش تىپى', 'importcantopen' => 'ئەكىرگەن ھۆججەتنى ئاچالمىدى', @@ -2559,6 +2590,8 @@ $1 ئاللىبۇرۇن چەكلەنگەن. 'tooltip-rollback' => '"ئەسلىگە قايتۇر" بىر چېكىلسە ئالدىنقى تۆھپىكارنىڭ تەھرىرىلىگەن ھالىتىگە قايتۇرىدۇ.', 'tooltip-undo' => '\\"يېنىۋال\\" تەھرىرلەش ھالىتىدە ئەسلىگە كەلتۈرۈش ئۈچۈن ئالدىن كۆزىتىش ھالىتىدىن تەھرىرلەشنى ئاچىدۇ ئۇ قىسقىچە مەزمۇنغا سەۋەبىنى قوشۇشغا يول قويىدۇ.', +'tooltip-preferences-save' => 'مايىللىق ساقلا', +'tooltip-summary' => 'قىسقىچە ئۈزۈندە كىرگۈزۈڭ', # Metadata 'nodublincore' => 'Dublin Core RDF مېتا سانلىق مەلۇماتىنى بۇ مۇلازىمىتىردا ئىشلەتكىلى بولمايدۇ.', @@ -2653,14 +2686,17 @@ $1', 'imagemaxsize' => "سۈرەت چوڭلۇق چەكلىمىسى:
    ''(ھۆججەت چۈشەندۈرۈش بېتى ئۈچۈن)''", 'thumbsize' => 'كىچىك سۈرەت چوڭلۇقى:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|بەت|بەت}}', -'file-info' => '(ھۆججەت چوڭلۇقى: $1, MIME تىپى: $2)', -'file-info-size' => '($1×$2 پىكسېل، ھۆججەت چوڭلۇقى: $3، MIME تىپى: $4)', +'file-info' => 'ھۆججەت چوڭلۇقى: $1, MIME تىپى: $2', +'file-info-size' => '$1×$2 پىكسېل، ھۆججەت چوڭلۇقى: $3، MIME تىپى: $4', 'file-nohires' => 'يۇقىرىراق پەرق ئېتىش نىسبىتى يوق.', -'svg-long-desc' => '(SVG ھۆججىتى، ئاتاقتىكى چوڭلۇقى $1×$2 نۇقتا، ھۆججەت چوڭلۇقى: $3)', +'svg-long-desc' => 'SVG ھۆججىتى، ئاتاقتىكى چوڭلۇقى $1×$2 نۇقتا، ھۆججەت چوڭلۇقى: $3', 'show-big-image' => 'تولۇق ئېنىقلىق دەرىجىسى', 'show-big-image-thumb' => 'بۇ ئالدىن كۆزىتىشنىڭ چوڭلۇقى: $1 × $2 نۇقتا', 'file-info-gif-looped' => 'دەۋرىيلەنگەن', 'file-info-gif-frames' => '$1 {{PLURAL:$1|كاندۇك|كاندۇك}}', +'file-info-png-looped' => 'دەۋرىيلەنگەن', +'file-info-png-repeat' => '$1 {{PLURAL:$1|قېتىم|قېتىم}} قويۇلدى', +'file-info-png-frames' => '$1 {{PLURAL:$1|كاندۇك|كاندۇك}}', # Special:NewFiles 'newimages' => 'يېڭى ھۆججەت كارىدورى', @@ -2974,31 +3010,31 @@ $1', 'limitall' => 'ھەممىسى', # E-mail address confirmation -'confirmemail' => 'جەزملەش ئېلخەت ئادرېسى', -'confirmemail_noemail' => 'سىز ئۆزىڭىزنىڭ [[Special:Preferences|user مايىللىق]] تەڭشىكىڭىزگە ئىناۋەتلىك ئېلخەت ئادرېسى كىرگۈزمەپسىز.', -'confirmemail_text' => '{{SITENAME}} ئېلخەت ئىقتىدارى ئىشلىتىشتىن ئىلگىرى ئېلخەت ئادرېسىڭىزنى دەلىللەشنى تەلەپ قىلىدۇ. +'confirmemail' => 'جەزملەش ئېلخەت ئادرېسى', +'confirmemail_noemail' => 'سىز ئۆزىڭىزنىڭ [[Special:Preferences|user مايىللىق]] تەڭشىكىڭىزگە ئىناۋەتلىك ئېلخەت ئادرېسى كىرگۈزمەپسىز.', +'confirmemail_text' => '{{SITENAME}} ئېلخەت ئىقتىدارى ئىشلىتىشتىن ئىلگىرى ئېلخەت ئادرېسىڭىزنى دەلىللەشنى تەلەپ قىلىدۇ. تۆۋەندىكى كۇنۇپكىنى چەكسىڭىز ئاكتىپلاش ئېلخىتىدىن بىرنى سىزگە ئەۋەتىدۇ. ئۇ ئىلخەتتە بىر قۇر ئۇلانما كود بار؛ توركۆرگۈڭىزدە بۇ ئۇلانمىنى يۈكلەپ ئېلخەت ئادرېسىڭىزنىڭ ئىناۋەتلىكلىكىنى جەزملەڭ.', -'confirmemail_pending' => 'جەزملەش كودى ئېلخەت ئادرېسىڭىزغا يوللاندى؛ +'confirmemail_pending' => 'جەزملەش كودى ئېلخەت ئادرېسىڭىزغا يوللاندى؛ ئەگەر ھېساباتىڭىزنى يېقىندا قۇرغان بولسىڭىز، بىر قانچە مىنۇتتىن كېيىن تاپشۇرۇۋېلىشىڭىز مۇمكىن. ئەگەر تاپشۇرۇۋالمىغان بولسىڭىز، يېڭىدىن بىرنى ئىلتىماس قىلىڭ.', -'confirmemail_send' => 'جەزملەش كودىنى ئېلخەتكە يوللا', -'confirmemail_sent' => 'جەزملەش ئېلخىتى يوللاندى.', -'confirmemail_oncreate' => 'جەزملەش كودى ئېلخەت ئادرېسىڭىزغا يوللاندى. +'confirmemail_send' => 'جەزملەش كودىنى ئېلخەتكە يوللا', +'confirmemail_sent' => 'جەزملەش ئېلخىتى يوللاندى.', +'confirmemail_oncreate' => 'جەزملەش كودى ئېلخەت ئادرېسىڭىزغا يوللاندى. بۇ كود سىزنىڭ تىزىمغا كىرىشىڭىزنى تەلەپ قىلمايدۇ، ئەمما سىز بۇ wiki دىكى ھەر قانداق ئېلخەت ئىقتىدارىنى قوزغاتماقچى بولسىڭىز چوقۇم بۇ كودنى تاپشۇرۇشىڭىز لازىم.', -'confirmemail_sendfailed' => '{{SITENAME}} جەزملەش ئېلخىتى يوللىيالمىدى +'confirmemail_sendfailed' => '{{SITENAME}} جەزملەش ئېلخىتى يوللىيالمىدى ئېلخەت ئادرېسىڭىزدا قانۇنسىز ھەرپ بار يوقلۇقىنى تەكشۈرۈڭ. ئېلخەت يوللىغۇچى جاۋابى: $1', -'confirmemail_invalid' => 'ئىناۋەتسىز جەزملەش كودى. +'confirmemail_invalid' => 'ئىناۋەتسىز جەزملەش كودى. بۇ كودنىڭ ۋاقتى ئۆتكەن بولۇشى مۇمكىن.', -'confirmemail_needlogin' => 'سىز $1 ئارقىلىق ئېلخەت ئادرېسىڭىزنى جەزملەڭ.', -'confirmemail_success' => 'ئېلخەت ئادرېسىڭىز جەزملەندى. +'confirmemail_needlogin' => 'سىز $1 ئارقىلىق ئېلخەت ئادرېسىڭىزنى جەزملەڭ.', +'confirmemail_success' => 'ئېلخەت ئادرېسىڭىز جەزملەندى. سىز ھازىر [[Special:UserLogin|تىزىمغا كىر]]ىپ، wiki بېكەتنى ئىشلىتەلەيسىز.', -'confirmemail_loggedin' => 'ئېلخەت ئادرېسىڭىز ھازىر جەزملەندى.', -'confirmemail_error' => 'جەزملەش جەريانىدا خاتالىق كۆرۈلدى.', -'confirmemail_subject' => '{{SITENAME}} ئېلخەت ئادرېس جەزملەش', -'confirmemail_body' => 'IP ئادرېس $1 دىن كەلگەن ئىشلەتكۈچى (بەلكىم سىز بولۇشىڭىز مۇمكىن) {{SITENAME}} دا “$2” ھېسابات قۇردى ھەمدە بۇ ئېلخەت ئادرېسىنى تاپشۇردى. +'confirmemail_loggedin' => 'ئېلخەت ئادرېسىڭىز ھازىر جەزملەندى.', +'confirmemail_error' => 'جەزملەش جەريانىدا خاتالىق كۆرۈلدى.', +'confirmemail_subject' => '{{SITENAME}} ئېلخەت ئادرېس جەزملەش', +'confirmemail_body' => 'IP ئادرېس $1 دىن كەلگەن ئىشلەتكۈچى (بەلكىم سىز بولۇشىڭىز مۇمكىن) {{SITENAME}} دا “$2” ھېسابات قۇردى ھەمدە بۇ ئېلخەت ئادرېسىنى تاپشۇردى. بۇ ھېساباتنىڭ سىزگە تەۋە ئىكەنلىكىنى، شۇنىڭ بىلەن بىللە {{SITENAME}} دىكى ئېلخەت ئىقتىدارىنى قوزغىتىشنى جەزملەڭ. توركۆرگۈدە تۆۋەندىكى ئۇلانمىنى ئېچىڭ: @@ -3010,8 +3046,20 @@ $3 $5 جەزملەش كودى $4 دىن كېيىن ۋاقتى ئۆتىدۇ.', -'confirmemail_invalidated' => 'ئېلخەت ئادرېس جەزملەش بىكار قىلىندى', -'invalidateemail' => 'ئېلخەت جەزملەشتىن ۋاز كەچ', +'confirmemail_body_changed' => 'IP ئادرېس $1 دىن كەلگەن ئىشلەتكۈچى (بەلكىم سىز بولۇشىڭىز مۇمكىن) {{SITENAME}} دا “$2” ھېساباتنىڭ ئېلخەت ئادرېسىنى ئۆزگەرتتى. + +بۇ ھېساباتنىڭ سىزگە تەۋە ئىكەنلىكىنى، شۇنىڭ بىلەن بىللە {{SITENAME}} دىكى ئېلخەت ئىقتىدارىنى قوزغىتىشنى جەزملەڭ. توركۆرگۈدە تۆۋەندىكى ئۇلانمىنى ئېچىڭ: + +$3 + +ئەگەر ھېسابات سىزگە تەۋە *بولمىسا*، +تۆۋەندىكى ئۇلانمىنى ئېچىپ ئېلخەت جەزملەشتىن ۋاز كېچىڭ. + +$5 + +جەزملەش كودى $4 دىن كېيىن ۋاقتى ئۆتىدۇ.', +'confirmemail_invalidated' => 'ئېلخەت ئادرېس جەزملەش بىكار قىلىندى', +'invalidateemail' => 'ئېلخەت جەزملەشتىن ۋاز كەچ', # Scary transclusion 'scarytranscludedisabled' => '[بېكەت ئاتلىغان كود ئايلاندۇرۇش چەكلەنگەن]', @@ -3051,6 +3099,7 @@ $1', 'table_pager_first' => 'بىرىنچى بەت', 'table_pager_last' => 'ئەڭ ئاخىرقى بەت', 'table_pager_limit' => 'ھەر بىر بەتتە $1 تۈر كۆرسەت', +'table_pager_limit_label' => 'ھەر بەتتىكى تۈر سانى:', 'table_pager_limit_submit' => 'يۆتكەل', 'table_pager_empty' => 'نەتىجە يوق', @@ -3119,6 +3168,8 @@ $1', 'version-hook-subscribedby' => 'ئىمزا قويغۇچى', 'version-version' => '(نەشرى $1)', 'version-license' => 'ئىجازەتنامە', +'version-poweredby-credits' => "بۇ ۋىكىنى '''[http://www.mediawiki.org/ MediaWiki]''' تېخنىكىلىق قوللايدۇ، نەشر ھوقۇقى © 2001-$1 $2", +'version-poweredby-others' => 'باشقا', 'version-software' => 'قاچىلانغان يۇمشاق دېتال', 'version-software-product' => 'مەھسۇلات', 'version-software-version' => 'نەشرى', @@ -3189,6 +3240,15 @@ $1', 'tags-edit' => 'ئۆزگەرتىش', 'tags-hitcount' => '$1 {{PLURAL:$1|ئۆزگەرتىش|ئۆزگەرتىش}}', +# Special:ComparePages +'comparepages' => 'بەت سېلىشتۇر', +'compare-selector' => 'بەتنىڭ تۈزىتىلگەن نەشرىنى سېلىشتۇر', +'compare-page1' => '1- بەت', +'compare-page2' => '2- بەت', +'compare-rev1' => 'تۈزىتىلگەن نەشرى 1', +'compare-rev2' => 'تۈزىتىلگەن نەشرى 2', +'compare-submit' => 'سېلىشتۇر', + # Database error messages 'dberr-header' => 'بۇ wiki مەسىلىگە يولۇقتى', 'dberr-problems' => 'كەچۈرۈڭ! @@ -3206,8 +3266,13 @@ $1', 'htmlform-float-invalid' => 'سىز بەلگىلىگەن قىممەت سان ئەمەس.', 'htmlform-int-toolow' => 'سىز بەلگىلىگەن قىممەت ئەڭ كىچىك قىممەت $1 تىن كىچىك', 'htmlform-int-toohigh' => 'سىز بەلگىلىگەن قىممەت ئەڭ چوڭ قىممەت $1 تىن چوڭ', +'htmlform-required' => 'بۇ قىممەت زۆرۈر', 'htmlform-submit' => 'تاپشۇر', 'htmlform-reset' => 'ئۆزگەرتىشتىن يېنىۋال', 'htmlform-selectorother-other' => 'باشقا', +# SQLite database support +'sqlite-has-fts' => '$1 پۈتۈن تېكست ئىزدەشنى قوللايدۇ', +'sqlite-no-fts' => '$1 پۈتۈن تېكست ئىزدەشنى قوللىمايدۇ', + ); diff --git a/languages/messages/MessagesUk.php b/languages/messages/MessagesUk.php index 3e7a120a..b644b71d 100644 --- a/languages/messages/MessagesUk.php +++ b/languages/messages/MessagesUk.php @@ -13,6 +13,8 @@ * @author Aleksandrit * @author Alex Khimich * @author AlexSm + * @author Andrijko Z. + * @author Arturyatsko * @author DixonD * @author Dubyk * @author EugeneZelenko @@ -20,12 +22,14 @@ * @author Ickis * @author Ilyaroz * @author Innv + * @author KEL * @author Kalan * @author NickK * @author Prima klasy4na * @author Riwnodennyk * @author Urhixidur * @author VolodymyrF + * @author Yuriy Apostol * @author Тест */ @@ -58,7 +62,7 @@ $namespaceNames = array( NS_MEDIAWIKI => 'MediaWiki', NS_MEDIAWIKI_TALK => 'Обговорення_MediaWiki', NS_TEMPLATE => 'Шаблон', - NS_TEMPLATE_TALK => 'Обговорення_шаблону', + NS_TEMPLATE_TALK => 'Обговорення_шаблона', NS_HELP => 'Довідка', NS_HELP_TALK => 'Обговорення_довідки', NS_CATEGORY => 'Категорія', @@ -69,9 +73,9 @@ $namespaceAliases = array( 'Спеціальні' => NS_SPECIAL, 'Зображення' => NS_FILE, 'Обговорення_зображення' => NS_FILE_TALK, + 'Обговорення_шаблону' => NS_TEMPLATE_TALK, ); - $dateFormats = array( 'mdy time' => 'H:i', 'mdy date' => 'xg j, Y', @@ -151,7 +155,7 @@ $magicWords = array( 'subjectpagenamee' => array( '1', 'НАЗВА_СТАТТІ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ), 'msg' => array( '0', 'ПОВІД:', 'ПОВІДОМЛЕННЯ:', 'СООБЩЕНИЕ:', 'СООБЩ:', 'MSG:' ), 'subst' => array( '0', 'ПІДСТ:', 'ПІДСТАНОВКА:', 'ПОДСТАНОВКА:', 'ПОДСТ:', 'SUBST:' ), - 'safesubst' => array( '0', 'БЕЗПЕЧНА_ПІДСТАНОВКА:', 'SAFESUBST:' ), + 'safesubst' => array( '0', 'БЕЗПЕЧНА_ПІДСТАНОВКА:', 'ЗАЩПОДСТ:', 'SAFESUBST:' ), 'msgnw' => array( '0', 'ПОВІД_БЕЗ_ВІКІ:', 'СООБЩ_БЕЗ_ВИКИ:', 'MSGNW:' ), 'img_thumbnail' => array( '1', 'міні', 'мініатюра', 'мини', 'миниатюра', 'thumbnail', 'thumb' ), 'img_manualthumb' => array( '1', 'міні=$1', 'мініатюра=$1', 'мини=$1', 'миниатюра=$1', 'thumbnail=$1', 'thumb=$1' ), @@ -257,8 +261,7 @@ $messages = array( 'tog-editsection' => 'Показувати посилання [ред.] для кожного розділу', 'tog-editsectiononrightclick' => 'Редагувати розділи при клацанні правою кнопкою мишки на заголовку (JavaScript)', 'tog-showtoc' => 'Показувати зміст (для сторінок з більш ніж трьома заголовками)', -'tog-rememberpassword' => "Запам'ятати мій обліковий запис на цьому комп'ютері", -'tog-editwidth' => 'Розширювати поле редагування на весь екран', +'tog-rememberpassword' => "Запам'ятати мій обліковий запис для цього браузера (на строк не більше $1 {{PLURAL:$1|дня|днів}})", 'tog-watchcreations' => 'Додавати створені мною сторінки до мого списку спостереження', 'tog-watchdefault' => 'Додавати змінені мною сторінки до мого списку спостереження', 'tog-watchmoves' => 'Додавати перейменовані мною сторінки до мого списку спостереження', @@ -404,31 +407,21 @@ $messages = array( 'faqpage' => 'Project:Часті питання', # Vector skin -'vector-action-addsection' => 'Додати тему', -'vector-action-delete' => 'Вилучити', -'vector-action-move' => 'Перейменувати', -'vector-action-protect' => 'Захистити', -'vector-action-undelete' => 'Відновити', -'vector-action-unprotect' => 'Зняти захист', -'vector-namespace-category' => 'Категорія', -'vector-namespace-help' => 'Сторінка довідки', -'vector-namespace-image' => 'Файл', -'vector-namespace-main' => 'Сторінка', -'vector-namespace-media' => 'Медіа-сторінка', -'vector-namespace-mediawiki' => 'Повідомлення', -'vector-namespace-project' => 'Сторінка проекту', -'vector-namespace-special' => 'Спеціальна сторінка', -'vector-namespace-talk' => 'Обговорення', -'vector-namespace-template' => 'Шаблон', -'vector-namespace-user' => 'Сторінка користувача', -'vector-view-create' => 'Створити', -'vector-view-edit' => 'Редагувати', -'vector-view-history' => 'Переглянути історію', -'vector-view-view' => 'Читати', -'vector-view-viewsource' => 'Переглянути код', -'actions' => 'Дії', -'namespaces' => 'Простори назв', -'variants' => 'Варіанти', +'vector-action-addsection' => 'Додати тему', +'vector-action-delete' => 'Вилучити', +'vector-action-move' => 'Перейменувати', +'vector-action-protect' => 'Захистити', +'vector-action-undelete' => 'Відновити', +'vector-action-unprotect' => 'Зняти захист', +'vector-simplesearch-preference' => 'Увімкнути розширені пошукові підказки (лише для оформлення "Векторне")', +'vector-view-create' => 'Створити', +'vector-view-edit' => 'Редагувати', +'vector-view-history' => 'Переглянути історію', +'vector-view-view' => 'Читати', +'vector-view-viewsource' => 'Переглянути код', +'actions' => 'Дії', +'namespaces' => 'Простори назв', +'variants' => 'Варіанти', 'errorpagetitle' => 'Помилка', 'returnto' => 'Повернення до сторінки «$1».', @@ -489,6 +482,9 @@ $messages = array( Будь ласка, почекайте і повторіть спробу отримати доступ пізніше. $1', +'pool-timeout' => 'Час очыкування блокування вичерпано', +'pool-queuefull' => 'Сервер запитів заповнений', +'pool-errorunknown' => 'Невідома помилка', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Про {{grammar:accusative|{{SITENAME}}}}', @@ -653,7 +649,8 @@ $1', 'yourname' => "Ім'я користувача:", 'yourpassword' => 'Пароль:', 'yourpasswordagain' => 'Повторний набір пароля:', -'remembermypassword' => "Запам'ятовувати мій обліковий запис на цьому комп'ютері", +'remembermypassword' => "Запам'ятати мій обліковий запис на цьому комп'ютері (на строк не більше $1 {{PLURAL:$1|дня|днів}})", +'securelogin-stick-https' => 'Залишайтись підключенним через HTTPS після входу', 'yourdomainname' => 'Ваш домен:', 'externaldberror' => 'Сталася помилка при автентифікації за допомогою зовнішньої бази даних, або у вас недостатньо прав для внесення змін до свого зовнішнього облікового запису.', 'login' => 'Вхід до системи', @@ -670,6 +667,7 @@ $1', 'gotaccount' => "Ви вже зареєстровані? '''$1'''.", 'gotaccountlink' => 'Увійдіть', 'createaccountmail' => 'електронною поштою', +'createaccountreason' => 'Причина:', 'badretype' => 'Уведені вами паролі не збігаються.', 'userexists' => "Уведене ім'я користувача вже існує. Оберіть інше ім'я.", @@ -696,6 +694,7 @@ $1', 'wrongpasswordempty' => 'Ви не ввели пароль. Будь ласка, спробуйте ще раз.', 'passwordtooshort' => 'Ваш пароль закороткий, він має містити принаймні $1 {{PLURAL:$1|символ|символи|символів}}.', 'password-name-match' => 'Уведений пароль має відрізнятися від імені користувача.', +'password-login-forbidden' => 'Використання цього імені користувача і пароля заборонено.', 'mailmypassword' => 'Надіслати новий пароль', 'passwordremindertitle' => "Пам'ятка пароля користувача {{grammar:genitive|{{SITENAME}}}}", 'passwordremindertext' => 'Хтось (можливо, ви, з IP-адреси $1) зробив запит @@ -737,6 +736,9 @@ $1', 'loginlanguagelabel' => 'Мова: $1', 'suspicious-userlogout' => 'Ваш запит на завершення сеанса відхилений, оскільки він схожий на запит, відправлений зіпсованим веб-оглядачем або кешуючим проксі-сервером.', +# E-mail sending +'php-mail-error-unknown' => 'Невідома помилка в PHP-mail() функції', + # Password reset dialog 'resetpass' => 'Змінити пароль', 'resetpass_announce' => 'Ви ввійшли, використовуючи тимчасовий пароль, який отримали електронною поштою. Для завершення входу до системи, ви повинні вказати новий пароль тут:', @@ -785,11 +787,12 @@ $1', 'showlivepreview' => 'Швидкий попередній перегляд', 'showdiff' => 'Показати зміни', 'anoneditwarning' => "'''Увага''': Ви не увійшли до системи. Ваша IP-адреса буде записана до історії змін цієї сторінки.", +'anonpreviewwarning' => "''Ви не увійшли в систему. Якщо ви виконаєте збереження, то в історію сторінки буде записана ваша IP-адреса.''", 'missingsummary' => "'''Нагадування''': Ви не дали короткого опису змін. Натиснувши кнопку «Зберегти» ще раз, ви збережете зміни без коментаря.", 'missingcommenttext' => 'Будь ласка, введіть нижче ваше повідомлення.', -'missingcommentheader' => "'''Нагадування''': Ви не зазначили коментар до редагування. -Натиснувши кнопку «Зберегти сторінку» ще раз, ви збережете редагування без коментаря.", +'missingcommentheader' => "'''Нагадування''': ви не вказали тему/заголовок для цього коментаря. +Натиснувши кнопку «{{int:savearticle}}» ще раз, ви збережете редагування без заголовка.", 'summary-preview' => 'Опис буде:', 'subject-preview' => 'Заголовок буде:', 'blockedtitle' => 'Користувача заблоковано', @@ -863,8 +866,12 @@ $1', 'usercsspreview' => "'''Пам'ятайте, що це лише попередній перегляд вашого css-файлу.''' '''Його ще не збережено!'''", 'userjspreview' => "'''Пам'ятайте, що це тільки попередній перегляд вашого JavaScript-файлу і поки він ще не збережений!'''", +'sitecsspreview' => "'''Пам'ятайте, що це тільки попередній перегляд цього CSS.''' +'''Його ще не збережено!'''", +'sitejspreview' => "'''Пам'ятайте, що це лише попередній перегляд вашого JavaScript-коду.''' +'''Його ще не збережено!'''", 'userinvalidcssjstitle' => "'''Увага:''' тема оформлення «$1» не знайдена. -Пам'ятайте, що користувацькі .css та .js сторінки повинні мати назву, що складається лише з малих літер, наприклад «{{ns:user}}:Хтось/monobook.css», а не «{{ns:user}}:Хтось/Monobook.css».", +Пам'ятайте, що користувацькі .css та .js сторінки повинні мати назву, що складається лише з малих літер, наприклад «{{ns:user}}:Хтось/vector.css», а не «{{ns:user}}:Хтось/Vector.css».", 'updated' => '(Оновлена)', 'note' => "'''Зауваження:'''", 'previewnote' => "'''Це лише попередній перегляд, @@ -902,9 +909,6 @@ $1', Якщо ви не бажаєте, щоб написане вами безжалісно редагувалось — не пишіть тут.
    Ви також зобов'язуєтесь, що написане вами тут належить вам або взяте з джерела, що є суспільним надбанням, або подібного вільного джерела (див. $1).
    '''НЕ ПУБЛІКУЙТЕ ТУТ БЕЗ ДОЗВОЛУ МАТЕРІАЛИ, ЩО Є ОБ'ЄКТОМ АВТОРСЬКОГО ПРАВА!'''", -'longpagewarning' => "'''ПОПЕРЕДЖЕННЯ: Довжина цієї сторінки $1 кб; -сторінки, розмір яких перевищує 32 кб, можуть створювати проблеми для деяких браузерів. -Будь ласка, розгляньте варіанти розбиття сторінки на менші частини.'''", 'longpageerror' => "'''ПОМИЛКА: текст, що ви хочете зберегти має $1 кілобайт, що більше ніж встановлену межу $2 кілобайт. Сторінку неможливо зберегти.'''", 'readonlywarning' => "'''ПОПЕРЕДЖЕННЯ: База даних заблокована в зв'язку з процедурами обслуговування, тому, на даний момент, ви не можете записати ваші зміни. @@ -1086,6 +1090,8 @@ $1", 'logdelete-failure' => "'''Не вдалося встановити видимість журналу:''' $1", 'revdel-restore' => 'Змінити видимість', +'revdel-restore-deleted' => 'вилучені версії', +'revdel-restore-visible' => 'видимі версії', 'pagehist' => 'Історія сторінки', 'deletedhist' => 'Історія вилучень', 'revdelete-content' => 'вміст', @@ -1153,11 +1159,13 @@ $1", # Diffs 'history-title' => 'Історія змін сторінки «$1»', 'difference' => '(відмінності між версіями)', +'difference-multipage' => '(Різниця між сторінками)', 'lineno' => 'Рядок $1:', 'compareselectedversions' => 'Порівняти вибрані версії', 'showhideselectedversions' => 'Показати/приховати обрані версії', 'editundo' => 'скасувати', -'diff-multi' => '($1 {{PLURAL:$1|проміжна версія не показана|проміжні версії не показані|проміжних версій не показані}}.)', +'diff-multi' => '({{PLURAL:$1|Одна проміжна версія одного користувача не показана|$1 проміжні версії {{PLURAL:$2|одного користувача|$2 користувачів}} не показані|$1 проміжних версій {{PLURAL:$2|одного користувача|$2 користувачів}} не показані}})', +'diff-multi-manyusers' => '({{PLURAL:$1|не показана $1 проміжна я версія|не показані $1 проміжні версії|не показано $1 проміжних версій}}, зроблених більш, ніж {{PLURAL:$2|$1 користувачем|$2 користувачами}})', # Search results 'searchresults' => 'Результати пошуку', @@ -1192,6 +1200,7 @@ $1", 'searchprofile-everything-tooltip' => 'Пошук на всіх сторінках (включаючи сторінки обговорення)', 'searchprofile-advanced-tooltip' => 'Шукати в заданих просторах назв', 'search-result-size' => '$1 ($2 {{PLURAL:$2|слово|слова|слів}})', +'search-result-category-size' => '{{PLURAL:$1|$1 елемент|$1 елементи|$1 елементів}} ({{PLURAL:$2|$2 підкатегорія|$2 підкатегорії|$2 підкатегорій}}, {{PLURAL:$3|$3 файл|$3 файли|$3 файлів}})', 'search-result-score' => 'Відповідність: $1 %', 'search-redirect' => '(перенаправлення $1)', 'search-section' => '(розділ $1)', @@ -1266,6 +1275,7 @@ $1", 'contextlines' => 'Кількість рядків на результат', 'contextchars' => 'Кількість символів контексту на рядок', 'stub-threshold' => 'Поріг для визначення оформлення посилань на стаби (у байтах):', +'stub-threshold-disabled' => 'Вимкнений', 'recentchangesdays' => 'На скільки днів показувати нові редагування:', 'recentchangesdays-max' => '(максимум $1 {{PLURAL:$1|день|дні|днів}})', 'recentchangescount' => 'Кількість редагувань для показу за умовчанням:', @@ -1299,6 +1309,7 @@ $1", 'prefs-files' => 'Файли', 'prefs-custom-css' => 'Власний CSS', 'prefs-custom-js' => 'Власний JS', +'prefs-common-css-js' => 'CSS/JS спільні для всіх тем оформлення:', 'prefs-reset-intro' => 'Ця сторінка може бути використана для зміни ваших налаштувань на стандартні. Після виконання цієї дії ви не зможете відкотити зміни.', 'prefs-emailconfirm-label' => 'Підтвердження електронної пошти:', @@ -1338,9 +1349,15 @@ $1", 'prefs-advancedrendering' => 'Розширені налаштування', 'prefs-advancedsearchoptions' => 'Розширені налаштування', 'prefs-advancedwatchlist' => 'Розширені налаштування', -'prefs-display' => 'Налаштування показу', +'prefs-displayrc' => 'Налаштування показу', +'prefs-displaysearchoptions' => 'Налаштування показу', +'prefs-displaywatchlist' => 'Налаштування показу', 'prefs-diffs' => 'Різниці версій', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Адреса електронної пошти є чинною', +'email-address-validity-invalid' => 'Введіть чинну адресу електронної пошти', + # User rights 'userrights' => 'Управління правами користувачів', 'userrights-lookup-user' => 'Управління групами користувача', @@ -1424,6 +1441,7 @@ $1", 'right-hideuser' => 'Блокування імені користувача і приховування його', 'right-ipblock-exempt' => 'Уникнення блокування за IP-адресою, автоблокування і блокування діапазонів', 'right-proxyunbannable' => 'Уникнення автоматичного блокування проксі-серверів', +'right-unblockself' => 'розблоковувати самого себе', 'right-protect' => 'Зміна рівнів захисту, редагування захищених сторінок', 'right-editprotected' => 'Редагування захищених сторінок (без каскадного захисту)', 'right-editinterface' => 'Редагування інтерфейсу користувача', @@ -1446,7 +1464,6 @@ $1", 'right-siteadmin' => 'Блокування і розблокування бази даних', 'right-reset-passwords' => 'скидання паролів інших користувачів', 'right-override-export-depth' => "експорт сторінок, включаючи пов'язані сторінки з глибиною до 5", -'right-versiondetail' => 'Перегляд розширеної інформації про версію програмного забезпечення', 'right-sendemail' => 'відправляти пошту іншим користувачам', # User rights log @@ -1497,14 +1514,9 @@ $1", 'recentchanges-legend' => 'Налаштування нових редагувань', 'recentchangestext' => 'На цій сторінці показані останні зміни на сторінках {{grammar:genitive|{{SITENAME}}}}.', 'recentchanges-feed-description' => 'Відстежувати останні зміни у вікі в цьому потоці.', -'recentchanges-label-legend' => 'Легенда: $1.', -'recentchanges-legend-newpage' => '$1 — нова сторінка', 'recentchanges-label-newpage' => 'Цим редагуванням створена нова сторінка', -'recentchanges-legend-minor' => '$1 — незначне редагування', 'recentchanges-label-minor' => 'Це незначна зміна', -'recentchanges-legend-bot' => '$1 — редагування бота', 'recentchanges-label-bot' => 'Це редагування зроблене ботом', -'recentchanges-legend-unpatrolled' => '$1 — невідпатрульоване редагування', 'recentchanges-label-unpatrolled' => 'Це редагування ще не було відпатрульоване', 'rcnote' => "{{PLURAL:$1|Остання '''$1''' зміна|Останні '''$1''' зміни|Останні '''$1''' змін}} за '''$2''' {{PLURAL:$2|день|дні|днів}}, на час $5, $4.", 'rcnotefrom' => 'Нижче відображені редагування з $2 (до $1).', @@ -1551,6 +1563,9 @@ $1", 'upload_directory_missing' => 'Директорія для завантажень ($1) відсутня і не може бути створена веб-сервером.', 'upload_directory_read_only' => 'Веб-сервер не має прав запису в папку ($1), в якій планується зберігати завантажувані файли.', 'uploaderror' => 'Помилка завантаження файлу', +'upload-recreate-warning' => "'''Увага. Файл з такою назвою був раніше вилучений або перейменований.'' + +Далі наведено журнал вилучень і перейменувань цього файлу:", 'uploadtext' => "За допомогою цієї форми ви можете завантажити файли на сервер. Якщо файл із зазначеною вами назвою вже існує в проекті, то його буде замінено без попередження. Тому, якщо ви не збираєтесь оновлювати файл, @@ -1594,6 +1609,17 @@ $1", 'filetype-banned-type' => "'''\".\$1\"''' — заборонений тип файлу. {{PLURAL:\$3|Дозволений тип файлів|Дозволені типи файлів}}: \$2.", 'filetype-missing' => 'Відсутнє розширення файлу (наприклад, «.jpg»).', +'empty-file' => 'Надісланий вами файл порожній.', +'file-too-large' => 'Файл, який ви надіслали, завеликий.', +'filename-tooshort' => 'Назва файлу занадто коротка.', +'filetype-banned' => 'Цей тип файлів заборонений.', +'verification-error' => 'Файлу не вдалося пройти процедуру перевірки.', +'hookaborted' => 'Запропоновану вами зміну перервав обробник розширення.', +'illegal-filename' => 'Недозволена назва файлу.', +'overwrite' => 'Заміну існуючого файлу не дозволено.', +'unknown-error' => 'Трапилась невідома помилка.', +'tmp-create-error' => 'Не вдалося створити тимчасовий файл.', +'tmp-write-error' => 'Помилка запису тимчасового файлу.', 'large-file' => 'Рекомендується використовувати зображення, розмір яких не перевищує $1 байтів (размір завантаженого файлу складає $2 байтів).', 'largefileserver' => 'Розмір файлу більший за максимальнодозволений.', 'emptyfile' => 'Завантажений вами файл ймовірно порожній. Можливо, це сталося через помилку при введенні імені файлу. Будь-ласка, перевірте, чи справді ви бажаєте звантажити цей файл.', @@ -1618,13 +1644,14 @@ $1", Якщо ви все ж хочете завантажити цей файл, будь ласка, поверніться назад і змініть назву файлу. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Цей файл є дублікатом {{PLURAL:$1|файлу|таких файлів}}:', 'file-deleted-duplicate' => 'Такий самий файл ([[:$1]]) уже вилучався раніше. Будь ласка, ознайомтеся з історією вилучень файлу перед тим, як завантажити його знову.', -'successfulupload' => 'Завантаження успішно завершено', 'uploadwarning' => 'Попередження', 'uploadwarning-text' => 'Будь ласка, змініть наданий нижче опис файлу і спробуйте ще раз.', 'savefile' => 'Зберегти файл', 'uploadedimage' => 'завантажив «[[$1]]»', 'overwroteimage' => 'завантажив нову версію «[[$1]]»', 'uploaddisabled' => 'Завантаження заборонене', +'copyuploaddisabled' => 'Завантаження через URL вимкнене.', +'uploadfromurl-queued' => 'Ваше завантаження поставлене в чергу.', 'uploaddisabledtext' => 'Можливість завантаження файлів відключена.', 'php-uploaddisabledtext' => 'Завантаження файлів вимкнене у налаштуваннях PHP. Будь ласка, перевірте значення file_uploads.', 'uploadscripted' => 'Файл містить HTML-код або скрипт, який може неправильно обробитися браузером.', @@ -1658,6 +1685,14 @@ JD # Jenoptik MGP # Pentax PICT # різні # ', +'upload-success-subj' => 'Завантаження успішно завершено', +'upload-success-msg' => 'Ваше завантаження з [$2] було успішним. Воно доступне тут: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Проблема із завантаженням', +'upload-failure-msg' => 'З вашим завантаженням від [$2] виникла проблема: + +$1', +'upload-warning-subj' => 'Попередження при завантаженні', +'upload-warning-msg' => 'Сталася помилка при пересиланні з [$2]. Ви можете повернутися до [[Special:Upload/stash/$1|формуляру пересилання]], щоб вирішити проблему.', 'upload-proto-error' => 'Невірний протокол', 'upload-proto-error-text' => 'Віддалене завантаження вимагає адресів, що починаються з http:// або ftp://.', @@ -1720,6 +1755,7 @@ PICT # різні 'listfiles_search_for' => 'Пошук по назві зображення:', 'imgfile' => 'файл', 'listfiles' => 'Список файлів', +'listfiles_thumb' => 'Мініатюра', 'listfiles_date' => 'Дата', 'listfiles_name' => 'Назва', 'listfiles_user' => 'Користувач', @@ -1834,8 +1870,8 @@ PICT # різні 'statistics-edits' => 'Кількість редагувань з моменту установки {{grammar:genitive|{{SITENAME}}}}', 'statistics-edits-average' => 'Середня кількість редагувань на сторінку', 'statistics-views-total' => 'Усього переглядів', +'statistics-views-total-desc' => 'Перегляди неіснуючих та спеціальних сторінок не враховані', 'statistics-views-peredit' => 'Переглядів на редагування', -'statistics-jobqueue' => 'Величина [http://www.mediawiki.org/wiki/Manual:Job_queue черги завдань]', 'statistics-users' => 'Зареєстрованих [[Special:ListUsers|користувачів]]', 'statistics-users-active' => 'Активні користувачі', 'statistics-users-active-desc' => 'Користувачі, які здійснили якусь дію протягом {{PLURAL:$1|минулого дня|минулих $1 днів}}', @@ -1848,7 +1884,7 @@ PICT # різні 'doubleredirects' => 'Подвійні перенаправлення', 'doubleredirectstext' => 'На цій сторінці наведено список перенаправлень на інші перенаправлення. Кожен рядок містить посилання на перше та друге перенаправлення, а також перший рядок тексту другого перенаправлення, що зазвичай містить «реальне» перенаправлення на необхідну сторінку, куди повинно вказувати й перше перенаправлення. -Закреслені записи були виправлені.', +Закреслені записи були виправлені.', 'double-redirect-fixed-move' => 'Сторінка «[[$1]]» була перейменована, зараз вона є перенаправленням на «[[$2]]»', 'double-redirect-fixer' => 'Redirect fixer', @@ -1871,6 +1907,8 @@ PICT # різні 'nmembers' => "$1 {{PLURAL:$1|об'єкт|об'єкти|об'єктів}}", 'nrevisions' => '$1 {{PLURAL:$1|версія|версії|версій}}', 'nviews' => '$1 {{PLURAL:$1|перегляд|перегляди|переглядів}}', +'nimagelinks' => 'Використовується на $1 {{PLURAL:$1|сторінці|сторінках}}', +'ntransclusions' => 'використовується на $1 {{PLURAL:$1|сторінці|сторінках}}', 'specialpage-empty' => 'Запит не дав результатів.', 'lonelypages' => 'Статті-сироти', 'lonelypagestext' => 'На такі сторінки нема посилань з інших сторінок і вони не включаються до інших сторінок {{grammar:genitive|{{SITENAME}}}}.', @@ -2026,34 +2064,40 @@ PICT # різні 'listgrouprights-removegroup-self-all' => 'може вилучати всі групи зі свого облікового запису', # E-mail user -'mailnologin' => 'Відсутня адреса для відправки', -'mailnologintext' => 'Ви повинні [[Special:UserLogin|ввійти до системи]] і мати підтверджену адресу електронної пошти у ваших [[Special:Preferences|налаштуваннях]], щоб мати змогу надсилати електронну пошту іншим користувачам.', -'emailuser' => 'Надіслати листа', -'emailpage' => 'Лист користувачеві', -'emailpagetext' => 'Заповнивши наведену нижче форму, можна надіслати повідомлення цьому користувачу. +'mailnologin' => 'Відсутня адреса для відправки', +'mailnologintext' => 'Ви повинні [[Special:UserLogin|ввійти до системи]] і мати підтверджену адресу електронної пошти у ваших [[Special:Preferences|налаштуваннях]], щоб мати змогу надсилати електронну пошту іншим користувачам.', +'emailuser' => 'Надіслати листа', +'emailpage' => 'Лист користувачеві', +'emailpagetext' => 'Заповнивши наведену нижче форму, можна надіслати повідомлення цьому користувачу. Електронна адреса, яку ви зазначили у [[Special:Preferences|своїх налаштуваннях]], буде зазначена в полі «Від кого» листа, тому одержувач матиме можливість відповісти безпосередньо вам.', -'usermailererror' => 'При відправці повідомлення електронної пошти сталася помилка:', -'defemailsubject' => '{{SITENAME}}: лист', -'noemailtitle' => 'Відсутня адреса електронної пошти', -'noemailtext' => 'Цей користувач не вказав коректної адреси електронної пошти.', -'nowikiemailtitle' => 'Ел. пошти не дозволено', -'nowikiemailtext' => 'Цей користувач вирішив не отримувати ел. пошту від інших користувачів.', -'email-legend' => 'Надіслати листа іншому користувачеві {{grammar:genitive|{{SITENAME}}}}', -'emailfrom' => 'Від кого:', -'emailto' => 'Кому:', -'emailsubject' => 'Тема:', -'emailmessage' => 'Повідомлення:', -'emailsend' => 'Надіслати', -'emailccme' => 'Надіслати мені копію повідомлення.', -'emailccsubject' => 'Копія вашого повідомлення до $1: $2', -'emailsent' => 'Електронне повідомлення надіслано', -'emailsenttext' => 'Ваше електронне повідомлення надіслано.', -'emailuserfooter' => 'Цей лист був надісланий користувачеві $2 від користувача $1 за допомогою функції «Надіслати листа» проекту {{SITENAME}}.', +'usermailererror' => 'При відправці повідомлення електронної пошти сталася помилка:', +'defemailsubject' => '{{SITENAME}}: лист', +'usermaildisabled' => 'Електронне листування між користувачами вимкнене', +'usermaildisabledtext' => 'Ви не можете надсилати електронні листи іншим користувачам цієї вікі', +'noemailtitle' => 'Відсутня адреса електронної пошти', +'noemailtext' => 'Цей користувач не вказав коректної адреси електронної пошти.', +'nowikiemailtitle' => 'Ел. пошти не дозволено', +'nowikiemailtext' => 'Цей користувач вирішив не отримувати ел. пошту від інших користувачів.', +'email-legend' => 'Надіслати листа іншому користувачеві {{grammar:genitive|{{SITENAME}}}}', +'emailfrom' => 'Від кого:', +'emailto' => 'Кому:', +'emailsubject' => 'Тема:', +'emailmessage' => 'Повідомлення:', +'emailsend' => 'Надіслати', +'emailccme' => 'Надіслати мені копію повідомлення.', +'emailccsubject' => 'Копія вашого повідомлення до $1: $2', +'emailsent' => 'Електронне повідомлення надіслано', +'emailsenttext' => 'Ваше електронне повідомлення надіслано.', +'emailuserfooter' => 'Цей лист був надісланий користувачеві $2 від користувача $1 за допомогою функції «Надіслати листа» проекту {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Залишити системне повідомлення.', +'usermessage-editor' => 'Системний вісник', # Watchlist 'watchlist' => 'Список спостереження', 'mywatchlist' => 'Список спостереження', -'watchlistfor' => "(користувача '''$1''')", +'watchlistfor2' => 'Для $1 $2', 'nowatchlist' => 'Ваш список спостереження порожній.', 'watchlistanontext' => 'Вам необхідно $1, щоб переглянути чи редагувати список спостереження.', 'watchnologin' => 'Ви не ввійшли до системи', @@ -2171,7 +2215,10 @@ $UNWATCHURL 'revertpage' => 'Редагування користувача [[Special:Contributions/$2|$2]] ([[User talk:$2|обговорення]]) відкинуті до версії користувача [[User:$1|$1]]', 'revertpage-nouser' => "Відкинуто редагування (ім'я користувача приховано) до зробленого [[User:$1|$1]]", 'rollback-success' => 'Відкинуті редагування користувача $1; повернення до версії користувача $2.', -'sessionfailure' => 'Здається, виникли проблеми з поточним сеансом роботи; + +# Edit tokens +'sessionfailure-title' => 'Помилка сеансу', +'sessionfailure' => 'Здається, виникли проблеми з поточним сеансом роботи; ця дія була скасована з метою попередити «захоплення сеансу». Будь ласка, натисніть кнопку «Назад» і перезавантажте сторінку, з якої ви прийшли.', @@ -2300,18 +2347,22 @@ $1', 'month' => 'Від місяця (і раніше):', 'year' => 'Від року (і раніше):', -'sp-contributions-newbies' => 'Показати лише внесок з нових облікових записів', -'sp-contributions-newbies-sub' => 'Внесок новачків', -'sp-contributions-newbies-title' => 'Внесок з нових облікових записів', -'sp-contributions-blocklog' => 'протокол блокувань', -'sp-contributions-deleted' => 'вилучені редагування користувача', -'sp-contributions-logs' => 'журнали', -'sp-contributions-talk' => 'обговорення', -'sp-contributions-userrights' => 'управління правами користувача', -'sp-contributions-blocked-notice' => 'Цей користувач наразі заблокований. Останній запис у журналі блокувань такий:', -'sp-contributions-search' => 'Пошук внеску', -'sp-contributions-username' => "IP-адреса або ім'я користувача:", -'sp-contributions-submit' => 'Знайти', +'sp-contributions-newbies' => 'Показати лише внесок з нових облікових записів', +'sp-contributions-newbies-sub' => 'Внесок новачків', +'sp-contributions-newbies-title' => 'Внесок з нових облікових записів', +'sp-contributions-blocklog' => 'протокол блокувань', +'sp-contributions-deleted' => 'вилучені редагування користувача', +'sp-contributions-uploads' => 'завантаження', +'sp-contributions-logs' => 'журнали', +'sp-contributions-talk' => 'обговорення', +'sp-contributions-userrights' => 'управління правами користувача', +'sp-contributions-blocked-notice' => 'Цей користувач наразі заблокований. Останній запис у журналі блокувань такий:', +'sp-contributions-blocked-notice-anon' => 'Доступ з цієї IP-адреси зараз заблокований. +Далі наведено останній запис з журналу блокувань:', +'sp-contributions-search' => 'Пошук внеску', +'sp-contributions-username' => "IP-адреса або ім'я користувача:", +'sp-contributions-toponly' => 'Показувати тільки редагування, що є останніми версіями', +'sp-contributions-submit' => 'Знайти', # What links here 'whatlinkshere' => 'Посилання сюди', @@ -2372,7 +2423,6 @@ $1', 'ipb-edit-dropdown' => 'Редагувати причини блокувань', 'ipb-unblock-addr' => 'Розблокувати $1', 'ipb-unblock' => 'Розблокувати користувача або IP-адресу', -'ipb-blocklist-addr' => 'Чинні блокування для $1', 'ipb-blocklist' => 'Показати чинні блокування', 'ipb-blocklist-contribs' => 'Внесок користувача $1', 'unblockip' => 'Розблокувати IP-адресу', @@ -2443,6 +2493,8 @@ IP-адреси, що блокуються автоматично тут не в 'sorbs_create_account_reason' => 'Ваша IP-адреса числиться як відкритий проксі в DNSBL. Ви не можете створити обліковий запис.', 'cant-block-while-blocked' => 'Ви не можете блокувати інших користувачів, поки ви самі заблоковані.', 'cant-see-hidden-user' => 'Користувача, якого ви хочете заблокувати, вже заблоковано та приховано. Оскільки у вас немає прав щодо приховання користувачів, ви не можете переглянути або змінити дане блокування.', +'ipbblocked' => 'Ви не можете блокувати чи розблоковувати інших користувачів, оскільки самі заблоковані', +'ipbnounblockself' => 'Ви не можете розблокувати себе', # Developer tools 'lockdb' => 'Заблокувати базу даних (режим "тільки для читання")', @@ -2479,6 +2531,17 @@ IP-адреси, що блокуються автоматично тут не в '''ПОПЕРЕДЖЕННЯ!''' Ця дія може стати причиною серйозних та неочікуваних змін популярних сторінок. Будь ласка, перед продовженням переконайтесь, що ви розумієте всі можливі наслідки.", +'movepagetext-noredirectfixer' => "Ця форма дозволяє перейменувати сторінку з одночасним переміщенням її журналу змін. +Стара назва стане перенаправленням на нову. +Будь ласка, не забудьте виправити [[Special:DoubleRedirects|подвійні]] і [[Special:BrokenRedirects|розірвані перенаправлення]]. +Ви відповідаєте за те, щоб посилання і далі вказували туди, куди треба. + +Зверніть увагу, що сторінка '''не буде''' перейменована, якщо сторінка з новою назвою вже існує, крім випадків, коли вона є перенаправленням або порожня та не має історії редагувань. +Це означає, що Ви можете перейменувати сторінку назад, якщо Ви допустилися помилки, і при цьому не зможете випадково перезаписати існуючу сторінку. + +'''Попередження!''' +Перейменування може призвести до масштабних і несподіваних змін для ''популярних'' сторінок. +Тому перед перейменуванням упевніться, що Ви розумієте оцінили можливі наслідки.", 'movepagetalktext' => "Приєднана сторінка обговорення також буде автоматично перейменована, '''окрім наступних випадків:''' * Непорожня сторінка обговорення з такою назвою вже існує або * Ви не поставили галочку в полі нижче. @@ -2534,6 +2597,7 @@ IP-адреси, що блокуються автоматично тут не в 'immobile-source-page' => 'Цю сторінку не можна перейменувати.', 'immobile-target-page' => 'Не можна присвоїти сторінці цю назву.', 'imagenocrossnamespace' => 'Неможливо дати файлові назву з іншого простору назв', +'nonfile-cannot-move-to-file' => 'Не можна перейменовувати сторінки з інших просторів назв на файли', 'imagetypemismatch' => 'Нове розширення файлу не співпадає з його типом', 'imageinvalidfilename' => 'Назва цільового файлу неправильна', 'fix-double-redirects' => 'Виправити всі перенаправлення на попередню назву', @@ -2612,6 +2676,7 @@ IP-адреси, що блокуються автоматично тут не в 'importstart' => 'Імпорт сторінок…', 'import-revision-count' => '$1 {{PLURAL:$1|версія|версії|версій}}', 'importnopages' => 'Сторінки для імпорту відсутні.', +'imported-log-entries' => '{{PLURAL:$1|Заімпортований $1 запис журналу|Заімпортовані $1 записи журналу|Заімпортовані $1 записів журналу}}.', 'importfailed' => 'Не вдалося імпортувати: $1', 'importunknownsource' => 'Невідомий тип імпортованої сторінки', 'importcantopen' => 'Неможливо відкрити файл імпорту', @@ -2704,6 +2769,8 @@ IP-адреси, що блокуються автоматично тут не в 'tooltip-upload' => 'Почати завантаження', 'tooltip-rollback' => 'Одним кліком прибрати зміни, зроблені останнім редактором', 'tooltip-undo' => 'Прибрати внесені зміни і показати попередній перегляд. Дозволяє зазначити причину скасування.', +'tooltip-preferences-save' => 'Зберегти налаштування', +'tooltip-summary' => 'Введіть короткий опис', # Stylesheets 'common.css' => '/** Розміщений тут CSS буде застосовуватися до всіх тем оформлення */', @@ -2829,14 +2896,17 @@ $1', 'thumbsize' => 'Розмір зменшеної версії зображення:', 'widthheight' => '$1 × $2', 'widthheightpage' => '$1 × $2, {{PLURAL:$3|$3 сторінка|$3 сторінки|$3 сторінок}}', -'file-info' => '(розмір файлу: $1, MIME-тип: $2)', -'file-info-size' => '($1 × $2 пікселів, розмір файлу: $3, MIME-тип: $4)', +'file-info' => 'розмір файлу: $1, MIME-тип: $2', +'file-info-size' => '$1 × $2 пікселів, розмір файлу: $3, MIME-тип: $4', 'file-nohires' => 'Нема версії з більшою роздільністю.', -'svg-long-desc' => '(SVG-файл, номінально $1 × $2 пікселів, розмір файлу: $3)', +'svg-long-desc' => 'SVG-файл, номінально $1 × $2 пікселів, розмір файлу: $3', 'show-big-image' => 'Повна роздільність', 'show-big-image-thumb' => 'Розмір при попередньому перегляді: $1 × $2 пікселів', 'file-info-gif-looped' => 'кільцеве', 'file-info-gif-frames' => '$1 {{PLURAL:$1|кадр|кадри|кадрів}}', +'file-info-png-looped' => 'закільцьований', +'file-info-png-repeat' => 'продемонстрований $1 {{PLURAL:$1|раз|рази|разів}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|кадр|кадри|кадрів}}', # Special:NewFiles 'newimages' => 'Галерея нових файлів', @@ -2850,6 +2920,9 @@ $1', 'bydate' => 'за датою', 'sp-newimages-showfrom' => 'Показати нові зображення, починаючи з $2, $1', +# Video information, used by Language::formatTimePeriod() to format lengths in the above messages +'minutes-abbrev' => 'хв', + # Bad image list 'bad_image_list' => 'Формат має бути наступним: @@ -2924,9 +2997,9 @@ $1', 'exif-spectralsensitivity' => 'Спектральна чутливість', 'exif-isospeedratings' => 'Світлочутливість ISO', 'exif-oecf' => 'OECF (коефіцієнт оптикоелектричного перетворення)', -'exif-shutterspeedvalue' => 'Витримка', -'exif-aperturevalue' => 'Діафрагма', -'exif-brightnessvalue' => 'Яскравість', +'exif-shutterspeedvalue' => 'Витримка в APEX', +'exif-aperturevalue' => 'Діафрагма в APEX', +'exif-brightnessvalue' => 'Яскравість в APEX', 'exif-exposurebiasvalue' => 'Компенсація експозиції', 'exif-maxaperturevalue' => 'Мінімальне число діафрагми', 'exif-subjectdistance' => "Відстань до об'єкту", @@ -2991,6 +3064,7 @@ $1', 'exif-gpsareainformation' => 'Назва області GPS', 'exif-gpsdatestamp' => 'Дата', 'exif-gpsdifferential' => 'Диференціальна поправка', +'exif-objectname' => 'Коротка назва', # EXIF attributes 'exif-compression-1' => 'Нестиснутий', @@ -3153,25 +3227,25 @@ $1', 'limitall' => 'усі', # E-mail address confirmation -'confirmemail' => 'Підтвердження адреси ел. пошти', -'confirmemail_noemail' => 'Ви не зазначили коректну адресу електронної пошти у ваших [[Special:Preferences|налаштуваннях користувача]].', -'confirmemail_text' => 'Вікі-двигун потребує підтвердження адреси електронної пошти перед початком роботи. Натисніть на кнопку, щоб за вказаною адресою одержати листа, який міститиме посилання на спеціальну сторінку, після відкриття якої у браузері адреса електронної пошти буде вважатися підтвердженою.', -'confirmemail_pending' => 'Код підтвердження вже відправлено на адресу вашої електронної пошти. +'confirmemail' => 'Підтвердження адреси ел. пошти', +'confirmemail_noemail' => 'Ви не зазначили коректну адресу електронної пошти у ваших [[Special:Preferences|налаштуваннях користувача]].', +'confirmemail_text' => 'Вікі-двигун потребує підтвердження адреси електронної пошти перед початком роботи. Натисніть на кнопку, щоб за вказаною адресою одержати листа, який міститиме посилання на спеціальну сторінку, після відкриття якої у браузері адреса електронної пошти буде вважатися підтвердженою.', +'confirmemail_pending' => 'Код підтвердження вже відправлено на адресу вашої електронної пошти. Якщо ви щойно створили обліковий запис, будь-ласка, перш ніж робити запит нового коду, почекайте декілька хвилин до отримання вже відісланого.', -'confirmemail_send' => 'Надіслати лист із запитом на підтвердження', -'confirmemail_sent' => 'Лист із запитом на підтвердження відправлений.', -'confirmemail_oncreate' => "Код підтвердження відправлено на вашу електронну адресу. Цей код не вимагається для входу в систему, але він вам знадобиться для активації будь-яких можливостей вікі, що пов'язані з використанням електронної пошти.", -'confirmemail_sendfailed' => '{{SITENAME}} не може надіслати листа із запитом на підтвердження. +'confirmemail_send' => 'Надіслати лист із запитом на підтвердження', +'confirmemail_sent' => 'Лист із запитом на підтвердження відправлений.', +'confirmemail_oncreate' => "Код підтвердження відправлено на вашу електронну адресу. Цей код не вимагається для входу в систему, але він вам знадобиться для активації будь-яких можливостей вікі, що пов'язані з використанням електронної пошти.", +'confirmemail_sendfailed' => '{{SITENAME}} не може надіслати листа із запитом на підтвердження. Будь ласка, перевірте правильність адреси електронної пошти. Відповідь сервера: $1', -'confirmemail_invalid' => 'Невірний код підтвердження, або термін дії коду вичерпався.', -'confirmemail_needlogin' => 'Для підтвердження вашої адреси електронної пошти вам необхідно $1.', -'confirmemail_success' => 'Вашу адресу електронної пошти підтверджено.', -'confirmemail_loggedin' => 'Вашу адресу електронної пошти підтверджено.', -'confirmemail_error' => 'Під час процедури підтвердження адреси електронної пошти сталася помилка.', -'confirmemail_subject' => '{{SITENAME}}:Запит на підтвердження адреси ел. пошти', -'confirmemail_body' => 'Хтось з IP-адресою $1 зареєстрував на сервері проекту {{SITENAME}} обліковий запис +'confirmemail_invalid' => 'Невірний код підтвердження, або термін дії коду вичерпався.', +'confirmemail_needlogin' => 'Для підтвердження вашої адреси електронної пошти вам необхідно $1.', +'confirmemail_success' => 'Вашу адресу електронної пошти підтверджено.', +'confirmemail_loggedin' => 'Вашу адресу електронної пошти підтверджено.', +'confirmemail_error' => 'Під час процедури підтвердження адреси електронної пошти сталася помилка.', +'confirmemail_subject' => '{{SITENAME}}:Запит на підтвердження адреси ел. пошти', +'confirmemail_body' => 'Хтось з IP-адресою $1 зареєстрував на сервері проекту {{SITENAME}} обліковий запис «$2», вказавши вашу адресу електронної пошти. Щоб підтвердити, що ви дозволяєте використовувати вашу адресу електронної пошти в цьому проекті, відкрийте у браузері наведене нижче посилання: @@ -3184,8 +3258,36 @@ $3 $5 Цей код підтвердження дійсний до $4.', -'confirmemail_invalidated' => 'Підтвердження адреси електронної пошти скасоване', -'invalidateemail' => 'Скасувати підтвердження адреси електронної пошти', +'confirmemail_body_changed' => 'Хтось (можливо ви) з IP-адреси $1 +вказав дану адресу електронної пошти як нову для облікового запису «$2» в проекті {{SITENAME}}. + +Аби підтвердити, що цей обліковий запис справді ваш, +й увімкнути відправлення листів з сайту {{SITENAME}}, відкрийте наступне посилання у веб-оглядачі: + +$3 + +Якщо даний обліковий запис *не* належить вам, то перейдіть за наступним посиланням, +щоб відмінити підтвердження адреси: + +$5 + +Код підтвердження дійсний до $4.', +'confirmemail_body_set' => 'Хтось (можливо ви) з IP-адреси $1 +назначив цю електронну скриньку для облікового запису «$2» в проекті {{SITENAME}}. + +Аби підтвердити, що цей обліковий запис справді належить вам, і дозволити надсилання листів +з сайту {{SITENAME}}, відкрийте наступне посилання у веб-оглядачі: + +$3 + +Якщо даний обліковий запис *не* належить вам, перейдіть за наступним посиланням +і відмініть цим підтвердження електронної адреси: + +$5 + +Код підтвердження дійсний до $4.', +'confirmemail_invalidated' => 'Підтвердження адреси електронної пошти скасоване', +'invalidateemail' => 'Скасувати підтвердження адреси електронної пошти', # Scary transclusion 'scarytranscludedisabled' => '[«Interwiki transcluding» вимкнено]', @@ -3227,6 +3329,7 @@ $1', 'table_pager_first' => 'Перша сторінка', 'table_pager_last' => 'Остання сторінка', 'table_pager_limit' => 'Показувати $1 елементів на сторінці', +'table_pager_limit_label' => 'Записів на сторінку:', 'table_pager_limit_submit' => 'Виконати', 'table_pager_empty' => 'Не знайдено', @@ -3287,6 +3390,7 @@ $1', 'version-specialpages' => 'Спеціальні сторінки', 'version-parserhooks' => 'Перехоплювачі синтаксичного аналізатора', 'version-variables' => 'Змінні', +'version-skins' => 'Оформлення', 'version-other' => 'Інше', 'version-mediahandlers' => 'Обробники медіа', 'version-hooks' => 'Перехоплювачі', @@ -3298,6 +3402,13 @@ $1', 'version-hook-subscribedby' => 'Підписаний на', 'version-version' => '(Версія $1)', 'version-license' => 'Ліцензія', +'version-poweredby-credits' => "Ця Вікі працює на системі управління вмістом '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'інші', +'version-license-info' => 'MediaWiki є вільним програмним забезпеченням, ви можете розповсюджувати та/або модифікувати його відповідно до умов GNU General Public License, яка опублікованя фондом вільного програмного забезпечення; або версії 2 Ліцензії, або (на Ваш розсуд) будь-якої наступної версії. + +MediaWiki поширюється в надії, що вона буде корисною, але БЕЗ БУДЬ-ЯКИХ ГАРАНТІЙ, навіть без неявної гарантії КОМЕРЦІЙНОЇ ПРИДАТНОСТІ чи ПРИДАТНОСТІ ДЛЯ ПЕВНОЇ МЕТИ. Дивіться GNU General Public License для більш докладної інформації. + +Ви повинні були отримати [{{SERVER}}{{SCRIPTPATH}}/COPYING копію GNU General Public License] разом з цією програмою, якщо немає, напишіть у Free Software Foundation, Inc 51 Franklin Street, Fifth Floor , Boston, MA 02110-1301, США або [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html прочитайте її онлайн].', 'version-software' => 'Установлене програмне забезпечення', 'version-software-product' => 'Продукт', 'version-software-version' => 'Версія', @@ -3367,6 +3478,15 @@ $1', 'tags-edit' => 'редагувати', 'tags-hitcount' => '$1 {{PLURAL:$1|зміна|зміни|змін}}', +# Special:ComparePages +'comparepages' => 'Порівняння сторінок', +'compare-selector' => 'Порівняння версій сторінок', +'compare-page1' => 'Сторінка 1', +'compare-page2' => 'Сторінка 2', +'compare-rev1' => 'Версія 1', +'compare-rev2' => 'Версія 2', +'compare-submit' => 'Порівняти', + # Database error messages 'dberr-header' => 'Ця вікі має проблеми', 'dberr-problems' => 'Вибачте! На цьому сайті виникли технічні труднощі.', @@ -3383,8 +3503,13 @@ $1', 'htmlform-float-invalid' => 'Вказане вами значення не є числом.', 'htmlform-int-toolow' => 'Вказане вами значення нижче за мінімальне — $1', 'htmlform-int-toohigh' => 'Зазначене вами значення вище за максимальне — $1', +'htmlform-required' => "Це значення обов'язкове", 'htmlform-submit' => 'Відправити', 'htmlform-reset' => 'Відкотити зміни', 'htmlform-selectorother-other' => 'Інше', +# SQLite database support +'sqlite-has-fts' => '$1 з підтримкою повнотекстового пошуку', +'sqlite-no-fts' => '$1 без підтримки повнотекстового пошуку', + ); diff --git a/languages/messages/MessagesUr.php b/languages/messages/MessagesUr.php index 87837d79..481dd235 100644 --- a/languages/messages/MessagesUr.php +++ b/languages/messages/MessagesUr.php @@ -13,6 +13,7 @@ * @author Reedy * @author Wisesabre * @author לערי ריינהארט + * @author سمرقندی * @author محبوب عالم */ @@ -62,8 +63,7 @@ $messages = array( 'tog-editsection' => '[ترمیم] روابط کے ذریعے سطری ترمیم کاری فعال کرو', 'tog-editsectiononrightclick' => 'سطری عنوانات پر دایاں طق کے ذریعے سطری ترمیم کاری فعال بناؤ', 'tog-showtoc' => 'فہرستِ مندرجات دکھاؤ (3 سے زیادہ سرخیوں والے صفحات کیلئے)', -'tog-rememberpassword' => 'اِس شمارندہ پر میری داخلہ کاری معلومات یاد رکھو', -'tog-editwidth' => 'تدوینی خانہ کو اتنا چوڑا کرو کہ یہ پوری سکرین پر محیط ہوجائے', +'tog-rememberpassword' => 'اِس شمارندہ پر میری داخلہ کاری معلومات یاد رکھو (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'میرے مرتب شدہ صفحات کو میری زیرِنظرفہرست میں شامل کیا کرو', 'tog-watchdefault' => 'میرے ترمیم شدہ صفحات کو میری زیرِنظرفہرست میں شامل کیا کرو', 'tog-watchmoves' => 'میں جن صفحات کو منتقل کرتا ہوں، اُن کو میری زیرِنظرفہرست میں شامل کیا کرو', @@ -99,8 +99,9 @@ $messages = array( 'underline-default' => 'متصفح کا طے شدہ', # Font style option in Special:Preferences -'editfont-style' => 'خانۂ تدوین کا اندازِ تحریر:', -'editfont-default' => 'متصفح کا طے شدہ', +'editfont-style' => 'خانۂ تدوین کا اندازِ تحریر:', +'editfont-default' => 'متصفح کا طے شدہ', +'editfont-monospace' => 'یکفضائی نویسہ', # Dates 'sunday' => 'اتوار', @@ -191,29 +192,18 @@ $messages = array( 'faqpage' => 'Project:معلوماتِ عامہ', # Vector skin -'vector-action-addsection' => 'نیا موضوع', -'vector-action-delete' => 'حذف کرو', -'vector-action-move' => 'منتقل کرو', -'vector-action-protect' => 'محفوظ کرو', -'vector-action-unprotect' => 'غیر محفوظ', -'vector-namespace-category' => 'زمرہ', -'vector-namespace-help' => 'صفحۂ مدد', -'vector-namespace-image' => 'ملف', -'vector-namespace-main' => 'صفحہ', -'vector-namespace-media' => 'صفحۂ وسیط', -'vector-namespace-mediawiki' => 'پیغام', -'vector-namespace-project' => 'صفحۂ منصوبہ', -'vector-namespace-special' => 'خاص صفحہ', -'vector-namespace-talk' => 'تبادلہٴ خیال', -'vector-namespace-template' => 'سانچہ', -'vector-namespace-user' => 'صفحۂ صارف', -'vector-view-create' => 'تخلیق', -'vector-view-edit' => 'ترمیم', -'vector-view-history' => 'تاریخچہ', -'vector-view-view' => 'پڑھیں', -'vector-view-viewsource' => 'مسودہ', -'actions' => 'ایکشنز', -'namespaces' => 'جائے نام', +'vector-action-addsection' => 'نیا موضوع', +'vector-action-delete' => 'حذف کرو', +'vector-action-move' => 'منتقل کرو', +'vector-action-protect' => 'محفوظ کرو', +'vector-action-unprotect' => 'غیر محفوظ', +'vector-view-create' => 'تخلیق', +'vector-view-edit' => 'ترمیم', +'vector-view-history' => 'تاریخچہ', +'vector-view-view' => 'پڑھیں', +'vector-view-viewsource' => 'مسودہ', +'actions' => 'ایکشنز', +'namespaces' => 'جائے نام', 'errorpagetitle' => 'خطاء', 'returnto' => 'واپس $1۔', @@ -436,7 +426,7 @@ Warning: Page may not contain recent updates.', 'yourname' => 'اسمِ رکنیت', 'yourpassword' => 'کلمۂ شناخت', 'yourpasswordagain' => 'کلمۂ شناخت دوبارہ لکھیں', -'remembermypassword' => 'مجھے یاد رکھیں', +'remembermypassword' => 'مجھے یاد رکھیں (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'آپکا ڈومین', 'externaldberror' => 'یا تو توثیقی ڈیٹابیس میں خطا واقع ہوئی اور یا آپ کو بیرونی کھاتہ بتاریخ کرنے کی اِجازت نہیں ہے.', 'login' => 'داخل ہوں', @@ -453,6 +443,7 @@ Warning: Page may not contain recent updates.', 'gotaccount' => "پہلے سے کھاتہ بنا ہوا ہے? '''$1'''.", 'gotaccountlink' => 'داخل ہوجائیے', 'createaccountmail' => 'بذریعۂ برقی ڈاک', +'createaccountreason' => 'وجہ:', 'badretype' => 'درج شدہ کلمۂ شناخت اصل سے مطابقت نہیں رکھتا۔', 'userexists' => 'درج شدہ اسمِ صارف پہلے سے زیرِاستعمال ہے. براہِ کرم، کوئی دوسرا اسمِ صارف استعمال کریں.', @@ -1118,7 +1109,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'میری زیرنظرفہرست', 'mywatchlist' => 'میری زیرنظرفہرست', -'watchlistfor' => "(براۓ '''$1''')", 'addedwatch' => 'زیر نظر فہرست میں اندراج کردیاگیا', 'addedwatchtext' => "یہ صفحہ \"\$1\" آپکی [[Special:Watchlist|زیرنظر]] فہرست میں شامل کردیا گیا ہے۔ اب مستقل میں اس صفحے اور اس سے ملحقہ تبادلہ خیال کا صفحے میں کی جانے والی تبدیلوں کا اندراج کیا جاتا رہے گا، اور ان صفحات کی شناخت کو سہل بنانے کے لیۓ [[Special:حالیہ تبدیلیاں|حالیہ تبدیلیوں کی فہرست]] میں انکو '''مُتَجَل''' (bold) تحریر کیا جاۓ گا۔

    اگر آپ کسی وقت اس صفحہ کو زیرنظرفہرست سے خارج کرنا چاہیں تو اوپر دیۓ گۓ \"زیرنظرمنسوخ\" پر ٹک کیجیۓ۔", 'removedwatch' => 'زیرنظرفہرست سے خارج کر دیا گیا', diff --git a/languages/messages/MessagesUz.php b/languages/messages/MessagesUz.php index 4b9f36fd..b3db4124 100644 --- a/languages/messages/MessagesUz.php +++ b/languages/messages/MessagesUz.php @@ -34,7 +34,7 @@ $namespaceNames = array( NS_CATEGORY => 'Turkum', NS_CATEGORY_TALK => 'Turkum_munozarasi', ); - + $namespaceAliases = array( 'Mediya' => NS_MEDIA, 'MediyaViki' => NS_MEDIAWIKI, @@ -237,7 +237,7 @@ Shuni e'tiborga olingki, ayrim sahifalar siz brauzeringiz keshini tozalamaguning 'yourname' => 'Foydalanuvchi nomi', 'yourpassword' => "Maxfiy so'z", 'yourpasswordagain' => "Maxfiy so'zni qayta kiriting", -'remembermypassword' => "Hisob ma'lumotlarini shu kompyuterda eslab qolish", +'remembermypassword' => "Hisob ma'lumotlarini shu kompyuterda eslab qolish (for a maximum of $1 {{PLURAL:$1|day|days}})", 'login' => 'Kirish', 'nav-login-createaccount' => 'Kirish / Hisob yaratish', 'loginprompt' => "{{SITENAME}}ga kirish uchun kukilar yoqilgan bo'lishi kerak.", @@ -307,8 +307,6 @@ Siz shuningdek bu yozganlaringiz sizniki yoki erkin litsenziya ostida ekanligini 'copyrightwarning2' => "Iltimos, shuni esda tutingki, {{SITENAME}} sahifalaridagi barcha matnlar boshqa foydalanuvchilar tomonidan tahrirlanishi, almashtirilishi yoki o'chirilishi mumkin. Agar siz yozgan ma'lumotlaringizni bunday tartibda tahrirlanishiga rozi bo'lmasangiz, unda uni bu yerga joylashtirmang.
    Bundan tashqari, siz ushbu ma'lumotlarni o'zingiz yozgan bo'lishingiz yoki ruxsat berilgan internet manzilidan yoki shu kabi erkin resursdan nusxa olgan bo'lishingiz lozim (Qo'shimcha ma'lumotlar ushun $1 sahifasiga murojaat qiling). '''MUALLIFLIK HUQUQI QO'YILGAN ISHLARNI RUXSATSIZ BU YERGA JOYLASHTIRMANG!'''", -'longpagewarning' => "'''DIQQAT: Ushbu sahifa hajmi $1 kilobaytdir; ayrim browser'lar 32 kb dan oshiq hajmli sahifalarni tahrirlashda muammolarga duch kelishi mumkin. -Agar sizda shunday muammolar yuzaga kelsa, iltimos, sahifani butunlay emas, qismlab tahrirlang.'''", 'templatesused' => 'Ushbu sahifada ishlatilgan andozalar:', 'template-protected' => '(himoyalangan)', 'template-semiprotected' => '(yarim-himoyalangan)', @@ -502,7 +500,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'Kuzatuv roʻyxatim', 'mywatchlist' => 'Kuzatuv roʻyxatim', -'watchlistfor' => "('''$1''' uchun)", 'nowatchlist' => "Kuzatuv ro'yxatingizda hech narsa yo'q.", 'addedwatch' => "Kuzatuv ro'yxatiga qo'shildi", 'addedwatchtext' => "\"[[:\$1]]\" sahifasi sizning [[Special:Watchlist|kuzatuv ro'yxatingizga]] qo'shildi. Bu sahifada va unga mos munozara sahifasida bo'ladigan kelajakdagi o'zgarishlar bu yerda ro'yxatga olinadi, hamda bu sahifa topish qulay bo'lishi uchun [[Special:RecentChanges|yangi o'zgarishlar ro'yxati]]da '''qalin''' harflar bilan ko'rsatiladi. @@ -654,9 +651,9 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.', # Media information 'imagemaxsize' => "Tasvir ta'rifi sahifasidagi tasvirning kattaligi:", 'thumbsize' => 'Tasvirning kichiklashtirilgan versiyasining kattaligi:', -'file-info-size' => '($1 × $2 piksel, fayl hajmi: $3, MIME tipi: $4)', +'file-info-size' => '$1 × $2 piksel, fayl hajmi: $3, MIME tipi: $4', 'file-nohires' => 'Bundan kattaroq tasvir yoʻq.', -'svg-long-desc' => '(SVG fayl, asl oʻlchamlari $1 × $2 piksel, fayl hajmi: $3)', +'svg-long-desc' => 'SVG fayl, asl oʻlchamlari $1 × $2 piksel, fayl hajmi: $3', 'show-big-image' => 'Asl hajmdagi tasvir', 'show-big-image-thumb' => 'Ushbu koʻrinish oʻlchamlari: $1 × $2 piksel', diff --git a/languages/messages/MessagesVec.php b/languages/messages/MessagesVec.php index b41dc599..3a03aa44 100644 --- a/languages/messages/MessagesVec.php +++ b/languages/messages/MessagesVec.php @@ -9,8 +9,10 @@ * * @author BrokenArrow * @author Candalua + * @author Frigotoni * @author Nick1915 * @author Omnipaedista + * @author OrbiliusMagister * @author Reedy * @author Urhixidur * @author Vajotwo @@ -52,11 +54,11 @@ $namespaceAliases = array( $specialPageAliases = array( 'DoubleRedirects' => array( 'DópiRimandi' ), - 'BrokenRedirects' => array( 'RimandiSbaglià' ), + 'BrokenRedirects' => array( 'RimandiSbalià' ), 'Disambiguations' => array( 'Disanbiguassion' ), 'Userlogin' => array( 'Entra' ), 'Userlogout' => array( 'VàFora' ), - 'CreateAccount' => array( 'CreaAccount' ), + 'CreateAccount' => array( 'CreaUtente' ), 'Preferences' => array( 'Preferense' ), 'Watchlist' => array( 'TegnùiDeOcio' ), 'Recentchanges' => array( 'ÙltimiCanbiamenti' ), @@ -66,36 +68,37 @@ $specialPageAliases = array( 'Listusers' => array( 'Utenti' ), 'Listgrouprights' => array( 'ListaDiritiDeGrupo' ), 'Statistics' => array( 'Statìsteghe' ), - 'Randompage' => array( 'PàxenaACaso' ), - 'Lonelypages' => array( 'PàxenaÒrfana' ), - 'Uncategorizedpages' => array( 'PàxeneSensaCategorie' ), + 'Randompage' => array( 'PaginaAOcio' ), + 'Lonelypages' => array( 'PagineSolitarie' ), + 'Uncategorizedpages' => array( 'PagineSensaCategorie' ), 'Uncategorizedcategories' => array( 'CategorieSensaCategorie' ), 'Uncategorizedimages' => array( 'FileSensaCategorie' ), - 'Uncategorizedtemplates' => array( 'ModèiMiaCategorizà' ), + 'Uncategorizedtemplates' => array( 'ModèiSensaCategorie' ), 'Unusedcategories' => array( 'CategorieMiaDoparà' ), 'Unusedimages' => array( 'FileMiaDoparà' ), - 'Wantedpages' => array( 'PàxeneRichieste' ), - 'Wantedcategories' => array( 'CategorieRichieste' ), - 'Wantedfiles' => array( 'FileRichiesti' ), - 'Wantedtemplates' => array( 'ModèiRichiesti' ), - 'Mostlinked' => array( 'PàxenePiassèRiciamà' ), - 'Mostlinkedcategories' => array( 'CategoriePiassèRiciamà' ), + 'Wantedpages' => array( 'PagineDomandà' ), + 'Wantedcategories' => array( 'CategorieDomandà' ), + 'Wantedfiles' => array( 'FileDomandà' ), + 'Wantedtemplates' => array( 'ModèiDomandà' ), + 'Mostlinked' => array( 'PaginePiassèRiciamà' ), + 'Mostlinkedcategories' => array( 'CategoriePiassèDoparà' ), 'Mostlinkedtemplates' => array( 'ModèiPiassèDoparà' ), - 'Mostimages' => array( 'FilePiassèRiciamà' ), - 'Mostcategories' => array( 'PàxeneConPiassèCategorie' ), - 'Mostrevisions' => array( 'PàxeneConPiassèRevision' ), - 'Fewestrevisions' => array( 'PàxeneConMancoRevision' ), - 'Shortpages' => array( 'PàxenePiCurte' ), - 'Longpages' => array( 'PàxenePiLonghe' ), - 'Newpages' => array( 'PàxenePiNove' ), - 'Ancientpages' => array( 'PàxeneMancoNove' ), - 'Deadendpages' => array( 'PàxeneSensaUscita' ), - 'Protectedpages' => array( 'PàxeneProtete' ), + 'Mostimages' => array( 'FilePiassèDoparà' ), + 'Mostcategories' => array( 'PagineConPiassèCategorie' ), + 'Mostrevisions' => array( 'PagineConPiassèRevision' ), + 'Fewestrevisions' => array( 'PagineConMancoRevision' ), + 'Shortpages' => array( 'PaginePiCurte' ), + 'Longpages' => array( 'PaginePiLonghe' ), + 'Newpages' => array( 'PagineNove' ), + 'Ancientpages' => array( 'PagineMancoNove' ), + 'Deadendpages' => array( 'PagineSensaUscita' ), + 'Protectedpages' => array( 'PagineProtete' ), 'Protectedtitles' => array( 'TitoliProteti' ), - 'Allpages' => array( 'TuteLePàxene' ), + 'Allpages' => array( 'TuteLePagine' ), 'Prefixindex' => array( 'Prefissi' ), 'Ipblocklist' => array( 'IPBlocài' ), - 'Specialpages' => array( 'PàxeneSpeciali' ), + 'Unblock' => array( 'Desbloca' ), + 'Specialpages' => array( 'PagineSpeciali' ), 'Contributions' => array( 'Contributi' ), 'Emailuser' => array( 'MandaEMail' ), 'Confirmemail' => array( 'ConfermaEMail' ), @@ -116,28 +119,30 @@ $specialPageAliases = array( 'Userrights' => array( 'ParmessiUtente' ), 'MIMEsearch' => array( 'SercaMIME' ), 'FileDuplicateSearch' => array( 'SercaDopioniDeiFile' ), - 'Unwatchedpages' => array( 'PàxeneMiaTegnùDeOcio' ), + 'Unwatchedpages' => array( 'PagineMiaTegnùDeOcio' ), 'Listredirects' => array( 'Rimandi' ), 'Revisiondelete' => array( 'ScancelaRevision' ), 'Unusedtemplates' => array( 'ModèiMiaDoparà' ), - 'Randomredirect' => array( 'RImandoCasuale' ), - 'Mypage' => array( 'LaMePàxenaUtente' ), + 'Randomredirect' => array( 'UnRimandoAOcio' ), + 'Mypage' => array( 'LaMePaginaUtente' ), 'Mytalk' => array( 'LeMeDiscussion' ), 'Mycontributions' => array( 'IMeContributi' ), 'Listadmins' => array( 'Aministradori' ), 'Listbots' => array( 'ListaDeiBot' ), - 'Popularpages' => array( 'PàxenePiassèVisità' ), + 'Popularpages' => array( 'PaginePiassèVisità' ), 'Search' => array( 'Serca' ), 'Resetpass' => array( 'ReinpostaPassword' ), - 'Withoutinterwiki' => array( 'PàxeneSensaInterwiki' ), + 'Withoutinterwiki' => array( 'PagineSensaInterwiki' ), 'MergeHistory' => array( 'FondiCronologia' ), 'Filepath' => array( 'PercorsoFile' ), 'Invalidateemail' => array( 'InvalidaEMail' ), - 'Blankpage' => array( 'PàxenaVoda' ), + 'Blankpage' => array( 'PaginaVoda' ), 'LinkSearch' => array( 'SercaLigamenti' ), 'DeletedContributions' => array( 'ContributiScancelà' ), 'Tags' => array( 'Tag' ), 'Activeusers' => array( 'UtentiAtivi' ), + 'ComparePages' => array( 'ConfrontaPagine' ), + 'Badtitle' => array( 'TitoloSbalià' ), ); $messages = array( @@ -156,8 +161,7 @@ $messages = array( 'tog-editsection' => 'Modifega de łe sesion tramite el cołegamento [modifega]', 'tog-editsectiononrightclick' => 'Modifega de łe sesion tramite clic destro sol titoło (el richiede JavaScript)', 'tog-showtoc' => "Mostra l'indexe par łe pajine con pì de 3 sesion", -'tog-rememberpassword' => 'Ricorda ła password so sto computer (el richiede de asetare i cookies)', -'tog-editwidth' => 'Slarga al masimo ła caseła de modifega', +'tog-rememberpassword' => 'Tiente in mente la me password so sto computer (par un massimo de $1 {{PLURAL:$1|zorno|zorni}})', 'tog-watchcreations' => 'Zonta łe pajine creae a i oservai spesałi', 'tog-watchdefault' => 'Zonta łe pajine modifegae a i oservai spesałi', 'tog-watchmoves' => 'Zonta łe pajine spostae a i oservai spesałi', @@ -304,31 +308,21 @@ I seguenti cołegamenti i xé en łengua inglese: 'faqpage' => 'Project:Domande frequenti', # Vector skin -'vector-action-addsection' => 'Zonta discusion', -'vector-action-delete' => 'Scanseła', -'vector-action-move' => 'Sposta', -'vector-action-protect' => 'Protezi', -'vector-action-undelete' => 'Recupera', -'vector-action-unprotect' => 'Sbloca', -'vector-namespace-category' => 'Categoria', -'vector-namespace-help' => 'Ajuto', -'vector-namespace-image' => 'File', -'vector-namespace-main' => 'Pajina', -'vector-namespace-media' => 'File multimediałe', -'vector-namespace-mediawiki' => 'Mesajo', -'vector-namespace-project' => 'Pajina de servisio', -'vector-namespace-special' => 'Pajina spesałe', -'vector-namespace-talk' => 'Discusion', -'vector-namespace-template' => 'Modeło', -'vector-namespace-user' => 'Pajina utente', -'vector-view-create' => 'Crea', -'vector-view-edit' => 'Canbia', -'vector-view-history' => 'Varda la storia', -'vector-view-view' => 'Lezi', -'vector-view-viewsource' => 'Varda el testo', -'actions' => 'Asion', -'namespaces' => 'Namespace', -'variants' => 'Varianse', +'vector-action-addsection' => 'Zonta discusion', +'vector-action-delete' => 'Scanseła', +'vector-action-move' => 'Sposta', +'vector-action-protect' => 'Protezi', +'vector-action-undelete' => 'Recupera', +'vector-action-unprotect' => 'Sbloca', +'vector-simplesearch-preference' => "Intaca i sugerimenti di ricerca avansadi (solo par l'interfacia Vector)", +'vector-view-create' => 'Crea', +'vector-view-edit' => 'Canbia', +'vector-view-history' => 'Varda la storia', +'vector-view-view' => 'Lezi', +'vector-view-viewsource' => 'Varda el testo', +'actions' => 'Asion', +'namespaces' => 'Namespace', +'variants' => 'Varianse', 'errorpagetitle' => 'Erore', 'returnto' => 'Torna a $1.', @@ -389,6 +383,9 @@ Tropi utenti i sta tentando de visuałisare sta pajina. Atendare qualche minudo prima de riprovare a cargare ła pajina. $1', +'pool-timeout' => "Timeout durante l'atesa de lo sbloco", +'pool-queuefull' => 'La cóa de laorassion la xe piena', +'pool-errorunknown' => 'Eror sconossùo', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Se parla de {{SITENAME}}', @@ -420,7 +417,7 @@ $1', 'ok' => 'OK', 'retrievedfrom' => 'Cavà fora da "$1"', 'youhavenewmessages' => 'Te ghè $1 ($2).', -'newmessageslink' => 'dei messagi novi', +'newmessageslink' => 'dei mesagi novi', 'newmessagesdifflink' => 'ultimo canbiamento', 'youhavenewmessagesmulti' => 'Te ghè messagi novi su $1', 'editsection' => 'canbia', @@ -510,7 +507,7 @@ Se prega de dìrghelo a un [[Special:ListUsers/sysop|aministradore]] indicando l 'badarticleerror' => 'Operasion no consentia par sta pajina.', 'cannotdelete' => 'No xè sta posibiłe scansełare el file "$1". Podaria esare sta zà scansełà da qualcun altro.', -'badtitle' => 'Titolo mia giusto', +'badtitle' => 'Titoło mia justo', 'badtitletext' => "El titoło de ła pajina richiesta xè vodo, erà o con carateri no amesi opure el deriva da n'erore ne i cołegamenti tra siti wiki diversi o version en łengue diverse de ło steso sito.", 'perfcached' => 'Sti dati qua no i vien mia azornà in tenpo reale, ma solo na olta ogni tanto.', 'perfcachedts' => "Sti dati qua i xe stà azornà l'ultima olta el $1.", @@ -554,7 +551,8 @@ Te poli sistemarte come te vol le to [[Special:Preferences|prefarense de {{SITEN 'yourname' => 'Nome utente:', 'yourpassword' => 'Password:', 'yourpasswordagain' => 'De novo la password:', -'remembermypassword' => 'Ricorda ła password so sto computer', +'remembermypassword' => 'Tiente in mente la password su sto conputer (par un massimo de $1 {{PLURAL:$1|zorno|zorni}})', +'securelogin-stick-https' => 'Resta tacà par HTTPS dopo èssar entrà', 'yourdomainname' => 'Spesifegare el dominio', 'externaldberror' => "Se xè verifegà n'erore con el server de autenticasion esterno, opure no se dispone de łe autorizasion nesesarie par ajornare el proprio aceso esterno.", 'login' => 'Entra', @@ -571,6 +569,7 @@ Te poli sistemarte come te vol le to [[Special:Preferences|prefarense de {{SITEN 'gotaccount' => "Sito zà iscrito? '''$1'''.", 'gotaccountlink' => 'Entra', 'createaccountmail' => 'Par e-mail', +'createaccountreason' => 'Motivassion:', 'badretype' => 'Le do password le xe difarenti.', 'userexists' => 'Sto nome utente se lo gà zà tolto qualchedun altro. Tòtene uno difarente.', @@ -589,6 +588,7 @@ Tòtene uno difarente.', 'wrongpasswordempty' => 'No xè sta inseria alcuna password. Riprovare.', 'passwordtooshort' => 'Łe password e ga da contegnere almanco {{PLURAL:$1|1 caratere|$1 carateri}}.', 'password-name-match' => 'Ła password a ga da esare difarente dal nome utente.', +'password-login-forbidden' => 'Sto nome utente e/o password i xè stai proibìi', 'mailmypassword' => 'Màndeme na password nova al me indirisso e-mail', 'passwordremindertitle' => 'Servisio Password Reminder de {{SITENAME}}', 'passwordremindertext' => 'Qualcheduni (probabilmente ti, da l\'indirizo IP $1) el gà domandà che ghe vegna mandà na nova password par {{SITENAME}} ($4). @@ -675,11 +675,12 @@ Forse te ghè zà canbià la to password o te ghè domandà na password tenporan 'showpreview' => 'Varda anteprima', 'showlivepreview' => 'Anteprima in tenpo reàl', 'showdiff' => 'Mostra canbiamenti', -'anoneditwarning' => "'''Ocio:''' No te sì entrà con un nome utente. -In te la storia de la pagina restarà el to indirizo IP.", +'anoneditwarning' => "'''Ocio:''' Nò te sì entrà co' un nome utente. +In te ła storia de ła pajina restarà el to indiriso IP.", +'anonpreviewwarning' => '"No te ghe eseguio el login. Salvando el to indiriso IP sarà rejistrà ne ła cronołosia de sta voxe."', 'missingsummary' => "'''Ocio:''' No te ghè indicà l'ogeto de la modifica. Macando de novo 'Salva la pagina' la modifica la vegnerà con l'ogeto vodo.", 'missingcommenttext' => 'Inserissi un comento qua soto.', -'missingcommentheader' => "'''Ocio:''' No te ghè specificà l'intestazion de sto commento. Macando de novo '''Salva la pagina''' la modifica la vegnarà salvà senza intestazion.", +'missingcommentheader' => "'''Ocio:''' No te ghè fornìo un ogeto par sto comento. Macando da novo \"{{int:savearticle}}\" la modifica la vegnarà salvà sensa ogeto.", 'summary-preview' => 'Anteprima del comento:', 'subject-preview' => 'Anteprima ogeto/intestazion:', 'blockedtitle' => 'Utente blocà', @@ -752,7 +753,7 @@ L'ultimo ełemento del rejistro de i blochi xè riportà de seguito par informas 'usercsspreview' => "'''Sta qua la xe solo n'anteprima del proprio CSS personal. Le modifiche no le xe gnancora stà salvà!'''", 'userjspreview' => "'''Sta qua la xe solo n'anteprima par proar el proprio JavaScript personal; le modifiche no le xe gnancora stà salvà!'''", -'userinvalidcssjstitle' => "'''Ocio:''' No ghe xe nissuna skin con nome \"\$1\". Nota che le pagine par i .css e .js personalizà le gà l'iniziale del titolo minuscola, par esenpio {{ns:user}}:Esenpio/monobook.css e no {{ns:user}}:Esenpio/Monobook.css.", +'userinvalidcssjstitle' => "'''Ocio:''' No ghe xe nissuna skin con nome \"\$1\". Nota che le pagine par i .css e .js personalizà le gà l'iniziale del titolo minuscola, par esenpio {{ns:user}}:Esenpio/vector.css e no {{ns:user}}:Esenpio/Vector.css.", 'updated' => '(Agiornà)', 'note' => "'''Nota:'''", 'previewnote' => "'''Sta qua la xe solo n'anteprima; i canbiamenti a la pagina NO i xe gnancora stà salvà!'''", @@ -788,17 +789,16 @@ Cargando el testo te dichiari inoltre, soto la to responsabilità, che el testo Se no te voli che i to scriti i vegna modificà sensa pietà, alora no sta inserirli qua.
    Sapi che te stè prometendo che te stè inserendo un testo scrito de to pugno, o copià da na fonte de publico dominio o similarmente lìbara (varda $1 par i detagli). '''NO STA INSERIR OPERE PROTETE DA COPYRIGHT SENSA PERMESSO!'''", -'longpagewarning' => "'''OCIO: Sta pàxena la xè longa $1 kilobyte; serti browser i podarìa verghe dei problemi ne ła modifega de pàxene che se avisina o supera i 32 kB. Valuta l'oportunità de sudivìdar ła pàxena in sezion pìassè picenine.'''", 'longpageerror' => "'''ERROR: The text you have submitted is $1 kilobytes long, which is longer than the maximum of $2 kilobytes. It cannot be saved.'''", 'readonlywarning' => "'''OCIO: El database el xe stà blocà par manutenzion, quindi no se pol salvar le modifiche in sto momento. Par no pèrdarle, te pol copiar tuto quel che te ghè inserìo fin desso ne la casela de modifica, incolarlo in un programa de elaborazion de testi e salvarlo, intanto che te speti che i sbloca el database.''' L'aministrador che gà blocà el database el gà dato la seguente spiegassion: $1", -'protectedpagewarning' => "'''Ocio: Sta pagina la xe sta proteta e solo i aministradori i pode modificarla.''' Sta qua la xe l'ultima operassion catà sul registro de la pagina:", -'semiprotectedpagewarning' => "'''Ocio:''' Sta pàxena la xe stà blocà in maniera che solo i utenti registrài i possa canbiarla. Sta qua la xe l'ultima operassion catà sul registro de la pagina:", -'cascadeprotectedwarning' => "'''Ocio:''' Sta pagina la xe stà blocà in modo che solo i utenti con privilegi de aministrador i possa modificarla. Questo sucede parché la pagina la xe inclusa {{PLURAL:\$1|ne la pagina indicà de seguito, che la xe stà proteta|ne le pagine indicà de seguito, che le xe stà protete}} selezionando la protezion \"ricorsiva\":", -'titleprotectedwarning' => "'''OCIO: Sta pàxena la xe stà blocà in modo che solo i utenti con [[Special:ListGroupRights|serti privilègi]] i la possa crear.''' Sta qua la xe l'ultima operassion catà sul registro de la pagina:", +'protectedpagewarning' => "'''Ocio:''' Sta pajina ła xe sta proteta in maniera che soło i aministradori i posa canbiarla. Sta qua ła xe l'ultima operasion catà sul registro de ła pajina:", +'semiprotectedpagewarning' => "'''Ocio:''' Sta pajina ła xe stà proteta in maniera che soło i utenti rexistrài i posa canbiarla. Sta qua ła xe l'ultima operasion catà sul registro de ła pajina:", +'cascadeprotectedwarning' => "'''Ocio:''' Sta pajina ła xe stà proteta in maniera che soło i utenti co priviłegi de aministrador i posa canbiarla. Questo sucede parché ła pajina ła xe inclusa {{PLURAL:\$1|'nte ła pajina indicà de seguito, che ła xe stà proteta|ne le pagine indicà de seguito, che łe xe stae protete}} sełesionando ła protesion \"ricorsiva\":", +'titleprotectedwarning' => "'''Ocio:''' Sta pajina ła xe stà proteta in modo che soło i utenti co [[Special:ListGroupRights|serti privilègi]] i ła posa crear. Sta qua ła xe l'ultima operasion catà sul registro de ła pajina:", 'templatesused' => '{{PLURAL:$1|Modèl doparà|Modèi doparà}} su sta pagina:', 'templatesusedpreview' => '{{PLURAL:$1|Modèl|Modèi}} doparà su sta anteprima:', 'templatesusedsection' => '{{PLURAL:$1|Modèl|Modèi}} doparà in sta sezion:', @@ -811,8 +811,8 @@ L'aministrador che gà blocà el database el gà dato la seguente spiegassion: $ 'sectioneditnotsupported-title' => 'Modifica de sezion mia suportà', 'sectioneditnotsupported-text' => 'La modifica de singole sezion no le xe mia suportà su sta pagina.', 'permissionserrors' => 'Eror nei permessi', -'permissionserrorstext' => "No te ghè i permessi necessari ad eseguir l'azion richiesta, par {{PLURAL:$1|el seguente motivo|i seguenti motivi}}:", -'permissionserrorstext-withaction' => 'No se dispone de i parmesi nesesari par $2, par {{PLURAL:$1|el seguente modivo|i seguenti modivi}}:', +'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.''' Par piaser assicùrete che sia dal bon el caso de 'ndar vanti a modificar sta pagina. @@ -963,6 +963,8 @@ $1", 'logdelete-failure' => "'''No se riesse a inpostar la visibilità 'ntel registro:''' $1", 'revdel-restore' => 'Canbia la visibilità', +'revdel-restore-deleted' => 'revision scancelà', +'revdel-restore-visible' => 'revision visibili', 'pagehist' => 'Cronologia de la pagina', 'deletedhist' => 'Cronologia scancelà', 'revdelete-content' => 'contenuto', @@ -1027,11 +1029,13 @@ Assicùrete che la continuità storica de la pagina no la vegna alterà.', # Diffs 'history-title' => "Storia dei canbiamenti de ''$1''", 'difference' => '(Difarense fra le version)', +'difference-multipage' => '(Difarensa tra le pagine)', 'lineno' => 'Riga $1:', 'compareselectedversions' => 'Confronta le version segnàe', 'showhideselectedversions' => 'Mostra/scondi version selessionà', 'editundo' => 'tira indrìo', -'diff-multi' => '({{PLURAL:$1|Una revision intermedia non mostrà|$1 revision intermedie non mostrà}}.)', +'diff-multi' => '({{PLURAL:$1|Una revision intermedia|$1 revision intermedie}} de {{PLURAL:$2|un 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à)', # Search results 'searchresults' => 'Risultati de la riserca', @@ -1066,6 +1070,7 @@ Assicùrete che la continuità storica de la pagina no la vegna alterà.', 'searchprofile-everything-tooltip' => 'Serca dapartuto (anca su le pagine de discussion)', 'searchprofile-advanced-tooltip' => 'Serca nei namespace personalixài', 'search-result-size' => '$1 ({{PLURAL:$2|na parola|$2 parole}})', +'search-result-category-size' => '{{PLURAL:$1|1 utente|$1 utenti}} ({{PLURAL:$2|1 sotocategoria|$2 sotocategorie}}, {{PLURAL:$3|1 file|$3 file}})', 'search-result-score' => 'Rilevansa: $1%', 'search-redirect' => '(redirect $1)', 'search-section' => '(sesion $1)', @@ -1141,6 +1146,7 @@ Prova a métarghe \"all:\" davanti al testo che te serchi par vardar in tuti i n 'contextlines' => 'Righe de testo par ciascun risultato', 'contextchars' => 'Caratteri par linea:', 'stub-threshold' => 'Valor minimo par i colegamenti ai stub:', +'stub-threshold-disabled' => 'Disativà', 'recentchangesdays' => 'Nùmaro de giòrni da mostrar ne le ultime modifiche:', 'recentchangesdays-max' => '($1 {{PLURAL:$1|zorno|zorni}} massimo)', 'recentchangescount' => 'Nùmaro de modìfeghe da far védar (valor predefinìo):', @@ -1172,6 +1178,7 @@ Prova a métarghe \"all:\" davanti al testo che te serchi par vardar in tuti i n 'prefs-files' => 'File', 'prefs-custom-css' => 'CSS personalixà', 'prefs-custom-js' => 'JS personalixà', +'prefs-common-css-js' => 'CSS/JS condiviso par tute łe skin:', 'prefs-reset-intro' => 'Te pol doparar sta pagina par riportar le to preferense a quele predefinìe. Sta operassion no la pol èssar anulà.', 'prefs-emailconfirm-label' => "Conferma de l'e-mail:", @@ -1209,7 +1216,9 @@ In più te pol anca farte scrìvar da altri tramite la to pagina personale o la 'prefs-advancedrendering' => 'Preferense avansade', 'prefs-advancedsearchoptions' => 'Preferense avansade', 'prefs-advancedwatchlist' => 'Preferense avansade', -'prefs-display' => 'Preferense de visualixassion', +'prefs-displayrc' => 'Preferense de visualixassion', +'prefs-displaysearchoptions' => 'Opzioni de visualixassion', +'prefs-displaywatchlist' => 'Opzioni de visualixassion', 'prefs-diffs' => 'Difarense', # User rights @@ -1295,6 +1304,7 @@ In più te pol anca farte scrìvar da altri tramite la to pagina personale o la 'right-hideuser' => 'Bloca un nome utente, scondéndolo al publico', 'right-ipblock-exempt' => "Scavalca i blochi de l'IP, i auto-blochi e i blochi de grupi de IP", 'right-proxyunbannable' => 'Salta via i blochi sui proxy', +'right-unblockself' => 'Sbloca se steso', 'right-protect' => 'Canbia i livèi de protezion', 'right-editprotected' => 'Modifica pagine protete', 'right-editinterface' => "Modifica l'interfacia utente", @@ -1317,7 +1327,6 @@ In più te pol anca farte scrìvar da altri tramite la to pagina personale o la 'right-siteadmin' => 'Bloca e desbloca el database', 'right-reset-passwords' => 'Reinposta la password de altri utenti', 'right-override-export-depth' => 'Esporta le pàxene, includendo le pàxene ligàe fin a na profondità de 5', -'right-versiondetail' => 'Fà védar le informassion conplete su la version del software', 'right-sendemail' => 'Mandarghe e-mail a cheialtri utenti', # User rights log @@ -1368,14 +1377,9 @@ In più te pol anca farte scrìvar da altri tramite la to pagina personale o la 'recentchanges-legend' => 'Prefarense par i ultimi canbiamenti', 'recentchangestext' => 'Qua se vede i ultimi canbiamenti fati a sto sito.', 'recentchanges-feed-description' => 'Tien tracia dei ultimi canbiamenti fati a sto sito', -'recentchanges-label-legend' => 'Legenda: $1.', -'recentchanges-legend-newpage' => '$1 - pagina nova', 'recentchanges-label-newpage' => 'Sta modifica la ga creà na pagina nova', -'recentchanges-legend-minor' => '$1 - modifica picenina', 'recentchanges-label-minor' => 'Sto qua el xe un canbiamento picenin', -'recentchanges-legend-bot' => '$1 - modifica bot', 'recentchanges-label-bot' => 'Sta modifica el la ga fata un bot', -'recentchanges-legend-unpatrolled' => '$1 - modifica mia verificà', 'recentchanges-label-unpatrolled' => 'Sta modifica no la xe stà gnancora verificà', 'rcnote' => "Qua soto se vede {{PLURAL:$1|l'ultimo canbiamento|i ultimi '''$1''' canbiamenti}} {{PLURAL:$2|in te l'ultimo zorno|in tei ultimi '''$2''' zorni}}, fin a le $5 del $4.", 'rcnotefrom' => " Qui di seguito sono elencate le modifiche da '''$2''' (fino a '''$1''').", @@ -1423,6 +1427,9 @@ par poder cargar dei file.', 'upload_directory_missing' => 'La cartèla de caricamento ($1) no la esiste mìa e no la pode vegner creàda dal browser web.', 'upload_directory_read_only' => "El server web no l'è bon de scrìvar ne la directory de caricamento ($1).", 'uploaderror' => 'Eror nel caricamento', +'upload-recreate-warning' => "'''Ocio: Un file co sto nome el xe stà scancelà o spostà.''' + +Qua ghe xe el registro de le scancelassion e dei spostamenti:", 'uploadtext' => "Par cargar novi file, dopara el modulo qua soto. Par védar o sercar i file zà caricà, consulta la [[Special:FileList|lista dei file caricà]]. I caricamenti de file te pol védarli nel [[Special:Log/upload|registro dei caricamenti]], le scancelasion nel [[Special:Log/delete|registro de le scancelasion]]. @@ -1455,6 +1462,17 @@ Varda la [[Special:NewFiles|galerìa dei file nóvi]] par na vision de insieme.' 'filetype-unwanted-type' => "Cargar file de tipo '''\".\$1\"''' xe sconsiglià. {{PLURAL:\$3|El tipo de file consiglià el|I tipi de file consiglià i}} xe \$2.", 'filetype-banned-type' => "Cargar file de tipo '''\".\$1\"''' no xe mìa consentìo. {{PLURAL:\$3|El tipo de file consentìo el|I tipi de file consentìi i}} xe \$2.", 'filetype-missing' => 'El file no\'l gà nissuna estension (ad es. ".jpg").', +'empty-file' => 'El file che te ghè cargà el xe vodo.', +'file-too-large' => 'El file che te ghè cargà el xe massa grando.', +'filename-tooshort' => 'El nome del file el xe massa curto.', +'filetype-banned' => 'Sto tipo de file el xe vietà.', +'verification-error' => "Sto file no'l gà passà la verifica.", +'hookaborted' => 'La modifica che te voli fare la xe stà interota da un hook de na estension.', +'illegal-filename' => 'El nome del file no xe parmesso.', +'overwrite' => 'No xe parmesso de sorascrìvar un file esistente.', +'unknown-error' => 'Se gà verifica un eror sconossùo.', +'tmp-create-error' => 'Inpussibile creare el file tenporaneo.', +'tmp-write-error' => 'Eror de scritura del file temporaneo.', 'large-file' => 'Se racomanda de no superar mìa le dimension de $1 par ciascun file; sto file el xe grando $2.', 'largefileserver' => 'El file el supera le dimension consentìe da la configurazion del server.', 'emptyfile' => 'El file che te ghè caricà el xè aparentemente vodo. Podarìa èssar par un eror nel nome del file. Par piaser controla se te vol dal bon caricar sto file.', @@ -1479,13 +1497,14 @@ Se te vol cargar istesso el to file, par piaser torna indrio e cànbia el nome d Se te vol cargar el file istesso, par piaser torna indrio e canbia el nome che te vol darghe al file. [[File:$1|thumb|center|$1]]", 'file-exists-duplicate' => 'Sto file el xe un duplicato {{PLURAL:$1|del seguente file|dei seguenti file}}:', 'file-deleted-duplicate' => "Un file preciso identico de sto file ([[:$1]]) el xe stà zà scancelà in precedensa. Te dovaressi darghe n'ociada a la cronologia scancelà prima de cargarlo de novo.", -'successfulupload' => 'Caricamento conpletà', 'uploadwarning' => 'Avixo de caricamento', 'uploadwarning-text' => 'Par piaser, cànbia la descrission del file qua de soto e próa da novo.', 'savefile' => 'Salva file', 'uploadedimage' => 'ga cargà "[[$1]]"', 'overwroteimage' => 'gà cargà na version nova de "[[$1]]"', 'uploaddisabled' => 'Semo spiacenti, ma el caricamento de file el xe tenporaneamente sospeso.', +'copyuploaddisabled' => 'El caricamento tramite URL el xe disabilità.', +'uploadfromurl-queued' => 'El to caricamento el xe stà messo in coa.', 'uploaddisabledtext' => "El caricamento dei file no'l xe mìa ativo.", 'php-uploaddisabledtext' => 'El caricamento de file tramite PHP el xe disabilità. Contròla la configurassion de file_uploads.', 'uploadscripted' => 'Sto file contegne codexe HTML o de script, che podaria essere interpretà eroneamente da un browser web.', @@ -1504,6 +1523,14 @@ Se te vol cargar el file istesso, par piaser torna indrio e canbia el nome che t Verifica par piaser se xe el caso de continuare col caricamento de sto file. Par to comodità qua ghe xe la registrazion de la scancelazion:", 'filename-bad-prefix' => "El nome del file che te sì drio cargar el scuminsia con '''\"\$1\"''', che el xe un nome non-descritivo tipicamente assegnà automaticamente da le fotocàmare digitali. Par piaser siegli un nome piassè descritivo par el to file.", +'upload-success-subj' => 'Caricamento conpletà', +'upload-success-msg' => "El to caricamento da [$2] el xe 'ndà ben. Te lo cati qua: [[:{{ns:file}}:$1]]", +'upload-failure-subj' => 'Problema nel caricamento', +'upload-failure-msg' => 'Ghe xe stà un problema col caricamento da [$2]: + +$1', +'upload-warning-subj' => 'Aviso de caricamento', +'upload-warning-msg' => 'Ghe xe stà un problema col caricamento da [$2]. Torna al [[Special:Upload/stash/$1|modulo de caricamento]] par sistemarlo.', 'upload-proto-error' => 'Protocòl mìa giusto', 'upload-proto-error-text' => 'Par el caricamento remoto bisogna specificar URL che scuminsia con http:// opure ftp://.', @@ -1566,6 +1593,7 @@ Par modificar l'ordinamento, struca su l'intestazion de la colona presièlta.", 'listfiles_search_for' => 'Serca file par nome:', 'imgfile' => 'file', 'listfiles' => 'Lista dei file', +'listfiles_thumb' => 'Miniadura', 'listfiles_date' => 'Data', 'listfiles_name' => 'Nome', 'listfiles_user' => 'Utente', @@ -1678,8 +1706,8 @@ Qua soto vien mostrà la descrission presente in te la [$2 pàxena de descrissio 'statistics-edits' => "Modifiche a scuminsiar da l'istalassion de {{SITENAME}}", 'statistics-edits-average' => 'Canbiamenti in media par pagina', 'statistics-views-total' => 'Visualizasion totali', +'statistics-views-total-desc' => 'Xe lassà fora le viste de pagine speciali o mia esistenti', 'statistics-views-peredit' => 'Visualizassion par modifica', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Cóa dei processi] da far girar in background', 'statistics-users' => '[[Special:ListUsers|Utenti]] registrà', 'statistics-users-active' => 'Utenti atìvi', 'statistics-users-active-desc' => "Utenti che gà fato almanco un'azion in {{PLURAL:$1|tel'ultimo zorno|in tei ultimi $1 zorni}}", @@ -1693,7 +1721,7 @@ Vien considerà pagine de disanbiguazion tute quele che contien i modèi elencà 'doubleredirects' => 'Redirect dopi', 'doubleredirectstext' => 'Sta pagina le elenca pagine che rimanda a altre pagine de rimando. Ogni riga la contien dei colegamenti al primo e al secondo rimando, oltre a la destinassion del secondo rimando, che de solito la xe la "vera" pagina de destinassion, a cui dovarìa pontar el primo rimando. -Le righe sbarà le xe xà stà sistemà.', +Le righe sbarà le xe xà stà sistemà.', 'double-redirect-fixed-move' => '[[$1]] xe stà spostà, desso el xe solo un rimando a [[$2]]', 'double-redirect-fixer' => 'Coretòr de redirect', @@ -1716,6 +1744,8 @@ Le righe sbarà le xe xà stà sistemà.', 'nmembers' => '$1 {{PLURAL:$1|elemento|elementi}}', 'nrevisions' => '$1 {{PLURAL:$1|revision|revision}}', 'nviews' => '$1 {{PLURAL:$1|visita|visite}}', +'nimagelinks' => 'Doparà su $1 {{PLURAL:$1|pagina|pagine}}', +'ntransclusions' => 'doparà su $1 {{PLURAL:$1|pagina|pagine}}', 'specialpage-empty' => "Sto raporto no'l contien nissun risultato.", 'lonelypages' => 'Pagine solitarie', 'lonelypagestext' => 'Le pagine indicà de seguito no le gà colegamenti o trasclusioni che vegna da altre pagine de {{SITENAME}}.', @@ -1872,34 +1902,40 @@ Se pol consultar anca dele altre [[{{MediaWiki:Listgrouprights-helppage}}|inform 'listgrouprights-removegroup-self-all' => 'Pode cavar la propria utensa da tuti i grupi', # E-mail user -'mailnologin' => 'Nissun indirizo a cui mandarghe el messagio', -'mailnologintext' => 'Par inviare messagi e-mail ad altri utenti bisogna [[Special:UserLogin|acedere al sito]] e aver registrà un indirisso vałido ne łe proprie [[Special:Preferences|preferense]].', -'emailuser' => 'Scrìveghe a sto utente', -'emailpage' => "Scrivi na e-mail a l'utente", -'emailpagetext' => 'Te podi usar el modulo chi soto par mandare na e-mail a sto utente. +'mailnologin' => 'Nissun indirizo a cui mandarghe el messagio', +'mailnologintext' => 'Par inviare messagi e-mail ad altri utenti bisogna [[Special:UserLogin|acedere al sito]] e aver registrà un indirisso vałido ne łe proprie [[Special:Preferences|preferense]].', +'emailuser' => 'Scrìveghe a sto utente', +'emailpage' => "Scrivi na e-mail a l'utente", +'emailpagetext' => 'Te podi usar el modulo chi soto par mandare na e-mail a sto utente. La e-mail che te ghè indicà ne le [[Special:Preferences|to preferense]] la vegnarà fora nel canpo "Da" de la mail, così che el destinatario el possa rispóndarte a ti diretamente.', -'usermailererror' => "L'ogeto mail el gà restituìo l'eror:", -'defemailsubject' => 'Messagio da {{SITENAME}}', -'noemailtitle' => 'Nissun indirisso e-mail', -'noemailtext' => "Sto utente no'l gà indicà nissuna casela e-mail valida.", -'nowikiemailtitle' => 'Posta elétronega mia parmessa', -'nowikiemailtext' => 'Sto utente el ga sielto de no ricévar e-mail da i altri utenti.', -'email-legend' => "Màndeghe na e-mail a n'altro utente de {{SITENAME}}", -'emailfrom' => 'Da:', -'emailto' => 'A:', -'emailsubject' => 'Ogeto:', -'emailmessage' => 'Messajo:', -'emailsend' => 'Invia', -'emailccme' => 'Màndeme na copia al me indirizo.', -'emailccsubject' => 'Copia del messagio invià a $1: $2', -'emailsent' => 'E-mail invià', -'emailsenttext' => 'La to e-mail la xè stà invià.', -'emailuserfooter' => 'Sta e-mail la xe stà mandà da $1 a $2 \'traverso la funsion "Manda na e-mail a l\'utente" su {{SITENAME}}.', +'usermailererror' => "L'ogeto mail el gà restituìo l'eror:", +'defemailsubject' => 'Messagio da {{SITENAME}}', +'usermaildisabled' => 'e-mail utente disabiłità', +'usermaildisabledtext' => 'No xè posibiłe inviare e-mail ad altri utenti so sto wiki', +'noemailtitle' => 'Nissun indirisso e-mail', +'noemailtext' => "Sto utente no'l gà indicà nissuna casela e-mail valida.", +'nowikiemailtitle' => 'Posta elétronega mia parmessa', +'nowikiemailtext' => 'Sto utente el ga sielto de no ricévar e-mail da i altri utenti.', +'email-legend' => "Màndeghe na e-mail a n'altro utente de {{SITENAME}}", +'emailfrom' => 'Da:', +'emailto' => 'A:', +'emailsubject' => 'Ogeto:', +'emailmessage' => 'Messajo:', +'emailsend' => 'Invia', +'emailccme' => 'Màndeme na copia al me indirizo.', +'emailccsubject' => 'Copia del messagio invià a $1: $2', +'emailsent' => 'E-mail invià', +'emailsenttext' => 'La to e-mail la xè stà invià.', +'emailuserfooter' => 'Sta e-mail la xe stà mandà da $1 a $2 \'traverso la funsion "Manda na e-mail a l\'utente" su {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Messajo de sistema.', +'usermessage-editor' => 'Messagero de sistema', # Watchlist 'watchlist' => "Pagine tegnùe d'ocio", 'mywatchlist' => "pagine tegnùe d'ocio", -'watchlistfor' => "(de l'utente '''$1''')", +'watchlistfor2' => 'De $1 $2', 'nowatchlist' => "No te ghè indicà pagine da tegner d'ocio.", 'watchlistanontext' => "Per vardar e modifegar l'ełenco de i osservati speciałi bisogna $1.", 'watchnologin' => 'Acesso mia efetuà', @@ -2013,7 +2049,10 @@ L'ultima modefega l'è stà fata da [[User:$3|$3]] ([[User talk:$3|discussion]]{ 'revertpage' => 'Anułàe łe modifeghe de [[Special:Contributions/$2|$2]] ([[User talk:$2|discussion]]), riportà a ła version de prima de [[User:$1|$1]]', 'revertpage-nouser' => 'Anulà le modìfeghe de (nome utente cavà), riportà a la version precedente de [[User:$1|$1]]', 'rollback-success' => 'Anulà le modifiche de $1; riportà a la version precedente de $2.', -'sessionfailure' => "Se gà verificà un problema ne la session che identifica l'acesso; el sistema, par precauzion, no'l gà mìa eseguìo el comando che te ghè dato. Torna a la pagina precedente col boton 'Indrìo' del to browser, ricarica la pagina e ripróa da novo.", + +# Edit tokens +'sessionfailure-title' => 'Eròr de session', +'sessionfailure' => "Se gà verificà un problema ne la session che identifica l'acesso; el sistema, par precauzion, no'l gà mìa eseguìo el comando che te ghè dato. Torna a la pagina precedente col boton 'Indrìo' del to browser, ricarica la pagina e ripróa da novo.", # Protect 'protectlogpage' => 'Protesion', @@ -2139,18 +2178,20 @@ $1', 'month' => 'Dal mese (e quei prima):', 'year' => "Da l'ano (e quei prima):", -'sp-contributions-newbies' => 'Fame védar solo i contributi de i utenti novi', -'sp-contributions-newbies-sub' => 'Par i novi utenti', -'sp-contributions-newbies-title' => 'Contributi dei utenti novi', -'sp-contributions-blocklog' => 'blochi', -'sp-contributions-deleted' => 'contributi utente scancelà', -'sp-contributions-logs' => 'registri', -'sp-contributions-talk' => 'discussion', -'sp-contributions-userrights' => 'gestion dei parmessi relativi ai utenti', -'sp-contributions-blocked-notice' => "Sto utente el xe atualmente blocà. L'ultimo elemento del registro dei blochi el xè riportà qua soto par informassion:", -'sp-contributions-search' => 'Serca contributi', -'sp-contributions-username' => 'Indirizo IP o nome utente:', -'sp-contributions-submit' => 'Riserca', +'sp-contributions-newbies' => 'Fame védar solo i contributi de i utenti novi', +'sp-contributions-newbies-sub' => 'Par i novi utenti', +'sp-contributions-newbies-title' => 'Contributi dei utenti novi', +'sp-contributions-blocklog' => 'blochi', +'sp-contributions-deleted' => 'contributi utente scancelà', +'sp-contributions-logs' => 'registri', +'sp-contributions-talk' => 'discussion', +'sp-contributions-userrights' => 'gestion dei parmessi relativi ai utenti', +'sp-contributions-blocked-notice' => "Sto utente el xe atualmente blocà. L'ultimo elemento del registro dei blochi el xè riportà qua soto par informassion:", +'sp-contributions-blocked-notice-anon' => "Sto indiriso IP el xè atualmente blocà. De seguito xè riportà l'ultimo ełemento del rejistro de i blochi:", +'sp-contributions-search' => 'Serca contributi', +'sp-contributions-username' => 'Indirizo IP o nome utente:', +'sp-contributions-toponly' => "Mostra solo i contributi che i xe l'ultima revision de la pagina", +'sp-contributions-submit' => 'Riserca', # What links here 'whatlinkshere' => 'Punta qua', @@ -2209,7 +2250,6 @@ Varda [[Special:IPBlockList|lista IP bloccati]] par védar tuti i blochi.", 'ipb-edit-dropdown' => 'Motivi par el bloco', 'ipb-unblock-addr' => 'Sbloca $1', 'ipb-unblock' => 'Sbloca un utente o un indirizo IP', -'ipb-blocklist-addr' => 'Blochi esistenti par $1', 'ipb-blocklist' => 'Elenca i blochi ativi', 'ipb-blocklist-contribs' => 'Contributi de $1', 'unblockip' => 'Sbloca indirizzo IP', @@ -2278,6 +2318,8 @@ $1 xe xà blocà. Vuto canbiar le inpostassion?', 'sorbs_create_account_reason' => 'No se pol crear acessi novi da sto indirizo IP parché el xe elencà come proxy verto ne la lista nera DNSBL doparà da {{SITENAME}}.', 'cant-block-while-blocked' => 'No se pode blocar altri utenti finché se xe blocài.', 'cant-see-hidden-user' => "L'utente che te vol blocar el xe zà stà blocà e sconto. Sicome a no te ghè mia i diriti de hideuser, no te pol mia védar o canbiar el bloco de l'utente.", +'ipbblocked' => 'No te pui blocare o sblocare altri utenti, parché ti steso te si blocà', +'ipbnounblockself' => 'No te pui sblocare ti steso', # Developer tools 'lockdb' => 'Blocca el database', @@ -2310,6 +2352,17 @@ Resta ne la to responsabilità de controlar che i colegamenti i continua a punta Ocio: la pagina '''no''' la sarà spostà se ghe fusse zà na pagina col titolo novo, a meno che no la sia na pagina voda o un rimando, e senpre che no la gabia na storia. Questo significa che, se te fè un eror, te podi da novo rinominar na pagina col vecio titolo, ma no te podi sovrascrìvar na pagina zà esistente. +'''OCIO!''' +Sto canbiamento drastico el podarìa dar problemi che no se se speta, specialmente se se trata de na pagina molto visità. +Stà ben tento a le conseguense del spostamento, prima de farlo.", +'movepagetext-noredirectfixer' => "Col modulo qua soto te podi rinominar na pagina, spostando anca tuta la so storia al titolo novo. +El vecio titolo el deventarà automaticamente un rimando (redirect) che punta al titolo novo. +Tiente in mente de controlar ben che no se crea [[Special:DoubleRedirects|dopi redirect]] o [[Special:BrokenRedirects|redirect interoti]]. +Resta ne la to responsabilità de controlar che i colegamenti i continua a puntar dove che i deve. + +Ocio: la pagina '''no''' la sarà spostà se ghe fusse zà na pagina col titolo novo, a meno che no la sia na pagina voda o un rimando, e senpre che no la gabia na storia. +Questo significa che, se te fè un eror, te podi da novo rinominar na pagina col vecio titolo, ma no te podi sovrascrìvar na pagina zà esistente. + '''OCIO!''' Sto canbiamento drastico el podarìa dar problemi che no se se speta, specialmente se se trata de na pagina molto visità. Stà ben tento a le conseguense del spostamento, prima de farlo.", @@ -2367,6 +2420,7 @@ La voxe specificà come destinassion "[[:$1]]" l\'esiste xà. Vóto scancełarla 'immobile-source-page' => 'Sta pàxena no la pol vegner spostà.', 'immobile-target-page' => 'No te pol spostar a sto titolo.', 'imagenocrossnamespace' => 'No se pol spostar un file verso un namespace diverso da quelo dei file.', +'nonfile-cannot-move-to-file' => 'Tuto quel che no xe un file, no se pode spostarlo al namespace dei file.', 'imagetypemismatch' => "L'estension nova del file no la corisponde mìa al tipo de file", 'imageinvalidfilename' => "El nome file de destinassion no'l xe mia valido", 'fix-double-redirects' => 'Agiorna tuti quanti i redirect che ponta al titolo originàl', @@ -2445,6 +2499,7 @@ Salvalo sul to computer e càrghelo qua.', 'importstart' => 'Inportazion de łe pàxene in corso...', 'import-revision-count' => '{{PLURAL:$1|una revixion importà|$1 revixion importae}}', 'importnopages' => 'Nissuna pàxena da inportar.', +'imported-log-entries' => 'Inportà $1 {{PLURAL:$1|evento|eventi}} del registro.', 'importfailed' => 'Inportassion falía: $1', 'importunknownsource' => "Tipo de origine sconossiùo par l'inportassion", 'importcantopen' => 'Impossibiłe vèrzar el file de inportassion', @@ -2537,6 +2592,8 @@ Salvalo sul to computer e càrghelo qua.', 'tooltip-upload' => 'Intaca el caricamento', 'tooltip-rollback' => 'El "tira indrio" el desfa i canbiamenti a sta pagina fati de l\'ultimo che gà messo le mane.', 'tooltip-undo' => 'El "Tira indrìo" el parmete de anular sto canbiamento e el verze la pagina da canbiar in modalità de anteprima. Se pole métarghe anca na motivassion.', +'tooltip-preferences-save' => 'Salve le preferense', +'tooltip-summary' => 'Inserissi un breve riassunto', # Metadata 'nodublincore' => 'Metadati Dublin Core RDF non ativi su sto server.', @@ -2632,13 +2689,16 @@ La so esecuzion la podarìa danegiar el to computer.", 'thumbsize' => 'Grandeza de le miniature:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|pagina|pagine}}', 'file-info' => 'Dimensioni: $1, tipo MIME: $2', -'file-info-size' => '($1 × $2 pixel, dimension del file: $3, tipo MIME: $4)', +'file-info-size' => '$1 × $2 pixel, dimension del file: $3, tipo MIME: $4', 'file-nohires' => 'No ghe xe version a risolussion pì granda.', -'svg-long-desc' => '(file en formato SVG, dimension nominałi $1 × $2 pixel, dimension del file: $3)', +'svg-long-desc' => 'file en formato SVG, dimension nominałi $1 × $2 pixel, dimension del file: $3', 'show-big-image' => 'Version ad alta risołusion', 'show-big-image-thumb' => 'Dimension de sta anteprima: $1 × $2 pixel', 'file-info-gif-looped' => 'ripetù', 'file-info-gif-frames' => '$1 {{PLURAL:$1|frame|frame}}', +'file-info-png-looped' => 'ripetù', +'file-info-png-repeat' => 'ripetù $1 {{PLURAL:$1|olta|olte}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|fotograma|fotogrami}}', # Special:NewFiles 'newimages' => 'Galeria dei file novi', @@ -2956,30 +3016,30 @@ I colegamenti dopo, su la stessa riga, i xe considerai come ecession (cioè, pag 'limitall' => 'tuti quanti', # E-mail address confirmation -'confirmemail' => 'Conferma indirisso e-mail', -'confirmemail_noemail' => 'No te ghè indicà un indirizo e-mail valido ne le to [[Special:Preferences|preferense]].', -'confirmemail_text' => "{{SITENAME}} el richiede la verifica de l'indirizo e-mail prima che te possi doparar le funzion ligà a l'e-mail. +'confirmemail' => 'Conferma indirisso e-mail', +'confirmemail_noemail' => 'No te ghè indicà un indirizo e-mail valido ne le to [[Special:Preferences|preferense]].', +'confirmemail_text' => "{{SITENAME}} el richiede la verifica de l'indirizo e-mail prima che te possi doparar le funzion ligà a l'e-mail. Struca el boton qua soto par mandar na richiesta de conferma al to indirizo. Nel messagio che te riva te catarè un colegamento che contien un codice. Visita el colegamento col to browser par confermar che el to indirizo el xe valido.", -'confirmemail_pending' => "El codice de conferma el xe zà stà spedìo par posta eletronica; se l'account el xe stà +'confirmemail_pending' => "El codice de conferma el xe zà stà spedìo par posta eletronica; se l'account el xe stà creà de reçente, par piaser speta par qualche minuto che riva el codice prima de domandàrghene uno novo.", -'confirmemail_send' => 'Spedissi un codice de conferma par e-mail', -'confirmemail_sent' => 'Email de conferma invià.', -'confirmemail_oncreate' => "Un codice de conferma el xe stà spedìo a l'indirizo +'confirmemail_send' => 'Spedissi un codice de conferma par e-mail', +'confirmemail_sent' => 'Email de conferma invià.', +'confirmemail_oncreate' => "Un codice de conferma el xe stà spedìo a l'indirizo de posta eletronica indicà. El codice no'l xe necessario par entrar nel sito, ma bisogna fornirlo par poder abilitar tute le funzion del sito che dòpara la posta eletronica.", -'confirmemail_sendfailed' => "{{SITENAME}} no l'è stà bon da inviar el messagio e-mail de conferma. +'confirmemail_sendfailed' => "{{SITENAME}} no l'è stà bon da inviar el messagio e-mail de conferma. Controla che l'indirizo no'l contegna carateri mìa validi. El messagio de eror el xe: $1", -'confirmemail_invalid' => 'Codice de conferma mìa valido. El codice el podarìa èssar scadùo.', -'confirmemail_needlogin' => 'Xè necessario $1 par confermare el proprio indirisso e-mail.', -'confirmemail_success' => "El to indirisso email l'è stado confermà. Ora te podi loggarte e gòderte la wiki.", -'confirmemail_loggedin' => 'El to indirisso email el xè stà confermà.', -'confirmemail_error' => "Qualcossa l'è andà storto nel salvar la to conferma.", -'confirmemail_subject' => "{{SITENAME}}: e-mail par la conferma de l'indirisso", -'confirmemail_body' => 'Qualcheduni, probabilmente ti stesso da l\'indirizo IP $1, el ga registrà n\'account "$2" con sto indirizo e-mail su {{SITENAME}}. +'confirmemail_invalid' => 'Codice de conferma mìa valido. El codice el podarìa èssar scadùo.', +'confirmemail_needlogin' => 'Xè necessario $1 par confermare el proprio indirisso e-mail.', +'confirmemail_success' => "El to indirisso email l'è stado confermà. Ora te podi loggarte e gòderte la wiki.", +'confirmemail_loggedin' => 'El to indirisso email el xè stà confermà.', +'confirmemail_error' => "Qualcossa l'è andà storto nel salvar la to conferma.", +'confirmemail_subject' => "{{SITENAME}}: e-mail par la conferma de l'indirisso", +'confirmemail_body' => 'Qualcheduni, probabilmente ti stesso da l\'indirizo IP $1, el ga registrà n\'account "$2" con sto indirizo e-mail su {{SITENAME}}. Par confermar che sto account el xe veramente tuo e poder ativar le funzion relative a l\'e-mail su {{SITENAME}}, verzi sto colegamento col to browser: @@ -2990,8 +3050,14 @@ Se l\'account *no* te lo ghè registrà ti, verzi st\'altro colegamento par anul $5 El codice de conferma el scadrà in automatico a le $4.', -'confirmemail_invalidated' => 'Richiesta de conferma indirizo e-mail anulà', -'invalidateemail' => 'Anula richiesta de conferma e-mail', +'confirmemail_body_changed' => 'Qualcheduni, probabilmente ti steso da l\'indiriso IP $1 el ga rejistrà n\'acount "$2" con sto indiriso e-mail so {{SITENAME}}. +Par confermare che sto acount el xè veramente tuo e poder ativar łe funsion rełative a l\'e-mail so {{SITENAME}} verzi sto cołegamento nel to browser: +$3 +Se l\'acount *no* te o ghe rejistrà ti, verzi st\'altro cołegamento par anułar ła conferma de l\'indiriso e-mail: +$5 +El codexe de conferma el scadrà en automatego a łe $4.', +'confirmemail_invalidated' => 'Richiesta de conferma indirizo e-mail anulà', +'invalidateemail' => 'Anula richiesta de conferma e-mail', # Scary transclusion 'scarytranscludedisabled' => "[L'inclusion de pagine tra siti wiki no la xe ativa]", @@ -3031,6 +3097,7 @@ Par piaser, conferma che te vołi dal bon ricrear sta voxe.", 'table_pager_first' => 'Prima pagina', 'table_pager_last' => 'Ultima pagina', 'table_pager_limit' => 'Mostra $1 file par pagina', +'table_pager_limit_label' => 'Elementi par pagina:', 'table_pager_limit_submit' => 'Và', 'table_pager_empty' => 'Nissun risultato', @@ -3100,6 +3167,13 @@ Nota che te pol anca [[Special:Watchlist/edit|modificar la lista con l'interfaci 'version-hook-subscribedby' => 'Sotoscrizioni', 'version-version' => '(Version $1)', 'version-license' => 'Licensa', +'version-poweredby-credits' => "Sta wiki la va con '''[http://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.", +'version-poweredby-others' => 'altri', +'version-license-info' => "MediaWiki xe un software lìbaro; te pol redistribuirlo e/o modificarlo secondo i termini de la Licensa Publica Zeneral GNU publicà da la Free Software Foundation; secondo la version 2 de la Licensa, o (a scelta tua) una qualunque altra version sucessiva. + +MediaWiki el xe distribuìo sperando che el possa vegner utile, ma SENSA NISSUNA GARANSIA; sensa gnanca la garansia inplicita de COMERCIALIZASSION o de ADATAMENTO A UN USO PARTICOLARE. Varda la Licensa Publica Zeneral GNU par ulteriori detagli. + +Insieme co sto programa te dovaressi 'ver ricevùo na copia de la Licensa Publica Zeneral GNU; se nò, scrìveghe a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html và a lèzartela online].", 'version-software' => 'Software instalà', 'version-software-product' => 'Prodoto', 'version-software-version' => 'Version', @@ -3169,6 +3243,15 @@ Inserissi el nome del file senza el prefisso \"{{ns:file}}:\"", 'tags-edit' => 'modìfega', 'tags-hitcount' => '$1 {{PLURAL:$1|modìfega|modìfeghe}}', +# Special:ComparePages +'comparepages' => 'Confronta le pagine', +'compare-selector' => 'Confronta le revision de na pagina', +'compare-page1' => 'Pagina 1', +'compare-page2' => 'Pagina 2', +'compare-rev1' => 'Revisión 1', +'compare-rev2' => 'Revisión 2', +'compare-submit' => 'Confronta', + # Database error messages 'dberr-header' => 'Sta wiki la ga un problema', 'dberr-problems' => 'Sto sito al momento el gà qualche problema tènico.', @@ -3185,8 +3268,13 @@ Inserissi el nome del file senza el prefisso \"{{ns:file}}:\"", 'htmlform-float-invalid' => "El valor indicà no'l xe mia un nùmaro.", 'htmlform-int-toolow' => 'El valor che te ghè indicà el xe soto al minimo, che xe $1', 'htmlform-int-toohigh' => 'El valor che te ghè indicà el xe sora al màssimo, che xe $1', +'htmlform-required' => 'Sto vałore xè necesario', 'htmlform-submit' => 'Manda', 'htmlform-reset' => 'Scancèla modifiche', 'htmlform-selectorother-other' => 'Altro', +# SQLite database support +'sqlite-has-fts' => '$1 con la possibilità de riserca completa nel testo', +'sqlite-no-fts' => '$1 sensa la possibilità de riserca completa nel testo', + ); diff --git a/languages/messages/MessagesVep.php b/languages/messages/MessagesVep.php index 52d4a58e..c704c1e1 100644 --- a/languages/messages/MessagesVep.php +++ b/languages/messages/MessagesVep.php @@ -101,8 +101,7 @@ $messages = array( 'tog-editsection' => 'Ozutada "Redaktiruida"-kosketuz kaikuččen sekcijan täht', 'tog-editsectiononrightclick' => 'Redaktiruida sekcijad hiren oiktal plokul pälkirjutesele (JavaScript)', 'tog-showtoc' => 'Ozutada südäimišt (lehtpoled, kudambil om enamba, mi 3 pälkirjutest)', -'tog-rememberpassword' => 'Muštta minun kävutajan nimi neciš kompjuteras', -'tog-editwidth' => 'Tehta redaktiruindan pöud iknan leveččeks', +'tog-rememberpassword' => 'Muštta minun kävutajan nimi neciš kompjuteras (enintään $1 {{PLURAL:$1|päivä|päivää}})', 'tog-watchcreations' => 'Ližata kaik minai sätud lehtpoled minun kaclendkirjuteshe', 'tog-watchdefault' => 'Ližata kaik minai toižetadud lehtpoled minun kaclendkirjuteshe', 'tog-watchmoves' => 'Ližata kaik minai udesnimitadud lehtpoled minun kaclendkirjuteshe', @@ -247,31 +246,20 @@ $messages = array( 'faqpage' => 'Project:PPK', # Vector skin -'vector-action-addsection' => 'Ližada tem', -'vector-action-delete' => 'Čuta poiš', -'vector-action-move' => 'Udesnimitada', -'vector-action-protect' => 'Kaita', -'vector-action-undelete' => 'Pördutada', -'vector-action-unprotect' => 'Heitta kaičend', -'vector-namespace-category' => 'Kategorii', -'vector-namespace-help' => "Abun lehtpol'", -'vector-namespace-image' => 'Fail', -'vector-namespace-main' => "Lehtpol'", -'vector-namespace-media' => "Medialehtpol'", -'vector-namespace-mediawiki' => 'Kirjeine', -'vector-namespace-project' => "Projektan lehtpol'", -'vector-namespace-special' => "Specialine lehtpol'", -'vector-namespace-talk' => 'Diskussii', -'vector-namespace-template' => 'Šablon', -'vector-namespace-user' => "Kävutajan lehtpol'", -'vector-view-create' => 'Säta', -'vector-view-edit' => 'Redaktiruida', -'vector-view-history' => 'Kacta istorii', -'vector-view-view' => 'Lugeda', -'vector-view-viewsource' => 'Kacta purtkehe', -'actions' => 'Tegendad', -'namespaces' => 'Nimiavaruded', -'variants' => 'Variantad', +'vector-action-addsection' => 'Ližada tem', +'vector-action-delete' => 'Čuta poiš', +'vector-action-move' => 'Udesnimitada', +'vector-action-protect' => 'Kaita', +'vector-action-undelete' => 'Pördutada', +'vector-action-unprotect' => 'Heitta kaičend', +'vector-view-create' => 'Säta', +'vector-view-edit' => 'Redaktiruida', +'vector-view-history' => 'Kacta istorii', +'vector-view-view' => 'Lugeda', +'vector-view-viewsource' => 'Kacta purtkehe', +'actions' => 'Tegendad', +'namespaces' => 'Nimiavaruded', +'variants' => 'Variantad', 'errorpagetitle' => 'Petuz', 'returnto' => 'Pörttas lehtpolele $1.', @@ -333,6 +321,7 @@ Serverad oma üläkormatud. Varastagat pordon aigad i lat'kät pörttas lehtpolele. $1", +'pool-errorunknown' => 'Tundmatoi petuz', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Informacii saitas {{SITENAME}}', @@ -477,79 +466,81 @@ Sü om "\'\'$2\'\'".', 'virus-unknownscanner' => 'tundmatoi antivirus:', # Login and logout pages -'logouttext' => "'''Tö olet lähtnuded sistemaspäi.''' +'logouttext' => "'''Tö olet lähtnuded sistemaspäi.''' Sab jatkta rad {{SITENAME}}-saital anonimižikš, vai [[Special:UserLogin|kirjutagatoiš udes]] sil-žo vai toižel kävutajan nimel. Otkat sil'mnägubale, miše erasid lehtpolid ozutaškatas mugažo, kut i edel teiden lähtendad sistemaspäi. Miše vajehtada niiden nägu, puhtastagat teiden kaclimen keš.", -'welcomecreation' => '== Tulgat tervhen, $1! == +'welcomecreation' => '== Tulgat tervhen, $1! == Teiden registracii om loptud. Algat unohtagoi [[Special:Preferences|järgeta personaližikš]] sait.', -'yourname' => 'Kävutajan nimi:', -'yourpassword' => 'Peitsana:', -'yourpasswordagain' => 'Kirjutagat peitsana udes:', -'remembermypassword' => 'Panda muštho minun tulendandmused neciš kompjuteras', -'yourdomainname' => 'Teiden domen:', -'externaldberror' => 'Ozaižihe petuz autentifikacijan, kudamb tehtihe andmusiden irdbazan turbiš, aigan, vai teile ei ulotu oiktusid toižetada ičetoi irdregistracijad.', -'login' => 'Kirjutadas sistemha', -'nav-login-createaccount' => 'Kirjutadas / Sada registracii', -'loginprompt' => 'Pidab laskta sada "cookies", miše kirjutadas {{SITENAME}}he.', -'userlogin' => 'Kirjutadas / Sada registracii', -'userloginnocreate' => 'Kirjutagatoiš sistemha', -'logout' => 'Lähtta', -'userlogout' => 'Lähtta', -'notloggedin' => 'Tö et olgoi kirjutanus sistemha', -'nologin' => "Ku tö et völ olgoi sanuded registracijad, '''$1'''.", -'nologinlink' => 'Sada registracii', -'createaccount' => 'Sada registracii', -'gotaccount' => "Ku teil om jo registracii, '''$1'''.", -'gotaccountlink' => 'Kirjutagatoiš sistemha', -'createaccountmail' => 'e-počtaiči', -'badretype' => 'Teil kirjutadud peitsanad ei kožugoi toine toižhe.', -'userexists' => 'Kirjutadud kävutajan nimi om jo rezerviruidud. +'yourname' => 'Kävutajan nimi:', +'yourpassword' => 'Peitsana:', +'yourpasswordagain' => 'Kirjutagat peitsana udes:', +'remembermypassword' => 'Panda muštho minun tulendandmused neciš kompjuteras (enintään $1 {{PLURAL:$1|päivä|päivää}})', +'yourdomainname' => 'Teiden domen:', +'externaldberror' => 'Ozaižihe petuz autentifikacijan, kudamb tehtihe andmusiden irdbazan turbiš, aigan, vai teile ei ulotu oiktusid toižetada ičetoi irdregistracijad.', +'login' => 'Kirjutadas sistemha', +'nav-login-createaccount' => 'Kirjutadas / Sada registracii', +'loginprompt' => 'Pidab laskta sada "cookies", miše kirjutadas {{SITENAME}}he.', +'userlogin' => 'Kirjutadas / Sada registracii', +'userloginnocreate' => 'Kirjutagatoiš sistemha', +'logout' => 'Lähtta', +'userlogout' => 'Lähtta', +'notloggedin' => 'Tö et olgoi kirjutanus sistemha', +'nologin' => "Ku tö et völ olgoi sanuded registracijad, '''$1'''.", +'nologinlink' => 'Sada registracii', +'createaccount' => 'Sada registracii', +'gotaccount' => "Ku teil om jo registracii, '''$1'''.", +'gotaccountlink' => 'Kirjutagatoiš sistemha', +'createaccountmail' => 'e-počtaiči', +'createaccountreason' => 'Sü:', +'badretype' => 'Teil kirjutadud peitsanad ei kožugoi toine toižhe.', +'userexists' => 'Kirjutadud kävutajan nimi om jo rezerviruidud. Olgat hüväd, valikat toine kävutajan nimi.', -'loginerror' => 'Sistemha tulendan peituz.', -'createaccounterror' => 'Ei voi säta registracijad: $1', -'nocookieslogin' => '{{SITENAME}}-sait kävutab "cookie"-failad, miše tundištada kävutajid. +'loginerror' => 'Sistemha tulendan peituz.', +'createaccounterror' => 'Ei voi säta registracijad: $1', +'nocookieslogin' => '{{SITENAME}}-sait kävutab "cookie"-failad, miše tundištada kävutajid. Tö olet saupnuded "cookie"-failad. Otkat ned kävutamižhe i toštkat teiden tegend.', -'noname' => 'Tö ei olgoi kirjutanuded lasktud kävutajan nimed.', -'loginsuccesstitle' => 'Tulend sistemha om lopnus satusekahas.', -'loginsuccess' => "'''Tö radat nügüd' {{SITENAME}}-saital kut \"\$1\".'''", -'nosuchuser' => 'Ei ole kävutajad "$1"-nimenke. +'noname' => 'Tö ei olgoi kirjutanuded lasktud kävutajan nimed.', +'loginsuccesstitle' => 'Tulend sistemha om lopnus satusekahas.', +'loginsuccess' => "'''Tö radat nügüd' {{SITENAME}}-saital kut \"\$1\".'''", +'nosuchuser' => 'Ei ole kävutajad "$1"-nimenke. Kävutajan nimiden oigedkirjutamine rippub kirjamiden registraspäi. Kodvgat teiden oigedkirjutamine, vai [[Special:UserLogin/signup|säkat uz\' registracii]].', -'nosuchusershort' => 'Ei ole kävutajad "$1"-nimenke. +'nosuchusershort' => 'Ei ole kävutajad "$1"-nimenke. Kodvgat teiden oigedkirjutamine.', -'nouserspecified' => 'Pidab kirjutada kävutajan nimi.', -'login-userblocked' => "Nece kävutai om blokiruidud. Tulend sistemha om kel'tud.", -'wrongpassword' => 'Peitsana om vär. +'nouserspecified' => 'Pidab kirjutada kävutajan nimi.', +'login-userblocked' => "Nece kävutai om blokiruidud. Tulend sistemha om kel'tud.", +'wrongpassword' => 'Peitsana om vär. Kirjutagat se völ kerdan.', -'wrongpasswordempty' => "Nece peitsana om pall'az. +'wrongpasswordempty' => "Nece peitsana om pall'az. Kirjutagat toine peitsana.", -'passwordtooshort' => 'Peitsanha pidab mülütada {{PLURAL:$1|1 znam|$1 znamad}}.', -'password-name-match' => 'Teiden peitsanale pidab erineda kävutajan nimespäi.', -'mailmypassword' => "Oigeta minei uz' peitsana e-počtadme", -'passwordremindertitle' => "Uz' pordaigaline peitsana {{SITENAME}}-saitan täht", -'noemail' => '"$1"-kävutai ei ole andnu ičeze e-počtan adresad.', -'noemailcreate' => 'Bidab kirjutada todesine e-počtan adres', -'passwordsent' => "Uz' peitsana om oigetud $1-kävutajan e-počtan adresale. +'passwordtooshort' => 'Peitsanha pidab mülütada {{PLURAL:$1|1 znam|$1 znamad}}.', +'password-name-match' => 'Teiden peitsanale pidab erineda kävutajan nimespäi.', +'password-login-forbidden' => "Necen kävutajannimen da peitsanan kävutamine om kel'tud.", +'mailmypassword' => "Oigeta minei uz' peitsana e-počtadme", +'passwordremindertitle' => "Uz' pordaigaline peitsana {{SITENAME}}-saitan täht", +'noemail' => '"$1"-kävutai ei ole andnu ičeze e-počtan adresad.', +'noemailcreate' => 'Bidab kirjutada todesine e-počtan adres', +'passwordsent' => "Uz' peitsana om oigetud $1-kävutajan e-počtan adresale. Olgat hüväd, kirjutagatoiš sistemha, konz sat sen.", -'blocked-mailpassword' => "Redaktiruind teiden IP-adresalpäi om kel'tud, peitsanan udištandan funkcii om mugažo blokiruidud, miše kaitas abidoičendaspäi.", -'eauthentsent' => 'Vahvištoituzkirjeine om oigetud teiden adresale. Kirjeižes om mugažo kirjutadud, midä pidab tehta, miše vahvištoitta teiden registracijad.', -'mailerror' => 'E-počtan oigendamižen petuz: $1', -'emailauthenticated' => 'Teiden e-počtan adres vahvištoittihe datal $2 aigal $3.', -'emailnotauthenticated' => 'Teiden e-počtan adres ei ole völ vahvištoittud. +'blocked-mailpassword' => "Redaktiruind teiden IP-adresalpäi om kel'tud, peitsanan udištandan funkcii om mugažo blokiruidud, miše kaitas abidoičendaspäi.", +'eauthentsent' => 'Vahvištoituzkirjeine om oigetud teiden adresale. Kirjeižes om mugažo kirjutadud, midä pidab tehta, miše vahvištoitta teiden registracijad.', +'mailerror' => 'E-počtan oigendamižen petuz: $1', +'emailauthenticated' => 'Teiden e-počtan adres vahvištoittihe datal $2 aigal $3.', +'emailnotauthenticated' => 'Teiden e-počtan adres ei ole völ vahvištoittud. Wiki-likutimen počtfunkcijad ei olgoi kävutamas.', -'noemailprefs' => 'Kirjutagat e-počtan adres teiden järgendusihe, miše se oliži kävutamas.', -'emailconfirmlink' => 'Vahvištoitkat teiden e-počtan adres', -'invalidemailaddress' => 'Ningomal e-počtan adresal om vär format. Olgat hüväd, kirjutagat e-počtan adres oiktas formatas vai puhtastagat e-počtan pöud.', -'accountcreated' => 'Registracii om OK', -'accountcreatedtext' => 'Registracii $1-kävutajan täht om sätud.', -'createaccount-title' => '{{SITENAME}}: registracijan sädand.', -'usernamehasherror' => 'Kävutajan nimes ei voi olda mugošt znamad.', -'login-throttled' => 'Tö olet tehnu äjahkon naprindoid kirjutadas sistemha. +'noemailprefs' => 'Kirjutagat e-počtan adres teiden järgendusihe, miše se oliži kävutamas.', +'emailconfirmlink' => 'Vahvištoitkat teiden e-počtan adres', +'invalidemailaddress' => 'Ningomal e-počtan adresal om vär format. Olgat hüväd, kirjutagat e-počtan adres oiktas formatas vai puhtastagat e-počtan pöud.', +'accountcreated' => 'Registracii om OK', +'accountcreatedtext' => 'Registracii $1-kävutajan täht om sätud.', +'createaccount-title' => '{{SITENAME}}: registracijan sädand.', +'usernamehasherror' => 'Kävutajan nimes ei voi olda mugošt znamad.', +'login-throttled' => 'Tö olet tehnu äjahkon naprindoid kirjutadas sistemha. Olgat hüväd, varastagat pordon aigad edel ut naprindad.', -'loginlanguagelabel' => 'Kel’: $1', +'loginlanguagelabel' => 'Kel’: $1', # Password reset dialog 'resetpass' => 'Vajehtada peitsana', @@ -608,7 +599,7 @@ Teiden IP-adres om kirjutadud necen lehtpolen redaktiruindan istorijaha.", Ku tö valičet völ kerdan \"Kirjutada lehtpol'\", ka teiden toižetused kirjutase ningoižeta ümbrikacundata.", 'missingcommenttext' => 'Olgat hüväd, pangat teiden tedotuz alahaks.', 'missingcommentheader' => "'''Muštatez:''' Tö et olgoi andnuded toižetusiden ümbrikacundoiden pälkirjutest. -Ku tö valičet völ kerdan \"Kirjutada lehtpol'\", ka teiden toižetusiden ümbrikacund kirjutase ningoižeta pälkirjuteseta.", +Ku tö valičet völ kerdan ”{{int:savearticle}}” \"Kirjutada lehtpol'\", ka teiden toižetusiden ümbrikacund kirjutase ningoižeta pälkirjuteseta.", 'summary-preview' => 'Ümbrikacund linneb mugoi:', 'subject-preview' => 'Ümbrikacundan pälkirjutez linneb mugoi:', 'blockedtitle' => 'Kävutai om blokiruidud', @@ -659,6 +650,9 @@ Ku tö olet petnus tänna tuldes, pingat teiden kaclimen '''tagaze'''-kingitimel Tö voit [[Special:Search/{{PAGENAME}}|ectä nece nimi]] toižil lehtpolil, [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ectä pojavid aigkirjoiden kirjutesid], vai [{{fullurl:{{FULLPAGENAME}}|action=edit}} redaktiruida nece lehtpol\'].', +'noarticletext-nopermission' => 'Necil lehtpolel ei ole nügüd\' tekstad. +Tö voit [[Special:Search/{{PAGENAME}}|ectä necen lehtpolen nimi]] toižil lehtpolil, +[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ectä pojavid aigkirjoiden kirjutesid].', 'userpage-userdoesnotexist' => "Kävutajan nimed «$1» ei ole. Todeks-ik tahtoit säta vai toižetada nece lehtpol'?", 'userpage-userdoesnotexist-view' => '"$1"-kävutai ei ole registriruidud.', 'blocked-notice-logextract' => "Nece kävutai om nügüd' blokiruidud. @@ -692,9 +686,6 @@ Ku tö et tahtkoi, miše teiden tekstad levitaižiba da redaktiruižiba miččed Tö vahvištoitat mugažo, miše olet toižetusiden avtoran vai olet kopiruinuded tekstad joudjas purtkespäi. '''ALGAT SIJAKOI LASKMATA AVTORANOIKTUSEL KAITUD MATERIALOID!'''", -'longpagewarning' => "'''HOMAIKAT:''' Necen lehtpolen suruz om $1 kb; -erasil kaclimil om problemoid, konz ned kaceltas 32 kb ülitajid lehtpolid. -Olgat hüväd, jagakat lehtpol' penembihe paloihe.", 'longpageerror' => "'''PETUZ: Teiden tekstan suruz om $1 kb, a lasktud maksimum om $2 kb.''' Ei voi kirjutada muštho.", 'protectedpagewarning' => "'''VARUTUZ: nece lehtpol' om luklostadud, sidä voidas redaktiruida vaiše administratorad.''' @@ -722,6 +713,10 @@ Tö voit pörttas tagaze i redaktiruida toine lehtpol', vai [[Special:UserLogin| 'permissionserrors' => 'Oiktusiden petused', 'permissionserrorstext' => 'Teile ei sa tehta muga {{PLURAL:$1|necen sün|neniden süiden}} tagut:', 'permissionserrorstext-withaction' => 'Teile ei sa $2 {{PLURAL:$1|necen sün|neciden süiden}} tagut:', +'recreate-moveddeleted-warn' => "Homaikat! +Tö ladit säta lehtpol', kudamb om čutud poiš aigemba. +Kodvgat, pidab-ik säta nece lehtpol' udes. +Alemba anttas necen lehtpolen čudandoiden da udesnimitandoiden aiglehtez.", 'moveddeleted-notice' => "Nece lehtpol' om čutud poiš. Alemba om anttud lehtpolen čudandan vai sirdandan istorii kut abuandmused.", 'log-fulllog' => 'Ozutada kaclendnimikirjutez kogonaz', @@ -739,6 +734,8 @@ Wikiš om jo mugoi lehtpol'.", 'post-expand-template-inclusion-warning' => 'Varutuz: lehtpolele pandud šablonoiden suruz om surehk. Ei voi mülütada erasid šablonoid.', 'post-expand-template-inclusion-category' => 'Lehtpoled, kudambiden mülütadud šablonoiden suruz om ülitadud', +'post-expand-template-argument-warning' => "Homaikat! Necil lehtpolel om hot' üks' surehk šablonan argument. +Mugomad argumentad čutihe.", 'post-expand-template-argument-category' => 'Lehtpoled, kudambil om keskhe jättud šablonoiden argumentid', 'parser-template-loop-warning' => "Sol'm om löutud šablonas: [[$1]]", 'parser-template-recursion-depth-warning' => 'Šablonan rekursijan süvuzröun om ülitadud ($1)', @@ -831,6 +828,8 @@ $1", 'logdelete-failure' => "'''Ei voi toižetada aigkirjutesen näguladud:''' $1", 'revdel-restore' => 'Toižetada nägubuz', +'revdel-restore-deleted' => 'čutud poiš versijad', +'revdel-restore-visible' => 'versijad, kudambad voib nähta', 'pagehist' => 'Lehtpolen istorii', 'deletedhist' => 'Čudandoiden istorii', 'revdelete-content' => 'südäimišt', @@ -890,7 +889,7 @@ Tö ei voigoi kävutada sidä.', 'compareselectedversions' => 'Rindatada valitud versijad', 'showhideselectedversions' => 'Ozutada/peitta valitud versijad', 'editundo' => 'heitta pätand', -'diff-multi' => "({{PLURAL:$1|üks' keskmäine versii ei ole|$1 keskmäšt versijad ei olgoi}} ozutadud)", +'diff-multi' => "({{PLURAL:$1|üks' keskmäine versii ei ole|$1 keskmäšt versijad ei olgoi}} {{PLURAL:$2|one user|$2 users}} ozutadud)", # Search results 'searchresults' => "Ectä rezul'tatad", @@ -926,6 +925,7 @@ Tö ei voigoi kävutada sidä.', 'searchprofile-everything-tooltip' => 'Ectä kaikil lehtpolil (lodulehtpolid mülütaden)', 'searchprofile-advanced-tooltip' => 'Ectä märitud nimiavarusiš', 'search-result-size' => '$1 ({{PLURAL:$2|1 sana|$2 sanad}})', +'search-result-category-size' => '{{PLURAL:$1|1 element|$1 elementad}} ({{PLURAL:$2|1 alakategorii|$2 alakategorijad}}, {{PLURAL:$3|1 fail|$3 failad}})', 'search-result-score' => 'Relevantižuz: $1%', 'search-redirect' => '(oigenduz $1)', 'search-section' => '(jaguz $1)', @@ -942,6 +942,7 @@ Tö ei voigoi kävutada sidä.', 'searchall' => 'kaik', 'showingresults' => "Alemba ozutadas {{PLURAL:$1|'''1''' rezul'tat|'''$1''' rezul'tatad}} nomeraspäi #'''$2''' augotaden.", 'showingresultsnum' => "Alemba ozutadas {{PLURAL:$3|'''1''' rezul'tat|'''$3''' rezul'tatad}} nomeraspäi '''$2''' augotaden.", +'showingresultsheader' => "{{PLURAL:$5|'''$1''' '''$3'''-š rezul'tatoišpäi|Rezul'tatad '''$1–$2''' '''$3'''-špäi}} '''$4'''-n täht", 'nonefound' => "'''Note''': Ectäs tobjimalaz kaidetud nimiavaruzišpäi. Kävutagat prefiks ''all:'', miše ectä kaikes südäimištospäi (lodulehtpolid, šablonoid i m. e. mülütaden), vai kävutagat tarbhaine nimiavaruz.", 'search-nonefound' => "Ecmižhe ei löudnus rezul'tatoid.", @@ -1002,6 +1003,7 @@ Otkat sil'mnägubale üks-se, miše {{SITENAME}}-saitan sädäimišt voib olda v 'contextlines' => 'Ozutadud rividen lugu kaikuččen löutud kirjutesen täht:', 'contextchars' => 'Kontekstznamoiden lugu rives:', 'stub-threshold' => 'Nägutesen märitamižen künduz kosketust otetile (baitoiš)', +'stub-threshold-disabled' => 'Ei ole kävutamas', 'recentchangesdays' => 'Päiväd veresiden toižetusidenke, lugumär:', 'recentchangesdays-max' => '(maksimum $1 {{PLURAL:$1|päiv|päiväd}})', 'recentchangescount' => 'Redakcijoiden lugu, kudamb pidab ozutada augotižjärgendusen mödhe:', @@ -1066,9 +1068,15 @@ Ku tö kirjutat sen, nece nimi kävutadas, miše ozutada lehtpolen toižetajad.' 'prefs-advancedrendering' => 'Ližaopcijad', 'prefs-advancedsearchoptions' => 'Ližaopcijad', 'prefs-advancedwatchlist' => 'Ližaopcijad', -'prefs-display' => 'Nägun opcijad', +'prefs-displayrc' => 'Nägun opcijad', +'prefs-displaysearchoptions' => 'Nägun opcijad', +'prefs-displaywatchlist' => 'Nägun opcijad', 'prefs-diffs' => 'Erod', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Verkpočtan adres nägub korrektižeks.', +'email-address-validity-invalid' => 'Antkat verkpočtan korrektine adres', + # User rights 'userrights' => 'Kävutajiden oiktusiden ohjandamine', 'userrights-lookup-user' => 'Kävutajiden gruppiden ohjendamine', @@ -1214,14 +1222,9 @@ Ku tö kirjutat sen, nece nimi kävutadas, miše ozutada lehtpolen toižetajad.' 'recentchanges-legend' => 'Tantoižiden toižetusiden järgendused', 'recentchangestext' => 'Necil lehtpolil om tantoižid toižetusid {{SITENAME}}-saital.', 'recentchanges-feed-description' => "Kacelta jäl'gmäižid toižetusid wikiš neciš valus.", -'recentchanges-label-legend' => 'Legend: $1.', -'recentchanges-legend-newpage' => "$1 - uz' lehtpol'", 'recentchanges-label-newpage' => 'Nece redakcii sädi uden lehtpolen', -'recentchanges-legend-minor' => '$1 - penikaine redakcii', 'recentchanges-label-minor' => 'Nece redakcii om penikaine', -'recentchanges-legend-bot' => '$1 - botan redakcii', 'recentchanges-label-bot' => 'Necen redakcijan tegi bot', -'recentchanges-legend-unpatrolled' => '$1 - patruliruimatoi redakcii', 'recentchanges-label-unpatrolled' => 'Necidä redakcijad ei völ patruliruinugoi', 'rcnote' => "Alahan om ozutadud {{PLURAL:$1| '''1''' toižetuz|'''$1''' toižetust}} {{PLURAL:$2|jäl'gmäižes päiväs|jäl'gmäižiš '''$2''' päiviš}}, aigal $5, $4.", 'rcnotefrom' => "Alemba oma anttud toižetused '''$2'''-späi ( '''$1'''-hesai).", @@ -1293,6 +1296,17 @@ Ku tö kirjutat sen, nece nimi kävutadas, miše ozutada lehtpolen toižetajad.' 'filetype-banned-type' => "'''\".\$1\"''' om laskmatoi failan tip. Lasktud {{PLURAL:\$3|failan tip om|failoiden tipad oma}} \$2.", 'filetype-missing' => 'Necil failal ei ole ližad (ozutesikš, ".jpg").', +'empty-file' => "Teil oigetud fail om pall'az.", +'file-too-large' => 'Teil oigetud fail om surembahk.', +'filename-tooshort' => 'Lühudahk failannimi.', +'filetype-banned' => "Nece failtip om kel'tud.", +'verification-error' => 'Nece fail ei völ sanu vahvištust.', +'hookaborted' => "Ližoiden ümbriradai kel'di teid tehta nece toižetuz.", +'illegal-filename' => "Kel'tud failannimi.", +'overwrite' => 'Ei sa kirjutada muštho olijan failan päle.', +'unknown-error' => 'Tundmatoi petuz.', +'tmp-create-error' => 'Ei voi säta pordaigašt failad.', +'tmp-write-error' => 'Petuz pordaigaižen failan kirjutamižen aigan.', 'largefileserver' => 'Failan suruz om suremb, mi lasktud serveral.', 'emptyfile' => "Teil jügutoittud fail nägub pal'haks. Voib olda, necen sü om vär failannimen kirjutamine. @@ -1300,7 +1314,6 @@ Olgat hüväd, kodvgat, todeks-ik tö tahtoit jügutoitta nece fail.", 'fileexists' => "Fail mugoman nimenke om jo olmas, olgat hüväd, kodvgat '''[[:$1]]''' ku teil ei ole varmdust, tahtoižit-ik tö toižetada sidä. [[$1|thumb]]", 'file-exists-duplicate' => 'Nece fail om {{PLURAL:$1|necen failan|neniden failoiden}} dublikat:', -'successfulupload' => 'Jügutoitand lopihe satusekahas', 'uploadwarning' => 'Varutuz jügutoitmižes', 'savefile' => 'Kirjutada fail', 'uploadedimage' => 'om jügutoitnu "[[$1]]"', @@ -1317,6 +1330,9 @@ Olgat hüväd, kodvgat, todeks-ik tö tahtoit jügutoitta nece fail.", 'upload-maxfilesize' => 'Failan maksimaline suruz: $1', 'upload-description' => 'failan ümbrikirjutand', 'watchthisupload' => 'Kacelta necidä failad', +'upload-success-subj' => 'Jügutoitand lopihe satusekahas', +'upload-failure-subj' => 'Jügutoitandan problem', +'upload-warning-subj' => 'Jügutoitandvarutuz', 'upload-proto-error' => 'Vär protokol', 'upload-proto-error-text' => 'Miše jügutoitta edahanpäi, kävutagat URL, kudamb augotase http:// vai ftp://.', @@ -1394,6 +1410,8 @@ Plok pachan pälkirjutesele toižetab sortiruindan järgenduz.', 'redirectstofile' => '{{PLURAL:$1|Nece fail läbikosketab|$1 Nened failad läbikosketadas}} necile failale:', 'duplicatesoffile' => '{{PLURAL:$1|Nece fail om|$1 Nened failad oma}} ([[Special:FileDuplicateSearch/$2|ližainformacii]])-failan {{PLURAL:$1|dublikat|$1 dublikatad}}:', 'sharedupload' => 'Nece fail om ühthižes $1-varaaitaspäi, sidä voiži kävutada mugažo toižiš projektoiš.', +'sharedupload-desc-here' => 'Nece fail om $1-späi i se sab kävutada toižiš projektoiš. +Informacijad sen [$2 andmusiden lehtpolelpäi] om anttud alemba.', 'filepage-nofile' => 'Ei ole failad mugoižen nimenke.', 'filepage-nofile-link' => 'Ei ole failad mugoižen nimenke, no tö voit [$1 jügutoitta se].', 'uploadnewversion-linktext' => "Jügutoitta necen failan uz' versii", @@ -1465,7 +1483,6 @@ Plok pachan pälkirjutesele toižetab sortiruindan järgenduz.', 'statistics-edits-average' => 'Toižetusiden keskmäine lugu lehtpolel', 'statistics-views-total' => 'Kaiked kacundoid', 'statistics-views-peredit' => 'Kacundoid redakcijas', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Töiden jonon] piduz', 'statistics-users' => 'Registriruidud [[Special:ListUsers|kävutajad]]', 'statistics-users-active' => 'Activižed kävutajad', 'statistics-mostpopular' => 'Kaikiš populärižembad lehtpoled', @@ -1660,7 +1677,7 @@ Kc. mugažo [[Special:WantedCategories|ectud kategorijoiden nimikirjutez]].', # Watchlist 'watchlist' => 'Kaclendnimikirjutez', 'mywatchlist' => 'Minun kaclendnimikirjutez', -'watchlistfor' => "('''$1''')", +'watchlistfor2' => 'Kävutajale $1 $2', 'nowatchlist' => "Teiden kaclendnimikirjutez om pall'az.", 'watchlistanontext' => 'Olgat hüväd, $1, miše lugeda vai redaktiruida teiden kaclendnimikirjutez.', 'watchnologin' => 'Pidab kirjutadas sistemha', @@ -1775,7 +1792,9 @@ Jäl'gmäižed toižetused om tehnu [[User:$3|$3]] ([[User talk:$3|Lodud]]{{int: 'editcomment' => "Redaktiruindan ümbrikacund oli: \"''\$1''\".", 'revertpage' => 'Kävutajan [[Special:Contributions/$2|$2]] ([[User talk:$2|Lodud]]) tožetused oma endištadud edeližhe versijahasai (avtor: [[User:$1|$1]])', 'rollback-success' => '$1-kävutajan toižetused oma endištadud $2-kävutajan versijahasai.', -'sessionfailure' => 'Om problemoid nügüdläižes radseansas; nece tegend om kel\'tud, miše kaita "seansan anastusespäi". + +# Edit tokens +'sessionfailure' => 'Om problemoid nügüdläižes radseansas; nece tegend om kel\'tud, miše kaita "seansan anastusespäi". Olgat hüväd, paingat "tagaze"-kingitimele i jügutoitkat lehtpol\' udes, sid\' naprigat toštta tegend völ kerdan.', # Protect @@ -1894,6 +1913,7 @@ $1', 'sp-contributions-newbies-title' => 'Uziden kävutajiden tond', 'sp-contributions-blocklog' => 'Blokiruindoiden aigkirj', 'sp-contributions-deleted' => 'Čutud kävutajan tond', +'sp-contributions-uploads' => 'jügutoitandad', 'sp-contributions-logs' => 'aigkirjad', 'sp-contributions-talk' => 'lodu', 'sp-contributions-userrights' => 'kävutajiden oiktusiden ohjandamine', @@ -1901,6 +1921,7 @@ $1', Alemba om anttud jälgmäine kirjutuz blokiruindaiglehtesespäi:", 'sp-contributions-search' => 'Ectä tond', 'sp-contributions-username' => 'IP-adres vai kävutajan nimi:', +'sp-contributions-toponly' => "Ozutada vaiše toižetused, kudambad oma jäl'gmäižin versijoin", 'sp-contributions-submit' => 'Ectä', # What links here @@ -1963,7 +1984,6 @@ Kc. [[Special:IPBlockList|blokiruidud IP-adresoiden nimikirjuteshe]].', 'ipb-edit-dropdown' => 'Redaktiruida süiden nimikirjutez', 'ipb-unblock-addr' => 'Heitta blokiruind kävutajalpäi $1', 'ipb-unblock' => 'Heitta blokiruind kävutajan nimelpäi vai IP-adresalpäi', -'ipb-blocklist-addr' => 'Kävutajan $1 aktualižed blokiruindad', 'ipb-blocklist' => 'Ozutada aktualižed blokiruindad', 'ipb-blocklist-contribs' => 'Kävutajan $1 tond', 'unblockip' => 'Heitta blokiruind IP-adresalpäi', @@ -1971,7 +1991,7 @@ Kc. [[Special:IPBlockList|blokiruidud IP-adresoiden nimikirjuteshe]].', 'ipusubmit' => 'Heitta nece blokiruind', 'unblocked' => '[[User:$1|$1]]-kävutajan blokiruind om heittud', 'unblocked-id' => 'Blokiruind $1 om heittud', -'ipblocklist' => 'Blokiruidud IP-adresad da kävutajiden nimed', +'ipblocklist' => 'Blokiruidud kävutajad', 'ipblocklist-legend' => 'Löuta blokiruidud kävutajad', 'ipblocklist-username' => 'Kävutajan nimi vai IP-adres:', 'ipblocklist-sh-userblocks' => '$1 kävutajiden nimiden blokiruindad', @@ -2249,6 +2269,7 @@ Sab lugeda sen augotižkod da kopiruida se.", 'tooltip-upload' => 'Augotada jügutoitand', 'tooltip-rollback' => "Čukat jäl'gmäižel redaktoral tehtud toižetused ühtel painandal", 'tooltip-undo' => "Čuta jäl'gmäine toižetuz i avaita redaktiruindan lehtpol'. Sab kirjutada čudandad sü.", +'tooltip-summary' => 'Kirjutagat lühüd ümbristarinoičend', # Stylesheets 'common.css' => '/* Pandud tänna CSS painastaškandeb kaikile irdnägun temoile */', @@ -2321,6 +2342,7 @@ kc. math/README järgendamižen täht.', # Patrol log 'patrol-log-page' => 'Patruliruindan aigkirj', 'patrol-log-header' => 'Nece om patruliruidud versijoiden aiglehtez.', +'patrol-log-line' => 'kodvi $1 $2-špäi $3', 'patrol-log-auto' => '(avtomatižikš)', 'patrol-log-diff' => 'versii $1', 'log-show-hide-patrol' => '$1 patruliruindan aigkirj', @@ -2336,10 +2358,10 @@ kc. math/README järgendamižen täht.', # Media information 'thumbsize' => 'Pičukuvan suruz:', 'widthheightpage' => "$1×$2, $3 {{PLURAL:$3|lehtpol'|lehtpol't}}", -'file-info' => '(failan suruz: $1, MIME-tip: $2)', -'file-info-size' => '($1 × $2 pikselad, failan suruz: $3, MIME-tip: $4)', +'file-info' => 'failan suruz: $1, MIME-tip: $2', +'file-info-size' => '$1 × $2 pikselad, failan suruz: $3, MIME-tip: $4', 'file-nohires' => 'Ei ole versijad paremban tarkoiktusenke.', -'svg-long-desc' => '(SVG-fail, nominaližikš $1 × $2 pikselid, failan suruz: $3)', +'svg-long-desc' => 'SVG-fail, nominaližikš $1 × $2 pikselid, failan suruz: $3', 'show-big-image' => 'Korgedtarkoiktuseline kuvan versii', 'show-big-image-thumb' => 'Ezikacundan suruz: $1 × $2 pixels', 'file-info-gif-looped' => 'toštase', @@ -2788,6 +2810,7 @@ Kävutagat normaline ezikacund.', 'version-specialpages' => 'Specialižed lehtpoled', 'version-parserhooks' => 'Sintaksižen analizatoran sabustajad', 'version-variables' => 'Vajehtujad lugud', +'version-skins' => 'Nägutemad', 'version-other' => 'Toine', 'version-mediahandlers' => 'Median radimed', 'version-hooks' => 'Sabutajad', @@ -2799,6 +2822,7 @@ Kävutagat normaline ezikacund.', 'version-hook-subscribedby' => 'Ezipakitoitajad', 'version-version' => '(Versii $1)', 'version-license' => 'Licenzii', +'version-poweredby-others' => 'toižed', 'version-software' => 'Seižutadud programmišt', 'version-software-product' => 'Produkt', 'version-software-version' => 'Versii', @@ -2865,6 +2889,15 @@ Kirjutagat failan nimi «{{ns:file}}:»-pkefiksata.', 'tags-edit' => 'redaktiruida', 'tags-hitcount' => '$1 {{PLURAL:$1|toižetuz|toižetust}}', +# Special:ComparePages +'comparepages' => 'Lehtpoliden rindatuz', +'compare-selector' => 'Lehtpoliden versijoiden rindatuz', +'compare-page1' => "Ezmäine lehtpol'", +'compare-page2' => "Toine lehtpol'", +'compare-rev1' => 'Ezmäine versii', +'compare-rev2' => 'Toine versii', +'compare-submit' => 'Rindatada', + # Database error messages 'dberr-header' => 'Necil wikil om problemoid', 'dberr-problems' => 'Pakičem armahtust! Necil saital om tehnižid problemoid.', @@ -2885,4 +2918,7 @@ Kirjutagat failan nimi «{{ns:file}}:»-pkefiksata.', 'htmlform-reset' => 'Tühjitada toižetused', 'htmlform-selectorother-other' => 'Toine', +# SQLite database support +'sqlite-no-fts' => " $1 täuz'tekstaižen ecindan tügedamižeta", + ); diff --git a/languages/messages/MessagesVi.php b/languages/messages/MessagesVi.php index 8d315aa1..23148462 100644 --- a/languages/messages/MessagesVi.php +++ b/languages/messages/MessagesVi.php @@ -15,6 +15,7 @@ * @author Neoneurone * @author Nguyễn Thanh Quang * @author Thaisk + * @author Thanhtai2009 * @author Tmct * @author Trần Nguyễn Minh Huy * @author Trần Thế Trung @@ -52,104 +53,105 @@ $namespaceAliases = array( ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'Đổi hướng kép' ), - 'BrokenRedirects' => array( 'Đổi hướng sai' ), - 'Disambiguations' => array( 'Trang định hướng' ), - 'Userlogin' => array( 'Đăng nhập' ), - 'Userlogout' => array( 'Đăng xuất' ), - 'CreateAccount' => array( 'Đăng ký' ), - 'Preferences' => array( 'Tùy chọn' ), - 'Watchlist' => array( 'Danh sách theo dõi' ), - 'Recentchanges' => array( 'Thay đổi gần đây' ), - 'Upload' => array( 'Tải lên' ), - 'Listfiles' => array( 'Danh sách hình', 'Danh sách tập tin' ), - 'Newimages' => array( 'Tập tin mới', 'Hình mới' ), - 'Listusers' => array( 'Danh sách thành viên' ), - 'Listgrouprights' => array( 'Quyền nhóm người dùng' ), - 'Statistics' => array( 'Thống kê' ), - 'Randompage' => array( 'Ngẫu nhiên' ), - 'Lonelypages' => array( 'Trang mồ côi' ), - 'Uncategorizedpages' => array( 'Trang chưa phân loại' ), - 'Uncategorizedcategories' => array( 'Thể loại chưa phân loại' ), - 'Uncategorizedimages' => array( 'Hình chưa phân loại' ), - 'Uncategorizedtemplates' => array( 'Bản mẫu chưa phân loại', 'Tiêu bản chưa phân loại' ), - 'Unusedcategories' => array( 'Thể loại chưa dùng' ), - 'Unusedimages' => array( 'Hình chưa dùng' ), - 'Wantedpages' => array( 'Trang cần thiết' ), - 'Wantedcategories' => array( 'Thể loại cần thiết' ), - 'Wantedfiles' => array( 'Tập tin cần thiết' ), - 'Wantedtemplates' => array( 'Bản mẫu cần thiết', 'Tiêu bản cần thiết' ), - 'Mostlinked' => array( 'Liên kết nhiều nhất' ), - 'Mostlinkedcategories' => array( 'Thể loại liên kết nhiều nhất' ), - 'Mostlinkedtemplates' => array( 'Bản mẫu liên kết nhiều nhất', 'Tiêu bản liên kết nhiều nhất' ), - 'Mostimages' => array( 'Tập tin liên kết nhiều nhất' ), - 'Mostcategories' => array( 'Thể loại lớn nhất' ), - 'Mostrevisions' => array( 'Nhiều phiên bản nhất' ), - 'Fewestrevisions' => array( 'Ít phiên bản nhất' ), - 'Shortpages' => array( 'Trang ngắn' ), - 'Longpages' => array( 'Trang dài' ), - 'Newpages' => array( 'Trang mới' ), - 'Ancientpages' => array( 'Trang cũ' ), - 'Deadendpages' => array( 'Trang đường cùng' ), - 'Protectedpages' => array( 'Trang khóa' ), - 'Protectedtitles' => array( 'Tựa đề bị khóa' ), - 'Allpages' => array( 'Mọi bài' ), - 'Prefixindex' => array( 'Tiền tố' ), - 'Ipblocklist' => array( 'Danh sách cấm' ), - 'Specialpages' => array( 'Trang đặc biệt' ), - 'Contributions' => array( 'Đóng góp' ), - 'Emailuser' => array( 'Gửi thư' ), - 'Confirmemail' => array( 'Xác nhận thư' ), - 'Whatlinkshere' => array( 'Liên kết đến đây' ), - 'Recentchangeslinked' => array( 'Thay đổi liên quan' ), - 'Movepage' => array( 'Di chuyển' ), - 'Blockme' => array( 'Khóa tôi' ), - 'Booksources' => array( 'Nguồn sách' ), - 'Categories' => array( 'Thể loại' ), + 'DoubleRedirects' => array( 'Đổi_hướng_kép' ), + 'BrokenRedirects' => array( 'Đổi_hướng_sai' ), + 'Disambiguations' => array( 'Trang_định_hướng' ), + 'Userlogin' => array( 'Đăng_nhập' ), + 'Userlogout' => array( 'Đăng_xuất' ), + 'CreateAccount' => array( 'Đăng_ký' ), + 'Preferences' => array( 'Tùy_chọn' ), + 'Watchlist' => array( 'Danh_sách_theo_dõi' ), + 'Recentchanges' => array( 'Thay_đổi_gần_đây' ), + 'Upload' => array( 'Tải_lên' ), + 'Listfiles' => array( 'Danh_sách_hình', 'Danh_sách_tập_tin' ), + 'Newimages' => array( 'Tập_tin_mới', 'Hình_mới' ), + 'Listusers' => array( 'Danh_sách_thành_viên' ), + 'Listgrouprights' => array( 'Quyền_nhóm_người_dùng' ), + 'Statistics' => array( 'Thống_kê' ), + 'Randompage' => array( 'Ngẫu_nhiên' ), + 'Lonelypages' => array( 'Trang_mồ_côi' ), + 'Uncategorizedpages' => array( 'Trang_chưa_phân_loại' ), + 'Uncategorizedcategories' => array( 'Thể_loại_chưa_phân_loại' ), + 'Uncategorizedimages' => array( 'Hình_chưa_phân_loại' ), + 'Uncategorizedtemplates' => array( 'Bản_mẫu_chưa_phân_loại', 'Tiêu_bản_chưa_phân_loại' ), + 'Unusedcategories' => array( 'Thể_loại_chưa_dùng' ), + 'Unusedimages' => array( 'Hình_chưa_dùng' ), + 'Wantedpages' => array( 'Trang_cần_thiết' ), + 'Wantedcategories' => array( 'Thể_loại_cần_thiết' ), + 'Wantedfiles' => array( 'Tập_tin_cần_thiết' ), + 'Wantedtemplates' => array( 'Bản_mẫu_cần_thiết', 'Tiêu_bản_cần_thiết' ), + 'Mostlinked' => array( 'Liên_kết_nhiều_nhất' ), + 'Mostlinkedcategories' => array( 'Thể_loại_liên_kết_nhiều_nhất' ), + 'Mostlinkedtemplates' => array( 'Bản_mẫu_liên_kết_nhiều_nhất', 'Tiêu_bản_liên_kết_nhiều_nhất' ), + 'Mostimages' => array( 'Tập_tin_liên_kết_nhiều_nhất' ), + 'Mostcategories' => array( 'Thể_loại_lớn_nhất' ), + 'Mostrevisions' => array( 'Nhiều_phiên_bản_nhất' ), + 'Fewestrevisions' => array( 'Ít_phiên_bản_nhất' ), + 'Shortpages' => array( 'Trang_ngắn' ), + 'Longpages' => array( 'Trang_dài' ), + 'Newpages' => array( 'Trang_mới' ), + 'Ancientpages' => array( 'Trang_cũ' ), + 'Deadendpages' => array( 'Trang_đường_cùng' ), + 'Protectedpages' => array( 'Trang_khóa' ), + 'Protectedtitles' => array( 'Tựa_đề_bị_khóa' ), + 'Allpages' => array( 'Mọi_bài' ), + 'Prefixindex' => array( 'Tiền_tố' ), + 'Ipblocklist' => array( 'Danh_sách_cấm' ), + 'Specialpages' => array( 'Trang_đặc_biệt' ), + 'Contributions' => array( 'Đóng_góp' ), + 'Emailuser' => array( 'Gửi_thư' ), + 'Confirmemail' => array( 'Xác_nhận_thư' ), + 'Whatlinkshere' => array( 'Liên_kết_đến_đây' ), + 'Recentchangeslinked' => array( 'Thay_đổi_liên_quan' ), + 'Movepage' => array( 'Di_chuyển' ), + 'Blockme' => array( 'Khóa_tôi' ), + 'Booksources' => array( 'Nguồn_sách' ), + 'Categories' => array( 'Thể_loại' ), 'Export' => array( 'Xuất' ), - 'Version' => array( 'Phiên bản' ), - 'Allmessages' => array( 'Mọi thông báo' ), - 'Log' => array( 'Nhật trình' ), - 'Blockip' => array( 'Cấm IP' ), - 'Undelete' => array( 'Phục hồi' ), + 'Version' => array( 'Phiên_bản' ), + 'Allmessages' => array( 'Mọi_thông_báo' ), + 'Log' => array( 'Nhật_trình' ), + 'Blockip' => array( 'Cấm_IP' ), + 'Undelete' => array( 'Phục_hồi' ), 'Import' => array( 'Nhập' ), - 'Lockdb' => array( 'Khóa CSDL' ), - 'Unlockdb' => array( 'Mở khóa CSDL' ), - 'Userrights' => array( 'Quyền thành viên' ), - 'MIMEsearch' => array( 'Tìm MIME' ), - 'FileDuplicateSearch' => array( 'Tìm tập tin trùng' ), - 'Unwatchedpages' => array( 'Trang chưa theo dõi' ), - 'Listredirects' => array( 'Trang đổi hướng' ), - 'Revisiondelete' => array( 'Xóa phiên bản' ), - 'Unusedtemplates' => array( 'Tiêu bản chưa dùng', 'Bản mẫu chưa dùng' ), - 'Randomredirect' => array( 'Đổi hướng ngẫu nhiên' ), - 'Mypage' => array( 'Trang tôi', 'Trang cá nhân' ), - 'Mytalk' => array( 'Thảo luận tôi', 'Trang thảo luận của tôi' ), - 'Mycontributions' => array( 'Đóng góp của tôi', 'Tôi đóng góp' ), - 'Listadmins' => array( 'Danh sách admin' ), - 'Listbots' => array( 'Danh sách bot' ), - 'Popularpages' => array( 'Trang phổ biến' ), - 'Search' => array( 'Tìm kiếm' ), - 'Resetpass' => array( 'Đổi mật khẩu' ), - 'Withoutinterwiki' => array( 'Không interwiki' ), - 'MergeHistory' => array( 'Trộn lịch sử' ), - 'Filepath' => array( 'Đường dẫn file' ), - 'Invalidateemail' => array( 'Tắt thư' ), - 'Blankpage' => array( 'Trang trắng' ), - 'LinkSearch' => array( 'Tìm liên kết' ), - 'DeletedContributions' => array( 'Đóng góp bị xóa' ), + 'Lockdb' => array( 'Khóa_CSDL' ), + 'Unlockdb' => array( 'Mở_khóa_CSDL' ), + 'Userrights' => array( 'Quyền_thành_viên' ), + 'MIMEsearch' => array( 'Tìm_MIME' ), + 'FileDuplicateSearch' => array( 'Tìm_tập_tin_trùng' ), + 'Unwatchedpages' => array( 'Trang_chưa_theo_dõi' ), + 'Listredirects' => array( 'Trang_đổi_hướng' ), + 'Revisiondelete' => array( 'Xóa_phiên_bản' ), + 'Unusedtemplates' => array( 'Tiêu_bản_chưa_dùng', 'Bản_mẫu_chưa_dùng' ), + 'Randomredirect' => array( 'Đổi_hướng_ngẫu_nhiên' ), + 'Mypage' => array( 'Trang_tôi', 'Trang_cá_nhân' ), + 'Mytalk' => array( 'Thảo_luận_tôi', 'Trang_thảo_luận_của_tôi' ), + 'Mycontributions' => array( 'Đóng_góp_của_tôi', 'Tôi_đóng_góp' ), + 'Listadmins' => array( 'Danh_sách_admin' ), + 'Listbots' => array( 'Danh_sách_bot' ), + 'Popularpages' => array( 'Trang_phổ_biến' ), + 'Search' => array( 'Tìm_kiếm' ), + 'Resetpass' => array( 'Đổi_mật_khẩu' ), + 'Withoutinterwiki' => array( 'Không_interwiki' ), + 'MergeHistory' => array( 'Trộn_lịch_sử' ), + 'Filepath' => array( 'Đường_dẫn_file' ), + 'Invalidateemail' => array( 'Tắt_thư' ), + 'Blankpage' => array( 'Trang_trắng' ), + 'LinkSearch' => array( 'Tìm_liên_kết' ), + 'DeletedContributions' => array( 'Đóng_góp_bị_xóa' ), 'Tags' => array( 'Thẻ' ), - 'Activeusers' => array( 'Người dùng tích cực' ), + 'Activeusers' => array( 'Người_dùng_tích_cực' ), ); $magicWords = array( - 'redirect' => array( '0', '#đổi', '#đổi', '#REDIRECT' ), + 'redirect' => array( '0', '#đổi', '#REDIRECT' ), 'notoc' => array( '0', '__KHÔNGMỤCMỤC__', '__NOTOC__' ), 'nogallery' => array( '0', '__KHÔNGALBUM__', '__NOGALLERY__' ), 'forcetoc' => array( '0', '__LUÔNMỤCLỤC__', '__FORCETOC__' ), 'toc' => array( '0', '__MỤCLỤC__', '__TOC__' ), 'noeditsection' => array( '0', '__KHÔNGSỬAMỤC__', '__NOEDITSECTION__' ), - 'currentmonth' => array( '1', 'THÁNGNÀY', 'CURRENTMONTH', 'CURRENTMONTH2' ), + 'currentmonth' => array( '1', 'THÁNGNÀY', 'THÁNGNÀY2', 'CURRENTMONTH', 'CURRENTMONTH2' ), + 'currentmonth1' => array( '1', 'THÁNGNÀY1', 'CURRENTMONTH1' ), 'currentmonthname' => array( '1', 'TÊNTHÁNGNÀY', 'CURRENTMONTHNAME' ), 'currentmonthnamegen' => array( '1', 'TÊNDÀITHÁNGNÀY', 'CURRENTMONTHNAMEGEN' ), 'currentmonthabbrev' => array( '1', 'TÊNNGẮNTHÁNGNÀY', 'CURRENTMONTHABBREV' ), @@ -159,7 +161,9 @@ $magicWords = array( 'currentyear' => array( '1', 'NĂMNÀY', 'CURRENTYEAR' ), 'currenttime' => array( '1', 'GIỜNÀY', 'CURRENTTIME' ), 'localmonth' => array( '1', 'THÁNGĐỊAPHƯƠNG', 'LOCALMONTH', 'LOCALMONTH2' ), + 'localmonth1' => array( '1', 'THÁNGĐỊAPHƯƠNG1', 'LOCALMONTH1' ), 'localmonthname' => array( '1', 'TÊNTHÁNGĐỊAPHƯƠNG', 'LOCALMONTHNAME' ), + 'localmonthabbrev' => array( '1', 'THÁNGĐỊAPHƯƠNGTẮT', 'LOCALMONTHABBREV' ), 'localday' => array( '1', 'NGÀYĐỊAPHƯƠNG', 'LOCALDAY' ), 'localday2' => array( '1', 'NGÀYĐỊAPHƯƠNG2', 'LOCALDAY2' ), 'localdayname' => array( '1', 'TÊNNGÀYĐỊAPHƯƠNG', 'LOCALDAYNAME' ), @@ -169,10 +173,19 @@ $magicWords = array( 'numberofarticles' => array( '1', 'SỐBÀI', 'NUMBEROFARTICLES' ), 'numberoffiles' => array( '1', 'SỐTẬPTIN', 'NUMBEROFFILES' ), 'numberofusers' => array( '1', 'SỐTHÀNHVIÊN', 'NUMBEROFUSERS' ), + 'numberofactiveusers' => array( '1', 'SỐTHÀNHVIÊNTÍCHCỰC', 'NUMBEROFACTIVEUSERS' ), 'numberofedits' => array( '1', 'SỐSỬAĐỔI', 'NUMBEROFEDITS' ), + 'numberofviews' => array( '1', 'SỐLẦNXEM', 'NUMBEROFVIEWS' ), 'pagename' => array( '1', 'TÊNTRANG', 'PAGENAME' ), 'pagenamee' => array( '1', 'TÊNTRANG2', 'PAGENAMEE' ), 'namespace' => array( '1', 'KHÔNGGIANTÊN', 'NAMESPACE' ), + 'talkspace' => array( '1', 'KGTTHẢOLUẬN', 'TALKSPACE' ), + 'subjectspace' => array( '1', 'KGTNỘIDUNG', 'SUBJECTSPACE', 'ARTICLESPACE' ), + 'fullpagename' => array( '1', 'TÊNTRANGĐỦ', 'FULLPAGENAME' ), + 'subpagename' => array( '1', 'TÊNTRANGPHỤ', 'SUBPAGENAME' ), + 'basepagename' => array( '1', 'TÊNTRANGGỐC', 'BASEPAGENAME' ), + 'talkpagename' => array( '1', 'TÊNTRANGTHẢOLUẬN', 'TALKPAGENAME' ), + 'subjectpagename' => array( '1', 'TÊNTRANGNỘIDUNG', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ), 'msg' => array( '0', 'NHẮN:', 'MSG:' ), 'subst' => array( '0', 'THẾ:', 'SUBST:' ), 'msgnw' => array( '0', 'NHẮNMỚI:', 'MSGNW:' ), @@ -185,24 +198,33 @@ $magicWords = array( 'img_framed' => array( '1', 'khung', 'framed', 'enframed', 'frame' ), 'img_page' => array( '1', 'trang=$1', 'trang $1', 'page=$1', 'page $1' ), 'img_upright' => array( '1', 'đứng', 'đứng=$1', 'đứng $1', 'upright', 'upright=$1', 'upright $1' ), - 'img_link' => array( '1', 'liên kết=$1', 'link=$1' ), + 'img_link' => array( '1', 'liên_kết=$1', 'link=$1' ), + 'int' => array( '0', 'NỘI:', 'INT:' ), 'sitename' => array( '1', 'TÊNMẠNG', 'SITENAME' ), + 'ns' => array( '0', 'KGT:', 'NS:' ), 'localurl' => array( '0', 'URLĐỊAPHƯƠNG:', 'LOCALURL:' ), + 'articlepath' => array( '0', 'LỐIBÀI', 'ARTICLEPATH' ), 'server' => array( '0', 'MÁYCHỦ', 'SERVER' ), 'servername' => array( '0', 'TÊNMÁYCHỦ', 'SERVERNAME' ), 'scriptpath' => array( '0', 'ĐƯỜNGDẪNSCRIPT', 'SCRIPTPATH' ), 'grammar' => array( '0', 'NGỮPHÁP:', 'GRAMMAR:' ), + 'gender' => array( '0', 'GIỐNG:', 'GENDER:' ), 'notitleconvert' => array( '0', '__KHÔNGCHUYỂNTÊN__', '__NOTITLECONVERT__', '__NOTC__' ), 'nocontentconvert' => array( '0', '__KHÔNGCHUYỂNNỘIDUNG__', '__NOCONTENTCONVERT__', '__NOCC__' ), 'currentweek' => array( '1', 'TUẦNNÀY', 'CURRENTWEEK' ), 'localweek' => array( '1', 'TUẦNĐỊAPHƯƠNG', 'LOCALWEEK' ), 'revisionid' => array( '1', 'SỐBẢN', 'REVISIONID' ), 'revisionday' => array( '1', 'NGÀYBẢN', 'REVISIONDAY' ), + 'revisionday2' => array( '1', 'NGÀYBẢN2', 'REVISIONDAY2' ), 'revisionmonth' => array( '1', 'THÁNGBẢN', 'REVISIONMONTH' ), + 'revisionmonth1' => array( '1', 'THÁNGBẢN1', 'REVISIONMONTH1' ), 'revisionyear' => array( '1', 'NĂMBẢN', 'REVISIONYEAR' ), 'plural' => array( '0', 'SỐNHIỀU:', 'PLURAL:' ), 'fullurl' => array( '0', 'URLĐỦ:', 'FULLURL:' ), + 'newsectionlink' => array( '1', '__LIÊNKẾTMỤCMỚI__', '__NEWSECTIONLINK__' ), + 'nonewsectionlink' => array( '1', '__KHÔNGLIÊNKẾTMỤCMỚI__', '__NONEWSECTIONLINK__' ), 'currentversion' => array( '1', 'BẢNNÀY', 'CURRENTVERSION' ), + 'urlencode' => array( '0', 'MÃHÓAURL:', 'URLENCODE:' ), 'language' => array( '0', '#NGÔNNGỮ:', '#LANGUAGE:' ), 'contentlanguage' => array( '1', 'NGÔNNGỮNỘIDUNG', 'CONTENTLANGUAGE', 'CONTENTLANG' ), 'pagesinnamespace' => array( '1', 'CỠKHÔNGGIANTÊN:', 'CỠKGT:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ), @@ -256,7 +278,7 @@ $datePreferenceMigrationMap = array( $linkTrail = "/^([a-zàâçéèêîôûäëïöüùÇÉÂÊÎÔÛÄËÏÖÜÀÈÙ]+)(.*)$/sDu"; -$separatorTransformTable = array(',' => '.', '.' => ',' ); +$separatorTransformTable = array( ',' => '.', '.' => ',' ); $messages = array( # User preference toggles @@ -274,8 +296,7 @@ $messages = array( 'tog-editsection' => 'Cho phép sửa đổi đề mục qua liên kết [sửa]', 'tog-editsectiononrightclick' => 'Cho phép sửa đổi đề mục bằng cách bấm chuột phải trên tên đề mục (JavaScript)', 'tog-showtoc' => 'Hiển thị mục lục (cho trang có trên 3 đề mục)', -'tog-rememberpassword' => 'Nhớ thông tin đăng nhập của tôi trên máy tính này', -'tog-editwidth' => 'Mở rộng ô sửa đổi ra toàn màn hình', +'tog-rememberpassword' => 'Nhớ thông tin đăng nhập của tôi trong trình duyệt này (cho đến $1 ngày)', 'tog-watchcreations' => 'Tự động theo dõi trang tôi viết mới', 'tog-watchdefault' => 'Tự động theo dõi trang tôi sửa', 'tog-watchmoves' => 'Tự động theo dõi trang tôi di chuyển', @@ -388,7 +409,7 @@ $messages = array( 'category-file-count-limited' => '{{PLURAL:$1|Tập tin|$1 tập tin}} sau nằm trong thể loại hiện hành.', 'listingcontinuesabbrev' => 'tiếp', 'index-category' => 'Trang được ghi chỉ mục', -'noindex-category' => 'Trang không ghi chỉ mục', +'noindex-category' => 'Trang không hiển thị trong bộ máy tìm kiếm', 'mainpagetext' => "'''MediaWiki đã được cài đặt thành công.'''", 'mainpagedocfooter' => 'Xin đọc [http://meta.wikimedia.org/wiki/Help:Contents Hướng dẫn sử dụng] để biết thêm thông tin về cách sử dụng phần mềm wiki. @@ -422,31 +443,21 @@ $messages = array( 'faqpage' => 'Project:Các câu hỏi thường gặp', # Vector skin -'vector-action-addsection' => 'Thêm chủ đề', -'vector-action-delete' => 'Xóa', -'vector-action-move' => 'Di chuyển', -'vector-action-protect' => 'Khóa', -'vector-action-undelete' => 'Phục hồi', -'vector-action-unprotect' => 'Mở khóa', -'vector-namespace-category' => 'Thể loại', -'vector-namespace-help' => 'Trang trợ giúp', -'vector-namespace-image' => 'Tập tin', -'vector-namespace-main' => 'Trang', -'vector-namespace-media' => 'Trang phương tiện', -'vector-namespace-mediawiki' => 'Thông điệp', -'vector-namespace-project' => 'Trang dự án', -'vector-namespace-special' => 'Trang đặc biệt', -'vector-namespace-talk' => 'Thảo luận', -'vector-namespace-template' => 'Bản mẫu', -'vector-namespace-user' => 'Trang cá nhân', -'vector-view-create' => 'Tạo', -'vector-view-edit' => 'Sửa', -'vector-view-history' => 'Xem lịch sử', -'vector-view-view' => 'Xem', -'vector-view-viewsource' => 'Xem mã nguồn', -'actions' => 'Tác vụ', -'namespaces' => 'Không gian tên', -'variants' => 'Biến thể', +'vector-action-addsection' => 'Thêm chủ đề', +'vector-action-delete' => 'Xóa', +'vector-action-move' => 'Di chuyển', +'vector-action-protect' => 'Khóa', +'vector-action-undelete' => 'Phục hồi', +'vector-action-unprotect' => 'Mở khóa', +'vector-simplesearch-preference' => 'Gợi ý tìm kiếm nâng cao (cần bề ngoài Vectơ)', +'vector-view-create' => 'Tạo', +'vector-view-edit' => 'Sửa', +'vector-view-history' => 'Xem lịch sử', +'vector-view-view' => 'Xem', +'vector-view-viewsource' => 'Xem mã nguồn', +'actions' => 'Tác vụ', +'namespaces' => 'Không gian tên', +'variants' => 'Biến thể', 'errorpagetitle' => 'Lỗi', 'returnto' => 'Quay lại $1.', @@ -507,13 +518,16 @@ Có quá nhiều thành viên đang cố gắng xem trang này. Xin hãy đợi một lát rồi thử truy cập lại vào trang. $1', +'pool-timeout' => 'Hết thời gian chờ đợi khóa', +'pool-queuefull' => 'Đầy hàng đợi khối ứng dụng (pool queue)', +'pool-errorunknown' => 'Lỗi lạ', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Giới thiệu {{SITENAME}}', 'aboutpage' => 'Project:Giới thiệu', 'copyright' => 'Bản quyền $1.', 'copyrightpage' => '{{ns:project}}:Bản quyền', -'currentevents' => 'Thời sự', +'currentevents' => 'Tin tức', 'currentevents-url' => 'Project:Thời sự', 'disclaimers' => 'Phủ nhận', 'disclaimerpage' => 'Project:Phủ nhận chung', @@ -555,12 +569,12 @@ $1', 'viewdeleted' => 'Xem $1?', 'restorelink' => '{{PLURAL:$1|một|$1}} sửa đổi đã xóa', 'feedlinks' => 'Nạp:', -'feed-invalid' => 'Định dạng feed không hợp lệ.', -'feed-unavailable' => 'Website không cung cấp bản tin', -'site-rss-feed' => '$1 mục RSS', -'site-atom-feed' => '$1 mục Atom', -'page-rss-feed' => 'Mục RSS của “$1”', -'page-atom-feed' => 'Mục Atom của “$1”', +'feed-invalid' => 'Định dạng nguồn tin (feed) không hợp lệ.', +'feed-unavailable' => 'Nguồn tin (feed) không có sẵn tại đây', +'site-rss-feed' => 'Nguồn tin RSS của $1', +'site-atom-feed' => 'Nguồn tin Atom của $1', +'page-rss-feed' => 'Nguồn tin RSS của “$1”', +'page-atom-feed' => 'Nguồn tin Atom của “$1”', 'red-link-title' => '$1 (trang chưa được viết)', # Short words for each namespace, by default used in the namespace tab in monobook @@ -668,7 +682,8 @@ Tài khoản của bạn đã mở. 'yourname' => 'Tên người dùng:', 'yourpassword' => 'Mật khẩu:', 'yourpasswordagain' => 'Gõ lại mật khẩu', -'remembermypassword' => 'Nhớ thông tin đăng nhập của tôi trên máy tính này', +'remembermypassword' => 'Nhớ thông tin đăng nhập của tôi trên máy tính này (cho đến $1 ngày)', +'securelogin-stick-https' => 'Giữ kết nối với HTTPS sau khi đăng nhập', 'yourdomainname' => 'Tên miền của bạn:', 'externaldberror' => 'Có lỗi khi xác nhận cơ sở dữ liệu bên ngoài hoặc bạn không được phép cập nhật tài khoản bên ngoài.', 'login' => 'Đăng nhập', @@ -685,6 +700,7 @@ Tài khoản của bạn đã mở. 'gotaccount' => "Đã mở tài khoản rồi? '''$1'''.", 'gotaccountlink' => 'Đăng nhập', 'createaccountmail' => 'qua thư điện tử', +'createaccountreason' => 'Lý do:', 'badretype' => 'Hai mật khẩu không khớp.', 'userexists' => 'Tên người dùng này đã có người lấy. Hãy chọn một tên khác.', @@ -705,6 +721,7 @@ Hãy kiểm tra lại chính tả, hoặc [[Special:UserLogin/signup|mở tài k 'wrongpasswordempty' => 'Bạn chưa gõ vào mật khẩu. Xin thử lần nữa.', 'passwordtooshort' => 'Mật khẩu phải có ít nhất {{PLURAL:$1|1 ký tự|$1 ký tự}}.', 'password-name-match' => 'Mật khẩu của bạn phải khác với tên người dùng của bạn.', +'password-login-forbidden' => 'Tên đăng nhập và mật khẩu này đã bị cấm không được sử dụng.', 'mailmypassword' => 'Gửi mật khẩu mới qua thư điện tử', 'passwordremindertitle' => 'Mật khẩu tạm thời cho {{SITENAME}}', 'passwordremindertext' => 'Ai đó (có thể là bạn, có địa chỉ IP $1) đã yêu cầu chúng tôi gửi mật khẩu mới của {{SITENAME}} ($4). Chúng tôi đã tạo một mật khẩu tạm “$3” cho thành viên “$2”. Nếu bạn chính là người đã yêu cầu mật khẩu, bạn cần phải đăng nhập và thay đổi mật khẩu ngay bây giờ. Mật khẩu tạm sẽ hết hạn trong vòng {{PLURAL:$5|một ngày|$5 ngày}}. @@ -736,6 +753,9 @@ Xin hãy đợi chốc lát rồi thử lại.', 'loginlanguagelabel' => 'Ngôn ngữ: $1', 'suspicious-userlogout' => 'Đã bỏ qua yêu cầu đăng xuất bạn, hình như được gửi từ trình duyệt hoặc máy proxy nhớ đệm hư.', +# E-mail sending +'php-mail-error-unknown' => 'Lỗi không rõ trong hàm PHP mail()', + # Password reset dialog 'resetpass' => 'Đổi mật khẩu', 'resetpass_announce' => 'Bạn đã đăng nhập bằng mật khẩu tạm gởi qua e-mail. Để hoàn tất việc đăng nhập, bạn phải tạo lại mật khẩu mới tại đây:', @@ -787,9 +807,11 @@ Có thể bạn đã thay đổi thành công mật khẩu của mình hoặc đ 'showlivepreview' => 'Xem thử nhanh', 'showdiff' => 'Xem thay đổi', 'anoneditwarning' => "'''Cảnh báo:''' Bạn chưa đăng nhập. Địa chỉ IP của bạn sẽ được ghi lại trong lịch sử sửa đổi của trang.", +'anonpreviewwarning' => "''Bạn chưa đăng nhập. Khi lưu trang này, địa chỉ IP của bạn sẽ được ghi vào lịch sử trang.''", 'missingsummary' => "'''Nhắc nhở:''' Bạn đã không ghi lại tóm lược sửa đổi. Nếu bạn nhấn Lưu trang một lần nữa, sửa đổi của bạn sẽ được lưu mà không có tóm lược.", 'missingcommenttext' => 'Xin hãy gõ vào lời bàn luận ở dưới.', -'missingcommentheader' => "'''Nhắc nhở:''' Bạn chưa cung cấp đề mục cho bàn luận này. Nếu bạn nhấn nút Lưu trang lần nữa, sửa đổi của bạn sẽ được lưu mà không có đề mục.", +'missingcommentheader' => "'''Nhắc nhở:''' Bạn chưa ghi chủ đề/tiêu đề cho bàn luận này. +Nếu bạn nhấn nút \"{{int:savearticle}}\" lần nữa, sửa đổi của bạn sẽ được lưu mà không có đề mục.", 'summary-preview' => 'Xem trước dòng tóm lược:', 'subject-preview' => 'Xem trước đề mục:', 'blockedtitle' => 'Thành viên bị cấm', @@ -859,6 +881,10 @@ hoặc [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE 'usercsspreview' => "'''Hãy nhớ rằng bạn chỉ đang xem thử trang CSS cá nhân của bạn. Nó chưa được lưu!'''", 'userjspreview' => "'''Nhớ rằng bạn chỉ đang kiểm thử/xem thử trang JavaScript, nó chưa được lưu!'''", +'sitecsspreview' => "'''Nhớ rằng bạn chỉ đang xem thử bản CSS này.''' +'''Nó chưa được lưu!'''", +'sitejspreview' => "'''Nhớ rằng bạn chỉ đang kiểm thử/xem thử bản JavaScript này. +'''Nó chưa được lưu!'''", 'userinvalidcssjstitle' => "'''Cảnh báo:''' Không có skin “$1”. Hãy nhớ rằng các trang .css và .js tùy chỉnh sử dụng tiêu đề chữ thường, như {{ns:user}}:Ví dụ/vector.css chứ không phải {{ns:user}}:Ví dụ/Vector.css.", 'updated' => '(Cập nhật)', 'note' => "'''Ghi chú:'''", @@ -896,7 +922,6 @@ Bạn phải đảm bảo với chúng tôi rằng chính bạn là người vi 'copyrightwarning2' => "Xin chú ý rằng tất cả các đóng góp của bạn tại {{SITENAME}} có thể được sửa đổi, thay thế, hoặc xóa bỏ bởi các thành viên khác. Nếu bạn không muốn trang của bạn bị sửa đổi không thương tiếc, đừng đăng trang ở đây.
    Bạn phải đảm bảo với chúng tôi rằng chính bạn là người viết nên, hoặc chép nó từ một nguồn thuộc phạm vi công cộng hoặc tự do tương đương (xem $1 để biết thêm chi tiết). '''ĐỪNG ĐĂNG TÁC PHẨM CÓ BẢN QUYỀN MÀ CHƯA XIN PHÉP!'''", -'longpagewarning' => "'''CẢNH BÁO: Trang này dài $1 kilobyte; một số trình duyệt không tải được trang dài hơn 32 kb. Bạn nên chia nhỏ trang này thành nhiều trang.'''", 'longpageerror' => "'''LỖI: Văn bạn mà bạn muốn lưu dài $1 kilobyte, dài hơn độ dài tối đa cho phép $2 kilobyte. Không thể lưu trang.'''", 'readonlywarning' => "'''CẢNH BÁO: Cơ sở dữ liệu đã bị khóa để bảo dưỡng, do đó bạn không thể lưu các sửa đổi của mình. Bạn nên cắt-dán đoạn bạn vừa sửa vào một tập tin và lưu nó lại để sửa đổi sau này.''' @@ -1073,6 +1098,8 @@ $1", 'logdelete-failure' => "'''Không thể thiết lập khả năng hiện thị của nhật trình:''' $1", 'revdel-restore' => 'Thay đổi mức khả kiến', +'revdel-restore-deleted' => 'các phiên bản xóa', +'revdel-restore-visible' => 'các phiên bản được hiện', 'pagehist' => 'Lịch sử trang', 'deletedhist' => 'Lịch sử đã xóa', 'revdelete-content' => 'nội dung', @@ -1140,11 +1167,13 @@ Xin hãy bảo đảm giữ vững tính liên tục của lịch sử trang.', # Diffs 'history-title' => 'Lịch sử sửa đổi của “$1”', 'difference' => '(Khác biệt giữa các bản)', +'difference-multipage' => '(Khác biệt giữa các trang)', 'lineno' => 'Dòng $1:', 'compareselectedversions' => 'So sánh các bản đã chọn', 'showhideselectedversions' => 'Hiện/ẩn các phiên bản được chọn', 'editundo' => 'lùi sửa', -'diff-multi' => '(Không hiển thị {{PLURAL:$1|một|$1}} phiên bản ở giữa)', +'diff-multi' => '(Không hiển thị {{PLURAL:$1||$1}} phiên bản {{PLURAL:$2||của $2 thành viên}} ở giữa)', +'diff-multi-manyusers' => '(Không hiển thị {{PLURAL:$1||$1}} phiên bản của hơn $2 thành viên ở giữa)', # Search results 'searchresults' => 'Kết quả tìm kiếm', @@ -1179,6 +1208,7 @@ Xin hãy bảo đảm giữ vững tính liên tục của lịch sử trang.', 'searchprofile-everything-tooltip' => 'Tìm tất cả nội dung (gồm cả các trang thảo luận)', 'searchprofile-advanced-tooltip' => 'Tìm trong không gian tên tùy chọn', 'search-result-size' => '$1 ({{PLURAL:$2|1 từ|$2 từ}})', +'search-result-category-size' => '{{PLURAL:$1|1 trang thành viên|$1 trang thành viên}} ({{PLURAL:$2|1 tiểu thể loại|$2 tiểu thể loại}}, {{PLURAL:$3|1 tập tin|$3 tập tin}})', 'search-result-score' => 'Độ phù hợp: $1%', 'search-redirect' => '(đổi hướng $1)', 'search-section' => '(đề mục $1)', @@ -1253,6 +1283,7 @@ Xin hãy bảo đảm giữ vững tính liên tục của lịch sử trang.', 'contextlines' => 'Số hàng trong trang dùng để tìm ra kết quả:', 'contextchars' => 'Số chữ trong một hàng kết quả:', 'stub-threshold' => 'Định dạng liên kết đến sơ khai cho các trang ngắn hơn (byte):', +'stub-threshold-disabled' => 'Tắt', 'recentchangesdays' => 'Số ngày hiển thị trong thay đổi gần đây:', 'recentchangesdays-max' => '(tối đa $1 {{PLURAL:$1|ngày|ngày}})', 'recentchangescount' => 'Số sửa đổi hiển thị mặc định:', @@ -1286,6 +1317,7 @@ Bất cứ ai biết được khóa trong ô này cũng có thể đọc đượ 'prefs-files' => 'Tập tin', 'prefs-custom-css' => 'sửa CSS', 'prefs-custom-js' => 'sửa JS', +'prefs-common-css-js' => 'CSS/JS chung cho mọi hình dạng:', 'prefs-reset-intro' => 'Có thể mặc định lại toàn bộ tùy chọn dùng trang này. Không có thể lùi lại tác động này.', 'prefs-emailconfirm-label' => 'Xác nhận thư điện tử:', @@ -1325,9 +1357,15 @@ Bạn cũng có thể lựa chọn cho phép người khác liên lạc với b 'prefs-advancedrendering' => 'Tùy chọn nâng cao', 'prefs-advancedsearchoptions' => 'Tùy chọn nâng cao', 'prefs-advancedwatchlist' => 'Tùy chọn nâng cao', -'prefs-display' => 'Tùy chọn hiển thị', +'prefs-displayrc' => 'Tùy chọn hiển thị', +'prefs-displaysearchoptions' => 'Tùy chọn hiển thị', +'prefs-displaywatchlist' => 'Tùy chọn hiển thị', 'prefs-diffs' => 'Khác biệt', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'Có vẻ hợp lệ', +'email-address-validity-invalid' => 'Yêu cầu địa chỉ hợp lệ!', + # User rights 'userrights' => 'Quản lý quyền thành viên', 'userrights-lookup-user' => 'Quản lý nhóm thành viên', @@ -1411,6 +1449,7 @@ Bạn cũng có thể lựa chọn cho phép người khác liên lạc với b 'right-hideuser' => 'Cấm thành viên, rồi ẩn nó đi', 'right-ipblock-exempt' => 'Bỏ qua cấm IP, tự động cấm và cấm dải IP', 'right-proxyunbannable' => 'Bỏ qua cấm proxy tự động', +'right-unblockself' => 'Tự bỏ cấm', 'right-protect' => 'Thay đổi mức khóa và sửa trang khóa', 'right-editprotected' => 'Sửa trang khóa (không bị khóa theo tầng)', 'right-editinterface' => 'Sửa giao diện người dùng', @@ -1433,7 +1472,6 @@ Bạn cũng có thể lựa chọn cho phép người khác liên lạc với b 'right-siteadmin' => 'Khóa và mở khóa cơ sở dữ liệu', 'right-reset-passwords' => 'Tái tạo mật khẩu của thành viên khác', 'right-override-export-depth' => 'Xuất trang kèm theo các trang được liên kết đến với độ sâu tối đa là 5', -'right-versiondetail' => 'Hiện thông tin phiên bản phần mềm mở rộng', 'right-sendemail' => 'Gửi thư điện tử cho thành viên khác', # User rights log @@ -1483,15 +1521,10 @@ Bạn cũng có thể lựa chọn cho phép người khác liên lạc với b 'recentchanges' => 'Thay đổi gần đây', 'recentchanges-legend' => 'Tùy chọn thay đổi gần đây', 'recentchangestext' => 'Xem các thay đổi gần đây nhất tại wiki trên trang này.', -'recentchanges-feed-description' => 'Theo dõi các thay đổi gần đây nhất của wiki dùng feed này.', -'recentchanges-label-legend' => 'Giải thích: $1.', -'recentchanges-legend-newpage' => '$1 - trang mới', +'recentchanges-feed-description' => 'Theo dõi các thay đổi gần đây nhất của wiki dùng nguồn tin này.', 'recentchanges-label-newpage' => 'Bản sửa này tạo ra trang mới', -'recentchanges-legend-minor' => '$1 - sửa đổi nhỏ', 'recentchanges-label-minor' => 'Đây là một sửa đổi nhỏ', -'recentchanges-legend-bot' => '$1 - sửa đổi bot', 'recentchanges-label-bot' => 'Sửa đổi này do bot thực hiện', -'recentchanges-legend-unpatrolled' => '$1 - sửa đổi chưa tuần tra', 'recentchanges-label-unpatrolled' => 'Sửa đổi này chưa được tuần tra', 'rcnote' => "Dưới đây là {{PLURAL:$1|'''1''' thay đổi|'''$1''' thay đổi gần nhất}} trong {{PLURAL:$2|ngày qua|'''$2''' ngày qua}}, tính tới $5, $4.", 'rcnotefrom' => "Thay đổi từ '''$2''' (hiển thị tối đa '''$1''' thay đổi).", @@ -1538,6 +1571,9 @@ Các trang trong [[Special:Watchlist|danh sách bạn theo dõi]] được '''t 'upload_directory_missing' => 'Thư mục tải lên ($1) không có hoặc máy chủ web không thể tạo được.', 'upload_directory_read_only' => 'Máy chủ không thể sửa đổi thư mục tải lên ($1) được.', 'uploaderror' => 'Lỗi khi tải lên', +'upload-recreate-warning' => "'''Cảnh báo: Một tập tin với tên này đã từng bị xóa hoặc di chuyển.''' + +Nhật trình xóa và di chuyển của trang này được ghi ở dưới để bạn tiện theo dõi:", 'uploadtext' => "Hãy sử dụng mẫu sau để tải tập tin lên. Để xem hoặc tìm kiếm những hình ảnh đã được tải lên trước đây, xin mời xem [[Special:FileList|danh sách các tập tin đã tải lên]]. việc tải lên và tải lên lại được ghi lại trong [[Special:Log/upload|nhật trình tải lên]], việc xóa đi được ghi trong [[Special:Log/delete|nhật trình xóa]]. @@ -1566,13 +1602,24 @@ Xem [[Special:NewFiles|trang trưng bày các tập tin mới]] để xem trực 'illegalfilename' => 'Tên tập tin “$1” có chứa ký tự không được phép dùng cho tựa trang. Xin hãy đổi tên và tải lên lại.', 'badfilename' => 'Tên tập tin đã được đổi thành “$1”.', 'filetype-mime-mismatch' => 'Phần mở rộng của tập tin không phù hợp kiểu MIME.', -'filetype-badmime' => 'Không thể tải lên các tập tin có định dạng MIME “$1”.', +'filetype-badmime' => 'Không thể tải lên các tập tin có kiểu MIME “$1”.', 'filetype-bad-ie-mime' => 'Không thể tải tập tin này lên vì Internet Explorer sẽ nhận diện tập tin này là “$1”, một định dạng tập tin tiềm ẩn nguy hiểm và không được cho phép.', 'filetype-unwanted-type' => "'''“.$1”''' là định dạng tập tin không được trông đợi. {{PLURAL:$3|Loại|Những loại}} tập tin thích hợp hơn là $2.", 'filetype-banned-type' => "'''“.$1”''' là định dạng tập tin không được chấp nhận. {{PLURAL:$3|Loại tập tin|Những loại tập tin}} được chấp nhận là $2.", 'filetype-missing' => 'Tập tin không có phần mở rộng (ví dụ “.jpg”).', +'empty-file' => 'Bạn đã gửi tập tin rỗng.', +'file-too-large' => 'Bạn đã gửi tập tin lớn quá hạn.', +'filename-tooshort' => 'Tên tập tin ngắn quá.', +'filetype-banned' => 'Kiểu tập tin này đã bị cấm.', +'verification-error' => 'Tập tin này không qua được bước thẩm tra.', +'hookaborted' => 'Sửa đổi của bạn bị hook phần mở rộng hủy bỏ.', +'illegal-filename' => 'Không được đặt tên tập tin này.', +'overwrite' => 'Không được ghi đè một tập tin đã tồn tại.', +'unknown-error' => 'Gặp lỗi không ngờ.', +'tmp-create-error' => 'Không thể tạo tập tin tạm thời.', +'tmp-write-error' => 'Gặp lỗi khi ghi vào tập tin tạm thời.', 'large-file' => 'Các tập tin được khuyến cáo không được lớn hơn $1; tập tin này lớn đến $2.', 'largefileserver' => 'Tập tin này quá lớn so với khả năng phục vụ của máy chủ.', 'emptyfile' => 'Tập tin bạn vừa mới tải lên có vẻ trống không. Điều này có thể xảy ra khi bạn đánh sai tên tập tin. Xin hãy chắc chắn rằng bạn thật sự muốn tải lên tập tin này.', @@ -1598,13 +1645,14 @@ Nếu bạn vẫn muốn tải tập tin của bạn lên, xin hãy quay lại v Nếu bạn vẫn muốn tải tập tin của bạn lên, xin hãy quay lại và dùng một tên khác. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Tập tin này có vẻ là bản sao của {{PLURAL:$1|tập tin|các tập tin}} sau:', 'file-deleted-duplicate' => 'Một tập tin giống hệt như tập tin này ([[:$1]]) đã từng bị xóa trước đây. Bạn nên xem lại lịch sử xóa tập tin trước khi tiếp tục tải nó lên lại.', -'successfulupload' => 'Đã tải xong', 'uploadwarning' => 'Cảnh báo!', 'uploadwarning-text' => 'Xin hãy chỉnh sửa miêu tả tập tin ở dưới và thử lại.', 'savefile' => 'Lưu tập tin', 'uploadedimage' => 'đã tải “[[$1]]” lên', 'overwroteimage' => 'đã tải lên một phiên bản mới của “[[$1]]”', 'uploaddisabled' => 'Chức năng tải lên đã bị khóa.', +'copyuploaddisabled' => 'Chức năng tải lên từ địa chỉ URL đã bị tắt.', +'uploadfromurl-queued' => 'Tập tin của bạn đã được xếp vào hàng đợi tải lên.', 'uploaddisabledtext' => 'Chức năng tải tập tin đã bị tắt.', 'php-uploaddisabledtext' => 'Việc tải tập tin trong PHP đã bị tắt. Xin hãy kiểm tra lại thiết lập file_uploads.', 'uploadscripted' => 'Tập tin này có chứa mã HTML hoặc script có thể khiến trình duyệt web thông dịch sai.', @@ -1636,6 +1684,14 @@ JD # Jenoptik MGP # Pentax PICT # khác # ', +'upload-success-subj' => 'Đã tải xong', +'upload-success-msg' => 'Bạn đã tải lên tập tin thành công từ [$2]. Nó có sẵn tại [[:{{ns:file}}:$1]].', +'upload-failure-subj' => 'Vấn đề tải lên', +'upload-failure-msg' => 'Tập tin bạn tải lên từ [$2] có một vấn đề: + +$1', +'upload-warning-subj' => 'Cảnh báo tải lên', +'upload-warning-msg' => 'Tập tin tải lên từ [$2] đã gặp vấn đề. Xin hãy trở về [[Special:Upload/stash/$1|biểu mẫu tải lên]] để giải quyết vấn đề này.', 'upload-proto-error' => 'Giao thức sai', 'upload-proto-error-text' => 'Phải đưa vào URL bắt đầu với http:// hay ftp:// để tải lên tập tin từ trang web khác.', @@ -1699,6 +1755,7 @@ Hãy nhấn chuột vào tiêu đề cột để thay đổi thứ tự sắp x 'listfiles_search_for' => 'Tìm kiếm theo tên tập tin:', 'imgfile' => 'tập tin', 'listfiles' => 'Danh sách tập tin', +'listfiles_thumb' => 'Hình nhỏ', 'listfiles_date' => 'Ngày tải', 'listfiles_name' => 'Tên', 'listfiles_user' => 'Thành viên tải', @@ -1742,6 +1799,7 @@ Lời miêu tả tại [$2 trang mô tả tập tin] tại đấy được hiể 'uploadnewversion-linktext' => 'Tải lên phiên bản mới', 'shared-repo-from' => 'tại $1', 'shared-repo' => 'kho lưu trữ dùng chung', +'filepage.css' => '/* Mã CSS tại đây sẽ ảnh hướng đến trang miêu tả tập tin, cũng như các wiki khách bên ngoài dựa trên wiki này */', # File reversion 'filerevert' => 'Lùi lại phiên bản của $1', @@ -1774,8 +1832,8 @@ Lời miêu tả tại [$2 trang mô tả tập tin] tại đấy được hiể # MIME search 'mimesearch' => 'Tìm kiếm theo định dạng', -'mimesearch-summary' => 'Trang này có khả năng lọc tập tin theo định dạng MIME. Đầu vào: contenttype/subtype, v.d. image/jpeg.', -'mimetype' => 'Định dạng MIME:', +'mimesearch-summary' => 'Trang này có khả năng lọc tập tin theo kiểu MIME. Đầu vào: kiểu-nội-dung/kiểu-phụ, v.d. image/jpeg.', +'mimetype' => 'Kiểu MIME:', 'download' => 'tải về', # Unwatched pages @@ -1813,8 +1871,8 @@ Hãy nhớ kiểm tra các liên kết khác đến bản mẫu trước khi xó 'statistics-edits' => 'Số sửa đổi trang từ khi {{SITENAME}} được thành lập', 'statistics-edits-average' => 'Số sửa đổi trung bình trên một trang', 'statistics-views-total' => 'Số lần xem tổng cộng', +'statistics-views-total-desc' => 'Không bao gồm số lần xem các trang không tồn tại và các trang đặc biệt', 'statistics-views-peredit' => 'Số lần xem trên một sửa đổi', -'statistics-jobqueue' => 'Chiều dài [http://www.mediawiki.org/wiki/Manual:Job_queue hàng đợi việc]', 'statistics-users' => 'Số [[Special:ListUsers|thành viên]] đã đăng ký', 'statistics-users-active' => 'Số thành viên tích cực', 'statistics-users-active-desc' => 'Những thành viên đã hoạt động trong {{PLURAL:$1|ngày|$1 ngày}} qua', @@ -1827,7 +1885,7 @@ Hãy nhớ kiểm tra các liên kết khác đến bản mẫu trước khi xó 'doubleredirects' => 'Đổi hướng kép', 'doubleredirectstext' => 'Trang này liệt kê các trang đổi hướng đến một trang đổi hướng khác. Mỗi hàng có chứa các liên kết đến trang đổi hướng thứ nhất và thứ hai, cũng như mục tiêu của trang đổi hướng thứ hai, thường là trang đích “thực sự”, là nơi mà trang đổi hướng đầu tiên nên trỏ đến. -Các mục bị gạch bỏ là các trang đã được sửa.', +Các mục bị gạch bỏ là các trang đã được sửa.', 'double-redirect-fixed-move' => '[[$1]] đã được đổi tên, giờ nó là trang đổi hướng đến [[$2]]', 'double-redirect-fixer' => 'Người sửa trang đổi hướng', @@ -1850,6 +1908,8 @@ Các mục bị gạch bỏ là các trang đã được sửa.', 'nmembers' => '$1 {{PLURAL:$1|trang|trang}}', 'nrevisions' => '$1 {{PLURAL:$1|phiên bản|phiên bản}}', 'nviews' => '$1 {{PLURAL:$1|lượt truy cập|lượt truy cập}}', +'nimagelinks' => 'Được sử dụng trong $1 trang', +'ntransclusions' => 'được sử dụng trong $1 trang', 'specialpage-empty' => 'Trang này đang trống.', 'lonelypages' => 'Trang mồ côi', 'lonelypagestext' => 'Chưa có trang nào liên kết đến hoặc nhúng vào các trang này tại {{SITENAME}}.', @@ -1923,7 +1983,7 @@ Bạn có thể thu hẹp kết quả bằng cách chọn loại nhật trình, 'log-title-wildcard' => 'Tìm các tựa trang bắt đầu bằng các chữ này', # Special:AllPages -'allpages' => 'Tất cả các trang', +'allpages' => 'Mọi trang', 'alphaindexline' => '$1 đến $2', 'nextpage' => 'Trang sau ($1)', 'prevpage' => 'Trang trước ($1)', @@ -2005,34 +2065,40 @@ Có [[{{MediaWiki:Listgrouprights-helppage}}|thông tin thêm]] về từng nhó 'listgrouprights-removegroup-self-all' => 'Có thể loại tài khoản của chính mình ra khỏi tất cả các nhóm', # E-mail user -'mailnologin' => 'Không có địa chỉ gửi thư', -'mailnologintext' => 'Bạn phải [[Special:UserLogin|đăng nhập]] và khai báo một địa chỉ thư điện tử hợp lệ trong phần [[Special:Preferences|tùy chọn cá nhân]] thì mới gửi được thư cho người khác.', -'emailuser' => 'Gửi thư cho người này', -'emailpage' => 'Gửi thư', -'emailpagetext' => 'Mẫu dưới đây sẽ gửi một bức thư điện tử tới người dùng này. +'mailnologin' => 'Không có địa chỉ gửi thư', +'mailnologintext' => 'Bạn phải [[Special:UserLogin|đăng nhập]] và khai báo một địa chỉ thư điện tử hợp lệ trong phần [[Special:Preferences|tùy chọn cá nhân]] thì mới gửi được thư cho người khác.', +'emailuser' => 'Gửi thư cho người này', +'emailpage' => 'Gửi thư', +'emailpagetext' => 'Mẫu dưới đây sẽ gửi một bức thư điện tử tới người dùng này. Địa chỉ thư điện tử mà bạn đã cung cấp trong [[Special:Preferences|tùy chọn cá nhân của mình]] sẽ xuất hiện trong phần địa chỉ “Người gửi” của bức thư, do đó người nhận sẽ có thể trả lời trực tiếp cho bạn.', -'usermailererror' => 'Lỗi gửi thư:', -'defemailsubject' => 'thư gửi từ {{SITENAME}}', -'noemailtitle' => 'Không có địa chỉ nhận thư', -'noemailtext' => 'Người này không cung cấp một địa chỉ thư hợp lệ.', -'nowikiemailtitle' => 'Không cho phép thư điện tử', -'nowikiemailtext' => 'Thành viên này quyết định không nhận thư từ các thành viên khác.', -'email-legend' => 'Gửi thư điện tử đến thành viên {{SITENAME}} khác', -'emailfrom' => 'Người gửi:', -'emailto' => 'Người nhận:', -'emailsubject' => 'Chủ đề:', -'emailmessage' => 'Nội dung:', -'emailsend' => 'Gửi', -'emailccme' => 'Gửi cho tôi bản sao của thư này.', -'emailccsubject' => 'Bản sao của thư gửi cho $1: $2', -'emailsent' => 'Đã gửi', -'emailsenttext' => 'Thư của bạn đã được gửi.', -'emailuserfooter' => 'Thư điện tử này được $1 gửi đến $2 thông qua chức năng “Gửi thư cho người này” của {{SITENAME}}.', +'usermailererror' => 'Lỗi gửi thư:', +'defemailsubject' => 'thư gửi từ {{SITENAME}}', +'usermaildisabled' => 'Chức năng gửi thư cho người dùng đã bị tắt.', +'usermaildisabledtext' => 'Bạn không thể gửi thư điện tử cho những người dùng khác trên wiki này.', +'noemailtitle' => 'Không có địa chỉ nhận thư', +'noemailtext' => 'Người này không cung cấp một địa chỉ thư hợp lệ.', +'nowikiemailtitle' => 'Không cho phép thư điện tử', +'nowikiemailtext' => 'Thành viên này quyết định không nhận thư từ các thành viên khác.', +'email-legend' => 'Gửi thư điện tử đến thành viên {{SITENAME}} khác', +'emailfrom' => 'Người gửi:', +'emailto' => 'Người nhận:', +'emailsubject' => 'Chủ đề:', +'emailmessage' => 'Nội dung:', +'emailsend' => 'Gửi', +'emailccme' => 'Gửi cho tôi bản sao của thư này.', +'emailccsubject' => 'Bản sao của thư gửi cho $1: $2', +'emailsent' => 'Đã gửi', +'emailsenttext' => 'Thư của bạn đã được gửi.', +'emailuserfooter' => 'Thư điện tử này được $1 gửi đến $2 thông qua chức năng “Gửi thư cho người này” của {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'Đang để lại thông báo hệ thống.', +'usermessage-editor' => 'Trình thông báo hệ thống', # Watchlist 'watchlist' => 'Trang tôi theo dõi', 'mywatchlist' => 'Trang tôi theo dõi', -'watchlistfor' => "(của '''$1''')", +'watchlistfor2' => 'Của $1 $2', 'nowatchlist' => 'Danh sách theo dõi của bạn không có gì.', 'watchlistanontext' => 'Xin hãy $1 để xem hay sửa đổi các trang được theo dõi.', 'watchnologin' => 'Chưa đăng nhập', @@ -2094,10 +2160,13 @@ Bạn cũng có thể thiết lập lại việc nhắc nhở cho tất cả cá Hệ thống báo tin {{SITENAME}} thân thiện của bạn -- -Để thay đổi các thiết lập danh sách theo dõi, mời xem +Để thay đổi các thiết lập thư điện tử thông báo, mời xem: +{{fullurl:{{#special:Preferences}}}} + +Để thay đổi các thiết lập danh sách theo dõi, mời xem: {{fullurl:{{#special:Watchlist}}/edit}} -Để xóa trang ra khỏi danh sách theo dõi của bạn, mời xem +Để xóa trang ra khỏi danh sách theo dõi của bạn, mời xem: $UNWATCHURL Phản hồi và cần sự hỗ trợ: @@ -2153,7 +2222,10 @@ Sửa đổi cuối cùng tại trang do [[User:$3|$3]] ([[User talk:$3|thảo l 'revertpage-nouser' => 'Lùi sửa đổi của (tên người dùng đã xóa) quay lại phiên bản cuối của [[User:$1|$1]]', 'rollback-success' => 'Đã hủy sửa đổi của $1; quay về phiên bản cuối của $2.', -'sessionfailure' => 'Dường như có trục trặc với phiên đăng nhập của bạn; thao tác này đã bị hủy để tránh việc cướp quyền đăng nhập. Xin hãy nhấn nút “Back”, tải lại trang đó, rồi thử lại.', + +# Edit tokens +'sessionfailure-title' => 'Phiên thất bại', +'sessionfailure' => 'Dường như có trục trặc với phiên đăng nhập của bạn; thao tác này đã bị hủy để tránh việc cướp quyền đăng nhập. Xin hãy nhấn nút “Back”, tải lại trang đó, rồi thử lại.', # Protect 'protectlogpage' => 'Nhật trình khóa', @@ -2283,18 +2355,21 @@ $1', 'month' => 'Từ tháng (trở về trước):', 'year' => 'Từ năm (trở về trước):', -'sp-contributions-newbies' => 'Chỉ hiển thị đóng góp của tài khoản mới', -'sp-contributions-newbies-sub' => 'Các thành viên mới', -'sp-contributions-newbies-title' => 'Đóng góp của các thành viên mới', -'sp-contributions-blocklog' => 'Nhật trình cấm', -'sp-contributions-deleted' => 'đóng góp đã bị xóa của thành viên', -'sp-contributions-logs' => 'nhật trình', -'sp-contributions-talk' => 'thảo luận', -'sp-contributions-userrights' => 'quản lý quyền thành viên', -'sp-contributions-blocked-notice' => 'Thành viên này hiện đang bị cấm sửa đổi. Nhật trình cấm gần nhất được ghi ở dưới để tiện theo dõi:', -'sp-contributions-search' => 'Tìm kiếm đóng góp', -'sp-contributions-username' => 'Địa chỉ IP hay tên thành viên:', -'sp-contributions-submit' => 'Tìm kiếm', +'sp-contributions-newbies' => 'Chỉ hiển thị đóng góp của tài khoản mới', +'sp-contributions-newbies-sub' => 'Các thành viên mới', +'sp-contributions-newbies-title' => 'Đóng góp của các thành viên mới', +'sp-contributions-blocklog' => 'Nhật trình cấm', +'sp-contributions-deleted' => 'đóng góp đã bị xóa của thành viên', +'sp-contributions-uploads' => 'tập tin tải lên', +'sp-contributions-logs' => 'nhật trình', +'sp-contributions-talk' => 'thảo luận', +'sp-contributions-userrights' => 'quản lý quyền thành viên', +'sp-contributions-blocked-notice' => 'Thành viên này hiện đang bị cấm sửa đổi. Nhật trình cấm gần nhất được ghi ở dưới để tiện theo dõi:', +'sp-contributions-blocked-notice-anon' => 'Địa chỉ IP này đang bị cấm. Hãy tham khảo mục mới nhất trong nhật trình cấm IP này:', +'sp-contributions-search' => 'Tìm kiếm đóng góp', +'sp-contributions-username' => 'Địa chỉ IP hay tên thành viên:', +'sp-contributions-toponly' => 'Chỉ hiện các phiên bản gần đây', +'sp-contributions-submit' => 'Tìm kiếm', # What links here 'whatlinkshere' => 'Các liên kết đến đây', @@ -2359,7 +2434,6 @@ $1', 'ipb-edit-dropdown' => 'Sửa đổi lý do cấm', 'ipb-unblock-addr' => 'Bỏ cấm $1', 'ipb-unblock' => 'Bỏ cấm thành viên hay địa chỉ IP', -'ipb-blocklist-addr' => 'Tình trạng cấm hiện tại của $1', 'ipb-blocklist' => 'Xem danh sách đang bị cấm', 'ipb-blocklist-contribs' => 'Đóng góp của $1', 'unblockip' => 'Bỏ cấm thành viên', @@ -2426,6 +2500,8 @@ $1 đã bị cấm. Bạn có muốn thay đổi các thiết lập?', 'sorbs_create_account_reason' => 'Địa chỉ chỉ IP của bạn bị liệt kê là một proxy mở trong DNSBL mà {{SITENAME}} đang sử dụng. Bạn không thể mở tài khoản.', 'cant-block-while-blocked' => 'Bạn không thể cấm thành viên khác trong khi bạn đang bị cấm.', 'cant-see-hidden-user' => 'Thành viên bạn muốn cấm đã bị cấm trước đây hoặc đã bị ẩn đi. Vì bạn không có quyền hideuser, bạn không thể xem hoặc thay đổi mức cấm của thành viên.', +'ipbblocked' => 'Bạn không thể cấm hay bỏ cấm người dùng khác vì chính bạn đang bị cấm.', +'ipbnounblockself' => 'Bạn không được bỏ cấm chính mình.', # Developer tools 'lockdb' => 'Khóa cơ sở dữ liệu', @@ -2460,6 +2536,17 @@ Bạn phải chịu trách nhiệm đảm bảo các liên kết đó tiếp t Chú ý rằng trang sẽ '''không''' bị di chuyển nếu đã có một trang tại tên mới, trừ khi nó rỗng hoặc là trang đổi hướng và không có lịch sử sửa đổi trước đây. Điều này có nghĩa là bạn có thể đổi tên trang lại như cũ nếu bạn có nhầm lẫn, và bạn không thể ghi đè lên một trang đã có sẵn. +'''CẢNH BÁO!''' +Việc làm này có thể dẫn đến sự thay đổi mạnh mẽ và không lường trước đối với các trang dễ nhìn thấy; +xin hãy chắc chắn rằng bạn đã nhận thức được những hệ lụy của nó trước khi thực hiện.", +'movepagetext-noredirectfixer' => "Dùng mẫu dưới đây để đổi tên một trang, di chuyển tất cả lịch sử của nó sang tên mới. +Tên cũ sẽ trở thành trang đổi hướng sang tên mới. +Hãy nhớ kiểm tra [[Special:DoubleRedirects|đổi hướng kép]] hoặc [[Special:BrokenRedirects|đổi hướng đến trang không tồn tại]]. +Bạn phải chịu trách nhiệm đảm bảo các liên kết đó tiếp tục trỏ đến nơi chúng cần đến. + +Chú ý rằng trang sẽ '''không''' bị di chuyển nếu đã có một trang tại tên mới, trừ khi nó rỗng hoặc là trang đổi hướng và không có lịch sử sửa đổi trước đây. +Điều này có nghĩa là bạn có thể đổi tên trang lại như cũ nếu bạn có nhầm lẫn, và bạn không thể ghi đè lên một trang đã có sẵn. + '''CẢNH BÁO!''' Việc làm này có thể dẫn đến sự thay đổi mạnh mẽ và không lường trước đối với các trang dễ nhìn thấy; xin hãy chắc chắn rằng bạn đã nhận thức được những hệ lụy của nó trước khi thực hiện.", @@ -2481,7 +2568,7 @@ Trong những trường hợp đó, bạn phải di chuyển hoặc hợp nhất 'movepagebtn' => 'Di chuyển trang', 'pagemovedsub' => 'Di chuyển thành công', 'movepage-moved' => "'''“$1” đã được di chuyển đến “$2”'''", -'movepage-moved-redirect' => 'Đã tạo trang chuyển hướng.', +'movepage-moved-redirect' => 'Đã tạo trang đổi hướng.', 'movepage-moved-noredirect' => 'Chức năng tạo trang chuyển hướng đã bị tắt.', 'articleexists' => 'Đã có một trang với tên đó, hoặc tên bạn chọn không hợp lệ. Xin hãy chọn tên khác.', @@ -2497,7 +2584,7 @@ Xin hãy chọn tên khác.', 'movepage-max-pages' => 'Đã có tối đa $1 {{PLURAL:$1|trang|trang}} đã di chuyển và không tự động di chuyển thêm được nữa.', '1movedto2' => '[[$1]] đổi thành [[$2]]', '1movedto2_redir' => '[[$1]] đổi thành [[$2]] qua đổi hướng', -'move-redirect-suppressed' => 'đã tắt chuyển hướng', +'move-redirect-suppressed' => 'đã tắt đổi hướng', 'movelogpage' => 'Nhật trình di chuyển', 'movelogpagetext' => 'Dưới đây là danh sách các trang đã được di chuyển.', 'movesubpage' => '{{PLURAL:$1|Trang con|Các trang con}}', @@ -2518,6 +2605,7 @@ Trang với tên “[[:$1]]” đã tồn tại. Bạn có muốn xóa nó để 'immobile-source-page' => 'Bạn không thể di chuyển trang này.', 'immobile-target-page' => 'Không thể di chuyển đến tựa đề đích.', 'imagenocrossnamespace' => 'Không thể di chuyển tập tin ra khỏi không gian tên Tập tin', +'nonfile-cannot-move-to-file' => 'Không thể di chuyển những gì không phải là tập tin vào không gian tên Tập tin', 'imagetypemismatch' => 'Phần mở rộng trong tên tập tin mới không hợp dạng của tập tin', 'imageinvalidfilename' => 'Tên tập tin đích không hợp lệ', 'fix-double-redirects' => 'Cập nhật tất cả các trang đổi hướng chỉ đến tựa đề cũ', @@ -2546,7 +2634,7 @@ Trong trường hợp sau bạn cũng có thể dùng một liên kết, ví d 'export-addcattext' => 'Thêm trang từ thể loại:', 'export-addcat' => 'Thêm', 'export-addnstext' => 'Thêm trang từ không gian tên:', -'export-addns' => 'Thêm vào', +'export-addns' => 'Thêm', 'export-download' => 'Lưu xuống tập tin', 'export-templates' => 'Gồm cả bản mẫu', 'export-pagelinks' => 'Gồm cả các trang liên kết sâu đến:', @@ -2598,6 +2686,7 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.', 'importstart' => 'Đang nhập các trang…', 'import-revision-count' => '$1 {{PLURAL:$1|phiên bản|phiên bản}}', 'importnopages' => 'Không có trang để nhập vào.', +'imported-log-entries' => 'Đã nhập {{PLURAL:$1|mục nhật trình|$1 mục nhật trình}}.', 'importfailed' => 'Không nhập được: $1', 'importunknownsource' => 'Không hiểu nguồn trang để nhập vào', 'importcantopen' => 'Không có thể mở tập tin để nhập vào', @@ -2627,7 +2716,7 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.', 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|phiên bản|phiên bản}} từ $2', # Tooltip help for the actions -'tooltip-pt-userpage' => 'Trang thành viên của tôi', +'tooltip-pt-userpage' => 'Trang cá nhân của tôi', 'tooltip-pt-anonuserpage' => 'Trang của IP bạn đang dùng', 'tooltip-pt-mytalk' => 'Thảo luận với tôi', 'tooltip-pt-anontalk' => 'Thảo luận với địa chỉ IP này', @@ -2656,14 +2745,14 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.', 'tooltip-n-mainpage' => 'Đi đến Trang Chính', 'tooltip-n-mainpage-description' => 'Xem trang chính', 'tooltip-n-portal' => 'Giới thiệu dự án, cách sử dụng và tìm kiếm thông tin ở đây', -'tooltip-n-currentevents' => 'Các trang có liên quan đến thời sự', +'tooltip-n-currentevents' => 'Các trang có liên quan đến tin tức', 'tooltip-n-recentchanges' => 'Danh sách các thay đổi gần đây', 'tooltip-n-randompage' => 'Xem trang ngẫu nhiên', 'tooltip-n-help' => 'Nơi tìm hiểu thêm cách dùng.', 'tooltip-t-whatlinkshere' => 'Các trang liên kết đến đây', 'tooltip-t-recentchangeslinked' => 'Thay đổi gần đây của các trang liên kết đến đây', -'tooltip-feed-rss' => 'Nạp RSS cho trang này', -'tooltip-feed-atom' => 'Nạp Atom cho trang này', +'tooltip-feed-rss' => 'Nguồn tin RSS của trang này', +'tooltip-feed-atom' => 'Nguồn tin Atom của trang này', 'tooltip-t-contributions' => 'Xem đóng góp của người này', 'tooltip-t-emailuser' => 'Gửi thư cho người này', 'tooltip-t-upload' => 'Tải hình ảnh hoặc tập tin lên', @@ -2690,6 +2779,8 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.', 'tooltip-upload' => 'Bắt đầu tải lên', 'tooltip-rollback' => '"Lùi tất cả" sẽ lùi mọi sửa đổi của người sửa đổi cuối cùng chỉ bằng một cú nhấp chuột.', 'tooltip-undo' => '"Lùi lại" sẽ lùi sửa đổi này và mở trang sửa đổi ở chế độ xem thử. Cho phép thêm lý do vào tóm lược.', +'tooltip-preferences-save' => 'Lưu tùy chọn', +'tooltip-summary' => 'Hãy nhập câu tóm lược', # Stylesheets 'common.css' => '/* Mã CSS đặt ở đây sẽ áp dụng cho mọi hình dạng */', @@ -2819,14 +2910,17 @@ Nếu thực thi nó máy tính của bạn có thể bị tiếm quyền.", 'imagemaxsize' => "Giới hạn cỡ hình:
    ''(trên trang miêu tả tập tin)''", 'thumbsize' => 'Cỡ hình thu nhỏ:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|trang|trang}}', -'file-info' => '(kích thước tập tin: $1, định dạng MIME: $2)', -'file-info-size' => '($1×$2 điểm ảnh, kích thước: $3, định dạng MIME: $4)', +'file-info' => 'kích thước tập tin: $1, kiểu MIME: $2', +'file-info-size' => '$1 × $2 điểm ảnh, kích thước tập tin: $3, kiểu MIME: $4', 'file-nohires' => 'Không có độ phân giải cao hơn.', -'svg-long-desc' => '(tập tin SVG, $1 × $2 điểm ảnh trên danh nghĩa, kích thước: $3)', +'svg-long-desc' => 'tập tin SVG, $1 × $2 điểm ảnh trên danh nghĩa, kích thước: $3', 'show-big-image' => 'Độ phân giải tối đa', 'show-big-image-thumb' => 'Kích thước xem thử: $1 × $2 điểm ảnh', 'file-info-gif-looped' => 'có lặp', 'file-info-gif-frames' => '$1 {{PLURAL:$1|khung ảnh|khung ảnh}}', +'file-info-png-looped' => 'có lặp', +'file-info-png-repeat' => 'chơi $1 lần', +'file-info-png-frames' => '$1 khung ảnh', # Special:NewFiles 'newimages' => 'Trang trưng bày hình ảnh mới', @@ -3021,6 +3115,7 @@ Những thông tin khác mặc định sẽ được ẩn đi. 'exif-gpsareainformation' => 'Tên khu vực theo GPS', 'exif-gpsdatestamp' => 'Ngày theo GPS', 'exif-gpsdifferential' => 'Sửa vi sai GPS', +'exif-objectname' => 'Tên ngắn', # EXIF attributes 'exif-compression-1' => 'Không nén', @@ -3183,30 +3278,30 @@ Những thông tin khác mặc định sẽ được ẩn đi. 'limitall' => 'tất cả', # E-mail address confirmation -'confirmemail' => 'Xác nhận thư điện tử', -'confirmemail_noemail' => 'Bạn chưa đưa vào địa chỉ thư điện tử hợp lệ ở [[Special:Preferences|tùy chọn cá nhân]].', -'confirmemail_text' => '{{SITENAME}} đòi hỏi bạn xác minh thư điện tử của mình +'confirmemail' => 'Xác nhận thư điện tử', +'confirmemail_noemail' => 'Bạn chưa đưa vào địa chỉ thư điện tử hợp lệ ở [[Special:Preferences|tùy chọn cá nhân]].', +'confirmemail_text' => '{{SITENAME}} đòi hỏi bạn xác minh thư điện tử của mình trước khi sử dụng tính năng thư điện tử. Nhấn vào nút bên dưới để gửi thư xác nhận đến địa chỉ của bạn. Thư xác nhận sẽ có kèm một liên kết có chứa một mã số; tải liên kết đó trong trình duyệt để xác nhận địa chỉ thư điện tử của bạn là đúng.', -'confirmemail_pending' => 'Mã xác đã được gửi đến địa chỉ thư điện tử của bạn; nếu bạn +'confirmemail_pending' => 'Mã xác đã được gửi đến địa chỉ thư điện tử của bạn; nếu bạn mới vừa tạo tài khoản, xin chờ vài phút để thư tới nơi rồi hãy cố gắng yêu cầu mã mới.', -'confirmemail_send' => 'Gửi thư xác nhận', -'confirmemail_sent' => 'Thư xác nhận đã được gửi', -'confirmemail_oncreate' => 'Đã gửi mã xác nhận đến địa chỉ thư điện tử của bạn. +'confirmemail_send' => 'Gửi thư xác nhận', +'confirmemail_sent' => 'Thư xác nhận đã được gửi', +'confirmemail_oncreate' => 'Đã gửi mã xác nhận đến địa chỉ thư điện tử của bạn. Bạn không cần mã này để đăng nhập, nhưng sẽ cần sử dụng nó để bật các tính năng có dùng thư điện tử của wiki.', -'confirmemail_sendfailed' => '{{SITENAME}} không thể gửi thư xác nhận. +'confirmemail_sendfailed' => '{{SITENAME}} không thể gửi thư xác nhận. Xin kiểm tra lại địa chỉ thư xem có bị nhầm ký tự nào không. Chương trình thư báo rằng: $1', -'confirmemail_invalid' => 'Mã xác nhận sai. Mã này có thể đã hết hạn', -'confirmemail_needlogin' => 'Bạn cần phải $1 để xác nhận địa chỉ thư điện tử.', -'confirmemail_success' => 'Thư điện tử của bạn đã được xác nhận. Bạn đã có thể đăng nhập và bắt đầu sử dụng wiki.', -'confirmemail_loggedin' => 'Địa chỉ thư điện tử của bạn đã được xác nhận', -'confirmemail_error' => 'Có trục trặc khi lưu xác nhận của bạn.', -'confirmemail_subject' => 'Xác nhận thư điện tử tại {{SITENAME}}', -'confirmemail_body' => 'Ai đó, có thể là bạn, từ địa chỉ IP $1, +'confirmemail_invalid' => 'Mã xác nhận sai. Mã này có thể đã hết hạn', +'confirmemail_needlogin' => 'Bạn cần phải $1 để xác nhận địa chỉ thư điện tử.', +'confirmemail_success' => 'Thư điện tử của bạn đã được xác nhận. Bạn đã có thể đăng nhập và bắt đầu sử dụng wiki.', +'confirmemail_loggedin' => 'Địa chỉ thư điện tử của bạn đã được xác nhận', +'confirmemail_error' => 'Có trục trặc khi lưu xác nhận của bạn.', +'confirmemail_subject' => 'Xác nhận thư điện tử tại {{SITENAME}}', +'confirmemail_body' => 'Ai đó, có thể là bạn, từ địa chỉ IP $1, đã đăng ký tài khoản có tên "$2" với địa chỉ thư điện tử này tại {{SITENAME}}. Để xác nhận rằng tài khoản này thực sự là của bạn và để kích hoạt tính năng thư điện tử tại {{SITENAME}}, xin mở liên kết này trong trình duyệt: @@ -3219,8 +3314,36 @@ Nếu bạn *không* đăng ký tài khoản, hãy nhấn vào liên kết này $5 Mã xác nhận này sẽ hết hạn vào $4.', -'confirmemail_invalidated' => 'Đã hủy xác nhận địa chỉ thư điện tử', -'invalidateemail' => 'Hủy xác nhận thư điện tử', +'confirmemail_body_changed' => 'Ai đó, có thể là bạn, từ địa chỉ IP $1, đã đăng ký tài khoản có +tên "$2" với địa chỉ thư điện tử này tại {{SITENAME}}. + +Để xác nhận rằng tài khoản này thực sự là của bạn và để kích hoạt tính năng +thư điện tử tại {{SITENAME}}, xin mở liên kết này trong trình duyệt: + +$3 + +Nếu tài khoản *không* phải là của bạn, hãy nhấn vào liên kết này để hủy thủ +tục xác nhận địa chỉ thư điện tử: + +$5 + +Mã xác nhận này sẽ hết hạn vào $4.', +'confirmemail_body_set' => 'Ai đó, có thể là bạn, từ địa chỉ IP $1, đã đặt địa chỉ này là địa +chỉ thư điện tử của tài khoản "$2" tại {{SITENAME}}. + +Để xác nhận rằng tài khoản này thực sự là của bạn và để tái kích hoạt tính năng +thư điện tử tại {{SITENAME}}, xin mở liên kết này trong trình duyệt: + +$3 + +Nếu tài khoản *không* phải là của bạn, hãy nhấn vào liên kết này để hủy thủ +tục xác nhận địa chỉ thư điện tử: + +$5 + +Mã xác nhận này sẽ hết hạn vào $4.', +'confirmemail_invalidated' => 'Đã hủy xác nhận địa chỉ thư điện tử', +'invalidateemail' => 'Hủy xác nhận thư điện tử', # Scary transclusion 'scarytranscludedisabled' => '[Nhúng giữa các wiki bị tắt]', @@ -3263,6 +3386,7 @@ Xin hãy xác nhận bạn thực sự muốn tạo lại trang này.", 'table_pager_first' => 'Trang đầu', 'table_pager_last' => 'Trang cuối', 'table_pager_limit' => 'Xem $1 kết quả mỗi trang', +'table_pager_limit_label' => 'Số khoản mỗi trang:', 'table_pager_limit_submit' => 'Xem', 'table_pager_empty' => 'Không có kết quả nào.', @@ -3363,6 +3487,7 @@ Bạn cũng có thể [[Special:Watchlist/edit|dùng trang sửa đổi bình th 'version-specialpages' => 'Trang đặc biệt', 'version-parserhooks' => 'Hook trong bộ xử lý', 'version-variables' => 'Biến', +'version-skins' => 'Hình dạng', 'version-other' => 'Phần mở rộng khác', 'version-mediahandlers' => 'Bộ xử lý phương tiện', 'version-hooks' => 'Các hook', @@ -3374,6 +3499,18 @@ Bạn cũng có thể [[Special:Watchlist/edit|dùng trang sửa đổi bình th 'version-hook-subscribedby' => 'Được theo dõi bởi', 'version-version' => '(Phiên bản $1)', 'version-license' => 'Giấy phép bản quyền', +'version-poweredby-credits' => "Wiki này chạy trên '''[http://www.mediawiki.org/ MediaWiki]''', bản quyền © 2001–$1 $2.", +'version-poweredby-others' => 'những người khác', +'version-license-info' => "MediaWiki là phần mềm tự do; bạn được phép tái phân phối và/hoặc sửa đổi nó theo những điều khoản của Giấy phép Công cộng GNU do Quỹ Phần mềm Tự do xuất bản; phiên bản 2 hay bất kỳ phiên bản nào mới hơn nào của Giấy phép. + +MediaWiki được phân phối với hy vọng rằng nó sẽ hữu ích, nhưng '''không có bất kỳ một bảo đảm nào cả''', ngay cả những bảo đảm ngụ ý cho '''các mục đích thương mại''' hoặc cho '''một mục đích đặc biệt nào đó'''. Xem Giấy phép Công cộng GNU để biết thêm chi tiết. + +Có lẽ bạn đã nhận [{{SERVER}}{{SCRIPTPATH}}/COPYING bản sao Giấy phép Công cộng GNU] đi kèm với tác phẩm này; nếu không, hãy viết thư đến: + Free Software Foundation, Inc. + 51 Franklin St., Fifth Floor + Boston, MA 02110-1301 + USA +hoặc [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html đọc nó trực tuyến].", 'version-software' => 'Phần mềm được cài đặt', 'version-software-product' => 'Phần mềm', 'version-software-version' => 'Phiên bản', @@ -3394,7 +3531,7 @@ Hãy cho vào tên của tập tin, trừ tiền tố “{{ns:file}}:”.', 'fileduplicatesearch-legend' => 'Tìm kiếm tập tin trùng lắp', 'fileduplicatesearch-filename' => 'Tên tập tin:', 'fileduplicatesearch-submit' => 'Tìm kiếm', -'fileduplicatesearch-info' => '$1×$2 điểm ảnh
    Kích thước tập tin: $3
    Định dạng MIME: $4', +'fileduplicatesearch-info' => '$1 × $2 điểm ảnh
    Kích thước tập tin: $3
    Kiểu MIME: $4', 'fileduplicatesearch-result-1' => 'Không có bản sao y hệt với tập tin “$1”.', 'fileduplicatesearch-result-n' => 'Có {{PLURAL:$2|1 bản sao|$2 bản sao}} y hệt với tập tin “$1”.', @@ -3443,6 +3580,15 @@ Hãy cho vào tên của tập tin, trừ tiền tố “{{ns:file}}:”.', 'tags-edit' => 'sửa', 'tags-hitcount' => '$1 {{PLURAL:$1|thay đổi|thay đổi}}', +# Special:ComparePages +'comparepages' => 'So sánh trang', +'compare-selector' => 'So sánh phiên bản trang', +'compare-page1' => 'Trang 1', +'compare-page2' => 'Trang 2', +'compare-rev1' => 'Phiên bản 1', +'compare-rev2' => 'Phiên bản 2', +'compare-submit' => 'So sánh', + # Database error messages 'dberr-header' => 'Wiki này đang gặp trục trặc', 'dberr-problems' => 'Xin lỗi! Trang này đang gặp phải những khó khăn về kỹ thuật.', @@ -3459,8 +3605,13 @@ Hãy cho vào tên của tập tin, trừ tiền tố “{{ns:file}}:”.', 'htmlform-float-invalid' => 'Giá trị chỉ định không phải là con số.', 'htmlform-int-toolow' => 'Giá trị đưa vào phải ít nhất $1', 'htmlform-int-toohigh' => 'Giá trị không được vượt quá $1', +'htmlform-required' => 'Phần này đòi giá trị', 'htmlform-submit' => 'Đăng', 'htmlform-reset' => 'Hủy các thay đổi', 'htmlform-selectorother-other' => 'Khác', +# SQLite database support +'sqlite-has-fts' => '$1 với sự hỗ trợ tìm kiếm toàn văn', +'sqlite-no-fts' => '$1 không có hỗ trợ tìm kiếm toàn văn', + ); diff --git a/languages/messages/MessagesVls.php b/languages/messages/MessagesVls.php index de3f82cf..dee3558c 100644 --- a/languages/messages/MessagesVls.php +++ b/languages/messages/MessagesVls.php @@ -111,15 +111,13 @@ $messages = array( 'qbspecialpages' => 'Specioale bloadn', # Vector skin -'vector-action-delete' => 'Wegdoen', -'vector-action-move' => 'Ernoemn', -'vector-namespace-project' => 'Projectblad', -'vector-namespace-special' => 'Specioal blad', -'vector-view-create' => 'Anmoakn', -'vector-view-edit' => 'Bewerkn', -'vector-view-history' => 'Geschiedenisse bekykn', -'vector-view-view' => 'Leezn', -'vector-view-viewsource' => 'Brontekst bekykn', +'vector-action-delete' => 'Wegdoen', +'vector-action-move' => 'Ernoemn', +'vector-view-create' => 'Anmoakn', +'vector-view-edit' => 'Bewerkn', +'vector-view-history' => 'Geschiedenisse bekykn', +'vector-view-view' => 'Leezn', +'vector-view-viewsource' => 'Brontekst bekykn', 'tagline' => 'Van {{SITENAME}}', 'help' => 'Ulpe', diff --git a/languages/messages/MessagesVmf.php b/languages/messages/MessagesVmf.php index 8277a0f7..368e808f 100644 --- a/languages/messages/MessagesVmf.php +++ b/languages/messages/MessagesVmf.php @@ -33,28 +33,28 @@ $namespaceNames = array( ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'Dobâldâ Wajdârlajdungân' ), + 'DoubleRedirects' => array( 'Dobâldâ_Wajdârlajdungân' ), 'Userlogin' => array( 'Ôômäldâ' ), 'Userlogout' => array( 'Ôbmäldâ' ), 'Preferences' => array( 'Ôischtälungâ' ), 'Watchlist' => array( 'Bäoobôchdungslisdâ' ), - 'Recentchanges' => array( 'Lädsdâ Änârungâ' ), + 'Recentchanges' => array( 'Lädsdâ_Änârungâ' ), 'Upload' => array( 'Hoochlaadâ' ), 'Statistics' => array( 'Schdadisdign' ), - 'Newpages' => array( 'Nojâ Sajdâ' ), - 'Allpages' => array( 'Ôlâ Sajdâ' ), + 'Newpages' => array( 'Nojâ_Sajdâ' ), + 'Allpages' => array( 'Ôlâ_Sajdâ' ), 'Prefixindex' => array( 'Indägs' ), 'Specialpages' => array( 'Schbädsjaalsajdâ' ), 'Contributions' => array( 'Bajdräächâ' ), 'Emailuser' => array( 'Iimäjlâ' ), - 'Confirmemail' => array( 'Iimäjl bschdädigâ' ), - 'Movepage' => array( 'Sajdâ färschiibâ' ), + 'Confirmemail' => array( 'Iimäjl_bschdädigâ' ), + 'Movepage' => array( 'Sajdâ_färschiibâ' ), 'Categories' => array( 'Gadâgoriin' ), 'Export' => array( 'Ägsbordiirn' ), - 'Allmessages' => array( 'Ôlâ Nôôchrichdâ' ), + 'Allmessages' => array( 'Ôlâ_Nôôchrichdâ' ), 'Undelete' => array( 'Wiidârhärschdälâ' ), 'Import' => array( 'Imbordiirn' ), - 'Unwatchedpages' => array( 'Unbäoobôchdâdâ Sajdn' ), + 'Unwatchedpages' => array( 'Unbäoobôchdâdâ_Sajdn' ), ); $messages = array( @@ -65,8 +65,7 @@ $messages = array( 'tog-hideminor' => 'Glaane ändrungn ned ôôdsajchn', 'tog-hidepatrolled' => 'Ned dsajchn in dâ „Ledschdâ Ändrungn“, was an andrar schon brüüfd had', 'tog-showtoc' => 'Inhalds-fârdsajchnis ôôdsajchn baj määr wi 3 iiwârschrifdn', -'tog-rememberpassword' => 'Uf dem Ghombjuudâr schdändich ôôgmäld blajwn', -'tog-editwidth' => "S'âjgaawefäld sol soo braad wi dr bildschirm wärn", +'tog-rememberpassword' => 'Uf dem Ghombjuudâr schdändich ôôgmäld blajwn (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Ale fon miir sälwâr gmachdn sajdn soln uf mâj beoobachdungs-lischdn', 'tog-watchdefault' => 'Ale fon miir gändârdnd sajdn soln uf mâj beoobachdungs-lischdn', 'tog-watchmoves' => 'Ale fon miir fârschoobnen sajdn soln uf mâj beoobachdungs-lischdn', @@ -164,30 +163,19 @@ ausghenn, mr mus dâdsuu ufm ajchnen rächnâr was âjrichdn ghenn)', 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Ân najn abschnid ôôfangn', -'vector-action-delete' => 'Leschn', -'vector-action-move' => 'Umdaafn', -'vector-action-protect' => 'Schidsn', -'vector-action-undelete' => 'Leschn riggängich machn', -'vector-action-unprotect' => 'Schuds ufgeebn', -'vector-namespace-category' => 'Ghadegorii', -'vector-namespace-help' => 'Hilfe-sajdn', -'vector-namespace-image' => 'Dadhaj', -'vector-namespace-main' => 'Sajdn', -'vector-namespace-media' => 'Meedjân-sajdn', -'vector-namespace-mediawiki' => 'Mäldung fon MediaWiki', -'vector-namespace-project' => 'Brojägd-sajdn', -'vector-namespace-special' => 'Sondâr-sajdn', -'vector-namespace-talk' => 'Disghusjoon', -'vector-namespace-template' => 'Foorlaach', -'vector-namespace-user' => 'Benudsâr-sajdn', -'vector-view-create' => 'Ôôleechn', -'vector-view-edit' => 'Bearbajdn', -'vector-view-history' => 'Wärsjoonsfolche', -'vector-view-view' => 'Leesn', -'vector-view-viewsource' => 'Gwäl-dhägsd ôôgugn', -'namespaces' => 'Nôômsrajm', -'variants' => 'Warjandn', +'vector-action-addsection' => 'Ân najn abschnid ôôfangn', +'vector-action-delete' => 'Leschn', +'vector-action-move' => 'Umdaafn', +'vector-action-protect' => 'Schidsn', +'vector-action-undelete' => 'Leschn riggängich machn', +'vector-action-unprotect' => 'Schuds ufgeebn', +'vector-view-create' => 'Ôôleechn', +'vector-view-edit' => 'Bearbajdn', +'vector-view-history' => 'Wärsjoonsfolche', +'vector-view-view' => 'Leesn', +'vector-view-viewsource' => 'Gwäl-dhägsd ôôgugn', +'namespaces' => 'Nôômsrajm', +'variants' => 'Warjandn', 'errorpagetitle' => 'Feelär', 'returnto' => 'Dsrig dsur sajdn $1.', @@ -349,7 +337,7 @@ Wen's des ned is, bisd womeeglich iwa ân feela in dr sofdwäâr gschdolbäd. In # Login and logout pages 'yourname' => 'Benudsârnôômâ', 'yourpassword' => 'Bhaswôrd:', -'remembermypassword' => 'Af dem ghombjuudâr schdändich ôôgmäld blajm', +'remembermypassword' => 'Af dem ghombjuudâr schdändich ôôgmäld blajm (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'Ôômeldn', 'nav-login-createaccount' => 'Oomeldn / Ghondoo ooleeng', 'userlogin' => 'Ôômeldn / Als Bajdräächâr ajschrajm', @@ -684,7 +672,6 @@ S'gajd awâr aa â [[Special:WhatLinksHere/$2|lisdn mid alâ fârwajs]].", # Watchlist 'watchlist' => 'Maj beoobachdungs-lisdn', 'mywatchlist' => 'Mâj beoobachdungslisdn', -'watchlistfor' => "(fär '''$1''')", 'addedwatch' => 'Wärd ab jeds beoobachd', 'addedwatchtext' => "Di sajdn „[[:$1]]“ schdäd eds mid af dajnâr [[Special:Watchlist|beoobachdungs-lisdn]] . @@ -936,9 +923,9 @@ Bidde gug's mi´m foorschau-gnobf ôô fôrm schbajchan", 'nextdiff' => 'Undârschiid fo där nägsdn ändrung →', # Media information -'file-info-size' => '($1 × $2 pigsl, dadajgrääsn: $3, MIME-tib: $4)', +'file-info-size' => '$1 × $2 pigsl, dadajgrääsn: $3, MIME-tib: $4', 'file-nohires' => "A he´äre aafleesung gibd's ghaane.", -'svg-long-desc' => '(SVG-dadaj, ufleesung: $1 × $2 pigsl, dadajgreesn: $3)', +'svg-long-desc' => 'SVG-dadaj, ufleesung: $1 × $2 pigsl, dadajgreesn: $3', 'show-big-image' => 'Bild in hegsdâr aufleesung', 'show-big-image-thumb' => 'Greäs fo där schbigg-ôôsichd: $1 × $2 bhigsl', diff --git a/languages/messages/MessagesVo.php b/languages/messages/MessagesVo.php index 59df6ba9..8c573f8c 100644 --- a/languages/messages/MessagesVo.php +++ b/languages/messages/MessagesVo.php @@ -125,8 +125,7 @@ $messages = array( 'tog-editsection' => 'Dälön redakami dilädas me yüms: [redakön]', 'tog-editsectiononrightclick' => 'Dälön redakami diläda me klik mugaknopa detik su dilädatiäds (JavaScript)', 'tog-showtoc' => 'Jonön ninädalisedi (su pads labü diläds plu 3)', -'tog-rememberpassword' => 'Dakipön nunädamanünis obik in nünöm at', -'tog-editwidth' => 'Vidotön redakaspadi lölöfiko', +'tog-rememberpassword' => 'Dakipolös nunädamanünis obik in bevüresodatävöm at (muiko {{PLURAL:$1|del|dels}} $1)', 'tog-watchcreations' => 'Läükön padis fa ob pejafölis lä galädalised obik', 'tog-watchdefault' => 'Läükön padis fa ob peredakölis la galädalised obik', 'tog-watchmoves' => 'Läükön padis fa ob petopätükölis lä galädalised obik', @@ -265,30 +264,19 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Lüükön yegädi', -'vector-action-delete' => 'Moükön', -'vector-action-move' => 'Topätükön', -'vector-action-protect' => 'Jelön', -'vector-action-undelete' => 'Sämoükön', -'vector-action-unprotect' => 'Säjelön', -'vector-namespace-category' => 'Klad', -'vector-namespace-help' => 'Yufapad', -'vector-namespace-image' => 'Ragiv', -'vector-namespace-main' => 'Pad', -'vector-namespace-media' => 'Nünamakanädapad', -'vector-namespace-mediawiki' => 'Nun', -'vector-namespace-project' => 'Proyegapad', -'vector-namespace-special' => 'Pad patik', -'vector-namespace-talk' => 'Bespik', -'vector-namespace-template' => 'Samafomot', -'vector-namespace-user' => 'Gebanapad', -'vector-view-create' => 'Jafön', -'vector-view-edit' => 'Redakön', -'vector-view-history' => 'Logön jenotemi', -'vector-view-view' => 'Reidön', -'vector-view-viewsource' => 'Logön fonäti', -'actions' => 'Duns', -'namespaces' => 'Nemaspads', +'vector-action-addsection' => 'Lüükön yegädi', +'vector-action-delete' => 'Moükön', +'vector-action-move' => 'Topätükön', +'vector-action-protect' => 'Jelön', +'vector-action-undelete' => 'Sämoükön', +'vector-action-unprotect' => 'Säjelön', +'vector-view-create' => 'Jafön', +'vector-view-edit' => 'Redakön', +'vector-view-history' => 'Logön jenotemi', +'vector-view-view' => 'Reidön', +'vector-view-viewsource' => 'Logön fonäti', +'actions' => 'Duns', +'namespaces' => 'Nemaspads', 'errorpagetitle' => 'Pöl', 'returnto' => 'Geikön lü $1.', @@ -344,6 +332,7 @@ $messages = array( 'jumpto' => 'Bunön lü:', 'jumptonavigation' => 'nafam', 'jumptosearch' => 'suk', +'pool-errorunknown' => 'Pöl nesevädik', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Tefü {{SITENAME}}', @@ -503,7 +492,7 @@ No glömolöd ad votükön [[Special:Preferences|buükamis olik in {{SITENAME}}] 'yourname' => 'Gebananem:', 'yourpassword' => 'Letavöd:', 'yourpasswordagain' => 'Klavolös dönu letavödi:', -'remembermypassword' => 'Dakipolöd ninädamanünis obik in nünöm at', +'remembermypassword' => 'Dakipolöd ninädamanünis obik in nünöm at (muiko {{PLURAL:$1|del|dels}} $1)', 'yourdomainname' => 'Domen olik:', 'externaldberror' => 'U ejenon fümükamapöl plödik nünödema, u no dalol atimükön kali plödik ola.', 'login' => 'Nunädolös obi', @@ -520,6 +509,7 @@ No glömolöd ad votükön [[Special:Preferences|buükamis olik in {{SITENAME}}] 'gotaccount' => "Ya labol-li kali? '''$1'''.", 'gotaccountlink' => 'Nunädolös obi', 'createaccountmail' => 'me pot leäktronik', +'createaccountreason' => 'Kod:', 'badretype' => 'Letavöds fa ol pepenöls no leigons.', 'userexists' => 'Gebananem at ya dabinon. Välolös, begö! nemik votik.', 'loginerror' => 'Nunädamapöl', @@ -619,7 +609,8 @@ Ba ya evotükol benosekiko letavödi olik, u ya ebegol benosekiko letavödi nela 'anoneditwarning' => "'''Nuned:''' No enunädol oli. Ladet-IP olik poregistaron su redakamajenotem pada at.", 'missingsummary' => "'''Noet:''' No epenol redakamipläni. If ovälol dönu knopi: Dakipolöd, redakam olik podakipon nen plän.", 'missingcommenttext' => 'Penolös, begö! küpeti dono.', -'missingcommentheader' => "'''Noet:''' No epenol yegädi/tiädi küpete at. If ovälol dönu knopi: Dakipolöd, redakam olik podakipon nen on.", +'missingcommentheader' => "'''Meib:''' No epenol yegädi/tiädi küpete at. +If ovälol dönu knopi: \"{{int:savearticle}}\", redakam olik podakipon nen on.", 'summary-preview' => 'Büologed brefik:', 'subject-preview' => 'Büologed yegäda/diläda:', 'blockedtitle' => 'Geban peblokon', @@ -683,7 +674,7 @@ Kanol [[Special:Search/{{PAGENAME}}|sukön padatiädi at]] su pads votik, "'''Memolös, das anu te blufol/büologol eli JavaScript olik, no nog pedakipon!'''", 'userinvalidcssjstitle' => "'''Nuned:''' No dabinon fomät: \"\$1\". -Memolös, das pads: .css e .js mutons labön tiädi minudik: {{ns:user}}:Foo/monobook.css, no {{ns:user}}:Foo/Monobook.css.", +Memolös, das pads: .css e .js mutons labön tiädi minudik: {{ns:user}}:Foo/vector.css, no {{ns:user}}:Foo/Vector.css.", 'updated' => '(peatimükon)', 'note' => "'''Penet:'''", 'previewnote' => "'''Is pajonon te büologed; votükams no nog pedakipons!'''", @@ -721,9 +712,6 @@ If no vilol, das vödems olik poredakons nenmisero, tän no pladolös onis isio. Garanol obes, das ol it epenol atosi, u das ekopiedol atosi se räyun notidik u se fon libik sümik (logolös eli $1 pro notets). '''NO PLADOLÖD ISIO NEN DÄL LAUTANA VÖDEMIS LABÜ KOPIEDAGITÄT!'''", -'longpagewarning' => "'''NUNED: Pad at labon lunoti miljölätas $1; -bevüresodatävöms anik ba no fägons ad redakön nendsäkädo padis lunotü miljölats plu 32. -Betikolös dilami pada at ad pads smalikum.'''", 'longpageerror' => "'''PÖL: Vödem fa ol pesedöl labon lunoti miljölätas $1, kelos pluon leigodü völad muik pedälöl miljölätas $2. No kanon padakipön.'''", 'readonlywarning' => "'''NUNED: Vük pefärmükon kodü kodididazesüd. No kanol dakipön votükamis olik anu. Kopiedolös vödemi nulik ini program votik e dakipolös oni in nünöm olik. Poso okanol dönu steifülön ad pladön oni isio.''' @@ -909,11 +897,12 @@ Kontrololös, va votükam at okipon fovöfi padajenotema.', # Diffs 'history-title' => 'Revidajenotem pada: "$1"', 'difference' => '(Dif vü revids)', +'difference-multipage' => '(Dif vü pads)', 'lineno' => 'Lien $1:', 'compareselectedversions' => 'Leigodolöd fomamis pevälöl', 'showhideselectedversions' => 'Jonön/klänedön fomamis pevälöl', 'editundo' => 'sädunön', -'diff-multi' => '({{PLURAL:$1|Revid vüik bal no pejonon|Revids vüik $1 no pejonons}}.)', +'diff-multi' => '({{PLURAL:$1|Revid vüik bal|Revids vüik $1}} fa {{PLURAL:$2|geban bal|gebans $2}} no {{PLURAL:$1|pejonon|pejonons}})', # Search results 'searchresults' => 'Sukaseks', @@ -948,6 +937,7 @@ Kontrololös, va votükam at okipon fovöfi padajenotema.', 'searchprofile-everything-tooltip' => 'Sukön in ninäd lölik (keninükamü bespikapads)', 'searchprofile-advanced-tooltip' => 'Sukön in nemaspads patik', 'search-result-size' => '$1 ({{PLURAL:$2|vöd 1|vöds $2}})', +'search-result-category-size' => '{{PLURAL:$1|liman 1|limans $1}} ({{PLURAL:$2|donaklad 1|donaklads $2}}, {{PLURAL:$3|ragiv 1|ragivs $3}})', 'search-result-score' => 'Demäd: $1%', 'search-redirect' => '(lüodüköm: $1)', 'search-section' => '(diläd: $1)', @@ -1221,11 +1211,8 @@ Dalol i dälön votikanes kosikön ko ol yufü gebana- u bespikapad olik nes sä 'recentchanges-legend' => 'Votükams nulik: paramets', 'recentchangestext' => 'Su pad at binons votükams nulikün in vüki at.', 'recentchanges-feed-description' => 'Getön votükamis nulikün in vük at me nünakanad at.', -'recentchanges-legend-newpage' => '$1 - pad nulik', 'recentchanges-label-newpage' => 'Redakam at päjafon pad nulik', -'recentchanges-legend-minor' => '$1 - votükam pülik', 'recentchanges-label-minor' => 'Atos binon redakam pülik', -'recentchanges-legend-bot' => '$1 - votükam fa el bot', 'recentchanges-label-bot' => 'Redakam at pädunon fa el bot', 'rcnote' => "Dono {{PLURAL:$1|binon votükam '''1'''|binons votükams '''$1'''}} lätikün {{PLURAL:$2|dela|delas '''$2'''}} lätikün, pänumädöls tü $5, $4.", 'rcnotefrom' => "Is palisedons votükams sis '''$2''' (jü '''$1''').", @@ -1327,7 +1314,6 @@ If nog vilol lopükön ragivi olik, geikolös e gebolös nemi votik. [[File:$1|t 'fileexists-shared-forbidden' => 'Ragiv labü nem at ya dabinon in ragivastok kobädik. If nog vilol löpükön ragivi olik, geikolös e löpükolös ragivi at me nem votik. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'Ragiv at leigon ko {{PLURAL:$1|ragiv|ragivs}} fovik:', 'file-deleted-duplicate' => 'Ragiv votik, kel leigon ko ragiv at ([[:$1]]), pemoükon büo. Sötol kontrolön moükamajenotemi ragiva et büä odönulöpükol oni.', -'successfulupload' => 'Löpükam eplöpon', 'uploadwarning' => 'Löpükamanuned', 'savefile' => 'Dakipolöd ragivi', 'uploadedimage' => '"[[$1]]" pelöpüköl', @@ -1346,6 +1332,7 @@ If nog vilol lopükön ragivi olik, geikolös e gebolös nemi votik. [[File:$1|t Vätälolös, va pötos ad löpükön ragivi at. Kodü koveniäl, jenotalised tefü moükam ragiva at pagivon is.", 'filename-bad-prefix' => "Nem ragiva fa ol palöpüköl primon me '''\"\$1\"''': nem no bepenöl nomiko pagevöl itjäfidiko fa käms nulädik. Välolös, begö! nemi bepenöl pro ragiv olik.", +'upload-success-subj' => 'Löpükam eplöpon', 'upload-proto-error' => 'Protok neverätik', 'upload-proto-error-text' => 'Löpükam flagon elis URLs me http:// u ftp:// primölis.', @@ -1485,7 +1472,6 @@ Primanünods: ninädasot/donasot, a.s. image/jpeg.', 'statistics-edits-average' => 'Num zänedik redakamas a pad', 'statistics-views-total' => 'Logams (valod)', 'statistics-views-peredit' => 'Logams a redakam', -'statistics-jobqueue' => 'Gretot [http://www.mediawiki.org/wiki/Manual:Job_queue vobodaliseda]', 'statistics-users' => '[[Special:ListUsers|Gebans]] peregistaröl', 'statistics-users-active' => 'Gebans jäfedik', 'statistics-users-active-desc' => 'Gebans, kels edunons bosi ün {{PLURAL:$1|del lätik|dels lätik $1}}', @@ -1521,6 +1507,8 @@ Pad palelogon telplänovapad if gebon samafomoti, lü kel payümon pad [[MediaWi 'nmembers' => '{{PLURAL:$1|liman|limans}} $1', 'nrevisions' => '{{PLURAL:$1|fomam|fomams}} $1', 'nviews' => '{{PLURAL:$1|logam|logams}} $1', +'nimagelinks' => 'Pageböl in {{PLURAL:$1|pad|pads}} $1', +'ntransclusions' => 'pageböl in {{PLURAL:$1|pad|pads}} $1', 'specialpage-empty' => 'Pad at vagon.', 'lonelypages' => 'Pads, lü kels yüms nonik dugons', 'lonelypagestext' => 'Pads nonik in vük at peyümons ad pads sököl in {{SITENAME}}.', @@ -1691,7 +1679,6 @@ Ba dabinons [[{{MediaWiki:Listgrouprights-helppage}}|nüns pluik]] tefü gebanag # Watchlist 'watchlist' => 'Galädalised obik', 'mywatchlist' => 'Galädalised obik', -'watchlistfor' => "(tefü '''$1''')", 'nowatchlist' => 'Labol nosi in galädalised olik.', 'watchlistanontext' => '$1 ad logön u redakön lienis galädaliseda olik', 'watchnologin' => 'No enunädon oki', @@ -1805,7 +1792,9 @@ Redakam lätik päjenükon fa geban: [[User:$3|$3]] ([[User talk:$3|Bespikapad]] 'editcomment' => "Redakamaplän äbinon: „''$1''“.", 'revertpage' => 'Redakams ela [[Special:Contributions/$2|$2]] ([[User talk:$2|Bespik]]) pegeükons ad fomam ma redakam lätik gebana: [[User:$1|$1]]', 'rollback-success' => 'Redakams gebana: $1 pesädunons; pad pevotükon ad fomam lätik fa geban: $2.', -'sessionfailure' => 'Jiniko ädabinon säkäd seimik pö nunädam olik. + +# Edit tokens +'sessionfailure' => 'Jiniko ädabinon säkäd seimik pö nunädam olik. Dun at no pelasumon ad vitön mögi, das votükams olik pogivulons gebane votik. Välolös knopi: „Geikön“ e dönulodolös padi, de kel ekömol, e tän steifülolös nogna.', @@ -2002,7 +1991,6 @@ $1', 'ipb-edit-dropdown' => 'Redakön kodis blokama', 'ipb-unblock-addr' => 'Säblokön eli $1', 'ipb-unblock' => 'Säblokön gebananemi u ladeti-IP', -'ipb-blocklist-addr' => 'Blokams dabinöl tefü el $1', 'ipb-blocklist' => 'Logön blokamis dabinöl', 'ipb-blocklist-contribs' => 'Keblünots gebana: $1', 'unblockip' => 'Säblokön gebani', @@ -2403,10 +2391,10 @@ If ojäfidükol oni, nünömasit olik ba podämükon.", 'imagemaxsize' => 'Miedükön magodis su pads magodis bepenöls ad:', 'thumbsize' => 'Gretot magodüla:', 'widthheightpage' => '$1×$2, {{PLURAL:$3|pad|pads}} $3', -'file-info' => '(ragivagretot: $1, MIME-pated: $2)', -'file-info-size' => '($1 × $2 pixel, ragivagret: $3, pated MIME: $4)', +'file-info' => 'ragivagretot: $1, MIME-pated: $2', +'file-info-size' => '$1 × $2 pixel, ragivagret: $3, pated MIME: $4', 'file-nohires' => 'Gretot gudikum no pagebidon.', -'svg-long-desc' => '(ragiv in fomät: SVG, magodaziöbs $1 × $2, gretot: $3)', +'svg-long-desc' => 'ragiv in fomät: SVG, magodaziöbs $1 × $2, gretot: $3', 'show-big-image' => 'Gretot gudikün', 'show-big-image-thumb' => 'Gretot büologeda at: magodaziöbs $1 × $2', @@ -2804,6 +2792,7 @@ Kanol i [[Special:Watchlist/edit|gebön redakametodi kösömik]].', 'version' => 'Fomam', 'version-extensions' => 'Veitükumams pestitöl', 'version-specialpages' => 'Pads patik', +'version-skins' => 'Fomäts', 'version-other' => 'Votik', 'version-hooks' => 'Huköms', 'version-hook-name' => 'Hukömanem', @@ -2862,6 +2851,14 @@ Penolös ragivanemi nen foyümot: „{{ns:file}}:“.', 'tags-edit' => 'redakön', 'tags-hitcount' => '$1 {{PLURAL:$1|votükam|votükams}}', +# Special:ComparePages +'comparepages' => 'Leigodön padis', +'compare-page1' => 'Pad 1', +'compare-page2' => 'Pad 2', +'compare-rev1' => 'Revid 1', +'compare-rev2' => 'Revid 2', +'compare-submit' => 'Leigodolöd', + # Database error messages 'dberr-header' => 'Vük at labon säkädi', 'dberr-problems' => 'Säkusadolös! Bevüresodatopäd at nu labon säkädis kaenik.', diff --git a/languages/messages/MessagesVot.php b/languages/messages/MessagesVot.php index 43e3d6f0..17f5f02f 100644 --- a/languages/messages/MessagesVot.php +++ b/languages/messages/MessagesVot.php @@ -161,7 +161,7 @@ Kui tšüsümüssessä ebõõ rootšittu tšültši, võib õlla õlõttõ löü # Login and logout pages 'yourname' => 'Tšäüttijänimi:', 'yourpassword' => 'Salasõna', -'remembermypassword' => 'Mäleht minuu', +'remembermypassword' => 'Mäleht minuu (enintään $1 {{PLURAL:$1|päivä|päivää}})', 'login' => 'Tširjut süäme', 'nav-login-createaccount' => 'Tširjut süäme vai registriiroit tšäüttijässi', 'userlogin' => 'Tširjut süäme', @@ -388,7 +388,6 @@ Tšüľľed, kummad õmad teďďellä [[Special:Watchlist|kattsõspiizgalla]] on # Watchlist 'watchlist' => 'Minu kattsõspiiska', 'mywatchlist' => 'Minu kattsõspiiska', -'watchlistfor' => '$1', 'addedwatch' => 'Lisättü kattsospiizgallõ', 'addedwatchtext' => "Tšültši \"[[:\$1]]\" on lisättü Teďďee [[Special:Watchlist|kattsospiizgallõ]]. Tšültšese ja sene juttutšültšese tehäväd tulõvaizõd muutuhsõd leeväd tšisloitõtud siäll. @@ -596,9 +595,9 @@ Toož, võittõ tširjutta väänteüssee süü.', 'nextdiff' => 'Uuvvõpi muutuz →', # Media information -'file-info-size' => '($1 × $2 px, $3, MIME-sortta: $4)', +'file-info-size' => '$1 × $2 px, $3, MIME-sortta: $4', 'file-nohires' => 'Suurõpaa kuva ebõõ.', -'svg-long-desc' => '(SVG-faili $1 × $2 px, failii suuruz: $3)', +'svg-long-desc' => 'SVG-faili $1 × $2 px, failii suuruz: $3', 'show-big-image' => 'Kõrka-rezoľuuttsiin verzija', 'show-big-image-thumb' => 'Prestavľeńńaa suuruz: $1 × $2 px', diff --git a/languages/messages/MessagesVro.php b/languages/messages/MessagesVro.php index cbc6a041..3bb6a1c4 100644 --- a/languages/messages/MessagesVro.php +++ b/languages/messages/MessagesVro.php @@ -55,8 +55,7 @@ $messages = array( 'tog-editsection' => 'Lupaq lõikõ toimõndaq [toimõndaq]-linkõga', 'tog-editsectiononrightclick' => 'Lupaq lõikõ toimõndaq hüäpoolidsõ klõpsutusõga
    lõigu päälkirä pääl (JavaScript)', 'tog-showtoc' => 'Näütäq sisukõrda (rohkõmb ku kolmõ vaihõpäälkiräga lehile)', -'tog-rememberpassword' => 'Salasõna miildejätmine tulõvaidsis kõrros', -'tog-editwidth' => 'Tiiq toimõnduskast terve lehe lakjudsõs', +'tog-rememberpassword' => 'Salasõna miildejätmine tulõvaidsis kõrros (kõgõ inämb $1 {{PLURAL:$1|pääväs|pääväs}})', 'tog-watchcreations' => 'Panõq mu luuduq leheq mu perräkaemisnimekirjä', 'tog-watchdefault' => 'Kaeq vahtsidõ ja muudõtuidõ artiklidõ perrä', 'tog-watchmoves' => 'Panõq mu ümbrenõstõduq leheküleq mu perräkaemisnimekirjä', @@ -200,31 +199,20 @@ $messages = array( 'faqpage' => 'Project:KKK', # Vector skin -'vector-action-addsection' => 'Vahtsõ teema ülespandminõ', -'vector-action-delete' => 'Kistudaq ärq', -'vector-action-move' => 'Nõstaq ümbre', -'vector-action-protect' => 'Kaidsaq', -'vector-action-undelete' => 'Tiiq tagasi', -'vector-action-unprotect' => 'Kaitsku-i', -'vector-namespace-category' => 'Katõgooria', -'vector-namespace-help' => 'Abileht', -'vector-namespace-image' => 'Teedüstü', -'vector-namespace-main' => 'Leht', -'vector-namespace-media' => 'Meediäleht', -'vector-namespace-mediawiki' => 'Tallitusteedüs', -'vector-namespace-project' => 'Projektileht', -'vector-namespace-special' => 'Tallituslehekülg', -'vector-namespace-talk' => 'Arotus', -'vector-namespace-template' => 'Näüdüs', -'vector-namespace-user' => 'Pruukjalehekülg', -'vector-view-create' => 'Luuq', -'vector-view-edit' => 'Toimõndaq', -'vector-view-history' => 'Näütäq aoluku', -'vector-view-view' => 'Loeq', -'vector-view-viewsource' => 'Kaeq lätteteksti', -'actions' => 'Tallitusõq', -'namespaces' => 'Nimeruumiq', -'variants' => 'Tõõsõndiq', +'vector-action-addsection' => 'Vahtsõ teema ülespandminõ', +'vector-action-delete' => 'Kistudaq ärq', +'vector-action-move' => 'Nõstaq ümbre', +'vector-action-protect' => 'Kaidsaq', +'vector-action-undelete' => 'Tiiq tagasi', +'vector-action-unprotect' => 'Kaitsku-i', +'vector-view-create' => 'Luuq', +'vector-view-edit' => 'Toimõndaq', +'vector-view-history' => 'Näütäq aoluku', +'vector-view-view' => 'Loeq', +'vector-view-viewsource' => 'Kaeq lätteteksti', +'actions' => 'Tallitusõq', +'namespaces' => 'Nimeruumiq', +'variants' => 'Tõõsõndiq', 'errorpagetitle' => 'Viga', 'returnto' => 'Tagasi lehe manoq $1.', @@ -280,6 +268,9 @@ $messages = array( 'jumpto' => 'Mineq üle:', 'jumptonavigation' => 'juhtminõ', 'jumptosearch' => 'otsminõ', +'pool-timeout' => 'Kinniqpidämise uutmisaig om läbi', +'pool-queuefull' => 'Kinniqpandmiisi järekõrd om täüs', +'pool-errorunknown' => 'Tiidmäldä hädä', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '{{SITENAME}} tutvustus', @@ -438,7 +429,7 @@ Tähelepandmisõs: niikavva, ku sa olõ-i tühäs tennüq uma võrgokaeja vaihõ 'yourname' => 'Pruukjanimi', 'yourpassword' => 'Salasõna', 'yourpasswordagain' => 'Kirodaq viilkõrd salasõna', -'remembermypassword' => 'Salasõna miildejätmine järgmäidsis kõrros', +'remembermypassword' => 'Jätäq salasõna miilde (kooniq $1 {{PLURAL:$1|pääväs|pääväs}})', 'yourdomainname' => 'Võrgonimi', 'externaldberror' => 'Välitsen kimmästegemisteedüskogon om viga vai olõ-i sul lubat umma pruukjanimme muutaq.', 'login' => 'Nimega sisseminek', @@ -455,6 +446,7 @@ Tähelepandmisõs: niikavva, ku sa olõ-i tühäs tennüq uma võrgokaeja vaihõ 'gotaccount' => "Ku sul jo om uma pruukjanimi, sis '''$1'''.", 'gotaccountlink' => 'võit nimega sisse minnäq', 'createaccountmail' => 'e-postiga', +'createaccountreason' => 'Põhjus:', 'badretype' => 'Kirotõduq salasõnaq ei klapiq kokko.', 'userexists' => 'Taad pruukjanimme jo pruugitas. Valiq tõõnõ nimi.', @@ -651,7 +643,6 @@ Ku klõpsahtat nuppi \"{{int:savearticle}}\", sis pästetäs '''õnnõ''' ülemb 'copyrightwarning' => 'Pruukjapalgõ ümbrepandmisõq loetasõq avaldõdus $2 perrä (täpsämbähe kaeq $1). Muud sissu või pruukiq tävveste vabalt, ku olõ-i tõisildõ näüdät.', 'copyrightwarning2' => "Rehkendäq tuud, et kõiki seo lehe pääle tettüid kirotuisi ja toimõnduisi või kiä taht muutaq vai ärq kistutaq. Ku sa taha-i, et su tüüd armuhiitmäldä ümbre tetäs ja uma ärqnägemise perrä pruugitas, sis pästku-i taad siiäq. Sa piät ka lubama, et kirotit uma jutu esiq vai võtit kopimiskeelüldä paigast (täpsämbält kaeq $1). '''PANGU-I TAAHA TEGIJÄÕIGUISIGA KAIDSÕTUT MATÕRJAALI ILMA LUALDA!'''", -'longpagewarning' => '

    HOIATUS: Seo lehe suurus om $1 kilobaiti. Mõnõ võrgokaejaga või ollaq hätä jo 32-kilobaididsõ lehe toimõndamisõga. Märgiq perrä, kas seod lehte andnuq jakaq vähämbis lehis.
    ', 'longpageerror' => "'''VIGA: Lehe suurus om $1 kilobaiti. Taad saa-i pästäq, selle et kõgõ suurõmb lubat suurus om $2 kilobaiti.'''", 'readonlywarning' => "'''HOIATUS: Teedüskogo om huuldustöie jaos lukku pant, nii et parhilla saa-i paranduisi pästäq. Võit teksti alalõ hoitaq tekstifailin ja pästäq taa siiäq peränpoolõ.'''", 'protectedpagewarning' => '
    Taa leht om lukun. Taad saavaq toimõndaq õnnõ kõrraldajaõiguisiga pruukjaq.
    ', @@ -1050,7 +1041,6 @@ Ku ülekaet teedüstü om sama pilt alguperälidsen suurusõn, sis olõ-i vaia e 'file-thumbnail-no' => "Teedüstü nimi nakkas pääle '''$1'''. Taa paistus ollõv vähändet pilt ''(thumbnail)''. Ku sul om olõman taa pilt tävven suurusõn, sis laadiq üles tuu, ku olõ-i, sis muudaq teedüstü nimi ärq.", 'fileexists-forbidden' => 'Sääntse nimega teedüstü om jo olõman. Pästäq teedüstü tõõsõ nimega. Parhillanõ teedüstü: [[File:$1|thumb|center|$1]]', 'fileexists-shared-forbidden' => 'Sama nimega teedüstü om jo olõman jaetuidõ teedüstüide hulgan. Pästäq teedüstü mõnõ tõõsõ nime ala. Parhillanõ teedüstü: [[File:$1|thumb|center|$1]]', -'successfulupload' => "Üleslaatminõ läts' kõrda", 'uploadwarning' => 'Üleslaatmishoiatus', 'savefile' => 'Pästäq teedüstü ärq', 'uploadedimage' => 'laadõ üles "$1"', @@ -1066,6 +1056,7 @@ Ku ülekaet teedüstü om sama pilt alguperälidsen suurusõn, sis olõ-i vaia e 'upload-wasdeleted' => "'''Hoiatus: Sa proovit üles laatiq teedüstüt, miä om innemb ärq kistutõt.''' Kas olõt kimmäs, et tahat taad üles laatiq? Kaeq ka sissekirotust taa teedüstü ärqkistutamisõ kotsilõ:", +'upload-success-subj' => "Üleslaatminõ läts' kõrda", 'upload-proto-error' => 'Viganõ protokoll', 'upload-proto-error-text' => 'Üles saa laatiq õnnõ aadrõssidõ päält, mink alostusõn om http:// vai ftp://.', @@ -1321,7 +1312,6 @@ ja sul piät umin [[Special:Preferences|säädmiisin]] olõma e-postiaadrõs, et # Watchlist 'watchlist' => 'Perräkaemisnimekiri', 'mywatchlist' => 'mu perräkaemisnimekiri', -'watchlistfor' => "(pruukjalõ '''$1''')", 'nowatchlist' => 'Perräkaemisnimekiri om tühi.', 'watchlistanontext' => 'Perräkaemisnimekirä pruukmisõs $1.', 'watchnologin' => 'Olõ-i nimega sisse mint', @@ -1417,6 +1407,8 @@ Kelläaoq ummaq serveriao perrä.', 'alreadyrolled' => 'Pruukja [[User:$2|$2]] ([[User talk:$2|arotus]]) tettüid lehe [[:$1]] muutmiisi saa-i tagasi võttaq, selle et pruukja [[User:$3|$3]] ([[User talk:$3|arotus]]) om tennüq vahtsõmbit muutmiisi.', 'editcomment' => "Toimõndamiskokkovõtõq oll': \"''\$1''\".", 'revertpage' => 'Pruukja [[Special:Contributions/$2|$2]] ([[User_talk:$2|arotus]]) toimõndusõq pöörediq tagasi ja leht panti tagasi pruukja [[User:$1|$1]] tettü kujo pääle.', + +# Edit tokens 'sessionfailure' => 'Paistus ollõv määnegi hädä su toimõndamiskõrraga, tuuperäst om viimäne muutminõ egäs johtumisõs jätet tegemäldä. Vaodaq võrgokaeja "tagasi"-nuppi, laadiq üle lehekülg, kost sa tullit ja prooviq vahtsõst.', # Protect @@ -1567,7 +1559,6 @@ Perämäidsi kistutuisi ja tagasitegemiisi saat kaiaq [[Special:Log/delete|kistu 'ipb-edit-dropdown' => 'Toimõndaq kinniqpidämise põhjuisi', 'ipb-unblock-addr' => 'Lõpõdaq pruukja $1 kinniqpidämine ärq', 'ipb-unblock' => 'Lõpõdaq pruukja vai puutri võrgoaadrõasi kinniqpidämine ärq', -'ipb-blocklist-addr' => 'Näütäq pruukja $1 kinniqpidämiisi', 'ipb-blocklist' => 'Näütäq kinnniqpidämiisi', 'unblockip' => 'Lõpõdaq puutri võrgoaadrõsi kinniqpidämine ärq', 'unblockiptext' => 'Täüdäq ärq taa vorm, et lõpõtaq ärq pruukja vai puutri võrgoaadrõsi kinniqpidämine', @@ -1898,9 +1889,9 @@ Kokkovõttõria pääle või kirotaq tagasivõtmisõ põhjusõ.', 'imagemaxsize' => 'Pildi seletüslehe pääl näütämise suuruspiir:', 'thumbsize' => 'Väikupildi suurus:', 'file-info' => '$1, MIME-tüüp: $2', -'file-info-size' => '($1×$2 pikslit, $3, MIME-tüüp: $4)', +'file-info-size' => '$1×$2 pikslit, $3, MIME-tüüp: $4', 'file-nohires' => 'Taast terävämpä pilti olõ-i saiaq.', -'svg-long-desc' => '(SVG-teedüstü, põhisuurus $1 × $2 pikslit, teedüstü suurus $3)', +'svg-long-desc' => 'SVG-teedüstü, põhisuurus $1 × $2 pikslit, teedüstü suurus $3', 'show-big-image' => 'Täüsterräv kujo', 'show-big-image-thumb' => 'Proovikaemisõ suurus: $1×$2 pikslit', diff --git a/languages/messages/MessagesWa.php b/languages/messages/MessagesWa.php index 0f567fa6..438026fb 100644 --- a/languages/messages/MessagesWa.php +++ b/languages/messages/MessagesWa.php @@ -58,9 +58,9 @@ $namespaceNames = array( # definixha del cogne po les limeros # (number format definition) # en: 12,345.67 -> wa: 12 345,67 -$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' ); +$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' ); -#$linkTrail = '/^([a-zåâêîôûçéèA-ZÅÂÊÎÔÛÇÉÈ]+)(.*)$/sDu'; +# $linkTrail = '/^([a-zåâêîôûçéèA-ZÅÂÊÎÔÛÇÉÈ]+)(.*)$/sDu'; $linkTrail = '/^([a-zåâêîôûçéè]+)(.*)$/sDu'; # @@ -83,8 +83,7 @@ $messages = array( 'tog-editsection' => "Eployî les loyéns «[candjî]» po candjî rén k' ene seccion", 'tog-editsectiononrightclick' => 'Candjî les seccions avou on dobe-clitch sol tite (JavaScript)', 'tog-showtoc' => "Mostrer l' tåvlea d' ådvins
    (po ls årtikes avou pus di 3 seccions)", -'tog-rememberpassword' => 'Rimimbrer li scret inte les sessions', -'tog-editwidth' => "Li boesse d' aspougnaedje prind tote li lårdjeu", +'tog-rememberpassword' => 'Rimimbrer li scret inte les sessions (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => "Mete les pådjes ki dj' askepeye dins l' djivêye des pådjes shuvowes", 'tog-watchdefault' => "Shuve les årtikes ki dj' fwai ou ki dj' candje", 'tog-watchmoves' => "Radjouter a m' djivêye des shuvous les pådjes ki dji displaece", @@ -364,7 +363,7 @@ Vosse conte a stî ahivé. 'yourname' => "Vosse no d' elodjaedje", 'yourpassword' => 'Vosse sicret', 'yourpasswordagain' => 'Ritapez vosse sicret', -'remembermypassword' => "Rimimbrer m' sicret inte les sessions.", +'remembermypassword' => "Rimimbrer m' sicret inte les sessions (nén dpus ki po $1 {{PLURAL:$1|djoû|djoûs}})", 'yourdomainname' => 'Vosse dominne', 'login' => "S' elodjî", 'nav-login-createaccount' => "Ahiver on conte, udon-bén s' elodjî", @@ -488,7 +487,7 @@ Si vos n' voloz nén scrire cisse pådje chal, clitchîz simplumint sol boton '' 'userjsyoucanpreview' => "'''Racsegne:''' eployîz l' boton «Vey divant» po sayî vosse novea JS divant del schaper.", 'usercsspreview' => "'''Èn rovyîz nén ki c' est djusse on prévoeyaedje di vosse stîle CSS d' uzeu, i n' a nén co stî schapé!'''", 'userjspreview' => "'''Èn rovyîz nén ki c' est djusse on prévoeyaedje/saye di vosse JavaScript d' uzeu, i n' a nén co stî schapé!'''", -'userinvalidcssjstitle' => "'''Asteme:''' I n' a pont d' pea lomêye «$1». Tuzez ki les pådjes .css eyet .js des uzeus eployèt des tite e ptitès letes, metans {{ns:user}}:Toto/monobook.css et nén {{ns:user}}:Toto/Monobook.css.", +'userinvalidcssjstitle' => "'''Asteme:''' I n' a pont d' pea lomêye «$1». Tuzez ki les pådjes .css eyet .js des uzeus eployèt des tite e ptitès letes, metans {{ns:user}}:Toto/vector.css et nén {{ns:user}}:Toto/Vector.css.", 'updated' => '(Ramidré)', 'previewnote' => "'''Èn rovyîz nén ki c' est djusse on prévoeyaedje, li pådje n' est nén co schapêye!'''", 'previewconflict' => 'Ci prévoeyaedje ci mostere kimint kel tecse del boesse di tecse do dzeu sereut håyné si vos decidez di clitchî so «schaper».', @@ -524,10 +523,6 @@ Vos nos acertinez eto ki vos avoz scrît l' tecse vos-minme, oudonbén l' avoz c Si vos n' voloz nén scrire des årtikes ki polèt esse candjîs pa des ôtes, adon nels evoyîz nén chal.
    Vos nos acertinez eto ki vos avoz scrît l' tecse vos-minme, oudonbén l' avoz copyî d' on sourdant libe (voeyoz $1 po pus di racsegnes). '''N' EVOYÎZ NÉN DES TECSES DIZO ABONDROETS SINS PERMISSION!'''", -'longpagewarning' => "'''ASTEME: Cisse pådje fwait $1 kilo-octets; des -betchteus waibes k' i gn a polèt aveut des rujhes po-z aspougnî -des pådjes k' aprepièt ou di pus di 32 ko. -Vos dvrîz tuzer a pårti l' pådje e pus ptits bokets.'''", 'longpageerror' => "'''AROKE: Li tecse ki vos avoz evoyî fwait di pus d' $1 kilo-octets, çou k' est pus ki l' macsimom di $2 kilo-octets. C' est nén possible del schaper sol sierveu.'''", 'readonlywarning' => "'''ASTEME: On-z overe sol båze di dnêyes pol moumint, ey elle a stî metowe e mode seulmint-lére. Do côp, vos n' såroz schaper vos candjmints asteure; motoit vos dvrîz copyî et aclaper l' tecse dins on fitchî da vosse pol poleur rimete pus tård.'''", @@ -803,7 +798,6 @@ ou co po les sons [[$1|thumb]]", 'fileexists-forbidden' => "I gn a ddja on fitchî avou ç' no la; rivnoz s' i vs plait en erî et s' reberwetez l' fitchî dizo èn ôte no. [[File:$1|thumb|center|$1]]", 'fileexists-shared-forbidden' => "I gn a ddja on fitchî avou ç' no la e ridant des fitchîs pårtaedjîs; rivnoz s' i vs plait en erî et s' reberwetez l' fitchî dizo èn ôte no. [[File:$1|thumb|center|$1]]", -'successfulupload' => "L' eberwetaedje a stî comifåt", 'uploadwarning' => "Adviertixhmint so l' eberwetaedje", 'savefile' => "Schaper l' fitchî", 'uploadedimage' => 'eberwetaedje di «[[$1]]»', @@ -814,6 +808,7 @@ ou co po les sons 'sourcefilename' => "No d' fitchî so vosse copiutrece:", 'destfilename' => "No d' fitchî a eployî so {{SITENAME}}:", 'filewasdeleted' => "On fitchî avou ç' no la a ddja stî disfacé. Vos dvrîz loukî å $1 divant d' continouwer.", +'upload-success-subj' => "L' eberwetaedje a stî comifåt", 'upload-file-error' => 'Divintrinne aroke', @@ -1001,7 +996,6 @@ Do côp, c' est nén possibe di lyi evoyî èn emile.", # Watchlist 'watchlist' => 'Pådjes shuvowes', 'mywatchlist' => 'Pådjes shuvowes', -'watchlistfor' => "(po l' uzeu «'''$1'''»)", 'nowatchlist' => 'Vosse djivêye des pådjes a shuve est vude.', 'watchlistanontext' => 'I vs fåt $1 po vey ou candjî les cayets di vosse djivêye des shuvous.', 'watchnologin' => "Vos n' estoz nén elodjî", @@ -1427,7 +1421,7 @@ Totes les accions di rcopiaedje eterwiki sont metowes e [[Special:Log/import|djo 'mediawarning' => "'''Asteme''': Ci fitchî chal pôreut esse evirussé, si vos l' enondez vos pôrîz infecter l' sistinme da vosse.", 'imagemaxsize' => "Limite pol håynaedje ezès pådjes d' imådje:", 'thumbsize' => 'Grandeu po les imådjetes (thumb):', -'file-info-size' => '($1 × $2 picsels, groxheur do fitchî: $3, del sôre "MIME": $4)', +'file-info-size' => '$1 × $2 picsels, groxheur do fitchî: $3, del sôre "MIME": $4', 'show-big-image' => 'Pus grande imådje', 'show-big-image-thumb' => 'Grandeur di ci prevoeyaedje ci : $1 × $2 picsels', diff --git a/languages/messages/MessagesWar.php b/languages/messages/MessagesWar.php index 0aea6f49..d3d638ad 100644 --- a/languages/messages/MessagesWar.php +++ b/languages/messages/MessagesWar.php @@ -49,8 +49,7 @@ $messages = array( 'tog-editsection' => 'Tugoti in seksyon nga pagliwat pinaagi hin [igliwat] nga mga sumpay', 'tog-editsectiononrightclick' => 'Tugoti in pagliwat hin seksyon ha pag klik-ha-tuo dida hin mga ngaran o titulo hin seksyon (nakinahanglan hin JavaScript)', 'tog-showtoc' => 'Igpakita in tabla hin sulod (para hin mga pakli nga sobra hin 3 ka titulo o pagngaran)', -'tog-rememberpassword' => 'Hinumdomi an akon pan-sakob dinhi nga komputadora', -'tog-editwidth' => 'Igpahaluag an kahon hin pagliwat agod magamitan an bug-os nga pabyon o pantalya', +'tog-rememberpassword' => 'Hinumdomi an akon pan-sakob dinhi nga komputadora (para hin maximum nga $1 {{PLURAL:$1|nga adlaw|nga mga adlaw}})', 'tog-watchcreations' => 'Igdugang in mga pakli nga akon ginhimo ngadto han akon angay timan-an', 'tog-watchdefault' => 'Igdugang in mga pakli nga akon ginliwat ngadto han akon angay timan-an', 'tog-watchmoves' => 'Igdugang in mga pakli nga akon ginpamalhin ngadto han akon angay timan-an', @@ -183,31 +182,20 @@ $messages = array( 'faqpage' => 'Project:AGG', # Vector skin -'vector-action-addsection' => 'Igdugang hin himangrawon', -'vector-action-delete' => 'Para-a', -'vector-action-move' => 'Balhina', -'vector-action-protect' => 'Panalipda', -'vector-action-undelete' => 'Igbalik an ginpara', -'vector-action-unprotect' => 'Kuhaa an panalipod', -'vector-namespace-category' => 'Kaarangay', -'vector-namespace-help' => 'Pagbulig nga pakli', -'vector-namespace-image' => 'Fayl', -'vector-namespace-main' => 'Pakli', -'vector-namespace-media' => 'Pakli hin medya', -'vector-namespace-mediawiki' => 'Mensahe', -'vector-namespace-project' => 'Proyekto nga pakli', -'vector-namespace-special' => 'Nalalain nga pakli', -'vector-namespace-talk' => 'Hiruhimangraw', -'vector-namespace-template' => 'Plantilya', -'vector-namespace-user' => 'Pakli hin nágámit', -'vector-view-create' => 'Himo-a', -'vector-view-edit' => 'Igliwat', -'vector-view-history' => 'Kitaa an kaagi', -'vector-view-view' => 'Basaha', -'vector-view-viewsource' => 'Kitaa an ginkuhaan', -'actions' => 'Mga buhat', -'namespaces' => "Mga ngaran-lat'ang", -'variants' => 'Mga pagkadirudilain', +'vector-action-addsection' => 'Igdugang hin himangrawon', +'vector-action-delete' => 'Para-a', +'vector-action-move' => 'Balhina', +'vector-action-protect' => 'Panalipda', +'vector-action-undelete' => 'Igbalik an ginpara', +'vector-action-unprotect' => 'Kuhaa an panalipod', +'vector-view-create' => 'Himo-a', +'vector-view-edit' => 'Igliwat', +'vector-view-history' => 'Kitaa an kaagi', +'vector-view-view' => 'Basaha', +'vector-view-viewsource' => 'Kitaa an ginkuhaan', +'actions' => 'Mga buhat', +'namespaces' => "Mga ngaran-lat'ang", +'variants' => 'Mga pagkadirudilain', 'errorpagetitle' => 'Sayop', 'returnto' => 'Balik ngadto ha $1.', @@ -268,6 +256,8 @@ Damo nga nagamit in gusto sinmulod hini nga pakli. Alayon paghulat makadali san-o ka inmutro pagsulod hin nga pakli utro. $1', +'pool-queuefull' => 'Puno an katitirok nga pila', +'pool-errorunknown' => 'Waray kasabti nga kasaypanan', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Mahitungod han {{SITENAME}}', @@ -404,6 +394,7 @@ Ayaw paghingalimot hin pagbalyo han imo [[Special:Preferences|{{SITENAME}} mga g 'gotaccount' => '¿Mayda kana akawnt? $1.', 'gotaccountlink' => 'Sakob', 'createaccountmail' => 'Ha e-mail', +'createaccountreason' => 'Rason:', 'badretype' => 'Diri naangay an mga tigaman-pagsulod nga im ginbutang', 'userexists' => 'An agnay-hit-nagamit nga im ginbutang in gingamit na. Alayon pagpili hin lain nga ngaran.', @@ -838,6 +829,7 @@ Kitaa an $2 para hin talaan han mga gibag-ohi nga mga ginpamara.', 'tooltip-save' => 'Ig-seyb an imo mga pagbabag-o', # Media information +'file-info-size' => '$1 × $2 nga pixel, kadako han fayl: $3, MIME nga tipo: $4', 'show-big-image' => 'Bug-os nga resolusyon', # Special:NewFiles diff --git a/languages/messages/MessagesWo.php b/languages/messages/MessagesWo.php index ac498184..e1c9a9e7 100644 --- a/languages/messages/MessagesWo.php +++ b/languages/messages/MessagesWo.php @@ -94,8 +94,7 @@ $messages = array( 'tog-editsection' => 'Soppi ab xaaj jaare ko cib lëkkalekaay [Soppi]', 'tog-editsectiononrightclick' => 'Soppi ab xaaj cib cuqub ndeyjoor ci kojam (JavaScript)', 'tog-showtoc' => 'Wone tëralinu ne-ne yi (ngir xët yi ëpp 3 xaaj)', -'tog-rememberpassword' => 'Fattaliku sama baatujàll(cookie)', -'tog-editwidth' => 'Wone palanteeru coppite bi ci yaatuwaay bépp', +'tog-rememberpassword' => 'Fattalikul sama baatujàll (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => 'Yokk ci sama limu toppte xët yi may sos', 'tog-watchdefault' => 'Yokk ci sama limu toppte xët yi may soppi', 'tog-watchmoves' => 'Yokk ci sama limu toppte xët yi may tuddaat', @@ -238,31 +237,20 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Yokkuw tëriit', -'vector-action-delete' => 'Far', -'vector-action-move' => 'Tuddewaat', -'vector-action-protect' => 'Aar', -'vector-action-undelete' => 'Delloowaat', -'vector-action-unprotect' => 'Aaradi', -'vector-namespace-category' => 'Wàll', -'vector-namespace-help' => 'Ndimbal', -'vector-namespace-image' => 'Dencukaay', -'vector-namespace-main' => 'Xët', -'vector-namespace-media' => 'Xëtu xibaarukaay', -'vector-namespace-mediawiki' => 'Bataaxal', -'vector-namespace-project' => 'Xëtu sémb', -'vector-namespace-special' => 'Xëtu jagleel', -'vector-namespace-talk' => 'Diisoo', -'vector-namespace-template' => 'Royuwaay', -'vector-namespace-user' => 'Xëtu jëfandikukat', -'vector-view-create' => 'Sos', -'vector-view-edit' => 'Soppi', -'vector-view-history' => 'Wone jaar-jaaram', -'vector-view-view' => 'Jàng', -'vector-view-viewsource' => 'Wone gongikuwaayam', -'actions' => 'Jëf', -'namespaces' => 'Barabu tur', -'variants' => 'Wuute', +'vector-action-addsection' => 'Yokkuw tëriit', +'vector-action-delete' => 'Far', +'vector-action-move' => 'Tuddewaat', +'vector-action-protect' => 'Aar', +'vector-action-undelete' => 'Delloowaat', +'vector-action-unprotect' => 'Aaradi', +'vector-view-create' => 'Sos', +'vector-view-edit' => 'Soppi', +'vector-view-history' => 'Wone jaar-jaaram', +'vector-view-view' => 'Jàng', +'vector-view-viewsource' => 'Wone gongikuwaayam', +'actions' => 'Jëf', +'namespaces' => 'Barabu tur', +'variants' => 'Wuute', 'errorpagetitle' => 'Njuumte', 'returnto' => 'Dellu ci wii xët $1.', @@ -481,7 +469,7 @@ Bul fatte soppi say [[Special:Preferences|{{SITENAME}} tànneef]].', 'yourname' => 'Sa turu jëfandikukat', 'yourpassword' => 'Sa baatujàll', 'yourpasswordagain' => 'Bindaatal sa baatujàll', -'remembermypassword' => 'Fattaliku sama baatujàll ci bii nosukaay', +'remembermypassword' => 'Denc sama yëgley dukkukaay ci bii joowukaay (lu ëpp nag $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Sa barab', 'externaldberror' => 'Njuumte judd na ci dàttub njoxe bi, walla day ni rekk amuloo sañ-sañu yeesal sa sàqum biti.', 'login' => 'xammeeku', @@ -662,7 +650,7 @@ walla [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE} 'userjsyoucanpreview' => "'''Xelal :''' di la digël nga cuq ci «Wonendi» ngir gis say xobi CSS walla JavaScript yu bees laata nga leen di denc.", 'usercsspreview' => "Bul fatte ne lii wonendib sa CSS rekk la; dencagoo say coppite!'''", 'userjspreview' => "'''Bul fatte ne lii ab wonendib sa yoonu javaScript rekk la; dencagoo say coppite!'''", -'userinvalidcssjstitle' => "'''Moytul :''' amul genn col gu tudd « $1 ». Bul fatte ne xët yiy jeexee .css ak .js seeni koj ay araf yu tuut ñoo ciy tegu/.
    ci misaal, {{ns:user}}:Foo/'''m'''onobook.css moo baax, waaye bii du baax {{ns:user}}:Foo/'''M'''onobook.css .", +'userinvalidcssjstitle' => "'''Moytul :''' amul genn col gu tudd « $1 ». Bul fatte ne xët yiy jeexee .css ak .js seeni koj ay araf yu tuut ñoo ciy tegu/.
    ci misaal, {{ns:user}}:Foo/'''v'''ector.css moo baax, waaye bii du baax {{ns:user}}:Foo/'''V'''ector.css .", 'updated' => '(bees na)', 'note' => "'''Karmat :'''", 'previewnote' => "'''Lii ab wonendi rekk la; coppite yi ci xët wi dencagoo leen!'''", @@ -698,8 +686,6 @@ Te it na wóor ne li nga fiy dugal yaa leen moom, yaa leen bind, walla fa nga le Soo bëggul keneen jël say mbind soppi leen, tas leen teg ci, bu leen fi dugal.
    Te it na wóor ne li nga fiy dugal yaa leen moom, yaa leen bind, walla fa nga leen jële gongikuwaay bu ubbeeku la, lu kenn moomul (xoolal $1 ngir yeneeni xamle). '''BUL FI DUGAL LIGGÉEYI KENEEN YU AQI AJI-SOS AAR TE AMOO CI BENN NDIGËL!'''", -'longpagewarning' => "'''Muytul: guddaayu xët wi dafa romb $1 Kio ; -yenn joowukaay yi, man nañoo wone ay jafe-jafe ci bu ñuy soppi xët yi romb dayoob 32 Kio. Li doon gën mooy nga séddatle ko ci ay xaaj yu bari.'''", 'longpageerror' => "'''NJUUMTE : mbind mi nga yónne guddee na $1 kio, kon romb na dig bi di $2 kio. Mbind mi maneesu kaa denc.'''", 'readonlywarning' => "'''Moytul: dàttub njoxe bi dañu koo caabi ngir ay liggéey, kon doo man a denc say coppite fi mu nekk nii. Man ngaa duppi mbind mi taf ko cib tëriin bu ñuy binde te taaxirlu ñu ubbi dàttub njoxe bi.''' @@ -1073,7 +1059,7 @@ Jéemala bindaale ''all'' ngir seet ci biir ëmbit gépp (boolewaale ci xëti wa 'prefs-advancedrendering' => 'Tànneef yu xóot', 'prefs-advancedsearchoptions' => 'Tànneef yu xóot', 'prefs-advancedwatchlist' => 'Tànneef yu xóot', -'prefs-display' => 'Tànneefi wonewiin', +'prefs-displayrc' => 'Tànneefi wonewiin', 'prefs-diffs' => 'Wuute', # User rights @@ -1176,7 +1162,6 @@ Jéemala bindaale ''all'' ngir seet ci biir ëmbit gépp (boolewaale ci xëti wa 'right-siteadmin' => 'Caabi walla caabeedi dàttub njoxe bi', 'right-reset-passwords' => 'Soppi baatujàllub ay jëfandikukat', 'right-override-export-depth' => 'génne ay xët yu ëmbi xët yu lëkkaloo ba-ci xóotaay bu tolluwaayam àgg 5', -'right-versiondetail' => 'Wone xamle yu matale ci sumbi tëriin wi', # User rights log 'rightslog' => 'Sañ-sañi jëfandikukat', @@ -1224,13 +1209,9 @@ Jéemala bindaale ''all'' ngir seet ci biir ëmbit gépp (boolewaale ci xëti wa 'recentchanges-legend' => 'tànneefi coppite yu mujj', 'recentchangestext' => 'Toppal ci wii xët coppite yu mujj ci {{SITENAME}}.', 'recentchanges-feed-description' => 'Toppal coppite yu mujj yu bii wiki.', -'recentchanges-legend-newpage' => '$1 - xët wu bees', 'recentchanges-label-newpage' => 'Coppite gi sos na xët wu bees', -'recentchanges-legend-minor' => '$1 - Coppite yu néewal', 'recentchanges-label-minor' => 'Coppite gu néewal la', -'recentchanges-legend-bot' => '$1 - coppiteb bot', 'recentchanges-label-bot' => 'Coppite bu ab bot def', -'recentchanges-legend-unpatrolled' => '$1 - coppite bees fugluwul', 'recentchanges-label-unpatrolled' => 'Coppite bii kenn fugloogu ko', 'rcnote' => '{{PLURAL:$1|Lii mooy coppite bu mujj bees def|Yii ñooy coppite yu mujj yees def}} ci {{PLURAL:$2|bés bu mujj bi|$2 bés yu mujj yi}}; njoxe yi ñoo ngi leen yeesal $5 ci $4.', 'rcnotefrom' => "Yii ñooy coppite yi dalee '''$2''' (ba '''$1''').", @@ -1317,7 +1298,6 @@ Tànnal weneen tur.", [[File:$1|thumb|center|$1]]', 'fileexists-shared-forbidden' => 'Am na ŋara wu ni tudd ba noppi ci dencuwaayu ŋara bi ñuy bokk; Dellul ginnaaw ngir yeb ŋara wi ak weneen tur. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'ŋara wi ñaaralub {{PLURAL:$1| ŋara wii di toftal la| ŋara yii di toftal lañu}} :', -'successfulupload' => 'Yeb gi jàll na', 'uploadwarning' => 'Moytul !', 'savefile' => 'Denc dencukaay bi', 'uploadedimage' => 'Yeb na « [[$1]] »', @@ -1336,6 +1316,7 @@ Tànnal weneen tur.", Jaar-jaaru far gi man na laa dimbali ci nga see ndaxam jar na nga yebaat ko.", 'filename-bad-prefix' => "Turu dencukaay bi ngay yeb moo ngi tambalee '''\"\$1\"''', te muy tur wu nosukaay bi di joxal boppam nataalukaay yi. Dila ñaan nga tànn tur wuy faramfacce dencukaay bi.", +'upload-success-subj' => 'Yeb gi jàll na', # Special:ListFiles 'imgfile' => 'Dencukaay', @@ -1454,7 +1435,6 @@ Bul fattee seet baxam amul yeneen lëkkalekaay yu lay jëmale ci royuwaay yi bal 'statistics-edits' => 'Coppitey xët yi dalee ca campug {{SITENAME}}', 'statistics-views-total' => 'Mbooleem saytu yi', 'statistics-views-peredit' => 'Saytu ngir soppi', -'statistics-jobqueue' => 'Guddaayu [http://www.mediawiki.org/wiki/Manual:Job_queue liggéey] biy xaar', 'statistics-users' => '[[Special:ListUsers|Jëfandikukat]] yi bindu', 'statistics-users-active' => 'Jëfandikukat yu yëngu', 'statistics-users-active-desc' => 'Jëfandikukat yi amal ag yëngu-yëngu ci {{PLURAL:$1|bés bu mujj bi|$1 bés yu mujj yi}}', @@ -1663,7 +1643,6 @@ Man ngaa fee gis itam [[{{MediaWiki:Listgrouprights-helppage}}|yeneen xibaar]] # Watchlist 'watchlist' => 'Limu toppte', 'mywatchlist' => 'Limu toppte', -'watchlistfor' => "(yu jëfandikukat '''$1''')", 'nowatchlist' => 'Sa limu toppte amul benn jukki.', 'watchlistanontext' => 'Ngir mana gis walla soppi jëfkayu sa limu toppte, faw nga $1.', 'watchnologin' => 'Duggoo de', @@ -1749,7 +1728,9 @@ Ki mujje soppi xët wi mooy [[User:$3|$3]] ([[User talk:$3|Waxtaan]]{{int:pipe-s 'revertpage' => 'Loppantig coppite gu [[Special:Contributions/$2|$2]] ([[User talk:$2|Waxtaan]]) dello ko ci sumb mu [[User:$1|$1]]', 'rollback-success' => 'Ki loppanti mooy $1 ; Ki ko dello ci sumb mu mujj mi mooy $2.', -'sessionfailure' => 'Dafa mel ne sa dugg gi am na ay tolof-tolof ; + +# Edit tokens +'sessionfailure' => 'Dafa mel ne sa dugg gi am na ay tolof-tolof ; Noste gi téye na sag dugg ngir wattu kaaraange. Di la ñaan nga dellu ginnaaw te yesalaat xët wa jóge, te jéemaat', @@ -1923,7 +1904,6 @@ Xoolal [[Special:IPBlockList|limu IP yees téye]] ngir gis ñees téye ñépp.', 'ipb-edit-dropdown' => 'Soppi ngirtey téye gi', 'ipb-unblock-addr' => 'Téyedi $1', 'ipb-unblock' => 'Téyedi ab turu jëfandikukat walla ab màkkaanub IP', -'ipb-blocklist-addr' => 'Téye yi teew yu $1', 'ipb-blocklist' => 'Xool téye yi teew', 'ipb-blocklist-contribs' => 'Cëru yu $1', 'unblockip' => 'Téyedi jëfandikukat bi', @@ -2208,9 +2188,9 @@ Dafay tax nga man a bind ngirte li ci boyotu tënk bi.', # Media information 'file-info' => 'Réyaayu file bi : $1, type MIME : $2', -'file-info-size' => '($1 × $2 pixels, réyaayu file bi : $3, type MIME : $4)', +'file-info-size' => '$1 × $2 pixels, réyaayu file bi : $3, type MIME : $4', 'file-nohires' => 'Amul kem bu ëpp bii bu jàppandi.', -'svg-long-desc' => '(Dencukaay SVG, kem bu jaadu $1 × $2 pixel, dayoo dencukaay bi: $3)', +'svg-long-desc' => 'Dencukaay SVG, kem bu jaadu $1 × $2 pixel, dayoo dencukaay bi: $3', 'show-big-image' => 'Ngandalal nataal gii', 'show-big-image-thumb' => 'Dayoob wonendi gi : $1 × $2 pixel', diff --git a/languages/messages/MessagesWuu.php b/languages/messages/MessagesWuu.php index cee365a3..8f9b31d0 100644 --- a/languages/messages/MessagesWuu.php +++ b/languages/messages/MessagesWuu.php @@ -31,7 +31,7 @@ $messages = array( 'tog-editsection' => '允许通过点击【编辑】链接来编辑段落', 'tog-editsectiononrightclick' => '允许右击标题编辑段落(JavaScript)', 'tog-showtoc' => '显示目录(针对超过三只标题个页面)', -'tog-rememberpassword' => '登该台电脑浪记牢我个登录', +'tog-rememberpassword' => '来许箇台电脑上记牢我个密码(可维持$1{{PLURAL:$1|日|日}})', 'tog-watchcreations' => '拿我创建个页面添加到我个监控列表里向', 'tog-watchdefault' => '拿我编辑个页面添加到我个监控列表里向', 'tog-watchmoves' => '拿我移动个页面添加到我个监控列表里向', @@ -175,31 +175,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => '加入话题', -'vector-action-delete' => '删除', -'vector-action-move' => '移动', -'vector-action-protect' => '保护', -'vector-action-undelete' => '反删除', -'vector-action-unprotect' => '反保护', -'vector-namespace-category' => '分类', -'vector-namespace-help' => '帮助页', -'vector-namespace-image' => '文件', -'vector-namespace-main' => '页面', -'vector-namespace-media' => '媒体页面', -'vector-namespace-mediawiki' => '讯息', -'vector-namespace-project' => '项目页面', -'vector-namespace-special' => '特殊页面', -'vector-namespace-talk' => '讨论', -'vector-namespace-template' => '模板', -'vector-namespace-user' => '用户页面', -'vector-view-create' => '创建', -'vector-view-edit' => '编辑', -'vector-view-history' => '望历史', -'vector-view-view' => '阅读', -'vector-view-viewsource' => '查看源码', -'actions' => '动作', -'namespaces' => '名字空间', -'variants' => '变量', +'vector-action-addsection' => '加入话题', +'vector-action-delete' => '删除', +'vector-action-move' => '移动', +'vector-action-protect' => '保护', +'vector-action-undelete' => '反删除', +'vector-action-unprotect' => '反保护', +'vector-simplesearch-preference' => '打开高级搜索建议(仅适用于Vector皮肤)', +'vector-view-create' => '创建', +'vector-view-edit' => '编辑', +'vector-view-history' => '望历史', +'vector-view-view' => '阅读', +'vector-view-viewsource' => '查看源码', +'actions' => '动作', +'namespaces' => '名字空间', +'variants' => '变量', 'errorpagetitle' => '错误', 'returnto' => '回转到$1。', @@ -412,7 +402,7 @@ $2', 'yourname' => '用户名:', 'yourpassword' => '密码:', 'yourpasswordagain' => '再拍一遍密码:', -'remembermypassword' => '登该台电脑浪记牢我个登录', +'remembermypassword' => '垃拉箇部电脑上记牢我个密码(可维持$1{{PLURAL:$1|日|日}})', 'yourdomainname' => '侬个域名:', 'externaldberror' => '迭个作兴是由于验证数据库错误或者侬拨禁止更新侬个外部账号。', 'login' => '登录', @@ -429,6 +419,7 @@ $2', 'gotaccount' => "已经有仔帐号哉? '''$1'''。", 'gotaccountlink' => '登录', 'createaccountmail' => '通过 e-mail', +'createaccountreason' => '理由:', 'badretype' => '倷输入个密码搭倪个档案弗配。', 'userexists' => '箇只ID已经拨注册脱哉。请重新再拣个用户名。', 'loginerror' => '登录错误', @@ -530,8 +521,10 @@ $2', 'showlivepreview' => '实时预览', 'showdiff' => '显示改动', 'anoneditwarning' => "'''警告:''' 侬弗曾登录。侬个IP地址会得记录拉页面个编辑历史里向。", +'anonpreviewwarning' => "''侬弗曾登录。侬个IP位址会得记录拉此页个编辑历史里向。''", 'missingsummary' => "'''提示:''' 侬弗曾提供编辑摘要。假使侬再次单击保存,侬个编辑将弗带编辑摘要保存。", 'missingcommenttext' => '请垃下头输入备注。', +'missingcommentheader' => "'''提示:''' 侬弗曾为此评论提供只标题。如果侬再次单击“{{int:savearticle}}”,侬个编辑将弗带标题保存。", 'summary-preview' => '摘要预览:', 'subject-preview' => '主题 / 标题 预览:', 'blockedtitle' => '用户拨查封', @@ -599,7 +592,7 @@ $2', '''还弗曾保存!'''", 'userjspreview' => "'''注意侬只是垃许测试/预览侬个 JavaScript。''' '''还弗曾保存!'''", -'userinvalidcssjstitle' => "'''警告:''' 弗存在皮肤\"\$1\"。注意自定义个 .css 搭 .js 页要使用小写标题,譬如,{{ns:user}}:Foo/monobook.css 弗同于 {{ns:user}}:Foo/Monobook.css。", +'userinvalidcssjstitle' => "'''警告:''' 弗存在皮肤\"\$1\"。注意自定义个 .css 搭 .js 页要使用小写标题,譬如,{{ns:user}}:Foo/vector.css 弗同于 {{ns:user}}:Foo/Vector.css。", 'updated' => '(已更新)', 'note' => "'''注意:'''", 'previewnote' => "'''该个还只是预览;改动还朆保存!'''", @@ -635,8 +628,6 @@ $2', 假使侬弗希望侬个文字畀任意修改搭仔再发布,请弗要提交。
    侬同时也要向我伲保证侬提交个内容是侬自家所作,或得自一个弗受版权保护或相似自由个来源(参阅$1个细节)。 ''' 弗要垃拉弗曾获得授权个情况下头发表!'''", -'longpagewarning' => "'''警告''':箇页面个长度是$1KB;一些浏览器垃拉编辑长度接近或大于32KB个页面作兴存在问题。 -侬应该考虑拿箇只页面分成功更加小个章节。", 'longpageerror' => "'''错误:侬提交个文本长度有$1KB,大于$2KB个顶大值。'''该文本弗能保存。", 'readonlywarning' => "'''警告:数据库锁定垃许维护,侬箇歇弗好保存侬个修改。'''侬作兴希望先拿本段文字复制并保存到文本文件,等歇再修改。 @@ -810,6 +801,8 @@ $1", 'logdelete-failure' => "'''事件个可见性无法设置:''' $1", 'revdel-restore' => '更改可见性', +'revdel-restore-deleted' => '已删除个修订版本', +'revdel-restore-visible' => '可见个修订版本', 'pagehist' => '页面历史', 'deletedhist' => '已删除之历史', 'revdelete-content' => '内容', @@ -912,6 +905,7 @@ $1", 'searchprofile-everything-tooltip' => '搜索全部(包括讨论页面)', 'searchprofile-advanced-tooltip' => '垃拉自定义名字空间里向搜索', 'search-result-size' => '$1($2字)', +'search-result-category-size' => '$1位成员($2个子分类,$3个文件)', 'search-result-score' => '相关度:$1%', 'search-redirect' => '(重定向 $1)', 'search-section' => '(段落 $1)', @@ -1083,34 +1077,34 @@ $1", 'recentchangeslinked-to' => '显示链接到指定页面个页面个改动', # Upload -'upload' => '上载文物', -'uploadbtn' => '上载文件', -'uploadnologin' => '朆登录', -'uploadnologintext' => '倷板定要[[Special:UserLogin|登录]]仔再好上载文件。', -'uploaderror' => '上载出错', -'uploadtext' => "拿下头只表格来上载文件。要查看或者搜寻之前上载个图片个说法,请到[[Special:FileList|已上载文件列表]],上载搭仔删脱也记录勒拉[[Special:Log/upload|上载日志]]里向。 +'upload' => '上载文物', +'uploadbtn' => '上载文件', +'uploadnologin' => '朆登录', +'uploadnologintext' => '倷板定要[[Special:UserLogin|登录]]仔再好上载文件。', +'uploaderror' => '上载出错', +'uploadtext' => "拿下头只表格来上载文件。要查看或者搜寻之前上载个图片个说法,请到[[Special:FileList|已上载文件列表]],上载搭仔删脱也记录勒拉[[Special:Log/upload|上载日志]]里向。 要勒拉页面里向摆进图片个说法,用下头该种形式个链接 '''[[{{ns:file}}:文件.jpg]]''', '''[[{{ns:file}}:文件.png|替代文本]]''' 或者用 '''[[{{ns:media}}:文件.ogg]]''' 直接链到文件。", -'uploadlog' => '文件上载日志', -'uploadlogpage' => '文件上载日志', -'uploadlogpagetext' => '下底是最近上载文件列表。', -'filename' => '文件名', -'filedesc' => '小结', -'fileuploadsummary' => '小结:', -'filestatus' => '版权状态:', -'filesource' => '来源:', -'uploadedfiles' => '已经上载个文件', -'ignorewarning' => '弗管警告,随便哪亨要保存文件。', -'successfulupload' => '上载成功哉', -'uploadwarning' => '上载警告', -'savefile' => '保存文件', -'uploadedimage' => '上载 "[[$1]]"', -'sourcefilename' => '源文件:', -'destfilename' => '目标文件名:', -'watchthisupload' => '监控该只页面', +'uploadlog' => '文件上载日志', +'uploadlogpage' => '文件上载日志', +'uploadlogpagetext' => '下底是最近上载文件列表。', +'filename' => '文件名', +'filedesc' => '小结', +'fileuploadsummary' => '小结:', +'filestatus' => '版权状态:', +'filesource' => '来源:', +'uploadedfiles' => '已经上载个文件', +'ignorewarning' => '弗管警告,随便哪亨要保存文件。', +'uploadwarning' => '上载警告', +'savefile' => '保存文件', +'uploadedimage' => '上载 "[[$1]]"', +'sourcefilename' => '源文件:', +'destfilename' => '目标文件名:', +'watchthisupload' => '监控该只页面', +'upload-success-subj' => '上载成功哉', # Special:ListFiles 'listfiles_search_for' => '寻图片名字:', @@ -1252,7 +1246,6 @@ $1", # Watchlist 'watchlist' => '监控列表', 'mywatchlist' => '我个监控列表', -'watchlistfor' => "('''$1'''个监控列表)", 'nowatchlist' => '倷个监控列表是空个。', 'watchnologin' => '朆登录', 'addedwatch' => '加到监控列表哉', @@ -1523,9 +1516,9 @@ $1", 'nextdiff' => '新版→', # Media information -'file-info-size' => '($1×$2像素,文件大小:$3,MIME类型:$4)', +'file-info-size' => '$1×$2像素,文件大小:$3,MIME类型:$4', 'file-nohires' => '无更高分辨率可提供。', -'svg-long-desc' => '(SVG文件,名义大小:$1×$2像素,文件大小:$3)', +'svg-long-desc' => 'SVG文件,名义大小:$1×$2像素,文件大小:$3', 'show-big-image' => '完整分辨率', 'show-big-image-thumb' => '迭幅缩略图个分辨率:$1×$2像素', diff --git a/languages/messages/MessagesXal.php b/languages/messages/MessagesXal.php index 6871838a..6f9d85e2 100644 --- a/languages/messages/MessagesXal.php +++ b/languages/messages/MessagesXal.php @@ -27,7 +27,7 @@ $namespaceNames = array( NS_FILE_TALK => 'Боомгин_туск_меткән', NS_MEDIAWIKI => 'MediaWiki', NS_MEDIAWIKI_TALK => 'MediaWiki_туск_меткән', - NS_TEMPLATE => 'Зура', + NS_TEMPLATE => 'Кевләр', NS_TEMPLATE_TALK => 'Зуран_туск_меткән', NS_HELP => 'Цәәлһлһн', NS_HELP_TALK => 'Цәәлһлһин_туск_меткән', @@ -44,6 +44,7 @@ $namespaceAliases = array( 'Зург' => NS_FILE, 'Зургин_тускар_ухалвр' => NS_FILE_TALK, 'MediaWiki_тускар_ухалвр' => NS_MEDIAWIKI_TALK, + 'Зура' => NS_TEMPLATE, 'Зуран_тускар_ухалвр' => NS_TEMPLATE_TALK, 'Цəəлһлһн' => NS_HELP, 'Цəəлһлһин_тускар_ухалвр' => NS_HELP_TALK, @@ -67,8 +68,7 @@ $messages = array( 'tog-editsection' => '«Чиклх» заавр болвчн хүвд үзүлх', 'tog-editsectiononrightclick' => 'Һарчига барун индстлһар хүвиг чиклх (JavaScript кергтә)', 'tog-showtoc' => 'Һарг үзүлх (3 икәр толһата халхсд)', -'tog-rememberpassword' => 'Намаг эн тоолдврд тодлх', -'tog-editwidth' => 'Чикллһнә тег цуг харата болулх', +'tog-rememberpassword' => 'Намаг эн тоолдврт тодлх ($1 {{PLURAL:$1|өдрт|өдрмүдт}} икәр биш)', 'tog-watchcreations' => 'Би эврәннь немгдсн халхс шинҗллһнә сеткүлд немх', 'tog-watchdefault' => 'Би эврәннь чиклсн халхс шинҗллһнә сеткүлд немх', 'tog-watchmoves' => 'Би эврәннь көндсн халхс шинҗллһнә сеткүлд немх', @@ -212,31 +212,20 @@ $messages = array( 'faqpage' => 'Project:Юм би', # Vector skin -'vector-action-addsection' => 'Төриг немх', -'vector-action-delete' => 'Һарһх', -'vector-action-move' => 'Көндәх', -'vector-action-protect' => 'Харсх', -'vector-action-undelete' => 'Һарһх биш', -'vector-action-unprotect' => 'Харсх биш', -'vector-namespace-category' => 'Әәшл', -'vector-namespace-help' => 'Цәәлһлһнә халх', -'vector-namespace-image' => 'Боомг', -'vector-namespace-main' => 'Халх', -'vector-namespace-media' => 'Аһарин халх', -'vector-namespace-mediawiki' => 'Зәңг', -'vector-namespace-project' => 'Төслин халх', -'vector-namespace-special' => 'Көдлхнә халх', -'vector-namespace-talk' => 'Меткән', -'vector-namespace-template' => 'Кевләр', -'vector-namespace-user' => 'Демнчна халх', -'vector-view-create' => 'Бүтәх', -'vector-view-edit' => 'Чиклх', -'vector-view-history' => 'Тууҗин хәләвр', -'vector-view-view' => 'Умшлһн', -'vector-view-viewsource' => 'Темдгллһнә хәләвр', -'actions' => 'Үүлд', -'namespaces' => 'Нернә ус', -'variants' => 'Суңһлтс', +'vector-action-addsection' => 'Төриг немх', +'vector-action-delete' => 'Һарһх', +'vector-action-move' => 'Көндәх', +'vector-action-protect' => 'Харсх', +'vector-action-undelete' => 'Һарһх биш', +'vector-action-unprotect' => 'Харсх биш', +'vector-view-create' => 'Бүтәх', +'vector-view-edit' => 'Чиклх', +'vector-view-history' => 'Тууҗин хәләвр', +'vector-view-view' => 'Умшлһн', +'vector-view-viewsource' => 'Темдгллһнә хәләвр', +'actions' => 'Үүлд', +'namespaces' => 'Нернә ус', +'variants' => 'Суңһлтс', 'errorpagetitle' => 'Эндү', 'returnto' => '«$1» тал хәрү ирх.', @@ -424,7 +413,7 @@ $1', 'yourname' => 'Демнчна нернь:', 'yourpassword' => 'Нууц үг:', 'yourpasswordagain' => 'Нууц үгиг давтн:', -'remembermypassword' => 'Мини нерн эн тоолдврд тодлх', +'remembermypassword' => 'Намаг эн тоолдврд тодлх ($1 {{PLURAL:$1|өдрт|өдрмүдт}} икәр биш)', 'yourdomainname' => 'Тана домен:', 'login' => 'Орлһн', 'nav-login-createaccount' => 'Харһх / бичгдлһн кех', @@ -522,7 +511,7 @@ $1', 'userjsyoucanpreview' => "'''Селвг:''' тана шин JS боомг шүүҗ хадһлар, «{{int:showpreview}}» товч олзлтн.", 'usercsspreview' => "'''Тана CSS боомгин мел хәләвр бәәдг тускар тодлтн, тер ода чигн хадһлсн уга!'''", 'userjspreview' => "'''Тана JavaScript боомгин мел хәләвр бәәдг тускар тодлтн. Тана сольлһн ода чигн хадһлсн уга!'''", -'userinvalidcssjstitle' => "'''Оньг өгтн:''' «$1» гидг нерәдлһтә хувцнь олҗ биш. Күүнә .css болн .js халхс һанцхн бичкн үзгүдтә бичсн кергтә, үлгүрнь «{{ns:user}}:Болвчн/monobook.css»; «{{ns:user}}:Болвчн/Monobook.css» - буру.", +'userinvalidcssjstitle' => "'''Оньг өгтн:''' «$1» гидг нерәдлһтә хувцнь олҗ биш. Күүнә .css болн .js халхс һанцхн бичкн үзгүдтә бичсн кергтә, үлгүрнь «{{ns:user}}:Болвчн/vector.css»; «{{ns:user}}:Болвчн/Vector.css» - буру.", 'updated' => '(Шинрүлсн)', 'note' => "'''Аҗгллһн:'''", 'previewnote' => "'''Эн мел хәләвр бәәдг тускар тодлтн.''' @@ -750,12 +739,8 @@ $1', 'recentchanges-legend' => 'Шидрә сольлһна көгүд', 'recentchangestext' => 'Эн цагин дараһар бичсн шидрә сольлһн', 'recentchanges-feed-description' => 'Эн зәңгллһд шидрә хүврһд шинҗлх.', -'recentchanges-label-legend' => 'Тәәлвр: $1.', -'recentchanges-legend-newpage' => '$1 — шин халх', 'recentchanges-label-newpage' => 'Тер үүләр шин халх бүтәв', -'recentchanges-legend-minor' => '$1 — баһ сольлһн', 'recentchanges-label-minor' => 'Эн баһ чинртә сольлһн', -'recentchanges-legend-bot' => '$1 — көдлврә сольлһн', 'recentchanges-label-bot' => 'Эн сольлһн көдлвр (робот) кехв', 'rcnote' => "{{PLURAL:$1|'''$1''' шидрә сольлһн|'''$1''' шидрә сольлһн|'''$1''' шидрә сольлһн}}, '''$2''' өдрә, $5 $4 цагин.", 'rclistfrom' => 'Тер цагас авн сольлһн үзүлх: $1.', @@ -788,17 +773,17 @@ $1', 'recentchangeslinked-to' => 'Зөрүһәр, эн халхд заалдг халхсин хүврлһиг үзүлх', # Upload -'upload' => 'Боомгиг тәвх', -'uploadbtn' => 'Боомгиг тәвх', -'uploadnologintext' => 'Та [[Special:UserLogin|харһх]] кергтә.', -'uploaderror' => 'Тәвллһнә эндү', -'uploadlogpage' => 'Тәвллһнә сеткүл', -'filename' => 'Боомгна нернь', -'filedesc' => 'Учр-утх', -'fileuploadsummary' => 'Учр-утх:', -'successfulupload' => 'Йовудта тәвллһн', -'savefile' => 'Хадһлх', -'uploadedimage' => '«[[$1]]» тәвв', +'upload' => 'Боомгиг тәвх', +'uploadbtn' => 'Боомгиг тәвх', +'uploadnologintext' => 'Та [[Special:UserLogin|харһх]] кергтә.', +'uploaderror' => 'Тәвллһнә эндү', +'uploadlogpage' => 'Тәвллһнә сеткүл', +'filename' => 'Боомгна нернь', +'filedesc' => 'Учр-утх', +'fileuploadsummary' => 'Учр-утх:', +'savefile' => 'Хадһлх', +'uploadedimage' => '«[[$1]]» тәвв', +'upload-success-subj' => 'Йовудта тәвллһн', 'license' => 'Закан:', 'license-header' => 'Закан:', @@ -848,7 +833,6 @@ $1', 'statistics-edits-average' => 'Халхарн сольлһна то', 'statistics-views-total' => 'Цуг хәләврин то', 'statistics-views-peredit' => 'Сольлһарн хәләврин то', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue Даалһврин дарана] кемҗән', 'statistics-users' => 'Бичгдлһтә [[Special:ListUsers|демнчнр]]', 'statistics-users-active' => 'Үүлтә демнчнр', 'statistics-users-active-desc' => '{{PLURAL:$1|$1 өдрт|$1 өдрмүдт|$1 өдрмүдт}} болв чигн үүл кесн демнчнр', @@ -900,7 +884,6 @@ $1', # Watchlist 'watchlist' => 'Шинҗллһнә сеткүл', 'mywatchlist' => 'Шинҗллһнә сеткүл', -'watchlistfor' => "('''$1''' төлә)", 'addedwatch' => 'Шинҗллһнә сеткүлд немв.', 'addedwatchtext' => "«[[:$1]]» гидг нерәдлһтә халх тана [[Special:Watchlist|шинҗллһнә сеткүлд]] немв. Тегәд тер халхна болн терүнә ухалврин сольлһн энд шиҗлсн болх. Эн халх '''тарһн'' үзгәр [[Special:RecentChanges|шидрә сольлһна]] халхд бичсн (амр умшхар) болх.", @@ -1166,10 +1149,10 @@ $2 шидрә һарһлһна төлә хәләтн.', 'nextdiff' => 'Дарук сольлһн →', # Media information -'file-info' => '(боомгин кемҗә: $1, MIME төрл: $2)', -'file-info-size' => '($1 × $2 цегтә, боомгин кемҗән: $3, MIME янз: $4)', +'file-info' => 'боомгин кемҗә: $1, MIME төрл: $2', +'file-info-size' => '$1 × $2 цегтә, боомгин кемҗән: $3, MIME янз: $4', 'file-nohires' => 'Икәр чинртә янз уга.', -'svg-long-desc' => '(SVG боомг, $1 × $2 мет цегтә, боомгин кемҗән: $3)', +'svg-long-desc' => 'SVG боомг, $1 × $2 мет цегтә, боомгин кемҗән: $3', 'show-big-image' => 'Күцц чинр', 'show-big-image-thumb' => 'Урдаснь хәләврин кемҗән: $1 × $2 цегтә', 'file-info-gif-looped' => 'билцгсн', diff --git a/languages/messages/MessagesXh.php b/languages/messages/MessagesXh.php index 8d9580af..c5946608 100644 --- a/languages/messages/MessagesXh.php +++ b/languages/messages/MessagesXh.php @@ -88,7 +88,7 @@ I Account yakhgo ivuliwe, ungalibali ukutshitsha izinto ozithandayo ngo {{SITENA 'yourname' => 'Igama lelungu:', 'yourpassword' => 'Igama elifihlakeleyo lelungu:', 'yourpasswordagain' => 'Faka kwakhona igama elifihlakeleyo:', -'remembermypassword' => 'Khumbula igama lam elifihlakeleyo kule Khompyutha', +'remembermypassword' => 'Khumbula igama lam elifihlakeleyo kule Khompyutha (for a maximum of $1 {{PLURAL:$1|day|days}})', 'createaccount' => 'Vula I Account', 'loginlanguagelabel' => 'Ulwimi: $1', diff --git a/languages/messages/MessagesXmf.php b/languages/messages/MessagesXmf.php index 30a8154a..feb5f7e5 100644 --- a/languages/messages/MessagesXmf.php +++ b/languages/messages/MessagesXmf.php @@ -23,12 +23,21 @@ $fallback = 'ka'; $messages = array( # User preference toggles -'tog-underline' => 'რცხიეფს თუდო ქუდუჸნე ღოზი:', -'tog-highlightbroken' => 'ქააძირი ვაარარსებულ ბუნილეფ მუჭოთ თენა (ალტერნატივა: მუჭოთ თენა?).', -'tog-justify' => 'გაასწორი პარაგრაფეფ', -'tog-hideminor' => 'დოჩული ჭიჭე რედაქტირება ბოლო თირაფეფს', -'tog-showtoolbar' => 'რედაქტირაფაშ ინსტრუმენტეფიშ ძირაფა (ჯავასკრიპტ)', -'tog-showhiddencats' => 'ქაძირი ფულირი კატეგორიეფი', +'tog-underline' => 'რცხუეფიშ ათოღაზუა:', +'tog-highlightbroken' => 'ქაძირი მესოფილ რცხუეფი მუჭოთ თენა (ალტერნატივა: მუჭოთ თენა?).', +'tog-justify' => 'გამანგი აბზაცეფი', +'tog-hideminor' => 'დოფული ციქა რედაქტირაფა ეკონია თირაფეფს', +'tog-hidepatrolled' => 'დოფულით პატრულირებულ რედაქტირაფეფი ასერდეიან თირაფეფს', +'tog-newpageshidepatrolled' => 'დოფულით პატრულირებულ ხასჷლეფი ახალ ხასჷლეფიშ ერკებულშე', +'tog-extendwatchlist' => 'გოფაჩი ოთოჸუჯე ერკებული არძო თირაფეფიშ ოძირაფალო, ამარდეიან თირაფეფიშ მეკოროცხილო', +'tog-usenewrc' => 'გეგმირინე ეკონია თირაფეფიშ უჯგუში ერკებული (ითხინს JavaScript-ის)', +'tog-numberheadings' => 'ავტომატურო დონომერე დუდჯოხოეფი', +'tog-showtoolbar' => 'რედაქტირაფაშ ხეჭკუდეფიშ ძირაფა (ითხინს JavaScript-ის)', +'tog-editondblclick' => 'ხასჷლეფიშ რედაქტირაფა ჟირმანგი გეწკანტაფათ (ითხინს JavaScript-ის)', +'tog-editsection' => 'ჩართი სექციაშ რედაქტირაფა [რედაქტირაფაშ] რცხუეფით', +'tog-editsectiononrightclick' => 'ჩართი სექციაშ რედაქტირაფა სექციაშ ჯოხოშა მარძგვან გეწკანტაფათ (ითხინს JavaScript-ის)"', +'tog-showtoc' => 'ქაძირი გჷშაგორალი (სუმშე უმოს დუდჯოხოამ ხასჷლეფშო)', +'tog-showhiddencats' => 'ქაძირი ფულირი კატეგორიეფი', 'underline-always' => 'ირო', 'underline-never' => 'შურო', @@ -99,7 +108,9 @@ $messages = array( 'hidden-category-category' => 'ფულირი კატეგორიეფი', 'category-subcat-count' => '{{PLURAL:$2|თე კატეგორია იკათუანს ხვალე ათე გიმენკატეგორიას.|თე კატეგორიას მოჩამილი რე $1 გიმენკატეგორია $2-შე.}}', 'category-article-count' => '{{PLURAL:$2|ათე კატეგორია იკათუანს ხვალე გეჸვენჯ ხასილას.|გეჸვენჯ {{PLURAL:$1|ხასილა რე|$1 ხასილეფ რე}} თე კატეგორიას, გვალო $2–შე.}}', +'category-file-count' => '{{PLURAL:$2|თე კატეგორიას ხვალე ათე გეჸვენჯი ფაილი რე.|თე კატეგორიას რე გეჸვენჯი $1, ართოიანო $2-შე.}}', 'listingcontinuesabbrev' => 'გინძარ.', +'noindex-category' => 'ხასჷლეფი ინდექსირაფაშ უმუშო', 'about' => '-შენი', 'article' => 'სტატია', @@ -118,14 +129,21 @@ $messages = array( 'qbpageinfo' => 'კონტექსტ', 'qbmyoptions' => 'ჩქიმ ხასილეფ', 'qbspecialpages' => 'სპეციალურ ხასილეფ', +'faq' => 'ბხშირი კითხვეფი', # Vector skin -'vector-namespace-category' => 'კატეგორია', -'vector-namespace-main' => 'ხასილა', -'vector-namespace-special' => 'სპეციალური ხასილა', -'vector-view-create' => 'დორსხუაფა', -'vector-view-edit' => 'რედაქტირაფა', -'vector-view-viewsource' => 'ქიძირე წყუ', +'vector-action-addsection' => 'თემაშ მიშაძინა', +'vector-action-delete' => 'ლასუა', +'vector-action-move' => 'გინოღალა', +'vector-action-protect' => 'თხილუა', +'vector-view-create' => 'დორსხუაფა', +'vector-view-edit' => 'რედაქტირაფა', +'vector-view-history' => 'ისტორიაშ ძირაფა', +'vector-view-view' => 'კითხირი', +'vector-view-viewsource' => 'ქიძირე წყუ', +'actions' => 'მოქმედალეფი', +'namespaces' => 'ჯოხოეფიშ ოფირჩა', +'variants' => 'ვარიანტეფი', 'errorpagetitle' => 'ჩილათა', 'returnto' => 'დირთი $1-შა', @@ -159,7 +177,7 @@ $messages = array( 'otherlanguages' => 'შხვა ნინეფს', 'redirectedfrom' => '(გიონოწურაფილ რე $1-იშე)', 'redirectpagesub' => 'ხასილაშა გინოწურაფა', -'lastmodifiedat' => 'თე ხასილაქ ეკონიას გეახალუ $2-ს (თარიღ), $1-ის (საათი).', +'lastmodifiedat' => 'თე ხასილაქ ეკონიას გეახალუ $2-ს, $1-ის.', 'jumpto' => 'გეგნორთი:', 'jumptonavigation' => 'ნავიგაცია', 'jumptosearch' => 'გორუა', @@ -176,7 +194,7 @@ $messages = array( 'edithelp' => 'მოხვარა რედაქტირაფას', 'edithelppage' => 'Help:ტექსტიშ რედაქტირაფა', 'helppage' => 'Help:დინორე', -'mainpage' => 'დუდ ხასილა', +'mainpage' => 'დუდ ხასჷლა', 'mainpage-description' => 'დუდ ხასილა', 'portal' => 'საზოგადოებაშ ხასილეფ', 'portal-url' => 'Project:საზოგადოებაშ ხასილეფ', @@ -192,6 +210,7 @@ $messages = array( 'newmessagesdifflink' => 'ეკონია თირაფა', 'editsection' => 'რედაქტირაფა', 'editold' => 'რედაქტირაფა', +'viewsourceold' => 'წყუშ ძირაფა', 'editlink' => 'რედაქტირაფა', 'viewsourcelink' => 'ქოძირი წყუ', 'editsectionhint' => 'სექციაშ რედაქტირაფა: $1', @@ -234,16 +253,18 @@ $messages = array( # Login and logout pages 'yourname' => 'მახვარებუშ ჯოხო:', 'yourpassword' => 'პაროლ', -'remembermypassword' => 'ქიმკომიწონი', +'yourpasswordagain' => 'კჷნე გეკორობით პაროლი:', +'remembermypassword' => 'ქჷდემახსოვრ ჩქიმ მიშულა ათე ბრაუზერშა (მაქსიმუმ $1 {{PLURAL:$1|დღას|დღას}})', 'yourdomainname' => 'თქვან დომენ', 'login' => 'მიშულა', 'nav-login-createaccount' => 'მინულა/ანგარიშიშ გონწყუმა', -'loginprompt' => 'ვიკიპედიაშა მიშაულარო ოხვილუთ კუკიშ გოაქტირაფას.', +'loginprompt' => '{{SITENAME}}-შა მიშაულარო ოხვილუთ ეკაკილეფიშ (cookies) გოაქტიურაფას.', 'userlogin' => 'მიშულა/ანგარიშიშ გონწყუმა', 'logout' => 'გიშულა', 'userlogout' => 'გიშულა', -'nologin' => "დიორდე ვარეთ რეგისტრირებულ? '''$1'''.", +'nologin' => 'დიორდე ვარეთო რეგისტრირებულ? $1.', 'nologinlink' => 'გონწყით ანგარიშ', +'createaccount' => 'ანგარიშიშ გონწყუმა', 'gotaccount' => "უკვე რეგისტრირებულ რეთ? '''$1'''", 'gotaccountlink' => 'მინულა', 'loginsuccess' => "'''ასე მიშულირ რეთ {{SITENAME}}-ს მუჭოთ \"\$1\".'''", @@ -304,6 +325,8 @@ $messages = array( თქვა შეილებუნა [[Special:Search/{{PAGENAME}}|გორათ ათე ხასილაშ ჯოხო]] შხვა ხასილეფს, [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} დოგორათ მეხუჯაფილ ჟურნალეფ], ვარა [{{fullurl:{{FULLPAGENAME}}|action=edit}} დიჭყათ ათე ხასილაშ რედაქტირაფა].', +'noarticletext-nopermission' => '"ათე ხასჷლას ასე ტექსტი ვა რე. თქვა შეილებუნა [[Special:Search/{{PAGENAME}}|დოგორათ თე ხასჷლაშ დუდჯოხო]] შხვა ხასჷლეფს, +ვარდა [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} დოგორათ გინორცხილ ჟურნალეფი]."', 'previewnote' => "'''რშუდან თენა რე ხვალე გიწოთოლორაფა''' თქვან თირაფეფ დიო ვა რე ჩუალირ!", 'editing' => 'რედაქტირაფა $1', @@ -320,10 +343,18 @@ $messages = array( 'hiddencategories' => 'თე ხასილა ოკათუ {{PLURAL:$1|1 ტყობინაფილ კატეგორიას|$1 ტყობინაფილ კატეგორიეფს}}:', 'nocreatetext' => 'თე ხასილას ვა შილებე ახალ ხასილაშ გექიმინუა დორცხუაფილ ვარიაშ გეშა. თქვა შეგილებუნა კინორთა დო გექიმინელ ხასილაშ რედაქტირაფა, ვარა [[სპეციალურ:Userlogin|მიშულა დო ანგარიშიშ დორცხუაფა]]', 'permissionserrorstext-withaction' => 'თქვა ვა გიღუნა $2–იშ ღოლამაშ ალობა თე გეჸვენჯი {{PLURAL:$1|სამანჯელით|სამანჯელეფით}}:', -'recreate-moveddeleted-warn' => "'''გართხილება: თქვა კინე ახალშო დუთმარცხუანთ ხასილას, ნამუქუთ ორდო ილასუნ''' +'recreate-moveddeleted-warn' => "'''გართხილება: თქვა კინე ახალშო ორსხუანთ ხასჷლას, ნამუქჷთ ლასირქ იჸუ ოწოხოლე''' -რთხინთ, დეფირქათ, მისაღეფ რე დო ვარ თე ხასილაშ რედაქტირაფაშ გოგინძორაფა. -ინფორმაციაშო თუდოლე მოჩამილიე თე ხასილაშ ლასუაშ ისტორია:", +რთხიინთ, დეფირქათ, ქორე თუ ვარ მისაღეფ თე ხასჷლაშ რედაქტირაფაშ გაგინძორება. +თქვან ოხუჯურო, ათე ხასილაშ ლასუაშ დო გინოღალაშ ჟურნალი მოჩამილ რე თუდო:", +'moveddeleted-notice' => 'თე ხასჷლაქ ლასირქ იჸუ. ლასუაშ დო გინოღალაშ ჟურნალი მოჩამილ რე თუდო გიმაწურაფალო', + +# Parser/template warnings +'post-expand-template-inclusion-warning' => '"გური ქუჩით:" ინოხუნაფილ თანგეფიშ ზომა ნაბტანი დიდი რე. კანკალე თანგეფი ვენიკათინე.', +'post-expand-template-inclusion-category' => 'ხასჷლეფი ნამუსუთ ინოხუნაფილი თანგეფიშ ზომა გინომეტებული რე.', +'post-expand-template-argument-warning' => "\"'''გური ქუჩით:''' თე ხასჷლას ოკათ არძოშ უკლაშ ართ თიცალ თანგიშ არგუმენტი, ნამუსუთ უღუ გოძინელოფაშ ნაბტან დიდ ზომა. +თე არგუმენტეფქ გჷშატებულქ იჸუ.\"", +'post-expand-template-argument-category' => 'უარგუმენტო თანგამი ხასჷლეფი', # History pages 'viewpagelogs' => 'თე ხასილაშო ორეგისტრაციე ჟურნალეფიშ ძირაფა', @@ -341,6 +372,7 @@ $messages = array( 'histlegend' => "მეღანკილ: ართიანიშ მიოზიმაფალო კორნებულ ვერსიეფიშ რადიოშ ოჭკორიეფ ქიმიოღანკეთ დო გეუნჭირით მიშულაშ კონჭის, ვარა ქვინჯის რენ თი კონჭის. ლეგენდა: '''კუნტარაფეფ: ({{მიმ.}})''' = შხვაობა მიმალ ვერსიაწკუმა, '''({{ეკონია}}) = შხვაობა ოწოხოლენ ვერსიაწკუმა, ჭ = ჭიჭე რედაქტირაფეფ.", 'history-fieldset-title' => 'ისტორიაშ გინოჯინა', +'history-show-deleted' => 'ხვალე ლასირეფი', 'histfirst' => 'პირველი', 'histlast' => 'ეკონია', 'historysize' => '($1 ბაიტ)', @@ -352,8 +384,14 @@ $messages = array( 'history-feed-item-nocomment' => '$1 $2-ს', # Revision deletion -'rev-delundel' => 'ძირაფა/ტყობინაფა', -'revdel-restore' => 'ორწყენჯობაშ თირუა', +'rev-delundel' => 'ძირაფა/ტყობინაფა', +'revdelete-logentry' => '"[[$1]]"-შ რედაქტირაფეფიშ ძირაფობაქ დითირჷ', +'revdel-restore' => 'ორწყენჯობაშ თირუა', +'revdel-restore-deleted' => 'ლასირი რევიზიეფი', +'revdel-restore-visible' => 'ძირაფადი რევიზიეფი', +'revdelete-content' => 'დინორე', +'revdelete-hid' => 'დიფულუ $1', +'revdelete-log-message' => '$1 $2- შო {{PLURAL:$2|რევიზია|რევიზიეფი}}', # Merge log 'revertmerge' => 'ეკორტყუალაშ მოლასუა', @@ -364,39 +402,61 @@ $messages = array( 'lineno' => 'ღოზი $1:', 'compareselectedversions' => 'გიშაგორილ ვერსიეფიშ მეზიმაფა', 'editundo' => 'გოუქვაფა', +'diff-multi' => '( {{PLURAL:$2|ართი მახვარებუშ|$2 მახვარებუშ}} {{PLURAL:$1|ართი შქაშქუმალირი რევიზია|$1 შქაშქუმალირი რევიზია}} ვა რე ძირაფილი)', # Search results -'searchresults' => 'გორუაშ მოღალირობეფ', -'searchresults-title' => '"$1"–იშ გორუაშ მოღალირობეფ', -'searchresulttext' => '{{SITENAME}}–იშ ოგორალო უმოს იმფორმაციოაშო ქოძირით [[{{MediaWiki:Helppage}}|{{int:help}}]].', -'searchsubtitle' => 'თქვა დოგორით \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|ირი ხასილა, დოჭყაფილი "$1"-ით]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|ირი ხასილა, გინორცხილ "$1"-შა]])', -'searchsubtitleinvalid' => "თქვა გორუნდით '''$1'''", -'notitlematches' => 'ვა უხუჯანს ნამუთინი ხასილაშ ჯოხო', -'notextmatches' => 'ნამთინ ხასილაშ ტექსტი ვა უხუჯანს', -'prevn' => 'წოხლენ $1', -'nextn' => 'უკულიან {{PLURAL:$1|$1}}', -'viewprevnext' => 'ქოძირ ($1 {{int:pipe-separator}} $2) ($3).', -'searchhelp-url' => 'Help:მოხვარა', -'search-result-size' => '$1 ({{PLURAL:$2|1 ზიტყვა|$2 ზიტყვეფ}})', -'search-redirect' => '(გინოწურაფა $1)', -'search-section' => '(სექცია $1)', -'search-suggest' => 'ათენას ხო ვა გორუნდით: $1', -'search-interwiki-caption' => 'ჯიმაია პროექტეფ', -'search-interwiki-default' => 'მოღალირეფი $1-შე:', -'search-interwiki-more' => '(უმოს)', -'search-mwsuggest-enabled' => 'ელაჩამეფით', -'search-mwsuggest-disabled' => 'ელაჩამეფიშ უმუშოთ', -'nonefound' => "'''გეთოლწონით''': სტანდარტულო ხვალე ნამთინე ჯოხოთ ოფირჩას მეურს გორუა. +'searchresults' => 'გორუაშ მოღალირობეფ', +'searchresults-title' => '"$1"–იშ გორუაშ მოღალირობეფ', +'searchresulttext' => '{{SITENAME}}–იშ ოგორალო უმოს იმფორმაციოაშო ქოძირით [[{{MediaWiki:Helppage}}|{{int:help}}]].', +'searchsubtitle' => 'თქვა დოგორით \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|ირი ხასილა, დოჭყაფილი "$1"-ით]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|ირი ხასილა, გინორცხილ "$1"-შა]])', +'searchsubtitleinvalid' => "თქვა გორუნდით '''$1'''", +'notitlematches' => 'ვა უხუჯანს ნამუთინი ხასილაშ ჯოხო', +'notextmatches' => 'ნამთინ ხასილაშ ტექსტი ვა უხუჯანს', +'prevn' => 'წოხლენ $1', +'nextn' => 'უკულიან {{PLURAL:$1|$1}}', +'prevn-title' => 'წოხოლენი $1 მოღალუ', +'nextn-title' => 'გეჸვენჯი $1 მოღალუ', +'shown-title' => 'ქაძირი $1 მოღალუ ირ ხასჷლას', +'viewprevnext' => 'ქოძირ ($1 {{int:pipe-separator}} $2) ($3).', +'searchmenu-exists' => 'თე ვიკის "[[:$1]]" ჯოხოთ ხასჷლა რე', +'searchmenu-new' => "''ქჷდარსხი \"[[:\$1]]\" ხასჷლა თე ვიკის'''", +'searchhelp-url' => 'Help:მოხვარა', +'searchprofile-articles' => 'სტატიეფი', +'searchprofile-project' => 'მოხვარაშ დო პროექტიშ ხასჷლეფი', +'searchprofile-images' => 'მულტიმედია', +'searchprofile-everything' => 'ირფელი', +'searchprofile-advanced' => 'გაუჯგუშებული', +'searchprofile-articles-tooltip' => 'დოგორი $1-ს', +'searchprofile-project-tooltip' => 'გორუა $1-ის', +'searchprofile-images-tooltip' => 'დოგორი ფაილეფი', +'searchprofile-everything-tooltip' => 'გორუა არძო ხასილას (ოჩიებელი ხასჷლეფიშ მეკოროცხილო)', +'searchprofile-advanced-tooltip' => 'გორუა მახვარებუშ გენჭყილ ჯოხოეფიშ ოფირჩას', +'search-result-size' => '$1 ({{PLURAL:$2|1 ზიტყვა|$2 ზიტყვეფ}})', +'search-result-category-size' => '{{PLURAL:$1|1 მაკათური|$1 მაკათური}} ({{PLURAL:$2|1 გიმენკატეგორია|$2 გიმენკატეგორია}}, {{PLURAL:$3|1 ფაილი|$3 ფაილეფი}})', +'search-redirect' => '(გინოწურაფა $1)', +'search-section' => '(სექცია $1)', +'search-suggest' => 'ათენას ხო ვა გორუნდით: $1', +'search-interwiki-caption' => 'ჯიმაია პროექტეფ', +'search-interwiki-default' => 'მოღალირეფი $1-შე:', +'search-interwiki-more' => '(უმოს)', +'search-mwsuggest-enabled' => 'ელაჩამეფით', +'search-mwsuggest-disabled' => 'ელაჩამეფიშ უმუშოთ', +'searchrelated' => 'მათანგეფ', +'searchall' => 'არძო', +'showingresultsheader' => "{{PLURAL:$5|მოღალუ '''$1''' '''$3'''-შე|მოღალუეფ '''$1 - $2''' '''$3'''-შე}} '''$4'''-შო", +'nonefound' => "'''გეთოლწონით''': სტანდარტულო ხვალე ნამთინე ჯოხოთ ოფირჩას მეურს გორუა. ოგორალი ზიტყვას ვარა ზიტყვეფიშ ბუნას წოხოლე ქეწუყ’უნეთ ''all:'' ირდიხას იგორასინ თიშენ (სხუნუაშ ხასილეფიშ, თანგეფიშ დო ა.უ. მეკოროცხუათ,), ვარ-და პრეფიქსო გიმირინეთ კორნებულ ჯოხოთ ოფირჩა.", -'powersearch' => 'გოძინელ გორუა', -'powersearch-legend' => 'გოძინელ გორუა', -'powersearch-ns' => 'დოგორ ჯოხოეფიშ ოფირჩას:', -'powersearch-redir' => 'გინოწურაფეფიშ ერკებულიშ ძირაფა', -'powersearch-field' => 'დოგორი ათენა', +'search-nonefound' => 'თქვანი მოგორაფილიშ მუთუნნერ მანგი მოღალუქ ვეძირჷ.', +'powersearch' => 'გოძინელ გორუა', +'powersearch-legend' => 'გოძინელ გორუა', +'powersearch-ns' => 'დოგორ ჯოხოეფიშ ოფირჩას:', +'powersearch-redir' => 'გინოწურაფეფიშ ერკებულიშ ძირაფა', +'powersearch-field' => 'დოგორი ათენა', # Preferences page 'preferences' => 'კონფიგურაცია', 'mypreferences' => 'ჩქიმ კონფიგურაციეფ', +'youremail' => 'ელ-ფოშტა:', 'yourrealname' => 'ნანდულ სახელ *', 'yourlanguage' => 'ნინა:', @@ -412,29 +472,34 @@ $messages = array( 'action-edit' => 'თე ხასილაშ რედაქტირაფა', # Recent changes -'nchanges' => '$1 {{PLURAL:$1|თირაფა|თირაფეფ}}', -'recentchanges' => 'ასერდენ თირაფეფ', -'recentchanges-legend' => 'ასერდენ თირაფეფიშ ოფციეფ', -'recentchanges-feed-description' => "ვიკიშ უახალაშ თირაფეფიშა თოლყ'უჯიშ მეყ'უნაფა თე არხის", -'rcnote' => "თუდოლე ძირით ეკონია {{PLURAL:$1|'''1''' თირაფა|$1 თირაფა}} ეკონია {{PLURAL:$2|დღაშ|'''$2''' დღაშ}}, $5, $4 რენჯობათ.", -'rcnotefrom' => 'თუდო მოჸუნაფილიე თირაფეფ, ”’$2””-შე (ძირაფილიე ”’$1”’)', -'rclistfrom' => 'ახალ თირაფეფიშ ძირაფა დოჭყაფილ $1-შე', -'rcshowhideminor' => '$1 ჭიჭე რედაქტირაფეფ', -'rcshowhidebots' => 'ბოტეფიშ $1', -'rcshowhideliu' => '$1 მიშულირ მახვარებუეფ', -'rcshowhideanons' => '$1 ანონიმურ მახვარებუეფ', -'rcshowhidepatr' => 'გოკონტროლაფირ თირაფეფიშ $1', -'rcshowhidemine' => 'ჩქიმ რედაქტირაფეფიშ $1', -'rclinks' => 'ეკონია $2 დღას ღოლამირ ეკონია $1 თირაფეფიშ ძირაფა
    $3', -'diff' => 'შხვანერობა', -'hist' => 'ისტ.', -'hide' => 'ტყობინაფა', -'show' => 'ძირაფა', -'minoreditletter' => 'ჭ.რ.', -'newpageletter' => 'ახ.', -'boteditletter' => 'ბ', -'rc-enhanced-expand' => 'დეტალეფიშ ძირაფა (ითხინს ჯავასქრიფთის)', -'rc-enhanced-hide' => 'დეტალეფიშ ტყობინაფა', +'nchanges' => '$1 {{PLURAL:$1|თირაფა|თირაფეფ}}', +'recentchanges' => 'ასერდენ თირაფეფ', +'recentchanges-legend' => 'ასერდენ თირაფეფიშ ოფციეფ', +'recentchangestext' => 'თე ხასჷლას ქაძირი ვიკიშა მიშაღალირ არძოშ უახალაშ თირაფეფი.', +'recentchanges-feed-description' => "ვიკიშ უახალაშ თირაფეფიშა თოლყ'უჯიშ მეყ'უნაფა თე არხის", +'recentchanges-label-newpage' => 'ათე რედაქტირაფას მაჸუნ ახალ ხასჷლაშ დორსხუაფაქ.', +'recentchanges-label-minor' => 'თენა რე ციქა რედაქტირაფა', +'recentchanges-label-bot' => 'თე რედაქტირაფა ბოტიშ ნაღოლემი რე', +'recentchanges-label-unpatrolled' => 'თე რედაქტირაფა დიო ხოლო ვა რე პატრულირაფირი', +'rcnote' => "თუდოლე ძირით ეკონია {{PLURAL:$1|'''1''' თირაფა|$1 თირაფა}} ეკონია {{PLURAL:$2|დღაშ|'''$2''' დღაშ}}, $5, $4 რენჯობათ.", +'rcnotefrom' => 'თუდო მოჸუნაფილიე თირაფეფ, ”’$2””-შე (ძირაფილიე ”’$1”’)', +'rclistfrom' => 'ახალ თირაფეფიშ ძირაფა დოჭყაფილ $1-შე', +'rcshowhideminor' => '$1 ჭიჭე რედაქტირაფეფ', +'rcshowhidebots' => 'ბოტეფიშ $1', +'rcshowhideliu' => '$1 მიშულირ მახვარებუეფ', +'rcshowhideanons' => '$1 ანონიმურ მახვარებუეფ', +'rcshowhidepatr' => 'გოკონტროლაფირ თირაფეფიშ $1', +'rcshowhidemine' => 'ჩქიმ რედაქტირაფეფიშ $1', +'rclinks' => 'ეკონია $2 დღას ღოლამირ ეკონია $1 თირაფეფიშ ძირაფა
    $3', +'diff' => 'შხვანერობა', +'hist' => 'ისტ.', +'hide' => 'ტყობინაფა', +'show' => 'ძირაფა', +'minoreditletter' => 'ჭ.რ.', +'newpageletter' => 'ახ.', +'boteditletter' => 'ბ', +'rc-enhanced-expand' => 'დეტალეფიშ ძირაფა (ითხინს ჯავასქრიფთის)', +'rc-enhanced-hide' => 'დეტალეფიშ ტყობინაფა', # Recent changes linked 'recentchangeslinked' => 'აკოხვალამირ თირაფეფ', @@ -447,11 +512,15 @@ $messages = array( 'recentchangeslinked-to' => 'მანგიერო ქაძირე ათე ხასილაშა მერცხილ ხასილეფშა მიშაღალირ თირაფეფ', # Upload -'upload' => 'ფაილიშ ეშახარგუა', +'upload' => 'ფაილიშ ეხარგუა', 'uploadbtn' => 'ფაილიშ გეთება', 'uploadlogpage' => 'ეხარგუაშ ორეგისტრირებელ ჟურნალ', +'filedesc' => 'რეზიუმე', 'uploadedimage' => 'ეხარგელი რე "[[$1]]"', +'license' => 'ლიცენზირაფა:', +'license-header' => 'ლიცენზირაფა', + # Special:ListFiles 'listfiles' => 'სურათეფიშ ერკებულ', 'listfiles_name' => 'სახელ', @@ -460,6 +529,7 @@ $messages = array( 'file-anchor-link' => 'ფაილი', 'filehist' => 'ფაილიშ ისტორია', 'filehist-help' => 'ქიგუნჭირით რიცხვის/ბორჯის თიშო, ნამდა ქოძირათ ფაილი თი რედაქციათ, მუ რედაქციას თი რიცხვის/ბორჯის რდუნ.', +'filehist-revert' => 'დართინე', 'filehist-current' => 'მიმალ', 'filehist-datetime' => 'რიცხვი/ბორჯი', 'filehist-thumb' => 'ჭკუდი', @@ -472,6 +542,7 @@ $messages = array( 'linkstoimage' => 'გეყ’ვენჯი {{PLURAL:$1|ხასილა|ხასილეფ}} მერცხილ რე თე ფაილშა', 'nolinkstoimage' => 'ვა რე თე ფაილწკუმა მერსხილ ხასილეფ.', 'sharedupload' => 'თე ფაილ რე $1-შე დო შილებე თენა შხვა პროექტეფც ხოლო გიმირინაუფუდასინ', +'sharedupload-desc-here' => 'თე ფაილი რე $1-შე დო შილებე გჷმორნაფილქ იჸუას შხვა პროექტეფს. თეშ ეჭარუა [$2 ფაილიშ ეჭარუაშ ხასჷლა] თუდოლე რე მოჩამილი.', 'uploadnewversion-linktext' => 'გეშახარგე ათე ფაილიშ ახალ ვერსია', # MIME search @@ -483,10 +554,12 @@ $messages = array( # Statistics 'statistics' => 'სტატისტიკა', +'disambiguationspage' => 'Template:ანდობურმნიშვნელიანი', + 'withoutinterwiki' => 'ხასილეფ ნინაშ რსხილეფიშ გარეშე', # Miscellaneous special pages -'nbytes' => '$1 {{PLURAL:$1|ბაიტ|ბაიტეფ}}', +'nbytes' => '$1 ბაიტი', 'nlinks' => '$1 რსხილ', 'nmembers' => '$1 {{PLURAL:$1|მაკათურ|მაკათურეფ}}', 'uncategorizedpages' => 'უკატეგორიე ხასილეფ', @@ -498,6 +571,7 @@ $messages = array( 'prefixindex' => 'არძო ხასილა პრეფიქსით', 'shortpages' => 'ჭიჭე ხასილეფ', 'longpages' => 'გინძე ხასილეფ', +'usercreated' => 'დირსხუ $1 $2-ს', 'newpages' => 'ახალ ხასილეფ', 'ancientpages' => 'ჯვეშ ხასილეფ', 'move' => 'გინოღალა', @@ -530,7 +604,8 @@ $messages = array( 'categories' => 'კატეგორიეფ', # Special:LinkSearch -'linksearch' => 'გალენ რცხიეფ', +'linksearch' => 'გალენ რცხიეფ', +'linksearch-line' => '$1 მერცხიილი რე $2-შე', # Special:Log/newusers 'newuserlogpage' => 'მახვარებუშ რეგისტრაციაშ ჟურნალ', @@ -545,7 +620,7 @@ $messages = array( # Watchlist 'watchlist' => 'ჩქიმ ოკონტროლებულეფიშ ერკებულ', 'mywatchlist' => 'ჩქიმ კონტროლიშ ერკებულ', -'watchlistfor' => "('''$1'''-შენი)", +'watchlistfor2' => '$1 $2-ს', 'addedwatch' => 'გეძინელ რე კონტროლიშ ერკებულშა', 'addedwatchtext' => "\"[[:\$1]]\" ხასილაქ გეძინელქ იყ’უ თქვან [[Special:Watchlist|watchlist]]–შა. თე ხასილაშა დო თეწკუმა ასოცირებულ სხუნუაშ ხასილაშა მუმაულარ თირაფეფ მოჩამილ იყ’ი თექ დო თქვა გეგეადვილან თიშ გიშაგორუაქინ, ხასილა გუმორჩქინდუ '''რუმეთ''' [[Special:RecentChanges|list of recent changes]]–ს.\"", @@ -566,7 +641,8 @@ $messages = array( 'deletepage' => 'ხასილაშ ლასუა', 'confirmdeletetext' => 'თქვა თე ხასილაშ, თელ მუშ ისტორიათ, ლასუაშ პიჯის რეთ. დადასტურით, ნამდა თქვა ნანდულო გოკონა თეშ ღოლამა დო ნამუდა თქვა გარჩქილენა თე ქიმინჯალაშ მოღალუეფ დო მუჭოთ თქვა თეს ორთუთ [[{{MediaWiki:Policy-url}}|წესეფიშ]] მეხუჯაფილო.', -'actioncomplete' => 'ქიმინჯუა რსულებულ რე', +'actioncomplete' => 'მოქმედალა რსულებულ რე', +'actionfailed' => 'მოქმედალაქ დემარცხჷ', 'deletedtext' => '"$1\\" ლასირქ იყ’უ. ასერდე ლასირ ხასილეფიშ ერკებულ ქოძირით $2–ს.', 'deletedarticle' => '"[[$1]]" ლასირ რე', @@ -607,6 +683,7 @@ $messages = array( # Undelete 'undeletebtn' => 'ახალშო ეკონწყუალა', 'undeletelink' => 'ძირაფა/ეკონწყუალა', +'undeleteviewlink' => 'ძირაფა', 'undeletedarticle' => 'ეკონწყილქ იყ’უ "[[$1]]"', 'undelete-search-submit' => 'გორუა', @@ -627,9 +704,12 @@ $messages = array( 'sp-contributions-newbies' => 'ქოძირით ხვალე ახალ მახვარებუეფიშ მიშაღალირ თიეფ', 'sp-contributions-newbies-sub' => 'ახალეფშოთ', 'sp-contributions-blocklog' => 'ბლოკირაფაშ ისტორია', -'sp-contributions-talk' => 'სხუნუა', +'sp-contributions-uploads' => 'ეხარგუეფ', +'sp-contributions-logs' => 'ჟურნალეფი', +'sp-contributions-talk' => 'ოჩიებელი', 'sp-contributions-search' => 'მიშაღალირ თიაშ გორუა', 'sp-contributions-username' => 'IP მიოწურაფუ ვარა მახვარებუშ ჯოხო:', +'sp-contributions-toponly' => 'ქაძირი ხვალე ეკონია რევიზიეფი რენ ფერი რედაქტირაფეფი', 'sp-contributions-submit' => 'გორუა', # What links here @@ -647,6 +727,7 @@ $messages = array( 'whatlinkshere-hideredirs' => 'გინოწურაფა $1', 'whatlinkshere-hidetrans' => '$1 ტრანსკლუზიეფ', 'whatlinkshere-hidelinks' => '$1 რცხუეფ', +'whatlinkshere-hideimages' => '$1 სურათიშ რცხუეფი', 'whatlinkshere-filters' => 'ტკიბირეფი', # Block/unblock @@ -706,7 +787,9 @@ $messages = array( 'export' => 'ხასილეფიშ ექსპორტ', # Namespace 8 related -'allmessages' => 'ირ სისტემურ შეტყვინაფა', +'allmessages' => 'ირ სისტემურ შეტყვინაფა', +'allmessagesname' => 'ჯოხო', +'allmessagesdefault' => 'შატყვინაფაშ სტანდარტულ ტექსტი', # Thumbnails 'thumbnail-more' => 'მორდი', @@ -737,6 +820,7 @@ $messages = array( 'tooltip-search' => 'გორუა {{SITENAME}}', 'tooltip-search-go' => 'გეგნორთი წორას ათე ჯოხოშ ხასილაშა შურო ქო რენ-და', 'tooltip-search-fulltext' => 'დოგორი ხასილეფი, ნამუთ თე ტექსტის იკათუანან', +'tooltip-p-logo' => 'დუდ ხასჷლაშ ძირაფა', 'tooltip-n-mainpage' => 'დუდ ხასილაშ ძირაფა', 'tooltip-n-mainpage-description' => 'დუდ ხასილაშა გინოზოჯუა', 'tooltip-n-portal' => 'პროექტიშენი, მუშ ქიმინუა შეილებუნა, სოდე შილებე გორათინ', @@ -750,7 +834,7 @@ $messages = array( 'tooltip-feed-atom' => 'ათე ხასილაშ ატომ არხიშ ტრანსლაცია', 'tooltip-t-contributions' => 'თე მახვარებუშ მიშაღალირ თიაშ ერკებულიშ ძირაფა', 'tooltip-t-emailuser' => 'მიდუჯღონით ელ.ფოშტა ათე მახვარებუს', -'tooltip-t-upload' => 'გეშახარგე ფაილ', +'tooltip-t-upload' => 'გეხარგე ფაილი', 'tooltip-t-specialpages' => 'არძო სპეციალურ ხასილაშ ერკებულ', 'tooltip-t-print' => 'თე ხასილაშ ობეშტალი ვერსია', 'tooltip-t-permalink' => 'პერმანენტულ რცხი ხასილაშ თე ვერსიაშა', @@ -770,15 +854,20 @@ $messages = array( 'tooltip-watch' => 'თე ხასილაშ გეძინა თქვან ოკონტროლე ერკებულშა [alt-w]', 'tooltip-rollback' => '"დორთინა" ათე ხასილაშა ეკონია გინმახანდეშ ნაღოლემ თირაფას(ეფს) გოუქვენს ართ გენჭირათ', 'tooltip-undo' => '"გოუქვაფა" მიშაღალირ თირაფეფს გოუქვენს დო გუთმონწყუნს რედაქტირაფაშ ფორმას გიწოთოლორაფაშ რეჟიმს. თენა შესაძლებლობას ირძენს რეზიუმეს სამანჯელქ იყ’უას დაკონკრეტებულქინ.', +'tooltip-summary' => 'კუნტა რეზიუმეშ მიშაჸონაფა', + +# Patrol log +'patrol-log-line' => 'მერჩქინელი $1 $2-შე პატრულირაფილი $3', +'patrol-log-diff' => 'რევიზია $1', # Browsing diffs 'previousdiff' => '← წოხოლენი თირაფეფ', 'nextdiff' => 'უახალაშ თირაფა →', # Media information -'file-info-size' => '($1 × $2 პიქსელ, ფაილიშ ზომა: $3, MIME ტიპ: $4)', +'file-info-size' => '$1 × $2 პიქსელ, ფაილიშ ზომა: $3, MIME ტიპ: $4', 'file-nohires' => ' უმოს მაღალ გიშაგორანჯალა ვა რე შელებუან.', -'svg-long-desc' => '(ფაილ SVG, ნომინალურო $1×$2 პიქსელ, ფაილიშ ზიმა: $3)', +'svg-long-desc' => 'SVG ფაილ, ნომინალურო $1×$2 პიქსელ, ფაილიშ ზიმა: $3', 'show-big-image' => 'რსული გიშაგორანჯალა', 'show-big-image-thumb' => 'ზომა გიწოთოლორაფაშ ბორჯის: $1 × $2 პიქსელ', @@ -827,10 +916,26 @@ $messages = array( 'watchlisttools-edit' => 'ოკონტროლებელ ხასილეფიშ ძირაფა დო რედაქტირაფა', 'watchlisttools-raw' => 'კონტროლიშ ერკებულიშ რედაქტირაფა ტექსტიშ ფორმატის', +# Core parser functions +'duplicate-defaultsort' => '\'\'გური ქუჩით:\'\'\' სტანდარტული დანწყუალაშ კილა "$2"-შო გინარჯგინანს ორდონი დონწყუალაშ კილა "$1"-ს.', + # Special:Version 'version' => 'ვერსია', # Special:SpecialPages 'specialpages' => 'სპეციალურ ხასილეფ', +# External image whitelist +'external_image_whitelist' => '"#ქჷდიტე თე ღოზი კოკობო მუჭო რენ თეში
    +#ქინახუნე რეგულარული გამოსახულებაშ ფრაგმენტეფი (თი ნაწილი ნამუთ თეშ // შქას ინოდოხოდ) თუდოლე
    +#თენეფი მეზჷმაფილ იჸე გალენ (hotlinked) სურათეფიშ URL-ეფშა.
    +#ნამუთ მიორენ თინა სურათეფო გაგშარჩქინდჷ, ვარ-და ხვალე სურათიშ რცხუ ირწყებედასიი.
    +#ღოზეფი #-თ დოჭყაფილი კომენტარო რე მერჩქინელი.
    +#თენა გჷნაფულენს ასოეფიშ რეგისტრის.
    +
    +#ქინახუნე არძო regex ფრაგმენტეფი თე ღოზიშ ჟი. ქჷდიტე თე ღოზი კოკობო მუჭო რენ თეში
    "', + +# Special:Tags +'tag-filter' => '[[Special:Tags|ხინტკეფიშ]] ტკიბირი:', + ); diff --git a/languages/messages/MessagesYi.php b/languages/messages/MessagesYi.php index bd67fc2c..1c51393c 100644 --- a/languages/messages/MessagesYi.php +++ b/languages/messages/MessagesYi.php @@ -56,66 +56,80 @@ $namespaceAliases = array( ); $specialPageAliases = array( - 'DoubleRedirects' => array( 'פארטאפלטע ווייטערפירונגען' ), - 'BrokenRedirects' => array( 'צעבראכענע ווייטערפירונגען' ), + 'DoubleRedirects' => array( 'פארטאפלטע_ווייטערפירונגען' ), + 'BrokenRedirects' => array( 'צעבראכענע_ווייטערפירונגען' ), 'Disambiguations' => array( 'באדייטן' ), - 'Userlogin' => array( 'באניצער איינלאגירן' ), + 'Userlogin' => array( 'באניצער_איינלאגירן' ), + 'Userlogout' => array( 'ארויסלאגירן' ), + 'CreateAccount' => array( 'שאפֿן_קאנטע' ), 'Preferences' => array( 'פרעפערענצן' ), - 'Watchlist' => array( 'אויפֿפאסן ליסטע', 'מיין אויפֿפאסן ליסטע' ), - 'Recentchanges' => array( 'לעצטע ענדערונגען' ), + 'Watchlist' => array( 'אויפֿפאסן_ליסטע', 'מיין_אויפֿפאסן_ליסטע' ), + 'Recentchanges' => array( 'לעצטע_ענדערונגען' ), 'Upload' => array( 'ארויפלאדן' ), 'Listfiles' => array( 'בילדער' ), - 'Newimages' => array( 'נייע בילדער' ), - 'Listusers' => array( 'ליסטע פון באניצערס' ), + 'Newimages' => array( 'נייע_בילדער' ), + 'Listusers' => array( 'ליסטע_פון_באניצערס' ), 'Statistics' => array( 'סטאטיסטיק' ), - 'Randompage' => array( 'צופעליג', 'צופעליגער בלאט' ), - 'Lonelypages' => array( 'פאר\'יתומ\'טע בלעטער' ), - 'Uncategorizedpages' => array( 'בלעטער אן קאטעגאריעס' ), - 'Uncategorizedcategories' => array( 'קאטעגאריעס אן קאטעגאריעס' ), - 'Uncategorizedimages' => array( 'בילדער אן קאטעגאריעס' ), - 'Uncategorizedtemplates' => array( 'מוסטערן אן קאטעגאריעס' ), - 'Unusedcategories' => array( 'אומבאניצטע קאטעגאריעס' ), - 'Unusedimages' => array( 'אומבאניצטע בילדער' ), - 'Wantedpages' => array( 'געזוכטע בלעטער' ), - 'Wantedcategories' => array( 'געזוכטע קאטעגאריעס' ), - 'Mostlinked' => array( 'מערסטע פארבונדענע בלעטער' ), - 'Mostlinkedcategories' => array( 'מערסטע פארבונדענע קאטעגאריעס' ), - 'Mostlinkedtemplates' => array( 'מערסטע פארבונדענע מוסטערן' ), - 'Mostimages' => array( 'מערסטע פארבונדענע בילדער' ), - 'Shortpages' => array( 'קורצע בלעטער' ), - 'Longpages' => array( 'לאנגע בלעטער' ), - 'Newpages' => array( 'נייע בלעטער' ), - 'Ancientpages' => array( 'אוראלטע בלעטער' ), - 'Deadendpages' => array( 'בלעטער אן פארבינדונגען' ), - 'Protectedpages' => array( 'געשיצטע בלעטער' ), - 'Protectedtitles' => array( 'געשיצטע קעפלעך' ), - 'Allpages' => array( 'אלע בלעטער' ), - 'Prefixindex' => array( 'בלעטער וואס הייבן אין מיט' ), - 'Specialpages' => array( 'באזונדערע בלעטער' ), + 'Randompage' => array( 'צופעליג', 'צופעליגער_בלאט' ), + 'Lonelypages' => array( 'פאר\'יתומ\'טע_בלעטער' ), + 'Uncategorizedpages' => array( 'בלעטער_אן_קאטעגאריעס' ), + 'Uncategorizedcategories' => array( 'קאטעגאריעס_אן_קאטעגאריעס' ), + 'Uncategorizedimages' => array( 'בילדער_אן_קאטעגאריעס' ), + 'Uncategorizedtemplates' => array( 'מוסטערן_אן_קאטעגאריעס' ), + 'Unusedcategories' => array( 'אומבאניצטע_קאטעגאריעס' ), + 'Unusedimages' => array( 'אומבאניצטע_בילדער' ), + 'Wantedpages' => array( 'געזוכטע_בלעטער' ), + 'Wantedcategories' => array( 'געזוכטע_קאטעגאריעס' ), + 'Wantedfiles' => array( 'געזוכטע_טעקעס' ), + 'Wantedtemplates' => array( 'געזוכטע_מוסטערן' ), + 'Mostlinked' => array( 'מערסטע_פארבונדענע_בלעטער' ), + 'Mostlinkedcategories' => array( 'מערסטע_פארבונדענע_קאטעגאריעס' ), + 'Mostlinkedtemplates' => array( 'מערסטע_פארבונדענע_מוסטערן' ), + 'Mostimages' => array( 'מערסטע_פארבונדענע_בילדער' ), + 'Mostcategories' => array( 'מערסטע_קאטעגאריעס' ), + 'Mostrevisions' => array( 'מערסטע_רעוויזיעס' ), + 'Fewestrevisions' => array( 'ווייניגסטע_רעוויזיעס' ), + 'Shortpages' => array( 'קורצע_בלעטער' ), + 'Longpages' => array( 'לאנגע_בלעטער' ), + 'Newpages' => array( 'נייע_בלעטער' ), + 'Ancientpages' => array( 'אוראלטע_בלעטער' ), + 'Deadendpages' => array( 'בלעטער_אן_פארבינדונגען' ), + 'Protectedpages' => array( 'געשיצטע_בלעטער' ), + 'Protectedtitles' => array( 'געשיצטע_קעפלעך' ), + 'Allpages' => array( 'אלע_בלעטער' ), + 'Prefixindex' => array( 'בלעטער_וואס_הייבן_אין_מיט' ), + 'Ipblocklist' => array( 'בלאקירן_ליסטע' ), + 'Specialpages' => array( 'באזונדערע_בלעטער' ), 'Contributions' => array( 'בײַשטײַערונגען' ), - 'Emailuser' => array( 'שיקן אן ע-פאסט צום באניצער' ), - 'Confirmemail' => array( 'באשטעטיגן ע-פאסט' ), - 'Whatlinkshere' => array( 'בלעטער וואס פארבונדן אהער' ), - 'Movepage' => array( 'באוועגן בלאט' ), + 'Emailuser' => array( 'שיקן_אן_ע-פאסט_צום_באניצער' ), + 'Confirmemail' => array( 'באשטעטיגן_ע-פאסט' ), + 'Whatlinkshere' => array( 'בלעטער_וואס_פארבונדן_אהער' ), + 'Movepage' => array( 'באוועגן_בלאט' ), + 'Blockme' => array( 'בלאקירט_מיך' ), 'Categories' => array( 'קאטעגאריעס' ), 'Export' => array( 'עקספארט' ), 'Version' => array( 'ווערזיע' ), - 'Allmessages' => array( 'סיסטעם מעלדונגען' ), + 'Allmessages' => array( 'סיסטעם_מעלדונגען' ), 'Log' => array( 'לאגביכער' ), 'Blockip' => array( 'בלאקירן' ), 'Import' => array( 'אימפארט' ), - 'Unwatchedpages' => array( 'נישט אויפגעפאסטע בלעטער' ), + 'Userrights' => array( 'באניצער_רעכטן' ), + 'Unwatchedpages' => array( 'נישט_אויפגעפאסטע_בלעטער' ), 'Listredirects' => array( 'ווייטערפירונגען' ), - 'Mypage' => array( 'מײַן בלאט' ), - 'Mytalk' => array( 'מײַן שמועס בלאט' ), - 'Mycontributions' => array( 'מיינע ביישטייערן' ), - 'Listadmins' => array( 'ליסטע פון סיסאפן' ), - 'Listbots' => array( 'ליסטע פון באטס' ), - 'Popularpages' => array( 'פאפולערע בלעטער' ), + 'Unusedtemplates' => array( 'אומבאניצטע_מוסטערן' ), + 'Randomredirect' => array( 'צופעליק_ווײַטערפֿירן' ), + 'Mypage' => array( 'מײַן_בלאט' ), + 'Mytalk' => array( 'מײַן_שמועס_בלאט' ), + 'Mycontributions' => array( 'מיינע_ביישטייערן' ), + 'Listadmins' => array( 'ליסטע_פון_סיסאפן' ), + 'Listbots' => array( 'ליסטע_פון_באטס' ), + 'Popularpages' => array( 'פאפולערע_בלעטער' ), 'Search' => array( 'זוכן' ), - 'Withoutinterwiki' => array( 'בלעטער אָן אינטערוויקי' ), - 'Blankpage' => array( 'ליידיגער בלאט' ), + 'Resetpass' => array( 'ענדערן_פאסווארט' ), + 'Withoutinterwiki' => array( 'בלעטער_אָן_אינטערוויקי' ), + 'Blankpage' => array( 'ליידיגער_בלאט' ), 'Tags' => array( 'טאגן' ), + 'Activeusers' => array( 'טעטיגע_באניצער' ), ); $defaultUserOptionOverrides = array( @@ -129,7 +143,7 @@ $magicWords = array( 'nogallery' => array( '0', '__קיין_גאלעריע__', '__ללא_גלריה__', '__NOGALLERY__' ), 'toc' => array( '0', '__אינהאלט__', '__תוכן_עניינים__', '__תוכן__', '__TOC__' ), 'noeditsection' => array( '0', '__נישט_רעדאקטירן__', '__ללא_עריכה__', '__NOEDITSECTION__' ), - 'numberofarticles' => array( '1', 'צאל ארטיקלען', 'מספר ערכים', 'NUMBEROFARTICLES' ), + 'numberofarticles' => array( '1', 'צאל_ארטיקלען', 'מספר ערכים', 'NUMBEROFARTICLES' ), 'pagename' => array( '1', 'בלאטנאמען', 'שם הדף', 'PAGENAME' ), 'namespace' => array( '1', 'נאמענטייל', 'מרחב השם', 'NAMESPACE' ), 'fullpagename' => array( '1', 'פולבלאטנאמען', 'שם הדף המלא', 'FULLPAGENAME' ), @@ -143,10 +157,15 @@ $magicWords = array( 'img_none' => array( '1', 'אן', 'ללא', 'none' ), 'img_center' => array( '1', 'צענטער', 'מרכז', 'center', 'centre' ), 'img_sub' => array( '1', 'אונטער', 'תחתי', 'sub' ), + 'img_top' => array( '1', 'אויבן', 'למעלה', 'top' ), + 'img_bottom' => array( '1', 'אונטן', 'למטה', 'bottom' ), + 'img_link' => array( '1', 'לינק=$1', 'קישור=$1', 'link=$1' ), + 'img_alt' => array( '1', 'טעקסט=$1', 'טקסט=$1', 'alt=$1' ), + 'grammar' => array( '0', 'גראמאטיק:', 'דקדוק:', 'GRAMMAR:' ), 'plural' => array( '0', 'מערצאל:', 'רבים:', 'PLURAL:' ), - 'fullurl' => array( '0', 'פֿולער נאמען:', 'כתובת מלאה:', 'FULLURL:' ), + 'fullurl' => array( '0', 'פֿולער_נאמען:', 'כתובת מלאה:', 'FULLURL:' ), 'raw' => array( '0', 'רוי:', 'ללא עיבוד:', 'RAW:' ), - 'displaytitle' => array( '1', 'ווייזן קעפל', 'כותרת תצוגה', 'DISPLAYTITLE' ), + 'displaytitle' => array( '1', 'ווייזן_קעפל', 'כותרת תצוגה', 'DISPLAYTITLE' ), 'language' => array( '0', '#שפראך:', '#שפה:', '#LANGUAGE:' ), 'defaultsort' => array( '1', 'גרונטסארטיר:', 'מיון רגיל:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ), 'pagesize' => array( '1', 'בלאטגרייס', 'גודל דף', 'PAGESIZE' ), @@ -168,8 +187,7 @@ $messages = array( 'tog-editsection' => 'ערמעגליכט אפטייל ענדערן דורך [ענדערן] לינקס', 'tog-editsectiononrightclick' => 'באמעגליך פאראגראף ענדערונגען דורכן קוועטשן אויפן רעכטן
    אויף אפטייל קעפל (JavaScript)', 'tog-showtoc' => 'ווייז דאס אינהאלט קעסטל
    (פאר בלעטער מיט מער ווי 3 קעפלעך)', -'tog-rememberpassword' => 'געדענק מיין לאגירן אין דעם קאמפיוטער', -'tog-editwidth' => 'פֿאַרברייטערן דאס רעדאַקטירונג קעסטל צום פֿולן ברייט', +'tog-rememberpassword' => 'געדענק מיין אריינלאגירן אין דעם בלעטערער (ביז $1 {{PLURAL:$1|טאָג|טעג}})', 'tog-watchcreations' => 'לייג צו בלעטער וואס איך באשאף צו מיין אכטונג ליסטע', 'tog-watchdefault' => 'אויפפאסן אױטאָמאַטיש די ארטיקלען װאָס איך באַאַרבעט', 'tog-watchmoves' => 'לייג צו בלעטער וואס איך באוועג צו מיין אכטונג ליסטע', @@ -316,31 +334,21 @@ $messages = array( 'faqpage' => 'Project:מערסטע געפרעגט פראגעס', # Vector skin -'vector-action-addsection' => 'צושטעלן טעמע', -'vector-action-delete' => 'אויסמעקן', -'vector-action-move' => 'באַוועגן', -'vector-action-protect' => 'שיצן', -'vector-action-undelete' => 'מבטל זיין אויסמעקן', -'vector-action-unprotect' => 'אראפנעמען שיץ', -'vector-namespace-category' => 'קאַטעגאָריע', -'vector-namespace-help' => 'הילף בלאַט', -'vector-namespace-image' => 'טעקע', -'vector-namespace-main' => 'בלאַט', -'vector-namespace-media' => 'מעדיע בלאַט', -'vector-namespace-mediawiki' => 'מודעה', -'vector-namespace-project' => 'פּראָיעקט בלאַט', -'vector-namespace-special' => 'באַזונדערער בלאַט', -'vector-namespace-talk' => 'שמועס', -'vector-namespace-template' => 'מוסטער', -'vector-namespace-user' => 'באַניצער בלאַט', -'vector-view-create' => 'שאַפֿן', -'vector-view-edit' => 'רעדאַקטירן', -'vector-view-history' => 'ווײַזן היסטאָריע', -'vector-view-view' => 'לייענען', -'vector-view-viewsource' => 'ווײַזן מקור', -'actions' => 'אַקציעס', -'namespaces' => 'נאָמענטיילן', -'variants' => 'װאַריאַנטן', +'vector-action-addsection' => 'צושטעלן טעמע', +'vector-action-delete' => 'אויסמעקן', +'vector-action-move' => 'באַוועגן', +'vector-action-protect' => 'שיצן', +'vector-action-undelete' => 'מבטל זיין אויסמעקן', +'vector-action-unprotect' => 'אראפנעמען שיץ', +'vector-simplesearch-preference' => 'אַקטיווירן פֿאַרברייטערטע זוך פֿארשלאָגן', +'vector-view-create' => 'שאַפֿן', +'vector-view-edit' => 'רעדאַקטירן', +'vector-view-history' => 'ווײַזן היסטאָריע', +'vector-view-view' => 'לייענען', +'vector-view-viewsource' => 'ווײַזן מקור', +'actions' => 'אַקציעס', +'namespaces' => 'נאָמענטיילן', +'variants' => 'װאַריאַנטן', 'errorpagetitle' => 'פֿעלער', 'returnto' => 'צוריקקערן צו $1.', @@ -354,15 +362,15 @@ $messages = array( 'history_short' => 'היסטאריע', 'updatedmarker' => 'דערהיינטיגט זינט מיין לעצטע וויזיט', 'info_short' => 'אינפארמאציע', -'printableversion' => 'ווערסיע פֿאַר פּרינטן', +'printableversion' => 'דרוק ווערסיע', 'permalink' => 'שטענדיגער לינק', 'print' => 'דרוק', 'edit' => 'רעדאַקטירן', -'create' => 'שאפֿן', +'create' => 'שאַפֿן', 'editthispage' => 'ענדערן דעם בלאט', 'create-this-page' => 'שאַפֿן דעם בלאַט', 'delete' => 'אויסמעקן', -'deletethispage' => 'מעק אויס דעם בלאט', +'deletethispage' => 'אויסמעקן דעם בלאַט', 'undelete_short' => 'צוריקשטעלן {{PLURAL:$1|איין רעדאַקטירונג|$1 רעדאַקטירונגען}}', 'protect' => 'באשיצן', 'protect_change' => 'טוישן', @@ -401,6 +409,9 @@ $messages = array( ביטע ווארטן א ביסל צייט בעפאר איר פרובירט ווידער אריינגיין אינעם בלאט. $1', +'pool-timeout' => 'אַריבער די צײַט וואַרטן פֿאר דער שליסונג', +'pool-queuefull' => 'ריי איז פֿול', +'pool-errorunknown' => 'אומבאַקאַנטער פֿעלער', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'וועגן {{SITENAME}}', @@ -567,7 +578,8 @@ $2', 'yourname' => 'באַניצער נאָמען:', 'yourpassword' => 'פאסווארט', 'yourpasswordagain' => 'ווידער אריינקלאפן פאסווארט', -'remembermypassword' => 'געדיינק מיך', +'remembermypassword' => 'געדיינק מײַן אַרײַנלאגירן אויף דעם קאמפיוטער (ביז $1 {{PLURAL:$1|טאָג|טעג}})', +'securelogin-stick-https' => 'בלייַבן פארבונדן צו HTTPS נאָכן ארײַנלאָגירן', 'yourdomainname' => 'אײַער געביט:', 'externaldberror' => 'עס איז אדער פארגעקומען אן אויטענטיקאציע דאטנבאזע פעלער אדער איר זענט נישט ערמעגליכט צו דערהיינטיגן אייער דרויסנדיגע קאנטע.', 'login' => 'אַרײַנלאָגירן', @@ -584,6 +596,7 @@ $2', 'gotaccount' => "האסט שוין א קאנטע? '''$1'''.", 'gotaccountlink' => 'אריינלאגירן', 'createaccountmail' => 'דורך ע-פאסט', +'createaccountreason' => 'אורזאַך:', 'badretype' => 'די פאסווערטער וואס איר האט אריינגעלייגט זענען נישט אייניג.', 'userexists' => 'דער באַנוצער נאָמען איז שוין אין באַנוץ. ביטע קלײַב אױס אַן אַנדער נאָמען.', 'loginerror' => 'לאגירן פֿעלער', @@ -605,6 +618,7 @@ $2', 'wrongpasswordempty' => 'פאסווארט אריינגעלייגט איז געווען ליידיג, ביטע פרובירט נאכאמאל.', 'passwordtooshort' => 'פאַסווערטער מוזן זײַן כאטש {{PLURAL:$1|איין כאַראַקטער|$1 כאַראַקטערס}}.', 'password-name-match' => 'אײַער פאַסווארט מוז זײַן אנדערש פון אײַער באַניצער נאָמען.', +'password-login-forbidden' => 'באַניצן דעם נאָמען און שפּריכוואָרט איז פאַרבאָטן.', 'mailmypassword' => 'שיקט מיין נייע פאסווארט', 'passwordremindertitle' => 'ניי צייטווייליג פאסווארט פאר {{SITENAME}}', 'passwordremindertext' => 'עמעצער (מסתמא איר, פֿון IP אדרעס $1) @@ -694,9 +708,10 @@ $2', 'showlivepreview' => 'לעבעדיגע פאראויסדיגע ווייזונג', 'showdiff' => 'ווײַז די ענדערונגען', 'anoneditwarning' => "'''ווארענונג:''' איר זענט נישט אריינלאגירט אין אייער קאנטע. אייער איי פי אדרעס וועט ווערן דאקומענטירט אין דעם בלאטס היסטאריע פון ענדערונגען. אויב זארגט איר זיך פאר פריוואטקייטן, ביטע טוט זיך אריינלאגירן.", +'anonpreviewwarning' => "''איר זענט נישט אַרײַנלאגירט. אויפֿהיטן וועט ארײַנשרײַבן אײַער IP אַדרעס אין דער רעדאַקטירונג היסטאריע פונעם בלאַט.''", 'missingsummary' => "'''דערמאנונג:''' איר האט נישט אויסגעפילט דעם קורץ ווארט אויפקלערונג אויף אייער עדיט. אויב וועט איר דרוקן נאכאמאל אויף \"היט אפ דעם בלאט\", וועט אייער ענדערונג ווערן געהיטן אן דעם.", 'missingcommenttext' => 'ביטע שטעלט אריין א אנמערקונג פון אונטן.', -'missingcommentheader' => "'''דערמאנונג:''' איר האט נישט אריינגעשטעלט א טעמע/קעפל פאר דעם אנמערקונג. אויב וועט איר דרוקן נאכאמאל אויפן \"היט-אפ בלאט\", וועט אייער ענדערונג ווערן אפגעהיטן אן דעם.", +'missingcommentheader' => "'''דערמאַנונג:''' איר האט נישט אַרײַנגעשטעלט א טעמע/קעפל פאר דער אנמערקונג. אויב וועט איר דרוקן נאכאמאל אויפן \"{{int:savearticle}}\", וועט אייער ענדערונג ווערן אפגעהיטן אן דעם.", 'summary-preview' => 'סך-הכל פאראויסדיגע ווייזונג:', 'subject-preview' => 'טעמע/קעפל פאראויסדיגע ווייזונג:', 'blockedtitle' => 'באנוצער איז בלאקירט', @@ -776,7 +791,11 @@ $2', '''ער איז דערווייל נאכנישט אויפֿגעהיטן!'''", 'userjspreview' => "'''געדענקט אַז איר טוט בלויז אויספרואוון\\פֿאראויסזען אייער באַניצער JavaScript.''' '''עס איז דערווײַל נאכנישט אָפגעהיטן!'''", -'userinvalidcssjstitle' => "'''ווארענונג:''' סאיז נישטא קיין סקין \"\$1\". גדענקט אז קאסטעם .css און .js בלעטער נוצען לאוער קעיס טיטול, e.g. {{ns:user}}:Foo/monobook.css ווי אנדערשט צו {{ns:user}}:Foo/Monobook.css.", +'sitecsspreview' => "'''געדענקט אַז איר טוט בלויז פֿאראויסזען דעם דאָזיקן CSS קאד.''' +'''ער איז דערווײַל נאכנישט אויפֿגעהיטן!'''", +'sitejspreview' => "'''געדענקט אַז איר טוט בלויז פֿאראויסזען דעם דאָזיקן JavaScript קאד.''' +'''ער איז דערווײַל נאכנישט אויפֿגעהיטן!'''", +'userinvalidcssjstitle' => "'''ווארענונג:''' סאיז נישטא קיין סקין \"\$1\". גדענקט אז קאסטעם .css און .js בלעטער נוצען לאוער קעיס טיטול, e.g. {{ns:user}}:Foo/vector.css ווי אנדערשט צו {{ns:user}}:Foo/Vector.css.", 'updated' => '(דערהיינטיגט)', 'note' => "'''באמערקונג:'''", 'previewnote' => "'''דאס איז נאָר אין אַ פֿאָרויסיקע ווייזונג, דער אַרטיקל איז דערווייל נאָך נישט געהיט!'''", @@ -812,8 +831,6 @@ $2', אזוי אויך, זאגט איר צו אז איר האט דאס געשריבן אליין, אדער דאס איבערקאפירט פון א מקור מיט פולן רשות דאס מפקיר זיין (זעט $1 פאר מער פרטים). '''זיכט נישט באניצן מיט שטאף וואס איז באשיצט מיט קאפירעכטן!'''", -'longpagewarning' => "'''ווארענונג: דער בלאט איז לאנג $1 קילאבייטן; געוויסע בלעטערערס קענען מעגלעך האבן פראבלעמען צו רעדאקטירן בלעטער וואס גרייכן אדער זענען לענגער פֿון 32kb. -ביטע באטראכט איינטיילן דעם בלאט צו קלענערע אפטיילונגען.'''", 'longpageerror' => "'''פעילער: די טעקסט וואס איר האט אריינגעשטעלט איז $1 קילאבייטס לאנג, וואס איז לענגער פון די מאקסימום פון $2 קילאבייטס. עס קען נישט ווערן אפגעהיטן.'''", 'readonlywarning' => "'''ווארענונג: די דאטעבאזע איז געווארן פארשלאסן פאר סייט אויפהאלטונג, ממילא וועט איר נישט קענען אפהיטן אייערע ענדערונגען אצינד. איר קענט קאפירן און ארײַנלייגן דעם טעקסט אריין צו א טעקסט טעקע און דאס דארטן אפהיטן פאר שפעטער.''' @@ -889,8 +906,8 @@ $2', 'currentrev-asof' => 'לויפיקע רעוויזיע פון $1', 'revisionasof' => 'רעוויזיע ביי $1', 'revision-info' => 'רעוויזיע ביי $1 פון $2', -'previousrevision' => '→ עלטערער ווערסיע', -'nextrevision' => 'נייע ווערסיע ←', +'previousrevision' => '→ עלטערע ווערסיע', +'nextrevision' => 'נײַערע ווערסיע ←', 'currentrevisionlink' => 'איצטיגע ווערסיע', 'cur' => 'איצט', 'next' => 'קומענדיגע', @@ -944,8 +961,9 @@ $2', 'revdelete-nologtype-title' => 'קיין לאג טיפ נישט געקליבן', 'revdelete-nologtype-text' => 'איר האט נישט ספעציפֿירט קיין לאג טיפ דורצוכפֿירן די פֿונקציע.', 'revdelete-nologid-title' => 'אומגילטיגער לאג־פֿאַרשרײַב', -'revdelete-no-file' => 'די טעקע ספעציפֿירט עקזיסטירט נישט.', -'revdelete-show-file-confirm' => 'צי זענט איר זעכער איר ווילט באַקוקן אן אויסגעמעקטע רעוויזיע פון דער טעקע "$1" פון $2 בשעה $3?', +'revdelete-nologid-text' => 'אדער האט איר נישט ספעציפֿיצירט א ציל לאגטיפ אדער איז נישט פֿאַרהאַן דער ספעציפֿיצירטער לאגטיפ.', +'revdelete-no-file' => 'די ספעציפֿירטע טעקע עקזיסטירט נישט.', +'revdelete-show-file-confirm' => 'צי זענט איר זעכער איר ווילט באַקוקן אַן אויסגעמעקטע רעוויזיע פון דער טעקע "$1" פון $2 בשעה $3?', 'revdelete-show-file-submit' => 'יא', 'revdelete-selected' => "'''{{PLURAL:$2|אויסדערוויילטע ווערסיע| אויסדערוויילטע ווערסיעס}} פון [[:$1]]:'''", 'logdelete-selected' => "'''{{PLURAL:$1| אויסדערוויילטע לאג אקציע|אויסדערוויילטע לאג אקציעס}}:'''", @@ -975,6 +993,8 @@ $1", 'logdelete-failure' => "'''נישט מעגלעך צו שטעלן לאג זעבאַרקייט:''' $1", 'revdel-restore' => 'טויש די זעבארקייט', +'revdel-restore-deleted' => 'אויסגעמעקטע ווערסיעס', +'revdel-restore-visible' => 'זעבאַרע ווערסיעס', 'pagehist' => 'בלאט היסטאריע', 'deletedhist' => 'אויסגעמעקטע ווערסיעס', 'revdelete-content' => 'אינהאלט', @@ -1031,11 +1051,13 @@ $1", # Diffs 'history-title' => 'רעוויזיע היסטאריע פֿון $1', 'difference' => '(אונטערשייד צווישן ווערסיעס)', +'difference-multipage' => '(אונטערשייד צווישן בלעטער)', 'lineno' => 'שורה $1:', 'compareselectedversions' => 'פארגלייך סעלעקטירטע ווערסיעס', 'showhideselectedversions' => 'ווײַזן/באַהאַלטן געקליבענע רעוויזיעס', 'editundo' => 'אַנולירן', -'diff-multi' => '({{PLURAL:$1|איין מיטלסטע ווערסיע |$1 מיטלסטע ווערסיעס}} נישט געוויזן.)', +'diff-multi' => '({{PLURAL:$1|איין מיטלסטע ווערסיע |$1 מיטלסטע ווערסיעס}} פֿון {{PLURAL:$2|איין באַניצער|$2 באַניצער}} נישט געוויזן.)', +'diff-multi-manyusers' => '({{PLURAL:$1|איין מיטלסטע ווערסיע |$1 מיטלסטע ווערסיעס}} פֿון מער ווי {{PLURAL:$2|איין באַניצער|$2 באַניצער}} נישט געוויזן.)', # Search results 'searchresults' => 'זוכן רעזולטאטן', @@ -1070,6 +1092,7 @@ $1", 'searchprofile-everything-tooltip' => 'זוך אינעם גאנצען אינהאלט (אריינגערעכנט רעדן בלעטער)', 'searchprofile-advanced-tooltip' => 'זוכן אין צוגעשטעלטע ָנאָמענטיילן', 'search-result-size' => '$1 ({{PLURAL:$2|איין ווארט|$2 ווערטער}})', +'search-result-category-size' => '{{PLURAL:$1|1 מיטגליד|$1 מיטגלידער}} ({{PLURAL:$2|1 אונטער־קאַטעגאריע|$2 אונטער־קאַטעגאריעס}}, {{PLURAL:$3|1 טעקע|$3 טעקעס}})', 'search-result-score' => 'שייכותדיקייט: $1%', 'search-redirect' => '(ווײַטערפֿירן $1)', 'search-section' => '(אפטיילונג $1)', @@ -1099,6 +1122,9 @@ $1", 'powersearch-toggleall' => 'אלע', 'powersearch-togglenone' => 'קיין', 'search-external' => 'דרויסנדיק זוכן', +'searchdisabled' => "{{SITENAME}} זוך איז אָפאַקטיווירט. +צווישנצײַט קענט איר זוכן מיט גוגל. +געב אכט אז ס'איז מעגלעך אַז זייער אינדעקס פֿון {{SITENAME}} אינהאַלט איז אפשר פֿאַרעלטערט.", # Quickbar 'qbsettings' => 'גיכפאַס', @@ -1124,9 +1150,9 @@ $1", 'prefs-rc' => 'לעצטע ענדערונגען', 'prefs-watchlist' => 'אויפפאסונג ליסטע', 'prefs-watchlist-days' => 'טעג צו ווייזן אין דער אויפפאסונג ליסטע:', -'prefs-watchlist-days-max' => '(מאקסימום 7 טעג)', +'prefs-watchlist-days-max' => 'העכסטן 7 טעג', 'prefs-watchlist-edits' => 'מאַקסימום נומער פון נײַע ענדערונגען צו ווייַזן אין פֿאַרברייטערטער אויפֿפאַסונג ליסטע:', -'prefs-watchlist-edits-max' => '(מאקסימום צאל: 1000)', +'prefs-watchlist-edits-max' => 'מאַקסימום נומער: 1000', 'prefs-watchlist-token' => 'אויפֿפאַסונג ליסטע סימן:', 'prefs-misc' => 'פֿאַרשידנס', 'prefs-resetpass' => 'טוישן פאַסווארט', @@ -1144,6 +1170,7 @@ $1", 'contextlines' => 'שורות פער רעזולטאט', 'contextchars' => 'קאנטעקסט פער שורה', 'stub-threshold' => 'שוועל פֿאַר שטומף לינק פֿאָרמאַטירונג (בייטן):', +'stub-threshold-disabled' => 'אַנולירט', 'recentchangesdays' => 'צאל פון טעג צו ווייזן אין די לעצטע ענדערונגן:', 'recentchangesdays-max' => 'מאַקסימום $1 {{PLURAL:$1|טאָג|טעג}}', 'recentchangescount' => 'די צאָל רעדאַקטירונגען צו ווײַזן גרונטלעך:', @@ -1174,6 +1201,7 @@ $1", 'prefs-files' => 'טעקעס', 'prefs-custom-css' => 'באַניצער דעפֿינירט CSS', 'prefs-custom-js' => 'באַניצער דעפֿינירט JS', +'prefs-common-css-js' => 'שותפֿותדיקער CSS/JS פֿאַר אַלע אויספֿארמירונגען:', 'prefs-reset-intro' => 'איר קענט ניצן דעם בלאַט צוריקצושטעלן אײַערע פרעפֿערענצן גרונטלעך פֿאַרן ארט. to reset your preferences to the site defaults. מען קען דאָס נישט אַנולירן.', 'prefs-emailconfirm-label' => 'ע-פאסט באַשטעטיקונג:', @@ -1210,9 +1238,15 @@ $1", 'prefs-advancedrendering' => 'אדוואנסירטע אפציעס', 'prefs-advancedsearchoptions' => 'אדוואנסירטע אפציעס', 'prefs-advancedwatchlist' => 'אדוואנסירטע אפציעס', -'prefs-display' => 'ווייז אפציעס', +'prefs-displayrc' => 'ווייז אפציעס', +'prefs-displaysearchoptions' => 'ווײַז אפציעס', +'prefs-displaywatchlist' => 'ווײַז אפציעס', 'prefs-diffs' => 'צווישנשיידן', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => 'ע-פּאָסט אַדרעס זעט אויס גילטיק', +'email-address-validity-invalid' => 'לייגט אַרײַן א גילטיקן ע־פאסט אַדרעס', + # User rights 'userrights' => 'באנוצער רעכטן פארוואלטערשאפט', 'userrights-lookup-user' => 'פֿאַרוואַלטן באניצער גרופעס', @@ -1350,14 +1384,9 @@ $1", 'recentchanges-legend' => 'ברירות פאר לעצטע ענדערונגען', 'recentchangestext' => 'גיי נאך די לעצטע ענדערונגען צו דער וויקי אויף דעם בלאט.', 'recentchanges-feed-description' => 'גייט נאך די לעצטע ענדערונגען צו דער וויקי אין דעם בלאט.', -'recentchanges-label-legend' => 'לעגענדע: $1.', -'recentchanges-legend-newpage' => '$1 - נײַער בלאַט', 'recentchanges-label-newpage' => 'די רעדאַקטירונג האט באשאפֿן א נײַעם בלאַט', -'recentchanges-legend-minor' => '$1 - מינערדיקע רעדאַקטירונג', 'recentchanges-label-minor' => 'דאָס איז אַ מינערדיקע רעדאַקטירונג', -'recentchanges-legend-bot' => '$1 - באט רעדאַקטירונג', 'recentchanges-label-bot' => ' די רעדאַקטירונג האט אויסגעפירט א באט', -'recentchanges-legend-unpatrolled' => '$1 - אומפאַטראלירטע רעדאַקטירונג', 'recentchanges-label-unpatrolled' => 'די רעדאקטירונג איז נאך נישט נאכגעקוקט', 'rcnote' => "אונטן {{PLURAL:$1|איז '''1''' ענדערונג|זײַנען די לעצטע '''$1''' ענדערונגען}} אין {{PLURAL:$2|דעם לעצטן טאג|די לעצטע $2 טעג}}, ביז $5, $4.", 'rcnotefrom' => "פֿאלגנד זענען די ענדערונגען זײַט '''$2''' (ביז '''$1''')", @@ -1397,6 +1426,7 @@ $1", # Upload 'upload' => 'אַרױפֿלאָדן בילדער/טעקעס', 'uploadbtn' => 'אַרױפֿלאָדן טעקע', +'reuploaddesc' => 'אַנולירן אַרויפֿלאָד און צוריקגיין צו דער אַרויפֿלאָדן פֿארעם', 'upload-tryagain' => 'פֿאָרלייגן מאדיפֿיצירטע טעקע באַשרײַבונג', 'uploadnologin' => 'נישט אַרײַנלאגירט', 'uploadnologintext' => 'איר מוזט זײַן [[Special:UserLogin| אַרײַנלאָָגירט]] כדי ארויפֿצולאָדן טעקעס', @@ -1429,6 +1459,14 @@ $1", ביטע גיט דער טעקע א נײַעם נאמען און פּרובירט ארויפֿלאָדן נאכאַמאָל.', 'badfilename' => 'טעקע נאמען איז געטוישט צו "$1".', 'filetype-missing' => 'די טעקע האט נישט קיין פארברייטערונג (למשל ".jpg").', +'empty-file' => 'די טעקע וואָס איר האט אײַנגעגעבן איז ליידיג.', +'file-too-large' => 'די טעקע וואָס איר האט אײַנגעגעבן איז צו גרויס.', +'filename-tooshort' => 'דער טעקענאמען איז צו קורץ', +'filetype-banned' => 'דער טיפ טעקע איז געאַסרט', +'illegal-filename' => 'דער טעקע־נאָמען איז נישט ערלויבט', +'unknown-error' => 'אַן אומבאַקאַנט טעות איז פֿארגעקומען.', +'tmp-create-error' => 'קען נישט שאַפֿן צייַטווייַליקע טעקע.', +'tmp-write-error' => 'טעות בײַם שרייַבן צייַטווייַליקע טעקע.', 'large-file' => 'רעקאמענדירט אז טעקעס זאל נישט זײַן גרעסער פֿון$1; די טעקע איז $2.', 'emptyfile' => 'די טעקע וואס איר האט ארויפֿלגעלאָדן איז ליידיג. @@ -1443,7 +1481,6 @@ $1", אויב איר ווילט דאך אַרויפֿלאָדן אײַער טעקע, ביטע גיין צוריק און ניצן אַן אַנדער נאָמען. [[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => 'די טעקע איז א דופליקאַט פון די פֿאלגנדע {{PLURAL:$1|טעקע|טעקעס}}:', -'successfulupload' => 'דערפֿאלגרייכער ארויפֿלאָד', 'uploadwarning' => 'אַרויפֿלאָדן וואָרענונג', 'uploadwarning-text' => 'זײַט אַזוי גוט מאדיפֿיצירן די טעקע באַשרייבונג און פרובירט נאכאַמאָל.', 'savefile' => 'טעקע אױפֿהיטן', @@ -1461,6 +1498,13 @@ $1", 'upload-description' => 'טעקע שילדערונג', 'upload-options' => "אַרויפֿלאָדן ברירה'ס", 'watchthisupload' => 'אויפֿפאַסן דעם בלאט', +'upload-success-subj' => 'דערפֿאלגרייכער ארויפֿלאָד', +'upload-success-msg' => 'אײַער אַרויפֿלאָד פֿון [$2] איז געווען דערפֿאלגרייך. עס איז פֿאַראָן דאָ: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'אַרויפֿלאָדן פראבלעם', +'upload-failure-msg' => "ס'איז געווען א פראבלעם מיט אײַער אָרויפֿלאַד פֿון [$2]: + +$1", +'upload-warning-subj' => 'אַרויפֿלאָדן וואָרענונג', 'upload-proto-error' => 'פאלשער פראטאקאל', 'upload-file-error' => 'אינערליכער פעלער', @@ -1495,6 +1539,7 @@ $1", 'listfiles_search_for' => 'זוכן פֿאַר מעדיע נאָמען:', 'imgfile' => 'טעקע', 'listfiles' => 'טעקע ליסטע', +'listfiles_thumb' => 'געמינערט בילד', 'listfiles_date' => 'דאטע', 'listfiles_name' => 'נאמען', 'listfiles_user' => 'באַניצער', @@ -1604,8 +1649,8 @@ $1", 'statistics-edits' => 'רעדאַקטירונגען זײַט {{SITENAME}} איז אויפֿגעשטעלט', 'statistics-edits-average' => 'דורכשניט רעדאַקטירונגען אין א בלאַט', 'statistics-views-total' => 'צאל קוקן אינגאַנצן', +'statistics-views-total-desc' => 'באַקוקן צו נישט־פֿאַרהאַנען בלעטער און באַזונדערע בלעטער זענען נישט אַרייַנגערעכנט.', 'statistics-views-peredit' => 'צאל קוקן צו א רעדאַקטירונג', -'statistics-jobqueue' => 'לענג [http://www.mediawiki.org/wiki/Manual:Job_queue אויפֿגאַבעס ריי]', 'statistics-users' => 'איינגעשריבענע [[Special:ListUsers|באניצערס]]', 'statistics-users-active' => 'טעטיקע באניצערס', 'statistics-users-active-desc' => 'באניצערס וואס האבן דורכגעפירט א פעולה אין די לעצטע {{PLURAL:$1|טאג|$1 טעג}}', @@ -1618,7 +1663,7 @@ $1", 'doubleredirects' => 'געטאפלטע ווײַטערפֿירונגען', 'doubleredirectstext' => 'דער בלאט רעכנט אויס בלעטער וואס פירן ווייטער צו אנדערע ווייטערפירן בלעטער. יעדע שורה אנטהאלט א לינק צום ערשטן און צווייטן ווייטערפירונג, ווי אויך די ציל פון דער צווייטער ווייטערפירונג, וואס רוב מאל געפינט זיך די ריכטיגע ציל וואו די ערשטע ווייטערפירונג זאל ווייזן. -אויסגעשטראכענע טעמעס זענען שוין געלייזט.', +אויסגעשטראכענע טעמעס זענען שוין געלייזט.', 'double-redirect-fixed-move' => '[[$1]] איז געווארן באוועגט, און איז יעצט א ווייטערפֿירונג צו [[$2]]', 'double-redirect-fixer' => 'מתקן ווײַטערפֿירונגען', @@ -1641,6 +1686,8 @@ $1", 'nmembers' => '$1 {{PLURAL:$1|בלאט|בלעטער}}', 'nrevisions' => '{{PLURAL:$1|איין רעוויזיע|$1 רעוויזיעס}}', 'nviews' => '{{PLURAL:$1|איין קוק|$1 קוקן}}', +'nimagelinks' => 'געניצט אויף $1 {{PLURAL:$1|בלאַט|בלעטער}}', +'ntransclusions' => 'געניצט אויף $1 {{PLURAL:$1|בלאַט|בלעטער}}', 'specialpage-empty' => 'דער בלאט איז ליידיג.', 'lonelypages' => "פֿאר'יתומ'טע בלעטער", 'lonelypagestext' => 'די פֿאלגנדע בלעטער זענען נישט פֿאַרבינדן פֿון אדער אריבערגעשלאסן אין אנדערע בלעטער אין {{SITENAME}}.', @@ -1791,34 +1838,40 @@ $1", 'listgrouprights-removegroup-self-all' => 'אראָפנעמען אַלע גרופעס פֿון אייגענער קאנטע', # E-mail user -'mailnologin' => 'נישטא קיין אדרעס צו שיקן', -'mailnologintext' => 'איר ברויכט זײַן [[Special:UserLogin|אַרײַנלאגירט]] און האָבן א גילטיגן ע־פאסט אַדרעס אין אײַער [[Special:Preferences|פרעפֿערענצן]] צו שיקן ע־פאסט צו אַנדערע באַניצער.', -'emailuser' => 'אַרויסשיקן ע-פאסט צו דעם באַניצער', -'emailpage' => 'אַרויסשיקן ע-פאסט צו באַניצער.', -'emailpagetext' => 'איר קענט ניצן דעם פֿארעם אונטן צו שיקן אן בליצבריוו צו דעם דאזיגן באַניצער. +'mailnologin' => 'נישטא קיין אדרעס צו שיקן', +'mailnologintext' => 'איר ברויכט זײַן [[Special:UserLogin|אַרײַנלאגירט]] און האָבן א גילטיגן ע־פאסט אַדרעס אין אײַער [[Special:Preferences|פרעפֿערענצן]] צו שיקן ע־פאסט צו אַנדערע באַניצער.', +'emailuser' => 'אַרויסשיקן ע-פאסט צו דעם באַניצער', +'emailpage' => 'אַרויסשיקן ע-פאסט צו באַניצער.', +'emailpagetext' => 'איר קענט ניצן דעם פֿארעם אונטן צו שיקן אן בליצבריוו צו דעם דאזיגן באַניצער. דער ע-פאסט אדרעס וואס איר האט אריינגעלייגט אין [[Special:Preferences| אייערע באניצער פרעפערנעצן]] וועט זיך ווייזן כאילו דאס איז געקומען פון דארטן, בכדי צו דערמעגלעכן א תשובה.', -'usermailererror' => 'בליצבריוו האט צוריקגעשיקט א טעות:', -'defemailsubject' => 'ע-פאסט {{SITENAME}}', -'noemailtitle' => 'נישטא קיין אי-מעיל אדרעס', -'noemailtext' => 'דער באַניצער האט נישט באשטימט קיין גילטיקן ע-פאסט אדרעס.', -'nowikiemailtitle' => 'קיין ע-פאסט נישט דערלויבט', -'nowikiemailtext' => 'דער באַניצער האט געקליבן נישט באַקומען ע־פאסט פֿון אַנדערע באַניצער.', -'email-legend' => 'אַרויסשיקן ע-פאסט צו אַן אַנדער {{SITENAME}} באַניצער', -'emailfrom' => 'פון', -'emailto' => 'צו', -'emailsubject' => 'טעמע:', -'emailmessage' => 'מעלדונג:', -'emailsend' => 'שיק', -'emailccme' => 'שיק מיר דורך ע־פאסט א קאפיע פֿון מיין מעלדונג.', -'emailccsubject' => 'קאפיע פון אײַער מעלדונג צו $1: $2', -'emailsent' => 'ע-פאסט געשיקט', -'emailsenttext' => 'אײַער אי-בריוו איז געשיקט געווארן.', -'emailuserfooter' => 'דער בליצבריוו איז געשיקט געווארן דורך$1 צו $2 מיט דער "שיקן בליצבריוו" פֿונקציע בײַ {{SITENAME}}.', +'usermailererror' => 'בליצבריוו האט צוריקגעשיקט א טעות:', +'defemailsubject' => 'ע-פאסט {{SITENAME}}', +'usermaildisabled' => 'באַניצער ע־פאסט אומאַקטיוויזירט', +'usermaildisabledtext' => 'איר קענט נישט שיקן ע־פאסט צו אנדערע באַניצערס אויף דער דאָזיקער וויקי', +'noemailtitle' => 'נישטא קיין אי-מעיל אדרעס', +'noemailtext' => 'דער באַניצער האט נישט באשטימט קיין גילטיקן ע-פאסט אדרעס.', +'nowikiemailtitle' => 'קיין ע-פאסט נישט דערלויבט', +'nowikiemailtext' => 'דער באַניצער האט געקליבן נישט באַקומען ע־פאסט פֿון אַנדערע באַניצער.', +'email-legend' => 'אַרויסשיקן ע-פאסט צו אַן אַנדער {{SITENAME}} באַניצער', +'emailfrom' => 'פון', +'emailto' => 'צו', +'emailsubject' => 'טעמע:', +'emailmessage' => 'מעלדונג:', +'emailsend' => 'שיק', +'emailccme' => 'שיק מיר דורך ע־פאסט א קאפיע פֿון מיין מעלדונג.', +'emailccsubject' => 'קאפיע פון אײַער מעלדונג צו $1: $2', +'emailsent' => 'ע-פאסט געשיקט', +'emailsenttext' => 'אײַער אי-בריוו איז געשיקט געווארן.', +'emailuserfooter' => 'דער בליצבריוו איז געשיקט געווארן דורך$1 צו $2 מיט דער "שיקן בליצבריוו" פֿונקציע בײַ {{SITENAME}}.', + +# User Messenger +'usermessage-summary' => 'איבערלאזן סיסטעם אָנזאָג', +'usermessage-editor' => 'סיסטעם שליח', # Watchlist 'watchlist' => 'מיין אויפפַּאסונג ליסטע', 'mywatchlist' => 'מיין אויפפַּאסונג ליסטע', -'watchlistfor' => "(פאר '''$1''')", +'watchlistfor2' => 'פֿאַר $1 $2', 'nowatchlist' => 'איר האט נישט קיין שום בלעטער אין אייער אויפפַּאסונג ליסטע.', 'watchlistanontext' => 'ביטע $1 כדי צו זען אדער ענדערן בלעטער אין אייער אַכטגעבן ליסטע.', 'watchnologin' => 'איר זענט נישט אַרײַנלאגירט', @@ -1939,7 +1992,10 @@ $UNWATCHURL 'revertpage' => 'רעדאַקטירונגען פֿון [[Special:Contributions/$2|$2]] צוריקגענומען ([[User talk:$2|רעדן]]) צו דער לעצטער ווערסיע פֿון [[User:$1|$1]]', 'revertpage-nouser' => 'צוריקגעשטעלט רעדאַקטירונגען פֿון (באַניצער־נאָמען אַראָפגענומען) צו לעצטער רעוויזיע פֿון [[User:$1|$1]]', 'rollback-success' => 'צוריקגעדרייט רעדאַקטירונגען פֿון $1 צו דער לעצטע ווערסיע פֿון $2', -'sessionfailure' => "ווײַזט אויס אז ס'איז דא א פראבלעם מיט אייער ארײַנלאגירן; די פעולה איז געווארן אנולירט צו פֿאַרהיטן קעגן פֿאַרשטעלן אייער סעסיע. זייט אזוי גוט און גייט צוריק צום פֿריערדיקן בלאט, און פרובירט נאכאַמאָל.", + +# Edit tokens +'sessionfailure-title' => 'זיצונג דורכפֿאַל', +'sessionfailure' => "ווײַזט אויס אז ס'איז דא א פראבלעם מיט אייער ארײַנלאגירן; די פעולה איז געווארן אנולירט צו פֿאַרהיטן קעגן פֿאַרשטעלן אייער סעסיע. זייט אזוי גוט און גייט צוריק צום פֿריערדיקן בלאט, און פרובירט נאכאַמאָל.", # Protect 'protectlogpage' => 'באשיצונג לאָג-בוך', @@ -2059,18 +2115,22 @@ $UNWATCHURL 'month' => 'ביז חודש:', 'year' => 'ביז יאר:', -'sp-contributions-newbies' => 'ווײַזן בײַשטײַערונגען נאר פֿון נײַע באַניצערס', -'sp-contributions-newbies-sub' => 'פאר נייע קאנטעס', -'sp-contributions-newbies-title' => 'בײַשטײַערונגען פֿון נײַע באַניצערס', -'sp-contributions-blocklog' => 'בלאקירן לאג', -'sp-contributions-deleted' => 'אויסגעמעקטע באַניצער בײַשטײַערונגען', -'sp-contributions-logs' => 'לאגביכער', -'sp-contributions-talk' => 'שמועס', -'sp-contributions-userrights' => 'באַניצער רעכטן פֿאַרוואַלטונג', -'sp-contributions-blocked-notice' => 'דער באַניצער איז אַצינד בלאקירט. פֿאלגנד איז די לעצטע אַקציע אינעם פֿאַרשפאַרונג לאגבוך:', -'sp-contributions-search' => 'זוכן בײַשטײַערונגען', -'sp-contributions-username' => 'באניצער נאמען אדער IP אדרעס:', -'sp-contributions-submit' => 'זוכן', +'sp-contributions-newbies' => 'ווײַזן בײַשטײַערונגען נאר פֿון נײַע באַניצערס', +'sp-contributions-newbies-sub' => 'פאר נייע קאנטעס', +'sp-contributions-newbies-title' => 'בײַשטײַערונגען פֿון נײַע באַניצערס', +'sp-contributions-blocklog' => 'בלאקירן לאג', +'sp-contributions-deleted' => 'אויסגעמעקטע באַניצער בײַשטײַערונגען', +'sp-contributions-uploads' => 'אַרויפֿלאָדונגען', +'sp-contributions-logs' => 'לאגביכער', +'sp-contributions-talk' => 'שמועס', +'sp-contributions-userrights' => 'באַניצער רעכטן פֿאַרוואַלטונג', +'sp-contributions-blocked-notice' => 'דער באַניצער איז אַצינד בלאקירט. פֿאלגנד איז די לעצטע אַקציע אינעם פֿאַרשפאַרונג לאגבוך:', +'sp-contributions-blocked-notice-anon' => 'דער IP אַדרעס איז דערווייַל פֿאַרשפאַרט. +די לעצטע בלאָקירן לאג אַקציע איז צוגעשטעלט אונטן:', +'sp-contributions-search' => 'זוכן בײַשטײַערונגען', +'sp-contributions-username' => 'באניצער נאמען אדער IP אדרעס:', +'sp-contributions-toponly' => 'בלויז ווײַזן רעדאַקטירונגען וואָס זענען די לעצטיקע רעוויזיעס', +'sp-contributions-submit' => 'זוכן', # What links here 'whatlinkshere' => 'װאָס פֿאַרבינדט אַהער', @@ -2142,14 +2202,13 @@ $UNWATCHURL 'ipb-edit-dropdown' => 'רעדאקטיר בלאקירונג סיבות', 'ipb-unblock-addr' => 'אויפֿבלאקירן $1', 'ipb-unblock' => 'אויפֿבלאקירן א באַניצער נאמען אדער IP אדרעס', -'ipb-blocklist-addr' => 'אַקטועלע בלאקירונגען פֿאַר $1', 'ipb-blocklist' => 'זעט עקזיסטירנדע בלאקירונגען', 'ipb-blocklist-contribs' => 'בײַשטײַערונגען פֿון $1', 'unblockip' => 'אויפֿבלאקירן באניצער', 'ipusubmit' => 'אוועקנעמען דעם בלאק', 'unblocked' => '[[User:$1|$1]] איז געווארן באַפֿרייט פון זײַן בלאק', 'unblocked-id' => 'בלאק $1 איז געווארן אַראָפגענומען.', -'ipblocklist' => 'ליסטע פון בלאקירטע באניצערס און IP אדרעסן', +'ipblocklist' => 'בלאקירטע באַניצער', 'ipblocklist-legend' => 'געפֿינען א בלאקירטן באניצער', 'ipblocklist-username' => 'באניצער נאמען אדער IP אדרעס:', 'ipblocklist-sh-userblocks' => '$1 קאנטע בלאקן', @@ -2204,6 +2263,7 @@ $1 איז שוין בלאקירט. צי ווילט איר טוישן די באַ 'proxyblocker-disabled' => 'די פֿונקציע איז אומאַקטיווירט.', 'proxyblockreason' => 'אייער איי.פי. אדרעס איז געווארן געבלאקט צוליב דעם ווייל דאס איז א אפענער פראקסי. ביטע פארבינדט זיך מיט אייער אינטערנעט סערוויס פראוויידער אדער טעקס סאפארט צו אינפארמירן זיי איבער דעם ערענסטן זיכערהייט פראבלעם.', 'proxyblocksuccess' => 'געטאן.', +'ipbnounblockself' => 'איר זענט נישט ערלויבט זיך אליין אויסבלאקירן', # Developer tools 'lockdb' => 'פֿאַרשליסן די דאַטנבאַזע', @@ -2233,6 +2293,18 @@ $1 איז שוין בלאקירט. צי ווילט איר טוישן די באַ אכטונג: דער בלאט וועט נישט ווערן אריבערגעפֿירט אויב עס איז שוין דא א בלאט אונטער דעם נייעם נאמען, אחוץ ווען ער איז ליידיג. אדער ער איז א ווייטערפֿירונג בלאט, און ער האט נישט קיין געשיכטע פון ענדערונגען. פשט דערפֿון, אז איר קענט איבערקערן א ווייטערפֿירונג וואס איר האט אט געמאכט בטעות, און איר קענט נישט אריבערשרייבן אן עקסיסטירנדן בלאט. '''ווארענונג:''' אזא ענדערונג קען זיין דראסטיש און נישט געווינטשען פאר א פאפולערן בלאט; ביטע פֿארזיכערט אז איר פֿארשטייט די ווייטגרייכנדע קאנסקווענסן צו דער אקציע בעפֿאר איר פֿירט דאס אויס.", +'movepagetext-noredirectfixer' => "זיך באניצן מיט דעם פֿארעם אונטן וועט פֿארענדערן דעם נאמען פֿון דעם בלאט, און וועט אריבערפֿירן זיין געשיכטע צום נייעם נאמען. + +דאס אלטע קעפל וועט ווערן א ווייטערפֿירן בלאט צום נײַעם נאמען. + +טוט פֿארזיכערן אז עס בלײַבן נישט קיין [[Special:DoubleRedirects|געטאפלטע]] אדער [[Special:BrokenRedirects|צעבראכענע]] ווייטערפֿירונגען. + +איר זענט פֿאראנטווארטלעך זיכער מאכן אז אלע פֿארבינדונגען ווערן געריכטעט צו דער געהעריגער ריכטונג. + +אַכטונג: דער בלאַט וועט '''נישט''' ווערן אַריבערגעפֿירט אויב עס איז שוין דאָ א בלאט אונטער דעם נײַעם נאמען, אחוץ ווען ער איז ליידיג. אדער ער איז א ווײַטערפֿירונג בלאט, און ער האט נישט קיין געשיכטע פון ענדערונגען. +פשט דערפֿון, אז איר קענט איבערקערן א ווייטערפֿירונג וואס איר האט אט געמאכט בטעות, און איר קענט נישט אריבערשרײַבן אַן עקסיסטירנדן בלאט. + +'''ווארענונג:''' אזא ענדערונג קען זיין דראַסטיש און נישט געוואונטשן פֿאַר א פאפולערן בלאַט; ביטע פֿאַזיכערט אז איר פֿאַרשטייט די ווײַטגרייכנדע קאנסעקווענסן צו דער אַקציע בעפֿאַר איר גייט ווײַטער.", 'movepagetalktext' => "דער רעדן בלאט וועט ווערן באַוועגט אויטאמאֵטיש מיט אים, '''אחוץ:''' * ס'איז שוין דא א נישט-ליידיגער בלאט מיטן נייעם נאמען, אדער. * איר נעמט אראפ דעם צייכן פונעם קעסטל אונטן. @@ -2286,6 +2358,7 @@ $1 איז שוין בלאקירט. צי ווילט איר טוישן די באַ 'immobile-source-page' => 'דער דאזיגער בלאט קען נישט ווערן באוועגט.', 'immobile-target-page' => 'קען נישט באַוועגן צו דעם ציל טיטל.', 'imagenocrossnamespace' => 'קען נישט באַוועגן טעקע צו נישט-טעקע נאָמענטייל', +'nonfile-cannot-move-to-file' => 'קען נישט באַוועגן וואָס איז נישט קיין טעקע צום טעקע נאָמענטייל', 'imageinvalidfilename' => 'דער ציל טעקע נאמען איז נישט גילטיק.', 'move-leave-redirect' => 'איבערלאזן א ווײַטערפֿירונג', @@ -2353,10 +2426,11 @@ $1 איז שוין בלאקירט. צי ווילט איר טוישן די באַ 'import-interwiki-namespace' => 'ציל נאמענטייל:', 'import-upload-filename' => 'טעקע נאמען:', 'import-comment' => 'הערה:', -'importtext' => 'ביטע עקספארטירט די טעקע פון דער מקור וויקי ניצנדיג דאס [[Special:Export|עקספארט הילפמיטל]], שפייכלט איין אויף אייער הארטדיסק און לאדט אויף דא.', +'importtext' => 'ביטע עקספארטירט די טעקע פון דער מקור וויקי ניצנדיג דאס [[Special:Export|עקספארט הילפמיטל]], שפייכלט אײַן אויף אײַער קאמפיוטער און לאדט אַרויף דא.', 'importstart' => 'אימפארטירט בלעטער…', 'import-revision-count' => '{{PLURAL:$1|איין ווערסיע|$1 ווערסיעס}}', 'importnopages' => 'נישטא קיין בלעטער צו אימפארטירן.', +'imported-log-entries' => '$1 {{PLURAL:$1|לאג אַקציע|לאג אַקציעס}} אימפארטירט.', 'importfailed' => 'אימפארט דורכגעפֿאלן: $1', 'importunknownsource' => 'אומבאקאנטער אימפארט טיפ', 'importcantopen' => 'נישט געקענט עפֿענען אימפארט טעקע', @@ -2383,6 +2457,7 @@ $1 איז שוין בלאקירט. צי ווילט איר טוישן די באַ # Import log 'importlogpage' => 'אימפארט לאג', +'importlogpagetext' => 'אַדמיניסטראַטיווער אימפארט פון בלעטער מיט רעדאַגירן היסטאריע פֿון ​​אַנדערע וויקיס.', 'import-logentry-upload' => 'האט אימפארטירט [[$1]] דורך טעקע אַרויפֿלאָדן', 'import-logentry-upload-detail' => '$1 {{PLURAL:$1|רעוויזיע|רעוויזיעס}}', 'import-logentry-interwiki' => 'אריבערגעוויקיט $1', @@ -2452,6 +2527,8 @@ $1 איז שוין בלאקירט. צי ווילט איר טוישן די באַ 'tooltip-upload' => 'הייב אן אויפלאדן', 'tooltip-rollback' => '"צוריקדרייען" דרײט צוריק רעדאַקטירונג(ען) צו דעם בלאַט פֿונעם לעצטן בײַשטײַערער מיט אײן קװעטש', 'tooltip-undo' => 'עפֿנט דעם רעדאַגיר־פֿענסטער אין אַ פֿאָרױסדיקן אױסקוק כּדי צוריקדרײען די רעדאַקציע. עס איז מעגלעך צוצולײגן אַ סיבה דערװעגן אין דעם "קורץ װאָרט" קעסטל.', +'tooltip-preferences-save' => 'היטן פרעפֿערענצן', +'tooltip-summary' => 'אײַנגעבן א קורצע רעזומע', # Stylesheets 'common.css' => '/* CSS געשריבן דא וועט אפילירן און באיינפלוסן אלע סקינס */', @@ -2519,26 +2596,29 @@ $1', 'filedelete-archive-read-only' => 'דער וועבסארווער קען נישט שרייבן צום ארכיוו פֿארצייכעניש "$1".', # Browsing diffs -'previousdiff' => 'פריִערדיקע ווערסיע →', +'previousdiff' => 'פריערדיקער אונטערשייד →', 'nextdiff' => 'קומענדיקע ווערסיע ←', # Media information 'widthheightpage' => '$1×$2, {{PLURAL:$3|איין בלאט|$3 בלעטער}}', -'file-info' => '(טעקע גרייס: $1, MIME טיפ: $2)', -'file-info-size' => '($1 × $2 פיקסעל, טעקע גרייס: $3, טיפ MIME: $4)', +'file-info' => 'טעקע גרייס: $1, MIME טיפ: $2', +'file-info-size' => '$1 × $2 פיקסעל, טעקע גרייס: $3, טיפ MIME: $4', 'file-nohires' => 'נישטא מיט א העכערע רעזאלוציע.', -'svg-long-desc' => '(טעקע SVG, נאמינעל: $1 × $2 פיקסעלן, טעקע גרייס: $3)', +'svg-long-desc' => 'טעקע SVG, נאמינעל: $1 × $2 פיקסעלן, טעקע גרייס: $3', 'show-big-image' => 'בילד מיט דער גרעסטער רעזאלוציע', 'show-big-image-thumb' => 'גרייס פון דער ווײַזונג: $1 × $2 פיקסעלן', 'file-info-gif-looped' => 'אין א פעטליע', -'file-info-gif-frames' => '$1 {{PLURAL:$1|ראם|ראמען}}', +'file-info-gif-frames' => '$1 {{PLURAL:$1| ראַם | ראָמען}}', +'file-info-png-looped' => 'אין א פעטליע', +'file-info-png-repeat' => 'געשפילט{{PLURAL:$1|איינמאָל|$1 מאָל}}', +'file-info-png-frames' => '$1 {{PLURAL:$1|ראם|ראמען}}', # Special:NewFiles -'newimages' => 'גאַלעריע פֿון נײַע בילדער', -'imagelisttext' => 'פאלגנד א ליסטע פון {{PLURAL:$1|איין בילד|$1 בילדער}}, סארטירט $2:', -'newimages-summary' => 'דער באזונדערער בלאט ווײַזט די לעצטע ארויפגעלאדענע טעקעס', +'newimages' => 'גאַלעריע פון ​​נײַע טעקעס', +'imagelisttext' => 'פֿאלגנד איז א ליסטע פון {{PLURAL:$1|איין טעקע|$1 טעקעס}}, סארטירט $2:', +'newimages-summary' => 'דער באַזונדערער בלאַט ווײַזט די לעצטע ארויפֿגעלאָדענע טעקעס.', 'newimages-legend' => 'פֿילטער', -'newimages-label' => 'טעקע נאָמען (אדער אַ טײל פֿון אים):', +'newimages-label' => 'טעקע נאָמען (אדער אַ טײל דערפֿון):', 'showhidebots' => '($1 ראָבאָטן)', 'noimages' => 'נישטא קיין בילדער.', 'ilsubmit' => 'זוכן', @@ -2588,22 +2668,27 @@ $1', 'exif-colorspace' => 'קאליר רוים', 'exif-componentsconfiguration' => 'מיינונג פון יעדן באשטאנדטייל', 'exif-compressedbitsperpixel' => 'בילד צוזאמקוועטשן מאוד', -'exif-pixelydimension' => 'גילטיגע ברייט פֿון בילד', -'exif-pixelxdimension' => 'גילטיגע הייך פֿון בילד', +'exif-pixelydimension' => 'בילד ברייט', +'exif-pixelxdimension' => 'בילד הייך', 'exif-makernote' => 'פֿאַבריצירער הערות', 'exif-usercomment' => 'באנוצער קאמענטורן', +'exif-relatedsoundfile' => 'פֿאַרבונדענע אוידיאָ טעקע', 'exif-datetimeoriginal' => 'דאטום און צייט פון דאַטן באשאפונג', 'exif-datetimedigitized' => 'דאטום און צייט פון דיזשיטייזונג', +'exif-subsectime' => 'צײַטפונקט (אונטערסעקונדן)', +'exif-subsectimeoriginal' => 'פֿאַרפֿאַסן צײַטפונקט (אונטערסעקונדן)', +'exif-subsectimedigitized' => 'דיגיטאַליזירן צײַטפונקט (אונטערסעקונדן)', 'exif-exposuretime' => 'באַלײַכטן צייט', 'exif-exposuretime-format' => '$1 סעק ($2)', 'exif-fnumber' => 'נומער F', 'exif-exposureprogram' => 'אויפדעקונג פראגראם', -'exif-shutterspeedvalue' => 'לעדל גיך', -'exif-aperturevalue' => 'עפֿן', -'exif-brightnessvalue' => 'אפֿנקייט', +'exif-shutterspeedvalue' => 'APEX לעדל גיך', +'exif-aperturevalue' => 'APEX עפֿענונג', +'exif-brightnessvalue' => 'APEX העלקייט', 'exif-exposurebiasvalue' => 'באַלײַכטן נייגונג', 'exif-maxaperturevalue' => 'מאקסימום גרייס פון עפענונג', 'exif-subjectdistance' => 'סוביעקט ווייט', +'exif-meteringmode' => 'מעסטן מאָדע', 'exif-lightsource' => 'ליכט מקור', 'exif-flash' => 'בליץ', 'exif-focallength' => 'לענס פֿאקאַלע לענג', @@ -2642,6 +2727,7 @@ $1', 'exif-gpsareainformation' => 'נאמען פון GPS געגענט', 'exif-gpsdatestamp' => 'דאטום GPS', 'exif-gpsdifferential' => 'דיפראנציאלע קאקרעקציע GPS', +'exif-objectname' => 'קורצער טיטל', # EXIF attributes 'exif-compression-1' => 'אומ-צאמגעקוועטשט', @@ -2738,26 +2824,26 @@ $1', 'limitall' => 'אַלע', # E-mail address confirmation -'confirmemail' => 'באַשטעטיקט בליצפּאָסט אַדרעס', -'confirmemail_noemail' => 'איר האט נישט קיין גוטן בליצבריוו אַדרעס אין אײַער [[Special:Preferences|באניצער פרעפֿערענצן]].', -'confirmemail_text' => 'די וויקי פארלאנגט אז איר זאלט באשטעטיגן אייער בליצפאסט אדרעס איידער איר באניצט זיך מיט דער ע-פאסט באדינסט. דרוקט אויפן קנעפל אונטן כדי צו שיקן א באשטעטיגונג קאד צו אייער אדרעס. לאדט אן דעם לינק אין אייער בלעטערער צו באשטעטיגן אז אייער אדרעס איז גילטיג.', -'confirmemail_pending' => 'א באשטעטיגונג קאד איז שוין געשיקט געווארן צו אייך; +'confirmemail' => 'באַשטעטיקט בליצפּאָסט אַדרעס', +'confirmemail_noemail' => 'איר האט נישט קיין גוטן בליצבריוו אַדרעס אין אײַער [[Special:Preferences|באניצער פרעפֿערענצן]].', +'confirmemail_text' => 'די וויקי פארלאנגט אז איר זאלט באשטעטיגן אייער בליצפאסט אדרעס איידער איר באניצט זיך מיט דער ע-פאסט באדינסט. דרוקט אויפן קנעפל אונטן כדי צו שיקן א באשטעטיגונג קאד צו אייער אדרעס. לאדט אן דעם לינק אין אייער בלעטערער צו באשטעטיגן אז אייער אדרעס איז גילטיג.', +'confirmemail_pending' => 'א באשטעטיגונג קאד איז שוין געשיקט געווארן צו אייך; אויב איר האט לעצטנס באַשאַפֿן אײַער קאנטע, איז אפשר כדאי ווארטן א פאר מינוט ביז דאס דערגרייכט אייך ווי איידער צו בעטן א נייעם קאד.', -'confirmemail_send' => 'שיקט באַשטעטיקונג קאד', -'confirmemail_sent' => 'באשטעטיקונג בליצברװ געשיקט.', -'confirmemail_oncreate' => 'א באשטעטיגונג קאד איז געשיקט געווארן צו אייער ע־פאסט אדרעס. +'confirmemail_send' => 'שיקט באַשטעטיקונג קאד', +'confirmemail_sent' => 'באשטעטיקונג בליצברװ געשיקט.', +'confirmemail_oncreate' => 'א באשטעטיגונג קאד איז געשיקט געווארן צו אייער ע־פאסט אדרעס. דער קאד ווערט נישט פֿארלאנגט צו קענען ארײַנלאגירן, אבער איר וועט אים דארפן דערלאנגן אויף צו קענען באניצן מיט ע־פאסט באַזירטע איינהייטן אין דער וויקי.', -'confirmemail_sendfailed' => '{{SITENAME}} האט נישט געקענט שיקן אייך די באשטעטיגונג קאד. ביטע טוט קאנטראלירן אייער אדרעס אויב עס האט נישט קיין טעות. +'confirmemail_sendfailed' => '{{SITENAME}} האט נישט געקענט שיקן אייך די באשטעטיגונג קאד. ביטע טוט קאנטראלירן אייער אדרעס אויב עס האט נישט קיין טעות. ע-פאסט צוריגעקערט: $1', -'confirmemail_invalid' => 'נישט קיין גוטער באַשטעטיקן קאָד. ער איז מעגלעך אויסגעגאַנגען.', -'confirmemail_needlogin' => 'איר ברויכט דורכפֿירן $1 כדי צו באשטעטיגן אײַער ע-פאסט אדרעס.', -'confirmemail_success' => 'אײַער בליצפּאָסט אַדרעס איז באַשטעטיקט געװאָרן. +'confirmemail_invalid' => 'נישט קיין גוטער באַשטעטיקן קאָד. ער איז מעגלעך אויסגעגאַנגען.', +'confirmemail_needlogin' => 'איר ברויכט דורכפֿירן $1 כדי צו באשטעטיגן אײַער ע-פאסט אדרעס.', +'confirmemail_success' => 'אײַער בליצפּאָסט אַדרעס איז באַשטעטיקט געװאָרן. איר קענט איצט [[Special:UserLogin|אַרײַנלאגירן]] און הנאה האָבן פֿון דער וויקי.', -'confirmemail_loggedin' => 'אייער ע־פאסט אדרעס איז איצט געווארן באשטעטיגט.', -'confirmemail_error' => 'עפעס איז געגאנגען שלעכט מיט אָפּהיטן אײַער באַשטעטיקונג.', -'confirmemail_subject' => '{{SITENAME}} בליצבריװ אדרעס באַשטעטיקונג', -'confirmemail_body' => 'עמעצער, ווארשיינליך איר (פון איי פי אדרעס: $1), האט איינגעשריבן די קונטע: "$2" מיט אט דעם בליצפאסט אדרעס אויף {{SITENAME}}. +'confirmemail_loggedin' => 'אייער ע־פאסט אדרעס איז איצט געווארן באשטעטיגט.', +'confirmemail_error' => 'עפעס איז געגאנגען שלעכט מיט אָפּהיטן אײַער באַשטעטיקונג.', +'confirmemail_subject' => '{{SITENAME}} בליצבריװ אדרעס באַשטעטיקונג', +'confirmemail_body' => 'עמעצער, ווארשיינליך איר (פון איי פי אדרעס: $1), האט איינגעשריבן די קונטע: "$2" מיט אט דעם בליצפאסט אדרעס אויף {{SITENAME}}. כדי זיכער מאכן אז די קונטע געהערט טאקע צו אייך, ביטע טוט עפענען דעם לינק אין די אייער בלעטערער: @@ -2768,8 +2854,19 @@ $3 $5 דער באשטעטיגונג קאד גייט אויס $4.', -'confirmemail_invalidated' => 'בליצפאסט אדרעס באשטעטיקונג אַנולירט', -'invalidateemail' => 'אַנולירן בליצפאסט באַשטעטיקונג', +'confirmemail_body_changed' => 'עמעצער, ווארשיינליך איר, פֿון IP אַדרעס: $1, האט געענדערט דעם ע־פאסט אַדרעס פֿון דער קאנטע "$2" צו דעם אדרעס אויף {{SITENAME}}. + +צו באַשטעטיקן אַז די קונטע געהערט טאקע צו אייך און ווידער אַקטיווירן ע־פאסט דינסטן אויף {{SITENAME}}, ביטע טוט עפֿענען דעם לינק אין אייער בלעטערער: + +$3 + +אויב די קאנטע געהערט *נישט* אײַך, פאלגט די דאָזיגע לינק מבטל צו זיין די ע-פאסט אדרעס באשטעטיגונג: + +$5 + +דער באשטעטיגונג קאד גייט אויס $4.', +'confirmemail_invalidated' => 'בליצפאסט אדרעס באשטעטיקונג אַנולירט', +'invalidateemail' => 'אַנולירן בליצפאסט באַשטעטיקונג', # Scary transclusion 'scarytranscludedisabled' => '[אינטערוויקי אריבערשליסן איז אַנולירט]', @@ -2803,6 +2900,7 @@ $5 'table_pager_first' => 'ערשטער בלאט', 'table_pager_last' => 'לעצטער בלאט', 'table_pager_limit' => 'ווײַז $1 פרטים א בלאט', +'table_pager_limit_label' => 'איינהייטן אין א בלאַט', 'table_pager_limit_submit' => 'גיין', 'table_pager_empty' => 'קיין רעזולטאטן', @@ -2875,6 +2973,7 @@ $5 'version-other' => 'אנדער', 'version-version' => '(ווערסיע $1)', 'version-license' => 'ליצענץ', +'version-poweredby-others' => 'אַנדערע', 'version-software' => 'אינסטאַלירט ווייכוואַרג', 'version-software-product' => 'פראדוקט', 'version-software-version' => 'ווערסיע', @@ -2912,6 +3011,16 @@ $5 'blankpage' => 'ליידיגער בלאַט', 'intentionallyblankpage' => 'דער בלאַט איז ליידיג בכוונה', +# External image whitelist +'external_image_whitelist' => ' # לאזט די שורה גענוי ווי זי איז
    +#לייגט רעגולערע אויסדרוק פֿראגמענטן (נאר דעם טייל צווישן די //) אונטן
    +#מען וועט זיי צופאסן מיט די  URL אדרעסן פון אויסערלעכע בילדער
    +#די וואס זענען צוגעפאסט וועט מען אויסשטעלן ווי בילדער, אנדערשט וועט  מען ווייזן א לינק צום בילד
    +#שורות וואס הייבן אן # ווערן גערעכנט הערות
    +#דאס איז נישט אפהענגיק אין קליינע אדער גרויסע אותיות
    +
    +#אלע רעגולערע אויסדרוקן זאל מען שטעלן העכער פון דער שורה. לאזט די שורה גענוי ווי זי איז
    ', + # Special:Tags 'tag-filter' => '[[Special:Tags|מאַרקירונג]] פֿילטער:', 'tag-filter-submit' => 'פֿילטער', @@ -2920,6 +3029,12 @@ $5 'tags-edit' => 'רעדאַקטירן', 'tags-hitcount' => ' {{PLURAL:$1|ענדערונג|$1 ענדערונגען}}', +# Special:ComparePages +'comparepages' => 'פאַרגלייַכן בלעטער', +'compare-selector' => 'פאַרגלייַכן בלאַט רעוויזיעס', +'compare-page1' => 'עמוד 1', +'compare-submit' => 'פֿאַרגלייַכן', + # Database error messages 'dberr-header' => 'די וויקי האט א פראבלעם', 'dberr-problems' => 'אנטשולדיגט! דער דאזיקער סייט האט טעכנישע פראבלעמען.', diff --git a/languages/messages/MessagesYo.php b/languages/messages/MessagesYo.php index 396a7bda..c3337822 100644 --- a/languages/messages/MessagesYo.php +++ b/languages/messages/MessagesYo.php @@ -36,6 +36,21 @@ $namespaceAliases = array( 'Ọ̀rọ̀_àwòrán' => NS_FILE_TALK, ); +$specialPageAliases = array( + 'Userlogin' => array( 'ÌwọléOníse' ), + 'Userlogout' => array( 'Ìbọ̀sódeOníṣe' ), + 'Preferences' => array( 'ÀwọnÌfẹ́ràn' ), + 'Recentchanges' => array( 'ÀwọnÀtúnṣeTuntun' ), + 'Newpages' => array( 'ÀwọnOjúewéTuntun' ), + 'Allpages' => array( 'GbogboÀwọnOjúewé' ), + 'Specialpages' => array( 'ÀwọnOjúewéPàtàkì' ), + 'Contributions' => array( 'ÀwọnÀfikún' ), + 'Categories' => array( 'ÀwọnẸ̀ka' ), + 'Mypage' => array( 'OjúwéMi' ), + 'Mytalk' => array( 'Ọ̀rọ̀Mi' ), + 'Mycontributions' => array( 'ÀwọnÀfikúnMi' ), +); + $messages = array( # User preference toggles 'tog-underline' => 'Fàlàsí àwọn ijápọ̀:', @@ -52,8 +67,7 @@ $messages = array( 'tog-editsection' => 'Jọ̀wọ́ àtúnṣe abala láti inú àwọn ìjápọ̀', 'tog-editsectiononrightclick' => 'Ìgbàláyè àtúnṣe abala nípa klííkì ọ̀tún lórí àkọlé abala (JavaScript pọndandan)', 'tog-showtoc' => 'Ìfihàn tábìlì àkóónú (fún àwọn ojúewé tó ní ju orí ọ̀rọ̀ 3 lọ)', -'tog-rememberpassword' => "Sè'rántí ọ̀rọ̀ìpamí mi lórí kọmputa yi", -'tog-editwidth' => 'Fífẹ àpótí àtúnṣe kó gba gbogbo ààyè ojúìran', +'tog-rememberpassword' => "Ṣè'rántí àkọọ́lẹ̀ ìwọlé mi lórí agbétàkùn yìí (fún {{PLURAL:$1|ọjọ́|ọjọ́}} $1 pípẹ́jùlọ)", 'tog-watchcreations' => "Ṣ'àfikún ojúewé tí mo dá mọ́ ìmójútó mi", 'tog-watchdefault' => "S'àfikún ojúewé tí mo s'àtúnse mọ́ ìmójútó mi", 'tog-watchmoves' => "S'àfikún ojúewé tí mo yípò mọ́ ìmójútó mi", @@ -195,30 +209,19 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => 'Àfikún orí-ọ̀rọ̀', -'vector-action-delete' => 'Ìparẹ́', -'vector-action-move' => 'Ìyípòdà', -'vector-action-protect' => 'Àbò', -'vector-action-undelete' => 'Ìmúkúrò ìparẹ́', -'vector-action-unprotect' => 'Ìjáwọ́ àbò', -'vector-namespace-category' => 'Ẹ̀ka', -'vector-namespace-help' => 'Ojúewé ìrànwọ́', -'vector-namespace-image' => 'Fáìlì', -'vector-namespace-main' => 'Ojúewé', -'vector-namespace-media' => 'Ojúewé amóhùnmáwòrán', -'vector-namespace-mediawiki' => 'Ìránṣẹ́', -'vector-namespace-project' => 'Ojúewé iṣẹ́-ọwọ́', -'vector-namespace-special' => 'Ojúewé pàtàkì', -'vector-namespace-talk' => 'Ìfọ̀rọ̀wérọ̀', -'vector-namespace-template' => 'Àdàkọ', -'vector-namespace-user' => 'Ojúewé oníṣe', -'vector-view-create' => "Ṣ'èdá", -'vector-view-edit' => 'Àtúnṣe', -'vector-view-history' => 'Wo ìtàn', -'vector-view-view' => 'Kíkà', -'vector-view-viewsource' => 'Wo àmìọ̀rọ̀', -'actions' => 'Àwọn ìgbéṣe', -'namespaces' => 'Àwọn orúkọàyè', +'vector-action-addsection' => 'Àfikún orí-ọ̀rọ̀', +'vector-action-delete' => 'Ìparẹ́', +'vector-action-move' => 'Ìyípòdà', +'vector-action-protect' => 'Àbò', +'vector-action-undelete' => 'Ìmúkúrò ìparẹ́', +'vector-action-unprotect' => 'Ìjáwọ́ àbò', +'vector-view-create' => "Ṣ'èdá", +'vector-view-edit' => 'Àtúnṣe', +'vector-view-history' => 'Wo ìtàn', +'vector-view-view' => 'Kíkà', +'vector-view-viewsource' => 'Wo àmìọ̀rọ̀', +'actions' => 'Àwọn ìgbéṣe', +'namespaces' => 'Àwọn orúkọàyè', 'errorpagetitle' => 'Àsìṣe', 'returnto' => 'Padà sí $1.', @@ -280,6 +283,7 @@ $messages = array( Ẹ jọ̀wọ́ ẹ dúro ná díẹ̀ kí ẹ tó tún gbìyànjú láti wo ojúewé yìí. $1', +'pool-errorunknown' => 'Àsìṣe àwámárìdí', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => 'Nípa {{SITENAME}}', @@ -432,7 +436,8 @@ A ti ṣ'èdá àpamọ́ yín. 'yourname' => 'Orúkọ oníṣe (username):', 'yourpassword' => 'Ọ̀rọ̀ìpamọ́:', 'yourpasswordagain' => 'Kọ ọ̀rọ̀ìpamọ́ lẹ́ẹ̀kansí:', -'remembermypassword' => "Sè'rántí ọ̀rọ̀ìpamí mi lórí kọmputa yi (cookies)", +'remembermypassword' => "Ṣè'rántí ìwọlé mi lórí kọ̀mpútà yìí (fún ó pẹ́ jù {{PLURAL:$1|ọjọ́|ọjọ́}} $1)", +'securelogin-stick-https' => 'Ìwàní sísopọ̀ mọ́ HTTPS lẹ́yín ìwọlé', 'yourdomainname' => 'Domain yín:', 'externaldberror' => 'Bóyá àsìṣe ìfidájú ibùdó dátà ló ṣẹlẹ̀ tàbí ẹ kò jẹ́ gbígbà ní ààyè láti sọ àpamọ́ òde yín di ọ̀tun.', 'login' => 'Ìwọlé', @@ -449,6 +454,7 @@ A ti ṣ'èdá àpamọ́ yín. 'gotaccount' => "Ṣé ẹ ti ní àpamọ́ tẹ́lẹ̀? '''$1'''.", 'gotaccountlink' => "Ẹ w'ọlé", 'createaccountmail' => 'pẹ̀lú e-mail', +'createaccountreason' => 'Ìdíẹ̀:', 'badretype' => 'Àwọn ọ̀rọ̀ìpamọ́ tí ẹ kọ kò jọ ra wọn.', 'userexists' => 'Orúkọ oníṣe tí ẹ mú jẹ́ ti ẹlòmíràn. Ẹjọ̀wọ́ ẹ yan orúkọ mìíràn tó yàtọ̀.', @@ -517,6 +523,9 @@ E-mail kankan kò ní jẹ́ fífiránṣẹ́ fún ìkankan nínú àwọn ìn Ẹ jọ̀wọ́ ẹ dúró ná kí ẹ tó gbìyànjú lẹ́ẹ̀kan síi.', 'loginlanguagelabel' => 'Èdè: $1', +# E-mail sending +'php-mail-error-unknown' => 'Àsìṣe àìmọ̀ nínú ìgbéṣe mail() ti PHP', + # Password reset dialog 'resetpass' => 'Ìyípadà ọ̀rọ̀ìpamọ́', 'resetpass_announce' => 'Ẹ ti wọlé pẹ̀lú àmìọ̀rọ̀ e-mail ìgbàdíẹ̀. @@ -567,11 +576,12 @@ Láti parí ìmúwọlẹ́, ẹ gbọ́dọ̀ ṣètò ọ̀rọ̀ìpamọ́ tu 'showdiff' => 'Ìfihàn àwọn àtúnṣe', 'anoneditwarning' => "'''Ìkìlọ̀:''' Ẹ kò tíì wọlé. Àdírẹ́ẹ̀sì IP yín yíò jẹ́ kíkọpamọ́ sínú ìwé ìtàn àtúnṣe ojúewé yìí.", +'anonpreviewwarning' => "''Ẹ kò tíì wọlé. Àdírẹ́ẹ̀sì IP yín yíò jẹ́ kíkọsílẹ̀ sínú ìwé ìtàn àtúnṣe ojúewé yìí tí ẹ bá ṣàmúpamọ́ rẹ̀.''", 'missingsummary' => "'''Ìránlétí:''' Ẹ kò pèsè àkótán fún àtúnṣe yìí Tí ẹ bá tẹ Ìmúpamọ́ lẹ́ẹ̀kansi, àtúnṣe yín yíò jẹ̀ mímúpamọ́ láìní kankan.", 'missingcommenttext' => 'Ẹjọ̀wọ́ ẹ ṣe áríwí ní ìsàlẹ̀', -'missingcommentheader' => "'''Ìránlétí:''' Ẹ kò pèsè àkọlé kankan fún àríwí yìí. -Tí ẹ bá tẹ Ìmúpamọ́ lẹ́ẹ̀kansi, àtúnṣe yín yíò jẹ́ mímúpamọ́ láìní kankan.", +'missingcommentheader' => "'''Ìránlétí:''' Ẹ kò pèsè àkọlé/oríọ̀rọ̀ kankan fún àríwí yìí. +Tí ẹ bá tẹ \"{{int:savearticle}}\" lẹ́ẹ̀kansi, àtúnṣe yín yíò jẹ́ mímúpamọ́ láìní kankan.", 'summary-preview' => 'Àkọ́yẹ̀wò àkótán:', 'subject-preview' => 'Àyẹ̀wò àkọlé', 'blockedtitle' => 'Ìdínà oníṣe', @@ -647,6 +657,12 @@ T'óbá sepé àsìse ló gbé yin dé bi, ẹ kọn bọ́tìnì ìpadàsẹ́y '''Kò tíì jẹ́ mímúpamọ́!'''", 'userjspreview' => "''''Ẹ mọ́ gbàgbé pé àdánwò/àkọ́yẹ̀wò JavaScript oníṣe yín nìyí.''' '''Kò tíì jẹ́ mímúpamọ́!'''", +'sitecsspreview' => "'''Ẹ rántí pé àkọ́yẹ̀wò CSS nìyí.''' +'''Kò tíì jẹ́ mímúpamọ!'''", +'sitejspreview' => "'''Ẹ rántí pé àkọ́yẹ̀wò àmìọ̀rọ̀ JavaScript nìyí.''' +'''Kò tíì jẹ́ mímúpamọ!'''", +'userinvalidcssjstitle' => "'''Ìkìlọ̀:''' Kò sí awọ-ìbojú \"\$1\". +Ẹ rántí pé àwọn ojúewé àkànṣe .css àti .js únlo àkọlé onílẹ́tà kékeré, f.a. {{ns:user}}:Foo/vector.css yàtò sí {{ns:user}}:Foo/Vector.css.", 'updated' => '(Sísọdọ̀tun)', 'note' => "'''Àkíyèsí:'''", 'previewnote' => "'''Ẹ rántí pé àyẹ̀wò lásán nì yí.''' @@ -671,9 +687,6 @@ Tí kò bá ṣiṣẹ́ síbẹ̀, ẹ gbìyànjú láti [[Special:UserLogout|j Tí ẹ kò bá fẹ́ kí ìkọọ́lẹ̀ yín ó jẹ́ títúnṣe tàbí kì ó jẹ́ pípìn kiri lọ́ná tí kò wù yín, ẹ mọ́ mù wá síbí.
    Bákannà ẹ tún ṣèlérí fún wa wípé ẹ̀yin lẹkọ́ fúnra arayín, tàbí ẹ wòókọ láti agbègbè ìgboro tàbí irú ìtìlẹ́yín ọ̀fẹ́ bíi bẹ́ẹ̀. '''Ẹ MỌ́ MÚ IṢẸ́ TÓ NÍ Ẹ̀TỌ́ÀWÒKỌ SÍLẸ̀ LÁÌ GBÀṢẸ!'''", -'longpagewarning' => "'''ÌKILỌ̀: Ojúewé yìí jẹ́ $1 kilobytes ní gúngùn; -àwọn browsers míràn le è ní ṣòro láti ṣ'àtúnṣe àwọn ojúewé tó tó tàbí tògùnju 32 kb lọ. -Ẹ jọ̀wọ́ ẹ rò ó wò bóyá ẹ lè fọ́ ojúewé ọ̀ún sí abala kéékèké.'''", 'longpageerror' => "'''Àsìṣe: Ìkọ̀wé tí ẹ fisílẹ̀ gùn tó $1 Kilobytes, èyí gùn ju $2 kilobytes lọ tó jẹ́ àjà.''' Kò ṣe é múpamọ́.", 'protectedpagewarning' => "'''Ìkìlọ̀: Ojúewé yìí ti jẹ́ títìpa, nítoríẹ̀ àwọn alámòjútó nìkan ni wọ́n ní ẹ̀tọ́ láti ṣàtúnṣe rẹ̀.''' @@ -816,6 +829,8 @@ Gẹ́gẹ́ bíi olùmójútó ẹ ṣì le wo ìyàtọ̀ yìí; ẹ̀kúnrẹ 'revdelete-log' => 'Ìdíẹ̀:', 'revdelete-submit' => 'Ṣe é sí {{PLURAL:$1|àtúnyẹ̀wò|àwọn àtúnyẹ̀wò}} ṣíṣàyàn', 'revdel-restore' => 'ìyípadà ìríran', +'revdel-restore-deleted' => 'àwọn àtúnyẹ̀wò píparẹ́', +'revdel-restore-visible' => 'àwọn àtúnyẹ̀wò aṣeéfojúrí', 'pagehist' => 'Ìtàn ojúewé', 'deletedhist' => 'Ìtàn ìparẹ́', 'revdelete-content' => 'àkóónú', @@ -860,10 +875,13 @@ Gẹ́gẹ́ bíi olùmójútó ẹ ṣì le wo ìyàtọ̀ yìí; ẹ̀kúnrẹ # Diffs 'history-title' => 'Ìtàn àtúnyẹ̀wò fún "$1"', 'difference' => '(Ìyàtọ̀ láàrin àwọn àtúnyẹ́wò)', +'difference-multipage' => '(Ìyàtọ̀ láàrin àwọn ojúewé)', 'lineno' => 'Ìlà $1:', 'compareselectedversions' => 'Ìfiwéra àwọn àtúnṣe ìṣàyàn', 'showhideselectedversions' => 'Ìfihàn/ìbòmọ́lẹ̀ àwọn àtúnyẹ̀wò ṣíṣàyàn', 'editundo' => 'dápadà', +'diff-multi' => '({{PLURAL:$1|Àtúnyẹ̀wò inú àrin kan|Àwọn àtúnyẹ̀wò inú àrin $1}} látọwọ́ {{PLURAL:$2|oníṣe kan|àwọn oníṣe $2}} kò jẹ́ fífihàn)', +'diff-multi-manyusers' => '({{PLURAL:$1|Àtúnyẹ̀wò inú àrin kan|Àwọn àtúnyẹ̀wò inú àrin $1}} látọwọ́ {{PLURAL:$2|oníṣe|àwọn oníṣe}} tó pọ̀ju $2 lọ kò jẹ́ fífihàn)', # Search results 'searchresults' => 'Àwọn èsì àwárí', @@ -970,6 +988,7 @@ Ní báyìí ná ẹ le ṣàwárí lọ́dọ̀ Google. 'searchresultshead' => 'Àwárí', 'resultsperpage' => 'Àwọn èsì ní ojúewé kọ̀ọ̀kan:', 'contextlines' => 'Ìye ìlà lórí èsì kọ̀ọ̀kan:', +'stub-threshold-disabled' => 'Dídálẹ́kun', 'recentchangesdays' => 'Iye ọjọ́ láti fihàn nínú àwọn àtúnṣe tuntun:', 'recentchangesdays-max' => '{{PLURAL:$1|Ọjọ́|Ọjọ́}} $1 púpọ̀jùlọ', 'recentchangescount' => 'Iye àtúnṣe láti fihàn látìbẹ̀rẹ̀:', @@ -1029,7 +1048,7 @@ Bákannáà ẹ le è yàn láti jẹ́ kí àwọn ẹlòmíràn kó báyiín s 'prefs-advancedrendering' => 'Àwọn àṣàyàn onígíga', 'prefs-advancedsearchoptions' => 'Àwọn àṣàyàn onígíga', 'prefs-advancedwatchlist' => 'Àwọn àṣàyàn onígíga', -'prefs-display' => 'Ìfihàn àwọn àṣàyàn', +'prefs-displayrc' => 'Ìfihàn àwọn àṣàyàn', 'prefs-diffs' => 'Àwọn ìyàtọ̀', # User rights @@ -1093,6 +1112,7 @@ Bákannáà ẹ le è yàn láti jẹ́ kí àwọn ẹlòmíràn kó báyiín s 'right-block' => 'Ìdínà àwọn oníṣe yìókù láti ṣàtúnṣe', 'right-blockemail' => 'Ìdínà oníṣe kan láti fi e-mail ránṣẹ́', 'right-hideuser' => 'Ìdínà orúkọ oníṣe kan, ìbòmọ́lẹ̀ rẹ̀ kúrò ní ìgboro', +'right-unblockself' => 'Ìmúkúrò ìdínà ara wọn', 'right-editinterface' => 'Àtúnṣe ìfojúkojú oníṣe', 'right-editusercssjs' => 'Àtúnṣe àwọn fáìlì CSS àti JS ti àwọn oníṣe mìíràn', 'right-editusercss' => 'Àtúnṣe àwọn fáìlì CSS ti àwọn oníṣe mìíràn', @@ -1143,12 +1163,8 @@ Bákannáà ẹ le è yàn láti jẹ́ kí àwọn ẹlòmíràn kó báyiín s 'recentchanges' => 'Àwọn àtúnṣe tuntun', 'recentchanges-legend' => 'Àwọn àṣàyàn fún àtúnṣe tuntun', 'recentchanges-feed-description' => 'Ẹ tẹ̀ lé àwọn àtúnṣe àìpẹ́ ọjọ́ sí wiki nínú àkótán feed yìí.', -'recentchanges-label-legend' => 'Àlàyé: $1.', -'recentchanges-legend-newpage' => '$1 - ojúewé tuntun', 'recentchanges-label-newpage' => 'Àtúnṣe yìí dá ojúewé tuntun', -'recentchanges-legend-minor' => '$1 - àtúnṣe kékeré', 'recentchanges-label-minor' => 'Àtùnṣe kékeré nìyí', -'recentchanges-legend-bot' => '$1 - àtúnṣe bọt', 'recentchanges-label-bot' => 'Rọ́bọ́ọ̀tì ni ó ṣe àtúnṣe yìí', 'rcnote' => "Lábẹ́ ni {{PLURAL:$1|àtúnṣe '''kan'''|àwọn àtúnṣe '''$1''' tí wọn gbẹ̀yìn}} láàrin {{PLURAL:$2|ọjọ́ kan|ọjọ́ '''$2'''}} sẹ́yìn ní ago $5, lọ́jọ́ $4.", 'rcnotefrom' => "Àwọn àtúnṣe láti ''''$2''' (títí dé '''$1''' hàn) lábẹ́.", @@ -1210,6 +1226,11 @@ Bákannáà ẹ le è yàn láti jẹ́ kí àwọn ẹlòmíràn kó báyiín s 'minlength1' => 'Ó kéréjù àwọn orúkọ fáìlì gbọdọ̀ jẹ́ lẹ́tà kan.', 'badfilename' => 'Orúkọ fáìlì ti yípadà sí "$1".', 'filetype-badmime' => 'Àwọn fáìlì MIME irú "$1" kò jẹ́ gbígbà láyè láti rù wọ́n sókè.', +'empty-file' => 'Fáílì tí ẹ fúnsílẹ̀ jẹ́ òfo nínú.', +'file-too-large' => 'Fáílì tí ẹ fúnsílẹ̀ jẹ́ títóbijù', +'filename-tooshort' => 'Orúkọ fáílì jẹ́ kíkéréjú.', +'filetype-banned' => 'Irú fáílì yìí ti jẹ́ dídí lọ́nà.', +'illegal-filename' => 'Orúkọ fáílì yìí kò jẹ́ gbígbàláàyè.', 'fileexists' => "Fáìlì kan tilẹ̀ wà pẹ̀lú orúkọ yìí, ẹ jọ̀wọ́ ẹ yẹ '''[[:$1]]''' wò tí kò bá dá yín lójú pé ẹ fẹ́ yipadà. [[$1|thumb]]", 'fileexists-extension' => "Fáìlì kan wà pẹ̀lú orúkọ tó jọra: [[$2|thumb]] @@ -1217,7 +1238,6 @@ Bákannáà ẹ le è yàn láti jẹ́ kí àwọn ẹlòmíràn kó báyiín s * Orúkọ fáìlì tó wà: '''[[:$2]]''' Ẹ jọ̀wọ́ ẹ mú orúkọ tó yàtọ̀.", 'file-exists-duplicate' => 'Fáìlì yìí jẹ́ àwòkọ kan {{PLURAL:$1|fáìlì yìí|àwọn fáìlì wọ̀nyí}}:', -'successfulupload' => 'Ìjásírere ìrùsókè', 'uploadwarning' => 'Ìkìlọ̀ ìrùsókè', 'savefile' => 'Ìmúpamọ́ fáìlì', 'uploadedimage' => '"[[$1]]" ti jẹ́rírùsókè', @@ -1234,6 +1254,14 @@ Bákannáà ẹ le è yàn láti jẹ́ kí àwọn ẹlòmíràn kó báyiín s 'upload-description' => 'Ìjúwe fáìlì', 'upload-options' => 'Àwọn àṣàyàn ìrùsókè', 'watchthisupload' => "M'ójútó fáilì yìí", +'upload-success-subj' => 'Ìjásírere ìrùsókè', +'upload-success-msg' => 'Ìrùsókè yín láti [$2] ti jásírere. Ó ṣeéwò níbí: [[:{{ns:file}}:$1]]', +'upload-failure-subj' => 'Ìṣòro ìrùsókè', +'upload-failure-msg' => 'Ìṣòro kan wà pẹ̀lú fọ́ọ̀mù ìrùsókè yín [$2]: + +$1', +'upload-warning-subj' => 'Ìkìlọ̀ ìrùsókè', +'upload-warning-msg' => 'Ìṣòro kan wà pẹ̀lú ìrùsókè yín láti [$2]. Ẹ le padà sí orí [[Special:Upload/stash/$1|fọ́ọ́mù ìrùsókè]] láti ṣàtúnṣe ìṣòro náà.', 'upload-proto-error' => 'Prótókólù àìtọ́', 'upload-file-error' => 'Àsiṣe ínú', @@ -1355,7 +1383,6 @@ Bákannáà ẹ le è yàn láti jẹ́ kí àwọn ẹlòmíràn kó báyiín s 'statistics-edits-average' => 'Iye àtúnṣe apínlàrin fún ojúewé kọ̀ọ̀kan', 'statistics-views-total' => 'Àpapọ̀ iye ìwò', 'statistics-views-peredit' => 'Iye ìwò fún àtúnṣe kọ̀ọ̀kan', -'statistics-jobqueue' => 'Ìgùn [http://www.mediawiki.org/wiki/Manual:Job_queue ìlà iṣẹ́ gbígbíṣe]', 'statistics-users' => '[[Special:ListUsers|Àwọn oníṣe]] ajẹ́fífilórúkọsílẹ̀', 'statistics-users-active' => 'Àwọn oníṣe agbéṣe', 'statistics-users-active-desc' => 'Àwọn oníṣe tí wọ́n ti ṣe ìgbéṣe kan ní {{PLURAL:$1|ọjọ́ kan|ọjọ́ $1}} sẹ́yìn', @@ -1518,7 +1545,7 @@ Bákannáà ẹ le è yàn láti jẹ́ kí àwọn ẹlòmíràn kó báyiín s # Watchlist 'watchlist' => 'Ìmójútó mi', 'mywatchlist' => 'Ìmójútó mi', -'watchlistfor' => "(fún '''$1''')", +'watchlistfor2' => 'Fún $1 $2', 'nowatchlist' => 'Ẹ kò ní ohun kankan nínú ìmójútó yín.', 'watchlistanontext' => 'Ẹ jọ̀wọ́ $1 láti wò tàbí ṣàtúnṣe àwọn ohun inú ìmójútó yín.', 'watchnologin' => 'Ẹ kò tíì wọlé', @@ -1722,6 +1749,7 @@ $1', Àkọsílẹ̀ ìdínà àìpẹ́ nìyí nísàlẹ̀ fún ìtọ́kasí:', 'sp-contributions-search' => 'Àwáàrí fún àwọn àfikún', 'sp-contributions-username' => 'Àdírẹ́ẹ̀sì IP tàbí orúkọ oníṣe:', +'sp-contributions-toponly' => 'Ìfihàn àwọn àtúnṣe tí wọn jẹ́ àtúnyẹ̀wò àìpẹ́ nìkan', 'sp-contributions-submit' => 'Ṣàwárí', # What links here @@ -1972,6 +2000,7 @@ Ojúewé àdésí "[[:$1]]" wà tẹ́lẹ̀tẹ́lẹ̀. 'tooltip-upload' => 'Bẹ̀rẹ̀ ìrùsókè', 'tooltip-rollback' => '"Ìyíṣẹ́yìn" ún ṣe ìdápadà àwọn àtúnṣe sí ojúewé yìí', 'tooltip-undo' => '"Dápadà" ṣèyíṣẹ́yìn àtúnṣe yìí, yíò ṣí fọ́ọ̀mù àtúnṣe bíi àkọ́bojúwò. Ó gba ààyè láti sọ ìdí nínú àkótán.', +'tooltip-preferences-save' => 'Ìmúpamọ́ àwọn ìfẹ́ràn', # Attribution 'anonymous' => '{{PLURAL:$1|Oníṣe|Àwọn oníṣe}} aláìlórúkọ ti {{SITENAME}}', @@ -2009,13 +2038,14 @@ Ojúewé àdésí "[[:$1]]" wà tẹ́lẹ̀tẹ́lẹ̀. # Media information 'thumbsize' => 'Ìtóbi àwòrán kékeré:', 'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|ojúewé|àwọn ojúewé}}', -'file-info' => '(ìtóbi faili: $1, irú MIME: $2)', -'file-info-size' => '($1 × $2 pixel, ìtóbi faili: $3, irú MIME: $4)', +'file-info' => 'ìtóbi faili: $1, irú MIME: $2', +'file-info-size' => '$1 × $2 pixel, ìtóbi faili: $3, irú MIME: $4', 'file-nohires' => 'Kò sí ìgbéhàn gíga jù báun lọ.', -'svg-long-desc' => '(faili SVG, pẹ̀lú $1 × $2 pixels, ìtòbi faili: $3)', +'svg-long-desc' => 'faili SVG, pẹ̀lú $1 × $2 pixels, ìtòbi faili: $3', 'show-big-image' => 'Pẹ̀lú ìgbéhàn gíga', 'show-big-image-thumb' => 'Ìtóbi àkọ́kọ́yẹ̀wò yìí: $1 × $2 pixels', 'file-info-gif-looped' => 'lílọ́po', +'file-info-png-looped' => 'lílọ́po', # Special:NewFiles 'newimages' => 'Ọ̀dẹ̀dẹ̀ àwòrán àwọn faili tuntun', @@ -2182,6 +2212,13 @@ Tóbájẹ́pé fáìlì ọ̀hún ti jẹ́ títúnṣe sí bóṣewà ní bẹ 'tags-edit' => 'àtúnṣe', 'tags-hitcount' => '{{PLURAL:$1|Àtúnṣe|Àwọn àtúnṣe}} $1', +# Special:ComparePages +'compare-page1' => 'Ojúewé 1', +'compare-page2' => 'Ojúewé 2', +'compare-rev1' => 'Àtúnyẹ̀wò 1', +'compare-rev2' => 'Àtúnyẹ̀wò 2', +'compare-submit' => 'Ṣàfiwé', + # Database error messages 'dberr-header' => 'Wiki yìí ní ìsòro', diff --git a/languages/messages/MessagesYue.php b/languages/messages/MessagesYue.php index 554c0daf..1d6c3855 100644 --- a/languages/messages/MessagesYue.php +++ b/languages/messages/MessagesYue.php @@ -89,8 +89,8 @@ $namespaceAliases = array( "用戶 討論" => NS_USER_TALK, "用户 讨论" => NS_USER_TALK, # This has never worked so it's unlikely to annoy anyone if I disable it -- TS - #"{$wgMetaNamespace} 討論" => NS_PROJECT_TALK, - #"{$wgMetaNamespace} 讨论" => NS_PROJECT_TALK, + # "{$wgMetaNamespace} 討論" => NS_PROJECT_TALK, + # "{$wgMetaNamespace} 讨论" => NS_PROJECT_TALK, "檔" => NS_FILE, "檔案" => NS_FILE, "档" => NS_FILE, @@ -136,9 +136,9 @@ $namespaceAliases = array( $linkTrail = '/^([a-z]+)(.*)$/sD'; -#------------------------------------------------------------------- +# ------------------------------------------------------------------- # Default messages -#------------------------------------------------------------------- +# ------------------------------------------------------------------- # Allowed characters in keys are: A-Z, a-z, 0-9, underscore (_) and # hyphen (-). If you need more characters, you may be able to change # the regex in MagicWord::initRegex @@ -159,8 +159,7 @@ $messages = array( 'tog-editsection' => '可以用 [修改] 掣更改個別段落', 'tog-editsectiononrightclick' => '可以撳右掣更改個別段落(需要JavaScript)', 'tog-showtoc' => '多過三段時顯示目錄', -'tog-rememberpassword' => '響呢部電腦度記住我嘅密碼', -'tog-editwidth' => '加闊修改欄到成個螢幕', +'tog-rememberpassword' => '響呢個瀏覽器度記住我嘅登入資料 (最高維持$1{{PLURAL:$1|日|日}})', 'tog-watchcreations' => '將我開嘅頁加入監視清單', 'tog-watchdefault' => '將我修改嘅頁加入監視清單', 'tog-watchmoves' => '將我移動嘅頁加入監視清單', @@ -306,31 +305,21 @@ $messages = array( 'faqpage' => 'Project:FAQ', # Vector skin -'vector-action-addsection' => '加主題', -'vector-action-delete' => '刪除', -'vector-action-move' => '移動', -'vector-action-protect' => '保護', -'vector-action-undelete' => '去睇刪除咗嘅頁面', -'vector-action-unprotect' => '解除保護', -'vector-namespace-category' => '分類', -'vector-namespace-help' => '幫助頁', -'vector-namespace-image' => '檔案', -'vector-namespace-main' => '版', -'vector-namespace-media' => '媒體頁', -'vector-namespace-mediawiki' => '信息', -'vector-namespace-project' => '計劃頁', -'vector-namespace-special' => '特別頁', -'vector-namespace-talk' => '討論', -'vector-namespace-template' => '模', -'vector-namespace-user' => '用戶頁', -'vector-view-create' => '建立', -'vector-view-edit' => '編輯', -'vector-view-history' => '睇吓歷史', -'vector-view-view' => '閱', -'vector-view-viewsource' => '睇吓原始碼', -'actions' => '動作', -'namespaces' => '空間名', -'variants' => '變換', +'vector-action-addsection' => '加主題', +'vector-action-delete' => '刪除', +'vector-action-move' => '移動', +'vector-action-protect' => '保護', +'vector-action-undelete' => '去睇刪除咗嘅頁面', +'vector-action-unprotect' => '解除保護', +'vector-simplesearch-preference' => '打開加強搵嘢建議(只限Vector畫面)', +'vector-view-create' => '建立', +'vector-view-edit' => '編輯', +'vector-view-history' => '睇吓歷史', +'vector-view-view' => '閱', +'vector-view-viewsource' => '睇吓原始碼', +'actions' => '動作', +'namespaces' => '空間名', +'variants' => '變換', 'errorpagetitle' => '錯誤', 'returnto' => '返去$1 。', @@ -391,6 +380,9 @@ $messages = array( 響再睇呢一版之前請等多一陣。 $1', +'pool-timeout' => '等死鎖超時', +'pool-queuefull' => '隊池已滿', +'pool-errorunknown' => '未知嘅錯誤', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '關於{{SITENAME}}', @@ -551,7 +543,8 @@ $1', 'yourname' => '用戶名:', 'yourpassword' => '密碼:', 'yourpasswordagain' => '再輸入密碼:', -'remembermypassword' => '響呢部電腦度記住我嘅密碼', +'remembermypassword' => '響呢個瀏覽器度記住我嘅登入資料 (最高維持$1{{PLURAL:$1|日|日}})', +'securelogin-stick-https' => '登入後繼續以HTTPS連接', 'yourdomainname' => '你嘅網域:', 'externaldberror' => '驗證資料庫出錯,或者唔允許你更新你嘅外部帳戶。', 'login' => '登入', @@ -568,6 +561,7 @@ $1', 'gotaccount' => '已經有戶口? $1。', 'gotaccountlink' => '登入', 'createaccountmail' => '用電郵', +'createaccountreason' => '原因:', 'badretype' => '你入嘅密碼唔一致。', 'userexists' => '你入嘅用戶名已經有人用咗,唔該揀過個名啦。', 'loginerror' => '登入錯誤', @@ -587,6 +581,7 @@ $1', 'wrongpasswordempty' => '你都未入密碼,唔該再試多次啦。', 'passwordtooshort' => '你嘅密碼最少要有$1個半形字元。', 'password-name-match' => '你嘅密碼一定要同你嘅用戶名唔一樣。', +'password-login-forbidden' => '呢個用戶名同密碼嘅利用係被禁止嘅。', 'mailmypassword' => '寄個新密碼', 'passwordremindertitle' => '{{SITENAME}}嘅新臨時密碼', 'passwordremindertext' => '有人(可能係你,IP 位置 $1) @@ -623,6 +618,9 @@ $1', 'loginlanguagelabel' => '語言:$1', 'suspicious-userlogout' => '你去登出嘅要求已經拒絕咗,因為佢可能由壞咗嘅瀏覽器或者快取代理傳送。', +# E-mail sending +'php-mail-error-unknown' => '響 PHP 嘅 mail() 參數度出現咗未知嘅錯誤', + # Password reset dialog 'resetpass' => '改密碼', 'resetpass_announce' => '你已經用咗一個臨時電郵碼登入。要完成登入,你一定要響呢度定一個新嘅密碼:', @@ -673,9 +671,10 @@ $1', 'showlivepreview' => '實時預覽', 'showdiff' => '顯示差異', 'anoneditwarning' => "'''警告:'''你重未登入。你嘅 IP 位址會喺呢個頁面嘅修訂歷史中記錄落嚟。", +'anonpreviewwarning' => "''你重未登入,你嘅 IP 位址會喺呢個頁面嘅修訂歷史中記錄落嚟。''", 'missingsummary' => "'''提醒:''' 你未提供編輯摘要。如果你再撳多一下「{{int:savearticle}}」嘅話,咁你儲存嘅編輯就會無摘要。", 'missingcommenttext' => '請輸入一個註解。', -'missingcommentheader' => "'''提醒:'''你響呢個註解度並無提供一個主題/標題。如果你再撳一次儲存,你嘅編輯就會無題。", +'missingcommentheader' => "'''提醒:'''你響呢個註解度並無提供一個主題/標題。如果你再撳一次「{{int:savearticle}}」,你嘅編輯就會無題。", 'summary-preview' => '摘要預覽:', 'subject-preview' => '標題/頭條預覽:', 'blockedtitle' => '用戶已經封鎖', @@ -746,7 +745,11 @@ $1', '''佢嘅內容重未儲存!'''", 'userjspreview' => "'''記住你而家只係測試/預覽緊你定義嘅JavaScript。''' '''佢嘅內容重未儲存!'''", -'userinvalidcssjstitle' => "'''警告:''' 無叫做 \"\$1\" 嘅畫面。請記住自訂介面的 .css 和 .js 頁面時應使用細楷,例如:{{ns:user}}:Foo/monobook.css 而唔係 {{ns:user}}:Foo/Monobook.css 。", +'sitecsspreview' => "'''記住你而家只係預覽呢段 CSS。''' +'''佢嘅內容重未儲存!'''", +'sitejspreview' => "'''記住你而家只係預覽呢段 JavaScript 代碼。''' +'''佢嘅內容重未儲存!'''", +'userinvalidcssjstitle' => "'''警告:''' 無叫做 \"\$1\" 嘅畫面。請記住自訂介面的 .css 和 .js 頁面時應使用細楷,例如:{{ns:user}}:Foo/vector.css 而唔係 {{ns:user}}:Foo/Vector.css 。", 'updated' => '(己更新)', 'note' => "'''留意:'''", 'previewnote' => "'''請記住呢個只係預覽。''' @@ -783,8 +786,6 @@ $1', 你亦都要同我哋保證啲文字係你自己寫嘅,或者係由公有領域或相似嘅自由資源複製落嚟(睇$1有更詳細嘅資訊)。 '''喺未有任何許可嘅情況之下千祈唔好遞交有版權嘅作品!'''", -'longpagewarning' => "'''警告''':呢一頁有 $1 kilobytes 咁長;有啲瀏覽器可能會喺就離或者超過 32kb 編輯頁面會出現一啲問題。 -請考慮分割呢個頁面到細啲嘅小節。", 'longpageerror' => "'''錯誤:你所遞交嘅文字係有 $1 kilobytes 咁長,係長過最大嘅 $2 kilobytes。'''儲唔到你遞交嘅文字。", 'readonlywarning' => "'''錯誤:料庫已經鎖住咗,以便定期保養。而家你唔可以儲起你嘅編輯。'''你可以儲啲文字落一份文字檔先。 @@ -963,6 +964,8 @@ $1", 'logdelete-failure' => "'''事件可見性唔能夠更新:''' $1", 'revdel-restore' => '改可見性', +'revdel-restore-deleted' => '刪除咗嘅修訂', +'revdel-restore-visible' => '睇到嘅修訂', 'pagehist' => '頁面歷史', 'deletedhist' => '刪除咗嘅歷史', 'revdelete-content' => '內容', @@ -1026,11 +1029,13 @@ $1", # Diffs 'history-title' => '"$1"嘅修訂歷史', 'difference' => '(修訂之間嘅差異)', +'difference-multipage' => '(版之間嘅差異)', 'lineno' => '第$1行:', 'compareselectedversions' => '比較被選嘅修訂', 'showhideselectedversions' => '顯示/隱藏揀咗嘅修訂', 'editundo' => '復原', -'diff-multi' => '($1個中途嘅修訂冇顯示到)', +'diff-multi' => '(由$2位用戶所做嘅$1個中途修訂冇顯示到)', +'diff-multi-manyusers' => '(由$2位更多用戶所做嘅$1個中途修訂冇顯示到)', # Search results 'searchresults' => '搵嘢結果', @@ -1065,6 +1070,7 @@ $1", 'searchprofile-everything-tooltip' => '搵全部嘢(包埋討論版)', 'searchprofile-advanced-tooltip' => '響自定空間名度搵', 'search-result-size' => '$1 ($2個字)', +'search-result-category-size' => '$1位成員 ($2個細類,$3個檔案)', 'search-result-score' => '相關度: $1%', 'search-redirect' => '(跳轉 $1)', 'search-section' => '(小節 $1)', @@ -1139,6 +1145,7 @@ $1", 'contextlines' => '每一擊顯示嘅行數:', 'contextchars' => '每一行嘅字數:', 'stub-threshold' => '楔位連結格式門檻 (bytes):', +'stub-threshold-disabled' => '閂咗', 'recentchangesdays' => '最近更改中嘅顯示日數:', 'recentchangesdays-max' => '最多 $1 日', 'recentchangescount' => '預設顯示嘅編輯數:', @@ -1172,6 +1179,7 @@ $1", 'prefs-files' => '檔案', 'prefs-custom-css' => '自定 CSS', 'prefs-custom-js' => '自定 JavaScript', +'prefs-common-css-js' => '共有嘅CSS同埋JavaScript畀所有畫面用:', 'prefs-reset-intro' => '你可以用呢版去重設你嘅喜好設定到網站預設值。呢個動作無得番轉頭。', 'prefs-emailconfirm-label' => '電郵確認:', 'prefs-textboxsize' => '編輯窗大細', @@ -1208,9 +1216,15 @@ $1", 'prefs-advancedrendering' => '進階選項', 'prefs-advancedsearchoptions' => '進階選項', 'prefs-advancedwatchlist' => '進階選項', -'prefs-display' => '顯示選項', +'prefs-displayrc' => '顯示選項', +'prefs-displaysearchoptions' => '顯示選項', +'prefs-displaywatchlist' => '顯示選項', 'prefs-diffs' => '差異', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => '電郵地址睇嚟有效', +'email-address-validity-invalid' => '請打一個有效嘅電郵地址', + # User rights 'userrights' => '用戶權限管理', 'userrights-lookup-user' => '管理用戶組', @@ -1294,6 +1308,7 @@ $1", 'right-hideuser' => '封鎖用戶名,對公眾隱藏', 'right-ipblock-exempt' => '繞過IP封鎖、自動封鎖同埋範圍封鎖', 'right-proxyunbannable' => '繞過Proxy嘅自動封鎖', +'right-unblockself' => '解封佢哋自己', 'right-protect' => '改保護等級同埋編輯保護版', 'right-editprotected' => '編輯保護版(無連串保護)', 'right-editinterface' => '編輯用戶界面', @@ -1316,7 +1331,6 @@ $1", 'right-siteadmin' => '鎖同解鎖資料庫', 'right-reset-passwords' => '重設其他用戶嘅密碼', 'right-override-export-depth' => '倒出包含有五層深連版嘅頁面', -'right-versiondetail' => '顯示伸展軟件版本嘅資料', 'right-sendemail' => '寄電郵畀其他用戶', # User rights log @@ -1367,14 +1381,9 @@ $1", 'recentchanges-legend' => '最近更改選項', 'recentchangestext' => '追蹤對哩一個 wiki 嘅最後更改。', 'recentchanges-feed-description' => '追蹤對哩一個 wiki 度呢個集合嘅最後更改。', -'recentchanges-label-legend' => '圖例: $1', -'recentchanges-legend-newpage' => '$1 - 新版', 'recentchanges-label-newpage' => '呢次編輯開咗一個新版', -'recentchanges-legend-minor' => '$1 - 細編輯', 'recentchanges-label-minor' => '呢個係一個細編輯', -'recentchanges-legend-bot' => '$1 - 機械人編輯', 'recentchanges-label-bot' => '呢次編輯係由機械人進行', -'recentchanges-legend-unpatrolled' => '$1 - 未巡查過嘅編輯', 'recentchanges-label-unpatrolled' => '呢次編輯重未巡查過', 'rcnote' => "以下係響$4 $5,近'''$2'''日嘅最後'''$1'''次修改。", 'rcnotefrom' => "以下係自'''$2'''嘅更改(顯示到'''$1''')。", @@ -1421,6 +1430,9 @@ $1", 'upload_directory_missing' => '嗰個上載嘅目錄 ($1) 唔見咗,唔可以由網頁伺服器建立。', 'upload_directory_read_only' => '嗰個上載嘅目錄 ($1) 而家唔能夠被網頁伺服器寫入。', 'uploaderror' => '上載錯誤', +'upload-recreate-warning' => "'''警告:一個同名嘅檔案曾經被刪除過或者搬走咗。''' + +呢版嘅刪除同移動日誌響呢度提供以便參考:", 'uploadtext' => "用下面嘅表格嚟上載檔案。 要睇或者搵嘢之前上載嘅圖像請去[[Special:FileList|已上載檔案一覽]],(再)上載嘅動作會喺[[Special:Log/upload|上載日誌]]裏面記錄落嚟,而刪除嘅動作會喺[[Special:Log/delete|刪除日誌]]裏面記錄落嚟。 @@ -1455,6 +1467,17 @@ $1", 'filetype-banned-type' => "'''\".\$1\"'''係一種唔准許嘅檔案類型。 容許嘅{{PLURAL:\$3|一種|多種}}檔案類型有\$2。", 'filetype-missing' => '個檔名並冇副檔名(好以「.jpg」)。', +'empty-file' => '你所遞交嘅檔案係空嘅。', +'file-too-large' => '你所遞交嘅檔案太大。', +'filename-tooshort' => '檔名太短。', +'filetype-banned' => '呢種類型嘅檔案係禁止咗1。', +'verification-error' => '檔案未通過驗證。', +'hookaborted' => '你所嘗試嘅修改被擴展鈎捨棄咗。', +'illegal-filename' => '檔案名唔容許。', +'overwrite' => '唔容許覆蓋現有嘅檔案。', +'unknown-error' => '發生未知嘅錯誤。', +'tmp-create-error' => '唔能夠建立臨時檔案。', +'tmp-write-error' => '臨時檔案寫入嗰陣出錯。', 'large-file' => '建議檔案嘅大細唔好大過$1 bytes,呢個檔案有$2 bytes', 'largefileserver' => '呢個檔案超過咗伺服器設定允許嘅大細。', 'emptyfile' => '你上載嘅檔案似乎係空嘅。噉樣可能係因為你打錯咗個檔名。請檢查吓你係唔係真係要上載呢個檔案。', @@ -1475,13 +1498,14 @@ $1", 如果你仍然想去上載佢嘅話,麻煩返轉去用第二個名嚟上載呢個檔案。[[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => '呢個檔案係同下面嘅{{PLURAL:$1|一|幾}}個檔案重覆:', 'file-deleted-duplicate' => '一個同名嘅檔案 ([[:$1]]) 響之前刪除過。你應該響重新上載之前檢查一下嗰個檔案嘅刪除紀錄。', -'successfulupload' => '成功嘅上載', 'uploadwarning' => '上載警告', 'uploadwarning-text' => '請修改下面嘅檔案描述再重試。', 'savefile' => '儲存檔案', 'uploadedimage' => '上載咗"[[$1]]"', 'overwroteimage' => '已經上載咗"[[$1]]"嘅新版本', 'uploaddisabled' => '上載已停用。', +'copyuploaddisabled' => '由URL嘅上載已經停用。', +'uploadfromurl-queued' => '你嘅上載已經開始排隊。', 'uploaddisabledtext' => '檔案上載已經停用。', 'php-uploaddisabledtext' => 'PHP 檔案上載已經停用。請檢查 file_uploads 設定。', 'uploadscripted' => '呢個檔案包含可能會誤被瀏覽器解釋執行嘅 HTML 或 script 代碼。', @@ -1501,6 +1525,14 @@ $1", 你應該要考慮吓繼續上載呢個檔案係唔係適合嘅。 為咗方便起見,呢個檔案嘅刪除記錄已經響下面提供:", 'filename-bad-prefix' => "你上載嘅檔名係以'''\"\$1\"'''做開頭,通常呢種無含意嘅檔名係響數碼相機度自動編排。請響你個檔案度揀過一個更加有意義嘅檔名。", +'upload-success-subj' => '成功嘅上載', +'upload-success-msg' => '你響[$2]嘅上載已經成功,可以喺呢度搵到:[[:{{ns:file}}:$1]]。', +'upload-failure-subj' => '上載出咗問題', +'upload-failure-msg' => '你響[$2]嘅上載出現咗問題: + +$1', +'upload-warning-subj' => '上載警告', +'upload-warning-msg' => '你響[$2]嘅上載出咗問題。你可以返去[[Special:Upload/stash/$1|上載表格]]並更正問題。', 'upload-proto-error' => '唔正確嘅協議', 'upload-proto-error-text' => '遙遠上載需要一個以 http:// 或者 ftp:// 作為開頭嘅URL。', @@ -1560,6 +1592,7 @@ $1", 'listfiles_search_for' => '搵媒體名:', 'imgfile' => '檔案', 'listfiles' => '檔案清單', +'listfiles_thumb' => '縮圖', 'listfiles_date' => '日期', 'listfiles_name' => '名', 'listfiles_user' => '用戶', @@ -1673,8 +1706,8 @@ $1", 'statistics-edits' => '自從{{SITENAME}}設定後嘅頁編輯數', 'statistics-edits-average' => '每一版平均編輯數', 'statistics-views-total' => '查看總數', +'statistics-views-total-desc' => '唔包唔存在頁面同特別頁嘅查看數', 'statistics-views-peredit' => '每次編輯查看數', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue 工作隊列]長度', 'statistics-users' => '註冊咗嘅[[Special:ListUsers|用戶]]', 'statistics-users-active' => '活躍用戶', 'statistics-users-active-desc' => '響$1日前做過動作嘅用戶', @@ -1687,7 +1720,7 @@ Template:搞清楚', 'doubleredirects' => '雙重跳轉', 'doubleredirectstext' => '每一行都順次序寫住第一頁名,佢嘅目的頁,同埋目的頁再指去邊度。改嘅時候,應該將第一個跳轉頁轉入第三頁。 -劃咗嘅項目係已經解決咗嘅。', +劃咗嘅項目係已經解決咗嘅。', 'double-redirect-fixed-move' => '[[$1]]已經搬好咗,佢而家跳轉過去[[$2]]。', 'double-redirect-fixer' => '跳轉修正器', @@ -1710,6 +1743,8 @@ Template:搞清楚', 'nmembers' => '$1 位成員', 'nrevisions' => '$1 次修訂', 'nviews' => '$1 次瀏覽', +'nimagelinks' => '用響$1版', +'ntransclusions' => '用響$1版', 'specialpage-empty' => '呢個報告嘅結果係空嘅。', 'lonelypages' => '孤立咗嘅頁面', 'lonelypagestext' => '以下嘅面頁係響{{SITENAME}}度未有連結到或包含到其它頁面。', @@ -1865,34 +1900,40 @@ Template:搞清楚', 'listgrouprights-removegroup-self-all' => '響自己嘅戶口度可以拎走全部組', # E-mail user -'mailnologin' => '冇傳送地址', -'mailnologintext' => '你一定要[[Special:UserLogin|登入咗]]同埋喺你嘅[[Special:Preferences|喜好設定]]度有個有效嘅電郵地址先可以傳送電郵畀其他用戶。', -'emailuser' => '發電郵畀呢位用戶', -'emailpage' => '發電郵畀用戶', -'emailpagetext' => '你可以用下面嘅表去寄一封電郵畀呢位用戶。 +'mailnologin' => '冇傳送地址', +'mailnologintext' => '你一定要[[Special:UserLogin|登入咗]]同埋喺你嘅[[Special:Preferences|喜好設定]]度有個有效嘅電郵地址先可以傳送電郵畀其他用戶。', +'emailuser' => '發電郵畀呢位用戶', +'emailpage' => '發電郵畀用戶', +'emailpagetext' => '你可以用下面嘅表去寄一封電郵畀呢位用戶。 你喺[[Special:Preferences|你嘅用戶喜好設定]]入面填寫嘅電郵地址會出現喺呢封電郵「由」嘅地址度,以便收件人可以回覆到。', -'usermailererror' => '目標郵件地址返回錯誤:', -'defemailsubject' => '{{SITENAME}} 電郵', -'noemailtitle' => '無電郵地址', -'noemailtext' => '呢個用戶重未指定一個有效嘅電郵地址。', -'nowikiemailtitle' => '唔容許電郵', -'nowikiemailtext' => '呢位用戶揀咗唔收其他用戶畀佢嘅電郵。', -'email-legend' => '寄電郵畀另一位{{SITENAME}}用戶', -'emailfrom' => '由:', -'emailto' => '到:', -'emailsubject' => '主題:', -'emailmessage' => '信息:', -'emailsend' => '傳送', -'emailccme' => '傳送一個我嘅信息電郵畀我。', -'emailccsubject' => '你畀$1: $2封信嘅副本', -'emailsent' => '電郵已傳送', -'emailsenttext' => '你嘅電郵信息已傳送。', -'emailuserfooter' => '呢封電郵係由$1寄畀$2經{{SITENAME}}嘅「電郵用戶」功能發出嘅。', +'usermailererror' => '目標郵件地址返回錯誤:', +'defemailsubject' => '{{SITENAME}} 電郵', +'usermaildisabled' => '用戶電郵已停用', +'usermaildisabledtext' => '你唔可以發送電郵到響呢個wiki度嘅其他用戶', +'noemailtitle' => '無電郵地址', +'noemailtext' => '呢個用戶重未指定一個有效嘅電郵地址。', +'nowikiemailtitle' => '唔容許電郵', +'nowikiemailtext' => '呢位用戶揀咗唔收其他用戶畀佢嘅電郵。', +'email-legend' => '寄電郵畀另一位{{SITENAME}}用戶', +'emailfrom' => '由:', +'emailto' => '到:', +'emailsubject' => '主題:', +'emailmessage' => '信息:', +'emailsend' => '傳送', +'emailccme' => '傳送一個我嘅信息電郵畀我。', +'emailccsubject' => '你畀$1: $2封信嘅副本', +'emailsent' => '電郵已傳送', +'emailsenttext' => '你嘅電郵信息已傳送。', +'emailuserfooter' => '呢封電郵係由$1寄畀$2經{{SITENAME}}嘅「電郵用戶」功能發出嘅。', + +# User Messenger +'usermessage-summary' => '留低系統訊息。', +'usermessage-editor' => '系統訊息', # Watchlist 'watchlist' => '監視清單', 'mywatchlist' => '監視清單', -'watchlistfor' => "(用戶「'''$1'''」嘅監視清單)", +'watchlistfor2' => '$1嘅監視清單 $2', 'nowatchlist' => '你嘅監視清單度並冇任何項目。', 'watchlistanontext' => '請先$1去睇或者改響你監視清單度嘅項目。', 'watchnologin' => '未登入', @@ -2003,7 +2044,10 @@ wiki: $PAGEEDITOR_WIKI 'revertpage' => '已經反轉由[[Special:Contributions/$2|$2]]([[User talk:$2|對話]])所寫嘅編輯到[[User:$1|$1]]嘅最後修訂。', 'revertpage-nouser' => '已經反轉由(刪咗用戶名)所寫嘅編輯到[[User:$1|$1]]所寫嘅最後修訂。', 'rollback-success' => '已經反轉由$1所寫嘅編輯;恢復到$2嘅最後修訂。', -'sessionfailure' => '你嘅登入會話 (session) 好似有啲問題; + +# Edit tokens +'sessionfailure-title' => '會話失敗', +'sessionfailure' => '你嘅登入會話 (session) 好似有啲問題; 為咗防止會話劫持,呢個操作已經取消。 請返去之前嗰版,重新載入嗰版然後再試。', @@ -2130,19 +2174,23 @@ $1', 'month' => '由呢個月 (同更早):', 'year' => '由呢一年 (同更早):', -'sp-contributions-newbies' => '只顯示新戶口嘅貢獻', -'sp-contributions-newbies-sub' => '新戶口嘅貢獻', -'sp-contributions-newbies-title' => '新戶口嘅用戶貢獻', -'sp-contributions-blocklog' => '封鎖日誌', -'sp-contributions-deleted' => '已經刪除咗嘅用戶貢獻', -'sp-contributions-logs' => '日誌', -'sp-contributions-talk' => '傾偈', -'sp-contributions-userrights' => '用戶權限管理', -'sp-contributions-blocked-notice' => '呢位用戶現時封鎖緊。 +'sp-contributions-newbies' => '只顯示新戶口嘅貢獻', +'sp-contributions-newbies-sub' => '新戶口嘅貢獻', +'sp-contributions-newbies-title' => '新戶口嘅用戶貢獻', +'sp-contributions-blocklog' => '封鎖日誌', +'sp-contributions-deleted' => '已經刪除咗嘅用戶貢獻', +'sp-contributions-uploads' => '上載', +'sp-contributions-logs' => '日誌', +'sp-contributions-talk' => '傾偈', +'sp-contributions-userrights' => '用戶權限管理', +'sp-contributions-blocked-notice' => '呢位用戶現時封鎖緊。 +最近嘅封鎖日誌項目響下面提供以便參考:', +'sp-contributions-blocked-notice-anon' => '呢個IP地址現時封鎖緊。 最近嘅封鎖日誌項目響下面提供以便參考:', -'sp-contributions-search' => '搵貢獻', -'sp-contributions-username' => 'IP地址或用戶名:', -'sp-contributions-submit' => '搵', +'sp-contributions-search' => '搵貢獻', +'sp-contributions-username' => 'IP地址或用戶名:', +'sp-contributions-toponly' => '只顯示最新修訂嘅編輯', +'sp-contributions-submit' => '搵', # What links here 'whatlinkshere' => '有乜嘢連結來呢度', @@ -2203,7 +2251,6 @@ $1', 'ipb-edit-dropdown' => '改封鎖原因', 'ipb-unblock-addr' => '解封$1', 'ipb-unblock' => '解封一個用戶名或IP地址', -'ipb-blocklist-addr' => '$1嘅現時封鎖', 'ipb-blocklist' => '去睇現時嘅封鎖', 'ipb-blocklist-contribs' => '$1嘅貢獻', 'unblockip' => '解封用戶', @@ -2271,6 +2318,8 @@ $1已經被封鎖。你係咪想更改呢個設定?', 'cant-block-while-blocked' => '當你被封鎖嗰陣唔可以封鎖其他用戶。', 'cant-see-hidden-user' => '你試緊封鎖嘅用戶已經封鎖咗或者隱藏咗。 你而家冇隱藏用戶嘅權限,你唔可以睇或者改呢位用戶嘅封鎖。', +'ipbblocked' => '你唔可以封鎖或者解封其他用戶,因為你自己已經俾人封鎖咗。', +'ipbnounblockself' => '你唔容許封鎖你自己。', # Developer tools 'lockdb' => '鎖定資料庫', @@ -2303,6 +2352,15 @@ $1已經被封鎖。你係咪想更改呢個設定?', 注意如果已經有一個同個新名同名嘅頁,噉呢個頁係搬'''唔到'''嘅,除非嗰個同名嘅頁係空嘅或者佢係一個跳轉頁,兼且要之前冇編輯過(冇編輯歷史)先得。噉即係講萬一你搞錯咗,你可以將呢個頁改返去佢改之前噉,你唔可以覆蓋一個現有嘅頁。 +'''警告!''' +噉樣對於一個好多人經過嘅頁面嚟講可能係一個好大嘅同埋出人意表嘅修改;請你喺行動之前確認你清楚噉做嘅後果。", +'movepagetext-noredirectfixer' => "用下面個表改版名,搬埋佢嘅歷史。 +舊標題會變做跳轉。 +請肯定檢查清楚[[Special:DoubleRedirects|雙重]]或者[[Special:BrokenRedirects|死跳轉]]。 +你有責任確保啲連結依然指去佢哋應該指去嘅地方。 + +注意如果已經有一個同個新名同名嘅頁,噉呢個頁係搬'''唔到'''嘅,除非嗰個同名嘅頁係空嘅或者佢係一個跳轉頁,兼且要之前冇編輯過(冇編輯歷史)先得。噉即係講萬一你搞錯咗,你可以將呢個頁改返去佢改之前噉,你唔可以覆蓋一個現有嘅頁。 + '''警告!''' 噉樣對於一個好多人經過嘅頁面嚟講可能係一個好大嘅同埋出人意表嘅修改;請你喺行動之前確認你清楚噉做嘅後果。", 'movepagetalktext' => "相應嘅討論頁會連同佢一齊自動搬過去,'''除非''': @@ -2359,6 +2417,7 @@ $1已經被封鎖。你係咪想更改呢個設定?', 'immobile-source-page' => '呢版唔搬得。', 'immobile-target-page' => '搬唔到去目標標題度。', 'imagenocrossnamespace' => '唔可以搬檔案到非檔案空間名', +'nonfile-cannot-move-to-file' => '唔可以搬非檔案到檔案空間名', 'imagetypemismatch' => '個新副檔名唔配佢嘅類型', 'imageinvalidfilename' => '個目標檔名係無效嘅', 'fix-double-redirects' => '更新指到原先標題嘅任何跳轉', @@ -2438,6 +2497,7 @@ $1已經被封鎖。你係咪想更改呢個設定?', 'importstart' => '倒入緊...', 'import-revision-count' => '$1次修訂', 'importnopages' => '冇頁面去倒入。', +'imported-log-entries' => '倒入咗$1項日誌紀錄。', 'importfailed' => '倒入失敗:$1', 'importunknownsource' => '不明嘅倒入來源類型', 'importcantopen' => '唔能夠開個倒入檔案', @@ -2530,6 +2590,8 @@ $1已經被封鎖。你係咪想更改呢個設定?', 'tooltip-upload' => '開始上載', 'tooltip-rollback' => '『反轉』可以一撳復原上一位貢獻者對呢版嘅編輯', 'tooltip-undo' => '『復原』可以響編輯模式度開編輯表以便復原。佢容許響摘要度加入原因。', +'tooltip-preferences-save' => '保存設定', +'tooltip-summary' => '輸入一個簡短嘅摘要', # Stylesheets 'common.css' => '/* 響呢度放 CSS 碼來改成個網站嘅畫面 */', @@ -2661,14 +2723,17 @@ $1', 'imagemaxsize' => "圖像大細限制:
    ''(用響檔案描述頁)''", 'thumbsize' => '縮圖大細:', 'widthheightpage' => '$1×$2, $3版', -'file-info' => '(檔案大細:$1 ,MIME類型:$2)', -'file-info-size' => '($1 × $2 像素,檔案大細:$3 ,MIME類型:$4)', +'file-info' => '檔案大細:$1 ,MIME類型:$2', +'file-info-size' => '$1 × $2 像素,檔案大細:$3 ,MIME類型:$4', 'file-nohires' => '冇更高解像度嘅圖像。', -'svg-long-desc' => '(SVG檔案,表面大細: $1 × $2 像素,檔案大細:$3)', +'svg-long-desc' => 'SVG檔案,表面大細: $1 × $2 像素,檔案大細:$3', 'show-big-image' => '完整解像度', 'show-big-image-thumb' => '呢個預覽嘅大細: $1 × $2 像素', 'file-info-gif-looped' => '循環', 'file-info-gif-frames' => '$1格', +'file-info-png-looped' => '循環', +'file-info-png-repeat' => '播咗$1次', +'file-info-png-frames' => '$1格', # Special:NewFiles 'newimages' => '新檔案畫廊', @@ -2851,6 +2916,7 @@ Variants for Chinese language 'exif-gpsareainformation' => 'GPS 地區名', 'exif-gpsdatestamp' => 'GPS 日期', 'exif-gpsdifferential' => 'GPS 差動修正', +'exif-objectname' => '短標題', # EXIF attributes 'exif-compression-1' => '未壓過', @@ -3008,24 +3074,24 @@ Variants for Chinese language 'limitall' => '全部', # E-mail address confirmation -'confirmemail' => '確認電郵地址', -'confirmemail_noemail' => '你唔需要響你嘅[[Special:Preferences|用戶喜好設定]]度設定一個有效嘅電郵地址。', -'confirmemail_text' => '{{SITENAME}}需要你喺使用電郵功能之前驗證吓你嘅電郵地址。啟用下邊個掣嚟發封確認信去你個地址度。封信入面會附帶一條包含代碼嘅連結;喺你個瀏覽器度打開條連結嚟確認你嘅電郵地址係有效嘅。', -'confirmemail_pending' => '一個確認碼已經電郵咗畀你;如果你係啱啱開咗個新戶口嘅,你可以響請求一個新嘅確認碼之前等多幾分鐘等佢寄畀你。', -'confirmemail_send' => '寄出確認碼。', -'confirmemail_sent' => '確認電郵已經寄出。', -'confirmemail_oncreate' => '一個確認碼已經寄送咗到嘅嘅電郵地址。 +'confirmemail' => '確認電郵地址', +'confirmemail_noemail' => '你唔需要響你嘅[[Special:Preferences|用戶喜好設定]]度設定一個有效嘅電郵地址。', +'confirmemail_text' => '{{SITENAME}}需要你喺使用電郵功能之前驗證吓你嘅電郵地址。啟用下邊個掣嚟發封確認信去你個地址度。封信入面會附帶一條包含代碼嘅連結;喺你個瀏覽器度打開條連結嚟確認你嘅電郵地址係有效嘅。', +'confirmemail_pending' => '一個確認碼已經電郵咗畀你;如果你係啱啱開咗個新戶口嘅,你可以響請求一個新嘅確認碼之前等多幾分鐘等佢寄畀你。', +'confirmemail_send' => '寄出確認碼。', +'confirmemail_sent' => '確認電郵已經寄出。', +'confirmemail_oncreate' => '一個確認碼已經寄送咗到嘅嘅電郵地址。 呢個代碼唔係登入嗰陣去用,但係你需要佢去開響呢個wiki度,任何同電郵有關嘅功能。', -'confirmemail_sendfailed' => '{{SITENAME}}發唔到確認信。請檢查吓個地址有冇無效嘅字。 +'confirmemail_sendfailed' => '{{SITENAME}}發唔到確認信。請檢查吓個地址有冇無效嘅字。 郵件遞送員回應咗:$1', -'confirmemail_invalid' => '無效嘅確認碼。個代碼可能已經過咗期。', -'confirmemail_needlogin' => '你需要先$1去確認你嘅電郵地址。', -'confirmemail_success' => '你嘅電郵地址已經得到確認。你而家可以[[Special:UserLogin|登入]]同盡情享受wiki啦。', -'confirmemail_loggedin' => '你嘅電郵地址現已得到確認。', -'confirmemail_error' => '儲存你嘅確認資料嘅時候有小小嘢發生咗意外。', -'confirmemail_subject' => '{{SITENAME}}電郵地址確認', -'confirmemail_body' => '有人(好有可能係嚟自你嘅IP地址 $1)已經用呢個電郵地址喺{{SITENAME}}度註冊咗帳戶"$2"。 +'confirmemail_invalid' => '無效嘅確認碼。個代碼可能已經過咗期。', +'confirmemail_needlogin' => '你需要先$1去確認你嘅電郵地址。', +'confirmemail_success' => '你嘅電郵地址已經得到確認。你而家可以[[Special:UserLogin|登入]]同盡情享受wiki啦。', +'confirmemail_loggedin' => '你嘅電郵地址現已得到確認。', +'confirmemail_error' => '儲存你嘅確認資料嘅時候有小小嘢發生咗意外。', +'confirmemail_subject' => '{{SITENAME}}電郵地址確認', +'confirmemail_body' => '有人(好有可能係嚟自你嘅IP地址 $1)已經用呢個電郵地址喺{{SITENAME}}度註冊咗帳戶"$2"。 要確認呢個帳戶的而且確屬於你同埋啟用{{SITENAME}}嘅電郵功能,請喺你嘅瀏覽器度打開呢條連結: @@ -3037,8 +3103,32 @@ $3 $5 呢個確認代碼會喺$4到期。', -'confirmemail_invalidated' => '電郵地址確認取消咗', -'invalidateemail' => '取消電郵確認', +'confirmemail_body_changed' => '有人(好有可能係嚟自你嘅IP地址 $1)已經用呢個電郵地址喺{{SITENAME}}度改咗戶口"$2"嘅電郵地址"$2"。 + +要確認呢個帳戶的而且確屬於你同埋重新啟用{{SITENAME}}嘅電郵功能,請喺你嘅瀏覽器度打開呢條連結: + +$3 + +如果呢個戶口*唔係*屬於你嘅, +請跟住呢個連結去取消電郵地址確認: + +$5 + +呢個確認代碼會喺$4到期。', +'confirmemail_body_set' => '有個人,可能係你,來自$1呢個IP, +幫係{{SITENAME}}嘅用戶"$2"設定左個電郵地址。 + +要確認呢個電郵真係你嘅同埋再次啟動{{SITENAME}}嘅電郵功能,請開啟呢個網址確認: + +$3 + +如果呢個*唔係*你嘅戶口,用下面呢個網址去取消呢個電郵確認: + +$5 + +呢個確認碼會喺$4到期。', +'confirmemail_invalidated' => '電郵地址確認取消咗', +'invalidateemail' => '取消電郵確認', # Scary transclusion 'scarytranscludedisabled' => '[跨 wiki 滲漏正停用]', @@ -3083,6 +3173,7 @@ $1', 'table_pager_first' => '第一版', 'table_pager_last' => '最後一版', 'table_pager_limit' => '每一版顯示$1個項目', +'table_pager_limit_label' => '每一版項目數:', 'table_pager_limit_submit' => '去', 'table_pager_empty' => '無結果', @@ -3136,6 +3227,7 @@ $1', 'version-specialpages' => '特別頁', 'version-parserhooks' => '語法鈎', 'version-variables' => '變數', +'version-skins' => '畫面', 'version-other' => '其他', 'version-mediahandlers' => '媒體處理器', 'version-hooks' => '鈎', @@ -3147,6 +3239,13 @@ $1', 'version-hook-subscribedby' => '利用於', 'version-version' => '(版本 $1)', 'version-license' => '牌照', +'version-poweredby-credits' => "呢個 Wiki 係由 '''[http://www.mediawiki.org/ MediaWiki]''' 驅動,版權所有 © 2001-$1 $2。", +'version-poweredby-others' => '其他', +'version-license-info' => 'MediaWiki係自由軟件;你可以根據Free Software Foundation所發表嘅GNU General Public License條款規定,就本程式再發佈同/或修改;無論你根據嘅係呢個牌照嘅第二版或(任你揀)任一日之後發行嘅版本。 + +MediaWiki是基於使用目的而加以發佈,但係就唔會負上任何嘅責任;亦都唔會對適售性或都係特定目的適用性嘅默示性擔保。詳情請目睇GNU General Public License。 + +你應該已經收到跟往呢個程式嘅[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General Public License嘅副本];如果冇嘅話,請寫信到至Free Software Foundation, Inc.:51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或[http://www.gnu.org/licenses/old-licenses/gpl-2.0.html 上網睇]。', 'version-software' => '裝咗嘅軟件', 'version-software-product' => '產品', 'version-software-version' => '版本', @@ -3216,6 +3315,15 @@ $1', 'tags-edit' => '編輯', 'tags-hitcount' => '$1次更改', +# Special:ComparePages +'comparepages' => '比較版', +'compare-selector' => '比較版修訂', +'compare-page1' => '第1版', +'compare-page2' => '第2版', +'compare-rev1' => '修訂1', +'compare-rev2' => '修訂2', +'compare-submit' => '比較', + # Database error messages 'dberr-header' => '呢個 wiki 出咗問題', 'dberr-problems' => '對唔住! @@ -3233,8 +3341,13 @@ $1', 'htmlform-float-invalid' => '你所指定嘅值唔係一個數字。', 'htmlform-int-toolow' => '你所指定嘅值低過最細值$1', 'htmlform-int-toohigh' => '你所指定嘅值高過最大值$1', +'htmlform-required' => '呢個數值係必填嘅', 'htmlform-submit' => '遞交', 'htmlform-reset' => '復原更改', 'htmlform-selectorother-other' => '其他', +# SQLite database support +'sqlite-has-fts' => '$1 有全文搜尋支援', +'sqlite-no-fts' => '$1 冇全文搜尋支援', + ); diff --git a/languages/messages/MessagesZa.php b/languages/messages/MessagesZa.php index df39ba6c..47da51a6 100644 --- a/languages/messages/MessagesZa.php +++ b/languages/messages/MessagesZa.php @@ -87,19 +87,12 @@ $messages = array( 'faqpage' => 'Project:Cam caeuq dap', # Vector skin -'vector-action-delete' => 'Ca', -'vector-action-move' => 'Daen', -'vector-action-protect' => 'Bauj', -'vector-namespace-category' => 'Faendingz', -'vector-namespace-help' => 'Yieb bangcoh', -'vector-namespace-image' => 'Vwnzgen', -'vector-namespace-main' => 'Yieb', -'vector-namespace-media' => 'Yieb moizdij', -'vector-namespace-mediawiki' => 'Siusik', -'vector-namespace-template' => 'Mozbanj', -'vector-view-create' => 'Laeb', -'vector-view-edit' => 'gaij', -'vector-view-history' => 'Cazyawj lizsij', +'vector-action-delete' => 'Ca', +'vector-action-move' => 'Daen', +'vector-action-protect' => 'Bauj', +'vector-view-create' => 'Laeb', +'vector-view-edit' => 'gaij', +'vector-view-history' => 'Cazyawj lizsij', 'errorpagetitle' => 'Loengloek', 'tagline' => 'okcih {{SITENAME}}', diff --git a/languages/messages/MessagesZea.php b/languages/messages/MessagesZea.php index f5058151..7b752376 100644 --- a/languages/messages/MessagesZea.php +++ b/languages/messages/MessagesZea.php @@ -56,8 +56,7 @@ $messages = array( 'tog-editsection' => "Bewerken van deêlpahina's meuhlijk maeken via [bewerken]-koppeliengen", 'tog-editsectiononrightclick' => "Bewerken van deêlpahina's meulijk maeken mie een rechtermuusklik op een tussenkopje (JavaScript vereist)", 'tog-showtoc' => "Inoudsopgaeve weerheven (voe pahina's mie minstes 3 tussenkopjes)", -'tog-rememberpassword' => 'Wachtwoôrd ontouwe', -'tog-editwidth' => 'Bewerkiengsveld over de volle breêdte', +'tog-rememberpassword' => 'Wachtwoôrd ontouwe (for a maximum of $1 {{PLURAL:$1|day|days}})', 'tog-watchcreations' => "Pahina's die ak anmik automaotisch volhen", 'tog-watchdefault' => "Pahina's die ak bewerk automaotisch volhen", 'tog-watchmoves' => "Pahina's die ak verplekke automaotisch volhen", @@ -385,7 +384,7 @@ Vergeet nie je [[Special:Preferences|vòkeuren voe {{SITENAME}}]] an te passen.' 'yourname' => 'Gebrukersnaem', 'yourpassword' => 'Wachtwoôrd', 'yourpasswordagain' => 'Heef je wachtwoôrd opnieuw in:', -'remembermypassword' => 'Anmeldhehevens ontouwen', +'remembermypassword' => 'Anmeldhehevens ontouwen (for a maximum of $1 {{PLURAL:$1|day|days}})', 'yourdomainname' => 'Je domein:', 'externaldberror' => "Der is een fout opetreeën bie 't anmelden bie de database of je ei hin toestemmieng jen externe gebruker bie te werken.", 'login' => 'Anmelden', @@ -563,7 +562,7 @@ Je kan [[Special:Search/{{PAGENAME}}|ni deêze term zoeken]] in aore pagina\'s o 'userjsyoucanpreview' => "'''Tip:''' Gebruuk de knoppe 'Naekieken' om je nieuwe JS te tessen voe da je opsli.", 'usercsspreview' => "'''Dit is alleên een voeôvertonieng van je persoônlijke CSS, dezen is nog nie opeslogen!'''", 'userjspreview' => "'''Let op: je test noe je persoônlijke JavaScript. De pagina is nie opeslogen!'''", -'userinvalidcssjstitle' => "'''Waerschuwieng:''' der is hin skin \"\$1\". Let op: jen eihen .css- en .js-pagina's behunnen mie een kleine letter, buvobbeld {{ns:user}}:Naem/monobook.css in plekke van {{ns:user}}:Naem/Monobook.css.", +'userinvalidcssjstitle' => "'''Waerschuwieng:''' der is hin skin \"\$1\". Let op: jen eihen .css- en .js-pagina's behunnen mie een kleine letter, buvobbeld {{ns:user}}:Naem/vector.css in plekke van {{ns:user}}:Naem/Vector.css.", 'updated' => '(Biehewerkt)', 'note' => "'''Opmerkieng:'''", 'previewnote' => "'''Let op: dit is een controlepagina; je tekst is nie opeslogen!'''", @@ -603,7 +602,6 @@ Ierbie beloof je ons ok da je deêze tekst zelf eschreven ei, of overenomen uut A je nie wil dan je teksen rihoreus anepast worn deur aore, plek ze ier dan nie.
    Je beloof ok da je de oôrspronkelijke auteur bin van dit materiaol, of da je 't ei ekopieerd uut een bron in 't publieke domein, of een soôrthelieke vrieë bron (zie $1 voor details). '''GEBRUUK HIN MATERIAOL DAT A BESCHERMD WOR DEUR AUTEURSRECHT, TENZIE A JE DIVOE TOESTEMMIENG EI!'''", -'longpagewarning' => "'''WAERSCHUWIENG: Deêze pagina is $1 kilobyte hroôt; sommihe browsers èn probleemn mie 't bewerken van pagina's die an hrotter zien dan 32 kb. Misschien kan deêze pagina esplitst worn in kleinere deêln.'''", 'longpageerror' => "'''FOUT: de tekst die a je ei toe'evoegd is $1 kilobyte hroôt, wat a hrotter is dan 't maximum van $2 kilobyte. Opslaene is nie meuhlijk.'''", 'readonlywarning' => "'''WAERSCHUWIENG: de database is eblokkeerd voe onderoud, dus je kan dezen noe nie opslaen. @@ -1026,7 +1024,6 @@ Also see [[Special:WantedCategories|wanted categories]].', # Watchlist 'watchlist' => 'Volglieste', 'mywatchlist' => 'Mien volglieste', -'watchlistfor' => "(vò '''$1''')", 'watchnologin' => 'Je bin nie angemolde.', 'watchnologintext' => 'Je moe [[Special:UserLogin|angemolde]] weze om je volglieste an te passen.', 'addedwatch' => 'An de volglieste toegevoegd', diff --git a/languages/messages/MessagesZh.php b/languages/messages/MessagesZh.php index a6647335..adff55b2 100644 --- a/languages/messages/MessagesZh.php +++ b/languages/messages/MessagesZh.php @@ -7,7 +7,6 @@ * @ingroup Language * @file * - * @author Horacewai2 * @author PhiLiP * @author Philip * @author Wong128hk @@ -51,8 +50,8 @@ $namespaceAliases = array( '用户讨论' => NS_USER_TALK, '用戶討論' => NS_USER_TALK, # This has never worked so it's unlikely to annoy anyone if I disable it -- TS - #'{{SITENAME}}_对话' => NS_PROJECT_TALK - #"{{SITENAME}}_對話" => NS_PROJECT_TALK + # '{{SITENAME}}_对话' => NS_PROJECT_TALK + # "{{SITENAME}}_對話" => NS_PROJECT_TALK '图像' => NS_FILE, '圖像' => NS_FILE, '档案' => NS_FILE, @@ -89,9 +88,9 @@ $namespaceAliases = array( '幫助討論' => NS_HELP_TALK, '分类' => NS_CATEGORY, '分類' => NS_CATEGORY, - '分类对话'=> NS_CATEGORY_TALK, + '分类对话' => NS_CATEGORY_TALK, '分類對話' => NS_CATEGORY_TALK, - '分类讨论'=> NS_CATEGORY_TALK, + '分类讨论' => NS_CATEGORY_TALK, '分類討論' => NS_CATEGORY_TALK, ); @@ -179,10 +178,6 @@ $messages = array( # Move page 'move-redirect-suppressed' => '已禁止重新定向', -# Patrolling -'markaspatrolleddiff' => '标记为已巡查', -'markaspatrolledtext' => '标记此页面为已巡查', - /* Short names for language variants used for language conversion links. To disable showing a particular link, set it to 'disable', e.g. diff --git a/languages/messages/MessagesZh_hans.php b/languages/messages/MessagesZh_hans.php index 722f0a85..b440fc94 100644 --- a/languages/messages/MessagesZh_hans.php +++ b/languages/messages/MessagesZh_hans.php @@ -11,14 +11,19 @@ * @author Bencmq * @author Biŋhai * @author Chenxiaoqino + * @author Chinalace + * @author Fantasticfears * @author Franklsf95 * @author Gaoxuewei * @author Gzdavidwong + * @author Hercule * @author Horacewai2 * @author Hydra + * @author Jding2010 * @author Jidanni * @author Jimmy xu wrk * @author KaiesTse + * @author Kuailong * @author Liangent * @author Mark85296341 * @author MarkAHershberger @@ -29,16 +34,18 @@ * @author Shizhao * @author Tommyang * @author Waihorace + * @author Wilsonmess * @author Wmr89502270 * @author Wong128hk * @author Xiaomingyan + * @author Yfdyh000 * @author 阿pp */ $fallback8bitEncoding = 'windows-936'; $namespaceNames = array( - NS_MEDIA => '媒体', + NS_MEDIA => '媒体文件', NS_SPECIAL => '特殊', NS_TALK => '讨论', NS_USER => '用户', @@ -65,7 +72,7 @@ $namespaceAliases = array( '用户对话' => NS_USER_TALK, '用户讨论' => NS_USER_TALK, # This has never worked so it's unlikely to annoy anyone if I disable it -- TS - #'{{SITENAME}}_对话' => NS_PROJECT_TALK + # '{{SITENAME}}_对话' => NS_PROJECT_TALK '图像' => NS_FILE, '档案' => NS_FILE, '文件' => NS_FILE, @@ -78,14 +85,14 @@ $namespaceAliases = array( '文件对话' => NS_FILE_TALK, '文件讨论' => NS_FILE_TALK, '模板' => NS_TEMPLATE, - '模板对话'=> NS_TEMPLATE_TALK, - '模板讨论'=> NS_TEMPLATE_TALK, + '模板对话' => NS_TEMPLATE_TALK, + '模板讨论' => NS_TEMPLATE_TALK, '帮助' => NS_HELP, - '帮助对话'=> NS_HELP_TALK, - '帮助讨论'=> NS_HELP_TALK, + '帮助对话' => NS_HELP_TALK, + '帮助讨论' => NS_HELP_TALK, '分类' => NS_CATEGORY, - '分类对话'=> NS_CATEGORY_TALK, - '分类讨论'=> NS_CATEGORY_TALK, + '分类对话' => NS_CATEGORY_TALK, + '分类讨论' => NS_CATEGORY_TALK, ); $specialPageAliases = array( @@ -133,9 +140,10 @@ $specialPageAliases = array( 'Allpages' => array( '所有页面' ), 'Prefixindex' => array( '前缀索引' ), 'Ipblocklist' => array( '封禁列表' ), + 'Unblock' => array( '解除封禁' ), 'Specialpages' => array( '特殊页面' ), 'Contributions' => array( '用户贡献' ), - 'Emailuser' => array( '电邮用户' ), + 'Emailuser' => array( '邮件用户' ), 'Confirmemail' => array( '确认电子邮件' ), 'Whatlinkshere' => array( '链入页面' ), 'Recentchangeslinked' => array( '链出更改' ), @@ -155,7 +163,7 @@ $specialPageAliases = array( 'Userrights' => array( '用户权限' ), 'MIMEsearch' => array( 'MIME搜索' ), 'FileDuplicateSearch' => array( '搜索重复文件' ), - 'Unwatchedpages' => array( '未被监视的页面' ), + 'Unwatchedpages' => array( '未受监视页面' ), 'Listredirects' => array( '重定向页面列表' ), 'Revisiondelete' => array( '删除或恢复版本' ), 'Unusedtemplates' => array( '未使用模板' ), @@ -163,12 +171,14 @@ $specialPageAliases = array( 'Mypage' => array( '我的用户页' ), 'Mytalk' => array( '我的讨论页' ), 'Mycontributions' => array( '我的贡献' ), + 'Myuploads' => array( '我的上传' ), + 'PermanentLink' => array( '永久链接' ), 'Listadmins' => array( '管理员列表' ), 'Listbots' => array( '机器人列表' ), 'Popularpages' => array( '热点页面' ), 'Search' => array( '搜索' ), 'Resetpass' => array( '修改密码' ), - 'Withoutinterwiki' => array( '没有跨语言链接的页面' ), + 'Withoutinterwiki' => array( '无跨维基链接页面' ), 'MergeHistory' => array( '合并历史' ), 'Filepath' => array( '文件路径' ), 'Invalidateemail' => array( '不可识别的电邮地址' ), @@ -177,6 +187,9 @@ $specialPageAliases = array( 'DeletedContributions' => array( '已删除的用户贡献' ), 'Tags' => array( '标签' ), 'Activeusers' => array( '活跃用户' ), + 'ComparePages' => array( '对比页子' ), + 'Badtitle' => array( '坏标题' ), + 'DisableAccount' => array( '禁用帐户' ), ); $linkTrail = '/^()(.*)$/sD'; @@ -224,8 +237,7 @@ $messages = array( 'tog-editsection' => '允许点击[编辑]链接编辑段落', 'tog-editsectiononrightclick' => '允许右击标题编辑段落(JavaScript)', 'tog-showtoc' => '显示目录(针对超过3个标题的页面)', -'tog-rememberpassword' => '在此计算机上记住我的密码', -'tog-editwidth' => '将编辑框扩展到全屏宽度', +'tog-rememberpassword' => '在此浏览器上保留我的登录信息(最长$1{{PLURAL:$1|日|日}})', 'tog-watchcreations' => '将我创建的页面添加到我的监视列表', 'tog-watchdefault' => '将我编辑的页面添加到我的监视列表', 'tog-watchmoves' => '将我移动的页面添加到我的监视列表', @@ -371,31 +383,21 @@ $messages = array( 'faqpage' => 'Project:常见问题', # Vector skin -'vector-action-addsection' => '添加话题', -'vector-action-delete' => '删除', -'vector-action-move' => '移动', -'vector-action-protect' => '保护', -'vector-action-undelete' => '恢复被删页面', -'vector-action-unprotect' => '解除保护', -'vector-namespace-category' => '分类', -'vector-namespace-help' => '帮助页面', -'vector-namespace-image' => '文件', -'vector-namespace-main' => '页面', -'vector-namespace-media' => '媒体页面', -'vector-namespace-mediawiki' => '信息', -'vector-namespace-project' => '计划页面', -'vector-namespace-special' => '特殊页面', -'vector-namespace-talk' => '讨论', -'vector-namespace-template' => '模板', -'vector-namespace-user' => '用户页面', -'vector-view-create' => '创建', -'vector-view-edit' => '编辑', -'vector-view-history' => '查看历史', -'vector-view-view' => '阅读', -'vector-view-viewsource' => '查看源代码', -'actions' => '动作', -'namespaces' => '名字空间', -'variants' => '变换', +'vector-action-addsection' => '添加话题', +'vector-action-delete' => '删除', +'vector-action-move' => '移动', +'vector-action-protect' => '保护', +'vector-action-undelete' => '恢复被删页面', +'vector-action-unprotect' => '解除保护', +'vector-simplesearch-preference' => '打开增强搜索建议(仅限Vector皮肤)', +'vector-view-create' => '创建', +'vector-view-edit' => '编辑', +'vector-view-history' => '查看历史', +'vector-view-view' => '阅读', +'vector-view-viewsource' => '查看源代码', +'actions' => '动作', +'namespaces' => '名字空间', +'variants' => '变换', 'errorpagetitle' => '错误', 'returnto' => '返回到$1。', @@ -456,6 +458,9 @@ $messages = array( 请在再次尝试访问本页面之前稍等片刻。 $1', +'pool-timeout' => '等待锁超时', +'pool-queuefull' => '请求池已满', +'pool-errorunknown' => '未知错误', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '关于{{SITENAME}}', @@ -610,7 +615,8 @@ $2', 'yourname' => '用户名:', 'yourpassword' => '密码:', 'yourpasswordagain' => '再次输入密码:', -'remembermypassword' => '下次登录记住密码', +'remembermypassword' => '在此浏览器上保留我的登录信息(最长$1{{PLURAL:$1|日|日}})', +'securelogin-stick-https' => '登陆后继续使用 HTTPS 连接', 'yourdomainname' => '您的域名:', 'externaldberror' => '这可能是由于验证数据库错误或您被禁止更新您的外部账号。', 'login' => '登录', @@ -627,6 +633,7 @@ $2', 'gotaccount' => '已经拥有账户?$1。', 'gotaccountlink' => '登录', 'createaccountmail' => '通过电子邮件', +'createaccountreason' => '理由:', 'badretype' => '您所输入的密码并不相同。', 'userexists' => '您所输入的用户名称已经存在,请另选一个名称。', 'loginerror' => '登录错误', @@ -644,6 +651,7 @@ $2', 'wrongpasswordempty' => '您没有输入密码,请重试!', 'passwordtooshort' => '您的密码至少需要$1个字符。', 'password-name-match' => '您的密码必须和您的用户名不相同。', +'password-login-forbidden' => '这个用户名称及密码的使用是被禁止的。', 'mailmypassword' => '将新密码寄给我', 'passwordremindertitle' => '{{SITENAME}}的新临时密码', 'passwordremindertext' => '有人(可能是您,来自IP地址$1)已请求{{SITENAME}}的新密码($4)。 @@ -679,6 +687,9 @@ $2', 'loginlanguagelabel' => '语言:$1', 'suspicious-userlogout' => '您登出的要求已经被拒绝,因为它可能是由已损坏的浏览器或者缓存代理传送。', +# E-mail sending +'php-mail-error-unknown' => '在 PHP 的 mail() 函数中的未知错误', + # Password reset dialog 'resetpass' => '更改密码', 'resetpass_announce' => '您是通过发送到电子邮箱的临时密码登录的。要完成登录,请设定一个新的密码:', @@ -728,9 +739,10 @@ $2', 'showdiff' => '显示差异', 'anoneditwarning' => "'''警告:'''您没有登录。 您的IP地址将记录在此页的编辑历史中。", +'anonpreviewwarning' => "''您没有登录。保存页面将会把您的IP地址记录在此页的编辑历史中。''", 'missingsummary' => "'''提示:''' 您没有提供一个编辑摘要。如果您再次单击“{{int:savearticle}}”,您的编辑将不带编辑摘要保存。", 'missingcommenttext' => '请在下面输入评论。', -'missingcommentheader' => "'''提示:''' 您没有为此评论提供一个标题。如果您再次单击保存,您的编辑将不带标题保存。", +'missingcommentheader' => "'''提示:''' 您没有为此评论提供一个标题。如果您再次单击“{{int:savearticle}}”,您的编辑将不带标题保存。", 'summary-preview' => '摘要预览:', 'subject-preview' => '标题预览:', 'blockedtitle' => '用户被封禁', @@ -789,7 +801,11 @@ $2', '''还没有保存!'''", 'userjspreview' => "'''记住您只是在测试/预览您的个人 JavaScript。''' '''还没有保存!'''", -'userinvalidcssjstitle' => "'''警告:''' 不存在皮肤\"\$1\"。注意自定义的 .css 和 .js 页要使用小写标题,例如,{{ns:user}}:Foo/monobook.css 不同于 {{ns:user}}:Foo/Monobook.css。", +'sitecsspreview' => "'''记住你现在只是预览此 CSS。''' +'''还没有保存!'''", +'sitejspreview' => "'''记住你现在只是预览此 JavaScript 代码。''' +'''还没有保存!'''", +'userinvalidcssjstitle' => "'''警告:''' 不存在皮肤\"\$1\"。注意自定义的 .css 和 .js 页要使用小写标题,例如,{{ns:user}}:Foo/vector.css 不同于 {{ns:user}}:Foo/Vector.css。", 'updated' => '(已更新)', 'note' => "'''注意:'''", 'previewnote' => "'''请记住这只是预览。'''内容还未保存!", @@ -826,8 +842,6 @@ $2', 如果您不希望您的文字被任意修改和再散布,请不要提交。
    您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅$1的细节)。 '''不要在未获授权的情况下发表!'''", -'longpagewarning' => "'''警告''':该页面的长度是$1KB;一些浏览器在编辑长度接近或大于32KB的页面可能存在问题。 -您应该考虑将此页面分成更小的章节。", 'longpageerror' => "'''错误:您所提交的文本长度有$1KB,这大于$2KB的最大值。'''该文本不能被保存。", 'readonlywarning' => "'''警告:数据库被锁定以进行维护,所以您目前将无法保存您的修改。'''您或许希望将本段文字先复制并保存到文本文件,并在稍后进行修改。 @@ -1002,6 +1016,8 @@ $1", 'logdelete-failure' => "'''事件的可见性无法设置:''' $1", 'revdel-restore' => '更改可见性', +'revdel-restore-deleted' => '已删除的修订版本', +'revdel-restore-visible' => '可见的修订版本', 'pagehist' => '页面历史', 'deletedhist' => '已删除之历史', 'revdelete-content' => '内容', @@ -1065,11 +1081,13 @@ $1", # Diffs 'history-title' => '“$1”的修订历史', 'difference' => '(修订版本间的差异)', +'difference-multipage' => '(页面间的差异)', 'lineno' => '第$1行:', 'compareselectedversions' => '比较选定的修订版本', 'showhideselectedversions' => '显示/隐藏选定的修订版本', 'editundo' => '撤销', -'diff-multi' => '($1个中途的修订版本没有显示)', +'diff-multi' => '(由{{PLURAL:$2|1名用户|$2名用户}}作出的{{PLURAL:$1|一个中途修订版本|$1个中途修订版本}}未被显示)', +'diff-multi-manyusers' => '(由多于$2名用户作出的{{PLURAL:$1|一个中途修订版本|$1个中途修订版本}} 未被显示)', # Search results 'searchresults' => '搜索结果', @@ -1104,6 +1122,7 @@ $1", 'searchprofile-everything-tooltip' => '搜索全部(包括讨论页面)', 'searchprofile-advanced-tooltip' => '在自定义的名字空间中搜索', 'search-result-size' => '$1($2个字)', +'search-result-category-size' => '$1位成员($2个子分类,$3个文件)', 'search-result-score' => '相关度:$1%', 'search-redirect' => '(重定向 $1)', 'search-section' => '(段落 $1)', @@ -1178,6 +1197,7 @@ $1", 'contextlines' => '每链显示行数:', 'contextchars' => '每行显示字数:', 'stub-threshold' => '短页面链接格式门槛值(字节):', +'stub-threshold-disabled' => '已停用', 'recentchangesdays' => '最近更改中的显示日数:', 'recentchangesdays-max' => '最多 $1 {{PLURAL:$1|天|天}}', 'recentchangescount' => '默认显示的编辑数:', @@ -1209,6 +1229,7 @@ $1", 'prefs-files' => '文件', 'prefs-custom-css' => '自定义CSS', 'prefs-custom-js' => '自定义JavaScript', +'prefs-common-css-js' => '共享CSS/JavaScript于所有皮肤中:', 'prefs-reset-intro' => '您可以利用这个页面去重设您的参数设置到网站默认值。这个动作无法复原。', 'prefs-emailconfirm-label' => '电子邮件确认:', 'prefs-textboxsize' => '编辑框大小', @@ -1245,9 +1266,15 @@ $1", 'prefs-advancedrendering' => '高级选项', 'prefs-advancedsearchoptions' => '高级选项', 'prefs-advancedwatchlist' => '高级选项', -'prefs-display' => '显示选项', +'prefs-displayrc' => '显示选项', +'prefs-displaysearchoptions' => '显示选项', +'prefs-displaywatchlist' => '显示选项', 'prefs-diffs' => '差异', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => '电子邮件地址有效', +'email-address-validity-invalid' => '请提供一个有效的电子邮件地址', + # User rights 'userrights' => '用户权限管理', 'userrights-lookup-user' => '管理用户群组', @@ -1331,6 +1358,7 @@ $1", 'right-hideuser' => '封锁用户名,对公众隐藏', 'right-ipblock-exempt' => '绕过IP封锁、自动封锁以及范围封锁', 'right-proxyunbannable' => '绕过Proxy的自动封锁', +'right-unblockself' => '自我解除封锁', 'right-protect' => '更改保护等级以及编辑保护页面', 'right-editprotected' => '编辑保护页面(无连锁保护)', 'right-editinterface' => '编辑用户接口', @@ -1353,7 +1381,6 @@ $1", 'right-siteadmin' => '锁定和解除锁定数据库', 'right-reset-passwords' => '重设其他用户的密码', 'right-override-export-depth' => '导出含有五层深度链接页面之页面', -'right-versiondetail' => '显示延伸软件版本的资料', 'right-sendemail' => '发电子邮件给其他用户', # User rights log @@ -1404,14 +1431,9 @@ $1", 'recentchanges-legend' => '最近更改选项', 'recentchangestext' => '跟踪这个wiki上的最新更改。', 'recentchanges-feed-description' => '跟踪此订阅在 wiki 上的最近更改。', -'recentchanges-label-legend' => '图例: $1', -'recentchanges-legend-newpage' => '$1 - 新页面', 'recentchanges-label-newpage' => '这次编辑建立了一个新页面', -'recentchanges-legend-minor' => '$1 - 小编辑', 'recentchanges-label-minor' => '这是一个小编辑', -'recentchanges-legend-bot' => '$1 - 机器人编辑', 'recentchanges-label-bot' => '这次编辑是由机器人进行', -'recentchanges-legend-unpatrolled' => '$1 - 未巡查过的编辑', 'recentchanges-label-unpatrolled' => '这次编辑尚未巡查过', 'rcnote' => "以下是在$4 $5,最近'''$2'''天内的'''$1'''次最近更改记录:", 'rcnotefrom' => "以下是自'''$2'''的更改(最多显示'''$1'''):", @@ -1458,6 +1480,9 @@ $1", 'upload_directory_missing' => '上传目录($1)遗失,不能由网页服务器建立。', 'upload_directory_read_only' => '上传目录($1)不存在或无写权限。', 'uploaderror' => '上传错误', +'upload-recreate-warning' => "'''警告:一个相同名字的文件曾经被删除或者移动至别处。''' + +这个页面的删除和移动日志在这里提供以便参考:", 'uploadtext' => "使用下面的表单来上传文件。 要查看或搜索以前上传的文件,可以进入[[Special:FileList|文件上传列表]],(重新)上传也将在[[Special:Log/upload|上传日志]]中记录,而删除将在[[Special:Log/delete|删除日志]]中记录。 @@ -1492,6 +1517,17 @@ $1", 'filetype-banned-type' => "'''\".\$1\"'''是一种不准许的文件类型。 容许的{{PLURAL:\$3|一种|多种}}文件类型有\$2。", 'filetype-missing' => '该文件名称并没有扩展名(例如“.jpg”)。', +'empty-file' => '您所提交的文件为空文件。', +'file-too-large' => '您所提交的文件过大。', +'filename-tooshort' => '文件名过短。', +'filetype-banned' => '此类文件被禁止。', +'verification-error' => '文件未通过验证。', +'hookaborted' => '您所尝试的修改被插件钩子舍弃。', +'illegal-filename' => '文件名非法。', +'overwrite' => '不允许覆盖现有文件。', +'unknown-error' => '发生未知错误。', +'tmp-create-error' => '无法创建临时文件。', +'tmp-write-error' => '临时文件写入发生错误。', 'large-file' => '建议文件大小不能超过 $1;本文件大小为 $2。', 'largefileserver' => '这个文件的大小比服务器配置允许的大小还要大。', 'emptyfile' => '您所上传的文件不存在。这可能是由于文件名键入错误。请检查您是否真的要上传此文件。', @@ -1514,13 +1550,14 @@ $1", 如果你仍然想去上传它的话,请返回并用一个新的名称来上传此文件。[[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => '这个文件与以下{{PLURAL:$1|一|多}}个文件重复:', 'file-deleted-duplicate' => '一个相同名称的文件 ([[:$1]]) 在先前删除过。您应该在重新上传之前检查一下该文件之删除纪录。', -'successfulupload' => '上传成功', 'uploadwarning' => '上传警告', 'uploadwarning-text' => '请修改以下的文件描述并重试。', 'savefile' => '保存文件', 'uploadedimage' => '已上传“[[$1]]”', 'overwroteimage' => '已上传“[[$1]]”的新版本', 'uploaddisabled' => '上传己停用。', +'copyuploaddisabled' => '通过网址上传功能未开通。', +'uploadfromurl-queued' => '上传已被列入队列。', 'uploaddisabledtext' => '文件上传不可用。', 'php-uploaddisabledtext' => 'PHP 文件上传已经停用。请检查 file_uploads 设置。', 'uploadscripted' => '该文件包含可能被网络浏览器错误解释的 HTML 或脚本代码。', @@ -1540,6 +1577,14 @@ $1", 您应该要考虑一下继续上传一个文件页面是否合适。 为方便起见,这一个文件的删除记录已经在下面提供:", 'filename-bad-prefix' => '您上传的文件名称是以“$1”作为开头,通常这种没有含意的文件名称是由数码相机中自动编排。请在您的文件中重新选择一个更加有意义的文件名称。', +'upload-success-subj' => '上传成功', +'upload-success-msg' => '您在[$2]的上传已经成功,可以在这里找到:[[:{{ns:file}}:$1]]', +'upload-failure-subj' => '上传问题', +'upload-failure-msg' => '您在[$2]的上传出现了问题: + +$1', +'upload-warning-subj' => '上传警告', +'upload-warning-msg' => '您自[$2]的上传出错。您可以返回[[Special:Upload/stash/$1|上传表单]]并更正问题。', 'upload-proto-error' => '协议错误', 'upload-proto-error-text' => '远程上传要求 URL 以 http://ftp:// 开头。', @@ -1594,6 +1639,7 @@ $1", 'listfiles_search_for' => '按媒体名称搜索:', 'imgfile' => '文件', 'listfiles' => '文件列表', +'listfiles_thumb' => '缩略图', 'listfiles_date' => '日期', 'listfiles_name' => '名称', 'listfiles_user' => '用户', @@ -1708,8 +1754,8 @@ $1", 'statistics-edits' => '自从{{SITENAME}}设置的页面编辑数', 'statistics-edits-average' => '每一页面的平均编辑数', 'statistics-views-total' => '查看总数', +'statistics-views-total-desc' => '不存在页面和特殊页面的查看数未计入', 'statistics-views-peredit' => '每次编辑查看数', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue 工作队列]长度', 'statistics-users' => '已注册[[Special:ListUsers|用户]]', 'statistics-users-active' => '活跃用户', 'statistics-users-active-desc' => '在前$1天中操作过的用户', @@ -1726,7 +1772,7 @@ Template:消除歧義', 'disambiguations-text' => '以下的页面都有到消歧义页的链接, 但它们应该是链到适当的标题。
    一个页面会被视为消歧义页如果它是链自[[MediaWiki:Disambiguationspage]]。', 'doubleredirects' => '双重重定向页面', -'doubleredirectstext' => '此页列出了所有重定向到另一重定向页面的页面。每一行都包含有到第一和第二个重定向页面的链接,以及第二个重定向页面的目标——通常就是“真正的”目标页面,亦即是第一个重定向页面应该指向的页面。已划去的为已经解决的项目。', +'doubleredirectstext' => '此页列出了所有重定向到另一重定向页面的页面。每一行都包含有到第一和第二个重定向页面的链接,以及第二个重定向页面的目标——通常就是“真正的”目标页面,亦即是第一个重定向页面应该指向的页面。已划去的为已经解决的项目。', 'double-redirect-fixed-move' => '[[$1]]已经完成移动,它现在重定向到[[$2]]。', 'double-redirect-fixer' => '重定向修正器', @@ -1749,6 +1795,8 @@ Template:消除歧義', 'nmembers' => '$1个成员', 'nrevisions' => '$1个修订', 'nviews' => '$1次浏览', +'nimagelinks' => '用于$1个页面中', +'ntransclusions' => '用于$1个页面中', 'specialpage-empty' => '这个报告的结果为空。', 'lonelypages' => '孤立页面', 'lonelypagestext' => '以下页面尚未被{{SITENAME}}中的其它页面链接或被之包含。', @@ -1906,36 +1954,42 @@ Template:消除歧義', 'listgrouprights-removegroup-self-all' => '在自己的账户中移除所有群组', # E-mail user -'mailnologin' => '无电邮地址', -'mailnologintext' => '您必须先[[Special:UserLogin|登录]] +'mailnologin' => '无电邮地址', +'mailnologintext' => '您必须先[[Special:UserLogin|登录]] 并在[[Special:Preferences|参数设置]] 中有一个有效的电子邮箱地址才可以向其他用户发邮件。', -'emailuser' => '向该用户发邮件', -'emailpage' => '向用户发邮件', -'emailpagetext' => '您可以用下面的表格去寄一封电邮给这位用户。 +'emailuser' => '向该用户发邮件', +'emailpage' => '向用户发邮件', +'emailpagetext' => '您可以用下面的表格去寄一封电邮给这位用户。 您在[[Special:Preferences|您参数设置]]中所输入的电子邮箱地址将出现在邮件"发件人"一栏中,这样该用户就可以回复您。', -'usermailererror' => 'Mail 对象返回错误:', -'defemailsubject' => '{{SITENAME}}电子邮件', -'noemailtitle' => '无电子邮件地址', -'noemailtext' => '该用户还没有指定一个有效的电子邮件地址。', -'nowikiemailtitle' => '不容许电子邮件', -'nowikiemailtext' => '这位用户选择不接收其他用户的电子邮件。', -'email-legend' => '发一封电子邮件至另一位{{SITENAME}}用户', -'emailfrom' => '发件人:', -'emailto' => '收件人:', -'emailsubject' => '主题:', -'emailmessage' => '信息:', -'emailsend' => '发送', -'emailccme' => '将我的消息的副本发送一份到我的邮箱。', -'emailccsubject' => '将您的消息复制到 $1:$2', -'emailsent' => '电子邮件已发送', -'emailsenttext' => '您的电子邮件已经发出。', -'emailuserfooter' => '这封电邮是由$1寄给$2经{{SITENAME}}的“电邮用户”功能发出的。', +'usermailererror' => 'Mail 对象返回错误:', +'defemailsubject' => '{{SITENAME}}电子邮件', +'usermaildisabled' => '用户电邮已停用', +'usermaildisabledtext' => '您不可以发送电邮到这个wiki上的其他用户', +'noemailtitle' => '无电子邮件地址', +'noemailtext' => '该用户还没有指定一个有效的电子邮件地址。', +'nowikiemailtitle' => '不容许电子邮件', +'nowikiemailtext' => '这位用户选择不接收其他用户的电子邮件。', +'email-legend' => '发一封电子邮件至另一位{{SITENAME}}用户', +'emailfrom' => '发件人:', +'emailto' => '收件人:', +'emailsubject' => '主题:', +'emailmessage' => '信息:', +'emailsend' => '发送', +'emailccme' => '将我的消息的副本发送一份到我的邮箱。', +'emailccsubject' => '将您的消息复制到 $1:$2', +'emailsent' => '电子邮件已发送', +'emailsenttext' => '您的电子邮件已经发出。', +'emailuserfooter' => '这封电邮是由$1寄给$2经{{SITENAME}}的“电邮用户”功能发出的。', + +# User Messenger +'usermessage-summary' => '留下系统信息。', +'usermessage-editor' => '系统界面', # Watchlist 'watchlist' => '监视列表', 'mywatchlist' => '监视列表', -'watchlistfor' => "('''$1'''的监视列表')", +'watchlistfor2' => '$1的监视列表 $2', 'nowatchlist' => '您的监视列表为空。', 'watchlistanontext' => '请$1以查看或编辑您的监视列表。', 'watchnologin' => '未登录', @@ -2050,7 +2104,10 @@ $UNWATCHURL 'revertpage-nouser' => '恢复由(移除了的用户名)的编辑到[[User:$1|$1]]的最后一个修订版本', 'rollback-success' => '已恢复$1的编辑; 更改回$2的最后修订版本。', -'sessionfailure' => '似乎您的登录会话有问题; + +# Edit tokens +'sessionfailure-title' => '登录信息失败', +'sessionfailure' => '似乎您的登录会话有问题; 为了防止会话劫持,这个操作已经被取消。 请返回先前的页面,重新载入该页面,然后重试。', @@ -2174,19 +2231,23 @@ $1', 'month' => '从该月份 (或更早):', 'year' => '从该年份 (或更早):', -'sp-contributions-newbies' => '只显示新创建之用户的贡献', -'sp-contributions-newbies-sub' => '新手', -'sp-contributions-newbies-title' => '新手的用户贡献', -'sp-contributions-blocklog' => '封禁日志', -'sp-contributions-deleted' => '已删除的用户贡献', -'sp-contributions-logs' => '日志', -'sp-contributions-talk' => '讨论', -'sp-contributions-userrights' => '用户权限管理', -'sp-contributions-blocked-notice' => '这位用户现时正在被封锁中。 +'sp-contributions-newbies' => '只显示新创建之用户的贡献', +'sp-contributions-newbies-sub' => '新手', +'sp-contributions-newbies-title' => '新手的用户贡献', +'sp-contributions-blocklog' => '封禁日志', +'sp-contributions-deleted' => '已删除的用户贡献', +'sp-contributions-uploads' => '上载', +'sp-contributions-logs' => '日志', +'sp-contributions-talk' => '讨论', +'sp-contributions-userrights' => '用户权限管理', +'sp-contributions-blocked-notice' => '这位用户现时正在被封锁中。 最近的封锁日志项目在下面提供以便参考:', -'sp-contributions-search' => '搜索贡献记录', -'sp-contributions-username' => 'IP地址或用户名称:', -'sp-contributions-submit' => '搜索', +'sp-contributions-blocked-notice-anon' => '这个IP地址现时正在被封锁中。 +最近的封锁日志项目在下面提供以便参考:', +'sp-contributions-search' => '搜索贡献记录', +'sp-contributions-username' => 'IP地址或用户名称:', +'sp-contributions-toponly' => '只显示最新修订版本的编辑', +'sp-contributions-submit' => '搜索', # What links here 'whatlinkshere' => '链入页面', @@ -2247,7 +2308,6 @@ $1', 'ipb-edit-dropdown' => '编辑封禁理由', 'ipb-unblock-addr' => '解封$1', 'ipb-unblock' => '解封用户名或IP地址', -'ipb-blocklist-addr' => '$1的现有封禁', 'ipb-blocklist' => '查看现有封禁', 'ipb-blocklist-contribs' => '$1的贡献', 'unblockip' => '解封用户', @@ -2316,6 +2376,8 @@ $1已被封禁。您是否想更改封禁设置?', 'cant-block-while-blocked' => '您无法在封禁期内封禁其他用户。', 'cant-see-hidden-user' => '您尝试封禁的用户已被封禁并隐藏。 由于您尚无隐藏用户的权限,您无法查看或编辑此用户的封禁。', +'ipbblocked' => '您无法封禁或解封其他用户,因为您自己已被封禁', +'ipbnounblockself' => '您无法自我解除封禁', # Developer tools 'lockdb' => '锁定数据库', @@ -2351,6 +2413,19 @@ $1已被封禁。您是否想更改封禁设置?', '''警告!''' 对一个经常被访问的页面而言这可能是一个重大与唐突的更改; 请在行动前先了解其所可能带来的后果。", +'movepagetext-noredirectfixer' => "用下面的表单来重命名一个页面,并将其修订历史同时移动到新页面。 +老的页面将成为新页面的重定向页。 +请检查[[Special:DoubleRedirects|双重重定向]]或[[Special:BrokenRedirects|损坏重定向]]链接。 +您应当负责确定所有链接依然会链到指定的页面。 + +注意如果新页面已经有内容的话,页面将'''不会'''被移动, +除非新页面无内容或是重定向页,而且没有修订历史。 +这意味着您再必要时可以在移动到新页面后再移回老的页面, +同时您也无法覆盖现有页面。 + +'''警告!''' +对一个经常被访问的页面而言这可能是一个重大与唐突的更改; +请在行动前先确定您了解其所可能带来的后果。", 'movepagetalktext' => "有关的讨论页将被自动与该页面一起移动,'''除非''': *新页面已经有一个包含内容的讨论页,或者 *您不勾选下面的复选框。 @@ -2406,6 +2481,7 @@ $1已被封禁。您是否想更改封禁设置?', 'immobile-source-page' => '此页面不能移动。', 'immobile-target-page' => '无法移动至该目标标题。', 'imagenocrossnamespace' => '无法将文件移动到非文件名字空间', +'nonfile-cannot-move-to-file' => '无法将非文件移动到文件名字空间', 'imagetypemismatch' => '该新扩展名与其类型不匹配', 'imageinvalidfilename' => '目标文件名称无效', 'fix-double-redirects' => '更新所有指向原始标题的重定向', @@ -2485,6 +2561,7 @@ $1已被封禁。您是否想更改封禁设置?', 'importstart' => '页面导入中……', 'import-revision-count' => '$1个修订', 'importnopages' => '没有导入的页面。', +'imported-log-entries' => '导入了$1项日志记录。', 'importfailed' => '导入失败:$1', 'importunknownsource' => '未知的源导入类型', 'importcantopen' => '无法打开导入文件', @@ -2577,6 +2654,8 @@ $1已被封禁。您是否想更改封禁设置?', 'tooltip-upload' => '开始上传', 'tooltip-rollback' => '“回退”单击恢复上一位贡献者对此页面作出的编辑', 'tooltip-undo' => '“撤销”可以恢复该编辑并在预览模式下打开编辑表单。它允许在摘要中加入原因。', +'tooltip-preferences-save' => '保存设定', +'tooltip-summary' => '输入一个简短的摘要', # Stylesheets 'common.css' => '/* 此处的 CSS 将应用于所有的皮肤 */', @@ -2704,14 +2783,17 @@ $1', 'imagemaxsize' => "图像大小限制:
    ''(用于文件描述页面)''", 'thumbsize' => '缩略图大小:', 'widthheightpage' => '$1×$2,$3页', -'file-info' => '(文件大小:$1,MIME类型:$2)', -'file-info-size' => '($1×$2像素,文件大小:$3,MIME类型:$4)', +'file-info' => '文件大小:$1,MIME类型:$2', +'file-info-size' => '$1×$2像素,文件大小:$3,MIME类型:$4', 'file-nohires' => '无更高分辨率可提供。', -'svg-long-desc' => '(SVG文件,名义大小:$1×$2像素,文件大小:$3)', +'svg-long-desc' => 'SVG文件,名义大小:$1×$2像素,文件大小:$3', 'show-big-image' => '完整分辨率', 'show-big-image-thumb' => '这幅缩略图的分辨率:$1×$2像素', 'file-info-gif-looped' => '循环', 'file-info-gif-frames' => '$1帧', +'file-info-png-looped' => '循环', +'file-info-png-repeat' => '已播放$1遍', +'file-info-png-frames' => '$1帧', # Special:NewFiles 'newimages' => '新文件画廊', @@ -2887,6 +2969,7 @@ Variants for Chinese language 'exif-gpsareainformation' => 'GPS区域名称', 'exif-gpsdatestamp' => 'GPS日期', 'exif-gpsdifferential' => 'GPS差动修正', +'exif-objectname' => '简称', # EXIF attributes 'exif-compression-1' => '未压缩', @@ -3047,26 +3130,26 @@ Variants for Chinese language 'limitall' => '全部', # E-mail address confirmation -'confirmemail' => '确认邮箱地址', -'confirmemail_noemail' => '您还没有在您的[[Special:Preferences|参数设置]]中设定一个有效的电子邮件地址。', -'confirmemail_text' => '{{SITENAME}}要求您在使用邮件功能之前验证您的邮箱地址。 +'confirmemail' => '确认邮箱地址', +'confirmemail_noemail' => '您还没有在您的[[Special:Preferences|参数设置]]中设定一个有效的电子邮件地址。', +'confirmemail_text' => '{{SITENAME}}要求您在使用邮件功能之前验证您的邮箱地址。 点击以下按钮可向您的邮箱发送一封确认邮件。该邮件包含有一行代码链接; 请在您的浏览器中加载此链接以确认您的邮箱地址是有效的。', -'confirmemail_pending' => '一个确认码已经被发送到您的邮箱,您可能需要等几分钟才能收到。如果无法收到,请再申请一个新的确认码。', -'confirmemail_send' => '邮件发送确认代码', -'confirmemail_sent' => '确认邮件已发送。', -'confirmemail_oncreate' => '一个确认代码已经被发送到您的邮箱。登录时无需使用该代码, +'confirmemail_pending' => '一个确认码已经被发送到您的邮箱,您可能需要等几分钟才能收到。如果无法收到,请再申请一个新的确认码。', +'confirmemail_send' => '邮件发送确认代码', +'confirmemail_sent' => '确认邮件已发送。', +'confirmemail_oncreate' => '一个确认代码已经被发送到您的邮箱。登录时无需使用该代码, 但若要启用在此维基的电子邮件相关功能,则必须先提交此代码。', -'confirmemail_sendfailed' => '{{SITENAME}}不能发送确认邮件,请检查您的邮箱地址是否包含无效字符。 +'confirmemail_sendfailed' => '{{SITENAME}}不能发送确认邮件,请检查您的邮箱地址是否包含无效字符。 邮件发送器的返回信息:$1', -'confirmemail_invalid' => '无效的确认码,该代码可能已经过期。', -'confirmemail_needlogin' => '您需要$1以确认您的邮箱地址。', -'confirmemail_success' => '您的邮箱已经被确认。您现在可以[[Special:UserLogin|登录]]并使用此网站了。', -'confirmemail_loggedin' => '您的邮箱地址现在已被确认。', -'confirmemail_error' => '你的确认过程发生错误。', -'confirmemail_subject' => '{{SITENAME}}邮箱地址确认', -'confirmemail_body' => '来自IP地址$1的用户(可能是您)在{{SITENAME}}上创建了账户“$2”,并提交了您 +'confirmemail_invalid' => '无效的确认码,该代码可能已经过期。', +'confirmemail_needlogin' => '您需要$1以确认您的邮箱地址。', +'confirmemail_success' => '您的邮箱已经被确认。您现在可以[[Special:UserLogin|登录]]并使用此网站了。', +'confirmemail_loggedin' => '您的邮箱地址现在已被确认。', +'confirmemail_error' => '你的确认过程发生错误。', +'confirmemail_subject' => '{{SITENAME}}邮箱地址确认', +'confirmemail_body' => '来自IP地址$1的用户(可能是您)在{{SITENAME}}上创建了账户“$2”,并提交了您 的电子邮箱地址。 请确认这个账户是属于您的,并同时激活在{{SITENAME}}上的电子邮件功能。请在浏 @@ -3079,8 +3162,33 @@ $3 $5 确认码会在$4过期。', -'confirmemail_invalidated' => '电邮地址确认已取消', -'invalidateemail' => '取消电邮确认', +'confirmemail_body_changed' => '拥有IP地址$1的用户(可能是您)在{{SITENAME}}更改了账户“$2”的电子邮箱地址。 + +请确认这个账户是属于您的,并同时重新激活在{{SITENAME}}上的电子邮件功能。请 +在浏览器中打开下面的链接: + +$3 + +如果这个账户*不是*属于您的,请打开下面的链接去取消电子邮件确认: + +$5 + +确认码会在$4过期。', +'confirmemail_body_set' => '拥有IP地址$1的用户(可能是您)在{{SITENAME}}将账户“$2”的电子邮箱地址设置 +到了这个电子邮件地址。 + +请确认这个账户是属于您的,并同时重新激活在{{SITENAME}}上的电子邮件功能。请 +在浏览器中打开下面的链接: + +$3 + +如果这个账户*不是*属于您的,请打开下面的链接去取消电子邮件确认: + +$5 + +确认码会在$4过期。', +'confirmemail_invalidated' => '电邮地址确认已取消', +'invalidateemail' => '取消电邮确认', # Scary transclusion 'scarytranscludedisabled' => '[跨网站的编码转换不可用]', @@ -3125,6 +3233,7 @@ $1', 'table_pager_first' => '第一页', 'table_pager_last' => '末一页', 'table_pager_limit' => '每页显示$1项', +'table_pager_limit_label' => '每页项目数:', 'table_pager_limit_submit' => '到', 'table_pager_empty' => '没有结果', @@ -3183,6 +3292,7 @@ $1', 'version-specialpages' => '特殊页面', 'version-parserhooks' => '解析器钩', 'version-variables' => '变量', +'version-skins' => '皮肤', 'version-other' => '其他', 'version-mediahandlers' => '媒体处理器', 'version-hooks' => '钩', @@ -3194,6 +3304,13 @@ $1', 'version-hook-subscribedby' => '署名', 'version-version' => '(版本$1)', 'version-license' => '授权', +'version-poweredby-credits' => "本Wiki由'''[http://www.mediawiki.org/ MediaWiki]'''驱动,版权所有 © 2001-$1 $2。", +'version-poweredby-others' => '其他', +'version-license-info' => 'MediaWiki为自由软件;您可依据自由软件基金会所发表的GNU通用公共授权条款规定,就本程序再为发布与/或修改;无论您依据的是本授权的第二版或(您自行选择的)任一日后发行的版本。 + +MediaWiki是基于使用目的而加以发布,然而不负任何担保责任;亦无对适售性或特定目的适用性所为的默示性担保。详情请参照GNU通用公共授权。 + +您应已收到附随于本程序的[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU通用公共授权的副本];如果没有,请写信至自由软件基金会:51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或[http://www.gnu.org/licenses/old-licenses/gpl-2.0.html 在线阅读]。', 'version-software' => '已安装软件', 'version-software-product' => '产品', 'version-software-version' => '版本', @@ -3263,6 +3380,15 @@ $1', 'tags-edit' => '编辑', 'tags-hitcount' => '$1次更改', +# Special:ComparePages +'comparepages' => '比较页面', +'compare-selector' => '比较页面的修订', +'compare-page1' => '第1页', +'compare-page2' => '第2页', +'compare-rev1' => '修订版本1', +'compare-rev2' => '修订版本2', +'compare-submit' => '比较', + # Database error messages 'dberr-header' => '本wiki出现了问题', 'dberr-problems' => '抱歉! @@ -3280,8 +3406,13 @@ $1', 'htmlform-float-invalid' => '您指定的值不是数字。', 'htmlform-int-toolow' => '您指定的值小于最小值$1', 'htmlform-int-toohigh' => '您指定的值大于最大值$1', +'htmlform-required' => '本值必填', 'htmlform-submit' => '提交', 'htmlform-reset' => '撤销更改', 'htmlform-selectorother-other' => '其他', +# SQLite database support +'sqlite-has-fts' => '带全文搜索的版本$1', +'sqlite-no-fts' => '不带全文搜索的版本$1', + ); diff --git a/languages/messages/MessagesZh_hant.php b/languages/messages/MessagesZh_hant.php index 1e3a3fb4..2e81b68a 100644 --- a/languages/messages/MessagesZh_hant.php +++ b/languages/messages/MessagesZh_hant.php @@ -8,8 +8,10 @@ * @file * * @author Alexsh + * @author Andrew971218 * @author Bencmq * @author FireJackey + * @author Frankou * @author Gaoxuewei * @author Hakka * @author Horacewai2 @@ -62,7 +64,7 @@ $namespaceAliases = array( "用戶對話" => NS_USER_TALK, "用戶討論" => NS_USER_TALK, # This has never worked so it's unlikely to annoy anyone if I disable it -- TS - #"{{SITENAME}}_對話" => NS_PROJECT_TALK + # "{{SITENAME}}_對話" => NS_PROJECT_TALK "圖像" => NS_FILE, "檔案" => NS_FILE, "文件" => NS_FILE, @@ -133,6 +135,7 @@ $specialPageAliases = array( 'Allpages' => array( '所有頁面' ), 'Prefixindex' => array( '前綴索引' ), 'Ipblocklist' => array( '封禁列表' ), + 'Unblock' => array( '解除封禁' ), 'Specialpages' => array( '特殊頁面' ), 'Contributions' => array( '用戶貢獻' ), 'Emailuser' => array( '電郵用戶' ), @@ -177,6 +180,8 @@ $specialPageAliases = array( 'DeletedContributions' => array( '已刪除的用戶貢獻' ), 'Tags' => array( '標籤' ), 'Activeusers' => array( '活躍用戶' ), + 'ComparePages' => array( '頁面比較' ), + 'Badtitle' => array( '不好的標題' ), ); $bookstoreList = array( @@ -202,8 +207,7 @@ $messages = array( 'tog-editsection' => '允許通過點擊[編輯]連結編輯段落', 'tog-editsectiononrightclick' => '允許右擊標題編輯段落 (需要JavaScript)', 'tog-showtoc' => '顯示目錄 (針對一頁超過3個標題的頁面)', -'tog-rememberpassword' => '在這部電腦上記住我的密碼', -'tog-editwidth' => '加寬編輯欄位到整個螢光幕', +'tog-rememberpassword' => '在這個瀏覽器上記住我的登入資訊(可維持 $1 {{PLURAL:$1|天|天}})', 'tog-watchcreations' => '將我建立的頁面添加到我的監視列表中', 'tog-watchdefault' => '將我更改的頁面添加到我的監視列表中', 'tog-watchmoves' => '將我移動的頁面加入我的監視列表', @@ -349,31 +353,21 @@ $messages = array( 'faqpage' => 'Project:常見問題解答', # Vector skin -'vector-action-addsection' => '加入主題', -'vector-action-delete' => '刪除', -'vector-action-move' => '移動', -'vector-action-protect' => '保護', -'vector-action-undelete' => '恢復被刪頁面', -'vector-action-unprotect' => '解除保護', -'vector-namespace-category' => '分類', -'vector-namespace-help' => '幫助頁面', -'vector-namespace-image' => '檔案', -'vector-namespace-main' => '頁面', -'vector-namespace-media' => '媒體頁面', -'vector-namespace-mediawiki' => '訊息', -'vector-namespace-project' => '計劃頁面', -'vector-namespace-special' => '特殊頁面', -'vector-namespace-talk' => '討論', -'vector-namespace-template' => '模板', -'vector-namespace-user' => '用戶頁面', -'vector-view-create' => '建立', -'vector-view-edit' => '編輯', -'vector-view-history' => '檢視歷史', -'vector-view-view' => '閱讀', -'vector-view-viewsource' => '檢視原始碼', -'actions' => '動作', -'namespaces' => '名字空間', -'variants' => '變換', +'vector-action-addsection' => '加入主題', +'vector-action-delete' => '刪除', +'vector-action-move' => '移動', +'vector-action-protect' => '保護', +'vector-action-undelete' => '恢復被刪頁面', +'vector-action-unprotect' => '解除保護', +'vector-simplesearch-preference' => '啟用加強搜尋建議(僅限 Vector 外觀)', +'vector-view-create' => '建立', +'vector-view-edit' => '編輯', +'vector-view-history' => '檢視歷史', +'vector-view-view' => '閱讀', +'vector-view-viewsource' => '檢視原始碼', +'actions' => '動作', +'namespaces' => '名字空間', +'variants' => '變換', 'errorpagetitle' => '錯誤', 'returnto' => '返回到$1。', @@ -434,6 +428,9 @@ $messages = array( 在嘗試訪問這個頁面之前請再稍等一會。 $1', +'pool-timeout' => '等待鎖死時超時', +'pool-queuefull' => '請求池已滿', +'pool-errorunknown' => '未知錯誤', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). 'aboutsite' => '關於 {{SITENAME}}', @@ -595,7 +592,8 @@ $2', 'yourname' => '您的使用者名稱:', 'yourpassword' => '您的密碼:', 'yourpasswordagain' => '再次輸入密碼:', -'remembermypassword' => '下次登入記住密碼。', +'remembermypassword' => '在這個瀏覽器上記住我的登入資訊(可維持 $1 {{PLURAL:$1|天|天}})', +'securelogin-stick-https' => '登入後繼續以HTTPS連接', 'yourdomainname' => '您的網域:', 'externaldberror' => '這可能是由於驗證資料庫錯誤或您被禁止更新您的外部賬號。', 'login' => '登入', @@ -612,6 +610,7 @@ $2', 'gotaccount' => '已經擁有帳號?$1。', 'gotaccountlink' => '登入', 'createaccountmail' => '通過電郵', +'createaccountreason' => '理由:', 'badretype' => '您所輸入的密碼並不相同。', 'userexists' => '您所輸入的用戶名稱已經存在,請另選一個名稱。', 'loginerror' => '登入錯誤', @@ -631,6 +630,7 @@ $2', 'wrongpasswordempty' => '沒有輸入密碼!請重試。', 'passwordtooshort' => '您的密碼不能少於$1個字元。', 'password-name-match' => '您的密碼必須跟您的用戶名不相同。', +'password-login-forbidden' => '這個用戶名稱及密碼的使用是被禁止的。', 'mailmypassword' => '將新密碼寄給我', 'passwordremindertitle' => '{{SITENAME}}的新臨時密碼', 'passwordremindertext' => '有人(可能是您,來自IP位址$1)已請求{{SITENAME}}的新密碼 ($4)。 @@ -667,6 +667,9 @@ $2', 'loginlanguagelabel' => '語言: $1', 'suspicious-userlogout' => '您登出的要求已經被拒絕,因為它可能是由已損壞的瀏覽器或者快取代理傳送。', +# E-mail sending +'php-mail-error-unknown' => '在 PHP 的 mail() 參數中的未知錯誤', + # Password reset dialog 'resetpass' => '更改密碼', 'resetpass_announce' => '您是透過一個臨時的發送到郵件中的代碼登入的。要完成登入,您必須在這裡設定一個新密碼:', @@ -718,9 +721,10 @@ $2', 'showdiff' => '顯示差異', 'anoneditwarning' => "'''警告:'''您沒有登入。 您的IP位址將記錄在此頁的編輯歷史中。", +'anonpreviewwarning' => "''您沒有登入。保存頁面將會把您的IP位址記錄在此頁的編輯歷史中。''", 'missingsummary' => "'''提示:''' 您沒有提供一個編輯摘要。如果您再次單擊「{{int:savearticle}}」,您的編輯將不帶編輯摘要儲存。", 'missingcommenttext' => '請在下面輸入評論。', -'missingcommentheader' => "'''提示:''' 您沒有為此評論提供一個標題。如果您再次單擊儲存,您的編輯將不帶標題儲存。", +'missingcommentheader' => "'''提示:''' 您沒有為此評論提供一個標題。如果您再次單擊「{{int:savearticle}}」,您的編輯將不帶標題儲存。", 'summary-preview' => '摘要預覽:', 'subject-preview' => '主題/標題預覽:', 'blockedtitle' => '用戶被查封', @@ -790,7 +794,11 @@ $2', '''還沒有儲存﹗'''", 'userjspreview' => "'''記住您只是在測試/預覽您的個人 JavaScript。''' '''還沒有儲存﹗'''", -'userinvalidcssjstitle' => "'''警告:''' 不存在面板\"\$1\"。注意自訂的 .css 和 .js 頁要使用小寫標題,例如,{{ns:user}}:Foo/monobook.css 不同於 {{ns:user}}:Foo/Monobook.css。", +'sitecsspreview' => "'''記住你現在只是預覽此 CSS。''' +'''還沒有儲存!'''", +'sitejspreview' => "'''記住你現在只是預覽此 JavaScript 代碼。''' +'''還沒有儲存!'''", +'userinvalidcssjstitle' => "'''警告:''' 不存在面板\"\$1\"。注意自訂的 .css 和 .js 頁要使用小寫標題,例如,{{ns:user}}:Foo/vector.css 不同於 {{ns:user}}:Foo/Vector.css。", 'updated' => '(已更新)', 'note' => "'''注意:'''", 'previewnote' => "'''請記住這只是預覽,內容尚未儲存!'''", @@ -829,7 +837,6 @@ $2', 如果您不希望您的文字被任意修改和再散佈,請不要提交。
    您同時也要向我們保證您所提交的內容是您自己所作,或得自一個不受版權保護或相似自由的來源(參閱$1的細節)。 '''不要在未獲授權的情況下發表!'''", -'longpagewarning' => "'''警告''': 本頁長度達$1KB;一些瀏覽器將無法編輯長過32KB頁面。請考慮將本文切割成幾個小段落。", 'longpageerror' => "'''錯誤: 您所提交的文字長度有$1KB,這大於$2KB的最大值。'''該文本不能被儲存。", 'readonlywarning' => "'''警告: 資料庫被鎖定以進行維護,所以您目前將無法保存您的修改。'''您或許希望先將本段文字複製並保存到文字文件,然後等一會兒再修改。 @@ -931,7 +938,7 @@ $2', 嘗試[[Special:Search|搜索本站]]獲得相關的新建頁面。', # Revision deletion -'rev-deleted-comment' => '(註釋已除)', +'rev-deleted-comment' => '(編輯摘要已除)', 'rev-deleted-user' => '(用戶名已移除)', 'rev-deleted-event' => '(日誌已除)', 'rev-deleted-user-contribs' => '[用戶名或IP地址已移除 - 從貢獻中隱藏編輯]', @@ -1004,6 +1011,8 @@ $1", 'logdelete-failure' => "'''事件的可見性無法設定:''' $1", 'revdel-restore' => '更改可見性', +'revdel-restore-deleted' => '已刪除的修訂版本', +'revdel-restore-visible' => '可見的修訂版本', 'pagehist' => '頁面歷史', 'deletedhist' => '已刪除之歷史', 'revdelete-content' => '內容', @@ -1067,11 +1076,13 @@ $1", # Diffs 'history-title' => '「$1」的修訂歷史', 'difference' => '(修訂版本間的差異)', +'difference-multipage' => '(頁面間的差異)', 'lineno' => '第$1行:', 'compareselectedversions' => '比較選定的修訂版本', 'showhideselectedversions' => '顯示/隱藏選定的修訂版本', 'editundo' => '撤銷', -'diff-multi' => '($1個中途的修訂版本沒有顯示)', +'diff-multi' => '(由{{PLURAL:$2|1名用戶|$2名用戶}}作出的{{PLURAL:$1|一個中途修訂版本|$1個中途修訂版本}}未被顯示)', +'diff-multi-manyusers' => '(由多於$2名用戶作出的{{PLURAL:$1|一個中途修訂版本|$1個中途修訂版本}} 未被顯示)', # Search results 'searchresults' => '搜尋結果', @@ -1106,6 +1117,7 @@ $1", 'searchprofile-everything-tooltip' => '搜尋全部(包括討論頁面)', 'searchprofile-advanced-tooltip' => '在自定名字空間中度搜尋', 'search-result-size' => '$1 ($2個字)', +'search-result-category-size' => '$1位成員($2個子分類,$3個檔案)', 'search-result-score' => '相關度: $1%', 'search-redirect' => '(重定向 $1)', 'search-section' => '(段落 $1)', @@ -1180,6 +1192,7 @@ $1", 'contextlines' => '每連結行數:', 'contextchars' => '每行字數:', 'stub-threshold' => '短頁面連結格式門檻值 (位元組):', +'stub-threshold-disabled' => '已停用', 'recentchangesdays' => '最近更改中的顯示日數:', 'recentchangesdays-max' => '最多 $1 {{PLURAL:$1|天|天}}', 'recentchangescount' => '預設顯示的編輯數:', @@ -1213,6 +1226,7 @@ $1", 'prefs-files' => '檔案', 'prefs-custom-css' => '自定CSS', 'prefs-custom-js' => '自定JavaScript', +'prefs-common-css-js' => '共用 CSS/JavaScript 於所有的外觀中:', 'prefs-reset-intro' => '您可以利用這個頁面去重設您的參數設置到網站預設值。這個動作無法復原。', 'prefs-emailconfirm-label' => '電子郵件確認:', 'prefs-textboxsize' => '編輯框大小', @@ -1249,9 +1263,15 @@ $1", 'prefs-advancedrendering' => '進階選項', 'prefs-advancedsearchoptions' => '進階選項', 'prefs-advancedwatchlist' => '進階選項', -'prefs-display' => '顯示選項', +'prefs-displayrc' => '顯示選項', +'prefs-displaysearchoptions' => '顯示選項', +'prefs-displaywatchlist' => '顯示選項', 'prefs-diffs' => '差異', +# User preference: e-mail validation using jQuery +'email-address-validity-valid' => '電子郵件地址有效', +'email-address-validity-invalid' => '請提供一個有效的電子郵件地址', + # User rights 'userrights' => '用戶權限管理', 'userrights-lookup-user' => '管理用戶群組', @@ -1335,6 +1355,7 @@ $1", 'right-hideuser' => '封鎖用戶名,對公眾隱藏', 'right-ipblock-exempt' => '繞過IP封鎖、自動封鎖以及範圍封鎖', 'right-proxyunbannable' => '繞過Proxy的自動封鎖', +'right-unblockself' => '自我解除封鎖', 'right-protect' => '更改保護等級以及編輯保護頁面', 'right-editprotected' => '編輯保護頁面(無連鎖保護)', 'right-editinterface' => '編輯用戶界面', @@ -1357,7 +1378,6 @@ $1", 'right-siteadmin' => '鎖定和解除鎖定資料庫', 'right-reset-passwords' => '重設其他用戶的密碼', 'right-override-export-depth' => '匯出含有五層深度連結頁面之頁面', -'right-versiondetail' => '顯示延伸軟件版本的資料', 'right-sendemail' => '發電子郵件給其他用戶', # User rights log @@ -1408,14 +1428,9 @@ $1", 'recentchanges-legend' => '最近更改選項', 'recentchangestext' => '跟蹤這個wiki上的最新更改。', 'recentchanges-feed-description' => '追蹤此訂閱在 wiki 上的最近更改。', -'recentchanges-label-legend' => '圖例: $1', -'recentchanges-legend-newpage' => '$1 - 新頁面', 'recentchanges-label-newpage' => '這次編輯建立了一個新頁面', -'recentchanges-legend-minor' => '$1 - 小編輯', 'recentchanges-label-minor' => '這是一個小編輯', -'recentchanges-legend-bot' => '$1 - 機器人編輯', 'recentchanges-label-bot' => '這次編輯是由機器人進行', -'recentchanges-legend-unpatrolled' => '$1 - 未巡查過的編輯', 'recentchanges-label-unpatrolled' => '這次編輯尚未巡查過', 'rcnote' => "以下是在$4 $5,最近 '''$2''' 天內的 '''$1''' 次最近更改記錄。", 'rcnotefrom' => "下面是自'''$2'''(最多顯示'''$1'''):", @@ -1463,6 +1478,9 @@ $1", 'upload_directory_missing' => '上傳目錄($1)遺失,不能由網頁伺服器建立。', 'upload_directory_read_only' => '上傳目錄($1)不存在或無寫權限。', 'uploaderror' => '上載錯誤', +'upload-recreate-warning' => "'''警告:一個相同名字的檔案曾經被刪除或者移動至別處。''' + +這個頁面的刪除和移動日誌在這裏提供以便參考:", 'uploadtext' => "使用下面的表單來上傳檔案。 要檢視或搜尋以前上傳的檔案,可以進入[[Special:FileList|檔案上傳清單]],(重新)上傳也將在[[Special:Log/upload|上傳日誌]]中記錄,而刪除將在[[Special:Log/delete|刪除日誌]]中記錄。 @@ -1497,6 +1515,17 @@ $1", 'filetype-banned-type' => "'''\".\$1\"'''是一種不准許的檔案類型。 容許的{{PLURAL:\$3|一種|多種}}檔案類型有\$2。", 'filetype-missing' => '該檔案名稱並沒有副檔名 (像 ".jpg")。', +'empty-file' => '您所提交的檔案為空檔案。', +'file-too-large' => '您所提交的檔案過大。', +'filename-tooshort' => '檔案名過短。', +'filetype-banned' => '此類檔案被禁止。', +'verification-error' => '檔案未通過驗證。', +'hookaborted' => '您所嘗試的修改被擴展鈎捨棄。', +'illegal-filename' => '檔案名非法。', +'overwrite' => '不允許覆蓋現有檔案。', +'unknown-error' => '發生未知錯誤。', +'tmp-create-error' => '無法建立臨時檔案。', +'tmp-write-error' => '臨時檔案寫入發生錯誤。', 'large-file' => '建議檔案大小不能超過 $1;本檔案大小為 $2。', 'largefileserver' => '這個檔案的大小比伺服器配置允許的大小還要大。', 'emptyfile' => '您所上傳的檔案不存在。這可能是由於檔案名鍵入錯誤。請檢查您是否真的要上傳此檔案。', @@ -1517,13 +1546,14 @@ $1", 如果{{GENDER:|你|妳|你}}仍然想去上載它的話,請返回並用一個新的名稱來上傳此檔案。[[File:$1|thumb|center|$1]]', 'file-exists-duplicate' => '這個檔案是跟以下的{{PLURAL:$1|一|多}}個檔案重覆:', 'file-deleted-duplicate' => '一個相同名稱的檔案 ([[:$1]]) 在先前刪除過。您應該在重新上傳之前檢查一下該檔案之刪除紀錄。', -'successfulupload' => '上傳成功', 'uploadwarning' => '上載警告', 'uploadwarning-text' => '請修改以下的檔案描述並重試。', 'savefile' => '保存檔案', 'uploadedimage' => '已上載「[[$1]]」', 'overwroteimage' => '已經上傳「[[$1]]」的新版本', 'uploaddisabled' => '上傳己停用。', +'copyuploaddisabled' => '通過網址上傳功能未開通。', +'uploadfromurl-queued' => '上傳已被列入隊列。', 'uploaddisabledtext' => '檔案上傳不可用。', 'php-uploaddisabledtext' => 'PHP 檔案上載已經停用。請檢查 file_uploads 設定。', 'uploadscripted' => '該檔案包含可能被網路瀏覽器錯誤解釋的 HTML 或腳本代碼。', @@ -1543,6 +1573,14 @@ $1", 您應該要考慮一下繼續上傳一個檔案頁面是否合適。 為方便起見,這一個檔案的刪除記錄已經在下面提供:", 'filename-bad-prefix' => "您上傳的檔案名稱是以'''「$1」'''作為開頭,通常這種沒有含意的檔案名稱是由數碼相機中自動編排。請在您的檔案中重新選擇一個更加有意義的檔案名稱。", +'upload-success-subj' => '上傳成功', +'upload-success-msg' => '您在[$2]的上传已经成功,可以在这里找到:[[:{{ns:file}}:$1]]', +'upload-failure-subj' => '上傳問題', +'upload-failure-msg' => '您在[$2]的上傳出現了問題: + +$1', +'upload-warning-subj' => '上傳警告', +'upload-warning-msg' => '您自[$2]的上傳出錯。您可以返回[[Special:Upload/stash/$1|上傳表單]]並更正問題。', 'upload-proto-error' => '協議錯誤', 'upload-proto-error-text' => '遠程上傳要求 URL 以 http://ftp:// 開頭。', @@ -1603,6 +1641,7 @@ $1", 'listfiles_search_for' => '按檔案名稱搜索:', 'imgfile' => '檔案', 'listfiles' => '檔案列表', +'listfiles_thumb' => '縮圖', 'listfiles_date' => '日期', 'listfiles_name' => '名稱', 'listfiles_user' => '用戶', @@ -1717,8 +1756,8 @@ $1", 'statistics-edits' => '自從{{SITENAME}}設定的頁面編輯數', 'statistics-edits-average' => '每一頁面的平均編輯數', 'statistics-views-total' => '檢視總數', +'statistics-views-total-desc' => '不存在頁面和特殊頁面的查看數未計入', 'statistics-views-peredit' => '每次編輯檢視數', -'statistics-jobqueue' => '[http://www.mediawiki.org/wiki/Manual:Job_queue 工作隊列]長度', 'statistics-users' => '已註冊[[Special:ListUsers|用戶]]', 'statistics-users-active' => '活躍用戶', 'statistics-users-active-desc' => '在前$1天中操作過的用戶', @@ -1735,8 +1774,8 @@ Template:消除歧義', 'disambiguations-text' => '以下的頁面都有到消含糊頁的連結,但它們應該是連到適當的標題。
    一個頁面會被視為消含糊頁如果它是連自[[MediaWiki:Disambiguationspage]]。', 'doubleredirects' => '雙重重定向頁面', -'doubleredirectstext' => '這一頁列出所有重定向頁面重定向到另一個重定向頁的頁面。每一行都包含到第一和第二個重定向頁面的鏈接,以及第二個重定向頁面的目標,通常顯示的都會是"真正"的目標頁面,也就是第一個重定向頁面應該指向的頁面。 -已劃去的為已經解決之項目。', +'doubleredirectstext' => '這一頁列出所有重定向頁面重定向到另一個重定向頁的頁面。每一行都包含到第一和第二個重定向頁面的連結,以及第二個重定向頁面的目標,通常顯示的都會是"真正"的目標頁面,也就是第一個重定向頁面應該指向的頁面。 +已劃去的為已經解決之項目。', 'double-redirect-fixed-move' => '[[$1]]已經完成移動,它現在重新定向到[[$2]]。', 'double-redirect-fixer' => '重新定向修正器', @@ -1759,6 +1798,8 @@ Template:消除歧義', 'nmembers' => '$1個成員', 'nrevisions' => '$1個修訂', 'nviews' => '$1次瀏覽', +'nimagelinks' => '用於$1個頁面中', +'ntransclusions' => '用於$1個頁面中', 'specialpage-empty' => '這個報告的結果為空。', 'lonelypages' => '孤立頁面', 'lonelypagestext' => '以下頁面尚未被{{SITENAME}}中的其它頁面連結或被之包含。', @@ -1914,36 +1955,42 @@ Template:消除歧義', 'listgrouprights-removegroup-self-all' => '在自己的賬戶中移除所有群組', # E-mail user -'mailnologin' => '無電郵地址', -'mailnologintext' => '您必須先[[Special:UserLogin|登入]] +'mailnologin' => '無電郵地址', +'mailnologintext' => '您必須先[[Special:UserLogin|登入]] 並在[[Special:Preferences|偏好設定]] 中有一個有效的 e-mail 地址才可以電郵其他用戶。', -'emailuser' => 'E-mail該用戶', -'emailpage' => 'E-mail用戶', -'emailpagetext' => '您可以用下面的表格去寄一封電郵給這位用戶。 +'emailuser' => 'E-mail該用戶', +'emailpage' => 'E-mail用戶', +'emailpagetext' => '您可以用下面的表格去寄一封電郵給這位用戶。 您在[[Special:Preferences|您參數設置]]中所輸入的e-mail地址將出現在郵件「發件人」一欄中,這樣該用戶就可以回覆您。', -'usermailererror' => '目標郵件地址返回錯誤:', -'defemailsubject' => '{{SITENAME}}電子郵件', -'noemailtitle' => '無e-mail地址', -'noemailtext' => '該用戶還沒有指定一個有效的e-mail地址。', -'nowikiemailtitle' => '不容許電子郵件', -'nowikiemailtext' => '這位用戶選擇不接收其他用戶的電子郵件。', -'email-legend' => '發一封電子郵件至另一位{{SITENAME}}用戶', -'emailfrom' => '發件人:', -'emailto' => '收件人:', -'emailsubject' => '主題:', -'emailmessage' => '訊息:', -'emailsend' => '發送', -'emailccme' => '將我的消息的副本發送一份到我的電郵信箱。', -'emailccsubject' => '將您的訊息複製到 $1: $2', -'emailsent' => '電子郵件已發送', -'emailsenttext' => '您的電子郵件已經發出。', -'emailuserfooter' => '這封電郵是由$1寄給$2經{{SITENAME}}的「電郵用戶」功能發出的。', +'usermailererror' => '目標郵件地址返回錯誤:', +'defemailsubject' => '{{SITENAME}}電子郵件', +'usermaildisabled' => '用戶電郵已停用', +'usermaildisabledtext' => '您不可以發送電郵到這個wiki上的其他用戶', +'noemailtitle' => '無e-mail地址', +'noemailtext' => '該用戶還沒有指定一個有效的e-mail地址。', +'nowikiemailtitle' => '不容許電子郵件', +'nowikiemailtext' => '這位用戶選擇不接收其他用戶的電子郵件。', +'email-legend' => '發一封電子郵件至另一位{{SITENAME}}用戶', +'emailfrom' => '發件人:', +'emailto' => '收件人:', +'emailsubject' => '主題:', +'emailmessage' => '訊息:', +'emailsend' => '發送', +'emailccme' => '將我的消息的副本發送一份到我的電郵信箱。', +'emailccsubject' => '將您的訊息複製到 $1: $2', +'emailsent' => '電子郵件已發送', +'emailsenttext' => '您的電子郵件已經發出。', +'emailuserfooter' => '這封電郵是由$1寄給$2經{{SITENAME}}的「電郵用戶」功能發出的。', + +# User Messenger +'usermessage-summary' => '給系統消息。', +'usermessage-editor' => '系統界面', # Watchlist 'watchlist' => '監視列表', 'mywatchlist' => '我的監視列表', -'watchlistfor' => "('''$1'''的監視列表)", +'watchlistfor2' => '$1的監視列表 $2', 'nowatchlist' => '您的監視列表為空。', 'watchlistanontext' => '請$1以檢視或編輯您的監視列表。', 'watchnologin' => '未登入', @@ -2059,7 +2106,10 @@ $UNWATCHURL 'revertpage-nouser' => '恢復由(移除了的用戶名)的編輯到[[User:$1|$1]]的最後一個修訂版本', 'rollback-success' => '已恢復$1的編輯; 更改回$2的最後修訂版本。', -'sessionfailure' => '似乎您的登錄會話有問題; + +# Edit tokens +'sessionfailure-title' => '登入資訊失敗', +'sessionfailure' => '似乎您的登錄會話有問題; 為了防止會話劫持,這個操作已經被取消。 請返回先前的頁面,重新載入該頁面,然後重試。', @@ -2186,19 +2236,23 @@ $1', 'month' => '從該月份 (或更早):', 'year' => '從該年份 (或更早):', -'sp-contributions-newbies' => '只顯示新建立之用戶的貢獻', -'sp-contributions-newbies-sub' => '新手', -'sp-contributions-newbies-title' => '新手的用戶貢獻', -'sp-contributions-blocklog' => '封禁記錄', -'sp-contributions-deleted' => '已刪除的用戶貢獻', -'sp-contributions-logs' => '日誌', -'sp-contributions-talk' => '對話', -'sp-contributions-userrights' => '用戶權限管理', -'sp-contributions-blocked-notice' => '這位用戶現時正在被封鎖中。 +'sp-contributions-newbies' => '只顯示新建立之用戶的貢獻', +'sp-contributions-newbies-sub' => '新手', +'sp-contributions-newbies-title' => '新手的用戶貢獻', +'sp-contributions-blocklog' => '封禁記錄', +'sp-contributions-deleted' => '已刪除的用戶貢獻', +'sp-contributions-uploads' => '上載', +'sp-contributions-logs' => '日誌', +'sp-contributions-talk' => '對話', +'sp-contributions-userrights' => '用戶權限管理', +'sp-contributions-blocked-notice' => '這位用戶現時正在被封鎖中。 +最近的封鎖日誌項目在下面提供以便參考:', +'sp-contributions-blocked-notice-anon' => '這個IP地址現時正在被封鎖中。 最近的封鎖日誌項目在下面提供以便參考:', -'sp-contributions-search' => '搜尋貢獻記錄', -'sp-contributions-username' => 'IP位址或用戶名稱:', -'sp-contributions-submit' => '搜尋', +'sp-contributions-search' => '搜尋貢獻記錄', +'sp-contributions-username' => 'IP位址或用戶名稱:', +'sp-contributions-toponly' => '只顯示最新修訂版本的編輯', +'sp-contributions-submit' => '搜尋', # What links here 'whatlinkshere' => '連入頁面', @@ -2259,7 +2313,6 @@ $1', 'ipb-edit-dropdown' => '編輯查封原因', 'ipb-unblock-addr' => '解封$1', 'ipb-unblock' => '解除禁封用戶名或IP地址', -'ipb-blocklist-addr' => '$1的現有封禁', 'ipb-blocklist' => '檢視現有的封禁', 'ipb-blocklist-contribs' => '$1的貢獻', 'unblockip' => '解封用戶', @@ -2267,7 +2320,7 @@ $1', 'ipusubmit' => '移除這個封鎖', 'unblocked' => '[[User:$1|$1]] 的封禁已經解除。', 'unblocked-id' => '封禁 $1 已經被移除', -'ipblocklist' => '被封IP地址列表', +'ipblocklist' => '被封用戶列表', 'ipblocklist-legend' => '搜尋一位已經被查封的用戶', 'ipblocklist-username' => '用戶名稱或IP地址:', 'ipblocklist-sh-userblocks' => '$1賬戶封鎖', @@ -2328,6 +2381,8 @@ $1已經被封鎖。您是否想更改這個設定?', 'cant-block-while-blocked' => '當您被封鎖時不可以封鎖其他用戶。', 'cant-see-hidden-user' => '您現正嘗試封鎖的用戶已經被封鎖或隱藏。 您現在沒有隱藏用戶的權限,您不可以檢視或者編輯這位用戶的封鎖。', +'ipbblocked' => '您無法封禁或解封其他用戶,因為您自己已被封禁', +'ipbnounblockself' => '您不容許自我解除封禁', # Developer tools 'lockdb' => '禁止更改資料庫', @@ -2366,6 +2421,19 @@ $1已經被封鎖。您是否想更改這個設定?', '''警告!''' 對一個經常被訪問的頁面而言這可能是一個重大與唐突的更改; 請在行動前先了解其所可能帶來的後果。", +'movepagetext-noredirectfixer' => "用下面的表單來重命名一個頁面,並將其修訂歷史同時移動到新頁面。 +老的頁面將成為新頁面的重定向頁。 +請檢查[[Special:DoubleRedirects|雙重重定向]]或[[Special:BrokenRedirects|損壞重定向]]連結。 +您應當負責確定所有連結依然會連到指定的頁面。 + +注意如果新頁面已經有內容的話,頁面將'''不會'''被移動, +除非新頁面無內容或是重定向頁,而且沒有修訂歷史。 +這意味著您再必要時可以在移動到新頁面後再移回老的頁面, +同時您也無法覆蓋現有頁面。 + +'''警告!''' +對一個經常被訪問的頁面而言這可能是一個重大與唐突的更改; +請在行動前先確定您了解其所可能帶來的後果。", 'movepagetalktext' => "有關的對話頁(如果有的話)將被自動與該頁面一起移動,'''除非''': *您將頁面移動到不同的名字空間; *新頁面已經有一個包含內容的對話頁,或者 @@ -2423,6 +2491,7 @@ $1已經被封鎖。您是否想更改這個設定?', 'immobile-source-page' => '這個頁面不能移動。', 'immobile-target-page' => '無法移動至目標標題中。', 'imagenocrossnamespace' => '不可以移動檔案到非檔案名字空間', +'nonfile-cannot-move-to-file' => '不可以移動非檔案到檔案名字空間', 'imagetypemismatch' => '該新副檔名不匹配它的類型', 'imageinvalidfilename' => '目標檔案名稱是無效的', 'fix-double-redirects' => '更新指到原先標題的任何重新定向', @@ -2499,11 +2568,12 @@ $1已經被封鎖。您是否想更改這個設定?', 'import-interwiki-namespace' => '目的名字空間:', 'import-upload-filename' => '檔案名稱:', 'import-comment' => '註解:', -'importtext' => '請使用[[Special:Export|匯出功能]]從來源 wiki 匯出檔案, -儲存到您的磁片並上傳到這裡。', +'importtext' => '請使用[[Special:Export|匯出功能]]從來源維基匯出檔案, +儲存到您的電腦中並上傳到這裡。', 'importstart' => '正在匯入頁面...', 'import-revision-count' => '$1個修訂', 'importnopages' => '沒有匯入的頁面。', +'imported-log-entries' => '匯入了$1項日誌記錄。', 'importfailed' => '匯入失敗: $1', 'importunknownsource' => '未知的源匯入類型', 'importcantopen' => '無法打開匯入檔案', @@ -2596,6 +2666,8 @@ $1已經被封鎖。您是否想更改這個設定?', 'tooltip-upload' => '開始上傳', 'tooltip-rollback' => '『反轉』可以一按恢復上一位貢獻者對這個頁面的編輯', 'tooltip-undo' => '『復原』可以在編輯模式上開啟編輯表格以便復原。它容許在摘要中加入原因。', +'tooltip-preferences-save' => '儲存使用偏好', +'tooltip-summary' => '輸入一個簡短的摘要', # Stylesheets 'common.css' => '/* 此處的 CSS 將應用於所有的面板 */', @@ -2722,14 +2794,17 @@ $1', 'imagemaxsize' => "影像大小限制:
    ''(用在檔案描述頁面中)''", 'thumbsize' => '略圖大小:', 'widthheightpage' => '$1×$2, $3頁', -'file-info' => '(檔案大小: $1, MIME 類型: $2)', -'file-info-size' => '($1 × $2 像素,檔案大小:$3 ,MIME類型:$4)', +'file-info' => '檔案大小: $1, MIME 類型: $2', +'file-info-size' => '$1 × $2 像素,檔案大小:$3,MIME類型:$4', 'file-nohires' => '無更高解像度可提供。', -'svg-long-desc' => '(SVG檔案,表面大小: $1 × $2 像素,檔案大小:$3)', +'svg-long-desc' => 'SVG 檔案,表面大小:$1 × $2 像素,檔案大小:$3', 'show-big-image' => '完整解像度', 'show-big-image-thumb' => '這幅縮圖的解像度: $1 × $2 像素', 'file-info-gif-looped' => '循環', 'file-info-gif-frames' => '$1幀', +'file-info-png-looped' => '循環', +'file-info-png-repeat' => '已播放$1次', +'file-info-png-frames' => '$1幀', # Special:NewFiles 'newimages' => '新建圖片畫廊', @@ -2816,8 +2891,8 @@ Variants for Chinese language 'exif-colorspace' => '顏色空間', 'exif-componentsconfiguration' => '每分量含義', 'exif-compressedbitsperpixel' => '圖片壓縮模式', -'exif-pixelydimension' => '有效圖片寬度', -'exif-pixelxdimension' => '有效圖片高度', +'exif-pixelydimension' => '圖片寬度', +'exif-pixelxdimension' => '圖片高度', 'exif-makernote' => '製造商註釋', 'exif-usercomment' => '用戶註釋', 'exif-relatedsoundfile' => '相關的音頻檔案', @@ -2833,9 +2908,9 @@ Variants for Chinese language 'exif-spectralsensitivity' => '感光', 'exif-isospeedratings' => 'ISO 速率', 'exif-oecf' => '光電轉換因子', -'exif-shutterspeedvalue' => '快門速度', -'exif-aperturevalue' => '光圈', -'exif-brightnessvalue' => '亮度', +'exif-shutterspeedvalue' => 'APEX快門速度', +'exif-aperturevalue' => 'APEX光圈', +'exif-brightnessvalue' => 'APEX亮度', 'exif-exposurebiasvalue' => '曝光補償', 'exif-maxaperturevalue' => '最大陸地光圈', 'exif-subjectdistance' => '物距', @@ -2899,6 +2974,7 @@ Variants for Chinese language 'exif-gpsareainformation' => 'GPS 區域名稱', 'exif-gpsdatestamp' => 'GPS 日期', 'exif-gpsdifferential' => 'GPS 差動修正', +'exif-objectname' => '簡稱', # EXIF attributes 'exif-compression-1' => '未壓縮', @@ -2980,6 +3056,8 @@ Variants for Chinese language 'exif-sensingmethod-7' => '三線傳感器', 'exif-sensingmethod-8' => '連續彩色線性傳感器', +'exif-filesource-3' => '數碼相機', + 'exif-scenetype-1' => '直接照像圖片', 'exif-customrendered-0' => '標準處理', @@ -3056,26 +3134,26 @@ Variants for Chinese language 'limitall' => '全部', # E-mail address confirmation -'confirmemail' => '確認郵箱位址', -'confirmemail_noemail' => '您沒有在您的[[Special:Preferences|用戶設定]]裡面輸入一個有效的 email 位址。', -'confirmemail_text' => '{{SITENAME}}要求您在使用郵件功能之前驗證您的郵箱位址。 +'confirmemail' => '確認郵箱位址', +'confirmemail_noemail' => '您沒有在您的[[Special:Preferences|用戶設定]]裡面輸入一個有效的 email 位址。', +'confirmemail_text' => '{{SITENAME}}要求您在使用郵件功能之前驗證您的郵箱位址。 點擊以下按鈕可向您的郵箱發送一封確認郵件。該郵件包含有一行代碼連結; 請在您的瀏覽器中加載此連結以確認您的郵箱位址是有效的。', -'confirmemail_pending' => '一個確認碼已經被發送到您的郵箱,您可能需要等幾分鐘才能收到。如果無法收到,請再申請一個新的確認碼。', -'confirmemail_send' => '郵發確認代碼', -'confirmemail_sent' => '確認郵件已發送。', -'confirmemail_oncreate' => '一個確認代碼已經被發送到您的郵箱。該代碼並不要求您進行登入, +'confirmemail_pending' => '一個確認碼已經被發送到您的郵箱,您可能需要等幾分鐘才能收到。如果無法收到,請再申請一個新的確認碼。', +'confirmemail_send' => '郵發確認代碼', +'confirmemail_sent' => '確認郵件已發送。', +'confirmemail_oncreate' => '一個確認代碼已經被發送到您的郵箱。該代碼並不要求您進行登入, 但若您要啟用在此 wiki 上的任何基於電子郵件的功能,您必須先提交此代碼。', -'confirmemail_sendfailed' => '{{SITENAME}}無法發送確認郵件,請檢查郵箱位址是否包含非法字元。 +'confirmemail_sendfailed' => '{{SITENAME}}無法發送確認郵件,請檢查郵箱位址是否包含非法字元。 郵件傳送員回應: $1', -'confirmemail_invalid' => '無效的確認碼,該代碼可能已經過期。', -'confirmemail_needlogin' => '您需要$1以確認您的郵箱位址。', -'confirmemail_success' => '您的郵箱已經被確認。您現在可以[[Special:UserLogin|登錄]]並使用此網站了。', -'confirmemail_loggedin' => '您的郵箱位址現下已被確認。', -'confirmemail_error' => '{{GENDER:|你|妳|你}}的確認過程發生錯誤。', -'confirmemail_subject' => '{{SITENAME}}郵箱位址確認', -'confirmemail_body' => '擁有IP位址$1的用戶(可能是您)在{{SITENAME}}創建了賬戶"$2",並提交了您的電子郵箱位址。 +'confirmemail_invalid' => '無效的確認碼,該代碼可能已經過期。', +'confirmemail_needlogin' => '您需要$1以確認您的郵箱位址。', +'confirmemail_success' => '您的郵箱已經被確認。您現在可以[[Special:UserLogin|登錄]]並使用此網站了。', +'confirmemail_loggedin' => '您的郵箱位址現下已被確認。', +'confirmemail_error' => '{{GENDER:|你|妳|你}}的確認過程發生錯誤。', +'confirmemail_subject' => '{{SITENAME}}郵箱位址確認', +'confirmemail_body' => '擁有IP位址$1的用戶(可能是您)在{{SITENAME}}創建了賬戶"$2",並提交了您的電子郵箱位址。 請確認這個賬戶是屬於您的,並同時啟用在{{SITENAME}}上的 電子郵件功能。請在瀏覽器中打開下面的連結: @@ -3088,8 +3166,32 @@ $3 $5 確認碼會在$4過期。', -'confirmemail_invalidated' => '電郵地址確認已取消', -'invalidateemail' => '取消電郵確認', +'confirmemail_body_changed' => '擁有IP位址$1的用戶(可能是您)在{{SITENAME}}更改了賬戶"$2"的電子郵箱位址。 + +請確認這個賬戶是屬於您的,並同時重新啟用在{{SITENAME}}上的 +電子郵件功能。請在瀏覽器中打開下面的連結: + +$3 + +如果這個賬戶*不是*屬於您的, +請打開下面的連結去取消電子郵件確認: + +$5 + +確認碼會在$4過期。', +'confirmemail_body_set' => '有人,可能是您,來自IP地址$1,已設置的戶口"$2"這個地址{{SITENAME}}網站名稱電郵地址。 + +為了確認這個帳戶確實屬於自己的,重新確認電子郵件功能於{{SITENAME}}網站名稱,請在瀏覽器中打開這個鏈接: + +$3 + +如果這帳戶*不*是你的,請點此鏈接取消電子郵件地址確認: + +$5 + +這個確認碼會在$4時過期。', +'confirmemail_invalidated' => '電郵地址確認已取消', +'invalidateemail' => '取消電郵確認', # Scary transclusion 'scarytranscludedisabled' => '[跨wiki轉換代碼不可用]', @@ -3134,6 +3236,7 @@ $1', 'table_pager_first' => '第一頁', 'table_pager_last' => '最末頁', 'table_pager_limit' => '每頁顯示 $1 筆記錄', +'table_pager_limit_label' => '每頁項目數︰', 'table_pager_limit_submit' => '送出', 'table_pager_empty' => '沒有結果', @@ -3190,6 +3293,7 @@ $1', 'version-specialpages' => '特殊頁面', 'version-parserhooks' => '語法鈎', 'version-variables' => '變數', +'version-skins' => '外觀', 'version-other' => '其他', 'version-mediahandlers' => '媒體處理器', 'version-hooks' => '鈎', @@ -3201,6 +3305,13 @@ $1', 'version-hook-subscribedby' => '利用於', 'version-version' => '(版本 $1)', 'version-license' => '授權', +'version-poweredby-credits' => "這個 Wiki 由 '''[http://www.mediawiki.org/ MediaWiki]''' 驅動,版權所有 © 2001-$1 $2。", +'version-poweredby-others' => '其他', +'version-license-info' => 'MediaWiki為自由軟件;您可依據自由軟件基金會所發表的GNU通用公共授權條款規定,就本程式再為發佈與/或修改;無論您依據的是本授權的第二版或(您自行選擇的)任一日後發行的版本。 + +MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任;亦無對適售性或特定目的適用性所為的默示性擔保。詳情請參照GNU通用公共授權。 + +您應已收到附隨於本程式的[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU通用公共授權的副本];如果沒有,請寫信至自由軟件基金會:51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或[http://www.gnu.org/licenses/old-licenses/gpl-2.0.html 線上閱讀]。', 'version-software' => '已經安裝的軟件', 'version-software-product' => '產品', 'version-software-version' => '版本', @@ -3270,6 +3381,15 @@ $1', 'tags-edit' => '編輯', 'tags-hitcount' => '$1次更改', +# Special:ComparePages +'comparepages' => '比較頁面', +'compare-selector' => '比較頁面的修訂', +'compare-page1' => '第1頁', +'compare-page2' => '第2頁', +'compare-rev1' => '修訂版本1', +'compare-rev2' => '修訂版本2', +'compare-submit' => '比較', + # Database error messages 'dberr-header' => '這個 wiki 出現了問題', 'dberr-problems' => '抱歉! @@ -3287,8 +3407,13 @@ $1', 'htmlform-float-invalid' => '您所指定的值不是一個數字。', 'htmlform-int-toolow' => '您所指定的值低於最小值$1', 'htmlform-int-toohigh' => '您所指定的值高於最大值$1', +'htmlform-required' => '此值是必填項', 'htmlform-submit' => '遞交', 'htmlform-reset' => '撤銷更改', 'htmlform-selectorother-other' => '其他', +# SQLite database support +'sqlite-has-fts' => '帶全文搜尋的版本$1', +'sqlite-no-fts' => '不帶全文搜尋的版本$1', + ); diff --git a/languages/messages/MessagesZh_hk.php b/languages/messages/MessagesZh_hk.php index 5ec432cc..0b2f2c4a 100644 --- a/languages/messages/MessagesZh_hk.php +++ b/languages/messages/MessagesZh_hk.php @@ -21,6 +21,11 @@ $fallback = 'zh-hant'; $fallback8bitEncoding = 'Big5-HKSCS'; +$specialPageAliases = array( + 'Unblock' => array( '解除封禁' ), + 'ComparePages' => array( '頁面比較' ), +); + $messages = array( # User preference toggles 'tog-watchlisthidebots' => '監視列表中隱藏機械人的編輯', @@ -46,35 +51,23 @@ $messages = array( * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki 常見問題解答] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 發佈郵件清單]', -'mytalk' => '我的討論頁', -'navigation' => '導航', +'mytalk' => '我的討論頁', 'tagline' => '從 {{SITENAME}}', 'search' => '搜尋', -'searchbutton' => '搜尋', -'searcharticle' => '進入', 'printableversion' => '可打印版', 'permalink' => '永久連接', 'print' => '打印', -'edit' => '編輯', -'talkpagelinktext' => '對話', 'specialpage' => '特殊頁面', -'personaltools' => '個人工具', -'toolbox' => '工具箱', 'jumpto' => '跳到:', -'jumptonavigation' => '導航', 'jumptosearch' => '搜尋', # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). -'aboutsite' => '關於 {{SITENAME}}', 'aboutpage' => 'Project:關於我們', -'mainpage' => '首頁', -'portal' => '社群入口', 'privacy' => '私隱政策', 'privacypage' => 'Project:私隱政策', -'editsectionhint' => '編輯段落: $1', -'red-link-title' => '$1 (頁面不存在)', +'red-link-title' => '$1 (頁面不存在)', # Short words for each namespace, by default used in the namespace tab in monobook 'nstab-special' => '特殊頁面', @@ -84,9 +77,12 @@ $messages = array( 'userlogin' => '登入/創造帳戶', # Revision deletion +'rev-deleted-comment' => '(註釋已除)', +'rev-deleted-event' => '(日誌已除)', 'revdelete-suppress-text' => "壓制'''只'''應用於以下的情況: * 不合適的個人資料 *: ''地址、電話號碼、身份證號碼等。''", +'revdelete-logentry' => '已更改「[[$1]]」之修訂可見度', # Diffs 'editundo' => '撤銷', @@ -105,9 +101,8 @@ $messages = array( 'grouppage-bot' => '{{ns:project}}:機械人', # Recent changes -'recentchanges-legend-bot' => '$1 - 機械人編輯', -'recentchanges-label-bot' => '這次編輯是由機械人進行', -'rcshowhidebots' => '$1機械人的編輯', +'recentchanges-label-bot' => '這次編輯是由機械人進行', +'rcshowhidebots' => '$1機械人的編輯', # Special:ActiveUsers 'activeusers-hidebots' => '隱藏機械人', diff --git a/languages/messages/MessagesZh_tw.php b/languages/messages/MessagesZh_tw.php index a8ae2578..9fa0adc3 100644 --- a/languages/messages/MessagesZh_tw.php +++ b/languages/messages/MessagesZh_tw.php @@ -25,16 +25,20 @@ $specialPageAliases = array( 'Disambiguations' => array( '消歧義頁' ), 'Recentchanges' => array( '近期變動' ), 'Ancientpages' => array( '最舊頁面' ), + 'Unblock' => array( '解除封鎖' ), 'Blockme' => array( '封禁我' ), 'Blockip' => array( '查封用戶' ), 'Lockdb' => array( '鎖定數據庫' ), 'Unlockdb' => array( '解除數據庫鎖定' ), + 'Userrights' => array( '用戶權限' ), + 'MIMEsearch' => array( 'MIME搜索' ), 'FileDuplicateSearch' => array( '搜索重復文件' ), 'Unwatchedpages' => array( '未被監視的頁面' ), 'Listredirects' => array( '重定向頁面列表' ), 'Revisiondelete' => array( '刪除或恢復版本' ), 'Randomredirect' => array( '隨機重定向頁面' ), 'Withoutinterwiki' => array( '沒有跨語言鏈接的頁面' ), + 'Invalidateemail' => array( '無法識別的電郵地址' ), 'LinkSearch' => array( '搜索網頁鏈接' ), ); @@ -106,8 +110,6 @@ $messages = array( 'tog-usenewrc' => '使用強化的近期變動 (需要JavaScript)', 'tog-numberheadings' => '自動編號標題', 'tog-showtoolbar' => '顯示編輯工具欄 (需要JavaScript)', -'tog-rememberpassword' => '記住我在這台電腦上的登入', -'tog-editwidth' => '將編輯欄位拓寬到整個螢幕的大小', 'tog-watchcreations' => '將我建立的頁面加進我的監視列表', 'tog-watchdefault' => '將我更改的頁面添加到我的監視列表中', 'tog-minordefault' => '預設將編輯設定為細微修改', @@ -345,7 +347,6 @@ $messages = array( 'nonunicodebrowser' => "'''警告: 您的瀏覽器不相容Unicode編碼。這裡有一個工作區將使您能安全地編輯頁面: 非ASCII字元將以十六進製編碼模式出現在編輯框中。'''", 'editingold' => "'''警告:你正在編輯的是本頁的舊版本。 如果你保存它的話,在本版本之後的任何修改都會遺失。'''", -'longpagewarning' => "'''警告: 本頁長度達$1 kB;一些瀏覽器將無法編輯長過32KB頁面。請考慮將本文切割成幾個小段落。'''", 'longpageerror' => "'''錯誤: 您所提交的文字長度有$1KB,這大於$2KB的最大值。該文字不能被儲存。'''", 'protectedpagewarning' => "'''警告: 本頁已經被保護,只有擁有管理員許可權的使用者才可修改。'''", 'semiprotectedpagewarning' => "'''注意:''' 本頁面被鎖定,僅限註冊使用者編輯。", @@ -508,6 +509,7 @@ $messages = array( 'ignorewarning' => '忽略警告並儲存檔案。', 'illegalfilename' => '檔案名"$1"包含有頁面標題所禁止的字符。請改名後重新上傳。', 'badfilename' => '檔案名已被改為"$1"。', +'hookaborted' => '您所嘗試的修改被擴展鉤捨棄。', 'fileexists-thumbnail-yes' => "這個檔案好像是一幅圖片的縮圖版本''(縮圖)''。 [[$1|thumb]] 請檢查清楚該檔案'''[[:$1]]'''。 如果檢查後的檔案是同原本圖片的大小是一樣的話,就不用再上載多一幅縮圖。", @@ -589,9 +591,6 @@ $messages = array( 'specialloguserlabel' => '使用者:', 'alllogstext' => '綜合顯示 {{SITENAME}} 的上傳、刪除、保護、查封以及站務日誌。', -# Special:Categories -'categoriespagetext' => '以下列出所有的頁面分類。', - # Special:ListUsers 'listusersfrom' => '給定顯示使用者條件:', 'listusers-noresult' => '找不到使用者。', diff --git a/languages/messages/MessagesZu.php b/languages/messages/MessagesZu.php index f754b2ed..537786a3 100644 --- a/languages/messages/MessagesZu.php +++ b/languages/messages/MessagesZu.php @@ -125,7 +125,7 @@ ikhawundi lakho liyadalwa. musa ukukhohlwa ukuguqula amakhethelo a-{{SITENAME}} 'yourname' => 'Isiga', 'yourpassword' => 'Izwi elingenangozi', 'yourpasswordagain' => 'Bhala izwi elingenangozi lakho kabusha', -'remembermypassword' => 'Ngikhumbule', +'remembermypassword' => 'Ngikhumbule (for a maximum of $1 {{PLURAL:$1|day|days}})', 'login' => 'Ngena', 'nav-login-createaccount' => 'Ngena / Dala ikhawundi', 'userlogin' => 'Ngena / Dala ikhawundi', @@ -209,11 +209,11 @@ ikhawundi lakho liyadalwa. musa ukukhohlwa ukuguqula amakhethelo a-{{SITENAME}} 'recentchangeslinked-toolbox' => 'Izinguquko ezilandiweyo', # Upload -'upload' => 'Layisha ifayili', -'uploadbtn' => 'Layisha ifayili', -'filesource' => 'Umthombo:', -'ignorewarnings' => 'Duba imiyalo', -'successfulupload' => 'Ukulayisha okuchumile', +'upload' => 'Layisha ifayili', +'uploadbtn' => 'Layisha ifayili', +'filesource' => 'Umthombo:', +'ignorewarnings' => 'Duba imiyalo', +'upload-success-subj' => 'Ukulayisha okuchumile', 'nolicense' => 'Ubekhetha lutho', diff --git a/load.php b/load.php new file mode 100644 index 00000000..d360bd2b --- /dev/null +++ b/load.php @@ -0,0 +1,42 @@ +checkUrlExtension() ) { + return; +} + +// Respond to resource loading request +$resourceLoader = new ResourceLoader(); +$resourceLoader->respond( new ResourceLoaderContext( $resourceLoader, $wgRequest ) ); + +wfProfileOut( 'load.php' ); +wfLogProfilingData(); + +// Shut down the database +wfGetLBFactory()->shutdown(); diff --git a/load.php5 b/load.php5 new file mode 100644 index 00000000..529e7f7c --- /dev/null +++ b/load.php5 @@ -0,0 +1 @@ +open() @@ -8,62 +15,62 @@ */ class SevenZipStream { var $stream; - + private function stripPath( $path ) { $prefix = 'mediawiki.compress.7z://'; return substr( $path, strlen( $prefix ) ); } - + function stream_open( $path, $mode, $options, &$opened_path ) { - if( $mode[0] == 'r' ) { + if ( $mode[0] == 'r' ) { $options = 'e -bd -so'; - } elseif( $mode[0] == 'w' ) { + } elseif ( $mode[0] == 'w' ) { $options = 'a -bd -si'; } else { return false; } $arg = wfEscapeShellArg( $this->stripPath( $path ) ); $command = "7za $options $arg"; - if( !wfIsWindows() ) { + if ( !wfIsWindows() ) { // Suppress the stupid messages on stderr $command .= ' 2>/dev/null'; } - $this->stream = popen( $command, $mode ); - return ($this->stream !== false); + $this->stream = popen( $command, $mode[0] ); // popen() doesn't like two-letter modes + return ( $this->stream !== false ); } - + function url_stat( $path, $flags ) { return stat( $this->stripPath( $path ) ); } - + // This is all so lame; there should be a default class we can extend - + function stream_close() { return fclose( $this->stream ); } - + function stream_flush() { return fflush( $this->stream ); } - + function stream_read( $count ) { return fread( $this->stream, $count ); } - + function stream_write( $data ) { return fwrite( $this->stream, $data ); } - + function stream_tell() { return ftell( $this->stream ); } - + function stream_eof() { return feof( $this->stream ); } - + function stream_seek( $offset, $whence ) { return fseek( $this->stream, $offset, $whence ); } } -stream_wrapper_register( 'mediawiki.compress.7z', 'SevenZipStream' ); \ No newline at end of file +stream_wrapper_register( 'mediawiki.compress.7z', 'SevenZipStream' ); diff --git a/maintenance/Doxyfile b/maintenance/Doxyfile index db737bff..3d037651 100644 --- a/maintenance/Doxyfile +++ b/maintenance/Doxyfile @@ -9,6 +9,7 @@ # {{INPUT}} # # A number of MediaWiki-specific aliases are near the end of this file. +# To generate documentation run: php mwdocgen.php --no-extensions #--------------------------------------------------------------------------- # Project related configuration options @@ -39,7 +40,6 @@ STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = YES MULTILINE_CPP_IS_BRIEF = NO -DETAILS_AT_TOP = NO INHERIT_DOCS = YES SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 8 @@ -76,6 +76,7 @@ ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES SHOW_DIRECTORIES = NO +SHOW_NAMESPACES = NO FILE_VERSION_FILTER = {{SVNSTAT}} #--------------------------------------------------------------------------- # configuration options related to warning and progress messages @@ -135,7 +136,7 @@ FILE_PATTERNS = *.c \ RECURSIVE = YES EXCLUDE = EXCLUDE_SYMLINKS = YES -EXCLUDE_PATTERNS = LocalSettings.php AdminSettings.php .svn {{EXCLUDE}} +EXCLUDE_PATTERNS = LocalSettings.php AdminSettings.php StartProfiler.php .svn */.git/* {{EXCLUDE}} EXAMPLE_PATH = EXAMPLE_PATTERNS = * EXAMPLE_RECURSIVE = NO @@ -245,7 +246,7 @@ SKIP_FUNCTION_MACROS = YES # Configuration::additions related to external references #--------------------------------------------------------------------------- TAGFILES = -GENERATE_TAGFILE = +GENERATE_TAGFILE = {{OUTPUT_DIRECTORY}}/html/tagfile.xml ALLEXTERNALS = NO EXTERNAL_GROUPS = YES PERL_PATH = /usr/bin/perl @@ -284,13 +285,16 @@ ALIASES = "type{1}= \1 :" \ "arrayof{2}= Array of \2" \ "null=\type{Null}" \ "boolean=\type{Boolean}" \ - "bool=\boolean" \ + "bool=\type{Boolean}" \ "integer=\type{Integer}" \ - "int=\integer" \ + "int=\type{Integer}" \ "string=\type{String}" \ - "str=\string" \ + "str=\type{String}" \ "mixed=\type{Mixed}" \ "access=\par Access:\n" \ "private=\access private" \ "protected=\access protected" \ - "public=\access public" \ No newline at end of file + "public=\access public" \ + "copyright=\note" \ + "license=\note" + diff --git a/maintenance/FiveUpgrade.inc b/maintenance/FiveUpgrade.inc deleted file mode 100644 index be0112e9..00000000 --- a/maintenance/FiveUpgrade.inc +++ /dev/null @@ -1,1190 +0,0 @@ -conversionTables = $this->prepareWindows1252(); - - $this->loadBalancers = array(); - $this->dbw = wfGetDB( DB_MASTER ); - $this->dbr = $this->streamConnection(); - - $this->cleanupSwaps = array(); - $this->emailAuth = false; # don't preauthenticate emails - $this->maxLag = 10; # if slaves are lagged more than 10 secs, wait - } - - function doing( $step ) { - return is_null( $this->step ) || $step == $this->step; - } - - function upgrade( $step ) { - $this->step = $step; - - $tables = array( - 'page', - 'links', - 'user', - 'image', - 'oldimage', - 'watchlist', - 'logging', - 'archive', - 'imagelinks', - 'categorylinks', - 'ipblocks', - 'recentchanges', - 'querycache' ); - foreach( $tables as $table ) { - if( $this->doing( $table ) ) { - $method = 'upgrade' . ucfirst( $table ); - $this->$method(); - } - } - - if( $this->doing( 'cleanup' ) ) { - $this->upgradeCleanup(); - } - } - - - /** - * Open a connection to the master server with the admin rights. - * @return Database - * @access private - */ - function newConnection() { - $lb = wfGetLBFactory()->newMainLB(); - $db = $lb->getConnection( DB_MASTER ); - - $this->loadBalancers[] = $lb; - return $db; - } - - /** - * Commit transactions and close the connections when we're done... - */ - function close() { - foreach( $this->loadBalancers as $lb ) { - $lb->commitMasterChanges(); - $lb->closeAll(); - } - } - - /** - * Open a second connection to the master server, with buffering off. - * This will let us stream large datasets in and write in chunks on the - * other end. - * @return Database - * @access private - */ - function streamConnection() { - global $wgDBtype; - - $timeout = 3600 * 24; - $db = $this->newConnection(); - $db->bufferResults( false ); - if ($wgDBtype == 'mysql') { - $db->query( "SET net_read_timeout=$timeout" ); - $db->query( "SET net_write_timeout=$timeout" ); - } - return $db; - } - - /** - * Prepare a conversion array for converting Windows Code Page 1252 to - * UTF-8. This should provide proper conversion of text that was miscoded - * as Windows-1252 by naughty user-agents, and doesn't rely on an outside - * iconv library. - * - * @return array - * @access private - */ - function prepareWindows1252() { - # Mappings from: - # http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT - static $cp1252 = array( - 0x80 => 0x20AC, #EURO SIGN - 0x81 => 0xFFFD, #REPLACEMENT CHARACTER (no mapping) - 0x82 => 0x201A, #SINGLE LOW-9 QUOTATION MARK - 0x83 => 0x0192, #LATIN SMALL LETTER F WITH HOOK - 0x84 => 0x201E, #DOUBLE LOW-9 QUOTATION MARK - 0x85 => 0x2026, #HORIZONTAL ELLIPSIS - 0x86 => 0x2020, #DAGGER - 0x87 => 0x2021, #DOUBLE DAGGER - 0x88 => 0x02C6, #MODIFIER LETTER CIRCUMFLEX ACCENT - 0x89 => 0x2030, #PER MILLE SIGN - 0x8A => 0x0160, #LATIN CAPITAL LETTER S WITH CARON - 0x8B => 0x2039, #SINGLE LEFT-POINTING ANGLE QUOTATION MARK - 0x8C => 0x0152, #LATIN CAPITAL LIGATURE OE - 0x8D => 0xFFFD, #REPLACEMENT CHARACTER (no mapping) - 0x8E => 0x017D, #LATIN CAPITAL LETTER Z WITH CARON - 0x8F => 0xFFFD, #REPLACEMENT CHARACTER (no mapping) - 0x90 => 0xFFFD, #REPLACEMENT CHARACTER (no mapping) - 0x91 => 0x2018, #LEFT SINGLE QUOTATION MARK - 0x92 => 0x2019, #RIGHT SINGLE QUOTATION MARK - 0x93 => 0x201C, #LEFT DOUBLE QUOTATION MARK - 0x94 => 0x201D, #RIGHT DOUBLE QUOTATION MARK - 0x95 => 0x2022, #BULLET - 0x96 => 0x2013, #EN DASH - 0x97 => 0x2014, #EM DASH - 0x98 => 0x02DC, #SMALL TILDE - 0x99 => 0x2122, #TRADE MARK SIGN - 0x9A => 0x0161, #LATIN SMALL LETTER S WITH CARON - 0x9B => 0x203A, #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - 0x9C => 0x0153, #LATIN SMALL LIGATURE OE - 0x9D => 0xFFFD, #REPLACEMENT CHARACTER (no mapping) - 0x9E => 0x017E, #LATIN SMALL LETTER Z WITH CARON - 0x9F => 0x0178, #LATIN CAPITAL LETTER Y WITH DIAERESIS - ); - $pairs = array(); - for( $i = 0; $i < 0x100; $i++ ) { - $unicode = isset( $cp1252[$i] ) ? $cp1252[$i] : $i; - $pairs[chr( $i )] = codepointToUtf8( $unicode ); - } - return $pairs; - } - - /** - * Convert from 8-bit Windows-1252 to UTF-8 if necessary. - * @param string $text - * @return string - * @access private - */ - function conv( $text ) { - global $wgUseLatin1; - return is_null( $text ) - ? null - : ( $wgUseLatin1 - ? strtr( $text, $this->conversionTables ) - : $text ); - } - - /** - * Dump timestamp and message to output - * @param string $message - * @access private - */ - function log( $message ) { - echo wfWikiID() . ' ' . wfTimestamp( TS_DB ) . ': ' . $message . "\n"; - flush(); - } - - /** - * Initialize the chunked-insert system. - * Rows will be inserted in chunks of the given number, rather - * than in a giant INSERT...SELECT query, to keep the serialized - * MySQL database replication from getting hung up. This way other - * things can be going on during conversion without waiting for - * slaves to catch up as badly. - * - * @param int $chunksize Number of rows to insert at once - * @param int $final Total expected number of rows / id of last row, - * used for progress reports. - * @param string $table to insert on - * @param string $fname function name to report in SQL - * @access private - */ - function setChunkScale( $chunksize, $final, $table, $fname ) { - $this->chunkSize = $chunksize; - $this->chunkFinal = $final; - $this->chunkCount = 0; - $this->chunkStartTime = wfTime(); - $this->chunkOptions = array( 'IGNORE' ); - $this->chunkTable = $table; - $this->chunkFunction = $fname; - } - - /** - * Chunked inserts: perform an insert if we've reached the chunk limit. - * Prints a progress report with estimated completion time. - * @param array &$chunk -- This will be emptied if an insert is done. - * @param int $key A key identifier to use in progress estimation in - * place of the number of rows inserted. Use this if - * you provided a max key number instead of a count - * as the final chunk number in setChunkScale() - * @access private - */ - function addChunk( &$chunk, $key = null ) { - if( count( $chunk ) >= $this->chunkSize ) { - $this->insertChunk( $chunk ); - - $this->chunkCount += count( $chunk ); - $now = wfTime(); - $delta = $now - $this->chunkStartTime; - $rate = $this->chunkCount / $delta; - - if( is_null( $key ) ) { - $completed = $this->chunkCount; - } else { - $completed = $key; - } - $portion = $completed / $this->chunkFinal; - - $estimatedTotalTime = $delta / $portion; - $eta = $this->chunkStartTime + $estimatedTotalTime; - - printf( "%s: %6.2f%% done on %s; ETA %s [%d/%d] %.2f/sec\n", - wfTimestamp( TS_DB, intval( $now ) ), - $portion * 100.0, - $this->chunkTable, - wfTimestamp( TS_DB, intval( $eta ) ), - $completed, - $this->chunkFinal, - $rate ); - flush(); - - $chunk = array(); - } - } - - /** - * Chunked inserts: perform an insert unconditionally, at the end, and log. - * @param array &$chunk -- This will be emptied if an insert is done. - * @access private - */ - function lastChunk( &$chunk ) { - $n = count( $chunk ); - if( $n > 0 ) { - $this->insertChunk( $chunk ); - } - $this->log( "100.00% done on $this->chunkTable (last chunk $n rows)." ); - } - - /** - * Chunked inserts: perform an insert. - * @param array &$chunk -- This will be emptied if an insert is done. - * @access private - */ - function insertChunk( &$chunk ) { - // Give slaves a chance to catch up - wfWaitForSlaves( $this->maxLag ); - $this->dbw->insert( $this->chunkTable, $chunk, $this->chunkFunction, $this->chunkOptions ); - } - - - /** - * Copy and transcode a table to table_temp. - * @param string $name Base name of the source table - * @param string $tabledef CREATE TABLE definition, w/ $1 for the name - * @param array $fields set of destination fields to these constants: - * MW_UPGRADE_COPY - straight copy - * MW_UPGRADE_ENCODE - for old Latin1 wikis, conv to UTF-8 - * MW_UPGRADE_NULL - just put NULL - * @param callable $callback An optional callback to modify the data - * or perform other processing. Func should be - * ( object $row, array $copy ) and return $copy - * @access private - */ - function copyTable( $name, $tabledef, $fields, $callback = null ) { - $fname = 'FiveUpgrade::copyTable'; - - $name_temp = $name . '_temp'; - $this->log( "Migrating $name table to $name_temp..." ); - - $table_temp = $this->dbw->tableName( $name_temp ); - - // Create temporary table; we're going to copy everything in there, - // then at the end rename the final tables into place. - $def = str_replace( '$1', $table_temp, $tabledef ); - $this->dbw->query( $def, $fname ); - - $numRecords = $this->dbw->selectField( $name, 'COUNT(*)', '', $fname ); - $this->setChunkScale( 100, $numRecords, $name_temp, $fname ); - - // Pull all records from the second, streaming database connection. - $sourceFields = array_keys( array_filter( $fields, - create_function( '$x', 'return $x !== MW_UPGRADE_NULL;' ) ) ); - $result = $this->dbr->select( $name, - $sourceFields, - '', - $fname ); - - $add = array(); - while( $row = $this->dbr->fetchObject( $result ) ) { - $copy = array(); - foreach( $fields as $field => $source ) { - if( $source === MW_UPGRADE_COPY ) { - $copy[$field] = $row->$field; - } elseif( $source === MW_UPGRADE_ENCODE ) { - $copy[$field] = $this->conv( $row->$field ); - } elseif( $source === MW_UPGRADE_NULL ) { - $copy[$field] = null; - } else { - $this->log( "Unknown field copy type: $field => $source" ); - } - } - if( is_callable( $callback ) ) { - $copy = call_user_func( $callback, $row, $copy ); - } - $add[] = $copy; - $this->addChunk( $add ); - } - $this->lastChunk( $add ); - $this->dbr->freeResult( $result ); - - $this->log( "Done converting $name." ); - $this->cleanupSwaps[] = $name; - } - - function upgradePage() { - $fname = "FiveUpgrade::upgradePage"; - $chunksize = 100; - - if( $this->dbw->tableExists( 'page' ) ) { - $this->log( 'Page table already exists; aborting.' ); - die( -1 ); - } - - $this->log( "Checking cur table for unique title index and applying if necessary" ); - checkDupes( true ); - - $this->log( "...converting from cur/old to page/revision/text DB structure." ); - - list ($cur, $old, $page, $revision, $text) = $this->dbw->tableNamesN( 'cur', 'old', 'page', 'revision', 'text' ); - - $this->log( "Creating page and revision tables..." ); - $this->dbw->query("CREATE TABLE $page ( - page_id int(8) unsigned NOT NULL auto_increment, - page_namespace int NOT NULL, - page_title varchar(255) binary NOT NULL, - page_restrictions tinyblob NOT NULL default '', - page_counter bigint(20) unsigned NOT NULL default '0', - page_is_redirect tinyint(1) unsigned NOT NULL default '0', - page_is_new tinyint(1) unsigned NOT NULL default '0', - page_random real unsigned NOT NULL, - page_touched char(14) binary NOT NULL default '', - page_latest int(8) unsigned NOT NULL, - page_len int(8) unsigned NOT NULL, - - PRIMARY KEY page_id (page_id), - UNIQUE INDEX name_title (page_namespace,page_title), - INDEX (page_random), - INDEX (page_len) - ) TYPE=InnoDB", $fname ); - $this->dbw->query("CREATE TABLE $revision ( - rev_id int(8) unsigned NOT NULL auto_increment, - rev_page int(8) unsigned NOT NULL, - rev_text_id int(8) unsigned NOT NULL, - rev_comment tinyblob NOT NULL default '', - rev_user int(5) unsigned NOT NULL default '0', - rev_user_text varchar(255) binary NOT NULL default '', - rev_timestamp char(14) binary NOT NULL default '', - rev_minor_edit tinyint(1) unsigned NOT NULL default '0', - rev_deleted tinyint(1) unsigned NOT NULL default '0', - - PRIMARY KEY rev_page_id (rev_page, rev_id), - UNIQUE INDEX rev_id (rev_id), - INDEX rev_timestamp (rev_timestamp), - INDEX page_timestamp (rev_page,rev_timestamp), - INDEX user_timestamp (rev_user,rev_timestamp), - INDEX usertext_timestamp (rev_user_text,rev_timestamp) - ) TYPE=InnoDB", $fname ); - - $maxold = intval( $this->dbw->selectField( 'old', 'max(old_id)', '', $fname ) ); - $this->log( "Last old record is {$maxold}" ); - - global $wgLegacySchemaConversion; - if( $wgLegacySchemaConversion ) { - // Create HistoryBlobCurStub entries. - // Text will be pulled from the leftover 'cur' table at runtime. - echo "......Moving metadata from cur; using blob references to text in cur table.\n"; - $cur_text = "concat('O:18:\"historyblobcurstub\":1:{s:6:\"mCurId\";i:',cur_id,';}')"; - $cur_flags = "'object'"; - } else { - // Copy all cur text in immediately: this may take longer but avoids - // having to keep an extra table around. - echo "......Moving text from cur.\n"; - $cur_text = 'cur_text'; - $cur_flags = "''"; - } - - $maxcur = $this->dbw->selectField( 'cur', 'max(cur_id)', '', $fname ); - $this->log( "Last cur entry is $maxcur" ); - - /** - * Copy placeholder records for each page's current version into old - * Don't do any conversion here; text records are converted at runtime - * based on the flags (and may be originally binary!) while the meta - * fields will be converted in the old -> rev and cur -> page steps. - */ - $this->setChunkScale( $chunksize, $maxcur, 'old', $fname ); - $result = $this->dbr->query( - "SELECT cur_id, cur_namespace, cur_title, $cur_text AS text, cur_comment, - cur_user, cur_user_text, cur_timestamp, cur_minor_edit, $cur_flags AS flags - FROM $cur - ORDER BY cur_id", $fname ); - $add = array(); - while( $row = $this->dbr->fetchObject( $result ) ) { - $add[] = array( - 'old_namespace' => $row->cur_namespace, - 'old_title' => $row->cur_title, - 'old_text' => $row->text, - 'old_comment' => $row->cur_comment, - 'old_user' => $row->cur_user, - 'old_user_text' => $row->cur_user_text, - 'old_timestamp' => $row->cur_timestamp, - 'old_minor_edit' => $row->cur_minor_edit, - 'old_flags' => $row->flags ); - $this->addChunk( $add, $row->cur_id ); - } - $this->lastChunk( $add ); - $this->dbr->freeResult( $result ); - - /** - * Copy revision metadata from old into revision. - * We'll also do UTF-8 conversion of usernames and comments. - */ - #$newmaxold = $this->dbw->selectField( 'old', 'max(old_id)', '', $fname ); - #$this->setChunkScale( $chunksize, $newmaxold, 'revision', $fname ); - #$countold = $this->dbw->selectField( 'old', 'count(old_id)', '', $fname ); - $countold = $this->dbw->selectField( 'old', 'max(old_id)', '', $fname ); - $this->setChunkScale( $chunksize, $countold, 'revision', $fname ); - - $this->log( "......Setting up revision table." ); - $result = $this->dbr->query( - "SELECT old_id, cur_id, old_comment, old_user, old_user_text, - old_timestamp, old_minor_edit - FROM $old,$cur WHERE old_namespace=cur_namespace AND old_title=cur_title", - $fname ); - - $add = array(); - while( $row = $this->dbr->fetchObject( $result ) ) { - $add[] = array( - 'rev_id' => $row->old_id, - 'rev_page' => $row->cur_id, - 'rev_text_id' => $row->old_id, - 'rev_comment' => $this->conv( $row->old_comment ), - 'rev_user' => $row->old_user, - 'rev_user_text' => $this->conv( $row->old_user_text ), - 'rev_timestamp' => $row->old_timestamp, - 'rev_minor_edit' => $row->old_minor_edit ); - $this->addChunk( $add ); - } - $this->lastChunk( $add ); - $this->dbr->freeResult( $result ); - - - /** - * Copy page metadata from cur into page. - * We'll also do UTF-8 conversion of titles. - */ - $this->log( "......Setting up page table." ); - $this->setChunkScale( $chunksize, $maxcur, 'page', $fname ); - $result = $this->dbr->query( " - SELECT cur_id, cur_namespace, cur_title, cur_restrictions, cur_counter, cur_is_redirect, cur_is_new, - cur_random, cur_touched, rev_id, LENGTH(cur_text) AS len - FROM $cur,$revision - WHERE cur_id=rev_page AND rev_timestamp=cur_timestamp AND rev_id > {$maxold} - ORDER BY cur_id", $fname ); - $add = array(); - while( $row = $this->dbr->fetchObject( $result ) ) { - $add[] = array( - 'page_id' => $row->cur_id, - 'page_namespace' => $row->cur_namespace, - 'page_title' => $this->conv( $row->cur_title ), - 'page_restrictions' => $row->cur_restrictions, - 'page_counter' => $row->cur_counter, - 'page_is_redirect' => $row->cur_is_redirect, - 'page_is_new' => $row->cur_is_new, - 'page_random' => $row->cur_random, - 'page_touched' => $this->dbw->timestamp(), - 'page_latest' => $row->rev_id, - 'page_len' => $row->len ); - #$this->addChunk( $add, $row->cur_id ); - $this->addChunk( $add ); - } - $this->lastChunk( $add ); - $this->dbr->freeResult( $result ); - - $this->log( "...done with cur/old -> page/revision." ); - } - - function upgradeLinks() { - $fname = 'FiveUpgrade::upgradeLinks'; - $chunksize = 200; - list ($links, $brokenlinks, $pagelinks, $cur) = $this->dbw->tableNamesN( 'links', 'brokenlinks', 'pagelinks', 'cur' ); - - $this->log( 'Checking for interwiki table change in case of bogus items...' ); - if( $this->dbw->fieldExists( 'interwiki', 'iw_trans' ) ) { - $this->log( 'interwiki has iw_trans.' ); - } else { - global $IP; - $this->log( 'adding iw_trans...' ); - $this->dbw->sourceFile( $IP . '/maintenance/archives/patch-interwiki-trans.sql' ); - $this->log( 'added iw_trans.' ); - } - - $this->log( 'Creating pagelinks table...' ); - $this->dbw->query( " -CREATE TABLE $pagelinks ( - -- Key to the page_id of the page containing the link. - pl_from int(8) unsigned NOT NULL default '0', - - -- Key to page_namespace/page_title of the target page. - -- The target page may or may not exist, and due to renames - -- and deletions may refer to different page records as time - -- goes by. - pl_namespace int NOT NULL default '0', - pl_title varchar(255) binary NOT NULL default '', - - UNIQUE KEY pl_from(pl_from,pl_namespace,pl_title), - KEY (pl_namespace,pl_title) - -) TYPE=InnoDB" ); - - $this->log( 'Importing live links -> pagelinks' ); - $nlinks = $this->dbw->selectField( 'links', 'count(*)', '', $fname ); - if( $nlinks ) { - $this->setChunkScale( $chunksize, $nlinks, 'pagelinks', $fname ); - $result = $this->dbr->query( " - SELECT l_from,cur_namespace,cur_title - FROM $links, $cur - WHERE l_to=cur_id", $fname ); - $add = array(); - while( $row = $this->dbr->fetchObject( $result ) ) { - $add[] = array( - 'pl_from' => $row->l_from, - 'pl_namespace' => $row->cur_namespace, - 'pl_title' => $this->conv( $row->cur_title ) ); - $this->addChunk( $add ); - } - $this->lastChunk( $add ); - } else { - $this->log( 'no links!' ); - } - - $this->log( 'Importing brokenlinks -> pagelinks' ); - $nbrokenlinks = $this->dbw->selectField( 'brokenlinks', 'count(*)', '', $fname ); - if( $nbrokenlinks ) { - $this->setChunkScale( $chunksize, $nbrokenlinks, 'pagelinks', $fname ); - $result = $this->dbr->query( - "SELECT bl_from, bl_to FROM $brokenlinks", - $fname ); - $add = array(); - while( $row = $this->dbr->fetchObject( $result ) ) { - $pagename = $this->conv( $row->bl_to ); - $title = Title::newFromText( $pagename ); - if( is_null( $title ) ) { - $this->log( "** invalid brokenlink: $row->bl_from -> '$pagename' (converted from '$row->bl_to')" ); - } else { - $add[] = array( - 'pl_from' => $row->bl_from, - 'pl_namespace' => $title->getNamespace(), - 'pl_title' => $title->getDBkey() ); - $this->addChunk( $add ); - } - } - $this->lastChunk( $add ); - } else { - $this->log( 'no brokenlinks!' ); - } - - $this->log( 'Done with links.' ); - } - - function upgradeUser() { - // Apply unique index, if necessary: - $duper = new UserDupes( $this->dbw ); - if( $duper->hasUniqueIndex() ) { - $this->log( "Already have unique user_name index." ); - } else { - $this->log( "Clearing user duplicates..." ); - if( !$duper->clearDupes() ) { - $this->log( "WARNING: Duplicate user accounts, may explode!" ); - } - } - - $tabledef = << MW_UPGRADE_COPY, - 'user_name' => MW_UPGRADE_ENCODE, - 'user_real_name' => MW_UPGRADE_ENCODE, - 'user_password' => MW_UPGRADE_COPY, - 'user_newpassword' => MW_UPGRADE_COPY, - 'user_email' => MW_UPGRADE_ENCODE, - 'user_options' => MW_UPGRADE_ENCODE, - 'user_touched' => MW_UPGRADE_CALLBACK, - 'user_token' => MW_UPGRADE_COPY, - 'user_email_authenticated' => MW_UPGRADE_CALLBACK, - 'user_email_token' => MW_UPGRADE_NULL, - 'user_email_token_expires' => MW_UPGRADE_NULL ); - $this->copyTable( 'user', $tabledef, $fields, - array( &$this, 'userCallback' ) ); - } - - function userCallback( $row, $copy ) { - $now = $this->dbw->timestamp(); - $copy['user_touched'] = $now; - $copy['user_email_authenticated'] = $this->emailAuth ? $now : null; - return $copy; - } - - function upgradeImage() { - $tabledef = << MW_UPGRADE_ENCODE, - 'img_size' => MW_UPGRADE_COPY, - 'img_width' => MW_UPGRADE_CALLBACK, - 'img_height' => MW_UPGRADE_CALLBACK, - 'img_metadata' => MW_UPGRADE_CALLBACK, - 'img_bits' => MW_UPGRADE_CALLBACK, - 'img_media_type' => MW_UPGRADE_CALLBACK, - 'img_major_mime' => MW_UPGRADE_CALLBACK, - 'img_minor_mime' => MW_UPGRADE_CALLBACK, - 'img_description' => MW_UPGRADE_ENCODE, - 'img_user' => MW_UPGRADE_COPY, - 'img_user_text' => MW_UPGRADE_ENCODE, - 'img_timestamp' => MW_UPGRADE_COPY ); - $this->copyTable( 'image', $tabledef, $fields, - array( &$this, 'imageCallback' ) ); - } - - function imageCallback( $row, $copy ) { - global $options; - if( !isset( $options['noimage'] ) ) { - // Fill in the new image info fields - $info = $this->imageInfo( $row->img_name ); - - $copy['img_width' ] = $info['width']; - $copy['img_height' ] = $info['height']; - $copy['img_metadata' ] = ""; // loaded on-demand - $copy['img_bits' ] = $info['bits']; - $copy['img_media_type'] = $info['media']; - $copy['img_major_mime'] = $info['major']; - $copy['img_minor_mime'] = $info['minor']; - } - - // If doing UTF8 conversion the file must be renamed - $this->renameFile( $row->img_name, 'wfImageDir' ); - - return $copy; - } - - function imageInfo( $filename ) { - $info = array( - 'width' => 0, - 'height' => 0, - 'bits' => 0, - 'media' => '', - 'major' => '', - 'minor' => '' ); - - $magic = MimeMagic::singleton(); - $mime = $magic->guessMimeType( $filename, true ); - list( $info['major'], $info['minor'] ) = explode( '/', $mime ); - - $info['media'] = $magic->getMediaType( $filename, $mime ); - - $image = UnregisteredLocalFile::newFromPath( $filename, $mime ); - - $info['width'] = $image->getWidth(); - $info['height'] = $image->getHeight(); - - $gis = $image->getImageSize(); - if ( isset( $gis['bits'] ) ) { - $info['bits'] = $gis['bits']; - } - - return $info; - } - - - /** - * Truncate a table. - * @param string $table The table name to be truncated - */ - function clearTable( $table ) { - print "Clearing $table...\n"; - $tableName = $this->db->tableName( $table ); - $this->db->query( "TRUNCATE $tableName" ); - } - - /** - * Rename a given image or archived image file to the converted filename, - * leaving a symlink for URL compatibility. - * - * @param string $oldname pre-conversion filename - * @param string $basename pre-conversion base filename for dir hashing, if an archive - * @access private - */ - function renameFile( $oldname, $subdirCallback='wfImageDir', $basename=null ) { - $newname = $this->conv( $oldname ); - if( $newname == $oldname ) { - // No need to rename; another field triggered this row. - return false; - } - - if( is_null( $basename ) ) $basename = $oldname; - $ubasename = $this->conv( $basename ); - $oldpath = call_user_func( $subdirCallback, $basename ) . '/' . $oldname; - $newpath = call_user_func( $subdirCallback, $ubasename ) . '/' . $newname; - - $this->log( "$oldpath -> $newpath" ); - if( rename( $oldpath, $newpath ) ) { - $relpath = wfRelativePath( $newpath, dirname( $oldpath ) ); - if( !symlink( $relpath, $oldpath ) ) { - $this->log( "... symlink failed!" ); - } - return $newname; - } else { - $this->log( "... rename failed!" ); - return false; - } - } - - function upgradeOldImage() { - $tabledef = << MW_UPGRADE_ENCODE, - 'oi_archive_name' => MW_UPGRADE_ENCODE, - 'oi_size' => MW_UPGRADE_COPY, - 'oi_width' => MW_UPGRADE_CALLBACK, - 'oi_height' => MW_UPGRADE_CALLBACK, - 'oi_bits' => MW_UPGRADE_CALLBACK, - 'oi_description' => MW_UPGRADE_ENCODE, - 'oi_user' => MW_UPGRADE_COPY, - 'oi_user_text' => MW_UPGRADE_ENCODE, - 'oi_timestamp' => MW_UPGRADE_COPY ); - $this->copyTable( 'oldimage', $tabledef, $fields, - array( &$this, 'oldimageCallback' ) ); - } - - function oldimageCallback( $row, $copy ) { - global $options; - if( !isset( $options['noimage'] ) ) { - // Fill in the new image info fields - $info = $this->imageInfo( $row->oi_archive_name, 'wfImageArchiveDir', $row->oi_name ); - $copy['oi_width' ] = $info['width' ]; - $copy['oi_height'] = $info['height']; - $copy['oi_bits' ] = $info['bits' ]; - } - - // If doing UTF8 conversion the file must be renamed - $this->renameFile( $row->oi_archive_name, 'wfImageArchiveDir', $row->oi_name ); - - return $copy; - } - - - function upgradeWatchlist() { - $fname = 'FiveUpgrade::upgradeWatchlist'; - $chunksize = 100; - - list ($watchlist, $watchlist_temp) = $this->dbw->tableNamesN( 'watchlist', 'watchlist_temp' ); - - $this->log( 'Migrating watchlist table to watchlist_temp...' ); - $this->dbw->query( -"CREATE TABLE $watchlist_temp ( - -- Key to user_id - wl_user int(5) unsigned NOT NULL, - - -- Key to page_namespace/page_title - -- Note that users may watch patches which do not exist yet, - -- or existed in the past but have been deleted. - wl_namespace int NOT NULL default '0', - wl_title varchar(255) binary NOT NULL default '', - - -- Timestamp when user was last sent a notification e-mail; - -- cleared when the user visits the page. - -- FIXME: add proper null support etc - wl_notificationtimestamp varchar(14) binary NOT NULL default '0', - - UNIQUE KEY (wl_user, wl_namespace, wl_title), - KEY namespace_title (wl_namespace,wl_title) - -) TYPE=InnoDB;", $fname ); - - // Fix encoding for Latin-1 upgrades, add some fields, - // and double article to article+talk pairs - $numwatched = $this->dbw->selectField( 'watchlist', 'count(*)', '', $fname ); - - $this->setChunkScale( $chunksize, $numwatched * 2, 'watchlist_temp', $fname ); - $result = $this->dbr->select( 'watchlist', - array( - 'wl_user', - 'wl_namespace', - 'wl_title' ), - '', - $fname ); - - $add = array(); - while( $row = $this->dbr->fetchObject( $result ) ) { - $add[] = array( - 'wl_user' => $row->wl_user, - 'wl_namespace' => MWNamespace::getSubject( $row->wl_namespace ), - 'wl_title' => $this->conv( $row->wl_title ), - 'wl_notificationtimestamp' => '0' ); - $this->addChunk( $add ); - - $add[] = array( - 'wl_user' => $row->wl_user, - 'wl_namespace' => MWNamespace::getTalk( $row->wl_namespace ), - 'wl_title' => $this->conv( $row->wl_title ), - 'wl_notificationtimestamp' => '0' ); - $this->addChunk( $add ); - } - $this->lastChunk( $add ); - $this->dbr->freeResult( $result ); - - $this->log( 'Done converting watchlist.' ); - $this->cleanupSwaps[] = 'watchlist'; - } - - function upgradeLogging() { - $tabledef = << MW_UPGRADE_COPY, - 'log_action' => MW_UPGRADE_COPY, - 'log_timestamp' => MW_UPGRADE_COPY, - 'log_user' => MW_UPGRADE_COPY, - 'log_namespace' => MW_UPGRADE_COPY, - 'log_title' => MW_UPGRADE_ENCODE, - 'log_comment' => MW_UPGRADE_ENCODE, - 'log_params' => MW_UPGRADE_ENCODE ); - $this->copyTable( 'logging', $tabledef, $fields ); - } - - function upgradeArchive() { - $tabledef = << MW_UPGRADE_COPY, - 'ar_title' => MW_UPGRADE_ENCODE, - 'ar_text' => MW_UPGRADE_COPY, - 'ar_comment' => MW_UPGRADE_ENCODE, - 'ar_user' => MW_UPGRADE_COPY, - 'ar_user_text' => MW_UPGRADE_ENCODE, - 'ar_timestamp' => MW_UPGRADE_COPY, - 'ar_minor_edit' => MW_UPGRADE_COPY, - 'ar_flags' => MW_UPGRADE_COPY, - 'ar_rev_id' => MW_UPGRADE_NULL, - 'ar_text_id' => MW_UPGRADE_NULL ); - $this->copyTable( 'archive', $tabledef, $fields ); - } - - function upgradeImagelinks() { - global $wgUseLatin1; - if( $wgUseLatin1 ) { - $tabledef = << MW_UPGRADE_COPY, - 'il_to' => MW_UPGRADE_ENCODE ); - $this->copyTable( 'imagelinks', $tabledef, $fields ); - } - } - - function upgradeCategorylinks() { - global $wgUseLatin1; - if( $wgUseLatin1 ) { - $tabledef = << MW_UPGRADE_COPY, - 'cl_to' => MW_UPGRADE_ENCODE, - 'cl_sortkey' => MW_UPGRADE_ENCODE, - 'cl_timestamp' => MW_UPGRADE_COPY ); - $this->copyTable( 'categorylinks', $tabledef, $fields ); - } - } - - function upgradeIpblocks() { - global $wgUseLatin1; - if( $wgUseLatin1 ) { - $tabledef = << MW_UPGRADE_COPY, - 'ipb_address' => MW_UPGRADE_COPY, - 'ipb_user' => MW_UPGRADE_COPY, - 'ipb_by' => MW_UPGRADE_COPY, - 'ipb_reason' => MW_UPGRADE_ENCODE, - 'ipb_timestamp' => MW_UPGRADE_COPY, - 'ipb_auto' => MW_UPGRADE_COPY, - 'ipb_expiry' => MW_UPGRADE_COPY ); - $this->copyTable( 'ipblocks', $tabledef, $fields ); - } - } - - function upgradeRecentchanges() { - // There's a format change in the namespace field - $tabledef = << MW_UPGRADE_COPY, - 'rc_timestamp' => MW_UPGRADE_COPY, - 'rc_cur_time' => MW_UPGRADE_COPY, - 'rc_user' => MW_UPGRADE_COPY, - 'rc_user_text' => MW_UPGRADE_ENCODE, - 'rc_namespace' => MW_UPGRADE_COPY, - 'rc_title' => MW_UPGRADE_ENCODE, - 'rc_comment' => MW_UPGRADE_ENCODE, - 'rc_minor' => MW_UPGRADE_COPY, - 'rc_bot' => MW_UPGRADE_COPY, - 'rc_new' => MW_UPGRADE_COPY, - 'rc_cur_id' => MW_UPGRADE_COPY, - 'rc_this_oldid' => MW_UPGRADE_COPY, - 'rc_last_oldid' => MW_UPGRADE_COPY, - 'rc_type' => MW_UPGRADE_COPY, - 'rc_moved_to_ns' => MW_UPGRADE_COPY, - 'rc_moved_to_title' => MW_UPGRADE_ENCODE, - 'rc_patrolled' => MW_UPGRADE_COPY, - 'rc_ip' => MW_UPGRADE_COPY ); - $this->copyTable( 'recentchanges', $tabledef, $fields ); - } - - function upgradeQuerycache() { - // There's a format change in the namespace field - $tabledef = << MW_UPGRADE_COPY, - 'qc_value' => MW_UPGRADE_COPY, - 'qc_namespace' => MW_UPGRADE_COPY, - 'qc_title' => MW_UPGRADE_ENCODE ); - $this->copyTable( 'querycache', $tabledef, $fields ); - } - - /** - * Rename all our temporary tables into final place. - * We've left things in place so a read-only wiki can continue running - * on the old code during all this. - */ - function upgradeCleanup() { - $this->renameTable( 'old', 'text' ); - - foreach( $this->cleanupSwaps as $table ) { - $this->swap( $table ); - } - } - - function renameTable( $from, $to ) { - $this->log( "Renaming $from to $to..." ); - - $fromtable = $this->dbw->tableName( $from ); - $totable = $this->dbw->tableName( $to ); - $this->dbw->query( "ALTER TABLE $fromtable RENAME TO $totable" ); - } - - function swap( $base ) { - $this->renameTable( $base, "{$base}_old" ); - $this->renameTable( "{$base}_temp", $base ); - } - -} diff --git a/maintenance/Maintenance.php b/maintenance/Maintenance.php index ee35df7c..d7297e98 100644 --- a/maintenance/Maintenance.php +++ b/maintenance/Maintenance.php @@ -6,16 +6,27 @@ */ // Define this so scripts can easily find doMaintenance.php -define( 'DO_MAINTENANCE', dirname( __FILE__ ) . '/doMaintenance.php' ); +define( 'RUN_MAINTENANCE_IF_MAIN', dirname( __FILE__ ) . '/doMaintenance.php' ); +define( 'DO_MAINTENANCE', RUN_MAINTENANCE_IF_MAIN ); // original name, harmless + $maintClass = false; // Make sure we're on PHP5 or better -if( version_compare( PHP_VERSION, '5.0.0' ) < 0 ) { - echo( "Sorry! This version of MediaWiki requires PHP 5; you are running " . +if ( version_compare( PHP_VERSION, '5.2.3' ) < 0 ) { + die ( "Sorry! This version of MediaWiki requires PHP 5.2.3; you are running " . PHP_VERSION . ".\n\n" . - "If you are sure you already have PHP 5 installed, it may be installed\n" . - "in a different path from PHP 4. Check with your system administrator.\n" ); - die(); + "If you are sure you already have PHP 5.2.3 or higher installed, it may be\n" . + "installed in a different path from PHP " . PHP_VERSION . ". Check with your system\n" . + "administrator.\n" ); +} + +// Wrapper for posix_isatty() +if ( !function_exists( 'posix_isatty' ) ) { + # We default as considering stdin a tty (for nice readline methods) + # but treating stout as not a tty to avoid color codes + function posix_isatty( $fd ) { + return !$fd; + } } /** @@ -93,14 +104,37 @@ abstract class Maintenance { protected static $mCoreScripts = null; /** - * Default constructor. Children should call this if implementing + * Default constructor. Children should call this *first* if implementing * their own constructors */ public function __construct() { + // Setup $IP, using MW_INSTALL_PATH if it exists + global $IP; + $IP = strval( getenv( 'MW_INSTALL_PATH' ) ) !== '' + ? getenv( 'MW_INSTALL_PATH' ) + : realpath( dirname( __FILE__ ) . '/..' ); + $this->addDefaultParams(); register_shutdown_function( array( $this, 'outputChanneled' ), false ); } + /** + * Should we execute the maintenance script, or just allow it to be included + * as a standalone class? It checks that the call stack only includes this + * function and a require (meaning was called from the file scope) + * + * @return Boolean + */ + public static function shouldExecute() { + $bt = debug_backtrace(); + if( count( $bt ) !== 2 ) { + return false; + } + return $bt[1]['function'] == 'require_once' && + $bt[0]['class'] == 'Maintenance' && + $bt[0]['function'] == 'shouldExecute'; + } + /** * Do the actual work. All child classes will need to implement this */ @@ -110,10 +144,10 @@ abstract class Maintenance { * Add a parameter to the script. Will be displayed on --help * with the associated description * - * @param $name String The name of the param (help, version, etc) - * @param $description String The description of the param to show on --help - * @param $required boolean Is the param required? - * @param $withArg Boolean Is an argument required with this option? + * @param $name String: the name of the param (help, version, etc) + * @param $description String: the description of the param to show on --help + * @param $required Boolean: is the param required? + * @param $withArg Boolean: is an argument required with this option? */ protected function addOption( $name, $description, $required = false, $withArg = false ) { $this->mParams[$name] = array( 'desc' => $description, 'require' => $required, 'withArg' => $withArg ); @@ -121,8 +155,8 @@ abstract class Maintenance { /** * Checks to see if a particular param exists. - * @param $name String The name of the param - * @return boolean + * @param $name String: the name of the param + * @return Boolean */ protected function hasOption( $name ) { return isset( $this->mOptions[$name] ); @@ -130,12 +164,12 @@ abstract class Maintenance { /** * Get an option, or return the default - * @param $name String The name of the param - * @param $default mixed Anything you want, default null - * @return mixed + * @param $name String: the name of the param + * @param $default Mixed: anything you want, default null + * @return Mixed */ protected function getOption( $name, $default = null ) { - if( $this->hasOption( $name ) ) { + if ( $this->hasOption( $name ) ) { return $this->mOptions[$name]; } else { // Set it so we don't have to provide the default again @@ -146,22 +180,38 @@ abstract class Maintenance { /** * Add some args that are needed - * @param $arg String Name of the arg, like 'start' - * @param $description String Short description of the arg - * @param $required Boolean Is this required? + * @param $arg String: name of the arg, like 'start' + * @param $description String: short description of the arg + * @param $required Boolean: is this required? */ protected function addArg( $arg, $description, $required = true ) { - $this->mArgList[] = array( + $this->mArgList[] = array( 'name' => $arg, - 'desc' => $description, - 'require' => $required + 'desc' => $description, + 'require' => $required ); } + /** + * Remove an option. Useful for removing options that won't be used in your script. + * @param $name String: the option to remove. + */ + protected function deleteOption( $name ) { + unset( $this->mParams[$name] ); + } + + /** + * Set the description text. + * @param $text String: the text of the description + */ + protected function addDescription( $text ) { + $this->mDescription = $text; + } + /** * Does a given argument exist? - * @param $argId int The integer value (from zero) for the arg - * @return boolean + * @param $argId Integer: the integer value (from zero) for the arg + * @return Boolean */ protected function hasArg( $argId = 0 ) { return isset( $this->mArgs[$argId] ); @@ -169,8 +219,8 @@ abstract class Maintenance { /** * Get an argument. - * @param $argId int The integer value (from zero) for the arg - * @param $default mixed The default if it doesn't exist + * @param $argId Integer: the integer value (from zero) for the arg + * @param $default Mixed: the default if it doesn't exist * @return mixed */ protected function getArg( $argId = 0, $default = null ) { @@ -179,7 +229,7 @@ abstract class Maintenance { /** * Set the batch size. - * @param $s int The number of operations to do in a batch + * @param $s Integer: the number of operations to do in a batch */ protected function setBatchSize( $s = 0 ) { $this->mBatchSize = $s; @@ -195,33 +245,42 @@ abstract class Maintenance { /** * Return input from stdin. - * @param $length int The number of bytes to read. If null, + * @param $len Integer: the number of bytes to read. If null, * just return the handle. Maintenance::STDIN_ALL returns * the full length - * @return mixed + * @return Mixed */ protected function getStdin( $len = null ) { - if ( $len == Maintenance::STDIN_ALL ) + if ( $len == Maintenance::STDIN_ALL ) { return file_get_contents( 'php://stdin' ); + } $f = fopen( 'php://stdin', 'rt' ); - if( !$len ) + if ( !$len ) { return $f; + } $input = fgets( $f, $len ); fclose( $f ); return rtrim( $input ); } + public function isQuiet() { + return $this->mQuiet; + } + /** * Throw some output to the user. Scripts can call this with no fears, * as we handle all --quiet stuff here - * @param $out String The text to show to the user - * @param $channel Mixed Unique identifier for the channel. See function outputChanneled. + * @param $out String: the text to show to the user + * @param $channel Mixed: unique identifier for the channel. See + * function outputChanneled. */ protected function output( $out, $channel = null ) { - if( $this->mQuiet ) { + if ( $this->mQuiet ) { return; } if ( $channel === null ) { + $this->cleanupChanneled(); + $f = fopen( 'php://stdout', 'w' ); fwrite( $f, $out ); fclose( $f ); @@ -235,41 +294,54 @@ abstract class Maintenance { /** * Throw an error to the user. Doesn't respect --quiet, so don't use * this for non-error output - * @param $err String The error to display - * @param $die boolean If true, go ahead and die out. + * @param $err String: the error to display + * @param $die Boolean: If true, go ahead and die out. */ protected function error( $err, $die = false ) { $this->outputChanneled( false ); if ( php_sapi_name() == 'cli' ) { fwrite( STDERR, $err . "\n" ); } else { - $f = fopen( 'php://stderr', 'w' ); + $f = fopen( 'php://stderr', 'w' ); fwrite( $f, $err . "\n" ); fclose( $f ); } - if( $die ) die(); + if ( $die ) { + die(); + } } private $atLineStart = true; private $lastChannel = null; - + + /** + * Clean up channeled output. Output a newline if necessary. + */ + public function cleanupChanneled() { + if ( !$this->atLineStart ) { + $handle = fopen( 'php://stdout', 'w' ); + fwrite( $handle, "\n" ); + fclose( $handle ); + $this->atLineStart = true; + } + } + /** * Message outputter with channeled message support. Messages on the * same channel are concatenated, but any intervening messages in another * channel start a new line. - * @param $msg String The message without trailing newline - * @param $channel Channel identifier or null for no channel. Channel comparison uses ===. + * @param $msg String: the message without trailing newline + * @param $channel Channel identifier or null for no + * channel. Channel comparison uses ===. */ public function outputChanneled( $msg, $channel = null ) { - $handle = fopen( 'php://stdout', 'w' ); - if ( $msg === false ) { - // For cleanup - if ( !$this->atLineStart ) fwrite( $handle, "\n" ); - fclose( $handle ); + $this->cleanupChanneled(); return; } + $handle = fopen( 'php://stdout', 'w' ); + // End the current line if necessary if ( !$this->atLineStart && $channel !== $this->lastChannel ) { fwrite( $handle, "\n" ); @@ -292,12 +364,12 @@ abstract class Maintenance { /** * Does the script need different DB access? By default, we give Maintenance * scripts normal rights to the DB. Sometimes, a script needs admin rights - * access for a reason and sometimes they want no access. Subclasses should + * access for a reason and sometimes they want no access. Subclasses should * override and return one of the following values, as needed: * Maintenance::DB_NONE - For no DB access at all * Maintenance::DB_STD - For normal DB access, default * Maintenance::DB_ADMIN - For admin DB access - * @return int + * @return Integer */ public function getDbType() { return Maintenance::DB_STD; @@ -307,44 +379,41 @@ abstract class Maintenance { * Add the default parameters to the scripts */ protected function addDefaultParams() { - $this->addOption( 'help', "Display this help message" ); - $this->addOption( 'quiet', "Whether to supress non-error output" ); - $this->addOption( 'conf', "Location of LocalSettings.php, if not default", false, true ); - $this->addOption( 'wiki', "For specifying the wiki ID", false, true ); - $this->addOption( 'globals', "Output globals at the end of processing for debugging" ); - $this->addOption( 'server', "The protocol and server name to use in URLs, e.g.\n" . - "\t\thttp://en.wikipedia.org. This is sometimes necessary because\n" . - "\t\tserver name detection may fail in command line scripts.", false, true ); + $this->addOption( 'help', 'Display this help message' ); + $this->addOption( 'quiet', 'Whether to supress non-error output' ); + $this->addOption( 'conf', 'Location of LocalSettings.php, if not default', false, true ); + $this->addOption( 'wiki', 'For specifying the wiki ID', false, true ); + $this->addOption( 'globals', 'Output globals at the end of processing for debugging' ); + $this->addOption( 'memory-limit', 'Set a specific memory limit for the script, "max" for no limit or "default" to avoid changing it' ); + $this->addOption( 'server', "The protocol and server name to use in URLs, e.g. " . + "http://en.wikipedia.org. This is sometimes necessary because " . + "server name detection may fail in command line scripts.", false, true ); // If we support a DB, show the options - if( $this->getDbType() > 0 ) { - $this->addOption( 'dbuser', "The DB user to use for this script", false, true ); - $this->addOption( 'dbpass', "The password to use for this script", false, true ); + if ( $this->getDbType() > 0 ) { + $this->addOption( 'dbuser', 'The DB user to use for this script', false, true ); + $this->addOption( 'dbpass', 'The password to use for this script', false, true ); } // If we support $mBatchSize, show the option - if( $this->mBatchSize ) { + if ( $this->mBatchSize ) { $this->addOption( 'batch-size', 'Run this many operations ' . - 'per batch, default: ' . $this->mBatchSize , false, true ); + 'per batch, default: ' . $this->mBatchSize, false, true ); } } /** * Run a child maintenance script. Pass all of the current arguments * to it. - * @param $maintClass String A name of a child maintenance class - * @param $classFile String Full path of where the child is + * @param $maintClass String: a name of a child maintenance class + * @param $classFile String: full path of where the child is * @return Maintenance child */ - protected function runChild( $maintClass, $classFile = null ) { - // If we haven't already specified, kill setup procedures - // for child scripts, we've already got a sane environment - self::disableSetup(); - + public function runChild( $maintClass, $classFile = null ) { // Make sure the class is loaded first - if( !class_exists( $maintClass ) ) { - if( $classFile ) { + if ( !class_exists( $maintClass ) ) { + if ( $classFile ) { require_once( $classFile ); } - if( !class_exists( $maintClass ) ) { + if ( !class_exists( $maintClass ) ) { $this->error( "Cannot spawn child: $maintClass" ); } } @@ -354,35 +423,27 @@ abstract class Maintenance { return $child; } - /** - * Disable Setup.php mostly - */ - protected static function disableSetup() { - if( !defined( 'MW_NO_SETUP' ) ) - define( 'MW_NO_SETUP', true ); - } - /** * Do some sanity checking and basic setup */ public function setup() { - global $IP, $wgCommandLineMode, $wgRequestTime; + global $wgCommandLineMode, $wgRequestTime; # Abort if called from a web server - if ( isset( $_SERVER ) && array_key_exists( 'REQUEST_METHOD', $_SERVER ) ) { - $this->error( "This script must be run from the command line", true ); + if ( isset( $_SERVER ) && isset( $_SERVER['REQUEST_METHOD'] ) ) { + $this->error( 'This script must be run from the command line', true ); } # Make sure we can handle script parameters - if( !ini_get( 'register_argc_argv' ) ) { - $this->error( "Cannot get command line arguments, register_argc_argv is set to false", true ); + if ( !ini_get( 'register_argc_argv' ) ) { + $this->error( 'Cannot get command line arguments, register_argc_argv is set to false', true ); } - if( version_compare( phpversion(), '5.2.4' ) >= 0 ) { + if ( version_compare( phpversion(), '5.2.4' ) >= 0 ) { // Send PHP warnings and errors to stderr instead of stdout. // This aids in diagnosing problems, while keeping messages // out of redirected output. - if( ini_get( 'display_errors' ) ) { + if ( ini_get( 'display_errors' ) ) { ini_set( 'display_errors', 'stderr' ); } @@ -393,9 +454,12 @@ abstract class Maintenance { // command-line mode is on, regardless of PHP version. } + $this->loadParamsAndArgs(); + $this->maybeHelp(); + # Set the memory limit # Note we need to set it again later in cache LocalSettings changed it - ini_set( 'memory_limit', $this->memoryLimit() ); + $this->adjustMemoryLimit(); # Set max execution time to 0 (no limit). PHP.net says that # "When running PHP from the command line the default setting is 0." @@ -407,27 +471,38 @@ abstract class Maintenance { # Define us as being in MediaWiki define( 'MEDIAWIKI', true ); - # Setup $IP, using MW_INSTALL_PATH if it exists - $IP = strval( getenv( 'MW_INSTALL_PATH' ) ) !== '' - ? getenv( 'MW_INSTALL_PATH' ) - : realpath( dirname( __FILE__ ) . '/..' ); - $wgCommandLineMode = true; # Turn off output buffering if it's on @ob_end_flush(); - $this->loadParamsAndArgs(); - $this->maybeHelp(); $this->validateParamsAndArgs(); } /** * Normally we disable the memory_limit when running admin scripts. * Some scripts may wish to actually set a limit, however, to avoid - * blowing up unexpectedly. + * blowing up unexpectedly. We also support a --memory-limit option, + * to allow sysadmins to explicitly set one if they'd prefer to override + * defaults (or for people using Suhosin which yells at you for trying + * to disable the limits) */ public function memoryLimit() { - return -1; + $limit = $this->getOption( 'memory-limit', 'max' ); + $limit = trim( $limit, "\" '" ); // trim quotes in case someone misunderstood + return $limit; + } + + /** + * Adjusts PHP's memory limit to better suit our needs, if needed. + */ + protected function adjustMemoryLimit() { + $limit = $this->memoryLimit(); + if ( $limit == 'max' ) { + $limit = -1; // no memory limit + } + if ( $limit != 'default' ) { + ini_set( 'memory_limit', $limit ); + } } /** @@ -450,15 +525,15 @@ abstract class Maintenance { */ public function loadParamsAndArgs( $self = null, $opts = null, $args = null ) { # If we were given opts or args, set those and return early - if( $self ) { + if ( $self ) { $this->mSelf = $self; $this->mInputLoaded = true; } - if( $opts ) { + if ( $opts ) { $this->mOptions = $opts; $this->mInputLoaded = true; } - if( $args ) { + if ( $args ) { $this->mArgs = $args; $this->mInputLoaded = true; } @@ -466,7 +541,7 @@ abstract class Maintenance { # If we've already loaded input (either by user values or from $argv) # skip on loading it again. The array_shift() will corrupt values if # it's run again and again - if( $this->mInputLoaded ) { + if ( $this->mInputLoaded ) { $this->loadSpecialVars(); return; } @@ -478,11 +553,11 @@ abstract class Maintenance { $args = array(); # Parse arguments - for( $arg = reset( $argv ); $arg !== false; $arg = next( $argv ) ) { + for ( $arg = reset( $argv ); $arg !== false; $arg = next( $argv ) ) { if ( $arg == '--' ) { # End of options, remainder should be considered arguments $arg = next( $argv ); - while( $arg !== false ) { + while ( $arg !== false ) { $args[] = $arg; $arg = next( $argv ); } @@ -499,7 +574,7 @@ abstract class Maintenance { $options[$option] = $param; } else { $bits = explode( '=', $option, 2 ); - if( count( $bits ) > 1 ) { + if ( count( $bits ) > 1 ) { $option = $bits[0]; $param = $bits[1]; } else { @@ -509,8 +584,8 @@ abstract class Maintenance { } } elseif ( substr( $arg, 0, 1 ) == '-' ) { # Short options - for ( $p=1; $pmParams[$option]['withArg'] ) && $this->mParams[$option]['withArg'] ) { $param = next( $argv ); if ( $param === false ) { @@ -539,35 +614,41 @@ abstract class Maintenance { protected function validateParamsAndArgs() { $die = false; # Check to make sure we've got all the required options - foreach( $this->mParams as $opt => $info ) { - if( $info['require'] && !$this->hasOption( $opt ) ) { + foreach ( $this->mParams as $opt => $info ) { + if ( $info['require'] && !$this->hasOption( $opt ) ) { $this->error( "Param $opt required!" ); $die = true; } } # Check arg list too - foreach( $this->mArgList as $k => $info ) { - if( $info['require'] && !$this->hasArg($k) ) { - $this->error( "Argument <" . $info['name'] . "> required!" ); + foreach ( $this->mArgList as $k => $info ) { + if ( $info['require'] && !$this->hasArg( $k ) ) { + $this->error( 'Argument <' . $info['name'] . '> required!' ); $die = true; } } - - if( $die ) $this->maybeHelp( true ); + + if ( $die ) { + $this->maybeHelp( true ); + } } /** * Handle the special variables that are global to all scripts */ protected function loadSpecialVars() { - if( $this->hasOption( 'dbuser' ) ) + if ( $this->hasOption( 'dbuser' ) ) { $this->mDbUser = $this->getOption( 'dbuser' ); - if( $this->hasOption( 'dbpass' ) ) + } + if ( $this->hasOption( 'dbpass' ) ) { $this->mDbPass = $this->getOption( 'dbpass' ); - if( $this->hasOption( 'quiet' ) ) + } + if ( $this->hasOption( 'quiet' ) ) { $this->mQuiet = true; - if( $this->hasOption( 'batch-size' ) ) + } + if ( $this->hasOption( 'batch-size' ) ) { $this->mBatchSize = $this->getOption( 'batch-size' ); + } } /** @@ -575,40 +656,62 @@ abstract class Maintenance { * @param $force boolean Whether to force the help to show, default false */ protected function maybeHelp( $force = false ) { - $screenWidth = 80; // TODO: Caculate this! + if( !$force && !$this->hasOption( 'help' ) ) { + return; + } + + $screenWidth = 80; // TODO: Caculate this! $tab = " "; $descWidth = $screenWidth - ( 2 * strlen( $tab ) ); - + ksort( $this->mParams ); - if( $this->hasOption( 'help' ) || $force ) { - $this->mQuiet = false; + $this->mQuiet = false; - if( $this->mDescription ) { - $this->output( "\n" . $this->mDescription . "\n" ); - } - $output = "\nUsage: php " . basename( $this->mSelf ); - if( $this->mParams ) { - $output .= " [--" . implode( array_keys( $this->mParams ), "|--" ) . "]"; - } - if( $this->mArgList ) { - $output .= " <"; - foreach( $this->mArgList as $k => $arg ) { - $output .= $arg['name'] . ">"; - if( $k < count( $this->mArgList ) - 1 ) - $output .= " <"; + // Description ... + if ( $this->mDescription ) { + $this->output( "\n" . $this->mDescription . "\n" ); + } + $output = "\nUsage: php " . basename( $this->mSelf ); + + // ... append parameters ... + if ( $this->mParams ) { + $output .= " [--" . implode( array_keys( $this->mParams ), "|--" ) . "]"; + } + + // ... and append arguments. + if ( $this->mArgList ) { + $output .= ' '; + foreach ( $this->mArgList as $k => $arg ) { + if ( $arg['require'] ) { + $output .= '<' . $arg['name'] . '>'; + } else { + $output .= '[' . $arg['name'] . ']'; } + if ( $k < count( $this->mArgList ) - 1 ) + $output .= ' '; } - $this->output( "$output\n" ); - foreach( $this->mParams as $par => $info ) { - $this->output( wordwrap( "$tab$par : " . $info['desc'], $descWidth, - "\n$tab$tab" ) . "\n" ); - } - foreach( $this->mArgList as $info ) { - $this->output( wordwrap( "$tab<" . $info['name'] . "> : " . - $info['desc'], $descWidth, "\n$tab$tab" ) . "\n" ); - } - die( 1 ); } + $this->output( "$output\n\n" ); + + // Parameters description + foreach ( $this->mParams as $par => $info ) { + $this->output( + wordwrap( "$tab--$par: " . $info['desc'], $descWidth, + "\n$tab$tab" ) . "\n" + ); + } + + // Arguments description + foreach ( $this->mArgList as $info ) { + $openChar = $info['require'] ? '<' : '['; + $closeChar = $info['require'] ? '>' : ']'; + $this->output( + wordwrap( "$tab$openChar" . $info['name'] . "$closeChar: " . + $info['desc'], $descWidth, "\n$tab$tab" ) . "\n" + ); + } + + die( 1 ); } /** @@ -616,11 +719,11 @@ abstract class Maintenance { */ public function finalSetup() { global $wgCommandLineMode, $wgShowSQLErrors, $wgServer; - global $wgTitle, $wgProfiling, $IP, $wgDBadminuser, $wgDBadminpassword; + global $wgProfiling, $wgDBadminuser, $wgDBadminpassword; global $wgDBuser, $wgDBpassword, $wgDBservers, $wgLBFactoryConf; # Turn off output buffering again, it might have been turned on in the settings files - if( ob_get_level() ) { + if ( ob_get_level() ) { ob_end_flush(); } # Same with these @@ -632,45 +735,54 @@ abstract class Maintenance { } # If these were passed, use them - if( $this->mDbUser ) + if ( $this->mDbUser ) { $wgDBadminuser = $this->mDbUser; - if( $this->mDbPass ) + } + if ( $this->mDbPass ) { $wgDBadminpassword = $this->mDbPass; + } if ( $this->getDbType() == self::DB_ADMIN && isset( $wgDBadminuser ) ) { $wgDBuser = $wgDBadminuser; $wgDBpassword = $wgDBadminpassword; - if( $wgDBservers ) { + if ( $wgDBservers ) { foreach ( $wgDBservers as $i => $server ) { $wgDBservers[$i]['user'] = $wgDBuser; $wgDBservers[$i]['password'] = $wgDBpassword; } } - if( isset( $wgLBFactoryConf['serverTemplate'] ) ) { + if ( isset( $wgLBFactoryConf['serverTemplate'] ) ) { $wgLBFactoryConf['serverTemplate']['user'] = $wgDBuser; $wgLBFactoryConf['serverTemplate']['password'] = $wgDBpassword; } + LBFactory::destroyInstance(); } - if ( defined( 'MW_CMDLINE_CALLBACK' ) ) { - $fn = MW_CMDLINE_CALLBACK; - $fn(); - } + $this->afterFinalSetup(); $wgShowSQLErrors = true; @set_time_limit( 0 ); - ini_set( 'memory_limit', $this->memoryLimit() ); + $this->adjustMemoryLimit(); $wgProfiling = false; // only for Profiler.php mode; avoids OOM errors } + /** + * Execute a callback function at the end of initialisation + */ + protected function afterFinalSetup() { + if ( defined( 'MW_CMDLINE_CALLBACK' ) ) { + call_user_func( MW_CMDLINE_CALLBACK ); + } + } + /** * Potentially debug globals. Originally a feature only * for refreshLinks */ public function globals() { - if( $this->hasOption( 'globals' ) ) { + if ( $this->hasOption( 'globals' ) ) { print_r( $GLOBALS ); } } @@ -711,13 +823,12 @@ abstract class Maintenance { # This is for the IRC scripts, which now run as the apache user # The apache user doesn't have access to the wikiadmin_pass command if ( $_ENV['USER'] == 'apache' ) { - #if ( posix_geteuid() == 48 ) { + # if ( posix_geteuid() == 48 ) { $wgUseNormalUser = true; } putenv( 'wikilang=' . $lang ); - $DP = $IP; ini_set( 'include_path', ".:$IP:$IP/includes:$IP/languages:$IP/maintenance" ); if ( $lang == 'test' && $site == 'wikipedia' ) { @@ -730,11 +841,13 @@ abstract class Maintenance { * @return String */ public function loadSettings() { - global $wgWikiFarm, $wgCommandLineMode, $IP, $DP; + global $wgWikiFarm, $wgCommandLineMode, $IP; $wgWikiFarm = false; if ( isset( $this->mOptions['conf'] ) ) { $settingsFile = $this->mOptions['conf']; + } else if ( defined("MW_CONFIG_FILE") ) { + $settingsFile = MW_CONFIG_FILE; } else { $settingsFile = "$IP/LocalSettings.php"; } @@ -749,19 +862,19 @@ abstract class Maintenance { if ( !is_readable( $settingsFile ) ) { $this->error( "A copy of your installation's LocalSettings.php\n" . - "must exist and be readable in the source directory.", true ); + "must exist and be readable in the source directory.\n" . + "Use --conf to specify it." , true ); } $wgCommandLineMode = true; - $DP = $IP; return $settingsFile; } /** * Support function for cleaning up redundant text records - * @param $delete boolean Whether or not to actually delete the records + * @param $delete Boolean: whether or not to actually delete the records * @author Rob Church */ - protected function purgeRedundantText( $delete = true ) { + public function purgeRedundantText( $delete = true ) { # Data should come off the master, wrapped in a transaction $dbw = wfGetDB( DB_MASTER ); $dbw->begin(); @@ -771,27 +884,27 @@ abstract class Maintenance { $tbl_txt = $dbw->tableName( 'text' ); # Get "active" text records from the revisions table - $this->output( "Searching for active text records in revisions table..." ); + $this->output( 'Searching for active text records in revisions table...' ); $res = $dbw->query( "SELECT DISTINCT rev_text_id FROM $tbl_rev" ); - foreach( $res as $row ) { + foreach ( $res as $row ) { $cur[] = $row->rev_text_id; } $this->output( "done.\n" ); # Get "active" text records from the archive table - $this->output( "Searching for active text records in archive table..." ); + $this->output( 'Searching for active text records in archive table...' ); $res = $dbw->query( "SELECT DISTINCT ar_text_id FROM $tbl_arc" ); - foreach( $res as $row ) { + foreach ( $res as $row ) { $cur[] = $row->ar_text_id; } $this->output( "done.\n" ); # Get the IDs of all text records not in these sets - $this->output( "Searching for inactive text records..." ); + $this->output( 'Searching for inactive text records...' ); $set = implode( ', ', $cur ); $res = $dbw->query( "SELECT old_id FROM $tbl_txt WHERE old_id NOT IN ( $set )" ); $old = array(); - foreach( $res as $row ) { + foreach ( $res as $row ) { $old[] = $row->old_id; } $this->output( "done.\n" ); @@ -801,8 +914,8 @@ abstract class Maintenance { $this->output( "$count inactive items found.\n" ); # Delete as appropriate - if( $delete && $count ) { - $this->output( "Deleting..." ); + if ( $delete && $count ) { + $this->output( 'Deleting...' ); $set = implode( ', ', $old ); $dbw->query( "DELETE FROM $tbl_txt WHERE old_id IN ( $set )" ); $this->output( "done.\n" ); @@ -823,7 +936,7 @@ abstract class Maintenance { * Get the list of available maintenance scripts. Note * that if you call this _before_ calling doMaintenance * you won't have any extensions in it yet - * @return array + * @return Array */ public static function getMaintenanceScripts() { global $wgMaintenanceScripts; @@ -835,8 +948,7 @@ abstract class Maintenance { * @return array */ protected static function getCoreScripts() { - if( !self::$mCoreScripts ) { - self::disableSetup(); + if ( !self::$mCoreScripts ) { $paths = array( dirname( __FILE__ ), dirname( __FILE__ ) . '/gearman', @@ -844,19 +956,20 @@ abstract class Maintenance { dirname( __FILE__ ) . '/storage', ); self::$mCoreScripts = array(); - foreach( $paths as $p ) { + foreach ( $paths as $p ) { $handle = opendir( $p ); - while( ( $file = readdir( $handle ) ) !== false ) { - if( $file == 'Maintenance.php' ) + while ( ( $file = readdir( $handle ) ) !== false ) { + if ( $file == 'Maintenance.php' ) { continue; + } $file = $p . '/' . $file; - if( is_dir( $file ) || !strpos( $file, '.php' ) || + if ( is_dir( $file ) || !strpos( $file, '.php' ) || ( strpos( file_get_contents( $file ), '$maintClass' ) === false ) ) { continue; } require( $file ); $vars = get_defined_vars(); - if( array_key_exists( 'maintClass', $vars ) ) { + if ( array_key_exists( 'maintClass', $vars ) ) { self::$mCoreScripts[$vars['maintClass']] = $file; } } @@ -865,4 +978,167 @@ abstract class Maintenance { } return self::$mCoreScripts; } + + /** + * Lock the search index + * @param &$db Database object + */ + private function lockSearchindex( &$db ) { + $write = array( 'searchindex' ); + $read = array( 'page', 'revision', 'text', 'interwiki', 'l10n_cache' ); + $db->lockTables( $read, $write, __CLASS__ . '::' . __METHOD__ ); + } + + /** + * Unlock the tables + * @param &$db Database object + */ + private function unlockSearchindex( &$db ) { + $db->unlockTables( __CLASS__ . '::' . __METHOD__ ); + } + + /** + * Unlock and lock again + * Since the lock is low-priority, queued reads will be able to complete + * @param &$db Database object + */ + private function relockSearchindex( &$db ) { + $this->unlockSearchindex( $db ); + $this->lockSearchindex( $db ); + } + + /** + * Perform a search index update with locking + * @param $maxLockTime Integer: the maximum time to keep the search index locked. + * @param $callback callback String: the function that will update the function. + * @param $dbw Database object + * @param $results + */ + public function updateSearchIndex( $maxLockTime, $callback, $dbw, $results ) { + $lockTime = time(); + + # Lock searchindex + if ( $maxLockTime ) { + $this->output( " --- Waiting for lock ---" ); + $this->lockSearchindex( $dbw ); + $lockTime = time(); + $this->output( "\n" ); + } + + # Loop through the results and do a search update + foreach ( $results as $row ) { + # Allow reads to be processed + if ( $maxLockTime && time() > $lockTime + $maxLockTime ) { + $this->output( " --- Relocking ---" ); + $this->relockSearchindex( $dbw ); + $lockTime = time(); + $this->output( "\n" ); + } + call_user_func( $callback, $dbw, $row ); + } + + # Unlock searchindex + if ( $maxLockTime ) { + $this->output( " --- Unlocking --" ); + $this->unlockSearchindex( $dbw ); + $this->output( "\n" ); + } + + } + + /** + * Update the searchindex table for a given pageid + * @param $dbw Database: a database write handle + * @param $pageId Integer: the page ID to update. + */ + public function updateSearchIndexForPage( $dbw, $pageId ) { + // Get current revision + $rev = Revision::loadFromPageId( $dbw, $pageId ); + $title = null; + if ( $rev ) { + $titleObj = $rev->getTitle(); + $title = $titleObj->getPrefixedDBkey(); + $this->output( "$title..." ); + # Update searchindex + $u = new SearchUpdate( $pageId, $titleObj->getText(), $rev->getText() ); + $u->doUpdate(); + $this->output( "\n" ); + } + return $title; + } + + /** + * Prompt the console for input + * @param $prompt String what to begin the line with, like '> ' + * @return String response + */ + public static function readconsole( $prompt = '> ' ) { + static $isatty = null; + if ( is_null( $isatty ) ) { + if ( posix_isatty( 0 /*STDIN*/ ) ) { + $isatty = true; + } else { + $isatty = false; + } + } + + if ( $isatty && function_exists( 'readline' ) ) { + return readline( $prompt ); + } else { + if ( $isatty ) { + $st = self::readlineEmulation( $prompt ); + } else { + if ( feof( STDIN ) ) { + $st = false; + } else { + $st = fgets( STDIN, 1024 ); + } + } + if ( $st === false ) return false; + $resp = trim( $st ); + return $resp; + } + } + + /** + * Emulate readline() + * @param $prompt String what to begin the line with, like '> ' + * @return String + */ + private static function readlineEmulation( $prompt ) { + $bash = Installer::locateExecutableInDefaultPaths( array( 'bash' ) ); + if ( !wfIsWindows() && $bash ) { + $retval = false; + $encPrompt = wfEscapeShellArg( $prompt ); + $command = "read -er -p $encPrompt && echo \"\$REPLY\""; + $encCommand = wfEscapeShellArg( $command ); + $line = wfShellExec( "$bash -c $encCommand", $retval ); + + if ( $retval == 0 ) { + return $line; + } elseif ( $retval == 127 ) { + // Couldn't execute bash even though we thought we saw it. + // Shell probably spit out an error message, sorry :( + // Fall through to fgets()... + } else { + // EOF/ctrl+D + return false; + } + } + + // Fallback... we'll have no editing controls, EWWW + if ( feof( STDIN ) ) { + return false; + } + print $prompt; + return fgets( STDIN, 1024 ); + } } + +class FakeMaintenance extends Maintenance { + protected $mSelf = "FakeMaintenanceScript"; + public function execute() { + return; + } +} + diff --git a/maintenance/Makefile b/maintenance/Makefile index 82476139..a92751c9 100644 --- a/maintenance/Makefile +++ b/maintenance/Makefile @@ -3,7 +3,7 @@ help: @echo "Run 'make doc' to run the doxygen generation." test: - php parserTests.php --quiet + php tests/parserTests.php --quiet doc: php mwdocgen.php --all diff --git a/maintenance/addwiki.php b/maintenance/addwiki.php index 0cb4d74a..e86a8c5d 100644 --- a/maintenance/addwiki.php +++ b/maintenance/addwiki.php @@ -27,15 +27,16 @@ * @ingroup Wikimedia */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class AddWiki extends Maintenance { public function __construct() { parent::__construct(); $this->mDescription = "Add a new wiki to the family. Wikimedia specific!"; - $this->addArg( 'language', 'Language code of new site' ); - $this->addArg( 'site', 'Type of site' ); - $this->addArg( 'dbname', 'Name of database to create' ); + $this->addArg( 'language', 'Language code of new site, e.g. en' ); + $this->addArg( 'site', 'Type of site, e.g. wikipedia' ); + $this->addArg( 'dbname', 'Name of database to create, e.g. enwiki' ); + $this->addArg( 'domain', 'Domain name of the wiki, e.g. en.wikipedia.org' ); } public function getDbType() { @@ -43,17 +44,19 @@ class AddWiki extends Maintenance { } public function execute() { - global $IP, $wgLanguageNames, $wgDefaultExternalStore, $wgNoDBParam; + global $IP, $wgDefaultExternalStore, $wgNoDBParam; $wgNoDBParam = true; - $lang = $this->getArg(0); - $site = $this->getArg(1); - $dbName = $this->getArg(2); + $lang = $this->getArg( 0 ); + $site = $this->getArg( 1 ); + $dbName = $this->getArg( 2 ); + $domain = $this->getArg( 3 ); + $languageNames = Language::getLanguageNames(); - if ( !isset( $wgLanguageNames[$lang] ) ) { + if ( !isset( $languageNames[$lang] ) ) { $this->error( "Language $lang not found in \$wgLanguageNames", true ); } - $name = $wgLanguageNames[$lang]; + $name = $languageNames[$lang]; $dbw = wfGetDB( DB_MASTER ); $common = "/home/wikipedia/common"; @@ -80,13 +83,14 @@ class AddWiki extends Maintenance { $dbw->sourceFile( "$IP/extensions/UsabilityInitiative/ClickTracking/ClickTrackingEvents.sql" ); $dbw->sourceFile( "$IP/extensions/UsabilityInitiative/ClickTracking/ClickTracking.sql" ); $dbw->sourceFile( "$IP/extensions/UsabilityInitiative/UserDailyContribs/UserDailyContribs.sql" ); + $dbw->sourceFile( "$IP/extensions/UsabilityInitiative/OptIn/OptIn.sql" ); $dbw->query( "INSERT INTO site_stats(ss_row_id) VALUES (1)" ); # Initialise external storage if ( is_array( $wgDefaultExternalStore ) ) { $stores = $wgDefaultExternalStore; - } elseif ( $stores ) { + } elseif ( $wgDefaultExternalStore ) { $stores = array( $wgDefaultExternalStore ); } else { $stores = array(); @@ -138,11 +142,21 @@ class AddWiki extends Maintenance { fclose( $file ); # Update the sublists - shell_exec("cd $common && ./refresh-dblist"); + shell_exec( "cd $common && ./refresh-dblist" ); - #print "Constructing interwiki SQL\n"; + # print "Constructing interwiki SQL\n"; # Rebuild interwiki tables - #passthru( '/home/wikipedia/conf/interwiki/update' ); + # passthru( '/home/wikipedia/conf/interwiki/update' ); + + $time = wfTimestamp( TS_RFC2822 ); + // These arguments need to be escaped twice: once for echo and once for at + $escDbName = wfEscapeShellArg( wfEscapeShellArg( $dbName ) ); + $escTime = wfEscapeShellArg( wfEscapeShellArg( $time ) ); + $escUcsite = wfEscapeShellArg( wfEscapeShellArg( $ucsite ) ); + $escName = wfEscapeShellArg( wfEscapeShellArg( $name ) ); + $escLang = wfEscapeShellArg( wfEscapeShellArg( $lang ) ); + $escDomain = wfEscapeShellArg( wfEscapeShellArg( $domain ) ); + shell_exec( "echo notifyNewProjects $escDbName $escTime $escUcsite $escName $escLang $escDomain | at now + 15 minutes" ); $this->output( "Script ended. You still have to: * Add any required settings in InitialiseSettings.php @@ -150,7 +164,7 @@ class AddWiki extends Maintenance { * Run /home/wikipedia/conf/interwiki/update " ); } - + private function getFirstArticle( $ucsite, $name ) { return << ' . $this->dbw->addQuotes( $copyPos ) ); } - $srcRes = $this->dbw->select( $srcTable, '*', $conds, __METHOD__, + $srcRes = $this->dbw->select( $srcTable, '*', $conds, __METHOD__, array( 'LIMIT' => $batchSize, 'ORDER BY' => 'log_timestamp' ) ); if ( ! $srcRes->numRows() ) { diff --git a/maintenance/attachLatest.php b/maintenance/attachLatest.php index 67f3088b..e6287f43 100644 --- a/maintenance/attachLatest.php +++ b/maintenance/attachLatest.php @@ -3,7 +3,7 @@ * quick hackjob to fix damages imports on wikisource * page records have page_latest wrong * - * Copyright (C) 2005 Brion Vibber + * Copyright © 2005 Brion Vibber * http://www.mediawiki.org/ * * This program is free software; you can redistribute it and/or modify @@ -21,19 +21,20 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class AttachLatest extends Maintenance { - + public function __construct() { parent::__construct(); $this->addOption( "fix", "Actually fix the entries, will dry run otherwise" ); $this->mDescription = "Fix page_latest entries in the page table"; } - + public function execute() { $this->output( "Looking for pages with page_latest set to 0...\n" ); $dbw = wfGetDB( DB_MASTER ); @@ -43,7 +44,7 @@ class AttachLatest extends Maintenance { __METHOD__ ); $n = 0; - foreach( $result as $row ) { + foreach ( $result as $row ) { $pageId = intval( $row->page_id ); $title = Title::makeTitle( $row->page_namespace, $row->page_title ); $name = $title->getPrefixedText(); @@ -51,31 +52,30 @@ class AttachLatest extends Maintenance { 'MAX(rev_timestamp)', array( 'rev_page' => $pageId ), __METHOD__ ); - if( !$latestTime ) { - $this->output( wfWikiID()." $pageId [[$name]] can't find latest rev time?!\n" ); + if ( !$latestTime ) { + $this->output( wfWikiID() . " $pageId [[$name]] can't find latest rev time?!\n" ); continue; } - + $revision = Revision::loadFromTimestamp( $dbw, $title, $latestTime ); - if( is_null( $revision ) ) { - $this->output( wfWikiID()." $pageId [[$name]] latest time $latestTime, can't find revision id\n" ); + if ( is_null( $revision ) ) { + $this->output( wfWikiID() . " $pageId [[$name]] latest time $latestTime, can't find revision id\n" ); continue; } $id = $revision->getId(); - $this->output( wfWikiID()." $pageId [[$name]] latest time $latestTime, rev id $id\n" ); - if( $this->hasOption('fix') ) { + $this->output( wfWikiID() . " $pageId [[$name]] latest time $latestTime, rev id $id\n" ); + if ( $this->hasOption( 'fix' ) ) { $article = new Article( $title ); $article->updateRevisionOn( $dbw, $revision ); } $n++; } - $dbw->freeResult( $result ); $this->output( "Done! Processed $n pages.\n" ); - if( !$this->hasOption('fix') ) { + if ( !$this->hasOption( 'fix' ) ) { $this->output( "This was a dry run; rerun with --fix to update page_latest.\n" ); } } } $maintClass = "AttachLatest"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/backup.inc b/maintenance/backup.inc index 30bd0d88..9ed463c9 100644 --- a/maintenance/backup.inc +++ b/maintenance/backup.inc @@ -1,6 +1,8 @@ + * Base classes for database dumpers + * + * Copyright © 2005 Brion Vibber * http://www.mediawiki.org/ * * This program is free software; you can redistribute it and/or modify @@ -27,7 +29,7 @@ */ class DumpDBZip2Output extends DumpPipeOutput { function DumpDBZip2Output( $file ) { - parent::DumpPipeOutput( "dbzip2", $file ); + parent::__construct( "dbzip2", $file ); } } @@ -67,16 +69,16 @@ class BackupDumper { } /** - * @param string $name - * @param string $class name of output filter plugin class + * @param $name String + * @param $class String: name of output filter plugin class */ function registerOutput( $name, $class ) { $this->outputTypes[$name] = $class; } /** - * @param string $name - * @param string $class name of filter plugin class + * @param $name String + * @param $class String: name of filter plugin class */ function registerFilter( $name, $class ) { $this->filterTypes[$name] = $class; @@ -84,12 +86,13 @@ class BackupDumper { /** * Load a plugin and register it - * @param string $class Name of plugin class; must have a static 'register' - * method that takes a BackupDumper as a parameter. - * @param string $file Full or relative path to the PHP file to load, or empty + * + * @param $class String: name of plugin class; must have a static 'register' + * method that takes a BackupDumper as a parameter. + * @param $file String: full or relative path to the PHP file to load, or empty */ function loadPlugin( $class, $file ) { - if( $file != '' ) { + if ( $file != '' ) { require_once( $file ); } $register = array( $class, 'register' ); @@ -97,37 +100,36 @@ class BackupDumper { } /** - * @param array $args - * @return array - * @static + * @param $args Array + * @return Array */ function processArgs( $args ) { $sink = null; $sinks = array(); - foreach( $args as $arg ) { + foreach ( $args as $arg ) { $matches = array(); - if( preg_match( '/^--(.+?)(?:=(.+?)(?::(.+?))?)?$/', $arg, $matches ) ) { + if ( preg_match( '/^--(.+?)(?:=(.+?)(?::(.+?))?)?$/', $arg, $matches ) ) { @list( /* $full */ , $opt, $val, $param ) = $matches; switch( $opt ) { case "plugin": $this->loadPlugin( $val, $param ); break; case "output": - if( !is_null( $sink ) ) { + if ( !is_null( $sink ) ) { $sinks[] = $sink; } - if( !isset( $this->outputTypes[$val] ) ) { + if ( !isset( $this->outputTypes[$val] ) ) { wfDie( "Unrecognized output sink type '$val'\n" ); } $type = $this->outputTypes[$val]; $sink = new $type( $param ); break; case "filter": - if( is_null( $sink ) ) { + if ( is_null( $sink ) ) { $this->progress( "Warning: assuming stdout for filter output\n" ); $sink = new DumpOutput(); } - if( !isset( $this->filterTypes[$val] ) ) { + if ( !isset( $this->filterTypes[$val] ) ) { wfDie( "Unrecognized filter type '$val'\n" ); } $type = $this->filterTypes[$val]; @@ -145,9 +147,9 @@ class BackupDumper { $this->server = $val; break; case "force-normal": - if( !function_exists( 'utf8_normalize' ) ) { - dl( "php_utfnormal.so" ); - if( !function_exists( 'utf8_normalize' ) ) { + if ( !function_exists( 'utf8_normalize' ) ) { + wfDl( "php_utfnormal.so" ); + if ( !function_exists( 'utf8_normalize' ) ) { wfDie( "Failed to load UTF-8 normalization extension. " . "Install or remove --force-normal parameter to use slower code.\n" ); } @@ -159,12 +161,12 @@ class BackupDumper { } } - if( is_null( $sink ) ) { + if ( is_null( $sink ) ) { $sink = new DumpOutput(); } $sinks[] = $sink; - if( count( $sinks ) > 1 ) { + if ( count( $sinks ) > 1 ) { return new DumpMultiWriter( $sinks ); } else { return $sink; @@ -178,7 +180,7 @@ class BackupDumper { function dump( $history, $text = WikiExporter::TEXT ) { # Notice messages will foul up your XML output even if they're # relatively harmless. - if( ini_get( 'display_errors' ) ) + if ( ini_get( 'display_errors' ) ) ini_set( 'display_errors', 'stderr' ); $this->initProgress( $history ); @@ -190,18 +192,18 @@ class BackupDumper { $wrapper = new ExportProgressFilter( $this->sink, $this ); $exporter->setOutputSink( $wrapper ); - if( !$this->skipHeader ) + if ( !$this->skipHeader ) $exporter->openStream(); # Log item dumps: all or by range - if( $history & WikiExporter::LOGS ) { - if( $this->startId || $this->endId ) { + if ( $history & WikiExporter::LOGS ) { + if ( $this->startId || $this->endId ) { $exporter->logsByRange( $this->startId, $this->endId ); } else { $exporter->allLogs(); } # Page dumps: all or by page ID range - } else if( is_null( $this->pages ) ) { - if( $this->startId || $this->endId ) { + } else if ( is_null( $this->pages ) ) { + if ( $this->startId || $this->endId ) { $exporter->pagesByRange( $this->startId, $this->endId ); } else { $exporter->allPages(); @@ -211,44 +213,45 @@ class BackupDumper { $exporter->pagesByName( $this->pages ); } - if( !$this->skipFooter ) + if ( !$this->skipFooter ) $exporter->closeStream(); $this->report( true ); } - + /** * Initialise starting time and maximum revision count. * We'll make ETA calculations based an progress, assuming relatively * constant per-revision rate. - * @param int $history WikiExporter::CURRENT or WikiExporter::FULL + * @param $history Integer: WikiExporter::CURRENT or WikiExporter::FULL */ function initProgress( $history = WikiExporter::FULL ) { - $table = ($history == WikiExporter::CURRENT) ? 'page' : 'revision'; - $field = ($history == WikiExporter::CURRENT) ? 'page_id' : 'rev_id'; - + $table = ( $history == WikiExporter::CURRENT ) ? 'page' : 'revision'; + $field = ( $history == WikiExporter::CURRENT ) ? 'page_id' : 'rev_id'; + $dbr = wfGetDB( DB_SLAVE ); - $this->maxCount = $dbr->selectField( $table, "MAX($field)", '', 'BackupDumper::dump' ); + $this->maxCount = $dbr->selectField( $table, "MAX($field)", '', __METHOD__ ); $this->startTime = wfTime(); } /** - * @fixme the --server parameter is currently not respected, as it doesn't seem - * terribly easy to ask the load balancer for a particular connection by name. + * @todo Fixme: the --server parameter is currently not respected, as it + * doesn't seem terribly easy to ask the load balancer for a particular + * connection by name. */ function backupDb() { $this->lb = wfGetLBFactory()->newMainLB(); $db = $this->lb->getConnection( DB_SLAVE, 'backup' ); - + // Discourage the server from disconnecting us if it takes a long time // to read out the big ol' batch query. $db->setTimeout( 3600 * 24 ); - + return $db; } - + function __destruct() { - if( isset( $this->lb ) ) { + if ( isset( $this->lb ) ) { $this->lb->closeAll(); } } @@ -270,16 +273,16 @@ class BackupDumper { } function report( $final = false ) { - if( $final xor ( $this->revCount % $this->reportingInterval == 0 ) ) { + if ( $final xor ( $this->revCount % $this->reportingInterval == 0 ) ) { $this->showReport(); } } function showReport() { - if( $this->reporting ) { + if ( $this->reporting ) { $delta = wfTime() - $this->startTime; $now = wfTimestamp( TS_DB ); - if( $delta ) { + if ( $delta ) { $rate = $this->pageCount / $delta; $revrate = $this->revCount / $delta; $portion = $this->revCount / $this->maxCount; @@ -302,7 +305,7 @@ class BackupDumper { class ExportProgressFilter extends DumpFilter { function ExportProgressFilter( &$sink, &$progress ) { - parent::DumpFilter( $sink ); + parent::__construct( $sink ); $this->progress = $progress; } diff --git a/maintenance/backupPrefetch.inc b/maintenance/backupPrefetch.inc index 512af1c7..9d743137 100644 --- a/maintenance/backupPrefetch.inc +++ b/maintenance/backupPrefetch.inc @@ -1,42 +1,10 @@ infiles = explode(';',$infile); $this->reader = new XMLReader(); + $infile = array_shift($this->infiles); $this->reader->open( $infile ); } @@ -71,26 +41,26 @@ class BaseDump { * from the dump stream. May return null if the page is * unavailable. * - * @param int $page ID number of page to read - * @param int $rev ID number of revision to read + * @param $page Integer: ID number of page to read + * @param $rev Integer: ID number of revision to read * @return string or null */ function prefetch( $page, $rev ) { $page = intval( $page ); $rev = intval( $rev ); - while( $this->lastPage < $page && !$this->atEnd ) { + while ( $this->lastPage < $page && !$this->atEnd ) { $this->debug( "BaseDump::prefetch at page $this->lastPage, looking for $page" ); $this->nextPage(); } - if( $this->lastPage > $page || $this->atEnd ) { + if ( $this->lastPage > $page || $this->atEnd ) { $this->debug( "BaseDump::prefetch already past page $page looking for rev $rev [$this->lastPage, $this->lastRev]" ); return null; } - while( $this->lastRev < $rev && !$this->atEnd && !$this->atPageEnd ) { + while ( $this->lastRev < $rev && !$this->atEnd && !$this->atPageEnd ) { $this->debug( "BaseDump::prefetch at page $this->lastPage, rev $this->lastRev, looking for $page, $rev" ); $this->nextRev(); } - if( $this->lastRev == $rev && !$this->atEnd ) { + if ( $this->lastRev == $rev && !$this->atEnd ) { $this->debug( "BaseDump::prefetch hit on $page, $rev [$this->lastPage, $this->lastRev]" ); return $this->nextText(); } else { @@ -101,22 +71,27 @@ class BaseDump { function debug( $str ) { wfDebug( $str . "\n" ); - //global $dumper; - //$dumper->progress( $str ); + // global $dumper; + // $dumper->progress( $str ); } /** * @access private */ function nextPage() { - if( $this->skipTo( 'page', 'mediawiki' ) ) { - if( $this->skipTo( 'id' ) ) { + if ( $this->skipTo( 'page', 'mediawiki' ) ) { + if ( $this->skipTo( 'id' ) ) { $this->lastPage = intval( $this->nodeContents() ); $this->lastRev = 0; $this->atPageEnd = false; } } else { - $this->atEnd = true; + $this->close(); + if (count($this->infiles)) { + $infile = array_shift($this->infiles); + $this->reader->open( $infile ); + $this->atEnd = false; + } } } @@ -124,8 +99,8 @@ class BaseDump { * @access private */ function nextRev() { - if( $this->skipTo( 'revision' ) ) { - if( $this->skipTo( 'id' ) ) { + if ( $this->skipTo( 'revision' ) ) { + if ( $this->skipTo( 'id' ) ) { $this->lastRev = intval( $this->nodeContents() ); } } else { @@ -144,16 +119,16 @@ class BaseDump { /** * @access private */ - function skipTo( $name, $parent='page' ) { - if( $this->atEnd ) { + function skipTo( $name, $parent = 'page' ) { + if ( $this->atEnd ) { return false; } - while( $this->reader->read() ) { - if( $this->reader->nodeType == XMLREADER_ELEMENT && + while ( $this->reader->read() ) { + if ( $this->reader->nodeType == XMLReader::ELEMENT && $this->reader->name == $name ) { return true; } - if( $this->reader->nodeType == XMLREADER_END_ELEMENT && + if ( $this->reader->nodeType == XMLReader::END_ELEMENT && $this->reader->name == $parent ) { $this->debug( "BaseDump::skipTo found searching for <$name>" ); return false; @@ -166,25 +141,26 @@ class BaseDump { * Shouldn't something like this be built-in to XMLReader? * Fetches text contents of the current element, assuming * no sub-elements or such scary things. - * @return string + * + * @return String * @access private */ function nodeContents() { - if( $this->atEnd ) { + if ( $this->atEnd ) { return null; } - if( $this->reader->isEmptyElement ) { + if ( $this->reader->isEmptyElement ) { return ""; } $buffer = ""; - while( $this->reader->read() ) { + while ( $this->reader->read() ) { switch( $this->reader->nodeType ) { - case XMLREADER_TEXT: -// case XMLREADER_WHITESPACE: - case XMLREADER_SIGNIFICANT_WHITESPACE: + case XMLReader::TEXT: +// case XMLReader::WHITESPACE: + case XMLReader::SIGNIFICANT_WHITESPACE: $buffer .= $this->reader->value; break; - case XMLREADER_END_ELEMENT: + case XMLReader::END_ELEMENT: return $buffer; } } diff --git a/maintenance/benchmarkPurge.php b/maintenance/benchmarkPurge.php index d167cf92..8360ef85 100644 --- a/maintenance/benchmarkPurge.php +++ b/maintenance/benchmarkPurge.php @@ -17,39 +17,40 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class BenchmarkPurge extends Maintenance { - + public function __construct() { parent::__construct(); $this->addOption( "count", "How many URLs to feed to Squid for purging", false, true ); $this->mDescription = "Benchmark the Squid purge functions."; } - + public function execute() { - global $wgUseSquid; - if( !$wgUseSquid ) { - $this->error( "Squid purge benchmark doesn't do much without squid support on.". true ); + global $wgUseSquid, $wgSquidServers; + if ( !$wgUseSquid ) { + $this->error( "Squid purge benchmark doesn't do much without squid support on.", true ); } else { $this->output( "There are " . count( $wgSquidServers ) . " defined squid servers:\n" ); - if( $this->hasOption( 'count' ) ) { - $lengths = array( intval( $this->getOption('count') ) ); + if ( $this->hasOption( 'count' ) ) { + $lengths = array( intval( $this->getOption( 'count' ) ) ); } else { $lengths = array( 1, 10, 100 ); } - foreach( $lengths as $length ) { + foreach ( $lengths as $length ) { $urls = $this->randomUrlList( $length ); $trial = $this->benchSquid( $urls ); $this->output( $trial . "\n" ); } } } - - /** + + /** * Run a bunch of URLs through SquidUpdate::purge() * to benchmark Squid response times. * @param $urls array A bunch of URLs to purge @@ -57,7 +58,7 @@ class BenchmarkPurge extends Maintenance { */ private function benchSquid( $urls, $trials = 1 ) { $start = wfTime(); - for( $i = 0; $i < $trials; $i++) { + for ( $i = 0; $i < $trials; $i++ ) { SquidUpdate::purge( $urls ); } $delta = wfTime() - $start; @@ -66,37 +67,37 @@ class BenchmarkPurge extends Maintenance { return sprintf( "%4d titles in %6.2fms (%6.2fms each)", count( $urls ), $pertrial * 1000.0, $pertitle * 1000.0 ); } - - /** + + /** * Get an array of randomUrl()'s. * @param $length int How many urls to add to the array */ private function randomUrlList( $length ) { $list = array(); - for( $i = 0; $i < $length; $i++ ) { + for ( $i = 0; $i < $length; $i++ ) { $list[] = $this->randomUrl(); } return $list; } - - /** + + /** * Return a random URL of the wiki. Not necessarily an actual title in the - * database, but at least a URL that looks like one. + * database, but at least a URL that looks like one. */ private function randomUrl() { global $wgServer, $wgArticlePath; return $wgServer . str_replace( '$1', $this->randomTitle(), $wgArticlePath ); } - - /** - * Create a random title string (not necessarily a Title object). + + /** + * Create a random title string (not necessarily a Title object). * For use with randomUrl(). */ private function randomTitle() { $str = ''; $length = mt_rand( 1, 20 ); - for( $i = 0; $i < $length; $i++ ) { - $str .= chr( mt_rand( ord('a'), ord('z') ) ); + for ( $i = 0; $i < $length; $i++ ) { + $str .= chr( mt_rand( ord( 'a' ), ord( 'z' ) ) ); } return ucfirst( $str ); } diff --git a/maintenance/benchmarks/Benchmarker.php b/maintenance/benchmarks/Benchmarker.php new file mode 100644 index 00000000..66789ea4 --- /dev/null +++ b/maintenance/benchmarks/Benchmarker.php @@ -0,0 +1,72 @@ +addOption( 'count', "How many time to run a benchmark", false, true ); + } + + public function bench( array $benchs ) { + $bench_number = 0; + $count = $this->getOption( 'count', 100 ); + + foreach( $benchs as $bench ) { + // handle empty args + if(!array_key_exists( 'args', $bench )) { + $bench['args'] = array(); + } + + $bench_number++; + $start = wfTime(); + for( $i=0; $i<$count; $i++ ) { + call_user_func_array( $bench['function'], $bench['args'] ); + } + $delta = wfTime() - $start; + + // function passed as a callback + if( is_array( $bench['function'] ) ) { + $ret = get_class( $bench['function'][0] ). '->' . $bench['function'][1]; + $bench['function'] = $ret; + } + + $this->results[$bench_number] = array( + 'function' => $bench['function'], + 'arguments' => $bench['args'], + 'count' => $count, + 'delta' => $delta, + 'average' => $delta / $count, + ); + } + } + + public function getFormattedResults( ) { + $ret = ''; + foreach( $this->results as $res ) { + // show function with args + $ret .= sprintf( "%s times: function %s(%s) :\n", + $res['count'], + $res['function'], + join( ', ', $res['arguments'] ) + ); + $ret .= sprintf( " %6.2fms (%6.2fms each)\n", + $res['delta'] * 1000, + $res['average'] * 1000 + ); + } + return $ret; + } +} diff --git a/maintenance/benchmarks/bench_HTTP_HTTPS.php b/maintenance/benchmarks/bench_HTTP_HTTPS.php new file mode 100644 index 00000000..13d15fce --- /dev/null +++ b/maintenance/benchmarks/bench_HTTP_HTTPS.php @@ -0,0 +1,38 @@ +bench( array( + array( 'function' => array( $this, 'getHTTP' ) ), + array( 'function' => array( $this, 'getHTTPS' ) ), + )); + print $this->getFormattedResults(); + } + + static function doRequest( $proto ) { + Http::get( "$proto://localhost/" ); + } + + // bench function 1 + function getHTTP() { + $this->doRequest( 'http' ); + } + + // bench function 2 + function getHTTPS() { + $this->doRequest( 'https' ); + } +} + +$maintClass = 'bench_HTTP_HTTPS'; +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/benchmarks/bench_wfIsWindows.php b/maintenance/benchmarks/bench_wfIsWindows.php new file mode 100644 index 00000000..2f759e07 --- /dev/null +++ b/maintenance/benchmarks/bench_wfIsWindows.php @@ -0,0 +1,42 @@ +bench( array( + array( 'function' => array( $this, 'wfIsWindows' ) ), + array( 'function' => array( $this, 'wfIsWindowsCached' ) ), + )); + print $this->getFormattedResults(); + } + + static function is_win() { + return substr( php_uname(), 0, 7 ) == 'Windows' ; + } + + // bench function 1 + function wfIsWindows() { + return self::is_win(); + } + + // bench function 2 + function wfIsWindowsCached() { + static $isWindows = null; + if( $isWindows == null ) { + $isWindows = self::is_win(); + } + return $isWindows; + } +} + +$maintClass = 'bench_wfIsWindows'; +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/changePassword.php b/maintenance/changePassword.php index fbc3fa76..568952b9 100644 --- a/maintenance/changePassword.php +++ b/maintenance/changePassword.php @@ -2,6 +2,8 @@ /** * Change the password of a given user * + * Copyright © 2005, Ævar Arnfjörð Bjarmason + * * 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 @@ -17,13 +19,12 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @author Ævar Arnfjörð Bjarmason - * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason - * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class ChangePassword extends Maintenance { public function __construct() { @@ -32,21 +33,21 @@ class ChangePassword extends Maintenance { $this->addOption( "password", "The password to use", true, true ); $this->mDescription = "Change a user's password"; } - + public function execute() { - $user = User::newFromName( $this->getOption('user') ); - if( !$user->getId() ) { - $this->error( "No such user: " . $this->getOption('user'), true ); + $user = User::newFromName( $this->getOption( 'user' ) ); + if ( !$user->getId() ) { + $this->error( "No such user: " . $this->getOption( 'user' ), true ); } try { - $user->setPassword( $this->getOption('password') ); + $user->setPassword( $this->getOption( 'password' ) ); $user->saveSettings(); $this->output( "Password set for " . $user->getName() . "\n" ); - } catch( PasswordError $pwe ) { + } catch ( PasswordError $pwe ) { $this->error( $pwe->getText(), true ); } } } $maintClass = "ChangePassword"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/checkAutoLoader.php b/maintenance/checkAutoLoader.php index 9c8f29e3..d199b6fe 100644 --- a/maintenance/checkAutoLoader.php +++ b/maintenance/checkAutoLoader.php @@ -17,10 +17,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class CheckAutoLoader extends Maintenance { public function __construct() { @@ -31,8 +32,8 @@ class CheckAutoLoader extends Maintenance { global $wgAutoloadLocalClasses, $IP; $files = array_unique( $wgAutoloadLocalClasses ); - foreach( $files as $file ) { - if( function_exists( 'parsekit_compile_file' ) ){ + foreach ( $files as $file ) { + if ( function_exists( 'parsekit_compile_file' ) ) { $parseInfo = parsekit_compile_file( "$IP/$file" ); $classes = array_keys( $parseInfo['class_table'] ); } else { @@ -43,7 +44,7 @@ class CheckAutoLoader extends Maintenance { } foreach ( $classes as $class ) { if ( !isset( $wgAutoloadLocalClasses[$class] ) ) { - //printf( "%-50s Unlisted, in %s\n", $class, $file ); + // printf( "%-50s Unlisted, in %s\n", $class, $file ); $this->output( "\t'$class' => '$file',\n" ); } elseif ( $wgAutoloadLocalClasses[$class] !== $file ) { $this->output( "$class: Wrong file: found in $file, listed in " . $wgAutoloadLocalClasses[$class] . "\n" ); @@ -54,4 +55,4 @@ class CheckAutoLoader extends Maintenance { } $maintClass = "CheckAutoLoader"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/checkBadRedirects.php b/maintenance/checkBadRedirects.php index 32f04f45..52bfa65a 100644 --- a/maintenance/checkBadRedirects.php +++ b/maintenance/checkBadRedirects.php @@ -18,10 +18,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @ingroup Maintenance */ - -require_once( dirname(__FILE__) . '/Maintenance.php' ); + +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class CheckBadRedirects extends Maintenance { public function __construct() { @@ -34,19 +35,19 @@ class CheckBadRedirects extends Maintenance { $dbr = wfGetDB( DB_SLAVE ); $result = $dbr->select( array( 'page' ), - array( 'page_namespace','page_title', 'page_latest' ), + array( 'page_namespace', 'page_title', 'page_latest' ), array( 'page_is_redirect' => 1 ) ); - + $count = $result->numRows(); $this->output( "Found $count total redirects.\n" . "Looking for bad redirects:\n\n" ); - - foreach( $result as $row ) { + + foreach ( $result as $row ) { $title = Title::makeTitle( $row->page_namespace, $row->page_title ); $rev = Revision::newFromId( $row->page_latest ); - if( $rev ) { + if ( $rev ) { $target = Title::newFromRedirect( $rev->getText() ); - if( !$target ) { + if ( !$target ) { $this->output( $title->getPrefixedText() . "\n" ); } } @@ -56,4 +57,4 @@ class CheckBadRedirects extends Maintenance { } $maintClass = "CheckBadRedirects"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/checkImages.php b/maintenance/checkImages.php index 5dcaac28..96b93f22 100644 --- a/maintenance/checkImages.php +++ b/maintenance/checkImages.php @@ -17,9 +17,10 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class CheckImages extends Maintenance { @@ -28,16 +29,16 @@ class CheckImages extends Maintenance { $this->mDescription = "Check images to see if they exist, are readable, etc"; $this->setBatchSize( 1000 ); } - + public function execute() { $start = ''; $dbr = wfGetDB( DB_SLAVE ); $numImages = 0; $numGood = 0; - + do { - $res = $dbr->select( 'image', '*', array( 'img_name > ' . $dbr->addQuotes( $start ) ), + $res = $dbr->select( 'image', '*', array( 'img_name > ' . $dbr->addQuotes( $start ) ), __METHOD__, array( 'LIMIT' => $this->mBatchSize ) ); foreach ( $res as $row ) { $numImages++; @@ -53,30 +54,30 @@ class CheckImages extends Maintenance { $this->output( "{$row->img_name}: missing\n" ); continue; } - + if ( $stat['mode'] & 040000 ) { $this->output( "{$row->img_name}: is a directory\n" ); continue; } - + if ( $stat['size'] == 0 && $row->img_size != 0 ) { $this->output( "{$row->img_name}: truncated, was {$row->img_size}\n" ); continue; } - + if ( $stat['size'] != $row->img_size ) { $this->output( "{$row->img_name}: size mismatch DB={$row->img_size}, actual={$stat['size']}\n" ); continue; } - + $numGood++; } - + } while ( $res->numRows() ); - + $this->output( "Good images: $numGood/$numImages\n" ); } } $maintClass = "CheckImages"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/checkSyntax.php b/maintenance/checkSyntax.php index 22832dce..396cac5f 100644 --- a/maintenance/checkSyntax.php +++ b/maintenance/checkSyntax.php @@ -17,9 +17,10 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @ingroup Maintenance */ - + require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class CheckSyntax extends Maintenance { @@ -33,8 +34,8 @@ class CheckSyntax extends Maintenance { $this->mDescription = "Check syntax for all PHP files in MediaWiki"; $this->addOption( 'with-extensions', 'Also recurse the extensions folder' ); $this->addOption( 'path', 'Specific path (file or directory) to check, either with absolute path or relative to the root of this MediaWiki installation', - false, true); - $this->addOption( 'list-file', 'Text file containing list of files or directories to check', false, true); + false, true ); + $this->addOption( 'list-file', 'Text file containing list of files or directories to check', false, true ); $this->addOption( 'modified', 'Check only files that were modified (requires SVN command-line client)' ); $this->addOption( 'syntax-only', 'Check for syntax validity only, skip code style warnings' ); } @@ -49,16 +50,16 @@ class CheckSyntax extends Maintenance { // ParseKit is broken on PHP 5.3+, disabled until this is fixed $useParseKit = function_exists( 'parsekit_compile_file' ) && version_compare( PHP_VERSION, '5.3', '<' ); - $str = 'Checking syntax (using ' . ( $useParseKit ? - 'parsekit)' : ' php -l, this can take a long time)' ); + $str = 'Checking syntax (using ' . ( $useParseKit ? + 'parsekit' : ' php -l, this can take a long time' ) . ")\n"; $this->output( $str ); - foreach( $this->mFiles as $f ) { - if( $useParseKit ) { + foreach ( $this->mFiles as $f ) { + if ( $useParseKit ) { $this->checkFileWithParsekit( $f ); } else { $this->checkFileWithCli( $f ); } - if( !$this->hasOption( 'syntax-only' ) ) { + if ( !$this->hasOption( 'syntax-only' ) ) { $this->checkForMistakes( $f ); } } @@ -76,18 +77,17 @@ class CheckSyntax extends Maintenance { $this->mIgnorePaths = array( // Compat stuff, explodes on PHP 5.3 "includes/NamespaceCompat.php$", - "DiscussionThreading/REV", ); - + $this->mNoStyleCheckPaths = array( // Third-party code we don't care about "/activemq_stomp/", - "EmailPage/phpMailer", + "EmailPage/PHPMailer", "FCKeditor/fckeditor/", '\bphplot-', "/svggraph/", "\bjsmin.php$", - "OggHandler/PEAR/", + "PEAR/File_Ogg/", "QPoll/Excel/", "/geshi/", "/smarty/", @@ -105,7 +105,8 @@ class CheckSyntax extends Maintenance { if ( !$f ) { $this->error( "Can't open file $file\n", true ); } - while( $path = trim( fgets( $f ) ) ) { + $path = trim( fgets( $f ) ); + while ( $path ) { $this->addPath( $path ); } fclose( $f ); @@ -113,6 +114,7 @@ class CheckSyntax extends Maintenance { } elseif ( $this->hasOption( 'modified' ) ) { $this->output( "Retrieving list from Subversion... " ); $parentDir = wfEscapeShellArg( dirname( __FILE__ ) . '/..' ); + $retval = null; $output = wfShellExec( "svn status --ignore-externals $parentDir", $retval ); if ( $retval ) { $this->error( "Error retrieving list from Subversion!\n", true ); @@ -122,7 +124,7 @@ class CheckSyntax extends Maintenance { preg_match_all( '/^\s*[AM].{7}(.*?)\r?$/m', $output, $matches ); foreach ( $matches[1] as $file ) { - if ( self::isSuitableFile( $file ) && !is_dir( $file ) ) { + if ( $this->isSuitableFile( $file ) && !is_dir( $file ) ) { $this->mFiles[] = $file; } } @@ -131,20 +133,20 @@ class CheckSyntax extends Maintenance { $this->output( 'Building file list...', 'listfiles' ); - // Only check files in these directories. + // Only check files in these directories. // Don't just put $IP, because the recursive dir thingie goes into all subdirs - $dirs = array( + $dirs = array( $IP . '/includes', $IP . '/config', $IP . '/languages', $IP . '/maintenance', $IP . '/skins', ); - if( $this->hasOption( 'with-extensions' ) ) { + if ( $this->hasOption( 'with-extensions' ) ) { $dirs[] = $IP . '/extensions'; } - foreach( $dirs as $d ) { + foreach ( $dirs as $d ) { $this->addDirectoryContent( $d ); } @@ -158,15 +160,16 @@ class CheckSyntax extends Maintenance { $this->output( 'done.', 'listfiles' ); } - + /** * Returns true if $file is of a type we can check */ private function isSuitableFile( $file ) { + $file = str_replace( '\\', '/', $file ); $ext = pathinfo( $file, PATHINFO_EXTENSION ); if ( $ext != 'php' && $ext != 'inc' && $ext != 'php5' ) return false; - foreach( $this->mIgnorePaths as $regex ) { + foreach ( $this->mIgnorePaths as $regex ) { $m = array(); if ( preg_match( "~{$regex}~", $file, $m ) ) return false; @@ -203,7 +206,7 @@ class CheckSyntax extends Maintenance { */ private function addDirectoryContent( $dir ) { $iterator = new RecursiveIteratorIterator( - new RecursiveDirectoryIterator( $dir ), + new RecursiveDirectoryIterator( $dir ), RecursiveIteratorIterator::SELF_FIRST ); foreach ( $iterator as $file ) { @@ -248,8 +251,8 @@ class CheckSyntax extends Maintenance { * @return boolean */ private function checkFileWithCli( $file ) { - $res = exec( 'php -l ' . wfEscapeShellArg( $file ) ); - if( strpos( $res, 'No syntax errors detected' ) === false ) { + $res = exec( 'php -l ' . wfEscapeShellArg( $file ) ); + if ( strpos( $res, 'No syntax errors detected' ) === false ) { $this->mFailures[$file] = $res; $this->output( $res . "\n" ); return false; @@ -265,7 +268,7 @@ class CheckSyntax extends Maintenance { * @return boolean */ private function checkForMistakes( $file ) { - foreach( $this->mNoStyleCheckPaths as $regex ) { + foreach ( $this->mNoStyleCheckPaths as $regex ) { $m = array(); if ( preg_match( "~{$regex}~", $file, $m ) ) return; @@ -292,5 +295,5 @@ class CheckSyntax extends Maintenance { } $maintClass = "CheckSyntax"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/checkUsernames.php b/maintenance/checkUsernames.php index 85a3d157..9b98721d 100644 --- a/maintenance/checkUsernames.php +++ b/maintenance/checkUsernames.php @@ -19,11 +19,12 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class CheckUsernames extends Maintenance { @@ -44,11 +45,11 @@ class CheckUsernames extends Maintenance { foreach ( $res as $row ) { if ( ! User::isValidUserName( $row->user_name ) ) { $this->error( sprintf( "%s: %6d: '%s'\n", wfWikiID(), $row->user_id, $row->user_name ) ); - wfDebugLog( 'checkUsernames', $out ); + wfDebugLog( 'checkUsernames', $row->user_name ); } } } } $maintClass = "CheckUsernames"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/cleanupCaps.php b/maintenance/cleanupCaps.php index 6a48ea83..2d945a52 100644 --- a/maintenance/cleanupCaps.php +++ b/maintenance/cleanupCaps.php @@ -1,12 +1,12 @@ + * Copyright © 2005 Brion Vibber * http://www.mediawiki.org/ * * This program is free software; you can redistribute it and/or modify @@ -24,11 +24,12 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @author Brion Vibber - * @ingroup maintenance + * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/cleanupTable.inc' ); +require_once( dirname( __FILE__ ) . '/cleanupTable.inc' ); class CapsCleanup extends TableCleanup { public function __construct() { @@ -42,7 +43,7 @@ class CapsCleanup extends TableCleanup { $this->namespace = intval( $this->getOption( 'namespace', 0 ) ); $this->dryrun = $this->hasOption( 'dry-run' ); $wgUser->setName( 'Conversion script' ); - if( $wgCapitalLinks ) + if ( $wgCapitalLinks ) $this->error( "\$wgCapitalLinks is on -- no need for caps links cleanup.", true ); $this->runTable( array( @@ -59,31 +60,31 @@ class CapsCleanup extends TableCleanup { $display = $current->getPrefixedText(); $upper = $row->page_title; $lower = $wgContLang->lcfirst( $row->page_title ); - if( $upper == $lower ) { + if ( $upper == $lower ) { $this->output( "\"$display\" already lowercase.\n" ); return $this->progress( 0 ); } $target = Title::makeTitle( $row->page_namespace, $lower ); $targetDisplay = $target->getPrefixedText(); - if( $target->exists() ) { + if ( $target->exists() ) { $this->output( "\"$display\" skipped; \"$targetDisplay\" already exists\n" ); return $this->progress( 0 ); } - if( $this->dryrun ) { + if ( $this->dryrun ) { $this->output( "\"$display\" -> \"$targetDisplay\": DRY RUN, NOT MOVED\n" ); $ok = true; } else { $ok = $current->moveTo( $target, false, 'Converting page titles to lowercase' ); $this->output( "\"$display\" -> \"$targetDisplay\": $ok\n" ); } - if( $ok === true ) { + if ( $ok === true ) { $this->progress( 1 ); - if( $row->page_namespace == $this->namespace ) { + if ( $row->page_namespace == $this->namespace ) { $talk = $target->getTalkPage(); $row->page_namespace = $talk->getNamespace(); - if( $talk->exists() ) { + if ( $talk->exists() ) { return $this->processRow( $row ); } } @@ -94,4 +95,4 @@ class CapsCleanup extends TableCleanup { } $maintClass = "CapsCleanup"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/cleanupDupes.inc b/maintenance/cleanupDupes.inc deleted file mode 100644 index bb408007..00000000 --- a/maintenance/cleanupDupes.inc +++ /dev/null @@ -1,128 +0,0 @@ - -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - -/** - * If on the old non-unique indexes, check the cur table for duplicate - * entries and remove them... - * - * @file - * @ingroup Maintenance - */ - -function fixDupes( $fixthem = false) { - $dbw = wfGetDB( DB_MASTER ); - $cur = $dbw->tableName( 'cur' ); - $old = $dbw->tableName( 'old' ); - $dbw->query( "LOCK TABLES $cur WRITE, $old WRITE" ); - echo "Checking for duplicate cur table entries... (this may take a while on a large wiki)\n"; - $res = $dbw->query( << 1 -END - ); - $n = $dbw->numRows( $res ); - echo "Found $n titles with duplicate entries.\n"; - if( $n > 0 ) { - if( $fixthem ) { - echo "Correcting...\n"; - } else { - echo "Just a demo...\n"; - } - while( $row = $dbw->fetchObject( $res ) ) { - $ns = intval( $row->cur_namespace ); - $title = $dbw->addQuotes( $row->cur_title ); - - # Get the first responding ID; that'll be the one we keep. - $id = $dbw->selectField( 'cur', 'cur_id', array( - 'cur_namespace' => $row->cur_namespace, - 'cur_title' => $row->cur_title ) ); - - echo "$ns:$row->cur_title (canonical ID $id)\n"; - if( $id != $row->id ) { - echo " ** minimum ID $row->id; "; - $timeMin = $dbw->selectField( 'cur', 'cur_timestamp', array( - 'cur_id' => $row->id ) ); - $timeFirst = $dbw->selectField( 'cur', 'cur_timestamp', array( - 'cur_id' => $id ) ); - if( $timeMin == $timeFirst ) { - echo "timestamps match at $timeFirst; ok\n"; - } else { - echo "timestamps don't match! min: $timeMin, first: $timeFirst; "; - if( $timeMin > $timeFirst ) { - $id = $row->id; - echo "keeping minimum: $id\n"; - } else { - echo "keeping first: $id\n"; - } - } - } - - if( $fixthem ) { - $dbw->query( <<query( <<query( 'UNLOCK TABLES' ); - if( $fixthem ) { - echo "Done.\n"; - } else { - echo "Run again with --fix option to delete the duplicates.\n"; - } -} - -function checkDupes( $fixthem = false, $indexonly = false ) { - $dbw = wfGetDB( DB_MASTER ); - if( $dbw->indexExists( 'cur', 'name_title' ) && - $dbw->indexUnique( 'cur', 'name_title' ) ) { - echo wfWikiID().": cur table has the current unique index; no duplicate entries.\n"; - } elseif( $dbw->indexExists( 'cur', 'name_title_dup_prevention' ) ) { - echo wfWikiID().": cur table has a temporary name_title_dup_prevention unique index; no duplicate entries.\n"; - } else { - echo wfWikiID().": cur table has the old non-unique index and may have duplicate entries.\n"; - if( !$indexonly ) { - fixDupes( $fixthem ); - } - } -} diff --git a/maintenance/cleanupImages.php b/maintenance/cleanupImages.php index db13f4c9..b25b9bbe 100644 --- a/maintenance/cleanupImages.php +++ b/maintenance/cleanupImages.php @@ -1,5 +1,5 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/cleanupTable.inc' ); +require_once( dirname( __FILE__ ) . '/cleanupTable.inc' ); class ImageCleanup extends TableCleanup { protected $defaultParams = array( @@ -47,38 +48,38 @@ class ImageCleanup extends TableCleanup { global $wgContLang; $source = $row->img_name; - if( $source == '' ) { + if ( $source == '' ) { // Ye olde empty rows. Just kill them. $this->killRow( $source ); return $this->progress( 1 ); } - + $cleaned = $source; - + // About half of old bad image names have percent-codes $cleaned = rawurldecode( $cleaned ); // We also have some HTML entities there $cleaned = Sanitizer::decodeCharReferences( $cleaned ); - + // Some are old latin-1 $cleaned = $wgContLang->checkTitleEncoding( $cleaned ); - + // Many of remainder look like non-normalized unicode $cleaned = $wgContLang->normalize( $cleaned ); - + $title = Title::makeTitleSafe( NS_FILE, $cleaned ); - - if( is_null( $title ) ) { + + if ( is_null( $title ) ) { $this->output( "page $source ($cleaned) is illegal.\n" ); $safe = $this->buildSafeTitle( $cleaned ); - if( $safe === false ) + if ( $safe === false ) return $this->progress( 0 ); $this->pokeFile( $source, $safe ); return $this->progress( 1 ); } - if( $title->getDBkey() !== $source ) { + if ( $title->getDBkey() !== $source ) { $munged = $title->getDBkey(); $this->output( "page $source ($munged) doesn't match self.\n" ); $this->pokeFile( $source, $munged ); @@ -89,7 +90,7 @@ class ImageCleanup extends TableCleanup { } private function killRow( $name ) { - if( $this->dryrun ) { + if ( $this->dryrun ) { $this->output( "DRY RUN: would delete bogus row '$name'\n" ); } else { $this->output( "deleting bogus row '$name'\n" ); @@ -99,7 +100,7 @@ class ImageCleanup extends TableCleanup { __METHOD__ ); } } - + private function filePath( $name ) { if ( !isset( $this->repo ) ) { $this->repo = RepoGroup::singleton()->getLocalRepo(); @@ -114,14 +115,14 @@ class ImageCleanup extends TableCleanup { private function pageExists( $name, $db ) { return $db->selectField( 'page', '1', array( 'page_namespace' => NS_FILE, 'page_title' => $name ), __METHOD__ ); } - + private function pokeFile( $orig, $new ) { $path = $this->filePath( $orig ); - if( !file_exists( $path ) ) { + if ( !file_exists( $path ) ) { $this->output( "missing file: $path\n" ); return $this->killRow( $orig ); } - + $db = wfGetDB( DB_MASTER ); /* @@ -134,18 +135,18 @@ class ImageCleanup extends TableCleanup { $version = 0; $final = $new; $conflict = ( $this->imageExists( $final, $db ) || - ( $this->pageExists( $orig, $db ) && $this->pageExists( $final, $db ) ) ); - - while( $conflict ) { + ( $this->pageExists( $orig, $db ) && $this->pageExists( $final, $db ) ) ); + + while ( $conflict ) { $this->output( "Rename conflicts with '$final'...\n" ); $version++; $final = $this->appendTitle( $new, "_$version" ); $conflict = ( $this->imageExists( $final, $db ) || $this->pageExists( $final, $db ) ); } - + $finalPath = $this->filePath( $final ); - - if( $this->dryrun ) { + + if ( $this->dryrun ) { $this->output( "DRY RUN: would rename $path to $finalPath\n" ); } else { $this->output( "renaming $path to $finalPath\n" ); @@ -164,14 +165,14 @@ class ImageCleanup extends TableCleanup { array( 'page_title' => $orig, 'page_namespace' => NS_FILE ), __METHOD__ ); $dir = dirname( $finalPath ); - if( !file_exists( $dir ) ) { - if( !wfMkdirParents( $dir ) ) { + if ( !file_exists( $dir ) ) { + if ( !wfMkdirParents( $dir ) ) { $this->log( "RENAME FAILED, COULD NOT CREATE $dir" ); $db->rollback(); return; } } - if( rename( $path, $finalPath ) ) { + if ( rename( $path, $finalPath ) ) { $db->commit(); } else { $this->error( "RENAME FAILED" ); @@ -191,16 +192,16 @@ class ImageCleanup extends TableCleanup { "/([^$wgLegalTitleChars]|~)/", array( $this, 'hexChar' ), $name ); - + $test = Title::makeTitleSafe( NS_FILE, $x ); - if( is_null( $test ) || $test->getDBkey() !== $x ) { + if ( is_null( $test ) || $test->getDBkey() !== $x ) { $this->error( "Unable to generate safe title from '$name', got '$x'" ); return false; } - + return $x; } } $maintClass = "ImageCleanup"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/cleanupRemovedModules.php b/maintenance/cleanupRemovedModules.php new file mode 100644 index 00000000..fb8afd2d --- /dev/null +++ b/maintenance/cleanupRemovedModules.php @@ -0,0 +1,89 @@ +mDescription = 'Remove cache entries for removed ResourceLoader modules from the database'; + $this->addOption( 'batchsize', 'Delete rows in batches of this size. Default: 500', false, true ); + $this->addOption( 'max-slave-lag', 'If the slave lag exceeds this many seconds, wait until it drops below this value. Default: 5', false, true ); + } + + public function execute() { + $dbw = wfGetDB( DB_MASTER ); + $rl = new ResourceLoader(); + $moduleNames = $rl->getModuleNames(); + $moduleList = implode( ', ', array_map( array( $dbw, 'addQuotes' ), $moduleNames ) ); + $limit = max( 1, intval( $this->getOption( 'batchsize', 500 ) ) ); + $maxlag = intval( $this->getOption( 'max-slave-lag', 5 ) ); + + $this->output( "Cleaning up module_deps table...\n" ); + $i = 1; + $modDeps = $dbw->tableName( 'module_deps' ); + do { + // $dbw->delete() doesn't support LIMIT :( + $where = $moduleList ? "md_module NOT IN ($moduleList)" : '1=1'; + $dbw->query( "DELETE FROM $modDeps WHERE $where LIMIT $limit", __METHOD__ ); + $numRows = $dbw->affectedRows(); + $this->output( "Batch $i: $numRows rows\n" ); + $i++; + wfWaitForSlaves( $maxlag ); + } while( $numRows > 0 ); + $this->output( "done\n" ); + + $this->output( "Cleaning up msg_resource table...\n" ); + $i = 1; + + $mrRes = $dbw->tableName( 'msg_resource' ); + do { + $where = $moduleList ? "mr_resource NOT IN ($moduleList)" : '1=1'; + $dbw->query( "DELETE FROM $mrRes WHERE $where LIMIT $limit", __METHOD__ ); + $numRows = $dbw->affectedRows(); + $this->output( "Batch $i: $numRows rows\n" ); + $i++; + wfWaitForSlaves( $maxlag ); + } while( $numRows > 0 ); + $this->output( "done\n" ); + + $this->output( "Cleaning up msg_resource_links table...\n" ); + $i = 1; + $msgResLinks = $dbw->tableName( 'msg_resource_links' ); + do { + $where = $moduleList ? "mrl_resource NOT IN ($moduleList)" : '1=1'; + $dbw->query( "DELETE FROM $msgResLinks WHERE $where LIMIT $limit", __METHOD__ ); + $numRows = $dbw->affectedRows(); + $this->output( "Batch $i: $numRows rows\n" ); + $i++; + wfWaitForSlaves( $maxlag ); + } while( $numRows > 0 ); + $this->output( "done\n" ); + } +} + +$maintClass = "CleanupRemovedModules"; +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/cleanupSpam.php b/maintenance/cleanupSpam.php index e78ffe41..39abe4c5 100644 --- a/maintenance/cleanupSpam.php +++ b/maintenance/cleanupSpam.php @@ -17,10 +17,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class CleanupSpam extends Maintenance { public function __construct() { @@ -31,7 +32,7 @@ class CleanupSpam extends Maintenance { } public function execute() { - global $wgLocalDatabases; + global $wgLocalDatabases, $wgUser; $username = wfMsg( 'spambot_username' ); $wgUser = User::newFromName( $username ); @@ -44,15 +45,15 @@ class CleanupSpam extends Maintenance { if ( !$like ) { $this->error( "Not a valid hostname specification: $spec", true ); } - - if ( $this->hasOption('all') ) { + + if ( $this->hasOption( 'all' ) ) { // Clean up spam on all wikis $this->output( "Finding spam on " . count( $wgLocalDatabases ) . " wikis\n" ); $found = false; foreach ( $wgLocalDatabases as $wikiID ) { $dbr = wfGetDB( DB_SLAVE, array(), $wikiID ); - $count = $dbr->selectField( 'externallinks', 'COUNT(*)', + $count = $dbr->selectField( 'externallinks', 'COUNT(*)', array( 'el_index' . $dbr->buildLike( $like ) ), __METHOD__ ); if ( $count ) { $found = true; @@ -68,7 +69,7 @@ class CleanupSpam extends Maintenance { // Clean up spam on this wiki $dbr = wfGetDB( DB_SLAVE ); - $res = $dbr->select( 'externallinks', array( 'DISTINCT el_from' ), + $res = $dbr->select( 'externallinks', array( 'DISTINCT el_from' ), array( 'el_index' . $dbr->buildLike( $like ) ), __METHOD__ ); $count = $dbr->numRows( $res ); $this->output( "Found $count articles containing $spec\n" ); @@ -87,15 +88,15 @@ class CleanupSpam extends Maintenance { $this->error( "Internal error: no page for ID $id" ); return; } - + $this->output( $title->getPrefixedDBkey() . " ..." ); $rev = Revision::newFromTitle( $title ); $revId = $rev->getId(); $currentRevId = $revId; - + while ( $rev && LinkFilter::matchEntry( $rev->getText() , $domain ) ) { # Revision::getPrevious can't be used in this way before MW 1.6 (Revision.php 1.26) - #$rev = $rev->getPrevious(); + # $rev = $rev->getPrevious(); $revId = $title->getPreviousRevisionID( $revId ); if ( $revId ) { $rev = Revision::newFromTitle( $title, $revId ); @@ -114,14 +115,12 @@ class CleanupSpam extends Maintenance { // Didn't find a non-spammy revision, blank the page $this->output( "blanking\n" ); $article = new Article( $title ); - $article->updateArticle( '', wfMsg( 'spam_blanking', $domain ), - false, false ); - + $article->doEdit( '', wfMsg( 'spam_blanking', $domain ) ); } else { // Revert to this revision $this->output( "reverting\n" ); $article = new Article( $title ); - $article->updateArticle( $rev->getText(), wfMsg( 'spam_reverting', $domain ), false, false ); + $article->doEdit( $rev->getText(), wfMsg( 'spam_reverting', $domain ), EDIT_UPDATE ); } $dbw->commit(); wfDoUpdates(); @@ -130,4 +129,4 @@ class CleanupSpam extends Maintenance { } $maintClass = "CleanupSpam"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/cleanupTable.inc b/maintenance/cleanupTable.inc index 3549a9a1..67a32510 100644 --- a/maintenance/cleanupTable.inc +++ b/maintenance/cleanupTable.inc @@ -17,10 +17,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class TableCleanup extends Maintenance { protected $defaultParams = array( @@ -44,7 +45,7 @@ class TableCleanup extends Maintenance { global $wgUser; $wgUser->setName( 'Conversion script' ); $this->dryrun = $this->hasOption( 'dry-run' ); - if( $this->dryrun ) { + if ( $this->dryrun ) { $this->output( "Checking for bad titles...\n" ); } else { $this->output( "Checking and fixing bad titles...\n" ); @@ -63,7 +64,7 @@ class TableCleanup extends Maintenance { protected function progress( $updated ) { $this->updated += $updated; $this->processed++; - if( $this->processed % $this->reportInterval != 0 ) { + if ( $this->processed % $this->reportInterval != 0 ) { return; } $portion = $this->processed / $this->count; @@ -74,7 +75,7 @@ class TableCleanup extends Maintenance { $estimatedTotalTime = $delta / $portion; $eta = $this->startTime + $estimatedTotalTime; - $this->output( + $this->output( sprintf( "%s %s: %6.2f%% done on %s; ETA %s [%d/%d] %.2f/sec <%.2f%% updated>\n", wfWikiID(), wfTimestamp( TS_DB, intval( $now ) ), @@ -84,7 +85,7 @@ class TableCleanup extends Maintenance { $this->processed, $this->count, $this->processed / $delta, - $updateRate * 100.0 + $updateRate * 100.0 ) ); flush(); @@ -94,9 +95,9 @@ class TableCleanup extends Maintenance { $dbr = wfGetDB( DB_SLAVE ); if ( array_diff( array_keys( $params ), - array( 'table', 'conds', 'index', 'callback' ) ) ) + array( 'table', 'conds', 'index', 'callback' ) ) ) { - throw new MWException( __METHOD__.': Missing parameter ' . implode( ', ', $params ) ); + throw new MWException( __METHOD__ . ': Missing parameter ' . implode( ', ', $params ) ); } $table = $params['table']; diff --git a/maintenance/cleanupTitles.php b/maintenance/cleanupTitles.php index ed714b2d..f03b7957 100644 --- a/maintenance/cleanupTitles.php +++ b/maintenance/cleanupTitles.php @@ -1,12 +1,12 @@ + * Copyright © 2005 Brion Vibber * http://www.mediawiki.org/ * * This program is free software; you can redistribute it and/or modify @@ -24,11 +24,12 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @author Brion Vibber * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/cleanupTable.inc' ); +require_once( dirname( __FILE__ ) . '/cleanupTable.inc' ); class TitleCleanup extends TableCleanup { public function __construct() { @@ -42,7 +43,7 @@ class TitleCleanup extends TableCleanup { $verified = $wgContLang->normalize( $display ); $title = Title::newFromText( $verified ); - if( !is_null( $title ) + if ( !is_null( $title ) && $title->canExist() && $title->getNamespace() == $row->page_namespace && $title->getDBkey() === $row->page_title ) @@ -50,10 +51,10 @@ class TitleCleanup extends TableCleanup { return $this->progress( 0 ); // all is fine } - if( $row->page_namespace == NS_FILE && $this->fileExists( $row->page_title ) ) { + if ( $row->page_namespace == NS_FILE && $this->fileExists( $row->page_title ) ) { $this->output( "file $row->page_title needs cleanup, please run cleanupImages.php.\n" ); return $this->progress( 0 ); - } elseif( is_null( $title ) ) { + } elseif ( is_null( $title ) ) { $this->output( "page $row->page_id ($display) is illegal.\n" ); $this->moveIllegalPage( $row ); return $this->progress( 1 ); @@ -77,23 +78,23 @@ class TitleCleanup extends TableCleanup { $legalized = preg_replace_callback( "!([^$legal])!", array( &$this, 'hexChar' ), $row->page_title ); - if( $legalized == '.' ) $legalized = '(dot)'; - if( $legalized == '_' ) $legalized = '(space)'; + if ( $legalized == '.' ) $legalized = '(dot)'; + if ( $legalized == '_' ) $legalized = '(space)'; $legalized = 'Broken/' . $legalized; $title = Title::newFromText( $legalized ); - if( is_null( $title ) ) { + if ( is_null( $title ) ) { $clean = 'Broken/id:' . $row->page_id; $this->output( "Couldn't legalize; form '$legalized' still invalid; using '$clean'\n" ); $title = Title::newFromText( $clean ); - } elseif( $title->exists() ) { + } elseif ( $title->exists() ) { $clean = 'Broken/id:' . $row->page_id; $this->output( "Legalized for '$legalized' exists; using '$clean'\n" ); $title = Title::newFromText( $clean ); } $dest = $title->getDBkey(); - if( $this->dryrun ) { + if ( $this->dryrun ) { $this->output( "DRY RUN: would rename $row->page_id ($row->page_namespace,'$row->page_title') to ($row->page_namespace,'$dest')\n" ); } else { $this->output( "renaming $row->page_id ($row->page_namespace,'$row->page_title') to ($row->page_namespace,'$dest')\n" ); @@ -106,28 +107,34 @@ class TitleCleanup extends TableCleanup { } protected function moveInconsistentPage( $row, $title ) { - if( $title->exists() || $title->getInterwiki() ) { - if( $title->getInterwiki() ) { + if ( $title->exists() || $title->getInterwiki() || !$title->canExist() ) { + if ( $title->getInterwiki() || !$title->canExist() ) { $prior = $title->getPrefixedDbKey(); } else { $prior = $title->getDBkey(); } + + # Old cleanupTitles could move articles there. See bug 23147. + $ns = $row->page_namespace; + if ( $ns < 0 ) $ns = 0; + $clean = 'Broken/' . $prior; - $verified = Title::makeTitleSafe( $row->page_namespace, $clean ); - if( $verified->exists() ) { + $verified = Title::makeTitleSafe( $ns, $clean ); + if ( $verified->exists() ) { $blah = "Broken/id:" . $row->page_id; $this->output( "Couldn't legalize; form '$clean' exists; using '$blah'\n" ); - $verified = Title::makeTitleSafe( $row->page_namespace, $blah ); + $verified = Title::makeTitleSafe( $ns, $blah ); } $title = $verified; } - if( is_null( $title ) ) { + if ( is_null( $title ) ) { $this->error( "Something awry; empty title.", true ); } $ns = $title->getNamespace(); $dest = $title->getDBkey(); - if( $this->dryrun ) { - $this->output( "DRY RUN: would rename $row->page_id ($row->page_namespace,'$row->page_title') to ($row->page_namespace,'$dest')\n" ); + + if ( $this->dryrun ) { + $this->output( "DRY RUN: would rename $row->page_id ($row->page_namespace,'$row->page_title') to ($ns,'$dest')\n" ); } else { $this->output( "renaming $row->page_id ($row->page_namespace,'$row->page_title') to ($ns,'$dest')\n" ); $dbw = wfGetDB( DB_MASTER ); @@ -145,4 +152,4 @@ class TitleCleanup extends TableCleanup { } $maintClass = "TitleCleanup"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/cleanupWatchlist.php b/maintenance/cleanupWatchlist.php index ed84b268..a9b20fea 100644 --- a/maintenance/cleanupWatchlist.php +++ b/maintenance/cleanupWatchlist.php @@ -1,5 +1,5 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/cleanupTable.inc' ); +require_once( dirname( __FILE__ ) . '/cleanupTable.inc' ); class WatchlistCleanup extends TableCleanup { protected $defaultParams = array( @@ -58,7 +59,7 @@ class WatchlistCleanup extends TableCleanup { $verified = $wgContLang->normalize( $display ); $title = Title::newFromText( $verified ); - if( $row->wl_user == 0 || is_null( $title ) || !$title->equals( $current ) ) { + if ( $row->wl_user == 0 || is_null( $title ) || !$title->equals( $current ) ) { $this->output( "invalid watch by {$row->wl_user} for ({$row->wl_namespace}, \"{$row->wl_title}\")\n" ); $updated = $this->removeWatch( $row ); $this->progress( $updated ); @@ -68,7 +69,7 @@ class WatchlistCleanup extends TableCleanup { } private function removeWatch( $row ) { - if( !$this->dryrun && $this->hasOption( 'fix' ) ) { + if ( !$this->dryrun && $this->hasOption( 'fix' ) ) { $dbw = wfGetDB( DB_MASTER ); $dbw->delete( 'watchlist', array( 'wl_user' => $row->wl_user, @@ -84,4 +85,4 @@ class WatchlistCleanup extends TableCleanup { } $maintClass = "WatchlistCleanup"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/clear_interwiki_cache.php b/maintenance/clear_interwiki_cache.php index a3510a06..953bd4ce 100644 --- a/maintenance/clear_interwiki_cache.php +++ b/maintenance/clear_interwiki_cache.php @@ -18,10 +18,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class ClearInterwikiCache extends Maintenance { @@ -42,7 +43,7 @@ class ClearInterwikiCache extends Maintenance { foreach ( $wgLocalDatabases as $db ) { $this->output( "$db..." ); foreach ( $prefixes as $prefix ) { - $wgMemc->delete("$db:interwiki:$prefix"); + $wgMemc->delete( "$db:interwiki:$prefix" ); } $this->output( "done\n" ); } @@ -50,4 +51,4 @@ class ClearInterwikiCache extends Maintenance { } $maintClass = "ClearInterwikiCache"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/clear_stats.php b/maintenance/clear_stats.php index 6a6a4981..8f91864e 100644 --- a/maintenance/clear_stats.php +++ b/maintenance/clear_stats.php @@ -1,7 +1,7 @@ delete("$db:stats:request_with_session"); - $wgMemc->delete("$db:stats:request_without_session"); - $wgMemc->delete("$db:stats:pcache_hit"); - $wgMemc->delete("$db:stats:pcache_miss_invalid"); - $wgMemc->delete("$db:stats:pcache_miss_expired"); - $wgMemc->delete("$db:stats:pcache_miss_absent"); - $wgMemc->delete("$db:stats:pcache_miss_stub"); - $wgMemc->delete("$db:stats:image_cache_hit"); - $wgMemc->delete("$db:stats:image_cache_miss"); - $wgMemc->delete("$db:stats:image_cache_update"); - $wgMemc->delete("$db:stats:diff_cache_hit"); - $wgMemc->delete("$db:stats:diff_cache_miss"); - $wgMemc->delete("$db:stats:diff_uncacheable"); + $wgMemc->delete( "$db:stats:request_with_session" ); + $wgMemc->delete( "$db:stats:request_without_session" ); + $wgMemc->delete( "$db:stats:pcache_hit" ); + $wgMemc->delete( "$db:stats:pcache_miss_invalid" ); + $wgMemc->delete( "$db:stats:pcache_miss_expired" ); + $wgMemc->delete( "$db:stats:pcache_miss_absent" ); + $wgMemc->delete( "$db:stats:pcache_miss_stub" ); + $wgMemc->delete( "$db:stats:image_cache_hit" ); + $wgMemc->delete( "$db:stats:image_cache_miss" ); + $wgMemc->delete( "$db:stats:image_cache_update" ); + $wgMemc->delete( "$db:stats:diff_cache_hit" ); + $wgMemc->delete( "$db:stats:diff_cache_miss" ); + $wgMemc->delete( "$db:stats:diff_uncacheable" ); } } } $maintClass = "clear_stats"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/commandLine.inc b/maintenance/commandLine.inc index 332527ba..4ae753ba 100644 --- a/maintenance/commandLine.inc +++ b/maintenance/commandLine.inc @@ -3,10 +3,11 @@ /** * Backwards-compatibility wrapper for old-style maintenance scripts */ -require( dirname(__FILE__) . '/Maintenance.php' ); +require( dirname( __FILE__ ) . '/Maintenance.php' ); +global $optionsWithArgs; if ( !isset( $optionsWithArgs ) ) { - $optionsWithArgs = array(); + $optionsWithArgs = array(); } class CommandLineInc extends Maintenance { @@ -42,5 +43,5 @@ class CommandLineInc extends Maintenance { } $maintClass = 'CommandLineInc'; -require( DO_MAINTENANCE ); +require( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/convertLinks.inc b/maintenance/convertLinks.inc deleted file mode 100644 index 7c7b8aff..00000000 --- a/maintenance/convertLinks.inc +++ /dev/null @@ -1,218 +0,0 @@ -tableNamesN( 'cur', 'links', 'links_temp', 'links_backup' ); - - // Get database-agnostic limit clause - $sql_limit = $dbw->limitResult( "SELECT l_from FROM $links", 1 ); - $res = $dbw->query( $sql_limit ); - if ( $dbw->fieldType( $res, 0 ) == "int" ) { - wfOut( "Schema already converted\n" ); - return; - } - - $res = $dbw->query( "SELECT COUNT(*) AS count FROM $links" ); - $row = $dbw->fetchObject($res); - $numRows = $row->count; - $dbw->freeResult( $res ); - - if ( $numRows == 0 ) { - wfOut( "Updating schema (no rows to convert)...\n" ); - createTempTable(); - } else { - if ( $logPerformance ) { $fh = fopen ( $perfLogFilename, "w" ); } - $baseTime = $startTime = getMicroTime(); - # Create a title -> cur_id map - wfOut( "Loading IDs from $cur table...\n" ); - performanceLog ( "Reading $numRows rows from cur table...\n" ); - performanceLog ( "rows read vs seconds elapsed:\n" ); - - $dbw->bufferResults( false ); - $res = $dbw->query( "SELECT cur_namespace,cur_title,cur_id FROM $cur" ); - $ids = array(); - - while ( $row = $dbw->fetchObject( $res ) ) { - $title = $row->cur_title; - if ( $row->cur_namespace ) { - $title = $wgLang->getNsText( $row->cur_namespace ) . ":$title"; - } - $ids[$title] = $row->cur_id; - $curRowsRead++; - if ($reportCurReadProgress) { - if (($curRowsRead % $curReadReportInterval) == 0) { - performanceLog( $curRowsRead . " " . (getMicroTime() - $baseTime) . "\n" ); - wfOut( "\t$curRowsRead rows of $cur table read.\n" ); - } - } - } - $dbw->freeResult( $res ); - $dbw->bufferResults( true ); - wfOut( "Finished loading IDs.\n\n" ); - performanceLog( "Took " . (getMicroTime() - $baseTime) . " seconds to load IDs.\n\n" ); - #-------------------------------------------------------------------- - - # Now, step through the links table (in chunks of $linksConvInsertInterval rows), - # convert, and write to the new table. - createTempTable(); - performanceLog( "Resetting timer.\n\n" ); - $baseTime = getMicroTime(); - wfOut( "Processing $numRows rows from $links table...\n" ); - performanceLog( "Processing $numRows rows from $links table...\n" ); - performanceLog( "rows inserted vs seconds elapsed:\n" ); - - for ($rowOffset = $initialRowOffset; $rowOffset < $numRows; $rowOffset += $linksConvInsertInterval) { - $sqlRead = "SELECT * FROM $links "; - $sqlRead = $dbw->limitResult($sqlRead, $linksConvInsertInterval,$rowOffset); - $res = $dbw->query($sqlRead); - if ( $noKeys ) { - $sqlWrite = array("INSERT INTO $links_temp (l_from,l_to) VALUES "); - } else { - $sqlWrite = array("INSERT IGNORE INTO $links_temp (l_from,l_to) VALUES "); - } - - $tuplesAdded = 0; # no tuples added to INSERT yet - while ( $row = $dbw->fetchObject($res) ) { - $fromTitle = $row->l_from; - if ( array_key_exists( $fromTitle, $ids ) ) { # valid title - $from = $ids[$fromTitle]; - $to = $row->l_to; - if ( $tuplesAdded != 0 ) { - $sqlWrite[] = ","; - } - $sqlWrite[] = "($from,$to)"; - $tuplesAdded++; - } else { # invalid title - $numBadLinks++; - } - } - $dbw->freeResult($res); - #wfOut( "rowOffset: $rowOffset\ttuplesAdded: $tuplesAdded\tnumBadLinks: $numBadLinks\n" ); - if ( $tuplesAdded != 0 ) { - if ($reportLinksConvProgress) { - wfOut( "Inserting $tuplesAdded tuples into $links_temp..." ); - } - $dbw->query( implode("",$sqlWrite) ); - $totalTuplesInserted += $tuplesAdded; - if ($reportLinksConvProgress) - wfOut( " done. Total $totalTuplesInserted tuples inserted.\n" ); - performanceLog( $totalTuplesInserted . " " . (getMicroTime() - $baseTime) . "\n" ); - } - } - wfOut( "$totalTuplesInserted valid titles and $numBadLinks invalid titles were processed.\n\n" ); - performanceLog( "$totalTuplesInserted valid titles and $numBadLinks invalid titles were processed.\n" ); - performanceLog( "Total execution time: " . (getMicroTime() - $startTime) . " seconds.\n" ); - if ( $logPerformance ) { fclose ( $fh ); } - } - #-------------------------------------------------------------------- - - if ( $overwriteLinksTable ) { - $dbConn = Database::newFromParams( $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname ); - if (!($dbConn->isOpen())) { - wfOut( "Opening connection to database failed.\n" ); - return; - } - # Check for existing links_backup, and delete it if it exists. - wfOut( "Dropping backup links table if it exists..." ); - $dbConn->query( "DROP TABLE IF EXISTS $links_backup", DB_MASTER); - wfOut( " done.\n" ); - - # Swap in the new table, and move old links table to links_backup - wfOut( "Swapping tables '$links' to '$links_backup'; '$links_temp' to '$links'..." ); - $dbConn->query( "RENAME TABLE links TO $links_backup, $links_temp TO $links", DB_MASTER ); - wfOut( " done.\n\n" ); - - $dbConn->close(); - wfOut( "Conversion complete. The old table remains at $links_backup;\n" ); - wfOut( "delete at your leisure.\n" ); - } else { - wfOut( "Conversion complete. The converted table is at $links_temp;\n" ); - wfOut( "the original links table is unchanged.\n" ); - } -} - -#-------------------------------------------------------------------- - -function createTempTable() { - global $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname; - global $noKeys; - $dbConn = Database::newFromParams( $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname ); - - if (!($dbConn->isOpen())) { - wfOut( "Opening connection to database failed.\n" ); - return; - } - $links_temp = $dbConn->tableName( 'links_temp' ); - - wfOut( "Dropping temporary links table if it exists..." ); - $dbConn->query( "DROP TABLE IF EXISTS $links_temp"); - wfOut( " done.\n" ); - - wfOut( "Creating temporary links table..." ); - if ( $noKeys ) { - $dbConn->query( "CREATE TABLE $links_temp ( " . - "l_from int(8) unsigned NOT NULL default '0', " . - "l_to int(8) unsigned NOT NULL default '0')"); - } else { - $dbConn->query( "CREATE TABLE $links_temp ( " . - "l_from int(8) unsigned NOT NULL default '0', " . - "l_to int(8) unsigned NOT NULL default '0', " . - "UNIQUE KEY l_from(l_from,l_to), " . - "KEY (l_to))"); - } - wfOut( " done.\n\n" ); -} - -function performanceLog( $text ) { - global $logPerformance, $fh; - if ( $logPerformance ) { - fwrite( $fh, $text ); - } -} - -function getMicroTime() { # return time in seconds, with microsecond accuracy - list($usec, $sec) = explode(" ", microtime()); - return ((float)$usec + (float)$sec); -} diff --git a/maintenance/convertLinks.php b/maintenance/convertLinks.php index 415662a0..b7a55d57 100644 --- a/maintenance/convertLinks.php +++ b/maintenance/convertLinks.php @@ -18,95 +18,111 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class ConvertLinks extends Maintenance { + private $logPerformance; public function __construct() { parent::__construct(); $this->mDescription = "Convert from the old links schema (string->ID) to the new schema (ID->ID) The wiki should be put into read-only mode while this script executes"; + + $this->addArg( 'logperformance', "Log performance to perfLogFilename.", false ); + $this->addArg( 'perfLogFilename', "Filename where performance is logged if --logperformance was set (defaults to 'convLinksPerf.txt').", false ); + $this->addArg( 'keep-links-table', "Don't overwrite the old links table with the new one, leave the new table at links_temp.", false ); + $this->addArg( 'nokeys', "Don't create keys, and so allow duplicates in the new links table.\n +This gives a huge speed improvement for very large links tables which are MyISAM." /* (What about InnoDB?) */, false ); + } + + public function getDbType() { + return Maintenance::DB_ADMIN; } public function execute() { - global $wgDBtype; - if( $wgDBtype == 'postgres' ) { - $this->output( "Links table already ok on Postgres.\n" ); + $dbw = wfGetDB( DB_MASTER ); + + $type = $dbw->getType(); + if ( $type != 'mysql' ) { + $this->output( "Link table conversion not necessary for $type\n" ); return; } - $this->output( "Converting links table to ID-ID...\n" ); + global $wgContLang; - global $wgLang, $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname; - global $noKeys, $logPerformance, $fh; - - $tuplesAdded = $numBadLinks = $curRowsRead = 0; #counters etc + $numBadLinks = $curRowsRead = 0; # counters etc $totalTuplesInserted = 0; # total tuples INSERTed into links_temp - - $reportCurReadProgress = true; #whether or not to give progress reports while reading IDs from cur table - $curReadReportInterval = 1000; #number of rows between progress reports - - $reportLinksConvProgress = true; #whether or not to give progress reports during conversion - $linksConvInsertInterval = 1000; #number of rows per INSERT - + + $reportCurReadProgress = true; # whether or not to give progress reports while reading IDs from cur table + $curReadReportInterval = 1000; # number of rows between progress reports + + $reportLinksConvProgress = true; # whether or not to give progress reports during conversion + $linksConvInsertInterval = 1000; # number of rows per INSERT + $initialRowOffset = 0; - #$finalRowOffset = 0; # not used yet; highest row number from links table to process - - # Overwrite the old links table with the new one. If this is set to false, - # the new table will be left at links_temp. - $overwriteLinksTable = true; - - # Don't create keys, and so allow duplicates in the new links table. - # This gives a huge speed improvement for very large links tables which are MyISAM. (What about InnoDB?) - $noKeys = false; - - - $logPerformance = false; # output performance data to a file - $perfLogFilename = "convLinksPerf.txt"; - #-------------------------------------------------------------------- - - $dbw = wfGetDB( DB_MASTER ); - list ($cur, $links, $links_temp, $links_backup) = $dbw->tableNamesN( 'cur', 'links', 'links_temp', 'links_backup' ); - + # $finalRowOffset = 0; # not used yet; highest row number from links table to process + + $overwriteLinksTable = !$this->hasOption( 'keep-links-table' ); + $noKeys = $this->hasOption( 'noKeys' ); + $this->logPerformance = $this->hasOption( 'logperformance' ); + $perfLogFilename = $this->getArg( 'perfLogFilename', "convLinksPerf.txt" ); + + # -------------------------------------------------------------------- + + list ( $cur, $links, $links_temp, $links_backup ) = $dbw->tableNamesN( 'cur', 'links', 'links_temp', 'links_backup' ); + + if( $dbw->tableExists( 'pagelinks' ) ) { + $this->output( "...have pagelinks; skipping old links table updates\n" ); + return; + } + $res = $dbw->query( "SELECT l_from FROM $links LIMIT 1" ); if ( $dbw->fieldType( $res, 0 ) == "int" ) { $this->output( "Schema already converted\n" ); return; } - + $res = $dbw->query( "SELECT COUNT(*) AS count FROM $links" ); - $row = $dbw->fetchObject($res); + $row = $dbw->fetchObject( $res ); $numRows = $row->count; $dbw->freeResult( $res ); - + if ( $numRows == 0 ) { $this->output( "Updating schema (no rows to convert)...\n" ); $this->createTempTable(); } else { - if ( $logPerformance ) { $fh = fopen ( $perfLogFilename, "w" ); } + $fh = false; + if ( $this->logPerformance ) { + $fh = fopen ( $perfLogFilename, "w" ); + if ( !$fh ) { + $this->error( "Couldn't open $perfLogFilename" ); + $this->logPerformance = false; + } + } $baseTime = $startTime = $this->getMicroTime(); # Create a title -> cur_id map $this->output( "Loading IDs from $cur table...\n" ); - $this->performanceLog ( "Reading $numRows rows from cur table...\n" ); - $this->performanceLog ( "rows read vs seconds elapsed:\n" ); + $this->performanceLog ( $fh, "Reading $numRows rows from cur table...\n" ); + $this->performanceLog ( $fh, "rows read vs seconds elapsed:\n" ); $dbw->bufferResults( false ); $res = $dbw->query( "SELECT cur_namespace,cur_title,cur_id FROM $cur" ); $ids = array(); - while ( $row = $dbw->fetchObject( $res ) ) { + foreach ( $res as $row ) { $title = $row->cur_title; if ( $row->cur_namespace ) { - $title = $wgLang->getNsText( $row->cur_namespace ) . ":$title"; + $title = $wgContLang->getNsText( $row->cur_namespace ) . ":$title"; } $ids[$title] = $row->cur_id; $curRowsRead++; - if ($reportCurReadProgress) { - if (($curRowsRead % $curReadReportInterval) == 0) { - $this->performanceLog( $curRowsRead . " " . ($this->getMicroTime() - $baseTime) . "\n" ); + if ( $reportCurReadProgress ) { + if ( ( $curRowsRead % $curReadReportInterval ) == 0 ) { + $this->performanceLog( $fh, $curRowsRead . " " . ( $this->getMicroTime() - $baseTime ) . "\n" ); $this->output( "\t$curRowsRead rows of $cur table read.\n" ); } } @@ -114,30 +130,31 @@ The wiki should be put into read-only mode while this script executes"; $dbw->freeResult( $res ); $dbw->bufferResults( true ); $this->output( "Finished loading IDs.\n\n" ); - $this->performanceLog( "Took " . ($this->getMicroTime() - $baseTime) . " seconds to load IDs.\n\n" ); - #-------------------------------------------------------------------- - + $this->performanceLog( $fh, "Took " . ( $this->getMicroTime() - $baseTime ) . " seconds to load IDs.\n\n" ); + + # -------------------------------------------------------------------- + # Now, step through the links table (in chunks of $linksConvInsertInterval rows), # convert, and write to the new table. $this->createTempTable(); - $this->performanceLog( "Resetting timer.\n\n" ); + $this->performanceLog( $fh, "Resetting timer.\n\n" ); $baseTime = $this->getMicroTime(); $this->output( "Processing $numRows rows from $links table...\n" ); - $this->performanceLog( "Processing $numRows rows from $links table...\n" ); - $this->performanceLog( "rows inserted vs seconds elapsed:\n" ); - - for ($rowOffset = $initialRowOffset; $rowOffset < $numRows; $rowOffset += $linksConvInsertInterval) { + $this->performanceLog( $fh, "Processing $numRows rows from $links table...\n" ); + $this->performanceLog( $fh, "rows inserted vs seconds elapsed:\n" ); + + for ( $rowOffset = $initialRowOffset; $rowOffset < $numRows; $rowOffset += $linksConvInsertInterval ) { $sqlRead = "SELECT * FROM $links "; - $sqlRead = $dbw->limitResult($sqlRead, $linksConvInsertInterval,$rowOffset); - $res = $dbw->query($sqlRead); + $sqlRead = $dbw->limitResult( $sqlRead, $linksConvInsertInterval, $rowOffset ); + $res = $dbw->query( $sqlRead ); if ( $noKeys ) { - $sqlWrite = array("INSERT INTO $links_temp (l_from,l_to) VALUES "); + $sqlWrite = array( "INSERT INTO $links_temp (l_from,l_to) VALUES " ); } else { - $sqlWrite = array("INSERT IGNORE INTO $links_temp (l_from,l_to) VALUES "); + $sqlWrite = array( "INSERT IGNORE INTO $links_temp (l_from,l_to) VALUES " ); } - + $tuplesAdded = 0; # no tuples added to INSERT yet - while ( $row = $dbw->fetchObject($res) ) { + foreach ( $res as $row ) { $fromTitle = $row->l_from; if ( array_key_exists( $fromTitle, $ids ) ) { # valid title $from = $ids[$fromTitle]; @@ -151,43 +168,40 @@ The wiki should be put into read-only mode while this script executes"; $numBadLinks++; } } - $dbw->freeResult($res); - #$this->output( "rowOffset: $rowOffset\ttuplesAdded: $tuplesAdded\tnumBadLinks: $numBadLinks\n" ); + $dbw->freeResult( $res ); + # $this->output( "rowOffset: $rowOffset\ttuplesAdded: $tuplesAdded\tnumBadLinks: $numBadLinks\n" ); if ( $tuplesAdded != 0 ) { - if ($reportLinksConvProgress) { + if ( $reportLinksConvProgress ) { $this->output( "Inserting $tuplesAdded tuples into $links_temp..." ); } - $dbw->query( implode("",$sqlWrite) ); + $dbw->query( implode( "", $sqlWrite ) ); $totalTuplesInserted += $tuplesAdded; - if ($reportLinksConvProgress) + if ( $reportLinksConvProgress ) $this->output( " done. Total $totalTuplesInserted tuples inserted.\n" ); - $this->performanceLog( $totalTuplesInserted . " " . ($this->getMicroTime() - $baseTime) . "\n" ); + $this->performanceLog( $fh, $totalTuplesInserted . " " . ( $this->getMicroTime() - $baseTime ) . "\n" ); } } $this->output( "$totalTuplesInserted valid titles and $numBadLinks invalid titles were processed.\n\n" ); - $this->performanceLog( "$totalTuplesInserted valid titles and $numBadLinks invalid titles were processed.\n" ); - $this->performanceLog( "Total execution time: " . ($this->getMicroTime() - $startTime) . " seconds.\n" ); - if ( $logPerformance ) { fclose ( $fh ); } + $this->performanceLog( $fh, "$totalTuplesInserted valid titles and $numBadLinks invalid titles were processed.\n" ); + $this->performanceLog( $fh, "Total execution time: " . ( $this->getMicroTime() - $startTime ) . " seconds.\n" ); + if ( $this->logPerformance ) { + fclose ( $fh ); + } } - #-------------------------------------------------------------------- - + # -------------------------------------------------------------------- + if ( $overwriteLinksTable ) { - $dbConn = Database::newFromParams( $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname ); - if (!($dbConn->isOpen())) { - $this->output( "Opening connection to database failed.\n" ); - return; - } # Check for existing links_backup, and delete it if it exists. $this->output( "Dropping backup links table if it exists..." ); - $dbConn->query( "DROP TABLE IF EXISTS $links_backup", DB_MASTER); + $dbw->query( "DROP TABLE IF EXISTS $links_backup", DB_MASTER ); $this->output( " done.\n" ); - + # Swap in the new table, and move old links table to links_backup $this->output( "Swapping tables '$links' to '$links_backup'; '$links_temp' to '$links'..." ); - $dbConn->query( "RENAME TABLE links TO $links_backup, $links_temp TO $links", DB_MASTER ); + $dbw->query( "RENAME TABLE links TO $links_backup, $links_temp TO $links", DB_MASTER ); $this->output( " done.\n\n" ); - - $dbConn->close(); + + $dbw->close(); $this->output( "Conversion complete. The old table remains at $links_backup;\n" ); $this->output( "delete at your leisure.\n" ); } else { @@ -197,47 +211,44 @@ The wiki should be put into read-only mode while this script executes"; } private function createTempTable() { - global $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname; - global $noKeys; - $dbConn = Database::newFromParams( $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname ); + $dbConn = wfGetDB( DB_MASTER ); - if (!($dbConn->isOpen())) { + if ( !( $dbConn->isOpen() ) ) { $this->output( "Opening connection to database failed.\n" ); return; } $links_temp = $dbConn->tableName( 'links_temp' ); $this->output( "Dropping temporary links table if it exists..." ); - $dbConn->query( "DROP TABLE IF EXISTS $links_temp"); + $dbConn->query( "DROP TABLE IF EXISTS $links_temp" ); $this->output( " done.\n" ); $this->output( "Creating temporary links table..." ); - if ( $noKeys ) { + if ( $this->hasOption( 'noKeys' ) ) { $dbConn->query( "CREATE TABLE $links_temp ( " . "l_from int(8) unsigned NOT NULL default '0', " . - "l_to int(8) unsigned NOT NULL default '0')"); + "l_to int(8) unsigned NOT NULL default '0')" ); } else { $dbConn->query( "CREATE TABLE $links_temp ( " . "l_from int(8) unsigned NOT NULL default '0', " . "l_to int(8) unsigned NOT NULL default '0', " . "UNIQUE KEY l_from(l_from,l_to), " . - "KEY (l_to))"); + "KEY (l_to))" ); } $this->output( " done.\n\n" ); } - private function performanceLog( $text ) { - global $logPerformance, $fh; - if ( $logPerformance ) { + private function performanceLog( $fh, $text ) { + if ( $this->logPerformance ) { fwrite( $fh, $text ); } } private function getMicroTime() { # return time in seconds, with microsecond accuracy - list($usec, $sec) = explode(" ", microtime()); - return ((float)$usec + (float)$sec); + list( $usec, $sec ) = explode( " ", microtime() ); + return ( (float)$usec + (float)$sec ); } } $maintClass = "ConvertLinks"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/convertUserOptions.php b/maintenance/convertUserOptions.php index 657a82c1..278d40ff 100644 --- a/maintenance/convertUserOptions.php +++ b/maintenance/convertUserOptions.php @@ -17,10 +17,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class ConvertUserOptions extends Maintenance { @@ -30,24 +31,24 @@ class ConvertUserOptions extends Maintenance { parent::__construct(); $this->mDescription = "Convert user options from old to new system"; } - + public function execute() { $this->output( "Beginning batch conversion of user options.\n" ); $id = 0; $dbw = wfGetDB( DB_MASTER ); - while ($id !== null) { - $idCond = 'user_id>'.$dbw->addQuotes( $id ); - $optCond = "user_options!=".$dbw->addQuotes( '' ); // For compatibility + while ( $id !== null ) { + $idCond = 'user_id>' . $dbw->addQuotes( $id ); + $optCond = "user_options!=" . $dbw->addQuotes( '' ); // For compatibility $res = $dbw->select( 'user', '*', array( $optCond, $idCond ), __METHOD__, array( 'LIMIT' => 50, 'FOR UPDATE' ) ); $id = $this->convertOptionBatch( $res, $dbw ); $dbw->commit(); - + wfWaitForSlaves( 1 ); - - if ($id) + + if ( $id ) $this->output( "--Converted to ID $id\n" ); } $this->output( "Conversion done. Converted " . $this->mConversionCount . " user records.\n" ); @@ -57,16 +58,16 @@ class ConvertUserOptions extends Maintenance { $id = null; foreach ( $res as $row ) { $this->mConversionCount++; - + $u = User::newFromRow( $row ); - + $u->saveSettings(); $id = $row->user_id; } - + return $id; } } $maintClass = "ConvertUserOptions"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/createAndPromote.php b/maintenance/createAndPromote.php index 391d1226..8bff284a 100644 --- a/maintenance/createAndPromote.php +++ b/maintenance/createAndPromote.php @@ -1,5 +1,4 @@ */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class CreateAndPromote extends Maintenance { @@ -35,41 +35,41 @@ class CreateAndPromote extends Maintenance { } public function execute() { - $username = $this->getArg(0); - $password = $this->getArg(1); - + $username = $this->getArg( 0 ); + $password = $this->getArg( 1 ); + $this->output( wfWikiID() . ": Creating and promoting User:{$username}..." ); - + $user = User::newFromName( $username ); - if( !is_object( $user ) ) { + if ( !is_object( $user ) ) { $this->error( "invalid username.", true ); - } elseif( 0 != $user->idForName() ) { + } elseif ( 0 != $user->idForName() ) { $this->error( "account exists.", true ); } # Try to set the password try { $user->setPassword( $password ); - } catch( PasswordError $pwe ) { + } catch ( PasswordError $pwe ) { $this->error( $pwe->getText(), true ); } # Insert the account into the database $user->addToDatabase(); $user->saveSettings(); - + # Promote user $user->addGroup( 'sysop' ); - if( $this->hasOption( 'bureaucrat' ) ) + if ( $this->hasOption( 'bureaucrat' ) ) $user->addGroup( 'bureaucrat' ); - + # Increment site_stats.ss_users $ssu = new SiteStatsUpdate( 0, 0, 0, 0, 1 ); $ssu->doUpdate(); - + $this->output( "done.\n" ); } } $maintClass = "CreateAndPromote"; -require_once( DO_MAINTENANCE ); \ No newline at end of file +require_once( RUN_MAINTENANCE_IF_MAIN ); \ No newline at end of file diff --git a/maintenance/cssjanus/COPYING b/maintenance/cssjanus/COPYING new file mode 100644 index 00000000..3f2c8953 --- /dev/null +++ b/maintenance/cssjanus/COPYING @@ -0,0 +1,13 @@ + Copyright 2008 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/maintenance/cssjanus/LICENSE b/maintenance/cssjanus/LICENSE new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/maintenance/cssjanus/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/maintenance/cssjanus/README b/maintenance/cssjanus/README new file mode 100644 index 00000000..9b922156 --- /dev/null +++ b/maintenance/cssjanus/README @@ -0,0 +1,91 @@ +=CSSJanus= + +_Flips CSS from LTR to an RTL orienation and vice-versa_ + +Author: `Lindsey Simon ` + +==Introduction== + +CSSJanus is CSS parser utility designed to aid the conversion of a website's +layout from left-to-right(LTR) to right-to-left(RTL). The script was born out of +a need to convert CSS for RTL languages when tables are not being used for layout (since tables will automatically reorder TD's in RTL). +CSSJanus will change most of the obvious CSS property names and their values as +well as some not-so-obvious ones (cursor, background-position %, etc...). +The script is designed to offer flexibility to account for cases when you do +not want to change certain rules which exist to account for bidirectional text +display bugs, as well as situations where you may or may not want to flip annotations inside of the background url string. +Note that you can disable CSSJanus from running on an entire class or any +rule within a class by prepending a /* @noflip */ comment before the rule(s) +you want CSSJanus to ignore. + +CSSJanus itself is not always enough to make a website that works in a LTR +language context work in a RTL language all the way, but it is a start. + +==Getting the code== + +View the trunk at: + + http://cssjanus.googlecode.com/svn/trunk/ + +Check out the latest development version anonymously with: + +{{{ + $ svn checkout http://cssjanus.googlecode.com/svn/trunk/ cssjanus +}}} + +==Using== + +Usage: + ./cssjanus.py < file.css > file-rtl.css +Flags: + --swap_left_right_in_url: Fixes "left"/"right" string within urls. + Ex: ./cssjanus.py --swap_left_right_in_url < file.css > file_rtl.css + --swap_ltr_rtl_in_url: Fixes "ltr"/"rtl" string within urls. + Ex: ./cssjanus.py --swap_ltr_rtl_in_url < file.css > file_rtl.css + +If you'd like to make use of the webapp version of cssjanus, you'll need to +download the Google App Engine SDK + http://code.google.com/appengine/downloads.html +and also drop a "django" directory into this directory, with the latest svn +from django. You should be good to go with that setup. Please let me know +otherwise. + +==Bugs, Patches== + +Patches and bug reports are welcome, just please keep the style +consistent with the original source. If you find a bug, please include a diff +of cssjanus_test.py with the bug included as a new unit test which fails. It +will make understanding and fixing the bug easier. + +==Todo== + +* Include some helpers for some typical bidi text solutions? +* Aural CSS (azimuth) swapping? + +==Contributors== + +Additional thanks to Mike Samuel for his work on csslex.py, Andy Perelson for +his help coding and reviewing, Stephen Zabel for his help with i18n and my sanity, +and to Eric Meyer for his thoughtful input. +Thanks to Junyu Wang for the Chinese translation. +Thanks to Masashi Kawashima for the Japanese translation. +Thanks to Taaryk Taar and Tariq Al-Omaireeni for an updated Arabic translation. +Thanks to Jens Meiert for the German translation. + +==License== + +{{{ + Copyright 2008 Google Inc. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the 'License'); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an 'AS IS' BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +}}} diff --git a/maintenance/cssjanus/cssjanus.py b/maintenance/cssjanus/cssjanus.py new file mode 100644 index 00000000..dd14bd58 --- /dev/null +++ b/maintenance/cssjanus/cssjanus.py @@ -0,0 +1,574 @@ +#!/usr/bin/python +# +# Copyright 2008 Google Inc. All Rights Reserved. + +"""Converts a LeftToRight Cascading Style Sheet into a RightToLeft one. + + This is a utility script for replacing "left" oriented things in a CSS file + like float, padding, margin with "right" oriented values. + It also does the opposite. + The goal is to be able to conditionally serve one large, cat'd, compiled CSS + file appropriate for LeftToRight oriented languages and RightToLeft ones. + This utility will hopefully help your structural layout done in CSS in + terms of its RTL compatibility. It will not help with some of the more + complicated bidirectional text issues. +""" + +__author__ = 'elsigh@google.com (Lindsey Simon)' +__version__ = '0.1' + +import logging +import re +import sys +import getopt +import os + +import csslex + +logging.getLogger().setLevel(logging.INFO) + +# Global for the command line flags. +SWAP_LTR_RTL_IN_URL_DEFAULT = False +SWAP_LEFT_RIGHT_IN_URL_DEFAULT = False +FLAGS = {'swap_ltr_rtl_in_url': SWAP_LTR_RTL_IN_URL_DEFAULT, + 'swap_left_right_in_url': SWAP_LEFT_RIGHT_IN_URL_DEFAULT} + +# Generic token delimiter character. +TOKEN_DELIMITER = '~' + +# This is a temporary match token we use when swapping strings. +TMP_TOKEN = '%sTMP%s' % (TOKEN_DELIMITER, TOKEN_DELIMITER) + +# Token to be used for joining lines. +TOKEN_LINES = '%sJ%s' % (TOKEN_DELIMITER, TOKEN_DELIMITER) + +# Global constant text strings for CSS value matches. +LTR = 'ltr' +RTL = 'rtl' +LEFT = 'left' +RIGHT = 'right' + +# This is a lookbehind match to ensure that we don't replace instances +# of our string token (left, rtl, etc...) if there's a letter in front of it. +# Specifically, this prevents replacements like 'background: url(bright.png)'. +LOOKBEHIND_NOT_LETTER = r'(?)*?{)' % + (csslex.NMCHAR, TOKEN_LINES, csslex.SPACE)) + + +# These two lookaheads are to test whether or not we are within a +# background: url(HERE) situation. +# Ref: http://www.w3.org/TR/CSS21/syndata.html#uri +VALID_AFTER_URI_CHARS = r'[\'\"]?%s' % csslex.WHITESPACE +LOOKAHEAD_NOT_CLOSING_PAREN = r'(?!%s?%s\))' % (csslex.URL_CHARS, + VALID_AFTER_URI_CHARS) +LOOKAHEAD_FOR_CLOSING_PAREN = r'(?=%s?%s\))' % (csslex.URL_CHARS, + VALID_AFTER_URI_CHARS) + +# Compile a regex to swap left and right values in 4 part notations. +# We need to match negatives and decimal numeric values. +# ex. 'margin: .25em -2px 3px 0' becomes 'margin: .25em 0 3px -2px'. +POSSIBLY_NEGATIVE_QUANTITY = r'((?:-?%s)|(?:inherit|auto))' % csslex.QUANTITY +POSSIBLY_NEGATIVE_QUANTITY_SPACE = r'%s%s%s' % (POSSIBLY_NEGATIVE_QUANTITY, + csslex.SPACE, + csslex.WHITESPACE) +FOUR_NOTATION_QUANTITY_RE = re.compile(r'%s%s%s%s' % + (POSSIBLY_NEGATIVE_QUANTITY_SPACE, + POSSIBLY_NEGATIVE_QUANTITY_SPACE, + POSSIBLY_NEGATIVE_QUANTITY_SPACE, + POSSIBLY_NEGATIVE_QUANTITY), + re.I) +COLOR = r'(%s|%s)' % (csslex.NAME, csslex.HASH) +COLOR_SPACE = r'%s%s' % (COLOR, csslex.SPACE) +FOUR_NOTATION_COLOR_RE = re.compile(r'(-color%s:%s)%s%s%s(%s)' % + (csslex.WHITESPACE, + csslex.WHITESPACE, + COLOR_SPACE, + COLOR_SPACE, + COLOR_SPACE, + COLOR), + re.I) + +# Compile the cursor resize regexes +CURSOR_EAST_RE = re.compile(LOOKBEHIND_NOT_LETTER + '([ns]?)e-resize') +CURSOR_WEST_RE = re.compile(LOOKBEHIND_NOT_LETTER + '([ns]?)w-resize') + +# Matches the condition where we need to replace the horizontal component +# of a background-position value when expressed in horizontal percentage. +# Had to make two regexes because in the case of position-x there is only +# one quantity, and otherwise we don't want to match and change cases with only +# one quantity. +BG_HORIZONTAL_PERCENTAGE_RE = re.compile(r'background(-position)?(%s:%s)' + '([^%%]*?)(%s)%%' + '(%s(?:%s|%s))' % (csslex.WHITESPACE, + csslex.WHITESPACE, + csslex.NUM, + csslex.WHITESPACE, + csslex.QUANTITY, + csslex.IDENT)) + +BG_HORIZONTAL_PERCENTAGE_X_RE = re.compile(r'background-position-x(%s:%s)' + '(%s)%%' % (csslex.WHITESPACE, + csslex.WHITESPACE, + csslex.NUM)) + +# Matches the opening of a body selector. +BODY_SELECTOR = r'body%s{%s' % (csslex.WHITESPACE, csslex.WHITESPACE) + +# Matches anything up until the closing of a selector. +CHARS_WITHIN_SELECTOR = r'[^\}]*?' + +# Matches the direction property in a selector. +DIRECTION_RE = r'direction%s:%s' % (csslex.WHITESPACE, csslex.WHITESPACE) + +# These allow us to swap "ltr" with "rtl" and vice versa ONLY within the +# body selector and on the same line. +BODY_DIRECTION_LTR_RE = re.compile(r'(%s)(%s)(%s)(ltr)' % + (BODY_SELECTOR, CHARS_WITHIN_SELECTOR, + DIRECTION_RE), + re.I) +BODY_DIRECTION_RTL_RE = re.compile(r'(%s)(%s)(%s)(rtl)' % + (BODY_SELECTOR, CHARS_WITHIN_SELECTOR, + DIRECTION_RE), + re.I) + + +# Allows us to swap "direction:ltr" with "direction:rtl" and +# vice versa anywhere in a line. +DIRECTION_LTR_RE = re.compile(r'%s(ltr)' % DIRECTION_RE) +DIRECTION_RTL_RE = re.compile(r'%s(rtl)' % DIRECTION_RE) + +# We want to be able to switch left with right and vice versa anywhere +# we encounter left/right strings, EXCEPT inside the background:url(). The next +# two regexes are for that purpose. We have alternate IN_URL versions of the +# regexes compiled in case the user passes the flag that they do +# actually want to have left and right swapped inside of background:urls. +LEFT_RE = re.compile('%s(%s)%s%s' % (LOOKBEHIND_NOT_LETTER, + LEFT, + LOOKAHEAD_NOT_CLOSING_PAREN, + LOOKAHEAD_NOT_OPEN_BRACE), + re.I) +RIGHT_RE = re.compile('%s(%s)%s%s' % (LOOKBEHIND_NOT_LETTER, + RIGHT, + LOOKAHEAD_NOT_CLOSING_PAREN, + LOOKAHEAD_NOT_OPEN_BRACE), + re.I) +LEFT_IN_URL_RE = re.compile('%s(%s)%s' % (LOOKBEHIND_NOT_LETTER, + LEFT, + LOOKAHEAD_FOR_CLOSING_PAREN), + re.I) +RIGHT_IN_URL_RE = re.compile('%s(%s)%s' % (LOOKBEHIND_NOT_LETTER, + RIGHT, + LOOKAHEAD_FOR_CLOSING_PAREN), + re.I) +LTR_IN_URL_RE = re.compile('%s(%s)%s' % (LOOKBEHIND_NOT_LETTER, + LTR, + LOOKAHEAD_FOR_CLOSING_PAREN), + re.I) +RTL_IN_URL_RE = re.compile('%s(%s)%s' % (LOOKBEHIND_NOT_LETTER, + RTL, + LOOKAHEAD_FOR_CLOSING_PAREN), + re.I) + +COMMENT_RE = re.compile('(%s)' % csslex.COMMENT, re.I) + +NOFLIP_TOKEN = r'\@noflip' +# The NOFLIP_TOKEN inside of a comment. For now, this requires that comments +# be in the input, which means users of a css compiler would have to run +# this script first if they want this functionality. +NOFLIP_ANNOTATION = r'/\*%s%s%s\*/' % (csslex.WHITESPACE, + NOFLIP_TOKEN, + csslex. WHITESPACE) + +# After a NOFLIP_ANNOTATION, and within a class selector, we want to be able +# to set aside a single rule not to be flipped. We can do this by matching +# our NOFLIP annotation and then using a lookahead to make sure there is not +# an opening brace before the match. +NOFLIP_SINGLE_RE = re.compile(r'(%s%s[^;}]+;?)' % (NOFLIP_ANNOTATION, + LOOKAHEAD_NOT_OPEN_BRACE), + re.I) + +# After a NOFLIP_ANNOTATION, we want to grab anything up until the next } which +# means the entire following class block. This will prevent all of its +# declarations from being flipped. +NOFLIP_CLASS_RE = re.compile(r'(%s%s})' % (NOFLIP_ANNOTATION, + CHARS_WITHIN_SELECTOR), + re.I) + + +class Tokenizer: + """Replaces any CSS comments with string tokens and vice versa.""" + + def __init__(self, token_re, token_string): + """Constructor for the Tokenizer. + + Args: + token_re: A regex for the string to be replace by a token. + token_string: The string to put between token delimiters when tokenizing. + """ + logging.debug('Tokenizer::init token_string=%s' % token_string) + self.token_re = token_re + self.token_string = token_string + self.originals = [] + + def Tokenize(self, line): + """Replaces any string matching token_re in line with string tokens. + + By passing a function as an argument to the re.sub line below, we bypass + the usual rule where re.sub will only replace the left-most occurrence of + a match by calling the passed in function for each occurrence. + + Args: + line: A line to replace token_re matches in. + + Returns: + line: A line with token_re matches tokenized. + """ + line = self.token_re.sub(self.TokenizeMatches, line) + logging.debug('Tokenizer::Tokenize returns: %s' % line) + return line + + def DeTokenize(self, line): + """Replaces tokens with the original string. + + Args: + line: A line with tokens. + + Returns: + line with any tokens replaced by the original string. + """ + + # Put all of the comments back in by their comment token. + for i, original in enumerate(self.originals): + token = '%s%s_%s%s' % (TOKEN_DELIMITER, self.token_string, i + 1, + TOKEN_DELIMITER) + line = line.replace(token, original) + logging.debug('Tokenizer::DeTokenize i:%s w/%s' % (i, token)) + logging.debug('Tokenizer::DeTokenize returns: %s' % line) + return line + + def TokenizeMatches(self, m): + """Replaces matches with tokens and stores the originals. + + Args: + m: A match object. + + Returns: + A string token which replaces the CSS comment. + """ + logging.debug('Tokenizer::TokenizeMatches %s' % m.group(1)) + self.originals.append(m.group(1)) + return '%s%s_%s%s' % (TOKEN_DELIMITER, + self.token_string, + len(self.originals), + TOKEN_DELIMITER) + + +def FixBodyDirectionLtrAndRtl(line): + """Replaces ltr with rtl and vice versa ONLY in the body direction. + + Args: + line: A string to replace instances of ltr with rtl. + Returns: + line with direction: ltr and direction: rtl swapped only in body selector. + line = FixBodyDirectionLtrAndRtl('body { direction:ltr }') + line will now be 'body { direction:rtl }'. + """ + + line = BODY_DIRECTION_LTR_RE.sub('\\1\\2\\3%s' % TMP_TOKEN, line) + line = BODY_DIRECTION_RTL_RE.sub('\\1\\2\\3%s' % LTR, line) + line = line.replace(TMP_TOKEN, RTL) + logging.debug('FixBodyDirectionLtrAndRtl returns: %s' % line) + return line + + +def FixLeftAndRight(line): + """Replaces left with right and vice versa in line. + + Args: + line: A string in which to perform the replacement. + + Returns: + line with left and right swapped. For example: + line = FixLeftAndRight('padding-left: 2px; margin-right: 1px;') + line will now be 'padding-right: 2px; margin-left: 1px;'. + """ + + line = LEFT_RE.sub(TMP_TOKEN, line) + line = RIGHT_RE.sub(LEFT, line) + line = line.replace(TMP_TOKEN, RIGHT) + logging.debug('FixLeftAndRight returns: %s' % line) + return line + + +def FixLeftAndRightInUrl(line): + """Replaces left with right and vice versa ONLY within background urls. + + Args: + line: A string in which to replace left with right and vice versa. + + Returns: + line with left and right swapped in the url string. For example: + line = FixLeftAndRightInUrl('background:url(right.png)') + line will now be 'background:url(left.png)'. + """ + + line = LEFT_IN_URL_RE.sub(TMP_TOKEN, line) + line = RIGHT_IN_URL_RE.sub(LEFT, line) + line = line.replace(TMP_TOKEN, RIGHT) + logging.debug('FixLeftAndRightInUrl returns: %s' % line) + return line + + +def FixLtrAndRtlInUrl(line): + """Replaces ltr with rtl and vice versa ONLY within background urls. + + Args: + line: A string in which to replace ltr with rtl and vice versa. + + Returns: + line with left and right swapped. For example: + line = FixLtrAndRtlInUrl('background:url(rtl.png)') + line will now be 'background:url(ltr.png)'. + """ + + line = LTR_IN_URL_RE.sub(TMP_TOKEN, line) + line = RTL_IN_URL_RE.sub(LTR, line) + line = line.replace(TMP_TOKEN, RTL) + logging.debug('FixLtrAndRtlInUrl returns: %s' % line) + return line + + +def FixCursorProperties(line): + """Fixes directional CSS cursor properties. + + Args: + line: A string to fix CSS cursor properties in. + + Returns: + line reformatted with the cursor properties substituted. For example: + line = FixCursorProperties('cursor: ne-resize') + line will now be 'cursor: nw-resize'. + """ + + line = CURSOR_EAST_RE.sub('\\1' + TMP_TOKEN, line) + line = CURSOR_WEST_RE.sub('\\1e-resize', line) + line = line.replace(TMP_TOKEN, 'w-resize') + logging.debug('FixCursorProperties returns: %s' % line) + return line + + +def FixFourPartNotation(line): + """Fixes the second and fourth positions in 4 part CSS notation. + + Args: + line: A string to fix 4 part CSS notation in. + + Returns: + line reformatted with the 4 part notations swapped. For example: + line = FixFourPartNotation('padding: 1px 2px 3px 4px') + line will now be 'padding: 1px 4px 3px 2px'. + """ + line = FOUR_NOTATION_QUANTITY_RE.sub('\\1 \\4 \\3 \\2', line) + line = FOUR_NOTATION_COLOR_RE.sub('\\1\\2 \\5 \\4 \\3', line) + logging.debug('FixFourPartNotation returns: %s' % line) + return line + + +def FixBackgroundPosition(line): + """Fixes horizontal background percentage values in line. + + Args: + line: A string to fix horizontal background position values in. + + Returns: + line reformatted with the 4 part notations swapped. + """ + line = BG_HORIZONTAL_PERCENTAGE_RE.sub(CalculateNewBackgroundPosition, line) + line = BG_HORIZONTAL_PERCENTAGE_X_RE.sub(CalculateNewBackgroundPositionX, + line) + logging.debug('FixBackgroundPosition returns: %s' % line) + return line + + +def CalculateNewBackgroundPosition(m): + """Fixes horizontal background-position percentages. + + This function should be used as an argument to re.sub since it needs to + perform replacement specific calculations. + + Args: + m: A match object. + + Returns: + A string with the horizontal background position percentage fixed. + BG_HORIZONTAL_PERCENTAGE_RE.sub(FixBackgroundPosition, + 'background-position: 75% 50%') + will return 'background-position: 25% 50%'. + """ + + # The flipped value is the offset from 100% + new_x = str(100-int(m.group(4))) + + # Since m.group(1) may very well be None type and we need a string.. + if m.group(1): + position_string = m.group(1) + else: + position_string = '' + + return 'background%s%s%s%s%%%s' % (position_string, m.group(2), m.group(3), + new_x, m.group(5)) + + +def CalculateNewBackgroundPositionX(m): + """Fixes percent based background-position-x. + + This function should be used as an argument to re.sub since it needs to + perform replacement specific calculations. + + Args: + m: A match object. + + Returns: + A string with the background-position-x percentage fixed. + BG_HORIZONTAL_PERCENTAGE_X_RE.sub(CalculateNewBackgroundPosition, + 'background-position-x: 75%') + will return 'background-position-x: 25%'. + """ + + # The flipped value is the offset from 100% + new_x = str(100-int(m.group(2))) + + return 'background-position-x%s%s%%' % (m.group(1), new_x) + + +def ChangeLeftToRightToLeft(lines, + swap_ltr_rtl_in_url=None, + swap_left_right_in_url=None): + """Turns lines into a stream and runs the fixing functions against it. + + Args: + lines: An list of CSS lines. + swap_ltr_rtl_in_url: Overrides this flag if param is set. + swap_left_right_in_url: Overrides this flag if param is set. + + Returns: + The same lines, but with left and right fixes. + """ + + global FLAGS + + # Possibly override flags with params. + logging.debug('ChangeLeftToRightToLeft swap_ltr_rtl_in_url=%s, ' + 'swap_left_right_in_url=%s' % (swap_ltr_rtl_in_url, + swap_left_right_in_url)) + if swap_ltr_rtl_in_url is None: + swap_ltr_rtl_in_url = FLAGS['swap_ltr_rtl_in_url'] + if swap_left_right_in_url is None: + swap_left_right_in_url = FLAGS['swap_left_right_in_url'] + + # Turns the array of lines into a single line stream. + logging.debug('LINES COUNT: %s' % len(lines)) + line = TOKEN_LINES.join(lines) + + # Tokenize any single line rules with the /* noflip */ annotation. + noflip_single_tokenizer = Tokenizer(NOFLIP_SINGLE_RE, 'NOFLIP_SINGLE') + line = noflip_single_tokenizer.Tokenize(line) + + # Tokenize any class rules with the /* noflip */ annotation. + noflip_class_tokenizer = Tokenizer(NOFLIP_CLASS_RE, 'NOFLIP_CLASS') + line = noflip_class_tokenizer.Tokenize(line) + + # Tokenize the comments so we can preserve them through the changes. + comment_tokenizer = Tokenizer(COMMENT_RE, 'C') + line = comment_tokenizer.Tokenize(line) + + # Here starteth the various left/right orientation fixes. + line = FixBodyDirectionLtrAndRtl(line) + + if swap_left_right_in_url: + line = FixLeftAndRightInUrl(line) + + if swap_ltr_rtl_in_url: + line = FixLtrAndRtlInUrl(line) + + line = FixLeftAndRight(line) + line = FixCursorProperties(line) + line = FixFourPartNotation(line) + line = FixBackgroundPosition(line) + + # DeTokenize the single line noflips. + line = noflip_single_tokenizer.DeTokenize(line) + + # DeTokenize the class-level noflips. + line = noflip_class_tokenizer.DeTokenize(line) + + # DeTokenize the comments. + line = comment_tokenizer.DeTokenize(line) + + # Rejoin the lines back together. + lines = line.split(TOKEN_LINES) + + return lines + +def usage(): + """Prints out usage information.""" + + print 'Usage:' + print ' ./cssjanus.py < file.css > file-rtl.css' + print 'Flags:' + print ' --swap_left_right_in_url: Fixes "left"/"right" string within urls.' + print ' Ex: ./cssjanus.py --swap_left_right_in_url < file.css > file_rtl.css' + print ' --swap_ltr_rtl_in_url: Fixes "ltr"/"rtl" string within urls.' + print ' Ex: ./cssjanus --swap_ltr_rtl_in_url < file.css > file_rtl.css' + +def setflags(opts): + """Parse the passed in command line arguments and set the FLAGS global. + + Args: + opts: getopt iterable intercepted from argv. + """ + + global FLAGS + + # Parse the arguments. + for opt, arg in opts: + logging.debug('opt: %s, arg: %s' % (opt, arg)) + if opt in ("-h", "--help"): + usage() + sys.exit() + elif opt in ("-d", "--debug"): + logging.getLogger().setLevel(logging.DEBUG) + elif opt == '--swap_ltr_rtl_in_url': + FLAGS['swap_ltr_rtl_in_url'] = True + elif opt == '--swap_left_right_in_url': + FLAGS['swap_left_right_in_url'] = True + + +def main(argv): + """Sends stdin lines to ChangeLeftToRightToLeft and writes to stdout.""" + + # Define the flags. + try: + opts, args = getopt.getopt(argv, 'hd', ['help', 'debug', + 'swap_left_right_in_url', + 'swap_ltr_rtl_in_url']) + except getopt.GetoptError: + usage() + sys.exit(2) + + # Parse and set the flags. + setflags(opts) + + # Call the main routine with all our functionality. + fixed_lines = ChangeLeftToRightToLeft(sys.stdin.readlines()) + sys.stdout.write(''.join(fixed_lines)) + +if __name__ == '__main__': + main(sys.argv[1:]) diff --git a/maintenance/cssjanus/csslex.py b/maintenance/cssjanus/csslex.py new file mode 100644 index 00000000..1fc7304e --- /dev/null +++ b/maintenance/cssjanus/csslex.py @@ -0,0 +1,114 @@ +#!/usr/bin/python +# +# Copyright 2007 Google Inc. All Rights Reserved. + +"""CSS Lexical Grammar rules. + +CSS lexical grammar from http://www.w3.org/TR/CSS21/grammar.html +""" + +__author__ = ['elsigh@google.com (Lindsey Simon)', + 'msamuel@google.com (Mike Samuel)'] + +# public symbols +__all__ = [ "NEWLINE", "HEX", "NON_ASCII", "UNICODE", "ESCAPE", "NMSTART", "NMCHAR", "STRING1", "STRING2", "IDENT", "NAME", "HASH", "NUM", "STRING", "URL", "SPACE", "WHITESPACE", "COMMENT", "QUANTITY", "PUNC" ] + +# The comments below are mostly copied verbatim from the grammar. + +# "@import" {return IMPORT_SYM;} +# "@page" {return PAGE_SYM;} +# "@media" {return MEDIA_SYM;} +# "@charset" {return CHARSET_SYM;} +KEYWORD = r'(?:\@(?:import|page|media|charset))' + +# nl \n|\r\n|\r|\f ; a newline +NEWLINE = r'\n|\r\n|\r|\f' + +# h [0-9a-f] ; a hexadecimal digit +HEX = r'[0-9a-f]' + +# nonascii [\200-\377] +NON_ASCII = r'[\200-\377]' + +# unicode \\{h}{1,6}(\r\n|[ \t\r\n\f])? +UNICODE = r'(?:(?:\\' + HEX + r'{1,6})(?:\r\n|[ \t\r\n\f])?)' + +# escape {unicode}|\\[^\r\n\f0-9a-f] +ESCAPE = r'(?:' + UNICODE + r'|\\[^\r\n\f0-9a-f])' + +# nmstart [_a-z]|{nonascii}|{escape} +NMSTART = r'(?:[_a-z]|' + NON_ASCII + r'|' + ESCAPE + r')' + +# nmchar [_a-z0-9-]|{nonascii}|{escape} +NMCHAR = r'(?:[_a-z0-9-]|' + NON_ASCII + r'|' + ESCAPE + r')' + +# ident -?{nmstart}{nmchar}* +IDENT = r'-?' + NMSTART + NMCHAR + '*' + +# name {nmchar}+ +NAME = NMCHAR + r'+' + +# hash +HASH = r'#' + NAME + +# string1 \"([^\n\r\f\\"]|\\{nl}|{escape})*\" ; "string" +STRING1 = r'"(?:[^\"\\]|\\.)*"' + +# string2 \'([^\n\r\f\\']|\\{nl}|{escape})*\' ; 'string' +STRING2 = r"'(?:[^\'\\]|\\.)*'" + +# string {string1}|{string2} +STRING = '(?:' + STRING1 + r'|' + STRING2 + ')' + +# num [0-9]+|[0-9]*"."[0-9]+ +NUM = r'(?:[0-9]*\.[0-9]+|[0-9]+)' + +# s [ \t\r\n\f] +SPACE = r'[ \t\r\n\f]' + +# w {s}* +WHITESPACE = '(?:' + SPACE + r'*)' + +# url special chars +URL_SPECIAL_CHARS = r'[!#$%&*-~]' + +# url chars ({url_special_chars}|{nonascii}|{escape})* +URL_CHARS = r'(?:%s|%s|%s)*' % (URL_SPECIAL_CHARS, NON_ASCII, ESCAPE) + +# url +URL = r'url\(%s(%s|%s)%s\)' % (WHITESPACE, STRING, URL_CHARS, WHITESPACE) + +# comments +# see http://www.w3.org/TR/CSS21/grammar.html +COMMENT = r'/\*[^*]*\*+([^/*][^*]*\*+)*/' + +# {E}{M} {return EMS;} +# {E}{X} {return EXS;} +# {P}{X} {return LENGTH;} +# {C}{M} {return LENGTH;} +# {M}{M} {return LENGTH;} +# {I}{N} {return LENGTH;} +# {P}{T} {return LENGTH;} +# {P}{C} {return LENGTH;} +# {D}{E}{G} {return ANGLE;} +# {R}{A}{D} {return ANGLE;} +# {G}{R}{A}{D} {return ANGLE;} +# {M}{S} {return TIME;} +# {S} {return TIME;} +# {H}{Z} {return FREQ;} +# {K}{H}{Z} {return FREQ;} +# % {return PERCENTAGE;} +UNIT = r'(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)' + +# {num}{UNIT|IDENT} {return NUMBER;} +QUANTITY = '%s(?:%s%s|%s)?' % (NUM, WHITESPACE, UNIT, IDENT) + +# "" {return CDC;} +# "~=" {return INCLUDES;} +# "|=" {return DASHMATCH;} +# {w}"{" {return LBRACE;} +# {w}"+" {return PLUS;} +# {w}">" {return GREATER;} +# {w}"," {return COMMA;} +PUNC = r'|~=|\|=|[\{\+>,:;]' diff --git a/maintenance/deleteArchivedFiles.inc b/maintenance/deleteArchivedFiles.inc new file mode 100644 index 00000000..e0ac225e --- /dev/null +++ b/maintenance/deleteArchivedFiles.inc @@ -0,0 +1,62 @@ +begin(); + $tbl_arch = $dbw->tableName( 'filearchive' ); + $repo = RepoGroup::singleton()->getLocalRepo(); + # Get "active" revisions from the filearchive table + $output->handleOutput( "Searching for and deleting archived files...\n" ); + $res = $dbw->query( "SELECT fa_id,fa_storage_group,fa_storage_key FROM $tbl_arch" ); + $count = 0; + foreach ( $res as $row ) { + $key = $row->fa_storage_key; + $group = $row->fa_storage_group; + $id = $row->fa_id; + $path = $repo->getZonePath( 'deleted' ) . '/' . $repo->getDeletedHashPath( $key ) . $key; + $sha1 = substr( $key, 0, strcspn( $key, '.' ) ); + // Check if the file is used anywhere... + $inuse = $dbw->selectField( 'oldimage', '1', + array( 'oi_sha1' => $sha1, + 'oi_deleted & ' . File::DELETED_FILE => File::DELETED_FILE ), + __METHOD__, + array( 'FOR UPDATE' ) + ); + if ( $path && file_exists( $path ) && !$inuse ) { + unlink( $path ); // delete + $count++; + $dbw->query( "DELETE FROM $tbl_arch WHERE fa_id = $id" ); + } else { + $output->handleOutput( "Notice - file '$key' not found in group '$group'\n" ); + if ( $force ) { + $output->handleOutput( "Got --force, deleting DB entry\n" ); + $dbw->query( "DELETE FROM $tbl_arch WHERE fa_id = $id" ); + } + } + } + $dbw->commit(); + $output->handleOutput( "Done! [$count file(s)]\n" ); + } +} \ No newline at end of file diff --git a/maintenance/deleteArchivedFiles.php b/maintenance/deleteArchivedFiles.php index af4bbb74..6067c807 100644 --- a/maintenance/deleteArchivedFiles.php +++ b/maintenance/deleteArchivedFiles.php @@ -23,7 +23,8 @@ * Based on deleteOldRevisions.php by Rob Church */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/deleteArchivedFiles.inc' ); class DeleteArchivedFiles extends Maintenance { public function __construct() { @@ -33,50 +34,19 @@ class DeleteArchivedFiles extends Maintenance { $this->addOption( 'force', 'Force deletion of rows from filearchive' ); } + public function handleOutput( $str ) { + return $this->output( $str ); + } + public function execute() { - if( !$this->hasOption('delete') ) { + if ( !$this->hasOption( 'delete' ) ) { $this->output( "Use --delete to actually confirm this script\n" ); return; } $force = $this->hasOption( 'force' ); - # Data should come off the master, wrapped in a transaction - $dbw = wfGetDB( DB_MASTER ); - $dbw->begin(); - $tbl_arch = $dbw->tableName( 'filearchive' ); - $repo = RepoGroup::singleton()->getLocalRepo(); - # Get "active" revisions from the filearchive table - $this->output( "Searching for and deleting archived files...\n" ); - $res = $dbw->query( "SELECT fa_id,fa_storage_group,fa_storage_key FROM $tbl_arch" ); - $count = 0; - foreach( $res as $row ) { - $key = $row->fa_storage_key; - $group = $row->fa_storage_group; - $id = $row->fa_id; - $path = $repo->getZonePath( 'deleted' ).'/'.$repo->getDeletedHashPath($key).$key; - $sha1 = substr( $key, 0, strcspn( $key, '.' ) ); - // Check if the file is used anywhere... - $inuse = $dbw->selectField( 'oldimage', '1', - array( 'oi_sha1' => $sha1, - 'oi_deleted & '.File::DELETED_FILE => File::DELETED_FILE ), - __METHOD__, - array( 'FOR UPDATE' ) - ); - if ( $path && file_exists($path) && !$inuse ) { - unlink($path); // delete - $count++; - $dbw->query( "DELETE FROM $tbl_arch WHERE fa_id = $id" ); - } else { - $this->output( "Notice - file '$key' not found in group '$group'\n" ); - if ( $force ) { - $this->output( "Got --force, deleting DB entry\n" ); - $dbw->query( "DELETE FROM $tbl_arch WHERE fa_id = $id" ); - } - } - } - $dbw->commit(); - $this->output( "Done! [$count file(s)]\n" ); + DeleteArchivedFilesImplementation::doDelete( $this, $force ); } } $maintClass = "DeleteArchivedFiles"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/deleteArchivedRevisions.inc b/maintenance/deleteArchivedRevisions.inc new file mode 100644 index 00000000..10bd4cff --- /dev/null +++ b/maintenance/deleteArchivedRevisions.inc @@ -0,0 +1,57 @@ +begin(); + + $tbl_arch = $dbw->tableName( 'archive' ); + + # Delete as appropriate + $maint->handleOutput( "Deleting archived revisions... " ); + $dbw->query( "DELETE FROM $tbl_arch" ); + + $count = $dbw->affectedRows(); + $deletedRows = $count != 0; + + $maint->handleOutput( "done. $count revisions deleted.\n" ); + + # This bit's done + # Purge redundant text records + $dbw->commit(); + if ( $deletedRows ) { + $maint->purgeRedundantText( true ); + } + } +} \ No newline at end of file diff --git a/maintenance/deleteArchivedRevisions.php b/maintenance/deleteArchivedRevisions.php index c3f8bf11..0faa0abb 100644 --- a/maintenance/deleteArchivedRevisions.php +++ b/maintenance/deleteArchivedRevisions.php @@ -23,7 +23,8 @@ * Shamelessly stolen from deleteOldRevisions.php by Rob Church :) */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/deleteArchivedRevisions.inc' ); class DeleteArchivedRevisions extends Maintenance { public function __construct() { @@ -32,31 +33,17 @@ class DeleteArchivedRevisions extends Maintenance { $this->addOption( 'delete', 'Performs the deletion' ); } + public function handleOutput( $str ) { + $this->output( $str ); + } + public function execute() { $this->output( "Delete archived revisions\n\n" ); # Data should come off the master, wrapped in a transaction - $dbw = wfGetDB( DB_MASTER ); - if( $this->hasOption('delete') ) { - $dbw->begin(); - - $tbl_arch = $dbw->tableName( 'archive' ); - - # Delete as appropriate - $this->output( "Deleting archived revisions... " ); - $dbw->query( "TRUNCATE TABLE $tbl_arch" ); - - $count = $dbw->affectedRows(); - $deletedRows = $count != 0; - - $this->output( "done. $count revisions deleted.\n" ); - - # This bit's done - # Purge redundant text records - $dbw->commit(); - if( $deletedRows ) { - $this->purgeRedundantText( true ); - } + if ( $this->hasOption( 'delete' ) ) { + DeleteArchivedRevisionsImplementation::doDelete( $this ); } else { + $dbw = wfGetDB( DB_MASTER ); $res = $dbw->selectRow( 'archive', 'COUNT(*) as count', array(), __FUNCTION__ ); $this->output( "Found {$res->count} revisions to delete.\n" ); $this->output( "Please run the script again with the --delete option to really delete the revisions.\n" ); @@ -65,4 +52,4 @@ class DeleteArchivedRevisions extends Maintenance { } $maintClass = "DeleteArchivedRevisions"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/deleteBatch.php b/maintenance/deleteBatch.php index 56afd86c..c8bb4803 100644 --- a/maintenance/deleteBatch.php +++ b/maintenance/deleteBatch.php @@ -26,39 +26,40 @@ * * @ingroup Maintenance */ - -require_once( dirname(__FILE__) . '/Maintenance.php' ); + +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class DeleteBatch extends Maintenance { - + public function __construct() { parent::__construct(); $this->mDescription = "Deletes a batch of pages"; $this->addOption( 'u', "User to perform deletion", false, true ); $this->addOption( 'r', "Reason to delete page", false, true ); $this->addOption( 'i', "Interval to sleep between deletions" ); - $this->addArg( 'listfile', 'File with titles to delete, separated by newlines', false ); + $this->addArg( 'listfile', 'File with titles to delete, separated by newlines. ' . + 'If not given, stdin will be used.', false ); } - + public function execute() { global $wgUser; # Change to current working directory $oldCwd = getcwd(); chdir( $oldCwd ); - + # Options processing $user = $this->getOption( 'u', 'Delete page script' ); $reason = $this->getOption( 'r', '' ); $interval = $this->getOption( 'i', 0 ); - if( $this->hasArg() ) { + if ( $this->hasArg() ) { $file = fopen( $this->getArg(), 'r' ); } else { $file = $this->getStdin(); } # Setup - if( !$file ) { + if ( !$file ) { $this->error( "Unable to read file, exiting", true ); } $wgUser = User::newFromName( $user ); @@ -75,18 +76,18 @@ class DeleteBatch extends Maintenance { $this->output( "Invalid title '$line' on line $linenum\n" ); continue; } - if( !$page->exists() ) { + if ( !$page->exists() ) { $this->output( "Skipping nonexistent page '$line'\n" ); continue; } - - + + $this->output( $page->getPrefixedText() ); $dbw->begin(); - if( $page->getNamespace() == NS_FILE ) { + if ( $page->getNamespace() == NS_FILE ) { $art = new ImagePage( $page ); $img = wfFindFile( $art->mTitle ); - if( !$img || !$img->delete( $reason ) ) { + if ( !$img || !$img->delete( $reason ) ) { $this->output( "FAILED to delete image file... " ); } } else { @@ -99,7 +100,7 @@ class DeleteBatch extends Maintenance { } else { $this->output( " FAILED to delete article\n" ); } - + if ( $interval ) { sleep( $interval ); } @@ -109,4 +110,4 @@ class DeleteBatch extends Maintenance { } $maintClass = "DeleteBatch"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/deleteDefaultMessages.php b/maintenance/deleteDefaultMessages.php index 3f0e1b1c..fc482ac0 100644 --- a/maintenance/deleteDefaultMessages.php +++ b/maintenance/deleteDefaultMessages.php @@ -1,6 +1,6 @@ addGroup( 'bot' ); - + $this->output( "Checking existence of old default messages..." ); $dbr = wfGetDB( DB_SLAVE ); $res = $dbr->select( array( 'page', 'revision' ), array( 'page_namespace', 'page_title' ), @@ -52,6 +46,20 @@ class DeleteDefaultMessages extends Maintenance { ) ); + if( $dbr->numRows( $res ) == 0 ) { + # No more messages left + $this->output( "done.\n" ); + return; + } + + # Deletions will be made by $user temporarly added to the bot group + # in order to hide it in RecentChanges. + global $wgUser; + $wgUser = User::newFromName( $user ); + $wgUser->addGroup( 'bot' ); + + # Handle deletion + $this->output( "\n...deleting old default messages (this may take a long time!)...", 'msg' ); $dbw = wfGetDB( DB_MASTER ); foreach ( $res as $row ) { @@ -65,8 +73,10 @@ class DeleteDefaultMessages extends Maintenance { $article->doDeleteArticle( $reason ); $dbw->commit(); } + + $this->output( 'done!', 'msg' ); } } $maintClass = "DeleteDefaultMessages"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/deleteImageMemcached.php b/maintenance/deleteImageMemcached.php index 9becddb8..007f0d17 100644 --- a/maintenance/deleteImageMemcached.php +++ b/maintenance/deleteImageMemcached.php @@ -23,7 +23,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class DeleteImageCache extends Maintenance { public function __construct() { @@ -36,8 +36,8 @@ class DeleteImageCache extends Maintenance { public function execute() { global $wgMemc; - $until = preg_replace( "/[^\d]/", '', $this->getOption('until') ); - $sleep = (int)$this->getOption('sleep') * 1000; // milliseconds + $until = preg_replace( "/[^\d]/", '', $this->getOption( 'until' ) ); + $sleep = (int)$this->getOption( 'sleep' ) * 1000; // milliseconds ini_set( 'display_errors', false ); @@ -53,12 +53,12 @@ class DeleteImageCache extends Maintenance { $total = $this->getImageCount(); foreach ( $res as $row ) { - if ($i % $this->report == 0) - $this->output( sprintf("%s: %13s done (%s)\n", wfWikiID(), "$i/$total", wfPercent( $i / $total * 100 ) ) ); + if ( $i % $this->report == 0 ) + $this->output( sprintf( "%s: %13s done (%s)\n", wfWikiID(), "$i/$total", wfPercent( $i / $total * 100 ) ) ); $md5 = md5( $row->img_name ); $wgMemc->delete( wfMemcKey( 'Image', $md5 ) ); - if ($sleep != 0) + if ( $sleep != 0 ) usleep( $sleep ); ++$i; @@ -72,4 +72,4 @@ class DeleteImageCache extends Maintenance { } $maintClass = "DeleteImageCache"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/deleteOldRevisions.php b/maintenance/deleteOldRevisions.php index 1f4dc4c9..ba76e9e9 100644 --- a/maintenance/deleteOldRevisions.php +++ b/maintenance/deleteOldRevisions.php @@ -22,7 +22,7 @@ * @author Rob Church */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class DeleteOldRevisions extends Maintenance { public function __construct() { @@ -31,24 +31,24 @@ class DeleteOldRevisions extends Maintenance { $this->addOption( 'delete', 'Actually perform the deletion' ); $this->addOption( 'page_id', 'List of page ids to work on', false ); } - + public function execute() { $this->output( "Delete old revisions\n\n" ); $this->doDelete( $this->hasOption( 'delete' ), $this->mArgs ); } - + function doDelete( $delete = false, $args = array() ) { # Data should come off the master, wrapped in a transaction $dbw = wfGetDB( DB_MASTER ); $dbw->begin(); - + $tbl_pag = $dbw->tableName( 'page' ); $tbl_rev = $dbw->tableName( 'revision' ); - + $pageIdClause = ''; $revPageClause = ''; - + # If a list of page_ids was provided, limit results to that set of page_ids if ( sizeof( $args ) > 0 ) { $pageIdList = implode( ',', $args ); @@ -56,46 +56,46 @@ class DeleteOldRevisions extends Maintenance { $revPageClause = " AND rev_page IN ({$pageIdList})"; $this->output( "Limiting to {$tbl_pag}.page_id IN ({$pageIdList})\n" ); } - + # Get "active" revisions from the page table $this->output( "Searching for active revisions..." ); $res = $dbw->query( "SELECT page_latest FROM $tbl_pag{$pageIdClause}" ); - foreach( $res as $row ) { + foreach ( $res as $row ) { $cur[] = $row->page_latest; } $this->output( "done.\n" ); - + # Get all revisions that aren't in this set $old = array(); $this->output( "Searching for inactive revisions..." ); $set = implode( ', ', $cur ); $res = $dbw->query( "SELECT rev_id FROM $tbl_rev WHERE rev_id NOT IN ( $set ){$revPageClause}" ); - foreach( $res as $row ) { + foreach ( $res as $row ) { $old[] = $row->rev_id; } $this->output( "done.\n" ); - + # Inform the user of what we're going to do $count = count( $old ); $this->output( "$count old revisions found.\n" ); - + # Delete as appropriate - if( $delete && $count ) { + if ( $delete && $count ) { $this->output( "Deleting..." ); $set = implode( ', ', $old ); $dbw->query( "DELETE FROM $tbl_rev WHERE rev_id IN ( $set )" ); $this->output( "done.\n" ); } - + # This bit's done # Purge redundant text records $dbw->commit(); - if( $delete ) { + if ( $delete ) { $this->purgeRedundantText( true ); } } } $maintClass = "DeleteOldRevisions"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/deleteOrphanedRevisions.php b/maintenance/deleteOrphanedRevisions.php index 1146befb..e972d1fa 100644 --- a/maintenance/deleteOrphanedRevisions.php +++ b/maintenance/deleteOrphanedRevisions.php @@ -24,7 +24,7 @@ * @todo More efficient cleanup of text records */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class DeleteOrphanedRevisions extends Maintenance { public function __construct() { @@ -36,7 +36,7 @@ class DeleteOrphanedRevisions extends Maintenance { public function execute() { $this->output( "Delete Orphaned Revisions\n" ); - $report = $this->hasOption('report'); + $report = $this->hasOption( 'report' ); $dbw = wfGetDB( DB_MASTER ); $dbw->begin(); @@ -46,45 +46,44 @@ class DeleteOrphanedRevisions extends Maintenance { $this->output( "Checking for orphaned revisions..." ); $sql = "SELECT rev_id FROM {$revision} LEFT JOIN {$page} ON rev_page = page_id WHERE page_namespace IS NULL"; $res = $dbw->query( $sql, 'deleteOrphanedRevisions' ); - + # Stash 'em all up for deletion (if needed) $revisions = array(); - foreach( $res as $row ) + foreach ( $res as $row ) $revisions[] = $row->rev_id; - $dbw->freeResult( $res ); $count = count( $revisions ); $this->output( "found {$count}.\n" ); - + # Nothing to do? - if( $report || $count == 0 ) { + if ( $report || $count == 0 ) { $dbw->commit(); - exit(0); + exit( 0 ); } - + # Delete each revision $this->output( "Deleting..." ); $this->deleteRevs( $revisions, $dbw ); $this->output( "done.\n" ); - + # Close the transaction and call the script to purge unused text records $dbw->commit(); $this->purgeRedundantText( true ); } - + /** * Delete one or more revisions from the database * Do this inside a transaction * * @param $id Array of revision id values - * @param $db Database class (needs to be a master) + * @param $dbw Database class (needs to be a master) */ private function deleteRevs( $id, &$dbw ) { - if( !is_array( $id ) ) + if ( !is_array( $id ) ) $id = array( $id ); $dbw->delete( 'revision', array( 'rev_id' => $id ), __METHOD__ ); } } $maintClass = "DeleteOrphanedRevisions"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/deleteRevision.php b/maintenance/deleteRevision.php index 5dc0b59f..5e8ecaac 100644 --- a/maintenance/deleteRevision.php +++ b/maintenance/deleteRevision.php @@ -20,24 +20,24 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class DeleteRevision extends Maintenance { - + public function __construct() { parent::__construct(); $this->mDescription = "Delete one or more revisions by moving them to the archive table"; } - + public function execute() { - if( count( $this->mArgs ) == 0 ) { + if ( count( $this->mArgs ) == 0 ) { $this->error( "No revisions specified", true ); } - $this->output( "Deleting revision(s) " . implode( ',', $this->mArgs ) . + $this->output( "Deleting revision(s) " . implode( ',', $this->mArgs ) . " from " . wfWikiID() . "...\n" ); $dbw = wfGetDB( DB_MASTER ); - + $affected = 0; foreach ( $this->mArgs as $revID ) { $dbw->insertSelect( 'archive', array( 'page', 'revision' ), @@ -78,4 +78,4 @@ class DeleteRevision extends Maintenance { } $maintClass = "DeleteRevision"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/deleteSelfExternals.php b/maintenance/deleteSelfExternals.php index 1ab2839e..db23e92c 100644 --- a/maintenance/deleteSelfExternals.php +++ b/maintenance/deleteSelfExternals.php @@ -2,7 +2,7 @@ /** * We want to make this whole thing as seamless as possible to the * end-user. Unfortunately, we can't do _all_ of the work in the class - * because A) included files are not in global scope, but in the scope + * because A) included files are not in global scope, but in the scope * of their caller, and B) MediaWiki has way too many globals. So instead * we'll kinda fake it, and do the requires() inline. <3 PHP * @@ -24,7 +24,7 @@ * @ingroup Maintenance */ -require_once( "Maintenance.php" ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class DeleteSelfExternals extends Maintenance { @@ -33,22 +33,22 @@ class DeleteSelfExternals extends Maintenance { $this->mDescription = 'Delete self-references to $wgServer from externallinks'; $this->mBatchSize = 1000; } - + public function execute() { global $wgServer; $this->output( "Deleting self externals from $wgServer\n" ); - $db = wfGetDB(DB_MASTER); - while (1) { + $db = wfGetDB( DB_MASTER ); + while ( 1 ) { wfWaitForSlaves( 2 ); $db->commit(); - $q = $db->limitResult( "DELETE /* deleteSelfExternals */ FROM externallinks WHERE el_to" + $q = $db->limitResult( "DELETE /* deleteSelfExternals */ FROM externallinks WHERE el_to" . $db->buildLike( $wgServer . '/', $db->anyString() ), $this->mBatchSize ); $this->output( "Deleting a batch\n" ); - $db->query($q); - if (!$db->affectedRows()) exit(0); + $db->query( $q ); + if ( !$db->affectedRows() ) return; } } } $maintClass = "DeleteSelfExternals"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/doMaintenance.php b/maintenance/doMaintenance.php index 008c5b87..a9f5fae7 100644 --- a/maintenance/doMaintenance.php +++ b/maintenance/doMaintenance.php @@ -2,7 +2,7 @@ /** * We want to make this whole thing as seamless as possible to the * end-user. Unfortunately, we can't do _all_ of the work in the class - * because A) included files are not in global scope, but in the scope + * because A) included files are not in global scope, but in the scope * of their caller, and B) MediaWiki has way too many globals. So instead * we'll kinda fake it, and do the requires() inline. <3 PHP * @@ -26,18 +26,21 @@ * @ingroup Maintenance */ -if ( !defined( 'DO_MAINTENANCE' ) ) { +if ( !defined( 'RUN_MAINTENANCE_IF_MAIN' ) ) { echo "This file must be included after Maintenance.php\n"; exit( 1 ); } -if( !$maintClass || !class_exists( $maintClass ) ) { - echo "\$maintClass is not set or is set to a non-existent class.\n"; - exit( 1 ); +// Wasn't included from the file scope, halt execution (probably wanted the class) +// If a class is using commandLine.inc (old school maintenance), they definitely +// cannot be included and will proceed with execution +if( !Maintenance::shouldExecute() && $maintClass != 'CommandLineInc' ) { + return; } -if( defined( 'MW_NO_SETUP' ) ) { - return; +if ( !$maintClass || !class_exists( $maintClass ) ) { + echo "\$maintClass is not set or is set to a non-existent class.\n"; + exit( 1 ); } // Get an object to start us off @@ -51,6 +54,7 @@ $maintenance->setup(); $self = $maintenance->getName(); # Setup the profiler +global $IP; if ( file_exists( "$IP/StartProfiler.php" ) ) { require_once( "$IP/StartProfiler.php" ); } else { @@ -60,10 +64,19 @@ if ( file_exists( "$IP/StartProfiler.php" ) ) { // Some other requires require_once( "$IP/includes/AutoLoader.php" ); require_once( "$IP/includes/Defines.php" ); +require_once( "$IP/includes/DefaultSettings.php" ); -// Load settings, using wikimedia-mode if needed -// Fixme: replace this hack with general farm-friendly code -if( file_exists( "$IP/wmf-config/wikimedia-mode" ) ) { +if ( defined( 'MW_CONFIG_CALLBACK' ) ) { + # Use a callback function to configure MediaWiki + $callback = MW_CONFIG_CALLBACK; + # PHP 5.1 doesn't support "class::method" for call_user_func, so split it + if ( strpos( $callback, '::' ) !== false ) { + $callback = explode( '::', $callback, 2 ); + } + call_user_func( $callback ); +} elseif ( file_exists( "$IP/wmf-config/wikimedia-mode" ) ) { + // Load settings, using wikimedia-mode if needed + // Fixme: replace this hack with general farm-friendly code # TODO FIXME! Wikimedia-specific stuff needs to go away to an ext # Maybe a hook? global $cluster; @@ -72,10 +85,11 @@ if( file_exists( "$IP/wmf-config/wikimedia-mode" ) ) { require_once( "$IP/includes/SiteConfiguration.php" ); require( "$IP/wmf-config/wgConf.php" ); $maintenance->loadWikimediaSettings(); - require( $IP.'/wmf-config/CommonSettings.php' ); + require( $IP . '/wmf-config/CommonSettings.php' ); } else { require_once( $maintenance->loadSettings() ); } + if ( $maintenance->getDbType() === Maintenance::DB_ADMIN && is_readable( "$IP/AdminSettings.php" ) ) { @@ -87,7 +101,7 @@ require_once( "$IP/includes/Setup.php" ); require_once( "$IP/maintenance/install-utils.inc" ); // Much much faster startup than creating a title object -$wgTitle = null; +$wgTitle = null; // Do the work try { @@ -95,7 +109,7 @@ try { // Potentially debug globals $maintenance->globals(); -} catch( MWException $mwe ) { +} catch ( MWException $mwe ) { echo( $mwe->getText() ); exit( 1 ); } diff --git a/maintenance/dumpBackup.php b/maintenance/dumpBackup.php index 3f4530ed..90e8f72f 100644 --- a/maintenance/dumpBackup.php +++ b/maintenance/dumpBackup.php @@ -1,6 +1,9 @@ + * Script that dumps wiki pages or logging database into an XML interchange + * wrapper format for export or backup + * + * Copyright © 2005 Brion Vibber * http://www.mediawiki.org/ * * This program is free software; you can redistribute it and/or modify @@ -26,12 +29,12 @@ $originalDir = getcwd(); $optionsWithArgs = array( 'pagelist', 'start', 'end' ); -require_once( dirname(__FILE__) . '/commandLine.inc' ); +require_once( dirname( __FILE__ ) . '/commandLine.inc' ); require_once( 'backup.inc' ); $dumper = new BackupDumper( $argv ); -if( isset( $options['quiet'] ) ) { +if ( isset( $options['quiet'] ) ) { $dumper->reporting = false; } @@ -47,10 +50,10 @@ if ( isset( $options['pagelist'] ) ) { $dumper->pages = array_filter( $pages, create_function( '$x', 'return $x !== "";' ) ); } -if( isset( $options['start'] ) ) { +if ( isset( $options['start'] ) ) { $dumper->startId = intval( $options['start'] ); } -if( isset( $options['end'] ) ) { +if ( isset( $options['end'] ) ) { $dumper->endId = intval( $options['end'] ); } $dumper->skipHeader = isset( $options['skip-header'] ); @@ -59,13 +62,13 @@ $dumper->dumpUploads = isset( $options['uploads'] ); $textMode = isset( $options['stub'] ) ? WikiExporter::STUB : WikiExporter::TEXT; -if( isset( $options['full'] ) ) { +if ( isset( $options['full'] ) ) { $dumper->dump( WikiExporter::FULL, $textMode ); -} elseif( isset( $options['current'] ) ) { +} elseif ( isset( $options['current'] ) ) { $dumper->dump( WikiExporter::CURRENT, $textMode ); -} elseif( isset( $options['stable'] ) ) { +} elseif ( isset( $options['stable'] ) ) { $dumper->dump( WikiExporter::STABLE, $textMode ); -} elseif( isset( $options['logs'] ) ) { +} elseif ( isset( $options['logs'] ) ) { $dumper->dump( WikiExporter::LOGS ); } else { $dumper->progress( << + Where is a list of page titles to be dumped Options: --quiet Don't dump status reports to stderr. --report=n Report position and speed after every n pages processed. - (Default: 100) + (Default: 100) --server=h Force reading from MySQL server h --start=n Start from page_id or log_id n --end=n Stop before page_id or log_id n (exclusive) @@ -91,11 +97,14 @@ Options: --skip-footer Don't output the footer --stub Don't perform old_text lookups; for 2-pass dump --uploads Include upload records (experimental) + --conf= Use the specified configuration file (LocalSettings.php) + + --wiki= Only back up the specified Fancy stuff: (Works? Add examples please.) --plugin=[:] Load a dump plugin class --output=: Begin a filtered output stream; - s: file, gzip, bzip2, 7zip + s: file, gzip, bzip2, 7zip --filter=[:] Add a filter on an output branch ENDS diff --git a/maintenance/dumpInterwiki.inc b/maintenance/dumpInterwiki.inc deleted file mode 100644 index c366b08c..00000000 --- a/maintenance/dumpInterwiki.inc +++ /dev/null @@ -1,209 +0,0 @@ -suffix = $s; - $this->lateral = $l; - $this->url = $u; - } - - function getURL( $lang ) { - $xlang = str_replace( '_', '-', $lang ); - return "http://$xlang.{$this->url}/wiki/\$1"; - } -} - -function getRebuildInterwikiDump() { - global $langlist, $languageAliases, $prefixRewrites; - - # Multi-language sites - # db suffix => db suffix, iw prefix, hostname - $sites = array( - 'wiki' => new Site( 'wiki', 'w', 'wikipedia.org' ), - 'wiktionary' => new Site( 'wiktionary', 'wikt', 'wiktionary.org' ), - 'wikiquote' => new Site( 'wikiquote', 'q', 'wikiquote.org' ), - 'wikibooks' => new Site( 'wikibooks', 'b', 'wikibooks.org' ), - 'wikinews' => new Site( 'wikinews', 'n', 'wikinews.org' ), - 'wikisource' => new Site( 'wikisource', 's', 'wikisource.org' ), - 'wikimedia' => new Site( 'wikimedia', 'chapter', 'wikimedia.org' ), - 'wikiversity' => new Site( 'wikiversity', 'v', 'wikiversity.org' ), - ); - - # List of language prefixes likely to be found in multi-language sites - $langlist = array_map( "trim", file( "/home/wikipedia/common/langlist" ) ); - - # List of all database names - $dblist = array_map( "trim", file( "/home/wikipedia/common/all.dblist" ) ); - - # Special-case databases - $specials = array_flip( - array_map( "trim", - file( "/home/wikipedia/common/special.dblist" ) ) ); - - # Extra interwiki links that can't be in the intermap for some reason - $extraLinks = array( - array( 'm', 'http://meta.wikimedia.org/wiki/$1', 1 ), - array( 'meta', 'http://meta.wikimedia.org/wiki/$1', 1 ), - array( 'sep11', 'http://sep11.wikipedia.org/wiki/$1', 1 ), - ); - - # Language aliases, usually configured as redirects to the real wiki in apache - # Interlanguage links are made directly to the real wiki - # Something horrible happens if you forget to list an alias here, I can't - # remember what - $languageAliases = array( - 'zh-cn' => 'zh', - 'zh-tw' => 'zh', - 'dk' => 'da', - 'nb' => 'no', - ); - - # Special case prefix rewrites, for the benefit of Swedish which uses s:t - # as an abbreviation for saint - $prefixRewrites = array( - 'svwiki' => array ( 's' => 'src'), - ); - - # Construct a list of reserved prefixes - $reserved = array(); - foreach ( $langlist as $lang ) { - $reserved[$lang] = 1; - } - foreach ( $languageAliases as $alias => $lang ) { - $reserved[$alias] = 1; - } - foreach( $sites as $site ) { - $reserved[$site->lateral] = 1; - } - - # Extract the intermap from meta - $intermap = Http::get( 'http://meta.wikimedia.org/w/index.php?title=Interwiki_map&action=raw', 30 ); - $lines = array_map( 'trim', explode( "\n", trim( $intermap ) ) ); - - if ( !$lines || count( $lines ) < 2 ) { - wfDie( "m:Interwiki_map not found" ); - } - - # Global iterwiki map - foreach ( $lines as $line ) { - if ( preg_match( '/^\|\s*(.*?)\s*\|\|\s*(.*?)\s*$/', $line, $matches ) ) { - $prefix = strtolower( $matches[1] ); - $url = $matches[2]; - if ( preg_match( '/(wikipedia|wiktionary|wikisource|wikiquote|wikibooks|wikimedia)\.org/', $url ) ) { - $local = 1; - } else { - $local = 0; - } - - if ( empty( $reserved[$prefix] ) ) { - $imap = array( "iw_prefix" => $prefix, "iw_url" => $url, "iw_local" => $local ); - makeLink ($imap, "__global"); - } - } - } - - # Exclude Wikipedia for Wikipedia - makeLink ( array ('iw_prefix' => 'wikipedia', 'is_url' => null ), "_wiki" ); - - #Multilanguage sites - foreach ($sites as $site) - makeLanguageLinks ( $site, "_".$site->suffix ); - - - foreach ( $dblist as $db ) { - if ( isset( $specials[$db] ) ) { - # Special wiki - # Has interwiki links and interlanguage links to wikipedia - - makeLink( array( 'iw_prefix' => $db, 'iw_url' => "wiki"), "__sites" ); - # Links to multilanguage sites - foreach ( $sites as $targetSite ) { - makeLink( array( 'iw_prefix' => $targetSite->lateral, - 'iw_url' =>$targetSite->getURL( 'en' ), - 'iw_local' => 1 ), $db ); - } - - } else { - # Find out which site this DB belongs to - $site = false; - foreach( $sites as $candidateSite ) { - $suffix = $candidateSite->suffix; - if ( preg_match( "/(.*)$suffix$/", $db, $matches ) ) { - $site = $candidateSite; - break; - } - } - makeLink( array( 'iw_prefix' => $db, 'iw_url' => $site->suffix), "__sites" ); - if ( !$site ) { - print "Invalid database $db\n"; - continue; - } - $lang = $matches[1]; - - # Lateral links - foreach ( $sites as $targetSite ) { - if ( $targetSite->suffix != $site->suffix ) { - makeLink( array( 'iw_prefix' => $targetSite->lateral, - 'iw_url' => $targetSite->getURL( $lang ), - 'iw_local' => 1 ), $db ); - } - } - - if ( $site->suffix == "wiki" ) { - makeLink( array('iw_prefix' => 'w', - 'iw_url' => "http://en.wikipedia.org/wiki/$1", - 'iw_local' => 1), $db ); - } - - } - } - foreach ( $extraLinks as $link ) - makeLink( $link, "__global" ); -} - -# ------------------------------------------------------------------------------------------ - -# Executes part of an INSERT statement, corresponding to all interlanguage links to a particular site -function makeLanguageLinks( &$site, $source ) { - global $langlist, $languageAliases; - # Actual languages with their own databases - foreach ( $langlist as $targetLang ) { - makeLink( array( $targetLang, $site->getURL( $targetLang ), 1 ), $source ); - } - - # Language aliases - foreach ( $languageAliases as $alias => $lang ) { - makeLink( array( $alias, $site->getURL( $lang ), 1 ), $source ); - } -} - -function makeLink( $entry, $source ) { - global $prefixRewrites, $dbFile; - if ( isset( $prefixRewrites[$source] ) && isset( $prefixRewrites[$source][$entry[0]] ) ) - $entry[0] = $prefixRewrites[$source][$entry[0]]; - if (!array_key_exists("iw_prefix",$entry)) - $entry = array("iw_prefix" => $entry[0], "iw_url" => $entry[1], "iw_local" => $entry[2]); - if ( array_key_exists($source,$prefixRewrites) && - array_key_exists($entry['iw_prefix'],$prefixRewrites[$source])) - $entry['iw_prefix'] = $prefixRewrites[$source][$entry['iw_prefix']]; - if ($dbFile) - $dbFile->set( "{$source}:{$entry['iw_prefix']}", trim("{$entry['iw_local']} {$entry['iw_url']}") ); - else - print "{$source}:{$entry['iw_prefix']} {$entry['iw_url']} {$entry['iw_local']}\n"; - - } diff --git a/maintenance/dumpInterwiki.php b/maintenance/dumpInterwiki.php index 045e393b..4a4b6791 100644 --- a/maintenance/dumpInterwiki.php +++ b/maintenance/dumpInterwiki.php @@ -1,6 +1,6 @@ suffix = $s; + $this->lateral = $l; + $this->url = $u; + } + + function getURL( $lang ) { + $xlang = str_replace( '_', '-', $lang ); + return "http://$xlang.{$this->url}/wiki/\$1"; + } +} + +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); + +class DumpInterwiki extends Maintenance { + + public function __construct() { + parent::__construct(); + $this->mDescription = "Build constant slightly compact database of interwiki prefixes."; + $this->addOption( 'langlist', 'File with one language code per line', false, true ); + $this->addOption( 'dblist', 'File with one db per line', false, true ); + $this->addOption( 'specialdbs', "File with one 'special' db per line", false, true ); + $this->addOption( 'o', 'Cdb output file', false, true ); + } + + function execute() { + # List of language prefixes likely to be found in multi-language sites + $this->langlist = array_map( "trim", file( $this->getOption( 'langlist', "/home/wikipedia/common/langlist" ) ) ); + + # List of all database names + $this->dblist = array_map( "trim", file( $this->getOption( 'dblist', "/home/wikipedia/common/all.dblist" ) ) ); + + # Special-case databases + $this->specials = array_flip( array_map( "trim", file( $this->getOption( 'specialdbs', "/home/wikipedia/common/special.dblist" ) ) ) ); + + if ( $this->hasOption( 'o' ) ) { + $this->dbFile = CdbWriter::open( $this->getOption( 'o' ) ) ; + } else { + $this->dbFile = false; + } + + $this->getRebuildInterwikiDump(); + } + + function getRebuildInterwikiDump() { + global $wgContLang; + + # Multi-language sites + # db suffix => db suffix, iw prefix, hostname + $sites = array( + 'wiki' => new Site( 'wiki', 'w', 'wikipedia.org' ), + 'wiktionary' => new Site( 'wiktionary', 'wikt', 'wiktionary.org' ), + 'wikiquote' => new Site( 'wikiquote', 'q', 'wikiquote.org' ), + 'wikibooks' => new Site( 'wikibooks', 'b', 'wikibooks.org' ), + 'wikinews' => new Site( 'wikinews', 'n', 'wikinews.org' ), + 'wikisource' => new Site( 'wikisource', 's', 'wikisource.org' ), + 'wikimedia' => new Site( 'wikimedia', 'chapter', 'wikimedia.org' ), + 'wikiversity' => new Site( 'wikiversity', 'v', 'wikiversity.org' ), + ); + + # Extra interwiki links that can't be in the intermap for some reason + $extraLinks = array( + array( 'm', 'http://meta.wikimedia.org/wiki/$1', 1 ), + array( 'meta', 'http://meta.wikimedia.org/wiki/$1', 1 ), + array( 'sep11', 'http://sep11.wikipedia.org/wiki/$1', 1 ), + ); + + # Language aliases, usually configured as redirects to the real wiki in apache + # Interlanguage links are made directly to the real wiki + # Something horrible happens if you forget to list an alias here, I can't + # remember what + $this->languageAliases = array( + 'zh-cn' => 'zh', + 'zh-tw' => 'zh', + 'dk' => 'da', + 'nb' => 'no', + ); + + # Special case prefix rewrites, for the benefit of Swedish which uses s:t + # as an abbreviation for saint + $this->prefixRewrites = array( + 'svwiki' => array( 's' => 'src' ), + ); + + # Construct a list of reserved prefixes + $reserved = array(); + foreach ( $this->langlist as $lang ) { + $reserved[$lang] = 1; + } + foreach ( $this->languageAliases as $alias => $lang ) { + $reserved[$alias] = 1; + } + foreach ( $sites as $site ) { + $reserved[$site->lateral] = 1; + } + + # Extract the intermap from meta + $intermap = Http::get( 'http://meta.wikimedia.org/w/index.php?title=Interwiki_map&action=raw', 30 ); + $lines = array_map( 'trim', explode( "\n", trim( $intermap ) ) ); + + if ( !$lines || count( $lines ) < 2 ) { + $this->error( "m:Interwiki_map not found", true ); + } + + # Global iterwiki map + foreach ( $lines as $line ) { + if ( preg_match( '/^\|\s*(.*?)\s*\|\|\s*(.*?)\s*$/', $line, $matches ) ) { + $prefix = $wgContLang->lc( $matches[1] ); + $prefix = str_replace( ' ', '_', $prefix ); + + $url = $matches[2]; + if ( preg_match( '/(wikipedia|wiktionary|wikisource|wikiquote|wikibooks|wikimedia)\.org/', $url ) ) { + $local = 1; + } else { + $local = 0; + } + + if ( empty( $reserved[$prefix] ) ) { + $imap = array( "iw_prefix" => $prefix, "iw_url" => $url, "iw_local" => $local ); + $this->makeLink ( $imap, "__global" ); + } + } + } + + # Exclude Wikipedia for Wikipedia + $this->makeLink ( array ( 'iw_prefix' => 'wikipedia', 'is_url' => null ), "_wiki" ); + + # Multilanguage sites + foreach ( $sites as $site ) { + $this->makeLanguageLinks ( $site, "_" . $site->suffix ); + } + + foreach ( $this->dblist as $db ) { + if ( isset( $this->specials[$db] ) ) { + # Special wiki + # Has interwiki links and interlanguage links to wikipedia + + $this->makeLink( array( 'iw_prefix' => $db, 'iw_url' => "wiki" ), "__sites" ); + # Links to multilanguage sites + foreach ( $sites as $targetSite ) { + $this->makeLink( array( 'iw_prefix' => $targetSite->lateral, + 'iw_url' => $targetSite->getURL( 'en' ), + 'iw_local' => 1 ), $db ); + } + } else { + # Find out which site this DB belongs to + $site = false; + foreach ( $sites as $candidateSite ) { + $suffix = $candidateSite->suffix; + if ( preg_match( "/(.*)$suffix$/", $db, $matches ) ) { + $site = $candidateSite; + break; + } + } + $this->makeLink( array( 'iw_prefix' => $db, 'iw_url' => $site->suffix ), "__sites" ); + if ( !$site ) { + $this->error( "Invalid database $db\n" ); + continue; + } + $lang = $matches[1]; + + # Lateral links + foreach ( $sites as $targetSite ) { + if ( $targetSite->suffix != $site->suffix ) { + $this->makeLink( array( 'iw_prefix' => $targetSite->lateral, + 'iw_url' => $targetSite->getURL( $lang ), + 'iw_local' => 1 ), $db ); + } + } + + if ( $site->suffix == "wiki" ) { + $this->makeLink( array( 'iw_prefix' => 'w', + 'iw_url' => "http://en.wikipedia.org/wiki/$1", + 'iw_local' => 1 ), $db ); + } + + } + } + foreach ( $extraLinks as $link ) { + $this->makeLink( $link, "__global" ); + } + } + + # ------------------------------------------------------------------------------------------ + + # Executes part of an INSERT statement, corresponding to all interlanguage links to a particular site + function makeLanguageLinks( &$site, $source ) { + # Actual languages with their own databases + foreach ( $this->langlist as $targetLang ) { + $this->makeLink( array( $targetLang, $site->getURL( $targetLang ), 1 ), $source ); + } + + # Language aliases + foreach ( $this->languageAliases as $alias => $lang ) { + $this->makeLink( array( $alias, $site->getURL( $lang ), 1 ), $source ); + } + } + + function makeLink( $entry, $source ) { + if ( isset( $this->prefixRewrites[$source] ) && isset( $this->prefixRewrites[$source][$entry[0]] ) ) + $entry[0] = $this->prefixRewrites[$source][$entry[0]]; -$optionsWithArgs = array( "o" ); -require_once( dirname(__FILE__) . '/commandLine.inc' ); -require( dirname(__FILE__)."/dumpInterwiki.inc" ); -chdir( $oldCwd ); + if ( !array_key_exists( "iw_prefix", $entry ) ) { + $entry = array( "iw_prefix" => $entry[0], "iw_url" => $entry[1], "iw_local" => $entry[2] ); + } + if ( array_key_exists( $source, $this->prefixRewrites ) && + array_key_exists( $entry['iw_prefix'], $this->prefixRewrites[$source] ) ) { + $entry['iw_prefix'] = $this->prefixRewrites[$source][$entry['iw_prefix']]; + } -# Output -if ( isset( $options['o'] ) ) { - # To database specified with -o - $dbFile = CdbWriter::open( $options['o'] ); -} + if ( $this->dbFile ) { + $this->dbFile->set( "{$source}:{$entry['iw_prefix']}", trim( "{$entry['iw_local']} {$entry['iw_url']}" ) ); + } else { + $this->output( "{$source}:{$entry['iw_prefix']} {$entry['iw_url']} {$entry['iw_local']}\n" ); + } + } +} -getRebuildInterwikiDump(); +$maintClass = "DumpInterwiki"; +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/dumpLinks.php b/maintenance/dumpLinks.php index 529cd1aa..39a9e955 100644 --- a/maintenance/dumpLinks.php +++ b/maintenance/dumpLinks.php @@ -29,7 +29,7 @@ * @ingroup Mainatenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class DumpLinks extends Maintenance { public function __construct() { @@ -49,11 +49,11 @@ class DumpLinks extends Maintenance { array( 'page_id=pl_from' ), __METHOD__, array( 'ORDER BY' => 'page_id' ) ); - + $lastPage = null; - foreach( $result as $row ) { - if( $lastPage != $row->page_id ) { - if( isset( $lastPage ) ) { + foreach ( $result as $row ) { + if ( $lastPage != $row->page_id ) { + if ( isset( $lastPage ) ) { $this->output( "\n" ); } $page = Title::makeTitle( $row->page_namespace, $row->page_title ); @@ -63,11 +63,11 @@ class DumpLinks extends Maintenance { $link = Title::makeTitle( $row->pl_namespace, $row->pl_title ); $this->output( " " . $link->getPrefixedUrl() ); } - if( isset( $lastPage ) ) + if ( isset( $lastPage ) ) $this->output( "\n" ); } } $maintClass = "DumpLinks"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/dumpSisterSites.php b/maintenance/dumpSisterSites.php index d9fd28a6..f5abcd1b 100644 --- a/maintenance/dumpSisterSites.php +++ b/maintenance/dumpSisterSites.php @@ -24,14 +24,14 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class DumpSisterSites extends Maintenance { public function __construct() { parent::__construct(); $this->mDescription = "Quickie page name dump script for SisterSites usage"; } - + public function execute() { $dbr = wfGetDB( DB_SLAVE ); $dbr->bufferResults( false ); @@ -42,15 +42,14 @@ class DumpSisterSites extends Maintenance { ), __METHOD__ ); - foreach( $result as $row ) { + foreach ( $result as $row ) { $title = Title::makeTitle( $row->page_namespace, $row->page_title ); $url = $title->getFullUrl(); $text = $title->getPrefixedText(); $this->output( "$url $text\n" ); } - $dbr->freeResult( $result ); } } $maintClass = "DumpSisterSites"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/dumpTextPass.php b/maintenance/dumpTextPass.php index 2e639e68..98d4af0e 100644 --- a/maintenance/dumpTextPass.php +++ b/maintenance/dumpTextPass.php @@ -1,6 +1,8 @@ + * Script that postprocesses XML dumps from dumpBackup.php to add page text + * + * Copyright © 2005 Brion Vibber , 2010 Alexandre Emsenhuber * http://www.mediawiki.org/ * * This program is free software; you can redistribute it and/or modify @@ -24,7 +26,7 @@ $originalDir = getcwd(); -require_once( dirname(__FILE__) . '/commandLine.inc' ); +require_once( dirname( __FILE__ ) . '/commandLine.inc' ); require_once( 'backup.inc' ); /** @@ -33,14 +35,15 @@ require_once( 'backup.inc' ); class TextPassDumper extends BackupDumper { var $prefetch = null; var $input = "php://stdin"; - var $history = WikiExporter::FULL; var $fetchCount = 0; var $prefetchCount = 0; - + var $failures = 0; - var $maxFailures = 200; + var $maxFailures = 5; + var $failedTextRetrievals = 0; + var $maxConsecutiveFailedTextRetrievals = 200; var $failureTimeout = 5; // Seconds to sleep after db failure - + var $php = "php"; var $spawn = false; var $spawnProc = false; @@ -48,29 +51,22 @@ class TextPassDumper extends BackupDumper { var $spawnRead = false; var $spawnErr = false; - function dump() { + function dump( $history, $text = WikiExporter::TEXT ) { # This shouldn't happen if on console... ;) header( 'Content-type: text/html; charset=UTF-8' ); # Notice messages will foul up your XML output even if they're # relatively harmless. - if( ini_get( 'display_errors' ) ) + if ( ini_get( 'display_errors' ) ) ini_set( 'display_errors', 'stderr' ); - $this->initProgress( $this->history ); + $this->initProgress( $history ); $this->db = $this->backupDb(); - $this->egress = new ExportProgressFilter( $this->sink, $this ); + $this->readDump(); - $input = fopen( $this->input, "rt" ); - $result = $this->readDump( $input ); - - if( WikiError::isError( $result ) ) { - wfDie( $result->getMessage() ); - } - - if( $this->spawnProc ) { + if ( $this->spawnProc ) { $this->closeSpawn(); } @@ -78,59 +74,63 @@ class TextPassDumper extends BackupDumper { } function processOption( $opt, $val, $param ) { + global $IP; $url = $this->processFileOpt( $val, $param ); - + switch( $opt ) { case 'prefetch': - global $IP; require_once "$IP/maintenance/backupPrefetch.inc"; $this->prefetch = new BaseDump( $url ); break; case 'stub': $this->input = $url; break; - case 'current': - $this->history = WikiExporter::CURRENT; - break; - case 'full': - $this->history = WikiExporter::FULL; - break; case 'spawn': $this->spawn = true; - if( $val ) { + if ( $val ) { $this->php = $val; } break; } } - + function processFileOpt( $val, $param ) { - switch( $val ) { - case "file": - return $param; - case "gzip": - return "compress.zlib://$param"; - case "bzip2": - return "compress.bzip2://$param"; - case "7zip": - return "mediawiki.compress.7z://$param"; - default: - return $val; + $fileURIs = explode(';',$param); + foreach ( $fileURIs as $URI ) { + switch( $val ) { + case "file": + $newURI = $URI; + break; + case "gzip": + $newURI = "compress.zlib://$URI"; + break; + case "bzip2": + $newURI = "compress.bzip2://$URI"; + break; + case "7zip": + $newURI = "mediawiki.compress.7z://$URI"; + break; + default: + $newURI = $URI; + } + $newFileURIs[] = $newURI; } + $val = implode( ';', $newFileURIs ); + return $val; } /** * Overridden to include prefetch ratio if enabled. */ function showReport() { - if( !$this->prefetch ) { + if ( !$this->prefetch ) { return parent::showReport(); } - - if( $this->reporting ) { + + if ( $this->reporting ) { $delta = wfTime() - $this->startTime; $now = wfTimestamp( TS_DB ); - if( $delta ) { + if ( $delta ) { $rate = $this->pageCount / $delta; $revrate = $this->revCount / $delta; $portion = $this->revCount / $this->maxCount; @@ -148,150 +148,207 @@ class TextPassDumper extends BackupDumper { } } - function readDump( $input ) { - $this->buffer = ""; - $this->openElement = false; - $this->atStart = true; - $this->state = ""; - $this->lastName = ""; + function readDump() { + $state = ''; + $lastName = ''; $this->thisPage = 0; $this->thisRev = 0; - $parser = xml_parser_create( "UTF-8" ); - xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, false ); + $reader = new XMLReader(); + $reader->open( $this->input ); + $writer = new XMLWriter(); + $writer->openMemory(); + - xml_set_element_handler( $parser, array( &$this, 'startElement' ), array( &$this, 'endElement' ) ); - xml_set_character_data_handler( $parser, array( &$this, 'characterData' ) ); + while ( $reader->read() ) { + $tag = $reader->name; + $type = $reader->nodeType; - $offset = 0; // for context extraction on error reporting - $bufferSize = 512 * 1024; - do { - $chunk = fread( $input, $bufferSize ); - if( !xml_parse( $parser, $chunk, feof( $input ) ) ) { - wfDebug( "TextDumpPass::readDump encountered XML parsing error\n" ); - return new WikiXmlError( $parser, 'XML import parse failure', $chunk, $offset ); + if ( $type == XmlReader::END_ELEMENT ) { + $writer->endElement(); + + if ( $tag == 'revision' ) { + $this->revCount(); + $this->thisRev = ''; + } elseif ( $tag == 'page' ) { + $this->reportPage(); + $this->thisPage = ''; + } + } elseif ( $type == XmlReader::ELEMENT ) { + $attribs = array(); + if ( $reader->hasAttributes ) { + for ( $i = 0; $reader->moveToAttributeNo( $i ); $i++ ) { + $attribs[$reader->name] = $reader->value; + } + } + + if ( $reader->isEmptyElement && $tag == 'text' && isset( $attribs['id'] ) ) { + $writer->startElement( 'text' ); + $writer->writeAttribute( 'xml:space', 'preserve' ); + $text = $this->getText( $attribs['id'] ); + if ( strlen( $text ) ) { + $writer->text( $text ); + } + $writer->endElement(); + } else { + $writer->startElement( $tag ); + foreach( $attribs as $name => $val ) { + $writer->writeAttribute( $name, $val ); + } + if ( $reader->isEmptyElement ) { + $writer->endElement(); + } + } + + $lastName = $tag; + if ( $tag == 'revision' ) { + $state = 'revision'; + } elseif ( $tag == 'page' ) { + $state = 'page'; + } + } elseif ( $type == XMLReader::SIGNIFICANT_WHITESPACE || $type = XMLReader::TEXT ) { + if ( $lastName == 'id' ) { + if ( $state == 'revision' ) { + $this->thisRev .= $reader->value; + } elseif ( $state == 'page' ) { + $this->thisPage .= $reader->value; + } + } + $writer->text( $reader->value ); } - $offset += strlen( $chunk ); - } while( $chunk !== false && !feof( $input ) ); - xml_parser_free( $parser ); - - return true; + $this->sink->write( $writer->outputMemory() ); + } } function getText( $id ) { $this->fetchCount++; - if( isset( $this->prefetch ) ) { + if ( isset( $this->prefetch ) ) { $text = $this->prefetch->prefetch( $this->thisPage, $this->thisRev ); - if( $text === null ) { - // Entry missing from prefetch dump - } elseif( $text === "" ) { - // Blank entries may indicate that the prior dump was broken. - // To be safe, reload it. - } else { - $this->prefetchCount++; - return $text; + if ( $text !== null ) { // Entry missing from prefetch dump + $dbr = wfGetDB( DB_SLAVE ); + $revID = intval( $this->thisRev ); + $revLength = $dbr->selectField( 'revision', 'rev_len', array( 'rev_id' => $revID ) ); + // if length of rev text in file doesn't match length in db, we reload + // this avoids carrying forward broken data from previous xml dumps + if( strlen( $text ) == $revLength ) { + $this->prefetchCount++; + return $text; + } } } return $this->doGetText( $id ); } - + private function doGetText( $id ) { - if( $this->spawn ) { - return $this->getTextSpawned( $id ); - } else { - return $this->getTextDbSafe( $id ); + $id = intval( $id ); + $this->failures = 0; + $ex = new MWException( "Graceful storage failure" ); + while (true) { + if ( $this->spawn ) { + if ($this->failures) { + // we don't know why it failed, could be the child process + // borked, could be db entry busted, could be db server out to lunch, + // so cover all bases + $this->closeSpawn(); + $this->openSpawn(); + } + $text = $this->getTextSpawned( $id ); + } else { + $text = $this->getTextDbSafe( $id ); + } + if ( $text === false ) { + $this->failures++; + if ( $this->failures > $this->maxFailures) { + $this->progress( "Failed to retrieve revision text for text id ". + "$id after $this->maxFailures tries, giving up" ); + // were there so many bad retrievals in a row we want to bail? + // at some point we have to declare the dump irretrievably broken + $this->failedTextRetrievals++; + if ($this->failedTextRetrievals > $this->maxConsecutiveFailedTextRetrievals) { + throw $ex; + } + else { + // would be nice to return something better to the caller someday, + // log what we know about the failure and about the revision + return(""); + } + } else { + $this->progress( "Error $this->failures " . + "of allowed $this->maxFailures retrieving revision text for text id $id! " . + "Pausing $this->failureTimeout seconds before retry..." ); + sleep( $this->failureTimeout ); + } + } else { + $this->failedTextRetrievals= 0; + return( $text ); + } } + } - + /** * Fetch a text revision from the database, retrying in case of failure. * This may survive some transitory errors by reconnecting, but * may not survive a long-term server outage. */ private function getTextDbSafe( $id ) { - while( true ) { + while ( true ) { try { $text = $this->getTextDb( $id ); - $ex = new MWException("Graceful storage failure"); - } catch (DBQueryError $ex) { + } catch ( DBQueryError $ex ) { $text = false; } - if( $text === false ) { - $this->failures++; - if( $this->failures > $this->maxFailures ) { - throw $ex; - } else { - $this->progress( "Database failure $this->failures " . - "of allowed $this->maxFailures for revision $id! " . - "Pausing $this->failureTimeout seconds..." ); - sleep( $this->failureTimeout ); - } - } else { - return $text; - } + return $text; } } - + /** * May throw a database error if, say, the server dies during query. */ private function getTextDb( $id ) { global $wgContLang; - $id = intval( $id ); $row = $this->db->selectRow( 'text', array( 'old_text', 'old_flags' ), array( 'old_id' => $id ), - 'TextPassDumper::getText' ); + __METHOD__ ); $text = Revision::getRevisionText( $row ); - if( $text === false ) { + if ( $text === false ) { return false; } $stripped = str_replace( "\r", "", $text ); $normalized = $wgContLang->normalize( $stripped ); return $normalized; } - + private function getTextSpawned( $id ) { wfSuppressWarnings(); - if( !$this->spawnProc ) { + if ( !$this->spawnProc ) { // First time? $this->openSpawn(); } - while( true ) { - - $text = $this->getTextSpawnedOnce( $id ); - if( !is_string( $text ) ) { - $this->progress("Database subprocess failed. Respawning..."); - - $this->closeSpawn(); - sleep( $this->failureTimeout ); - $this->openSpawn(); - - continue; - } - wfRestoreWarnings(); - return $text; - } + $text = $this->getTextSpawnedOnce( $id ); + wfRestoreWarnings(); + return $text; } - + function openSpawn() { - global $IP, $wgDBname; - + global $IP; + $cmd = implode( " ", array_map( 'wfEscapeShellArg', array( $this->php, "$IP/maintenance/fetchText.php", - $wgDBname ) ) ); + '--wiki', wfWikiID() ) ) ); $spec = array( 0 => array( "pipe", "r" ), 1 => array( "pipe", "w" ), 2 => array( "file", "/dev/null", "a" ) ); $pipes = array(); - + $this->progress( "Spawning database subprocess: $cmd" ); $this->spawnProc = proc_open( $cmd, $spec, $pipes ); - if( !$this->spawnProc ) { + if ( !$this->spawnProc ) { // shit $this->progress( "Subprocess spawn failed." ); return false; @@ -300,138 +357,83 @@ class TextPassDumper extends BackupDumper { $this->spawnWrite, // -> stdin $this->spawnRead, // <- stdout ) = $pipes; - + return true; } - + private function closeSpawn() { wfSuppressWarnings(); - if( $this->spawnRead ) + if ( $this->spawnRead ) fclose( $this->spawnRead ); $this->spawnRead = false; - if( $this->spawnWrite ) + if ( $this->spawnWrite ) fclose( $this->spawnWrite ); $this->spawnWrite = false; - if( $this->spawnErr ) + if ( $this->spawnErr ) fclose( $this->spawnErr ); $this->spawnErr = false; - if( $this->spawnProc ) + if ( $this->spawnProc ) pclose( $this->spawnProc ); $this->spawnProc = false; wfRestoreWarnings(); } - + private function getTextSpawnedOnce( $id ) { global $wgContLang; $ok = fwrite( $this->spawnWrite, "$id\n" ); - //$this->progress( ">> $id" ); - if( !$ok ) return false; - + // $this->progress( ">> $id" ); + if ( !$ok ) return false; + $ok = fflush( $this->spawnWrite ); - //$this->progress( ">> [flush]" ); - if( !$ok ) return false; - + // $this->progress( ">> [flush]" ); + if ( !$ok ) return false; + + // check that the text id they are sending is the one we asked for + // this avoids out of sync revision text errors we have encountered in the past + $newId = fgets( $this->spawnRead ); + if ( $newId === false ) { + return false; + } + if ( $id != intval( $newId ) ) { + return false; + } + $len = fgets( $this->spawnRead ); - //$this->progress( "<< " . trim( $len ) ); - if( $len === false ) return false; - + // $this->progress( "<< " . trim( $len ) ); + if ( $len === false ) return false; + $nbytes = intval( $len ); + // actual error, not zero-length text + if ($nbytes < 0 ) return false; + $text = ""; - + // Subprocess may not send everything at once, we have to loop. - while( $nbytes > strlen( $text ) ) { + while ( $nbytes > strlen( $text ) ) { $buffer = fread( $this->spawnRead, $nbytes - strlen( $text ) ); - if( $buffer === false ) break; + if ( $buffer === false ) break; $text .= $buffer; } - + $gotbytes = strlen( $text ); - if( $gotbytes != $nbytes ) { - $this->progress( "Expected $nbytes bytes from database subprocess, got $gotbytes "); + if ( $gotbytes != $nbytes ) { + $this->progress( "Expected $nbytes bytes from database subprocess, got $gotbytes " ); return false; } - + // Do normalization in the dump thread... $stripped = str_replace( "\r", "", $text ); $normalized = $wgContLang->normalize( $stripped ); return $normalized; } - - function startElement( $parser, $name, $attribs ) { - $this->clearOpenElement( null ); - $this->lastName = $name; - - if( $name == 'revision' ) { - $this->state = $name; - $this->egress->writeOpenPage( null, $this->buffer ); - $this->buffer = ""; - } elseif( $name == 'page' ) { - $this->state = $name; - if( $this->atStart ) { - $this->egress->writeOpenStream( $this->buffer ); - $this->buffer = ""; - $this->atStart = false; - } - } - - if( $name == "text" && isset( $attribs['id'] ) ) { - $text = $this->getText( $attribs['id'] ); - $this->openElement = array( $name, array( 'xml:space' => 'preserve' ) ); - if( strlen( $text ) > 0 ) { - $this->characterData( $parser, $text ); - } - } else { - $this->openElement = array( $name, $attribs ); - } - } - - function endElement( $parser, $name ) { - if( $this->openElement ) { - $this->clearOpenElement( "" ); - } else { - $this->buffer .= ""; - } - - if( $name == 'revision' ) { - $this->egress->writeRevision( null, $this->buffer ); - $this->buffer = ""; - $this->thisRev = ""; - } elseif( $name == 'page' ) { - $this->egress->writeClosePage( $this->buffer ); - $this->buffer = ""; - $this->thisPage = ""; - } elseif( $name == 'mediawiki' ) { - $this->egress->writeCloseStream( $this->buffer ); - $this->buffer = ""; - } - } - - function characterData( $parser, $data ) { - $this->clearOpenElement( null ); - if( $this->lastName == "id" ) { - if( $this->state == "revision" ) { - $this->thisRev .= $data; - } elseif( $this->state == "page" ) { - $this->thisPage .= $data; - } - } - $this->buffer .= htmlspecialchars( $data ); - } - - function clearOpenElement( $style ) { - if( $this->openElement ) { - $this->buffer .= Xml::element( $this->openElement[0], $this->openElement[1], $style ); - $this->openElement = false; - } - } } $dumper = new TextPassDumper( $argv ); -if( true ) { - $dumper->dump(); +if ( !isset( $options['help'] ) ) { + $dumper->dump( WikiExporter::FULL ); } else { $dumper->progress( <<] Options: --stub=: To load a compressed stub dump instead of stdin --prefetch=: Use a prior dump file as a text source, to save - pressure on the database. - (Requires PHP 5.0+ and the XMLReader PECL extension) - --quiet Don't dump status reports to stderr. + pressure on the database. + --quiet Don't dump status reports to stderr. --report=n Report position and speed after every n pages processed. - (Default: 100) + (Default: 100) --server=h Force reading from MySQL server h - --current Base ETA on number of pages in database instead of all revisions - --spawn Spawn a subprocess for loading text records + --output=: Write to a file instead of stdout + s: file, gzip, bzip2, 7zip + --current Base ETA on number of pages in database instead of all revisions + --spawn Spawn a subprocess for loading text records + --help Display this help message ENDS ); } diff --git a/maintenance/dumpUploads.php b/maintenance/dumpUploads.php index c8f1667b..74c0cb0b 100644 --- a/maintenance/dumpUploads.php +++ b/maintenance/dumpUploads.php @@ -20,7 +20,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class UploadDumper extends Maintenance { public function __construct() { @@ -34,22 +34,22 @@ By default, outputs relative paths against the parent directory of \$wgUploadDir } public function execute() { - global $IP, $wgUseSharedUploads; + global $IP; $this->mAction = 'fetchLocal'; $this->mBasePath = $this->getOption( 'base', $IP ); $this->mShared = false; $this->mSharedSupplement = false; - if( $this->hasOption('local') ) { + if ( $this->hasOption( 'local' ) ) { $this->mAction = 'fetchLocal'; } - - if( $this->hasOption('used') ) { + + if ( $this->hasOption( 'used' ) ) { $this->mAction = 'fetchUsed'; } - - if( $this->hasOption('shared') ) { - if( $this->hasOption('used') ) { + + if ( $this->hasOption( 'shared' ) ) { + if ( $this->hasOption( 'used' ) ) { // Include shared-repo files in the used check $this->mShared = true; } else { @@ -57,51 +57,53 @@ By default, outputs relative paths against the parent directory of \$wgUploadDir $this->mSharedSupplement = true; } } - $this->{$this->mAction}( $this->mShared ); - if( $this->mSharedSupplement ) { + $this-> { $this->mAction } ( $this->mShared ); + if ( $this->mSharedSupplement ) { $this->fetchUsed( true ); } } /** - * Fetch a list of all or used images from a particular image source. - * @param string $table - * @param string $directory Base directory where files are located - * @param bool $shared true to pass shared-dir settings to hash func + * Fetch a list of used images from a particular image source. + * + * @param $shared Boolean: true to pass shared-dir settings to hash func */ function fetchUsed( $shared ) { $dbr = wfGetDB( DB_SLAVE ); $image = $dbr->tableName( 'image' ); $imagelinks = $dbr->tableName( 'imagelinks' ); - + $sql = "SELECT DISTINCT il_to, img_name FROM $imagelinks LEFT OUTER JOIN $image ON il_to=img_name"; $result = $dbr->query( $sql ); - - foreach( $result as $row ) { + + foreach ( $result as $row ) { $this->outputItem( $row->il_to, $shared ); } - $dbr->freeResult( $result ); } + /** + * Fetch a list of all images from a particular image source. + * + * @param $shared Boolean: true to pass shared-dir settings to hash func + */ function fetchLocal( $shared ) { $dbr = wfGetDB( DB_SLAVE ); $result = $dbr->select( 'image', array( 'img_name' ), '', __METHOD__ ); - - foreach( $result as $row ) { + + foreach ( $result as $row ) { $this->outputItem( $row->img_name, $shared ); } - $dbr->freeResult( $result ); } - + function outputItem( $name, $shared ) { $file = wfFindFile( $name ); - if( $file && $this->filterItem( $file, $shared ) ) { + if ( $file && $this->filterItem( $file, $shared ) ) { $filename = $file->getFullPath(); $rel = wfRelativePath( $filename, $this->mBasePath ); $this->output( "$rel\n" ); @@ -116,4 +118,4 @@ By default, outputs relative paths against the parent directory of \$wgUploadDir } $maintClass = "UploadDumper"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/edit.php b/maintenance/edit.php index 8d0068c3..40623afb 100644 --- a/maintenance/edit.php +++ b/maintenance/edit.php @@ -20,7 +20,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class EditCLI extends Maintenance { public function __construct() { @@ -36,7 +36,7 @@ class EditCLI extends Maintenance { } public function execute() { - global $wgUser, $wgTitle, $wgArticle; + global $wgUser, $wgTitle; $userName = $this->getOption( 'u', 'Maintenance script' ); $summary = $this->getOption( 's', '' ); @@ -44,7 +44,7 @@ class EditCLI extends Maintenance { $bot = $this->hasOption( 'b' ); $autoSummary = $this->hasOption( 'a' ); $noRC = $this->hasOption( 'no-rc' ); - + $wgUser = User::newFromName( $userName ); if ( !$wgUser ) { $this->error( "Invalid username", true ); @@ -52,22 +52,22 @@ class EditCLI extends Maintenance { if ( $wgUser->isAnon() ) { $wgUser->addToDatabase(); } - + $wgTitle = Title::newFromText( $this->getArg() ); if ( !$wgTitle ) { $this->error( "Invalid title", true ); } - - $wgArticle = new Article( $wgTitle ); - + + $article = new Article( $wgTitle ); + # Read the text $text = $this->getStdin( Maintenance::STDIN_ALL ); - + # Do the edit $this->output( "Saving... " ); - $status = $wgArticle->doEdit( $text, $summary, + $status = $article->doEdit( $text, $summary, ( $minor ? EDIT_MINOR : 0 ) | - ( $bot ? EDIT_FORCE_BOT : 0 ) | + ( $bot ? EDIT_FORCE_BOT : 0 ) | ( $autoSummary ? EDIT_AUTOSUMMARY : 0 ) | ( $noRC ? EDIT_SUPPRESS_RC : 0 ) ); if ( $status->isOK() ) { @@ -85,5 +85,5 @@ class EditCLI extends Maintenance { } $maintClass = "EditCLI"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/eval.php b/maintenance/eval.php index a990a4d8..3cc1d16a 100644 --- a/maintenance/eval.php +++ b/maintenance/eval.php @@ -16,7 +16,7 @@ * @ingroup Maintenance */ -$wgUseNormalUser = (bool)getenv('MW_WIKIUSER'); +$wgUseNormalUser = (bool)getenv( 'MW_WIKIUSER' ); $optionsWithArgs = array( 'd' ); @@ -39,8 +39,8 @@ if ( isset( $options['d'] ) ) { } } -if ( function_exists( 'readline_add_history' ) - && function_exists( 'posix_isatty' ) && posix_isatty( 0 /*STDIN*/ ) ) +if ( function_exists( 'readline_add_history' ) + && posix_isatty( 0 /*STDIN*/ ) ) { $useReadline = true; } else { @@ -48,19 +48,20 @@ if ( function_exists( 'readline_add_history' ) } if ( $useReadline ) { - $historyFile = "{$_ENV['HOME']}/.mweval_history"; + $historyFile = isset( $_ENV['HOME'] ) ? + "{$_ENV['HOME']}/.mweval_history" : "$IP/maintenance/.mweval_history"; readline_read_history( $historyFile ); } -while ( ( $line = readconsole( '> ' ) ) !== false ) { +while ( ( $line = Maintenance::readconsole() ) !== false ) { if ( $useReadline ) { readline_add_history( $line ); readline_write_history( $historyFile ); } $val = eval( $line . ";" ); - if( is_null( $val ) ) { + if ( is_null( $val ) ) { echo "\n"; - } elseif( is_string( $val ) || is_numeric( $val ) ) { + } elseif ( is_string( $val ) || is_numeric( $val ) ) { echo "$val\n"; } else { var_dump( $val ); diff --git a/maintenance/fetchText.php b/maintenance/fetchText.php index 746ef8ad..ea56535d 100644 --- a/maintenance/fetchText.php +++ b/maintenance/fetchText.php @@ -20,7 +20,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class FetchText extends Maintenance { public function __construct() { @@ -28,35 +28,52 @@ class FetchText extends Maintenance { $this->mDescription = "Fetch the revision text from an old_id"; } - public function execute() { + /* + * returns a string containing the following in order: + * textid + * \n + * length of text (-1 on error = failure to retrieve/unserialize/gunzip/etc) + * \n + * text (may be empty) + * + * note that that the text string itself is *not* followed by newline + */ + public function execute() { $db = wfGetDB( DB_SLAVE ); $stdin = $this->getStdin(); - while( !feof( $stdin ) ) { + while ( !feof( $stdin ) ) { $line = fgets( $stdin ); - if( $line === false ) { + if ( $line === false ) { // We appear to have lost contact... break; } $textId = intval( $line ); $text = $this->doGetText( $db, $textId ); - $this->output( strlen( $text ) . "\n". $text ); + if ($text === false) { + # actual error, not zero-length text + $textLen = "-1"; + } + else { + $textLen = strlen($text); + } + $this->output( $textId . "\n" . $textLen . "\n" . $text ); } } - + /** - * May throw a database error if, say, the server dies during query. + * May throw a database error if, say, the server dies during query. * @param $db Database object * @param $id int The old_id * @return String - */ + */ private function doGetText( $db, $id ) { $id = intval( $id ); $row = $db->selectRow( 'text', array( 'old_text', 'old_flags' ), array( 'old_id' => $id ), - 'TextPassDumper::getText' ); + __METHOD__ ); $text = Revision::getRevisionText( $row ); - if( $text === false ) { + if ( $text === false ) { return false; } return $text; @@ -64,4 +81,4 @@ class FetchText extends Maintenance { } $maintClass = "FetchText"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/findhooks.php b/maintenance/findhooks.php index 13236b6b..04a5faef 100644 --- a/maintenance/findhooks.php +++ b/maintenance/findhooks.php @@ -2,7 +2,7 @@ /** * Simple script that try to find documented hook and hooks actually * in the code and show what's missing. - * + * * This script assumes that: * - hooks names in hooks.txt are at the beginning of a line and single quoted. * - hooks names in code are the first parameter of wfRunHooks. @@ -12,6 +12,8 @@ * * Any instance of wfRunHooks that doesn't meet these parameters will be noted. * + * Copyright © Ashar Voultoiz + * * 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 @@ -27,14 +29,12 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @ingroup Maintenance - * - * @author Ashar Voultoiz - * @copyright Copyright © Ashar voultoiz - * @license http://www.gnu.org/copyleft/gpl.html GNU General Public Licence 2.0 or later + * @author Ashar Voultoiz */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class FindHooks extends Maintenance { public function __construct() { @@ -54,37 +54,42 @@ class FindHooks extends Maintenance { $potential = array(); $bad = array(); $pathinc = array( - $IP.'/', - $IP.'/includes/', - $IP.'/includes/api/', - $IP.'/includes/db/', - $IP.'/includes/diff/', - $IP.'/includes/filerepo/', - $IP.'/includes/parser/', - $IP.'/includes/search/', - $IP.'/includes/specials/', - $IP.'/includes/upload/', - $IP.'/languages/', - $IP.'/maintenance/', - $IP.'/skins/', + $IP . '/', + $IP . '/includes/', + $IP . '/includes/api/', + $IP . '/includes/db/', + $IP . '/includes/diff/', + $IP . '/includes/filerepo/', + $IP . '/includes/installer/', + $IP . '/includes/parser/', + $IP . '/includes/resourceloader/', + $IP . '/includes/revisiondelete/', + $IP . '/includes/search/', + $IP . '/includes/specials/', + $IP . '/includes/upload/', + $IP . '/languages/', + $IP . '/maintenance/', + $IP . '/maintenance/tests/', + $IP . '/maintenance/tests/parser/', + $IP . '/skins/', ); - foreach( $pathinc as $dir ) { + foreach ( $pathinc as $dir ) { $potential = array_merge( $potential, $this->getHooksFromPath( $dir ) ); $bad = array_merge( $bad, $this->getBadHooksFromPath( $dir ) ); } - + $potential = array_unique( $potential ); $bad = array_unique( $bad ); $todo = array_diff( $potential, $documented ); $deprecated = array_diff( $documented, $potential ); - + // let's show the results: - $this->printArray('Undocumented', $todo ); - $this->printArray('Documented and not found', $deprecated ); - $this->printArray('Unclear hook calls', $bad ); - - if ( count( $todo ) == 0 && count( $deprecated ) == 0 && count( $bad ) == 0 ) + $this->printArray( 'Undocumented', $todo ); + $this->printArray( 'Documented and not found', $deprecated ); + $this->printArray( 'Unclear hook calls', $bad ); + + if ( count( $todo ) == 0 && count( $deprecated ) == 0 && count( $bad ) == 0 ) $this->output( "Looks good!\n" ); } @@ -93,14 +98,14 @@ class FindHooks extends Maintenance { * @return array of documented hooks */ private function getHooksFromDoc( $doc ) { - if( $this->hasOption( 'online' ) ){ + if ( $this->hasOption( 'online' ) ) { // All hooks $allhookdata = Http::get( 'http://www.mediawiki.org/w/api.php?action=query&list=categorymembers&cmtitle=Category:MediaWiki_hooks&cmlimit=500&format=php' ); $allhookdata = unserialize( $allhookdata ); $allhooks = array(); - foreach( $allhookdata['query']['categorymembers'] as $page ) { + foreach ( $allhookdata['query']['categorymembers'] as $page ) { $found = preg_match( '/Manual\:Hooks\/([a-zA-Z0-9- :]+)/', $page['title'], $matches ); - if( $found ) { + if ( $found ) { $hook = str_replace( ' ', '_', $matches[1] ); $allhooks[] = $hook; } @@ -109,9 +114,9 @@ class FindHooks extends Maintenance { $oldhookdata = Http::get( 'http://www.mediawiki.org/w/api.php?action=query&list=categorymembers&cmtitle=Category:Removed_hooks&cmlimit=500&format=php' ); $oldhookdata = unserialize( $oldhookdata ); $removed = array(); - foreach( $oldhookdata['query']['categorymembers'] as $page ) { + foreach ( $oldhookdata['query']['categorymembers'] as $page ) { $found = preg_match( '/Manual\:Hooks\/([a-zA-Z0-9- :]+)/', $page['title'], $matches ); - if( $found ) { + if ( $found ) { $hook = str_replace( ' ', '_', $matches[1] ); $removed[] = $hook; } @@ -133,7 +138,7 @@ class FindHooks extends Maintenance { private function getHooksFromFile( $file ) { $content = file_get_contents( $file ); $m = array(); - preg_match_all( '/wfRunHooks\(\s*([\'"])(.*?)\1/', $content, $m); + preg_match_all( '/wfRunHooks\(\s*([\'"])(.*?)\1/', $content, $m ); return $m[2]; } @@ -144,13 +149,14 @@ class FindHooks extends Maintenance { */ private function getHooksFromPath( $path ) { $hooks = array(); - if( $dh = opendir($path) ) { - while(($file = readdir($dh)) !== false) { - if( filetype($path.$file) == 'file' ) { - $hooks = array_merge( $hooks, $this->getHooksFromFile($path.$file) ); + $dh = opendir( $path ); + if ( $dh ) { + while ( ( $file = readdir( $dh ) ) !== false ) { + if ( filetype( $path . $file ) == 'file' ) { + $hooks = array_merge( $hooks, $this->getHooksFromFile( $path . $file ) ); } } - closedir($dh); + closedir( $dh ); } return $hooks; } @@ -164,9 +170,9 @@ class FindHooks extends Maintenance { $content = file_get_contents( $file ); $m = array(); # We want to skip the "function wfRunHooks()" one. :) - preg_match_all( '/(?getBadHooksFromFile($path.$file) ); + if ( filetype( $path . $file ) == 'file' && !$path . $file == __FILE__ ) { + $hooks = array_merge( $hooks, $this->getBadHooksFromFile( $path . $file ) ); } } - closedir($dh); + closedir( $dh ); } return $hooks; } @@ -198,10 +205,10 @@ class FindHooks extends Maintenance { * @param $sort Boolean : wheter to sort the array (Default: true) */ private function printArray( $msg, $arr, $sort = true ) { - if($sort) asort($arr); - foreach($arr as $v) $this->output( "$msg: $v\n" ); + if ( $sort ) asort( $arr ); + foreach ( $arr as $v ) $this->output( "$msg: $v\n" ); } } $maintClass = "FindHooks"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/fixSlaveDesync.php b/maintenance/fixSlaveDesync.php index c585beb1..fe892944 100644 --- a/maintenance/fixSlaveDesync.php +++ b/maintenance/fixSlaveDesync.php @@ -18,32 +18,29 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class FixSlaveDesync extends Maintenance { public function __construct() { - global $wgUseRootUser; - $wgUseRootUser = true; - parent::__construct(); $this->mDescription = ""; - } - + + public function getDbType() { + return Maintenance::DB_ADMIN; + } + public function execute() { - global $slaveIndexes, $wgDBservers; - $slaveIndexes = array(); - for ( $i = 1; $i < count( $wgDBservers ); $i++ ) { + $this->slaveIndexes = array(); + for ( $i = 1; $i < wfGetLB()->getServerCount(); $i++ ) { if ( wfGetLB()->isNonZeroLoad( $i ) ) { - $slaveIndexes[] = $i; + $this->slaveIndexes[] = $i; } } if ( $this->hasArg() ) { $this->desyncFixPage( $this->getArg() ); } else { - $dbw = wfGetDB( DB_MASTER ); - $maxPage = $dbw->selectField( 'page', 'MAX(page_id)', false, __METHOD__ ); $corrupt = $this->findPageLatestCorruption(); foreach ( $corrupt as $id => $dummy ) { $this->desyncFixPage( $id ); @@ -69,10 +66,8 @@ class FixSlaveDesync extends Maintenance { } } $this->output( "\n" ); - $dbw->freeResult( $res ); - global $slaveIndexes; - foreach ( $slaveIndexes as $i ) { + foreach ( $this->slaveIndexes as $i ) { $db = wfGetDB( $i ); $res = $db->select( 'page', array( 'page_id', 'page_latest' ), array( 'page_id<6054123' ), __METHOD__ ); foreach ( $res as $row ) { @@ -81,7 +76,6 @@ class FixSlaveDesync extends Maintenance { $this->output( $row->page_id . "\t" ); } } - $db->freeResult( $res ); } $this->output( "\n" ); return $desync; @@ -92,16 +86,14 @@ class FixSlaveDesync extends Maintenance { * @param $pageID int The page_id to fix */ private function desyncFixPage( $pageID ) { - global $slaveIndexes; - # Check for a corrupted page_latest $dbw = wfGetDB( DB_MASTER ); $dbw->begin(); - $realLatest = $dbw->selectField( 'page', 'page_latest', array( 'page_id' => $pageID ), + $realLatest = $dbw->selectField( 'page', 'page_latest', array( 'page_id' => $pageID ), __METHOD__, 'FOR UPDATE' ); - #list( $masterFile, $masterPos ) = $dbw->getMasterPos(); + # list( $masterFile, $masterPos ) = $dbw->getMasterPos(); $found = false; - foreach ( $slaveIndexes as $i ) { + foreach ( $this->slaveIndexes as $i ) { $db = wfGetDB( $i ); /* if ( !$db->masterPosWait( $masterFile, $masterPos, 10 ) ) { @@ -109,7 +101,7 @@ class FixSlaveDesync extends Maintenance { $dbw->commit(); sleep(10); return; - }*/ + }*/ $latest = $db->selectField( 'page', 'page_latest', array( 'page_id' => $pageID ), __METHOD__ ); $max = $db->selectField( 'revision', 'MAX(rev_id)', false, __METHOD__ ); if ( $latest != $realLatest && $realLatest < $max ) { @@ -125,20 +117,18 @@ class FixSlaveDesync extends Maintenance { } # Find the missing revisions - $res = $dbw->select( 'revision', array( 'rev_id' ), array( 'rev_page' => $pageID ), + $res = $dbw->select( 'revision', array( 'rev_id' ), array( 'rev_page' => $pageID ), __METHOD__, 'FOR UPDATE' ); $masterIDs = array(); foreach ( $res as $row ) { $masterIDs[] = $row->rev_id; } - $dbw->freeResult( $res ); $res = $db->select( 'revision', array( 'rev_id' ), array( 'rev_page' => $pageID ), __METHOD__ ); $slaveIDs = array(); foreach ( $res as $row ) { $slaveIDs[] = $row->rev_id; } - $db->freeResult( $res ); if ( count( $masterIDs ) < count( $slaveIDs ) ) { $missingIDs = array_diff( $slaveIDs, $masterIDs ); if ( count( $missingIDs ) ) { @@ -167,7 +157,7 @@ class FixSlaveDesync extends Maintenance { # Revision $row = $dbFrom->selectRow( 'revision', '*', array( 'rev_id' => $rid ), __METHOD__ ); if ( $toMaster ) { - $id = $dbw->selectField( 'revision', 'rev_id', array( 'rev_id' => $rid ), + $id = $dbw->selectField( 'revision', 'rev_id', array( 'rev_id' => $rid ), __METHOD__, 'FOR UPDATE' ); if ( $id ) { $this->output( "Revision already exists\n" ); @@ -177,7 +167,7 @@ class FixSlaveDesync extends Maintenance { $dbw->insert( 'revision', get_object_vars( $row ), __METHOD__, 'IGNORE' ); } } else { - foreach ( $slaveIndexes as $i ) { + foreach ( $this->slaveIndexes as $i ) { $db = wfGetDB( $i ); $db->insert( 'revision', get_object_vars( $row ), __METHOD__, 'IGNORE' ); } @@ -188,7 +178,7 @@ class FixSlaveDesync extends Maintenance { if ( $toMaster ) { $dbw->insert( 'text', get_object_vars( $row ), __METHOD__, 'IGNORE' ); } else { - foreach ( $slaveIndexes as $i ) { + foreach ( $this->slaveIndexes as $i ) { $db = wfGetDB( $i ); $db->insert( 'text', get_object_vars( $row ), __METHOD__, 'IGNORE' ); } @@ -200,9 +190,9 @@ class FixSlaveDesync extends Maintenance { if ( $found ) { $this->output( "Fixing page_latest... " ); if ( $toMaster ) { - #$dbw->update( 'page', array( 'page_latest' => $realLatest ), array( 'page_id' => $pageID ), __METHOD__ ); + # $dbw->update( 'page', array( 'page_latest' => $realLatest ), array( 'page_id' => $pageID ), __METHOD__ ); } else { - foreach ( $slaveIndexes as $i ) { + foreach ( $this->slaveIndexes as $i ) { $db = wfGetDB( $i ); $db->update( 'page', array( 'page_latest' => $realLatest ), array( 'page_id' => $pageID ), __METHOD__ ); } @@ -214,4 +204,4 @@ class FixSlaveDesync extends Maintenance { } $maintClass = "FixSlaveDesync"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/fixTimestamps.php b/maintenance/fixTimestamps.php index ea102fb8..3e3bd0a5 100644 --- a/maintenance/fixTimestamps.php +++ b/maintenance/fixTimestamps.php @@ -1,9 +1,9 @@ getArg(0) * 3600; - $start = $this->getArg(1); - $end = $this->getArg(2); + $offset = $this->getArg( 0 ) * 3600; + $start = $this->getArg( 1 ); + $end = $this->getArg( 2 ); $grace = 60; // maximum normal clock offset - + # Find bounding revision IDs $dbw = wfGetDB( DB_MASTER ); $revisionTable = $dbw->tableName( 'revision' ); $res = $dbw->query( "SELECT MIN(rev_id) as minrev, MAX(rev_id) as maxrev FROM $revisionTable " . "WHERE rev_timestamp BETWEEN '{$start}' AND '{$end}'", __METHOD__ ); $row = $dbw->fetchObject( $res ); - + if ( is_null( $row->minrev ) ) { $this->error( "No revisions in search period.", true ); } - + $minRev = $row->minrev; $maxRev = $row->maxrev; - + # Select all timestamps and IDs $sql = "SELECT rev_id, rev_timestamp FROM $revisionTable " . "WHERE rev_id BETWEEN $minRev AND $maxRev"; @@ -64,13 +64,13 @@ class FixTimestamps extends Maintenance { } else { $expectedSign = 1; } - + $res = $dbw->query( $sql, __METHOD__ ); - + $lastNormal = 0; $badRevs = array(); $numGoodRevs = 0; - + foreach ( $res as $row ) { $timestamp = wfTimestamp( TS_UNIX, $row->rev_timestamp ); $delta = $timestamp - $lastNormal; @@ -89,26 +89,25 @@ class FixTimestamps extends Maintenance { $badRevs[] = $row->rev_id; } } - $dbw->freeResult( $res ); - + $numBadRevs = count( $badRevs ); if ( $numBadRevs > $numGoodRevs ) { - $this->error( + $this->error( "The majority of revisions in the search interval are marked as bad. - Are you sure the offset ($offset) has the right sign? Positive means the clock + Are you sure the offset ($offset) has the right sign? Positive means the clock was incorrectly set forward, negative means the clock was incorrectly set back. - If the offset is right, then increase the search interval until there are enough + If the offset is right, then increase the search interval until there are enough good revisions to provide a majority reference.", true ); } elseif ( $numBadRevs == 0 ) { $this->output( "No bad revisions found.\n" ); - exit(0); + exit( 0 ); } - - $this->output( sprintf( "Fixing %d revisions (%.2f%% of revisions in search interval)\n", - $numBadRevs, $numBadRevs / ($numGoodRevs + $numBadRevs) * 100 ) ); - + + $this->output( sprintf( "Fixing %d revisions (%.2f%% of revisions in search interval)\n", + $numBadRevs, $numBadRevs / ( $numGoodRevs + $numBadRevs ) * 100 ) ); + $fixup = -$offset; $sql = "UPDATE $revisionTable " . "SET rev_timestamp=DATE_FORMAT(DATE_ADD(rev_timestamp, INTERVAL $fixup SECOND), '%Y%m%d%H%i%s') " . @@ -119,4 +118,4 @@ class FixTimestamps extends Maintenance { } $maintClass = "FixTimestamps"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/fixUserRegistration.php b/maintenance/fixUserRegistration.php index d3305358..d4ff7c23 100644 --- a/maintenance/fixUserRegistration.php +++ b/maintenance/fixUserRegistration.php @@ -21,7 +21,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class FixUserRegistration extends Maintenance { public function __construct() { @@ -52,4 +52,4 @@ class FixUserRegistration extends Maintenance { } $maintClass = "FixUserRegistration"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/fuzz-tester.php b/maintenance/fuzz-tester.php index 6d8c57f2..a78522cd 100644 --- a/maintenance/fuzz-tester.php +++ b/maintenance/fuzz-tester.php @@ -13,9 +13,9 @@ Description: How: - Generate lots of nasty wiki text. - - Ask the Parser to render that wiki text to HTML, or ask MediaWiki's forms - to deal with that wiki text. - - Check MediaWiki's output for problems. + - Ask the Parser to render that wiki text to HTML, or ask MediaWiki's forms + to deal with that wiki text. + - Check MediaWiki's output for problems. - Repeat. Why: @@ -32,7 +32,7 @@ What type of problems are being checked for: - Optionally checking for malformed HTML using the W3C validator. Background: - Many of the wikiFuzz class methods are a modified PHP port, + Many of the wikiFuzz class methods are a modified PHP port, of a "shameless" Python port, of LCAMTUF'S MANGELME: - http://www.securiteam.com/tools/6Z00N1PBFK.html - http://www.securityfocus.com/archive/1/378632/2004-10-15/2004-10-21/0 @@ -43,15 +43,15 @@ Video: Requirements: To run this, you will need: - - Command-line PHP5, with PHP-curl enabled (not all installations have this - enabled - try "apt-get install php5-curl" if you're on Debian to install). + - Command-line PHP5, with PHP-curl enabled (not all installations have this + enabled - try "apt-get install php5-curl" if you're on Debian to install). - the Tidy standalone executable. ("apt-get install tidy"). Optional: - If you want to run the curl scripts, you'll need standalone curl installed - ("apt-get install curl") + ("apt-get install curl") - For viewing the W3C validator output on a command line, the "html2text" - program may be useful ("apt-get install html2text") + program may be useful ("apt-get install html2text") Saving tests and test results: Any of the fuzz tests which find problems are saved for later review. @@ -65,7 +65,7 @@ Saving tests and test results: Wiki configuration for testing: You should make some additions to LocalSettings.php in order to catch the most errors. Note this configuration is for **TESTING PURPOSES ONLY**, and is IN NO - WAY, SHAPE, OR FORM suitable for deployment on a hostile network. That said, + WAY, SHAPE, OR FORM suitable for deployment on a hostile network. That said, personally I find these additions to be the most helpful for testing purposes: // --------- Start --------- @@ -99,7 +99,7 @@ Wiki configuration for testing: $wgGroupPermissions['*']['makesysop'] = true; // Enable weird and wonderful options: - // Increase default error reporting level. + // Increase default error reporting level. error_reporting (E_ALL); // At a later date could be increased to E_ALL | E_STRICT $wgBlockOpenProxies = true; // Some block pages require this to be true in order to test. $wgEnableUploads = true; // enable uploads. @@ -127,14 +127,14 @@ Wiki configuration for testing: require_once("extensions/Renameuser/SpecialRenameuser.php"); require_once("extensions/LinkSearch/LinkSearch.php"); // --------- End --------- - + If you want to try E_STRICT error logging, add this to the above: // --------- Start --------- error_reporting (E_ALL | E_STRICT); set_error_handler( 'error_handler' ); function error_handler ($type, $message, $file=__FILE__, $line=__LINE__) { - if ($message == "var: Deprecated. Please use the public/private/protected modifiers") return; - print "
    \nStrict Standards: Type: $type: $message in $file on line $line
    \n"; + if ($message == "var: Deprecated. Please use the public/private/protected modifiers") return; + print "
    \nStrict Standards: Type: $type: $message in $file on line $line
    \n"; } // --------- End --------- @@ -152,62 +152,62 @@ Usage: Console output: - If requested, first any previously failed tests will be rerun. - Then new tests will be generated and run. Any tests that fail will be saved, - and a brief message about why they failed will be printed on the console. + and a brief message about why they failed will be printed on the console. - The console will show the number of tests run, time run, number of tests - failed, number of tests being done per minute, and the name of the current test. + failed, number of tests being done per minute, and the name of the current test. TODO: Some known things that could improve this script: - - Logging in with cookie jar storage needed for some tests (as there are some - pages that cannot be tested without being logged in, and which are currently - untested - e.g. Special:Emailuser, Special:Preferences, adding to Watchist). + - Logging in with cookie jar storage needed for some tests (as there are some + pages that cannot be tested without being logged in, and which are currently + untested - e.g. Special:Emailuser, Special:Preferences, adding to Watchist). - Testing of Timeline extension (I cannot test as ploticus has/had issues on - my architecture). + my architecture). */ -/////////////////////////// COMMAND LINE HELP //////////////////////////////////// +// ///////////////////////// COMMAND LINE HELP //////////////////////////////////// // This is a command line script, load MediaWiki env (gives command line options); -require_once( dirname(__FILE__) . '/commandLine.inc' ); +require_once( dirname( __FILE__ ) . '/commandLine.inc' ); // if the user asked for an explanation of command line options. if ( isset( $options["help"] ) ) { - print <<] - [--directory=] [--include-binary] - [--w3c-validate] [--delete-passed-retests] [--help] - [--user=] [--password=] - [--rerun-failed-tests] [--max-errors=] - [--max-runtime=] - [--specific-test=] + [--directory=] [--include-binary] + [--w3c-validate] [--delete-passed-retests] [--help] + [--user=] [--password=] + [--rerun-failed-tests] [--max-errors=] + [--max-runtime=] + [--specific-test=] Options: --quiet : Hides passed tests, shows only failed tests. - --base-url : URL to a wiki on which to run the tests. - The "http://" is optional and can be omitted. + --base-url : URL to a wiki on which to run the tests. + The "http://" is optional and can be omitted. --directory : Full path to directory for storing failed tests. - Will be created if it does not exist. + Will be created if it does not exist. --include-binary : Includes non-alphanumeric characters in the tests. - --w3c-validate : Validates pages using the W3C's web validator. - Slow. Currently many pages fail validation. + --w3c-validate : Validates pages using the W3C's web validator. + Slow. Currently many pages fail validation. --user : Login name of a valid user on your test wiki. - --password : Password for the valid user on your test wiki. + --password : Password for the valid user on your test wiki. --delete-passed-retests : Will delete retests that now pass. - Requires --rerun-failed-tests to be meaningful. + Requires --rerun-failed-tests to be meaningful. --rerun-failed-tests : Whether to rerun any previously failed tests. --max-errors : Maximum number of errors to report before exiting. - Does not include errors from --rerun-failed-tests + Does not include errors from --rerun-failed-tests --max-runtime : Maximum runtime, in minutes, to run before exiting. - Only applies to new tests, not --rerun-failed-tests - --specific-test : Runs only the specified fuzz test. - Only applies to new tests, not --rerun-failed-tests + Only applies to new tests, not --rerun-failed-tests + --specific-test : Runs only the specified fuzz test. + Only applies to new tests, not --rerun-failed-tests --keep-passed-tests : Saves all test files, even those that pass. --help : Show this help message. Example: - If you wanted to fuzz test a nightly MediaWiki checkout using cron for 1 hour, + If you wanted to fuzz test a nightly MediaWiki checkout using cron for 1 hour, and only wanted to be informed of errors, and did not want to redo previously failed tests, and wanted a maximum of 100 errors, then you could do: php {$_SERVER["SCRIPT_NAME"]} --quiet --max-errors=100 --max-runtime=60 @@ -215,659 +215,660 @@ Example: ENDS; - exit( 0 ); + exit( 0 ); } // if we got command line options, check they look valid. -$validOptions = array ("quiet", "base-url", "directory", "include-binary", - "w3c-validate", "user", "password", "delete-passed-retests", - "rerun-failed-tests", "max-errors", - "max-runtime", "specific-test", "keep-passed-tests", "help" ); -if (!empty($options)) { - $unknownArgs = array_diff (array_keys($options), $validOptions); - foreach ($unknownArgs as $invalidArg) { - print "Ignoring invalid command-line option: --$invalidArg\n"; - } +$validOptions = array ( "quiet", "base-url", "directory", "include-binary", + "w3c-validate", "user", "password", "delete-passed-retests", + "rerun-failed-tests", "max-errors", + "max-runtime", "specific-test", "keep-passed-tests", "help" ); +if ( !empty( $options ) ) { + $unknownArgs = array_diff ( array_keys( $options ), $validOptions ); + foreach ( $unknownArgs as $invalidArg ) { + print "Ignoring invalid command-line option: --$invalidArg\n"; + } } -///////////////////////////// CONFIGURATION //////////////////////////////////// +// /////////////////////////// CONFIGURATION //////////////////////////////////// // URL to some wiki on which we can run our tests. -if (!empty($options["base-url"])) { - define("WIKI_BASE_URL", $options["base-url"]); +if ( !empty( $options["base-url"] ) ) { + define( "WIKI_BASE_URL", $options["base-url"] ); } else { - define("WIKI_BASE_URL", $wgServer . $wgScriptPath . '/'); + define( "WIKI_BASE_URL", $wgServer . $wgScriptPath . '/' ); } // The directory name where we store the output. // Example for Windows: "c:\\temp\\wiki-fuzz" -if (!empty($options["directory"])) { - define("DIRECTORY", $options["directory"] ); +if ( !empty( $options["directory"] ) ) { + define( "DIRECTORY", $options["directory"] ); } else { - define("DIRECTORY", "{$wgUploadDirectory}/fuzz-tests"); + define( "DIRECTORY", "{$wgUploadDirectory}/fuzz-tests" ); } // Should our test fuzz data include binary strings? -define("INCLUDE_BINARY", isset($options["include-binary"]) ); +define( "INCLUDE_BINARY", isset( $options["include-binary"] ) ); // Whether we want to validate HTML output on the web. // At the moment very few generated pages will validate, so not recommended. -define("VALIDATE_ON_WEB", isset($options["w3c-validate"]) ); +define( "VALIDATE_ON_WEB", isset( $options["w3c-validate"] ) ); // URL to use to validate our output: -define("VALIDATOR_URL", "http://validator.w3.org/check"); +define( "VALIDATOR_URL", "http://validator.w3.org/check" ); // Location of Tidy standalone executable. -define("PATH_TO_TIDY", "/usr/bin/tidy"); +define( "PATH_TO_TIDY", "/usr/bin/tidy" ); -// The name of a user who has edited on your wiki. Used +// The name of a user who has edited on your wiki. Used // when testing the Special:Contributions and Special:Userlogin page. -if (!empty($options["user"])) { - define("USER_ON_WIKI", $options["user"] ); +if ( !empty( $options["user"] ) ) { + define( "USER_ON_WIKI", $options["user"] ); } else { - define("USER_ON_WIKI", "nickj"); + define( "USER_ON_WIKI", "nickj" ); } // The password of the above user. Used when testing the login page, -// and to do this we sometimes need to login successfully. -if (!empty($options["password"])) { - define("USER_PASSWORD", $options["password"] ); +// and to do this we sometimes need to login successfully. +if ( !empty( $options["password"] ) ) { + define( "USER_PASSWORD", $options["password"] ); } else { - // And no, this is not a valid password on any public wiki. - define("USER_PASSWORD", "nickj"); + // And no, this is not a valid password on any public wiki. + define( "USER_PASSWORD", "nickj" ); } // If we have a test that failed, and then we run it again, and it passes, // do you want to delete it or keep it? -define("DELETE_PASSED_RETESTS", isset($options["delete-passed-retests"]) ); +define( "DELETE_PASSED_RETESTS", isset( $options["delete-passed-retests"] ) ); // Do we want to rerun old saved tests at script startup? // Set to true to help catch regressions, or false if you only want new stuff. -define("RERUN_OLD_TESTS", isset($options["rerun-failed-tests"]) ); +define( "RERUN_OLD_TESTS", isset( $options["rerun-failed-tests"] ) ); // File where the database errors are logged. Should be defined in LocalSettings.php. -define("DB_ERROR_LOG_FILE", $wgDBerrorLog ); +define( "DB_ERROR_LOG_FILE", $wgDBerrorLog ); // Run in chatty mode (all output, default), or run in quiet mode (only prints out details of failed tests)? -define("QUIET", isset($options["quiet"]) ); +define( "QUIET", isset( $options["quiet"] ) ); // Keep all test files, even those that pass. Potentially useful to tracking input that causes something // unusual to happen, if you don't know what "unusual" is until later. -define("KEEP_PASSED_TESTS", isset($options["keep-passed-tests"]) ); +define( "KEEP_PASSED_TESTS", isset( $options["keep-passed-tests"] ) ); // The maximum runtime, if specified. -if (!empty($options["max-runtime"]) && intval($options["max-runtime"])>0) { - define("MAX_RUNTIME", intval($options["max-runtime"]) ); +if ( !empty( $options["max-runtime"] ) && intval( $options["max-runtime"] ) > 0 ) { + define( "MAX_RUNTIME", intval( $options["max-runtime"] ) ); } // The maximum number of problems to find, if specified. Excludes retest errors. -if (!empty($options["max-errors"]) && intval($options["max-errors"])>0) { - define("MAX_ERRORS", intval($options["max-errors"]) ); +if ( !empty( $options["max-errors"] ) && intval( $options["max-errors"] ) > 0 ) { + define( "MAX_ERRORS", intval( $options["max-errors"] ) ); } // if the user has requested a specific test (instead of all tests), and the test they asked for looks valid. -if (!empty($options["specific-test"])) { - if (class_exists($options["specific-test"]) && get_parent_class($options["specific-test"])=="pageTest") { - define("SPECIFIC_TEST", $options["specific-test"] ); - } - else { - print "Ignoring invalid --specific-test\n"; - } +if ( !empty( $options["specific-test"] ) ) { + if ( class_exists( $options["specific-test"] ) && get_parent_class( $options["specific-test"] ) == "pageTest" ) { + define( "SPECIFIC_TEST", $options["specific-test"] ); + } + else { + print "Ignoring invalid --specific-test\n"; + } } // Define the file extensions we'll use: -define("PHP_TEST" , ".test.php"); -define("CURL_TEST", ".curl.sh" ); -define("DATA_FILE", ".data.bin"); -define("INFO_FILE", ".info.txt"); -define("HTML_FILE", ".wiki_preview.html"); +define( "PHP_TEST" , ".test.php" ); +define( "CURL_TEST", ".curl.sh" ); +define( "DATA_FILE", ".data.bin" ); +define( "INFO_FILE", ".info.txt" ); +define( "HTML_FILE", ".wiki_preview.html" ); // If it goes wrong, we want to know about it. -error_reporting(E_ALL | E_STRICT); +error_reporting( E_ALL | E_STRICT ); -//////////////// A CLASS THAT GENERATES RANDOM NASTY WIKI & HTML STRINGS ////////////////////// +// ////////////// A CLASS THAT GENERATES RANDOM NASTY WIKI & HTML STRINGS ////////////////////// class wikiFuzz { - // Only some HTML tags are understood with params by MediaWiki, the rest are ignored. - // List the tags that accept params below, as well as what those params are. - public static $data = array( - "B" => array("CLASS", "ID", "STYLE", "lang", "dir", "title"), - "CAPTION" => array("CLASS", "ID", "STYLE", "align", "lang", "dir", "title"), - "CENTER" => array("CLASS", "STYLE", "ID", "lang", "dir", "title"), - "DIV" => array("CLASS", "STYLE", "ID", "align", "lang", "dir", "title"), - "FONT" => array("CLASS", "STYLE", "ID", "lang", "dir", "title", "face", "size", "color"), - "H1" => array("STYLE", "CLASS", "ID", "align", "lang", "dir", "title"), - "H2" => array("STYLE", "CLASS", "ID", "align", "lang", "dir", "title"), - "HR" => array("STYLE", "CLASS", "ID", "WIDTH", "lang", "dir", "title", "size", "noshade"), - "LI" => array("CLASS", "ID", "STYLE", "lang", "dir", "title", "type", "value"), - "TABLE" => array("STYLE", "CLASS", "ID", "BGCOLOR", "WIDTH", "ALIGN", "BORDER", "CELLPADDING", - "CELLSPACING", "lang", "dir", "title", "summary", "frame", "rules"), - "TD" => array("STYLE", "CLASS", "ID", "BGCOLOR", "WIDTH", "ALIGN", "COLSPAN", "ROWSPAN", - "VALIGN", "abbr", "axis", "headers", "scope", "nowrap", "height", "lang", - "dir", "title", "char", "charoff"), - "TH" => array("STYLE", "CLASS", "ID", "BGCOLOR", "WIDTH", "ALIGN", "COLSPAN", "ROWSPAN", - "VALIGN", "abbr", "axis", "headers", "scope", "nowrap", "height", "lang", - "dir", "title", "char", "charoff"), - "TR" => array("CLASS", "STYLE", "ID", "BGCOLOR", "ALIGN", "VALIGN", "lang", "dir", "title", "char", "charoff"), - "UL" => array("CLASS", "STYLE", "ID", "lang", "dir", "title", "type"), - "P" => array("style", "class", "id", "align", "lang", "dir", "title"), - "blockquote" => array("CLASS", "ID", "STYLE", "lang", "dir", "title", "cite"), - "span" => array("CLASS", "ID", "STYLE", "align", "lang", "dir", "title"), - "code" => array("CLASS", "ID", "STYLE", "lang", "dir", "title"), - "tt" => array("CLASS", "ID", "STYLE", "lang", "dir", "title"), - "small" => array("CLASS", "ID", "STYLE", "lang", "dir", "title"), - "big" => array("CLASS", "ID", "STYLE", "lang", "dir", "title"), - "s" => array("CLASS", "ID", "STYLE", "lang", "dir", "title"), - "u" => array("CLASS", "ID", "STYLE", "lang", "dir", "title"), - "del" => array("CLASS", "ID", "STYLE", "lang", "dir", "title", "datetime", "cite"), - "ins" => array("CLASS", "ID", "STYLE", "lang", "dir", "title", "datetime", "cite"), - "sub" => array("CLASS", "ID", "STYLE", "lang", "dir", "title"), - "sup" => array("CLASS", "ID", "STYLE", "lang", "dir", "title"), - "ol" => array("CLASS", "ID", "STYLE", "lang", "dir", "title", "type", "start"), - "br" => array("CLASS", "ID", "STYLE", "title", "clear"), - "cite" => array("CLASS", "ID", "STYLE", "lang", "dir", "title"), - "var" => array("CLASS", "ID", "STYLE", "lang", "dir", "title"), - "dl" => array("CLASS", "ID", "STYLE", "lang", "dir", "title"), - "ruby" => array("CLASS", "ID", "STYLE", "lang", "dir", "title"), - "rt" => array("CLASS", "ID", "STYLE", "lang", "dir", "title"), - "rp" => array("CLASS", "ID", "STYLE", "lang", "dir", "title"), - "dt" => array("CLASS", "ID", "STYLE", "lang", "dir", "title"), - "dl" => array("CLASS", "ID", "STYLE", "lang", "dir", "title"), - "em" => array("CLASS", "ID", "STYLE", "lang", "dir", "title"), - "strong" => array("CLASS", "ID", "STYLE", "lang", "dir", "title"), - "i" => array("CLASS", "ID", "STYLE", "lang", "dir", "title"), - "thead" => array("CLASS", "ID", "STYLE", "lang", "dir", "title", 'align', 'char', 'charoff', 'valign'), - "tfoot" => array("CLASS", "ID", "STYLE", "lang", "dir", "title", 'align', 'char', 'charoff', 'valign'), - "tbody" => array("CLASS", "ID", "STYLE", "lang", "dir", "title", 'align', 'char', 'charoff', 'valign'), - "colgroup" => array("CLASS", "ID", "STYLE", "lang", "dir", "title", 'align', 'char', 'charoff', 'valign', 'span', 'width'), - "col" => array("CLASS", "ID", "STYLE", "lang", "dir", "title", 'align', 'char', 'charoff', 'valign', 'span', 'width'), - "pre" => array("CLASS", "ID", "STYLE", "lang", "dir", "title", "width"), - - // extension tags that accept parameters: - "sort" => array("order", "class"), - "ref" => array("name"), - "categorytree" => array("hideroot", "mode", "style"), - "chemform" => array("link", "wikilink", "query"), - "section" => array("begin", "new"), - - // older MW transclusion. - "transclude" => array("page"), - ); - - // The types of the HTML that we will be testing were defined above - // Note: this needs to be initialized later to be equal to: array_keys(wikiFuzz::$data); - // as such, it also needs to also be publicly modifiable. - public static $types; - - - // Some attribute values. - static private $other = array("&","=",":","?","\"","\n","%n%n%n%n%n%n%n%n%n%n%n%n","\\"); - static private $ints = array( - // various numbers - "0","-1","127","-7897","89000","808080","90928345", - "0xfffffff","ffff", - - // Different ways of saying: ' - "'", // Long UTF-8 Unicode encoding - "'", // dec version. - "'", // hex version. - "§", // malformed hex variant, MSB not zero. - - // Different ways of saying: " - """, // Long UTF-8 Unicode encoding - """, - """, // hex version. - "¢", // malformed hex variant, MSB not zero. - - // Different ways of saying: < - "<", - "<", // Long UTF-8 Unicode encoding without semicolon (Mediawiki wants the colon) - "<", // Long UTF-8 Unicode encoding with semicolon - "<", - "<", // hex version. - "¼", // malformed hex variant, MSB not zero. - "<", // mid-length hex version - "<", // slightly longer hex version, with capital "X" - - // Different ways of saying: > - ">", - ">", // Long UTF-8 Unicode encoding - ">", - ">", // hex version. - "¾", // malformed variant, MSB not zero. - - // Different ways of saying: [ - "[", // Long UTF-8 Unicode encoding - "[", - "[", // hex version. - - // Different ways of saying: {{ - "{{", // Long UTF-8 Unicode encoding - "{{", - "{{", // hex version. - - // Different ways of saying: | - "|", // Long UTF-8 Unicode encoding - "|", - "|", // hex version. - "ü", // malformed hex variant, MSB not zero. - - // a "lignature" - http://www.robinlionheart.com/stds/html4/spchars#ligature - "‌" - ); - - // Defines various wiki-related bits of syntax, that can potentially cause - // MediaWiki to do something other than just print that literal text. - static private $ext = array( - // links, templates, parameters. - "[[", "]]", "{{", "}}", "|", "[", "]", "{{{", "}}}", "|]]", - - // wiki tables. - "\n{|", "\n|}", - "!", - "\n!", - "!!", - "||", - "\n|-", "| ", "\n|", - - // section headings. - "=", "==", "===", "====", "=====", "======", - - // lists (ordered and unordered) and indentation. - "\n*", "*", "\n:", ":", - "\n#", "#", - - // definition lists (dl, dt, dd), newline, and newline with pre, and a tab. - "\n;", ";", "\n ", - - // Whitespace: newline, tab, space. - "\n", "\t", " ", - - // Some XSS attack vectors from http://ha.ckers.org/xss.html - " ", // tab - " ", // newline - " ", // carriage return - "\0", // null character - "  ", // spaces and meta characters - "'';!--\"=&{()}", // compact injection of XSS & SQL tester - - // various NULL fields - "%00", - "�", - "\0", - - // horizontal rule. - "-----", "\n-----", - - // signature, redirect, bold, italics. - "~~~~", "#REDIRECT [[", "'''", "''", - - // comments. - "", - - // quotes. - "\"", "'", - - // tag start and tag end. - "<", ">", - - // implicit link creation on URIs. - "http://", - "https://", - "ftp://", - "irc://", - "news:", - 'gopher://', - 'telnet://', - 'nntp://', - 'worldwind://', - 'mailto:', - - // images. - "[[image:", - ".gif", - ".png", - ".jpg", - ".jpeg", - 'thumbnail=', - 'thumbnail', - 'thumb=', - 'thumb', - 'right', - 'none', - 'left', - 'framed', - 'frame', - 'enframed', - 'centre', - 'center', - "Image:", - "[[:Image", - 'px', - 'upright=', - 'border', - - // misc stuff to throw at the Parser. - '%08X', - '/', - ":x{|", - "\n|+", - "", - "", - " \302\273", - " :", - " !", - " ;", - "\302\253", - "[[category:", - "?=", - "(", - ")", - "]]]", - "../", - "{{{{", - "}}}}", - "[[Special:", - "", - "", - "', - - // implicit link creation on booknum, RFC, and PubMed ID usage (both with and without IDs) - "ISBN 2", - "RFC 000", - "PMID 000", - "ISBN ", - "RFC ", - "PMID ", - - // magic words: - '__NOTOC__', - '__FORCETOC__', - '__NOEDITSECTION__', - '__START__', - '__NOTITLECONVERT__', - '__NOCONTENTCONVERT__', - '__END__', - '__TOC__', - '__NOTC__', - '__NOCC__', - "__FORCETOC__", - "__NEWSECTIONLINK__", - "__NOGALLERY__", - - // more magic words / internal templates. - '{{PAGENAME}}', - '{{PAGENAMEE}}', - '{{NAMESPACE}}', - "{{MSG:", - "}}", - "{{MSGNW:", - "}}", - "{{INT:", - "}}", - '{{SITENAME}}', - "{{NS:", - "}}", - "{{LOCALURL:", - "}}", - "{{LOCALURLE:", - "}}", - "{{SCRIPTPATH}}", - "{{GRAMMAR:gentiv|", - "}}", - "{{REVISIONID}}", - "{{SUBPAGENAME}}", - "{{SUBPAGENAMEE}}", - "{{ns:0}}", - "{{fullurle:", - "}}", - "{{subst::", - "}}", - "{{UCFIRST:", - "}}", - "{{UC:", - '{{SERVERNAME}}', - '{{SERVER}}', - "{{RAW:", - "}}", - "{{PLURAL:", - "}}", - "{{LCFIRST:", - "}}", - "{{LC:", - "}}", - '{{CURRENTWEEK}}', - '{{CURRENTDOW}}', - "{{INT:{{LC:contribs-showhideminor}}|", - "}}", - "{{INT:googlesearch|", - "}}", - "{{BASEPAGENAME}}", - "{{CONTENTLANGUAGE}}", - "{{PAGESINNAMESPACE:}}", - "{{#language:", - "}}", - "{{#special:", - "}}", - "{{#special:emailuser", - "}}", - - // Some raw link for magic words. - "{{NUMBEROFPAGES:R", - "}}", - "{{NUMBEROFUSERS:R", - "}}", - "{{NUMBEROFARTICLES:R", - "}}", - "{{NUMBEROFFILES:R", - "}}", - "{{NUMBEROFADMINS:R", - "}}", - "{{padleft:", - "}}", - "{{padright:", - "}}", - "{{DEFAULTSORT:", - "}}", - - // internal Math "extension": - "", - "", - - // Parser extension functions: - "{{#expr:", - "{{#if:", - "{{#ifeq:", - "{{#ifexist:", - "{{#ifexpr:", - "{{#switch:", - "{{#time:", - "}}", - - // references table for the Cite extension. - "", - - // Internal Parser tokens - try inserting some of these. - "UNIQ25f46b0524f13e67NOPARSE", - "UNIQ17197916557e7cd6-HTMLCommentStrip46238afc3bb0cf5f00000002", - "\x07UNIQ17197916557e7cd6-HTMLCommentStrip46238afc3bb0cf5f00000002-QINU", - - // Inputbox extension: - "\ntype=search\nsearchbuttonlabel=\n", - "", - - // charInsert extension: - "", - "", - - // wikiHiero extension: - "", - "", - - // Image gallery: - "", - "", - - // FixedImage extension. - "", - - // Timeline extension: currently untested. - - // Nowiki: - "", - "", - - // an external image to test the external image displaying code - "http://debian.org/Pics/debian.png", - - // LabeledSectionTransclusion extension. - "{{#lstx:", - "}}", - "{{#lst:", - "}}", - "{{#lst:Main Page|", - "}}" - ); - - /** - ** Randomly returns one element of the input array. - */ - static public function chooseInput(array $input) { - $randindex = wikiFuzz::randnum(count($input) - 1); - return $input[$randindex]; - } - - // Max number of parameters for HTML attributes. - static private $maxparams = 10; - - /** - ** Returns random number between finish and start. - */ - static public function randnum($finish,$start=0) { - return mt_rand($start,$finish); - } - - /** - ** Returns a mix of random text and random wiki syntax. - */ - static private function randstring() { - $thestring = ""; - - for ($i=0; $i<40; $i++) { - $what = wikiFuzz::randnum(1); - - if ($what == 0) { // include some random wiki syntax - $which = wikiFuzz::randnum(count(wikiFuzz::$ext) - 1); - $thestring .= wikiFuzz::$ext[$which]; - } - else { // include some random text - $char = INCLUDE_BINARY - // Decimal version: - // "&#" . wikiFuzz::randnum(255) . ";" - // Hex version: - ? "&#x" . str_pad(dechex(wikiFuzz::randnum(255)), wikiFuzz::randnum(2, 7), "0", STR_PAD_LEFT) . ";" - // A truly binary version: - // ? chr(wikiFuzz::randnum(0,255)) - : chr(wikiFuzz::randnum(126,32)); - - $length = wikiFuzz::randnum(8); - $thestring .= str_repeat ($char, $length); - } - } - return $thestring; - } - - /** - ** Returns either random text, or random wiki syntax, or random data from "ints", - ** or random data from "other". - */ - static private function makestring() { - $what = wikiFuzz::randnum(2); - if ($what == 0) { - return wikiFuzz::randstring(); - } - elseif ($what == 1) { - return wikiFuzz::$ints[wikiFuzz::randnum(count(wikiFuzz::$ints) - 1)]; - } - else { - return wikiFuzz::$other[wikiFuzz::randnum(count(wikiFuzz::$other) - 1)]; - } - } - - - /** - ** Strips out the stuff that Mediawiki balks at in a page's title. - ** Implementation copied/pasted from cleanupTable.inc & cleanupImages.php - */ - static public function makeTitleSafe($str) { - $legalTitleChars = " %!\"$&'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF"; - return preg_replace_callback( - "/([^$legalTitleChars])/", - create_function( - // single quotes are essential here, - // or alternative escape all $ as \$ - '$matches', - 'return sprintf( "\\x%02x", ord( $matches[1] ) );' - ), - $str ); - } - - /** - ** Returns a string of fuzz text. - */ - static private function loop() { - switch ( wikiFuzz::randnum(3) ) { - case 1: // an opening tag, with parameters. - $string = ""; - $i = wikiFuzz::randnum(count(wikiFuzz::$types) - 1); - $t = wikiFuzz::$types[$i]; - $arr = wikiFuzz::$data[$t]; - $string .= "<" . $t . " "; - $num_params = min(wikiFuzz::$maxparams, count($arr)); - for ($z=0; $z<$num_params; $z++) { - $badparam = $arr[wikiFuzz::randnum(count($arr) - 1)]; - $badstring = wikiFuzz::makestring(); - $string .= $badparam . "=" . wikiFuzz::getRandQuote() . $badstring . wikiFuzz::getRandQuote() . " "; - } - $string .= ">\n"; - return $string; - case 2: // a closing tag. - $i = wikiFuzz::randnum(count(wikiFuzz::$types) - 1); - return ""; - case 3: // a random string, between tags. - return wikiFuzz::makeString(); - } - return ""; // catch-all, should never be called. - } - - /** - ** Returns one of the three styles of random quote: ', ", and nothing. - */ - static private function getRandQuote() { - switch ( wikiFuzz::randnum(3) ) { - case 1 : return "'"; - case 2 : return "\""; - default: return ""; - } - } - - /** - ** Returns fuzz text, with the parameter indicating approximately how many lines of text you want. - */ - static public function makeFuzz($maxtypes = 2) { - $page = ""; - for ($k=0; $k<$maxtypes; $k++) { - $page .= wikiFuzz::loop(); - } - return $page; - } -} - - -//////// MEDIAWIKI PAGES TO TEST, AND HOW TO TEST THEM /////// + // Only some HTML tags are understood with params by MediaWiki, the rest are ignored. + // List the tags that accept params below, as well as what those params are. + public static $data = array( + "B" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ), + "CAPTION" => array( "CLASS", "ID", "STYLE", "align", "lang", "dir", "title" ), + "CENTER" => array( "CLASS", "STYLE", "ID", "lang", "dir", "title" ), + "DIV" => array( "CLASS", "STYLE", "ID", "align", "lang", "dir", "title" ), + "FONT" => array( "CLASS", "STYLE", "ID", "lang", "dir", "title", "face", "size", "color" ), + "H1" => array( "STYLE", "CLASS", "ID", "align", "lang", "dir", "title" ), + "H2" => array( "STYLE", "CLASS", "ID", "align", "lang", "dir", "title" ), + "HR" => array( "STYLE", "CLASS", "ID", "WIDTH", "lang", "dir", "title", "size", "noshade" ), + "LI" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "type", "value" ), + "TABLE" => array( "STYLE", "CLASS", "ID", "BGCOLOR", "WIDTH", "ALIGN", "BORDER", "CELLPADDING", + "CELLSPACING", "lang", "dir", "title", "summary", "frame", "rules" ), + "TD" => array( "STYLE", "CLASS", "ID", "BGCOLOR", "WIDTH", "ALIGN", "COLSPAN", "ROWSPAN", + "VALIGN", "abbr", "axis", "headers", "scope", "nowrap", "height", "lang", + "dir", "title", "char", "charoff" ), + "TH" => array( "STYLE", "CLASS", "ID", "BGCOLOR", "WIDTH", "ALIGN", "COLSPAN", "ROWSPAN", + "VALIGN", "abbr", "axis", "headers", "scope", "nowrap", "height", "lang", + "dir", "title", "char", "charoff" ), + "TR" => array( "CLASS", "STYLE", "ID", "BGCOLOR", "ALIGN", "VALIGN", "lang", "dir", "title", "char", "charoff" ), + "UL" => array( "CLASS", "STYLE", "ID", "lang", "dir", "title", "type" ), + "P" => array( "style", "class", "id", "align", "lang", "dir", "title" ), + "blockquote" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "cite" ), + "span" => array( "CLASS", "ID", "STYLE", "align", "lang", "dir", "title" ), + "code" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ), + "tt" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ), + "small" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ), + "big" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ), + "s" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ), + "u" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ), + "del" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "datetime", "cite" ), + "ins" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "datetime", "cite" ), + "sub" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ), + "sup" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ), + "ol" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "type", "start" ), + "br" => array( "CLASS", "ID", "STYLE", "title", "clear" ), + "cite" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ), + "var" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ), + "dl" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ), + "ruby" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ), + "rt" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ), + "rp" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ), + "dt" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ), + "dl" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ), + "em" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ), + "strong" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ), + "i" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ), + "thead" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", 'align', 'char', 'charoff', 'valign' ), + "tfoot" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", 'align', 'char', 'charoff', 'valign' ), + "tbody" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", 'align', 'char', 'charoff', 'valign' ), + "colgroup" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", 'align', 'char', 'charoff', 'valign', 'span', 'width' ), + "col" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", 'align', 'char', 'charoff', 'valign', 'span', 'width' ), + "pre" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "width" ), + + // extension tags that accept parameters: + "sort" => array( "order", "class" ), + "ref" => array( "name" ), + "categorytree" => array( "hideroot", "mode", "style" ), + "chemform" => array( "link", "wikilink", "query" ), + "section" => array( "begin", "new" ), + + // older MW transclusion. + "transclude" => array( "page" ), + ); + + // The types of the HTML that we will be testing were defined above + // Note: this needs to be initialized later to be equal to: array_keys(wikiFuzz::$data); + // as such, it also needs to also be publicly modifiable. + public static $types; + + + // Some attribute values. + static private $other = array( "&", "=", ":", "?", "\"", "\n", "%n%n%n%n%n%n%n%n%n%n%n%n", "\\" ); + static private $ints = array( + // various numbers + "0", "-1", "127", "-7897", "89000", "808080", "90928345", + "0xfffffff", "ffff", + + // Different ways of saying: ' + "'", // Long UTF-8 Unicode encoding + "'", // dec version. + "'", // hex version. + "§", // malformed hex variant, MSB not zero. + + // Different ways of saying: " + """, // Long UTF-8 Unicode encoding + """, + """, // hex version. + "¢", // malformed hex variant, MSB not zero. + + // Different ways of saying: < + "<", + "<", // Long UTF-8 Unicode encoding without semicolon (Mediawiki wants the colon) + "<", // Long UTF-8 Unicode encoding with semicolon + "<", + "<", // hex version. + "¼", // malformed hex variant, MSB not zero. + "<", // mid-length hex version + "<", // slightly longer hex version, with capital "X" + + // Different ways of saying: > + ">", + ">", // Long UTF-8 Unicode encoding + ">", + ">", // hex version. + "¾", // malformed variant, MSB not zero. + + // Different ways of saying: [ + "[", // Long UTF-8 Unicode encoding + "[", + "[", // hex version. + + // Different ways of saying: {{ + "{{", // Long UTF-8 Unicode encoding + "{{", + "{{", // hex version. + + // Different ways of saying: | + "|", // Long UTF-8 Unicode encoding + "|", + "|", // hex version. + "ü", // malformed hex variant, MSB not zero. + + // a "lignature" - http://www.robinlionheart.com/stds/html4/spchars#ligature + // ‌ == ‌ + "‌" + ); + + // Defines various wiki-related bits of syntax, that can potentially cause + // MediaWiki to do something other than just print that literal text. + static private $ext = array( + // links, templates, parameters. + "[[", "]]", "{{", "}}", "|", "[", "]", "{{{", "}}}", "|]]", + + // wiki tables. + "\n{|", "\n|}", + "!", + "\n!", + "!!", + "||", + "\n|-", "| ", "\n|", + + // section headings. + "=", "==", "===", "====", "=====", "======", + + // lists (ordered and unordered) and indentation. + "\n*", "*", "\n:", ":", + "\n#", "#", + + // definition lists (dl, dt, dd), newline, and newline with pre, and a tab. + "\n;", ";", "\n ", + + // Whitespace: newline, tab, space. + "\n", "\t", " ", + + // Some XSS attack vectors from http://ha.ckers.org/xss.html + " ", // tab + " ", // newline + " ", // carriage return + "\0", // null character + "  ", // spaces and meta characters + "'';!--\"=&{()}", // compact injection of XSS & SQL tester + + // various NULL fields + "%00", + "�", + "\0", + + // horizontal rule. + "-----", "\n-----", + + // signature, redirect, bold, italics. + "~~~~", "#REDIRECT [[", "'''", "''", + + // comments. + "", + + // quotes. + "\"", "'", + + // tag start and tag end. + "<", ">", + + // implicit link creation on URIs. + "http://", + "https://", + "ftp://", + "irc://", + "news:", + 'gopher://', + 'telnet://', + 'nntp://', + 'worldwind://', + 'mailto:', + + // images. + "[[image:", + ".gif", + ".png", + ".jpg", + ".jpeg", + 'thumbnail=', + 'thumbnail', + 'thumb=', + 'thumb', + 'right', + 'none', + 'left', + 'framed', + 'frame', + 'enframed', + 'centre', + 'center', + "Image:", + "[[:Image", + 'px', + 'upright=', + 'border', + + // misc stuff to throw at the Parser. + '%08X', + '/', + ":x{|", + "\n|+", + "", + "", + " \302\273", + " :", + " !", + " ;", + "\302\253", + "[[category:", + "?=", + "(", + ")", + "]]]", + "../", + "{{{{", + "}}}}", + "[[Special:", + "", + "", + "', + + // implicit link creation on booknum, RFC, and PubMed ID usage (both with and without IDs) + "ISBN 2", + "RFC 000", + "PMID 000", + "ISBN ", + "RFC ", + "PMID ", + + // magic words: + '__NOTOC__', + '__FORCETOC__', + '__NOEDITSECTION__', + '__START__', + '__NOTITLECONVERT__', + '__NOCONTENTCONVERT__', + '__END__', + '__TOC__', + '__NOTC__', + '__NOCC__', + "__FORCETOC__", + "__NEWSECTIONLINK__", + "__NOGALLERY__", + + // more magic words / internal templates. + '{{PAGENAME}}', + '{{PAGENAMEE}}', + '{{NAMESPACE}}', + "{{MSG:", + "}}", + "{{MSGNW:", + "}}", + "{{INT:", + "}}", + '{{SITENAME}}', + "{{NS:", + "}}", + "{{LOCALURL:", + "}}", + "{{LOCALURLE:", + "}}", + "{{SCRIPTPATH}}", + "{{GRAMMAR:gentiv|", + "}}", + "{{REVISIONID}}", + "{{SUBPAGENAME}}", + "{{SUBPAGENAMEE}}", + "{{ns:0}}", + "{{fullurle:", + "}}", + "{{subst::", + "}}", + "{{UCFIRST:", + "}}", + "{{UC:", + '{{SERVERNAME}}', + '{{SERVER}}', + "{{RAW:", + "}}", + "{{PLURAL:", + "}}", + "{{LCFIRST:", + "}}", + "{{LC:", + "}}", + '{{CURRENTWEEK}}', + '{{CURRENTDOW}}', + "{{INT:{{LC:contribs-showhideminor}}|", + "}}", + "{{INT:googlesearch|", + "}}", + "{{BASEPAGENAME}}", + "{{CONTENTLANGUAGE}}", + "{{PAGESINNAMESPACE:}}", + "{{#language:", + "}}", + "{{#special:", + "}}", + "{{#special:emailuser", + "}}", + + // Some raw link for magic words. + "{{NUMBEROFPAGES:R", + "}}", + "{{NUMBEROFUSERS:R", + "}}", + "{{NUMBEROFARTICLES:R", + "}}", + "{{NUMBEROFFILES:R", + "}}", + "{{NUMBEROFADMINS:R", + "}}", + "{{padleft:", + "}}", + "{{padright:", + "}}", + "{{DEFAULTSORT:", + "}}", + + // internal Math "extension": + "", + "", + + // Parser extension functions: + "{{#expr:", + "{{#if:", + "{{#ifeq:", + "{{#ifexist:", + "{{#ifexpr:", + "{{#switch:", + "{{#time:", + "}}", + + // references table for the Cite extension. + "", + + // Internal Parser tokens - try inserting some of these. + "UNIQ25f46b0524f13e67NOPARSE", + "UNIQ17197916557e7cd6-HTMLCommentStrip46238afc3bb0cf5f00000002", + "\x07UNIQ17197916557e7cd6-HTMLCommentStrip46238afc3bb0cf5f00000002-QINU", + + // Inputbox extension: + "\ntype=search\nsearchbuttonlabel=\n", + "", + + // charInsert extension: + "", + "", + + // wikiHiero extension: + "", + "", + + // Image gallery: + "", + "", + + // FixedImage extension. + "", + + // Timeline extension: currently untested. + + // Nowiki: + "", + "", + + // an external image to test the external image displaying code + "http://debian.org/Pics/debian.png", + + // LabeledSectionTransclusion extension. + "{{#lstx:", + "}}", + "{{#lst:", + "}}", + "{{#lst:Main Page|", + "}}" + ); + + /** + ** Randomly returns one element of the input array. + */ + static public function chooseInput( array $input ) { + $randindex = wikiFuzz::randnum( count( $input ) - 1 ); + return $input[$randindex]; + } + + // Max number of parameters for HTML attributes. + static private $maxparams = 10; + + /** + ** Returns random number between finish and start. + */ + static public function randnum( $finish, $start = 0 ) { + return mt_rand( $start, $finish ); + } + + /** + ** Returns a mix of random text and random wiki syntax. + */ + static private function randstring() { + $thestring = ""; + + for ( $i = 0; $i < 40; $i++ ) { + $what = wikiFuzz::randnum( 1 ); + + if ( $what == 0 ) { // include some random wiki syntax + $which = wikiFuzz::randnum( count( wikiFuzz::$ext ) - 1 ); + $thestring .= wikiFuzz::$ext[$which]; + } + else { // include some random text + $char = INCLUDE_BINARY + // Decimal version: + // "&#" . wikiFuzz::randnum(255) . ";" + // Hex version: + ? "&#x" . str_pad( dechex( wikiFuzz::randnum( 255 ) ), wikiFuzz::randnum( 2, 7 ), "0", STR_PAD_LEFT ) . ";" + // A truly binary version: + // ? chr(wikiFuzz::randnum(0,255)) + : chr( wikiFuzz::randnum( 126, 32 ) ); + + $length = wikiFuzz::randnum( 8 ); + $thestring .= str_repeat ( $char, $length ); + } + } + return $thestring; + } + + /** + ** Returns either random text, or random wiki syntax, or random data from "ints", + ** or random data from "other". + */ + static private function makestring() { + $what = wikiFuzz::randnum( 2 ); + if ( $what == 0 ) { + return wikiFuzz::randstring(); + } + elseif ( $what == 1 ) { + return wikiFuzz::$ints[wikiFuzz::randnum( count( wikiFuzz::$ints ) - 1 )]; + } + else { + return wikiFuzz::$other[wikiFuzz::randnum( count( wikiFuzz::$other ) - 1 )]; + } + } + + + /** + ** Strips out the stuff that Mediawiki balks at in a page's title. + ** Implementation copied/pasted from cleanupTable.inc & cleanupImages.php + */ + static public function makeTitleSafe( $str ) { + $legalTitleChars = " %!\"$&'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF"; + return preg_replace_callback( + "/([^$legalTitleChars])/", + create_function( + // single quotes are essential here, + // or alternative escape all $ as \$ + '$matches', + 'return sprintf( "\\x%02x", ord( $matches[1] ) );' + ), + $str ); + } + + /** + ** Returns a string of fuzz text. + */ + static private function loop() { + switch ( wikiFuzz::randnum( 3 ) ) { + case 1: // an opening tag, with parameters. + $string = ""; + $i = wikiFuzz::randnum( count( wikiFuzz::$types ) - 1 ); + $t = wikiFuzz::$types[$i]; + $arr = wikiFuzz::$data[$t]; + $string .= "<" . $t . " "; + $num_params = min( wikiFuzz::$maxparams, count( $arr ) ); + for ( $z = 0; $z < $num_params; $z++ ) { + $badparam = $arr[wikiFuzz::randnum( count( $arr ) - 1 )]; + $badstring = wikiFuzz::makestring(); + $string .= $badparam . "=" . wikiFuzz::getRandQuote() . $badstring . wikiFuzz::getRandQuote() . " "; + } + $string .= ">\n"; + return $string; + case 2: // a closing tag. + $i = wikiFuzz::randnum( count( wikiFuzz::$types ) - 1 ); + return ""; + case 3: // a random string, between tags. + return wikiFuzz::makeString(); + } + return ""; // catch-all, should never be called. + } + + /** + ** Returns one of the three styles of random quote: ', ", and nothing. + */ + static private function getRandQuote() { + switch ( wikiFuzz::randnum( 3 ) ) { + case 1 : return "'"; + case 2 : return "\""; + default: return ""; + } + } + + /** + ** Returns fuzz text, with the parameter indicating approximately how many lines of text you want. + */ + static public function makeFuzz( $maxtypes = 2 ) { + $page = ""; + for ( $k = 0; $k < $maxtypes; $k++ ) { + $page .= wikiFuzz::loop(); + } + return $page; + } +} + + +// ////// MEDIAWIKI PAGES TO TEST, AND HOW TO TEST THEM /////// /** ** A page test has just these things: @@ -875,30 +876,30 @@ class wikiFuzz { ** 2) the URL we are going to test those parameters on. ** 3) Any cookies required for the test. ** 4) Whether Tidy should validate the page. Defaults to true, but can be turned off. - ** Declared abstract because it should be extended by a class + ** Declared abstract because it should be extended by a class ** that supplies these parameters. */ abstract class pageTest { - protected $params; - protected $pagePath; - protected $cookie = ""; - protected $tidyValidate = true; + protected $params; + protected $pagePath; + protected $cookie = ""; + protected $tidyValidate = true; + + public function getParams() { + return $this->params; + } - public function getParams() { - return $this->params; - } + public function getPagePath() { + return $this->pagePath; + } - public function getPagePath() { - return $this->pagePath; - } + public function getCookie() { + return $this->cookie; + } - public function getCookie() { - return $this->cookie; - } - - public function tidyValidate() { - return $this->tidyValidate; - } + public function tidyValidate() { + return $this->tidyValidate; + } } @@ -906,31 +907,31 @@ abstract class pageTest { ** a page test for the "Edit" page. Tests Parser.php and Sanitizer.php. */ class editPageTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=WIKIFUZZ"; - - $this->params = array ( - "action" => "submit", - "wpMinoredit" => wikiFuzz::makeFuzz(2), - "wpPreview" => wikiFuzz::makeFuzz(2), - "wpSection" => wikiFuzz::makeFuzz(2), - "wpEdittime" => wikiFuzz::makeFuzz(2), - "wpSummary" => wikiFuzz::makeFuzz(2), - "wpScrolltop" => wikiFuzz::makeFuzz(2), - "wpStarttime" => wikiFuzz::makeFuzz(2), - "wpAutoSummary" => wikiFuzz::makeFuzz(2), - "wpTextbox1" => wikiFuzz::makeFuzz(40) // the main wiki text, need lots of this. - ); - - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(6) == 0) unset($this->params["wpSection"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["wpEdittime"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["wpSummary"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["wpScrolltop"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["wpStarttime"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["wpAutoSummary"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["wpTextbox1"]); - } + function __construct() { + $this->pagePath = "index.php?title=WIKIFUZZ"; + + $this->params = array ( + "action" => "submit", + "wpMinoredit" => wikiFuzz::makeFuzz( 2 ), + "wpPreview" => wikiFuzz::makeFuzz( 2 ), + "wpSection" => wikiFuzz::makeFuzz( 2 ), + "wpEdittime" => wikiFuzz::makeFuzz( 2 ), + "wpSummary" => wikiFuzz::makeFuzz( 2 ), + "wpScrolltop" => wikiFuzz::makeFuzz( 2 ), + "wpStarttime" => wikiFuzz::makeFuzz( 2 ), + "wpAutoSummary" => wikiFuzz::makeFuzz( 2 ), + "wpTextbox1" => wikiFuzz::makeFuzz( 40 ) // the main wiki text, need lots of this. + ); + + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpSection"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpEdittime"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpSummary"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpScrolltop"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpStarttime"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpAutoSummary"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpTextbox1"] ); + } } @@ -938,18 +939,18 @@ class editPageTest extends pageTest { ** a page test for "Special:Listusers". */ class listusersTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Listusers"; + function __construct() { + $this->pagePath = "index.php?title=Special:Listusers"; - $this->params = array ( - "title" => wikiFuzz::makeFuzz(2), - "group" => wikiFuzz::makeFuzz(2), - "username" => wikiFuzz::makeFuzz(2), - "Go" => wikiFuzz::makeFuzz(2), - "limit" => wikiFuzz::chooseInput( array("0", "-1", "---'----------0", "+1", "8134", wikiFuzz::makeFuzz(2)) ), - "offset" => wikiFuzz::chooseInput( array("0", "-1", "--------'-----0", "+1", "81343242346234234", wikiFuzz::makeFuzz(2)) ) - ); - } + $this->params = array ( + "title" => wikiFuzz::makeFuzz( 2 ), + "group" => wikiFuzz::makeFuzz( 2 ), + "username" => wikiFuzz::makeFuzz( 2 ), + "Go" => wikiFuzz::makeFuzz( 2 ), + "limit" => wikiFuzz::chooseInput( array( "0", "-1", "---'----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ), + "offset" => wikiFuzz::chooseInput( array( "0", "-1", "--------'-----0", "+1", "81343242346234234", wikiFuzz::makeFuzz( 2 ) ) ) + ); + } } @@ -957,34 +958,34 @@ class listusersTest extends pageTest { ** a page test for "Special:Search". */ class searchTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Search"; - - $this->params = array ( - "action" => "index.php?title=Special:Search", - "ns0" => wikiFuzz::makeFuzz(2), - "ns1" => wikiFuzz::makeFuzz(2), - "ns2" => wikiFuzz::makeFuzz(2), - "ns3" => wikiFuzz::makeFuzz(2), - "ns4" => wikiFuzz::makeFuzz(2), - "ns5" => wikiFuzz::makeFuzz(2), - "ns6" => wikiFuzz::makeFuzz(2), - "ns7" => wikiFuzz::makeFuzz(2), - "ns8" => wikiFuzz::makeFuzz(2), - "ns9" => wikiFuzz::makeFuzz(2), - "ns10" => wikiFuzz::makeFuzz(2), - "ns11" => wikiFuzz::makeFuzz(2), - "ns12" => wikiFuzz::makeFuzz(2), - "ns13" => wikiFuzz::makeFuzz(2), - "ns14" => wikiFuzz::makeFuzz(2), - "ns15" => wikiFuzz::makeFuzz(2), - "redirs" => wikiFuzz::makeFuzz(2), - "search" => wikiFuzz::makeFuzz(2), - "offset" => wikiFuzz::chooseInput( array("", "0", "-1", "--------'-----0", "+1", "81343242346234234", wikiFuzz::makeFuzz(2)) ), - "fulltext" => wikiFuzz::chooseInput( array("", "0", "1", "--------'-----0", "+1", wikiFuzz::makeFuzz(2)) ), - "searchx" => wikiFuzz::chooseInput( array("", "0", "1", "--------'-----0", "+1", wikiFuzz::makeFuzz(2)) ) - ); - } + function __construct() { + $this->pagePath = "index.php?title=Special:Search"; + + $this->params = array ( + "action" => "index.php?title=Special:Search", + "ns0" => wikiFuzz::makeFuzz( 2 ), + "ns1" => wikiFuzz::makeFuzz( 2 ), + "ns2" => wikiFuzz::makeFuzz( 2 ), + "ns3" => wikiFuzz::makeFuzz( 2 ), + "ns4" => wikiFuzz::makeFuzz( 2 ), + "ns5" => wikiFuzz::makeFuzz( 2 ), + "ns6" => wikiFuzz::makeFuzz( 2 ), + "ns7" => wikiFuzz::makeFuzz( 2 ), + "ns8" => wikiFuzz::makeFuzz( 2 ), + "ns9" => wikiFuzz::makeFuzz( 2 ), + "ns10" => wikiFuzz::makeFuzz( 2 ), + "ns11" => wikiFuzz::makeFuzz( 2 ), + "ns12" => wikiFuzz::makeFuzz( 2 ), + "ns13" => wikiFuzz::makeFuzz( 2 ), + "ns14" => wikiFuzz::makeFuzz( 2 ), + "ns15" => wikiFuzz::makeFuzz( 2 ), + "redirs" => wikiFuzz::makeFuzz( 2 ), + "search" => wikiFuzz::makeFuzz( 2 ), + "offset" => wikiFuzz::chooseInput( array( "", "0", "-1", "--------'-----0", "+1", "81343242346234234", wikiFuzz::makeFuzz( 2 ) ) ), + "fulltext" => wikiFuzz::chooseInput( array( "", "0", "1", "--------'-----0", "+1", wikiFuzz::makeFuzz( 2 ) ) ), + "searchx" => wikiFuzz::chooseInput( array( "", "0", "1", "--------'-----0", "+1", wikiFuzz::makeFuzz( 2 ) ) ) + ); + } } @@ -992,28 +993,28 @@ class searchTest extends pageTest { ** a page test for "Special:Recentchanges". */ class recentchangesTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Recentchanges"; - - $this->params = array ( - "action" => wikiFuzz::makeFuzz(2), - "title" => wikiFuzz::makeFuzz(2), - "namespace" => wikiFuzz::chooseInput( range(-1, 15) ), - "Go" => wikiFuzz::makeFuzz(2), - "invert" => wikiFuzz::chooseInput( array("-1", "---'----------0", "+1", "8134", wikiFuzz::makeFuzz(2)) ), - "hideanons" => wikiFuzz::chooseInput( array("-1", "------'-------0", "+1", "8134", wikiFuzz::makeFuzz(2)) ), - 'limit' => wikiFuzz::chooseInput( array("0", "-1", "---------'----0", "+1", "81340909772349234", wikiFuzz::makeFuzz(2)) ), - "days" => wikiFuzz::chooseInput( array("-1", "----------'---0", "+1", "8134", wikiFuzz::makeFuzz(2)) ), - "hideminor" => wikiFuzz::chooseInput( array("-1", "-----------'--0", "+1", "8134", wikiFuzz::makeFuzz(2)) ), - "hidebots" => wikiFuzz::chooseInput( array("-1", "---------'----0", "+1", "8134", wikiFuzz::makeFuzz(2)) ), - "hideliu" => wikiFuzz::chooseInput( array("-1", "-------'------0", "+1", "8134", wikiFuzz::makeFuzz(2)) ), - "hidepatrolled" => wikiFuzz::chooseInput( array("-1", "-----'--------0", "+1", "8134", wikiFuzz::makeFuzz(2)) ), - "hidemyself" => wikiFuzz::chooseInput( array("-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz(2)) ), - 'categories_any'=> wikiFuzz::chooseInput( array("-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz(2)) ), - 'categories' => wikiFuzz::chooseInput( array("-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz(2)) ), - 'feed' => wikiFuzz::chooseInput( array("-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz(2)) ) - ); - } + function __construct() { + $this->pagePath = "index.php?title=Special:Recentchanges"; + + $this->params = array ( + "action" => wikiFuzz::makeFuzz( 2 ), + "title" => wikiFuzz::makeFuzz( 2 ), + "namespace" => wikiFuzz::chooseInput( range( -1, 15 ) ), + "Go" => wikiFuzz::makeFuzz( 2 ), + "invert" => wikiFuzz::chooseInput( array( "-1", "---'----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ), + "hideanons" => wikiFuzz::chooseInput( array( "-1", "------'-------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ), + 'limit' => wikiFuzz::chooseInput( array( "0", "-1", "---------'----0", "+1", "81340909772349234", wikiFuzz::makeFuzz( 2 ) ) ), + "days" => wikiFuzz::chooseInput( array( "-1", "----------'---0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ), + "hideminor" => wikiFuzz::chooseInput( array( "-1", "-----------'--0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ), + "hidebots" => wikiFuzz::chooseInput( array( "-1", "---------'----0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ), + "hideliu" => wikiFuzz::chooseInput( array( "-1", "-------'------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ), + "hidepatrolled" => wikiFuzz::chooseInput( array( "-1", "-----'--------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ), + "hidemyself" => wikiFuzz::chooseInput( array( "-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ), + 'categories_any' => wikiFuzz::chooseInput( array( "-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ), + 'categories' => wikiFuzz::chooseInput( array( "-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ), + 'feed' => wikiFuzz::chooseInput( array( "-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ) + ); + } } @@ -1021,25 +1022,25 @@ class recentchangesTest extends pageTest { ** a page test for "Special:Prefixindex". */ class prefixindexTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Prefixindex"; + function __construct() { + $this->pagePath = "index.php?title=Special:Prefixindex"; - $this->params = array ( - "title" => "Special:Prefixindex", - "namespace" => wikiFuzz::randnum(-10,101), - "Go" => wikiFuzz::makeFuzz(2) - ); + $this->params = array ( + "title" => "Special:Prefixindex", + "namespace" => wikiFuzz::randnum( -10, 101 ), + "Go" => wikiFuzz::makeFuzz( 2 ) + ); - // sometimes we want 'prefix', sometimes we want 'from', and sometimes we want nothing. - if (wikiFuzz::randnum(3) == 0) { - $this->params["prefix"] = wikiFuzz::chooseInput( array("-1", "-----'--------0", "+++--+1", - wikiFuzz::randnum(-10,8134), wikiFuzz::makeFuzz(2)) ); - } - if (wikiFuzz::randnum(3) == 0) { - $this->params["from"] = wikiFuzz::chooseInput( array("-1", "-----'--------0", "+++--+1", - wikiFuzz::randnum(-10,8134), wikiFuzz::makeFuzz(2)) ); - } - } + // sometimes we want 'prefix', sometimes we want 'from', and sometimes we want nothing. + if ( wikiFuzz::randnum( 3 ) == 0 ) { + $this->params["prefix"] = wikiFuzz::chooseInput( array( "-1", "-----'--------0", "+++--+1", + wikiFuzz::randnum( -10, 8134 ), wikiFuzz::makeFuzz( 2 ) ) ); + } + if ( wikiFuzz::randnum( 3 ) == 0 ) { + $this->params["from"] = wikiFuzz::chooseInput( array( "-1", "-----'--------0", "+++--+1", + wikiFuzz::randnum( -10, 8134 ), wikiFuzz::makeFuzz( 2 ) ) ); + } + } } @@ -1047,16 +1048,16 @@ class prefixindexTest extends pageTest { ** a page test for "Special:MIMEsearch". */ class mimeSearchTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:MIMEsearch"; + function __construct() { + $this->pagePath = "index.php?title=Special:MIMEsearch"; - $this->params = array ( - "action" => "index.php?title=Special:MIMEsearch", - "mime" => wikiFuzz::makeFuzz(3), - 'limit' => wikiFuzz::chooseInput( array("0", "-1", "-------'------0", "+1", "81342321351235325", wikiFuzz::makeFuzz(2)) ), - 'offset' => wikiFuzz::chooseInput( array("0", "-1", "-----'--------0", "+1", "81341231235365252234324", wikiFuzz::makeFuzz(2)) ) - ); - } + $this->params = array ( + "action" => "index.php?title=Special:MIMEsearch", + "mime" => wikiFuzz::makeFuzz( 3 ), + 'limit' => wikiFuzz::chooseInput( array( "0", "-1", "-------'------0", "+1", "81342321351235325", wikiFuzz::makeFuzz( 2 ) ) ), + 'offset' => wikiFuzz::chooseInput( array( "0", "-1", "-----'--------0", "+1", "81341231235365252234324", wikiFuzz::makeFuzz( 2 ) ) ) + ); + } } @@ -1064,19 +1065,19 @@ class mimeSearchTest extends pageTest { ** a page test for "Special:Log". */ class specialLogTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Log"; + function __construct() { + $this->pagePath = "index.php?title=Special:Log"; - $this->params = array ( - "type" => wikiFuzz::chooseInput( array("", wikiFuzz::makeFuzz(2)) ), - "par" => wikiFuzz::makeFuzz(2), - "user" => wikiFuzz::makeFuzz(2), - "page" => wikiFuzz::makeFuzz(2), - "from" => wikiFuzz::makeFuzz(2), - "until" => wikiFuzz::makeFuzz(2), - "title" => wikiFuzz::makeFuzz(2) - ); - } + $this->params = array ( + "type" => wikiFuzz::chooseInput( array( "", wikiFuzz::makeFuzz( 2 ) ) ), + "par" => wikiFuzz::makeFuzz( 2 ), + "user" => wikiFuzz::makeFuzz( 2 ), + "page" => wikiFuzz::makeFuzz( 2 ), + "from" => wikiFuzz::makeFuzz( 2 ), + "until" => wikiFuzz::makeFuzz( 2 ), + "title" => wikiFuzz::makeFuzz( 2 ) + ); + } } @@ -1084,18 +1085,18 @@ class specialLogTest extends pageTest { ** a page test for "Special:Userlogin", with a successful login. */ class successfulUserLoginTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Userlogin&action=submitlogin&type=login&returnto=" . wikiFuzz::makeFuzz(2); + function __construct() { + $this->pagePath = "index.php?title=Special:Userlogin&action=submitlogin&type=login&returnto=" . wikiFuzz::makeFuzz( 2 ); - $this->params = array ( - "wpName" => USER_ON_WIKI, - // sometimes real password, sometimes not: - 'wpPassword' => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz(2), USER_PASSWORD ) ), - 'wpRemember' => wikiFuzz::makeFuzz(2) - ); + $this->params = array ( + "wpName" => USER_ON_WIKI, + // sometimes real password, sometimes not: + 'wpPassword' => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), USER_PASSWORD ) ), + 'wpRemember' => wikiFuzz::makeFuzz( 2 ) + ); - $this->cookie = "wikidb_session=" . wikiFuzz::chooseInput( array("1" , wikiFuzz::makeFuzz(2) ) ); - } + $this->cookie = "wikidb_session=" . wikiFuzz::chooseInput( array( "1" , wikiFuzz::makeFuzz( 2 ) ) ); + } } @@ -1103,30 +1104,30 @@ class successfulUserLoginTest extends pageTest { ** a page test for "Special:Userlogin". */ class userLoginTest extends pageTest { - function __construct() { + function __construct() { - $this->pagePath = "index.php?title=Special:Userlogin"; + $this->pagePath = "index.php?title=Special:Userlogin"; - $this->params = array ( - 'wpRetype' => wikiFuzz::makeFuzz(2), - 'wpRemember' => wikiFuzz::makeFuzz(2), - 'wpRealName' => wikiFuzz::makeFuzz(2), - 'wpPassword' => wikiFuzz::makeFuzz(2), - 'wpName' => wikiFuzz::makeFuzz(2), - 'wpMailmypassword'=> wikiFuzz::makeFuzz(2), - 'wpLoginattempt' => wikiFuzz::makeFuzz(2), - 'wpEmail' => wikiFuzz::makeFuzz(2), - 'wpDomain' => wikiFuzz::chooseInput( array("", "local", wikiFuzz::makeFuzz(2)) ), - 'wpCreateaccountMail' => wikiFuzz::chooseInput( array("", wikiFuzz::makeFuzz(2)) ), - 'wpCreateaccount' => wikiFuzz::chooseInput( array("", wikiFuzz::makeFuzz(2)) ), - 'wpCookieCheck' => wikiFuzz::chooseInput( array("", wikiFuzz::makeFuzz(2)) ), - 'type' => wikiFuzz::chooseInput( array("signup", "login", "", wikiFuzz::makeFuzz(2)) ), - 'returnto' => wikiFuzz::makeFuzz(2), - 'action' => wikiFuzz::chooseInput( array("", "submitlogin", wikiFuzz::makeFuzz(2)) ) - ); + $this->params = array ( + 'wpRetype' => wikiFuzz::makeFuzz( 2 ), + 'wpRemember' => wikiFuzz::makeFuzz( 2 ), + 'wpRealName' => wikiFuzz::makeFuzz( 2 ), + 'wpPassword' => wikiFuzz::makeFuzz( 2 ), + 'wpName' => wikiFuzz::makeFuzz( 2 ), + 'wpMailmypassword' => wikiFuzz::makeFuzz( 2 ), + 'wpLoginattempt' => wikiFuzz::makeFuzz( 2 ), + 'wpEmail' => wikiFuzz::makeFuzz( 2 ), + 'wpDomain' => wikiFuzz::chooseInput( array( "", "local", wikiFuzz::makeFuzz( 2 ) ) ), + 'wpCreateaccountMail' => wikiFuzz::chooseInput( array( "", wikiFuzz::makeFuzz( 2 ) ) ), + 'wpCreateaccount' => wikiFuzz::chooseInput( array( "", wikiFuzz::makeFuzz( 2 ) ) ), + 'wpCookieCheck' => wikiFuzz::chooseInput( array( "", wikiFuzz::makeFuzz( 2 ) ) ), + 'type' => wikiFuzz::chooseInput( array( "signup", "login", "", wikiFuzz::makeFuzz( 2 ) ) ), + 'returnto' => wikiFuzz::makeFuzz( 2 ), + 'action' => wikiFuzz::chooseInput( array( "", "submitlogin", wikiFuzz::makeFuzz( 2 ) ) ) + ); - $this->cookie = "wikidb_session=" . wikiFuzz::chooseInput( array("1" , wikiFuzz::makeFuzz(2) ) ); - } + $this->cookie = "wikidb_session=" . wikiFuzz::chooseInput( array( "1" , wikiFuzz::makeFuzz( 2 ) ) ); + } } @@ -1134,32 +1135,32 @@ class userLoginTest extends pageTest { ** a page test for "Special:Ipblocklist" (also includes unblocking) */ class ipblocklistTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Ipblocklist"; - - $this->params = array ( - 'wpUnblockAddress'=> wikiFuzz::makeFuzz(2), - 'ip' => wikiFuzz::chooseInput( array("20398702394", "", "Nickj2", wikiFuzz::makeFuzz(2), - // something like an IP address, sometimes invalid: - ( wikiFuzz::randnum(300,-20) . "." . wikiFuzz::randnum(300,-20) . "." - . wikiFuzz::randnum(300,-20) . "." .wikiFuzz::randnum(300,-20) ) ) ), - 'id' => wikiFuzz::makeFuzz(2), - 'wpUnblockReason' => wikiFuzz::makeFuzz(2), - 'action' => wikiFuzz::chooseInput( array(wikiFuzz::makeFuzz(2), "success", "submit", "unblock") ), - 'wpEditToken' => wikiFuzz::makeFuzz(2), - 'wpBlock' => wikiFuzz::chooseInput( array(wikiFuzz::makeFuzz(2), "") ), - 'limit' => wikiFuzz::chooseInput( array("0", "-1", "--------'-----0", "+1", - "09700982312351132098234", wikiFuzz::makeFuzz(2)) ), - 'offset' => wikiFuzz::chooseInput( array("0", "-1", "------'-------0", "+1", - "09700980982341535324234234", wikiFuzz::makeFuzz(2)) ) - ); - - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(4) == 0) unset($this->params["action"]); - if (wikiFuzz::randnum(3) == 0) unset($this->params["ip"]); - if (wikiFuzz::randnum(2) == 0) unset($this->params["id"]); - if (wikiFuzz::randnum(3) == 0) unset($this->params["wpUnblockAddress"]); - } + function __construct() { + $this->pagePath = "index.php?title=Special:Ipblocklist"; + + $this->params = array ( + 'wpUnblockAddress' => wikiFuzz::makeFuzz( 2 ), + 'ip' => wikiFuzz::chooseInput( array( "20398702394", "", "Nickj2", wikiFuzz::makeFuzz( 2 ), + // something like an IP address, sometimes invalid: + ( wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) . "." + . wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) ) ) ), + 'id' => wikiFuzz::makeFuzz( 2 ), + 'wpUnblockReason' => wikiFuzz::makeFuzz( 2 ), + 'action' => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), "success", "submit", "unblock" ) ), + 'wpEditToken' => wikiFuzz::makeFuzz( 2 ), + 'wpBlock' => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), "" ) ), + 'limit' => wikiFuzz::chooseInput( array( "0", "-1", "--------'-----0", "+1", + "09700982312351132098234", wikiFuzz::makeFuzz( 2 ) ) ), + 'offset' => wikiFuzz::chooseInput( array( "0", "-1", "------'-------0", "+1", + "09700980982341535324234234", wikiFuzz::makeFuzz( 2 ) ) ) + ); + + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["action"] ); + if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["ip"] ); + if ( wikiFuzz::randnum( 2 ) == 0 ) unset( $this->params["id"] ); + if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["wpUnblockAddress"] ); + } } @@ -1167,20 +1168,20 @@ class ipblocklistTest extends pageTest { ** a page test for "Special:Newimages". */ class newImagesTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Newimages"; + function __construct() { + $this->pagePath = "index.php?title=Special:Newimages"; - $this->params = array ( - 'hidebots' => wikiFuzz::chooseInput( array(wikiFuzz::makeFuzz(2), "1", "", "-1") ), - 'wpIlMatch' => wikiFuzz::makeFuzz(2), - 'until' => wikiFuzz::makeFuzz(2), - 'from' => wikiFuzz::makeFuzz(2) - ); + $this->params = array ( + 'hidebots' => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), "1", "", "-1" ) ), + 'wpIlMatch' => wikiFuzz::makeFuzz( 2 ), + 'until' => wikiFuzz::makeFuzz( 2 ), + 'from' => wikiFuzz::makeFuzz( 2 ) + ); - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(6) == 0) unset($this->params["until"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["from"]); - } + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["until"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["from"] ); + } } @@ -1188,16 +1189,16 @@ class newImagesTest extends pageTest { ** a page test for the "Special:Imagelist" page. */ class imagelistTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Imagelist"; + function __construct() { + $this->pagePath = "index.php?title=Special:Imagelist"; - $this->params = array ( - 'sort' => wikiFuzz::chooseInput( array("bysize", "byname" , "bydate", wikiFuzz::makeFuzz(2)) ), - 'limit' => wikiFuzz::chooseInput( array("0", "-1", "--------'-----0", "+1", "09700982312351132098234", wikiFuzz::makeFuzz(2)) ), - 'offset' => wikiFuzz::chooseInput( array("0", "-1", "------'-------0", "+1", "09700980982341535324234234", wikiFuzz::makeFuzz(2)) ), - 'wpIlMatch' => wikiFuzz::makeFuzz(2) - ); - } + $this->params = array ( + 'sort' => wikiFuzz::chooseInput( array( "bysize", "byname" , "bydate", wikiFuzz::makeFuzz( 2 ) ) ), + 'limit' => wikiFuzz::chooseInput( array( "0", "-1", "--------'-----0", "+1", "09700982312351132098234", wikiFuzz::makeFuzz( 2 ) ) ), + 'offset' => wikiFuzz::chooseInput( array( "0", "-1", "------'-------0", "+1", "09700980982341535324234234", wikiFuzz::makeFuzz( 2 ) ) ), + 'wpIlMatch' => wikiFuzz::makeFuzz( 2 ) + ); + } } @@ -1205,27 +1206,27 @@ class imagelistTest extends pageTest { ** a page test for "Special:Export". */ class specialExportTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Export"; + function __construct() { + $this->pagePath = "index.php?title=Special:Export"; - $this->params = array ( - 'action' => wikiFuzz::chooseInput( array("submit", "", wikiFuzz::makeFuzz(2)) ), - 'pages' => wikiFuzz::makeFuzz(2), - 'curonly' => wikiFuzz::chooseInput( array("", "0", "-1", wikiFuzz::makeFuzz(2)) ), - 'listauthors' => wikiFuzz::chooseInput( array("", "0", "-1", wikiFuzz::makeFuzz(2)) ), - 'history' => wikiFuzz::chooseInput( array("0", "-1", "------'-------0", "+1", "09700980982341535324234234", wikiFuzz::makeFuzz(2)) ), + $this->params = array ( + 'action' => wikiFuzz::chooseInput( array( "submit", "", wikiFuzz::makeFuzz( 2 ) ) ), + 'pages' => wikiFuzz::makeFuzz( 2 ), + 'curonly' => wikiFuzz::chooseInput( array( "", "0", "-1", wikiFuzz::makeFuzz( 2 ) ) ), + 'listauthors' => wikiFuzz::chooseInput( array( "", "0", "-1", wikiFuzz::makeFuzz( 2 ) ) ), + 'history' => wikiFuzz::chooseInput( array( "0", "-1", "------'-------0", "+1", "09700980982341535324234234", wikiFuzz::makeFuzz( 2 ) ) ), - ); + ); - // For the time being, need to disable "submit" action as Tidy barfs on MediaWiki's XML export. - if ($this->params['action'] == 'submit') $this->params['action'] = ''; + // For the time being, need to disable "submit" action as Tidy barfs on MediaWiki's XML export. + if ( $this->params['action'] == 'submit' ) $this->params['action'] = ''; - // Sometimes remove the history field. - if (wikiFuzz::randnum(2) == 0) unset($this->params["history"]); - - // page does not produce HTML. - $this->tidyValidate = false; - } + // Sometimes remove the history field. + if ( wikiFuzz::randnum( 2 ) == 0 ) unset( $this->params["history"] ); + + // page does not produce HTML. + $this->tidyValidate = false; + } } @@ -1233,15 +1234,15 @@ class specialExportTest extends pageTest { ** a page test for "Special:Booksources". */ class specialBooksourcesTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Booksources"; + function __construct() { + $this->pagePath = "index.php?title=Special:Booksources"; - $this->params = array ( - 'go' => wikiFuzz::makeFuzz(2), - // ISBN codes have to contain some semi-numeric stuff or will be ignored: - 'isbn' => "0X0" . wikiFuzz::makeFuzz(2) - ); - } + $this->params = array ( + 'go' => wikiFuzz::makeFuzz( 2 ), + // ISBN codes have to contain some semi-numeric stuff or will be ignored: + 'isbn' => "0X0" . wikiFuzz::makeFuzz( 2 ) + ); + } } @@ -1249,15 +1250,15 @@ class specialBooksourcesTest extends pageTest { ** a page test for "Special:Allpages". */ class specialAllpagesTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special%3AAllpages"; + function __construct() { + $this->pagePath = "index.php?title=Special%3AAllpages"; - $this->params = array ( - 'from' => wikiFuzz::makeFuzz(2), - 'namespace' => wikiFuzz::chooseInput( range(-1, 15) ), - 'go' => wikiFuzz::makeFuzz(2) - ); - } + $this->params = array ( + 'from' => wikiFuzz::makeFuzz( 2 ), + 'namespace' => wikiFuzz::chooseInput( range( -1, 15 ) ), + 'go' => wikiFuzz::makeFuzz( 2 ) + ); + } } @@ -1265,19 +1266,19 @@ class specialAllpagesTest extends pageTest { ** a page test for the page History. */ class pageHistoryTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Main_Page&action=history"; + function __construct() { + $this->pagePath = "index.php?title=Main_Page&action=history"; - $this->params = array ( - 'limit' => wikiFuzz::chooseInput( array("-1", "0", "-------'------0", "+1", "8134", wikiFuzz::makeFuzz(2)) ), - 'offset' => wikiFuzz::chooseInput( array("-1", "0", "------'-------0", "+1", "9823412312312412435", wikiFuzz::makeFuzz(2)) ), - "go" => wikiFuzz::chooseInput( array("first", "last", wikiFuzz::makeFuzz(2)) ), - "dir" => wikiFuzz::chooseInput( array("prev", "next", wikiFuzz::makeFuzz(2)) ), - "diff" => wikiFuzz::chooseInput( array("-1", "--------'-----0", "+1", "8134", wikiFuzz::makeFuzz(2)) ), - "oldid" => wikiFuzz::chooseInput( array("prev", "-1", "+1", "8134", wikiFuzz::makeFuzz(2)) ), - "feed" => wikiFuzz::makeFuzz(2) - ); - } + $this->params = array ( + 'limit' => wikiFuzz::chooseInput( array( "-1", "0", "-------'------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ), + 'offset' => wikiFuzz::chooseInput( array( "-1", "0", "------'-------0", "+1", "9823412312312412435", wikiFuzz::makeFuzz( 2 ) ) ), + "go" => wikiFuzz::chooseInput( array( "first", "last", wikiFuzz::makeFuzz( 2 ) ) ), + "dir" => wikiFuzz::chooseInput( array( "prev", "next", wikiFuzz::makeFuzz( 2 ) ) ), + "diff" => wikiFuzz::chooseInput( array( "-1", "--------'-----0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ), + "oldid" => wikiFuzz::chooseInput( array( "prev", "-1", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ), + "feed" => wikiFuzz::makeFuzz( 2 ) + ); + } } @@ -1285,17 +1286,17 @@ class pageHistoryTest extends pageTest { ** a page test for the Special:Contributions". */ class contributionsTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Contributions/" . USER_ON_WIKI; + function __construct() { + $this->pagePath = "index.php?title=Special:Contributions/" . USER_ON_WIKI; - $this->params = array ( - 'target' => wikiFuzz::chooseInput( array(wikiFuzz::makeFuzz(2), "newbies", USER_ON_WIKI) ), - 'namespace' => wikiFuzz::chooseInput( array(-1, 15, 1, wikiFuzz::makeFuzz(2)) ), - 'offset' => wikiFuzz::chooseInput( array("0", "-1", "------'-------0", "+1", "982342131232131231241", wikiFuzz::makeFuzz(2)) ), - 'bot' => wikiFuzz::chooseInput( array("", "-1", "0", "1", wikiFuzz::makeFuzz(2)) ), - 'go' => wikiFuzz::chooseInput( array("-1", 'prev', 'next', wikiFuzz::makeFuzz(2)) ) - ); - } + $this->params = array ( + 'target' => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), "newbies", USER_ON_WIKI ) ), + 'namespace' => wikiFuzz::chooseInput( array( -1, 15, 1, wikiFuzz::makeFuzz( 2 ) ) ), + 'offset' => wikiFuzz::chooseInput( array( "0", "-1", "------'-------0", "+1", "982342131232131231241", wikiFuzz::makeFuzz( 2 ) ) ), + 'bot' => wikiFuzz::chooseInput( array( "", "-1", "0", "1", wikiFuzz::makeFuzz( 2 ) ) ), + 'go' => wikiFuzz::chooseInput( array( "-1", 'prev', 'next', wikiFuzz::makeFuzz( 2 ) ) ) + ); + } } @@ -1303,66 +1304,66 @@ class contributionsTest extends pageTest { ** a page test for viewing a normal page, whilst posting various params. */ class viewPageTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Main_Page"; - - $this->params = array ( - "useskin" => wikiFuzz::chooseInput( array("chick", "cologneblue", "myskin", - "nostalgia", "simple", "standard", wikiFuzz::makeFuzz(2)) ), - "uselang" => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz(2), - "ab", "af", "an", "ar", "arc", "as", "ast", "av", "ay", "az", "ba", - "bat-smg", "be", "bg", "bm", "bn", "bo", "bpy", "br", "bs", "ca", - "ce", "cs", "csb", "cv", "cy", "da", "de", "dv", "dz", "el", "en", - "eo", "es", "et", "eu", "fa", "fi", "fo", "fr", "fur", "fy", "ga", - "gn", "gsw", "gu", "he", "hi", "hr", "hu", "ia", "id", "ii", "is", - "it", "ja", "jv", "ka", "km", "kn", "ko", "ks", "ku", "kv", "la", - "li", "lo", "lt", "lv", "mk", "ml", "ms", "nah", "nap", "nds", - "nds-nl", "nl", "nn", "no", "non", "nv", "oc", "or", "os", "pa", - "pl", "pms", "ps", "pt", "pt-br", "qu", "rmy", "ro", "ru", "sc", - "sd", "sk", "sl", "sq", "sr", "sr-ec", "sr-el", - "su", "sv", "ta", "te", "th", "tr", "tt", "ty", "tyv", "udm", - "ug", "uk", "ur", "utf8", "vec", "vi", "wa", "xal", "yi", "za", - "zh", "zh-cn", "zh-hk", "zh-sg", "zh-tw", "zh-tw") ), - "returnto" => wikiFuzz::makeFuzz(2), - "feed" => wikiFuzz::chooseInput( array("atom", "rss", wikiFuzz::makeFuzz(2)) ), - "rcid" => wikiFuzz::makeFuzz(2), - "action" => wikiFuzz::chooseInput( array("view", "raw", "render", wikiFuzz::makeFuzz(2), "markpatrolled") ), - "printable" => wikiFuzz::makeFuzz(2), - "oldid" => wikiFuzz::makeFuzz(2), - "redirect" => wikiFuzz::makeFuzz(2), - "diff" => wikiFuzz::makeFuzz(2), - "search" => wikiFuzz::makeFuzz(2), - "rdfrom" => wikiFuzz::makeFuzz(2), // things from Article.php from here on: - "token" => wikiFuzz::makeFuzz(2), - "tbid" => wikiFuzz::makeFuzz(2), - "action" => wikiFuzz::chooseInput( array("purge", wikiFuzz::makeFuzz(2)) ), - "wpReason" => wikiFuzz::makeFuzz(2), - "wpEditToken" => wikiFuzz::makeFuzz(2), - "from" => wikiFuzz::makeFuzz(2), - "bot" => wikiFuzz::makeFuzz(2), - "summary" => wikiFuzz::makeFuzz(2), - "direction" => wikiFuzz::chooseInput( array("next", "prev", wikiFuzz::makeFuzz(2)) ), - "section" => wikiFuzz::makeFuzz(2), - "preload" => wikiFuzz::makeFuzz(2), - - ); - - // Tidy does not know how to valid atom or rss, so exclude from testing for the time being. - if ($this->params["feed"] == "atom") { unset($this->params["feed"]); } - else if ($this->params["feed"] == "rss") { unset($this->params["feed"]); } - - // Raw pages cannot really be validated - if ($this->params["action"] == "raw") unset($this->params["action"]); - - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(6) == 0) unset($this->params["rcid"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["diff"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["rdfrom"]); - if (wikiFuzz::randnum(3) == 0) unset($this->params["oldid"]); - - // usually don't want action == purge. - if (wikiFuzz::randnum(6) > 1) unset($this->params["action"]); - } + function __construct() { + $this->pagePath = "index.php?title=Main_Page"; + + $this->params = array ( + "useskin" => wikiFuzz::chooseInput( array( "chick", "cologneblue", "myskin", + "nostalgia", "simple", "standard", wikiFuzz::makeFuzz( 2 ) ) ), + "uselang" => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), + "ab", "af", "an", "ar", "arc", "as", "ast", "av", "ay", "az", "ba", + "bat-smg", "be", "bg", "bm", "bn", "bo", "bpy", "br", "bs", "ca", + "ce", "cs", "csb", "cv", "cy", "da", "de", "dv", "dz", "el", "en", + "eo", "es", "et", "eu", "fa", "fi", "fo", "fr", "fur", "fy", "ga", + "gn", "gsw", "gu", "he", "hi", "hr", "hu", "ia", "id", "ii", "is", + "it", "ja", "jv", "ka", "km", "kn", "ko", "ks", "ku", "kv", "la", + "li", "lo", "lt", "lv", "mk", "ml", "ms", "nah", "nap", "nds", + "nds-nl", "nl", "nn", "no", "non", "nv", "oc", "or", "os", "pa", + "pl", "pms", "ps", "pt", "pt-br", "qu", "rmy", "ro", "ru", "sc", + "sd", "sk", "sl", "sq", "sr", "sr-ec", "sr-el", + "su", "sv", "ta", "te", "th", "tr", "tt", "ty", "tyv", "udm", + "ug", "uk", "ur", "utf8", "vec", "vi", "wa", "xal", "yi", "za", + "zh", "zh-cn", "zh-hk", "zh-sg", "zh-tw", "zh-tw" ) ), + "returnto" => wikiFuzz::makeFuzz( 2 ), + "feed" => wikiFuzz::chooseInput( array( "atom", "rss", wikiFuzz::makeFuzz( 2 ) ) ), + "rcid" => wikiFuzz::makeFuzz( 2 ), + "action" => wikiFuzz::chooseInput( array( "view", "raw", "render", wikiFuzz::makeFuzz( 2 ), "markpatrolled" ) ), + "printable" => wikiFuzz::makeFuzz( 2 ), + "oldid" => wikiFuzz::makeFuzz( 2 ), + "redirect" => wikiFuzz::makeFuzz( 2 ), + "diff" => wikiFuzz::makeFuzz( 2 ), + "search" => wikiFuzz::makeFuzz( 2 ), + "rdfrom" => wikiFuzz::makeFuzz( 2 ), // things from Article.php from here on: + "token" => wikiFuzz::makeFuzz( 2 ), + "tbid" => wikiFuzz::makeFuzz( 2 ), + "action" => wikiFuzz::chooseInput( array( "purge", wikiFuzz::makeFuzz( 2 ) ) ), + "wpReason" => wikiFuzz::makeFuzz( 2 ), + "wpEditToken" => wikiFuzz::makeFuzz( 2 ), + "from" => wikiFuzz::makeFuzz( 2 ), + "bot" => wikiFuzz::makeFuzz( 2 ), + "summary" => wikiFuzz::makeFuzz( 2 ), + "direction" => wikiFuzz::chooseInput( array( "next", "prev", wikiFuzz::makeFuzz( 2 ) ) ), + "section" => wikiFuzz::makeFuzz( 2 ), + "preload" => wikiFuzz::makeFuzz( 2 ), + + ); + + // Tidy does not know how to valid atom or rss, so exclude from testing for the time being. + if ( $this->params["feed"] == "atom" ) { unset( $this->params["feed"] ); } + else if ( $this->params["feed"] == "rss" ) { unset( $this->params["feed"] ); } + + // Raw pages cannot really be validated + if ( $this->params["action"] == "raw" ) unset( $this->params["action"] ); + + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["rcid"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["diff"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["rdfrom"] ); + if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["oldid"] ); + + // usually don't want action == purge. + if ( wikiFuzz::randnum( 6 ) > 1 ) unset( $this->params["action"] ); + } } @@ -1370,50 +1371,50 @@ class viewPageTest extends pageTest { ** a page test for "Special:Allmessages". */ class specialAllmessagesTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Allmessages"; + function __construct() { + $this->pagePath = "index.php?title=Special:Allmessages"; - // only really has one parameter - $this->params = array ( - "ot" => wikiFuzz::chooseInput( array("php", "html", wikiFuzz::makeFuzz(2)) ) - ); - } + // only really has one parameter + $this->params = array ( + "ot" => wikiFuzz::chooseInput( array( "php", "html", wikiFuzz::makeFuzz( 2 ) ) ) + ); + } } /** ** a page test for "Special:Newpages". */ class specialNewpages extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Newpages"; + function __construct() { + $this->pagePath = "index.php?title=Special:Newpages"; - $this->params = array ( - "namespace" => wikiFuzz::chooseInput( range(-1, 15) ), - "feed" => wikiFuzz::chooseInput( array("atom", "rss", wikiFuzz::makeFuzz(2)) ), - 'limit' => wikiFuzz::chooseInput( array("-1", "0", "-------'------0", "+1", "8134", wikiFuzz::makeFuzz(2)) ), - 'offset' => wikiFuzz::chooseInput( array("-1", "0", "------'-------0", "+1", "9823412312312412435", wikiFuzz::makeFuzz(2)) ) - ); + $this->params = array ( + "namespace" => wikiFuzz::chooseInput( range( -1, 15 ) ), + "feed" => wikiFuzz::chooseInput( array( "atom", "rss", wikiFuzz::makeFuzz( 2 ) ) ), + 'limit' => wikiFuzz::chooseInput( array( "-1", "0", "-------'------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ), + 'offset' => wikiFuzz::chooseInput( array( "-1", "0", "------'-------0", "+1", "9823412312312412435", wikiFuzz::makeFuzz( 2 ) ) ) + ); - // Tidy does not know how to valid atom or rss, so exclude from testing for the time being. - if ($this->params["feed"] == "atom") { unset($this->params["feed"]); } - else if ($this->params["feed"] == "rss") { unset($this->params["feed"]); } - } + // Tidy does not know how to valid atom or rss, so exclude from testing for the time being. + if ( $this->params["feed"] == "atom" ) { unset( $this->params["feed"] ); } + else if ( $this->params["feed"] == "rss" ) { unset( $this->params["feed"] ); } + } } /** ** a page test for "redirect.php" */ class redirectTest extends pageTest { - function __construct() { - $this->pagePath = "redirect.php"; + function __construct() { + $this->pagePath = "redirect.php"; - $this->params = array ( - "wpDropdown" => wikiFuzz::makeFuzz(2) - ); + $this->params = array ( + "wpDropdown" => wikiFuzz::makeFuzz( 2 ) + ); - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(6) == 0) unset($this->params["wpDropdown"]); - } + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpDropdown"] ); + } } @@ -1421,14 +1422,14 @@ class redirectTest extends pageTest { ** a page test for "Special:Confirmemail" */ class confirmEmail extends pageTest { - function __construct() { - // sometimes we send a bogus confirmation code, and sometimes we don't. - $this->pagePath = "index.php?title=Special:Confirmemail" . wikiFuzz::chooseInput( array("", "/" . wikiFuzz::makeTitleSafe(wikiFuzz::makeFuzz(1)) ) ); + function __construct() { + // sometimes we send a bogus confirmation code, and sometimes we don't. + $this->pagePath = "index.php?title=Special:Confirmemail" . wikiFuzz::chooseInput( array( "", "/" . wikiFuzz::makeTitleSafe( wikiFuzz::makeFuzz( 1 ) ) ) ); - $this->params = array ( - "token" => wikiFuzz::makeFuzz(2) - ); - } + $this->params = array ( + "token" => wikiFuzz::makeFuzz( 2 ) + ); + } } @@ -1437,24 +1438,24 @@ class confirmEmail extends pageTest { ** Note: this test would be better if we were logged in. */ class watchlistTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Watchlist"; + function __construct() { + $this->pagePath = "index.php?title=Special:Watchlist"; - $this->params = array ( - "remove" => wikiFuzz::chooseInput( array("Remove checked items from watchlist", wikiFuzz::makeFuzz(2))), - 'days' => wikiFuzz::chooseInput( array(0, -1, -230, "--", 3, 9, wikiFuzz::makeFuzz(2)) ), - 'hideOwn' => wikiFuzz::chooseInput( array("", "0", "1", wikiFuzz::makeFuzz(2)) ), - 'hideBots' => wikiFuzz::chooseInput( array("", "0", "1", wikiFuzz::makeFuzz(2)) ), - 'namespace'=> wikiFuzz::chooseInput( array("", "0", "1", wikiFuzz::makeFuzz(2)) ), - 'action' => wikiFuzz::chooseInput( array("submit", "clear", wikiFuzz::makeFuzz(2)) ), - 'id[]' => wikiFuzz::makeFuzz(2), - 'edit' => wikiFuzz::makeFuzz(2), - 'token' => wikiFuzz::chooseInput( array("", "1243213", wikiFuzz::makeFuzz(2)) ) - ); + $this->params = array ( + "remove" => wikiFuzz::chooseInput( array( "Remove checked items from watchlist", wikiFuzz::makeFuzz( 2 ) ) ), + 'days' => wikiFuzz::chooseInput( array( 0, -1, -230, "--", 3, 9, wikiFuzz::makeFuzz( 2 ) ) ), + 'hideOwn' => wikiFuzz::chooseInput( array( "", "0", "1", wikiFuzz::makeFuzz( 2 ) ) ), + 'hideBots' => wikiFuzz::chooseInput( array( "", "0", "1", wikiFuzz::makeFuzz( 2 ) ) ), + 'namespace' => wikiFuzz::chooseInput( array( "", "0", "1", wikiFuzz::makeFuzz( 2 ) ) ), + 'action' => wikiFuzz::chooseInput( array( "submit", "clear", wikiFuzz::makeFuzz( 2 ) ) ), + 'id[]' => wikiFuzz::makeFuzz( 2 ), + 'edit' => wikiFuzz::makeFuzz( 2 ), + 'token' => wikiFuzz::chooseInput( array( "", "1243213", wikiFuzz::makeFuzz( 2 ) ) ) + ); - // sometimes we specifiy "reset", and sometimes we don't. - if (wikiFuzz::randnum(3) == 0) $this->params["reset"] = wikiFuzz::chooseInput( array("", "0", "1", wikiFuzz::makeFuzz(2)) ); - } + // sometimes we specifiy "reset", and sometimes we don't. + if ( wikiFuzz::randnum( 3 ) == 0 ) $this->params["reset"] = wikiFuzz::chooseInput( array( "", "0", "1", wikiFuzz::makeFuzz( 2 ) ) ); + } } @@ -1462,16 +1463,16 @@ class watchlistTest extends pageTest { ** a page test for "Special:Blockme" */ class specialBlockmeTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Blockme"; + function __construct() { + $this->pagePath = "index.php?title=Special:Blockme"; - $this->params = array ( ); + $this->params = array ( ); - // sometimes we specify "ip", and sometimes we don't. - if (wikiFuzz::randnum(1) == 0) { - $this->params["ip"] = wikiFuzz::chooseInput( array("10.12.41.213", wikiFuzz::randnum(-10,8134), wikiFuzz::makeFuzz(2)) ); - } - } + // sometimes we specify "ip", and sometimes we don't. + if ( wikiFuzz::randnum( 1 ) == 0 ) { + $this->params["ip"] = wikiFuzz::chooseInput( array( "10.12.41.213", wikiFuzz::randnum( -10, 8134 ), wikiFuzz::makeFuzz( 2 ) ) ); + } + } } @@ -1479,32 +1480,32 @@ class specialBlockmeTest extends pageTest { ** a page test for "Special:Movepage" */ class specialMovePage extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Movepage"; - - $this->params = array ( - "action" => wikiFuzz::chooseInput( array("success", "submit", "", wikiFuzz::makeFuzz(2)) ), - 'wpEditToken' => wikiFuzz::chooseInput( array('', 0, 34987987, wikiFuzz::makeFuzz(2)) ), - 'target' => wikiFuzz::chooseInput( array("x", wikiFuzz::makeTitleSafe(wikiFuzz::makeFuzz(2)) ) ), - 'wpOldTitle' => wikiFuzz::chooseInput( array("z", wikiFuzz::makeTitleSafe(wikiFuzz::makeFuzz(2)), wikiFuzz::makeFuzz(2) ) ), - 'wpNewTitle' => wikiFuzz::chooseInput( array("y", wikiFuzz::makeTitleSafe(wikiFuzz::makeFuzz(2)), wikiFuzz::makeFuzz(2) ) ), - 'wpReason' => wikiFuzz::chooseInput( array(wikiFuzz::makeFuzz(2)) ), - 'wpMovetalk' => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ), - 'wpDeleteAndMove' => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ), - 'wpConfirm' => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ), - 'talkmoved' => wikiFuzz::chooseInput( array("1", wikiFuzz::makeFuzz(2), "articleexists", 'notalkpage') ), - 'oldtitle' => wikiFuzz::makeFuzz(2), - 'newtitle' => wikiFuzz::makeFuzz(2), - 'wpMovetalk' => wikiFuzz::chooseInput( array("1", "0", wikiFuzz::makeFuzz(2)) ) - ); - - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(2) == 0) unset($this->params["wpEditToken"]); - if (wikiFuzz::randnum(3) == 0) unset($this->params["target"]); - if (wikiFuzz::randnum(3) == 0) unset($this->params["wpNewTitle"]); - if (wikiFuzz::randnum(4) == 0) unset($this->params["wpReason"]); - if (wikiFuzz::randnum(4) == 0) unset($this->params["wpOldTitle"]); - } + function __construct() { + $this->pagePath = "index.php?title=Special:Movepage"; + + $this->params = array ( + "action" => wikiFuzz::chooseInput( array( "success", "submit", "", wikiFuzz::makeFuzz( 2 ) ) ), + 'wpEditToken' => wikiFuzz::chooseInput( array( '', 0, 34987987, wikiFuzz::makeFuzz( 2 ) ) ), + 'target' => wikiFuzz::chooseInput( array( "x", wikiFuzz::makeTitleSafe( wikiFuzz::makeFuzz( 2 ) ) ) ), + 'wpOldTitle' => wikiFuzz::chooseInput( array( "z", wikiFuzz::makeTitleSafe( wikiFuzz::makeFuzz( 2 ) ), wikiFuzz::makeFuzz( 2 ) ) ), + 'wpNewTitle' => wikiFuzz::chooseInput( array( "y", wikiFuzz::makeTitleSafe( wikiFuzz::makeFuzz( 2 ) ), wikiFuzz::makeFuzz( 2 ) ) ), + 'wpReason' => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ) ) ), + 'wpMovetalk' => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + 'wpDeleteAndMove' => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + 'wpConfirm' => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + 'talkmoved' => wikiFuzz::chooseInput( array( "1", wikiFuzz::makeFuzz( 2 ), "articleexists", 'notalkpage' ) ), + 'oldtitle' => wikiFuzz::makeFuzz( 2 ), + 'newtitle' => wikiFuzz::makeFuzz( 2 ), + 'wpMovetalk' => wikiFuzz::chooseInput( array( "1", "0", wikiFuzz::makeFuzz( 2 ) ) ) + ); + + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 2 ) == 0 ) unset( $this->params["wpEditToken"] ); + if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["target"] ); + if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["wpNewTitle"] ); + if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpReason"] ); + if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpOldTitle"] ); + } } @@ -1512,26 +1513,26 @@ class specialMovePage extends pageTest { ** a page test for "Special:Undelete" */ class specialUndelete extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Undelete"; + function __construct() { + $this->pagePath = "index.php?title=Special:Undelete"; - $this->params = array ( - "action" => wikiFuzz::chooseInput( array("submit", "", wikiFuzz::makeFuzz(2)) ), - 'wpEditToken' => wikiFuzz::chooseInput( array('', 0, 34987987, wikiFuzz::makeFuzz(2)) ), - 'target' => wikiFuzz::chooseInput( array("x", wikiFuzz::makeTitleSafe(wikiFuzz::makeFuzz(2)) ) ), - 'timestamp' => wikiFuzz::chooseInput( array("125223", wikiFuzz::makeFuzz(2) ) ), - 'file' => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ), - 'restore' => wikiFuzz::chooseInput( array("0", "1", wikiFuzz::makeFuzz(2)) ), - 'preview' => wikiFuzz::chooseInput( array("0", "1", wikiFuzz::makeFuzz(2)) ), - 'wpComment' => wikiFuzz::makeFuzz(2) - ); + $this->params = array ( + "action" => wikiFuzz::chooseInput( array( "submit", "", wikiFuzz::makeFuzz( 2 ) ) ), + 'wpEditToken' => wikiFuzz::chooseInput( array( '', 0, 34987987, wikiFuzz::makeFuzz( 2 ) ) ), + 'target' => wikiFuzz::chooseInput( array( "x", wikiFuzz::makeTitleSafe( wikiFuzz::makeFuzz( 2 ) ) ) ), + 'timestamp' => wikiFuzz::chooseInput( array( "125223", wikiFuzz::makeFuzz( 2 ) ) ), + 'file' => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + 'restore' => wikiFuzz::chooseInput( array( "0", "1", wikiFuzz::makeFuzz( 2 ) ) ), + 'preview' => wikiFuzz::chooseInput( array( "0", "1", wikiFuzz::makeFuzz( 2 ) ) ), + 'wpComment' => wikiFuzz::makeFuzz( 2 ) + ); - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(2) == 0) unset($this->params["wpEditToken"]); - if (wikiFuzz::randnum(4) == 0) unset($this->params["target"]); - if (wikiFuzz::randnum(1) == 0) unset($this->params["restore"]); - if (wikiFuzz::randnum(1) == 0) unset($this->params["preview"]); - } + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 2 ) == 0 ) unset( $this->params["wpEditToken"] ); + if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["target"] ); + if ( wikiFuzz::randnum( 1 ) == 0 ) unset( $this->params["restore"] ); + if ( wikiFuzz::randnum( 1 ) == 0 ) unset( $this->params["preview"] ); + } } @@ -1539,20 +1540,20 @@ class specialUndelete extends pageTest { ** a page test for "Special:Unlockdb" */ class specialUnlockdb extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Unlockdb"; + function __construct() { + $this->pagePath = "index.php?title=Special:Unlockdb"; - $this->params = array ( - "action" => wikiFuzz::chooseInput( array("submit", "success", "", wikiFuzz::makeFuzz(2)) ), - 'wpEditToken' => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ), - 'wpLockConfirm' => wikiFuzz::chooseInput( array("0", "1", wikiFuzz::makeFuzz(2)) ) - ); + $this->params = array ( + "action" => wikiFuzz::chooseInput( array( "submit", "success", "", wikiFuzz::makeFuzz( 2 ) ) ), + 'wpEditToken' => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ), + 'wpLockConfirm' => wikiFuzz::chooseInput( array( "0", "1", wikiFuzz::makeFuzz( 2 ) ) ) + ); - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(4) == 0) unset($this->params["wpEditToken"]); - if (wikiFuzz::randnum(4) == 0) unset($this->params["action"]); - if (wikiFuzz::randnum(4) == 0) unset($this->params["wpLockConfirm"]); - } + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpEditToken"] ); + if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["action"] ); + if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpLockConfirm"] ); + } } @@ -1560,21 +1561,21 @@ class specialUnlockdb extends pageTest { ** a page test for "Special:Lockdb" */ class specialLockdb extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Lockdb"; + function __construct() { + $this->pagePath = "index.php?title=Special:Lockdb"; - $this->params = array ( - "action" => wikiFuzz::chooseInput( array("submit", "success", "", wikiFuzz::makeFuzz(2)) ), - 'wpEditToken' => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ), - 'wpLockReason' => wikiFuzz::makeFuzz(2), - 'wpLockConfirm'=> wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ) - ); + $this->params = array ( + "action" => wikiFuzz::chooseInput( array( "submit", "success", "", wikiFuzz::makeFuzz( 2 ) ) ), + 'wpEditToken' => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ), + 'wpLockReason' => wikiFuzz::makeFuzz( 2 ), + 'wpLockConfirm' => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ) + ); - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(4) == 0) unset($this->params["wpEditToken"]); - if (wikiFuzz::randnum(4) == 0) unset($this->params["action"]); - if (wikiFuzz::randnum(4) == 0) unset($this->params["wpLockConfirm"]); - } + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpEditToken"] ); + if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["action"] ); + if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpLockConfirm"] ); + } } @@ -1582,22 +1583,22 @@ class specialLockdb extends pageTest { ** a page test for "Special:Userrights" */ class specialUserrights extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Userrights"; + function __construct() { + $this->pagePath = "index.php?title=Special:Userrights"; - $this->params = array ( - 'wpEditToken' => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ), - 'user-editname' => wikiFuzz::chooseInput( array("Nickj2", "Nickj2\n", wikiFuzz::makeFuzz(2)) ), - 'ssearchuser' => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ), - 'saveusergroups'=> wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)), "Save User Groups"), - 'member[]' => wikiFuzz::chooseInput( array("0", "bot", "1", "++--34234", wikiFuzz::makeFuzz(2)) ), - "available[]" => wikiFuzz::chooseInput( array("0", "sysop", "bureaucrat", "1", "++--34234", wikiFuzz::makeFuzz(2)) ) - ); + $this->params = array ( + 'wpEditToken' => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ), + 'user-editname' => wikiFuzz::chooseInput( array( "Nickj2", "Nickj2\n", wikiFuzz::makeFuzz( 2 ) ) ), + 'ssearchuser' => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + 'saveusergroups' => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ), "Save User Groups" ), + 'member[]' => wikiFuzz::chooseInput( array( "0", "bot", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + "available[]" => wikiFuzz::chooseInput( array( "0", "sysop", "bureaucrat", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ) + ); - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(3) == 0) unset($this->params['ssearchuser']); - if (wikiFuzz::randnum(3) == 0) unset($this->params['saveusergroups']); - } + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params['ssearchuser'] ); + if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params['saveusergroups'] ); + } } @@ -1605,23 +1606,23 @@ class specialUserrights extends pageTest { ** a test for page protection and unprotection. */ class pageProtectionForm extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Main_Page"; + function __construct() { + $this->pagePath = "index.php?title=Main_Page"; - $this->params = array ( - "action" => "protect", - 'wpEditToken' => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ), - "mwProtect-level-edit" => wikiFuzz::chooseInput( array('', 'autoconfirmed', 'sysop', wikifuzz::makeFuzz(2)) ), - "mwProtect-level-move" => wikiFuzz::chooseInput( array('', 'autoconfirmed', 'sysop', wikifuzz::makeFuzz(2)) ), - "mwProtectUnchained" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ), - 'mwProtect-reason' => wikiFuzz::chooseInput( array("because it was there", wikifuzz::makeFuzz(2)) ) - ); + $this->params = array ( + "action" => "protect", + 'wpEditToken' => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ), + "mwProtect-level-edit" => wikiFuzz::chooseInput( array( '', 'autoconfirmed', 'sysop', wikiFuzz::makeFuzz( 2 ) ) ), + "mwProtect-level-move" => wikiFuzz::chooseInput( array( '', 'autoconfirmed', 'sysop', wikiFuzz::makeFuzz( 2 ) ) ), + "mwProtectUnchained" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + 'mwProtect-reason' => wikiFuzz::chooseInput( array( "because it was there", wikiFuzz::makeFuzz( 2 ) ) ) + ); - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(3) == 0) unset($this->params["mwProtectUnchained"]); - if (wikiFuzz::randnum(3) == 0) unset($this->params['mwProtect-reason']); - } + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["mwProtectUnchained"] ); + if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params['mwProtect-reason'] ); + } } @@ -1629,38 +1630,38 @@ class pageProtectionForm extends pageTest { ** a page test for "Special:Blockip". */ class specialBlockip extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Blockip"; - - $this->params = array ( - "action" => wikiFuzz::chooseInput( array("submit", "", wikiFuzz::makeFuzz(2)) ), - 'wpEditToken' => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ), - "wpBlockAddress" => wikiFuzz::chooseInput( array("20398702394", "", "Nickj2", wikiFuzz::makeFuzz(2), - // something like an IP address, sometimes invalid: - ( wikiFuzz::randnum(300,-20) . "." . wikiFuzz::randnum(300,-20) . "." - . wikiFuzz::randnum(300,-20) . "." .wikiFuzz::randnum(300,-20) ) ) ), - "ip" => wikiFuzz::chooseInput( array("20398702394", "", "Nickj2", wikiFuzz::makeFuzz(2), - // something like an IP address, sometimes invalid: - ( wikiFuzz::randnum(300,-20) . "." . wikiFuzz::randnum(300,-20) . "." - . wikiFuzz::randnum(300,-20) . "." .wikiFuzz::randnum(300,-20) ) ) ), - "wpBlockOther" => wikiFuzz::chooseInput( array('', 'Nickj2', wikifuzz::makeFuzz(2)) ), - "wpBlockExpiry" => wikiFuzz::chooseInput( array("other", "2 hours", "1 day", "3 days", "1 week", "2 weeks", - "1 month", "3 months", "6 months", "1 year", "infinite", wikiFuzz::makeFuzz(2)) ), - "wpBlockReason" => wikiFuzz::chooseInput( array("because it was there", wikifuzz::makeFuzz(2)) ), - "wpAnonOnly" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ), - "wpCreateAccount" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ), - "wpBlock" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ) - ); - - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(4) == 0) unset($this->params["wpBlockOther"]); - if (wikiFuzz::randnum(4) == 0) unset($this->params["wpBlockExpiry"]); - if (wikiFuzz::randnum(4) == 0) unset($this->params["wpBlockReason"]); - if (wikiFuzz::randnum(4) == 0) unset($this->params["wpAnonOnly"]); - if (wikiFuzz::randnum(4) == 0) unset($this->params["wpCreateAccount"]); - if (wikiFuzz::randnum(4) == 0) unset($this->params["wpBlockAddress"]); - if (wikiFuzz::randnum(4) == 0) unset($this->params["ip"]); - } + function __construct() { + $this->pagePath = "index.php?title=Special:Blockip"; + + $this->params = array ( + "action" => wikiFuzz::chooseInput( array( "submit", "", wikiFuzz::makeFuzz( 2 ) ) ), + 'wpEditToken' => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ), + "wpBlockAddress" => wikiFuzz::chooseInput( array( "20398702394", "", "Nickj2", wikiFuzz::makeFuzz( 2 ), + // something like an IP address, sometimes invalid: + ( wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) . "." + . wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) ) ) ), + "ip" => wikiFuzz::chooseInput( array( "20398702394", "", "Nickj2", wikiFuzz::makeFuzz( 2 ), + // something like an IP address, sometimes invalid: + ( wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) . "." + . wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) ) ) ), + "wpBlockOther" => wikiFuzz::chooseInput( array( '', 'Nickj2', wikiFuzz::makeFuzz( 2 ) ) ), + "wpBlockExpiry" => wikiFuzz::chooseInput( array( "other", "2 hours", "1 day", "3 days", "1 week", "2 weeks", + "1 month", "3 months", "6 months", "1 year", "infinite", wikiFuzz::makeFuzz( 2 ) ) ), + "wpBlockReason" => wikiFuzz::chooseInput( array( "because it was there", wikiFuzz::makeFuzz( 2 ) ) ), + "wpAnonOnly" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + "wpCreateAccount" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + "wpBlock" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ) + ); + + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpBlockOther"] ); + if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpBlockExpiry"] ); + if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpBlockReason"] ); + if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpAnonOnly"] ); + if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpCreateAccount"] ); + if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpBlockAddress"] ); + if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["ip"] ); + } } @@ -1668,22 +1669,22 @@ class specialBlockip extends pageTest { ** a test for the imagepage. */ class imagepageTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Image:Small-email.png"; + function __construct() { + $this->pagePath = "index.php?title=Image:Small-email.png"; - $this->params = array ( - "image" => wikiFuzz::chooseInput( array("Small-email.png", wikifuzz::makeFuzz(2)) ), - "wpReason" => wikifuzz::makeFuzz(2), - "oldimage" => wikiFuzz::chooseInput( array("Small-email.png", wikifuzz::makeFuzz(2)) ), - "wpEditToken" => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ), - ); + $this->params = array ( + "image" => wikiFuzz::chooseInput( array( "Small-email.png", wikiFuzz::makeFuzz( 2 ) ) ), + "wpReason" => wikiFuzz::makeFuzz( 2 ), + "oldimage" => wikiFuzz::chooseInput( array( "Small-email.png", wikiFuzz::makeFuzz( 2 ) ) ), + "wpEditToken" => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ), + ); - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(6) == 0) unset($this->params["image"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["wpReason"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["oldimage"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["wpEditToken"]); - } + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["image"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpReason"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["oldimage"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpEditToken"] ); + } } @@ -1691,20 +1692,20 @@ class imagepageTest extends pageTest { ** a test for page deletion form. */ class pageDeletion extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Main_Page&action=delete"; + function __construct() { + $this->pagePath = "index.php?title=Main_Page&action=delete"; - $this->params = array ( - "wpEditToken" => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ), - "wpReason" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ), - "wpConfirm" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ), - ); + $this->params = array ( + "wpEditToken" => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ), + "wpReason" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + "wpConfirm" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + ); - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(5) == 0) unset($this->params["wpReason"]); - if (wikiFuzz::randnum(5) == 0) unset($this->params["wpEditToken"]); - if (wikiFuzz::randnum(5) == 0) unset($this->params["wpConfirm"]); - } + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 5 ) == 0 ) unset( $this->params["wpReason"] ); + if ( wikiFuzz::randnum( 5 ) == 0 ) unset( $this->params["wpEditToken"] ); + if ( wikiFuzz::randnum( 5 ) == 0 ) unset( $this->params["wpConfirm"] ); + } } @@ -1713,30 +1714,30 @@ class pageDeletion extends pageTest { ** a test for Revision Deletion. */ class specialRevisionDelete extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Revisiondelete"; - - $this->params = array ( - "target" => wikiFuzz::chooseInput( array("Main Page", wikifuzz::makeFuzz(2)) ), - "oldid" => wikifuzz::makeFuzz(2), - "oldid[]" => wikifuzz::makeFuzz(2), - "wpReason" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ), - "revdelete-hide-text" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ), - "revdelete-hide-comment" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ), - "revdelete-hide-user" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ), - "revdelete-hide-restricted" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ), - ); - - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(3) == 0) unset($this->params["target"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["oldid"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["oldid[]"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["wpReason"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["revdelete-hide-text"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["revdelete-hide-comment"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["revdelete-hide-user"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["revdelete-hide-restricted"]); - } + function __construct() { + $this->pagePath = "index.php?title=Special:Revisiondelete"; + + $this->params = array ( + "target" => wikiFuzz::chooseInput( array( "Main Page", wikiFuzz::makeFuzz( 2 ) ) ), + "oldid" => wikiFuzz::makeFuzz( 2 ), + "oldid[]" => wikiFuzz::makeFuzz( 2 ), + "wpReason" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + "revdelete-hide-text" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + "revdelete-hide-comment" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + "revdelete-hide-user" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + "revdelete-hide-restricted" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + ); + + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["target"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["oldid"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["oldid[]"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpReason"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["revdelete-hide-text"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["revdelete-hide-comment"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["revdelete-hide-user"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["revdelete-hide-restricted"] ); + } } @@ -1744,31 +1745,31 @@ class specialRevisionDelete extends pageTest { ** a test for Special:Import. */ class specialImport extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Import"; + function __construct() { + $this->pagePath = "index.php?title=Special:Import"; - $this->params = array ( - "action" => "submit", - "source" => wikiFuzz::chooseInput( array("upload", "interwiki", wikifuzz::makeFuzz(2)) ), - "MAX_FILE_SIZE" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikifuzz::makeFuzz(2)) ), - "xmlimport" => wikiFuzz::chooseInput( array("/var/www/hosts/mediawiki/wiki/AdminSettings.php", "1", "++--34234", wikiFuzz::makeFuzz(2)) ), - "namespace" => wikiFuzz::chooseInput( array(wikiFuzz::randnum(30,-6), wikiFuzz::makeFuzz(2)) ), - "interwiki" => wikiFuzz::makeFuzz(2), - "interwikiHistory" => wikiFuzz::makeFuzz(2), - "frompage" => wikiFuzz::makeFuzz(2), - ); + $this->params = array ( + "action" => "submit", + "source" => wikiFuzz::chooseInput( array( "upload", "interwiki", wikiFuzz::makeFuzz( 2 ) ) ), + "MAX_FILE_SIZE" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + "xmlimport" => wikiFuzz::chooseInput( array( "/var/www/hosts/mediawiki/wiki/AdminSettings.php", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + "namespace" => wikiFuzz::chooseInput( array( wikiFuzz::randnum( 30, -6 ), wikiFuzz::makeFuzz( 2 ) ) ), + "interwiki" => wikiFuzz::makeFuzz( 2 ), + "interwikiHistory" => wikiFuzz::makeFuzz( 2 ), + "frompage" => wikiFuzz::makeFuzz( 2 ), + ); - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(6) == 0) unset($this->params["action"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["source"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["MAX_FILE_SIZE"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["xmlimport"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["interwiki"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["interwikiHistory"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["frompage"]); + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["action"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["source"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["MAX_FILE_SIZE"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["xmlimport"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["interwiki"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["interwikiHistory"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["frompage"] ); - // Note: Need to do a file upload to fully test this Special page. - } + // Note: Need to do a file upload to fully test this Special page. + } } @@ -1776,20 +1777,20 @@ class specialImport extends pageTest { ** a test for thumb.php */ class thumbTest extends pageTest { - function __construct() { - $this->pagePath = "thumb.php"; + function __construct() { + $this->pagePath = "thumb.php"; - $this->params = array ( - "f" => wikiFuzz::chooseInput( array("..", "\\", "small-email.png", wikifuzz::makeFuzz(2)) ), - "w" => wikiFuzz::chooseInput( array("80", wikiFuzz::randnum(6000,-200), wikifuzz::makeFuzz(2)) ), - "r" => wikiFuzz::chooseInput( array("0", wikifuzz::makeFuzz(2)) ), - ); + $this->params = array ( + "f" => wikiFuzz::chooseInput( array( "..", "\\", "small-email.png", wikiFuzz::makeFuzz( 2 ) ) ), + "w" => wikiFuzz::chooseInput( array( "80", wikiFuzz::randnum( 6000, -200 ), wikiFuzz::makeFuzz( 2 ) ) ), + "r" => wikiFuzz::chooseInput( array( "0", wikiFuzz::makeFuzz( 2 ) ) ), + ); - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(6) == 0) unset($this->params["f"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["w"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["r"]); - } + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["f"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["w"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["r"] ); + } } @@ -1797,24 +1798,24 @@ class thumbTest extends pageTest { ** a test for trackback.php */ class trackbackTest extends pageTest { - function __construct() { - $this->pagePath = "trackback.php"; + function __construct() { + $this->pagePath = "trackback.php"; + + $this->params = array ( + "url" => wikiFuzz::makeFuzz( 2 ), + "blog_name" => wikiFuzz::chooseInput( array( "80", wikiFuzz::randnum( 6000, -200 ), wikiFuzz::makeFuzz( 2 ) ) ), + "article" => wikiFuzz::chooseInput( array( "Main Page", wikiFuzz::makeFuzz( 2 ) ) ), + "title" => wikiFuzz::chooseInput( array( "Main Page", wikiFuzz::makeFuzz( 2 ) ) ), + "excerpt" => wikiFuzz::makeFuzz( 2 ), + ); - $this->params = array ( - "url" => wikifuzz::makeFuzz(2), - "blog_name" => wikiFuzz::chooseInput( array("80", wikiFuzz::randnum(6000,-200), wikifuzz::makeFuzz(2)) ), - "article" => wikiFuzz::chooseInput( array("Main Page", wikifuzz::makeFuzz(2)) ), - "title" => wikiFuzz::chooseInput( array("Main Page", wikifuzz::makeFuzz(2)) ), - "excerpt" => wikifuzz::makeFuzz(2), - ); + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["title"] ); + if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["excerpt"] ); - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(3) == 0) unset($this->params["title"]); - if (wikiFuzz::randnum(3) == 0) unset($this->params["excerpt"]); - - // page does not produce HTML. - $this->tidyValidate = false; - } + // page does not produce HTML. + $this->tidyValidate = false; + } } @@ -1822,19 +1823,19 @@ class trackbackTest extends pageTest { ** a test for profileinfo.php */ class profileInfo extends pageTest { - function __construct() { - $this->pagePath = "profileinfo.php"; + function __construct() { + $this->pagePath = "profileinfo.php"; - $this->params = array ( - "expand" => wikifuzz::makeFuzz(2), - "sort" => wikiFuzz::chooseInput( array("time", "count", "name", wikifuzz::makeFuzz(2)) ), - "filter" => wikiFuzz::chooseInput( array("Main Page", wikifuzz::makeFuzz(2)) ), - ); + $this->params = array ( + "expand" => wikiFuzz::makeFuzz( 2 ), + "sort" => wikiFuzz::chooseInput( array( "time", "count", "name", wikiFuzz::makeFuzz( 2 ) ) ), + "filter" => wikiFuzz::chooseInput( array( "Main Page", wikiFuzz::makeFuzz( 2 ) ) ), + ); - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(3) == 0) unset($this->params["sort"]); - if (wikiFuzz::randnum(3) == 0) unset($this->params["filter"]); - } + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["sort"] ); + if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["filter"] ); + } } @@ -1842,18 +1843,18 @@ class profileInfo extends pageTest { ** a test for Special:Cite (extension Special page). */ class specialCite extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Cite"; + function __construct() { + $this->pagePath = "index.php?title=Special:Cite"; - $this->params = array ( - "page" => wikiFuzz::chooseInput( array("\" onmouseover=\"alert(1);\"", "Main Page", wikifuzz::makeFuzz(2)) ), - "id" => wikiFuzz::chooseInput( array("-1", "0", "------'-------0", "+1", "-9823412312312412435", wikiFuzz::makeFuzz(2)) ), - ); + $this->params = array ( + "page" => wikiFuzz::chooseInput( array( "\" onmouseover=\"alert(1);\"", "Main Page", wikiFuzz::makeFuzz( 2 ) ) ), + "id" => wikiFuzz::chooseInput( array( "-1", "0", "------'-------0", "+1", "-9823412312312412435", wikiFuzz::makeFuzz( 2 ) ) ), + ); - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(6) == 0) unset($this->params["page"]); - if (wikiFuzz::randnum(6) == 0) unset($this->params["id"]); - } + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["page"] ); + if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["id"] ); + } } @@ -1861,13 +1862,13 @@ class specialCite extends pageTest { ** a test for Special:Filepath (extension Special page). */ class specialFilepath extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Filepath"; + function __construct() { + $this->pagePath = "index.php?title=Special:Filepath"; - $this->params = array ( - "file" => wikiFuzz::chooseInput( array("Small-email.png", "Small-email.png" . wikifuzz::makeFuzz(1), wikiFuzz::makeFuzz(2)) ), - ); - } + $this->params = array ( + "file" => wikiFuzz::chooseInput( array( "Small-email.png", "Small-email.png" . wikiFuzz::makeFuzz( 1 ), wikiFuzz::makeFuzz( 2 ) ) ), + ); + } } @@ -1875,22 +1876,22 @@ class specialFilepath extends pageTest { ** a test for Special:Makebot (extension Special page). */ class specialMakebot extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Makebot"; + function __construct() { + $this->pagePath = "index.php?title=Special:Makebot"; - $this->params = array ( - "username" => wikiFuzz::chooseInput( array("Nickj2", "192.168.0.2", wikifuzz::makeFuzz(1) ) ), - "dosearch" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikifuzz::makeFuzz(2)) ), - "grant" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikifuzz::makeFuzz(2)) ), - "comment" => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ), - "token" => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ), - ); + $this->params = array ( + "username" => wikiFuzz::chooseInput( array( "Nickj2", "192.168.0.2", wikiFuzz::makeFuzz( 1 ) ) ), + "dosearch" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + "grant" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + "comment" => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ), + "token" => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ), + ); - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(2) == 0) unset($this->params["dosearch"]); - if (wikiFuzz::randnum(2) == 0) unset($this->params["grant"]); - if (wikiFuzz::randnum(5) == 0) unset($this->params["token"]); - } + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 2 ) == 0 ) unset( $this->params["dosearch"] ); + if ( wikiFuzz::randnum( 2 ) == 0 ) unset( $this->params["grant"] ); + if ( wikiFuzz::randnum( 5 ) == 0 ) unset( $this->params["token"] ); + } } @@ -1898,22 +1899,22 @@ class specialMakebot extends pageTest { ** a test for Special:Makesysop (extension Special page). */ class specialMakesysop extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Makesysop"; + function __construct() { + $this->pagePath = "index.php?title=Special:Makesysop"; - $this->params = array ( - "wpMakesysopUser" => wikiFuzz::chooseInput( array("Nickj2", "192.168.0.2", wikifuzz::makeFuzz(1) ) ), - "action" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikifuzz::makeFuzz(2)) ), - "wpMakesysopSubmit" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikifuzz::makeFuzz(2)) ), - "wpEditToken" => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ), - "wpSetBureaucrat" => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ), - ); + $this->params = array ( + "wpMakesysopUser" => wikiFuzz::chooseInput( array( "Nickj2", "192.168.0.2", wikiFuzz::makeFuzz( 1 ) ) ), + "action" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + "wpMakesysopSubmit" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ), + "wpEditToken" => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ), + "wpSetBureaucrat" => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ), + ); - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(3) == 0) unset($this->params["wpMakesysopSubmit"]); - if (wikiFuzz::randnum(3) == 0) unset($this->params["wpEditToken"]); - if (wikiFuzz::randnum(3) == 0) unset($this->params["wpSetBureaucrat"]); - } + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["wpMakesysopSubmit"] ); + if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["wpEditToken"] ); + if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["wpSetBureaucrat"] ); + } } @@ -1921,15 +1922,15 @@ class specialMakesysop extends pageTest { ** a test for Special:Renameuser (extension Special page). */ class specialRenameuser extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Renameuser"; + function __construct() { + $this->pagePath = "index.php?title=Special:Renameuser"; - $this->params = array ( - "oldusername" => wikiFuzz::chooseInput( array("Nickj2", "192.168.0.2", wikifuzz::makeFuzz(1) ) ), - "newusername" => wikiFuzz::chooseInput( array("Nickj2", "192.168.0.2", wikifuzz::makeFuzz(1) ) ), - "token" => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ), - ); - } + $this->params = array ( + "oldusername" => wikiFuzz::chooseInput( array( "Nickj2", "192.168.0.2", wikiFuzz::makeFuzz( 1 ) ) ), + "newusername" => wikiFuzz::chooseInput( array( "Nickj2", "192.168.0.2", wikiFuzz::makeFuzz( 1 ) ) ), + "token" => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ), + ); + } } @@ -1937,16 +1938,16 @@ class specialRenameuser extends pageTest { ** a test for Special:Linksearch (extension Special page). */ class specialLinksearch extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special%3ALinksearch"; + function __construct() { + $this->pagePath = "index.php?title=Special%3ALinksearch"; - $this->params = array ( - "target" => wikifuzz::makeFuzz(2), - ); + $this->params = array ( + "target" => wikiFuzz::makeFuzz( 2 ), + ); - // sometimes we don't want to specify certain parameters. - if (wikiFuzz::randnum(10) == 0) unset($this->params["target"]); - } + // sometimes we don't want to specify certain parameters. + if ( wikiFuzz::randnum( 10 ) == 0 ) unset( $this->params["target"] ); + } } @@ -1954,20 +1955,20 @@ class specialLinksearch extends pageTest { ** a test for Special:CategoryTree (extension Special page). */ class specialCategoryTree extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:CategoryTree"; + function __construct() { + $this->pagePath = "index.php?title=Special:CategoryTree"; - $this->params = array ( - "target" => wikifuzz::makeFuzz(2), - "from" => wikifuzz::makeFuzz(2), - "until" => wikifuzz::makeFuzz(2), - "showas" => wikifuzz::makeFuzz(2), - "mode" => wikiFuzz::chooseInput( array("pages", "categories", "all", wikifuzz::makeFuzz(2)) ), - ); + $this->params = array ( + "target" => wikiFuzz::makeFuzz( 2 ), + "from" => wikiFuzz::makeFuzz( 2 ), + "until" => wikiFuzz::makeFuzz( 2 ), + "showas" => wikiFuzz::makeFuzz( 2 ), + "mode" => wikiFuzz::chooseInput( array( "pages", "categories", "all", wikiFuzz::makeFuzz( 2 ) ) ), + ); - // sometimes we do want to specify certain parameters. - if (wikiFuzz::randnum(5) == 0) $this->params["notree"] = wikiFuzz::chooseInput( array("1", 0, "", wikiFuzz::makeFuzz(2)) ); - } + // sometimes we do want to specify certain parameters. + if ( wikiFuzz::randnum( 5 ) == 0 ) $this->params["notree"] = wikiFuzz::chooseInput( array( "1", 0, "", wikiFuzz::makeFuzz( 2 ) ) ); + } } @@ -1975,40 +1976,40 @@ class specialCategoryTree extends pageTest { ** a test for "Special:Chemicalsources" (extension Special page). */ class specialChemicalsourcesTest extends pageTest { - function __construct() { - $this->pagePath = "index.php?title=Special:Chemicalsources"; - - // choose an input format to use. - $format = wikiFuzz::chooseInput( - array( 'go', - 'CAS', - 'EINECS', - 'CHEBI', - 'PubChem', - 'SMILES', - 'InChI', - 'ATCCode', - 'KEGG', - 'RTECS', - 'ECNumber', - 'DrugBank', - 'Formula', - 'Name' - ) - ); - - // values for different formats usually start with either letters or numbers. - switch ($format) { - case 'Name' : $value = "A"; break; - case 'InChI' : - case 'SMILES' : - case 'Formula': $value = "C"; break; - default : $value = "0"; break; - } - - // and then we append the fuzz input. - $this->params = array ($format => $value . wikifuzz::makeFuzz(2) ); - } + function __construct() { + $this->pagePath = "index.php?title=Special:Chemicalsources"; + + // choose an input format to use. + $format = wikiFuzz::chooseInput( + array( 'go', + 'CAS', + 'EINECS', + 'CHEBI', + 'PubChem', + 'SMILES', + 'InChI', + 'ATCCode', + 'KEGG', + 'RTECS', + 'ECNumber', + 'DrugBank', + 'Formula', + 'Name' + ) + ); + + // values for different formats usually start with either letters or numbers. + switch ( $format ) { + case 'Name' : $value = "A"; break; + case 'InChI' : + case 'SMILES' : + case 'Formula': $value = "C"; break; + default : $value = "0"; break; + } + + // and then we append the fuzz input. + $this->params = array ( $format => $value . wikiFuzz::makeFuzz( 2 ) ); + } } @@ -2023,143 +2024,143 @@ class specialChemicalsourcesTest extends pageTest { */ class api extends pageTest { - // API login mode. - private static function loginMode() { - $arr = array ( "lgname" => wikifuzz::makeFuzz(2), - "lgpassword" => wikifuzz::makeFuzz(2), - ); - // sometimes we want to specify the extra "lgdomain" parameter. - if (wikiFuzz::randnum(3) == 0) { - $arr["lgdomain"] = wikiFuzz::chooseInput( array("1", 0, "", wikiFuzz::makeFuzz(2)) ); - } - - return $arr; - } - - // API OpenSearch mode. - private static function opensearchMode() { - return array ("search" => wikifuzz::makeFuzz(2)); - } - - // API watchlist feed mode. - private static function feedwatchlistMode() { - // FIXME: add "wikifuzz::makeFuzz(2)" as possible value below? - return array ("feedformat" => wikiFuzz::chooseInput( array("rss", "atom") ) ); - } - - // API query mode. - private static function queryMode() { - // FIXME: add "wikifuzz::makeFuzz(2)" as possible params for the elements below? - // Suspect this will stuff up the tests more, but need to check. - $params = array ( - // FIXME: More titles. - "titles" => wikiFuzz::chooseInput( array("Main Page")), - // FIXME: More pageids. - "pageids" => 1, - "prop" => wikiFuzz::chooseInput( array("info", "revisions", "watchlist")), - "list" => wikiFuzz::chooseInput( array("allpages", "logevents", "watchlist", "usercontribs", "recentchanges", "backlinks", "embeddedin", "imagelinks") ), - "meta" => wikiFuzz::chooseInput( array("siteinfo")), - "generator" => wikiFuzz::chooseInput( array("allpages", "logevents", "watchlist", "info", "revisions") ), - "siprop" => wikiFuzz::chooseInput( array("general", "namespaces", "general|namespaces") ), - ); - - // Add extra parameters based on what list choice we got. - switch ($params["list"]) { - case "usercontribs" : self::addListParams ($params, "uc", array("limit", "start", "end", "user", "dir") ); break; - case "allpages" : self::addListParams ($params, "ap", array("from", "prefix", "namespace", "filterredir", "limit") ); break; - case "watchlist" : self::addListParams ($params, "wl", array("allrev", "start", "end", "namespace", "dir", "limit", "prop") ); break; - case "logevents" : self::addListParams ($params, "le", array("limit", "type", "start", "end", "user", "dir") ); break; - case "recentchanges": self::addListParams ($params, "rc", array("limit", "prop", "show", "namespace", "start", "end", "dir") ); break; - case "backlinks" : self::addListParams ($params, "bl", array("continue", "namespace", "redirect", "limit") ); break; - case "embeddedin" : self::addListParams ($params, "ei", array("continue", "namespace", "redirect", "limit") ); break; - case "imagelinks" : self::addListParams ($params, "il", array("continue", "namespace", "redirect", "limit") ); break; - } - - if ($params["prop"] == "revisions") { - self::addListParams ($params, "rv", array("prop", "limit", "startid", "endid", "end", "dir") ); - } - - // Sometimes we want redirects, sometimes we don't. - if (wikiFuzz::randnum(3) == 0) { - $params["redirects"] = wikiFuzz::chooseInput( array("1", 0, "", wikiFuzz::makeFuzz(2)) ); - } - - return $params; - } - - // Adds all the elements to the array, using the specified prefix. - private static function addListParams(&$array, $prefix, $elements) { - foreach ($elements as $element) { - $array[$prefix . $element] = self::getParamDetails($element); - } - } - - // For a given element name, returns the data for that element. - private static function getParamDetails($element) { - switch ($element) { - case 'startid' : - case 'endid' : - case 'start' : - case 'end' : - case 'limit' : return wikiFuzz::chooseInput( array("0", "-1", "---'----------0", "+1", "8134", "320742734234235", "20060230121212", wikiFuzz::randnum(9000, -100), wikiFuzz::makeFuzz(2)) ); - case 'dir' : return wikiFuzz::chooseInput( array("newer", "older", wikifuzz::makeFuzz(2) ) ); - case 'user' : return wikiFuzz::chooseInput( array(USER_ON_WIKI, wikifuzz::makeFuzz(2) ) ); - case 'namespace' : return wikiFuzz::chooseInput( array(-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 200000, wikifuzz::makeFuzz(2)) ); - case 'filterredir': return wikiFuzz::chooseInput( array("all", "redirects", "nonredirectsallpages", wikifuzz::makeFuzz(2)) ); - case 'allrev' : return wikiFuzz::chooseInput( array("1", 0, "", wikiFuzz::makeFuzz(2)) ); - case 'prop' : return wikiFuzz::chooseInput( array("user", "comment", "timestamp", "patrol", "flags", "user|user|comment|flags", wikifuzz::makeFuzz(2) ) ); - case 'type' : return wikiFuzz::chooseInput( array("block", "protect", "rights", "delete", "upload", "move", "import", "renameuser", "newusers", "makebot", wikifuzz::makeFuzz(2) ) ); - case 'hide' : return wikiFuzz::chooseInput( array("minor", "bots", "anons", "liu", "liu|bots|", wikifuzz::makeFuzz(2) ) ); - case 'show' : return wikiFuzz::chooseInput( array('minor', '!minor', 'bot', '!bot', 'anon', '!anon', wikifuzz::makeFuzz(2) ) ); - default : return wikifuzz::makeFuzz(2); - } - } - - // Entry point. - function __construct() { - $this->pagePath = "api.php"; - - $modes = array ("help", - "login", - "opensearch", - "feedwatchlist", - "query"); - $action = wikiFuzz::chooseInput( array_merge ($modes, array(wikifuzz::makeFuzz(2))) ); - - switch ($action) { - case "login" : $this->params = self::loginMode(); - break; - case "opensearch" : $this->params = self::opensearchMode(); - break; - case "feedwatchlist" : $this->params = self::feedwatchlistMode(); - break; - case "query" : $this->params = self::queryMode(); - break; - case "help" : - default : // Do something random - "Crazy Ivan" mode. - $random_mode = wikiFuzz::chooseInput( $modes ) . "Mode"; - // There is no "helpMode". - if ($random_mode == "helpMode") $random_mode = "queryMode"; - $this->params = self::$random_mode(); - break; - } - - // Save the selected action. - $this->params["action"] = $action; - - // Set the cookie: - // FIXME: need to get this cookie dynamically set, rather than hard-coded. - $this->cookie = "wikidbUserID=10001; wikidbUserName=Test; wikidb_session=178df0fe68c75834643af65dec9ec98a; wikidbToken=1adc6753d62c44aec950c024d7ae0540"; - - // Output format - $this->params["format"] = wikiFuzz::chooseInput( array("json", "jsonfm", "php", "phpfm", - "wddx", "wddxfm", "xml", "xmlfm", - "yaml", "yamlfm", "raw", "rawfm", - wikifuzz::makeFuzz(2) ) ); - - // Page does not produce HTML (sometimes). - $this->tidyValidate = false; - } + // API login mode. + private static function loginMode() { + $arr = array ( "lgname" => wikiFuzz::makeFuzz( 2 ), + "lgpassword" => wikiFuzz::makeFuzz( 2 ), + ); + // sometimes we want to specify the extra "lgdomain" parameter. + if ( wikiFuzz::randnum( 3 ) == 0 ) { + $arr["lgdomain"] = wikiFuzz::chooseInput( array( "1", 0, "", wikiFuzz::makeFuzz( 2 ) ) ); + } + + return $arr; + } + + // API OpenSearch mode. + private static function opensearchMode() { + return array ( "search" => wikiFuzz::makeFuzz( 2 ) ); + } + + // API watchlist feed mode. + private static function feedwatchlistMode() { + // FIXME: add "wikiFuzz::makeFuzz(2)" as possible value below? + return array ( "feedformat" => wikiFuzz::chooseInput( array( "rss", "atom" ) ) ); + } + + // API query mode. + private static function queryMode() { + // FIXME: add "wikiFuzz::makeFuzz(2)" as possible params for the elements below? + // Suspect this will stuff up the tests more, but need to check. + $params = array ( + // FIXME: More titles. + "titles" => wikiFuzz::chooseInput( array( "Main Page" ) ), + // FIXME: More pageids. + "pageids" => 1, + "prop" => wikiFuzz::chooseInput( array( "info", "revisions", "watchlist" ) ), + "list" => wikiFuzz::chooseInput( array( "allpages", "logevents", "watchlist", "usercontribs", "recentchanges", "backlinks", "embeddedin", "imagelinks" ) ), + "meta" => wikiFuzz::chooseInput( array( "siteinfo" ) ), + "generator" => wikiFuzz::chooseInput( array( "allpages", "logevents", "watchlist", "info", "revisions" ) ), + "siprop" => wikiFuzz::chooseInput( array( "general", "namespaces", "general|namespaces" ) ), + ); + + // Add extra parameters based on what list choice we got. + switch ( $params["list"] ) { + case "usercontribs" : self::addListParams ( $params, "uc", array( "limit", "start", "end", "user", "dir" ) ); break; + case "allpages" : self::addListParams ( $params, "ap", array( "from", "prefix", "namespace", "filterredir", "limit" ) ); break; + case "watchlist" : self::addListParams ( $params, "wl", array( "allrev", "start", "end", "namespace", "dir", "limit", "prop" ) ); break; + case "logevents" : self::addListParams ( $params, "le", array( "limit", "type", "start", "end", "user", "dir" ) ); break; + case "recentchanges": self::addListParams ( $params, "rc", array( "limit", "prop", "show", "namespace", "start", "end", "dir" ) ); break; + case "backlinks" : self::addListParams ( $params, "bl", array( "continue", "namespace", "redirect", "limit" ) ); break; + case "embeddedin" : self::addListParams ( $params, "ei", array( "continue", "namespace", "redirect", "limit" ) ); break; + case "imagelinks" : self::addListParams ( $params, "il", array( "continue", "namespace", "redirect", "limit" ) ); break; + } + + if ( $params["prop"] == "revisions" ) { + self::addListParams ( $params, "rv", array( "prop", "limit", "startid", "endid", "end", "dir" ) ); + } + + // Sometimes we want redirects, sometimes we don't. + if ( wikiFuzz::randnum( 3 ) == 0 ) { + $params["redirects"] = wikiFuzz::chooseInput( array( "1", 0, "", wikiFuzz::makeFuzz( 2 ) ) ); + } + + return $params; + } + + // Adds all the elements to the array, using the specified prefix. + private static function addListParams( &$array, $prefix, $elements ) { + foreach ( $elements as $element ) { + $array[$prefix . $element] = self::getParamDetails( $element ); + } + } + + // For a given element name, returns the data for that element. + private static function getParamDetails( $element ) { + switch ( $element ) { + case 'startid' : + case 'endid' : + case 'start' : + case 'end' : + case 'limit' : return wikiFuzz::chooseInput( array( "0", "-1", "---'----------0", "+1", "8134", "320742734234235", "20060230121212", wikiFuzz::randnum( 9000, -100 ), wikiFuzz::makeFuzz( 2 ) ) ); + case 'dir' : return wikiFuzz::chooseInput( array( "newer", "older", wikiFuzz::makeFuzz( 2 ) ) ); + case 'user' : return wikiFuzz::chooseInput( array( USER_ON_WIKI, wikiFuzz::makeFuzz( 2 ) ) ); + case 'namespace' : return wikiFuzz::chooseInput( array( -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 200000, wikiFuzz::makeFuzz( 2 ) ) ); + case 'filterredir': return wikiFuzz::chooseInput( array( "all", "redirects", "nonredirectsallpages", wikiFuzz::makeFuzz( 2 ) ) ); + case 'allrev' : return wikiFuzz::chooseInput( array( "1", 0, "", wikiFuzz::makeFuzz( 2 ) ) ); + case 'prop' : return wikiFuzz::chooseInput( array( "user", "comment", "timestamp", "patrol", "flags", "user|user|comment|flags", wikiFuzz::makeFuzz( 2 ) ) ); + case 'type' : return wikiFuzz::chooseInput( array( "block", "protect", "rights", "delete", "upload", "move", "import", "renameuser", "newusers", "makebot", wikiFuzz::makeFuzz( 2 ) ) ); + case 'hide' : return wikiFuzz::chooseInput( array( "minor", "bots", "anons", "liu", "liu|bots|", wikiFuzz::makeFuzz( 2 ) ) ); + case 'show' : return wikiFuzz::chooseInput( array( 'minor', '!minor', 'bot', '!bot', 'anon', '!anon', wikiFuzz::makeFuzz( 2 ) ) ); + default : return wikiFuzz::makeFuzz( 2 ); + } + } + + // Entry point. + function __construct() { + $this->pagePath = "api.php"; + + $modes = array ( "help", + "login", + "opensearch", + "feedwatchlist", + "query" ); + $action = wikiFuzz::chooseInput( array_merge ( $modes, array( wikiFuzz::makeFuzz( 2 ) ) ) ); + + switch ( $action ) { + case "login" : $this->params = self::loginMode(); + break; + case "opensearch" : $this->params = self::opensearchMode(); + break; + case "feedwatchlist" : $this->params = self::feedwatchlistMode(); + break; + case "query" : $this->params = self::queryMode(); + break; + case "help" : + default : // Do something random - "Crazy Ivan" mode. + $random_mode = wikiFuzz::chooseInput( $modes ) . "Mode"; + // There is no "helpMode". + if ( $random_mode == "helpMode" ) $random_mode = "queryMode"; + $this->params = self::$random_mode(); + break; + } + + // Save the selected action. + $this->params["action"] = $action; + + // Set the cookie: + // FIXME: need to get this cookie dynamically set, rather than hard-coded. + $this->cookie = "wikidbUserID=10001; wikidbUserName=Test; wikidb_session=178df0fe68c75834643af65dec9ec98a; wikidbToken=1adc6753d62c44aec950c024d7ae0540"; + + // Output format + $this->params["format"] = wikiFuzz::chooseInput( array( "json", "jsonfm", "php", "phpfm", + "wddx", "wddxfm", "xml", "xmlfm", + "yaml", "yamlfm", "raw", "rawfm", + wikiFuzz::makeFuzz( 2 ) ) ); + + // Page does not produce HTML (sometimes). + $this->tidyValidate = false; + } } @@ -2167,152 +2168,152 @@ class api extends pageTest { ** a page test for the GeSHi extension. */ class GeSHi_Test extends pageTest { - - private function getGeSHiContent() { - return "getLang() . "\" " - . (wikiFuzz::randnum(2) == 0 ? "line " : "") - . (wikiFuzz::randnum(2) == 0 ? "strict " : "") - . "start=" . wikiFuzz::chooseInput( array(wikiFuzz::randnum(-6000,6000), wikifuzz::makeFuzz(2)) ) - . ">" - . wikiFuzz::makeFuzz(2) - . ""; - } - - private function getLang() { + + private function getGeSHiContent() { + return "getLang() . "\" " + . ( wikiFuzz::randnum( 2 ) == 0 ? "line " : "" ) + . ( wikiFuzz::randnum( 2 ) == 0 ? "strict " : "" ) + . "start=" . wikiFuzz::chooseInput( array( wikiFuzz::randnum( -6000, 6000 ), wikiFuzz::makeFuzz( 2 ) ) ) + . ">" + . wikiFuzz::makeFuzz( 2 ) + . ""; + } + + private function getLang() { return wikiFuzz::chooseInput( array( "actionscript", "ada", "apache", "applescript", "asm", "asp", "autoit", "bash", "blitzbasic", "bnf", "c", "c_mac", "caddcl", "cadlisp", - "cfdg", "cfm", "cpp", "cpp-qt", "csharp", "css", "d", "delphi", "diff", "div", "dos", "eiffel", "fortran", "freebasic", "gml", "groovy", "html4strict", "idl", - "ini", "inno", "io", "java", "java5", "javascript", "latex", "lisp", "lua", "matlab", "mirc", "mpasm", "mysql", "nsis", "objc", "ocaml", "ocaml-brief", "oobas", - "oracle8", "pascal", "perl", "php", "php-brief", "plsql", "python", "qbasic", "rails", "reg", "robots", "ruby", "sas", "scheme", "sdlbasic", "smalltalk", "smarty", - "sql", "tcl", "text", "thinbasic", "tsql", "vb", "vbnet", "vhdl", "visualfoxpro", "winbatch", "xml", "xpp", "z80", wikifuzz::makeFuzz(1) ) ); - } - - function __construct() { - $this->pagePath = "index.php?title=WIKIFUZZ"; - - $this->params = array ( - "action" => "submit", - "wpMinoredit" => "test", - "wpPreview" => "test", - "wpSection" => "test", - "wpEdittime" => "test", - "wpSummary" => "test", - "wpScrolltop" => "test", - "wpStarttime" => "test", - "wpAutoSummary" => "test", - "wpTextbox1" => $this->getGeSHiContent() // the main wiki text, contains fake GeSHi content. - ); - } + "cfdg", "cfm", "cpp", "cpp-qt", "csharp", "css", "d", "delphi", "diff", "div", "dos", "eiffel", "fortran", "freebasic", "gml", "groovy", "html4strict", "idl", + "ini", "inno", "io", "java", "java5", "javascript", "latex", "lisp", "lua", "matlab", "mirc", "mpasm", "mysql", "nsis", "objc", "ocaml", "ocaml-brief", "oobas", + "oracle8", "pascal", "perl", "php", "php-brief", "plsql", "python", "qbasic", "rails", "reg", "robots", "ruby", "sas", "scheme", "sdlbasic", "smalltalk", "smarty", + "sql", "tcl", "text", "thinbasic", "tsql", "vb", "vbnet", "vhdl", "visualfoxpro", "winbatch", "xml", "xpp", "z80", wikiFuzz::makeFuzz( 1 ) ) ); + } + + function __construct() { + $this->pagePath = "index.php?title=WIKIFUZZ"; + + $this->params = array ( + "action" => "submit", + "wpMinoredit" => "test", + "wpPreview" => "test", + "wpSection" => "test", + "wpEdittime" => "test", + "wpSummary" => "test", + "wpScrolltop" => "test", + "wpStarttime" => "test", + "wpAutoSummary" => "test", + "wpTextbox1" => $this->getGeSHiContent() // the main wiki text, contains fake GeSHi content. + ); + } } /** ** selects a page test to run. */ -function selectPageTest($count) { - - // if the user only wants a specific test, then only ever give them that. - if (defined("SPECIFIC_TEST")) { - $testType = SPECIFIC_TEST; - return new $testType (); - } - - // Some of the time we test Special pages, the remaining - // time we test using the standard edit page. - switch ($count % 100) { - case 0 : return new successfulUserLoginTest(); - case 1 : return new listusersTest(); - case 2 : return new searchTest(); - case 3 : return new recentchangesTest(); - case 4 : return new prefixindexTest(); - case 5 : return new mimeSearchTest(); - case 6 : return new specialLogTest(); - case 7 : return new userLoginTest(); - case 8 : return new ipblocklistTest(); - case 9 : return new newImagesTest(); - case 10: return new imagelistTest(); - case 11: return new specialExportTest(); - case 12: return new specialBooksourcesTest(); - case 13: return new specialAllpagesTest(); - case 14: return new pageHistoryTest(); - case 15: return new contributionsTest(); - case 16: return new viewPageTest(); - case 17: return new specialAllmessagesTest(); - case 18: return new specialNewpages(); - case 19: return new searchTest(); - case 20: return new redirectTest(); - case 21: return new confirmEmail(); - case 22: return new watchlistTest(); - case 23: return new specialBlockmeTest(); - case 24: return new specialUndelete(); - case 25: return new specialMovePage(); - case 26: return new specialUnlockdb(); - case 27: return new specialLockdb(); - case 28: return new specialUserrights(); - case 29: return new pageProtectionForm(); - case 30: return new specialBlockip(); - case 31: return new imagepageTest(); - case 32: return new pageDeletion(); - case 33: return new specialRevisionDelete(); - case 34: return new specialImport(); - case 35: return new thumbTest(); - case 36: return new trackbackTest(); - case 37: return new profileInfo(); - case 38: return new specialCite(); - case 39: return new specialFilepath(); - case 40: return new specialMakebot(); - case 41: return new specialMakesysop(); - case 42: return new specialRenameuser(); - case 43: return new specialLinksearch(); - case 44: return new specialCategoryTree(); - case 45: return new api(); - case 45: return new specialChemicalsourcesTest(); - default: return new editPageTest(); - } -} - - -/////////////////////// SAVING OUTPUT ///////////////////////// +function selectPageTest( $count ) { + + // if the user only wants a specific test, then only ever give them that. + if ( defined( "SPECIFIC_TEST" ) ) { + $testType = SPECIFIC_TEST; + return new $testType (); + } + + // Some of the time we test Special pages, the remaining + // time we test using the standard edit page. + switch ( $count % 100 ) { + case 0 : return new successfulUserLoginTest(); + case 1 : return new listusersTest(); + case 2 : return new searchTest(); + case 3 : return new recentchangesTest(); + case 4 : return new prefixindexTest(); + case 5 : return new mimeSearchTest(); + case 6 : return new specialLogTest(); + case 7 : return new userLoginTest(); + case 8 : return new ipblocklistTest(); + case 9 : return new newImagesTest(); + case 10: return new imagelistTest(); + case 11: return new specialExportTest(); + case 12: return new specialBooksourcesTest(); + case 13: return new specialAllpagesTest(); + case 14: return new pageHistoryTest(); + case 15: return new contributionsTest(); + case 16: return new viewPageTest(); + case 17: return new specialAllmessagesTest(); + case 18: return new specialNewpages(); + case 19: return new searchTest(); + case 20: return new redirectTest(); + case 21: return new confirmEmail(); + case 22: return new watchlistTest(); + case 23: return new specialBlockmeTest(); + case 24: return new specialUndelete(); + case 25: return new specialMovePage(); + case 26: return new specialUnlockdb(); + case 27: return new specialLockdb(); + case 28: return new specialUserrights(); + case 29: return new pageProtectionForm(); + case 30: return new specialBlockip(); + case 31: return new imagepageTest(); + case 32: return new pageDeletion(); + case 33: return new specialRevisionDelete(); + case 34: return new specialImport(); + case 35: return new thumbTest(); + case 36: return new trackbackTest(); + case 37: return new profileInfo(); + case 38: return new specialCite(); + case 39: return new specialFilepath(); + case 40: return new specialMakebot(); + case 41: return new specialMakesysop(); + case 42: return new specialRenameuser(); + case 43: return new specialLinksearch(); + case 44: return new specialCategoryTree(); + case 45: return new api(); + case 45: return new specialChemicalsourcesTest(); + default: return new editPageTest(); + } +} + + +// ///////////////////// SAVING OUTPUT ///////////////////////// /** ** Utility function for saving a file. Currently has no error checking. */ -function saveFile($data, $name) { - file_put_contents($name, $data); +function saveFile( $data, $name ) { + file_put_contents( $name, $data ); } /** ** Returns a test as an experimental GET-to-POST URL. - ** This doesn't seem to always work though, and sometimes the output is too long + ** This doesn't seem to always work though, and sometimes the output is too long ** to be a valid GET URL, so we also save in other formats. */ -function getAsURL(pageTest $test) { - $used_question_mark = (strpos($test->getPagePath(), "?") !== false); - $retval = "http://get-to-post.nickj.org/?" . WIKI_BASE_URL . $test->getPagePath(); - foreach ($test->getParams() as $param => $value) { - if (!$used_question_mark) { - $retval .= "?"; - $used_question_mark = true; - } - else { - $retval .= "&"; - } - $retval .= $param . "=" . urlencode($value); - } - return $retval; +function getAsURL( pageTest $test ) { + $used_question_mark = ( strpos( $test->getPagePath(), "?" ) !== false ); + $retval = "http://get-to-post.nickj.org/?" . WIKI_BASE_URL . $test->getPagePath(); + foreach ( $test->getParams() as $param => $value ) { + if ( !$used_question_mark ) { + $retval .= "?"; + $used_question_mark = true; + } + else { + $retval .= "&"; + } + $retval .= $param . "=" . urlencode( $value ); + } + return $retval; } /** ** Saves a plain-text human-readable version of a test. */ -function saveTestAsText(pageTest $test, $filename) { - $str = "Test: " . $test->getPagePath(); - foreach ($test->getParams() as $param => $value) { - $str .= "\n$param: $value"; - } - $str .= "\nGet-to-post URL: " . getAsURL($test) . "\n"; - saveFile($str, $filename); +function saveTestAsText( pageTest $test, $filename ) { + $str = "Test: " . $test->getPagePath(); + foreach ( $test->getParams() as $param => $value ) { + $str .= "\n$param: $value"; + } + $str .= "\nGet-to-post URL: " . getAsURL( $test ) . "\n"; + saveFile( $str, $filename ); } @@ -2320,37 +2321,37 @@ function saveTestAsText(pageTest $test, $filename) { ** Saves a test as a standalone basic PHP script that shows this one problem. ** Resulting script requires PHP-Curl be installed in order to work. */ -function saveTestAsPHP(pageTest $test, $filename) { - $str = "getParams()), true) . ";\n" - . "\$ch = curl_init();\n" - . "curl_setopt(\$ch, CURLOPT_POST, 1);\n" - . "curl_setopt(\$ch, CURLOPT_POSTFIELDS, \$params );\n" - . "curl_setopt(\$ch, CURLOPT_URL, " . var_export(WIKI_BASE_URL . $test->getPagePath(), true) . ");\n" - . "curl_setopt(\$ch, CURLOPT_RETURNTRANSFER,1);\n" - . ($test->getCookie() ? "curl_setopt(\$ch, CURLOPT_COOKIE, " . var_export($test->getCookie(), true) . ");\n" : "") - . "\$result=curl_exec(\$ch);\n" - . "curl_close (\$ch);\n" - . "print \$result;\n" - . "?>\n"; - saveFile($str, $filename); +function saveTestAsPHP( pageTest $test, $filename ) { + $str = "getParams() ), true ) . ";\n" + . "\$ch = curl_init();\n" + . "curl_setopt(\$ch, CURLOPT_POST, 1);\n" + . "curl_setopt(\$ch, CURLOPT_POSTFIELDS, \$params );\n" + . "curl_setopt(\$ch, CURLOPT_URL, " . var_export( WIKI_BASE_URL . $test->getPagePath(), true ) . ");\n" + . "curl_setopt(\$ch, CURLOPT_RETURNTRANSFER,1);\n" + . ( $test->getCookie() ? "curl_setopt(\$ch, CURLOPT_COOKIE, " . var_export( $test->getCookie(), true ) . ");\n" : "" ) + . "\$result=curl_exec(\$ch);\n" + . "curl_close (\$ch);\n" + . "print \$result;\n" + . "?>\n"; + saveFile( $str, $filename ); } /** ** Escapes a value so that it can be used on the command line by Curl. - ** Specifically, "<" and "@" need to be escaped if they are the first character, + ** Specifically, "<" and "@" need to be escaped if they are the first character, ** otherwise curl interprets these as meaning that we want to insert a file. */ -function escapeForCurl(array $input_params) { - $output_params = array(); - foreach ($input_params as $param => $value) { - if (strlen($value) > 0 && ( $value[0] == "@" || $value[0] == "<")) { - $value = "\\" . $value; - } - $output_params[$param] = $value; - } - return $output_params; +function escapeForCurl( array $input_params ) { + $output_params = array(); + foreach ( $input_params as $param => $value ) { + if ( strlen( $value ) > 0 && ( $value[0] == "@" || $value[0] == "<" ) ) { + $value = "\\" . $value; + } + $output_params[$param] = $value; + } + return $output_params; } @@ -2358,124 +2359,124 @@ function escapeForCurl(array $input_params) { ** Saves a test as a standalone CURL shell script that shows this one problem. ** Resulting script requires standalone Curl be installed in order to work. */ -function saveTestAsCurl(pageTest $test, $filename) { - $str = "#!/bin/bash\n" - . "curl --silent --include --globoff \\\n" - . ($test->getCookie() ? " --cookie " . escapeshellarg($test->getCookie()) . " \\\n" : ""); - foreach (escapeForCurl($test->getParams()) as $param => $value) { - $str .= " -F " . escapeshellarg($param) . "=" . escapeshellarg($value) . " \\\n"; - } - $str .= " " . escapeshellarg(WIKI_BASE_URL . $test->getPagePath()); // beginning space matters. - $str .= "\n"; - saveFile($str, $filename); - chmod($filename, 0755); // make executable +function saveTestAsCurl( pageTest $test, $filename ) { + $str = "#!/bin/bash\n" + . "curl --silent --include --globoff \\\n" + . ( $test->getCookie() ? " --cookie " . escapeshellarg( $test->getCookie() ) . " \\\n" : "" ); + foreach ( escapeForCurl( $test->getParams() ) as $param => $value ) { + $str .= " -F " . escapeshellarg( $param ) . "=" . escapeshellarg( $value ) . " \\\n"; + } + $str .= " " . escapeshellarg( WIKI_BASE_URL . $test->getPagePath() ); // beginning space matters. + $str .= "\n"; + saveFile( $str, $filename ); + chmod( $filename, 0755 ); // make executable } /** ** Saves the internal data structure to file. */ -function saveTestData (pageTest $test, $filename) { - saveFile(serialize($test), $filename); +function saveTestData ( pageTest $test, $filename ) { + saveFile( serialize( $test ), $filename ); } /** ** saves a test in the various formats. */ -function saveTest(pageTest $test, $testname) { - $base_name = DIRECTORY . "/" . $testname; - saveTestAsText($test, $base_name . INFO_FILE); - saveTestAsPHP ($test, $base_name . PHP_TEST ); - saveTestAsCurl($test, $base_name . CURL_TEST); - saveTestData ($test, $base_name . DATA_FILE); +function saveTest( pageTest $test, $testname ) { + $base_name = DIRECTORY . "/" . $testname; + saveTestAsText( $test, $base_name . INFO_FILE ); + saveTestAsPHP ( $test, $base_name . PHP_TEST ); + saveTestAsCurl( $test, $base_name . CURL_TEST ); + saveTestData ( $test, $base_name . DATA_FILE ); } -//////////////////// MEDIAWIKI OUTPUT ///////////////////////// +// ////////////////// MEDIAWIKI OUTPUT ///////////////////////// /** ** Asks MediaWiki for the HTML output of a test. */ -function wikiTestOutput(pageTest $test) { +function wikiTestOutput( pageTest $test ) { - $ch = curl_init(); + $ch = curl_init(); - // specify the cookie, if required. - if ($test->getCookie()) curl_setopt($ch, CURLOPT_COOKIE, $test->getCookie()); - curl_setopt($ch, CURLOPT_POST, 1); // save form using a POST + // specify the cookie, if required. + if ( $test->getCookie() ) curl_setopt( $ch, CURLOPT_COOKIE, $test->getCookie() ); + curl_setopt( $ch, CURLOPT_POST, 1 ); // save form using a POST - $params = escapeForCurl($test->getParams()); - curl_setopt($ch, CURLOPT_POSTFIELDS, $params ); // load the POST variables + $params = escapeForCurl( $test->getParams() ); + curl_setopt( $ch, CURLOPT_POSTFIELDS, $params ); // load the POST variables - curl_setopt($ch, CURLOPT_URL, WIKI_BASE_URL . $test->getPagePath() ); // set url to post to - curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable + curl_setopt( $ch, CURLOPT_URL, WIKI_BASE_URL . $test->getPagePath() ); // set url to post to + curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); // return into a variable - $result=curl_exec ($ch); + $result = curl_exec ( $ch ); - // if we encountered an error, then say so, and return an empty string. - if (curl_error($ch)) { - print "\nCurl error #: " . curl_errno($ch) . " - " . curl_error ($ch); - $result = ""; - } + // if we encountered an error, then say so, and return an empty string. + if ( curl_error( $ch ) ) { + print "\nCurl error #: " . curl_errno( $ch ) . " - " . curl_error ( $ch ); + $result = ""; + } - curl_close ($ch); + curl_close ( $ch ); - return $result; + return $result; } -//////////////////// HTML VALIDATION ///////////////////////// +// ////////////////// HTML VALIDATION ///////////////////////// /* ** Asks the validator whether this is valid HTML, or not. */ -function validateHTML($text) { +function validateHTML( $text ) { - $params = array ("fragment" => $text); + $params = array ( "fragment" => $text ); - $ch = curl_init(); + $ch = curl_init(); - curl_setopt($ch, CURLOPT_POST, 1); // save form using a POST - curl_setopt($ch, CURLOPT_POSTFIELDS, $params); // load the POST variables - curl_setopt($ch, CURLOPT_URL, VALIDATOR_URL); // set url to post to - curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable + curl_setopt( $ch, CURLOPT_POST, 1 ); // save form using a POST + curl_setopt( $ch, CURLOPT_POSTFIELDS, $params ); // load the POST variables + curl_setopt( $ch, CURLOPT_URL, VALIDATOR_URL ); // set url to post to + curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); // return into a variable - $result=curl_exec ($ch); + $result = curl_exec ( $ch ); - // if we encountered an error, then log it, and exit. - if (curl_error($ch)) { - trigger_error("Curl error #: " . curl_errno($ch) . " - " . curl_error ($ch) ); - print "Curl error #: " . curl_errno($ch) . " - " . curl_error ($ch) . " - exiting.\n"; - exit(1); - } + // if we encountered an error, then log it, and exit. + if ( curl_error( $ch ) ) { + trigger_error( "Curl error #: " . curl_errno( $ch ) . " - " . curl_error ( $ch ) ); + print "Curl error #: " . curl_errno( $ch ) . " - " . curl_error ( $ch ) . " - exiting.\n"; + exit( 1 ); + } - curl_close ($ch); + curl_close ( $ch ); - $valid = (strpos($result, "Failed validation") === false ? true : false); + $valid = ( strpos( $result, "Failed validation" ) === false ? true : false ); - return array($valid, $result); + return array( $valid, $result ); } /** ** Get tidy to check for no HTML errors in the output file (e.g. unescaped strings). */ -function tidyCheckFile($name) { - $file = DIRECTORY . "/" . $name; - $command = PATH_TO_TIDY . " -output /tmp/out.html -quiet $file 2>&1"; - $x = `$command`; +function tidyCheckFile( $name ) { + $file = DIRECTORY . "/" . $name; + $command = PATH_TO_TIDY . " -output /tmp/out.html -quiet $file 2>&1"; + $x = `$command`; - // Look for the most interesting Tidy errors and warnings. - if ( strpos($x,"end of file while parsing attributes") !== false - || strpos($x,"attribute with missing trailing quote mark") !== false - || strpos($x,"missing '>' for end of tag") !== false - || strpos($x,"Error:") !== false) { - print "\nTidy found something - view details with: $command"; - return false; - } else { - return true; - } + // Look for the most interesting Tidy errors and warnings. + if ( strpos( $x, "end of file while parsing attributes" ) !== false + || strpos( $x, "attribute with missing trailing quote mark" ) !== false + || strpos( $x, "missing '>' for end of tag" ) !== false + || strpos( $x, "Error:" ) !== false ) { + print "\nTidy found something - view details with: $command"; + return false; + } else { + return true; + } } @@ -2484,267 +2485,267 @@ function tidyCheckFile($name) { ** the last time this was run. This is used to tell if a test caused a DB error. */ function dbErrorLogged() { - static $filesize; + static $filesize; - // first time running this function - if (!isset($filesize)) { - // create log if it does not exist - if (!file_exists(DB_ERROR_LOG_FILE)) { - saveFile("", DB_ERROR_LOG_FILE); - } - $filesize = filesize(DB_ERROR_LOG_FILE); - return false; - } + // first time running this function + if ( !isset( $filesize ) ) { + // create log if it does not exist + if ( !file_exists( DB_ERROR_LOG_FILE ) ) { + saveFile( "", DB_ERROR_LOG_FILE ); + } + $filesize = filesize( DB_ERROR_LOG_FILE ); + return false; + } - $newsize = filesize(DB_ERROR_LOG_FILE); - // if the log has grown, then assume the current test caused it. - if ($newsize != $filesize) { - $filesize = $newsize; - return true; - } + $newsize = filesize( DB_ERROR_LOG_FILE ); + // if the log has grown, then assume the current test caused it. + if ( $newsize != $filesize ) { + $filesize = $newsize; + return true; + } - return false; + return false; } -////////////////// TOP-LEVEL PROBLEM-FINDING FUNCTION //////////////////////// +// //////////////// TOP-LEVEL PROBLEM-FINDING FUNCTION //////////////////////// /** ** takes a page test, and runs it and tests it for problems in the output. ** Returns: False on finding a problem, or True on no problems being found. */ -function runWikiTest(pageTest $test, &$testname, $can_overwrite = false) { - - // by default don't overwrite a previous test of the same name. - while ( ! $can_overwrite && file_exists(DIRECTORY . "/" . $testname . DATA_FILE)) { - $testname .= "-" . mt_rand(0,9); - } - - $filename = DIRECTORY . "/" . $testname . DATA_FILE; - - // Store the time before and after, to find slow pages. - $before = microtime(true); - - // Get MediaWiki to give us the output of this test. - $wiki_preview = wikiTestOutput($test); - - $after = microtime(true); - - // if we received no response, then that's interesting. - if ($wiki_preview == "") { - print "\nNo response received for: $filename"; - return false; - } - - // save output HTML to file. - $html_file = DIRECTORY . "/" . $testname . HTML_FILE; - saveFile($wiki_preview, $html_file); - - // if there were PHP errors in the output, then that's interesting too. - if ( strpos($wiki_preview, "Warning: " ) !== false - || strpos($wiki_preview, "Fatal error: " ) !== false - || strpos($wiki_preview, "Notice: " ) !== false - || strpos($wiki_preview, "Error: " ) !== false - || strpos($wiki_preview, "Strict Standards:") !== false - ) { - $error = substr($wiki_preview, strpos($wiki_preview, "
    :") + 7, 50); - // Avoid probable PHP bug with bad session ids; http://bugs.php.net/bug.php?id=38224 - if ($error != "Unknown: The session id contains illegal character") { - print "\nPHP error/warning/notice in HTML output: $html_file ; $error"; - return false; - } - } - - // if there was a MediaWiki Backtrace message in the output, then that's also interesting. - if( strpos($wiki_preview, "Backtrace:") !== false ) { - print "\nInternal MediaWiki error in HTML output: $html_file"; - return false; - } - - // if there was a Parser error comment in the output, then that's potentially interesting. - if( strpos($wiki_preview, "!-- ERR") !== false ) { - print "\nParser Error comment in HTML output: $html_file"; - return false; - } - - // if a database error was logged, then that's definitely interesting. - if( dbErrorLogged() ) { - print "\nDatabase Error logged for: $filename"; - return false; - } - - // validate result - $valid = true; - if( VALIDATE_ON_WEB ) { - list ($valid, $validator_output) = validateHTML($wiki_preview); - if (!$valid) print "\nW3C web validation failed - view details with: html2text " . DIRECTORY . "/" . $testname . ".validator_output.html"; - } - - // Get tidy to check the page, unless we already know it produces non-XHTML output. - if( $test->tidyValidate() ) { - $valid = tidyCheckFile( $testname . HTML_FILE ) && $valid; - } - - // if it took more than 2 seconds to render, then it may be interesting too. (Possible DoS attack?) - if (($after - $before) >= 2) { - print "\nParticularly slow to render (" . round($after - $before, 2) . " seconds): $filename"; - return false; - } - - if( $valid ) { - // Remove temp HTML file if test was valid: - unlink( $html_file ); - } elseif( VALIDATE_ON_WEB ) { - saveFile($validator_output, DIRECTORY . "/" . $testname . ".validator_output.html"); - } - - return $valid; -} - - -/////////////////// RERUNNING OLD TESTS /////////////////// +function runWikiTest( pageTest $test, &$testname, $can_overwrite = false ) { + + // by default don't overwrite a previous test of the same name. + while ( ! $can_overwrite && file_exists( DIRECTORY . "/" . $testname . DATA_FILE ) ) { + $testname .= "-" . mt_rand( 0, 9 ); + } + + $filename = DIRECTORY . "/" . $testname . DATA_FILE; + + // Store the time before and after, to find slow pages. + $before = microtime( true ); + + // Get MediaWiki to give us the output of this test. + $wiki_preview = wikiTestOutput( $test ); + + $after = microtime( true ); + + // if we received no response, then that's interesting. + if ( $wiki_preview == "" ) { + print "\nNo response received for: $filename"; + return false; + } + + // save output HTML to file. + $html_file = DIRECTORY . "/" . $testname . HTML_FILE; + saveFile( $wiki_preview, $html_file ); + + // if there were PHP errors in the output, then that's interesting too. + if ( strpos( $wiki_preview, "Warning: " ) !== false + || strpos( $wiki_preview, "Fatal error: " ) !== false + || strpos( $wiki_preview, "Notice: " ) !== false + || strpos( $wiki_preview, "Error: " ) !== false + || strpos( $wiki_preview, "Strict Standards:" ) !== false + ) { + $error = substr( $wiki_preview, strpos( $wiki_preview, "
    :" ) + 7, 50 ); + // Avoid probable PHP bug with bad session ids; http://bugs.php.net/bug.php?id=38224 + if ( $error != "Unknown: The session id contains illegal character" ) { + print "\nPHP error/warning/notice in HTML output: $html_file ; $error"; + return false; + } + } + + // if there was a MediaWiki Backtrace message in the output, then that's also interesting. + if ( strpos( $wiki_preview, "Backtrace:" ) !== false ) { + print "\nInternal MediaWiki error in HTML output: $html_file"; + return false; + } + + // if there was a Parser error comment in the output, then that's potentially interesting. + if ( strpos( $wiki_preview, "!-- ERR" ) !== false ) { + print "\nParser Error comment in HTML output: $html_file"; + return false; + } + + // if a database error was logged, then that's definitely interesting. + if ( dbErrorLogged() ) { + print "\nDatabase Error logged for: $filename"; + return false; + } + + // validate result + $valid = true; + if ( VALIDATE_ON_WEB ) { + list ( $valid, $validator_output ) = validateHTML( $wiki_preview ); + if ( !$valid ) print "\nW3C web validation failed - view details with: html2text " . DIRECTORY . "/" . $testname . ".validator_output.html"; + } + + // Get tidy to check the page, unless we already know it produces non-XHTML output. + if ( $test->tidyValidate() ) { + $valid = tidyCheckFile( $testname . HTML_FILE ) && $valid; + } + + // if it took more than 2 seconds to render, then it may be interesting too. (Possible DoS attack?) + if ( ( $after - $before ) >= 2 ) { + print "\nParticularly slow to render (" . round( $after - $before, 2 ) . " seconds): $filename"; + return false; + } + + if ( $valid ) { + // Remove temp HTML file if test was valid: + unlink( $html_file ); + } elseif ( VALIDATE_ON_WEB ) { + saveFile( $validator_output, DIRECTORY . "/" . $testname . ".validator_output.html" ); + } + + return $valid; +} + + +// ///////////////// RERUNNING OLD TESTS /////////////////// /** ** We keep our failed tests so that they can be rerun. ** This function does that retesting. */ function rerunPreviousTests() { - print "Retesting previously found problems.\n"; + print "Retesting previously found problems.\n"; - $dir_contents = scandir (DIRECTORY); + $dir_contents = scandir ( DIRECTORY ); - // sort file into the order a normal person would use. - natsort ($dir_contents); + // sort file into the order a normal person would use. + natsort ( $dir_contents ); - foreach ($dir_contents as $file) { + foreach ( $dir_contents as $file ) { - // if file is not a test, then skip it. - // Note we need to escape any periods or will be treated as "any character". - $matches = array(); - if (!ereg("(.*)" . str_replace(".", "\.", DATA_FILE) . "$", $file, $matches)) continue; + // if file is not a test, then skip it. + // Note we need to escape any periods or will be treated as "any character". + $matches = array(); + if ( !preg_match( "/(.*)" . str_replace( ".", "\.", DATA_FILE ) . "$/", $file, $matches ) ) continue; - // reload the test. - $full_path = DIRECTORY . "/" . $file; - $test = unserialize(file_get_contents($full_path)); + // reload the test. + $full_path = DIRECTORY . "/" . $file; + $test = unserialize( file_get_contents( $full_path ) ); - // if this is not a valid test, then skip it. - if (! $test instanceof pageTest) { - print "\nSkipping invalid test - $full_path"; - continue; - } + // if this is not a valid test, then skip it. + if ( ! $test instanceof pageTest ) { + print "\nSkipping invalid test - $full_path"; + continue; + } - // The date format is in Apache log format, which makes it easier to locate - // which retest caused which error in the Apache logs (only happens usually if - // apache segfaults). - if (!QUIET) print "[" . date ("D M d H:i:s Y") . "] Retesting $file (" . get_class($test) . ")"; + // The date format is in Apache log format, which makes it easier to locate + // which retest caused which error in the Apache logs (only happens usually if + // apache segfaults). + if ( !QUIET ) print "[" . date ( "D M d H:i:s Y" ) . "] Retesting $file (" . get_class( $test ) . ")"; - // run test - $testname = $matches[1]; - $valid = runWikiTest($test, $testname, true); + // run test + $testname = $matches[1]; + $valid = runWikiTest( $test, $testname, true ); - if (!$valid) { - saveTest($test, $testname); - if (QUIET) { - print "\nTest: " . get_class($test) . " ; Testname: $testname\n------"; - } else { - print "\n"; - } - } - else { - if (!QUIET) print "\r"; - if (DELETE_PASSED_RETESTS) { - $prefix = DIRECTORY . "/" . $testname; - if (is_file($prefix . DATA_FILE)) unlink($prefix . DATA_FILE); - if (is_file($prefix . PHP_TEST )) unlink($prefix . PHP_TEST ); - if (is_file($prefix . CURL_TEST)) unlink($prefix . CURL_TEST); - if (is_file($prefix . INFO_FILE)) unlink($prefix . INFO_FILE); - } - } - } + if ( !$valid ) { + saveTest( $test, $testname ); + if ( QUIET ) { + print "\nTest: " . get_class( $test ) . " ; Testname: $testname\n------"; + } else { + print "\n"; + } + } + else { + if ( !QUIET ) print "\r"; + if ( DELETE_PASSED_RETESTS ) { + $prefix = DIRECTORY . "/" . $testname; + if ( is_file( $prefix . DATA_FILE ) ) unlink( $prefix . DATA_FILE ); + if ( is_file( $prefix . PHP_TEST ) ) unlink( $prefix . PHP_TEST ); + if ( is_file( $prefix . CURL_TEST ) ) unlink( $prefix . CURL_TEST ); + if ( is_file( $prefix . INFO_FILE ) ) unlink( $prefix . INFO_FILE ); + } + } + } - print "\nDone retesting.\n"; + print "\nDone retesting.\n"; } -////////////////////// MAIN LOOP //////////////////////// +// //////////////////// MAIN LOOP //////////////////////// // first check whether CURL is installed, because sometimes it's not. -if( ! function_exists('curl_init') ) { - die("Could not find 'curl_init' function. Is the curl extension compiled into PHP?\n"); +if ( ! function_exists( 'curl_init' ) ) { + die( "Could not find 'curl_init' function. Is the curl extension compiled into PHP?\n" ); } -// Initialization of types. wikiFuzz doesn't have a constructor because we want to +// Initialization of types. wikiFuzz doesn't have a constructor because we want to // access it staticly and not have any globals. -wikiFuzz::$types = array_keys(wikiFuzz::$data); +wikiFuzz::$types = array_keys( wikiFuzz::$data ); // Make directory if doesn't exist -if (!is_dir(DIRECTORY)) { - mkdir (DIRECTORY, 0700 ); +if ( !is_dir( DIRECTORY ) ) { + mkdir ( DIRECTORY, 0700 ); } // otherwise, we first retest the things that we have found in previous runs -else if (RERUN_OLD_TESTS) { - rerunPreviousTests(); +else if ( RERUN_OLD_TESTS ) { + rerunPreviousTests(); } // main loop. -$start_time = date("U"); +$start_time = date( "U" ); $num_errors = 0; -if (!QUIET) { - print "Beginning main loop. Results are stored in the " . DIRECTORY . " directory.\n"; - print "Press CTRL+C to stop testing.\n"; -} - -for ($count=0; true; $count++) { - if (!QUIET) { - // spinning progress indicator. - switch( $count % 4 ) { - case '0': print "\r/"; break; - case '1': print "\r-"; break; - case '2': print "\r\\"; break; - case '3': print "\r|"; break; - } - print " $count"; - } - - // generate a page test to run. - $test = selectPageTest($count); - - $mins = ( date("U") - $start_time ) / 60; - if (!QUIET && $mins > 0) { - print ". $num_errors poss errors. " - . floor($mins) . " mins. " - . round ($count / $mins, 0) . " tests/min. " - . get_class($test); // includes the current test name. - } - - // run this test against MediaWiki, and see if the output was valid. - $testname = $count; - $valid = runWikiTest($test, $testname, false); - - // save the failed test - if ( ! $valid ) { - if (QUIET) { - print "\nTest: " . get_class($test) . " ; Testname: $testname\n------"; - } else { - print "\n"; - } - saveTest($test, $testname); - $num_errors += 1; - } else if ( KEEP_PASSED_TESTS ) { - // print current time, with microseconds (matches "strace" format), and the test name. - print " " . date("H:i:s.") . substr(current(explode(" ", microtime())), 2) . " " . $testname; - saveTest($test, $testname); - } - - // stop if we have reached max number of errors. - if (defined("MAX_ERRORS") && $num_errors>=MAX_ERRORS) { - break; - } - - // stop if we have reached max number of mins runtime. - if (defined("MAX_RUNTIME") && $mins>=MAX_RUNTIME) { - break; - } +if ( !QUIET ) { + print "Beginning main loop. Results are stored in the " . DIRECTORY . " directory.\n"; + print "Press CTRL+C to stop testing.\n"; +} + +for ( $count = 0; true; $count++ ) { + if ( !QUIET ) { + // spinning progress indicator. + switch( $count % 4 ) { + case '0': print "\r/"; break; + case '1': print "\r-"; break; + case '2': print "\r\\"; break; + case '3': print "\r|"; break; + } + print " $count"; + } + + // generate a page test to run. + $test = selectPageTest( $count ); + + $mins = ( date( "U" ) - $start_time ) / 60; + if ( !QUIET && $mins > 0 ) { + print ". $num_errors poss errors. " + . floor( $mins ) . " mins. " + . round ( $count / $mins, 0 ) . " tests/min. " + . get_class( $test ); // includes the current test name. + } + + // run this test against MediaWiki, and see if the output was valid. + $testname = $count; + $valid = runWikiTest( $test, $testname, false ); + + // save the failed test + if ( ! $valid ) { + if ( QUIET ) { + print "\nTest: " . get_class( $test ) . " ; Testname: $testname\n------"; + } else { + print "\n"; + } + saveTest( $test, $testname ); + $num_errors += 1; + } else if ( KEEP_PASSED_TESTS ) { + // print current time, with microseconds (matches "strace" format), and the test name. + print " " . date( "H:i:s." ) . substr( current( explode( " ", microtime() ) ), 2 ) . " " . $testname; + saveTest( $test, $testname ); + } + + // stop if we have reached max number of errors. + if ( defined( "MAX_ERRORS" ) && $num_errors >= MAX_ERRORS ) { + break; + } + + // stop if we have reached max number of mins runtime. + if ( defined( "MAX_RUNTIME" ) && $mins >= MAX_RUNTIME ) { + break; + } } diff --git a/maintenance/gearman/gearman.inc b/maintenance/gearman/gearman.inc index 514b9bac..15f80e62 100644 --- a/maintenance/gearman/gearman.inc +++ b/maintenance/gearman/gearman.inc @@ -72,7 +72,7 @@ class NonScaryGearmanWorker extends Net_Gearman_Worker { if (isset($resp['data']['arg']) && Net_Gearman_Connection::stringLength($resp['data']['arg'])) { $arg = json_decode($resp['data']['arg'], true); - } + } ### START MW DIFFERENT BIT if ( $name != 'mw_job' ) { diff --git a/maintenance/gearman/gearmanRefreshLinks.php b/maintenance/gearman/gearmanRefreshLinks.php index eb3104eb..730db96b 100644 --- a/maintenance/gearman/gearmanRefreshLinks.php +++ b/maintenance/gearman/gearmanRefreshLinks.php @@ -2,8 +2,8 @@ $optionsWithArgs = array( 'fake-job' ); -require( dirname(__FILE__).'/../commandLine.inc' ); -require( dirname(__FILE__).'/gearman.inc' ); +require( dirname( __FILE__ ) . '/../commandLine.inc' ); +require( dirname( __FILE__ ) . '/gearman.inc' ); if ( !$args ) { $args = array( 'localhost' ); @@ -15,12 +15,12 @@ $dbr = wfGetDB( DB_SLAVE ); $startId = 0; $endId = $dbr->selectField( 'page', 'MAX(page_id)', false, __METHOD__ ); while ( true ) { - $res = $dbr->select( - 'page', + $res = $dbr->select( + 'page', array( 'page_namespace', 'page_title', 'page_id' ), - array( 'page_id > ' . intval( $startId ) ), + array( 'page_id > ' . intval( $startId ) ), __METHOD__, - array( 'LIMIT' => $batchSize ) + array( 'LIMIT' => $batchSize ) ); if ( $res->numRows() == 0 ) { diff --git a/maintenance/gearman/gearmanWorker.php b/maintenance/gearman/gearmanWorker.php index d6f3949f..aea126a7 100644 --- a/maintenance/gearman/gearmanWorker.php +++ b/maintenance/gearman/gearmanWorker.php @@ -1,10 +1,10 @@ and + * Brion Vibber + * * 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 @@ -19,19 +22,13 @@ define( 'GS_TALK', -1 ); * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @ingroup Maintenance - * - * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason - * @copyright Copyright © 2005, Jens Frank - * @copyright Copyright © 2005, Brion Vibber - * * @see http://www.sitemaps.org/ * @see http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd - * - * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class GenerateSitemap extends Maintenance { /** @@ -60,11 +57,11 @@ class GenerateSitemap extends Maintenance { var $fspath; /** - * The path to append to the domain name + * The URL path to prepend to filenames in the index; should resolve to the same directory as $fspath * * @var string */ - var $path; + var $urlpath; /** * Whether or not to use compression @@ -129,8 +126,8 @@ class GenerateSitemap extends Maintenance { public function __construct() { parent::__construct(); $this->mDescription = "Creates a sitemap for the site"; - $this->addOption( 'fspath', 'The file system path to save to, e.g. /tmp/sitemap' . - "\n\t\tdefaults to current directory", false, true ); + $this->addOption( 'fspath', 'The file system path to save to, e.g. /tmp/sitemap; defaults to current directory', false, true ); + $this->addOption( 'urlpath', 'The URL path corresponding to --fspath, prepended to filenames in the index; defaults to an empty string', false, true ); $this->addOption( 'compress', 'Compress the sitemap files, can take value yes|no, default yes', false, true ); } @@ -138,11 +135,14 @@ class GenerateSitemap extends Maintenance { * Execute */ public function execute() { - global $wgScriptPath; $this->setNamespacePriorities(); $this->url_limit = 50000; $this->size_limit = pow( 2, 20 ) * 10; $this->fspath = self::init_path( $this->getOption( 'fspath', getcwd() ) ); + $this->urlpath = $this->getOption( 'urlpath', "" ); + if ( $this->urlpath !== "" && substr( $this->urlpath, -1 ) !== '/' ) { + $this->urlpath .= '/'; + } $this->compress = $this->getOption( 'compress', 'yes' ) !== 'no'; $this->dbr = wfGetDB( DB_SLAVE ); $this->generateNamespaces(); @@ -179,15 +179,15 @@ class GenerateSitemap extends Maintenance { * Create directory if it does not exist and return pathname with a trailing slash */ private static function init_path( $fspath ) { - if( !isset( $fspath ) ) { + if ( !isset( $fspath ) ) { return null; } # Create directory if needed - if( $fspath && !is_dir( $fspath ) ) { - wfMkdirParents( $fspath ) or die("Can not create directory $fspath.\n"); + if ( $fspath && !is_dir( $fspath ) ) { + wfMkdirParents( $fspath ) or die( "Can not create directory $fspath.\n" ); } - return realpath( $fspath ). DIRECTORY_SEPARATOR ; + return realpath( $fspath ) . DIRECTORY_SEPARATOR ; } /** @@ -196,7 +196,7 @@ class GenerateSitemap extends Maintenance { function generateNamespaces() { // Only generate for specific namespaces if $wgSitemapNamespaces is an array. global $wgSitemapNamespaces; - if( is_array( $wgSitemapNamespaces ) ) { + if ( is_array( $wgSitemapNamespaces ) ) { $this->namespaces = $wgSitemapNamespaces; return; } @@ -218,11 +218,9 @@ class GenerateSitemap extends Maintenance { /** * Get the priority of a given namespace * - * @param int $namespace The namespace to get the priority for - + - * @return string + * @param $namespace Integer: the namespace to get the priority for + * @return String */ - function priority( $namespace ) { return isset( $this->priorities[$namespace] ) ? $this->priorities[$namespace] : $this->guessPriority( $namespace ); } @@ -232,9 +230,8 @@ class GenerateSitemap extends Maintenance { * default priority for the namespace, varies depending on whether it's * a talkpage or not. * - * @param int $namespace The namespace to get the priority for - * - * @return string + * @param $namespace Integer: the namespace to get the priority for + * @return String */ function guessPriority( $namespace ) { return MWNamespace::isMain( $namespace ) ? $this->priorities[GS_MAIN] : $this->priorities[GS_TALK]; @@ -243,9 +240,8 @@ class GenerateSitemap extends Maintenance { /** * Return a database resolution of all the pages in a given namespace * - * @param int $namespace Limit the query to this namespace - * - * @return resource + * @param $namespace Integer: limit the query to this namespace + * @return Resource */ function getPageRes( $namespace ) { return $this->dbr->select( 'page', @@ -261,10 +257,8 @@ class GenerateSitemap extends Maintenance { /** * Main loop - * - * @access public */ - function main() { + public function main() { global $wgContLang; fwrite( $this->findex, $this->openIndex() ); @@ -298,11 +292,11 @@ class GenerateSitemap extends Maintenance { $length += strlen( $entry ); $this->write( $this->file, $entry ); // generate pages for language variants - if($wgContLang->hasVariants()){ + if ( $wgContLang->hasVariants() ) { $variants = $wgContLang->getVariants(); - foreach($variants as $vCode){ - if($vCode==$wgContLang->getCode()) continue; // we don't want default variant - $entry = $this->fileEntry( $title->getFullURL('',$vCode), $date, $this->priority( $namespace ) ); + foreach ( $variants as $vCode ) { + if ( $vCode == $wgContLang->getCode() ) continue; // we don't want default variant + $entry = $this->fileEntry( $title->getFullURL( '', $vCode ), $date, $this->priority( $namespace ) ); $length += strlen( $entry ); $this->write( $this->file, $entry ); } @@ -320,7 +314,7 @@ class GenerateSitemap extends Maintenance { /** * gzopen() / fopen() wrapper * - * @return resource + * @return Resource */ function open( $file, $flags ) { return $this->compress ? gzopen( $file, $flags ) : fopen( $file, $flags ); @@ -349,23 +343,18 @@ class GenerateSitemap extends Maintenance { /** * Get a sitemap filename * - * @static - * - * @param int $namespace The namespace - * @param int $count The count - * - * @return string + * @param $namespace Integer: the namespace + * @param $count Integer: the count + * @return String */ function sitemapFilename( $namespace, $count ) { $ext = $this->compress ? '.gz' : ''; - return "sitemap-".wfWikiID()."-NS_$namespace-$count.xml$ext"; + return "sitemap-" . wfWikiID() . "-NS_$namespace-$count.xml$ext"; } /** * Return the XML required to open an XML file * - * @static - * * @return string */ function xmlHead() { @@ -375,9 +364,7 @@ class GenerateSitemap extends Maintenance { /** * Return the XML schema being used * - * @static - * - * @returns string + * @return String */ function xmlSchema() { return 'http://www.sitemaps.org/schemas/sitemap/0.9'; @@ -386,7 +373,7 @@ class GenerateSitemap extends Maintenance { /** * Return the XML required to open a sitemap index file * - * @return string + * @return String */ function openIndex() { return $this->xmlHead() . '' . "\n"; @@ -395,16 +382,13 @@ class GenerateSitemap extends Maintenance { /** * Return the XML for a single sitemap indexfile entry * - * @static - * - * @param string $filename The filename of the sitemap file - * - * @return string + * @param $filename String: the filename of the sitemap file + * @return String */ function indexEntry( $filename ) { return "\t\n" . - "\t\t$filename\n" . + "\t\t{$this->urlpath}$filename\n" . "\t\t{$this->timestamp}\n" . "\t\n"; } @@ -412,9 +396,7 @@ class GenerateSitemap extends Maintenance { /** * Return the XML required to close a sitemap index file * - * @static - * - * @return string + * @return String */ function closeIndex() { return "\n"; @@ -423,7 +405,7 @@ class GenerateSitemap extends Maintenance { /** * Return the XML required to open a sitemap file * - * @return string + * @return String */ function openFile() { return $this->xmlHead() . '' . "\n"; @@ -432,13 +414,10 @@ class GenerateSitemap extends Maintenance { /** * Return the XML for a single sitemap entry * - * @static - * - * @param string $url An RFC 2396 compliant URL - * @param string $date A ISO 8601 date - * @param string $priority A priority indicator, 0.0 - 1.0 inclusive with a 0.1 stepsize - * - * @return string + * @param $url String: an RFC 2396 compliant URL + * @param $date String: a ISO 8601 date + * @param $priority String: a priority indicator, 0.0 - 1.0 inclusive with a 0.1 stepsize + * @return String */ function fileEntry( $url, $date, $priority ) { return @@ -452,8 +431,7 @@ class GenerateSitemap extends Maintenance { /** * Return the XML required to close sitemap file * - * @static - * @return string + * @return String */ function closeFile() { return "\n"; @@ -474,4 +452,4 @@ class GenerateSitemap extends Maintenance { } $maintClass = "GenerateSitemap"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/getLagTimes.php b/maintenance/getLagTimes.php index bc14ae71..0322fa2d 100644 --- a/maintenance/getLagTimes.php +++ b/maintenance/getLagTimes.php @@ -18,7 +18,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class GetLagTimes extends Maintenance { public function __construct() { @@ -29,14 +29,14 @@ class GetLagTimes extends Maintenance { public function execute() { $lb = wfGetLB(); - if( $lb->getServerCount() == 1 ) { + if ( $lb->getServerCount() == 1 ) { $this->error( "This script dumps replication lag times, but you don't seem to have\n" - . "a multi-host db server configuration." ); + . "a multi-host db server configuration." ); } else { $lags = $lb->getLagTimes(); - foreach( $lags as $n => $lag ) { + foreach ( $lags as $n => $lag ) { $host = $lb->getServerName( $n ); - if( IP::isValid( $host ) ) { + if ( IP::isValid( $host ) ) { $ip = $host; $host = gethostbyaddr( $host ); } else { @@ -51,4 +51,4 @@ class GetLagTimes extends Maintenance { } $maintClass = "GetLagTimes"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/getSlaveServer.php b/maintenance/getSlaveServer.php index eac97a59..a9d93f1d 100644 --- a/maintenance/getSlaveServer.php +++ b/maintenance/getSlaveServer.php @@ -19,8 +19,8 @@ * * @ingroup Maintenance */ - -require_once( dirname(__FILE__) . '/Maintenance.php' ); + +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class GetSlaveServer extends Maintenance { public function __construct() { @@ -30,11 +30,11 @@ class GetSlaveServer extends Maintenance { } public function execute() { global $wgAllDBsAreLocalhost; - if( $wgAllDBsAreLocalhost ) { + if ( $wgAllDBsAreLocalhost ) { $host = 'localhost'; } else { - if( $this->hasOption('group') ) { - $db = wfGetDB( DB_SLAVE, $this->getOption('group') ); + if ( $this->hasOption( 'group' ) ) { + $db = wfGetDB( DB_SLAVE, $this->getOption( 'group' ) ); $host = $db->getServer(); } else { $lb = wfGetLB(); @@ -47,4 +47,4 @@ class GetSlaveServer extends Maintenance { } $maintClass = "GetSlaveServer"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/getText.php b/maintenance/getText.php index 6326267d..eb044117 100644 --- a/maintenance/getText.php +++ b/maintenance/getText.php @@ -21,7 +21,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class GetTextMaint extends Maintenance { public function __construct() { @@ -45,7 +45,7 @@ class GetTextMaint extends Maintenance { $titleText = $title->getPrefixedText(); $this->error( "Page $titleText does not exist.\n", true ); } - $text = $rev->getText( $this->hasOption('show-private') ? Revision::RAW : Revision::FOR_PUBLIC ); + $text = $rev->getText( $this->hasOption( 'show-private' ) ? Revision::RAW : Revision::FOR_PUBLIC ); if ( $text === false ) { $titleText = $title->getPrefixedText(); $this->error( "Couldn't extract the text from $titleText.\n", true ); @@ -55,4 +55,4 @@ class GetTextMaint extends Maintenance { } $maintClass = "GetTextMaint"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/httpSessionDownload.php b/maintenance/httpSessionDownload.php index cab6e872..3c4f16a0 100644 --- a/maintenance/httpSessionDownload.php +++ b/maintenance/httpSessionDownload.php @@ -23,7 +23,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class HttpSessionDownload extends Maintenance { public function __construct() { @@ -34,10 +34,10 @@ class HttpSessionDownload extends Maintenance { } public function execute() { - wfProfileIn(__METHOD__); + wfProfileIn( __METHOD__ ); - //run the download: - Http::doSessionIdDownload( $this->getOption('sid'), $this->getOption('usk') ); + // run the download: + Http::doSessionIdDownload( $this->getOption( 'sid' ), $this->getOption( 'usk' ) ); // close up shop: // Execute any deferred updates @@ -49,9 +49,9 @@ class HttpSessionDownload extends Maintenance { // Shut down the database before exit wfGetLBFactory()->shutdown(); - wfProfileOut(__METHOD__); + wfProfileOut( __METHOD__ ); } } $maintClass = "HttpSessionDownload"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/ibm_db2/README b/maintenance/ibm_db2/README deleted file mode 100644 index 3c3f381c..00000000 --- a/maintenance/ibm_db2/README +++ /dev/null @@ -1,3 +0,0 @@ -== See also == -*[http://www.mediawiki.org/wiki/Manual:IBM_DB2 Installation instructions] -*[http://ca.php.net/manual/en/function.db2-connect.php PHP Manual for DB2 functions] \ No newline at end of file diff --git a/maintenance/ibm_db2/foreignkeys.sql b/maintenance/ibm_db2/foreignkeys.sql new file mode 100644 index 00000000..81a88eb9 --- /dev/null +++ b/maintenance/ibm_db2/foreignkeys.sql @@ -0,0 +1,107 @@ +-- good +ALTER TABLE user_groups ADD CONSTRAINT USER_GROUPS_FK1 FOREIGN KEY (ug_user) REFERENCES user(user_id) ON DELETE CASCADE +; + +-- good +ALTER TABLE user_newtalk ADD CONSTRAINT USER_NEWTALK_FK1 FOREIGN KEY (user_id) REFERENCES user(user_id) ON DELETE CASCADE +; + +-- referenced value not found +ALTER TABLE revision ADD CONSTRAINT REVISION_PAGE_FK FOREIGN KEY (rev_page) REFERENCES page(page_id) ON DELETE CASCADE +; +-- referenced value not found +ALTER TABLE revision ADD CONSTRAINT REVISION_USER_FK FOREIGN KEY (rev_user) REFERENCES user(user_id) ON DELETE RESTRICT +; + +-- good +ALTER TABLE page_restrictions ADD CONSTRAINT PAGE_RESTRICTIONS_PAGE_FK FOREIGN KEY (pr_page) REFERENCES page(page_id) ON DELETE CASCADE +; + +-- good +ALTER TABLE page_props ADD CONSTRAINT PAGE_PROPS_PAGE_FK FOREIGN KEY (pp_page) REFERENCES page(page_id) ON DELETE CASCADE +; + +-- cannot contain null values +-- ALTER TABLE archive ADD CONSTRAINT ARCHIVE_USER_FK FOREIGN KEY (ar_user) REFERENCES user(user_id) ON DELETE SET NULL +--; + +-- referenced value not found +ALTER TABLE redirect ADD CONSTRAINT REDIRECT_FROM_FK FOREIGN KEY (rd_from) REFERENCES page(page_id) ON DELETE CASCADE +; + +-- referenced value not found +ALTER TABLE pagelinks ADD CONSTRAINT PAGELINKS_FROM_FK FOREIGN KEY (pl_from) REFERENCES page(page_id) ON DELETE CASCADE +; + +-- good +ALTER TABLE templatelinks ADD CONSTRAINT TEMPLATELINKS_FROM_FK FOREIGN KEY (tl_from) REFERENCES page(page_id) ON DELETE CASCADE +; + +-- good +ALTER TABLE imagelinks ADD CONSTRAINT IMAGELINKS_FROM_FK FOREIGN KEY (il_from) REFERENCES page(page_id) ON DELETE CASCADE +; + +-- good +ALTER TABLE categorylinks ADD CONSTRAINT CATEGORYLINKS_FROM_FK FOREIGN KEY (cl_from) REFERENCES page(page_id) ON DELETE CASCADE +; + +-- good +ALTER TABLE externallinks ADD CONSTRAINT EXTERNALLINKS_FROM_FK FOREIGN KEY (el_from) REFERENCES page(page_id) ON DELETE CASCADE +; + +-- good +ALTER TABLE langlinks ADD CONSTRAINT LANGLINKS_FROM_FK FOREIGN KEY (ll_from) REFERENCES page(page_id) ON DELETE CASCADE +; + +-- cannot contain null values +-- ALTER TABLE ipblocks ADD CONSTRAINT IPBLOCKS_USER_FK FOREIGN KEY (ipb_user) REFERENCES user(user_id) ON DELETE SET NULL +--; + +-- good +ALTER TABLE ipblocks ADD CONSTRAINT IPBLOCKS_BY_FK FOREIGN KEY (ipb_by) REFERENCES user(user_id) ON DELETE CASCADE +; + +-- cannot contain null values +-- ALTER TABLE image ADD CONSTRAINT IMAGE_USER_FK FOREIGN KEY (img_user) REFERENCES user(user_id) ON DELETE SET NULL +--; + +-- cannot contain null values +-- ALTER TABLE oldimage ADD CONSTRAINT OLDIMAGE_USER_FK FOREIGN KEY (oi_user) REFERENCES user(user_id) ON DELETE SET NULL +--; + +-- good +ALTER TABLE oldimage ADD CONSTRAINT OLDIMAGE_NAME_FK FOREIGN KEY (oi_name) REFERENCES image(img_name) ON DELETE CASCADE +; + +-- cannot contain null values +-- ALTER TABLE filearchive ADD CONSTRAINT FILEARCHIVE_DELETED_USER_FK FOREIGN KEY (fa_deleted_user) REFERENCES user(user_id) ON DELETE SET NULL +--; + +-- cannot contain null values +-- ALTER TABLE filearchive ADD CONSTRAINT FILEARCHIVE_USER_FK FOREIGN KEY (fa_user) REFERENCES user(user_id) ON DELETE SET NULL +--; + +-- cannot contain null values +-- ALTER TABLE recentchanges ADD CONSTRAINT RECENTCHANGES_USER_FK FOREIGN KEY (rc_user) REFERENCES user(user_id) ON DELETE SET NULL +--; + +-- cannot contain null values +-- ALTER TABLE recentchanges ADD CONSTRAINT RECENTCHANGES_CUR_ID_FK FOREIGN KEY (rc_cur_id) REFERENCES page(page_id) ON DELETE SET NULL +--; + +-- good +ALTER TABLE watchlist ADD CONSTRAINT WATCHLIST_USER_FK FOREIGN KEY (wl_user) REFERENCES user(user_id) ON DELETE CASCADE +; + +-- good +-- already in MySQL schema +ALTER TABLE trackbacks ADD CONSTRAINT TRACKBACKS_PAGE_FK FOREIGN KEY (tb_page) REFERENCES page(page_id) ON DELETE CASCADE +; + +-- cannot contain null values +-- ALTER TABLE protected_titles ADD CONSTRAINT PROTECTED_TITLES_USER_FK FOREIGN KEY (pt_user) REFERENCES user(user_id) ON DELETE SET NULL +--; + +-- cannot contain null values +-- ALTER TABLE logging ADD CONSTRAINT LOGGING_USER_FK FOREIGN KEY (log_user) REFERENCES user(user_id) ON DELETE SET NULL +--; \ No newline at end of file diff --git a/maintenance/ibm_db2/tables.sql b/maintenance/ibm_db2/tables.sql index 71c161c6..546c871d 100644 --- a/maintenance/ibm_db2/tables.sql +++ b/maintenance/ibm_db2/tables.sql @@ -8,6 +8,7 @@ CREATE TABLE user ( + -- Needs to start with 0 user_id BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 0), user_name VARCHAR(255) NOT NULL UNIQUE, user_real_name VARCHAR(255), @@ -47,11 +48,7 @@ CREATE TABLE user_groups ( -- REFERENCES user(user_id) ON DELETE CASCADE, ug_group VARCHAR(255) NOT NULL ); -CREATE UNIQUE INDEX user_groups_unique ON user_groups (ug_user, ug_group); ---leonsp: -CREATE UNIQUE INDEX user_groups_include_idx - ON user_groups(ug_user) - INCLUDE (ug_group); +CREATE INDEX user_groups_unique ON user_groups (ug_user, ug_group); CREATE TABLE user_newtalk ( @@ -71,7 +68,7 @@ CREATE UNIQUE INDEX user_newtalk_include_idx CREATE TABLE page ( - page_id BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 0), + page_id BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1), page_namespace SMALLINT NOT NULL, page_title VARCHAR(255) NOT NULL, page_restrictions VARCHAR(1024), @@ -96,7 +93,7 @@ CREATE UNIQUE INDEX page_name_include CREATE TABLE revision ( - rev_id BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 0), + rev_id BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1), rev_page BIGINT NOT NULL DEFAULT 0, -- REFERENCES page (page_id) ON DELETE CASCADE, rev_text_id BIGINT, -- FK @@ -119,9 +116,7 @@ CREATE INDEX rev_user_text_idx ON revision (rev_user_text); CREATE TABLE text ( -- replaces reserved word 'text' - --old_id INTEGER NOT NULL, - old_id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 0), - --PRIMARY KEY DEFAULT nextval('text_old_id_val'), + old_id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1), old_text CLOB(16M) INLINE LENGTH 4096, old_flags VARCHAR(1024) ); @@ -129,8 +124,8 @@ CREATE TABLE text ( -- replaces reserved word 'text' CREATE TABLE page_restrictions ( --pr_id INTEGER NOT NULL UNIQUE, --DEFAULT nextval('pr_id_val'), - --pr_id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 0), - pr_id BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 0), + --pr_id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1), + pr_id BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1), pr_page INTEGER NOT NULL DEFAULT 0, --(used to be nullable) -- REFERENCES page (page_id) ON DELETE CASCADE, @@ -184,7 +179,7 @@ CREATE INDEX archive_user_text ON archive (ar_user_text); CREATE TABLE redirect ( - rd_from BIGINT NOT NULL PRIMARY KEY, + rd_from BIGINT NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1), --REFERENCES page(page_id) ON DELETE CASCADE, rd_namespace SMALLINT NOT NULL DEFAULT 0, rd_title VARCHAR(255) NOT NULL DEFAULT '', @@ -248,7 +243,7 @@ CREATE INDEX externallinks_index ON externallinks (el_index); -- CREATE TABLE external_user ( -- Foreign key to user_id - eu_local_id BIGINT NOT NULL PRIMARY KEY, + eu_local_id BIGINT NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1), -- Some opaque identifier provided by the external database eu_external_id VARCHAR(255) NOT NULL @@ -289,7 +284,7 @@ CREATE TABLE hitcounter ( ); CREATE TABLE ipblocks ( - ipb_id INTEGER NOT NULL PRIMARY KEY, + ipb_id INTEGER NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1), --DEFAULT nextval('ipblocks_ipb_id_val'), ipb_address VARCHAR(1024), ipb_user BIGINT NOT NULL DEFAULT 0, @@ -358,7 +353,6 @@ CREATE TABLE oldimage ( oi_sha1 VARCHAR(255) NOT NULL DEFAULT '' --FOREIGN KEY (oi_name) REFERENCES image(img_name) ON DELETE CASCADE ); ---ALTER TABLE oldimage ADD CONSTRAINT oldimage_oi_name_fkey_cascade FOREIGN KEY (oi_name) REFERENCES image(img_name) ON DELETE CASCADE; CREATE INDEX oi_name_timestamp ON oldimage (oi_name,oi_timestamp); CREATE INDEX oi_name_archive_name ON oldimage (oi_name,oi_archive_name); CREATE INDEX oi_sha1 ON oldimage (oi_sha1); @@ -366,7 +360,7 @@ CREATE INDEX oi_sha1 ON oldimage (oi_sha1); CREATE TABLE filearchive ( - fa_id INTEGER NOT NULL PRIMARY KEY, + fa_id INTEGER NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1), --PRIMARY KEY DEFAULT nextval('filearchive_fa_id_seq'), fa_name VARCHAR(255) NOT NULL, fa_archive_name VARCHAR(255), @@ -398,7 +392,7 @@ CREATE INDEX fa_nouser ON filearchive (fa_deleted_user); CREATE TABLE recentchanges ( - rc_id INTEGER NOT NULL PRIMARY KEY, + rc_id INTEGER NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1), --PRIMARY KEY DEFAULT nextval('rc_rc_id_seq'), rc_timestamp TIMESTAMP(3) NOT NULL, rc_cur_time TIMESTAMP(3) NOT NULL, @@ -509,7 +503,7 @@ CREATE TABLE transcache ( CREATE TABLE logging ( - log_id BIGINT NOT NULL PRIMARY KEY, + log_id BIGINT NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1), --PRIMARY KEY DEFAULT nextval('log_log_id_seq'), log_type VARCHAR(32) NOT NULL, log_action VARCHAR(32) NOT NULL, @@ -534,10 +528,11 @@ CREATE INDEX log_page_id_time ON logging (log_page,log_timestamp); CREATE TABLE trackbacks ( - tb_id INTEGER NOT NULL PRIMARY KEY, + tb_id INTEGER NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1), --PRIMARY KEY DEFAULT nextval('trackbacks_tb_id_seq'), -- foreign key also in MySQL - tb_page INTEGER REFERENCES page(page_id) ON DELETE CASCADE, + tb_page INTEGER, + -- REFERENCES page(page_id) ON DELETE CASCADE, tb_title VARCHAR(255) NOT NULL, tb_url CLOB(64K) INLINE LENGTH 4096 NOT NULL, tb_ex CLOB(64K) INLINE LENGTH 4096, @@ -548,7 +543,7 @@ CREATE INDEX trackback_page ON trackbacks (tb_page); CREATE TABLE job ( - job_id BIGINT NOT NULL PRIMARY KEY, + job_id BIGINT NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1), --PRIMARY KEY DEFAULT nextval('job_job_id_seq'), job_cmd VARCHAR(255) NOT NULL, job_namespace SMALLINT NOT NULL, @@ -558,47 +553,6 @@ CREATE TABLE job ( CREATE INDEX job_cmd_namespace_title ON job (job_cmd, job_namespace, job_title); - --- Postgres' Tsearch2 dropped ---ALTER TABLE page ADD titlevector tsvector; ---CREATE FUNCTION ts2_page_title() RETURNS TRIGGER LANGUAGE plpgsql AS ---$mw$ ---BEGIN ---IF TG_OP = 'INSERT' THEN --- NEW.titlevector = to_tsvector('default',REPLACE(NEW.page_title,'/',' ')); ---ELSIF NEW.page_title != OLD.page_title THEN --- NEW.titlevector := to_tsvector('default',REPLACE(NEW.page_title,'/',' ')); ---END IF; ---RETURN NEW; ---END; ---$mw$; - ---CREATE TRIGGER ts2_page_title BEFORE INSERT OR UPDATE ON page --- FOR EACH ROW EXECUTE PROCEDURE ts2_page_title(); - - ---ALTER TABLE text ADD textvector tsvector; ---CREATE FUNCTION ts2_page_text() RETURNS TRIGGER LANGUAGE plpgsql AS ---$mw$ ---BEGIN ---IF TG_OP = 'INSERT' THEN --- NEW.textvector = to_tsvector('default',NEW.old_text); ---ELSIF NEW.old_text != OLD.old_text THEN --- NEW.textvector := to_tsvector('default',NEW.old_text); ---END IF; ---RETURN NEW; ---END; ---$mw$; - ---CREATE TRIGGER ts2_page_text BEFORE INSERT OR UPDATE ON text --- FOR EACH ROW EXECUTE PROCEDURE ts2_page_text(); - --- These are added by the setup script due to version compatibility issues --- If using 8.1, we switch from "gin" to "gist" - ---CREATE INDEX ts2_page_title ON page USING gin(titlevector); ---CREATE INDEX ts2_page_text ON text USING gin(textvector); - --TODO --CREATE FUNCTION add_interwiki (TEXT,INT,SMALLINT) RETURNS INT LANGUAGE SQL AS --$mw$ @@ -644,7 +598,7 @@ CREATE TABLE updatelog ( CREATE TABLE category ( - cat_id INTEGER NOT NULL PRIMARY KEY, + cat_id INTEGER NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1), --PRIMARY KEY DEFAULT nextval('category_id_seq'), cat_title VARCHAR(255) NOT NULL, cat_pages INTEGER NOT NULL DEFAULT 0, @@ -721,27 +675,6 @@ CREATE TABLE log_search ( CREATE UNIQUE INDEX ls_field_val ON log_search (ls_field,ls_value,ls_log_id); CREATE INDEX ls_log_id ON log_search (ls_log_id); -CREATE TABLE mediawiki_version ( - type VARCHAR(1024) NOT NULL, - mw_version VARCHAR(1024) NOT NULL, - notes VARCHAR(1024) , - - pg_version VARCHAR(1024) , - pg_dbname VARCHAR(1024) , - pg_user VARCHAR(1024) , - pg_port VARCHAR(1024) , - mw_schema VARCHAR(1024) , - ts2_schema VARCHAR(1024) , - ctype VARCHAR(1024) , - - sql_version VARCHAR(1024) , - sql_date VARCHAR(1024) , - cdate TIMESTAMP(3) NOT NULL DEFAULT CURRENT TIMESTAMP -); - -INSERT INTO mediawiki_version (type,mw_version,sql_version,sql_date) - VALUES ('Creation','??','$LastChangedRevision: 34049 $','$LastChangedDate: 2008-04-30 10:20:36 -0400 (Wed, 30 Apr 2008) $'); - -- Table for storing localisation data CREATE TABLE l10n_cache ( -- Language code diff --git a/maintenance/importDump.php b/maintenance/importDump.php index 714d76d8..5f47635e 100644 --- a/maintenance/importDump.php +++ b/maintenance/importDump.php @@ -24,7 +24,7 @@ $optionsWithArgs = array( 'report' ); -require_once( dirname(__FILE__) . '/commandLine.inc' ); +require_once( dirname( __FILE__ ) . '/commandLine.inc' ); /** * @ingroup Maintenance @@ -38,7 +38,7 @@ class BackupReader { var $debug = false; var $uploads = false; - function BackupReader() { + function __construct() { $this->stderr = fopen( "php://stderr", "wt" ); } @@ -48,7 +48,7 @@ class BackupReader { function handleRevision( $rev ) { $title = $rev->getTitle(); - if( !$title ) { + if ( !$title ) { $this->progress( "Got bogus revision with null title!" ); return; } @@ -56,20 +56,20 @@ class BackupReader { $this->revCount++; $this->report(); - if( !$this->dryRun ) { + if ( !$this->dryRun ) { call_user_func( $this->importCallback, $rev ); } } - + function handleUpload( $revision ) { - if( $this->uploads ) { + if ( $this->uploads ) { $this->uploadCount++; - //$this->report(); + // $this->report(); $this->progress( "upload: " . $revision->getFilename() ); - - if( !$this->dryRun ) { + + if ( !$this->dryRun ) { // bluuuh hack - //call_user_func( $this->uploadCallback, $revision ); + // call_user_func( $this->uploadCallback, $revision ); $dbw = wfGetDB( DB_MASTER ); return $dbw->deadlockLoop( array( $revision, 'importUpload' ) ); } @@ -80,34 +80,34 @@ class BackupReader { $this->revCount++; $this->report(); - if( !$this->dryRun ) { + if ( !$this->dryRun ) { call_user_func( $this->logItemCallback, $rev ); } } function report( $final = false ) { - if( $final xor ( $this->pageCount % $this->reportingInterval == 0 ) ) { + if ( $final xor ( $this->pageCount % $this->reportingInterval == 0 ) ) { $this->showReport(); } } function showReport() { - if( $this->reporting ) { + if ( $this->reporting ) { $delta = wfTime() - $this->startTime; - if( $delta ) { - $rate = sprintf("%.2f", $this->pageCount / $delta); - $revrate = sprintf("%.2f", $this->revCount / $delta); + if ( $delta ) { + $rate = sprintf( "%.2f", $this->pageCount / $delta ); + $revrate = sprintf( "%.2f", $this->revCount / $delta ); } else { $rate = '-'; $revrate = '-'; } # Logs dumps don't have page tallies - if( $this->pageCount ) + if ( $this->pageCount ) $this->progress( "$this->pageCount ($rate pages/sec $revrate revs/sec)" ); else $this->progress( "$this->revCount ($revrate revs/sec)" ); } - wfWaitForSlaves(5); + wfWaitForSlaves( 5 ); } function progress( $string ) { @@ -115,19 +115,17 @@ class BackupReader { } function importFromFile( $filename ) { - $t = true; - if( preg_match( '/\.gz$/', $filename ) ) { + if ( preg_match( '/\.gz$/', $filename ) ) { $filename = 'compress.zlib://' . $filename; } - elseif( preg_match( '/\.bz2$/', $filename ) ) { + elseif ( preg_match( '/\.bz2$/', $filename ) ) { $filename = 'compress.bzip2://' . $filename; } - elseif( preg_match( '/\.7z$/', $filename ) ) { + elseif ( preg_match( '/\.7z$/', $filename ) ) { $filename = 'mediawiki.compress.7z://' . $filename; - $t = false; } - $file = fopen( $filename, $t ? 'rt' : 't' ); //our 7zip wrapper uses popen, which seems not to like two-letter modes + $file = fopen( $filename, 'rt' ); return $this->importFromHandle( $file ); } @@ -151,43 +149,41 @@ class BackupReader { $this->logItemCallback = $importer->setLogItemCallback( array( &$this, 'handleLogItem' ) ); + if ( $this->dryRun ) { + $importer->setPageOutCallback( null ); + } + return $importer->doImport(); } } -if( wfReadOnly() ) { +if ( wfReadOnly() ) { wfDie( "Wiki is in read-only mode; you'll need to disable it for import to work.\n" ); } $reader = new BackupReader(); -if( isset( $options['quiet'] ) ) { +if ( isset( $options['quiet'] ) ) { $reader->reporting = false; } -if( isset( $options['report'] ) ) { +if ( isset( $options['report'] ) ) { $reader->reportingInterval = intval( $options['report'] ); } -if( isset( $options['dry-run'] ) ) { +if ( isset( $options['dry-run'] ) ) { $reader->dryRun = true; } -if( isset( $options['debug'] ) ) { +if ( isset( $options['debug'] ) ) { $reader->debug = true; } -if( isset( $options['uploads'] ) ) { +if ( isset( $options['uploads'] ) ) { $reader->uploads = true; // experimental! } -if( isset( $args[0] ) ) { +if ( isset( $args[0] ) ) { $result = $reader->importFromFile( $args[0] ); } else { $result = $reader->importFromStdin(); } -if( WikiError::isError( $result ) ) { - echo $result->getMessage() . "\n"; -} else { - echo "Done!\n"; - echo "You might want to run rebuildrecentchanges.php to regenerate\n"; - echo "the recentchanges page.\n"; -} - - +echo "Done!\n"; +echo "You might want to run rebuildrecentchanges.php to regenerate\n"; +echo "the recentchanges page.\n"; diff --git a/maintenance/importImages.inc b/maintenance/importImages.inc index 7bb50eb8..ad88b07c 100644 --- a/maintenance/importImages.inc +++ b/maintenance/importImages.inc @@ -17,13 +17,14 @@ * @return mixed Array of filenames on success, or false on failure */ function findFiles( $dir, $exts ) { - if( is_dir( $dir ) ) { - if( $dhl = opendir( $dir ) ) { + if ( is_dir( $dir ) ) { + $dhl = opendir( $dir ); + if ( $dhl ) { $files = array(); - while( ( $file = readdir( $dhl ) ) !== false ) { - if( is_file( $dir . '/' . $file ) ) { + while ( ( $file = readdir( $dhl ) ) !== false ) { + if ( is_file( $dir . '/' . $file ) ) { list( /* $name */, $ext ) = splitFilename( $dir . '/' . $file ); - if( array_search( strtolower( $ext ), $exts ) !== false ) + if ( array_search( strtolower( $ext ), $exts ) !== false ) $files[] = $dir . '/' . $file; } } @@ -51,10 +52,10 @@ function splitFilename( $filename ) { } /** - * Find an auxilliary file with the given extension, matching - * the give base file path. $maxStrip determines how many extensions + * Find an auxilliary file with the given extension, matching + * the give base file path. $maxStrip determines how many extensions * may be stripped from the original file name before appending the - * new extension. For example, with $maxStrip = 1 (the default), + * new extension. For example, with $maxStrip = 1 (the default), * file files acme.foo.bar.txt and acme.foo.txt would be auxilliary * files for acme.foo.bar and the extension ".txt". With $maxStrip = 2, * acme.txt would also be acceptable. @@ -90,23 +91,23 @@ function findAuxFile( $file, $auxExtension, $maxStrip = 1 ) { } # FIXME: Access the api in a saner way and performing just one query (preferably batching files too). -function getFileCommentFromSourceWiki($wiki_host, $file) { - $url = $wiki_host . '/api.php?action=query&format=xml&titles=File:' . rawurlencode( $file ) . '&prop=imageinfo&&iiprop=comment'; - $body = Http::get($url); - if (preg_match('##', $body, $matches) == 0) { - return false; - } +function getFileCommentFromSourceWiki( $wiki_host, $file ) { + $url = $wiki_host . '/api.php?action=query&format=xml&titles=File:' . rawurlencode( $file ) . '&prop=imageinfo&&iiprop=comment'; + $body = Http::get( $url ); + if ( preg_match( '##', $body, $matches ) == 0 ) { + return false; + } - return html_entity_decode( $matches[1] ); + return html_entity_decode( $matches[1] ); } -function getFileUserFromSourceWiki($wiki_host, $file) { - $url = $wiki_host . '/api.php?action=query&format=xml&titles=File:' . rawurlencode( $file ) . '&prop=imageinfo&&iiprop=user'; - $body = Http::get($url); - if (preg_match('##', $body, $matches) == 0) { - return false; - } +function getFileUserFromSourceWiki( $wiki_host, $file ) { + $url = $wiki_host . '/api.php?action=query&format=xml&titles=File:' . rawurlencode( $file ) . '&prop=imageinfo&&iiprop=user'; + $body = Http::get( $url ); + if ( preg_match( '##', $body, $matches ) == 0 ) { + return false; + } - return html_entity_decode( $matches[1] ); + return html_entity_decode( $matches[1] ); } diff --git a/maintenance/importImages.php b/maintenance/importImages.php index f0dd388a..befbe64d 100644 --- a/maintenance/importImages.php +++ b/maintenance/importImages.php @@ -18,23 +18,23 @@ */ $optionsWithArgs = array( 'extensions', 'comment', 'comment-file', 'comment-ext', 'user', 'license', 'sleep', 'limit', 'from', 'source-wiki-url' ); -require_once( dirname(__FILE__) . '/commandLine.inc' ); -require_once( dirname(__FILE__) . '/importImages.inc' ); +require_once( dirname( __FILE__ ) . '/commandLine.inc' ); +require_once( dirname( __FILE__ ) . '/importImages.inc' ); $processed = $added = $ignored = $skipped = $overwritten = $failed = 0; echo( "Import Images\n\n" ); # Need a path -if( count( $args ) > 0 ) { +if ( count( $args ) > 0 ) { $dir = $args[0]; # Check Protection - if (isset($options['protect']) && isset($options['unprotect'])) - die("Cannot specify both protect and unprotect. Only 1 is allowed.\n"); + if ( isset( $options['protect'] ) && isset( $options['unprotect'] ) ) + die( "Cannot specify both protect and unprotect. Only 1 is allowed.\n" ); -if (isset($options['protect']) && $options['protect'] == 1) - die("You must specify a protection option.\n"); + if ( isset( $options['protect'] ) && $options['protect'] == 1 ) + die( "You must specify a protection option.\n" ); # Prepare the list of allowed extensions global $wgFileExtensions; @@ -49,31 +49,31 @@ if (isset($options['protect']) && $options['protect'] == 1) $user = isset( $options['user'] ) ? User::newFromName( $options['user'] ) : User::newFromName( 'Maintenance script' ); - if( !$user instanceof User ) + if ( !$user instanceof User ) $user = User::newFromName( 'Maintenance script' ); $wgUser = $user; # Get block check. If a value is given, this specified how often the check is performed if ( isset( $options['check-userblock'] ) ) { if ( !$options['check-userblock'] ) $checkUserBlock = 1; - else $checkUserBlock = (int)$options['check-userblock']; + else $checkUserBlock = (int)$options['check-userblock']; } else { $checkUserBlock = false; } - # Get --from + # Get --from $from = @$options['from']; - # Get sleep time. + # Get sleep time. $sleep = @$options['sleep']; - if ( $sleep ) $sleep = (int)$sleep; + if ( $sleep ) $sleep = (int)$sleep; # Get limit number $limit = @$options['limit']; - if ( $limit ) $limit = (int)$limit; + if ( $limit ) $limit = (int)$limit; - # Get the upload comment - $comment = NULL; + # Get the upload comment. Provide a default one in case there's no comment given. + $comment = 'Importing image file'; if ( isset( $options['comment-file'] ) ) { $comment = file_get_contents( $options['comment-file'] ); @@ -91,18 +91,18 @@ if (isset($options['protect']) && $options['protect'] == 1) $license = isset( $options['license'] ) ? $options['license'] : ''; # Batch "upload" operation - if( ( $count = count( $files ) ) > 0 ) { - - foreach( $files as $file ) { + if ( ( $count = count( $files ) ) > 0 ) { + + foreach ( $files as $file ) { $base = wfBaseName( $file ); - + # Validate a title $title = Title::makeTitleSafe( NS_FILE, $base ); - if( !is_object( $title ) ) { + if ( !is_object( $title ) ) { echo( "{$base} could not be imported; a valid title cannot be produced\n" ); continue; } - + if ( $from ) { if ( $from == $title->getDBkey() ) { $from = NULL; @@ -113,7 +113,7 @@ if (isset($options['protect']) && $options['protect'] == 1) } if ( $checkUserBlock && ( ( $processed % $checkUserBlock ) == 0 ) ) { - $user->clearInstanceCache( 'name' ); //reload from DB! + $user->clearInstanceCache( 'name' ); // reload from DB! if ( $user->isBlocked() ) { echo( $user->getName() . " was blocked! Aborting.\n" ); break; @@ -122,8 +122,8 @@ if (isset($options['protect']) && $options['protect'] == 1) # Check existence $image = wfLocalFile( $title ); - if( $image->exists() ) { - if( isset( $options['overwrite'] ) ) { + if ( $image->exists() ) { + if ( isset( $options['overwrite'] ) ) { echo( "{$base} exists, overwriting..." ); $svar = 'overwritten'; } else { @@ -134,7 +134,7 @@ if (isset($options['protect']) && $options['protect'] == 1) } else { if ( isset( $options['skip-dupes'] ) ) { $repo = $image->getRepo(); - $sha1 = File::sha1Base36( $file ); #XXX: we end up calculating this again when actually uploading. that sucks. + $sha1 = File::sha1Base36( $file ); # XXX: we end up calculating this again when actually uploading. that sucks. $dupes = $repo->findBySha1( $sha1 ); @@ -149,73 +149,73 @@ if (isset($options['protect']) && $options['protect'] == 1) $svar = 'added'; } - if (isset( $options['source-wiki-url'])) { - /* find comment text directly from source wiki, through MW's API */ - $real_comment = getFileCommentFromSourceWiki($options['source-wiki-url'], $base); - if ($real_comment === false) - $commentText = $comment; - else - $commentText = $real_comment; - - /* find user directly from source wiki, through MW's API */ - $real_user = getFileUserFromSourceWiki($options['source-wiki-url'], $base); - if ($real_user === false) { - $wgUser = $user; - } else { - $wgUser = User::newFromName($real_user); - if ($wgUser === false) { - # user does not exist in target wiki - echo ("failed: user '$real_user' does not exist in target wiki."); - continue; - } - } - } else { - # Find comment text - $commentText = false; - - if ( $commentExt ) { - $f = findAuxFile( $file, $commentExt ); - if ( !$f ) { - echo( " No comment file with extension {$commentExt} found for {$file}, using default comment. " ); - } else { - $commentText = file_get_contents( $f ); - if ( !$f ) { - echo( " Failed to load comment file {$f}, using default comment. " ); - } - } - } - - if ( !$commentText ) { - $commentText = $comment; - } - } - - - # Import the file + if ( isset( $options['source-wiki-url'] ) ) { + /* find comment text directly from source wiki, through MW's API */ + $real_comment = getFileCommentFromSourceWiki( $options['source-wiki-url'], $base ); + if ( $real_comment === false ) + $commentText = $comment; + else + $commentText = $real_comment; + + /* find user directly from source wiki, through MW's API */ + $real_user = getFileUserFromSourceWiki( $options['source-wiki-url'], $base ); + if ( $real_user === false ) { + $wgUser = $user; + } else { + $wgUser = User::newFromName( $real_user ); + if ( $wgUser === false ) { + # user does not exist in target wiki + echo ( "failed: user '$real_user' does not exist in target wiki." ); + continue; + } + } + } else { + # Find comment text + $commentText = false; + + if ( $commentExt ) { + $f = findAuxFile( $file, $commentExt ); + if ( !$f ) { + echo( " No comment file with extension {$commentExt} found for {$file}, using default comment. " ); + } else { + $commentText = file_get_contents( $f ); + if ( !$f ) { + echo( " Failed to load comment file {$f}, using default comment. " ); + } + } + } + + if ( !$commentText ) { + $commentText = $comment; + } + } + + + # Import the file if ( isset( $options['dry'] ) ) { echo( " publishing {$file} by '" . $wgUser->getName() . "', comment '$commentText'... " ); } else { $archive = $image->publish( $file ); - if( WikiError::isError( $archive ) || !$archive->isGood() ) { + if ( !$archive->isGood() ) { echo( "failed.\n" ); $failed++; continue; } } - + $doProtect = false; $restrictions = array(); - + global $wgRestrictionLevels; - - $protectLevel = isset($options['protect']) ? $options['protect'] : null; - + + $protectLevel = isset( $options['protect'] ) ? $options['protect'] : null; + if ( $protectLevel && in_array( $protectLevel, $wgRestrictionLevels ) ) { $restrictions['move'] = $protectLevel; $restrictions['edit'] = $protectLevel; $doProtect = true; } - if (isset($options['unprotect'])) { + if ( isset( $options['unprotect'] ) ) { $restrictions['move'] = ''; $restrictions['edit'] = ''; $doProtect = true; @@ -227,26 +227,26 @@ if (isset($options['protect']) && $options['protect'] == 1) } else if ( $image->recordUpload( $archive->value, $commentText, $license ) ) { # We're done! echo( "done.\n" ); - if ($doProtect) { + if ( $doProtect ) { # Protect the file $article = new Article( $title ); echo "\nWaiting for slaves...\n"; // Wait for slaves. - sleep(2.0); + sleep( 2.0 ); wfWaitForSlaves( 1.0 ); - + echo( "\nSetting image restrictions ... " ); - if ( $article->updateRestrictions($restrictions) ) - echo( "done.\n" ); + if ( $article->updateRestrictions( $restrictions ) ) + echo( "done.\n" ); else - echo( "failed.\n" ); + echo( "failed.\n" ); } } else { echo( "failed.\n" ); $svar = 'failed'; } - + $$svar++; $processed++; @@ -256,16 +256,16 @@ if (isset($options['protect']) && $options['protect'] == 1) if ( $sleep ) sleep( $sleep ); } - + # Print out some statistics echo( "\n" ); - foreach( array( 'count' => 'Found', 'limit' => 'Limit', 'ignored' => 'Ignored', - 'added' => 'Added', 'skipped' => 'Skipped', 'overwritten' => 'Overwritten', + foreach ( array( 'count' => 'Found', 'limit' => 'Limit', 'ignored' => 'Ignored', + 'added' => 'Added', 'skipped' => 'Skipped', 'overwritten' => 'Overwritten', 'failed' => 'Failed' ) as $var => $desc ) { - if( $$var > 0 ) + if ( $$var > 0 ) echo( "{$desc}: {$$var}\n" ); } - + } else { echo( "No suitable files could be found for import.\n" ); } @@ -274,10 +274,10 @@ if (isset($options['protect']) && $options['protect'] == 1) showUsage(); } -exit(0); +exit( 0 ); function showUsage( $reason = false ) { - if( $reason ) { + if ( $reason ) { echo( $reason . "\n" ); } @@ -292,7 +292,7 @@ Options: --overwrite Overwrite existing images with the same name (default is to skip them) --limit= Limit the number of images to process. Ignored or skipped images are not counted. --from= Ignore all files until the one with the given name. Useful for resuming - aborted imports. should be the file's canonical database form. + aborted imports. should be the file's canonical database form. --skip-dupes Skip images that were already uploaded under a different name (check SHA1) --sleep= Sleep between files. Useful mostly for debugging. --user= Set username of uploader, default 'Maintenance script' @@ -306,8 +306,8 @@ Options: --protect= Specify the protect value (autoconfirmed,sysop) --unprotect Unprotects all uploaded images --source-wiki-url if specified, take User and Comment data for each imported file from this URL. - For example, --source-wiki-url="http://en.wikipedia.org/" + For example, --source-wiki-url="http://en.wikipedia.org/" TEXT; - exit(1); + exit( 1 ); } diff --git a/maintenance/importTextFile.php b/maintenance/importTextFile.php index 955d01f4..3b77eb5f 100644 --- a/maintenance/importTextFile.php +++ b/maintenance/importTextFile.php @@ -11,30 +11,30 @@ $options = array( 'help', 'nooverwrite', 'norc' ); $optionsWithArgs = array( 'title', 'user', 'comment' ); -require_once( dirname(__FILE__) . '/commandLine.inc' ); +require_once( dirname( __FILE__ ) . '/commandLine.inc' ); echo( "Import Text File\n\n" ); -if( count( $args ) < 1 || isset( $options['help'] ) ) { +if ( count( $args ) < 1 || isset( $options['help'] ) ) { showHelp(); } else { $filename = $args[0]; echo( "Using {$filename}..." ); - if( is_file( $filename ) ) { + if ( is_file( $filename ) ) { $title = isset( $options['title'] ) ? $options['title'] : titleFromFilename( $filename ); $title = Title::newFromURL( $title ); - if( is_object( $title ) ) { + if ( is_object( $title ) ) { echo( "\nUsing title '" . $title->getPrefixedText() . "'..." ); - if( !$title->exists() || !isset( $options['nooverwrite'] ) ) { + if ( !$title->exists() || !isset( $options['nooverwrite'] ) ) { $text = file_get_contents( $filename ); $user = isset( $options['user'] ) ? $options['user'] : 'Maintenance script'; $user = User::newFromName( $user ); - if( is_object( $user ) ) { + if ( is_object( $user ) ) { echo( "\nUsing username '" . $user->getName() . "'..." ); $wgUser =& $user; diff --git a/maintenance/importUseModWiki.php b/maintenance/importUseModWiki.php index 0d014145..bff4cd02 100644 --- a/maintenance/importUseModWiki.php +++ b/maintenance/importUseModWiki.php @@ -26,7 +26,7 @@ * @ingroup Maintenance */ -if( php_sapi_name() != 'cli' ) { +if ( php_sapi_name() != 'cli' ) { echo "Please customize the settings and run me from the command line."; die( -1 ); } @@ -41,9 +41,9 @@ $wgRootDirectory = "/kalman/Projects/wiki2002/wiki/lib-http/db/wiki"; /* globals */ $wgFieldSeparator = "\xb3"; # Some wikis may use different char $FS = $wgFieldSeparator ; - $FS1 = $FS."1" ; - $FS2 = $FS."2" ; - $FS3 = $FS."3" ; + $FS1 = $FS . "1" ; + $FS2 = $FS . "2" ; + $FS3 = $FS . "3" ; # Unicode sanitization tools require_once( dirname( dirname( __FILE__ ) ) . '/includes/normal/UtfNormal.php' ); @@ -60,13 +60,13 @@ function importPages() $gt = '>'; echo << + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.1/ + http://www.mediawiki.org/xml/export-0.1.xsd" + version="0.1" + xml:lang="en"> XML; @@ -74,9 +74,9 @@ XML; 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'other' ); - foreach( $letters as $letter ) { + foreach ( $letters as $letter ) { $dir = "$wgRootDirectory/page/$letter"; - if( is_dir( $dir ) ) + if ( is_dir( $dir ) ) importPageDirectory( $dir ); } echo <<\n"; $mydir = opendir( $dir ); - while( $entry = readdir( $mydir ) ) { + while ( $entry = readdir( $mydir ) ) { $m = array(); - if( preg_match( '/^(.+)\.db$/', $entry, $m ) ) { + if ( preg_match( '/^(.+)\.db$/', $entry, $m ) ) { echo importPage( $prefix . $m[1] ); } else { - if( is_dir( "$dir/$entry" ) ) { - if( $entry != '.' && $entry != '..' ) { + if ( is_dir( "$dir/$entry" ) ) { + if ( $entry != '.' && $entry != '..' ) { importPageDirectory( "$dir/$entry", "$entry/" ); } } else { @@ -114,7 +114,7 @@ function importPageDirectory( $dir, $prefix = "" ) function useModFilename( $title ) { $c = substr( $title, 0, 1 ); - if(preg_match( '/[A-Z]/i', $c ) ) { + if ( preg_match( '/[A-Z]/i', $c ) ) { return strtoupper( $c ) . "/$title"; } return "other/$title"; @@ -122,10 +122,10 @@ function useModFilename( $title ) { function fetchPage( $title ) { - global $FS1,$FS2,$FS3, $wgRootDirectory; + global $FS1, $FS2, $FS3, $wgRootDirectory; $fname = $wgRootDirectory . "/page/" . useModFilename( $title ) . ".db"; - if( !file_exists( $fname ) ) { + if ( !file_exists( $fname ) ) { echo "Couldn't open file '$fname' for page '$title'.\n"; die( -1 ); } @@ -141,19 +141,19 @@ function fetchPage( $title ) function fetchKeptPages( $title ) { - global $FS1,$FS2,$FS3, $wgRootDirectory; + global $FS1, $FS2, $FS3, $wgRootDirectory; $fname = $wgRootDirectory . "/keep/" . useModFilename( $title ) . ".kp"; - if( !file_exists( $fname ) ) return array(); + if ( !file_exists( $fname ) ) return array(); $keptlist = explode( $FS1, file_get_contents( $fname ) ); array_shift( $keptlist ); # Drop the junk at beginning of file $revisions = array(); - foreach( $keptlist as $rev ) { + foreach ( $keptlist as $rev ) { $section = splitHash( $FS2, $rev ); $text = splitHash( $FS3, $section["data"] ); - if ( $text["text"] && $text["minor"] != "" && ( $section["ts"]*1 > 0 ) ) { + if ( $text["text"] && $text["minor"] != "" && ( $section["ts"] * 1 > 0 ) ) { array_push( $revisions, array2object( array ( "text" => $text["text"] , "summary" => $text["summary"] , "minor" => $text["minor"] , "ts" => $section["ts"] , "username" => $section["username"] , "host" => $section["host"] ) ) ); @@ -167,7 +167,7 @@ function fetchKeptPages( $title ) function splitHash ( $sep , $str ) { $temp = explode ( $sep , $str ) ; $ret = array () ; - for ( $i = 0; $i+1 < count ( $temp ) ; $i++ ) { + for ( $i = 0; $i + 1 < count ( $temp ) ; $i++ ) { $ret[$temp[$i]] = $temp[++$i] ; } return $ret ; @@ -182,8 +182,8 @@ function checkUserCache( $name, $host ) { global $usercache; - if( $name ) { - if( in_array( $name, $usercache ) ) { + if ( $name ) { + if ( in_array( $name, $usercache ) ) { $userid = $usercache[$name]; } else { # If we haven't imported user accounts @@ -199,15 +199,13 @@ function checkUserCache( $name, $host ) function importPage( $title ) { - global $usercache; - echo "\n\n"; $page = fetchPage( $title ); $newtitle = xmlsafe( str_replace( '_', ' ', recodeText( $title ) ) ); $munged = mungeFormat( $page->text ); - if( $munged != $page->text ) { + if ( $munged != $page->text ) { /** * Save a *new* revision with the conversion, and put the * previous last version into the history. @@ -235,13 +233,13 @@ XML; # History $revisions = array_merge( $revisions, fetchKeptPages( $title ) ); - if(count( $revisions ) == 0 ) { + if ( count( $revisions ) == 0 ) { return NULL; // Was "$sql", which does not appear to be defined. } - foreach( $revisions as $rev ) { + foreach ( $revisions as $rev ) { $text = xmlsafe( recodeText( $rev->text ) ); - $minor = ($rev->minor ? '' : ''); + $minor = ( $rev->minor ? '' : '' ); list( /* $userid */ , $username ) = checkUserCache( $rev->username, $rev->host ); $username = xmlsafe( recodeText( $username ) ); $timestamp = xmlsafe( timestamp2ISO8601( $rev->ts ) ); @@ -272,22 +270,22 @@ function recodeText( $string ) { return $string; } -function wfUtf8Sequence($codepoint) { - if($codepoint < 0x80) return chr($codepoint); - if($codepoint < 0x800) return chr($codepoint >> 6 & 0x3f | 0xc0) . - chr($codepoint & 0x3f | 0x80); - if($codepoint < 0x10000) return chr($codepoint >> 12 & 0x0f | 0xe0) . - chr($codepoint >> 6 & 0x3f | 0x80) . - chr($codepoint & 0x3f | 0x80); - if($codepoint < 0x100000) return chr($codepoint >> 18 & 0x07 | 0xf0) . # Double-check this - chr($codepoint >> 12 & 0x3f | 0x80) . - chr($codepoint >> 6 & 0x3f | 0x80) . - chr($codepoint & 0x3f | 0x80); +function wfUtf8Sequence( $codepoint ) { + if ( $codepoint < 0x80 ) return chr( $codepoint ); + if ( $codepoint < 0x800 ) return chr( $codepoint >> 6 & 0x3f | 0xc0 ) . + chr( $codepoint & 0x3f | 0x80 ); + if ( $codepoint < 0x10000 ) return chr( $codepoint >> 12 & 0x0f | 0xe0 ) . + chr( $codepoint >> 6 & 0x3f | 0x80 ) . + chr( $codepoint & 0x3f | 0x80 ); + if ( $codepoint < 0x100000 ) return chr( $codepoint >> 18 & 0x07 | 0xf0 ) . # Double-check this + chr( $codepoint >> 12 & 0x3f | 0x80 ) . + chr( $codepoint >> 6 & 0x3f | 0x80 ) . + chr( $codepoint & 0x3f | 0x80 ); # Doesn't yet handle outside the BMP return "&#$codepoint;"; } -function wfMungeToUtf8($string) { +function wfMungeToUtf8( $string ) { $string = preg_replace ( '/&#([0-9]+);/e', 'wfUtf8Sequence($1)', $string ); $string = preg_replace ( '/&#x([0-9a-f]+);/ie', 'wfUtf8Sequence(0x$1)', $string ); # Should also do named entities here @@ -295,7 +293,7 @@ function wfMungeToUtf8($string) { } function timestamp2ISO8601( $ts ) { - #2003-08-05T18:30:02Z + # 2003-08-05T18:30:02Z return gmdate( 'Y-m-d', $ts ) . 'T' . gmdate( 'H:i:s', $ts ) . 'Z'; } @@ -318,7 +316,7 @@ function xmlCommentSafe( $text ) { function array2object( $arr ) { $o = (object)0; - foreach( $arr as $x => $y ) { + foreach ( $arr as $x => $y ) { $o->$x = $y; } return $o; diff --git a/maintenance/initEditCount.php b/maintenance/initEditCount.php index b7301643..e421e29b 100644 --- a/maintenance/initEditCount.php +++ b/maintenance/initEditCount.php @@ -1,5 +1,8 @@ mDescription = "Batch-recalculate user_editcount fields from the revision table"; } public function execute() { - global $wgDBservers; $dbw = wfGetDB( DB_MASTER ); $user = $dbw->tableName( 'user' ); $revision = $dbw->tableName( 'revision' ); @@ -43,16 +46,16 @@ in $wgDBservers, usually indicating a replication environment.' ); $dbver = $dbw->getServerVersion(); // Autodetect mode... - $backgroundMode = count( $wgDBservers ) > 1 || - ($dbw instanceof DatabaseMySql && version_compare( $dbver, '4.1' ) < 0); - - if( $this->hasOption('background') ) { + $backgroundMode = wfGetLB()->getServerCount() > 1 || + ( $dbw instanceof DatabaseMysql && version_compare( $dbver, '4.1' ) < 0 ); + + if ( $this->hasOption( 'background' ) ) { $backgroundMode = true; - } elseif( $this->hasOption('quick') ) { + } elseif ( $this->hasOption( 'quick' ) ) { $backgroundMode = false; } - if( $backgroundMode ) { + if ( $backgroundMode ) { $this->output( "Using replication-friendly background mode...\n" ); $dbr = wfGetDB( DB_SLAVE ); @@ -61,7 +64,7 @@ in $wgDBservers, usually indicating a replication environment.' ); $start = microtime( true ); $migrated = 0; - for( $min = 0; $min <= $lastUser; $min += $chunkSize ) { + for ( $min = 0; $min <= $lastUser; $min += $chunkSize ) { $max = $min + $chunkSize; $result = $dbr->query( "SELECT @@ -73,17 +76,16 @@ in $wgDBservers, usually indicating a replication environment.' ); GROUP BY user_id", __METHOD__ ); - foreach( $result as $row ) { + foreach ( $result as $row ) { $dbw->update( 'user', array( 'user_editcount' => $row->user_editcount ), array( 'user_id' => $row->user_id ), __METHOD__ ); ++$migrated; } - $dbr->freeResult( $result ); $delta = microtime( true ) - $start; - $rate = ($delta == 0.0) ? 0.0 : $migrated / $delta; + $rate = ( $delta == 0.0 ) ? 0.0 : $migrated / $delta; $this->output( sprintf( "%s %d (%0.1f%%) done in %0.1f secs (%0.3f accounts/sec).\n", wfWikiID(), $migrated, @@ -105,4 +107,4 @@ in $wgDBservers, usually indicating a replication environment.' ); } $maintClass = "InitEditCount"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/initStats.php b/maintenance/initStats.php index b92d46c5..1ec5c925 100644 --- a/maintenance/initStats.php +++ b/maintenance/initStats.php @@ -1,5 +1,4 @@ - * @licence GNU General Public Licence 2.0 or later */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class InitStats extends Maintenance { public function __construct() { @@ -56,13 +55,13 @@ class InitStats extends Maintenance { $image = $counter->files(); $this->output( "{$image}\n" ); - if( !$this->hasOption('noviews') ) { + if ( !$this->hasOption( 'noviews' ) ) { $this->output( "Counting total page views..." ); $views = $counter->views(); $this->output( "{$views}\n" ); } - if( $this->hasOption( 'active' ) ) { + if ( $this->hasOption( 'active' ) ) { $this->output( "Counting active users..." ); $active = SiteStatsUpdate::cacheUpdate(); $this->output( "{$active}\n" ); @@ -70,7 +69,7 @@ class InitStats extends Maintenance { $this->output( "\nUpdating site statistics..." ); - if( $this->hasOption( 'update' ) ) { + if ( $this->hasOption( 'update' ) ) { $counter->update(); } else { $counter->refresh(); @@ -81,4 +80,4 @@ class InitStats extends Maintenance { } $maintClass = "InitStats"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/install-utils.inc b/maintenance/install-utils.inc index f2d48e9a..93ca0b58 100644 --- a/maintenance/install-utils.inc +++ b/maintenance/install-utils.inc @@ -1,219 +1,31 @@ index.php5 \n". - "to continue installation. ABORTING.\n"; - die( 1 ); - } - - $test = new PhpXmlBugTester(); - if( !$test->ok ) { - echo "Your system has a combination of PHP and libxml2 versions which is buggy\n" . - "and can cause hidden data corruption in MediaWiki and other web apps.\n" . - "Upgrade to PHP 5.2.9 or later and libxml2 2.7.3 or later!\n" . - "ABORTING (http://bugs.php.net/bug.php?id=45996 for details).\n"; - die( 1 ); - } - - $test = new PhpRefCallBugTester; - $test->execute(); - if ( !$test->ok ) { - echo "PHP 5.3.1 is not compatible with MediaWiki due to a bug involving\n" . - "reference parameters to __call. Upgrade to PHP 5.3.2 or higher, or \n" . - "downgrade to PHP 5.3.0 to fix this.\n" . - "ABORTING (see http://bugs.php.net/bug.php?id=50394 for details)\n"; - die( 1 ); - } - - global $wgCommandLineMode; - $wgCommandLineMode = true; - umask( 000 ); - @set_time_limit( 0 ); -} - /** - * Test for PHP+libxml2 bug which breaks XML input subtly with certain versions. - * http://bugs.php.net/bug.php?id=45996 - * Known fixed with PHP 5.2.9 + libxml2-2.7.3 + * @deprecated Use DatabaseBase::sourceFile(). Will probably be removed in 1.19 */ -class PhpXmlBugTester { - private $parsedData = ''; - public $ok = false; - public function __construct() { - $charData = 'c'; - $xml = '' . htmlspecialchars( $charData ) . ''; - - $parser = xml_parser_create(); - xml_set_character_data_handler( $parser, array( $this, 'chardata' ) ); - $parsedOk = xml_parse($parser, $xml, true); - $this->ok = $parsedOk && ($this->parsedData == $charData); - } - public function chardata($parser, $data) { - $this->parsedData .= $data; - } -} - -/** - * Test for PHP bug #50394 (PHP 5.3.x conversion to null only, not 5.2.x) - */ -class PhpRefCallBugTester { - public $ok = false; - - function __call( $name, $args ) { - $old = error_reporting( E_ALL & ~E_WARNING ); - call_user_func_array( array( $this, 'checkForBrokenRef' ), $args ); - error_reporting( $old ); - } - - function checkForBrokenRef( &$var ) { - if ( $var ) { - $this->ok = true; - } - } - - function execute() { - $var = true; - call_user_func_array( array( $this, 'foo' ), array( &$var ) ); - } -} - -function readconsole( $prompt = '' ) { - static $isatty = null; - if ( is_null( $isatty ) ) { - if ( !function_exists( 'posix_isatty' ) || posix_isatty( 0 /*STDIN*/ ) ) { - $isatty = true; - } else { - $isatty = false; - } - } - - if ( $isatty && function_exists( 'readline' ) ) { - return readline( $prompt ); - } else { - if ( $isatty ) { - $st = readlineEmulation( $prompt ); - } else { - if ( feof( STDIN ) ) { - $st = false; - } else { - $st = fgets(STDIN, 1024); - } - } - if ($st === false) return false; - $resp = trim( $st ); - return $resp; - } -} - -function findExecutable( $name ) { - $paths = explode( PATH_SEPARATOR, getenv( "PATH" ) ); - foreach( $paths as $path ) { - $full = $path . DIRECTORY_SEPARATOR . $name; - if( file_exists( $full ) ) { - if( wfIsWindows() || is_executable( $full ) ) { - return $full; - } - } - } - return false; -} - -function readlineEmulation( $prompt ) { - $bash = "bash"; - if( !wfIsWindows() && findExecutable( $bash ) ) { - $retval = false; - $encPrompt = wfEscapeShellArg( $prompt ); - $command = "read -er -p $encPrompt && echo \"\$REPLY\""; - $encCommand = wfEscapeShellArg( $command ); - $line = wfShellExec( "$bash -c $encCommand", $retval ); - - if( $retval == 0 ) { - return $line; - } elseif( $retval == 127 ) { - // Couldn't execute bash even though we thought we saw it. - // Shell probably spit out an error message, sorry :( - // Fall through to fgets()... - } else { - // EOF/ctrl+D - return false; - } - } - - // Fallback... we'll have no editing controls, EWWW - if ( feof( STDIN ) ) { - return false; - } - print $prompt; - return fgets(STDIN, 1024); -} - - -# -# Read and execute SQL commands from a file -# function dbsource( $fname, $db = false ) { wfDeprecated( __METHOD__ ); if ( !$db ) { - // Try $wgDatabase, which is used in the install and update scripts - global $wgDatabase; - if ( isset( $wgDatabase ) ) { - $db = $wgDatabase; - } else { - // No? Well, we must be outside of those scripts, so use the standard method - $db = wfGetDB( DB_MASTER ); - } + $db = wfGetDB( DB_MASTER ); } $error = $db->sourceFile( $fname ); if ( $error !== true ) { print $error; - exit(1); + exit( 1 ); } } /** - * Get the value of session.save_path - * - * Per http://www.php.net/manual/en/ref.session.php#ini.session.save-path, - * this might have some additional preceding parts which need to be - * ditched - * - * @return string - */ -function mw_get_session_save_path() { - $path = ini_get( 'session.save_path' ); - $path = substr( $path, strrpos( $path, ';' ) ); - return $path; -} - -/** - * Is dl() available to us? - * - * According to http://www.php.net/manual/en/function.dl.php, dl() - * is *not* available when `enable_dl` is off, or under `safe_mode` - * - * @return bool + * @deprecated Use DatabaseBase::patchPath(). Will probably be removed in 1.18 */ -function mw_have_dl() { - return function_exists( 'dl' ) - && is_callable( 'dl' ) - && wfIniGetBool( 'enable_dl' ) - && !wfIniGetBool( 'safe_mode' ); +function archive( $name ) { + wfDeprecated( __METHOD__ ); + $dbr = wfGetDB( DB_SLAVE ); + return $dbr->patchPath( $name ); } diff --git a/maintenance/install.php b/maintenance/install.php new file mode 100644 index 00000000..34e3ea85 --- /dev/null +++ b/maintenance/install.php @@ -0,0 +1,95 @@ +addArg( 'name', 'The name of the wiki', true); + + $this->addArg( 'admin', 'The username of the wiki administrator (WikiSysop)', true ); + $this->addOption( 'pass', 'The password for the wiki administrator. You will be prompted for this if it isn\'t provided', false, true ); + $this->addOption( 'email', 'The email for the wiki administrator', false, true ); + $this->addOption( 'scriptpath', 'The relative path of the wiki in the web server (/wiki)', false, true ); + + $this->addOption( 'lang', 'The language to use (en)', false, true ); + /* $this->addOption( 'cont-lang', 'The content language (en)', false, true ); */ + + $this->addOption( 'dbtype', 'The type of database (mysql)', false, true ); + $this->addOption( 'dbserver', 'The database host (localhost)', false, true ); + $this->addOption( 'dbport', 'The database port; only for PostgreSQL (5432)', false, true ); + $this->addOption( 'dbname', 'The database name (my_wiki)', false, true ); + $this->addOption( 'dbpath', 'The path for the SQLite DB (/var/data)', false, true ); + $this->addOption( 'installdbuser', 'The user to use for installing (root)', false, true ); + $this->addOption( 'installdbpass', 'The pasword for the DB user to install as.', false, true ); + $this->addOption( 'dbuser', 'The user to use for normal operations (wikiuser)', false, true ); + $this->addOption( 'dbpass', 'The pasword for the DB user for normal operations', false, true ); + $this->addOption( 'confpath', "Path to write LocalSettings.php to, default $IP", false, true ); + /* $this->addOption( 'dbschema', 'The schema for the MediaWiki DB in pg (mediawiki)', false, true ); */ + /* $this->addOption( 'namespace', 'The project namespace (same as the name)', false, true ); */ + $this->addOption( 'env-checks', "Run environment checks only, don't change anything" ); + } + + function execute() { + global $IP, $wgTitle; + $siteName = isset( $this->mArgs[0] ) ? $this->mArgs[0] : "Don't care"; // Will not be set if used with --env-checks + $adminName = isset( $this->mArgs[1] ) ? $this->mArgs[1] : null; + $wgTitle = Title::newFromText( 'Installer script' ); + + $installer = + new CliInstaller( $siteName, $adminName, $this->mOptions ); + + $status = $installer->doEnvironmentChecks(); + if( $status->isGood() ) { + $installer->showMessage( 'config-env-good' ); + } else { + $installer->showStatusMessage( $status ); + return; + } + if( !$this->hasOption( 'env-checks' ) ) { + $installer->execute(); + $installer->writeConfigurationFile( $this->getOption( 'confpath', $IP ) ); + } + } + + function validateParamsAndArgs() { + if ( !$this->hasOption( 'env-checks' ) ) { + parent::validateParamsAndArgs(); + } + } +} + +$maintClass = "CommandLineInstaller"; + +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/installExtension.php b/maintenance/installExtension.php deleted file mode 100644 index ea4c191c..00000000 --- a/maintenance/installExtension.php +++ /dev/null @@ -1,683 +0,0 @@ -path = $path; - } - - function printListing( ) { - trigger_error( 'override InstallerRepository::printListing()', E_USER_ERROR ); - } - - function getResource( $name ) { - trigger_error( 'override InstallerRepository::getResource()', E_USER_ERROR ); - } - - static function makeRepository( $path, $type = NULL ) { - if ( !$type ) { - $m = array(); - preg_match( '!(([-+\w]+)://)?.*?(\.[-\w\d.]+)?$!', $path, $m ); - $proto = @$m[2]; - - if ( !$proto ) { - $type = 'dir'; - } else if ( ( $proto == 'http' || $proto == 'https' ) && preg_match( '!([^\w]svn|svn[^\w])!i', $path) ) { - $type = 'svn'; #HACK! - } else { - $type = $proto; - } - } - - if ( $type == 'dir' || $type == 'file' ) { return new LocalInstallerRepository( $path ); } - else if ( $type == 'http' || $type == 'http' ) { return new WebInstallerRepository( $path ); } - else { return new SVNInstallerRepository( $path ); } - } -} - -/** - * @ingroup Maintenance - */ -class LocalInstallerRepository extends InstallerRepository { - - function LocalInstallerRepository ( $path ) { - InstallerRepository::InstallerRepository( $path ); - } - - function printListing( ) { - $ff = glob( "{$this->path}/*" ); - if ( $ff === false || $ff === NULL ) { - ExtensionInstaller::error( "listing directory {$this->path} failed!" ); - return false; - } - - foreach ( $ff as $f ) { - $n = basename($f); - - if ( !is_dir( $f ) ) { - $m = array(); - if ( !preg_match( '/(.*)\.(tgz|tar\.gz|zip)/', $n, $m ) ) continue; - $n = $m[1]; - } - - print "\t$n\n"; - } - } - - function getResource( $name ) { - $path = $this->path . '/' . $name; - - if ( !file_exists( $path ) || !is_dir( $path ) ) $path = $this->path . '/' . $name . '.tgz'; - if ( !file_exists( $path ) ) $path = $this->path . '/' . $name . '.tar.gz'; - if ( !file_exists( $path ) ) $path = $this->path . '/' . $name . '.zip'; - - return new LocalInstallerResource( $path ); - } -} - -/** - * @ingroup Maintenance - */ -class WebInstallerRepository extends InstallerRepository { - - function WebInstallerRepository ( $path ) { - InstallerRepository::InstallerRepository( $path ); - } - - function printListing( ) { - ExtensionInstaller::note( "listing index from {$this->path}..." ); - - $txt = @file_get_contents( $this->path . '/index.txt' ); - if ( $txt ) { - print $txt; - print "\n"; - } - else { - $txt = file_get_contents( $this->path ); - if ( !$txt ) { - ExtensionInstaller::error( "listing index from {$this->path} failed!" ); - print ( $txt ); - return false; - } - - $m = array(); - $ok = preg_match_all( '!]*href\s*=\s*['."'".'"]([^/'."'".'"]+)\.tgz['."'".'"][^>]*>.*?!si', $txt, $m, PREG_SET_ORDER ); - if ( !$ok ) { - ExtensionInstaller::error( "listing index from {$this->path} does not match!" ); - print ( $txt ); - return false; - } - - foreach ( $m as $l ) { - $n = $l[1]; - print "\t$n\n"; - } - } - } - - function getResource( $name ) { - $path = $this->path . '/' . $name . '.tgz'; - return new WebInstallerResource( $path ); - } -} - -/** - * @ingroup Maintenance - */ -class SVNInstallerRepository extends InstallerRepository { - - function SVNInstallerRepository ( $path ) { - InstallerRepository::InstallerRepository( $path ); - } - - function printListing( ) { - ExtensionInstaller::note( "SVN list {$this->path}..." ); - $code = null; // Shell Exec return value. - $txt = wfShellExec( 'svn ls ' . escapeshellarg( $this->path ), $code ); - if ( $code !== 0 ) { - ExtensionInstaller::error( "svn list for {$this->path} failed!" ); - return false; - } - - $ll = preg_split('/(\s*[\r\n]\s*)+/', $txt); - - foreach ( $ll as $line ) { - $m = array(); - if ( !preg_match('!^(.*)/$!', $line, $m) ) continue; - $n = $m[1]; - - print "\t$n\n"; - } - } - - function getResource( $name ) { - $path = $this->path . '/' . $name; - return new SVNInstallerResource( $path ); - } -} - -/** - * @ingroup Maintenance - */ -class InstallerResource { - var $path; - var $isdir; - var $islocal; - - function InstallerResource( $path, $isdir, $islocal ) { - $this->path = $path; - - $this->isdir= $isdir; - $this->islocal = $islocal; - - $m = array(); - preg_match( '!([-+\w]+://)?.*?(\.[-\w\d.]+)?$!', $path, $m ); - - $this->protocol = @$m[1]; - $this->extensions = @$m[2]; - - if ( $this->extensions ) $this->extensions = strtolower( $this->extensions ); - } - - function fetch( $target ) { - trigger_error( 'override InstallerResource::fetch()', E_USER_ERROR ); - } - - function extract( $file, $target ) { - - if ( $this->extensions == '.tgz' || $this->extensions == '.tar.gz' ) { #tgz file - ExtensionInstaller::note( "extracting $file..." ); - $code = null; // shell Exec return value. - wfShellExec( 'tar zxvf ' . escapeshellarg( $file ) . ' -C ' . escapeshellarg( $target ), $code ); - - if ( $code !== 0 ) { - ExtensionInstaller::error( "failed to extract $file!" ); - return false; - } - } - else if ( $this->extensions == '.zip' ) { #zip file - ExtensionInstaller::note( "extracting $file..." ); - $code = null; // shell Exec return value. - wfShellExec( 'unzip ' . escapeshellarg( $file ) . ' -d ' . escapeshellarg( $target ) , $code ); - - if ( $code !== 0 ) { - ExtensionInstaller::error( "failed to extract $file!" ); - return false; - } - } - else { - ExtensionInstaller::error( "unknown extension {$this->extensions}!" ); - return false; - } - - return true; - } - - /*static*/ function makeResource( $url ) { - $m = array(); - preg_match( '!(([-+\w]+)://)?.*?(\.[-\w\d.]+)?$!', $url, $m ); - $proto = @$m[2]; - $ext = @$m[3]; - if ( $ext ) $ext = strtolower( $ext ); - - if ( !$proto ) { return new LocalInstallerResource( $url, $ext ? false : true ); } - else if ( $ext && ( $proto == 'http' || $proto == 'http' || $proto == 'ftp' ) ) { return new WebInstallerResource( $url ); } - else { return new SVNInstallerResource( $url ); } - } -} - -/** - * @ingroup Maintenance - */ -class LocalInstallerResource extends InstallerResource { - function LocalInstallerResource( $path ) { - InstallerResource::InstallerResource( $path, is_dir( $path ), true ); - } - - function fetch( $target ) { - if ( $this->isdir ) return ExtensionInstaller::copyDir( $this->path, dirname( $target ) ); - else return $this->extract( $this->path, dirname( $target ) ); - } - -} - -/** - * @ingroup Maintenance - */ -class WebInstallerResource extends InstallerResource { - function WebInstallerResource( $path ) { - InstallerResource::InstallerResource( $path, false, false ); - } - - function fetch( $target ) { - $tmp = wfTempDir() . '/' . basename( $this->path ); - - ExtensionInstaller::note( "downloading {$this->path}..." ); - $ok = copy( $this->path, $tmp ); - - if ( !$ok ) { - ExtensionInstaller::error( "failed to download {$this->path}" ); - return false; - } - - $this->extract( $tmp, dirname( $target ) ); - unlink($tmp); - - return true; - } -} - -/** - * @ingroup Maintenance - */ -class SVNInstallerResource extends InstallerResource { - function SVNInstallerResource( $path ) { - InstallerResource::InstallerResource( $path, true, false ); - } - - function fetch( $target ) { - ExtensionInstaller::note( "SVN checkout of {$this->path}..." ); - $code = null; // shell exec return val. - wfShellExec( 'svn co ' . escapeshellarg( $this->path ) . ' ' . escapeshellarg( $target ), $code ); - - if ( $code !== 0 ) { - ExtensionInstaller::error( "checkout failed for {$this->path}!" ); - return false; - } - - return true; - } -} - -/** - * @ingroup Maintenance - */ -class ExtensionInstaller { - var $source; - var $target; - var $name; - var $dir; - var $tasks; - - function ExtensionInstaller( $name, $source, $target ) { - if ( !is_object( $source ) ) $source = InstallerResource::makeResource( $source ); - - $this->name = $name; - $this->source = $source; - $this->target = realpath( $target ); - $this->extdir = "$target/extensions"; - $this->dir = "{$this->extdir}/$name"; - $this->incpath = "extensions/$name"; - $this->tasks = array(); - - #TODO: allow a subdir different from "extensions" - #TODO: allow a config file different from "LocalSettings.php" - } - - static function note( $msg ) { - print "$msg\n"; - } - - static function warn( $msg ) { - print "WARNING: $msg\n"; - } - - static function error( $msg ) { - print "ERROR: $msg\n"; - } - - function prompt( $msg ) { - if ( function_exists( 'readline' ) ) { - $s = readline( $msg ); - } - else { - if ( !@$this->stdin ) $this->stdin = fopen( 'php://stdin', 'r' ); - if ( !$this->stdin ) die( "Failed to open stdin for user interaction!\n" ); - - print $msg; - flush(); - - $s = fgets( $this->stdin ); - } - - $s = trim( $s ); - return $s; - } - - function confirm( $msg ) { - while ( true ) { - $s = $this->prompt( $msg . " [yes/no]: "); - $s = strtolower( trim($s) ); - - if ( $s == 'yes' || $s == 'y' ) { return true; } - else if ( $s == 'no' || $s == 'n' ) { return false; } - else { print "bad response: $s\n"; } - } - } - - function deleteContents( $dir ) { - $ff = glob( $dir . "/*" ); - if ( !$ff ) return; - - foreach ( $ff as $f ) { - if ( is_dir( $f ) && !is_link( $f ) ) $this->deleteContents( $f ); - unlink( $f ); - } - } - - function copyDir( $dir, $tgt ) { - $d = $tgt . '/' . basename( $dir ); - - if ( !file_exists( $d ) ) { - $ok = mkdir( $d ); - if ( !$ok ) { - ExtensionInstaller::error( "failed to create director $d" ); - return false; - } - } - - $ff = glob( $dir . "/*" ); - if ( $ff === false || $ff === NULL ) return false; - - foreach ( $ff as $f ) { - if ( is_dir( $f ) && !is_link( $f ) ) { - $ok = ExtensionInstaller::copyDir( $f, $d ); - if ( !$ok ) return false; - } - else { - $t = $d . '/' . basename( $f ); - $ok = copy( $f, $t ); - - if ( !$ok ) { - ExtensionInstaller::error( "failed to copy $f to $t" ); - return false; - } - } - } - - return true; - } - - function setPermissions( $dir, $dirbits, $filebits ) { - if ( !chmod( $dir, $dirbits ) ) ExtensionInstaller::warn( "faield to set permissions for $dir" ); - - $ff = glob( $dir . "/*" ); - if ( $ff === false || $ff === NULL ) return false; - - foreach ( $ff as $f ) { - $n= basename( $f ); - if ( $n{0} == '.' ) continue; #HACK: skip dot files - - if ( is_link( $f ) ) continue; #skip link - - if ( is_dir( $f ) ) { - ExtensionInstaller::setPermissions( $f, $dirbits, $filebits ); - } - else { - if ( !chmod( $f, $filebits ) ) ExtensionInstaller::warn( "faield to set permissions for $f" ); - } - } - - return true; - } - - function fetchExtension( ) { - if ( $this->source->islocal && $this->source->isdir && realpath( $this->source->path ) === $this->dir ) { - $this->note( "files are already in the extension dir" ); - return true; - } - - if ( file_exists( $this->dir ) && glob( $this->dir . "/*" ) ) { - if ( $this->confirm( "{$this->dir} exists and is not empty.\nDelete all files in that directory?" ) ) { - $this->deleteContents( $this->dir ); - } - else { - return false; - } - } - - $ok = $this->source->fetch( $this->dir ); - if ( !$ok ) return false; - - if ( !file_exists( $this->dir ) && glob( $this->dir . "/*" ) ) { - $this->error( "{$this->dir} does not exist or is empty. Something went wrong, sorry." ); - return false; - } - - if ( file_exists( $this->dir . '/README' ) ) $this->tasks[] = "read the README file in {$this->dir}"; - if ( file_exists( $this->dir . '/INSTALL' ) ) $this->tasks[] = "read the INSTALL file in {$this->dir}"; - if ( file_exists( $this->dir . '/RELEASE-NOTES' ) ) $this->tasks[] = "read the RELEASE-NOTES file in {$this->dir}"; - - #TODO: configure this smartly...? - $this->setPermissions( $this->dir, 0755, 0644 ); - - $this->note( "fetched extension to {$this->dir}" ); - return true; - } - - function patchLocalSettings( $mode ) { - #NOTE: if we get a better way to hook up extensions, that should be used instead. - - $f = $this->dir . '/install.settings'; - $t = $this->target . '/LocalSettings.php'; - - #TODO: assert version ?! - #TODO: allow custom installer scripts + sql patches - - if ( !file_exists( $f ) ) { - self::warn( "No install.settings file provided!" ); - $this->tasks[] = "Please read the instructions and edit LocalSettings.php manually to activate the extension."; - return '?'; - } - else { - self::note( "applying settings patch..." ); - } - - $settings = file_get_contents( $f ); - - if ( !$settings ) { - self::error( "failed to read settings from $f!" ); - return false; - } - - $settings = str_replace( '{{path}}', $this->incpath, $settings ); - - if ( $mode == EXTINST_NOPATCH ) { - $this->tasks[] = "Please put the following into your LocalSettings.php:" . "\n$settings\n"; - self::note( "Skipping patch phase, automatic patching is off." ); - return true; - } - - if ( $mode == EXTINST_HOTPATCH ) { - #NOTE: keep php extension for backup file! - $bak = $this->target . '/LocalSettings.install-' . $this->name . '-' . wfTimestamp(TS_MW) . '.bak.php'; - - $ok = copy( $t, $bak ); - - if ( !$ok ) { - self::warn( "failed to create backup of LocalSettings.php!" ); - return false; - } - else { - self::note( "created backup of LocalSettings.php at $bak" ); - } - } - - $localsettings = file_get_contents( $t ); - - if ( !$settings ) { - self::error( "failed to read $t for patching!" ); - return false; - } - - $marker = "<@< extension {$this->name} >@>"; - $blockpattern = "/\n\s*#\s*BEGIN\s*$marker.*END\s*$marker\s*/smi"; - - if ( preg_match( $blockpattern, $localsettings ) ) { - $localsettings = preg_replace( $blockpattern, "\n", $localsettings ); - $this->warn( "removed old configuration block for extension {$this->name}!" ); - } - - $newblock= "\n# BEGIN $marker\n$settings\n# END $marker\n"; - - $localsettings = preg_replace( "/\?>\s*$/si", "$newblock?>", $localsettings ); - - if ( $mode != EXTINST_HOTPATCH ) { - $t = $this->target . '/LocalSettings.install-' . $this->name . '-' . wfTimestamp(TS_MW) . '.php'; - } - - $ok = file_put_contents( $t, $localsettings ); - - if ( !$ok ) { - self::error( "failed to patch $t!" ); - return false; - } - else if ( $mode == EXTINST_HOTPATCH ) { - self::note( "successfully patched $t" ); - } - else { - self::note( "created patched settings file $t" ); - $this->tasks[] = "Replace your current LocalSettings.php with ".basename($t); - } - - return true; - } - - function printNotices( ) { - if ( !$this->tasks ) { - $this->note( "Installation is complete, no pending tasks" ); - } - else { - $this->note( "" ); - $this->note( "PENDING TASKS:" ); - $this->note( "" ); - - foreach ( $this->tasks as $t ) { - $this->note ( "* " . $t ); - } - - $this->note( "" ); - } - - return true; - } - -} - -$tgt = isset ( $options['target'] ) ? $options['target'] : $IP; - -$repos = @$options['repository']; -if ( !$repos ) $repos = @$options['repos']; -if ( !$repos ) $repos = @$wgExtensionInstallerRepository; - -if ( !$repos && file_exists("$tgt/.svn") && is_dir("$tgt/.svn") ) { - $svn = file_get_contents( "$tgt/.svn/entries" ); - - $m = array(); - if ( preg_match( '!url="(.*?)"!', $svn, $m ) ) { - $repos = dirname( $m[1] ) . '/extensions'; - } -} - -if ( !$repos ) $repos = 'http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions'; - -if( !isset( $args[0] ) && !@$options['list'] ) { - die( "USAGE: installExtension.php [options] [source]\n" . - "OPTIONS: \n" . - " --list list available extensions. is ignored / may be omitted.\n" . - " --repository repository to fetch extensions from. May be a local directoy,\n" . - " an SVN repository or a HTTP directory\n" . - " --target mediawiki installation directory to use\n" . - " --nopatch don't create a patched LocalSettings.php\n" . - " --hotpatch patched LocalSettings.php directly (creates a backup)\n" . - "SOURCE: specifies the package source directly. If given, the repository is ignored.\n" . - " The source my be a local file (tgz or zip) or directory, the URL of a\n" . - " remote file (tgz or zip), or a SVN path.\n" - ); -} - -$repository = InstallerRepository::makeRepository( $repos ); - -if ( isset( $options['list'] ) ) { - $repository->printListing(); - exit(0); -} - -$name = $args[0]; - -$src = isset( $args[1] ) ? $args[1] : $repository->getResource( $name ); - -#TODO: detect $source mismatching $name !! - -$mode = EXTINST_WRITEPATCH; -if ( isset( $options['nopatch'] ) || @$wgExtensionInstallerNoPatch ) { $mode = EXTINST_NOPATCH; } -else if ( isset( $options['hotpatch'] ) || @$wgExtensionInstallerHotPatch ) { $mode = EXTINST_HOTPATCH; } - -if ( !file_exists( "$tgt/LocalSettings.php" ) ) { - die("can't find $tgt/LocalSettings.php\n"); -} - -if ( $mode == EXTINST_HOTPATCH && !is_writable( "$tgt/LocalSettings.php" ) ) { - die("can't write to $tgt/LocalSettings.php\n"); -} - -if ( !file_exists( "$tgt/extensions" ) ) { - die("can't find $tgt/extensions\n"); -} - -if ( !is_writable( "$tgt/extensions" ) ) { - die("can't write to $tgt/extensions\n"); -} - -$installer = new ExtensionInstaller( $name, $src, $tgt ); - -$installer->note( "Installing extension {$installer->name} from {$installer->source->path} to {$installer->dir}" ); - -print "\n"; -print "\tTHIS TOOL IS EXPERIMENTAL!\n"; -print "\tEXPECT THE UNEXPECTED!\n"; -print "\n"; - -if ( !$installer->confirm("continue") ) die("aborted\n"); - -$ok = $installer->fetchExtension(); - -if ( $ok ) $ok = $installer->patchLocalSettings( $mode ); - -if ( $ok ) $ok = $installer->printNotices(); - -if ( $ok ) $installer->note( "$name extension installed." ); - diff --git a/maintenance/interwiki.list b/maintenance/interwiki.list new file mode 100644 index 00000000..d6abd1a7 --- /dev/null +++ b/maintenance/interwiki.list @@ -0,0 +1,97 @@ +# Based more or less on the public interwiki map from MeatballWiki +# Default interwiki prefixes... +acronym|http://www.acronymfinder.com/af-query.asp?String=exact&Acronym=$1|0 +advogato|http://www.advogato.org/$1|0 +annotationwiki|http://www.seedwiki.com/page.cfm?wikiid=368&doc=$1|0 +arxiv|http://www.arxiv.org/abs/$1|0 +c2find|http://c2.com/cgi/wiki?FindPage&value=$1|0 +cache|http://www.google.com/search?q=cache:$1|0 +commons|http://commons.wikimedia.org/wiki/$1|0 +corpknowpedia|http://corpknowpedia.org/wiki/index.php/$1|0 +dictionary|http://www.dict.org/bin/Dict?Database=*&Form=Dict1&Strategy=*&Query=$1|0 +disinfopedia|http://www.disinfopedia.org/wiki.phtml?title=$1|0 +docbook|http://wiki.docbook.org/topic/$1|0 +doi|http://dx.doi.org/$1|0 +drumcorpswiki|http://www.drumcorpswiki.com/index.php/$1|0 +dwjwiki|http://www.suberic.net/cgi-bin/dwj/wiki.cgi?$1|0 +emacswiki|http://www.emacswiki.org/cgi-bin/wiki.pl?$1|0 +elibre|http://enciclopedia.us.es/index.php/$1|0 +foldoc|http://foldoc.org/?$1|0 +foxwiki|http://fox.wikis.com/wc.dll?Wiki~$1|0 +freebsdman|http://www.FreeBSD.org/cgi/man.cgi?apropos=1&query=$1|0 +gej|http://www.esperanto.de/cgi-bin/aktivikio/wiki.pl?$1|0 +gentoo-wiki|http://gentoo-wiki.com/$1|0 +google|http://www.google.com/search?q=$1|0 +googlegroups|http://groups.google.com/groups?q=$1|0 +hammondwiki|http://www.dairiki.org/HammondWiki/$1|0 +hewikisource|http://he.wikisource.org/wiki/$1|1 +hrwiki|http://www.hrwiki.org/index.php/$1|0 +imdb|http://us.imdb.com/Title?$1|0 +jargonfile|http://sunir.org/apps/meta.pl?wiki=JargonFile&redirect=$1|0 +jspwiki|http://www.jspwiki.org/wiki/$1|0 +keiki|http://kei.ki/en/$1|0 +kmwiki|http://kmwiki.wikispaces.com/$1|0 +linuxwiki|http://linuxwiki.de/$1|0 +lojban|http://www.lojban.org/tiki/tiki-index.php?page=$1|0 +lqwiki|http://wiki.linuxquestions.org/wiki/$1|0 +lugkr|http://lug-kr.sourceforge.net/cgi-bin/lugwiki.pl?$1|0 +mathsongswiki|http://SeedWiki.com/page.cfm?wikiid=237&doc=$1|0 +meatball|http://www.usemod.com/cgi-bin/mb.pl?$1|0 +mediazilla|https://bugzilla.wikimedia.org/$1|1 +mediawikiwiki|http://www.mediawiki.org/wiki/$1|0 +memoryalpha|http://www.memory-alpha.org/en/index.php/$1|0 +metawiki|http://sunir.org/apps/meta.pl?$1|0 +metawikipedia|http://meta.wikimedia.org/wiki/$1|0 +moinmoin|http://purl.net/wiki/moin/$1|0 +mozillawiki|http://wiki.mozilla.org/index.php/$1|0 +mw|http://www.mediawiki.org/wiki/$1|0 +oeis|http://www.research.att.com/cgi-bin/access.cgi/as/njas/sequences/eisA.cgi?Anum=$1|0 +openfacts|http://openfacts.berlios.de/index.phtml?title=$1|0 +openwiki|http://openwiki.com/?$1|0 +# patwiki|http://gauss.ffii.org/$1|0 # 2008-02-27: lots of spambots +pmeg|http://www.bertilow.com/pmeg/$1.php|0 +ppr|http://c2.com/cgi/wiki?$1|0 +pythoninfo|http://wiki.python.org/moin/$1|0 +rfc|http://www.rfc-editor.org/rfc/rfc$1.txt|0 +s23wiki|http://is-root.de/wiki/index.php/$1|0 +seattlewiki|http://seattle.wikia.com/wiki/$1|0 +seattlewireless|http://seattlewireless.net/?$1|0 +senseislibrary|http://senseis.xmp.net/?$1|0 +# slashdot|http://slashdot.org/article.pl?sid=$1|0 # 2008-02-27: update me +sourceforge|http://sourceforge.net/$1|0 +squeak|http://wiki.squeak.org/squeak/$1|0 +susning|http://www.susning.nu/$1|0 +svgwiki|http://wiki.svg.org/$1|0 +tavi|http://tavi.sourceforge.net/$1|0 +tejo|http://www.tejo.org/vikio/$1|0 +tmbw|http://www.tmbw.net/wiki/$1|0 +tmnet|http://www.technomanifestos.net/?$1|0 +tmwiki|http://www.EasyTopicMaps.com/?page=$1|0 +theopedia|http://www.theopedia.com/$1|0 +twiki|http://twiki.org/cgi-bin/view/$1|0 +uea|http://www.tejo.org/uea/$1|0 +unreal|http://wiki.beyondunreal.com/wiki/$1|0 +usemod|http://www.usemod.com/cgi-bin/wiki.pl?$1|0 +vinismo|http://vinismo.com/en/$1|0 +webseitzwiki|http://webseitz.fluxent.com/wiki/$1|0 +why|http://clublet.com/c/c/why?$1|0 +wiki|http://c2.com/cgi/wiki?$1|0 +wikia|http://www.wikia.com/wiki/$1|0 +wikibooks|http://en.wikibooks.org/wiki/$1|1 +wikicities|http://www.wikia.com/wiki/$1|0 +wikif1|http://www.wikif1.org/$1|0 +wikihow|http://www.wikihow.com/$1|0 +wikinfo|http://www.wikinfo.org/index.php/$1|0 +wikimedia|http://wikimediafoundation.org/wiki/$1|0 +wikinews|http://en.wikinews.org/wiki/$1|1 +wikiquote|http://en.wikiquote.org/wiki/$1|1 +wikipedia|http://en.wikipedia.org/wiki/$1|1 +wikisource|http://wikisource.org/wiki/$1|1 +wikispecies|http://species.wikimedia.org/wiki/$1|1 +wikitravel|http://wikitravel.org/en/$1|0 +wikiversity|http://en.wikiversity.org/wiki/$1|1 +wikt|http://en.wiktionary.org/wiki/$1|1 +wiktionary|http://en.wiktionary.org/wiki/$1|1 +wlug|http://www.wlug.org.nz/$1|0 +zwiki|http://zwiki.org/$1|0 +zzz wiki|http://wiki.zzz.ee/index.php/$1|0 diff --git a/maintenance/interwiki.sql b/maintenance/interwiki.sql index 2ce0e23f..6efc1e0e 100644 --- a/maintenance/interwiki.sql +++ b/maintenance/interwiki.sql @@ -87,7 +87,7 @@ REPLACE INTO /*$wgDBprefix*/interwiki (iw_prefix,iw_url,iw_local) VALUES ('wikimedia','http://wikimediafoundation.org/wiki/$1',0), ('wikinews','http://en.wikinews.org/wiki/$1',1), ('wikiquote','http://en.wikiquote.org/wiki/$1',1), -('wikipedia', 'http://en.wikipedia.org/wiki/$1', 1), +('wikipedia','http://en.wikipedia.org/wiki/$1',1), ('wikisource','http://wikisource.org/wiki/$1',1), ('wikispecies','http://species.wikimedia.org/wiki/$1',1), ('wikitravel','http://wikitravel.org/en/$1',0), diff --git a/maintenance/lag.php b/maintenance/lag.php index 47b4c47b..fdc74293 100644 --- a/maintenance/lag.php +++ b/maintenance/lag.php @@ -6,7 +6,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class DatabaseLag extends Maintenance { public function __construct() { @@ -19,18 +19,18 @@ class DatabaseLag extends Maintenance { if ( $this->hasOption( 'r' ) ) { $lb = wfGetLB(); echo 'time '; - for( $i = 1; $i < $lb->getServerCount(); $i++ ) { + for ( $i = 1; $i < $lb->getServerCount(); $i++ ) { $hostname = $lb->getServerName( $i ); printf( "%-12s ", $hostname ); } echo "\n"; - while( 1 ) { + while ( 1 ) { $lb->clearLagTimeCache(); $lags = $lb->getLagTimes(); unset( $lags[0] ); echo gmdate( 'H:i:s' ) . ' '; - foreach( $lags as $i => $lag ) { + foreach ( $lags as $lag ) { printf( "%-12s " , $lag === false ? 'false' : $lag ); } echo "\n"; @@ -39,7 +39,7 @@ class DatabaseLag extends Maintenance { } else { $lb = wfGetLB(); $lags = $lb->getLagTimes(); - foreach( $lags as $i => $lag ) { + foreach ( $lags as $i => $lag ) { $name = $lb->getServerName( $i ); $this->output( sprintf( "%-20s %s\n" , $name, $lag === false ? 'false' : $lag ) ); } @@ -48,4 +48,4 @@ class DatabaseLag extends Maintenance { } $maintClass = "DatabaseLag"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/language/StatOutputs.php b/maintenance/language/StatOutputs.php index 169a4d41..b8e28302 100644 --- a/maintenance/language/StatOutputs.php +++ b/maintenance/language/StatOutputs.php @@ -1,12 +1,12 @@ - * @author Ashar Voultoiz + * @author Ashar Voultoiz */ /** A general output object. Need to be overriden */ @@ -31,12 +31,11 @@ class statsOutput { /** Outputs WikiText */ class wikiStatsOutput extends statsOutput { function heading() { - global $IP; $version = SpecialVersion::getVersion( 'nodb' ); echo "'''Statistics are based on:''' " . $version . "\n\n"; echo "'''Note:''' These statistics can be generated by running php maintenance/language/transstat.php.\n\n"; echo "For additional information on specific languages (the message names, the actual problems, etc.), run php maintenance/language/checkLanguage.php --lang=foo.\n\n"; - echo '{| class="sortable wikitable" border="2" cellpadding="4" cellspacing="0" style="background-color: #F9F9F9; border: 1px #AAAAAA solid; border-collapse: collapse; clear:both;" width="100%"'."\n"; + echo '{| class="sortable wikitable" border="2" cellpadding="4" cellspacing="0" style="background-color: #F9F9F9; border: 1px #AAAAAA solid; border-collapse: collapse; clear:both;" width="100%"' . "\n"; } function footer() { echo "|}\n"; @@ -48,11 +47,15 @@ class wikiStatsOutput extends statsOutput { echo ''; } function element( $in, $heading = false ) { - echo ($heading ? '!' : '|') . "$in\n"; + echo ( $heading ? '!' : '|' ) . "$in\n"; } function formatPercent( $subset, $total, $revert = false, $accuracy = 2 ) { - $v = @round(255 * $subset / $total); + $v = @round( 255 * $subset / $total ); if ( $revert ) { + # Weigh reverse with factor 20 so coloring takes effect more quickly as + # this option is used solely for reporting 'bad' percentages. + $v = $v * 20; + if ( $v > 255 ) $v = 255; $v = 255 - $v; } if ( $v < 128 ) { @@ -61,21 +64,21 @@ class wikiStatsOutput extends statsOutput { $green = sprintf( '%02X', 2 * $v ); } else { # Yellow to Green - $red = sprintf('%02X', 2 * ( 255 - $v ) ); + $red = sprintf( '%02X', 2 * ( 255 - $v ) ); $green = 'FF'; } $blue = '00'; $color = $red . $green . $blue; - $percent = statsOutput::formatPercent( $subset, $total, $revert, $accuracy ); - return 'bgcolor="#'. $color .'"|'. $percent; + $percent = parent::formatPercent( $subset, $total, $revert, $accuracy ); + return 'bgcolor="#' . $color . '"|' . $percent; } } /** Output text. To be used on a terminal for example. */ class textStatsOutput extends statsOutput { function element( $in, $heading = false ) { - echo $in."\t"; + echo $in . "\t"; } function blockend() { echo "\n"; diff --git a/maintenance/language/alltrans.php b/maintenance/language/alltrans.php index 420386fd..f872e6a6 100644 --- a/maintenance/language/alltrans.php +++ b/maintenance/language/alltrans.php @@ -20,7 +20,7 @@ * @ingroup MaintenanceLanguage */ -require_once( dirname(__FILE__) . '/../Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/../Maintenance.php' ); class AllTrans extends Maintenance { public function __construct() { @@ -29,12 +29,12 @@ class AllTrans extends Maintenance { } public function execute() { - $wgEnglishMessages = array_keys( Language::getMessagesFor( 'en' ) ); - foreach( $wgEnglishMessages as $key ) { + $englishMessages = array_keys( Language::getMessagesFor( 'en' ) ); + foreach ( $englishMessages as $key ) { $this->output( "$key\n" ); } } } $maintClass = "AllTrans"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/language/checkDupeMessages.php b/maintenance/language/checkDupeMessages.php index 81eafccf..ea9d5fb7 100644 --- a/maintenance/language/checkDupeMessages.php +++ b/maintenance/language/checkDupeMessages.php @@ -5,22 +5,22 @@ * @ingroup MaintenanceLanguage */ -require_once( dirname(__FILE__).'/../commandLine.inc' ); -$messagesDir = dirname(__FILE__).'/../../languages/messages/'; +require_once( dirname( __FILE__ ) . '/../commandLine.inc' ); +$messagesDir = dirname( __FILE__ ) . '/../../languages/messages/'; $runTest = false; $run = false; $runMode = 'text'; // Check parameters -if ( isset( $options['lang'] ) && isset( $options['clang'] )) { - if (!isset( $options['mode'] )) { +if ( isset( $options['lang'] ) && isset( $options['clang'] ) ) { + if ( !isset( $options['mode'] ) ) { $runMode = 'text'; } else { - if (!strcmp($options['mode'],'wiki')) { + if ( !strcmp( $options['mode'], 'wiki' ) ) { $runMode = 'wiki'; - } else if (!strcmp($options['mode'],'php')) { + } else if ( !strcmp( $options['mode'], 'php' ) ) { $runMode = 'php'; - } else if (!strcmp($options['mode'],'raw')) { + } else if ( !strcmp( $options['mode'], 'raw' ) ) { $runMode = 'raw'; } else { } @@ -45,11 +45,11 @@ TEXT; if ( $runTest ) { $langCode = $options['lang']; $langCodeC = $options['clang']; - $langCodeF = ucfirst(strtolower(preg_replace('/-/','_',$langCode))); - $langCodeFC = ucfirst(strtolower(preg_replace('/-/','_',$langCodeC))); - $messagesFile = $messagesDir.'Messages'.$langCodeF.'.php'; - $messagesFileC = $messagesDir.'Messages'.$langCodeFC.'.php'; - if (file_exists($messagesFile) && file_exists($messagesFileC)) { + $langCodeF = ucfirst( strtolower( preg_replace( '/-/', '_', $langCode ) ) ); + $langCodeFC = ucfirst( strtolower( preg_replace( '/-/', '_', $langCodeC ) ) ); + $messagesFile = $messagesDir . 'Messages' . $langCodeF . '.php'; + $messagesFileC = $messagesDir . 'Messages' . $langCodeFC . '.php'; + if ( file_exists( $messagesFile ) && file_exists( $messagesFileC ) ) { $run = true; } else { @@ -59,60 +59,60 @@ if ( $runTest ) { // Run to check the dupes if ( $run ) { - if (!strcmp($runMode,'wiki')) { + if ( !strcmp( $runMode, 'wiki' ) ) { $runMode = 'wiki'; - } else if (!strcmp($runMode,'raw')) { + } else if ( !strcmp( $runMode, 'raw' ) ) { $runMode = 'raw'; } include( $messagesFile ); - $messageExist = isset($messages); - if ($messageExist) + $messageExist = isset( $messages ); + if ( $messageExist ) $wgMessages[$langCode] = $messages; include( $messagesFileC ); - $messageCExist = isset($messages); - if ($messageCExist) + $messageCExist = isset( $messages ); + if ( $messageCExist ) $wgMessages[$langCodeC] = $messages; $count = 0; - if (($messageExist) && ($messageCExist)) { + if ( ( $messageExist ) && ( $messageCExist ) ) { - if (!strcmp($runMode,'php')) { - print(" $value) { - foreach ($wgMessages[$langCode] as $ckey => $cvalue) { - if (!strcmp($key,$ckey)) { - if ((!strcmp($key,$ckey)) && (!strcmp($value,$cvalue))) { - if (!strcmp($runMode,'raw')) { - print("$key\n"); - } else if (!strcmp($runMode,'php')) { - print("'$key' => '',\n"); - } else if (!strcmp($runMode,'wiki')) { - $uKey = ucfirst($key); - print("* MediaWiki:$uKey/$langCode\n"); + foreach ( $wgMessages[$langCodeC] as $key => $value ) { + foreach ( $wgMessages[$langCode] as $ckey => $cvalue ) { + if ( !strcmp( $key, $ckey ) ) { + if ( ( !strcmp( $key, $ckey ) ) && ( !strcmp( $value, $cvalue ) ) ) { + if ( !strcmp( $runMode, 'raw' ) ) { + print( "$key\n" ); + } else if ( !strcmp( $runMode, 'php' ) ) { + print( "'$key' => '',\n" ); + } else if ( !strcmp( $runMode, 'wiki' ) ) { + $uKey = ucfirst( $key ); + print( "* MediaWiki:$uKey/$langCode\n" ); } else { - print("* $key\n"); + print( "* $key\n" ); } $count++; } } } } - if (!strcmp($runMode,'php')) { - print(");\n"); + if ( !strcmp( $runMode, 'php' ) ) { + print( ");\n" ); } - if (!strcmp($runMode,'text')) { - if ($count == 1) { + if ( !strcmp( $runMode, 'text' ) ) { + if ( $count == 1 ) { echo "\nThere are $count duplicated message in $langCode, against to $langCodeC.\n"; } else { echo "\nThere are $count duplicated messages in $langCode, against to $langCodeC.\n"; } } } else { - if (!$messageExist) + if ( !$messageExist ) echo "There are no messages defined in $langCode.\n"; - if (!$messageCExist) + if ( !$messageCExist ) echo "There are no messages defined in $langCodeC.\n"; - } + } } diff --git a/maintenance/language/checkExtensions.php b/maintenance/language/checkExtensions.php index ed1855c1..c05cf193 100644 --- a/maintenance/language/checkExtensions.php +++ b/maintenance/language/checkExtensions.php @@ -6,11 +6,11 @@ * @ingroup MaintenanceLanguage */ -require_once( dirname(__FILE__).'/../commandLine.inc' ); +require_once( dirname( __FILE__ ) . '/../commandLine.inc' ); require_once( 'languages.inc' ); require_once( 'checkLanguage.inc' ); -if( !class_exists( 'MessageGroups' ) || !class_exists( 'PremadeMediawikiExtensionGroups' ) ) { +if ( !class_exists( 'MessageGroups' ) || !class_exists( 'PremadeMediawikiExtensionGroups' ) ) { echo <<checks, $this->nonMessageChecks() ) ); foreach ( $this->results as $code => $results ) { @@ -443,8 +444,8 @@ EOL; * @return True if there are any results, false if not. */ protected function isEmpty() { - foreach( $this->results as $code => $results ) { - foreach( $results as $check => $messages ) { + foreach( $this->results as $results ) { + foreach( $results as $messages ) { if( !empty( $messages ) ) { return false; } @@ -454,6 +455,9 @@ EOL; } } +/** + * @ingroup MaintenanceLanguage + */ class CheckExtensionsCLI extends CheckLanguageCLI { private $extensions; diff --git a/maintenance/language/checkLanguage.php b/maintenance/language/checkLanguage.php index 7a4d3dd2..9396e8c1 100644 --- a/maintenance/language/checkLanguage.php +++ b/maintenance/language/checkLanguage.php @@ -6,7 +6,7 @@ * @ingroup MaintenanceLanguage */ -require_once( dirname(__FILE__).'/../commandLine.inc' ); +require_once( dirname( __FILE__ ) . '/../commandLine.inc' ); require_once( 'checkLanguage.inc' ); require_once( 'languages.inc' ); @@ -14,6 +14,6 @@ $cli = new CheckLanguageCLI( $options ); try { $cli->execute(); -} catch( MWException $e ) { +} catch ( MWException $e ) { print 'Error: ' . $e->getMessage() . "\n"; } diff --git a/maintenance/language/countMessages.php b/maintenance/language/countMessages.php index 826c43cb..f949ddc2 100644 --- a/maintenance/language/countMessages.php +++ b/maintenance/language/countMessages.php @@ -20,7 +20,7 @@ * @ingroup MaintenanceLanguage */ -require_once( dirname(__FILE__) . '/../Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/../Maintenance.php' ); class CountMessages extends Maintenance { public function __construct() { @@ -35,12 +35,12 @@ class CountMessages extends Maintenance { $nonZero = 0; foreach ( glob( "$dir/*.php" ) as $file ) { $baseName = basename( $file ); - if( !preg_match( '/Messages([A-Z][a-z_]+)\.php$/', $baseName, $m ) ) { + if ( !preg_match( '/Messages([A-Z][a-z_]+)\.php$/', $baseName, $m ) ) { continue; } - $code = str_replace( '_', '-', strtolower( $m[1] ) ); + $numMessages = $this->getNumMessages( $file ); - //print "$code: $numMessages\n"; + // print "$code: $numMessages\n"; $total += $numMessages; if ( $numMessages > 0 ) { $nonZero ++; @@ -62,4 +62,4 @@ class CountMessages extends Maintenance { } $maintClass = "CountMessages"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/language/date-formats.php b/maintenance/language/date-formats.php index 54a6a26d..04f5e8ba 100644 --- a/maintenance/language/date-formats.php +++ b/maintenance/language/date-formats.php @@ -20,7 +20,7 @@ * @ingroup MaintenanceLanguage */ -require_once( dirname(__FILE__) . '/../Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/../Maintenance.php' ); class DateFormats extends Maintenance { @@ -60,7 +60,7 @@ class DateFormats extends Maintenance { } $this->output( $lang->time( $this->ts, false, $pref ) ); } - $this->output( "\n$code both: " ); + $this->output( "\n$code both: " ); foreach ( $prefs as $index => $pref ) { if ( $index > 0 ) { $this->output( ' | ' ); @@ -73,4 +73,4 @@ class DateFormats extends Maintenance { } $maintClass = "DateFormats"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/language/diffLanguage.php b/maintenance/language/diffLanguage.php deleted file mode 100644 index bbdb8653..00000000 --- a/maintenance/language/diffLanguage.php +++ /dev/null @@ -1,159 +0,0 @@ - and others -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - -/** - * Usage: php DiffLanguage.php [lang [file]] - * - * lang: Enter the language code following "Language" of the LanguageXX.php you - * want to check. If using linux you might need to follow case aka Zh and not - * zh. - * - * file: A php language file you want to include to compare mediawiki - * Language{Lang}.php against (for example Special:Allmessages PHP output). - * - * The goal is to get a list of messages not yet localised in a languageXX.php - * file using the language.php file as reference. - * - * The script then print a list of wgAllMessagesXX keys that aren't localised, a - * percentage of messages correctly localised and the number of messages to be - * translated. - * - * @file - * @ingroup MaintenanceLanguage - */ - -/** This script run from the commandline */ -require_once( dirname(__FILE__).'/../parserTests.inc' ); -require_once( dirname(__FILE__).'/../commandLine.inc' ); - -if( isset($options['help']) ) { usage(); wfDie(); } - -$wgLanguageCode = ucfirstlcrest($wgLanguageCode); -/** Language messages we will use as reference. By default 'en' */ -$referenceMessages = $wgAllMessagesEn; -$referenceLanguage = 'En'; -$referenceFilename = 'Language'.$referenceLanguage.'.php'; -/** Language messages we will test. */ -$testMessages = array(); -$testLanguage = ''; -/** whereas we use an external language file */ -$externalRef = false; - -# FUNCTIONS -/** @todo more informations !! */ -function usage() { -echo 'php DiffLanguage.php [lang [file]] [--color=(yes|no|light)]'."\n"; -} - -/** Return a given string with first letter upper case, the rest lowercase */ -function ucfirstlcrest($string) { - return strtoupper(substr($string,0,1)).strtolower(substr($string,1)); -} - -/** - * Return a $wgAllmessages array shipped in MediaWiki - * @param $languageCode String: formated language code - * @return array The MediaWiki default $wgAllMessages array requested - */ -function getMediawikiMessages($languageCode = 'En') { - - $foo = "wgAllMessages$languageCode"; - global $$foo; - global $wgSkinNamesEn; // potentially unused global declaration? - - // it might already be loaded in LocalSettings.php - if(!isset($$foo)) { - global $IP; - $langFile = $IP.'/languages/classes/Language'.$languageCode.'.php'; - if (file_exists( $langFile ) ) { - print "Including $langFile\n"; - include($langFile); - } else wfDie("ERROR: The file $langFile does not exist !\n"); - } - return $$foo; -} - -/** - * Return a $wgAllmessages array in a given file. Language of the array - * need to be given cause we can not detect which language it provides - * @param $filename String: filename of the file containing a message array - * @param $languageCode String: language of the external array - * @return array A $wgAllMessages array from an external file. - */ -function getExternalMessages($filename, $languageCode) { - print "Including external file $filename.\n"; - include($filename); - $foo = "wgAllMessages$languageCode"; - return $$foo; -} - -# MAIN ENTRY -if ( isset($args[0]) ) { - $lang = ucfirstlcrest($args[0],1); - - // eventually against another language file we will use as reference instead - // of the default english language. - if( isset($args[1])) { - // we assume the external file contain an array of messages for the - // lang we are testing - $referenceMessages = getExternalMessages( $args[1], $lang ); - $referenceLanguage = $lang; - $referenceFilename = $args[1]; - $externalRef = true; - } - - // Load datas from MediaWiki - $testMessages = getMediawikiMessages($lang); - $testLanguage = $lang; -} else { - usage(); - wfDie(); -} - -/** parsertest is used to do differences */ -$myParserTest = new ParserTest(); - -# Get all references messages and check if they exist in the tested language -$i = 0; - -$msg = "MW Language{$testLanguage}.php against "; -if($externalRef) { $msg .= 'external file '; } -else { $msg .= 'internal file '; } -$msg .= $referenceFilename.' ('.$referenceLanguage."):\n----\n"; -echo $msg; - -// process messages -foreach($referenceMessages as $index => $ref) -{ - // message is not localized - if(!(isset($testMessages[$index]))) { - $i++; - print "'$index' => \"$ref\",\n"; - // Messages in the same language differs - } elseif( ($lang == $referenceLanguage) AND ($testMessages[$index] != $ref)) { - print "\n$index differs:\n"; - print $myParserTest->quickDiff($testMessages[$index],$ref,'tested','reference'); - } -} - -echo "\n----\n".$msg; -echo "$referenceLanguage language is complete at ".number_format((100 - $i/count($wgAllMessagesEn) * 100),2)."%\n"; -echo "$i unlocalised messages of the ".count($wgAllMessagesEn)." messages available.\n"; - diff --git a/maintenance/language/digit2html.php b/maintenance/language/digit2html.php index 54630af0..a80ac014 100644 --- a/maintenance/language/digit2html.php +++ b/maintenance/language/digit2html.php @@ -18,17 +18,17 @@ * @ingroup MaintenanceLanguage */ -require_once( dirname(__FILE__).'/../Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/../Maintenance.php' ); class Digit2Html extends Maintenance { # A list of unicode numerals is available at: # http://www.fileformat.info/info/unicode/category/Nd/list.htm - private $mLangs = array( - 'Ar', 'As', 'Bh', 'Bo', 'Dz', - 'Fa', 'Gu', 'Hi', 'Km', 'Kn', - 'Ks', 'Lo', 'Ml', 'Mr', 'Ne', - 'New', 'Or', 'Pa', 'Pi', 'Sa' + private $mLangs = array( + 'Ar', 'As', 'Bh', 'Bo', 'Dz', + 'Fa', 'Gu', 'Hi', 'Km', 'Kn', + 'Ks', 'Lo', 'Ml', 'Mr', 'Ne', + 'New', 'Or', 'Pa', 'Pi', 'Sa' ); public function __construct() { @@ -37,18 +37,18 @@ class Digit2Html extends Maintenance { } public function execute() { - foreach( $this->mLangs as $code ) { + foreach ( $this->mLangs as $code ) { $filename = Language::getMessagesFileName( $code ); $this->output( "Loading language [$code] ... " ); unset( $digitTransformTable ); require_once( $filename ); - if( !isset( $digitTransformTable ) ) { + if ( !isset( $digitTransformTable ) ) { $this->error( "\$digitTransformTable not found for lang: $code" ); continue; } $this->output( "OK\n\$digitTransformTable = array(\n" ); - foreach( $digitTransformTable as $latin => $translation ) { + foreach ( $digitTransformTable as $latin => $translation ) { $htmlent = utf8ToHexSequence( $translation ); $this->output( "'$latin' => '$translation', # &#x$htmlent;\n" ); } @@ -58,4 +58,4 @@ class Digit2Html extends Maintenance { } $maintClass = "Digit2Html"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/language/dumpMessages.php b/maintenance/language/dumpMessages.php index a0f0a9ab..9bdda09d 100644 --- a/maintenance/language/dumpMessages.php +++ b/maintenance/language/dumpMessages.php @@ -22,7 +22,7 @@ * @todo Make this more useful, right now just dumps $wgContentLang */ -require_once( dirname(__FILE__) . '/../Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/../Maintenance.php' ); class DumpMessages extends Maintenance { public function __construct() { @@ -31,6 +31,8 @@ class DumpMessages extends Maintenance { } public function execute() { + global $wgVersion; + $messages = array(); foreach ( array_keys( Language::getMessagesFor( 'en' ) ) as $key ) { $messages[$key] = wfMsg( $key ); @@ -41,4 +43,4 @@ class DumpMessages extends Maintenance { } $maintClass = "DumpMessages"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/language/function-list.php b/maintenance/language/function-list.php index f0c398a6..7985f37d 100644 --- a/maintenance/language/function-list.php +++ b/maintenance/language/function-list.php @@ -7,15 +7,15 @@ define( 'MEDIAWIKI', 1 ); define( 'NOT_REALLY_MEDIAWIKI', 1 ); -class Language {} +class Language { } foreach ( glob( 'Language*.php' ) as $file ) { if ( $file != 'Language.php' ) { require_once( $file ); } } -$removedFunctions = array( 'date', 'time', 'timeanddate', 'formatMonth', 'formatDay', - 'getMonthName', 'getMonthNameGen', 'getMonthAbbreviation', 'getWeekdayName', +$removedFunctions = array( 'date', 'time', 'timeanddate', 'formatMonth', 'formatDay', + 'getMonthName', 'getMonthNameGen', 'getMonthAbbreviation', 'getWeekdayName', 'userAdjust', 'dateFormat', 'timeSeparator', 'timeDateSeparator', 'timeBeforeDate', 'monthByLatinNumber', 'getSpecialMonthName', diff --git a/maintenance/language/generateCollationData.php b/maintenance/language/generateCollationData.php new file mode 100644 index 00000000..68ad2ddf --- /dev/null +++ b/maintenance/language/generateCollationData.php @@ -0,0 +1,381 @@ +addOption( 'data-dir', 'A directory on the local filesystem ' . + 'containing allkeys.txt and ucd.all.grouped.xml from unicode.org', + false, true ); + $this->addOption( 'debug-output', 'Filename for sending debug output to', + false, true ); + } + + public function execute() { + $this->dataDir = $this->getOption( 'data-dir', '.' ); + if ( !file_exists( "{$this->dataDir}/allkeys.txt" ) ) { + $this->error( "Unable to find allkeys.txt. Please download it from " . + "http://www.unicode.org/Public/UCA/latest/allkeys.txt and specify " . + "its location with --data-dir=" ); + exit( 1 ); + } + if ( !file_exists( "{$this->dataDir}/ucd.all.grouped.xml" ) ) { + $this->error( "Unable to find ucd.all.grouped.xml. Please download it " . + "from http://www.unicode.org/Public/6.0.0/ucdxml/ucd.all.grouped.zip " . + "and specify its location with --data-dir=" ); + exit( 1 ); + } + $debugOutFileName = $this->getOption( 'debug-output' ); + if ( $debugOutFileName ) { + $this->debugOutFile = fopen( $debugOutFileName, 'w' ); + if ( !$this->debugOutFile ) { + $this->error( "Unable to open debug output file for writing" ); + exit( 1 ); + } + } + $this->loadUcd(); + $this->generateFirstChars(); + } + + function loadUcd() { + $uxr = new UcdXmlReader( "{$this->dataDir}/ucd.all.grouped.xml" ); + $uxr->readChars( array( $this, 'charCallback' ) ); + } + + function charCallback( $data ) { + // Skip non-printable characters + $category = substr( $data['gc'], 0, 1 ); + if ( strpos( 'LNPS', $category ) === false ) { + return; + } + $cp = hexdec( $data['cp'] ); + + // Skip the CJK ideograph blocks, as an optimisation measure. + // UCA doesn't sort them properly anyway, without tailoring. + if ( IcuCollation::isCjk( $cp ) ) { + return; + } + + // Skip the composed Hangul syllables, we will use the bare Jamo + // as first letters + if ( $data['block'] == 'Hangul Syllables' ) { + return; + } + + // Calculate implicit weight per UTS #10 v6.0.0, sec 7.1.3 + if ( $data['UIdeo'] === 'Y' ) { + if ( $data['block'] == 'CJK Unified Ideographs' + || $data['block'] == 'CJK Compatibility Ideographs' ) + { + $base = 0xFB40; + } else { + $base = 0xFB80; + } + } else { + $base = 0xFBC0; + } + $a = $base + ( $cp >> 15 ); + $b = ( $cp & 0x7fff ) | 0x8000; + + $this->weights[$cp] = sprintf( ".%04X.%04X", $a, $b ); + + if ( $data['dm'] !== '#' ) { + $this->mappedChars[$cp] = true; + } + + if ( $cp % 4096 == 0 ) { + print "{$data['cp']}\n"; + } + } + + function generateFirstChars() { + $file = fopen( "{$this->dataDir}/allkeys.txt", 'r' ); + if ( !$file ) { + $this->error( "Unable to open allkeys.txt" ); + exit( 1 ); + } + global $IP; + $outFile = fopen( "$IP/serialized/first-letters-root.ser", 'w' ); + if ( !$outFile ) { + $this->error( "Unable to open output file first-letters-root.ser" ); + exit( 1 ); + } + + $goodTertiaryChars = array(); + + // For each character with an entry in allkeys.txt, overwrite the implicit + // entry in $this->weights that came from the UCD. + // Also gather a list of tertiary weights, for use in selecting the group header + while ( false !== ( $line = fgets( $file ) ) ) { + // We're only interested in single-character weights, pick them out with a regex + $line = trim( $line ); + if ( !preg_match( '/^([0-9A-F]+)\s*;\s*([^#]*)/', $line, $m ) ) { + continue; + } + + $cp = hexdec( $m[1] ); + $allWeights = trim( $m[2] ); + $primary = ''; + $tertiary = ''; + + if ( !isset( $this->weights[$cp] ) ) { + // Non-printable, ignore + continue; + } + foreach ( StringUtils::explode( '[', $allWeights ) as $weightStr ) { + preg_match_all( '/[*.]([0-9A-F]+)/', $weightStr, $m ); + if ( !empty( $m[1] ) ) { + if ( $m[1][0] !== '0000' ) { + $primary .= '.' . $m[1][0]; + } + if ( $m[1][2] !== '0000' ) { + $tertiary .= '.' . $m[1][2]; + } + } + } + $this->weights[$cp] = $primary; + if ( $tertiary === '.0008' + || $tertiary === '.000E' ) + { + $goodTertiaryChars[$cp] = true; + } + } + fclose( $file ); + + // Identify groups of characters with the same primary weight + $this->groups = array(); + asort( $this->weights, SORT_STRING ); + $prevWeight = reset( $this->weights ); + $group = array(); + foreach ( $this->weights as $cp => $weight ) { + if ( $weight !== $prevWeight ) { + $this->groups[$prevWeight] = $group; + $prevWeight = $weight; + if ( isset( $this->groups[$weight] ) ) { + $group = $this->groups[$weight]; + } else { + $group = array(); + } + } + $group[] = $cp; + } + if ( $group ) { + $this->groups[$prevWeight] = $group; + } + + // If one character has a given primary weight sequence, and a second + // character has a longer primary weight sequence with an initial + // portion equal to the first character, then remove the second + // character. This avoids having characters like U+A732 (double A) + // polluting the basic latin sort area. + $prevWeights = array(); + foreach ( $this->groups as $weight => $group ) { + if ( preg_match( '/(\.[0-9A-F]*)\./', $weight, $m ) ) { + if ( isset( $this->groups[$m[1]] ) ) { + unset( $this->groups[$weight] ); + } + } + } + + ksort( $this->groups, SORT_STRING ); + + // Identify the header character in each group + $headerChars = array(); + $prevChar = "\000"; + $tertiaryCollator = new Collator( 'root' ); + $primaryCollator = new Collator( 'root' ); + $primaryCollator->setStrength( Collator::PRIMARY ); + $numOutOfOrder = 0; + foreach ( $this->groups as $weight => $group ) { + $uncomposedChars = array(); + $goodChars = array(); + foreach ( $group as $cp ) { + if ( isset( $goodTertiaryChars[$cp] ) ) { + $goodChars[] = $cp; + } + if ( !isset( $this->mappedChars[$cp] ) ) { + $uncomposedChars[] = $cp; + } + } + $x = array_intersect( $goodChars, $uncomposedChars ); + if ( !$x ) { + $x = $uncomposedChars; + if ( !$x ) { + $x = $group; + } + } + + // Use ICU to pick the lowest sorting character in the selection + $tertiaryCollator->sort( $x ); + $cp = $x[0]; + + $char = codepointToUtf8( $cp ); + $headerChars[] = $char; + if ( $primaryCollator->compare( $char, $prevChar ) <= 0 ) { + $numOutOfOrder ++; + /* + printf( "Out of order: U+%05X > U+%05X\n", + utf8ToCodepoint( $prevChar ), + utf8ToCodepoint( $char ) ); + */ + } + $prevChar = $char; + + if ( $this->debugOutFile ) { + fwrite( $this->debugOutFile, sprintf( "%05X %s %s (%s)\n", $cp, $weight, $char, + implode( ' ', array_map( 'codepointToUtf8', $group ) ) ) ); + } + } + + print "Out of order: $numOutOfOrder / " . count( $headerChars ) . "\n"; + + fwrite( $outFile, serialize( $headerChars ) ); + } +} + +class UcdXmlReader { + var $fileName; + var $callback; + var $groupAttrs; + var $xml; + var $blocks = array(); + var $currentBlock; + + function __construct( $fileName ) { + $this->fileName = $fileName; + } + + public function readChars( $callback ) { + $this->getBlocks(); + $this->currentBlock = reset( $this->blocks ); + $xml = $this->open(); + $this->callback = $callback; + + while ( $xml->name !== 'repertoire' && $xml->next() ); + + while ( $xml->read() ) { + if ( $xml->nodeType == XMLReader::ELEMENT ) { + if ( $xml->name === 'group' ) { + $this->groupAttrs = $this->readAttributes(); + } elseif ( $xml->name === 'char' ) { + $this->handleChar(); + } + } elseif ( $xml->nodeType === XMLReader::END_ELEMENT ) { + if ( $xml->name === 'group' ) { + $this->groupAttrs = array(); + } + } + } + $xml->close(); + } + + protected function open() { + $this->xml = new XMLReader; + $this->xml->open( $this->fileName ); + if ( !$this->xml ) { + throw new MWException( __METHOD__.": unable to open {$this->fileName}" ); + } + while ( $this->xml->name !== 'ucd' && $this->xml->read() ); + $this->xml->read(); + return $this->xml; + } + + /** + * Read the attributes of the current element node and return them + * as an array + */ + protected function readAttributes() { + $attrs = array(); + while ( $this->xml->moveToNextAttribute() ) { + $attrs[$this->xml->name] = $this->xml->value; + } + return $attrs; + } + + protected function handleChar() { + $attrs = $this->readAttributes() + $this->groupAttrs; + if ( isset( $attrs['cp'] ) ) { + $first = $last = hexdec( $attrs['cp'] ); + } else { + $first = hexdec( $attrs['first-cp'] ); + $last = hexdec( $attrs['last-cp'] ); + unset( $attrs['first-cp'] ); + unset( $attrs['last-cp'] ); + } + + for ( $cp = $first; $cp <= $last; $cp++ ) { + $hexCp = sprintf( "%04X", $cp ); + foreach ( array( 'na', 'na1' ) as $nameProp ) { + if ( isset( $attrs[$nameProp] ) ) { + $attrs[$nameProp] = str_replace( '#', $hexCp, $attrs[$nameProp] ); + } + } + + while ( $this->currentBlock ) { + if ( $cp < $this->currentBlock[0] ) { + break; + } elseif ( $cp <= $this->currentBlock[1] ) { + $attrs['block'] = key( $this->blocks ); + break; + } else { + $this->currentBlock = next( $this->blocks ); + } + } + + $attrs['cp'] = $hexCp; + call_user_func( $this->callback, $attrs ); + } + } + + public function getBlocks() { + if ( $this->blocks ) { + return $this->blocks; + } + + $xml = $this->open(); + while ( $xml->name !== 'blocks' && $xml->read() ); + + while ( $xml->read() ) { + if ( $xml->nodeType == XMLReader::ELEMENT ) { + if ( $xml->name === 'block' ) { + $attrs = $this->readAttributes(); + $first = hexdec( $attrs['first-cp'] ); + $last = hexdec( $attrs['last-cp'] ); + $this->blocks[$attrs['name']] = array( $first, $last ); + } + } + } + $xml->close(); + return $this->blocks; + } + +} + +$maintClass = 'GenerateCollationData'; +require_once( DO_MAINTENANCE ); + diff --git a/maintenance/language/generateNormalizerData.php b/maintenance/language/generateNormalizerData.php index d6b7aaa6..cb9910f3 100644 --- a/maintenance/language/generateNormalizerData.php +++ b/maintenance/language/generateNormalizerData.php @@ -87,8 +87,8 @@ class GenerateNormalizerData extends Maintenance { // No decomposition continue; } - if ( !preg_match( '/^ *(<\w*>) +([0-9A-F ]*)$/', - $data['Decomposition_Type_Mapping'], $m ) ) + if ( !preg_match( '/^ *(<\w*>) +([0-9A-F ]*)$/', + $data['Decomposition_Type_Mapping'], $m ) ) { $this->error( "Can't parse Decomposition_Type/Mapping on line $lineNum" ); $this->error( $line ); @@ -133,5 +133,5 @@ class GenerateNormalizerData extends Maintenance { } $maintClass = 'GenerateNormalizerData'; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/language/lang2po.php b/maintenance/language/lang2po.php index c7484d63..7e5dc472 100644 --- a/maintenance/language/lang2po.php +++ b/maintenance/language/lang2po.php @@ -25,18 +25,18 @@ */ /** This is a command line script */ -require_once(dirname(__FILE__) . '/../Maintenance.php' ); -require_once(dirname(__FILE__) . '/languages.inc' ); +require_once( dirname( __FILE__ ) . '/../Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/languages.inc' ); -define('ALL_LANGUAGES', true); -define('XGETTEXT_BIN', 'xgettext'); -define('MSGMERGE_BIN', 'msgmerge'); +define( 'ALL_LANGUAGES', true ); +define( 'XGETTEXT_BIN', 'xgettext' ); +define( 'MSGMERGE_BIN', 'msgmerge' ); // used to generate the .pot -define('XGETTEXT_OPTIONS', '-n --keyword=wfMsg --keyword=wfMsgForContent --keyword=wfMsgHtml --keyword=wfMsgWikiHtml '); -define('MSGMERGE_OPTIONS', ' -v '); +define( 'XGETTEXT_OPTIONS', '-n --keyword=wfMsg --keyword=wfMsgForContent --keyword=wfMsgHtml --keyword=wfMsgWikiHtml ' ); +define( 'MSGMERGE_OPTIONS', ' -v ' ); -define('LOCALE_OUTPUT_DIR', $IP.'/locale'); +define( 'LOCALE_OUTPUT_DIR', $IP . '/locale' ); class Lang2Po extends Maintenance { public function __construct() { @@ -53,27 +53,28 @@ class Lang2Po extends Maintenance { $langTool = new languages(); - if( $this->getOption( 'lang', ALL_LANGUAGES ) === ALL_LANGUAGES ) { + if ( $this->getOption( 'lang', ALL_LANGUAGES ) === ALL_LANGUAGES ) { $codes = $langTool->getLanguages(); } else { $codes = array( $this->getOption( 'lang' ) ); } // Do all languages - foreach ( $codes as $langcode) { + foreach ( $codes as $langcode ) { $this->output( "Loading messages for $langcode:\n" ); - if( !$this->generatePo($langcode, $langTool->getMessages($langcode) ) ) { + if ( !$this->generatePo( $langcode, $langTool->getMessages( $langcode ) ) ) { $this->error( "ERROR: Failed to write file." ); } else { $this->output( "Applying template:" ); - $this->applyPot($langcode); + $this->applyPot( $langcode ); } } } /** * Return a dummy header for later edition. - * @return string A dummy header + * + * @return String: a dummy header */ private function poHeader() { return '# SOME DESCRIPTIVE TITLE. @@ -99,34 +100,34 @@ msgstr "" /** * generate and write a file in .po format. * - * @param string $langcode Code of a language it will process. - * @param array &$messages Array containing the various messages. + * @param $langcode String: code of a language it will process. + * @param $messages Array containing the various messages. * @return string Filename where stuff got saved or false. */ - private function generatePo($langcode, $messages) { + private function generatePo( $langcode, $messages ) { $data = $this->poHeader(); // Generate .po entries - foreach( $messages['all'] as $identifier => $content ) { + foreach ( $messages['all'] as $identifier => $content ) { $data .= "msgid \"$identifier\"\n"; // Escape backslashes - $tmp = str_replace('\\', '\\\\', $content); + $tmp = str_replace( '\\', '\\\\', $content ); // Escape doublelquotes - $tmp = preg_replace( "/(?getLanguages() as $langcode ) { Language::factory( $langcode ); $memstep = memory_get_usage(); - $this->output( sprintf( "%12s: %d\n", $langcode, ($memstep- $memlast) ) ); + $this->output( sprintf( "%12s: %d\n", $langcode, ( $memstep - $memlast ) ) ); $memlast = $memstep; } $memend = memory_get_usage(); - $this->output( ' Total Usage: '.($memend - $memstart)."\n" ); + $this->output( ' Total Usage: ' . ( $memend - $memstart ) . "\n" ); } } $maintClass = "LangMemUsage"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/language/languages.inc b/maintenance/language/languages.inc index 98464292..c5c9f650 100644 --- a/maintenance/language/languages.inc +++ b/maintenance/language/languages.inc @@ -547,7 +547,9 @@ class languages { public function getUntranslatedNamespaces( $code ) { $this->loadFile( 'en' ); $this->loadFile( $code ); - return array_flip( array_diff_key( $this->mNamespaceNames['en'], $this->mNamespaceNames[$code] ) ); + $namespacesDiff = array_diff_key( $this->mNamespaceNames['en'], $this->mNamespaceNames[$code] ); + if ( isset( $namespacesDiff[NS_MAIN] ) ) unset( $namespacesDiff[NS_MAIN] ); + return $namespacesDiff; } /** diff --git a/maintenance/language/messageTypes.inc b/maintenance/language/messageTypes.inc index 9b979b19..9baf7e76 100644 --- a/maintenance/language/messageTypes.inc +++ b/maintenance/language/messageTypes.inc @@ -69,11 +69,18 @@ $wgIgnoredMessages = array( 'accesskey-compareselectedversions', 'accesskey-watch', 'accesskey-upload', + 'accesskey-preferences-save', + 'accesskey-summary', + 'accesskey-userrights-set', + 'accesskey-blockip-block', + 'accesskey-export', + 'accesskey-import', 'addsection', 'talkpageheader', 'anonnotice', 'autoblock_whitelist', 'searchmenu-help', + 'searchmenu-new-nocreate', 'googlesearch', 'opensearch-desc', 'exif-make-value', @@ -84,6 +91,8 @@ $wgIgnoredMessages = array( 'loginstart', 'loginend', 'loginlanguagelinks', + 'pear-mail-error', + 'php-mail-error', 'markaspatrolledlink', 'newarticletextanon', 'newsectionheaderdefaultlevel', @@ -94,13 +103,13 @@ $wgIgnoredMessages = array( 'pubmedurl', 'randompage-url', 'recentchanges-url', - 'cantcreateaccount-nonblock-text', 'revision-info-current', 'revision-nav', 'rfcurl', 'shareddescriptionfollows', 'signature', 'signature-anon', + 'signupstart', 'signupend', 'sitenotice', 'sitesubtitle', @@ -160,6 +169,7 @@ $wgIgnoredMessages = array( 'editpage-tos-summary', 'addsection-preload', 'addsection-editintro', + 'longpage-hint', ); /** Optional messages, which may be translated only if changed in the target language. */ @@ -257,7 +267,6 @@ $wgOptionalMessages = array( 'exif-lightsource-21', 'exif-lightsource-22', 'exif-lightsource-23', - 'exif-filesource-3', 'booksources-isbn', 'sp-contributions-explain', 'sorbs', @@ -353,6 +362,8 @@ $wgOptionalMessages = array( 'prefs-registration-date-time', 'prefs-memberingroups-type', 'shared-repo-name-wikimediacommons', + 'usermessage-template', + 'filepage.css', ); /** EXIF messages, which may be set as optional in several checks, but are generally mandatory */ @@ -589,4 +600,5 @@ $wgEXIFMessages = array( 'exif-gpsdestdistance-n', 'exif-gpsdirection-t', 'exif-gpsdirection-m', + 'exif-objectname', ); diff --git a/maintenance/language/messages.inc b/maintenance/language/messages.inc index 4c907a16..a0b19ac6 100644 --- a/maintenance/language/messages.inc +++ b/maintenance/language/messages.inc @@ -27,7 +27,6 @@ $wgMessageStructure = array( 'tog-editsectiononrightclick', 'tog-showtoc', 'tog-rememberpassword', - 'tog-editwidth', 'tog-watchcreations', 'tog-watchdefault', 'tog-watchmoves', @@ -181,17 +180,7 @@ $wgMessageStructure = array( 'vector-action-protect', 'vector-action-undelete', 'vector-action-unprotect', - 'vector-namespace-category', - 'vector-namespace-help', - 'vector-namespace-image', - 'vector-namespace-main', - 'vector-namespace-media', - 'vector-namespace-mediawiki', - 'vector-namespace-project', - 'vector-namespace-special', - 'vector-namespace-talk', - 'vector-namespace-template', - 'vector-namespace-user', + 'vector-simplesearch-preference', 'vector-view-create', 'vector-view-edit', 'vector-view-history', @@ -259,6 +248,9 @@ $wgMessageStructure = array( 'jumptonavigation', 'jumptosearch', 'view-pool-error', + 'pool-timeout', + 'pool-queuefull', + 'pool-errorunknown', ), 'links' => array( 'aboutsite', @@ -405,6 +397,7 @@ $wgMessageStructure = array( 'yourpassword', 'yourpasswordagain', 'remembermypassword', + 'securelogin-stick-https', 'yourdomainname', 'externaldberror', 'login', @@ -421,6 +414,7 @@ $wgMessageStructure = array( 'gotaccount', 'gotaccountlink', 'createaccountmail', + 'createaccountreason', 'badretype', 'userexists', 'loginerror', @@ -438,6 +432,7 @@ $wgMessageStructure = array( 'wrongpasswordempty', 'passwordtooshort', 'password-name-match', + 'password-login-forbidden', 'mailmypassword', 'passwordremindertitle', 'passwordremindertext', @@ -449,6 +444,7 @@ $wgMessageStructure = array( 'throttled-mailpassword', 'loginstart', 'loginend', + 'signupstart', 'signupend', 'mailerror', 'acct_creation_throttle_hit', @@ -467,6 +463,11 @@ $wgMessageStructure = array( 'loginlanguagelinks', 'suspicious-userlogout', ), + 'mail' => array( + 'pear-mail-error', + 'php-mail-error', + 'php-mail-error-unknown', + ), 'resetpass' => array( 'resetpass', 'resetpass_announce', @@ -517,6 +518,7 @@ $wgMessageStructure = array( 'showlivepreview', 'showdiff', 'anoneditwarning', + 'anonpreviewwarning', 'missingsummary', 'missingcommenttext', 'missingcommentheader', @@ -554,6 +556,8 @@ $wgMessageStructure = array( 'userjsyoucanpreview', 'usercsspreview', 'userjspreview', + 'sitecsspreview', + 'sitejspreview', 'userinvalidcssjstitle', 'updated', 'note', @@ -575,7 +579,7 @@ $wgMessageStructure = array( 'copyrightwarning', 'copyrightwarning2', 'editpage-tos-summary', - 'longpagewarning', + 'longpage-hint', 'longpageerror', 'readonlywarning', 'protectedpagewarning', @@ -628,7 +632,6 @@ $wgMessageStructure = array( 'cantcreateaccount' => array( 'cantcreateaccounttitle', 'cantcreateaccount-text', - 'cantcreateaccount-nonblock-text', ), 'history' => array( 'viewpagelogs', @@ -718,6 +721,8 @@ $wgMessageStructure = array( 'logdelete-success', 'logdelete-failure', 'revdel-restore', + 'revdel-restore-deleted', + 'revdel-restore-visible', 'pagehist', 'deletedhist', 'revdelete-content', @@ -777,11 +782,13 @@ $wgMessageStructure = array( 'diffs' => array( 'history-title', 'difference', + 'difference-multipage', 'lineno', 'compareselectedversions', 'showhideselectedversions', 'editundo', 'diff-multi', + 'diff-multi-manyusers', ), 'search' => array( 'search-summary', @@ -804,6 +811,7 @@ $wgMessageStructure = array( 'searchmenu-legend', 'searchmenu-exists', 'searchmenu-new', + 'searchmenu-new-nocreate', 'searchhelp-url', 'searchmenu-prefix', 'searchmenu-help', @@ -818,6 +826,7 @@ $wgMessageStructure = array( 'searchprofile-everything-tooltip', 'searchprofile-advanced-tooltip', 'search-result-size', + 'search-result-category-size', 'search-result-score', 'search-redirect', 'search-section', @@ -898,6 +907,7 @@ $wgMessageStructure = array( 'contextlines', 'contextchars', 'stub-threshold', + 'stub-threshold-disabled', 'recentchangesdays', 'recentchangesdays-max', 'recentchangescount', @@ -930,6 +940,7 @@ $wgMessageStructure = array( 'prefs-files', 'prefs-custom-css', 'prefs-custom-js', + 'prefs-common-css-js', 'prefs-reset-intro', 'prefs-emailconfirm-label', 'prefs-textboxsize', @@ -966,9 +977,15 @@ $wgMessageStructure = array( 'prefs-advancedrendering', 'prefs-advancedsearchoptions', 'prefs-advancedwatchlist', - 'prefs-display', + 'prefs-displayrc', + 'prefs-displaysearchoptions', + 'prefs-displaywatchlist', 'prefs-diffs', ), + 'preferences-email' => array( + 'email-address-validity-valid', + 'email-address-validity-invalid', + ), 'userrights' => array( 'userrights', 'userrights-summary', @@ -1053,6 +1070,7 @@ $wgMessageStructure = array( 'right-hideuser', 'right-ipblock-exempt', 'right-proxyunbannable', + 'right-unblockself', 'right-protect', 'right-editprotected', 'right-editinterface', @@ -1075,7 +1093,6 @@ $wgMessageStructure = array( 'right-siteadmin', 'right-reset-passwords', 'right-override-export-depth', - 'right-versiondetail', 'right-sendemail', ), 'rightslog' => array( @@ -1127,14 +1144,9 @@ $wgMessageStructure = array( 'recentchanges-legend', 'recentchangestext', 'recentchanges-feed-description', - 'recentchanges-label-legend', - 'recentchanges-legend-newpage', 'recentchanges-label-newpage', - 'recentchanges-legend-minor', 'recentchanges-label-minor', - 'recentchanges-legend-bot', 'recentchanges-label-bot', - 'recentchanges-legend-unpatrolled', 'recentchanges-label-unpatrolled', 'rcnote', 'rcnotefrom', @@ -1186,6 +1198,7 @@ $wgMessageStructure = array( 'upload_directory_read_only', 'uploaderror', 'upload-summary', + 'upload-recreate-warning', 'uploadtext', 'upload-permitted', 'upload-preferred', @@ -1212,6 +1225,17 @@ $wgMessageStructure = array( 'filetype-unwanted-type', 'filetype-banned-type', 'filetype-missing', + 'empty-file', + 'file-too-large', + 'filename-tooshort', + 'filetype-banned', + 'verification-error', + 'hookaborted', + 'illegal-filename', + 'overwrite', + 'unknown-error', + 'tmp-create-error', + 'tmp-write-error', 'large-file', 'largefileserver', 'emptyfile', @@ -1224,13 +1248,14 @@ $wgMessageStructure = array( 'fileexists-shared-forbidden', 'file-exists-duplicate', 'file-deleted-duplicate', - 'successfulupload', 'uploadwarning', 'uploadwarning-text', 'savefile', 'uploadedimage', 'overwroteimage', 'uploaddisabled', + 'copyuploaddisabled', + 'uploadfromurl-queued', 'uploaddisabledtext', 'php-uploaddisabledtext', 'uploadscripted', @@ -1247,6 +1272,12 @@ $wgMessageStructure = array( 'upload-wasdeleted', 'filename-bad-prefix', 'filename-prefix-blacklist', + 'upload-success-subj', + 'upload-success-msg', + 'upload-failure-subj', + 'upload-failure-msg', + 'upload-warning-subj', + 'upload-warning-msg', ), 'upload-errors' => array( 'upload-proto-error', @@ -1306,6 +1337,7 @@ $wgMessageStructure = array( 'listfiles_search_for', 'imgfile', 'listfiles', + 'listfiles_thumb', 'listfiles_date', 'listfiles_name', 'listfiles_user', @@ -1347,6 +1379,7 @@ $wgMessageStructure = array( 'shared-repo-from', 'shared-repo', 'shared-repo-name-wikimediacommons', + 'filepage.css', ), 'filerevert' => array( 'filerevert', @@ -1421,8 +1454,8 @@ $wgMessageStructure = array( 'statistics-edits', 'statistics-edits-average', 'statistics-views-total', + 'statistics-views-total-desc', 'statistics-views-peredit', - 'statistics-jobqueue', 'statistics-users', 'statistics-users-active', 'statistics-users-active-desc', @@ -1467,6 +1500,8 @@ $wgMessageStructure = array( 'nrevisions', 'nviews', 'nchanges', + 'nimagelinks', + 'ntransclusions', 'specialpage-empty', 'lonelypages', 'lonelypages-summary', @@ -1662,6 +1697,8 @@ $wgMessageStructure = array( 'emailpagetext', 'usermailererror', 'defemailsubject', + 'usermaildisabled', + 'usermaildisabledtext', 'noemailtitle', 'noemailtext', 'nowikiemailtitle', @@ -1678,10 +1715,15 @@ $wgMessageStructure = array( 'emailsenttext', 'emailuserfooter', ), + 'usermessage' => array( + 'usermessage-summary', + 'usermessage-editor', + 'usermessage-template', + ), 'watchlist' => array( 'watchlist', 'mywatchlist', - 'watchlistfor', + 'watchlistfor2', 'nowatchlist', 'watchlistanontext', 'watchnologin', @@ -1765,6 +1807,9 @@ $wgMessageStructure = array( 'revertpage', 'revertpage-nouser', 'rollback-success', + ), + 'edittokens' => array( + 'sessionfailure-title', 'sessionfailure', ), 'protect' => array( @@ -1884,12 +1929,15 @@ $wgMessageStructure = array( 'sp-contributions-newbies-title', 'sp-contributions-blocklog', 'sp-contributions-deleted', + 'sp-contributions-uploads', 'sp-contributions-logs', 'sp-contributions-talk', 'sp-contributions-userrights', 'sp-contributions-blocked-notice', + 'sp-contributions-blocked-notice-anon', 'sp-contributions-search', 'sp-contributions-username', + 'sp-contributions-toponly', 'sp-contributions-submit', 'sp-contributions-explain', 'sp-contributions-footer', @@ -1946,7 +1994,6 @@ $wgMessageStructure = array( 'ipb-edit-dropdown', 'ipb-unblock-addr', 'ipb-unblock', - 'ipb-blocklist-addr', 'ipb-blocklist', 'ipb-blocklist-contribs', 'unblockip', @@ -2013,7 +2060,9 @@ $wgMessageStructure = array( 'sorbsreason', 'sorbs_create_account_reason', 'cant-block-while-blocked', - 'cant-see-hidden-user' + 'cant-see-hidden-user', + 'ipbblocked', + 'ipbnounblockself', ), 'developertools' => array( 'lockdb', @@ -2037,6 +2086,7 @@ $wgMessageStructure = array( 'move-page-backlink', 'move-page-legend', 'movepagetext', + 'movepagetext-noredirectfixer', 'movepagetalktext', 'movearticle', 'moveuserpage-warning', @@ -2086,6 +2136,7 @@ $wgMessageStructure = array( 'immobile-target-page', 'immobile_namespace', 'imagenocrossnamespace', + 'nonfile-cannot-move-to-file', 'imagetypemismatch', 'imageinvalidfilename', 'fix-double-redirects', @@ -2152,6 +2203,7 @@ $wgMessageStructure = array( 'importstart', 'import-revision-count', 'importnopages', + 'imported-log-entries', 'importfailed', 'importunknownsource', 'importcantopen', @@ -2242,6 +2294,12 @@ $wgMessageStructure = array( 'accesskey-compareselectedversions', 'accesskey-watch', 'accesskey-upload', + 'accesskey-preferences-save', + 'accesskey-summary', + 'accesskey-userrights-set', + 'accesskey-blockip-block', + 'accesskey-export', + 'accesskey-import', ), 'tooltips' => array( 'tooltip-pt-userpage', @@ -2308,6 +2366,8 @@ $wgMessageStructure = array( 'tooltip-upload', 'tooltip-rollback', 'tooltip-undo', + 'tooltip-preferences-save', + 'tooltip-summary', ), 'stylesheets' => array( 'common.css', @@ -2445,6 +2505,9 @@ $wgMessageStructure = array( 'show-big-image-thumb', 'file-info-gif-looped', 'file-info-gif-frames', + 'file-info-png-looped', + 'file-info-png-repeat', + 'file-info-png-frames', ), 'newfiles' => array( 'newimages', @@ -2635,6 +2698,7 @@ $wgMessageStructure = array( 'exif-gpsareainformation', 'exif-gpsdatestamp', 'exif-gpsdifferential', + 'exif-objectname', ), 'exif-values' => array( 'exif-make-value', @@ -2860,6 +2924,8 @@ $wgMessageStructure = array( 'confirmemail_error', 'confirmemail_subject', 'confirmemail_body', + 'confirmemail_body_changed', + 'confirmemail_body_set', 'confirmemail_invalidated', 'invalidateemail', ), @@ -2915,6 +2981,7 @@ $wgMessageStructure = array( 'table_pager_first', 'table_pager_last', 'table_pager_limit', + 'table_pager_limit_label', 'table_pager_limit_submit', 'table_pager_empty', ), @@ -3038,6 +3105,7 @@ $wgMessageStructure = array( 'version-specialpages', 'version-parserhooks', 'version-variables', + 'version-skins', 'version-other', 'version-mediahandlers', 'version-hooks', @@ -3050,6 +3118,9 @@ $wgMessageStructure = array( 'version-version', 'version-svn-revision', 'version-license', + 'version-poweredby-credits', + 'version-poweredby-others', + 'version-license-info', 'version-software', 'version-software-product', 'version-software-version', @@ -3107,6 +3178,15 @@ $wgMessageStructure = array( 'tags-edit', 'tags-hitcount', ), + 'comparepages' => array( + 'comparepages', + 'compare-selector', + 'compare-page1', + 'compare-page2', + 'compare-rev1', + 'compare-rev2', + 'compare-submit', + ), 'db-error-messages' => array( 'dberr-header', 'dberr-problems', @@ -3123,10 +3203,15 @@ $wgMessageStructure = array( 'htmlform-float-invalid', 'htmlform-int-toolow', 'htmlform-int-toohigh', + 'htmlform-required', 'htmlform-submit', 'htmlform-reset', 'htmlform-selectorother-other', ), + 'sqlite' => array( + 'sqlite-has-fts', + 'sqlite-no-fts', + ), ); /** Comments for each block */ @@ -3156,6 +3241,8 @@ XHTML id names.", 'errors' => 'General errors', 'virus' => 'Virus scanner', 'login' => 'Login and logout pages', + 'mail' => 'E-mail sending', + 'passwordstrength' => 'JavaScript password checks', 'resetpass' => 'Password reset dialog', 'toolbar' => 'Edit page toolbar', 'edit' => 'Edit pages', @@ -3173,6 +3260,7 @@ XHTML id names.", 'opensearch' => 'OpenSearch description', 'quickbar' => 'Quickbar', 'preferences' => 'Preferences page', + 'preferences-email' => 'User preference: e-mail validation using jQuery', 'userrights' => 'User rights', 'group' => 'Groups', 'group-member' => '', @@ -3217,11 +3305,13 @@ XHTML id names.", 'newuserlog' => 'Special:Log/newusers', 'listgrouprights' => 'Special:ListGroupRights', 'emailuser' => 'E-mail user', + 'usermessage' => 'User Messenger', 'watchlist' => 'Watchlist', 'watching' => 'Displayed when you click the "watch" button and it is in the process of watching', 'enotif' => '', 'delete' => 'Delete', 'rollback' => 'Rollback', + 'edittokens' => 'Edit tokens', 'protect' => 'Protect', 'restrictions' => 'Restrictions (nouns)', 'restriction-levels' => 'Restriction levels', @@ -3331,6 +3421,8 @@ Variants for Chinese language", 'special-blank' => 'Special:BlankPage', 'external_images' => 'External image whitelist', 'special-tags' => 'Special:Tags', + 'comparepages' => 'Special:ComparePages', 'db-error-messages' => 'Database error messages', 'html-forms' => 'HTML forms', + 'sqlite' => 'SQLite database support', ); diff --git a/maintenance/language/rebuildLanguage.php b/maintenance/language/rebuildLanguage.php index 6c624ca3..fd8d62ee 100644 --- a/maintenance/language/rebuildLanguage.php +++ b/maintenance/language/rebuildLanguage.php @@ -7,7 +7,7 @@ * @defgroup MaintenanceLanguage MaintenanceLanguage */ -require_once( dirname(__FILE__).'/../commandLine.inc' ); +require_once( dirname( __FILE__ ) . '/../commandLine.inc' ); require_once( 'languages.inc' ); require_once( 'writeMessagesArray.inc' ); @@ -21,11 +21,10 @@ require_once( 'writeMessagesArray.inc' ); * @param $removeDupes Remove the duplicated messages? * @param $dupeMsgSource The source file intended to remove from the array. */ -function rebuildLanguage( $code, $write, $listUnknown, $removeUnknown, $removeDupes, $dupeMsgSource ) { - global $wgLanguages; - $messages = $wgLanguages->getMessages( $code ); +function rebuildLanguage( $languages, $code, $write, $listUnknown, $removeUnknown, $removeDupes, $dupeMsgSource ) { + $messages = $languages->getMessages( $code ); $messages = $messages['all']; - if ($removeDupes) { + if ( $removeDupes ) { $messages = removeDupes( $messages, $dupeMsgSource ); } MessageWriter::writeMessagesToFile( $messages, $code, $write, $listUnknown, $removeUnknown ); @@ -39,20 +38,20 @@ function rebuildLanguage( $code, $write, $listUnknown, $removeUnknown, $removeDu * @return $newMsgArray The output message array, with duplicates removed. */ function removeDupes( $oldMsgArray, $dupeMsgSource ) { - if (file_exists($dupeMsgSource)) { - include($dupeMsgSource); - if (!isset($dupeMessages)) { - echo("There are no duplicated messages in the source file provided."); - exit(1); + if ( file_exists( $dupeMsgSource ) ) { + include( $dupeMsgSource ); + if ( !isset( $dupeMessages ) ) { + echo( "There are no duplicated messages in the source file provided." ); + exit( 1 ); } } else { - echo ("The specified file $dupeMsgSource cannot be found."); - exit(1); + echo ( "The specified file $dupeMsgSource cannot be found." ); + exit( 1 ); } $newMsgArray = $oldMsgArray; - foreach ($oldMsgArray as $key => $value) { + foreach ( $oldMsgArray as $key => $value ) { if ( array_key_exists( $key, $dupeMessages ) ) { - unset($newMsgArray[$key]); + unset( $newMsgArray[$key] ); } } return $newMsgArray; @@ -72,7 +71,7 @@ Options: * remove-duplicates: Remove duplicated messages based on a PHP source file. TEXT; - exit(1); + exit( 1 ); } # Get the language code @@ -96,13 +95,13 @@ $wgRemoveUnknownMessages = isset( $options['remove-unknown'] ); $wgRemoveDuplicateMessages = isset( $options['remove-duplicates'] ); # Get language objects -$wgLanguages = new languages(); +$languages = new languages(); # Write all the language if ( $wgCode == 'all' ) { - foreach ( $wgLanguages->getLanguages() as $language ) { - rebuildLanguage( $language, $wgWriteToFile, $wgListUnknownMessages, $wgRemoveUnknownMessages, $wgRemoveDuplicateMessages, $wgDupeMessageSource ); + foreach ( $languages->getLanguages() as $languageCode ) { + rebuildLanguage( $languages, $languageCode, $wgWriteToFile, $wgListUnknownMessages, $wgRemoveUnknownMessages, $wgRemoveDuplicateMessages, $wgDupeMessageSource ); } } else { - rebuildLanguage( $wgCode, $wgWriteToFile, $wgListUnknownMessages, $wgRemoveUnknownMessages, $wgRemoveDuplicateMessages, $wgDupeMessageSource ); + rebuildLanguage( $languages, $wgCode, $wgWriteToFile, $wgListUnknownMessages, $wgRemoveUnknownMessages, $wgRemoveDuplicateMessages, $wgDupeMessageSource ); } diff --git a/maintenance/language/transstat.php b/maintenance/language/transstat.php index eeded34e..c2144eb6 100644 --- a/maintenance/language/transstat.php +++ b/maintenance/language/transstat.php @@ -6,16 +6,16 @@ * @ingroup MaintenanceLanguage * * @author Ævar Arnfjörð Bjarmason - * @author Ashar Voultoiz + * @author Ashar Voultoiz * * Output is posted from time to time on: * http://www.mediawiki.org/wiki/Localisation_statistics */ $optionsWithArgs = array( 'output' ); -require_once( dirname(__FILE__).'/../commandLine.inc' ); +require_once( dirname( __FILE__ ) . '/../commandLine.inc' ); require_once( 'languages.inc' ); -require_once( dirname(__FILE__).'/StatOutputs.php' ); +require_once( dirname( __FILE__ ) . '/StatOutputs.php' ); if ( isset( $options['help'] ) ) { @@ -39,7 +39,7 @@ Usage: php transstat.php [--help] [--output=csv|text|wiki] Example: php maintenance/transstat.php --output=text TEXT; - exit(1); + exit( 1 ); } diff --git a/maintenance/language/validate.php b/maintenance/language/validate.php index e84aa29d..d897e467 100644 --- a/maintenance/language/validate.php +++ b/maintenance/language/validate.php @@ -29,7 +29,7 @@ foreach ( $files as $filename ) { $keys = array_keys( $vars ); $diff = array_diff( $keys, Language::$mLocalisationKeys ); if ( $diff ) { - print "\nWarning: unrecognised variable(s): " . implode( ', ', $diff ) ."\n"; + print "\nWarning: unrecognised variable(s): " . implode( ', ', $diff ) . "\n"; } else { print " ok\n"; } diff --git a/maintenance/language/writeMessagesArray.inc b/maintenance/language/writeMessagesArray.inc index e28a5c04..e3a48abd 100644 --- a/maintenance/language/writeMessagesArray.inc +++ b/maintenance/language/writeMessagesArray.inc @@ -21,10 +21,11 @@ class MessageWriter { /** * Write a messages array as a PHP text and write it to the messages file. * - * @param $messages The messages array. - * @param $code The language code. - * @param $write Write to the messages file? - * @param $listUnknown List the unknown messages? + * @param $messages Array: the messages array. + * @param $code String: the language code. + * @param $write Boolean: write to the messages file? + * @param $listUnknown Boolean: list the unknown messages? + * @param $removeUnknown Boolean: whether to remove unkown messages */ public static function writeMessagesToFile( $messages, $code, $write, $listUnknown, $removeUnknown ) { # Rewrite the messages array @@ -66,8 +67,12 @@ class MessageWriter { /** * Write a messages array as a PHP text. * - * @param $messages The messages array. - * @param $ignoredComments Show comments about ignored and optional messages? (For English.) + * @param $messages Array: the messages array. + * @param $ignoredComments Boolean: show comments about ignored and optional + * messages? (For English.) + * @param $prefix String: base path for messages.inc and messageTypes.inc files + * or false for default path (this directory) + * @param $removeUnknown Boolean: whether to remove unkown messages * * @return Array of the PHP text and the sorted messages array. */ @@ -130,9 +135,9 @@ class MessageWriter { /** * Generates an array of comments for messages. * - * @param $messages Key of messages. - * @param $ignored List of ingored message keys. - * @param $optional List of optional message keys. + * @param $messages Array: key of messages. + * @param $ignored Array: list of ingored message keys. + * @param $optional Array: list of optional message keys. */ public static function makeComments( $messages, $ignored, $optional ) { # Comment collector @@ -153,10 +158,10 @@ class MessageWriter { /** * Write a block of messages to PHP. * - * @param $blockComment The comment of whole block. - * @param $messages The block messages. - * @param $messageComments Optional comments for messages in this block. - * @param $prefix Prefix for every line, for indenting purposes. + * @param $blockComment String: the comment of whole block. + * @param $messages Array: the block messages. + * @param $messageComments Array: optional comments for messages in this block. + * @param $prefix String: prefix for every line, for indenting purposes. * * @return The block, formatted in PHP. */ diff --git a/maintenance/mcc.php b/maintenance/mcc.php index e90266ae..a8c79a72 100644 --- a/maintenance/mcc.php +++ b/maintenance/mcc.php @@ -8,14 +8,14 @@ */ /** */ -require_once( dirname(__FILE__) . '/commandLine.inc' ); +require_once( dirname( __FILE__ ) . '/commandLine.inc' ); -$mcc = new MWMemcached( array('persistant' => true/*, 'debug' => true*/) ); +$mcc = new MWMemcached( array( 'persistant' => true/*, 'debug' => true*/ ) ); $mcc->set_servers( $wgMemCachedServers ); -#$mcc->set_debug( true ); +# $mcc->set_debug( true ); -function mccShowHelp($command) { - $commandList = array( +function mccShowHelp( $command ) { + $commandList = array( 'get' => 'grabs something', 'getsock' => 'lists sockets', 'set' => 'changes something', @@ -27,14 +27,15 @@ function mccShowHelp($command) { 'quit' => 'exit mcc', 'help' => 'help about a command', ); - if( !$command ) { + if ( !$command ) { $command = 'fullhelp'; } - if( $command === 'fullhelp' ) { - foreach( $commandList as $cmd => $desc ) { - print "$cmd: $desc\n"; + if ( $command === 'fullhelp' ) { + $max_cmd_len = max( array_map( 'strlen', array_keys( $commandList ) ) ); + foreach ( $commandList as $cmd => $desc ) { + printf( "%-{$max_cmd_len}s: %s\n", $cmd, $desc ); } - } elseif( isset( $commandList[$command] ) ) { + } elseif ( isset( $commandList[$command] ) ) { print "$command: $commandList[$command]\n"; } else { print "$command: command does not exist or no help for it\n"; @@ -46,8 +47,8 @@ do { $showhelp = false; $quit = false; - $line = readconsole( '> ' ); - if ($line === false) exit; + $line = Maintenance::readconsole(); + if ( $line === false ) exit; $args = explode( ' ', $line ); $command = array_shift( $args ); @@ -56,7 +57,7 @@ do { switch ( $command ) { case 'help': // show an help message - mccShowHelp(array_shift($args)); + mccShowHelp( array_shift( $args ) ); break; case 'get': @@ -70,7 +71,7 @@ do { $res = $res[$args[1]]; } if ( $res === false ) { - #print 'Error: ' . $mcc->error_string() . "\n"; + # print 'Error: ' . $mcc->error_string() . "\n"; print "MemCached error\n"; } elseif ( is_string( $res ) ) { print "$res\n"; @@ -106,7 +107,7 @@ do { $value = implode( ' ', $args ); } if ( !$mcc->set( $key, $value, 0 ) ) { - #print 'Error: ' . $mcc->error_string() . "\n"; + # print 'Error: ' . $mcc->error_string() . "\n"; print "MemCached error\n"; } break; @@ -114,14 +115,14 @@ do { case 'delete': $key = implode( ' ', $args ); if ( !$mcc->delete( $key ) ) { - #print 'Error: ' . $mcc->error_string() . "\n"; + # print 'Error: ' . $mcc->error_string() . "\n"; print "MemCached error\n"; } break; case 'history': if ( function_exists( 'readline_list_history' ) ) { - foreach( readline_list_history() as $num => $line) { + foreach ( readline_list_history() as $num => $line ) { print "$num: $line\n"; } } else { diff --git a/maintenance/mctest.php b/maintenance/mctest.php index 3667cb93..651b2958 100644 --- a/maintenance/mctest.php +++ b/maintenance/mctest.php @@ -21,7 +21,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class mcTest extends Maintenance { public function __construct() { @@ -36,36 +36,36 @@ class mcTest extends Maintenance { global $wgMemCachedServers; $iterations = $this->getOption( 'i', 100 ); - if( $this->hasArg() ) + if ( $this->hasArg() ) $wgMemCachedServers = array( $this->getArg() ); foreach ( $wgMemCachedServers as $server ) { - $this->output( $server . " " ); - $mcc = new MemCachedClientforWiki( array('persistant' => true) ); + $this->output( $server . " ", $server ); + $mcc = new MemCachedClientforWiki( array( 'persistant' => true ) ); $mcc->set_servers( array( $server ) ); $set = 0; $incr = 0; $get = 0; $time_start = $this->microtime_float(); - for ( $i=1; $i<=$iterations; $i++ ) { + for ( $i = 1; $i <= $iterations; $i++ ) { if ( !is_null( $mcc->set( "test$i", $i ) ) ) { $set++; } } - for ( $i=1; $i<=$iterations; $i++ ) { + for ( $i = 1; $i <= $iterations; $i++ ) { if ( !is_null( $mcc->incr( "test$i", $i ) ) ) { $incr++; } } - for ( $i=1; $i<=$iterations; $i++ ) { + for ( $i = 1; $i <= $iterations; $i++ ) { $value = $mcc->get( "test$i" ); - if ( $value == $i*2 ) { + if ( $value == $i * 2 ) { $get++; } } $exectime = $this->microtime_float() - $time_start; - - $this->output( "set: $set incr: $incr get: $get time: $exectime\n" ); + + $this->output( "set: $set incr: $incr get: $get time: $exectime", $server ); } } @@ -74,10 +74,10 @@ class mcTest extends Maintenance { * @return float */ private function microtime_float() { - list($usec, $sec) = explode(" ", microtime()); - return ((float)$usec + (float)$sec); + list( $usec, $sec ) = explode( " ", microtime() ); + return ( (float)$usec + (float)$sec ); } } $maintClass = "mcTest"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/mergeMessageFileList.php b/maintenance/mergeMessageFileList.php index 57d9ebb0..00c8cae5 100644 --- a/maintenance/mergeMessageFileList.php +++ b/maintenance/mergeMessageFileList.php @@ -3,7 +3,7 @@ # Start from scratch define( 'MW_NO_EXTENSION_MESSAGES', 1 ); -require_once( dirname( __FILE__ ).'/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); $maintClass = 'MergeMessageFileList'; $mmfl = false; class MergeMessageFileList extends Maintenance { @@ -11,12 +11,12 @@ class MergeMessageFileList extends Maintenance { function __construct() { $this->addOption( 'list-file', 'A file containing a list of extension setup files, one per line.', false, true ); $this->addOption( 'output', 'Send output to this file (omit for stdout)', false, true ); - $this->mDescription = 'Merge $wgExtensionMessagesFiles from various extensions to produce a ' . + $this->mDescription = 'Merge $wgExtensionMessagesFiles from various extensions to produce a ' . 'single array containing all message files.'; } public function execute() { - global $IP, $mmfl; + global $mmfl; if ( !$this->hasOption( 'list-file' ) ) { $this->error( 'The --list-file option must be specified.' ); return; @@ -33,7 +33,7 @@ class MergeMessageFileList extends Maintenance { } } -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); foreach ( $mmfl['setupFiles'] as $fileName ) { if ( strval( $fileName ) === '' ) { @@ -44,8 +44,8 @@ foreach ( $mmfl['setupFiles'] as $fileName ) { include_once( $fileName ); } fwrite( STDERR, "\n" ); -$s = - "<" . "?php\n" . +$s = + "<" . "?php\n" . "## This file is generated by mergeMessageFileList.php. Do not edit it directly.\n\n" . "if ( defined( 'MW_NO_EXTENSION_MESSAGES' ) ) return;\n\n" . '$wgExtensionMessagesFiles = ' . var_export( $wgExtensionMessagesFiles, true ) . ";\n\n" . @@ -53,14 +53,14 @@ $s = $dirs = array( $IP, - dirname( dirname( __FILE__ ) ), + dirname( dirname( __FILE__ ) ), realpath( $IP ) ); foreach ( $dirs as $dir ) { - $s = preg_replace( + $s = preg_replace( "/'" . preg_quote( $dir, '/' ) . "([^']*)'/", - '"$IP\1"', + '"$IP\1"', $s ); } diff --git a/maintenance/migrateUserGroup.php b/maintenance/migrateUserGroup.php index 6d584f7d..c4163208 100644 --- a/maintenance/migrateUserGroup.php +++ b/maintenance/migrateUserGroup.php @@ -20,7 +20,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class MigrateUserGroup extends Maintenance { public function __construct() { @@ -37,10 +37,10 @@ class MigrateUserGroup extends Maintenance { $newGroup = $this->getArg( 1 ); $dbw = wfGetDB( DB_MASTER ); $start = $dbw->selectField( 'user_groups', 'MIN(ug_user)', - array('ug_group' => $oldGroup), __FUNCTION__ ); + array( 'ug_group' => $oldGroup ), __FUNCTION__ ); $end = $dbw->selectField( 'user_groups', 'MAX(ug_user)', - array('ug_group' => $oldGroup), __FUNCTION__ ); - if( $start === null ) { + array( 'ug_group' => $oldGroup ), __FUNCTION__ ); + if ( $start === null ) { $this->error( "Nothing to do - no users in the '$oldGroup' group", true ); } # Do remaining chunk @@ -48,12 +48,12 @@ class MigrateUserGroup extends Maintenance { $blockStart = $start; $blockEnd = $start + $this->mBatchSize - 1; // Migrate users over in batches... - while( $blockEnd <= $end ) { + while ( $blockEnd <= $end ) { $this->output( "Doing users $blockStart to $blockEnd\n" ); $dbw->begin(); $dbw->update( 'user_groups', - array('ug_group' => $newGroup), - array('ug_group' => $oldGroup, + array( 'ug_group' => $newGroup ), + array( 'ug_group' => $oldGroup, "ug_user BETWEEN $blockStart AND $blockEnd" ) ); $count += $dbw->affectedRows(); @@ -67,4 +67,4 @@ class MigrateUserGroup extends Maintenance { } $maintClass = "MigrateUserGroup"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/minify.php b/maintenance/minify.php index 601a4d67..2884fd7b 100644 --- a/maintenance/minify.php +++ b/maintenance/minify.php @@ -10,15 +10,21 @@ class MinifyScript extends Maintenance { public function __construct() { parent::__construct(); - $this->addOption( 'outfile', - 'File for output. Only a single file may be specified for input.', + $this->addOption( 'outfile', + 'File for output. Only a single file may be specified for input.', false, true ); $this->addOption( 'outdir', - "Directory for output. If this is not specified, and neither is --outfile, then the\n" . + "Directory for output. If this is not specified, and neither is --outfile, then the\n" . "output files will be sent to the same directories as the input files.", false, true ); + $this->addOption( 'js-statements-on-own-line', + "Boolean value for putting statements on their own line when minifying JavaScript.", + false, true ); + $this->addOption( 'js-max-line-length', + "Maximum line length for JavaScript minification.", + false, true ); $this->mDescription = "Minify a file or set of files.\n\n" . - "If --outfile is not specified, then the output file names will have a .min extension\n" . + "If --outfile is not specified, then the output file names will have a .min extension\n" . "added, e.g. jquery.js -> jquery.min.js."; } @@ -48,13 +54,12 @@ class MinifyScript extends Maintenance { $inDir = dirname( $inPath ); if ( strpos( $inName, '.min.' ) !== false ) { - echo "Skipping $inName\n"; + $this->error( "Skipping $inName\n" ); continue; } if ( !file_exists( $inPath ) ) { - $this->error( "File does not exist: $arg" ); - exit( 1 ); + $this->error( "File does not exist: $arg", true ); } $extension = $this->getExtension( $inName ); @@ -72,15 +77,17 @@ class MinifyScript extends Maintenance { public function getExtension( $fileName ) { $dotPos = strrpos( $fileName, '.' ); if ( $dotPos === false ) { - $this->error( "No file extension, cannot determine type: $arg" ); + $this->error( "No file extension, cannot determine type: $fileName" ); exit( 1 ); } return substr( $fileName, $dotPos + 1 ); } public function minify( $inPath, $outPath ) { + global $wgResourceLoaderMinifierStatementsOnOwnLine, $wgResourceLoaderMinifierMaxLineLength; + $extension = $this->getExtension( $inPath ); - echo basename( $inPath ) . ' -> ' . basename( $outPath ) . '...'; + $this->output( basename( $inPath ) . ' -> ' . basename( $outPath ) . '...' ); $inText = file_get_contents( $inPath ); if ( $inText === false ) { @@ -95,7 +102,13 @@ class MinifyScript extends Maintenance { switch ( $extension ) { case 'js': - $outText = JSMin::minify( $inText ); + $outText = JavaScriptMinifier::minify( $inText, + $this->getOption( 'js-statements-on-own-line', $wgResourceLoaderMinifierStatementsOnOwnLine ), + $this->getOption( 'js-max-line-length', $wgResourceLoaderMinifierMaxLineLength ) + ); + break; + case 'css': + $outText = CSSMin::minify( $inText ); break; default: $this->error( "No minifier defined for extension \"$extension\"" ); @@ -103,9 +116,9 @@ class MinifyScript extends Maintenance { fwrite( $outFile, $outText ); fclose( $outFile ); - echo " ok\n"; + $this->output( " ok\n" ); } } $maintClass = 'MinifyScript'; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/moveBatch.php b/maintenance/moveBatch.php index d1d3193b..c7495338 100644 --- a/maintenance/moveBatch.php +++ b/maintenance/moveBatch.php @@ -33,7 +33,7 @@ * e.g. immobile_namespace for namespaces which can't be moved */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class MoveBatch extends Maintenance { public function __construct() { @@ -44,7 +44,7 @@ class MoveBatch extends Maintenance { $this->addOption( 'i', "Interval to sleep between moves" ); $this->addArg( 'listfile', 'List of pages to move, newline delimited', false ); } - + public function execute() { global $wgUser; @@ -56,18 +56,18 @@ class MoveBatch extends Maintenance { $user = $this->getOption( 'u', 'Move page script' ); $reason = $this->getOption( 'r', '' ); $interval = $this->getOption( 'i', 0 ); - if( $this->hasArg() ) { + if ( $this->hasArg() ) { $file = fopen( $this->getArg(), 'r' ); } else { $file = $this->getStdin(); } # Setup - if( !$file ) { + if ( !$file ) { $this->error( "Unable to read file, exiting", true ); } $wgUser = User::newFromName( $user ); - + # Setup complete, now start $dbw = wfGetDB( DB_MASTER ); for ( $linenum = 1; !feof( $file ); $linenum++ ) { @@ -86,18 +86,18 @@ class MoveBatch extends Maintenance { $this->error( "Invalid title on line $linenum" ); continue; } - - + + $this->output( $source->getPrefixedText() . ' --> ' . $dest->getPrefixedText() ); $dbw->begin(); $err = $source->moveTo( $dest, false, $reason ); - if( $err !== true ) { + if ( $err !== true ) { $msg = array_shift( $err[0] ); $this->output( "\nFAILED: " . wfMsg( $msg, $err[0] ) ); } $dbw->commit(); $this->output( "\n" ); - + if ( $interval ) { sleep( $interval ); } @@ -107,4 +107,4 @@ class MoveBatch extends Maintenance { } $maintClass = "MoveBatch"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/mssql/README b/maintenance/mssql/README deleted file mode 100644 index bcdeb82a..00000000 --- a/maintenance/mssql/README +++ /dev/null @@ -1,78 +0,0 @@ -== Syntax differences between MySQL and MSSQL == -{| border cellspacing=0 cellpadding=4 -!MySQL!!MSSQL -|- - -|AUTO_INCREMENT -|IDENTITY(1,1) -|- - -|binary -|varchar NULL ''(MSSQL doesn't allow setting of binary's to string values, and won't implicitly allow NULL's)'' -|- - -|bool -|bit -|- - -|[UN]SIGNED -|''not valid'' -|- - -|SELECT * FROM foo LIMIT x -|SELECT TOP x * FROM foo -|- - -|SELECT * FROM foo LIMIT x,y| -''not sure how to implement yet because it must be applied from within '''DatabaseMssql::limitResult''''' -|- - -|INSERT IGNORE INTO foo (foo_id,bar) VALUES ('1','xyz') -|IF NOT EXISTS (SELECT * FROM foo WHERE foo_id = '1') INSERT INTO foo (foo_id,bar) VALUES ('1','xyz') -|- - -|IF(cond,trueVal,falseVal) -|CASE WHEN cond THEN trueVal ELSE falseVal END -|- - -|SHOW TABLES -|SELECT * FROM INFORMATION_SCHEMA.TABLES -|- - -|ENUM -|''not natively supported, change to text'' -|} - -== MSSQL Variables == -{| border cellspacing=0 cellpadding=4 - -|@@VERSION -|Server version information -|- - -|@@IDENTITY -|Last inserted row -|- - -|@@ERROR -|Last error number -|} - -== Changes to INSERT wrapper == -=== AUTOINCREMENT vs IDENTITY === -MySQL style ''AUTOINCREMENT'' columns are inplemented in MSSQL using ''IDENTITY(x,y)'' where ''x'' is the initial value and ''y'' is the amount to add on each insert. The last value resulting from an insert into an IDENTITY column is stored in the ''@@IDENTITY'' variable. These kinds of columns are usually used as primary keys and are therefore assigned the ''NOT NULL'' property. - -In MySQL the standard way of inserting data into rows exhibiting AUTOINCREMENT columns is simply to use a ''NULL'' value which will be ignored. In MSSQL however assigning a ''NULL'' to an ''IDENTITY'' column is not allowed, instead the best way is not to include those items in the list of columns to be updated at all. - -To get round this in the MediaWiki MSSQL layer, I've modified the insert wrapper in the ''DatabaseMssql'' class to check if the primary key is used in the insert and remove it if so. It checks this by assuming that the primary key will be of the same name as the table but with ''_id'' on the end, and that it will the first item in the list of columns to update. - -=== IGNORE === -As you can see from the comparison table above, the MySQL ''INSERT IGNORE'' option takes quite a different form in MSSQL. This is handled in the ''insert'' wrapper method. In the case of multiple row inserts, a separate conditional insert query is performed for each item. - -== NULL values and NOT NULL columns == -MySQL implicitly casts NULL assignments to NOT NULL columns to an empty string or zero value accordingly, but MSSQL raises an error instead. This is a big problem within the MediaWiki environment because the code relies heavily on this implicit NULL casting. I've tried to get round the problem by replacing NULL's with empty strings from update and insert queries, and MSSQL is happy to cast the empty string to a numeric zero if necessary. - -== See also == -*[http://msdn.microsoft.com/en-us/library/ms188783.aspx MSSQL reference] -*[http://doc.ddart.net/mssql/sql70/ca-co_1.htm Type casting] -*[http://msdn.microsoft.com/en-us/library/ms187752.aspx TransactSQL datatypes] diff --git a/maintenance/mssql/tables.sql b/maintenance/mssql/tables.sql index 24847330..3d3d3592 100644 --- a/maintenance/mssql/tables.sql +++ b/maintenance/mssql/tables.sql @@ -1,395 +1,764 @@ +-- Experimental table definitions for Microsoft SQL Server with +-- content-holding fields switched to explicit BINARY charset. +-- ------------------------------------------------------------ + +-- SQL to create the initial tables for the MediaWiki database. +-- This is read and executed by the install script; you should +-- not have to run it by itself unless doing a manual install. + +-- +-- General notes: +-- +-- The comments in this and other files are +-- replaced with the defined table prefix by the installer +-- and updater scripts. If you are installing or running +-- updates manually, you will need to manually insert the +-- table prefix if any when running these scripts. +-- + + +-- +-- The user table contains basic account information, +-- authentication keys, etc. +-- +-- Some multi-wiki sites may share a single central user table +-- between separate wikis using the $wgSharedDB setting. +-- +-- Note that when a external authentication plugin is used, +-- user table entries still need to be created to store +-- preferences and to key tracking information in the other +-- tables. + +-- LINE:53 CREATE TABLE /*$wgDBprefix*/user ( - user_id int NOT NULL IDENTITY(1,1), - user_name varchar(255) NOT NULL default '', - user_real_name varchar(255) NOT NULL default '', - user_password text NOT NULL, - user_newpassword text NOT NULL, - user_newpass_time varchar(5) NULL, - user_email text NOT NULL, - user_options text NOT NULL, - user_touched varchar(5) NOT NULL default '', - user_token varchar(10) NOT NULL default '', - user_email_authenticated varchar(5) NULL, - user_email_token varchar(10) NULL, - user_email_token_expires varchar(5) NULL, - user_registration varchar(5) NULL, - user_editcount int, - PRIMARY KEY (user_id) -); - + user_id INT NOT NULL PRIMARY KEY IDENTITY(0,1), + user_name NVARCHAR(255) NOT NULL UNIQUE DEFAULT '', + user_real_name NVARCHAR(255) NOT NULL DEFAULT '', + user_password NVARCHAR(255) NOT NULL DEFAULT '', + user_newpassword NVARCHAR(255) NOT NULL DEFAULT '', + user_newpass_time DATETIME NULL, + user_email NVARCHAR(255) NOT NULL DEFAULT '', + user_options NVARCHAR(MAX) NOT NULL DEFAULT '', + user_touched DATETIME NOT NULL DEFAULT GETDATE(), + user_token NCHAR(32) NOT NULL DEFAULT '', + user_email_authenticated DATETIME DEFAULT NULL, + user_email_token NCHAR(32) DEFAULT '', + user_email_token_expires DATETIME DEFAULT NULL, + user_registration DATETIME DEFAULT NULL, + user_editcount INT NULL +); +CREATE INDEX /*$wgDBprefix*/user_email_token ON /*$wgDBprefix*/[user](user_email_token); +CREATE UNIQUE INDEX /*$wgDBprefix*/[user_name] ON /*$wgDBprefix*/[user]([user_name]); +; + +-- +-- User permissions have been broken out to a separate table; +-- this allows sites with a shared user table to have different +-- permissions assigned to a user in each project. +-- +-- This table replaces the old user_rights field which used a +-- comma-separated blob. CREATE TABLE /*$wgDBprefix*/user_groups ( - ug_user int NOT NULL default '0', - ug_group varchar(5) NOT NULL default '', - PRIMARY KEY (ug_user,ug_group) + ug_user INT NOT NULL REFERENCES /*$wgDBprefix*/[user](user_id) ON DELETE CASCADE, + ug_group NVARCHAR(16) NOT NULL DEFAULT '', ); +CREATE UNIQUE clustered INDEX /*$wgDBprefix*/user_groups_unique ON /*$wgDBprefix*/user_groups(ug_user, ug_group); +CREATE INDEX /*$wgDBprefix*/user_group ON /*$wgDBprefix*/user_groups(ug_group); +-- Stores notifications of user talk page changes, for the display +-- of the "you have new messages" box +-- Changed user_id column to mwuser_id to avoid clashing with user_id function CREATE TABLE /*$wgDBprefix*/user_newtalk ( - user_id int NOT NULL default '0', - user_ip varchar(13) NOT NULL default '', - user_last_timestamp varchar(5) NOT NULL default '' -); - + user_id INT NOT NULL DEFAULT 0 REFERENCES /*$wgDBprefix*/[user](user_id) ON DELETE CASCADE, + user_ip NVARCHAR(40) NOT NULL DEFAULT '', + user_last_timestamp DATETIME NOT NULL DEFAULT '', +); +CREATE INDEX /*$wgDBprefix*/user_group_id ON /*$wgDBprefix*/user_newtalk([user_id]); +CREATE INDEX /*$wgDBprefix*/user_ip ON /*$wgDBprefix*/user_newtalk(user_ip); + +-- +-- User preferences and other fun stuff +-- replaces old user.user_options BLOB +-- +CREATE TABLE /*$wgDBprefix*/user_properties ( + up_user INT NOT NULL, + up_property NVARCHAR(32) NOT NULL, + up_value NVARCHAR(MAX), +); +CREATE UNIQUE clustered INDEX /*$wgDBprefix*/user_props_user_prop ON /*$wgDBprefix*/user_properties(up_user, up_property); +CREATE INDEX /*$wgDBprefix*/user_props_prop ON /*$wgDBprefix*/user_properties(up_property); + + +-- +-- Core of the wiki: each page has an entry here which identifies +-- it by title and contains some essential metadata. +-- CREATE TABLE /*$wgDBprefix*/page ( - page_id int NOT NULL IDENTITY(1,1), - page_namespace int NOT NULL, - page_title varchar(255) NOT NULL, - page_restrictions text NOT NULL, - page_counter bigint NOT NULL default '0', - page_is_redirect tinyint NOT NULL default '0', - page_is_new tinyint NOT NULL default '0', - page_random real NOT NULL, - page_touched varchar(5) NOT NULL default '', - page_latest int NOT NULL, - page_len int NOT NULL, - PRIMARY KEY (page_id) -); - + page_id INT NOT NULL PRIMARY KEY clustered IDENTITY, + page_namespace INT NOT NULL, + page_title NVARCHAR(255) NOT NULL, + page_restrictions NVARCHAR(255) NULL, + page_counter BIGINT NOT NULL DEFAULT 0, + page_is_redirect BIT NOT NULL DEFAULT 0, + page_is_new BIT NOT NULL DEFAULT 0, + page_random NUMERIC(15,14) NOT NULL DEFAULT RAND(), + page_touched DATETIME NOT NULL DEFAULT GETDATE(), + page_latest INT NOT NULL, + page_len INT NOT NULL, +); +CREATE UNIQUE INDEX /*$wgDBprefix*/page_unique_name ON /*$wgDBprefix*/page(page_namespace, page_title); +CREATE INDEX /*$wgDBprefix*/page_random_idx ON /*$wgDBprefix*/page(page_random); +CREATE INDEX /*$wgDBprefix*/page_len_idx ON /*$wgDBprefix*/page(page_len); +; + +-- +-- Every edit of a page creates also a revision row. +-- This stores metadata about the revision, and a reference +-- to the TEXT storage backend. +-- CREATE TABLE /*$wgDBprefix*/revision ( - rev_id int NOT NULL IDENTITY(1,1), - rev_page int NOT NULL, - rev_text_id int NOT NULL, - rev_comment text NOT NULL, - rev_user int NOT NULL default '0', - rev_user_text varchar(255) NOT NULL default '', - rev_timestamp varchar(5) NOT NULL default '', - rev_minor_edit tinyint NOT NULL default '0', - rev_deleted tinyint NOT NULL default '0', - rev_len int, - rev_parent_id int default NULL, - PRIMARY KEY (rev_page, rev_id) -); - + rev_id INT NOT NULL UNIQUE IDENTITY, + rev_page INT NOT NULL, + rev_text_id INT NOT NULL, + rev_comment NVARCHAR(max) NOT NULL, + rev_user INT NOT NULL DEFAULT 0 /*REFERENCES [user](user_id)*/, + rev_user_text NVARCHAR(255) NOT NULL DEFAULT '', + rev_timestamp DATETIME NOT NULL DEFAULT GETDATE(), + rev_minor_edit BIT NOT NULL DEFAULT 0, + rev_deleted BIT NOT NULL DEFAULT 0, + rev_len INT, + rev_parent_id INT DEFAULT NULL, + +); +CREATE UNIQUE clustered INDEX /*$wgDBprefix*/revision_unique ON /*$wgDBprefix*/revision(rev_page, rev_id); +CREATE UNIQUE INDEX /*$wgDBprefix*/rev_id ON /*$wgDBprefix*/revision(rev_id); +CREATE INDEX /*$wgDBprefix*/rev_timestamp ON /*$wgDBprefix*/revision(rev_timestamp); +CREATE INDEX /*$wgDBprefix*/page_timestamp ON /*$wgDBprefix*/revision(rev_page, rev_timestamp); +CREATE INDEX /*$wgDBprefix*/user_timestamp ON /*$wgDBprefix*/revision(rev_user, rev_timestamp); +CREATE INDEX /*$wgDBprefix*/usertext_timestamp ON /*$wgDBprefix*/revision(rev_user_text, rev_timestamp); +; + +-- +-- Holds TEXT of individual page revisions. +-- +-- Field names are a holdover from the 'old' revisions table in +-- MediaWiki 1.4 and earlier: an upgrade will transform that +-- table INTo the 'text' table to minimize unnecessary churning +-- and downtime. If upgrading, the other fields will be left unused. CREATE TABLE /*$wgDBprefix*/text ( - old_id int NOT NULL IDENTITY(1,1), - old_text text NOT NULL, - old_flags text NOT NULL, - PRIMARY KEY (old_id) -); - + old_id INT NOT NULL PRIMARY KEY clustered IDENTITY, + old_text TEXT NOT NULL, + old_flags NVARCHAR(255) NOT NULL, +); + +-- +-- Holding area for deleted articles, which may be viewed +-- or restored by admins through the Special:Undelete interface. +-- The fields generally correspond to the page, revision, and text +-- fields, with several caveats. +-- Cannot reasonably create views on this table, due to the presence of TEXT +-- columns. CREATE TABLE /*$wgDBprefix*/archive ( - ar_namespace int NOT NULL default '0', - ar_title varchar(255) NOT NULL default '', - ar_text text NOT NULL, - ar_comment text NOT NULL, - ar_user int NOT NULL default '0', - ar_user_text varchar(255) NOT NULL, - ar_timestamp varchar(5) NOT NULL default '', - ar_minor_edit tinyint NOT NULL default '0', - ar_flags text NOT NULL, - ar_rev_id int, - ar_text_id int, - ar_deleted tinyint NOT NULL default '0', - ar_len int, - ar_page_id int, - ar_parent_id int default NULL -); - + ar_namespace SMALLINT NOT NULL DEFAULT 0, + ar_title NVARCHAR(255) NOT NULL DEFAULT '', + ar_text NVARCHAR(MAX) NOT NULL, + ar_comment NVARCHAR(255) NOT NULL, + ar_user INT NULL REFERENCES /*$wgDBprefix*/[user](user_id) ON DELETE SET NULL, + ar_user_text NVARCHAR(255) NOT NULL, + ar_timestamp DATETIME NOT NULL DEFAULT GETDATE(), + ar_minor_edit BIT NOT NULL DEFAULT 0, + ar_flags NVARCHAR(255) NOT NULL, + ar_rev_id INT, + ar_text_id INT, + ar_deleted BIT NOT NULL DEFAULT 0, + ar_len INT DEFAULT NULL, + ar_page_id INT NULL, + ar_parent_id INT NULL, +); +CREATE INDEX /*$wgDBprefix*/ar_name_title_timestamp ON /*$wgDBprefix*/archive(ar_namespace,ar_title,ar_timestamp); +CREATE INDEX /*$wgDBprefix*/ar_usertext_timestamp ON /*$wgDBprefix*/archive(ar_user_text,ar_timestamp); +CREATE INDEX /*$wgDBprefix*/ar_user_text ON /*$wgDBprefix*/archive(ar_user_text); + + +-- +-- Track page-to-page hyperlinks within the wiki. +-- CREATE TABLE /*$wgDBprefix*/pagelinks ( - pl_from int NOT NULL default '0', - pl_namespace int NOT NULL default '0', - pl_title varchar(255) NOT NULL default '' + pl_from INT NOT NULL DEFAULT 0 REFERENCES /*$wgDBprefix*/page(page_id) ON DELETE CASCADE, + pl_namespace SMALLINT NOT NULL DEFAULT 0, + pl_title NVARCHAR(255) NOT NULL DEFAULT '', ); +CREATE UNIQUE INDEX /*$wgDBprefix*/pl_from ON /*$wgDBprefix*/pagelinks(pl_from,pl_namespace,pl_title); +CREATE UNIQUE INDEX /*$wgDBprefix*/pl_namespace ON /*$wgDBprefix*/pagelinks(pl_namespace,pl_title,pl_from); +-- +-- Track template inclusions. +-- CREATE TABLE /*$wgDBprefix*/templatelinks ( - tl_from int NOT NULL default '0', - tl_namespace int NOT NULL default '0', - tl_title varchar(255) NOT NULL default '' -); - + tl_from INT NOT NULL DEFAULT 0 REFERENCES /*$wgDBprefix*/page(page_id) ON DELETE CASCADE, + tl_namespace SMALLINT NOT NULL DEFAULT 0, + tl_title NVARCHAR(255) NOT NULL DEFAULT '', +); +CREATE UNIQUE INDEX /*$wgDBprefix*/tl_from ON /*$wgDBprefix*/templatelinks(tl_from,tl_namespace,tl_title); +CREATE UNIQUE INDEX /*$wgDBprefix*/tl_namespace ON /*$wgDBprefix*/templatelinks(tl_namespace,tl_title,tl_from); + +-- +-- Track links to images *used inline* +-- We don't distinguish live from broken links here, so +-- they do not need to be changed ON upload/removal. +-- CREATE TABLE /*$wgDBprefix*/imagelinks ( - il_from int NOT NULL default '0', - il_to varchar(255) NOT NULL default '' -); - + il_from INT NOT NULL DEFAULT 0 REFERENCES /*$wgDBprefix*/page(page_id) ON DELETE CASCADE, + il_to NVARCHAR(255) NOT NULL DEFAULT '', + CONSTRAINT /*$wgDBprefix*/il_from PRIMARY KEY(il_from,il_to), +); +CREATE UNIQUE INDEX /*$wgDBprefix*/il_from_to ON /*$wgDBprefix*/imagelinks(il_from,il_to); +CREATE UNIQUE INDEX /*$wgDBprefix*/il_to_from ON /*$wgDBprefix*/imagelinks(il_to,il_from); + +-- +-- Track category inclusions *used inline* +-- This tracks a single level of category membership +-- (folksonomic tagging, really). +-- CREATE TABLE /*$wgDBprefix*/categorylinks ( - cl_from int NOT NULL default '0', - cl_to varchar(255) NOT NULL default '', - cl_sortkey varchar(70) NOT NULL default '', - cl_timestamp timestamp NOT NULL -); - + cl_from INT NOT NULL DEFAULT 0, + cl_to NVARCHAR(255) NOT NULL DEFAULT '', + cl_sortkey NVARCHAR(150) NOT NULL DEFAULT '', + cl_timestamp DATETIME NOT NULL DEFAULT GETDATE(), + CONSTRAINT /*$wgDBprefix*/cl_from PRIMARY KEY(cl_from, cl_to), +); +CREATE UNIQUE INDEX /*$wgDBprefix*/cl_from_to ON /*$wgDBprefix*/categorylinks(cl_from,cl_to); +-- We always sort within a given category... +CREATE INDEX /*$wgDBprefix*/cl_sortkey ON /*$wgDBprefix*/categorylinks(cl_to,cl_sortkey); +-- Not really used? +CREATE INDEX /*$wgDBprefix*/cl_timestamp ON /*$wgDBprefix*/categorylinks(cl_to,cl_timestamp); +--; + +-- +-- Track all existing categories. Something is a category if 1) it has an en- +-- try somewhere in categorylinks, or 2) it once did. Categories might not +-- have corresponding pages, so they need to be tracked separately. +-- CREATE TABLE /*$wgDBprefix*/category ( cat_id int NOT NULL IDENTITY(1,1), - cat_title varchar(255) NOT NULL, + cat_title nvarchar(255) NOT NULL, cat_pages int NOT NULL default 0, cat_subcats int NOT NULL default 0, cat_files int NOT NULL default 0, cat_hidden tinyint NOT NULL default 0, - PRIMARY KEY (cat_id) ); -CREATE TABLE /*$wgDBprefix*/externallinks ( - el_from int NOT NULL default '0', - el_to text NOT NULL, - el_index text NOT NULL -); +CREATE UNIQUE INDEX /*$wgDBprefix*/cat_title ON /*$wgDBprefix*/category(cat_title); +-- For Special:Mostlinkedcategories +CREATE INDEX /*$wgDBprefix*/cat_pages ON /*$wgDBprefix*/category(cat_pages); -CREATE TABLE /*$wgDBprefix*/langlinks ( - ll_from int NOT NULL default '0', - ll_lang varchar(7) NOT NULL default '', - ll_title varchar(255) NOT NULL default '' -); -CREATE TABLE /*$wgDBprefix*/site_stats ( - ss_row_id int NOT NULL, - ss_total_views bigint default '0', - ss_total_edits bigint default '0', - ss_good_articles bigint default '0', - ss_total_pages bigint default '-1', - ss_users bigint default '-1', - ss_admins int default '-1', - ss_images int default '0' +CREATE TABLE /*$wgDBprefix*/change_tag ( + ct_rc_id int NOT NULL default 0, + ct_log_id int NOT NULL default 0, + ct_rev_id int NOT NULL default 0, + ct_tag varchar(255) NOT NULL, + ct_params varchar(255) NOT NULL, ); +CREATE UNIQUE INDEX /*$wgDBprefix*/change_tag_rc_tag ON /*$wgDBprefix*/change_tag(ct_rc_id,ct_tag); +CREATE UNIQUE INDEX /*$wgDBprefix*/change_tag_log_tag ON /*$wgDBprefix*/change_tag(ct_log_id,ct_tag); +CREATE UNIQUE INDEX /*$wgDBprefix*/change_tag_rev_tag ON /*$wgDBprefix*/change_tag(ct_rev_id,ct_tag); +CREATE INDEX /*$wgDBprefix*/change_tag_tag_id ON /*$wgDBprefix*/change_tag(ct_tag,ct_rc_id,ct_rev_id,ct_log_id); -CREATE TABLE /*$wgDBprefix*/hitcounter ( - hc_id int NOT NULL +CREATE TABLE /*$wgDBprefix*/tag_summary ( + ts_rc_id INT NOT NULL default 0, + ts_log_id INT NOT NULL default 0, + ts_rev_id INT NOT NULL default 0, + ts_tags varchar(255) NOT NULL ); +CREATE UNIQUE INDEX /*$wgDBprefix*/tag_summary_rc_id ON /*$wgDBprefix*/tag_summary(ts_rc_id); +CREATE UNIQUE INDEX /*$wgDBprefix*/tag_summary_log_id ON /*$wgDBprefix*/tag_summary(ts_log_id); +CREATE UNIQUE INDEX /*$wgDBprefix*/tag_summary_rev_id ON /*$wgDBprefix*/tag_summary(ts_rev_id); -CREATE TABLE /*$wgDBprefix*/ipblocks ( - ipb_id int NOT NULL IDENTITY(1,1), - ipb_address text NOT NULL, - ipb_user int NOT NULL default '0', - ipb_by int NOT NULL default '0', - ipb_by_text varchar(255) NOT NULL default '', - ipb_reason text NOT NULL, - ipb_timestamp varchar(5) NOT NULL default '', - ipb_auto bit NOT NULL default 0, - ipb_anon_only bit NOT NULL default 0, - ipb_create_account bit NOT NULL default 1, - ipb_enable_autoblock bit NOT NULL default '1', - ipb_expiry varchar(5) NOT NULL default '', - ipb_range_start text NOT NULL, - ipb_range_end text NOT NULL, - ipb_deleted bit NOT NULL default 0, - ipb_block_email bit NOT NULL default 0, - PRIMARY KEY (ipb_id) +CREATE TABLE /*$wgDBprefix*/valid_tag ( + vt_tag varchar(255) NOT NULL PRIMARY KEY ); -CREATE TABLE /*$wgDBprefix*/image ( - img_name varchar(255) NOT NULL default '', - img_size int NOT NULL default '0', - img_width int NOT NULL default '0', - img_height int NOT NULL default '0', - img_metadata text NOT NULL, - img_bits int NOT NULL default '0', - img_media_type TEXT default NULL, - img_major_mime TEXT NOT NULL default "unknown", - img_minor_mime varchar(10) NOT NULL default "unknown", - img_description text NOT NULL, - img_user int NOT NULL default '0', - img_user_text varchar(255) NOT NULL, - img_timestamp varchar(5) NOT NULL default '', - img_sha1 varchar(10) NOT NULL default '', - PRIMARY KEY (img_name) +-- +-- Table for storing localisation data +-- +CREATE TABLE /*$wgDBprefix*/l10n_cache ( + -- language code + lc_lang NVARCHAR(32) NOT NULL, + + -- cache key + lc_key NVARCHAR(255) NOT NULL, + + -- Value + lc_value TEXT NOT NULL DEFAULT '', ); +CREATE INDEX /*$wgDBprefix*/lc_lang_key ON /*$wgDBprefix*/l10n_cache (lc_lang, lc_key); -CREATE TABLE /*$wgDBprefix*/oldimage ( - oi_name varchar(255) NOT NULL default '', - oi_archive_name varchar(255) NOT NULL default '', - oi_size int NOT NULL default 0, - oi_width int NOT NULL default 0, - oi_height int NOT NULL default 0, - oi_bits int NOT NULL default 0, - oi_description text NOT NULL, - oi_user int NOT NULL default '0', - oi_user_text varchar(255) NOT NULL, - oi_timestamp varchar(5) NOT NULL default '', - oi_metadata text NOT NULL, - oi_media_type TEXT default NULL, - oi_major_mime TEXT NOT NULL default "unknown", - oi_minor_mime varchar(10) NOT NULL default "unknown", - oi_deleted tinyint NOT NULL default '0', - oi_sha1 varchar(10) NOT NULL default '' +-- +-- Track links to external URLs +-- IE >= 4 supports no more than 2083 characters in a URL +CREATE TABLE /*$wgDBprefix*/externallinks ( + el_from INT NOT NULL DEFAULT '0', + el_to VARCHAR(2083) NOT NULL, + el_index VARCHAR(896) NOT NULL, +); +-- Maximum key length ON SQL Server is 900 bytes +CREATE INDEX /*$wgDBprefix*/externallinks_index ON /*$wgDBprefix*/externallinks(el_index); + +-- +-- Track external user accounts, if ExternalAuth is used +-- +CREATE TABLE /*$wgDBprefix*/external_user ( + -- Foreign key to user_id + eu_local_id INT NOT NULL PRIMARY KEY, + -- opaque identifier provided by the external database + eu_external_id NVARCHAR(255) NOT NULL, +); +CREATE UNIQUE INDEX /*$wgDBprefix*/eu_external_idx ON /*$wgDBprefix*/external_user(eu_external_id); + +-- +-- Track INTerlanguage links +-- +CREATE TABLE /*$wgDBprefix*/langlinks ( + ll_from INT NOT NULL DEFAULT 0, + ll_lang NVARCHAR(20) NOT NULL DEFAULT '', + ll_title NVARCHAR(255) NOT NULL DEFAULT '', + CONSTRAINT /*$wgDBprefix*/langlinks_pk PRIMARY KEY(ll_from, ll_lang), +); +CREATE UNIQUE INDEX /*$wgDBprefix*/langlinks_reverse_key ON /*$wgDBprefix*/langlinks(ll_lang,ll_title); + +-- +-- Track inline interwiki links +-- +CREATE TABLE /*$wgDBprefix*/iwlinks ( + -- page_id of the referring page + iwl_from INT NOT NULL DEFAULT 0, + + -- Interwiki prefix code of the target + iwl_prefix NVARCHAR(20) NOT NULL DEFAULT '', + + -- Title of the target, including namespace + iwl_title NVARCHAR(255) NOT NULL DEFAULT '', +); + +CREATE UNIQUE INDEX /*$wgDBprefix*/iwl_from ON /*$wgDBprefix*/iwlinks(iwl_from,iwl_prefix,iwl_title); +CREATE UNIQUE INDEX /*$wgDBprefix*/iwl_prefix ON /*$wgDBprefix*/iwlinks(iwl_prefix,iwl_title); + + +-- +-- Contains a single row with some aggregate info +-- ON the state of the site. +-- +CREATE TABLE /*$wgDBprefix*/site_stats ( + ss_row_id INT NOT NULL DEFAULT 1 PRIMARY KEY, + ss_total_views BIGINT DEFAULT 0, + ss_total_edits BIGINT DEFAULT 0, + ss_good_articles BIGINT DEFAULT 0, + ss_total_pages BIGINT DEFAULT -1, + ss_users BIGINT DEFAULT -1, + ss_active_users BIGINT DEFAULT -1, + ss_admins INT DEFAULT -1, + ss_images INT DEFAULT 0, +); + +-- INSERT INTO site_stats DEFAULT VALUES; + +-- +-- Stores an ID for every time any article is visited; +-- depending ON $wgHitcounterUpdateFreq, it is +-- periodically cleared and the page_counter column +-- in the page table updated for the all articles +-- that have been visited.) +-- +CREATE TABLE /*$wgDBprefix*/hitcounter ( + hc_id BIGINT NOT NULL ); +-- +-- The Internet is full of jerks, alas. Sometimes it's handy +-- to block a vandal or troll account. +-- +CREATE TABLE /*$wgDBprefix*/ipblocks ( + ipb_id INT NOT NULL PRIMARY KEY, + ipb_address NVARCHAR(255) NOT NULL, + ipb_user INT NOT NULL DEFAULT 0, + ipb_by INT NOT NULL DEFAULT 0, + ipb_by_text NVARCHAR(255) NOT NULL DEFAULT '', + ipb_reason NVARCHAR(255) NOT NULL, + ipb_timestamp DATETIME NOT NULL DEFAULT GETDATE(), + ipb_auto BIT NOT NULL DEFAULT 0, + ipb_anon_only BIT NOT NULL DEFAULT 0, + ipb_create_account BIT NOT NULL DEFAULT 1, + ipb_enable_autoblock BIT NOT NULL DEFAULT 1, + ipb_expiry DATETIME NOT NULL DEFAULT GETDATE(), + ipb_range_start NVARCHAR(32) NOT NULL DEFAULT '', + ipb_range_end NVARCHAR(32) NOT NULL DEFAULT '', + ipb_deleted BIT NOT NULL DEFAULT 0, + ipb_block_email BIT NOT NULL DEFAULT 0, + ipb_allow_usertalk BIT NOT NULL DEFAULT 0, +); +-- Unique index to support "user already blocked" messages +-- Any new options which prevent collisions should be included +--UNIQUE INDEX ipb_address (ipb_address(255), ipb_user, ipb_auto, ipb_anon_only), +CREATE UNIQUE INDEX /*$wgDBprefix*/ipb_address ON /*$wgDBprefix*/ipblocks(ipb_address, ipb_user, ipb_auto, ipb_anon_only); +CREATE INDEX /*$wgDBprefix*/ipb_user ON /*$wgDBprefix*/ipblocks(ipb_user); +CREATE INDEX /*$wgDBprefix*/ipb_range ON /*$wgDBprefix*/ipblocks(ipb_range_start, ipb_range_end); +CREATE INDEX /*$wgDBprefix*/ipb_timestamp ON /*$wgDBprefix*/ipblocks(ipb_timestamp); +CREATE INDEX /*$wgDBprefix*/ipb_expiry ON /*$wgDBprefix*/ipblocks(ipb_expiry); +; + +-- +-- Uploaded images and other files. +CREATE TABLE /*$wgDBprefix*/image ( + img_name varchar(255) NOT NULL default '', + img_size INT NOT NULL DEFAULT 0, + img_width INT NOT NULL DEFAULT 0, + img_height INT NOT NULL DEFAULT 0, + img_metadata TEXT NOT NULL, -- was MEDIUMBLOB + img_bits SMALLINT NOT NULL DEFAULT 0, + img_media_type NVARCHAR(MAX) DEFAULT 'UNKNOWN', + img_major_mime NVARCHAR(MAX) DEFAULT 'UNKNOWN', + img_minor_mime NVARCHAR(MAX) NOT NULL DEFAULT 'unknown', + img_description NVARCHAR(MAX) NOT NULL, + img_user INT NOT NULL DEFAULT 0, + img_user_text VARCHAR(255) NOT NULL DEFAULT '', + img_timestamp DATETIME NOT NULL DEFAULT GETDATE(), + img_sha1 VARCHAR(255) NOT NULL default '', +); +-- Used by Special:Imagelist for sort-by-size +CREATE INDEX /*$wgDBprefix*/img_size ON /*$wgDBprefix*/[image](img_size); +-- Used by Special:Newimages and Special:Imagelist +CREATE INDEX /*$wgDBprefix*/img_timestamp ON /*$wgDBprefix*/[image](img_timestamp) +CREATE INDEX /*$wgDBprefix*/[img_sha1] ON /*wgDBprefix*/[image](img_sha1) + +-- +-- Previous revisions of uploaded files. +-- Awkwardly, image rows have to be moved into +-- this table at re-upload time. +-- +CREATE TABLE /*$wgDBprefix*/oldimage ( + oi_name VARCHAR(255) NOT NULL DEFAULT '', + oi_archive_name VARCHAR(255) NOT NULL DEFAULT '', + oi_size INT NOT NULL DEFAULT 0, + oi_width INT NOT NULL DEFAULT 0, + oi_height INT NOT NULL DEFAULT 0, + oi_bits SMALLINT NOT NULL DEFAULT 0, + oi_description NVARCHAR(MAX) NOT NULL, + oi_user INT NOT NULL DEFAULT 0, + oi_user_text VARCHAR(255) NOT NULL DEFAULT '', + oi_timestamp DATETIME NOT NULL DEFAULT GETDATE(), + oi_metadata TEXT NOT NULL, + oi_media_type NVARCHAR(MAX) DEFAULT 'UNKNOWN', + oi_major_mime NVARCHAR(MAX) NOT NULL DEFAULT 'UNKNOWN', + oi_minor_mime NVARCHAR(MAX) NOT NULL DEFAULT 'unknown', + oi_deleted BIT NOT NULL default 0, + oi_sha1 VARCHAR(255) NOT NULL default '', +); +CREATE INDEX /*$wgDBprefix*/oi_usertext_timestamp ON /*$wgDBprefix*/oldimage(oi_user_text,oi_timestamp); +CREATE INDEX /*$wgDBprefix*/oi_name_timestamp ON /*$wgDBprefix*/oldimage(oi_name, oi_timestamp); +CREATE INDEX /*$wgDBprefix*/oi_name_archive_name ON /*$wgDBprefix*/oldimage(oi_name,oi_archive_name); +CREATE INDEX /*$wgDBprefix*/[oi_sha1] ON /*$wgDBprefix*/oldimage(oi_sha1); + +-- +-- Record of deleted file data +-- CREATE TABLE /*$wgDBprefix*/filearchive ( - fa_id int NOT NULL IDENTITY(1,1), - fa_name varchar(255) NOT NULL default '', - fa_archive_name varchar(255) NULL default '', - fa_storage_group varchar(5) NULL, - fa_storage_key varchar(17) NULL default '', - fa_deleted_user int, - fa_deleted_timestamp varchar(5) NULL default '', - fa_deleted_reason text, - fa_size int default '0', - fa_width int default '0', - fa_height int default '0', - fa_metadata text, - fa_bits int default '0', - fa_media_type TEXT default NULL, - fa_major_mime TEXT default "unknown", - fa_minor_mime varchar(10) NULL default "unknown", - fa_description text, - fa_user int default '0', - fa_user_text varchar(255) NULL, - fa_timestamp varchar(5) NULL default '', - fa_deleted tinyint NOT NULL default '0', - PRIMARY KEY (fa_id) -); - + fa_id INT NOT NULL PRIMARY KEY, + fa_name NVARCHAR(255) NOT NULL DEFAULT '', + fa_archive_name NVARCHAR(255) DEFAULT '', + fa_storage_group NVARCHAR(16), + fa_storage_key NVARCHAR(64) DEFAULT '', + fa_deleted_user INT, + fa_deleted_timestamp NVARCHAR(14) DEFAULT NULL, + fa_deleted_reason NVARCHAR(255), + fa_size SMALLINT DEFAULT 0, + fa_width SMALLINT DEFAULT 0, + fa_height SMALLINT DEFAULT 0, + fa_metadata NVARCHAR(MAX), -- was mediumblob + fa_bits SMALLINT DEFAULT 0, + fa_media_type NVARCHAR(11) DEFAULT NULL, + fa_major_mime NVARCHAR(11) DEFAULT 'unknown', + fa_minor_mime NVARCHAR(32) DEFAULT 'unknown', + fa_description NVARCHAR(255), + fa_user INT DEFAULT 0, + fa_user_text NVARCHAR(255) DEFAULT '', + fa_timestamp DATETIME DEFAULT GETDATE(), + fa_deleted BIT NOT NULL DEFAULT 0, +); +-- Pick by image name +CREATE INDEX /*$wgDBprefix*/filearchive_name ON /*$wgDBprefix*/filearchive(fa_name,fa_timestamp); +-- Pick by dupe files +CREATE INDEX /*$wgDBprefix*/filearchive_dupe ON /*$wgDBprefix*/filearchive(fa_storage_group,fa_storage_key); +-- Pick by deletion time +CREATE INDEX /*$wgDBprefix*/filearchive_time ON /*$wgDBprefix*/filearchive(fa_deleted_timestamp); +-- Pick by deleter +CREATE INDEX /*$wgDBprefix*/filearchive_user ON /*$wgDBprefix*/filearchive(fa_deleted_user); + +-- +-- Primarily a summary table for Special:Recentchanges, +-- this table contains some additional info on edits from +-- the last few days, see Article::editUpdates() +-- CREATE TABLE /*$wgDBprefix*/recentchanges ( - rc_id int NOT NULL IDENTITY(1,1), - rc_timestamp varchar(5) NOT NULL default '', - rc_cur_time varchar(5) NOT NULL default '', - rc_user int NOT NULL default '0', - rc_user_text varchar(255) NOT NULL, - rc_namespace int NOT NULL default '0', - rc_title varchar(255) NOT NULL default '', - rc_comment varchar(255) NOT NULL default '', - rc_minor tinyint NOT NULL default '0', - rc_bot tinyint NOT NULL default '0', - rc_new tinyint NOT NULL default '0', - rc_cur_id int NOT NULL default '0', - rc_this_oldid int NOT NULL default '0', - rc_last_oldid int NOT NULL default '0', - rc_type tinyint NOT NULL default '0', - rc_moved_to_ns tinyint NOT NULL default '0', - rc_moved_to_title varchar(255) NOT NULL default '', - rc_patrolled tinyint NOT NULL default '0', - rc_ip varchar(13) NOT NULL default '', - rc_old_len int, - rc_new_len int, - rc_deleted tinyint NOT NULL default '0', - rc_logid int NOT NULL default '0', - rc_log_type varchar(17) NULL default NULL, - rc_log_action varchar(17) NULL default NULL, - rc_params text NULL, - PRIMARY KEY (rc_id) -); + rc_id INT NOT NULL, + rc_timestamp DATETIME DEFAULT GETDATE(), + rc_cur_time DATETIME DEFAULT GETDATE(), + rc_user INT DEFAULT 0, + rc_user_text NVARCHAR(255) DEFAULT '', + rc_namespace SMALLINT DEFAULT 0, + rc_title NVARCHAR(255) DEFAULT '', + rc_comment NVARCHAR(255) DEFAULT '', + rc_minor BIT DEFAULT 0, + rc_bot BIT DEFAULT 0, + rc_new BIT DEFAULT 0, + rc_cur_id INT DEFAULT 0, + rc_this_oldid INT DEFAULT 0, + rc_last_oldid INT DEFAULT 0, + rc_type tinyint DEFAULT 0, + rc_moved_to_ns BIT DEFAULT 0, + rc_moved_to_title NVARCHAR(255) DEFAULT '', + rc_patrolled BIT DEFAULT 0, + rc_ip NCHAR(40) DEFAULT '', + rc_old_len INT DEFAULT 0, + rc_new_len INT DEFAULT 0, + rc_deleted BIT DEFAULT 0, + rc_logid INT DEFAULT 0, + rc_log_type NVARCHAR(255) NULL DEFAULT NULL, + rc_log_action NVARCHAR(255) NULL DEFAULT NULL, + rc_params NVARCHAR(MAX) DEFAULT '', +); +CREATE INDEX /*$wgDBprefix*/rc_timestamp ON /*$wgDBprefix*/recentchanges(rc_timestamp); +CREATE INDEX /*$wgDBprefix*/rc_namespace_title ON /*$wgDBprefix*/recentchanges(rc_namespace, rc_title); +CREATE INDEX /*$wgDBprefix*/rc_cur_id ON /*$wgDBprefix*/recentchanges(rc_cur_id); +CREATE INDEX /*$wgDBprefix*/new_name_timestamp ON /*$wgDBprefix*/recentchanges(rc_new,rc_namespace,rc_timestamp); +CREATE INDEX /*$wgDBprefix*/rc_ip ON /*$wgDBprefix*/recentchanges(rc_ip); +CREATE INDEX /*$wgDBprefix*/rc_ns_usertext ON /*$wgDBprefix*/recentchanges(rc_namespace, rc_user_text); +CREATE INDEX /*$wgDBprefix*/rc_user_text ON /*$wgDBprefix*/recentchanges(rc_user_text, rc_timestamp); +; CREATE TABLE /*$wgDBprefix*/watchlist ( - wl_user int NOT NULL, - wl_namespace int NOT NULL default '0', - wl_title varchar(255) NOT NULL default '', - wl_notificationtimestamp varchar(5) NULL + wl_user INT NOT NULL, + wl_namespace SMALLINT NOT NULL DEFAULT 0, + wl_title NVARCHAR(255) NOT NULL DEFAULT '', + wl_notificationtimestamp NVARCHAR(14) DEFAULT NULL, + ); +CREATE UNIQUE INDEX /*$wgDBprefix*/namespace_title ON /*$wgDBprefix*/watchlist(wl_namespace,wl_title); +-- +-- Used by the math module to keep track +-- of previously-rendered items. +-- CREATE TABLE /*$wgDBprefix*/math ( - math_inputhash varchar(5) NOT NULL, - math_outputhash varchar(5) NOT NULL, - math_html_conservativeness tinyint NOT NULL, - math_html text, - math_mathml text + math_inputhash varbinary(16) NOT NULL PRIMARY KEY, + math_outputhash varbinary(16) NOT NULL, + math_html_conservativeness tinyint NOT NULL, + math_html NVARCHAR(MAX), + math_mathml NVARCHAR(MAX), ); +-- Needs fulltext index. CREATE TABLE /*$wgDBprefix*/searchindex ( - si_page int NOT NULL, - si_title varchar(255) NOT NULL default '', - si_text text NOT NULL -); - + si_page INT NOT NULL unique REFERENCES /*$wgDBprefix*/page(page_id) ON DELETE CASCADE, + si_title varbinary(max) NOT NULL, + si_text varbinary(max) NOT NULL, + si_ext CHAR(4) NOT NULL DEFAULT '.txt', +); +CREATE FULLTEXT CATALOG wikidb AS DEFAULT; +CREATE UNIQUE CLUSTERED INDEX searchindex_page ON searchindex (si_page); +CREATE FULLTEXT INDEX on searchindex (si_title TYPE COLUMN si_ext, si_text TYPE COLUMN si_ext) +KEY INDEX searchindex_page +; + +-- This table is not used unless profiling is turned on +CREATE TABLE profiling ( + pf_count INTEGER NOT NULL DEFAULT 0, + pf_time NUMERIC(18,10) NOT NULL DEFAULT 0, + pf_name NVARCHAR(200) NOT NULL, + pf_server NVARCHAR(200) NULL +); +CREATE UNIQUE INDEX pf_name_server ON profiling (pf_name, pf_server); + +-- +-- Recognized INTerwiki link prefixes +-- CREATE TABLE /*$wgDBprefix*/interwiki ( - iw_prefix varchar(32) NOT NULL, - iw_url text NOT NULL, - iw_local bit NOT NULL, - iw_trans tinyint NOT NULL default 0 + iw_prefix NCHAR(32) NOT NULL PRIMARY KEY, + iw_url NCHAR(127) NOT NULL, + iw_api TEXT NOT NULL DEFAULT '', + iw_wikiid NVARCHAR(64) NOT NULL DEFAULT '', + iw_local BIT NOT NULL, + iw_trans BIT NOT NULL DEFAULT 0, ); +-- +-- Used for caching expensive grouped queries +-- CREATE TABLE /*$wgDBprefix*/querycache ( - qc_type varchar(10) NOT NULL, - qc_value int NOT NULL default '0', - qc_namespace int NOT NULL default '0', - qc_title varchar(255) NOT NULL default '' + qc_type NCHAR(32) NOT NULL, + qc_value INT NOT NULL DEFAULT '0', + qc_namespace SMALLINT NOT NULL DEFAULT 0, + qc_title NCHAR(255) NOT NULL DEFAULT '', + CONSTRAINT /*$wgDBprefix*/qc_pk PRIMARY KEY (qc_type,qc_value) ); +-- +-- For a few generic cache operations if not using Memcached +-- CREATE TABLE /*$wgDBprefix*/objectcache ( - keyname varchar(17) NOT NULL default '', - value text, - exptime datetime -); - + keyname NCHAR(255) NOT NULL DEFAULT '', + [value] NVARCHAR(MAX), -- IMAGE, + exptime DATETIME, -- This is treated as a DATETIME +); +CREATE CLUSTERED INDEX /*$wgDBprefix*/[objectcache_time] ON /*$wgDBprefix*/objectcache(exptime); +CREATE UNIQUE INDEX /*$wgDBprefix*/[objectcache_PK] ON /*wgDBprefix*/objectcache(keyname); +-- +-- Cache of INTerwiki transclusion +-- CREATE TABLE /*$wgDBprefix*/transcache ( - tc_url varchar(17) NOT NULL, - tc_contents text, - tc_time int NOT NULL + tc_url NVARCHAR(255) NOT NULL PRIMARY KEY, + tc_contents NVARCHAR(MAX), + tc_time INT NOT NULL, ); CREATE TABLE /*$wgDBprefix*/logging ( - log_id int NOT NULL IDENTITY(1,1), - log_type varchar(4) NOT NULL default '', - log_action varchar(4) NOT NULL default '', - log_timestamp varchar(5) NOT NULL default '19700101000000', - log_user int NOT NULL default 0, - log_namespace int NOT NULL default 0, - log_title varchar(255) NOT NULL default '', - log_comment varchar(255) NOT NULL default '', - log_params text NOT NULL, - log_deleted tinyint NOT NULL default '0', - PRIMARY KEY (log_id) -); + log_id INT PRIMARY KEY IDENTITY, + log_type NCHAR(10) NOT NULL DEFAULT '', + log_action NCHAR(10) NOT NULL DEFAULT '', + log_timestamp DATETIME NOT NULL DEFAULT GETDATE(), + log_user INT NOT NULL DEFAULT 0, + log_user_text NVARCHAR(255) NOT NULL DEFAULT '', + log_namespace INT NOT NULL DEFAULT 0, + log_title NVARCHAR(255) NOT NULL DEFAULT '', + log_page INT NULL DEFAULT NULL, + log_comment NVARCHAR(255) NOT NULL DEFAULT '', + log_params NVARCHAR(MAX) NOT NULL, + log_deleted BIT NOT NULL DEFAULT 0, +); +CREATE INDEX /*$wgDBprefix*/type_time ON /*$wgDBprefix*/logging (log_type, log_timestamp); +CREATE INDEX /*$wgDBprefix*/user_time ON /*$wgDBprefix*/logging (log_user, log_timestamp); +CREATE INDEX /*$wgDBprefix*/page_time ON /*$wgDBprefix*/logging (log_namespace, log_title, log_timestamp); +CREATE INDEX /*$wgDBprefix*/times ON /*$wgDBprefix*/logging (log_timestamp); +CREATE INDEX /*$wgDBprefix*/log_user_type_time ON /*$wgDBprefix*/logging (log_user, log_type, log_timestamp); +CREATE INDEX /*$wgDBprefix*/log_page_id_time ON /*$wgDBprefix*/logging (log_page,log_timestamp); + +CREATE TABLE /*$wgDBprefix*/log_search ( + -- The type of ID (rev ID, log ID, rev timestamp, username) + ls_field NVARCHAR(32) NOT NULL, + -- The value of the ID + ls_value NVARCHAR(255) NOT NULL, + -- Key to log_id + ls_log_id INT NOT NULL default 0, +); +CREATE UNIQUE INDEX /*$wgDBprefix*/ls_field_val ON /*$wgDBprefix*/log_search (ls_field,ls_value,ls_log_id); +CREATE INDEX /*$wgDBprefix*/ls_log_id ON /*$wgDBprefix*/log_search (ls_log_id); + CREATE TABLE /*$wgDBprefix*/trackbacks ( - tb_id int IDENTITY(1,1), - tb_page int REFERENCES /*$wgDBprefix*/page(page_id) ON DELETE CASCADE, - tb_title varchar(255) NOT NULL, - tb_url text NOT NULL, - tb_ex text, - tb_name varchar(255) NULL, - PRIMARY KEY (tb_id) + tb_id INT PRIMARY KEY, + tb_page INT REFERENCES /*$wgDBprefix*/page(page_id) ON DELETE CASCADE, + tb_title NVARCHAR(255) NOT NULL, + tb_url NVARCHAR(255) NOT NULL, + tb_ex NVARCHAR(MAX), + tb_name NVARCHAR(255), ); +CREATE INDEX /*$wgDBprefix*/trackbacks_page ON /*$wgDBprefix*/trackbacks(tb_page); +-- Jobs performed by parallel apache threads or a command-line daemon CREATE TABLE /*$wgDBprefix*/job ( - job_id int NOT NULL IDENTITY(1,1), - job_cmd varchar(17) NOT NULL default '', - job_namespace int NOT NULL, - job_title varchar(255) NOT NULL, - job_params text NOT NULL, - PRIMARY KEY (job_id) + job_id INT NOT NULL PRIMARY KEY, + job_cmd NVARCHAR(200) NOT NULL DEFAULT '', + job_namespace INT NOT NULL, + job_title NVARCHAR(200) NOT NULL, + job_params NVARCHAR(255) NOT NULL, ); +CREATE INDEX /*$wgDBprefix*/job_idx ON /*$wgDBprefix*/job(job_cmd,job_namespace,job_title); +-- Details of updates to cached special pages CREATE TABLE /*$wgDBprefix*/querycache_info ( - qci_type varchar(10) NOT NULL default '', - qci_timestamp varchar(5) NOT NULL default '19700101000000' + qci_type NVARCHAR(32) NOT NULL DEFAULT '' PRIMARY KEY, + qci_timestamp NVARCHAR(14) NOT NULL DEFAULT '19700101000000', ); +-- For each redirect, this table contains exactly one row defining its target CREATE TABLE /*$wgDBprefix*/redirect ( - rd_from int NOT NULL default '0', - rd_namespace int NOT NULL default '0', - rd_title varchar(255) NOT NULL default '', - PRIMARY KEY (rd_from) + rd_from INT NOT NULL DEFAULT 0 REFERENCES /*$wgDBprefix*/[page](page_id) ON DELETE CASCADE, + rd_namespace SMALLINT NOT NULL DEFAULT '0', + rd_title NVARCHAR(255) NOT NULL DEFAULT '', + rd_interwiki NVARCHAR(32) DEFAULT NULL, + rd_fragment NVARCHAR(255) DEFAULT NULL, ); +CREATE UNIQUE INDEX /*$wgDBprefix*/rd_ns_title ON /*$wgDBprefix*/redirect(rd_namespace,rd_title,rd_from); +-- Used for caching expensive grouped queries that need two links (for example double-redirects) CREATE TABLE /*$wgDBprefix*/querycachetwo ( - qcc_type varchar(10) NOT NULL, - qcc_value int NOT NULL default '0', - qcc_namespace int NOT NULL default '0', - qcc_title varchar(255) NOT NULL default '', - qcc_namespacetwo int NOT NULL default '0', - qcc_titletwo varchar(255) NOT NULL default '' + qcc_type NCHAR(32) NOT NULL, + qcc_value INT NOT NULL DEFAULT 0, + qcc_namespace INT NOT NULL DEFAULT 0, + qcc_title NCHAR(255) NOT NULL DEFAULT '', + qcc_namespacetwo INT NOT NULL DEFAULT 0, + qcc_titletwo NCHAR(255) NOT NULL DEFAULT '', + CONSTRAINT /*$wgDBprefix*/qcc_type PRIMARY KEY(qcc_type,qcc_value), ); +CREATE UNIQUE INDEX /*$wgDBprefix*/qcc_title ON /*$wgDBprefix*/querycachetwo(qcc_type,qcc_namespace,qcc_title); +CREATE UNIQUE INDEX /*$wgDBprefix*/qcc_titletwo ON /*$wgDBprefix*/querycachetwo(qcc_type,qcc_namespacetwo,qcc_titletwo); -CREATE TABLE /*$wgDBprefix*/page_restrictions ( - pr_page int NOT NULL, - pr_type varchar(17) NOT NULL, - pr_level varchar(17) NOT NULL, - pr_cascade tinyint NOT NULL, - pr_user int NULL, - pr_expiry varchar(5) NULL, - pr_id int NOT NULL IDENTITY(1,1), - PRIMARY KEY (pr_page,pr_type) -); +--- Used for storing page restrictions (i.e. protection levels) +CREATE TABLE /*$wgDBprefix*/page_restrictions ( + pr_page INT NOT NULL REFERENCES /*$wgDBprefix*/page(page_id) ON DELETE CASCADE, + pr_type NVARCHAR(200) NOT NULL, + pr_level NVARCHAR(200) NOT NULL, + pr_cascade SMALLINT NOT NULL, + pr_user INT NULL, + pr_expiry DATETIME NULL, + pr_id INT UNIQUE IDENTITY, + CONSTRAINT /*$wgDBprefix*/pr_pagetype PRIMARY KEY(pr_page,pr_type), +); +CREATE INDEX /*$wgDBprefix*/pr_page ON /*$wgDBprefix*/page_restrictions(pr_page); +CREATE INDEX /*$wgDBprefix*/pr_typelevel ON /*$wgDBprefix*/page_restrictions(pr_type,pr_level); +CREATE INDEX /*$wgDBprefix*/pr_pagelevel ON /*$wgDBprefix*/page_restrictions(pr_level); +CREATE INDEX /*$wgDBprefix*/pr_cascade ON /*$wgDBprefix*/page_restrictions(pr_cascade); +; + +-- Protected titles - nonexistent pages that have been protected CREATE TABLE /*$wgDBprefix*/protected_titles ( pt_namespace int NOT NULL, - pt_title varchar(255) NOT NULL, + pt_title NVARCHAR(255) NOT NULL, pt_user int NOT NULL, - pt_reason text, - pt_timestamp varchar(5) NOT NULL, - pt_expiry varchar(5) NOT NULL default '', - pt_create_perm varchar(17) NOT NULL, - PRIMARY KEY (pt_namespace,pt_title) + pt_reason NVARCHAR(3555), + pt_timestamp DATETIME NOT NULL, + pt_expiry DATETIME NOT NULL default '', + pt_create_perm NVARCHAR(60) NOT NULL, + PRIMARY KEY (pt_namespace,pt_title), ); +CREATE INDEX /*$wgDBprefix*/pt_timestamp ON /*$wgDBprefix*/protected_titles(pt_timestamp); +; +-- Name/value pairs indexed by page_id CREATE TABLE /*$wgDBprefix*/page_props ( pp_page int NOT NULL, - pp_propname varchar(17) NOT NULL, - pp_value text NOT NULL, + pp_propname NVARCHAR(60) NOT NULL, + pp_value NVARCHAR(MAX) NOT NULL, PRIMARY KEY (pp_page,pp_propname) ); +-- A table to log updates, one text key row per update. CREATE TABLE /*$wgDBprefix*/updatelog ( - ul_key varchar(255) NOT NULL, + ul_key NVARCHAR(255) NOT NULL, PRIMARY KEY (ul_key) ); +-- NOTE To enable full text indexing on SQL 2008 you need to create an account FDH$MSSQLSERVER +-- AND assign a password for the FDHOST process to run under +-- Once you have assigned a password to that account, you need to run the following stored procedure +-- replacing XXXXX with the password you used. +-- EXEC sp_fulltext_resetfdhostaccount @username = 'FDH$MSSQLSERVER', @password = 'XXXXXX' ; + +--- Add the full-text capabilities, depricated in SQL Server 2005, FTS is enabled on all user created tables by default unless you are using SQL Server 2005 Express +--sp_fulltext_database 'enable'; +--sp_fulltext_catalog 'WikiCatalog', 'create' +--sp_fulltext_table +--sp_fulltext_column +--sp_fulltext_table 'Articles', 'activate' diff --git a/maintenance/mwdocgen.php b/maintenance/mwdocgen.php index b91922c3..92311521 100644 --- a/maintenance/mwdocgen.php +++ b/maintenance/mwdocgen.php @@ -21,7 +21,9 @@ * @todo document * @ingroup Maintenance * - * @author Ashar Voultoiz + * @author Ashar Voultoiz + * @author Brion Vibber + * @author Alexandre Emsenhuber * @version first release */ @@ -29,7 +31,7 @@ # Variables / Configuration # -if( php_sapi_name() != 'cli' ) { +if ( php_sapi_name() != 'cli' ) { echo 'Run me from the command line.'; die( -1 ); } @@ -37,9 +39,6 @@ if( php_sapi_name() != 'cli' ) { /** Figure out the base directory for MediaWiki location */ $mwPath = dirname( dirname( __FILE__ ) ) . DIRECTORY_SEPARATOR; -/** Global variable: temporary directory */ -$tmpPath = '/tmp/'; - /** doxygen binary script */ $doxygenBin = 'doxygen'; @@ -50,14 +49,14 @@ $doxygenTemplate = $mwPath . 'maintenance/Doxyfile'; $svnstat = $mwPath . 'bin/svnstat'; /** where Phpdoc should output documentation */ -#$doxyOutput = '/var/www/mwdoc/'; +# $doxyOutput = '/var/www/mwdoc/'; $doxyOutput = $mwPath . 'docs' . DIRECTORY_SEPARATOR ; /** MediaWiki subpaths */ -$mwPathI = $mwPath.'includes/'; -$mwPathL = $mwPath.'languages/'; -$mwPathM = $mwPath.'maintenance/'; -$mwPathS = $mwPath.'skins/'; +$mwPathI = $mwPath . 'includes/'; +$mwPathL = $mwPath . 'languages/'; +$mwPathM = $mwPath . 'maintenance/'; +$mwPathS = $mwPath . 'skins/'; /** Variable to get user input */ $input = ''; @@ -67,11 +66,14 @@ $exclude = ''; # Functions # +define( 'MEDIAWIKI', true ); +require_once( "$mwPath/includes/GlobalFunctions.php" ); + /** * Read a line from the shell * @param $prompt String */ -function readaline( $prompt = '' ){ +function readaline( $prompt = '' ) { print $prompt; $fp = fopen( "php://stdin", "r" ); $resp = trim( fgets( $fp, 1024 ) ); @@ -88,27 +90,27 @@ function getSvnRevision( $dir ) { // http://svnbook.red-bean.com/nightly/en/svn.developer.insidewc.html $entries = $dir . '/.svn/entries'; - if( !file_exists( $entries ) ) { + if ( !file_exists( $entries ) ) { return false; } $content = file( $entries ); // check if file is xml (subversion release <= 1.3) or not (subversion release = 1.4) - if( preg_match( '/^<\?xml/', $content[0] ) ) { + if ( preg_match( '/^<\?xml/', $content[0] ) ) { // subversion is release <= 1.3 - if( !function_exists( 'simplexml_load_file' ) ) { + if ( !function_exists( 'simplexml_load_file' ) ) { // We could fall back to expat... YUCK return false; } $xml = simplexml_load_file( $entries ); - if( $xml ) { - foreach( $xml->entry as $entry ) { - if( $xml->entry[0]['name'] == '' ) { + if ( $xml ) { + foreach ( $xml->entry as $entry ) { + if ( $xml->entry[0]['name'] == '' ) { // The directory entry should always have a revision marker. - if( $entry['revision'] ) { + if ( $entry['revision'] ) { return intval( $entry['revision'] ); } } @@ -129,15 +131,14 @@ function getSvnRevision( $dir ) { * @param $currentVersion String: Version number of the software * @param $svnstat String: path to the svnstat file * @param $input String: Path to analyze. - * @param $exclude String: Additionals path regex to exlcude - * (LocalSettings.php, AdminSettings.php and .svn directories are always excluded) + * @param $exclude String: Additionals path regex to exlcude + * (LocalSettings.php, AdminSettings.php, .svn and .git directories are always excluded) */ -function generateConfigFile( $doxygenTemplate, $outputDirectory, $stripFromPath, $currentVersion, $svnstat, $input, $exclude ){ - global $tmpPath; +function generateConfigFile( $doxygenTemplate, $outputDirectory, $stripFromPath, $currentVersion, $svnstat, $input, $exclude ) { $template = file_get_contents( $doxygenTemplate ); - // Replace template placeholders by correct values. + // Replace template placeholders by correct values. $replacements = array( '{{OUTPUT_DIRECTORY}}' => $outputDirectory, '{{STRIP_FROM_PATH}}' => $stripFromPath, @@ -147,8 +148,8 @@ function generateConfigFile( $doxygenTemplate, $outputDirectory, $stripFromPath, '{{EXCLUDE}}' => $exclude, ); $tmpCfg = str_replace( array_keys( $replacements ), array_values( $replacements ), $template ); - $tmpFileName = $tmpPath . 'mwdocgen'. rand() .'.tmp'; - file_put_contents( $tmpFileName , $tmpCfg ) or die("Could not write doxygen configuration to file $tmpFileName\n"); + $tmpFileName = tempnam( wfTempDir(), 'mwdocgen-' ); + file_put_contents( $tmpFileName , $tmpCfg ) or die( "Could not write doxygen configuration to file $tmpFileName\n" ); return $tmpFileName; } @@ -159,7 +160,7 @@ function generateConfigFile( $doxygenTemplate, $outputDirectory, $stripFromPath, unset( $file ); -if( is_array( $argv ) && isset( $argv[1] ) ) { +if ( is_array( $argv ) && isset( $argv[1] ) ) { switch( $argv[1] ) { case '--all': $input = 0; break; case '--includes': $input = 1; break; @@ -168,7 +169,7 @@ if( is_array( $argv ) && isset( $argv[1] ) ) { case '--skins': $input = 4; break; case '--file': $input = 5; - if( isset( $argv[2] ) ) { + if ( isset( $argv[2] ) ) { $file = $argv[2]; } break; @@ -178,7 +179,7 @@ if( is_array( $argv ) && isset( $argv[1] ) ) { // TODO : generate a list of paths )) -if( $input === '' ) { +if ( $input === '' ) { echo <<getOption( 'prefix', '' ); $key = intval( $this->getOption( 'key', 0 ) ); - if( $prefix ) { + if ( $prefix ) { $retval = $this->checkPrefix( $key, $prefix, $fix, $suffix ); } else { $retval = $this->checkAll( $fix, $suffix ); } - - if( $retval ) { + + if ( $retval ) { $this->output( "\nLooks good!\n" ); } else { $this->output( "\nOh noeees\n" ); @@ -62,44 +62,44 @@ class NamespaceConflictChecker extends Maintenance { /** * @todo Document - * @param $fix bool Whether or not to fix broken entries - * @param $suffix String Suffix to append to renamed articles + * @param $fix Boolean: whether or not to fix broken entries + * @param $suffix String: suffix to append to renamed articles */ private function checkAll( $fix, $suffix = '' ) { global $wgContLang, $wgNamespaceAliases, $wgCanonicalNamespaceNames; global $wgCapitalLinks; - + $spaces = array(); - + // List interwikis first, so they'll be overridden // by any conflicting local namespaces. - foreach( $this->getInterwikiList() as $prefix ) { + foreach ( $this->getInterwikiList() as $prefix ) { $name = $wgContLang->ucfirst( $prefix ); $spaces[$name] = 0; } // Now pull in all canonical and alias namespaces... - foreach( $wgCanonicalNamespaceNames as $ns => $name ) { + foreach ( $wgCanonicalNamespaceNames as $ns => $name ) { // This includes $wgExtraNamespaces - if( $name !== '' ) { + if ( $name !== '' ) { $spaces[$name] = $ns; } } - foreach( $wgContLang->getNamespaces() as $ns => $name ) { - if( $name !== '' ) { + foreach ( $wgContLang->getNamespaces() as $ns => $name ) { + if ( $name !== '' ) { $spaces[$name] = $ns; } } - foreach( $wgNamespaceAliases as $name => $ns ) { + foreach ( $wgNamespaceAliases as $name => $ns ) { $spaces[$name] = $ns; } - foreach( $wgContLang->getNamespaceAliases() as $name => $ns ) { + foreach ( $wgContLang->getNamespaceAliases() as $name => $ns ) { $spaces[$name] = $ns; } - + // We'll need to check for lowercase keys as well, // since we're doing case-sensitive searches in the db. - foreach( $spaces as $name => $ns ) { + foreach ( $spaces as $name => $ns ) { $moreNames = array(); $moreNames[] = $wgContLang->uc( $name ); $moreNames[] = $wgContLang->ucfirst( $wgContLang->lc( $name ) ); @@ -107,24 +107,24 @@ class NamespaceConflictChecker extends Maintenance { $moreNames[] = $wgContLang->ucwords( $wgContLang->lc( $name ) ); $moreNames[] = $wgContLang->ucwordbreaks( $name ); $moreNames[] = $wgContLang->ucwordbreaks( $wgContLang->lc( $name ) ); - if( !$wgCapitalLinks ) { - foreach( $moreNames as $altName ) { + if ( !$wgCapitalLinks ) { + foreach ( $moreNames as $altName ) { $moreNames[] = $wgContLang->lcfirst( $altName ); } $moreNames[] = $wgContLang->lcfirst( $name ); } - foreach( array_unique( $moreNames ) as $altName ) { - if( $altName !== $name ) { + foreach ( array_unique( $moreNames ) as $altName ) { + if ( $altName !== $name ) { $spaces[$altName] = $ns; } } } - + ksort( $spaces ); asort( $spaces ); - + $ok = true; - foreach( $spaces as $name => $ns ) { + foreach ( $spaces as $name => $ns ) { $ok = $this->checkNamespace( $ns, $name, $fix, $suffix ) && $ok; } return $ok; @@ -132,44 +132,44 @@ class NamespaceConflictChecker extends Maintenance { /** * Get the interwiki list + * * @todo Needs to respect interwiki cache! - * @return array + * @return Array */ private function getInterwikiList() { $result = $this->db->select( 'interwiki', array( 'iw_prefix' ) ); $prefixes = array(); - foreach( $result as $row ) { + foreach ( $result as $row ) { $prefixes[] = $row->iw_prefix; } - $this->db->freeResult( $result ); return $prefixes; } /** * @todo Document - * @param $ns int A namespace id + * @param $ns Integer: a namespace id * @param $name String - * @param $fix bool Whether to fix broken entries - * @param $suffix String Suffix to append to renamed articles + * @param $fix Boolean: whether to fix broken entries + * @param $suffix String: suffix to append to renamed articles */ private function checkNamespace( $ns, $name, $fix, $suffix = '' ) { $conflicts = $this->getConflicts( $ns, $name ); $count = count( $conflicts ); - if( $count == 0 ) { + if ( $count == 0 ) { return true; } $ok = true; - foreach( $conflicts as $row ) { + foreach ( $conflicts as $row ) { $resolvable = $this->reportConflict( $row, $suffix ); $ok = $ok && $resolvable; - if( $fix && ( $resolvable || $suffix != '' ) ) { + if ( $fix && ( $resolvable || $suffix != '' ) ) { $ok = $this->resolveConflict( $row, $resolvable, $suffix ) && $ok; } } return $ok; } - + /** * @todo: do this for reals */ @@ -181,8 +181,9 @@ class NamespaceConflictChecker extends Maintenance { /** * Find pages in mainspace that have a prefix of the new namespace * so we know titles that will need migrating - * @param $ns int Namespace id (id for new namespace?) - * @param $name String Prefix that is being made a namespace + * + * @param $ns Integer: namespace id (id for new namespace?) + * @param $name String: prefix that is being made a namespace */ private function getConflicts( $ns, $name ) { $page = 'page'; @@ -192,27 +193,26 @@ class NamespaceConflictChecker extends Maintenance { $encNamespace = $this->db->addQuotes( $ns ); $titleSql = "TRIM(LEADING '$prefix:' FROM {$page}_title)"; - if( $ns == 0 ) { + if ( $ns == 0 ) { // An interwiki; try an alternate encoding with '-' for ':' $titleSql = $this->db->buildConcat( array( "'$prefix-'", $titleSql ) ); } - + $sql = "SELECT {$page}_id AS id, - {$page}_title AS oldtitle, - $encNamespace AS namespace, - $titleSql AS title - FROM {$table} - WHERE {$page}_namespace=0 - AND {$page}_title " . $this->db->buildLike( $name . ':', $this->db->anyString() ); + {$page}_title AS oldtitle, + $encNamespace + {$page}_namespace AS namespace, + $titleSql AS title, + {$page}_namespace AS oldnamespace + FROM {$table} + WHERE ( {$page}_namespace=0 OR {$page}_namespace=1 ) + AND {$page}_title " . $this->db->buildLike( $name . ':', $this->db->anyString() ); $result = $this->db->query( $sql, __METHOD__ ); $set = array(); - foreach( $result as $row ) { + foreach ( $result as $row ) { $set[] = $row; } - $this->db->freeResult( $result ); - return $set; } @@ -221,25 +221,27 @@ class NamespaceConflictChecker extends Maintenance { */ private function reportConflict( $row, $suffix ) { $newTitle = Title::makeTitleSafe( $row->namespace, $row->title ); - if( is_null($newTitle) || !$newTitle->canExist() ) { + if ( is_null( $newTitle ) || !$newTitle->canExist() ) { // Title is also an illegal title... // For the moment we'll let these slide to cleanupTitles or whoever. - $this->output( sprintf( "... %d (0,\"%s\")\n", + $this->output( sprintf( "... %d (%d,\"%s\")\n", $row->id, + $row->oldnamespace, $row->oldtitle ) ); $this->output( "... *** cannot resolve automatically; illegal title ***\n" ); return false; } - $this->output( sprintf( "... %d (0,\"%s\") -> (%d,\"%s\") [[%s]]\n", + $this->output( sprintf( "... %d (%d,\"%s\") -> (%d,\"%s\") [[%s]]\n", $row->id, + $row->oldnamespace, $row->oldtitle, $newTitle->getNamespace(), $newTitle->getDBkey(), $newTitle->getPrefixedText() ) ); $id = $newTitle->getArticleId(); - if( $id ) { + if ( $id ) { $this->output( "... *** cannot resolve automatically; page exists with ID $id ***\n" ); return false; } else { @@ -249,24 +251,26 @@ class NamespaceConflictChecker extends Maintenance { /** * Resolve any conflicts - * @param $row Row from the page table to fix - * @param $resolveable bool - * @param $suffix String Suffix to append to the fixed page + * + * @param $row Object: row from the page table to fix + * @param $resolvable Boolean + * @param $suffix String: suffix to append to the fixed page */ private function resolveConflict( $row, $resolvable, $suffix ) { - if( !$resolvable ) { + if ( !$resolvable ) { $this->output( "... *** old title {$row->title}\n" ); - while( true ) { + while ( true ) { $row->title .= $suffix; $this->output( "... *** new title {$row->title}\n" ); $title = Title::makeTitleSafe( $row->namespace, $row->title ); - if ( ! $title ) { + if ( !$title ) { $this->output( "... !!! invalid title\n" ); return false; } - if ( $id = $title->getArticleId() ) { + $id = $title->getArticleId(); + if ( $id ) { $this->output( "... *** page exists with ID $id ***\n" ); - } else { + } else { break; } } @@ -278,9 +282,10 @@ class NamespaceConflictChecker extends Maintenance { /** * Resolve a given conflict - * @param $row Row from the old broken entry - * @param $table String Table to update - * @param $prefix String Prefix for column name, like page or ar + * + * @param $row Object: row from the old broken entry + * @param $table String: table to update + * @param $prefix String: prefix for column name, like page or ar */ private function resolveConflictOn( $row, $table, $prefix ) { $this->output( "... resolving on $table... " ); @@ -291,8 +296,9 @@ class NamespaceConflictChecker extends Maintenance { "{$prefix}_title" => $newTitle->getDBkey(), ), array( - "{$prefix}_namespace" => 0, - "{$prefix}_title" => $row->oldtitle, + // "{$prefix}_namespace" => 0, + // "{$prefix}_title" => $row->oldtitle, + "{$prefix}_id" => $row->id, ), __METHOD__ ); $this->output( "ok.\n" ); @@ -301,4 +307,4 @@ class NamespaceConflictChecker extends Maintenance { } $maintClass = "NamespaceConflictChecker"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/nextJobDB.php b/maintenance/nextJobDB.php index 75855bb3..8d8229e2 100644 --- a/maintenance/nextJobDB.php +++ b/maintenance/nextJobDB.php @@ -21,7 +21,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class nextJobDB extends Maintenance { public function __construct() { @@ -39,13 +39,13 @@ class nextJobDB extends Maintenance { $pendingDBs = $wgMemc->get( $mckey ); # If we didn't get it from the cache - if( !$pendingDBs ) { + if ( !$pendingDBs ) { $pendingDBs = $this->getPendingDbs( $type ); - $wgMemc->get( $mckey, $pendingDBs, 300 ); + $wgMemc->set( $mckey, $pendingDBs, 300 ); } # If we've got a pending job in a db, display it. if ( $pendingDBs ) { - $this->output( $pendingDBs[mt_rand(0, count( $pendingDBs ) - 1)] ); + $this->output( $pendingDBs[mt_rand( 0, count( $pendingDBs ) - 1 )] ); } } @@ -61,10 +61,10 @@ class nextJobDB extends Maintenance { $dbsByMaster = array(); foreach ( $wgLocalDatabases as $db ) { $lb = wfGetLB( $db ); - $dbsByMaster[$lb->getServerName(0)][] = $db; + $dbsByMaster[$lb->getServerName( 0 )][] = $db; } - foreach ( $dbsByMaster as $master => $dbs ) { + foreach ( $dbsByMaster as $dbs ) { $dbConn = wfGetDB( DB_MASTER, array(), $dbs[0] ); $stype = $dbConn->addQuotes( $type ); @@ -100,4 +100,4 @@ class nextJobDB extends Maintenance { } $maintClass = "nextJobDb"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/nukeNS.php b/maintenance/nukeNS.php index 21e921fe..c89fa94b 100644 --- a/maintenance/nukeNS.php +++ b/maintenance/nukeNS.php @@ -33,7 +33,7 @@ * based on nukePage by Rob Church */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class NukeNS extends Maintenance { public function __construct() { @@ -55,8 +55,8 @@ class NukeNS extends Maintenance { $n_deleted = 0; - foreach( $res as $row ) { - //echo "$ns_name:".$row->page_title, "\n"; + foreach ( $res as $row ) { + // echo "$ns_name:".$row->page_title, "\n"; $title = Title::makeTitle( $ns, $row->page_title ); $id = $title->getArticleID(); @@ -64,19 +64,19 @@ class NukeNS extends Maintenance { $res2 = $dbw->query( "SELECT rev_id FROM $tbl_rev WHERE rev_page = $id" ); $revs = array(); - foreach( $res2 as $row2 ) { + foreach ( $res2 as $row2 ) { $revs[] = $row2->rev_id; } $count = count( $revs ); - //skip anything that looks modified (i.e. multiple revs) + // skip anything that looks modified (i.e. multiple revs) if ( $count == 1 ) { - #echo $title->getPrefixedText(), "\t", $count, "\n"; + # echo $title->getPrefixedText(), "\t", $count, "\n"; $this->output( "delete: " . $title->getPrefixedText() . "\n" ); - //as much as I hate to cut & paste this, it's a little different, and - //I already have the id & revs - if( $delete ) { + // as much as I hate to cut & paste this, it's a little different, and + // I already have the id & revs + if ( $delete ) { $dbw->query( "DELETE FROM $tbl_pag WHERE page_id = $id" ); $dbw->commit(); // Delete revisions as appropriate @@ -92,18 +92,18 @@ class NukeNS extends Maintenance { $dbw->commit(); if ( $n_deleted > 0 ) { - #update statistics - better to decrement existing count, or just count - #the page table? + # update statistics - better to decrement existing count, or just count + # the page table? $pages = $dbw->selectField( 'site_stats', 'ss_total_pages' ); $pages -= $n_deleted; $dbw->update( - 'site_stats', - array( 'ss_total_pages' => $pages ), + 'site_stats', + array( 'ss_total_pages' => $pages ), array( 'ss_row_id' => 1 ), __METHOD__ ); } - + if ( !$delete ) { $this->output( "To update the database, run the script with the --delete option.\n" ); } @@ -111,4 +111,4 @@ class NukeNS extends Maintenance { } $maintClass = "NukeNS"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/nukePage.php b/maintenance/nukePage.php index 16ff2e40..4a073a5e 100644 --- a/maintenance/nukePage.php +++ b/maintenance/nukePage.php @@ -22,7 +22,7 @@ * @author Rob Church */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class NukePage extends Maintenance { public function __construct() { @@ -47,7 +47,7 @@ class NukePage extends Maintenance { # Get page ID $this->output( "Searching for \"$name\"..." ); $title = Title::newFromText( $name ); - if( $title ) { + if ( $title ) { $id = $title->getArticleID(); $real = $title->getPrefixedText(); $isGoodArticle = $title->isContentPage(); @@ -56,14 +56,14 @@ class NukePage extends Maintenance { # Get corresponding revisions $this->output( "Searching for revisions..." ); $res = $dbw->query( "SELECT rev_id FROM $tbl_rev WHERE rev_page = $id" ); - foreach( $res as $row ) { + foreach ( $res as $row ) { $revs[] = $row->rev_id; } $count = count( $revs ); $this->output( "found $count.\n" ); # Delete the page record and associated recent changes entries - if( $delete ) { + if ( $delete ) { $this->output( "Deleting page record..." ); $dbw->query( "DELETE FROM $tbl_pag WHERE page_id = $id" ); $this->output( "done.\n" ); @@ -75,7 +75,7 @@ class NukePage extends Maintenance { $dbw->commit(); # Delete revisions as appropriate - if( $delete && $count ) { + if ( $delete && $count ) { $this->output( "Deleting revisions..." ); $this->deleteRevisions( $revs ); $this->output( "done.\n" ); @@ -105,9 +105,9 @@ class NukePage extends Maintenance { $set = implode( ', ', $ids ); $dbw->query( "DELETE FROM $tbl_rev WHERE rev_id IN ( $set )" ); - $dbw->commit(); + $dbw->commit(); } } $maintClass = "NukePage"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/ora/patch_seq_names_pre1.16.sql b/maintenance/ora/patch_seq_names_pre1.16.sql deleted file mode 100644 index 5346b141..00000000 --- a/maintenance/ora/patch_seq_names_pre1.16.sql +++ /dev/null @@ -1,8 +0,0 @@ --- script for renameing sequence names to conform with __seq format -RENAME rev_rev_id_val TO revision_rev_id_seq; -RENAME text_old_id_val TO text_old_id_seq; -RENAME category_id_seq TO category_cat_id_seq; -RENAME ipblocks_ipb_id_val TO ipblocks_ipb_id_seq; -RENAME rc_rc_id_seq TO recentchanges_rc_id_seq; -RENAME log_log_id_seq TO logging_log_id_seq; -RENAME pr_id_val TO page_restrictions_pr_id_seq; \ No newline at end of file diff --git a/maintenance/ora/tables.sql b/maintenance/ora/tables.sql deleted file mode 100644 index d2d1a21b..00000000 --- a/maintenance/ora/tables.sql +++ /dev/null @@ -1,794 +0,0 @@ --- defines must comply with ^define\s*([^\s=]*)\s*=\s?'\{\$([^\}]*)\}'; -define mw_prefix='{$wgDBprefix}'; - - -CREATE SEQUENCE user_user_id_seq MINVALUE 0 START WITH 0; -CREATE TABLE &mw_prefix.mwuser ( -- replace reserved word 'user' - user_id NUMBER NOT NULL, - user_name VARCHAR2(255) NOT NULL, - user_real_name VARCHAR2(512), - user_password VARCHAR2(255), - user_newpassword VARCHAR2(255), - user_newpass_time TIMESTAMP(6) WITH TIME ZONE, - user_token VARCHAR2(32), - user_email VARCHAR2(255), - user_email_token VARCHAR2(32), - user_email_token_expires TIMESTAMP(6) WITH TIME ZONE, - user_email_authenticated TIMESTAMP(6) WITH TIME ZONE, - user_options CLOB, - user_touched TIMESTAMP(6) WITH TIME ZONE, - user_registration TIMESTAMP(6) WITH TIME ZONE, - user_editcount NUMBER -); -ALTER TABLE &mw_prefix.mwuser ADD CONSTRAINT &mw_prefix.mwuser_pk PRIMARY KEY (user_id); -CREATE UNIQUE INDEX &mw_prefix.mwuser_u01 ON &mw_prefix.mwuser (user_name); -CREATE INDEX &mw_prefix.mwuser_i01 ON &mw_prefix.mwuser (user_email_token); - --- Create a dummy user to satisfy fk contraints especially with revisions -INSERT INTO &mw_prefix.mwuser - VALUES (user_user_id_seq.nextval,'Anonymous','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, '', current_timestamp, current_timestamp, 0); - -CREATE TABLE &mw_prefix.user_groups ( - ug_user NUMBER NULL REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE, - ug_group VARCHAR2(16) NOT NULL -); -CREATE UNIQUE INDEX &mw_prefix.user_groups_u01 ON &mw_prefix.user_groups (ug_user,ug_group); -CREATE INDEX &mw_prefix.user_groups_i01 ON &mw_prefix.user_groups (ug_group); - -CREATE TABLE &mw_prefix.user_newtalk ( - user_id NUMBER NOT NULL REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE, - user_ip VARCHAR2(40) NULL, - user_last_timestamp TIMESTAMP(6) WITH TIME ZONE -); -CREATE INDEX &mw_prefix.user_newtalk_i01 ON &mw_prefix.user_newtalk (user_id); -CREATE INDEX &mw_prefix.user_newtalk_i02 ON &mw_prefix.user_newtalk (user_ip); - -CREATE TABLE &mw_prefix.user_properties ( - up_user NUMBER NOT NULL, - up_property VARCHAR2(32) NOT NULL, - up_value CLOB -); -CREATE UNIQUE INDEX &mw_prefix.user_properties_u01 on &mw_prefix.user_properties (up_user,up_property); -CREATE INDEX &mw_prefix.user_properties_i01 on &mw_prefix.user_properties (up_property); - - -CREATE SEQUENCE page_page_id_seq; -CREATE TABLE &mw_prefix.page ( - page_id NUMBER NOT NULL, - page_namespace NUMBER NOT NULL, - page_title VARCHAR2(255) NOT NULL, - page_restrictions VARCHAR2(255), - page_counter NUMBER DEFAULT 0 NOT NULL, - page_is_redirect CHAR(1) DEFAULT 0 NOT NULL, - page_is_new CHAR(1) DEFAULT 0 NOT NULL, - page_random NUMBER(15,14) NOT NULL, - page_touched TIMESTAMP(6) WITH TIME ZONE, - page_latest NUMBER NOT NULL, -- FK? - page_len NUMBER NOT NULL -); -ALTER TABLE &mw_prefix.page ADD CONSTRAINT &mw_prefix.page_pk PRIMARY KEY (page_id); -CREATE UNIQUE INDEX &mw_prefix.page_u01 ON &mw_prefix.page (page_namespace,page_title); -CREATE INDEX &mw_prefix.page_i01 ON &mw_prefix.page (page_random); -CREATE INDEX &mw_prefix.page_i02 ON &mw_prefix.page (page_len); - -/*$mw$*/ -CREATE TRIGGER &mw_prefix.page_set_random BEFORE INSERT ON &mw_prefix.page - FOR EACH ROW WHEN (new.page_random IS NULL) -BEGIN - SELECT dbms_random.value INTO :NEW.page_random FROM dual; -END; -/*$mw$*/ - -CREATE SEQUENCE revision_rev_id_seq; -CREATE TABLE &mw_prefix.revision ( - rev_id NUMBER NOT NULL, - rev_page NUMBER NULL REFERENCES &mw_prefix.page (page_id) ON DELETE CASCADE, - rev_text_id NUMBER NULL, - rev_comment VARCHAR2(255), - rev_user NUMBER NOT NULL REFERENCES &mw_prefix.mwuser(user_id), - rev_user_text VARCHAR2(255) NOT NULL, - rev_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL, - rev_minor_edit CHAR(1) DEFAULT '0' NOT NULL, - rev_deleted CHAR(1) DEFAULT '0' NOT NULL, - rev_len NUMBER NULL, - rev_parent_id NUMBER DEFAULT NULL -); -ALTER TABLE &mw_prefix.revision ADD CONSTRAINT &mw_prefix.revision_pk PRIMARY KEY (rev_id); -CREATE UNIQUE INDEX &mw_prefix.revision_u01 ON &mw_prefix.revision (rev_page, rev_id); -CREATE INDEX &mw_prefix.revision_i01 ON &mw_prefix.revision (rev_timestamp); -CREATE INDEX &mw_prefix.revision_i02 ON &mw_prefix.revision (rev_page,rev_timestamp); -CREATE INDEX &mw_prefix.revision_i03 ON &mw_prefix.revision (rev_user,rev_timestamp); -CREATE INDEX &mw_prefix.revision_i04 ON &mw_prefix.revision (rev_user_text,rev_timestamp); - -CREATE SEQUENCE text_old_id_seq; -CREATE TABLE &mw_prefix.pagecontent ( -- replaces reserved word 'text' - old_id NUMBER NOT NULL, - old_text CLOB, - old_flags VARCHAR2(255) -); -ALTER TABLE &mw_prefix.pagecontent ADD CONSTRAINT &mw_prefix.pagecontent_pk PRIMARY KEY (old_id); - -CREATE TABLE &mw_prefix.archive ( - ar_namespace NUMBER NOT NULL, - ar_title VARCHAR2(255) NOT NULL, - ar_text CLOB, - ar_comment VARCHAR2(255), - ar_user NUMBER NULL REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL, - ar_user_text VARCHAR2(255) NOT NULL, - ar_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL, - ar_minor_edit CHAR(1) DEFAULT '0' NOT NULL, - ar_flags VARCHAR2(255), - ar_rev_id NUMBER, - ar_text_id NUMBER, - ar_deleted NUMBER DEFAULT '0' NOT NULL, - ar_len NUMBER, - ar_page_id NUMBER, - ar_parent_id NUMBER -); -CREATE INDEX &mw_prefix.archive_i01 ON &mw_prefix.archive (ar_namespace,ar_title,ar_timestamp); -CREATE INDEX &mw_prefix.archive_i02 ON &mw_prefix.archive (ar_user_text,ar_timestamp); - - -CREATE TABLE &mw_prefix.pagelinks ( - pl_from NUMBER NOT NULL REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE, - pl_namespace NUMBER NOT NULL, - pl_title VARCHAR2(255) NOT NULL -); -CREATE UNIQUE INDEX &mw_prefix.pagelinks_u01 ON &mw_prefix.pagelinks (pl_from,pl_namespace,pl_title); -CREATE UNIQUE INDEX &mw_prefix.pagelinks_u02 ON &mw_prefix.pagelinks (pl_namespace,pl_title,pl_from); - -CREATE TABLE &mw_prefix.templatelinks ( - tl_from NUMBER NOT NULL REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE, - tl_namespace NUMBER NOT NULL, - tl_title VARCHAR2(255) NOT NULL -); -CREATE UNIQUE INDEX &mw_prefix.templatelinks_u01 ON &mw_prefix.templatelinks (tl_from,tl_namespace,tl_title); -CREATE UNIQUE INDEX &mw_prefix.templatelinks_u02 ON &mw_prefix.templatelinks (tl_namespace,tl_title,tl_from); - -CREATE TABLE &mw_prefix.imagelinks ( - il_from NUMBER NOT NULL REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE, - il_to VARCHAR2(255) NOT NULL -); -CREATE UNIQUE INDEX &mw_prefix.imagelinks_u01 ON &mw_prefix.imagelinks (il_from,il_to); -CREATE UNIQUE INDEX &mw_prefix.imagelinks_u02 ON &mw_prefix.imagelinks (il_to,il_from); - - -CREATE TABLE &mw_prefix.categorylinks ( - cl_from NUMBER NOT NULL REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE, - cl_to VARCHAR2(255) NOT NULL, - cl_sortkey VARCHAR2(255), - cl_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL -); -CREATE UNIQUE INDEX &mw_prefix.categorylinks_u01 ON &mw_prefix.categorylinks (cl_from,cl_to); -CREATE INDEX &mw_prefix.categorylinks_i01 ON &mw_prefix.categorylinks (cl_to,cl_sortkey,cl_from); -CREATE INDEX &mw_prefix.categorylinks_i02 ON &mw_prefix.categorylinks (cl_to,cl_timestamp); - -CREATE SEQUENCE category_cat_id_seq; -CREATE TABLE &mw_prefix.category ( - cat_id NUMBER NOT NULL, - cat_title VARCHAR2(255) NOT NULL, - cat_pages NUMBER DEFAULT 0 NOT NULL, - cat_subcats NUMBER DEFAULT 0 NOT NULL, - cat_files NUMBER DEFAULT 0 NOT NULL, - cat_hidden NUMBER DEFAULT 0 NOT NULL -); -ALTER TABLE &mw_prefix.category ADD CONSTRAINT &mw_prefix.category_pk PRIMARY KEY (cat_id); -CREATE UNIQUE INDEX &mw_prefix.category_u01 ON &mw_prefix.category (cat_title); -CREATE INDEX &mw_prefix.category_i01 ON &mw_prefix.category (cat_pages); - -CREATE TABLE &mw_prefix.externallinks ( - el_from NUMBER NOT NULL REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE, - el_to VARCHAR2(2048) NOT NULL, - el_index VARCHAR2(2048) NOT NULL -); -CREATE INDEX &mw_prefix.externallinks_i01 ON &mw_prefix.externallinks (el_from, el_to); -CREATE INDEX &mw_prefix.externallinks_i02 ON &mw_prefix.externallinks (el_to, el_from); -CREATE INDEX &mw_prefix.externallinks_i03 ON &mw_prefix.externallinks (el_index); - -CREATE TABLE &mw_prefix.external_user ( - eu_local_id NUMBER NOT NULL, - eu_external_id varchar2(255) NOT NULL -); -ALTER TABLE &mw_prefix.external_user ADD CONSTRAINT &mw_prefix.external_user_pk PRIMARY KEY (eu_local_id); -CREATE UNIQUE INDEX &mw_prefix.external_user_u01 ON &mw_prefix.external_user (eu_external_id); - -CREATE TABLE &mw_prefix.langlinks ( - ll_from NUMBER NOT NULL REFERENCES &mw_prefix.page (page_id) ON DELETE CASCADE, - ll_lang VARCHAR2(20), - ll_title VARCHAR2(255) -); -CREATE UNIQUE INDEX &mw_prefix.langlinks_u01 ON &mw_prefix.langlinks (ll_from, ll_lang); -CREATE INDEX &mw_prefix.langlinks_i01 ON &mw_prefix.langlinks (ll_lang, ll_title); - -CREATE TABLE &mw_prefix.site_stats ( - ss_row_id NUMBER NOT NULL , - ss_total_views NUMBER DEFAULT 0, - ss_total_edits NUMBER DEFAULT 0, - ss_good_articles NUMBER DEFAULT 0, - ss_total_pages NUMBER DEFAULT -1, - ss_users NUMBER DEFAULT -1, - ss_active_users NUMBER DEFAULT -1, - ss_admins NUMBER DEFAULT -1, - ss_images NUMBER DEFAULT 0 -); -CREATE UNIQUE INDEX &mw_prefix.site_stats_u01 ON &mw_prefix.site_stats (ss_row_id); - -CREATE TABLE &mw_prefix.hitcounter ( - hc_id NUMBER NOT NULL -); - -CREATE SEQUENCE ipblocks_ipb_id_seq; -CREATE TABLE &mw_prefix.ipblocks ( - ipb_id NUMBER NOT NULL, - ipb_address VARCHAR2(255) NULL, - ipb_user NUMBER NULL REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL, - ipb_by NUMBER NOT NULL REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE, - ipb_by_text VARCHAR2(255) NOT NULL, - ipb_reason VARCHAR2(255) NOT NULL, - ipb_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL, - ipb_auto CHAR(1) DEFAULT '0' NOT NULL, - ipb_anon_only CHAR(1) DEFAULT '0' NOT NULL, - ipb_create_account CHAR(1) DEFAULT '1' NOT NULL, - ipb_enable_autoblock CHAR(1) DEFAULT '1' NOT NULL, - ipb_expiry TIMESTAMP(6) WITH TIME ZONE NOT NULL, - ipb_range_start VARCHAR2(255), - ipb_range_end VARCHAR2(255), - ipb_deleted CHAR(1) DEFAULT '0' NOT NULL, - ipb_block_email CHAR(1) DEFAULT '0' NOT NULL, - ipb_allow_usertalk CHAR(1) DEFAULT '0' NOT NULL -); -ALTER TABLE &mw_prefix.ipblocks ADD CONSTRAINT &mw_prefix.ipblocks_pk PRIMARY KEY (ipb_id); -CREATE UNIQUE INDEX &mw_prefix.ipblocks_u01 ON &mw_prefix.ipblocks (ipb_address, ipb_user, ipb_auto, ipb_anon_only); -CREATE INDEX &mw_prefix.ipblocks_i01 ON &mw_prefix.ipblocks (ipb_user); -CREATE INDEX &mw_prefix.ipblocks_i02 ON &mw_prefix.ipblocks (ipb_range_start, ipb_range_end); -CREATE INDEX &mw_prefix.ipblocks_i03 ON &mw_prefix.ipblocks (ipb_timestamp); -CREATE INDEX &mw_prefix.ipblocks_i04 ON &mw_prefix.ipblocks (ipb_expiry); - -CREATE TABLE &mw_prefix.image ( - img_name VARCHAR2(255) NOT NULL, - img_size NUMBER NOT NULL, - img_width NUMBER NOT NULL, - img_height NUMBER NOT NULL, - img_metadata CLOB, - img_bits NUMBER, - img_media_type VARCHAR2(32), - img_major_mime VARCHAR2(32) DEFAULT 'unknown', - img_minor_mime VARCHAR2(100) DEFAULT 'unknown', - img_description VARCHAR2(255), - img_user NUMBER NULL REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL, - img_user_text VARCHAR2(255) NOT NULL, - img_timestamp TIMESTAMP(6) WITH TIME ZONE, - img_sha1 VARCHAR2(32) -); -ALTER TABLE &mw_prefix.image ADD CONSTRAINT &mw_prefix.image_pk PRIMARY KEY (img_name); -CREATE INDEX &mw_prefix.image_i01 ON &mw_prefix.image (img_user_text,img_timestamp); -CREATE INDEX &mw_prefix.image_i02 ON &mw_prefix.image (img_size); -CREATE INDEX &mw_prefix.image_i03 ON &mw_prefix.image (img_timestamp); -CREATE INDEX &mw_prefix.image_i04 ON &mw_prefix.image (img_sha1); - - -CREATE TABLE &mw_prefix.oldimage ( - oi_name VARCHAR2(255) NOT NULL REFERENCES &mw_prefix.image(img_name), - oi_archive_name VARCHAR2(255), - oi_size NUMBER NOT NULL, - oi_width NUMBER NOT NULL, - oi_height NUMBER NOT NULL, - oi_bits NUMBER NOT NULL, - oi_description VARCHAR2(255), - oi_user NUMBER NULL REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL, - oi_user_text VARCHAR2(255) NOT NULL, - oi_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL, - oi_metadata CLOB, - oi_media_type VARCHAR2(32) DEFAULT NULL, - oi_major_mime VARCHAR2(32) DEFAULT 'unknown', - oi_minor_mime VARCHAR2(100) DEFAULT 'unknown', - oi_deleted NUMBER DEFAULT 0 NOT NULL, - oi_sha1 VARCHAR2(32) -); -CREATE INDEX &mw_prefix.oldimage_i01 ON &mw_prefix.oldimage (oi_user_text,oi_timestamp); -CREATE INDEX &mw_prefix.oldimage_i02 ON &mw_prefix.oldimage (oi_name,oi_timestamp); -CREATE INDEX &mw_prefix.oldimage_i03 ON &mw_prefix.oldimage (oi_name,oi_archive_name); -CREATE INDEX &mw_prefix.oldimage_i04 ON &mw_prefix.oldimage (oi_sha1); - - -CREATE SEQUENCE filearchive_fa_id_seq; -CREATE TABLE &mw_prefix.filearchive ( - fa_id NUMBER NOT NULL, - fa_name VARCHAR2(255) NOT NULL, - fa_archive_name VARCHAR2(255), - fa_storage_group VARCHAR2(16), - fa_storage_key VARCHAR2(64), - fa_deleted_user NUMBER NULL REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL, - fa_deleted_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL, - fa_deleted_reason CLOB, - fa_size NUMBER NOT NULL, - fa_width NUMBER NOT NULL, - fa_height NUMBER NOT NULL, - fa_metadata CLOB, - fa_bits NUMBER, - fa_media_type VARCHAR2(32) DEFAULT NULL, - fa_major_mime VARCHAR2(32) DEFAULT 'unknown', - fa_minor_mime VARCHAR2(100) DEFAULT 'unknown', - fa_description VARCHAR2(255), - fa_user NUMBER NULL REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL, - fa_user_text VARCHAR2(255) NOT NULL, - fa_timestamp TIMESTAMP(6) WITH TIME ZONE, - fa_deleted NUMBER DEFAULT '0' NOT NULL -); -ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_pk PRIMARY KEY (fa_id); -CREATE INDEX &mw_prefix.filearchive_i01 ON &mw_prefix.filearchive (fa_name, fa_timestamp); -CREATE INDEX &mw_prefix.filearchive_i02 ON &mw_prefix.filearchive (fa_storage_group, fa_storage_key); -CREATE INDEX &mw_prefix.filearchive_i03 ON &mw_prefix.filearchive (fa_deleted_timestamp); -CREATE INDEX &mw_prefix.filearchive_i04 ON &mw_prefix.filearchive (fa_user_text,fa_timestamp); - -CREATE SEQUENCE recentchanges_rc_id_seq; -CREATE TABLE &mw_prefix.recentchanges ( - rc_id NUMBER NOT NULL, - rc_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL, - rc_cur_time TIMESTAMP(6) WITH TIME ZONE NOT NULL, - rc_user NUMBER NULL REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL, - rc_user_text VARCHAR2(255) NOT NULL, - rc_namespace NUMBER NOT NULL, - rc_title VARCHAR2(255) NOT NULL, - rc_comment VARCHAR2(255), - rc_minor CHAR(1) DEFAULT '0' NOT NULL, - rc_bot CHAR(1) DEFAULT '0' NOT NULL, - rc_new CHAR(1) DEFAULT '0' NOT NULL, - rc_cur_id NUMBER NULL REFERENCES &mw_prefix.page(page_id) ON DELETE SET NULL, - rc_this_oldid NUMBER NOT NULL, - rc_last_oldid NUMBER NOT NULL, - rc_type CHAR(1) DEFAULT '0' NOT NULL, - rc_moved_to_ns NUMBER, - rc_moved_to_title VARCHAR2(255), - rc_patrolled CHAR(1) DEFAULT '0' NOT NULL, - rc_ip VARCHAR2(15), - rc_old_len NUMBER, - rc_new_len NUMBER, - rc_deleted NUMBER DEFAULT '0' NOT NULL, - rc_logid NUMBER DEFAULT '0' NOT NULL, - rc_log_type VARCHAR2(255), - rc_log_action VARCHAR2(255), - rc_params CLOB -); -ALTER TABLE &mw_prefix.recentchanges ADD CONSTRAINT &mw_prefix.recentchanges_pk PRIMARY KEY (rc_id); -CREATE INDEX &mw_prefix.recentchanges_i01 ON &mw_prefix.recentchanges (rc_timestamp); -CREATE INDEX &mw_prefix.recentchanges_i02 ON &mw_prefix.recentchanges (rc_namespace, rc_title); -CREATE INDEX &mw_prefix.recentchanges_i03 ON &mw_prefix.recentchanges (rc_cur_id); -CREATE INDEX &mw_prefix.recentchanges_i04 ON &mw_prefix.recentchanges (rc_new,rc_namespace,rc_timestamp); -CREATE INDEX &mw_prefix.recentchanges_i05 ON &mw_prefix.recentchanges (rc_ip); -CREATE INDEX &mw_prefix.recentchanges_i06 ON &mw_prefix.recentchanges (rc_namespace, rc_user_text); -CREATE INDEX &mw_prefix.recentchanges_i07 ON &mw_prefix.recentchanges (rc_user_text, rc_timestamp); - -CREATE TABLE &mw_prefix.watchlist ( - wl_user NUMBER NOT NULL REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE, - wl_namespace NUMBER DEFAULT 0 NOT NULL, - wl_title VARCHAR2(255) NOT NULL, - wl_notificationtimestamp TIMESTAMP(6) WITH TIME ZONE -); -CREATE UNIQUE INDEX &mw_prefix.watchlist_u01 ON &mw_prefix.watchlist (wl_user, wl_namespace, wl_title); -CREATE INDEX &mw_prefix.watchlist_i01 ON &mw_prefix.watchlist (wl_namespace, wl_title); - - -CREATE TABLE &mw_prefix.math ( - math_inputhash VARCHAR2(32) NOT NULL, - math_outputhash VARCHAR2(32) NOT NULL, - math_html_conservativeness NUMBER NOT NULL, - math_html CLOB, - math_mathml CLOB -); -CREATE UNIQUE INDEX &mw_prefix.math_u01 ON &mw_prefix.math (math_inputhash); - -CREATE TABLE &mw_prefix.searchindex ( - si_page NUMBER NOT NULL, - si_title VARCHAR2(255) DEFAULT '' NOT NULL, - si_text CLOB NOT NULL -); -CREATE UNIQUE INDEX &mw_prefix.searchindex_u01 ON &mw_prefix.searchindex (si_page); - -CREATE TABLE &mw_prefix.interwiki ( - iw_prefix VARCHAR2(32) NOT NULL, - iw_url VARCHAR2(127) NOT NULL, - iw_local CHAR(1) NOT NULL, - iw_trans CHAR(1) DEFAULT '0' NOT NULL -); -CREATE UNIQUE INDEX &mw_prefix.interwiki_u01 ON &mw_prefix.interwiki (iw_prefix); - -CREATE TABLE &mw_prefix.querycache ( - qc_type VARCHAR2(32) NOT NULL, - qc_value NUMBER NOT NULL, - qc_namespace NUMBER NOT NULL, - qc_title VARCHAR2(255) NOT NULL -); -CREATE INDEX &mw_prefix.querycache_u01 ON &mw_prefix.querycache (qc_type,qc_value); - -CREATE TABLE &mw_prefix.objectcache ( - keyname VARCHAR2(255) , - value BLOB, - exptime TIMESTAMP(6) WITH TIME ZONE NOT NULL -); -CREATE INDEX &mw_prefix.objectcache_i01 ON &mw_prefix.objectcache (exptime); - -CREATE TABLE &mw_prefix.transcache ( - tc_url VARCHAR2(255) NOT NULL, - tc_contents CLOB NOT NULL, - tc_time TIMESTAMP(6) WITH TIME ZONE NOT NULL -); -CREATE UNIQUE INDEX &mw_prefix.transcache_u01 ON &mw_prefix.transcache (tc_url); - - -CREATE SEQUENCE logging_log_id_seq; -CREATE TABLE &mw_prefix.logging ( - log_id NUMBER NOT NULL, - log_type VARCHAR2(10) NOT NULL, - log_action VARCHAR2(10) NOT NULL, - log_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL, - log_user NUMBER REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL, - log_user_text VARCHAR2(255), - log_namespace NUMBER NOT NULL, - log_title VARCHAR2(255) NOT NULL, - log_page NUMBER, - log_comment VARCHAR2(255), - log_params CLOB, - log_deleted NUMBER DEFAULT '0' NOT NULL -); -ALTER TABLE &mw_prefix.logging ADD CONSTRAINT &mw_prefix.logging_pk PRIMARY KEY (log_id); -CREATE INDEX &mw_prefix.logging_i01 ON &mw_prefix.logging (log_type, log_timestamp); -CREATE INDEX &mw_prefix.logging_i02 ON &mw_prefix.logging (log_user, log_timestamp); -CREATE INDEX &mw_prefix.logging_i03 ON &mw_prefix.logging (log_namespace, log_title, log_timestamp); -CREATE INDEX &mw_prefix.logging_i04 ON &mw_prefix.logging (log_timestamp); - -CREATE TABLE &mw_prefix.log_search ( - ls_field VARCHAR2(32) NOT NULL, - ls_value VARCHAR2(255) NOT NULL, - ls_log_id NuMBER DEFAULT 0 NOT NULL -); -ALTER TABLE &mw_prefix.log_search ADD CONSTRAINT log_search_pk PRIMARY KEY (ls_field,ls_value,ls_log_id); -CREATE INDEX &mw_prefix.log_search_i01 ON &mw_prefix.log_search (ls_log_id); - -CREATE SEQUENCE trackbacks_tb_id_seq; -CREATE TABLE &mw_prefix.trackbacks ( - tb_id NUMBER NOT NULL, - tb_page NUMBER REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE, - tb_title VARCHAR2(255) NOT NULL, - tb_url VARCHAR2(255) NOT NULL, - tb_ex CLOB, - tb_name VARCHAR2(255) -); -ALTER TABLE &mw_prefix.trackbacks ADD CONSTRAINT &mw_prefix.trackbacks_pk PRIMARY KEY (tb_id); -CREATE INDEX &mw_prefix.trackbacks_i01 ON &mw_prefix.trackbacks (tb_page); - -CREATE SEQUENCE job_job_id_seq; -CREATE TABLE &mw_prefix.job ( - job_id NUMBER NOT NULL, - job_cmd VARCHAR2(60) NOT NULL, - job_namespace NUMBER NOT NULL, - job_title VARCHAR2(255) NOT NULL, - job_params CLOB NOT NULL -); -ALTER TABLE &mw_prefix.job ADD CONSTRAINT &mw_prefix.job_pk PRIMARY KEY (job_id); -CREATE INDEX &mw_prefix.job_i01 ON &mw_prefix.job (job_cmd, job_namespace, job_title); - -CREATE TABLE &mw_prefix.querycache_info ( - qci_type VARCHAR2(32) NOT NULL, - qci_timestamp TIMESTAMP(6) WITH TIME ZONE NULL -); -CREATE UNIQUE INDEX &mw_prefix.querycache_info_u01 ON &mw_prefix.querycache_info (qci_type); - -CREATE TABLE &mw_prefix.redirect ( - rd_from NUMBER NOT NULL REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE, - rd_namespace NUMBER NOT NULL, - rd_title VARCHAR2(255) NOT NULL, - rd_interwiki VARCHAR2(32), - rd_fragment VARCHAR2(255) -); -CREATE INDEX &mw_prefix.redirect_i01 ON &mw_prefix.redirect (rd_namespace,rd_title,rd_from); - -CREATE TABLE &mw_prefix.querycachetwo ( - qcc_type VARCHAR2(32) NOT NULL, - qcc_value NUMBER DEFAULT 0 NOT NULL, - qcc_namespace NUMBER DEFAULT 0 NOT NULL, - qcc_title VARCHAR2(255) DEFAULT '' NOT NULL, - qcc_namespacetwo NUMBER DEFAULT 0 NOT NULL, - qcc_titletwo VARCHAR2(255) DEFAULT '' NOT NULL -); -CREATE INDEX &mw_prefix.querycachetwo_i01 ON &mw_prefix.querycachetwo (qcc_type,qcc_value); -CREATE INDEX &mw_prefix.querycachetwo_i02 ON &mw_prefix.querycachetwo (qcc_type,qcc_namespace,qcc_title); -CREATE INDEX &mw_prefix.querycachetwo_i03 ON &mw_prefix.querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo); - -CREATE SEQUENCE page_restrictions_pr_id_seq; -CREATE TABLE &mw_prefix.page_restrictions ( - pr_id NUMBER NOT NULL, - pr_page NUMBER NULL REFERENCES &mw_prefix.page (page_id) ON DELETE CASCADE, - pr_type VARCHAR2(255) NOT NULL, - pr_level VARCHAR2(255) NOT NULL, - pr_cascade NUMBER NOT NULL, - pr_user NUMBER NULL, - pr_expiry TIMESTAMP(6) WITH TIME ZONE NULL -); -ALTER TABLE &mw_prefix.page_restrictions ADD CONSTRAINT &mw_prefix.page_restrictions_pk PRIMARY KEY (pr_page,pr_type); -CREATE INDEX &mw_prefix.page_restrictions_i01 ON &mw_prefix.page_restrictions (pr_type,pr_level); -CREATE INDEX &mw_prefix.page_restrictions_i02 ON &mw_prefix.page_restrictions (pr_level); -CREATE INDEX &mw_prefix.page_restrictions_i03 ON &mw_prefix.page_restrictions (pr_cascade); - -CREATE TABLE &mw_prefix.protected_titles ( - pt_namespace NUMBER NOT NULL, - pt_title VARCHAR2(255) NOT NULL, - pt_user NUMBER NOT NULL, - pt_reason VARCHAR2(255), - pt_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL, - pt_expiry VARCHAR2(14) NOT NULL, - pt_create_perm VARCHAR2(60) NOT NULL -); -CREATE UNIQUE INDEX &mw_prefix.protected_titles_u01 ON &mw_prefix.protected_titles (pt_namespace,pt_title); -CREATE INDEX &mw_prefix.protected_titles_i01 ON &mw_prefix.protected_titles (pt_timestamp); - -CREATE TABLE &mw_prefix.page_props ( - pp_page NUMBER NOT NULL, - pp_propname VARCHAR2(60) NOT NULL, - pp_value BLOB NOT NULL -); -CREATE UNIQUE INDEX &mw_prefix.page_props_u01 ON &mw_prefix.page_props (pp_page,pp_propname); - - -CREATE TABLE &mw_prefix.updatelog ( - ul_key VARCHAR2(255) NOT NULL -); -ALTER TABLE &mw_prefix.updatelog ADD CONSTRAINT &mw_prefix.updatelog_pk PRIMARY KEY (ul_key); - -CREATE TABLE &mw_prefix.change_tag ( - ct_rc_id NUMBER NULL, - ct_log_id NUMBER NULL, - ct_rev_id NUMBER NULL, - ct_tag VARCHAR2(255) NOT NULL, - ct_params BLOB NULL -); -CREATE UNIQUE INDEX &mw_prefix.change_tag_u01 ON &mw_prefix.change_tag (ct_rc_id,ct_tag); -CREATE UNIQUE INDEX &mw_prefix.change_tag_u02 ON &mw_prefix.change_tag (ct_log_id,ct_tag); -CREATE UNIQUE INDEX &mw_prefix.change_tag_u03 ON &mw_prefix.change_tag (ct_rev_id,ct_tag); -CREATE INDEX &mw_prefix.change_tag_i01 ON &mw_prefix.change_tag (ct_tag,ct_rc_id,ct_rev_id,ct_log_id); - -CREATE TABLE &mw_prefix.tag_summary ( - ts_rc_id NUMBER NULL, - ts_log_id NUMBER NULL, - ts_rev_id NUMBER NULL, - ts_tags BLOB NOT NULL -); -CREATE UNIQUE INDEX &mw_prefix.tag_summary_u01 ON &mw_prefix.tag_summary (ts_rc_id); -CREATE UNIQUE INDEX &mw_prefix.tag_summary_u02 ON &mw_prefix.tag_summary (ts_log_id); -CREATE UNIQUE INDEX &mw_prefix.tag_summary_u03 ON &mw_prefix.tag_summary (ts_rev_id); - -CREATE TABLE &mw_prefix.valid_tag ( - vt_tag VARCHAR2(255) NOT NULL -); -ALTER TABLE &mw_prefix.valid_tag ADD CONSTRAINT &mw_prefix.valid_tag_pk PRIMARY KEY (vt_tag); - --- This table is not used unless profiling is turned on ---CREATE TABLE &mw_prefix.profiling ( --- pf_count NUMBER DEFAULT 0 NOT NULL, --- pf_time NUMERIC(18,10) DEFAULT 0 NOT NULL, --- pf_name CLOB NOT NULL, --- pf_server CLOB NULL ---); ---CREATE UNIQUE INDEX &mw_prefix.profiling_u01 ON &mw_prefix.profiling (pf_name, pf_server); - -CREATE INDEX si_title_idx ON &mw_prefix.searchindex(si_title) INDEXTYPE IS ctxsys.context; -CREATE INDEX si_text_idx ON &mw_prefix.searchindex(si_text) INDEXTYPE IS ctxsys.context; - -CREATE TABLE &mw_prefix.l10n_cache ( - lc_lang varchar2(32) NOT NULL, - lc_key varchar2(255) NOT NULL, - lc_value clob NOT NULL -); -CREATE INDEX &mw_prefix.l10n_cache_u01 ON &mw_prefix.l10n_cache (lc_lang, lc_key); - --- do not prefix this table as it breaks parserTests -CREATE TABLE wiki_field_info_full ( -table_name VARCHAR2(35) NOT NULL, -column_name VARCHAR2(35) NOT NULL, -data_default VARCHAR2(4000), -data_length NUMBER NOT NULL, -data_type VARCHAR2(106), -not_null CHAR(1) NOT NULL, -prim NUMBER(1), -uniq NUMBER(1), -nonuniq NUMBER(1) -); -ALTER TABLE wiki_field_info_full ADD CONSTRAINT wiki_field_info_full_pk PRIMARY KEY (table_name, column_name); - -/*$mw$*/ -CREATE PROCEDURE fill_wiki_info IS - BEGIN - DELETE wiki_field_info_full; - - FOR x_rec IN (SELECT t.table_name table_name, t.column_name, - t.data_default, t.data_length, t.data_type, - DECODE (t.nullable, 'Y', '1', 'N', '0') not_null, - (SELECT 1 - FROM user_cons_columns ucc, - user_constraints uc - WHERE ucc.table_name = t.table_name - AND ucc.column_name = t.column_name - AND uc.constraint_name = ucc.constraint_name - AND uc.constraint_type = 'P' - AND ROWNUM < 2) prim, - (SELECT 1 - FROM user_ind_columns uic, - user_indexes ui - WHERE uic.table_name = t.table_name - AND uic.column_name = t.column_name - AND ui.index_name = uic.index_name - AND ui.uniqueness = 'UNIQUE' - AND ROWNUM < 2) uniq, - (SELECT 1 - FROM user_ind_columns uic, - user_indexes ui - WHERE uic.table_name = t.table_name - AND uic.column_name = t.column_name - AND ui.index_name = uic.index_name - AND ui.uniqueness = 'NONUNIQUE' - AND ROWNUM < 2) nonuniq - FROM user_tab_columns t, user_tables ut - WHERE ut.table_name = t.table_name) - LOOP - INSERT INTO wiki_field_info_full - (table_name, column_name, - data_default, data_length, - data_type, not_null, prim, - uniq, nonuniq - ) - VALUES (x_rec.table_name, x_rec.column_name, - x_rec.data_default, x_rec.data_length, - x_rec.data_type, x_rec.not_null, x_rec.prim, - x_rec.uniq, x_rec.nonuniq - ); - END LOOP; - COMMIT; -END; -/*$mw$*/ - -/*$mw$*/ -CREATE OR REPLACE PROCEDURE duplicate_table(p_tabname IN VARCHAR2, - p_oldprefix IN VARCHAR2, - p_newprefix IN VARCHAR2, - p_temporary IN BOOLEAN) IS - e_table_not_exist EXCEPTION; - PRAGMA EXCEPTION_INIT(e_table_not_exist, -00942); -BEGIN - BEGIN - EXECUTE IMMEDIATE 'DROP TABLE ' || p_newprefix || p_tabname || - ' CASCADE CONSTRAINTS'; - EXCEPTION - WHEN e_table_not_exist THEN - NULL; - END; - IF (p_temporary) THEN - EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE ' || p_newprefix || - p_tabname || ' AS SELECT * FROM ' || p_oldprefix || - p_tabname || ' WHERE ROWNUM = 0'; - ELSE - EXECUTE IMMEDIATE 'CREATE TABLE ' || p_newprefix || p_tabname || - ' AS SELECT * FROM ' || p_oldprefix || p_tabname || - ' WHERE ROWNUM = 0'; - END IF; - FOR rc IN (SELECT column_name, data_default - FROM user_tab_columns - WHERE table_name = p_oldprefix || p_tabname - AND data_default IS NOT NULL) LOOP - EXECUTE IMMEDIATE 'ALTER TABLE ' || p_newprefix || p_tabname || - ' MODIFY ' || rc.column_name || ' DEFAULT ' || - substr(rc.data_default, 1, 2000); - END LOOP; - FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('CONSTRAINT', - constraint_name), - 32767, - 1), - USER || '"."' || p_oldprefix, - USER || '"."' || p_newprefix), - '"' || constraint_name || '"', - '"' || p_newprefix || constraint_name || '"') DDLVC2, - constraint_name - FROM user_constraints uc - WHERE table_name = p_oldprefix || p_tabname - AND constraint_type = 'P') LOOP - dbms_output.put_line(SUBSTR(rc.ddlvc2, - 1, - INSTR(rc.ddlvc2, 'PCTFREE') - 1)); - EXECUTE IMMEDIATE SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1); - END LOOP; - FOR rc IN (SELECT REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('REF_CONSTRAINT', - constraint_name), - 32767, - 1), - USER || '"."' || p_oldprefix, - USER || '"."' || p_newprefix) DDLVC2, - constraint_name - FROM user_constraints uc - WHERE table_name = p_oldprefix || p_tabname - AND constraint_type = 'R') LOOP - EXECUTE IMMEDIATE rc.ddlvc2; - END LOOP; - FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('INDEX', - index_name), - 32767, - 1), - USER || '"."' || p_oldprefix, - USER || '"."' || p_newprefix), - '"' || index_name || '"', - '"' || p_newprefix || index_name || '"') DDLVC2, - index_name - FROM user_indexes ui - WHERE table_name = p_oldprefix || p_tabname - AND index_type != 'LOB' - AND NOT EXISTS - (SELECT NULL - FROM user_constraints - WHERE table_name = ui.table_name - AND constraint_name = ui.index_name)) LOOP - EXECUTE IMMEDIATE SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1); - END LOOP; - FOR rc IN (SELECT REPLACE(REPLACE(UPPER(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('TRIGGER', - trigger_name), - 32767, - 1)), - USER || '"."' || p_oldprefix, - USER || '"."' || p_newprefix), - ' ON ' || p_oldprefix || p_tabname, - ' ON ' || p_newprefix || p_tabname) DDLVC2, - trigger_name - FROM user_triggers - WHERE table_name = p_oldprefix || p_tabname) LOOP - EXECUTE IMMEDIATE SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'ALTER ') - 1); - END LOOP; -END; -/*$mw$*/ - -/*$mw$*/ -BEGIN - fill_wiki_info; -END; -/*$mw$*/ - -/*$mw$*/ -CREATE OR REPLACE FUNCTION BITOR (x IN NUMBER, y IN NUMBER) RETURN NUMBER AS -BEGIN - RETURN (x + y - BITAND(x, y)); -END; -/*$mw$*/ - -/*$mw$*/ -CREATE OR REPLACE FUNCTION BITNOT (x IN NUMBER) RETURN NUMBER AS -BEGIN - RETURN (4294967295 - x); -END; -/*$mw$*/ - -/*$mw$*/ -CREATE OR REPLACE TYPE GET_OUTPUT_TYPE IS TABLE OF VARCHAR2(255); -/*$mw$*/ - -/*$mw$*/ -CREATE OR REPLACE FUNCTION GET_OUTPUT_LINES RETURN GET_OUTPUT_TYPE PIPELINED AS - v_line VARCHAR2(255); - v_status INTEGER := 0; -BEGIN - - LOOP - DBMS_OUTPUT.GET_LINE(v_line, v_status); - IF (v_status = 0) THEN RETURN; END IF; - PIPE ROW (v_line); - END LOOP; - RETURN; -EXCEPTION - WHEN OTHERS THEN - RETURN; -END; -/*$mw$*/ - -/*$mw$*/ -CREATE OR REPLACE FUNCTION GET_SEQUENCE_VALUE(seq IN VARCHAR2) RETURN NUMBER AS - v_value NUMBER; -BEGIN - EXECUTE IMMEDIATE 'SELECT '||seq||'.NEXTVAL INTO :outVar FROM DUAL' INTO v_value; - RETURN v_value; -END; -/*$mw$*/ diff --git a/maintenance/ora/user.sql b/maintenance/ora/user.sql deleted file mode 100644 index d54acf39..00000000 --- a/maintenance/ora/user.sql +++ /dev/null @@ -1,16 +0,0 @@ --- defines must comply with ^define\s*([^\s=]*)\s*=\s?'\{\$([^\}]*)\}'; -define wiki_user='{$wgDBuser}'; -define wiki_pass='{$wgDBpassword}'; -define def_ts='{$wgDBOracleDefTS}'; -define temp_ts='{$wgDBOracleTempTS}'; - -create user &wiki_user. identified by &wiki_pass. default tablespace &def_ts. temporary tablespace &temp_ts. quota unlimited on &def_ts.; -grant connect, resource to &wiki_user.; -grant alter session to &wiki_user.; -grant ctxapp to &wiki_user.; -grant execute on ctx_ddl to &wiki_user.; -grant create view to &wiki_user.; -grant create synonym to &wiki_user.; -grant create table to &wiki_user.; -grant create sequence to &wiki_user.; -grant create trigger to &wiki_user.; diff --git a/maintenance/oracle/archives/patch-testrun.sql b/maintenance/oracle/archives/patch-testrun.sql new file mode 100644 index 00000000..6e3e1b7c --- /dev/null +++ b/maintenance/oracle/archives/patch-testrun.sql @@ -0,0 +1,37 @@ +-- +-- Optional tables for parserTests recording mode +-- With --record option, success data will be saved to these tables, +-- and comparisons of what's changed from the previous run will be +-- displayed at the end of each run. +-- +-- defines must comply with ^define\s*([^\s=]*)\s*=\s?'\{\$([^\}]*)\}'; +define mw_prefix='{$wgDBprefix}'; + +DROP TABLE &mw_prefix.testitem CASCADE CONSTRAINTS; +DROP TABLE &mw_prefix.testrun CASCADE CONSTRAINTS; + +CREATE SEQUENCE testrun_tr_id_seq; +CREATE TABLE &mw_prefix.testrun ( + tr_id NUMBER NOT NULL, + tr_date DATE, + tr_mw_version BLOB, + tr_php_version BLOB, + tr_db_version BLOB, + tr_uname BLOB, +); +ALTER TABLE &mw_prefix.testrun ADD CONSTRAINT &mw_prefix.testrun_pk PRIMARY KEY (tr_id); +CREATE OR REPLACE TRIGGER &mw_prefix.testrun_bir +BEFORE UPDATE FOR EACH ROW +ON &mw_prefix.testrun +BEGIN + SELECT testrun_tr_id_seq.NEXTVAL into :NEW.tr_id FROM dual; +END; + +CREATE TABLE /*$wgDBprefix*/testitem ( + ti_run NUMBER NOT NULL REFERENCES &mw_prefix.testrun (tr_id) ON DELETE CASCADE, + ti_name VARCHAR22(255), + ti_success NUMBER(1) +); +CREATE UNIQUE INDEX &mw_prefix.testitem_u01 ON &mw_prefix.testitem (ti_run, ti_name); +CREATE UNIQUE INDEX &mw_prefix.testitem_u01 ON &mw_prefix.testitem (ti_run, ti_success); + diff --git a/maintenance/oracle/archives/patch_16_17_schema_changes.sql b/maintenance/oracle/archives/patch_16_17_schema_changes.sql new file mode 100644 index 00000000..64c28481 --- /dev/null +++ b/maintenance/oracle/archives/patch_16_17_schema_changes.sql @@ -0,0 +1,98 @@ +define mw_prefix='{$wgDBprefix}'; + +ALTER TABLE &mw_prefix.archive MODIFY ar_user DEFAULT 0 NOT NULL; +ALTER TABLE &mw_prefix.archive MODIFY ar_deleted CHAR(1); +CREATE INDEX &mw_prefix.archive_i03 ON &mw_prefix.archive (ar_rev_id); + +ALTER TABLE &mw_prefix.page MODIFY page_is_redirect default '0'; +ALTER TABLE &mw_prefix.page MODIFY page_is_new default '0'; +ALTER TABLE &mw_prefix.page MODIFY page_latest default 0; +ALTER TABLE &mw_prefix.page MODIFY page_len default 0; + +ALTER TABLE &mw_prefix.categorylinks MODIFY cl_sortkey VARCHAR2(230); +ALTER TABLE &mw_prefix.categorylinks ADD cl_sortkey_prefix VARCHAR2(255) DEFAULT '' NOT NULL; +ALTER TABLE &mw_prefix.categorylinks ADD cl_collation VARCHAR2(32) DEFAULT '' NOT NULL; +ALTER TABLE &mw_prefix.categorylinks ADD cl_type VARCHAR2(6) DEFAULT 'page' NOT NULL; +DROP INDEX &mw_prefix.categorylinks_i01; +CREATE INDEX &mw_prefix.categorylinks_i01 ON &mw_prefix.categorylinks (cl_to,cl_type,cl_sortkey,cl_from); +CREATE INDEX &mw_prefix.categorylinks_i03 ON &mw_prefix.categorylinks (cl_collation); + +ALTER TABLE &mw_prefix.filearchive MODIFY fa_deleted_user DEFAULT 0 NOT NULL; +ALTER TABLE &mw_prefix.filearchive MODIFY fa_size DEFAULT 0; +ALTER TABLE &mw_prefix.filearchive MODIFY fa_width DEFAULT 0; +ALTER TABLE &mw_prefix.filearchive MODIFY fa_height DEFAULT 0; +ALTER TABLE &mw_prefix.filearchive MODIFY fa_bits DEFAULT 0 NOT NULL; +ALTER TABLE &mw_prefix.filearchive MODIFY fa_user DEFAULT 0 NOT NULL; +ALTER TABLE &mw_prefix.filearchive MODIFY fa_deleted DEFAULT 0; + +ALTER TABLE &mw_prefix.image MODIFY img_size DEFAULT 0; +ALTER TABLE &mw_prefix.image MODIFY img_width DEFAULT 0; +ALTER TABLE &mw_prefix.image MODIFY img_height DEFAULT 0; +ALTER TABLE &mw_prefix.image MODIFY img_bits DEFAULT 0 NOT NULL; +ALTER TABLE &mw_prefix.image MODIFY img_user DEFAULT 0 NOT NULL; + +ALTER TABLE &mw_prefix.interwiki ADD iw_api BLOB DEFAULT EMPTY_BLOB(); +ALTER TABLE &mw_prefix.interwiki MODIFY iw_api DEFAULT NULL NOT NULL; +ALTER TABLE &mw_prefix.interwiki ADD iw_wikiid VARCHAR2(64); + +ALTER TABLE &mw_prefix.ipblocks MODIFY ipb_user DEFAULT 0 NOT NULL; +ALTER TABLE &mw_prefix.ipblocks MODIFY ipb_by DEFAULT 0; + +CREATE TABLE &mw_prefix.iwlinks ( + iwl_from NUMBER DEFAULT 0 NOT NULL, + iwl_prefix VARCHAR2(20) DEFAULT '' NOT NULL, + iwl_title VARCHAR2(255) DEFAULT '' NOT NULL +); +CREATE UNIQUE INDEX &mw_prefix.iwlinks_ui01 ON &mw_prefix.iwlinks (iwl_from, iwl_prefix, iwl_title); +CREATE UNIQUE INDEX &mw_prefix.iwlinks_ui02 ON &mw_prefix.iwlinks (iwl_prefix, iwl_title, iwl_from); + +ALTER TABLE &mw_prefix.logging MODIFY log_user DEFAULT 0 NOT NULL; +ALTER TABLE &mw_prefix.logging MODIFY log_deleted CHAR(1); + +CREATE TABLE &mw_prefix.module_deps ( + md_module VARCHAR2(255) NOT NULL, + md_skin VARCHAR2(32) NOT NULL, + md_deps BLOB NOT NULL +); +CREATE UNIQUE INDEX &mw_prefix.module_deps_u01 ON &mw_prefix.module_deps (md_module, md_skin); + +CREATE TABLE &mw_prefix.msg_resource_links ( + mrl_resource VARCHAR2(255) NOT NULL, + mrl_message VARCHAR2(255) NOT NULL +); +CREATE UNIQUE INDEX &mw_prefix.msg_resource_links_u01 ON &mw_prefix.msg_resource_links (mrl_message, mrl_resource); + +CREATE TABLE &mw_prefix.msg_resource ( + mr_resource VARCHAR2(255) NOT NULL, + mr_lang varchar2(32) NOT NULL, + mr_blob BLOB NOT NULL, + mr_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL +) ; +CREATE UNIQUE INDEX &mw_prefix.msg_resource_u01 ON &mw_prefix.msg_resource (mr_resource, mr_lang); + +ALTER TABLE &mw_prefix.oldimage MODIFY oi_name DEFAULT 0; +ALTER TABLE &mw_prefix.oldimage MODIFY oi_size DEFAULT 0; +ALTER TABLE &mw_prefix.oldimage MODIFY oi_width DEFAULT 0; +ALTER TABLE &mw_prefix.oldimage MODIFY oi_height DEFAULT 0; +ALTER TABLE &mw_prefix.oldimage MODIFY oi_bits DEFAULT 0; +ALTER TABLE &mw_prefix.oldimage MODIFY oi_user DEFAULT 0 NOT NULL; + +ALTER TABLE &mw_prefix.querycache MODIFY qc_value DEFAULT 0; + +ALTER TABLE &mw_prefix.recentchanges MODIFY rc_user DEFAULT 0 NOT NULL; +ALTER TABLE &mw_prefix.recentchanges MODIFY rc_cur_id DEFAULT 0 NOT NULL; +ALTER TABLE &mw_prefix.recentchanges MODIFY rc_this_oldid DEFAULT 0; +ALTER TABLE &mw_prefix.recentchanges MODIFY rc_last_oldid DEFAULT 0; +ALTER TABLE &mw_prefix.recentchanges MODIFY rc_moved_to_ns DEFAULT 0 NOT NULL; +ALTER TABLE &mw_prefix.recentchanges MODIFY rc_deleted CHAR(1); +ALTER TABLE &mw_prefix.recentchanges MODIFY rc_logid DEFAULT 0; + +ALTER TABLE &mw_prefix.revision MODIFY rev_page NOT NULL; +ALTER TABLE &mw_prefix.revision MODIFY rev_user DEFAULT 0; + +ALTER TABLE &mw_prefix.updatelog ADD ul_value BLOB; + +ALTER TABLE &mw_prefix.user_groups MODIFY ug_user DEFAULT 0 NOT NULL; + +ALTER TABLE &mw_prefix.user_newtalk MODIFY user_id DEFAULT 0; + diff --git a/maintenance/oracle/archives/patch_create_17_functions.sql b/maintenance/oracle/archives/patch_create_17_functions.sql new file mode 100644 index 00000000..6c9c9542 --- /dev/null +++ b/maintenance/oracle/archives/patch_create_17_functions.sql @@ -0,0 +1,125 @@ +define mw_prefix='{$wgDBprefix}'; + +/*$mw$*/ +CREATE OR REPLACE PROCEDURE duplicate_table(p_tabname IN VARCHAR2, + p_oldprefix IN VARCHAR2, + p_newprefix IN VARCHAR2, + p_temporary IN BOOLEAN) IS + e_table_not_exist EXCEPTION; + PRAGMA EXCEPTION_INIT(e_table_not_exist, -00942); + l_temp_ei_sql VARCHAR2(2000); +BEGIN + BEGIN + EXECUTE IMMEDIATE 'DROP TABLE ' || p_newprefix || p_tabname || + ' CASCADE CONSTRAINTS'; + EXCEPTION + WHEN e_table_not_exist THEN + NULL; + END; + IF (p_temporary) THEN + EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE ' || p_newprefix || + p_tabname || ' AS SELECT * FROM ' || p_oldprefix || + p_tabname || ' WHERE ROWNUM = 0'; + ELSE + EXECUTE IMMEDIATE 'CREATE TABLE ' || p_newprefix || p_tabname || + ' AS SELECT * FROM ' || p_oldprefix || p_tabname || + ' WHERE ROWNUM = 0'; + END IF; + FOR rc IN (SELECT column_name, data_default + FROM user_tab_columns + WHERE table_name = p_oldprefix || p_tabname + AND data_default IS NOT NULL) LOOP + EXECUTE IMMEDIATE 'ALTER TABLE ' || p_newprefix || p_tabname || + ' MODIFY ' || rc.column_name || ' DEFAULT ' || + SUBSTR(rc.data_default, 1, 2000); + END LOOP; + FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('CONSTRAINT', + constraint_name), + 32767, + 1), + USER || '"."' || p_oldprefix, + USER || '"."' || p_newprefix), + '"' || constraint_name || '"', + '"' || p_newprefix || constraint_name || '"') DDLVC2, + constraint_name + FROM user_constraints uc + WHERE table_name = p_oldprefix || p_tabname + AND constraint_type = 'P') LOOP + l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1); + l_temp_ei_sql := SUBSTR(l_temp_ei_sql, 1, INSTR(l_temp_ei_sql, ')', INSTR(l_temp_ei_sql, 'PRIMARY KEY')+1)+1); + EXECUTE IMMEDIATE l_temp_ei_sql; + END LOOP; + IF (NOT p_temporary) THEN + FOR rc IN (SELECT REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('REF_CONSTRAINT', + constraint_name), + 32767, + 1), + USER || '"."' || p_oldprefix, + USER || '"."' || p_newprefix) DDLVC2, + constraint_name + FROM user_constraints uc + WHERE table_name = p_oldprefix || p_tabname + AND constraint_type = 'R') LOOP + EXECUTE IMMEDIATE rc.ddlvc2; + END LOOP; + END IF; + FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('INDEX', + index_name), + 32767, + 1), + USER || '"."' || p_oldprefix, + USER || '"."' || p_newprefix), + '"' || index_name || '"', + '"' || p_newprefix || index_name || '"') DDLVC2, + index_name, + index_type + FROM user_indexes ui + WHERE table_name = p_oldprefix || p_tabname + AND index_type NOT IN ('LOB', 'DOMAIN') + AND NOT EXISTS + (SELECT NULL + FROM user_constraints + WHERE table_name = ui.table_name + AND constraint_name = ui.index_name)) LOOP + l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1); + l_temp_ei_sql := SUBSTR(l_temp_ei_sql, 1, INSTR(l_temp_ei_sql, ')', INSTR(l_temp_ei_sql, '"' || USER || '"."' || p_newprefix || '"')+1)+1); + EXECUTE IMMEDIATE l_temp_ei_sql; + END LOOP; + FOR rc IN (SELECT REPLACE(REPLACE(UPPER(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('TRIGGER', + trigger_name), + 32767, + 1)), + USER || '"."' || p_oldprefix, + USER || '"."' || p_newprefix), + ' ON ' || p_oldprefix || p_tabname, + ' ON ' || p_newprefix || p_tabname) DDLVC2, + trigger_name + FROM user_triggers + WHERE table_name = p_oldprefix || p_tabname) LOOP + l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'ALTER ') - 1); + dbms_output.put_line(l_temp_ei_sql); + EXECUTE IMMEDIATE l_temp_ei_sql; + END LOOP; +END; +/*$mw$*/ + +CREATE OR REPLACE TYPE GET_OUTPUT_TYPE IS TABLE OF VARCHAR2(255); + +/*$mw$*/ +CREATE OR REPLACE FUNCTION GET_OUTPUT_LINES RETURN GET_OUTPUT_TYPE PIPELINED AS + v_line VARCHAR2(255); + v_status INTEGER := 0; +BEGIN + + LOOP + DBMS_OUTPUT.GET_LINE(v_line, v_status); + IF (v_status = 0) THEN RETURN; END IF; + PIPE ROW (v_line); + END LOOP; + RETURN; +EXCEPTION + WHEN OTHERS THEN + RETURN; +END; +/*$mw$*/ + diff --git a/maintenance/oracle/archives/patch_fk_rename_deferred.sql b/maintenance/oracle/archives/patch_fk_rename_deferred.sql new file mode 100644 index 00000000..ce5be9af --- /dev/null +++ b/maintenance/oracle/archives/patch_fk_rename_deferred.sql @@ -0,0 +1,41 @@ +define mw_prefix='{$wgDBprefix}'; + +/*$mw$*/ +BEGIN +-- drop all, recreate manual in case anyone was missing + FOR cc1 IN (SELECT uc.table_name, + uc.constraint_name + FROM user_constraints uc + WHERE uc.constraint_type = 'R') LOOP + EXECUTE IMMEDIATE 'ALTER TABLE &mw_prefix.' || cc1.table_name || + ' DROP CONSTRAINT ' || cc1.constraint_name; + END LOOP; +END; +/*$mw$*/ + +ALTER TABLE &mw_prefix.user_groups ADD CONSTRAINT &mw_prefix.user_groups_fk1 FOREIGN KEY (ug_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.user_newtalk ADD CONSTRAINT &mw_prefix.user_newtalk_fk1 FOREIGN KEY (user_id) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.revision ADD CONSTRAINT &mw_prefix.revision_fk1 FOREIGN KEY (rev_page) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.revision ADD CONSTRAINT &mw_prefix.revision_fk2 FOREIGN KEY (rev_user) REFERENCES &mw_prefix.mwuser(user_id) DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.archive ADD CONSTRAINT &mw_prefix.archive_fk1 FOREIGN KEY (ar_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.pagelinks ADD CONSTRAINT &mw_prefix.pagelinks_fk1 FOREIGN KEY (pl_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.templatelinks ADD CONSTRAINT &mw_prefix.templatelinks_fk1 FOREIGN KEY (tl_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.imagelinks ADD CONSTRAINT &mw_prefix.imagelinks_fk1 FOREIGN KEY (il_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.categorylinks ADD CONSTRAINT &mw_prefix.categorylinks_fk1 FOREIGN KEY (cl_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.externallinks ADD CONSTRAINT &mw_prefix.externallinks_fk1 FOREIGN KEY (el_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.langlinks ADD CONSTRAINT &mw_prefix.langlinks_fk1 FOREIGN KEY (ll_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.ipblocks ADD CONSTRAINT &mw_prefix.ipblocks_fk1 FOREIGN KEY (ipb_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.ipblocks ADD CONSTRAINT &mw_prefix.ipblocks_fk2 FOREIGN KEY (ipb_by) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.image ADD CONSTRAINT &mw_prefix.image_fk1 FOREIGN KEY (img_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.oldimage ADD CONSTRAINT &mw_prefix.oldimage_fk1 FOREIGN KEY (oi_name) REFERENCES &mw_prefix.image(img_name) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.oldimage ADD CONSTRAINT &mw_prefix.oldimage_fk2 FOREIGN KEY (oi_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_fk1 FOREIGN KEY (fa_deleted_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_fk2 FOREIGN KEY (fa_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.recentchanges ADD CONSTRAINT &mw_prefix.recentchanges_fk1 FOREIGN KEY (rc_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.recentchanges ADD CONSTRAINT &mw_prefix.recentchanges_fk2 FOREIGN KEY (rc_cur_id) REFERENCES &mw_prefix.page(page_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.watchlist ADD CONSTRAINT &mw_prefix.watchlist_fk1 FOREIGN KEY (wl_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.logging ADD CONSTRAINT &mw_prefix.logging_fk1 FOREIGN KEY (log_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.trackbacks ADD CONSTRAINT &mw_prefix.trackbacks_fk1 FOREIGN KEY (tb_page) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.redirect ADD CONSTRAINT &mw_prefix.redirect_fk1 FOREIGN KEY (rd_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.page_restrictions ADD CONSTRAINT &mw_prefix.page_restrictions_fk1 FOREIGN KEY (pr_page) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; + diff --git a/maintenance/oracle/archives/patch_namespace_defaults.sql b/maintenance/oracle/archives/patch_namespace_defaults.sql new file mode 100644 index 00000000..24c95643 --- /dev/null +++ b/maintenance/oracle/archives/patch_namespace_defaults.sql @@ -0,0 +1,17 @@ +define mw_prefix='{$wgDBprefix}'; + +ALTER TABLE &mw_prefix.page MODIFY page_namespace DEFAULT 0; +ALTER TABLE &mw_prefix.archive MODIFY ar_namespace DEFAULT 0; +ALTER TABLE &mw_prefix.pagelinks MODIFY pl_namespace DEFAULT 0; +ALTER TABLE &mw_prefix.templatelinks MODIFY tl_namespace DEFAULT 0; +ALTER TABLE &mw_prefix.recentchanges MODIFY rc_namespace DEFAULT 0; +ALTER TABLE &mw_prefix.querycache MODIFY qc_namespace DEFAULT 0; +ALTER TABLE &mw_prefix.logging MODIFY log_namespace DEFAULT 0; +ALTER TABLE &mw_prefix.job MODIFY job_namespace DEFAULT 0; +ALTER TABLE &mw_prefix.redirect MODIFY rd_namespace DEFAULT 0; +ALTER TABLE &mw_prefix.protected_titles MODIFY pt_namespace DEFAULT 0; +ALTER TABLE &mw_prefix.archive MODIFY ar_namespace DEFAULT 0; +ALTER TABLE &mw_prefix.archive MODIFY ar_namespace DEFAULT 0; +ALTER TABLE &mw_prefix.archive MODIFY ar_namespace DEFAULT 0; +ALTER TABLE &mw_prefix.archive MODIFY ar_namespace DEFAULT 0; + diff --git a/maintenance/oracle/patch_seq_names_pre1.16.sql b/maintenance/oracle/patch_seq_names_pre1.16.sql new file mode 100644 index 00000000..5346b141 --- /dev/null +++ b/maintenance/oracle/patch_seq_names_pre1.16.sql @@ -0,0 +1,8 @@ +-- script for renameing sequence names to conform with
    __seq format +RENAME rev_rev_id_val TO revision_rev_id_seq; +RENAME text_old_id_val TO text_old_id_seq; +RENAME category_id_seq TO category_cat_id_seq; +RENAME ipblocks_ipb_id_val TO ipblocks_ipb_id_seq; +RENAME rc_rc_id_seq TO recentchanges_rc_id_seq; +RENAME log_log_id_seq TO logging_log_id_seq; +RENAME pr_id_val TO page_restrictions_pr_id_seq; \ No newline at end of file diff --git a/maintenance/oracle/tables.sql b/maintenance/oracle/tables.sql new file mode 100644 index 00000000..b8ecc2b9 --- /dev/null +++ b/maintenance/oracle/tables.sql @@ -0,0 +1,856 @@ +-- defines must comply with ^define\s*([^\s=]*)\s*=\s?'\{\$([^\}]*)\}'; +define mw_prefix='{$wgDBprefix}'; + + +CREATE SEQUENCE user_user_id_seq MINVALUE 0 START WITH 0; +CREATE TABLE &mw_prefix.mwuser ( -- replace reserved word 'user' + user_id NUMBER NOT NULL, + user_name VARCHAR2(255) NOT NULL, + user_real_name VARCHAR2(512), + user_password VARCHAR2(255), + user_newpassword VARCHAR2(255), + user_newpass_time TIMESTAMP(6) WITH TIME ZONE, + user_token VARCHAR2(32), + user_email VARCHAR2(255), + user_email_token VARCHAR2(32), + user_email_token_expires TIMESTAMP(6) WITH TIME ZONE, + user_email_authenticated TIMESTAMP(6) WITH TIME ZONE, + user_options CLOB, + user_touched TIMESTAMP(6) WITH TIME ZONE, + user_registration TIMESTAMP(6) WITH TIME ZONE, + user_editcount NUMBER +); +ALTER TABLE &mw_prefix.mwuser ADD CONSTRAINT &mw_prefix.mwuser_pk PRIMARY KEY (user_id); +CREATE UNIQUE INDEX &mw_prefix.mwuser_u01 ON &mw_prefix.mwuser (user_name); +CREATE INDEX &mw_prefix.mwuser_i01 ON &mw_prefix.mwuser (user_email_token); + +-- Create a dummy user to satisfy fk contraints especially with revisions +INSERT INTO &mw_prefix.mwuser + VALUES (user_user_id_seq.nextval,'Anonymous','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, '', current_timestamp, current_timestamp, 0); + +CREATE TABLE &mw_prefix.user_groups ( + ug_user NUMBER DEFAULT 0 NOT NULL, + ug_group VARCHAR2(16) NOT NULL +); +ALTER TABLE &mw_prefix.user_groups ADD CONSTRAINT &mw_prefix.user_groups_fk1 FOREIGN KEY (ug_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +CREATE UNIQUE INDEX &mw_prefix.user_groups_u01 ON &mw_prefix.user_groups (ug_user,ug_group); +CREATE INDEX &mw_prefix.user_groups_i01 ON &mw_prefix.user_groups (ug_group); + +CREATE TABLE &mw_prefix.user_newtalk ( + user_id NUMBER DEFAULT 0 NOT NULL, + user_ip VARCHAR2(40) NULL, + user_last_timestamp TIMESTAMP(6) WITH TIME ZONE +); +ALTER TABLE &mw_prefix.user_newtalk ADD CONSTRAINT &mw_prefix.user_newtalk_fk1 FOREIGN KEY (user_id) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +CREATE INDEX &mw_prefix.user_newtalk_i01 ON &mw_prefix.user_newtalk (user_id); +CREATE INDEX &mw_prefix.user_newtalk_i02 ON &mw_prefix.user_newtalk (user_ip); + +CREATE TABLE &mw_prefix.user_properties ( + up_user NUMBER NOT NULL, + up_property VARCHAR2(32) NOT NULL, + up_value CLOB +); +CREATE UNIQUE INDEX &mw_prefix.user_properties_u01 on &mw_prefix.user_properties (up_user,up_property); +CREATE INDEX &mw_prefix.user_properties_i01 on &mw_prefix.user_properties (up_property); + +CREATE SEQUENCE page_page_id_seq; +CREATE TABLE &mw_prefix.page ( + page_id NUMBER NOT NULL, + page_namespace NUMBER DEFAULT 0 NOT NULL, + page_title VARCHAR2(255) NOT NULL, + page_restrictions VARCHAR2(255), + page_counter NUMBER DEFAULT 0 NOT NULL, + page_is_redirect CHAR(1) DEFAULT '0' NOT NULL, + page_is_new CHAR(1) DEFAULT '0' NOT NULL, + page_random NUMBER(15,14) NOT NULL, + page_touched TIMESTAMP(6) WITH TIME ZONE, + page_latest NUMBER DEFAULT 0 NOT NULL, -- FK? + page_len NUMBER DEFAULT 0 NOT NULL +); +ALTER TABLE &mw_prefix.page ADD CONSTRAINT &mw_prefix.page_pk PRIMARY KEY (page_id); +CREATE UNIQUE INDEX &mw_prefix.page_u01 ON &mw_prefix.page (page_namespace,page_title); +CREATE INDEX &mw_prefix.page_i01 ON &mw_prefix.page (page_random); +CREATE INDEX &mw_prefix.page_i02 ON &mw_prefix.page (page_len); + +-- Create a dummy page to satisfy fk contraints especially with revisions +INSERT INTO &mw_prefix.page + VALUES (0, 0, ' ', NULL, 0, 0, 0, 0, current_timestamp, 0, 0); + +/*$mw$*/ +CREATE TRIGGER &mw_prefix.page_set_random BEFORE INSERT ON &mw_prefix.page + FOR EACH ROW WHEN (new.page_random IS NULL) +BEGIN + SELECT dbms_random.value INTO :NEW.page_random FROM dual; +END; +/*$mw$*/ + +CREATE SEQUENCE revision_rev_id_seq; +CREATE TABLE &mw_prefix.revision ( + rev_id NUMBER NOT NULL, + rev_page NUMBER NOT NULL, + rev_text_id NUMBER NULL, + rev_comment VARCHAR2(255), + rev_user NUMBER DEFAULT 0 NOT NULL, + rev_user_text VARCHAR2(255) NOT NULL, + rev_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL, + rev_minor_edit CHAR(1) DEFAULT '0' NOT NULL, + rev_deleted CHAR(1) DEFAULT '0' NOT NULL, + rev_len NUMBER NULL, + rev_parent_id NUMBER DEFAULT NULL +); +ALTER TABLE &mw_prefix.revision ADD CONSTRAINT &mw_prefix.revision_pk PRIMARY KEY (rev_id); +ALTER TABLE &mw_prefix.revision ADD CONSTRAINT &mw_prefix.revision_fk1 FOREIGN KEY (rev_page) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.revision ADD CONSTRAINT &mw_prefix.revision_fk2 FOREIGN KEY (rev_user) REFERENCES &mw_prefix.mwuser(user_id) DEFERRABLE INITIALLY DEFERRED; +CREATE UNIQUE INDEX &mw_prefix.revision_u01 ON &mw_prefix.revision (rev_page, rev_id); +CREATE INDEX &mw_prefix.revision_i01 ON &mw_prefix.revision (rev_timestamp); +CREATE INDEX &mw_prefix.revision_i02 ON &mw_prefix.revision (rev_page,rev_timestamp); +CREATE INDEX &mw_prefix.revision_i03 ON &mw_prefix.revision (rev_user,rev_timestamp); +CREATE INDEX &mw_prefix.revision_i04 ON &mw_prefix.revision (rev_user_text,rev_timestamp); + +CREATE SEQUENCE text_old_id_seq; +CREATE TABLE &mw_prefix.pagecontent ( -- replaces reserved word 'text' + old_id NUMBER NOT NULL, + old_text CLOB, + old_flags VARCHAR2(255) +); +ALTER TABLE &mw_prefix.pagecontent ADD CONSTRAINT &mw_prefix.pagecontent_pk PRIMARY KEY (old_id); + +CREATE TABLE &mw_prefix.archive ( + ar_namespace NUMBER DEFAULT 0 NOT NULL, + ar_title VARCHAR2(255) NOT NULL, + ar_text CLOB, + ar_comment VARCHAR2(255), + ar_user NUMBER DEFAULT 0 NOT NULL, + ar_user_text VARCHAR2(255) NOT NULL, + ar_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL, + ar_minor_edit CHAR(1) DEFAULT '0' NOT NULL, + ar_flags VARCHAR2(255), + ar_rev_id NUMBER, + ar_text_id NUMBER, + ar_deleted CHAR(1) DEFAULT '0' NOT NULL, + ar_len NUMBER, + ar_page_id NUMBER, + ar_parent_id NUMBER +); +ALTER TABLE &mw_prefix.archive ADD CONSTRAINT &mw_prefix.archive_fk1 FOREIGN KEY (ar_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED; +CREATE INDEX &mw_prefix.archive_i01 ON &mw_prefix.archive (ar_namespace,ar_title,ar_timestamp); +CREATE INDEX &mw_prefix.archive_i02 ON &mw_prefix.archive (ar_user_text,ar_timestamp); +CREATE INDEX &mw_prefix.archive_i03 ON &mw_prefix.archive (ar_rev_id); + +CREATE TABLE &mw_prefix.pagelinks ( + pl_from NUMBER NOT NULL, + pl_namespace NUMBER DEFAULT 0 NOT NULL, + pl_title VARCHAR2(255) NOT NULL +); +ALTER TABLE &mw_prefix.pagelinks ADD CONSTRAINT &mw_prefix.pagelinks_fk1 FOREIGN KEY (pl_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +CREATE UNIQUE INDEX &mw_prefix.pagelinks_u01 ON &mw_prefix.pagelinks (pl_from,pl_namespace,pl_title); +CREATE UNIQUE INDEX &mw_prefix.pagelinks_u02 ON &mw_prefix.pagelinks (pl_namespace,pl_title,pl_from); + +CREATE TABLE &mw_prefix.templatelinks ( + tl_from NUMBER NOT NULL, + tl_namespace NUMBER DEFAULT 0 NOT NULL, + tl_title VARCHAR2(255) NOT NULL +); +ALTER TABLE &mw_prefix.templatelinks ADD CONSTRAINT &mw_prefix.templatelinks_fk1 FOREIGN KEY (tl_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +CREATE UNIQUE INDEX &mw_prefix.templatelinks_u01 ON &mw_prefix.templatelinks (tl_from,tl_namespace,tl_title); +CREATE UNIQUE INDEX &mw_prefix.templatelinks_u02 ON &mw_prefix.templatelinks (tl_namespace,tl_title,tl_from); + +CREATE TABLE &mw_prefix.imagelinks ( + il_from NUMBER NOT NULL, + il_to VARCHAR2(255) NOT NULL +); +ALTER TABLE &mw_prefix.imagelinks ADD CONSTRAINT &mw_prefix.imagelinks_fk1 FOREIGN KEY (il_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +CREATE UNIQUE INDEX &mw_prefix.imagelinks_u01 ON &mw_prefix.imagelinks (il_from,il_to); +CREATE UNIQUE INDEX &mw_prefix.imagelinks_u02 ON &mw_prefix.imagelinks (il_to,il_from); + + +CREATE TABLE &mw_prefix.categorylinks ( + cl_from NUMBER NOT NULL, + cl_to VARCHAR2(255) NOT NULL, + cl_sortkey VARCHAR2(230), + cl_sortkey_prefix VARCHAR2(255) DEFAULT '' NOT NULL, + cl_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL, + cl_collation VARCHAR2(32) DEFAULT '' NOT NULL, + cl_type VARCHAR2(6) DEFAULT 'page' NOT NULL +); +ALTER TABLE &mw_prefix.categorylinks ADD CONSTRAINT &mw_prefix.categorylinks_fk1 FOREIGN KEY (cl_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +CREATE UNIQUE INDEX &mw_prefix.categorylinks_u01 ON &mw_prefix.categorylinks (cl_from,cl_to); +CREATE INDEX &mw_prefix.categorylinks_i01 ON &mw_prefix.categorylinks (cl_to,cl_type,cl_sortkey,cl_from); +CREATE INDEX &mw_prefix.categorylinks_i02 ON &mw_prefix.categorylinks (cl_to,cl_timestamp); +CREATE INDEX &mw_prefix.categorylinks_i03 ON &mw_prefix.categorylinks (cl_collation); + +CREATE SEQUENCE category_cat_id_seq; +CREATE TABLE &mw_prefix.category ( + cat_id NUMBER NOT NULL, + cat_title VARCHAR2(255) NOT NULL, + cat_pages NUMBER DEFAULT 0 NOT NULL, + cat_subcats NUMBER DEFAULT 0 NOT NULL, + cat_files NUMBER DEFAULT 0 NOT NULL, + cat_hidden NUMBER DEFAULT 0 NOT NULL +); +ALTER TABLE &mw_prefix.category ADD CONSTRAINT &mw_prefix.category_pk PRIMARY KEY (cat_id); +CREATE UNIQUE INDEX &mw_prefix.category_u01 ON &mw_prefix.category (cat_title); +CREATE INDEX &mw_prefix.category_i01 ON &mw_prefix.category (cat_pages); + +CREATE TABLE &mw_prefix.externallinks ( + el_from NUMBER NOT NULL, + el_to VARCHAR2(2048) NOT NULL, + el_index VARCHAR2(2048) NOT NULL +); +ALTER TABLE &mw_prefix.externallinks ADD CONSTRAINT &mw_prefix.externallinks_fk1 FOREIGN KEY (el_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +CREATE INDEX &mw_prefix.externallinks_i01 ON &mw_prefix.externallinks (el_from, el_to); +CREATE INDEX &mw_prefix.externallinks_i02 ON &mw_prefix.externallinks (el_to, el_from); +CREATE INDEX &mw_prefix.externallinks_i03 ON &mw_prefix.externallinks (el_index); + +CREATE TABLE &mw_prefix.external_user ( + eu_local_id NUMBER NOT NULL, + eu_external_id varchar2(255) NOT NULL +); +ALTER TABLE &mw_prefix.external_user ADD CONSTRAINT &mw_prefix.external_user_pk PRIMARY KEY (eu_local_id); +CREATE UNIQUE INDEX &mw_prefix.external_user_u01 ON &mw_prefix.external_user (eu_external_id); + +CREATE TABLE &mw_prefix.langlinks ( + ll_from NUMBER NOT NULL, + ll_lang VARCHAR2(20), + ll_title VARCHAR2(255) +); +ALTER TABLE &mw_prefix.langlinks ADD CONSTRAINT &mw_prefix.langlinks_fk1 FOREIGN KEY (ll_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +CREATE UNIQUE INDEX &mw_prefix.langlinks_u01 ON &mw_prefix.langlinks (ll_from, ll_lang); +CREATE INDEX &mw_prefix.langlinks_i01 ON &mw_prefix.langlinks (ll_lang, ll_title); + +CREATE TABLE &mw_prefix.iwlinks ( + iwl_from NUMBER DEFAULT 0 NOT NULL, + iwl_prefix VARCHAR2(20) DEFAULT '' NOT NULL, + iwl_title VARCHAR2(255) DEFAULT '' NOT NULL +); +CREATE UNIQUE INDEX &mw_prefix.iwlinks_ui01 ON &mw_prefix.iwlinks (iwl_from, iwl_prefix, iwl_title); +CREATE UNIQUE INDEX &mw_prefix.iwlinks_ui02 ON &mw_prefix.iwlinks (iwl_prefix, iwl_title, iwl_from); + +CREATE TABLE &mw_prefix.site_stats ( + ss_row_id NUMBER NOT NULL , + ss_total_views NUMBER DEFAULT 0, + ss_total_edits NUMBER DEFAULT 0, + ss_good_articles NUMBER DEFAULT 0, + ss_total_pages NUMBER DEFAULT -1, + ss_users NUMBER DEFAULT -1, + ss_active_users NUMBER DEFAULT -1, + ss_admins NUMBER DEFAULT -1, + ss_images NUMBER DEFAULT 0 +); +CREATE UNIQUE INDEX &mw_prefix.site_stats_u01 ON &mw_prefix.site_stats (ss_row_id); + +CREATE TABLE &mw_prefix.hitcounter ( + hc_id NUMBER NOT NULL +); + +CREATE SEQUENCE ipblocks_ipb_id_seq; +CREATE TABLE &mw_prefix.ipblocks ( + ipb_id NUMBER NOT NULL, + ipb_address VARCHAR2(255) NULL, + ipb_user NUMBER DEFAULT 0 NOT NULL, + ipb_by NUMBER DEFAULT 0 NOT NULL, + ipb_by_text VARCHAR2(255) NOT NULL, + ipb_reason VARCHAR2(255) NOT NULL, + ipb_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL, + ipb_auto CHAR(1) DEFAULT '0' NOT NULL, + ipb_anon_only CHAR(1) DEFAULT '0' NOT NULL, + ipb_create_account CHAR(1) DEFAULT '1' NOT NULL, + ipb_enable_autoblock CHAR(1) DEFAULT '1' NOT NULL, + ipb_expiry TIMESTAMP(6) WITH TIME ZONE NOT NULL, + ipb_range_start VARCHAR2(255), + ipb_range_end VARCHAR2(255), + ipb_deleted CHAR(1) DEFAULT '0' NOT NULL, + ipb_block_email CHAR(1) DEFAULT '0' NOT NULL, + ipb_allow_usertalk CHAR(1) DEFAULT '0' NOT NULL +); +ALTER TABLE &mw_prefix.ipblocks ADD CONSTRAINT &mw_prefix.ipblocks_pk PRIMARY KEY (ipb_id); +ALTER TABLE &mw_prefix.ipblocks ADD CONSTRAINT &mw_prefix.ipblocks_fk1 FOREIGN KEY (ipb_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.ipblocks ADD CONSTRAINT &mw_prefix.ipblocks_fk2 FOREIGN KEY (ipb_by) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +CREATE UNIQUE INDEX &mw_prefix.ipblocks_u01 ON &mw_prefix.ipblocks (ipb_address, ipb_user, ipb_auto, ipb_anon_only); +CREATE INDEX &mw_prefix.ipblocks_i01 ON &mw_prefix.ipblocks (ipb_user); +CREATE INDEX &mw_prefix.ipblocks_i02 ON &mw_prefix.ipblocks (ipb_range_start, ipb_range_end); +CREATE INDEX &mw_prefix.ipblocks_i03 ON &mw_prefix.ipblocks (ipb_timestamp); +CREATE INDEX &mw_prefix.ipblocks_i04 ON &mw_prefix.ipblocks (ipb_expiry); + +CREATE TABLE &mw_prefix.image ( + img_name VARCHAR2(255) NOT NULL, + img_size NUMBER DEFAULT 0 NOT NULL, + img_width NUMBER DEFAULT 0 NOT NULL, + img_height NUMBER DEFAULT 0 NOT NULL, + img_metadata CLOB, + img_bits NUMBER DEFAULT 0 NOT NULL, + img_media_type VARCHAR2(32), + img_major_mime VARCHAR2(32) DEFAULT 'unknown', + img_minor_mime VARCHAR2(100) DEFAULT 'unknown', + img_description VARCHAR2(255), + img_user NUMBER DEFAULT 0 NOT NULL, + img_user_text VARCHAR2(255) NOT NULL, + img_timestamp TIMESTAMP(6) WITH TIME ZONE, + img_sha1 VARCHAR2(32) +); +ALTER TABLE &mw_prefix.image ADD CONSTRAINT &mw_prefix.image_pk PRIMARY KEY (img_name); +ALTER TABLE &mw_prefix.image ADD CONSTRAINT &mw_prefix.image_fk1 FOREIGN KEY (img_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED; +CREATE INDEX &mw_prefix.image_i01 ON &mw_prefix.image (img_user_text,img_timestamp); +CREATE INDEX &mw_prefix.image_i02 ON &mw_prefix.image (img_size); +CREATE INDEX &mw_prefix.image_i03 ON &mw_prefix.image (img_timestamp); +CREATE INDEX &mw_prefix.image_i04 ON &mw_prefix.image (img_sha1); + + +CREATE TABLE &mw_prefix.oldimage ( + oi_name VARCHAR2(255) DEFAULT 0 NOT NULL, + oi_archive_name VARCHAR2(255), + oi_size NUMBER DEFAULT 0 NOT NULL, + oi_width NUMBER DEFAULT 0 NOT NULL, + oi_height NUMBER DEFAULT 0 NOT NULL, + oi_bits NUMBER DEFAULT 0 NOT NULL, + oi_description VARCHAR2(255), + oi_user NUMBER DEFAULT 0 NOT NULL, + oi_user_text VARCHAR2(255) NOT NULL, + oi_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL, + oi_metadata CLOB, + oi_media_type VARCHAR2(32) DEFAULT NULL, + oi_major_mime VARCHAR2(32) DEFAULT 'unknown', + oi_minor_mime VARCHAR2(100) DEFAULT 'unknown', + oi_deleted NUMBER DEFAULT 0 NOT NULL, + oi_sha1 VARCHAR2(32) +); +ALTER TABLE &mw_prefix.oldimage ADD CONSTRAINT &mw_prefix.oldimage_fk1 FOREIGN KEY (oi_name) REFERENCES &mw_prefix.image(img_name) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.oldimage ADD CONSTRAINT &mw_prefix.oldimage_fk2 FOREIGN KEY (oi_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED; +CREATE INDEX &mw_prefix.oldimage_i01 ON &mw_prefix.oldimage (oi_user_text,oi_timestamp); +CREATE INDEX &mw_prefix.oldimage_i02 ON &mw_prefix.oldimage (oi_name,oi_timestamp); +CREATE INDEX &mw_prefix.oldimage_i03 ON &mw_prefix.oldimage (oi_name,oi_archive_name); +CREATE INDEX &mw_prefix.oldimage_i04 ON &mw_prefix.oldimage (oi_sha1); + + +CREATE SEQUENCE filearchive_fa_id_seq; +CREATE TABLE &mw_prefix.filearchive ( + fa_id NUMBER NOT NULL, + fa_name VARCHAR2(255) NOT NULL, + fa_archive_name VARCHAR2(255), + fa_storage_group VARCHAR2(16), + fa_storage_key VARCHAR2(64), + fa_deleted_user NUMBER DEFAULT 0 NOT NULL, + fa_deleted_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL, + fa_deleted_reason CLOB, + fa_size NUMBER DEFAULT 0 NOT NULL, + fa_width NUMBER DEFAULT 0 NOT NULL, + fa_height NUMBER DEFAULT 0 NOT NULL, + fa_metadata CLOB, + fa_bits NUMBER DEFAULT 0 NOT NULL, + fa_media_type VARCHAR2(32) DEFAULT NULL, + fa_major_mime VARCHAR2(32) DEFAULT 'unknown', + fa_minor_mime VARCHAR2(100) DEFAULT 'unknown', + fa_description VARCHAR2(255), + fa_user NUMBER DEFAULT 0 NOT NULL, + fa_user_text VARCHAR2(255) NOT NULL, + fa_timestamp TIMESTAMP(6) WITH TIME ZONE, + fa_deleted NUMBER DEFAULT 0 NOT NULL +); +ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_pk PRIMARY KEY (fa_id); +ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_fk1 FOREIGN KEY (fa_deleted_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_fk2 FOREIGN KEY (fa_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED; +CREATE INDEX &mw_prefix.filearchive_i01 ON &mw_prefix.filearchive (fa_name, fa_timestamp); +CREATE INDEX &mw_prefix.filearchive_i02 ON &mw_prefix.filearchive (fa_storage_group, fa_storage_key); +CREATE INDEX &mw_prefix.filearchive_i03 ON &mw_prefix.filearchive (fa_deleted_timestamp); +CREATE INDEX &mw_prefix.filearchive_i04 ON &mw_prefix.filearchive (fa_user_text,fa_timestamp); + +CREATE SEQUENCE recentchanges_rc_id_seq; +CREATE TABLE &mw_prefix.recentchanges ( + rc_id NUMBER NOT NULL, + rc_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL, + rc_cur_time TIMESTAMP(6) WITH TIME ZONE NOT NULL, + rc_user NUMBER DEFAULT 0 NOT NULL, + rc_user_text VARCHAR2(255) NOT NULL, + rc_namespace NUMBER DEFAULT 0 NOT NULL, + rc_title VARCHAR2(255) NOT NULL, + rc_comment VARCHAR2(255), + rc_minor CHAR(1) DEFAULT '0' NOT NULL, + rc_bot CHAR(1) DEFAULT '0' NOT NULL, + rc_new CHAR(1) DEFAULT '0' NOT NULL, + rc_cur_id NUMBER DEFAULT 0 NOT NULL, + rc_this_oldid NUMBER DEFAULT 0 NOT NULL, + rc_last_oldid NUMBER DEFAULT 0 NOT NULL, + rc_type CHAR(1) DEFAULT '0' NOT NULL, + rc_moved_to_ns NUMBER DEFAULT 0 NOT NULL, + rc_moved_to_title VARCHAR2(255), + rc_patrolled CHAR(1) DEFAULT '0' NOT NULL, + rc_ip VARCHAR2(15), + rc_old_len NUMBER, + rc_new_len NUMBER, + rc_deleted CHAR(1) DEFAULT '0' NOT NULL, + rc_logid NUMBER DEFAULT 0 NOT NULL, + rc_log_type VARCHAR2(255), + rc_log_action VARCHAR2(255), + rc_params CLOB +); +ALTER TABLE &mw_prefix.recentchanges ADD CONSTRAINT &mw_prefix.recentchanges_pk PRIMARY KEY (rc_id); +ALTER TABLE &mw_prefix.recentchanges ADD CONSTRAINT &mw_prefix.recentchanges_fk1 FOREIGN KEY (rc_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE &mw_prefix.recentchanges ADD CONSTRAINT &mw_prefix.recentchanges_fk2 FOREIGN KEY (rc_cur_id) REFERENCES &mw_prefix.page(page_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED; +CREATE INDEX &mw_prefix.recentchanges_i01 ON &mw_prefix.recentchanges (rc_timestamp); +CREATE INDEX &mw_prefix.recentchanges_i02 ON &mw_prefix.recentchanges (rc_namespace, rc_title); +CREATE INDEX &mw_prefix.recentchanges_i03 ON &mw_prefix.recentchanges (rc_cur_id); +CREATE INDEX &mw_prefix.recentchanges_i04 ON &mw_prefix.recentchanges (rc_new,rc_namespace,rc_timestamp); +CREATE INDEX &mw_prefix.recentchanges_i05 ON &mw_prefix.recentchanges (rc_ip); +CREATE INDEX &mw_prefix.recentchanges_i06 ON &mw_prefix.recentchanges (rc_namespace, rc_user_text); +CREATE INDEX &mw_prefix.recentchanges_i07 ON &mw_prefix.recentchanges (rc_user_text, rc_timestamp); + +CREATE TABLE &mw_prefix.watchlist ( + wl_user NUMBER NOT NULL, + wl_namespace NUMBER DEFAULT 0 NOT NULL, + wl_title VARCHAR2(255) NOT NULL, + wl_notificationtimestamp TIMESTAMP(6) WITH TIME ZONE +); +ALTER TABLE &mw_prefix.watchlist ADD CONSTRAINT &mw_prefix.watchlist_fk1 FOREIGN KEY (wl_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +CREATE UNIQUE INDEX &mw_prefix.watchlist_u01 ON &mw_prefix.watchlist (wl_user, wl_namespace, wl_title); +CREATE INDEX &mw_prefix.watchlist_i01 ON &mw_prefix.watchlist (wl_namespace, wl_title); + + +CREATE TABLE &mw_prefix.math ( + math_inputhash VARCHAR2(32) NOT NULL, + math_outputhash VARCHAR2(32) NOT NULL, + math_html_conservativeness NUMBER NOT NULL, + math_html CLOB, + math_mathml CLOB +); +CREATE UNIQUE INDEX &mw_prefix.math_u01 ON &mw_prefix.math (math_inputhash); + +CREATE TABLE &mw_prefix.searchindex ( + si_page NUMBER NOT NULL, + si_title VARCHAR2(255) DEFAULT '' NOT NULL, + si_text CLOB NOT NULL +); +CREATE UNIQUE INDEX &mw_prefix.searchindex_u01 ON &mw_prefix.searchindex (si_page); + +CREATE TABLE &mw_prefix.interwiki ( + iw_prefix VARCHAR2(32) NOT NULL, + iw_url VARCHAR2(127) NOT NULL, + iw_api BLOB NOT NULL, + iw_wikiid VARCHAR2(64), + iw_local CHAR(1) NOT NULL, + iw_trans CHAR(1) DEFAULT '0' NOT NULL +); +CREATE UNIQUE INDEX &mw_prefix.interwiki_u01 ON &mw_prefix.interwiki (iw_prefix); + +CREATE TABLE &mw_prefix.querycache ( + qc_type VARCHAR2(32) NOT NULL, + qc_value NUMBER DEFAULT 0 NOT NULL, + qc_namespace NUMBER DEFAULT 0 NOT NULL, + qc_title VARCHAR2(255) NOT NULL +); +CREATE INDEX &mw_prefix.querycache_u01 ON &mw_prefix.querycache (qc_type,qc_value); + +CREATE TABLE &mw_prefix.objectcache ( + keyname VARCHAR2(255) , + value BLOB, + exptime TIMESTAMP(6) WITH TIME ZONE NOT NULL +); +CREATE INDEX &mw_prefix.objectcache_i01 ON &mw_prefix.objectcache (exptime); + +CREATE TABLE &mw_prefix.transcache ( + tc_url VARCHAR2(255) NOT NULL, + tc_contents CLOB NOT NULL, + tc_time TIMESTAMP(6) WITH TIME ZONE NOT NULL +); +CREATE UNIQUE INDEX &mw_prefix.transcache_u01 ON &mw_prefix.transcache (tc_url); + + +CREATE SEQUENCE logging_log_id_seq; +CREATE TABLE &mw_prefix.logging ( + log_id NUMBER NOT NULL, + log_type VARCHAR2(10) NOT NULL, + log_action VARCHAR2(10) NOT NULL, + log_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL, + log_user NUMBER DEFAULT 0 NOT NULL, + log_user_text VARCHAR2(255), + log_namespace NUMBER DEFAULT 0 NOT NULL, + log_title VARCHAR2(255) NOT NULL, + log_page NUMBER, + log_comment VARCHAR2(255), + log_params CLOB, + log_deleted CHAR(1) DEFAULT '0' NOT NULL +); +ALTER TABLE &mw_prefix.logging ADD CONSTRAINT &mw_prefix.logging_pk PRIMARY KEY (log_id); +ALTER TABLE &mw_prefix.logging ADD CONSTRAINT &mw_prefix.logging_fk1 FOREIGN KEY (log_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED; +CREATE INDEX &mw_prefix.logging_i01 ON &mw_prefix.logging (log_type, log_timestamp); +CREATE INDEX &mw_prefix.logging_i02 ON &mw_prefix.logging (log_user, log_timestamp); +CREATE INDEX &mw_prefix.logging_i03 ON &mw_prefix.logging (log_namespace, log_title, log_timestamp); +CREATE INDEX &mw_prefix.logging_i04 ON &mw_prefix.logging (log_timestamp); + +CREATE TABLE &mw_prefix.log_search ( + ls_field VARCHAR2(32) NOT NULL, + ls_value VARCHAR2(255) NOT NULL, + ls_log_id NuMBER DEFAULT 0 NOT NULL +); +ALTER TABLE &mw_prefix.log_search ADD CONSTRAINT log_search_pk PRIMARY KEY (ls_field,ls_value,ls_log_id); +CREATE INDEX &mw_prefix.log_search_i01 ON &mw_prefix.log_search (ls_log_id); + +CREATE SEQUENCE trackbacks_tb_id_seq; +CREATE TABLE &mw_prefix.trackbacks ( + tb_id NUMBER NOT NULL, + tb_page NUMBER, + tb_title VARCHAR2(255) NOT NULL, + tb_url VARCHAR2(255) NOT NULL, + tb_ex CLOB, + tb_name VARCHAR2(255) +); +ALTER TABLE &mw_prefix.trackbacks ADD CONSTRAINT &mw_prefix.trackbacks_pk PRIMARY KEY (tb_id); +ALTER TABLE &mw_prefix.trackbacks ADD CONSTRAINT &mw_prefix.trackbacks_fk1 FOREIGN KEY (tb_page) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +CREATE INDEX &mw_prefix.trackbacks_i01 ON &mw_prefix.trackbacks (tb_page); + +CREATE SEQUENCE job_job_id_seq; +CREATE TABLE &mw_prefix.job ( + job_id NUMBER NOT NULL, + job_cmd VARCHAR2(60) NOT NULL, + job_namespace NUMBER DEFAULT 0 NOT NULL, + job_title VARCHAR2(255) NOT NULL, + job_params CLOB NOT NULL +); +ALTER TABLE &mw_prefix.job ADD CONSTRAINT &mw_prefix.job_pk PRIMARY KEY (job_id); +CREATE INDEX &mw_prefix.job_i01 ON &mw_prefix.job (job_cmd, job_namespace, job_title); + +CREATE TABLE &mw_prefix.querycache_info ( + qci_type VARCHAR2(32) NOT NULL, + qci_timestamp TIMESTAMP(6) WITH TIME ZONE NULL +); +CREATE UNIQUE INDEX &mw_prefix.querycache_info_u01 ON &mw_prefix.querycache_info (qci_type); + +CREATE TABLE &mw_prefix.redirect ( + rd_from NUMBER NOT NULL, + rd_namespace NUMBER DEFAULT 0 NOT NULL, + rd_title VARCHAR2(255) NOT NULL, + rd_interwiki VARCHAR2(32), + rd_fragment VARCHAR2(255) +); +ALTER TABLE &mw_prefix.redirect ADD CONSTRAINT &mw_prefix.redirect_fk1 FOREIGN KEY (rd_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +CREATE INDEX &mw_prefix.redirect_i01 ON &mw_prefix.redirect (rd_namespace,rd_title,rd_from); + +CREATE TABLE &mw_prefix.querycachetwo ( + qcc_type VARCHAR2(32) NOT NULL, + qcc_value NUMBER DEFAULT 0 NOT NULL, + qcc_namespace NUMBER DEFAULT 0 NOT NULL, + qcc_title VARCHAR2(255) DEFAULT '' NOT NULL, + qcc_namespacetwo NUMBER DEFAULT 0 NOT NULL, + qcc_titletwo VARCHAR2(255) DEFAULT '' NOT NULL +); +CREATE INDEX &mw_prefix.querycachetwo_i01 ON &mw_prefix.querycachetwo (qcc_type,qcc_value); +CREATE INDEX &mw_prefix.querycachetwo_i02 ON &mw_prefix.querycachetwo (qcc_type,qcc_namespace,qcc_title); +CREATE INDEX &mw_prefix.querycachetwo_i03 ON &mw_prefix.querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo); + +CREATE SEQUENCE page_restrictions_pr_id_seq; +CREATE TABLE &mw_prefix.page_restrictions ( + pr_id NUMBER NOT NULL, + pr_page NUMBER NOT NULL, + pr_type VARCHAR2(255) NOT NULL, + pr_level VARCHAR2(255) NOT NULL, + pr_cascade NUMBER NOT NULL, + pr_user NUMBER NULL, + pr_expiry TIMESTAMP(6) WITH TIME ZONE NULL +); +ALTER TABLE &mw_prefix.page_restrictions ADD CONSTRAINT &mw_prefix.page_restrictions_pk PRIMARY KEY (pr_page,pr_type); +ALTER TABLE &mw_prefix.page_restrictions ADD CONSTRAINT &mw_prefix.page_restrictions_fk1 FOREIGN KEY (pr_page) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +CREATE INDEX &mw_prefix.page_restrictions_i01 ON &mw_prefix.page_restrictions (pr_type,pr_level); +CREATE INDEX &mw_prefix.page_restrictions_i02 ON &mw_prefix.page_restrictions (pr_level); +CREATE INDEX &mw_prefix.page_restrictions_i03 ON &mw_prefix.page_restrictions (pr_cascade); + +CREATE TABLE &mw_prefix.protected_titles ( + pt_namespace NUMBER DEFAULT 0 NOT NULL, + pt_title VARCHAR2(255) NOT NULL, + pt_user NUMBER NOT NULL, + pt_reason VARCHAR2(255), + pt_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL, + pt_expiry VARCHAR2(14) NOT NULL, + pt_create_perm VARCHAR2(60) NOT NULL +); +CREATE UNIQUE INDEX &mw_prefix.protected_titles_u01 ON &mw_prefix.protected_titles (pt_namespace,pt_title); +CREATE INDEX &mw_prefix.protected_titles_i01 ON &mw_prefix.protected_titles (pt_timestamp); + +CREATE TABLE &mw_prefix.page_props ( + pp_page NUMBER NOT NULL, + pp_propname VARCHAR2(60) NOT NULL, + pp_value BLOB NOT NULL +); +CREATE UNIQUE INDEX &mw_prefix.page_props_u01 ON &mw_prefix.page_props (pp_page,pp_propname); + + +CREATE TABLE &mw_prefix.updatelog ( + ul_key VARCHAR2(255) NOT NULL, + ul_value BLOB +); +ALTER TABLE &mw_prefix.updatelog ADD CONSTRAINT &mw_prefix.updatelog_pk PRIMARY KEY (ul_key); + +CREATE TABLE &mw_prefix.change_tag ( + ct_rc_id NUMBER NULL, + ct_log_id NUMBER NULL, + ct_rev_id NUMBER NULL, + ct_tag VARCHAR2(255) NOT NULL, + ct_params BLOB NULL +); +CREATE UNIQUE INDEX &mw_prefix.change_tag_u01 ON &mw_prefix.change_tag (ct_rc_id,ct_tag); +CREATE UNIQUE INDEX &mw_prefix.change_tag_u02 ON &mw_prefix.change_tag (ct_log_id,ct_tag); +CREATE UNIQUE INDEX &mw_prefix.change_tag_u03 ON &mw_prefix.change_tag (ct_rev_id,ct_tag); +CREATE INDEX &mw_prefix.change_tag_i01 ON &mw_prefix.change_tag (ct_tag,ct_rc_id,ct_rev_id,ct_log_id); + +CREATE TABLE &mw_prefix.tag_summary ( + ts_rc_id NUMBER NULL, + ts_log_id NUMBER NULL, + ts_rev_id NUMBER NULL, + ts_tags BLOB NOT NULL +); +CREATE UNIQUE INDEX &mw_prefix.tag_summary_u01 ON &mw_prefix.tag_summary (ts_rc_id); +CREATE UNIQUE INDEX &mw_prefix.tag_summary_u02 ON &mw_prefix.tag_summary (ts_log_id); +CREATE UNIQUE INDEX &mw_prefix.tag_summary_u03 ON &mw_prefix.tag_summary (ts_rev_id); + +CREATE TABLE &mw_prefix.valid_tag ( + vt_tag VARCHAR2(255) NOT NULL +); +ALTER TABLE &mw_prefix.valid_tag ADD CONSTRAINT &mw_prefix.valid_tag_pk PRIMARY KEY (vt_tag); + +-- This table is not used unless profiling is turned on +--CREATE TABLE &mw_prefix.profiling ( +-- pf_count NUMBER DEFAULT 0 NOT NULL, +-- pf_time NUMERIC(18,10) DEFAULT 0 NOT NULL, +-- pf_name CLOB NOT NULL, +-- pf_server CLOB NULL +--); +--CREATE UNIQUE INDEX &mw_prefix.profiling_u01 ON &mw_prefix.profiling (pf_name, pf_server); + +CREATE INDEX &mw_prefix.si_title_idx ON &mw_prefix.searchindex(si_title) INDEXTYPE IS ctxsys.context; +CREATE INDEX &mw_prefix.si_text_idx ON &mw_prefix.searchindex(si_text) INDEXTYPE IS ctxsys.context; + +CREATE TABLE &mw_prefix.l10n_cache ( + lc_lang varchar2(32) NOT NULL, + lc_key varchar2(255) NOT NULL, + lc_value clob NOT NULL +); +CREATE INDEX &mw_prefix.l10n_cache_u01 ON &mw_prefix.l10n_cache (lc_lang, lc_key); + +CREATE TABLE &mw_prefix.msg_resource ( + mr_resource VARCHAR2(255) NOT NULL, + mr_lang varchar2(32) NOT NULL, + mr_blob BLOB NOT NULL, + mr_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL +) ; +CREATE UNIQUE INDEX &mw_prefix.msg_resource_u01 ON &mw_prefix.msg_resource (mr_resource, mr_lang); + +CREATE TABLE &mw_prefix.msg_resource_links ( + mrl_resource VARCHAR2(255) NOT NULL, + mrl_message VARCHAR2(255) NOT NULL +); +CREATE UNIQUE INDEX &mw_prefix.msg_resource_links_u01 ON &mw_prefix.msg_resource_links (mrl_message, mrl_resource); + +CREATE TABLE &mw_prefix.module_deps ( + md_module VARCHAR2(255) NOT NULL, + md_skin VARCHAR2(32) NOT NULL, + md_deps BLOB NOT NULL +); +CREATE UNIQUE INDEX &mw_prefix.module_deps_u01 ON &mw_prefix.module_deps (md_module, md_skin); + +-- do not prefix this table as it breaks parserTests +CREATE TABLE wiki_field_info_full ( +table_name VARCHAR2(35) NOT NULL, +column_name VARCHAR2(35) NOT NULL, +data_default VARCHAR2(4000), +data_length NUMBER NOT NULL, +data_type VARCHAR2(106), +not_null CHAR(1) NOT NULL, +prim NUMBER(1), +uniq NUMBER(1), +nonuniq NUMBER(1) +); +ALTER TABLE wiki_field_info_full ADD CONSTRAINT wiki_field_info_full_pk PRIMARY KEY (table_name, column_name); + +/*$mw$*/ +CREATE PROCEDURE fill_wiki_info IS + BEGIN + DELETE wiki_field_info_full; + + FOR x_rec IN (SELECT t.table_name table_name, t.column_name, + t.data_default, t.data_length, t.data_type, + DECODE (t.nullable, 'Y', '1', 'N', '0') not_null, + (SELECT 1 + FROM user_cons_columns ucc, + user_constraints uc + WHERE ucc.table_name = t.table_name + AND ucc.column_name = t.column_name + AND uc.constraint_name = ucc.constraint_name + AND uc.constraint_type = 'P' + AND ROWNUM < 2) prim, + (SELECT 1 + FROM user_ind_columns uic, + user_indexes ui + WHERE uic.table_name = t.table_name + AND uic.column_name = t.column_name + AND ui.index_name = uic.index_name + AND ui.uniqueness = 'UNIQUE' + AND ROWNUM < 2) uniq, + (SELECT 1 + FROM user_ind_columns uic, + user_indexes ui + WHERE uic.table_name = t.table_name + AND uic.column_name = t.column_name + AND ui.index_name = uic.index_name + AND ui.uniqueness = 'NONUNIQUE' + AND ROWNUM < 2) nonuniq + FROM user_tab_columns t, user_tables ut + WHERE ut.table_name = t.table_name) + LOOP + INSERT INTO wiki_field_info_full + (table_name, column_name, + data_default, data_length, + data_type, not_null, prim, + uniq, nonuniq + ) + VALUES (x_rec.table_name, x_rec.column_name, + x_rec.data_default, x_rec.data_length, + x_rec.data_type, x_rec.not_null, x_rec.prim, + x_rec.uniq, x_rec.nonuniq + ); + END LOOP; + COMMIT; +END; +/*$mw$*/ + +/*$mw$*/ +CREATE OR REPLACE PROCEDURE duplicate_table(p_tabname IN VARCHAR2, + p_oldprefix IN VARCHAR2, + p_newprefix IN VARCHAR2, + p_temporary IN BOOLEAN) IS + e_table_not_exist EXCEPTION; + PRAGMA EXCEPTION_INIT(e_table_not_exist, -00942); + l_temp_ei_sql VARCHAR2(2000); +BEGIN + BEGIN + EXECUTE IMMEDIATE 'DROP TABLE ' || p_newprefix || p_tabname || + ' CASCADE CONSTRAINTS'; + EXCEPTION + WHEN e_table_not_exist THEN + NULL; + END; + IF (p_temporary) THEN + EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE ' || p_newprefix || + p_tabname || ' AS SELECT * FROM ' || p_oldprefix || + p_tabname || ' WHERE ROWNUM = 0'; + ELSE + EXECUTE IMMEDIATE 'CREATE TABLE ' || p_newprefix || p_tabname || + ' AS SELECT * FROM ' || p_oldprefix || p_tabname || + ' WHERE ROWNUM = 0'; + END IF; + FOR rc IN (SELECT column_name, data_default + FROM user_tab_columns + WHERE table_name = p_oldprefix || p_tabname + AND data_default IS NOT NULL) LOOP + EXECUTE IMMEDIATE 'ALTER TABLE ' || p_newprefix || p_tabname || + ' MODIFY ' || rc.column_name || ' DEFAULT ' || + SUBSTR(rc.data_default, 1, 2000); + END LOOP; + FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('CONSTRAINT', + constraint_name), + 32767, + 1), + USER || '"."' || p_oldprefix, + USER || '"."' || p_newprefix), + '"' || constraint_name || '"', + '"' || p_newprefix || constraint_name || '"') DDLVC2, + constraint_name + FROM user_constraints uc + WHERE table_name = p_oldprefix || p_tabname + AND constraint_type = 'P') LOOP + l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1); + l_temp_ei_sql := SUBSTR(l_temp_ei_sql, 1, INSTR(l_temp_ei_sql, ')', INSTR(l_temp_ei_sql, 'PRIMARY KEY')+1)+1); + EXECUTE IMMEDIATE l_temp_ei_sql; + END LOOP; + IF (NOT p_temporary) THEN + FOR rc IN (SELECT REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('REF_CONSTRAINT', + constraint_name), + 32767, + 1), + USER || '"."' || p_oldprefix, + USER || '"."' || p_newprefix) DDLVC2, + constraint_name + FROM user_constraints uc + WHERE table_name = p_oldprefix || p_tabname + AND constraint_type = 'R') LOOP + EXECUTE IMMEDIATE rc.ddlvc2; + END LOOP; + END IF; + FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('INDEX', + index_name), + 32767, + 1), + USER || '"."' || p_oldprefix, + USER || '"."' || p_newprefix), + '"' || index_name || '"', + '"' || p_newprefix || index_name || '"') DDLVC2, + index_name, + index_type + FROM user_indexes ui + WHERE table_name = p_oldprefix || p_tabname + AND index_type NOT IN ('LOB', 'DOMAIN') + AND NOT EXISTS + (SELECT NULL + FROM user_constraints + WHERE table_name = ui.table_name + AND constraint_name = ui.index_name)) LOOP + l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1); + l_temp_ei_sql := SUBSTR(l_temp_ei_sql, 1, INSTR(l_temp_ei_sql, ')', INSTR(l_temp_ei_sql, '"' || USER || '"."' || p_newprefix || '"')+1)+1); + EXECUTE IMMEDIATE l_temp_ei_sql; + END LOOP; + FOR rc IN (SELECT REPLACE(REPLACE(UPPER(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('TRIGGER', + trigger_name), + 32767, + 1)), + USER || '"."' || p_oldprefix, + USER || '"."' || p_newprefix), + ' ON ' || p_oldprefix || p_tabname, + ' ON ' || p_newprefix || p_tabname) DDLVC2, + trigger_name + FROM user_triggers + WHERE table_name = p_oldprefix || p_tabname) LOOP + l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'ALTER ') - 1); + EXECUTE IMMEDIATE l_temp_ei_sql; + END LOOP; +END; +/*$mw$*/ + +/*$mw$*/ +CREATE OR REPLACE FUNCTION BITOR (x IN NUMBER, y IN NUMBER) RETURN NUMBER AS +BEGIN + RETURN (x + y - BITAND(x, y)); +END; +/*$mw$*/ + +/*$mw$*/ +CREATE OR REPLACE FUNCTION BITNOT (x IN NUMBER) RETURN NUMBER AS +BEGIN + RETURN (4294967295 - x); +END; +/*$mw$*/ + +CREATE OR REPLACE TYPE GET_OUTPUT_TYPE IS TABLE OF VARCHAR2(255); + +/*$mw$*/ +CREATE OR REPLACE FUNCTION GET_OUTPUT_LINES RETURN GET_OUTPUT_TYPE PIPELINED AS + v_line VARCHAR2(255); + v_status INTEGER := 0; +BEGIN + + LOOP + DBMS_OUTPUT.GET_LINE(v_line, v_status); + IF (v_status = 0) THEN RETURN; END IF; + PIPE ROW (v_line); + END LOOP; + RETURN; +EXCEPTION + WHEN OTHERS THEN + RETURN; +END; +/*$mw$*/ + +/*$mw$*/ +CREATE OR REPLACE FUNCTION GET_SEQUENCE_VALUE(seq IN VARCHAR2) RETURN NUMBER AS + v_value NUMBER; +BEGIN + EXECUTE IMMEDIATE 'SELECT '||seq||'.NEXTVAL INTO :outVar FROM DUAL' INTO v_value; + RETURN v_value; +END; +/*$mw$*/ diff --git a/maintenance/oracle/user.sql b/maintenance/oracle/user.sql new file mode 100644 index 00000000..57688eae --- /dev/null +++ b/maintenance/oracle/user.sql @@ -0,0 +1,16 @@ +-- defines must comply with ^define\s*([^\s=]*)\s*=\s?'\{\$([^\}]*)\}'; +define wiki_user='{$wgDBuser}'; +define wiki_pass='{$wgDBpassword}'; +define def_ts='{$_OracleDefTS}'; +define temp_ts='{$_OracleTempTS}'; + +create user &wiki_user. identified by &wiki_pass. default tablespace &def_ts. temporary tablespace &temp_ts. quota unlimited on &def_ts.; +grant connect, resource to &wiki_user.; +grant alter session to &wiki_user.; +grant ctxapp to &wiki_user.; +grant execute on ctx_ddl to &wiki_user.; +grant create view to &wiki_user.; +grant create synonym to &wiki_user.; +grant create table to &wiki_user.; +grant create sequence to &wiki_user.; +grant create trigger to &wiki_user.; diff --git a/maintenance/orphans.php b/maintenance/orphans.php index 67403e43..dbbddb9c 100644 --- a/maintenance/orphans.php +++ b/maintenance/orphans.php @@ -27,7 +27,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class Orphans extends Maintenance { public function __construct() { @@ -55,7 +55,7 @@ class Orphans extends Maintenance { */ private function lockTables( &$db, $extraTable = null ) { $tbls = array( 'page', 'revision', 'redirect' ); - if( $extraTable ) + if ( $extraTable ) $tbls[] = $extraTable; $db->lockTables( array(), $tbls, __METHOD__, false ); } @@ -68,23 +68,23 @@ class Orphans extends Maintenance { $dbw = wfGetDB( DB_MASTER ); $page = $dbw->tableName( 'page' ); $revision = $dbw->tableName( 'revision' ); - - if( $fix ) { + + if ( $fix ) { $this->lockTables( $dbw ); } - + $this->output( "Checking for orphan revision table entries... (this may take a while on a large wiki)\n" ); $result = $dbw->query( " SELECT * FROM $revision LEFT OUTER JOIN $page ON rev_page=page_id WHERE page_id IS NULL - "); + " ); $orphans = $dbw->numRows( $result ); - if( $orphans > 0 ) { + if ( $orphans > 0 ) { global $wgContLang; $this->output( "$orphans orphan revisions...\n" ); $this->output( sprintf( "%10s %10s %14s %20s %s\n", 'rev_id', 'rev_page', 'rev_timestamp', 'rev_user_text', 'rev_comment' ) ); - foreach( $result as $row ) { + foreach ( $result as $row ) { $comment = ( $row->rev_comment == '' ) ? '' : '(' . $wgContLang->truncate( $row->rev_comment, 40 ) . ')'; @@ -94,24 +94,24 @@ class Orphans extends Maintenance { $row->rev_timestamp, $wgContLang->truncate( $row->rev_user_text, 17 ), $comment ) ); - if( $fix ) { + if ( $fix ) { $dbw->delete( 'revision', array( 'rev_id' => $row->rev_id ) ); } } - if( !$fix ) { + if ( !$fix ) { $this->output( "Run again with --fix to remove these entries automatically.\n" ); } } else { $this->output( "No orphans! Yay!\n" ); } - - if( $fix ) { - $dbw->unlockTables(); + + if ( $fix ) { + $dbw->unlockTables( __METHOD__ ); } } /** - * @param $fix bool + * @param $fix bool * @todo DON'T USE THIS YET! It will remove entries which have children, * but which aren't properly attached (eg if page_latest is bogus * but valid revisions do exist) @@ -121,7 +121,7 @@ class Orphans extends Maintenance { $page = $dbw->tableName( 'page' ); $revision = $dbw->tableName( 'revision' ); - if( $fix ) { + if ( $fix ) { $this->lockTables( $dbw ); } @@ -130,31 +130,30 @@ class Orphans extends Maintenance { SELECT * FROM $page LEFT OUTER JOIN $revision ON page_latest=rev_id WHERE rev_id IS NULL - "); + " ); $widows = $dbw->numRows( $result ); - if( $widows > 0 ) { - global $wgContLang; + if ( $widows > 0 ) { $this->output( "$widows childless pages...\n" ); $this->output( sprintf( "%10s %11s %2s %s\n", 'page_id', 'page_latest', 'ns', 'page_title' ) ); - foreach( $result as $row ) { + foreach ( $result as $row ) { printf( "%10d %11d %2d %s\n", $row->page_id, $row->page_latest, $row->page_namespace, $row->page_title ); - if( $fix ) { + if ( $fix ) { $dbw->delete( 'page', array( 'page_id' => $row->page_id ) ); } } - if( !$fix ) { + if ( !$fix ) { $this->output( "Run again with --fix to remove these entries automatically.\n" ); } } else { $this->output( "No childless pages! Yay!\n" ); } - - if( $fix ) { - $dbw->unlockTables(); + + if ( $fix ) { + $dbw->unlockTables( __METHOD__ ); } } @@ -166,29 +165,27 @@ class Orphans extends Maintenance { $dbw = wfGetDB( DB_MASTER ); $page = $dbw->tableName( 'page' ); $revision = $dbw->tableName( 'revision' ); - $text = $dbw->tableName( 'text' ); - - if( $fix ) { - $dbw->lockTables( $dbw, 'text' ); + + if ( $fix ) { + $dbw->lockTables( $dbw, 'text', __METHOD__ ); } - + $this->output( "\nChecking for pages whose page_latest links are incorrect... (this may take a while on a large wiki)\n" ); $result = $dbw->query( " SELECT * FROM $page LEFT OUTER JOIN $revision ON page_latest=rev_id - "); + " ); $found = 0; - foreach( $result as $row ) { + foreach ( $result as $row ) { $result2 = $dbw->query( " SELECT MAX(rev_timestamp) as max_timestamp FROM $revision WHERE rev_page=$row->page_id " ); $row2 = $dbw->fetchObject( $result2 ); - $dbw->freeResult( $result2 ); - if( $row2 ) { - if( $row->rev_timestamp != $row2->max_timestamp ) { - if( $found == 0 ) { + if ( $row2 ) { + if ( $row->rev_timestamp != $row2->max_timestamp ) { + if ( $found == 0 ) { $this->output( sprintf( "%10s %10s %14s %14s\n", 'page_id', 'rev_id', 'timestamp', 'max timestamp' ) ); } @@ -198,7 +195,7 @@ class Orphans extends Maintenance { $row->page_latest, $row->rev_timestamp, $row2->max_timestamp ) ); - if( $fix ) { + if ( $fix ) { # ... $maxId = $dbw->selectField( 'revision', @@ -217,21 +214,21 @@ class Orphans extends Maintenance { $this->output( "wtf\n" ); } } - - if( $found ) { + + if ( $found ) { $this->output( "Found $found pages with incorrect latest revision.\n" ); } else { $this->output( "No pages with incorrect latest revision. Yay!\n" ); } - if( !$fix && $found > 0 ) { + if ( !$fix && $found > 0 ) { $this->output( "Run again with --fix to remove these entries automatically.\n" ); } - - if( $fix ) { - $dbw->unlockTables(); + + if ( $fix ) { + $dbw->unlockTables( __METHOD__ ); } } } $maintClass = "Orphans"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/ourusers.php b/maintenance/ourusers.php index 3b5da447..499da5cf 100644 --- a/maintenance/ourusers.php +++ b/maintenance/ourusers.php @@ -32,12 +32,12 @@ $databases = array( print "/*!40100 set old_passwords=1 */;\n"; print "/*!40100 set global old_passwords=1 */;\n"; -foreach( $hosts as $host ) { +foreach ( $hosts as $host ) { print "--\n-- $host\n--\n"; print "\n-- wikiuser\n\n"; print "GRANT REPLICATION CLIENT,PROCESS ON *.* TO 'wikiuser'@'$host' IDENTIFIED BY '$wikiuser_pass';\n"; print "GRANT ALL PRIVILEGES ON `boardvote%`.* TO 'wikiuser'@'$host' IDENTIFIED BY '$wikiuser_pass';\n"; - foreach( $databases as $db ) { + foreach ( $databases as $db ) { print "GRANT SELECT, INSERT, UPDATE, DELETE ON `$db`.* TO 'wikiuser'@'$host' IDENTIFIED BY '$wikiuser_pass';\n"; } diff --git a/maintenance/parserTests.inc b/maintenance/parserTests.inc deleted file mode 100644 index 6526da90..00000000 --- a/maintenance/parserTests.inc +++ /dev/null @@ -1,1719 +0,0 @@ - -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - -/** - * @todo Make this more independent of the configuration (and if possible the database) - * @todo document - * @file - * @ingroup Maintenance - */ - -/** */ -$options = array( 'quick', 'color', 'quiet', 'help', 'show-output', 'record', 'run-disabled' ); -$optionsWithArgs = array( 'regex', 'seed', 'setversion' ); - -if ( !defined( "NO_COMMAND_LINE" ) ) { - require_once( dirname(__FILE__) . '/commandLine.inc' ); -} -require_once( "$IP/maintenance/parserTestsParserHook.php" ); -require_once( "$IP/maintenance/parserTestsStaticParserHook.php" ); -require_once( "$IP/maintenance/parserTestsParserTime.php" ); - -/** - * @ingroup Maintenance - */ -class ParserTest { - /** - * boolean $color whereas output should be colorized - */ - private $color; - - /** - * boolean $showOutput Show test output - */ - private $showOutput; - - /** - * boolean $useTemporaryTables Use temporary tables for the temporary database - */ - private $useTemporaryTables = true; - - /** - * boolean $databaseSetupDone True if the database has been set up - */ - private $databaseSetupDone = false; - - /** - * string $oldTablePrefix Original table prefix - */ - private $oldTablePrefix; - - private $maxFuzzTestLength = 300; - private $fuzzSeed = 0; - private $memoryLimit = 50; - - /** - * Sets terminal colorization and diff/quick modes depending on OS and - * command-line options (--color and --quick). - */ - public function ParserTest() { - global $options; - - # Only colorize output if stdout is a terminal. - $this->color = !wfIsWindows() && posix_isatty(1); - - if( isset( $options['color'] ) ) { - switch( $options['color'] ) { - case 'no': - $this->color = false; - break; - case 'yes': - default: - $this->color = true; - break; - } - } - $this->term = $this->color - ? new AnsiTermColorer() - : new DummyTermColorer(); - - $this->showDiffs = !isset( $options['quick'] ); - $this->showProgress = !isset( $options['quiet'] ); - $this->showFailure = !( - isset( $options['quiet'] ) - && ( isset( $options['record'] ) - || isset( $options['compare'] ) ) ); // redundant output - - $this->showOutput = isset( $options['show-output'] ); - - - if (isset($options['regex'])) { - if ( isset( $options['record'] ) ) { - echo "Warning: --record cannot be used with --regex, disabling --record\n"; - unset( $options['record'] ); - } - $this->regex = $options['regex']; - } else { - # Matches anything - $this->regex = ''; - } - - if( isset( $options['record'] ) ) { - $this->recorder = new DbTestRecorder( $this ); - } elseif( isset( $options['compare'] ) ) { - $this->recorder = new DbTestPreviewer( $this ); - } elseif( isset( $options['upload'] ) ) { - $this->recorder = new RemoteTestRecorder( $this ); - } elseif( class_exists( 'PHPUnitTestRecorder' ) ) { - $this->recorder = new PHPUnitTestRecorder( $this ); - } else { - $this->recorder = new TestRecorder( $this ); - } - $this->keepUploads = isset( $options['keep-uploads'] ); - - if ( isset( $options['seed'] ) ) { - $this->fuzzSeed = intval( $options['seed'] ) - 1; - } - - $this->runDisabled = isset( $options['run-disabled'] ); - - $this->hooks = array(); - $this->functionHooks = array(); - } - - /** - * Remove last character if it is a newline - */ - public function chomp($s) { - if (substr($s, -1) === "\n") { - return substr($s, 0, -1); - } - else { - return $s; - } - } - - /** - * Run a fuzz test series - * Draw input from a set of test files - */ - function fuzzTest( $filenames ) { - $dict = $this->getFuzzInput( $filenames ); - $dictSize = strlen( $dict ); - $logMaxLength = log( $this->maxFuzzTestLength ); - $this->setupDatabase(); - ini_set( 'memory_limit', $this->memoryLimit * 1048576 ); - - $numTotal = 0; - $numSuccess = 0; - $user = new User; - $opts = ParserOptions::newFromUser( $user ); - $title = Title::makeTitle( NS_MAIN, 'Parser_test' ); - - while ( true ) { - // Generate test input - mt_srand( ++$this->fuzzSeed ); - $totalLength = mt_rand( 1, $this->maxFuzzTestLength ); - $input = ''; - while ( strlen( $input ) < $totalLength ) { - $logHairLength = mt_rand( 0, 1000000 ) / 1000000 * $logMaxLength; - $hairLength = min( intval( exp( $logHairLength ) ), $dictSize ); - $offset = mt_rand( 0, $dictSize - $hairLength ); - $input .= substr( $dict, $offset, $hairLength ); - } - - $this->setupGlobals(); - $parser = $this->getParser(); - // Run the test - try { - $parser->parse( $input, $title, $opts ); - $fail = false; - } catch ( Exception $exception ) { - $fail = true; - } - - if ( $fail ) { - echo "Test failed with seed {$this->fuzzSeed}\n"; - echo "Input:\n"; - var_dump( $input ); - echo "\n\n"; - echo "$exception\n"; - } else { - $numSuccess++; - } - $numTotal++; - $this->teardownGlobals(); - $parser->__destruct(); - - if ( $numTotal % 100 == 0 ) { - $usage = intval( memory_get_usage( true ) / $this->memoryLimit / 1048576 * 100 ); - echo "{$this->fuzzSeed}: $numSuccess/$numTotal (mem: $usage%)\n"; - if ( $usage > 90 ) { - echo "Out of memory:\n"; - $memStats = $this->getMemoryBreakdown(); - foreach ( $memStats as $name => $usage ) { - echo "$name: $usage\n"; - } - $this->abort(); - } - } - } - } - - /** - * Get an input dictionary from a set of parser test files - */ - function getFuzzInput( $filenames ) { - $dict = ''; - foreach( $filenames as $filename ) { - $contents = file_get_contents( $filename ); - preg_match_all( '/!!\s*input\n(.*?)\n!!\s*result/s', $contents, $matches ); - foreach ( $matches[1] as $match ) { - $dict .= $match . "\n"; - } - } - return $dict; - } - - /** - * Get a memory usage breakdown - */ - function getMemoryBreakdown() { - $memStats = array(); - foreach ( $GLOBALS as $name => $value ) { - $memStats['$'.$name] = strlen( serialize( $value ) ); - } - $classes = get_declared_classes(); - foreach ( $classes as $class ) { - $rc = new ReflectionClass( $class ); - $props = $rc->getStaticProperties(); - $memStats[$class] = strlen( serialize( $props ) ); - $methods = $rc->getMethods(); - foreach ( $methods as $method ) { - $memStats[$class] += strlen( serialize( $method->getStaticVariables() ) ); - } - } - $functions = get_defined_functions(); - foreach ( $functions['user'] as $function ) { - $rf = new ReflectionFunction( $function ); - $memStats["$function()"] = strlen( serialize( $rf->getStaticVariables() ) ); - } - asort( $memStats ); - return $memStats; - } - - function abort() { - $this->abort(); - } - - /** - * Run a series of tests listed in the given text files. - * Each test consists of a brief description, wikitext input, - * and the expected HTML output. - * - * Prints status updates on stdout and counts up the total - * number and percentage of passed tests. - * - * @param array of strings $filenames - * @return bool True if passed all tests, false if any tests failed. - */ - public function runTestsFromFiles( $filenames ) { - $this->recorder->start(); - $this->setupDatabase(); - $ok = true; - foreach( $filenames as $filename ) { - $tests = new TestFileIterator( $filename, $this ); - $ok = $this->runTests( $tests ) && $ok; - } - $this->teardownDatabase(); - $this->recorder->report(); - $this->recorder->end(); - return $ok; - } - - function runTests($tests) { - $ok = true; - foreach($tests as $i => $t) { - $result = - $this->runTest($t['test'], $t['input'], $t['result'], $t['options'], $t['config']); - $ok = $ok && $result; - $this->recorder->record( $t['test'], $result ); - } - if ( $this->showProgress ) { - print "\n"; - } - } - - /** - * Get a Parser object - */ - function getParser() { - global $wgParserConf; - $class = $wgParserConf['class']; - $parser = new $class( $wgParserConf ); - foreach( $this->hooks as $tag => $callback ) { - $parser->setHook( $tag, $callback ); - } - foreach( $this->functionHooks as $tag => $bits ) { - list( $callback, $flags ) = $bits; - $parser->setFunctionHook( $tag, $callback, $flags ); - } - wfRunHooks( 'ParserTestParser', array( &$parser ) ); - return $parser; - } - - /** - * Run a given wikitext input through a freshly-constructed wiki parser, - * and compare the output against the expected results. - * Prints status and explanatory messages to stdout. - * - * @param string $input Wikitext to try rendering - * @param string $result Result to output - * @return bool - */ - public function runTest( $desc, $input, $result, $opts, $config ) { - if( $this->showProgress ) { - $this->showTesting( $desc ); - } - - $opts = $this->parseOptions( $opts ); - $this->setupGlobals($opts, $config); - - $user = new User(); - $options = ParserOptions::newFromUser( $user ); - - $m = array(); - if (isset( $opts['title'] ) ) { - $titleText = $opts['title']; - } - else { - $titleText = 'Parser test'; - } - - $noxml = isset( $opts['noxml'] ); - $local = isset( $opts['local'] ); - $parser = $this->getParser(); - $title = Title::newFromText( $titleText ); - - $matches = array(); - if( isset( $opts['pst'] ) ) { - $out = $parser->preSaveTransform( $input, $title, $user, $options ); - } elseif( isset( $opts['msg'] ) ) { - $out = $parser->transformMsg( $input, $options ); - } elseif( isset( $opts['section'] ) ) { - $section = $opts['section']; - $out = $parser->getSection( $input, $section ); - } elseif( isset( $opts['replace'] ) ) { - $section = $opts['replace'][0]; - $replace = $opts['replace'][1]; - $out = $parser->replaceSection( $input, $section, $replace ); - } elseif( isset( $opts['comment'] ) ) { - $linker = $user->getSkin(); - $out = $linker->formatComment( $input, $title, $local ); - } else { - $output = $parser->parse( $input, $title, $options, true, true, 1337 ); - $out = $output->getText(); - - if ( isset( $opts['showtitle'] ) ) { - if($output->getTitleText()) $title = $output->getTitleText(); - $out = "$title\n$out"; - } - if (isset( $opts['ill'] ) ) { - $out = $this->tidy( implode( ' ', $output->getLanguageLinks() ) ); - } elseif( isset( $opts['cat'] ) ) { - global $wgOut; - $wgOut->addCategoryLinks($output->getCategories()); - $cats = $wgOut->getCategoryLinks(); - if ( isset( $cats['normal'] ) ) { - $out = $this->tidy( implode( ' ', $cats['normal'] ) ); - } else { - $out = ''; - } - } - - $result = $this->tidy($result); - } - - - $this->teardownGlobals(); - - if( $result === $out && ( $noxml === true || $this->wellFormed( $out ) ) ) { - return $this->showSuccess( $desc ); - } else { - return $this->showFailure( $desc, $result, $out ); - } - } - - - /** - * Use a regex to find out the value of an option - * @param $key name of option val to retrieve - * @param $opts Options array to look in - * @param $defaults Default value returned if not found - */ - private static function getOptionValue( $key, $opts, $default ) { - $key = strtolower( $key ); - if( isset( $opts[$key] ) ) { - return $opts[$key]; - } else { - return $default; - } - } - - private function parseOptions( $instring ) { - $opts = array(); - $lines = explode( "\n", $instring ); - // foo - // foo=bar - // foo="bar baz" - // foo=[[bar baz]] - // foo=bar,"baz quux" - $regex = '/\b - ([\w-]+) # Key - \b - (?:\s* - = # First sub-value - \s* - ( - " - [^"]* # Quoted val - " - | - \[\[ - [^]]* # Link target - \]\] - | - [\w-]+ # Plain word - ) - (?:\s* - , # Sub-vals 1..N - \s* - ( - "[^"]*" # Quoted val - | - \[\[[^]]*\]\] # Link target - | - [\w-]+ # Plain word - ) - )* - )? - /x'; - - if( preg_match_all( $regex, $instring, $matches, PREG_SET_ORDER ) ) { - foreach( $matches as $bits ) { - $match = array_shift( $bits ); - $key = strtolower( array_shift( $bits ) ); - if( count( $bits ) == 0 ) { - $opts[$key] = true; - } elseif( count( $bits ) == 1 ) { - $opts[$key] = $this->cleanupOption( array_shift( $bits ) ); - } else { - // Array! - $opts[$key] = array_map( array( $this, 'cleanupOption' ), $bits ); - } - } - } - return $opts; - } - - private function cleanupOption( $opt ) { - if( substr( $opt, 0, 1 ) == '"' ) { - return substr( $opt, 1, -1 ); - } - if( substr( $opt, 0, 2 ) == '[[' ) { - return substr( $opt, 2, -2 ); - } - return $opt; - } - - /** - * Set up the global variables for a consistent environment for each test. - * Ideally this should replace the global configuration entirely. - */ - private function setupGlobals($opts = '', $config = '') { - global $wgDBtype; - if( !isset( $this->uploadDir ) ) { - $this->uploadDir = $this->setupUploadDir(); - } - - # Find out values for some special options. - $lang = - self::getOptionValue( 'language', $opts, 'en' ); - $variant = - self::getOptionValue( 'variant', $opts, false ); - $maxtoclevel = - self::getOptionValue( 'wgMaxTocLevel', $opts, 999 ); - $linkHolderBatchSize = - self::getOptionValue( 'wgLinkHolderBatchSize', $opts, 1000 ); - - $settings = array( - 'wgServer' => 'http://localhost', - 'wgScript' => '/index.php', - 'wgScriptPath' => '/', - 'wgArticlePath' => '/wiki/$1', - 'wgActionPaths' => array(), - 'wgLocalFileRepo' => array( - 'class' => 'LocalRepo', - 'name' => 'local', - 'directory' => $this->uploadDir, - 'url' => 'http://example.com/images', - 'hashLevels' => 2, - 'transformVia404' => false, - ), - 'wgEnableUploads' => true, - 'wgStyleSheetPath' => '/skins', - 'wgSitename' => 'MediaWiki', - 'wgServerName' => 'Britney-Spears', - 'wgLanguageCode' => $lang, - 'wgContLanguageCode' => $lang, - 'wgDBprefix' => $wgDBtype != 'oracle' ? 'parsertest_' : 'pt_', - 'wgRawHtml' => isset( $opts['rawhtml'] ), - 'wgLang' => null, - 'wgContLang' => null, - 'wgNamespacesWithSubpages' => array( 0 => isset( $opts['subpage'] ) ), - 'wgMaxTocLevel' => $maxtoclevel, - 'wgCapitalLinks' => true, - 'wgNoFollowLinks' => true, - 'wgNoFollowDomainExceptions' => array(), - 'wgThumbnailScriptPath' => false, - 'wgUseImageResize' => false, - 'wgUseTeX' => isset( $opts['math'] ), - 'wgMathDirectory' => $this->uploadDir . '/math', - 'wgLocaltimezone' => 'UTC', - 'wgAllowExternalImages' => true, - 'wgUseTidy' => false, - 'wgDefaultLanguageVariant' => $variant, - 'wgVariantArticlePath' => false, - 'wgGroupPermissions' => array( '*' => array( - 'createaccount' => true, - 'read' => true, - 'edit' => true, - 'createpage' => true, - 'createtalk' => true, - ) ), - 'wgNamespaceProtection' => array( NS_MEDIAWIKI => 'editinterface' ), - 'wgDefaultExternalStore' => array(), - 'wgForeignFileRepos' => array(), - 'wgLinkHolderBatchSize' => $linkHolderBatchSize, - 'wgExperimentalHtmlIds' => false, - 'wgExternalLinkTarget' => false, - 'wgAlwaysUseTidy' => false, - 'wgHtml5' => true, - 'wgWellFormedXml' => true, - 'wgAllowMicrodataAttributes' => true, - ); - - if ($config) { - $configLines = explode( "\n", $config ); - - foreach( $configLines as $line ) { - list( $var, $value ) = explode( '=', $line, 2 ); - - $settings[$var] = eval("return $value;" ); - } - } - - $this->savedGlobals = array(); - foreach( $settings as $var => $val ) { - if( array_key_exists( $var, $GLOBALS ) ) { - $this->savedGlobals[$var] = $GLOBALS[$var]; - } - $GLOBALS[$var] = $val; - } - $langObj = Language::factory( $lang ); - $GLOBALS['wgLang'] = $langObj; - $GLOBALS['wgContLang'] = $langObj; - $GLOBALS['wgMemc'] = new FakeMemCachedClient; - $GLOBALS['wgOut'] = new OutputPage; - - MagicWord::clearCache(); - - global $wgUser; - $wgUser = new User(); - } - - /** - * List of temporary tables to create, without prefix. - * Some of these probably aren't necessary. - */ - private function listTables() { - global $wgDBtype; - $tables = array('user', 'page', 'page_restrictions', - 'protected_titles', 'revision', 'text', 'pagelinks', 'imagelinks', - 'categorylinks', 'templatelinks', 'externallinks', 'langlinks', - 'site_stats', 'hitcounter', 'ipblocks', 'image', 'oldimage', - 'recentchanges', 'watchlist', 'math', 'interwiki', - 'querycache', 'objectcache', 'job', 'l10n_cache', 'redirect', 'querycachetwo', - 'archive', 'user_groups', 'page_props', 'category' - ); - - if ($wgDBtype === 'mysql') - array_push( $tables, 'searchindex' ); - - // Allow extensions to add to the list of tables to duplicate; - // may be necessary if they hook into page save or other code - // which will require them while running tests. - wfRunHooks( 'ParserTestTables', array( &$tables ) ); - - return $tables; - } - - /** - * Set up a temporary set of wiki tables to work with for the tests. - * Currently this will only be done once per run, and any changes to - * the db will be visible to later tests in the run. - */ - function setupDatabase() { - global $wgDBprefix, $wgDBtype; - if ( $this->databaseSetupDone ) { - return; - } - if ( $wgDBprefix === 'parsertest_' || ($wgDBtype == 'oracle' && $wgDBprefix === 'pt_')) { - throw new MWException( 'setupDatabase should be called before setupGlobals' ); - } - $this->databaseSetupDone = true; - $this->oldTablePrefix = $wgDBprefix; - - # CREATE TEMPORARY TABLE breaks if there is more than one server - # FIXME: r40209 makes temporary tables break even with just one server - # FIXME: (bug 15892); disabling the feature entirely as a temporary fix - if ( true || wfGetLB()->getServerCount() != 1 ) { - $this->useTemporaryTables = false; - } - - $temporary = $this->useTemporaryTables || $wgDBtype == 'postgres'; - - $db = wfGetDB( DB_MASTER ); - $tables = $this->listTables(); - - foreach ( $tables as $tbl ) { - # Clean up from previous aborted run. So that table escaping - # works correctly across DB engines, we need to change the pre- - # fix back and forth so tableName() works right. - $this->changePrefix( $this->oldTablePrefix ); - $oldTableName = $db->tableName( $tbl ); - $this->changePrefix( $wgDBtype != 'oracle' ? 'parsertest_' : 'pt_' ); - $newTableName = $db->tableName( $tbl ); - - if ( $db->tableExists( $tbl ) && $wgDBtype != 'postgres' && $wgDBtype != 'oracle' ) { - $db->query( "DROP TABLE $newTableName" ); - } - # Create new table - $db->duplicateTableStructure( $oldTableName, $newTableName, $temporary ); - } - if ($wgDBtype == 'oracle') - $db->query('BEGIN FILL_WIKI_INFO; END;'); - - $this->changePrefix( $wgDBtype != 'oracle' ? 'parsertest_' : 'pt_' ); - - # Hack: insert a few Wikipedia in-project interwiki prefixes, - # for testing inter-language links - $db->insert( 'interwiki', array( - array( 'iw_prefix' => 'wikipedia', - 'iw_url' => 'http://en.wikipedia.org/wiki/$1', - 'iw_local' => 0 ), - array( 'iw_prefix' => 'meatball', - 'iw_url' => 'http://www.usemod.com/cgi-bin/mb.pl?$1', - 'iw_local' => 0 ), - array( 'iw_prefix' => 'zh', - 'iw_url' => 'http://zh.wikipedia.org/wiki/$1', - 'iw_local' => 1 ), - array( 'iw_prefix' => 'es', - 'iw_url' => 'http://es.wikipedia.org/wiki/$1', - 'iw_local' => 1 ), - array( 'iw_prefix' => 'fr', - 'iw_url' => 'http://fr.wikipedia.org/wiki/$1', - 'iw_local' => 1 ), - array( 'iw_prefix' => 'ru', - 'iw_url' => 'http://ru.wikipedia.org/wiki/$1', - 'iw_local' => 1 ), - ) ); - - - if ($wgDBtype == 'oracle') { - # Insert 0 and 1 user_ids to prevent FK violations - - #Anonymous user - $db->insert( 'user', array( - 'user_id' => 0, - 'user_name' => 'Anonymous') ); - - # Hack-on-Hack: Insert a test user to be able to insert an image - $db->insert( 'user', array( - 'user_id' => 1, - 'user_name' => 'Tester') ); - } - - # Hack: Insert an image to work with - $db->insert( 'image', array( - 'img_name' => 'Foobar.jpg', - 'img_size' => 12345, - 'img_description' => 'Some lame file', - 'img_user' => 1, - 'img_user_text' => 'WikiSysop', - 'img_timestamp' => $db->timestamp( '20010115123500' ), - 'img_width' => 1941, - 'img_height' => 220, - 'img_bits' => 24, - 'img_media_type' => MEDIATYPE_BITMAP, - 'img_major_mime' => "image", - 'img_minor_mime' => "jpeg", - 'img_metadata' => serialize( array() ), - ) ); - - # This image will be blacklisted in [[MediaWiki:Bad image list]] - $db->insert( 'image', array( - 'img_name' => 'Bad.jpg', - 'img_size' => 12345, - 'img_description' => 'zomgnotcensored', - 'img_user' => 1, - 'img_user_text' => 'WikiSysop', - 'img_timestamp' => $db->timestamp( '20010115123500' ), - 'img_width' => 320, - 'img_height' => 240, - 'img_bits' => 24, - 'img_media_type' => MEDIATYPE_BITMAP, - 'img_major_mime' => "image", - 'img_minor_mime' => "jpeg", - 'img_metadata' => serialize( array() ), - ) ); - - # Update certain things in site_stats - $db->insert( 'site_stats', array( 'ss_row_id' => 1, 'ss_images' => 2, 'ss_good_articles' => 1 ) ); - - # Reinitialise the LocalisationCache to match the database state - Language::getLocalisationCache()->unloadAll(); - - # Make a new message cache - global $wgMessageCache, $wgMemc; - $wgMessageCache = new MessageCache( $wgMemc, true, 3600, '' ); - } - - /** - * Change the table prefix on all open DB connections/ - */ - protected function changePrefix( $prefix ) { - global $wgDBprefix; - wfGetLBFactory()->forEachLB( array( $this, 'changeLBPrefix' ), array( $prefix ) ); - $wgDBprefix = $prefix; - } - - public function changeLBPrefix( $lb, $prefix ) { - $lb->forEachOpenConnection( array( $this, 'changeDBPrefix' ), array( $prefix ) ); - } - - public function changeDBPrefix( $db, $prefix ) { - $db->tablePrefix( $prefix ); - } - - private function teardownDatabase() { - global $wgDBtype; - if ( !$this->databaseSetupDone ) { - return; - } - $this->changePrefix( $this->oldTablePrefix ); - $this->databaseSetupDone = false; - if ( $this->useTemporaryTables ) { - # Don't need to do anything - return; - } - - /* - $tables = $this->listTables(); - $db = wfGetDB( DB_MASTER ); - foreach ( $tables as $table ) { - $sql = $wgDBtype == 'oracle' ? "DROP TABLE pt_$table DROP CONSTRAINTS" : "DROP TABLE `parsertest_$table`"; - $db->query( $sql ); - } - if ($wgDBtype == 'oracle') - $db->query('BEGIN FILL_WIKI_INFO; END;'); - */ - } - - /** - * Create a dummy uploads directory which will contain a couple - * of files in order to pass existence tests. - * @return string The directory - */ - private function setupUploadDir() { - global $IP; - if ( $this->keepUploads ) { - $dir = wfTempDir() . '/mwParser-images'; - if ( is_dir( $dir ) ) { - return $dir; - } - } else { - $dir = wfTempDir() . "/mwParser-" . mt_rand() . "-images"; - } - - wfDebug( "Creating upload directory $dir\n" ); - if ( file_exists( $dir ) ) { - wfDebug( "Already exists!\n" ); - return $dir; - } - wfMkdirParents( $dir . '/3/3a' ); - copy( "$IP/skins/monobook/headbg.jpg", "$dir/3/3a/Foobar.jpg" ); - - wfMkdirParents( $dir . '/0/09' ); - copy( "$IP/skins/monobook/headbg.jpg", "$dir/0/09/Bad.jpg" ); - return $dir; - } - - /** - * Restore default values and perform any necessary clean-up - * after each test runs. - */ - private function teardownGlobals() { - RepoGroup::destroySingleton(); - LinkCache::singleton()->clear(); - foreach( $this->savedGlobals as $var => $val ) { - $GLOBALS[$var] = $val; - } - if( isset( $this->uploadDir ) ) { - $this->teardownUploadDir( $this->uploadDir ); - unset( $this->uploadDir ); - } - } - - /** - * Remove the dummy uploads directory - */ - private function teardownUploadDir( $dir ) { - if ( $this->keepUploads ) { - return; - } - - // delete the files first, then the dirs. - self::deleteFiles( - array ( - "$dir/3/3a/Foobar.jpg", - "$dir/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg", - "$dir/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg", - "$dir/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg", - "$dir/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg", - - "$dir/0/09/Bad.jpg", - - "$dir/math/f/a/5/fa50b8b616463173474302ca3e63586b.png", - ) - ); - - self::deleteDirs( - array ( - "$dir/3/3a", - "$dir/3", - "$dir/thumb/6/65", - "$dir/thumb/6", - "$dir/thumb/3/3a/Foobar.jpg", - "$dir/thumb/3/3a", - "$dir/thumb/3", - - "$dir/0/09/", - "$dir/0/", - "$dir/thumb", - "$dir/math/f/a/5", - "$dir/math/f/a", - "$dir/math/f", - "$dir/math", - "$dir", - ) - ); - } - - /** - * Delete the specified files, if they exist. - * @param array $files full paths to files to delete. - */ - private static function deleteFiles( $files ) { - foreach( $files as $file ) { - if( file_exists( $file ) ) { - unlink( $file ); - } - } - } - - /** - * Delete the specified directories, if they exist. Must be empty. - * @param array $dirs full paths to directories to delete. - */ - private static function deleteDirs( $dirs ) { - foreach( $dirs as $dir ) { - if( is_dir( $dir ) ) { - rmdir( $dir ); - } - } - } - - /** - * "Running test $desc..." - */ - protected function showTesting( $desc ) { - print "Running test $desc... "; - } - - /** - * Print a happy success message. - * - * @param string $desc The test name - * @return bool - */ - protected function showSuccess( $desc ) { - if( $this->showProgress ) { - print $this->term->color( '1;32' ) . 'PASSED' . $this->term->reset() . "\n"; - } - return true; - } - - /** - * Print a failure message and provide some explanatory output - * about what went wrong if so configured. - * - * @param string $desc The test name - * @param string $result Expected HTML output - * @param string $html Actual HTML output - * @return bool - */ - protected function showFailure( $desc, $result, $html ) { - if( $this->showFailure ) { - if( !$this->showProgress ) { - # In quiet mode we didn't show the 'Testing' message before the - # test, in case it succeeded. Show it now: - $this->showTesting( $desc ); - } - print $this->term->color( '31' ) . 'FAILED!' . $this->term->reset() . "\n"; - if ( $this->showOutput ) { - print "--- Expected ---\n$result\n--- Actual ---\n$html\n"; - } - if( $this->showDiffs ) { - print $this->quickDiff( $result, $html ); - if( !$this->wellFormed( $html ) ) { - print "XML error: $this->mXmlError\n"; - } - } - } - return false; - } - - /** - * Run given strings through a diff and return the (colorized) output. - * Requires writable /tmp directory and a 'diff' command in the PATH. - * - * @param string $input - * @param string $output - * @param string $inFileTail Tailing for the input file name - * @param string $outFileTail Tailing for the output file name - * @return string - */ - protected function quickDiff( $input, $output, $inFileTail='expected', $outFileTail='actual' ) { - $prefix = wfTempDir() . "/mwParser-" . mt_rand(); - - $infile = "$prefix-$inFileTail"; - $this->dumpToFile( $input, $infile ); - - $outfile = "$prefix-$outFileTail"; - $this->dumpToFile( $output, $outfile ); - - $diff = `diff -au $infile $outfile`; - unlink( $infile ); - unlink( $outfile ); - - return $this->colorDiff( $diff ); - } - - /** - * Write the given string to a file, adding a final newline. - * - * @param string $data - * @param string $filename - */ - private function dumpToFile( $data, $filename ) { - $file = fopen( $filename, "wt" ); - fwrite( $file, $data . "\n" ); - fclose( $file ); - } - - /** - * Colorize unified diff output if set for ANSI color output. - * Subtractions are colored blue, additions red. - * - * @param string $text - * @return string - */ - protected function colorDiff( $text ) { - return preg_replace( - array( '/^(-.*)$/m', '/^(\+.*)$/m' ), - array( $this->term->color( 34 ) . '$1' . $this->term->reset(), - $this->term->color( 31 ) . '$1' . $this->term->reset() ), - $text ); - } - - /** - * Show "Reading tests from ..." - * - * @param String $path - */ - public function showRunFile( $path ){ - print $this->term->color( 1 ) . - "Reading tests from \"$path\"..." . - $this->term->reset() . - "\n"; - } - - /** - * Insert a temporary test article - * @param string $name the title, including any prefix - * @param string $text the article text - * @param int $line the input line number, for reporting errors - */ - public function addArticle($name, $text, $line) { - $this->setupGlobals(); - $title = Title::newFromText( $name ); - if ( is_null($title) ) { - wfDie( "invalid title at line $line\n" ); - } - - $aid = $title->getArticleID( GAID_FOR_UPDATE ); - if ($aid != 0) { - wfDie( "duplicate article '$name' at line $line\n" ); - } - - $art = new Article($title); - $art->insertNewArticle($text, '', false, false ); - - $this->teardownGlobals(); - } - - /** - * Steal a callback function from the primary parser, save it for - * application to our scary parser. If the hook is not installed, - * die a painful dead to warn the others. - * @param string $name - */ - public function requireHook( $name ) { - global $wgParser; - $wgParser->firstCallInit( ); //make sure hooks are loaded. - if( isset( $wgParser->mTagHooks[$name] ) ) { - $this->hooks[$name] = $wgParser->mTagHooks[$name]; - } else { - wfDie( "This test suite requires the '$name' hook extension.\n" ); - } - } - - /** - * Steal a callback function from the primary parser, save it for - * application to our scary parser. If the hook is not installed, - * die a painful dead to warn the others. - * @param string $name - */ - private function requireFunctionHook( $name ) { - global $wgParser; - $wgParser->firstCallInit( ); //make sure hooks are loaded. - if( isset( $wgParser->mFunctionHooks[$name] ) ) { - $this->functionHooks[$name] = $wgParser->mFunctionHooks[$name]; - } else { - wfDie( "This test suite requires the '$name' function hook extension.\n" ); - } - } - - /* - * Run the "tidy" command on text if the $wgUseTidy - * global is true - * - * @param string $text the text to tidy - * @return string - * @static - */ - private function tidy( $text ) { - global $wgUseTidy; - if ($wgUseTidy) { - $text = Parser::tidy($text); - } - return $text; - } - - private function wellFormed( $text ) { - $html = - Sanitizer::hackDocType() . - '' . - $text . - ''; - - $parser = xml_parser_create( "UTF-8" ); - - # case folding violates XML standard, turn it off - xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, false ); - - if( !xml_parse( $parser, $html, true ) ) { - $err = xml_error_string( xml_get_error_code( $parser ) ); - $position = xml_get_current_byte_index( $parser ); - $fragment = $this->extractFragment( $html, $position ); - $this->mXmlError = "$err at byte $position:\n$fragment"; - xml_parser_free( $parser ); - return false; - } - xml_parser_free( $parser ); - return true; - } - - private function extractFragment( $text, $position ) { - $start = max( 0, $position - 10 ); - $before = $position - $start; - $fragment = '...' . - $this->term->color( 34 ) . - substr( $text, $start, $before ) . - $this->term->color( 0 ) . - $this->term->color( 31 ) . - $this->term->color( 1 ) . - substr( $text, $position, 1 ) . - $this->term->color( 0 ) . - $this->term->color( 34 ) . - substr( $text, $position + 1, 9 ) . - $this->term->color( 0 ) . - '...'; - $display = str_replace( "\n", ' ', $fragment ); - $caret = ' ' . - str_repeat( ' ', $before ) . - $this->term->color( 31 ) . - '^' . - $this->term->color( 0 ); - return "$display\n$caret"; - } -} - -class AnsiTermColorer { - function __construct() { - } - - /** - * Return ANSI terminal escape code for changing text attribs/color - * - * @param string $color Semicolon-separated list of attribute/color codes - * @return string - */ - public function color( $color ) { - global $wgCommandLineDarkBg; - $light = $wgCommandLineDarkBg ? "1;" : "0;"; - return "\x1b[{$light}{$color}m"; - } - - /** - * Return ANSI terminal escape code for restoring default text attributes - * - * @return string - */ - public function reset() { - return $this->color( 0 ); - } -} - -/* A colour-less terminal */ -class DummyTermColorer { - public function color( $color ) { - return ''; - } - - public function reset() { - return ''; - } -} - -class TestRecorder { - var $parent; - var $term; - - function __construct( $parent ) { - $this->parent = $parent; - $this->term = $parent->term; - } - - function start() { - $this->total = 0; - $this->success = 0; - } - - function record( $test, $result ) { - $this->total++; - $this->success += ($result ? 1 : 0); - } - - function end() { - // dummy - } - - function report() { - if( $this->total > 0 ) { - $this->reportPercentage( $this->success, $this->total ); - } else { - wfDie( "No tests found.\n" ); - } - } - - function reportPercentage( $success, $total ) { - $ratio = wfPercent( 100 * $success / $total ); - print $this->term->color( 1 ) . "Passed $success of $total tests ($ratio)... "; - if( $success == $total ) { - print $this->term->color( 32 ) . "ALL TESTS PASSED!"; - } else { - $failed = $total - $success ; - print $this->term->color( 31 ) . "$failed tests failed!"; - } - print $this->term->reset() . "\n"; - return ($success == $total); - } -} - -class DbTestPreviewer extends TestRecorder { - protected $lb; ///< Database load balancer - protected $db; ///< Database connection to the main DB - protected $curRun; ///< run ID number for the current run - protected $prevRun; ///< run ID number for the previous run, if any - protected $results; ///< Result array - - /** - * This should be called before the table prefix is changed - */ - function __construct( $parent ) { - parent::__construct( $parent ); - $this->lb = wfGetLBFactory()->newMainLB(); - // This connection will have the wiki's table prefix, not parsertest_ - $this->db = $this->lb->getConnection( DB_MASTER ); - } - - /** - * Set up result recording; insert a record for the run with the date - * and all that fun stuff - */ - function start() { - global $wgDBtype; - parent::start(); - - if( ! $this->db->tableExists( 'testrun' ) - or ! $this->db->tableExists( 'testitem' ) ) - { - print "WARNING> `testrun` table not found in database.\n"; - $this->prevRun = false; - } else { - // We'll make comparisons against the previous run later... - $this->prevRun = $this->db->selectField( 'testrun', 'MAX(tr_id)' ); - } - $this->results = array(); - } - - function record( $test, $result ) { - parent::record( $test, $result ); - $this->results[$test] = $result; - } - - function report() { - if( $this->prevRun ) { - // f = fail, p = pass, n = nonexistent - // codes show before then after - $table = array( - 'fp' => 'previously failing test(s) now PASSING! :)', - 'pn' => 'previously PASSING test(s) removed o_O', - 'np' => 'new PASSING test(s) :)', - - 'pf' => 'previously passing test(s) now FAILING! :(', - 'fn' => 'previously FAILING test(s) removed O_o', - 'nf' => 'new FAILING test(s) :(', - 'ff' => 'still FAILING test(s) :(', - ); - - $prevResults = array(); - - $res = $this->db->select( 'testitem', array( 'ti_name', 'ti_success' ), - array( 'ti_run' => $this->prevRun ), __METHOD__ ); - foreach ( $res as $row ) { - if ( !$this->parent->regex - || preg_match( "/{$this->parent->regex}/i", $row->ti_name ) ) - { - $prevResults[$row->ti_name] = $row->ti_success; - } - } - - $combined = array_keys( $this->results + $prevResults ); - - # Determine breakdown by change type - $breakdown = array(); - foreach ( $combined as $test ) { - if ( !isset( $prevResults[$test] ) ) { - $before = 'n'; - } elseif ( $prevResults[$test] == 1 ) { - $before = 'p'; - } else /* if ( $prevResults[$test] == 0 )*/ { - $before = 'f'; - } - if ( !isset( $this->results[$test] ) ) { - $after = 'n'; - } elseif ( $this->results[$test] == 1 ) { - $after = 'p'; - } else /*if ( $this->results[$test] == 0 ) */ { - $after = 'f'; - } - $code = $before . $after; - if ( isset( $table[$code] ) ) { - $breakdown[$code][$test] = $this->getTestStatusInfo( $test, $after ); - } - } - - # Write out results - foreach ( $table as $code => $label ) { - if( !empty( $breakdown[$code] ) ) { - $count = count($breakdown[$code]); - printf( "\n%4d %s\n", $count, $label ); - foreach ($breakdown[$code] as $differing_test_name => $statusInfo) { - print " * $differing_test_name [$statusInfo]\n"; - } - } - } - } else { - print "No previous test runs to compare against.\n"; - } - print "\n"; - parent::report(); - } - - /** - ** Returns a string giving information about when a test last had a status change. - ** Could help to track down when regressions were introduced, as distinct from tests - ** which have never passed (which are more change requests than regressions). - */ - private function getTestStatusInfo($testname, $after) { - - // If we're looking at a test that has just been removed, then say when it first appeared. - if ( $after == 'n' ) { - $changedRun = $this->db->selectField ( 'testitem', - 'MIN(ti_run)', - array( 'ti_name' => $testname ), - __METHOD__ ); - $appear = $this->db->selectRow ( 'testrun', - array( 'tr_date', 'tr_mw_version' ), - array( 'tr_id' => $changedRun ), - __METHOD__ ); - return "First recorded appearance: " - . date( "d-M-Y H:i:s", strtotime ( $appear->tr_date ) ) - . ", " . $appear->tr_mw_version; - } - - // Otherwise, this test has previous recorded results. - // See when this test last had a different result to what we're seeing now. - $conds = array( - 'ti_name' => $testname, - 'ti_success' => ($after == 'f' ? "1" : "0") ); - if ( $this->curRun ) { - $conds[] = "ti_run != " . $this->db->addQuotes ( $this->curRun ); - } - - $changedRun = $this->db->selectField ( 'testitem', 'MAX(ti_run)', $conds, __METHOD__ ); - - // If no record of ever having had a different result. - if ( is_null ( $changedRun ) ) { - if ($after == "f") { - return "Has never passed"; - } else { - return "Has never failed"; - } - } - - // Otherwise, we're looking at a test whose status has changed. - // (i.e. it used to work, but now doesn't; or used to fail, but is now fixed.) - // In this situation, give as much info as we can as to when it changed status. - $pre = $this->db->selectRow ( 'testrun', - array( 'tr_date', 'tr_mw_version' ), - array( 'tr_id' => $changedRun ), - __METHOD__ ); - $post = $this->db->selectRow ( 'testrun', - array( 'tr_date', 'tr_mw_version' ), - array( "tr_id > " . $this->db->addQuotes ( $changedRun) ), - __METHOD__, - array( "LIMIT" => 1, "ORDER BY" => 'tr_id' ) - ); - - if ( $post ) { - $postDate = date( "d-M-Y H:i:s", strtotime ( $post->tr_date ) ) . ", {$post->tr_mw_version}"; - } else { - $postDate = 'now'; - } - return ( $after == "f" ? "Introduced" : "Fixed" ) . " between " - . date( "d-M-Y H:i:s", strtotime ( $pre->tr_date ) ) . ", " . $pre->tr_mw_version - . " and $postDate"; - - } - - /** - * Commit transaction and clean up for result recording - */ - function end() { - $this->lb->commitMasterChanges(); - $this->lb->closeAll(); - parent::end(); - } - -} - -class DbTestRecorder extends DbTestPreviewer { - /** - * Set up result recording; insert a record for the run with the date - * and all that fun stuff - */ - function start() { - global $wgDBtype, $options; - $this->db->begin(); - - if( ! $this->db->tableExists( 'testrun' ) - or ! $this->db->tableExists( 'testitem' ) ) - { - print "WARNING> `testrun` table not found in database. Trying to create table.\n"; - if ($wgDBtype === 'postgres') - $this->db->sourceFile( dirname(__FILE__) . '/testRunner.postgres.sql' ); - elseif ($wgDBtype === 'oracle') - $this->db->sourceFile( dirname(__FILE__) . '/testRunner.ora.sql' ); - else - $this->db->sourceFile( dirname(__FILE__) . '/testRunner.sql' ); - echo "OK, resuming.\n"; - } - - parent::start(); - - $this->db->insert( 'testrun', - array( - 'tr_date' => $this->db->timestamp(), - 'tr_mw_version' => isset( $options['setversion'] ) ? - $options['setversion'] : SpecialVersion::getVersion(), - 'tr_php_version' => phpversion(), - 'tr_db_version' => $this->db->getServerVersion(), - 'tr_uname' => php_uname() - ), - __METHOD__ ); - if ($wgDBtype === 'postgres') - $this->curRun = $this->db->currentSequenceValue('testrun_id_seq'); - else - $this->curRun = $this->db->insertId(); - } - - /** - * Record an individual test item's success or failure to the db - * @param string $test - * @param bool $result - */ - function record( $test, $result ) { - parent::record( $test, $result ); - $this->db->insert( 'testitem', - array( - 'ti_run' => $this->curRun, - 'ti_name' => $test, - 'ti_success' => $result ? 1 : 0, - ), - __METHOD__ ); - } -} - -class RemoteTestRecorder extends TestRecorder { - function start() { - parent::start(); - $this->results = array(); - $this->ping( 'running' ); - } - - function record( $test, $result ) { - parent::record( $test, $result ); - $this->results[$test] = (bool)$result; - } - - function end() { - $this->ping( 'complete', $this->results ); - parent::end(); - } - - /** - * Inform a CodeReview instance that we've started or completed a test run... - * @param $remote array: info on remote target - * @param $status string: "running" - tell it we've started - * "complete" - provide test results array - * "abort" - something went horribly awry - * @param $data array of test name => true/false - */ - function ping( $status, $results=false ) { - global $wgParserTestRemote, $IP; - - $remote = $wgParserTestRemote; - $revId = SpecialVersion::getSvnRevision( $IP ); - $jsonResults = json_encode( $results ); - - if( !$remote ) { - print "Can't do remote upload without configuring \$wgParserTestRemote!\n"; - exit( 1 ); - } - - // Generate a hash MAC to validate our credentials - $message = array( - $remote['repo'], - $remote['suite'], - $revId, - $status, - ); - if( $status == "complete" ) { - $message[] = $jsonResults; - } - $hmac = hash_hmac( "sha1", implode( "|", $message ), $remote['secret'] ); - - $postData = array( - 'action' => 'codetestupload', - 'format' => 'json', - 'repo' => $remote['repo'], - 'suite' => $remote['suite'], - 'rev' => $revId, - 'status' => $status, - 'hmac' => $hmac, - ); - if( $status == "complete" ) { - $postData['results'] = $jsonResults; - } - $response = $this->post( $remote['api-url'], $postData ); - - if( $response === false ) { - print "CodeReview info upload failed to reach server.\n"; - exit( 1 ); - } - $responseData = json_decode( $response, true ); - if( !is_array( $responseData ) ) { - print "CodeReview API response not recognized...\n"; - wfDebug( "Unrecognized CodeReview API response: $response\n" ); - exit( 1 ); - } - if( isset( $responseData['error'] ) ) { - $code = $responseData['error']['code']; - $info = $responseData['error']['info']; - print "CodeReview info upload failed: $code $info\n"; - exit( 1 ); - } - } - - function post( $url, $data ) { - return Http::post( $url, array( 'postData' => $data) ); - } -} - -class TestFileIterator implements Iterator { - private $file; - private $fh; - private $parser; - private $index = 0; - private $test; - private $lineNum; - private $eof; - - function __construct( $file, $parser = null ) { - global $IP; - - $this->file = $file; - $this->fh = fopen($this->file, "rt"); - if( !$this->fh ) { - wfDie( "Couldn't open file '$file'\n" ); - } - - $this->parser = $parser; - - if( $this->parser ) $this->parser->showRunFile( wfRelativePath( $this->file, $IP ) ); - $this->lineNum = $this->index = 0; - } - - function setParser( ParserTest $parser ) { - $this->parser = $parser; - } - - function rewind() { - if(fseek($this->fh, 0)) { - wfDie( "Couldn't fseek to the start of '$filename'\n" ); - } - $this->index = 0; - $this->lineNum = 0; - $this->eof = false; - $this->readNextTest(); - - return true; - } - - function current() { - return $this->test; - } - - function key() { - return $this->index; - } - - function next() { - if($this->readNextTest()) { - $this->index++; - return true; - } else { - $this->eof = true; - } - } - - function valid() { - return $this->eof != true; - } - - function readNextTest() { - $data = array(); - $section = null; - - while( false !== ($line = fgets( $this->fh ) ) ) { - $this->lineNum++; - $matches = array(); - if( preg_match( '/^!!\s*(\w+)/', $line, $matches ) ) { - $section = strtolower( $matches[1] ); - if( $section == 'endarticle') { - if( !isset( $data['text'] ) ) { - wfDie( "'endarticle' without 'text' at line {$this->lineNum} of $filename\n" ); - } - if( !isset( $data['article'] ) ) { - wfDie( "'endarticle' without 'article' at line {$this->lineNum} of $filename\n" ); - } - if( $this->parser ) $this->parser->addArticle($this->parser->chomp($data['article']), $this->parser->chomp($data['text']), - $this->lineNum); - $data = array(); - $section = null; - continue; - } - if( $section == 'endhooks' ) { - if( !isset( $data['hooks'] ) ) { - wfDie( "'endhooks' without 'hooks' at line {$this->lineNum} of $filename\n" ); - } - foreach( explode( "\n", $data['hooks'] ) as $line ) { - $line = trim( $line ); - if( $line ) { - if( $this->parser ) $this->parser->requireHook( $line ); - } - } - $data = array(); - $section = null; - continue; - } - if( $section == 'endfunctionhooks' ) { - if( !isset( $data['functionhooks'] ) ) { - wfDie( "'endfunctionhooks' without 'functionhooks' at line {$this->lineNum} of $filename\n" ); - } - foreach( explode( "\n", $data['functionhooks'] ) as $line ) { - $line = trim( $line ); - if( $line ) { - if( $this->parser ) $this->parser->requireFunctionHook( $line ); - } - } - $data = array(); - $section = null; - continue; - } - if( $section == 'end' ) { - if( !isset( $data['test'] ) ) { - wfDie( "'end' without 'test' at line {$this->lineNum} of $filename\n" ); - } - if( !isset( $data['input'] ) ) { - wfDie( "'end' without 'input' at line {$this->lineNum} of $filename\n" ); - } - if( !isset( $data['result'] ) ) { - wfDie( "'end' without 'result' at line {$this->lineNum} of $filename\n" ); - } - if( !isset( $data['options'] ) ) { - $data['options'] = ''; - } - if (!isset( $data['config'] ) ) - $data['config'] = ''; - - if ( $this->parser && (preg_match('/\\bdisabled\\b/i', $data['options']) - || !preg_match("/{$this->parser->regex}/i", $data['test'])) && !$this->parser->runDisabled ) { - # disabled test - $data = array(); - $section = null; - continue; - } - if ( $this->parser && - preg_match('/\\bmath\\b/i', $data['options']) && !$this->parser->savedGlobals['wgUseTeX'] ) { - # don't run math tests if $wgUseTeX is set to false in LocalSettings - $data = array(); - $section = null; - continue; - } - - if( $this->parser ) { - $this->test = array( - 'test' => $this->parser->chomp( $data['test'] ), - 'input' => $this->parser->chomp( $data['input'] ), - 'result' => $this->parser->chomp( $data['result'] ), - 'options' => $this->parser->chomp( $data['options'] ), - 'config' => $this->parser->chomp( $data['config'] ) ); - } else { - $this->test['test'] = $data['test']; - } - return true; - } - if ( isset ($data[$section] ) ) { - wfDie( "duplicate section '$section' at line {$this->lineNum} of $filename\n" ); - } - $data[$section] = ''; - continue; - } - if( $section ) { - $data[$section] .= $line; - } - } - return false; - } -} \ No newline at end of file diff --git a/maintenance/parserTests.php b/maintenance/parserTests.php deleted file mode 100644 index 78530716..00000000 --- a/maintenance/parserTests.php +++ /dev/null @@ -1,88 +0,0 @@ - -# http://www.mediawiki.org/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# http://www.gnu.org/copyleft/gpl.html - -/** - * @file - * @ingroup Maintenance - */ - -/** */ -require('parserTests.inc'); - -if( isset( $options['help'] ) ) { - echo << Run test cases from a custom file instead of parserTests.txt - --record Record tests in database - --compare Compare with recorded results, without updating the database. - --setversion When using --record, set the version string to use (useful - with git-svn so that you can get the exact revision) - --keep-uploads Re-use the same upload directory for each test, don't delete it - --fuzz Do a fuzz test instead of a normal test - --seed Start the fuzz test from the specified seed - --help Show this help message - --run-disabled run disabled tests - --upload Upload test results to remote wiki (per \$wgParserTestRemote) - -ENDS; - exit( 0 ); -} - -# Cases of weird db corruption were encountered when running tests on earlyish -# versions of SQLite -if ( $wgDBtype == 'sqlite' ) { - $db = wfGetDB( DB_MASTER ); - $version = $db->getServerVersion(); - if ( version_compare( $version, '3.6' ) < 0 ) { - die( "Parser tests require SQLite version 3.6 or later, you have $version\n" ); - } -} - -# There is a convention that the parser should never -# refer to $wgTitle directly, but instead use the title -# passed to it. -$wgTitle = Title::newFromText( 'Parser test script do not use' ); -$tester = new ParserTest(); - -if( isset( $options['file'] ) ) { - $files = array( $options['file'] ); -} else { - // Default parser tests and any set from extensions or local config - $files = $wgParserTestFiles; -} - -# Print out software version to assist with locating regressions -$version = SpecialVersion::getVersion(); -echo( "This is MediaWiki version {$version}.\n\n" ); - -if ( isset( $options['fuzz'] ) ) { - $tester->fuzzTest( $files ); -} else { - $ok = $tester->runTestsFromFiles( $files ); - exit ($ok ? 0 : 1); -} diff --git a/maintenance/parserTests.txt b/maintenance/parserTests.txt deleted file mode 100644 index 4515943a..00000000 --- a/maintenance/parserTests.txt +++ /dev/null @@ -1,7773 +0,0 @@ -# MediaWiki Parser test cases -# Some taken from http://meta.wikimedia.org/wiki/Parser_testing -# All (C) their respective authors and released under the GPL -# -# The syntax should be fairly self-explanatory. -# -# Currently supported test options: -# One of the following three: -# -# (default) generate HTML output -# pst apply pre-save transform -# msg apply message transform -# -# Plus any combination of these: -# -# cat add category links -# ill add inter-language links -# subpage enable subpages (disabled by default) -# noxml don't check for XML well formdness -# title=[[XXX]] run test using article title XXX -# language=XXX set content language to XXX for this test -# variant=XXX set the variant of language for this test (eg zh-tw) -# disabled do not run test -# showtitle make the first line the title -# comment run through Linker::formatComment() instead of main parser -# local format section links in edit comment text as local links -# -# For testing purposes, temporary articles can created: -# !!article / NAMESPACE:TITLE / !!text / ARTICLE TEXT / !!endarticle -# where '/' denotes a newline. - -# This is the standard article assumed to exist. -!! article -Main Page -!! text -blah blah -!! endarticle - -!!article -Template:Foo -!!text -FOO -!!endarticle - -!! article -Template:Blank -!! text -!! endarticle - -!! article -Template:! -!! text -| -!! endarticle - -### -### Basic tests -### -!! test -Blank input -!! input -!! result -!! end - - -!! test -Simple paragraph -!! input -This is a simple paragraph. -!! result -

    This is a simple paragraph. -

    -!! end - -!! test -Simple list -!! input -* Item 1 -* Item 2 -!! result -
    • Item 1 -
    • Item 2 -
    - -!! end - -!! test -Italics and bold -!! input -* plain -* plain''italic''plain -* plain''italic''plain''italic''plain -* plain'''bold'''plain -* plain'''bold'''plain'''bold'''plain -* plain''italic''plain'''bold'''plain -* plain'''bold'''plain''italic''plain -* plain''italic'''bold-italic'''italic''plain -* plain'''bold''bold-italic''bold'''plain -* plain'''''bold-italic'''italic''plain -* plain'''''bold-italic''bold'''plain -* plain''italic'''bold-italic'''''plain -* plain'''bold''bold-italic'''''plain -* plain l'''italic''plain -* plain l''''bold''' plain -!! result -
    • plain -
    • plainitalicplain -
    • plainitalicplainitalicplain -
    • plainboldplain -
    • plainboldplainboldplain -
    • plainitalicplainboldplain -
    • plainboldplainitalicplain -
    • plainitalicbold-italicitalicplain -
    • plainboldbold-italicboldplain -
    • plainbold-italicitalicplain -
    • plainbold-italicboldplain -
    • plainitalicbold-italicplain -
    • plainboldbold-italicplain -
    • plain l'italicplain -
    • plain l'bold plain -
    - -!! end - -### -### test cases -### - -!! test - unordered list -!! input -* This is not an unordered list item. -!! result -

    * This is not an unordered list item. -

    -!! end - -!! test - spacing -!! input -Lorem ipsum dolor - -sed abit. - sed nullum. - -:and a colon - -!! result -

    Lorem ipsum dolor - -sed abit. - sed nullum. - -:and a colon - -

    -!! end - -!! test -nowiki 3 -!! input -:There is not nowiki. -:There is nowiki. - -#There is not nowiki. -#There is nowiki. - -*There is not nowiki. -*There is nowiki. -!! result -
    There is not nowiki. -
    There is nowiki. -
    -
    1. There is not nowiki. -
    2. There is nowiki. -
    -
    • There is not nowiki. -
    • There is nowiki. -
    - -!! end - - -### -### Comments -### -!! test -Comment test 1 -!! input - asdf - -!! result -
    asdf
    -
    - -!! end - -!! test -Comment test 2 -!! input -asdf - -jkl -!! result -

    asdf -jkl -

    -!! end - -!! test -Comment test 3 -!! input -asdf - - -jkl -!! result -

    asdf -jkl -

    -!! end - -!! test -Comment test 4 -!! input -asdfjkl -!! result -

    asdfjkl -

    -!! end - -!! test -Comment spacing -!! input -a - b -c -!! result -

    a -

    -
     b 
    -
    -

    c -

    -!! end - -!! test -Comment whitespace -!! input - -!! result - -!! end - -!! test -Comment semantics and delimiters -!! input - -!! result - -!! end - -!! test -Comment semantics and delimiters, redux -!! input - -!! result - -!! end - -!! test -Comment semantics and delimiters: directors cut -!! input ---> -!! result -

    --> -

    -!! end - -!! test -Comment semantics: nesting -!! input ---> -!! result -

    --> -

    -!! end - -!! test -Comment semantics: unclosed comment at end -!! input -oo}} -!! result -

    FOO -

    -!! end - -!! test -Comment on its own line post-expand -!! input -a -{{blank}} -b -!! result -

    a -

    b -

    -!! end - -### -### Preformatted text -### -!! test -Preformatted text -!! input - This is some - Preformatted text - With ''italic'' - And '''bold''' - And a [[Main Page|link]] -!! result -
    This is some
    -Preformatted text
    -With italic
    -And bold
    -And a link
    -
    -!! end - -!! test -
     with  inside (compatibility with 1.6 and earlier)
    -!! input
    -
    
    -
    -
    -
    -
    -!! result -
    -<b>
    -<cite>
    -<em>
    -
    - -!! end - -!! test -Regression with preformatted in
    -!! input -
    - Blah -
    -!! result -
    -
    Blah
    -
    -
    - -!! end - -!! test -
     with attributes (bug 3202)
    -!! input
    -
    Bluescreen of WikiDeath
    -!! result -
    Bluescreen of WikiDeath
    - -!! end - -!! test -
     with width attribute (bug 3202)
    -!! input
    -
    Narrow screen goodies
    -!! result -
    Narrow screen goodies
    - -!! end - -!! test -
     with forbidden attribute (bug 3202)
    -!! input
    -
    Narrow screen goodies
    -!! result -
    Narrow screen goodies
    - -!! end - -!! test -
     with forbidden attribute values (bug 3202)
    -!! input
    -
    Narrow screen goodies
    -!! result -
    Narrow screen goodies
    - -!! end - -### -### Definition lists -### -!! test -Simple definition -!! input -; name : Definition -!! result -
    name 
    Definition -
    - -!! end - -!! test -Definition list for indentation only -!! input -: Indented text -!! result -
    Indented text -
    - -!! end - -!! test -Definition list with no space -!! input -;name:Definition -!! result -
    name
    Definition -
    - -!!end - -!! test -Definition list with URL link -!! input -; http://example.com/ : definition -!! result -
    http://example.com/ 
    definition -
    - -!! end - -!! test -Definition list with bracketed URL link -!! input -;[http://www.example.com/ Example]:Something about it -!! result -
    Example
    Something about it -
    - -!! end - -!! test -Definition list with wikilink containing colon -!! input -; [[Help:FAQ]]: The least-read page on Wikipedia -!! result -
    Help:FAQ
    The least-read page on Wikipedia -
    - -!! end - -# At Brion's and JeLuF's insistence... :) -!! test -Definition list with news link containing colon -!! input -; news:alt.wikipedia.rox: This isn't even a real newsgroup! -!! result -
    news:alt.wikipedia.rox
    This isn't even a real newsgroup! -
    - -!! end - -!! test -Malformed definition list with colon -!! input -; news:alt.wikipedia.rox -- don't crash or enter an infinite loop -!! result -
    news:alt.wikipedia.rox -- don't crash or enter an infinite loop -
    - -!! end - -!! test -Definition lists: colon in external link text -!! input -; [http://www.wikipedia2.org/ Wikipedia : The Next Generation]: OK, I made that up -!! result -
    Wikipedia : The Next Generation
    OK, I made that up -
    - -!! end - -!! test -Definition lists: colon in HTML attribute -!! input -;bold -!! result -
    bold -
    - -!! end - - -!! test -Definition lists: self-closed tag -!! input -;one
    two : two-line fun -!! result -
    one
    two 
    two-line fun -
    - -!! end - - -### -### External links -### -!! test -External links: non-bracketed -!! input -Non-bracketed: http://example.com -!! result -

    Non-bracketed: http://example.com -

    -!! end - -!! test -External links: numbered -!! input -Numbered: [http://example.com] -Numbered: [http://example.net] -Numbered: [http://example.com] -!! result -

    Numbered: [1] -Numbered: [2] -Numbered: [3] -

    -!!end - -!! test -External links: specified text -!! input -Specified text: [http://example.com link] -!! result -

    Specified text: link -

    -!!end - -!! test -External links: trail -!! input -Linktrails should not work for external links: [http://example.com link]s -!! result -

    Linktrails should not work for external links: links -

    -!! end - -!! test -External links: dollar sign in URL -!! input -http://example.com/1$2345 -!! result -

    http://example.com/1$2345 -

    -!! end - -!! test -External links: dollar sign in URL (named) -!! input -[http://example.com/1$2345] -!! result -

    [1] -

    -!!end - -!! test -External links: open square bracket forbidden in URL (bug 4377) -!! input -http://example.com/1[2345 -!! result -

    http://example.com/1[2345 -

    -!! end - -!! test -External links: open square bracket forbidden in URL (named) (bug 4377) -!! input -[http://example.com/1[2345] -!! result -

    [2345 -

    -!!end - -!! test -External links: nowiki in URL link text (bug 6230) -!!input -[http://example.com/ ''example site''] -!! result -

    ''example site'' -

    -!! end - -!! test -External links: newline forbidden in text (bug 6230 regression check) -!! input -[http://example.com/ first -second] -!! result -

    [http://example.com/ first -second] -

    -!!end - -!! test -External image -!! input -External image: http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png -!! result -

    External image: Ncwikicol.png -

    -!! end - -!! test -External image from https -!! input -External image from https: https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png -!! result -

    External image from https: Ncwikicol.png -

    -!! end - -!! test -Link to non-http image, no img tag -!! input -Link to non-http image, no img tag: ftp://example.com/test.jpg -!! result -

    Link to non-http image, no img tag: ftp://example.com/test.jpg -

    -!! end - -!! test -External links: terminating separator -!! input -Terminating separator: http://example.com/thing, -!! result -

    Terminating separator: http://example.com/thing, -

    -!! end - -!! test -External links: intervening separator -!! input -Intervening separator: http://example.com/1,2,3 -!! result -

    Intervening separator: http://example.com/1,2,3 -

    -!! end - -!! test -External links: old bug with URL in query -!! input -Old bug with URL in query: [http://example.com/thing?url=http://example.com link] -!! result -

    Old bug with URL in query: link -

    -!! end - -!! test -External links: old URL-in-URL bug, mixed protocols -!! input -And again with mixed protocols: [ftp://example.com?url=http://example.com link] -!! result -

    And again with mixed protocols: link -

    -!!end - -!! test -External links: URL in text -!! input -URL in text: [http://example.com http://example.com] -!! result -

    URL in text: http://example.com -

    -!! end - -!! test -External links: Clickable images -!! input -ja-style clickable images: [http://example.com http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png] -!! result -

    ja-style clickable images: Ncwikicol.png -

    -!!end - -!! test -External links: raw ampersand -!! input -Old & use: http://x&y -!! result -

    Old & use: http://x&y -

    -!! end - -!! test -External links: encoded ampersand -!! input -Old & use: http://x&y -!! result -

    Old & use: http://x&y -

    -!! end - -!! test -External links: encoded equals (bug 6102) -!! input -http://example.com/?foo=bar -!! result -

    http://example.com/?foo=bar -

    -!! end - -!! test -External links: [raw ampersand] -!! input -Old & use: [http://x&y] -!! result -

    Old & use: [1] -

    -!! end - -!! test -External links: [encoded ampersand] -!! input -Old & use: [http://x&y] -!! result -

    Old & use: [1] -

    -!! end - -!! test -External links: [encoded equals] (bug 6102) -!! input -[http://example.com/?foo=bar] -!! result -

    [1] -

    -!! end - -!! test -External links: [IDN ignored character reference in hostname; strip it right off] -!! input -[http://e‌xample.com/] -!! result -

    [1] -

    -!! end - -!! test -External links: IDN ignored character reference in hostname; strip it right off -!! input -http://e‌xample.com/ -!! result -

    http://example.com/ -

    -!! end - -!! test -External links: www.jpeg.org (bug 554) -!! input -http://www.jpeg.org -!!result -

    http://www.jpeg.org -

    -!! end - -!! test -External links: URL within URL (original bug 2) -!! input -[http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp] -!! result -

    [1] -

    -!! end - -!! test -BUG 361: URL inside bracketed URL -!! input -[http://www.example.com/foo http://www.example.com/bar] -!! result -

    http://www.example.com/bar -

    -!! end - -!! test -BUG 361: URL within URL, not bracketed -!! input -http://www.example.com/foo?=http://www.example.com/bar -!! result -

    http://www.example.com/foo?=http://www.example.com/bar -

    -!! end - -!! test -BUG 289: ">"-token in URL-tail -!! input -http://www.example.com/ -!! result -

    http://www.example.com/<hello> -

    -!!end - -!! test -BUG 289: literal ">"-token in URL-tail -!! input -http://www.example.com/html -!! result -

    http://www.example.com/html -

    -!!end - -!! test -BUG 289: ">"-token in bracketed URL -!! input -[http://www.example.com/ stuff] -!! result -

    <hello> stuff -

    -!!end - -!! test -BUG 289: literal ">"-token in bracketed URL -!! input -[http://www.example.com/html stuff] -!! result -

    html stuff -

    -!!end - -!! test -BUG 289: literal double quote at end of URL -!! input -http://www.example.com/"hello" -!! result -

    http://www.example.com/"hello" -

    -!!end - -!! test -BUG 289: literal double quote in bracketed URL -!! input -[http://www.example.com/"hello" stuff] -!! result -

    "hello" stuff -

    -!!end - -!! test -External links: invalid character -Fixme: the missing char seems to have gone missing -!! options -disabled -!! input -[http://www.example.com test] -!! result -

    [http://www.example.com test] -

    -!! end - -!! test -External links: multiple legal whitespace is fine, Magnus. Don't break it please. (bug 5081) -!! input -[http://www.example.com test] -!! result -

    test -

    -!! end - -!! test -External links: wiki links within external link (Bug 3695) -!! input -[http://example.com [[wikilink]] embedded in ext link] -!! result -

    wikilink embedded in ext link -

    -!! end - -!! test -BUG 787: Links with one slash after the url protocol are invalid -!! input -http:/example.com - -[http:/example.com title] -!! result -

    http:/example.com -

    [http:/example.com title] -

    -!! end - -!! test -Bug 2702: Mismatched , and tags are invalid -!! input -''[http://example.com text''] -[http://example.com '''text]''' -''Something [http://example.com in italic''] -''Something [http://example.com mixed''''', even bold]''' -'''''Now [http://example.com both'''''] -!! result -

    text -text -Something in italic -Something mixed, even bold -Now both -

    -!! end - - -!! test -Bug 4781: %26 in URL -!! input -http://www.example.com/?title=AT%26T -!! result -

    http://www.example.com/?title=AT%26T -

    -!! end - -!! test -Bug 4781, 5267: %26 in URL -!! input -http://www.example.com/?title=100%25_Bran -!! result -

    http://www.example.com/?title=100%25_Bran -

    -!! end - -!! test -Bug 4781, 5267: %28, %29 in URL -!! input -http://www.example.com/?title=Ben-Hur_%281959_film%29 -!! result -

    http://www.example.com/?title=Ben-Hur_%281959_film%29 -

    -!! end - - -!! test -Bug 4781: %26 in autonumber URL -!! input -[http://www.example.com/?title=AT%26T] -!! result -

    [1] -

    -!! end - -!! test -Bug 4781, 5267: %26 in autonumber URL -!! input -[http://www.example.com/?title=100%25_Bran] -!! result -

    [1] -

    -!! end - -!! test -Bug 4781, 5267: %28, %29 in autonumber URL -!! input -[http://www.example.com/?title=Ben-Hur_%281959_film%29] -!! result -

    [1] -

    -!! end - - -!! test -Bug 4781: %26 in bracketed URL -!! input -[http://www.example.com/?title=AT%26T link] -!! result -

    link -

    -!! end - -!! test -Bug 4781, 5267: %26 in bracketed URL -!! input -[http://www.example.com/?title=100%25_Bran link] -!! result -

    link -

    -!! end - -!! test -Bug 4781, 5267: %28, %29 in bracketed URL -!! input -[http://www.example.com/?title=Ben-Hur_%281959_film%29 link] -!! result -

    link -

    -!! end - -!! test -External link containing double-single-quotes in text '' (bug 4598 sanity check) -!! input -Some [http://example.com/ pretty ''italics'' and stuff]! -!! result -

    Some pretty italics and stuff! -

    -!! end - -!! test -External link containing double-single-quotes in text embedded in italics (bug 4598 sanity check) -!! input -''Some [http://example.com/ pretty ''italics'' and stuff]!'' -!! result -

    Some pretty italics and stuff! -

    -!! end - -!! test -URL-encoding in URL functions (single parameter) -!! input -{{localurl:Some page|amp=&}} -!! result -

    /index.php?title=Some_page&amp=& -

    -!! end - -!! test -URL-encoding in URL functions (multiple parameters) -!! input -{{localurl:Some page|q=?&=&}} -!! result -

    /index.php?title=Some_page&q=?&amp=& -

    -!! end - -### -### Quotes -### - -!! test -Quotes -!! input -Normal text. '''Bold text.''' Normal text. ''Italic text.'' - -Normal text. '''''Bold italic text.''''' Normal text. -!!result -

    Normal text. Bold text. Normal text. Italic text. -

    Normal text. Bold italic text. Normal text. -

    -!! end - - -!! test -Unclosed and unmatched quotes -!! input -'''''Bold italic text '''with bold deactivated''' in between.''''' - -'''''Bold italic text ''with italic deactivated'' in between.''''' - -'''Bold text.. - -..spanning two paragraphs (should not work).''' - -'''Bold tag left open - -''Italic tag left open - -Normal text. - - -'''This year''''s election ''should'' beat '''last year''''s. - -''Tom'''s car is bigger than ''Susan'''s. -!! result -

    Bold italic text with bold deactivated in between. -

    Bold italic text with italic deactivated in between. -

    Bold text.. -

    ..spanning two paragraphs (should not work). -

    Bold tag left open -

    Italic tag left open -

    Normal text. -

    This year's election should beat last year's. -

    Toms car is bigger than Susans. -

    -!! end - -### -### Tables -### -### some content taken from http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide:_Using_tables -### - -# This should not produce
    as
    -# is the bare minimun required by the spec, see: -# http://www.w3.org/TR/xhtml-modularization/dtd_module_defs.html#a_module_Basic_Tables -!! test -A table with no data. -!! input -{||} -!! result -!! end - -# A table with nothing but a caption is invalid XHTML, we might want to render -# this as

    caption

    -!! test -A table with nothing but a caption -!! input -{| -|+ caption -|} -!! result - -
    caption -
    - -!! end - -!! test -Simple table -!! input -{| -| 1 || 2 -|- -| 3 || 4 -|} -!! result - - - - -
    1 2 -
    3 4 -
    - -!! end - -!! test -Multiplication table -!! input -{| border="1" cellpadding="2" -|+Multiplication table -|- -! × !! 1 !! 2 !! 3 -|- -! 1 -| 1 || 2 || 3 -|- -! 2 -| 2 || 4 || 6 -|- -! 3 -| 3 || 6 || 9 -|- -! 4 -| 4 || 8 || 12 -|- -! 5 -| 5 || 10 || 15 -|} -!! result - - - - - - - - - - - - - -
    Multiplication table -
    × 1 2 3 -
    1 - 1 2 3 -
    2 - 2 4 6 -
    3 - 3 6 9 -
    4 - 4 8 12 -
    5 - 5 10 15 -
    - -!! end - -!! test -Table rowspan -!! input -{| align=right border=1 -| Cell 1, row 1 -|rowspan=2| Cell 2, row 1 (and 2) -| Cell 3, row 1 -|- -| Cell 1, row 2 -| Cell 3, row 2 -|} -!! result - - - - -
    Cell 1, row 1 - Cell 2, row 1 (and 2) - Cell 3, row 1 -
    Cell 1, row 2 - Cell 3, row 2 -
    - -!! end - -!! test -Nested table -!! input -{| border=1 -| α -| -{| bgcolor=#ABCDEF border=2 -|nested -|- -|table -|} -|the original table again -|} -!! result - - -
    α - - - - - -
    nested -
    table -
    -
    the original table again -
    - -!! end - -!! test -Invalid attributes in table cell (bug 1830) -!! input -{| -|Cell:|broken -|} -!! result - - -
    broken -
    - -!! end - - -# FIXME: It's not clear at all that this is the result we want, but the actual -# output right now is invalid XML, so clearly something is wrong. The result -# specified here is now valid XML, which is an improvement . . . -!! test -Table security: embedded pipes (http://lists.wikimedia.org/mailman/htdig/wikitech-l/2006-April/022293.html) -!! options -disabled -!! input -{| -| |[ftp://|x||]" onmouseover="alert(document.cookie)">test -!! result - - - - -
    [1]" onmouseover="alert(document.cookie)">test -
    - -!! end - - -### -### Internal links -### -!! test -Plain link, capitalized -!! input -[[Main Page]] -!! result -

    Main Page -

    -!! end - -!! test -Plain link, uncapitalized -!! input -[[main Page]] -!! result -

    main Page -

    -!! end - -!! test -Piped link -!! input -[[Main Page|The Main Page]] -!! result -

    The Main Page -

    -!! end - -!! test -Broken link -!! input -[[Zigzagzogzagzig]] -!! result -

    Zigzagzogzagzig -

    -!! end - -!! test -Broken link with fragment -!! input -[[Zigzagzogzagzig#zug]] -!! result -

    Zigzagzogzagzig#zug -

    -!! end - -!! test -Special page link with fragment -!! input -[[Special:Version#anchor]] -!! result -

    Special:Version#anchor -

    -!! end - -!! test -Nonexistent special page link with fragment -!! input -[[Special:ThisNameWillHopefullyNeverBeUsed#anchor]] -!! result -

    Special:ThisNameWillHopefullyNeverBeUsed#anchor -

    -!! end - -!! test -Link with prefix -!! input -xxx[[main Page]], xxx[[Main Page]], Xxx[[main Page]] XXX[[main Page]], XXX[[Main Page]] -!! result -

    xxxmain Page, xxxMain Page, Xxxmain Page XXXmain Page, XXXMain Page -

    -!! end - -!! test -Link with suffix -!! input -[[Main Page]]xxx, [[Main Page]]XXX, [[Main Page]]!!! -!! result -

    Main Pagexxx, Main PageXXX, Main Page!!! -

    -!! end - -!! test -Link with 3 brackets -!! input -[[[main page]]] -!! result -

    [[[main page]]] -

    -!! end - -!! test -Piped link with 3 brackets -!! input -[[[main page|the main page]]] -!! result -

    [[[main page|the main page]]] -

    -!! end - -!! test -Link with multiple pipes -!! input -[[Main Page|The|Main|Page]] -!! result -

    The|Main|Page -

    -!! end - -!! test -Link to namespaces -!! input -[[Talk:Parser testing]], [[Meta:Disclaimers]] -!! result -

    Talk:Parser testing, Meta:Disclaimers -

    -!! end - -!! test -Piped link to namespace -!! input -[[Meta:Disclaimers|The disclaimers]] -!! result -

    The disclaimers -

    -!! end - -!! test -Link containing } -!! input -[[Usually caused by a typo (oops}]] -!! result -

    [[Usually caused by a typo (oops}]] -

    -!! end - -!! test -Link containing % (not as a hex sequence) -!! input -[[7% Solution]] -!! result -

    7% Solution -

    -!! end - -!! test -Link containing % as a single hex sequence interpreted to char -!! input -[[7%25 Solution]] -!! result -

    7% Solution -

    -!!end - -!! test -Link containing % as a double hex sequence interpreted to hex sequence -!! input -[[7%2525 Solution]] -!! result -

    [[7%2525 Solution]] -

    -!!end - -!! test -Link containing "#<" and "#>" % as a hex sequences- these are valid section anchors -Example for such a section: == < == -!! input -[[%23%3c]][[%23%3e]] -!! result -

    #<#> -

    -!! end - -!! test -Link containing "<#" and ">#" as a hex sequences -!! input -[[%3c%23]][[%3e%23]] -!! result -

    [[%3c%23]][[%3e%23]] -

    -!! end - -!! test -Link containing double-single-quotes '' (bug 4598) -!! options -disabled -!! input -[[Lista d''e paise d''o munno]] -!! result -

    Lista d''e paise d''o munno -

    -!! end - -!! test -Link containing double-single-quotes '' in text (bug 4598 sanity check) -!! input -Some [[Link|pretty ''italics'' and stuff]]! -!! result -

    Some pretty italics and stuff! -

    -!! end - -!! test -Link containing double-single-quotes '' in text embedded in italics (bug 4598 sanity check) -!! input -''Some [[Link|pretty ''italics'' and stuff]]! -!! result -

    Some pretty italics and stuff! -

    -!! end - -!! test -Plain link to URL -!! input -[[http://www.example.com]] -!! result -

    [[1]] -

    -!! end - -# I'm fairly sure the expected result here is wrong. -# We want these to be URL links, not pseudo-pages with URLs for titles.... -# However the current output is also pretty screwy. -# -# ---- -# I'm changing it to match the current output--it arguably makes more -# sense in the light of the test above. Old expected result was: -#

    Piped link to URL: an example URL -#

    -# But I think this test is bordering on "garbage in, garbage out" anyway. -# -- wtm -!! test -Piped link to URL -!! input -Piped link to URL: [[http://www.example.com|an example URL]] -!! result -

    Piped link to URL: [example URL] -

    -!! end - -!! test -BUG 2: [[page|http://url/]] should link to page, not http://url/ -!! input -[[Main Page|http://url/]] -!! result -

    http://url/ -

    -!! end - -!! test -BUG 337: Escaped self-links should be bold -!! options -title=[[Bug462]] -!! input -[[Bug462]] [[Bug462]] -!! result -

    Bug462 Bug462 -

    -!! end - -!! test -Self-link to section should not be bold -!! options -title=[[Main Page]] -!! input -[[Main Page#section]] -!! result -

    Main Page#section -

    -!! end - -!! article -00 -!! text -This is 00. -!! endarticle - -!!test -Self-link to numeric title -!!options -title=[[0]] -!!input -[[0]] -!!result -

    0 -

    -!!end - -!!test -Link to numeric-equivalent title -!!options -title=[[0]] -!!input -[[00]] -!!result -

    00 -

    -!!end - -!! test - inside a link -!! input -[[Main Page]] [[Main Page|the main page [it's not very good]]] -!! result -

    [[Main Page]] the main page [it's not very good] -

    -!! end - -!! test -Non-breaking spaces in title -!! input -[[  Main   Page  ]] -!! result -

      Main   Page   -

    -!!end - - -### -### Interwiki links (see maintenance/interwiki.sql) -### - -!! test -Inline interwiki link -!! input -[[MeatBall:SoftSecurity]] -!! result -

    MeatBall:SoftSecurity -

    -!! end - -!! test -Inline interwiki link with empty title (bug 2372) -!! input -[[MeatBall:]] -!! result -

    MeatBall: -

    -!! end - -!! test -Interwiki link encoding conversion (bug 1636) -!! input -*[[Wikipedia:ro:Olteniţa]] -*[[Wikipedia:ro:Olteniţa]] -!! result - - -!! end - -!! test -Interwiki link with fragment (bug 2130) -!! input -[[MeatBall:SoftSecurity#foo]] -!! result -

    MeatBall:SoftSecurity#foo -

    -!! end - -!! test -Interlanguage link -!! input -Blah blah blah -[[zh:Chinese]] -!!result -

    Blah blah blah -

    -!! end - -!! test -Double interlanguage link -!! input -Blah blah blah -[[es:Spanish]] -[[zh:Chinese]] -!!result -

    Blah blah blah -

    -!! end - -!! test -Interlanguage link, with prefix links -!! options -language=ln -!! input -Blah blah blah -[[zh:Chinese]] -!!result -

    Blah blah blah -

    -!! end - -!! test -Double interlanguage link, with prefix links (bug 8897) -!! options -language=ln -!! input -Blah blah blah -[[es:Spanish]] -[[zh:Chinese]] -!!result -

    Blah blah blah -

    -!! end - - -## -## XHTML tidiness -### - -!! test -
    to
    -!! input -1
    2
    3 -!! result -

    1
    2
    3 -

    -!! end - -!! test -Incorrecly removing closing slashes from correctly formed XHTML -!! input -
    -!! result -


    -

    -!! end - -!! test -Failing to transform badly formed HTML into correct XHTML -!! input -
    -
    -
    -!! result -


    -
    -
    -

    -!!end - -!! test -Horizontal ruler (should it add that extra space?) -!! input -
    -
    -foo
    bar -!! result -
    -
    -foo
    bar - -!! end - -### -### Block-level elements -### -!! test -Common list -!! input -*Common list -* item 2 -*item 3 -!! result -
    • Common list -
    • item 2 -
    • item 3 -
    - -!! end - -!! test -Numbered list -!! input -#Numbered list -#item 2 -# item 3 -!! result -
    1. Numbered list -
    2. item 2 -
    3. item 3 -
    - -!! end - -!! test -Mixed list -!! input -*Mixed list -*# with numbers -** and bullets -*# and numbers -*bullets again -**bullet level 2 -***bullet level 3 -***#Number on level 4 -**bullet level 2 -**#Number on level 3 -**#Number on level 3 -*#number level 2 -*Level 1 -!! result -
    • Mixed list -
      1. with numbers -
      -
      • and bullets -
      -
      1. and numbers -
      -
    • bullets again -
      • bullet level 2 -
        • bullet level 3 -
          1. Number on level 4 -
          -
        -
      • bullet level 2 -
        1. Number on level 3 -
        2. Number on level 3 -
        -
      -
      1. number level 2 -
      -
    • Level 1 -
    - -!! end - -!! test -List items are not parsed correctly following a
     block (bug 785)
    -!! input
    -* 
    foo
    -*
    bar
    -* zar -!! result -
    • foo
      -
    • bar
      -
    • zar -
    - -!! end - -### -### Magic Words -### - -!! test -Magic Word: {{CURRENTDAY}} -!! input -{{CURRENTDAY}} -!! result -

    1 -

    -!! end - -!! test -Magic Word: {{CURRENTDAY2}} -!! input -{{CURRENTDAY2}} -!! result -

    01 -

    -!! end - -!! test -Magic Word: {{CURRENTDAYNAME}} -!! input -{{CURRENTDAYNAME}} -!! result -

    Thursday -

    -!! end - -!! test -Magic Word: {{CURRENTDOW}} -!! input -{{CURRENTDOW}} -!! result -

    4 -

    -!! end - -!! test -Magic Word: {{CURRENTMONTH}} -!! input -{{CURRENTMONTH}} -!! result -

    01 -

    -!! end - -!! test -Magic Word: {{CURRENTMONTHABBREV}} -!! input -{{CURRENTMONTHABBREV}} -!! result -

    Jan -

    -!! end - -!! test -Magic Word: {{CURRENTMONTHNAME}} -!! input -{{CURRENTMONTHNAME}} -!! result -

    January -

    -!! end - -!! test -Magic Word: {{CURRENTMONTHNAMEGEN}} -!! input -{{CURRENTMONTHNAMEGEN}} -!! result -

    January -

    -!! end - -!! test -Magic Word: {{CURRENTTIME}} -!! input -{{CURRENTTIME}} -!! result -

    00:02 -

    -!! end - -!! test -Magic Word: {{CURRENTWEEK}} (@bug 4594) -!! input -{{CURRENTWEEK}} -!! result -

    1 -

    -!! end - -!! test -Magic Word: {{CURRENTYEAR}} -!! input -{{CURRENTYEAR}} -!! result -

    1970 -

    -!! end - -!! test -Magic Word: {{FULLPAGENAME}} -!! options -title=[[User:Ævar Arnfjörð Bjarmason]] -!! input -{{FULLPAGENAME}} -!! result -

    User:Ævar Arnfjörð Bjarmason -

    -!! end - -!! test -Magic Word: {{FULLPAGENAMEE}} -!! options -title=[[User:Ævar Arnfjörð Bjarmason]] -!! input -{{FULLPAGENAMEE}} -!! result -

    User:%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason -

    -!! end - -!! test -Magic Word: {{NAMESPACE}} -!! options -title=[[User:Ævar Arnfjörð Bjarmason]] -!! input -{{NAMESPACE}} -!! result -

    User -

    -!! end - -!! test -Magic Word: {{NAMESPACEE}} -!! options -title=[[User:Ævar Arnfjörð Bjarmason]] -!! input -{{NAMESPACEE}} -!! result -

    User -

    -!! end - -!! test -Magic Word: {{NUMBEROFARTICLES}} -!! input -{{NUMBEROFARTICLES}} -!! result -

    2 -

    -!! end - -!! test -Magic Word: {{NUMBEROFFILES}} -!! input -{{NUMBEROFFILES}} -!! result -

    2 -

    -!! end - -!! test -Magic Word: {{PAGENAME}} -!! options -title=[[User:Ævar Arnfjörð Bjarmason]] -!! input -{{PAGENAME}} -!! result -

    Ævar Arnfjörð Bjarmason -

    -!! end - -!! test -Magic Word: {{PAGENAMEE}} -!! options -title=[[User:Ævar Arnfjörð Bjarmason]] -!! input -{{PAGENAMEE}} -!! result -

    %C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason -

    -!! end - -!! test -Magic Word: {{REVISIONID}} -!! input -{{REVISIONID}} -!! result -

    1337 -

    -!! end - -!! test -Magic Word: {{SCRIPTPATH}} -!! input -{{SCRIPTPATH}} -!! result -

    / -

    -!! end - -!! test -Magic Word: {{SERVER}} -!! input -{{SERVER}} -!! result -

    http://localhost -

    -!! end - -!! test -Magic Word: {{SERVERNAME}} -!! input -{{SERVERNAME}} -!! result -

    Britney-Spears -

    -!! end - -!! test -Magic Word: {{SITENAME}} -!! input -{{SITENAME}} -!! result -

    MediaWiki -

    -!! end - -!! test -Namespace 1 {{ns:1}} -!! input -{{ns:1}} -!! result -

    Talk -

    -!! end - -!! test -Namespace 1 {{ns:01}} -!! input -{{ns:01}} -!! result -

    Talk -

    -!! end - -!! test -Namespace 0 {{ns:0}} (bug 4783) -!! input -{{ns:0}} -!! result - -!! end - -!! test -Namespace 0 {{ns:00}} (bug 4783) -!! input -{{ns:00}} -!! result - -!! end - -!! test -Namespace -1 {{ns:-1}} -!! input -{{ns:-1}} -!! result -

    Special -

    -!! end - -!! test -Namespace User {{ns:User}} -!! input -{{ns:User}} -!! result -

    User -

    -!! end - -!! test -Namespace User talk {{ns:User_talk}} -!! input -{{ns:User_talk}} -!! result -

    User talk -

    -!! end - -!! test -Namespace User talk {{ns:uSeR tAlK}} -!! input -{{ns:uSeR tAlK}} -!! result -

    User talk -

    -!! end - -!! test -Namespace File {{ns:File}} -!! input -{{ns:File}} -!! result -

    File -

    -!! end - -!! test -Namespace File {{ns:Image}} -!! input -{{ns:Image}} -!! result -

    File -

    -!! end - -!! test -Namespace (lang=de) Benutzer {{ns:User}} -!! options -language=de -!! input -{{ns:User}} -!! result -

    Benutzer -

    -!! end - -!! test -Namespace (lang=de) Benutzer Diskussion {{ns:3}} -!! options -language=de -!! input -{{ns:3}} -!! result -

    Benutzer Diskussion -

    -!! end - - -### -### Magic links -### -!! test -Magic links: internal link to RFC (bug 479) -!! input -[[RFC 123]] -!! result -

    RFC 123 -

    -!! end - -!! test -Magic links: RFC (bug 479) -!! input -RFC 822 -!! result -

    RFC 822 -

    -!! end - -!! test -Magic links: ISBN (bug 1937) -!! input -ISBN 0-306-40615-2 -!! result -

    ISBN 0-306-40615-2 -

    -!! end - -!! test -Magic links: PMID incorrectly converts space to underscore -!! input -PMID 1234 -!! result -

    PMID 1234 -

    -!! end - -### -### Templates -#### - -!! test -Nonexistent template -!! input -{{thistemplatedoesnotexist}} -!! result -

    Template:Thistemplatedoesnotexist -

    -!! end - -!! article -Template:test -!! text -This is a test template -!! endarticle - -!! test -Simple template -!! input -{{test}} -!! result -

    This is a test template -

    -!! end - -!! test -Template with explicit namespace -!! input -{{Template:test}} -!! result -

    This is a test template -

    -!! end - - -!! article -Template:paramtest -!! text -This is a test template with parameter {{{param}}} -!! endarticle - -!! test -Template parameter -!! input -{{paramtest|param=foo}} -!! result -

    This is a test template with parameter foo -

    -!! end - -!! article -Template:paramtestnum -!! text -[[{{{1}}}|{{{2}}}]] -!! endarticle - -!! test -Template unnamed parameter -!! input -{{paramtestnum|Main Page|the main page}} -!! result -

    the main page -

    -!! end - -!! article -Template:templatesimple -!! text -(test) -!! endarticle - -!! article -Template:templateredirect -!! text -#redirect [[Template:templatesimple]] -!! endarticle - -!! article -Template:templateasargtestnum -!! text -{{{{{1}}}}} -!! endarticle - -!! article -Template:templateasargtest -!! text -{{template{{{templ}}}}} -!! endarticle - -!! article -Template:templateasargtest2 -!! text -{{{{{templ}}}}} -!! endarticle - -!! test -Template with template name as unnamed argument -!! input -{{templateasargtestnum|templatesimple}} -!! result -

    (test) -

    -!! end - -!! test -Template with template name as argument -!! input -{{templateasargtest|templ=simple}} -!! result -

    (test) -

    -!! end - -!! test -Template with template name as argument (2) -!! input -{{templateasargtest2|templ=templatesimple}} -!! result -

    (test) -

    -!! end - -!! article -Template:templateasargtestdefault -!! text -{{{{{templ|templatesimple}}}}} -!! endarticle - -!! article -Template:templa -!! text -'''templ''' -!! endarticle - -!! test -Template with default value -!! input -{{templateasargtestdefault}} -!! result -

    (test) -

    -!! end - -!! test -Template with default value (value set) -!! input -{{templateasargtestdefault|templ=templa}} -!! result -

    templ -

    -!! end - -!! test -Template redirect -!! input -{{templateredirect}} -!! result -

    (test) -

    -!! end - -!! test -Template with argument in separate line -!! input -{{ templateasargtest | - templ = simple }} -!! result -

    (test) -

    -!! end - -!! test -Template with complex template as argument -!! input -{{paramtest| - param ={{ templateasargtest | - templ = simple }}}} -!! result -

    This is a test template with parameter (test) -

    -!! end - -!! test -Template with thumb image (with link in description) -!! input -{{paramtest| - param =[[Image:noimage.png|thumb|[[no link|link]] [[no link|caption]]]]}} -!! result -This is a test template with parameter - -!! end - -!! article -Template:complextemplate -!! text -{{{1}}} {{paramtest| - param ={{{param}}}}} -!! endarticle - -!! test -Template with complex arguments -!! input -{{complextemplate| - param ={{ templateasargtest | - templ = simple }}|[[Template:complextemplate|link]]}} -!! result -

    link This is a test template with parameter (test) -

    -!! end - -!! test -BUG 553: link with two variables in a piped link -!! input -{| -|[[{{{1}}}|{{{2}}}]] -|} -!! result - - -
    [[{{{1}}}|{{{2}}}]] -
    - -!! end - -!! test -Magic variable as template parameter -!! input -{{paramtest|param={{SITENAME}}}} -!! result -

    This is a test template with parameter MediaWiki -

    -!! end - -!! article -Template:linktest -!! text -[[{{{param}}}|link]] -!! endarticle - -!! test -Template parameter as link source -!! input -{{linktest|param=Main Page}} -!! result -

    link -

    -!! end - - -!!article -Template:paramtest2 -!! text -including another template, {{paramtest|param={{{arg}}}}} -!! endarticle - -!! test -Template passing argument to another template -!! input -{{paramtest2|arg='hmm'}} -!! result -

    including another template, This is a test template with parameter 'hmm' -

    -!! end - -!! article -Template:Linktest2 -!! text -Main Page -!! endarticle - -!! test -Template as link source -!! input -[[{{linktest2}}]] -!! result -

    Main Page -

    -!! end - - -!! article -Template:loop1 -!! text -{{loop2}} -!! endarticle - -!! article -Template:loop2 -!! text -{{loop1}} -!! endarticle - -!! test -Template infinite loop -!! input -{{loop1}} -!! result -

    Template loop detected: Template:Loop1 -

    -!! end - -!! test -Template from main namespace -!! input -{{:Main Page}} -!! result -

    blah blah -

    -!! end - -!! article -Template:table -!! text -{| -| 1 || 2 -|- -| 3 || 4 -|} -!! endarticle - -!! test -BUG 529: Template with table, not included at beginning of line -!! input -foo {{table}} -!! result -

    foo -

    - - - - -
    1 2 -
    3 4 -
    - -!! end - -!! test -BUG 523: Template shouldn't eat newline (or add an extra one before table) -!! input -foo -{{table}} -!! result -

    foo -

    - - - - -
    1 2 -
    3 4 -
    - -!! end - -!! test -BUG 41: Template parameters shown as broken links -!! input -{{{parameter}}} -!! result -

    {{{parameter}}} -

    -!! end - - -!! article -Template:MSGNW test -!! text -''None'' of '''this''' should be -* interepreted - but rather passed unmodified -{{test}} -!! endarticle - -# hmm, fix this or just deprecate msgnw and document its behavior? -!! test -msgnw keyword -!! options -disabled -!! input -{{msgnw:MSGNW test}} -!! result -

    ''None'' of '''this''' should be -* interepreted - but rather passed unmodified -{{test}} -

    -!! end - -!! test -int keyword -!! input -{{int:youhavenewmessages|lots of money|not!}} -!! result -

    You have lots of money (not!). -

    -!! end - -!! article -Template:Includes -!! text -Foozarbar -!! endarticle - -!! test - and being included -!! input -{{Includes}} -!! result -

    Foobar -

    -!! end - -!! article -Template:Includes2 -!! text -Foobar -!! endarticle - -!! test - being included -!! input -{{Includes2}} -!! result -

    Foo -

    -!! end - - -!! article -Template:Includes3 -!! text -Foobarzar -!! endarticle - -!! test - and being included -!! input -{{Includes3}} -!! result -

    Foo -

    -!! end - -!! test - and on a page -!! input -Foozarbar -!! result -

    Foozar -

    -!! end - -!! test - on a page -!! input -Foobar -!! result -

    Foobar -

    -!! end - -!! article -Template:Includeonly section -!! text - -==Includeonly section== - -==Section T-1== -!!endarticle - -!! test -Bug 6563: Edit link generation for section shown by -!! input -{{includeonly section}} -!! result -

    [edit] Includeonly section

    -

    [edit] Section T-1

    - -!! end - -# Uses same input as the contents of [[Template:Includeonly section]] -!! test -Bug 6563: Section extraction for section shown by -!! options -section=T-2 -!! input - -==Includeonly section== - -==Section T-2== -!! result -==Section T-2== -!! end - -!! test -Bug 6563: Edit link generation for section suppressed by -!! input - -==Includeonly section== - -==Section 1== -!! result -

    [edit] Section 1

    - -!! end - -!! test -Bug 6563: Section extraction for section suppressed by -!! options -section=1 -!! input - -==Includeonly section== - -==Section 1== -!! result -==Section 1== -!! end - -### -### Pre-save transform tests -### -!! test -pre-save transform: subst: -!! options -PST -!! input -{{subst:test}} -!! result -This is a test template -!! end - -!! test -pre-save transform: normal template -!! options -PST -!! input -{{test}} -!! result -{{test}} -!! end - -!! test -pre-save transform: nonexistent template -!! options -PST -!! input -{{thistemplatedoesnotexist}} -!! result -{{thistemplatedoesnotexist}} -!! end - - -!! test -pre-save transform: subst magic variables -!! options -PST -!! input -{{subst:SITENAME}} -!! result -MediaWiki -!! end - -# This is bug 89, which I fixed. -- wtm -!! test -pre-save transform: subst: templates with parameters -!! options -pst -!! input -{{subst:paramtest|param="something else"}} -!! result -This is a test template with parameter "something else" -!! end - -!! article -Template:nowikitest -!! text -'''not wiki''' -!! endarticle - -!! test -pre-save transform: nowiki in subst (bug 1188) -!! options -pst -!! input -{{subst:nowikitest}} -!! result -'''not wiki''' -!! end - - -!! article -Template:commenttest -!! text -This template has in it. -!! endarticle - -!! test -pre-save transform: comment in subst (bug 1936) -!! options -pst -!! input -{{subst:commenttest}} -!! result -This template has in it. -!! end - -!! test -pre-save transform: unclosed tag -!! options -pst noxml -!! input -'''not wiki''' -!! result -'''not wiki''' -!! end - -!! test -pre-save transform: mixed tag case -!! options -pst noxml -!! input -'''not wiki''' -!! result -'''not wiki''' -!! end - -!! test -pre-save transform: unclosed comment in -!! options -pst noxml -!! input -wikinowiki -!!result - -!!end - -!! test -pre-save transform: comment containing extension -!! options -pst -!! input - -!!result - -!!end - -!! test -pre-save transform: comment containing nowiki -!! options -pst -!! input - -!!result - -!!end - -!! test -pre-save transform: comment containing math -!! options -pst -!! input - -!!result - -!!end - -!! test -pre-save transform: in subst (bug 3298) -!! options -pst -!! input -{{subst:Includes}} -!! result -Foobar -!! end - -!! test -pre-save transform: in subst (bug 3298) -!! options -pst -!! input -{{subst:Includes2}} -!! result -Foo -!! end - -!! article -Template:SubstTest -!!text -{{subst:Includes}} -!! endarticle - -!! article -Template:SafeSubstTest -!! text -{{safesubst:Includes}} -!! endarticle - -!! test -bug 22297: safesubst: works during PST -!! options -pst -!! input -{{subst:SafeSubstTest}}{{safesubst:SubstTest}} -!! result -FoobarFoobar -!! end - -!! test -bug 22297: safesubst: works during normal parse -!! input -{{SafeSubstTest}} -!! result -

    Foobar -

    -!! end - -!! test: -subst: does not work during normal parse -!! input -{{SubstTest}} -!! result -

    {{subst:Includes}} -

    -!! end - -!! test -pre-save transform: context links ("pipe trick") -!! options -pst -!! input -[[Article (context)|]] -[[Bar:Article|]] -[[:Bar:Article|]] -[[Bar:Article (context)|]] -[[:Bar:Article (context)|]] -[[|Article]] -[[|Article (context)]] -[[Bar:X (Y) Z|]] -[[:Bar:X (Y) Z|]] -!! result -[[Article (context)|Article]] -[[Bar:Article|Article]] -[[:Bar:Article|Article]] -[[Bar:Article (context)|Article]] -[[:Bar:Article (context)|Article]] -[[Article]] -[[Article (context)]] -[[Bar:X (Y) Z|X (Y) Z]] -[[:Bar:X (Y) Z|X (Y) Z]] -!! end - -!! test -pre-save transform: context links ("pipe trick") with interwiki prefix -!! options -pst -!! input -[[interwiki:Article|]] -[[:interwiki:Article|]] -[[interwiki:Bar:Article|]] -[[:interwiki:Bar:Article|]] -!! result -[[interwiki:Article|Article]] -[[:interwiki:Article|Article]] -[[interwiki:Bar:Article|Bar:Article]] -[[:interwiki:Bar:Article|Bar:Article]] -!! end - -!! test -pre-save transform: context links ("pipe trick") with parens in title -!! options -pst title=[[Somearticle (context)]] -!! input -[[|Article]] -!! result -[[Article (context)|Article]] -!! end - -!! test -pre-save transform: context links ("pipe trick") with comma in title -!! options -pst title=[[Someplace, Somewhere]] -!! input -[[|Otherplace]] -[[Otherplace, Elsewhere|]] -[[Otherplace, Elsewhere, Anywhere|]] -!! result -[[Otherplace, Somewhere|Otherplace]] -[[Otherplace, Elsewhere|Otherplace]] -[[Otherplace, Elsewhere, Anywhere|Otherplace]] -!! end - -!! test -pre-save transform: context links ("pipe trick") with parens and comma -!! options -pst title=[[Someplace (IGNORED), Somewhere]] -!! input -[[|Otherplace]] -[[Otherplace (place), Elsewhere|]] -!! result -[[Otherplace, Somewhere|Otherplace]] -[[Otherplace (place), Elsewhere|Otherplace]] -!! end - -!! test -pre-save transform: context links ("pipe trick") with comma and parens -!! options -pst title=[[Who, me? (context)]] -!! input -[[|Yes, you.]] -[[Me, Myself, and I (1937 song)|]] -!! result -[[Yes, you. (context)|Yes, you.]] -[[Me, Myself, and I (1937 song)|Me, Myself, and I]] -!! end - -!! test -pre-save transform: context links ("pipe trick") with namespace -!! options -pst title=[[Ns:Somearticle]] -!! input -[[|Article]] -!! result -[[Ns:Article|Article]] -!! end - -!! test -pre-save transform: context links ("pipe trick") with namespace and parens -!! options -pst title=[[Ns:Somearticle (context)]] -!! input -[[|Article]] -!! result -[[Ns:Article (context)|Article]] -!! end - -!! test -pre-save transform: context links ("pipe trick") with namespace and comma -!! options -pst title=[[Ns:Somearticle, Context, Whatever]] -!! input -[[|Article]] -!! result -[[Ns:Article, Context, Whatever|Article]] -!! end - -!! test -pre-save transform: context links ("pipe trick") with namespace, comma and parens -!! options -pst title=[[Ns:Somearticle, Context (context)]] -!! input -[[|Article]] -!! result -[[Ns:Article (context)|Article]] -!! end - -!! test -pre-save transform: context links ("pipe trick") with namespace, parens and comma -!! options -pst title=[[Ns:Somearticle (IGNORED), Context]] -!! input -[[|Article]] -!! result -[[Ns:Article, Context|Article]] -!! end - - -### -### Message transform tests -### -!! test -message transform: magic variables -!! options -msg -!! input -{{SITENAME}} -!! result -MediaWiki -!! end - -!! test -message transform: should not transform wiki markup -!! options -msg -!! input -''test'' -!! result -''test'' -!! end - -!! test -message transform: in transcluded template (bug 4926) -!! options -msg -!! input -{{Includes}} -!! result -Foobar -!! end - -!! test -message transform: in transcluded template (bug 4926) -!! options -msg -!! input -{{Includes2}} -!! result -Foo -!! end - -!! test -{{#special:}} page name, known -!! options -msg -!! input -{{#special:Recentchanges}} -!! result -Special:RecentChanges -!! end - -!! test -{{#special:}} page name, unknown -!! options -msg -!! input -{{#special:foobarnonexistent}} -!! result -No such special page -!! end - -### -### Images -### -!! test -Simple image -!! input -[[Image:foobar.jpg]] -!! result -

    Foobar.jpg -

    -!! end - -!! test -Right-aligned image -!! input -[[Image:foobar.jpg|right]] -!! result -
    Foobar.jpg
    - -!! end - -!! test -Simple image (using File: namespace, now canonical) -!! input -[[File:foobar.jpg]] -!! result -

    Foobar.jpg -

    -!! end - -!! test -Image with caption -!! input -[[Image:foobar.jpg|right|Caption text]] -!! result -
    Caption text
    - -!! end - -!! test -Image with link parameter, wiki target -!! input -[[Image:foobar.jpg|link=Target page]] -!! result -

    Foobar.jpg -

    -!! end - -!! test -Image with link parameter, URL target -!! input -[[Image:foobar.jpg|link=http://example.com/]] -!! result -

    Foobar.jpg -

    -!! end - -!! test -Image with empty link parameter -!! input -[[Image:foobar.jpg|link=]] -!! result -

    Foobar.jpg -

    -!! end - -!! test -Image with link parameter (wiki target) and unnamed parameter -!! input -[[Image:foobar.jpg|link=Target page|Title]] -!! result -

    Title -

    -!! end - -!! test -Image with link parameter (URL target) and unnamed parameter -!! input -[[Image:foobar.jpg|link=http://example.com/|Title]] -!! result -

    Title -

    -!! end - - - -!! test -Image with frame and link -!! input -[[Image:Foobar.jpg|frame|left|This is a test image [[Main Page]]]] -!! result -
    This is a test image Main Page
    - -!! end - -!! test -Image with frame and link and explicit alt -!! input -[[Image:Foobar.jpg|frame|left|This is a test image [[Main Page]]|alt=Altitude]] -!! result -
    Altitude
    This is a test image Main Page
    - -!! end - -!! test -Image with wiki markup in implicit alt -!! input -[[Image:Foobar.jpg|testing '''bold''' in alt]] -!! result -

    testing bold in alt -

    -!! end - -!! test -Image with wiki markup in explicit alt -!! input -[[Image:Foobar.jpg|alt=testing '''bold''' in alt]] -!! result -

    testing bold in alt -

    -!! end - -!! test -Link to image page- image page normally doesn't exists, hence edit link -Add test with existing image page -#

    Image:test -!! input -[[:Image:test]] -!! result -

    Image:test -

    -!! end - -!! test -bug 18784 Link to non-existent image page with caption should use caption as link text -!! input -[[:Image:test|caption]] -!! result -

    caption -

    -!! end - -!! test -Frameless image caption with a free URL -!! input -[[Image:foobar.jpg|http://example.com]] -!! result -

    http://example.com -

    -!! end - -!! test -Thumbnail image caption with a free URL -!! input -[[Image:foobar.jpg|thumb|http://example.com]] -!! result - - -!! end - -!! test -Thumbnail image caption with a free URL and explicit alt -!! input -[[Image:foobar.jpg|thumb|http://example.com|alt=Alteration]] -!! result - - -!! end - -!! test -BUG 1887: A ISBN with a thumbnail -!! input -[[Image:foobar.jpg|thumb|ISBN 1235467890]] -!! result - - -!! end - -!! test -BUG 1887: A RFC with a thumbnail -!! input -[[Image:foobar.jpg|thumb|This is RFC 12354]] -!! result -
    This is RFC 12354
    - -!! end - -!! test -BUG 1887: A mailto link with a thumbnail -!! input -[[Image:foobar.jpg|thumb|Please mailto:nobody@example.com]] -!! result - - -!! end - -!! test -BUG 1887: A with a thumbnail- we don't render math in the parsertests by default, -so math is not stripped and turns up as escaped <math> tags. -!! input -[[Image:foobar.jpg|thumb|2+2]] -!! result -
    <math>2+2</math>
    - -!! end - -!! test -BUG 1887, part 2: A with a thumbnail- math enabled -!! options -math -!! input -[[Image:foobar.jpg|thumb|2+2]] -!! result -
    2 + 2
    - -!! end - -# Pending resolution to bug 368 -!! test -BUG 648: Frameless image caption with a link -!! input -[[Image:foobar.jpg|text with a [[link]] in it]] -!! result -

    text with a link in it -

    -!! end - -!! test -BUG 648: Frameless image caption with a link (suffix) -!! input -[[Image:foobar.jpg|text with a [[link]]foo in it]] -!! result -

    text with a linkfoo in it -

    -!! end - -!! test -BUG 648: Frameless image caption with an interwiki link -!! input -[[Image:foobar.jpg|text with a [[MeatBall:Link]] in it]] -!! result -

    text with a MeatBall:Link in it -

    -!! end - -!! test -BUG 648: Frameless image caption with a piped interwiki link -!! input -[[Image:foobar.jpg|text with a [[MeatBall:Link|link]] in it]] -!! result -

    text with a link in it -

    -!! end - -!! test -Escape HTML special chars in image alt text -!! input -[[Image:foobar.jpg|& < > "]] -!! result -

    & < > " -

    -!! end - -!! test -BUG 499: Alt text should have Ӓ, not &1234; -!! input -[[Image:foobar.jpg|♀]] -!! result -

    ♀ -

    -!! end - -!! test -Broken image caption with link -!! input -[[Image:Foobar.jpg|thumb|This is a broken caption. But [[Main Page|this]] is just an ordinary link. -!! result -

    [[Image:Foobar.jpg|thumb|This is a broken caption. But this is just an ordinary link. -

    -!! end - -!! test -Image caption containing another image -!! input -[[Image:Foobar.jpg|thumb|This is a caption with another [[Image:icon.png|image]] inside it!]] -!! result -
    This is a caption with another image inside it!
    - -!! end - -!! test -Image caption containing a newline -!! input -[[Image:Foobar.jpg|This -*is some text]] -!! result -

    This *is some text -

    -!!end - - -!! test -Bug 3090: External links other than http: in image captions -!! input -[[Image:Foobar.jpg|thumb|200px|This caption has [irc://example.net irc] and [https://example.com Secure] ext links in it.]] -!! result -
    This caption has irc and Secure ext links in it.
    - -!! end - - -### -### Subpages -### -!! article -Subpage test/subpage -!! text -foo -!! endarticle - -!! test -Subpage link -!! options -subpage title=[[Subpage test]] -!! input -[[/subpage]] -!! result -

    /subpage -

    -!! end - -!! test -Subpage noslash link -!! options -subpage title=[[Subpage test]] -!!input -[[/subpage/]] -!! result -

    subpage -

    -!! end - -!! test -Disabled subpages -!! input -[[/subpage]] -!! result -

    /subpage -

    -!! end - -!! test -BUG 561: {{/Subpage}} -!! options -subpage title=[[Page]] -!! input -{{/Subpage}} -!! result -

    Page/Subpage -

    -!! end - -### -### Categories -### -!! article -Category:MediaWiki User's Guide -!! text -blah -!! endarticle - -!! test -Link to category -!! input -[[:Category:MediaWiki User's Guide]] -!! result -

    Category:MediaWiki User's Guide -

    -!! end - -!! test -Simple category -!! options -cat -!! input -[[Category:MediaWiki User's Guide]] -!! result -MediaWiki User's Guide -!! end - -!! test -PAGESINCATEGORY invalid title fatal (r33546 fix) -!! input -{{PAGESINCATEGORY:}} -!! result -

    0 -

    -!! end - -### -### Inter-language links -### -!! test -Inter-language links -!! options -ill -!! input -[[es:Alimento]] -[[fr:Nourriture]] -[[zh:食品]] -!! result -es:Alimento fr:Nourriture zh:食品 -!! end - -### -### Sections -### -!! test -Basic section headings -!! input -== Headline 1 == -Some text - -==Headline 2== -More -===Smaller headline=== -Blah blah -!! result -

    [edit] Headline 1

    -

    Some text -

    -

    [edit] Headline 2

    -

    More -

    -

    [edit] Smaller headline

    -

    Blah blah -

    -!! end - -!! test -Section headings with TOC -!! input -== Headline 1 == -=== Subheadline 1 === -===== Skipping a level ===== -====== Skipping a level ====== - -== Headline 2 == -Some text -===Another headline=== -!! result -

    Contents

    - -
    -

    [edit] Headline 1

    -

    [edit] Subheadline 1

    -
    [edit] Skipping a level
    -
    [edit] Skipping a level
    -

    [edit] Headline 2

    -

    Some text -

    -

    [edit] Another headline

    - -!! end - -# perl -e 'print "="x$_," Level $_ heading","="x$_,"\n" for 1..10' -!! test -Handling of sections up to level 6 and beyond -!! input -= Level 1 Heading= -== Level 2 Heading== -=== Level 3 Heading=== -==== Level 4 Heading==== -===== Level 5 Heading===== -====== Level 6 Heading====== -======= Level 7 Heading======= -======== Level 8 Heading======== -========= Level 9 Heading========= -========== Level 10 Heading========== -!! result -

    Contents

    - -
    -

    [edit] Level 1 Heading

    -

    [edit] Level 2 Heading

    -

    [edit] Level 3 Heading

    -

    [edit] Level 4 Heading

    -
    [edit] Level 5 Heading
    -
    [edit] Level 6 Heading
    -
    [edit] = Level 7 Heading=
    -
    [edit] == Level 8 Heading==
    -
    [edit] === Level 9 Heading===
    -
    [edit] ==== Level 10 Heading====
    - -!! end - -!! test -TOC regression (bug 9764) -!! input -== title 1 == -=== title 1.1 === -==== title 1.1.1 ==== -=== title 1.2 === -== title 2 == -=== title 2.1 === -!! result -

    Contents

    - -
    -

    [edit] title 1

    -

    [edit] title 1.1

    -

    [edit] title 1.1.1

    -

    [edit] title 1.2

    -

    [edit] title 2

    -

    [edit] title 2.1

    - -!! end - -!! test -TOC with wgMaxTocLevel=3 (bug 6204) -!! options -wgMaxTocLevel=3 -!! input -== title 1 == -=== title 1.1 === -==== title 1.1.1 ==== -=== title 1.2 === -== title 2 == -=== title 2.1 === -!! result -

    Contents

    - -
    -

    [edit] title 1

    -

    [edit] title 1.1

    -

    [edit] title 1.1.1

    -

    [edit] title 1.2

    -

    [edit] title 2

    -

    [edit] title 2.1

    - -!! end - -!! test -Resolving duplicate section names -!! input -== Foo bar == -== Foo bar == -!! result -

    [edit] Foo bar

    -

    [edit] Foo bar

    - -!! end - -!! test -Resolving duplicate section names with differing case (bug 10721) -!! input -== Foo bar == -== Foo Bar == -!! result -

    [edit] Foo bar

    -

    [edit] Foo Bar

    - -!! end - -!! article -Template:sections -!! text -===Section 1=== -==Section 2== -!! endarticle - -!! test -Template with sections, __NOTOC__ -!! input -__NOTOC__ -==Section 0== -{{sections}} -==Section 4== -!! result -

    [edit] Section 0

    -

    [edit] Section 1

    -

    [edit] Section 2

    -

    [edit] Section 4

    - -!! end - -!! test -__NOEDITSECTION__ keyword -!! input -__NOEDITSECTION__ -==Section 1== -==Section 2== -!! result -

    Section 1

    -

    Section 2

    - -!! end - -!! test -Link inside a section heading -!! input -==Section with a [[Main Page|link]] in it== -!! result -

    [edit] Section with a link in it

    - -!! end - -!! test -TOC regression (bug 12077) -!! input -__TOC__ -== title 1 == -=== title 1.1 === -== title 2 == -!! result -

    Contents

    - -
    -

    [edit] title 1

    -

    [edit] title 1.1

    -

    [edit] title 2

    - -!! end - -!! test -BUG 1219 URL next to image (good) -!! input -http://example.com [[Image:foobar.jpg]] -!! result -

    http://example.com Foobar.jpg -

    -!!end - -!! test -BUG 1219 URL next to image (broken) -!! input -http://example.com[[Image:foobar.jpg]] -!! result -

    http://example.comFoobar.jpg -

    -!!end - -!! test -Bug 1186 news: in the middle of text -!! input -http://en.wikinews.org/wiki/Wikinews:Workplace -!! result -

    http://en.wikinews.org/wiki/Wikinews:Workplace -

    -!!end - - -!! test -Namespaced link must have a title -!! input -[[Project:]] -!! result -

    [[Project:]] -

    -!!end - -!! test -Namespaced link must have a title (bad fragment version) -!! input -[[Project:#fragment]] -!! result -

    [[Project:#fragment]] -

    -!!end - - -!! test -div with no attributes -!! input -
    HTML rocks
    -!! result -
    HTML rocks
    - -!! end - -!! test -div with double-quoted attribute -!! input -
    HTML rocks
    -!! result -
    HTML rocks
    - -!! end - -!! test -div with single-quoted attribute -!! input -
    HTML rocks
    -!! result -
    HTML rocks
    - -!! end - -!! test -div with unquoted attribute -!! input -
    HTML rocks
    -!! result -
    HTML rocks
    - -!! end - -!! test -div with illegal double attributes -!! input -
    HTML rocks
    -!! result -
    HTML rocks
    - -!!end - -!! test -HTML multiple attributes correction -!! input -

    Awesome!

    -!! result -

    Awesome!

    - -!!end - -!! test -Table multiple attributes correction -!! input -{| -!+ class="error" class="awesome"| status -|} -!! result - - -
    status -
    - -!!end - -!! test -DIV IN UPPERCASE -!! input -
    HTML ROCKS
    -!! result -
    HTML ROCKS
    - -!!end - - -!! test -text with amp in the middle of nowhere -!! input -Remember AT&T? -!!result -

    Remember AT&T? -

    -!! end - -!! test -text with character entity: eacute -!! input -I always thought é was a cute letter. -!! result -

    I always thought é was a cute letter. -

    -!! end - -!! test -text with undefined character entity: xacute -!! input -I always thought &xacute; was a cute letter. -!! result -

    I always thought &xacute; was a cute letter. -

    -!! end - - -### -### Media links -### - -!! test -Media link -!! input -[[Media:Foobar.jpg]] -!! result -

    Media:Foobar.jpg -

    -!! end - -!! test -Media link with text -!! input -[[Media:Foobar.jpg|A neat file to look at]] -!! result -

    A neat file to look at -

    -!! end - -# FIXME: this is still bad HTML tag nesting -!! test -Media link with nasty text -fixme: doBlockLevels won't wrap this in a paragraph because it contains a div -!! input -[[Media:Foobar.jpg|Safe Link
    " onmouseover="alert(document.cookie)" onfoo="
    ]] -!! result -Safe Link<div style="display:none">" onmouseover="alert(document.cookie)" onfoo="</div> - -!! end - -!! test -Media link to nonexistent file (bug 1702) -!! input -[[Media:No such.jpg]] -!! result -

    Media:No such.jpg -

    -!! end - -!! test -Image link to nonexistent file (bug 1850 - good) -!! input -[[Image:No such.jpg]] -!! result -

    File:No such.jpg -

    -!! end - -!! test -:Image link to nonexistent file (bug 1850 - bad) -!! input -[[:Image:No such.jpg]] -!! result -

    Image:No such.jpg -

    -!! end - - - -!! test -Character reference normalization in link text (bug 1938) -!! input -[[Main Page|this&that]] -!! result -

    this&that -

    -!!end - -!! test -Empty attribute crash test (bug 2067) -!! input -foo -!! result -

    foo -

    -!! end - -!! test -Empty attribute crash test single-quotes (bug 2067) -!! input -foo -!! result -

    foo -

    -!! end - -!! test -Attribute test: equals, then nothing -!! input -foo -!! result -

    foo -

    -!! end - -!! test -Attribute test: unquoted value -!! input -foo -!! result -

    foo -

    -!! end - -!! test -Attribute test: unquoted but illegal value (hash) -!! input -foo -!! result -

    foo -

    -!! end - -!! test -Attribute test: no value -!! input -foo -!! result -

    foo -

    -!! end - -!! test -Bug 2095: link with three closing brackets -!! input -[[Main Page]]] -!! result -

    Main Page] -

    -!! end - -!! test -Bug 2095: link with pipe and three closing brackets -!! input -[[Main Page|link]]] -!! result -

    link] -

    -!! end - -!! test -Bug 2095: link with pipe and three closing brackets, version 2 -!! input -[[Main Page|[http://example.com/]]] -!! result -

    [http://example.com/] -

    -!! end - - -### -### Safety -### - -!! article -Template:Dangerous attribute -!! text -" onmouseover="alert(document.cookie) -!! endarticle - -!! article -Template:Dangerous style attribute -!! text -border-size: expression(alert(document.cookie)) -!! endarticle - -!! article -Template:Div style -!! text -
    Magic div
    -!! endarticle - -!! test -Bug 2304: HTML attribute safety (safe template; regression bug 2309) -!! input -
    -!! result -
    - -!! end - -!! test -Bug 2304: HTML attribute safety (dangerous template; 2309) -!! input -
    -!! result -
    - -!! end - -!! test -Bug 2304: HTML attribute safety (dangerous style template; 2309) -!! input -
    -!! result -
    - -!! end - -!! test -Bug 2304: HTML attribute safety (safe parameter; 2309) -!! input -{{div style|width: 200px}} -!! result -
    Magic div
    - -!! end - -!! test -Bug 2304: HTML attribute safety (unsafe parameter; 2309) -!! input -{{div style|width: expression(alert(document.cookie))}} -!! result -
    Magic div
    - -!! end - -!! test -Bug 2304: HTML attribute safety (unsafe breakout parameter; 2309) -!! input -{{div style|">}} -!! result -
    <script>alert(document.cookie)</script>">Magic div
    - -!! end - -!! test -Bug 2304: HTML attribute safety (unsafe breakout parameter 2; 2309) -!! input -{{div style|" >}} -!! result -
    <script>alert(document.cookie)</script>">Magic div
    - -!! end - -!! test -Bug 2304: HTML attribute safety (link) -!! input -
    -!! result -
    - -!! end - -!! test -Bug 2304: HTML attribute safety (italics) -!! input -
    -!! result -
    - -!! end - -!! test -Bug 2304: HTML attribute safety (bold) -!! input -
    -!! result -
    - -!! end - - -!! test -Bug 2304: HTML attribute safety (ISBN) -!! input -
    -!! result -
    - -!! end - -!! test -Bug 2304: HTML attribute safety (RFC) -!! input -
    -!! result -
    - -!! end - -!! test -Bug 2304: HTML attribute safety (PMID) -!! input -
    -!! result -
    - -!! end - -!! test -Bug 2304: HTML attribute safety (web link) -!! input -
    -!! result -
    - -!! end - -!! test -Bug 2304: HTML attribute safety (named web link) -!! input -
    -!! result -
    - -!! end - -!! test -Bug 3244: HTML attribute safety (extension; safe) -!! input -
    -!! result -
    - -!! end - -!! test -Bug 3244: HTML attribute safety (extension; unsafe) -!! input -
    -!! result -
    - -!! end - -!! test -Math section safety when disabled -!! input - -!! result -

    <math><script>alert(document.cookies);</script></math> -

    -!! end - -# More MSIE fun discovered by Tom Gilder - -!! test -MSIE CSS safety test: spurious slash -!! input -
    evil
    -!! result -
    evil
    - -!! end - -!! test -MSIE CSS safety test: hex code -!! input -
    evil
    -!! result -
    evil
    - -!! end - -!! test -MSIE CSS safety test: comment in url -!! input -
    evil
    -!! result -
    evil
    - -!! end - -!! test -MSIE CSS safety test: comment in expression -!! input -
    evil4
    -!! result -
    evil4
    - -!! end - - -!! test -Table attribute legitimate extension -!! input -{| -!+ style="color:blue"| status -|} -!! result - - -
    status -
    - -!!end - -!! test -Table attribute safety -!! input -{| -!+ style="border-width:expression(0+alert(document.cookie))"| status -|} -!! result - - -
    status -
    - -!! end - -!! test -CSS line continuation 1 -!! input -
    -!! result -
    - -!! end - -!! test -CSS line continuation 2 -!! input -
    -!! result -
    - -!! end - -!! article -Template:Identity -!! text -{{{1}}} -!! endarticle - -!! test -Expansion of multi-line templates in attribute values (bug 6255) -!! input -
    -
    -!! result -
    -
    - -!! end - - -!! test -Expansion of multi-line templates in attribute values (bug 6255 sanity check) -!! input -
    -
    -!! result -
    -
    - -!! end - -!! test -Expansion of multi-line templates in attribute values (bug 6255 sanity check 2) -!! input -
    -
    -!! result -
    -
    - -!! end - -### -### Parser hooks (see maintenance/parserTestsParserHook.php for the extension) -### -!! test -Parser hook: empty input -!! input - -!! result -
    -string(0) ""
    -array(0) {
    -}
    -
    - -!! end - -!! test -Parser hook: empty input using terminated empty elements -!! input - -!! result -
    -NULL
    -array(0) {
    -}
    -
    - -!! end - -!! test -Parser hook: empty input using terminated empty elements (space before) -!! input - -!! result -
    -NULL
    -array(0) {
    -}
    -
    - -!! end - -!! test -Parser hook: basic input -!! input -input -!! result -
    -string(5) "input"
    -array(0) {
    -}
    -
    - -!! end - - -!! test -Parser hook: case insensitive -!! input -input -!! result -
    -string(5) "input"
    -array(0) {
    -}
    -
    - -!! end - - -!! test -Parser hook: case insensitive, redux -!! input -input -!! result -
    -string(5) "input"
    -array(0) {
    -}
    -
    - -!! end - -!! test -Parser hook: nested tags -!! options -noxml -!! input - -!! result -
    -string(5) ""
    -array(0) {
    -}
    -
    </tag> - -!! end - -!! test -Parser hook: basic arguments -!! input - -!! result -
    -string(0) ""
    -array(4) {
    -  ["width"]=>
    -  string(3) "200"
    -  ["height"]=>
    -  string(3) "100"
    -  ["depth"]=>
    -  string(2) "50"
    -  ["square"]=>
    -  string(6) "square"
    -}
    -
    - -!! end - -!! test -Parser hook: argument containing a forward slash (bug 5344) -!! input - -!! result -
    -string(0) ""
    -array(1) {
    -  ["filename"]=>
    -  string(8) "/tmp/bla"
    -}
    -
    - -!! end - -!! test -Parser hook: empty input using terminated empty elements (bug 2374) -!! input -text -!! result -
    -NULL
    -array(1) {
    -  ["foo"]=>
    -  string(3) "bar"
    -}
    -
    text - -!! end - -#
    should be output literally since there is no matching tag that begins it -!! test -Parser hook: basic arguments using terminated empty elements (bug 2374) -!! input - -other stuff - -!! result -
    -NULL
    -array(4) {
    -  ["width"]=>
    -  string(3) "200"
    -  ["height"]=>
    -  string(3) "100"
    -  ["depth"]=>
    -  string(2) "50"
    -  ["square"]=>
    -  string(6) "square"
    -}
    -
    -

    other stuff -</tag> -

    -!! end - -### -### (see maintenance/parserTestsStaticParserHook.php for the extension) -### - -!! test -Parser hook: static parser hook not inside a comment -!! input -hello, world - -!! result -

    hello, world -

    -!! end - - -!! test -Parser hook: static parser hook inside a comment -!! input - - -!! result -


    -

    -!! end - -# Nested template calls; this case was broken by Parser.php rev 1.506, -# since reverted. - -!! article -Template:One-parameter -!! text -(My parameter is: {{{1}}}) -!! endarticle - -!! article -Template:Map-one-parameter -!! text -{{{{{1}}}|{{{2}}}}} -!! endarticle - -!! test -Nested template calls -!! input -{{Map-one-parameter|One-parameter|param}} -!! result -

    (My parameter is: param) -

    -!! end - - -### -### Sanitizer -### -!! test -Sanitizer: Closing of open tags -!! input -
    -!! result -
    - -!! end - -!! test -Sanitizer: Closing of open but not closed tags -!! input -foo -!! result -

    foo -

    -!! end - -!! test -Sanitizer: Closing of closed but not open tags -!! input -
    -!! result -

    </s> -

    -!! end - -!! test -Sanitizer: Closing of closed but not open table tags -!! input -Table not started -!! result -

    Table not started</td></tr></table> -

    -!! end - -!! test -Sanitizer: Escaping of spaces, multibyte characters, colons & other stuff in id="" -!! input -byte[[#æ: v|backlink]] -!! result -

    bytebacklink -

    -!! end - -!! test -Sanitizer: Validating the contents of the id attribute (bug 4515) -!! options -disabled -!! input -
    -!! result -Something, but defenetly not
    ... -!! end - -!! test -Sanitizer: Validating id attribute uniqueness (bug 4515, bug 6301) -!! options -disabled -!! input -

    -!! result -Something need to be done. foo-2 ? -!! end - -!! test -Language converter: output gets cut off unexpectedly (bug 5757) -!! options -language=zh -!! input -this bit is safe: }- - -but if we add a conversion instance: -{zh-cn:xxx;zh-tw:yyy}- - -then we get cut off here: }- - -all additional text is vanished -!! result -

    this bit is safe: }- -

    but if we add a conversion instance: xxx -

    then we get cut off here: }- -

    all additional text is vanished -

    -!! end - -!! test -Self closed html pairs (bug 5487) -!! options -!! input -
    Centered text
    -
    In div text
    -!! result -
    <font id="bug" />Centered text
    -
    <font id="bug2" />In div text
    - -!! end - -# -# -# - -!! test -Punctuation: nbsp before exclamation -!! input -C'est grave ! -!! result -

    C'est grave ! -

    -!! end - -!! test -Punctuation: CSS !important (bug 11874) -!! input -
    important
    -!! result -
    important
    - -!!end - -!! test -Punctuation: CSS ! important (bug 11874; with space after) -!! input -
    important
    -!! result -
    important
    - -!!end - - -!! test -HTML bullet list, closed tags (bug 5497) -!! input -
      -
    • One
    • -
    • Two
    • -
    -!! result -
      -
    • One
    • -
    • Two
    • -
    - -!! end - -!! test -HTML bullet list, unclosed tags (bug 5497) -!! options -disabled -!! input -
      -
    • One -
    • Two -
    -!! result -
      -
    • One -
    • Two -
    - -!! end - -!! test -HTML ordered list, closed tags (bug 5497) -!! input -
      -
    1. One
    2. -
    3. Two
    4. -
    -!! result -
      -
    1. One
    2. -
    3. Two
    4. -
    - -!! end - -!! test -HTML ordered list, unclosed tags (bug 5497) -!! options -disabled -!! input -
      -
    1. One -
    2. Two -
    -!! result -
      -
    1. One -
    2. Two -
    - -!! end - -!! test -HTML nested bullet list, closed tags (bug 5497) -!! input -
      -
    • One
    • -
    • Two: -
        -
      • Sub-one
      • -
      • Sub-two
      • -
      -
    • -
    -!! result -
      -
    • One
    • -
    • Two: -
        -
      • Sub-one
      • -
      • Sub-two
      • -
      -
    • -
    - -!! end - -!! test -HTML nested bullet list, open tags (bug 5497) -!! options -disabled -!! input -
      -
    • One -
    • Two: -
        -
      • Sub-one -
      • Sub-two -
      -
    -!! result -
      -
    • One -
    • Two: -
        -
      • Sub-one -
      • Sub-two -
      -
    - -!! end - -!! test -HTML nested ordered list, closed tags (bug 5497) -!! input -
      -
    1. One
    2. -
    3. Two: -
        -
      1. Sub-one
      2. -
      3. Sub-two
      4. -
      -
    4. -
    -!! result -
      -
    1. One
    2. -
    3. Two: -
        -
      1. Sub-one
      2. -
      3. Sub-two
      4. -
      -
    4. -
    - -!! end - -!! test -HTML nested ordered list, open tags (bug 5497) -!! options -disabled -!! input -
      -
    1. One -
    2. Two: -
        -
      1. Sub-one -
      2. Sub-two -
      -
    -!! result -
      -
    1. One -
    2. Two: -
        -
      1. Sub-one -
      2. Sub-two -
      -
    - -!! end - -!! test -HTML ordered list item with parameters oddity -!! input -
    1. One
    -!! result -
    1. One
    - -!! end - -!!test -bug 5918: autonumbering -!! input -[http://first/] [http://second] [ftp://ftp] - -ftp://inlineftp - -[mailto:enclosed@mail.tld With target] - -[mailto:enclosed@mail.tld] - -mailto:inline@mail.tld -!! result -

    [1] [2] [3] -

    ftp://inlineftp -

    With target -

    [4] -

    mailto:inline@mail.tld -

    -!! end - - -# -# Security and HTML correctness -# From Nick Jenkins' fuzz testing -# - -!! test -Fuzz testing: Parser13 -!! input -{| -| http://a| -!! result - - - - -
    -
    - -!! end - -!! test -Fuzz testing: Parser14 -!! input -== onmouseover= == -http://__TOC__ -!! result -

    [edit] onmouseover=

    -http://

    Contents

    - -
    - -!! end - -!! test -Fuzz testing: Parser14-table -!! input -==a== -{| STYLE=__TOC__ -!! result -

    [edit] a

    - - -
    - -!! end - -# Known to produce bogus xml (extra ) -!! test -Fuzz testing: Parser16 -!! options -noxml -!! input -{| -!https://|||||| -!! result - - - -
    https:// - -
    - -!! end - -!! test -Fuzz testing: Parser21 -!! input -{| -! irc://{{ftp://a" onmouseover="alert('hello world');" -| -!! result - - - - -
    irc://{{ftp://a" onmouseover="alert('hello world');" - -
    - -!! end - -!! test -Fuzz testing: Parser22 -!! input -http://===r:::https://b - -{| -!!result -

    http://===r:::https://b -

    - - -
    - -!! end - -# Known to produce bad XML for now -!! test -Fuzz testing: Parser24 -!! options -noxml -!! input -{| -{{{| -}}}} > -
    - -MOVE YOUR MOUSE CURSOR OVER THIS TEXT -| -!! result - -{{{| -}}}} > -
    - -MOVE YOUR MOUSE CURSOR OVER THIS TEXT -
    - - -
    -
    - -!! end - -# Note: the current result listed for this is not what the original one was, -# but the original bug was JavaScript injection, which is fixed in any case. -# It's not clear that the original result listed was any more correct than the -# current one. Original result: -#

    {{{| -#

    -#
  • -# }}}blah" onmouseover="alert('hello world');" align="left"MOVE MOUSE CURSOR OVER HERE -!!test -Fuzz testing: Parser25 (bug 6055) -!! input -{{{ -| -
  • -}}}blah" onmouseover="alert('hello world');" align="left"'''MOVE MOUSE CURSOR OVER HERE -!! result -

    <LI CLASS=blah" onmouseover="alert('hello world');" align="left"MOVE MOUSE CURSOR OVER HERE -

    -!! end - -!!test -Fuzz testing: URL adjacent extension (with space, clean) -!! options -!! input -http://example.com junk -!! result -

    http://example.com junk -

    -!!end - -!!test -Fuzz testing: URL adjacent extension (no space, dirty; nowiki) -!! options -!! input -http://example.comjunk -!! result -

    http://example.comjunk -

    -!!end - -!!test -Fuzz testing: URL adjacent extension (no space, dirty; pre) -!! options -!! input -http://example.com
    junk
    -!! result -http://example.com
    junk
    - -!!end - -!!test -Fuzz testing: image with bogus manual thumbnail -!!input -[[Image:foobar.jpg|thumbnail= ]] -!!result -
    Error creating thumbnail:
    - -!!end - -!! test -Fuzz testing: encoded newline in generated HTML replacements (bug 6577) -!! input -
    
    -!! result
    -
    
    -
    -!! end
    -
    -!! test
    -Parsing optional HTML elements (Bug 6171)
    -!! options
    -!! input
    -
    -  
    -    
    -    
    -  
    -
    Some tabular data More tabular data ... - And yet som tabular data
    -!! result - - - - - -
    Some tabular data More tabular data ... - And yet som tabular data
    - -!! end - -!! test -Correct handling of , (Bug 6171) -!! options -!! input - - - - - - -
    Some tabular data More tabular data ... And yet som tabular data
    -!! result - - - - - - -
    Some tabular data More tabular data ... And yet som tabular data
    - -!! end - - -!! test -Parsing crashing regression (fr:JavaScript) -!! input - -!! result -

    </body></x> -

    -!! end - -!! test -Inline wiki vs wiki block nesting -!! input -'''Bold paragraph - -New wiki paragraph -!! result -

    Bold paragraph -

    New wiki paragraph -

    -!! end - -!! test -Inline HTML vs wiki block nesting -!! options -disabled -!! input -Bold paragraph - -New wiki paragraph -!! result -

    Bold paragraph -

    New wiki paragraph -

    -!! end - -# Original result was this: -#

    boldboldbolditalics -#

    -# While that might be marginally more intuitive, maybe, the six-apostrophe -# construct is clearly pathological and the result stated here (which is what -# the parser actually does) is about as reasonable as anything. -!!test -Mixing markup for italics and bold -!! options -!! input -'''bold''''''bold''bolditalics''''' -!! result -

    'bold'boldbolditalics -

    -!! end - - -!! article -Xyzzyx -!! text -Article for special page transclusion test -!! endarticle - -!! test -Special page transclusion -!! options -!! input -{{Special:Prefixindex/Xyzzyx}} -!! result -


    -

    -
    Xyzzyx
    - -!! end - -!! test -Special page transclusion twice (bug 5021) -!! options -!! input -{{Special:Prefixindex/Xyzzyx}} -{{Special:Prefixindex/Xyzzyx}} -!! result -


    -

    -
    Xyzzyx
    -


    -

    -
    Xyzzyx
    - -!! end - -!! test -Transclusion of default MediaWiki message -!! input -{{MediaWiki:Mainpage}} -!!result -

    Main Page -

    -!! end - -!! test -Transclusion of nonexistent MediaWiki message -!! input -{{MediaWiki:Mainpagexxx}} -!!result -

    MediaWiki:Mainpagexxx -

    -!! end - -!! test -Transclusion of MediaWiki message with underscore -!! input -{{MediaWiki:history_short}} -!! result -

    History -

    -!! end - -!! test -Transclusion of MediaWiki message with space -!! input -{{MediaWiki:history short}} -!! result -

    History -

    -!! end - -!! test -Invalid header with following text -!! input -= x = y -!! result -

    = x = y -

    -!! end - - -!! test -Section extraction test (section 0) -!! options -section=0 -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -start -!! end - -!! test -Section extraction test (section 1) -!! options -section=1 -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -==a== -===aa=== -====aaa==== -!! end - -!! test -Section extraction test (section 2) -!! options -section=2 -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -===aa=== -====aaa==== -!! end - -!! test -Section extraction test (section 3) -!! options -section=3 -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -====aaa==== -!! end - -!! test -Section extraction test (section 4) -!! options -section=4 -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -==b== -===ba=== -===bb=== -====bba==== -===bc=== -!! end - -!! test -Section extraction test (section 5) -!! options -section=5 -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -===ba=== -!! end - -!! test -Section extraction test (section 6) -!! options -section=6 -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -===bb=== -====bba==== -!! end - -!! test -Section extraction test (section 7) -!! options -section=7 -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -====bba==== -!! end - -!! test -Section extraction test (section 8) -!! options -section=8 -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -===bc=== -!! end - -!! test -Section extraction test (section 9) -!! options -section=9 -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -==c== -===ca=== -!! end - -!! test -Section extraction test (section 10) -!! options -section=10 -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -===ca=== -!! end - -!! test -Section extraction test (nonexistent section 11) -!! options -section=11 -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -!! end - -!! test -Section extraction test with bogus heading (section 1) -!! options -section=1 -!! input -==a== -==bogus== not a legal section -==b== -!! result -==a== -==bogus== not a legal section -!! end - -!! test -Section extraction test with bogus heading (section 2) -!! options -section=2 -!! input -==a== -==bogus== not a legal section -==b== -!! result -==b== -!! end - -!! test -Section extraction test with comment after heading (section 1) -!! options -section=1 -!! input -==a== -==b== -==c== -!! result -==a== -!! end - -!! test -Section extraction test with comment after heading (section 2) -!! options -section=2 -!! input -==a== -==b== -==c== -!! result -==b== -!! end - -!! test -Section extraction test with bogus heading (section 1) -!! options -section=1 -!! input -==a== -==bogus== not a legal section -==b== -!! result -==a== -==bogus== not a legal section -!! end - -!! test -Section extraction test with bogus heading (section 2) -!! options -section=2 -!! input -==a== -==bogus== not a legal section -==b== -!! result -==b== -!! end - - -# Formerly testing for bug 2587, now resolved by the use of unmarked sections -# instead of respecting commented sections -!! test -Section extraction prefixed by comment (section 1) -!! options -section=1 -!! input -==sec1== -==sec2== -!!result -==sec2== -!!end - -!! test -Section extraction prefixed by comment (section 2) -!! options -section=2 -!! input -==sec1== -==sec2== -!!result - -!!end - - -# Formerly testing for bug 2607, now resolved by the use of unmarked sections -# instead of respecting HTML-style headings -!! test -Section extraction, mixed wiki and html (section 1) -!! options -section=1 -!! input -

    unmarked

    -unmarked -==1== -one -==2== -two -!! result -==1== -one -!! end - -!! test -Section extraction, mixed wiki and html (section 2) -!! options -section=2 -!! input -

    unmarked

    -unmarked -==1== -one -==2== -two -!! result -==2== -two -!! end - - -# Formerly testing for bug 3342 -!! test -Section extraction, heading surrounded by -!! options -section=1 -!! input -==unmarked== -==marked== -!! result -==marked== -!!end - - -!! test -Section replacement test (section 0) -!! options -replace=0,"xxx" -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -xxx - -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! end - -!! test -Section replacement test (section 1) -!! options -replace=1,"xxx" -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -start -xxx - -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! end - -!! test -Section replacement test (section 2) -!! options -replace=2,"xxx" -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -start -==a== -xxx - -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! end - -!! test -Section replacement test (section 3) -!! options -replace=3,"xxx" -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -start -==a== -===aa=== -xxx - -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! end - -!! test -Section replacement test (section 4) -!! options -replace=4,"xxx" -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -start -==a== -===aa=== -====aaa==== -xxx - -==c== -===ca=== -!! end - -!! test -Section replacement test (section 5) -!! options -replace=5,"xxx" -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -start -==a== -===aa=== -====aaa==== -==b== -xxx - -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! end - -!! test -Section replacement test (section 6) -!! options -replace=6,"xxx" -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -xxx - -===bc=== -==c== -===ca=== -!! end - -!! test -Section replacement test (section 7) -!! options -replace=7,"xxx" -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -xxx - -===bc=== -==c== -===ca=== -!! end - -!! test -Section replacement test (section 8) -!! options -replace=8,"xxx" -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -xxx - -==c== -===ca=== -!!end - -!! test -Section replacement test (section 9) -!! options -replace=9,"xxx" -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -xxx -!! end - -!! test -Section replacement test (section 10) -!! options -replace=10,"xxx" -!! input -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -===ca=== -!! result -start -==a== -===aa=== -====aaa==== -==b== -===ba=== -===bb=== -====bba==== -===bc=== -==c== -xxx -!! end - -!! test -Section replacement test with initial whitespace (bug 13728) -!! options -replace=2,"xxx" -!! input - Preformatted initial line -==a== -===a=== -!! result - Preformatted initial line -==a== -xxx -!! end - - -!! test -Section extraction, heading followed by pre with 20 spaces (bug 6398) -!! options -section=1 -!! input -==a== - a -!! result -==a== - a -!! end - -!! test -Section extraction, heading followed by pre with 19 spaces (bug 6398 sanity check) -!! options -section=1 -!! input -==a== - a -!! result -==a== - a -!! end - - -!! test -Section extraction,
     around bogus header (bug 10309)
    -!! options
    -noxml section=2
    -!! input
    -== Section One ==
    -
    -=======
    -
    - -== Section Two == -stuff -!! result -== Section Two == -stuff -!! end - -!! test -Section replacement,
     around bogus header (bug 10309)
    -!! options
    -noxml replace=2,"xxx"
    -!! input
    -== Section One ==
    -
    -=======
    -
    - -== Section Two == -stuff -!! result -== Section One == -
    -=======
    -
    - -xxx -!! end - - - -!! test -Handling of in URLs -!! input -**irc:// a -!! result - - -!!end - -!! test -5 quotes, code coverage +1 line -!! input -''''' -!! result -!! end - -!! test -Special:Search page linking. -!! input -{{Special:search}} -!! result -

    Special:Search -

    -!! end - -!! test -Say the magic word -!! input -* {{PAGENAME}} -* {{BASEPAGENAME}} -* {{SUBPAGENAME}} -* {{SUBPAGENAMEE}} -* {{BASEPAGENAME}} -* {{BASEPAGENAMEE}} -* {{TALKPAGENAME}} -* {{TALKPAGENAMEE}} -* {{SUBJECTPAGENAME}} -* {{SUBJECTPAGENAMEE}} -* {{NAMESPACEE}} -* {{NAMESPACE}} -* {{TALKSPACE}} -* {{TALKSPACEE}} -* {{SUBJECTSPACE}} -* {{SUBJECTSPACEE}} -* {{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}} -!! result -
    • Parser test -
    • Parser test -
    • Parser test -
    • Parser_test -
    • Parser test -
    • Parser_test -
    • Talk:Parser test -
    • Talk:Parser_test -
    • Parser test -
    • Parser_test -
    • -
    • -
    • Talk -
    • Talk -
    • -
    • -
    • Template:Dynamic -
    - -!! end -### Note: Above tests excludes the "{{NUMBEROFADMINS}}" magic word because it generates a MySQL error when included. - -!! test -Gallery -!! input - -image1.png | -image2.gif||||| - -image3| -image4 |300px| centre - image5.svg| http:///////// -[[x|xx]]]] -* image6 - -!! result - - - - - - - - - - - - - -!! end - -!! test -HTML Hex character encoding (spells the word "JavaScript") -!! input -JavaScript -!! result -

    JavaScript -

    -!! end - -!! test -__FORCETOC__ override -!! input -__NEWSECTIONLINK__ -__FORCETOC__ -!! result -


    -

    -!! end - -!! test -ISBN code coverage -!! input -ISBN 978-0-1234-56 789 -!! result -

    ISBN 978-0-1234-56 789 -

    -!! end - -!! test -ISBN followed by 5 spaces -!! input -ISBN -!! result -

    ISBN -

    -!! end - -!! test -Double ISBN -!! input -ISBN ISBN 1234567890 -!! result -

    ISBN ISBN 1234567890 -

    -!! end - -!! test -Double RFC -!! input -RFC RFC 1234 -!! result -

    RFC RFC 1234 -

    -!! end - -!! test -Double RFC with a wiki link -!! input -RFC [[RFC 1234]] -!! result -

    RFC RFC 1234 -

    -!! end - -!! test -RFC code coverage -!! input -RFC 983 987 -!! result -

    RFC 983 987 -

    -!! end - -!! test -Centre-aligned image -!! input -[[Image:foobar.jpg|centre]] -!! result -
    Foobar.jpg
    - -!!end - -!! test -None-aligned image -!! input -[[Image:foobar.jpg|none]] -!! result -
    Foobar.jpg
    - -!!end - -!! test -Width + Height sized image (using px) (height is ignored) -!! input -[[Image:foobar.jpg|640x480px]] -!! result -

    Foobar.jpg -

    -!!end - -!! test -Width-sized image (using px, no following whitespace) -!! input -[[Image:foobar.jpg|640px]] -!! result -

    Foobar.jpg -

    -!!end - -!! test -Width-sized image (using px, with following whitespace - test regression from r39467) -!! input -[[Image:foobar.jpg|640px ]] -!! result -

    Foobar.jpg -

    -!!end - -!! test -Width-sized image (using px, with preceding whitespace - test regression from r39467) -!! input -[[Image:foobar.jpg| 640px]] -!! result -

    Foobar.jpg -

    -!!end - -!! test -Another italics / bold test -!! input - ''' ''x' -!! result -
    ' x'
    -
    -!!end - -# Note the results may be incorrect, as parserTest output included this: -# XML error: Mismatched tag at byte 6120: -# ...
    -
    -
    -
    -
    -
    -
    - -!!end - - -# Images with the "|" character in external URLs in comment tags; Eats half the comment, leaves unmatched "" tag. -!! test -Images with the "|" character in the comment -!! options -disabled -!! input -[[image:Foobar.jpg|thumb|An [http://test/?param1=|left|¶m2=|x external] URL]] -!! result -
    An external URL
    An external URL
    - -!!end - -!! test -[Before] HTML without raw HTML enabled ($wgRawHtml==false) -!! input - -!! result -

    <html><script>alert(1);</script></html> -

    -!! end - -!! test -HTML with raw HTML ($wgRawHtml==true) -!! options -rawhtml -!! input - -!! result -

    -

    -!! end - -!! test -Parents of subpages, one level up -!! options -subpage title=[[Subpage test/L1/L2/L3]] -!! input -[[../|L2]] -!! result -

    L2 -

    -!! end - - -!! test -Parents of subpages, one level up, not named -!! options -subpage title=[[Subpage test/L1/L2/L3]] -!! input -[[../]] -!! result -

    Subpage test/L1/L2 -

    -!! end - - - -!! test -Parents of subpages, two levels up -!! options -disabled -subpage title=[[Subpage test/L1/L2/L3]] -!! input -[[../../|L1]]2 -!! result -

    L1 -

    -!! end - -!! test -Parents of subpages, two levels up, without trailing slash or name. -!! options -subpage title=[[Subpage test/L1/L2/L3]] -!! input -[[../..]] -!! result -

    [[../..]] -

    -!! end - -!! test -Parents of subpages, two levels up, with lots of extra trailing slashes. -!! options -subpage title=[[Subpage test/L1/L2/L3]] -!! input -[[../../////]] -!! result -

    /// -

    -!! end - -!! test -Definition list code coverage -!! input -; title : def -; title : def -;title: def -!! result -
    title  
    def -
    title 
    def -
    title
    def -
    - -!! end - -!! test -Don't fall for the self-closing div -!! input -
    hello world
    -!! result -
    hello world
    - -!! end - -!! test -MSGNW magic word -!! input -{{MSGNW:msg}} -!! result -

    [[:Template:Msg]] -

    -!! end - -!! test -RAW magic word -!! input -{{RAW:QUERTY}} -!! result -

    Template:QUERTY -

    -!! end - -# This isn't needed for XHTML conformance, but would be handy as a fallback security measure -!! test -Always escape literal '>' in output, not just after '<' -!! input -><> -!! result -

    ><> -

    -!! end - -!! test -Template caching -!! input -{{Test}} -{{Test}} -!! result -

    This is a test template -This is a test template -

    -!! end - - -!! article -MediaWiki:Fake -!! text -==header== -!! endarticle - -!! test -Inclusion of !userCanEdit() content -!! input -{{MediaWiki:Fake}} -!! result -

    [edit] header

    - -!! end - - -!! test -Out-of-order TOC heading levels -!! input -==2== -======6====== -===3=== -=1= -=====5===== -==2== -!! result -

    Contents

    - -
    -

    [edit] 2

    -
    [edit] 6
    -

    [edit] 3

    -

    [edit] 1

    -
    [edit] 5
    -

    [edit] 2

    - -!! end - - -!! test -ISBN with a dummy number -!! input -ISBN --- -!! result -

    ISBN --- -

    -!! end - - -!! test -ISBN with space-delimited number -!! input -ISBN 92 9017 032 8 -!! result -

    ISBN 92 9017 032 8 -

    -!! end - - -!! test -ISBN with multiple spaces, no number -!! input -ISBN foo -!! result -

    ISBN foo -

    -!! end - - -!! test -ISBN length -!! input -ISBN 123456789 - -ISBN 1234567890 - -ISBN 12345678901 -!! result -

    ISBN 123456789 -

    ISBN 1234567890 -

    ISBN 12345678901 -

    -!! end - - -!! test -ISBN with trailing year (bug 8110) -!! input -ISBN 1-234-56789-0 - 2006 - -ISBN 1 234 56789 0 - 2006 -!! result -

    ISBN 1-234-56789-0 - 2006 -

    ISBN 1 234 56789 0 - 2006 -

    -!! end - - -!! test -anchorencode -!! input -{{anchorencode:foo bar©#%n}} -!! result -

    foo_bar.C2.A9.23.25n -

    -!! end - - -!! test -Bug 8293: Use of center tag ruins paragraph formatting -!! input -
    -foo -
    - -bar - - baz -!! result -
    -

    foo -

    -
    -

    bar -

    -
    baz
    -
    -!! end - - -### -### Language variants related tests -### -!! test -Self-link in language variants -!! options -title=[[Dunav]] language=sr -!! input -Both [[Dunav]] and [[Дунав]] are names for this river. -!! result -

    Both Dunav and Дунав are names for this river. -

    -!!end - - -!! test -Link to pages in language variants -!! options -language=sr -!! input -Main Page can be written as [[Маин Паге]] -!! result -

    Main Page can be written as Маин Паге -

    -!!end - - -!! test -Multiple links to pages in language variants -!! options -language=sr -!! input -[[Main Page]] can be written as [[Маин Паге]] same as [[Маин Паге]]. -!! result -

    Main Page can be written as Маин Паге same as Маин Паге. -

    -!!end - - -!! test -Simple template in language variants -!! options -language=sr -!! input -{{тест}} -!! result -

    This is a test template -

    -!! end - - -!! test -Template with explicit namespace in language variants -!! options -language=sr -!! input -{{Template:тест}} -!! result -

    This is a test template -

    -!! end - - -!! test -Basic test for template parameter in language variants -!! options -language=sr -!! input -{{парамтест|param=foo}} -!! result -

    This is a test template with parameter foo -

    -!! end - - -!! test -Simple category in language variants -!! options -language=sr cat -!! input -[[Category:МедиаWики Усер'с Гуиде]] -!! result -MediaWiki User's Guide -!! end - - -!! test -Stripping -{}- tags (language variants) -!! options -language=sr -!! input -Latin proverb: -{Ne nuntium necare}- -!! result -

    Latin proverb: Ne nuntium necare -

    -!! end - - -!! test -Prevent conversion with -{}- tags (language variants) -!! options -language=sr variant=sr-ec -!! input -Latinski: -{Ne nuntium necare}- -!! result -

    Латински: Ne nuntium necare -

    -!! end - - -!! test -Prevent conversion of text with -{}- tags (language variants) -!! options -language=sr variant=sr-ec -!! input -Latinski: -{Ne nuntium necare}- -!! result -

    Латински: Ne nuntium necare -

    -!! end - - -!! test -Prevent conversion of links with -{}- tags (language variants) -!! options -language=sr variant=sr-ec -!! input --{[[Main Page]]}- -!! result -

    Main Page -

    -!! end - - -!! test --{}- tags within headlines (within html for parserConvert()) -!! options -language=sr variant=sr-ec -!! input -== -{Naslov}- == -!! result -

    [уреди] Naslov

    - -!! end - - -!! test -Explicit definition of language variant alternatives -!! options -language=zh variant=zh-tw -!! input --{zh:China;zh-tw:Taiwan}-, not China -!! result -

    Taiwan, not China -

    -!! end - - -!! test -Explicit session-wise language variant mapping (A flag and - flag) -!! options -language=zh variant=zh-tw -!! input -Taiwan is not China. -But -{A|zh:China;zh-tw:Taiwan}- is China, -(This-{-|zh:China;zh-tw:Taiwan}- should be stripped!) -and -{China}- is China. -!! result -

    Taiwan is not China. -But Taiwan is Taiwan, -(This should be stripped!) -and China is China. -

    -!! end - -!! test -Explicit session-wise language variant mapping (H flag for hide) -!! options -language=zh variant=zh-tw -!! input -(This-{H|zh:China;zh-tw:Taiwan}- should be stripped!) -Taiwan is China. -!! result -

    (This should be stripped!) -Taiwan is Taiwan. -

    -!! end - -!! test -Adding explicit conversion rule for title (T flag) -!! options -language=zh variant=zh-tw showtitle -!! input -Should be stripped-{T|zh:China;zh-tw:Taiwan}-! -!! result -Taiwan -

    Should be stripped! -

    -!! end - -!! test -Testing that changing the language variant here in the tests actually works -!! options -language=zh variant=zh showtitle -!! input -Should be stripped-{T|zh:China;zh-tw:Taiwan}-! -!! result -China -

    Should be stripped! -

    -!! end - -!! test -Bug 24072: more test on conversion rule for title -!! options -language=zh variant=zh-tw showtitle -!! input -This should be stripped-{T|zh:China;zh-tw:Taiwan}-! -This won't take interferes with the title rule-{H|zh:Beijing;zh-tw:Taipei}-. -!! result -Taiwan -

    This should be stripped! -This won't take interferes with the title rule. -

    -!! end - -!! test -Raw output of variant escape tags (R flag) -!! options -language=zh variant=zh-tw -!! input -Raw: -{R|zh:China;zh-tw:Taiwan}- -!! result -

    Raw: zh:China;zh-tw:Taiwan -

    -!! end - -!! test -Nested using of manual convert syntax -!! options -language=zh variant=zh-hk -!! input -Nested: -{zh-hans:Hi -{zh-cn:China;zh-sg:Singapore;}-;zh-hant:Hello -{zh-tw:Taiwan;zh-hk:H-{ong}- K-{}-ong;}-;}-! -!! result -

    Nested: Hello Hong Kong! -

    -!! end - -!! test -Do not convert roman numbers to language variants -!! options -language=sr variant=sr-ec -!! input -Fridrih IV je car. -!! result -

    Фридрих IV је цар. -

    -!! end - -!! test -Unclosed language converter markup "-{" -!! options -language=sr -!! input --{T|hello -!! result -

    -{T|hello -

    -!! end - -!! test -Don't convert raw rule "-{R|=>}-" to "=>" -!! options -language=sr -!! input --{R|=>}- -!! result -

    => -

    -!!end - -!!article -Template:Bullet -!!text -* Bar -!!endarticle - -!! test -Bug 529: Uncovered bullet -!! input -* Foo {{bullet}} -!! result -
    • Foo -
    • Bar -
    - -!! end - -!! test -Bug 529: Uncovered table already at line-start -!! input -x - -{{table}} -y -!! result -

    x -

    - - - - -
    1 2 -
    3 4 -
    -

    y -

    -!! end - -!! test -Bug 529: Uncovered bullet in parser function result -!! input -* Foo {{lc:{{bullet}} }} -!! result -
    • Foo -
    • bar -
    - -!! end - -!! test -Bug 5678: Double-parsed template argument -!! input -{{lc:{{{1}}}|hello}} -!! result -

    {{{1}}} -

    -!! end - -!! test -Bug 5678: Double-parsed template invocation -!! input -{{lc:{{paramtest {{!}} param = hello }} }} -!! result -

    {{paramtest | param = hello }} -

    -!! end - -!! test -Case insensitivity of parser functions for non-ASCII characters (bug 8143) -!! options -language=cs -title=[[Main Page]] -!! input -{{PRVNÍVELKÉ:ěščř}} -{{prvnívelké:ěščř}} -{{PRVNÍMALÉ:ěščř}} -{{prvnímalé:ěščř}} -{{MALÁ:ěščř}} -{{malá:ěščř}} -{{VELKÁ:ěščř}} -{{velká:ěščř}} -!! result -

    Ěščř -Ěščř -ěščř -ěščř -ěščř -ěščř -ĚŠČŘ -ĚŠČŘ -

    -!! end - -!! test -Morwen/13: Unclosed link followed by heading -!! input -[[link -==heading== -!! result -

    [[link -

    -

    [edit] heading

    - -!! end - -!! test -HHP2.1: Heuristics for headings in preprocessor parenthetical structures -!! input -{{foo| -=heading= -!! result -

    {{foo| -

    -

    heading

    - -!! end - -!! test -HHP2.2: Heuristics for headings in preprocessor parenthetical structures -!! input -{{foo| -==heading== -!! result -

    {{foo| -

    -

    [edit] heading

    - -!! end - -!! test -Tildes in comments -!! options -pst -!! input - -!! result - -!! end - -!! test -Paragraphs inside divs (no extra line breaks) -!! input -
    Line one - -Line two
    -!! result -
    Line one -Line two
    - -!! end - -!! test -Paragraphs inside divs (extra line break on open) -!! input -
    -Line one - -Line two
    -!! result -
    -

    Line one -

    -Line two
    - -!! end - -!! test -Paragraphs inside divs (extra line break on close) -!! input -
    Line one - -Line two -
    -!! result -
    Line one -

    Line two -

    -
    - -!! end - -!! test -Paragraphs inside divs (extra line break on open and close) -!! input -
    -Line one - -Line two -
    -!! result -
    -

    Line one -

    Line two -

    -
    - -!! end - -# Bug 6200:
    should behave like
    with respect to line breaks -!! test -Bug 6200: paragraphs inside blockquotes (no extra line breaks) -!! options -disabled -!! input -
    Line one - -Line two
    -!! result -
    Line one -Line two
    - -!! end - -!! test -Bug 6200: paragraphs inside blockquotes (extra line break on open) -!! options -disabled -!! input -
    -Line one - -Line two
    -!! result -
    -

    Line one -

    -Line two
    - -!! end - -!! test -Bug 6200: paragraphs inside blockquotes (extra line break on close) -!! options -disabled -!! input -
    Line one - -Line two -
    -!! result -
    Line one -

    Line two -

    -
    - -!! end - -!! test -Bug 6200: paragraphs inside blockquotes (extra line break on open and close) -!! options -disabled -!! input -
    -Line one - -Line two -
    -!! result -
    -

    Line one -

    Line two -

    -
    - -!! end - -!! test -Paragraphs inside blockquotes/divs (no extra line breaks) -!! input -
    Line one - -Line two
    -!! result -
    Line one -Line two
    - -!! end - -!! test -Paragraphs inside blockquotes/divs (extra line break on open) -!! input -
    -Line one - -Line two
    -!! result -
    -

    Line one -

    -Line two
    - -!! end - -!! test -Paragraphs inside blockquotes/divs (extra line break on close) -!! input -
    Line one - -Line two -
    -!! result -
    Line one -

    Line two -

    -
    - -!! end - -!! test -Paragraphs inside blockquotes/divs (extra line break on open and close) -!! input -
    -Line one - -Line two -
    -!! result -
    -

    Line one -

    Line two -

    -
    - -!! end - -!! test -Interwiki links trounced by replaceExternalLinks after early LinkHolderArray expansion -!! options -wgLinkHolderBatchSize=0 -!! input -[[meatball:1]] -[[meatball:2]] -[[meatball:3]] -!! result -

    meatball:1 -meatball:2 -meatball:3 -

    -!! end - -!! test -Free external link invading image caption -!! input -[[Image:Foobar.jpg|thumb|http://x|hello]] -!! result -
    hello
    - -!! end - -!! test -Bug 15196: localised external link numbers -!! options -language=fa -!! input -[http://en.wikipedia.org/] -!! result -

    [۱] -

    -!! end - -!! test -Multibyte character in padleft -!! input -{{padleft:-Hello|7|Æ}} -!! result -

    Æ-Hello -

    -!! end - -!! test -Multibyte character in padright -!! input -{{padright:Hello-|7|Æ}} -!! result -

    Hello-Æ -

    -!! end - -!! test -Formatted date -!! config -wgUseDynamicDates=1 -!! input -[[2009-03-24]] -!! result -

    2009-03-24 -

    -!!end - -!!test -formatdate parser function -!!input -{{#formatdate:2009-03-24}} -!! result -

    2009-03-24 -

    -!! end - -!!test -formatdate parser function, with default format -!!input -{{#formatdate:2009-03-24|mdy}} -!! result -

    March 24, 2009 -

    -!! end - -!! test -Linked date with autoformatting disabled -!! config -wgUseDynamicDates=false -!! input -[[2009-03-24]] -!! result -

    2009-03-24 -

    -!! end - -!! test -Spacing of numbers in formatted dates -!! input -{{#formatdate:January 15}} -!! result -

    January 15 -

    -!! end - -!! test -Spacing of numbers in formatted dates (linked) -!! config -wgUseDynamicDates=true -!! input -[[January 15]] -!! result -

    January 15 -

    -!! end - -# -# -# - -# -# Edit comments -# - -!! test -Edit comment with link -!! options -comment -!! input -I like the [[Main Page]] a lot -!! result -I like the Main Page a lot -!!end - -!! test -Edit comment with link and link text -!! options -comment -!! input -I like the [[Main Page|best pages]] a lot -!! result -I like the best pages a lot -!!end - -!! test -Edit comment with link and link text with suffix -!! options -comment -!! input -I like the [[Main Page|best page]]s a lot -!! result -I like the best pages a lot -!!end - -!! test -Edit comment with section link (non-local, eg in history list) -!! options -comment title=[[Main Page]] -!! input -/* External links */ removed bogus entries -!! result -External links: removed bogus entries -!!end - -!! test -Edit comment with section link (local, eg in diff view) -!! options -comment local title=[[Main Page]] -!! input -/* External links */ removed bogus entries -!! result -External links: removed bogus entries -!!end - -!! test -Edit comment with subpage link (bug 14080) -!! options -comment -subpage -title=[[Subpage test]] -!! input -Poked at a [[/subpage]] here... -!! result -Poked at a /subpage here... -!!end - -!! test -Edit comment with subpage link and link text (bug 14080) -!! options -comment -subpage -title=[[Subpage test]] -!! input -Poked at a [[/subpage|neat little page]] here... -!! result -Poked at a neat little page here... -!!end - -!! test -Edit comment with bogus subpage link in non-subpage NS (bug 14080) -!! options -comment -title=[[Subpage test]] -!! input -Poked at a [[/subpage]] here... -!! result -Poked at a /subpage here... -!!end - -!! test -Edit comment with bare anchor link (local, as on diff) -!! options -comment -local -title=[[Main Page]] -!!input -[[#section]] -!! result -#section -!! end - -!! test -Edit comment with bare anchor link (non-local, as on history) -!! options -comment -title=[[Main Page]] -!!input -[[#section]] -!! result -#section -!! end - -!!article -MediaWiki:bad image list -!!text -* [[File:Bad.jpg]] except [[Nasty page]] -!!endarticle - -!! test -Bad images - basic functionality -!! input -[[File:Bad.jpg]] -!! result -!! end - -!! test -Bad images - bug 16039: text after bad image disappears -!! input -Foo bar -[[File:Bad.jpg]] -Bar foo -!! result -

    Foo bar -

    Bar foo -

    -!! end - -!! test -Verify that displaytitle works (bug #22501) no displaytitle -!! options -showtitle -!! config -wgAllowDisplayTitle=true -wgRestrictDisplayTitle=false -!! input -this is not the the title -!! result -Parser test -

    this is not the the title -

    -!! end - -!! test -Verify that displaytitle works (bug #22501) RestrictDisplayTitle=false -!! options -showtitle -title=[[Screen]] -!! config -wgAllowDisplayTitle=true -wgRestrictDisplayTitle=false -!! input -this is not the the title -{{DISPLAYTITLE:whatever}} -!! result -whatever -

    this is not the the title -

    -!! end - -!! test -Verify that displaytitle works (bug #22501) RestrictDisplayTitle=true mismatch -!! options -showtitle -title=[[Screen]] -!! config -wgAllowDisplayTitle=true -wgRestrictDisplayTitle=true -!! input -this is not the the title -{{DISPLAYTITLE:whatever}} -!! result -Screen -

    this is not the the title -

    -!! end - -!! test -Verify that displaytitle works (bug #22501) RestrictDisplayTitle=true matching -!! options -showtitle -title=[[Screen]] -!! config -wgAllowDisplayTitle=true -wgRestrictDisplayTitle=true -!! input -this is not the the title -{{DISPLAYTITLE:screen}} -!! result -screen -

    this is not the the title -

    -!! end - -!! test -Verify that displaytitle works (bug #22501) AllowDisplayTitle=false -!! options -showtitle -title=[[Screen]] -!! config -wgAllowDisplayTitle=false -!! input -this is not the the title -{{DISPLAYTITLE:screen}} -!! result -Screen -

    this is not the the title -Template:DISPLAYTITLE:screen -

    -!! end - -!! test -Verify that displaytitle works (bug #22501) AllowDisplayTitle=false no DISPLAYTITLE -!! options -showtitle -title=[[Screen]] -!! config -wgAllowDisplayTitle=false -!! input -this is not the the title -!! result -Screen -

    this is not the the title -

    -!! end - - -TODO: -more images -more tables -math -character entities -and much more -Try for 100% code coverage diff --git a/maintenance/parserTestsParserHook.php b/maintenance/parserTestsParserHook.php deleted file mode 100644 index f55cd0e4..00000000 --- a/maintenance/parserTestsParserHook.php +++ /dev/null @@ -1,34 +0,0 @@ - - * @copyright Copyright © 2005, 2006 Ævar Arnfjörð Bjarmason - * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later - */ - -$wgHooks['ParserTestParser'][] = 'wfParserTestParserHookSetup'; - -function wfParserTestParserHookSetup( &$parser ) { - $parser->setHook( 'tag', 'wfParserTestParserHookHook' ); - - return true; -} - -function wfParserTestParserHookHook( $in, $argv ) { - ob_start(); - var_dump( - $in, - $argv - ); - $ret = ob_get_clean(); - - return "
    \n$ret
    "; -} - diff --git a/maintenance/parserTestsParserTime.php b/maintenance/parserTestsParserTime.php deleted file mode 100644 index c5903f25..00000000 --- a/maintenance/parserTestsParserTime.php +++ /dev/null @@ -1,26 +0,0 @@ - - * @copyright Copyright © 2005, 2006 Ævar Arnfjörð Bjarmason - * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later - */ - -$wgHooks['ParserGetVariableValueTs'][] = 'wfParserTimeSetup'; - -function wfParserTimeSetup( &$parser, &$ts ) { - $ts = 123; //$ perl -le 'print scalar localtime 123' ==> Thu Jan 1 00:02:03 1970 - - return true; -} - diff --git a/maintenance/parserTestsStaticParserHook.php b/maintenance/parserTestsStaticParserHook.php deleted file mode 100644 index 98c4bba1..00000000 --- a/maintenance/parserTestsStaticParserHook.php +++ /dev/null @@ -1,47 +0,0 @@ - - * @copyright Copyright © 2005, 2006 Ævar Arnfjörð Bjarmason - * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later - */ - -$wgHooks['ParserTestParser'][] = 'wfParserTestStaticParserHookSetup'; - -function wfParserTestStaticParserHookSetup( &$parser ) { - $parser->setHook( 'statictag', 'wfParserTestStaticParserHookHook' ); - - return true; -} - -function wfParserTestStaticParserHookHook( $in, $argv, $parser ) { - if ( ! count( $argv ) ) { - $parser->static_tag_buf = $in; - return ''; - } else if ( count( $argv ) === 1 && isset( $argv['action'] ) - && $argv['action'] === 'flush' && $in === null ) - { - // Clear the buffer, we probably don't need to - if ( isset( $parser->static_tag_buf ) ) { - $tmp = $parser->static_tag_buf; - } else { - $tmp = ''; - } - $parser->static_tag_buf = null; - return $tmp; - } else - // wtf? - return - "\nCall this extension as string or as" . - " , not in any other way.\n" . - "text: " . var_export( $in, true ) . "\n" . - "argv: " . var_export( $argv, true ) . "\n"; -} - diff --git a/maintenance/patchSql.php b/maintenance/patchSql.php index 69cb0f56..1f96d62c 100644 --- a/maintenance/patchSql.php +++ b/maintenance/patchSql.php @@ -21,7 +21,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class PatchSql extends Maintenance { public function __construct() { @@ -36,14 +36,14 @@ class PatchSql extends Maintenance { public function execute() { $dbw = wfGetDB( DB_MASTER ); - foreach( $this->mArgs as $arg ) { + foreach ( $this->mArgs as $arg ) { $files = array( $arg, - DatabaseBase::patchPath( $arg ), - DatabaseBase::patchPath( "patch-$arg.sql" ), + $dbw->patchPath( $arg ), + $dbw->patchPath( "patch-$arg.sql" ), ); - foreach( $files as $file ) { - if( file_exists( $file ) ) { + foreach ( $files as $file ) { + if ( file_exists( $file ) ) { $this->output( "$file ...\n" ); $dbw->sourceFile( $file ); continue 2; @@ -56,4 +56,4 @@ class PatchSql extends Maintenance { } $maintClass = "PatchSql"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/populateCategory.inc b/maintenance/populateCategory.inc deleted file mode 100644 index deca4530..00000000 --- a/maintenance/populateCategory.inc +++ /dev/null @@ -1,85 +0,0 @@ -selectRow( - 'updatelog', - '1', - array( 'ul_key' => 'populate category' ), - __FUNCTION__ - ); - if( $row ) { - wfOut( "Category table already populated. Use php ". - "maintenance/populateCategory.php\n--force from the command line ". - "to override.\n" ); - return true; - } - } - - $maxlag = intval( $maxlag ); - $throttle = intval( $throttle ); - $force = (bool)$force; - if( $begin !== '' ) { - $where = 'cl_to > '.$dbw->addQuotes( $begin ); - } else { - $where = null; - } - $i = 0; - - while( true ) { - # Find which category to update - $row = $dbw->selectRow( - 'categorylinks', - 'cl_to', - $where, - __FUNCTION__, - array( - 'ORDER BY' => 'cl_to' - ) - ); - if( !$row ) { - # Done, hopefully. - break; - } - $name = $row->cl_to; - $where = 'cl_to > '.$dbw->addQuotes( $name ); - - # Use the row to update the category count - $cat = Category::newFromName( $name ); - if( !is_object( $cat ) ) { - wfOut( "The category named $name is not valid?!\n" ); - } else { - $cat->refreshCounts(); - } - - ++$i; - if( !($i % REPORTING_INTERVAL) ) { - wfOut( "$name\n" ); - wfWaitForSlaves( $maxlag ); - } - usleep( $throttle*1000 ); - } - - if( $dbw->insert( - 'updatelog', - array( 'ul_key' => 'populate category' ), - __FUNCTION__, - 'IGNORE' - ) - ) { - wfOut( "Category population complete.\n" ); - return true; - } else { - wfOut( "Could not insert category population row.\n" ); - return false; - } -} diff --git a/maintenance/populateCategory.php b/maintenance/populateCategory.php index bf84bb0a..4f494e15 100644 --- a/maintenance/populateCategory.php +++ b/maintenance/populateCategory.php @@ -1,13 +1,13 @@ addOption( 'begin', 'Only do categories whose names are alphabetically after the provided name', false, true ); $this->addOption( 'max-slave-lag', 'If slave lag exceeds this many seconds, wait until it drops before continuing. Default: 10', false, true ); $this->addOption( 'throttle', 'Wait this many milliseconds after each category. Default: 0', false, true ); $this->addOption( 'force', 'Run regardless of whether the database says it\'s been run already' ); } - + public function execute() { $begin = $this->getOption( 'begin', '' ); $maxSlaveLag = $this->getOption( 'max-slave-lag', 10 ); @@ -47,81 +48,80 @@ TEXT; private function doPopulateCategory( $begin, $maxlag, $throttle, $force ) { $dbw = wfGetDB( DB_MASTER ); - - if( !$force ) { + + if ( !$force ) { $row = $dbw->selectRow( 'updatelog', '1', array( 'ul_key' => 'populate category' ), - __FUNCTION__ + __METHOD__ ); - if( $row ) { - $this->output( "Category table already populated. Use php ". - "maintenance/populateCategory.php\n--force from the command line ". + if ( $row ) { + $this->output( "Category table already populated. Use php " . + "maintenance/populateCategory.php\n--force from the command line " . "to override.\n" ); return true; } } - + $maxlag = intval( $maxlag ); $throttle = intval( $throttle ); - $force = (bool)$force; - if( $begin !== '' ) { - $where = 'cl_to > '.$dbw->addQuotes( $begin ); + if ( $begin !== '' ) { + $where = 'cl_to > ' . $dbw->addQuotes( $begin ); } else { $where = null; } $i = 0; - - while( true ) { + + while ( true ) { # Find which category to update $row = $dbw->selectRow( 'categorylinks', 'cl_to', $where, - __FUNCTION__, + __METHOD__, array( 'ORDER BY' => 'cl_to' ) ); - if( !$row ) { + if ( !$row ) { # Done, hopefully. break; } $name = $row->cl_to; - $where = 'cl_to > '.$dbw->addQuotes( $name ); - + $where = 'cl_to > ' . $dbw->addQuotes( $name ); + # Use the row to update the category count $cat = Category::newFromName( $name ); - if( !is_object( $cat ) ) { + if ( !is_object( $cat ) ) { $this->output( "The category named $name is not valid?!\n" ); } else { $cat->refreshCounts(); } - + ++$i; - if( !($i % self::REPORTING_INTERVAL) ) { + if ( !( $i % self::REPORTING_INTERVAL ) ) { $this->output( "$name\n" ); wfWaitForSlaves( $maxlag ); } - usleep( $throttle*1000 ); + usleep( $throttle * 1000 ); } - - if( $dbw->insert( + + if ( $dbw->insert( 'updatelog', array( 'ul_key' => 'populate category' ), - __FUNCTION__, + __METHOD__, 'IGNORE' ) ) { - wfOut( "Category population complete.\n" ); + $this->output( "Category population complete.\n" ); return true; } else { - wfOut( "Could not insert category population row.\n" ); + $this->output( "Could not insert category population row.\n" ); return false; } } } $maintClass = "PopulateCategory"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/populateLogSearch.inc b/maintenance/populateLogSearch.inc deleted file mode 100644 index b5e34fb7..00000000 --- a/maintenance/populateLogSearch.inc +++ /dev/null @@ -1,80 +0,0 @@ -selectField( 'logging', 'MIN(log_id)', false, __FUNCTION__ ); - if( !$start ) { - echo "Nothing to do.\n"; - return true; - } - $end = $db->selectField( 'logging', 'MAX(log_id)', false, __FUNCTION__ ); - - # Do remaining chunk - $end += LOG_SEARCH_BATCH_SIZE - 1; - $blockStart = $start; - $blockEnd = $start + LOG_SEARCH_BATCH_SIZE - 1; - while( $blockEnd <= $end ) { - echo "...doing log_id from $blockStart to $blockEnd\n"; - $cond = array("log_id BETWEEN $blockStart AND $blockEnd"); - # Applicable log types - $cond['log_type'] = array('delete','suppress'); - $res = $db->select( 'logging', '*', $cond, __FUNCTION__ ); - $batch = array(); - while( $row = $db->fetchObject( $res ) ) { - // RevisionDelete logs - revisions - if( LogEventsList::typeAction( $row, array('delete','suppress'), 'revision' ) ) { - $params = LogPage::extractParams( $row->log_params ); - // Param format: [ ] - if( count($params) >= 2 ) { - $field = RevisionDeleter::getRelationType($params[0]); - // B/C, the params may start with a title key - if( $field == null ) { - array_shift($params); - $field = RevisionDeleter::getRelationType($params[0]); - } - if( $field == null ) { - echo "Invalid param type for $row->log_id\n"; - continue; // skip this row - } - $items = explode(',',$params[1]); - $log = new LogPage( $row->log_type ); - $log->addRelations( $field, $items, $row->log_id ); - } - // RevisionDelete logs - log events - } else if( LogEventsList::typeAction( $row, array('delete','suppress'), 'event' ) ) { - $params = LogPage::extractParams( $row->log_params ); - // Param format: [ ] - if( count($params) >= 1 ) { - $items = explode(',',$params[0]); - $log = new LogPage( $row->log_type ); - $log->addRelations( 'log_id', $items, $row->log_id ); - } - } - } - $blockStart += LOG_SEARCH_BATCH_SIZE; - $blockEnd += LOG_SEARCH_BATCH_SIZE; - wfWaitForSlaves( 5 ); - } - if( $db->insert( - 'updatelog', - array( 'ul_key' => 'populate log_search' ), - __FUNCTION__, - 'IGNORE' - ) - ) { - wfOut( "log_search population complete.\n" ); - return true; - } else { - wfOut( "Could not insert log_search population row.\n" ); - return false; - } -} diff --git a/maintenance/populateLogSearch.php b/maintenance/populateLogSearch.php index b045104e..ce2d95cc 100644 --- a/maintenance/populateLogSearch.php +++ b/maintenance/populateLogSearch.php @@ -21,14 +21,14 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class PopulateLogSearch extends Maintenance { const LOG_SEARCH_BATCH_SIZE = 100; - static $tableMap = array('rev' => 'revision', 'fa' => 'filearchive', 'oi' => 'oldimage', 'ar' => 'archive'); - + static $tableMap = array( 'rev' => 'revision', 'fa' => 'filearchive', 'oi' => 'oldimage', 'ar' => 'archive' ); + public function __construct() { parent::__construct(); $this->mDescription = "Migrate log params to new table and index for searching"; @@ -40,75 +40,74 @@ class PopulateLogSearch extends Maintenance { $this->error( "log_search does not exist", true ); } $start = $db->selectField( 'logging', 'MIN(log_id)', false, __FUNCTION__ ); - if( !$start ) { + if ( !$start ) { $this->output( "Nothing to do.\n" ); return true; } $end = $db->selectField( 'logging', 'MAX(log_id)', false, __FUNCTION__ ); - + # Do remaining chunk $end += self::LOG_SEARCH_BATCH_SIZE - 1; $blockStart = $start; $blockEnd = $start + self::LOG_SEARCH_BATCH_SIZE - 1; - - $delTypes = array('delete','suppress'); // revisiondelete types - while( $blockEnd <= $end ) { + + $delTypes = array( 'delete', 'suppress' ); // revisiondelete types + while ( $blockEnd <= $end ) { $this->output( "...doing log_id from $blockStart to $blockEnd\n" ); $cond = "log_id BETWEEN $blockStart AND $blockEnd"; $res = $db->select( 'logging', '*', $cond, __FUNCTION__ ); - $batch = array(); - foreach( $res as $row ) { + foreach ( $res as $row ) { // RevisionDelete logs - revisions - if( LogEventsList::typeAction( $row, $delTypes, 'revision' ) ) { + if ( LogEventsList::typeAction( $row, $delTypes, 'revision' ) ) { $params = LogPage::extractParams( $row->log_params ); // Param format: [ ] - if( count($params) < 2 ) continue; // bad row? - $field = RevisionDeleter::getRelationType($params[0]); + if ( count( $params ) < 2 ) continue; // bad row? + $field = RevisionDeleter::getRelationType( $params[0] ); // B/C, the params may start with a title key ( <urlparam> <CSV>) - if( $field == null ) { - array_shift($params); // remove title param - $field = RevisionDeleter::getRelationType($params[0]); - if( $field == null ) { + if ( $field == null ) { + array_shift( $params ); // remove title param + $field = RevisionDeleter::getRelationType( $params[0] ); + if ( $field == null ) { $this->output( "Invalid param type for {$row->log_id}\n" ); continue; // skip this row } else { // Clean up the row... - $db->update( 'logging', - array('log_params' => implode(',',$params) ), - array('log_id' => $row->log_id ) ); + $db->update( 'logging', + array( 'log_params' => implode( ',', $params ) ), + array( 'log_id' => $row->log_id ) ); } } - $items = explode(',',$params[1]); + $items = explode( ',', $params[1] ); $log = new LogPage( $row->log_type ); // Add item relations... $log->addRelations( $field, $items, $row->log_id ); // Determine what table to query... - $prefix = substr( $field, 0, strpos($field,'_') ); // db prefix - if( !isset(self::$tableMap[$prefix]) ) + $prefix = substr( $field, 0, strpos( $field, '_' ) ); // db prefix + if ( !isset( self::$tableMap[$prefix] ) ) continue; // bad row? $table = self::$tableMap[$prefix]; - $userField = $prefix.'_user'; - $userTextField = $prefix.'_user_text'; + $userField = $prefix . '_user'; + $userTextField = $prefix . '_user_text'; // Add item author relations... $userIds = $userIPs = array(); $sres = $db->select( $table, - array($userField,$userTextField), - array($field => $items) + array( $userField, $userTextField ), + array( $field => $items ) ); - foreach( $sres as $srow ) { - if( $srow->$userField > 0 ) - $userIds[] = intval($srow->$userField); - else if( $srow->$userTextField != '' ) + foreach ( $sres as $srow ) { + if ( $srow->$userField > 0 ) + $userIds[] = intval( $srow->$userField ); + else if ( $srow->$userTextField != '' ) $userIPs[] = $srow->$userTextField; } // Add item author relations... $log->addRelations( 'target_author_id', $userIds, $row->log_id ); $log->addRelations( 'target_author_ip', $userIPs, $row->log_id ); // RevisionDelete logs - log events - } else if( LogEventsList::typeAction( $row, $delTypes, 'event' ) ) { + } else if ( LogEventsList::typeAction( $row, $delTypes, 'event' ) ) { $params = LogPage::extractParams( $row->log_params ); // Param format: <item CSV> [<ofield> <nfield>] - if( count($params) < 1 ) continue; // bad row + if ( count( $params ) < 1 ) continue; // bad row $items = explode( ',', $params[0] ); $log = new LogPage( $row->log_type ); // Add item relations... @@ -116,13 +115,13 @@ class PopulateLogSearch extends Maintenance { // Add item author relations... $userIds = $userIPs = array(); $sres = $db->select( 'logging', - array('log_user','log_user_text'), - array('log_id' => $items) + array( 'log_user', 'log_user_text' ), + array( 'log_id' => $items ) ); - foreach( $sres as $srow ) { - if( $srow->log_user > 0 ) - $userIds[] = intval($srow->log_user); - else if( IP::isIPAddress($srow->log_user_text) ) + foreach ( $sres as $srow ) { + if ( $srow->log_user > 0 ) + $userIds[] = intval( $srow->log_user ); + else if ( IP::isIPAddress( $srow->log_user_text ) ) $userIPs[] = $srow->log_user_text; } $log->addRelations( 'target_author_id', $userIds, $row->log_id ); @@ -133,7 +132,7 @@ class PopulateLogSearch extends Maintenance { $blockEnd += self::LOG_SEARCH_BATCH_SIZE; wfWaitForSlaves( 5 ); } - if( $db->insert( + if ( $db->insert( 'updatelog', array( 'ul_key' => 'populate log_search' ), __FUNCTION__, @@ -150,4 +149,4 @@ class PopulateLogSearch extends Maintenance { } $maintClass = "PopulateLogSearch"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/populateLogUsertext.php b/maintenance/populateLogUsertext.php index a491b2b0..bb3927ce 100644 --- a/maintenance/populateLogUsertext.php +++ b/maintenance/populateLogUsertext.php @@ -23,7 +23,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class PopulateLogUsertext extends Maintenance { public function __construct() { @@ -35,7 +35,7 @@ class PopulateLogUsertext extends Maintenance { public function execute() { $db = wfGetDB( DB_MASTER ); $start = $db->selectField( 'logging', 'MIN(log_id)', false, __METHOD__ ); - if( !$start ) { + if ( !$start ) { $this->output( "Nothing to do.\n" ); return true; } @@ -45,23 +45,23 @@ class PopulateLogUsertext extends Maintenance { $end += $this->mBatchSize - 1; $blockStart = $start; $blockEnd = $start + $this->mBatchSize - 1; - while( $blockEnd <= $end ) { + while ( $blockEnd <= $end ) { $this->output( "...doing log_id from $blockStart to $blockEnd\n" ); $cond = "log_id BETWEEN $blockStart AND $blockEnd AND log_user = user_id"; - $res = $db->select( array('logging','user'), - array('log_id','user_name'), $cond, __METHOD__ ); - $batch = array(); + $res = $db->select( array( 'logging', 'user' ), + array( 'log_id', 'user_name' ), $cond, __METHOD__ ); + $db->begin(); - foreach( $res as $row ) { - $db->update( 'logging', array('log_user_text' => $row->user_name), - array('log_id' => $row->log_id), __METHOD__ ); + foreach ( $res as $row ) { + $db->update( 'logging', array( 'log_user_text' => $row->user_name ), + array( 'log_id' => $row->log_id ), __METHOD__ ); } $db->commit(); $blockStart += $this->mBatchSize; $blockEnd += $this->mBatchSize; wfWaitForSlaves( 5 ); } - if( $db->insert( + if ( $db->insert( 'updatelog', array( 'ul_key' => 'populate log_usertext' ), __METHOD__, @@ -78,5 +78,5 @@ class PopulateLogUsertext extends Maintenance { } $maintClass = "PopulateLogUsertext"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/populateParentId.inc b/maintenance/populateParentId.inc deleted file mode 100644 index 7b1ae3e8..00000000 --- a/maintenance/populateParentId.inc +++ /dev/null @@ -1,83 +0,0 @@ -<?php - -define( 'BATCH_SIZE', 200 ); - -function populate_rev_parent_id( $db ) { - wfOut( "Populating rev_parent_id column\n" ); - $start = $db->selectField( 'revision', 'MIN(rev_id)', false, __FUNCTION__ ); - $end = $db->selectField( 'revision', 'MAX(rev_id)', false, __FUNCTION__ ); - if( is_null( $start ) || is_null( $end ) ){ - wfOut( "...revision table seems to be empty.\n" ); - $db->insert( 'updatelog', - array( 'ul_key' => 'populate rev_parent_id' ), - __FUNCTION__, - 'IGNORE' ); - return; - } - # Do remaining chunk - $end += BATCH_SIZE - 1; - $blockStart = intval( $start ); - $blockEnd = intval( $start ) + BATCH_SIZE - 1; - $count = 0; - $changed = 0; - while( $blockEnd <= $end ) { - wfOut( "...doing rev_id from $blockStart to $blockEnd\n" ); - $cond = "rev_id BETWEEN $blockStart AND $blockEnd"; - $res = $db->select( 'revision', - array('rev_id','rev_page','rev_timestamp','rev_parent_id'), - $cond, __FUNCTION__ ); - # Go through and update rev_parent_id from these rows. - # Assume that the previous revision of the title was - # the original previous revision of the title when the - # edit was made... - foreach( $res as $row ) { - # First, check rows with the same timestamp other than this one - # with a smaller rev ID. The highest ID "wins". This avoids loops - # as timestamp can only decrease and never loops with IDs (from parent to parent) - $previousID = $db->selectField( 'revision', 'rev_id', - array( 'rev_page' => $row->rev_page, 'rev_timestamp' => $row->rev_timestamp, - "rev_id < " . intval( $row->rev_id ) ), - __FUNCTION__, - array( 'ORDER BY' => 'rev_id DESC' ) ); - # If there are none, check the the highest ID with a lower timestamp - if( !$previousID ) { - # Get the highest older timestamp - $lastTimestamp = $db->selectField( 'revision', 'rev_timestamp', - array( 'rev_page' => $row->rev_page, "rev_timestamp < " . $db->addQuotes( $row->rev_timestamp ) ), - __FUNCTION__, - array( 'ORDER BY' => 'rev_timestamp DESC' ) ); - # If there is one, let the highest rev ID win - if( $lastTimestamp ) { - $previousID = $db->selectField( 'revision', 'rev_id', - array( 'rev_page' => $row->rev_page, 'rev_timestamp' => $lastTimestamp ), - __FUNCTION__, - array( 'ORDER BY' => 'rev_id DESC' ) ); - } - } - $previousID = intval($previousID); - if( $previousID != $row->rev_parent_id ) - $changed++; - # Update the row... - $db->update( 'revision', - array( 'rev_parent_id' => $previousID ), - array( 'rev_id' => $row->rev_id ), - __FUNCTION__ ); - $count++; - } - $blockStart += BATCH_SIZE - 1; - $blockEnd += BATCH_SIZE - 1; - wfWaitForSlaves( 5 ); - } - $logged = $db->insert( 'updatelog', - array( 'ul_key' => 'populate rev_parent_id' ), - __FUNCTION__, - 'IGNORE' ); - if( $logged ) { - wfOut( "rev_parent_id population complete ... {$count} rows [{$changed} changed]\n" ); - return true; - } else { - wfOut( "Could not insert rev_parent_id population row.\n" ); - return false; - } -} - diff --git a/maintenance/populateParentId.php b/maintenance/populateParentId.php index bf81cb68..387f5a56 100644 --- a/maintenance/populateParentId.php +++ b/maintenance/populateParentId.php @@ -22,7 +22,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class PopulateParentId extends Maintenance { public function __construct() { @@ -39,7 +39,7 @@ class PopulateParentId extends Maintenance { $this->output( "Populating rev_parent_id column\n" ); $start = $db->selectField( 'revision', 'MIN(rev_id)', false, __FUNCTION__ ); $end = $db->selectField( 'revision', 'MAX(rev_id)', false, __FUNCTION__ ); - if( is_null( $start ) || is_null( $end ) ){ + if ( is_null( $start ) || is_null( $end ) ) { $this->output( "...revision table seems to be empty.\n" ); $db->insert( 'updatelog', array( 'ul_key' => 'populate rev_parent_id' ), @@ -48,47 +48,46 @@ class PopulateParentId extends Maintenance { return; } # Do remaining chunk - $end += $this->mBatchSize - 1; $blockStart = intval( $start ); $blockEnd = intval( $start ) + $this->mBatchSize - 1; $count = 0; $changed = 0; - while( $blockEnd <= $end ) { + while ( $blockStart <= $end ) { $this->output( "...doing rev_id from $blockStart to $blockEnd\n" ); $cond = "rev_id BETWEEN $blockStart AND $blockEnd"; - $res = $db->select( 'revision', - array('rev_id','rev_page','rev_timestamp','rev_parent_id'), + $res = $db->select( 'revision', + array( 'rev_id', 'rev_page', 'rev_timestamp', 'rev_parent_id' ), $cond, __METHOD__ ); # Go through and update rev_parent_id from these rows. # Assume that the previous revision of the title was # the original previous revision of the title when the # edit was made... - foreach( $res as $row ) { + foreach ( $res as $row ) { # First, check rows with the same timestamp other than this one # with a smaller rev ID. The highest ID "wins". This avoids loops # as timestamp can only decrease and never loops with IDs (from parent to parent) - $previousID = $db->selectField( 'revision', 'rev_id', + $previousID = $db->selectField( 'revision', 'rev_id', array( 'rev_page' => $row->rev_page, 'rev_timestamp' => $row->rev_timestamp, - "rev_id < " . intval( $row->rev_id ) ), + "rev_id < " . intval( $row->rev_id ) ), __METHOD__, array( 'ORDER BY' => 'rev_id DESC' ) ); # If there are none, check the the highest ID with a lower timestamp - if( !$previousID ) { + if ( !$previousID ) { # Get the highest older timestamp - $lastTimestamp = $db->selectField( 'revision', 'rev_timestamp', - array( 'rev_page' => $row->rev_page, "rev_timestamp < " . $db->addQuotes( $row->rev_timestamp ) ), + $lastTimestamp = $db->selectField( 'revision', 'rev_timestamp', + array( 'rev_page' => $row->rev_page, "rev_timestamp < " . $db->addQuotes( $row->rev_timestamp ) ), __METHOD__, array( 'ORDER BY' => 'rev_timestamp DESC' ) ); # If there is one, let the highest rev ID win - if( $lastTimestamp ) { - $previousID = $db->selectField( 'revision', 'rev_id', - array( 'rev_page' => $row->rev_page, 'rev_timestamp' => $lastTimestamp ), + if ( $lastTimestamp ) { + $previousID = $db->selectField( 'revision', 'rev_id', + array( 'rev_page' => $row->rev_page, 'rev_timestamp' => $lastTimestamp ), __METHOD__, array( 'ORDER BY' => 'rev_id DESC' ) ); } } - $previousID = intval($previousID); - if( $previousID != $row->rev_parent_id ) + $previousID = intval( $previousID ); + if ( $previousID != $row->rev_parent_id ) $changed++; # Update the row... $db->update( 'revision', @@ -97,15 +96,15 @@ class PopulateParentId extends Maintenance { __METHOD__ ); $count++; } - $blockStart += $this->mBatchSize - 1; - $blockEnd += $this->mBatchSize - 1; + $blockStart += $this->mBatchSize; + $blockEnd += $this->mBatchSize; wfWaitForSlaves( 5 ); } $logged = $db->insert( 'updatelog', array( 'ul_key' => 'populate rev_parent_id' ), __METHOD__, 'IGNORE' ); - if( $logged ) { + if ( $logged ) { $this->output( "rev_parent_id population complete ... {$count} rows [{$changed} changed]\n" ); return true; } else { @@ -116,4 +115,4 @@ class PopulateParentId extends Maintenance { } $maintClass = "PopulateParentId"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/populateRevisionLength.php b/maintenance/populateRevisionLength.php new file mode 100644 index 00000000..0af51dc1 --- /dev/null +++ b/maintenance/populateRevisionLength.php @@ -0,0 +1,98 @@ +<?php +/* + * Populates the rev_len field for old revisions created before MW 1.10. + * + * 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 + * + * @ingroup Maintenance + */ + +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); + +class PopulateRevisionLength extends Maintenance { + public function __construct() { + parent::__construct(); + $this->mDescription = "Populates rev_len"; + $this->setBatchSize( 200 ); + } + + public function execute() { + $db = wfGetDB( DB_MASTER ); + if ( !$db->tableExists( 'revision' ) ) { + $this->error( "revision table does not exist", true ); + } + $this->output( "Populating rev_len column\n" ); + $start = $db->selectField( 'revision', 'MIN(rev_id)', false, __FUNCTION__ ); + $end = $db->selectField( 'revision', 'MAX(rev_id)', false, __FUNCTION__ ); + if ( is_null( $start ) || is_null( $end ) ) { + $this->output( "...revision table seems to be empty.\n" ); + $db->insert( 'updatelog', + array( 'ul_key' => 'populate rev_len' ), + __METHOD__, + 'IGNORE' ); + return; + } + # Do remaining chunks + $blockStart = intval( $start ); + $blockEnd = intval( $start ) + $this->mBatchSize - 1; + $count = 0; + $missing = 0; + while ( $blockStart <= $end ) { + $this->output( "...doing rev_id from $blockStart to $blockEnd\n" ); + $res = $db->select( 'revision', + Revision::selectFields(), + array( "rev_id >= $blockStart", + "rev_id <= $blockEnd", + "rev_len IS NULL" ), + __METHOD__ ); + # Go through and update rev_len from these rows. + foreach ( $res as $row ) { + $rev = new Revision( $row ); + $text = $rev->getRawText(); + if ( !is_string( $text ) ) { + # This should not happen, but sometimes does (bug 20757) + $this->output( "Text of revision {$row->rev_id} unavailable!\n" ); + $missing++; + } + else { + # Update the row... + $db->update( 'revision', + array( 'rev_len' => strlen( $text ) ), + array( 'rev_id' => $row->rev_id ), + __METHOD__ ); + $count++; + } + } + $blockStart += $this->mBatchSize; + $blockEnd += $this->mBatchSize; + wfWaitForSlaves( 5 ); + } + $logged = $db->insert( 'updatelog', + array( 'ul_key' => 'populate rev_len' ), + __METHOD__, + 'IGNORE' ); + if ( $logged ) { + $this->output( "rev_len population complete ... {$count} rows changed ({$missing} missing)\n" ); + return true; + } else { + $this->output( "Could not insert rev_len population row.\n" ); + return false; + } + } +} + +$maintClass = "PopulateRevisionLength"; +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/populateSha1.php b/maintenance/populateSha1.php index 72ef9461..1714c0d6 100644 --- a/maintenance/populateSha1.php +++ b/maintenance/populateSha1.php @@ -20,7 +20,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__).'/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class PopulateSha1 extends Maintenance { public function __construct() { @@ -37,14 +37,14 @@ class PopulateSha1 extends Maintenance { $t = -microtime( true ); $dbw = wfGetDB( DB_MASTER ); - if( $file ) { - $res = $dbw->selectRow( - 'image', - array( 'img_name' ), + if ( $file ) { + $res = $dbw->selectRow( + 'image', + array( 'img_name' ), array( 'img_name' => $dbw->addQuotes( $file ) ), __METHOD__ ); - if( !$res ) { + if ( !$res ) { $this->error( "No such file: $file", true ); return; } @@ -52,19 +52,17 @@ class PopulateSha1 extends Maintenance { $res = $dbw->select( 'image', array( 'img_name' ), array( 'img_sha1' => '' ), __METHOD__ ); } $imageTable = $dbw->tableName( 'image' ); - $oldimageTable = $dbw->tableName( 'oldimage' ); - $batch = array(); - + if ( $method == 'pipe' ) { // @fixme kill this and replace with a second unbuffered DB connection. global $wgDBuser, $wgDBserver, $wgDBpassword, $wgDBname; - $cmd = 'mysql -u' . wfEscapeShellArg( $wgDBuser ) . + $cmd = 'mysql -u' . wfEscapeShellArg( $wgDBuser ) . ' -h' . wfEscapeShellArg( $wgDBserver ) . ' -p' . wfEscapeShellArg( $wgDBpassword, $wgDBname ); $this->output( "Using pipe method\n" ); $pipe = popen( $cmd, 'w' ); } - + $numRows = $res->numRows(); $i = 0; foreach ( $res as $row ) { @@ -98,4 +96,4 @@ class PopulateSha1 extends Maintenance { } $maintClass = "PopulateSha1"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/postgres/archives/patch-categorylinks-better-collation.sql b/maintenance/postgres/archives/patch-categorylinks-better-collation.sql new file mode 100644 index 00000000..b3fa6346 --- /dev/null +++ b/maintenance/postgres/archives/patch-categorylinks-better-collation.sql @@ -0,0 +1,8 @@ +CREATE TYPE link_type AS ENUM ('page', 'subcat', 'file'); +DROP INDEX cl_sortkey; +ALTER TABLE categorylinks + ADD COLUMN cl_sortkey_prefix TEXT NOT NULL DEFAULT '', + ADD COLUMN cl_collation SMALLINT NOT NULL DEFAULT 0, + ADD COLUMN cl_type link_type NOT NULL DEFAULT 'page'; +CREATE INDEX cl_collation ON categorylinks ( cl_collation ); +CREATE INDEX cl_sortkey ON categorylinks ( cl_to, cl_type, cl_sortkey, cl_from ); diff --git a/maintenance/postgres/archives/patch-change_tag.sql b/maintenance/postgres/archives/patch-change_tag.sql index 1f52c474..89d74b63 100644 --- a/maintenance/postgres/archives/patch-change_tag.sql +++ b/maintenance/postgres/archives/patch-change_tag.sql @@ -1,28 +1,11 @@ - CREATE TABLE change_tag ( - ct_rc_id INTEGER NULL, - ct_log_id INTEGER NULL, - ct_rev_id INTEGER NULL, - ct_tag TEXT NOT NULL, - ct_params TEXT NULL + ct_rc_id INTEGER NULL, + ct_log_id INTEGER NULL, + ct_rev_id INTEGER NULL, + ct_tag TEXT NOT NULL, + ct_params TEXT NULL ); CREATE UNIQUE INDEX change_tag_rc_tag ON change_tag(ct_rc_id,ct_tag); CREATE UNIQUE INDEX change_tag_log_tag ON change_tag(ct_log_id,ct_tag); CREATE UNIQUE INDEX change_tag_rev_tag ON change_tag(ct_rev_id,ct_tag); CREATE INDEX change_tag_tag_id ON change_tag(ct_tag,ct_rc_id,ct_rev_id,ct_log_id); - - -CREATE TABLE tag_summary ( - ts_rc_id INTEGER NULL, - ts_log_id INTEGER NULL, - ts_rev_id INTEGER NULL, - ts_tags TEXT NOT NULL -); -CREATE UNIQUE INDEX tag_summary_rc_id ON tag_summary(ts_rc_id); -CREATE UNIQUE INDEX tag_summary_log_id ON tag_summary(ts_log_id); -CREATE UNIQUE INDEX tag_summary_rev_id ON tag_summary(ts_rev_id); - - -CREATE TABLE valid_tag ( - vt_tag TEXT NOT NULL PRIMARY KEY -); diff --git a/maintenance/postgres/archives/patch-iwlinks.sql b/maintenance/postgres/archives/patch-iwlinks.sql new file mode 100644 index 00000000..db26eae4 --- /dev/null +++ b/maintenance/postgres/archives/patch-iwlinks.sql @@ -0,0 +1,8 @@ + +CREATE TABLE iwlinks ( + iwl_from INTEGER NOT NULL DEFAULT 0, + iwl_prefix TEXT NOT NULL DEFAULT '', + iwl_title TEXT NOT NULL DEFAULT '' +); +CREATE UNIQUE INDEX iwl_from ON iwlinks (iwl_from, iwl_prefix, iwl_title); +CREATE UNIQUE INDEX iwl_prefix_title_from ON iwlinks (iwl_prefix, iwl_title, iwl_from); diff --git a/maintenance/postgres/archives/patch-kill-iwl_pft.sql b/maintenance/postgres/archives/patch-kill-iwl_pft.sql new file mode 100644 index 00000000..4419d9e9 --- /dev/null +++ b/maintenance/postgres/archives/patch-kill-iwl_pft.sql @@ -0,0 +1,7 @@ +-- +-- Kill the old iwl_prefix_from_title index, which may be present on some +-- installs if they ran update.php between it being added and being renamed +-- + +DROP INDEX iwl_prefix_from_title; + diff --git a/maintenance/postgres/archives/patch-kill-iwl_prefix.sql b/maintenance/postgres/archives/patch-kill-iwl_prefix.sql new file mode 100644 index 00000000..8b6d1084 --- /dev/null +++ b/maintenance/postgres/archives/patch-kill-iwl_prefix.sql @@ -0,0 +1,7 @@ +-- +-- Kill the old iwl_prefix index, which may be present on some +-- installs if they ran update.php between it being added and being renamed +-- + +DROP INDEX iwl_prefix; + diff --git a/maintenance/postgres/archives/patch-mediawiki_version.sql b/maintenance/postgres/archives/patch-mediawiki_version.sql deleted file mode 100644 index 811b38a1..00000000 --- a/maintenance/postgres/archives/patch-mediawiki_version.sql +++ /dev/null @@ -1,18 +0,0 @@ -CREATE TABLE mediawiki_version ( - type TEXT NOT NULL, - mw_version TEXT NOT NULL, - notes TEXT NULL, - - pg_version TEXT NULL, - pg_dbname TEXT NULL, - pg_user TEXT NULL, - pg_port TEXT NULL, - mw_schema TEXT NULL, - ts2_schema TEXT NULL, - ctype TEXT NULL, - - sql_version TEXT NULL, - sql_date TEXT NULL, - cdate TIMESTAMPTZ NOT NULL DEFAULT now() -); - diff --git a/maintenance/postgres/archives/patch-module_deps.sql b/maintenance/postgres/archives/patch-module_deps.sql new file mode 100644 index 00000000..703dcdaf --- /dev/null +++ b/maintenance/postgres/archives/patch-module_deps.sql @@ -0,0 +1,7 @@ +CREATE TABLE module_deps ( + md_module TEXT NOT NULL, + md_skin TEXT NOT NULL, + md_deps TEXT NOT NULL +); + +CREATE UNIQUE INDEX md_module_skin_idx ON module_deps (md_module, md_skin); diff --git a/maintenance/postgres/archives/patch-msg_resource.sql b/maintenance/postgres/archives/patch-msg_resource.sql new file mode 100644 index 00000000..00d82073 --- /dev/null +++ b/maintenance/postgres/archives/patch-msg_resource.sql @@ -0,0 +1,8 @@ +CREATE TABLE msg_resource ( + mr_resource TEXT NOT NULL, + mr_lang TEXT NOT NULL, + mr_blob TEXT NOT NULL, + mr_timestamp TIMESTAMPTZ NOT NULL +); + +CREATE UNIQUE INDEX mr_resource_lang_idx ON msg_resource (mr_resource, mr_lang); diff --git a/maintenance/postgres/archives/patch-msg_resource_links.sql b/maintenance/postgres/archives/patch-msg_resource_links.sql new file mode 100644 index 00000000..e7b80219 --- /dev/null +++ b/maintenance/postgres/archives/patch-msg_resource_links.sql @@ -0,0 +1,6 @@ +CREATE TABLE msg_resource_links ( + mrl_resource TEXT NOT NULL, + mrl_message TEXT NOT NULL +); + +CREATE UNIQUE INDEX mrl_message_resource_idx ON msg_resource_links (mrl_message, mrl_resource); diff --git a/maintenance/postgres/archives/patch-mwuser.sql b/maintenance/postgres/archives/patch-mwuser.sql deleted file mode 100644 index 3984703a..00000000 --- a/maintenance/postgres/archives/patch-mwuser.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE "user" RENAME TO mwuser; diff --git a/maintenance/postgres/archives/patch-page.sql b/maintenance/postgres/archives/patch-page.sql new file mode 100644 index 00000000..cceef898 --- /dev/null +++ b/maintenance/postgres/archives/patch-page.sql @@ -0,0 +1,24 @@ +CREATE SEQUENCE page_page_id_seq; +CREATE TABLE page ( + page_id INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('page_page_id_seq'), + page_namespace SMALLINT NOT NULL, + page_title TEXT NOT NULL, + page_restrictions TEXT, + page_counter BIGINT NOT NULL DEFAULT 0, + page_is_redirect SMALLINT NOT NULL DEFAULT 0, + page_is_new SMALLINT NOT NULL DEFAULT 0, + page_random NUMERIC(15,14) NOT NULL DEFAULT RANDOM(), + page_touched TIMESTAMPTZ, + page_latest INTEGER NOT NULL, + page_len INTEGER NOT NULL +); +CREATE UNIQUE INDEX page_unique_name ON page (page_namespace, page_title); +CREATE INDEX page_main_title ON page (page_title) WHERE page_namespace = 0; +CREATE INDEX page_talk_title ON page (page_title) WHERE page_namespace = 1; +CREATE INDEX page_user_title ON page (page_title) WHERE page_namespace = 2; +CREATE INDEX page_utalk_title ON page (page_title) WHERE page_namespace = 3; +CREATE INDEX page_project_title ON page (page_title) WHERE page_namespace = 4; +CREATE INDEX page_mediawiki_title ON page (page_title) WHERE page_namespace = 8; +CREATE INDEX page_random_idx ON page (page_random); +CREATE INDEX page_len_idx ON page (page_len); + diff --git a/maintenance/postgres/archives/patch-pagecontent.sql b/maintenance/postgres/archives/patch-pagecontent.sql deleted file mode 100644 index c3651f92..00000000 --- a/maintenance/postgres/archives/patch-pagecontent.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE "text" RENAME TO pagecontent; diff --git a/maintenance/postgres/archives/patch-rename-iwl_prefix.sql b/maintenance/postgres/archives/patch-rename-iwl_prefix.sql new file mode 100644 index 00000000..a4bdb6a9 --- /dev/null +++ b/maintenance/postgres/archives/patch-rename-iwl_prefix.sql @@ -0,0 +1,2 @@ +DROP INDEX iwl_prefix; +CREATE UNIQUE INDEX iwl_prefix_title_from ON iwlinks (iwl_prefix, iwl_from, iwl_title); diff --git a/maintenance/postgres/archives/patch-tag_summary.sql b/maintenance/postgres/archives/patch-tag_summary.sql new file mode 100644 index 00000000..49e05e77 --- /dev/null +++ b/maintenance/postgres/archives/patch-tag_summary.sql @@ -0,0 +1,9 @@ +CREATE TABLE tag_summary ( + ts_rc_id INTEGER NULL, + ts_log_id INTEGER NULL, + ts_rev_id INTEGER NULL, + ts_tags TEXT NOT NULL +); +CREATE UNIQUE INDEX tag_summary_rc_id ON tag_summary(ts_rc_id); +CREATE UNIQUE INDEX tag_summary_log_id ON tag_summary(ts_log_id); +CREATE UNIQUE INDEX tag_summary_rev_id ON tag_summary(ts_rev_id); diff --git a/maintenance/postgres/archives/patch-testrun.sql b/maintenance/postgres/archives/patch-testrun.sql new file mode 100644 index 00000000..c15300b5 --- /dev/null +++ b/maintenance/postgres/archives/patch-testrun.sql @@ -0,0 +1,30 @@ +-- +-- Optional tables for parserTests recording mode +-- With --record option, success data will be saved to these tables, +-- and comparisons of what's changed from the previous run will be +-- displayed at the end of each run. +-- +-- This file is for the Postgres version of the tables +-- + +-- Note: "if exists" will not work on older versions of Postgres +DROP TABLE IF EXISTS testitem; +DROP TABLE IF EXISTS testrun; +DROP SEQUENCE IF EXISTS testrun_id_seq; + +CREATE SEQUENCE testrun_id_seq; +CREATE TABLE testrun ( + tr_id INTEGER PRIMARY KEY NOT NULL DEFAULT nextval('testrun_id_seq'), + tr_date TIMESTAMPTZ, + tr_mw_version TEXT, + tr_php_version TEXT, + tr_db_version TEXT, + tr_uname TEXT +); + +CREATE TABLE testitem ( + ti_run INTEGER NOT NULL REFERENCES testrun(tr_id) ON DELETE CASCADE, + ti_name TEXT NOT NULL, + ti_success SMALLINT NOT NULL +); +CREATE UNIQUE INDEX testitem_uniq ON testitem(ti_run, ti_name); diff --git a/maintenance/postgres/archives/patch-update_sequences.sql b/maintenance/postgres/archives/patch-update_sequences.sql index a3d30681..94f7be4f 100644 --- a/maintenance/postgres/archives/patch-update_sequences.sql +++ b/maintenance/postgres/archives/patch-update_sequences.sql @@ -1,20 +1,20 @@ -ALTER SEQUENCE rev_rev_id_val RENAME TO revision_rev_id_seq; +ALTER TABLE revision RENAME rev_rev_id_val TO revision_rev_id_seq; ALTER TABLE revision ALTER COLUMN rev_id SET DEFAULT NEXTVAL('revision_rev_id_seq'); -ALTER SEQUENCE text_old_id_val RENAME TO text_old_id_seq; +ALTER TABLE pagecontent RENAME text_old_id_val TO text_old_id_seq; ALTER TABLE pagecontent ALTER COLUMN old_id SET DEFAULT nextval('text_old_id_seq'); -ALTER SEQUENCE category_id_seq RENAME TO category_cat_id_seq; +ALTER TABLE category RENAME category_id_seq TO category_cat_id_seq; ALTER TABLE category ALTER COLUMN cat_id SET DEFAULT nextval('category_cat_id_seq'); -ALTER SEQUENCE ipblocks_ipb_id_val RENAME TO ipblocks_ipb_id_seq; +ALTER TABLE ipblocks RENAME ipblocks_ipb_id_val TO ipblocks_ipb_id_seq; ALTER TABLE ipblocks ALTER COLUMN ipb_id SET DEFAULT nextval('ipblocks_ipb_id_seq'); -ALTER SEQUENCE rc_rc_id_seq RENAME TO recentchanges_rc_id_seq; +ALTER TABLE recentchanges RENAME rc_rc_id_seq TO recentchanges_rc_id_seq; ALTER TABLE recentchanges ALTER COLUMN rc_id SET DEFAULT nextval('recentchanges_rc_id_seq'); -ALTER SEQUENCE log_log_id_seq RENAME TO logging_log_id_seq; +ALTER TABLE logging RENAME log_log_id_seq TO logging_log_id_seq; ALTER TABLE logging ALTER COLUMN log_id SET DEFAULT nextval('logging_log_id_seq'); -ALTER SEQUENCE pr_id_val RENAME TO page_restrictions_pr_id_seq; +ALTER TABLE page_restrictions RENAME pr_id_val TO page_restrictions_pr_id_seq; ALTER TABLE page_restrictions ALTER COLUMN pr_id SET DEFAULT nextval('page_restrictions_pr_id_seq'); diff --git a/maintenance/postgres/archives/patch-valid_tag.sql b/maintenance/postgres/archives/patch-valid_tag.sql new file mode 100644 index 00000000..98575c6e --- /dev/null +++ b/maintenance/postgres/archives/patch-valid_tag.sql @@ -0,0 +1,3 @@ +CREATE TABLE valid_tag ( + vt_tag TEXT NOT NULL PRIMARY KEY +); diff --git a/maintenance/postgres/compare_schemas.pl b/maintenance/postgres/compare_schemas.pl index 9bddf504..7e3cdf71 100644 --- a/maintenance/postgres/compare_schemas.pl +++ b/maintenance/postgres/compare_schemas.pl @@ -43,7 +43,7 @@ tinytext mediumtext text char varchar varbinary binary timestamp datetime tinyblob mediumblob blob ); -$datatype .= q{|ENUM\([\"\w, ]+\)}; +$datatype .= q{|ENUM\([\"\w\', ]+\)}; $datatype = qr{($datatype)}; my $typeval = qr{(\(\d+\))?}; @@ -142,50 +142,6 @@ sub parse_sql { } ## end of parse_sql -## Read in the parser test information -my $parsefile = '../parserTests.inc'; -open my $pfh, '<', $parsefile or die qq{Could not open "$parsefile": $!\n}; -my $stat = 0; -my %ptable; -while (<$pfh>) { - if (!$stat) { - if (/function listTables/) { - $stat = 1; - } - next; - } - $ptable{$1}=2 while m{'(\w+)'}g; - last if /\);/; -} -close $pfh or die qq{Could not close "$parsefile": $!\n}; - -my $OK_NOT_IN_PTABLE = ' -change_tag -filearchive -logging -profiling -querycache_info -searchindex -tag_summary -trackbacks -transcache -user_newtalk -updatelog -valid_tag -'; - -## Make sure all tables in main tables.sql are accounted for in the parsertest. -for my $table (sort keys %{$old{'../tables.sql'}}) { - $ptable{$table}++; - next if $ptable{$table} > 2; - next if $OK_NOT_IN_PTABLE =~ /\b$table\b/; - print qq{Table "$table" is in the schema, but not used inside of parserTest.inc\n}; -} -## Any that are used in ptables but no longer exist in the schema? -for my $table (sort grep { $ptable{$_} == 2 } keys %ptable) { - print qq{Table "$table" ($ptable{$table}) used in parserTest.inc, but not found in schema\n}; -} - for my $oldfile (@old) { ## Begin non-standard indent @@ -316,18 +272,20 @@ rc_log_type varbinary(255) TEXT ## Simple text-only strings: ar_flags tinyblob TEXT +cl_collation varbinary(32) TEXT +cl_sortkey varbinary(230) TEXT ct_params blob TEXT -fa_minor_mime varbinary(32) TEXT +fa_minor_mime varbinary(100) TEXT fa_storage_group varbinary(16) TEXT # Just 'deleted' for now, should stay plain text fa_storage_key varbinary(64) TEXT # sha1 plus text extension ipb_address tinyblob TEXT # IP address or username ipb_range_end tinyblob TEXT # hexadecimal ipb_range_start tinyblob TEXT # hexadecimal -img_minor_mime varbinary(32) TEXT +img_minor_mime varbinary(100) TEXT lc_lang varbinary(32) TEXT lc_value varbinary(32) TEXT - img_sha1 varbinary(32) TEXT +iw_wikiid varchar(64) TEXT job_cmd varbinary(60) TEXT # Should we limit to 60 as well? keyname varbinary(255) TEXT # No tablename prefix (objectcache) ll_lang varbinary(20) TEXT # Language code @@ -335,7 +293,10 @@ lc_value mediumblob TEXT log_params blob TEXT # LF separated list of args log_type varbinary(10) TEXT ls_field varbinary(32) TEXT -oi_minor_mime varbinary(32) TEXT +md_deps mediumblob TEXT # JSON +mr_blob mediumblob TEXT # JSON +mr_lang varbinary(32) TEXT +oi_minor_mime varbinary(100) TEXT oi_sha1 varbinary(32) TEXT old_flags tinyblob TEXT old_text mediumblob TEXT @@ -354,6 +315,7 @@ rc_params blob TEXT rlc_to_blob blob TEXT ts_tags blob TEXT ug_group varbinary(16) TEXT +ul_value blob TEXT up_property varbinary(32) TEXT up_value blob TEXT user_email_token binary(32) TEXT @@ -362,10 +324,12 @@ user_newpassword tinyblob TEXT user_options blob TEXT user_password tinyblob TEXT user_token binary(32) TEXT +iwl_prefix varbinary(20) TEXT ## Text URLs: el_index blob TEXT el_to blob TEXT +iw_api blob TEXT iw_url blob TEXT tb_url blob TEXT tc_url varbinary(255) TEXT @@ -574,5 +538,4 @@ __DATA__ OLD: searchindex ## We use tsearch2 directly on the page table instead RENAME: user mwuser ## Reserved word causing lots of problems RENAME: text pagecontent ## Reserved word -NEW: mediawiki_version ## Just us, for now XFILE: ../archives/patch-profiling.sql diff --git a/maintenance/postgres/mediawiki_mysql2postgres.pl b/maintenance/postgres/mediawiki_mysql2postgres.pl index 220c779b..2b2bf50e 100644 --- a/maintenance/postgres/mediawiki_mysql2postgres.pl +++ b/maintenance/postgres/mediawiki_mysql2postgres.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl ## Convert data from a MySQL mediawiki database into a Postgres mediawiki database -## svn: $Id: mediawiki_mysql2postgres.pl 59489 2009-11-27 15:34:54Z greg $ +## svn: $Id: mediawiki_mysql2postgres.pl 65542 2010-04-26 13:46:04Z demon $ ## NOTE: It is probably easier to dump your wiki using maintenance/dumpBackup.php ## and then import it with maintenance/importDump.php @@ -181,7 +181,7 @@ $MYSQLSOCKET and $conninfo .= "\n-- socket $MYSQLSOCKET"; print qq{ -- Dump of MySQL Mediawiki tables for import into a Postgres Mediawiki schema -- Performed by the program: $0 --- Version: $VERSION (subversion }.q{$LastChangedRevision: 59489 $}.qq{) +-- Version: $VERSION (subversion }.q{$LastChangedRevision: 65542 $}.qq{) -- Author: Greg Sabino Mullane <greg\@turnstep.com> Comments welcome -- -- This file was created: $now @@ -421,12 +421,6 @@ SELECT setval('trackbacks_tb_id_seq', 1+coalesce(max(tb_id) ,0),false) FROM tr SELECT setval('user_user_id_seq', 1+coalesce(max(user_id),0),false) FROM mwuser; }; -## Finally, make a record in the mediawiki_version table about this import -print qq{ -INSERT INTO mediawiki_version (type,mw_version,notes) VALUES ('MySQL import','??', -'Imported from file created on $now. Old version: $current_version'); -}; - print "COMMIT;\n\\o\n\n-- End of dump\n\n"; select $oldselect; close $mdump or die qq{Could not close "$MYSQLDUMPFILE": $!\n}; @@ -438,7 +432,6 @@ __DATA__ ## or leave blank if it should be skipped pagecontent text mwuser user -mediawiki_version archive2 profiling objectcache diff --git a/maintenance/postgres/tables.sql b/maintenance/postgres/tables.sql index 38b607d9..8e869da7 100644 --- a/maintenance/postgres/tables.sql +++ b/maintenance/postgres/tables.sql @@ -34,13 +34,13 @@ INSERT INTO mwuser VALUES (DEFAULT,'Anonymous','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,now(),now()); CREATE TABLE user_groups ( - ug_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE CASCADE, + ug_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, ug_group TEXT NOT NULL ); CREATE UNIQUE INDEX user_groups_unique ON user_groups (ug_user, ug_group); CREATE TABLE user_newtalk ( - user_id INTEGER NOT NULL REFERENCES mwuser(user_id) ON DELETE CASCADE, + user_id INTEGER NOT NULL REFERENCES mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, user_ip TEXT NULL, user_last_timestamp TIMESTAMPTZ ); @@ -68,6 +68,7 @@ CREATE INDEX page_talk_title ON page (page_title) WHERE page_namespace = CREATE INDEX page_user_title ON page (page_title) WHERE page_namespace = 2; CREATE INDEX page_utalk_title ON page (page_title) WHERE page_namespace = 3; CREATE INDEX page_project_title ON page (page_title) WHERE page_namespace = 4; +CREATE INDEX page_mediawiki_title ON page (page_title) WHERE page_namespace = 8; CREATE INDEX page_random_idx ON page (page_random); CREATE INDEX page_len_idx ON page (page_len); @@ -85,10 +86,10 @@ CREATE TRIGGER page_deleted AFTER DELETE ON page CREATE SEQUENCE revision_rev_id_seq; CREATE TABLE revision ( rev_id INTEGER NOT NULL UNIQUE DEFAULT nextval('revision_rev_id_seq'), - rev_page INTEGER NULL REFERENCES page (page_id) ON DELETE CASCADE, + rev_page INTEGER NULL REFERENCES page (page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, rev_text_id INTEGER NULL, -- FK rev_comment TEXT, - rev_user INTEGER NOT NULL REFERENCES mwuser(user_id) ON DELETE RESTRICT, + rev_user INTEGER NOT NULL REFERENCES mwuser(user_id) ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED, rev_user_text TEXT NOT NULL, rev_timestamp TIMESTAMPTZ NOT NULL, rev_minor_edit SMALLINT NOT NULL DEFAULT 0, @@ -114,7 +115,7 @@ CREATE TABLE pagecontent ( -- replaces reserved word 'text' CREATE SEQUENCE page_restrictions_pr_id_seq; CREATE TABLE page_restrictions ( pr_id INTEGER NOT NULL UNIQUE DEFAULT nextval('page_restrictions_pr_id_seq'), - pr_page INTEGER NULL REFERENCES page (page_id) ON DELETE CASCADE, + pr_page INTEGER NULL REFERENCES page (page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, pr_type TEXT NOT NULL, pr_level TEXT NOT NULL, pr_cascade SMALLINT NOT NULL, @@ -124,7 +125,7 @@ CREATE TABLE page_restrictions ( ALTER TABLE page_restrictions ADD CONSTRAINT page_restrictions_pk PRIMARY KEY (pr_page,pr_type); CREATE TABLE page_props ( - pp_page INTEGER NOT NULL REFERENCES page (page_id) ON DELETE CASCADE, + pp_page INTEGER NOT NULL REFERENCES page (page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, pp_propname TEXT NOT NULL, pp_value TEXT NOT NULL ); @@ -138,7 +139,7 @@ CREATE TABLE archive ( ar_page_id INTEGER NULL, ar_parent_id INTEGER NULL, ar_comment TEXT, - ar_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE SET NULL, + ar_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED, ar_user_text TEXT NOT NULL, ar_timestamp TIMESTAMPTZ NOT NULL, ar_minor_edit SMALLINT NOT NULL DEFAULT 0, @@ -153,7 +154,7 @@ CREATE INDEX archive_user_text ON archive (ar_user_text); CREATE TABLE redirect ( - rd_from INTEGER NOT NULL REFERENCES page(page_id) ON DELETE CASCADE, + rd_from INTEGER NOT NULL REFERENCES page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, rd_namespace SMALLINT NOT NULL, rd_title TEXT NOT NULL, rd_interwiki TEXT NULL, @@ -163,14 +164,15 @@ CREATE INDEX redirect_ns_title ON redirect (rd_namespace,rd_title,rd_from); CREATE TABLE pagelinks ( - pl_from INTEGER NOT NULL REFERENCES page(page_id) ON DELETE CASCADE, + pl_from INTEGER NOT NULL REFERENCES page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, pl_namespace SMALLINT NOT NULL, pl_title TEXT NOT NULL ); CREATE UNIQUE INDEX pagelink_unique ON pagelinks (pl_from,pl_namespace,pl_title); +CREATE INDEX pagelinks_title ON pagelinks (pl_title); CREATE TABLE templatelinks ( - tl_from INTEGER NOT NULL REFERENCES page(page_id) ON DELETE CASCADE, + tl_from INTEGER NOT NULL REFERENCES page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, tl_namespace SMALLINT NOT NULL, tl_title TEXT NOT NULL ); @@ -178,22 +180,25 @@ CREATE UNIQUE INDEX templatelinks_unique ON templatelinks (tl_namespace,tl_title CREATE INDEX templatelinks_from ON templatelinks (tl_from); CREATE TABLE imagelinks ( - il_from INTEGER NOT NULL REFERENCES page(page_id) ON DELETE CASCADE, + il_from INTEGER NOT NULL REFERENCES page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, il_to TEXT NOT NULL ); CREATE UNIQUE INDEX il_from ON imagelinks (il_to,il_from); CREATE TABLE categorylinks ( - cl_from INTEGER NOT NULL REFERENCES page(page_id) ON DELETE CASCADE, - cl_to TEXT NOT NULL, - cl_sortkey TEXT, - cl_timestamp TIMESTAMPTZ NOT NULL + cl_from INTEGER NOT NULL REFERENCES page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, + cl_to TEXT NOT NULL, + cl_sortkey TEXT NULL, + cl_timestamp TIMESTAMPTZ NOT NULL, + cl_sortkey_prefix TEXT NOT NULL DEFAULT '', + cl_collation TEXT NOT NULL DEFAULT 0, + cl_type TEXT NOT NULL DEFAULT 'page' ); CREATE UNIQUE INDEX cl_from ON categorylinks (cl_from, cl_to); CREATE INDEX cl_sortkey ON categorylinks (cl_to, cl_sortkey, cl_from); CREATE TABLE externallinks ( - el_from INTEGER NOT NULL REFERENCES page(page_id) ON DELETE CASCADE, + el_from INTEGER NOT NULL REFERENCES page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, el_to TEXT NOT NULL, el_index TEXT NOT NULL ); @@ -208,7 +213,7 @@ CREATE TABLE external_user ( CREATE UNIQUE INDEX eu_external_id ON external_user (eu_external_id); CREATE TABLE langlinks ( - ll_from INTEGER NOT NULL REFERENCES page (page_id) ON DELETE CASCADE, + ll_from INTEGER NOT NULL REFERENCES page (page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, ll_lang TEXT, ll_title TEXT ); @@ -237,8 +242,8 @@ CREATE SEQUENCE ipblocks_ipb_id_seq; CREATE TABLE ipblocks ( ipb_id INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('ipblocks_ipb_id_seq'), ipb_address TEXT NULL, - ipb_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE SET NULL, - ipb_by INTEGER NOT NULL REFERENCES mwuser(user_id) ON DELETE CASCADE, + ipb_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED, + ipb_by INTEGER NOT NULL REFERENCES mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, ipb_by_text TEXT NOT NULL DEFAULT '', ipb_reason TEXT NOT NULL, ipb_timestamp TIMESTAMPTZ NOT NULL, @@ -270,7 +275,7 @@ CREATE TABLE image ( img_major_mime TEXT DEFAULT 'unknown', img_minor_mime TEXT DEFAULT 'unknown', img_description TEXT NOT NULL, - img_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE SET NULL, + img_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED, img_user_text TEXT NOT NULL, img_timestamp TIMESTAMPTZ, img_sha1 TEXT NOT NULL DEFAULT '' @@ -287,7 +292,7 @@ CREATE TABLE oldimage ( oi_height INTEGER NOT NULL, oi_bits SMALLINT NULL, oi_description TEXT, - oi_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE SET NULL, + oi_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED, oi_user_text TEXT NOT NULL, oi_timestamp TIMESTAMPTZ NULL, oi_metadata BYTEA NOT NULL DEFAULT '', @@ -297,7 +302,7 @@ CREATE TABLE oldimage ( oi_deleted SMALLINT NOT NULL DEFAULT 0, oi_sha1 TEXT NOT NULL DEFAULT '' ); -ALTER TABLE oldimage ADD CONSTRAINT oldimage_oi_name_fkey_cascaded FOREIGN KEY (oi_name) REFERENCES image(img_name) ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE oldimage ADD CONSTRAINT oldimage_oi_name_fkey_cascaded FOREIGN KEY (oi_name) REFERENCES image(img_name) ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED; CREATE INDEX oi_name_timestamp ON oldimage (oi_name,oi_timestamp); CREATE INDEX oi_name_archive_name ON oldimage (oi_name,oi_archive_name); CREATE INDEX oi_sha1 ON oldimage (oi_sha1); @@ -310,7 +315,7 @@ CREATE TABLE filearchive ( fa_archive_name TEXT, fa_storage_group TEXT, fa_storage_key TEXT, - fa_deleted_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE SET NULL, + fa_deleted_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED, fa_deleted_timestamp TIMESTAMPTZ NOT NULL, fa_deleted_reason TEXT, fa_size INTEGER NOT NULL, @@ -322,7 +327,7 @@ CREATE TABLE filearchive ( fa_major_mime TEXT DEFAULT 'unknown', fa_minor_mime TEXT DEFAULT 'unknown', fa_description TEXT NOT NULL, - fa_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE SET NULL, + fa_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED, fa_user_text TEXT NOT NULL, fa_timestamp TIMESTAMPTZ, fa_deleted SMALLINT NOT NULL DEFAULT 0 @@ -338,7 +343,7 @@ CREATE TABLE recentchanges ( rc_id INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('recentchanges_rc_id_seq'), rc_timestamp TIMESTAMPTZ NOT NULL, rc_cur_time TIMESTAMPTZ NOT NULL, - rc_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE SET NULL, + rc_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED, rc_user_text TEXT NOT NULL, rc_namespace SMALLINT NOT NULL, rc_title TEXT NOT NULL, @@ -346,7 +351,7 @@ CREATE TABLE recentchanges ( rc_minor SMALLINT NOT NULL DEFAULT 0, rc_bot SMALLINT NOT NULL DEFAULT 0, rc_new SMALLINT NOT NULL DEFAULT 0, - rc_cur_id INTEGER NULL REFERENCES page(page_id) ON DELETE SET NULL, + rc_cur_id INTEGER NULL REFERENCES page(page_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED, rc_this_oldid INTEGER NOT NULL, rc_last_oldid INTEGER NOT NULL, rc_type SMALLINT NOT NULL DEFAULT 0, @@ -371,7 +376,7 @@ CREATE INDEX rc_ip ON recentchanges (rc_ip); CREATE TABLE watchlist ( - wl_user INTEGER NOT NULL REFERENCES mwuser(user_id) ON DELETE CASCADE, + wl_user INTEGER NOT NULL REFERENCES mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, wl_namespace SMALLINT NOT NULL DEFAULT 0, wl_title TEXT NOT NULL, wl_notificationtimestamp TIMESTAMPTZ @@ -392,7 +397,9 @@ CREATE TABLE interwiki ( iw_prefix TEXT NOT NULL UNIQUE, iw_url TEXT NOT NULL, iw_local SMALLINT NOT NULL, - iw_trans SMALLINT NOT NULL DEFAULT 0 + iw_trans SMALLINT NOT NULL DEFAULT 0, + iw_api TEXT NOT NULL DEFAULT '', + iw_wikiid TEXT NOT NULL DEFAULT '' ); @@ -441,7 +448,7 @@ CREATE TABLE logging ( log_type TEXT NOT NULL, log_action TEXT NOT NULL, log_timestamp TIMESTAMPTZ NOT NULL, - log_user INTEGER REFERENCES mwuser(user_id) ON DELETE SET NULL, + log_user INTEGER REFERENCES mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED, log_namespace SMALLINT NOT NULL, log_title TEXT NOT NULL, log_comment TEXT, @@ -468,7 +475,7 @@ CREATE INDEX ls_log_id ON log_search (ls_log_id); CREATE SEQUENCE trackbacks_tb_id_seq; CREATE TABLE trackbacks ( tb_id INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('trackbacks_tb_id_seq'), - tb_page INTEGER REFERENCES page(page_id) ON DELETE CASCADE, + tb_page INTEGER REFERENCES page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, tb_title TEXT NOT NULL, tb_url TEXT NOT NULL, tb_ex TEXT, @@ -488,7 +495,7 @@ CREATE TABLE job ( CREATE INDEX job_cmd_namespace_title ON job (job_cmd, job_namespace, job_title); -- Tsearch2 2 stuff. Will fail if we don't have proper access to the tsearch2 tables --- Note: if version 8.3 or higher, we remove the 'default' arg +-- Version 8.3 or higher only. Previous versions would need another parmeter for to_tsvector. -- Make sure you also change patch-tsearch2funcs.sql if the funcs below change. ALTER TABLE page ADD titlevector tsvector; @@ -496,9 +503,9 @@ CREATE FUNCTION ts2_page_title() RETURNS TRIGGER LANGUAGE plpgsql AS $mw$ BEGIN IF TG_OP = 'INSERT' THEN - NEW.titlevector = to_tsvector('default',REPLACE(NEW.page_title,'/',' ')); + NEW.titlevector = to_tsvector(REPLACE(NEW.page_title,'/',' ')); ELSIF NEW.page_title != OLD.page_title THEN - NEW.titlevector := to_tsvector('default',REPLACE(NEW.page_title,'/',' ')); + NEW.titlevector := to_tsvector(REPLACE(NEW.page_title,'/',' ')); END IF; RETURN NEW; END; @@ -513,9 +520,9 @@ CREATE FUNCTION ts2_page_text() RETURNS TRIGGER LANGUAGE plpgsql AS $mw$ BEGIN IF TG_OP = 'INSERT' THEN - NEW.textvector = to_tsvector('default',NEW.old_text); + NEW.textvector = to_tsvector(NEW.old_text); ELSIF NEW.old_text != OLD.old_text THEN - NEW.textvector := to_tsvector('default',NEW.old_text); + NEW.textvector := to_tsvector(NEW.old_text); END IF; RETURN NEW; END; @@ -549,7 +556,7 @@ CREATE UNIQUE INDEX pf_name_server ON profiling (pf_name, pf_server); CREATE TABLE protected_titles ( pt_namespace SMALLINT NOT NULL, pt_title TEXT NOT NULL, - pt_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE SET NULL, + pt_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED, pt_reason TEXT NULL, pt_timestamp TIMESTAMPTZ NOT NULL, pt_expiry TIMESTAMPTZ NULL, @@ -559,7 +566,8 @@ CREATE UNIQUE INDEX protected_titles_unique ON protected_titles(pt_namespace, pt CREATE TABLE updatelog ( - ul_key TEXT NOT NULL PRIMARY KEY + ul_key TEXT NOT NULL PRIMARY KEY, + ul_value TEXT ); @@ -602,37 +610,45 @@ CREATE TABLE valid_tag ( ); CREATE TABLE user_properties ( - up_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE CASCADE, + up_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, up_property TEXT NOT NULL, up_value TEXT ); CREATE UNIQUE INDEX user_properties_user_property ON user_properties (up_user,up_property); CREATE INDEX user_properties_property ON user_properties (up_property); -CREATE TABLE mediawiki_version ( - type TEXT NOT NULL, - mw_version TEXT NOT NULL, - notes TEXT NULL, +CREATE TABLE l10n_cache ( + lc_lang TEXT NOT NULL, + lc_key TEXT NOT NULL, + lc_value TEXT NOT NULL +); +CREATE INDEX l10n_cache_lc_lang_key ON l10n_cache (lc_lang, lc_key); - pg_version TEXT NULL, - pg_dbname TEXT NULL, - pg_user TEXT NULL, - pg_port TEXT NULL, - mw_schema TEXT NULL, - ts2_schema TEXT NULL, - ctype TEXT NULL, +CREATE TABLE iwlinks ( + iwl_from INTEGER NOT NULL DEFAULT 0, + iwl_prefix TEXT NOT NULL DEFAULT '', + iwl_title TEXT NOT NULL DEFAULT '' +); +CREATE UNIQUE INDEX iwl_from ON iwlinks (iwl_from, iwl_prefix, iwl_title); +CREATE UNIQUE INDEX iwl_prefix_title_from ON iwlinks (iwl_prefix, iwl_title, iwl_from); - sql_version TEXT NULL, - sql_date TEXT NULL, - cdate TIMESTAMPTZ NOT NULL DEFAULT now() +CREATE TABLE msg_resource ( + mr_resource TEXT NOT NULL, + mr_lang TEXT NOT NULL, + mr_blob TEXT NOT NULL, + mr_timestamp TIMESTAMPTZ NOT NULL ); +CREATE UNIQUE INDEX mr_resource_lang ON msg_resource (mr_resource, mr_lang); -INSERT INTO mediawiki_version (type,mw_version,sql_version,sql_date) - VALUES ('Creation','??','$LastChangedRevision: 59842 $','$LastChangedDate: 2009-12-09 06:32:17 +1100 (Wed, 09 Dec 2009) $'); +CREATE TABLE msg_resource_links ( + mrl_resource TEXT NOT NULL, + mrl_message TEXT NOT NULL +); +CREATE UNIQUE INDEX mrl_message_resource ON msg_resource_links (mrl_message, mrl_resource); -CREATE TABLE l10n_cache ( - lc_lang TEXT NOT NULL, - lc_key TEXT NOT NULL, - lc_value TEXT NOT NULL +CREATE TABLE module_deps ( + md_module TEXT NOT NULL, + md_skin TEXT NOT NULL, + md_deps TEXT NOT NULL ); -CREATE INDEX l10n_cache_lc_lang_key ON l10n_cache (lc_lang, lc_key); +CREATE UNIQUE INDEX md_module_skin ON module_deps (md_module, md_skin); diff --git a/maintenance/preprocessorFuzzTest.php b/maintenance/preprocessorFuzzTest.php index c271b117..31b372c2 100644 --- a/maintenance/preprocessorFuzzTest.php +++ b/maintenance/preprocessorFuzzTest.php @@ -4,28 +4,28 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/commandLine.inc' ); +require_once( dirname( __FILE__ ) . '/commandLine.inc' ); $wgHooks['BeforeParserFetchTemplateAndtitle'][] = 'PPFuzzTester::templateHook'; class PPFuzzTester { var $hairs = array( - '[[', ']]', '{{', '{{', '}}', '}}', '{{{', '}}}', + '[[', ']]', '{{', '{{', '}}', '}}', '{{{', '}}}', '<', '>', '<nowiki', '<gallery', '</nowiki>', '</gallery>', '<nOwIkI>', '</NoWiKi>', '<!--' , '-->', "\n==", "==\n", '|', '=', "\n", ' ', "\t", "\x7f", '~~', '~~~', '~~~~', 'subst:', - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', // extensions - //'<ref>', '</ref>', '<references/>', + // '<ref>', '</ref>', '<references/>', ); var $minLength = 0; var $maxLength = 20; var $maxTemplates = 5; - //var $outputTypes = array( 'OT_HTML', 'OT_WIKI', 'OT_PREPROCESS' ); + // var $outputTypes = array( 'OT_HTML', 'OT_WIKI', 'OT_PREPROCESS' ); var $entryPoints = array( 'testSrvus', 'testPst', 'testPreprocess' ); var $verbose = false; static $currentTest = false; @@ -51,7 +51,7 @@ class PPFuzzTester { $exceptionReport = $e->getText(); $hash = md5( $testReport ); file_put_contents( "results/ppft-$hash.in", serialize( self::$currentTest ) ); - file_put_contents( "results/ppft-$hash.fail", + file_put_contents( "results/ppft-$hash.fail", "Input:\n$testReport\n\nException report:\n$exceptionReport\n" ); print "Test $hash failed\n"; $passed = 'failed'; @@ -99,7 +99,7 @@ class PPFuzzTester { $s .= $this->hairs[$hairIndex]; } // Send through the UTF-8 normaliser - // This resolves a few differences between the old preprocessor and the + // This resolves a few differences between the old preprocessor and the // XML-based one, which doesn't like illegals and converts line endings. // It's done by the MW UI, so it's a reasonably legitimate thing to do. global $wgContLang; @@ -131,16 +131,16 @@ class PPFuzzTest { $this->parent = $tester; $this->mainText = $tester->makeInputText(); $this->title = $tester->makeTitle(); - //$this->outputType = $tester->pickOutputType(); + // $this->outputType = $tester->pickOutputType(); $this->entryPoint = $tester->pickEntryPoint(); - $this->nickname = $tester->makeInputText( $wgMaxSigChars + 10); + $this->nickname = $tester->makeInputText( $wgMaxSigChars + 10 ); $this->fancySig = (bool)mt_rand( 0, 1 ); $this->templates = array(); } function templateHook( $title ) { $titleText = $title->getPrefixedDBkey(); - + if ( !isset( $this->templates[$titleText] ) ) { $finalTitle = $title; if ( count( $this->templates ) >= $this->parent->maxTemplates ) { @@ -182,9 +182,9 @@ class PPFuzzTest { function getReport() { $s = "Title: " . $this->title->getPrefixedDBkey() . "\n" . -// "Output type: {$this->outputType}\n" . - "Entry point: {$this->entryPoint}\n" . - "User: " . ( $this->fancySig ? 'fancy' : 'no-fancy' ) . ' ' . var_export( $this->nickname, true ) . "\n" . +// "Output type: {$this->outputType}\n" . + "Entry point: {$this->entryPoint}\n" . + "User: " . ( $this->fancySig ? 'fancy' : 'no-fancy' ) . ' ' . var_export( $this->nickname, true ) . "\n" . "Main text: " . var_export( $this->mainText, true ) . "\n"; foreach ( $this->templates as $titleText => $template ) { $finalTitle = $template['finalTitle']; diff --git a/maintenance/protect.php b/maintenance/protect.php index 126707a7..baef45fb 100644 --- a/maintenance/protect.php +++ b/maintenance/protect.php @@ -18,7 +18,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class Protect extends Maintenance { public function __construct() { @@ -28,34 +28,35 @@ class Protect extends Maintenance { $this->addOption( 'semiprotect', 'Adds semi-protection' ); $this->addOption( 'u', 'Username to protect with', false, true ); $this->addOption( 'r', 'Reason for un/protection', false, true ); + $this->addArg( 'title', 'Title to protect', true ); } public function execute() { - global $wgUser, $wgTitle, $wgArticle; + global $wgUser; $userName = $this->getOption( 'u', 'Maintenance script' ); $reason = $this->getOption( 'r', '' ); $protection = "sysop"; - if ( $this->hasOption('semiprotect') ) { + if ( $this->hasOption( 'semiprotect' ) ) { $protection = "autoconfirmed"; - } elseif ( $this->hasOption('unprotect') ) { + } elseif ( $this->hasOption( 'unprotect' ) ) { $protection = ""; } $wgUser = User::newFromName( $userName ); $restrictions = array( 'edit' => $protection, 'move' => $protection ); - $wgTitle = Title::newFromText( $this->getArg() ); - if ( !$wgTitle ) { + $t = Title::newFromText( $this->getArg() ); + if ( !$t ) { $this->error( "Invalid title", true ); } - $wgArticle = new Article( $wgTitle ); + $article = new Article( $t ); # un/protect the article $this->output( "Updating protection status... " ); - $success = $wgArticle->updateRestrictions($restrictions, $reason); + $success = $article->updateRestrictions( $restrictions, $reason ); if ( $success ) { $this->output( "done\n" ); } else { @@ -65,4 +66,4 @@ class Protect extends Maintenance { } $maintClass = "Protect"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/purgeList.php b/maintenance/purgeList.php index 7168a203..17be6d3d 100644 --- a/maintenance/purgeList.php +++ b/maintenance/purgeList.php @@ -20,29 +20,30 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class PurgeList extends Maintenance { public function __construct() { parent::__construct(); $this->mDescription = "Send purge requests for listed pages to squid"; + $this->addOption( 'purge', 'Whether to update page touched.' , false, false ); } public function execute() { $stdin = $this->getStdin(); $urls = array(); - while( !feof( $stdin ) ) { + while ( !feof( $stdin ) ) { $page = trim( fgets( $stdin ) ); if ( substr( $page, 0, 7 ) == 'http://' ) { $urls[] = $page; - } elseif( $page !== '' ) { + } elseif ( $page !== '' ) { $title = Title::newFromText( $page ); - if( $title ) { + if ( $title ) { $url = $title->getFullUrl(); $this->output( "$url\n" ); $urls[] = $url; - if( isset( $options['purge'] ) ) { + if ( $this->getOptions( 'purge' ) ) { $title->invalidateCache(); } } else { @@ -60,4 +61,4 @@ class PurgeList extends Maintenance { } $maintClass = "PurgeList"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/purgeOldText.inc b/maintenance/purgeOldText.inc index 0bd5f2eb..381d62a7 100644 --- a/maintenance/purgeOldText.inc +++ b/maintenance/purgeOldText.inc @@ -9,54 +9,54 @@ */ function PurgeRedundantText( $delete = false ) { - + # Data should come off the master, wrapped in a transaction $dbw = wfGetDB( DB_MASTER ); $dbw->begin(); - + $tbl_arc = $dbw->tableName( 'archive' ); $tbl_rev = $dbw->tableName( 'revision' ); $tbl_txt = $dbw->tableName( 'text' ); - + # Get "active" text records from the revisions table echo( "Searching for active text records in revisions table..." ); $res = $dbw->query( "SELECT DISTINCT rev_text_id FROM $tbl_rev" ); - while( $row = $dbw->fetchObject( $res ) ) { + foreach ( $res as $row ) { $cur[] = $row->rev_text_id; } echo( "done.\n" ); - + # Get "active" text records from the archive table echo( "Searching for active text records in archive table..." ); $res = $dbw->query( "SELECT DISTINCT ar_text_id FROM $tbl_arc" ); - while( $row = $dbw->fetchObject( $res ) ) { + foreach ( $res as $row ) { $cur[] = $row->ar_text_id; } echo( "done.\n" ); - + # Get the IDs of all text records not in these sets echo( "Searching for inactive text records..." ); $set = implode( ', ', $cur ); $res = $dbw->query( "SELECT old_id FROM $tbl_txt WHERE old_id NOT IN ( $set )" ); $old = array(); - while( $row = $dbw->fetchObject( $res ) ) { + foreach ( $res as $row ) { $old[] = $row->old_id; } echo( "done.\n" ); - + # Inform the user of what we're going to do $count = count( $old ); echo( "$count inactive items found.\n" ); - + # Delete as appropriate - if( $delete && $count ) { + if ( $delete && $count ) { echo( "Deleting..." ); $set = implode( ', ', $old ); $dbw->query( "DELETE FROM $tbl_txt WHERE old_id IN ( $set )" ); echo( "done.\n" ); } - + # Done $dbw->commit(); - + } diff --git a/maintenance/purgeOldText.php b/maintenance/purgeOldText.php index 9621cb39..0cbc724e 100644 --- a/maintenance/purgeOldText.php +++ b/maintenance/purgeOldText.php @@ -21,7 +21,7 @@ * @author Rob Church <robchur@gmail.com> */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class PurgeOldText extends Maintenance { public function __construct() { @@ -29,11 +29,11 @@ class PurgeOldText extends Maintenance { $this->mDescription = "Purge old text records from the database"; $this->addOption( 'purge', 'Performs the deletion' ); } - + public function execute() { - $this->purgeRedundantText( $this->hasOption('purge') ); + $this->purgeRedundantText( $this->hasOption( 'purge' ) ); } } $maintClass = "PurgeOldText"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/reassignEdits.php b/maintenance/reassignEdits.php index e595e5b3..039422b3 100644 --- a/maintenance/reassignEdits.php +++ b/maintenance/reassignEdits.php @@ -22,7 +22,7 @@ * @licence GNU General Public Licence 2.0 or later */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class ReassignEdits extends Maintenance { public function __construct() { @@ -34,21 +34,22 @@ class ReassignEdits extends Maintenance { $this->addArg( 'from', 'Old user to take edits from' ); $this->addArg( 'to', 'New user to give edits to' ); } - + public function execute() { - if( $this->hasArg(0) && $this->hasArg(1) ) { + if ( $this->hasArg( 0 ) && $this->hasArg( 1 ) ) { # Set up the users involved - $from = $this->initialiseUser( $this->getArg(0) ); - $to = $this->initialiseUser( $this->getArg(1) ); - + $from = $this->initialiseUser( $this->getArg( 0 ) ); + $to = $this->initialiseUser( $this->getArg( 1 ) ); + # If the target doesn't exist, and --force is not set, stop here - if( $to->getId() || $this->hasOption('force') ) { + if ( $to->getId() || $this->hasOption( 'force' ) ) { # Reassign the edits - $report = $this->hasOption('report'); - $count = $this->doReassignEdits( $from, $to, !$this->hasOption('norc'), $report ); - # If reporting, and there were items, advise the user to run without --report - if( $report ) + $report = $this->hasOption( 'report' ); + $this->doReassignEdits( $from, $to, !$this->hasOption( 'norc' ), $report ); + # If reporting, and there were items, advise the user to run without --report + if ( $report ) { $this->output( "Run the script again without --report to update.\n" ); + } } else { $ton = $to->getName(); $this->error( "User '{$ton}' not found." ); @@ -83,7 +84,7 @@ class ReassignEdits extends Maintenance { $this->output( "found {$del}.\n" ); # Don't count recent changes if we're not supposed to - if( $rc ) { + if ( $rc ) { $this->output( "Checking recent changes..." ); $res = $dbw->select( 'recentchanges', 'COUNT(*) AS count', $this->userConditions( $from, 'rc_user', 'rc_user_text' ), __METHOD__ ); $row = $dbw->fetchObject( $res ); @@ -92,31 +93,34 @@ class ReassignEdits extends Maintenance { } else { $rec = 0; } - + $total = $cur + $del + $rec; $this->output( "\nTotal entries to change: {$total}\n" ); - - if( !$report ) { - if( $total ) { + + if ( !$report ) { + if ( $total ) { # Reassign edits $this->output( "\nReassigning current edits..." ); - $res = $dbw->update( 'revision', $this->userSpecification( $to, 'rev_user', 'rev_user_text' ), $this->userConditions( $from, 'rev_user', 'rev_user_text' ), __METHOD__ ); + $dbw->update( 'revision', $this->userSpecification( $to, 'rev_user', 'rev_user_text' ), + $this->userConditions( $from, 'rev_user', 'rev_user_text' ), __METHOD__ ); $this->output( "done.\nReassigning deleted edits..." ); - $res = $dbw->update( 'archive', $this->userSpecification( $to, 'ar_user', 'ar_user_text' ), $this->userConditions( $from, 'ar_user', 'ar_user_text' ), __METHOD__ ); + $dbw->update( 'archive', $this->userSpecification( $to, 'ar_user', 'ar_user_text' ), + $this->userConditions( $from, 'ar_user', 'ar_user_text' ), __METHOD__ ); $this->output( "done.\n" ); # Update recent changes if required - if( $rc ) { + if ( $rc ) { $this->output( "Updating recent changes..." ); - $res = $dbw->update( 'recentchanges', $this->userSpecification( $to, 'rc_user', 'rc_user_text' ), $this->userConditions( $from, 'rc_user', 'rc_user_text' ), __METHOD__ ); + $dbw->update( 'recentchanges', $this->userSpecification( $to, 'rc_user', 'rc_user_text' ), + $this->userConditions( $from, 'rc_user', 'rc_user_text' ), __METHOD__ ); $this->output( "done.\n" ); } - } + } } - + $dbw->commit(); - return (int)$total; + return (int)$total; } - + /** * Return the most efficient set of user conditions * i.e. a user => id mapping, or a user_text => text mapping @@ -129,7 +133,7 @@ class ReassignEdits extends Maintenance { private function userConditions( &$user, $idfield, $utfield ) { return $user->getId() ? array( $idfield => $user->getId() ) : array( $utfield => $user->getName() ); } - + /** * Return user specifications * i.e. user => id, user_text => text @@ -142,7 +146,7 @@ class ReassignEdits extends Maintenance { private function userSpecification( &$user, $idfield, $utfield ) { return array( $idfield => $user->getId(), $utfield => $user->getName() ); } - + /** * Initialise the user object * @@ -150,7 +154,7 @@ class ReassignEdits extends Maintenance { * @return User */ private function initialiseUser( $username ) { - if( User::isIP( $username ) ) { + if ( User::isIP( $username ) ) { $user = new User(); $user->setId( 0 ); $user->setName( $username ); @@ -165,5 +169,5 @@ class ReassignEdits extends Maintenance { } $maintClass = "ReassignEdits"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/rebuildFileCache.php b/maintenance/rebuildFileCache.php index 2a4e4884..a1aecd80 100644 --- a/maintenance/rebuildFileCache.php +++ b/maintenance/rebuildFileCache.php @@ -20,7 +20,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class RebuildFileCache extends Maintenance { public function __construct() { @@ -32,24 +32,24 @@ class RebuildFileCache extends Maintenance { } public function execute() { - global $wgUseFileCache, $wgDisableCounters, $wgContentNamespaces; + global $wgUseFileCache, $wgDisableCounters, $wgContentNamespaces, $wgRequestTime; global $wgTitle, $wgArticle, $wgOut, $wgUser; - if( !$wgUseFileCache ) { + if ( !$wgUseFileCache ) { $this->error( "Nothing to do -- \$wgUseFileCache is disabled.", true ); } $wgDisableCounters = false; $start = $this->getArg( 0, "0" ); - if( !ctype_digit($start) ) { + if ( !ctype_digit( $start ) ) { $this->error( "Invalid value for start parameter.", true ); } - $start = intval($start); - $overwrite = $this->hasArg(1) && $this->getArg(1) === 'overwrite'; + $start = intval( $start ); + $overwrite = $this->hasArg( 1 ) && $this->getArg( 1 ) === 'overwrite'; $this->output( "Building content page file cache from page {$start}!\n" ); $dbr = wfGetDB( DB_SLAVE ); $start = $start > 0 ? $start : $dbr->selectField( 'page', 'MIN(page_id)', false, __FUNCTION__ ); $end = $dbr->selectField( 'page', 'MAX(page_id)', false, __FUNCTION__ ); - if( !$start ) { + if ( !$start ) { $this->error( "Nothing to do.", true ); } @@ -60,20 +60,21 @@ class RebuildFileCache extends Maintenance { $end += $this->mBatchSize - 1; $blockStart = $start; $blockEnd = $start + $this->mBatchSize - 1; - + $dbw = wfGetDB( DB_MASTER ); // Go through each page and save the output - while( $blockEnd <= $end ) { + while ( $blockEnd <= $end ) { // Get the pages - $res = $dbr->select( 'page', array('page_namespace','page_title','page_id'), - array('page_namespace' => $wgContentNamespaces, + $res = $dbr->select( 'page', array( 'page_namespace', 'page_title', 'page_id' ), + array( 'page_namespace' => $wgContentNamespaces, "page_id BETWEEN $blockStart AND $blockEnd" ), - array('ORDER BY' => 'page_id ASC','USE INDEX' => 'PRIMARY') + array( 'ORDER BY' => 'page_id ASC', 'USE INDEX' => 'PRIMARY' ) ); - foreach( $res as $row ) { + foreach ( $res as $row ) { $rebuilt = false; + $wgRequestTime = wfTime(); # bug 22852 $wgTitle = Title::makeTitleSafe( $row->page_namespace, $row->page_title ); - if( null == $wgTitle ) { + if ( null == $wgTitle ) { $this->output( "Page {$row->page_id} has bad title\n" ); continue; // broken title? } @@ -81,24 +82,24 @@ class RebuildFileCache extends Maintenance { $wgUser->getSkin( $wgTitle ); // set skin title $wgArticle = new Article( $wgTitle ); // If the article is cacheable, then load it - if( $wgArticle->isFileCacheable() ) { + if ( $wgArticle->isFileCacheable() ) { $cache = new HTMLFileCache( $wgTitle ); - if( $cache->isFileCacheGood() ) { - if( $overwrite ) { + if ( $cache->isFileCacheGood() ) { + if ( $overwrite ) { $rebuilt = true; } else { $this->output( "Page {$row->page_id} already cached\n" ); continue; // done already! } } - ob_start( array(&$cache, 'saveToFileCache' ) ); // save on ob_end_clean() + ob_start( array( &$cache, 'saveToFileCache' ) ); // save on ob_end_clean() $wgUseFileCache = false; // hack, we don't want $wgArticle fiddling with filecache $wgArticle->view(); @$wgOut->output(); // header notices $wgUseFileCache = true; ob_end_clean(); // clear buffer $wgOut = new OutputPage(); // empty out any output page garbage - if( $rebuilt ) + if ( $rebuilt ) $this->output( "Re-cached page {$row->page_id}\n" ); else $this->output( "Cached page {$row->page_id}\n" ); @@ -112,14 +113,14 @@ class RebuildFileCache extends Maintenance { wfWaitForSlaves( 5 ); } $this->output( "Done!\n" ); - + // Remove these to be safe - if( isset($wgTitle) ) - unset($wgTitle); - if( isset($wgArticle) ) - unset($wgArticle); + if ( isset( $wgTitle ) ) + unset( $wgTitle ); + if ( isset( $wgArticle ) ) + unset( $wgArticle ); } } $maintClass = "RebuildFileCache"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/rebuildImages.php b/maintenance/rebuildImages.php index 0d3bdb3f..1848b104 100644 --- a/maintenance/rebuildImages.php +++ b/maintenance/rebuildImages.php @@ -1,5 +1,5 @@ <?php -/* +/** * Script to update image metadata records * * Usage: php rebuildImages.php [--missing] [--dry-run] @@ -7,7 +7,7 @@ * --missing Crawl the uploads dir for images without records, and * add them only. * - * Copyright (C) 2005 Brion Vibber <brion@pobox.com> + * Copyright © 2005 Brion Vibber <brion@pobox.com> * http://www.mediawiki.org/ * * This program is free software; you can redistribute it and/or modify @@ -27,23 +27,34 @@ * * @file * @author Brion Vibber <brion at pobox.com> - * @ingrouo maintenance + * @ingroup maintenance */ -$options = array( 'missing', 'dry-run' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); -require_once( dirname(__FILE__) . '/commandLine.inc' ); -require_once( 'FiveUpgrade.inc' ); +class ImageBuilder extends Maintenance { + function __construct() { + parent::__construct(); -class ImageBuilder extends FiveUpgrade { - function ImageBuilder( $dryrun = false ) { - parent::FiveUpgrade(); + $this->mDescription = 'Script to update image metadata records'; + $this->addOption( 'missing', 'Check for files without associated database record' ); + $this->addOption( 'dry-run', 'Only report, don\'t update the database' ); + } + + public function execute() { + $this->dbw = wfGetDB( DB_MASTER ); $this->maxLag = 10; # if slaves are lagged more than 10 secs, wait - $this->dryrun = $dryrun; - if ( $dryrun ) { + $this->dryrun = $this->hasOption( 'dry-run' ); + if ( $this->dryrun ) { $GLOBALS['wgReadOnly'] = 'Dry run mode, image upgrades are suppressed'; } + + if ( $this->hasOption( 'missing' ) ) { + $this->crawlMissing(); + } else { + $this->build(); + } } function getRepo() { @@ -69,7 +80,7 @@ class ImageBuilder extends FiveUpgrade { function progress( $updated ) { $this->updated += $updated; $this->processed++; - if( $this->processed % 100 != 0 ) { + if ( $this->processed % 100 != 0 ) { return; } $portion = $this->processed / $this->count; @@ -79,44 +90,40 @@ class ImageBuilder extends FiveUpgrade { $delta = $now - $this->startTime; $estimatedTotalTime = $delta / $portion; $eta = $this->startTime + $estimatedTotalTime; + $rate = $this->processed / $delta; - printf( "%s: %6.2f%% done on %s; ETA %s [%d/%d] %.2f/sec <%.2f%% updated>\n", + $this->output( sprintf( "%s: %6.2f%% done on %s; ETA %s [%d/%d] %.2f/sec <%.2f%% updated>\n", wfTimestamp( TS_DB, intval( $now ) ), $portion * 100.0, $this->table, wfTimestamp( TS_DB, intval( $eta ) ), - $completed, // $completed does not appear to be defined. + $this->processed, $this->count, - $rate, // $rate does not appear to be defined. - $updateRate * 100.0 ); + $rate, + $updateRate * 100.0 ) ); flush(); } function buildTable( $table, $key, $callback ) { - $fname = 'ImageBuilder::buildTable'; - - $count = $this->dbw->selectField( $table, 'count(*)', '', $fname ); + $count = $this->dbw->selectField( $table, 'count(*)', '', __METHOD__ ); $this->init( $count, $table ); - $this->log( "Processing $table..." ); + $this->output( "Processing $table...\n" ); - $tableName = $this->dbr->tableName( $table ); - $sql = "SELECT * FROM $tableName"; - $result = $this->dbr->query( $sql, $fname ); + $result = wfGetDB( DB_SLAVE )->select( $table, '*', array(), __METHOD__ ); - while( $row = $this->dbr->fetchObject( $result ) ) { + foreach ( $result as $row ) { $update = call_user_func( $callback, $row, null ); - if( $update ) { + if ( $update ) { $this->progress( 1 ); } else { $this->progress( 0 ); } } - $this->log( "Finished $table... $this->updated of $this->processed rows updated" ); - $this->dbr->freeResult( $result ); + $this->output( "Finished $table... $this->updated of $this->processed rows updated\n" ); } function buildImage() { - $callback = array( &$this, 'imageCallback' ); + $callback = array( $this, 'imageCallback' ); $this->buildTable( 'image', 'img_name', $callback ); } @@ -129,14 +136,14 @@ class ImageBuilder extends FiveUpgrade { function buildOldImage() { $this->buildTable( 'oldimage', 'oi_archive_name', - array( &$this, 'oldimageCallback' ) ); + array( $this, 'oldimageCallback' ) ); } function oldimageCallback( $row, $copy ) { // Create a File object from the row // This will also upgrade it if ( $row->oi_archive_name == '' ) { - $this->log( "Empty oi_archive_name for oi_name={$row->oi_name}" ); + $this->output( "Empty oi_archive_name for oi_name={$row->oi_name}\n" ); return false; } $file = $this->getRepo()->newFileFromRow( $row ); @@ -149,21 +156,20 @@ class ImageBuilder extends FiveUpgrade { } function checkMissingImage( $fullpath ) { - $fname = 'ImageBuilder::checkMissingImage'; $filename = wfBaseName( $fullpath ); - if( is_dir( $fullpath ) ) { + if ( is_dir( $fullpath ) ) { return; } - if( is_link( $fullpath ) ) { - $this->log( "skipping symlink at $fullpath" ); + if ( is_link( $fullpath ) ) { + $this->output( "skipping symlink at $fullpath\n" ); return; } $row = $this->dbw->selectRow( 'image', array( 'img_name' ), array( 'img_name' => $filename ), - $fname ); + __METHOD__ ); - if( $row ) { + if ( $row ) { // already known, move on return; } else { @@ -172,43 +178,35 @@ class ImageBuilder extends FiveUpgrade { } function addMissingImage( $filename, $fullpath ) { - $fname = 'ImageBuilder::addMissingImage'; - $timestamp = $this->dbw->timestamp( filemtime( $fullpath ) ); global $wgContLang; $altname = $wgContLang->checkTitleEncoding( $filename ); - if( $altname != $filename ) { - if( $this->dryrun ) { + if ( $altname != $filename ) { + if ( $this->dryrun ) { $filename = $altname; - $this->log( "Estimating transcoding... $altname" ); + $this->output( "Estimating transcoding... $altname\n" ); } else { $filename = $this->renameFile( $filename ); } } - if( $filename == '' ) { - $this->log( "Empty filename for $fullpath" ); + if ( $filename == '' ) { + $this->output( "Empty filename for $fullpath\n" ); return; } if ( !$this->dryrun ) { $file = wfLocalFile( $filename ); - if ( !$file->recordUpload( '', '(recovered file, missing upload log entry)', '', '', '', + if ( !$file->recordUpload( '', '(recovered file, missing upload log entry)', '', '', '', false, $timestamp ) ) { - $this->log( "Error uploading file $fullpath" ); + $this->output( "Error uploading file $fullpath\n" ); return; } } - $this->log( $fullpath ); + $this->output( $fullpath . "\n" ); } } -$builder = new ImageBuilder( isset( $options['dry-run'] ) ); -if( isset( $options['missing'] ) ) { - $builder->crawlMissing(); -} else { - $builder->build(); -} - - +$maintClass = 'ImageBuilder'; +require( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/rebuildInterwiki.inc b/maintenance/rebuildInterwiki.inc deleted file mode 100644 index 93261f86..00000000 --- a/maintenance/rebuildInterwiki.inc +++ /dev/null @@ -1,259 +0,0 @@ -<?php -/** - * Rebuild interwiki table using the file on meta and the language list - * Wikimedia specific! - * - * @file - * @todo document - * @ingroup Maintenance - * @ingroup Wikimedia - */ - -/** - * @todo document - * @ingroup Maintenance - */ -class Site { - var $suffix, $lateral, $url; - - function __construct( $s, $l, $u ) { - $this->suffix = $s; - $this->lateral = $l; - $this->url = $u; - } - - function getURL( $lang ) { - $xlang = str_replace( '_', '-', $lang ); - return "http://$xlang.{$this->url}/wiki/\$1"; - } -} - -function makeInterwikiSQL( $destDir ) { - global $langlist, $languageAliases, $prefixRewrites; - - # Multi-language sites - # db suffix => db suffix, iw prefix, hostname - $sites = array( - 'wiki' => new Site( 'wiki', 'w', 'wikipedia.org' ), - 'wiktionary' => new Site( 'wiktionary', 'wikt', 'wiktionary.org' ), - 'wikiquote' => new Site( 'wikiquote', 'q', 'wikiquote.org' ), - 'wikibooks' => new Site( 'wikibooks', 'b', 'wikibooks.org' ), - 'wikinews' => new Site( 'wikinews', 'n', 'wikinews.org' ), - 'wikisource' => new Site( 'wikisource', 's', 'wikisource.org' ), - 'wikimedia' => new Site( 'wikimedia', 'chapter', 'wikimedia.org' ), - 'wikiversity' => new Site( 'wikiversity', 'v', 'wikiversity.org' ), - ); - - # List of language prefixes likely to be found in multi-language sites - $langlist = array_map( "trim", file( "/home/wikipedia/common/langlist" ) ); - - # List of all database names - $dblist = array_map( "trim", file( "/home/wikipedia/common/all.dblist" ) ); - - # Special-case hostnames - $specials = array( - 'sourceswiki' => 'sources.wikipedia.org', - 'quotewiki' => 'wikiquote.org', - 'textbookwiki' => 'wikibooks.org', - 'sep11wiki' => 'sep11.wikipedia.org', - 'metawiki' => 'meta.wikimedia.org', - 'commonswiki' => 'commons.wikimedia.org', - 'specieswiki' => 'species.wikimedia.org', - ); - - # Extra interwiki links that can't be in the intermap for some reason - $extraLinks = array( - array( 'm', 'http://meta.wikimedia.org/wiki/$1', 1 ), - array( 'meta', 'http://meta.wikimedia.org/wiki/$1', 1 ), - array( 'sep11', 'http://sep11.wikipedia.org/wiki/$1', 1 ), - ); - - # Language aliases, usually configured as redirects to the real wiki in apache - # Interlanguage links are made directly to the real wiki - # Something horrible happens if you forget to list an alias here, I can't - # remember what - $languageAliases = array( - 'zh-cn' => 'zh', - 'zh-tw' => 'zh', - 'dk' => 'da', - 'nb' => 'no', - ); - - # Special case prefix rewrites, for the benefit of Swedish which uses s:t - # as an abbreviation for saint - $prefixRewrites = array( - 'svwiki' => array( 's' => 'src' ), - ); - - # Construct a list of reserved prefixes - $reserved = array(); - foreach ( $langlist as $lang ) { - $reserved[$lang] = 1; - } - foreach ( $languageAliases as $alias => $lang ) { - $reserved[$alias] = 1; - } - foreach( $sites as $site ) { - $reserved[$site->lateral] = 1; - } - - # Extract the intermap from meta - $intermap = Http::get( 'http://meta.wikimedia.org/w/index.php?title=Interwiki_map&action=raw', 30 ); - $lines = array_map( 'trim', explode( "\n", trim( $intermap ) ) ); - - if ( !$lines || count( $lines ) < 2 ) { - wfDie( "m:Interwiki_map not found" ); - } - - $iwArray = array(); - - foreach ( $lines as $line ) { - $matches = array(); - if ( preg_match( '/^\|\s*(.*?)\s*\|\|\s*(https?:\/\/.*?)\s*$/', $line, $matches ) ) { - $prefix = strtolower( $matches[1] ); - $url = $matches[2]; - if ( preg_match( '/(wikipedia|wiktionary|wikisource|wikiquote|wikibooks|wikimedia)\.org/', $url ) ) { - $local = 1; - } else { - $local = 0; - } - - if ( empty( $reserved[$prefix] ) ) { - $iwArray[$prefix] = array( "iw_prefix" => $prefix, "iw_url" => $url, "iw_local" => $local ); - } - } - } - - - - foreach ( $dblist as $db ) { - $sql = "-- Generated by rebuildInterwiki.php"; - if ( isset( $specials[$db] ) ) { - # Special wiki - # Has interwiki links and interlanguage links to wikipedia - - $host = $specials[$db]; - $sql .= "\n--$host\n\n"; - $sql .= "USE $db;\n" . - "TRUNCATE TABLE interwiki;\n" . - "INSERT INTO interwiki (iw_prefix, iw_url, iw_local) VALUES \n"; - $first = true; - - # Intermap links - foreach ( $iwArray as $iwEntry ) { - $sql .= makeLink( $iwEntry, $first, $db ); - } - - # Links to multilanguage sites - foreach ( $sites as $targetSite ) { - $sql .= makeLink( array( $targetSite->lateral, $targetSite->getURL( 'en' ), 1 ), $first, $db ); - } - - # Interlanguage links to wikipedia - $sql .= makeLanguageLinks( $sites['wiki'], $first, $db ); - - # Extra links - foreach ( $extraLinks as $link ) { - $sql .= makeLink( $link, $first, $db ); - } - - $sql .= ";\n"; - } else { - # Find out which site this DB belongs to - $site = false; - foreach( $sites as $candidateSite ) { - $suffix = $candidateSite->suffix; - if ( preg_match( "/(.*)$suffix$/", $db, $matches ) ) { - $site = $candidateSite; - break; - } - } - if ( !$site ) { - print "Invalid database $db\n"; - continue; - } - $lang = $matches[1]; - $host = "$lang." . $site->url; - $sql .= "\n--$host\n\n"; - - $sql .= "USE $db;\n" . - "TRUNCATE TABLE interwiki;\n" . - "INSERT INTO interwiki (iw_prefix,iw_url,iw_local) VALUES\n"; - $first = true; - - # Intermap links - foreach ( $iwArray as $iwEntry ) { - # Suppress links with the same name as the site - if ( ( $suffix == 'wiki' && $iwEntry['iw_prefix'] != 'wikipedia' ) || - ( $suffix != 'wiki' && $suffix != $iwEntry['iw_prefix'] ) ) - { - $sql .= makeLink( $iwEntry, $first, $db ); - } - } - - # Lateral links - foreach ( $sites as $targetSite ) { - # Suppress link to self - if ( $targetSite->suffix != $site->suffix ) { - $sql .= makeLink( array( $targetSite->lateral, $targetSite->getURL( $lang ), 1 ), $first, $db ); - } - } - - # Interlanguage links - $sql .= makeLanguageLinks( $site, $first, $db ); - - # w link within wikipedias - # Other sites already have it as a lateral link - if ( $site->suffix == "wiki" ) { - $sql .= makeLink( array("w", "http://en.wikipedia.org/wiki/$1", 1), $first, $db ); - } - - # Extra links - foreach ( $extraLinks as $link ){ - $sql .= makeLink( $link, $first, $db ); - } - $sql .= ";\n"; - } - file_put_contents( "$destDir/$db.sql", $sql ); - } -} - -# ------------------------------------------------------------------------------------------ - -# Returns part of an INSERT statement, corresponding to all interlanguage links to a particular site -function makeLanguageLinks( &$site, &$first, $source ) { - global $langlist, $languageAliases; - - $sql = ""; - - # Actual languages with their own databases - foreach ( $langlist as $targetLang ) { - $sql .= makeLink( array( $targetLang, $site->getURL( $targetLang ), 1 ), $first, $source ); - } - - # Language aliases - foreach ( $languageAliases as $alias => $lang ) { - $sql .= makeLink( array( $alias, $site->getURL( $lang ), 1 ), $first, $source ); - } - return $sql; -} - -# Make SQL for a single link from an array -function makeLink( $entry, &$first, $source ) { - global $prefixRewrites; - - if ( isset( $prefixRewrites[$source] ) && isset( $prefixRewrites[$source][$entry[0]] ) ) { - $entry[0] = $prefixRewrites[$source][$entry[0]]; - } - - $sql = ""; - # Add comma - if ( $first ) { - $first = false; - } else { - $sql .= ",\n"; - } - $dbr = wfGetDB( DB_SLAVE ); - $sql .= "(" . $dbr->makeList( $entry ) . ")"; - return $sql; -} diff --git a/maintenance/rebuildInterwiki.php b/maintenance/rebuildInterwiki.php index d3f3a4d2..3da920f8 100644 --- a/maintenance/rebuildInterwiki.php +++ b/maintenance/rebuildInterwiki.php @@ -9,21 +9,269 @@ * @ingroup Wikimedia */ -/** */ -$oldCwd = getcwd(); - -$optionsWithArgs = array( "d" ); -require_once( dirname(__FILE__) . '/commandLine.inc' ); -require( "rebuildInterwiki.inc" ); -chdir( $oldCwd ); - -# Output -if ( isset( $options['d'] ) ) { - $destDir = $options['d']; -} else { - $destDir = '/home/wikipedia/conf/interwiki/sql'; +/** + * @todo document + * @ingroup Maintenance + */ +class Site { + var $suffix, $lateral, $url; + + function __construct( $s, $l, $u ) { + $this->suffix = $s; + $this->lateral = $l; + $this->url = $u; + } + + function getURL( $lang ) { + $xlang = str_replace( '_', '-', $lang ); + return "http://$xlang.{$this->url}/wiki/\$1"; + } +} + +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); + +class RebuildInterwiki extends Maintenance { + public function __construct() { + parent::__construct(); + $this->mDescription = "Rebuild the interwiki table using the file on meta and the language list."; + $this->addOption( 'langlist', 'File with one language code per line', false, true ); + $this->addOption( 'dblist', 'File with one db per line', false, true ); + $this->addOption( 'd', 'Output folder', false, true ); + } + + function execute() { + # List of language prefixes likely to be found in multi-language sites + $this->langlist = array_map( "trim", file( $this->getOption( 'langlist', "/home/wikipedia/common/langlist" ) ) ); + + # List of all database names + $this->dblist = array_map( "trim", file( $this->getOption( 'dblist', "/home/wikipedia/common/all.dblist" ) ) ); + + # Special-case databases + //$this->specials = array_flip( array_map( "trim", file( $this->getOption( 'specialdbs', "/home/wikipedia/common/special.dblist" ) ) ) ); + + $this->makeInterwikiSQL( $this->getOption( 'd', '/home/wikipedia/conf/interwiki/sql' ) ); + } + + function makeInterwikiSQL( $destDir ) { + $this->output( "Making new interwiki SQL files in $destDir\n" ); + + # Multi-language sites + # db suffix => db suffix, iw prefix, hostname + $sites = array( + 'wiki' => new Site( 'wiki', 'w', 'wikipedia.org' ), + 'wiktionary' => new Site( 'wiktionary', 'wikt', 'wiktionary.org' ), + 'wikiquote' => new Site( 'wikiquote', 'q', 'wikiquote.org' ), + 'wikibooks' => new Site( 'wikibooks', 'b', 'wikibooks.org' ), + 'wikinews' => new Site( 'wikinews', 'n', 'wikinews.org' ), + 'wikisource' => new Site( 'wikisource', 's', 'wikisource.org' ), + 'wikimedia' => new Site( 'wikimedia', 'chapter', 'wikimedia.org' ), + 'wikiversity' => new Site( 'wikiversity', 'v', 'wikiversity.org' ), + ); + + # Special-case hostnames + $this->specials = array( + 'sourceswiki' => 'sources.wikipedia.org', + 'quotewiki' => 'wikiquote.org', + 'textbookwiki' => 'wikibooks.org', + 'sep11wiki' => 'sep11.wikipedia.org', + 'metawiki' => 'meta.wikimedia.org', + 'commonswiki' => 'commons.wikimedia.org', + 'specieswiki' => 'species.wikimedia.org', + ); + + # Extra interwiki links that can't be in the intermap for some reason + $extraLinks = array( + array( 'm', 'http://meta.wikimedia.org/wiki/$1', 1 ), + array( 'meta', 'http://meta.wikimedia.org/wiki/$1', 1 ), + array( 'sep11', 'http://sep11.wikipedia.org/wiki/$1', 1 ), + ); + + # Language aliases, usually configured as redirects to the real wiki in apache + # Interlanguage links are made directly to the real wiki + # Something horrible happens if you forget to list an alias here, I can't + # remember what + $this->languageAliases = array( + 'zh-cn' => 'zh', + 'zh-tw' => 'zh', + 'dk' => 'da', + 'nb' => 'no', + ); + + # Special case prefix rewrites, for the benefit of Swedish which uses s:t + # as an abbreviation for saint + $this->prefixRewrites = array( + 'svwiki' => array( 's' => 'src' ), + ); + + # Construct a list of reserved prefixes + $reserved = array(); + foreach ( $this->langlist as $lang ) { + $reserved[$lang] = 1; + } + foreach ( $this->languageAliases as $alias => $lang ) { + $reserved[$alias] = 1; + } + foreach ( $sites as $site ) { + $reserved[$site->lateral] = 1; + } + + # Extract the intermap from meta + $intermap = Http::get( 'http://meta.wikimedia.org/w/index.php?title=Interwiki_map&action=raw', 30 ); + $lines = array_map( 'trim', explode( "\n", trim( $intermap ) ) ); + + if ( !$lines || count( $lines ) < 2 ) { + $this->error( "m:Interwiki_map not found", true ); + } + + $iwArray = array(); + + foreach ( $lines as $line ) { + $matches = array(); + if ( preg_match( '/^\|\s*(.*?)\s*\|\|\s*(https?:\/\/.*?)\s*$/', $line, $matches ) ) { + $prefix = strtolower( $matches[1] ); + $url = $matches[2]; + if ( preg_match( '/(wikipedia|wiktionary|wikisource|wikiquote|wikibooks|wikimedia)\.org/', $url ) ) { + $local = 1; + } else { + $local = 0; + } + + if ( empty( $reserved[$prefix] ) ) { + $iwArray[$prefix] = array( "iw_prefix" => $prefix, "iw_url" => $url, "iw_local" => $local ); + } + } + } + + foreach ( $this->dblist as $db ) { + $sql = "-- Generated by rebuildInterwiki.php"; + if ( isset( $this->specials[$db] ) ) { + # Special wiki + # Has interwiki links and interlanguage links to wikipedia + + $host = $this->specials[$db]; + $sql .= "\n--$host\n\n"; + $sql .= "USE $db;\n" . + "TRUNCATE TABLE interwiki;\n" . + "INSERT INTO interwiki (iw_prefix, iw_url, iw_local) VALUES \n"; + $first = true; + + # Intermap links + foreach ( $iwArray as $iwEntry ) { + $sql .= $this->makeLink( $iwEntry, $first, $db ); + } + + # Links to multilanguage sites + foreach ( $sites as $targetSite ) { + $sql .= $this->makeLink( array( $targetSite->lateral, $targetSite->getURL( 'en' ), 1 ), $first, $db ); + } + + # Interlanguage links to wikipedia + $sql .= $this->makeLanguageLinks( $sites['wiki'], $first, $db ); + + # Extra links + foreach ( $extraLinks as $link ) { + $sql .= $this->makeLink( $link, $first, $db ); + } + + $sql .= ";\n"; + } else { + # Find out which site this DB belongs to + $site = false; + foreach ( $sites as $candidateSite ) { + $suffix = $candidateSite->suffix; + if ( preg_match( "/(.*)$suffix$/", $db, $matches ) ) { + $site = $candidateSite; + break; + } + } + if ( !$site ) { + print "Invalid database $db\n"; + continue; + } + $lang = $matches[1]; + $host = "$lang." . $site->url; + $sql .= "\n--$host\n\n"; + + $sql .= "USE $db;\n" . + "TRUNCATE TABLE interwiki;\n" . + "INSERT INTO interwiki (iw_prefix,iw_url,iw_local) VALUES\n"; + $first = true; + + # Intermap links + foreach ( $iwArray as $iwEntry ) { + # Suppress links with the same name as the site + if ( ( $suffix == 'wiki' && $iwEntry['iw_prefix'] != 'wikipedia' ) || + ( $suffix != 'wiki' && $suffix != $iwEntry['iw_prefix'] ) ) + { + $sql .= $this->makeLink( $iwEntry, $first, $db ); + } + } + + # Lateral links + foreach ( $sites as $targetSite ) { + # Suppress link to self + if ( $targetSite->suffix != $site->suffix ) { + $sql .= $this->makeLink( array( $targetSite->lateral, $targetSite->getURL( $lang ), 1 ), $first, $db ); + } + } + + # Interlanguage links + $sql .= $this->makeLanguageLinks( $site, $first, $db ); + + # w link within wikipedias + # Other sites already have it as a lateral link + if ( $site->suffix == "wiki" ) { + $sql .= $this->makeLink( array( "w", "http://en.wikipedia.org/wiki/$1", 1 ), $first, $db ); + } + + # Extra links + foreach ( $extraLinks as $link ) { + $sql .= $this->makeLink( $link, $first, $db ); + } + $sql .= ";\n"; + } + file_put_contents( "$destDir/$db.sql", $sql ); + } + } + + # ------------------------------------------------------------------------------------------ + + # Returns part of an INSERT statement, corresponding to all interlanguage links to a particular site + function makeLanguageLinks( &$site, &$first, $source ) { + $sql = ""; + + # Actual languages with their own databases + foreach ( $this->langlist as $targetLang ) { + $sql .= $this->makeLink( array( $targetLang, $site->getURL( $targetLang ), 1 ), $first, $source ); + } + + # Language aliases + foreach ( $this->languageAliases as $alias => $lang ) { + $sql .= $this->makeLink( array( $alias, $site->getURL( $lang ), 1 ), $first, $source ); + } + return $sql; + } + + # Make SQL for a single link from an array + function makeLink( $entry, &$first, $source ) { + + if ( isset( $this->prefixRewrites[$source] ) && isset($entry[0]) && isset( $this->prefixRewrites[$source][$entry[0]] ) ) { + $entry[0] = $this->prefixRewrites[$source][$entry[0]]; + } + + $sql = ""; + # Add comma + if ( $first ) { + $first = false; + } else { + $sql .= ",\n"; + } + $dbr = wfGetDB( DB_SLAVE ); + $sql .= "(" . $dbr->makeList( $entry ) . ")"; + return $sql; + } } -echo "Making new interwiki SQL files in $destDir\n"; -makeInterwikiSQL( $destDir ); +$maintClass = "RebuildInterwiki"; +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/rebuildLocalisationCache.php b/maintenance/rebuildLocalisationCache.php index 1c517415..0ca99610 100644 --- a/maintenance/rebuildLocalisationCache.php +++ b/maintenance/rebuildLocalisationCache.php @@ -28,7 +28,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class RebuildLocalisationCache extends Maintenance { public function __construct() { @@ -37,7 +37,7 @@ class RebuildLocalisationCache extends Maintenance { $this->addOption( 'force', 'Rebuild all files, even ones not out of date' ); $this->addOption( 'threads', 'Fork more than one thread', false, true ); } - + public function memoryLimit() { return '200M'; } @@ -45,17 +45,17 @@ class RebuildLocalisationCache extends Maintenance { public function execute() { global $wgLocalisationCacheConf; - $force = $this->hasOption('force'); + $force = $this->hasOption( 'force' ); $threads = $this->getOption( 'threads', 1 ); - if( $threads < 1 || $threads != intval( $threads ) ) { + if ( $threads < 1 || $threads != intval( $threads ) ) { $this->output( "Invalid thread count specified; running single-threaded.\n" ); $threads = 1; } - if( $threads > 1 && wfIsWindows() ) { + if ( $threads > 1 && wfIsWindows() ) { $this->output( "Threaded rebuild is not supported on Windows; running single-threaded.\n" ); $threads = 1; } - if( $threads > 1 && !function_exists( 'pcntl_fork' ) ) { + if ( $threads > 1 && !function_exists( 'pcntl_fork' ) ) { $this->output( "PHP pcntl extension is not present; running single-threaded.\n" ); $threads = 1; } @@ -72,8 +72,8 @@ class RebuildLocalisationCache extends Maintenance { // Initialise and split into chunks $numRebuilt = 0; - $total = count($codes); - $chunks = array_chunk( $codes, ceil(count($codes)/$threads) ); + $total = count( $codes ); + $chunks = array_chunk( $codes, ceil( count( $codes ) / $threads ) ); $pids = array(); foreach ( $chunks as $codes ) { // Do not fork for only one thread @@ -82,11 +82,11 @@ class RebuildLocalisationCache extends Maintenance { if ( $pid === 0 ) { // Child, reseed because there is no bug in PHP: // http://bugs.php.net/bug.php?id=42465 - mt_srand(getmypid()); + mt_srand( getmypid() ); $numRebuilt = $this->doRebuild( $codes, $lc, $force ); // Abuse the exit value for the count of rebuild languages - exit($numRebuilt); - } elseif ($pid === -1) { + exit( $numRebuilt ); + } elseif ( $pid === -1 ) { // Fork failed or one thread, do it serialized $numRebuilt += $this->doRebuild( $codes, $lc, $force ); } else { @@ -97,9 +97,9 @@ class RebuildLocalisationCache extends Maintenance { // Wait for all children foreach ( $pids as $pid ) { $status = 0; - pcntl_waitpid($pid, $status); + pcntl_waitpid( $pid, $status ); // Fetch the count from the return value - $numRebuilt += pcntl_wexitstatus($status); + $numRebuilt += pcntl_wexitstatus( $status ); } $this->output( "$numRebuilt languages rebuilt out of $total\n" ); @@ -130,4 +130,4 @@ class RebuildLocalisationCache extends Maintenance { } $maintClass = "RebuildLocalisationCache"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/rebuildall.php b/maintenance/rebuildall.php index a2c1be93..82619048 100644 --- a/maintenance/rebuildall.php +++ b/maintenance/rebuildall.php @@ -21,7 +21,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class RebuildAll extends Maintenance { public function __construct() { @@ -47,10 +47,10 @@ class RebuildAll extends Maintenance { $this->output( "\n\n** Rebuilding links tables -- this can take a long time. It should be safe to abort via ctrl+C if you get bored.\n" ); $rebuildLinks = $this->runChild( 'RefreshLinks', 'refreshLinks.php' ); $rebuildLinks->execute(); - + $this->output( "Done.\n" ); } } $maintClass = "RebuildAll"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/rebuildmessages.php b/maintenance/rebuildmessages.php index 546d5214..de37da7e 100644 --- a/maintenance/rebuildmessages.php +++ b/maintenance/rebuildmessages.php @@ -20,7 +20,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class RebuildMessages extends Maintenance { public function __construct() { @@ -30,16 +30,16 @@ class RebuildMessages extends Maintenance { public function execute() { global $wgLocalDatabases, $wgDBname, $wgEnableSidebarCache, $messageMemc; - if( $wgLocalDatabases ) { + if ( $wgLocalDatabases ) { $databases = $wgLocalDatabases; } else { $databases = array( $wgDBname ); } - - foreach( $databases as $db ) { + + foreach ( $databases as $db ) { $this->output( "Deleting message cache for {$db}... " ); $messageMemc->delete( "{$db}:messages" ); - if( $wgEnableSidebarCache ) + if ( $wgEnableSidebarCache ) $messageMemc->delete( "{$db}:sidebar" ); $this->output( "Deleted\n" ); } @@ -47,4 +47,4 @@ class RebuildMessages extends Maintenance { } $maintClass = "RebuildMessages"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/rebuildrecentchanges.php b/maintenance/rebuildrecentchanges.php index 6c76dc59..8964d1a4 100644 --- a/maintenance/rebuildrecentchanges.php +++ b/maintenance/rebuildrecentchanges.php @@ -22,7 +22,7 @@ * @todo Document */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class RebuildRecentchanges extends Maintenance { public function __construct() { @@ -31,8 +31,6 @@ class RebuildRecentchanges extends Maintenance { } public function execute() { - global $wgTitle; - $wgTitle = Title::newFromText( "Rebuild recent changes script" ); $this->rebuildRecentChangesTablePass1(); $this->rebuildRecentChangesTablePass2(); $this->rebuildRecentChangesTablePass3(); @@ -45,24 +43,23 @@ class RebuildRecentchanges extends Maintenance { * Rebuild pass 1 * DOCUMENT ME! */ - function rebuildRecentChangesTablePass1() - { + private function rebuildRecentChangesTablePass1() { $dbw = wfGetDB( DB_MASTER ); - + $dbw->delete( 'recentchanges', '*' ); - + $this->output( "Loading from page and revision tables...\n" ); - + global $wgRCMaxAge; - + $this->output( '$wgRCMaxAge=' . $wgRCMaxAge ); $days = $wgRCMaxAge / 24 / 3600; - if ( intval($days) == $days ) { + if ( intval( $days ) == $days ) { $this->output( " (" . $days . " days)\n" ); } else { - $this->output( " (approx. " . intval($days) . " days)\n" ); + $this->output( " (approx. " . intval( $days ) . " days)\n" ); } - + $cutoff = time() - $wgRCMaxAge; $dbw->insertSelect( 'recentchanges', array( 'page', 'revision' ), array( @@ -96,57 +93,65 @@ class RebuildRecentchanges extends Maintenance { */ private function rebuildRecentChangesTablePass2() { $dbw = wfGetDB( DB_MASTER ); - list ($recentchanges, $revision) = $dbw->tableNamesN( 'recentchanges', 'revision' ); - + list ( $recentchanges, $revision ) = $dbw->tableNamesN( 'recentchanges', 'revision' ); + $this->output( "Updating links and size differences...\n" ); - + # Fill in the rc_last_oldid field, which points to the previous edit $sql = "SELECT rc_cur_id,rc_this_oldid,rc_timestamp FROM $recentchanges " . "ORDER BY rc_cur_id,rc_timestamp"; $res = $dbw->query( $sql, DB_MASTER ); - + $lastCurId = 0; $lastOldId = 0; foreach ( $res as $obj ) { $new = 0; - if( $obj->rc_cur_id != $lastCurId ) { + if ( $obj->rc_cur_id != $lastCurId ) { # Switch! Look up the previous last edit, if any $lastCurId = intval( $obj->rc_cur_id ); $emit = $obj->rc_timestamp; $sql2 = "SELECT rev_id,rev_len FROM $revision " . - "WHERE rev_page={$lastCurId} ". + "WHERE rev_page={$lastCurId} " . "AND rev_timestamp<'{$emit}' ORDER BY rev_timestamp DESC"; - $sql2 = $dbw->limitResult($sql2, 1, false); + $sql2 = $dbw->limitResult( $sql2, 1, false ); $res2 = $dbw->query( $sql2 ); - if( $row = $dbw->fetchObject( $res2 ) ) { - $lastOldId = intval($row->rev_id); + $row = $dbw->fetchObject( $res2 ); + if ( $row ) { + $lastOldId = intval( $row->rev_id ); # Grab the last text size if available - $lastSize = !is_null($row->rev_len) ? intval($row->rev_len) : 'NULL'; + $lastSize = !is_null( $row->rev_len ) ? intval( $row->rev_len ) : 'NULL'; } else { # No previous edit $lastOldId = 0; $lastSize = 'NULL'; $new = 1; // probably true } - $dbw->freeResult( $res2 ); } - if( $lastCurId == 0 ) { + if ( $lastCurId == 0 ) { $this->output( "Uhhh, something wrong? No curid\n" ); } else { # Grab the entry's text size - $size = $dbw->selectField( 'revision', 'rev_len', array('rev_id' => $obj->rc_this_oldid ) ); - $size = !is_null($size) ? intval($size) : 'NULL'; - - $sql3 = "UPDATE $recentchanges SET rc_last_oldid=$lastOldId,rc_new=$new,rc_type=$new," . - "rc_old_len=$lastSize,rc_new_len=$size " . - "WHERE rc_cur_id={$lastCurId} AND rc_this_oldid={$obj->rc_this_oldid}"; - $dbw->query( $sql3 ); - + $size = $dbw->selectField( 'revision', 'rev_len', array( 'rev_id' => $obj->rc_this_oldid ) ); + $size = !is_null( $size ) ? intval( $size ) : 'NULL'; + + $dbw->update( 'recentchanges', + array( + 'rc_last_oldid' => $lastOldId, + 'rc_new' => $new, + 'rc_type' => $new, + 'rc_old_len' => $lastSize, + 'rc_new_len' => $size, + ), array( + 'rc_cur_id' => $lastCurId, + 'rc_this_oldid' => $obj->rc_this_oldid, + ), + __METHOD__ + ); + $lastOldId = intval( $obj->rc_this_oldid ); $lastSize = $size; } } - $dbw->freeResult( $res ); } /** @@ -155,22 +160,22 @@ class RebuildRecentchanges extends Maintenance { */ private function rebuildRecentChangesTablePass3() { $dbw = wfGetDB( DB_MASTER ); - + $this->output( "Loading from user, page, and logging tables...\n" ); - + global $wgRCMaxAge, $wgLogTypes, $wgLogRestrictions; // Some logs don't go in RC. This should check for that $basicRCLogs = array_diff( $wgLogTypes, array_keys( $wgLogRestrictions ) ); - + // Escape...blah blah $selectLogs = array(); - foreach( $basicRCLogs as $logtype ) { + foreach ( $basicRCLogs as $logtype ) { $safetype = $dbw->strencode( $logtype ); $selectLogs[] = "'$safetype'"; } - + $cutoff = time() - $wgRCMaxAge; - list($logging, $page) = $dbw->tableNamesN( 'logging', 'page' ); + list( $logging, $page ) = $dbw->tableNamesN( 'logging', 'page' ); $dbw->insertSelect( 'recentchanges', array( 'user', "$logging LEFT JOIN $page ON (log_namespace=page_namespace AND log_title=page_title)" ), array( 'rc_timestamp' => 'log_timestamp', @@ -196,7 +201,7 @@ class RebuildRecentchanges extends Maintenance { ), array( 'log_timestamp > ' . $dbw->addQuotes( $dbw->timestamp( $cutoff ) ), 'log_user=user_id', - 'log_type IN(' . implode(',',$selectLogs) . ')' + 'log_type IN(' . implode( ',', $selectLogs ) . ')' ), __METHOD__, array(), // INSERT options array( 'ORDER BY' => 'log_timestamp DESC', 'LIMIT' => 5000 ) // SELECT options @@ -209,38 +214,38 @@ class RebuildRecentchanges extends Maintenance { */ private function rebuildRecentChangesTablePass4() { global $wgGroupPermissions, $wgUseRCPatrol; - + $dbw = wfGetDB( DB_MASTER ); - - list($recentchanges,$usergroups,$user) = $dbw->tableNamesN( 'recentchanges', 'user_groups', 'user' ); - + + list( $recentchanges, $usergroups, $user ) = $dbw->tableNamesN( 'recentchanges', 'user_groups', 'user' ); + $botgroups = $autopatrolgroups = array(); - foreach( $wgGroupPermissions as $group => $rights ) { - if( isset( $rights['bot'] ) && $rights['bot'] == true ) { + foreach ( $wgGroupPermissions as $group => $rights ) { + if ( isset( $rights['bot'] ) && $rights['bot'] ) { $botgroups[] = $dbw->addQuotes( $group ); } - if( $wgUseRCPatrol && isset( $rights['autopatrol'] ) && $rights['autopatrol'] == true ) { + if ( $wgUseRCPatrol && isset( $rights['autopatrol'] ) && $rights['autopatrol'] ) { $autopatrolgroups[] = $dbw->addQuotes( $group ); } } # Flag our recent bot edits - if( !empty($botgroups) ) { - $botwhere = implode(',',$botgroups); + if ( !empty( $botgroups ) ) { + $botwhere = implode( ',', $botgroups ); $botusers = array(); - + $this->output( "Flagging bot account edits...\n" ); - + # Find all users that are bots $sql = "SELECT DISTINCT user_name FROM $usergroups, $user " . "WHERE ug_group IN($botwhere) AND user_id = ug_user"; $res = $dbw->query( $sql, DB_MASTER ); - - foreach( $res as $obj ) { + + foreach ( $res as $obj ) { $botusers[] = $dbw->addQuotes( $obj->user_name ); } # Fill in the rc_bot field - if( !empty($botusers) ) { - $botwhere = implode(',',$botusers); + if ( !empty( $botusers ) ) { + $botwhere = implode( ',', $botusers ); $sql2 = "UPDATE $recentchanges SET rc_bot=1 " . "WHERE rc_user_text IN($botwhere)"; $dbw->query( $sql2 ); @@ -248,31 +253,29 @@ class RebuildRecentchanges extends Maintenance { } global $wgMiserMode; # Flag our recent autopatrolled edits - if( !$wgMiserMode && !empty($autopatrolgroups) ) { - $patrolwhere = implode(',',$autopatrolgroups); + if ( !$wgMiserMode && !empty( $autopatrolgroups ) ) { + $patrolwhere = implode( ',', $autopatrolgroups ); $patrolusers = array(); - + $this->output( "Flagging auto-patrolled edits...\n" ); - + # Find all users in RC with autopatrol rights $sql = "SELECT DISTINCT user_name FROM $usergroups, $user " . "WHERE ug_group IN($patrolwhere) AND user_id = ug_user"; $res = $dbw->query( $sql, DB_MASTER ); - - foreach( $res as $obj ) { + + foreach ( $res as $obj ) { $patrolusers[] = $dbw->addQuotes( $obj->user_name ); } - + # Fill in the rc_patrolled field - if( !empty($patrolusers) ) { - $patrolwhere = implode(',',$patrolusers); + if ( !empty( $patrolusers ) ) { + $patrolwhere = implode( ',', $patrolusers ); $sql2 = "UPDATE $recentchanges SET rc_patrolled=1 " . "WHERE rc_user_text IN($patrolwhere)"; $dbw->query( $sql2 ); } } - - $dbw->freeResult( $res ); } /** @@ -283,7 +286,7 @@ class RebuildRecentchanges extends Maintenance { $this->output( "Deleting feed timestamps.\n" ); - foreach( $wgFeedClasses as $feed => $className ) { + foreach ( $wgFeedClasses as $feed => $className ) { $messageMemc->delete( wfMemcKey( 'rcfeed', $feed, 'timestamp' ) ); # Good enough for now. } } @@ -291,4 +294,4 @@ class RebuildRecentchanges extends Maintenance { } $maintClass = "RebuildRecentchanges"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/rebuildtextindex.php b/maintenance/rebuildtextindex.php index 4521c6f5..46282c18 100644 --- a/maintenance/rebuildtextindex.php +++ b/maintenance/rebuildtextindex.php @@ -24,10 +24,10 @@ * @todo document */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class RebuildTextIndex extends Maintenance { - const RTI_CHUNK_SIZE = 500; + const RTI_CHUNK_SIZE = 500; private $db; public function __construct() { @@ -46,11 +46,20 @@ class RebuildTextIndex extends Maintenance { if ( $wgDBtype == 'postgres' ) { $this->error( "This script is not needed when using Postgres.\n", true ); } - + $this->db = wfGetDB( DB_MASTER ); + if ( $this->db->getType() == 'sqlite' ) { + if ( !DatabaseSqlite::getFulltextSearchModule() ) { + $this->error( "Your version of SQLite module for PHP doesn't support full-text search (FTS3).\n", true ); + } + if ( !$this->db->checkForEnabledSearch() ) { + $this->error( "Your database schema is not configured for full-text search support. Run update.php.\n", true ); + } + } + $wgTitle = Title::newFromText( "Rebuild text index script" ); - - if ( $wgDBtype == 'mysql' ) { + + if ( $this->db->getType() == 'mysql' ) { $this->dropMysqlTextIndex(); $this->populateSearchIndex(); $this->createMysqlTextIndex(); @@ -58,7 +67,7 @@ class RebuildTextIndex extends Maintenance { $this->clearSearchIndex(); $this->populateSearchIndex(); } - + $this->output( "Done.\n" ); } @@ -67,27 +76,28 @@ class RebuildTextIndex extends Maintenance { */ protected function populateSearchIndex() { $res = $this->db->select( 'page', 'MAX(page_id) AS count' ); - $s = $this->db->fetchObject($res); + $s = $this->db->fetchObject( $res ); $count = $s->count; $this->output( "Rebuilding index fields for {$count} pages...\n" ); $n = 0; - + while ( $n < $count ) { - $this->output( $n . "\n" ); + if ( $n ) { + $this->output( $n . "\n" ); + } $end = $n + self::RTI_CHUNK_SIZE - 1; - $res = $this->db->select( array( 'page', 'revision', 'text' ), + $res = $this->db->select( array( 'page', 'revision', 'text' ), array( 'page_id', 'page_namespace', 'page_title', 'old_flags', 'old_text' ), array( "page_id BETWEEN $n AND $end", 'page_latest = rev_id', 'rev_text_id = old_id' ), __METHOD__ ); - - foreach( $res as $s ) { + + foreach ( $res as $s ) { $revtext = Revision::getRevisionText( $s ); $u = new SearchUpdate( $s->page_id, $s->page_title, $revtext ); $u->doUpdate(); } - $this->db->freeResult( $res ); $n += self::RTI_CHUNK_SIZE; } } @@ -100,7 +110,7 @@ class RebuildTextIndex extends Maintenance { if ( $this->db->indexExists( 'searchindex', 'si_title' ) ) { $this->output( "Dropping index...\n" ); $sql = "ALTER TABLE $searchindex DROP INDEX si_title, DROP INDEX si_text"; - $this->db->query($sql, __METHOD__ ); + $this->db->query( $sql, __METHOD__ ); } } @@ -126,4 +136,4 @@ class RebuildTextIndex extends Maintenance { } $maintClass = "RebuildTextIndex"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/refreshImageCount.php b/maintenance/refreshImageCount.php index 44794cc7..f9bdeea7 100644 --- a/maintenance/refreshImageCount.php +++ b/maintenance/refreshImageCount.php @@ -21,14 +21,14 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class RefreshImageCount extends Maintenance { public function __construct() { parent::__construct(); $this->mDescription = "Resets ss_image count, forcing slaves to pick it up."; } - + public function execute() { $dbw = wfGetDB( DB_MASTER ); @@ -41,7 +41,7 @@ class RefreshImageCount extends Maintenance { $dbw->update( 'site_stats', array( 'ss_images' => null ), array( 'ss_row_id' => 1 ) ); - + // Now this update will be forced to go out $dbw->update( 'site_stats', array( 'ss_images' => $count ), @@ -50,5 +50,5 @@ class RefreshImageCount extends Maintenance { } $maintClass = "RefreshImageCount"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/refreshLinks.php b/maintenance/refreshLinks.php index 863dd022..144e96c5 100644 --- a/maintenance/refreshLinks.php +++ b/maintenance/refreshLinks.php @@ -18,7 +18,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class RefreshLinks extends Maintenance { public function __construct() { @@ -35,10 +35,10 @@ class RefreshLinks extends Maintenance { } public function execute() { - if( !$this->hasOption( 'dfn-only' ) ) { + $max = $this->getOption( 'm', 0 ); + if ( !$this->hasOption( 'dfn-only' ) ) { $start = $this->getArg( 0, 1 ); $new = $this->getOption( 'new-only', false ); - $max = $this->getOption( 'm', false ); $end = $this->getOption( 'e', 0 ); $redir = $this->getOption( 'redirects-only', false ); $oldRedir = $this->getOption( 'old-redirects-only', false ); @@ -56,7 +56,7 @@ class RefreshLinks extends Maintenance { * @param $redirectsOnly bool Only fix redirects * @param $oldRedirectsOnly bool Only fix redirects without redirect entries */ - private function doRefreshLinks( $start, $newOnly = false, $maxLag = false, + private function doRefreshLinks( $start, $newOnly = false, $maxLag = false, $end = 0, $redirectsOnly = false, $oldRedirectsOnly = false ) { global $wgUser, $wgParser, $wgUseTidy; @@ -65,10 +65,10 @@ class RefreshLinks extends Maintenance { $start = intval( $start ); # Don't generate TeX PNGs (lack of a sensible current directory causes errors anyway) - $wgUser->setOption('math', MW_MATH_SOURCE); + $wgUser->setOption( 'math', MW_MATH_SOURCE ); # Don't generate extension images (e.g. Timeline) - if( method_exists( $wgParser, "clearTagHooks" ) ) { + if ( method_exists( $wgParser, "clearTagHooks" ) ) { $wgParser->clearTagHooks(); } @@ -77,28 +77,29 @@ class RefreshLinks extends Maintenance { $what = $redirectsOnly ? "redirects" : "links"; - if( $oldRedirectsOnly ) { + if ( $oldRedirectsOnly ) { # This entire code path is cut-and-pasted from below. Hurrah. $res = $dbr->query( - "SELECT page_id ". - "FROM page ". - "LEFT JOIN redirect ON page_id=rd_from ". - "WHERE page_is_redirect=1 AND rd_from IS NULL AND ". - ($end == 0 ? "page_id >= $start" - : "page_id BETWEEN $start AND $end"), + "SELECT page_id " . + "FROM page " . + "LEFT JOIN redirect ON page_id=rd_from " . + "WHERE page_is_redirect=1 AND rd_from IS NULL AND " . + ( $end == 0 ? "page_id >= $start" + : "page_id BETWEEN $start AND $end" ), __METHOD__ ); $num = $dbr->numRows( $res ); $this->output( "Refreshing $num old redirects from $start...\n" ); - foreach( $res as $row ) { + $i = 0; + foreach ( $res as $row ) { if ( !( ++$i % $reportingInterval ) ) { $this->output( "$i\n" ); wfWaitForSlaves( $maxLag ); } $this->fixRedirect( $row->page_id ); } - } elseif( $newOnly ) { + } elseif ( $newOnly ) { $this->output( "Refreshing $what from " ); $res = $dbr->select( 'page', array( 'page_id' ), @@ -109,17 +110,17 @@ class RefreshLinks extends Maintenance { ); $num = $dbr->numRows( $res ); $this->output( "$num new articles...\n" ); - + $i = 0; foreach ( $res as $row ) { if ( !( ++$i % $reportingInterval ) ) { $this->output( "$i\n" ); wfWaitForSlaves( $maxLag ); } - if($redirectsOnly) + if ( $redirectsOnly ) $this->fixRedirect( $row->page_id ); else - $this->fixLinksFromArticle( $row->page_id ); + self::fixLinksFromArticle( $row->page_id ); } } else { if ( !$end ) { @@ -129,27 +130,27 @@ class RefreshLinks extends Maintenance { } $this->output( "Refreshing redirects table.\n" ); $this->output( "Starting from page_id $start of $end.\n" ); - - for ($id = $start; $id <= $end; $id++) { - - if ( !($id % $reportingInterval) ) { + + for ( $id = $start; $id <= $end; $id++ ) { + + if ( !( $id % $reportingInterval ) ) { $this->output( "$id\n" ); wfWaitForSlaves( $maxLag ); } $this->fixRedirect( $id ); } - if(!$redirectsOnly) { + if ( !$redirectsOnly ) { $this->output( "Refreshing links table.\n" ); $this->output( "Starting from page_id $start of $end.\n" ); - for ($id = $start; $id <= $end; $id++) { - - if ( !($id % $reportingInterval) ) { + for ( $id = $start; $id <= $end; $id++ ) { + + if ( !( $id % $reportingInterval ) ) { $this->output( "$id\n" ); wfWaitForSlaves( $maxLag ); } - $this->fixLinksFromArticle( $id ); + self::fixLinksFromArticle( $id ); } } } @@ -159,12 +160,12 @@ class RefreshLinks extends Maintenance { * Update the redirect entry for a given page * @param $id int The page_id of the redirect */ - private function fixRedirect( $id ){ + private function fixRedirect( $id ) { global $wgTitle, $wgArticle; - + $wgTitle = Title::newFromID( $id ); $dbw = wfGetDB( DB_MASTER ); - + if ( is_null( $wgTitle ) ) { // This page doesn't exist (any more) // Delete any redirect table entry for it @@ -172,17 +173,17 @@ class RefreshLinks extends Maintenance { __METHOD__ ); return; } - $wgArticle = new Article($wgTitle); - + $wgArticle = new Article( $wgTitle ); + $rt = $wgArticle->followRedirect(); - - if($rt == false || !is_object($rt)) { + + if ( !$rt || !is_object( $rt ) ) { // $wgTitle is not a redirect // Delete any redirect table entry for it $dbw->delete( 'redirect', array( 'rd_from' => $id ), __METHOD__ ); } else { - $wgArticle->updateRedirectOn($dbw,$rt); + $wgArticle->updateRedirectOn( $dbw, $rt ); } } @@ -190,14 +191,13 @@ class RefreshLinks extends Maintenance { * Run LinksUpdate for all links on a given page_id * @param $id int The page_id */ - private function fixLinksFromArticle( $id ) { + public static function fixLinksFromArticle( $id ) { global $wgTitle, $wgParser; $wgTitle = Title::newFromID( $id ); $dbw = wfGetDB( DB_MASTER ); - $linkCache =& LinkCache::singleton(); - $linkCache->clear(); + LinkCache::singleton()->clear(); if ( is_null( $wgTitle ) ) { return; @@ -248,21 +248,21 @@ class RefreshLinks extends Maintenance { // SELECT DISTINCT( $field ) FROM $table LEFT JOIN page ON $field=page_id WHERE page_id IS NULL; $results = $dbr->select( array( $table, 'page' ), $field, - array('page_id' => null ), + array( 'page_id' => null ), __METHOD__, 'DISTINCT', - array( 'page' => array( 'LEFT JOIN', "$field=page_id")) + array( 'page' => array( 'LEFT JOIN', "$field=page_id" ) ) ); $counter = 0; $list = array(); $this->output( "0.." ); - foreach( $results as $row ) { + foreach ( $results as $row ) { $counter++; $list[] = $row->$field; if ( ( $counter % $batchSize ) == 0 ) { - wfWaitForSlaves(5); + wfWaitForSlaves( 5 ); $dbw->delete( $table, array( $field => $list ), __METHOD__ ); $this->output( $counter . ".." ); @@ -270,7 +270,7 @@ class RefreshLinks extends Maintenance { } } $this->output( $counter ); - if (count($list) > 0) { + if ( count( $list ) > 0 ) { $dbw->delete( $table, array( $field => $list ), __METHOD__ ); } $this->output( "\n" ); @@ -280,4 +280,4 @@ class RefreshLinks extends Maintenance { } $maintClass = 'RefreshLinks'; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/removeUnusedAccounts.php b/maintenance/removeUnusedAccounts.php index 7b0535b7..44c27b35 100644 --- a/maintenance/removeUnusedAccounts.php +++ b/maintenance/removeUnusedAccounts.php @@ -22,7 +22,7 @@ * @author Rob Church <robchur@gmail.com> */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class RemoveUnusedAccounts extends Maintenance { public function __construct() { @@ -35,26 +35,26 @@ class RemoveUnusedAccounts extends Maintenance { public function execute() { $this->output( "Remove unused accounts\n\n" ); - + # Do an initial scan for inactive accounts and report the result $this->output( "Checking for unused user accounts...\n" ); $del = array(); $dbr = wfGetDB( DB_SLAVE ); $res = $dbr->select( 'user', array( 'user_id', 'user_name', 'user_touched' ), '', __METHOD__ ); - if( $this->hasOption('ignore-groups') ) { - $excludedGroups = explode( ',', $this->getOption('ignore-groups') ); - } else { + if ( $this->hasOption( 'ignore-groups' ) ) { + $excludedGroups = explode( ',', $this->getOption( 'ignore-groups' ) ); + } else { $excludedGroups = array(); } $touched = $this->getOption( 'ignore-touched', "1" ); - if( !ctype_digit( $touched ) ) { + if ( !ctype_digit( $touched ) ) { $this->error( "Please put a valid positive integer on the --ignore-touched parameter.", true ); } $touchedSeconds = 86400 * $touched; - foreach( $res as $row ) { + foreach ( $res as $row ) { # Check the account, but ignore it if it's within a $excludedGroups group or if it's touched within the $touchedSeconds seconds. $instance = User::newFromId( $row->user_id ); - if( count( array_intersect( $instance->getEffectiveGroups(), $excludedGroups ) ) == 0 + if ( count( array_intersect( $instance->getEffectiveGroups(), $excludedGroups ) ) == 0 && $this->isInactiveAccount( $row->user_id, true ) && wfTimestamp( TS_UNIX, $row->user_touched ) < wfTimestamp( TS_UNIX, time() - $touchedSeconds ) ) { @@ -65,9 +65,9 @@ class RemoveUnusedAccounts extends Maintenance { } $count = count( $del ); $this->output( "...found {$count}.\n" ); - + # If required, go back and delete each marked account - if( $count > 0 && $this->hasOption('delete') ) { + if ( $count > 0 && $this->hasOption( 'delete' ) ) { $this->output( "\nDeleting inactive accounts..." ); $dbw = wfGetDB( DB_MASTER ); $dbw->delete( 'user', array( 'user_id' => $del ), __METHOD__ ); @@ -75,12 +75,12 @@ class RemoveUnusedAccounts extends Maintenance { # Update the site_stats.ss_users field $users = $dbw->selectField( 'user', 'COUNT(*)', array(), __METHOD__ ); $dbw->update( 'site_stats', array( 'ss_users' => $users ), array( 'ss_row_id' => 1 ), __METHOD__ ); - } elseif( $count > 0 ) { + } elseif ( $count > 0 ) { $this->output( "\nRun the script again with --delete to remove them from the database.\n" ); } $this->output( "\n" ); } - + /** * Could the specified user account be deemed inactive? * (No edits, no deleted edits, no log entries, no current/old uploads) @@ -94,17 +94,17 @@ class RemoveUnusedAccounts extends Maintenance { $checks = array( 'revision' => 'rev', 'archive' => 'ar', 'logging' => 'log', 'image' => 'img', 'oldimage' => 'oi' ); $count = 0; - + $dbo->begin(); - foreach( $checks as $table => $fprefix ) { + foreach ( $checks as $table => $fprefix ) { $conds = array( $fprefix . '_user' => $id ); $count += (int)$dbo->selectField( $table, 'COUNT(*)', $conds, __METHOD__ ); } $dbo->commit(); - + return $count == 0; } } $maintClass = "RemoveUnusedAccounts"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/renameDbPrefix.php b/maintenance/renameDbPrefix.php index f73db508..289e747f 100644 --- a/maintenance/renameDbPrefix.php +++ b/maintenance/renameDbPrefix.php @@ -20,8 +20,8 @@ * * @ingroup Maintenance */ - -require_once( dirname(__FILE__) . '/Maintenance.php' ); + +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class RenameDbPrefix extends Maintenance { public function __construct() { @@ -35,43 +35,45 @@ class RenameDbPrefix extends Maintenance { } public function execute() { + global $wgDBname; + // Allow for no old prefix - if( $this->getOption( 'old', 0 ) === '0' ) { + if ( $this->getOption( 'old', 0 ) === '0' ) { $old = ''; } else { // Use nice safe, sane, prefixes - preg_match( '/^[a-zA-Z]+_$/', $this->getOption('old'), $m ); + preg_match( '/^[a-zA-Z]+_$/', $this->getOption( 'old' ), $m ); $old = isset( $m[0] ) ? $m[0] : false; } // Allow for no new prefix - if( $this->getOption( 'new', 0 ) === '0' ) { + if ( $this->getOption( 'new', 0 ) === '0' ) { $new = ''; } else { // Use nice safe, sane, prefixes - preg_match( '/^[a-zA-Z]+_$/', $this->getOption('new'), $m ); + preg_match( '/^[a-zA-Z]+_$/', $this->getOption( 'new' ), $m ); $new = isset( $m[0] ) ? $m[0] : false; } - - if( $old === false || $new === false ) { + + if ( $old === false || $new === false ) { $this->error( "Invalid prefix!", true ); } - if( $old === $new ) { + if ( $old === $new ) { $this->output( "Same prefix. Nothing to rename!\n", true ); } - + $this->output( "Renaming DB prefix for tables of $wgDBname from '$old' to '$new'\n" ); $count = 0; - + $dbw = wfGetDB( DB_MASTER ); - $res = $dbw->query( "SHOW TABLES LIKE '".$dbw->escapeLike( $old )."%'" ); - foreach( $res as $row ) { + $res = $dbw->query( "SHOW TABLES " . $dbw->buildLike( $old, $dbw->anyString() ) ); + foreach ( $res as $row ) { // XXX: odd syntax. MySQL outputs an oddly cased "Tables of X" // sort of message. Best not to try $row->x stuff... $fields = get_object_vars( $row ); // Silly for loop over one field... - foreach( $fields as $resName => $table ) { + foreach ( $fields as $table ) { // $old should be regexp safe ([a-zA-Z_]) - $newTable = preg_replace( '/^'.$old.'/', $new, $table ); + $newTable = preg_replace( '/^' . $old . '/', $new, $table ); $this->output( "Renaming table $table to $newTable\n" ); $dbw->query( "RENAME TABLE $table TO $newTable" ); } @@ -82,4 +84,4 @@ class RenameDbPrefix extends Maintenance { } $maintClass = "RenameDbPrefix"; -require_once( DO_MAINTENANCE ); \ No newline at end of file +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/renamewiki.php b/maintenance/renamewiki.php index 36437bea..4146525e 100644 --- a/maintenance/renamewiki.php +++ b/maintenance/renamewiki.php @@ -23,7 +23,7 @@ * @ingroup Wikimedia */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class RenameWiki extends Maintenance { public function __construct() { @@ -32,7 +32,7 @@ class RenameWiki extends Maintenance { $this->addArg( 'olddb', 'Old DB name' ); $this->addArg( 'newdb', 'New DB name' ); } - + public function getDbType() { return Maintenance::DB_ADMIN; } @@ -45,7 +45,7 @@ class RenameWiki extends Maintenance { $to = $this->getArg( 1 ); $this->output( "Renaming blob tables in ES from $from to $to...\n" ); $this->output( "Sleeping 5 seconds...\n" ); - sleep(5); + sleep( 5 ); # Initialise external storage if ( is_array( $wgDefaultExternalStore ) ) { @@ -57,20 +57,20 @@ class RenameWiki extends Maintenance { } if ( count( $stores ) ) { - $this->output( "Initialising external storage $store...\n" ); + $this->output( "Initialising external storage...\n" ); global $wgDBuser, $wgDBpassword, $wgExternalServers; foreach ( $stores as $storeURL ) { $m = array(); if ( !preg_match( '!^DB://(.*)$!', $storeURL, $m ) ) { continue; } - + $cluster = $m[1]; - + # Hack $wgExternalServers[$cluster][0]['user'] = $wgDBuser; $wgExternalServers[$cluster][0]['password'] = $wgDBpassword; - + $store = new ExternalStoreDB; $extdb =& $store->getMaster( $cluster ); $extdb->query( "SET table_type=InnoDB" ); @@ -86,4 +86,4 @@ class RenameWiki extends Maintenance { } $maintClass = "RenameWiki"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/renderDump.php b/maintenance/renderDump.php index d36953f8..78c5b6f3 100644 --- a/maintenance/renderDump.php +++ b/maintenance/renderDump.php @@ -27,8 +27,8 @@ * @file * @ingroup Maintenance */ - -require_once( dirname(__FILE__) . '/Maintenance.php' ); + +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class DumpRenderer extends Maintenance { @@ -39,28 +39,45 @@ class DumpRenderer extends Maintenance { parent::__construct(); $this->mDescription = "Take page text out of an XML dump file and render basic HTML out to files"; $this->addOption( 'output-dir', 'The directory to output the HTML files to', true, true ); + $this->addOption( 'prefix', 'Prefix for the rendered files (defaults to wiki)', false, true ); + $this->addOption( 'parser', 'Use an alternative parser class', false, true ); } public function execute() { $this->outputDirectory = $this->getOption( 'output-dir' ); + $this->prefix = $this->getOption( 'prefix', 'wiki' ); $this->startTime = wfTime(); + if ( $this->hasOption( 'parser' ) ) { + global $wgParserConf; + $wgParserConf['class'] = $this->getOption( 'parser' ); + $this->prefix .= "-{$wgParserConf['class']}"; + } + $source = new ImportStreamSource( $this->getStdin() ); $importer = new WikiImporter( $source ); $importer->setRevisionCallback( array( &$this, 'handleRevision' ) ); - return $importer->doImport(); + $importer->doImport(); + + $delta = wfTime() - $this->startTime; + $this->error( "Rendered {$this->count} pages in " . round($delta, 2) . " seconds " ); + if ($delta > 0) + $this->error( round($this->count / $delta, 2) . " pages/sec" ); + $this->error( "\n" ); } - + /** * Callback function for each revision, turn into HTML and save * @param $rev Revision */ - private function handleRevision( $rev ) { + public function handleRevision( $rev ) { + global $wgParserConf; + $title = $rev->getTitle(); - if (!$title) { + if ( !$title ) { $this->error( "Got bogus revision with null title!" ); return; } @@ -69,15 +86,15 @@ class DumpRenderer extends Maintenance { $this->count++; $sanitized = rawurlencode( $display ); - $filename = sprintf( "%s/wiki-%07d-%s.html", + $filename = sprintf( "%s/%s-%07d-%s.html", $this->outputDirectory, + $this->prefix, $this->count, $sanitized ); - $this->output( sprintf( $this->stderr, "%s\n", $filename, $display ) ); + $this->output( sprintf( "%s\n", $filename, $display ) ); - // fixme (what?) $user = new User(); - $parser = new Parser(); + $parser = new $wgParserConf['class'](); $options = ParserOptions::newFromUser( $user ); $output = $parser->parse( $rev->getText(), $title, $options ); @@ -89,7 +106,7 @@ class DumpRenderer extends Maintenance { "<head>\n" . "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n" . "<title>" . htmlspecialchars( $display ) . "\n" . - "\n" . + "\n" . "\n" . $output->getText() . "\n" . @@ -98,4 +115,4 @@ class DumpRenderer extends Maintenance { } $maintClass = "DumpRenderer"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/rollbackEdits.php b/maintenance/rollbackEdits.php index 5d6a80a4..e1c126e1 100644 --- a/maintenance/rollbackEdits.php +++ b/maintenance/rollbackEdits.php @@ -21,7 +21,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class RollbackEdits extends Maintenance { public function __construct() { @@ -36,7 +36,7 @@ class RollbackEdits extends Maintenance { public function execute() { $user = $this->getOption( 'user' ); $username = User::isIP( $user ) ? $user : User::getCanonicalName( $user ); - if( !$username ) { + if ( !$username ) { $this->error( 'Invalid username', true ); } @@ -44,10 +44,10 @@ class RollbackEdits extends Maintenance { $summary = $this->getOption( 'summary', $this->mSelf . ' mass rollback' ); $titles = array(); $results = array(); - if( $this->hasOption( 'titles' ) ) { - foreach( explode( '|', $this->getOption( 'titles' ) ) as $title ) { + if ( $this->hasOption( 'titles' ) ) { + foreach ( explode( '|', $this->getOption( 'titles' ) ) as $title ) { $t = Title::newFromText( $title ); - if( !$t ) { + if ( !$t ) { $this->error( 'Invalid title, ' . $title ); } else { $titles[] = $t; @@ -57,15 +57,15 @@ class RollbackEdits extends Maintenance { $titles = $this->getRollbackTitles( $user ); } - if( !$titles ) { + if ( !$titles ) { $this->output( 'No suitable titles to be rolled back' ); return; } - foreach( $titles as $t ) { + foreach ( $titles as $t ) { $a = new Article( $t ); $this->output( 'Processing ' . $t->getPrefixedText() . '...' ); - if( !$a->commitRollback( $user, $summary, $bot, $results ) ) { + if ( !$a->commitRollback( $user, $summary, $bot, $results ) ) { $this->output( "done\n" ); } else { $this->output( "failed\n" ); @@ -86,7 +86,7 @@ class RollbackEdits extends Maintenance { array( 'page_latest = rev_id', 'rev_user_text' => $user ), __METHOD__ ); - while( $row = $dbr->fetchObject( $results ) ) { + foreach ( $results as $row ) { $titles[] = Title::makeTitle( $row->page_namespace, $row->page_title ); } return $titles; @@ -94,4 +94,4 @@ class RollbackEdits extends Maintenance { } $maintClass = 'RollbackEdits'; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/runBatchedQuery.php b/maintenance/runBatchedQuery.php index 03c56aa9..dd3680c9 100644 --- a/maintenance/runBatchedQuery.php +++ b/maintenance/runBatchedQuery.php @@ -22,7 +22,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class BatchedQueryRunner extends Maintenance { public function __construct() { @@ -35,7 +35,7 @@ class BatchedQueryRunner extends Maintenance { public function execute() { if ( !$this->hasArg() ) $this->error( "No query specified. Specify the query as a command line parameter.", true ); - + $query = $this->getArg(); $wait = $this->getOption( 'wait', 5 ); $n = 1; @@ -43,7 +43,7 @@ class BatchedQueryRunner extends Maintenance { do { $this->output( "Batch $n: " ); $n++; - $dbw->query( $query ); + $dbw->query( $query, __METHOD__ ); $affected = $dbw->affectedRows(); $this->output( "$affected rows\n" ); wfWaitForSlaves( $wait ); @@ -57,4 +57,4 @@ class BatchedQueryRunner extends Maintenance { $maintClass = "BatchedQueryRunner"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/runJobs.php b/maintenance/runJobs.php index e03bf5d1..79ea7bfe 100644 --- a/maintenance/runJobs.php +++ b/maintenance/runJobs.php @@ -24,7 +24,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class RunJobs extends Maintenance { public function __construct() { @@ -34,7 +34,7 @@ class RunJobs extends Maintenance { $this->addOption( 'type', 'Type of job to run', false, true ); $this->addOption( 'procs', 'Number of processes to use', false, true ); } - + public function memoryLimit() { // Don't eat all memory on the machine if we get a bad job. return "150M"; @@ -43,7 +43,7 @@ class RunJobs extends Maintenance { public function execute() { global $wgTitle; if ( $this->hasOption( 'procs' ) ) { - $procs = intval( $this->getOption('procs') ); + $procs = intval( $this->getOption( 'procs' ) ); if ( $procs < 1 || $procs > 1000 ) { $this->error( "Invalid argument to --procs", true ); } @@ -58,22 +58,20 @@ class RunJobs extends Maintenance { $dbw = wfGetDB( DB_MASTER ); $n = 0; $conds = ''; - if ($type !== false) - $conds = "job_cmd = " . $dbw->addQuotes($type); + if ( $type !== false ) + $conds = "job_cmd = " . $dbw->addQuotes( $type ); while ( $dbw->selectField( 'job', 'job_id', $conds, 'runJobs.php' ) ) { - $offset=0; - for (;;) { - $job = ($type == false) ? - Job::pop($offset) - : Job::pop_type($type); - - if ($job == false) + $offset = 0; + for ( ; ; ) { + $job = !$type ? Job::pop( $offset ) : Job::pop_type( $type ); + + if ( !$job ) break; - + wfWaitForSlaves( 5 ); $t = microtime( true ); - $offset=$job->id; + $offset = $job->id; $status = $job->run(); $t = microtime( true ) - $t; $timeMs = intval( $t * 1000 ); @@ -100,4 +98,4 @@ class RunJobs extends Maintenance { } $maintClass = "RunJobs"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/showJobs.php b/maintenance/showJobs.php index b385c50a..886d7d45 100644 --- a/maintenance/showJobs.php +++ b/maintenance/showJobs.php @@ -23,8 +23,8 @@ * @author Tim Starling * @author Ashar Voultoiz */ - -require_once( dirname(__FILE__) . '/Maintenance.php' ); + +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class ShowJobs extends Maintenance { public function __construct() { @@ -42,7 +42,7 @@ class ShowJobs extends Maintenance { __METHOD__, array( 'GROUP BY' => 'job_cmd' ) ); - foreach( $res as $row ) { + foreach ( $res as $row ) { $this->output( $row->job_cmd . ': ' . $row->count . "\n" ); } } else { @@ -52,4 +52,4 @@ class ShowJobs extends Maintenance { } $maintClass = "ShowJobs"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/showStats.php b/maintenance/showStats.php index dfce3613..f695c440 100644 --- a/maintenance/showStats.php +++ b/maintenance/showStats.php @@ -20,7 +20,7 @@ * http://www.gnu.org/copyleft/gpl.html * * @ingroup Maintenance - * @author Ashar Voultoiz + * @author Ashar Voultoiz * Based on initStats.php by: * @author Brion Vibber * @author Rob Church @@ -28,10 +28,11 @@ * @license GNU General Public License 2.0 or later */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class ShowStats extends Maintenance { public function __construct() { + parent::__construct(); $this->mDescription = "Show the cached statistics"; } public function execute() { @@ -44,25 +45,25 @@ class ShowStats extends Maintenance { 'ss_admins' => 'Number of admins', 'ss_images' => 'Number of images', ); - + // Get cached stats from slave database $dbr = wfGetDB( DB_SLAVE ); $stats = $dbr->selectRow( 'site_stats', '*', '', __METHOD__ ); - + // Get maximum size for each column $max_length_value = $max_length_desc = 0; - foreach( $fields as $field => $desc ) { + foreach ( $fields as $field => $desc ) { $max_length_value = max( $max_length_value, strlen( $stats->$field ) ); - $max_length_desc = max( $max_length_desc , strlen( $desc )) ; + $max_length_desc = max( $max_length_desc , strlen( $desc ) ) ; } - + // Show them - foreach( $fields as $field => $desc ) { + foreach ( $fields as $field => $desc ) { $this->output( sprintf( "%-{$max_length_desc}s: %{$max_length_value}d\n", $desc, $stats->$field ) ); } } } $maintClass = "ShowStats"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/sql.php b/maintenance/sql.php index fd4be19a..e1f2bb5f 100644 --- a/maintenance/sql.php +++ b/maintenance/sql.php @@ -21,7 +21,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class MwSql extends Maintenance { public function __construct() { @@ -39,7 +39,7 @@ class MwSql extends Maintenance { $promptObject = new SqlPromptPrinter( "> " ); $promptCallback = $promptObject->cb(); } - + if ( !$file ) $this->error( "Unable to open input file", true ); @@ -69,7 +69,7 @@ class MwSql extends Maintenance { $this->output( "Query OK, $affected row(s) affected\n" ); } } - + public function getDbType() { return Maintenance::DB_ADMIN; } @@ -90,4 +90,4 @@ class SqlPromptPrinter { } $maintClass = "MwSql"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/sqlite.inc b/maintenance/sqlite.inc new file mode 100644 index 00000000..238fe82b --- /dev/null +++ b/maintenance/sqlite.inc @@ -0,0 +1,67 @@ +sourceFile( $file ); + if ( $err != true ) { + return $err; + } + } + + $tables = $db->query( "SELECT name FROM sqlite_master WHERE type='table'", __METHOD__ ); + foreach ( $tables as $table ) { + if ( strpos( $table->name, 'sqlite_' ) === 0 ) continue; + + $columns = $db->query( "PRAGMA table_info({$table->name})", __METHOD__ ); + foreach ( $columns as $col ) { + if ( !isset( $allowedTypes[strtolower( $col->type )] ) ) { + $db->close(); + return "Table {$table->name} has column {$col->name} with non-native type '{$col->type}'"; + } + } + } + } catch ( DBError $e ) { + return $e->getMessage(); + } + $db->close(); + return true; + } + }; \ No newline at end of file diff --git a/maintenance/sqlite.php b/maintenance/sqlite.php index 8886fe74..13d136d8 100644 --- a/maintenance/sqlite.php +++ b/maintenance/sqlite.php @@ -20,7 +20,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class SqliteMaintenance extends Maintenance { public function __construct() { @@ -29,6 +29,7 @@ class SqliteMaintenance extends Maintenance { $this->addOption( 'vacuum', 'Clean up database by removing deleted pages. Decreases database file size' ); $this->addOption( 'integrity', 'Check database for integrity' ); $this->addOption( 'backup-to', 'Backup database to the given file', false, true ); + $this->addOption( 'check-syntax', 'Check SQL file(s) for syntax errors', false, true ); } /** @@ -41,7 +42,12 @@ class SqliteMaintenance extends Maintenance { public function execute() { global $wgDBtype; - + + // Should work even if we use a non-SQLite database + if ( $this->hasOption( 'check-syntax' ) ) { + $this->checkSyntax(); + } + if ( $wgDBtype != 'sqlite' ) { $this->error( "This maintenance script requires a SQLite database.\n" ); return; @@ -66,14 +72,14 @@ class SqliteMaintenance extends Maintenance { $prevSize = filesize( $this->db->mDatabaseFile ); if ( $prevSize == 0 ) { $this->error( "Can't vacuum an empty database.\n", true ); - } + } $this->output( 'VACUUM: ' ); if ( $this->db->query( 'VACUUM' ) ) { clearstatcache(); $newSize = filesize( $this->db->mDatabaseFile ); $this->output( sprintf( "Database size was %d, now %d (%.1f%% reduction).\n", - $prevSize, $newSize, ( $prevSize - $newSize) * 100.0 / $prevSize ) ); + $prevSize, $newSize, ( $prevSize - $newSize ) * 100.0 / $prevSize ) ); } else { $this->output( 'Error\n' ); } @@ -107,7 +113,21 @@ class SqliteMaintenance extends Maintenance { $this->output( " Releasing lock...\n" ); $this->db->query( 'COMMIT TRANSACTION', __METHOD__ ); } + + private function checkSyntax() { + if ( !Sqlite::IsPresent() ) { + $this->error( "Error: SQLite support not found\n" ); + } + $files = array( $this->getOption( 'check-syntax' ) ); + $files += $this->mArgs; + $result = Sqlite::checkSqlSyntax( $files ); + if ( $result === true ) { + $this->output( "SQL syntax check: no errors detected.\n" ); + } else { + $this->error( "Error: $result\n" ); + } + } } $maintClass = "SqliteMaintenance"; -require_once( DO_MAINTENANCE ); \ No newline at end of file +require_once( RUN_MAINTENANCE_IF_MAIN ); \ No newline at end of file diff --git a/maintenance/sqlite/README b/maintenance/sqlite/README deleted file mode 100644 index b8a45553..00000000 --- a/maintenance/sqlite/README +++ /dev/null @@ -1,12 +0,0 @@ -SQLite shares the MySQL schema file at maintenance/tables.sql, with a set of -compatibility regexes to convert MySQL syntax to SQLite syntax: - -* BINARY() and VARBINARY() fields are converted to BLOB -* the UNSIGNED modifier is removed -* "INT" fields are converted to "INTEGER" -* ENUM is converted to BLOB -* the BINARY collation modifier is removed -* AUTO_INCREMENT is converted to AUTOINCREMENT -* Any table options are removed -* Truncated indexes are upgraded to full-width indexes -* FULLTEXT indexes are converted to ordinary indexes diff --git a/maintenance/sqlite/archives/initial-indexes.sql b/maintenance/sqlite/archives/initial-indexes.sql index f0851163..2573ca13 100644 --- a/maintenance/sqlite/archives/initial-indexes.sql +++ b/maintenance/sqlite/archives/initial-indexes.sql @@ -413,4 +413,4 @@ CREATE INDEX /*i*/qcc_type ON /*_*/querycachetwo (qcc_type,qcc_value); CREATE INDEX /*i*/qcc_title ON /*_*/querycachetwo (qcc_type,qcc_namespace,qcc_title); CREATE INDEX /*i*/qcc_titletwo ON /*_*/querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo); -INSERT INTO /*_*/updatelog VALUES ('initial_indexes'); +INSERT INTO /*_*/updatelog (ul_key) VALUES ('initial_indexes'); diff --git a/maintenance/sqlite/archives/patch-categorylinks-better-collation.sql b/maintenance/sqlite/archives/patch-categorylinks-better-collation.sql new file mode 100644 index 00000000..f32af134 --- /dev/null +++ b/maintenance/sqlite/archives/patch-categorylinks-better-collation.sql @@ -0,0 +1,7 @@ +ALTER TABLE /*_*/categorylinks ADD COLUMN cl_sortkey_prefix TEXT NOT NULL default ''; +ALTER TABLE /*_*/categorylinks ADD COLUMN cl_collation BLOB NOT NULL default ''; +ALTER TABLE /*_*/categorylinks ADD COLUMN cl_type TEXT NOT NULL default 'page'; +CREATE INDEX cl_collation ON /*_*/categorylinks (cl_collation); +DROP INDEX cl_sortkey; +CREATE INDEX cl_sortkey ON /*_*/categorylinks (cl_to, cl_type, cl_sortkey, cl_from); +INSERT OR IGNORE INTO /*_*/updatelog (ul_key) VALUES ('cl_fields_update'); diff --git a/maintenance/sqlite/archives/patch-iw_api_and_wikiid.sql b/maintenance/sqlite/archives/patch-iw_api_and_wikiid.sql new file mode 100644 index 00000000..f9172b5e --- /dev/null +++ b/maintenance/sqlite/archives/patch-iw_api_and_wikiid.sql @@ -0,0 +1,19 @@ +-- +-- Add iw_api and iw_wikiid to interwiki table +-- + + +CREATE TABLE /*_*/interwiki_tmp ( + iw_prefix TEXT NOT NULL, + iw_url BLOB NOT NULL, + iw_api BLOB NOT NULL, + iw_wikiid TEXT NOT NULL, + iw_local INTEGER NOT NULL, + iw_trans INTEGER NOT NULL default 0 +) /*$wgDBTableOptions*/; + +INSERT INTO /*_*/interwiki_tmp SELECT iw_prefix, iw_url, '', '', iw_local, iw_trans FROM /*_*/interwiki; +DROP TABLE /*_*/interwiki; +ALTER TABLE /*_*/interwiki_tmp RENAME TO /*_*/interwiki; + +CREATE UNIQUE INDEX /*i*/iw_prefix ON /*_*/interwiki (iw_prefix); \ No newline at end of file diff --git a/maintenance/sqlite/archives/patch-kill-iwl_pft.sql b/maintenance/sqlite/archives/patch-kill-iwl_pft.sql new file mode 100644 index 00000000..8fc4b5cd --- /dev/null +++ b/maintenance/sqlite/archives/patch-kill-iwl_pft.sql @@ -0,0 +1,7 @@ +-- +-- Kill the old iwl_prefix_from_title index, which may be present on some +-- installs if they ran update.php between it being added and being renamed +-- + +DROP INDEX IF EXISTS /*i*/iwl_prefix; + diff --git a/maintenance/sqlite/archives/patch-kill-iwl_prefix.sql b/maintenance/sqlite/archives/patch-kill-iwl_prefix.sql new file mode 100644 index 00000000..78ed385e --- /dev/null +++ b/maintenance/sqlite/archives/patch-kill-iwl_prefix.sql @@ -0,0 +1,7 @@ +-- +-- Kill the old iwl_prefix index, which may be present on some +-- installs if they ran update.php between it being added and being renamed +-- + +DROP INDEX IF EXISTS /*i*/iwl_prefix; + diff --git a/maintenance/sqlite/archives/patch-log_search-rename-index.sql b/maintenance/sqlite/archives/patch-log_search-rename-index.sql new file mode 100644 index 00000000..4b98a0f2 --- /dev/null +++ b/maintenance/sqlite/archives/patch-log_search-rename-index.sql @@ -0,0 +1 @@ +CREATE UNIQUE INDEX ls_field_val ON /*_*/log_search (ls_field,ls_value,ls_log_id); diff --git a/maintenance/sqlite/archives/patch-rename-iwl_prefix.sql b/maintenance/sqlite/archives/patch-rename-iwl_prefix.sql new file mode 100644 index 00000000..08c3ae5f --- /dev/null +++ b/maintenance/sqlite/archives/patch-rename-iwl_prefix.sql @@ -0,0 +1,5 @@ +-- +-- Recreates the iwl_prefix for the iwlinks table +-- +DROP INDEX IF EXISTS /*i*/iwl_prefix; +CREATE INDEX /*i*/iwl_prefix_from_title ON /*_*/iwlinks (iwl_prefix, iwl_from, iwl_title); \ No newline at end of file diff --git a/maintenance/sqlite/archives/patch-tc-timestamp.sql b/maintenance/sqlite/archives/patch-tc-timestamp.sql index 551a5f1c..5c09bf35 100644 --- a/maintenance/sqlite/archives/patch-tc-timestamp.sql +++ b/maintenance/sqlite/archives/patch-tc-timestamp.sql @@ -1,3 +1,3 @@ UPDATE /*_*/transcache SET tc_time = strftime('%Y%m%d%H%M%S', datetime(tc_time, 'unixepoch')); -INSERT INTO /*_*/updatelog VALUES ('convert transcache field'); +INSERT INTO /*_*/updatelog (ul_key) VALUES ('convert transcache field'); diff --git a/maintenance/sqlite/archives/searchindex-fts3.sql b/maintenance/sqlite/archives/searchindex-fts3.sql index c3a86894..28554c02 100644 --- a/maintenance/sqlite/archives/searchindex-fts3.sql +++ b/maintenance/sqlite/archives/searchindex-fts3.sql @@ -15,4 +15,4 @@ CREATE VIRTUAL TABLE /*_*/searchindex USING FTS3( si_text ); -INSERT INTO /*_*/updatelog VALUES ('fts3'); \ No newline at end of file +INSERT INTO /*_*/updatelog (ul_key) VALUES ('fts3'); \ No newline at end of file diff --git a/maintenance/stats.php b/maintenance/stats.php index e20c345a..2cbbcf91 100644 --- a/maintenance/stats.php +++ b/maintenance/stats.php @@ -20,70 +20,71 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class CacheStats extends Maintenance { public function __construct() { $this->mDescription = "Show statistics from the cache"; + parent::__construct(); + } + + public function getDbType() { + return Maintenance::DB_NONE; } public function execute() { global $wgMemc; - - // Can't do stats if - if( get_class( $wgMemc ) == 'FakeMemCachedClient' ) { + + // Can't do stats if + if ( get_class( $wgMemc ) == 'FakeMemCachedClient' ) { $this->error( "You are running FakeMemCachedClient, I can not provide any statistics.", true ); } - $session = intval($wgMemc->get(wfMemcKey('stats','request_with_session'))); - $noSession = intval($wgMemc->get(wfMemcKey('stats','request_without_session'))); + $session = intval( $wgMemc->get( wfMemcKey( 'stats', 'request_with_session' ) ) ); + $noSession = intval( $wgMemc->get( wfMemcKey( 'stats', 'request_without_session' ) ) ); $total = $session + $noSession; if ( $total == 0 ) { $this->error( "You either have no stats or the cache isn't running. Aborting.", true ); } $this->output( "Requests\n" ); - $this->output( sprintf( "with session: %-10d %6.2f%%\n", $session, $session/$total*100 ) ); - $this->output( sprintf( "without session: %-10d %6.2f%%\n", $noSession, $noSession/$total*100 ) ); + $this->output( sprintf( "with session: %-10d %6.2f%%\n", $session, $session / $total * 100 ) ); + $this->output( sprintf( "without session: %-10d %6.2f%%\n", $noSession, $noSession / $total * 100 ) ); $this->output( sprintf( "total: %-10d %6.2f%%\n", $total, 100 ) ); - - + + $this->output( "\nParser cache\n" ); - $hits = intval($wgMemc->get(wfMemcKey('stats','pcache_hit'))); - $invalid = intval($wgMemc->get(wfMemcKey('stats','pcache_miss_invalid'))); - $expired = intval($wgMemc->get(wfMemcKey('stats','pcache_miss_expired'))); - $absent = intval($wgMemc->get(wfMemcKey('stats','pcache_miss_absent'))); - $stub = intval($wgMemc->get(wfMemcKey('stats','pcache_miss_stub'))); + $hits = intval( $wgMemc->get( wfMemcKey( 'stats', 'pcache_hit' ) ) ); + $invalid = intval( $wgMemc->get( wfMemcKey( 'stats', 'pcache_miss_invalid' ) ) ); + $expired = intval( $wgMemc->get( wfMemcKey( 'stats', 'pcache_miss_expired' ) ) ); + $absent = intval( $wgMemc->get( wfMemcKey( 'stats', 'pcache_miss_absent' ) ) ); + $stub = intval( $wgMemc->get( wfMemcKey( 'stats', 'pcache_miss_stub' ) ) ); $total = $hits + $invalid + $expired + $absent + $stub; - $this->output( sprintf( "hits: %-10d %6.2f%%\n", $hits, $hits/$total*100 ) ); - $this->output( sprintf( "invalid: %-10d %6.2f%%\n", $invalid, $invalid/$total*100 ) ); - $this->output( sprintf( "expired: %-10d %6.2f%%\n", $expired, $expired/$total*100 ) ); - $this->output( sprintf( "absent: %-10d %6.2f%%\n", $absent, $absent/$total*100 ) ); - $this->output( sprintf( "stub threshold: %-10d %6.2f%%\n", $stub, $stub/$total*100 ) ); + $this->output( sprintf( "hits: %-10d %6.2f%%\n", $hits, $hits / $total * 100 ) ); + $this->output( sprintf( "invalid: %-10d %6.2f%%\n", $invalid, $invalid / $total * 100 ) ); + $this->output( sprintf( "expired: %-10d %6.2f%%\n", $expired, $expired / $total * 100 ) ); + $this->output( sprintf( "absent: %-10d %6.2f%%\n", $absent, $absent / $total * 100 ) ); + $this->output( sprintf( "stub threshold: %-10d %6.2f%%\n", $stub, $stub / $total * 100 ) ); $this->output( sprintf( "total: %-10d %6.2f%%\n", $total, 100 ) ); - - $hits = intval($wgMemc->get(wfMemcKey('stats','image_cache_hit'))); - $misses = intval($wgMemc->get(wfMemcKey('stats','image_cache_miss'))); - $updates = intval($wgMemc->get(wfMemcKey('stats','image_cache_update'))); + + $hits = intval( $wgMemc->get( wfMemcKey( 'stats', 'image_cache_hit' ) ) ); + $misses = intval( $wgMemc->get( wfMemcKey( 'stats', 'image_cache_miss' ) ) ); + $updates = intval( $wgMemc->get( wfMemcKey( 'stats', 'image_cache_update' ) ) ); $total = $hits + $misses; - $this->output("\nImage cache\n"); - $this->output( sprintf( "hits: %-10d %6.2f%%\n", $hits, $hits/$total*100 ) ); - $this->output( sprintf( "misses: %-10d %6.2f%%\n", $misses, $misses/$total*100 ) ); + $this->output( "\nImage cache\n" ); + $this->output( sprintf( "hits: %-10d %6.2f%%\n", $hits, $hits / $total * 100 ) ); + $this->output( sprintf( "misses: %-10d %6.2f%%\n", $misses, $misses / $total * 100 ) ); $this->output( sprintf( "updates: %-10d\n", $updates ) ); - - $hits = intval($wgMemc->get(wfMemcKey('stats','diff_cache_hit'))); - $misses = intval($wgMemc->get(wfMemcKey('stats','diff_cache_miss'))); - $uncacheable = intval($wgMemc->get(wfMemcKey('stats','diff_uncacheable'))); + + $hits = intval( $wgMemc->get( wfMemcKey( 'stats', 'diff_cache_hit' ) ) ); + $misses = intval( $wgMemc->get( wfMemcKey( 'stats', 'diff_cache_miss' ) ) ); + $uncacheable = intval( $wgMemc->get( wfMemcKey( 'stats', 'diff_uncacheable' ) ) ); $total = $hits + $misses + $uncacheable; - $this->output("\nDiff cache\n"); - $this->output( sprintf( "hits: %-10d %6.2f%%\n", $hits, $hits/$total*100 ) ); - $this->output( sprintf( "misses: %-10d %6.2f%%\n", $misses, $misses/$total*100 ) ); - $this->output( sprintf( "uncacheable: %-10d %6.2f%%\n", $uncacheable, $uncacheable/$total*100 ) ); + $this->output( "\nDiff cache\n" ); + $this->output( sprintf( "hits: %-10d %6.2f%%\n", $hits, $hits / $total * 100 ) ); + $this->output( sprintf( "misses: %-10d %6.2f%%\n", $misses, $misses / $total * 100 ) ); + $this->output( sprintf( "uncacheable: %-10d %6.2f%%\n", $uncacheable, $uncacheable / $total * 100 ) ); } } $maintClass = "CacheStats"; -require_once( DO_MAINTENANCE ); - - - - +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/storage/checkStorage.php b/maintenance/storage/checkStorage.php index 245c2fec..c288d682 100644 --- a/maintenance/storage/checkStorage.php +++ b/maintenance/storage/checkStorage.php @@ -9,7 +9,7 @@ define( 'CONCAT_HEADER', 'O:27:"concatenatedgziphistoryblob"' ); if ( !defined( 'MEDIAWIKI' ) ) { - require_once( dirname(__FILE__) . '/../commandLine.inc' ); + require_once( dirname( __FILE__ ) . '/../commandLine.inc' ); $cs = new CheckStorage; $fix = isset( $options['fix'] ); @@ -22,7 +22,7 @@ if ( !defined( 'MEDIAWIKI' ) ) { } -//---------------------------------------------------------------------------------- +// ---------------------------------------------------------------------------------- /** * @ingroup Maintenance ExternalStorage @@ -37,7 +37,7 @@ class CheckStorage { 'unfixable' => 'Unexpected errors with no automated fixing method', 'fixed' => 'Errors already fixed', 'fixable' => 'Errors which would already be fixed if --fix was specified', - ); + ); function check( $fix = false, $xml = '' ) { $fname = 'checkStorage'; @@ -63,14 +63,14 @@ class CheckStorage { for ( $chunkStart = 1 ; $chunkStart < $maxRevId; $chunkStart += $chunkSize ) { $chunkEnd = $chunkStart + $chunkSize - 1; - //print "$chunkStart of $maxRevId\n"; + // print "$chunkStart of $maxRevId\n"; // Fetch revision rows $this->oldIdMap = array(); - $dbr->ping(); - $res = $dbr->select( 'revision', array( 'rev_id', 'rev_text_id' ), + $dbr->ping(); + $res = $dbr->select( 'revision', array( 'rev_id', 'rev_text_id' ), array( "rev_id BETWEEN $chunkStart AND $chunkEnd" ), $fname ); - while ( $row = $dbr->fetchObject( $res ) ) { + foreach ( $res as $row ) { $this->oldIdMap[$row->rev_id] = $row->rev_text_id; } $dbr->freeResult( $res ); @@ -83,9 +83,9 @@ class CheckStorage { $missingTextRows = array_flip( $this->oldIdMap ); $externalRevs = array(); $objectRevs = array(); - $res = $dbr->select( 'text', array( 'old_id', 'old_flags' ), + $res = $dbr->select( 'text', array( 'old_id', 'old_flags' ), 'old_id IN (' . implode( ',', $this->oldIdMap ) . ')', $fname ); - while ( $row = $dbr->fetchObject( $res ) ) { + foreach ( $res as $row ) { $flags = $row->old_flags; $id = $row->old_id; @@ -116,7 +116,7 @@ class CheckStorage { if ( $fix ) { $this->error( 'fixed', "Warning: old_flags set to 0", $id ); $dbw->ping(); - $dbw->update( 'text', array( 'old_flags' => '' ), + $dbw->update( 'text', array( 'old_flags' => '' ), array( 'old_id' => $id ), $fname ); echo "Fixed\n"; } else { @@ -137,15 +137,15 @@ class CheckStorage { $externalConcatBlobs = array(); $externalNormalBlobs = array(); if ( count( $externalRevs ) ) { - $res = $dbr->select( 'text', array( 'old_id', 'old_flags', 'old_text' ), + $res = $dbr->select( 'text', array( 'old_id', 'old_flags', 'old_text' ), array( 'old_id IN (' . implode( ',', $externalRevs ) . ')' ), $fname ); - while ( $row = $dbr->fetchObject( $res ) ) { + foreach ( $res as $row ) { $urlParts = explode( '://', $row->old_text, 2 ); if ( count( $urlParts ) !== 2 || $urlParts[1] == '' ) { $this->error( 'restore text', "Error: invalid URL \"{$row->old_text}\"", $row->old_id ); continue; } - list( $proto, $path ) = $urlParts; + list( $proto, ) = $urlParts; if ( $proto != 'DB' ) { $this->error( 'restore text', "Error: invalid external protocol \"$proto\"", $row->old_id ); continue; @@ -164,7 +164,7 @@ class CheckStorage { // Check external concat blobs for the right header $this->checkExternalConcatBlobs( $externalConcatBlobs ); - + // Check external normal blobs for existence if ( count( $externalNormalBlobs ) ) { if ( is_null( $this->dbStore ) ) { @@ -174,10 +174,10 @@ class CheckStorage { $blobIds = array_keys( $xBlobIds ); $extDb =& $this->dbStore->getSlave( $cluster ); $blobsTable = $this->dbStore->getTable( $extDb ); - $res = $extDb->select( $blobsTable, - array( 'blob_id' ), + $res = $extDb->select( $blobsTable, + array( 'blob_id' ), array( 'blob_id IN( ' . implode( ',', $blobIds ) . ')' ), $fname ); - while ( $row = $extDb->fetchObject( $res ) ) { + foreach ( $res as $row ) { unset( $xBlobIds[$row->blob_id] ); } $extDb->freeResult( $res ); @@ -194,9 +194,9 @@ class CheckStorage { $curIds = array(); if ( count( $objectRevs ) ) { $headerLength = 300; - $res = $dbr->select( 'text', array( 'old_id', 'old_flags', "LEFT(old_text, $headerLength) AS header" ), + $res = $dbr->select( 'text', array( 'old_id', 'old_flags', "LEFT(old_text, $headerLength) AS header" ), array( 'old_id IN (' . implode( ',', $objectRevs ) . ')' ), $fname ); - while ( $row = $dbr->fetchObject( $res ) ) { + foreach ( $res as $row ) { $oldId = $row->old_id; $matches = array(); if ( !preg_match( '/^O:(\d+):"(\w+)"/', $row->header, $matches ) ) { @@ -245,9 +245,9 @@ class CheckStorage { $externalConcatBlobs = array(); if ( count( $concatBlobs ) ) { $headerLength = 300; - $res = $dbr->select( 'text', array( 'old_id', 'old_flags', "LEFT(old_text, $headerLength) AS header" ), + $res = $dbr->select( 'text', array( 'old_id', 'old_flags', "LEFT(old_text, $headerLength) AS header" ), array( 'old_id IN (' . implode( ',', array_keys( $concatBlobs ) ) . ')' ), $fname ); - while ( $row = $dbr->fetchObject( $res ) ) { + foreach ( $res as $row ) { $flags = explode( ',', $row->old_flags ); if ( in_array( 'external', $flags ) ) { // Concat blob is in external storage? @@ -261,7 +261,7 @@ class CheckStorage { if ( !isset( $externalConcatBlobs[$cluster][$id] ) ) { $externalConcatBlobs[$cluster][$id] = array(); } - $externalConcatBlobs[$cluster][$id] = array_merge( + $externalConcatBlobs[$cluster][$id] = array_merge( $externalConcatBlobs[$cluster][$id], $concatBlobs[$row->old_id] ); } @@ -270,7 +270,7 @@ class CheckStorage { $concatBlobs[$row->old_id] ); } } elseif ( strcasecmp( substr( $row->header, 0, strlen( CONCAT_HEADER ) ), CONCAT_HEADER ) ) { - $this->error( 'restore text', "Error: Incorrect object header for concat bulk row {$row->old_id}", + $this->error( 'restore text', "Error: Incorrect object header for concat bulk row {$row->old_id}", $concatBlobs[$row->old_id] ); } # else good @@ -286,7 +286,7 @@ class CheckStorage { } print "\n\nErrors:\n"; - foreach( $this->errors as $name => $errors ) { + foreach ( $this->errors as $name => $errors ) { if ( count( $errors ) ) { $description = $this->errorDescriptions[$name]; echo "$description: " . implode( ',', array_keys( $errors ) ) . "\n"; @@ -323,7 +323,7 @@ class CheckStorage { foreach ( $ids as $id ) { $revIds = array_merge( $revIds, array_keys( $this->oldIdMap, $id ) ); } - print "$msg in text rows " . implode( ', ', $ids ) . + print "$msg in text rows " . implode( ', ', $ids ) . ", revisions " . implode( ', ', $revIds ) . "\n"; } else { $id = $ids; @@ -346,18 +346,18 @@ class CheckStorage { if ( is_null( $this->dbStore ) ) { $this->dbStore = new ExternalStoreDB; } - + foreach ( $externalConcatBlobs as $cluster => $oldIds ) { $blobIds = array_keys( $oldIds ); $extDb =& $this->dbStore->getSlave( $cluster ); $blobsTable = $this->dbStore->getTable( $extDb ); $headerLength = strlen( CONCAT_HEADER ); - $res = $extDb->select( $blobsTable, - array( 'blob_id', "LEFT(blob_text, $headerLength) AS header" ), + $res = $extDb->select( $blobsTable, + array( 'blob_id', "LEFT(blob_text, $headerLength) AS header" ), array( 'blob_id IN( ' . implode( ',', $blobIds ) . ')' ), $fname ); - while ( $row = $extDb->fetchObject( $res ) ) { + foreach ( $res as $row ) { if ( strcasecmp( $row->header, CONCAT_HEADER ) ) { - $this->error( 'restore text', "Error: invalid header on target $cluster/{$row->blob_id} of two-part ES URL", + $this->error( 'restore text', "Error: invalid header on target $cluster/{$row->blob_id} of two-part ES URL", $oldIds[$row->blob_id] ); } unset( $oldIds[$row->blob_id] ); @@ -383,7 +383,7 @@ class CheckStorage { $revFileName = "$wgTmpDirectory/broken-revlist-$wgDBname"; $filteredXmlFileName = "$wgTmpDirectory/filtered-$wgDBname.xml"; - + // Write revision list if ( !file_put_contents( $revFileName, implode( "\n", $revIds ) ) ) { echo "Error writing revision list, can't restore text\n"; @@ -393,8 +393,8 @@ class CheckStorage { // Run mwdumper echo "Filtering XML dump...\n"; $exitStatus = 0; - passthru( 'mwdumper ' . - wfEscapeShellArg( + passthru( 'mwdumper ' . + wfEscapeShellArg( "--output=file:$filteredXmlFileName", "--filter=revlist:$revFileName", $xml @@ -416,7 +416,7 @@ class CheckStorage { $dbw = wfGetDB( DB_MASTER ); $dbr->ping(); $dbw->ping(); - + $source = new ImportStreamSource( $file ); $importer = new WikiImporter( $source ); $importer->setRevisionCallback( array( &$this, 'importRevision' ) ); @@ -429,8 +429,8 @@ class CheckStorage { $id = $revision->getID(); $text = $revision->getText(); if ( $text === '' ) { - // This is what happens if the revision was broken at the time the - // dump was made. Unfortunately, it also happens if the revision was + // This is what happens if the revision was broken at the time the + // dump was made. Unfortunately, it also happens if the revision was // legitimately blank, so there's no way to tell the difference. To // be safe, we'll skip it and leave it broken $id = $id ? $id : ''; @@ -457,7 +457,7 @@ class CheckStorage { // Update the text row $dbw = wfGetDB( DB_MASTER ); - $dbw->update( 'text', + $dbw->update( 'text', array( 'old_flags' => $flags, 'old_text' => $text ), array( 'old_id' => $oldId ), $fname, array( 'LIMIT' => 1 ) diff --git a/maintenance/storage/compressOld.inc b/maintenance/storage/compressOld.inc index 981cfda5..93be5f75 100644 --- a/maintenance/storage/compressOld.inc +++ b/maintenance/storage/compressOld.inc @@ -18,12 +18,11 @@ function compressOldPages( $start = 0, $extdb = '' ) { break; } $last = $start; - while( $row = $dbw->fetchObject( $res ) ) { + foreach ( $res as $row ) { # print " {$row->old_id} - {$row->old_namespace}:{$row->old_title}\n"; compressPage( $row, $extdb ); $last = $row->old_id; } - $dbw->freeResult( $res ); $start = $last + 1; # Deletion may leave long empty stretches print "$start...\n"; } while( true ); @@ -67,7 +66,7 @@ define( 'LS_INDIVIDUAL', 0 ); define( 'LS_CHUNKED', 1 ); /** @todo document */ -function compressWithConcat( $startId, $maxChunkSize, $beginDate, +function compressWithConcat( $startId, $maxChunkSize, $beginDate, $endDate, $extdb="", $maxPageId = false ) { $fname = 'compressWithConcat'; @@ -94,12 +93,12 @@ function compressWithConcat( $startId, $maxChunkSize, $beginDate, $pageConds[] = 'page_namespace<>0'; } if ( $queryExtra ) { - $pageConds[] = $queryExtra; + $pageConds[] = $queryExtra; } */ # For each article, get a list of revisions which fit the criteria - + # No recompression, use a condition on old_flags # Don't compress object type entities, because that might produce data loss when # overwriting bulk storage concat rows. Don't compress external references, because @@ -142,10 +141,10 @@ function compressWithConcat( $startId, $maxChunkSize, $beginDate, wfWaitForSlaves( 5 ); # Wake up - $dbr->ping(); + $dbr->ping(); # Get the page row - $pageRes = $dbr->select( 'page', + $pageRes = $dbr->select( 'page', array('page_id', 'page_namespace', 'page_title','page_latest'), $pageConds + array('page_id' => $pageId), $fname ); if ( $dbr->numRows( $pageRes ) == 0 ) { @@ -159,10 +158,10 @@ function compressWithConcat( $startId, $maxChunkSize, $beginDate, # Load revisions $revRes = $dbw->select( $tables, $fields, - array_merge( array( - 'rev_page' => $pageRow->page_id, + array_merge( array( + 'rev_page' => $pageRow->page_id, # Don't operate on the current revision - # Use < instead of <> in case the current revision has changed + # Use < instead of <> in case the current revision has changed # since the page select, which wasn't locking 'rev_id < ' . $pageRow->page_latest ), $conds ), @@ -170,7 +169,7 @@ function compressWithConcat( $startId, $maxChunkSize, $beginDate, $revLoadOptions ); $revs = array(); - while ( $revRow = $dbw->fetchObject( $revRes ) ) { + foreach ( $revRes as $revRow ) { $revs[] = $revRow; } diff --git a/maintenance/storage/compressOld.php b/maintenance/storage/compressOld.php index 7ff102a5..bc05b340 100644 --- a/maintenance/storage/compressOld.php +++ b/maintenance/storage/compressOld.php @@ -25,10 +25,10 @@ */ $optionsWithArgs = array( 't', 'c', 's', 'f', 'h', 'extdb', 'endid', 'e' ); -require_once( dirname(__FILE__) . '/../commandLine.inc' ); +require_once( dirname( __FILE__ ) . '/../commandLine.inc' ); require_once( "compressOld.inc" ); -if( !function_exists( "gzdeflate" ) ) { +if ( !function_exists( "gzdeflate" ) ) { print "You must enable zlib support in PHP to compress old revisions!\n"; print "Please see http://www.php.net/manual/en/ref.zlib.php\n\n"; wfDie(); @@ -39,9 +39,9 @@ $defaults = array( 'c' => 20, 's' => 0, 'b' => '', - 'e' => '', - 'extdb' => '', - 'endid' => false, + 'e' => '', + 'extdb' => '', + 'endid' => false, ); $options = $options + $defaults; @@ -51,15 +51,15 @@ if ( $options['t'] != 'concat' && $options['t'] != 'gzip' ) { } if ( $options['extdb'] != '' ) { - print "Compressing database $wgDBname to external cluster {$options['extdb']}\n" . str_repeat('-', 76) . "\n\n"; + print "Compressing database $wgDBname to external cluster {$options['extdb']}\n" . str_repeat( '-', 76 ) . "\n\n"; } else { - print "Compressing database $wgDBname\n" . str_repeat('-', 76) . "\n\n"; + print "Compressing database $wgDBname\n" . str_repeat( '-', 76 ) . "\n\n"; } $success = true; if ( $options['t'] == 'concat' ) { - $success = compressWithConcat( $options['s'], $options['c'], $options['b'], - $options['e'], $options['extdb'], $options['endid'] ); + $success = compressWithConcat( $options['s'], $options['c'], $options['b'], + $options['e'], $options['extdb'], $options['endid'] ); } else { compressOldPages( $options['s'], $options['extdb'] ); } @@ -68,6 +68,6 @@ if ( $success ) { print "Done.\n"; } -exit(0); +exit( 0 ); diff --git a/maintenance/storage/dumpRev.php b/maintenance/storage/dumpRev.php index 95404244..b200d8af 100644 --- a/maintenance/storage/dumpRev.php +++ b/maintenance/storage/dumpRev.php @@ -18,7 +18,7 @@ * @ingroup Maintenance ExternalStorage */ -require_once( dirname(__FILE__) . '/../Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/../Maintenance.php' ); class DumpRev extends Maintenance { public function __construct() { @@ -28,15 +28,15 @@ class DumpRev extends Maintenance { public function execute() { $dbr = wfGetDB( DB_SLAVE ); - $row = $dbr->selectRow( - array( 'text', 'revision' ), - array( 'old_flags', 'old_text' ), + $row = $dbr->selectRow( + array( 'text', 'revision' ), + array( 'old_flags', 'old_text' ), array( 'old_id=rev_text_id', 'rev_id' => $this->getArg() ) ); if ( !$row ) { $this->error( "Row not found", true ); } - + $flags = explode( ',', $row->old_flags ); $text = $row->old_text; if ( in_array( 'external', $flags ) ) { @@ -65,15 +65,15 @@ class DumpRev extends Maintenance { $obj = unserialize( $text ); $text = $obj->getText(); } - + if ( is_object( $text ) ) { $this->error( "Unexpectedly got object of type: " . get_class( $text ) ); } else { - $this->output( "Text length: " . strlen( $text ) ."\n" ); + $this->output( "Text length: " . strlen( $text ) . "\n" ); $this->output( substr( $text, 0, 100 ) . "\n" ); } } } $maintClass = "DumpRev"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/storage/fixBug20757.php b/maintenance/storage/fixBug20757.php index 922d4725..4aac1202 100644 --- a/maintenance/storage/fixBug20757.php +++ b/maintenance/storage/fixBug20757.php @@ -14,7 +14,7 @@ class FixBug20757 extends Maintenance { $this->addOption( 'dry-run', 'Report only' ); $this->addOption( 'start', 'old_id to start at', false, true ); } - + function execute() { $dbr = wfGetDB( DB_SLAVE ); $dbw = wfGetDB( DB_MASTER ); @@ -31,19 +31,29 @@ class FixBug20757 extends Maintenance { $totalRevs = $dbr->selectField( 'text', 'MAX(old_id)', false, __METHOD__ ); + if ( $dbr->getType() == 'mysql' + && version_compare( $dbr->getServerVersion(), '4.1.0', '>=' ) ) + { + // In MySQL 4.1+, the binary field old_text has a non-working LOWER() function + $lowerLeft = 'LOWER(CONVERT(LEFT(old_text,22) USING latin1))'; + } else { + // No CONVERT() in MySQL 4.0 + $lowerLeft = 'LOWER(LEFT(old_text,22))'; + } + while ( true ) { print "ID: $startId / $totalRevs\r"; $res = $dbr->select( 'text', array( 'old_id', 'old_flags', 'old_text' ), - array( + array( 'old_id > ' . intval( $startId ), 'old_flags LIKE \'%object%\' AND old_flags NOT LIKE \'%external%\'', - 'LOWER(CONVERT(LEFT(old_text,22) USING latin1)) = \'o:15:"historyblobstub"\'', + "$lowerLeft = 'o:15:\"historyblobstub\"'", ), __METHOD__, - array( + array( 'ORDER BY' => 'old_id', 'LIMIT' => $this->batchSize, ) @@ -68,7 +78,7 @@ class FixBug20757 extends Maintenance { } if ( !is_object( $obj ) ) { - print "{$row->old_id}: unrecoverable: unserialized to type " . + print "{$row->old_id}: unrecoverable: unserialized to type " . gettype( $obj ) . ", possible double-serialization\n"; ++$numBad; continue; @@ -120,22 +130,21 @@ class FixBug20757 extends Maintenance { } // Process the stubs - $stubsToFix = array(); foreach ( $stubs as $primaryId => $stub ) { $secondaryId = $stub['secondaryId']; if ( !isset( $trackedBlobs[$secondaryId] ) ) { // No tracked blob. Work out what went wrong - $secondaryRow = $dbr->selectRow( - 'text', + $secondaryRow = $dbr->selectRow( + 'text', array( 'old_flags', 'old_text' ), - array( 'old_id' => $secondaryId ), + array( 'old_id' => $secondaryId ), __METHOD__ ); if ( !$secondaryRow ) { print "$primaryId: unrecoverable: secondary row is missing\n"; ++$numBad; } elseif ( $this->isUnbrokenStub( $stub, $secondaryRow ) ) { - // Not broken yet, and not in the tracked clusters so it won't get + // Not broken yet, and not in the tracked clusters so it won't get // broken by the current RCT run. ++$numGood; } elseif ( strpos( $secondaryRow->old_flags, 'external' ) !== false ) { @@ -196,7 +205,7 @@ class FixBug20757 extends Maintenance { __METHOD__ ); - // Add a blob_tracking row so that the new reference can be recompressed + // Add a blob_tracking row so that the new reference can be recompressed // without needing to run trackBlobs.php again $dbw->insert( 'blob_tracking', array( @@ -255,7 +264,7 @@ class FixBug20757 extends Maintenance { $dbr = wfGetDB( DB_SLAVE ); $map = array(); - $res = $dbr->select( 'revision', + $res = $dbr->select( 'revision', array( 'rev_id', 'rev_text_id' ), array( 'rev_page' => $pageId ), __METHOD__ @@ -276,7 +285,7 @@ class FixBug20757 extends Maintenance { function isUnbrokenStub( $stub, $secondaryRow ) { $flags = explode( ',', $secondaryRow->old_flags ); $text = $secondaryRow->old_text; - if( in_array( 'external', $flags ) ) { + if ( in_array( 'external', $flags ) ) { $url = $text; @list( /* $proto */ , $path ) = explode( '://', $url, 2 ); if ( $path == "" ) { @@ -284,17 +293,17 @@ class FixBug20757 extends Maintenance { } $text = ExternalStore::fetchFromUrl( $url ); } - if( !in_array( 'object', $flags ) ) { + if ( !in_array( 'object', $flags ) ) { return false; } - if( in_array( 'gzip', $flags ) ) { + if ( in_array( 'gzip', $flags ) ) { $obj = unserialize( gzinflate( $text ) ); } else { $obj = unserialize( $text ); } - if( !is_object( $obj ) ) { + if ( !is_object( $obj ) ) { // Correct for old double-serialization bug. $obj = unserialize( $obj ); } @@ -310,5 +319,5 @@ class FixBug20757 extends Maintenance { } $maintClass = 'FixBug20757'; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/storage/moveToExternal.php b/maintenance/storage/moveToExternal.php index dc11856a..928cbf97 100644 --- a/maintenance/storage/moveToExternal.php +++ b/maintenance/storage/moveToExternal.php @@ -9,10 +9,8 @@ define( 'REPORTING_INTERVAL', 1 ); if ( !defined( 'MEDIAWIKI' ) ) { - $optionsWithArgs = array( 'e', 's' ); - - require_once( dirname(__FILE__) . '/../commandLine.inc' ); - require_once( 'ExternalStoreDB.php' ); + require_once( dirname( __FILE__ ) . '/../commandLine.inc' ); + require_once( dirname( __FILE__ ) . '/../../includes/ExternalStoreDB.php' ); require_once( 'resolveStubs.php' ); $fname = 'moveToExternal'; @@ -35,8 +33,6 @@ if ( !defined( 'MEDIAWIKI' ) ) { moveToExternal( $cluster, $maxID, $minID ); } - - function moveToExternal( $cluster, $maxID, $minID = 1 ) { $fname = 'moveToExternal'; $dbw = wfGetDB( DB_MASTER ); @@ -48,23 +44,22 @@ function moveToExternal( $cluster, $maxID, $minID = 1 ) { print "Moving text rows from $minID to $maxID to external storage\n"; $ext = new ExternalStoreDB; $numMoved = 0; - $numStubs = 0; - + for ( $block = 0; $block < $numBlocks; $block++ ) { $blockStart = $block * $blockSize + $minID; $blockEnd = $blockStart + $blockSize - 1; - - if ( !($block % REPORTING_INTERVAL) ) { + + if ( !( $block % REPORTING_INTERVAL ) ) { print "oldid=$blockStart, moved=$numMoved\n"; wfWaitForSlaves( 2 ); } - + $res = $dbr->select( 'text', array( 'old_id', 'old_flags', 'old_text' ), array( "old_id BETWEEN $blockStart AND $blockEnd", 'old_flags NOT ' . $dbr->buildLike( $dbr->anyString(), 'external', $dbr->anyString() ), ), $fname ); - while ( $row = $dbr->fetchObject( $res ) ) { + foreach ( $res as $row ) { # Resolve stubs $text = $row->old_text; $id = $row->old_id; @@ -73,13 +68,13 @@ function moveToExternal( $cluster, $maxID, $minID = 1 ) { } else { $flags = "{$row->old_flags},external"; } - + if ( strpos( $flags, 'object' ) !== false ) { $obj = unserialize( $text ); $className = strtolower( get_class( $obj ) ); if ( $className == 'historyblobstub' ) { - #resolveStub( $id, $row->old_text, $row->old_flags ); - #$numStubs++; + # resolveStub( $id, $row->old_text, $row->old_flags ); + # $numStubs++; continue; } elseif ( $className == 'historyblobcurstub' ) { $text = gzdeflate( $obj->getText() ); @@ -99,8 +94,8 @@ function moveToExternal( $cluster, $maxID, $minID = 1 ) { continue; } - #print "Storing " . strlen( $text ) . " bytes to $url\n"; - #print "old_id=$id\n"; + # print "Storing " . strlen( $text ) . " bytes to $url\n"; + # print "old_id=$id\n"; $url = $ext->store( $cluster, $text ); if ( !$url ) { @@ -112,7 +107,6 @@ function moveToExternal( $cluster, $maxID, $minID = 1 ) { array( 'old_id' => $id ), $fname ); $numMoved++; } - $dbr->freeResult( $res ); } } diff --git a/maintenance/storage/orphanStats.php b/maintenance/storage/orphanStats.php index 63f9025b..f30f07e4 100644 --- a/maintenance/storage/orphanStats.php +++ b/maintenance/storage/orphanStats.php @@ -20,7 +20,7 @@ * * @ingroup Maintenance ExternalStorage */ -require_once( dirname(__FILE__) . '/../Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/../Maintenance.php' ); class OrphanStats extends Maintenance { public function __construct() { @@ -34,13 +34,12 @@ class OrphanStats extends Maintenance { } public function execute() { - $extDBs = array(); $dbr = wfGetDB( DB_SLAVE ); - if( !$dbr->tableExists( 'blob_orphans' ) ) { + if ( !$dbr->tableExists( 'blob_orphans' ) ) { $this->error( "blob_orphans doesn't seem to exist, need to run trackBlobs.php first", true ); } $res = $dbr->select( 'blob_orphans', '*', false, __METHOD__ ); - + $num = 0; $totalSize = 0; $hashes = array(); @@ -49,7 +48,7 @@ class OrphanStats extends Maintenance { foreach ( $res as $boRow ) { $extDB = $this->getDB( $boRow->bo_cluster ); $blobRow = $extDB->selectRow( 'blobs', '*', array( 'blob_id' => $boRow->bo_blob_id ), __METHOD__ ); - + $num++; $size = strlen( $blobRow->blob_text ); $totalSize += $size; @@ -61,11 +60,11 @@ class OrphanStats extends Maintenance { $this->output( "Number of orphans: $num\n" ); if ( $num > 0 ) { $this->output( "Average size: " . round( $totalSize / $num, 0 ) . " bytes\n" . - "Max size: $maxSize\n" . + "Max size: $maxSize\n" . "Number of unique texts: " . count( $hashes ) . "\n" ); } } } $maintClass = "OrphanStats"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/storage/recompressTracked.php b/maintenance/storage/recompressTracked.php index e43dbe5c..8974a74d 100644 --- a/maintenance/storage/recompressTracked.php +++ b/maintenance/storage/recompressTracked.php @@ -1,14 +1,14 @@ [... ...] Moves blobs indexed by trackBlobs.php to a specified list of destination clusters, and recompresses them in the process. Restartable. -Options: - --procs Set the number of child processes (default 1) +Options: + --procs Set the number of child processes (default 1) --copy-only Copy only, do not update the text table. Restart without this option to complete. --debug-log Log debugging data to the specified file --info-log Log progress messages to the specified file @@ -99,7 +99,7 @@ class RecompressTracked { } function logToFile( $msg, $file ) { - $header = '[' . date('d\TH:i:s') . '] ' . wfHostname() . ' ' . posix_getpid(); + $header = '[' . date( 'd\TH:i:s' ) . '] ' . wfHostname() . ' ' . posix_getpid(); if ( $this->slaveId !== false ) { $header .= "({$this->slaveId})"; } @@ -109,8 +109,8 @@ class RecompressTracked { /** * Wait until the selected slave has caught up to the master. - * This allows us to use the slave for things that were committed in a - * previous part of this batch process. + * This allows us to use the slave for things that were committed in a + * previous part of this batch process. */ function syncDBs() { $dbw = wfGetDB( DB_MASTER ); @@ -179,14 +179,14 @@ class RecompressTracked { $cmd .= " --$cmdOption"; } } - $cmd .= ' --child' . + $cmd .= ' --child' . ' --wiki ' . wfEscapeShellArg( wfWikiID() ) . ' ' . call_user_func_array( 'wfEscapeShellArg', $this->destClusters ); $this->slavePipes = $this->slaveProcs = array(); for ( $i = 0; $i < $this->numProcs; $i++ ) { $pipes = false; - $spec = array( + $spec = array( array( 'pipe', 'r' ), array( 'file', 'php://stdout', 'w' ), array( 'file', 'php://stderr', 'w' ) @@ -228,7 +228,7 @@ class RecompressTracked { function dispatch( /*...*/ ) { $args = func_get_args(); $pipes = $this->slavePipes; - $numPipes = stream_select( $x=array(), $pipes, $y=array(), 3600 ); + $numPipes = stream_select( $x = array(), $pipes, $y = array(), 3600 ); if ( !$numPipes ) { $this->critical( "Error waiting to write to slaves. Aborting" ); exit( 1 ); @@ -264,8 +264,8 @@ class RecompressTracked { if ( $this->noCount ) { $numPages = '[unknown]'; } else { - $numPages = $dbr->selectField( 'blob_tracking', - 'COUNT(DISTINCT bt_page)', + $numPages = $dbr->selectField( 'blob_tracking', + 'COUNT(DISTINCT bt_page)', # A condition is required so that this query uses the index array( 'bt_moved' => 0 ), __METHOD__ @@ -277,15 +277,15 @@ class RecompressTracked { $this->info( "Moving pages..." ); } while ( true ) { - $res = $dbr->select( 'blob_tracking', + $res = $dbr->select( 'blob_tracking', array( 'bt_page' ), - array( + array( 'bt_moved' => 0, 'bt_page > ' . $dbr->addQuotes( $startId ) ), __METHOD__, - array( - 'DISTINCT', + array( + 'DISTINCT', 'ORDER BY' => 'bt_page', 'LIMIT' => $this->batchSize, ) @@ -330,8 +330,8 @@ class RecompressTracked { if ( $this->noCount ) { $numOrphans = '[unknown]'; } else { - $numOrphans = $dbr->selectField( 'blob_tracking', - 'COUNT(DISTINCT bt_text_id)', + $numOrphans = $dbr->selectField( 'blob_tracking', + 'COUNT(DISTINCT bt_text_id)', array( 'bt_moved' => 0, 'bt_page' => 0 ), __METHOD__ ); if ( !$numOrphans ) { @@ -440,8 +440,8 @@ class RecompressTracked { $trx = new CgzCopyTransaction( $this, $this->pageBlobClass ); while ( true ) { - $res = $dbr->select( - array( 'blob_tracking', 'text' ), + $res = $dbr->select( + array( 'blob_tracking', 'text' ), '*', array( 'bt_page' => $pageId, @@ -451,7 +451,7 @@ class RecompressTracked { 'bt_text_id=old_id', ), __METHOD__, - array( + array( 'ORDER BY' => 'bt_text_id', 'LIMIT' => $this->batchSize ) @@ -496,7 +496,7 @@ class RecompressTracked { * * This is done in a single transaction to provide restartable behaviour * without data loss. - * + * * The transaction is kept short to reduce locking. */ function moveTextRow( $textId, $url ) { @@ -536,16 +536,16 @@ class RecompressTracked { $dbr = wfGetDB( DB_SLAVE ); $startId = 0; - $conds = array_merge( $conds, array( + $conds = array_merge( $conds, array( 'bt_moved' => 0, 'bt_new_url IS NOT NULL' - )); + ) ); while ( true ) { $res = $dbr->select( 'blob_tracking', '*', array_merge( $conds, array( 'bt_text_id > ' . $dbr->addQuotes( $startId ) ) ), __METHOD__, - array( + array( 'ORDER BY' => 'bt_text_id', 'LIMIT' => $this->batchSize, ) @@ -592,17 +592,17 @@ class RecompressTracked { $this->finishIncompleteMoves( array( 'bt_text_id' => $textIds ) ); $this->syncDBs(); } - + $trx = new CgzCopyTransaction( $this, $this->orphanBlobClass ); $res = wfGetDB( DB_SLAVE )->select( - array( 'text', 'blob_tracking' ), - array( 'old_id', 'old_text', 'old_flags' ), - array( + array( 'text', 'blob_tracking' ), + array( 'old_id', 'old_text', 'old_flags' ), + array( 'old_id' => $textIds, 'bt_text_id=old_id', 'bt_moved' => 0, - ), + ), __METHOD__, array( 'DISTINCT' ) ); @@ -610,10 +610,10 @@ class RecompressTracked { foreach ( $res as $row ) { $text = Revision::getRevisionText( $row ); if ( $text === false ) { - $this->critical( "Error: cannot load revision text for old_id=$textId" ); + $this->critical( "Error: cannot load revision text for old_id={$row->old_id}" ); continue; } - + if ( !$trx->addItem( $text, $row->old_id ) ) { $this->debug( "[orphan]: committing blob with " . $trx->getSize() . " rows" ); $trx->commit(); @@ -625,7 +625,7 @@ class RecompressTracked { $trx->commit(); } - /** + /** * Wait for slaves (quietly) */ function waitForSlaves() { @@ -704,14 +704,14 @@ class CgzCopyTransaction { // Check to see if the target text_ids have been moved already. // - // We originally read from the slave, so this can happen when a single - // text_id is shared between multiple pages. It's rare, but possible + // We originally read from the slave, so this can happen when a single + // text_id is shared between multiple pages. It's rare, but possible // if a delete/move/undelete cycle splits up a null edit. // // We do a locking read to prevent closer-run race conditions. $dbw = wfGetDB( DB_MASTER ); $dbw->begin(); - $res = $dbw->select( 'blob_tracking', + $res = $dbw->select( 'blob_tracking', array( 'bt_text_id', 'bt_moved' ), array( 'bt_text_id' => array_keys( $this->referrers ) ), __METHOD__, array( 'FOR UPDATE' ) ); diff --git a/maintenance/storage/resolveStubs.php b/maintenance/storage/resolveStubs.php index 346151e9..2269e37f 100644 --- a/maintenance/storage/resolveStubs.php +++ b/maintenance/storage/resolveStubs.php @@ -9,7 +9,7 @@ define( 'REPORTING_INTERVAL', 100 ); if ( !defined( 'MEDIAWIKI' ) ) { $optionsWithArgs = array( 'm' ); - require_once( dirname(__FILE__) . '/../commandLine.inc' ); + require_once( dirname( __FILE__ ) . '/../commandLine.inc' ); resolveStubs(); } @@ -28,22 +28,19 @@ function resolveStubs() { for ( $b = 0; $b < $numBlocks; $b++ ) { wfWaitForSlaves( 2 ); - + printf( "%5.2f%%\n", $b / $numBlocks * 100 ); - $start = intval($maxID / $numBlocks) * $b + 1; - $end = intval($maxID / $numBlocks) * ($b + 1); - + $start = intval( $maxID / $numBlocks ) * $b + 1; + $end = intval( $maxID / $numBlocks ) * ( $b + 1 ); + $res = $dbr->select( 'text', array( 'old_id', 'old_text', 'old_flags' ), "old_id>=$start AND old_id<=$end " . - "AND old_flags LIKE '%object%' AND old_flags NOT LIKE '%external%' ". - 'AND LOWER(CONVERT(LEFT(old_text,22) USING latin1)) = \'o:15:"historyblobstub"\'', + "AND old_flags LIKE '%object%' AND old_flags NOT LIKE '%external%' " . + 'AND LOWER(CONVERT(LEFT(old_text,22) USING latin1)) = \'o:15:"historyblobstub"\'', $fname ); - while ( $row = $dbr->fetchObject( $res ) ) { + foreach ( $res as $row ) { resolveStub( $row->old_id, $row->old_text, $row->old_flags ); } - $dbr->freeResult( $res ); - - } print "100%\n"; } @@ -84,7 +81,7 @@ function resolveStub( $id, $stubText, $flags ) { } # Update the row - #print "oldid=$id\n"; + # print "oldid=$id\n"; $dbw->update( 'text', array( /* SET */ 'old_flags' => $newFlags, diff --git a/maintenance/storage/storageTypeStats.php b/maintenance/storage/storageTypeStats.php index 85858620..be86c531 100644 --- a/maintenance/storage/storageTypeStats.php +++ b/maintenance/storage/storageTypeStats.php @@ -1,6 +1,6 @@ $flagStats ) { foreach ( $flagStats as $class => $entry ) { - printf( $format, $flags, $class, $entry['count'], + printf( $format, $flags, $class, $entry['count'], sprintf( "%-13d - %-13d", $entry['first'], $entry['last'] ) ); } } @@ -94,5 +93,5 @@ SQL; } $maintClass = 'StorageTypeStats'; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/storage/testCompression.php b/maintenance/storage/testCompression.php index 9c96c9f8..e2718325 100644 --- a/maintenance/storage/testCompression.php +++ b/maintenance/storage/testCompression.php @@ -1,7 +1,7 @@ ] [--start=] [--limit=] \n"; @@ -26,10 +26,10 @@ $type = isset( $options['type'] ) ? $options['type'] : 'ConcatenatedGzipHistoryB $dbr = wfGetDB( DB_SLAVE ); -$res = $dbr->select( +$res = $dbr->select( array( 'page', 'revision', 'text' ), '*', - array( + array( 'page_namespace' => $title->getNamespace(), 'page_title' => $title->getDBkey(), 'page_id=rev_page', @@ -56,9 +56,9 @@ foreach ( $res as $row ) { $serialized = serialize( $blob ); $t += microtime( true ); -#print_r( $blob->mDiffMap ); +# print_r( $blob->mDiffMap ); -printf( "%s\nCompression ratio for %d revisions: %5.2f, %s -> %d\n", +printf( "%s\nCompression ratio for %d revisions: %5.2f, %s -> %d\n", $type, count( $hashes ), $uncompressedSize / strlen( $serialized ), @@ -73,7 +73,7 @@ foreach ( $keys as $id => $key ) { $text = $blob->getItem( $key ); if ( md5( $text ) != $hashes[$id] ) { echo "Content hash mismatch for rev_id $id\n"; - #var_dump( $text ); + # var_dump( $text ); } } $t += microtime( true ); diff --git a/maintenance/storage/trackBlobs.php b/maintenance/storage/trackBlobs.php index 63327d53..15aeec3b 100644 --- a/maintenance/storage/trackBlobs.php +++ b/maintenance/storage/trackBlobs.php @@ -1,6 +1,6 @@ checkIntegrity(); $this->initTrackingTable(); $this->trackRevisions(); $this->trackOrphanText(); @@ -43,6 +44,47 @@ class TrackBlobs { } } + function checkIntegrity() { + echo "Doing integrity check...\n"; + $dbr = wfGetDB( DB_SLAVE ); + + // Scan for HistoryBlobStub objects in the text table (bug 20757) + + $exists = $dbr->selectField( 'text', 1, + 'old_flags LIKE \'%object%\' AND old_flags NOT LIKE \'%external%\' ' . + 'AND LOWER(CONVERT(LEFT(old_text,22) USING latin1)) = \'o:15:"historyblobstub"\'', + __METHOD__ + ); + + if ( $exists ) { + echo "Integrity check failed: found HistoryBlobStub objects in your text table.\n" . + "This script could destroy these objects if it continued. Run resolveStubs.php\n" . + "to fix this.\n"; + exit( 1 ); + } + + // Scan the archive table for HistoryBlobStub objects or external flags (bug 22624) + $flags = $dbr->selectField( 'archive', 'ar_flags', + 'ar_flags LIKE \'%external%\' OR (' . + 'ar_flags LIKE \'%object%\' ' . + 'AND LOWER(CONVERT(LEFT(ar_text,22) USING latin1)) = \'o:15:"historyblobstub"\' )', + __METHOD__ + ); + + if ( strpos( $flags, 'external' ) !== false ) { + echo "Integrity check failed: found external storage pointers in your archive table.\n" . + "Run normaliseArchiveTable.php to fix this.\n"; + exit( 1 ); + } elseif ( $flags ) { + echo "Integrity check failed: found HistoryBlobStub objects in your archive table.\n" . + "These objects are probably already broken, continuing would make them\n" . + "unrecoverable. Run \"normaliseArchiveTable.php --fix-cgz-bug\" to fix this.\n"; + exit( 1 ); + } + + echo "Integrity check OK\n"; + } + function initTrackingTable() { $dbw = wfGetDB( DB_MASTER ); if ( $dbw->tableExists( 'blob_tracking' ) ) { @@ -170,9 +212,9 @@ class TrackBlobs { # Scan the text table for orphan text while ( true ) { - $res = $dbr->select( array( 'text', 'blob_tracking' ), + $res = $dbr->select( array( 'text', 'blob_tracking' ), array( 'old_id', 'old_flags', 'old_text' ), - array( + array( 'old_id>' . $dbr->addQuotes( $startId ), $textClause, 'old_flags ' . $dbr->buildLike( $dbr->anyString(), 'external', $dbr->anyString() ), @@ -181,7 +223,7 @@ class TrackBlobs { __METHOD__, array( 'ORDER BY' => 'old_id', - 'LIMIT' => $this->batchSize + 'LIMIT' => $this->batchSize ), array( 'blob_tracking' => array( 'LEFT JOIN', 'bt_text_id=old_id' ) ) ); @@ -275,8 +317,8 @@ class TrackBlobs { // Build a bitmap of actual blob rows while ( true ) { - $res = $extDB->select( $table, - array( 'blob_id' ), + $res = $extDB->select( $table, + array( 'blob_id' ), array( 'blob_id > ' . $extDB->addQuotes( $startId ) ), __METHOD__, array( 'LIMIT' => $this->batchSize, 'ORDER BY' => 'blob_id' ) @@ -301,7 +343,7 @@ class TrackBlobs { // Find actual blobs that weren't tracked by the previous passes // This is a set-theoretic difference A \ B, or in bitwise terms, A & ~B $orphans = gmp_and( $actualBlobs, gmp_com( $this->trackedBlobs[$cluster] ) ); - + // Traverse the orphan list $insertBatch = array(); $id = 0; diff --git a/maintenance/tables.sql b/maintenance/tables.sql index 0809f4b6..1dcf98b7 100644 --- a/maintenance/tables.sql +++ b/maintenance/tables.sql @@ -52,22 +52,21 @@ -- CREATE TABLE /*_*/user ( user_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, - + -- Usernames must be unique, must not be in the form of -- an IP address. _Shouldn't_ allow slashes or case -- conflicts. Spaces are allowed, and are _not_ converted -- to underscores like titles. See the User::newFromName() for -- the specific tests that usernames have to pass. user_name varchar(255) binary NOT NULL default '', - + -- Optional 'real name' to be displayed in credit listings user_real_name varchar(255) binary NOT NULL default '', - - -- Password hashes, normally hashed like so: - -- MD5(CONCAT(user_id,'-',MD5(plaintext_password))), see - -- wfEncryptPassword() in GlobalFunctions.php + + -- Password hashes, see User::crypt() and User::comparePasswords() + -- in User.php for the algorithm user_password tinyblob NOT NULL, - + -- When using 'mail me a new password', a random -- password is generated and the hash stored here. -- The previous password is left in place until @@ -75,49 +74,52 @@ CREATE TABLE /*_*/user ( -- at which point the hash is moved to user_password -- and the old password is invalidated. user_newpassword tinyblob NOT NULL, - + -- Timestamp of the last time when a new password was - -- sent, for throttling purposes + -- sent, for throttling and expiring purposes + -- Emailed passwords will expire $wgNewPasswordExpiry + -- (a week) after being set. If user_newpass_time is NULL + -- (eg. created by mail) it doesn't expire. user_newpass_time binary(14), -- Note: email should be restricted, not public info. -- Same with passwords. user_email tinytext NOT NULL, - + -- Newline-separated list of name=value defining the user -- preferences -- Now obsolete in favour of user_properties table; -- old values will be migrated from here transparently. user_options blob NOT NULL, - + -- This is a timestamp which is updated when a user -- logs in, logs out, changes preferences, or performs -- some other action requiring HTML cache invalidation -- to ensure that the UI is updated. user_touched binary(14) NOT NULL default '', - + -- A pseudorandomly generated value that is stored in -- a cookie when the "remember password" feature is -- used (previously, a hash of the password was used, but -- this was vulnerable to cookie-stealing attacks) user_token binary(32) NOT NULL default '', - + -- Initially NULL; when a user's e-mail address has been -- validated by returning with a mailed token, this is -- set to the current timestamp. user_email_authenticated binary(14), - + -- Randomly generated token created when the e-mail address -- is set and a confirmation test mail sent. user_email_token binary(32), - + -- Expiration date for the user_email_token user_email_token_expires binary(14), - + -- Timestamp of account registration. -- Accounts predating this schema addition may contain NULL. user_registration binary(14), - + -- Count of edits and edit-like actions. -- -- *NOT* intended to be an accurate copy of COUNT(*) WHERE rev_user=user_id @@ -146,7 +148,7 @@ CREATE INDEX /*i*/user_email_token ON /*_*/user (user_email_token); CREATE TABLE /*_*/user_groups ( -- Key to user_id ug_user int unsigned NOT NULL default 0, - + -- Group names are short symbolic string keys. -- The set of group names is open-ended, though in practice -- only some predefined ones are likely to be used. @@ -194,10 +196,10 @@ CREATE INDEX /*i*/un_user_ip ON /*_*/user_newtalk (user_ip); CREATE TABLE /*_*/user_properties ( -- Foreign key to user.user_id up_user int NOT NULL, - + -- Name of the option being saved. This is indexed for bulk lookup. up_property varbinary(32) NOT NULL, - + -- Property value as a string. up_value blob ) /*$wgDBTableOptions*/; @@ -213,33 +215,33 @@ CREATE TABLE /*_*/page ( -- Unique identifier number. The page_id will be preserved across -- edits and rename operations, but not deletions and recreations. page_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, - + -- A page name is broken into a namespace and a title. -- The namespace keys are UI-language-independent constants, -- defined in includes/Defines.php page_namespace int NOT NULL, - + -- The rest of the title, as text. -- Spaces are transformed into underscores in title storage. page_title varchar(255) binary NOT NULL, - + -- Comma-separated set of permission keys indicating who -- can move or edit the page. page_restrictions tinyblob NOT NULL, - + -- Number of times this page has been viewed. page_counter bigint unsigned NOT NULL default 0, - + -- 1 indicates the article is a redirect. page_is_redirect tinyint unsigned NOT NULL default 0, - + -- 1 indicates this is a new entry, with only one edit. -- Not all pages with one edit are new pages. page_is_new tinyint unsigned NOT NULL default 0, - + -- Random value between 0 and 1, used for Special:Randompage page_random real unsigned NOT NULL, - + -- This timestamp is updated whenever the page changes in -- a way requiring it to be re-rendered, invalidating caches. -- Aside from editing this includes permission changes, @@ -251,7 +253,7 @@ CREATE TABLE /*_*/page ( -- This may be 0 during page creation, but that shouldn't -- happen outside of a transaction... hopefully. page_latest int unsigned NOT NULL, - + -- Uncompressed length in bytes of the page's current source text. page_len int unsigned NOT NULL ) /*$wgDBTableOptions*/; @@ -268,38 +270,38 @@ CREATE INDEX /*i*/page_len ON /*_*/page (page_len); -- CREATE TABLE /*_*/revision ( rev_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, - + -- Key to page_id. This should _never_ be invalid. rev_page int unsigned NOT NULL, - + -- Key to text.old_id, where the actual bulk text is stored. -- It's possible for multiple revisions to use the same text, -- for instance revisions where only metadata is altered -- or a rollback to a previous version. rev_text_id int unsigned NOT NULL, - + -- Text comment summarizing the change. -- This text is shown in the history and other changes lists, -- rendered in a subset of wiki markup by Linker::formatComment() rev_comment tinyblob NOT NULL, - + -- Key to user.user_id of the user who made this edit. -- Stores 0 for anonymous edits and for some mass imports. rev_user int unsigned NOT NULL default 0, - + -- Text username or IP address of the editor. rev_user_text varchar(255) binary NOT NULL default '', - + -- Timestamp rev_timestamp binary(14) NOT NULL default '', - + -- Records whether the user marked the 'minor edit' checkbox. -- Many automated edits are marked as minor. rev_minor_edit tinyint unsigned NOT NULL default 0, - + -- Not yet used; reserved for future changes to the deletion system. rev_deleted tinyint unsigned NOT NULL default 0, - + -- Length of this revision in bytes rev_len int unsigned, @@ -331,11 +333,11 @@ CREATE TABLE /*_*/text ( -- -- revision.rev_text_id is a key to this column old_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, - + -- Depending on the contents of the old_flags field, the text -- may be convenient plain text, or it may be funkily encoded. old_text mediumblob NOT NULL, - + -- Comma-separated list of flags: -- gzip: text is compressed with PHP's gzdeflate() function. -- utf8: text was stored as UTF-8. @@ -359,7 +361,7 @@ CREATE TABLE /*_*/text ( CREATE TABLE /*_*/archive ( ar_namespace int NOT NULL default 0, ar_title varchar(255) binary NOT NULL default '', - + -- Newly deleted pages will not store text in this table, -- but will reference the separately existing text rows. -- This field is retained for backwards compatibility, @@ -367,26 +369,26 @@ CREATE TABLE /*_*/archive ( -- upgrading from 1.4 to 1.5. -- Text may be gzipped or otherwise funky. ar_text mediumblob NOT NULL, - + -- Basic revision stuff... ar_comment tinyblob NOT NULL, ar_user int unsigned NOT NULL default 0, ar_user_text varchar(255) binary NOT NULL, ar_timestamp binary(14) NOT NULL default '', ar_minor_edit tinyint NOT NULL default 0, - + -- See ar_text note. ar_flags tinyblob NOT NULL, - + -- When revisions are deleted, their unique rev_id is stored -- here so it can be retained after undeletion. This is necessary -- to retain permalinks to given revisions after accidental delete -- cycles or messy operations like history merges. - -- + -- -- Old entries from 1.4 will be NULL here, and a new rev_id will -- be created on undeletion for those revisions. ar_rev_id int unsigned, - + -- For newly deleted revisions, this is the text.old_id key to the -- actual stored text. To avoid breaking the block-compression scheme -- and otherwise making storage changes harder, the actual text is @@ -404,19 +406,20 @@ CREATE TABLE /*_*/archive ( -- Length of this revision in bytes ar_len int unsigned, - -- Reference to page_id. Useful for sysadmin fixing of large pages + -- Reference to page_id. Useful for sysadmin fixing of large pages -- merged together in the archives, or for cleanly restoring a page -- at its original ID number if possible. -- -- Will be NULL for pages deleted prior to 1.11. ar_page_id int unsigned, - + -- Original previous revision ar_parent_id int unsigned default NULL ) /*$wgDBTableOptions*/; CREATE INDEX /*i*/name_title_timestamp ON /*_*/archive (ar_namespace,ar_title,ar_timestamp); CREATE INDEX /*i*/ar_usertext_timestamp ON /*_*/archive (ar_user_text,ar_timestamp); +CREATE INDEX /*i*/ar_revid ON /*_*/archive (ar_rev_id); -- @@ -425,7 +428,7 @@ CREATE INDEX /*i*/ar_usertext_timestamp ON /*_*/archive (ar_user_text,ar_timesta CREATE TABLE /*_*/pagelinks ( -- Key to the page_id of the page containing the link. pl_from int unsigned NOT NULL default 0, - + -- Key to page_namespace/page_title of the target page. -- The target page may or may not exist, and due to renames -- and deletions may refer to different page records as time @@ -444,7 +447,7 @@ CREATE UNIQUE INDEX /*i*/pl_namespace ON /*_*/pagelinks (pl_namespace,pl_title,p CREATE TABLE /*_*/templatelinks ( -- Key to the page_id of the page containing the link. tl_from int unsigned NOT NULL default 0, - + -- Key to page_namespace/page_title of the target page. -- The target page may or may not exist, and due to renames -- and deletions may refer to different page records as time @@ -465,7 +468,7 @@ CREATE UNIQUE INDEX /*i*/tl_namespace ON /*_*/templatelinks (tl_namespace,tl_tit CREATE TABLE /*_*/imagelinks ( -- Key to page_id of the page containing the image / media link. il_from int unsigned NOT NULL default 0, - + -- Filename of target image. -- This is also the page_title of the file's description page; -- all such pages are in namespace 6 (NS_FILE). @@ -483,37 +486,56 @@ CREATE UNIQUE INDEX /*i*/il_to ON /*_*/imagelinks (il_to,il_from); CREATE TABLE /*_*/categorylinks ( -- Key to page_id of the page defined as a category member. cl_from int unsigned NOT NULL default 0, - + -- Name of the category. -- This is also the page_title of the category's description page; -- all such pages are in namespace 14 (NS_CATEGORY). cl_to varchar(255) binary NOT NULL default '', - - -- The title of the linking page, or an optional override - -- to determine sort order. Sorting is by binary order, which - -- isn't always ideal, but collations seem to be an exciting - -- and dangerous new world in MySQL... The sortkey is updated - -- if no override exists and cl_from is renamed. - -- - -- Truncate so that the cl_sortkey key fits in 1000 bytes - -- (MyISAM 5 with server_character_set=utf8) - cl_sortkey varchar(70) binary NOT NULL default '', - + + -- A binary string obtained by applying a sortkey generation algorithm + -- (Collation::getSortKey()) to page_title, or cl_sortkey_prefix . "\n" + -- . page_title if cl_sortkey_prefix is nonempty. + cl_sortkey varbinary(230) NOT NULL default '', + + -- A prefix for the raw sortkey manually specified by the user, either via + -- [[Category:Foo|prefix]] or {{defaultsort:prefix}}. If nonempty, it's + -- concatenated with a line break followed by the page title before the sortkey + -- conversion algorithm is run. We store this so that we can update + -- collations without reparsing all pages. + cl_sortkey_prefix varchar(255) binary NOT NULL default '', + -- This isn't really used at present. Provided for an optional -- sorting method by approximate addition time. - cl_timestamp timestamp NOT NULL + cl_timestamp timestamp NOT NULL, + + -- Stores $wgCategoryCollation at the time cl_sortkey was generated. This + -- can be used to install new collation versions, tracking which rows are not + -- yet updated. '' means no collation, this is a legacy row that needs to be + -- updated by updateCollation.php. In the future, it might be possible to + -- specify different collations per category. + cl_collation varbinary(32) NOT NULL default '', + + -- Stores whether cl_from is a category, file, or other page, so we can + -- paginate the three categories separately. This never has to be updated + -- after the page is created, since none of these page types can be moved to + -- any other. + cl_type ENUM('page', 'subcat', 'file') NOT NULL default 'page' ) /*$wgDBTableOptions*/; CREATE UNIQUE INDEX /*i*/cl_from ON /*_*/categorylinks (cl_from,cl_to); --- We always sort within a given category... -CREATE INDEX /*i*/cl_sortkey ON /*_*/categorylinks (cl_to,cl_sortkey,cl_from); +-- We always sort within a given category, and within a given type. FIXME: +-- Formerly this index didn't cover cl_type (since that didn't exist), so old +-- callers won't be using an index: fix this? +CREATE INDEX /*i*/cl_sortkey ON /*_*/categorylinks (cl_to,cl_type,cl_sortkey,cl_from); -- Not really used? CREATE INDEX /*i*/cl_timestamp ON /*_*/categorylinks (cl_to,cl_timestamp); +-- For finding rows with outdated collation +CREATE INDEX /*i*/cl_collation ON /*_*/categorylinks (cl_collation); --- +-- -- Track all existing categories. Something is a category if 1) it has an en- -- try somewhere in categorylinks, or 2) it once did. Categories might not -- have corresponding pages, so they need to be tracked separately. @@ -557,15 +579,15 @@ CREATE TABLE /*_*/externallinks ( el_to blob NOT NULL, -- In the case of HTTP URLs, this is the URL with any username or password - -- removed, and with the labels in the hostname reversed and converted to + -- removed, and with the labels in the hostname reversed and converted to -- lower case. An extra dot is added to allow for matching of either -- example.com or *.example.com in a single scan. - -- Example: + -- Example: -- http://user:password@sub.example.com/page.html -- becomes -- http://com.example.sub./page.html -- which allows for fast searching for all pages under example.com with the - -- clause: + -- clause: -- WHERE el_index LIKE 'http://com.example.%' el_index blob NOT NULL ) /*$wgDBTableOptions*/; @@ -589,13 +611,13 @@ CREATE TABLE /*_*/external_user ( CREATE UNIQUE INDEX /*i*/eu_external_id ON /*_*/external_user (eu_external_id); --- +-- -- Track interlanguage links -- CREATE TABLE /*_*/langlinks ( -- page_id of the referring page ll_from int unsigned NOT NULL default 0, - + -- Language code of the target ll_lang varbinary(20) NOT NULL default '', @@ -607,6 +629,24 @@ CREATE UNIQUE INDEX /*i*/ll_from ON /*_*/langlinks (ll_from, ll_lang); CREATE INDEX /*i*/ll_lang ON /*_*/langlinks (ll_lang, ll_title); +-- +-- Track inline interwiki links +-- +CREATE TABLE /*_*/iwlinks ( + -- page_id of the referring page + iwl_from int unsigned NOT NULL default 0, + + -- Interwiki prefix code of the target + iwl_prefix varbinary(20) NOT NULL default '', + + -- Title of the target, including namespace + iwl_title varchar(255) binary NOT NULL default '' +) /*$wgDBTableOptions*/; + +CREATE UNIQUE INDEX /*i*/iwl_from ON /*_*/iwlinks (iwl_from, iwl_prefix, iwl_title); +CREATE UNIQUE INDEX /*i*/iwl_prefix_title_from ON /*_*/iwlinks (iwl_prefix, iwl_title, iwl_from); + + -- -- Contains a single row with some aggregate info -- on the state of the site. @@ -614,26 +654,26 @@ CREATE INDEX /*i*/ll_lang ON /*_*/langlinks (ll_lang, ll_title); CREATE TABLE /*_*/site_stats ( -- The single row should contain 1 here. ss_row_id int unsigned NOT NULL, - + -- Total number of page views, if hit counters are enabled. ss_total_views bigint unsigned default 0, - + -- Total number of edits performed. ss_total_edits bigint unsigned default 0, - + -- An approximate count of pages matching the following criteria: -- * in namespace 0 -- * not a redirect -- * contains the text '[[' -- See Article::isCountable() in includes/Article.php ss_good_articles bigint unsigned default 0, - + -- Total pages, theoretically equal to SELECT COUNT(*) FROM page; except faster ss_total_pages bigint default '-1', -- Number of users, theoretically equal to SELECT COUNT(*) FROM user; ss_users bigint default '-1', - + -- Number of users that still edit ss_active_users bigint default '-1', @@ -667,26 +707,26 @@ CREATE TABLE /*_*/hitcounter ( CREATE TABLE /*_*/ipblocks ( -- Primary key, introduced for privacy. ipb_id int NOT NULL PRIMARY KEY AUTO_INCREMENT, - + -- Blocked IP address in dotted-quad form or user name. ipb_address tinyblob NOT NULL, - + -- Blocked user ID or 0 for IP blocks. ipb_user int unsigned NOT NULL default 0, - + -- User ID who made the block. ipb_by int unsigned NOT NULL default 0, - + -- User name of blocker ipb_by_text varchar(255) binary NOT NULL default '', - + -- Text comment made by blocker. ipb_reason tinyblob NOT NULL, - + -- Creation (or refresh) date in standard YMDHMS form. -- IP blocks expire automatically. ipb_timestamp binary(14) NOT NULL default '', - + -- Indicates that the IP address was banned because a banned -- user accessed a page through it. If this is 1, ipb_address -- will be hidden, and the block identified by block ID number. @@ -700,11 +740,11 @@ CREATE TABLE /*_*/ipblocks ( -- Block triggers autoblocks ipb_enable_autoblock bool NOT NULL default '1', - + -- Time at which the block will expire. -- May be "infinity" ipb_expiry varbinary(14) NOT NULL default '', - + -- Start and end of an address range, in hexadecimal -- Size chosen to allow IPv6 ipb_range_start tinyblob NOT NULL, @@ -715,12 +755,12 @@ CREATE TABLE /*_*/ipblocks ( -- Block prevents user from accessing Special:Emailuser ipb_block_email bool NOT NULL default 0, - + -- Block allows user to edit their own talk page ipb_allow_usertalk bool NOT NULL default 0 ) /*$wgDBTableOptions*/; - + -- Unique index to support "user already blocked" messages -- Any new options which prevent collisions should be included CREATE UNIQUE INDEX /*i*/ipb_address ON /*_*/ipblocks (ipb_address(255), ipb_user, ipb_auto, ipb_anon_only); @@ -739,52 +779,52 @@ CREATE TABLE /*_*/image ( -- This is also the title of the associated description page, -- which will be in namespace 6 (NS_FILE). img_name varchar(255) binary NOT NULL default '' PRIMARY KEY, - + -- File size in bytes. img_size int unsigned NOT NULL default 0, - + -- For images, size in pixels. img_width int NOT NULL default 0, img_height int NOT NULL default 0, - + -- Extracted EXIF metadata stored as a serialized PHP array. img_metadata mediumblob NOT NULL, - + -- For images, bits per pixel if known. img_bits int NOT NULL default 0, - + -- Media type as defined by the MEDIATYPE_xxx constants img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL, - + -- major part of a MIME media type as defined by IANA -- see http://www.iana.org/assignments/media-types/ img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") NOT NULL default "unknown", - + -- minor part of a MIME media type as defined by IANA -- the minor parts are not required to adher to any standard -- but should be consistent throughout the database -- see http://www.iana.org/assignments/media-types/ img_minor_mime varbinary(100) NOT NULL default "unknown", - + -- Description field as entered by the uploader. -- This is displayed in image upload history and logs. img_description tinyblob NOT NULL, - + -- user_id and user_name of uploader. img_user int unsigned NOT NULL default 0, img_user_text varchar(255) binary NOT NULL, - + -- Time of the upload. img_timestamp varbinary(14) NOT NULL default '', - + -- SHA-1 content hash in base-36 img_sha1 varbinary(32) NOT NULL default '' ) /*$wgDBTableOptions*/; CREATE INDEX /*i*/img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp); --- Used by Special:Imagelist for sort-by-size +-- Used by Special:ListFiles for sort-by-size CREATE INDEX /*i*/img_size ON /*_*/image (img_size); --- Used by Special:Newimages and Special:Imagelist +-- Used by Special:Newimages and Special:ListFiles CREATE INDEX /*i*/img_timestamp ON /*_*/image (img_timestamp); -- Used in API and duplicate search CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1); @@ -798,11 +838,11 @@ CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1); CREATE TABLE /*_*/oldimage ( -- Base filename: key to image.img_name oi_name varchar(255) binary NOT NULL default '', - + -- Filename of the archived file. -- This is generally a timestamp and '!' prepended to the base name. oi_archive_name varchar(255) binary NOT NULL default '', - + -- Other fields as in image... oi_size int unsigned NOT NULL default 0, oi_width int NOT NULL default 0, @@ -834,30 +874,30 @@ CREATE INDEX /*i*/oi_sha1 ON /*_*/oldimage (oi_sha1); CREATE TABLE /*_*/filearchive ( -- Unique row id fa_id int NOT NULL PRIMARY KEY AUTO_INCREMENT, - + -- Original base filename; key to image.img_name, page.page_title, etc fa_name varchar(255) binary NOT NULL default '', - + -- Filename of archived file, if an old revision fa_archive_name varchar(255) binary default '', - + -- Which storage bin (directory tree or object store) the file data -- is stored in. Should be 'deleted' for files that have been deleted; -- any other bin is not yet in use. fa_storage_group varbinary(16), - + -- SHA-1 of the file contents plus extension, used as a key for storage. -- eg 8f8a562add37052a1848ff7771a2c515db94baa9.jpg -- -- If NULL, the file was missing at deletion time or has been purged -- from the archival storage. fa_storage_key varbinary(64) default '', - + -- Deletion information, if this file is deleted. fa_deleted_user int, fa_deleted_timestamp binary(14) default '', fa_deleted_reason text, - + -- Duped fields from image fa_size int unsigned default 0, fa_width int default 0, @@ -895,52 +935,52 @@ CREATE TABLE /*_*/recentchanges ( rc_id int NOT NULL PRIMARY KEY AUTO_INCREMENT, rc_timestamp varbinary(14) NOT NULL default '', rc_cur_time varbinary(14) NOT NULL default '', - + -- As in revision rc_user int unsigned NOT NULL default 0, rc_user_text varchar(255) binary NOT NULL, - + -- When pages are renamed, their RC entries do _not_ change. rc_namespace int NOT NULL default 0, rc_title varchar(255) binary NOT NULL default '', - + -- as in revision... rc_comment varchar(255) binary NOT NULL default '', rc_minor tinyint unsigned NOT NULL default 0, - + -- Edits by user accounts with the 'bot' rights key are -- marked with a 1 here, and will be hidden from the -- default view. rc_bot tinyint unsigned NOT NULL default 0, - + rc_new tinyint unsigned NOT NULL default 0, - + -- Key to page_id (was cur_id prior to 1.5). -- This will keep links working after moves while -- retaining the at-the-time name in the changes list. rc_cur_id int unsigned NOT NULL default 0, - + -- rev_id of the given revision rc_this_oldid int unsigned NOT NULL default 0, - + -- rev_id of the prior revision, for generating diff links. rc_last_oldid int unsigned NOT NULL default 0, - + -- These may no longer be used, with the new move log. rc_type tinyint unsigned NOT NULL default 0, rc_moved_to_ns tinyint unsigned NOT NULL default 0, rc_moved_to_title varchar(255) binary NOT NULL default '', - + -- If the Recent Changes Patrol option is enabled, -- users may mark edits as having been reviewed to -- remove a warning flag on the RC list. -- A value of 1 indicates the page has been reviewed. rc_patrolled tinyint unsigned NOT NULL default 0, - + -- Recorded IP address the edit was made from, if the -- $wgPutIPinRC option is enabled. rc_ip varbinary(40) NOT NULL default '', - + -- Text length in characters before -- and after the edit rc_old_len int, @@ -971,17 +1011,17 @@ CREATE INDEX /*i*/rc_user_text ON /*_*/recentchanges (rc_user_text, rc_timestamp CREATE TABLE /*_*/watchlist ( -- Key to user.user_id wl_user int unsigned NOT NULL, - + -- Key to page_namespace/page_title -- Note that users may watch pages which do not exist yet, -- or existed in the past but have been deleted. wl_namespace int NOT NULL default 0, wl_title varchar(255) binary NOT NULL default '', - + -- Timestamp when user was last sent a notification e-mail; -- cleared when the user visits the page. wl_notificationtimestamp varbinary(14) - + ) /*$wgDBTableOptions*/; CREATE UNIQUE INDEX /*i*/wl_user ON /*_*/watchlist (wl_user, wl_namespace, wl_title); @@ -995,17 +1035,17 @@ CREATE INDEX /*i*/namespace_title ON /*_*/watchlist (wl_namespace, wl_title); CREATE TABLE /*_*/math ( -- Binary MD5 hash of the latex fragment, used as an identifier key. math_inputhash varbinary(16) NOT NULL, - + -- Not sure what this is, exactly... math_outputhash varbinary(16) NOT NULL, - + -- texvc reports how well it thinks the HTML conversion worked; -- if it's a low level the PNG rendering may be preferred. math_html_conservativeness tinyint NOT NULL, - + -- HTML output from texvc, if any math_html text, - + -- MathML output from texvc, if any math_mathml text ) /*$wgDBTableOptions*/; @@ -1024,10 +1064,10 @@ CREATE UNIQUE INDEX /*i*/math_inputhash ON /*_*/math (math_inputhash); CREATE TABLE /*_*/searchindex ( -- Key to page_id si_page int unsigned NOT NULL, - + -- Munged version of title si_title varchar(255) NOT NULL default '', - + -- Munged version of body text si_text mediumtext NOT NULL ) ENGINE=MyISAM; @@ -1043,16 +1083,22 @@ CREATE FULLTEXT INDEX /*i*/si_text ON /*_*/searchindex (si_text); CREATE TABLE /*_*/interwiki ( -- The interwiki prefix, (e.g. "Meatball", or the language prefix "de") iw_prefix varchar(32) NOT NULL, - + -- The URL of the wiki, with "$1" as a placeholder for an article name. -- Any spaces in the name will be transformed to underscores before -- insertion. iw_url blob NOT NULL, - + + -- The URL of the file api.php + iw_api blob NOT NULL, + + -- The name of the database (for a connection to be established with wfGetLB( 'wikiid' )) + iw_wikiid varchar(64) NOT NULL, + -- A boolean value indicating whether the wiki is in this project -- (used, for example, to detect redirect loops) iw_local bool NOT NULL, - + -- Boolean value indicating whether interwiki transclusions are allowed. iw_trans tinyint NOT NULL default 0 ) /*$wgDBTableOptions*/; @@ -1066,10 +1112,10 @@ CREATE UNIQUE INDEX /*i*/iw_prefix ON /*_*/interwiki (iw_prefix); CREATE TABLE /*_*/querycache ( -- A key name, generally the base name of of the special page. qc_type varbinary(32) NOT NULL, - + -- Some sort of stored value. Sizes, counts... qc_value int unsigned NOT NULL default 0, - + -- Target namespace+title qc_namespace int NOT NULL default 0, qc_title varchar(255) binary NOT NULL default '' @@ -1110,25 +1156,25 @@ CREATE TABLE /*_*/logging ( -- action field, but only the type controls categorization. log_type varbinary(32) NOT NULL default '', log_action varbinary(32) NOT NULL default '', - + -- Timestamp. Duh. log_timestamp binary(14) NOT NULL default '19700101000000', - + -- The user who performed this action; key to user_id log_user int unsigned NOT NULL default 0, - + -- Name of the user who performed this action log_user_text varchar(255) binary NOT NULL default '', - + -- Key to the page affected. Where a user is the target, -- this will point to the user page. log_namespace int NOT NULL default 0, log_title varchar(255) binary NOT NULL default '', log_page int unsigned NULL, - + -- Freeform text. Interpreted as edit history comments. log_comment varchar(255) NOT NULL default '', - + -- LF separated list of miscellaneous parameters log_params blob NOT NULL, @@ -1170,7 +1216,7 @@ CREATE INDEX /*i*/tb_page ON /*_*/trackbacks (tb_page); -- Jobs performed by parallel apache threads or a command-line daemon CREATE TABLE /*_*/job ( job_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, - + -- Command name -- Limited to 60 to prevent key length overflow job_cmd varbinary(60) NOT NULL default '', @@ -1223,14 +1269,14 @@ CREATE INDEX /*i*/rd_ns_title ON /*_*/redirect (rd_namespace,rd_title,rd_from); CREATE TABLE /*_*/querycachetwo ( -- A key name, generally the base name of of the special page. qcc_type varbinary(32) NOT NULL, - + -- Some sort of stored value. Sizes, counts... qcc_value int unsigned NOT NULL default 0, - + -- Target namespace+title qcc_namespace int NOT NULL default 0, qcc_title varchar(255) binary NOT NULL default '', - + -- Target namespace+title2 qcc_namespacetwo int NOT NULL default 0, qcc_titletwo varchar(255) binary NOT NULL default '' @@ -1292,7 +1338,8 @@ CREATE UNIQUE INDEX /*i*/pp_page_propname ON /*_*/page_props (pp_page,pp_propnam -- A table to log updates, one text key row per update. CREATE TABLE /*_*/updatelog ( - ul_key varchar(255) NOT NULL PRIMARY KEY + ul_key varchar(255) NOT NULL PRIMARY KEY, + ul_value blob ) /*$wgDBTableOptions*/; @@ -1320,7 +1367,7 @@ CREATE INDEX /*i*/change_tag_tag_id ON /*_*/change_tag (ct_tag,ct_rc_id,ct_rev_i -- Rollup table to pull a LIST of tags simply without ugly GROUP_CONCAT -- that only works on MySQL 4.1+ CREATE TABLE /*_*/tag_summary ( - -- RCID for the change + -- RCID for the change ts_rc_id int NULL, -- LOGID for the change ts_log_id int NULL, @@ -1350,4 +1397,38 @@ CREATE TABLE /*_*/l10n_cache ( ) /*$wgDBTableOptions*/; CREATE INDEX /*i*/lc_lang_key ON /*_*/l10n_cache (lc_lang, lc_key); +-- Table for storing JSON message blobs for the resource loader +CREATE TABLE /*_*/msg_resource ( + -- Resource name + mr_resource varbinary(255) NOT NULL, + -- Language code + mr_lang varbinary(32) NOT NULL, + -- JSON blob + mr_blob mediumblob NOT NULL, + -- Timestamp of last update + mr_timestamp binary(14) NOT NULL +) /*$wgDBTableOptions*/; +CREATE UNIQUE INDEX /*i*/mr_resource_lang ON /*_*/msg_resource (mr_resource, mr_lang); + +-- Table for administering which message is contained in which resource +CREATE TABLE /*_*/msg_resource_links ( + mrl_resource varbinary(255) NOT NULL, + -- Message key + mrl_message varbinary(255) NOT NULL +) /*$wgDBTableOptions*/; +CREATE UNIQUE INDEX /*i*/mrl_message_resource ON /*_*/msg_resource_links (mrl_message, mrl_resource); + +-- Table for tracking which local files a module depends on that aren't +-- registered directly. +-- Currently only used for tracking images that CSS depends on +CREATE TABLE /*_*/module_deps ( + -- Module name + md_module varbinary(255) NOT NULL, + -- Skin name + md_skin varbinary(32) NOT NULL, + -- JSON blob with file dependencies + md_deps mediumblob NOT NULL +) /*$wgDBTableOptions*/; +CREATE UNIQUE INDEX /*i*/md_module_skin ON /*_*/module_deps (md_module, md_skin); + -- vim: sw=2 sts=2 et diff --git a/maintenance/testRunner.ora.sql b/maintenance/testRunner.ora.sql deleted file mode 100644 index 6e3e1b7c..00000000 --- a/maintenance/testRunner.ora.sql +++ /dev/null @@ -1,37 +0,0 @@ --- --- Optional tables for parserTests recording mode --- With --record option, success data will be saved to these tables, --- and comparisons of what's changed from the previous run will be --- displayed at the end of each run. --- --- defines must comply with ^define\s*([^\s=]*)\s*=\s?'\{\$([^\}]*)\}'; -define mw_prefix='{$wgDBprefix}'; - -DROP TABLE &mw_prefix.testitem CASCADE CONSTRAINTS; -DROP TABLE &mw_prefix.testrun CASCADE CONSTRAINTS; - -CREATE SEQUENCE testrun_tr_id_seq; -CREATE TABLE &mw_prefix.testrun ( - tr_id NUMBER NOT NULL, - tr_date DATE, - tr_mw_version BLOB, - tr_php_version BLOB, - tr_db_version BLOB, - tr_uname BLOB, -); -ALTER TABLE &mw_prefix.testrun ADD CONSTRAINT &mw_prefix.testrun_pk PRIMARY KEY (tr_id); -CREATE OR REPLACE TRIGGER &mw_prefix.testrun_bir -BEFORE UPDATE FOR EACH ROW -ON &mw_prefix.testrun -BEGIN - SELECT testrun_tr_id_seq.NEXTVAL into :NEW.tr_id FROM dual; -END; - -CREATE TABLE /*$wgDBprefix*/testitem ( - ti_run NUMBER NOT NULL REFERENCES &mw_prefix.testrun (tr_id) ON DELETE CASCADE, - ti_name VARCHAR22(255), - ti_success NUMBER(1) -); -CREATE UNIQUE INDEX &mw_prefix.testitem_u01 ON &mw_prefix.testitem (ti_run, ti_name); -CREATE UNIQUE INDEX &mw_prefix.testitem_u01 ON &mw_prefix.testitem (ti_run, ti_success); - diff --git a/maintenance/testRunner.postgres.sql b/maintenance/testRunner.postgres.sql deleted file mode 100644 index c15300b5..00000000 --- a/maintenance/testRunner.postgres.sql +++ /dev/null @@ -1,30 +0,0 @@ --- --- Optional tables for parserTests recording mode --- With --record option, success data will be saved to these tables, --- and comparisons of what's changed from the previous run will be --- displayed at the end of each run. --- --- This file is for the Postgres version of the tables --- - --- Note: "if exists" will not work on older versions of Postgres -DROP TABLE IF EXISTS testitem; -DROP TABLE IF EXISTS testrun; -DROP SEQUENCE IF EXISTS testrun_id_seq; - -CREATE SEQUENCE testrun_id_seq; -CREATE TABLE testrun ( - tr_id INTEGER PRIMARY KEY NOT NULL DEFAULT nextval('testrun_id_seq'), - tr_date TIMESTAMPTZ, - tr_mw_version TEXT, - tr_php_version TEXT, - tr_db_version TEXT, - tr_uname TEXT -); - -CREATE TABLE testitem ( - ti_run INTEGER NOT NULL REFERENCES testrun(tr_id) ON DELETE CASCADE, - ti_name TEXT NOT NULL, - ti_success SMALLINT NOT NULL -); -CREATE UNIQUE INDEX testitem_uniq ON testitem(ti_run, ti_name); diff --git a/maintenance/testRunner.sql b/maintenance/testRunner.sql deleted file mode 100644 index 8591d81d..00000000 --- a/maintenance/testRunner.sql +++ /dev/null @@ -1,35 +0,0 @@ --- --- Optional tables for parserTests recording mode --- With --record option, success data will be saved to these tables, --- and comparisons of what's changed from the previous run will be --- displayed at the end of each run. --- --- These tables currently require MySQL 5 (or maybe 4.1?) for subselects. --- - -drop table if exists /*$wgDBprefix*/testitem; -drop table if exists /*$wgDBprefix*/testrun; - -create table /*$wgDBprefix*/testrun ( - tr_id int not null auto_increment, - - tr_date char(14) binary, - tr_mw_version blob, - tr_php_version blob, - tr_db_version blob, - tr_uname blob, - - primary key (tr_id) -) engine=InnoDB; - -create table /*$wgDBprefix*/testitem ( - ti_run int not null, - ti_name varchar(255), - ti_success bool, - - unique key (ti_run, ti_name), - key (ti_run, ti_success), - - foreign key (ti_run) references /*$wgDBprefix*/testrun(tr_id) - on delete cascade -) engine=InnoDB; diff --git a/maintenance/tests/ApiSetup.php b/maintenance/tests/ApiSetup.php deleted file mode 100644 index 549d8aef..00000000 --- a/maintenance/tests/ApiSetup.php +++ /dev/null @@ -1,39 +0,0 @@ -getID() ) { - self::$user = User::createNew(self::$userName, array( - "password" => self::$passWord, - "email" => "test@example.com", - "real_name" => "Test User")); - } else { - self::$user->setPassword(self::$passWord); - } - self::$user->saveSettings(); - } - } -} diff --git a/maintenance/tests/ApiTest.php b/maintenance/tests/ApiTest.php deleted file mode 100644 index d098b1a2..00000000 --- a/maintenance/tests/ApiTest.php +++ /dev/null @@ -1,164 +0,0 @@ - null, - 'enablechunks' => false, - 'sessionkey' => null, - ); - } - - -} - - -class ApiTest extends ApiSetup { - - function setup() { - parent::setup(); - } - - function testRequireOnlyOneParameterDefault() { - $mock = new MockApi(); - - $this->assertEquals( - null, $mock->requireOnlyOneParameter(array("filename" => "foo.txt", - "enablechunks" => false), "filename", "enablechunks")); - } - - /** - * @expectedException UsageException - */ - function testRequireOnlyOneParameterZero() { - $mock = new MockApi(); - - $this->assertEquals( - null, $mock->requireOnlyOneParameter(array("filename" => "foo.txt", - "enablechunks" => 0), "filename", "enablechunks")); - } - - /** - * @expectedException UsageException - */ - function testRequireOnlyOneParameterTrue() { - $mock = new MockApi(); - - $this->assertEquals( - null, $mock->requireOnlyOneParameter(array("filename" => "foo.txt", - "enablechunks" => true), "filename", "enablechunks")); - } - - function testApi() { - if(!isset($wgServername) || !isset($wgServer)) { - $this->markTestIncomplete('This test needs $wgServerName and $wgServer to '. - 'be set in LocalSettings.php'); - } - /* Haven't thought about test ordering yet -- but this depends on HttpTest.php */ - $resp = Http::get( self::$apiUrl . "?format=xml" ); - - libxml_use_internal_errors( true ); - $sxe = simplexml_load_string( $resp ); - $this->assertNotType( "bool", $sxe ); - $this->assertThat( $sxe, $this->isInstanceOf( "SimpleXMLElement" ) ); - } - - function testApiLoginNoName() { - if(!isset($wgServername) || !isset($wgServer)) { - $this->markTestIncomplete('This test needs $wgServerName and $wgServer to '. - 'be set in LocalSettings.php'); - } - $resp = Http::post( self::$apiUrl . "?action=login&format=xml", - array( "postData" => array( - "lgname" => "", - "lgpassword" => self::$passWord ) ) ); - libxml_use_internal_errors( true ); - $sxe = simplexml_load_string( $resp ); - $this->assertNotType( "bool", $sxe ); - $this->assertThat( $sxe, $this->isInstanceOf( "SimpleXMLElement" ) ); - $a = $sxe->login[0]->attributes()->result; - $this->assertEquals( ' result="NoName"', $a->asXML() ); - } - - function testApiLoginBadPass() { - if(!isset($wgServername) || !isset($wgServer)) { - $this->markTestIncomplete('This test needs $wgServerName and $wgServer to '. - 'be set in LocalSettings.php'); - } - $resp = Http::post( self::$apiUrl . "?action=login&format=xml", - array( "postData" => array( - "lgname" => self::$userName, - "lgpassword" => "bad" ) ) ); - libxml_use_internal_errors( true ); - $sxe = simplexml_load_string( $resp ); - $this->assertNotType( "bool", $sxe ); - $this->assertThat( $sxe, $this->isInstanceOf( "SimpleXMLElement" ) ); - $a = $sxe->login[0]->attributes()->result; - $this->assertEquals( ' result="WrongPass"', $a->asXML() ); - } - - function testApiLoginGoodPass() { - if(!isset($wgServername) || !isset($wgServer)) { - $this->markTestIncomplete('This test needs $wgServerName and $wgServer to '. - 'be set in LocalSettings.php'); - } - $resp = Http::post( self::$apiUrl . "?action=login&format=xml", - array( "postData" => array( - "lgname" => self::$userName, - "lgpassword" => self::$passWord ) ) ); - libxml_use_internal_errors( true ); - $sxe = simplexml_load_string( $resp ); - $this->assertNotType( "bool", $sxe ); - $this->assertThat( $sxe, $this->isInstanceOf( "SimpleXMLElement" ) ); - $a = $sxe->login[0]->attributes()->result; - $this->assertEquals( ' result="Success"', $a->asXML() ); - } - - function testApiGotCookie() { - global $wgScriptPath, $wgServerName; - - if(!isset($wgServername) || !isset($wgServer)) { - $this->markTestIncomplete('This test needs $wgServerName and $wgServer to '. - 'be set in LocalSettings.php'); - } - $req = HttpRequest::factory( self::$apiUrl . "?action=login&format=xml", - array( "method" => "POST", - "postData" => array( "lgname" => self::$userName, - "lgpassword" => self::$passWord ) ) ); - $req->execute(); - $cj = $req->getCookieJar(); - $this->assertRegexp( '/_session=[^;]*; .*UserID=[0-9]*; .*UserName=' . self::$userName . '; .*Token=/', - $cj->serializeToHttpRequest( $wgScriptPath, $wgServerName ) ); - - - return $cj; - } - - /** - * @depends testApiGotCookie - */ - function testApiListPages(CookieJar $cj) { - $this->markTestIncomplete("Not done with this yet"); - - if($wgServerName == "localhost" || $wgServer == "http://localhost") { - $this->markTestIncomplete('This test needs $wgServerName and $wgServer to '. - 'be set in LocalSettings.php'); - } - $req = HttpRequest::factory( self::$apiUrl . "?action=query&format=xml&prop=revisions&". - "titles=Main%20Page&rvprop=timestamp|user|comment|content" ); - $req->setCookieJar($cj); - $req->execute(); - libxml_use_internal_errors( true ); - $sxe = simplexml_load_string( $req->getContent() ); - $this->assertNotType( "bool", $sxe ); - $this->assertThat( $sxe, $this->isInstanceOf( "SimpleXMLElement" ) ); - $a = $sxe->query[0]->pages[0]->page[0]->attributes(); - } -} diff --git a/maintenance/tests/CdbTest.php b/maintenance/tests/CdbTest.php deleted file mode 100644 index 444229e7..00000000 --- a/maintenance/tests/CdbTest.php +++ /dev/null @@ -1,79 +0,0 @@ -markTestIncomplete( 'This test requires native CDB support to be present.' ); - } - } - - public function testCdb() { - $w1 = new CdbWriter_PHP( 'php.cdb' ); - $w2 = new CdbWriter_DBA( 'dba.cdb' ); - - $data = array(); - for ( $i = 0; $i < 1000; $i++ ) { - $key = $this->randomString(); - $value = $this->randomString(); - $w1->set( $key, $value ); - $w2->set( $key, $value ); - - if ( !isset( $data[$key] ) ) { - $data[$key] = $value; - } - } - - $w1->close(); - $w2->close(); - - $this->assertEquals( - md5_file( 'dba.cdb' ), - md5_file( 'php.cdb' ), - 'same hash' - ); - - $r1 = new CdbReader_PHP( 'php.cdb' ); - $r2 = new CdbReader_DBA( 'dba.cdb' ); - - foreach ( $data as $key => $value ) { - if ( $key === '' ) { - // Known bug - continue; - } - $v1 = $r1->get( $key ); - $v2 = $r2->get( $key ); - - $v1 = $v1 === false ? '(not found)' : $v1; - $v2 = $v2 === false ? '(not found)' : $v2; - - #cdbAssert( 'Mismatch', $key, $v1, $v2 ); - $this->cdbAssert( "PHP error", $key, $v1, $value ); - $this->cdbAssert( "DBA error", $key, $v2, $value ); - } - - unlink( 'dba.cdb' ); - unlink( 'php.cdb' ); - } - - private function randomString() { - $len = mt_rand( 0, 10 ); - $s = ''; - for ( $j = 0; $j < $len; $j++ ) { - $s .= chr( mt_rand( 0, 255 ) ); - } - return $s; - } - - private function cdbAssert( $msg, $key, $v1, $v2 ) { - $this->assertEquals( - $v2, - $v1, - $msg . ', k=' . bin2hex( $key ) - ); - } -} diff --git a/maintenance/tests/DatabaseSqliteTest.php b/maintenance/tests/DatabaseSqliteTest.php deleted file mode 100644 index 011ef798..00000000 --- a/maintenance/tests/DatabaseSqliteTest.php +++ /dev/null @@ -1,57 +0,0 @@ -lastQuery = $sql; - return true; - } - - function replaceVars( $s ) { - return parent::replaceVars( $s ); - } -} - -class DatabaseSqliteTest extends PHPUnit_Framework_TestCase { - var $db; - - function setup() { - if ( !extension_loaded( 'pdo_sqlite' ) ) { - $this->markTestIncomplete( 'No SQLite support detected' ); - } - $this->db = new MockDatabaseSqlite(); - } - - function replaceVars( $sql ) { - // normalize spacing to hide implementation details - return preg_replace( '/\s+/', ' ', $this->db->replaceVars( $sql ) ); - } - - function testReplaceVars() { - $this->assertEquals( 'foo', $this->replaceVars( 'foo' ), "Don't break anything accidentally" ); - - $this->assertEquals( "CREATE TABLE /**/foo (foo_key INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " - . "foo_name TEXT NOT NULL DEFAULT '', foo_int INTEGER, foo_int2 INTEGER );", - $this->replaceVars( "CREATE TABLE /**/foo (foo_key int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, - foo_name varchar(255) binary NOT NULL DEFAULT '', foo_int tinyint( 8 ), foo_int2 int(16) ) ENGINE=MyISAM;" ) - ); - - $this->assertEquals( "CREATE TABLE foo ( foo_binary1 BLOB, foo_binary2 BLOB );", - $this->replaceVars( "CREATE TABLE foo ( foo_binary1 binary(16), foo_binary2 varbinary(32) );" ) - ); - - $this->assertEquals( "CREATE TABLE text ( text_foo TEXT );", - $this->replaceVars( "CREATE TABLE text ( text_foo tinytext );" ), - 'Table name changed' - ); - - $this->assertEquals( "ALTER TABLE foo ADD COLUMN foo_bar INTEGER DEFAULT 42", - $this->replaceVars( "ALTER TABLE foo\nADD COLUMN foo_bar int(10) unsigned DEFAULT 42") - ); - } -} \ No newline at end of file diff --git a/maintenance/tests/DatabaseTest.php b/maintenance/tests/DatabaseTest.php deleted file mode 100644 index aa50de2e..00000000 --- a/maintenance/tests/DatabaseTest.php +++ /dev/null @@ -1,92 +0,0 @@ -db = wfGetDB( DB_SLAVE ); - } - - function testAddQuotesNull() { - $check = "NULL"; - if ( $this->db->getType() === 'sqlite' ) { - $check = "''"; - } - $this->assertEquals( $check, $this->db->addQuotes( null ) ); - } - - function testAddQuotesInt() { - # returning just "1234" should be ok too, though... - # maybe - $this->assertEquals( - "'1234'", - $this->db->addQuotes( 1234 ) ); - } - - function testAddQuotesFloat() { - # returning just "1234.5678" would be ok too, though - $this->assertEquals( - "'1234.5678'", - $this->db->addQuotes( 1234.5678 ) ); - } - - function testAddQuotesString() { - $this->assertEquals( - "'string'", - $this->db->addQuotes( 'string' ) ); - } - - function testAddQuotesStringQuote() { - $check = "'string''s cause trouble'"; - if ( $this->db->getType() === 'mysql' ) { - $check = "'string\'s cause trouble'"; - } - $this->assertEquals( - $check, - $this->db->addQuotes( "string's cause trouble" ) ); - } - - function testFillPreparedEmpty() { - $sql = $this->db->fillPrepared( - 'SELECT * FROM interwiki', array() ); - $this->assertEquals( - "SELECT * FROM interwiki", - $sql); - } - - function testFillPreparedQuestion() { - $sql = $this->db->fillPrepared( - 'SELECT * FROM cur WHERE cur_namespace=? AND cur_title=?', - array( 4, "Snicker's_paradox" ) ); - - $check = "SELECT * FROM cur WHERE cur_namespace='4' AND cur_title='Snicker''s_paradox'"; - if ( $this->db->getType() === 'mysql' ) { - $check = "SELECT * FROM cur WHERE cur_namespace='4' AND cur_title='Snicker\'s_paradox'"; - } - $this->assertEquals( $check, $sql ); - } - - function testFillPreparedBang() { - $sql = $this->db->fillPrepared( - 'SELECT user_id FROM ! WHERE user_name=?', - array( '"user"', "Slash's Dot" ) ); - - $check = "SELECT user_id FROM \"user\" WHERE user_name='Slash''s Dot'"; - if ( $this->db->getType() === 'mysql' ) { - $check = "SELECT user_id FROM \"user\" WHERE user_name='Slash\'s Dot'"; - } - $this->assertEquals( $check, $sql ); - } - - function testFillPreparedRaw() { - $sql = $this->db->fillPrepared( - "SELECT * FROM cur WHERE cur_title='This_\\&_that,_WTF\\?\\!'", - array( '"user"', "Slash's Dot" ) ); - $this->assertEquals( - "SELECT * FROM cur WHERE cur_title='This_&_that,_WTF?!'", - $sql); - } - -} - - diff --git a/maintenance/tests/GlobalTest.php b/maintenance/tests/GlobalTest.php deleted file mode 100644 index ec694241..00000000 --- a/maintenance/tests/GlobalTest.php +++ /dev/null @@ -1,212 +0,0 @@ -originals['wgReadOnlyFile'] = $wgReadOnlyFile; - $wgReadOnlyFile = tempnam(wfTempDir(), "mwtest_readonly"); - unlink( $wgReadOnlyFile ); - } - - function tearDown() { - global $wgReadOnlyFile; - if( file_exists( $wgReadOnlyFile ) ) { - unlink( $wgReadOnlyFile ); - } - $wgReadOnlyFile = $this->originals['wgReadOnlyFile']; - } - - function testRandom() { - # This could hypothetically fail, but it shouldn't ;) - $this->assertFalse( - wfRandom() == wfRandom() ); - } - - function testUrlencode() { - $this->assertEquals( - "%E7%89%B9%E5%88%A5:Contributions/Foobar", - wfUrlencode( "\xE7\x89\xB9\xE5\x88\xA5:Contributions/Foobar" ) ); - } - - function testReadOnlyEmpty() { - global $wgReadOnly; - $wgReadOnly = null; - - $this->assertFalse( wfReadOnly() ); - $this->assertFalse( wfReadOnly() ); - } - - function testReadOnlySet() { - global $wgReadOnly, $wgReadOnlyFile; - - $f = fopen( $wgReadOnlyFile, "wt" ); - fwrite( $f, 'Message' ); - fclose( $f ); - $wgReadOnly = null; - - $this->assertTrue( wfReadOnly() ); - $this->assertTrue( wfReadOnly() ); - - unlink( $wgReadOnlyFile ); - $wgReadOnly = null; - - $this->assertFalse( wfReadOnly() ); - $this->assertFalse( wfReadOnly() ); - } - - function testQuotedPrintable() { - $this->assertEquals( - "=?UTF-8?Q?=C4=88u=20legebla=3F?=", - wfQuotedPrintable( "\xc4\x88u legebla?", "UTF-8" ) ); - } - - function testTime() { - $start = wfTime(); - $this->assertType( 'float', $start ); - $end = wfTime(); - $this->assertTrue( $end > $start, "Time is running backwards!" ); - } - - function testArrayToCGI() { - $this->assertEquals( - "baz=AT%26T&foo=bar", - wfArrayToCGI( - array( 'baz' => 'AT&T', 'ignore' => '' ), - array( 'foo' => 'bar', 'baz' => 'overridden value' ) ) ); - } - - function testMimeTypeMatch() { - $this->assertEquals( - 'text/html', - mimeTypeMatch( 'text/html', - array( 'application/xhtml+xml' => 1.0, - 'text/html' => 0.7, - 'text/plain' => 0.3 ) ) ); - $this->assertEquals( - 'text/*', - mimeTypeMatch( 'text/html', - array( 'image/*' => 1.0, - 'text/*' => 0.5 ) ) ); - $this->assertEquals( - '*/*', - mimeTypeMatch( 'text/html', - array( '*/*' => 1.0 ) ) ); - $this->assertNull( - mimeTypeMatch( 'text/html', - array( 'image/png' => 1.0, - 'image/svg+xml' => 0.5 ) ) ); - } - - function testNegotiateType() { - $this->assertEquals( - 'text/html', - wfNegotiateType( - array( 'application/xhtml+xml' => 1.0, - 'text/html' => 0.7, - 'text/plain' => 0.5, - 'text/*' => 0.2 ), - array( 'text/html' => 1.0 ) ) ); - $this->assertEquals( - 'application/xhtml+xml', - wfNegotiateType( - array( 'application/xhtml+xml' => 1.0, - 'text/html' => 0.7, - 'text/plain' => 0.5, - 'text/*' => 0.2 ), - array( 'application/xhtml+xml' => 1.0, - 'text/html' => 0.5 ) ) ); - $this->assertEquals( - 'text/html', - wfNegotiateType( - array( 'text/html' => 1.0, - 'text/plain' => 0.5, - 'text/*' => 0.5, - 'application/xhtml+xml' => 0.2 ), - array( 'application/xhtml+xml' => 1.0, - 'text/html' => 0.5 ) ) ); - $this->assertEquals( - 'text/html', - wfNegotiateType( - array( 'text/*' => 1.0, - 'image/*' => 0.7, - '*/*' => 0.3 ), - array( 'application/xhtml+xml' => 1.0, - 'text/html' => 0.5 ) ) ); - $this->assertNull( - wfNegotiateType( - array( 'text/*' => 1.0 ), - array( 'application/xhtml+xml' => 1.0 ) ) ); - } - - function testTimestamp() { - $t = gmmktime( 12, 34, 56, 1, 15, 2001 ); - $this->assertEquals( - '20010115123456', - wfTimestamp( TS_MW, $t ), - 'TS_UNIX to TS_MW' ); - $this->assertEquals( - 979562096, - wfTimestamp( TS_UNIX, $t ), - 'TS_UNIX to TS_UNIX' ); - $this->assertEquals( - '2001-01-15 12:34:56', - wfTimestamp( TS_DB, $t ), - 'TS_UNIX to TS_DB' ); - - $this->assertEquals( - '20010115123456', - wfTimestamp( TS_MW, '20010115123456' ), - 'TS_MW to TS_MW' ); - $this->assertEquals( - 979562096, - wfTimestamp( TS_UNIX, '20010115123456' ), - 'TS_MW to TS_UNIX' ); - $this->assertEquals( - '2001-01-15 12:34:56', - wfTimestamp( TS_DB, '20010115123456' ), - 'TS_MW to TS_DB' ); - - $this->assertEquals( - '20010115123456', - wfTimestamp( TS_MW, '2001-01-15 12:34:56' ), - 'TS_DB to TS_MW' ); - $this->assertEquals( - 979562096, - wfTimestamp( TS_UNIX, '2001-01-15 12:34:56' ), - 'TS_DB to TS_UNIX' ); - $this->assertEquals( - '2001-01-15 12:34:56', - wfTimestamp( TS_DB, '2001-01-15 12:34:56' ), - 'TS_DB to TS_DB' ); - } - - function testBasename() { - $sets = array( - '' => '', - '/' => '', - '\\' => '', - '//' => '', - '\\\\' => '', - 'a' => 'a', - 'aaaa' => 'aaaa', - '/a' => 'a', - '\\a' => 'a', - '/aaaa' => 'aaaa', - '\\aaaa' => 'aaaa', - '/aaaa/' => 'aaaa', - '\\aaaa\\' => 'aaaa', - '\\aaaa\\' => 'aaaa', - '/mnt/upload3/wikipedia/en/thumb/8/8b/Zork_Grand_Inquisitor_box_cover.jpg/93px-Zork_Grand_Inquisitor_box_cover.jpg' => '93px-Zork_Grand_Inquisitor_box_cover.jpg', - 'C:\\Progra~1\\Wikime~1\\Wikipe~1\\VIEWER.EXE' => 'VIEWER.EXE', - 'Östergötland_coat_of_arms.png' => 'Östergötland_coat_of_arms.png', - ); - foreach( $sets as $from => $to ) { - $this->assertEquals( $to, wfBaseName( $from ), - "wfBaseName('$from') => '$to'"); - } - } - - /* TODO: many more! */ -} - - diff --git a/maintenance/tests/HttpTest.php b/maintenance/tests/HttpTest.php deleted file mode 100644 index 83734910..00000000 --- a/maintenance/tests/HttpTest.php +++ /dev/null @@ -1,567 +0,0 @@ - "review=test" ); - - function setup() { - putenv("http_proxy"); /* Remove any proxy env var, so curl doesn't get confused */ - if ( is_array( self::$content ) ) { - return; - } - self::$has_curl = function_exists( 'curl_init' ); - self::$has_fopen = wfIniGetBool( 'allow_url_fopen' ); - - if ( !file_exists("/usr/bin/curl") ) { - $this->markTestIncomplete("This test requires the curl binary at /usr/bin/curl. If you have curl, please file a bug on this test, or, better yet, provide a patch."); - } - - $content = tempnam( wfTempDir(), "" ); - $headers = tempnam( wfTempDir(), "" ); - if ( !$content && !$headers ) { - die( "Couldn't create temp file!" ); - } - - // This probably isn't the best test for a proxy, but it works on my system! - system("curl -0 -o $content -s ".self::$proxy); - $out = file_get_contents( $content ); - if( $out ) { - self::$has_proxy = true; - } - - /* Maybe use wget instead of curl here ... just to use a different codebase? */ - foreach ( $this->test_geturl as $u ) { - system( "curl -0 -s -D $headers '$u' -o $content" ); - self::$content["GET $u"] = file_get_contents( $content ); - self::$headers["GET $u"] = file_get_contents( $headers ); - } - foreach ( $this->test_requesturl as $u ) { - system( "curl -0 -s -X POST -H 'Content-Length: 0' -D $headers '$u' -o $content" ); - self::$content["POST $u"] = file_get_contents( $content ); - self::$headers["POST $u"] = file_get_contents( $headers ); - } - foreach ( $this->test_posturl as $u => $postData ) { - system( "curl -0 -s -X POST -d '$postData' -D $headers '$u' -o $content" ); - self::$content["POST $u => $postData"] = file_get_contents( $content ); - self::$headers["POST $u => $postData"] = file_get_contents( $headers ); - } - unlink( $content ); - unlink( $headers ); - } - - - function testInstantiation() { - Http::$httpEngine = false; - - $r = HttpRequest::factory("http://www.example.com/"); - if ( self::$has_curl ) { - $this->assertThat($r, $this->isInstanceOf( 'CurlHttpRequest' )); - } else { - $this->assertThat($r, $this->isInstanceOf( 'PhpHttpRequest' )); - } - unset($r); - - if( !self::$has_fopen ) { - $this->setExpectedException( 'MWException' ); - } - Http::$httpEngine = 'php'; - $r = HttpRequest::factory("http://www.example.com/"); - $this->assertThat($r, $this->isInstanceOf( 'PhpHttpRequest' )); - unset($r); - - if( !self::$has_curl ) { - $this->setExpectedException( 'MWException' ); - } - Http::$httpEngine = 'curl'; - $r = HttpRequest::factory("http://www.example.com/"); - if( self::$has_curl ) { - $this->assertThat($r, $this->isInstanceOf( 'CurlHttpRequest' )); - } - } - - function runHTTPFailureChecks() { - // Each of the following requests should result in a failure. - - $timeout = 1; - $start_time = time(); - $r = HTTP::get( "http://www.example.com:1/", $timeout); - $end_time = time(); - $this->assertLessThan($timeout+2, $end_time - $start_time, - "Request took less than {$timeout}s via ".Http::$httpEngine); - $this->assertEquals($r, false, "false -- what we get on error from Http::get()"); - - $r = HTTP::get( "http://www.example.com/this-file-does-not-exist", $timeout); - $this->assertFalse($r, "False on 404s"); - - - $r = HttpRequest::factory( "http://www.example.com/this-file-does-not-exist" ); - $er = $r->execute(); - if ( is_a($r, 'PhpHttpRequest') && version_compare( '5.2.10', phpversion(), '>' ) ) { - $this->assertRegexp("/HTTP request failed/", $er->getWikiText()); - } else { - $this->assertRegexp("/404 Not Found/", $er->getWikiText()); - } - } - - function testFailureDefault() { - Http::$httpEngine = false; - self::runHTTPFailureChecks(); - } - - function testFailurePhp() { - if ( !self::$has_fopen ) { - $this->markTestIncomplete( "This test requires allow_url_fopen=true." ); - } - - Http::$httpEngine = "php"; - self::runHTTPFailureChecks(); - } - - function testFailureCurl() { - if ( !self::$has_curl ) { - $this->markTestIncomplete( "This test requires curl." ); - } - - Http::$httpEngine = "curl"; - self::runHTTPFailureChecks(); - } - - /* ./phase3/includes/Import.php:1108: $data = Http::request( $method, $url ); */ - /* ./includes/Import.php:1124: $link = Title::newFromText( "$interwiki:Special:Export/$page" ); */ - /* ./includes/Import.php:1134: return ImportStreamSource::newFromURL( $url, "POST" ); */ - function runHTTPRequests($proxy=null) { - $opt = array(); - - if($proxy) { - $opt['proxy'] = $proxy; - } elseif( $proxy === false ) { - $opt['noProxy'] = true; - } - - /* no postData here because the only request I could find in code so far didn't have any */ - foreach ( $this->test_requesturl as $u ) { - $r = Http::request( "POST", $u, $opt ); - $this->assertEquals( self::$content["POST $u"], "$r", "POST $u with ".Http::$httpEngine ); - } - } - - function testRequestDefault() { - Http::$httpEngine = false; - self::runHTTPRequests(); - } - - function testRequestPhp() { - if ( !self::$has_fopen ) { - $this->markTestIncomplete( "This test requires allow_url_fopen=true." ); - } - - Http::$httpEngine = "php"; - self::runHTTPRequests(); - } - - function testRequestCurl() { - if ( !self::$has_curl ) { - $this->markTestIncomplete( "This test requires curl." ); - } - - Http::$httpEngine = "curl"; - self::runHTTPRequests(); - } - - /* ./extensions/SpamBlacklist/SpamBlacklist_body.php:164: $httpText = Http::get( $fileName ); */ - /* ./extensions/ApiSVGProxy/ApiSVGProxy.body.php:44: $contents = Http::get( $file->getFullUrl() ); */ - /* ./extensions/BookInformation/drivers/IsbnDb.php:24: if( ( $xml = Http::get( $uri ) ) !== false ) { */ - /* ./extensions/BookInformation/drivers/Amazon.php:23: if( ( $xml = Http::get( $uri ) ) !== false ) { */ - /* ./extensions/TitleBlacklist/TitleBlacklist.list.php:217: $result = Http::get( $url ); */ - /* ./extensions/TSPoll/TSPoll.php:68: $get_server = Http::get( 'http://toolserver.org/~jan/poll/dev/main.php?page=wiki_output&id='.$id ); */ - /* ./extensions/TSPoll/TSPoll.php:70: $get_server = Http::get( 'http://toolserver.org/~jan/poll/main.php?page=wiki_output&id='.$id ); */ - /* ./extensions/DoubleWiki/DoubleWiki.php:56: $translation = Http::get( $url.$sep.'action=render' ); */ - /* ./extensions/ExternalPages/ExternalPages_body.php:177: $serializedText = Http::get( $this->mPageURL ); */ - /* ./extensions/Translate/utils/TranslationHelpers.php:143: $suggestions = Http::get( $url, $timeout ); */ - /* ./extensions/Translate/SpecialImportTranslations.php:169: $filedata = Http::get( $url ); ; */ - /* ./extensions/Translate/TranslateEditAddons.php:338: $suggestions = Http::get( $url, $timeout ); */ - /* ./extensions/SecurePoll/includes/user/Auth.php:283: $value = Http::get( $url, 20, $curlParams ); */ - /* ./extensions/DumpHTML/dumpHTML.inc:778: $contents = Http::get( $url ); */ - /* ./extensions/DumpHTML/dumpHTML.inc:1298: $contents = Http::get( $sourceUrl ); */ - /* ./extensions/DumpHTML/dumpHTML.inc:1373: $contents = Http::get( $sourceUrl ); */ - /* ./phase3/maintenance/rebuildInterwiki.inc:101: $intermap = Http::get( 'http://meta.wikimedia.org/w/index.php?title=Interwiki_map&action=raw', 30 ); */ - /* ./phase3/maintenance/findhooks.php:98: $allhookdata = Http::get( 'http://www.mediawiki.org/w/api.php?action=query&list=categorymembers&cmtitle=Category:MediaWiki_hooks&cmlimit=500&format=php' ); */ - /* ./phase3/maintenance/findhooks.php:109: $oldhookdata = Http::get( 'http://www.mediawiki.org/w/api.php?action=query&list=categorymembers&cmtitle=Category:Removed_hooks&cmlimit=500&format=php' ); */ - /* ./phase3/maintenance/dumpInterwiki.inc:95: $intermap = Http::get( 'http://meta.wikimedia.org/w/index.php?title=Interwiki_map&action=raw', 30 ); */ - /* ./phase3/includes/parser/Parser.php:3204: $text = Http::get($url); */ - /* ./phase3/includes/filerepo/ForeignAPIRepo.php:131: $data = Http::get( $url ); */ - /* ./phase3/includes/filerepo/ForeignAPIRepo.php:205: $thumb = Http::get( $foreignUrl ); */ - /* ./phase3/includes/filerepo/File.php:1105: $res = Http::get( $renderUrl ); */ - /* ./phase3/includes/GlobalFunctions.php:2760: * @deprecated Use Http::get() instead */ - /* ./phase3/includes/GlobalFunctions.php:2764: return Http::get( $url ); */ - /* ./phase3/includes/ExternalStoreHttp.php:18: $ret = Http::get( $url ); */ - /* ./phase3/includes/Import.php:357: $data = Http::get( $src ); */ - /* ./extensions/ExternalData/ED_Utils.php:291: return Http::get( $url, 'default', array(CURLOPT_SSL_VERIFYPEER => false) ); */ - /* ./extensions/ExternalData/ED_Utils.php:293: return Http::get( $url ); */ - /* ./extensions/ExternalData/ED_Utils.php:306: $page = Http::get( $url, 'default', array(CURLOPT_SSL_VERIFYPEER => false) ); */ - /* ./extensions/ExternalData/ED_Utils.php:308: $page = Http::get( $url ); */ - /* ./extensions/CodeReview/backend/Subversion.php:320: $blob = Http::get( $target, $this->mTimeout ); */ - /* ./extensions/AmazonPlus/AmazonPlus.php:214: $this->response = Http::get( $urlstr ); */ - /* ./extensions/StaticWiki/StaticWiki.php:24: $text = Http::get( $url ) ; */ - /* ./extensions/StaticWiki/StaticWiki.php:64: $history = Http::get ( $wgStaticWikiExternalSite . "index.php?title=" . urlencode ( $url_title ) . "&action=history" ) ; */ - /* ./extensions/Configure/scripts/findSettings.php:126: $cont = Http::get( "http://www.mediawiki.org/w/index.php?title={$page}&action=raw" ); */ - /* ./extensions/TorBlock/TorBlock.class.php:148: $data = Http::get( $url ); */ - /* ./extensions/HoneypotIntegration/HoneypotIntegration.class.php:60: $data = Http::get( $wgHoneypotURLSource, 'default', */ - /* ./extensions/SemanticForms/includes/SF_Utils.inc:378: $page_contents = Http::get($url); */ - /* ./extensions/LocalisationUpdate/LocalisationUpdate.class.php:172: $basefilecontents = Http::get( $basefile ); */ - /* ./extensions/APC/SpecialAPC.php:245: $rss = Http::get( 'http://pecl.php.net/feeds/pkg_apc.rss' ); */ - /* ./extensions/Interlanguage/Interlanguage.php:56: $a = Http::get( $url ); */ - /* ./extensions/MWSearch/MWSearch_body.php:492: $data = Http::get( $searchUrl, $wgLuceneSearchTimeout, $httpOpts); */ - function runHTTPGets($proxy=null) { - $opt = array(); - - if($proxy) { - $opt['proxy'] = $proxy; - } elseif( $proxy === false ) { - $opt['noProxy'] = true; - } - - foreach ( $this->test_geturl as $u ) { - $r = Http::get( $u, 30, $opt ); /* timeout of 30s */ - $this->assertEquals( self::$content["GET $u"], "$r", "Get $u with ".Http::$httpEngine ); - } - } - - function testGetDefault() { - Http::$httpEngine = false; - self::runHTTPGets(); - } - - function testGetPhp() { - if ( !self::$has_fopen ) { - $this->markTestIncomplete( "This test requires allow_url_fopen=true." ); - } - - Http::$httpEngine = "php"; - self::runHTTPGets(); - } - - function testGetCurl() { - if ( !self::$has_curl ) { - $this->markTestIncomplete( "This test requires curl." ); - } - - Http::$httpEngine = "curl"; - self::runHTTPGets(); - } - - /* ./phase3/maintenance/parserTests.inc:1618: return Http::post( $url, array( 'postData' => wfArrayToCGI( $data ) ) ); */ - function runHTTPPosts($proxy=null) { - $opt = array(); - - if($proxy) { - $opt['proxy'] = $proxy; - } elseif( $proxy === false ) { - $opt['noProxy'] = true; - } - - foreach ( $this->test_posturl as $u => $postData ) { - $opt['postData'] = $postData; - $r = Http::post( $u, $opt ); - $this->assertEquals( self::$content["POST $u => $postData"], "$r", - "POST $u (postData=$postData) with ".Http::$httpEngine ); - } - } - - function testPostDefault() { - Http::$httpEngine = false; - self::runHTTPPosts(); - } - - function testPostPhp() { - if ( !self::$has_fopen ) { - $this->markTestIncomplete( "This test requires allow_url_fopen=true." ); - } - - Http::$httpEngine = "php"; - self::runHTTPPosts(); - } - - function testPostCurl() { - if ( !self::$has_curl ) { - $this->markTestIncomplete( "This test requires curl." ); - } - - Http::$httpEngine = "curl"; - self::runHTTPPosts(); - } - - function runProxyRequests() { - if(!self::$has_proxy) { - $this->markTestIncomplete( "This test requires a proxy." ); - } - self::runHTTPGets(self::$proxy); - self::runHTTPPosts(self::$proxy); - self::runHTTPRequests(self::$proxy); - - // Set false here to do noProxy - self::runHTTPGets(false); - self::runHTTPPosts(false); - self::runHTTPRequests(false); - } - - function testProxyDefault() { - Http::$httpEngine = false; - self::runProxyRequests(); - } - - function testProxyPhp() { - if ( !self::$has_fopen ) { - $this->markTestIncomplete( "This test requires allow_url_fopen=true." ); - } - - Http::$httpEngine = 'php'; - self::runProxyRequests(); - } - - function testProxyCurl() { - if ( !self::$has_curl ) { - $this->markTestIncomplete( "This test requires curl." ); - } - - Http::$httpEngine = 'curl'; - self::runProxyRequests(); - } - - function testIsLocalUrl() { - } - - /* ./extensions/DonationInterface/payflowpro_gateway/payflowpro_gateway.body.php:559: $user_agent = Http::userAgent(); */ - function testUserAgent() { - } - - function testIsValidUrl() { - } - - function testValidateCookieDomain() { - $this->assertFalse( Cookie::validateCookieDomain( "co.uk" ) ); - $this->assertFalse( Cookie::validateCookieDomain( ".co.uk" ) ); - $this->assertFalse( Cookie::validateCookieDomain( "gov.uk" ) ); - $this->assertFalse( Cookie::validateCookieDomain( ".gov.uk" ) ); - $this->assertTrue( Cookie::validateCookieDomain( "supermarket.uk" ) ); - $this->assertFalse( Cookie::validateCookieDomain( "uk" ) ); - $this->assertFalse( Cookie::validateCookieDomain( ".uk" ) ); - $this->assertFalse( Cookie::validateCookieDomain( "127.0.0." ) ); - $this->assertFalse( Cookie::validateCookieDomain( "127." ) ); - $this->assertFalse( Cookie::validateCookieDomain( "127.0.0.1." ) ); - $this->assertTrue( Cookie::validateCookieDomain( "127.0.0.1" ) ); - $this->assertFalse( Cookie::validateCookieDomain( "333.0.0.1" ) ); - $this->assertTrue( Cookie::validateCookieDomain( "example.com" ) ); - $this->assertFalse( Cookie::validateCookieDomain( "example.com." ) ); - $this->assertTrue( Cookie::validateCookieDomain( ".example.com" ) ); - - $this->assertTrue( Cookie::validateCookieDomain( ".example.com", "www.example.com" ) ); - $this->assertFalse( Cookie::validateCookieDomain( "example.com", "www.example.com" ) ); - $this->assertTrue( Cookie::validateCookieDomain( "127.0.0.1", "127.0.0.1" ) ); - $this->assertFalse( Cookie::validateCookieDomain( "127.0.0.1", "localhost" ) ); - - - } - - function testSetCooke() { - $c = new MockCookie( "name", "value", - array( - "domain" => "ac.th", - "path" => "/path/", - ) ); - $this->assertFalse($c->canServeDomain("ac.th")); - - $c = new MockCookie( "name", "value", - array( - "domain" => "example.com", - "path" => "/path/", - ) ); - - $this->assertTrue($c->canServeDomain("example.com")); - $this->assertFalse($c->canServeDomain("www.example.com")); - - $c = new MockCookie( "name", "value", - array( - "domain" => ".example.com", - "path" => "/path/", - ) ); - - $this->assertFalse($c->canServeDomain("www.example.net")); - $this->assertFalse($c->canServeDomain("example.com")); - $this->assertTrue($c->canServeDomain("www.example.com")); - - $this->assertFalse($c->canServePath("/")); - $this->assertFalse($c->canServePath("/bogus/path/")); - $this->assertFalse($c->canServePath("/path")); - $this->assertTrue($c->canServePath("/path/")); - - $this->assertTrue($c->isUnExpired()); - - $this->assertEquals("", $c->serializeToHttpRequest("/path/", "www.example.net")); - $this->assertEquals("", $c->serializeToHttpRequest("/", "www.example.com")); - $this->assertEquals("name=value", $c->serializeToHttpRequest("/path/", "www.example.com")); - - $c = new MockCookie( "name", "value", - array( - "domain" => "www.example.com", - "path" => "/path/", - ) ); - $this->assertFalse($c->canServeDomain("example.com")); - $this->assertFalse($c->canServeDomain("www.example.net")); - $this->assertTrue($c->canServeDomain("www.example.com")); - - $c = new MockCookie( "name", "value", - array( - "domain" => ".example.com", - "path" => "/path/", - "expires" => "-1 day", - ) ); - $this->assertFalse($c->isUnExpired()); - $this->assertEquals("", $c->serializeToHttpRequest("/path/", "www.example.com")); - - $c = new MockCookie( "name", "value", - array( - "domain" => ".example.com", - "path" => "/path/", - "expires" => "+1 day", - ) ); - $this->assertTrue($c->isUnExpired()); - $this->assertEquals("name=value", $c->serializeToHttpRequest("/path/", "www.example.com")); - } - - function testCookieJarSetCookie() { - $cj = new CookieJar; - $cj->setCookie( "name", "value", - array( - "domain" => ".example.com", - "path" => "/path/", - ) ); - $cj->setCookie( "name2", "value", - array( - "domain" => ".example.com", - "path" => "/path/sub", - ) ); - $cj->setCookie( "name3", "value", - array( - "domain" => ".example.com", - "path" => "/", - ) ); - $cj->setCookie( "name4", "value", - array( - "domain" => ".example.net", - "path" => "/path/", - ) ); - $cj->setCookie( "name5", "value", - array( - "domain" => ".example.net", - "path" => "/path/", - "expires" => "-1 day", - ) ); - - $this->assertEquals("name4=value", $cj->serializeToHttpRequest("/path/", "www.example.net")); - $this->assertEquals("name3=value", $cj->serializeToHttpRequest("/", "www.example.com")); - $this->assertEquals("name=value; name3=value", $cj->serializeToHttpRequest("/path/", "www.example.com")); - - $cj->setCookie( "name5", "value", - array( - "domain" => ".example.net", - "path" => "/path/", - "expires" => "+1 day", - ) ); - $this->assertEquals("name4=value; name5=value", $cj->serializeToHttpRequest("/path/", "www.example.net")); - - $cj->setCookie( "name4", "value", - array( - "domain" => ".example.net", - "path" => "/path/", - "expires" => "-1 day", - ) ); - $this->assertEquals("name5=value", $cj->serializeToHttpRequest("/path/", "www.example.net")); - } - - function testParseResponseHeader() { - $cj = new CookieJar; - - $h[] = "Set-Cookie: name4=value; domain=.example.com; path=/; expires=Mon, 09-Dec-2029 13:46:00 GMT"; - $cj->parseCookieResponseHeader( $h[0], "www.example.com" ); - $this->assertEquals("name4=value", $cj->serializeToHttpRequest("/", "www.example.com")); - - $h[] = "name4=value2; domain=.example.com; path=/path/; expires=Mon, 09-Dec-2029 13:46:00 GMT"; - $cj->parseCookieResponseHeader( $h[1], "www.example.com" ); - $this->assertEquals("", $cj->serializeToHttpRequest("/", "www.example.com")); - $this->assertEquals("name4=value2", $cj->serializeToHttpRequest("/path/", "www.example.com")); - - $h[] = "name5=value3; domain=.example.com; path=/path/; expires=Mon, 09-Dec-2029 13:46:00 GMT"; - $cj->parseCookieResponseHeader( $h[2], "www.example.com" ); - $this->assertEquals("name4=value2; name5=value3", $cj->serializeToHttpRequest("/path/", "www.example.com")); - - $h[] = "name6=value3; domain=.example.net; path=/path/; expires=Mon, 09-Dec-2029 13:46:00 GMT"; - $cj->parseCookieResponseHeader( $h[3], "www.example.com" ); - $this->assertEquals("", $cj->serializeToHttpRequest("/path/", "www.example.net")); - - $h[] = "name6=value0; domain=.example.net; path=/path/; expires=Mon, 09-Dec-1999 13:46:00 GMT"; - $cj->parseCookieResponseHeader( $h[4], "www.example.net" ); - $this->assertEquals("", $cj->serializeToHttpRequest("/path/", "www.example.net")); - - $h[] = "name6=value4; domain=.example.net; path=/path/; expires=Mon, 09-Dec-2029 13:46:00 GMT"; - $cj->parseCookieResponseHeader( $h[5], "www.example.net" ); - $this->assertEquals("name6=value4", $cj->serializeToHttpRequest("/path/", "www.example.net")); - } - - function runCookieRequests() { - $r = HttpRequest::factory( "http://www.php.net/manual" ); - $r->execute(); - - $jar = $r->getCookieJar(); - $this->assertThat( $jar, $this->isInstanceOf( 'CookieJar' ) ); - - if ( is_a($r, 'PhpHttpRequest') && version_compare( '5.1.7', phpversion(), '>' ) ) { - $this->markTestSkipped( 'Redirection fails or crashes PHP on 5.1.6 and prior' ); - } - $serialized = $jar->serializeToHttpRequest( "/search?q=test", "www.php.net" ); - $this->assertRegExp( '/\bCOUNTRY=[^=;]+/', $serialized ); - $this->assertRegExp( '/\bLAST_LANG=[^=;]+/', $serialized ); - $this->assertEquals( '', $jar->serializeToHttpRequest( "/search?q=test", "www.php.com" ) ); - } - - function testCookieRequestDefault() { - Http::$httpEngine = false; - self::runCookieRequests(); - } - function testCookieRequestPhp() { - if ( !self::$has_fopen ) { - $this->markTestIncomplete( "This test requires allow_url_fopen=true." ); - } - - Http::$httpEngine = 'php'; - self::runCookieRequests(); - } - function testCookieRequestCurl() { - if ( !self::$has_curl ) { - $this->markTestIncomplete( "This test requires curl." ); - } - - Http::$httpEngine = 'curl'; - self::runCookieRequests(); - } -} \ No newline at end of file diff --git a/maintenance/tests/IPTest.php b/maintenance/tests/IPTest.php deleted file mode 100644 index 9db77f72..00000000 --- a/maintenance/tests/IPTest.php +++ /dev/null @@ -1,52 +0,0 @@ -assertTrue( IP::isValid( $ip ) , "$ip is a valid IPv4 address" ); - } - } - } - - public function testInvalidIPs() { - foreach ( range( 256, 999 ) as $i ) { - $a = sprintf( "%03d", $i ); - $b = sprintf( "%02d", $i ); - $c = sprintf( "%01d", $i ); - foreach ( array_unique( array( $a, $b, $c ) ) as $f ) { - $ip = "$f.$f.$f.$f"; - $this->assertFalse( IP::isValid( $ip ), "$ip is not a valid IPv4 address" ); - } - } - } - - public function testBogusIPs() { - $invalid = array( - 'www.xn--var-xla.net', - '216.17.184.G', - '216.17.184.1.', - '216.17.184', - '216.17.184.', - '256.17.184.1' - ); - foreach ( $invalid as $i ) { - $this->assertFalse( IP::isValid( $i ), "$i is an invalid IPv4 address" ); - } - } - - public function testPrivateIPs() { - $private = array( '10.0.0.1', '172.16.0.1', '192.168.0.1' ); - foreach ( $private as $p ) { - $this->assertFalse( IP::isPublic( $p ), "$p is not a public IP address" ); - } - } -} diff --git a/maintenance/tests/ImageFunctionsTest.php b/maintenance/tests/ImageFunctionsTest.php deleted file mode 100644 index 9794a2a2..00000000 --- a/maintenance/tests/ImageFunctionsTest.php +++ /dev/null @@ -1,48 +0,0 @@ - 50, - 'height' => 50, - 'tests' => array( - 50 => 50, - 17 => 17, - 18 => 18 ) ), - array( - 'width' => 366, - 'height' => 300, - 'tests' => array( - 50 => 61, - 17 => 21, - 18 => 22 ) ), - array( - 'width' => 300, - 'height' => 366, - 'tests' => array( - 50 => 41, - 17 => 14, - 18 => 15 ) ), - array( - 'width' => 100, - 'height' => 400, - 'tests' => array( - 50 => 12, - 17 => 4, - 18 => 4 ) ) ); - foreach( $vals as $row ) { - extract( $row ); - foreach( $tests as $max => $expected ) { - $y = round( $expected * $height / $width ); - $result = wfFitBoxWidth( $width, $height, $max ); - $y2 = round( $result * $height / $width ); - $this->assertEquals( $expected, - $result, - "($width, $height, $max) wanted: {$expected}x$y, got: {$result}x$y2" ); - } - } - } -} - - diff --git a/maintenance/tests/LanguageConverterTest.php b/maintenance/tests/LanguageConverterTest.php deleted file mode 100644 index 22b396e7..00000000 --- a/maintenance/tests/LanguageConverterTest.php +++ /dev/null @@ -1,148 +0,0 @@ -lang = new LanguageTest(); - $this->lc = new TestConverter( $this->lang, 'tg', - array( 'tg', 'tg-latn' ) ); - } - - function tearDown() { - global $wgMemc; - unset($wgMemc); - unset($this->lc); - unset($this->lang); - } - - function testGetPreferredVariantDefaults() { - $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false)); - $this->assertEquals('tg', $this->lc->getPreferredVariant(false, true)); - $this->assertEquals('tg', $this->lc->getPreferredVariant(true, false)); - $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true)); - } - - function testGetPreferredVariantHeaders() { - global $wgRequest; - $wgRequest->setHeader('Accept-Language', 'tg-latn'); - - $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false)); - $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(false, true)); - $this->assertEquals('tg', $this->lc->getPreferredVariant(true, false)); - $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true)); - } - - function testGetPreferredVariantHeaderWeight() { - global $wgRequest; - $wgRequest->setHeader('Accept-Language', 'tg;q=1'); - - $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false)); - $this->assertEquals('tg', $this->lc->getPreferredVariant(false, true)); - $this->assertEquals('tg', $this->lc->getPreferredVariant(true, false)); - $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true)); - } - - function testGetPreferredVariantHeaderWeight2() { - global $wgRequest; - $wgRequest->setHeader('Accept-Language', 'tg-latn;q=1'); - - $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false)); - $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(false, true)); - $this->assertEquals('tg', $this->lc->getPreferredVariant(true, false)); - $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true)); - } - - function testGetPreferredVariantHeaderMulti() { - global $wgRequest; - $wgRequest->setHeader('Accept-Language', 'en, tg-latn;q=1'); - - $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false)); - $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(false, true)); - $this->assertEquals('tg', $this->lc->getPreferredVariant(true, false)); - $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true)); - } - - function testGetPreferredVariantUserOption() { - global $wgUser; - - $wgUser = new User; - $wgUser->setId(1); - $wgUser->setOption('variant', 'tg-latn'); - - $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false)); - $this->assertEquals('tg', $this->lc->getPreferredVariant(false, true)); - $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, false)); - $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, true)); - } - - function testGetPreferredVariantHeaderUserVsUrl() { - global $wgRequest, $wgUser, $wgContLang; - - $wgContLang = Language::factory( 'tg-latn' ); - $wgRequest->setVal('variant', 'tg'); - $wgUser = User::newFromId("admin"); - $wgUser->setId(1); - $wgUser->setOption('variant', 'tg-latn'); // The user's data is ignored - // because the variant is set in the URL. - $this->assertEquals('tg', $this->lc->getPreferredVariant(true, false)); - $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true)); - } - - - function testGetPreferredVariantDefaultLanguageVariant() { - global $wgDefaultLanguageVariant; - - $wgDefaultLanguageVariant = 'tg-latn'; - $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(false, false)); - $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(false, true)); - $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, false)); - $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, true)); - } - - function testGetPreferredVariantDefaultLanguageVsUrlVariant() { - global $wgDefaultLanguageVariant, $wgRequest, $wgContLang; - - $wgContLang = Language::factory( 'tg-latn' ); - $wgDefaultLanguageVariant = 'tg'; - $wgRequest->setVal('variant', null); - $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false)); - $this->assertEquals('tg', $this->lc->getPreferredVariant(false, true)); - $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, false)); - $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, true)); - } -} - -/** - * Test converter (from Tajiki to latin orthography) - */ -class TestConverter extends LanguageConverter { - private $table = array( - 'б' => 'b', - 'в' => 'v', - 'г' => 'g', - ); - - function loadDefaultTables() { - $this->mTables = array( - 'tg-latn' => new ReplacementArray( $this->table ), - 'tg' => new ReplacementArray() - ); - } - -} - -class LanguageTest extends Language { - function __construct() { - parent::__construct(); - $variants = array( 'tg', 'tg-latn' ); - $this->mConverter = new TestConverter( $this, 'tg', $variants ); - } -} diff --git a/maintenance/tests/LicensesTest.php b/maintenance/tests/LicensesTest.php deleted file mode 100644 index c5357f89..00000000 --- a/maintenance/tests/LicensesTest.php +++ /dev/null @@ -1,17 +0,0 @@ -assertTrue( is_a( $lc, 'Licenses' ), 'Correct class' ); - } -} \ No newline at end of file diff --git a/maintenance/tests/LocalFileTest.php b/maintenance/tests/LocalFileTest.php deleted file mode 100644 index e57798be..00000000 --- a/maintenance/tests/LocalFileTest.php +++ /dev/null @@ -1,97 +0,0 @@ - 'test', - 'directory' => '/testdir', - 'url' => '/testurl', - 'hashLevels' => 2, - 'transformVia404' => false, - ); - $this->repo_hl0 = new LocalRepo( array( 'hashLevels' => 0 ) + $info ); - $this->repo_hl2 = new LocalRepo( array( 'hashLevels' => 2 ) + $info ); - $this->repo_lc = new LocalRepo( array( 'initialCapital' => false ) + $info ); - $this->file_hl0 = $this->repo_hl0->newFile( 'test!' ); - $this->file_hl2 = $this->repo_hl2->newFile( 'test!' ); - $this->file_lc = $this->repo_lc->newFile( 'test!' ); - } - - function tearDown() { - global $wgContLang; - unset($wgContLang); - } - - function testGetHashPath() { - $this->assertEquals( '', $this->file_hl0->getHashPath() ); - $this->assertEquals( 'a/a2/', $this->file_hl2->getHashPath() ); - $this->assertEquals( 'c/c4/', $this->file_lc->getHashPath() ); - } - - function testGetRel() { - $this->assertEquals( 'Test!', $this->file_hl0->getRel() ); - $this->assertEquals( 'a/a2/Test!', $this->file_hl2->getRel() ); - $this->assertEquals( 'c/c4/test!', $this->file_lc->getRel() ); - } - - function testGetUrlRel() { - $this->assertEquals( 'Test%21', $this->file_hl0->getUrlRel() ); - $this->assertEquals( 'a/a2/Test%21', $this->file_hl2->getUrlRel() ); - $this->assertEquals( 'c/c4/test%21', $this->file_lc->getUrlRel() ); - } - - function testGetArchivePath() { - $this->assertEquals( '/testdir/archive', $this->file_hl0->getArchivePath() ); - $this->assertEquals( '/testdir/archive/a/a2', $this->file_hl2->getArchivePath() ); - $this->assertEquals( '/testdir/archive/!', $this->file_hl0->getArchivePath( '!' ) ); - $this->assertEquals( '/testdir/archive/a/a2/!', $this->file_hl2->getArchivePath( '!' ) ); - } - - function testGetThumbPath() { - $this->assertEquals( '/testdir/thumb/Test!', $this->file_hl0->getThumbPath() ); - $this->assertEquals( '/testdir/thumb/a/a2/Test!', $this->file_hl2->getThumbPath() ); - $this->assertEquals( '/testdir/thumb/Test!/x', $this->file_hl0->getThumbPath( 'x' ) ); - $this->assertEquals( '/testdir/thumb/a/a2/Test!/x', $this->file_hl2->getThumbPath( 'x' ) ); - } - - function testGetArchiveUrl() { - $this->assertEquals( '/testurl/archive', $this->file_hl0->getArchiveUrl() ); - $this->assertEquals( '/testurl/archive/a/a2', $this->file_hl2->getArchiveUrl() ); - $this->assertEquals( '/testurl/archive/%21', $this->file_hl0->getArchiveUrl( '!' ) ); - $this->assertEquals( '/testurl/archive/a/a2/%21', $this->file_hl2->getArchiveUrl( '!' ) ); - } - - function testGetThumbUrl() { - $this->assertEquals( '/testurl/thumb/Test%21', $this->file_hl0->getThumbUrl() ); - $this->assertEquals( '/testurl/thumb/a/a2/Test%21', $this->file_hl2->getThumbUrl() ); - $this->assertEquals( '/testurl/thumb/Test%21/x', $this->file_hl0->getThumbUrl( 'x' ) ); - $this->assertEquals( '/testurl/thumb/a/a2/Test%21/x', $this->file_hl2->getThumbUrl( 'x' ) ); - } - - function testGetArchiveVirtualUrl() { - $this->assertEquals( 'mwrepo://test/public/archive', $this->file_hl0->getArchiveVirtualUrl() ); - $this->assertEquals( 'mwrepo://test/public/archive/a/a2', $this->file_hl2->getArchiveVirtualUrl() ); - $this->assertEquals( 'mwrepo://test/public/archive/%21', $this->file_hl0->getArchiveVirtualUrl( '!' ) ); - $this->assertEquals( 'mwrepo://test/public/archive/a/a2/%21', $this->file_hl2->getArchiveVirtualUrl( '!' ) ); - } - - function testGetThumbVirtualUrl() { - $this->assertEquals( 'mwrepo://test/thumb/Test%21', $this->file_hl0->getThumbVirtualUrl() ); - $this->assertEquals( 'mwrepo://test/thumb/a/a2/Test%21', $this->file_hl2->getThumbVirtualUrl() ); - $this->assertEquals( 'mwrepo://test/thumb/Test%21/%21', $this->file_hl0->getThumbVirtualUrl( '!' ) ); - $this->assertEquals( 'mwrepo://test/thumb/a/a2/Test%21/%21', $this->file_hl2->getThumbVirtualUrl( '!' ) ); - } - - function testGetUrl() { - $this->assertEquals( '/testurl/Test%21', $this->file_hl0->getUrl() ); - $this->assertEquals( '/testurl/a/a2/Test%21', $this->file_hl2->getUrl() ); - } -} - - diff --git a/maintenance/tests/Makefile b/maintenance/tests/Makefile deleted file mode 100644 index b2c0fb71..00000000 --- a/maintenance/tests/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -# See -# http://lists.wikimedia.org/pipermail/wikitech-l/2010-February/046657.html -# for why prove(1) is the default target and not phpunit(1) - -.PHONY: help test -all test: tap - -tap: - prove -e 'phpunit --tap' *Test*.php - -phpunit: - phpunit - -install: - pear channel-discover pear.phpunit.de - pear install phpunit/PHPUnit - -help: - # Options: - # test (default) Run the tests individually through Test::Harness's prove(1) - # phpunit Run all the tests with phpunit - # install Install PHPUnit from phpunit.de - # help You're looking at it! diff --git a/maintenance/tests/MediaWikiParserTest.php b/maintenance/tests/MediaWikiParserTest.php deleted file mode 100644 index a545b3bb..00000000 --- a/maintenance/tests/MediaWikiParserTest.php +++ /dev/null @@ -1,283 +0,0 @@ -total++; - $this->success += $result; - - } - - function reportPercentage( $success, $total ) {} -} - -class MediaWikiParserTestSuite extends PHPUnit_Framework_TestSuite { -#implements PHPUnit_Framework_SelfDescribing { - static private $count; - static public $parser; - static public $iter; - - public static function suite() { - $suite = new PHPUnit_Framework_TestSuite(); - - self::$iter = new TestFileIterator( PARSER_TESTS ); - - foreach(self::$iter as $i => $test) { - $suite->addTest(new ParserUnitTest($i, $test['test'])); - self::$count++; - } - unset($tests); - - self::$parser = new PTShell; - self::$iter->setParser(self::$parser); - self::$parser->recorder->start(); - self::$parser->setupDatabase(); - self::$iter->rewind(); - /* } */ - /* function setUp() { */ - global $wgParser, $wgParserConf, $IP, $messageMemc, $wgMemc, $wgDeferredUpdateList, - $wgUser, $wgLang, $wgOut, $wgRequest, $wgStyleDirectory, $wgEnableParserCache, - $wgMessageCache, $wgUseDatabaseMessages, $wgMsgCacheExpiry, $parserMemc, - $wgNamespaceAliases, $wgNamespaceProtection, $wgLocalFileRepo, - $wgNamespacesWithSubpages, $wgThumbnailScriptPath, $wgScriptPath, - $wgArticlePath, $wgStyleSheetPath, $wgScript, $wgStylePath; - - $wgScript = '/index.php'; - $wgScriptPath = '/'; - $wgArticlePath = '/wiki/$1'; - $wgStyleSheetPath = '/skins'; - $wgStylePath = '/skins'; - $wgThumbnailScriptPath = false; - $wgLocalFileRepo = array( - 'class' => 'LocalRepo', - 'name' => 'local', - 'directory' => '', - 'url' => 'http://example.com/images', - 'hashLevels' => 2, - 'transformVia404' => false, - ); - $wgNamespaceProtection[NS_MEDIAWIKI] = 'editinterface'; - $wgNamespaceAliases['Image'] = NS_FILE; - $wgNamespaceAliases['Image_talk'] = NS_FILE_TALK; - - - $wgEnableParserCache = false; - $wgDeferredUpdateList = array(); - $wgMemc =& wfGetMainCache(); - $messageMemc =& wfGetMessageCacheStorage(); - $parserMemc =& wfGetParserCacheStorage(); - - $wgContLang = new StubContLang; - $wgUser = new StubUser; - $wgLang = new StubUserLang; - $wgOut = new StubObject( 'wgOut', 'OutputPage' ); - $wgParser = new StubObject( 'wgParser', $wgParserConf['class'], array( $wgParserConf ) ); - $wgRequest = new WebRequest; - - $wgMessageCache = new StubObject( 'wgMessageCache', 'MessageCache', - array( $messageMemc, $wgUseDatabaseMessages, - $wgMsgCacheExpiry, wfWikiID() ) ); - if( $wgStyleDirectory === false) $wgStyleDirectory = "$IP/skins"; - - return $suite; - } - - public function tearDown() { - $this->teardownDatabase(); - $this->recorder->report(); - $this->recorder->end(); - $this->teardownUploadDir($this->uploadDir); - } - - public function count() {return self::$count;} - - public function toString() { - return "MediaWiki Parser Tests"; - } - - - private $db; - private $uploadDir; - private $keepUploads; - /** - * Remove the dummy uploads directory - */ - private function teardownUploadDir( $dir ) { - if ( $this->keepUploads ) { - return; - } - - // delete the files first, then the dirs. - self::deleteFiles( - array ( - "$dir/3/3a/Foobar.jpg", - "$dir/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg", - "$dir/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg", - "$dir/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg", - "$dir/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg", - - "$dir/0/09/Bad.jpg", - ) - ); - - self::deleteDirs( - array ( - "$dir/3/3a", - "$dir/3", - "$dir/thumb/6/65", - "$dir/thumb/6", - "$dir/thumb/3/3a/Foobar.jpg", - "$dir/thumb/3/3a", - "$dir/thumb/3", - - "$dir/0/09/", - "$dir/0/", - - "$dir/thumb", - "$dir", - ) - ); - } - - /** - * Delete the specified files, if they exist. - * @param array $files full paths to files to delete. - */ - private static function deleteFiles( $files ) { - foreach( $files as $file ) { - if( file_exists( $file ) ) { - unlink( $file ); - } - } - } - /** - * Delete the specified directories, if they exist. Must be empty. - * @param array $dirs full paths to directories to delete. - */ - private static function deleteDirs( $dirs ) { - foreach( $dirs as $dir ) { - if( is_dir( $dir ) ) { - rmdir( $dir ); - } - } - } - - /** - * Create a dummy uploads directory which will contain a couple - * of files in order to pass existence tests. - * @return string The directory - */ - private function setupUploadDir() { - global $IP; - if ( $this->keepUploads ) { - $dir = wfTempDir() . '/mwParser-images'; - if ( is_dir( $dir ) ) { - return $dir; - } - } else { - $dir = wfTempDir() . "/mwParser-" . mt_rand() . "-images"; - } - - wfDebug( "Creating upload directory $dir\n" ); - if ( file_exists( $dir ) ) { - wfDebug( "Already exists!\n" ); - return $dir; - } - wfMkdirParents( $dir . '/3/3a' ); - copy( "$IP/skins/monobook/headbg.jpg", "$dir/3/3a/Foobar.jpg" ); - - wfMkdirParents( $dir . '/0/09' ); - copy( "$IP/skins/monobook/headbg.jpg", "$dir/0/09/Bad.jpg" ); - return $dir; - } -} - -class ParserUnitTest extends PHPUnit_Framework_TestCase { - private $number = 0; - private $test = ""; - - public function __construct($number, $test) { - $this->number = $number; - $this->test = $test; - } - - function count() {return 1;} - - public function run(PHPUnit_Framework_TestResult $result = NULL) { - PHPUnit_Framework_Assert::resetCount(); - if ($result === NULL) { - $result = new PHPUnit_Framework_TestResult; - } - - $t = MediaWikiParserTestSuite::$iter->current(); - $k = MediaWikiParserTestSuite::$iter->key(); - - if(!MediaWikiParserTestSuite::$iter->valid()) { - return; - } - - // The only way this should happen is if the parserTest.txt - // file were modified while the script is running. - if($k != $this->number) { - $i = $this->number; - wfDie("I got confused!\n"); - } - - $result->startTest($this); - PHPUnit_Util_Timer::start(); - - $r = false; - try { - $r = MediaWikiParserTestSuite::$parser->runTest( - $t['test'], $t['input'], $t['result'], $t['options'], $t['config'] - ); - PHPUnit_Framework_Assert::assertTrue(true, $t['test']); - } - catch (PHPUnit_Framework_AssertionFailedError $e) { - $result->addFailure($this, $e, PHPUnit_Util_Timer::stop()); - } - catch (Exception $e) { - $result->addError($this, $e, PHPUnit_Util_Timer::stop()); - } - PHPUnit_Framework_Assert::assertTrue(true, $t['test']); - - $result->endTest($this, PHPUnit_Util_Timer::stop()); - - MediaWikiParserTestSuite::$parser->recorder->record($t['test'], $r); - MediaWikiParserTestSuite::$iter->next(); - $this->addToAssertionCount(PHPUnit_Framework_Assert::getCount()); - - return $result; - } - -} - -class PTShell extends ParserTest { - function showTesting( $desc ) { - } - - function showRunFile( $path ) { - } - - function showSuccess( $desc ) { - PHPUnit_Framework_Assert::assertTrue(true, $desc); - return true; - } - - function showFailure( $desc, $expected, $got ) { - PHPUnit_Framework_Assert::assertEquals($expected, $got, $desc); - } - -} - - diff --git a/maintenance/tests/MediaWiki_Setup.php b/maintenance/tests/MediaWiki_Setup.php deleted file mode 100644 index e7acc338..00000000 --- a/maintenance/tests/MediaWiki_Setup.php +++ /dev/null @@ -1,28 +0,0 @@ -tableName( $table ); - $db->tablePrefix( 'parsertest_' ); - - if( $db->isOpen() ) { - foreach ( $tables as $tbl ) { - $newTableName = $db->tableName( $tbl ); - $tableName = $oldTableNames[$tbl]; - $db->query( "DROP TABLE IF EXISTS $newTableName", __METHOD__ ); - $db->duplicateTableStructure( $tableName, $newTableName, __METHOD__ ); - } - return $db; - } else { - // Something amiss - return null; - } - } -} - diff --git a/maintenance/tests/README b/maintenance/tests/README deleted file mode 100644 index b52e790e..00000000 --- a/maintenance/tests/README +++ /dev/null @@ -1,24 +0,0 @@ -Some quickie unit tests done with the PHPUnit testing framework. To run the -test suite, run 'make test' in this dir. This directly invokes 'phpunit.' - -PHPUnit is no longer maintained by PEAR. To get the current version of -PHPUnit, first uninstall any old version of PHPUnit or PHPUnit2 from PEAR, -then install the current version from phpunit.de like this: - -# pear channel-discover pear.phpunit.de -# pear install phpunit/PHPUnit - -You also may wish to install this via your normal package mechanism: - -# aptitude install phpunit - - or - -# yum install phpunit - -Notes: -- Label currently broken tests in the group Broken and they will not - be run by phpunit. You can add them to the group by putting the - following comment at the top of the file: - /** - * @group Broken - */ -- Need to fix some broken tests diff --git a/maintenance/tests/RevisionTest.php b/maintenance/tests/RevisionTest.php deleted file mode 100644 index 78fcc7c3..00000000 --- a/maintenance/tests/RevisionTest.php +++ /dev/null @@ -1,114 +0,0 @@ - false, - 'wgCompressRevisions' => false, - 'wgInputEncoding' => 'utf-8', - 'wgOutputEncoding' => 'utf-8' ); - foreach( $globalSet as $var => $data ) { - $this->saveGlobals[$var] = $GLOBALS[$var]; - $GLOBALS[$var] = $data; - } - } - - function tearDown() { - foreach( $this->saveGlobals as $var => $data ) { - $GLOBALS[$var] = $data; - } - } - - function testGetRevisionText() { - $row = new stdClass; - $row->old_flags = ''; - $row->old_text = 'This is a bunch of revision text.'; - $this->assertEquals( - 'This is a bunch of revision text.', - Revision::getRevisionText( $row ) ); - } - - function testGetRevisionTextGzip() { - $row = new stdClass; - $row->old_flags = 'gzip'; - $row->old_text = gzdeflate( 'This is a bunch of revision text.' ); - $this->assertEquals( - 'This is a bunch of revision text.', - Revision::getRevisionText( $row ) ); - } - - function testGetRevisionTextUtf8Native() { - $row = new stdClass; - $row->old_flags = 'utf-8'; - $row->old_text = "Wiki est l'\xc3\xa9cole superieur !"; - $GLOBALS['wgLegacyEncoding'] = 'iso-8859-1'; - $this->assertEquals( - "Wiki est l'\xc3\xa9cole superieur !", - Revision::getRevisionText( $row ) ); - } - - function testGetRevisionTextUtf8Legacy() { - $row = new stdClass; - $row->old_flags = ''; - $row->old_text = "Wiki est l'\xe9cole superieur !"; - $GLOBALS['wgLegacyEncoding'] = 'iso-8859-1'; - $this->assertEquals( - "Wiki est l'\xc3\xa9cole superieur !", - Revision::getRevisionText( $row ) ); - } - - function testGetRevisionTextUtf8NativeGzip() { - $row = new stdClass; - $row->old_flags = 'gzip,utf-8'; - $row->old_text = gzdeflate( "Wiki est l'\xc3\xa9cole superieur !" ); - $GLOBALS['wgLegacyEncoding'] = 'iso-8859-1'; - $this->assertEquals( - "Wiki est l'\xc3\xa9cole superieur !", - Revision::getRevisionText( $row ) ); - } - - function testGetRevisionTextUtf8LegacyGzip() { - $row = new stdClass; - $row->old_flags = 'gzip'; - $row->old_text = gzdeflate( "Wiki est l'\xe9cole superieur !" ); - $GLOBALS['wgLegacyEncoding'] = 'iso-8859-1'; - $this->assertEquals( - "Wiki est l'\xc3\xa9cole superieur !", - Revision::getRevisionText( $row ) ); - } - - function testCompressRevisionTextUtf8() { - $row = new stdClass; - $row->old_text = "Wiki est l'\xc3\xa9cole superieur !"; - $row->old_flags = Revision::compressRevisionText( $row->old_text ); - $this->assertTrue( false !== strpos( $row->old_flags, 'utf-8' ), - "Flags should contain 'utf-8'" ); - $this->assertFalse( false !== strpos( $row->old_flags, 'gzip' ), - "Flags should not contain 'gzip'" ); - $this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !", - $row->old_text, "Direct check" ); - $this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !", - Revision::getRevisionText( $row ), "getRevisionText" ); - } - - function testCompressRevisionTextUtf8Gzip() { - $GLOBALS['wgCompressRevisions'] = true; - $row = new stdClass; - $row->old_text = "Wiki est l'\xc3\xa9cole superieur !"; - $row->old_flags = Revision::compressRevisionText( $row->old_text ); - $this->assertTrue( false !== strpos( $row->old_flags, 'utf-8' ), - "Flags should contain 'utf-8'" ); - $this->assertTrue( false !== strpos( $row->old_flags, 'gzip' ), - "Flags should contain 'gzip'" ); - $this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !", - gzinflate( $row->old_text ), "Direct check" ); - $this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !", - Revision::getRevisionText( $row ), "getRevisionText" ); - } -} - - diff --git a/maintenance/tests/RunSeleniumTests.php b/maintenance/tests/RunSeleniumTests.php new file mode 100644 index 00000000..2574f4b2 --- /dev/null +++ b/maintenance/tests/RunSeleniumTests.php @@ -0,0 +1,220 @@ +#!/usr/bin/php +mDescription = "Selenium Test Runner. For documentation, visit http://www.mediawiki.org/wiki/SeleniumFramework"; + $this->addOption( 'port', 'Port used by selenium server. Default: 4444', false, true ); + $this->addOption( 'host', 'Host selenium server. Default: $wgServer . $wgScriptPath', false, true ); + $this->addOption( 'testBrowser', 'The browser used during testing. Default: firefox', false, true ); + $this->addOption( 'wikiUrl', 'The Mediawiki installation to point to. Default: http://localhost', false, true ); + $this->addOption( 'username', 'The login username for sunning tests. Default: empty', false, true ); + $this->addOption( 'userPassword', 'The login password for running tests. Default: empty', false, true ); + $this->addOption( 'seleniumConfig', 'Location of the selenium config file. Default: empty', false, true ); + $this->addOption( 'list-browsers', 'List the available browsers.' ); + $this->addOption( 'verbose', 'Be noisier.' ); + $this->addOption( 'startserver', 'Start Selenium Server (on localhost) before the run.' ); + $this->addOption( 'stopserver', 'Stop Selenium Server (on localhost) after the run.' ); + $this->addOption( 'jUnitLogFile', 'Log results in a specified JUnit log file. Default: empty', false, true ); + $this->addOption( 'runAgainstGrid', 'The test will be run against a Selenium Grid. Default: false.', false, true ); + $this->deleteOption( 'dbpass' ); + $this->deleteOption( 'dbuser' ); + $this->deleteOption( 'globals' ); + $this->deleteOption( 'wiki' ); + } + + public function listBrowsers() { + $desc = "Available browsers:\n"; + + foreach ($this->selenium->getAvailableBrowsers() as $k => $v) { + $desc .= " $k => $v\n"; + } + + echo $desc; + } + + protected function startServer() { + if ( $this->seleniumServerExecPath == '' ) { + die ( "The selenium server exec path is not set in " . + "selenium_settings.ini. Cannot start server \n" . + "as requested - terminating RunSeleniumTests\n" ); + } + $this->serverManager = new SeleniumServerManager( 'true', + $this->selenium->getPort(), + $this->seleniumServerExecPath ); + switch ( $this->serverManager->start() ) { + case 'started': + break; + case 'failed': + die ( "Unable to start the Selenium Server - " . + "terminating RunSeleniumTests\n" ); + case 'running': + echo ( "Warning: The Selenium Server is " . + "already running\n" ); + break; + } + + return; + } + + protected function stopServer() { + if ( !isset ( $this->serverManager ) ) { + echo ( "Warning: Request to stop Selenium Server, but it was " . + "not stared by RunSeleniumTests\n" . + "RunSeleniumTests cannot stop a Selenium Server it " . + "did not start\n" ); + } else { + switch ( $this->serverManager->stop() ) { + case 'stopped': + break; + case 'failed': + echo ( "unable to stop the Selenium Server\n" ); + } + } + return; + } + + protected function runTests( $seleniumTestSuites = array() ) { + $result = new PHPUnit_Framework_TestResult; + $result->addListener( new SeleniumTestListener( $this->selenium->getLogger() ) ); + if ( $this->selenium->getJUnitLogFile() ) { + $jUnitListener = new PHPUnit_Util_Log_JUnit( $this->selenium->getJUnitLogFile(), true ); + $result->addListener( $jUnitListener ); + } + + foreach ( $seleniumTestSuites as $testSuiteName => $testSuiteFile ) { + require( $testSuiteFile ); + $suite = new $testSuiteName(); + $suite->setName( $testSuiteName ); + $suite->addTests(); + + try { + $suite->run( $result ); + } catch ( Testing_Selenium_Exception $e ) { + $suite->tearDown(); + throw new MWException( $e->getMessage() ); + } + } + + if ( $this->selenium->getJUnitLogFile() ) { + $jUnitListener->flush(); + } + } + + public function execute() { + global $wgServer, $wgScriptPath, $wgHooks; + + $seleniumSettings = array(); + $seleniumBrowsers = array(); + $seleniumTestSuites = array(); + + $configFile = $this->getOption( 'seleniumConfig', '' ); + if ( strlen( $configFile ) > 0 ) { + $this->output("Using Selenium Configuration file: " . $configFile . "\n"); + SeleniumConfig::getSeleniumSettings( $seleniumSettings, + $seleniumBrowsers, + $seleniumTestSuites, + $configFile ); + } else if ( !isset( $wgHooks['SeleniumSettings'] ) ) { + $this->output("No command line configuration file or configuration hook found.\n"); + SeleniumConfig::getSeleniumSettings( $seleniumSettings, + $seleniumBrowsers, + $seleniumTestSuites + ); + } else { + $this->output("Using 'SeleniumSettings' hook for configuration.\n"); + wfRunHooks('SeleniumSettings', array( $seleniumSettings, + $seleniumBrowsers, + $seleniumTestSuites ) ); + } + + // State for starting/stopping the Selenium server has nothing to do with the Selenium + // class. Keep this state local to SeleniumTester class. Using getOption() is clumsy, but + // the Maintenance class does not have a setOption() + if ( isset( $seleniumSettings['startserver'] ) ) $this->getOption( 'startserver', true ); + if ( isset( $seleniumSettings['stopserver'] ) ) $this->getOption( 'stopserver', true ); + if ( !isset( $seleniumSettings['seleniumserverexecpath'] ) ) $seleniumSettings['seleniumserverexecpath'] = ''; + $this->seleniumServerExecPath = $seleniumSettings['seleniumserverexecpath']; + + //set reasonable defaults if we did not find the settings + if ( !isset( $seleniumBrowsers ) ) $seleniumBrowsers = array ('firefox' => '*firefox'); + if ( !isset( $seleniumSettings['host'] ) ) $seleniumSettings['host'] = $wgServer . $wgScriptPath; + if ( !isset( $seleniumSettings['port'] ) ) $seleniumSettings['port'] = '4444'; + if ( !isset( $seleniumSettings['wikiUrl'] ) ) $seleniumSettings['wikiUrl'] = 'http://localhost'; + if ( !isset( $seleniumSettings['username'] ) ) $seleniumSettings['username'] = ''; + if ( !isset( $seleniumSettings['userPassword'] ) ) $seleniumSettings['userPassword'] = ''; + if ( !isset( $seleniumSettings['testBrowser'] ) ) $seleniumSettings['testBrowser'] = 'firefox'; + if ( !isset( $seleniumSettings['jUnitLogFile'] ) ) $seleniumSettings['jUnitLogFile'] = false; + if ( !isset( $seleniumSettings['runAgainstGrid'] ) ) $seleniumSettings['runAgainstGrid'] = false; + + // Setup Selenium class + $this->selenium = new Selenium( ); + $this->selenium->setAvailableBrowsers( $seleniumBrowsers ); + $this->selenium->setRunAgainstGrid( $this->getOption( 'runAgainstGrid', $seleniumSettings['runAgainstGrid'] ) ); + $this->selenium->setUrl( $this->getOption( 'wikiUrl', $seleniumSettings['wikiUrl'] ) ); + $this->selenium->setBrowser( $this->getOption( 'testBrowser', $seleniumSettings['testBrowser'] ) ); + $this->selenium->setPort( $this->getOption( 'port', $seleniumSettings['port'] ) ); + $this->selenium->setHost( $this->getOption( 'host', $seleniumSettings['host'] ) ); + $this->selenium->setUser( $this->getOption( 'username', $seleniumSettings['username'] ) ); + $this->selenium->setPass( $this->getOption( 'userPassword', $seleniumSettings['userPassword'] ) ); + $this->selenium->setVerbose( $this->hasOption( 'verbose' ) ); + $this->selenium->setJUnitLogFile( $this->getOption( 'jUnitLogFile', $seleniumSettings['jUnitLogFile'] ) ); + + if( $this->hasOption( 'list-browsers' ) ) { + $this->listBrowsers(); + exit(0); + } + if ( $this->hasOption( 'startserver' ) ) { + $this->startServer(); + } + + $logger = new SeleniumTestConsoleLogger; + $this->selenium->setLogger( $logger ); + + $this->runTests( $seleniumTestSuites ); + + if ( $this->hasOption( 'stopserver' ) ) { + $this->stopServer(); + } + } +} + +$maintClass = "SeleniumTester"; + +require_once( DO_MAINTENANCE ); diff --git a/maintenance/tests/SanitizerTest.php b/maintenance/tests/SanitizerTest.php deleted file mode 100644 index 8a2287d5..00000000 --- a/maintenance/tests/SanitizerTest.php +++ /dev/null @@ -1,73 +0,0 @@ -assertEquals( - "\xc3\xa9cole", - Sanitizer::decodeCharReferences( 'école' ), - 'decode named entities' - ); - } - - function testDecodeNumericEntities() { - $this->assertEquals( - "\xc4\x88io bonas dans l'\xc3\xa9cole!", - Sanitizer::decodeCharReferences( "Ĉio bonas dans l'école!" ), - 'decode numeric entities' - ); - } - - function testDecodeMixedEntities() { - $this->assertEquals( - "\xc4\x88io bonas dans l'\xc3\xa9cole!", - Sanitizer::decodeCharReferences( "Ĉio bonas dans l'école!" ), - 'decode mixed numeric/named entities' - ); - } - - function testDecodeMixedComplexEntities() { - $this->assertEquals( - "\xc4\x88io bonas dans l'\xc3\xa9cole! (mais pas Ĉio dans l'école)", - Sanitizer::decodeCharReferences( - "Ĉio bonas dans l'école! (mais pas &#x108;io dans l'&eacute;cole)" - ), - 'decode mixed complex entities' - ); - } - - function testInvalidAmpersand() { - $this->assertEquals( - 'a & b', - Sanitizer::decodeCharReferences( 'a & b' ), - 'Invalid ampersand' - ); - } - - function testInvalidEntities() { - $this->assertEquals( - '&foo;', - Sanitizer::decodeCharReferences( '&foo;' ), - 'Invalid named entity' - ); - } - - function testInvalidNumberedEntities() { - $this->assertEquals( UTF8_REPLACEMENT, Sanitizer::decodeCharReferences( "�" ), 'Invalid numbered entity' ); - } - - function testSelfClosingTag() { - $GLOBALS['wgUseTidy'] = false; - $this->assertEquals( - '
    Hello world
    ', - Sanitizer::removeHTMLtags( '
    Hello world
    ' ), - 'Self-closing closing div' - ); - } -} - diff --git a/maintenance/tests/SearchEngineTest.php b/maintenance/tests/SearchEngineTest.php deleted file mode 100644 index 0cae2d42..00000000 --- a/maintenance/tests/SearchEngineTest.php +++ /dev/null @@ -1,138 +0,0 @@ -db->safeQuery( <<db->tableName( 'page' ) ); - $this->db->safeQuery( <<db->tableName( 'revision' ) ); - $this->db->safeQuery( <<db->tableName( 'text' ) ); - $this->db->safeQuery( <<db->tableName( 'searchindex' ) ); - } - - function fetchIds( $results ) { - $matches = array(); - while( $row = $results->next() ) { - $matches[] = $row->getTitle()->getPrefixedText(); - } - $results->free(); - # Search is not guaranteed to return results in a certain order; - # sort them numerically so we will compare simply that we received - # the expected matches. - sort( $matches ); - return $matches; - } - - function testTextSearch() { - if( is_null( $this->db ) ) { - $this->markTestIncomplete( "Can't find a database to test with." ); - } - $this->assertEquals( - array( 'Smithee' ), - $this->fetchIds( $this->search->searchText( 'smithee' ) ), - "Plain search failed" ); - } - - function testTextPowerSearch() { - if( is_null( $this->db ) ) { - $this->markTestIncomplete( "Can't find a database to test with." ); - } - $this->search->setNamespaces( array( 0, 1, 4 ) ); - $this->assertEquals( - array( - 'Smithee', - 'Talk:Main Page', - ), - $this->fetchIds( $this->search->searchText( 'smithee' ) ), - "Power search failed" ); - } - - function testTitleSearch() { - if( is_null( $this->db ) ) { - $this->markTestIncomplete( "Can't find a database to test with." ); - } - $this->assertEquals( - array( - 'Alan Smithee', - 'Smithee', - ), - $this->fetchIds( $this->search->searchTitle( 'smithee' ) ), - "Title search failed" ); - } - - function testTextTitlePowerSearch() { - if( is_null( $this->db ) ) { - $this->markTestIncomplete( "Can't find a database to test with." ); - } - $this->search->setNamespaces( array( 0, 1, 4 ) ); - $this->assertEquals( - array( - 'Alan Smithee', - 'Smithee', - 'Talk:Smithee', - ), - $this->fetchIds( $this->search->searchTitle( 'smithee' ) ), - "Title power search failed" ); - } - -} - - - diff --git a/maintenance/tests/SearchMySQLTest.php b/maintenance/tests/SearchMySQLTest.php deleted file mode 100644 index 526f6216..00000000 --- a/maintenance/tests/SearchMySQLTest.php +++ /dev/null @@ -1,26 +0,0 @@ -db = $this->buildTestDatabase( - array( 'page', 'revision', 'text', 'searchindex', 'user' ) ); - if( $this->db ) { - $this->insertSearchData(); - } - $this->search = new SearchMySQL( $this->db ); - } - - function tearDown() { - if( !is_null( $this->db ) ) { - wfGetLB()->closeConnecton( $this->db ); - } - unset( $this->db ); - unset( $this->search ); - } -} - - diff --git a/maintenance/tests/SearchUpdateTest.php b/maintenance/tests/SearchUpdateTest.php deleted file mode 100644 index d21319a4..00000000 --- a/maintenance/tests/SearchUpdateTest.php +++ /dev/null @@ -1,103 +0,0 @@ -mConn = true; - $this->mOpened = true; - } - - function open( $server, $user, $password, $dbName ) { return true; } - function doQuery( $sql ) {} - function fetchObject( $res ) {} - function fetchRow( $res ) {} - function numRows( $res ) {} - function numFields( $res ) {} - function fieldName( $res, $n ) {} - function insertId() {} - function dataSeek( $res, $row ) {} - function lastErrno() { return 0; } - function lastError() { return ''; } - function affectedRows() {} - function fieldInfo( $table, $field ) {} - function strencode( $s ) {} - function getSoftwareLink() {} - function getServerVersion() {} - function getType() {} -} - -class MockSearch extends SearchEngine { - public static $id; - public static $title; - public static $text; - - public function __construct( $db ) { - } - - public function update( $id, $title, $text ) { - self::$id = $id; - self::$title = $title; - self::$text = $text; - } -} - -class SearchUpdateTest extends PHPUnit_Framework_TestCase { - - function update( $text, $title = 'Test', $id = 1 ) { - $u = new SearchUpdate( $id, $title, $text ); - $u->doUpdate(); - return array( MockSearch::$title, MockSearch::$text ); - } - - function updateText( $text ) { - list( $title, $resultText ) = $this->update( $text ); - $resultText = trim( $resultText ); // abstract from some implementation details - return $resultText; - } - - function setUp() { - global $wgSearchType, $wgDBtype, $wgLBFactoryConf, $wgDBservers; - $wgSearchType = 'MockSearch'; - $wgDBtype = 'mock'; - $wgLBFactoryConf['class'] = 'LBFactory_Simple'; - $wgDBservers = null; - LBFactory::destroyInstance(); - } - - function tearDown() { - LBFactory::destroyInstance(); - } - - function testUpdateText() { - $this->assertEquals( - 'test', - $this->updateText( '
    TeSt
    ' ), - 'HTML stripped, text lowercased' - ); - - $this->assertEquals( - 'foo bar boz quux', - $this->updateText( << -
    foo
    bar - bozquux - -EOT - ), 'Stripping HTML tables' ); - - $this->assertEquals( - 'a b', - $this->updateText( 'a > b' ), - 'Handle unclosed tags' - ); - - $text = str_pad( "foo assertNotEquals( - '', - $this->updateText( $text ), - 'Bug 18609' - ); - } -} diff --git a/maintenance/tests/SiteConfigurationTest.php b/maintenance/tests/SiteConfigurationTest.php deleted file mode 100644 index 791b6fe5..00000000 --- a/maintenance/tests/SiteConfigurationTest.php +++ /dev/null @@ -1,311 +0,0 @@ -suffixes as $suffix ) { - if ( substr( $wiki, -strlen( $suffix ) ) == $suffix ) { - $site = $suffix; - $lang = substr( $wiki, 0, -strlen( $suffix ) ); - break; - } - } - return array( - 'suffix' => $site, - 'lang' => $lang, - 'params' => array( - 'lang' => $lang, - 'site' => $site, - 'wiki' => $wiki, - ), - 'tags' => array( 'tag' ), - ); -} - -class SiteConfigurationTest extends PHPUnit_Framework_TestCase { - var $mConf; - - function setUp() { - $this->mConf = new SiteConfiguration; - - $this->mConf->suffixes = array( 'wiki' ); - $this->mConf->wikis = array( 'enwiki', 'dewiki', 'frwiki' ); - $this->mConf->settings = array( - 'simple' => array( - 'wiki' => 'wiki', - 'tag' => 'tag', - 'enwiki' => 'enwiki', - 'dewiki' => 'dewiki', - 'frwiki' => 'frwiki', - ), - - 'fallback' => array( - 'default' => 'default', - 'wiki' => 'wiki', - 'tag' => 'tag', - ), - - 'params' => array( - 'default' => '$lang $site $wiki', - ), - - '+global' => array( - 'wiki' => array( - 'wiki' => 'wiki', - ), - 'tag' => array( - 'tag' => 'tag', - ), - 'enwiki' => array( - 'enwiki' => 'enwiki', - ), - 'dewiki' => array( - 'dewiki' => 'dewiki', - ), - 'frwiki' => array( - 'frwiki' => 'frwiki', - ), - ), - - 'merge' => array( - '+wiki' => array( - 'wiki' => 'wiki', - ), - '+tag' => array( - 'tag' => 'tag', - ), - 'default' => array( - 'default' => 'default', - ), - '+enwiki' => array( - 'enwiki' => 'enwiki', - ), - '+dewiki' => array( - 'dewiki' => 'dewiki', - ), - '+frwiki' => array( - 'frwiki' => 'frwiki', - ), - ), - ); - - $GLOBALS['global'] = array( 'global' => 'global' ); - } - - - function testSiteFromDB() { - $this->assertEquals( - array( 'wikipedia', 'en' ), - $this->mConf->siteFromDB( 'enwiki' ), - 'siteFromDB()' - ); - $this->assertEquals( - array( 'wikipedia', '' ), - $this->mConf->siteFromDB( 'wiki' ), - 'siteFromDB() on a suffix' - ); - $this->assertEquals( - array( null, null ), - $this->mConf->siteFromDB( 'wikien' ), - 'siteFromDB() on a non-existing wiki' - ); - - $this->mConf->suffixes = array( 'wiki', '' ); - $this->assertEquals( - array( '', 'wikien' ), - $this->mConf->siteFromDB( 'wikien' ), - 'siteFromDB() on a non-existing wiki (2)' - ); - } - - function testGetLocalDatabases() { - $this->assertEquals( - array( 'enwiki', 'dewiki', 'frwiki' ), - $this->mConf->getLocalDatabases(), - 'getLocalDatabases()' - ); - } - - function testGet() { - $this->assertEquals( - 'enwiki', - $this->mConf->get( 'simple', 'enwiki', 'wiki' ), - 'get(): simple setting on an existing wiki' - ); - $this->assertEquals( - 'dewiki', - $this->mConf->get( 'simple', 'dewiki', 'wiki' ), - 'get(): simple setting on an existing wiki (2)' - ); - $this->assertEquals( - 'frwiki', - $this->mConf->get( 'simple', 'frwiki', 'wiki' ), - 'get(): simple setting on an existing wiki (3)' - ); - $this->assertEquals( - 'wiki', - $this->mConf->get( 'simple', 'wiki', 'wiki' ), - 'get(): simple setting on an suffix' - ); - $this->assertEquals( - 'wiki', - $this->mConf->get( 'simple', 'eswiki', 'wiki' ), - 'get(): simple setting on an non-existing wiki' - ); - - $this->assertEquals( - 'wiki', - $this->mConf->get( 'fallback', 'enwiki', 'wiki' ), - 'get(): fallback setting on an existing wiki' - ); - $this->assertEquals( - 'tag', - $this->mConf->get( 'fallback', 'dewiki', 'wiki', array(), array( 'tag' ) ), - 'get(): fallback setting on an existing wiki (with wiki tag)' - ); - $this->assertEquals( - 'wiki', - $this->mConf->get( 'fallback', 'wiki', 'wiki' ), - 'get(): fallback setting on an suffix' - ); - $this->assertEquals( - 'wiki', - $this->mConf->get( 'fallback', 'wiki', 'wiki', array(), array( 'tag' ) ), - 'get(): fallback setting on an suffix (with wiki tag)' - ); - $this->assertEquals( - 'wiki', - $this->mConf->get( 'fallback', 'eswiki', 'wiki' ), - 'get(): fallback setting on an non-existing wiki' - ); - $this->assertEquals( - 'tag', - $this->mConf->get( 'fallback', 'eswiki', 'wiki', array(), array( 'tag' ) ), - 'get(): fallback setting on an non-existing wiki (with wiki tag)' - ); - - $common = array( 'wiki' => 'wiki', 'default' => 'default' ); - $commonTag = array( 'tag' => 'tag', 'wiki' => 'wiki', 'default' => 'default' ); - $this->assertEquals( - array( 'enwiki' => 'enwiki' ) + $common, - $this->mConf->get( 'merge', 'enwiki', 'wiki' ), - 'get(): merging setting on an existing wiki' - ); - $this->assertEquals( - array( 'enwiki' => 'enwiki' ) + $commonTag, - $this->mConf->get( 'merge', 'enwiki', 'wiki', array(), array( 'tag' ) ), - 'get(): merging setting on an existing wiki (with tag)' - ); - $this->assertEquals( - array( 'dewiki' => 'dewiki' ) + $common, - $this->mConf->get( 'merge', 'dewiki', 'wiki' ), - 'get(): merging setting on an existing wiki (2)' - ); - $this->assertEquals( - array( 'dewiki' => 'dewiki' ) + $commonTag, - $this->mConf->get( 'merge', 'dewiki', 'wiki', array(), array( 'tag' ) ), - 'get(): merging setting on an existing wiki (2) (with tag)' - ); - $this->assertEquals( - array( 'frwiki' => 'frwiki' ) + $common, - $this->mConf->get( 'merge', 'frwiki', 'wiki' ), - 'get(): merging setting on an existing wiki (3)' - ); - $this->assertEquals( - array( 'frwiki' => 'frwiki' ) + $commonTag, - $this->mConf->get( 'merge', 'frwiki', 'wiki', array(), array( 'tag' ) ), - 'get(): merging setting on an existing wiki (3) (with tag)' - ); - $this->assertEquals( - array( 'wiki' => 'wiki' ) + $common, - $this->mConf->get( 'merge', 'wiki', 'wiki' ), - 'get(): merging setting on an suffix' - ); - $this->assertEquals( - array( 'wiki' => 'wiki' ) + $commonTag, - $this->mConf->get( 'merge', 'wiki', 'wiki', array(), array( 'tag' ) ), - 'get(): merging setting on an suffix (with tag)' - ); - $this->assertEquals( - $common, - $this->mConf->get( 'merge', 'eswiki', 'wiki' ), - 'get(): merging setting on an non-existing wiki' - ); - $this->assertEquals( - $commonTag, - $this->mConf->get( 'merge', 'eswiki', 'wiki', array(), array( 'tag' ) ), - 'get(): merging setting on an non-existing wiki (with tag)' - ); - } - - function testSiteFromDBWithCallback() { - $this->mConf->siteParamsCallback = 'getSiteParams'; - - $this->assertEquals( - array( 'wiki', 'en' ), - $this->mConf->siteFromDB( 'enwiki' ), - 'siteFromDB() with callback' - ); - $this->assertEquals( - array( 'wiki', '' ), - $this->mConf->siteFromDB( 'wiki' ), - 'siteFromDB() with callback on a suffix' - ); - $this->assertEquals( - array( null, null ), - $this->mConf->siteFromDB( 'wikien' ), - 'siteFromDB() with callback on a non-existing wiki' - ); - } - - function testParamReplacement() { - $this->mConf->siteParamsCallback = 'getSiteParams'; - - $this->assertEquals( - 'en wiki enwiki', - $this->mConf->get( 'params', 'enwiki', 'wiki' ), - 'get(): parameter replacement on an existing wiki' - ); - $this->assertEquals( - 'de wiki dewiki', - $this->mConf->get( 'params', 'dewiki', 'wiki' ), - 'get(): parameter replacement on an existing wiki (2)' - ); - $this->assertEquals( - 'fr wiki frwiki', - $this->mConf->get( 'params', 'frwiki', 'wiki' ), - 'get(): parameter replacement on an existing wiki (3)' - ); - $this->assertEquals( - ' wiki wiki', - $this->mConf->get( 'params', 'wiki', 'wiki' ), - 'get(): parameter replacement on an suffix' - ); - $this->assertEquals( - 'es wiki eswiki', - $this->mConf->get( 'params', 'eswiki', 'wiki' ), - 'get(): parameter replacement on an non-existing wiki' - ); - } - - function testGetAll() { - $this->mConf->siteParamsCallback = 'getSiteParams'; - - $getall = array( - 'simple' => 'enwiki', - 'fallback' => 'tag', - 'params' => 'en wiki enwiki', - 'global' => array( 'enwiki' => 'enwiki' ) + $GLOBALS['global'], - 'merge' => array( 'enwiki' => 'enwiki', 'tag' => 'tag', 'wiki' => 'wiki', 'default' => 'default' ), - ); - $this->assertEquals( $getall, $this->mConf->getAll( 'enwiki' ), 'getAll()' ); - - $this->mConf->extractAllGlobals( 'enwiki', 'wiki' ); - - $this->assertEquals( $getall['simple'], $GLOBALS['simple'], 'extractAllGlobals(): simple setting' ); - $this->assertEquals( $getall['fallback'], $GLOBALS['fallback'], 'extractAllGlobals(): fallback setting' ); - $this->assertEquals( $getall['params'], $GLOBALS['params'], 'extractAllGlobals(): parameter replacement' ); - $this->assertEquals( $getall['global'], $GLOBALS['global'], 'extractAllGlobals(): merging with global' ); - $this->assertEquals( $getall['merge'], $GLOBALS['merge'], 'extractAllGlobals(): merging setting' ); - } -} diff --git a/maintenance/tests/TimeAdjustTest.php b/maintenance/tests/TimeAdjustTest.php deleted file mode 100644 index bbd697bf..00000000 --- a/maintenance/tests/TimeAdjustTest.php +++ /dev/null @@ -1,40 +0,0 @@ -iniSet( 'precision', 15 ); - } - - # Test offset usage for a given language::userAdjust - function testUserAdjust() { - global $wgLocalTZoffset, $wgContLang, $wgUser; - - $wgContLang = $en = Language::factory( 'en' ); - - # Collection of parameters for Language_t_Offset. - # Format: date to be formatted, localTZoffset value, expected date - $userAdjust_tests = array( - array( 20061231235959, 0, 20061231235959 ), - array( 20061231235959, 5, 20070101000459 ), - array( 20061231235959, 15, 20070101001459 ), - array( 20061231235959, 60, 20070101005959 ), - array( 20061231235959, 90, 20070101012959 ), - array( 20061231235959, 120, 20070101015959 ), - array( 20061231235959, 540, 20070101085959 ), - array( 20061231235959, -5, 20061231235459 ), - array( 20061231235959, -30, 20061231232959 ), - array( 20061231235959, -60, 20061231225959 ), - ); - - foreach( $userAdjust_tests as $data ) { - $wgLocalTZoffset = $data[1]; - - $this->assertEquals( - strval( $data[2] ), - strval( $en->userAdjust( $data[0], '' ) ), - "User adjust {$data[0]} by {$data[1]} minutes should give {$data[2]}" - ); - } - } -} diff --git a/maintenance/tests/TitleTest.php b/maintenance/tests/TitleTest.php deleted file mode 100644 index 5b42c1c5..00000000 --- a/maintenance/tests/TitleTest.php +++ /dev/null @@ -1,17 +0,0 @@ -|", $chr ) !== false || preg_match( "/[\\x00-\\x1f\\x7f]/", $chr ) ) { - $this->assertFalse( (bool)preg_match( "/[$titlechars]/", $chr ), "chr($num) = $chr is not a valid titlechar" ); - } else { - $this->assertTrue( (bool)preg_match( "/[$titlechars]/", $chr ), "chr($num) = $chr is a valid titlechar" ); - } - } - } -} diff --git a/maintenance/tests/XmlTest.php b/maintenance/tests/XmlTest.php deleted file mode 100644 index 330e60c6..00000000 --- a/maintenance/tests/XmlTest.php +++ /dev/null @@ -1,115 +0,0 @@ -assertEquals( - '', - Xml::element( 'element', null, null ), - 'Opening element with no attributes' - ); - } - - function testElementEmpty() { - $this->assertEquals( - '', - Xml::element( 'element', null, '' ), - 'Terminated empty element' - ); - } - - function testElementEscaping() { - $this->assertEquals( - 'hello <there> you & you', - Xml::element( 'element', null, 'hello you & you' ), - 'Element with no attributes and content that needs escaping' - ); - } - - function testElementAttributes() { - $this->assertEquals( - '="<>">', - Xml::element( 'element', array( 'key' => 'value', '<>' => '<>' ), null ), - 'Element attributes, keys are not escaped' - ); - } - - function testOpenElement() { - $this->assertEquals( - '', - Xml::openElement( 'element', array( 'k' => 'v' ) ), - 'openElement() shortcut' - ); - } - - function testCloseElement() { - $this->assertEquals( '', Xml::closeElement( 'element' ), 'closeElement() shortcut' ); - } - - # - # textarea - # - function testTextareaNoContent() { - $this->assertEquals( - '', - Xml::textarea( 'name', '' ), - 'textarea() with not content' - ); - } - - function testTextareaAttribs() { - $this->assertEquals( - '', - Xml::textarea( 'name', '', 20, 10 ), - 'textarea() with custom attribs' - ); - } - - # - # JS - # - function testEscapeJsStringSpecialChars() { - $this->assertEquals( - '\\\\\r\n', - Xml::escapeJsString( "\\\r\n" ), - 'escapeJsString() with special characters' - ); - } - - function testEncodeJsVarBoolean() { - $this->assertEquals( - 'true', - Xml::encodeJsVar( true ), - 'encodeJsVar() with boolean' - ); - } - - function testEncodeJsVarNull() { - $this->assertEquals( - 'null', - Xml::encodeJsVar( null ), - 'encodeJsVar() with null' - ); - } - - function testEncodeJsVarArray() { - $this->assertEquals( - '["a", 1]', - Xml::encodeJsVar( array( 'a', 1 ) ), - 'encodeJsVar() with array' - ); - $this->assertEquals( - '{"a": "a", "b": 1}', - Xml::encodeJsVar( array( 'a' => 'a', 'b' => 1 ) ), - 'encodeJsVar() with associative array' - ); - } - - function testEncodeJsVarObject() { - $this->assertEquals( - '{"a": "a", "b": 1}', - Xml::encodeJsVar( (object)array( 'a' => 'a', 'b' => 1 ) ), - 'encodeJsVar() with object' - ); - } -} diff --git a/maintenance/tests/bootstrap.php b/maintenance/tests/bootstrap.php deleted file mode 100644 index 019bee07..00000000 --- a/maintenance/tests/bootstrap.php +++ /dev/null @@ -1,15 +0,0 @@ - +# http://www.mediawiki.org/ +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# http://www.gnu.org/copyleft/gpl.html + +/** + * @todo Make this more independent of the configuration (and if possible the database) + * @todo document + * @file + * @ingroup Maintenance + */ + +/** + * @ingroup Maintenance + */ +class ParserTest { + /** + * boolean $color whereas output should be colorized + */ + private $color; + + /** + * boolean $showOutput Show test output + */ + private $showOutput; + + /** + * boolean $useTemporaryTables Use temporary tables for the temporary database + */ + private $useTemporaryTables = true; + + /** + * boolean $databaseSetupDone True if the database has been set up + */ + private $databaseSetupDone = false; + + /** + * string $oldTablePrefix Original table prefix + */ + private $oldTablePrefix; + + private $maxFuzzTestLength = 300; + private $fuzzSeed = 0; + private $memoryLimit = 50; + private $uploadDir = null; + + public $regex = ""; + private $savedGlobals = array(); + /** + * Sets terminal colorization and diff/quick modes depending on OS and + * command-line options (--color and --quick). + */ + public function ParserTest( $options = array() ) { + # Only colorize output if stdout is a terminal. + $this->color = !wfIsWindows() && posix_isatty( 1 ); + + if ( isset( $options['color'] ) ) { + switch( $options['color'] ) { + case 'no': + $this->color = false; + break; + case 'yes': + default: + $this->color = true; + break; + } + } + + $this->term = $this->color + ? new AnsiTermColorer() + : new DummyTermColorer(); + + $this->showDiffs = !isset( $options['quick'] ); + $this->showProgress = !isset( $options['quiet'] ); + $this->showFailure = !( + isset( $options['quiet'] ) + && ( isset( $options['record'] ) + || isset( $options['compare'] ) ) ); // redundant output + + $this->showOutput = isset( $options['show-output'] ); + + + if ( isset( $options['regex'] ) ) { + if ( isset( $options['record'] ) ) { + echo "Warning: --record cannot be used with --regex, disabling --record\n"; + unset( $options['record'] ); + } + $this->regex = $options['regex']; + } else { + # Matches anything + $this->regex = ''; + } + + $this->setupRecorder( $options ); + $this->keepUploads = isset( $options['keep-uploads'] ); + + if ( isset( $options['seed'] ) ) { + $this->fuzzSeed = intval( $options['seed'] ) - 1; + } + + $this->runDisabled = isset( $options['run-disabled'] ); + + $this->hooks = array(); + $this->functionHooks = array(); + self::setUp(); + } + + static function setUp() { + global $wgParser, $wgParserConf, $IP, $messageMemc, $wgMemc, $wgDeferredUpdateList, + $wgUser, $wgLang, $wgOut, $wgRequest, $wgStyleDirectory, $wgEnableParserCache, + $wgMessageCache, $wgUseDatabaseMessages, $wgMsgCacheExpiry, $parserMemc, + $wgNamespaceAliases, $wgNamespaceProtection, $wgLocalFileRepo, + $wgThumbnailScriptPath, $wgScriptPath, + $wgArticlePath, $wgStyleSheetPath, $wgScript, $wgStylePath; + + $wgScript = '/index.php'; + $wgScriptPath = '/'; + $wgArticlePath = '/wiki/$1'; + $wgStyleSheetPath = '/skins'; + $wgStylePath = '/skins'; + $wgThumbnailScriptPath = false; + $wgLocalFileRepo = array( + 'class' => 'LocalRepo', + 'name' => 'local', + 'directory' => wfTempDir() . '/test-repo', + 'url' => 'http://example.com/images', + 'deletedDir' => wfTempDir() . '/test-repo/delete', + 'hashLevels' => 2, + 'transformVia404' => false, + ); + $wgNamespaceProtection[NS_MEDIAWIKI] = 'editinterface'; + $wgNamespaceAliases['Image'] = NS_FILE; + $wgNamespaceAliases['Image_talk'] = NS_FILE_TALK; + + + $wgEnableParserCache = false; + $wgDeferredUpdateList = array(); + $wgMemc = &wfGetMainCache(); + $messageMemc = &wfGetMessageCacheStorage(); + $parserMemc = &wfGetParserCacheStorage(); + + // $wgContLang = new StubContLang; + $wgUser = new User; + $wgLang = new StubUserLang; + $wgOut = new StubObject( 'wgOut', 'OutputPage' ); + $wgParser = new StubObject( 'wgParser', $wgParserConf['class'], array( $wgParserConf ) ); + $wgRequest = new WebRequest; + + $wgMessageCache = new StubObject( 'wgMessageCache', 'MessageCache', + array( $messageMemc, $wgUseDatabaseMessages, + $wgMsgCacheExpiry ) ); + if ( $wgStyleDirectory === false ) { + $wgStyleDirectory = "$IP/skins"; + } + + } + + public function setupRecorder ( $options ) { + if ( isset( $options['record'] ) ) { + $this->recorder = new DbTestRecorder( $this ); + $this->recorder->version = isset( $options['setversion'] ) ? + $options['setversion'] : SpecialVersion::getVersion(); + } elseif ( isset( $options['compare'] ) ) { + $this->recorder = new DbTestPreviewer( $this ); + } elseif ( isset( $options['upload'] ) ) { + $this->recorder = new RemoteTestRecorder( $this ); + } else { + $this->recorder = new TestRecorder( $this ); + } + } + + /** + * Remove last character if it is a newline + * @group utility + */ + static public function chomp( $s ) { + if ( substr( $s, -1 ) === "\n" ) { + return substr( $s, 0, -1 ); + } + else { + return $s; + } + } + + /** + * Run a fuzz test series + * Draw input from a set of test files + */ + function fuzzTest( $filenames ) { + $GLOBALS['wgContLang'] = Language::factory( 'en' ); + $dict = $this->getFuzzInput( $filenames ); + $dictSize = strlen( $dict ); + $logMaxLength = log( $this->maxFuzzTestLength ); + $this->setupDatabase(); + ini_set( 'memory_limit', $this->memoryLimit * 1048576 ); + + $numTotal = 0; + $numSuccess = 0; + $user = new User; + $opts = ParserOptions::newFromUser( $user ); + $title = Title::makeTitle( NS_MAIN, 'Parser_test' ); + + while ( true ) { + // Generate test input + mt_srand( ++$this->fuzzSeed ); + $totalLength = mt_rand( 1, $this->maxFuzzTestLength ); + $input = ''; + + while ( strlen( $input ) < $totalLength ) { + $logHairLength = mt_rand( 0, 1000000 ) / 1000000 * $logMaxLength; + $hairLength = min( intval( exp( $logHairLength ) ), $dictSize ); + $offset = mt_rand( 0, $dictSize - $hairLength ); + $input .= substr( $dict, $offset, $hairLength ); + } + + $this->setupGlobals(); + $parser = $this->getParser(); + + // Run the test + try { + $parser->parse( $input, $title, $opts ); + $fail = false; + } catch ( Exception $exception ) { + $fail = true; + } + + if ( $fail ) { + echo "Test failed with seed {$this->fuzzSeed}\n"; + echo "Input:\n"; + var_dump( $input ); + echo "\n\n"; + echo "$exception\n"; + } else { + $numSuccess++; + } + + $numTotal++; + $this->teardownGlobals(); + $parser->__destruct(); + + if ( $numTotal % 100 == 0 ) { + $usage = intval( memory_get_usage( true ) / $this->memoryLimit / 1048576 * 100 ); + echo "{$this->fuzzSeed}: $numSuccess/$numTotal (mem: $usage%)\n"; + if ( $usage > 90 ) { + echo "Out of memory:\n"; + $memStats = $this->getMemoryBreakdown(); + + foreach ( $memStats as $name => $usage ) { + echo "$name: $usage\n"; + } + $this->abort(); + } + } + } + } + + /** + * Get an input dictionary from a set of parser test files + */ + function getFuzzInput( $filenames ) { + $dict = ''; + + foreach ( $filenames as $filename ) { + $contents = file_get_contents( $filename ); + preg_match_all( '/!!\s*input\n(.*?)\n!!\s*result/s', $contents, $matches ); + + foreach ( $matches[1] as $match ) { + $dict .= $match . "\n"; + } + } + + return $dict; + } + + /** + * Get a memory usage breakdown + */ + function getMemoryBreakdown() { + $memStats = array(); + + foreach ( $GLOBALS as $name => $value ) { + $memStats['$' . $name] = strlen( serialize( $value ) ); + } + + $classes = get_declared_classes(); + + foreach ( $classes as $class ) { + $rc = new ReflectionClass( $class ); + $props = $rc->getStaticProperties(); + $memStats[$class] = strlen( serialize( $props ) ); + $methods = $rc->getMethods(); + + foreach ( $methods as $method ) { + $memStats[$class] += strlen( serialize( $method->getStaticVariables() ) ); + } + } + + $functions = get_defined_functions(); + + foreach ( $functions['user'] as $function ) { + $rf = new ReflectionFunction( $function ); + $memStats["$function()"] = strlen( serialize( $rf->getStaticVariables() ) ); + } + + asort( $memStats ); + + return $memStats; + } + + function abort() { + $this->abort(); + } + + /** + * Run a series of tests listed in the given text files. + * Each test consists of a brief description, wikitext input, + * and the expected HTML output. + * + * Prints status updates on stdout and counts up the total + * number and percentage of passed tests. + * + * @param $filenames Array of strings + * @return Boolean: true if passed all tests, false if any tests failed. + */ + public function runTestsFromFiles( $filenames ) { + $ok = false; + $GLOBALS['wgContLang'] = Language::factory( 'en' ); + $this->recorder->start(); + try { + $this->setupDatabase(); + $ok = true; + + foreach ( $filenames as $filename ) { + $tests = new TestFileIterator( $filename, $this ); + $ok = $this->runTests( $tests ) && $ok; + } + + $this->teardownDatabase(); + $this->recorder->report(); + } catch (DBError $e) { + echo $e->getMessage(); + } + $this->recorder->end(); + + return $ok; + } + + function runTests( $tests ) { + $ok = true; + + foreach ( $tests as $t ) { + $result = + $this->runTest( $t['test'], $t['input'], $t['result'], $t['options'], $t['config'] ); + $ok = $ok && $result; + $this->recorder->record( $t['test'], $result ); + } + + if ( $this->showProgress ) { + print "\n"; + } + + return $ok; + } + + /** + * Get a Parser object + */ + function getParser( $preprocessor = null ) { + global $wgParserConf; + + $class = $wgParserConf['class']; + $parser = new $class( array( 'preprocessorClass' => $preprocessor ) + $wgParserConf ); + + foreach ( $this->hooks as $tag => $callback ) { + $parser->setHook( $tag, $callback ); + } + + foreach ( $this->functionHooks as $tag => $bits ) { + list( $callback, $flags ) = $bits; + $parser->setFunctionHook( $tag, $callback, $flags ); + } + + wfRunHooks( 'ParserTestParser', array( &$parser ) ); + + return $parser; + } + + /** + * Run a given wikitext input through a freshly-constructed wiki parser, + * and compare the output against the expected results. + * Prints status and explanatory messages to stdout. + * + * @param $desc String: test's description + * @param $input String: wikitext to try rendering + * @param $result String: result to output + * @param $opts Array: test's options + * @param $config String: overrides for global variables, one per line + * @return Boolean + */ + public function runTest( $desc, $input, $result, $opts, $config ) { + if ( $this->showProgress ) { + $this->showTesting( $desc ); + } + + $opts = $this->parseOptions( $opts ); + $this->setupGlobals( $opts, $config ); + + $user = new User(); + $options = ParserOptions::newFromUser( $user ); + + if ( isset( $opts['title'] ) ) { + $titleText = $opts['title']; + } + else { + $titleText = 'Parser test'; + } + + $local = isset( $opts['local'] ); + $preprocessor = isset( $opts['preprocessor'] ) ? $opts['preprocessor'] : null; + $parser = $this->getParser( $preprocessor ); + $title = Title::newFromText( $titleText ); + + if ( isset( $opts['pst'] ) ) { + $out = $parser->preSaveTransform( $input, $title, $user, $options ); + } elseif ( isset( $opts['msg'] ) ) { + $out = $parser->transformMsg( $input, $options ); + } elseif ( isset( $opts['section'] ) ) { + $section = $opts['section']; + $out = $parser->getSection( $input, $section ); + } elseif ( isset( $opts['replace'] ) ) { + $section = $opts['replace'][0]; + $replace = $opts['replace'][1]; + $out = $parser->replaceSection( $input, $section, $replace ); + } elseif ( isset( $opts['comment'] ) ) { + $linker = $user->getSkin(); + $out = $linker->formatComment( $input, $title, $local ); + } elseif ( isset( $opts['preload'] ) ) { + $out = $parser->getpreloadText( $input, $title, $options ); + } else { + $output = $parser->parse( $input, $title, $options, true, true, 1337 ); + $out = $output->getText(); + + if ( isset( $opts['showtitle'] ) ) { + if ( $output->getTitleText() ) { + $title = $output->getTitleText(); + } + + $out = "$title\n$out"; + } + + if ( isset( $opts['ill'] ) ) { + $out = $this->tidy( implode( ' ', $output->getLanguageLinks() ) ); + } elseif ( isset( $opts['cat'] ) ) { + global $wgOut; + + $wgOut->addCategoryLinks( $output->getCategories() ); + $cats = $wgOut->getCategoryLinks(); + + if ( isset( $cats['normal'] ) ) { + $out = $this->tidy( implode( ' ', $cats['normal'] ) ); + } else { + $out = ''; + } + } + + $result = $this->tidy( $result ); + } + + $this->teardownGlobals(); + return $this->showTestResult( $desc, $result, $out ); + } + + /** + * + */ + function showTestResult( $desc, $result, $out ) { + if ( $result === $out ) { + $this->showSuccess( $desc ); + return true; + } else { + $this->showFailure( $desc, $result, $out ); + return false; + } + } + + /** + * Use a regex to find out the value of an option + * @param $key String: name of option val to retrieve + * @param $opts Options array to look in + * @param $default Mixed: default value returned if not found + */ + private static function getOptionValue( $key, $opts, $default ) { + $key = strtolower( $key ); + + if ( isset( $opts[$key] ) ) { + return $opts[$key]; + } else { + return $default; + } + } + + private function parseOptions( $instring ) { + $opts = array(); + // foo + // foo=bar + // foo="bar baz" + // foo=[[bar baz]] + // foo=bar,"baz quux" + $regex = '/\b + ([\w-]+) # Key + \b + (?:\s* + = # First sub-value + \s* + ( + " + [^"]* # Quoted val + " + | + \[\[ + [^]]* # Link target + \]\] + | + [\w-]+ # Plain word + ) + (?:\s* + , # Sub-vals 1..N + \s* + ( + "[^"]*" # Quoted val + | + \[\[[^]]*\]\] # Link target + | + [\w-]+ # Plain word + ) + )* + )? + /x'; + + if ( preg_match_all( $regex, $instring, $matches, PREG_SET_ORDER ) ) { + foreach ( $matches as $bits ) { + array_shift( $bits ); + $key = strtolower( array_shift( $bits ) ); + if ( count( $bits ) == 0 ) { + $opts[$key] = true; + } elseif ( count( $bits ) == 1 ) { + $opts[$key] = $this->cleanupOption( array_shift( $bits ) ); + } else { + // Array! + $opts[$key] = array_map( array( $this, 'cleanupOption' ), $bits ); + } + } + } + return $opts; + } + + private function cleanupOption( $opt ) { + if ( substr( $opt, 0, 1 ) == '"' ) { + return substr( $opt, 1, -1 ); + } + + if ( substr( $opt, 0, 2 ) == '[[' ) { + return substr( $opt, 2, -2 ); + } + return $opt; + } + + /** + * Set up the global variables for a consistent environment for each test. + * Ideally this should replace the global configuration entirely. + */ + private function setupGlobals( $opts = '', $config = '' ) { + global $wgDBtype; + + # Find out values for some special options. + $lang = + self::getOptionValue( 'language', $opts, 'en' ); + $variant = + self::getOptionValue( 'variant', $opts, false ); + $maxtoclevel = + self::getOptionValue( 'wgMaxTocLevel', $opts, 999 ); + $linkHolderBatchSize = + self::getOptionValue( 'wgLinkHolderBatchSize', $opts, 1000 ); + + $settings = array( + 'wgServer' => 'http://Britney-Spears', + 'wgScript' => '/index.php', + 'wgScriptPath' => '/', + 'wgArticlePath' => '/wiki/$1', + 'wgActionPaths' => array(), + 'wgLocalFileRepo' => array( + 'class' => 'LocalRepo', + 'name' => 'local', + 'directory' => $this->uploadDir, + 'url' => 'http://example.com/images', + 'hashLevels' => 2, + 'transformVia404' => false, + ), + 'wgEnableUploads' => self::getOptionValue( 'wgEnableUploads', $opts, true ), + 'wgStylePath' => '/skins', + 'wgStyleSheetPath' => '/skins', + 'wgSitename' => 'MediaWiki', + 'wgLanguageCode' => $lang, + 'wgDBprefix' => $wgDBtype != 'oracle' ? 'parsertest_' : 'pt_', + 'wgRawHtml' => isset( $opts['rawhtml'] ), + 'wgLang' => null, + 'wgContLang' => null, + 'wgNamespacesWithSubpages' => array( 0 => isset( $opts['subpage'] ) ), + 'wgMaxTocLevel' => $maxtoclevel, + 'wgCapitalLinks' => true, + 'wgNoFollowLinks' => true, + 'wgNoFollowDomainExceptions' => array(), + 'wgThumbnailScriptPath' => false, + 'wgUseImageResize' => false, + 'wgUseTeX' => isset( $opts['math'] ), + 'wgMathDirectory' => $this->uploadDir . '/math', + 'wgLocaltimezone' => 'UTC', + 'wgAllowExternalImages' => true, + 'wgUseTidy' => false, + 'wgDefaultLanguageVariant' => $variant, + 'wgVariantArticlePath' => false, + 'wgGroupPermissions' => array( '*' => array( + 'createaccount' => true, + 'read' => true, + 'edit' => true, + 'createpage' => true, + 'createtalk' => true, + ) ), + 'wgNamespaceProtection' => array( NS_MEDIAWIKI => 'editinterface' ), + 'wgDefaultExternalStore' => array(), + 'wgForeignFileRepos' => array(), + 'wgLinkHolderBatchSize' => $linkHolderBatchSize, + 'wgExperimentalHtmlIds' => false, + 'wgExternalLinkTarget' => false, + 'wgAlwaysUseTidy' => false, + 'wgHtml5' => true, + 'wgWellFormedXml' => true, + 'wgAllowMicrodataAttributes' => true, + ); + + if ( $config ) { + $configLines = explode( "\n", $config ); + + foreach ( $configLines as $line ) { + list( $var, $value ) = explode( '=', $line, 2 ); + + $settings[$var] = eval( "return $value;" ); + } + } + + $this->savedGlobals = array(); + + foreach ( $settings as $var => $val ) { + if ( array_key_exists( $var, $GLOBALS ) ) { + $this->savedGlobals[$var] = $GLOBALS[$var]; + } + + $GLOBALS[$var] = $val; + } + + $langObj = Language::factory( $lang ); + $GLOBALS['wgLang'] = $langObj; + $GLOBALS['wgContLang'] = $langObj; + $GLOBALS['wgMemc'] = new FakeMemCachedClient; + $GLOBALS['wgOut'] = new OutputPage; + + global $wgHooks; + + $wgHooks['ParserTestParser'][] = 'ParserTestParserHook::setup'; + $wgHooks['ParserTestParser'][] = 'ParserTestStaticParserHook::setup'; + $wgHooks['ParserGetVariableValueTs'][] = 'ParserTest::getFakeTimestamp'; + + MagicWord::clearCache(); + + global $wgUser; + $wgUser = new User(); + } + + /** + * List of temporary tables to create, without prefix. + * Some of these probably aren't necessary. + */ + private function listTables() { + global $wgDBtype; + + $tables = array( 'user', 'user_properties', 'page', 'page_restrictions', + 'protected_titles', 'revision', 'text', 'pagelinks', 'imagelinks', + 'categorylinks', 'templatelinks', 'externallinks', 'langlinks', 'iwlinks', + 'site_stats', 'hitcounter', 'ipblocks', 'image', 'oldimage', + 'recentchanges', 'watchlist', 'math', 'interwiki', 'logging', + 'querycache', 'objectcache', 'job', 'l10n_cache', 'redirect', 'querycachetwo', + 'archive', 'user_groups', 'page_props', 'category', 'msg_resource', 'msg_resource_links' + ); + + if ( in_array( $wgDBtype, array( 'mysql', 'sqlite', 'oracle' ) ) ) + array_push( $tables, 'searchindex' ); + + // Allow extensions to add to the list of tables to duplicate; + // may be necessary if they hook into page save or other code + // which will require them while running tests. + wfRunHooks( 'ParserTestTables', array( &$tables ) ); + + return $tables; + } + + /** + * Set up a temporary set of wiki tables to work with for the tests. + * Currently this will only be done once per run, and any changes to + * the db will be visible to later tests in the run. + */ + public function setupDatabase() { + global $wgDBprefix, $wgDBtype; + + if ( $this->databaseSetupDone ) { + return; + } + + if ( $wgDBprefix === 'parsertest_' || ( $wgDBtype == 'oracle' && $wgDBprefix === 'pt_' ) ) { + throw new MWException( 'setupDatabase should be called before setupGlobals' ); + } + + $this->databaseSetupDone = true; + $this->oldTablePrefix = $wgDBprefix; + + # SqlBagOStuff broke when using temporary tables on r40209 (bug 15892). + # It seems to have been fixed since (r55079?). + # If it fails, $wgCaches[CACHE_DB] = new HashBagOStuff(); should work around it. + + # CREATE TEMPORARY TABLE breaks if there is more than one server + if ( wfGetLB()->getServerCount() != 1 ) { + $this->useTemporaryTables = false; + } + + $temporary = $this->useTemporaryTables || $wgDBtype == 'postgres'; + + $db = wfGetDB( DB_MASTER ); + $tables = $this->listTables(); + + foreach ( $tables as $tbl ) { + # Clean up from previous aborted run. So that table escaping + # works correctly across DB engines, we need to change the pre- + # fix back and forth so tableName() works right. + $this->changePrefix( $this->oldTablePrefix ); + $oldTableName = $db->tableName( $tbl ); + $this->changePrefix( $wgDBtype != 'oracle' ? 'parsertest_' : 'pt_' ); + $newTableName = $db->tableName( $tbl ); + + if ( $wgDBtype == 'mysql' ) { + $db->query( "DROP TABLE IF EXISTS $newTableName" ); + } elseif ( in_array( $wgDBtype, array( 'postgres', 'oracle' ) ) ) { + /* DROPs wouldn't work due to Foreign Key Constraints (bug 14990, r58669) + * Use "DROP TABLE IF EXISTS $newTableName CASCADE" for postgres? That + * syntax would also work for mysql. + */ + } elseif ( $db->tableExists( $tbl ) ) { + $db->query( "DROP TABLE $newTableName" ); + } + + # Create new table + $db->duplicateTableStructure( $oldTableName, $newTableName, $temporary ); + } + + if ( $wgDBtype == 'oracle' ) + $db->query( 'BEGIN FILL_WIKI_INFO; END;' ); + + $this->changePrefix( $wgDBtype != 'oracle' ? 'parsertest_' : 'pt_' ); + + if ( $wgDBtype == 'oracle' ) { + # Insert 0 user to prevent FK violations + + # Anonymous user + $db->insert( 'user', array( + 'user_id' => 0, + 'user_name' => 'Anonymous' ) ); + } + + # Hack: insert a few Wikipedia in-project interwiki prefixes, + # for testing inter-language links + $db->insert( 'interwiki', array( + array( 'iw_prefix' => 'wikipedia', + 'iw_url' => 'http://en.wikipedia.org/wiki/$1', + 'iw_api' => '', + 'iw_wikiid' => '', + 'iw_local' => 0 ), + array( 'iw_prefix' => 'meatball', + 'iw_url' => 'http://www.usemod.com/cgi-bin/mb.pl?$1', + 'iw_api' => '', + 'iw_wikiid' => '', + 'iw_local' => 0 ), + array( 'iw_prefix' => 'zh', + 'iw_url' => 'http://zh.wikipedia.org/wiki/$1', + 'iw_api' => '', + 'iw_wikiid' => '', + 'iw_local' => 1 ), + array( 'iw_prefix' => 'es', + 'iw_url' => 'http://es.wikipedia.org/wiki/$1', + 'iw_api' => '', + 'iw_wikiid' => '', + 'iw_local' => 1 ), + array( 'iw_prefix' => 'fr', + 'iw_url' => 'http://fr.wikipedia.org/wiki/$1', + 'iw_api' => '', + 'iw_wikiid' => '', + 'iw_local' => 1 ), + array( 'iw_prefix' => 'ru', + 'iw_url' => 'http://ru.wikipedia.org/wiki/$1', + 'iw_api' => '', + 'iw_wikiid' => '', + 'iw_local' => 1 ), + ) ); + + + # Update certain things in site_stats + $db->insert( 'site_stats', array( 'ss_row_id' => 1, 'ss_images' => 2, 'ss_good_articles' => 1 ) ); + + # Reinitialise the LocalisationCache to match the database state + Language::getLocalisationCache()->unloadAll(); + + # Make a new message cache + global $wgMessageCache, $wgMemc; + $wgMessageCache = new MessageCache( $wgMemc, true, 3600 ); + + $this->uploadDir = $this->setupUploadDir(); + $user = User::createNew( 'WikiSysop' ); + $image = wfLocalFile( Title::makeTitle( NS_FILE, 'Foobar.jpg' ) ); + $image->recordUpload2( '', 'Upload of some lame file', 'Some lame file', array( + 'size' => 12345, + 'width' => 1941, + 'height' => 220, + 'bits' => 24, + 'media_type' => MEDIATYPE_BITMAP, + 'mime' => 'image/jpeg', + 'metadata' => serialize( array() ), + 'sha1' => wfBaseConvert( '', 16, 36, 31 ), + 'fileExists' => true + ), $db->timestamp( '20010115123500' ), $user ); + + # This image will be blacklisted in [[MediaWiki:Bad image list]] + $image = wfLocalFile( Title::makeTitle( NS_FILE, 'Bad.jpg' ) ); + $image->recordUpload2( '', 'zomgnotcensored', 'Borderline image', array( + 'size' => 12345, + 'width' => 320, + 'height' => 240, + 'bits' => 24, + 'media_type' => MEDIATYPE_BITMAP, + 'mime' => 'image/jpeg', + 'metadata' => serialize( array() ), + 'sha1' => wfBaseConvert( '', 16, 36, 31 ), + 'fileExists' => true + ), $db->timestamp( '20010115123500' ), $user ); + } + + /** + * Change the table prefix on all open DB connections/ + */ + protected function changePrefix( $prefix ) { + global $wgDBprefix; + wfGetLBFactory()->forEachLB( array( $this, 'changeLBPrefix' ), array( $prefix ) ); + $wgDBprefix = $prefix; + } + + public function changeLBPrefix( $lb, $prefix ) { + $lb->forEachOpenConnection( array( $this, 'changeDBPrefix' ), array( $prefix ) ); + } + + public function changeDBPrefix( $db, $prefix ) { + $db->tablePrefix( $prefix ); + } + + public function teardownDatabase() { + global $wgDBtype; + + if ( !$this->databaseSetupDone ) { + $this->teardownGlobals(); + return; + } + $this->teardownUploadDir( $this->uploadDir ); + + $this->changePrefix( $this->oldTablePrefix ); + $this->databaseSetupDone = false; + + if ( $this->useTemporaryTables ) { + # Don't need to do anything + $this->teardownGlobals(); + return; + } + + $tables = $this->listTables(); + $db = wfGetDB( DB_MASTER ); + + foreach ( $tables as $table ) { + $sql = $wgDBtype == 'oracle' ? "DROP TABLE pt_$table DROP CONSTRAINTS" : "DROP TABLE `parsertest_$table`"; + $db->query( $sql ); + } + + if ( $wgDBtype == 'oracle' ) + $db->query( 'BEGIN FILL_WIKI_INFO; END;' ); + + $this->teardownGlobals(); + } + + /** + * Create a dummy uploads directory which will contain a couple + * of files in order to pass existence tests. + * + * @return String: the directory + */ + private function setupUploadDir() { + global $IP; + + if ( $this->keepUploads ) { + $dir = wfTempDir() . '/mwParser-images'; + + if ( is_dir( $dir ) ) { + return $dir; + } + } else { + $dir = wfTempDir() . "/mwParser-" . mt_rand() . "-images"; + } + + // wfDebug( "Creating upload directory $dir\n" ); + if ( file_exists( $dir ) ) { + wfDebug( "Already exists!\n" ); + return $dir; + } + + wfMkdirParents( $dir . '/3/3a' ); + copy( "$IP/skins/monobook/headbg.jpg", "$dir/3/3a/Foobar.jpg" ); + wfMkdirParents( $dir . '/0/09' ); + copy( "$IP/skins/monobook/headbg.jpg", "$dir/0/09/Bad.jpg" ); + + return $dir; + } + + /** + * Restore default values and perform any necessary clean-up + * after each test runs. + */ + private function teardownGlobals() { + RepoGroup::destroySingleton(); + LinkCache::singleton()->clear(); + + foreach ( $this->savedGlobals as $var => $val ) { + $GLOBALS[$var] = $val; + } + } + + /** + * Remove the dummy uploads directory + */ + private function teardownUploadDir( $dir ) { + if ( $this->keepUploads ) { + return; + } + + // delete the files first, then the dirs. + self::deleteFiles( + array ( + "$dir/3/3a/Foobar.jpg", + "$dir/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg", + "$dir/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg", + "$dir/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg", + "$dir/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg", + + "$dir/0/09/Bad.jpg", + + "$dir/math/f/a/5/fa50b8b616463173474302ca3e63586b.png", + ) + ); + + self::deleteDirs( + array ( + "$dir/3/3a", + "$dir/3", + "$dir/thumb/6/65", + "$dir/thumb/6", + "$dir/thumb/3/3a/Foobar.jpg", + "$dir/thumb/3/3a", + "$dir/thumb/3", + + "$dir/0/09/", + "$dir/0/", + "$dir/thumb", + "$dir/math/f/a/5", + "$dir/math/f/a", + "$dir/math/f", + "$dir/math", + "$dir", + ) + ); + } + + /** + * Delete the specified files, if they exist. + * @param $files Array: full paths to files to delete. + */ + private static function deleteFiles( $files ) { + foreach ( $files as $file ) { + if ( file_exists( $file ) ) { + unlink( $file ); + } + } + } + + /** + * Delete the specified directories, if they exist. Must be empty. + * @param $dirs Array: full paths to directories to delete. + */ + private static function deleteDirs( $dirs ) { + foreach ( $dirs as $dir ) { + if ( is_dir( $dir ) ) { + rmdir( $dir ); + } + } + } + + /** + * "Running test $desc..." + */ + protected function showTesting( $desc ) { + print "Running test $desc... "; + } + + /** + * Print a happy success message. + * + * @param $desc String: the test name + * @return Boolean + */ + protected function showSuccess( $desc ) { + if ( $this->showProgress ) { + print $this->term->color( '1;32' ) . 'PASSED' . $this->term->reset() . "\n"; + } + + return true; + } + + /** + * Print a failure message and provide some explanatory output + * about what went wrong if so configured. + * + * @param $desc String: the test name + * @param $result String: expected HTML output + * @param $html String: actual HTML output + * @return Boolean + */ + protected function showFailure( $desc, $result, $html ) { + if ( $this->showFailure ) { + if ( !$this->showProgress ) { + # In quiet mode we didn't show the 'Testing' message before the + # test, in case it succeeded. Show it now: + $this->showTesting( $desc ); + } + + print $this->term->color( '31' ) . 'FAILED!' . $this->term->reset() . "\n"; + + if ( $this->showOutput ) { + print "--- Expected ---\n$result\n--- Actual ---\n$html\n"; + } + + if ( $this->showDiffs ) { + print $this->quickDiff( $result, $html ); + if ( !$this->wellFormed( $html ) ) { + print "XML error: $this->mXmlError\n"; + } + } + } + + return false; + } + + /** + * Run given strings through a diff and return the (colorized) output. + * Requires writable /tmp directory and a 'diff' command in the PATH. + * + * @param $input String + * @param $output String + * @param $inFileTail String: tailing for the input file name + * @param $outFileTail String: tailing for the output file name + * @return String + */ + protected function quickDiff( $input, $output, $inFileTail = 'expected', $outFileTail = 'actual' ) { + $prefix = wfTempDir() . "/mwParser-" . mt_rand(); + + $infile = "$prefix-$inFileTail"; + $this->dumpToFile( $input, $infile ); + + $outfile = "$prefix-$outFileTail"; + $this->dumpToFile( $output, $outfile ); + + $diff = `diff -au $infile $outfile`; + unlink( $infile ); + unlink( $outfile ); + + return $this->colorDiff( $diff ); + } + + /** + * Write the given string to a file, adding a final newline. + * + * @param $data String + * @param $filename String + */ + private function dumpToFile( $data, $filename ) { + $file = fopen( $filename, "wt" ); + fwrite( $file, $data . "\n" ); + fclose( $file ); + } + + /** + * Colorize unified diff output if set for ANSI color output. + * Subtractions are colored blue, additions red. + * + * @param $text String + * @return String + */ + protected function colorDiff( $text ) { + return preg_replace( + array( '/^(-.*)$/m', '/^(\+.*)$/m' ), + array( $this->term->color( 34 ) . '$1' . $this->term->reset(), + $this->term->color( 31 ) . '$1' . $this->term->reset() ), + $text ); + } + + /** + * Show "Reading tests from ..." + * + * @param $path String + */ + public function showRunFile( $path ) { + print $this->term->color( 1 ) . + "Reading tests from \"$path\"..." . + $this->term->reset() . + "\n"; + } + + /** + * Insert a temporary test article + * @param $name String: the title, including any prefix + * @param $text String: the article text + * @param $line Integer: the input line number, for reporting errors + */ + static public function addArticle( $name, $text, $line = 'unknown' ) { + global $wgCapitalLinks; + + $text = self::chomp($text); + + $oldCapitalLinks = $wgCapitalLinks; + $wgCapitalLinks = true; // We only need this from SetupGlobals() See r70917#c8637 + + $name = self::chomp( $name ); + $title = Title::newFromText( $name ); + + if ( is_null( $title ) ) { + wfDie( "invalid title ('$name' => '$title') at line $line\n" ); + } + + $aid = $title->getArticleID( Title::GAID_FOR_UPDATE ); + + if ( $aid != 0 ) { + debug_print_backtrace(); + wfDie( "duplicate article '$name' at line $line\n" ); + } + + $art = new Article( $title ); + $art->insertNewArticle( $text, '', false, false ); + + $wgCapitalLinks = $oldCapitalLinks; + } + + /** + * Steal a callback function from the primary parser, save it for + * application to our scary parser. If the hook is not installed, + * abort processing of this file. + * + * @param $name String + * @return Bool true if tag hook is present + */ + public function requireHook( $name ) { + global $wgParser; + + $wgParser->firstCallInit( ); // make sure hooks are loaded. + + if ( isset( $wgParser->mTagHooks[$name] ) ) { + $this->hooks[$name] = $wgParser->mTagHooks[$name]; + } else { + echo " This test suite requires the '$name' hook extension, skipping.\n"; + return false; + } + + return true; + } + + /** + * Steal a callback function from the primary parser, save it for + * application to our scary parser. If the hook is not installed, + * abort processing of this file. + * + * @param $name String + * @return Bool true if function hook is present + */ + public function requireFunctionHook( $name ) { + global $wgParser; + + $wgParser->firstCallInit( ); // make sure hooks are loaded. + + if ( isset( $wgParser->mFunctionHooks[$name] ) ) { + $this->functionHooks[$name] = $wgParser->mFunctionHooks[$name]; + } else { + echo " This test suite requires the '$name' function hook extension, skipping.\n"; + return false; + } + + return true; + } + + /* + * Run the "tidy" command on text if the $wgUseTidy + * global is true + * + * @param $text String: the text to tidy + * @return String + * @static + */ + private function tidy( $text ) { + global $wgUseTidy; + + if ( $wgUseTidy ) { + $text = MWTidy::tidy( $text ); + } + + return $text; + } + + private function wellFormed( $text ) { + $html = + Sanitizer::hackDocType() . + '' . + $text . + ''; + + $parser = xml_parser_create( "UTF-8" ); + + # case folding violates XML standard, turn it off + xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, false ); + + if ( !xml_parse( $parser, $html, true ) ) { + $err = xml_error_string( xml_get_error_code( $parser ) ); + $position = xml_get_current_byte_index( $parser ); + $fragment = $this->extractFragment( $html, $position ); + $this->mXmlError = "$err at byte $position:\n$fragment"; + xml_parser_free( $parser ); + + return false; + } + + xml_parser_free( $parser ); + + return true; + } + + private function extractFragment( $text, $position ) { + $start = max( 0, $position - 10 ); + $before = $position - $start; + $fragment = '...' . + $this->term->color( 34 ) . + substr( $text, $start, $before ) . + $this->term->color( 0 ) . + $this->term->color( 31 ) . + $this->term->color( 1 ) . + substr( $text, $position, 1 ) . + $this->term->color( 0 ) . + $this->term->color( 34 ) . + substr( $text, $position + 1, 9 ) . + $this->term->color( 0 ) . + '...'; + $display = str_replace( "\n", ' ', $fragment ); + $caret = ' ' . + str_repeat( ' ', $before ) . + $this->term->color( 31 ) . + '^' . + $this->term->color( 0 ); + + return "$display\n$caret"; + } + + static function getFakeTimestamp( &$parser, &$ts ) { + $ts = 123; + return true; + } +} diff --git a/maintenance/tests/parser/parserTests.txt b/maintenance/tests/parser/parserTests.txt new file mode 100644 index 00000000..b3fa560c --- /dev/null +++ b/maintenance/tests/parser/parserTests.txt @@ -0,0 +1,8315 @@ +# MediaWiki Parser test cases +# Some taken from http://meta.wikimedia.org/wiki/Parser_testing +# All (C) their respective authors and released under the GPL +# +# The syntax should be fairly self-explanatory. +# +# Currently supported test options: +# One of the following three: +# +# (default) generate HTML output +# pst apply pre-save transform +# msg apply message transform +# +# Plus any combination of these: +# +# cat add category links +# ill add inter-language links +# subpage enable subpages (disabled by default) +# noxml don't check for XML well formdness +# title=[[XXX]] run test using article title XXX +# language=XXX set content language to XXX for this test +# variant=XXX set the variant of language for this test (eg zh-tw) +# disabled do not run test +# showtitle make the first line the title +# comment run through Linker::formatComment() instead of main parser +# local format section links in edit comment text as local links +# +# For testing purposes, temporary articles can created: +# !!article / NAMESPACE:TITLE / !!text / ARTICLE TEXT / !!endarticle +# where '/' denotes a newline. + +# This is the standard article assumed to exist. +!! article +Main Page +!! text +blah blah +!! endarticle + +!!article +Template:Foo +!!text +FOO +!!endarticle + +!! article +Template:Blank +!! text +!! endarticle + +!! article +Template:! +!! text +| +!! endarticle + +!!article +MediaWiki:bad image list +!!text +* [[File:Bad.jpg]] except [[Nasty page]] +!!endarticle + +### +### Basic tests +### +!! test +Blank input +!! input +!! result +!! end + + +!! test +Simple paragraph +!! input +This is a simple paragraph. +!! result +

    This is a simple paragraph. +

    +!! end + +!! test +Simple list +!! input +* Item 1 +* Item 2 +!! result +
    • Item 1 +
    • Item 2 +
    + +!! end + +!! test +Italics and bold +!! input +* plain +* plain''italic''plain +* plain''italic''plain''italic''plain +* plain'''bold'''plain +* plain'''bold'''plain'''bold'''plain +* plain''italic''plain'''bold'''plain +* plain'''bold'''plain''italic''plain +* plain''italic'''bold-italic'''italic''plain +* plain'''bold''bold-italic''bold'''plain +* plain'''''bold-italic'''italic''plain +* plain'''''bold-italic''bold'''plain +* plain''italic'''bold-italic'''''plain +* plain'''bold''bold-italic'''''plain +* plain l'''italic''plain +* plain l''''bold''' plain +!! result +
    • plain +
    • plainitalicplain +
    • plainitalicplainitalicplain +
    • plainboldplain +
    • plainboldplainboldplain +
    • plainitalicplainboldplain +
    • plainboldplainitalicplain +
    • plainitalicbold-italicitalicplain +
    • plainboldbold-italicboldplain +
    • plainbold-italicitalicplain +
    • plainbold-italicboldplain +
    • plainitalicbold-italicplain +
    • plainboldbold-italicplain +
    • plain l'italicplain +
    • plain l'bold plain +
    + +!! end + +### +### test cases +### + +!! test + unordered list +!! input +* This is not an unordered list item. +!! result +

    * This is not an unordered list item. +

    +!! end + +!! test + spacing +!! input +Lorem ipsum dolor + +sed abit. + sed nullum. + +:and a colon + +!! result +

    Lorem ipsum dolor + +sed abit. + sed nullum. + +:and a colon + +

    +!! end + +!! test +nowiki 3 +!! input +:There is not nowiki. +:There is nowiki. + +#There is not nowiki. +#There is nowiki. + +*There is not nowiki. +*There is nowiki. +!! result +
    There is not nowiki. +
    There is nowiki. +
    +
    1. There is not nowiki. +
    2. There is nowiki. +
    +
    • There is not nowiki. +
    • There is nowiki. +
    + +!! end + + +### +### Comments +### +!! test +Comment test 1 +!! input + asdf + +!! result +
    asdf
    +
    + +!! end + +!! test +Comment test 2 +!! input +asdf + +jkl +!! result +

    asdf +jkl +

    +!! end + +!! test +Comment test 3 +!! input +asdf + + +jkl +!! result +

    asdf +jkl +

    +!! end + +!! test +Comment test 4 +!! input +asdfjkl +!! result +

    asdfjkl +

    +!! end + +!! test +Comment spacing +!! input +a + b +c +!! result +

    a +

    +
     b 
    +
    +

    c +

    +!! end + +!! test +Comment whitespace +!! input + +!! result + +!! end + +!! test +Comment semantics and delimiters +!! input + +!! result + +!! end + +!! test +Comment semantics and delimiters, redux +!! input + +!! result + +!! end + +!! test +Comment semantics and delimiters: directors cut +!! input +--> +!! result +

    --> +

    +!! end + +!! test +Comment semantics: nesting +!! input +--> +!! result +

    --> +

    +!! end + +!! test +Comment semantics: unclosed comment at end +!! input +oo}} +!! result +

    FOO +

    +!! end + +!! test +Comment on its own line post-expand +!! input +a +{{blank}} +b +!! result +

    a +

    b +

    +!! end + +### +### Preformatted text +### +!! test +Preformatted text +!! input + This is some + Preformatted text + With ''italic'' + And '''bold''' + And a [[Main Page|link]] +!! result +
    This is some
    +Preformatted text
    +With italic
    +And bold
    +And a link
    +
    +!! end + +!! test +
     with  inside (compatibility with 1.6 and earlier)
    +!! input
    +
    
    +
    +
    +
    +
    +!! result +
    +<b>
    +<cite>
    +<em>
    +
    + +!! end + +!! test +Regression with preformatted in
    +!! input +
    + Blah +
    +!! result +
    +
    Blah
    +
    +
    + +!! end + +# Expected output in the following test is not really expected (there should be +#
     in the output) -- it's only testing for well-formedness.
    +!! test
    +Bug 6200: Preformatted in 
    +!! input +
    + Blah +
    +!! result +
    + Blah +
    + +!! end + +!! test +
     with attributes (bug 3202)
    +!! input
    +
    Bluescreen of WikiDeath
    +!! result +
    Bluescreen of WikiDeath
    + +!! end + +!! test +
     with width attribute (bug 3202)
    +!! input
    +
    Narrow screen goodies
    +!! result +
    Narrow screen goodies
    + +!! end + +!! test +
     with forbidden attribute (bug 3202)
    +!! input
    +
    Narrow screen goodies
    +!! result +
    Narrow screen goodies
    + +!! end + +!! test +
     with forbidden attribute values (bug 3202)
    +!! input
    +
    Narrow screen goodies
    +!! result +
    Narrow screen goodies
    + +!! end + +!! test + inside
     (bug 13238)
    +!! input
    +
    +
    +
    +
    +
    +
    +
    Foo
    +!! result +
    +<nowiki>
    +
    +
    +
    +
    +
    <nowiki>Foo</nowiki>
    + +!! end + +!! test + and
     preference (first one wins)
    +!! input
    +
    +
    +
    + +
    + + +
    +
    +
    +
    +
    + +!! result +
    +<nowiki>
    +
    +

    </nowiki> +</pre> +

    +<pre> +<nowiki> +</pre> + +</pre> +

    +!! end + + +### +### Definition lists +### +!! test +Simple definition +!! input +; name : Definition +!! result +
    name 
    Definition +
    + +!! end + +!! test +Definition list for indentation only +!! input +: Indented text +!! result +
    Indented text +
    + +!! end + +!! test +Definition list with no space +!! input +;name:Definition +!! result +
    name
    Definition +
    + +!!end + +!! test +Definition list with URL link +!! input +; http://example.com/ : definition +!! result +
    http://example.com/ 
    definition +
    + +!! end + +!! test +Definition list with bracketed URL link +!! input +;[http://www.example.com/ Example]:Something about it +!! result +
    Example
    Something about it +
    + +!! end + +!! test +Definition list with wikilink containing colon +!! input +; [[Help:FAQ]]: The least-read page on Wikipedia +!! result +
    Help:FAQ
    The least-read page on Wikipedia +
    + +!! end + +# At Brion's and JeLuF's insistence... :) +!! test +Definition list with news link containing colon +!! input +; news:alt.wikipedia.rox: This isn't even a real newsgroup! +!! result +
    news:alt.wikipedia.rox
    This isn't even a real newsgroup! +
    + +!! end + +!! test +Malformed definition list with colon +!! input +; news:alt.wikipedia.rox -- don't crash or enter an infinite loop +!! result +
    news:alt.wikipedia.rox -- don't crash or enter an infinite loop +
    + +!! end + +!! test +Definition lists: colon in external link text +!! input +; [http://www.wikipedia2.org/ Wikipedia : The Next Generation]: OK, I made that up +!! result +
    Wikipedia : The Next Generation
    OK, I made that up +
    + +!! end + +!! test +Definition lists: colon in HTML attribute +!! input +;bold +!! result +
    bold +
    + +!! end + + +!! test +Definition lists: self-closed tag +!! input +;one
    two : two-line fun +!! result +
    one
    two 
    two-line fun +
    + +!! end + + +### +### External links +### +!! test +External links: non-bracketed +!! input +Non-bracketed: http://example.com +!! result +

    Non-bracketed: http://example.com +

    +!! end + +!! test +External links: numbered +!! input +Numbered: [http://example.com] +Numbered: [http://example.net] +Numbered: [http://example.com] +!! result +

    Numbered: [1] +Numbered: [2] +Numbered: [3] +

    +!!end + +!! test +External links: specified text +!! input +Specified text: [http://example.com link] +!! result +

    Specified text: link +

    +!!end + +!! test +External links: trail +!! input +Linktrails should not work for external links: [http://example.com link]s +!! result +

    Linktrails should not work for external links: links +

    +!! end + +!! test +External links: dollar sign in URL +!! input +http://example.com/1$2345 +!! result +

    http://example.com/1$2345 +

    +!! end + +!! test +External links: dollar sign in URL (named) +!! input +[http://example.com/1$2345] +!! result +

    [1] +

    +!!end + +!! test +External links: open square bracket forbidden in URL (bug 4377) +!! input +http://example.com/1[2345 +!! result +

    http://example.com/1[2345 +

    +!! end + +!! test +External links: open square bracket forbidden in URL (named) (bug 4377) +!! input +[http://example.com/1[2345] +!! result +

    [2345 +

    +!!end + +!! test +External links: nowiki in URL link text (bug 6230) +!!input +[http://example.com/ ''example site''] +!! result +

    ''example site'' +

    +!! end + +!! test +External links: newline forbidden in text (bug 6230 regression check) +!! input +[http://example.com/ first +second] +!! result +

    [http://example.com/ first +second] +

    +!!end + +!! test +External image +!! input +External image: http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png +!! result +

    External image: Ncwikicol.png +

    +!! end + +!! test +External image from https +!! input +External image from https: https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png +!! result +

    External image from https: Ncwikicol.png +

    +!! end + +!! test +Link to non-http image, no img tag +!! input +Link to non-http image, no img tag: ftp://example.com/test.jpg +!! result +

    Link to non-http image, no img tag: ftp://example.com/test.jpg +

    +!! end + +!! test +External links: terminating separator +!! input +Terminating separator: http://example.com/thing, +!! result +

    Terminating separator: http://example.com/thing, +

    +!! end + +!! test +External links: intervening separator +!! input +Intervening separator: http://example.com/1,2,3 +!! result +

    Intervening separator: http://example.com/1,2,3 +

    +!! end + +!! test +External links: old bug with URL in query +!! input +Old bug with URL in query: [http://example.com/thing?url=http://example.com link] +!! result +

    Old bug with URL in query: link +

    +!! end + +!! test +External links: old URL-in-URL bug, mixed protocols +!! input +And again with mixed protocols: [ftp://example.com?url=http://example.com link] +!! result +

    And again with mixed protocols: link +

    +!!end + +!! test +External links: URL in text +!! input +URL in text: [http://example.com http://example.com] +!! result +

    URL in text: http://example.com +

    +!! end + +!! test +External links: Clickable images +!! input +ja-style clickable images: [http://example.com http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png] +!! result +

    ja-style clickable images: Ncwikicol.png +

    +!!end + +!! test +External links: raw ampersand +!! input +Old & use: http://x&y +!! result +

    Old & use: http://x&y +

    +!! end + +!! test +External links: encoded ampersand +!! input +Old & use: http://x&y +!! result +

    Old & use: http://x&y +

    +!! end + +!! test +External links: encoded equals (bug 6102) +!! input +http://example.com/?foo=bar +!! result +

    http://example.com/?foo=bar +

    +!! end + +!! test +External links: [raw ampersand] +!! input +Old & use: [http://x&y] +!! result +

    Old & use: [1] +

    +!! end + +!! test +External links: [encoded ampersand] +!! input +Old & use: [http://x&y] +!! result +

    Old & use: [1] +

    +!! end + +!! test +External links: [encoded equals] (bug 6102) +!! input +[http://example.com/?foo=bar] +!! result +

    [1] +

    +!! end + +!! test +External links: [IDN ignored character reference in hostname; strip it right off] +!! input +[http://e‌xample.com/] +!! result +

    [1] +

    +!! end + +!! test +External links: IDN ignored character reference in hostname; strip it right off +!! input +http://e‌xample.com/ +!! result +

    http://example.com/ +

    +!! end + +!! test +External links: www.jpeg.org (bug 554) +!! input +http://www.jpeg.org +!!result +

    http://www.jpeg.org +

    +!! end + +!! test +External links: URL within URL (original bug 2) +!! input +[http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp] +!! result +

    [1] +

    +!! end + +!! test +BUG 361: URL inside bracketed URL +!! input +[http://www.example.com/foo http://www.example.com/bar] +!! result +

    http://www.example.com/bar +

    +!! end + +!! test +BUG 361: URL within URL, not bracketed +!! input +http://www.example.com/foo?=http://www.example.com/bar +!! result +

    http://www.example.com/foo?=http://www.example.com/bar +

    +!! end + +!! test +BUG 289: ">"-token in URL-tail +!! input +http://www.example.com/ +!! result +

    http://www.example.com/<hello> +

    +!!end + +!! test +BUG 289: literal ">"-token in URL-tail +!! input +http://www.example.com/html +!! result +

    http://www.example.com/html +

    +!!end + +!! test +BUG 289: ">"-token in bracketed URL +!! input +[http://www.example.com/ stuff] +!! result +

    <hello> stuff +

    +!!end + +!! test +BUG 289: literal ">"-token in bracketed URL +!! input +[http://www.example.com/html stuff] +!! result +

    html stuff +

    +!!end + +!! test +BUG 289: literal double quote at end of URL +!! input +http://www.example.com/"hello" +!! result +

    http://www.example.com/"hello" +

    +!!end + +!! test +BUG 289: literal double quote in bracketed URL +!! input +[http://www.example.com/"hello" stuff] +!! result +

    "hello" stuff +

    +!!end + +!! test +External links: multiple legal whitespace is fine, Magnus. Don't break it please. (bug 5081) +!! input +[http://www.example.com test] +!! result +

    test +

    +!! end + +!! test +External links: wiki links within external link (Bug 3695) +!! input +[http://example.com [[wikilink]] embedded in ext link] +!! result +

    wikilink embedded in ext link +

    +!! end + +!! test +BUG 787: Links with one slash after the url protocol are invalid +!! input +http:/example.com + +[http:/example.com title] +!! result +

    http:/example.com +

    [http:/example.com title] +

    +!! end + +!! test +Bug 2702: Mismatched , and tags are invalid +!! input +''[http://example.com text''] +[http://example.com '''text]''' +''Something [http://example.com in italic''] +''Something [http://example.com mixed''''', even bold]''' +'''''Now [http://example.com both'''''] +!! result +

    text +text +Something in italic +Something mixed, even bold +Now both +

    +!! end + + +!! test +Bug 4781: %26 in URL +!! input +http://www.example.com/?title=AT%26T +!! result +

    http://www.example.com/?title=AT%26T +

    +!! end + +!! test +Bug 4781, 5267: %26 in URL +!! input +http://www.example.com/?title=100%25_Bran +!! result +

    http://www.example.com/?title=100%25_Bran +

    +!! end + +!! test +Bug 4781, 5267: %28, %29 in URL +!! input +http://www.example.com/?title=Ben-Hur_%281959_film%29 +!! result +

    http://www.example.com/?title=Ben-Hur_%281959_film%29 +

    +!! end + + +!! test +Bug 4781: %26 in autonumber URL +!! input +[http://www.example.com/?title=AT%26T] +!! result +

    [1] +

    +!! end + +!! test +Bug 4781, 5267: %26 in autonumber URL +!! input +[http://www.example.com/?title=100%25_Bran] +!! result +

    [1] +

    +!! end + +!! test +Bug 4781, 5267: %28, %29 in autonumber URL +!! input +[http://www.example.com/?title=Ben-Hur_%281959_film%29] +!! result +

    [1] +

    +!! end + + +!! test +Bug 4781: %26 in bracketed URL +!! input +[http://www.example.com/?title=AT%26T link] +!! result +

    link +

    +!! end + +!! test +Bug 4781, 5267: %26 in bracketed URL +!! input +[http://www.example.com/?title=100%25_Bran link] +!! result +

    link +

    +!! end + +!! test +Bug 4781, 5267: %28, %29 in bracketed URL +!! input +[http://www.example.com/?title=Ben-Hur_%281959_film%29 link] +!! result +

    link +

    +!! end + +!! test +External link containing double-single-quotes in text '' (bug 4598 sanity check) +!! input +Some [http://example.com/ pretty ''italics'' and stuff]! +!! result +

    Some pretty italics and stuff! +

    +!! end + +!! test +External link containing double-single-quotes in text embedded in italics (bug 4598 sanity check) +!! input +''Some [http://example.com/ pretty ''italics'' and stuff]!'' +!! result +

    Some pretty italics and stuff! +

    +!! end + +!! test +External link containing double-single-quotes with no space separating the url from text in italics +!! input +[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm''La muerte de Casagemas'' (1901) en el sitio de [[Museo Picasso (París)|Museo Picasso]].] +!! result +

    La muerte de Casagemas (1901) en el sitio de Museo Picasso. +

    +!! end + +!! test +URL-encoding in URL functions (single parameter) +!! input +{{localurl:Some page|amp=&}} +!! result +

    /index.php?title=Some_page&amp=& +

    +!! end + +!! test +URL-encoding in URL functions (multiple parameters) +!! input +{{localurl:Some page|q=?&=&}} +!! result +

    /index.php?title=Some_page&q=?&amp=& +

    +!! end + +### +### Quotes +### + +!! test +Quotes +!! input +Normal text. '''Bold text.''' Normal text. ''Italic text.'' + +Normal text. '''''Bold italic text.''''' Normal text. +!!result +

    Normal text. Bold text. Normal text. Italic text. +

    Normal text. Bold italic text. Normal text. +

    +!! end + + +!! test +Unclosed and unmatched quotes +!! input +'''''Bold italic text '''with bold deactivated''' in between.''''' + +'''''Bold italic text ''with italic deactivated'' in between.''''' + +'''Bold text.. + +..spanning two paragraphs (should not work).''' + +'''Bold tag left open + +''Italic tag left open + +Normal text. + + +'''This year''''s election ''should'' beat '''last year''''s. + +''Tom'''s car is bigger than ''Susan'''s. +!! result +

    Bold italic text with bold deactivated in between. +

    Bold italic text with italic deactivated in between. +

    Bold text.. +

    ..spanning two paragraphs (should not work). +

    Bold tag left open +

    Italic tag left open +

    Normal text. +

    This year's election should beat last year's. +

    Toms car is bigger than Susans. +

    +!! end + +### +### Tables +### +### some content taken from http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide:_Using_tables +### + +# This should not produce
    as
    +# is the bare minimun required by the spec, see: +# http://www.w3.org/TR/xhtml-modularization/dtd_module_defs.html#a_module_Basic_Tables +!! test +A table with no data. +!! input +{||} +!! result +!! end + +# A table with nothing but a caption is invalid XHTML, we might want to render +# this as

    caption

    +!! test +A table with nothing but a caption +!! input +{| +|+ caption +|} +!! result + +
    caption +
    + +!! end + +!! test +Simple table +!! input +{| +| 1 || 2 +|- +| 3 || 4 +|} +!! result + + + + + + +
    1 2 +
    3 4 +
    + +!! end + +!! test +Multiplication table +!! input +{| border="1" cellpadding="2" +|+Multiplication table +|- +! × !! 1 !! 2 !! 3 +|- +! 1 +| 1 || 2 || 3 +|- +! 2 +| 2 || 4 || 6 +|- +! 3 +| 3 || 6 || 9 +|- +! 4 +| 4 || 8 || 12 +|- +! 5 +| 5 || 10 || 15 +|} +!! result + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Multiplication table +
    × 1 2 3 +
    1 + 1 2 3 +
    2 + 2 4 6 +
    3 + 3 6 9 +
    4 + 4 8 12 +
    5 + 5 10 15 +
    + +!! end + +!! test +Table rowspan +!! input +{| align=right border=1 +| Cell 1, row 1 +|rowspan=2| Cell 2, row 1 (and 2) +| Cell 3, row 1 +|- +| Cell 1, row 2 +| Cell 3, row 2 +|} +!! result + + + + + + + +
    Cell 1, row 1 + Cell 2, row 1 (and 2) + Cell 3, row 1 +
    Cell 1, row 2 + Cell 3, row 2 +
    + +!! end + +!! test +Nested table +!! input +{| border=1 +| α +| +{| bgcolor=#ABCDEF border=2 +|nested +|- +|table +|} +|the original table again +|} +!! result + + + + +
    α + + + + + +
    nested +
    table +
    +
    the original table again +
    + +!! end + +!! test +Invalid attributes in table cell (bug 1830) +!! input +{| +|Cell:|broken +|} +!! result + + +
    broken +
    + +!! end + + +!! test +Table security: embedded pipes (http://lists.wikimedia.org/mailman/htdig/wikitech-l/2006-April/022293.html) +!! input +{| +| |[ftp://|x||]" onmouseover="alert(document.cookie)">test +!! result + + + + + +
    [ftp://%7Cx]" onmouseover="alert(document.cookie)">test +
    + +!! end + + +### +### Internal links +### +!! test +Plain link, capitalized +!! input +[[Main Page]] +!! result +

    Main Page +

    +!! end + +!! test +Plain link, uncapitalized +!! input +[[main Page]] +!! result +

    main Page +

    +!! end + +!! test +Piped link +!! input +[[Main Page|The Main Page]] +!! result +

    The Main Page +

    +!! end + +!! test +Broken link +!! input +[[Zigzagzogzagzig]] +!! result +

    Zigzagzogzagzig +

    +!! end + +!! test +Broken link with fragment +!! input +[[Zigzagzogzagzig#zug]] +!! result +

    Zigzagzogzagzig#zug +

    +!! end + +!! test +Special page link with fragment +!! input +[[Special:Version#anchor]] +!! result +

    Special:Version#anchor +

    +!! end + +!! test +Nonexistent special page link with fragment +!! input +[[Special:ThisNameWillHopefullyNeverBeUsed#anchor]] +!! result +

    Special:ThisNameWillHopefullyNeverBeUsed#anchor +

    +!! end + +!! test +Link with prefix +!! input +xxx[[main Page]], xxx[[Main Page]], Xxx[[main Page]] XXX[[main Page]], XXX[[Main Page]] +!! result +

    xxxmain Page, xxxMain Page, Xxxmain Page XXXmain Page, XXXMain Page +

    +!! end + +!! test +Link with suffix +!! input +[[Main Page]]xxx, [[Main Page]]XXX, [[Main Page]]!!! +!! result +

    Main Pagexxx, Main PageXXX, Main Page!!! +

    +!! end + +!! test +Link with 3 brackets +!! input +[[[main page]]] +!! result +

    [[[main page]]] +

    +!! end + +!! test +Piped link with 3 brackets +!! input +[[[main page|the main page]]] +!! result +

    [[[main page|the main page]]] +

    +!! end + +!! test +Link with multiple pipes +!! input +[[Main Page|The|Main|Page]] +!! result +

    The|Main|Page +

    +!! end + +!! test +Link to namespaces +!! input +[[Talk:Parser testing]], [[Meta:Disclaimers]] +!! result +

    Talk:Parser testing, Meta:Disclaimers +

    +!! end + +!! test +Piped link to namespace +!! input +[[Meta:Disclaimers|The disclaimers]] +!! result +

    The disclaimers +

    +!! end + +!! test +Link containing } +!! input +[[Usually caused by a typo (oops}]] +!! result +

    [[Usually caused by a typo (oops}]] +

    +!! end + +!! test +Link containing % (not as a hex sequence) +!! input +[[7% Solution]] +!! result +

    7% Solution +

    +!! end + +!! test +Link containing % as a single hex sequence interpreted to char +!! input +[[7%25 Solution]] +!! result +

    7% Solution +

    +!!end + +!! test +Link containing % as a double hex sequence interpreted to hex sequence +!! input +[[7%2525 Solution]] +!! result +

    [[7%2525 Solution]] +

    +!!end + +!! test +Link containing "#<" and "#>" % as a hex sequences- these are valid section anchors +Example for such a section: == < == +!! input +[[%23%3c]][[%23%3e]] +!! result +

    #<#> +

    +!! end + +!! test +Link containing "<#" and ">#" as a hex sequences +!! input +[[%3c%23]][[%3e%23]] +!! result +

    [[%3c%23]][[%3e%23]] +

    +!! end + +!! test +Link containing double-single-quotes '' (bug 4598) +!! input +[[Lista d''e paise d''o munno]] +!! result +

    Lista d''e paise d''o munno +

    +!! end + +!! test +Link containing double-single-quotes '' in text (bug 4598 sanity check) +!! input +Some [[Link|pretty ''italics'' and stuff]]! +!! result +

    Some pretty italics and stuff! +

    +!! end + +!! test +Link containing double-single-quotes '' in text embedded in italics (bug 4598 sanity check) +!! input +''Some [[Link|pretty ''italics'' and stuff]]! +!! result +

    Some pretty italics and stuff! +

    +!! end + +!! test +Link with double quotes in title part (literal) and alternate part (interpreted) +!! input +[[File:Denys Savchenko ''Pentecoste''.jpg]] + +[[''Pentecoste'']] + +[[''Pentecoste''|Pentecoste]] + +[[''Pentecoste''|''Pentecoste'']] +!! result +

    File:Denys Savchenko Pentecoste.jpg +

    ''Pentecoste'' +

    Pentecoste +

    Pentecoste +

    +!! end + +!! test +Plain link to URL +!! input +[[http://www.example.com]] +!! result +

    [[1]] +

    +!! end + +# I'm fairly sure the expected result here is wrong. +# We want these to be URL links, not pseudo-pages with URLs for titles.... +# However the current output is also pretty screwy. +# +# ---- +# I'm changing it to match the current output--it arguably makes more +# sense in the light of the test above. Old expected result was: +#

    Piped link to URL: an example URL +#

    +# But I think this test is bordering on "garbage in, garbage out" anyway. +# -- wtm +!! test +Piped link to URL +!! input +Piped link to URL: [[http://www.example.com|an example URL]] +!! result +

    Piped link to URL: [example URL] +

    +!! end + +!! test +BUG 2: [[page|http://url/]] should link to page, not http://url/ +!! input +[[Main Page|http://url/]] +!! result +

    http://url/ +

    +!! end + +!! test +BUG 337: Escaped self-links should be bold +!! options +title=[[Bug462]] +!! input +[[Bug462]] [[Bug462]] +!! result +

    Bug462 Bug462 +

    +!! end + +!! test +Self-link to section should not be bold +!! options +title=[[Main Page]] +!! input +[[Main Page#section]] +!! result +

    Main Page#section +

    +!! end + +!! article +00 +!! text +This is 00. +!! endarticle + +!!test +Self-link to numeric title +!!options +title=[[0]] +!!input +[[0]] +!!result +

    0 +

    +!!end + +!!test +Link to numeric-equivalent title +!!options +title=[[0]] +!!input +[[00]] +!!result +

    00 +

    +!!end + +!! test + inside a link +!! input +[[Main Page]] [[Main Page|the main page [it's not very good]]] +!! result +

    [[Main Page]] the main page [it's not very good] +

    +!! end + +!! test +Non-breaking spaces in title +!! input +[[  Main   Page  ]] +!! result +

      Main   Page   +

    +!!end + + +### +### Interwiki links (see maintenance/interwiki.sql) +### + +!! test +Inline interwiki link +!! input +[[MeatBall:SoftSecurity]] +!! result +

    MeatBall:SoftSecurity +

    +!! end + +!! test +Inline interwiki link with empty title (bug 2372) +!! input +[[MeatBall:]] +!! result +

    MeatBall: +

    +!! end + +!! test +Interwiki link encoding conversion (bug 1636) +!! input +*[[Wikipedia:ro:Olteniţa]] +*[[Wikipedia:ro:Olteniţa]] +!! result + + +!! end + +!! test +Interwiki link with fragment (bug 2130) +!! input +[[MeatBall:SoftSecurity#foo]] +!! result +

    MeatBall:SoftSecurity#foo +

    +!! end + +!! test +Interlanguage link +!! input +Blah blah blah +[[zh:Chinese]] +!!result +

    Blah blah blah +

    +!! end + +!! test +Double interlanguage link +!! input +Blah blah blah +[[es:Spanish]] +[[zh:Chinese]] +!!result +

    Blah blah blah +

    +!! end + +!! test +Interlanguage link, with prefix links +!! options +language=ln +!! input +Blah blah blah +[[zh:Chinese]] +!!result +

    Blah blah blah +

    +!! end + +!! test +Double interlanguage link, with prefix links (bug 8897) +!! options +language=ln +!! input +Blah blah blah +[[es:Spanish]] +[[zh:Chinese]] +!!result +

    Blah blah blah +

    +!! end + + +## +## XHTML tidiness +### + +!! test +
    to
    +!! input +1
    2
    3 +!! result +

    1
    2
    3 +

    +!! end + +!! test +Incorrecly removing closing slashes from correctly formed XHTML +!! input +
    +!! result +


    +

    +!! end + +!! test +Failing to transform badly formed HTML into correct XHTML +!! input +
    +
    +
    +!! result +


    +
    +
    +

    +!!end + +!! test +Horizontal ruler (should it add that extra space?) +!! input +
    +
    +foo
    bar +!! result +
    +
    +foo
    bar + +!! end + +### +### Block-level elements +### +!! test +Common list +!! input +*Common list +* item 2 +*item 3 +!! result +
    • Common list +
    • item 2 +
    • item 3 +
    + +!! end + +!! test +Numbered list +!! input +#Numbered list +#item 2 +# item 3 +!! result +
    1. Numbered list +
    2. item 2 +
    3. item 3 +
    + +!! end + +!! test +Mixed list +!! input +*Mixed list +*# with numbers +** and bullets +*# and numbers +*bullets again +**bullet level 2 +***bullet level 3 +***#Number on level 4 +**bullet level 2 +**#Number on level 3 +**#Number on level 3 +*#number level 2 +*Level 1 +!! result +
    • Mixed list +
      1. with numbers +
      +
      • and bullets +
      +
      1. and numbers +
      +
    • bullets again +
      • bullet level 2 +
        • bullet level 3 +
          1. Number on level 4 +
          +
        +
      • bullet level 2 +
        1. Number on level 3 +
        2. Number on level 3 +
        +
      +
      1. number level 2 +
      +
    • Level 1 +
    + +!! end + +!! test +List items are not parsed correctly following a
     block (bug 785)
    +!! input
    +* 
    foo
    +*
    bar
    +* zar +!! result +
    • foo
      +
    • bar
      +
    • zar +
    + +!! end + +### +### Magic Words +### + +!! test +Magic Word: {{CURRENTDAY}} +!! input +{{CURRENTDAY}} +!! result +

    1 +

    +!! end + +!! test +Magic Word: {{CURRENTDAY2}} +!! input +{{CURRENTDAY2}} +!! result +

    01 +

    +!! end + +!! test +Magic Word: {{CURRENTDAYNAME}} +!! input +{{CURRENTDAYNAME}} +!! result +

    Thursday +

    +!! end + +!! test +Magic Word: {{CURRENTDOW}} +!! input +{{CURRENTDOW}} +!! result +

    4 +

    +!! end + +!! test +Magic Word: {{CURRENTMONTH}} +!! input +{{CURRENTMONTH}} +!! result +

    01 +

    +!! end + +!! test +Magic Word: {{CURRENTMONTHABBREV}} +!! input +{{CURRENTMONTHABBREV}} +!! result +

    Jan +

    +!! end + +!! test +Magic Word: {{CURRENTMONTHNAME}} +!! input +{{CURRENTMONTHNAME}} +!! result +

    January +

    +!! end + +!! test +Magic Word: {{CURRENTMONTHNAMEGEN}} +!! input +{{CURRENTMONTHNAMEGEN}} +!! result +

    January +

    +!! end + +!! test +Magic Word: {{CURRENTTIME}} +!! input +{{CURRENTTIME}} +!! result +

    00:02 +

    +!! end + +!! test +Magic Word: {{CURRENTWEEK}} (@bug 4594) +!! input +{{CURRENTWEEK}} +!! result +

    1 +

    +!! end + +!! test +Magic Word: {{CURRENTYEAR}} +!! input +{{CURRENTYEAR}} +!! result +

    1970 +

    +!! end + +!! test +Magic Word: {{FULLPAGENAME}} +!! options +title=[[User:Ævar Arnfjörð Bjarmason]] +!! input +{{FULLPAGENAME}} +!! result +

    User:Ævar Arnfjörð Bjarmason +

    +!! end + +!! test +Magic Word: {{FULLPAGENAMEE}} +!! options +title=[[User:Ævar Arnfjörð Bjarmason]] +!! input +{{FULLPAGENAMEE}} +!! result +

    User:%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason +

    +!! end + +!! test +Magic Word: {{NAMESPACE}} +!! options +title=[[User:Ævar Arnfjörð Bjarmason]] +!! input +{{NAMESPACE}} +!! result +

    User +

    +!! end + +!! test +Magic Word: {{NAMESPACEE}} +!! options +title=[[User:Ævar Arnfjörð Bjarmason]] +!! input +{{NAMESPACEE}} +!! result +

    User +

    +!! end + +!! test +Magic Word: {{NUMBEROFFILES}} +!! input +{{NUMBEROFFILES}} +!! result +

    2 +

    +!! end + +!! test +Magic Word: {{PAGENAME}} +!! options +title=[[User:Ævar Arnfjörð Bjarmason]] +!! input +{{PAGENAME}} +!! result +

    Ævar Arnfjörð Bjarmason +

    +!! end + +!! test +Magic Word: {{PAGENAMEE}} +!! options +title=[[User:Ævar Arnfjörð Bjarmason]] +!! input +{{PAGENAMEE}} +!! result +

    %C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason +

    +!! end + +!! test +Magic Word: {{REVISIONID}} +!! input +{{REVISIONID}} +!! result +

    1337 +

    +!! end + +!! test +Magic Word: {{SCRIPTPATH}} +!! input +{{SCRIPTPATH}} +!! result +

    / +

    +!! end + +!! test +Magic Word: {{SERVER}} +!! input +{{SERVER}} +!! result +

    http://Britney-Spears +

    +!! end + +!! test +Magic Word: {{SERVERNAME}} +!! input +{{SERVERNAME}} +!! result +

    Britney-Spears +

    +!! end + +!! test +Magic Word: {{SITENAME}} +!! input +{{SITENAME}} +!! result +

    MediaWiki +

    +!! end + +!! test +Namespace 1 {{ns:1}} +!! input +{{ns:1}} +!! result +

    Talk +

    +!! end + +!! test +Namespace 1 {{ns:01}} +!! input +{{ns:01}} +!! result +

    Talk +

    +!! end + +!! test +Namespace 0 {{ns:0}} (bug 4783) +!! input +{{ns:0}} +!! result + +!! end + +!! test +Namespace 0 {{ns:00}} (bug 4783) +!! input +{{ns:00}} +!! result + +!! end + +!! test +Namespace -1 {{ns:-1}} +!! input +{{ns:-1}} +!! result +

    Special +

    +!! end + +!! test +Namespace User {{ns:User}} +!! input +{{ns:User}} +!! result +

    User +

    +!! end + +!! test +Namespace User talk {{ns:User_talk}} +!! input +{{ns:User_talk}} +!! result +

    User talk +

    +!! end + +!! test +Namespace User talk {{ns:uSeR tAlK}} +!! input +{{ns:uSeR tAlK}} +!! result +

    User talk +

    +!! end + +!! test +Namespace File {{ns:File}} +!! input +{{ns:File}} +!! result +

    File +

    +!! end + +!! test +Namespace File {{ns:Image}} +!! input +{{ns:Image}} +!! result +

    File +

    +!! end + +!! test +Namespace (lang=de) Benutzer {{ns:User}} +!! options +language=de +!! input +{{ns:User}} +!! result +

    Benutzer +

    +!! end + +!! test +Namespace (lang=de) Benutzer Diskussion {{ns:3}} +!! options +language=de +!! input +{{ns:3}} +!! result +

    Benutzer Diskussion +

    +!! end + + +!! test +Urlencode +!! input +{{urlencode:hi world?!}} +{{urlencode:hi world?!|WIKI}} +{{urlencode:hi world?!|PATH}} +{{urlencode:hi world?!|QUERY}} +!! result +

    hi+world%3F%21 +hi_world%3F! +hi%20world%3F%21 +hi+world%3F%21 +

    +!! end + +### +### Magic links +### +!! test +Magic links: internal link to RFC (bug 479) +!! input +[[RFC 123]] +!! result +

    RFC 123 +

    +!! end + +!! test +Magic links: RFC (bug 479) +!! input +RFC 822 +!! result +

    RFC 822 +

    +!! end + +!! test +Magic links: ISBN (bug 1937) +!! input +ISBN 0-306-40615-2 +!! result +

    ISBN 0-306-40615-2 +

    +!! end + +!! test +Magic links: PMID incorrectly converts space to underscore +!! input +PMID 1234 +!! result +

    PMID 1234 +

    +!! end + +### +### Templates +#### + +!! test +Nonexistent template +!! input +{{thistemplatedoesnotexist}} +!! result +

    Template:Thistemplatedoesnotexist +

    +!! end + +!! article +Template:test +!! text +This is a test template +!! endarticle + +!! test +Simple template +!! input +{{test}} +!! result +

    This is a test template +

    +!! end + +!! test +Template with explicit namespace +!! input +{{Template:test}} +!! result +

    This is a test template +

    +!! end + + +!! article +Template:paramtest +!! text +This is a test template with parameter {{{param}}} +!! endarticle + +!! test +Template parameter +!! input +{{paramtest|param=foo}} +!! result +

    This is a test template with parameter foo +

    +!! end + +!! article +Template:paramtestnum +!! text +[[{{{1}}}|{{{2}}}]] +!! endarticle + +!! test +Template unnamed parameter +!! input +{{paramtestnum|Main Page|the main page}} +!! result +

    the main page +

    +!! end + +!! article +Template:templatesimple +!! text +(test) +!! endarticle + +!! article +Template:templateredirect +!! text +#redirect [[Template:templatesimple]] +!! endarticle + +!! article +Template:templateasargtestnum +!! text +{{{{{1}}}}} +!! endarticle + +!! article +Template:templateasargtest +!! text +{{template{{{templ}}}}} +!! endarticle + +!! article +Template:templateasargtest2 +!! text +{{{{{templ}}}}} +!! endarticle + +!! test +Template with template name as unnamed argument +!! input +{{templateasargtestnum|templatesimple}} +!! result +

    (test) +

    +!! end + +!! test +Template with template name as argument +!! input +{{templateasargtest|templ=simple}} +!! result +

    (test) +

    +!! end + +!! test +Template with template name as argument (2) +!! input +{{templateasargtest2|templ=templatesimple}} +!! result +

    (test) +

    +!! end + +!! article +Template:templateasargtestdefault +!! text +{{{{{templ|templatesimple}}}}} +!! endarticle + +!! article +Template:templa +!! text +'''templ''' +!! endarticle + +!! test +Template with default value +!! input +{{templateasargtestdefault}} +!! result +

    (test) +

    +!! end + +!! test +Template with default value (value set) +!! input +{{templateasargtestdefault|templ=templa}} +!! result +

    templ +

    +!! end + +!! test +Template redirect +!! input +{{templateredirect}} +!! result +

    (test) +

    +!! end + +!! test +Template with argument in separate line +!! input +{{ templateasargtest | + templ = simple }} +!! result +

    (test) +

    +!! end + +!! test +Template with complex template as argument +!! input +{{paramtest| + param ={{ templateasargtest | + templ = simple }}}} +!! result +

    This is a test template with parameter (test) +

    +!! end + +!! test +Template with thumb image (with link in description) +!! input +{{paramtest| + param =[[Image:noimage.png|thumb|[[no link|link]] [[no link|caption]]]]}} +!! result +This is a test template with parameter + +!! end + +!! article +Template:complextemplate +!! text +{{{1}}} {{paramtest| + param ={{{param}}}}} +!! endarticle + +!! test +Template with complex arguments +!! input +{{complextemplate| + param ={{ templateasargtest | + templ = simple }}|[[Template:complextemplate|link]]}} +!! result +

    link This is a test template with parameter (test) +

    +!! end + +!! test +BUG 553: link with two variables in a piped link +!! input +{| +|[[{{{1}}}|{{{2}}}]] +|} +!! result + + +
    [[{{{1}}}|{{{2}}}]] +
    + +!! end + +!! test +Magic variable as template parameter +!! input +{{paramtest|param={{SITENAME}}}} +!! result +

    This is a test template with parameter MediaWiki +

    +!! end + +!! article +Template:linktest +!! text +[[{{{param}}}|link]] +!! endarticle + +!! test +Template parameter as link source +!! input +{{linktest|param=Main Page}} +!! result +

    link +

    +!! end + + +!!article +Template:paramtest2 +!! text +including another template, {{paramtest|param={{{arg}}}}} +!! endarticle + +!! test +Template passing argument to another template +!! input +{{paramtest2|arg='hmm'}} +!! result +

    including another template, This is a test template with parameter 'hmm' +

    +!! end + +!! article +Template:Linktest2 +!! text +Main Page +!! endarticle + +!! test +Template as link source +!! input +[[{{linktest2}}]] +!! result +

    Main Page +

    +!! end + + +!! article +Template:loop1 +!! text +{{loop2}} +!! endarticle + +!! article +Template:loop2 +!! text +{{loop1}} +!! endarticle + +!! test +Template infinite loop +!! input +{{loop1}} +!! result +

    Template loop detected: Template:Loop1 +

    +!! end + +!! test +Template from main namespace +!! input +{{:Main Page}} +!! result +

    blah blah +

    +!! end + +!! article +Template:table +!! text +{| +| 1 || 2 +|- +| 3 || 4 +|} +!! endarticle + +!! test +BUG 529: Template with table, not included at beginning of line +!! input +foo {{table}} +!! result +

    foo +

    + + + + + + +
    1 2 +
    3 4 +
    + +!! end + +!! test +BUG 523: Template shouldn't eat newline (or add an extra one before table) +!! input +foo +{{table}} +!! result +

    foo +

    + + + + + + +
    1 2 +
    3 4 +
    + +!! end + +!! test +BUG 41: Template parameters shown as broken links +!! input +{{{parameter}}} +!! result +

    {{{parameter}}} +

    +!! end + + +!! article +Template:MSGNW test +!! text +''None'' of '''this''' should be +* interpreted + but rather passed unmodified +{{test}} +!! endarticle + +# hmm, fix this or just deprecate msgnw and document its behavior? +!! test +msgnw keyword +!! options +disabled +!! input +{{msgnw:MSGNW test}} +!! result +

    ''None'' of '''this''' should be +* interpreted + but rather passed unmodified +{{test}} +

    +!! end + +!! test +int keyword +!! input +{{int:youhavenewmessages|lots of money|not!}} +!! result +

    You have lots of money (not!). +

    +!! end + +!! article +Template:Includes +!! text +Foozarbar +!! endarticle + +!! test + and being included +!! input +{{Includes}} +!! result +

    Foobar +

    +!! end + +!! article +Template:Includes2 +!! text +Foobar +!! endarticle + +!! test + being included +!! input +{{Includes2}} +!! result +

    Foo +

    +!! end + + +!! article +Template:Includes3 +!! text +Foobarzar +!! endarticle + +!! test + and being included +!! input +{{Includes3}} +!! result +

    Foo +

    +!! end + +!! test + and on a page +!! input +Foozarbar +!! result +

    Foozar +

    +!! end + +!! test + on a page +!! input +Foobar +!! result +

    Foobar +

    +!! end + +!! article +Template:Includeonly section +!! text + +==Includeonly section== + +==Section T-1== +!!endarticle + +!! test +Bug 6563: Edit link generation for section shown by +!! input +{{includeonly section}} +!! result +

    [edit] Includeonly section

    +

    [edit] Section T-1

    + +!! end + +# Uses same input as the contents of [[Template:Includeonly section]] +!! test +Bug 6563: Section extraction for section shown by +!! options +section=T-2 +!! input + +==Includeonly section== + +==Section T-2== +!! result +==Section T-2== +!! end + +!! test +Bug 6563: Edit link generation for section suppressed by +!! input + +==Includeonly section== + +==Section 1== +!! result +

    [edit] Section 1

    + +!! end + +!! test +Bug 6563: Section extraction for section suppressed by +!! options +section=1 +!! input + +==Includeonly section== + +==Section 1== +!! result +==Section 1== +!! end + +### +### Pre-save transform tests +### +!! test +pre-save transform: subst: +!! options +PST +!! input +{{subst:test}} +!! result +This is a test template +!! end + +!! test +pre-save transform: normal template +!! options +PST +!! input +{{test}} +!! result +{{test}} +!! end + +!! test +pre-save transform: nonexistent template +!! options +PST +!! input +{{thistemplatedoesnotexist}} +!! result +{{thistemplatedoesnotexist}} +!! end + + +!! test +pre-save transform: subst magic variables +!! options +PST +!! input +{{subst:SITENAME}} +!! result +MediaWiki +!! end + +# This is bug 89, which I fixed. -- wtm +!! test +pre-save transform: subst: templates with parameters +!! options +pst +!! input +{{subst:paramtest|param="something else"}} +!! result +This is a test template with parameter "something else" +!! end + +!! article +Template:nowikitest +!! text +'''not wiki''' +!! endarticle + +!! test +pre-save transform: nowiki in subst (bug 1188) +!! options +pst +!! input +{{subst:nowikitest}} +!! result +'''not wiki''' +!! end + + +!! article +Template:commenttest +!! text +This template has in it. +!! endarticle + +!! test +pre-save transform: comment in subst (bug 1936) +!! options +pst +!! input +{{subst:commenttest}} +!! result +This template has in it. +!! end + +!! test +pre-save transform: unclosed tag +!! options +pst noxml +!! input +'''not wiki''' +!! result +'''not wiki''' +!! end + +!! test +pre-save transform: mixed tag case +!! options +pst noxml +!! input +'''not wiki''' +!! result +'''not wiki''' +!! end + +!! test +pre-save transform: unclosed comment in +!! options +pst noxml +!! input +wikinowiki +!!result + +!!end + +!! test +pre-save transform: comment containing extension +!! options +pst +!! input + +!!result + +!!end + +!! test +pre-save transform: comment containing nowiki +!! options +pst +!! input + +!!result + +!!end + +!! test +pre-save transform: comment containing math +!! options +pst +!! input + +!!result + +!!end + +!! test +pre-save transform: in subst (bug 3298) +!! options +pst +!! input +{{subst:Includes}} +!! result +Foobar +!! end + +!! test +pre-save transform: in subst (bug 3298) +!! options +pst +!! input +{{subst:Includes2}} +!! result +Foo +!! end + +!! article +Template:SubstTest +!!text +{{subst:Includes}} +!! endarticle + +!! article +Template:SafeSubstTest +!! text +{{safesubst:Includes}} +!! endarticle + +!! test +bug 22297: safesubst: works during PST +!! options +pst +!! input +{{subst:SafeSubstTest}}{{safesubst:SubstTest}} +!! result +FoobarFoobar +!! end + +!! test +bug 22297: safesubst: works during normal parse +!! input +{{SafeSubstTest}} +!! result +

    Foobar +

    +!! end + +!! test: +subst: does not work during normal parse +!! input +{{SubstTest}} +!! result +

    {{subst:Includes}} +

    +!! end + +!! test +pre-save transform: context links ("pipe trick") +!! options +pst +!! input +[[Article (context)|]] +[[Bar:Article|]] +[[:Bar:Article|]] +[[Bar:Article (context)|]] +[[:Bar:Article (context)|]] +[[|Article]] +[[|Article (context)]] +[[Bar:X (Y) Z|]] +[[:Bar:X (Y) Z|]] +!! result +[[Article (context)|Article]] +[[Bar:Article|Article]] +[[:Bar:Article|Article]] +[[Bar:Article (context)|Article]] +[[:Bar:Article (context)|Article]] +[[Article]] +[[Article (context)]] +[[Bar:X (Y) Z|X (Y) Z]] +[[:Bar:X (Y) Z|X (Y) Z]] +!! end + +!! test +pre-save transform: context links ("pipe trick") with interwiki prefix +!! options +pst +!! input +[[interwiki:Article|]] +[[:interwiki:Article|]] +[[interwiki:Bar:Article|]] +[[:interwiki:Bar:Article|]] +!! result +[[interwiki:Article|Article]] +[[:interwiki:Article|Article]] +[[interwiki:Bar:Article|Bar:Article]] +[[:interwiki:Bar:Article|Bar:Article]] +!! end + +!! test +pre-save transform: context links ("pipe trick") with parens in title +!! options +pst title=[[Somearticle (context)]] +!! input +[[|Article]] +!! result +[[Article (context)|Article]] +!! end + +!! test +pre-save transform: context links ("pipe trick") with comma in title +!! options +pst title=[[Someplace, Somewhere]] +!! input +[[|Otherplace]] +[[Otherplace, Elsewhere|]] +[[Otherplace, Elsewhere, Anywhere|]] +!! result +[[Otherplace, Somewhere|Otherplace]] +[[Otherplace, Elsewhere|Otherplace]] +[[Otherplace, Elsewhere, Anywhere|Otherplace]] +!! end + +!! test +pre-save transform: context links ("pipe trick") with parens and comma +!! options +pst title=[[Someplace (IGNORED), Somewhere]] +!! input +[[|Otherplace]] +[[Otherplace (place), Elsewhere|]] +!! result +[[Otherplace, Somewhere|Otherplace]] +[[Otherplace (place), Elsewhere|Otherplace]] +!! end + +!! test +pre-save transform: context links ("pipe trick") with comma and parens +!! options +pst title=[[Who, me? (context)]] +!! input +[[|Yes, you.]] +[[Me, Myself, and I (1937 song)|]] +!! result +[[Yes, you. (context)|Yes, you.]] +[[Me, Myself, and I (1937 song)|Me, Myself, and I]] +!! end + +!! test +pre-save transform: context links ("pipe trick") with namespace +!! options +pst title=[[Ns:Somearticle]] +!! input +[[|Article]] +!! result +[[Ns:Article|Article]] +!! end + +!! test +pre-save transform: context links ("pipe trick") with namespace and parens +!! options +pst title=[[Ns:Somearticle (context)]] +!! input +[[|Article]] +!! result +[[Ns:Article (context)|Article]] +!! end + +!! test +pre-save transform: context links ("pipe trick") with namespace and comma +!! options +pst title=[[Ns:Somearticle, Context, Whatever]] +!! input +[[|Article]] +!! result +[[Ns:Article, Context, Whatever|Article]] +!! end + +!! test +pre-save transform: context links ("pipe trick") with namespace, comma and parens +!! options +pst title=[[Ns:Somearticle, Context (context)]] +!! input +[[|Article]] +!! result +[[Ns:Article (context)|Article]] +!! end + +!! test +pre-save transform: context links ("pipe trick") with namespace, parens and comma +!! options +pst title=[[Ns:Somearticle (IGNORED), Context]] +!! input +[[|Article]] +!! result +[[Ns:Article, Context|Article]] +!! end + + +### +### Message transform tests +### +!! test +message transform: magic variables +!! options +msg +!! input +{{SITENAME}} +!! result +MediaWiki +!! end + +!! test +message transform: should not transform wiki markup +!! options +msg +!! input +''test'' +!! result +''test'' +!! end + +!! test +message transform: in transcluded template (bug 4926) +!! options +msg +!! input +{{Includes}} +!! result +Foobar +!! end + +!! test +message transform: in transcluded template (bug 4926) +!! options +msg +!! input +{{Includes2}} +!! result +Foo +!! end + +!! test +{{#special:}} page name, known +!! options +msg +!! input +{{#special:Recentchanges}} +!! result +Special:RecentChanges +!! end + +!! test +{{#special:}} page name with subpage, known +!! options +msg +!! input +{{#special:Recentchanges/param}} +!! result +Special:RecentChanges/param +!! end + +!! test +{{#special:}} page name, unknown +!! options +msg +!! input +{{#special:foobarnonexistent}} +!! result +No such special page +!! end + +### +### Images +### +!! test +Simple image +!! input +[[Image:foobar.jpg]] +!! result +

    Foobar.jpg +

    +!! end + +!! test +Right-aligned image +!! input +[[Image:foobar.jpg|right]] +!! result +
    Foobar.jpg
    + +!! end + +!! test +Simple image (using File: namespace, now canonical) +!! input +[[File:foobar.jpg]] +!! result +

    Foobar.jpg +

    +!! end + +!! test +Image with caption +!! input +[[Image:foobar.jpg|right|Caption text]] +!! result +
    Caption text
    + +!! end + +!! test +Image with link parameter, wiki target +!! input +[[Image:foobar.jpg|link=Target page]] +!! result +

    Foobar.jpg +

    +!! end + +!! test +Image with link parameter, URL target +!! input +[[Image:foobar.jpg|link=http://example.com/]] +!! result +

    Foobar.jpg +

    +!! end + +!! test +Image with empty link parameter +!! input +[[Image:foobar.jpg|link=]] +!! result +

    Foobar.jpg +

    +!! end + +!! test +Image with link parameter (wiki target) and unnamed parameter +!! input +[[Image:foobar.jpg|link=Target page|Title]] +!! result +

    Title +

    +!! end + +!! test +Image with link parameter (URL target) and unnamed parameter +!! input +[[Image:foobar.jpg|link=http://example.com/|Title]] +!! result +

    Title +

    +!! end + +!! test +Thumbnail image with link parameter +!! input +[[Image:foobar.jpg|thumb|link=http://example.com/|Title]] +!! result +
    Title
    + +!! end + +!! test +Image with frame and link +!! input +[[Image:Foobar.jpg|frame|left|This is a test image [[Main Page]]]] +!! result +
    This is a test image Main Page
    + +!! end + +!! test +Image with frame and link and explicit alt +!! input +[[Image:Foobar.jpg|frame|left|This is a test image [[Main Page]]|alt=Altitude]] +!! result +
    Altitude
    This is a test image Main Page
    + +!! end + +!! test +Image with wiki markup in implicit alt +!! input +[[Image:Foobar.jpg|testing '''bold''' in alt]] +!! result +

    testing bold in alt +

    +!! end + +!! test +Image with wiki markup in explicit alt +!! input +[[Image:Foobar.jpg|alt=testing '''bold''' in alt]] +!! result +

    testing bold in alt +

    +!! end + +!! test +Link to image page- image page normally doesn't exists, hence edit link +Add test with existing image page +#

    Image:test +!! input +[[:Image:test]] +!! result +

    Image:test +

    +!! end + +!! test +bug 18784 Link to non-existent image page with caption should use caption as link text +!! input +[[:Image:test|caption]] +!! result +

    caption +

    +!! end + +!! test +Frameless image caption with a free URL +!! input +[[Image:foobar.jpg|http://example.com]] +!! result +

    http://example.com +

    +!! end + +!! test +Thumbnail image caption with a free URL +!! input +[[Image:foobar.jpg|thumb|http://example.com]] +!! result + + +!! end + +!! test +Thumbnail image caption with a free URL and explicit alt +!! input +[[Image:foobar.jpg|thumb|http://example.com|alt=Alteration]] +!! result + + +!! end + +!! test +BUG 1887: A ISBN with a thumbnail +!! input +[[Image:foobar.jpg|thumb|ISBN 1235467890]] +!! result + + +!! end + +!! test +BUG 1887: A RFC with a thumbnail +!! input +[[Image:foobar.jpg|thumb|This is RFC 12354]] +!! result +
    This is RFC 12354
    + +!! end + +!! test +BUG 1887: A mailto link with a thumbnail +!! input +[[Image:foobar.jpg|thumb|Please mailto:nobody@example.com]] +!! result + + +!! end + +!! test +BUG 1887: A with a thumbnail- we don't render math in the parsertests by default, +so math is not stripped and turns up as escaped <math> tags. +!! input +[[Image:foobar.jpg|thumb|2+2]] +!! result +
    <math>2+2</math>
    + +!! end + +!! test +BUG 1887, part 2: A with a thumbnail- math enabled +!! options +math +!! input +[[Image:foobar.jpg|thumb|2+2]] +!! result +
    2 + 2
    + +!! end + +# Pending resolution to bug 368 +!! test +BUG 648: Frameless image caption with a link +!! input +[[Image:foobar.jpg|text with a [[link]] in it]] +!! result +

    text with a link in it +

    +!! end + +!! test +BUG 648: Frameless image caption with a link (suffix) +!! input +[[Image:foobar.jpg|text with a [[link]]foo in it]] +!! result +

    text with a linkfoo in it +

    +!! end + +!! test +BUG 648: Frameless image caption with an interwiki link +!! input +[[Image:foobar.jpg|text with a [[MeatBall:Link]] in it]] +!! result +

    text with a MeatBall:Link in it +

    +!! end + +!! test +BUG 648: Frameless image caption with a piped interwiki link +!! input +[[Image:foobar.jpg|text with a [[MeatBall:Link|link]] in it]] +!! result +

    text with a link in it +

    +!! end + +!! test +Escape HTML special chars in image alt text +!! input +[[Image:foobar.jpg|& < > "]] +!! result +

    & < > " +

    +!! end + +!! test +BUG 499: Alt text should have Ӓ, not &1234; +!! input +[[Image:foobar.jpg|♀]] +!! result +

    ♀ +

    +!! end + +!! test +Broken image caption with link +!! input +[[Image:Foobar.jpg|thumb|This is a broken caption. But [[Main Page|this]] is just an ordinary link. +!! result +

    [[Image:Foobar.jpg|thumb|This is a broken caption. But this is just an ordinary link. +

    +!! end + +!! test +Image caption containing another image +!! input +[[Image:Foobar.jpg|thumb|This is a caption with another [[Image:icon.png|image]] inside it!]] +!! result +
    This is a caption with another image inside it!
    + +!! end + +!! test +Image caption containing a newline +!! input +[[Image:Foobar.jpg|This +*is some text]] +!! result +

    This *is some text +

    +!!end + + +!! test +Bug 3090: External links other than http: in image captions +!! input +[[Image:Foobar.jpg|thumb|200px|This caption has [irc://example.net irc] and [https://example.com Secure] ext links in it.]] +!! result +
    This caption has irc and Secure ext links in it.
    + +!! end + +!! article +File:Barfoo.jpg +!! text +#REDIRECT [[File:Barfoo.jpg]] +!! endarticle + +!! test +Redirected image +!! input +[[Image:Barfoo.jpg]] +!! result +

    File:Barfoo.jpg +

    +!! end + +!! test +Missing image with uploads disabled +!! options +wgEnableUploads=0 +!! input +[[Image:Foobaz.jpg]] +!! result +

    File:Foobaz.jpg +

    +!! end + + +### +### Subpages +### +!! article +Subpage test/subpage +!! text +foo +!! endarticle + +!! test +Subpage link +!! options +subpage title=[[Subpage test]] +!! input +[[/subpage]] +!! result +

    /subpage +

    +!! end + +!! test +Subpage noslash link +!! options +subpage title=[[Subpage test]] +!!input +[[/subpage/]] +!! result +

    subpage +

    +!! end + +!! test +Disabled subpages +!! input +[[/subpage]] +!! result +

    /subpage +

    +!! end + +!! test +BUG 561: {{/Subpage}} +!! options +subpage title=[[Page]] +!! input +{{/Subpage}} +!! result +

    Page/Subpage +

    +!! end + +### +### Categories +### +!! article +Category:MediaWiki User's Guide +!! text +blah +!! endarticle + +!! test +Link to category +!! input +[[:Category:MediaWiki User's Guide]] +!! result +

    Category:MediaWiki User's Guide +

    +!! end + +!! test +Simple category +!! options +cat +!! input +[[Category:MediaWiki User's Guide]] +!! result +MediaWiki User's Guide +!! end + +!! test +PAGESINCATEGORY invalid title fatal (r33546 fix) +!! input +{{PAGESINCATEGORY:}} +!! result +

    0 +

    +!! end + +### +### Inter-language links +### +!! test +Inter-language links +!! options +ill +!! input +[[es:Alimento]] +[[fr:Nourriture]] +[[zh:食品]] +!! result +es:Alimento fr:Nourriture zh:食品 +!! end + +### +### Sections +### +!! test +Basic section headings +!! input +== Headline 1 == +Some text + +==Headline 2== +More +===Smaller headline=== +Blah blah +!! result +

    [edit] Headline 1

    +

    Some text +

    +

    [edit] Headline 2

    +

    More +

    +

    [edit] Smaller headline

    +

    Blah blah +

    +!! end + +!! test +Section headings with TOC +!! input +== Headline 1 == +=== Subheadline 1 === +===== Skipping a level ===== +====== Skipping a level ====== + +== Headline 2 == +Some text +===Another headline=== +!! result +

    Contents

    + +
    +

    [edit] Headline 1

    +

    [edit] Subheadline 1

    +
    [edit] Skipping a level
    +
    [edit] Skipping a level
    +

    [edit] Headline 2

    +

    Some text +

    +

    [edit] Another headline

    + +!! end + +# perl -e 'print "="x$_," Level $_ heading","="x$_,"\n" for 1..10' +!! test +Handling of sections up to level 6 and beyond +!! input += Level 1 Heading= +== Level 2 Heading== +=== Level 3 Heading=== +==== Level 4 Heading==== +===== Level 5 Heading===== +====== Level 6 Heading====== +======= Level 7 Heading======= +======== Level 8 Heading======== +========= Level 9 Heading========= +========== Level 10 Heading========== +!! result +

    Contents

    + +
    +

    [edit] Level 1 Heading

    +

    [edit] Level 2 Heading

    +

    [edit] Level 3 Heading

    +

    [edit] Level 4 Heading

    +
    [edit] Level 5 Heading
    +
    [edit] Level 6 Heading
    +
    [edit] = Level 7 Heading=
    +
    [edit] == Level 8 Heading==
    +
    [edit] === Level 9 Heading===
    +
    [edit] ==== Level 10 Heading====
    + +!! end + +!! test +TOC regression (bug 9764) +!! input +== title 1 == +=== title 1.1 === +==== title 1.1.1 ==== +=== title 1.2 === +== title 2 == +=== title 2.1 === +!! result +

    Contents

    + +
    +

    [edit] title 1

    +

    [edit] title 1.1

    +

    [edit] title 1.1.1

    +

    [edit] title 1.2

    +

    [edit] title 2

    +

    [edit] title 2.1

    + +!! end + +!! test +TOC with wgMaxTocLevel=3 (bug 6204) +!! options +wgMaxTocLevel=3 +!! input +== title 1 == +=== title 1.1 === +==== title 1.1.1 ==== +=== title 1.2 === +== title 2 == +=== title 2.1 === +!! result +

    Contents

    + +
    +

    [edit] title 1

    +

    [edit] title 1.1

    +

    [edit] title 1.1.1

    +

    [edit] title 1.2

    +

    [edit] title 2

    +

    [edit] title 2.1

    + +!! end + +!! test +TOC with wgMaxTocLevel=3 and two level four headings (bug 6204) +!! options +wgMaxTocLevel=3 +!! input +==Section 1== +===Section 1.1=== +====Section 1.1.1==== +====Section 1.1.1.1==== +==Section 2== +!! result +

    Contents

    + +
    +

    [edit] Section 1

    +

    [edit] Section 1.1

    +

    [edit] Section 1.1.1

    +

    [edit] Section 1.1.1.1

    +

    [edit] Section 2

    + +!! end + + +!! test +Resolving duplicate section names +!! input +== Foo bar == +== Foo bar == +!! result +

    [edit] Foo bar

    +

    [edit] Foo bar

    + +!! end + +!! test +Resolving duplicate section names with differing case (bug 10721) +!! input +== Foo bar == +== Foo Bar == +!! result +

    [edit] Foo bar

    +

    [edit] Foo Bar

    + +!! end + +!! article +Template:sections +!! text +===Section 1=== +==Section 2== +!! endarticle + +!! test +Template with sections, __NOTOC__ +!! input +__NOTOC__ +==Section 0== +{{sections}} +==Section 4== +!! result +

    [edit] Section 0

    +

    [edit] Section 1

    +

    [edit] Section 2

    +

    [edit] Section 4

    + +!! end + +!! test +__NOEDITSECTION__ keyword +!! input +__NOEDITSECTION__ +==Section 1== +==Section 2== +!! result +

    Section 1

    +

    Section 2

    + +!! end + +!! test +Link inside a section heading +!! input +==Section with a [[Main Page|link]] in it== +!! result +

    [edit] Section with a link in it

    + +!! end + +!! test +TOC regression (bug 12077) +!! input +__TOC__ +== title 1 == +=== title 1.1 === +== title 2 == +!! result +

    Contents

    + +
    +

    [edit] title 1

    +

    [edit] title 1.1

    +

    [edit] title 2

    + +!! end + +!! test +BUG 1219 URL next to image (good) +!! input +http://example.com [[Image:foobar.jpg]] +!! result +

    http://example.com Foobar.jpg +

    +!!end + +!! test +Short headings with trailing space should match behaviour of Parser::doHeadings (bug 19910) +!! input +=== +The line above must have a trailing space! +=== +But just in case it doesn't... +!! result +

    [edit] =

    +

    The line above must have a trailing space! +

    +

    [edit] =

    +

    But just in case it doesn't... +

    +!! end + +!! test +Header with special characters (bug 25462) +!! input +The tooltips shall not show entities to the user (ie. be double escaped) + +== text > text == +section 1 + +== text < text == +section 2 + +== text & text == +section 3 + +== text ' text == +section 4 + +== text " text == +section 5 +!! result +

    The tooltips shall not show entities to the user (ie. be double escaped) +

    +

    Contents

    + +
    +

    [edit] text > text

    +

    section 1 +

    +

    [edit] text < text

    +

    section 2 +

    +

    [edit] text & text

    +

    section 3 +

    +

    [edit] text ' text

    +

    section 4 +

    +

    [edit] text " text

    +

    section 5 +

    +!! end + +!! test +BUG 1219 URL next to image (broken) +!! input +http://example.com[[Image:foobar.jpg]] +!! result +

    http://example.comFoobar.jpg +

    +!!end + +!! test +Bug 1186 news: in the middle of text +!! input +http://en.wikinews.org/wiki/Wikinews:Workplace +!! result +

    http://en.wikinews.org/wiki/Wikinews:Workplace +

    +!!end + + +!! test +Namespaced link must have a title +!! input +[[Project:]] +!! result +

    [[Project:]] +

    +!!end + +!! test +Namespaced link must have a title (bad fragment version) +!! input +[[Project:#fragment]] +!! result +

    [[Project:#fragment]] +

    +!!end + + +!! test +div with no attributes +!! input +
    HTML rocks
    +!! result +
    HTML rocks
    + +!! end + +!! test +div with double-quoted attribute +!! input +
    HTML rocks
    +!! result +
    HTML rocks
    + +!! end + +!! test +div with single-quoted attribute +!! input +
    HTML rocks
    +!! result +
    HTML rocks
    + +!! end + +!! test +div with unquoted attribute +!! input +
    HTML rocks
    +!! result +
    HTML rocks
    + +!! end + +!! test +div with illegal double attributes +!! input +
    HTML rocks
    +!! result +
    HTML rocks
    + +!!end + +!! test +HTML multiple attributes correction +!! input +

    Awesome!

    +!! result +

    Awesome!

    + +!!end + +!! test +Table multiple attributes correction +!! input +{| +!+ class="error" class="awesome"| status +|} +!! result + + +
    status +
    + +!!end + +!! test +DIV IN UPPERCASE +!! input +
    HTML ROCKS
    +!! result +
    HTML ROCKS
    + +!!end + + +!! test +text with amp in the middle of nowhere +!! input +Remember AT&T? +!!result +

    Remember AT&T? +

    +!! end + +!! test +text with character entity: eacute +!! input +I always thought é was a cute letter. +!! result +

    I always thought é was a cute letter. +

    +!! end + +!! test +text with undefined character entity: xacute +!! input +I always thought &xacute; was a cute letter. +!! result +

    I always thought &xacute; was a cute letter. +

    +!! end + + +### +### Media links +### + +!! test +Media link +!! input +[[Media:Foobar.jpg]] +!! result +

    Media:Foobar.jpg +

    +!! end + +!! test +Media link with text +!! input +[[Media:Foobar.jpg|A neat file to look at]] +!! result +

    A neat file to look at +

    +!! end + +# FIXME: this is still bad HTML tag nesting +!! test +Media link with nasty text +fixme: doBlockLevels won't wrap this in a paragraph because it contains a div +!! input +[[Media:Foobar.jpg|Safe Link
    " onmouseover="alert(document.cookie)" onfoo="
    ]] +!! result +Safe Link<div style="display:none">" onmouseover="alert(document.cookie)" onfoo="</div> + +!! end + +!! test +Media link to nonexistent file (bug 1702) +!! input +[[Media:No such.jpg]] +!! result +

    Media:No such.jpg +

    +!! end + +!! test +Image link to nonexistent file (bug 1850 - good) +!! input +[[Image:No such.jpg]] +!! result +

    File:No such.jpg +

    +!! end + +!! test +:Image link to nonexistent file (bug 1850 - bad) +!! input +[[:Image:No such.jpg]] +!! result +

    Image:No such.jpg +

    +!! end + + + +!! test +Character reference normalization in link text (bug 1938) +!! input +[[Main Page|this&that]] +!! result +

    this&that +

    +!!end + +!! article +אַ +!! text +Test for unicode normalization + +The page's name is U+05d0 U+05b7, with non-canonical form U+FB2E +!! endarticle + +!! test +(bug 19451) Links should refer to the normalized form. +!! input +[[אַ]] +[[אַ]] +[[אַ]] +[[אַ]] +[[אַ]] +!! result +

    +אַ +אַ +אַ +אַ +

    +!! end + +!! test +Empty attribute crash test (bug 2067) +!! input +foo +!! result +

    foo +

    +!! end + +!! test +Empty attribute crash test single-quotes (bug 2067) +!! input +foo +!! result +

    foo +

    +!! end + +!! test +Attribute test: equals, then nothing +!! input +foo +!! result +

    foo +

    +!! end + +!! test +Attribute test: unquoted value +!! input +foo +!! result +

    foo +

    +!! end + +!! test +Attribute test: unquoted but illegal value (hash) +!! input +foo +!! result +

    foo +

    +!! end + +!! test +Attribute test: no value +!! input +foo +!! result +

    foo +

    +!! end + +!! test +Bug 2095: link with three closing brackets +!! input +[[Main Page]]] +!! result +

    Main Page] +

    +!! end + +!! test +Bug 2095: link with pipe and three closing brackets +!! input +[[Main Page|link]]] +!! result +

    link] +

    +!! end + +!! test +Bug 2095: link with pipe and three closing brackets, version 2 +!! input +[[Main Page|[http://example.com/]]] +!! result +

    [http://example.com/] +

    +!! end + + +### +### Safety +### + +!! article +Template:Dangerous attribute +!! text +" onmouseover="alert(document.cookie) +!! endarticle + +!! article +Template:Dangerous style attribute +!! text +border-size: expression(alert(document.cookie)) +!! endarticle + +!! article +Template:Div style +!! text +
    Magic div
    +!! endarticle + +!! test +Bug 2304: HTML attribute safety (safe template; regression bug 2309) +!! input +
    +!! result +
    + +!! end + +!! test +Bug 2304: HTML attribute safety (dangerous template; 2309) +!! input +
    +!! result +
    + +!! end + +!! test +Bug 2304: HTML attribute safety (dangerous style template; 2309) +!! input +
    +!! result +
    + +!! end + +!! test +Bug 2304: HTML attribute safety (safe parameter; 2309) +!! input +{{div style|width: 200px}} +!! result +
    Magic div
    + +!! end + +!! test +Bug 2304: HTML attribute safety (unsafe parameter; 2309) +!! input +{{div style|width: expression(alert(document.cookie))}} +!! result +
    Magic div
    + +!! end + +!! test +Bug 2304: HTML attribute safety (unsafe breakout parameter; 2309) +!! input +{{div style|">}} +!! result +
    <script>alert(document.cookie)</script>">Magic div
    + +!! end + +!! test +Bug 2304: HTML attribute safety (unsafe breakout parameter 2; 2309) +!! input +{{div style|" >}} +!! result +
    <script>alert(document.cookie)</script>">Magic div
    + +!! end + +!! test +Bug 2304: HTML attribute safety (link) +!! input +
    +!! result +
    + +!! end + +!! test +Bug 2304: HTML attribute safety (italics) +!! input +
    +!! result +
    + +!! end + +!! test +Bug 2304: HTML attribute safety (bold) +!! input +
    +!! result +
    + +!! end + + +!! test +Bug 2304: HTML attribute safety (ISBN) +!! input +
    +!! result +
    + +!! end + +!! test +Bug 2304: HTML attribute safety (RFC) +!! input +
    +!! result +
    + +!! end + +!! test +Bug 2304: HTML attribute safety (PMID) +!! input +
    +!! result +
    + +!! end + +!! test +Bug 2304: HTML attribute safety (web link) +!! input +
    +!! result +
    + +!! end + +!! test +Bug 2304: HTML attribute safety (named web link) +!! input +
    +!! result +
    + +!! end + +!! test +Bug 3244: HTML attribute safety (extension; safe) +!! input +
    +!! result +
    + +!! end + +!! test +Bug 3244: HTML attribute safety (extension; unsafe) +!! input +
    +!! result +
    + +!! end + +!! test +Math section safety when disabled +!! input + +!! result +

    <math><script>alert(document.cookies);</script></math> +

    +!! end + +# More MSIE fun discovered by Tom Gilder + +!! test +MSIE CSS safety test: spurious slash +!! input +
    evil
    +!! result +
    evil
    + +!! end + +!! test +MSIE CSS safety test: hex code +!! input +
    evil
    +!! result +
    evil
    + +!! end + +!! test +MSIE CSS safety test: comment in url +!! input +
    evil
    +!! result +
    evil
    + +!! end + +!! test +MSIE CSS safety test: comment in expression +!! input +
    evil4
    +!! result +
    evil4
    + +!! end + + +!! test +Table attribute legitimate extension +!! input +{| +!+ style="color:blue"| status +|} +!! result + + +
    status +
    + +!!end + +!! test +Table attribute safety +!! input +{| +!+ style="border-width:expression(0+alert(document.cookie))"| status +|} +!! result + + +
    status +
    + +!! end + +!! test +CSS line continuation 1 +!! input +
    +!! result +
    + +!! end + +!! test +CSS line continuation 2 +!! input +
    +!! result +
    + +!! end + +!! article +Template:Identity +!! text +{{{1}}} +!! endarticle + +!! test +Expansion of multi-line templates in attribute values (bug 6255) +!! input +
    -
    +!! result +
    -
    + +!! end + + +!! test +Expansion of multi-line templates in attribute values (bug 6255 sanity check) +!! input +
    -
    +!! result +
    -
    + +!! end + +!! test +Expansion of multi-line templates in attribute values (bug 6255 sanity check 2) +!! input +
    -
    +!! result +
    -
    + +!! end + +### +### Parser hooks (see maintenance/parserTestsParserHook.php for the extension) +### +!! test +Parser hook: empty input +!! input + +!! result +
    +string(0) ""
    +array(0) {
    +}
    +
    + +!! end + +!! test +Parser hook: empty input using terminated empty elements +!! input + +!! result +
    +NULL
    +array(0) {
    +}
    +
    + +!! end + +!! test +Parser hook: empty input using terminated empty elements (space before) +!! input + +!! result +
    +NULL
    +array(0) {
    +}
    +
    + +!! end + +!! test +Parser hook: basic input +!! input +input +!! result +
    +string(5) "input"
    +array(0) {
    +}
    +
    + +!! end + + +!! test +Parser hook: case insensitive +!! input +input +!! result +
    +string(5) "input"
    +array(0) {
    +}
    +
    + +!! end + + +!! test +Parser hook: case insensitive, redux +!! input +input +!! result +
    +string(5) "input"
    +array(0) {
    +}
    +
    + +!! end + +!! test +Parser hook: nested tags +!! options +noxml +!! input + +!! result +
    +string(5) ""
    +array(0) {
    +}
    +
    </tag> + +!! end + +!! test +Parser hook: basic arguments +!! input + +!! result +
    +string(0) ""
    +array(4) {
    +  ["width"]=>
    +  string(3) "200"
    +  ["height"]=>
    +  string(3) "100"
    +  ["depth"]=>
    +  string(2) "50"
    +  ["square"]=>
    +  string(6) "square"
    +}
    +
    + +!! end + +!! test +Parser hook: argument containing a forward slash (bug 5344) +!! input + +!! result +
    +string(0) ""
    +array(1) {
    +  ["filename"]=>
    +  string(8) "/tmp/bla"
    +}
    +
    + +!! end + +!! test +Parser hook: empty input using terminated empty elements (bug 2374) +!! input +text +!! result +
    +NULL
    +array(1) {
    +  ["foo"]=>
    +  string(3) "bar"
    +}
    +
    text + +!! end + +#
    should be output literally since there is no matching tag that begins it +!! test +Parser hook: basic arguments using terminated empty elements (bug 2374) +!! input + +other stuff + +!! result +
    +NULL
    +array(4) {
    +  ["width"]=>
    +  string(3) "200"
    +  ["height"]=>
    +  string(3) "100"
    +  ["depth"]=>
    +  string(2) "50"
    +  ["square"]=>
    +  string(6) "square"
    +}
    +
    +

    other stuff +</tag> +

    +!! end + +### +### (see maintenance/parserTestsStaticParserHook.php for the extension) +### + +!! test +Parser hook: static parser hook not inside a comment +!! input +hello, world + +!! result +

    hello, world +

    +!! end + + +!! test +Parser hook: static parser hook inside a comment +!! input + + +!! result +


    +

    +!! end + +# Nested template calls; this case was broken by Parser.php rev 1.506, +# since reverted. + +!! article +Template:One-parameter +!! text +(My parameter is: {{{1}}}) +!! endarticle + +!! article +Template:Map-one-parameter +!! text +{{{{{1}}}|{{{2}}}}} +!! endarticle + +!! test +Nested template calls +!! input +{{Map-one-parameter|One-parameter|param}} +!! result +

    (My parameter is: param) +

    +!! end + + +### +### Sanitizer +### +!! test +Sanitizer: Closing of open tags +!! input +
    +!! result +
    + +!! end + +!! test +Sanitizer: Closing of open but not closed tags +!! input +foo +!! result +

    foo +

    +!! end + +!! test +Sanitizer: Closing of closed but not open tags +!! input +
    +!! result +

    </s> +

    +!! end + +!! test +Sanitizer: Closing of closed but not open table tags +!! input +Table not started +!! result +

    Table not started</td></tr></table> +

    +!! end + +!! test +Sanitizer: Escaping of spaces, multibyte characters, colons & other stuff in id="" +!! input +byte[[#æ: v|backlink]] +!! result +

    bytebacklink +

    +!! end + +!! test +Sanitizer: Validating the contents of the id attribute (bug 4515) +!! options +disabled +!! input +
    +!! result +Something, but definitely not
    ... +!! end + +!! test +Sanitizer: Validating id attribute uniqueness (bug 4515, bug 6301) +!! options +disabled +!! input +

    +!! result +Something need to be done. foo-2 ? +!! end + +!! test +Language converter: output gets cut off unexpectedly (bug 5757) +!! options +language=zh +!! input +this bit is safe: }- + +but if we add a conversion instance: -{zh-cn:xxx;zh-tw:yyy}- + +then we get cut off here: }- + +all additional text is vanished +!! result +

    this bit is safe: }- +

    but if we add a conversion instance: xxx +

    then we get cut off here: }- +

    all additional text is vanished +

    +!! end + +!! test +Self closed html pairs (bug 5487) +!! options +!! input +
    Centered text
    +
    In div text
    +!! result +
    <font id="bug" />Centered text
    +
    <font id="bug2" />In div text
    + +!! end + +# +# +# + +!! test +Punctuation: nbsp before exclamation +!! input +C'est grave ! +!! result +

    C'est grave ! +

    +!! end + +!! test +Punctuation: CSS !important (bug 11874) +!! input +
    important
    +!! result +
    important
    + +!!end + +!! test +Punctuation: CSS ! important (bug 11874; with space after) +!! input +
    important
    +!! result +
    important
    + +!!end + + +!! test +HTML bullet list, closed tags (bug 5497) +!! input +
      +
    • One
    • +
    • Two
    • +
    +!! result +
      +
    • One
    • +
    • Two
    • +
    + +!! end + +!! test +HTML bullet list, unclosed tags (bug 5497) +!! options +disabled +!! input +
      +
    • One +
    • Two +
    +!! result +
      +
    • One +
    • Two +
    + +!! end + +!! test +HTML ordered list, closed tags (bug 5497) +!! input +
      +
    1. One
    2. +
    3. Two
    4. +
    +!! result +
      +
    1. One
    2. +
    3. Two
    4. +
    + +!! end + +!! test +HTML ordered list, unclosed tags (bug 5497) +!! options +disabled +!! input +
      +
    1. One +
    2. Two +
    +!! result +
      +
    1. One +
    2. Two +
    + +!! end + +!! test +HTML nested bullet list, closed tags (bug 5497) +!! input +
      +
    • One
    • +
    • Two: +
        +
      • Sub-one
      • +
      • Sub-two
      • +
      +
    • +
    +!! result +
      +
    • One
    • +
    • Two: +
        +
      • Sub-one
      • +
      • Sub-two
      • +
      +
    • +
    + +!! end + +!! test +HTML nested bullet list, open tags (bug 5497) +!! options +disabled +!! input +
      +
    • One +
    • Two: +
        +
      • Sub-one +
      • Sub-two +
      +
    +!! result +
      +
    • One +
    • Two: +
        +
      • Sub-one +
      • Sub-two +
      +
    + +!! end + +!! test +HTML nested ordered list, closed tags (bug 5497) +!! input +
      +
    1. One
    2. +
    3. Two: +
        +
      1. Sub-one
      2. +
      3. Sub-two
      4. +
      +
    4. +
    +!! result +
      +
    1. One
    2. +
    3. Two: +
        +
      1. Sub-one
      2. +
      3. Sub-two
      4. +
      +
    4. +
    + +!! end + +!! test +HTML nested ordered list, open tags (bug 5497) +!! options +disabled +!! input +
      +
    1. One +
    2. Two: +
        +
      1. Sub-one +
      2. Sub-two +
      +
    +!! result +
      +
    1. One +
    2. Two: +
        +
      1. Sub-one +
      2. Sub-two +
      +
    + +!! end + +!! test +HTML ordered list item with parameters oddity +!! input +
    1. One
    +!! result +
    1. One
    + +!! end + +!!test +bug 5918: autonumbering +!! input +[http://first/] [http://second] [ftp://ftp] + +ftp://inlineftp + +[mailto:enclosed@mail.tld With target] + +[mailto:enclosed@mail.tld] + +mailto:inline@mail.tld +!! result +

    [1] [2] [3] +

    ftp://inlineftp +

    With target +

    [4] +

    mailto:inline@mail.tld +

    +!! end + + +# +# Security and HTML correctness +# From Nick Jenkins' fuzz testing +# + +!! test +Fuzz testing: Parser13 +!! input +{| +| http://a| +!! result + + + + +
    +
    + +!! end + +!! test +Fuzz testing: Parser14 +!! input +== onmouseover= == +http://__TOC__ +!! result +

    [edit] onmouseover=

    +http://

    Contents

    + +
    + +!! end + +!! test +Fuzz testing: Parser14-table +!! input +==a== +{| STYLE=__TOC__ +!! result +

    [edit] a

    + + +
    + +!! end + +# Known to produce bogus xml (extra ) +!! test +Fuzz testing: Parser16 +!! options +noxml +!! input +{| +!https://|||||| +!! result + + + + + + +
    https:// + +
    + +!! end + +!! test +Fuzz testing: Parser21 +!! input +{| +! irc://{{ftp://a" onmouseover="alert('hello world');" +| +!! result + + + + + +
    irc://{{ftp://a" onmouseover="alert('hello world');" + +
    + +!! end + +!! test +Fuzz testing: Parser22 +!! input +http://===r:::https://b + +{| +!!result +

    http://===r:::https://b +

    + + +
    + +!! end + +# Known to produce bad XML for now +!! test +Fuzz testing: Parser24 +!! options +noxml +!! input +{| +{{{| +}}}} > +
    + +MOVE YOUR MOUSE CURSOR OVER THIS TEXT +| +!! result + +{{{| +}}}} > +
    + +MOVE YOUR MOUSE CURSOR OVER THIS TEXT +
    + + +
    +
    + +!! end + +# Note: the current result listed for this is not what the original one was, +# but the original bug was JavaScript injection, which is fixed in any case. +# It's not clear that the original result listed was any more correct than the +# current one. Original result: +#

    {{{| +#

    +#
  • +# }}}blah" onmouseover="alert('hello world');" align="left"MOVE MOUSE CURSOR OVER HERE +!!test +Fuzz testing: Parser25 (bug 6055) +!! input +{{{ +| +
  • +}}}blah" onmouseover="alert('hello world');" align="left"'''MOVE MOUSE CURSOR OVER HERE +!! result +

    <LI CLASS=blah" onmouseover="alert('hello world');" align="left"MOVE MOUSE CURSOR OVER HERE +

    +!! end + +!!test +Fuzz testing: URL adjacent extension (with space, clean) +!! options +!! input +http://example.com junk +!! result +

    http://example.com junk +

    +!!end + +!!test +Fuzz testing: URL adjacent extension (no space, dirty; nowiki) +!! options +!! input +http://example.comjunk +!! result +

    http://example.comjunk +

    +!!end + +!!test +Fuzz testing: URL adjacent extension (no space, dirty; pre) +!! options +!! input +http://example.com
    junk
    +!! result +http://example.com
    junk
    + +!!end + +!!test +Fuzz testing: image with bogus manual thumbnail +!!input +[[Image:foobar.jpg|thumbnail= ]] +!!result +
    Error creating thumbnail:
    + +!!end + +!! test +Fuzz testing: encoded newline in generated HTML replacements (bug 6577) +!! input +
    
    +!! result
    +
    
    +
    +!! end
    +
    +!! test
    +Parsing optional HTML elements (Bug 6171)
    +!! options
    +!! input
    +
    +  
    +    
    +    
    +  
    +
    Some tabular data More tabular data ... + And yet som tabular data
    +!! result + + + + + +
    Some tabular data More tabular data ... + And yet som tabular data
    + +!! end + +!! test +Correct handling of , (Bug 6171) +!! options +!! input + + + + + + +
    Some tabular data More tabular data ... And yet som tabular data
    +!! result + + + + + + +
    Some tabular data More tabular data ... And yet som tabular data
    + +!! end + + +!! test +Parsing crashing regression (fr:JavaScript) +!! input + +!! result +

    </body></x> +

    +!! end + +!! test +Inline wiki vs wiki block nesting +!! input +'''Bold paragraph + +New wiki paragraph +!! result +

    Bold paragraph +

    New wiki paragraph +

    +!! end + +!! test +Inline HTML vs wiki block nesting +!! options +disabled +!! input +Bold paragraph + +New wiki paragraph +!! result +

    Bold paragraph +

    New wiki paragraph +

    +!! end + +# Original result was this: +#

    boldboldbolditalics +#

    +# While that might be marginally more intuitive, maybe, the six-apostrophe +# construct is clearly pathological and the result stated here (which is what +# the parser actually does) is about as reasonable as anything. +!!test +Mixing markup for italics and bold +!! options +!! input +'''bold''''''bold''bolditalics''''' +!! result +

    'bold'boldbolditalics +

    +!! end + + +!! article +Xyzzyx +!! text +Article for special page transclusion test +!! endarticle + +!! test +Special page transclusion +!! options +!! input +{{Special:Prefixindex/Xyzzyx}} +!! result +


    +

    +
    Xyzzyx
    + +!! end + +!! test +Special page transclusion twice (bug 5021) +!! options +!! input +{{Special:Prefixindex/Xyzzyx}} +{{Special:Prefixindex/Xyzzyx}} +!! result +


    +

    +
    Xyzzyx
    +


    +

    +
    Xyzzyx
    + +!! end + +!! test +Transclusion of default MediaWiki message +!! input +{{MediaWiki:Mainpage}} +!!result +

    Main Page +

    +!! end + +!! test +Transclusion of nonexistent MediaWiki message +!! input +{{MediaWiki:Mainpagexxx}} +!!result +

    MediaWiki:Mainpagexxx +

    +!! end + +!! test +Transclusion of MediaWiki message with underscore +!! input +{{MediaWiki:history_short}} +!! result +

    History +

    +!! end + +!! test +Transclusion of MediaWiki message with space +!! input +{{MediaWiki:history short}} +!! result +

    History +

    +!! end + +!! test +Invalid header with following text +!! input += x = y +!! result +

    = x = y +

    +!! end + + +!! test +Section extraction test (section 0) +!! options +section=0 +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +start +!! end + +!! test +Section extraction test (section 1) +!! options +section=1 +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +==a== +===aa=== +====aaa==== +!! end + +!! test +Section extraction test (section 2) +!! options +section=2 +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +===aa=== +====aaa==== +!! end + +!! test +Section extraction test (section 3) +!! options +section=3 +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +====aaa==== +!! end + +!! test +Section extraction test (section 4) +!! options +section=4 +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +==b== +===ba=== +===bb=== +====bba==== +===bc=== +!! end + +!! test +Section extraction test (section 5) +!! options +section=5 +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +===ba=== +!! end + +!! test +Section extraction test (section 6) +!! options +section=6 +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +===bb=== +====bba==== +!! end + +!! test +Section extraction test (section 7) +!! options +section=7 +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +====bba==== +!! end + +!! test +Section extraction test (section 8) +!! options +section=8 +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +===bc=== +!! end + +!! test +Section extraction test (section 9) +!! options +section=9 +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +==c== +===ca=== +!! end + +!! test +Section extraction test (section 10) +!! options +section=10 +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +===ca=== +!! end + +!! test +Section extraction test (nonexistent section 11) +!! options +section=11 +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +!! end + +!! test +Section extraction test with bogus heading (section 1) +!! options +section=1 +!! input +==a== +==bogus== not a legal section +==b== +!! result +==a== +==bogus== not a legal section +!! end + +!! test +Section extraction test with bogus heading (section 2) +!! options +section=2 +!! input +==a== +==bogus== not a legal section +==b== +!! result +==b== +!! end + +!! test +Section extraction test with comment after heading (section 1) +!! options +section=1 +!! input +==a== +==b== +==c== +!! result +==a== +!! end + +!! test +Section extraction test with comment after heading (section 2) +!! options +section=2 +!! input +==a== +==b== +==c== +!! result +==b== +!! end + +!! test +Section extraction test with bogus heading (section 1) +!! options +section=1 +!! input +==a== +==bogus== not a legal section +==b== +!! result +==a== +==bogus== not a legal section +!! end + +!! test +Section extraction test with bogus heading (section 2) +!! options +section=2 +!! input +==a== +==bogus== not a legal section +==b== +!! result +==b== +!! end + + +# Formerly testing for bug 2587, now resolved by the use of unmarked sections +# instead of respecting commented sections +!! test +Section extraction prefixed by comment (section 1) +!! options +section=1 +!! input +==sec1== +==sec2== +!!result +==sec2== +!!end + +!! test +Section extraction prefixed by comment (section 2) +!! options +section=2 +!! input +==sec1== +==sec2== +!!result + +!!end + + +# Formerly testing for bug 2607, now resolved by the use of unmarked sections +# instead of respecting HTML-style headings +!! test +Section extraction, mixed wiki and html (section 1) +!! options +section=1 +!! input +

    unmarked

    +unmarked +==1== +one +==2== +two +!! result +==1== +one +!! end + +!! test +Section extraction, mixed wiki and html (section 2) +!! options +section=2 +!! input +

    unmarked

    +unmarked +==1== +one +==2== +two +!! result +==2== +two +!! end + + +# Formerly testing for bug 3342 +!! test +Section extraction, heading surrounded by +!! options +section=1 +!! input +==unmarked== +==marked== +!! result +==marked== +!!end + +# Test behaviour of bug 19910 +!! test +Sectiion with all-equals +!! options +section=2 +!! input +=== +The line above must have a trailing space +=== +But just in case it doesn't... +!! result +=== +But just in case it doesn't... +!! end + +!! test +Section replacement test (section 0) +!! options +replace=0,"xxx" +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +xxx + +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! end + +!! test +Section replacement test (section 1) +!! options +replace=1,"xxx" +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +start +xxx + +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! end + +!! test +Section replacement test (section 2) +!! options +replace=2,"xxx" +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +start +==a== +xxx + +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! end + +!! test +Section replacement test (section 3) +!! options +replace=3,"xxx" +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +start +==a== +===aa=== +xxx + +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! end + +!! test +Section replacement test (section 4) +!! options +replace=4,"xxx" +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +start +==a== +===aa=== +====aaa==== +xxx + +==c== +===ca=== +!! end + +!! test +Section replacement test (section 5) +!! options +replace=5,"xxx" +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +start +==a== +===aa=== +====aaa==== +==b== +xxx + +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! end + +!! test +Section replacement test (section 6) +!! options +replace=6,"xxx" +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +xxx + +===bc=== +==c== +===ca=== +!! end + +!! test +Section replacement test (section 7) +!! options +replace=7,"xxx" +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +xxx + +===bc=== +==c== +===ca=== +!! end + +!! test +Section replacement test (section 8) +!! options +replace=8,"xxx" +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +xxx + +==c== +===ca=== +!!end + +!! test +Section replacement test (section 9) +!! options +replace=9,"xxx" +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +xxx +!! end + +!! test +Section replacement test (section 10) +!! options +replace=10,"xxx" +!! input +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +===ca=== +!! result +start +==a== +===aa=== +====aaa==== +==b== +===ba=== +===bb=== +====bba==== +===bc=== +==c== +xxx +!! end + +!! test +Section replacement test with initial whitespace (bug 13728) +!! options +replace=2,"xxx" +!! input + Preformatted initial line +==a== +===a=== +!! result + Preformatted initial line +==a== +xxx +!! end + + +!! test +Section extraction, heading followed by pre with 20 spaces (bug 6398) +!! options +section=1 +!! input +==a== + a +!! result +==a== + a +!! end + +!! test +Section extraction, heading followed by pre with 19 spaces (bug 6398 sanity check) +!! options +section=1 +!! input +==a== + a +!! result +==a== + a +!! end + + +!! test +Section extraction,
     around bogus header (bug 10309)
    +!! options
    +noxml section=2
    +!! input
    +== Section One ==
    +
    +=======
    +
    + +== Section Two == +stuff +!! result +== Section Two == +stuff +!! end + +!! test +Section replacement,
     around bogus header (bug 10309)
    +!! options
    +noxml replace=2,"xxx"
    +!! input
    +== Section One ==
    +
    +=======
    +
    + +== Section Two == +stuff +!! result +== Section One == +
    +=======
    +
    + +xxx +!! end + + + +!! test +Handling of in URLs +!! input +**irc:// a +!! result + + +!!end + +!! test +5 quotes, code coverage +1 line +!! input +''''' +!! result +!! end + +!! test +Special:Search page linking. +!! input +{{Special:search}} +!! result +

    Special:Search +

    +!! end + +!! test +Say the magic word +!! input +* {{PAGENAME}} +* {{BASEPAGENAME}} +* {{SUBPAGENAME}} +* {{SUBPAGENAMEE}} +* {{BASEPAGENAME}} +* {{BASEPAGENAMEE}} +* {{TALKPAGENAME}} +* {{TALKPAGENAMEE}} +* {{SUBJECTPAGENAME}} +* {{SUBJECTPAGENAMEE}} +* {{NAMESPACEE}} +* {{NAMESPACE}} +* {{TALKSPACE}} +* {{TALKSPACEE}} +* {{SUBJECTSPACE}} +* {{SUBJECTSPACEE}} +* {{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}} +!! result +
    • Parser test +
    • Parser test +
    • Parser test +
    • Parser_test +
    • Parser test +
    • Parser_test +
    • Talk:Parser test +
    • Talk:Parser_test +
    • Parser test +
    • Parser_test +
    • +
    • +
    • Talk +
    • Talk +
    • +
    • +
    • Template:Dynamic +
    + +!! end +### Note: Above tests excludes the "{{NUMBEROFADMINS}}" magic word because it generates a MySQL error when included. + +!! test +Gallery +!! input + +image1.png | +image2.gif||||| + +image3| +image4 |300px| centre + image5.svg| http:///////// +[[x|xx]]]] +* image6 + +!! result + + +!! end + +!! test +Gallery (with options) +!! input + +File:Nonexistant.jpg|caption +File:Nonexistant.jpg +image:foobar.jpg|some '''caption''' [[Main Page]] +image:foobar.jpg + +!! result + + +!! end + +!! test +gallery (with showfilename option) +!! input + +File:Nonexistant.jpg|caption +File:Nonexistant.jpg +image:foobar.jpg|some '''caption''' [[Main Page]] +File:Foobar.jpg + +!! result + + +!! end + +!! test +HTML Hex character encoding (spells the word "JavaScript") +!! input +JavaScript +!! result +

    JavaScript +

    +!! end + +!! test +__FORCETOC__ override +!! input +__NEWSECTIONLINK__ +__FORCETOC__ +!! result +


    +

    +!! end + +!! test +ISBN code coverage +!! input +ISBN 978-0-1234-56 789 +!! result +

    ISBN 978-0-1234-56 789 +

    +!! end + +!! test +ISBN followed by 5 spaces +!! input +ISBN +!! result +

    ISBN +

    +!! end + +!! test +Double ISBN +!! input +ISBN ISBN 1234567890 +!! result +

    ISBN ISBN 1234567890 +

    +!! end + +!! test +Bug 22905: followed by ISBN followed by +!! input +(fr) ISBN 2753300917 [http://www.example.com example.com] +!! result +

    (fr) ISBN 2753300917 example.com +

    +!! end + +!! test +Double RFC +!! input +RFC RFC 1234 +!! result +

    RFC RFC 1234 +

    +!! end + +!! test +Double RFC with a wiki link +!! input +RFC [[RFC 1234]] +!! result +

    RFC RFC 1234 +

    +!! end + +!! test +RFC code coverage +!! input +RFC 983 987 +!! result +

    RFC 983 987 +

    +!! end + +!! test +Centre-aligned image +!! input +[[Image:foobar.jpg|centre]] +!! result +
    Foobar.jpg
    + +!!end + +!! test +None-aligned image +!! input +[[Image:foobar.jpg|none]] +!! result +
    Foobar.jpg
    + +!!end + +!! test +Width + Height sized image (using px) (height is ignored) +!! input +[[Image:foobar.jpg|640x480px]] +!! result +

    Foobar.jpg +

    +!!end + +!! test +Width-sized image (using px, no following whitespace) +!! input +[[Image:foobar.jpg|640px]] +!! result +

    Foobar.jpg +

    +!!end + +!! test +Width-sized image (using px, with following whitespace - test regression from r39467) +!! input +[[Image:foobar.jpg|640px ]] +!! result +

    Foobar.jpg +

    +!!end + +!! test +Width-sized image (using px, with preceding whitespace - test regression from r39467) +!! input +[[Image:foobar.jpg| 640px]] +!! result +

    Foobar.jpg +

    +!!end + +!! test +Another italics / bold test +!! input + ''' ''x' +!! result +
    ' x'
    +
    +!!end + +# Note the results may be incorrect, as parserTest output included this: +# XML error: Mismatched tag at byte 6120: +# ...
    +
    +
    +
    +
    +
    +
    + +!!end + + +# Images with the "|" character in external URLs in comment tags; Eats half the comment, leaves unmatched "" tag. +!! test +Images with the "|" character in the comment +!! input +[[image:Foobar.jpg|thumb|An [http://test/?param1=|left|¶m2=|x external] URL]] +!! result +
    An external URL
    + +!!end + +!! test +[Before] HTML without raw HTML enabled ($wgRawHtml==false) +!! input + +!! result +

    <html><script>alert(1);</script></html> +

    +!! end + +!! test +HTML with raw HTML ($wgRawHtml==true) +!! options +rawhtml +!! input + +!! result +

    +

    +!! end + +!! test +Parents of subpages, one level up +!! options +subpage title=[[Subpage test/L1/L2/L3]] +!! input +[[../|L2]] +!! result +

    L2 +

    +!! end + + +!! test +Parents of subpages, one level up, not named +!! options +subpage title=[[Subpage test/L1/L2/L3]] +!! input +[[../]] +!! result +

    Subpage test/L1/L2 +

    +!! end + + + +!! test +Parents of subpages, two levels up +!! options +subpage title=[[Subpage test/L1/L2/L3]] +!! input +[[../../|L1]]2 + +[[../../|L1]]l +!! result +

    L12 +

    L1l +

    +!! end + +!! test +Parents of subpages, two levels up, without trailing slash or name. +!! options +subpage title=[[Subpage test/L1/L2/L3]] +!! input +[[../..]] +!! result +

    [[../..]] +

    +!! end + +!! test +Parents of subpages, two levels up, with lots of extra trailing slashes. +!! options +subpage title=[[Subpage test/L1/L2/L3]] +!! input +[[../../////]] +!! result +

    /// +

    +!! end + +!! test +Definition list code coverage +!! input +; title : def +; title : def +;title: def +!! result +
    title  
    def +
    title 
    def +
    title
    def +
    + +!! end + +!! test +Don't fall for the self-closing div +!! input +
    hello world
    +!! result +
    hello world
    + +!! end + +!! test +MSGNW magic word +!! input +{{MSGNW:msg}} +!! result +

    [[:Template:Msg]] +

    +!! end + +!! test +RAW magic word +!! input +{{RAW:QUERTY}} +!! result +

    Template:QUERTY +

    +!! end + +# This isn't needed for XHTML conformance, but would be handy as a fallback security measure +!! test +Always escape literal '>' in output, not just after '<' +!! input +><> +!! result +

    ><> +

    +!! end + +!! test +Template caching +!! input +{{Test}} +{{Test}} +!! result +

    This is a test template +This is a test template +

    +!! end + + +!! article +MediaWiki:Fake +!! text +==header== +!! endarticle + +!! test +Inclusion of !userCanEdit() content +!! input +{{MediaWiki:Fake}} +!! result +

    [edit] header

    + +!! end + + +!! test +Out-of-order TOC heading levels +!! input +==2== +======6====== +===3=== +=1= +=====5===== +==2== +!! result +

    Contents

    + +
    +

    [edit] 2

    +
    [edit] 6
    +

    [edit] 3

    +

    [edit] 1

    +
    [edit] 5
    +

    [edit] 2

    + +!! end + + +!! test +ISBN with a dummy number +!! input +ISBN --- +!! result +

    ISBN --- +

    +!! end + + +!! test +ISBN with space-delimited number +!! input +ISBN 92 9017 032 8 +!! result +

    ISBN 92 9017 032 8 +

    +!! end + + +!! test +ISBN with multiple spaces, no number +!! input +ISBN foo +!! result +

    ISBN foo +

    +!! end + + +!! test +ISBN length +!! input +ISBN 123456789 + +ISBN 1234567890 + +ISBN 12345678901 +!! result +

    ISBN 123456789 +

    ISBN 1234567890 +

    ISBN 12345678901 +

    +!! end + + +!! test +ISBN with trailing year (bug 8110) +!! input +ISBN 1-234-56789-0 - 2006 + +ISBN 1 234 56789 0 - 2006 +!! result +

    ISBN 1-234-56789-0 - 2006 +

    ISBN 1 234 56789 0 - 2006 +

    +!! end + + +!! test +anchorencode +!! input +{{anchorencode:foo bar©#%n}} +!! result +

    foo_bar.C2.A9.23.25n +

    +!! end + +!! test +anchorencode trims spaces +!! input +{{anchorencode: __pretty__please__}} +!! result +

    pretty_please +

    +!! end + +!! test +anchorencode deals with links +!! input +{{anchorencode: [[hello|world]] [[hi]]}} +!! result +

    world_hi +

    +!! end + +!! test +anchorencode deals with templates +!! input +{{anchorencode: {{Foo}} }} +!! result +

    FOO +

    +!! end + +!! test +anchorencode encodes like the TOC generator: (bug 18431) +!! input +=== _ +:.3A%3A&&]] === +{{anchorencode: _ +:.3A%3A&&]] }} +__NOEDITSECTION__ +!! result +

    _ +:.3A%3A&&]]

    +

    .2B:.3A.253A.26.26.5D.5D +

    +!! end + +# Expected output in the following test is not necessarily expected (there +# should probably be

    tags inside the

    in the output) -- it's +# only testing for well-formedness. +!! test +Bug 6200: blockquotes and paragraph formatting +!! input +
    +foo +
    + +bar + + baz +!! result +
    +foo +
    +

    bar +

    +
    baz
    +
    +!! end + +!! test +Bug 8293: Use of center tag ruins paragraph formatting +!! input +
    +foo +
    + +bar + + baz +!! result +
    +

    foo +

    +
    +

    bar +

    +
    baz
    +
    +!! end + + +### +### Language variants related tests +### +!! test +Self-link in language variants +!! options +title=[[Dunav]] language=sr +!! input +Both [[Dunav]] and [[Дунав]] are names for this river. +!! result +

    Both Dunav and Дунав are names for this river. +

    +!!end + + +!! test +Link to pages in language variants +!! options +language=sr +!! input +Main Page can be written as [[Маин Паге]] +!! result +

    Main Page can be written as Маин Паге +

    +!!end + + +!! test +Multiple links to pages in language variants +!! options +language=sr +!! input +[[Main Page]] can be written as [[Маин Паге]] same as [[Маин Паге]]. +!! result +

    Main Page can be written as Маин Паге same as Маин Паге. +

    +!!end + + +!! test +Simple template in language variants +!! options +language=sr +!! input +{{тест}} +!! result +

    This is a test template +

    +!! end + + +!! test +Template with explicit namespace in language variants +!! options +language=sr +!! input +{{Template:тест}} +!! result +

    This is a test template +

    +!! end + + +!! test +Basic test for template parameter in language variants +!! options +language=sr +!! input +{{парамтест|param=foo}} +!! result +

    This is a test template with parameter foo +

    +!! end + + +!! test +Simple category in language variants +!! options +language=sr cat +!! input +[[Category:МедиаWики Усер'с Гуиде]] +!! result +MediaWiki User's Guide +!! end + + +!! test +Stripping -{}- tags (language variants) +!! options +language=sr +!! input +Latin proverb: -{Ne nuntium necare}- +!! result +

    Latin proverb: Ne nuntium necare +

    +!! end + + +!! test +Prevent conversion with -{}- tags (language variants) +!! options +language=sr variant=sr-ec +!! input +Latinski: -{Ne nuntium necare}- +!! result +

    Латински: Ne nuntium necare +

    +!! end + + +!! test +Prevent conversion of text with -{}- tags (language variants) +!! options +language=sr variant=sr-ec +!! input +Latinski: -{Ne nuntium necare}- +!! result +

    Латински: Ne nuntium necare +

    +!! end + + +!! test +Prevent conversion of links with -{}- tags (language variants) +!! options +language=sr variant=sr-ec +!! input +-{[[Main Page]]}- +!! result +

    Main Page +

    +!! end + + +!! test +-{}- tags within headlines (within html for parserConvert()) +!! options +language=sr variant=sr-ec +!! input +== -{Naslov}- == +!! result +

    [уреди] Naslov

    + +!! end + + +!! test +Explicit definition of language variant alternatives +!! options +language=zh variant=zh-tw +!! input +-{zh:China;zh-tw:Taiwan}-, not China +!! result +

    Taiwan, not China +

    +!! end + + +!! test +Explicit session-wise language variant mapping (A flag and - flag) +!! options +language=zh variant=zh-tw +!! input +Taiwan is not China. +But -{A|zh:China;zh-tw:Taiwan}- is China, +(This-{-|zh:China;zh-tw:Taiwan}- should be stripped!) +and -{China}- is China. +!! result +

    Taiwan is not China. +But Taiwan is Taiwan, +(This should be stripped!) +and China is China. +

    +!! end + +!! test +Explicit session-wise language variant mapping (H flag for hide) +!! options +language=zh variant=zh-tw +!! input +(This-{H|zh:China;zh-tw:Taiwan}- should be stripped!) +Taiwan is China. +!! result +

    (This should be stripped!) +Taiwan is Taiwan. +

    +!! end + +!! test +Adding explicit conversion rule for title (T flag) +!! options +language=zh variant=zh-tw showtitle +!! input +Should be stripped-{T|zh:China;zh-tw:Taiwan}-! +!! result +Taiwan +

    Should be stripped! +

    +!! end + +!! test +Testing that changing the language variant here in the tests actually works +!! options +language=zh variant=zh showtitle +!! input +Should be stripped-{T|zh:China;zh-tw:Taiwan}-! +!! result +China +

    Should be stripped! +

    +!! end + +!! test +Bug 24072: more test on conversion rule for title +!! options +language=zh variant=zh-tw showtitle +!! input +This should be stripped-{T|zh:China;zh-tw:Taiwan}-! +This won't take interferes with the title rule-{H|zh:Beijing;zh-tw:Taipei}-. +!! result +Taiwan +

    This should be stripped! +This won't take interferes with the title rule. +

    +!! end + +!! test +Raw output of variant escape tags (R flag) +!! options +language=zh variant=zh-tw +!! input +Raw: -{R|zh:China;zh-tw:Taiwan}- +!! result +

    Raw: zh:China;zh-tw:Taiwan +

    +!! end + +!! test +Nested using of manual convert syntax +!! options +language=zh variant=zh-hk +!! input +Nested: -{zh-hans:Hi -{zh-cn:China;zh-sg:Singapore;}-;zh-hant:Hello -{zh-tw:Taiwan;zh-hk:H-{ong}- K-{}-ong;}-;}-! +!! result +

    Nested: Hello Hong Kong! +

    +!! end + +!! test +Do not convert roman numbers to language variants +!! options +language=sr variant=sr-ec +!! input +Fridrih IV je car. +!! result +

    Фридрих IV је цар. +

    +!! end + +!! test +Unclosed language converter markup "-{" +!! options +language=sr +!! input +-{T|hello +!! result +

    -{T|hello +

    +!! end + +!! test +Don't convert raw rule "-{R|=>}-" to "=>" +!! options +language=sr +!! input +-{R|=>}- +!! result +

    => +

    +!!end + +!!article +Template:Bullet +!!text +* Bar +!!endarticle + +!! test +Bug 529: Uncovered bullet +!! input +* Foo {{bullet}} +!! result +
    • Foo +
    • Bar +
    + +!! end + +!! test +Bug 529: Uncovered table already at line-start +!! input +x + +{{table}} +y +!! result +

    x +

    + + + + + + +
    1 2 +
    3 4 +
    +

    y +

    +!! end + +!! test +Bug 529: Uncovered bullet in parser function result +!! input +* Foo {{lc:{{bullet}} }} +!! result +
    • Foo +
    • bar +
    + +!! end + +!! test +Bug 5678: Double-parsed template argument +!! input +{{lc:{{{1}}}|hello}} +!! result +

    {{{1}}} +

    +!! end + +!! test +Bug 5678: Double-parsed template invocation +!! input +{{lc:{{paramtest {{!}} param = hello }} }} +!! result +

    {{paramtest | param = hello }} +

    +!! end + +!! test +Case insensitivity of parser functions for non-ASCII characters (bug 8143) +!! options +language=cs +title=[[Main Page]] +!! input +{{PRVNÍVELKÉ:ěščř}} +{{prvnívelké:ěščř}} +{{PRVNÍMALÉ:ěščř}} +{{prvnímalé:ěščř}} +{{MALÁ:ěščř}} +{{malá:ěščř}} +{{VELKÁ:ěščř}} +{{velká:ěščř}} +!! result +

    Ěščř +Ěščř +ěščř +ěščř +ěščř +ěščř +ĚŠČŘ +ĚŠČŘ +

    +!! end + +!! test +Morwen/13: Unclosed link followed by heading +!! input +[[link +==heading== +!! result +

    [[link +

    +

    [edit] heading

    + +!! end + +!! test +HHP2.1: Heuristics for headings in preprocessor parenthetical structures +!! input +{{foo| +=heading= +!! result +

    {{foo| +

    +

    heading

    + +!! end + +!! test +HHP2.2: Heuristics for headings in preprocessor parenthetical structures +!! input +{{foo| +==heading== +!! result +

    {{foo| +

    +

    [edit] heading

    + +!! end + +!! test +Tildes in comments +!! options +pst +!! input + +!! result + +!! end + +!! test +Paragraphs inside divs (no extra line breaks) +!! input +
    Line one + +Line two
    +!! result +
    Line one +Line two
    + +!! end + +!! test +Paragraphs inside divs (extra line break on open) +!! input +
    +Line one + +Line two
    +!! result +
    +

    Line one +

    +Line two
    + +!! end + +!! test +Paragraphs inside divs (extra line break on close) +!! input +
    Line one + +Line two +
    +!! result +
    Line one +

    Line two +

    +
    + +!! end + +!! test +Paragraphs inside divs (extra line break on open and close) +!! input +
    +Line one + +Line two +
    +!! result +
    +

    Line one +

    Line two +

    +
    + +!! end + +!! test +Nesting tags, paragraphs on lines which begin with
    +!! options +disabled +!! input +
    A +B +!! result +
    +

    A +B +

    +!! end + +# Bug 6200:
    should behave like
    with respect to line breaks +!! test +Bug 6200: paragraphs inside blockquotes (no extra line breaks) +!! options +disabled +!! input +
    Line one + +Line two
    +!! result +
    Line one +Line two
    + +!! end + +!! test +Bug 6200: paragraphs inside blockquotes (extra line break on open) +!! options +disabled +!! input +
    +Line one + +Line two
    +!! result +
    +

    Line one +

    +Line two
    + +!! end + +!! test +Bug 6200: paragraphs inside blockquotes (extra line break on close) +!! options +disabled +!! input +
    Line one + +Line two +
    +!! result +
    Line one +

    Line two +

    +
    + +!! end + +!! test +Bug 6200: paragraphs inside blockquotes (extra line break on open and close) +!! options +disabled +!! input +
    +Line one + +Line two +
    +!! result +
    +

    Line one +

    Line two +

    +
    + +!! end + +!! test +Paragraphs inside blockquotes/divs (no extra line breaks) +!! input +
    Line one + +Line two
    +!! result +
    Line one +Line two
    + +!! end + +!! test +Paragraphs inside blockquotes/divs (extra line break on open) +!! input +
    +Line one + +Line two
    +!! result +
    +

    Line one +

    +Line two
    + +!! end + +!! test +Paragraphs inside blockquotes/divs (extra line break on close) +!! input +
    Line one + +Line two +
    +!! result +
    Line one +

    Line two +

    +
    + +!! end + +!! test +Paragraphs inside blockquotes/divs (extra line break on open and close) +!! input +
    +Line one + +Line two +
    +!! result +
    +

    Line one +

    Line two +

    +
    + +!! end + +!! test +Interwiki links trounced by replaceExternalLinks after early LinkHolderArray expansion +!! options +wgLinkHolderBatchSize=0 +!! input +[[meatball:1]] +[[meatball:2]] +[[meatball:3]] +!! result +

    meatball:1 +meatball:2 +meatball:3 +

    +!! end + +!! test +Free external link invading image caption +!! input +[[Image:Foobar.jpg|thumb|http://x|hello]] +!! result +
    hello
    + +!! end + +!! test +Bug 15196: localised external link numbers +!! options +language=fa +!! input +[http://en.wikipedia.org/] +!! result +

    [۱] +

    +!! end + +!! test +Multibyte character in padleft +!! input +{{padleft:-Hello|7|Æ}} +!! result +

    Æ-Hello +

    +!! end + +!! test +Multibyte character in padright +!! input +{{padright:Hello-|7|Æ}} +!! result +

    Hello-Æ +

    +!! end + +!! test +Formatted date +!! config +wgUseDynamicDates=1 +!! input +[[2009-03-24]] +!! result +

    2009-03-24 +

    +!!end + +!!test +formatdate parser function +!!input +{{#formatdate:2009-03-24}} +!! result +

    2009-03-24 +

    +!! end + +!!test +formatdate parser function, with default format +!!input +{{#formatdate:2009-03-24|mdy}} +!! result +

    March 24, 2009 +

    +!! end + +!! test +Linked date with autoformatting disabled +!! config +wgUseDynamicDates=false +!! input +[[2009-03-24]] +!! result +

    2009-03-24 +

    +!! end + +!! test +Spacing of numbers in formatted dates +!! input +{{#formatdate:January 15}} +!! result +

    January 15 +

    +!! end + +!! test +Spacing of numbers in formatted dates (linked) +!! config +wgUseDynamicDates=true +!! input +[[January 15]] +!! result +

    January 15 +

    +!! end + +# +# +# + +# +# Edit comments +# + +!! test +Edit comment with link +!! options +comment +!! input +I like the [[Main Page]] a lot +!! result +I like the Main Page a lot +!!end + +!! test +Edit comment with link and link text +!! options +comment +!! input +I like the [[Main Page|best pages]] a lot +!! result +I like the best pages a lot +!!end + +!! test +Edit comment with link and link text with suffix +!! options +comment +!! input +I like the [[Main Page|best page]]s a lot +!! result +I like the best pages a lot +!!end + +!! test +Edit comment with section link (non-local, eg in history list) +!! options +comment title=[[Main Page]] +!! input +/* External links */ removed bogus entries +!! result +External links: removed bogus entries +!!end + +!! test +Edit comment with section link (local, eg in diff view) +!! options +comment local title=[[Main Page]] +!! input +/* External links */ removed bogus entries +!! result +External links: removed bogus entries +!!end + +!! test +Edit comment with subpage link (bug 14080) +!! options +comment +subpage +title=[[Subpage test]] +!! input +Poked at a [[/subpage]] here... +!! result +Poked at a /subpage here... +!!end + +!! test +Edit comment with subpage link and link text (bug 14080) +!! options +comment +subpage +title=[[Subpage test]] +!! input +Poked at a [[/subpage|neat little page]] here... +!! result +Poked at a neat little page here... +!!end + +!! test +Edit comment with bogus subpage link in non-subpage NS (bug 14080) +!! options +comment +title=[[Subpage test]] +!! input +Poked at a [[/subpage]] here... +!! result +Poked at a /subpage here... +!!end + +!! test +Edit comment with bare anchor link (local, as on diff) +!! options +comment +local +title=[[Main Page]] +!!input +[[#section]] +!! result +#section +!! end + +!! test +Edit comment with bare anchor link (non-local, as on history) +!! options +comment +title=[[Main Page]] +!!input +[[#section]] +!! result +#section +!! end + +!! test +Space normalisation on autocomment (bug 22784) +!! options +comment +title=[[Main Page]] +!!input +/* __hello__world__ */ +!! result +__hello__world__ +!! end + +!! test +Bad images - basic functionality +!! input +[[File:Bad.jpg]] +!! result +!! end + +!! test +Bad images - bug 16039: text after bad image disappears +!! input +Foo bar +[[File:Bad.jpg]] +Bar foo +!! result +

    Foo bar +

    Bar foo +

    +!! end + +!! test +Verify that displaytitle works (bug #22501) no displaytitle +!! options +showtitle +!! config +wgAllowDisplayTitle=true +wgRestrictDisplayTitle=false +!! input +this is not the the title +!! result +Parser test +

    this is not the the title +

    +!! end + +!! test +Verify that displaytitle works (bug #22501) RestrictDisplayTitle=false +!! options +showtitle +title=[[Screen]] +!! config +wgAllowDisplayTitle=true +wgRestrictDisplayTitle=false +!! input +this is not the the title +{{DISPLAYTITLE:whatever}} +!! result +whatever +

    this is not the the title +

    +!! end + +!! test +Verify that displaytitle works (bug #22501) RestrictDisplayTitle=true mismatch +!! options +showtitle +title=[[Screen]] +!! config +wgAllowDisplayTitle=true +wgRestrictDisplayTitle=true +!! input +this is not the the title +{{DISPLAYTITLE:whatever}} +!! result +Screen +

    this is not the the title +

    +!! end + +!! test +Verify that displaytitle works (bug #22501) RestrictDisplayTitle=true matching +!! options +showtitle +title=[[Screen]] +!! config +wgAllowDisplayTitle=true +wgRestrictDisplayTitle=true +!! input +this is not the the title +{{DISPLAYTITLE:screen}} +!! result +screen +

    this is not the the title +

    +!! end + +!! test +Verify that displaytitle works (bug #22501) AllowDisplayTitle=false +!! options +showtitle +title=[[Screen]] +!! config +wgAllowDisplayTitle=false +!! input +this is not the the title +{{DISPLAYTITLE:screen}} +!! result +Screen +

    this is not the the title +Template:DISPLAYTITLE:screen +

    +!! end + +!! test +Verify that displaytitle works (bug #22501) AllowDisplayTitle=false no DISPLAYTITLE +!! options +showtitle +title=[[Screen]] +!! config +wgAllowDisplayTitle=false +!! input +this is not the the title +!! result +Screen +

    this is not the the title +

    +!! end + +!! test +preload: check and +!! options +preload +!! input +Hello cruelkind world. +!! result +Hello kind world. +!! end + +!! test +preload: check +!! options +preload +!! input +Goodbye Hello world +!! result +Hello world +!! end + +!! test +preload: can pass tags through if we want to +!! options +preload +!! input +<includeonly>Hello world</includeonly> +!! result +Hello world +!! end + +!! test +preload: check that it doesn't try to do tricks +!! options +preload +!! input +* ''{{world}}'' {{subst:How are you}}{{ {{{|safesubst:}}} #if:1|2|3}} +!! result +* ''{{world}}'' {{subst:How are you}}{{ {{{|safesubst:}}} #if:1|2|3}} +!! end + +!! test +Play a bit with r67090 and bug 3158 +!! options +disabled +!! input +
     
    +
     
    +
     
    +
     
    +!! result +
     
    +
     
    +
     
    +
     
    + +!! end + +!! test +HTML5 data attributes +!! input +Baz +

    Quuz

    +!! result +

    Baz +

    +

    Quuz

    + +!! end + + +TODO: +more images +more tables +math +character entities +and much more +Try for 100% code coverage diff --git a/maintenance/tests/parser/parserTestsParserHook.php b/maintenance/tests/parser/parserTestsParserHook.php new file mode 100644 index 00000000..6387208a --- /dev/null +++ b/maintenance/tests/parser/parserTestsParserHook.php @@ -0,0 +1,46 @@ + + */ + +class ParserTestParserHook { + + static function setup( &$parser ) { + $parser->setHook( 'tag', array( __CLASS__, 'hook' ) ); + + return true; + } + + static function hook( $in, $argv ) { + ob_start(); + var_dump( + $in, + $argv + ); + $ret = ob_get_clean(); + + return "
    \n$ret
    "; + } +} diff --git a/maintenance/tests/parser/parserTestsStaticParserHook.php b/maintenance/tests/parser/parserTestsStaticParserHook.php new file mode 100644 index 00000000..72f82276 --- /dev/null +++ b/maintenance/tests/parser/parserTestsStaticParserHook.php @@ -0,0 +1,58 @@ + + */ + +class ParserTestStaticParserHook { + static function setup( &$parser ) { + $parser->setHook( 'statictag', array( __CLASS__, 'hook' ) ); + + return true; + } + + static function hook( $in, $argv, $parser ) { + if ( ! count( $argv ) ) { + $parser->static_tag_buf = $in; + return ''; + } else if ( count( $argv ) === 1 && isset( $argv['action'] ) + && $argv['action'] === 'flush' && $in === null ) + { + // Clear the buffer, we probably don't need to + if ( isset( $parser->static_tag_buf ) ) { + $tmp = $parser->static_tag_buf; + } else { + $tmp = ''; + } + $parser->static_tag_buf = null; + return $tmp; + } else + // wtf? + return + "\nCall this extension as string or as" . + " , not in any other way.\n" . + "text: " . var_export( $in, true ) . "\n" . + "argv: " . var_export( $argv, true ) . "\n"; + } +} diff --git a/maintenance/tests/parserTests.php b/maintenance/tests/parserTests.php new file mode 100644 index 00000000..7793e6b8 --- /dev/null +++ b/maintenance/tests/parserTests.php @@ -0,0 +1,92 @@ + + * http://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file + * @ingroup Maintenance + */ + +$options = array( 'quick', 'color', 'quiet', 'help', 'show-output', 'record', 'run-disabled' ); +$optionsWithArgs = array( 'regex', 'seed', 'setversion' ); + +require_once( dirname( __FILE__ ) . '/../commandLine.inc' ); + +if ( isset( $options['help'] ) ) { + echo << Run test cases from a custom file instead of parserTests.txt + --record Record tests in database + --compare Compare with recorded results, without updating the database. + --setversion When using --record, set the version string to use (useful + with git-svn so that you can get the exact revision) + --keep-uploads Re-use the same upload directory for each test, don't delete it + --fuzz Do a fuzz test instead of a normal test + --seed Start the fuzz test from the specified seed + --help Show this help message + --run-disabled run disabled tests + --upload Upload test results to remote wiki (per \$wgParserTestRemote) + +ENDS; + exit( 0 ); +} + +# Cases of weird db corruption were encountered when running tests on earlyish +# versions of SQLite +if ( $wgDBtype == 'sqlite' ) { + $db = wfGetDB( DB_MASTER ); + $version = $db->getServerVersion(); + if ( version_compare( $version, '3.6' ) < 0 ) { + die( "Parser tests require SQLite version 3.6 or later, you have $version\n" ); + } +} + +# There is a convention that the parser should never +# refer to $wgTitle directly, but instead use the title +# passed to it. +$wgTitle = Title::newFromText( 'Parser test script do not use' ); +$tester = new ParserTest($options); + +if ( isset( $options['file'] ) ) { + $files = array( $options['file'] ); +} else { + // Default parser tests and any set from extensions or local config + $files = $wgParserTestFiles; +} + +# Print out software version to assist with locating regressions +$version = SpecialVersion::getVersion(); +echo( "This is MediaWiki version {$version}.\n\n" ); + +if ( isset( $options['fuzz'] ) ) { + $tester->fuzzTest( $files ); +} else { + $ok = $tester->runTestsFromFiles( $files ); + exit ( $ok ? 0 : 1 ); +} diff --git a/maintenance/tests/phpunit.xml b/maintenance/tests/phpunit.xml deleted file mode 100644 index ce7d44f5..00000000 --- a/maintenance/tests/phpunit.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - . - - - - Broken - Stub - - - \ No newline at end of file diff --git a/maintenance/tests/selenium/Selenium.php b/maintenance/tests/selenium/Selenium.php new file mode 100644 index 00000000..ecf7f9ec --- /dev/null +++ b/maintenance/tests/selenium/Selenium.php @@ -0,0 +1,190 @@ +tester = new Testing_Selenium( $this->browser, self::$url, $this->host, + $this->port, $this->timeout ); + if ( method_exists( $this->tester, "setVerbose" ) ) $this->tester->setVerbose( $this->verbose ); + + $this->tester->start(); + $this->isStarted = true; + } + + public function stop() { + $this->tester->stop(); + $this->tester = null; + $this->isStarted = false; + } + + public function login() { + if ( strlen( $this->user ) == 0 ) { + return; + } + $this->open( self::$url . '/index.php?title=Special:Userlogin' ); + $this->type( 'wpName1', $this->user ); + $this->type( 'wpPassword1', $this->pass ); + $this->click( "//input[@id='wpLoginAttempt']" ); + $this->waitForPageToLoad( 10000 ); + + // after login we redirect to the main page. So check whether the "Prefernces" top menu item exists + $value = $this->isElementPresent( "//li[@id='pt-preferences']" ); + + if ( $value != true ) { + throw new Testing_Selenium_Exception( "Login Failed" ); + } + + } + + public static function getInstance() { + if ( null === self::$_instance ) { + throw new MWException( "No instance set yet" ); + } + + return self::$_instance; + } + + public function loadPage( $title, $action ) { + $this->open( self::$url . '/index.php?title=' . $title . '&action=' . $action ); + } + + public function setLogger( $logger ) { + $this->logger = $logger; + } + + public function getLogger( ) { + return $this->logger; + } + + public function log( $message ) { + $this->logger->write( $message ); + } + + public function setUrl( $url ) { + self::$url = $url; + } + + static public function getUrl() { + return self::$url; + } + + public function setPort( $port ) { + $this->port = $port; + } + + public function getPort() { + return $this->port; + } + + public function setUser( $user ) { + $this->user = $user; + } + + // Function to get username + public function getUser() { + return $this->user; + } + + + public function setPass( $pass ) { + $this->pass = $pass; + } + + //add function to get password + public function getPass( ) { + return $this->pass; + } + + + public function setHost( $host ) { + $this->host = $host; + } + + public function setVerbose( $verbose ) { + $this->verbose = $verbose; + } + + public function setAvailableBrowsers( $availableBrowsers ) { + $this->browsers = $availableBrowsers; + } + + public function setJUnitLogfile( $junitlogfile ) { + $this->junitlogfile = $junitlogfile; + } + + public function getJUnitLogfile( ) { + return $this->junitlogfile; + } + + public function setRunAgainstGrid( $runagainstgrid ) { + $this->runagainstgrid = $runagainstgrid; + } + + public function setBrowser( $b ) { + if ($this->runagainstgrid) { + $this->browser = $b; + return true; + } + if ( !isset( $this->browsers[$b] ) ) { + throw new MWException( "Invalid Browser: $b.\n" ); + } + + $this->browser = $this->browsers[$b]; + } + + public function getAvailableBrowsers() { + return $this->browsers; + } + + public function __call( $name, $args ) { + $t = call_user_func_array( array( $this->tester, $name ), $args ); + return $t; + } + + // Prevent external cloning + protected function __clone() { } + // Prevent external construction + // protected function __construct() {} +} diff --git a/maintenance/tests/selenium/SeleniumConfig.php b/maintenance/tests/selenium/SeleniumConfig.php new file mode 100644 index 00000000..ca69b1f0 --- /dev/null +++ b/maintenance/tests/selenium/SeleniumConfig.php @@ -0,0 +1,88 @@ + + * http://citizendium.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @addtogroup Maintenance + */ + +class SeleniumServerManager { + private $SeleniumStartServer = false; + private $OS = ''; + private $SeleniumServerPid = 'NaN'; + private $SeleniumServerPort = 4444; + private $SeleniumServerStartTimeout = 10; // 10 secs. + private $SeleniumServerExecPath; + + public function __construct( $startServer, + $serverPort, + $serverExecPath ) { + $this->OS = (string) PHP_OS; + if ( isset( $startServer ) ) + $this->SeleniumStartServer = $startServer; + if ( isset( $serverPort ) ) + $this->SeleniumServerPort = $serverPort; + if ( isset( $serverExecPath ) ) + $this->SeleniumServerExecPath = $serverExecPath; + return; + } + + // Getters for certain private attributes. No setters, since they + // should not change after the manager object is created. + + public function getSeleniumStartServer() { + return $this->SeleniumStartServer; + } + + public function getSeleniumServerPort() { + return $this->SeleniumServerPort; + } + + public function getSeleniumServerPid() { + return $this->SeleniumServerPid; + } + + // Changing value of SeleniumStartServer allows starting server after + // creation of the class instance. Only allow setting SeleniumStartServer + // to true, since after server is started, it is shut down by stop(). + + public function setSeleniumStartServer( $startServer ) { + if ( $startServer == true ) $this->SeleniumStartServer = true; + } + + // return values are: 1) started - server started, 2) failed - + // server not started, 3) running - instructed to start server, but + // server already running + + public function start() { + + if ( !$this->SeleniumStartServer ) return 'failed'; + + // commented out cases are untested + + switch ( $this->OS ) { + case "Linux": +# case' CYGWIN_NT-5.1': + case 'Darwin': +# case 'FreeBSD': +# case 'HP-UX': +# case 'IRIX64': +# case 'NetBSD': +# case 'OpenBSD': +# case 'SunOS': +# case 'Unix': + // *nix based OS + return $this->startServerOnUnix(); + break; + case "Windows": + case "WIN32": + case "WINNT": + // Windows + return $this->startServerOnWindows(); + break; + default: + // An untested OS + return 'failed'; + break; + } + } + + public function stop() { + + // commented out cases are untested + + switch ( $this->OS ) { + case "Linux": +# case' CYGWIN_NT-5.1': + case 'Darwin': +# case 'FreeBSD': +# case 'HP-UX': +# case 'IRIX64': +# case 'NetBSD': +# case 'OpenBSD': +# case 'SunOS': +# case 'Unix': + // *nix based OS + return $this->stopServerOnUnix(); + break; + case "Windows": + case "WIN32": + case "WINNT": + // Windows + return $this->stopServerOnWindows(); + break; + default: + // An untested OS + return 'failed'; + break; + } + } + + private function startServerOnUnix() { + + $output = array(); + $user = $_ENV['USER']; + // @fixme this should be a little more generalized :) + if (PHP_OS == 'Darwin') { + // Mac OS X's ps barfs on the 'w' param, but doesn't need it. + $ps = "ps -U %s"; + } else { + // Good on Linux + $ps = "ps -U %s w"; + } + $psCommand = sprintf($ps, escapeshellarg($user)); + exec($psCommand . " | grep -i selenium-server", $output); + + // Start server. If there is already a server running, + // return running. + + if ( isset( $this->SeleniumServerExecPath ) ) { + $found = 0; + foreach ( $output as $string ) { + $found += preg_match( + '~^(.*)java(.+)-jar(.+)selenium-server~', + $string ); + } + if ( $found == 0 ) { + + // Didn't find the selenium server. Start it up. + // First set up comamand line suffix. + // NB: $! is pid of last job run in background + // The echo guarentees it is put into $op when + // the exec command is run. + + $commandSuffix = ' > /dev/null 2>&1'. ' & echo $!'; + $portText = ' -port ' . $this->SeleniumServerPort; + $command = "java -jar " . + escapeshellarg($this->SeleniumServerExecPath) . + $portText . $commandSuffix; + exec($command ,$op); + $pid = (int)$op[0]; + if ( $pid != "" ) + $this->SeleniumServerPid = $pid; + else { + $this->SeleniumServerPid = 'NaN'; + // Server start failed. + return 'failed'; + } + // Wait for the server to startup and listen + // on its port. Note: this solution kinda + // stinks, since it uses a wait loop - dnessett + + wfSuppressWarnings(); + for ( $cnt = 1; + $cnt <= $this->SeleniumServerStartTimeout; + $cnt++ ) { + $fp = fsockopen ( 'localhost', + $this->SeleniumServerPort, + $errno, $errstr, 0 ); + if ( !$fp ) { + sleep( 1 ); + continue; + // Server start succeeded. + } else { + fclose ( $fp ); + return 'started'; + } + } + wfRestoreWarnings(); + echo ( "Starting Selenium server timed out.\n" ); + return 'failed'; + } + // server already running. + else return 'running'; + + } + // No Server execution path defined. + return 'failed'; + } + + private function startServerOnWindows() { + // Unimplemented. + return 'failed'; + } + + private function stopServerOnUnix() { + + if ( !empty( $this->SeleniumServerPid ) && + $this->SeleniumServerPid != 'NaN' ) { + exec( "kill -9 " . $this->SeleniumServerPid ); + return 'stopped'; + } + else return 'failed'; + } + + private function stopServerOnWindows() { + // Unimplemented. + return 'failed'; + + } +} diff --git a/maintenance/tests/selenium/SeleniumTestCase.php b/maintenance/tests/selenium/SeleniumTestCase.php new file mode 100644 index 00000000..11e1b192 --- /dev/null +++ b/maintenance/tests/selenium/SeleniumTestCase.php @@ -0,0 +1,103 @@ +selenium = Selenium::getInstance(); + } + + public function tearDown() { + + } + + public function __call( $method, $args ) { + return call_user_func_array( array( $this->selenium, $method ), $args ); + } + + public function assertSeleniumAttributeEquals( $attribute, $value ) { + $attr = $this->getAttribute( $attribute ); + $this->assertEquals( $attr, $value ); + } + + public function assertSeleniumHTMLContains( $element, $text ) { + $innerHTML = $this->getText( $element ); + // or assertContains + $this->assertRegExp( "/$text/", $innerHTML ); + } + +//Common Funtions Added for Selenium Tests + + public function getExistingPage(){ + $this->open( $this->getUrl() . + '/index.php?title=Main_Page&action=edit' ); + $this->type("searchInput", "new" ); + $this->click("searchGoButton"); + $this->waitForPageToLoad("30000"); + } + + public function getNewPage($pageName){ + + $this->open( $this->getUrl() . + '/index.php?title=Main_Page&action=edit' ); + $this->type("searchInput", $pageName ); + $this->click("searchGoButton"); + $this->waitForPageToLoad("30000"); + $this->click("link=".$pageName); + $this->waitForPageToLoad("600000"); + + + } + // Loading the mediawiki editor + public function loadWikiEditor(){ + $this->open( $this->getUrl() . + '/index.php?title=Main_Page&action=edit' ); + } + + // Clear the content of the mediawiki editor + public function clearWikiEditor(){ + $this->type("wpTextbox1", ""); + } + + // Click on the 'Show preview' button of the mediawiki editor + public function clickShowPreviewBtn(){ + $this->click("wpPreview"); + } + + // Click on the 'Save Page' button of the mediawiki editor + public function clickSavePageBtn(){ + $this->click("wpSave"); + } + + // Click on the 'Edit' link + public function clickEditLink(){ + $this->click("link=Edit"); + $this->waitForPageToLoad("30000"); + } + + public function deletePage($pageName){ + $isLinkPresent = False; + $this->open( $this->getUrl() . + '/index.php?title=Main_Page&action=edit' ); + $this->click("link=Log out"); + $this->waitForPageToLoad( "30000" ); + $this->click( "link=Log in / create account" ); + $this->waitForPageToLoad( "30000" ); + $this->type( "wpName1", "nadeesha" ); + $this->type( "wpPassword1", "12345" ); + $this->click( "wpLoginAttempt" ); + $this->waitForPageToLoad( "30000" ); + $this->type( "searchInput", $pageName ); + $this->click( "searchGoButton"); + $this->waitForPageToLoad( "30000" ); + + $this->click( "link=Delete" ); + $this->waitForPageToLoad( "30000" ); + $this->click( "wpConfirmB" ); + $this->waitForPageToLoad( "30000" ); + + } + + + +} diff --git a/maintenance/tests/selenium/SeleniumTestConsoleLogger.php b/maintenance/tests/selenium/SeleniumTestConsoleLogger.php new file mode 100644 index 00000000..b6f5496c --- /dev/null +++ b/maintenance/tests/selenium/SeleniumTestConsoleLogger.php @@ -0,0 +1,25 @@ +'; + $out .= htmlentities( $message ); + // if ( $mode == SeleniumTestSuite::RESULT_OK ) $out .= '
    '; + if ( $mode != SeleniumTestSuite::CONTINUE_LINE ) { + $out .= "\n"; + } + + echo $out; + } +} diff --git a/maintenance/tests/selenium/SeleniumTestHTMLLogger.php b/maintenance/tests/selenium/SeleniumTestHTMLLogger.php new file mode 100644 index 00000000..21332cf0 --- /dev/null +++ b/maintenance/tests/selenium/SeleniumTestHTMLLogger.php @@ -0,0 +1,36 @@ +addHeadItem( 'selenium', '' ); + } + + public function write( $message, $mode = false ) { + global $wgOut; + $out = ''; + if ( $mode == SeleniumTestSuite::RESULT_OK ) { + $out .= ''; + } + $out .= htmlspecialchars( $message ); + if ( $mode == SeleniumTestSuite::RESULT_OK ) { + $out .= ''; + } + if ( $mode != SeleniumTestSuite::CONTINUE_LINE ) { + $out .= '
    '; + } + + $wgOut->addHTML( $out ); + } +} diff --git a/maintenance/tests/selenium/SeleniumTestListener.php b/maintenance/tests/selenium/SeleniumTestListener.php new file mode 100644 index 00000000..9436f672 --- /dev/null +++ b/maintenance/tests/selenium/SeleniumTestListener.php @@ -0,0 +1,68 @@ +logger = $loggerInstance; + } + + public function addError( PHPUnit_Framework_Test $test, Exception $e, $time ) { + $this->logger->write( 'Error: ' . $e->getMessage() ); + $this->tests_failed++; + } + + public function addFailure( PHPUnit_Framework_Test $test, PHPUnit_Framework_AssertionFailedError $e, $time ) + { + $this->logger->write( 'Failed: ' . $e->getMessage() ); + $this->tests_failed++; + } + + public function addIncompleteTest( PHPUnit_Framework_Test $test, Exception $e, $time ) + { + $this->logger->write( 'Incomplete.' ); + $this->tests_failed++; + } + + public function addSkippedTest( PHPUnit_Framework_Test $test, Exception $e, $time ) + { + $this->logger->write( 'Skipped.' ); + $this->tests_failed++; + } + + public function startTest( PHPUnit_Framework_Test $test ) { + $this->logger->write( + 'Testing ' . $test->getName() . ' ... ', + SeleniumTestSuite::CONTINUE_LINE + ); + } + + public function endTest( PHPUnit_Framework_Test $test, $time ) { + if ( !$test->hasFailed() ) { + $this->logger->write( 'OK', SeleniumTestSuite::RESULT_OK ); + $this->tests_ok++; + } + } + + public function startTestSuite( PHPUnit_Framework_TestSuite $suite ) { + $this->logger->write( 'Testsuite ' . $suite->getName() . ' started.' ); + $this->tests_ok = 0; + $this->tests_failed = 0; + } + + public function endTestSuite( PHPUnit_Framework_TestSuite $suite ) { + $this->logger->write('Testsuite ' . $suite->getName() . ' ended.' ); + if ( $this->tests_ok > 0 || $this->tests_failed > 0 ) { + $this->logger->write( ' OK: ' . $this->tests_ok . ' Failed: ' . $this->tests_failed ); + } + $this->tests_ok = 0; + $this->tests_failed = 0; + } + + public function statusMessage( $message ) { + $this->logger->write( $message ); + } +} + diff --git a/maintenance/tests/selenium/SeleniumTestSuite.php b/maintenance/tests/selenium/SeleniumTestSuite.php new file mode 100644 index 00000000..ba178051 --- /dev/null +++ b/maintenance/tests/selenium/SeleniumTestSuite.php @@ -0,0 +1,46 @@ +isSetUp ) { + return; + } + $this->isSetUp = true; + $this->selenium = Selenium::getInstance(); + $this->selenium->start(); + $this->selenium->open( $this->selenium->getUrl() . '/index.php?setupTestSuite=' . $this->getName() ); + if ( $this->loginBeforeTests ) { + $this->login(); + } + } + + public function tearDown() { + $this->selenium->open( $this->selenium->getUrl() . '/index.php?clearTestSuite=' . $this->getName() ); + $this->selenium->stop(); + } + + public function login() { + $this->selenium->login(); + } + + public function loadPage( $title, $action ) { + $this->selenium->loadPage( $title, $action ); + } + + protected function setLoginBeforeTests( $loginBeforeTests = true ) { + $this->loginBeforeTests = $loginBeforeTests; + } +} diff --git a/maintenance/tests/selenium/data/Wikipedia-logo-v2-de.png b/maintenance/tests/selenium/data/Wikipedia-logo-v2-de.png new file mode 100644 index 00000000..70385243 Binary files /dev/null and b/maintenance/tests/selenium/data/Wikipedia-logo-v2-de.png differ diff --git a/maintenance/tests/selenium/selenium_settings.ini.php52.sample b/maintenance/tests/selenium/selenium_settings.ini.php52.sample new file mode 100644 index 00000000..ad21037e --- /dev/null +++ b/maintenance/tests/selenium/selenium_settings.ini.php52.sample @@ -0,0 +1,23 @@ +[browsers] + +firefox = "*firefox" +iexploreproxy = "*iexploreproxy" +chrome = "*chrome" + +[SeleniumSettings] + +host = "localhost" +port = "4444" +wikiUrl = "http://localhost/mediawiki/latest_trunk/trunk/phase3" +username = "Wikiadmin" +userPassword = "Wikiadminpw" +testBrowser = "firefox" +startserver = +stopserver = +jUnitLogFile = +runAgainstGrid = false + +[testSuite] + +SimpleSeleniumTestSuite = "maintenance/tests/selenium/suites/SimpleSeleniumTestSuite.php" +WikiEditorTestSuite = "extensions/WikiEditor/selenium/WikiEditorTestSuite.php" diff --git a/maintenance/tests/selenium/selenium_settings.ini.sample b/maintenance/tests/selenium/selenium_settings.ini.sample new file mode 100644 index 00000000..bacc0a90 --- /dev/null +++ b/maintenance/tests/selenium/selenium_settings.ini.sample @@ -0,0 +1,32 @@ +[SeleniumSettings] + +; Set up the available browsers that Selenium can control. +browsers[firefox] = "*firefox" +browsers[iexplorer] = "*iexploreproxy" +browsers[chrome] = "*chrome" + +; The simple configurations above usually work on Linux, but Windows and +; Mac OS X hosts may need to specify a full path: +;browsers[firefox] = "*firefox /Applications/Firefox.app/Contents/MacOS/firefox-bin" +;browsers[firefox] = "*firefox C:\Program Files\Mozilla Firefox\firefox.exe" + +host = "localhost" +port = "4444" +wikiUrl = "http://localhost/deployment" +username = "wikiuser" +userPassword = "wikipass" +testBrowser = "firefox" +startserver = +stopserver = +jUnitLogFile = +runAgainstGrid = false + +; To let the test runner start and stop the selenium server, it needs the full +; path to selenium-server.jar from the selenium-remote-control package. +seleniumserverexecpath = "/opt/local/selenium-remote-control-1.0.3/selenium-server-1.0.3/selenium-server.jar" + +[SeleniumTests] + +testSuite[SimpleSeleniumTestSuite] = "maintenance/tests/selenium/suites/SimpleSeleniumTestSuite.php" +testSuite[WikiEditorTestSuite] = "extensions/WikiEditor/selenium/WikiEditorTestSuite.php" + diff --git a/maintenance/tests/selenium/selenium_settings_grid.ini.sample b/maintenance/tests/selenium/selenium_settings_grid.ini.sample new file mode 100644 index 00000000..eca60b0a --- /dev/null +++ b/maintenance/tests/selenium/selenium_settings_grid.ini.sample @@ -0,0 +1,14 @@ +[SeleniumSettings] + +host = "grid.tesla.usability.wikimedia.org" +port = "4444" +wikiUrl = "http://208.80.152.253:5001" +username = "wikiuser" +userPassword = "wikipass" +testBrowser = "Safari on OS X Snow Leopard" +jUnitLogFile = +runAgainstGrid = true + +[testSuite] + +SimpleSeleniumTestSuite = "maintenance/tests/selenium/suites/SimpleSeleniumTestSuite.php" \ No newline at end of file diff --git a/maintenance/tests/selenium/suites/AddContentToNewPageTestCase.php b/maintenance/tests/selenium/suites/AddContentToNewPageTestCase.php new file mode 100644 index 00000000..dd4bc005 --- /dev/null +++ b/maintenance/tests/selenium/suites/AddContentToNewPageTestCase.php @@ -0,0 +1,182 @@ + + * http://citizendium.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @addtogroup Maintenance + * + */ + + +class AddContentToNewPageTestCase extends SeleniumTestCase { + + + // Add bold text and verify output + public function testAddBoldText() { + + $this->getExistingPage(); + $this->clickEditLink(); + $this->loadWikiEditor(); + $this->clearWikiEditor(); + $this->click( "//*[@id='mw-editbutton-bold']" ); + $this->clickShowPreviewBtn(); + $this->waitForPageToLoad( "600000" ); + + // Verify bold text displayed on mediawiki preview + $this->assertTrue($this->isElementPresent( "//div[@id='wikiPreview']/p/b" )); + $this->assertTrue($this->isTextPresent( "Bold text" )); + } + + // Add italic text and verify output + public function testAddItalicText() { + + $this->getExistingPage(); + $this->clickEditLink(); + $this->loadWikiEditor(); + $this->clearWikiEditor(); + $this->click( "//*[@id='mw-editbutton-italic']" ); + $this->clickShowPreviewBtn(); + $this->waitForPageToLoad( "600000" ); + + // Verify italic text displayed on mediawiki preview + $this->assertTrue($this->isElementPresent("//div[@id='wikiPreview']/p/i")); + $this->assertTrue($this->isTextPresent( "Italic text" )); + } + + // Add internal link for a new page and verify output in the preview + public function testAddInternalLinkNewPage() { + $this->getExistingPage(); + $this->clickEditLink(); + $this->loadWikiEditor(); + $this->clearWikiEditor(); + $this->click( "//*[@id='mw-editbutton-link']" ); + $this->clickShowPreviewBtn(); + $this->waitForPageToLoad( "600000" ); + + // Verify internal link displayed on mediawiki preview + $source = $this->getText( "//*[@id='wikiPreview']/p/a" ); + $correct = strstr( $source, "Link title" ); + $this->assertEquals( $correct, true ); + + $this->click( "link=Link title" ); + $this->waitForPageToLoad( "600000" ); + + // Verify internal link open as a new page - editing mode + $source = $this->getText( "firstHeading" ); + $correct = strstr( $source, "Editing Link title" ); + $this->assertEquals( $correct, true ); + } + + // Add external link and verify output in the preview + public function testAddExternalLink() { + $this->getExistingPage(); + $this->clickEditLink(); + $this->loadWikiEditor(); + $this->clearWikiEditor(); + $this->click( "//*[@id='mw-editbutton-extlink']" ); + $this->type( "wpTextbox1", "[http://www.google.com Google]" ); + $this->clickShowPreviewBtn(); + $this->waitForPageToLoad( "600000" ); + + // Verify external links displayed on mediawiki preview + $source = $this->getText( "//*[@id='wikiPreview']/p/a" ); + $correct = strstr( $source, "Google" ); + $this->assertEquals( $correct, true ); + + $this->click( "link=Google" ); + $this->waitForPageToLoad( "600000" ); + + // Verify external link opens + $source = $this->getTitle(); + $correct = strstr( $source, "Google" ); + $this->assertEquals( $correct, true); + } + + // Add level 2 headline and verify output in the preview + public function testAddLevel2HeadLine() { + $blnElementPresent = False; + $blnTextPresent = False; + $this->getExistingPage(); + $this->clickEditLink(); + $this->loadWikiEditor(); + $this->clearWikiEditor(); + $this->click( "mw-editbutton-headline" ); + $this->clickShowPreviewBtn(); + $this->waitForPageToLoad( "600000" ); + $this->assertTrue($this->isElementPresent( "//div[@id='wikiPreview']/h2" )); + + // Verify level 2 headline displayed on mediawiki preview + $source = $this->getText( "//*[@id='Headline_text']" ); + $correct = strstr( $source, "Headline text" ); + $this->assertEquals( $correct, true ); + } + + // Add text with ignore wiki format and verify output the preview + public function testAddNoWikiFormat() { + $this->getExistingPage(); + $this->clickEditLink(); + $this->loadWikiEditor(); + $this->clearWikiEditor(); + $this->click( "//*[@id='mw-editbutton-nowiki']" ); + $this->clickShowPreviewBtn(); + $this->waitForPageToLoad( "600000" ); + + // Verify ignore wiki format text displayed on mediawiki preview + $source = $this->getText( "//div[@id='wikiPreview']/p" ); + $correct = strstr( $source, "Insert non-formatted text here" ); + $this->assertEquals( $correct, true ); + } + + // Add signature and verify output in the preview + public function testAddUserSignature() { + $this->getExistingPage(); + $this->clickEditLink(); + $this->loadWikiEditor(); + $this->clearWikiEditor(); + $this->click( "mw-editbutton-signature" ); + $this->clickShowPreviewBtn(); + $this->waitForPageToLoad( "600000" ); + + // Verify signature displayed on mediawiki preview + $source = $this->getText( "//*[@id='wikiPreview']/p/a" ); + $username = $this->getText( "//*[@id='pt-userpage']/a" ); + $correct = strstr( $source, $username ); + $this->assertEquals( $correct, true ); + } + + // Add horizontal line and verify output in the preview + public function testHorizontalLine() { + $this->getExistingPage(); + $this->clickEditLink(); + $this->loadWikiEditor(); + $this->clearWikiEditor(); + $this->click( "mw-editbutton-hr" ); + + $this->clickShowPreviewBtn(); + $this->waitForPageToLoad( "600000" ); + + // Verify horizontal line displayed on mediawiki preview + $this->assertTrue( $this->isElementPresent( "//div[@id='wikiPreview']/hr" )); + $this->deletePage( "new" ); + } +} diff --git a/maintenance/tests/selenium/suites/AddNewPageTestCase.php b/maintenance/tests/selenium/suites/AddNewPageTestCase.php new file mode 100644 index 00000000..423f2a2c --- /dev/null +++ b/maintenance/tests/selenium/suites/AddNewPageTestCase.php @@ -0,0 +1,65 @@ + + * http://citizendium.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @addtogroup Maintenance + * + */ + + +class AddNewPageTestCase extends SeleniumTestCase { + + // Verify adding a new page + public function testAddNewPage() { + $newPage = "new"; + $displayName = "New"; + $this->open( $this->getUrl() . + '/index.php?title=Main_Page&action=edit' ); + $this->type( "searchInput", $newPage ); + $this->click( "searchGoButton" ); + $this->waitForPageToLoad( "600000" ); + + // Verify 'Search results' text available + $source = $this->gettext( "firstHeading" ); + $correct = strstr( $source, "Search results" ); + $this->assertEquals( $correct, true); + + // Verify 'Create the page "" on this wiki' text available + $source = $this->gettext( "//div[@id='bodyContent']/div[4]/p/b" ); + $correct = strstr ( $source, "Create the page \"New\" on this wiki!" ); + $this->assertEquals( $correct, true ); + + $this->click( "link=".$displayName ); + $this->waitForPageToLoad( "600000" ); + + $this->assertTrue($this->isElementPresent( "link=Create" )); + $this->type( "wpTextbox1", "add new test page" ); + $this->click( "wpSave" ); + + // Verify new page added + $source = $this->gettext( "firstHeading" ); + $correct = strstr ( $source, $displayName ); + $this->assertEquals( $correct, true ); + } +} diff --git a/maintenance/tests/selenium/suites/CreateAccountTestCase.php b/maintenance/tests/selenium/suites/CreateAccountTestCase.php new file mode 100644 index 00000000..1cfda2e0 --- /dev/null +++ b/maintenance/tests/selenium/suites/CreateAccountTestCase.php @@ -0,0 +1,114 @@ + + * http://citizendium.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @addtogroup Maintenance + * + */ + +Class CreateAccountTestCase extends SeleniumTestCase { + + // Change these values before run the test + private $userName = "yourname4000"; + private $password = "yourpass4000"; + + // Verify 'Log in/create account' link existance in Main page. + public function testMainPageLink() { + + $this->click( "link=Log out" ); + $this->waitForPageToLoad( "30000" ); + + $this->open( $this->getUrl().'/index.php?title=Main_Page' ); + $this->assertTrue($this->isElementPresent( "link=Log in / create account" )); + } + + // Verify 'Create an account' link existance in 'Log in / create account' Page. + public function testCreateAccountPageLink() { + + $this->click( "link=Log out" ); + $this->waitForPageToLoad( "30000" ); + + $this->open( $this->getUrl().'/index.php?title=Main_Page' ); + + // click Log in / create account link to open Log in / create account' page + $this->click( "link=Log in / create account" ); + $this->waitForPageToLoad( "30000" ); + $this->assertTrue($this->isElementPresent( "link=Create an account" )); + } + + // Verify Create account + public function testCreateAccount() { + + $this->click( "link=Log out" ); + $this->waitForPageToLoad( "30000" ); + + $this->open( $this->getUrl().'/index.php?title=Main_Page' ); + + $this->click( "link=Log in / create account" ); + $this->waitForPageToLoad( "30000" ); + + $this->click( "link=Create an account" ); + $this->waitForPageToLoad( "30000" ); + + // Verify for blank user name + $this->type( "wpName2", "" ); + $this->click( "wpCreateaccount" ); + $this->waitForPageToLoad( "30000" ); + $this->assertEquals( "Login error\n You have not specified a valid user name.", + $this->getText( "//div[@id='bodyContent']/div[4]" )); + + // Verify for invalid user name + $this->type( "wpName2", "@" ); + $this->click("wpCreateaccount" ); + $this->waitForPageToLoad( "30000" ); + $this->assertEquals( "Login error\n You have not specified a valid user name.", + $this->getText( "//div[@id='bodyContent']/div[4]" )); + + // start of test for blank password + $this->type( "wpName2", $this->userName); + $this->type( "wpPassword2", "" ); + $this->click( "wpCreateaccount" ); + $this->waitForPageToLoad( "30000" ); + $this->assertEquals( "Login error\n Passwords must be at least 1 character.", + $this->getText("//div[@id='bodyContent']/div[4]" )); + + $this->type( "wpName2", $this->userName ); + $this->type( "wpPassword2", $this->password ); + $this->click( "wpCreateaccount" ); + $this->waitForPageToLoad( "30000" ); + $this->assertEquals( "Login error\n The passwords you entered do not match.", + $this->getText( "//div[@id='bodyContent']/div[4]" )); + + $this->type( "wpName2", $this->userName ); + $this->type( "wpPassword2", $this->password ); + $this->type( "wpRetype", $this->password ); + $this->click( "wpCreateaccount" ); + $this->waitForPageToLoad( "30000 "); + + // Verify successful account creation for valid combination of 'Username', 'Password', 'Retype password' + $this->assertEquals( "Welcome, ".ucfirst( $this->userName )."!", + $this->getText( "Welcome,_".ucfirst( $this->userName )."!" )); + } +} + diff --git a/maintenance/tests/selenium/suites/DeletePageAdminTestCase.php b/maintenance/tests/selenium/suites/DeletePageAdminTestCase.php new file mode 100644 index 00000000..40628986 --- /dev/null +++ b/maintenance/tests/selenium/suites/DeletePageAdminTestCase.php @@ -0,0 +1,89 @@ + + * http://citizendium.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @addtogroup Maintenance + * + */ + + +class DeletePageAdminTestCase extends SeleniumTestCase { + + // Verify adding a new page + public function testDeletePage() { + + + $newPage = "new"; + $displayName = "New"; + + $this->open( $this->getUrl().'/index.php?title=Main_Page' ); + + $this->type( "searchInput", $newPage ); + $this->click( "searchGoButton" ); + $this->waitForPageToLoad( "30000" ); + $this->click( "link=".$displayName ); + $this->waitForPageToLoad( "60000" ); + $this->type( "wpTextbox1", $newPage." text" ); + $this->click( "wpSave" ); + + $this->open( $this->getUrl() . + '/index.php?title=Main_Page&action=edit' ); + $this->click( "link=Log out" ); + $this->waitForPageToLoad( "30000" ); + $this->click( "link=Log in / create account" ); + $this->waitForPageToLoad( "30000" ); + + $this->type( "wpName1", $this->selenium->getUser() ); + $this->type( "wpPassword1", $this->selenium->getPass() ); + $this->click( "wpLoginAttempt" ); + $this->waitForPageToLoad( "30000" ); + $this->type( "searchInput", "new" ); + $this->click( "searchGoButton"); + $this->waitForPageToLoad( "30000" ); + + // Verify 'Delete' link displayed + $source = $this->gettext( "link=Delete" ); + $correct = strstr ( $source, "Delete" ); + $this->assertEquals($correct, true ); + + $this->click( "link=Delete" ); + $this->waitForPageToLoad( "30000" ); + + // Verify 'Delete' button available + $this->assertTrue($this->isElementPresent( "wpConfirmB" )); + + $this->click( "wpConfirmB" ); + $this->waitForPageToLoad( "30000" ); + + // Verify 'Action complete' text displayed + $source = $this->gettext( "firstHeading" ); + $correct = strstr ( $source, "Action complete" ); + $this->assertEquals( $correct, true ); + + // Verify ' has been deleted. See deletion log for a record of recent deletions.' text displayed + $source = $this->gettext( "//div[@id='bodyContent']/p[1]" ); + $correct = strstr ( $source, "\"New\" has been deleted. See deletion log for a record of recent deletions." ); + $this->assertEquals( $correct, true ); + } +} diff --git a/maintenance/tests/selenium/suites/EmailPasswordTestCase.php b/maintenance/tests/selenium/suites/EmailPasswordTestCase.php new file mode 100644 index 00000000..8356f43a --- /dev/null +++ b/maintenance/tests/selenium/suites/EmailPasswordTestCase.php @@ -0,0 +1,81 @@ + + * http://citizendium.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @addtogroup Maintenance + * + */ + +class EmailPasswordTestCase extends SeleniumTestCase { + + // change user name for each and every test (with in 24 hours) + private $userName = "test1"; + + public function testEmailPasswordButton() { + + $this->click( "link=Log out" ); + $this->waitForPageToLoad( "30000" ); + + $this->open( $this->getUrl().'/index.php?title=Main_Page' ); + + // click Log in / create account link to open Log in / create account' page + $this->click( "link=Log in / create account" ); + $this->waitForPageToLoad( "30000" ); + $this->assertTrue($this->isElementPresent( "wpMailmypassword" )); + } + + // Verify Email password functionality + public function testEmailPasswordMessages() { + + $this->click( "link=Log out" ); + $this->waitForPageToLoad( "30000" ); + + $this->open( $this->getUrl().'/index.php?title=Main_Page' ); + + // click Log in / create account link to open Log in / create account' page + $this->click( "link=Log in / create account" ); + $this->waitForPageToLoad( "30000" ); + + $this->type( "wpName1", "" ); + $this->click( "wpMailmypassword" ); + $this->waitForPageToLoad( "30000" ); + $this->assertEquals( "Login error\n You have not specified a valid user name.", + $this->getText("//div[@id='bodyContent']/div[4]")); + + $this->type( "wpName1", $this->userName ); + $this->click( "wpMailmypassword" ); + $this->waitForPageToLoad( "30000" ); + + // Can not run on localhost + $this->assertEquals( "A new password has been sent to the e-mail address registered for ".ucfirst($this->userName).". Please log in again after you receive it.", + $this->getText("//div[@id='bodyContent']/div[4]" )); + + $this->type( "wpName1", $this->userName ); + $this->click( "wpMailmypassword" ); + $this->waitForPageToLoad( "30000" ); + $this->assertEquals( "Login error\n A password reminder has already been sent, within the last 24 hours. To prevent abuse, only one password reminder will be sent per 24 hours.", + $this->getText( "//div[@id='bodyContent']/div[4]" )); + } +} + diff --git a/maintenance/tests/selenium/suites/MediaWikExtraTestSuite.php b/maintenance/tests/selenium/suites/MediaWikExtraTestSuite.php new file mode 100644 index 00000000..205cb332 --- /dev/null +++ b/maintenance/tests/selenium/suites/MediaWikExtraTestSuite.php @@ -0,0 +1,20 @@ +setLoginBeforeTests( true ); + parent::setUp(); + } + public function addTests() { + $testFiles = array( + 'maintenance/tests/selenium/suites/MyContributionsTestCase.php', + 'maintenance/tests/selenium/suites/MyWatchListTestCase.php', + 'maintenance/tests/selenium/suites/UserPreferencesTestCase.php', + 'maintenance/tests/selenium/suites/MovePageTestCase.php', + 'maintenance/tests/selenium/suites/PageSearchTestCase.php', + 'maintenance/tests/selenium/suites/EmailPasswordTestCase.php', + 'maintenance/tests/selenium/suites/CreateAccountTestCase.php' + ); + parent::addTestFiles( $testFiles ); + } +} diff --git a/maintenance/tests/selenium/suites/MediaWikiEditorConfig.php b/maintenance/tests/selenium/suites/MediaWikiEditorConfig.php new file mode 100644 index 00000000..2803117d --- /dev/null +++ b/maintenance/tests/selenium/suites/MediaWikiEditorConfig.php @@ -0,0 +1,47 @@ + + * http://citizendium.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @addtogroup Maintenance + * + */ + +class MediaWikiEditorConfig { + + public static function getSettings(&$includeFiles, &$globalConfigs) { + $includes = array( + //files that needed to be included would go here + 'maintenance/tests/selenium/suites/MediaWikiCommonFunction.php' + ); + $configs = array( + 'wgPageLoadTime' => "600000" + ); + $includeFiles = array_merge( $includeFiles, $includes ); + $globalConfigs = array_merge( $globalConfigs, $configs); + return true; + } +} + + + diff --git a/maintenance/tests/selenium/suites/MediaWikiEditorTestSuite.php b/maintenance/tests/selenium/suites/MediaWikiEditorTestSuite.php new file mode 100644 index 00000000..06046365 --- /dev/null +++ b/maintenance/tests/selenium/suites/MediaWikiEditorTestSuite.php @@ -0,0 +1,18 @@ +setLoginBeforeTests( true ); + parent::setUp(); + } + public function addTests() { + $testFiles = array( + 'maintenance/tests/selenium/suites/AddNewPageTestCase.php', + 'maintenance/tests/selenium/suites/AddContentToNewPageTestCase.php', + 'maintenance/tests/selenium/suites/PreviewPageTestCase.php', + 'maintenance/tests/selenium/suites/SavePageTestCase.php', + ); + parent::addTestFiles( $testFiles ); + } +} + diff --git a/maintenance/tests/selenium/suites/MediawikiCoreSmokeTestCase.php b/maintenance/tests/selenium/suites/MediawikiCoreSmokeTestCase.php new file mode 100644 index 00000000..7b9525af --- /dev/null +++ b/maintenance/tests/selenium/suites/MediawikiCoreSmokeTestCase.php @@ -0,0 +1,69 @@ +login(); + $this->open( $this->getUrl() . + '/index.php?title=Special:Upload' ); + $this->type( 'wpUploadFile', dirname( __FILE__ ) . + "\\..\\data\\Wikipedia-logo-v2-de.png" ); + $this->check( 'wpIgnoreWarning' ); + $this->click( 'wpUpload' ); + $this->waitForPageToLoad( 30000 ); + + $this->assertSeleniumHTMLContains( + '//h1[@class="firstHeading"]', "Wikipedia-logo-v2-de.png" ); + + /* + $this->open( $this->getUrl() . '/index.php?title=Image:' + . ucfirst( $this->filename ) . '&action=delete' ); + $this->type( 'wpReason', 'Remove test file' ); + $this->click( 'mw-filedelete-submit' ); + $this->waitForPageToLoad( 10000 ); + + // Todo: This message is localized + $this->assertSeleniumHTMLContains( '//div[@id="bodyContent"]/p', + ucfirst( $this->filename ) . '.*has been deleted.' ); + */ + } + + +} diff --git a/maintenance/tests/selenium/suites/MediawikiCoreSmokeTestSuite.php b/maintenance/tests/selenium/suites/MediawikiCoreSmokeTestSuite.php new file mode 100644 index 00000000..76287b23 --- /dev/null +++ b/maintenance/tests/selenium/suites/MediawikiCoreSmokeTestSuite.php @@ -0,0 +1,19 @@ +setLoginBeforeTests( false ); + parent::setUp(); + } + public function addTests() { + $testFiles = array( + 'maintenance/tests/selenium/suites/MediawikiCoreSmokeTestCase.php' + ); + parent::addTestFiles( $testFiles ); + } + + +} diff --git a/maintenance/tests/selenium/suites/MovePageTestCase.php b/maintenance/tests/selenium/suites/MovePageTestCase.php new file mode 100644 index 00000000..d4d3b1f2 --- /dev/null +++ b/maintenance/tests/selenium/suites/MovePageTestCase.php @@ -0,0 +1,117 @@ + + * http://citizendium.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @addtogroup Maintenance + * + */ + +class MovePageTestCase extends SeleniumTestCase { + + // Verify move(rename) wiki page + public function testMovePage() { + + $newPage = "mypage99"; + $displayName = "Mypage99"; + + $this->open( $this->getUrl() . + '/index.php?title=Main_Page&action=edit' ); + $this->type( "searchInput", $newPage ); + $this->click( "searchGoButton" ); + $this->waitForPageToLoad( "30000" ); + $this->click( "link=".$displayName ); + $this->waitForPageToLoad( "60000" ); + $this->type( "wpTextbox1", $newPage." text" ); + $this->click( "wpSave" ); + $this->waitForPageToLoad( "60000" ); + + // Verify link 'Move' available + $this->assertTrue($this->isElementPresent( "link=Move" )); + + $this->click( "link=Move" ); + $this->waitForPageToLoad( "30000" ); + + // Verify correct page name displayed under 'Move Page' field + $this->assertEquals($displayName, + $this->getText("//table[@id='mw-movepage-table']/tbody/tr[1]/td[2]/strong/a")); + $movePageName = $this->getText( "//table[@id='mw-movepage-table']/tbody/tr[1]/td[2]/strong/a" ); + + // Verify 'To new title' field has current page name as the default name + $newTitle = $this->getValue( "wpNewTitle" ); + $correct = strstr( $movePageName , $newTitle ); + $this->assertEquals( $correct, true ); + + $this->type( "wpNewTitle", $displayName ); + $this->click( "wpMove" ); + $this->waitForPageToLoad( "30000" ); + + // Verify warning message for the same source and destination titles + $this->assertEquals( "Source and destination titles are the same; cannot move a page over itself.", + $this->getText("//div[@id='bodyContent']/p[4]/strong" )); + + // Verify warning message for the blank title + $this->type( "wpNewTitle", "" ); + $this->click( "wpMove" ); + $this->waitForPageToLoad( "30000" ); + + // Verify warning message for the blank title + $this->assertEquals( "The requested page title was invalid, empty, or an incorrectly linked inter-language or inter-wiki title. It may contain one or more characters which cannot be used in titles.", + $this->getText( "//div[@id='bodyContent']/p[4]/strong" )); + + // Verify warning messages for the invalid titles + $this->type( "wpNewTitle", "# < > [ ] | { }" ); + $this->click( "wpMove" ); + $this->waitForPageToLoad( "30000" ); + $this->assertEquals( "The requested page title was invalid, empty, or an incorrectly linked inter-language or inter-wiki title. It may contain one or more characters which cannot be used in titles.", + $this->getText( "//div[@id='bodyContent']/p[4]/strong" )); + + $this->type( "wpNewTitle", $displayName."move" ); + $this->click( "wpMove" ); + $this->waitForPageToLoad( "30000" ); + + // Verify move success message displayed correctly + $this->assertEquals( "\"".$displayName."\" has been moved to \"".$displayName."move"."\"", + $this->getText( "//div[@id='bodyContent']/p[1]/b" )); + + $this->type( "searchInput", $newPage."move" ); + $this->click( "searchGoButton" ); + $this->waitForPageToLoad( "30000" ); + + // Verify search using new page name + $this->assertEquals( $displayName."move", $this->getText( "firstHeading" )); + + $this->type( "searchInput", $newPage ); + $this->click( "searchGoButton" ); + $this->waitForPageToLoad( "30000" ); + + // Verify search using old page name + $redirectPageName = $this->getText( "//*[@id='contentSub']" ); + $this->assertEquals( "(Redirected from ".$displayName.")" , $redirectPageName ); + + // newpage delete + $this->deletePage( $newPage."move" ); + $this->deletePage( $newPage ); + } +} + diff --git a/maintenance/tests/selenium/suites/MyContributionsTestCase.php b/maintenance/tests/selenium/suites/MyContributionsTestCase.php new file mode 100644 index 00000000..95011c3b --- /dev/null +++ b/maintenance/tests/selenium/suites/MyContributionsTestCase.php @@ -0,0 +1,76 @@ + + * http://citizendium.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @addtogroup Maintenance + * + */ + +class MyContributionsTestCase extends SeleniumTestCase { + + // Verify user contributions + public function testRecentChangesAvailability() { + + $newPage = "mypage999"; + $displayName = "Mypage999"; + + $this->open( $this->getUrl() . + '/index.php?title=Main_Page&action=edit' ); + + $this->type( "searchInput", $newPage); + $this->click( "searchGoButton" ); + $this->waitForPageToLoad( "60000" ); + $this->click( "link=".$displayName ); + $this->waitForPageToLoad( "600000" ); + $this->type( "wpTextbox1", $newPage." text" ); + $this->click( "wpSave" ); + $this->waitForPageToLoad( "60000" ); + + // Verify My contributions Link available + $this->assertTrue($this->isElementPresent( "link=My contributions" )); + + $this->click( "link=My contributions" ); + $this->waitForPageToLoad( "30000" ); + + // Verify recent page adding available on My Contributions list + $this->assertEquals( $displayName, $this->getText( "link=".$displayName )); + + $this->type( "searchInput", $newPage ); + $this->click( "searchGoButton" ); + $this->waitForPageToLoad( "30000" ); + + $this->click( "link=Edit" ); + $this->waitForPageToLoad( "30000" ); + $this->type( "wpTextbox1", $newPage." text changed" ); + $this->click( "wpSave" ); + $this->waitForPageToLoad( "30000" ); + $this->click( "link=My contributions" ); + $this->waitForPageToLoad( "30000" ); + + // Verify recent page changes available on My Contributions + $this->assertTrue($this->isTextPresent($displayName." ‎ (top)")); + $this->deletePage($newPage); + } +} + diff --git a/maintenance/tests/selenium/suites/MyWatchListTestCase.php b/maintenance/tests/selenium/suites/MyWatchListTestCase.php new file mode 100644 index 00000000..150c1f51 --- /dev/null +++ b/maintenance/tests/selenium/suites/MyWatchListTestCase.php @@ -0,0 +1,73 @@ + + * http://citizendium.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @addtogroup Maintenance + * + */ + + +class MyWatchListTestCase extends SeleniumTestCase { + + // Verify user watchlist + public function testMyWatchlist() { + + $newPage = "mypage"; + $displayName = "Mypage"; + $wikiText = "watch page"; + + $this->open( $this->getUrl().'/index.php?title=Main_Page' ); + + $this->type( "searchInput", $newPage ); + $this->click( "searchGoButton" ); + $this->waitForPageToLoad( "30000" ); + $this->click( "link=".$displayName ); + $this->waitForPageToLoad( "600000" ); + + $this->click( "wpWatchthis" ); + $this->type( "wpTextbox1",$wikiText ); + $this->click( "wpSave" ); + $this->waitForPageToLoad( "30000" ); + + // Verify link 'My Watchlist' available + $this->assertTrue( $this->isElementPresent( "link=My watchlist" ) ); + + $this->click( "link=My watchlist" ); + $this->waitForPageToLoad( "30000" ); + + // Verify newly added page to the watchlist is available + $watchList = $this->getText( "//*[@id='bodyContent']" ); + $this->assertContains( $displayName, $watchList ); + + $this->type( "searchInput", $newPage ); + $this->click( "searchGoButton" ); + $this->waitForPageToLoad( "30000" ); + $this->click("link=Edit"); + $this->waitForPageToLoad( "30000" ); + $this->click( "wpWatchthis" ); + $this->click( "wpSave" ); + $this->deletePage( $newPage ); + } +} + diff --git a/maintenance/tests/selenium/suites/PageDeleteTestSuite.php b/maintenance/tests/selenium/suites/PageDeleteTestSuite.php new file mode 100644 index 00000000..2e535c11 --- /dev/null +++ b/maintenance/tests/selenium/suites/PageDeleteTestSuite.php @@ -0,0 +1,16 @@ +setLoginBeforeTests( true ); + parent::setUp(); + } + public function addTests() { + $testFiles = array( + 'maintenance/tests/selenium/suites/DeletePageAdminTestCase.php' + ); + parent::addTestFiles( $testFiles ); + } + + +} diff --git a/maintenance/tests/selenium/suites/PageSearchTestCase.php b/maintenance/tests/selenium/suites/PageSearchTestCase.php new file mode 100644 index 00000000..e139f7a0 --- /dev/null +++ b/maintenance/tests/selenium/suites/PageSearchTestCase.php @@ -0,0 +1,105 @@ + + * http://citizendium.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @addtogroup Maintenance + * + */ + +class PageSearchTestCase extends SeleniumTestCase { + + // Verify the functionality of the 'Go' button + public function testPageSearchBtnGo() { + + $this->open( $this->getUrl() . + '/index.php?title=Main_Page&action=edit' ); + $this->type( "searchInput", "calcey qa" ); + $this->click( "searchGoButton" ); + $this->waitForPageToLoad( "600000" ); + + // Verify no page matched with the entered search text + $source = $this->gettext( "//div[@id='bodyContent']/div[4]/p/b" ); + $correct = strstr ( $source, "Create the page \"Calcey qa\" on this wiki!" ); + $this->assertEquals( $correct, true ); + + $this->click( "link=Calcey qa" ); + $this->waitForPageToLoad( "600000" ); + + $this->type( "wpTextbox1", "Calcey QA team" ); + $this->click( "wpSave" ); + $this->waitForPageToLoad( "600000" ); + + } + + // Verify the functionality of the 'Search' button + public function testPageSearchBtnSearch() { + + $this->open( $this->getUrl() . + '/index.php?title=Main_Page&action=edit' ); + $this->type( "searchInput", "Calcey web" ); + $this->click( "mw-searchButton" ); + $this->waitForPageToLoad( "30000" ); + + // Verify no page is available as the search text + $source = $this->gettext( "//div[@id='bodyContent']/div[4]/p[2]/b" ); + $correct = strstr ( $source, "Create the page \"Calcey web\" on this wiki!" ); + $this->assertEquals( $correct, true ); + + $this->click( "link=Calcey web" ); + $this->waitForPageToLoad( "600000" ); + + $this->type( "wpTextbox1", "Calcey web team" ); + $this->click( "wpSave" ); + $this->waitForPageToLoad( "600000" ); + + // Verify saved page is opened when the exact page name is given + $this->type( "searchInput", "Calcey web" ); + $this->click( "mw-searchButton" ); + $this->waitForPageToLoad( "30000" ); + + // Verify exact page matched with the entered search text using 'Search' button + $source = $this->getText( "//*[@id='bodyContent']/div[4]/p/b" ); + $correct = strstr( $source, "There is a page named \"Calcey web\" on this wiki." ); + $this->assertEquals( $correct, true ); + + // Verify resutls available when partial page name is entered as the search text + $this->type( "searchInput", "Calcey" ); + $this->click( "mw-searchButton" ); + $this->waitForPageToLoad( "30000" ); + + // Verify text avaialble in the search result under the page titles + if($this->isElementPresent( "Page_title_matches" )) { + $textPageTitle = $this->getText( "//*[@id='bodyContent']/div[4]/ul[1]/li[1]/div[1]/a" ); + $this->assertContains( 'Calcey', $textPageTitle ); + } + + // Verify text avaialble in the search result under the page text + if($this->isElementPresent( "Page_text_matches" )) { + $textPageText = $this->getText( "//*[@id='bodyContent']/div[4]/ul[2]/li[2]/div[2]/span" ); + $this->assertContains( 'Calcey', $textPageText ); + } + $this->deletePage("Calcey QA"); + $this->deletePage("Calcey web"); + } +} diff --git a/maintenance/tests/selenium/suites/PreviewPageTestCase.php b/maintenance/tests/selenium/suites/PreviewPageTestCase.php new file mode 100644 index 00000000..b704bf39 --- /dev/null +++ b/maintenance/tests/selenium/suites/PreviewPageTestCase.php @@ -0,0 +1,53 @@ + + * http://citizendium.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @addtogroup Maintenance + * + */ + +class PreviewPageTestCase extends SeleniumTestCase { + + // Verify adding a new page + public function testPreviewPage() { + $wikiText = "Adding this page to test the \n Preview button functionality"; + $newPage = "Test Preview Page"; + $this->open( $this->getUrl() . + '/index.php?title=Main_Page&action=edit' ); + $this->getNewPage( $newPage ); + $this->type( "wpTextbox1", $wikiText."" ); + $this->assertTrue($this->isElementPresent( "//*[@id='wpPreview']" )); + + $this->click( "wpPreview" ); + + // Verify saved page available + $source = $this->gettext( "firstHeading" ); + $correct = strstr( $source, "Test Preview Page" ); + $this->assertEquals( $correct, true); + + // Verify page content previewed succesfully + $contentOfPreviewPage = $this->getText( "//*[@id='content']" ); + $this->assertContains( $wikiText, $contentOfPreviewPage ); + } +} diff --git a/maintenance/tests/selenium/suites/SavePageTestCase.php b/maintenance/tests/selenium/suites/SavePageTestCase.php new file mode 100644 index 00000000..7f1a6924 --- /dev/null +++ b/maintenance/tests/selenium/suites/SavePageTestCase.php @@ -0,0 +1,58 @@ + + * http://citizendium.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @addtogroup Maintenance + * + */ + +class SavePageTestCase extends SeleniumTestCase { + + // Verify adding a new page + public function testSavePage() { + $wikiText = "Adding this page to test the Save button functionality"; + $newPage = "Test Save Page"; + + $this->open( $this->getUrl() . + '/index.php?title=Main_Page&action=edit' ); + $this->getNewPage($newPage); + $this->type("wpTextbox1", $wikiText); + + // verify 'Save' button available + $this->assertTrue($this->isElementPresent( "wpSave" )); + $this->click( "wpSave" ); + + // Verify saved page available + $source = $this->gettext( "firstHeading" ); + $correct = strstr( $source, "Test Save Page" ); + + // Verify Saved page name displayed correctly + $this->assertEquals( $correct, true ); + + // Verify page content saved succesfully + $contentOfSavedPage = $this->getText( "//*[@id='content']" ); + $this->assertContains( $wikiText, $contentOfSavedPage ); + $this->deletePage( $newPage ); + } +} diff --git a/maintenance/tests/selenium/suites/SimpleSeleniumConfig.php b/maintenance/tests/selenium/suites/SimpleSeleniumConfig.php new file mode 100644 index 00000000..cffa83c4 --- /dev/null +++ b/maintenance/tests/selenium/suites/SimpleSeleniumConfig.php @@ -0,0 +1,15 @@ + 'chick' + ); + $includeFiles = array_merge( $includeFiles, $includes ); + $globalConfigs = array_merge( $globalConfigs, $configs); + return true; + } +} \ No newline at end of file diff --git a/maintenance/tests/selenium/suites/SimpleSeleniumTestCase.php b/maintenance/tests/selenium/suites/SimpleSeleniumTestCase.php new file mode 100644 index 00000000..8f01b437 --- /dev/null +++ b/maintenance/tests/selenium/suites/SimpleSeleniumTestCase.php @@ -0,0 +1,30 @@ +open( $this->getUrl() . + '/index.php?title=Selenium&action=edit' ); + $this->type( "wpTextbox1", "This is a basic test" ); + $this->click( "wpPreview" ); + $this->waitForPageToLoad( 10000 ); + + // check result + $source = $this->getText( "//div[@id='wikiPreview']/p" ); + $correct = strstr( $source, "This is a basic test" ); + $this->assertEquals( $correct, true ); + } + + /* + * All this test really does is verify that a global var was set. + * It depends on $wgDefaultSkin = 'chick'; being set + */ + public function testGlobalVariableForDefaultSkin() { + $this->open( $this->getUrl() . '/index.php?&action=purge' ); + $bodyClass = $this->getAttribute( "//body/@class" ); + $this-> assertContains('skin-chick', $bodyClass, 'Chick skin not set'); + } + +} diff --git a/maintenance/tests/selenium/suites/SimpleSeleniumTestSuite.php b/maintenance/tests/selenium/suites/SimpleSeleniumTestSuite.php new file mode 100644 index 00000000..a04f33ed --- /dev/null +++ b/maintenance/tests/selenium/suites/SimpleSeleniumTestSuite.php @@ -0,0 +1,26 @@ +setLoginBeforeTests( false ); + parent::setUp(); + } + public function addTests() { + $testFiles = array( + 'maintenance/tests/selenium/suites/SimpleSeleniumTestCase.php' + ); + parent::addTestFiles( $testFiles ); + } + + +} diff --git a/maintenance/tests/selenium/suites/UserPreferencesTestCase.php b/maintenance/tests/selenium/suites/UserPreferencesTestCase.php new file mode 100644 index 00000000..12824307 --- /dev/null +++ b/maintenance/tests/selenium/suites/UserPreferencesTestCase.php @@ -0,0 +1,179 @@ + + * http://citizendium.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @addtogroup Maintenance + * + */ + +class UserPreferencesTestCase extends SeleniumTestCase { + + // Verify user information + public function testUserInfoDisplay() { + + $this->open( $this->getUrl() . + '/index.php?title=Main_Page&action=edit' ); + $this->click( "link=My preferences" ); + $this->waitForPageToLoad( "30000" ); + + // Verify correct username displayed in User Preferences + $this->assertEquals( $this->getText( "//li[@id='pt-userpage']/a" ), + $this->getText( "//table[@id='mw-htmlform-info']/tbody/tr[1]/td[2]" )); + + // Verify existing Signature Displayed correctly + $this->assertEquals( $this->selenium->getUser(), + $this->getTable( "mw-htmlform-signature.0.1" ) ); + } + + // Verify change password + public function testChangePassword() { + + $this->open( $this->getUrl() . + '/index.php?title=Main_Page&action=edit' ); + $this->click( "link=My preferences" ); + $this->waitForPageToLoad( "30000" ); + + $this->click( "link=Change password" ); + $this->waitForPageToLoad( "30000" ); + + $this->type( "wpPassword", "12345" ); + $this->type( "wpNewPassword", "54321" ); + $this->type( "wpRetype", "54321" ); + $this->click( "//input[@value='Change password']" ); + $this->waitForPageToLoad( "30000" ); + + $this->assertEquals( "Preferences", $this->getText( "firstHeading" )); + + $this->click( "link=Change password" ); + $this->waitForPageToLoad( "30000" ); + + $this->type( "wpPassword", "54321" ); + $this->type( "wpNewPassword", "12345" ); + $this->type( "wpRetype", "12345" ); + $this->click( "//input[@value='Change password']" ); + $this->waitForPageToLoad( "30000" ); + $this->assertEquals( "Preferences", $this->getText( "firstHeading" )); + + $this->click( "link=Change password" ); + $this->waitForPageToLoad( "30000" ); + + $this->type( "wpPassword", "54321" ); + $this->type( "wpNewPassword", "12345" ); + $this->type( "wpRetype", "12345" ); + $this->click( "//input[@value='Change password']" ); + $this->waitForPageToLoad( "30000" ); + } + + // Verify successful preferences save + public function testSuccessfullSave() { + + $this->open( $this->getUrl() . + '/index.php?title=Main_Page&action=edit' ); + $this->click( "link=My preferences" ); + $this->waitForPageToLoad( "30000" ); + + $this->type( "mw-input-realname", "Test User" ); + $this->click( "prefcontrol" ); + $this->waitForPageToLoad( "30000" ); + + // Verify "Your preferences have been saved." message + $this->assertEquals( "Your preferences have been saved.", + $this->getText( "//div[@id='bodyContent']/div[4]/strong/p" )); + $this->type( "mw-input-realname", "" ); + $this->click( "prefcontrol" ); + $this->waitForPageToLoad( "30000" ); + + } + + // Verify change signature + public function testChangeSignature() { + + $this->open( $this->getUrl() . + '/index.php?title=Main_Page&action=edit' ); + $this->click( "link=My preferences" ); + $this->waitForPageToLoad( "30000" ); + + $this->type( "mw-input-nickname", "TestSignature" ); + $this->click( "prefcontrol" ); + $this->waitForPageToLoad( "30000" ); + + // Verify change user signature + $this->assertEquals( "TestSignature", $this->getText( "link=TestSignature" )); + $this->type( "mw-input-nickname", "Test" ); + $this->click( "prefcontrol" ); + $this->waitForPageToLoad("30000"); + } + + // Verify change date format + public function testChangeDateFormatTimeZone() { + + $this->open( $this->getUrl() . + '/index.php?title=Main_Page&action=edit' ); + + $this->click( "link=My preferences" ); + $this->waitForPageToLoad( "30000" ); + $this->click( "link=Date and time" ); + $this->waitForPageToLoad( "30000" ); + + $this->click( "mw-input-date-dmy" ); + $this->select( "mw-input-timecorrection", "label=Asia/Colombo" ); + $this->click( "prefcontrol" ); + $this->waitForPageToLoad( "30000" ); + + // Verify Date format and time zome saved + $this->assertEquals( "Your preferences have been saved.", + $this->getText( "//div[@id='bodyContent']/div[4]/strong/p" )); + } + + // Verify restoring all default settings + public function testSetAllDefault() { + + $this->open( $this->getUrl() . + '/index.php?title=Main_Page&action=edit' ); + $this->click( "link=My preferences" ); + $this->waitForPageToLoad( "30000" ); + + // Verify restoring all default settings + $this->assertEquals( "Restore all default settings", + $this->getText( "link=Restore all default settings" )); + + $this->click("//*[@id='preferences']/div/a"); + $this->waitForPageToLoad("30000"); + + // Verify 'This can not be undone' warning message displayed + $this->assertTrue($this->isElementPresent("//input[@value='Restore all default settings']")); + + // Verify 'Restore all default settings' button available + $this->assertEquals("You can use this page to reset your preferences to the site defaults. This cannot be undone.", + $this->getText("//div[@id='bodyContent']/p")); + + $this->click("//input[@value='Restore all default settings']"); + $this->waitForPageToLoad("30000"); + + // Verify preferences saved successfully + $this->assertEquals("Your preferences have been saved.", + $this->getText("//div[@id='bodyContent']/div[4]/strong/p")); + } +} + diff --git a/maintenance/tests/test-prefetch-current.xml b/maintenance/tests/test-prefetch-current.xml deleted file mode 100644 index a4c8bda3..00000000 --- a/maintenance/tests/test-prefetch-current.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - DemoWiki - http://example.com/wiki/Main_Page - MediaWiki 1.5.0 - first-letter - - Media - Special - - Talk - User - User talk - DemoWiki - DemoWIki talk - Image - Image talk - MediaWiki - MediaWiki talk - Template - Template talk - Help - Help talk - Category - Category talk - - - - First page - 1 - - 1 - 2001-01-15T12:00:00Z - 10.0.0.1 - page 1, rev 1 - page 1, rev 1 - - - 2 - 2001-01-15T12:00:00Z - 10.0.0.1 - page 1, rev 2 - page 1, rev 2 - - - 4 - 2001-01-15T12:00:00Z - 10.0.0.1 - page 1, rev 4 - page 1, rev 4 - - - - Second page - 2 - - 3 - 2001-01-15T12:00:00Z - 10.0.0.1 - page 2, rev 3 - page 2, rev 3 - - - - Third page - 3 - - 5 - 2001-01-15T12:00:00Z - 10.0.0.1 - page 3, rev 5 - page 3, rev 5 - - - diff --git a/maintenance/tests/test-prefetch-previous.xml b/maintenance/tests/test-prefetch-previous.xml deleted file mode 100644 index 95eb82dd..00000000 --- a/maintenance/tests/test-prefetch-previous.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - DemoWiki - http://example.com/wiki/Main_Page - MediaWiki 1.5.0 - first-letter - - Media - Special - - Talk - User - User talk - DemoWiki - DemoWIki talk - Image - Image talk - MediaWiki - MediaWiki talk - Template - Template talk - Help - Help talk - Category - Category talk - - - - First page - 1 - - 1 - 2001-01-15T12:00:00Z - 10.0.0.1 - page 1, rev 1 - page 1, rev 1 - - - 2 - 2001-01-15T12:00:00Z - 10.0.0.1 - page 1, rev 2 - page 1, rev 2 - - - - Second page - 2 - - 3 - 2001-01-15T12:00:00Z - 10.0.0.1 - page 2, rev 3 - page 2, rev 3 - - - diff --git a/maintenance/tests/test-prefetch-stub.xml b/maintenance/tests/test-prefetch-stub.xml deleted file mode 100644 index 59d43d2f..00000000 --- a/maintenance/tests/test-prefetch-stub.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - DemoWiki - http://example.com/wiki/Main_Page - MediaWiki 1.5.0 - first-letter - - Media - Special - - Talk - User - User talk - DemoWiki - DemoWIki talk - Image - Image talk - MediaWiki - MediaWiki talk - Template - Template talk - Help - Help talk - Category - Category talk - - - - First page - 1 - - 1 - 2001-01-15T12:00:00Z - 10.0.0.1 - page 1, rev 1 - - - - 2 - 2001-01-15T12:00:00Z - 10.0.0.1 - page 1, rev 2 - - - - 4 - 2001-01-15T12:00:00Z - 10.0.0.1 - page 1, rev 4 - - - - - Second page - 2 - - 3 - 2001-01-15T12:00:00Z - 10.0.0.1 - page 2, rev 3 - - - - - Third page - 3 - - 5 - 2001-01-15T12:00:00Z - 10.0.0.1 - page 3, rev 5 - - - - diff --git a/maintenance/tests/testHelpers.inc b/maintenance/tests/testHelpers.inc new file mode 100644 index 00000000..94ca6abc --- /dev/null +++ b/maintenance/tests/testHelpers.inc @@ -0,0 +1,652 @@ +color( 0 ); + } +} + +/* A colour-less terminal */ +class DummyTermColorer { + public function color( $color ) { + return ''; + } + + public function reset() { + return ''; + } +} + +class TestRecorder { + var $parent; + var $term; + + function __construct( $parent ) { + $this->parent = $parent; + $this->term = $parent->term; + } + + function start() { + $this->total = 0; + $this->success = 0; + } + + function record( $test, $result ) { + $this->total++; + $this->success += ( $result ? 1 : 0 ); + } + + function end() { + // dummy + } + + function report() { + if ( $this->total > 0 ) { + $this->reportPercentage( $this->success, $this->total ); + } else { + wfDie( "No tests found.\n" ); + } + } + + function reportPercentage( $success, $total ) { + $ratio = wfPercent( 100 * $success / $total ); + print $this->term->color( 1 ) . "Passed $success of $total tests ($ratio)... "; + + if ( $success == $total ) { + print $this->term->color( 32 ) . "ALL TESTS PASSED!"; + } else { + $failed = $total - $success ; + print $this->term->color( 31 ) . "$failed tests failed!"; + } + + print $this->term->reset() . "\n"; + + return ( $success == $total ); + } +} + +class DbTestPreviewer extends TestRecorder { + protected $lb; // /< Database load balancer + protected $db; // /< Database connection to the main DB + protected $curRun; // /< run ID number for the current run + protected $prevRun; // /< run ID number for the previous run, if any + protected $results; // /< Result array + + /** + * This should be called before the table prefix is changed + */ + function __construct( $parent ) { + parent::__construct( $parent ); + + $this->lb = wfGetLBFactory()->newMainLB(); + // This connection will have the wiki's table prefix, not parsertest_ + $this->db = $this->lb->getConnection( DB_MASTER ); + } + + /** + * Set up result recording; insert a record for the run with the date + * and all that fun stuff + */ + function start() { + parent::start(); + + if ( ! $this->db->tableExists( 'testrun' ) + or ! $this->db->tableExists( 'testitem' ) ) + { + print "WARNING> `testrun` table not found in database.\n"; + $this->prevRun = false; + } else { + // We'll make comparisons against the previous run later... + $this->prevRun = $this->db->selectField( 'testrun', 'MAX(tr_id)' ); + } + + $this->results = array(); + } + + function record( $test, $result ) { + parent::record( $test, $result ); + $this->results[$test] = $result; + } + + function report() { + if ( $this->prevRun ) { + // f = fail, p = pass, n = nonexistent + // codes show before then after + $table = array( + 'fp' => 'previously failing test(s) now PASSING! :)', + 'pn' => 'previously PASSING test(s) removed o_O', + 'np' => 'new PASSING test(s) :)', + + 'pf' => 'previously passing test(s) now FAILING! :(', + 'fn' => 'previously FAILING test(s) removed O_o', + 'nf' => 'new FAILING test(s) :(', + 'ff' => 'still FAILING test(s) :(', + ); + + $prevResults = array(); + + $res = $this->db->select( 'testitem', array( 'ti_name', 'ti_success' ), + array( 'ti_run' => $this->prevRun ), __METHOD__ ); + + foreach ( $res as $row ) { + if ( !$this->parent->regex + || preg_match( "/{$this->parent->regex}/i", $row->ti_name ) ) + { + $prevResults[$row->ti_name] = $row->ti_success; + } + } + + $combined = array_keys( $this->results + $prevResults ); + + # Determine breakdown by change type + $breakdown = array(); + foreach ( $combined as $test ) { + if ( !isset( $prevResults[$test] ) ) { + $before = 'n'; + } elseif ( $prevResults[$test] == 1 ) { + $before = 'p'; + } else /* if ( $prevResults[$test] == 0 )*/ { + $before = 'f'; + } + + if ( !isset( $this->results[$test] ) ) { + $after = 'n'; + } elseif ( $this->results[$test] == 1 ) { + $after = 'p'; + } else /*if ( $this->results[$test] == 0 ) */ { + $after = 'f'; + } + + $code = $before . $after; + + if ( isset( $table[$code] ) ) { + $breakdown[$code][$test] = $this->getTestStatusInfo( $test, $after ); + } + } + + # Write out results + foreach ( $table as $code => $label ) { + if ( !empty( $breakdown[$code] ) ) { + $count = count( $breakdown[$code] ); + printf( "\n%4d %s\n", $count, $label ); + + foreach ( $breakdown[$code] as $differing_test_name => $statusInfo ) { + print " * $differing_test_name [$statusInfo]\n"; + } + } + } + } else { + print "No previous test runs to compare against.\n"; + } + + print "\n"; + parent::report(); + } + + /** + * Returns a string giving information about when a test last had a status change. + * Could help to track down when regressions were introduced, as distinct from tests + * which have never passed (which are more change requests than regressions). + */ + private function getTestStatusInfo( $testname, $after ) { + // If we're looking at a test that has just been removed, then say when it first appeared. + if ( $after == 'n' ) { + $changedRun = $this->db->selectField ( 'testitem', + 'MIN(ti_run)', + array( 'ti_name' => $testname ), + __METHOD__ ); + $appear = $this->db->selectRow ( 'testrun', + array( 'tr_date', 'tr_mw_version' ), + array( 'tr_id' => $changedRun ), + __METHOD__ ); + + return "First recorded appearance: " + . date( "d-M-Y H:i:s", strtotime ( $appear->tr_date ) ) + . ", " . $appear->tr_mw_version; + } + + // Otherwise, this test has previous recorded results. + // See when this test last had a different result to what we're seeing now. + $conds = array( + 'ti_name' => $testname, + 'ti_success' => ( $after == 'f' ? "1" : "0" ) ); + + if ( $this->curRun ) { + $conds[] = "ti_run != " . $this->db->addQuotes ( $this->curRun ); + } + + $changedRun = $this->db->selectField ( 'testitem', 'MAX(ti_run)', $conds, __METHOD__ ); + + // If no record of ever having had a different result. + if ( is_null ( $changedRun ) ) { + if ( $after == "f" ) { + return "Has never passed"; + } else { + return "Has never failed"; + } + } + + // Otherwise, we're looking at a test whose status has changed. + // (i.e. it used to work, but now doesn't; or used to fail, but is now fixed.) + // In this situation, give as much info as we can as to when it changed status. + $pre = $this->db->selectRow ( 'testrun', + array( 'tr_date', 'tr_mw_version' ), + array( 'tr_id' => $changedRun ), + __METHOD__ ); + $post = $this->db->selectRow ( 'testrun', + array( 'tr_date', 'tr_mw_version' ), + array( "tr_id > " . $this->db->addQuotes ( $changedRun ) ), + __METHOD__, + array( "LIMIT" => 1, "ORDER BY" => 'tr_id' ) + ); + + if ( $post ) { + $postDate = date( "d-M-Y H:i:s", strtotime ( $post->tr_date ) ) . ", {$post->tr_mw_version}"; + } else { + $postDate = 'now'; + } + + return ( $after == "f" ? "Introduced" : "Fixed" ) . " between " + . date( "d-M-Y H:i:s", strtotime ( $pre->tr_date ) ) . ", " . $pre->tr_mw_version + . " and $postDate"; + + } + + /** + * Commit transaction and clean up for result recording + */ + function end() { + $this->lb->commitMasterChanges(); + $this->lb->closeAll(); + parent::end(); + } + +} + +class DbTestRecorder extends DbTestPreviewer { + var $version; + + /** + * Set up result recording; insert a record for the run with the date + * and all that fun stuff + */ + function start() { + global $wgDBtype; + $this->db->begin(); + + if ( ! $this->db->tableExists( 'testrun' ) + or ! $this->db->tableExists( 'testitem' ) ) + { + print "WARNING> `testrun` table not found in database. Trying to create table.\n"; + $this->db->sourceFile( $this->db->patchPath( 'patch-testrun.sql' ) ); + echo "OK, resuming.\n"; + } + + parent::start(); + + $this->db->insert( 'testrun', + array( + 'tr_date' => $this->db->timestamp(), + 'tr_mw_version' => $this->version, + 'tr_php_version' => phpversion(), + 'tr_db_version' => $this->db->getServerVersion(), + 'tr_uname' => php_uname() + ), + __METHOD__ ); + if ( $wgDBtype === 'postgres' ) { + $this->curRun = $this->db->currentSequenceValue( 'testrun_id_seq' ); + } else { + $this->curRun = $this->db->insertId(); + } + } + + /** + * Record an individual test item's success or failure to the db + * + * @param $test String + * @param $result Boolean + */ + function record( $test, $result ) { + parent::record( $test, $result ); + + $this->db->insert( 'testitem', + array( + 'ti_run' => $this->curRun, + 'ti_name' => $test, + 'ti_success' => $result ? 1 : 0, + ), + __METHOD__ ); + } +} + +class RemoteTestRecorder extends TestRecorder { + function start() { + parent::start(); + + $this->results = array(); + $this->ping( 'running' ); + } + + function record( $test, $result ) { + parent::record( $test, $result ); + $this->results[$test] = (bool)$result; + } + + function end() { + $this->ping( 'complete', $this->results ); + parent::end(); + } + + /** + * Inform a CodeReview instance that we've started or completed a test run... + * + * @param $status string: "running" - tell it we've started + * "complete" - provide test results array + * "abort" - something went horribly awry + * @param $results array of test name => true/false + */ + function ping( $status, $results = false ) { + global $wgParserTestRemote, $IP; + + $remote = $wgParserTestRemote; + $revId = SpecialVersion::getSvnRevision( $IP ); + $jsonResults = FormatJson::encode( $results ); + + if ( !$remote ) { + print "Can't do remote upload without configuring \$wgParserTestRemote!\n"; + exit( 1 ); + } + + // Generate a hash MAC to validate our credentials + $message = array( + $remote['repo'], + $remote['suite'], + $revId, + $status, + ); + + if ( $status == "complete" ) { + $message[] = $jsonResults; + } + $hmac = hash_hmac( "sha1", implode( "|", $message ), $remote['secret'] ); + + $postData = array( + 'action' => 'codetestupload', + 'format' => 'json', + 'repo' => $remote['repo'], + 'suite' => $remote['suite'], + 'rev' => $revId, + 'status' => $status, + 'hmac' => $hmac, + ); + + if ( $status == "complete" ) { + $postData['results'] = $jsonResults; + } + + $response = $this->post( $remote['api-url'], $postData ); + + if ( $response === false ) { + print "CodeReview info upload failed to reach server.\n"; + exit( 1 ); + } + + $responseData = FormatJson::decode( $response, true ); + + if ( !is_array( $responseData ) ) { + print "CodeReview API response not recognized...\n"; + wfDebug( "Unrecognized CodeReview API response: $response\n" ); + exit( 1 ); + } + + if ( isset( $responseData['error'] ) ) { + $code = $responseData['error']['code']; + $info = $responseData['error']['info']; + print "CodeReview info upload failed: $code $info\n"; + exit( 1 ); + } + } + + function post( $url, $data ) { + return Http::post( $url, array( 'postData' => $data ) ); + } +} + +class TestFileIterator implements Iterator { + private $file; + private $fh; + private $parserTest; /* An instance of ParserTest (parserTests.php) or MediaWikiParserTest (phpunit) */ + private $index = 0; + private $test; + private $lineNum; + private $eof; + + function __construct( $file, $parserTest = null ) { + global $IP; + + $this->file = $file; + $this->fh = fopen( $this->file, "rt" ); + + if ( !$this->fh ) { + wfDie( "Couldn't open file '$file'\n" ); + } + + $this->parserTest = $parserTest; + + if ( $this->parserTest ) { + $this->parserTest->showRunFile( wfRelativePath( $this->file, $IP ) ); + } + + $this->lineNum = $this->index = 0; + } + + function rewind() { + if ( fseek( $this->fh, 0 ) ) { + wfDie( "Couldn't fseek to the start of '$this->file'\n" ); + } + + $this->index = -1; + $this->lineNum = 0; + $this->eof = false; + $this->next(); + + return true; + } + + function current() { + return $this->test; + } + + function key() { + return $this->index; + } + + function next() { + if ( $this->readNextTest() ) { + $this->index++; + return true; + } else { + $this->eof = true; + } + } + + function valid() { + return $this->eof != true; + } + + function readNextTest() { + $data = array(); + $section = null; + + while ( false !== ( $line = fgets( $this->fh ) ) ) { + $this->lineNum++; + $matches = array(); + + if ( preg_match( '/^!!\s*(\w+)/', $line, $matches ) ) { + $section = strtolower( $matches[1] ); + + if ( $section == 'endarticle' ) { + if ( !isset( $data['text'] ) ) { + wfDie( "'endarticle' without 'text' at line {$this->lineNum} of $this->file\n" ); + } + + if ( !isset( $data['article'] ) ) { + wfDie( "'endarticle' without 'article' at line {$this->lineNum} of $this->file\n" ); + } + + if ( $this->parserTest ) { + $this->parserTest->addArticle( ParserTest::chomp( $data['article'] ), $data['text'], $this->lineNum ); + } else {wfDie("JAJA"); + ParserTest::addArticle( $data['article'], $data['text'], $this->lineNum ); + } + $data = array(); + $section = null; + + continue; + } + + if ( $section == 'endhooks' ) { + if ( !isset( $data['hooks'] ) ) { + wfDie( "'endhooks' without 'hooks' at line {$this->lineNum} of $this->file\n" ); + } + + foreach ( explode( "\n", $data['hooks'] ) as $line ) { + $line = trim( $line ); + + if ( $line ) { + if ( $this->parserTest && !$this->parserTest->requireHook( $line ) ) { + return false; + } + } + } + + $data = array(); + $section = null; + + continue; + } + + if ( $section == 'endfunctionhooks' ) { + if ( !isset( $data['functionhooks'] ) ) { + wfDie( "'endfunctionhooks' without 'functionhooks' at line {$this->lineNum} of $this->file\n" ); + } + + foreach ( explode( "\n", $data['functionhooks'] ) as $line ) { + $line = trim( $line ); + + if ( $line ) { + if ( $this->parserTest && !$this->parserTest->requireFunctionHook( $line ) ) { + return false; + } + } + } + + $data = array(); + $section = null; + + continue; + } + + if ( $section == 'end' ) { + if ( !isset( $data['test'] ) ) { + wfDie( "'end' without 'test' at line {$this->lineNum} of $this->file\n" ); + } + + if ( !isset( $data['input'] ) ) { + wfDie( "'end' without 'input' at line {$this->lineNum} of $this->file\n" ); + } + + if ( !isset( $data['result'] ) ) { + wfDie( "'end' without 'result' at line {$this->lineNum} of $this->file\n" ); + } + + if ( !isset( $data['options'] ) ) { + $data['options'] = ''; + } + + if ( !isset( $data['config'] ) ) + $data['config'] = ''; + + if ( $this->parserTest + && ( ( preg_match( '/\\bdisabled\\b/i', $data['options'] ) && !$this->parserTest->runDisabled ) + || !preg_match( "/" . $this->parserTest->regex . "/i", $data['test'] ) ) ) { + # disabled test + $data = array(); + $section = null; + + continue; + } + + global $wgUseTeX; + + if ( $this->parserTest && + preg_match( '/\\bmath\\b/i', $data['options'] ) && !$wgUseTeX ) { + # don't run math tests if $wgUseTeX is set to false in LocalSettings + $data = array(); + $section = null; + + continue; + } + + if ( $this->parserTest ) { + $this->test = array( + 'test' => ParserTest::chomp( $data['test'] ), + 'input' => ParserTest::chomp( $data['input'] ), + 'result' => ParserTest::chomp( $data['result'] ), + 'options' => ParserTest::chomp( $data['options'] ), + 'config' => ParserTest::chomp( $data['config'] ) ); + } else { + $this->test['test'] = $data['test']; + } + + return true; + } + + if ( isset ( $data[$section] ) ) { + wfDie( "duplicate section '$section' at line {$this->lineNum} of $this->file\n" ); + } + + $data[$section] = ''; + + continue; + } + + if ( $section ) { + $data[$section] .= $line; + } + } + + return false; + } +} diff --git a/maintenance/undelete.php b/maintenance/undelete.php index 099ea88d..50bf791a 100644 --- a/maintenance/undelete.php +++ b/maintenance/undelete.php @@ -6,7 +6,7 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class Undelete extends Maintenance { public function __construct() { @@ -37,4 +37,4 @@ class Undelete extends Maintenance { } $maintClass = "Undelete"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/update.php b/maintenance/update.php index 5977a4c1..e3941a3c 100644 --- a/maintenance/update.php +++ b/maintenance/update.php @@ -3,58 +3,121 @@ * Run all updaters. * * This is used when the database schema is modified and we need to apply patches. + * It is kept compatible with php 4 parsing so that it can give out a meaningful error. * * @file * @todo document * @ingroup Maintenance */ -/** */ -define( 'MW_CMDLINE_CALLBACK', 'wfSetupUpdateScript' ); +if ( !function_exists( 'version_compare' ) || ( version_compare( phpversion(), '5.2.3' ) < 0 ) ) { + echo "You are using PHP version " . phpversion() . " but MediaWiki needs PHP 5.2.3 or higher. ABORTING.\n" . + "Check if you have a newer php executable with a different name, such as php5.\n"; + die( 1 ); +} + $wgUseMasterForMaintenance = true; -require_once( dirname(__FILE__) . '/commandLine.inc' ); -require( "updaters.inc" ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); -$wgTitle = Title::newFromText( "MediaWiki database updater" ); +class UpdateMediaWiki extends Maintenance { -echo( "MediaWiki {$wgVersion} Updater\n\n" ); + function __construct() { + parent::__construct(); + $this->mDescription = "MediaWiki database updater"; + $this->addOption( 'skip-compat-checks', 'Skips compatibility checks, mostly for developers' ); + $this->addOption( 'quick', 'Skip 5 second countdown before starting' ); + $this->addOption( 'doshared', 'Also update shared tables' ); + $this->addOption( 'nopurge', 'Do not purge the objectcache table after updates' ); + } -if( !isset( $options['skip-compat-checks'] ) ) { - install_version_checks(); -} else { - print "Skipping compatibility checks, proceed at your own risk (Ctrl+C to abort)\n"; - wfCountdown(5); -} + function getDbType() { + /* If we used the class constant PHP4 would give a parser error here */ + return 2 /* Maintenance::DB_ADMIN */; + } -# Attempt to connect to the database as a privileged user -# This will vomit up an error if there are permissions problems -$wgDatabase = wfGetDB( DB_MASTER ); + function compatChecks() { + $test = new PhpXmlBugTester(); + if ( !$test->ok ) { + $this->error( + "Your system has a combination of PHP and libxml2 versions which is buggy\n" . + "and can cause hidden data corruption in MediaWiki and other web apps.\n" . + "Upgrade to PHP 5.2.9 or later and libxml2 2.7.3 or later!\n" . + "ABORTING (see http://bugs.php.net/bug.php?id=45996).\n", + true ); + } -print "Going to run database updates for ".wfWikiID()."\n"; -print "Depending on the size of your database this may take a while!\n"; + $test = new PhpRefCallBugTester; + $test->execute(); + if ( !$test->ok ) { + $ver = phpversion(); + $this->error( + "PHP $ver is not compatible with MediaWiki due to a bug involving\n" . + "reference parameters to __call. Upgrade to PHP 5.3.2 or higher, or \n" . + "downgrade to PHP 5.3.0 to fix this.\n" . + "ABORTING (see http://bugs.php.net/bug.php?id=50394 for details)\n", + true ); + } + } -if( !isset( $options['quick'] ) ) { - print "Abort with control-c in the next five seconds (skip this countdown with --quick) ... "; - wfCountDown( 5 ); -} + function execute() { + global $wgVersion, $wgTitle, $wgLang; + + $wgLang = Language::factory( 'en' ); + $wgTitle = Title::newFromText( "MediaWiki database updater" ); + + $this->output( "MediaWiki {$wgVersion} Updater\n\n" ); + + if ( !$this->hasOption( 'skip-compat-checks' ) ) { + $this->compatChecks(); + } else { + $this->output( "Skipping compatibility checks, proceed at your own risk (Ctrl+C to abort)\n" ); + wfCountdown( 5 ); + } -$shared = isset( $options['doshared'] ); -$purge = !isset( $options['nopurge'] ); + # Attempt to connect to the database as a privileged user + # This will vomit up an error if there are permissions problems + $db = wfGetDB( DB_MASTER ); -do_all_updates( $shared, $purge ); + $this->output( "Going to run database updates for " . wfWikiID() . "\n" ); + $this->output( "Depending on the size of your database this may take a while!\n" ); -print "Done.\n"; + if ( !$this->hasOption( 'quick' ) ) { + $this->output( "Abort with control-c in the next five seconds (skip this countdown with --quick) ... " ); + wfCountDown( 5 ); + } -function wfSetupUpdateScript() { - global $wgLocalisationCacheConf; + $shared = $this->hasOption( 'doshared' ); - # Don't try to access the database - # This needs to be disabled early since extensions will try to use the l10n - # cache from $wgExtensionSetupFunctions (bug 20471) - $wgLocalisationCacheConf = array( - 'class' => 'LocalisationCache', - 'storeClass' => 'LCStore_Null', - 'storeDirectory' => false, - 'manualRecache' => false, - ); + $updates = array('core','extensions'); + if( !$this->hasOption('nopurge') ) { + $updates[] = 'purge'; + } + + $updater = DatabaseUpdater::newForDb( $db, $shared, $this ); + $updater->doUpdates( $updates ); + + foreach( $updater->getPostDatabaseUpdateMaintenance() as $maint ) { + $child = $this->runChild( $maint ); + $child->execute(); + } + + $this->output( "\nDone.\n" ); + } + + function afterFinalSetup() { + global $wgLocalisationCacheConf; + + # Don't try to access the database + # This needs to be disabled early since extensions will try to use the l10n + # cache from $wgExtensionFunctions (bug 20471) + $wgLocalisationCacheConf = array( + 'class' => 'LocalisationCache', + 'storeClass' => 'LCStore_Null', + 'storeDirectory' => false, + 'manualRecache' => false, + ); + } } + +$maintClass = 'UpdateMediaWiki'; +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/updateArticleCount.php b/maintenance/updateArticleCount.php index e6818458..b0dceb58 100644 --- a/maintenance/updateArticleCount.php +++ b/maintenance/updateArticleCount.php @@ -18,11 +18,12 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @ingroup Maintenance * @author Rob Church */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class UpdateArticleCount extends Maintenance { @@ -40,10 +41,10 @@ class UpdateArticleCount extends Maintenance { $this->namespaces = $wgContentNamespaces; $this->output( "Counting articles..." ); $result = $this->count(); - - if( $result !== false ) { + + if ( $result !== false ) { $this->output( "found {$result}.\n" ); - if( $this->hasOption( 'update' ) ) { + if ( $this->hasOption( 'update' ) ) { $this->output( "Updating site statistics table... " ); $dbw = wfGetDB( DB_MASTER ); $dbw->update( 'site_stats', array( 'ss_good_articles' => $result ), array( 'ss_row_id' => 1 ), __METHOD__ ); @@ -63,7 +64,7 @@ class UpdateArticleCount extends Maintenance { * @return string */ private function makeNsSet() { - foreach( $this->namespaces as $namespace ) + foreach ( $this->namespaces as $namespace ) $namespaces[] = intval( $namespace ); return implode( ', ', $namespaces ); } @@ -92,10 +93,9 @@ class UpdateArticleCount extends Maintenance { $dbr = wfGetDB( DB_SLAVE ); $res = $dbr->query( $this->makeSql( $dbr ), __METHOD__ ); $row = $dbr->fetchObject( $res ); - $dbr->freeResult( $res ); return $row ? $row->pagecount : false; } } $maintClass = "UpdateArticleCount"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/updateCollation.php b/maintenance/updateCollation.php new file mode 100644 index 00000000..e890bce7 --- /dev/null +++ b/maintenance/updateCollation.php @@ -0,0 +1,145 @@ +mDescription = <<addOption( 'force', 'Run on all rows, even if the collation is ' . + 'supposed to be up-to-date.' ); + } + + public function syncDBs() { + $lb = wfGetLB(); + // bug 27975 - Don't try to wait for slaves if there are none + // Prevents permission error when getting master position + if ( $lb->getServerCount() > 1 ) { + $dbw = $lb->getConnection( DB_MASTER ); + $pos = $dbw->getMasterPos(); + $lb->waitForAll( $pos ); + } + } + + public function execute() { + global $wgCategoryCollation, $wgMiserMode; + + $dbw = wfGetDB( DB_MASTER ); + $force = $this->getOption( 'force' ); + + $options = array( 'LIMIT' => self::BATCH_SIZE ); + + if ( $force ) { + $options['ORDER BY'] = 'cl_from, cl_to'; + $collationConds = array(); + } else { + $collationConds = array( 0 => + 'cl_collation != ' . $dbw->addQuotes( $wgCategoryCollation ) ); + + if ( !$wgMiserMode ) { + $count = $dbw->selectField( + 'categorylinks', + 'COUNT(*)', + $collationConds, + __METHOD__ + ); + + if ( $count == 0 ) { + $this->output( "Collations up-to-date.\n" ); + return; + } + $this->output( "Fixing collation for $count rows.\n" ); + } + } + + $count = 0; + $row = false; + $batchConds = array(); + do { + $this->output( 'Processing next ' . self::BATCH_SIZE . ' rows... '); + $res = $dbw->select( + array( 'categorylinks', 'page' ), + array( 'cl_from', 'cl_to', 'cl_sortkey_prefix', 'cl_collation', + 'cl_sortkey', 'page_namespace', 'page_title' + ), + array_merge( $collationConds, $batchConds, array( 'cl_from = page_id' ) ), + __METHOD__, + $options + ); + + $dbw->begin(); + foreach ( $res as $row ) { + $title = Title::newFromRow( $row ); + if ( !$row->cl_collation ) { + # This is an old-style row, so the sortkey needs to be + # converted. + if ( $row->cl_sortkey == $title->getText() + || $row->cl_sortkey == $title->getPrefixedText() ) { + $prefix = ''; + } else { + # Custom sortkey, use it as a prefix + $prefix = $row->cl_sortkey; + } + } else { + $prefix = $row->cl_sortkey_prefix; + } + # cl_type will be wrong for lots of pages if cl_collation is 0, + # so let's update it while we're here. + if ( $title->getNamespace() == NS_CATEGORY ) { + $type = 'subcat'; + } elseif ( $title->getNamespace() == NS_FILE ) { + $type = 'file'; + } else { + $type = 'page'; + } + $dbw->update( + 'categorylinks', + array( + 'cl_sortkey' => Collation::singleton()->getSortKey( + $title->getCategorySortkey( $prefix ) ), + 'cl_sortkey_prefix' => $prefix, + 'cl_collation' => $wgCategoryCollation, + 'cl_type' => $type, + 'cl_timestamp = cl_timestamp', + ), + array( 'cl_from' => $row->cl_from, 'cl_to' => $row->cl_to ), + __METHOD__ + ); + } + $dbw->commit(); + + if ( $force && $row ) { + $encFrom = $dbw->addQuotes( $row->cl_from ); + $encTo = $dbw->addQuotes( $row->cl_to ); + $batchConds = array( + "(cl_from = $encFrom AND cl_to > $encTo) " . + " OR cl_from > $encFrom" ); + } + + $count += $res->numRows(); + $this->output( "$count done.\n" ); + + $this->syncDBs(); + } while ( $res->numRows() == self::BATCH_SIZE ); + } +} + +$maintClass = "UpdateCollation"; +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/updateDoubleWidthSearch.php b/maintenance/updateDoubleWidthSearch.php new file mode 100644 index 00000000..bfbc441f --- /dev/null +++ b/maintenance/updateDoubleWidthSearch.php @@ -0,0 +1,71 @@ +mDescription = "Script to normalize double-byte latin UTF-8 characters"; + $this->addOption( 'q', 'quiet', false, true ); + $this->addOption( 'l', 'How long the searchindex and revision tables will be locked for', false, true ); + } + + public function getDbType() { + return Maintenance::DB_ADMIN; + } + + public function execute() { + $maxLockTime = $this->getOption( 'l', 20 ); + + $dbw = wfGetDB( DB_MASTER ); + if ( $dbw->getType() !== 'mysql' ) { + $this->output( "This change is only needed on MySQL, quitting.\n" ); + exit( 1 ); + } + + $res = $this->findRows( $dbw ); + $this->updateSearchIndex( $maxLockTime, array( $this, 'searchIndexUpdateCallback' ), $dbw, $res ); + + $this->output( "Done\n" ); + } + + public function searchIndexUpdateCallback( $dbw, $row ) { + return $this->updateSearchIndexForPage( $dbw, $row->si_page ); + } + + private function findRows( $dbw ) { + $searchindex = $dbw->tableName( 'searchindex' ); + $regexp = '[[:<:]]u8efbd([89][1-9a]|8[b-f]|90)[[:>:]]'; + $sql = "SELECT si_page FROM $searchindex + WHERE ( si_text RLIKE '$regexp' ) + OR ( si_title RLIKE '$regexp' )"; + return $dbw->query( $sql, __METHOD__ ); + } +} + +$maintClass = "UpdateDoubleWidthSearch"; +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/updateRestrictions.php b/maintenance/updateRestrictions.php index 80e98fd0..c815f4b9 100644 --- a/maintenance/updateRestrictions.php +++ b/maintenance/updateRestrictions.php @@ -20,10 +20,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class UpdateRestrictions extends Maintenance { public function __construct() { @@ -34,48 +35,48 @@ class UpdateRestrictions extends Maintenance { public function execute() { $db = wfGetDB( DB_MASTER ); - if( !$db->tableExists( 'page_restrictions' ) ) { + if ( !$db->tableExists( 'page_restrictions' ) ) { $this->error( "page_restrictions table does not exist", true ); } $start = $db->selectField( 'page', 'MIN(page_id)', false, __METHOD__ ); - if( !$start ) { + if ( !$start ) { $this->error( "Nothing to do.", true ); } $end = $db->selectField( 'page', 'MAX(page_id)', false, __METHOD__ ); - + # Do remaining chunk $end += $this->mBatchSize - 1; $blockStart = $start; $blockEnd = $start + $this->mBatchSize - 1; $encodedExpiry = 'infinity'; - while( $blockEnd <= $end ) { + while ( $blockEnd <= $end ) { $this->output( "...doing page_id from $blockStart to $blockEnd\n" ); $cond = "page_id BETWEEN $blockStart AND $blockEnd AND page_restrictions !=''"; - $res = $db->select( 'page', array('page_id','page_namespace','page_restrictions'), $cond, __METHOD__ ); + $res = $db->select( 'page', array( 'page_id', 'page_namespace', 'page_restrictions' ), $cond, __METHOD__ ); $batch = array(); - foreach( $res as $row ) { + foreach ( $res as $row ) { $oldRestrictions = array(); - foreach( explode( ':', trim( $row->page_restrictions ) ) as $restrict ) { + foreach ( explode( ':', trim( $row->page_restrictions ) ) as $restrict ) { $temp = explode( '=', trim( $restrict ) ); // Make sure we are not settings restrictions to "" - if( count($temp) == 1 && $temp[0] ) { + if ( count( $temp ) == 1 && $temp[0] ) { // old old format should be treated as edit/move restriction $oldRestrictions["edit"] = trim( $temp[0] ); $oldRestrictions["move"] = trim( $temp[0] ); - } else if( $temp[1] ) { + } else if ( $temp[1] ) { $oldRestrictions[$temp[0]] = trim( $temp[1] ); } } # Clear invalid columns - if( $row->page_namespace == NS_MEDIAWIKI ) { + if ( $row->page_namespace == NS_MEDIAWIKI ) { $db->update( 'page', array( 'page_restrictions' => '' ), array( 'page_id' => $row->page_id ), __FUNCTION__ ); $this->output( "...removed dead page_restrictions column for page {$row->page_id}\n" ); } # Update restrictions table - foreach( $oldRestrictions as $action => $restrictions ) { - $batch[] = array( + foreach ( $oldRestrictions as $action => $restrictions ) { + $batch[] = array( 'pr_page' => $row->page_id, 'pr_type' => $action, 'pr_level' => $restrictions, @@ -87,9 +88,9 @@ class UpdateRestrictions extends Maintenance { # We use insert() and not replace() as Article.php replaces # page_restrictions with '' when protected in the restrictions table if ( count( $batch ) ) { - $ok = $db->deadlockLoop( array( $db, 'insert' ), 'page_restrictions', + $ok = $db->deadlockLoop( array( $db, 'insert' ), 'page_restrictions', $batch, __FUNCTION__, array( 'IGNORE' ) ); - if( !$ok ) { + if ( !$ok ) { throw new MWException( "Deadlock loop failed wtf :(" ); } } @@ -101,10 +102,10 @@ class UpdateRestrictions extends Maintenance { // Kill any broken rows from previous imports $db->delete( 'page_restrictions', array( 'pr_level' => '' ) ); // Kill other invalid rows - $db->deleteJoin( 'page_restrictions', 'page', 'pr_page', 'page_id', array('page_namespace' => NS_MEDIAWIKI) ); + $db->deleteJoin( 'page_restrictions', 'page', 'pr_page', 'page_id', array( 'page_namespace' => NS_MEDIAWIKI ) ); $this->output( "...Done!\n" ); } } $maintClass = "UpdateRestrictions"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/updateSearchIndex.php b/maintenance/updateSearchIndex.php index 152ce1b6..97863101 100644 --- a/maintenance/updateSearchIndex.php +++ b/maintenance/updateSearchIndex.php @@ -24,10 +24,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @ingroup Maintenance */ - -require_once( dirname(__FILE__) . '/Maintenance.php' ); + +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class UpdateSearchIndex extends Maintenance { @@ -48,8 +49,8 @@ class UpdateSearchIndex extends Maintenance { $posFile = $this->getOption( 'p', 'searchUpdate.' . wfWikiId() . '.pos' ); $end = $this->getOption( 'e', wfTimestampNow() ); if ( $this->hasOption( 's' ) ) { - $start = $this->getOption('s'); - } elseif( is_readable( 'searchUpdate.pos' ) ) { + $start = $this->getOption( 's' ); + } elseif ( is_readable( 'searchUpdate.pos' ) ) { # B/c to the old position file name which was hardcoded # We can safely delete the file when we're done though. $start = file_get_contents( 'searchUpdate.pos' ); @@ -61,13 +62,21 @@ class UpdateSearchIndex extends Maintenance { } } $lockTime = $this->getOption( 'l', 20 ); - + $this->doUpdateSearchIndex( $start, $end, $lockTime ); - $file = fopen( $posFile, 'w' ); - fwrite( $file, $end ); - fclose( $file ); + if ( is_writable( dirname( realpath( $posFile ) ) ) ) { + $file = fopen( $posFile, 'w' ); + if ( $file !== false ) { + fwrite( $file, $end ); + fclose( $file ); + } else { + $this->output( "*** Couldn't write to the $posFile!\n" ); + } + } else { + $this->output( "*** Couldn't write to the $posFile!\n" ); + } } - + private function doUpdateSearchIndex( $start, $end, $maxLockTime ) { global $wgDisableSearchUpdate; @@ -89,85 +98,25 @@ class UpdateSearchIndex extends Maintenance { "; $res = $dbw->query( $sql, __METHOD__ ); + $this->updateSearchIndex( $maxLockTime, array( $this, 'searchIndexUpdateCallback' ), $dbw, $res ); - # Lock searchindex - if ( $maxLockTime ) { - $this->output( " --- Waiting for lock ---" ); - $this->lockSearchindex( $dbw ); - $lockTime = time(); - $this->output( "\n" ); - } - - # Loop through the results and do a search update - foreach ( $res as $row ) { - # Allow reads to be processed - if ( $maxLockTime && time() > $lockTime + $maxLockTime ) { - $this->output( " --- Relocking ---" ); - $this->relockSearchindex( $dbw ); - $lockTime = time(); - $this->output( "\n" ); - } - if ( $row->rc_type == RC_LOG ) { - continue; - } elseif ( $row->rc_type == RC_MOVE || $row->rc_type == RC_MOVE_OVER_REDIRECT ) { - # Rename searchindex entry - $titleObj = Title::makeTitle( $row->rc_moved_to_ns, $row->rc_moved_to_title ); - $title = $titleObj->getPrefixedDBkey(); - $this->output( "$title..." ); - $u = new SearchUpdate( $row->rc_cur_id, $title, false ); - $this->output( "\n" ); - } else { - // Get current revision - $rev = Revision::loadFromPageId( $dbw, $row->rc_cur_id ); - if( $rev ) { - $titleObj = $rev->getTitle(); - $title = $titleObj->getPrefixedDBkey(); - $this->output( $title ); - # Update searchindex - $u = new SearchUpdate( $row->rc_cur_id, $titleObj->getText(), $rev->getText() ); - $u->doUpdate(); - $this->output( "\n" ); - } - } - } - - # Unlock searchindex - if ( $maxLockTime ) { - $this->output( " --- Unlocking --" ); - $this->unlockSearchindex( $dbw ); - $this->output( "\n" ); - } $this->output( "Done\n" ); } - /** - * Lock the search index - * @param &$db Database object - */ - private function lockSearchindex( &$db ) { - $write = array( 'searchindex' ); - $read = array( 'page', 'revision', 'text', 'interwiki' ); - $db->lockTables( $read, $write, 'updateSearchIndex.php ' . __METHOD__ ); - } - - /** - * Unlock the tables - * @param &$db Database object - */ - private function unlockSearchindex( &$db ) { - $db->unlockTables( 'updateSearchIndex.php ' . __METHOD__ ); - } - - /** - * Unlock and lock again - * Since the lock is low-priority, queued reads will be able to complete - * @param &$db Database object - */ - private function relockSearchindex( &$db ) { - $this->unlockSearchindex( $db ); - $this->lockSearchindex( $db ); + public function searchIndexUpdateCallback( $dbw, $row ) { + if ( $row->rc_type == RC_MOVE || $row->rc_type == RC_MOVE_OVER_REDIRECT ) { + # Rename searchindex entry + $titleObj = Title::makeTitle( $row->rc_moved_to_ns, $row->rc_moved_to_title ); + $title = $titleObj->getPrefixedDBkey(); + $this->output( "$title..." ); + $u = new SearchUpdate( $row->rc_cur_id, $title, false ); + $u->doUpdate(); + $this->output( "\n" ); + } elseif ( $row->rc_type !== RC_LOG ) { + $this->updateSearchIndexForPage( $dbw, $row->rc_cur_id ); + } } } $maintClass = "UpdateSearchIndex"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/updateSpecialPages.php b/maintenance/updateSpecialPages.php index aaad3714..3e5df982 100644 --- a/maintenance/updateSpecialPages.php +++ b/maintenance/updateSpecialPages.php @@ -18,10 +18,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @ingroup Maintenance */ - -require_once( dirname(__FILE__) . '/Maintenance.php' ); + +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class UpdateSpecialPages extends Maintenance { public function __construct() { @@ -36,8 +37,8 @@ class UpdateSpecialPages extends Maintenance { $wgOut->disable(); $dbw = wfGetDB( DB_MASTER ); - foreach( $wgSpecialPageCacheUpdates as $special => $call ) { - if( !is_callable($call) ) { + foreach ( $wgSpecialPageCacheUpdates as $special => $call ) { + if ( !is_callable( $call ) ) { $this->error( "Uncallable function $call!" ); continue; } @@ -45,7 +46,7 @@ class UpdateSpecialPages extends Maintenance { call_user_func( $call, $dbw ); $t2 = explode( ' ', microtime() ); $this->output( sprintf( '%-30s ', $special ) ); - $elapsed = ($t2[0] - $t1[0]) + ($t2[1] - $t1[1]); + $elapsed = ( $t2[0] - $t1[0] ) + ( $t2[1] - $t1[1] ); $hours = intval( $elapsed / 3600 ); $minutes = intval( $elapsed % 3600 / 60 ); $seconds = $elapsed - $hours * 3600 - $minutes * 60; @@ -63,16 +64,16 @@ class UpdateSpecialPages extends Maintenance { // This is needed to initialise $wgQueryPages require_once( "$IP/includes/QueryPage.php" ); - foreach( $wgQueryPages as $page ) { + foreach ( $wgQueryPages as $page ) { @list( $class, $special, $limit ) = $page; # --list : just show the name of pages - if( $this->hasOption('list') ) { + if ( $this->hasOption( 'list' ) ) { $this->output( "$special\n" ); continue; } - if ( !$this->hasOption('override') && $wgDisableQueryPageUpdate && in_array( $special, $wgDisableQueryPageUpdate ) ) { + if ( !$this->hasOption( 'override' ) && $wgDisableQueryPageUpdate && in_array( $special, $wgDisableQueryPageUpdate ) ) { $this->output( sprintf( "%-30s disabled\n", $special ) ); continue; } @@ -88,7 +89,7 @@ class UpdateSpecialPages extends Maintenance { } $queryPage = new $class; - if( !$this->hasOption('only') || $this->getOption('only') == $queryPage->getName() ) { + if ( !$this->hasOption( 'only' ) || $this->getOption( 'only' ) == $queryPage->getName() ) { $this->output( sprintf( '%-30s ', $special ) ); if ( $queryPage->isExpensive() ) { $t1 = explode( ' ', microtime() ); @@ -100,7 +101,7 @@ class UpdateSpecialPages extends Maintenance { } else { $this->output( "got $num rows in " ); - $elapsed = ($t2[0] - $t1[0]) + ($t2[1] - $t1[1]); + $elapsed = ( $t2[0] - $t1[0] ) + ( $t2[1] - $t1[1] ); $hours = intval( $elapsed / 3600 ); $minutes = intval( $elapsed % 3600 / 60 ); $seconds = $elapsed - $hours * 3600 - $minutes * 60; @@ -113,7 +114,7 @@ class UpdateSpecialPages extends Maintenance { $this->output( sprintf( "%.2fs\n", $seconds ) ); } # Reopen any connections that have closed - if ( !wfGetLB()->pingAll()) { + if ( !wfGetLB()->pingAll() ) { $this->output( "\n" ); do { $this->error( "Connection failed, reconnecting in 10 seconds..." ); @@ -135,4 +136,4 @@ class UpdateSpecialPages extends Maintenance { } $maintClass = "UpdateSpecialPages"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/updaters.inc b/maintenance/updaters.inc deleted file mode 100644 index 594d4d78..00000000 --- a/maintenance/updaters.inc +++ /dev/null @@ -1,1979 +0,0 @@ - array( - // 1.2 - // update_passwords obsolete - array( 'add_field', 'ipblocks', 'ipb_id', 'patch-ipblocks.sql' ), - array( 'add_field', 'ipblocks', 'ipb_expiry', 'patch-ipb_expiry.sql' ), - array( 'do_interwiki_update' ), - array( 'do_index_update' ), - // do_linkscc_update obsolete - array( 'add_table', 'hitcounter', 'patch-hitcounter.sql' ), - array( 'add_field', 'recentchanges', 'rc_type', 'patch-rc_type.sql' ), - - // 1.3 - array( 'add_field', 'user', 'user_real_name', 'patch-user-realname.sql' ), - array( 'add_table', 'querycache', 'patch-querycache.sql' ), - array( 'add_table', 'objectcache', 'patch-objectcache.sql' ), - array( 'add_table', 'categorylinks', 'patch-categorylinks.sql' ), - // do_linkscc_1_3_update obsolete - array( 'do_old_links_update' ), - array( 'fix_ancient_imagelinks' ), - array( 'add_field', 'recentchanges', 'rc_ip', 'patch-rc_ip.sql' ), - - // 1.4 - array( 'do_image_name_unique_update' ), - array( 'add_field', 'recentchanges', 'rc_id', 'patch-rc_id.sql' ), - array( 'add_field', 'recentchanges', 'rc_patrolled', 'patch-rc-patrol.sql' ), - array( 'add_table', 'logging', 'patch-logging.sql' ), - // do_user_rights_update obsolete - array( 'add_field', 'user', 'user_token', 'patch-user_token.sql' ), - // old, old_articleid, patch-remove-old-title-namespace.sql obsolete - // user_groups, patch-userlevels.sql obsolete - // do_group_update() obsolete - array( 'do_watchlist_update' ), - array( 'do_user_update' ), - // do_copy_newtalk_to_watchlist obsolete - - // 1.5 - array( 'do_schema_restructuring' ), - array( 'add_field', 'logging', 'log_params', 'patch-log_params.sql' ), - array( 'check_bin', 'logging', 'log_title', 'patch-logging-title.sql', ), - array( 'add_field', 'archive', 'ar_rev_id', 'patch-archive-rev_id.sql' ), - array( 'add_field', 'page', 'page_len', 'patch-page_len.sql' ), - array( 'do_inverse_timestamp' ), - array( 'do_text_id' ), - array( 'add_field', 'revision', 'rev_deleted', 'patch-rev_deleted.sql' ), - array( 'add_field', 'image', 'img_width', 'patch-img_width.sql' ), - array( 'add_field', 'image', 'img_metadata', 'patch-img_metadata.sql' ), - array( 'add_field', 'user', 'user_email_token', 'patch-user_email_token.sql' ), - array( 'add_field', 'archive', 'ar_text_id', 'patch-archive-text_id.sql' ), - array( 'do_namespace_size' ), - array( 'add_field', 'image', 'img_media_type', 'patch-img_media_type.sql' ), - array( 'do_pagelinks_update' ), - array( 'do_drop_img_type' ), - array( 'do_user_unique_update' ), - array( 'do_user_groups_update' ), - array( 'add_field', 'site_stats', 'ss_total_pages', 'patch-ss_total_articles.sql' ), - array( 'add_table', 'user_newtalk', 'patch-usernewtalk2.sql' ), - array( 'add_table', 'transcache', 'patch-transcache.sql' ), - array( 'add_field', 'interwiki', 'iw_trans', 'patch-interwiki-trans.sql' ), - array( 'add_table', 'trackbacks', 'patch-trackbacks.sql' ), - - // 1.6 - array( 'do_watchlist_null' ), - // do_image_index_update obsolete - array( 'do_logging_timestamp_index' ), - array( 'add_field', 'ipblocks', 'ipb_range_start', 'patch-ipb_range_start.sql' ), - array( 'do_page_random_update' ), - array( 'add_field', 'user', 'user_registration','patch-user_registration.sql' ), - array( 'do_templatelinks_update' ), - array( 'add_table', 'externallinks', 'patch-externallinks.sql' ), - array( 'add_table', 'job', 'patch-job.sql' ), - array( 'add_field', 'site_stats', 'ss_images', 'patch-ss_images.sql' ), - array( 'add_table', 'langlinks', 'patch-langlinks.sql' ), - array( 'add_table', 'querycache_info', 'patch-querycacheinfo.sql' ), - array( 'add_table', 'filearchive', 'patch-filearchive.sql' ), - array( 'add_field', 'ipblocks', 'ipb_anon_only', 'patch-ipb_anon_only.sql' ), - array( 'do_rc_indices_update' ), - - // 1.9 - array( 'add_field', 'user', 'user_newpass_time', 'patch-user_newpass_time.sql' ), - array( 'add_table', 'redirect', 'patch-redirect.sql' ), - array( 'add_table', 'querycachetwo', 'patch-querycachetwo.sql' ), - array( 'add_field', 'ipblocks', 'ipb_enable_autoblock', 'patch-ipb_optional_autoblock.sql' ), - array( 'do_backlinking_indices_update' ), - array( 'add_field', 'recentchanges', 'rc_old_len', 'patch-rc_len.sql' ), - array( 'add_field', 'user', 'user_editcount', 'patch-user_editcount.sql' ), - - // 1.10 - array( 'do_restrictions_update' ), - array( 'add_field', 'logging', 'log_id', 'patch-log_id.sql' ), - array( 'add_field', 'revision', 'rev_parent_id', 'patch-rev_parent_id.sql' ), - array( 'add_field', 'page_restrictions', 'pr_id', 'patch-page_restrictions_sortkey.sql' ), - array( 'add_field', 'revision', 'rev_len', 'patch-rev_len.sql' ), - array( 'add_field', 'recentchanges', 'rc_deleted', 'patch-rc_deleted.sql' ), - array( 'add_field', 'logging', 'log_deleted', 'patch-log_deleted.sql' ), - array( 'add_field', 'archive', 'ar_deleted', 'patch-ar_deleted.sql' ), - array( 'add_field', 'ipblocks', 'ipb_deleted', 'patch-ipb_deleted.sql' ), - array( 'add_field', 'filearchive', 'fa_deleted', 'patch-fa_deleted.sql' ), - array( 'add_field', 'archive', 'ar_len', 'patch-ar_len.sql' ), - - // 1.11 - array( 'add_field', 'ipblocks', 'ipb_block_email', 'patch-ipb_emailban.sql' ), - array( 'do_categorylinks_indices_update' ), - array( 'add_field', 'oldimage', 'oi_metadata', 'patch-oi_metadata.sql'), - array( 'do_archive_user_index' ), - array( 'do_image_user_index' ), - array( 'do_oldimage_user_index' ), - array( 'add_field', 'archive', 'ar_page_id', 'patch-archive-page_id.sql'), - array( 'add_field', 'image', 'img_sha1', 'patch-img_sha1.sql' ), - - // 1.12 - array( 'add_table', 'protected_titles', 'patch-protected_titles.sql' ), - - // 1.13 - array( 'add_field', 'ipblocks', 'ipb_by_text', 'patch-ipb_by_text.sql' ), - array( 'add_table', 'page_props', 'patch-page_props.sql' ), - array( 'add_table', 'updatelog', 'patch-updatelog.sql' ), - array( 'add_table', 'category', 'patch-category.sql' ), - array( 'do_category_population' ), - array( 'add_field', 'archive', 'ar_parent_id', 'patch-ar_parent_id.sql'), - array( 'add_field', 'user_newtalk', 'user_last_timestamp', 'patch-user_last_timestamp.sql'), - array( 'do_populate_parent_id' ), - array( 'check_bin', 'protected_titles', 'pt_title', 'patch-pt_title-encoding.sql', ), - array( 'maybe_do_profiling_memory_update' ), - array( 'do_filearchive_indices_update' ), - - // 1.14 - array( 'add_field', 'site_stats', 'ss_active_users', 'patch-ss_active_users.sql' ), - array( 'do_active_users_init' ), - array( 'add_field', 'ipblocks', 'ipb_allow_usertalk', 'patch-ipb_allow_usertalk.sql' ), - - // 1.15 - array( 'do_unique_pl_tl_il' ), - array( 'add_table', 'change_tag', 'patch-change_tag.sql' ), - array( 'add_table', 'tag_summary', 'patch-change_tag.sql' ), - array( 'add_table', 'valid_tag', 'patch-change_tag.sql' ), - - // 1.16 - array( 'add_table', 'user_properties', 'patch-user_properties.sql' ), - array( 'add_table', 'log_search', 'patch-log_search.sql' ), - array( 'do_log_search_population' ), - array( 'add_field', 'logging', 'log_user_text', 'patch-log_user_text.sql' ), - array( 'add_table', 'l10n_cache', 'patch-l10n_cache.sql' ), - array( 'add_table', 'external_user', 'patch-external_user.sql' ), - array( 'add_index', 'log_search', 'ls_field_val', 'patch-log_search-rename-index.sql' ), - array( 'add_index', 'change_tag', 'change_tag_rc_tag', 'patch-change_tag-indexes.sql' ), - array( 'add_field', 'redirect', 'rd_interwiki', 'patch-rd_interwiki.sql' ), - array( 'do_update_transcache_field' ), - // A field changed name mid-release cycle, so fix it for anyone using - // trunk - array( 'rename_eu_wiki_id' ), - array( 'do_update_mime_minor_field' ), - ), - - 'sqlite' => array( - // 1.14 - array( 'add_field', 'site_stats', 'ss_active_users', 'patch-ss_active_users.sql' ), - array( 'do_active_users_init' ), - array( 'add_field', 'ipblocks', 'ipb_allow_usertalk', 'patch-ipb_allow_usertalk.sql' ), - array( 'sqlite_initial_indexes' ), - - // 1.15 - array( 'add_table', 'change_tag', 'patch-change_tag.sql' ), - array( 'add_table', 'tag_summary', 'patch-change_tag.sql' ), - array( 'add_table', 'valid_tag', 'patch-change_tag.sql' ), - - // 1.16 - array( 'add_table', 'user_properties', 'patch-user_properties.sql' ), - array( 'add_table', 'log_search', 'patch-log_search.sql' ), - array( 'do_log_search_population' ), - array( 'add_field', 'logging', 'log_user_text', 'patch-log_user_text.sql' ), - array( 'add_table', 'l10n_cache', 'patch-l10n_cache.sql' ), - array( 'add_table', 'external_user', 'patch-external_user.sql' ), - array( 'add_index', 'log_search', 'ls_field_val', 'patch-log_search-rename-index.sql' ), - array( 'add_index', 'change_tag', 'change_tag_rc_tag', 'patch-change_tag-indexes.sql' ), - array( 'add_field', 'redirect', 'rd_interwiki', 'patch-rd_interwiki.sql' ), - array( 'do_update_transcache_field' ), - // version-independent searchindex setup, added in 1.16 - array( 'sqlite_setup_searchindex' ), - ), -); - - -# For extensions only, should be populated via hooks -# $wgDBtype should be checked to specifiy the proper file -$wgExtNewTables = array(); // table, dir -$wgExtNewFields = array(); // table, column, dir -$wgExtPGNewFields = array(); // table, column, column attributes; for PostgreSQL -$wgExtPGAlteredFields = array(); // table, column, new type, conversion method; for PostgreSQL -$wgExtNewIndexes = array(); // table, index, dir -$wgExtModifiedFields = array(); //table, index, dir - -# Helper function: check if the given key is present in the updatelog table. -# Obviously, only use this for updates that occur after the updatelog table was -# created! -function update_row_exists( $key ) { - $dbr = wfGetDB( DB_SLAVE ); - $row = $dbr->selectRow( - 'updatelog', - '1', - array( 'ul_key' => $key ), - __FUNCTION__ - ); - return (bool)$row; -} - -function rename_table( $from, $to, $patch ) { - global $wgDatabase; - if ( $wgDatabase->tableExists( $from ) ) { - if ( $wgDatabase->tableExists( $to ) ) { - wfOut( "...can't move table $from to $to, $to already exists.\n" ); - } else { - wfOut( "Moving table $from to $to..." ); - $wgDatabase->sourceFile( archive($patch) ); - wfOut( "ok\n" ); - } - } else { - // Source table does not exist - // Renames are done before creations, so this is typical for a new installation - // Ignore silently - } -} - -function add_table( $name, $patch, $fullpath=false ) { - global $wgDatabase; - if ( $wgDatabase->tableExists( $name ) ) { - wfOut( "...$name table already exists.\n" ); - } else { - wfOut( "Creating $name table..." ); - if( $fullpath ) { - $wgDatabase->sourceFile( $patch ); - } else { - $wgDatabase->sourceFile( archive($patch) ); - } - wfOut( "ok\n" ); - } -} - -function modify_field($table, $field, $patch, $fullpath=false){ - global $wgDatabase; - if ( !$wgDatabase->tableExists( $table ) ) { - wfOut( "...$table table does not exist, skipping modify field patch\n" ); - } elseif (! $wgDatabase->fieldExists( $table, $field ) ) { - wfOut( "...$field field does not exist in $table table, skipping modify field patch\n" ); - } else { - wfOut( "Modifying $field field of table $table..." ); - if( $fullpath ) { - $wgDatabase->sourceFile( $patch ); - } else { - $wgDatabase->sourceFile( archive($patch) ); - } - wfOut( "ok\n" ); - } -} - - - -function add_field( $table, $field, $patch, $fullpath=false ) { - global $wgDatabase; - if ( !$wgDatabase->tableExists( $table ) ) { - wfOut( "...$table table does not exist, skipping new field patch\n" ); - } elseif ( $wgDatabase->fieldExists( $table, $field ) ) { - wfOut( "...have $field field in $table table.\n" ); - } else { - wfOut( "Adding $field field to table $table..." ); - if( $fullpath ) { - $wgDatabase->sourceFile( $patch ); - } else { - $wgDatabase->sourceFile( archive($patch) ); - } - wfOut( "ok\n" ); - } -} - -function add_index( $table, $index, $patch, $fullpath=false ) { - global $wgDatabase; - if( $wgDatabase->indexExists( $table, $index ) ) { - wfOut( "...$index key already set on $table table.\n" ); - } else { - wfOut( "Adding $index key to table $table... " ); - if( $fullpath ) { - $wgDatabase->sourceFile( $patch ); - } else { - $wgDatabase->sourceFile( archive($patch) ); - } - wfOut( "ok\n" ); - } -} - -function do_interwiki_update() { - # Check that interwiki table exists; if it doesn't source it - global $wgDatabase, $IP; - if( $wgDatabase->tableExists( "interwiki" ) ) { - wfOut( "...already have interwiki table\n" ); - return true; - } - wfOut( "Creating interwiki table: " ); - $wgDatabase->sourceFile( archive("patch-interwiki.sql") ); - wfOut( "ok\n" ); - wfOut( "Adding default interwiki definitions: " ); - $wgDatabase->sourceFile( "$IP/maintenance/interwiki.sql" ); - wfOut( "ok\n" ); -} - -function do_index_update() { - # Check that proper indexes are in place - global $wgDatabase; - $meta = $wgDatabase->fieldInfo( "recentchanges", "rc_timestamp" ); - if( !$meta->isMultipleKey() ) { - wfOut( "Updating indexes to 20031107: " ); - $wgDatabase->sourceFile( archive("patch-indexes.sql") ); - wfOut( "ok\n" ); - return true; - } - wfOut( "...indexes seem up to 20031107 standards\n" ); - return false; -} - -function do_image_index_update() { - global $wgDatabase; - - $meta = $wgDatabase->fieldInfo( "image", "img_major_mime" ); - if( !$meta->isMultipleKey() ) { - wfOut( "Updating indexes to 20050912: " ); - $wgDatabase->sourceFile( archive("patch-mimesearch-indexes.sql") ); - wfOut( "ok\n" ); - return true; - } - wfOut( "...indexes seem up to 20050912 standards\n" ); - return false; -} - -function do_image_name_unique_update() { - global $wgDatabase; - if( $wgDatabase->indexExists( 'image', 'PRIMARY' ) ) { - wfOut( "...image primary key already set.\n" ); - } else { - wfOut( "Making img_name the primary key... " ); - $wgDatabase->sourceFile( archive("patch-image_name_primary.sql") ); - wfOut( "ok\n" ); - } -} - -function do_logging_timestamp_index() { - global $wgDatabase; - if( $wgDatabase->indexExists( 'logging', 'times' ) ) { - wfOut( "...timestamp key on logging already exists.\n" ); - } else { - wfOut( "Adding timestamp key on logging table... " ); - $wgDatabase->sourceFile( archive("patch-logging-times-index.sql") ); - wfOut( "ok\n" ); - } -} - -function do_archive_user_index() { - global $wgDatabase; - if( $wgDatabase->indexExists( 'archive', 'usertext_timestamp' ) ) { - wfOut( "...usertext,timestamp key on archive already exists.\n" ); - } else { - wfOut( "Adding usertext,timestamp key on archive table... " ); - $wgDatabase->sourceFile( archive("patch-archive-user-index.sql") ); - wfOut( "ok\n" ); - } -} - -function do_image_user_index() { - global $wgDatabase; - if( $wgDatabase->indexExists( 'image', 'img_usertext_timestamp' ) ) { - wfOut( "...usertext,timestamp key on image already exists.\n" ); - } else { - wfOut( "Adding usertext,timestamp key on image table... " ); - $wgDatabase->sourceFile( archive("patch-image-user-index.sql") ); - wfOut( "ok\n" ); - } -} - -function do_oldimage_user_index() { - global $wgDatabase; - if( $wgDatabase->indexExists( 'oldimage', 'oi_usertext_timestamp' ) ) { - wfOut( "...usertext,timestamp key on oldimage already exists.\n" ); - } else { - wfOut( "Adding usertext,timestamp key on oldimage table... " ); - $wgDatabase->sourceFile( archive("patch-oldimage-user-index.sql") ); - wfOut( "ok\n" ); - } -} - -function do_watchlist_update() { - global $wgDatabase; - $fname = 'do_watchlist_update'; - if( $wgDatabase->fieldExists( 'watchlist', 'wl_notificationtimestamp' ) ) { - wfOut( "The watchlist table is already set up for email notification.\n" ); - } else { - wfOut( "Adding wl_notificationtimestamp field for email notification management." ); - /* ALTER TABLE watchlist ADD (wl_notificationtimestamp varchar(14) binary NOT NULL default '0'); */ - $wgDatabase->sourceFile( archive( 'patch-email-notification.sql' ) ); - wfOut( "ok\n" ); - } - # Check if we need to add talk page rows to the watchlist - $talk = $wgDatabase->selectField( 'watchlist', 'count(*)', 'wl_namespace & 1', $fname ); - $nontalk = $wgDatabase->selectField( 'watchlist', 'count(*)', 'NOT (wl_namespace & 1)', $fname ); - if ( $talk != $nontalk ) { - wfOut( "Adding missing watchlist talk page rows... " ); - flush(); - - $wgDatabase->insertSelect( 'watchlist', 'watchlist', - array( - 'wl_user' => 'wl_user', - 'wl_namespace' => 'wl_namespace | 1', - 'wl_title' => 'wl_title', - 'wl_notificationtimestamp' => 'wl_notificationtimestamp' - ), array( 'NOT (wl_namespace & 1)' ), $fname, 'IGNORE' ); - wfOut( "ok\n" ); - } else { - wfOut( "...watchlist talk page rows already present\n" ); - } -} - -function do_copy_newtalk_to_watchlist() { - global $wgDatabase; - global $wgCommandLineMode; # this needs to be saved while getID() and getName() are called - - $res = $wgDatabase->safeQuery( 'SELECT user_id, user_ip FROM !', - $wgDatabase->tableName( 'user_newtalk' ) ); - $num_newtalks=$wgDatabase->numRows($res); - wfOut( "Now converting $num_newtalks user_newtalk entries to watchlist table entries ... \n" ); - - $user = new User(); - for ( $i = 1; $i <= $num_newtalks; $i++ ) { - $wluser = $wgDatabase->fetchObject( $res ); - if ($wluser->user_id == 0) { # anonymous users ... have IP numbers as "names" - if ($user->isIP($wluser->user_ip)) { # do only if it really looks like an IP number (double checked) - $wgDatabase->replace( 'watchlist', - array(array('wl_user','wl_namespace', 'wl_title', 'wl_notificationtimestamp' )), - array('wl_user' => 0, - 'wl_namespace' => NS_USER_TALK, - 'wl_title' => $wluser->user_ip, - 'wl_notificationtimestamp' => '19700101000000' - ), 'updaters.inc::do_watchlist_update2' - ); - } - } else { # normal users ... have user_ids - $user->setID($wluser->user_id); - $wgDatabase->replace( 'watchlist', - array(array('wl_user','wl_namespace', 'wl_title', 'wl_notificationtimestamp' )), - array('wl_user' => $user->getID(), - 'wl_namespace' => NS_USER_TALK, - 'wl_title' => $user->getName(), - 'wl_notificationtimestamp' => '19700101000000' - ), 'updaters.inc::do_watchlist_update3' - ); - } - } - wfOut( "Done.\n" ); -} - - -function do_user_update() { - global $wgDatabase; - if( $wgDatabase->fieldExists( 'user', 'user_emailauthenticationtimestamp' ) ) { - wfOut( "User table contains old email authentication field. Dropping... " ); - $wgDatabase->sourceFile( archive( 'patch-email-authentication.sql' ) ); - wfOut( "ok\n" ); - } else { - wfOut( "...user table does not contain old email authentication field.\n" ); - } -} - -/** - * 1.4 betas were missing the 'binary' marker from logging.log_title, - * which causes a collation mismatch error on joins in MySQL 4.1. - */ -function check_bin( $table, $field, $patchFile ) { - global $wgDatabase, $wgDBtype; - if ($wgDBtype != 'mysql') - return; - $tableName = $wgDatabase->tableName( $table ); - $res = $wgDatabase->query( "SELECT $field FROM $tableName LIMIT 0" ); - $flags = explode( ' ', mysql_field_flags( $res->result, 0 ) ); - $wgDatabase->freeResult( $res ); - - if( in_array( 'binary', $flags ) ) { - wfOut( "$table table has correct $field encoding.\n" ); - } else { - wfOut( "Fixing $field encoding on $table table... " ); - $wgDatabase->sourceFile( archive( $patchFile ) ); - wfOut( "ok\n" ); - } -} - -function do_schema_restructuring() { - global $wgDatabase; - $fname="do_schema_restructuring"; - if ( $wgDatabase->tableExists( 'page' ) ) { - wfOut( "...page table already exists.\n" ); - } else { - wfOut( "...converting from cur/old to page/revision/text DB structure.\n" ); - wfOut( wfTimestamp( TS_DB ) ); - wfOut( "......checking for duplicate entries.\n" ); - - list ($cur, $old, $page, $revision, $text) = $wgDatabase->tableNamesN( 'cur', 'old', 'page', 'revision', 'text' ); - - $rows = $wgDatabase->query( "SELECT cur_title, cur_namespace, COUNT(cur_namespace) AS c - FROM $cur GROUP BY cur_title, cur_namespace HAVING c>1", $fname ); - - if ( $wgDatabase->numRows( $rows ) > 0 ) { - wfOut( wfTimestamp( TS_DB ) ); - wfOut( "......Found duplicate entries\n" ); - wfOut( sprintf( " %-60s %3s %5s\n", 'Title', 'NS', 'Count' ) ); - while ( $row = $wgDatabase->fetchObject( $rows ) ) { - if ( ! isset( $duplicate[$row->cur_namespace] ) ) { - $duplicate[$row->cur_namespace] = array(); - } - $duplicate[$row->cur_namespace][] = $row->cur_title; - wfOut( sprintf( " %-60s %3s %5s\n", $row->cur_title, $row->cur_namespace, $row->c ) ); - } - $sql = "SELECT cur_title, cur_namespace, cur_id, cur_timestamp FROM $cur WHERE "; - $firstCond = true; - foreach ( $duplicate as $ns => $titles ) { - if ( $firstCond ) { - $firstCond = false; - } else { - $sql .= ' OR '; - } - $sql .= "( cur_namespace = {$ns} AND cur_title in ("; - $first = true; - foreach ( $titles as $t ) { - if ( $first ) { - $sql .= $wgDatabase->addQuotes( $t ); - $first = false; - } else { - $sql .= ', ' . $wgDatabase->addQuotes( $t ); - } - } - $sql .= ") ) \n"; - } - # By sorting descending, the most recent entry will be the first in the list. - # All following entries will be deleted by the next while-loop. - $sql .= 'ORDER BY cur_namespace, cur_title, cur_timestamp DESC'; - - $rows = $wgDatabase->query( $sql, $fname ); - - $prev_title = $prev_namespace = false; - $deleteId = array(); - - while ( $row = $wgDatabase->fetchObject( $rows ) ) { - if ( $prev_title == $row->cur_title && $prev_namespace == $row->cur_namespace ) { - $deleteId[] = $row->cur_id; - } - $prev_title = $row->cur_title; - $prev_namespace = $row->cur_namespace; - } - $sql = "DELETE FROM $cur WHERE cur_id IN ( " . join( ',', $deleteId ) . ')'; - $rows = $wgDatabase->query( $sql, $fname ); - wfOut( wfTimestamp( TS_DB ) ); - wfOut( "......Deleted ".$wgDatabase->affectedRows()." records.\n" ); - } - - - wfOut( wfTimestamp( TS_DB ) ); - wfOut( "......Creating tables.\n" ); - $wgDatabase->query("CREATE TABLE $page ( - page_id int(8) unsigned NOT NULL auto_increment, - page_namespace int NOT NULL, - page_title varchar(255) binary NOT NULL, - page_restrictions tinyblob NOT NULL, - page_counter bigint(20) unsigned NOT NULL default '0', - page_is_redirect tinyint(1) unsigned NOT NULL default '0', - page_is_new tinyint(1) unsigned NOT NULL default '0', - page_random real unsigned NOT NULL, - page_touched char(14) binary NOT NULL default '', - page_latest int(8) unsigned NOT NULL, - page_len int(8) unsigned NOT NULL, - - PRIMARY KEY page_id (page_id), - UNIQUE INDEX name_title (page_namespace,page_title), - INDEX (page_random), - INDEX (page_len) - ) ENGINE=InnoDB", $fname ); - $wgDatabase->query("CREATE TABLE $revision ( - rev_id int(8) unsigned NOT NULL auto_increment, - rev_page int(8) unsigned NOT NULL, - rev_comment tinyblob NOT NULL, - rev_user int(5) unsigned NOT NULL default '0', - rev_user_text varchar(255) binary NOT NULL default '', - rev_timestamp char(14) binary NOT NULL default '', - rev_minor_edit tinyint(1) unsigned NOT NULL default '0', - rev_deleted tinyint(1) unsigned NOT NULL default '0', - rev_len int(8) unsigned, - rev_parent_id int(8) unsigned default NULL, - PRIMARY KEY rev_page_id (rev_page, rev_id), - UNIQUE INDEX rev_id (rev_id), - INDEX rev_timestamp (rev_timestamp), - INDEX page_timestamp (rev_page,rev_timestamp), - INDEX user_timestamp (rev_user,rev_timestamp), - INDEX usertext_timestamp (rev_user_text,rev_timestamp) - ) ENGINE=InnoDB", $fname ); - - wfOut( wfTimestamp( TS_DB ) ); - wfOut( "......Locking tables.\n" ); - $wgDatabase->query( "LOCK TABLES $page WRITE, $revision WRITE, $old WRITE, $cur WRITE", $fname ); - - $maxold = intval( $wgDatabase->selectField( 'old', 'max(old_id)', '', $fname ) ); - wfOut( wfTimestamp( TS_DB ) ); - wfOut( "......maxold is {$maxold}\n" ); - - wfOut( wfTimestamp( TS_DB ) ); - global $wgLegacySchemaConversion; - if( $wgLegacySchemaConversion ) { - // Create HistoryBlobCurStub entries. - // Text will be pulled from the leftover 'cur' table at runtime. - wfOut( "......Moving metadata from cur; using blob references to text in cur table.\n" ); - $cur_text = "concat('O:18:\"historyblobcurstub\":1:{s:6:\"mCurId\";i:',cur_id,';}')"; - $cur_flags = "'object'"; - } else { - // Copy all cur text in immediately: this may take longer but avoids - // having to keep an extra table around. - wfOut( "......Moving text from cur.\n" ); - $cur_text = 'cur_text'; - $cur_flags = "''"; - } - $wgDatabase->query( "INSERT INTO $old (old_namespace, old_title, old_text, old_comment, old_user, old_user_text, - old_timestamp, old_minor_edit, old_flags) - SELECT cur_namespace, cur_title, $cur_text, cur_comment, cur_user, cur_user_text, cur_timestamp, cur_minor_edit, $cur_flags - FROM $cur", $fname ); - - wfOut( wfTimestamp( TS_DB ) ); - wfOut( "......Setting up revision table.\n" ); - $wgDatabase->query( "INSERT INTO $revision (rev_id, rev_page, rev_comment, rev_user, rev_user_text, rev_timestamp, - rev_minor_edit) - SELECT old_id, cur_id, old_comment, old_user, old_user_text, - old_timestamp, old_minor_edit - FROM $old,$cur WHERE old_namespace=cur_namespace AND old_title=cur_title", $fname ); - - wfOut( wfTimestamp( TS_DB ) ); - wfOut( "......Setting up page table.\n" ); - $wgDatabase->query( "INSERT INTO $page (page_id, page_namespace, page_title, page_restrictions, page_counter, - page_is_redirect, page_is_new, page_random, page_touched, page_latest, page_len) - SELECT cur_id, cur_namespace, cur_title, cur_restrictions, cur_counter, cur_is_redirect, cur_is_new, - cur_random, cur_touched, rev_id, LENGTH(cur_text) - FROM $cur,$revision - WHERE cur_id=rev_page AND rev_timestamp=cur_timestamp AND rev_id > {$maxold}", $fname ); - - wfOut( wfTimestamp( TS_DB ) ); - wfOut( "......Unlocking tables.\n" ); - $wgDatabase->query( "UNLOCK TABLES", $fname ); - - wfOut( wfTimestamp( TS_DB ) ); - wfOut( "......Renaming old.\n" ); - $wgDatabase->query( "ALTER TABLE $old RENAME TO $text", $fname ); - - wfOut( wfTimestamp( TS_DB ) ); - wfOut( "...done.\n" ); - } -} - -function do_inverse_timestamp() { - global $wgDatabase; - if( $wgDatabase->fieldExists( 'revision', 'inverse_timestamp' ) ) { - wfOut( "Removing revision.inverse_timestamp and fixing indexes... " ); - $wgDatabase->sourceFile( archive( 'patch-inverse_timestamp.sql' ) ); - wfOut( "ok\n" ); - } else { - wfOut( "revision timestamp indexes already up to 2005-03-13\n" ); - } -} - -function do_text_id() { - global $wgDatabase; - if( $wgDatabase->fieldExists( 'revision', 'rev_text_id' ) ) { - wfOut( "...rev_text_id already in place.\n" ); - } else { - wfOut( "Adding rev_text_id field... " ); - $wgDatabase->sourceFile( archive( 'patch-rev_text_id.sql' ) ); - wfOut( "ok\n" ); - } -} - -function do_namespace_size() { - $tables = array( - 'page' => 'page', - 'archive' => 'ar', - 'recentchanges' => 'rc', - 'watchlist' => 'wl', - 'querycache' => 'qc', - 'logging' => 'log', - ); - foreach( $tables as $table => $prefix ) { - do_namespace_size_on( $table, $prefix ); - flush(); - } -} - -function do_namespace_size_on( $table, $prefix ) { - global $wgDatabase, $wgDBtype; - if ($wgDBtype != 'mysql') - return; - $field = $prefix . '_namespace'; - - $tablename = $wgDatabase->tableName( $table ); - $result = $wgDatabase->query( "SHOW COLUMNS FROM $tablename LIKE '$field'" ); - $info = $wgDatabase->fetchObject( $result ); - $wgDatabase->freeResult( $result ); - - if( substr( $info->Type, 0, 3 ) == 'int' ) { - wfOut( "...$field is already a full int ($info->Type).\n" ); - } else { - wfOut( "Promoting $field from $info->Type to int... " ); - - $sql = "ALTER TABLE $tablename MODIFY $field int NOT NULL"; - $wgDatabase->query( $sql ); - - wfOut( "ok\n" ); - } -} - -function do_pagelinks_update() { - global $wgDatabase; - if( $wgDatabase->tableExists( 'pagelinks' ) ) { - wfOut( "...already have pagelinks table.\n" ); - } else { - wfOut( "Converting links and brokenlinks tables to pagelinks... " ); - $wgDatabase->sourceFile( archive( 'patch-pagelinks.sql' ) ); - wfOut( "ok\n" ); - flush(); - - global $wgCanonicalNamespaceNames; - foreach( $wgCanonicalNamespaceNames as $ns => $name ) { - if( $ns != 0 ) { - do_pagelinks_namespace( $ns ); - } - } - } -} - -function do_pagelinks_namespace( $namespace ) { - global $wgDatabase, $wgContLang; - - $ns = intval( $namespace ); - wfOut( "Cleaning up broken links for namespace $ns... " ); - - $pagelinks = $wgDatabase->tableName( 'pagelinks' ); - $name = $wgContLang->getNsText( $ns ); - $prefix = $wgDatabase->strencode( $name ); - $likeprefix = str_replace( '_', '\\_', $prefix); - - $sql = "UPDATE $pagelinks - SET pl_namespace=$ns, - pl_title=TRIM(LEADING '$prefix:' FROM pl_title) - WHERE pl_namespace=0 - AND pl_title LIKE '$likeprefix:%'"; - - $wgDatabase->query( $sql, 'do_pagelinks_namespace' ); - wfOut( "ok\n" ); -} - -function do_drop_img_type() { - global $wgDatabase; - - if( $wgDatabase->fieldExists( 'image', 'img_type' ) ) { - wfOut( "Dropping unused img_type field in image table... " ); - $wgDatabase->sourceFile( archive( 'patch-drop_img_type.sql' ) ); - wfOut( "ok\n" ); - } else { - wfOut( "No img_type field in image table; Good.\n" ); - } -} - -function do_old_links_update() { - global $wgDatabase; - if( $wgDatabase->tableExists( 'pagelinks' ) ) { - wfOut( "Already have pagelinks; skipping old links table updates.\n" ); - } else { - convertLinks(); flush(); - } -} - -function fix_ancient_imagelinks() { - global $wgDatabase; - $info = $wgDatabase->fieldInfo( 'imagelinks', 'il_from' ); - if ( $info && $info->type() === 'string' ) { - wfOut( "Fixing ancient broken imagelinks table.\n" ); - wfOut( "NOTE: you will have to run maintenance/refreshLinks.php after this.\n" ); - $wgDatabase->sourceFile( archive( 'patch-fix-il_from.sql' ) ); - wfOut( "ok\n" ); - } else { - wfOut( "...il_from OK\n" ); - } -} - -function do_user_unique_update() { - global $wgDatabase; - $duper = new UserDupes( $wgDatabase ); - if( $duper->hasUniqueIndex() ) { - wfOut( "Already have unique user_name index.\n" ); - } else { - if( !$duper->clearDupes() ) { - wfOut( "WARNING: This next step will probably fail due to unfixed duplicates...\n" ); - } - wfOut( "Adding unique index on user_name... " ); - $wgDatabase->sourceFile( archive( 'patch-user_nameindex.sql' ) ); - wfOut( "ok\n" ); - } -} - -function do_user_groups_update() { - $fname = 'do_user_groups_update'; - global $wgDatabase; - - if( $wgDatabase->tableExists( 'user_groups' ) ) { - wfOut( "...user_groups table already exists.\n" ); - return do_user_groups_reformat(); - } - - wfOut( "Adding user_groups table... " ); - $wgDatabase->sourceFile( archive( 'patch-user_groups.sql' ) ); - wfOut( "ok\n" ); - - if( !$wgDatabase->tableExists( 'user_rights' ) ) { - if( $wgDatabase->fieldExists( 'user', 'user_rights' ) ) { - wfOut( "Upgrading from a 1.3 or older database? Breaking out user_rights for conversion..." ); - $wgDatabase->sourceFile( archive( 'patch-user_rights.sql' ) ); - wfOut( "ok\n" ); - } else { - wfOut( "*** WARNING: couldn't locate user_rights table or field for upgrade.\n" ); - wfOut( "*** You may need to manually configure some sysops by manipulating\n" ); - wfOut( "*** the user_groups table.\n" ); - return; - } - } - - wfOut( "Converting user_rights table to user_groups... " ); - $result = $wgDatabase->select( 'user_rights', - array( 'ur_user', 'ur_rights' ), - array( "ur_rights != ''" ), - $fname ); - - while( $row = $wgDatabase->fetchObject( $result ) ) { - $groups = array_unique( - array_map( 'trim', - explode( ',', $row->ur_rights ) ) ); - - foreach( $groups as $group ) { - $wgDatabase->insert( 'user_groups', - array( - 'ug_user' => $row->ur_user, - 'ug_group' => $group ), - $fname ); - } - } - $wgDatabase->freeResult( $result ); - wfOut( "ok\n" ); -} - -function do_user_groups_reformat() { - # Check for bogus formats from previous 1.5 alpha code. - global $wgDatabase; - $info = $wgDatabase->fieldInfo( 'user_groups', 'ug_group' ); - - if( $info->type() == 'int' ) { - $oldug = $wgDatabase->tableName( 'user_groups' ); - $newug = $wgDatabase->tableName( 'user_groups_bogus' ); - wfOut( "user_groups is in bogus intermediate format. Renaming to $newug... " ); - $wgDatabase->query( "ALTER TABLE $oldug RENAME TO $newug" ); - wfOut( "ok\n" ); - - wfOut( "Re-adding fresh user_groups table... " ); - $wgDatabase->sourceFile( archive( 'patch-user_groups.sql' ) ); - wfOut( "ok\n" ); - - wfOut( "***\n" ); - wfOut( "*** WARNING: You will need to manually fix up user permissions in the user_groups\n" ); - wfOut( "*** table. Old 1.5 alpha versions did some pretty funky stuff...\n" ); - wfOut( "***\n" ); - } else { - wfOut( "...user_groups is in current format.\n" ); - } - -} - -function do_watchlist_null() { - # Make sure wl_notificationtimestamp can be NULL, - # and update old broken items. - global $wgDatabase; - $info = $wgDatabase->fieldInfo( 'watchlist', 'wl_notificationtimestamp' ); - - if( !$info->nullable() ) { - wfOut( "Making wl_notificationtimestamp nullable... " ); - $wgDatabase->sourceFile( archive( 'patch-watchlist-null.sql' ) ); - wfOut( "ok\n" ); - } else { - wfOut( "...wl_notificationtimestamp is already nullable.\n" ); - } - -} - -/** - * @bug 3946 - */ -function do_page_random_update() { - global $wgDatabase; - - wfOut( "Setting page_random to a random value on rows where it equals 0..." ); - - $page = $wgDatabase->tableName( 'page' ); - $wgDatabase->query( "UPDATE $page SET page_random = RAND() WHERE page_random = 0", 'do_page_random_update' ); - $rows = $wgDatabase->affectedRows(); - - wfOut( "changed $rows rows\n" ); -} - -function do_templatelinks_update() { - global $wgDatabase, $wgLoadBalancer; - $fname = 'do_templatelinks_update'; - - if ( $wgDatabase->tableExists( 'templatelinks' ) ) { - wfOut( "...templatelinks table already exists\n" ); - return; - } - wfOut( "Creating templatelinks table...\n" ); - $wgDatabase->sourceFile( archive('patch-templatelinks.sql') ); - wfOut( "Populating...\n" ); - if ( isset( $wgLoadBalancer ) && $wgLoadBalancer->getServerCount() > 1 ) { - // Slow, replication-friendly update - $res = $wgDatabase->select( 'pagelinks', array( 'pl_from', 'pl_namespace', 'pl_title' ), - array( 'pl_namespace' => NS_TEMPLATE ), $fname ); - $count = 0; - while ( $row = $wgDatabase->fetchObject( $res ) ) { - $count = ($count + 1) % 100; - if ( $count == 0 ) { - if ( function_exists( 'wfWaitForSlaves' ) ) { - wfWaitForSlaves( 10 ); - } else { - sleep( 1 ); - } - } - $wgDatabase->insert( 'templatelinks', - array( - 'tl_from' => $row->pl_from, - 'tl_namespace' => $row->pl_namespace, - 'tl_title' => $row->pl_title, - ), $fname - ); - - } - $wgDatabase->freeResult( $res ); - } else { - // Fast update - $wgDatabase->insertSelect( 'templatelinks', 'pagelinks', - array( - 'tl_from' => 'pl_from', - 'tl_namespace' => 'pl_namespace', - 'tl_title' => 'pl_title' - ), array( - 'pl_namespace' => 10 - ), $fname - ); - } - wfOut( "Done. Please run maintenance/refreshLinks.php for a more thorough templatelinks update.\n" ); -} - -// Add index on ( rc_namespace, rc_user_text ) [Jul. 2006] -// Add index on ( rc_user_text, rc_timestamp ) [Nov. 2006] -function do_rc_indices_update() { - global $wgDatabase; - wfOut( "Checking for additional recent changes indices...\n" ); - - $indexes = array( - 'rc_ns_usertext' => 'patch-recentchanges-utindex.sql', - 'rc_user_text' => 'patch-rc_user_text-index.sql', - ); - - foreach( $indexes as $index => $patch ) { - $info = $wgDatabase->indexInfo( 'recentchanges', $index, __METHOD__ ); - if( !$info ) { - wfOut( "...index `{$index}` not found; adding..." ); - $wgDatabase->sourceFile( archive( $patch ) ); - wfOut( "done.\n" ); - } else { - wfOut( "...index `{$index}` seems ok.\n" ); - } - } -} - -function index_has_field($table, $index, $field) { - global $wgDatabase; - wfOut( "Checking if $table index $index includes field $field...\n" ); - $info = $wgDatabase->indexInfo( $table, $index, __METHOD__ ); - if( $info ) { - foreach($info as $row) { - if($row->Column_name == $field) { - wfOut( "...index $index on table $table seems to be ok\n" ); - return true; - } - } - } - wfOut( "...index $index on table $table has no field $field; adding\n" ); - return false; -} - -function do_backlinking_indices_update() { - global $wgDatabase; - wfOut( "Checking for backlinking indices...\n" ); - if (!index_has_field('pagelinks', 'pl_namespace', 'pl_from') || - !index_has_field('templatelinks', 'tl_namespace', 'tl_from') || - !index_has_field('imagelinks', 'il_to', 'il_from')) - { - $wgDatabase->sourceFile( archive( 'patch-backlinkindexes.sql' ) ); - wfOut( "...backlinking indices updated\n" ); - } -} - -function do_categorylinks_indices_update() { - global $wgDatabase; - wfOut( "Checking for categorylinks indices...\n" ); - if (!index_has_field('categorylinks', 'cl_sortkey', 'cl_from')) - { - $wgDatabase->sourceFile( archive( 'patch-categorylinksindex.sql' ) ); - wfOut( "...categorylinks indices updated\n" ); - } -} - -function do_filearchive_indices_update() { - global $wgDatabase; - wfOut( "Checking filearchive indices...\n" ); - $info = $wgDatabase->indexInfo( 'filearchive', 'fa_user_timestamp', __METHOD__ ); - if ( !$info ) - { - $wgDatabase->sourceFile( archive( 'patch-filearchive-user-index.sql' ) ); - wfOut( "...filearchive indices updated\n" ); - } -} - -function maybe_do_profiling_memory_update() { - global $wgDatabase; - if ( !$wgDatabase->tableExists( 'profiling' ) ) { - // Simply ignore - } elseif ( $wgDatabase->fieldExists( 'profiling', 'pf_memory' ) ) { - wfOut( "profiling table has pf_memory field.\n" ); - } else { - wfOut( "Adding pf_memory field to table profiling..." ); - $wgDatabase->sourceFile( archive( 'patch-profiling-memory.sql' ) ); - wfOut( "ok\n" ); - } -} - -function do_stats_init() { - // Sometimes site_stats table is not properly populated. - global $wgDatabase; - wfOut( "Checking site_stats row..." ); - $row = $wgDatabase->selectRow( 'site_stats', '*', array( 'ss_row_id' => 1 ), __METHOD__ ); - if( $row === false ) { - wfOut( "data is missing! rebuilding...\n" ); - } elseif ( isset( $row->site_stats ) && $row->ss_total_pages == -1 ) { - wfOut( "missing ss_total_pages, rebuilding...\n" ); - } else { - wfOut( "ok.\n" ); - return; - } - SiteStatsInit::doAllAndCommit( false ); -} - -function do_active_users_init() { - global $wgDatabase; - $activeUsers = $wgDatabase->selectField( 'site_stats', 'ss_active_users', false, __METHOD__ ); - if( $activeUsers == -1 ) { - $activeUsers = $wgDatabase->selectField( 'recentchanges', - 'COUNT( DISTINCT rc_user_text )', - array( 'rc_user != 0', 'rc_bot' => 0, "rc_log_type != 'newusers'" ), __METHOD__ - ); - $wgDatabase->update( 'site_stats', - array( 'ss_active_users' => intval($activeUsers) ), - array( 'ss_row_id' => 1 ), __METHOD__, array( 'LIMIT' => 1 ) - ); - } - wfOut( "...ss_active_users user count set...\n" ); -} - -function purge_cache() { - global $wgDatabase; - # We can't guarantee that the user will be able to use TRUNCATE, - # but we know that DELETE is available to us - wfOut( "Purging caches..." ); - $wgDatabase->delete( 'objectcache', '*', __METHOD__ ); - wfOut( "done.\n" ); -} - -function do_all_updates( $shared = false, $purge = true ) { - global $wgNewTables, $wgExtModifiedFields, $wgNewFields, $wgRenamedTables, $wgSharedDB, $wgSharedTables, $wgDatabase, $wgDBtype, $IP; - - wfRunHooks('LoadExtensionSchemaUpdates'); - - $doUser = $shared ? $wgSharedDB && in_array('user', $wgSharedTables) : !$wgSharedDB || !in_array('user', $wgSharedTables); - - if ($wgDBtype === 'postgres') { - do_postgres_updates(); - return; - } - - # Run core updates in sequence... - global $wgUpdates; - if ( isset( $wgUpdates[$wgDBtype] ) ) { - foreach( $wgUpdates[$wgDBtype] as $params ) { - $func = array_shift( $params ); - call_user_func_array( $func, $params ); - flush(); - } - } - - /// @fixme clean up this mess too! - global $wgExtNewTables, $wgExtNewFields, $wgExtNewIndexes; - # Add missing extension tables - foreach ( $wgExtNewTables as $tableRecord ) { - add_table( $tableRecord[0], $tableRecord[1], true ); - flush(); - } - # Add missing extension fields - foreach ( $wgExtNewFields as $fieldRecord ) { - if ( $fieldRecord[0] != 'user' || $doUser ) { - add_field( $fieldRecord[0], $fieldRecord[1], $fieldRecord[2], true ); - } - flush(); - } - # Add missing extension indexes - foreach ( $wgExtNewIndexes as $fieldRecord ) { - add_index( $fieldRecord[0], $fieldRecord[1], $fieldRecord[2], true ); - flush(); - } - # Add modified extension fields - foreach ( $wgExtModifiedFields as $fieldRecord ) { - modify_field($fieldRecord[0], $fieldRecord[1], $fieldRecord[2], true); - flush(); - } - - - wfOut( "Deleting old default messages (this may take a long time!)..." ); - if( !defined( 'MW_NO_SETUP' ) ) { - define( 'MW_NO_SETUP', true ); - } - require_once 'deleteDefaultMessages.php'; - DeleteDefaultMessages::reallyExecute(); - wfOut( "Done\n" ); - - do_stats_init(); - - if( $purge ) { - purge_cache(); - } -} - -function archive($name) { - global $wgDBtype, $IP; - if ( file_exists( "$IP/maintenance/$wgDBtype/archives/$name" ) ) { - return "$IP/maintenance/$wgDBtype/archives/$name"; - } else { - return "$IP/maintenance/archives/$name"; - } -} - -function do_restrictions_update() { - # Adding page_restrictions table, obsoleting page.page_restrictions. - # Migrating old restrictions to new table - # -- Andrew Garrett, January 2007. - - global $wgDatabase; - - $name = 'page_restrictions'; - $patch = 'patch-page_restrictions.sql'; - $patch2 = 'patch-page_restrictions_sortkey.sql'; - - if ( $wgDatabase->tableExists( $name ) ) { - wfOut( "...$name table already exists.\n" ); - } else { - wfOut( "Creating $name table..." ); - $wgDatabase->sourceFile( archive($patch) ); - $wgDatabase->sourceFile( archive($patch2) ); - wfOut( "ok\n" ); - - wfOut( "Migrating old restrictions to new table..." ); - - $res = $wgDatabase->select( 'page', array( 'page_id', 'page_restrictions' ), array("page_restrictions!=''", "page_restrictions!='edit=:move='"), __METHOD__ ); - - $count = 0; - - while ($row = $wgDatabase->fetchObject($res) ) { - $count = ($count + 1) % 100; - - if ($count == 0) { - if ( function_exists( 'wfWaitForSlaves' ) ) { - wfWaitForSlaves( 10 ); - } else { - sleep( 1 ); - } - } - - # Figure out what the restrictions are.. - $id = $row->page_id; - $flatrestrictions = explode( ':', $row->page_restrictions ); - - $restrictions = array (); - foreach( $flatrestrictions as $restriction ) { - $thisrestriction = explode( '=', $restriction, 2 ); - if( count( $thisrestriction ) == 1 ) { - // Compatibility with old protections from before - // separate move protection was added. - list( $level ) = $thisrestriction; - if( $level ) { - $restrictions['edit'] = $level; - $restrictions['move'] = $level; - } - } else { - list( $type, $level ) = $thisrestriction; - if( $level ) { - $restrictions[$type] = $level; - } - } - - $wgDatabase->update( 'page', array ( 'page_restrictions' => ''), array( 'page_id' => $id ), __METHOD__ ); - - } - - foreach( $restrictions as $type => $level ) { - $wgDatabase->insert( 'page_restrictions', array ( 'pr_page' => $id, - 'pr_type' => $type, - 'pr_level' => $level, - 'pr_cascade' => 0, - 'pr_expiry' => 'infinity' ), - __METHOD__ ); - } - } - wfOut( "ok\n" ); - } -} - -function do_category_population() { - if( update_row_exists( 'populate category' ) ) { - wfOut( "...category table already populated.\n" ); - return; - } - require_once( 'populateCategory.inc' ); - wfOut( "Populating category table, printing progress markers. " ). -"For large databases, you\n". -"may want to hit Ctrl-C and do this manually with maintenance/\n". -"populateCategory.php.\n"; - populateCategory( '', 10, 0, true ); - wfOut( "Done populating category table.\n" ); -} - -function do_populate_parent_id() { - if( update_row_exists( 'populate rev_parent_id' ) ) { - wfOut( "...rev_parent_id column already populated.\n" ); - return; - } - require_once( 'populateParentId.inc' ); - - global $wgDatabase; - populate_rev_parent_id( $wgDatabase ); -} - -function sqlite_initial_indexes() { - global $wgDatabase; - // initial-indexes.sql fails if the indexes are already present, so we perform a quick check if our database is newer. - if ( update_row_exists( 'initial_indexes' ) || $wgDatabase->indexExists( 'user', 'user_name' ) ) { - wfOut( "...have initial indexes\n" ); - return; - } - wfOut( "Adding initial indexes..." ); - $wgDatabase->sourceFile( archive( 'initial-indexes.sql' ) ); - wfOut( "done\n" ); -} - -function sqlite_setup_searchindex() { - global $wgDatabase; - $module = $wgDatabase->getFulltextSearchModule(); - $fts3tTable = update_row_exists( 'fts3' ); - if ( $fts3tTable && !$module ) { - wfOut( '...PHP is missing FTS3 support, downgrading tables...' ); - $wgDatabase->sourceFile( archive( 'searchindex-no-fts.sql' ) ); - wfOut( "done\n" ); - } elseif ( !$fts3tTable && $module == 'FTS3' ) { - wfOut( '...adding FTS3 search capabilities...' ); - $wgDatabase->sourceFile( archive( 'searchindex-fts3.sql' ) ); - wfOut( "done\n" ); - } else { - wfOut( "...fulltext search table appears to be in order.\n" ); - } -} - -function do_unique_pl_tl_il() { - global $wgDatabase; - $info = $wgDatabase->indexInfo( 'pagelinks', 'pl_namespace' ); - if( is_array($info) && !$info[0]->Non_unique ) { - wfOut( "...pl_namespace, tl_namespace, il_to indices are already UNIQUE.\n" ); - } else { - wfOut( "Making pl_namespace, tl_namespace and il_to indices UNIQUE... " ); - $wgDatabase->sourceFile( archive( 'patch-pl-tl-il-unique.sql' ) ); - wfOut( "ok\n" ); - } -} - -function do_log_search_population() { - global $wgDatabase; - if( update_row_exists( 'populate log_search' ) ) { - wfOut( "...log_search table already populated.\n" ); - return; - } - require_once( 'populateLogSearch.inc' ); - wfOut( -"Populating log_search table, printing progress markers. For large\n" . -"databases, you may want to hit Ctrl-C and do this manually with\n" . -"maintenance/populateLogSearch.php.\n" ); - migrate_log_params( $wgDatabase ); - wfOut( "Done populating log_search table.\n" ); -} - -function rename_eu_wiki_id() { - global $wgDatabase; - wfOut( "Renaming eu_wiki_id -> eu_local_id... " ); - if ( $wgDatabase->fieldExists( 'external_user', 'eu_local_id' ) ) { - wfOut( "already done.\n" ); - return; - } - $wgDatabase->sourceFile( archive( 'patch-eu_local_id.sql' ) ); - wfOut( "ok\n" ); -} - -function do_update_transcache_field() { - global $wgDatabase; - if( update_row_exists( 'convert transcache field' ) ) { - wfOut( "...transcache tc_time already converted.\n" ); - return; - } else { - wfOut( "Converting tc_time from UNIX epoch to MediaWiki timestamp... " ); - $wgDatabase->sourceFile( archive( 'patch-tc-timestamp.sql' ) ); - wfOut( "ok\n" ); - } -} - -function do_update_mime_minor_field() { - if ( update_row_exists( 'mime_minor_length' ) ) { - wfOut( "*_mime_minor fields are already long enough.\n" ); - } else { - global $wgDatabase; - wfOut( "Altering all *_mime_minor fields to 100 bytes in size ... " ); - $wgDatabase->sourceFile( archive( 'patch-mime_minor_length.sql' ) ); - wfOut( "ok\n" ); - } -} - - - -/*********************************************************************** - * Start PG stuff - * TODO: merge with above - ***********************************************************************/ - -function pg_describe_table($table) { - global $wgDatabase, $wgDBmwschema; - $q = << 0 - AND relname=%s AND nspname=%s -END; - $res = $wgDatabase->query(sprintf($q, - $wgDatabase->addQuotes($table), - $wgDatabase->addQuotes($wgDBmwschema))); - if (!$res) - return null; - - $cols = array(); - while ($r = $wgDatabase->fetchRow($res)) { - $cols[] = array( - "name" => $r[0], - "ord" => $r[1], - ); - } - return $cols; -} - -function pg_describe_index($idx) { - global $wgDatabase, $wgDBmwschema; - - // first fetch the key (which is a list of columns ords) and - // the table the index applies to (an oid) - $q = <<query(sprintf($q, - $wgDatabase->addQuotes($wgDBmwschema), - $wgDatabase->addQuotes($idx))); - if (!$res) - return null; - if (!($r = $wgDatabase->fetchRow($res))) { - $wgDatabase->freeResult($res); - return null; - } - - $indkey = $r[0]; - $relid = intval($r[1]); - $indkeys = explode(" ", $indkey); - $wgDatabase->freeResult($res); - - $colnames = array(); - foreach ($indkeys as $rid) { - $query = <<query(sprintf($query, $rid)); - if (!$r2) - return null; - if (!($row2 = $wgDatabase->fetchRow($r2))) { - $wgDatabase->freeResult($r2); - return null; - } - $colnames[] = $row2[0]; - $wgDatabase->freeResult($r2); - } - - return $colnames; -} - -function pg_index_exists($table, $index) { - global $wgDatabase, $wgDBmwschema; - $exists = $wgDatabase->selectField("pg_indexes", "indexname", - array( "indexname" => $index, - "tablename" => $table, - "schemaname" => $wgDBmwschema)); - return $exists === $index; -} - -function pg_fkey_deltype($fkey) { - global $wgDatabase, $wgDBmwschema; - $q = <<query(sprintf($q, - $wgDatabase->addQuotes($wgDBmwschema), - $wgDatabase->addQuotes($fkey))); - if (!($row = $wgDatabase->fetchRow($r))) - return null; - return $row[0]; -} - -function pg_rule_def($table, $rule) { - global $wgDatabase, $wgDBmwschema; - $q = <<query(sprintf($q, - $wgDatabase->addQuotes($wgDBmwschema), - $wgDatabase->addQuotes($table), - $wgDatabase->addQuotes($rule))); - $row = $wgDatabase->fetchRow($r); - if (!$row) - return null; - $d = $row[0]; - $wgDatabase->freeResult($r); - return $d; -} - -function do_postgres_updates() { - global $wgDatabase, $wgVersion, $wgDBmwschema, $wgDBts2schema, $wgShowExceptionDetails, $wgDBuser; - - ## Gather version numbers in case we need them - $version = $wgDatabase->getServerVersion(); ## long string - $numver = $wgDatabase->numeric_version; ## X.Y e.g. 8.3 - - $wgShowExceptionDetails = 1; - - # Just in case their LocalSettings.php does not have this: - if ( !isset( $wgDBmwschema )) - $wgDBmwschema = 'mediawiki'; - - # Verify that this user is configured correctly - $safeuser = $wgDatabase->addQuotes($wgDBuser); - $SQL = "SELECT array_to_string(useconfig,'*') FROM pg_catalog.pg_user WHERE usename = $safeuser"; - $config = pg_fetch_result( $wgDatabase->doQuery( $SQL ), 0, 0 ); - $conf = array(); - foreach( explode( '*', $config ) as $c ) { - list( $x,$y ) = explode( '=', $c ); - $conf[$x] = $y; - } - if( !array_key_exists( 'search_path', $conf ) ) { - $search_path = ''; - } - else { - $search_path = $conf['search_path']; - } - - $safeuser = $wgDatabase->quote_ident($wgDBuser); - if( strpos( $search_path, $wgDBmwschema ) === false ) { - wfOut( "Adding in schema \"$wgDBmwschema\" to search_path for user \"$wgDBuser\"\n" ); - $search_path = "$wgDBmwschema, $search_path"; - } - if( strpos( $search_path, $wgDBts2schema ) === false ) { - wfOut( "Adding in schema \"$wgDBts2schema\" to search_path for user \"$wgDBuser\"\n" ); - $search_path = "$search_path, $wgDBts2schema"; - } - $search_path = str_replace( ', ,', ',', $search_path); - if( array_key_exists( 'search_path', $conf ) === false || $search_path != $conf['search_path'] ) { - $wgDatabase->doQuery( "ALTER USER $safeuser SET search_path = $search_path" ); - $wgDatabase->doQuery( "SET search_path = $search_path" ); - } - else { - $path = $conf['search_path']; - wfOut( "... search_path for user \"$wgDBuser\" looks correct ($path)\n" ); - } - $goodconf = array( - 'client_min_messages' => 'error', - 'DateStyle' => 'ISO, YMD', - 'TimeZone' => 'GMT' - ); - foreach( array_keys( $goodconf ) AS $key ) { - $value = $goodconf[$key]; - if( !array_key_exists( $key, $conf ) or $conf[$key] !== $value ) { - wfOut( "Setting $key to '$value' for user \"$wgDBuser\"\n" ); - $wgDatabase->doQuery( "ALTER USER $safeuser SET $key = '$value'" ); - $wgDatabase->doQuery( "SET $key = '$value'" ); - } - else { - wfOut( "... default value of \"$key\" is correctly set to \"$value\" for user \"$wgDBuser\"\n" ); - } - } - - $newsequences = array( - "logging_log_id_seq", - "page_restrictions_pr_id_seq", - ); - - $newtables = array( - array("category", "patch-category.sql"), - array("mediawiki_version", "patch-mediawiki_version.sql"), - array("mwuser", "patch-mwuser.sql"), - array("pagecontent", "patch-pagecontent.sql"), - array("querycachetwo", "patch-querycachetwo.sql"), - array("page_props", "patch-page_props.sql"), - array("page_restrictions", "patch-page_restrictions.sql"), - array("profiling", "patch-profiling.sql"), - array("protected_titles", "patch-protected_titles.sql"), - array("redirect", "patch-redirect.sql"), - array("updatelog", "patch-updatelog.sql"), - array('change_tag', 'patch-change_tag.sql'), - array('tag_summary', 'patch-change_tag.sql'), - array('valid_tag', 'patch-change_tag.sql'), - array('user_properties', 'patch-user_properties.sql'), - array('log_search', 'patch-log_search.sql'), - array('l10n_cache', 'patch-l10n_cache.sql'), - ); - - $newcols = array( - array("archive", "ar_deleted", "SMALLINT NOT NULL DEFAULT 0"), - array("archive", "ar_len", "INTEGER"), - array("archive", "ar_page_id", "INTEGER"), - array("archive", "ar_parent_id", "INTEGER"), - array("image", "img_sha1", "TEXT NOT NULL DEFAULT ''"), - array("ipblocks", "ipb_allow_usertalk", "SMALLINT NOT NULL DEFAULT 0"), - array("ipblocks", "ipb_anon_only", "SMALLINT NOT NULL DEFAULT 0"), - array("ipblocks", "ipb_by_text", "TEXT NOT NULL DEFAULT ''"), - array("ipblocks", "ipb_block_email", "SMALLINT NOT NULL DEFAULT 0"), - array("ipblocks", "ipb_create_account", "SMALLINT NOT NULL DEFAULT 1"), - array("ipblocks", "ipb_deleted", "SMALLINT NOT NULL DEFAULT 0"), - array("ipblocks", "ipb_enable_autoblock", "SMALLINT NOT NULL DEFAULT 1"), - array("filearchive", "fa_deleted", "SMALLINT NOT NULL DEFAULT 0"), - array("logging", "log_deleted", "SMALLINT NOT NULL DEFAULT 0"), - array("logging", "log_id", "INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('logging_log_id_seq')"), - array("logging", "log_params", "TEXT"), - array("mwuser", "user_editcount", "INTEGER"), - array("mwuser", "user_hidden", "SMALLINT NOT NULL DEFAULT 0"), - array("mwuser", "user_newpass_time", "TIMESTAMPTZ"), - array("oldimage", "oi_deleted", "SMALLINT NOT NULL DEFAULT 0"), - array("oldimage", "oi_major_mime", "TEXT NOT NULL DEFAULT 'unknown'"), - array("oldimage", "oi_media_type", "TEXT"), - array("oldimage", "oi_metadata", "BYTEA NOT NULL DEFAULT ''"), - array("oldimage", "oi_minor_mime", "TEXT NOT NULL DEFAULT 'unknown'"), - array("oldimage", "oi_sha1", "TEXT NOT NULL DEFAULT ''"), - array("page_restrictions", "pr_id", "INTEGER NOT NULL UNIQUE DEFAULT nextval('page_restrictions_pr_id_val')"), - array("profiling", "pf_memory", "NUMERIC(18,10) NOT NULL DEFAULT 0"), - array("recentchanges", "rc_deleted", "SMALLINT NOT NULL DEFAULT 0"), - array("recentchanges", "rc_log_action", "TEXT"), - array("recentchanges", "rc_log_type", "TEXT"), - array("recentchanges", "rc_logid", "INTEGER NOT NULL DEFAULT 0"), - array("recentchanges", "rc_new_len", "INTEGER"), - array("recentchanges", "rc_old_len", "INTEGER"), - array("recentchanges", "rc_params", "TEXT"), - array("redirect", "rd_interwiki", "TEXT NULL"), - array("redirect", "rd_fragment", "TEXT NULL"), - array("revision", "rev_deleted", "SMALLINT NOT NULL DEFAULT 0"), - array("revision", "rev_len", "INTEGER"), - array("revision", "rev_parent_id", "INTEGER DEFAULT NULL"), - array("site_stats", "ss_active_users", "INTEGER DEFAULT '-1'"), - array("user_newtalk", "user_last_timestamp", "TIMESTAMPTZ"), - array("logging", "log_user_text", "TEXT NOT NULL DEFAULT ''"), - array("logging", "log_page", "INTEGER"), - ); - - - # table, column, desired type, USING clause if needed (with new default if needed) - $typechanges = array( - array("archive", "ar_deleted", "smallint", ""), - array("archive", "ar_minor_edit", "smallint", "ar_minor_edit::smallint DEFAULT 0"), - array("filearchive", "fa_deleted", "smallint", ""), - array("filearchive", "fa_height", "integer", ""), - array("filearchive", "fa_metadata", "bytea", "decode(fa_metadata,'escape')"), - array("filearchive", "fa_size", "integer", ""), - array("filearchive", "fa_width", "integer", ""), - array("filearchive", "fa_storage_group","text", ""), - array("filearchive", "fa_storage_key", "text", ""), - array("image", "img_metadata", "bytea", "decode(img_metadata,'escape')"), - array("image", "img_size", "integer", ""), - array("image", "img_width", "integer", ""), - array("image", "img_height", "integer", ""), - array("interwiki", "iw_local", "smallint", "iw_local::smallint DEFAULT 0"), - array("interwiki", "iw_trans", "smallint", "iw_trans::smallint DEFAULT 0"), - array("ipblocks", "ipb_auto", "smallint", "ipb_auto::smallint DEFAULT 0"), - array("ipblocks", "ipb_anon_only", "smallint", "CASE WHEN ipb_anon_only=' ' THEN 0 ELSE ipb_anon_only::smallint END DEFAULT 0"), - array("ipblocks", "ipb_create_account", "smallint", "CASE WHEN ipb_create_account=' ' THEN 0 ELSE ipb_create_account::smallint END DEFAULT 1"), - array("ipblocks", "ipb_enable_autoblock", "smallint", "CASE WHEN ipb_enable_autoblock=' ' THEN 0 ELSE ipb_enable_autoblock::smallint END DEFAULT 1"), - array("ipblocks", "ipb_block_email", "smallint", "CASE WHEN ipb_block_email=' ' THEN 0 ELSE ipb_block_email::smallint END DEFAULT 0"), - array("ipblocks", "ipb_address", "text", "ipb_address::text"), - array("ipblocks", "ipb_deleted", "smallint", "ipb_deleted::smallint DEFAULT 0"), - array("math", "math_inputhash", "bytea", "decode(math_inputhash,'escape')"), - array("math", "math_outputhash", "bytea", "decode(math_outputhash,'escape')"), - array("mwuser", "user_token", "text", ""), - array("mwuser", "user_email_token","text", ""), - array("objectcache", "keyname", "text", ""), - array("oldimage", "oi_height", "integer", ""), - array("oldimage", "oi_metadata", "bytea", "decode(img_metadata,'escape')"), - array("oldimage", "oi_size", "integer", ""), - array("oldimage", "oi_width", "integer", ""), - array("page", "page_is_redirect","smallint", "page_is_redirect::smallint DEFAULT 0"), - array("page", "page_is_new", "smallint", "page_is_new::smallint DEFAULT 0"), - array("querycache", "qc_value", "integer", ""), - array("querycachetwo","qcc_value", "integer", ""), - array("recentchanges","rc_bot", "smallint", "rc_bot::smallint DEFAULT 0"), - array("recentchanges","rc_deleted", "smallint", ""), - array("recentchanges","rc_minor", "smallint", "rc_minor::smallint DEFAULT 0"), - array("recentchanges","rc_new", "smallint", "rc_new::smallint DEFAULT 0"), - array("recentchanges","rc_type", "smallint", "rc_type::smallint DEFAULT 0"), - array("recentchanges","rc_patrolled", "smallint", "rc_patrolled::smallint DEFAULT 0"), - array("revision", "rev_deleted", "smallint", "rev_deleted::smallint DEFAULT 0"), - array("revision", "rev_minor_edit", "smallint", "rev_minor_edit::smallint DEFAULT 0"), - array("templatelinks","tl_namespace", "smallint", "tl_namespace::smallint"), - array("user_newtalk", "user_ip", "text", "host(user_ip)"), - ); - - # table, column, nullability - $nullchanges = array( - array("oldimage", "oi_bits", "NULL"), - array("oldimage", "oi_timestamp", "NULL"), - array("oldimage", "oi_major_mime", "NULL"), - array("oldimage", "oi_minor_mime", "NULL"), - ); - - $newindexes = array( - array("archive", "archive_user_text", "(ar_user_text)"), - array("image", "img_sha1", "(img_sha1)"), - array("oldimage", "oi_sha1", "(oi_sha1)"), - array("revision", "rev_text_id_idx", "(rev_text_id)"), - array("recentchanges", "rc_timestamp_bot", "(rc_timestamp) WHERE rc_bot = 0"), - array("templatelinks", "templatelinks_from", "(tl_from)"), - array("watchlist", "wl_user", "(wl_user)"), - array("logging", "logging_user_type_time", "(log_user, log_type, log_timestamp)"), - array("logging", "logging_page_id_time", "(log_page,log_timestamp)"), - ); - - $newrules = array( - ); - - #Check new sequences, rename if needed - foreach ($newsequences as $ns) { - if( $wgDatabase->sequenceExists('pr_id_val') ) { - wfOut( "Updating sequence names\n" ); - $wgDatabase->sourceFile(archive('patch-update_sequences.sql')); - continue; - } elseif ( $wgDatabase->sequenceExists('page_restrictions_pr_id_seq') ) { - wfOut( "... sequences already updated\n" ); - continue; - } else { - wfOut( "Creating sequence \"$ns\"\n" ); - $wgDatabase->query("CREATE SEQUENCE $ns"); - } - } - - foreach ($newtables as $nt) { - if ($wgDatabase->tableExists($nt[0])) { - wfOut( "... table \"$nt[0]\" already exists\n" ); - continue; - } - - wfOut( "Creating table \"$nt[0]\"\n" ); - $wgDatabase->sourceFile(archive($nt[1])); - } - - ## Needed before newcols - if ($wgDatabase->tableExists("archive2")) { - wfOut( "Converting \"archive2\" back to normal archive table\n" ); - if ($wgDatabase->ruleExists("archive", "archive_insert")) { - wfOut( "Dropping rule \"archive_insert\"\n" ); - $wgDatabase->query("DROP RULE archive_insert ON archive"); - } - if ($wgDatabase->ruleExists("archive", "archive_delete")) { - wfOut( "Dropping rule \"archive_delete\"\n" ); - $wgDatabase->query("DROP RULE archive_delete ON archive"); - } - $wgDatabase->sourceFile(archive("patch-remove-archive2.sql")); - } - else - wfOut( "... obsolete table \"archive2\" does not exist\n" ); - - foreach ($newcols as $nc) { - $fi = $wgDatabase->fieldInfo($nc[0], $nc[1]); - if (!is_null($fi)) { - wfOut( "... column \"$nc[0].$nc[1]\" already exists\n" ); - continue; - } - - wfOut( "Adding column \"$nc[0].$nc[1]\"\n" ); - $wgDatabase->query("ALTER TABLE $nc[0] ADD $nc[1] $nc[2]"); - } - - foreach ($typechanges as $tc) { - $fi = $wgDatabase->fieldInfo($tc[0], $tc[1]); - if (is_null($fi)) { - wfOut( "... error: expected column $tc[0].$tc[1] to exist\n" ); - exit(1); - } - - if ($fi->type() === $tc[2]) - wfOut( "... column \"$tc[0].$tc[1]\" is already of type \"$tc[2]\"\n" ); - else { - wfOut( "Changing column type of \"$tc[0].$tc[1]\" from \"{$fi->type()}\" to \"$tc[2]\"\n" ); - $sql = "ALTER TABLE $tc[0] ALTER $tc[1] TYPE $tc[2]"; - if (strlen($tc[3])) { - $default = array(); - if (preg_match( '/DEFAULT (.+)/', $tc[3], $default)) { - $sqldef = "ALTER TABLE $tc[0] ALTER $tc[1] SET DEFAULT $default[1]"; - $wgDatabase->query($sqldef); - $tc[3] = preg_replace( '/\s*DEFAULT .+/', '', $tc[3]); - } - $sql .= " USING $tc[3]"; - } - $sql .= ";\nCOMMIT;\n"; - $wgDatabase->query($sql); - } - } - - foreach ($nullchanges as $nc) { - $fi = $wgDatabase->fieldInfo($nc[0], $nc[1]); - if (is_null($fi)) { - wfOut( "... error: expected column $nc[0].$nc[1] to exist\n" ); - exit(1); - } - if ($fi->nullable()) { - ## It's NULL - does it need to be NOT NULL? - if ('NOT NULL' === $nc[2]) { - wfOut( "Changing \"$nc[0].$nc[1]\" to not allow NULLs\n" ); - $wgDatabase->query( "ALTER TABLE $nc[0] ALTER $nc[1] SET NOT NULL" ); - } - else { - wfOut( "... column \"$nc[0].$nc[1]\" is already set as NULL\n" ); - } - } - else { - ## It's NOT NULL - does it need to be NULL? - if ('NULL' === $nc[2]) { - wfOut( "Changing \"$nc[0].$nc[1]\" to allow NULLs\n" ); - $wgDatabase->query( "ALTER TABLE $nc[0] ALTER $nc[1] DROP NOT NULL" ); - } - else { - wfOut( "... column \"$nc[0].$nc[1]\" is already set as NOT NULL\n" ); - } - } - } - - if ($wgDatabase->fieldInfo('oldimage','oi_deleted')->type() !== 'smallint') { - wfOut( "Changing \"oldimage.oi_deleted\" to type \"smallint\"\n" ); - $wgDatabase->query( "ALTER TABLE oldimage ALTER oi_deleted DROP DEFAULT" ); - $wgDatabase->query( "ALTER TABLE oldimage ALTER oi_deleted TYPE SMALLINT USING (oi_deleted::smallint)" ); - $wgDatabase->query( "ALTER TABLE oldimage ALTER oi_deleted SET DEFAULT 0" ); - } - else - wfOut( "... column \"oldimage.oi_deleted\" is already of type \"smallint\"\n" ); - - - foreach ($newindexes as $ni) { - if (pg_index_exists($ni[0], $ni[1])) { - wfOut( "... index \"$ni[1]\" on table \"$ni[0]\" already exists\n" ); - continue; - } - wfOut( "Creating index \"$ni[1]\" on table \"$ni[0]\" $ni[2]\n" ); - $wgDatabase->query( "CREATE INDEX $ni[1] ON $ni[0] $ni[2]" ); - } - - foreach ($newrules as $nr) { - if ($wgDatabase->ruleExists($nr[0], $nr[1])) { - wfOut( "... rule \"$nr[1]\" on table \"$nr[0]\" already exists\n" ); - continue; - } - wfOut( "Adding rule \"$nr[1]\" to table \"$nr[0]\"\n" ); - $wgDatabase->sourceFile(archive($nr[2])); - } - - if ($wgDatabase->hasConstraint("oldimage_oi_name_fkey_cascaded")) { - wfOut( "... table \"oldimage\" has correct cascading delete/update foreign key to image\n" ); - } - else { - if ($wgDatabase->hasConstraint("oldimage_oi_name_fkey")) { - $wgDatabase->query( "ALTER TABLE oldimage DROP CONSTRAINT oldimage_oi_name_fkey" ); - } - if ($wgDatabase->hasConstraint("oldimage_oi_name_fkey_cascade")) { - $wgDatabase->query( "ALTER TABLE oldimage DROP CONSTRAINT oldimage_oi_name_fkey_cascade" ); - } - wfOut( "Making foreign key on table \"oldimage\" (to image) a cascade delete/update\n" ); - $wgDatabase->query( "ALTER TABLE oldimage ADD CONSTRAINT oldimage_oi_name_fkey_cascaded ". - "FOREIGN KEY (oi_name) REFERENCES image(img_name) ON DELETE CASCADE ON UPDATE CASCADE" ); - } - - if (!$wgDatabase->triggerExists("page", "page_deleted")) { - wfOut( "Adding function and trigger \"page_deleted\" to table \"page\"\n" ); - $wgDatabase->sourceFile(archive('patch-page_deleted.sql')); - } - else - wfOut( "... table \"page\" has \"page_deleted\" trigger\n" ); - - $fi = $wgDatabase->fieldInfo("recentchanges", "rc_cur_id"); - if (!$fi->nullable()) { - wfOut( "Removing NOT NULL constraint from \"recentchanges.rc_cur_id\"\n" ); - $wgDatabase->sourceFile(archive('patch-rc_cur_id-not-null.sql')); - } - else - wfOut( "... column \"recentchanges.rc_cur_id\" has a NOT NULL constraint\n" ); - - $pu = pg_describe_index("pagelink_unique"); - if (!is_null($pu) && ($pu[0] != "pl_from" || $pu[1] != "pl_namespace" || $pu[2] != "pl_title")) { - wfOut( "Dropping obsolete version of index \"pagelink_unique index\"\n" ); - $wgDatabase->query("DROP INDEX pagelink_unique"); - $pu = null; - } - else - wfOut( "... obsolete version of index \"pagelink_unique index\" does not exist\n" ); - - if (is_null($pu)) { - wfOut( "Creating index \"pagelink_unique index\"\n" ); - $wgDatabase->query("CREATE UNIQUE INDEX pagelink_unique ON pagelinks (pl_from,pl_namespace,pl_title)"); - } - else - wfOut( "... index \"pagelink_unique_index\" already exists\n" ); - - if (pg_fkey_deltype("revision_rev_user_fkey") == 'r') { - wfOut( "... constraint \"revision_rev_user_fkey\" is ON DELETE RESTRICT\n" ); - } - else { - wfOut( "Changing constraint \"revision_rev_user_fkey\" to ON DELETE RESTRICT\n" ); - $wgDatabase->sourceFile(archive('patch-revision_rev_user_fkey.sql')); - } - - # Fix ipb_address index - if (pg_index_exists('ipblocks', 'ipb_address' )) { - wfOut( "Removing deprecated index 'ipb_address'...\n" ); - $wgDatabase->query('DROP INDEX ipb_address'); - } - if (pg_index_exists('ipblocks', 'ipb_address_unique' )) { - wfOut( "... have ipb_address_unique\n" ); - } - else { - wfOut( "Adding ipb_address_unique index\n" ); - $wgDatabase->sourceFile(archive('patch-ipb_address_unique.sql')); - } - - global $wgExtNewTables, $wgExtPGNewFields, $wgExtPGAlteredFields, $wgExtNewIndexes; - # Add missing extension tables - foreach ( $wgExtNewTables as $nt ) { - if ($wgDatabase->tableExists($nt[0])) { - wfOut( "... table \"$nt[0]\" already exists\n" ); - continue; - } - wfOut( "Creating table \"$nt[0]\"\n" ); - $wgDatabase->sourceFile($nt[1]); - } - # Add missing extension fields - foreach ( $wgExtPGNewFields as $nc ) { - $fi = $wgDatabase->fieldInfo($nc[0], $nc[1]); - if (!is_null($fi)) { - wfOut( "... column \"$nc[0].$nc[1]\" already exists\n" ); - continue; - } - wfOut( "Adding column \"$nc[0].$nc[1]\"\n" ); - $wgDatabase->query( "ALTER TABLE $nc[0] ADD $nc[1] $nc[2]" ); - } - # Change altered columns - foreach ( $wgExtPGAlteredFields as $nc ) { - $fi = $wgDatabase->fieldInfo($nc[0], $nc[1]); - if (is_null($fi)) { - wfOut( "WARNING! Column \"$nc[0].$nc[1]\" does not exist but had an alter request! Please report this.\n" ); - continue; - } - $oldtype = $fi->type(); - $newtype = strtolower( $nc[2] ); - if ($oldtype === $newtype) { - wfOut( "... column \"$nc[0].$nc[1]\" has correct type of \"$newtype\"\n" ); - continue; - } - $command = "ALTER TABLE $nc[0] ALTER $nc[1] TYPE $nc[2]"; - if ( isset( $nc[3] ) ) { - $command .= " USING $nc[3]"; - } - wfOut( "Altering column \"$nc[0].$nc[1]\" from type \"$oldtype\" to \"$newtype\"\n" ); - $wgDatabase->query( $command ); - } - # Add missing extension indexes - foreach ( $wgExtNewIndexes as $ni ) { - if (pg_index_exists($ni[0], $ni[1])) { - wfOut( "... index \"$ni[1]\" on table \"$ni[0]\" already exists\n" ); - continue; - } - wfOut( "Creating index \"$ni[1]\" on table \"$ni[0]\"\n" ); - if ( preg_match( '/^\(/', $ni[2] ) ) { - $wgDatabase->query( "CREATE INDEX $ni[1] ON $ni[0] $ni[2]" ); - } - else { - $wgDatabase->sourceFile($ni[2]); - } - } - - # Tweak the page_title tsearch2 trigger to filter out slashes - # This is create or replace, so harmless to call if not needed - $wgDatabase->sourceFile(archive('patch-ts2pagetitle.sql')); - - ## If the server is 8.3 or higher, rewrite the tsearch2 triggers - ## in case they have the old 'default' versions - if ( $numver >= 8.3 ) - $wgDatabase->sourceFile(archive('patch-tsearch2funcs.sql')); - - ## Put a new row in the mediawiki_version table - $wgDatabase->insert( 'mediawiki_version', - array( - 'type' => 'Update', - 'ctype' => 'U', - 'mw_version' => $wgVersion, - 'pg_version' => $version, - 'sql_version' => '$LastChangedRevision: 84593 $', - 'sql_date' => '$LastChangedDate: 2011-03-23 23:14:46 +1100 (Wed, 23 Mar 2011) $', - ) ); - return; -} diff --git a/maintenance/upgrade1_5.php b/maintenance/upgrade1_5.php index 4834a4a1..c5e1a33d 100644 --- a/maintenance/upgrade1_5.php +++ b/maintenance/upgrade1_5.php @@ -13,22 +13,1298 @@ * @ingroup Maintenance */ -$options = array( 'step', 'noimages' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); -require_once( dirname(__FILE__) . '/commandLine.inc' ); -require_once( 'FiveUpgrade.inc' ); +define( 'MW_UPGRADE_COPY', false ); +define( 'MW_UPGRADE_ENCODE', true ); +define( 'MW_UPGRADE_NULL', null ); +define( 'MW_UPGRADE_CALLBACK', null ); // for self-documentation only -echo "ATTENTION: This script is for upgrades from 1.4 to 1.5 (NOT 1.15) in very special cases.\n"; -echo "Use update.php for usual updates.\n"; +/** + * @ingroup Maintenance + */ +class FiveUpgrade extends Maintenance { + function __construct() { + parent::__construct(); -// Seems to confuse some people -if ( !array_search( '--upgrade', $_SERVER['argv'] ) ) { - echo "Please run this script with --upgrade key to actually run the updater.\n"; - die; -} + $this->mDescription = 'Script for upgrades from 1.4 to 1.5 (NOT 1.15) in very special cases.'; + + $this->addOption( 'upgrade', 'Really run the script' ); + $this->addOption( 'noimage', '' ); + $this->addOption( 'step', 'Only do a specific step', false, true ); + } + + public function getDbType() { + return Maintenance::DB_ADMIN; + } + + public function execute() { + $this->output( "ATTENTION: This script is for upgrades from 1.4 to 1.5 (NOT 1.15) in very special cases.\n" ); + $this->output( "Use update.php for usual updates.\n" ); + + if ( !$this->hasOption( 'upgrade' ) ) { + $this->output( "Please run this script with --upgrade key to actually run the updater.\n" ); + return; + } + + $this->setMembers(); + + $tables = array( + 'page', + 'links', + 'user', + 'image', + 'oldimage', + 'watchlist', + 'logging', + 'archive', + 'imagelinks', + 'categorylinks', + 'ipblocks', + 'recentchanges', + 'querycache' + ); + + foreach ( $tables as $table ) { + if ( $this->doing( $table ) ) { + $method = 'upgrade' . ucfirst( $table ); + $this->$method(); + } + } + + if ( $this->doing( 'cleanup' ) ) { + $this->upgradeCleanup(); + } + } + + protected function setMembers() { + $this->conversionTables = $this->prepareWindows1252(); + + $this->loadBalancers = array(); + $this->dbw = wfGetDB( DB_MASTER ); + $this->dbr = $this->streamConnection(); + + $this->cleanupSwaps = array(); + $this->emailAuth = false; # don't preauthenticate emails + $this->maxLag = 10; # if slaves are lagged more than 10 secs, wait + $this->step = $this->getOption( 'step', null ); + } + + function doing( $step ) { + return is_null( $this->step ) || $step == $this->step; + } + + /** + * Open a connection to the master server with the admin rights. + * @return Database + * @access private + */ + function newConnection() { + $lb = wfGetLBFactory()->newMainLB(); + $db = $lb->getConnection( DB_MASTER ); + + $this->loadBalancers[] = $lb; + return $db; + } + + /** + * Commit transactions and close the connections when we're done... + */ + function close() { + foreach ( $this->loadBalancers as $lb ) { + $lb->commitMasterChanges(); + $lb->closeAll(); + } + } + + /** + * Open a second connection to the master server, with buffering off. + * This will let us stream large datasets in and write in chunks on the + * other end. + * @return Database + * @access private + */ + function streamConnection() { + global $wgDBtype; + + $timeout = 3600 * 24; + $db = $this->newConnection(); + $db->bufferResults( false ); + if ( $wgDBtype == 'mysql' ) { + $db->query( "SET net_read_timeout=$timeout" ); + $db->query( "SET net_write_timeout=$timeout" ); + } + return $db; + } + + /** + * Prepare a conversion array for converting Windows Code Page 1252 to + * UTF-8. This should provide proper conversion of text that was miscoded + * as Windows-1252 by naughty user-agents, and doesn't rely on an outside + * iconv library. + * + * @return array + * @access private + */ + function prepareWindows1252() { + # Mappings from: + # http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT + static $cp1252 = array( + 0x80 => 0x20AC, # EURO SIGN + 0x81 => 0xFFFD, # REPLACEMENT CHARACTER (no mapping) + 0x82 => 0x201A, # SINGLE LOW-9 QUOTATION MARK + 0x83 => 0x0192, # LATIN SMALL LETTER F WITH HOOK + 0x84 => 0x201E, # DOUBLE LOW-9 QUOTATION MARK + 0x85 => 0x2026, # HORIZONTAL ELLIPSIS + 0x86 => 0x2020, # DAGGER + 0x87 => 0x2021, # DOUBLE DAGGER + 0x88 => 0x02C6, # MODIFIER LETTER CIRCUMFLEX ACCENT + 0x89 => 0x2030, # PER MILLE SIGN + 0x8A => 0x0160, # LATIN CAPITAL LETTER S WITH CARON + 0x8B => 0x2039, # SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 0x8C => 0x0152, # LATIN CAPITAL LIGATURE OE + 0x8D => 0xFFFD, # REPLACEMENT CHARACTER (no mapping) + 0x8E => 0x017D, # LATIN CAPITAL LETTER Z WITH CARON + 0x8F => 0xFFFD, # REPLACEMENT CHARACTER (no mapping) + 0x90 => 0xFFFD, # REPLACEMENT CHARACTER (no mapping) + 0x91 => 0x2018, # LEFT SINGLE QUOTATION MARK + 0x92 => 0x2019, # RIGHT SINGLE QUOTATION MARK + 0x93 => 0x201C, # LEFT DOUBLE QUOTATION MARK + 0x94 => 0x201D, # RIGHT DOUBLE QUOTATION MARK + 0x95 => 0x2022, # BULLET + 0x96 => 0x2013, # EN DASH + 0x97 => 0x2014, # EM DASH + 0x98 => 0x02DC, # SMALL TILDE + 0x99 => 0x2122, # TRADE MARK SIGN + 0x9A => 0x0161, # LATIN SMALL LETTER S WITH CARON + 0x9B => 0x203A, # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 0x9C => 0x0153, # LATIN SMALL LIGATURE OE + 0x9D => 0xFFFD, # REPLACEMENT CHARACTER (no mapping) + 0x9E => 0x017E, # LATIN SMALL LETTER Z WITH CARON + 0x9F => 0x0178, # LATIN CAPITAL LETTER Y WITH DIAERESIS + ); + $pairs = array(); + for ( $i = 0; $i < 0x100; $i++ ) { + $unicode = isset( $cp1252[$i] ) ? $cp1252[$i] : $i; + $pairs[chr( $i )] = codepointToUtf8( $unicode ); + } + return $pairs; + } + + /** + * Convert from 8-bit Windows-1252 to UTF-8 if necessary. + * @param string $text + * @return string + * @access private + */ + function conv( $text ) { + global $wgUseLatin1; + return is_null( $text ) + ? null + : ( $wgUseLatin1 + ? strtr( $text, $this->conversionTables ) + : $text ); + } + + /** + * Dump timestamp and message to output + * @param $message String + * @access private + */ + function log( $message ) { + $this->output( wfWikiID() . ' ' . wfTimestamp( TS_DB ) . ': ' . $message . "\n" ); + } + + /** + * Initialize the chunked-insert system. + * Rows will be inserted in chunks of the given number, rather + * than in a giant INSERT...SELECT query, to keep the serialized + * MySQL database replication from getting hung up. This way other + * things can be going on during conversion without waiting for + * slaves to catch up as badly. + * + * @param int $chunksize Number of rows to insert at once + * @param int $final Total expected number of rows / id of last row, + * used for progress reports. + * @param string $table to insert on + * @param string $fname function name to report in SQL + * @access private + */ + function setChunkScale( $chunksize, $final, $table, $fname ) { + $this->chunkSize = $chunksize; + $this->chunkFinal = $final; + $this->chunkCount = 0; + $this->chunkStartTime = wfTime(); + $this->chunkOptions = array( 'IGNORE' ); + $this->chunkTable = $table; + $this->chunkFunction = $fname; + } + + /** + * Chunked inserts: perform an insert if we've reached the chunk limit. + * Prints a progress report with estimated completion time. + * @param array &$chunk -- This will be emptied if an insert is done. + * @param int $key A key identifier to use in progress estimation in + * place of the number of rows inserted. Use this if + * you provided a max key number instead of a count + * as the final chunk number in setChunkScale() + * @access private + */ + function addChunk( &$chunk, $key = null ) { + if ( count( $chunk ) >= $this->chunkSize ) { + $this->insertChunk( $chunk ); + + $this->chunkCount += count( $chunk ); + $now = wfTime(); + $delta = $now - $this->chunkStartTime; + $rate = $this->chunkCount / $delta; + + if ( is_null( $key ) ) { + $completed = $this->chunkCount; + } else { + $completed = $key; + } + $portion = $completed / $this->chunkFinal; + + $estimatedTotalTime = $delta / $portion; + $eta = $this->chunkStartTime + $estimatedTotalTime; + + printf( "%s: %6.2f%% done on %s; ETA %s [%d/%d] %.2f/sec\n", + wfTimestamp( TS_DB, intval( $now ) ), + $portion * 100.0, + $this->chunkTable, + wfTimestamp( TS_DB, intval( $eta ) ), + $completed, + $this->chunkFinal, + $rate ); + flush(); + + $chunk = array(); + } + } + + /** + * Chunked inserts: perform an insert unconditionally, at the end, and log. + * @param array &$chunk -- This will be emptied if an insert is done. + * @access private + */ + function lastChunk( &$chunk ) { + $n = count( $chunk ); + if ( $n > 0 ) { + $this->insertChunk( $chunk ); + } + $this->log( "100.00% done on $this->chunkTable (last chunk $n rows)." ); + } + + /** + * Chunked inserts: perform an insert. + * @param array &$chunk -- This will be emptied if an insert is done. + * @access private + */ + function insertChunk( &$chunk ) { + // Give slaves a chance to catch up + wfWaitForSlaves( $this->maxLag ); + $this->dbw->insert( $this->chunkTable, $chunk, $this->chunkFunction, $this->chunkOptions ); + } + + + /** + * Copy and transcode a table to table_temp. + * @param string $name Base name of the source table + * @param string $tabledef CREATE TABLE definition, w/ $1 for the name + * @param array $fields set of destination fields to these constants: + * MW_UPGRADE_COPY - straight copy + * MW_UPGRADE_ENCODE - for old Latin1 wikis, conv to UTF-8 + * MW_UPGRADE_NULL - just put NULL + * @param callable $callback An optional callback to modify the data + * or perform other processing. Func should be + * ( object $row, array $copy ) and return $copy + * @access private + */ + function copyTable( $name, $tabledef, $fields, $callback = null ) { + $name_temp = $name . '_temp'; + $this->log( "Migrating $name table to $name_temp..." ); + + $table_temp = $this->dbw->tableName( $name_temp ); + + // Create temporary table; we're going to copy everything in there, + // then at the end rename the final tables into place. + $def = str_replace( '$1', $table_temp, $tabledef ); + $this->dbw->query( $def, __METHOD__ ); + + $numRecords = $this->dbw->selectField( $name, 'COUNT(*)', '', __METHOD__ ); + $this->setChunkScale( 100, $numRecords, $name_temp, __METHOD__ ); + + // Pull all records from the second, streaming database connection. + $sourceFields = array_keys( array_filter( $fields, + create_function( '$x', 'return $x !== MW_UPGRADE_NULL;' ) ) ); + $result = $this->dbr->select( $name, + $sourceFields, + '', + __METHOD__ ); + + $add = array(); + foreach ( $result as $row ) { + $copy = array(); + foreach ( $fields as $field => $source ) { + if ( $source === MW_UPGRADE_COPY ) { + $copy[$field] = $row->$field; + } elseif ( $source === MW_UPGRADE_ENCODE ) { + $copy[$field] = $this->conv( $row->$field ); + } elseif ( $source === MW_UPGRADE_NULL ) { + $copy[$field] = null; + } else { + $this->log( "Unknown field copy type: $field => $source" ); + } + } + if ( is_callable( $callback ) ) { + $copy = call_user_func( $callback, $row, $copy ); + } + $add[] = $copy; + $this->addChunk( $add ); + } + $this->lastChunk( $add ); + + $this->log( "Done converting $name." ); + $this->cleanupSwaps[] = $name; + } + + function upgradePage() { + $chunksize = 100; + + if ( $this->dbw->tableExists( 'page' ) ) { + $this->error( 'Page table already exists.', true ); + } + + $this->log( "Checking cur table for unique title index and applying if necessary" ); + $this->checkDupes(); + + $this->log( "...converting from cur/old to page/revision/text DB structure." ); + + list ( $cur, $old, $page, $revision, $text ) = $this->dbw->tableNamesN( 'cur', 'old', 'page', 'revision', 'text' ); + + $this->log( "Creating page and revision tables..." ); + $this->dbw->query( "CREATE TABLE $page ( + page_id int(8) unsigned NOT NULL auto_increment, + page_namespace int NOT NULL, + page_title varchar(255) binary NOT NULL, + page_restrictions tinyblob NOT NULL default '', + page_counter bigint(20) unsigned NOT NULL default '0', + page_is_redirect tinyint(1) unsigned NOT NULL default '0', + page_is_new tinyint(1) unsigned NOT NULL default '0', + page_random real unsigned NOT NULL, + page_touched char(14) binary NOT NULL default '', + page_latest int(8) unsigned NOT NULL, + page_len int(8) unsigned NOT NULL, + + PRIMARY KEY page_id (page_id), + UNIQUE INDEX name_title (page_namespace,page_title), + INDEX (page_random), + INDEX (page_len) + ) TYPE=InnoDB", __METHOD__ ); + $this->dbw->query( "CREATE TABLE $revision ( + rev_id int(8) unsigned NOT NULL auto_increment, + rev_page int(8) unsigned NOT NULL, + rev_text_id int(8) unsigned NOT NULL, + rev_comment tinyblob NOT NULL default '', + rev_user int(5) unsigned NOT NULL default '0', + rev_user_text varchar(255) binary NOT NULL default '', + rev_timestamp char(14) binary NOT NULL default '', + rev_minor_edit tinyint(1) unsigned NOT NULL default '0', + rev_deleted tinyint(1) unsigned NOT NULL default '0', + + PRIMARY KEY rev_page_id (rev_page, rev_id), + UNIQUE INDEX rev_id (rev_id), + INDEX rev_timestamp (rev_timestamp), + INDEX page_timestamp (rev_page,rev_timestamp), + INDEX user_timestamp (rev_user,rev_timestamp), + INDEX usertext_timestamp (rev_user_text,rev_timestamp) + ) TYPE=InnoDB", __METHOD__ ); + + $maxold = intval( $this->dbw->selectField( 'old', 'max(old_id)', '', __METHOD__ ) ); + $this->log( "Last old record is {$maxold}" ); + + global $wgLegacySchemaConversion; + if ( $wgLegacySchemaConversion ) { + // Create HistoryBlobCurStub entries. + // Text will be pulled from the leftover 'cur' table at runtime. + echo "......Moving metadata from cur; using blob references to text in cur table.\n"; + $cur_text = "concat('O:18:\"historyblobcurstub\":1:{s:6:\"mCurId\";i:',cur_id,';}')"; + $cur_flags = "'object'"; + } else { + // Copy all cur text in immediately: this may take longer but avoids + // having to keep an extra table around. + echo "......Moving text from cur.\n"; + $cur_text = 'cur_text'; + $cur_flags = "''"; + } + + $maxcur = $this->dbw->selectField( 'cur', 'max(cur_id)', '', __METHOD__ ); + $this->log( "Last cur entry is $maxcur" ); + + /** + * Copy placeholder records for each page's current version into old + * Don't do any conversion here; text records are converted at runtime + * based on the flags (and may be originally binary!) while the meta + * fields will be converted in the old -> rev and cur -> page steps. + */ + $this->setChunkScale( $chunksize, $maxcur, 'old', __METHOD__ ); + $result = $this->dbr->query( + "SELECT cur_id, cur_namespace, cur_title, $cur_text AS text, cur_comment, + cur_user, cur_user_text, cur_timestamp, cur_minor_edit, $cur_flags AS flags + FROM $cur + ORDER BY cur_id", __METHOD__ ); + $add = array(); + foreach ( $result as $row ) { + $add[] = array( + 'old_namespace' => $row->cur_namespace, + 'old_title' => $row->cur_title, + 'old_text' => $row->text, + 'old_comment' => $row->cur_comment, + 'old_user' => $row->cur_user, + 'old_user_text' => $row->cur_user_text, + 'old_timestamp' => $row->cur_timestamp, + 'old_minor_edit' => $row->cur_minor_edit, + 'old_flags' => $row->flags ); + $this->addChunk( $add, $row->cur_id ); + } + $this->lastChunk( $add ); + + /** + * Copy revision metadata from old into revision. + * We'll also do UTF-8 conversion of usernames and comments. + */ + # $newmaxold = $this->dbw->selectField( 'old', 'max(old_id)', '', __METHOD__ ); + # $this->setChunkScale( $chunksize, $newmaxold, 'revision', __METHOD__ ); + # $countold = $this->dbw->selectField( 'old', 'count(old_id)', '', __METHOD__ ); + $countold = $this->dbw->selectField( 'old', 'max(old_id)', '', __METHOD__ ); + $this->setChunkScale( $chunksize, $countold, 'revision', __METHOD__ ); + + $this->log( "......Setting up revision table." ); + $result = $this->dbr->query( + "SELECT old_id, cur_id, old_comment, old_user, old_user_text, + old_timestamp, old_minor_edit + FROM $old,$cur WHERE old_namespace=cur_namespace AND old_title=cur_title", + __METHOD__ ); + + $add = array(); + foreach ( $result as $row ) { + $add[] = array( + 'rev_id' => $row->old_id, + 'rev_page' => $row->cur_id, + 'rev_text_id' => $row->old_id, + 'rev_comment' => $this->conv( $row->old_comment ), + 'rev_user' => $row->old_user, + 'rev_user_text' => $this->conv( $row->old_user_text ), + 'rev_timestamp' => $row->old_timestamp, + 'rev_minor_edit' => $row->old_minor_edit ); + $this->addChunk( $add ); + } + $this->lastChunk( $add ); + + + /** + * Copy page metadata from cur into page. + * We'll also do UTF-8 conversion of titles. + */ + $this->log( "......Setting up page table." ); + $this->setChunkScale( $chunksize, $maxcur, 'page', __METHOD__ ); + $result = $this->dbr->query( " + SELECT cur_id, cur_namespace, cur_title, cur_restrictions, cur_counter, cur_is_redirect, cur_is_new, + cur_random, cur_touched, rev_id, LENGTH(cur_text) AS len + FROM $cur,$revision + WHERE cur_id=rev_page AND rev_timestamp=cur_timestamp AND rev_id > {$maxold} + ORDER BY cur_id", __METHOD__ ); + $add = array(); + foreach ( $result as $row ) { + $add[] = array( + 'page_id' => $row->cur_id, + 'page_namespace' => $row->cur_namespace, + 'page_title' => $this->conv( $row->cur_title ), + 'page_restrictions' => $row->cur_restrictions, + 'page_counter' => $row->cur_counter, + 'page_is_redirect' => $row->cur_is_redirect, + 'page_is_new' => $row->cur_is_new, + 'page_random' => $row->cur_random, + 'page_touched' => $this->dbw->timestamp(), + 'page_latest' => $row->rev_id, + 'page_len' => $row->len ); + # $this->addChunk( $add, $row->cur_id ); + $this->addChunk( $add ); + } + $this->lastChunk( $add ); + + $this->log( "...done with cur/old -> page/revision." ); + } + + function upgradeLinks() { + $chunksize = 200; + list ( $links, $brokenlinks, $pagelinks, $cur ) = $this->dbw->tableNamesN( 'links', 'brokenlinks', 'pagelinks', 'cur' ); + + $this->log( 'Checking for interwiki table change in case of bogus items...' ); + if ( $this->dbw->fieldExists( 'interwiki', 'iw_trans' ) ) { + $this->log( 'interwiki has iw_trans.' ); + } else { + global $IP; + $this->log( 'adding iw_trans...' ); + $this->dbw->sourceFile( $IP . '/maintenance/archives/patch-interwiki-trans.sql' ); + $this->log( 'added iw_trans.' ); + } + + $this->log( 'Creating pagelinks table...' ); + $this->dbw->query( " +CREATE TABLE $pagelinks ( + -- Key to the page_id of the page containing the link. + pl_from int(8) unsigned NOT NULL default '0', + + -- Key to page_namespace/page_title of the target page. + -- The target page may or may not exist, and due to renames + -- and deletions may refer to different page records as time + -- goes by. + pl_namespace int NOT NULL default '0', + pl_title varchar(255) binary NOT NULL default '', + + UNIQUE KEY pl_from(pl_from,pl_namespace,pl_title), + KEY (pl_namespace,pl_title) + +) TYPE=InnoDB" ); + + $this->log( 'Importing live links -> pagelinks' ); + $nlinks = $this->dbw->selectField( 'links', 'count(*)', '', __METHOD__ ); + if ( $nlinks ) { + $this->setChunkScale( $chunksize, $nlinks, 'pagelinks', __METHOD__ ); + $result = $this->dbr->query( " + SELECT l_from,cur_namespace,cur_title + FROM $links, $cur + WHERE l_to=cur_id", __METHOD__ ); + $add = array(); + foreach ( $result as $row ) { + $add[] = array( + 'pl_from' => $row->l_from, + 'pl_namespace' => $row->cur_namespace, + 'pl_title' => $this->conv( $row->cur_title ) ); + $this->addChunk( $add ); + } + $this->lastChunk( $add ); + } else { + $this->log( 'no links!' ); + } + + $this->log( 'Importing brokenlinks -> pagelinks' ); + $nbrokenlinks = $this->dbw->selectField( 'brokenlinks', 'count(*)', '', __METHOD__ ); + if ( $nbrokenlinks ) { + $this->setChunkScale( $chunksize, $nbrokenlinks, 'pagelinks', __METHOD__ ); + $result = $this->dbr->query( + "SELECT bl_from, bl_to FROM $brokenlinks", + __METHOD__ ); + $add = array(); + foreach ( $result as $row ) { + $pagename = $this->conv( $row->bl_to ); + $title = Title::newFromText( $pagename ); + if ( is_null( $title ) ) { + $this->log( "** invalid brokenlink: $row->bl_from -> '$pagename' (converted from '$row->bl_to')" ); + } else { + $add[] = array( + 'pl_from' => $row->bl_from, + 'pl_namespace' => $title->getNamespace(), + 'pl_title' => $title->getDBkey() ); + $this->addChunk( $add ); + } + } + $this->lastChunk( $add ); + } else { + $this->log( 'no brokenlinks!' ); + } + + $this->log( 'Done with links.' ); + } + + function userDupeCallback( $str ) { + echo $str; + } + + function upgradeUser() { + // Apply unique index, if necessary: + $duper = new UserDupes( $this->dbw, array( $this, 'userDupeCallback' ) ); + if ( $duper->hasUniqueIndex() ) { + $this->log( "Already have unique user_name index." ); + } else { + $this->log( "Clearing user duplicates..." ); + if ( !$duper->clearDupes() ) { + $this->log( "WARNING: Duplicate user accounts, may explode!" ); + } + } + + $tabledef = << MW_UPGRADE_COPY, + 'user_name' => MW_UPGRADE_ENCODE, + 'user_real_name' => MW_UPGRADE_ENCODE, + 'user_password' => MW_UPGRADE_COPY, + 'user_newpassword' => MW_UPGRADE_COPY, + 'user_email' => MW_UPGRADE_ENCODE, + 'user_options' => MW_UPGRADE_ENCODE, + 'user_touched' => MW_UPGRADE_CALLBACK, + 'user_token' => MW_UPGRADE_COPY, + 'user_email_authenticated' => MW_UPGRADE_CALLBACK, + 'user_email_token' => MW_UPGRADE_NULL, + 'user_email_token_expires' => MW_UPGRADE_NULL ); + $this->copyTable( 'user', $tabledef, $fields, + array( &$this, 'userCallback' ) ); + } + + function userCallback( $row, $copy ) { + $now = $this->dbw->timestamp(); + $copy['user_touched'] = $now; + $copy['user_email_authenticated'] = $this->emailAuth ? $now : null; + return $copy; + } + + function upgradeImage() { + $tabledef = << MW_UPGRADE_ENCODE, + 'img_size' => MW_UPGRADE_COPY, + 'img_width' => MW_UPGRADE_CALLBACK, + 'img_height' => MW_UPGRADE_CALLBACK, + 'img_metadata' => MW_UPGRADE_CALLBACK, + 'img_bits' => MW_UPGRADE_CALLBACK, + 'img_media_type' => MW_UPGRADE_CALLBACK, + 'img_major_mime' => MW_UPGRADE_CALLBACK, + 'img_minor_mime' => MW_UPGRADE_CALLBACK, + 'img_description' => MW_UPGRADE_ENCODE, + 'img_user' => MW_UPGRADE_COPY, + 'img_user_text' => MW_UPGRADE_ENCODE, + 'img_timestamp' => MW_UPGRADE_COPY ); + $this->copyTable( 'image', $tabledef, $fields, + array( &$this, 'imageCallback' ) ); + } + + function imageCallback( $row, $copy ) { + if ( !$this->hasOption( 'noimage' ) ) { + // Fill in the new image info fields + $info = $this->imageInfo( $row->img_name ); + + $copy['img_width' ] = $info['width']; + $copy['img_height' ] = $info['height']; + $copy['img_metadata' ] = ""; // loaded on-demand + $copy['img_bits' ] = $info['bits']; + $copy['img_media_type'] = $info['media']; + $copy['img_major_mime'] = $info['major']; + $copy['img_minor_mime'] = $info['minor']; + } + + // If doing UTF8 conversion the file must be renamed + $this->renameFile( $row->img_name, 'wfImageDir' ); + + return $copy; + } + + function imageInfo( $filename ) { + $info = array( + 'width' => 0, + 'height' => 0, + 'bits' => 0, + 'media' => '', + 'major' => '', + 'minor' => '' ); + + $magic = MimeMagic::singleton(); + $mime = $magic->guessMimeType( $filename, true ); + list( $info['major'], $info['minor'] ) = explode( '/', $mime ); -$upgrade = new FiveUpgrade(); -$step = isset( $options['step'] ) ? $options['step'] : null; -$upgrade->upgrade( $step ); + $info['media'] = $magic->getMediaType( $filename, $mime ); + $image = UnregisteredLocalFile::newFromPath( $filename, $mime ); + + $info['width'] = $image->getWidth(); + $info['height'] = $image->getHeight(); + + $gis = $image->getImageSize( $filename ); + if ( isset( $gis['bits'] ) ) { + $info['bits'] = $gis['bits']; + } + + return $info; + } + + + /** + * Truncate a table. + * @param string $table The table name to be truncated + */ + function clearTable( $table ) { + print "Clearing $table...\n"; + $tableName = $this->db->tableName( $table ); + $this->db->query( "TRUNCATE $tableName" ); + } + + /** + * Rename a given image or archived image file to the converted filename, + * leaving a symlink for URL compatibility. + * + * @param string $oldname pre-conversion filename + * @param string $basename pre-conversion base filename for dir hashing, if an archive + * @access private + */ + function renameFile( $oldname, $subdirCallback = 'wfImageDir', $basename = null ) { + $newname = $this->conv( $oldname ); + if ( $newname == $oldname ) { + // No need to rename; another field triggered this row. + return false; + } + + if ( is_null( $basename ) ) $basename = $oldname; + $ubasename = $this->conv( $basename ); + $oldpath = call_user_func( $subdirCallback, $basename ) . '/' . $oldname; + $newpath = call_user_func( $subdirCallback, $ubasename ) . '/' . $newname; + + $this->log( "$oldpath -> $newpath" ); + if ( rename( $oldpath, $newpath ) ) { + $relpath = wfRelativePath( $newpath, dirname( $oldpath ) ); + if ( !symlink( $relpath, $oldpath ) ) { + $this->log( "... symlink failed!" ); + } + return $newname; + } else { + $this->log( "... rename failed!" ); + return false; + } + } + + function upgradeOldImage() { + $tabledef = << MW_UPGRADE_ENCODE, + 'oi_archive_name' => MW_UPGRADE_ENCODE, + 'oi_size' => MW_UPGRADE_COPY, + 'oi_width' => MW_UPGRADE_CALLBACK, + 'oi_height' => MW_UPGRADE_CALLBACK, + 'oi_bits' => MW_UPGRADE_CALLBACK, + 'oi_description' => MW_UPGRADE_ENCODE, + 'oi_user' => MW_UPGRADE_COPY, + 'oi_user_text' => MW_UPGRADE_ENCODE, + 'oi_timestamp' => MW_UPGRADE_COPY ); + $this->copyTable( 'oldimage', $tabledef, $fields, + array( &$this, 'oldimageCallback' ) ); + } + + function oldimageCallback( $row, $copy ) { + global $options; + if ( !isset( $options['noimage'] ) ) { + // Fill in the new image info fields + $info = $this->imageInfo( $row->oi_archive_name, 'wfImageArchiveDir', $row->oi_name ); + $copy['oi_width' ] = $info['width' ]; + $copy['oi_height'] = $info['height']; + $copy['oi_bits' ] = $info['bits' ]; + } + + // If doing UTF8 conversion the file must be renamed + $this->renameFile( $row->oi_archive_name, 'wfImageArchiveDir', $row->oi_name ); + + return $copy; + } + + + function upgradeWatchlist() { + $chunksize = 100; + + list ( $watchlist, $watchlist_temp ) = $this->dbw->tableNamesN( 'watchlist', 'watchlist_temp' ); + + $this->log( 'Migrating watchlist table to watchlist_temp...' ); + $this->dbw->query( +"CREATE TABLE $watchlist_temp ( + -- Key to user_id + wl_user int(5) unsigned NOT NULL, + + -- Key to page_namespace/page_title + -- Note that users may watch patches which do not exist yet, + -- or existed in the past but have been deleted. + wl_namespace int NOT NULL default '0', + wl_title varchar(255) binary NOT NULL default '', + + -- Timestamp when user was last sent a notification e-mail; + -- cleared when the user visits the page. + -- FIXME: add proper null support etc + wl_notificationtimestamp varchar(14) binary NOT NULL default '0', + + UNIQUE KEY (wl_user, wl_namespace, wl_title), + KEY namespace_title (wl_namespace,wl_title) + +) TYPE=InnoDB;", __METHOD__ ); + + // Fix encoding for Latin-1 upgrades, add some fields, + // and double article to article+talk pairs + $numwatched = $this->dbw->selectField( 'watchlist', 'count(*)', '', __METHOD__ ); + + $this->setChunkScale( $chunksize, $numwatched * 2, 'watchlist_temp', __METHOD__ ); + $result = $this->dbr->select( 'watchlist', + array( + 'wl_user', + 'wl_namespace', + 'wl_title' ), + '', + __METHOD__ ); + + $add = array(); + foreach ( $result as $row ) { + $add[] = array( + 'wl_user' => $row->wl_user, + 'wl_namespace' => MWNamespace::getSubject( $row->wl_namespace ), + 'wl_title' => $this->conv( $row->wl_title ), + 'wl_notificationtimestamp' => '0' ); + $this->addChunk( $add ); + + $add[] = array( + 'wl_user' => $row->wl_user, + 'wl_namespace' => MWNamespace::getTalk( $row->wl_namespace ), + 'wl_title' => $this->conv( $row->wl_title ), + 'wl_notificationtimestamp' => '0' ); + $this->addChunk( $add ); + } + $this->lastChunk( $add ); + + $this->log( 'Done converting watchlist.' ); + $this->cleanupSwaps[] = 'watchlist'; + } + + function upgradeLogging() { + $tabledef = << MW_UPGRADE_COPY, + 'log_action' => MW_UPGRADE_COPY, + 'log_timestamp' => MW_UPGRADE_COPY, + 'log_user' => MW_UPGRADE_COPY, + 'log_namespace' => MW_UPGRADE_COPY, + 'log_title' => MW_UPGRADE_ENCODE, + 'log_comment' => MW_UPGRADE_ENCODE, + 'log_params' => MW_UPGRADE_ENCODE ); + $this->copyTable( 'logging', $tabledef, $fields ); + } + + function upgradeArchive() { + $tabledef = << MW_UPGRADE_COPY, + 'ar_title' => MW_UPGRADE_ENCODE, + 'ar_text' => MW_UPGRADE_COPY, + 'ar_comment' => MW_UPGRADE_ENCODE, + 'ar_user' => MW_UPGRADE_COPY, + 'ar_user_text' => MW_UPGRADE_ENCODE, + 'ar_timestamp' => MW_UPGRADE_COPY, + 'ar_minor_edit' => MW_UPGRADE_COPY, + 'ar_flags' => MW_UPGRADE_COPY, + 'ar_rev_id' => MW_UPGRADE_NULL, + 'ar_text_id' => MW_UPGRADE_NULL ); + $this->copyTable( 'archive', $tabledef, $fields ); + } + + function upgradeImagelinks() { + global $wgUseLatin1; + if ( $wgUseLatin1 ) { + $tabledef = << MW_UPGRADE_COPY, + 'il_to' => MW_UPGRADE_ENCODE ); + $this->copyTable( 'imagelinks', $tabledef, $fields ); + } + } + + function upgradeCategorylinks() { + global $wgUseLatin1; + if ( $wgUseLatin1 ) { + $tabledef = << MW_UPGRADE_COPY, + 'cl_to' => MW_UPGRADE_ENCODE, + 'cl_sortkey' => MW_UPGRADE_ENCODE, + 'cl_timestamp' => MW_UPGRADE_COPY ); + $this->copyTable( 'categorylinks', $tabledef, $fields ); + } + } + + function upgradeIpblocks() { + global $wgUseLatin1; + if ( $wgUseLatin1 ) { + $tabledef = << MW_UPGRADE_COPY, + 'ipb_address' => MW_UPGRADE_COPY, + 'ipb_user' => MW_UPGRADE_COPY, + 'ipb_by' => MW_UPGRADE_COPY, + 'ipb_reason' => MW_UPGRADE_ENCODE, + 'ipb_timestamp' => MW_UPGRADE_COPY, + 'ipb_auto' => MW_UPGRADE_COPY, + 'ipb_expiry' => MW_UPGRADE_COPY ); + $this->copyTable( 'ipblocks', $tabledef, $fields ); + } + } + + function upgradeRecentchanges() { + // There's a format change in the namespace field + $tabledef = << MW_UPGRADE_COPY, + 'rc_timestamp' => MW_UPGRADE_COPY, + 'rc_cur_time' => MW_UPGRADE_COPY, + 'rc_user' => MW_UPGRADE_COPY, + 'rc_user_text' => MW_UPGRADE_ENCODE, + 'rc_namespace' => MW_UPGRADE_COPY, + 'rc_title' => MW_UPGRADE_ENCODE, + 'rc_comment' => MW_UPGRADE_ENCODE, + 'rc_minor' => MW_UPGRADE_COPY, + 'rc_bot' => MW_UPGRADE_COPY, + 'rc_new' => MW_UPGRADE_COPY, + 'rc_cur_id' => MW_UPGRADE_COPY, + 'rc_this_oldid' => MW_UPGRADE_COPY, + 'rc_last_oldid' => MW_UPGRADE_COPY, + 'rc_type' => MW_UPGRADE_COPY, + 'rc_moved_to_ns' => MW_UPGRADE_COPY, + 'rc_moved_to_title' => MW_UPGRADE_ENCODE, + 'rc_patrolled' => MW_UPGRADE_COPY, + 'rc_ip' => MW_UPGRADE_COPY ); + $this->copyTable( 'recentchanges', $tabledef, $fields ); + } + + function upgradeQuerycache() { + // There's a format change in the namespace field + $tabledef = << MW_UPGRADE_COPY, + 'qc_value' => MW_UPGRADE_COPY, + 'qc_namespace' => MW_UPGRADE_COPY, + 'qc_title' => MW_UPGRADE_ENCODE ); + $this->copyTable( 'querycache', $tabledef, $fields ); + } + + /** + * Check for duplicate rows in "cur" table and move duplicates entries in + * "old" table. + * + * This was in cleanupDupes.inc before. + */ + function checkDupes() { + $dbw = wfGetDB( DB_MASTER ); + if ( $dbw->indexExists( 'cur', 'name_title' ) && + $dbw->indexUnique( 'cur', 'name_title' ) ) { + echo wfWikiID() . ": cur table has the current unique index; no duplicate entries.\n"; + return; + } elseif ( $dbw->indexExists( 'cur', 'name_title_dup_prevention' ) ) { + echo wfWikiID() . ": cur table has a temporary name_title_dup_prevention unique index; no duplicate entries.\n"; + return; + } + + echo wfWikiID() . ": cur table has the old non-unique index and may have duplicate entries.\n"; + + $dbw = wfGetDB( DB_MASTER ); + $cur = $dbw->tableName( 'cur' ); + $old = $dbw->tableName( 'old' ); + $dbw->query( "LOCK TABLES $cur WRITE, $old WRITE" ); + echo "Checking for duplicate cur table entries... (this may take a while on a large wiki)\n"; + $res = $dbw->query( << 1 +END + ); + $n = $dbw->numRows( $res ); + echo "Found $n titles with duplicate entries.\n"; + if ( $n > 0 ) { + echo "Correcting...\n"; + foreach ( $res as $row ) { + $ns = intval( $row->cur_namespace ); + $title = $dbw->addQuotes( $row->cur_title ); + + # Get the first responding ID; that'll be the one we keep. + $id = $dbw->selectField( 'cur', 'cur_id', array( + 'cur_namespace' => $row->cur_namespace, + 'cur_title' => $row->cur_title ) ); + + echo "$ns:$row->cur_title (canonical ID $id)\n"; + if ( $id != $row->id ) { + echo " ** minimum ID $row->id; "; + $timeMin = $dbw->selectField( 'cur', 'cur_timestamp', array( + 'cur_id' => $row->id ) ); + $timeFirst = $dbw->selectField( 'cur', 'cur_timestamp', array( + 'cur_id' => $id ) ); + if ( $timeMin == $timeFirst ) { + echo "timestamps match at $timeFirst; ok\n"; + } else { + echo "timestamps don't match! min: $timeMin, first: $timeFirst; "; + if ( $timeMin > $timeFirst ) { + $id = $row->id; + echo "keeping minimum: $id\n"; + } else { + echo "keeping first: $id\n"; + } + } + } + + $dbw->query( <<query( <<query( 'UNLOCK TABLES' ); + echo "Done.\n"; + } + + /** + * Rename all our temporary tables into final place. + * We've left things in place so a read-only wiki can continue running + * on the old code during all this. + */ + function upgradeCleanup() { + $this->renameTable( 'old', 'text' ); + + foreach ( $this->cleanupSwaps as $table ) { + $this->swap( $table ); + } + } + + function renameTable( $from, $to ) { + $this->log( "Renaming $from to $to..." ); + + $fromtable = $this->dbw->tableName( $from ); + $totable = $this->dbw->tableName( $to ); + $this->dbw->query( "ALTER TABLE $fromtable RENAME TO $totable" ); + } + + function swap( $base ) { + $this->renameTable( $base, "{$base}_old" ); + $this->renameTable( "{$base}_temp", $base ); + } + +} +$maintClass = 'FiveUpgrade'; +require( RUN_MAINTENANCE_IF_MAIN ); diff --git a/maintenance/userDupes.inc b/maintenance/userDupes.inc index 2f224c3d..7c2bca1c 100644 --- a/maintenance/userDupes.inc +++ b/maintenance/userDupes.inc @@ -31,9 +31,19 @@ class UserDupes { var $reassigned; var $trimmed; var $failed; + private $outputCallback; - function UserDupes( &$database ) { - $this->db =& $database; + function __construct( &$database, $outputCallback ) { + $this->db = $database; + $this->outputCallback = $outputCallback; + } + + /** + * Output some text via the output callback provided + * @param $str String Text to print + */ + private function out( $str ) { + call_user_func( $this->outputCallback, $str ); } /** @@ -42,10 +52,9 @@ class UserDupes { * @return bool */ function hasUniqueIndex() { - $fname = 'UserDupes::hasUniqueIndex'; - $info = $this->db->indexInfo( 'user', 'user_name', $fname ); - if( !$info ) { - wfOut( "WARNING: doesn't seem to have user_name index at all!\n" ); + $info = $this->db->indexInfo( 'user', 'user_name', __METHOD__ ); + if ( !$info ) { + $this->out( "WARNING: doesn't seem to have user_name index at all!\n" ); return false; } @@ -85,55 +94,55 @@ class UserDupes { * @return bool */ function checkDupes( $doDelete = false ) { - if( $this->hasUniqueIndex() ) { - echo wfWikiID()." already has a unique index on its user table.\n"; + if ( $this->hasUniqueIndex() ) { + echo wfWikiID() . " already has a unique index on its user table.\n"; return true; } $this->lock(); - wfOut( "Checking for duplicate accounts...\n" ); + $this->out( "Checking for duplicate accounts...\n" ); $dupes = $this->getDupes(); $count = count( $dupes ); - wfOut( "Found $count accounts with duplicate records on ".wfWikiID().".\n" ); + $this->out( "Found $count accounts with duplicate records on " . wfWikiID() . ".\n" ); $this->trimmed = 0; $this->reassigned = 0; $this->failed = 0; - foreach( $dupes as $name ) { + foreach ( $dupes as $name ) { $this->examine( $name, $doDelete ); } $this->unlock(); - wfOut( "\n" ); + $this->out( "\n" ); - if( $this->reassigned > 0 ) { - if( $doDelete ) { - wfOut( "$this->reassigned duplicate accounts had edits reassigned to a canonical record id.\n" ); + if ( $this->reassigned > 0 ) { + if ( $doDelete ) { + $this->out( "$this->reassigned duplicate accounts had edits reassigned to a canonical record id.\n" ); } else { - wfOut( "$this->reassigned duplicate accounts need to have edits reassigned.\n" ); + $this->out( "$this->reassigned duplicate accounts need to have edits reassigned.\n" ); } } - if( $this->trimmed > 0 ) { - if( $doDelete ) { - wfOut( "$this->trimmed duplicate user records were deleted from ".wfWikiID().".\n" ); + if ( $this->trimmed > 0 ) { + if ( $doDelete ) { + $this->out( "$this->trimmed duplicate user records were deleted from " . wfWikiID() . ".\n" ); } else { - wfOut( "$this->trimmed duplicate user accounts were found on ".wfWikiID()." which can be removed safely.\n" ); + $this->out( "$this->trimmed duplicate user accounts were found on " . wfWikiID() . " which can be removed safely.\n" ); } } - if( $this->failed > 0 ) { - wfOut( "Something terribly awry; $this->failed duplicate accounts were not removed.\n" ); + if ( $this->failed > 0 ) { + $this->out( "Something terribly awry; $this->failed duplicate accounts were not removed.\n" ); return false; } - if( $this->trimmed == 0 || $doDelete ) { - wfOut( "It is now safe to apply the unique index on user_name.\n" ); + if ( $this->trimmed == 0 || $doDelete ) { + $this->out( "It is now safe to apply the unique index on user_name.\n" ); return true; } else { - wfOut( "Run this script again with the --fix option to automatically delete them.\n" ); + $this->out( "Run this script again with the --fix option to automatically delete them.\n" ); return false; } } @@ -143,8 +152,7 @@ class UserDupes { * @access private */ function lock() { - $fname = 'UserDupes::lock'; - if( $this->newSchema() ) { + if ( $this->newSchema() ) { $set = array( 'user', 'revision' ); } else { $set = array( 'user', 'cur', 'old' ); @@ -152,7 +160,7 @@ class UserDupes { $names = array_map( array( $this, 'lockTable' ), $set ); $tables = implode( ',', $names ); - $this->db->query( "LOCK TABLES $tables", $fname ); + $this->db->query( "LOCK TABLES $tables", __METHOD__ ); } function lockTable( $table ) { @@ -171,8 +179,7 @@ class UserDupes { * @access private */ function unlock() { - $fname = 'UserDupes::unlock'; - $this->db->query( "UNLOCK TABLES", $fname ); + $this->db->query( "UNLOCK TABLES", __METHOD__ ); } /** @@ -181,20 +188,17 @@ class UserDupes { * @access private */ function getDupes() { - $fname = 'UserDupes::listDupes'; $user = $this->db->tableName( 'user' ); $result = $this->db->query( "SELECT user_name,COUNT(*) AS n - FROM $user + FROM $user GROUP BY user_name - HAVING n > 1", $fname ); + HAVING n > 1", __METHOD__ ); $list = array(); - while( $row = $this->db->fetchObject( $result ) ) { + foreach ( $result as $row ) { $list[] = $row->user_name; } - $this->db->freeResult( $result ); - return $list; } @@ -207,46 +211,44 @@ class UserDupes { * @access private */ function examine( $name, $doDelete ) { - $fname = 'UserDupes::listDupes'; $result = $this->db->select( 'user', array( 'user_id' ), array( 'user_name' => $name ), - $fname ); + __METHOD__ ); $firstRow = $this->db->fetchObject( $result ); $firstId = $firstRow->user_id; - wfOut( "Record that will be used for '$name' is user_id=$firstId\n" ); + $this->out( "Record that will be used for '$name' is user_id=$firstId\n" ); - while( $row = $this->db->fetchObject( $result ) ) { + foreach ( $result as $row ) { $dupeId = $row->user_id; - wfOut( "... dupe id $dupeId: " ); + $this->out( "... dupe id $dupeId: " ); $edits = $this->editCount( $dupeId ); - if( $edits > 0 ) { + if ( $edits > 0 ) { $this->reassigned++; - wfOut( "has $edits edits! " ); - if( $doDelete ) { + $this->out( "has $edits edits! " ); + if ( $doDelete ) { $this->reassignEdits( $dupeId, $firstId ); $newEdits = $this->editCount( $dupeId ); - if( $newEdits == 0 ) { - wfOut( "confirmed cleaned. " ); + if ( $newEdits == 0 ) { + $this->out( "confirmed cleaned. " ); } else { $this->failed++; - wfOut( "WARNING! $newEdits remaining edits for $dupeId; NOT deleting user.\n" ); + $this->out( "WARNING! $newEdits remaining edits for $dupeId; NOT deleting user.\n" ); continue; } } else { - wfOut( "(will need to reassign edits on fix)" ); + $this->out( "(will need to reassign edits on fix)" ); } } else { - wfOut( "ok, no edits. " ); + $this->out( "ok, no edits. " ); } $this->trimmed++; - if( $doDelete ) { + if ( $doDelete ) { $this->trimAccount( $dupeId ); } - wfOut( "\n" ); + $this->out( "\n" ); } - $this->db->freeResult( $result ); } /** @@ -258,7 +260,7 @@ class UserDupes { * @access private */ function editCount( $userid ) { - if( $this->newSchema() ) { + if ( $this->newSchema() ) { return $this->editCountOn( 'revision', 'rev_user', $userid ); } else { return $this->editCountOn( 'cur', 'cur_user', $userid ) + @@ -275,12 +277,11 @@ class UserDupes { * @access private */ function editCountOn( $table, $field, $userid ) { - $fname = 'UserDupes::editCountOn'; return intval( $this->db->selectField( $table, 'COUNT(*)', array( $field => $userid ), - $fname ) ); + __METHOD__ ) ); } /** @@ -292,7 +293,7 @@ class UserDupes { $set = $this->newSchema() ? array( 'revision' => 'rev_user' ) : array( 'cur' => 'cur_user', 'old' => 'old_user' ); - foreach( $set as $table => $field ) { + foreach ( $set as $table => $field ) { $this->reassignEditsOn( $table, $field, $from, $to ); } } @@ -305,13 +306,12 @@ class UserDupes { * @access private */ function reassignEditsOn( $table, $field, $from, $to ) { - $fname = 'UserDupes::reassignEditsOn'; - wfOut( "reassigning on $table... " ); + $this->out( "reassigning on $table... " ); $this->db->update( $table, array( $field => $to ), array( $field => $from ), - $fname ); - wfOut( "ok. " ); + __METHOD__ ); + $this->out( "ok. " ); } /** @@ -320,10 +320,9 @@ class UserDupes { * @access private */ function trimAccount( $userid ) { - $fname = 'UserDupes::trimAccount'; - wfOut( "deleting..." ); - $this->db->delete( 'user', array( 'user_id' => $userid ), $fname ); - wfOut( " ok" ); + $this->out( "deleting..." ); + $this->db->delete( 'user', array( 'user_id' => $userid ), __METHOD__ ); + $this->out( " ok" ); } } diff --git a/maintenance/userOptions.inc b/maintenance/userOptions.inc index d660019d..deb12bc8 100644 --- a/maintenance/userOptions.inc +++ b/maintenance/userOptions.inc @@ -8,7 +8,7 @@ $options = array( 'list', 'nowarn', 'quiet', 'usage', 'dry' ); $optionsWithArgs = array( 'old', 'new' ); -require_once( dirname(__FILE__) . '/commandLine.inc' ); +require_once( dirname( __FILE__ ) . '/commandLine.inc' ); /** * @ingroup Maintenance @@ -25,7 +25,7 @@ class userOptions { /** Constructor. Will show usage and exit if script options are not correct */ function __construct( $opts, $args ) { - if( !$this->checkOpts( $opts, $args ) ) { + if ( !$this->checkOpts( $opts, $args ) ) { userOptions::showUsageAndExit(); } else { $this->mReady = $this->initializeOpts( $opts, $args ); @@ -37,11 +37,11 @@ class userOptions { private function checkOpts( $opts, $args ) { // The three possible ways to run the script: $list = isset( $opts['list'] ); - $usage = isset( $opts['usage'] ) && (count($args) <= 1); - $change = isset( $opts['old']) && isset($opts['new']) && (count($args) <= 1) ; + $usage = isset( $opts['usage'] ) && ( count( $args ) <= 1 ); + $change = isset( $opts['old'] ) && isset( $opts['new'] ) && ( count( $args ) <= 1 ) ; // We want only one of them - $isValid = (($list + $usage + $change) == 1); + $isValid = ( ( $list + $usage + $change ) == 1 ); return $isValid; } @@ -54,18 +54,18 @@ class userOptions { $this->mDry = isset( $opts['dry'] ); // Set object properties, specially 'mMode' used by run() - if( isset($opts['list']) ) { + if ( isset( $opts['list'] ) ) { $this->mMode = 'LISTER' ; - } elseif( isset($opts['usage']) ) { + } elseif ( isset( $opts['usage'] ) ) { $this->mMode = 'USAGER' ; - $this->mAnOption = isset($args[0]) ? $args[0] : false ; - } elseif( isset($opts['old']) && isset($opts['new']) ) { + $this->mAnOption = isset( $args[0] ) ? $args[0] : false ; + } elseif ( isset( $opts['old'] ) && isset( $opts['new'] ) ) { $this->mMode = 'CHANGER' ; $this->mOldValue = $opts['old'] ; $this->mNewValue = $opts['new'] ; $this->mAnOption = $args[0]; } else { - die("There is a bug in the software, this should never happen\n"); + die( "There is a bug in the software, this should never happen\n" ); } return true; @@ -73,27 +73,27 @@ class userOptions { // Dumb stuff to run a mode. public function run() { - if(!$this->mReady ) { + if ( !$this->mReady ) { return false; } - $this->{$this->mMode}( ); + $this-> { $this->mMode } ( ); } # # Modes. - # + # /** List default options and their value */ private function LISTER( ) { $def = User::getDefaultOptions(); - ksort($def); + ksort( $def ); $maxOpt = 0; - foreach( $def as $opt => $value ) { - $maxOpt = max( $maxOpt, strlen($opt) ); + foreach ( $def as $opt => $value ) { + $maxOpt = max( $maxOpt, strlen( $opt ) ); } - foreach( $def as $opt => $value ) { + foreach ( $def as $opt => $value ) { printf( "%-{$maxOpt}s: %s\n", $opt, $value ); } } @@ -111,37 +111,37 @@ class userOptions { __METHOD__ ); - while( $id = $dbr->fetchObject( $result ) ) { + foreach ( $result as $id ) { $user = User::newFromId( $id->user_id ); // Get the options and update stats - if( $this->mAnOption ) { + if ( $this->mAnOption ) { - if(!array_key_exists( $this->mAnOption, $defaultOptions ) ) { + if ( !array_key_exists( $this->mAnOption, $defaultOptions ) ) { print "Invalid user option. Use --list to see valid choices\n"; exit; } $userValue = $user->getOption( $this->mAnOption ); - if( $userValue <> $defaultOptions[$this->mAnOption] ) { + if ( $userValue <> $defaultOptions[$this->mAnOption] ) { @$ret[$this->mAnOption][$userValue]++; } } else { - foreach( $defaultOptions as $name => $defaultValue ) { + foreach ( $defaultOptions as $name => $defaultValue ) { $userValue = $user->getOption( $name ); - if( $userValue <> $defaultValue ) { + if ( $userValue <> $defaultValue ) { @$ret[$name][$userValue]++; } } } } - foreach( $ret as $optionName => $usageStats ) { + foreach ( $ret as $optionName => $usageStats ) { print "Usage for <$optionName> (default: '{$defaultOptions[$optionName]}'):\n"; - foreach( $usageStats as $value => $count ) { + foreach ( $usageStats as $value => $count ) { print " $count user(s): '$value'\n"; } print "\n"; @@ -161,29 +161,29 @@ class userOptions { __METHOD__ ); - while( $id = $dbr->fetchObject( $result ) ) { + foreach ( $result as $id ) { $user = User::newFromId( $id->user_id ); $curValue = $user->getOption( $this->mAnOption ); $username = $user->getName(); - if( $curValue == $this->mOldValue ) { + if ( $curValue == $this->mOldValue ) { - if(!$this->mQuiet) { + if ( !$this->mQuiet ) { print "Setting {$this->mAnOption} for $username from '{$this->mOldValue}' to '{$this->mNewValue}'): "; } - // Change value + // Change value $user->setOption( $this->mAnOption, $this->mNewValue ); // Will not save the settings if run with --dry - if(!$this->mDry) { + if ( !$this->mDry ) { $user->saveSettings(); } - if( !$this->mQuiet) { print " OK\n"; } + if ( !$this->mQuiet ) { print " OK\n"; } - } elseif( !$this->mQuiet ) { + } elseif ( !$this->mQuiet ) { print "Not changing '$username' using <{$this->mAnOption}> = '$curValue'\n"; } } @@ -194,7 +194,7 @@ class userOptions { public static function getDefaultOptionsNames() { $def = User::getDefaultOptions(); $ret = array(); - foreach( $def as $optname => $defaultValue) { + foreach ( $def as $optname => $defaultValue ) { array_push( $ret, $optname ); } return $ret; @@ -212,31 +212,31 @@ This script pass through all users and change one of their options. The new option is NOT validated. Usage: - php userOptions.php --list - php userOptions.php [user option] --usage - php userOptions.php [options]  --old --new + php userOptions.php --list + php userOptions.php [user option] --usage + php userOptions.php [options]  --old --new Switchs: - --list : list available user options and their default value + --list : list available user options and their default value - --usage : report all options statistics or just one if you specify it. + --usage : report all options statistics or just one if you specify it. - --old : the value to look for - --new : new value to update users with + --old : the value to look for + --new : new value to update users with Options: - --nowarn: hides the 5 seconds warning - --quiet : do not print what is happening - --dry : do not save user settings back to database + --nowarn: hides the 5 seconds warning + --quiet : do not print what is happening + --dry : do not save user settings back to database USAGE; - exit(0); + exit( 0 ); } /** The warning message and countdown */ public function warn() { - if( $this->mQuick ) { + if ( $this->mQuick ) { return true; } diff --git a/maintenance/userOptions.php b/maintenance/userOptions.php index d4098ab2..597c6d45 100644 --- a/maintenance/userOptions.php +++ b/maintenance/userOptions.php @@ -8,7 +8,7 @@ * * @file * @ingroup Maintenance - * @author Ashar Voultoiz + * @author Ashar Voultoiz */ // This is a command line script, load tools and parse args diff --git a/maintenance/waitForSlave.php b/maintenance/waitForSlave.php index f2a532c9..0bf01d6d 100644 --- a/maintenance/waitForSlave.php +++ b/maintenance/waitForSlave.php @@ -15,11 +15,12 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @ingroup Maintenance * @see wfWaitForSlaves() */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class WaitForSlave extends Maintenance { public function __construct() { @@ -31,4 +32,4 @@ class WaitForSlave extends Maintenance { } $maintClass = "WaitForSlave"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); diff --git a/math/Makefile b/math/Makefile index 47c40f96..804f0857 100644 --- a/math/Makefile +++ b/math/Makefile @@ -1,3 +1,5 @@ +.PHONY: clean all + OBJ=render_info.cmo tex.cmo texutil.cmo parser.cmo lexer.cmo texvc.cmo \ render_info.cmx tex.cmx texutil.cmx parser.cmx lexer.cmx texvc.cmx \ lexer.cmi parser.cmi render_info.cmi tex.cmi texutil.cmi texvc.cmi \ @@ -10,15 +12,41 @@ texvc_tex.o texvc_tex.cmi texvc_tex html.cmi html.cmo html.cmx \ html.o mathml.cmi mathml.cmo mathml.cmx mathml.o CGIPATH=-I /usr/lib/ocaml/cgi -I /usr/lib/ocaml/netstring -I /usr/lib/ocaml/pcre +COMMON_NATIVE_OBJ =util.cmx parser.cmx html.cmx mathml.cmx texutil.cmx lexer.cmx +COMMON_BYTECODE_OBJ=util.cmo parser.cmo html.cmo mathml.cmo texutil.cmo lexer.cmo + all: texvc texvc_test texvc_tex -texvc.bc: util.cmo parser.cmo html.cmo mathml.cmo texutil.cmo render.cmo lexer.cmo texvc.cmo - ocamlc -o $@ unix.cma $^ -texvc: util.cmx parser.cmx html.cmx mathml.cmx texutil.cmx render.cmx lexer.cmx texvc.cmx +cgi: texvc_cgi.cmo texvc_cgi +clean: + rm -f $(OBJ) + +# Native versions +texvc: $(COMMON_NATIVE_OBJ) render.cmx texvc.cmx ocamlopt -o $@ unix.cmxa $^ -texvc_test: util.cmx parser.cmx html.cmx mathml.cmx texutil.cmx lexer.cmx texvc_test.cmx +texvc_test: $(COMMON_NATIVE_OBJ) lexer.cmx texvc_test.cmx ocamlopt -o $@ $^ -texvc_tex: util.cmx parser.cmx html.cmx mathml.cmx texutil.cmx lexer.cmx texvc_tex.cmx +texvc_tex: $(COMMON_NATIVE_OBJ) texvc_tex.cmx ocamlopt -o $@ $^ + +# Bytecode version +texvc.bc: $(COMMON_BYTECODE_OBJ) render.cmo texvc.cmo + ocamlc -o $@ unix.cma $^ + +# CGI related targets: +texvc_cgi.cmo: texvc_cgi.ml + ocamlc -c $(CGIPATH) $< +texvc_cgi: util.cmo parser.cmo texutil.cmo render.cmo lexer.cmo texvc_cgi.cmo + ocamlc -o $@ unix.cma $(CGIPATH) pcre.cma netstring.cma cgi.cma $^ + chmod g-w $@ + +# +# Pattern rules +# + +# .ml source .mli interface +# .cmi compiled interface +# .cmo object .cma library object +# .cmx object file .cmxa library object file %.ml: %.mll ocamllex $< %.mli %.ml: %.mly @@ -29,13 +57,8 @@ texvc_tex: util.cmx parser.cmx html.cmx mathml.cmx texutil.cmx lexer.cmx texvc_t ocamlopt -c $< %.cmi: %.mli ocamlc -c $< -texvc_cgi.cmo: texvc_cgi.ml - ocamlc -c $(CGIPATH) $< -texvc_cgi: util.cmo parser.cmo texutil.cmo render.cmo lexer.cmo texvc_cgi.cmo - ocamlc -o $@ unix.cma $(CGIPATH) pcre.cma netstring.cma cgi.cma $^ - chmod g-w $@ -clean: - rm -f $(OBJ) + +# Various dependencies html.cmo: render_info.cmi tex.cmi util.cmo html.cmi html.cmx: render_info.cmi tex.cmi util.cmx html.cmi diff --git a/math/README b/math/README index d0e21648..5b99d4c2 100644 --- a/math/README +++ b/math/README @@ -84,7 +84,7 @@ texvc output format is like this: == Troubleshooting == -Unforunately, many error conditions with rasterization are not well reported. +Unfortunately, many error conditions with rasterization are not well reported. texvc will return as though everything is successful, and the only obvious sign of problems for the user is a big X on a wiki page where an equation should be. diff --git a/math/lexer.mll b/math/lexer.mll index 4dd31e0e..1702084c 100644 --- a/math/lexer.mll +++ b/math/lexer.mll @@ -69,6 +69,7 @@ rule token = parse | "\\#" { LITERAL (HTMLABLE (FONT_UFH,"\\#","#")) } | "\\%" { LITERAL (HTMLABLE (FONT_UFH,"\\%","%")) } | "\\$" { LITERAL (HTMLABLE (FONT_UFH,"\\$","$")) } + | "\\&" { LITERAL (HTMLABLEC (FONT_RM,"\\&","&")) } | "&" { NEXT_CELL } | "\\\\" { NEXT_ROW } | "\\begin{matrix}" { Texutil.tex_use_ams(); BEGIN__MATRIX } diff --git a/math/render.ml b/math/render.ml index f1673555..5a02b671 100644 --- a/math/render.ml +++ b/math/render.ml @@ -1,7 +1,11 @@ +(* vim: set sw=8 ts=8 et: *) + let cmd_dvips tmpprefix = "dvips -q -R -E " ^ tmpprefix ^ ".dvi -f >" ^ tmpprefix ^ ".ps" let cmd_latex tmpprefix = "latex " ^ tmpprefix ^ ".tex >/dev/null" + (* Putting -transparent white in converts arguments will sort-of give you transperancy *) let cmd_convert tmpprefix finalpath = "convert -quality 100 -density 120 " ^ tmpprefix ^ ".ps " ^ finalpath ^ " >/dev/null 2>/dev/null" + (* Putting -bg Transparent in dvipng's arguments will give full-alpha transparency *) (* Note that IE have problems with such PNGs and need an additional javascript snippet *) (* Putting -bg transparent in dvipng's arguments will give binary transparency *) @@ -15,26 +19,40 @@ let render tmppath finalpath outtex md5 backcolor = let unlink_all () = begin (* Commenting this block out will aid in debugging *) - Sys.remove (tmpprefix ^ ".dvi"); - Sys.remove (tmpprefix ^ ".aux"); - Sys.remove (tmpprefix ^ ".log"); + Sys.remove (tmpprefix ^ ".dvi"); + Sys.remove (tmpprefix ^ ".aux"); + Sys.remove (tmpprefix ^ ".log"); Sys.remove (tmpprefix ^ ".tex"); - if Sys.file_exists (tmpprefix ^ ".ps") - then Sys.remove (tmpprefix ^ ".ps"); + if Sys.file_exists (tmpprefix ^ ".ps") + then Sys.remove (tmpprefix ^ ".ps"); end in + let f = (Util.open_out_unless_exists (tmpprefix ^ ".tex")) in begin - output_string f (Texutil.get_preface ()); - output_string f outtex; - output_string f (Texutil.get_footer ()); - close_out f; - if Util.run_in_other_directory tmppath (cmd_latex tmpprefix0) != 0 - then (unlink_all (); raise (ExternalCommandFailure "latex")) - else if (Sys.command (cmd_dvipng tmpprefix (finalpath^"/"^md5^".png") backcolor) != 0) - then (if (Sys.command (cmd_dvips tmpprefix) != 0) - then (unlink_all (); raise (ExternalCommandFailure "dvips")) - else if (Sys.command (cmd_convert tmpprefix (finalpath^"/"^md5^".png")) != 0) - then (unlink_all (); raise (ExternalCommandFailure "convert")) - else unlink_all ()) - else unlink_all () + (* Assemble final output in file 'f' *) + output_string f (Texutil.get_preface ()); + output_string f outtex; + output_string f (Texutil.get_footer ()); + close_out f; + + (* TODO: document *) + if Util.run_in_other_directory tmppath (cmd_latex tmpprefix0) != 0 + then ( + unlink_all (); raise (ExternalCommandFailure "latex") + ) else if (Sys.command (cmd_dvipng tmpprefix (finalpath^"/"^md5^".png") backcolor) != 0) + then ( + if (Sys.command (cmd_dvips tmpprefix) != 0) + then ( + unlink_all (); + raise (ExternalCommandFailure "dvips") + ) else if (Sys.command (cmd_convert tmpprefix (finalpath^"/"^md5^".png")) != 0) + then ( + unlink_all (); + raise (ExternalCommandFailure "convert") + ) else ( + unlink_all () + ) + ) else ( + unlink_all () + ) end diff --git a/math/texutil.ml b/math/texutil.ml index ad4fce10..cc7f48fa 100644 --- a/math/texutil.ml +++ b/math/texutil.ml @@ -1,3 +1,4 @@ +(* vim: set sw=8 ts=8 et: *) open Parser open Render_info open Tex @@ -10,6 +11,7 @@ let tex_part = function | MHTMLABLEC (_,t,_,_,_) -> t | HTMLABLE_BIG (t,_) -> t | TEX_ONLY t -> t + let rec render_tex = function TEX_FQ (a,b,c) -> (render_tex a) ^ "_{" ^ (render_tex b) ^ "}^{" ^ (render_tex c) ^ "}" | TEX_DQ (a,b) -> (render_tex a) ^ "_{" ^ (render_tex b) ^ "}" @@ -38,28 +40,40 @@ let rec render_tex = function (* Dynamic loading*) type encoding_t = LATIN1 | LATIN2 | UTF8 +(* module properties *) let modules_ams = ref false let modules_nonascii = ref false let modules_encoding = ref UTF8 let modules_color = ref false +(* wrappers to easily set / reset module properties *) let tex_use_ams () = modules_ams := true let tex_use_nonascii () = modules_nonascii := true let tex_use_color () = modules_color := true -let tex_mod_reset () = (modules_ams := false; modules_nonascii := false; modules_encoding := UTF8; modules_color := false) +let tex_mod_reset () = ( + modules_ams := false; + modules_nonascii := false; + modules_encoding := UTF8; + modules_color := false + ) +(* Return TeX fragment for one of the encodings in (UTF8,LATIN1,LATIN2) *) let get_encoding = function UTF8 -> "\\usepackage{ucs}\n\\usepackage[utf8]{inputenc}\n" | LATIN1 -> "\\usepackage[latin1]{inputenc}\n" | LATIN2 -> "\\usepackage[latin2]{inputenc}\n" +(* TeX fragment inserted before the output *) let get_preface () = "\\nonstopmode\n\\documentclass[12pt]{article}\n" ^ (if !modules_nonascii then get_encoding !modules_encoding else "") ^ (if !modules_ams then "\\usepackage{amsmath}\n\\usepackage{amsfonts}\n\\usepackage{amssymb}\n" else "") ^ (if !modules_color then "\\usepackage[dvips,usenames]{color}\n" else "") ^ "\\usepackage{cancel}\n\\pagestyle{empty}\n\\begin{document}\n$$\n" + +(* TeX fragment appended after the content *) let get_footer () = "\n$$\n\\end{document}\n" +(* Default to UTF8 *) let set_encoding = function "ISO-8859-1" -> modules_encoding := LATIN1 | "iso-8859-1" -> modules_encoding := LATIN1 @@ -80,7 +94,7 @@ let find = function | "\\Gamma" -> LITERAL (HTMLABLEC (FONT_UF, "\\Gamma ", "Γ")) | "\\delta" -> LITERAL (HTMLABLEC (FONT_UF, "\\delta ", "δ")) | "\\Delta" -> LITERAL (HTMLABLEC (FONT_UF, "\\Delta ", "Δ")) - | "\\epsilon" -> LITERAL (HTMLABLEC (FONT_UF, "\\epsilon ", "ε")) + | "\\epsilon" -> LITERAL (TEX_ONLY "\\epsilon ") | "\\Epsilon" -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF, "\\mathrm{E}", "Ε"))) | "\\varepsilon" -> LITERAL (TEX_ONLY "\\varepsilon ") @@ -119,7 +133,7 @@ let find = function | "\\Rho" -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF, "\\mathrm{P}", "Ρ"))) | "\\varrho" -> LITERAL (TEX_ONLY "\\varrho ") - | "\\sim" -> LITERAL (HTMLABLEC (FONT_UF, "\\sim ", "˜")) + | "\\sim" -> LITERAL (HTMLABLEC (FONT_UF, "\\sim ", "∼")) | "\\sigma" -> LITERAL (HTMLABLEC (FONT_UF, "\\sigma ", "σ")) | "\\Sigma" -> LITERAL (HTMLABLEC (FONT_UF, "\\Sigma ", "Σ")) | "\\varsigma" -> LITERAL (TEX_ONLY "\\varsigma ") @@ -128,7 +142,7 @@ let find = function "\\mathrm{T}", "Τ"))) | "\\upsilon" -> LITERAL (HTMLABLEC (FONT_UF, "\\upsilon ", "υ")) | "\\Upsilon" -> LITERAL (HTMLABLEC (FONT_UF, "\\Upsilon ", "Υ")) - | "\\phi" -> LITERAL (HTMLABLEC (FONT_UF, "\\phi ", "φ")) + | "\\phi" -> LITERAL (TEX_ONLY "\\phi ") | "\\Phi" -> LITERAL (HTMLABLEC (FONT_UF, "\\Phi ", "Φ")) | "\\varphi" -> LITERAL (TEX_ONLY "\\varphi ") | "\\chi" -> LITERAL (HTMLABLEC (FONT_UF, "\\chi ", "χ")) @@ -409,6 +423,10 @@ let find = function | "\\mod" -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mod ", "mod"))) | "\\Diamond" -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UF, "\\Diamond ", "◊"))) | "\\dotsb" -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UF, "\\dotsb ", "⋅⋅⋅"))) + | "\\dotsc" -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UF, "\\dotsc ", "..."))) + | "\\dotsi" -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UF, "\\dotsi ", "⋅⋅⋅"))) + | "\\dotsm" -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UF, "\\dotsm ", "⋅⋅⋅"))) + | "\\dotso" -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UF, "\\dotso ", "..."))) | "\\reals" -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{R}", "R"))) | "\\Reals" -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{R}", "R"))) | "\\R" -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{R}", "R"))) @@ -508,12 +526,15 @@ let find = function | "\\over" -> FUN_INFIXh ("\\over ", fun num den -> Html.html_render num, "
    ", Html.html_render den) | "\\sqrt" -> FUN_AR1 "\\sqrt " | "\\cancel" -> FUN_AR1 "\\cancel " + | "\\bcancel" -> FUN_AR1 "\\bcancel " + | "\\xcancel" -> FUN_AR1 "\\xcancel " | "\\cancelto" -> FUN_AR2 "\\cancelto " | "\\pmod" -> FUN_AR1hl ("\\pmod ", ("(mod ", ")")) | "\\bmod" -> FUN_AR1hl ("\\bmod ", ("mod ", "")) | "\\emph" -> FUN_AR1 "\\emph " | "\\texttt" -> FUN_AR1 "\\texttt " | "\\textbf" -> FUN_AR1 "\\textbf " + | "\\textsf" -> FUN_AR1 "\\textsf " | "\\textit" -> FUN_AR1hf ("\\textit ", FONTFORCE_IT) | "\\textrm" -> FUN_AR1hf ("\\textrm ", FONTFORCE_RM) | "\\rm" -> DECLh ("\\rm ", FONTFORCE_RM) @@ -726,6 +747,7 @@ let find = function | "\\mathsf" -> (tex_use_ams (); FUN_AR1 "\\mathsf ") | "\\mathcal" -> (tex_use_ams (); FUN_AR1 "\\mathcal ") | "\\mathbb" -> (tex_use_ams (); FUN_AR1 "\\mathbb ") + | "\\mathtt" -> (tex_use_ams (); FUN_AR1 "\\mathtt ") | "\\mathfrak" -> (tex_use_ams (); FUN_AR1 "\\mathfrak ") | "\\operatorname" -> (tex_use_ams (); FUN_AR1 "\\operatorname ") | "\\text" -> raise (Failure "malformatted \\text") diff --git a/math/texvc.ml b/math/texvc.ml index 38a7e93b..33a14b7b 100644 --- a/math/texvc.ml +++ b/math/texvc.ml @@ -1,8 +1,12 @@ +(* vim: set sw=8 ts=8 et: *) exception LexerException of string + +(* *) let lexer_token_safe lexbuf = try Lexer.token lexbuf with Failure s -> raise (LexerException s) +(* *) let render tmppath finalpath tree backcolor = let outtex = Util.mapjoin Texutil.render_tex tree in let md5 = Digest.to_hex (Digest.string outtex) in @@ -21,9 +25,29 @@ let render tmppath finalpath tree backcolor = ); Render.render tmppath finalpath outtex md5 backcolor end + +(* TODO: document + * Arguments: + * 1st : + * 2nd : + * 3rd : + * 4th : encoding (Default: UTF-8) + * 5th : color (Default: rgb 1.0 1.0 1.0) + * + * Output one character: + * S : Parsing error + * E : Lexer exception raised + * F : TeX function not recognized + * - : Generic/Default failure code. Might be an invalid argument, + * output file already exist, a problem with an external + * command ... + * *) let _ = Texutil.set_encoding (try Sys.argv.(4) with _ -> "UTF-8"); - try render Sys.argv.(1) Sys.argv.(2) (Parser.tex_expr lexer_token_safe (Lexing.from_string Sys.argv.(3))) (try Sys.argv.(5) with _ -> "rgb 1.0 1.0 1.0") + try render Sys.argv.(1) Sys.argv.(2) ( + Parser.tex_expr lexer_token_safe ( + Lexing.from_string Sys.argv.(3)) + ) (try Sys.argv.(5) with _ -> "rgb 1.0 1.0 1.0") with Parsing.Parse_error -> print_string "S" | LexerException _ -> print_string "E" | Texutil.Illegal_tex_function s -> print_string ("F" ^ s) diff --git a/math/util.ml b/math/util.ml index f0458562..ece01605 100644 --- a/math/util.ml +++ b/math/util.ml @@ -1,17 +1,26 @@ +(* vim: set sw=8 ts=8 et: *) + +(* TODO document *) let mapjoin f l = (List.fold_left (fun a b -> a ^ (f b)) "" l) + +(* TODO document *) let mapjoine e f = function [] -> "" | h::t -> (List.fold_left (fun a b -> a ^ e ^ (f b)) (f h) t) +(* Exception used by open_out_unless_exists below *) exception FileAlreadyExists + +(* Wrapper which raise an exception when output path already exist *) let open_out_unless_exists path = if Sys.file_exists path then raise FileAlreadyExists else open_out path +(* *) let run_in_other_directory tmppath cmd = let prevdir = Sys.getcwd () in( - Sys.chdir tmppath; - let retval = Sys.command cmd in - (Sys.chdir prevdir; retval) + Sys.chdir tmppath; + let retval = Sys.command cmd in + (Sys.chdir prevdir; retval) ) diff --git a/mw-config/index.php b/mw-config/index.php new file mode 100644 index 00000000..c00a0d01 --- /dev/null +++ b/mw-config/index.php @@ -0,0 +1,50 @@ +startSession() ) { + $installer->finish(); + exit; + } + + $fingerprint = $installer->getFingerprint(); + if ( isset( $_SESSION['installData'][$fingerprint] ) ) { + $session = $_SESSION['installData'][$fingerprint]; + } else { + $session = array(); + } + + if ( isset( $session['settings']['_UserLang'] ) ) { + $langCode = $session['settings']['_UserLang']; + } elseif ( !is_null( $wgRequest->getVal( 'UserLang' ) ) ) { + $langCode = $wgRequest->getVal( 'UserLang' ); + } else { + $langCode = 'en'; + } + $wgLang = Language::factory( $langCode ); + + $installer->setParserLanguage( $wgLang ); + + $wgMetaNamespace = $wgCanonicalNamespaceNames[NS_PROJECT]; + + $session = $installer->execute( $session ); + + $_SESSION['installData'][$fingerprint] = $session; + +} diff --git a/mw-config/index.php5 b/mw-config/index.php5 new file mode 100644 index 00000000..8e6ceda9 --- /dev/null +++ b/mw-config/index.php5 @@ -0,0 +1,4 @@ += 0 ) { +if ( version_compare( phpversion(), '5.1.0' ) >= 0 ) { echo 'y'.'e'.'s'; } diff --git a/profileinfo.php b/profileinfo.php index d7ae5b8c..b8dc15b8 100644 --- a/profileinfo.php +++ b/profileinfo.php @@ -1,4 +1,30 @@ - Profiling data @@ -81,7 +83,9 @@ class profile_point { var $time; var $children; - function profile_point( $name, $count, $time, $memory ) { + static $totaltime, $totalmemory, $totalcount; + + function __construct( $name, $count, $time, $memory ) { $this->name = $name; $this->count = $count; $this->time = $time; @@ -93,45 +97,46 @@ class profile_point { $this->children[] = $child; } - function display($indent = 0.0) { - global $expand, $totaltime, $totalmemory, $totalcount; + function display( $expand, $indent = 0.0 ) { usort( $this->children, 'compare_point' ); - $extet = ''; - if ( isset( $expand[$this->name()] ) ) - $ex = true; - else $ex = false; + $ex = isset( $expand[$this->name()] ); + if ( !$ex ) { if ( count( $this->children ) ) { $url = getEscapedProfileUrl( false, false, $expand + array( $this->name() => true ) ); $extet = " [+]"; - } else $extet = ''; + } else { + $extet = ''; + } } else { $e = array(); - foreach ( $expand as $name => $ep ) - if ( $name != $this->name() ) + foreach ( $expand as $name => $ep ) { + if ( $name != $this->name() ) { $e += array( $name => $ep ); + } + } - $extet = " [–]"; + $extet = " [–]"; } ?> name() ) . $extet ?> - time() / $totaltime * 100 ) ?> - memory() / $totalmemory * 100 ) ?> + time() / self::$totaltime * 100 ) ?> + memory() / self::$totalmemory * 100 ) ?> count() ?> callsPerRequest() ), 2 ) ?> timePerCall() ), 2 ) ?> memoryPerCall() / 1024 ), 2 ) ?> - time() / $totalcount ), 2 ) ?> - memory() / $totalcount / 1024 ), 2 ) ?> + time() / self::$totalcount ), 2 ) ?> + memory() / self::$totalcount / 1024 ), 2 ) ?> children as $child ) { - $child->display( $indent + 2 ); + $child->display( $expand, $indent + 2 ); } } } @@ -161,18 +166,15 @@ class profile_point { } function callsPerRequest() { - global $totalcount; - return @( $this->count / $totalcount ); + return @( $this->count / self::$totalcount ); } function timePerRequest() { - global $totalcount; - return @( $this->time / $totalcount ); + return @( $this->time / self::$totalcount ); } function memoryPerRequest() { - global $totalcount; - return @( $this->memory / $totalcount ); + return @( $this->memory / self::$totalcount ); } function fmttime() { @@ -242,9 +244,9 @@ else kb/req pf_name, $o->pf_count, $o->pf_time, $o->pf_memory ); if( $next->name() == '-total' ) { - $totaltime = $next->time(); - $totalcount = $next->count(); - $totalmemory = $next->memory(); + profile_point::$totaltime = $next->time(); + profile_point::$totalcount = $next->count(); + profile_point::$totalmemory = $next->memory(); } if ( $last !== false ) { if ( preg_match( "/^".preg_quote( $last->name(), "/" )."/", $next->name() ) ) { @@ -300,12 +302,12 @@ foreach ( $points as $point ) { if ( strlen( $filter ) && !strstr( $point->name(), $filter ) ) continue; - $point->display(); + $point->display( $expand ); } ?> -

    Total time:

    -

    Total memory:

    +

    Total time:

    +

    Total memory:

    diff --git a/resources/Resources.php b/resources/Resources.php new file mode 100644 index 00000000..5c1ade8d --- /dev/null +++ b/resources/Resources.php @@ -0,0 +1,587 @@ + array( 'class' => 'ResourceLoaderSiteModule' ), + 'startup' => array( 'class' => 'ResourceLoaderStartUpModule' ), + 'user' => array( 'class' => 'ResourceLoaderUserModule' ), + 'user.options' => array( 'class' => 'ResourceLoaderUserOptionsModule' ), + + /* Skins */ + + 'skins.vector' => array( + 'styles' => array( 'vector/screen.css' => array( 'media' => 'screen' ) ), + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + ), + 'skins.monobook' => array( + 'styles' => array( + 'monobook/main.css' => array( 'media' => 'screen' ), + ), + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + ), + 'skins.simple' => array( + 'styles' => array( 'simple/main.css' => array( 'media' => 'screen' ) ), + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + ), + 'skins.chick' => array( + 'styles' => array( 'chick/main.css' => array( 'media' => 'screen,handheld' ) ), + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + ), + 'skins.modern' => array( + 'styles' => array( 'modern/main.css' => array( 'media' => 'screen' ), + 'modern/print.css' => array( 'media' => 'print' ) ), + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + ), + 'skins.cologneblue' => array( + 'styles' => array( 'common/cologneblue.css' => array( 'media' => 'screen' ) ), + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + ), + 'skins.nostalgia' => array( + 'styles' => array( 'common/nostalgia.css' => array( 'media' => 'screen' ) ), + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + ), + 'skins.standard' => array( + 'styles' => array( 'common/wikistandard.css' => array( 'media' => 'screen' ) ), + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + ), + + /* jQuery */ + + 'jquery' => array( + 'scripts' => 'resources/jquery/jquery.js', + 'debugRaw' => false + ), + + /* jQuery Plugins */ + + 'jquery.async' => array( + 'scripts' => 'resources/jquery/jquery.async.js' + ), + 'jquery.autoEllipsis' => array( + 'scripts' => 'resources/jquery/jquery.autoEllipsis.js', + 'dependencies' => 'jquery.highlightText', + ), + 'jquery.checkboxShiftClick' => array( + 'scripts' => 'resources/jquery/jquery.checkboxShiftClick.js' + ), + 'jquery.client' => array( + 'scripts' => 'resources/jquery/jquery.client.js', + ), + 'jquery.collapsibleTabs' => array( + 'scripts' => 'resources/jquery/jquery.collapsibleTabs.js' + ), + 'jquery.color' => array( + 'scripts' => 'resources/jquery/jquery.color.js' + ), + 'jquery.cookie' => array( + 'scripts' => 'resources/jquery/jquery.cookie.js' + ), + 'jquery.delayedBind' => array( + 'scripts' => 'resources/jquery/jquery.delayedBind.js' + ), + 'jquery.expandableField' => array( + 'scripts' => 'resources/jquery/jquery.expandableField.js' + ), + 'jquery.highlightText' => array( + 'scripts' => 'resources/jquery/jquery.highlightText.js' + ), + 'jquery.placeholder' => array( + 'scripts' => 'resources/jquery/jquery.placeholder.js' + ), + 'jquery.localize' => array( + 'scripts' => 'resources/jquery/jquery.localize.js' + ), + 'jquery.suggestions' => array( + 'scripts' => 'resources/jquery/jquery.suggestions.js', + 'styles' => 'resources/jquery/jquery.suggestions.css', + 'dependencies' => 'jquery.autoEllipsis', + ), + 'jquery.tabIndex' => array( + 'scripts' => 'resources/jquery/jquery.tabIndex.js' + ), + 'jquery.textSelection' => array( + 'scripts' => 'resources/jquery/jquery.textSelection.js' + ), + 'jquery.tipsy' => array( + 'scripts' => 'resources/jquery.tipsy/jquery.tipsy.js', + 'styles' => 'resources/jquery.tipsy/jquery.tipsy.css', + ), + + /* jQuery UI */ + + // Core + 'jquery.ui.core' => array( + 'scripts' => 'resources/jquery.ui/jquery.ui.core.js', + 'skinStyles' => array( + 'default' => array( + 'resources/jquery.ui/themes/default/jquery.ui.core.css', + 'resources/jquery.ui/themes/default/jquery.ui.theme.css', + ), + 'vector' => array( + 'resources/jquery.ui/themes/vector/jquery.ui.core.css', + 'resources/jquery.ui/themes/vector/jquery.ui.theme.css', + ), + ), + 'dependencies' => 'jquery', + ), + 'jquery.ui.widget' => array( + 'scripts' => 'resources/jquery.ui/jquery.ui.widget.js', + ), + 'jquery.ui.mouse' => array( + 'scripts' => 'resources/jquery.ui/jquery.ui.mouse.js', + 'dependencies' => 'jquery.ui.widget', + ), + 'jquery.ui.position' => array( + 'scripts' => 'resources/jquery.ui/jquery.ui.position.js', + ), + // Interactions + 'jquery.ui.draggable' => array( + 'scripts' => 'resources/jquery.ui/jquery.ui.draggable.js', + 'dependencies' => array( 'jquery.ui.core', 'jquery.ui.mouse', 'jquery.ui.widget' ), + ), + 'jquery.ui.droppable' => array( + 'scripts' => 'resources/jquery.ui/jquery.ui.droppable.js', + 'dependencies' => array( + 'jquery.ui.core', 'jquery.ui.mouse', 'jquery.ui.widget', 'jquery.ui.draggable' + ), + ), + 'jquery.ui.resizable' => array( + 'scripts' => 'resources/jquery.ui/jquery.ui.resizable.js', + 'skinStyles' => array( + 'default' => 'resources/jquery.ui/themes/default/jquery.ui.resizable.css', + 'vector' => 'resources/jquery.ui/themes/vector/jquery.ui.resizable.css', + ), + 'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget', 'jquery.ui.mouse' ), + ), + 'jquery.ui.selectable' => array( + 'scripts' => 'resources/jquery.ui/jquery.ui.selectable.js', + 'skinStyles' => array( + 'default' => 'resources/jquery.ui/themes/default/jquery.ui.selectable.css', + 'vector' => 'resources/jquery.ui/themes/vector/jquery.ui.selectable.css', + ), + 'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget', 'jquery.ui.mouse' ), + ), + 'jquery.ui.sortable' => array( + 'scripts' => 'resources/jquery.ui/jquery.ui.sortable.js', + 'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget', 'jquery.ui.mouse' ), + ), + // Widgets + 'jquery.ui.accordion' => array( + 'scripts' => 'resources/jquery.ui/jquery.ui.accordion.js', + 'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget' ), + 'skinStyles' => array( + 'default' => 'resources/jquery.ui/themes/default/jquery.ui.accordion.css', + 'vector' => 'resources/jquery.ui/themes/vector/jquery.ui.accordion.css', + ), + ), + 'jquery.ui.autocomplete' => array( + 'scripts' => 'resources/jquery.ui/jquery.ui.autocomplete.js', + 'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget', 'jquery.ui.position' ), + 'skinStyles' => array( + 'default' => 'resources/jquery.ui/themes/default/jquery.ui.autocomplete.css', + 'vector' => 'resources/jquery.ui/themes/vector/jquery.ui.autocomplete.css', + ), + ), + 'jquery.ui.button' => array( + 'scripts' => 'resources/jquery.ui/jquery.ui.button.js', + 'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget' ), + 'skinStyles' => array( + 'default' => 'resources/jquery.ui/themes/default/jquery.ui.button.css', + 'vector' => 'resources/jquery.ui/themes/vector/jquery.ui.button.css', + ), + ), + 'jquery.ui.datepicker' => array( + 'scripts' => 'resources/jquery.ui/jquery.ui.datepicker.js', + 'dependencies' => 'jquery.ui.core', + 'skinStyles' => array( + 'default' => 'resources/jquery.ui/themes/default/jquery.ui.datepicker.css', + 'vector' => 'resources/jquery.ui/themes/vector/jquery.ui.datepicker.css', + ), + 'languageScripts' => array( + 'af' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-af.js', + 'ar' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-ar.js', + 'az' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-az.js', + 'bg' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-bg.js', + 'bs' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-bs.js', + 'ca' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-ca.js', + 'cs' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-cs.js', + 'da' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-da.js', + 'de' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-de.js', + 'el' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-el.js', + 'en-gb' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-en-GB.js', + 'eo' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-eo.js', + 'es' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-es.js', + 'et' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-et.js', + 'eu' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-eu.js', + 'fa' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-fa.js', + 'fi' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-fi.js', + 'fo' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-fo.js', + 'fr-ch' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-fr-CH.js', + 'fr' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-fr.js', + 'he' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-he.js', + 'hr' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-hr.js', + 'hu' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-hu.js', + 'hy' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-hy.js', + 'id' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-id.js', + 'is' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-is.js', + 'it' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-it.js', + 'ja' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-ja.js', + 'ko' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-ko.js', + 'lt' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-lt.js', + 'lv' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-lv.js', + 'ms' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-ms.js', + 'nl' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-nl.js', + 'no' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-no.js', + 'pl' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-pl.js', + 'pt-br' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-pt-BR.js', + 'ro' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-ro.js', + 'ru' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-ru.js', + 'sk' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-sk.js', + 'sl' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-sl.js', + 'sq' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-sq.js', + 'sr-sr' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-sr-SR.js', + 'sr' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-sr.js', + 'sv' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-sv.js', + 'ta' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-ta.js', + 'th' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-th.js', + 'tr' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-tr.js', + 'uk' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-uk.js', + 'vi' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-vi.js', + 'zh-cn' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-zh-CN.js', + 'zh-hk' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-zh-HK.js', + 'zh-tw' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-zh-TW.js' + ), + ), + 'jquery.ui.dialog' => array( + 'scripts' => 'resources/jquery.ui/jquery.ui.dialog.js', + 'dependencies' => array( + 'jquery.ui.core', + 'jquery.ui.widget', + 'jquery.ui.button', + 'jquery.ui.draggable', + 'jquery.ui.mouse', + 'jquery.ui.position', + 'jquery.ui.resizable', + ), + 'skinStyles' => array( + 'default' => 'resources/jquery.ui/themes/default/jquery.ui.dialog.css', + 'vector' => 'resources/jquery.ui/themes/vector/jquery.ui.dialog.css', + ), + ), + 'jquery.ui.progressbar' => array( + 'scripts' => 'resources/jquery.ui/jquery.ui.progressbar.js', + 'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget' ), + 'skinStyles' => array( + 'default' => 'resources/jquery.ui/themes/default/jquery.ui.progressbar.css', + 'vector' => 'resources/jquery.ui/themes/vector/jquery.ui.progressbar.css', + ), + ), + 'jquery.ui.slider' => array( + 'scripts' => 'resources/jquery.ui/jquery.ui.slider.js', + 'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget', 'jquery.ui.mouse' ), + 'skinStyles' => array( + 'default' => 'resources/jquery.ui/themes/default/jquery.ui.slider.css', + 'vector' => 'resources/jquery.ui/themes/vector/jquery.ui.slider.css', + ), + ), + 'jquery.ui.tabs' => array( + 'scripts' => 'resources/jquery.ui/jquery.ui.tabs.js', + 'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget' ), + 'skinStyles' => array( + 'default' => 'resources/jquery.ui/themes/default/jquery.ui.tabs.css', + 'vector' => 'resources/jquery.ui/themes/vector/jquery.ui.tabs.css', + ), + ), + // Effects + 'jquery.effects.core' => array( + 'scripts' => 'resources/jquery.effects/jquery.effects.core.js', + 'dependencies' => 'jquery', + ), + 'jquery.effects.blind' => array( + 'scripts' => 'resources/jquery.effects/jquery.effects.blind.js', + 'dependencies' => 'jquery.effects.core', + ), + 'jquery.effects.bounce' => array( + 'scripts' => 'resources/jquery.effects/jquery.effects.bounce.js', + 'dependencies' => 'jquery.effects.core', + ), + 'jquery.effects.clip' => array( + 'scripts' => 'resources/jquery.effects/jquery.effects.clip.js', + 'dependencies' => 'jquery.effects.core', + ), + 'jquery.effects.drop' => array( + 'scripts' => 'resources/jquery.effects/jquery.effects.drop.js', + 'dependencies' => 'jquery.effects.core', + ), + 'jquery.effects.explode' => array( + 'scripts' => 'resources/jquery.effects/jquery.effects.explode.js', + 'dependencies' => 'jquery.effects.core', + ), + 'jquery.effects.fold' => array( + 'scripts' => 'resources/jquery.effects/jquery.effects.fold.js', + 'dependencies' => 'jquery.effects.core', + ), + 'jquery.effects.highlight' => array( + 'scripts' => 'resources/jquery.effects/jquery.effects.highlight.js', + 'dependencies' => 'jquery.effects.core', + ), + 'jquery.effects.pulsate' => array( + 'scripts' => 'resources/jquery.effects/jquery.effects.pulsate.js', + 'dependencies' => 'jquery.effects.core', + ), + 'jquery.effects.scale' => array( + 'scripts' => 'resources/jquery.effects/jquery.effects.scale.js', + 'dependencies' => 'jquery.effects.core', + ), + 'jquery.effects.shake' => array( + 'scripts' => 'resources/jquery.effects/jquery.effects.shake.js', + 'dependencies' => 'jquery.effects.core', + ), + 'jquery.effects.slide' => array( + 'scripts' => 'resources/jquery.effects/jquery.effects.slide.js', + 'dependencies' => 'jquery.effects.core', + ), + 'jquery.effects.transfer' => array( + 'scripts' => 'resources/jquery.effects/jquery.effects.transfer.js', + 'dependencies' => 'jquery.effects.core', + ), + + /* MediaWiki */ + + 'mediawiki' => array( + 'scripts' => 'resources/mediawiki/mediawiki.js', + 'debugScripts' => 'resources/mediawiki/mediawiki.log.js', + 'debugRaw' => false + ), + 'mediawiki.util' => array( + 'scripts' => 'resources/mediawiki.util/mediawiki.util.js', + 'dependencies' => array( 'jquery.checkboxShiftClick', 'jquery.client', 'jquery.placeholder' ), + 'debugScripts' => 'resources/mediawiki.util/mediawiki.util.test.js', + ), + 'mediawiki.action.history' => array( + 'scripts' => 'resources/mediawiki.action/mediawiki.action.history.js', + 'dependencies' => 'mediawiki.legacy.history', + 'group' => 'mediawiki.action.history', + ), + 'mediawiki.action.edit' => array( + 'scripts' => 'resources/mediawiki.action/mediawiki.action.edit.js', + ), + 'mediawiki.action.view.rightClickEdit' => array( + 'scripts' => 'resources/mediawiki.action/mediawiki.action.view.rightClickEdit.js', + ), + 'mediawiki.special.preferences' => array( + 'scripts' => 'resources/mediawiki.special/mediawiki.special.preferences.js', + 'styles' => 'resources/mediawiki.special/mediawiki.special.preferences.css', + 'messages' => array( 'email-address-validity-valid', 'email-address-validity-invalid' ), + ), + 'mediawiki.special.search' => array( + 'scripts' => 'resources/mediawiki.special/mediawiki.special.search.js', + ), + 'mediawiki.action.history' => array( + 'scripts' => 'resources/mediawiki.action/mediawiki.action.history.js', + 'dependencies' => 'mediawiki.legacy.history', + ), + 'mediawiki.language' => array( + 'scripts' => 'resources/mediawiki.language/mediawiki.language.js', + 'languageScripts' => array( + 'am' => 'resources/mediawiki.language/languages/am.js', + 'ar' => 'resources/mediawiki.language/languages/ar.js', + 'bat-smg' => 'resources/mediawiki.language/languages/bat-smg.js', + 'be' => 'resources/mediawiki.language/languages/be.js', + 'be-tarask' => 'resources/mediawiki.language/languages/be-tarask.js', + 'bh' => 'resources/mediawiki.language/languages/bh.js', + 'bs' => 'resources/mediawiki.language/languages/bs.js', + 'cs' => 'resources/mediawiki.language/languages/cs.js', + 'cu' => 'resources/mediawiki.language/languages/cu.js', + 'cy' => 'resources/mediawiki.language/languages/cy.js', + 'dsb' => 'resources/mediawiki.language/languages/dsb.js', + 'fr' => 'resources/mediawiki.language/languages/fr.js', + 'ga' => 'resources/mediawiki.language/languages/ga.js', + 'gd' => 'resources/mediawiki.language/languages/gd.js', + 'gv' => 'resources/mediawiki.language/languages/gv.js', + 'he' => 'resources/mediawiki.language/languages/he.js', + 'hi' => 'resources/mediawiki.language/languages/hi.js', + 'hr' => 'resources/mediawiki.language/languages/hr.js', + 'hsb' => 'resources/mediawiki.language/languages/hsb.js', + 'hy' => 'resources/mediawiki.language/languages/hy.js', + 'ksh' => 'resources/mediawiki.language/languages/ksh.js', + 'ln' => 'resources/mediawiki.language/languages/ln.js', + 'lt' => 'resources/mediawiki.language/languages/lt.js', + 'lv' => 'resources/mediawiki.language/languages/lv.js', + 'mg' => 'resources/mediawiki.language/languages/mg.js', + 'mk' => 'resources/mediawiki.language/languages/mk.js', + 'mo' => 'resources/mediawiki.language/languages/mo.js', + 'mt' => 'resources/mediawiki.language/languages/mt.js', + 'nso' => 'resources/mediawiki.language/languages/nso.js', + 'pl' => 'resources/mediawiki.language/languages/pl.js', + 'pt-br' => 'resources/mediawiki.language/languages/pt-br.js', + 'ro' => 'resources/mediawiki.language/languages/ro.js', + 'ru' => 'resources/mediawiki.language/languages/ru.js', + 'se' => 'resources/mediawiki.language/languages/se.js', + 'sh' => 'resources/mediawiki.language/languages/sh.js', + 'sk' => 'resources/mediawiki.language/languages/sk.js', + 'sl' => 'resources/mediawiki.language/languages/sl.js', + 'sma' => 'resources/mediawiki.language/languages/sma.js', + 'sr-ec' => 'resources/mediawiki.language/languages/sr-ec.js', + 'sr-el' => 'resources/mediawiki.language/languages/sr-el.js', + 'sr' => 'resources/mediawiki.language/languages/sr.js', + 'ti' => 'resources/mediawiki.language/languages/ti.js', + 'tl' => 'resources/mediawiki.language/languages/tl.js', + 'uk' => 'resources/mediawiki.language/languages/uk.js', + 'wa' => 'resources/mediawiki.language/languages/wa.js', + ), + ), + + /* mediawiki Legacy */ + + 'mediawiki.legacy.ajax' => array( + 'scripts' => 'common/ajax.js', + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + 'messages' => array( + 'watch', 'unwatch', 'watching', 'unwatching', 'tooltip-ca-watch', + 'tooltip-ca-unwatch' + ), + 'dependencies' => 'mediawiki.legacy.wikibits', + ), + 'mediawiki.legacy.ajaxwatch' => array( + 'scripts' => 'common/ajaxwatch.js', + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + 'dependencies' => 'mediawiki.legacy.wikibits', + ), + 'mediawiki.legacy.block' => array( + 'scripts' => 'common/block.js', + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + 'dependencies' => 'mediawiki.legacy.wikibits', + ), + 'mediawiki.legacy.commonPrint' => array( + 'styles' => array( 'common/commonPrint.css' => array( 'media' => 'print' ) ), + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + ), + 'mediawiki.legacy.config' => array( + 'scripts' => 'common/config.js', + 'styles' => array( 'common/config.css', 'common/config-cc.css' ), + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + 'dependencies' => 'mediawiki.legacy.wikibits', + ), + 'mediawiki.legacy.diff' => array( + 'scripts' => 'common/diff.js', + 'styles' => 'common/diff.css', + 'group' => 'mediawiki.action.history', + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + 'dependencies' => 'mediawiki.legacy.wikibits', + ), + 'mediawiki.legacy.edit' => array( + 'scripts' => 'common/edit.js', + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + 'dependencies' => 'mediawiki.legacy.wikibits', + ), + 'mediawiki.legacy.enhancedchanges' => array( + 'scripts' => 'common/enhancedchanges.js', + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + 'dependencies' => 'mediawiki.legacy.wikibits', + ), + 'mediawiki.legacy.history' => array( + 'scripts' => 'common/history.js', + 'group' => 'mediawiki.action.history', + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + 'dependencies' => 'mediawiki.legacy.wikibits', + ), + 'mediawiki.legacy.htmlform' => array( + 'scripts' => 'common/htmlform.js', + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + 'dependencies' => 'mediawiki.legacy.wikibits', + ), + 'mediawiki.legacy.IEFixes' => array( + 'scripts' => 'common/IEFixes.js', + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + 'dependencies' => 'mediawiki.legacy.wikibits', + ), + 'mediawiki.legacy.metadata' => array( + 'scripts' => 'common/metadata.js', + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + 'dependencies' => 'mediawiki.legacy.wikibits', + 'messages' => array( 'metadata-expand', 'metadata-collapse' ), + ), + 'mediawiki.legacy.mwsuggest' => array( + 'scripts' => 'common/mwsuggest.js', + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + 'dependencies' => 'mediawiki.legacy.wikibits', + 'messages' => array( 'search-mwsuggest-enabled', 'search-mwsuggest-disabled' ), + ), + 'mediawiki.legacy.prefs' => array( + 'scripts' => 'common/prefs.js', + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + 'dependencies' => array( 'mediawiki.legacy.wikibits', 'mediawiki.legacy.htmlform' ), + ), + 'mediawiki.legacy.preview' => array( + 'scripts' => 'common/preview.js', + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + 'dependencies' => 'mediawiki.legacy.wikibits', + ), + 'mediawiki.legacy.protect' => array( + 'scripts' => 'common/protect.js', + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + 'dependencies' => 'mediawiki.legacy.wikibits', + ), + 'mediawiki.legacy.search' => array( + 'scripts' => 'common/search.js', + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + 'styles' => 'common/search.css', + 'dependencies' => 'mediawiki.legacy.wikibits', + ), + 'mediawiki.legacy.shared' => array( + 'styles' => array( 'common/shared.css' => array( 'media' => 'screen' ) ), + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + ), + 'mediawiki.legacy.oldshared' => array( + 'styles' => array( 'common/oldshared.css' => array( 'media' => 'screen' ) ), + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + ), + 'mediawiki.legacy.upload' => array( + 'scripts' => 'common/upload.js', + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + 'dependencies' => 'mediawiki.legacy.wikibits', + ), + 'mediawiki.legacy.wikibits' => array( + 'scripts' => 'common/wikibits.js', + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + 'dependencies' => 'mediawiki.language', + 'messages' => array( 'showtoc', 'hidetoc' ), + ), + 'mediawiki.legacy.wikiprintable' => array( + 'styles' => array( 'common/wikiprintable.css' => array( 'media' => 'print' ) ), + 'remoteBasePath' => $GLOBALS['wgStylePath'], + 'localBasePath' => $GLOBALS['wgStyleDirectory'], + ), +); diff --git a/resources/jquery.effects/jquery.effects.blind.js b/resources/jquery.effects/jquery.effects.blind.js new file mode 100644 index 00000000..d9a3b06b --- /dev/null +++ b/resources/jquery.effects/jquery.effects.blind.js @@ -0,0 +1,49 @@ +/* + * jQuery UI Effects Blind 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Blind + * + * Depends: + * jquery.effects.core.js + */ +(function($) { + +$.effects.blind = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','left']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode + var direction = o.options.direction || 'vertical'; // Default direction + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper + var ref = (direction == 'vertical') ? 'height' : 'width'; + var distance = (direction == 'vertical') ? wrapper.height() : wrapper.width(); + if(mode == 'show') wrapper.css(ref, 0); // Shift + + // Animation + var animation = {}; + animation[ref] = mode == 'show' ? distance : 0; + + // Animate + wrapper.animate(animation, o.duration, o.options.easing, function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(el[0], arguments); // Callback + el.dequeue(); + }); + + }); + +}; + +})(jQuery); diff --git a/resources/jquery.effects/jquery.effects.bounce.js b/resources/jquery.effects/jquery.effects.bounce.js new file mode 100644 index 00000000..010585bf --- /dev/null +++ b/resources/jquery.effects/jquery.effects.bounce.js @@ -0,0 +1,78 @@ +/* + * jQuery UI Effects Bounce 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Bounce + * + * Depends: + * jquery.effects.core.js + */ +(function($) { + +$.effects.bounce = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','left']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode + var direction = o.options.direction || 'up'; // Default direction + var distance = o.options.distance || 20; // Default distance + var times = o.options.times || 5; // Default # of times + var speed = o.duration || 250; // Default speed per bounce + if (/show|hide/.test(mode)) props.push('opacity'); // Avoid touching opacity to prevent clearType and PNG issues in IE + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + $.effects.createWrapper(el); // Create Wrapper + var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; + var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; + var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 3 : el.outerWidth({margin:true}) / 3); + if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift + if (mode == 'hide') distance = distance / (times * 2); + if (mode != 'hide') times--; + + // Animate + if (mode == 'show') { // Show Bounce + var animation = {opacity: 1}; + animation[ref] = (motion == 'pos' ? '+=' : '-=') + distance; + el.animate(animation, speed / 2, o.options.easing); + distance = distance / 2; + times--; + }; + for (var i = 0; i < times; i++) { // Bounces + var animation1 = {}, animation2 = {}; + animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance; + animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance; + el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing); + distance = (mode == 'hide') ? distance * 2 : distance / 2; + }; + if (mode == 'hide') { // Last Bounce + var animation = {opacity: 0}; + animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance; + el.animate(animation, speed / 2, o.options.easing, function(){ + el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + }); + } else { + var animation1 = {}, animation2 = {}; + animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance; + animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance; + el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing, function(){ + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + }); + }; + el.queue('fx', function() { el.dequeue(); }); + el.dequeue(); + }); + +}; + +})(jQuery); diff --git a/resources/jquery.effects/jquery.effects.clip.js b/resources/jquery.effects/jquery.effects.clip.js new file mode 100644 index 00000000..796ba89e --- /dev/null +++ b/resources/jquery.effects/jquery.effects.clip.js @@ -0,0 +1,54 @@ +/* + * jQuery UI Effects Clip 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Clip + * + * Depends: + * jquery.effects.core.js + */ +(function($) { + +$.effects.clip = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','left','height','width']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode + var direction = o.options.direction || 'vertical'; // Default direction + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper + var animate = el[0].tagName == 'IMG' ? wrapper : el; + var ref = { + size: (direction == 'vertical') ? 'height' : 'width', + position: (direction == 'vertical') ? 'top' : 'left' + }; + var distance = (direction == 'vertical') ? animate.height() : animate.width(); + if(mode == 'show') { animate.css(ref.size, 0); animate.css(ref.position, distance / 2); } // Shift + + // Animation + var animation = {}; + animation[ref.size] = mode == 'show' ? distance : 0; + animation[ref.position] = mode == 'show' ? 0 : distance / 2; + + // Animate + animate.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(el[0], arguments); // Callback + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); diff --git a/resources/jquery.effects/jquery.effects.core.js b/resources/jquery.effects/jquery.effects.core.js new file mode 100644 index 00000000..4589fe21 --- /dev/null +++ b/resources/jquery.effects/jquery.effects.core.js @@ -0,0 +1,714 @@ +/* + * jQuery UI Effects 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/ + */ +;jQuery.effects || (function($) { + +$.effects = {}; + + + +/******************************************************************************/ +/****************************** COLOR ANIMATIONS ******************************/ +/******************************************************************************/ + +// override the animation for color styles +$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', + 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], +function(i, attr) { + $.fx.step[attr] = function(fx) { + if (!fx.colorInit) { + fx.start = getColor(fx.elem, attr); + fx.end = getRGB(fx.end); + fx.colorInit = true; + } + + fx.elem.style[attr] = 'rgb(' + + Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + ',' + + Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + ',' + + Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ')'; + }; +}); + +// Color Conversion functions from highlightFade +// By Blair Mitchelmore +// http://jquery.offput.ca/highlightFade/ + +// Parse strings looking for color tuples [255,255,255] +function getRGB(color) { + var result; + + // Check if we're already dealing with an array of colors + if ( color && color.constructor == Array && color.length == 3 ) + return color; + + // Look for rgb(num,num,num) + if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) + return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)]; + + // Look for rgb(num%,num%,num%) + if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)%\s*,\s*([0-9]+(?:\.[0-9]+)?)%\s*\)/.exec(color)) + return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55]; + + // Look for #a0b1c2 + if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) + return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)]; + + // Look for #fff + if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) + return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)]; + + // Look for rgba(0, 0, 0, 0) == transparent in Safari 3 + if (result = /rgba\(0, 0, 0, 0\)/.exec(color)) + return colors['transparent']; + + // Otherwise, we're most likely dealing with a named color + return colors[$.trim(color).toLowerCase()]; +} + +function getColor(elem, attr) { + var color; + + do { + color = $.curCSS(elem, attr); + + // Keep going until we find an element that has color, or we hit the body + if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") ) + break; + + attr = "backgroundColor"; + } while ( elem = elem.parentNode ); + + return getRGB(color); +}; + +// Some named colors to work with +// From Interface by Stefan Petre +// http://interface.eyecon.ro/ + +var colors = { + aqua:[0,255,255], + azure:[240,255,255], + beige:[245,245,220], + black:[0,0,0], + blue:[0,0,255], + brown:[165,42,42], + cyan:[0,255,255], + darkblue:[0,0,139], + darkcyan:[0,139,139], + darkgrey:[169,169,169], + darkgreen:[0,100,0], + darkkhaki:[189,183,107], + darkmagenta:[139,0,139], + darkolivegreen:[85,107,47], + darkorange:[255,140,0], + darkorchid:[153,50,204], + darkred:[139,0,0], + darksalmon:[233,150,122], + darkviolet:[148,0,211], + fuchsia:[255,0,255], + gold:[255,215,0], + green:[0,128,0], + indigo:[75,0,130], + khaki:[240,230,140], + lightblue:[173,216,230], + lightcyan:[224,255,255], + lightgreen:[144,238,144], + lightgrey:[211,211,211], + lightpink:[255,182,193], + lightyellow:[255,255,224], + lime:[0,255,0], + magenta:[255,0,255], + maroon:[128,0,0], + navy:[0,0,128], + olive:[128,128,0], + orange:[255,165,0], + pink:[255,192,203], + purple:[128,0,128], + violet:[128,0,128], + red:[255,0,0], + silver:[192,192,192], + white:[255,255,255], + yellow:[255,255,0], + transparent: [255,255,255] +}; + + + +/******************************************************************************/ +/****************************** CLASS ANIMATIONS ******************************/ +/******************************************************************************/ + +var classAnimationActions = ['add', 'remove', 'toggle'], + shorthandStyles = { + border: 1, + borderBottom: 1, + borderColor: 1, + borderLeft: 1, + borderRight: 1, + borderTop: 1, + borderWidth: 1, + margin: 1, + padding: 1 + }; + +function getElementStyles() { + var style = document.defaultView + ? document.defaultView.getComputedStyle(this, null) + : this.currentStyle, + newStyle = {}, + key, + camelCase; + + // webkit enumerates style porperties + if (style && style.length && style[0] && style[style[0]]) { + var len = style.length; + while (len--) { + key = style[len]; + if (typeof style[key] == 'string') { + camelCase = key.replace(/\-(\w)/g, function(all, letter){ + return letter.toUpperCase(); + }); + newStyle[camelCase] = style[key]; + } + } + } else { + for (key in style) { + if (typeof style[key] === 'string') { + newStyle[key] = style[key]; + } + } + } + + return newStyle; +} + +function filterStyles(styles) { + var name, value; + for (name in styles) { + value = styles[name]; + if ( + // ignore null and undefined values + value == null || + // ignore functions (when does this occur?) + $.isFunction(value) || + // shorthand styles that need to be expanded + name in shorthandStyles || + // ignore scrollbars (break in IE) + (/scrollbar/).test(name) || + + // only colors or values that can be converted to numbers + (!(/color/i).test(name) && isNaN(parseFloat(value))) + ) { + delete styles[name]; + } + } + + return styles; +} + +function styleDifference(oldStyle, newStyle) { + var diff = { _: 0 }, // http://dev.jquery.com/ticket/5459 + name; + + for (name in newStyle) { + if (oldStyle[name] != newStyle[name]) { + diff[name] = newStyle[name]; + } + } + + return diff; +} + +$.effects.animateClass = function(value, duration, easing, callback) { + if ($.isFunction(easing)) { + callback = easing; + easing = null; + } + + return this.each(function() { + + var that = $(this), + originalStyleAttr = that.attr('style') || ' ', + originalStyle = filterStyles(getElementStyles.call(this)), + newStyle, + className = that.attr('className'); + + $.each(classAnimationActions, function(i, action) { + if (value[action]) { + that[action + 'Class'](value[action]); + } + }); + newStyle = filterStyles(getElementStyles.call(this)); + that.attr('className', className); + + that.animate(styleDifference(originalStyle, newStyle), duration, easing, function() { + $.each(classAnimationActions, function(i, action) { + if (value[action]) { that[action + 'Class'](value[action]); } + }); + // work around bug in IE by clearing the cssText before setting it + if (typeof that.attr('style') == 'object') { + that.attr('style').cssText = ''; + that.attr('style').cssText = originalStyleAttr; + } else { + that.attr('style', originalStyleAttr); + } + if (callback) { callback.apply(this, arguments); } + }); + }); +}; + +$.fn.extend({ + _addClass: $.fn.addClass, + addClass: function(classNames, speed, easing, callback) { + return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames); + }, + + _removeClass: $.fn.removeClass, + removeClass: function(classNames,speed,easing,callback) { + return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames); + }, + + _toggleClass: $.fn.toggleClass, + toggleClass: function(classNames, force, speed, easing, callback) { + if ( typeof force == "boolean" || force === undefined ) { + if ( !speed ) { + // without speed parameter; + return this._toggleClass(classNames, force); + } else { + return $.effects.animateClass.apply(this, [(force?{add:classNames}:{remove:classNames}),speed,easing,callback]); + } + } else { + // without switch parameter; + return $.effects.animateClass.apply(this, [{ toggle: classNames },force,speed,easing]); + } + }, + + switchClass: function(remove,add,speed,easing,callback) { + return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]); + } +}); + + + +/******************************************************************************/ +/*********************************** EFFECTS **********************************/ +/******************************************************************************/ + +$.extend($.effects, { + version: "1.8.2", + + // Saves a set of properties in a data storage + save: function(element, set) { + for(var i=0; i < set.length; i++) { + if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]); + } + }, + + // Restores a set of previously saved properties from a data storage + restore: function(element, set) { + for(var i=0; i < set.length; i++) { + if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i])); + } + }, + + setMode: function(el, mode) { + if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle + return mode; + }, + + getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value + // this should be a little more flexible in the future to handle a string & hash + var y, x; + switch (origin[0]) { + case 'top': y = 0; break; + case 'middle': y = 0.5; break; + case 'bottom': y = 1; break; + default: y = origin[0] / original.height; + }; + switch (origin[1]) { + case 'left': x = 0; break; + case 'center': x = 0.5; break; + case 'right': x = 1; break; + default: x = origin[1] / original.width; + }; + return {x: x, y: y}; + }, + + // Wraps the element around a wrapper that copies position properties + createWrapper: function(element) { + + // if the element is already wrapped, return it + if (element.parent().is('.ui-effects-wrapper')) { + return element.parent(); + } + + // wrap the element + var props = { + width: element.outerWidth(true), + height: element.outerHeight(true), + 'float': element.css('float') + }, + wrapper = $('
    ') + .addClass('ui-effects-wrapper') + .css({ + fontSize: '100%', + background: 'transparent', + border: 'none', + margin: 0, + padding: 0 + }); + + element.wrap(wrapper); + wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element + + // transfer positioning properties to the wrapper + if (element.css('position') == 'static') { + wrapper.css({ position: 'relative' }); + element.css({ position: 'relative' }); + } else { + $.extend(props, { + position: element.css('position'), + zIndex: element.css('z-index') + }); + $.each(['top', 'left', 'bottom', 'right'], function(i, pos) { + props[pos] = element.css(pos); + if (isNaN(parseInt(props[pos], 10))) { + props[pos] = 'auto'; + } + }); + element.css({position: 'relative', top: 0, left: 0 }); + } + + return wrapper.css(props).show(); + }, + + removeWrapper: function(element) { + if (element.parent().is('.ui-effects-wrapper')) + return element.parent().replaceWith(element); + return element; + }, + + setTransition: function(element, list, factor, value) { + value = value || {}; + $.each(list, function(i, x){ + unit = element.cssUnit(x); + if (unit[0] > 0) value[x] = unit[0] * factor + unit[1]; + }); + return value; + } +}); + + +function _normalizeArguments(effect, options, speed, callback) { + // shift params for method overloading + if (typeof effect == 'object') { + callback = options; + speed = null; + options = effect; + effect = options.effect; + } + if ($.isFunction(options)) { + callback = options; + speed = null; + options = {}; + } + if ($.isFunction(speed)) { + callback = speed; + speed = null; + } + if (typeof options == 'number' || $.fx.speeds[options]) { + callback = speed; + speed = options; + options = {}; + } + + options = options || {}; + + speed = speed || options.duration; + speed = $.fx.off ? 0 : typeof speed == 'number' + ? speed : $.fx.speeds[speed] || $.fx.speeds._default; + + callback = callback || options.complete; + + return [effect, options, speed, callback]; +} + +$.fn.extend({ + effect: function(effect, options, speed, callback) { + var args = _normalizeArguments.apply(this, arguments), + // TODO: make effects takes actual parameters instead of a hash + args2 = { + options: args[1], + duration: args[2], + callback: args[3] + }, + effectMethod = $.effects[effect]; + + return effectMethod && !$.fx.off ? effectMethod.call(this, args2) : this; + }, + + _show: $.fn.show, + show: function(speed) { + if (!speed || typeof speed == 'number' || $.fx.speeds[speed]) { + return this._show.apply(this, arguments); + } else { + var args = _normalizeArguments.apply(this, arguments); + args[1].mode = 'show'; + return this.effect.apply(this, args); + } + }, + + _hide: $.fn.hide, + hide: function(speed) { + if (!speed || typeof speed == 'number' || $.fx.speeds[speed]) { + return this._hide.apply(this, arguments); + } else { + var args = _normalizeArguments.apply(this, arguments); + args[1].mode = 'hide'; + return this.effect.apply(this, args); + } + }, + + // jQuery core overloads toggle and create _toggle + __toggle: $.fn.toggle, + toggle: function(speed) { + if (!speed || typeof speed == 'number' || $.fx.speeds[speed] || + typeof speed == 'boolean' || $.isFunction(speed)) { + return this.__toggle.apply(this, arguments); + } else { + var args = _normalizeArguments.apply(this, arguments); + args[1].mode = 'toggle'; + return this.effect.apply(this, args); + } + }, + + // helper functions + cssUnit: function(key) { + var style = this.css(key), val = []; + $.each( ['em','px','%','pt'], function(i, unit){ + if(style.indexOf(unit) > 0) + val = [parseFloat(style), unit]; + }); + return val; + } +}); + + + +/******************************************************************************/ +/*********************************** EASING ***********************************/ +/******************************************************************************/ + +/* + * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ + * + * Uses the built in easing capabilities added In jQuery 1.1 + * to offer multiple easing options + * + * TERMS OF USE - jQuery Easing + * + * Open source under the BSD License. + * + * Copyright 2008 George McGinley Smith + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +// t: current time, b: begInnIng value, c: change In value, d: duration +$.easing.jswing = $.easing.swing; + +$.extend($.easing, +{ + def: 'easeOutQuad', + swing: function (x, t, b, c, d) { + //alert($.easing.default); + return $.easing[$.easing.def](x, t, b, c, d); + }, + easeInQuad: function (x, t, b, c, d) { + return c*(t/=d)*t + b; + }, + easeOutQuad: function (x, t, b, c, d) { + return -c *(t/=d)*(t-2) + b; + }, + easeInOutQuad: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t + b; + return -c/2 * ((--t)*(t-2) - 1) + b; + }, + easeInCubic: function (x, t, b, c, d) { + return c*(t/=d)*t*t + b; + }, + easeOutCubic: function (x, t, b, c, d) { + return c*((t=t/d-1)*t*t + 1) + b; + }, + easeInOutCubic: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t + b; + return c/2*((t-=2)*t*t + 2) + b; + }, + easeInQuart: function (x, t, b, c, d) { + return c*(t/=d)*t*t*t + b; + }, + easeOutQuart: function (x, t, b, c, d) { + return -c * ((t=t/d-1)*t*t*t - 1) + b; + }, + easeInOutQuart: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t*t + b; + return -c/2 * ((t-=2)*t*t*t - 2) + b; + }, + easeInQuint: function (x, t, b, c, d) { + return c*(t/=d)*t*t*t*t + b; + }, + easeOutQuint: function (x, t, b, c, d) { + return c*((t=t/d-1)*t*t*t*t + 1) + b; + }, + easeInOutQuint: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; + return c/2*((t-=2)*t*t*t*t + 2) + b; + }, + easeInSine: function (x, t, b, c, d) { + return -c * Math.cos(t/d * (Math.PI/2)) + c + b; + }, + easeOutSine: function (x, t, b, c, d) { + return c * Math.sin(t/d * (Math.PI/2)) + b; + }, + easeInOutSine: function (x, t, b, c, d) { + return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; + }, + easeInExpo: function (x, t, b, c, d) { + return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; + }, + easeOutExpo: function (x, t, b, c, d) { + return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; + }, + easeInOutExpo: function (x, t, b, c, d) { + if (t==0) return b; + if (t==d) return b+c; + if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; + return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; + }, + easeInCirc: function (x, t, b, c, d) { + return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; + }, + easeOutCirc: function (x, t, b, c, d) { + return c * Math.sqrt(1 - (t=t/d-1)*t) + b; + }, + easeInOutCirc: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; + return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; + }, + easeInElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + }, + easeOutElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; + }, + easeInOutElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; + }, + easeInBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c*(t/=d)*t*((s+1)*t - s) + b; + }, + easeOutBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; + }, + easeInOutBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; + return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; + }, + easeInBounce: function (x, t, b, c, d) { + return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b; + }, + easeOutBounce: function (x, t, b, c, d) { + if ((t/=d) < (1/2.75)) { + return c*(7.5625*t*t) + b; + } else if (t < (2/2.75)) { + return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; + } else if (t < (2.5/2.75)) { + return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; + } else { + return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; + } + }, + easeInOutBounce: function (x, t, b, c, d) { + if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; + return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; + } +}); + +/* + * + * TERMS OF USE - EASING EQUATIONS + * + * Open source under the BSD License. + * + * Copyright 2001 Robert Penner + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +})(jQuery); diff --git a/resources/jquery.effects/jquery.effects.drop.js b/resources/jquery.effects/jquery.effects.drop.js new file mode 100644 index 00000000..0059c033 --- /dev/null +++ b/resources/jquery.effects/jquery.effects.drop.js @@ -0,0 +1,50 @@ +/* + * jQuery UI Effects Drop 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Drop + * + * Depends: + * jquery.effects.core.js + */ +(function($) { + +$.effects.drop = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','left','opacity']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode + var direction = o.options.direction || 'left'; // Default Direction + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + $.effects.createWrapper(el); // Create Wrapper + var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; + var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; + var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 2 : el.outerWidth({margin:true}) / 2); + if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift + + // Animation + var animation = {opacity: mode == 'show' ? 1 : 0}; + animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance; + + // Animate + el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); diff --git a/resources/jquery.effects/jquery.effects.explode.js b/resources/jquery.effects/jquery.effects.explode.js new file mode 100644 index 00000000..85ba1dcc --- /dev/null +++ b/resources/jquery.effects/jquery.effects.explode.js @@ -0,0 +1,79 @@ +/* + * jQuery UI Effects Explode 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Explode + * + * Depends: + * jquery.effects.core.js + */ +(function($) { + +$.effects.explode = function(o) { + + return this.queue(function() { + + var rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; + var cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; + + o.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode; + var el = $(this).show().css('visibility', 'hidden'); + var offset = el.offset(); + + //Substract the margins - not fixing the problem yet. + offset.top -= parseInt(el.css("marginTop"),10) || 0; + offset.left -= parseInt(el.css("marginLeft"),10) || 0; + + var width = el.outerWidth(true); + var height = el.outerHeight(true); + + for(var i=0;i
    ') + .css({ + position: 'absolute', + visibility: 'visible', + left: -j*(width/cells), + top: -i*(height/rows) + }) + .parent() + .addClass('ui-effects-explode') + .css({ + position: 'absolute', + overflow: 'hidden', + width: width/cells, + height: height/rows, + left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? (j-Math.floor(cells/2))*(width/cells) : 0), + top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? (i-Math.floor(rows/2))*(height/rows) : 0), + opacity: o.options.mode == 'show' ? 0 : 1 + }).animate({ + left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? 0 : (j-Math.floor(cells/2))*(width/cells)), + top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? 0 : (i-Math.floor(rows/2))*(height/rows)), + opacity: o.options.mode == 'show' ? 1 : 0 + }, o.duration || 500); + } + } + + // Set a timeout, to call the callback approx. when the other animations have finished + setTimeout(function() { + + o.options.mode == 'show' ? el.css({ visibility: 'visible' }) : el.css({ visibility: 'visible' }).hide(); + if(o.callback) o.callback.apply(el[0]); // Callback + el.dequeue(); + + $('div.ui-effects-explode').remove(); + + }, o.duration || 500); + + + }); + +}; + +})(jQuery); diff --git a/resources/jquery.effects/jquery.effects.fold.js b/resources/jquery.effects/jquery.effects.fold.js new file mode 100644 index 00000000..946831bf --- /dev/null +++ b/resources/jquery.effects/jquery.effects.fold.js @@ -0,0 +1,56 @@ +/* + * jQuery UI Effects Fold 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Fold + * + * Depends: + * jquery.effects.core.js + */ +(function($) { + +$.effects.fold = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','left']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode + var size = o.options.size || 15; // Default fold size + var horizFirst = !(!o.options.horizFirst); // Ensure a boolean value + var duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2; + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper + var widthFirst = ((mode == 'show') != horizFirst); + var ref = widthFirst ? ['width', 'height'] : ['height', 'width']; + var distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()]; + var percent = /([0-9]+)%/.exec(size); + if(percent) size = parseInt(percent[1],10) / 100 * distance[mode == 'hide' ? 0 : 1]; + if(mode == 'show') wrapper.css(horizFirst ? {height: 0, width: size} : {height: size, width: 0}); // Shift + + // Animation + var animation1 = {}, animation2 = {}; + animation1[ref[0]] = mode == 'show' ? distance[0] : size; + animation2[ref[1]] = mode == 'show' ? distance[1] : 0; + + // Animate + wrapper.animate(animation1, duration, o.options.easing) + .animate(animation2, duration, o.options.easing, function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(el[0], arguments); // Callback + el.dequeue(); + }); + + }); + +}; + +})(jQuery); diff --git a/resources/jquery.effects/jquery.effects.highlight.js b/resources/jquery.effects/jquery.effects.highlight.js new file mode 100644 index 00000000..5e03e9ec --- /dev/null +++ b/resources/jquery.effects/jquery.effects.highlight.js @@ -0,0 +1,50 @@ +/* + * jQuery UI Effects Highlight 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Highlight + * + * Depends: + * jquery.effects.core.js + */ +(function($) { + +$.effects.highlight = function(o) { + return this.queue(function() { + var elem = $(this), + props = ['backgroundImage', 'backgroundColor', 'opacity'], + mode = $.effects.setMode(elem, o.options.mode || 'show'), + animation = { + backgroundColor: elem.css('backgroundColor') + }; + + if (mode == 'hide') { + animation.opacity = 0; + } + + $.effects.save(elem, props); + elem + .show() + .css({ + backgroundImage: 'none', + backgroundColor: o.options.color || '#ffff99' + }) + .animate(animation, { + queue: false, + duration: o.duration, + easing: o.options.easing, + complete: function() { + (mode == 'hide' && elem.hide()); + $.effects.restore(elem, props); + (mode == 'show' && !$.support.opacity && this.style.removeAttribute('filter')); + (o.callback && o.callback.apply(this, arguments)); + elem.dequeue(); + } + }); + }); +}; + +})(jQuery); diff --git a/resources/jquery.effects/jquery.effects.pulsate.js b/resources/jquery.effects/jquery.effects.pulsate.js new file mode 100644 index 00000000..11c5af13 --- /dev/null +++ b/resources/jquery.effects/jquery.effects.pulsate.js @@ -0,0 +1,51 @@ +/* + * jQuery UI Effects Pulsate 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Pulsate + * + * Depends: + * jquery.effects.core.js + */ +(function($) { + +$.effects.pulsate = function(o) { + return this.queue(function() { + var elem = $(this), + mode = $.effects.setMode(elem, o.options.mode || 'show'); + times = ((o.options.times || 5) * 2) - 1; + duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2, + isVisible = elem.is(':visible'), + animateTo = 0; + + if (!isVisible) { + elem.css('opacity', 0).show(); + animateTo = 1; + } + + if ((mode == 'hide' && isVisible) || (mode == 'show' && !isVisible)) { + times--; + } + + for (var i = 0; i < times; i++) { + elem.animate({ opacity: animateTo }, duration, o.options.easing); + animateTo = (animateTo + 1) % 2; + } + + elem.animate({ opacity: animateTo }, duration, o.options.easing, function() { + if (animateTo == 0) { + elem.hide(); + } + (o.callback && o.callback.apply(this, arguments)); + }); + + elem + .queue('fx', function() { elem.dequeue(); }) + .dequeue(); + }); +}; + +})(jQuery); diff --git a/resources/jquery.effects/jquery.effects.scale.js b/resources/jquery.effects/jquery.effects.scale.js new file mode 100644 index 00000000..1efb781a --- /dev/null +++ b/resources/jquery.effects/jquery.effects.scale.js @@ -0,0 +1,178 @@ +/* + * jQuery UI Effects Scale 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Scale + * + * Depends: + * jquery.effects.core.js + */ +(function($) { + +$.effects.puff = function(o) { + return this.queue(function() { + var elem = $(this), + mode = $.effects.setMode(elem, o.options.mode || 'hide'), + percent = parseInt(o.options.percent, 10) || 150, + factor = percent / 100, + original = { height: elem.height(), width: elem.width() }; + + $.extend(o.options, { + fade: true, + mode: mode, + percent: mode == 'hide' ? percent : 100, + from: mode == 'hide' + ? original + : { + height: original.height * factor, + width: original.width * factor + } + }); + + elem.effect('scale', o.options, o.duration, o.callback); + elem.dequeue(); + }); +}; + +$.effects.scale = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this); + + // Set options + var options = $.extend(true, {}, o.options); + var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode + var percent = parseInt(o.options.percent,10) || (parseInt(o.options.percent,10) == 0 ? 0 : (mode == 'hide' ? 0 : 100)); // Set default scaling percent + var direction = o.options.direction || 'both'; // Set default axis + var origin = o.options.origin; // The origin of the scaling + if (mode != 'effect') { // Set default origin and restore for show/hide + options.origin = origin || ['middle','center']; + options.restore = true; + } + var original = {height: el.height(), width: el.width()}; // Save original + el.from = o.options.from || (mode == 'show' ? {height: 0, width: 0} : original); // Default from state + + // Adjust + var factor = { // Set scaling factor + y: direction != 'horizontal' ? (percent / 100) : 1, + x: direction != 'vertical' ? (percent / 100) : 1 + }; + el.to = {height: original.height * factor.y, width: original.width * factor.x}; // Set to state + + if (o.options.fade) { // Fade option to support puff + if (mode == 'show') {el.from.opacity = 0; el.to.opacity = 1;}; + if (mode == 'hide') {el.from.opacity = 1; el.to.opacity = 0;}; + }; + + // Animation + options.from = el.from; options.to = el.to; options.mode = mode; + + // Animate + el.effect('size', options, o.duration, o.callback); + el.dequeue(); + }); + +}; + +$.effects.size = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','left','width','height','overflow','opacity']; + var props1 = ['position','top','left','overflow','opacity']; // Always restore + var props2 = ['width','height','overflow']; // Copy for children + var cProps = ['fontSize']; + var vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom']; + var hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode + var restore = o.options.restore || false; // Default restore + var scale = o.options.scale || 'both'; // Default scale mode + var origin = o.options.origin; // The origin of the sizing + var original = {height: el.height(), width: el.width()}; // Save original + el.from = o.options.from || original; // Default from state + el.to = o.options.to || original; // Default to state + // Adjust + if (origin) { // Calculate baseline shifts + var baseline = $.effects.getBaseline(origin, original); + el.from.top = (original.height - el.from.height) * baseline.y; + el.from.left = (original.width - el.from.width) * baseline.x; + el.to.top = (original.height - el.to.height) * baseline.y; + el.to.left = (original.width - el.to.width) * baseline.x; + }; + var factor = { // Set scaling factor + from: {y: el.from.height / original.height, x: el.from.width / original.width}, + to: {y: el.to.height / original.height, x: el.to.width / original.width} + }; + if (scale == 'box' || scale == 'both') { // Scale the css box + if (factor.from.y != factor.to.y) { // Vertical props scaling + props = props.concat(vProps); + el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from); + el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to); + }; + if (factor.from.x != factor.to.x) { // Horizontal props scaling + props = props.concat(hProps); + el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from); + el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to); + }; + }; + if (scale == 'content' || scale == 'both') { // Scale the content + if (factor.from.y != factor.to.y) { // Vertical props scaling + props = props.concat(cProps); + el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from); + el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to); + }; + }; + $.effects.save(el, restore ? props : props1); el.show(); // Save & Show + $.effects.createWrapper(el); // Create Wrapper + el.css('overflow','hidden').css(el.from); // Shift + + // Animate + if (scale == 'content' || scale == 'both') { // Scale the children + vProps = vProps.concat(['marginTop','marginBottom']).concat(cProps); // Add margins/font-size + hProps = hProps.concat(['marginLeft','marginRight']); // Add margins + props2 = props.concat(vProps).concat(hProps); // Concat + el.find("*[width]").each(function(){ + child = $(this); + if (restore) $.effects.save(child, props2); + var c_original = {height: child.height(), width: child.width()}; // Save original + child.from = {height: c_original.height * factor.from.y, width: c_original.width * factor.from.x}; + child.to = {height: c_original.height * factor.to.y, width: c_original.width * factor.to.x}; + if (factor.from.y != factor.to.y) { // Vertical props scaling + child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from); + child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to); + }; + if (factor.from.x != factor.to.x) { // Horizontal props scaling + child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from); + child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to); + }; + child.css(child.from); // Shift children + child.animate(child.to, o.duration, o.options.easing, function(){ + if (restore) $.effects.restore(child, props2); // Restore children + }); // Animate children + }); + }; + + // Animate + el.animate(el.to, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if (el.to.opacity === 0) { + el.css('opacity', el.from.opacity); + } + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, restore ? props : props1); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); diff --git a/resources/jquery.effects/jquery.effects.shake.js b/resources/jquery.effects/jquery.effects.shake.js new file mode 100644 index 00000000..050894b4 --- /dev/null +++ b/resources/jquery.effects/jquery.effects.shake.js @@ -0,0 +1,57 @@ +/* + * jQuery UI Effects Shake 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Shake + * + * Depends: + * jquery.effects.core.js + */ +(function($) { + +$.effects.shake = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','left']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode + var direction = o.options.direction || 'left'; // Default direction + var distance = o.options.distance || 20; // Default distance + var times = o.options.times || 3; // Default # of times + var speed = o.duration || o.options.duration || 140; // Default speed per shake + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + $.effects.createWrapper(el); // Create Wrapper + var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; + var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; + + // Animation + var animation = {}, animation1 = {}, animation2 = {}; + animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance; + animation1[ref] = (motion == 'pos' ? '+=' : '-=') + distance * 2; + animation2[ref] = (motion == 'pos' ? '-=' : '+=') + distance * 2; + + // Animate + el.animate(animation, speed, o.options.easing); + for (var i = 1; i < times; i++) { // Shakes + el.animate(animation1, speed, o.options.easing).animate(animation2, speed, o.options.easing); + }; + el.animate(animation1, speed, o.options.easing). + animate(animation, speed / 2, o.options.easing, function(){ // Last shake + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + }); + el.queue('fx', function() { el.dequeue(); }); + el.dequeue(); + }); + +}; + +})(jQuery); diff --git a/resources/jquery.effects/jquery.effects.slide.js b/resources/jquery.effects/jquery.effects.slide.js new file mode 100644 index 00000000..d0719a7f --- /dev/null +++ b/resources/jquery.effects/jquery.effects.slide.js @@ -0,0 +1,50 @@ +/* + * jQuery UI Effects Slide 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Slide + * + * Depends: + * jquery.effects.core.js + */ +(function($) { + +$.effects.slide = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','left']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode + var direction = o.options.direction || 'left'; // Default Direction + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper + var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; + var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; + var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) : el.outerWidth({margin:true})); + if (mode == 'show') el.css(ref, motion == 'pos' ? -distance : distance); // Shift + + // Animation + var animation = {}; + animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance; + + // Animate + el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); diff --git a/resources/jquery.effects/jquery.effects.transfer.js b/resources/jquery.effects/jquery.effects.transfer.js new file mode 100644 index 00000000..4c212ca0 --- /dev/null +++ b/resources/jquery.effects/jquery.effects.transfer.js @@ -0,0 +1,45 @@ +/* + * jQuery UI Effects Transfer 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Transfer + * + * Depends: + * jquery.effects.core.js + */ +(function($) { + +$.effects.transfer = function(o) { + return this.queue(function() { + var elem = $(this), + target = $(o.options.to), + endPosition = target.offset(), + animation = { + top: endPosition.top, + left: endPosition.left, + height: target.innerHeight(), + width: target.innerWidth() + }, + startPosition = elem.offset(), + transfer = $('
    ') + .appendTo(document.body) + .addClass(o.options.className) + .css({ + top: startPosition.top, + left: startPosition.left, + height: elem.innerHeight(), + width: elem.innerWidth(), + position: 'absolute' + }) + .animate(animation, o.duration, o.options.easing, function() { + transfer.remove(); + (o.callback && o.callback.apply(elem[0], arguments)); + elem.dequeue(); + }); + }); +}; + +})(jQuery); diff --git a/resources/jquery.tipsy/images/tipsy.png b/resources/jquery.tipsy/images/tipsy.png new file mode 100644 index 00000000..9a80e942 Binary files /dev/null and b/resources/jquery.tipsy/images/tipsy.png differ diff --git a/resources/jquery.tipsy/jquery.tipsy.css b/resources/jquery.tipsy/jquery.tipsy.css new file mode 100644 index 00000000..d79554d2 --- /dev/null +++ b/resources/jquery.tipsy/jquery.tipsy.css @@ -0,0 +1,75 @@ +.tipsy { + padding: 5px; + position: absolute; + z-index: 100000; +} +.tipsy-inner { + padding: 5px 8px 4px 8px; + /*background-color: #e8f2f8;*/ + background-color: #ffffff; + border: solid 1px #a7d7f9; + color: black; + max-width: 15em; + text-align: left; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + /* + -moz-box-shadow: 0px 2px 8px #cccccc; + -webkit-box-shadow: 0px 2px 8px #cccccc; + box-shadow: 0px 2px 8px #cccccc; + -ms-filter: "progid:DXImageTransform.Microsoft.DropShadow(OffX=0, OffY=2, Strength=6, Direction=90, Color='#cccccc')"; + filter: progid:DXImageTransform.Microsoft.DropShadow(OffX=0, OffY=2, Strength=6, Direction=90, Color='#cccccc'); + */ +} +.tipsy-arrow { + position: absolute; + /* @embed */ + background: url('images/tipsy.png') no-repeat top left; + width: 11px; + height: 6px; +} +.tipsy-n .tipsy-arrow { + top: 0px; + left: 50%; + margin-left: -5px; +} +.tipsy-nw .tipsy-arrow { + top: 1px; + left: 10px; +} +.tipsy-ne .tipsy-arrow { + top: 1px; + right: 10px; +} +.tipsy-s .tipsy-arrow { + bottom: 0px; + left: 50%; + margin-left: -5px; + background-position: bottom left; +} +.tipsy-sw .tipsy-arrow { + bottom: 0px; + left: 10px; + background-position: bottom left; +} +.tipsy-se .tipsy-arrow { + bottom: 0px; + right: 10px; + background-position: bottom left; +} +.tipsy-e .tipsy-arrow { + top: 50%; + margin-top: -5px; + right: 1px; + width: 5px; + height: 11px; + background-position: top right; +} +.tipsy-w .tipsy-arrow { + top: 50%; + margin-top: -5px; + left: 0px; + width: 6px; + height: 11px; +} \ No newline at end of file diff --git a/resources/jquery.tipsy/jquery.tipsy.js b/resources/jquery.tipsy/jquery.tipsy.js new file mode 100644 index 00000000..847a527b --- /dev/null +++ b/resources/jquery.tipsy/jquery.tipsy.js @@ -0,0 +1,207 @@ +// tipsy, facebook style tooltips for jquery +// version 1.0.0a +// (c) 2008-2010 jason frame [jason@onehackoranother.com] +// releated under the MIT license + +(function($) { + + function fixTitle($ele) { + if ($ele.attr('title') || typeof($ele.attr('original-title')) != 'string') { + $ele.attr('original-title', $ele.attr('title') || '').removeAttr('title'); + } + } + + function Tipsy(element, options) { + this.$element = $(element); + this.options = options; + this.enabled = true; + fixTitle(this.$element); + } + + Tipsy.prototype = { + show: function() { + var title = this.getTitle(); + if (title && this.enabled) { + var $tip = this.tip(); + + $tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title); + $tip[0].className = 'tipsy'; // reset classname in case of dynamic gravity + $tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).appendTo(document.body); + + var pos = $.extend({}, this.$element.offset(), { + width: this.$element[0].offsetWidth, + height: this.$element[0].offsetHeight + }); + + var actualWidth = $tip[0].offsetWidth, actualHeight = $tip[0].offsetHeight; + var gravity = (typeof this.options.gravity == 'function') + ? this.options.gravity.call(this.$element[0]) + : this.options.gravity; + + var tp; + switch (gravity.charAt(0)) { + case 'n': + tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}; + break; + case 's': + tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}; + break; + case 'e': + tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset}; + break; + case 'w': + tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset}; + break; + } + + if (gravity.length == 2) { + if (gravity.charAt(1) == 'w') { + if ( this.options.center ) { + tp.left = pos.left + pos.width / 2 - 15; + } else { + tp.left = pos.left; + } + } else { + if ( this.options.center ) { + tp.left = pos.left + pos.width / 2 - actualWidth + 15; + } else { + tp.left = pos.left + pos.width; + } + } + } + + $tip.css(tp).addClass('tipsy-' + gravity); + + if (this.options.fade) { + $tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity}, 100); + } else { + $tip.css({visibility: 'visible', opacity: this.options.opacity}); + } + } + }, + + hide: function() { + if (this.options.fade) { + this.tip().stop().fadeOut(100, function() { $(this).remove(); }); + } else { + this.tip().remove(); + } + }, + + getTitle: function() { + var title, $e = this.$element, o = this.options; + fixTitle($e); + var title, o = this.options; + if (typeof o.title == 'string') { + title = $e.attr(o.title == 'title' ? 'original-title' : o.title); + } else if (typeof o.title == 'function') { + title = o.title.call($e[0]); + } + title = ('' + title).replace(/(^\s*|\s*$)/, ""); + return title || o.fallback; + }, + + tip: function() { + if (!this.$tip) { + this.$tip = $('
    ').html('
    '); + } + return this.$tip; + }, + + validate: function() { + if (!this.$element[0].parentNode) { + this.hide(); + this.$element = null; + this.options = null; + } + }, + + enable: function() { this.enabled = true; }, + disable: function() { this.enabled = false; }, + toggleEnabled: function() { this.enabled = !this.enabled; } + }; + + $.fn.tipsy = function(options) { + + if (options === true) { + return this.data('tipsy'); + } else if (typeof options == 'string') { + return this.data('tipsy')[options](); + } + + options = $.extend({}, $.fn.tipsy.defaults, options); + + function get(ele) { + var tipsy = $.data(ele, 'tipsy'); + if (!tipsy) { + tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options)); + $.data(ele, 'tipsy', tipsy); + } + return tipsy; + } + + function enter() { + var tipsy = get(this); + tipsy.hoverState = 'in'; + if (options.delayIn == 0) { + tipsy.show(); + } else { + setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn); + } + }; + + function leave() { + var tipsy = get(this); + tipsy.hoverState = 'out'; + if (options.delayOut == 0) { + tipsy.hide(); + } else { + setTimeout(function() { if (tipsy.hoverState == 'out') tipsy.hide(); }, options.delayOut); + } + }; + + if (!options.live) this.each(function() { get(this); }); + + if (options.trigger != 'manual') { + var binder = options.live ? 'live' : 'bind', + eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus', + eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur'; + this[binder](eventIn, enter)[binder](eventOut, leave); + } + + return this; + + }; + + $.fn.tipsy.defaults = { + delayIn: 0, + delayOut: 0, + fade: true, + fallback: '', + gravity: 'n', + center: true, + html: false, + live: false, + offset: 0, + opacity: 1.0, + title: 'title', + trigger: 'hover' + }; + + // Overwrite this method to provide options on a per-element basis. + // For example, you could store the gravity in a 'tipsy-gravity' attribute: + // return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' }); + // (remember - do not modify 'options' in place!) + $.fn.tipsy.elementOptions = function(ele, options) { + return $.metadata ? $.extend({}, options, $(ele).metadata()) : options; + }; + + $.fn.tipsy.autoNS = function() { + return $(this).offset().top > ($(document).scrollTop() + $(window).height() / 2) ? 's' : 'n'; + }; + + $.fn.tipsy.autoWE = function() { + return $(this).offset().left > ($(document).scrollLeft() + $(window).width() / 2) ? 'e' : 'w'; + }; + +})(jQuery); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-af.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-af.js new file mode 100644 index 00000000..43fbf6cd --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-af.js @@ -0,0 +1,23 @@ +/* Afrikaans initialisation for the jQuery UI date picker plugin. */ +/* Written by Renier Pretorius. */ +jQuery(function($){ + $.datepicker.regional['af'] = { + closeText: 'Selekteer', + prevText: 'Vorige', + nextText: 'Volgende', + currentText: 'Vandag', + monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie', + 'Julie','Augustus','September','Oktober','November','Desember'], + monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', + 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'], + dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'], + dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'], + dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'], + weekHeader: 'Wk', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['af']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-ar.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-ar.js new file mode 100644 index 00000000..c799b48d --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-ar.js @@ -0,0 +1,24 @@ +/* Arabic Translation for jQuery UI date picker plugin. */ +/* Khaled Al Horani -- koko.dw@gmail.com */ +/* خالد الحوراني -- koko.dw@gmail.com */ +/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */ +jQuery(function($){ + $.datepicker.regional['ar'] = { + closeText: 'إغلاق', + prevText: '<السابق', + nextText: 'التالي>', + currentText: 'اليوم', + monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'آذار', 'حزيران', + 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'], + monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'], + dayNames: ['السبت', 'الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة'], + dayNamesShort: ['سبت', 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'], + dayNamesMin: ['سبت', 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'], + weekHeader: 'أسبوع', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: true, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ar']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-az.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-az.js new file mode 100644 index 00000000..b5434057 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-az.js @@ -0,0 +1,23 @@ +/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Jamil Najafov (necefov33@gmail.com). */ +jQuery(function($) { + $.datepicker.regional['az'] = { + closeText: 'Bağla', + prevText: '<Geri', + nextText: 'İrəli>', + currentText: 'Bugün', + monthNames: ['Yanvar','Fevral','Mart','Aprel','May','İyun', + 'İyul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'], + monthNamesShort: ['Yan','Fev','Mar','Apr','May','İyun', + 'İyul','Avq','Sen','Okt','Noy','Dek'], + dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'], + dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'], + dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'], + weekHeader: 'Hf', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['az']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-bg.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-bg.js new file mode 100644 index 00000000..b5113f78 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-bg.js @@ -0,0 +1,24 @@ +/* Bulgarian initialisation for the jQuery UI date picker plugin. */ +/* Written by Stoyan Kyosev (http://svest.org). */ +jQuery(function($){ + $.datepicker.regional['bg'] = { + closeText: 'затвори', + prevText: '<назад', + nextText: 'напред>', + nextBigText: '>>', + currentText: 'днес', + monthNames: ['Януари','Февруари','Март','Април','Май','Юни', + 'Юли','Август','Септември','Октомври','Ноември','Декември'], + monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни', + 'Юли','Авг','Сеп','Окт','Нов','Дек'], + dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'], + dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'], + dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'], + weekHeader: 'Wk', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['bg']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-bs.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-bs.js new file mode 100644 index 00000000..30ab826b --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-bs.js @@ -0,0 +1,23 @@ +/* Bosnian i18n for the jQuery UI date picker plugin. */ +/* Written by Kenan Konjo. */ +jQuery(function($){ + $.datepicker.regional['bs'] = { + closeText: 'Zatvori', + prevText: '<', + nextText: '>', + currentText: 'Danas', + monthNames: ['Januar','Februar','Mart','April','Maj','Juni', + 'Juli','August','Septembar','Oktobar','Novembar','Decembar'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', + 'Jul','Aug','Sep','Okt','Nov','Dec'], + dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], + dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], + dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], + weekHeader: 'Wk', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['bs']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-ca.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-ca.js new file mode 100644 index 00000000..b128e699 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-ca.js @@ -0,0 +1,23 @@ +/* Inicialització en català per a l'extenció 'calendar' per jQuery. */ +/* Writers: (joan.leon@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['ca'] = { + closeText: 'Tancar', + prevText: '<Ant', + nextText: 'Seg>', + currentText: 'Avui', + monthNames: ['Gener','Febrer','Març','Abril','Maig','Juny', + 'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'], + monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun', + 'Jul','Ago','Set','Oct','Nov','Des'], + dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'], + dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'], + dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'], + weekHeader: 'Sm', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ca']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-cs.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-cs.js new file mode 100644 index 00000000..c3c07ea6 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-cs.js @@ -0,0 +1,23 @@ +/* Czech initialisation for the jQuery UI date picker plugin. */ +/* Written by Tomas Muller (tomas@tomas-muller.net). */ +jQuery(function($){ + $.datepicker.regional['cs'] = { + closeText: 'Zavřít', + prevText: '<Dříve', + nextText: 'Později>', + currentText: 'Nyní', + monthNames: ['leden','únor','březen','duben','květen','červen', + 'červenec','srpen','září','říjen','listopad','prosinec'], + monthNamesShort: ['led','úno','bře','dub','kvě','čer', + 'čvc','srp','zář','říj','lis','pro'], + dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'], + dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'], + dayNamesMin: ['ne','po','út','st','čt','pá','so'], + weekHeader: 'Týd', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['cs']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-da.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-da.js new file mode 100644 index 00000000..4a99a583 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-da.js @@ -0,0 +1,23 @@ +/* Danish initialisation for the jQuery UI date picker plugin. */ +/* Written by Jan Christensen ( deletestuff@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['da'] = { + closeText: 'Luk', + prevText: '<Forrige', + nextText: 'Næste>', + currentText: 'Idag', + monthNames: ['Januar','Februar','Marts','April','Maj','Juni', + 'Juli','August','September','Oktober','November','December'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', + 'Jul','Aug','Sep','Okt','Nov','Dec'], + dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], + dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], + dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], + weekHeader: 'Uge', + dateFormat: 'dd-mm-yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['da']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-de.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-de.js new file mode 100644 index 00000000..ac2d516a --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-de.js @@ -0,0 +1,23 @@ +/* German initialisation for the jQuery UI date picker plugin. */ +/* Written by Milian Wolff (mail@milianw.de). */ +jQuery(function($){ + $.datepicker.regional['de'] = { + closeText: 'schließen', + prevText: '<zurück', + nextText: 'Vor>', + currentText: 'heute', + monthNames: ['Januar','Februar','März','April','Mai','Juni', + 'Juli','August','September','Oktober','November','Dezember'], + monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun', + 'Jul','Aug','Sep','Okt','Nov','Dez'], + dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'], + dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'], + dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'], + weekHeader: 'Wo', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['de']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-el.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-el.js new file mode 100644 index 00000000..9542769d --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-el.js @@ -0,0 +1,23 @@ +/* Greek (el) initialisation for the jQuery UI date picker plugin. */ +/* Written by Alex Cicovic (http://www.alexcicovic.com) */ +jQuery(function($){ + $.datepicker.regional['el'] = { + closeText: 'Κλείσιμο', + prevText: 'Προηγούμενος', + nextText: 'Επόμενος', + currentText: 'Τρέχων Μήνας', + monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος', + 'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'], + monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν', + 'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'], + dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'], + dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'], + dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'], + weekHeader: 'Εβδ', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['el']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-en-GB.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-en-GB.js new file mode 100644 index 00000000..aac7b619 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-en-GB.js @@ -0,0 +1,23 @@ +/* English/UK initialisation for the jQuery UI date picker plugin. */ +/* Written by Stuart. */ +jQuery(function($){ + $.datepicker.regional['en-GB'] = { + closeText: 'Done', + prevText: 'Prev', + nextText: 'Next', + currentText: 'Today', + monthNames: ['January','February','March','April','May','June', + 'July','August','September','October','November','December'], + monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], + weekHeader: 'Wk', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['en-GB']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-eo.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-eo.js new file mode 100644 index 00000000..ba571568 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-eo.js @@ -0,0 +1,23 @@ +/* Esperanto initialisation for the jQuery UI date picker plugin. */ +/* Written by Olivier M. (olivierweb@ifrance.com). */ +jQuery(function($){ + $.datepicker.regional['eo'] = { + closeText: 'Fermi', + prevText: '<Anta', + nextText: 'Sekv>', + currentText: 'Nuna', + monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio', + 'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', + 'Jul','Aŭg','Sep','Okt','Nov','Dec'], + dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'], + dayNamesShort: ['Dim','Lun','Mar','Mer','Ĵaŭ','Ven','Sab'], + dayNamesMin: ['Di','Lu','Ma','Me','Ĵa','Ve','Sa'], + weekHeader: 'Sb', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['eo']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-es.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-es.js new file mode 100644 index 00000000..a02133de --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-es.js @@ -0,0 +1,23 @@ +/* Inicialización en español para la extensión 'UI date picker' para jQuery. */ +/* Traducido por Vester (xvester@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['es'] = { + closeText: 'Cerrar', + prevText: '<Ant', + nextText: 'Sig>', + currentText: 'Hoy', + monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio', + 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'], + monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun', + 'Jul','Ago','Sep','Oct','Nov','Dic'], + dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'], + dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'], + dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'], + weekHeader: 'Sm', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['es']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-et.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-et.js new file mode 100644 index 00000000..f97311f3 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-et.js @@ -0,0 +1,23 @@ +/* Estonian initialisation for the jQuery UI date picker plugin. */ +/* Written by Mart Sõmermaa (mrts.pydev at gmail com). */ +jQuery(function($){ + $.datepicker.regional['et'] = { + closeText: 'Sulge', + prevText: 'Eelnev', + nextText: 'Järgnev', + currentText: 'Täna', + monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni', + 'Juuli','August','September','Oktoober','November','Detsember'], + monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni', + 'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'], + dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'], + dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'], + dayNamesMin: ['P','E','T','K','N','R','L'], + weekHeader: 'Sm', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['et']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-eu.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-eu.js new file mode 100644 index 00000000..9ba6ee22 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-eu.js @@ -0,0 +1,23 @@ +/* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */ +/* Karrikas-ek itzulia (karrikas@karrikas.com) */ +jQuery(function($){ + $.datepicker.regional['eu'] = { + closeText: 'Egina', + prevText: '<Aur', + nextText: 'Hur>', + currentText: 'Gaur', + monthNames: ['Urtarrila','Otsaila','Martxoa','Apirila','Maiatza','Ekaina', + 'Uztaila','Abuztua','Iraila','Urria','Azaroa','Abendua'], + monthNamesShort: ['Urt','Ots','Mar','Api','Mai','Eka', + 'Uzt','Abu','Ira','Urr','Aza','Abe'], + dayNames: ['Igandea','Astelehena','Asteartea','Asteazkena','Osteguna','Ostirala','Larunbata'], + dayNamesShort: ['Iga','Ast','Ast','Ast','Ost','Ost','Lar'], + dayNamesMin: ['Ig','As','As','As','Os','Os','La'], + weekHeader: 'Wk', + dateFormat: 'yy/mm/dd', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['eu']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-fa.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-fa.js new file mode 100644 index 00000000..adb3709f --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-fa.js @@ -0,0 +1,23 @@ +/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */ +/* Javad Mowlanezhad -- jmowla@gmail.com */ +/* Jalali calendar should supported soon! (Its implemented but I have to test it) */ +jQuery(function($) { + $.datepicker.regional['fa'] = { + closeText: 'بستن', + prevText: '<قبلي', + nextText: 'بعدي>', + currentText: 'امروز', + monthNames: ['فروردين','ارديبهشت','خرداد','تير','مرداد','شهريور', + 'مهر','آبان','آذر','دي','بهمن','اسفند'], + monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'], + dayNames: ['يکشنبه','دوشنبه','سه‌شنبه','چهارشنبه','پنجشنبه','جمعه','شنبه'], + dayNamesShort: ['ي','د','س','چ','پ','ج', 'ش'], + dayNamesMin: ['ي','د','س','چ','پ','ج', 'ش'], + weekHeader: 'هف', + dateFormat: 'yy/mm/dd', + firstDay: 6, + isRTL: true, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['fa']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-fi.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-fi.js new file mode 100644 index 00000000..e1f25fd8 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-fi.js @@ -0,0 +1,23 @@ +/* Finnish initialisation for the jQuery UI date picker plugin. */ +/* Written by Harri Kilpi� (harrikilpio@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['fi'] = { + closeText: 'Sulje', + prevText: '«Edellinen', + nextText: 'Seuraava»', + currentText: 'Tänään', + monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu', + 'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'], + monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä', + 'Heinä','Elo','Syys','Loka','Marras','Joulu'], + dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','Su'], + dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'], + dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'], + weekHeader: 'Vk', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['fi']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-fo.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-fo.js new file mode 100644 index 00000000..c1436221 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-fo.js @@ -0,0 +1,23 @@ +/* Faroese initialisation for the jQuery UI date picker plugin */ +/* Written by Sverri Mohr Olsen, sverrimo@gmail.com */ +jQuery(function($){ + $.datepicker.regional['fo'] = { + closeText: 'Lat aftur', + prevText: '<Fyrra', + nextText: 'Næsta>', + currentText: 'Í dag', + monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni', + 'Juli','August','September','Oktober','November','Desember'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', + 'Jul','Aug','Sep','Okt','Nov','Des'], + dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'], + dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'], + dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'], + weekHeader: 'Vk', + dateFormat: 'dd-mm-yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['fo']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-fr-CH.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-fr-CH.js new file mode 100644 index 00000000..38212d54 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-fr-CH.js @@ -0,0 +1,23 @@ +/* Swiss-French initialisation for the jQuery UI date picker plugin. */ +/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */ +jQuery(function($){ + $.datepicker.regional['fr-CH'] = { + closeText: 'Fermer', + prevText: '<Préc', + nextText: 'Suiv>', + currentText: 'Courant', + monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', + 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], + monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun', + 'Jul','Aoû','Sep','Oct','Nov','Déc'], + dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], + dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'], + dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'], + weekHeader: 'Sm', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['fr-CH']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-fr.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-fr.js new file mode 100644 index 00000000..134bda65 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-fr.js @@ -0,0 +1,23 @@ +/* French initialisation for the jQuery UI date picker plugin. */ +/* Written by Keith Wood (kbwood{at}iinet.com.au) and Stéphane Nahmani (sholby@sholby.net). */ +jQuery(function($){ + $.datepicker.regional['fr'] = { + closeText: 'Fermer', + prevText: '<Préc', + nextText: 'Suiv>', + currentText: 'Courant', + monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', + 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], + monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun', + 'Jul','Aoû','Sep','Oct','Nov','Déc'], + dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], + dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'], + dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'], + weekHeader: 'Sm', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['fr']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-he.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-he.js new file mode 100644 index 00000000..3b3dc387 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-he.js @@ -0,0 +1,23 @@ +/* Hebrew initialisation for the UI Datepicker extension. */ +/* Written by Amir Hardon (ahardon at gmail dot com). */ +jQuery(function($){ + $.datepicker.regional['he'] = { + closeText: 'סגור', + prevText: '<הקודם', + nextText: 'הבא>', + currentText: 'היום', + monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני', + 'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'], + monthNamesShort: ['1','2','3','4','5','6', + '7','8','9','10','11','12'], + dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'], + dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], + dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], + weekHeader: 'Wk', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: true, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['he']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-hr.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-hr.js new file mode 100644 index 00000000..0285c1aa --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-hr.js @@ -0,0 +1,23 @@ +/* Croatian i18n for the jQuery UI date picker plugin. */ +/* Written by Vjekoslav Nesek. */ +jQuery(function($){ + $.datepicker.regional['hr'] = { + closeText: 'Zatvori', + prevText: '<', + nextText: '>', + currentText: 'Danas', + monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipanj', + 'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'], + monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip', + 'Srp','Kol','Ruj','Lis','Stu','Pro'], + dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], + dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], + dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], + weekHeader: 'Tje', + dateFormat: 'dd.mm.yy.', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['hr']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-hu.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-hu.js new file mode 100644 index 00000000..249e7b0e --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-hu.js @@ -0,0 +1,23 @@ +/* Hungarian initialisation for the jQuery UI date picker plugin. */ +/* Written by Istvan Karaszi (jquery@spam.raszi.hu). */ +jQuery(function($){ + $.datepicker.regional['hu'] = { + closeText: 'bezárás', + prevText: '« vissza', + nextText: 'előre »', + currentText: 'ma', + monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június', + 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'], + monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún', + 'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'], + dayNames: ['Vasárnap', 'Hétfö', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'], + dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'], + dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'], + weekHeader: 'Hé', + dateFormat: 'yy-mm-dd', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['hu']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-hy.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-hy.js new file mode 100644 index 00000000..c6cc1946 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-hy.js @@ -0,0 +1,23 @@ +/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/ +jQuery(function($){ + $.datepicker.regional['hy'] = { + closeText: 'Փակել', + prevText: '<Նախ.', + nextText: 'Հաջ.>', + currentText: 'Այսօր', + monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս', + 'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'], + monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս', + 'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Դեկ'], + dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','հինգշաբթի','ուրբաթ','շաբաթ'], + dayNamesShort: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'], + dayNamesMin: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'], + weekHeader: 'ՇԲՏ', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['hy']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-id.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-id.js new file mode 100644 index 00000000..c626fbb7 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-id.js @@ -0,0 +1,23 @@ +/* Indonesian initialisation for the jQuery UI date picker plugin. */ +/* Written by Deden Fathurahman (dedenf@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['id'] = { + closeText: 'Tutup', + prevText: '<mundur', + nextText: 'maju>', + currentText: 'hari ini', + monthNames: ['Januari','Februari','Maret','April','Mei','Juni', + 'Juli','Agustus','September','Oktober','Nopember','Desember'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', + 'Jul','Agus','Sep','Okt','Nop','Des'], + dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'], + dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'], + dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'], + weekHeader: 'Mg', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['id']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-is.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-is.js new file mode 100644 index 00000000..c53235a4 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-is.js @@ -0,0 +1,23 @@ +/* Icelandic initialisation for the jQuery UI date picker plugin. */ +/* Written by Haukur H. Thorsson (haukur@eskill.is). */ +jQuery(function($){ + $.datepicker.regional['is'] = { + closeText: 'Loka', + prevText: '< Fyrri', + nextText: 'Næsti >', + currentText: 'Í dag', + monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní', + 'Júlí','Ágúst','September','Október','Nóvember','Desember'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún', + 'Júl','Ágú','Sep','Okt','Nóv','Des'], + dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'], + dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'], + dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'], + weekHeader: 'Vika', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['is']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-it.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-it.js new file mode 100644 index 00000000..59da2df6 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-it.js @@ -0,0 +1,23 @@ +/* Italian initialisation for the jQuery UI date picker plugin. */ +/* Written by Antonello Pasella (antonello.pasella@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['it'] = { + closeText: 'Chiudi', + prevText: '<Prec', + nextText: 'Succ>', + currentText: 'Oggi', + monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno', + 'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'], + monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu', + 'Lug','Ago','Set','Ott','Nov','Dic'], + dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'], + dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'], + dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'], + weekHeader: 'Sm', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['it']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-ja.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-ja.js new file mode 100644 index 00000000..79cd827c --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-ja.js @@ -0,0 +1,23 @@ +/* Japanese initialisation for the jQuery UI date picker plugin. */ +/* Written by Kentaro SATO (kentaro@ranvis.com). */ +jQuery(function($){ + $.datepicker.regional['ja'] = { + closeText: '閉じる', + prevText: '<前', + nextText: '次>', + currentText: '今日', + monthNames: ['1月','2月','3月','4月','5月','6月', + '7月','8月','9月','10月','11月','12月'], + monthNamesShort: ['1月','2月','3月','4月','5月','6月', + '7月','8月','9月','10月','11月','12月'], + dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'], + dayNamesShort: ['日','月','火','水','木','金','土'], + dayNamesMin: ['日','月','火','水','木','金','土'], + weekHeader: '週', + dateFormat: 'yy/mm/dd', + firstDay: 0, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: '年'}; + $.datepicker.setDefaults($.datepicker.regional['ja']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-ko.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-ko.js new file mode 100644 index 00000000..5b353165 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-ko.js @@ -0,0 +1,23 @@ +/* Korean initialisation for the jQuery calendar extension. */ +/* Written by DaeKwon Kang (ncrash.dk@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['ko'] = { + closeText: '닫기', + prevText: '이전달', + nextText: '다음달', + currentText: '오늘', + monthNames: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)', + '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'], + monthNamesShort: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)', + '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'], + dayNames: ['일','월','화','수','목','금','토'], + dayNamesShort: ['일','월','화','수','목','금','토'], + dayNamesMin: ['일','월','화','수','목','금','토'], + weekHeader: 'Wk', + dateFormat: 'yy-mm-dd', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: '년'}; + $.datepicker.setDefaults($.datepicker.regional['ko']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-lt.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-lt.js new file mode 100644 index 00000000..67d5119c --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-lt.js @@ -0,0 +1,23 @@ +/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* @author Arturas Paleicikas */ +jQuery(function($){ + $.datepicker.regional['lt'] = { + closeText: 'Uždaryti', + prevText: '<Atgal', + nextText: 'Pirmyn>', + currentText: 'Šiandien', + monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis', + 'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'], + monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir', + 'Lie','Rugp','Rugs','Spa','Lap','Gru'], + dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','šeštadienis'], + dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'], + dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Še'], + weekHeader: 'Wk', + dateFormat: 'yy-mm-dd', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['lt']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-lv.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-lv.js new file mode 100644 index 00000000..003934e7 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-lv.js @@ -0,0 +1,23 @@ +/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* @author Arturas Paleicikas */ +jQuery(function($){ + $.datepicker.regional['lv'] = { + closeText: 'Aizvērt', + prevText: 'Iepr', + nextText: 'Nāka', + currentText: 'Šodien', + monthNames: ['Janvāris','Februāris','Marts','Aprīlis','Maijs','Jūnijs', + 'Jūlijs','Augusts','Septembris','Oktobris','Novembris','Decembris'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jūn', + 'Jūl','Aug','Sep','Okt','Nov','Dec'], + dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'], + dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'], + dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'], + weekHeader: 'Nav', + dateFormat: 'dd-mm-yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['lv']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-ms.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-ms.js new file mode 100644 index 00000000..e953ac04 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-ms.js @@ -0,0 +1,23 @@ +/* Malaysian initialisation for the jQuery UI date picker plugin. */ +/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */ +jQuery(function($){ + $.datepicker.regional['ms'] = { + closeText: 'Tutup', + prevText: '<Sebelum', + nextText: 'Selepas>', + currentText: 'hari ini', + monthNames: ['Januari','Februari','Mac','April','Mei','Jun', + 'Julai','Ogos','September','Oktober','November','Disember'], + monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun', + 'Jul','Ogo','Sep','Okt','Nov','Dis'], + dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'], + dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'], + dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'], + weekHeader: 'Mg', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ms']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-nl.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-nl.js new file mode 100644 index 00000000..663d6bb2 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-nl.js @@ -0,0 +1,23 @@ +/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Mathias Bynens */ +jQuery(function($){ + $.datepicker.regional.nl = { + closeText: 'Sluiten', + prevText: '←', + nextText: '→', + currentText: 'Vandaag', + monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', + 'juli', 'augustus', 'september', 'oktober', 'november', 'december'], + monthNamesShort: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun', + 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'], + dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'], + dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'], + dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'], + weekHeader: 'Wk', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional.nl); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-no.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-no.js new file mode 100644 index 00000000..12b2356b --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-no.js @@ -0,0 +1,23 @@ +/* Norwegian initialisation for the jQuery UI date picker plugin. */ +/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['no'] = { + closeText: 'Lukk', + prevText: '«Forrige', + nextText: 'Neste»', + currentText: 'I dag', + monthNames: ['Januar','Februar','Mars','April','Mai','Juni', + 'Juli','August','September','Oktober','November','Desember'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jun', + 'Jul','Aug','Sep','Okt','Nov','Des'], + dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], + dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], + dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], + weekHeader: 'Uke', + dateFormat: 'yy-mm-dd', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['no']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-pl.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-pl.js new file mode 100644 index 00000000..61fa29cc --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-pl.js @@ -0,0 +1,23 @@ +/* Polish initialisation for the jQuery UI date picker plugin. */ +/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['pl'] = { + closeText: 'Zamknij', + prevText: '<Poprzedni', + nextText: 'Następny>', + currentText: 'Dziś', + monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec', + 'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'], + monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze', + 'Lip','Sie','Wrz','Pa','Lis','Gru'], + dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'], + dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'], + dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'], + weekHeader: 'Tydz', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['pl']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-pt-BR.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-pt-BR.js new file mode 100644 index 00000000..38818637 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-pt-BR.js @@ -0,0 +1,23 @@ +/* Brazilian initialisation for the jQuery UI date picker plugin. */ +/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['pt-BR'] = { + closeText: 'Fechar', + prevText: '<Anterior', + nextText: 'Próximo>', + currentText: 'Hoje', + monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', + 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], + monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', + 'Jul','Ago','Set','Out','Nov','Dez'], + dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sabado'], + dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sab'], + dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sab'], + weekHeader: 'Sm', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['pt-BR']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-ro.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-ro.js new file mode 100644 index 00000000..4fe95aea --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-ro.js @@ -0,0 +1,26 @@ +/* Romanian initialisation for the jQuery UI date picker plugin. + * + * Written by Edmond L. (ll_edmond@walla.com) + * and Ionut G. Stan (ionut.g.stan@gmail.com) + */ +jQuery(function($){ + $.datepicker.regional['ro'] = { + closeText: 'Închide', + prevText: '« Luna precedentă', + nextText: 'Luna următoare »', + currentText: 'Azi', + monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie', + 'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'], + monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun', + 'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'], + dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'], + dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'], + weekHeader: 'Săpt', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ro']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-ru.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-ru.js new file mode 100644 index 00000000..b8091f9e --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-ru.js @@ -0,0 +1,23 @@ +/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Andrew Stromnov (stromnov@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['ru'] = { + closeText: 'Закрыть', + prevText: '<Пред', + nextText: 'След>', + currentText: 'Сегодня', + monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь', + 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], + monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', + 'Июл','Авг','Сен','Окт','Ноя','Дек'], + dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'], + dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'], + dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'], + weekHeader: 'Не', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ru']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-sk.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-sk.js new file mode 100644 index 00000000..8a6771c1 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-sk.js @@ -0,0 +1,23 @@ +/* Slovak initialisation for the jQuery UI date picker plugin. */ +/* Written by Vojtech Rinik (vojto@hmm.sk). */ +jQuery(function($){ + $.datepicker.regional['sk'] = { + closeText: 'Zavrieť', + prevText: '<Predchádzajúci', + nextText: 'Nasledujúci>', + currentText: 'Dnes', + monthNames: ['Január','Február','Marec','Apríl','Máj','Jún', + 'Júl','August','September','Október','November','December'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún', + 'Júl','Aug','Sep','Okt','Nov','Dec'], + dayNames: ['Nedel\'a','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota'], + dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'], + dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'], + weekHeader: 'Ty', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['sk']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-sl.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-sl.js new file mode 100644 index 00000000..51655019 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-sl.js @@ -0,0 +1,24 @@ +/* Slovenian initialisation for the jQuery UI date picker plugin. */ +/* Written by Jaka Jancar (jaka@kubje.org). */ +/* c = č, s = š z = ž C = Č S = Š Z = Ž */ +jQuery(function($){ + $.datepicker.regional['sl'] = { + closeText: 'Zapri', + prevText: '<Prejšnji', + nextText: 'Naslednji>', + currentText: 'Trenutni', + monthNames: ['Januar','Februar','Marec','April','Maj','Junij', + 'Julij','Avgust','September','Oktober','November','December'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', + 'Jul','Avg','Sep','Okt','Nov','Dec'], + dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','Četrtek','Petek','Sobota'], + dayNamesShort: ['Ned','Pon','Tor','Sre','Čet','Pet','Sob'], + dayNamesMin: ['Ne','Po','To','Sr','Če','Pe','So'], + weekHeader: 'Teden', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['sl']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-sq.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-sq.js new file mode 100644 index 00000000..be84104c --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-sq.js @@ -0,0 +1,23 @@ +/* Albanian initialisation for the jQuery UI date picker plugin. */ +/* Written by Flakron Bytyqi (flakron@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['sq'] = { + closeText: 'mbylle', + prevText: '<mbrapa', + nextText: 'Përpara>', + currentText: 'sot', + monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor', + 'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'], + monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer', + 'Kor','Gus','Sht','Tet','Nën','Dhj'], + dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'], + dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'], + dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'], + weekHeader: 'Ja', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['sq']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-sr-SR.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-sr-SR.js new file mode 100644 index 00000000..8f8ea5e6 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-sr-SR.js @@ -0,0 +1,23 @@ +/* Serbian i18n for the jQuery UI date picker plugin. */ +/* Written by Dejan Dimić. */ +jQuery(function($){ + $.datepicker.regional['sr-SR'] = { + closeText: 'Zatvori', + prevText: '<', + nextText: '>', + currentText: 'Danas', + monthNames: ['Januar','Februar','Mart','April','Maj','Jun', + 'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', + 'Jul','Avg','Sep','Okt','Nov','Dec'], + dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'], + dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'], + dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], + weekHeader: 'Sed', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['sr-SR']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-sr.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-sr.js new file mode 100644 index 00000000..49c9b4a3 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-sr.js @@ -0,0 +1,23 @@ +/* Serbian i18n for the jQuery UI date picker plugin. */ +/* Written by Dejan Dimić. */ +jQuery(function($){ + $.datepicker.regional['sr'] = { + closeText: 'Затвори', + prevText: '<', + nextText: '>', + currentText: 'Данас', + monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун', + 'Јул','Август','Септембар','Октобар','Новембар','Децембар'], + monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун', + 'Јул','Авг','Сеп','Окт','Нов','Дец'], + dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'], + dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'], + dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'], + weekHeader: 'Сед', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['sr']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-sv.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-sv.js new file mode 100644 index 00000000..8236b62b --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-sv.js @@ -0,0 +1,23 @@ +/* Swedish initialisation for the jQuery UI date picker plugin. */ +/* Written by Anders Ekdahl ( anders@nomadiz.se). */ +jQuery(function($){ + $.datepicker.regional['sv'] = { + closeText: 'Stäng', + prevText: '«Förra', + nextText: 'Nästa»', + currentText: 'Idag', + monthNames: ['Januari','Februari','Mars','April','Maj','Juni', + 'Juli','Augusti','September','Oktober','November','December'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', + 'Jul','Aug','Sep','Okt','Nov','Dec'], + dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'], + dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'], + dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'], + weekHeader: 'Ve', + dateFormat: 'yy-mm-dd', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['sv']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-ta.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-ta.js new file mode 100644 index 00000000..91116d38 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-ta.js @@ -0,0 +1,23 @@ +/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by S A Sureshkumar (saskumar@live.com). */ +jQuery(function($){ + $.datepicker.regional['ta'] = { + closeText: 'மூடு', + prevText: 'முன்னையது', + nextText: 'அடுத்தது', + currentText: 'இன்று', + monthNames: ['தை','மாசி','பங்குனி','சித்திரை','வைகாசி','ஆனி', + 'ஆடி','ஆவணி','புரட்டாசி','ஐப்பசி','கார்த்திகை','மார்கழி'], + monthNamesShort: ['தை','மாசி','பங்','சித்','வைகா','ஆனி', + 'ஆடி','ஆவ','புர','ஐப்','கார்','மார்'], + dayNames: ['ஞாயிற்றுக்கிழமை','திங்கட்கிழமை','செவ்வாய்க்கிழமை','புதன்கிழமை','வியாழக்கிழமை','வெள்ளிக்கிழமை','சனிக்கிழமை'], + dayNamesShort: ['ஞாயிறு','திங்கள்','செவ்வாய்','புதன்','வியாழன்','வெள்ளி','சனி'], + dayNamesMin: ['ஞா','தி','செ','பு','வி','வெ','ச'], + weekHeader: 'Не', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ta']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-th.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-th.js new file mode 100644 index 00000000..978500ab --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-th.js @@ -0,0 +1,23 @@ +/* Thai initialisation for the jQuery UI date picker plugin. */ +/* Written by pipo (pipo@sixhead.com). */ +jQuery(function($){ + $.datepicker.regional['th'] = { + closeText: 'ปิด', + prevText: '« ย้อน', + nextText: 'ถัดไป »', + currentText: 'วันนี้', + monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน', + 'กรกฏาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'], + monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.', + 'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'], + dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'], + dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], + dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], + weekHeader: 'Wk', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['th']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-tr.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-tr.js new file mode 100644 index 00000000..dedfc7ff --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-tr.js @@ -0,0 +1,23 @@ +/* Turkish initialisation for the jQuery UI date picker plugin. */ +/* Written by Izzet Emre Erkan (kara@karalamalar.net). */ +jQuery(function($){ + $.datepicker.regional['tr'] = { + closeText: 'kapat', + prevText: '<geri', + nextText: 'ileri>', + currentText: 'bugün', + monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran', + 'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'], + monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz', + 'Tem','Ağu','Eyl','Eki','Kas','Ara'], + dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'], + dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], + dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], + weekHeader: 'Hf', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['tr']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-uk.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-uk.js new file mode 100644 index 00000000..112b40e7 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-uk.js @@ -0,0 +1,23 @@ +/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['uk'] = { + closeText: 'Закрити', + prevText: '<', + nextText: '>', + currentText: 'Сьогодні', + monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень', + 'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'], + monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер', + 'Лип','Сер','Вер','Жов','Лис','Гру'], + dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'], + dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'], + dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'], + weekHeader: 'Не', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['uk']); +}); \ No newline at end of file diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-vi.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-vi.js new file mode 100644 index 00000000..9813a59e --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-vi.js @@ -0,0 +1,23 @@ +/* Vietnamese initialisation for the jQuery UI date picker plugin. */ +/* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */ +jQuery(function($){ + $.datepicker.regional['vi'] = { + closeText: 'Đóng', + prevText: '<Trước', + nextText: 'Tiếp>', + currentText: 'Hôm nay', + monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu', + 'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'], + monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6', + 'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'], + dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'], + dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], + dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], + weekHeader: 'Tu', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['vi']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-zh-CN.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-zh-CN.js new file mode 100644 index 00000000..6c4883f5 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-zh-CN.js @@ -0,0 +1,23 @@ +/* Chinese initialisation for the jQuery UI date picker plugin. */ +/* Written by Cloudream (cloudream@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['zh-CN'] = { + closeText: '关闭', + prevText: '<上月', + nextText: '下月>', + currentText: '今天', + monthNames: ['一月','二月','三月','四月','五月','六月', + '七月','八月','九月','十月','十一月','十二月'], + monthNamesShort: ['一','二','三','四','五','六', + '七','八','九','十','十一','十二'], + dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], + dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], + dayNamesMin: ['日','一','二','三','四','五','六'], + weekHeader: '周', + dateFormat: 'yy-mm-dd', + firstDay: 1, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: '年'}; + $.datepicker.setDefaults($.datepicker.regional['zh-CN']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-zh-HK.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-zh-HK.js new file mode 100644 index 00000000..06c4c628 --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-zh-HK.js @@ -0,0 +1,23 @@ +/* Chinese initialisation for the jQuery UI date picker plugin. */ +/* Written by SCCY (samuelcychan@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['zh-HK'] = { + closeText: '關閉', + prevText: '<上月', + nextText: '下月>', + currentText: '今天', + monthNames: ['一月','二月','三月','四月','五月','六月', + '七月','八月','九月','十月','十一月','十二月'], + monthNamesShort: ['一','二','三','四','五','六', + '七','八','九','十','十一','十二'], + dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], + dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], + dayNamesMin: ['日','一','二','三','四','五','六'], + weekHeader: '周', + dateFormat: 'dd-mm-yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: '年'}; + $.datepicker.setDefaults($.datepicker.regional['zh-HK']); +}); diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-zh-TW.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-zh-TW.js new file mode 100644 index 00000000..d211573c --- /dev/null +++ b/resources/jquery.ui/i18n/jquery.ui.datepicker-zh-TW.js @@ -0,0 +1,23 @@ +/* Chinese initialisation for the jQuery UI date picker plugin. */ +/* Written by Ressol (ressol@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['zh-TW'] = { + closeText: '關閉', + prevText: '<上月', + nextText: '下月>', + currentText: '今天', + monthNames: ['一月','二月','三月','四月','五月','六月', + '七月','八月','九月','十月','十一月','十二月'], + monthNamesShort: ['一','二','三','四','五','六', + '七','八','九','十','十一','十二'], + dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], + dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], + dayNamesMin: ['日','一','二','三','四','五','六'], + weekHeader: '周', + dateFormat: 'yy/mm/dd', + firstDay: 1, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: '年'}; + $.datepicker.setDefaults($.datepicker.regional['zh-TW']); +}); diff --git a/resources/jquery.ui/jquery.ui.accordion.js b/resources/jquery.ui/jquery.ui.accordion.js new file mode 100644 index 00000000..7d926e09 --- /dev/null +++ b/resources/jquery.ui/jquery.ui.accordion.js @@ -0,0 +1,504 @@ +/* + * jQuery UI Accordion 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Accordion + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function($) { + +$.widget("ui.accordion", { + options: { + active: 0, + animated: 'slide', + autoHeight: true, + clearStyle: false, + collapsible: false, + event: "click", + fillSpace: false, + header: "> li > :first-child,> :not(li):even", + icons: { + header: "ui-icon-triangle-1-e", + headerSelected: "ui-icon-triangle-1-s" + }, + navigation: false, + navigationFilter: function() { + return this.href.toLowerCase() == location.href.toLowerCase(); + } + }, + _create: function() { + + var o = this.options, self = this; + this.running = 0; + + this.element.addClass("ui-accordion ui-widget ui-helper-reset"); + + // in lack of child-selectors in CSS we need to mark top-LIs in a UL-accordion for some IE-fix + this.element.children("li").addClass("ui-accordion-li-fix"); + + this.headers = this.element.find(o.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all") + .bind("mouseenter.accordion", function(){ $(this).addClass('ui-state-hover'); }) + .bind("mouseleave.accordion", function(){ $(this).removeClass('ui-state-hover'); }) + .bind("focus.accordion", function(){ $(this).addClass('ui-state-focus'); }) + .bind("blur.accordion", function(){ $(this).removeClass('ui-state-focus'); }); + + this.headers + .next() + .addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom"); + + if ( o.navigation ) { + var current = this.element.find("a").filter(o.navigationFilter); + if ( current.length ) { + var header = current.closest(".ui-accordion-header"); + if ( header.length ) { + // anchor within header + this.active = header; + } else { + // anchor within content + this.active = current.closest(".ui-accordion-content").prev(); + } + } + } + + this.active = this._findActive(this.active || o.active).toggleClass("ui-state-default").toggleClass("ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top"); + this.active.next().addClass('ui-accordion-content-active'); + + //Append icon elements + this._createIcons(); + + this.resize(); + + //ARIA + this.element.attr('role','tablist'); + + this.headers + .attr('role','tab') + .bind('keydown', function(event) { return self._keydown(event); }) + .next() + .attr('role','tabpanel'); + + this.headers + .not(this.active || "") + .attr('aria-expanded','false') + .attr("tabIndex", "-1") + .next() + .hide(); + + // make sure at least one header is in the tab order + if (!this.active.length) { + this.headers.eq(0).attr('tabIndex','0'); + } else { + this.active + .attr('aria-expanded','true') + .attr('tabIndex', '0'); + } + + // only need links in taborder for Safari + if (!$.browser.safari) + this.headers.find('a').attr('tabIndex','-1'); + + if (o.event) { + this.headers.bind((o.event) + ".accordion", function(event) { + self._clickHandler.call(self, event, this); + event.preventDefault(); + }); + } + + }, + + _createIcons: function() { + var o = this.options; + if (o.icons) { + $("").addClass("ui-icon " + o.icons.header).prependTo(this.headers); + this.active.find(".ui-icon").toggleClass(o.icons.header).toggleClass(o.icons.headerSelected); + this.element.addClass("ui-accordion-icons"); + } + }, + + _destroyIcons: function() { + this.headers.children(".ui-icon").remove(); + this.element.removeClass("ui-accordion-icons"); + }, + + destroy: function() { + var o = this.options; + + this.element + .removeClass("ui-accordion ui-widget ui-helper-reset") + .removeAttr("role") + .unbind('.accordion') + .removeData('accordion'); + + this.headers + .unbind(".accordion") + .removeClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-corner-top") + .removeAttr("role").removeAttr("aria-expanded").removeAttr("tabIndex"); + + this.headers.find("a").removeAttr("tabIndex"); + this._destroyIcons(); + var contents = this.headers.next().css("display", "").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active"); + if (o.autoHeight || o.fillHeight) { + contents.css("height", ""); + } + + return this; + }, + + _setOption: function(key, value) { + $.Widget.prototype._setOption.apply(this, arguments); + + if (key == "active") { + this.activate(value); + } + if (key == "icons") { + this._destroyIcons(); + if (value) { + this._createIcons(); + } + } + + }, + + _keydown: function(event) { + + var o = this.options, keyCode = $.ui.keyCode; + + if (o.disabled || event.altKey || event.ctrlKey) + return; + + var length = this.headers.length; + var currentIndex = this.headers.index(event.target); + var toFocus = false; + + switch(event.keyCode) { + case keyCode.RIGHT: + case keyCode.DOWN: + toFocus = this.headers[(currentIndex + 1) % length]; + break; + case keyCode.LEFT: + case keyCode.UP: + toFocus = this.headers[(currentIndex - 1 + length) % length]; + break; + case keyCode.SPACE: + case keyCode.ENTER: + this._clickHandler({ target: event.target }, event.target); + event.preventDefault(); + } + + if (toFocus) { + $(event.target).attr('tabIndex','-1'); + $(toFocus).attr('tabIndex','0'); + toFocus.focus(); + return false; + } + + return true; + + }, + + resize: function() { + + var o = this.options, maxHeight; + + if (o.fillSpace) { + + if($.browser.msie) { var defOverflow = this.element.parent().css('overflow'); this.element.parent().css('overflow', 'hidden'); } + maxHeight = this.element.parent().height(); + if($.browser.msie) { this.element.parent().css('overflow', defOverflow); } + + this.headers.each(function() { + maxHeight -= $(this).outerHeight(true); + }); + + this.headers.next().each(function() { + $(this).height(Math.max(0, maxHeight - $(this).innerHeight() + $(this).height())); + }).css('overflow', 'auto'); + + } else if ( o.autoHeight ) { + maxHeight = 0; + this.headers.next().each(function() { + maxHeight = Math.max(maxHeight, $(this).height()); + }).height(maxHeight); + } + + return this; + }, + + activate: function(index) { + // TODO this gets called on init, changing the option without an explicit call for that + this.options.active = index; + // call clickHandler with custom event + var active = this._findActive(index)[0]; + this._clickHandler({ target: active }, active); + + return this; + }, + + _findActive: function(selector) { + return selector + ? typeof selector == "number" + ? this.headers.filter(":eq(" + selector + ")") + : this.headers.not(this.headers.not(selector)) + : selector === false + ? $([]) + : this.headers.filter(":eq(0)"); + }, + + // TODO isn't event.target enough? why the seperate target argument? + _clickHandler: function(event, target) { + + var o = this.options; + if (o.disabled) + return; + + // called only when using activate(false) to close all parts programmatically + if (!event.target) { + if (!o.collapsible) + return; + this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all") + .find(".ui-icon").removeClass(o.icons.headerSelected).addClass(o.icons.header); + this.active.next().addClass('ui-accordion-content-active'); + var toHide = this.active.next(), + data = { + options: o, + newHeader: $([]), + oldHeader: o.active, + newContent: $([]), + oldContent: toHide + }, + toShow = (this.active = $([])); + this._toggle(toShow, toHide, data); + return; + } + + // get the click target + var clicked = $(event.currentTarget || target); + var clickedIsActive = clicked[0] == this.active[0]; + + // TODO the option is changed, is that correct? + // TODO if it is correct, shouldn't that happen after determining that the click is valid? + o.active = o.collapsible && clickedIsActive ? false : $('.ui-accordion-header', this.element).index(clicked); + + // if animations are still active, or the active header is the target, ignore click + if (this.running || (!o.collapsible && clickedIsActive)) { + return; + } + + // switch classes + this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all") + .find(".ui-icon").removeClass(o.icons.headerSelected).addClass(o.icons.header); + if (!clickedIsActive) { + clicked.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top") + .find(".ui-icon").removeClass(o.icons.header).addClass(o.icons.headerSelected); + clicked.next().addClass('ui-accordion-content-active'); + } + + // find elements to show and hide + var toShow = clicked.next(), + toHide = this.active.next(), + data = { + options: o, + newHeader: clickedIsActive && o.collapsible ? $([]) : clicked, + oldHeader: this.active, + newContent: clickedIsActive && o.collapsible ? $([]) : toShow, + oldContent: toHide + }, + down = this.headers.index( this.active[0] ) > this.headers.index( clicked[0] ); + + this.active = clickedIsActive ? $([]) : clicked; + this._toggle(toShow, toHide, data, clickedIsActive, down); + + return; + + }, + + _toggle: function(toShow, toHide, data, clickedIsActive, down) { + + var o = this.options, self = this; + + this.toShow = toShow; + this.toHide = toHide; + this.data = data; + + var complete = function() { if(!self) return; return self._completed.apply(self, arguments); }; + + // trigger changestart event + this._trigger("changestart", null, this.data); + + // count elements to animate + this.running = toHide.size() === 0 ? toShow.size() : toHide.size(); + + if (o.animated) { + + var animOptions = {}; + + if ( o.collapsible && clickedIsActive ) { + animOptions = { + toShow: $([]), + toHide: toHide, + complete: complete, + down: down, + autoHeight: o.autoHeight || o.fillSpace + }; + } else { + animOptions = { + toShow: toShow, + toHide: toHide, + complete: complete, + down: down, + autoHeight: o.autoHeight || o.fillSpace + }; + } + + if (!o.proxied) { + o.proxied = o.animated; + } + + if (!o.proxiedDuration) { + o.proxiedDuration = o.duration; + } + + o.animated = $.isFunction(o.proxied) ? + o.proxied(animOptions) : o.proxied; + + o.duration = $.isFunction(o.proxiedDuration) ? + o.proxiedDuration(animOptions) : o.proxiedDuration; + + var animations = $.ui.accordion.animations, + duration = o.duration, + easing = o.animated; + + if (easing && !animations[easing] && !$.easing[easing]) { + easing = 'slide'; + } + if (!animations[easing]) { + animations[easing] = function(options) { + this.slide(options, { + easing: easing, + duration: duration || 700 + }); + }; + } + + animations[easing](animOptions); + + } else { + + if (o.collapsible && clickedIsActive) { + toShow.toggle(); + } else { + toHide.hide(); + toShow.show(); + } + + complete(true); + + } + + // TODO assert that the blur and focus triggers are really necessary, remove otherwise + toHide.prev().attr('aria-expanded','false').attr("tabIndex", "-1").blur(); + toShow.prev().attr('aria-expanded','true').attr("tabIndex", "0").focus(); + + }, + + _completed: function(cancel) { + + var o = this.options; + + this.running = cancel ? 0 : --this.running; + if (this.running) return; + + if (o.clearStyle) { + this.toShow.add(this.toHide).css({ + height: "", + overflow: "" + }); + } + + // other classes are removed before the animation; this one needs to stay until completed + this.toHide.removeClass("ui-accordion-content-active"); + + this._trigger('change', null, this.data); + } + +}); + + +$.extend($.ui.accordion, { + version: "1.8.2", + animations: { + slide: function(options, additions) { + options = $.extend({ + easing: "swing", + duration: 300 + }, options, additions); + if ( !options.toHide.size() ) { + options.toShow.animate({height: "show"}, options); + return; + } + if ( !options.toShow.size() ) { + options.toHide.animate({height: "hide"}, options); + return; + } + var overflow = options.toShow.css('overflow'), + percentDone = 0, + showProps = {}, + hideProps = {}, + fxAttrs = [ "height", "paddingTop", "paddingBottom" ], + originalWidth; + // fix width before calculating height of hidden element + var s = options.toShow; + originalWidth = s[0].style.width; + s.width( parseInt(s.parent().width(),10) - parseInt(s.css("paddingLeft"),10) - parseInt(s.css("paddingRight"),10) - (parseInt(s.css("borderLeftWidth"),10) || 0) - (parseInt(s.css("borderRightWidth"),10) || 0) ); + + $.each(fxAttrs, function(i, prop) { + hideProps[prop] = 'hide'; + + var parts = ('' + $.css(options.toShow[0], prop)).match(/^([\d+-.]+)(.*)$/); + showProps[prop] = { + value: parts[1], + unit: parts[2] || 'px' + }; + }); + options.toShow.css({ height: 0, overflow: 'hidden' }).show(); + options.toHide.filter(":hidden").each(options.complete).end().filter(":visible").animate(hideProps,{ + step: function(now, settings) { + // only calculate the percent when animating height + // IE gets very inconsistent results when animating elements + // with small values, which is common for padding + if (settings.prop == 'height') { + percentDone = ( settings.end - settings.start === 0 ) ? 0 : + (settings.now - settings.start) / (settings.end - settings.start); + } + + options.toShow[0].style[settings.prop] = + (percentDone * showProps[settings.prop].value) + showProps[settings.prop].unit; + }, + duration: options.duration, + easing: options.easing, + complete: function() { + if ( !options.autoHeight ) { + options.toShow.css("height", ""); + } + options.toShow.css("width", originalWidth); + options.toShow.css({overflow: overflow}); + options.complete(); + } + }); + }, + bounceslide: function(options) { + this.slide(options, { + easing: options.down ? "easeOutBounce" : "swing", + duration: options.down ? 1000 : 200 + }); + } + } +}); + +})(jQuery); diff --git a/resources/jquery.ui/jquery.ui.autocomplete.js b/resources/jquery.ui/jquery.ui.autocomplete.js new file mode 100644 index 00000000..9a12a6b0 --- /dev/null +++ b/resources/jquery.ui/jquery.ui.autocomplete.js @@ -0,0 +1,511 @@ +/* + * jQuery UI Autocomplete 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Autocomplete + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.position.js + */ +(function( $ ) { + +$.widget( "ui.autocomplete", { + options: { + minLength: 1, + delay: 300 + }, + _create: function() { + var self = this, + doc = this.element[ 0 ].ownerDocument; + this.element + .addClass( "ui-autocomplete-input" ) + .attr( "autocomplete", "off" ) + // TODO verify these actually work as intended + .attr({ + role: "textbox", + "aria-autocomplete": "list", + "aria-haspopup": "true" + }) + .bind( "keydown.autocomplete", function( event ) { + var keyCode = $.ui.keyCode; + switch( event.keyCode ) { + case keyCode.PAGE_UP: + self._move( "previousPage", event ); + break; + case keyCode.PAGE_DOWN: + self._move( "nextPage", event ); + break; + case keyCode.UP: + self._move( "previous", event ); + // prevent moving cursor to beginning of text field in some browsers + event.preventDefault(); + break; + case keyCode.DOWN: + self._move( "next", event ); + // prevent moving cursor to end of text field in some browsers + event.preventDefault(); + break; + case keyCode.ENTER: + case keyCode.NUMPAD_ENTER: + // when menu is open or has focus + if ( self.menu.active ) { + event.preventDefault(); + } + //passthrough - ENTER and TAB both select the current element + case keyCode.TAB: + if ( !self.menu.active ) { + return; + } + self.menu.select( event ); + break; + case keyCode.ESCAPE: + self.element.val( self.term ); + self.close( event ); + break; + case keyCode.LEFT: + case keyCode.RIGHT: + case keyCode.SHIFT: + case keyCode.CONTROL: + case keyCode.ALT: + case keyCode.COMMAND: + case keyCode.COMMAND_RIGHT: + case keyCode.INSERT: + case keyCode.CAPS_LOCK: + case keyCode.END: + case keyCode.HOME: + // ignore metakeys (shift, ctrl, alt) + break; + default: + // keypress is triggered before the input value is changed + clearTimeout( self.searching ); + self.searching = setTimeout(function() { + self.search( null, event ); + }, self.options.delay ); + break; + } + }) + .bind( "focus.autocomplete", function() { + self.selectedItem = null; + self.previous = self.element.val(); + }) + .bind( "blur.autocomplete", function( event ) { + clearTimeout( self.searching ); + // clicks on the menu (or a button to trigger a search) will cause a blur event + self.closing = setTimeout(function() { + self.close( event ); + self._change( event ); + }, 150 ); + }); + this._initSource(); + this.response = function() { + return self._response.apply( self, arguments ); + }; + this.menu = $( "
      " ) + .addClass( "ui-autocomplete" ) + .appendTo( "body", doc ) + // prevent the close-on-blur in case of a "slow" click on the menu (long mousedown) + .mousedown(function() { + // use another timeout to make sure the blur-event-handler on the input was already triggered + setTimeout(function() { + clearTimeout( self.closing ); + }, 13); + }) + .menu({ + focus: function( event, ui ) { + var item = ui.item.data( "item.autocomplete" ); + if ( false !== self._trigger( "focus", null, { item: item } ) ) { + // use value to match what will end up in the input, if it was a key event + if ( /^key/.test(event.originalEvent.type) ) { + self.element.val( item.value ); + } + } + }, + selected: function( event, ui ) { + var item = ui.item.data( "item.autocomplete" ); + if ( false !== self._trigger( "select", event, { item: item } ) ) { + self.element.val( item.value ); + } + self.close( event ); + // only trigger when focus was lost (click on menu) + var previous = self.previous; + if ( self.element[0] !== doc.activeElement ) { + self.element.focus(); + self.previous = previous; + } + self.selectedItem = item; + }, + blur: function( event, ui ) { + if ( self.menu.element.is(":visible") ) { + self.element.val( self.term ); + } + } + }) + .zIndex( this.element.zIndex() + 1 ) + // workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781 + .css({ top: 0, left: 0 }) + .hide() + .data( "menu" ); + if ( $.fn.bgiframe ) { + this.menu.element.bgiframe(); + } + }, + + destroy: function() { + this.element + .removeClass( "ui-autocomplete-input" ) + .removeAttr( "autocomplete" ) + .removeAttr( "role" ) + .removeAttr( "aria-autocomplete" ) + .removeAttr( "aria-haspopup" ); + this.menu.element.remove(); + $.Widget.prototype.destroy.call( this ); + }, + + _setOption: function( key ) { + $.Widget.prototype._setOption.apply( this, arguments ); + if ( key === "source" ) { + this._initSource(); + } + }, + + _initSource: function() { + var array, + url; + if ( $.isArray(this.options.source) ) { + array = this.options.source; + this.source = function( request, response ) { + response( $.ui.autocomplete.filter(array, request.term) ); + }; + } else if ( typeof this.options.source === "string" ) { + url = this.options.source; + this.source = function( request, response ) { + $.getJSON( url, request, response ); + }; + } else { + this.source = this.options.source; + } + }, + + search: function( value, event ) { + value = value != null ? value : this.element.val(); + if ( value.length < this.options.minLength ) { + return this.close( event ); + } + + clearTimeout( this.closing ); + if ( this._trigger("search") === false ) { + return; + } + + return this._search( value ); + }, + + _search: function( value ) { + this.term = this.element + .addClass( "ui-autocomplete-loading" ) + // always save the actual value, not the one passed as an argument + .val(); + + this.source( { term: value }, this.response ); + }, + + _response: function( content ) { + if ( content.length ) { + content = this._normalize( content ); + this._suggest( content ); + this._trigger( "open" ); + } else { + this.close(); + } + this.element.removeClass( "ui-autocomplete-loading" ); + }, + + close: function( event ) { + clearTimeout( this.closing ); + if ( this.menu.element.is(":visible") ) { + this._trigger( "close", event ); + this.menu.element.hide(); + this.menu.deactivate(); + } + }, + + _change: function( event ) { + if ( this.previous !== this.element.val() ) { + this._trigger( "change", event, { item: this.selectedItem } ); + } + }, + + _normalize: function( items ) { + // assume all items have the right format when the first item is complete + if ( items.length && items[0].label && items[0].value ) { + return items; + } + return $.map( items, function(item) { + if ( typeof item === "string" ) { + return { + label: item, + value: item + }; + } + return $.extend({ + label: item.label || item.value, + value: item.value || item.label + }, item ); + }); + }, + + _suggest: function( items ) { + var ul = this.menu.element + .empty() + .zIndex( this.element.zIndex() + 1 ), + menuWidth, + textWidth; + this._renderMenu( ul, items ); + // TODO refresh should check if the active item is still in the dom, removing the need for a manual deactivate + this.menu.deactivate(); + this.menu.refresh(); + this.menu.element.show().position({ + my: "left top", + at: "left bottom", + of: this.element, + collision: "none" + }); + + menuWidth = ul.width( "" ).width(); + textWidth = this.element.width(); + ul.width( Math.max( menuWidth, textWidth ) ); + }, + + _renderMenu: function( ul, items ) { + var self = this; + $.each( items, function( index, item ) { + self._renderItem( ul, item ); + }); + }, + + _renderItem: function( ul, item) { + return $( "
    • " ) + .data( "item.autocomplete", item ) + .append( "" + item.label + "" ) + .appendTo( ul ); + }, + + _move: function( direction, event ) { + if ( !this.menu.element.is(":visible") ) { + this.search( null, event ); + return; + } + if ( this.menu.first() && /^previous/.test(direction) || + this.menu.last() && /^next/.test(direction) ) { + this.element.val( this.term ); + this.menu.deactivate(); + return; + } + this.menu[ direction ]( event ); + }, + + widget: function() { + return this.menu.element; + } +}); + +$.extend( $.ui.autocomplete, { + escapeRegex: function( value ) { + return value.replace( /([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1" ); + }, + filter: function(array, term) { + var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" ); + return $.grep( array, function(value) { + return matcher.test( value.label || value.value || value ); + }); + } +}); + +}( jQuery )); + +/* + * jQuery UI Menu (not officially released) + * + * This widget isn't yet finished and the API is subject to change. We plan to finish + * it for the next release. You're welcome to give it a try anyway and give us feedback, + * as long as you're okay with migrating your code later on. We can help with that, too. + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Menu + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function($) { + +$.widget("ui.menu", { + _create: function() { + var self = this; + this.element + .addClass("ui-menu ui-widget ui-widget-content ui-corner-all") + .attr({ + role: "listbox", + "aria-activedescendant": "ui-active-menuitem" + }) + .click(function( event ) { + if ( !$( event.target ).closest( ".ui-menu-item a" ).length ) { + return; + } + // temporary + event.preventDefault(); + self.select( event ); + }); + this.refresh(); + }, + + refresh: function() { + var self = this; + + // don't refresh list items that are already adapted + var items = this.element.children("li:not(.ui-menu-item):has(a)") + .addClass("ui-menu-item") + .attr("role", "menuitem"); + + items.children("a") + .addClass("ui-corner-all") + .attr("tabindex", -1) + // mouseenter doesn't work with event delegation + .mouseenter(function( event ) { + self.activate( event, $(this).parent() ); + }) + .mouseleave(function() { + self.deactivate(); + }); + }, + + activate: function( event, item ) { + this.deactivate(); + if (this.hasScroll()) { + var offset = item.offset().top - this.element.offset().top, + scroll = this.element.attr("scrollTop"), + elementHeight = this.element.height(); + if (offset < 0) { + this.element.attr("scrollTop", scroll + offset); + } else if (offset > elementHeight) { + this.element.attr("scrollTop", scroll + offset - elementHeight + item.height()); + } + } + this.active = item.eq(0) + .children("a") + .addClass("ui-state-hover") + .attr("id", "ui-active-menuitem") + .end(); + this._trigger("focus", event, { item: item }); + }, + + deactivate: function() { + if (!this.active) { return; } + + this.active.children("a") + .removeClass("ui-state-hover") + .removeAttr("id"); + this._trigger("blur"); + this.active = null; + }, + + next: function(event) { + this.move("next", ".ui-menu-item:first", event); + }, + + previous: function(event) { + this.move("prev", ".ui-menu-item:last", event); + }, + + first: function() { + return this.active && !this.active.prev().length; + }, + + last: function() { + return this.active && !this.active.next().length; + }, + + move: function(direction, edge, event) { + if (!this.active) { + this.activate(event, this.element.children(edge)); + return; + } + var next = this.active[direction + "All"](".ui-menu-item").eq(0); + if (next.length) { + this.activate(event, next); + } else { + this.activate(event, this.element.children(edge)); + } + }, + + // TODO merge with previousPage + nextPage: function(event) { + if (this.hasScroll()) { + // TODO merge with no-scroll-else + if (!this.active || this.last()) { + this.activate(event, this.element.children(":first")); + return; + } + var base = this.active.offset().top, + height = this.element.height(), + result = this.element.children("li").filter(function() { + var close = $(this).offset().top - base - height + $(this).height(); + // TODO improve approximation + return close < 10 && close > -10; + }); + + // TODO try to catch this earlier when scrollTop indicates the last page anyway + if (!result.length) { + result = this.element.children(":last"); + } + this.activate(event, result); + } else { + this.activate(event, this.element.children(!this.active || this.last() ? ":first" : ":last")); + } + }, + + // TODO merge with nextPage + previousPage: function(event) { + if (this.hasScroll()) { + // TODO merge with no-scroll-else + if (!this.active || this.first()) { + this.activate(event, this.element.children(":last")); + return; + } + + var base = this.active.offset().top, + height = this.element.height(); + result = this.element.children("li").filter(function() { + var close = $(this).offset().top - base + height - $(this).height(); + // TODO improve approximation + return close < 10 && close > -10; + }); + + // TODO try to catch this earlier when scrollTop indicates the last page anyway + if (!result.length) { + result = this.element.children(":first"); + } + this.activate(event, result); + } else { + this.activate(event, this.element.children(!this.active || this.first() ? ":last" : ":first")); + } + }, + + hasScroll: function() { + return this.element.height() < this.element.attr("scrollHeight"); + }, + + select: function( event ) { + this._trigger("selected", event, { item: this.active }); + } +}); + +}(jQuery)); diff --git a/resources/jquery.ui/jquery.ui.button.js b/resources/jquery.ui/jquery.ui.button.js new file mode 100644 index 00000000..d318e3de --- /dev/null +++ b/resources/jquery.ui/jquery.ui.button.js @@ -0,0 +1,365 @@ +/* + * jQuery UI Button 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Button + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function( $ ) { + +var lastActive, + baseClasses = "ui-button ui-widget ui-state-default ui-corner-all", + stateClasses = "ui-state-hover ui-state-active ", + typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon ui-button-text-only", + formResetHandler = function( event ) { + $( ":ui-button", event.target.form ).each(function() { + var inst = $( this ).data( "button" ); + setTimeout(function() { + inst.refresh(); + }, 1 ); + }); + }, + radioGroup = function( radio ) { + var name = radio.name, + form = radio.form, + radios = $( [] ); + if ( name ) { + if ( form ) { + radios = $( form ).find( "[name='" + name + "']" ); + } else { + radios = $( "[name='" + name + "']", radio.ownerDocument ) + .filter(function() { + return !this.form; + }); + } + } + return radios; + }; + +$.widget( "ui.button", { + options: { + text: true, + label: null, + icons: { + primary: null, + secondary: null + } + }, + _create: function() { + this.element.closest( "form" ) + .unbind( "reset.button" ) + .bind( "reset.button", formResetHandler ); + + this._determineButtonType(); + this.hasTitle = !!this.buttonElement.attr( "title" ); + + var self = this, + options = this.options, + toggleButton = this.type === "checkbox" || this.type === "radio", + hoverClass = "ui-state-hover" + ( !toggleButton ? " ui-state-active" : "" ), + focusClass = "ui-state-focus"; + + if ( options.label === null ) { + options.label = this.buttonElement.html(); + } + + if ( this.element.is( ":disabled" ) ) { + options.disabled = true; + } + + this.buttonElement + .addClass( baseClasses ) + .attr( "role", "button" ) + .bind( "mouseenter.button", function() { + if ( options.disabled ) { + return; + } + $( this ).addClass( "ui-state-hover" ); + if ( this === lastActive ) { + $( this ).addClass( "ui-state-active" ); + } + }) + .bind( "mouseleave.button", function() { + if ( options.disabled ) { + return; + } + $( this ).removeClass( hoverClass ); + }) + .bind( "focus.button", function() { + // no need to check disabled, focus won't be triggered anyway + $( this ).addClass( focusClass ); + }) + .bind( "blur.button", function() { + $( this ).removeClass( focusClass ); + }); + + if ( toggleButton ) { + this.element.bind( "change.button", function() { + self.refresh(); + }); + } + + if ( this.type === "checkbox" ) { + this.buttonElement.bind( "click.button", function() { + if ( options.disabled ) { + return false; + } + $( this ).toggleClass( "ui-state-active" ); + self.buttonElement.attr( "aria-pressed", self.element[0].checked ); + }); + } else if ( this.type === "radio" ) { + this.buttonElement.bind( "click.button", function() { + if ( options.disabled ) { + return false; + } + $( this ).addClass( "ui-state-active" ); + self.buttonElement.attr( "aria-pressed", true ); + + var radio = self.element[ 0 ]; + radioGroup( radio ) + .not( radio ) + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", false ); + }); + } else { + this.buttonElement + .bind( "mousedown.button", function() { + if ( options.disabled ) { + return false; + } + $( this ).addClass( "ui-state-active" ); + lastActive = this; + $( document ).one( "mouseup", function() { + lastActive = null; + }); + }) + .bind( "mouseup.button", function() { + if ( options.disabled ) { + return false; + } + $( this ).removeClass( "ui-state-active" ); + }) + .bind( "keydown.button", function(event) { + if ( options.disabled ) { + return false; + } + if ( event.keyCode == $.ui.keyCode.SPACE || event.keyCode == $.ui.keyCode.ENTER ) { + $( this ).addClass( "ui-state-active" ); + } + }) + .bind( "keyup.button", function() { + $( this ).removeClass( "ui-state-active" ); + }); + + if ( this.buttonElement.is("a") ) { + this.buttonElement.keyup(function(event) { + if ( event.keyCode === $.ui.keyCode.SPACE ) { + // TODO pass through original event correctly (just as 2nd argument doesn't work) + $( this ).click(); + } + }); + } + } + + // TODO: pull out $.Widget's handling for the disabled option into + // $.Widget.prototype._setOptionDisabled so it's easy to proxy and can + // be overridden by individual plugins + this._setOption( "disabled", options.disabled ); + }, + + _determineButtonType: function() { + + if ( this.element.is(":checkbox") ) { + this.type = "checkbox"; + } else { + if ( this.element.is(":radio") ) { + this.type = "radio"; + } else { + if ( this.element.is("input") ) { + this.type = "input"; + } else { + this.type = "button"; + } + } + } + + if ( this.type === "checkbox" || this.type === "radio" ) { + // we don't search against the document in case the element + // is disconnected from the DOM + this.buttonElement = this.element.parents().last() + .find( "[for=" + this.element.attr("id") + "]" ); + this.element.addClass( "ui-helper-hidden-accessible" ); + + var checked = this.element.is( ":checked" ); + if ( checked ) { + this.buttonElement.addClass( "ui-state-active" ); + } + this.buttonElement.attr( "aria-pressed", checked ); + } else { + this.buttonElement = this.element; + } + }, + + widget: function() { + return this.buttonElement; + }, + + destroy: function() { + this.element + .removeClass( "ui-helper-hidden-accessible" ); + this.buttonElement + .removeClass( baseClasses + " " + stateClasses + " " + typeClasses ) + .removeAttr( "role" ) + .removeAttr( "aria-pressed" ) + .html( this.buttonElement.find(".ui-button-text").html() ); + + if ( !this.hasTitle ) { + this.buttonElement.removeAttr( "title" ); + } + + $.Widget.prototype.destroy.call( this ); + }, + + _setOption: function( key, value ) { + $.Widget.prototype._setOption.apply( this, arguments ); + if ( key === "disabled" ) { + if ( value ) { + this.element.attr( "disabled", true ); + } else { + this.element.removeAttr( "disabled" ); + } + } + this._resetButton(); + }, + + refresh: function() { + var isDisabled = this.element.is( ":disabled" ); + if ( isDisabled !== this.options.disabled ) { + this._setOption( "disabled", isDisabled ); + } + if ( this.type === "radio" ) { + radioGroup( this.element[0] ).each(function() { + if ( $( this ).is( ":checked" ) ) { + $( this ).button( "widget" ) + .addClass( "ui-state-active" ) + .attr( "aria-pressed", true ); + } else { + $( this ).button( "widget" ) + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", false ); + } + }); + } else if ( this.type === "checkbox" ) { + if ( this.element.is( ":checked" ) ) { + this.buttonElement + .addClass( "ui-state-active" ) + .attr( "aria-pressed", true ); + } else { + this.buttonElement + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", false ); + } + } + }, + + _resetButton: function() { + if ( this.type === "input" ) { + if ( this.options.label ) { + this.element.val( this.options.label ); + } + return; + } + var buttonElement = this.buttonElement.removeClass( typeClasses ), + buttonText = $( "" ) + .addClass( "ui-button-text" ) + .html( this.options.label ) + .appendTo( buttonElement.empty() ) + .text(), + icons = this.options.icons, + multipleIcons = icons.primary && icons.secondary; + if ( icons.primary || icons.secondary ) { + buttonElement.addClass( "ui-button-text-icon" + + ( multipleIcons ? "s" : "" ) ); + if ( icons.primary ) { + buttonElement.prepend( "" ); + } + if ( icons.secondary ) { + buttonElement.append( "" ); + } + if ( !this.options.text ) { + buttonElement + .addClass( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" ) + .removeClass( "ui-button-text-icons ui-button-text-icon" ); + if ( !this.hasTitle ) { + buttonElement.attr( "title", buttonText ); + } + } + } else { + buttonElement.addClass( "ui-button-text-only" ); + } + } +}); + +$.widget( "ui.buttonset", { + _create: function() { + this.element.addClass( "ui-buttonset" ); + this._init(); + }, + + _init: function() { + this.refresh(); + }, + + _setOption: function( key, value ) { + if ( key === "disabled" ) { + this.buttons.button( "option", key, value ); + } + + $.Widget.prototype._setOption.apply( this, arguments ); + }, + + refresh: function() { + this.buttons = this.element.find( ":button, :submit, :reset, :checkbox, :radio, a, :data(button)" ) + .filter( ":ui-button" ) + .button( "refresh" ) + .end() + .not( ":ui-button" ) + .button() + .end() + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-corner-all ui-corner-left ui-corner-right" ) + .filter( ":first" ) + .addClass( "ui-corner-left" ) + .end() + .filter( ":last" ) + .addClass( "ui-corner-right" ) + .end() + .end(); + }, + + destroy: function() { + this.element.removeClass( "ui-buttonset" ); + this.buttons + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-corner-left ui-corner-right" ) + .end() + .button( "destroy" ); + + $.Widget.prototype.destroy.call( this ); + } +}); + +}( jQuery ) ); diff --git a/resources/jquery.ui/jquery.ui.core.js b/resources/jquery.ui/jquery.ui.core.js new file mode 100644 index 00000000..80448028 --- /dev/null +++ b/resources/jquery.ui/jquery.ui.core.js @@ -0,0 +1,216 @@ +/*! + * jQuery UI 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI + */ + +(function($) { + +// prevent duplicate loading +// this is only a problem because we proxy existing functions +// and we don't want to double proxy them +$.ui = $.ui || {}; +if ($.ui.version) { + return; +} + +//Helper functions and ui object +$.extend($.ui, { + version: "1.8.2", + + // $.ui.plugin is deprecated. Use the proxy pattern instead. + plugin: { + add: function(module, option, set) { + var proto = $.ui[module].prototype; + for(var i in set) { + proto.plugins[i] = proto.plugins[i] || []; + proto.plugins[i].push([option, set[i]]); + } + }, + call: function(instance, name, args) { + var set = instance.plugins[name]; + if(!set || !instance.element[0].parentNode) { return; } + + for (var i = 0; i < set.length; i++) { + if (instance.options[set[i][0]]) { + set[i][1].apply(instance.element, args); + } + } + } + }, + + contains: function(a, b) { + return document.compareDocumentPosition + ? a.compareDocumentPosition(b) & 16 + : a !== b && a.contains(b); + }, + + hasScroll: function(el, a) { + + //If overflow is hidden, the element might have extra content, but the user wants to hide it + if ($(el).css('overflow') == 'hidden') { return false; } + + var scroll = (a && a == 'left') ? 'scrollLeft' : 'scrollTop', + has = false; + + if (el[scroll] > 0) { return true; } + + // TODO: determine which cases actually cause this to happen + // if the element doesn't have the scroll set, see if it's possible to + // set the scroll + el[scroll] = 1; + has = (el[scroll] > 0); + el[scroll] = 0; + return has; + }, + + isOverAxis: function(x, reference, size) { + //Determines when x coordinate is over "b" element axis + return (x > reference) && (x < (reference + size)); + }, + + isOver: function(y, x, top, left, height, width) { + //Determines when x, y coordinates is over "b" element + return $.ui.isOverAxis(y, top, height) && $.ui.isOverAxis(x, left, width); + }, + + keyCode: { + ALT: 18, + BACKSPACE: 8, + CAPS_LOCK: 20, + COMMA: 188, + COMMAND: 91, + COMMAND_LEFT: 91, // COMMAND + COMMAND_RIGHT: 93, + CONTROL: 17, + DELETE: 46, + DOWN: 40, + END: 35, + ENTER: 13, + ESCAPE: 27, + HOME: 36, + INSERT: 45, + LEFT: 37, + MENU: 93, // COMMAND_RIGHT + NUMPAD_ADD: 107, + NUMPAD_DECIMAL: 110, + NUMPAD_DIVIDE: 111, + NUMPAD_ENTER: 108, + NUMPAD_MULTIPLY: 106, + NUMPAD_SUBTRACT: 109, + PAGE_DOWN: 34, + PAGE_UP: 33, + PERIOD: 190, + RIGHT: 39, + SHIFT: 16, + SPACE: 32, + TAB: 9, + UP: 38, + WINDOWS: 91 // COMMAND + } +}); + +//jQuery plugins +$.fn.extend({ + _focus: $.fn.focus, + focus: function(delay, fn) { + return typeof delay === 'number' + ? this.each(function() { + var elem = this; + setTimeout(function() { + $(elem).focus(); + (fn && fn.call(elem)); + }, delay); + }) + : this._focus.apply(this, arguments); + }, + + enableSelection: function() { + return this + .attr('unselectable', 'off') + .css('MozUserSelect', ''); + }, + + disableSelection: function() { + return this + .attr('unselectable', 'on') + .css('MozUserSelect', 'none'); + }, + + scrollParent: function() { + var scrollParent; + if(($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) { + scrollParent = this.parents().filter(function() { + return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); + }).eq(0); + } else { + scrollParent = this.parents().filter(function() { + return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); + }).eq(0); + } + + return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent; + }, + + zIndex: function(zIndex) { + if (zIndex !== undefined) { + return this.css('zIndex', zIndex); + } + + if (this.length) { + var elem = $(this[0]), position, value; + while (elem.length && elem[0] !== document) { + // Ignore z-index if position is set to a value where z-index is ignored by the browser + // This makes behavior of this function consistent across browsers + // WebKit always returns auto if the element is positioned + position = elem.css('position'); + if (position == 'absolute' || position == 'relative' || position == 'fixed') + { + // IE returns 0 when zIndex is not specified + // other browsers return a string + // we ignore the case of nested elements with an explicit value of 0 + //
      + value = parseInt(elem.css('zIndex')); + if (!isNaN(value) && value != 0) { + return value; + } + } + elem = elem.parent(); + } + } + + return 0; + } +}); + + +//Additional selectors +$.extend($.expr[':'], { + data: function(elem, i, match) { + return !!$.data(elem, match[3]); + }, + + focusable: function(element) { + var nodeName = element.nodeName.toLowerCase(), + tabIndex = $.attr(element, 'tabindex'); + return (/input|select|textarea|button|object/.test(nodeName) + ? !element.disabled + : 'a' == nodeName || 'area' == nodeName + ? element.href || !isNaN(tabIndex) + : !isNaN(tabIndex)) + // the element and all of its ancestors must be visible + // the browser may report that the area is hidden + && !$(element)['area' == nodeName ? 'parents' : 'closest'](':hidden').length; + }, + + tabbable: function(element) { + var tabIndex = $.attr(element, 'tabindex'); + return (isNaN(tabIndex) || tabIndex >= 0) && $(element).is(':focusable'); + } +}); + +})(jQuery); diff --git a/resources/jquery.ui/jquery.ui.datepicker.js b/resources/jquery.ui/jquery.ui.datepicker.js new file mode 100644 index 00000000..cad1d58c --- /dev/null +++ b/resources/jquery.ui/jquery.ui.datepicker.js @@ -0,0 +1,1730 @@ +/* + * jQuery UI Datepicker 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Datepicker + * + * Depends: + * jquery.ui.core.js + */ + +(function($) { // hide the namespace + +$.extend($.ui, { datepicker: { version: "1.8.2" } }); + +var PROP_NAME = 'datepicker'; +var dpuuid = new Date().getTime(); + +/* Date picker manager. + Use the singleton instance of this class, $.datepicker, to interact with the date picker. + Settings for (groups of) date pickers are maintained in an instance object, + allowing multiple different settings on the same page. */ + +function Datepicker() { + this.debug = false; // Change this to true to start debugging + this._curInst = null; // The current instance in use + this._keyEvent = false; // If the last event was a key event + this._disabledInputs = []; // List of date picker inputs that have been disabled + this._datepickerShowing = false; // True if the popup picker is showing , false if not + this._inDialog = false; // True if showing within a "dialog", false if not + this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division + this._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class + this._appendClass = 'ui-datepicker-append'; // The name of the append marker class + this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class + this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class + this._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class + this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class + this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class + this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class + this.regional = []; // Available regional settings, indexed by language code + this.regional[''] = { // Default regional settings + closeText: 'Done', // Display text for close link + prevText: 'Prev', // Display text for previous month link + nextText: 'Next', // Display text for next month link + currentText: 'Today', // Display text for current month link + monthNames: ['January','February','March','April','May','June', + 'July','August','September','October','November','December'], // Names of months for drop-down and formatting + monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting + dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting + dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting + dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday + weekHeader: 'Wk', // Column header for week of the year + dateFormat: 'mm/dd/yy', // See format options on parseDate + firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ... + isRTL: false, // True if right-to-left language, false if left-to-right + showMonthAfterYear: false, // True if the year select precedes month, false for month then year + yearSuffix: '' // Additional text to append to the year in the month headers + }; + this._defaults = { // Global defaults for all the date picker instances + showOn: 'focus', // 'focus' for popup on focus, + // 'button' for trigger button, or 'both' for either + showAnim: 'fadeIn', // Name of jQuery animation for popup + showOptions: {}, // Options for enhanced animations + defaultDate: null, // Used when field is blank: actual date, + // +/-number for offset from today, null for today + appendText: '', // Display text following the input box, e.g. showing the format + buttonText: '...', // Text for trigger button + buttonImage: '', // URL for trigger button image + buttonImageOnly: false, // True if the image appears alone, false if it appears on a button + hideIfNoPrevNext: false, // True to hide next/previous month links + // if not applicable, false to just disable them + navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links + gotoCurrent: false, // True if today link goes back to current selection instead + changeMonth: false, // True if month can be selected directly, false if only prev/next + changeYear: false, // True if year can be selected directly, false if only prev/next + yearRange: 'c-10:c+10', // Range of years to display in drop-down, + // either relative to today's year (-nn:+nn), relative to currently displayed year + // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n) + showOtherMonths: false, // True to show dates in other months, false to leave blank + selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable + showWeek: false, // True to show week of the year, false to not show it + calculateWeek: this.iso8601Week, // How to calculate the week of the year, + // takes a Date and returns the number of the week for it + shortYearCutoff: '+10', // Short year values < this are in the current century, + // > this are in the previous century, + // string value starting with '+' for current year + value + minDate: null, // The earliest selectable date, or null for no limit + maxDate: null, // The latest selectable date, or null for no limit + duration: 'fast', // Duration of display/closure + beforeShowDay: null, // Function that takes a date and returns an array with + // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '', + // [2] = cell title (optional), e.g. $.datepicker.noWeekends + beforeShow: null, // Function that takes an input field and + // returns a set of custom settings for the date picker + onSelect: null, // Define a callback function when a date is selected + onChangeMonthYear: null, // Define a callback function when the month or year is changed + onClose: null, // Define a callback function when the datepicker is closed + numberOfMonths: 1, // Number of months to show at a time + showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0) + stepMonths: 1, // Number of months to step back/forward + stepBigMonths: 12, // Number of months to step back/forward for the big links + altField: '', // Selector for an alternate field to store selected dates into + altFormat: '', // The date format to use for the alternate field + constrainInput: true, // The input is constrained by the current date format + showButtonPanel: false, // True to show button panel, false to not show it + autoSize: false // True to size the input for the date format, false to leave as is + }; + $.extend(this._defaults, this.regional['']); + this.dpDiv = $('
      '); +} + +$.extend(Datepicker.prototype, { + /* Class name added to elements to indicate already configured with a date picker. */ + markerClassName: 'hasDatepicker', + + /* Debug logging (if enabled). */ + log: function () { + if (this.debug) + console.log.apply('', arguments); + }, + + // TODO rename to "widget" when switching to widget factory + _widgetDatepicker: function() { + return this.dpDiv; + }, + + /* Override the default settings for all instances of the date picker. + @param settings object - the new settings to use as defaults (anonymous object) + @return the manager object */ + setDefaults: function(settings) { + extendRemove(this._defaults, settings || {}); + return this; + }, + + /* Attach the date picker to a jQuery selection. + @param target element - the target input field or division or span + @param settings object - the new settings to use for this date picker instance (anonymous) */ + _attachDatepicker: function(target, settings) { + // check for settings on the control itself - in namespace 'date:' + var inlineSettings = null; + for (var attrName in this._defaults) { + var attrValue = target.getAttribute('date:' + attrName); + if (attrValue) { + inlineSettings = inlineSettings || {}; + try { + inlineSettings[attrName] = eval(attrValue); + } catch (err) { + inlineSettings[attrName] = attrValue; + } + } + } + var nodeName = target.nodeName.toLowerCase(); + var inline = (nodeName == 'div' || nodeName == 'span'); + if (!target.id) { + this.uuid += 1; + target.id = 'dp' + this.uuid; + } + var inst = this._newInst($(target), inline); + inst.settings = $.extend({}, settings || {}, inlineSettings || {}); + if (nodeName == 'input') { + this._connectDatepicker(target, inst); + } else if (inline) { + this._inlineDatepicker(target, inst); + } + }, + + /* Create a new instance object. */ + _newInst: function(target, inline) { + var id = target[0].id.replace(/([^A-Za-z0-9_])/g, '\\\\$1'); // escape jQuery meta chars + return {id: id, input: target, // associated target + selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection + drawMonth: 0, drawYear: 0, // month being drawn + inline: inline, // is datepicker inline or not + dpDiv: (!inline ? this.dpDiv : // presentation div + $('
      '))}; + }, + + /* Attach the date picker to an input field. */ + _connectDatepicker: function(target, inst) { + var input = $(target); + inst.append = $([]); + inst.trigger = $([]); + if (input.hasClass(this.markerClassName)) + return; + this._attachments(input, inst); + input.addClass(this.markerClassName).keydown(this._doKeyDown). + keypress(this._doKeyPress).keyup(this._doKeyUp). + bind("setData.datepicker", function(event, key, value) { + inst.settings[key] = value; + }).bind("getData.datepicker", function(event, key) { + return this._get(inst, key); + }); + this._autoSize(inst); + $.data(target, PROP_NAME, inst); + }, + + /* Make attachments based on settings. */ + _attachments: function(input, inst) { + var appendText = this._get(inst, 'appendText'); + var isRTL = this._get(inst, 'isRTL'); + if (inst.append) + inst.append.remove(); + if (appendText) { + inst.append = $('' + appendText + ''); + input[isRTL ? 'before' : 'after'](inst.append); + } + input.unbind('focus', this._showDatepicker); + if (inst.trigger) + inst.trigger.remove(); + var showOn = this._get(inst, 'showOn'); + if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field + input.focus(this._showDatepicker); + if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked + var buttonText = this._get(inst, 'buttonText'); + var buttonImage = this._get(inst, 'buttonImage'); + inst.trigger = $(this._get(inst, 'buttonImageOnly') ? + $('').addClass(this._triggerClass). + attr({ src: buttonImage, alt: buttonText, title: buttonText }) : + $('').addClass(this._triggerClass). + html(buttonImage == '' ? buttonText : $('').attr( + { src:buttonImage, alt:buttonText, title:buttonText }))); + input[isRTL ? 'before' : 'after'](inst.trigger); + inst.trigger.click(function() { + if ($.datepicker._datepickerShowing && $.datepicker._lastInput == input[0]) + $.datepicker._hideDatepicker(); + else + $.datepicker._showDatepicker(input[0]); + return false; + }); + } + }, + + /* Apply the maximum length for the date format. */ + _autoSize: function(inst) { + if (this._get(inst, 'autoSize') && !inst.inline) { + var date = new Date(2009, 12 - 1, 20); // Ensure double digits + var dateFormat = this._get(inst, 'dateFormat'); + if (dateFormat.match(/[DM]/)) { + var findMax = function(names) { + var max = 0; + var maxI = 0; + for (var i = 0; i < names.length; i++) { + if (names[i].length > max) { + max = names[i].length; + maxI = i; + } + } + return maxI; + }; + date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ? + 'monthNames' : 'monthNamesShort')))); + date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ? + 'dayNames' : 'dayNamesShort'))) + 20 - date.getDay()); + } + inst.input.attr('size', this._formatDate(inst, date).length); + } + }, + + /* Attach an inline date picker to a div. */ + _inlineDatepicker: function(target, inst) { + var divSpan = $(target); + if (divSpan.hasClass(this.markerClassName)) + return; + divSpan.addClass(this.markerClassName).append(inst.dpDiv). + bind("setData.datepicker", function(event, key, value){ + inst.settings[key] = value; + }).bind("getData.datepicker", function(event, key){ + return this._get(inst, key); + }); + $.data(target, PROP_NAME, inst); + this._setDate(inst, this._getDefaultDate(inst), true); + this._updateDatepicker(inst); + this._updateAlternate(inst); + }, + + /* Pop-up the date picker in a "dialog" box. + @param input element - ignored + @param date string or Date - the initial date to display + @param onSelect function - the function to call when a date is selected + @param settings object - update the dialog date picker instance's settings (anonymous object) + @param pos int[2] - coordinates for the dialog's position within the screen or + event - with x/y coordinates or + leave empty for default (screen centre) + @return the manager object */ + _dialogDatepicker: function(input, date, onSelect, settings, pos) { + var inst = this._dialogInst; // internal instance + if (!inst) { + this.uuid += 1; + var id = 'dp' + this.uuid; + this._dialogInput = $(''); + this._dialogInput.keydown(this._doKeyDown); + $('body').append(this._dialogInput); + inst = this._dialogInst = this._newInst(this._dialogInput, false); + inst.settings = {}; + $.data(this._dialogInput[0], PROP_NAME, inst); + } + extendRemove(inst.settings, settings || {}); + date = (date && date.constructor == Date ? this._formatDate(inst, date) : date); + this._dialogInput.val(date); + + this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); + if (!this._pos) { + var browserWidth = document.documentElement.clientWidth; + var browserHeight = document.documentElement.clientHeight; + var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; + var scrollY = document.documentElement.scrollTop || document.body.scrollTop; + this._pos = // should use actual width/height below + [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY]; + } + + // move input on screen for focus, but hidden behind dialog + this._dialogInput.css('left', (this._pos[0] + 20) + 'px').css('top', this._pos[1] + 'px'); + inst.settings.onSelect = onSelect; + this._inDialog = true; + this.dpDiv.addClass(this._dialogClass); + this._showDatepicker(this._dialogInput[0]); + if ($.blockUI) + $.blockUI(this.dpDiv); + $.data(this._dialogInput[0], PROP_NAME, inst); + return this; + }, + + /* Detach a datepicker from its control. + @param target element - the target input field or division or span */ + _destroyDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + $.removeData(target, PROP_NAME); + if (nodeName == 'input') { + inst.append.remove(); + inst.trigger.remove(); + $target.removeClass(this.markerClassName). + unbind('focus', this._showDatepicker). + unbind('keydown', this._doKeyDown). + unbind('keypress', this._doKeyPress). + unbind('keyup', this._doKeyUp); + } else if (nodeName == 'div' || nodeName == 'span') + $target.removeClass(this.markerClassName).empty(); + }, + + /* Enable the date picker to a jQuery selection. + @param target element - the target input field or division or span */ + _enableDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + if (nodeName == 'input') { + target.disabled = false; + inst.trigger.filter('button'). + each(function() { this.disabled = false; }).end(). + filter('img').css({opacity: '1.0', cursor: ''}); + } + else if (nodeName == 'div' || nodeName == 'span') { + var inline = $target.children('.' + this._inlineClass); + inline.children().removeClass('ui-state-disabled'); + } + this._disabledInputs = $.map(this._disabledInputs, + function(value) { return (value == target ? null : value); }); // delete entry + }, + + /* Disable the date picker to a jQuery selection. + @param target element - the target input field or division or span */ + _disableDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + if (nodeName == 'input') { + target.disabled = true; + inst.trigger.filter('button'). + each(function() { this.disabled = true; }).end(). + filter('img').css({opacity: '0.5', cursor: 'default'}); + } + else if (nodeName == 'div' || nodeName == 'span') { + var inline = $target.children('.' + this._inlineClass); + inline.children().addClass('ui-state-disabled'); + } + this._disabledInputs = $.map(this._disabledInputs, + function(value) { return (value == target ? null : value); }); // delete entry + this._disabledInputs[this._disabledInputs.length] = target; + }, + + /* Is the first field in a jQuery collection disabled as a datepicker? + @param target element - the target input field or division or span + @return boolean - true if disabled, false if enabled */ + _isDisabledDatepicker: function(target) { + if (!target) { + return false; + } + for (var i = 0; i < this._disabledInputs.length; i++) { + if (this._disabledInputs[i] == target) + return true; + } + return false; + }, + + /* Retrieve the instance data for the target control. + @param target element - the target input field or division or span + @return object - the associated instance data + @throws error if a jQuery problem getting data */ + _getInst: function(target) { + try { + return $.data(target, PROP_NAME); + } + catch (err) { + throw 'Missing instance data for this datepicker'; + } + }, + + /* Update or retrieve the settings for a date picker attached to an input field or division. + @param target element - the target input field or division or span + @param name object - the new settings to update or + string - the name of the setting to change or retrieve, + when retrieving also 'all' for all instance settings or + 'defaults' for all global defaults + @param value any - the new value for the setting + (omit if above is an object or to retrieve a value) */ + _optionDatepicker: function(target, name, value) { + var inst = this._getInst(target); + if (arguments.length == 2 && typeof name == 'string') { + return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) : + (inst ? (name == 'all' ? $.extend({}, inst.settings) : + this._get(inst, name)) : null)); + } + var settings = name || {}; + if (typeof name == 'string') { + settings = {}; + settings[name] = value; + } + if (inst) { + if (this._curInst == inst) { + this._hideDatepicker(); + } + var date = this._getDateDatepicker(target, true); + extendRemove(inst.settings, settings); + this._attachments($(target), inst); + this._autoSize(inst); + this._setDateDatepicker(target, date); + this._updateDatepicker(inst); + } + }, + + // change method deprecated + _changeDatepicker: function(target, name, value) { + this._optionDatepicker(target, name, value); + }, + + /* Redraw the date picker attached to an input field or division. + @param target element - the target input field or division or span */ + _refreshDatepicker: function(target) { + var inst = this._getInst(target); + if (inst) { + this._updateDatepicker(inst); + } + }, + + /* Set the dates for a jQuery selection. + @param target element - the target input field or division or span + @param date Date - the new date */ + _setDateDatepicker: function(target, date) { + var inst = this._getInst(target); + if (inst) { + this._setDate(inst, date); + this._updateDatepicker(inst); + this._updateAlternate(inst); + } + }, + + /* Get the date(s) for the first entry in a jQuery selection. + @param target element - the target input field or division or span + @param noDefault boolean - true if no default date is to be used + @return Date - the current date */ + _getDateDatepicker: function(target, noDefault) { + var inst = this._getInst(target); + if (inst && !inst.inline) + this._setDateFromField(inst, noDefault); + return (inst ? this._getDate(inst) : null); + }, + + /* Handle keystrokes. */ + _doKeyDown: function(event) { + var inst = $.datepicker._getInst(event.target); + var handled = true; + var isRTL = inst.dpDiv.is('.ui-datepicker-rtl'); + inst._keyEvent = true; + if ($.datepicker._datepickerShowing) + switch (event.keyCode) { + case 9: $.datepicker._hideDatepicker(); + handled = false; + break; // hide on tab out + case 13: var sel = $('td.' + $.datepicker._dayOverClass, inst.dpDiv). + add($('td.' + $.datepicker._currentClass, inst.dpDiv)); + if (sel[0]) + $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]); + else + $.datepicker._hideDatepicker(); + return false; // don't submit the form + break; // select the value on enter + case 27: $.datepicker._hideDatepicker(); + break; // hide on escape + case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ? + -$.datepicker._get(inst, 'stepBigMonths') : + -$.datepicker._get(inst, 'stepMonths')), 'M'); + break; // previous month/year on page up/+ ctrl + case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ? + +$.datepicker._get(inst, 'stepBigMonths') : + +$.datepicker._get(inst, 'stepMonths')), 'M'); + break; // next month/year on page down/+ ctrl + case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target); + handled = event.ctrlKey || event.metaKey; + break; // clear on ctrl or command +end + case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target); + handled = event.ctrlKey || event.metaKey; + break; // current on ctrl or command +home + case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D'); + handled = event.ctrlKey || event.metaKey; + // -1 day on ctrl or command +left + if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? + -$.datepicker._get(inst, 'stepBigMonths') : + -$.datepicker._get(inst, 'stepMonths')), 'M'); + // next month/year on alt +left on Mac + break; + case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D'); + handled = event.ctrlKey || event.metaKey; + break; // -1 week on ctrl or command +up + case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D'); + handled = event.ctrlKey || event.metaKey; + // +1 day on ctrl or command +right + if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? + +$.datepicker._get(inst, 'stepBigMonths') : + +$.datepicker._get(inst, 'stepMonths')), 'M'); + // next month/year on alt +right + break; + case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D'); + handled = event.ctrlKey || event.metaKey; + break; // +1 week on ctrl or command +down + default: handled = false; + } + else if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home + $.datepicker._showDatepicker(this); + else { + handled = false; + } + if (handled) { + event.preventDefault(); + event.stopPropagation(); + } + }, + + /* Filter entered characters - based on date format. */ + _doKeyPress: function(event) { + var inst = $.datepicker._getInst(event.target); + if ($.datepicker._get(inst, 'constrainInput')) { + var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')); + var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode); + return event.ctrlKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1); + } + }, + + /* Synchronise manual entry and field/alternate field. */ + _doKeyUp: function(event) { + var inst = $.datepicker._getInst(event.target); + if (inst.input.val() != inst.lastVal) { + try { + var date = $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), + (inst.input ? inst.input.val() : null), + $.datepicker._getFormatConfig(inst)); + if (date) { // only if valid + $.datepicker._setDateFromField(inst); + $.datepicker._updateAlternate(inst); + $.datepicker._updateDatepicker(inst); + } + } + catch (event) { + $.datepicker.log(event); + } + } + return true; + }, + + /* Pop-up the date picker for a given input field. + @param input element - the input field attached to the date picker or + event - if triggered by focus */ + _showDatepicker: function(input) { + input = input.target || input; + if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger + input = $('input', input.parentNode)[0]; + if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here + return; + var inst = $.datepicker._getInst(input); + if ($.datepicker._curInst && $.datepicker._curInst != inst) { + $.datepicker._curInst.dpDiv.stop(true, true); + } + var beforeShow = $.datepicker._get(inst, 'beforeShow'); + extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {})); + inst.lastVal = null; + $.datepicker._lastInput = input; + $.datepicker._setDateFromField(inst); + if ($.datepicker._inDialog) // hide cursor + input.value = ''; + if (!$.datepicker._pos) { // position below input + $.datepicker._pos = $.datepicker._findPos(input); + $.datepicker._pos[1] += input.offsetHeight; // add the height + } + var isFixed = false; + $(input).parents().each(function() { + isFixed |= $(this).css('position') == 'fixed'; + return !isFixed; + }); + if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled + $.datepicker._pos[0] -= document.documentElement.scrollLeft; + $.datepicker._pos[1] -= document.documentElement.scrollTop; + } + var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]}; + $.datepicker._pos = null; + // determine sizing offscreen + inst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'}); + $.datepicker._updateDatepicker(inst); + // fix width for dynamic number of date pickers + // and adjust position before showing + offset = $.datepicker._checkOffset(inst, offset, isFixed); + inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ? + 'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none', + left: offset.left + 'px', top: offset.top + 'px'}); + if (!inst.inline) { + var showAnim = $.datepicker._get(inst, 'showAnim'); + var duration = $.datepicker._get(inst, 'duration'); + var postProcess = function() { + $.datepicker._datepickerShowing = true; + var borders = $.datepicker._getBorders(inst.dpDiv); + inst.dpDiv.find('iframe.ui-datepicker-cover'). // IE6- only + css({left: -borders[0], top: -borders[1], + width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()}); + }; + inst.dpDiv.zIndex($(input).zIndex()+1); + if ($.effects && $.effects[showAnim]) + inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); + else + inst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess); + if (!showAnim || !duration) + postProcess(); + if (inst.input.is(':visible') && !inst.input.is(':disabled')) + inst.input.focus(); + $.datepicker._curInst = inst; + } + }, + + /* Generate the date picker content. */ + _updateDatepicker: function(inst) { + var self = this; + var borders = $.datepicker._getBorders(inst.dpDiv); + inst.dpDiv.empty().append(this._generateHTML(inst)) + .find('iframe.ui-datepicker-cover') // IE6- only + .css({left: -borders[0], top: -borders[1], + width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()}) + .end() + .find('button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a') + .bind('mouseout', function(){ + $(this).removeClass('ui-state-hover'); + if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover'); + if(this.className.indexOf('ui-datepicker-next') != -1) $(this).removeClass('ui-datepicker-next-hover'); + }) + .bind('mouseover', function(){ + if (!self._isDisabledDatepicker( inst.inline ? inst.dpDiv.parent()[0] : inst.input[0])) { + $(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover'); + $(this).addClass('ui-state-hover'); + if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).addClass('ui-datepicker-prev-hover'); + if(this.className.indexOf('ui-datepicker-next') != -1) $(this).addClass('ui-datepicker-next-hover'); + } + }) + .end() + .find('.' + this._dayOverClass + ' a') + .trigger('mouseover') + .end(); + var numMonths = this._getNumberOfMonths(inst); + var cols = numMonths[1]; + var width = 17; + if (cols > 1) + inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em'); + else + inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width(''); + inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') + + 'Class']('ui-datepicker-multi'); + inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') + + 'Class']('ui-datepicker-rtl'); + if (inst == $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input && + inst.input.is(':visible') && !inst.input.is(':disabled')) + inst.input.focus(); + }, + + /* Retrieve the size of left and top borders for an element. + @param elem (jQuery object) the element of interest + @return (number[2]) the left and top borders */ + _getBorders: function(elem) { + var convert = function(value) { + return {thin: 1, medium: 2, thick: 3}[value] || value; + }; + return [parseFloat(convert(elem.css('border-left-width'))), + parseFloat(convert(elem.css('border-top-width')))]; + }, + + /* Check positioning to remain on screen. */ + _checkOffset: function(inst, offset, isFixed) { + var dpWidth = inst.dpDiv.outerWidth(); + var dpHeight = inst.dpDiv.outerHeight(); + var inputWidth = inst.input ? inst.input.outerWidth() : 0; + var inputHeight = inst.input ? inst.input.outerHeight() : 0; + var viewWidth = document.documentElement.clientWidth + $(document).scrollLeft(); + var viewHeight = document.documentElement.clientHeight + $(document).scrollTop(); + + offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0); + offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0; + offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0; + + // now check if datepicker is showing outside window viewport - move to a better place if so. + offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? + Math.abs(offset.left + dpWidth - viewWidth) : 0); + offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? + Math.abs(dpHeight + inputHeight) : 0); + + return offset; + }, + + /* Find an object's position on the screen. */ + _findPos: function(obj) { + var inst = this._getInst(obj); + var isRTL = this._get(inst, 'isRTL'); + while (obj && (obj.type == 'hidden' || obj.nodeType != 1)) { + obj = obj[isRTL ? 'previousSibling' : 'nextSibling']; + } + var position = $(obj).offset(); + return [position.left, position.top]; + }, + + /* Hide the date picker from view. + @param input element - the input field attached to the date picker */ + _hideDatepicker: function(input) { + var inst = this._curInst; + if (!inst || (input && inst != $.data(input, PROP_NAME))) + return; + if (this._datepickerShowing) { + var showAnim = this._get(inst, 'showAnim'); + var duration = this._get(inst, 'duration'); + var postProcess = function() { + $.datepicker._tidyDialog(inst); + this._curInst = null; + }; + if ($.effects && $.effects[showAnim]) + inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); + else + inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' : + (showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess); + if (!showAnim) + postProcess(); + var onClose = this._get(inst, 'onClose'); + if (onClose) + onClose.apply((inst.input ? inst.input[0] : null), + [(inst.input ? inst.input.val() : ''), inst]); // trigger custom callback + this._datepickerShowing = false; + this._lastInput = null; + if (this._inDialog) { + this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' }); + if ($.blockUI) { + $.unblockUI(); + $('body').append(this.dpDiv); + } + } + this._inDialog = false; + } + }, + + /* Tidy up after a dialog display. */ + _tidyDialog: function(inst) { + inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar'); + }, + + /* Close date picker if clicked elsewhere. */ + _checkExternalClick: function(event) { + if (!$.datepicker._curInst) + return; + var $target = $(event.target); + if ($target[0].id != $.datepicker._mainDivId && + $target.parents('#' + $.datepicker._mainDivId).length == 0 && + !$target.hasClass($.datepicker.markerClassName) && + !$target.hasClass($.datepicker._triggerClass) && + $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI)) + $.datepicker._hideDatepicker(); + }, + + /* Adjust one of the date sub-fields. */ + _adjustDate: function(id, offset, period) { + var target = $(id); + var inst = this._getInst(target[0]); + if (this._isDisabledDatepicker(target[0])) { + return; + } + this._adjustInstDate(inst, offset + + (period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning + period); + this._updateDatepicker(inst); + }, + + /* Action for current link. */ + _gotoToday: function(id) { + var target = $(id); + var inst = this._getInst(target[0]); + if (this._get(inst, 'gotoCurrent') && inst.currentDay) { + inst.selectedDay = inst.currentDay; + inst.drawMonth = inst.selectedMonth = inst.currentMonth; + inst.drawYear = inst.selectedYear = inst.currentYear; + } + else { + var date = new Date(); + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + } + this._notifyChange(inst); + this._adjustDate(target); + }, + + /* Action for selecting a new month/year. */ + _selectMonthYear: function(id, select, period) { + var target = $(id); + var inst = this._getInst(target[0]); + inst._selectingMonthYear = false; + inst['selected' + (period == 'M' ? 'Month' : 'Year')] = + inst['draw' + (period == 'M' ? 'Month' : 'Year')] = + parseInt(select.options[select.selectedIndex].value,10); + this._notifyChange(inst); + this._adjustDate(target); + }, + + /* Restore input focus after not changing month/year. */ + _clickMonthYear: function(id) { + var target = $(id); + var inst = this._getInst(target[0]); + if (inst.input && inst._selectingMonthYear && !$.browser.msie) + inst.input.focus(); + inst._selectingMonthYear = !inst._selectingMonthYear; + }, + + /* Action for selecting a day. */ + _selectDay: function(id, month, year, td) { + var target = $(id); + if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) { + return; + } + var inst = this._getInst(target[0]); + inst.selectedDay = inst.currentDay = $('a', td).html(); + inst.selectedMonth = inst.currentMonth = month; + inst.selectedYear = inst.currentYear = year; + this._selectDate(id, this._formatDate(inst, + inst.currentDay, inst.currentMonth, inst.currentYear)); + }, + + /* Erase the input field and hide the date picker. */ + _clearDate: function(id) { + var target = $(id); + var inst = this._getInst(target[0]); + this._selectDate(target, ''); + }, + + /* Update the input field with the selected date. */ + _selectDate: function(id, dateStr) { + var target = $(id); + var inst = this._getInst(target[0]); + dateStr = (dateStr != null ? dateStr : this._formatDate(inst)); + if (inst.input) + inst.input.val(dateStr); + this._updateAlternate(inst); + var onSelect = this._get(inst, 'onSelect'); + if (onSelect) + onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback + else if (inst.input) + inst.input.trigger('change'); // fire the change event + if (inst.inline) + this._updateDatepicker(inst); + else { + this._hideDatepicker(); + this._lastInput = inst.input[0]; + if (typeof(inst.input[0]) != 'object') + inst.input.focus(); // restore focus + this._lastInput = null; + } + }, + + /* Update any alternate field to synchronise with the main field. */ + _updateAlternate: function(inst) { + var altField = this._get(inst, 'altField'); + if (altField) { // update alternate field too + var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat'); + var date = this._getDate(inst); + var dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst)); + $(altField).each(function() { $(this).val(dateStr); }); + } + }, + + /* Set as beforeShowDay function to prevent selection of weekends. + @param date Date - the date to customise + @return [boolean, string] - is this date selectable?, what is its CSS class? */ + noWeekends: function(date) { + var day = date.getDay(); + return [(day > 0 && day < 6), '']; + }, + + /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. + @param date Date - the date to get the week for + @return number - the number of the week within the year that contains this date */ + iso8601Week: function(date) { + var checkDate = new Date(date.getTime()); + // Find Thursday of this week starting on Monday + checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); + var time = checkDate.getTime(); + checkDate.setMonth(0); // Compare with Jan 1 + checkDate.setDate(1); + return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; + }, + + /* Parse a string value into a date object. + See formatDate below for the possible formats. + + @param format string - the expected format of the date + @param value string - the date in the above format + @param settings Object - attributes include: + shortYearCutoff number - the cutoff year for determining the century (optional) + dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) + dayNames string[7] - names of the days from Sunday (optional) + monthNamesShort string[12] - abbreviated names of the months (optional) + monthNames string[12] - names of the months (optional) + @return Date - the extracted date value or null if value is blank */ + parseDate: function (format, value, settings) { + if (format == null || value == null) + throw 'Invalid arguments'; + value = (typeof value == 'object' ? value.toString() : value + ''); + if (value == '') + return null; + var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff; + var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; + var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; + var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; + var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; + var year = -1; + var month = -1; + var day = -1; + var doy = -1; + var literal = false; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + // Extract a number from the string value + var getNumber = function(match) { + lookAhead(match); + var size = (match == '@' ? 14 : (match == '!' ? 20 : + (match == 'y' ? 4 : (match == 'o' ? 3 : 2)))); + var digits = new RegExp('^\\d{1,' + size + '}'); + var num = value.substring(iValue).match(digits); + if (!num) + throw 'Missing number at position ' + iValue; + iValue += num[0].length; + return parseInt(num[0], 10); + }; + // Extract a name from the string value and convert to an index + var getName = function(match, shortNames, longNames) { + var names = (lookAhead(match) ? longNames : shortNames); + for (var i = 0; i < names.length; i++) { + if (value.substr(iValue, names[i].length) == names[i]) { + iValue += names[i].length; + return i + 1; + } + } + throw 'Unknown name at position ' + iValue; + }; + // Confirm that a literal character matches the string value + var checkLiteral = function() { + if (value.charAt(iValue) != format.charAt(iFormat)) + throw 'Unexpected literal at position ' + iValue; + iValue++; + }; + var iValue = 0; + for (var iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + checkLiteral(); + else + switch (format.charAt(iFormat)) { + case 'd': + day = getNumber('d'); + break; + case 'D': + getName('D', dayNamesShort, dayNames); + break; + case 'o': + doy = getNumber('o'); + break; + case 'm': + month = getNumber('m'); + break; + case 'M': + month = getName('M', monthNamesShort, monthNames); + break; + case 'y': + year = getNumber('y'); + break; + case '@': + var date = new Date(getNumber('@')); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); + break; + case '!': + var date = new Date((getNumber('!') - this._ticksTo1970) / 10000); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); + break; + case "'": + if (lookAhead("'")) + checkLiteral(); + else + literal = true; + break; + default: + checkLiteral(); + } + } + if (year == -1) + year = new Date().getFullYear(); + else if (year < 100) + year += new Date().getFullYear() - new Date().getFullYear() % 100 + + (year <= shortYearCutoff ? 0 : -100); + if (doy > -1) { + month = 1; + day = doy; + do { + var dim = this._getDaysInMonth(year, month - 1); + if (day <= dim) + break; + month++; + day -= dim; + } while (true); + } + var date = this._daylightSavingAdjust(new Date(year, month - 1, day)); + if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day) + throw 'Invalid date'; // E.g. 31/02/* + return date; + }, + + /* Standard date formats. */ + ATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601) + COOKIE: 'D, dd M yy', + ISO_8601: 'yy-mm-dd', + RFC_822: 'D, d M y', + RFC_850: 'DD, dd-M-y', + RFC_1036: 'D, d M y', + RFC_1123: 'D, d M yy', + RFC_2822: 'D, d M yy', + RSS: 'D, d M y', // RFC 822 + TICKS: '!', + TIMESTAMP: '@', + W3C: 'yy-mm-dd', // ISO 8601 + + _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000), + + /* Format a date object into a string value. + The format can be combinations of the following: + d - day of month (no leading zero) + dd - day of month (two digit) + o - day of year (no leading zeros) + oo - day of year (three digit) + D - day name short + DD - day name long + m - month of year (no leading zero) + mm - month of year (two digit) + M - month name short + MM - month name long + y - year (two digit) + yy - year (four digit) + @ - Unix timestamp (ms since 01/01/1970) + ! - Windows ticks (100ns since 01/01/0001) + '...' - literal text + '' - single quote + + @param format string - the desired format of the date + @param date Date - the date value to format + @param settings Object - attributes include: + dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) + dayNames string[7] - names of the days from Sunday (optional) + monthNamesShort string[12] - abbreviated names of the months (optional) + monthNames string[12] - names of the months (optional) + @return string - the date in the above format */ + formatDate: function (format, date, settings) { + if (!date) + return ''; + var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; + var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; + var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; + var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + // Format a number, with leading zero if necessary + var formatNumber = function(match, value, len) { + var num = '' + value; + if (lookAhead(match)) + while (num.length < len) + num = '0' + num; + return num; + }; + // Format a name, short or long as requested + var formatName = function(match, value, shortNames, longNames) { + return (lookAhead(match) ? longNames[value] : shortNames[value]); + }; + var output = ''; + var literal = false; + if (date) + for (var iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + output += format.charAt(iFormat); + else + switch (format.charAt(iFormat)) { + case 'd': + output += formatNumber('d', date.getDate(), 2); + break; + case 'D': + output += formatName('D', date.getDay(), dayNamesShort, dayNames); + break; + case 'o': + output += formatNumber('o', + (date.getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000, 3); + break; + case 'm': + output += formatNumber('m', date.getMonth() + 1, 2); + break; + case 'M': + output += formatName('M', date.getMonth(), monthNamesShort, monthNames); + break; + case 'y': + output += (lookAhead('y') ? date.getFullYear() : + (date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100); + break; + case '@': + output += date.getTime(); + break; + case '!': + output += date.getTime() * 10000 + this._ticksTo1970; + break; + case "'": + if (lookAhead("'")) + output += "'"; + else + literal = true; + break; + default: + output += format.charAt(iFormat); + } + } + return output; + }, + + /* Extract all possible characters from the date format. */ + _possibleChars: function (format) { + var chars = ''; + var literal = false; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + for (var iFormat = 0; iFormat < format.length; iFormat++) + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + chars += format.charAt(iFormat); + else + switch (format.charAt(iFormat)) { + case 'd': case 'm': case 'y': case '@': + chars += '0123456789'; + break; + case 'D': case 'M': + return null; // Accept anything + case "'": + if (lookAhead("'")) + chars += "'"; + else + literal = true; + break; + default: + chars += format.charAt(iFormat); + } + return chars; + }, + + /* Get a setting value, defaulting if necessary. */ + _get: function(inst, name) { + return inst.settings[name] !== undefined ? + inst.settings[name] : this._defaults[name]; + }, + + /* Parse existing date and initialise date picker. */ + _setDateFromField: function(inst, noDefault) { + if (inst.input.val() == inst.lastVal) { + return; + } + var dateFormat = this._get(inst, 'dateFormat'); + var dates = inst.lastVal = inst.input ? inst.input.val() : null; + var date, defaultDate; + date = defaultDate = this._getDefaultDate(inst); + var settings = this._getFormatConfig(inst); + try { + date = this.parseDate(dateFormat, dates, settings) || defaultDate; + } catch (event) { + this.log(event); + dates = (noDefault ? '' : dates); + } + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + inst.currentDay = (dates ? date.getDate() : 0); + inst.currentMonth = (dates ? date.getMonth() : 0); + inst.currentYear = (dates ? date.getFullYear() : 0); + this._adjustInstDate(inst); + }, + + /* Retrieve the default date shown on opening. */ + _getDefaultDate: function(inst) { + return this._restrictMinMax(inst, + this._determineDate(inst, this._get(inst, 'defaultDate'), new Date())); + }, + + /* A date may be specified as an exact value or a relative one. */ + _determineDate: function(inst, date, defaultDate) { + var offsetNumeric = function(offset) { + var date = new Date(); + date.setDate(date.getDate() + offset); + return date; + }; + var offsetString = function(offset) { + try { + return $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), + offset, $.datepicker._getFormatConfig(inst)); + } + catch (e) { + // Ignore + } + var date = (offset.toLowerCase().match(/^c/) ? + $.datepicker._getDate(inst) : null) || new Date(); + var year = date.getFullYear(); + var month = date.getMonth(); + var day = date.getDate(); + var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g; + var matches = pattern.exec(offset); + while (matches) { + switch (matches[2] || 'd') { + case 'd' : case 'D' : + day += parseInt(matches[1],10); break; + case 'w' : case 'W' : + day += parseInt(matches[1],10) * 7; break; + case 'm' : case 'M' : + month += parseInt(matches[1],10); + day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); + break; + case 'y': case 'Y' : + year += parseInt(matches[1],10); + day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); + break; + } + matches = pattern.exec(offset); + } + return new Date(year, month, day); + }; + date = (date == null ? defaultDate : (typeof date == 'string' ? offsetString(date) : + (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : date))); + date = (date && date.toString() == 'Invalid Date' ? defaultDate : date); + if (date) { + date.setHours(0); + date.setMinutes(0); + date.setSeconds(0); + date.setMilliseconds(0); + } + return this._daylightSavingAdjust(date); + }, + + /* Handle switch to/from daylight saving. + Hours may be non-zero on daylight saving cut-over: + > 12 when midnight changeover, but then cannot generate + midnight datetime, so jump to 1AM, otherwise reset. + @param date (Date) the date to check + @return (Date) the corrected date */ + _daylightSavingAdjust: function(date) { + if (!date) return null; + date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); + return date; + }, + + /* Set the date(s) directly. */ + _setDate: function(inst, date, noChange) { + var clear = !(date); + var origMonth = inst.selectedMonth; + var origYear = inst.selectedYear; + date = this._restrictMinMax(inst, this._determineDate(inst, date, new Date())); + inst.selectedDay = inst.currentDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = inst.currentMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = inst.currentYear = date.getFullYear(); + if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange) + this._notifyChange(inst); + this._adjustInstDate(inst); + if (inst.input) { + inst.input.val(clear ? '' : this._formatDate(inst)); + } + }, + + /* Retrieve the date(s) directly. */ + _getDate: function(inst) { + var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null : + this._daylightSavingAdjust(new Date( + inst.currentYear, inst.currentMonth, inst.currentDay))); + return startDate; + }, + + /* Generate the HTML for the current state of the date picker. */ + _generateHTML: function(inst) { + var today = new Date(); + today = this._daylightSavingAdjust( + new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time + var isRTL = this._get(inst, 'isRTL'); + var showButtonPanel = this._get(inst, 'showButtonPanel'); + var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext'); + var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat'); + var numMonths = this._getNumberOfMonths(inst); + var showCurrentAtPos = this._get(inst, 'showCurrentAtPos'); + var stepMonths = this._get(inst, 'stepMonths'); + var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1); + var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) : + new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + var drawMonth = inst.drawMonth - showCurrentAtPos; + var drawYear = inst.drawYear; + if (drawMonth < 0) { + drawMonth += 12; + drawYear--; + } + if (maxDate) { + var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), + maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate())); + maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw); + while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) { + drawMonth--; + if (drawMonth < 0) { + drawMonth = 11; + drawYear--; + } + } + } + inst.drawMonth = drawMonth; + inst.drawYear = drawYear; + var prevText = this._get(inst, 'prevText'); + prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, + this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), + this._getFormatConfig(inst))); + var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? + '' + prevText + '' : + (hideIfNoPrevNext ? '' : '' + prevText + '')); + var nextText = this._get(inst, 'nextText'); + nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, + this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), + this._getFormatConfig(inst))); + var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? + '' + nextText + '' : + (hideIfNoPrevNext ? '' : '' + nextText + '')); + var currentText = this._get(inst, 'currentText'); + var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today); + currentText = (!navigationAsDateFormat ? currentText : + this.formatDate(currentText, gotoDate, this._getFormatConfig(inst))); + var controls = (!inst.inline ? '' : ''); + var buttonPanel = (showButtonPanel) ? '
      ' + (isRTL ? controls : '') + + (this._isInRange(inst, gotoDate) ? '' : '') + (isRTL ? '' : controls) + '
      ' : ''; + var firstDay = parseInt(this._get(inst, 'firstDay'),10); + firstDay = (isNaN(firstDay) ? 0 : firstDay); + var showWeek = this._get(inst, 'showWeek'); + var dayNames = this._get(inst, 'dayNames'); + var dayNamesShort = this._get(inst, 'dayNamesShort'); + var dayNamesMin = this._get(inst, 'dayNamesMin'); + var monthNames = this._get(inst, 'monthNames'); + var monthNamesShort = this._get(inst, 'monthNamesShort'); + var beforeShowDay = this._get(inst, 'beforeShowDay'); + var showOtherMonths = this._get(inst, 'showOtherMonths'); + var selectOtherMonths = this._get(inst, 'selectOtherMonths'); + var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week; + var defaultDate = this._getDefaultDate(inst); + var html = ''; + for (var row = 0; row < numMonths[0]; row++) { + var group = ''; + for (var col = 0; col < numMonths[1]; col++) { + var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)); + var cornerClass = ' ui-corner-all'; + var calender = ''; + if (isMultiMonth) { + calender += '
      '; + } + calender += '
      ' + + (/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') + + (/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') + + this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, + row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers + '
      ' + + ''; + var thead = (showWeek ? '' : ''); + for (var dow = 0; dow < 7; dow++) { // days of the week + var day = (dow + firstDay) % 7; + thead += '= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' + + '' + dayNamesMin[day] + ''; + } + calender += thead + ''; + var daysInMonth = this._getDaysInMonth(drawYear, drawMonth); + if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth) + inst.selectedDay = Math.min(inst.selectedDay, daysInMonth); + var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; + var numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); // calculate the number of rows to generate + var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)); + for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows + calender += ''; + var tbody = (!showWeek ? '' : ''); + for (var dow = 0; dow < 7; dow++) { // create date picker days + var daySettings = (beforeShowDay ? + beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']); + var otherMonth = (printDate.getMonth() != drawMonth); + var unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] || + (minDate && printDate < minDate) || (maxDate && printDate > maxDate); + tbody += ''; // display selectable date + printDate.setDate(printDate.getDate() + 1); + printDate = this._daylightSavingAdjust(printDate); + } + calender += tbody + ''; + } + drawMonth++; + if (drawMonth > 11) { + drawMonth = 0; + drawYear++; + } + calender += '
      ' + this._get(inst, 'weekHeader') + '
      ' + + this._get(inst, 'calculateWeek')(printDate) + '' + // actions + (otherMonth && !showOtherMonths ? ' ' : // display for other months + (unselectable ? '' + printDate.getDate() + '' : '' + printDate.getDate() + '')) + '
      ' + (isMultiMonth ? '
      ' + + ((numMonths[0] > 0 && col == numMonths[1]-1) ? '
      ' : '') : ''); + group += calender; + } + html += group; + } + html += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ? + '' : ''); + inst._keyEvent = false; + return html; + }, + + /* Generate the month and year header. */ + _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, + secondary, monthNames, monthNamesShort) { + var changeMonth = this._get(inst, 'changeMonth'); + var changeYear = this._get(inst, 'changeYear'); + var showMonthAfterYear = this._get(inst, 'showMonthAfterYear'); + var html = '
      '; + var monthHtml = ''; + // month selection + if (secondary || !changeMonth) + monthHtml += '' + monthNames[drawMonth] + ''; + else { + var inMinYear = (minDate && minDate.getFullYear() == drawYear); + var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); + monthHtml += ''; + } + if (!showMonthAfterYear) + html += monthHtml + (secondary || !(changeMonth && changeYear) ? ' ' : ''); + // year selection + if (secondary || !changeYear) + html += '' + drawYear + ''; + else { + // determine range of years to display + var years = this._get(inst, 'yearRange').split(':'); + var thisYear = new Date().getFullYear(); + var determineYear = function(value) { + var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) : + (value.match(/[+-].*/) ? thisYear + parseInt(value, 10) : + parseInt(value, 10))); + return (isNaN(year) ? thisYear : year); + }; + var year = determineYear(years[0]); + var endYear = Math.max(year, determineYear(years[1] || '')); + year = (minDate ? Math.max(year, minDate.getFullYear()) : year); + endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); + html += ''; + } + html += this._get(inst, 'yearSuffix'); + if (showMonthAfterYear) + html += (secondary || !(changeMonth && changeYear) ? ' ' : '') + monthHtml; + html += '
      '; // Close datepicker_header + return html; + }, + + /* Adjust one of the date sub-fields. */ + _adjustInstDate: function(inst, offset, period) { + var year = inst.drawYear + (period == 'Y' ? offset : 0); + var month = inst.drawMonth + (period == 'M' ? offset : 0); + var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + + (period == 'D' ? offset : 0); + var date = this._restrictMinMax(inst, + this._daylightSavingAdjust(new Date(year, month, day))); + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + if (period == 'M' || period == 'Y') + this._notifyChange(inst); + }, + + /* Ensure a date is within any min/max bounds. */ + _restrictMinMax: function(inst, date) { + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + date = (minDate && date < minDate ? minDate : date); + date = (maxDate && date > maxDate ? maxDate : date); + return date; + }, + + /* Notify change of month/year. */ + _notifyChange: function(inst) { + var onChange = this._get(inst, 'onChangeMonthYear'); + if (onChange) + onChange.apply((inst.input ? inst.input[0] : null), + [inst.selectedYear, inst.selectedMonth + 1, inst]); + }, + + /* Determine the number of months to show. */ + _getNumberOfMonths: function(inst) { + var numMonths = this._get(inst, 'numberOfMonths'); + return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)); + }, + + /* Determine the current maximum date - ensure no time components are set. */ + _getMinMaxDate: function(inst, minMax) { + return this._determineDate(inst, this._get(inst, minMax + 'Date'), null); + }, + + /* Find the number of days in a given month. */ + _getDaysInMonth: function(year, month) { + return 32 - new Date(year, month, 32).getDate(); + }, + + /* Find the day of the week of the first of a month. */ + _getFirstDayOfMonth: function(year, month) { + return new Date(year, month, 1).getDay(); + }, + + /* Determines if we should allow a "next/prev" month display change. */ + _canAdjustMonth: function(inst, offset, curYear, curMonth) { + var numMonths = this._getNumberOfMonths(inst); + var date = this._daylightSavingAdjust(new Date(curYear, + curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); + if (offset < 0) + date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); + return this._isInRange(inst, date); + }, + + /* Is the given date in the accepted range? */ + _isInRange: function(inst, date) { + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + return ((!minDate || date.getTime() >= minDate.getTime()) && + (!maxDate || date.getTime() <= maxDate.getTime())); + }, + + /* Provide the configuration settings for formatting/parsing. */ + _getFormatConfig: function(inst) { + var shortYearCutoff = this._get(inst, 'shortYearCutoff'); + shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : + new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); + return {shortYearCutoff: shortYearCutoff, + dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'), + monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')}; + }, + + /* Format the given date for display. */ + _formatDate: function(inst, day, month, year) { + if (!day) { + inst.currentDay = inst.selectedDay; + inst.currentMonth = inst.selectedMonth; + inst.currentYear = inst.selectedYear; + } + var date = (day ? (typeof day == 'object' ? day : + this._daylightSavingAdjust(new Date(year, month, day))) : + this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); + return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst)); + } +}); + +/* jQuery extend now ignores nulls! */ +function extendRemove(target, props) { + $.extend(target, props); + for (var name in props) + if (props[name] == null || props[name] == undefined) + target[name] = props[name]; + return target; +}; + +/* Determine whether an object is an array. */ +function isArray(a) { + return (a && (($.browser.safari && typeof a == 'object' && a.length) || + (a.constructor && a.constructor.toString().match(/\Array\(\)/)))); +}; + +/* Invoke the datepicker functionality. + @param options string - a command, optionally followed by additional parameters or + Object - settings for attaching new datepicker functionality + @return jQuery object */ +$.fn.datepicker = function(options){ + + /* Initialise the date picker. */ + if (!$.datepicker.initialized) { + $(document).mousedown($.datepicker._checkExternalClick). + find('body').append($.datepicker.dpDiv); + $.datepicker.initialized = true; + } + + var otherArgs = Array.prototype.slice.call(arguments, 1); + if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget')) + return $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this[0]].concat(otherArgs)); + if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string') + return $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this[0]].concat(otherArgs)); + return this.each(function() { + typeof options == 'string' ? + $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this].concat(otherArgs)) : + $.datepicker._attachDatepicker(this, options); + }); +}; + +$.datepicker = new Datepicker(); // singleton instance +$.datepicker.initialized = false; +$.datepicker.uuid = new Date().getTime(); +$.datepicker.version = "1.8.2"; + +// Workaround for #4055 +// Add another global to avoid noConflict issues with inline event handlers +window['DP_jQuery_' + dpuuid] = $; + +})(jQuery); diff --git a/resources/jquery.ui/jquery.ui.dialog.js b/resources/jquery.ui/jquery.ui.dialog.js new file mode 100644 index 00000000..5f9b1f8b --- /dev/null +++ b/resources/jquery.ui/jquery.ui.dialog.js @@ -0,0 +1,823 @@ +/* + * jQuery UI Dialog 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Dialog + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.button.js + * jquery.ui.draggable.js + * jquery.ui.mouse.js + * jquery.ui.position.js + * jquery.ui.resizable.js + */ +(function($) { + +var uiDialogClasses = + 'ui-dialog ' + + 'ui-widget ' + + 'ui-widget-content ' + + 'ui-corner-all '; + +$.widget("ui.dialog", { + options: { + autoOpen: true, + buttons: {}, + closeOnEscape: true, + closeText: 'close', + dialogClass: '', + draggable: true, + hide: null, + height: 'auto', + maxHeight: false, + maxWidth: false, + minHeight: 150, + minWidth: 150, + modal: false, + position: 'center', + resizable: true, + show: null, + stack: true, + title: '', + width: 300, + zIndex: 1000 + }, + _create: function() { + this.originalTitle = this.element.attr('title'); + + var self = this, + options = self.options, + + title = options.title || self.originalTitle || ' ', + titleId = $.ui.dialog.getTitleId(self.element), + + uiDialog = (self.uiDialog = $('
      ')) + .appendTo(document.body) + .hide() + .addClass(uiDialogClasses + options.dialogClass) + .css({ + zIndex: options.zIndex + }) + // setting tabIndex makes the div focusable + // setting outline to 0 prevents a border on focus in Mozilla + .attr('tabIndex', -1).css('outline', 0).keydown(function(event) { + if (options.closeOnEscape && event.keyCode && + event.keyCode === $.ui.keyCode.ESCAPE) { + + self.close(event); + event.preventDefault(); + } + }) + .attr({ + role: 'dialog', + 'aria-labelledby': titleId + }) + .mousedown(function(event) { + self.moveToTop(false, event); + }), + + uiDialogContent = self.element + .show() + .removeAttr('title') + .addClass( + 'ui-dialog-content ' + + 'ui-widget-content') + .appendTo(uiDialog), + + uiDialogTitlebar = (self.uiDialogTitlebar = $('
      ')) + .addClass( + 'ui-dialog-titlebar ' + + 'ui-widget-header ' + + 'ui-corner-all ' + + 'ui-helper-clearfix' + ) + .prependTo(uiDialog), + + uiDialogTitlebarClose = $('') + .addClass( + 'ui-dialog-titlebar-close ' + + 'ui-corner-all' + ) + .attr('role', 'button') + .hover( + function() { + uiDialogTitlebarClose.addClass('ui-state-hover'); + }, + function() { + uiDialogTitlebarClose.removeClass('ui-state-hover'); + } + ) + .focus(function() { + uiDialogTitlebarClose.addClass('ui-state-focus'); + }) + .blur(function() { + uiDialogTitlebarClose.removeClass('ui-state-focus'); + }) + .click(function(event) { + self.close(event); + return false; + }) + .appendTo(uiDialogTitlebar), + + uiDialogTitlebarCloseText = (self.uiDialogTitlebarCloseText = $('')) + .addClass( + 'ui-icon ' + + 'ui-icon-closethick' + ) + .text(options.closeText) + .appendTo(uiDialogTitlebarClose), + + uiDialogTitle = $('') + .addClass('ui-dialog-title') + .attr('id', titleId) + .html(title) + .prependTo(uiDialogTitlebar); + + //handling of deprecated beforeclose (vs beforeClose) option + //Ticket #4669 http://dev.jqueryui.com/ticket/4669 + //TODO: remove in 1.9pre + if ($.isFunction(options.beforeclose) && !$.isFunction(options.beforeClose)) { + options.beforeClose = options.beforeclose; + } + + uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection(); + + if (options.draggable && $.fn.draggable) { + self._makeDraggable(); + } + if (options.resizable && $.fn.resizable) { + self._makeResizable(); + } + + self._createButtons(options.buttons); + self._isOpen = false; + + if ($.fn.bgiframe) { + uiDialog.bgiframe(); + } + }, + _init: function() { + if ( this.options.autoOpen ) { + this.open(); + } + }, + + destroy: function() { + var self = this; + + if (self.overlay) { + self.overlay.destroy(); + } + self.uiDialog.hide(); + self.element + .unbind('.dialog') + .removeData('dialog') + .removeClass('ui-dialog-content ui-widget-content') + .hide().appendTo('body'); + self.uiDialog.remove(); + + if (self.originalTitle) { + self.element.attr('title', self.originalTitle); + } + + return self; + }, + + widget: function() { + return this.uiDialog; + }, + + close: function(event) { + var self = this, + maxZ; + + if (false === self._trigger('beforeClose', event)) { + return; + } + + if (self.overlay) { + self.overlay.destroy(); + } + self.uiDialog.unbind('keypress.ui-dialog'); + + self._isOpen = false; + + if (self.options.hide) { + self.uiDialog.hide(self.options.hide, function() { + self._trigger('close', event); + }); + } else { + self.uiDialog.hide(); + self._trigger('close', event); + } + + $.ui.dialog.overlay.resize(); + + // adjust the maxZ to allow other modal dialogs to continue to work (see #4309) + if (self.options.modal) { + maxZ = 0; + $('.ui-dialog').each(function() { + if (this !== self.uiDialog[0]) { + maxZ = Math.max(maxZ, $(this).css('z-index')); + } + }); + $.ui.dialog.maxZ = maxZ; + } + + return self; + }, + + isOpen: function() { + return this._isOpen; + }, + + // the force parameter allows us to move modal dialogs to their correct + // position on open + moveToTop: function(force, event) { + var self = this, + options = self.options, + saveScroll; + + if ((options.modal && !force) || + (!options.stack && !options.modal)) { + return self._trigger('focus', event); + } + + if (options.zIndex > $.ui.dialog.maxZ) { + $.ui.dialog.maxZ = options.zIndex; + } + if (self.overlay) { + $.ui.dialog.maxZ += 1; + self.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ); + } + + //Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed. + // http://ui.jquery.com/bugs/ticket/3193 + saveScroll = { scrollTop: self.element.attr('scrollTop'), scrollLeft: self.element.attr('scrollLeft') }; + $.ui.dialog.maxZ += 1; + self.uiDialog.css('z-index', $.ui.dialog.maxZ); + self.element.attr(saveScroll); + self._trigger('focus', event); + + return self; + }, + + open: function() { + if (this._isOpen) { return; } + + var self = this, + options = self.options, + uiDialog = self.uiDialog; + + self.overlay = options.modal ? new $.ui.dialog.overlay(self) : null; + if (uiDialog.next().length) { + uiDialog.appendTo('body'); + } + self._size(); + self._position(options.position); + uiDialog.show(options.show); + self.moveToTop(true); + + // prevent tabbing out of modal dialogs + if (options.modal) { + uiDialog.bind('keypress.ui-dialog', function(event) { + if (event.keyCode !== $.ui.keyCode.TAB) { + return; + } + + var tabbables = $(':tabbable', this), + first = tabbables.filter(':first'), + last = tabbables.filter(':last'); + + if (event.target === last[0] && !event.shiftKey) { + first.focus(1); + return false; + } else if (event.target === first[0] && event.shiftKey) { + last.focus(1); + return false; + } + }); + } + + // set focus to the first tabbable element in the content area or the first button + // if there are no tabbable elements, set focus on the dialog itself + $([]) + .add(uiDialog.find('.ui-dialog-content :tabbable:first')) + .add(uiDialog.find('.ui-dialog-buttonpane :tabbable:first')) + .add(uiDialog) + .filter(':first') + .focus(); + + self._trigger('open'); + self._isOpen = true; + + return self; + }, + + _createButtons: function(buttons) { + var self = this, + hasButtons = false, + uiDialogButtonPane = $('
      ') + .addClass( + 'ui-dialog-buttonpane ' + + 'ui-widget-content ' + + 'ui-helper-clearfix' + ); + + // if we already have a button pane, remove it + self.uiDialog.find('.ui-dialog-buttonpane').remove(); + + if (typeof buttons === 'object' && buttons !== null) { + $.each(buttons, function() { + return !(hasButtons = true); + }); + } + if (hasButtons) { + $.each(buttons, function(name, fn) { + var button = $('') + .text(name) + .click(function() { fn.apply(self.element[0], arguments); }) + .appendTo(uiDialogButtonPane); + if ($.fn.button) { + button.button(); + } + }); + uiDialogButtonPane.appendTo(self.uiDialog); + } + }, + + _makeDraggable: function() { + var self = this, + options = self.options, + doc = $(document), + heightBeforeDrag; + + function filteredUi(ui) { + return { + position: ui.position, + offset: ui.offset + }; + } + + self.uiDialog.draggable({ + cancel: '.ui-dialog-content, .ui-dialog-titlebar-close', + handle: '.ui-dialog-titlebar', + containment: 'document', + start: function(event, ui) { + heightBeforeDrag = options.height === "auto" ? "auto" : $(this).height(); + $(this).height($(this).height()).addClass("ui-dialog-dragging"); + self._trigger('dragStart', event, filteredUi(ui)); + }, + drag: function(event, ui) { + self._trigger('drag', event, filteredUi(ui)); + }, + stop: function(event, ui) { + options.position = [ui.position.left - doc.scrollLeft(), + ui.position.top - doc.scrollTop()]; + $(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag); + self._trigger('dragStop', event, filteredUi(ui)); + $.ui.dialog.overlay.resize(); + } + }); + }, + + _makeResizable: function(handles) { + handles = (handles === undefined ? this.options.resizable : handles); + var self = this, + options = self.options, + // .ui-resizable has position: relative defined in the stylesheet + // but dialogs have to use absolute or fixed positioning + position = self.uiDialog.css('position'), + resizeHandles = (typeof handles === 'string' ? + handles : + 'n,e,s,w,se,sw,ne,nw' + ); + + function filteredUi(ui) { + return { + originalPosition: ui.originalPosition, + originalSize: ui.originalSize, + position: ui.position, + size: ui.size + }; + } + + self.uiDialog.resizable({ + cancel: '.ui-dialog-content', + containment: 'document', + alsoResize: self.element, + maxWidth: options.maxWidth, + maxHeight: options.maxHeight, + minWidth: options.minWidth, + minHeight: self._minHeight(), + handles: resizeHandles, + start: function(event, ui) { + $(this).addClass("ui-dialog-resizing"); + self._trigger('resizeStart', event, filteredUi(ui)); + }, + resize: function(event, ui) { + self._trigger('resize', event, filteredUi(ui)); + }, + stop: function(event, ui) { + $(this).removeClass("ui-dialog-resizing"); + options.height = $(this).height(); + options.width = $(this).width(); + self._trigger('resizeStop', event, filteredUi(ui)); + $.ui.dialog.overlay.resize(); + } + }) + .css('position', position) + .find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se'); + }, + + _minHeight: function() { + var options = this.options; + + if (options.height === 'auto') { + return options.minHeight; + } else { + return Math.min(options.minHeight, options.height); + } + }, + + _position: function(position) { + var myAt = [], + offset = [0, 0], + isVisible; + + position = position || $.ui.dialog.prototype.options.position; + + // deep extending converts arrays to objects in jQuery <= 1.3.2 :-( +// if (typeof position == 'string' || $.isArray(position)) { +// myAt = $.isArray(position) ? position : position.split(' '); + + if (typeof position === 'string' || (typeof position === 'object' && '0' in position)) { + myAt = position.split ? position.split(' ') : [position[0], position[1]]; + if (myAt.length === 1) { + myAt[1] = myAt[0]; + } + + $.each(['left', 'top'], function(i, offsetPosition) { + if (+myAt[i] === myAt[i]) { + offset[i] = myAt[i]; + myAt[i] = offsetPosition; + } + }); + } else if (typeof position === 'object') { + if ('left' in position) { + myAt[0] = 'left'; + offset[0] = position.left; + } else if ('right' in position) { + myAt[0] = 'right'; + offset[0] = -position.right; + } + + if ('top' in position) { + myAt[1] = 'top'; + offset[1] = position.top; + } else if ('bottom' in position) { + myAt[1] = 'bottom'; + offset[1] = -position.bottom; + } + } + + // need to show the dialog to get the actual offset in the position plugin + isVisible = this.uiDialog.is(':visible'); + if (!isVisible) { + this.uiDialog.show(); + } + this.uiDialog + // workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781 + .css({ top: 0, left: 0 }) + .position({ + my: myAt.join(' '), + at: myAt.join(' '), + offset: offset.join(' '), + of: window, + collision: 'fit', + // ensure that the titlebar is never outside the document + using: function(pos) { + var topOffset = $(this).css(pos).offset().top; + if (topOffset < 0) { + $(this).css('top', pos.top - topOffset); + } + } + }); + if (!isVisible) { + this.uiDialog.hide(); + } + }, + + _setOption: function(key, value){ + var self = this, + uiDialog = self.uiDialog, + isResizable = uiDialog.is(':data(resizable)'), + resize = false; + + switch (key) { + //handling of deprecated beforeclose (vs beforeClose) option + //Ticket #4669 http://dev.jqueryui.com/ticket/4669 + //TODO: remove in 1.9pre + case "beforeclose": + key = "beforeClose"; + break; + case "buttons": + self._createButtons(value); + break; + case "closeText": + // convert whatever was passed in to a string, for text() to not throw up + self.uiDialogTitlebarCloseText.text("" + value); + break; + case "dialogClass": + uiDialog + .removeClass(self.options.dialogClass) + .addClass(uiDialogClasses + value); + break; + case "disabled": + if (value) { + uiDialog.addClass('ui-dialog-disabled'); + } else { + uiDialog.removeClass('ui-dialog-disabled'); + } + break; + case "draggable": + if (value) { + self._makeDraggable(); + } else { + uiDialog.draggable('destroy'); + } + break; + case "height": + resize = true; + break; + case "maxHeight": + if (isResizable) { + uiDialog.resizable('option', 'maxHeight', value); + } + resize = true; + break; + case "maxWidth": + if (isResizable) { + uiDialog.resizable('option', 'maxWidth', value); + } + resize = true; + break; + case "minHeight": + if (isResizable) { + uiDialog.resizable('option', 'minHeight', value); + } + resize = true; + break; + case "minWidth": + if (isResizable) { + uiDialog.resizable('option', 'minWidth', value); + } + resize = true; + break; + case "position": + self._position(value); + break; + case "resizable": + // currently resizable, becoming non-resizable + if (isResizable && !value) { + uiDialog.resizable('destroy'); + } + + // currently resizable, changing handles + if (isResizable && typeof value === 'string') { + uiDialog.resizable('option', 'handles', value); + } + + // currently non-resizable, becoming resizable + if (!isResizable && value !== false) { + self._makeResizable(value); + } + break; + case "title": + // convert whatever was passed in o a string, for html() to not throw up + $(".ui-dialog-title", self.uiDialogTitlebar).html("" + (value || ' ')); + break; + case "width": + resize = true; + break; + } + + $.Widget.prototype._setOption.apply(self, arguments); + if (resize) { + self._size(); + } + }, + + _size: function() { + /* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content + * divs will both have width and height set, so we need to reset them + */ + var options = this.options, + nonContentHeight; + + // reset content sizing + // hide for non content measurement because height: 0 doesn't work in IE quirks mode (see #4350) + this.element.css({ + width: 'auto', + minHeight: 0, + height: 0 + }); + + // reset wrapper sizing + // determine the height of all the non-content elements + nonContentHeight = this.uiDialog.css({ + height: 'auto', + width: options.width + }) + .height(); + + this.element + .css(options.height === 'auto' ? { + minHeight: Math.max(options.minHeight - nonContentHeight, 0), + height: 'auto' + } : { + minHeight: 0, + height: Math.max(options.height - nonContentHeight, 0) + }) + .show(); + + if (this.uiDialog.is(':data(resizable)')) { + this.uiDialog.resizable('option', 'minHeight', this._minHeight()); + } + } +}); + +$.extend($.ui.dialog, { + version: "1.8.2", + + uuid: 0, + maxZ: 0, + + getTitleId: function($el) { + var id = $el.attr('id'); + if (!id) { + this.uuid += 1; + id = this.uuid; + } + return 'ui-dialog-title-' + id; + }, + + overlay: function(dialog) { + this.$el = $.ui.dialog.overlay.create(dialog); + } +}); + +$.extend($.ui.dialog.overlay, { + instances: [], + // reuse old instances due to IE memory leak with alpha transparency (see #5185) + oldInstances: [], + maxZ: 0, + events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','), + function(event) { return event + '.dialog-overlay'; }).join(' '), + create: function(dialog) { + if (this.instances.length === 0) { + // prevent use of anchors and inputs + // we use a setTimeout in case the overlay is created from an + // event that we're going to be cancelling (see #2804) + setTimeout(function() { + // handle $(el).dialog().dialog('close') (see #4065) + if ($.ui.dialog.overlay.instances.length) { + $(document).bind($.ui.dialog.overlay.events, function(event) { + // stop events if the z-index of the target is < the z-index of the overlay + return ($(event.target).zIndex() >= $.ui.dialog.overlay.maxZ); + }); + } + }, 1); + + // allow closing by pressing the escape key + $(document).bind('keydown.dialog-overlay', function(event) { + if (dialog.options.closeOnEscape && event.keyCode && + event.keyCode === $.ui.keyCode.ESCAPE) { + + dialog.close(event); + event.preventDefault(); + } + }); + + // handle window resize + $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize); + } + + var $el = (this.oldInstances.pop() || $('
      ').addClass('ui-widget-overlay')) + .appendTo(document.body) + .css({ + width: this.width(), + height: this.height() + }); + + if ($.fn.bgiframe) { + $el.bgiframe(); + } + + this.instances.push($el); + return $el; + }, + + destroy: function($el) { + this.oldInstances.push(this.instances.splice($.inArray($el, this.instances), 1)[0]); + + if (this.instances.length === 0) { + $([document, window]).unbind('.dialog-overlay'); + } + + $el.remove(); + + // adjust the maxZ to allow other modal dialogs to continue to work (see #4309) + var maxZ = 0; + $.each(this.instances, function() { + maxZ = Math.max(maxZ, this.css('z-index')); + }); + this.maxZ = maxZ; + }, + + height: function() { + var scrollHeight, + offsetHeight; + // handle IE 6 + if ($.browser.msie && $.browser.version < 7) { + scrollHeight = Math.max( + document.documentElement.scrollHeight, + document.body.scrollHeight + ); + offsetHeight = Math.max( + document.documentElement.offsetHeight, + document.body.offsetHeight + ); + + if (scrollHeight < offsetHeight) { + return $(window).height() + 'px'; + } else { + return scrollHeight + 'px'; + } + // handle "good" browsers + } else { + return $(document).height() + 'px'; + } + }, + + width: function() { + var scrollWidth, + offsetWidth; + // handle IE 6 + if ($.browser.msie && $.browser.version < 7) { + scrollWidth = Math.max( + document.documentElement.scrollWidth, + document.body.scrollWidth + ); + offsetWidth = Math.max( + document.documentElement.offsetWidth, + document.body.offsetWidth + ); + + if (scrollWidth < offsetWidth) { + return $(window).width() + 'px'; + } else { + return scrollWidth + 'px'; + } + // handle "good" browsers + } else { + return $(document).width() + 'px'; + } + }, + + resize: function() { + /* If the dialog is draggable and the user drags it past the + * right edge of the window, the document becomes wider so we + * need to stretch the overlay. If the user then drags the + * dialog back to the left, the document will become narrower, + * so we need to shrink the overlay to the appropriate size. + * This is handled by shrinking the overlay before setting it + * to the full document size. + */ + var $overlays = $([]); + $.each($.ui.dialog.overlay.instances, function() { + $overlays = $overlays.add(this); + }); + + $overlays.css({ + width: 0, + height: 0 + }).css({ + width: $.ui.dialog.overlay.width(), + height: $.ui.dialog.overlay.height() + }); + } +}); + +$.extend($.ui.dialog.overlay.prototype, { + destroy: function() { + $.ui.dialog.overlay.destroy(this.$el); + } +}); + +}(jQuery)); diff --git a/resources/jquery.ui/jquery.ui.draggable.js b/resources/jquery.ui/jquery.ui.draggable.js new file mode 100644 index 00000000..b4c1070d --- /dev/null +++ b/resources/jquery.ui/jquery.ui.draggable.js @@ -0,0 +1,797 @@ +/* + * jQuery UI Draggable 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Draggables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function($) { + +$.widget("ui.draggable", $.ui.mouse, { + widgetEventPrefix: "drag", + options: { + addClasses: true, + appendTo: "parent", + axis: false, + connectToSortable: false, + containment: false, + cursor: "auto", + cursorAt: false, + grid: false, + handle: false, + helper: "original", + iframeFix: false, + opacity: false, + refreshPositions: false, + revert: false, + revertDuration: 500, + scope: "default", + scroll: true, + scrollSensitivity: 20, + scrollSpeed: 20, + snap: false, + snapMode: "both", + snapTolerance: 20, + stack: false, + zIndex: false + }, + _create: function() { + + if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position"))) + this.element[0].style.position = 'relative'; + + (this.options.addClasses && this.element.addClass("ui-draggable")); + (this.options.disabled && this.element.addClass("ui-draggable-disabled")); + + this._mouseInit(); + + }, + + destroy: function() { + if(!this.element.data('draggable')) return; + this.element + .removeData("draggable") + .unbind(".draggable") + .removeClass("ui-draggable" + + " ui-draggable-dragging" + + " ui-draggable-disabled"); + this._mouseDestroy(); + + return this; + }, + + _mouseCapture: function(event) { + + var o = this.options; + + // among others, prevent a drag on a resizable-handle + if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle')) + return false; + + //Quit if we're not on a valid handle + this.handle = this._getHandle(event); + if (!this.handle) + return false; + + return true; + + }, + + _mouseStart: function(event) { + + var o = this.options; + + //Create and append the visible helper + this.helper = this._createHelper(event); + + //Cache the helper size + this._cacheHelperProportions(); + + //If ddmanager is used for droppables, set the global draggable + if($.ui.ddmanager) + $.ui.ddmanager.current = this; + + /* + * - Position generation - + * This block generates everything position related - it's the core of draggables. + */ + + //Cache the margins of the original element + this._cacheMargins(); + + //Store the helper's css position + this.cssPosition = this.helper.css("position"); + this.scrollParent = this.helper.scrollParent(); + + //The element's absolute position on the page minus margins + this.offset = this.positionAbs = this.element.offset(); + this.offset = { + top: this.offset.top - this.margins.top, + left: this.offset.left - this.margins.left + }; + + $.extend(this.offset, { + click: { //Where the click happened, relative to the element + left: event.pageX - this.offset.left, + top: event.pageY - this.offset.top + }, + parent: this._getParentOffset(), + relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper + }); + + //Generate the original position + this.originalPosition = this.position = this._generatePosition(event); + this.originalPageX = event.pageX; + this.originalPageY = event.pageY; + + //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied + (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); + + //Set a containment if given in the options + if(o.containment) + this._setContainment(); + + //Trigger event + callbacks + if(this._trigger("start", event) === false) { + this._clear(); + return false; + } + + //Recache the helper size + this._cacheHelperProportions(); + + //Prepare the droppable offsets + if ($.ui.ddmanager && !o.dropBehaviour) + $.ui.ddmanager.prepareOffsets(this, event); + + this.helper.addClass("ui-draggable-dragging"); + this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position + return true; + }, + + _mouseDrag: function(event, noPropagation) { + + //Compute the helpers position + this.position = this._generatePosition(event); + this.positionAbs = this._convertPositionTo("absolute"); + + //Call plugins and callbacks and use the resulting position if something is returned + if (!noPropagation) { + var ui = this._uiHash(); + if(this._trigger('drag', event, ui) === false) { + this._mouseUp({}); + return false; + } + this.position = ui.position; + } + + if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px'; + if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px'; + if($.ui.ddmanager) $.ui.ddmanager.drag(this, event); + + return false; + }, + + _mouseStop: function(event) { + + //If we are using droppables, inform the manager about the drop + var dropped = false; + if ($.ui.ddmanager && !this.options.dropBehaviour) + dropped = $.ui.ddmanager.drop(this, event); + + //if a drop comes from outside (a sortable) + if(this.dropped) { + dropped = this.dropped; + this.dropped = false; + } + + //if the original element is removed, don't bother to continue + if(!this.element[0] || !this.element[0].parentNode) + return false; + + if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) { + var self = this; + $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() { + if(self._trigger("stop", event) !== false) { + self._clear(); + } + }); + } else { + if(this._trigger("stop", event) !== false) { + this._clear(); + } + } + + return false; + }, + + cancel: function() { + + if(this.helper.is(".ui-draggable-dragging")) { + this._mouseUp({}); + } else { + this._clear(); + } + + return this; + + }, + + _getHandle: function(event) { + + var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false; + $(this.options.handle, this.element) + .find("*") + .andSelf() + .each(function() { + if(this == event.target) handle = true; + }); + + return handle; + + }, + + _createHelper: function(event) { + + var o = this.options; + var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone() : this.element); + + if(!helper.parents('body').length) + helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo)); + + if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) + helper.css("position", "absolute"); + + return helper; + + }, + + _adjustOffsetFromHelper: function(obj) { + if (typeof obj == 'string') { + obj = obj.split(' '); + } + if ($.isArray(obj)) { + obj = {left: +obj[0], top: +obj[1] || 0}; + } + if ('left' in obj) { + this.offset.click.left = obj.left + this.margins.left; + } + if ('right' in obj) { + this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; + } + if ('top' in obj) { + this.offset.click.top = obj.top + this.margins.top; + } + if ('bottom' in obj) { + this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; + } + }, + + _getParentOffset: function() { + + //Get the offsetParent and cache its position + this.offsetParent = this.helper.offsetParent(); + var po = this.offsetParent.offset(); + + // This is a special case where we need to modify a offset calculated on start, since the following happened: + // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent + // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that + // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag + if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) { + po.left += this.scrollParent.scrollLeft(); + po.top += this.scrollParent.scrollTop(); + } + + if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information + || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix + po = { top: 0, left: 0 }; + + return { + top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), + left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) + }; + + }, + + _getRelativeOffset: function() { + + if(this.cssPosition == "relative") { + var p = this.element.position(); + return { + top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), + left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() + }; + } else { + return { top: 0, left: 0 }; + } + + }, + + _cacheMargins: function() { + this.margins = { + left: (parseInt(this.element.css("marginLeft"),10) || 0), + top: (parseInt(this.element.css("marginTop"),10) || 0) + }; + }, + + _cacheHelperProportions: function() { + this.helperProportions = { + width: this.helper.outerWidth(), + height: this.helper.outerHeight() + }; + }, + + _setContainment: function() { + + var o = this.options; + if(o.containment == 'parent') o.containment = this.helper[0].parentNode; + if(o.containment == 'document' || o.containment == 'window') this.containment = [ + 0 - this.offset.relative.left - this.offset.parent.left, + 0 - this.offset.relative.top - this.offset.parent.top, + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left, + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top + ]; + + if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) { + var ce = $(o.containment)[0]; if(!ce) return; + var co = $(o.containment).offset(); + var over = ($(ce).css("overflow") != 'hidden'); + + this.containment = [ + co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left, + co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top, + co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left, + co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top + ]; + } else if(o.containment.constructor == Array) { + this.containment = o.containment; + } + + }, + + _convertPositionTo: function(d, pos) { + + if(!pos) pos = this.position; + var mod = d == "absolute" ? 1 : -1; + var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + + return { + top: ( + pos.top // The absolute mouse position + + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent + + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border) + - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) + ), + left: ( + pos.left // The absolute mouse position + + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent + + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border) + - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) + ) + }; + + }, + + _generatePosition: function(event) { + + var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + var pageX = event.pageX; + var pageY = event.pageY; + + /* + * - Position constraining - + * Constrain the position to a mix of grid, containment. + */ + + if(this.originalPosition) { //If we are not dragging yet, we won't check for options + + if(this.containment) { + if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left; + if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top; + if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left; + if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top; + } + + if(o.grid) { + var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1]; + pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; + + var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0]; + pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; + } + + } + + return { + top: ( + pageY // The absolute mouse position + - this.offset.click.top // Click offset (relative to the element) + - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent + - this.offset.parent.top // The offsetParent's offset without borders (offset + border) + + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) + ), + left: ( + pageX // The absolute mouse position + - this.offset.click.left // Click offset (relative to the element) + - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent + - this.offset.parent.left // The offsetParent's offset without borders (offset + border) + + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) + ) + }; + + }, + + _clear: function() { + this.helper.removeClass("ui-draggable-dragging"); + if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove(); + //if($.ui.ddmanager) $.ui.ddmanager.current = null; + this.helper = null; + this.cancelHelperRemoval = false; + }, + + // From now on bulk stuff - mainly helpers + + _trigger: function(type, event, ui) { + ui = ui || this._uiHash(); + $.ui.plugin.call(this, type, [event, ui]); + if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins + return $.Widget.prototype._trigger.call(this, type, event, ui); + }, + + plugins: {}, + + _uiHash: function(event) { + return { + helper: this.helper, + position: this.position, + originalPosition: this.originalPosition, + offset: this.positionAbs + }; + } + +}); + +$.extend($.ui.draggable, { + version: "1.8.2" +}); + +$.ui.plugin.add("draggable", "connectToSortable", { + start: function(event, ui) { + + var inst = $(this).data("draggable"), o = inst.options, + uiSortable = $.extend({}, ui, { item: inst.element }); + inst.sortables = []; + $(o.connectToSortable).each(function() { + var sortable = $.data(this, 'sortable'); + if (sortable && !sortable.options.disabled) { + inst.sortables.push({ + instance: sortable, + shouldRevert: sortable.options.revert + }); + sortable._refreshItems(); //Do a one-time refresh at start to refresh the containerCache + sortable._trigger("activate", event, uiSortable); + } + }); + + }, + stop: function(event, ui) { + + //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper + var inst = $(this).data("draggable"), + uiSortable = $.extend({}, ui, { item: inst.element }); + + $.each(inst.sortables, function() { + if(this.instance.isOver) { + + this.instance.isOver = 0; + + inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance + this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work) + + //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid' + if(this.shouldRevert) this.instance.options.revert = true; + + //Trigger the stop of the sortable + this.instance._mouseStop(event); + + this.instance.options.helper = this.instance.options._helper; + + //If the helper has been the original item, restore properties in the sortable + if(inst.options.helper == 'original') + this.instance.currentItem.css({ top: 'auto', left: 'auto' }); + + } else { + this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance + this.instance._trigger("deactivate", event, uiSortable); + } + + }); + + }, + drag: function(event, ui) { + + var inst = $(this).data("draggable"), self = this; + + var checkPos = function(o) { + var dyClick = this.offset.click.top, dxClick = this.offset.click.left; + var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left; + var itemHeight = o.height, itemWidth = o.width; + var itemTop = o.top, itemLeft = o.left; + + return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth); + }; + + $.each(inst.sortables, function(i) { + + //Copy over some variables to allow calling the sortable's native _intersectsWith + this.instance.positionAbs = inst.positionAbs; + this.instance.helperProportions = inst.helperProportions; + this.instance.offset.click = inst.offset.click; + + if(this.instance._intersectsWith(this.instance.containerCache)) { + + //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once + if(!this.instance.isOver) { + + this.instance.isOver = 1; + //Now we fake the start of dragging for the sortable instance, + //by cloning the list group item, appending it to the sortable and using it as inst.currentItem + //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one) + this.instance.currentItem = $(self).clone().appendTo(this.instance.element).data("sortable-item", true); + this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it + this.instance.options.helper = function() { return ui.helper[0]; }; + + event.target = this.instance.currentItem[0]; + this.instance._mouseCapture(event, true); + this.instance._mouseStart(event, true, true); + + //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes + this.instance.offset.click.top = inst.offset.click.top; + this.instance.offset.click.left = inst.offset.click.left; + this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left; + this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top; + + inst._trigger("toSortable", event); + inst.dropped = this.instance.element; //draggable revert needs that + //hack so receive/update callbacks work (mostly) + inst.currentItem = inst.element; + this.instance.fromOutside = inst; + + } + + //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable + if(this.instance.currentItem) this.instance._mouseDrag(event); + + } else { + + //If it doesn't intersect with the sortable, and it intersected before, + //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval + if(this.instance.isOver) { + + this.instance.isOver = 0; + this.instance.cancelHelperRemoval = true; + + //Prevent reverting on this forced stop + this.instance.options.revert = false; + + // The out event needs to be triggered independently + this.instance._trigger('out', event, this.instance._uiHash(this.instance)); + + this.instance._mouseStop(event, true); + this.instance.options.helper = this.instance.options._helper; + + //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size + this.instance.currentItem.remove(); + if(this.instance.placeholder) this.instance.placeholder.remove(); + + inst._trigger("fromSortable", event); + inst.dropped = false; //draggable revert needs that + } + + }; + + }); + + } +}); + +$.ui.plugin.add("draggable", "cursor", { + start: function(event, ui) { + var t = $('body'), o = $(this).data('draggable').options; + if (t.css("cursor")) o._cursor = t.css("cursor"); + t.css("cursor", o.cursor); + }, + stop: function(event, ui) { + var o = $(this).data('draggable').options; + if (o._cursor) $('body').css("cursor", o._cursor); + } +}); + +$.ui.plugin.add("draggable", "iframeFix", { + start: function(event, ui) { + var o = $(this).data('draggable').options; + $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() { + $('
      ') + .css({ + width: this.offsetWidth+"px", height: this.offsetHeight+"px", + position: "absolute", opacity: "0.001", zIndex: 1000 + }) + .css($(this).offset()) + .appendTo("body"); + }); + }, + stop: function(event, ui) { + $("div.ui-draggable-iframeFix").each(function() { this.parentNode.removeChild(this); }); //Remove frame helpers + } +}); + +$.ui.plugin.add("draggable", "opacity", { + start: function(event, ui) { + var t = $(ui.helper), o = $(this).data('draggable').options; + if(t.css("opacity")) o._opacity = t.css("opacity"); + t.css('opacity', o.opacity); + }, + stop: function(event, ui) { + var o = $(this).data('draggable').options; + if(o._opacity) $(ui.helper).css('opacity', o._opacity); + } +}); + +$.ui.plugin.add("draggable", "scroll", { + start: function(event, ui) { + var i = $(this).data("draggable"); + if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset(); + }, + drag: function(event, ui) { + + var i = $(this).data("draggable"), o = i.options, scrolled = false; + + if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') { + + if(!o.axis || o.axis != 'x') { + if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) + i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed; + else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) + i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed; + } + + if(!o.axis || o.axis != 'y') { + if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) + i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed; + else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) + i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed; + } + + } else { + + if(!o.axis || o.axis != 'x') { + if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) + scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); + else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) + scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); + } + + if(!o.axis || o.axis != 'y') { + if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) + scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); + else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) + scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); + } + + } + + if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) + $.ui.ddmanager.prepareOffsets(i, event); + + } +}); + +$.ui.plugin.add("draggable", "snap", { + start: function(event, ui) { + + var i = $(this).data("draggable"), o = i.options; + i.snapElements = []; + + $(o.snap.constructor != String ? ( o.snap.items || ':data(draggable)' ) : o.snap).each(function() { + var $t = $(this); var $o = $t.offset(); + if(this != i.element[0]) i.snapElements.push({ + item: this, + width: $t.outerWidth(), height: $t.outerHeight(), + top: $o.top, left: $o.left + }); + }); + + }, + drag: function(event, ui) { + + var inst = $(this).data("draggable"), o = inst.options; + var d = o.snapTolerance; + + var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width, + y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height; + + for (var i = inst.snapElements.length - 1; i >= 0; i--){ + + var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width, + t = inst.snapElements[i].top, b = t + inst.snapElements[i].height; + + //Yes, I know, this is insane ;) + if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) { + if(inst.snapElements[i].snapping) (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); + inst.snapElements[i].snapping = false; + continue; + } + + if(o.snapMode != 'inner') { + var ts = Math.abs(t - y2) <= d; + var bs = Math.abs(b - y1) <= d; + var ls = Math.abs(l - x2) <= d; + var rs = Math.abs(r - x1) <= d; + if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top; + if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top; + if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left; + if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left; + } + + var first = (ts || bs || ls || rs); + + if(o.snapMode != 'outer') { + var ts = Math.abs(t - y1) <= d; + var bs = Math.abs(b - y2) <= d; + var ls = Math.abs(l - x1) <= d; + var rs = Math.abs(r - x2) <= d; + if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top; + if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top; + if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left; + if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left; + } + + if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) + (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); + inst.snapElements[i].snapping = (ts || bs || ls || rs || first); + + }; + + } +}); + +$.ui.plugin.add("draggable", "stack", { + start: function(event, ui) { + + var o = $(this).data("draggable").options; + + var group = $.makeArray($(o.stack)).sort(function(a,b) { + return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0); + }); + if (!group.length) { return; } + + var min = parseInt(group[0].style.zIndex) || 0; + $(group).each(function(i) { + this.style.zIndex = min + i; + }); + + this[0].style.zIndex = min + group.length; + + } +}); + +$.ui.plugin.add("draggable", "zIndex", { + start: function(event, ui) { + var t = $(ui.helper), o = $(this).data("draggable").options; + if(t.css("zIndex")) o._zIndex = t.css("zIndex"); + t.css('zIndex', o.zIndex); + }, + stop: function(event, ui) { + var o = $(this).data("draggable").options; + if(o._zIndex) $(ui.helper).css('zIndex', o._zIndex); + } +}); + +})(jQuery); diff --git a/resources/jquery.ui/jquery.ui.droppable.js b/resources/jquery.ui/jquery.ui.droppable.js new file mode 100644 index 00000000..b6a15fdf --- /dev/null +++ b/resources/jquery.ui/jquery.ui.droppable.js @@ -0,0 +1,285 @@ +/* + * jQuery UI Droppable 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Droppables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.mouse.js + * jquery.ui.draggable.js + */ +(function($) { + +$.widget("ui.droppable", { + widgetEventPrefix: "drop", + options: { + accept: '*', + activeClass: false, + addClasses: true, + greedy: false, + hoverClass: false, + scope: 'default', + tolerance: 'intersect' + }, + _create: function() { + + var o = this.options, accept = o.accept; + this.isover = 0; this.isout = 1; + + this.accept = $.isFunction(accept) ? accept : function(d) { + return d.is(accept); + }; + + //Store the droppable's proportions + this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight }; + + // Add the reference and positions to the manager + $.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || []; + $.ui.ddmanager.droppables[o.scope].push(this); + + (o.addClasses && this.element.addClass("ui-droppable")); + + }, + + destroy: function() { + var drop = $.ui.ddmanager.droppables[this.options.scope]; + for ( var i = 0; i < drop.length; i++ ) + if ( drop[i] == this ) + drop.splice(i, 1); + + this.element + .removeClass("ui-droppable ui-droppable-disabled") + .removeData("droppable") + .unbind(".droppable"); + + return this; + }, + + _setOption: function(key, value) { + + if(key == 'accept') { + this.accept = $.isFunction(value) ? value : function(d) { + return d.is(value); + }; + } + $.Widget.prototype._setOption.apply(this, arguments); + }, + + _activate: function(event) { + var draggable = $.ui.ddmanager.current; + if(this.options.activeClass) this.element.addClass(this.options.activeClass); + (draggable && this._trigger('activate', event, this.ui(draggable))); + }, + + _deactivate: function(event) { + var draggable = $.ui.ddmanager.current; + if(this.options.activeClass) this.element.removeClass(this.options.activeClass); + (draggable && this._trigger('deactivate', event, this.ui(draggable))); + }, + + _over: function(event) { + + var draggable = $.ui.ddmanager.current; + if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element + + if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + if(this.options.hoverClass) this.element.addClass(this.options.hoverClass); + this._trigger('over', event, this.ui(draggable)); + } + + }, + + _out: function(event) { + + var draggable = $.ui.ddmanager.current; + if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element + + if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass); + this._trigger('out', event, this.ui(draggable)); + } + + }, + + _drop: function(event,custom) { + + var draggable = custom || $.ui.ddmanager.current; + if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return false; // Bail if draggable and droppable are same element + + var childrenIntersection = false; + this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function() { + var inst = $.data(this, 'droppable'); + if( + inst.options.greedy + && !inst.options.disabled + && inst.options.scope == draggable.options.scope + && inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) + && $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance) + ) { childrenIntersection = true; return false; } + }); + if(childrenIntersection) return false; + + if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + if(this.options.activeClass) this.element.removeClass(this.options.activeClass); + if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass); + this._trigger('drop', event, this.ui(draggable)); + return this.element; + } + + return false; + + }, + + ui: function(c) { + return { + draggable: (c.currentItem || c.element), + helper: c.helper, + position: c.position, + offset: c.positionAbs + }; + } + +}); + +$.extend($.ui.droppable, { + version: "1.8.2" +}); + +$.ui.intersect = function(draggable, droppable, toleranceMode) { + + if (!droppable.offset) return false; + + var x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width, + y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height; + var l = droppable.offset.left, r = l + droppable.proportions.width, + t = droppable.offset.top, b = t + droppable.proportions.height; + + switch (toleranceMode) { + case 'fit': + return (l < x1 && x2 < r + && t < y1 && y2 < b); + break; + case 'intersect': + return (l < x1 + (draggable.helperProportions.width / 2) // Right Half + && x2 - (draggable.helperProportions.width / 2) < r // Left Half + && t < y1 + (draggable.helperProportions.height / 2) // Bottom Half + && y2 - (draggable.helperProportions.height / 2) < b ); // Top Half + break; + case 'pointer': + var draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left), + draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top), + isOver = $.ui.isOver(draggableTop, draggableLeft, t, l, droppable.proportions.height, droppable.proportions.width); + return isOver; + break; + case 'touch': + return ( + (y1 >= t && y1 <= b) || // Top edge touching + (y2 >= t && y2 <= b) || // Bottom edge touching + (y1 < t && y2 > b) // Surrounded vertically + ) && ( + (x1 >= l && x1 <= r) || // Left edge touching + (x2 >= l && x2 <= r) || // Right edge touching + (x1 < l && x2 > r) // Surrounded horizontally + ); + break; + default: + return false; + break; + } + +}; + +/* + This manager tracks offsets of draggables and droppables +*/ +$.ui.ddmanager = { + current: null, + droppables: { 'default': [] }, + prepareOffsets: function(t, event) { + + var m = $.ui.ddmanager.droppables[t.options.scope] || []; + var type = event ? event.type : null; // workaround for #2317 + var list = (t.currentItem || t.element).find(":data(droppable)").andSelf(); + + droppablesLoop: for (var i = 0; i < m.length; i++) { + + if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) continue; //No disabled and non-accepted + for (var j=0; j < list.length; j++) { if(list[j] == m[i].element[0]) { m[i].proportions.height = 0; continue droppablesLoop; } }; //Filter out elements in the current dragged item + m[i].visible = m[i].element.css("display") != "none"; if(!m[i].visible) continue; //If the element is not visible, continue + + m[i].offset = m[i].element.offset(); + m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight }; + + if(type == "mousedown") m[i]._activate.call(m[i], event); //Activate the droppable if used directly from draggables + + } + + }, + drop: function(draggable, event) { + + var dropped = false; + $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() { + + if(!this.options) return; + if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) + dropped = dropped || this._drop.call(this, event); + + if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + this.isout = 1; this.isover = 0; + this._deactivate.call(this, event); + } + + }); + return dropped; + + }, + drag: function(draggable, event) { + + //If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse. + if(draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, event); + + //Run through all droppables and check their positions based on specific tolerance options + $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() { + + if(this.options.disabled || this.greedyChild || !this.visible) return; + var intersects = $.ui.intersect(draggable, this, this.options.tolerance); + + var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null); + if(!c) return; + + var parentInstance; + if (this.options.greedy) { + var parent = this.element.parents(':data(droppable):eq(0)'); + if (parent.length) { + parentInstance = $.data(parent[0], 'droppable'); + parentInstance.greedyChild = (c == 'isover' ? 1 : 0); + } + } + + // we just moved into a greedy child + if (parentInstance && c == 'isover') { + parentInstance['isover'] = 0; + parentInstance['isout'] = 1; + parentInstance._out.call(parentInstance, event); + } + + this[c] = 1; this[c == 'isout' ? 'isover' : 'isout'] = 0; + this[c == "isover" ? "_over" : "_out"].call(this, event); + + // we just moved out of a greedy child + if (parentInstance && c == 'isout') { + parentInstance['isout'] = 0; + parentInstance['isover'] = 1; + parentInstance._over.call(parentInstance, event); + } + }); + + } +}; + +})(jQuery); diff --git a/resources/jquery.ui/jquery.ui.mouse.js b/resources/jquery.ui/jquery.ui.mouse.js new file mode 100644 index 00000000..871edd83 --- /dev/null +++ b/resources/jquery.ui/jquery.ui.mouse.js @@ -0,0 +1,151 @@ +/*! + * jQuery UI Mouse 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function($) { + +$.widget("ui.mouse", { + options: { + cancel: ':input,option', + distance: 1, + delay: 0 + }, + _mouseInit: function() { + var self = this; + + this.element + .bind('mousedown.'+this.widgetName, function(event) { + return self._mouseDown(event); + }) + .bind('click.'+this.widgetName, function(event) { + if(self._preventClickEvent) { + self._preventClickEvent = false; + event.stopImmediatePropagation(); + return false; + } + }); + + this.started = false; + }, + + // TODO: make sure destroying one instance of mouse doesn't mess with + // other instances of mouse + _mouseDestroy: function() { + this.element.unbind('.'+this.widgetName); + }, + + _mouseDown: function(event) { + // don't let more than one widget handle mouseStart + // TODO: figure out why we have to use originalEvent + event.originalEvent = event.originalEvent || {}; + if (event.originalEvent.mouseHandled) { return; } + + // we may have missed mouseup (out of window) + (this._mouseStarted && this._mouseUp(event)); + + this._mouseDownEvent = event; + + var self = this, + btnIsLeft = (event.which == 1), + elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false); + if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { + return true; + } + + this.mouseDelayMet = !this.options.delay; + if (!this.mouseDelayMet) { + this._mouseDelayTimer = setTimeout(function() { + self.mouseDelayMet = true; + }, this.options.delay); + } + + if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { + this._mouseStarted = (this._mouseStart(event) !== false); + if (!this._mouseStarted) { + event.preventDefault(); + return true; + } + } + + // these delegates are required to keep context + this._mouseMoveDelegate = function(event) { + return self._mouseMove(event); + }; + this._mouseUpDelegate = function(event) { + return self._mouseUp(event); + }; + $(document) + .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate) + .bind('mouseup.'+this.widgetName, this._mouseUpDelegate); + + // preventDefault() is used to prevent the selection of text here - + // however, in Safari, this causes select boxes not to be selectable + // anymore, so this fix is needed + ($.browser.safari || event.preventDefault()); + + event.originalEvent.mouseHandled = true; + return true; + }, + + _mouseMove: function(event) { + // IE mouseup check - mouseup happened when mouse was out of window + if ($.browser.msie && !event.button) { + return this._mouseUp(event); + } + + if (this._mouseStarted) { + this._mouseDrag(event); + return event.preventDefault(); + } + + if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { + this._mouseStarted = + (this._mouseStart(this._mouseDownEvent, event) !== false); + (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); + } + + return !this._mouseStarted; + }, + + _mouseUp: function(event) { + $(document) + .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate) + .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate); + + if (this._mouseStarted) { + this._mouseStarted = false; + this._preventClickEvent = (event.target == this._mouseDownEvent.target); + this._mouseStop(event); + } + + return false; + }, + + _mouseDistanceMet: function(event) { + return (Math.max( + Math.abs(this._mouseDownEvent.pageX - event.pageX), + Math.abs(this._mouseDownEvent.pageY - event.pageY) + ) >= this.options.distance + ); + }, + + _mouseDelayMet: function(event) { + return this.mouseDelayMet; + }, + + // These are placeholder methods, to be overriden by extending plugin + _mouseStart: function(event) {}, + _mouseDrag: function(event) {}, + _mouseStop: function(event) {}, + _mouseCapture: function(event) { return true; } +}); + +})(jQuery); diff --git a/resources/jquery.ui/jquery.ui.position.js b/resources/jquery.ui/jquery.ui.position.js new file mode 100644 index 00000000..50dd57f0 --- /dev/null +++ b/resources/jquery.ui/jquery.ui.position.js @@ -0,0 +1,233 @@ +/* + * jQuery UI Position 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Position + */ +(function( $ ) { + +$.ui = $.ui || {}; + +var horizontalPositions = /left|center|right/, + horizontalDefault = "center", + verticalPositions = /top|center|bottom/, + verticalDefault = "center", + _position = $.fn.position, + _offset = $.fn.offset; + +$.fn.position = function( options ) { + if ( !options || !options.of ) { + return _position.apply( this, arguments ); + } + + // make a copy, we don't want to modify arguments + options = $.extend( {}, options ); + + var target = $( options.of ), + collision = ( options.collision || "flip" ).split( " " ), + offset = options.offset ? options.offset.split( " " ) : [ 0, 0 ], + targetWidth, + targetHeight, + basePosition; + + if ( options.of.nodeType === 9 ) { + targetWidth = target.width(); + targetHeight = target.height(); + basePosition = { top: 0, left: 0 }; + } else if ( options.of.scrollTo && options.of.document ) { + targetWidth = target.width(); + targetHeight = target.height(); + basePosition = { top: target.scrollTop(), left: target.scrollLeft() }; + } else if ( options.of.preventDefault ) { + // force left top to allow flipping + options.at = "left top"; + targetWidth = targetHeight = 0; + basePosition = { top: options.of.pageY, left: options.of.pageX }; + } else { + targetWidth = target.outerWidth(); + targetHeight = target.outerHeight(); + basePosition = target.offset(); + } + + // force my and at to have valid horizontal and veritcal positions + // if a value is missing or invalid, it will be converted to center + $.each( [ "my", "at" ], function() { + var pos = ( options[this] || "" ).split( " " ); + if ( pos.length === 1) { + pos = horizontalPositions.test( pos[0] ) ? + pos.concat( [verticalDefault] ) : + verticalPositions.test( pos[0] ) ? + [ horizontalDefault ].concat( pos ) : + [ horizontalDefault, verticalDefault ]; + } + pos[ 0 ] = horizontalPositions.test( pos[0] ) ? pos[ 0 ] : horizontalDefault; + pos[ 1 ] = verticalPositions.test( pos[1] ) ? pos[ 1 ] : verticalDefault; + options[ this ] = pos; + }); + + // normalize collision option + if ( collision.length === 1 ) { + collision[ 1 ] = collision[ 0 ]; + } + + // normalize offset option + offset[ 0 ] = parseInt( offset[0], 10 ) || 0; + if ( offset.length === 1 ) { + offset[ 1 ] = offset[ 0 ]; + } + offset[ 1 ] = parseInt( offset[1], 10 ) || 0; + + if ( options.at[0] === "right" ) { + basePosition.left += targetWidth; + } else if (options.at[0] === horizontalDefault ) { + basePosition.left += targetWidth / 2; + } + + if ( options.at[1] === "bottom" ) { + basePosition.top += targetHeight; + } else if ( options.at[1] === verticalDefault ) { + basePosition.top += targetHeight / 2; + } + + basePosition.left += offset[ 0 ]; + basePosition.top += offset[ 1 ]; + + return this.each(function() { + var elem = $( this ), + elemWidth = elem.outerWidth(), + elemHeight = elem.outerHeight(), + position = $.extend( {}, basePosition ); + + if ( options.my[0] === "right" ) { + position.left -= elemWidth; + } else if ( options.my[0] === horizontalDefault ) { + position.left -= elemWidth / 2; + } + + if ( options.my[1] === "bottom" ) { + position.top -= elemHeight; + } else if ( options.my[1] === verticalDefault ) { + position.top -= elemHeight / 2; + } + + // prevent fractions (see #5280) + position.left = parseInt( position.left ); + position.top = parseInt( position.top ); + + $.each( [ "left", "top" ], function( i, dir ) { + if ( $.ui.position[ collision[i] ] ) { + $.ui.position[ collision[i] ][ dir ]( position, { + targetWidth: targetWidth, + targetHeight: targetHeight, + elemWidth: elemWidth, + elemHeight: elemHeight, + offset: offset, + my: options.my, + at: options.at + }); + } + }); + + if ( $.fn.bgiframe ) { + elem.bgiframe(); + } + elem.offset( $.extend( position, { using: options.using } ) ); + }); +}; + +$.ui.position = { + fit: { + left: function( position, data ) { + var win = $( window ), + over = position.left + data.elemWidth - win.width() - win.scrollLeft(); + position.left = over > 0 ? position.left - over : Math.max( 0, position.left ); + }, + top: function( position, data ) { + var win = $( window ), + over = position.top + data.elemHeight - win.height() - win.scrollTop(); + position.top = over > 0 ? position.top - over : Math.max( 0, position.top ); + } + }, + + flip: { + left: function( position, data ) { + if ( data.at[0] === "center" ) { + return; + } + var win = $( window ), + over = position.left + data.elemWidth - win.width() - win.scrollLeft(), + myOffset = data.my[ 0 ] === "left" ? + -data.elemWidth : + data.my[ 0 ] === "right" ? + data.elemWidth : + 0, + offset = -2 * data.offset[ 0 ]; + position.left += position.left < 0 ? + myOffset + data.targetWidth + offset : + over > 0 ? + myOffset - data.targetWidth + offset : + 0; + }, + top: function( position, data ) { + if ( data.at[1] === "center" ) { + return; + } + var win = $( window ), + over = position.top + data.elemHeight - win.height() - win.scrollTop(), + myOffset = data.my[ 1 ] === "top" ? + -data.elemHeight : + data.my[ 1 ] === "bottom" ? + data.elemHeight : + 0, + atOffset = data.at[ 1 ] === "top" ? + data.targetHeight : + -data.targetHeight, + offset = -2 * data.offset[ 1 ]; + position.top += position.top < 0 ? + myOffset + data.targetHeight + offset : + over > 0 ? + myOffset + atOffset + offset : + 0; + } + } +}; + +// offset setter from jQuery 1.4 +if ( !$.offset.setOffset ) { + $.offset.setOffset = function( elem, options ) { + // set position first, in-case top/left are set even on static elem + if ( /static/.test( $.curCSS( elem, "position" ) ) ) { + elem.style.position = "relative"; + } + var curElem = $( elem ), + curOffset = curElem.offset(), + curTop = parseInt( $.curCSS( elem, "top", true ), 10 ) || 0, + curLeft = parseInt( $.curCSS( elem, "left", true ), 10) || 0, + props = { + top: (options.top - curOffset.top) + curTop, + left: (options.left - curOffset.left) + curLeft + }; + + if ( 'using' in options ) { + options.using.call( elem, props ); + } else { + curElem.css( props ); + } + }; + + $.fn.offset = function( options ) { + var elem = this[ 0 ]; + if ( !elem || !elem.ownerDocument ) { return null; } + if ( options ) { + return this.each(function() { + $.offset.setOffset( this, options ); + }); + } + return _offset.call( this ); + }; +} + +}( jQuery )); diff --git a/resources/jquery.ui/jquery.ui.progressbar.js b/resources/jquery.ui/jquery.ui.progressbar.js new file mode 100644 index 00000000..4bc092d1 --- /dev/null +++ b/resources/jquery.ui/jquery.ui.progressbar.js @@ -0,0 +1,107 @@ +/* + * jQuery UI Progressbar 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Progressbar + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function( $ ) { + +$.widget( "ui.progressbar", { + options: { + value: 0 + }, + _create: function() { + this.element + .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) + .attr({ + role: "progressbar", + "aria-valuemin": this._valueMin(), + "aria-valuemax": this._valueMax(), + "aria-valuenow": this._value() + }); + + this.valueDiv = $( "
      " ) + .appendTo( this.element ); + + this._refreshValue(); + }, + + destroy: function() { + this.element + .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) + .removeAttr( "role" ) + .removeAttr( "aria-valuemin" ) + .removeAttr( "aria-valuemax" ) + .removeAttr( "aria-valuenow" ); + + this.valueDiv.remove(); + + $.Widget.prototype.destroy.apply( this, arguments ); + }, + + value: function( newValue ) { + if ( newValue === undefined ) { + return this._value(); + } + + this._setOption( "value", newValue ); + return this; + }, + + _setOption: function( key, value ) { + switch ( key ) { + case "value": + this.options.value = value; + this._refreshValue(); + this._trigger( "change" ); + break; + } + + $.Widget.prototype._setOption.apply( this, arguments ); + }, + + _value: function() { + var val = this.options.value; + // normalize invalid value + if ( typeof val !== "number" ) { + val = 0; + } + if ( val < this._valueMin() ) { + val = this._valueMin(); + } + if ( val > this._valueMax() ) { + val = this._valueMax(); + } + + return val; + }, + + _valueMin: function() { + return 0; + }, + + _valueMax: function() { + return 100; + }, + + _refreshValue: function() { + var value = this.value(); + this.valueDiv + [ value === this._valueMax() ? "addClass" : "removeClass"]( "ui-corner-right" ) + .width( value + "%" ); + this.element.attr( "aria-valuenow", value ); + } +}); + +$.extend( $.ui.progressbar, { + version: "1.8.2" +}); + +})( jQuery ); diff --git a/resources/jquery.ui/jquery.ui.resizable.js b/resources/jquery.ui/jquery.ui.resizable.js new file mode 100644 index 00000000..0a782bb5 --- /dev/null +++ b/resources/jquery.ui/jquery.ui.resizable.js @@ -0,0 +1,799 @@ +/* + * jQuery UI Resizable 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Resizables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function($) { + +$.widget("ui.resizable", $.ui.mouse, { + widgetEventPrefix: "resize", + options: { + alsoResize: false, + animate: false, + animateDuration: "slow", + animateEasing: "swing", + aspectRatio: false, + autoHide: false, + containment: false, + ghost: false, + grid: false, + handles: "e,s,se", + helper: false, + maxHeight: null, + maxWidth: null, + minHeight: 10, + minWidth: 10, + zIndex: 1000 + }, + _create: function() { + + var self = this, o = this.options; + this.element.addClass("ui-resizable"); + + $.extend(this, { + _aspectRatio: !!(o.aspectRatio), + aspectRatio: o.aspectRatio, + originalElement: this.element, + _proportionallyResizeElements: [], + _helper: o.helper || o.ghost || o.animate ? o.helper || 'ui-resizable-helper' : null + }); + + //Wrap the element if it cannot hold child nodes + if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) { + + //Opera fix for relative positioning + if (/relative/.test(this.element.css('position')) && $.browser.opera) + this.element.css({ position: 'relative', top: 'auto', left: 'auto' }); + + //Create a wrapper element and set the wrapper to the new current internal element + this.element.wrap( + $('
      ').css({ + position: this.element.css('position'), + width: this.element.outerWidth(), + height: this.element.outerHeight(), + top: this.element.css('top'), + left: this.element.css('left') + }) + ); + + //Overwrite the original this.element + this.element = this.element.parent().data( + "resizable", this.element.data('resizable') + ); + + this.elementIsWrapper = true; + + //Move margins to the wrapper + this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") }); + this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0}); + + //Prevent Safari textarea resize + this.originalResizeStyle = this.originalElement.css('resize'); + this.originalElement.css('resize', 'none'); + + //Push the actual element to our proportionallyResize internal array + this._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' })); + + // avoid IE jump (hard set the margin) + this.originalElement.css({ margin: this.originalElement.css('margin') }); + + // fix handlers offset + this._proportionallyResize(); + + } + + this.handles = o.handles || (!$('.ui-resizable-handle', this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' }); + if(this.handles.constructor == String) { + + if(this.handles == 'all') this.handles = 'n,e,s,w,se,sw,ne,nw'; + var n = this.handles.split(","); this.handles = {}; + + for(var i = 0; i < n.length; i++) { + + var handle = $.trim(n[i]), hname = 'ui-resizable-'+handle; + var axis = $('
      '); + + // increase zIndex of sw, se, ne, nw axis + //TODO : this modifies original option + if(/sw|se|ne|nw/.test(handle)) axis.css({ zIndex: ++o.zIndex }); + + //TODO : What's going on here? + if ('se' == handle) { + axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se'); + }; + + //Insert into internal handles object and append to element + this.handles[handle] = '.ui-resizable-'+handle; + this.element.append(axis); + } + + } + + this._renderAxis = function(target) { + + target = target || this.element; + + for(var i in this.handles) { + + if(this.handles[i].constructor == String) + this.handles[i] = $(this.handles[i], this.element).show(); + + //Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls) + if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) { + + var axis = $(this.handles[i], this.element), padWrapper = 0; + + //Checking the correct pad and border + padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth(); + + //The padding type i have to apply... + var padPos = [ 'padding', + /ne|nw|n/.test(i) ? 'Top' : + /se|sw|s/.test(i) ? 'Bottom' : + /^e$/.test(i) ? 'Right' : 'Left' ].join(""); + + target.css(padPos, padWrapper); + + this._proportionallyResize(); + + } + + //TODO: What's that good for? There's not anything to be executed left + if(!$(this.handles[i]).length) + continue; + + } + }; + + //TODO: make renderAxis a prototype function + this._renderAxis(this.element); + + this._handles = $('.ui-resizable-handle', this.element) + .disableSelection(); + + //Matching axis name + this._handles.mouseover(function() { + if (!self.resizing) { + if (this.className) + var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i); + //Axis, default = se + self.axis = axis && axis[1] ? axis[1] : 'se'; + } + }); + + //If we want to auto hide the elements + if (o.autoHide) { + this._handles.hide(); + $(this.element) + .addClass("ui-resizable-autohide") + .hover(function() { + $(this).removeClass("ui-resizable-autohide"); + self._handles.show(); + }, + function(){ + if (!self.resizing) { + $(this).addClass("ui-resizable-autohide"); + self._handles.hide(); + } + }); + } + + //Initialize the mouse interaction + this._mouseInit(); + + }, + + destroy: function() { + + this._mouseDestroy(); + + var _destroy = function(exp) { + $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing") + .removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove(); + }; + + //TODO: Unwrap at same DOM position + if (this.elementIsWrapper) { + _destroy(this.element); + var wrapper = this.element; + wrapper.after( + this.originalElement.css({ + position: wrapper.css('position'), + width: wrapper.outerWidth(), + height: wrapper.outerHeight(), + top: wrapper.css('top'), + left: wrapper.css('left') + }) + ).remove(); + } + + this.originalElement.css('resize', this.originalResizeStyle); + _destroy(this.originalElement); + + return this; + }, + + _mouseCapture: function(event) { + var handle = false; + for (var i in this.handles) { + if ($(this.handles[i])[0] == event.target) { + handle = true; + } + } + + return !this.options.disabled && handle; + }, + + _mouseStart: function(event) { + + var o = this.options, iniPos = this.element.position(), el = this.element; + + this.resizing = true; + this.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() }; + + // bugfix for http://dev.jquery.com/ticket/1749 + if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) { + el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left }); + } + + //Opera fixing relative position + if ($.browser.opera && (/relative/).test(el.css('position'))) + el.css({ position: 'relative', top: 'auto', left: 'auto' }); + + this._renderProxy(); + + var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top')); + + if (o.containment) { + curleft += $(o.containment).scrollLeft() || 0; + curtop += $(o.containment).scrollTop() || 0; + } + + //Store needed variables + this.offset = this.helper.offset(); + this.position = { left: curleft, top: curtop }; + this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; + this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; + this.originalPosition = { left: curleft, top: curtop }; + this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() }; + this.originalMousePosition = { left: event.pageX, top: event.pageY }; + + //Aspect Ratio + this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1); + + var cursor = $('.ui-resizable-' + this.axis).css('cursor'); + $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor); + + el.addClass("ui-resizable-resizing"); + this._propagate("start", event); + return true; + }, + + _mouseDrag: function(event) { + + //Increase performance, avoid regex + var el = this.helper, o = this.options, props = {}, + self = this, smp = this.originalMousePosition, a = this.axis; + + var dx = (event.pageX-smp.left)||0, dy = (event.pageY-smp.top)||0; + var trigger = this._change[a]; + if (!trigger) return false; + + // Calculate the attrs that will be change + var data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff; + + if (this._aspectRatio || event.shiftKey) + data = this._updateRatio(data, event); + + data = this._respectSize(data, event); + + // plugins callbacks need to be called first + this._propagate("resize", event); + + el.css({ + top: this.position.top + "px", left: this.position.left + "px", + width: this.size.width + "px", height: this.size.height + "px" + }); + + if (!this._helper && this._proportionallyResizeElements.length) + this._proportionallyResize(); + + this._updateCache(data); + + // calling the user callback at the end + this._trigger('resize', event, this.ui()); + + return false; + }, + + _mouseStop: function(event) { + + this.resizing = false; + var o = this.options, self = this; + + if(this._helper) { + var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName), + soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height, + soffsetw = ista ? 0 : self.sizeDiff.width; + + var s = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) }, + left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null, + top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null; + + if (!o.animate) + this.element.css($.extend(s, { top: top, left: left })); + + self.helper.height(self.size.height); + self.helper.width(self.size.width); + + if (this._helper && !o.animate) this._proportionallyResize(); + } + + $('body').css('cursor', 'auto'); + + this.element.removeClass("ui-resizable-resizing"); + + this._propagate("stop", event); + + if (this._helper) this.helper.remove(); + return false; + + }, + + _updateCache: function(data) { + var o = this.options; + this.offset = this.helper.offset(); + if (isNumber(data.left)) this.position.left = data.left; + if (isNumber(data.top)) this.position.top = data.top; + if (isNumber(data.height)) this.size.height = data.height; + if (isNumber(data.width)) this.size.width = data.width; + }, + + _updateRatio: function(data, event) { + + var o = this.options, cpos = this.position, csize = this.size, a = this.axis; + + if (data.height) data.width = (csize.height * this.aspectRatio); + else if (data.width) data.height = (csize.width / this.aspectRatio); + + if (a == 'sw') { + data.left = cpos.left + (csize.width - data.width); + data.top = null; + } + if (a == 'nw') { + data.top = cpos.top + (csize.height - data.height); + data.left = cpos.left + (csize.width - data.width); + } + + return data; + }, + + _respectSize: function(data, event) { + + var el = this.helper, o = this.options, pRatio = this._aspectRatio || event.shiftKey, a = this.axis, + ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height), + isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height); + + if (isminw) data.width = o.minWidth; + if (isminh) data.height = o.minHeight; + if (ismaxw) data.width = o.maxWidth; + if (ismaxh) data.height = o.maxHeight; + + var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height; + var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a); + + if (isminw && cw) data.left = dw - o.minWidth; + if (ismaxw && cw) data.left = dw - o.maxWidth; + if (isminh && ch) data.top = dh - o.minHeight; + if (ismaxh && ch) data.top = dh - o.maxHeight; + + // fixing jump error on top/left - bug #2330 + var isNotwh = !data.width && !data.height; + if (isNotwh && !data.left && data.top) data.top = null; + else if (isNotwh && !data.top && data.left) data.left = null; + + return data; + }, + + _proportionallyResize: function() { + + var o = this.options; + if (!this._proportionallyResizeElements.length) return; + var element = this.helper || this.element; + + for (var i=0; i < this._proportionallyResizeElements.length; i++) { + + var prel = this._proportionallyResizeElements[i]; + + if (!this.borderDif) { + var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')], + p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')]; + + this.borderDif = $.map(b, function(v, i) { + var border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0; + return border + padding; + }); + } + + if ($.browser.msie && !(!($(element).is(':hidden') || $(element).parents(':hidden').length))) + continue; + + prel.css({ + height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0, + width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0 + }); + + }; + + }, + + _renderProxy: function() { + + var el = this.element, o = this.options; + this.elementOffset = el.offset(); + + if(this._helper) { + + this.helper = this.helper || $('
      '); + + // fix ie6 offset TODO: This seems broken + var ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0), + pxyoffset = ( ie6 ? 2 : -1 ); + + this.helper.addClass(this._helper).css({ + width: this.element.outerWidth() + pxyoffset, + height: this.element.outerHeight() + pxyoffset, + position: 'absolute', + left: this.elementOffset.left - ie6offset +'px', + top: this.elementOffset.top - ie6offset +'px', + zIndex: ++o.zIndex //TODO: Don't modify option + }); + + this.helper + .appendTo("body") + .disableSelection(); + + } else { + this.helper = this.element; + } + + }, + + _change: { + e: function(event, dx, dy) { + return { width: this.originalSize.width + dx }; + }, + w: function(event, dx, dy) { + var o = this.options, cs = this.originalSize, sp = this.originalPosition; + return { left: sp.left + dx, width: cs.width - dx }; + }, + n: function(event, dx, dy) { + var o = this.options, cs = this.originalSize, sp = this.originalPosition; + return { top: sp.top + dy, height: cs.height - dy }; + }, + s: function(event, dx, dy) { + return { height: this.originalSize.height + dy }; + }, + se: function(event, dx, dy) { + return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); + }, + sw: function(event, dx, dy) { + return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); + }, + ne: function(event, dx, dy) { + return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); + }, + nw: function(event, dx, dy) { + return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); + } + }, + + _propagate: function(n, event) { + $.ui.plugin.call(this, n, [event, this.ui()]); + (n != "resize" && this._trigger(n, event, this.ui())); + }, + + plugins: {}, + + ui: function() { + return { + originalElement: this.originalElement, + element: this.element, + helper: this.helper, + position: this.position, + size: this.size, + originalSize: this.originalSize, + originalPosition: this.originalPosition + }; + } + +}); + +$.extend($.ui.resizable, { + version: "1.8.2" +}); + +/* + * Resizable Extensions + */ + +$.ui.plugin.add("resizable", "alsoResize", { + + start: function(event, ui) { + + var self = $(this).data("resizable"), o = self.options; + + var _store = function(exp) { + $(exp).each(function() { + $(this).data("resizable-alsoresize", { + width: parseInt($(this).width(), 10), height: parseInt($(this).height(), 10), + left: parseInt($(this).css('left'), 10), top: parseInt($(this).css('top'), 10) + }); + }); + }; + + if (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) { + if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); } + else { $.each(o.alsoResize, function(exp, c) { _store(exp); }); } + }else{ + _store(o.alsoResize); + } + }, + + resize: function(event, ui){ + var self = $(this).data("resizable"), o = self.options, os = self.originalSize, op = self.originalPosition; + + var delta = { + height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0, + top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0 + }, + + _alsoResize = function(exp, c) { + $(exp).each(function() { + var el = $(this), start = $(this).data("resizable-alsoresize"), style = {}, css = c && c.length ? c : ['width', 'height', 'top', 'left']; + + $.each(css || ['width', 'height', 'top', 'left'], function(i, prop) { + var sum = (start[prop]||0) + (delta[prop]||0); + if (sum && sum >= 0) + style[prop] = sum || null; + }); + + //Opera fixing relative position + if (/relative/.test(el.css('position')) && $.browser.opera) { + self._revertToRelativePosition = true; + el.css({ position: 'absolute', top: 'auto', left: 'auto' }); + } + + el.css(style); + }); + }; + + if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) { + $.each(o.alsoResize, function(exp, c) { _alsoResize(exp, c); }); + }else{ + _alsoResize(o.alsoResize); + } + }, + + stop: function(event, ui){ + var self = $(this).data("resizable"); + + //Opera fixing relative position + if (self._revertToRelativePosition && $.browser.opera) { + self._revertToRelativePosition = false; + el.css({ position: 'relative' }); + } + + $(this).removeData("resizable-alsoresize-start"); + } +}); + +$.ui.plugin.add("resizable", "animate", { + + stop: function(event, ui) { + var self = $(this).data("resizable"), o = self.options; + + var pr = self._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName), + soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height, + soffsetw = ista ? 0 : self.sizeDiff.width; + + var style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) }, + left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null, + top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null; + + self.element.animate( + $.extend(style, top && left ? { top: top, left: left } : {}), { + duration: o.animateDuration, + easing: o.animateEasing, + step: function() { + + var data = { + width: parseInt(self.element.css('width'), 10), + height: parseInt(self.element.css('height'), 10), + top: parseInt(self.element.css('top'), 10), + left: parseInt(self.element.css('left'), 10) + }; + + if (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height }); + + // propagating resize, and updating values for each animation step + self._updateCache(data); + self._propagate("resize", event); + + } + } + ); + } + +}); + +$.ui.plugin.add("resizable", "containment", { + + start: function(event, ui) { + var self = $(this).data("resizable"), o = self.options, el = self.element; + var oc = o.containment, ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc; + if (!ce) return; + + self.containerElement = $(ce); + + if (/document/.test(oc) || oc == document) { + self.containerOffset = { left: 0, top: 0 }; + self.containerPosition = { left: 0, top: 0 }; + + self.parentData = { + element: $(document), left: 0, top: 0, + width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight + }; + } + + // i'm a node, so compute top, left, right, bottom + else { + var element = $(ce), p = []; + $([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); }); + + self.containerOffset = element.offset(); + self.containerPosition = element.position(); + self.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) }; + + var co = self.containerOffset, ch = self.containerSize.height, cw = self.containerSize.width, + width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch); + + self.parentData = { + element: ce, left: co.left, top: co.top, width: width, height: height + }; + } + }, + + resize: function(event, ui) { + var self = $(this).data("resizable"), o = self.options, + ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position, + pRatio = self._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement; + + if (ce[0] != document && (/static/).test(ce.css('position'))) cop = co; + + if (cp.left < (self._helper ? co.left : 0)) { + self.size.width = self.size.width + (self._helper ? (self.position.left - co.left) : (self.position.left - cop.left)); + if (pRatio) self.size.height = self.size.width / o.aspectRatio; + self.position.left = o.helper ? co.left : 0; + } + + if (cp.top < (self._helper ? co.top : 0)) { + self.size.height = self.size.height + (self._helper ? (self.position.top - co.top) : self.position.top); + if (pRatio) self.size.width = self.size.height * o.aspectRatio; + self.position.top = self._helper ? co.top : 0; + } + + self.offset.left = self.parentData.left+self.position.left; + self.offset.top = self.parentData.top+self.position.top; + + var woset = Math.abs( (self._helper ? self.offset.left - cop.left : (self.offset.left - cop.left)) + self.sizeDiff.width ), + hoset = Math.abs( (self._helper ? self.offset.top - cop.top : (self.offset.top - co.top)) + self.sizeDiff.height ); + + var isParent = self.containerElement.get(0) == self.element.parent().get(0), + isOffsetRelative = /relative|absolute/.test(self.containerElement.css('position')); + + if(isParent && isOffsetRelative) woset -= self.parentData.left; + + if (woset + self.size.width >= self.parentData.width) { + self.size.width = self.parentData.width - woset; + if (pRatio) self.size.height = self.size.width / self.aspectRatio; + } + + if (hoset + self.size.height >= self.parentData.height) { + self.size.height = self.parentData.height - hoset; + if (pRatio) self.size.width = self.size.height * self.aspectRatio; + } + }, + + stop: function(event, ui){ + var self = $(this).data("resizable"), o = self.options, cp = self.position, + co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement; + + var helper = $(self.helper), ho = helper.offset(), w = helper.outerWidth() - self.sizeDiff.width, h = helper.outerHeight() - self.sizeDiff.height; + + if (self._helper && !o.animate && (/relative/).test(ce.css('position'))) + $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h }); + + if (self._helper && !o.animate && (/static/).test(ce.css('position'))) + $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h }); + + } +}); + +$.ui.plugin.add("resizable", "ghost", { + + start: function(event, ui) { + + var self = $(this).data("resizable"), o = self.options, cs = self.size; + + self.ghost = self.originalElement.clone(); + self.ghost + .css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 }) + .addClass('ui-resizable-ghost') + .addClass(typeof o.ghost == 'string' ? o.ghost : ''); + + self.ghost.appendTo(self.helper); + + }, + + resize: function(event, ui){ + var self = $(this).data("resizable"), o = self.options; + if (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width }); + }, + + stop: function(event, ui){ + var self = $(this).data("resizable"), o = self.options; + if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0)); + } + +}); + +$.ui.plugin.add("resizable", "grid", { + + resize: function(event, ui) { + var self = $(this).data("resizable"), o = self.options, cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || event.shiftKey; + o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid; + var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1); + + if (/^(se|s|e)$/.test(a)) { + self.size.width = os.width + ox; + self.size.height = os.height + oy; + } + else if (/^(ne)$/.test(a)) { + self.size.width = os.width + ox; + self.size.height = os.height + oy; + self.position.top = op.top - oy; + } + else if (/^(sw)$/.test(a)) { + self.size.width = os.width + ox; + self.size.height = os.height + oy; + self.position.left = op.left - ox; + } + else { + self.size.width = os.width + ox; + self.size.height = os.height + oy; + self.position.top = op.top - oy; + self.position.left = op.left - ox; + } + } + +}); + +var num = function(v) { + return parseInt(v, 10) || 0; +}; + +var isNumber = function(value) { + return !isNaN(parseInt(value, 10)); +}; + +})(jQuery); diff --git a/resources/jquery.ui/jquery.ui.selectable.js b/resources/jquery.ui/jquery.ui.selectable.js new file mode 100644 index 00000000..bc707d36 --- /dev/null +++ b/resources/jquery.ui/jquery.ui.selectable.js @@ -0,0 +1,269 @@ + +/* + * jQuery UI Selectable 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Selectables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function($) { + +$.widget("ui.selectable", $.ui.mouse, { + options: { + appendTo: 'body', + autoRefresh: true, + distance: 0, + filter: '*', + tolerance: 'touch' + }, + _create: function() { + var self = this; + + this.element.addClass("ui-selectable"); + + this.dragged = false; + + // cache selectee children based on filter + var selectees; + this.refresh = function() { + selectees = $(self.options.filter, self.element[0]); + selectees.each(function() { + var $this = $(this); + var pos = $this.offset(); + $.data(this, "selectable-item", { + element: this, + $element: $this, + left: pos.left, + top: pos.top, + right: pos.left + $this.outerWidth(), + bottom: pos.top + $this.outerHeight(), + startselected: false, + selected: $this.hasClass('ui-selected'), + selecting: $this.hasClass('ui-selecting'), + unselecting: $this.hasClass('ui-unselecting') + }); + }); + }; + this.refresh(); + + this.selectees = selectees.addClass("ui-selectee"); + + this._mouseInit(); + + this.helper = $("
      "); + }, + + destroy: function() { + this.selectees + .removeClass("ui-selectee") + .removeData("selectable-item"); + this.element + .removeClass("ui-selectable ui-selectable-disabled") + .removeData("selectable") + .unbind(".selectable"); + this._mouseDestroy(); + + return this; + }, + + _mouseStart: function(event) { + var self = this; + + this.opos = [event.pageX, event.pageY]; + + if (this.options.disabled) + return; + + var options = this.options; + + this.selectees = $(options.filter, this.element[0]); + + this._trigger("start", event); + + $(options.appendTo).append(this.helper); + // position helper (lasso) + this.helper.css({ + "z-index": 100, + "position": "absolute", + "left": event.clientX, + "top": event.clientY, + "width": 0, + "height": 0 + }); + + if (options.autoRefresh) { + this.refresh(); + } + + this.selectees.filter('.ui-selected').each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.startselected = true; + if (!event.metaKey) { + selectee.$element.removeClass('ui-selected'); + selectee.selected = false; + selectee.$element.addClass('ui-unselecting'); + selectee.unselecting = true; + // selectable UNSELECTING callback + self._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + }); + + $(event.target).parents().andSelf().each(function() { + var selectee = $.data(this, "selectable-item"); + if (selectee) { + var doSelect = !event.metaKey || !selectee.$element.hasClass('ui-selected'); + selectee.$element + .removeClass(doSelect ? "ui-unselecting" : "ui-selected") + .addClass(doSelect ? "ui-selecting" : "ui-unselecting"); + selectee.unselecting = !doSelect; + selectee.selecting = doSelect; + selectee.selected = doSelect; + // selectable (UN)SELECTING callback + if (doSelect) { + self._trigger("selecting", event, { + selecting: selectee.element + }); + } else { + self._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + return false; + } + }); + + }, + + _mouseDrag: function(event) { + var self = this; + this.dragged = true; + + if (this.options.disabled) + return; + + var options = this.options; + + var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY; + if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; } + if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; } + this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1}); + + this.selectees.each(function() { + var selectee = $.data(this, "selectable-item"); + //prevent helper from being selected if appendTo: selectable + if (!selectee || selectee.element == self.element[0]) + return; + var hit = false; + if (options.tolerance == 'touch') { + hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) ); + } else if (options.tolerance == 'fit') { + hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2); + } + + if (hit) { + // SELECT + if (selectee.selected) { + selectee.$element.removeClass('ui-selected'); + selectee.selected = false; + } + if (selectee.unselecting) { + selectee.$element.removeClass('ui-unselecting'); + selectee.unselecting = false; + } + if (!selectee.selecting) { + selectee.$element.addClass('ui-selecting'); + selectee.selecting = true; + // selectable SELECTING callback + self._trigger("selecting", event, { + selecting: selectee.element + }); + } + } else { + // UNSELECT + if (selectee.selecting) { + if (event.metaKey && selectee.startselected) { + selectee.$element.removeClass('ui-selecting'); + selectee.selecting = false; + selectee.$element.addClass('ui-selected'); + selectee.selected = true; + } else { + selectee.$element.removeClass('ui-selecting'); + selectee.selecting = false; + if (selectee.startselected) { + selectee.$element.addClass('ui-unselecting'); + selectee.unselecting = true; + } + // selectable UNSELECTING callback + self._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + } + if (selectee.selected) { + if (!event.metaKey && !selectee.startselected) { + selectee.$element.removeClass('ui-selected'); + selectee.selected = false; + + selectee.$element.addClass('ui-unselecting'); + selectee.unselecting = true; + // selectable UNSELECTING callback + self._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + } + } + }); + + return false; + }, + + _mouseStop: function(event) { + var self = this; + + this.dragged = false; + + var options = this.options; + + $('.ui-unselecting', this.element[0]).each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.$element.removeClass('ui-unselecting'); + selectee.unselecting = false; + selectee.startselected = false; + self._trigger("unselected", event, { + unselected: selectee.element + }); + }); + $('.ui-selecting', this.element[0]).each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.$element.removeClass('ui-selecting').addClass('ui-selected'); + selectee.selecting = false; + selectee.selected = true; + selectee.startselected = true; + self._trigger("selected", event, { + selected: selectee.element + }); + }); + this._trigger("stop", event); + + this.helper.remove(); + + return false; + } + +}); + +$.extend($.ui.selectable, { + version: "1.8.2" +}); + +})(jQuery); diff --git a/resources/jquery.ui/jquery.ui.slider.js b/resources/jquery.ui/jquery.ui.slider.js new file mode 100644 index 00000000..81d854b5 --- /dev/null +++ b/resources/jquery.ui/jquery.ui.slider.js @@ -0,0 +1,682 @@ +/* + * jQuery UI Slider 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Slider + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ + +(function( $ ) { + +// number of pages in a slider +// (how many times can you page up/down to go through the whole range) +var numPages = 5; + +$.widget( "ui.slider", $.ui.mouse, { + + widgetEventPrefix: "slide", + + options: { + animate: false, + distance: 0, + max: 100, + min: 0, + orientation: "horizontal", + range: false, + step: 1, + value: 0, + values: null + }, + + _create: function() { + var self = this, + o = this.options; + + this._keySliding = false; + this._mouseSliding = false; + this._animateOff = true; + this._handleIndex = null; + this._detectOrientation(); + this._mouseInit(); + + this.element + .addClass( "ui-slider" + + " ui-slider-" + this.orientation + + " ui-widget" + + " ui-widget-content" + + " ui-corner-all" ); + + if ( o.disabled ) { + this.element.addClass( "ui-slider-disabled ui-disabled" ); + } + + this.range = $([]); + + if ( o.range ) { + if ( o.range === true ) { + this.range = $( "
      " ); + if ( !o.values ) { + o.values = [ this._valueMin(), this._valueMin() ]; + } + if ( o.values.length && o.values.length !== 2 ) { + o.values = [ o.values[0], o.values[0] ]; + } + } else { + this.range = $( "
      " ); + } + + this.range + .appendTo( this.element ) + .addClass( "ui-slider-range" ); + + if ( o.range === "min" || o.range === "max" ) { + this.range.addClass( "ui-slider-range-" + o.range ); + } + + // note: this isn't the most fittingly semantic framework class for this element, + // but worked best visually with a variety of themes + this.range.addClass( "ui-widget-header" ); + } + + if ( $( ".ui-slider-handle", this.element ).length === 0 ) { + $( "" ) + .appendTo( this.element ) + .addClass( "ui-slider-handle" ); + } + + if ( o.values && o.values.length ) { + while ( $(".ui-slider-handle", this.element).length < o.values.length ) { + $( "" ) + .appendTo( this.element ) + .addClass( "ui-slider-handle" ); + } + } + + this.handles = $( ".ui-slider-handle", this.element ) + .addClass( "ui-state-default" + + " ui-corner-all" ); + + this.handle = this.handles.eq( 0 ); + + this.handles.add( this.range ).filter( "a" ) + .click(function( event ) { + event.preventDefault(); + }) + .hover(function() { + if ( !o.disabled ) { + $( this ).addClass( "ui-state-hover" ); + } + }, function() { + $( this ).removeClass( "ui-state-hover" ); + }) + .focus(function() { + if ( !o.disabled ) { + $( ".ui-slider .ui-state-focus" ).removeClass( "ui-state-focus" ); + $( this ).addClass( "ui-state-focus" ); + } else { + $( this ).blur(); + } + }) + .blur(function() { + $( this ).removeClass( "ui-state-focus" ); + }); + + this.handles.each(function( i ) { + $( this ).data( "index.ui-slider-handle", i ); + }); + + this.handles + .keydown(function( event ) { + var ret = true, + index = $( this ).data( "index.ui-slider-handle" ), + allowed, + curVal, + newVal, + step; + + if ( self.options.disabled ) { + return; + } + + switch ( event.keyCode ) { + case $.ui.keyCode.HOME: + case $.ui.keyCode.END: + case $.ui.keyCode.PAGE_UP: + case $.ui.keyCode.PAGE_DOWN: + case $.ui.keyCode.UP: + case $.ui.keyCode.RIGHT: + case $.ui.keyCode.DOWN: + case $.ui.keyCode.LEFT: + ret = false; + if ( !self._keySliding ) { + self._keySliding = true; + $( this ).addClass( "ui-state-active" ); + allowed = self._start( event, index ); + if ( allowed === false ) { + return; + } + } + break; + } + + step = self.options.step; + if ( self.options.values && self.options.values.length ) { + curVal = newVal = self.values( index ); + } else { + curVal = newVal = self.value(); + } + + switch ( event.keyCode ) { + case $.ui.keyCode.HOME: + newVal = self._valueMin(); + break; + case $.ui.keyCode.END: + newVal = self._valueMax(); + break; + case $.ui.keyCode.PAGE_UP: + newVal = self._trimAlignValue( curVal + ( (self._valueMax() - self._valueMin()) / numPages ) ); + break; + case $.ui.keyCode.PAGE_DOWN: + newVal = self._trimAlignValue( curVal - ( (self._valueMax() - self._valueMin()) / numPages ) ); + break; + case $.ui.keyCode.UP: + case $.ui.keyCode.RIGHT: + if ( curVal === self._valueMax() ) { + return; + } + newVal = self._trimAlignValue( curVal + step ); + break; + case $.ui.keyCode.DOWN: + case $.ui.keyCode.LEFT: + if ( curVal === self._valueMin() ) { + return; + } + newVal = self._trimAlignValue( curVal - step ); + break; + } + + self._slide( event, index, newVal ); + + return ret; + + }) + .keyup(function( event ) { + var index = $( this ).data( "index.ui-slider-handle" ); + + if ( self._keySliding ) { + self._keySliding = false; + self._stop( event, index ); + self._change( event, index ); + $( this ).removeClass( "ui-state-active" ); + } + + }); + + this._refreshValue(); + + this._animateOff = false; + }, + + destroy: function() { + this.handles.remove(); + this.range.remove(); + + this.element + .removeClass( "ui-slider" + + " ui-slider-horizontal" + + " ui-slider-vertical" + + " ui-slider-disabled" + + " ui-widget" + + " ui-widget-content" + + " ui-corner-all" ) + .removeData( "slider" ) + .unbind( ".slider" ); + + this._mouseDestroy(); + + return this; + }, + + _mouseCapture: function( event ) { + var o = this.options, + position, + normValue, + distance, + closestHandle, + self, + index, + allowed, + offset, + mouseOverHandle; + + if ( o.disabled ) { + return false; + } + + this.elementSize = { + width: this.element.outerWidth(), + height: this.element.outerHeight() + }; + this.elementOffset = this.element.offset(); + + position = { x: event.pageX, y: event.pageY }; + normValue = this._normValueFromMouse( position ); + distance = this._valueMax() - this._valueMin() + 1; + self = this; + this.handles.each(function( i ) { + var thisDistance = Math.abs( normValue - self.values(i) ); + if ( distance > thisDistance ) { + distance = thisDistance; + closestHandle = $( this ); + index = i; + } + }); + + // workaround for bug #3736 (if both handles of a range are at 0, + // the first is always used as the one with least distance, + // and moving it is obviously prevented by preventing negative ranges) + if( o.range === true && this.values(1) === o.min ) { + index += 1; + closestHandle = $( this.handles[index] ); + } + + allowed = this._start( event, index ); + if ( allowed === false ) { + return false; + } + this._mouseSliding = true; + + self._handleIndex = index; + + closestHandle + .addClass( "ui-state-active" ) + .focus(); + + offset = closestHandle.offset(); + mouseOverHandle = !$( event.target ).parents().andSelf().is( ".ui-slider-handle" ); + this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : { + left: event.pageX - offset.left - ( closestHandle.width() / 2 ), + top: event.pageY - offset.top - + ( closestHandle.height() / 2 ) - + ( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) - + ( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) + + ( parseInt( closestHandle.css("marginTop"), 10 ) || 0) + }; + + normValue = this._normValueFromMouse( position ); + this._slide( event, index, normValue ); + this._animateOff = true; + return true; + }, + + _mouseStart: function( event ) { + return true; + }, + + _mouseDrag: function( event ) { + var position = { x: event.pageX, y: event.pageY }, + normValue = this._normValueFromMouse( position ); + + this._slide( event, this._handleIndex, normValue ); + + return false; + }, + + _mouseStop: function( event ) { + this.handles.removeClass( "ui-state-active" ); + this._mouseSliding = false; + + this._stop( event, this._handleIndex ); + this._change( event, this._handleIndex ); + + this._handleIndex = null; + this._clickOffset = null; + this._animateOff = false; + + return false; + }, + + _detectOrientation: function() { + this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal"; + }, + + _normValueFromMouse: function( position ) { + var pixelTotal, + pixelMouse, + percentMouse, + valueTotal, + valueMouse; + + if ( this.orientation === "horizontal" ) { + pixelTotal = this.elementSize.width; + pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 ); + } else { + pixelTotal = this.elementSize.height; + pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 ); + } + + percentMouse = ( pixelMouse / pixelTotal ); + if ( percentMouse > 1 ) { + percentMouse = 1; + } + if ( percentMouse < 0 ) { + percentMouse = 0; + } + if ( this.orientation === "vertical" ) { + percentMouse = 1 - percentMouse; + } + + valueTotal = this._valueMax() - this._valueMin(); + valueMouse = this._valueMin() + percentMouse * valueTotal; + + return this._trimAlignValue( valueMouse ); + }, + + _start: function( event, index ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + return this._trigger( "start", event, uiHash ); + }, + + _slide: function( event, index, newVal ) { + var otherVal, + newValues, + allowed; + + if ( this.options.values && this.options.values.length ) { + otherVal = this.values( index ? 0 : 1 ); + + if ( ( this.options.values.length === 2 && this.options.range === true ) && + ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) ) + ) { + newVal = otherVal; + } + + if ( newVal !== this.values( index ) ) { + newValues = this.values(); + newValues[ index ] = newVal; + // A slide can be canceled by returning false from the slide callback + allowed = this._trigger( "slide", event, { + handle: this.handles[ index ], + value: newVal, + values: newValues + } ); + otherVal = this.values( index ? 0 : 1 ); + if ( allowed !== false ) { + this.values( index, newVal, true ); + } + } + } else { + if ( newVal !== this.value() ) { + // A slide can be canceled by returning false from the slide callback + allowed = this._trigger( "slide", event, { + handle: this.handles[ index ], + value: newVal + } ); + if ( allowed !== false ) { + this.value( newVal ); + } + } + } + }, + + _stop: function( event, index ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + + this._trigger( "stop", event, uiHash ); + }, + + _change: function( event, index ) { + if ( !this._keySliding && !this._mouseSliding ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + + this._trigger( "change", event, uiHash ); + } + }, + + value: function( newValue ) { + if ( arguments.length ) { + this.options.value = this._trimAlignValue( newValue ); + this._refreshValue(); + this._change( null, 0 ); + } + + return this._value(); + }, + + values: function( index, newValue ) { + var vals, + newValues, + i; + + if ( arguments.length > 1 ) { + this.options.values[ index ] = this._trimAlignValue( newValue ); + this._refreshValue(); + this._change( null, index ); + } + + if ( arguments.length ) { + if ( $.isArray( arguments[ 0 ] ) ) { + vals = this.options.values; + newValues = arguments[ 0 ]; + for ( i = 0; i < vals.length; i += 1 ) { + vals[ i ] = this._trimAlignValue( newValues[ i ] ); + this._change( null, i ); + } + this._refreshValue(); + } else { + if ( this.options.values && this.options.values.length ) { + return this._values( index ); + } else { + return this.value(); + } + } + } else { + return this._values(); + } + }, + + _setOption: function( key, value ) { + var i, + valsLength = 0; + + if ( $.isArray( this.options.values ) ) { + valsLength = this.options.values.length; + } + + $.Widget.prototype._setOption.apply( this, arguments ); + + switch ( key ) { + case "disabled": + if ( value ) { + this.handles.filter( ".ui-state-focus" ).blur(); + this.handles.removeClass( "ui-state-hover" ); + this.handles.attr( "disabled", "disabled" ); + this.element.addClass( "ui-disabled" ); + } else { + this.handles.removeAttr( "disabled" ); + this.element.removeClass( "ui-disabled" ); + } + break; + case "orientation": + this._detectOrientation(); + this.element + .removeClass( "ui-slider-horizontal ui-slider-vertical" ) + .addClass( "ui-slider-" + this.orientation ); + this._refreshValue(); + break; + case "value": + this._animateOff = true; + this._refreshValue(); + this._change( null, 0 ); + this._animateOff = false; + break; + case "values": + this._animateOff = true; + this._refreshValue(); + for ( i = 0; i < valsLength; i += 1 ) { + this._change( null, i ); + } + this._animateOff = false; + break; + } + }, + + //internal value getter + // _value() returns value trimmed by min and max, aligned by step + _value: function() { + var val = this.options.value; + val = this._trimAlignValue( val ); + + return val; + }, + + //internal values getter + // _values() returns array of values trimmed by min and max, aligned by step + // _values( index ) returns single value trimmed by min and max, aligned by step + _values: function( index ) { + var val, + vals, + i; + + if ( arguments.length ) { + val = this.options.values[ index ]; + val = this._trimAlignValue( val ); + + return val; + } else { + // .slice() creates a copy of the array + // this copy gets trimmed by min and max and then returned + vals = this.options.values.slice(); + for ( i = 0; i < vals.length; i+= 1) { + vals[ i ] = this._trimAlignValue( vals[ i ] ); + } + + return vals; + } + }, + + // returns the step-aligned value that val is closest to, between (inclusive) min and max + _trimAlignValue: function( val ) { + if ( val < this._valueMin() ) { + return this._valueMin(); + } + if ( val > this._valueMax() ) { + return this._valueMax(); + } + var step = ( this.options.step > 0 ) ? this.options.step : 1, + valModStep = val % step, + alignValue = val - valModStep; + + if ( Math.abs(valModStep) * 2 >= step ) { + alignValue += ( valModStep > 0 ) ? step : ( -step ); + } + + // Since JavaScript has problems with large floats, round + // the final value to 5 digits after the decimal point (see #4124) + return parseFloat( alignValue.toFixed(5) ); + }, + + _valueMin: function() { + return this.options.min; + }, + + _valueMax: function() { + return this.options.max; + }, + + _refreshValue: function() { + var oRange = this.options.range, + o = this.options, + self = this, + animate = ( !this._animateOff ) ? o.animate : false, + valPercent, + _set = {}, + lastValPercent, + value, + valueMin, + valueMax; + + if ( this.options.values && this.options.values.length ) { + this.handles.each(function( i, j ) { + valPercent = ( self.values(i) - self._valueMin() ) / ( self._valueMax() - self._valueMin() ) * 100; + _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; + $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); + if ( self.options.range === true ) { + if ( self.orientation === "horizontal" ) { + if ( i === 0 ) { + self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate ); + } + if ( i === 1 ) { + self.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } else { + if ( i === 0 ) { + self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate ); + } + if ( i === 1 ) { + self.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } + } + lastValPercent = valPercent; + }); + } else { + value = this.value(); + valueMin = this._valueMin(); + valueMax = this._valueMax(); + valPercent = ( valueMax !== valueMin ) ? + ( value - valueMin ) / ( valueMax - valueMin ) * 100 : + 0; + _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; + this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); + + if ( oRange === "min" && this.orientation === "horizontal" ) { + this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate ); + } + if ( oRange === "max" && this.orientation === "horizontal" ) { + this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + if ( oRange === "min" && this.orientation === "vertical" ) { + this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate ); + } + if ( oRange === "max" && this.orientation === "vertical" ) { + this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } + } + +}); + +$.extend( $.ui.slider, { + version: "1.8.2" +}); + +}(jQuery)); diff --git a/resources/jquery.ui/jquery.ui.sortable.js b/resources/jquery.ui/jquery.ui.sortable.js new file mode 100644 index 00000000..fe9898e0 --- /dev/null +++ b/resources/jquery.ui/jquery.ui.sortable.js @@ -0,0 +1,1067 @@ +/* + * jQuery UI Sortable 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Sortables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function($) { + +$.widget("ui.sortable", $.ui.mouse, { + widgetEventPrefix: "sort", + options: { + appendTo: "parent", + axis: false, + connectWith: false, + containment: false, + cursor: 'auto', + cursorAt: false, + dropOnEmpty: true, + forcePlaceholderSize: false, + forceHelperSize: false, + grid: false, + handle: false, + helper: "original", + items: '> *', + opacity: false, + placeholder: false, + revert: false, + scroll: true, + scrollSensitivity: 20, + scrollSpeed: 20, + scope: "default", + tolerance: "intersect", + zIndex: 1000 + }, + _create: function() { + + var o = this.options; + this.containerCache = {}; + this.element.addClass("ui-sortable"); + + //Get the items + this.refresh(); + + //Let's determine if the items are floating + this.floating = this.items.length ? (/left|right/).test(this.items[0].item.css('float')) : false; + + //Let's determine the parent's offset + this.offset = this.element.offset(); + + //Initialize mouse events for interaction + this._mouseInit(); + + }, + + destroy: function() { + this.element + .removeClass("ui-sortable ui-sortable-disabled") + .removeData("sortable") + .unbind(".sortable"); + this._mouseDestroy(); + + for ( var i = this.items.length - 1; i >= 0; i-- ) + this.items[i].item.removeData("sortable-item"); + + return this; + }, + + _setOption: function(key, value){ + if ( key === "disabled" ) { + this.options[ key ] = value; + + this.widget() + [ value ? "addClass" : "removeClass"]( "ui-sortable-disabled" ); + } else { + // Don't call widget base _setOption for disable as it adds ui-state-disabled class + $.Widget.prototype._setOption.apply(this, arguments); + } + }, + + _mouseCapture: function(event, overrideHandle) { + + if (this.reverting) { + return false; + } + + if(this.options.disabled || this.options.type == 'static') return false; + + //We have to refresh the items data once first + this._refreshItems(event); + + //Find out if the clicked node (or one of its parents) is a actual item in this.items + var currentItem = null, self = this, nodes = $(event.target).parents().each(function() { + if($.data(this, 'sortable-item') == self) { + currentItem = $(this); + return false; + } + }); + if($.data(event.target, 'sortable-item') == self) currentItem = $(event.target); + + if(!currentItem) return false; + if(this.options.handle && !overrideHandle) { + var validHandle = false; + + $(this.options.handle, currentItem).find("*").andSelf().each(function() { if(this == event.target) validHandle = true; }); + if(!validHandle) return false; + } + + this.currentItem = currentItem; + this._removeCurrentsFromItems(); + return true; + + }, + + _mouseStart: function(event, overrideHandle, noActivation) { + + var o = this.options, self = this; + this.currentContainer = this; + + //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture + this.refreshPositions(); + + //Create and append the visible helper + this.helper = this._createHelper(event); + + //Cache the helper size + this._cacheHelperProportions(); + + /* + * - Position generation - + * This block generates everything position related - it's the core of draggables. + */ + + //Cache the margins of the original element + this._cacheMargins(); + + //Get the next scrolling parent + this.scrollParent = this.helper.scrollParent(); + + //The element's absolute position on the page minus margins + this.offset = this.currentItem.offset(); + this.offset = { + top: this.offset.top - this.margins.top, + left: this.offset.left - this.margins.left + }; + + // Only after we got the offset, we can change the helper's position to absolute + // TODO: Still need to figure out a way to make relative sorting possible + this.helper.css("position", "absolute"); + this.cssPosition = this.helper.css("position"); + + $.extend(this.offset, { + click: { //Where the click happened, relative to the element + left: event.pageX - this.offset.left, + top: event.pageY - this.offset.top + }, + parent: this._getParentOffset(), + relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper + }); + + //Generate the original position + this.originalPosition = this._generatePosition(event); + this.originalPageX = event.pageX; + this.originalPageY = event.pageY; + + //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied + (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); + + //Cache the former DOM position + this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] }; + + //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way + if(this.helper[0] != this.currentItem[0]) { + this.currentItem.hide(); + } + + //Create the placeholder + this._createPlaceholder(); + + //Set a containment if given in the options + if(o.containment) + this._setContainment(); + + if(o.cursor) { // cursor option + if ($('body').css("cursor")) this._storedCursor = $('body').css("cursor"); + $('body').css("cursor", o.cursor); + } + + if(o.opacity) { // opacity option + if (this.helper.css("opacity")) this._storedOpacity = this.helper.css("opacity"); + this.helper.css("opacity", o.opacity); + } + + if(o.zIndex) { // zIndex option + if (this.helper.css("zIndex")) this._storedZIndex = this.helper.css("zIndex"); + this.helper.css("zIndex", o.zIndex); + } + + //Prepare scrolling + if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') + this.overflowOffset = this.scrollParent.offset(); + + //Call callbacks + this._trigger("start", event, this._uiHash()); + + //Recache the helper size + if(!this._preserveHelperProportions) + this._cacheHelperProportions(); + + + //Post 'activate' events to possible containers + if(!noActivation) { + for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i]._trigger("activate", event, self._uiHash(this)); } + } + + //Prepare possible droppables + if($.ui.ddmanager) + $.ui.ddmanager.current = this; + + if ($.ui.ddmanager && !o.dropBehaviour) + $.ui.ddmanager.prepareOffsets(this, event); + + this.dragging = true; + + this.helper.addClass("ui-sortable-helper"); + this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position + return true; + + }, + + _mouseDrag: function(event) { + + //Compute the helpers position + this.position = this._generatePosition(event); + this.positionAbs = this._convertPositionTo("absolute"); + + if (!this.lastPositionAbs) { + this.lastPositionAbs = this.positionAbs; + } + + //Do scrolling + if(this.options.scroll) { + var o = this.options, scrolled = false; + if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') { + + if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) + this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed; + else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) + this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed; + + if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) + this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed; + else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) + this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed; + + } else { + + if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) + scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); + else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) + scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); + + if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) + scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); + else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) + scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); + + } + + if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) + $.ui.ddmanager.prepareOffsets(this, event); + } + + //Regenerate the absolute position used for position checks + this.positionAbs = this._convertPositionTo("absolute"); + + //Set the helper position + if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px'; + if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px'; + + //Rearrange + for (var i = this.items.length - 1; i >= 0; i--) { + + //Cache variables and intersection, continue if no intersection + var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item); + if (!intersection) continue; + + if(itemElement != this.currentItem[0] //cannot intersect with itself + && this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before + && !$.ui.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked + && (this.options.type == 'semi-dynamic' ? !$.ui.contains(this.element[0], itemElement) : true) + //&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container + ) { + + this.direction = intersection == 1 ? "down" : "up"; + + if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) { + this._rearrange(event, item); + } else { + break; + } + + this._trigger("change", event, this._uiHash()); + break; + } + } + + //Post events to containers + this._contactContainers(event); + + //Interconnect with droppables + if($.ui.ddmanager) $.ui.ddmanager.drag(this, event); + + //Call callbacks + this._trigger('sort', event, this._uiHash()); + + this.lastPositionAbs = this.positionAbs; + return false; + + }, + + _mouseStop: function(event, noPropagation) { + + if(!event) return; + + //If we are using droppables, inform the manager about the drop + if ($.ui.ddmanager && !this.options.dropBehaviour) + $.ui.ddmanager.drop(this, event); + + if(this.options.revert) { + var self = this; + var cur = self.placeholder.offset(); + + self.reverting = true; + + $(this.helper).animate({ + left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft), + top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop) + }, parseInt(this.options.revert, 10) || 500, function() { + self._clear(event); + }); + } else { + this._clear(event, noPropagation); + } + + return false; + + }, + + cancel: function() { + + var self = this; + + if(this.dragging) { + + this._mouseUp(); + + if(this.options.helper == "original") + this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); + else + this.currentItem.show(); + + //Post deactivating events to containers + for (var i = this.containers.length - 1; i >= 0; i--){ + this.containers[i]._trigger("deactivate", null, self._uiHash(this)); + if(this.containers[i].containerCache.over) { + this.containers[i]._trigger("out", null, self._uiHash(this)); + this.containers[i].containerCache.over = 0; + } + } + + } + + //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! + if(this.placeholder[0].parentNode) this.placeholder[0].parentNode.removeChild(this.placeholder[0]); + if(this.options.helper != "original" && this.helper && this.helper[0].parentNode) this.helper.remove(); + + $.extend(this, { + helper: null, + dragging: false, + reverting: false, + _noFinalSort: null + }); + + if(this.domPosition.prev) { + $(this.domPosition.prev).after(this.currentItem); + } else { + $(this.domPosition.parent).prepend(this.currentItem); + } + + return this; + + }, + + serialize: function(o) { + + var items = this._getItemsAsjQuery(o && o.connected); + var str = []; o = o || {}; + + $(items).each(function() { + var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/)); + if(res) str.push((o.key || res[1]+'[]')+'='+(o.key && o.expression ? res[1] : res[2])); + }); + + return str.join('&'); + + }, + + toArray: function(o) { + + var items = this._getItemsAsjQuery(o && o.connected); + var ret = []; o = o || {}; + + items.each(function() { ret.push($(o.item || this).attr(o.attribute || 'id') || ''); }); + return ret; + + }, + + /* Be careful with the following core functions */ + _intersectsWith: function(item) { + + var x1 = this.positionAbs.left, + x2 = x1 + this.helperProportions.width, + y1 = this.positionAbs.top, + y2 = y1 + this.helperProportions.height; + + var l = item.left, + r = l + item.width, + t = item.top, + b = t + item.height; + + var dyClick = this.offset.click.top, + dxClick = this.offset.click.left; + + var isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r; + + if( this.options.tolerance == "pointer" + || this.options.forcePointerForContainers + || (this.options.tolerance != "pointer" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height']) + ) { + return isOverElement; + } else { + + return (l < x1 + (this.helperProportions.width / 2) // Right Half + && x2 - (this.helperProportions.width / 2) < r // Left Half + && t < y1 + (this.helperProportions.height / 2) // Bottom Half + && y2 - (this.helperProportions.height / 2) < b ); // Top Half + + } + }, + + _intersectsWithPointer: function(item) { + + var isOverElementHeight = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height), + isOverElementWidth = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width), + isOverElement = isOverElementHeight && isOverElementWidth, + verticalDirection = this._getDragVerticalDirection(), + horizontalDirection = this._getDragHorizontalDirection(); + + if (!isOverElement) + return false; + + return this.floating ? + ( ((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1 ) + : ( verticalDirection && (verticalDirection == "down" ? 2 : 1) ); + + }, + + _intersectsWithSides: function(item) { + + var isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height), + isOverRightHalf = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width), + verticalDirection = this._getDragVerticalDirection(), + horizontalDirection = this._getDragHorizontalDirection(); + + if (this.floating && horizontalDirection) { + return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf)); + } else { + return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && !isOverBottomHalf)); + } + + }, + + _getDragVerticalDirection: function() { + var delta = this.positionAbs.top - this.lastPositionAbs.top; + return delta != 0 && (delta > 0 ? "down" : "up"); + }, + + _getDragHorizontalDirection: function() { + var delta = this.positionAbs.left - this.lastPositionAbs.left; + return delta != 0 && (delta > 0 ? "right" : "left"); + }, + + refresh: function(event) { + this._refreshItems(event); + this.refreshPositions(); + return this; + }, + + _connectWith: function() { + var options = this.options; + return options.connectWith.constructor == String + ? [options.connectWith] + : options.connectWith; + }, + + _getItemsAsjQuery: function(connected) { + + var self = this; + var items = []; + var queries = []; + var connectWith = this._connectWith(); + + if(connectWith && connected) { + for (var i = connectWith.length - 1; i >= 0; i--){ + var cur = $(connectWith[i]); + for (var j = cur.length - 1; j >= 0; j--){ + var inst = $.data(cur[j], 'sortable'); + if(inst && inst != this && !inst.options.disabled) { + queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), inst]); + } + }; + }; + } + + queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), this]); + + for (var i = queries.length - 1; i >= 0; i--){ + queries[i][0].each(function() { + items.push(this); + }); + }; + + return $(items); + + }, + + _removeCurrentsFromItems: function() { + + var list = this.currentItem.find(":data(sortable-item)"); + + for (var i=0; i < this.items.length; i++) { + + for (var j=0; j < list.length; j++) { + if(list[j] == this.items[i].item[0]) + this.items.splice(i,1); + }; + + }; + + }, + + _refreshItems: function(event) { + + this.items = []; + this.containers = [this]; + var items = this.items; + var self = this; + var queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]]; + var connectWith = this._connectWith(); + + if(connectWith) { + for (var i = connectWith.length - 1; i >= 0; i--){ + var cur = $(connectWith[i]); + for (var j = cur.length - 1; j >= 0; j--){ + var inst = $.data(cur[j], 'sortable'); + if(inst && inst != this && !inst.options.disabled) { + queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]); + this.containers.push(inst); + } + }; + }; + } + + for (var i = queries.length - 1; i >= 0; i--) { + var targetData = queries[i][1]; + var _queries = queries[i][0]; + + for (var j=0, queriesLength = _queries.length; j < queriesLength; j++) { + var item = $(_queries[j]); + + item.data('sortable-item', targetData); // Data for target checking (mouse manager) + + items.push({ + item: item, + instance: targetData, + width: 0, height: 0, + left: 0, top: 0 + }); + }; + }; + + }, + + refreshPositions: function(fast) { + + //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change + if(this.offsetParent && this.helper) { + this.offset.parent = this._getParentOffset(); + } + + for (var i = this.items.length - 1; i >= 0; i--){ + var item = this.items[i]; + + var t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item; + + if (!fast) { + item.width = t.outerWidth(); + item.height = t.outerHeight(); + } + + var p = t.offset(); + item.left = p.left; + item.top = p.top; + }; + + if(this.options.custom && this.options.custom.refreshContainers) { + this.options.custom.refreshContainers.call(this); + } else { + for (var i = this.containers.length - 1; i >= 0; i--){ + var p = this.containers[i].element.offset(); + this.containers[i].containerCache.left = p.left; + this.containers[i].containerCache.top = p.top; + this.containers[i].containerCache.width = this.containers[i].element.outerWidth(); + this.containers[i].containerCache.height = this.containers[i].element.outerHeight(); + }; + } + + return this; + }, + + _createPlaceholder: function(that) { + + var self = that || this, o = self.options; + + if(!o.placeholder || o.placeholder.constructor == String) { + var className = o.placeholder; + o.placeholder = { + element: function() { + + var el = $(document.createElement(self.currentItem[0].nodeName)) + .addClass(className || self.currentItem[0].className+" ui-sortable-placeholder") + .removeClass("ui-sortable-helper")[0]; + + if(!className) + el.style.visibility = "hidden"; + + return el; + }, + update: function(container, p) { + + // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that + // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified + if(className && !o.forcePlaceholderSize) return; + + //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item + if(!p.height()) { p.height(self.currentItem.innerHeight() - parseInt(self.currentItem.css('paddingTop')||0, 10) - parseInt(self.currentItem.css('paddingBottom')||0, 10)); }; + if(!p.width()) { p.width(self.currentItem.innerWidth() - parseInt(self.currentItem.css('paddingLeft')||0, 10) - parseInt(self.currentItem.css('paddingRight')||0, 10)); }; + } + }; + } + + //Create the placeholder + self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem)); + + //Append it after the actual current item + self.currentItem.after(self.placeholder); + + //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317) + o.placeholder.update(self, self.placeholder); + + }, + + _contactContainers: function(event) { + + // get innermost container that intersects with item + var innermostContainer = null, innermostIndex = null; + + + for (var i = this.containers.length - 1; i >= 0; i--){ + + // never consider a container that's located within the item itself + if($.ui.contains(this.currentItem[0], this.containers[i].element[0])) + continue; + + if(this._intersectsWith(this.containers[i].containerCache)) { + + // if we've already found a container and it's more "inner" than this, then continue + if(innermostContainer && $.ui.contains(this.containers[i].element[0], innermostContainer.element[0])) + continue; + + innermostContainer = this.containers[i]; + innermostIndex = i; + + } else { + // container doesn't intersect. trigger "out" event if necessary + if(this.containers[i].containerCache.over) { + this.containers[i]._trigger("out", event, this._uiHash(this)); + this.containers[i].containerCache.over = 0; + } + } + + } + + // if no intersecting containers found, return + if(!innermostContainer) return; + + // move the item into the container if it's not there already + if(this.containers.length === 1) { + this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); + this.containers[innermostIndex].containerCache.over = 1; + } else if(this.currentContainer != this.containers[innermostIndex]) { + + //When entering a new container, we will find the item with the least distance and append our item near it + var dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[innermostIndex].floating ? 'left' : 'top']; + for (var j = this.items.length - 1; j >= 0; j--) { + if(!$.ui.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) continue; + var cur = this.items[j][this.containers[innermostIndex].floating ? 'left' : 'top']; + if(Math.abs(cur - base) < dist) { + dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j]; + } + } + + if(!itemWithLeastDistance && !this.options.dropOnEmpty) //Check if dropOnEmpty is enabled + return; + + this.currentContainer = this.containers[innermostIndex]; + itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true); + this._trigger("change", event, this._uiHash()); + this.containers[innermostIndex]._trigger("change", event, this._uiHash(this)); + + //Update the placeholder + this.options.placeholder.update(this.currentContainer, this.placeholder); + + this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); + this.containers[innermostIndex].containerCache.over = 1; + } + + + }, + + _createHelper: function(event) { + + var o = this.options; + var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper == 'clone' ? this.currentItem.clone() : this.currentItem); + + if(!helper.parents('body').length) //Add the helper to the DOM if that didn't happen already + $(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]); + + if(helper[0] == this.currentItem[0]) + this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") }; + + if(helper[0].style.width == '' || o.forceHelperSize) helper.width(this.currentItem.width()); + if(helper[0].style.height == '' || o.forceHelperSize) helper.height(this.currentItem.height()); + + return helper; + + }, + + _adjustOffsetFromHelper: function(obj) { + if (typeof obj == 'string') { + obj = obj.split(' '); + } + if ($.isArray(obj)) { + obj = {left: +obj[0], top: +obj[1] || 0}; + } + if ('left' in obj) { + this.offset.click.left = obj.left + this.margins.left; + } + if ('right' in obj) { + this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; + } + if ('top' in obj) { + this.offset.click.top = obj.top + this.margins.top; + } + if ('bottom' in obj) { + this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; + } + }, + + _getParentOffset: function() { + + + //Get the offsetParent and cache its position + this.offsetParent = this.helper.offsetParent(); + var po = this.offsetParent.offset(); + + // This is a special case where we need to modify a offset calculated on start, since the following happened: + // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent + // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that + // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag + if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) { + po.left += this.scrollParent.scrollLeft(); + po.top += this.scrollParent.scrollTop(); + } + + if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information + || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix + po = { top: 0, left: 0 }; + + return { + top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), + left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) + }; + + }, + + _getRelativeOffset: function() { + + if(this.cssPosition == "relative") { + var p = this.currentItem.position(); + return { + top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), + left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() + }; + } else { + return { top: 0, left: 0 }; + } + + }, + + _cacheMargins: function() { + this.margins = { + left: (parseInt(this.currentItem.css("marginLeft"),10) || 0), + top: (parseInt(this.currentItem.css("marginTop"),10) || 0) + }; + }, + + _cacheHelperProportions: function() { + this.helperProportions = { + width: this.helper.outerWidth(), + height: this.helper.outerHeight() + }; + }, + + _setContainment: function() { + + var o = this.options; + if(o.containment == 'parent') o.containment = this.helper[0].parentNode; + if(o.containment == 'document' || o.containment == 'window') this.containment = [ + 0 - this.offset.relative.left - this.offset.parent.left, + 0 - this.offset.relative.top - this.offset.parent.top, + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left, + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top + ]; + + if(!(/^(document|window|parent)$/).test(o.containment)) { + var ce = $(o.containment)[0]; + var co = $(o.containment).offset(); + var over = ($(ce).css("overflow") != 'hidden'); + + this.containment = [ + co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left, + co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top, + co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left, + co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top + ]; + } + + }, + + _convertPositionTo: function(d, pos) { + + if(!pos) pos = this.position; + var mod = d == "absolute" ? 1 : -1; + var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + + return { + top: ( + pos.top // The absolute mouse position + + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent + + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border) + - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) + ), + left: ( + pos.left // The absolute mouse position + + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent + + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border) + - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) + ) + }; + + }, + + _generatePosition: function(event) { + + var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + + // This is another very weird special case that only happens for relative elements: + // 1. If the css position is relative + // 2. and the scroll parent is the document or similar to the offset parent + // we have to refresh the relative offset during the scroll so there are no jumps + if(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) { + this.offset.relative = this._getRelativeOffset(); + } + + var pageX = event.pageX; + var pageY = event.pageY; + + /* + * - Position constraining - + * Constrain the position to a mix of grid, containment. + */ + + if(this.originalPosition) { //If we are not dragging yet, we won't check for options + + if(this.containment) { + if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left; + if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top; + if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left; + if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top; + } + + if(o.grid) { + var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1]; + pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; + + var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0]; + pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; + } + + } + + return { + top: ( + pageY // The absolute mouse position + - this.offset.click.top // Click offset (relative to the element) + - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent + - this.offset.parent.top // The offsetParent's offset without borders (offset + border) + + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) + ), + left: ( + pageX // The absolute mouse position + - this.offset.click.left // Click offset (relative to the element) + - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent + - this.offset.parent.left // The offsetParent's offset without borders (offset + border) + + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) + ) + }; + + }, + + _rearrange: function(event, i, a, hardRefresh) { + + a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling)); + + //Various things done here to improve the performance: + // 1. we create a setTimeout, that calls refreshPositions + // 2. on the instance, we have a counter variable, that get's higher after every append + // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same + // 4. this lets only the last addition to the timeout stack through + this.counter = this.counter ? ++this.counter : 1; + var self = this, counter = this.counter; + + window.setTimeout(function() { + if(counter == self.counter) self.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove + },0); + + }, + + _clear: function(event, noPropagation) { + + this.reverting = false; + // We delay all events that have to be triggered to after the point where the placeholder has been removed and + // everything else normalized again + var delayedTriggers = [], self = this; + + // We first have to update the dom position of the actual currentItem + // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088) + if(!this._noFinalSort && this.currentItem[0].parentNode) this.placeholder.before(this.currentItem); + this._noFinalSort = null; + + if(this.helper[0] == this.currentItem[0]) { + for(var i in this._storedCSS) { + if(this._storedCSS[i] == 'auto' || this._storedCSS[i] == 'static') this._storedCSS[i] = ''; + } + this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); + } else { + this.currentItem.show(); + } + + if(this.fromOutside && !noPropagation) delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); }); + if((this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !noPropagation) delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed + if(!$.ui.contains(this.element[0], this.currentItem[0])) { //Node was moved out of the current element + if(!noPropagation) delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); }); + for (var i = this.containers.length - 1; i >= 0; i--){ + if($.ui.contains(this.containers[i].element[0], this.currentItem[0]) && !noPropagation) { + delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.containers[i])); + delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.containers[i])); + } + }; + }; + + //Post events to containers + for (var i = this.containers.length - 1; i >= 0; i--){ + if(!noPropagation) delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); }; }).call(this, this.containers[i])); + if(this.containers[i].containerCache.over) { + delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); }; }).call(this, this.containers[i])); + this.containers[i].containerCache.over = 0; + } + } + + //Do what was originally in plugins + if(this._storedCursor) $('body').css("cursor", this._storedCursor); //Reset cursor + if(this._storedOpacity) this.helper.css("opacity", this._storedOpacity); //Reset opacity + if(this._storedZIndex) this.helper.css("zIndex", this._storedZIndex == 'auto' ? '' : this._storedZIndex); //Reset z-index + + this.dragging = false; + if(this.cancelHelperRemoval) { + if(!noPropagation) { + this._trigger("beforeStop", event, this._uiHash()); + for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events + this._trigger("stop", event, this._uiHash()); + } + return false; + } + + if(!noPropagation) this._trigger("beforeStop", event, this._uiHash()); + + //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! + this.placeholder[0].parentNode.removeChild(this.placeholder[0]); + + if(this.helper[0] != this.currentItem[0]) this.helper.remove(); this.helper = null; + + if(!noPropagation) { + for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events + this._trigger("stop", event, this._uiHash()); + } + + this.fromOutside = false; + return true; + + }, + + _trigger: function() { + if ($.Widget.prototype._trigger.apply(this, arguments) === false) { + this.cancel(); + } + }, + + _uiHash: function(inst) { + var self = inst || this; + return { + helper: self.helper, + placeholder: self.placeholder || $([]), + position: self.position, + originalPosition: self.originalPosition, + offset: self.positionAbs, + item: self.currentItem, + sender: inst ? inst.element : null + }; + } + +}); + +$.extend($.ui.sortable, { + version: "1.8.2" +}); + +})(jQuery); diff --git a/resources/jquery.ui/jquery.ui.tabs.js b/resources/jquery.ui/jquery.ui.tabs.js new file mode 100644 index 00000000..1f94d52a --- /dev/null +++ b/resources/jquery.ui/jquery.ui.tabs.js @@ -0,0 +1,729 @@ +/* + * jQuery UI Tabs 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Tabs + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function($) { + +var tabId = 0, + listId = 0; + +function getNextTabId() { + return ++tabId; +} + +function getNextListId() { + return ++listId; +} + +$.widget("ui.tabs", { + options: { + add: null, + ajaxOptions: null, + cache: false, + cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true } + collapsible: false, + disable: null, + disabled: [], + enable: null, + event: 'click', + fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 } + idPrefix: 'ui-tabs-', + load: null, + panelTemplate: '
      ', + remove: null, + select: null, + show: null, + spinner: 'Loading…', + tabTemplate: '
    • #{label}
    • ' + }, + _create: function() { + this._tabify(true); + }, + + _setOption: function(key, value) { + if (key == 'selected') { + if (this.options.collapsible && value == this.options.selected) { + return; + } + this.select(value); + } + else { + this.options[key] = value; + this._tabify(); + } + }, + + _tabId: function(a) { + return a.title && a.title.replace(/\s/g, '_').replace(/[^A-Za-z0-9\-_:\.]/g, '') || + this.options.idPrefix + getNextTabId(); + }, + + _sanitizeSelector: function(hash) { + return hash.replace(/:/g, '\\:'); // we need this because an id may contain a ":" + }, + + _cookie: function() { + var cookie = this.cookie || (this.cookie = this.options.cookie.name || 'ui-tabs-' + getNextListId()); + return $.cookie.apply(null, [cookie].concat($.makeArray(arguments))); + }, + + _ui: function(tab, panel) { + return { + tab: tab, + panel: panel, + index: this.anchors.index(tab) + }; + }, + + _cleanup: function() { + // restore all former loading tabs labels + this.lis.filter('.ui-state-processing').removeClass('ui-state-processing') + .find('span:data(label.tabs)') + .each(function() { + var el = $(this); + el.html(el.data('label.tabs')).removeData('label.tabs'); + }); + }, + + _tabify: function(init) { + + this.list = this.element.find('ol,ul').eq(0); + this.lis = $('li:has(a[href])', this.list); + this.anchors = this.lis.map(function() { return $('a', this)[0]; }); + this.panels = $([]); + + var self = this, o = this.options; + + var fragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash + this.anchors.each(function(i, a) { + var href = $(a).attr('href'); + + // For dynamically created HTML that contains a hash as href IE < 8 expands + // such href to the full page url with hash and then misinterprets tab as ajax. + // Same consideration applies for an added tab with a fragment identifier + // since a[href=#fragment-identifier] does unexpectedly not match. + // Thus normalize href attribute... + var hrefBase = href.split('#')[0], baseEl; + if (hrefBase && (hrefBase === location.toString().split('#')[0] || + (baseEl = $('base')[0]) && hrefBase === baseEl.href)) { + href = a.hash; + a.href = href; + } + + // inline tab + if (fragmentId.test(href)) { + self.panels = self.panels.add(self._sanitizeSelector(href)); + } + + // remote tab + else if (href != '#') { // prevent loading the page itself if href is just "#" + $.data(a, 'href.tabs', href); // required for restore on destroy + + // TODO until #3808 is fixed strip fragment identifier from url + // (IE fails to load from such url) + $.data(a, 'load.tabs', href.replace(/#.*$/, '')); // mutable data + + var id = self._tabId(a); + a.href = '#' + id; + var $panel = $('#' + id); + if (!$panel.length) { + $panel = $(o.panelTemplate).attr('id', id).addClass('ui-tabs-panel ui-widget-content ui-corner-bottom') + .insertAfter(self.panels[i - 1] || self.list); + $panel.data('destroy.tabs', true); + } + self.panels = self.panels.add($panel); + } + + // invalid tab href + else { + o.disabled.push(i); + } + }); + + // initialization from scratch + if (init) { + + // attach necessary classes for styling + this.element.addClass('ui-tabs ui-widget ui-widget-content ui-corner-all'); + this.list.addClass('ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all'); + this.lis.addClass('ui-state-default ui-corner-top'); + this.panels.addClass('ui-tabs-panel ui-widget-content ui-corner-bottom'); + + // Selected tab + // use "selected" option or try to retrieve: + // 1. from fragment identifier in url + // 2. from cookie + // 3. from selected class attribute on
    • + if (o.selected === undefined) { + if (location.hash) { + this.anchors.each(function(i, a) { + if (a.hash == location.hash) { + o.selected = i; + return false; // break + } + }); + } + if (typeof o.selected != 'number' && o.cookie) { + o.selected = parseInt(self._cookie(), 10); + } + if (typeof o.selected != 'number' && this.lis.filter('.ui-tabs-selected').length) { + o.selected = this.lis.index(this.lis.filter('.ui-tabs-selected')); + } + o.selected = o.selected || (this.lis.length ? 0 : -1); + } + else if (o.selected === null) { // usage of null is deprecated, TODO remove in next release + o.selected = -1; + } + + // sanity check - default to first tab... + o.selected = ((o.selected >= 0 && this.anchors[o.selected]) || o.selected < 0) ? o.selected : 0; + + // Take disabling tabs via class attribute from HTML + // into account and update option properly. + // A selected tab cannot become disabled. + o.disabled = $.unique(o.disabled.concat( + $.map(this.lis.filter('.ui-state-disabled'), + function(n, i) { return self.lis.index(n); } ) + )).sort(); + + if ($.inArray(o.selected, o.disabled) != -1) { + o.disabled.splice($.inArray(o.selected, o.disabled), 1); + } + + // highlight selected tab + this.panels.addClass('ui-tabs-hide'); + this.lis.removeClass('ui-tabs-selected ui-state-active'); + if (o.selected >= 0 && this.anchors.length) { // check for length avoids error when initializing empty list + this.panels.eq(o.selected).removeClass('ui-tabs-hide'); + this.lis.eq(o.selected).addClass('ui-tabs-selected ui-state-active'); + + // seems to be expected behavior that the show callback is fired + self.element.queue("tabs", function() { + self._trigger('show', null, self._ui(self.anchors[o.selected], self.panels[o.selected])); + }); + + this.load(o.selected); + } + + // clean up to avoid memory leaks in certain versions of IE 6 + $(window).bind('unload', function() { + self.lis.add(self.anchors).unbind('.tabs'); + self.lis = self.anchors = self.panels = null; + }); + + } + // update selected after add/remove + else { + o.selected = this.lis.index(this.lis.filter('.ui-tabs-selected')); + } + + // update collapsible + this.element[o.collapsible ? 'addClass' : 'removeClass']('ui-tabs-collapsible'); + + // set or update cookie after init and add/remove respectively + if (o.cookie) { + this._cookie(o.selected, o.cookie); + } + + // disable tabs + for (var i = 0, li; (li = this.lis[i]); i++) { + $(li)[$.inArray(i, o.disabled) != -1 && + !$(li).hasClass('ui-tabs-selected') ? 'addClass' : 'removeClass']('ui-state-disabled'); + } + + // reset cache if switching from cached to not cached + if (o.cache === false) { + this.anchors.removeData('cache.tabs'); + } + + // remove all handlers before, tabify may run on existing tabs after add or option change + this.lis.add(this.anchors).unbind('.tabs'); + + if (o.event != 'mouseover') { + var addState = function(state, el) { + if (el.is(':not(.ui-state-disabled)')) { + el.addClass('ui-state-' + state); + } + }; + var removeState = function(state, el) { + el.removeClass('ui-state-' + state); + }; + this.lis.bind('mouseover.tabs', function() { + addState('hover', $(this)); + }); + this.lis.bind('mouseout.tabs', function() { + removeState('hover', $(this)); + }); + this.anchors.bind('focus.tabs', function() { + addState('focus', $(this).closest('li')); + }); + this.anchors.bind('blur.tabs', function() { + removeState('focus', $(this).closest('li')); + }); + } + + // set up animations + var hideFx, showFx; + if (o.fx) { + if ($.isArray(o.fx)) { + hideFx = o.fx[0]; + showFx = o.fx[1]; + } + else { + hideFx = showFx = o.fx; + } + } + + // Reset certain styles left over from animation + // and prevent IE's ClearType bug... + function resetStyle($el, fx) { + $el.css({ display: '' }); + if (!$.support.opacity && fx.opacity) { + $el[0].style.removeAttribute('filter'); + } + } + + // Show a tab... + var showTab = showFx ? + function(clicked, $show) { + $(clicked).closest('li').addClass('ui-tabs-selected ui-state-active'); + $show.hide().removeClass('ui-tabs-hide') // avoid flicker that way + .animate(showFx, showFx.duration || 'normal', function() { + resetStyle($show, showFx); + self._trigger('show', null, self._ui(clicked, $show[0])); + }); + } : + function(clicked, $show) { + $(clicked).closest('li').addClass('ui-tabs-selected ui-state-active'); + $show.removeClass('ui-tabs-hide'); + self._trigger('show', null, self._ui(clicked, $show[0])); + }; + + // Hide a tab, $show is optional... + var hideTab = hideFx ? + function(clicked, $hide) { + $hide.animate(hideFx, hideFx.duration || 'normal', function() { + self.lis.removeClass('ui-tabs-selected ui-state-active'); + $hide.addClass('ui-tabs-hide'); + resetStyle($hide, hideFx); + self.element.dequeue("tabs"); + }); + } : + function(clicked, $hide, $show) { + self.lis.removeClass('ui-tabs-selected ui-state-active'); + $hide.addClass('ui-tabs-hide'); + self.element.dequeue("tabs"); + }; + + // attach tab event handler, unbind to avoid duplicates from former tabifying... + this.anchors.bind(o.event + '.tabs', function() { + var el = this, $li = $(this).closest('li'), $hide = self.panels.filter(':not(.ui-tabs-hide)'), + $show = $(self._sanitizeSelector(this.hash)); + + // If tab is already selected and not collapsible or tab disabled or + // or is already loading or click callback returns false stop here. + // Check if click handler returns false last so that it is not executed + // for a disabled or loading tab! + if (($li.hasClass('ui-tabs-selected') && !o.collapsible) || + $li.hasClass('ui-state-disabled') || + $li.hasClass('ui-state-processing') || + self._trigger('select', null, self._ui(this, $show[0])) === false) { + this.blur(); + return false; + } + + o.selected = self.anchors.index(this); + + self.abort(); + + // if tab may be closed + if (o.collapsible) { + if ($li.hasClass('ui-tabs-selected')) { + o.selected = -1; + + if (o.cookie) { + self._cookie(o.selected, o.cookie); + } + + self.element.queue("tabs", function() { + hideTab(el, $hide); + }).dequeue("tabs"); + + this.blur(); + return false; + } + else if (!$hide.length) { + if (o.cookie) { + self._cookie(o.selected, o.cookie); + } + + self.element.queue("tabs", function() { + showTab(el, $show); + }); + + self.load(self.anchors.index(this)); // TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171 + + this.blur(); + return false; + } + } + + if (o.cookie) { + self._cookie(o.selected, o.cookie); + } + + // show new tab + if ($show.length) { + if ($hide.length) { + self.element.queue("tabs", function() { + hideTab(el, $hide); + }); + } + self.element.queue("tabs", function() { + showTab(el, $show); + }); + + self.load(self.anchors.index(this)); + } + else { + throw 'jQuery UI Tabs: Mismatching fragment identifier.'; + } + + // Prevent IE from keeping other link focussed when using the back button + // and remove dotted border from clicked link. This is controlled via CSS + // in modern browsers; blur() removes focus from address bar in Firefox + // which can become a usability and annoying problem with tabs('rotate'). + if ($.browser.msie) { + this.blur(); + } + + }); + + // disable click in any case + this.anchors.bind('click.tabs', function(){return false;}); + + }, + + destroy: function() { + var o = this.options; + + this.abort(); + + this.element.unbind('.tabs') + .removeClass('ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible') + .removeData('tabs'); + + this.list.removeClass('ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all'); + + this.anchors.each(function() { + var href = $.data(this, 'href.tabs'); + if (href) { + this.href = href; + } + var $this = $(this).unbind('.tabs'); + $.each(['href', 'load', 'cache'], function(i, prefix) { + $this.removeData(prefix + '.tabs'); + }); + }); + + this.lis.unbind('.tabs').add(this.panels).each(function() { + if ($.data(this, 'destroy.tabs')) { + $(this).remove(); + } + else { + $(this).removeClass([ + 'ui-state-default', + 'ui-corner-top', + 'ui-tabs-selected', + 'ui-state-active', + 'ui-state-hover', + 'ui-state-focus', + 'ui-state-disabled', + 'ui-tabs-panel', + 'ui-widget-content', + 'ui-corner-bottom', + 'ui-tabs-hide' + ].join(' ')); + } + }); + + if (o.cookie) { + this._cookie(null, o.cookie); + } + + return this; + }, + + add: function(url, label, index) { + if (index === undefined) { + index = this.anchors.length; // append by default + } + + var self = this, o = this.options, + $li = $(o.tabTemplate.replace(/#\{href\}/g, url).replace(/#\{label\}/g, label)), + id = !url.indexOf('#') ? url.replace('#', '') : this._tabId($('a', $li)[0]); + + $li.addClass('ui-state-default ui-corner-top').data('destroy.tabs', true); + + // try to find an existing element before creating a new one + var $panel = $('#' + id); + if (!$panel.length) { + $panel = $(o.panelTemplate).attr('id', id).data('destroy.tabs', true); + } + $panel.addClass('ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide'); + + if (index >= this.lis.length) { + $li.appendTo(this.list); + $panel.appendTo(this.list[0].parentNode); + } + else { + $li.insertBefore(this.lis[index]); + $panel.insertBefore(this.panels[index]); + } + + o.disabled = $.map(o.disabled, + function(n, i) { return n >= index ? ++n : n; }); + + this._tabify(); + + if (this.anchors.length == 1) { // after tabify + o.selected = 0; + $li.addClass('ui-tabs-selected ui-state-active'); + $panel.removeClass('ui-tabs-hide'); + this.element.queue("tabs", function() { + self._trigger('show', null, self._ui(self.anchors[0], self.panels[0])); + }); + + this.load(0); + } + + // callback + this._trigger('add', null, this._ui(this.anchors[index], this.panels[index])); + return this; + }, + + remove: function(index) { + var o = this.options, $li = this.lis.eq(index).remove(), + $panel = this.panels.eq(index).remove(); + + // If selected tab was removed focus tab to the right or + // in case the last tab was removed the tab to the left. + if ($li.hasClass('ui-tabs-selected') && this.anchors.length > 1) { + this.select(index + (index + 1 < this.anchors.length ? 1 : -1)); + } + + o.disabled = $.map($.grep(o.disabled, function(n, i) { return n != index; }), + function(n, i) { return n >= index ? --n : n; }); + + this._tabify(); + + // callback + this._trigger('remove', null, this._ui($li.find('a')[0], $panel[0])); + return this; + }, + + enable: function(index) { + var o = this.options; + if ($.inArray(index, o.disabled) == -1) { + return; + } + + this.lis.eq(index).removeClass('ui-state-disabled'); + o.disabled = $.grep(o.disabled, function(n, i) { return n != index; }); + + // callback + this._trigger('enable', null, this._ui(this.anchors[index], this.panels[index])); + return this; + }, + + disable: function(index) { + var self = this, o = this.options; + if (index != o.selected) { // cannot disable already selected tab + this.lis.eq(index).addClass('ui-state-disabled'); + + o.disabled.push(index); + o.disabled.sort(); + + // callback + this._trigger('disable', null, this._ui(this.anchors[index], this.panels[index])); + } + + return this; + }, + + select: function(index) { + if (typeof index == 'string') { + index = this.anchors.index(this.anchors.filter('[href$=' + index + ']')); + } + else if (index === null) { // usage of null is deprecated, TODO remove in next release + index = -1; + } + if (index == -1 && this.options.collapsible) { + index = this.options.selected; + } + + this.anchors.eq(index).trigger(this.options.event + '.tabs'); + return this; + }, + + load: function(index) { + var self = this, o = this.options, a = this.anchors.eq(index)[0], url = $.data(a, 'load.tabs'); + + this.abort(); + + // not remote or from cache + if (!url || this.element.queue("tabs").length !== 0 && $.data(a, 'cache.tabs')) { + this.element.dequeue("tabs"); + return; + } + + // load remote from here on + this.lis.eq(index).addClass('ui-state-processing'); + + if (o.spinner) { + var span = $('span', a); + span.data('label.tabs', span.html()).html(o.spinner); + } + + this.xhr = $.ajax($.extend({}, o.ajaxOptions, { + url: url, + success: function(r, s) { + $(self._sanitizeSelector(a.hash)).html(r); + + // take care of tab labels + self._cleanup(); + + if (o.cache) { + $.data(a, 'cache.tabs', true); // if loaded once do not load them again + } + + // callbacks + self._trigger('load', null, self._ui(self.anchors[index], self.panels[index])); + try { + o.ajaxOptions.success(r, s); + } + catch (e) {} + }, + error: function(xhr, s, e) { + // take care of tab labels + self._cleanup(); + + // callbacks + self._trigger('load', null, self._ui(self.anchors[index], self.panels[index])); + try { + // Passing index avoid a race condition when this method is + // called after the user has selected another tab. + // Pass the anchor that initiated this request allows + // loadError to manipulate the tab content panel via $(a.hash) + o.ajaxOptions.error(xhr, s, index, a); + } + catch (e) {} + } + })); + + // last, so that load event is fired before show... + self.element.dequeue("tabs"); + + return this; + }, + + abort: function() { + // stop possibly running animations + this.element.queue([]); + this.panels.stop(false, true); + + // "tabs" queue must not contain more than two elements, + // which are the callbacks for the latest clicked tab... + this.element.queue("tabs", this.element.queue("tabs").splice(-2, 2)); + + // terminate pending requests from other tabs + if (this.xhr) { + this.xhr.abort(); + delete this.xhr; + } + + // take care of tab labels + this._cleanup(); + return this; + }, + + url: function(index, url) { + this.anchors.eq(index).removeData('cache.tabs').data('load.tabs', url); + return this; + }, + + length: function() { + return this.anchors.length; + } + +}); + +$.extend($.ui.tabs, { + version: '1.8.2' +}); + +/* + * Tabs Extensions + */ + +/* + * Rotate + */ +$.extend($.ui.tabs.prototype, { + rotation: null, + rotate: function(ms, continuing) { + + var self = this, o = this.options; + + var rotate = self._rotate || (self._rotate = function(e) { + clearTimeout(self.rotation); + self.rotation = setTimeout(function() { + var t = o.selected; + self.select( ++t < self.anchors.length ? t : 0 ); + }, ms); + + if (e) { + e.stopPropagation(); + } + }); + + var stop = self._unrotate || (self._unrotate = !continuing ? + function(e) { + if (e.clientX) { // in case of a true click + self.rotate(null); + } + } : + function(e) { + t = o.selected; + rotate(); + }); + + // start rotation + if (ms) { + this.element.bind('tabsshow', rotate); + this.anchors.bind(o.event + '.tabs', stop); + rotate(); + } + // stop rotation + else { + clearTimeout(self.rotation); + this.element.unbind('tabsshow', rotate); + this.anchors.unbind(o.event + '.tabs', stop); + delete this._rotate; + delete this._unrotate; + } + + return this; + } +}); + +})(jQuery); diff --git a/resources/jquery.ui/jquery.ui.widget.js b/resources/jquery.ui/jquery.ui.widget.js new file mode 100644 index 00000000..6425d086 --- /dev/null +++ b/resources/jquery.ui/jquery.ui.widget.js @@ -0,0 +1,236 @@ +/*! + * jQuery UI Widget 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Widget + */ +(function( $ ) { + +var _remove = $.fn.remove; + +$.fn.remove = function( selector, keepData ) { + return this.each(function() { + if ( !keepData ) { + if ( !selector || $.filter( selector, [ this ] ).length ) { + $( "*", this ).add( this ).each(function() { + $( this ).triggerHandler( "remove" ); + }); + } + } + return _remove.call( $(this), selector, keepData ); + }); +}; + +$.widget = function( name, base, prototype ) { + var namespace = name.split( "." )[ 0 ], + fullName; + name = name.split( "." )[ 1 ]; + fullName = namespace + "-" + name; + + if ( !prototype ) { + prototype = base; + base = $.Widget; + } + + // create selector for plugin + $.expr[ ":" ][ fullName ] = function( elem ) { + return !!$.data( elem, name ); + }; + + $[ namespace ] = $[ namespace ] || {}; + $[ namespace ][ name ] = function( options, element ) { + // allow instantiation without initializing for simple inheritance + if ( arguments.length ) { + this._createWidget( options, element ); + } + }; + + var basePrototype = new base(); + // we need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from +// $.each( basePrototype, function( key, val ) { +// if ( $.isPlainObject(val) ) { +// basePrototype[ key ] = $.extend( {}, val ); +// } +// }); + basePrototype.options = $.extend( {}, basePrototype.options ); + $[ namespace ][ name ].prototype = $.extend( true, basePrototype, { + namespace: namespace, + widgetName: name, + widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name, + widgetBaseClass: fullName + }, prototype ); + + $.widget.bridge( name, $[ namespace ][ name ] ); +}; + +$.widget.bridge = function( name, object ) { + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string", + args = Array.prototype.slice.call( arguments, 1 ), + returnValue = this; + + // allow multiple hashes to be passed on init + options = !isMethodCall && args.length ? + $.extend.apply( null, [ true, options ].concat(args) ) : + options; + + // prevent calls to internal methods + if ( isMethodCall && options.substring( 0, 1 ) === "_" ) { + return returnValue; + } + + if ( isMethodCall ) { + this.each(function() { + var instance = $.data( this, name ), + methodValue = instance && $.isFunction( instance[options] ) ? + instance[ options ].apply( instance, args ) : + instance; + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue; + return false; + } + }); + } else { + this.each(function() { + var instance = $.data( this, name ); + if ( instance ) { + if ( options ) { + instance.option( options ); + } + instance._init(); + } else { + $.data( this, name, new object( options, this ) ); + } + }); + } + + return returnValue; + }; +}; + +$.Widget = function( options, element ) { + // allow instantiation without initializing for simple inheritance + if ( arguments.length ) { + this._createWidget( options, element ); + } +}; + +$.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + options: { + disabled: false + }, + _createWidget: function( options, element ) { + // $.widget.bridge stores the plugin instance, but we do it anyway + // so that it's stored even before the _create function runs + this.element = $( element ).data( this.widgetName, this ); + this.options = $.extend( true, {}, + this.options, + $.metadata && $.metadata.get( element )[ this.widgetName ], + options ); + + var self = this; + this.element.bind( "remove." + this.widgetName, function() { + self.destroy(); + }); + + this._create(); + this._init(); + }, + _create: function() {}, + _init: function() {}, + + destroy: function() { + this.element + .unbind( "." + this.widgetName ) + .removeData( this.widgetName ); + this.widget() + .unbind( "." + this.widgetName ) + .removeAttr( "aria-disabled" ) + .removeClass( + this.widgetBaseClass + "-disabled " + + "ui-state-disabled" ); + }, + + widget: function() { + return this.element; + }, + + option: function( key, value ) { + var options = key, + self = this; + + if ( arguments.length === 0 ) { + // don't return a reference to the internal hash + return $.extend( {}, self.options ); + } + + if (typeof key === "string" ) { + if ( value === undefined ) { + return this.options[ key ]; + } + options = {}; + options[ key ] = value; + } + + $.each( options, function( key, value ) { + self._setOption( key, value ); + }); + + return self; + }, + _setOption: function( key, value ) { + this.options[ key ] = value; + + if ( key === "disabled" ) { + this.widget() + [ value ? "addClass" : "removeClass"]( + this.widgetBaseClass + "-disabled" + " " + + "ui-state-disabled" ) + .attr( "aria-disabled", value ); + } + + return this; + }, + + enable: function() { + return this._setOption( "disabled", false ); + }, + disable: function() { + return this._setOption( "disabled", true ); + }, + + _trigger: function( type, event, data ) { + var callback = this.options[ type ]; + + event = $.Event( event ); + event.type = ( type === this.widgetEventPrefix ? + type : + this.widgetEventPrefix + type ).toLowerCase(); + data = data || {}; + + // copy original event properties over to the new event + // this would happen if we could call $.event.fix instead of $.Event + // but we don't have a way to force an event to be fixed multiple times + if ( event.originalEvent ) { + for ( var i = $.event.props.length, prop; i; ) { + prop = $.event.props[ --i ]; + event[ prop ] = event.originalEvent[ prop ]; + } + } + + this.element.trigger( event, data ); + + return !( $.isFunction(callback) && + callback.call( this.element[0], event, data ) === false || + event.isDefaultPrevented() ); + } +}; + +})( jQuery ); diff --git a/resources/jquery.ui/themes/default/images/ui-anim_basic_16x16.gif b/resources/jquery.ui/themes/default/images/ui-anim_basic_16x16.gif new file mode 100644 index 00000000..085ccaec Binary files /dev/null and b/resources/jquery.ui/themes/default/images/ui-anim_basic_16x16.gif differ diff --git a/resources/jquery.ui/themes/default/images/ui-bg_flat_0_aaaaaa_40x100.png b/resources/jquery.ui/themes/default/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 00000000..5b5dab2a Binary files /dev/null and b/resources/jquery.ui/themes/default/images/ui-bg_flat_0_aaaaaa_40x100.png differ diff --git a/resources/jquery.ui/themes/default/images/ui-bg_flat_55_fbf9ee_40x100.png b/resources/jquery.ui/themes/default/images/ui-bg_flat_55_fbf9ee_40x100.png new file mode 100644 index 00000000..062f5807 Binary files /dev/null and b/resources/jquery.ui/themes/default/images/ui-bg_flat_55_fbf9ee_40x100.png differ diff --git a/resources/jquery.ui/themes/default/images/ui-bg_flat_65_ffffff_40x100.png b/resources/jquery.ui/themes/default/images/ui-bg_flat_65_ffffff_40x100.png new file mode 100644 index 00000000..ac8b229a Binary files /dev/null and b/resources/jquery.ui/themes/default/images/ui-bg_flat_65_ffffff_40x100.png differ diff --git a/resources/jquery.ui/themes/default/images/ui-bg_flat_75_cccccc_40x100.png b/resources/jquery.ui/themes/default/images/ui-bg_flat_75_cccccc_40x100.png new file mode 100644 index 00000000..5473afff Binary files /dev/null and b/resources/jquery.ui/themes/default/images/ui-bg_flat_75_cccccc_40x100.png differ diff --git a/resources/jquery.ui/themes/default/images/ui-bg_flat_75_dadada_40x100.png b/resources/jquery.ui/themes/default/images/ui-bg_flat_75_dadada_40x100.png new file mode 100644 index 00000000..7b7b0744 Binary files /dev/null and b/resources/jquery.ui/themes/default/images/ui-bg_flat_75_dadada_40x100.png differ diff --git a/resources/jquery.ui/themes/default/images/ui-bg_flat_75_e6e6e6_40x100.png b/resources/jquery.ui/themes/default/images/ui-bg_flat_75_e6e6e6_40x100.png new file mode 100644 index 00000000..5b4ca1a0 Binary files /dev/null and b/resources/jquery.ui/themes/default/images/ui-bg_flat_75_e6e6e6_40x100.png differ diff --git a/resources/jquery.ui/themes/default/images/ui-bg_flat_75_ffffff_40x100.png b/resources/jquery.ui/themes/default/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 00000000..ac8b229a Binary files /dev/null and b/resources/jquery.ui/themes/default/images/ui-bg_flat_75_ffffff_40x100.png differ diff --git a/resources/jquery.ui/themes/default/images/ui-bg_flat_95_fef1ec_40x100.png b/resources/jquery.ui/themes/default/images/ui-bg_flat_95_fef1ec_40x100.png new file mode 100644 index 00000000..c61aad2e Binary files /dev/null and b/resources/jquery.ui/themes/default/images/ui-bg_flat_95_fef1ec_40x100.png differ diff --git a/resources/jquery.ui/themes/default/images/ui-icons_222222_256x240.png b/resources/jquery.ui/themes/default/images/ui-icons_222222_256x240.png new file mode 100644 index 00000000..b273ff11 Binary files /dev/null and b/resources/jquery.ui/themes/default/images/ui-icons_222222_256x240.png differ diff --git a/resources/jquery.ui/themes/default/images/ui-icons_2e83ff_256x240.png b/resources/jquery.ui/themes/default/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 00000000..84defe6e Binary files /dev/null and b/resources/jquery.ui/themes/default/images/ui-icons_2e83ff_256x240.png differ diff --git a/resources/jquery.ui/themes/default/images/ui-icons_454545_256x240.png b/resources/jquery.ui/themes/default/images/ui-icons_454545_256x240.png new file mode 100644 index 00000000..59bd45b9 Binary files /dev/null and b/resources/jquery.ui/themes/default/images/ui-icons_454545_256x240.png differ diff --git a/resources/jquery.ui/themes/default/images/ui-icons_888888_256x240.png b/resources/jquery.ui/themes/default/images/ui-icons_888888_256x240.png new file mode 100644 index 00000000..6d02426c Binary files /dev/null and b/resources/jquery.ui/themes/default/images/ui-icons_888888_256x240.png differ diff --git a/resources/jquery.ui/themes/default/images/ui-icons_cd0a0a_256x240.png b/resources/jquery.ui/themes/default/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 00000000..2ab019b7 Binary files /dev/null and b/resources/jquery.ui/themes/default/images/ui-icons_cd0a0a_256x240.png differ diff --git a/resources/jquery.ui/themes/default/jquery.ui.accordion.css b/resources/jquery.ui/themes/default/jquery.ui.accordion.css new file mode 100644 index 00000000..8d8a1a6e --- /dev/null +++ b/resources/jquery.ui/themes/default/jquery.ui.accordion.css @@ -0,0 +1,12 @@ +/* Accordion +----------------------------------*/ +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-li-fix { display: inline; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } +/* IE7-/Win - Fix extra vertical space in lists */ +.ui-accordion a { zoom: 1; } +.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } +.ui-accordion .ui-accordion-content-active { display: block; } \ No newline at end of file diff --git a/resources/jquery.ui/themes/default/jquery.ui.autocomplete.css b/resources/jquery.ui/themes/default/jquery.ui.autocomplete.css new file mode 100644 index 00000000..5957f78f --- /dev/null +++ b/resources/jquery.ui/themes/default/jquery.ui.autocomplete.css @@ -0,0 +1,39 @@ +/* Autocomplete +----------------------------------*/ +.ui-autocomplete { position: absolute; cursor: default; } +.ui-autocomplete-loading { background: white /* @embed */ url('images/ui-anim_basic_16x16.gif') right center no-repeat; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* Menu +----------------------------------*/ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} diff --git a/resources/jquery.ui/themes/default/jquery.ui.button.css b/resources/jquery.ui/themes/default/jquery.ui.button.css new file mode 100644 index 00000000..47777a42 --- /dev/null +++ b/resources/jquery.ui/themes/default/jquery.ui.button.css @@ -0,0 +1,35 @@ +/* Button +----------------------------------*/ + +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; line-height: 1.4; } +.ui-button-text-only .ui-button-text { padding: .4em 1em; } +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } +.ui-button-text-icon .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } +.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon, .ui-button-text-icon .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } +.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } +.ui-button-text-icon .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ + + + + + diff --git a/resources/jquery.ui/themes/default/jquery.ui.core.css b/resources/jquery.ui/themes/default/jquery.ui.core.css new file mode 100644 index 00000000..b3e81930 --- /dev/null +++ b/resources/jquery.ui/themes/default/jquery.ui.core.css @@ -0,0 +1,37 @@ +/* +* jQuery UI CSS Framework +* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +*/ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } diff --git a/resources/jquery.ui/themes/default/jquery.ui.datepicker.css b/resources/jquery.ui/themes/default/jquery.ui.datepicker.css new file mode 100644 index 00000000..a1116e69 --- /dev/null +++ b/resources/jquery.ui/themes/default/jquery.ui.datepicker.css @@ -0,0 +1,61 @@ +/* Datepicker +----------------------------------*/ +.ui-datepicker { width: 17em; padding: .2em .2em 0; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +} \ No newline at end of file diff --git a/resources/jquery.ui/themes/default/jquery.ui.dialog.css b/resources/jquery.ui/themes/default/jquery.ui.dialog.css new file mode 100644 index 00000000..f8354642 --- /dev/null +++ b/resources/jquery.ui/themes/default/jquery.ui.dialog.css @@ -0,0 +1,13 @@ +/* Dialog +----------------------------------*/ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } diff --git a/resources/jquery.ui/themes/default/jquery.ui.progressbar.css b/resources/jquery.ui/themes/default/jquery.ui.progressbar.css new file mode 100644 index 00000000..bc0939ec --- /dev/null +++ b/resources/jquery.ui/themes/default/jquery.ui.progressbar.css @@ -0,0 +1,4 @@ +/* Progressbar +----------------------------------*/ +.ui-progressbar { height:2em; text-align: left; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/resources/jquery.ui/themes/default/jquery.ui.resizable.css b/resources/jquery.ui/themes/default/jquery.ui.resizable.css new file mode 100644 index 00000000..366643b5 --- /dev/null +++ b/resources/jquery.ui/themes/default/jquery.ui.resizable.css @@ -0,0 +1,13 @@ +/* Resizable +----------------------------------*/ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;} \ No newline at end of file diff --git a/resources/jquery.ui/themes/default/jquery.ui.selectable.css b/resources/jquery.ui/themes/default/jquery.ui.selectable.css new file mode 100644 index 00000000..c5d46ce2 --- /dev/null +++ b/resources/jquery.ui/themes/default/jquery.ui.selectable.css @@ -0,0 +1,3 @@ +/* Selectable +----------------------------------*/ +.ui-selectable-helper { border:1px dotted black } diff --git a/resources/jquery.ui/themes/default/jquery.ui.slider.css b/resources/jquery.ui/themes/default/jquery.ui.slider.css new file mode 100644 index 00000000..07c6f4e5 --- /dev/null +++ b/resources/jquery.ui/themes/default/jquery.ui.slider.css @@ -0,0 +1,17 @@ +/* Slider +----------------------------------*/ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; } \ No newline at end of file diff --git a/resources/jquery.ui/themes/default/jquery.ui.tabs.css b/resources/jquery.ui/themes/default/jquery.ui.tabs.css new file mode 100644 index 00000000..99e16dbd --- /dev/null +++ b/resources/jquery.ui/themes/default/jquery.ui.tabs.css @@ -0,0 +1,11 @@ +/* Tabs +----------------------------------*/ +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } +.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } diff --git a/resources/jquery.ui/themes/default/jquery.ui.theme.css b/resources/jquery.ui/themes/default/jquery.ui.theme.css new file mode 100644 index 00000000..7a425f73 --- /dev/null +++ b/resources/jquery.ui/themes/default/jquery.ui.theme.css @@ -0,0 +1,248 @@ + + +/* +* jQuery UI CSS Framework +* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=sans-serif&fwDefault=normal&fsDefault=1em&cornerRadius=0&bgColorHeader=cccccc&bgTextureHeader=01_flat.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=01_flat.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=01_flat.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=01_flat.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=01_flat.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +*/ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: sans-serif; font-size: 1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #aaaaaa; /* @embed */ background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; } +.ui-widget-content a { color: #222222; } +.ui-widget-header { border: 1px solid #aaaaaa; /* @embed */ background: #cccccc url(images/ui-bg_flat_75_cccccc_40x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; } +.ui-widget-header a { color: #222222; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; /* @embed */ background: #e6e6e6 url(images/ui-bg_flat_75_e6e6e6_40x100.png) 50% 50% repeat-x; font-weight: normal; color: #555555; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; /* @embed */ background: #dadada url(images/ui-bg_flat_75_dadada_40x100.png) 50% 50% repeat-x; font-weight: normal; color: #212121; } +.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; /* @embed */ background: #ffffff url(images/ui-bg_flat_65_ffffff_40x100.png) 50% 50% repeat-x; font-weight: normal; color: #212121; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; /* @embed */ background: #fbf9ee url(images/ui-bg_flat_55_fbf9ee_40x100.png) 50% 50% repeat-x; color: #363636; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; /* @embed */ background: #fef1ec url(images/ui-bg_flat_95_fef1ec_40x100.png) 50% 50% repeat-x; color: #cd0a0a; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; } +.ui-icon, .ui-widget-content .ui-icon, .ui-widget-header .ui-icon { /* @embed */ background-image: url(images/ui-icons_222222_256x240.png); } +.ui-state-default .ui-icon { /* @embed */ background-image: url(images/ui-icons_888888_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon, .ui-state-active .ui-icon { /* @embed */ background-image: url(images/ui-icons_454545_256x240.png); } +.ui-state-highlight .ui-icon { /* @embed */ background-image: url(images/ui-icons_2e83ff_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon { /* @embed */ background-image: url(images/ui-icons_cd0a0a_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 0; -webkit-border-top-left-radius: 0; border-top-left-radius: 0; } +.ui-corner-tr { -moz-border-radius-topright: 0; -webkit-border-top-right-radius: 0; border-top-right-radius: 0; } +.ui-corner-bl { -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; border-bottom-left-radius: 0; } +.ui-corner-br { -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; border-bottom-right-radius: 0; } +.ui-corner-top { -moz-border-radius-topleft: 0; -webkit-border-top-left-radius: 0; border-top-left-radius: 0; -moz-border-radius-topright: 0; -webkit-border-top-right-radius: 0; border-top-right-radius: 0; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; border-bottom-left-radius: 0; -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; border-bottom-right-radius: 0; } +.ui-corner-right { -moz-border-radius-topright: 0; -webkit-border-top-right-radius: 0; border-top-right-radius: 0; -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; border-bottom-right-radius: 0; } +.ui-corner-left { -moz-border-radius-topleft: 0; -webkit-border-top-left-radius: 0; border-top-left-radius: 0; -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; border-bottom-left-radius: 0; } +.ui-corner-all { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } + +/* Overlays */ +.ui-widget-overlay, .ui-widget-shadow { /* @embed */ background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; } +.ui-widget-overlay { opacity: .30;filter:Alpha(Opacity=30); } +.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; } \ No newline at end of file diff --git a/resources/jquery.ui/themes/vector/images/button-disabled-blue.png b/resources/jquery.ui/themes/vector/images/button-disabled-blue.png new file mode 100644 index 00000000..6242aca3 Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/button-disabled-blue.png differ diff --git a/resources/jquery.ui/themes/vector/images/button-disabled-green.png b/resources/jquery.ui/themes/vector/images/button-disabled-green.png new file mode 100644 index 00000000..cde520b5 Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/button-disabled-green.png differ diff --git a/resources/jquery.ui/themes/vector/images/button-disabled-red.png b/resources/jquery.ui/themes/vector/images/button-disabled-red.png new file mode 100644 index 00000000..0658a1db Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/button-disabled-red.png differ diff --git a/resources/jquery.ui/themes/vector/images/button-disabled.png b/resources/jquery.ui/themes/vector/images/button-disabled.png new file mode 100644 index 00000000..cde3b1fb Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/button-disabled.png differ diff --git a/resources/jquery.ui/themes/vector/images/button-down-blue.png b/resources/jquery.ui/themes/vector/images/button-down-blue.png new file mode 100644 index 00000000..e0f5a6c0 Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/button-down-blue.png differ diff --git a/resources/jquery.ui/themes/vector/images/button-down-green.png b/resources/jquery.ui/themes/vector/images/button-down-green.png new file mode 100644 index 00000000..1e54a0c4 Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/button-down-green.png differ diff --git a/resources/jquery.ui/themes/vector/images/button-down-red.png b/resources/jquery.ui/themes/vector/images/button-down-red.png new file mode 100644 index 00000000..b0565fd8 Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/button-down-red.png differ diff --git a/resources/jquery.ui/themes/vector/images/button-down.png b/resources/jquery.ui/themes/vector/images/button-down.png new file mode 100644 index 00000000..160330ec Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/button-down.png differ diff --git a/resources/jquery.ui/themes/vector/images/button-off-blue.png b/resources/jquery.ui/themes/vector/images/button-off-blue.png new file mode 100644 index 00000000..8a8224b0 Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/button-off-blue.png differ diff --git a/resources/jquery.ui/themes/vector/images/button-off-green.png b/resources/jquery.ui/themes/vector/images/button-off-green.png new file mode 100644 index 00000000..cdf46e7e Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/button-off-green.png differ diff --git a/resources/jquery.ui/themes/vector/images/button-off-red.png b/resources/jquery.ui/themes/vector/images/button-off-red.png new file mode 100644 index 00000000..1c609166 Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/button-off-red.png differ diff --git a/resources/jquery.ui/themes/vector/images/button-off.png b/resources/jquery.ui/themes/vector/images/button-off.png new file mode 100644 index 00000000..1bdc85c7 Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/button-off.png differ diff --git a/resources/jquery.ui/themes/vector/images/button-over-blue.png b/resources/jquery.ui/themes/vector/images/button-over-blue.png new file mode 100644 index 00000000..a744947d Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/button-over-blue.png differ diff --git a/resources/jquery.ui/themes/vector/images/button-over-green.png b/resources/jquery.ui/themes/vector/images/button-over-green.png new file mode 100644 index 00000000..0b8f6ef4 Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/button-over-green.png differ diff --git a/resources/jquery.ui/themes/vector/images/button-over-red.png b/resources/jquery.ui/themes/vector/images/button-over-red.png new file mode 100644 index 00000000..28003bd8 Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/button-over-red.png differ diff --git a/resources/jquery.ui/themes/vector/images/button-over.png b/resources/jquery.ui/themes/vector/images/button-over.png new file mode 100644 index 00000000..23d13ecb Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/button-over.png differ diff --git a/resources/jquery.ui/themes/vector/images/close.png b/resources/jquery.ui/themes/vector/images/close.png new file mode 100644 index 00000000..41d53913 Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/close.png differ diff --git a/resources/jquery.ui/themes/vector/images/titlebar-fade.png b/resources/jquery.ui/themes/vector/images/titlebar-fade.png new file mode 100644 index 00000000..b491ec49 Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/titlebar-fade.png differ diff --git a/resources/jquery.ui/themes/vector/images/ui-anim_basic_16x16.gif b/resources/jquery.ui/themes/vector/images/ui-anim_basic_16x16.gif new file mode 100644 index 00000000..085ccaec Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/ui-anim_basic_16x16.gif differ diff --git a/resources/jquery.ui/themes/vector/images/ui-bg_flat_15_cd0a0a_40x100.png b/resources/jquery.ui/themes/vector/images/ui-bg_flat_15_cd0a0a_40x100.png new file mode 100644 index 00000000..7680b543 Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/ui-bg_flat_15_cd0a0a_40x100.png differ diff --git a/resources/jquery.ui/themes/vector/images/ui-bg_flat_70_000000_40x100.png b/resources/jquery.ui/themes/vector/images/ui-bg_flat_70_000000_40x100.png new file mode 100644 index 00000000..abdc0108 Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/ui-bg_flat_70_000000_40x100.png differ diff --git a/resources/jquery.ui/themes/vector/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png b/resources/jquery.ui/themes/vector/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png new file mode 100644 index 00000000..28b566c2 Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png differ diff --git a/resources/jquery.ui/themes/vector/images/ui-bg_highlight-hard_80_d7ebf9_1x100.png b/resources/jquery.ui/themes/vector/images/ui-bg_highlight-hard_80_d7ebf9_1x100.png new file mode 100644 index 00000000..dac84622 Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/ui-bg_highlight-hard_80_d7ebf9_1x100.png differ diff --git a/resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_100_e4f1fb_1x100.png b/resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_100_e4f1fb_1x100.png new file mode 100644 index 00000000..ad7f982b Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_100_e4f1fb_1x100.png differ diff --git a/resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_100_ffffff_1x100.png b/resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_100_ffffff_1x100.png new file mode 100644 index 00000000..8169ec3e Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_100_ffffff_1x100.png differ diff --git a/resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_25_ffef8f_1x100.png b/resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_25_ffef8f_1x100.png new file mode 100644 index 00000000..54aff0cb Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_25_ffef8f_1x100.png differ diff --git a/resources/jquery.ui/themes/vector/images/ui-bg_inset-hard_100_f0f0f0_1x100.png b/resources/jquery.ui/themes/vector/images/ui-bg_inset-hard_100_f0f0f0_1x100.png new file mode 100644 index 00000000..3d87ac7b Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/ui-bg_inset-hard_100_f0f0f0_1x100.png differ diff --git a/resources/jquery.ui/themes/vector/images/ui-icons_2694e8_256x240.png b/resources/jquery.ui/themes/vector/images/ui-icons_2694e8_256x240.png new file mode 100644 index 00000000..9d192c2f Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/ui-icons_2694e8_256x240.png differ diff --git a/resources/jquery.ui/themes/vector/images/ui-icons_2e83ff_256x240.png b/resources/jquery.ui/themes/vector/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 00000000..09d1cdc8 Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/ui-icons_2e83ff_256x240.png differ diff --git a/resources/jquery.ui/themes/vector/images/ui-icons_3d80b3_256x240.png b/resources/jquery.ui/themes/vector/images/ui-icons_3d80b3_256x240.png new file mode 100644 index 00000000..f13b2066 Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/ui-icons_3d80b3_256x240.png differ diff --git a/resources/jquery.ui/themes/vector/images/ui-icons_666666_256x240.png b/resources/jquery.ui/themes/vector/images/ui-icons_666666_256x240.png new file mode 100644 index 00000000..f87de1ca Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/ui-icons_666666_256x240.png differ diff --git a/resources/jquery.ui/themes/vector/images/ui-icons_72a7cf_256x240.png b/resources/jquery.ui/themes/vector/images/ui-icons_72a7cf_256x240.png new file mode 100644 index 00000000..0d20b730 Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/ui-icons_72a7cf_256x240.png differ diff --git a/resources/jquery.ui/themes/vector/images/ui-icons_ffffff_256x240.png b/resources/jquery.ui/themes/vector/images/ui-icons_ffffff_256x240.png new file mode 100644 index 00000000..42f8f992 Binary files /dev/null and b/resources/jquery.ui/themes/vector/images/ui-icons_ffffff_256x240.png differ diff --git a/resources/jquery.ui/themes/vector/jquery.ui.accordion.css b/resources/jquery.ui/themes/vector/jquery.ui.accordion.css new file mode 100644 index 00000000..8d8a1a6e --- /dev/null +++ b/resources/jquery.ui/themes/vector/jquery.ui.accordion.css @@ -0,0 +1,12 @@ +/* Accordion +----------------------------------*/ +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-li-fix { display: inline; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } +/* IE7-/Win - Fix extra vertical space in lists */ +.ui-accordion a { zoom: 1; } +.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } +.ui-accordion .ui-accordion-content-active { display: block; } \ No newline at end of file diff --git a/resources/jquery.ui/themes/vector/jquery.ui.autocomplete.css b/resources/jquery.ui/themes/vector/jquery.ui.autocomplete.css new file mode 100644 index 00000000..6610a878 --- /dev/null +++ b/resources/jquery.ui/themes/vector/jquery.ui.autocomplete.css @@ -0,0 +1,39 @@ +/* Autocomplete +----------------------------------*/ +.ui-autocomplete { position: absolute; cursor: default; } +.ui-autocomplete-loading { /* @embed */ background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* Menu +----------------------------------*/ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} diff --git a/resources/jquery.ui/themes/vector/jquery.ui.button.css b/resources/jquery.ui/themes/vector/jquery.ui.button.css new file mode 100644 index 00000000..5507c42b --- /dev/null +++ b/resources/jquery.ui/themes/vector/jquery.ui.button.css @@ -0,0 +1,143 @@ +/* Button +----------------------------------*/ + +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; line-height: 1.4; } +.ui-button-text-only .ui-button-text { padding: .125em .25em; } +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } +.ui-button-text-icon .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } +.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon, .ui-button-text-icon .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } +.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } +.ui-button-text-icon .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ + +body button.ui-button { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + padding: 0.2em 0.6em 0.15em !important; + margin: 0.5em 0 0.5em 0.4em !important; + border: 1px solid #a6a6a6 !important; + /* @embed */ + background: #f2f2f2 url(images/button-off.png) repeat-x scroll 50% 100% !important; + cursor: pointer; + font-size: 1em; + line-height: 1.4em; + width: auto; + overflow: visible; +} +body button.ui-button:hover { + border-color: #6e7273; + /* @embed */ + background: #e1e1e1 url(images/button-over.png) repeat-x scroll 50% 100% !important; +} +body button.ui-button:active, +body button.ui-button:focus { + border-color: #707271; + /* @embed */ + background: #bfbfbf url(images/button-down.png) repeat-x scroll 50% 100% !important; +} +body button.ui-button.disabled { + color: #7f7f7f; + border-color: #cccccc; + /* @embed */ + background: #f2f2f2 url(images/button-disabled.png) repeat-x scroll 50% 100% !important; +} +/* Disables the annoying dashed border Firefox puts on active buttons */ +body button.ui-button::-moz-focus-inner { + border: 0; +} + +/* Green buttons */ + +body button.ui-button.ui-button-green { + color: white; + border-color: #97af7e !important; + /* @embed */ + background: #85c940 url(images/button-off-green.png) repeat-x scroll 50% 100% !important; +} +body button.ui-button.ui-button-green:hover { + border-color: #778e61; + /* @embed */ + background: #77ad40 url(images/button-over-green.png) repeat-x scroll 50% 100% !important; +} +body button.ui-button.ui-button-green:active, +body button.ui-button.ui-button-green:focus { + border-color: #61b000; + /* @embed */ + background: #54a800 url(images/button-down-green.png) repeat-x scroll 50% 100% !important; +} +body button.ui-button.ui-button-green.disabled { + color: #7f7f7f; + border-color: #b8d29f; + /* @embed */ + background: #c9cfc3 url(images/button-disabled-green.png) repeat-x scroll 50% 100% !important; +} + +/* Blue buttons */ + +body button.ui-button.ui-button-blue { + color: white; + border-color: #407ec9 !important; + /* @embed */ + background: #407ec9 url(images/button-off-blue.png) repeat-x scroll 50% 100% !important; +} +body button.ui-button.ui-button-blue:hover { + border-color: #245289; + /* @embed */ + background: #4071ad url(images/button-over-blue.png) repeat-x scroll 50% 100% !important; +} +body button.ui-button.ui-button-blue:active, +body button.ui-button.ui-button-blue:focus { + border-color: #003980; + /* @embed */ + background: #004daa url(images/button-down-blue.png) repeat-x scroll 50% 100% !important; +} +body button.ui-button.ui-button-blue.disabled { + border-color: #9eafc6; + /* @embed */ + background: #c3c8cf url(images/button-disabled-blue.png) repeat-x scroll 50% 100% !important; +} + +/* Red buttons */ + +body button.ui-button.ui-button-red { + color: white; + border-color: #af977e !important; + /* @embed */ + background: #c9404c url(images/button-off-red.png) repeat-x scroll 50% 100% !important; +} +body button.ui-button.ui-button-red:hover { + border-color: #8e7761; + /* @embed */ + background: #ad404a url(images/button-over-red.png) repeat-x scroll 50% 100% !important; +} +body button.ui-button.ui-button-red:active, +body button.ui-button.ui-button-red:focus { + border-color: #b06100; + /* @embed */ + background: #aa000f url(images/button-down-red.png) repeat-x scroll 50% 100% !important; +} +body button.ui-button.ui-button-red.disabled { + color: #7f7f7f; + border-color: #c3acae; + /* @embed */ + background: #cfc3c4 url(images/button-disabled-red.png) repeat-x scroll 50% 100% !important; +} diff --git a/resources/jquery.ui/themes/vector/jquery.ui.core.css b/resources/jquery.ui/themes/vector/jquery.ui.core.css new file mode 100644 index 00000000..b3e81930 --- /dev/null +++ b/resources/jquery.ui/themes/vector/jquery.ui.core.css @@ -0,0 +1,37 @@ +/* +* jQuery UI CSS Framework +* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +*/ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } diff --git a/resources/jquery.ui/themes/vector/jquery.ui.datepicker.css b/resources/jquery.ui/themes/vector/jquery.ui.datepicker.css new file mode 100644 index 00000000..a1116e69 --- /dev/null +++ b/resources/jquery.ui/themes/vector/jquery.ui.datepicker.css @@ -0,0 +1,61 @@ +/* Datepicker +----------------------------------*/ +.ui-datepicker { width: 17em; padding: .2em .2em 0; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +} \ No newline at end of file diff --git a/resources/jquery.ui/themes/vector/jquery.ui.dialog.css b/resources/jquery.ui/themes/vector/jquery.ui.dialog.css new file mode 100644 index 00000000..2b19fcdd --- /dev/null +++ b/resources/jquery.ui/themes/vector/jquery.ui.dialog.css @@ -0,0 +1,37 @@ +/* Dialog +----------------------------------*/ +.ui-dialog { position: absolute; padding: 0; width: 300px; } +.ui-dialog .ui-dialog-titlebar { padding: .75em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .75em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane button { float: right; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } +/* Customizations */ +body .ui-dialog .ui-dialog-titlebar-close:hover { + text-decoration: none; +} +body .ui-dialog .ui-dialog-content .status-invalid input { + border: 2px solid red; + padding: 2px 1px; +} +body .ui-dialog .ui-dialog-titlebar { + padding: 0.9em 1.4em 0.6em !important; +} +body .ui-dialog .ui-widget-header { + /* @embed */ + background: #f0f0f0 url(images/titlebar-fade.png) repeat-x scroll 50% 100% !important; +} +/* FIXME: Should just update the icon sprite if we're keeping this X */ +body .ui-dialog .ui-icon-closethick { + /* @embed */ + background: url(images/close.png) no-repeat 50% 50% !important; +} +body .ui-dialog .ui-dialog-buttonpane { + margin-top: 0 !important; + padding:0.3em 1.4em 0.5em 1.4em !important; +} diff --git a/resources/jquery.ui/themes/vector/jquery.ui.progressbar.css b/resources/jquery.ui/themes/vector/jquery.ui.progressbar.css new file mode 100644 index 00000000..bc0939ec --- /dev/null +++ b/resources/jquery.ui/themes/vector/jquery.ui.progressbar.css @@ -0,0 +1,4 @@ +/* Progressbar +----------------------------------*/ +.ui-progressbar { height:2em; text-align: left; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/resources/jquery.ui/themes/vector/jquery.ui.resizable.css b/resources/jquery.ui/themes/vector/jquery.ui.resizable.css new file mode 100644 index 00000000..366643b5 --- /dev/null +++ b/resources/jquery.ui/themes/vector/jquery.ui.resizable.css @@ -0,0 +1,13 @@ +/* Resizable +----------------------------------*/ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;} \ No newline at end of file diff --git a/resources/jquery.ui/themes/vector/jquery.ui.selectable.css b/resources/jquery.ui/themes/vector/jquery.ui.selectable.css new file mode 100644 index 00000000..c5d46ce2 --- /dev/null +++ b/resources/jquery.ui/themes/vector/jquery.ui.selectable.css @@ -0,0 +1,3 @@ +/* Selectable +----------------------------------*/ +.ui-selectable-helper { border:1px dotted black } diff --git a/resources/jquery.ui/themes/vector/jquery.ui.slider.css b/resources/jquery.ui/themes/vector/jquery.ui.slider.css new file mode 100644 index 00000000..07c6f4e5 --- /dev/null +++ b/resources/jquery.ui/themes/vector/jquery.ui.slider.css @@ -0,0 +1,17 @@ +/* Slider +----------------------------------*/ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; } \ No newline at end of file diff --git a/resources/jquery.ui/themes/vector/jquery.ui.tabs.css b/resources/jquery.ui/themes/vector/jquery.ui.tabs.css new file mode 100644 index 00000000..99e16dbd --- /dev/null +++ b/resources/jquery.ui/themes/vector/jquery.ui.tabs.css @@ -0,0 +1,11 @@ +/* Tabs +----------------------------------*/ +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } +.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } diff --git a/resources/jquery.ui/themes/vector/jquery.ui.theme.css b/resources/jquery.ui/themes/vector/jquery.ui.theme.css new file mode 100644 index 00000000..26551213 --- /dev/null +++ b/resources/jquery.ui/themes/vector/jquery.ui.theme.css @@ -0,0 +1,248 @@ + + +/* +* jQuery UI CSS Framework +* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=sans-serif&fwDefault=normal&fsDefault=1.0em&cornerRadius=3px&bgColorHeader=ffffff&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=100&borderColorHeader=aed0ea&fcHeader=222222&iconColorHeader=72a7cf&bgColorContent=f2f5f7&bgTextureContent=04_highlight_hard.png&bgImgOpacityContent=100&borderColorContent=cccccc&fcContent=362b36&iconColorContent=72a7cf&bgColorDefault=d7ebf9&bgTextureDefault=04_highlight_hard.png&bgImgOpacityDefault=80&borderColorDefault=aed0ea&fcDefault=2779aa&iconColorDefault=3d80b3&bgColorHover=e4f1fb&bgTextureHover=03_highlight_soft.png&bgImgOpacityHover=100&borderColorHover=74b2e2&fcHover=0070a3&iconColorHover=2694e8&bgColorActive=f0f0f0&bgTextureActive=06_inset_hard.png&bgImgOpacityActive=100&borderColorActive=cccccc&fcActive=000000&iconColorActive=666666&bgColorHighlight=ffef8f&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=25&borderColorHighlight=f9dd34&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=cd0a0a&bgTextureError=01_flat.png&bgImgOpacityError=15&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffffff&bgColorOverlay=000000&bgTextureOverlay=21_glow_ball.png&bgImgOpacityOverlay=100&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=70&opacityShadow=20&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px +*/ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: sans-serif; font-size: 0.8em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: sans-serif; font-size: 1em; } +.ui-widget-content { border: none; /* @embed */ background: #f2f5f7 url(images/ui-bg_highlight-hard_100_f2f5f7_1x100.png) 50% top repeat-x; color: #362b36; } +.ui-widget-content a { color: #362b36; } +.ui-widget-header { border: 1px solid #aed0ea; line-height: 1em; /* @embed */ background: #ffffff url(images/ui-bg_highlight-soft_100_ffffff_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; } +.ui-widget-header a { color: #222222; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #aed0ea; /* @embed */ background: #d7ebf9 url(images/ui-bg_highlight-hard_80_d7ebf9_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #2779aa; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #2779aa; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #74b2e2; /* @embed */ background: #e4f1fb url(images/ui-bg_highlight-soft_100_e4f1fb_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #0070a3; } +.ui-state-hover a, .ui-state-hover a:hover { color: #0070a3; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #cccccc; background: #f0f0f0 /* @embed */ url(images/ui-bg_inset-hard_100_f0f0f0_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #000000; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #000000; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #f9dd34; background: #ffef8f /* @embed */ url(images/ui-bg_highlight-soft_25_ffef8f_1x100.png) 50% top repeat-x; color: #363636; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #cd0a0a /* @embed */ url(images/ui-bg_flat_15_cd0a0a_40x100.png) 50% 50% repeat-x; color: #ffffff; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; } +.ui-icon, .ui-widget-content .ui-icon, .ui-widget-header .ui-icon { /* @embed */ background-image: url(images/ui-icons_72a7cf_256x240.png); } +.ui-state-default .ui-icon { /* @embed */ background-image: url(images/ui-icons_3d80b3_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon { /* @embed */ background-image: url(images/ui-icons_2694e8_256x240.png); } +.ui-state-active .ui-icon { /* @embed */ background-image: url(images/ui-icons_666666_256x240.png); } +.ui-state-highlight .ui-icon { /* @embed */ background-image: url(images/ui-icons_2e83ff_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon { /* @embed */ background-image: url(images/ui-icons_ffffff_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 0; -webkit-border-top-left-radius: 0; } +.ui-corner-tr { -moz-border-radius-topright: 0; -webkit-border-top-right-radius: 0; } +.ui-corner-bl { -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; } +.ui-corner-br { -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; } +.ui-corner-top { -moz-border-radius-topleft: 0; -webkit-border-top-left-radius: 0; -moz-border-radius-topright: 0; -webkit-border-top-right-radius: 0; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; } +.ui-corner-right { -moz-border-radius-topright: 0; -webkit-border-top-right-radius: 0; -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; } +.ui-corner-left { -moz-border-radius-topleft: 0; -webkit-border-top-left-radius: 0; -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; } +.ui-corner-all { -moz-border-radius: 0; -webkit-border-radius: 0; } + +/* Overlays */ +.ui-widget-overlay { background: #000000; opacity: .75;filter:Alpha(Opacity=75); } +.ui-widget-shadow { margin: -7px 0 0 -7px; padding: 7px; /* @embed */ background: #000000 url(images/ui-bg_flat_70_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; } \ No newline at end of file diff --git a/resources/jquery/jquery.async.js b/resources/jquery/jquery.async.js new file mode 100644 index 00000000..61493f71 --- /dev/null +++ b/resources/jquery/jquery.async.js @@ -0,0 +1,78 @@ +/* + * jQuery Asynchronous Plugin 1.0 + * + * Copyright (c) 2008 Vincent Robert (genezys.net) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + */ +(function($){ + +// opts.delay : (default 10) delay between async call in ms +// opts.bulk : (default 500) delay during which the loop can continue synchronously without yielding the CPU +// opts.test : (default true) function to test in the while test part +// opts.loop : (default empty) function to call in the while loop part +// opts.end : (default empty) function to call at the end of the while loop +$.whileAsync = function(opts) +{ + var delay = Math.abs(opts.delay) || 10, + bulk = isNaN(opts.bulk) ? 500 : Math.abs(opts.bulk), + test = opts.test || function(){ return true; }, + loop = opts.loop || function(){}, + end = opts.end || function(){}; + + (function(){ + + var t = false, + begin = new Date(); + + while( t = test() ) + { + loop(); + if( bulk === 0 || (new Date() - begin) > bulk ) + { + break; + } + } + if( t ) + { + setTimeout(arguments.callee, delay); + } + else + { + end(); + } + + })(); +}; + +// opts.delay : (default 10) delay between async call in ms +// opts.bulk : (default 500) delay during which the loop can continue synchronously without yielding the CPU +// opts.loop : (default empty) function to call in the each loop part, signature: function(index, value) this = value +// opts.end : (default empty) function to call at the end of the each loop +$.eachAsync = function(array, opts) +{ + var i = 0, + l = array.length, + loop = opts.loop || function(){}; + + $.whileAsync( + $.extend(opts, { + test: function(){ return i < l; }, + loop: function() + { + var val = array[i]; + return loop.call(val, i++, val); + } + }) + ); +}; + +$.fn.eachAsync = function(opts) +{ + $.eachAsync(this, opts); + return this; +} + +})(jQuery); + diff --git a/resources/jquery/jquery.autoEllipsis.js b/resources/jquery/jquery.autoEllipsis.js new file mode 100644 index 00000000..4993118d --- /dev/null +++ b/resources/jquery/jquery.autoEllipsis.js @@ -0,0 +1,131 @@ +/** + * Plugin that automatically truncates the plain text contents of an element and adds an ellipsis + */ +( function( $ ) { + +// Cache ellipsed substrings for every string-width combination +var cache = { }; +// Use a seperate cache when match highlighting is enabled +var matchTextCache = { }; + +$.fn.autoEllipsis = function( options ) { + options = $.extend( { + 'position': 'center', + 'tooltip': false, + 'restoreText': false, + 'hasSpan': false, + 'matchText': null + }, options ); + $(this).each( function() { + var $this = $(this); + if ( options.restoreText ) { + if ( ! $this.data( 'autoEllipsis.originalText' ) ) { + $this.data( 'autoEllipsis.originalText', $this.text() ); + } else { + $this.text( $this.data( 'autoEllipsis.originalText' ) ); + } + } + + // container element - used for measuring against + var $container = $this; + // trimmable text element - only the text within this element will be trimmed + var $trimmableText = null; + // protected text element - the width of this element is counted, but next is never trimmed from it + var $protectedText = null; + + if ( options.hasSpan ) { + $trimmableText = $this.children( options.selector ); + } else { + $trimmableText = $( '' ) + .css( 'whiteSpace', 'nowrap' ) + .text( $this.text() ); + $this + .empty() + .append( $trimmableText ); + } + + var text = $container.text(); + var trimmableText = $trimmableText.text(); + var w = $container.width(); + var pw = $protectedText ? $protectedText.width() : 0; + // Try cache + if ( !( text in cache ) ) { + cache[text] = {}; + } + if ( options.matchText && !( text in matchTextCache ) ) { + matchTextCache[text] = {}; + } + if ( options.matchText && !( options.matchText in matchTextCache[text] ) ) { + matchTextCache[text][options.matchText] = {}; + } + if ( !options.matchText && w in cache[text] ) { + $container.html( cache[text][w] ); + if ( options.tooltip ) + $container.attr( 'title', text ); + return; + } + if( options.matchText && options.matchText in matchTextCache[text] && w in matchTextCache[text][options.matchText] ) { + $container.html( matchTextCache[text][options.matchText][w] ); + if ( options.tooltip ) + $container.attr( 'title', text ); + return; + } + if ( $trimmableText.width() + pw > w ) { + switch ( options.position ) { + case 'right': + // Use binary search-like technique for efficiency + var l = 0, r = trimmableText.length; + do { + var m = Math.ceil( ( l + r ) / 2 ); + $trimmableText.text( trimmableText.substr( 0, m ) + '...' ); + if ( $trimmableText.width() + pw > w ) { + // Text is too long + r = m - 1; + } else { + l = m; + } + } while ( l < r ); + $trimmableText.text( trimmableText.substr( 0, l ) + '...' ); + break; + case 'center': + // TODO: Use binary search like for 'right' + var i = [Math.round( trimmableText.length / 2 ), Math.round( trimmableText.length / 2 )]; + var side = 1; // Begin with making the end shorter + while ( $trimmableText.outerWidth() + pw > w && i[0] > 0 ) { + $trimmableText.text( trimmableText.substr( 0, i[0] ) + '...' + trimmableText.substr( i[1] ) ); + // Alternate between trimming the end and begining + if ( side == 0 ) { + // Make the begining shorter + i[0]--; + side = 1; + } else { + // Make the end shorter + i[1]++; + side = 0; + } + } + break; + case 'left': + // TODO: Use binary search like for 'right' + var r = 0; + while ( $trimmableText.outerWidth() + pw > w && r < trimmableText.length ) { + $trimmableText.text( '...' + trimmableText.substr( r ) ); + r++; + } + break; + } + } + if ( options.tooltip ) { + $container.attr( 'title', text ); + } + if ( options.matchText ) { + $container.highlightText( options.matchText ); + matchTextCache[text][options.matchText][w] = $container.html(); + } else { + cache[text][w] = $container.html(); + } + + } ); +}; + +} )( jQuery ); \ No newline at end of file diff --git a/resources/jquery/jquery.checkboxShiftClick.js b/resources/jquery/jquery.checkboxShiftClick.js new file mode 100644 index 00000000..b2fcb6ef --- /dev/null +++ b/resources/jquery/jquery.checkboxShiftClick.js @@ -0,0 +1,28 @@ +/** + * jQuery checkboxShiftClick + * + * This will enable checkboxes to be checked or unchecked in a row by clicking one, holding shift and clicking another one + * + * @author Krinkle + * @license GPL v2 + */ +( function( $ ) { +jQuery.fn.checkboxShiftClick = function( text ) { + var prevCheckbox = null; + var $box = this; + // When our boxes are clicked.. + $box.click(function (e) { + // And one has been clicked before... + if (prevCheckbox !== null && e.shiftKey) { + // Check or uncheck this one and all in-between checkboxes + $box.slice( + Math.min($box.index(prevCheckbox), $box.index(e.target)), + Math.max($box.index(prevCheckbox), $box.index(e.target)) + 1 + ).attr({checked: e.target.checked ? 'checked' : ''}); + } + // Either way, update the prevCheckbox variable to the one clicked now + prevCheckbox = e.target; + }); + return $box; +}; +} )( jQuery ); \ No newline at end of file diff --git a/resources/jquery/jquery.client.js b/resources/jquery/jquery.client.js new file mode 100644 index 00000000..4b9f580f --- /dev/null +++ b/resources/jquery/jquery.client.js @@ -0,0 +1,206 @@ +/* + * User-agent detection + */ +( function( $ ) { +$.client = new ( function() { + + /* Private Members */ + + var profile; + + /* Public Functions */ + + /** + * Returns an object containing information about the browser + * + * The resulting client object will be in the following format: + * { + * 'name': 'firefox', + * 'layout': 'gecko', + * 'layoutVersion': '20101026', + * 'platform': 'linux' + * 'version': '3.5.1', + * 'versionBase': '3', + * 'versionNumber': 3.5, + * } + */ + this.profile = function() { + // Use the cached version if possible + if ( typeof profile === 'undefined' ) { + + /* Configuration */ + + // Name of browsers or layout engines we don't recognize + var uk = 'unknown'; + // Generic version digit + var x = 'x'; + // Strings found in user agent strings that need to be conformed + var wildUserAgents = [ 'Opera', 'Navigator', 'Minefield', 'KHTML', 'Chrome', 'PLAYSTATION 3']; + // Translations for conforming user agent strings + var userAgentTranslations = [ + // Tons of browsers lie about being something they are not + [/(Firefox|MSIE|KHTML,\slike\sGecko|Konqueror)/, ''], + // Chrome lives in the shadow of Safari still + ['Chrome Safari', 'Chrome'], + // KHTML is the layout engine not the browser - LIES! + ['KHTML', 'Konqueror'], + // Firefox nightly builds + ['Minefield', 'Firefox'], + // This helps keep differnt versions consistent + ['Navigator', 'Netscape'], + // This prevents version extraction issues, otherwise translation would happen later + ['PLAYSTATION 3', 'PS3'], + ]; + // Strings which precede a version number in a user agent string - combined and used as match 1 in + // version detectection + var versionPrefixes = [ + 'camino', 'chrome', 'firefox', 'netscape', 'netscape6', 'opera', 'version', 'konqueror', 'lynx', + 'msie', 'safari', 'ps3' + ]; + // Used as matches 2, 3 and 4 in version extraction - 3 is used as actual version number + var versionSuffix = '(\\/|\\;?\\s|)([a-z0-9\\.\\+]*?)(\\;|dev|rel|\\)|\\s|$)'; + // Names of known browsers + var names = [ + 'camino', 'chrome', 'firefox', 'netscape', 'konqueror', 'lynx', 'msie', 'opera', 'safari', 'ipod', + 'iphone', 'blackberry', 'ps3' + ]; + // Tanslations for conforming browser names + var nameTranslations = []; + // Names of known layout engines + var layouts = ['gecko', 'konqueror', 'msie', 'opera', 'webkit']; + // Translations for conforming layout names + var layoutTranslations = [['konqueror', 'khtml'], ['msie', 'trident'], ['opera', 'presto']]; + // Names of supported layout engines for version number + var layoutVersions = ['applewebkit', 'gecko']; + // Names of known operating systems + var platforms = ['win', 'mac', 'linux', 'sunos', 'solaris', 'iphone']; + // Translations for conforming operating system names + var platformTranslations = [['sunos', 'solaris']]; + + /* Methods */ + + // Performs multiple replacements on a string + function translate( source, translations ) { + for ( var i = 0; i < translations.length; i++ ) { + source = source.replace( translations[i][0], translations[i][1] ); + } + return source; + }; + + /* Pre-processing */ + + var userAgent = navigator.userAgent, match, name = uk, layout = uk, layoutversion = uk, platform = uk, version = x; + if ( match = new RegExp( '(' + wildUserAgents.join( '|' ) + ')' ).exec( userAgent ) ) { + // Takes a userAgent string and translates given text into something we can more easily work with + userAgent = translate( userAgent, userAgentTranslations ); + } + // Everything will be in lowercase from now on + userAgent = userAgent.toLowerCase(); + + /* Extraction */ + + if ( match = new RegExp( '(' + names.join( '|' ) + ')' ).exec( userAgent ) ) { + name = translate( match[1], nameTranslations ); + } + if ( match = new RegExp( '(' + layouts.join( '|' ) + ')' ).exec( userAgent ) ) { + layout = translate( match[1], layoutTranslations ); + } + if ( match = new RegExp( '(' + layoutVersions.join( '|' ) + ')\\\/(\\d+)').exec( navigator.userAgent.toLowerCase() ) ) { + layoutversion = parseInt(match[2]); + } + if ( match = new RegExp( '(' + platforms.join( '|' ) + ')' ).exec( navigator.platform.toLowerCase() ) ) { + platform = translate( match[1], platformTranslations ); + } + if ( match = new RegExp( '(' + versionPrefixes.join( '|' ) + ')' + versionSuffix ).exec( userAgent ) ) { + version = match[3]; + } + + /* Edge Cases -- did I mention about how user agent string lie? */ + + // Decode Safari's crazy 400+ version numbers + if ( name.match( /safari/ ) && version > 400 ) { + version = '2.0'; + } + // Expose Opera 10's lies about being Opera 9.8 + if ( name === 'opera' && version >= 9.8) { + version = userAgent.match( /version\/([0-9\.]*)/i )[1] || 10; + } + + /* Caching */ + + profile = { + 'name': name, + 'layout': layout, + 'layoutVersion': layoutversion, + 'platform': platform, + 'version': version, + 'versionBase': ( version !== x ? new String( version ).substr( 0, 1 ) : x ), + 'versionNumber': ( parseFloat( version, 10 ) || 0.0 ) + }; + } + return profile; + }; + + /** + * Checks the current browser against a support map object to determine if the browser has been black-listed or + * not. If the browser was not configured specifically it is assumed to work. It is assumed that the body + * element is classified as either "ltr" or "rtl". If neither is set, "ltr" is assumed. + * + * A browser map is in the following format: + * { + * 'ltr': { + * // Multiple rules with configurable operators + * 'msie': [['>=', 7], ['!=', 9]], + * // Blocked entirely + * 'iphone': false + * }, + * 'rtl': { + * // Test against a string + * 'msie': [['!==', '8.1.2.3']], + * // RTL rules do not fall through to LTR rules, you must explicity set each of them + * 'iphone': false + * } + * } + * + * @param map Object of browser support map + * + * @return Boolean true if browser known or assumed to be supported, false if blacklisted + */ + this.test = function( map ) { + var profile = jQuery.client.profile(); + var dir = jQuery( 'body' ).is( '.rtl' ) ? 'rtl' : 'ltr'; + // Check over each browser condition to determine if we are running in a compatible client + if ( typeof map[dir] !== 'object' || typeof map[dir][profile.name] === 'undefined' ) { + // Unknown, so we assume it's working + return true; + } + var name = map[dir][profile.name]; + for ( var condition in name ) { + var op = name[condition][0]; + var val = name[condition][1]; + if ( val === false ) { + return false; + } else if ( typeof val == 'string' ) { + if ( !( eval( 'profile.version' + op + '"' + val + '"' ) ) ) { + return false; + } + } else if ( typeof val == 'number' ) { + if ( !( eval( 'profile.versionNumber' + op + val ) ) ) { + return false; + } + } + } + return true; + } +} )(); + +$( document ).ready( function() { + var profile = $.client.profile(); + $( 'html' ) + .addClass( 'client-' + profile.name ) + .addClass( 'client-' + profile.name + '-' + profile.versionBase ) + .addClass( 'client-' + profile.layout ) + .addClass( 'client-' + profile.platform ); +} ); + +} )( jQuery ); diff --git a/resources/jquery/jquery.collapsibleTabs.js b/resources/jquery/jquery.collapsibleTabs.js new file mode 100644 index 00000000..b2399727 --- /dev/null +++ b/resources/jquery/jquery.collapsibleTabs.js @@ -0,0 +1,117 @@ +/* + * Collapsible tabs jQuery Plugin + */ +( function( $ ) { + $.fn.collapsibleTabs = function( options ) { + // return if the function is called on an empty jquery object + if( !this.length ) return this; + //merge options into the defaults + var $settings = $.extend( {}, $.collapsibleTabs.defaults, options ); + + this.each( function() { + var $this = $( this ); + // add the element to our array of collapsible managers + $.collapsibleTabs.instances = ( $.collapsibleTabs.instances.length == 0 ? + $this : $.collapsibleTabs.instances.add( $this ) ); + // attach the settings to the elements + $this.data( 'collapsibleTabsSettings', $settings ); + // attach data to our collapsible elements + $this.children( $settings.collapsible ).each( function() { + $.collapsibleTabs.addData( $( this ) ); + } ); + } ); + + // if we haven't already bound our resize hanlder, bind it now + if( !$.collapsibleTabs.boundEvent ) { + $( window ) + .delayedBind( '500', 'resize', function( ) { $.collapsibleTabs.handleResize(); } ); + } + // call our resize handler to setup the page + $.collapsibleTabs.handleResize(); + return this; + }; + $.collapsibleTabs = { + instances: [], + boundEvent: null, + defaults: { + expandedContainer: '#p-views ul', + collapsedContainer: '#p-cactions ul', + collapsible: 'li.collapsible', + shifting: false, + expandCondition: function( eleWidth ) { + return ( $( '#left-navigation' ).position().left + $( '#left-navigation' ).width() ) + < ( $( '#right-navigation' ).position().left - eleWidth ); + }, + collapseCondition: function() { + return ( $( '#left-navigation' ).position().left + $( '#left-navigation' ).width() ) + > $( '#right-navigation' ).position().left; + } + }, + addData: function( $collapsible ) { + var $settings = $collapsible.parent().data( 'collapsibleTabsSettings' ); + if ( $settings != null ) { + $collapsible.data( 'collapsibleTabsSettings', { + 'expandedContainer': $settings.expandedContainer, + 'collapsedContainer': $settings.collapsedContainer, + 'expandedWidth': $collapsible.width(), + 'prevElement': $collapsible.prev() + } ); + } + }, + getSettings: function( $collapsible ) { + var $settings = $collapsible.data( 'collapsibleTabsSettings' ); + if ( typeof $settings == 'undefined' ) { + $.collapsibleTabs.addData( $collapsible ); + $settings = $collapsible.data( 'collapsibleTabsSettings' ); + } + return $settings; + }, + handleResize: function( e ){ + $.collapsibleTabs.instances.each( function() { + var $this = $( this ), data = $.collapsibleTabs.getSettings( $this ); + if( data.shifting ) return; + + // if the two navigations are colliding + if( $this.children( data.collapsible ).length > 0 && data.collapseCondition() ) { + + $this.trigger( "beforeTabCollapse" ); + // move the element to the dropdown menu + $.collapsibleTabs.moveToCollapsed( $this.children( data.collapsible + ':last' ) ); + } + + // if there are still moveable items in the dropdown menu, + // and there is sufficient space to place them in the tab container + if( $( data.collapsedContainer + ' ' + data.collapsible ).length > 0 + && data.expandCondition( $.collapsibleTabs.getSettings( $( data.collapsedContainer ).children( + data.collapsible+":first" ) ).expandedWidth ) ) { + //move the element from the dropdown to the tab + $this.trigger( "beforeTabExpand" ); + $.collapsibleTabs + .moveToExpanded( data.collapsedContainer + " " + data.collapsible + ':first' ); + } + }); + }, + moveToCollapsed: function( ele ) { + var $moving = $( ele ); + var data = $.collapsibleTabs.getSettings( $moving ); + var dataExp = $.collapsibleTabs.getSettings( data.expandedContainer ); + dataExp.shifting = true; + $moving + .detach() + .prependTo( data.collapsedContainer ) + .data( 'collapsibleTabsSettings', data ); + dataExp.shifting = false; + $.collapsibleTabs.handleResize(); + }, + moveToExpanded: function( ele ) { + var $moving = $( ele ); + var data = $.collapsibleTabs.getSettings( $moving ); + var dataExp = $.collapsibleTabs.getSettings( data.expandedContainer ); + dataExp.shifting = true; + // remove this element from where it's at and put it in the dropdown menu + $moving.detach().insertAfter( data.prevElement ).data( 'collapsibleTabsSettings', data ); + dataExp.shifting = false; + $.collapsibleTabs.handleResize(); + } + }; +} )( jQuery ); diff --git a/resources/jquery/jquery.color.js b/resources/jquery/jquery.color.js new file mode 100644 index 00000000..e1b0d0dd --- /dev/null +++ b/resources/jquery/jquery.color.js @@ -0,0 +1,123 @@ +/* + * jQuery Color Animations + * Copyright 2007 John Resig + * Released under the MIT and GPL licenses. + */ + +(function(jQuery){ + + // We override the animation for all of these color styles + jQuery.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], function(i,attr){ + jQuery.fx.step[attr] = function(fx){ + if ( fx.state == 0 ) { + fx.start = getColor( fx.elem, attr ); + fx.end = getRGB( fx.end ); + } + + fx.elem.style[attr] = "rgb(" + [ + Math.max(Math.min( parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0]), 255), 0), + Math.max(Math.min( parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1]), 255), 0), + Math.max(Math.min( parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2]), 255), 0) + ].join(",") + ")"; + } + }); + + // Color Conversion functions from highlightFade + // By Blair Mitchelmore + // http://jquery.offput.ca/highlightFade/ + + // Parse strings looking for color tuples [255,255,255] + function getRGB(color) { + var result; + + // Check if we're already dealing with an array of colors + if ( color && color.constructor == Array && color.length == 3 ) + return color; + + // Look for rgb(num,num,num) + if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) + return [parseInt(result[1]), parseInt(result[2]), parseInt(result[3])]; + + // Look for rgb(num%,num%,num%) + if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)%\s*,\s*([0-9]+(?:\.[0-9]+)?)%\s*,\s*([0-9]+(?:\.[0-9]+)?)%\s*\)/.exec(color)) + return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55]; + + // Look for #a0b1c2 + if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) + return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)]; + + // Look for #fff + if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) + return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)]; + + // Otherwise, we're most likely dealing with a named color + return colors[jQuery.trim(color).toLowerCase()]; + } + + function getColor(elem, attr) { + var color; + + do { + color = jQuery.curCSS(elem, attr); + + // Keep going until we find an element that has color, or we hit the body + if ( color != '' && color != 'transparent' || jQuery.nodeName(elem, "body") ) + break; + + attr = "backgroundColor"; + } while ( elem = elem.parentNode ); + + return getRGB(color); + }; + + // Some named colors to work with + // From Interface by Stefan Petre + // http://interface.eyecon.ro/ + + var colors = { + aqua:[0,255,255], + azure:[240,255,255], + beige:[245,245,220], + black:[0,0,0], + blue:[0,0,255], + brown:[165,42,42], + cyan:[0,255,255], + darkblue:[0,0,139], + darkcyan:[0,139,139], + darkgrey:[169,169,169], + darkgreen:[0,100,0], + darkkhaki:[189,183,107], + darkmagenta:[139,0,139], + darkolivegreen:[85,107,47], + darkorange:[255,140,0], + darkorchid:[153,50,204], + darkred:[139,0,0], + darksalmon:[233,150,122], + darkviolet:[148,0,211], + fuchsia:[255,0,255], + gold:[255,215,0], + green:[0,128,0], + indigo:[75,0,130], + khaki:[240,230,140], + lightblue:[173,216,230], + lightcyan:[224,255,255], + lightgreen:[144,238,144], + lightgrey:[211,211,211], + lightpink:[255,182,193], + lightyellow:[255,255,224], + lime:[0,255,0], + magenta:[255,0,255], + maroon:[128,0,0], + navy:[0,0,128], + olive:[128,128,0], + orange:[255,165,0], + pink:[255,192,203], + purple:[128,0,128], + violet:[128,0,128], + red:[255,0,0], + silver:[192,192,192], + white:[255,255,255], + yellow:[255,255,0] + }; + +})(jQuery); diff --git a/resources/jquery/jquery.cookie.js b/resources/jquery/jquery.cookie.js new file mode 100644 index 00000000..eaa254e5 --- /dev/null +++ b/resources/jquery/jquery.cookie.js @@ -0,0 +1,89 @@ +/*jslint browser: true */ /*global jQuery: true */ + +/** + * jQuery Cookie plugin + * + * Copyright (c) 2010 Klaus Hartl (stilbuero.de) + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + */ + +// TODO JsDoc + +/** + * Create a cookie with the given key and value and other optional parameters. + * + * @example $.cookie('the_cookie', 'the_value'); + * @desc Set the value of a cookie. + * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true }); + * @desc Create a cookie with all available options. + * @example $.cookie('the_cookie', 'the_value'); + * @desc Create a session cookie. + * @example $.cookie('the_cookie', null); + * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain + * used when the cookie was set. + * + * @param key String The key of the cookie. + * @param value String The value of the cookie. + * @param options Object An object literal containing key/value pairs to provide optional cookie attributes. + * @option expires Number|Date Either an integer specifying the expiration date from now on in days or a Date object. + * If a negative value is specified (e.g. a date in the past), the cookie will be deleted. + * If set to null or omitted, the cookie will be a session cookie and will not be retained + * when the the browser exits. + * @option path String The value of the path atribute of the cookie (default: path of page that created the cookie). + * @option domain String The value of the domain attribute of the cookie (default: domain of page that created the cookie). + * @option secure Boolean If true, the secure attribute of the cookie will be set and the cookie transmission will + * require a secure protocol (like HTTPS). + * @type undefined + * + * @name $.cookie + * @cat Plugins/Cookie + * @author Klaus Hartl/klaus.hartl@stilbuero.de + */ + +/** + * Get the value of a cookie with the given key. + * + * @example $.cookie('the_cookie'); + * @desc Get the value of a cookie. + * + * @param key String The key of the cookie. + * @return The value of the cookie. + * @type String + * + * @name $.cookie + * @cat Plugins/Cookie + * @author Klaus Hartl/klaus.hartl@stilbuero.de + */ +jQuery.cookie = function (key, value, options) { + + // key and value given, set cookie... + if (arguments.length > 1 && (value === null || typeof value !== "object")) { + options = jQuery.extend({}, options); + + if (value === null) { + options.expires = -1; + } + + if (typeof options.expires === 'number') { + var days = options.expires, t = options.expires = new Date(); + t.setDate(t.getDate() + days); + } + + return (document.cookie = [ + encodeURIComponent(key), '=', + options.raw ? String(value) : encodeURIComponent(String(value)), + options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE + options.path ? '; path=' + options.path : '', + options.domain ? '; domain=' + options.domain : '', + options.secure ? '; secure' : '' + ].join('')); + } + + // key and possibly options given, get cookie... + options = value || {}; + var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent; + return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null; +}; diff --git a/resources/jquery/jquery.delayedBind.js b/resources/jquery/jquery.delayedBind.js new file mode 100644 index 00000000..6d972996 --- /dev/null +++ b/resources/jquery/jquery.delayedBind.js @@ -0,0 +1,68 @@ +(function( $ ) { +/** + * Function that escapes spaces in event names. This is needed because + * "_delayedBind-foo bar-1000" refers to two events + */ +function encodeEvent( event ) { + return event.replace( /-/g, '--' ).replace( / /g, '-' ); +} + +$.fn.extend( { + /** + * Bind a callback to an event in a delayed fashion. + * In detail, this means that the callback will be called a certain + * time after the event fires, but the timer is reset every time + * the event fires. + * @param timeout Number of milliseconds to wait + * @param event Name of the event (string) + * @param data Data to pass to the event handler (optional) + * @param callback Function to call + */ + delayedBind: function( timeout, event, data, callback ) { + var encEvent = encodeEvent( event ); + return this.each( function() { + var that = this; + // Bind the top half + // Do this only once for every (event, timeout) pair + if ( !( $(this).data( '_delayedBindBound-' + encEvent + '-' + timeout ) ) ) { + $(this).data( '_delayedBindBound-' + encEvent + '-' + timeout, true ); + $(this).bind( event, function() { + var timerID = $(this).data( '_delayedBindTimerID-' + encEvent + '-' + timeout ); + // Cancel the running timer + if ( typeof timerID != 'undefined' ) + clearTimeout( timerID ); + timerID = setTimeout( function() { + $(that).trigger( '_delayedBind-' + encEvent + '-' + timeout ); + }, timeout ); + $(this).data( '_delayedBindTimerID-' + encEvent + '-' + timeout, timerID ); + } ); + } + + // Bottom half + $(this).bind( '_delayedBind-' + encEvent + '-' + timeout, data, callback ); + } ); + }, + + /** + * Cancel the timers for delayed events on the selected elements. + */ + delayedBindCancel: function( timeout, event ) { + var encEvent = encodeEvent( event ); + return this.each( function() { + var timerID = $(this).data( '_delayedBindTimerID-' + encEvent + '-' + timeout ); + if ( typeof timerID != 'undefined' ) + clearTimeout( timerID ); + } ); + }, + + /** + * Unbind an event bound with delayedBind() + */ + delayedBindUnbind: function( timeout, event, callback ) { + var encEvent = encodeEvent( event ); + return this.each( function() { + $(this).unbind( '_delayedBind-' + encEvent + '-' + timeout, callback ); + } ); + } +} ); +} )( jQuery ); \ No newline at end of file diff --git a/resources/jquery/jquery.expandableField.js b/resources/jquery/jquery.expandableField.js new file mode 100644 index 00000000..ebe29a41 --- /dev/null +++ b/resources/jquery/jquery.expandableField.js @@ -0,0 +1,129 @@ +/** + * This plugin provides functionallity to expand a text box on focus to double it's current width + * + * Usage: + * + * Set options: + * $('#textbox').expandableField( { option1: value1, option2: value2 } ); + * $('#textbox').expandableField( option, value ); + * Get option: + * value = $('#textbox').expandableField( option ); + * Initialize: + * $('#textbox').expandableField(); + * + * Options: + * + */ +( function( $ ) { + +$.expandableField = { + /** + * Expand the field, make the callback + */ + expandField: function( e, context ) { + context.config.beforeExpand.call( context.data.$field, context ); + context.data.$field + .animate( { 'width': context.data.expandedWidth }, 'fast', function() { + context.config.afterExpand.call( this, context ); + } ); + }, + /** + * Condense the field, make the callback + */ + condenseField: function( e, context ) { + context.config.beforeCondense.call( context.data.$field, context ); + context.data.$field + .animate( { 'width': context.data.condensedWidth }, 'fast', function() { + context.config.afterCondense.call( this, context ); + } ); + }, + /** + * Sets the value of a property, and updates the widget accordingly + * @param property String Name of property + * @param value Mixed Value to set property with + */ + configure: function( context, property, value ) { + // Validate creation using fallback values + switch( property ) { + default: + context.config[property] = value; + break; + } + } + +}; +$.fn.expandableField = function() { + + // Multi-context fields + var returnValue = null; + var args = arguments; + + $( this ).each( function() { + + /* Construction / Loading */ + + var context = $( this ).data( 'expandableField-context' ); + if ( context == null ) { + context = { + config: { + // callback function for before collapse + 'beforeCondense': function( context ) {}, + // callback function for before expand + 'beforeExpand': function( context ) {}, + // callback function for after collapse + 'afterCondense': function( context ) {}, + // callback function for after expand + 'afterExpand': function( context ) {}, + // Whether the field should expand to the left or the right -- defaults to left + 'expandToLeft': true + } + }; + } + + /* API */ + // Handle various calling styles + if ( args.length > 0 ) { + if ( typeof args[0] == 'object' ) { + // Apply set of properties + for ( var key in args[0] ) { + $.expandableField.configure( context, key, args[0][key] ); + } + } else if ( typeof args[0] == 'string' ) { + if ( args.length > 1 ) { + // Set property values + $.expandableField.configure( context, args[0], args[1] ); + } else if ( returnValue == null ) { + // Get property values, but don't give access to internal data - returns only the first + returnValue = ( args[0] in context.config ? undefined : context.config[args[0]] ); + } + } + } + + /* Initialization */ + + if ( typeof context.data == 'undefined' ) { + context.data = { + // The width of the field in it's condensed state + 'condensedWidth': $( this ).width(), + // The width of the field in it's expanded state + 'expandedWidth': $( this ).width() * 2, + // Reference to the field + '$field': $( this ) + }; + + $( this ) + .addClass( 'expandableField' ) + .focus( function( e ) { + $.expandableField.expandField( e, context ); + } ) + .delayedBind( 250, 'blur', function( e ) { + $.expandableField.condenseField( e, context ); + } ); + } + // Store the context for next time + $( this ).data( 'expandableField-context', context ); + } ); + return returnValue !== null ? returnValue : $(this); +}; + +} )( jQuery ); diff --git a/resources/jquery/jquery.highlightText.js b/resources/jquery/jquery.highlightText.js new file mode 100644 index 00000000..7ca29efd --- /dev/null +++ b/resources/jquery/jquery.highlightText.js @@ -0,0 +1,62 @@ +/** + * Plugin that highlights matched word partials in a given element + * TODO: add a function for restoring the previous text + * TODO: accept mappings for converting shortcuts like WP: to Wikipedia: + */ +( function( $ ) { + +$.highlightText = { + + // Split our pattern string at spaces and run our highlight function on the results + splitAndHighlight: function( node, pat ) { + var patArray = pat.split(" "); + for ( var i = 0; i < patArray.length; i++ ) { + if ( patArray[i].length == 0 ) continue; + $.highlightText.innerHighlight( node, patArray[i] ); + } + return node; + }, + // scans a node looking for the pattern and wraps a span around each match + innerHighlight: function( node, pat ) { + // if this is a text node + if ( node.nodeType == 3 ) { + // TODO - need to be smarter about the character matching here. + // non latin characters can make regex think a new word has begun. + // look for an occurence of our pattern and store the starting position + var pos = node.data.search( new RegExp( "\\b" + $.escapeRE( pat ), "i" ) ); + if ( pos >= 0 ) { + // create the span wrapper for the matched text + var spannode = document.createElement( 'span' ); + spannode.className = 'highlight'; + // shave off the characters preceding the matched text + var middlebit = node.splitText( pos ); + // shave off any unmatched text off the end + middlebit.splitText( pat.length ); + // clone for appending to our span + var middleclone = middlebit.cloneNode( true ); + // append the matched text node to the span + spannode.appendChild( middleclone ); + // replace the matched node, with our span-wrapped clone of the matched node + middlebit.parentNode.replaceChild( spannode, middlebit ); + } + // if this is an element with childnodes, and not a script, style or an element we created + } else if ( node.nodeType == 1 && node.childNodes && !/(script|style)/i.test( node.tagName ) + && !( node.tagName.toLowerCase() == 'span' && node.className.match( /\bhighlight/ ) ) ) { + for ( var i = 0; i < node.childNodes.length; ++i ) { + // call the highlight function for each child node + $.highlightText.innerHighlight( node.childNodes[i], pat ); + } + } + } +}; + +$.fn.highlightText = function( matchString ) { + return $( this ).each( function() { + var $this = $( this ); + $this.data( 'highlightText', { originalText: $this.text() } ); + $.highlightText.splitAndHighlight( this, matchString ); + } ); +}; + +} )( jQuery ); + diff --git a/resources/jquery/jquery.js b/resources/jquery/jquery.js new file mode 100644 index 00000000..27456efd --- /dev/null +++ b/resources/jquery/jquery.js @@ -0,0 +1,6240 @@ +/*! + * jQuery JavaScript Library v1.4.2 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Sat Feb 13 22:33:48 2010 -0500 + */ +(function( window, undefined ) { + +// Define a local copy of jQuery +var jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context ); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // (both of which we optimize for) + quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/, + + // Is it a simple selector + isSimple = /^.[^:#\[\.,]*$/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // Has the ready events already been bound? + readyBound = false, + + // The functions to execute on DOM ready + readyList = [], + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, + hasOwnProperty = Object.prototype.hasOwnProperty, + push = Array.prototype.push, + slice = Array.prototype.slice, + indexOf = Array.prototype.indexOf; + +jQuery.fn = jQuery.prototype = { + init: function( selector, context ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if ( selector === "body" && !context ) { + this.context = document; + this[0] = document.body; + this.selector = "body"; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + match = quickExpr.exec( selector ); + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + doc = (context ? context.ownerDocument || context : document); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec( selector ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } + + } else { + ret = buildFragment( [ match[1] ], [ doc ] ); + selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes; + } + + return jQuery.merge( this, selector ); + + // HANDLE: $("#id") + } else { + elem = document.getElementById( match[2] ); + + if ( elem ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $("TAG") + } else if ( !context && /^\w+$/.test( selector ) ) { + this.selector = selector; + this.context = document; + selector = document.getElementsByTagName( selector ); + return jQuery.merge( this, selector ); + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return (context || rootjQuery).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return jQuery( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if (selector.selector !== undefined) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.4.2", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = jQuery(); + + if ( jQuery.isArray( elems ) ) { + push.apply( ret, elems ); + + } else { + jQuery.merge( ret, elems ); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + (this.selector ? " " : "") + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Attach the listeners + jQuery.bindReady(); + + // If the DOM is already ready + if ( jQuery.isReady ) { + // Execute the function immediately + fn.call( document, jQuery ); + + // Otherwise, remember the function for later + } else if ( readyList ) { + // Add the function to the wait list + readyList.push( fn ); + } + + return this; + }, + + eq: function( i ) { + return i === -1 ? + this.slice( i ) : + this.slice( i, +i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || jQuery(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + // copy reference to target object + var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging object literal values or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) { + var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src + : jQuery.isArray(copy) ? [] : {}; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + window.$ = _$; + + if ( deep ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // Handle when the DOM is ready + ready: function() { + // Make sure that the DOM is not already loaded + if ( !jQuery.isReady ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 13 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If there are functions bound, to execute + if ( readyList ) { + // Execute all of them + var fn, i = 0; + while ( (fn = readyList[ i++ ]) ) { + fn.call( document, jQuery ); + } + + // Reset the list of functions + readyList = null; + } + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyBound ) { + return; + } + + readyBound = true; + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + return jQuery.ready(); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent("onreadystatechange", DOMContentLoaded); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return toString.call(obj) === "[object Function]"; + }, + + isArray: function( obj ) { + return toString.call(obj) === "[object Array]"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) { + return false; + } + + // Not own constructor property must be Object + if ( obj.constructor + && !hasOwnProperty.call(obj, "constructor") + && !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwnProperty.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw msg; + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") + .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) { + + // Try to use the native JSON parser first + return window.JSON && window.JSON.parse ? + window.JSON.parse( data ) : + (new Function("return " + data))(); + + } else { + jQuery.error( "Invalid JSON: " + data ); + } + }, + + noop: function() {}, + + // Evalulates a script in a global context + globalEval: function( data ) { + if ( data && rnotwhite.test(data) ) { + // Inspired by code by Andrea Giammarchi + // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html + var head = document.getElementsByTagName("head")[0] || document.documentElement, + script = document.createElement("script"); + + script.type = "text/javascript"; + + if ( jQuery.support.scriptEval ) { + script.appendChild( document.createTextNode( data ) ); + } else { + script.text = data; + } + + // Use insertBefore instead of appendChild to circumvent an IE6 bug. + // This arises when a base node is used (#2709). + head.insertBefore( script, head.firstChild ); + head.removeChild( script ); + } + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction(object); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( var value = object[0]; + i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} + } + } + + return object; + }, + + trim: function( text ) { + return (text || "").replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // The extra typeof function check is to prevent crashes + // in Safari 2 (See: #3039) + if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array ) { + if ( array.indexOf ) { + return array.indexOf( elem ); + } + + for ( var i = 0, length = array.length; i < length; i++ ) { + if ( array[ i ] === elem ) { + return i; + } + } + + return -1; + }, + + merge: function( first, second ) { + var i = first.length, j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var ret = []; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + if ( !inv !== !callback( elems[ i ], i ) ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var ret = [], value; + + // Go through the array, translating each of the items to their + // new value (or values). + for ( var i = 0, length = elems.length; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + proxy: function( fn, proxy, thisObject ) { + if ( arguments.length === 2 ) { + if ( typeof proxy === "string" ) { + thisObject = fn; + fn = thisObject[ proxy ]; + proxy = undefined; + + } else if ( proxy && !jQuery.isFunction( proxy ) ) { + thisObject = proxy; + proxy = undefined; + } + } + + if ( !proxy && fn ) { + proxy = function() { + return fn.apply( thisObject || this, arguments ); + }; + } + + // Set the guid of unique handler to the same of original handler, so it can be removed + if ( fn ) { + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + } + + // So proxy can be declared as an argument + return proxy; + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = /(webkit)[ \/]([\w.]+)/.exec( ua ) || + /(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) || + /(msie) ([\w.]+)/.exec( ua ) || + !/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + browser: {} +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +if ( indexOf ) { + jQuery.inArray = function( elem, array ) { + return indexOf.call( array, elem ); + }; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch( error ) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +function evalScript( i, elem ) { + if ( elem.src ) { + jQuery.ajax({ + url: elem.src, + async: false, + dataType: "script" + }); + } else { + jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); + } + + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } +} + +// Mutifunctional method to get and set values to a collection +// The value/s can be optionally by executed if its a function +function access( elems, key, value, exec, fn, pass ) { + var length = elems.length; + + // Setting many attributes + if ( typeof key === "object" ) { + for ( var k in key ) { + access( elems, k, key[k], exec, fn, value ); + } + return elems; + } + + // Setting one attribute + if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = !pass && exec && jQuery.isFunction(value); + + for ( var i = 0; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + + return elems; + } + + // Getting an attribute + return length ? fn( elems[0], key ) : undefined; +} + +function now() { + return (new Date).getTime(); +} +(function() { + + jQuery.support = {}; + + var root = document.documentElement, + script = document.createElement("script"), + div = document.createElement("div"), + id = "script" + now(); + + div.style.display = "none"; + div.innerHTML = "
      a"; + + var all = div.getElementsByTagName("*"), + a = div.getElementsByTagName("a")[0]; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return; + } + + jQuery.support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: div.firstChild.nodeType === 3, + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText insted) + style: /red/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: a.getAttribute("href") === "/a", + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55$/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: div.getElementsByTagName("input")[0].value === "on", + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: document.createElement("select").appendChild( document.createElement("option") ).selected, + + parentNode: div.removeChild( div.appendChild( document.createElement("div") ) ).parentNode === null, + + // Will be defined later + deleteExpando: true, + checkClone: false, + scriptEval: false, + noCloneEvent: true, + boxModel: null + }; + + script.type = "text/javascript"; + try { + script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); + } catch(e) {} + + root.insertBefore( script, root.firstChild ); + + // Make sure that the execution of code works by injecting a script + // tag with appendChild/createTextNode + // (IE doesn't support this, fails, and uses .text instead) + if ( window[ id ] ) { + jQuery.support.scriptEval = true; + delete window[ id ]; + } + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete script.test; + + } catch(e) { + jQuery.support.deleteExpando = false; + } + + root.removeChild( script ); + + if ( div.attachEvent && div.fireEvent ) { + div.attachEvent("onclick", function click() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + jQuery.support.noCloneEvent = false; + div.detachEvent("onclick", click); + }); + div.cloneNode(true).fireEvent("onclick"); + } + + div = document.createElement("div"); + div.innerHTML = ""; + + var fragment = document.createDocumentFragment(); + fragment.appendChild( div.firstChild ); + + // WebKit doesn't clone checked state correctly in fragments + jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked; + + // Figure out if the W3C box model works as expected + // document.body must exist before we can do this + jQuery(function() { + var div = document.createElement("div"); + div.style.width = div.style.paddingLeft = "1px"; + + document.body.appendChild( div ); + jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; + document.body.removeChild( div ).style.display = 'none'; + + div = null; + }); + + // Technique from Juriy Zaytsev + // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ + var eventSupported = function( eventName ) { + var el = document.createElement("div"); + eventName = "on" + eventName; + + var isSupported = (eventName in el); + if ( !isSupported ) { + el.setAttribute(eventName, "return;"); + isSupported = typeof el[eventName] === "function"; + } + el = null; + + return isSupported; + }; + + jQuery.support.submitBubbles = eventSupported("submit"); + jQuery.support.changeBubbles = eventSupported("change"); + + // release memory in IE + root = script = div = all = a = null; +})(); + +jQuery.props = { + "for": "htmlFor", + "class": "className", + readonly: "readOnly", + maxlength: "maxLength", + cellspacing: "cellSpacing", + rowspan: "rowSpan", + colspan: "colSpan", + tabindex: "tabIndex", + usemap: "useMap", + frameborder: "frameBorder" +}; +var expando = "jQuery" + now(), uuid = 0, windowData = {}; + +jQuery.extend({ + cache: {}, + + expando:expando, + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + "object": true, + "applet": true + }, + + data: function( elem, name, data ) { + if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { + return; + } + + elem = elem == window ? + windowData : + elem; + + var id = elem[ expando ], cache = jQuery.cache, thisCache; + + if ( !id && typeof name === "string" && data === undefined ) { + return null; + } + + // Compute a unique ID for the element + if ( !id ) { + id = ++uuid; + } + + // Avoid generating a new cache unless none exists and we + // want to manipulate it. + if ( typeof name === "object" ) { + elem[ expando ] = id; + thisCache = cache[ id ] = jQuery.extend(true, {}, name); + + } else if ( !cache[ id ] ) { + elem[ expando ] = id; + cache[ id ] = {}; + } + + thisCache = cache[ id ]; + + // Prevent overriding the named cache with undefined values + if ( data !== undefined ) { + thisCache[ name ] = data; + } + + return typeof name === "string" ? thisCache[ name ] : thisCache; + }, + + removeData: function( elem, name ) { + if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { + return; + } + + elem = elem == window ? + windowData : + elem; + + var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ]; + + // If we want to remove a specific section of the element's data + if ( name ) { + if ( thisCache ) { + // Remove the section of cache data + delete thisCache[ name ]; + + // If we've removed all the data, remove the element's cache + if ( jQuery.isEmptyObject(thisCache) ) { + jQuery.removeData( elem ); + } + } + + // Otherwise, we want to remove all of the element's data + } else { + if ( jQuery.support.deleteExpando ) { + delete elem[ jQuery.expando ]; + + } else if ( elem.removeAttribute ) { + elem.removeAttribute( jQuery.expando ); + } + + // Completely remove the data cache + delete cache[ id ]; + } + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + if ( typeof key === "undefined" && this.length ) { + return jQuery.data( this[0] ); + + } else if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + var parts = key.split("."); + parts[1] = parts[1] ? "." + parts[1] : ""; + + if ( value === undefined ) { + var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); + + if ( data === undefined && this.length ) { + data = jQuery.data( this[0], key ); + } + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } else { + return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() { + jQuery.data( this, key, value ); + }); + } + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); +jQuery.extend({ + queue: function( elem, type, data ) { + if ( !elem ) { + return; + } + + type = (type || "fx") + "queue"; + var q = jQuery.data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( !data ) { + return q || []; + } + + if ( !q || jQuery.isArray(data) ) { + q = jQuery.data( elem, type, jQuery.makeArray(data) ); + + } else { + q.push( data ); + } + + return q; + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), fn = queue.shift(); + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift("inprogress"); + } + + fn.call(elem, function() { + jQuery.dequeue(elem, type); + }); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + } + + if ( data === undefined ) { + return jQuery.queue( this[0], type ); + } + return this.each(function( i, elem ) { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; + type = type || "fx"; + + return this.queue( type, function() { + var elem = this; + setTimeout(function() { + jQuery.dequeue( elem, type ); + }, time ); + }); + }, + + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + } +}); +var rclass = /[\n\t]/g, + rspace = /\s+/, + rreturn = /\r/g, + rspecialurl = /href|src|style/, + rtype = /(button|input)/i, + rfocusable = /(button|input|object|select|textarea)/i, + rclickable = /^(a|area)$/i, + rradiocheck = /radio|checkbox/; + +jQuery.fn.extend({ + attr: function( name, value ) { + return access( this, name, value, true, jQuery.attr ); + }, + + removeAttr: function( name, fn ) { + return this.each(function(){ + jQuery.attr( this, name, "" ); + if ( this.nodeType === 1 ) { + this.removeAttribute( name ); + } + }); + }, + + addClass: function( value ) { + if ( jQuery.isFunction(value) ) { + return this.each(function(i) { + var self = jQuery(this); + self.addClass( value.call(this, i, self.attr("class")) ); + }); + } + + if ( value && typeof value === "string" ) { + var classNames = (value || "").split( rspace ); + + for ( var i = 0, l = this.length; i < l; i++ ) { + var elem = this[i]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className ) { + elem.className = value; + + } else { + var className = " " + elem.className + " ", setClass = elem.className; + for ( var c = 0, cl = classNames.length; c < cl; c++ ) { + if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) { + setClass += " " + classNames[c]; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + if ( jQuery.isFunction(value) ) { + return this.each(function(i) { + var self = jQuery(this); + self.removeClass( value.call(this, i, self.attr("class")) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + var classNames = (value || "").split(rspace); + + for ( var i = 0, l = this.length; i < l; i++ ) { + var elem = this[i]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + var className = (" " + elem.className + " ").replace(rclass, " "); + for ( var c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[c] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function(i) { + var self = jQuery(this); + self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, i = 0, self = jQuery(this), + state = stateVal, + classNames = value.split( rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery.data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " "; + for ( var i = 0, l = this.length; i < l; i++ ) { + if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + if ( value === undefined ) { + var elem = this[0]; + + if ( elem ) { + if ( jQuery.nodeName( elem, "option" ) ) { + return (elem.attributes.value || {}).specified ? elem.value : elem.text; + } + + // We need to handle select boxes special + if ( jQuery.nodeName( elem, "select" ) ) { + var index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { + var option = options[ i ]; + + if ( option.selected ) { + // Get the specifc value for the option + value = jQuery(option).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + } + + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) { + return elem.getAttribute("value") === null ? "on" : elem.value; + } + + + // Everything else, we just grab the value + return (elem.value || "").replace(rreturn, ""); + + } + + return undefined; + } + + var isFunction = jQuery.isFunction(value); + + return this.each(function(i) { + var self = jQuery(this), val = value; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call(this, i, self.val()); + } + + // Typecast each time if the value is a Function and the appended + // value is therefore different each time. + if ( typeof val === "number" ) { + val += ""; + } + + if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) { + this.checked = jQuery.inArray( self.val(), val ) >= 0; + + } else if ( jQuery.nodeName( this, "select" ) ) { + var values = jQuery.makeArray(val); + + jQuery( "option", this ).each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + this.selectedIndex = -1; + } + + } else { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attr: function( elem, name, value, pass ) { + // don't set attributes on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { + return undefined; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery(elem)[name](value); + } + + var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ), + // Whether we are setting (or getting) + set = value !== undefined; + + // Try to normalize/fix the name + name = notxml && jQuery.props[ name ] || name; + + // Only do all the following if this is a node (faster for style) + if ( elem.nodeType === 1 ) { + // These attributes require special treatment + var special = rspecialurl.test( name ); + + // Safari mis-reports the default selected property of an option + // Accessing the parent's selectedIndex property fixes it + if ( name === "selected" && !jQuery.support.optSelected ) { + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + + // If applicable, access the attribute via the DOM 0 way + if ( name in elem && notxml && !special ) { + if ( set ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } + + elem[ name ] = value; + } + + // browsers index elements by id/name on forms, give priority to attributes. + if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) { + return elem.getAttributeNode( name ).nodeValue; + } + + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + if ( name === "tabIndex" ) { + var attributeNode = elem.getAttributeNode( "tabIndex" ); + + return attributeNode && attributeNode.specified ? + attributeNode.value : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + + return elem[ name ]; + } + + if ( !jQuery.support.style && notxml && name === "style" ) { + if ( set ) { + elem.style.cssText = "" + value; + } + + return elem.style.cssText; + } + + if ( set ) { + // convert the value to a string (all browsers do this but IE) see #1070 + elem.setAttribute( name, "" + value ); + } + + var attr = !jQuery.support.hrefNormalized && notxml && special ? + // Some attributes require a special call on IE + elem.getAttribute( name, 2 ) : + elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return attr === null ? undefined : attr; + } + + // elem is actually elem.style ... set the style + // Using attr for specific style information is now deprecated. Use style instead. + return jQuery.style( elem, name, value ); + } +}); +var rnamespaces = /\.(.*)$/, + fcleanup = function( nm ) { + return nm.replace(/[^\w\s\.\|`]/g, function( ch ) { + return "\\" + ch; + }); + }; + +/* + * A number of helper functions used for managing events. + * Many of the ideas behind this code originated from + * Dean Edwards' addEvent library. + */ +jQuery.event = { + + // Bind an event to an element + // Original by Dean Edwards + add: function( elem, types, handler, data ) { + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // For whatever reason, IE has trouble passing the window object + // around, causing it to be cloned in the process + if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) { + elem = window; + } + + var handleObjIn, handleObj; + + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + } + + // Make sure that the function being executed has a unique ID + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure + var elemData = jQuery.data( elem ); + + // If no elemData is found then we must be trying to bind to one of the + // banned noData elements + if ( !elemData ) { + return; + } + + var events = elemData.events = elemData.events || {}, + eventHandle = elemData.handle, eventHandle; + + if ( !eventHandle ) { + elemData.handle = eventHandle = function() { + // Handle the second event of a trigger and when + // an event is called after a page has unloaded + return typeof jQuery !== "undefined" && !jQuery.event.triggered ? + jQuery.event.handle.apply( eventHandle.elem, arguments ) : + undefined; + }; + } + + // Add elem as a property of the handle function + // This is to prevent a memory leak with non-native events in IE. + eventHandle.elem = elem; + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = types.split(" "); + + var type, i = 0, namespaces; + + while ( (type = types[ i++ ]) ) { + handleObj = handleObjIn ? + jQuery.extend({}, handleObjIn) : + { handler: handler, data: data }; + + // Namespaced event handlers + if ( type.indexOf(".") > -1 ) { + namespaces = type.split("."); + type = namespaces.shift(); + handleObj.namespace = namespaces.slice(0).sort().join("."); + + } else { + namespaces = []; + handleObj.namespace = ""; + } + + handleObj.type = type; + handleObj.guid = handler.guid; + + // Get the current list of functions bound to this event + var handlers = events[ type ], + special = jQuery.event.special[ type ] || {}; + + // Init the event handler queue + if ( !handlers ) { + handlers = events[ type ] = []; + + // Check for a special event handler + // Only use addEventListener/attachEvent if the special + // events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add the function to the element's handler list + handlers.push( handleObj ); + + // Keep track of which events have been used, for global triggering + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, pos ) { + // don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + var ret, type, fn, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType, + elemData = jQuery.data( elem ), + events = elemData && elemData.events; + + if ( !elemData || !events ) { + return; + } + + // types is actually an event object here + if ( types && types.type ) { + handler = types.handler; + types = types.type; + } + + // Unbind all events for the element + if ( !types || typeof types === "string" && types.charAt(0) === "." ) { + types = types || ""; + + for ( type in events ) { + jQuery.event.remove( elem, type + types ); + } + + return; + } + + // Handle multiple events separated by a space + // jQuery(...).unbind("mouseover mouseout", fn); + types = types.split(" "); + + while ( (type = types[ i++ ]) ) { + origType = type; + handleObj = null; + all = type.indexOf(".") < 0; + namespaces = []; + + if ( !all ) { + // Namespaced event handlers + namespaces = type.split("."); + type = namespaces.shift(); + + namespace = new RegExp("(^|\\.)" + + jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)") + } + + eventType = events[ type ]; + + if ( !eventType ) { + continue; + } + + if ( !handler ) { + for ( var j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( all || namespace.test( handleObj.namespace ) ) { + jQuery.event.remove( elem, origType, handleObj.handler, j ); + eventType.splice( j--, 1 ); + } + } + + continue; + } + + special = jQuery.event.special[ type ] || {}; + + for ( var j = pos || 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( handler.guid === handleObj.guid ) { + // remove the given handler for the given type + if ( all || namespace.test( handleObj.namespace ) ) { + if ( pos == null ) { + eventType.splice( j--, 1 ); + } + + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + + if ( pos != null ) { + break; + } + } + } + + // remove generic event handler if no more handlers exist + if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + removeEvent( elem, type, elemData.handle ); + } + + ret = null; + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + var handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + delete elemData.events; + delete elemData.handle; + + if ( jQuery.isEmptyObject( elemData ) ) { + jQuery.removeData( elem ); + } + } + }, + + // bubbling is internal + trigger: function( event, data, elem /*, bubbling */ ) { + // Event object or event type + var type = event.type || event, + bubbling = arguments[3]; + + if ( !bubbling ) { + event = typeof event === "object" ? + // jQuery.Event object + event[expando] ? event : + // Object literal + jQuery.extend( jQuery.Event(type), event ) : + // Just the event type (string) + jQuery.Event(type); + + if ( type.indexOf("!") >= 0 ) { + event.type = type = type.slice(0, -1); + event.exclusive = true; + } + + // Handle a global trigger + if ( !elem ) { + // Don't bubble custom events when global (to avoid too much overhead) + event.stopPropagation(); + + // Only trigger if we've ever bound an event for it + if ( jQuery.event.global[ type ] ) { + jQuery.each( jQuery.cache, function() { + if ( this.events && this.events[type] ) { + jQuery.event.trigger( event, data, this.handle.elem ); + } + }); + } + } + + // Handle triggering a single element + + // don't do events on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { + return undefined; + } + + // Clean up in case it is reused + event.result = undefined; + event.target = elem; + + // Clone the incoming data, if any + data = jQuery.makeArray( data ); + data.unshift( event ); + } + + event.currentTarget = elem; + + // Trigger the event, it is assumed that "handle" is a function + var handle = jQuery.data( elem, "handle" ); + if ( handle ) { + handle.apply( elem, data ); + } + + var parent = elem.parentNode || elem.ownerDocument; + + // Trigger an inline bound script + try { + if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) { + if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) { + event.result = false; + } + } + + // prevent IE from throwing an error for some elements with some event types, see #3533 + } catch (e) {} + + if ( !event.isPropagationStopped() && parent ) { + jQuery.event.trigger( event, data, parent, true ); + + } else if ( !event.isDefaultPrevented() ) { + var target = event.target, old, + isClick = jQuery.nodeName(target, "a") && type === "click", + special = jQuery.event.special[ type ] || {}; + + if ( (!special._default || special._default.call( elem, event ) === false) && + !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) { + + try { + if ( target[ type ] ) { + // Make sure that we don't accidentally re-trigger the onFOO events + old = target[ "on" + type ]; + + if ( old ) { + target[ "on" + type ] = null; + } + + jQuery.event.triggered = true; + target[ type ](); + } + + // prevent IE from throwing an error for some elements with some event types, see #3533 + } catch (e) {} + + if ( old ) { + target[ "on" + type ] = old; + } + + jQuery.event.triggered = false; + } + } + }, + + handle: function( event ) { + var all, handlers, namespaces, namespace, events; + + event = arguments[0] = jQuery.event.fix( event || window.event ); + event.currentTarget = this; + + // Namespaced event handlers + all = event.type.indexOf(".") < 0 && !event.exclusive; + + if ( !all ) { + namespaces = event.type.split("."); + event.type = namespaces.shift(); + namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)"); + } + + var events = jQuery.data(this, "events"), handlers = events[ event.type ]; + + if ( events && handlers ) { + // Clone the handlers to prevent manipulation + handlers = handlers.slice(0); + + for ( var j = 0, l = handlers.length; j < l; j++ ) { + var handleObj = handlers[ j ]; + + // Filter the functions by class + if ( all || namespace.test( handleObj.namespace ) ) { + // Pass in a reference to the handler function itself + // So that we can later remove it + event.handler = handleObj.handler; + event.data = handleObj.data; + event.handleObj = handleObj; + + var ret = handleObj.handler.apply( this, arguments ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + + if ( event.isImmediatePropagationStopped() ) { + break; + } + } + } + } + + return event.result; + }, + + props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), + + fix: function( event ) { + if ( event[ expando ] ) { + return event; + } + + // store a copy of the original event object + // and "clone" to set read-only properties + var originalEvent = event; + event = jQuery.Event( originalEvent ); + + for ( var i = this.props.length, prop; i; ) { + prop = this.props[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary + if ( !event.target ) { + event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either + } + + // check if target is a textnode (safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && event.fromElement ) { + event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; + } + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && event.clientX != null ) { + var doc = document.documentElement, body = document.body; + event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); + event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); + } + + // Add which for key events + if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) { + event.which = event.charCode || event.keyCode; + } + + // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) + if ( !event.metaKey && event.ctrlKey ) { + event.metaKey = event.ctrlKey; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && event.button !== undefined ) { + event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); + } + + return event; + }, + + // Deprecated, use jQuery.guid instead + guid: 1E8, + + // Deprecated, use jQuery.proxy instead + proxy: jQuery.proxy, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady, + teardown: jQuery.noop + }, + + live: { + add: function( handleObj ) { + jQuery.event.add( this, handleObj.origType, jQuery.extend({}, handleObj, {handler: liveHandler}) ); + }, + + remove: function( handleObj ) { + var remove = true, + type = handleObj.origType.replace(rnamespaces, ""); + + jQuery.each( jQuery.data(this, "events").live || [], function() { + if ( type === this.origType.replace(rnamespaces, "") ) { + remove = false; + return false; + } + }); + + if ( remove ) { + jQuery.event.remove( this, handleObj.origType, liveHandler ); + } + } + + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( this.setInterval ) { + this.onbeforeunload = eventHandle; + } + + return false; + }, + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + } +}; + +var removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + elem.removeEventListener( type, handle, false ); + } : + function( elem, type, handle ) { + elem.detachEvent( "on" + type, handle ); + }; + +jQuery.Event = function( src ) { + // Allow instantiation without the 'new' keyword + if ( !this.preventDefault ) { + return new jQuery.Event( src ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + // Event type + } else { + this.type = src; + } + + // timeStamp is buggy for some events on Firefox(#3843) + // So we won't rely on the native value + this.timeStamp = now(); + + // Mark it as fixed + this[ expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + } + // otherwise set the returnValue property of the original event to false (IE) + e.returnValue = false; + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Checks if an event happened on an element within another element +// Used in jQuery.event.special.mouseenter and mouseleave handlers +var withinElement = function( event ) { + // Check if mouse(over|out) are still within the same parent element + var parent = event.relatedTarget; + + // Firefox sometimes assigns relatedTarget a XUL element + // which we cannot access the parentNode property of + try { + // Traverse up the tree + while ( parent && parent !== this ) { + parent = parent.parentNode; + } + + if ( parent !== this ) { + // set the correct event type + event.type = event.data; + + // handle event if we actually just moused on to a non sub-element + jQuery.event.handle.apply( this, arguments ); + } + + // assuming we've left the element since we most likely mousedover a xul element + } catch(e) { } +}, + +// In case of event delegation, we only need to rename the event.type, +// liveHandler will take care of the rest. +delegate = function( event ) { + event.type = event.data; + jQuery.event.handle.apply( this, arguments ); +}; + +// Create mouseenter and mouseleave events +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + setup: function( data ) { + jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); + }, + teardown: function( data ) { + jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); + } + }; +}); + +// submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function( data, namespaces ) { + if ( this.nodeName.toLowerCase() !== "form" ) { + jQuery.event.add(this, "click.specialSubmit", function( e ) { + var elem = e.target, type = elem.type; + + if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { + return trigger( "submit", this, arguments ); + } + }); + + jQuery.event.add(this, "keypress.specialSubmit", function( e ) { + var elem = e.target, type = elem.type; + + if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { + return trigger( "submit", this, arguments ); + } + }); + + } else { + return false; + } + }, + + teardown: function( namespaces ) { + jQuery.event.remove( this, ".specialSubmit" ); + } + }; + +} + +// change delegation, happens here so we have bind. +if ( !jQuery.support.changeBubbles ) { + + var formElems = /textarea|input|select/i, + + changeFilters, + + getVal = function( elem ) { + var type = elem.type, val = elem.value; + + if ( type === "radio" || type === "checkbox" ) { + val = elem.checked; + + } else if ( type === "select-multiple" ) { + val = elem.selectedIndex > -1 ? + jQuery.map( elem.options, function( elem ) { + return elem.selected; + }).join("-") : + ""; + + } else if ( elem.nodeName.toLowerCase() === "select" ) { + val = elem.selectedIndex; + } + + return val; + }, + + testChange = function testChange( e ) { + var elem = e.target, data, val; + + if ( !formElems.test( elem.nodeName ) || elem.readOnly ) { + return; + } + + data = jQuery.data( elem, "_change_data" ); + val = getVal(elem); + + // the current data will be also retrieved by beforeactivate + if ( e.type !== "focusout" || elem.type !== "radio" ) { + jQuery.data( elem, "_change_data", val ); + } + + if ( data === undefined || val === data ) { + return; + } + + if ( data != null || val ) { + e.type = "change"; + return jQuery.event.trigger( e, arguments[1], elem ); + } + }; + + jQuery.event.special.change = { + filters: { + focusout: testChange, + + click: function( e ) { + var elem = e.target, type = elem.type; + + if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) { + return testChange.call( this, e ); + } + }, + + // Change has to be called before submit + // Keydown will be called before keypress, which is used in submit-event delegation + keydown: function( e ) { + var elem = e.target, type = elem.type; + + if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") || + (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || + type === "select-multiple" ) { + return testChange.call( this, e ); + } + }, + + // Beforeactivate happens also before the previous element is blurred + // with this event you can't trigger a change event, but you can store + // information/focus[in] is not needed anymore + beforeactivate: function( e ) { + var elem = e.target; + jQuery.data( elem, "_change_data", getVal(elem) ); + } + }, + + setup: function( data, namespaces ) { + if ( this.type === "file" ) { + return false; + } + + for ( var type in changeFilters ) { + jQuery.event.add( this, type + ".specialChange", changeFilters[type] ); + } + + return formElems.test( this.nodeName ); + }, + + teardown: function( namespaces ) { + jQuery.event.remove( this, ".specialChange" ); + + return formElems.test( this.nodeName ); + } + }; + + changeFilters = jQuery.event.special.change.filters; +} + +function trigger( type, elem, args ) { + args[0].type = type; + return jQuery.event.handle.apply( elem, args ); +} + +// Create "bubbling" focus and blur events +if ( document.addEventListener ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + jQuery.event.special[ fix ] = { + setup: function() { + this.addEventListener( orig, handler, true ); + }, + teardown: function() { + this.removeEventListener( orig, handler, true ); + } + }; + + function handler( e ) { + e = jQuery.event.fix( e ); + e.type = fix; + return jQuery.event.handle.call( this, e ); + } + }); +} + +jQuery.each(["bind", "one"], function( i, name ) { + jQuery.fn[ name ] = function( type, data, fn ) { + // Handle object literals + if ( typeof type === "object" ) { + for ( var key in type ) { + this[ name ](key, data, type[key], fn); + } + return this; + } + + if ( jQuery.isFunction( data ) ) { + fn = data; + data = undefined; + } + + var handler = name === "one" ? jQuery.proxy( fn, function( event ) { + jQuery( this ).unbind( event, handler ); + return fn.apply( this, arguments ); + }) : fn; + + if ( type === "unload" && name !== "one" ) { + this.one( type, data, fn ); + + } else { + for ( var i = 0, l = this.length; i < l; i++ ) { + jQuery.event.add( this[i], type, handler, data ); + } + } + + return this; + }; +}); + +jQuery.fn.extend({ + unbind: function( type, fn ) { + // Handle object literals + if ( typeof type === "object" && !type.preventDefault ) { + for ( var key in type ) { + this.unbind(key, type[key]); + } + + } else { + for ( var i = 0, l = this.length; i < l; i++ ) { + jQuery.event.remove( this[i], type, fn ); + } + } + + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.live( types, data, fn, selector ); + }, + + undelegate: function( selector, types, fn ) { + if ( arguments.length === 0 ) { + return this.unbind( "live" ); + + } else { + return this.die( types, null, fn, selector ); + } + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + + triggerHandler: function( type, data ) { + if ( this[0] ) { + var event = jQuery.Event( type ); + event.preventDefault(); + event.stopPropagation(); + jQuery.event.trigger( event, data, this[0] ); + return event.result; + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, i = 1; + + // link all the functions, so any of them can unbind this click handler + while ( i < args.length ) { + jQuery.proxy( fn, args[ i++ ] ); + } + + return this.click( jQuery.proxy( fn, function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + })); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +var liveMap = { + focus: "focusin", + blur: "focusout", + mouseenter: "mouseover", + mouseleave: "mouseout" +}; + +jQuery.each(["live", "die"], function( i, name ) { + jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) { + var type, i = 0, match, namespaces, preType, + selector = origSelector || this.selector, + context = origSelector ? this : jQuery( this.context ); + + if ( jQuery.isFunction( data ) ) { + fn = data; + data = undefined; + } + + types = (types || "").split(" "); + + while ( (type = types[ i++ ]) != null ) { + match = rnamespaces.exec( type ); + namespaces = ""; + + if ( match ) { + namespaces = match[0]; + type = type.replace( rnamespaces, "" ); + } + + if ( type === "hover" ) { + types.push( "mouseenter" + namespaces, "mouseleave" + namespaces ); + continue; + } + + preType = type; + + if ( type === "focus" || type === "blur" ) { + types.push( liveMap[ type ] + namespaces ); + type = type + namespaces; + + } else { + type = (liveMap[ type ] || type) + namespaces; + } + + if ( name === "live" ) { + // bind live handler + context.each(function(){ + jQuery.event.add( this, liveConvert( type, selector ), + { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } ); + }); + + } else { + // unbind live handler + context.unbind( liveConvert( type, selector ), fn ); + } + } + + return this; + } +}); + +function liveHandler( event ) { + var stop, elems = [], selectors = [], args = arguments, + related, match, handleObj, elem, j, i, l, data, + events = jQuery.data( this, "events" ); + + // Make sure we avoid non-left-click bubbling in Firefox (#3861) + if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) { + return; + } + + event.liveFired = this; + + var live = events.live.slice(0); + + for ( j = 0; j < live.length; j++ ) { + handleObj = live[j]; + + if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) { + selectors.push( handleObj.selector ); + + } else { + live.splice( j--, 1 ); + } + } + + match = jQuery( event.target ).closest( selectors, event.currentTarget ); + + for ( i = 0, l = match.length; i < l; i++ ) { + for ( j = 0; j < live.length; j++ ) { + handleObj = live[j]; + + if ( match[i].selector === handleObj.selector ) { + elem = match[i].elem; + related = null; + + // Those two events require additional checking + if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) { + related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0]; + } + + if ( !related || related !== elem ) { + elems.push({ elem: elem, handleObj: handleObj }); + } + } + } + } + + for ( i = 0, l = elems.length; i < l; i++ ) { + match = elems[i]; + event.currentTarget = match.elem; + event.data = match.handleObj.data; + event.handleObj = match.handleObj; + + if ( match.handleObj.origHandler.apply( match.elem, args ) === false ) { + stop = false; + break; + } + } + + return stop; +} + +function liveConvert( type, selector ) { + return "live." + (type && type !== "*" ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&"); +} + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( fn ) { + return fn ? this.bind( name, fn ) : this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } +}); + +// Prevent memory leaks in IE +// Window isn't included so as not to unbind existing unload events +// More info: +// - http://isaacschlueter.com/2006/10/msie-memory-leaks/ +if ( window.attachEvent && !window.addEventListener ) { + window.attachEvent("onunload", function() { + for ( var id in jQuery.cache ) { + if ( jQuery.cache[ id ].handle ) { + // Try/Catch is to handle iframes being unloaded, see #4280 + try { + jQuery.event.remove( jQuery.cache[ id ].handle.elem ); + } catch(e) {} + } + } + }); +} +/*! + * Sizzle CSS Selector Engine - v1.0 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function(){ + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function(selector, context, results, seed) { + results = results || []; + var origContext = context = context || document; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context), + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context ); + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set ); + } + } + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + var ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0]; + } + + if ( context ) { + var ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray(set); + } else { + prune = false; + } + + while ( parts.length ) { + var cur = parts.pop(), pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + } else if ( context && context.nodeType === 1 ) { + for ( var i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + } else { + for ( var i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function(results){ + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort(sortOrder); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[i-1] ) { + results.splice(i--, 1); + } + } + } + } + + return results; +}; + +Sizzle.matches = function(expr, set){ + return Sizzle(expr, null, null, set); +}; + +Sizzle.find = function(expr, context, isXML){ + var set, match; + + if ( !expr ) { + return []; + } + + for ( var i = 0, l = Expr.order.length; i < l; i++ ) { + var type = Expr.order[i], match; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + var left = match[1]; + match.splice(1,1); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace(/\\/g, ""); + set = Expr.find[ type ]( match, context, isXML ); + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = context.getElementsByTagName("*"); + } + + return {set: set, expr: expr}; +}; + +Sizzle.filter = function(expr, set, inplace, not){ + var old = expr, result = [], curLoop = set, match, anyFound, + isXMLFilter = set && set[0] && isXML(set[0]); + + while ( expr && set.length ) { + for ( var type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + var filter = Expr.filter[ type ], found, item, left = match[1]; + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( var i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + var pass = not ^ !!found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + } else { + curLoop[i] = false; + } + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw "Syntax error, unrecognized expression: " + msg; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + match: { + ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + leftMatch: {}, + attrMap: { + "class": "className", + "for": "htmlFor" + }, + attrHandle: { + href: function(elem){ + return elem.getAttribute("href"); + } + }, + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !/\W/.test(part), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + ">": function(checkSet, part){ + var isPartStr = typeof part === "string"; + + if ( isPartStr && !/\W/.test(part) ) { + part = part.toLowerCase(); + + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + } else { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + "": function(checkSet, part, isXML){ + var doneName = done++, checkFn = dirCheck; + + if ( typeof part === "string" && !/\W/.test(part) ) { + var nodeCheck = part = part.toLowerCase(); + checkFn = dirNodeCheck; + } + + checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); + }, + "~": function(checkSet, part, isXML){ + var doneName = done++, checkFn = dirCheck; + + if ( typeof part === "string" && !/\W/.test(part) ) { + var nodeCheck = part = part.toLowerCase(); + checkFn = dirNodeCheck; + } + + checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML); + } + }, + find: { + ID: function(match, context, isXML){ + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + return m ? [m] : []; + } + }, + NAME: function(match, context){ + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], results = context.getElementsByName(match[1]); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + TAG: function(match, context){ + return context.getElementsByTagName(match[1]); + } + }, + preFilter: { + CLASS: function(match, curLoop, inplace, result, not, isXML){ + match = " " + match[1].replace(/\\/g, "") + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + ID: function(match){ + return match[1].replace(/\\/g, ""); + }, + TAG: function(match, curLoop){ + return match[1].toLowerCase(); + }, + CHILD: function(match){ + if ( match[1] === "nth" ) { + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + ATTR: function(match, curLoop, inplace, result, not, isXML){ + var name = match[1].replace(/\\/g, ""); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + PSEUDO: function(match, curLoop, inplace, result, not){ + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + if ( !inplace ) { + result.push.apply( result, ret ); + } + return false; + } + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + POS: function(match){ + match.unshift( true ); + return match; + } + }, + filters: { + enabled: function(elem){ + return elem.disabled === false && elem.type !== "hidden"; + }, + disabled: function(elem){ + return elem.disabled === true; + }, + checked: function(elem){ + return elem.checked === true; + }, + selected: function(elem){ + // Accessing this property makes selected-by-default + // options in Safari work properly + elem.parentNode.selectedIndex; + return elem.selected === true; + }, + parent: function(elem){ + return !!elem.firstChild; + }, + empty: function(elem){ + return !elem.firstChild; + }, + has: function(elem, i, match){ + return !!Sizzle( match[3], elem ).length; + }, + header: function(elem){ + return /h\d/i.test( elem.nodeName ); + }, + text: function(elem){ + return "text" === elem.type; + }, + radio: function(elem){ + return "radio" === elem.type; + }, + checkbox: function(elem){ + return "checkbox" === elem.type; + }, + file: function(elem){ + return "file" === elem.type; + }, + password: function(elem){ + return "password" === elem.type; + }, + submit: function(elem){ + return "submit" === elem.type; + }, + image: function(elem){ + return "image" === elem.type; + }, + reset: function(elem){ + return "reset" === elem.type; + }, + button: function(elem){ + return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; + }, + input: function(elem){ + return /input|select|textarea|button/i.test(elem.nodeName); + } + }, + setFilters: { + first: function(elem, i){ + return i === 0; + }, + last: function(elem, i, match, array){ + return i === array.length - 1; + }, + even: function(elem, i){ + return i % 2 === 0; + }, + odd: function(elem, i){ + return i % 2 === 1; + }, + lt: function(elem, i, match){ + return i < match[3] - 0; + }, + gt: function(elem, i, match){ + return i > match[3] - 0; + }, + nth: function(elem, i, match){ + return match[3] - 0 === i; + }, + eq: function(elem, i, match){ + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function(elem, match, i, array){ + var name = match[1], filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; + } else if ( name === "not" ) { + var not = match[3]; + + for ( var i = 0, l = not.length; i < l; i++ ) { + if ( not[i] === elem ) { + return false; + } + } + + return true; + } else { + Sizzle.error( "Syntax error, unrecognized expression: " + name ); + } + }, + CHILD: function(elem, match){ + var type = match[1], node = elem; + switch (type) { + case 'only': + case 'first': + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + if ( type === "first" ) { + return true; + } + node = elem; + case 'last': + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + return true; + case 'nth': + var first = match[2], last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + var doneName = match[0], + parent = elem.parentNode; + + if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { + var count = 0; + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + parent.sizcache = doneName; + } + + var diff = elem.nodeIndex - last; + if ( first === 0 ) { + return diff === 0; + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + ID: function(elem, match){ + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + TAG: function(elem, match){ + return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; + }, + CLASS: function(elem, match){ + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + ATTR: function(elem, match){ + var name = match[1], + result = Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + POS: function(elem, match, i, array){ + var name = match[2], filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){ + return "\\" + (num - 0 + 1); + })); +} + +var makeArray = function(array, results) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch(e){ + makeArray = function(array, results) { + var ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + } else { + if ( typeof array.length === "number" ) { + for ( var i = 0, l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + } else { + for ( var i = 0; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + if ( a == b ) { + hasDuplicate = true; + } + return a.compareDocumentPosition ? -1 : 1; + } + + var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} else if ( "sourceIndex" in document.documentElement ) { + sortOrder = function( a, b ) { + if ( !a.sourceIndex || !b.sourceIndex ) { + if ( a == b ) { + hasDuplicate = true; + } + return a.sourceIndex ? -1 : 1; + } + + var ret = a.sourceIndex - b.sourceIndex; + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} else if ( document.createRange ) { + sortOrder = function( a, b ) { + if ( !a.ownerDocument || !b.ownerDocument ) { + if ( a == b ) { + hasDuplicate = true; + } + return a.ownerDocument ? -1 : 1; + } + + var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); + aRange.setStart(a, 0); + aRange.setEnd(a, 0); + bRange.setStart(b, 0); + bRange.setEnd(b, 0); + var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange); + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} + +// Utility function for retreiving the text value of an array of DOM nodes +function getText( elems ) { + var ret = "", elem; + + for ( var i = 0; elems[i]; i++ ) { + elem = elems[i]; + + // Get the text from text nodes and CDATA nodes + if ( elem.nodeType === 3 || elem.nodeType === 4 ) { + ret += elem.nodeValue; + + // Traverse everything else, except comment nodes + } else if ( elem.nodeType !== 8 ) { + ret += getText( elem.childNodes ); + } + } + + return ret; +} + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date).getTime(); + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + var root = document.documentElement; + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function(match, context, isXML){ + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; + } + }; + + Expr.filter.ID = function(elem, match){ + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + root = form = null; // release memory in IE +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function(match, context){ + var results = context.getElementsByTagName(match[1]); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + Expr.attrHandle.href = function(elem){ + return elem.getAttribute("href", 2); + }; + } + + div = null; // release memory in IE +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, div = document.createElement("div"); + div.innerHTML = "

      "; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function(query, context, extra, seed){ + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && context.nodeType === 9 && !isXML(context) ) { + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(e){} + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + div = null; // release memory in IE + })(); +} + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
      "; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function(match, context, isXML) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + div = null; // release memory in IE +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + elem = elem[dir]; + var match = false; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem.sizcache = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + elem = elem[dir]; + var match = false; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem.sizcache = doneName; + elem.sizset = i; + } + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +var contains = document.compareDocumentPosition ? function(a, b){ + return !!(a.compareDocumentPosition(b) & 16); +} : function(a, b){ + return a !== b && (a.contains ? a.contains(b) : true); +}; + +var isXML = function(elem){ + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function(selector, context){ + var tmpSet = [], later = "", match, + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = getText; +jQuery.isXMLDoc = isXML; +jQuery.contains = contains; + +return; + +window.Sizzle = Sizzle; + +})(); +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + slice = Array.prototype.slice; + +// Implement the identical functionality for filter and not +var winnow = function( elements, qualifier, keep ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return (elem === qualifier) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return (jQuery.inArray( elem, qualifier ) >= 0) === keep; + }); +}; + +jQuery.fn.extend({ + find: function( selector ) { + var ret = this.pushStack( "", "find", selector ), length = 0; + + for ( var i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( var n = length; n < ret.length; n++ ) { + for ( var r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && jQuery.filter( selector, this ).length > 0; + }, + + closest: function( selectors, context ) { + if ( jQuery.isArray( selectors ) ) { + var ret = [], cur = this[0], match, matches = {}, selector; + + if ( cur && selectors.length ) { + for ( var i = 0, l = selectors.length; i < l; i++ ) { + selector = selectors[i]; + + if ( !matches[selector] ) { + matches[selector] = jQuery.expr.match.POS.test( selector ) ? + jQuery( selector, context || this.context ) : + selector; + } + } + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( selector in matches ) { + match = matches[selector]; + + if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) { + ret.push({ selector: selector, elem: cur }); + delete matches[selector]; + } + } + cur = cur.parentNode; + } + } + + return ret; + } + + var pos = jQuery.expr.match.POS.test( selectors ) ? + jQuery( selectors, context || this.context ) : null; + + return this.map(function( i, cur ) { + while ( cur && cur.ownerDocument && cur !== context ) { + if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) { + return cur; + } + cur = cur.parentNode; + } + return null; + }); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + if ( !elem || typeof elem === "string" ) { + return jQuery.inArray( this[0], + // If it receives a string, the selector is used + // If it receives nothing, the siblings are used + elem ? jQuery( elem ) : this.parent().children() ); + } + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context || this.context ) : + jQuery.makeArray( selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( elem.parentNode.firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, slice.call(arguments).join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], cur = elem[dir]; + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); +var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g, + rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i, + rtagName = /<([\w:]+)/, + rtbody = /"; + }, + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
      ", "
      " ], + thead: [ 1, "", "
      " ], + tr: [ 2, "", "
      " ], + td: [ 3, "", "
      " ], + col: [ 2, "", "
      " ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }; + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and - html( 'bottomscripts' ); /* JS call to runBodyOnloadHook */ ?> html( 'reporttime' ) ?> data['debug'] ): ?> @@ -625,7 +643,7 @@ class VectorTemplate extends QuickTemplate {
        data['language_urls'] as $langlink ): ?> -
      • +
      @@ -640,7 +658,7 @@ class VectorTemplate extends QuickTemplate {
      @@ -661,14 +679,14 @@ class VectorTemplate extends QuickTemplate { * when UI is in RTL mode */ private function renderNavigation( $elements ) { - global $wgContLang, $wgVectorUseSimpleSearch, $wgStylePath; + global $wgVectorUseSimpleSearch, $wgVectorShowVariantName, $wgUser; // If only one element was given, wrap it in an array, allowing more // flexible arguments if ( !is_array( $elements ) ) { $elements = array( $elements ); // If there's a series of elements, reverse them when in RTL mode - } else if ( $wgContLang->isRTL() ) { + } else if ( wfUILang()->isRTL() ) { $elements = array_reverse( $elements ); } // Render elements @@ -680,8 +698,8 @@ class VectorTemplate extends QuickTemplate {
      msg('namespaces') ?>
      html('userlangattributes') ?>> - data['namespace_urls'] as $key => $link ): ?> -
    • >>
    • + data['namespace_urls'] as $link ): ?> +
    • >>
    • @@ -690,10 +708,19 @@ class VectorTemplate extends QuickTemplate { case 'VARIANTS': ?>
      + +

      + data['variant_urls'] as $link ): ?> + + + + +

      +
      msg('variants') ?>
    • @@ -706,8 +733,8 @@ class VectorTemplate extends QuickTemplate {
      msg('views') ?>
      html('userlangattributes') ?>> - data['view_urls'] as $key => $link ): ?> - >>' : ''.htmlspecialchars( $link['text'] ).'') ?>
    • + data['view_urls'] as $link ): ?> + >>' : htmlspecialchars( $link['text'] ) ) ?>
      @@ -719,7 +746,7 @@ class VectorTemplate extends QuickTemplate {
      msg('actions') ?>
      " ] || - - tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && - [ 1, "", "
      " ] || - - !tags.indexOf("", "" ] || - - // matched above - (!tags.indexOf("", "" ] || - - !tags.indexOf("", "" ] || - - // IE can't serialize and \ No newline at end of file diff --git a/skins/vector/csshover.min.htc b/skins/vector/csshover.min.htc new file mode 100644 index 00000000..7e5c57b3 --- /dev/null +++ b/skins/vector/csshover.min.htc @@ -0,0 +1,12 @@ + + diff --git a/skins/vector/cssjanus/COPYING b/skins/vector/cssjanus/COPYING deleted file mode 100644 index 3f2c8953..00000000 --- a/skins/vector/cssjanus/COPYING +++ /dev/null @@ -1,13 +0,0 @@ - Copyright 2008 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/skins/vector/cssjanus/LICENSE b/skins/vector/cssjanus/LICENSE deleted file mode 100644 index d6456956..00000000 --- a/skins/vector/cssjanus/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/skins/vector/cssjanus/README b/skins/vector/cssjanus/README deleted file mode 100644 index 9b922156..00000000 --- a/skins/vector/cssjanus/README +++ /dev/null @@ -1,91 +0,0 @@ -=CSSJanus= - -_Flips CSS from LTR to an RTL orienation and vice-versa_ - -Author: `Lindsey Simon ` - -==Introduction== - -CSSJanus is CSS parser utility designed to aid the conversion of a website's -layout from left-to-right(LTR) to right-to-left(RTL). The script was born out of -a need to convert CSS for RTL languages when tables are not being used for layout (since tables will automatically reorder TD's in RTL). -CSSJanus will change most of the obvious CSS property names and their values as -well as some not-so-obvious ones (cursor, background-position %, etc...). -The script is designed to offer flexibility to account for cases when you do -not want to change certain rules which exist to account for bidirectional text -display bugs, as well as situations where you may or may not want to flip annotations inside of the background url string. -Note that you can disable CSSJanus from running on an entire class or any -rule within a class by prepending a /* @noflip */ comment before the rule(s) -you want CSSJanus to ignore. - -CSSJanus itself is not always enough to make a website that works in a LTR -language context work in a RTL language all the way, but it is a start. - -==Getting the code== - -View the trunk at: - - http://cssjanus.googlecode.com/svn/trunk/ - -Check out the latest development version anonymously with: - -{{{ - $ svn checkout http://cssjanus.googlecode.com/svn/trunk/ cssjanus -}}} - -==Using== - -Usage: - ./cssjanus.py < file.css > file-rtl.css -Flags: - --swap_left_right_in_url: Fixes "left"/"right" string within urls. - Ex: ./cssjanus.py --swap_left_right_in_url < file.css > file_rtl.css - --swap_ltr_rtl_in_url: Fixes "ltr"/"rtl" string within urls. - Ex: ./cssjanus.py --swap_ltr_rtl_in_url < file.css > file_rtl.css - -If you'd like to make use of the webapp version of cssjanus, you'll need to -download the Google App Engine SDK - http://code.google.com/appengine/downloads.html -and also drop a "django" directory into this directory, with the latest svn -from django. You should be good to go with that setup. Please let me know -otherwise. - -==Bugs, Patches== - -Patches and bug reports are welcome, just please keep the style -consistent with the original source. If you find a bug, please include a diff -of cssjanus_test.py with the bug included as a new unit test which fails. It -will make understanding and fixing the bug easier. - -==Todo== - -* Include some helpers for some typical bidi text solutions? -* Aural CSS (azimuth) swapping? - -==Contributors== - -Additional thanks to Mike Samuel for his work on csslex.py, Andy Perelson for -his help coding and reviewing, Stephen Zabel for his help with i18n and my sanity, -and to Eric Meyer for his thoughtful input. -Thanks to Junyu Wang for the Chinese translation. -Thanks to Masashi Kawashima for the Japanese translation. -Thanks to Taaryk Taar and Tariq Al-Omaireeni for an updated Arabic translation. -Thanks to Jens Meiert for the German translation. - -==License== - -{{{ - Copyright 2008 Google Inc. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the 'License'); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an 'AS IS' BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -}}} diff --git a/skins/vector/cssjanus/cssjanus.py b/skins/vector/cssjanus/cssjanus.py deleted file mode 100644 index dd14bd58..00000000 --- a/skins/vector/cssjanus/cssjanus.py +++ /dev/null @@ -1,574 +0,0 @@ -#!/usr/bin/python -# -# Copyright 2008 Google Inc. All Rights Reserved. - -"""Converts a LeftToRight Cascading Style Sheet into a RightToLeft one. - - This is a utility script for replacing "left" oriented things in a CSS file - like float, padding, margin with "right" oriented values. - It also does the opposite. - The goal is to be able to conditionally serve one large, cat'd, compiled CSS - file appropriate for LeftToRight oriented languages and RightToLeft ones. - This utility will hopefully help your structural layout done in CSS in - terms of its RTL compatibility. It will not help with some of the more - complicated bidirectional text issues. -""" - -__author__ = 'elsigh@google.com (Lindsey Simon)' -__version__ = '0.1' - -import logging -import re -import sys -import getopt -import os - -import csslex - -logging.getLogger().setLevel(logging.INFO) - -# Global for the command line flags. -SWAP_LTR_RTL_IN_URL_DEFAULT = False -SWAP_LEFT_RIGHT_IN_URL_DEFAULT = False -FLAGS = {'swap_ltr_rtl_in_url': SWAP_LTR_RTL_IN_URL_DEFAULT, - 'swap_left_right_in_url': SWAP_LEFT_RIGHT_IN_URL_DEFAULT} - -# Generic token delimiter character. -TOKEN_DELIMITER = '~' - -# This is a temporary match token we use when swapping strings. -TMP_TOKEN = '%sTMP%s' % (TOKEN_DELIMITER, TOKEN_DELIMITER) - -# Token to be used for joining lines. -TOKEN_LINES = '%sJ%s' % (TOKEN_DELIMITER, TOKEN_DELIMITER) - -# Global constant text strings for CSS value matches. -LTR = 'ltr' -RTL = 'rtl' -LEFT = 'left' -RIGHT = 'right' - -# This is a lookbehind match to ensure that we don't replace instances -# of our string token (left, rtl, etc...) if there's a letter in front of it. -# Specifically, this prevents replacements like 'background: url(bright.png)'. -LOOKBEHIND_NOT_LETTER = r'(?)*?{)' % - (csslex.NMCHAR, TOKEN_LINES, csslex.SPACE)) - - -# These two lookaheads are to test whether or not we are within a -# background: url(HERE) situation. -# Ref: http://www.w3.org/TR/CSS21/syndata.html#uri -VALID_AFTER_URI_CHARS = r'[\'\"]?%s' % csslex.WHITESPACE -LOOKAHEAD_NOT_CLOSING_PAREN = r'(?!%s?%s\))' % (csslex.URL_CHARS, - VALID_AFTER_URI_CHARS) -LOOKAHEAD_FOR_CLOSING_PAREN = r'(?=%s?%s\))' % (csslex.URL_CHARS, - VALID_AFTER_URI_CHARS) - -# Compile a regex to swap left and right values in 4 part notations. -# We need to match negatives and decimal numeric values. -# ex. 'margin: .25em -2px 3px 0' becomes 'margin: .25em 0 3px -2px'. -POSSIBLY_NEGATIVE_QUANTITY = r'((?:-?%s)|(?:inherit|auto))' % csslex.QUANTITY -POSSIBLY_NEGATIVE_QUANTITY_SPACE = r'%s%s%s' % (POSSIBLY_NEGATIVE_QUANTITY, - csslex.SPACE, - csslex.WHITESPACE) -FOUR_NOTATION_QUANTITY_RE = re.compile(r'%s%s%s%s' % - (POSSIBLY_NEGATIVE_QUANTITY_SPACE, - POSSIBLY_NEGATIVE_QUANTITY_SPACE, - POSSIBLY_NEGATIVE_QUANTITY_SPACE, - POSSIBLY_NEGATIVE_QUANTITY), - re.I) -COLOR = r'(%s|%s)' % (csslex.NAME, csslex.HASH) -COLOR_SPACE = r'%s%s' % (COLOR, csslex.SPACE) -FOUR_NOTATION_COLOR_RE = re.compile(r'(-color%s:%s)%s%s%s(%s)' % - (csslex.WHITESPACE, - csslex.WHITESPACE, - COLOR_SPACE, - COLOR_SPACE, - COLOR_SPACE, - COLOR), - re.I) - -# Compile the cursor resize regexes -CURSOR_EAST_RE = re.compile(LOOKBEHIND_NOT_LETTER + '([ns]?)e-resize') -CURSOR_WEST_RE = re.compile(LOOKBEHIND_NOT_LETTER + '([ns]?)w-resize') - -# Matches the condition where we need to replace the horizontal component -# of a background-position value when expressed in horizontal percentage. -# Had to make two regexes because in the case of position-x there is only -# one quantity, and otherwise we don't want to match and change cases with only -# one quantity. -BG_HORIZONTAL_PERCENTAGE_RE = re.compile(r'background(-position)?(%s:%s)' - '([^%%]*?)(%s)%%' - '(%s(?:%s|%s))' % (csslex.WHITESPACE, - csslex.WHITESPACE, - csslex.NUM, - csslex.WHITESPACE, - csslex.QUANTITY, - csslex.IDENT)) - -BG_HORIZONTAL_PERCENTAGE_X_RE = re.compile(r'background-position-x(%s:%s)' - '(%s)%%' % (csslex.WHITESPACE, - csslex.WHITESPACE, - csslex.NUM)) - -# Matches the opening of a body selector. -BODY_SELECTOR = r'body%s{%s' % (csslex.WHITESPACE, csslex.WHITESPACE) - -# Matches anything up until the closing of a selector. -CHARS_WITHIN_SELECTOR = r'[^\}]*?' - -# Matches the direction property in a selector. -DIRECTION_RE = r'direction%s:%s' % (csslex.WHITESPACE, csslex.WHITESPACE) - -# These allow us to swap "ltr" with "rtl" and vice versa ONLY within the -# body selector and on the same line. -BODY_DIRECTION_LTR_RE = re.compile(r'(%s)(%s)(%s)(ltr)' % - (BODY_SELECTOR, CHARS_WITHIN_SELECTOR, - DIRECTION_RE), - re.I) -BODY_DIRECTION_RTL_RE = re.compile(r'(%s)(%s)(%s)(rtl)' % - (BODY_SELECTOR, CHARS_WITHIN_SELECTOR, - DIRECTION_RE), - re.I) - - -# Allows us to swap "direction:ltr" with "direction:rtl" and -# vice versa anywhere in a line. -DIRECTION_LTR_RE = re.compile(r'%s(ltr)' % DIRECTION_RE) -DIRECTION_RTL_RE = re.compile(r'%s(rtl)' % DIRECTION_RE) - -# We want to be able to switch left with right and vice versa anywhere -# we encounter left/right strings, EXCEPT inside the background:url(). The next -# two regexes are for that purpose. We have alternate IN_URL versions of the -# regexes compiled in case the user passes the flag that they do -# actually want to have left and right swapped inside of background:urls. -LEFT_RE = re.compile('%s(%s)%s%s' % (LOOKBEHIND_NOT_LETTER, - LEFT, - LOOKAHEAD_NOT_CLOSING_PAREN, - LOOKAHEAD_NOT_OPEN_BRACE), - re.I) -RIGHT_RE = re.compile('%s(%s)%s%s' % (LOOKBEHIND_NOT_LETTER, - RIGHT, - LOOKAHEAD_NOT_CLOSING_PAREN, - LOOKAHEAD_NOT_OPEN_BRACE), - re.I) -LEFT_IN_URL_RE = re.compile('%s(%s)%s' % (LOOKBEHIND_NOT_LETTER, - LEFT, - LOOKAHEAD_FOR_CLOSING_PAREN), - re.I) -RIGHT_IN_URL_RE = re.compile('%s(%s)%s' % (LOOKBEHIND_NOT_LETTER, - RIGHT, - LOOKAHEAD_FOR_CLOSING_PAREN), - re.I) -LTR_IN_URL_RE = re.compile('%s(%s)%s' % (LOOKBEHIND_NOT_LETTER, - LTR, - LOOKAHEAD_FOR_CLOSING_PAREN), - re.I) -RTL_IN_URL_RE = re.compile('%s(%s)%s' % (LOOKBEHIND_NOT_LETTER, - RTL, - LOOKAHEAD_FOR_CLOSING_PAREN), - re.I) - -COMMENT_RE = re.compile('(%s)' % csslex.COMMENT, re.I) - -NOFLIP_TOKEN = r'\@noflip' -# The NOFLIP_TOKEN inside of a comment. For now, this requires that comments -# be in the input, which means users of a css compiler would have to run -# this script first if they want this functionality. -NOFLIP_ANNOTATION = r'/\*%s%s%s\*/' % (csslex.WHITESPACE, - NOFLIP_TOKEN, - csslex. WHITESPACE) - -# After a NOFLIP_ANNOTATION, and within a class selector, we want to be able -# to set aside a single rule not to be flipped. We can do this by matching -# our NOFLIP annotation and then using a lookahead to make sure there is not -# an opening brace before the match. -NOFLIP_SINGLE_RE = re.compile(r'(%s%s[^;}]+;?)' % (NOFLIP_ANNOTATION, - LOOKAHEAD_NOT_OPEN_BRACE), - re.I) - -# After a NOFLIP_ANNOTATION, we want to grab anything up until the next } which -# means the entire following class block. This will prevent all of its -# declarations from being flipped. -NOFLIP_CLASS_RE = re.compile(r'(%s%s})' % (NOFLIP_ANNOTATION, - CHARS_WITHIN_SELECTOR), - re.I) - - -class Tokenizer: - """Replaces any CSS comments with string tokens and vice versa.""" - - def __init__(self, token_re, token_string): - """Constructor for the Tokenizer. - - Args: - token_re: A regex for the string to be replace by a token. - token_string: The string to put between token delimiters when tokenizing. - """ - logging.debug('Tokenizer::init token_string=%s' % token_string) - self.token_re = token_re - self.token_string = token_string - self.originals = [] - - def Tokenize(self, line): - """Replaces any string matching token_re in line with string tokens. - - By passing a function as an argument to the re.sub line below, we bypass - the usual rule where re.sub will only replace the left-most occurrence of - a match by calling the passed in function for each occurrence. - - Args: - line: A line to replace token_re matches in. - - Returns: - line: A line with token_re matches tokenized. - """ - line = self.token_re.sub(self.TokenizeMatches, line) - logging.debug('Tokenizer::Tokenize returns: %s' % line) - return line - - def DeTokenize(self, line): - """Replaces tokens with the original string. - - Args: - line: A line with tokens. - - Returns: - line with any tokens replaced by the original string. - """ - - # Put all of the comments back in by their comment token. - for i, original in enumerate(self.originals): - token = '%s%s_%s%s' % (TOKEN_DELIMITER, self.token_string, i + 1, - TOKEN_DELIMITER) - line = line.replace(token, original) - logging.debug('Tokenizer::DeTokenize i:%s w/%s' % (i, token)) - logging.debug('Tokenizer::DeTokenize returns: %s' % line) - return line - - def TokenizeMatches(self, m): - """Replaces matches with tokens and stores the originals. - - Args: - m: A match object. - - Returns: - A string token which replaces the CSS comment. - """ - logging.debug('Tokenizer::TokenizeMatches %s' % m.group(1)) - self.originals.append(m.group(1)) - return '%s%s_%s%s' % (TOKEN_DELIMITER, - self.token_string, - len(self.originals), - TOKEN_DELIMITER) - - -def FixBodyDirectionLtrAndRtl(line): - """Replaces ltr with rtl and vice versa ONLY in the body direction. - - Args: - line: A string to replace instances of ltr with rtl. - Returns: - line with direction: ltr and direction: rtl swapped only in body selector. - line = FixBodyDirectionLtrAndRtl('body { direction:ltr }') - line will now be 'body { direction:rtl }'. - """ - - line = BODY_DIRECTION_LTR_RE.sub('\\1\\2\\3%s' % TMP_TOKEN, line) - line = BODY_DIRECTION_RTL_RE.sub('\\1\\2\\3%s' % LTR, line) - line = line.replace(TMP_TOKEN, RTL) - logging.debug('FixBodyDirectionLtrAndRtl returns: %s' % line) - return line - - -def FixLeftAndRight(line): - """Replaces left with right and vice versa in line. - - Args: - line: A string in which to perform the replacement. - - Returns: - line with left and right swapped. For example: - line = FixLeftAndRight('padding-left: 2px; margin-right: 1px;') - line will now be 'padding-right: 2px; margin-left: 1px;'. - """ - - line = LEFT_RE.sub(TMP_TOKEN, line) - line = RIGHT_RE.sub(LEFT, line) - line = line.replace(TMP_TOKEN, RIGHT) - logging.debug('FixLeftAndRight returns: %s' % line) - return line - - -def FixLeftAndRightInUrl(line): - """Replaces left with right and vice versa ONLY within background urls. - - Args: - line: A string in which to replace left with right and vice versa. - - Returns: - line with left and right swapped in the url string. For example: - line = FixLeftAndRightInUrl('background:url(right.png)') - line will now be 'background:url(left.png)'. - """ - - line = LEFT_IN_URL_RE.sub(TMP_TOKEN, line) - line = RIGHT_IN_URL_RE.sub(LEFT, line) - line = line.replace(TMP_TOKEN, RIGHT) - logging.debug('FixLeftAndRightInUrl returns: %s' % line) - return line - - -def FixLtrAndRtlInUrl(line): - """Replaces ltr with rtl and vice versa ONLY within background urls. - - Args: - line: A string in which to replace ltr with rtl and vice versa. - - Returns: - line with left and right swapped. For example: - line = FixLtrAndRtlInUrl('background:url(rtl.png)') - line will now be 'background:url(ltr.png)'. - """ - - line = LTR_IN_URL_RE.sub(TMP_TOKEN, line) - line = RTL_IN_URL_RE.sub(LTR, line) - line = line.replace(TMP_TOKEN, RTL) - logging.debug('FixLtrAndRtlInUrl returns: %s' % line) - return line - - -def FixCursorProperties(line): - """Fixes directional CSS cursor properties. - - Args: - line: A string to fix CSS cursor properties in. - - Returns: - line reformatted with the cursor properties substituted. For example: - line = FixCursorProperties('cursor: ne-resize') - line will now be 'cursor: nw-resize'. - """ - - line = CURSOR_EAST_RE.sub('\\1' + TMP_TOKEN, line) - line = CURSOR_WEST_RE.sub('\\1e-resize', line) - line = line.replace(TMP_TOKEN, 'w-resize') - logging.debug('FixCursorProperties returns: %s' % line) - return line - - -def FixFourPartNotation(line): - """Fixes the second and fourth positions in 4 part CSS notation. - - Args: - line: A string to fix 4 part CSS notation in. - - Returns: - line reformatted with the 4 part notations swapped. For example: - line = FixFourPartNotation('padding: 1px 2px 3px 4px') - line will now be 'padding: 1px 4px 3px 2px'. - """ - line = FOUR_NOTATION_QUANTITY_RE.sub('\\1 \\4 \\3 \\2', line) - line = FOUR_NOTATION_COLOR_RE.sub('\\1\\2 \\5 \\4 \\3', line) - logging.debug('FixFourPartNotation returns: %s' % line) - return line - - -def FixBackgroundPosition(line): - """Fixes horizontal background percentage values in line. - - Args: - line: A string to fix horizontal background position values in. - - Returns: - line reformatted with the 4 part notations swapped. - """ - line = BG_HORIZONTAL_PERCENTAGE_RE.sub(CalculateNewBackgroundPosition, line) - line = BG_HORIZONTAL_PERCENTAGE_X_RE.sub(CalculateNewBackgroundPositionX, - line) - logging.debug('FixBackgroundPosition returns: %s' % line) - return line - - -def CalculateNewBackgroundPosition(m): - """Fixes horizontal background-position percentages. - - This function should be used as an argument to re.sub since it needs to - perform replacement specific calculations. - - Args: - m: A match object. - - Returns: - A string with the horizontal background position percentage fixed. - BG_HORIZONTAL_PERCENTAGE_RE.sub(FixBackgroundPosition, - 'background-position: 75% 50%') - will return 'background-position: 25% 50%'. - """ - - # The flipped value is the offset from 100% - new_x = str(100-int(m.group(4))) - - # Since m.group(1) may very well be None type and we need a string.. - if m.group(1): - position_string = m.group(1) - else: - position_string = '' - - return 'background%s%s%s%s%%%s' % (position_string, m.group(2), m.group(3), - new_x, m.group(5)) - - -def CalculateNewBackgroundPositionX(m): - """Fixes percent based background-position-x. - - This function should be used as an argument to re.sub since it needs to - perform replacement specific calculations. - - Args: - m: A match object. - - Returns: - A string with the background-position-x percentage fixed. - BG_HORIZONTAL_PERCENTAGE_X_RE.sub(CalculateNewBackgroundPosition, - 'background-position-x: 75%') - will return 'background-position-x: 25%'. - """ - - # The flipped value is the offset from 100% - new_x = str(100-int(m.group(2))) - - return 'background-position-x%s%s%%' % (m.group(1), new_x) - - -def ChangeLeftToRightToLeft(lines, - swap_ltr_rtl_in_url=None, - swap_left_right_in_url=None): - """Turns lines into a stream and runs the fixing functions against it. - - Args: - lines: An list of CSS lines. - swap_ltr_rtl_in_url: Overrides this flag if param is set. - swap_left_right_in_url: Overrides this flag if param is set. - - Returns: - The same lines, but with left and right fixes. - """ - - global FLAGS - - # Possibly override flags with params. - logging.debug('ChangeLeftToRightToLeft swap_ltr_rtl_in_url=%s, ' - 'swap_left_right_in_url=%s' % (swap_ltr_rtl_in_url, - swap_left_right_in_url)) - if swap_ltr_rtl_in_url is None: - swap_ltr_rtl_in_url = FLAGS['swap_ltr_rtl_in_url'] - if swap_left_right_in_url is None: - swap_left_right_in_url = FLAGS['swap_left_right_in_url'] - - # Turns the array of lines into a single line stream. - logging.debug('LINES COUNT: %s' % len(lines)) - line = TOKEN_LINES.join(lines) - - # Tokenize any single line rules with the /* noflip */ annotation. - noflip_single_tokenizer = Tokenizer(NOFLIP_SINGLE_RE, 'NOFLIP_SINGLE') - line = noflip_single_tokenizer.Tokenize(line) - - # Tokenize any class rules with the /* noflip */ annotation. - noflip_class_tokenizer = Tokenizer(NOFLIP_CLASS_RE, 'NOFLIP_CLASS') - line = noflip_class_tokenizer.Tokenize(line) - - # Tokenize the comments so we can preserve them through the changes. - comment_tokenizer = Tokenizer(COMMENT_RE, 'C') - line = comment_tokenizer.Tokenize(line) - - # Here starteth the various left/right orientation fixes. - line = FixBodyDirectionLtrAndRtl(line) - - if swap_left_right_in_url: - line = FixLeftAndRightInUrl(line) - - if swap_ltr_rtl_in_url: - line = FixLtrAndRtlInUrl(line) - - line = FixLeftAndRight(line) - line = FixCursorProperties(line) - line = FixFourPartNotation(line) - line = FixBackgroundPosition(line) - - # DeTokenize the single line noflips. - line = noflip_single_tokenizer.DeTokenize(line) - - # DeTokenize the class-level noflips. - line = noflip_class_tokenizer.DeTokenize(line) - - # DeTokenize the comments. - line = comment_tokenizer.DeTokenize(line) - - # Rejoin the lines back together. - lines = line.split(TOKEN_LINES) - - return lines - -def usage(): - """Prints out usage information.""" - - print 'Usage:' - print ' ./cssjanus.py < file.css > file-rtl.css' - print 'Flags:' - print ' --swap_left_right_in_url: Fixes "left"/"right" string within urls.' - print ' Ex: ./cssjanus.py --swap_left_right_in_url < file.css > file_rtl.css' - print ' --swap_ltr_rtl_in_url: Fixes "ltr"/"rtl" string within urls.' - print ' Ex: ./cssjanus --swap_ltr_rtl_in_url < file.css > file_rtl.css' - -def setflags(opts): - """Parse the passed in command line arguments and set the FLAGS global. - - Args: - opts: getopt iterable intercepted from argv. - """ - - global FLAGS - - # Parse the arguments. - for opt, arg in opts: - logging.debug('opt: %s, arg: %s' % (opt, arg)) - if opt in ("-h", "--help"): - usage() - sys.exit() - elif opt in ("-d", "--debug"): - logging.getLogger().setLevel(logging.DEBUG) - elif opt == '--swap_ltr_rtl_in_url': - FLAGS['swap_ltr_rtl_in_url'] = True - elif opt == '--swap_left_right_in_url': - FLAGS['swap_left_right_in_url'] = True - - -def main(argv): - """Sends stdin lines to ChangeLeftToRightToLeft and writes to stdout.""" - - # Define the flags. - try: - opts, args = getopt.getopt(argv, 'hd', ['help', 'debug', - 'swap_left_right_in_url', - 'swap_ltr_rtl_in_url']) - except getopt.GetoptError: - usage() - sys.exit(2) - - # Parse and set the flags. - setflags(opts) - - # Call the main routine with all our functionality. - fixed_lines = ChangeLeftToRightToLeft(sys.stdin.readlines()) - sys.stdout.write(''.join(fixed_lines)) - -if __name__ == '__main__': - main(sys.argv[1:]) diff --git a/skins/vector/cssjanus/csslex.py b/skins/vector/cssjanus/csslex.py deleted file mode 100644 index 1fc7304e..00000000 --- a/skins/vector/cssjanus/csslex.py +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/python -# -# Copyright 2007 Google Inc. All Rights Reserved. - -"""CSS Lexical Grammar rules. - -CSS lexical grammar from http://www.w3.org/TR/CSS21/grammar.html -""" - -__author__ = ['elsigh@google.com (Lindsey Simon)', - 'msamuel@google.com (Mike Samuel)'] - -# public symbols -__all__ = [ "NEWLINE", "HEX", "NON_ASCII", "UNICODE", "ESCAPE", "NMSTART", "NMCHAR", "STRING1", "STRING2", "IDENT", "NAME", "HASH", "NUM", "STRING", "URL", "SPACE", "WHITESPACE", "COMMENT", "QUANTITY", "PUNC" ] - -# The comments below are mostly copied verbatim from the grammar. - -# "@import" {return IMPORT_SYM;} -# "@page" {return PAGE_SYM;} -# "@media" {return MEDIA_SYM;} -# "@charset" {return CHARSET_SYM;} -KEYWORD = r'(?:\@(?:import|page|media|charset))' - -# nl \n|\r\n|\r|\f ; a newline -NEWLINE = r'\n|\r\n|\r|\f' - -# h [0-9a-f] ; a hexadecimal digit -HEX = r'[0-9a-f]' - -# nonascii [\200-\377] -NON_ASCII = r'[\200-\377]' - -# unicode \\{h}{1,6}(\r\n|[ \t\r\n\f])? -UNICODE = r'(?:(?:\\' + HEX + r'{1,6})(?:\r\n|[ \t\r\n\f])?)' - -# escape {unicode}|\\[^\r\n\f0-9a-f] -ESCAPE = r'(?:' + UNICODE + r'|\\[^\r\n\f0-9a-f])' - -# nmstart [_a-z]|{nonascii}|{escape} -NMSTART = r'(?:[_a-z]|' + NON_ASCII + r'|' + ESCAPE + r')' - -# nmchar [_a-z0-9-]|{nonascii}|{escape} -NMCHAR = r'(?:[_a-z0-9-]|' + NON_ASCII + r'|' + ESCAPE + r')' - -# ident -?{nmstart}{nmchar}* -IDENT = r'-?' + NMSTART + NMCHAR + '*' - -# name {nmchar}+ -NAME = NMCHAR + r'+' - -# hash -HASH = r'#' + NAME - -# string1 \"([^\n\r\f\\"]|\\{nl}|{escape})*\" ; "string" -STRING1 = r'"(?:[^\"\\]|\\.)*"' - -# string2 \'([^\n\r\f\\']|\\{nl}|{escape})*\' ; 'string' -STRING2 = r"'(?:[^\'\\]|\\.)*'" - -# string {string1}|{string2} -STRING = '(?:' + STRING1 + r'|' + STRING2 + ')' - -# num [0-9]+|[0-9]*"."[0-9]+ -NUM = r'(?:[0-9]*\.[0-9]+|[0-9]+)' - -# s [ \t\r\n\f] -SPACE = r'[ \t\r\n\f]' - -# w {s}* -WHITESPACE = '(?:' + SPACE + r'*)' - -# url special chars -URL_SPECIAL_CHARS = r'[!#$%&*-~]' - -# url chars ({url_special_chars}|{nonascii}|{escape})* -URL_CHARS = r'(?:%s|%s|%s)*' % (URL_SPECIAL_CHARS, NON_ASCII, ESCAPE) - -# url -URL = r'url\(%s(%s|%s)%s\)' % (WHITESPACE, STRING, URL_CHARS, WHITESPACE) - -# comments -# see http://www.w3.org/TR/CSS21/grammar.html -COMMENT = r'/\*[^*]*\*+([^/*][^*]*\*+)*/' - -# {E}{M} {return EMS;} -# {E}{X} {return EXS;} -# {P}{X} {return LENGTH;} -# {C}{M} {return LENGTH;} -# {M}{M} {return LENGTH;} -# {I}{N} {return LENGTH;} -# {P}{T} {return LENGTH;} -# {P}{C} {return LENGTH;} -# {D}{E}{G} {return ANGLE;} -# {R}{A}{D} {return ANGLE;} -# {G}{R}{A}{D} {return ANGLE;} -# {M}{S} {return TIME;} -# {S} {return TIME;} -# {H}{Z} {return FREQ;} -# {K}{H}{Z} {return FREQ;} -# % {return PERCENTAGE;} -UNIT = r'(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)' - -# {num}{UNIT|IDENT} {return NUMBER;} -QUANTITY = '%s(?:%s%s|%s)?' % (NUM, WHITESPACE, UNIT, IDENT) - -# "" {return CDC;} -# "~=" {return INCLUDES;} -# "|=" {return DASHMATCH;} -# {w}"{" {return LBRACE;} -# {w}"+" {return PLUS;} -# {w}">" {return GREATER;} -# {w}"," {return COMMA;} -PUNC = r'|~=|\|=|[\{\+>,:;]' diff --git a/skins/vector/experiments/babaco-colors-a.css b/skins/vector/experiments/babaco-colors-a.css deleted file mode 100644 index ce6f67dd..00000000 --- a/skins/vector/experiments/babaco-colors-a.css +++ /dev/null @@ -1,109 +0,0 @@ -/* Babaco Color Scheme A */ - - -a:visited, -a:visited div.vectorTabs li.selected a:visited span { - color: #260e9c; -} - -html .thumbimage, -#toc, .toc, .mw-warning, div.thumbinner { - border-color: #cccccc; - background-color: #f7f7f7; -} - -/* Framework */ -#mw-page-base { - background-color: inherit !important; - background-image: none !important; -} -body { - background-color: #f9f9f9 !important; - background-image:url(images/page-base-updated.png); -} - -/* Links */ -a { - color: #0066cc; -} -a:visited { - color: #004d99; -} -a:active { - color: #ff6600; -} -a.stub { - color: #56228b; -} -a.new, #p-personal a.new { - color: #a31205 !important; -} -a.new:visited, #p-personal a.new:visited { - color: #a31205; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - border-color:#999999; - font-family:georgia, times, serif; - font-weight:bold; -} -#firstHeading { - font-size:1.5em; -} -h2 .editsection, -.portal h5{ - font-family:sans-serif; - font-weight:normal; - -} -#toc h2, .toc h2 { - font-family:sans-serif; - font-weight:normal; -} -body #mw-panel div.portal div.body { - background-image:url(images/new-portal-break-ltr.png); -} -body.rtl #mw-panel div.portal div.body { - background-image:url(images/new-portal-break-rtl.png); -} -body div.vectorTabs li a, div.vectorTabs li a span{ - color:#4d4d4d; -} -body div.vectorTabs li.selected a, -body div.vectorTabs li.selected a span, -body div.vectorTabs li.selected a:visited -body div.vectorTabs li.selected a:visited span { - color: #ff9900 !important; - font-weight:bold; -} -div.vectorTabs li.new a, -div.vectorTabs li.new a span, -div.vectorTabs li.new a:visited, -div.vectorTabs li.new a:visited span { - color:#a31205; -} -#toc, -.toc, -.mw-warning, -div.gallerybox div.thumb, -table.gallery, -#preferences fieldset.prefsection fieldset, -#preferences, -html .thumbimage, -.usermessage, -img.thumbborder, -div.thumbinner{ - border: 1px solid #cccccc; - background-color: #f7f7f7; -} -#mw-panel div.portal h5 { - font-weight:bold; - margin-bottom:0; - padding-bottom:0.05em; - color:#000000; -} diff --git a/skins/vector/experiments/babaco-colors-b.css b/skins/vector/experiments/babaco-colors-b.css deleted file mode 100644 index 227e197c..00000000 --- a/skins/vector/experiments/babaco-colors-b.css +++ /dev/null @@ -1,67 +0,0 @@ -/* Babaco Color Scheme A */ - - -html .thumbimage, -#toc, .toc, .mw-warning, div.thumbinner { - border-color: #cccccc; - background-color: #f7f7f7; -} - -/* Framework */ -#mw-page-base { - background-color: inherit !important; - background-image: none !important; -} -body { - background-color: #f9f9f9 !important; - background-image:url(images/page-base-updated.png); -} -/* Links */ -a { - color: #003cb3; -} -a.stub { - color: #772233; -} -a.new, #p-personal a.new { - color: #a31205 !important; -} -{ - color: #260e9c; -} -a:visited, -a:visited div.vectorTabs li.selected a:visited span, -a.new:visited, -#p-personal a.new:visited { - color: #260e9c; -} -h1, -h2, -h3, -h4, -h5, -h6 { - border-color:#999999; -} - -div.vectorTabs li.new a, -div.vectorTabs li.new a span, -div.vectorTabs li.new a:visited, -div.vectorTabs li.new a:visited span { - color:#a31205; -} - -#toc, -.toc, -.mw-warning, -div.gallerybox div.thumb, -table.gallery, -#preferences fieldset.prefsection fieldset, -#preferences, -html .thumbimage, -.usermessage, -img.thumbborder, -div.thumbinner{ - border: 1px solid #cccccc; - background-color: #f7f7f7; -} diff --git a/skins/vector/experiments/babaco-colors-c.css b/skins/vector/experiments/babaco-colors-c.css deleted file mode 100644 index d2dabf7d..00000000 --- a/skins/vector/experiments/babaco-colors-c.css +++ /dev/null @@ -1,91 +0,0 @@ -/* Babaco Color Scheme C */ - -/* ridding ourselves of the gradient */ -#mw-page-base { - background-color: inherit !important; - background-image: none !important; -} - -a:visited, -a:visited div.vectorTabs li.selected a:visited span { - color: #260e9c; -} - -html .thumbimage, -#toc, .toc, .mw-warning, div.thumbinner { - border-color: #cccccc; - background-color: #f7f7f7; -} - -/* Framework */ -body { - background-color: #f9f9f9 !important; - background-image:url(images/page-base-updated.png); -} - -/* Links */ -a { - color: #0066cc; -} -a:visited { - color: #004d99; -} -a:active { - color: #ff6600; -} -a.stub { - color: #56228b; -} -a.new, #p-personal a.new { - color: #a31205 !important; -} -a.new:visited, #p-personal a.new:visited { - color: #a31205; -} - -#firstHeading { - font-size:1.5em; -} -h2 .editsection, -.portal h5 { - font-weight:normal; -} -#toc h2, .toc h2 { - font-weight:normal; -} -body #mw-panel div.portal div.body { - background-image:url(images/new-portal-break-ltr.png); -} - -div.vectorTabs li.new a, -div.vectorTabs li.new a span, -div.vectorTabs li.new a:visited, -div.vectorTabs li.new a:visited span { - color:#a31205; -} -#toc, -.toc, -.mw-warning, -div.gallerybox div.thumb, -table.gallery, -#preferences fieldset.prefsection fieldset, -#preferences, -html .thumbimage, -.usermessage, -img.thumbborder, -div.thumbinner { - border: 1px solid #cccccc; - background-color: #f7f7f7; -} -#mw-panel div.portal h5 { - font-weight:bold; - margin-bottom:0; - padding-bottom:0.05em; - color:#000000; -} -div.vectorTabs li.selected a, -div.vectorTabs li.selected a span, -div.vectorTabs li.selected a:visited -div.vectorTabs li.selected a:visited span { - color: #333333 !important; -} \ No newline at end of file diff --git a/skins/vector/experiments/images/new-border.png b/skins/vector/experiments/images/new-border.png deleted file mode 100644 index 735324ef..00000000 Binary files a/skins/vector/experiments/images/new-border.png and /dev/null differ diff --git a/skins/vector/experiments/images/new-portal-break-ltr.png b/skins/vector/experiments/images/new-portal-break-ltr.png deleted file mode 100644 index cd8f3b15..00000000 Binary files a/skins/vector/experiments/images/new-portal-break-ltr.png and /dev/null differ diff --git a/skins/vector/experiments/images/new-portal-break-rtl.png b/skins/vector/experiments/images/new-portal-break-rtl.png deleted file mode 100644 index 45c5b2f9..00000000 Binary files a/skins/vector/experiments/images/new-portal-break-rtl.png and /dev/null differ diff --git a/skins/vector/experiments/images/page-base-fade.png b/skins/vector/experiments/images/page-base-fade.png deleted file mode 100644 index dc631823..00000000 Binary files a/skins/vector/experiments/images/page-base-fade.png and /dev/null differ diff --git a/skins/vector/experiments/images/page-base-updated.png b/skins/vector/experiments/images/page-base-updated.png deleted file mode 100644 index 54ffeb00..00000000 Binary files a/skins/vector/experiments/images/page-base-updated.png and /dev/null differ diff --git a/skins/vector/experiments/images/tab-active-first.png b/skins/vector/experiments/images/tab-active-first.png deleted file mode 100644 index e4c39c42..00000000 Binary files a/skins/vector/experiments/images/tab-active-first.png and /dev/null differ diff --git a/skins/vector/experiments/images/tab-active-last.png b/skins/vector/experiments/images/tab-active-last.png deleted file mode 100644 index a96f3916..00000000 Binary files a/skins/vector/experiments/images/tab-active-last.png and /dev/null differ diff --git a/skins/vector/experiments/images/tab-fade.png b/skins/vector/experiments/images/tab-fade.png deleted file mode 100644 index 1eb0e23b..00000000 Binary files a/skins/vector/experiments/images/tab-fade.png and /dev/null differ diff --git a/skins/vector/experiments/images/tab-first.png b/skins/vector/experiments/images/tab-first.png deleted file mode 100644 index 439b713f..00000000 Binary files a/skins/vector/experiments/images/tab-first.png and /dev/null differ diff --git a/skins/vector/experiments/images/tab-last.png b/skins/vector/experiments/images/tab-last.png deleted file mode 100644 index 08e283dd..00000000 Binary files a/skins/vector/experiments/images/tab-last.png and /dev/null differ diff --git a/skins/vector/experiments/images/tab-new-fade.png b/skins/vector/experiments/images/tab-new-fade.png deleted file mode 100644 index 44925505..00000000 Binary files a/skins/vector/experiments/images/tab-new-fade.png and /dev/null differ diff --git a/skins/vector/experiments/new-tabs.css b/skins/vector/experiments/new-tabs.css deleted file mode 100644 index e3850e8e..00000000 --- a/skins/vector/experiments/new-tabs.css +++ /dev/null @@ -1,322 +0,0 @@ -/* new border color */ -#content { - background-image: url(images/new-border.png); -} - -#footer { - background-image: url(images/new-border.png); -} - body div#left-navigation, - body div#right-navigation { - top:3.2em; - } - body div#right-navigation { - margin-top:3.2em; - } - body #p-search form, - body #p-search input, - body #simpleSearch { - margin-top:0; - } - body div#p-cactions { - margin-top:0; - } - /* Namespaces and Views */ - /* @noflip */ - div.vectorTabs { - float: left; - } - body div.vectorTabs { - background-image: none; - padding-left: 0; - } - /* @noflip */ - div.vectorTabs ul { - float: left; - } - div.vectorTabs ul { - height: 100%; - list-style: none; - background-image:none; - margin: 0; - padding: 0; - } - /* @noflip */ - div.vectorTabs ul li { - float: left; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - body div.vectorTabs ul li { - line-height: 1em; - display: inline-block; - height: 2em; - margin: 0 1px 0 0; - padding: 0; - background:none; - overflow:hidden; - white-space:nowrap; - } - /* IGNORED BY IE6 */ - div.vectorTabs ul > li { - display: block; - } - body div.vectorTabs li.selected { - background-image: none; - border:none; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - body div.vectorTabs li a { - border-top:1px solid #cccccc; - border-left:1px solid #cccccc; - border-right:1px solid #cccccc; - display: inline-block; - height: 1.7em; - padding-left: 0.6em; - padding-right: 0.6em; - background-image:url(images/tab-fade.png); - background-position:bottom left; - background-repeat:repeat-x; - background-color:#ffffff; - } - body div.vectorTabs li.new a{ - background-image:url(images/tab-new-fade.png); - - } - div.vectorTabs li a, - div.vectorTabs li a span { - cursor: pointer; - } - div.vectorTabs li a span { - font-size: 0.8em; - } - /* IGNORED BY IE6 */ - div.vectorTabs li > a { - display: block; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - body div.vectorTabs a span { - display: inline-block; - padding-top: 0.5em; - } - /* IGNORED BY IE6 */ - /* @noflip */ - div.vectorTabs a > span { - float: left; - display: block; - } - body div.vectorTabs li.last { - background-image: url(images/tab-last.png); - background-repeat:no-repeat; - background-position:top right; - border:none; - } - body div.vectorTabs li.last a { - margin-right:7px; - padding-left:0.4em; - padding-right:0; - border-left:1px solid #cccccc; - border-top:1px solid #cccccc; - border-right:none; - background-image:url(images/tab-fade.png); - background-position:top left; - background-repeat:repeat-x; - } - body div.vectorTabs li.first { - background-image: url(images/tab-first.png); - background-repeat:no-repeat; - background-position:top left; - border:none; - } - body div.vectorTabs li.first a { - margin-left:7px; - padding-left:0em; - padding-right:0.4em; - border-right:1px solid #cccccc; - border-top:1px solid #cccccc; - background-image:url(images/tab-fade.png); - background-position:top left; - background-repeat:repeat-x; - } - - div.vectorTabs li.selected a, - div.vectorTabs li.selected a span, - div.vectorTabs li.selected a:visited - div.vectorTabs li.selected a:visited span { - color: #be5900 !important; - text-decoration: none; - } - - body div.vectorTabs li.selected a { - border-top:1px solid #6cc8f3; - border-right:1px solid #6cc8f3; - border-left:1px solid #6cc8f3; - background-color:#fff; - height:1.75em; - background-image:none; - } - body div.vectorTabs li.selected.first { - background-image: url(images/tab-active-first.png); - background-repeat:no-repeat; - background-position:top left; - } - body div.vectorTabs li.selected.first a { - margin-left:7px; - padding-right:0.6em; - padding-left:0.4em; - border-left:none; - } - body div.vectorTabs li.selected.last { - background-image: url(images/tab-active-last.png); - background-repeat:no-repeat; - background-position:top right; - } - body div.vectorTabs li.selected.last a { - margin-right:7px; - padding-left:0.6em; - padding-right:0.4em; - border-right:none; - } - - /* Variants and Actions */ - /* @noflip */ - div.vectorMenu { - background-image:url(images/tab-fade.png); - background-position:bottom left; - background-repeat:repeat-x; - border-top:1px solid #cccccc; - border-left:1px solid #cccccc; - border-right:1px solid #cccccc; - } - body.rtl div.vectorMenu { - direction: rtl; - } - /* @noflip */ - body #mw-head div.vectorMenu h5 { - background-image: url(../images/arrow-down-icon.png); - background-position: center center; - background-repeat: no-repeat; - padding-left: 0; - margin-left: 0px; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - body div.vectorMenu h5 a { - display: inline-block; - width: 24px; - height:1.5em; - background-image: none !important; - - } - /* IGNORED BY IE6 */ - div.vectorMenu h5 > a { - display: block; - } - div.vectorMenu div.menu { - position: relative; - left:1px; - display: none; - clear: both; - text-align: left; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - body.rtl div.vectorMenu div.menu { - margin-right: 24px; - } - /* IGNORED BY IE6 */ - body.rtl div.vectorMenu > div.menu { - margin-right: auto; - } - /* Fixes old versions of FireFox */ - body.rtl div.vectorMenu > div.menu, - x:-moz-any-link { - margin-right: 24px; - } - div.vectorMenu:hover div.menu { - display: block; - } - div.vectorMenu ul { - position: absolute; - background-color: white; - border: solid 1px silver; - border-top-width: 0; - list-style: none; - list-style-image: none; - list-style-type: none; - padding: 0; - margin: 0; - margin-left: -1px; - text-align: left; - } - /* Fixes old versions of FireFox */ - div.vectorMenu ul, - x:-moz-any-link { - min-width: 5em; - } - /* Returns things back to normal in modern versions of FireFox */ - div.vectorMenu ul, - x:-moz-any-link, - x:default { - min-width: 0; - } - div.vectorMenu li { - padding: 0; - margin: 0; - text-align: left; - line-height: 1em; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - div.vectorMenu li a { - display: inline-block; - padding: 0.5em; - white-space: nowrap; - } - /* IGNORED BY IE6 */ - div.vectorMenu li > a { - display: block; - } - div.vectorMenu li a { - color: #0645ad; - cursor: pointer; - font-size: 0.8em; - } - div.vectorMenu li.selected a, - div.vectorMenu li.selected a:visited { - color: #333333; - text-decoration: none; - } -#ca-unwatch.icon, -#ca-watch.icon { - background-color:#ffffff; - height:1.75em !important; - background-image:url(images/tab-fade.png); - background-position:bottom left; - background-repeat:repeat-x; -} -#ca-unwatch.icon a, -#ca-watch.icon a { - height: 1.7em !important; - border-bottom:none; - background-color:transparent; -} -#ca-watch.icon a, -#ca-unwatch.icon a { - background-repeat:no-repeat; -} -.wikiEditor-ui-tabs { - border: none; - height: 2.15em; -} -.wikiEditor-ui-buttons { - height: 2.15em; -} -.wikiEditor-ui-tabs div { - border: 1px solid silver; - margin-right: 1px; - height: 2.15em; -} -.wikiEditor-ui-tabs div a { - line-height: 2.15em; - background: #FFFFFF url(images/tab-fade.png) repeat-x 0 100%; -} -.wikiEditor-ui-tabs div.current a { - background: #FFFFFF; -} diff --git a/skins/vector/images/arrow-down-icon.png b/skins/vector/images/arrow-down-icon.png index bf2d4fb4..437b9518 100644 Binary files a/skins/vector/images/arrow-down-icon.png and b/skins/vector/images/arrow-down-icon.png differ diff --git a/skins/vector/images/audio-icon.png b/skins/vector/images/audio-icon.png index 0f59a2bb..ffd0b1c2 100644 Binary files a/skins/vector/images/audio-icon.png and b/skins/vector/images/audio-icon.png differ diff --git a/skins/vector/images/border.png b/skins/vector/images/border.png index 54b47922..6e3330ff 100644 Binary files a/skins/vector/images/border.png and b/skins/vector/images/border.png differ diff --git a/skins/vector/images/bullet-icon.png b/skins/vector/images/bullet-icon.png index e304b267..c4c44382 100644 Binary files a/skins/vector/images/bullet-icon.png and b/skins/vector/images/bullet-icon.png differ diff --git a/skins/vector/images/document-icon.png b/skins/vector/images/document-icon.png index 91dc16f6..7b68120a 100644 Binary files a/skins/vector/images/document-icon.png and b/skins/vector/images/document-icon.png differ diff --git a/skins/vector/images/edit-icon.png b/skins/vector/images/edit-icon.png index 4a962767..92153e8e 100644 Binary files a/skins/vector/images/edit-icon.png and b/skins/vector/images/edit-icon.png differ diff --git a/skins/vector/images/external-link-ltr-icon.png b/skins/vector/images/external-link-ltr-icon.png index 4b710b03..fe642b5c 100644 Binary files a/skins/vector/images/external-link-ltr-icon.png and b/skins/vector/images/external-link-ltr-icon.png differ diff --git a/skins/vector/images/external-link-rtl-icon.png b/skins/vector/images/external-link-rtl-icon.png index 17df03a3..01e0d798 100644 Binary files a/skins/vector/images/external-link-rtl-icon.png and b/skins/vector/images/external-link-rtl-icon.png differ diff --git a/skins/vector/images/file-icon.png b/skins/vector/images/file-icon.png index 1261f00c..8a4baf2c 100644 Binary files a/skins/vector/images/file-icon.png and b/skins/vector/images/file-icon.png differ diff --git a/skins/vector/images/link-icon.png b/skins/vector/images/link-icon.png index fc77e81d..469fd2b4 100644 Binary files a/skins/vector/images/link-icon.png and b/skins/vector/images/link-icon.png differ diff --git a/skins/vector/images/lock-icon.png b/skins/vector/images/lock-icon.png index 9e63807a..46b72f52 100644 Binary files a/skins/vector/images/lock-icon.png and b/skins/vector/images/lock-icon.png differ diff --git a/skins/vector/images/mail-icon.png b/skins/vector/images/mail-icon.png index 50de0781..a8ad2fd7 100644 Binary files a/skins/vector/images/mail-icon.png and b/skins/vector/images/mail-icon.png differ diff --git a/skins/vector/images/news-icon.png b/skins/vector/images/news-icon.png index 8ab49957..bb03a892 100644 Binary files a/skins/vector/images/news-icon.png and b/skins/vector/images/news-icon.png differ diff --git a/skins/vector/images/page-base.png b/skins/vector/images/page-base.png index 17d02a74..be760917 100644 Binary files a/skins/vector/images/page-base.png and b/skins/vector/images/page-base.png differ diff --git a/skins/vector/images/page-fade.png b/skins/vector/images/page-fade.png index 815a0486..2b08cfe2 100644 Binary files a/skins/vector/images/page-fade.png and b/skins/vector/images/page-fade.png differ diff --git a/skins/vector/images/portal-break-ltr.png b/skins/vector/images/portal-break-ltr.png index c1823705..76ca4915 100644 Binary files a/skins/vector/images/portal-break-ltr.png and b/skins/vector/images/portal-break-ltr.png differ diff --git a/skins/vector/images/portal-break-rtl.png b/skins/vector/images/portal-break-rtl.png index a45144c0..773792aa 100644 Binary files a/skins/vector/images/portal-break-rtl.png and b/skins/vector/images/portal-break-rtl.png differ diff --git a/skins/vector/images/portal-break.png b/skins/vector/images/portal-break.png index e81b5597..5feaa459 100644 Binary files a/skins/vector/images/portal-break.png and b/skins/vector/images/portal-break.png differ diff --git a/skins/vector/images/preferences-base.png b/skins/vector/images/preferences-base.png index adfd70d7..947895f1 100644 Binary files a/skins/vector/images/preferences-base.png and b/skins/vector/images/preferences-base.png differ diff --git a/skins/vector/images/preferences-edge.png b/skins/vector/images/preferences-edge.png index 3da0d099..e6a9a480 100644 Binary files a/skins/vector/images/preferences-edge.png and b/skins/vector/images/preferences-edge.png differ diff --git a/skins/vector/images/preferences-fade.png b/skins/vector/images/preferences-fade.png index b4773c5c..3aa30bb9 100644 Binary files a/skins/vector/images/preferences-fade.png and b/skins/vector/images/preferences-fade.png differ diff --git a/skins/vector/images/search-fade.png b/skins/vector/images/search-fade.png index 53461d6d..e96f6678 100644 Binary files a/skins/vector/images/search-fade.png and b/skins/vector/images/search-fade.png differ diff --git a/skins/vector/images/tab-break.png b/skins/vector/images/tab-break.png index 81155562..95be27b5 100644 Binary files a/skins/vector/images/tab-break.png and b/skins/vector/images/tab-break.png differ diff --git a/skins/vector/images/tab-current-fade.png b/skins/vector/images/tab-current-fade.png index c6238d26..fb3a2cb6 100644 Binary files a/skins/vector/images/tab-current-fade.png and b/skins/vector/images/tab-current-fade.png differ diff --git a/skins/vector/images/tab-normal-fade.png b/skins/vector/images/tab-normal-fade.png index 4a5e3e4a..fcee0dfb 100644 Binary files a/skins/vector/images/tab-normal-fade.png and b/skins/vector/images/tab-normal-fade.png differ diff --git a/skins/vector/images/talk-icon.png b/skins/vector/images/talk-icon.png index 0b80ee91..12862a09 100644 Binary files a/skins/vector/images/talk-icon.png and b/skins/vector/images/talk-icon.png differ diff --git a/skins/vector/images/user-icon.png b/skins/vector/images/user-icon.png index ac3d59d5..2fbfe4e5 100644 Binary files a/skins/vector/images/user-icon.png and b/skins/vector/images/user-icon.png differ diff --git a/skins/vector/images/video-icon.png b/skins/vector/images/video-icon.png index 5e7f4af7..06bc9b64 100644 Binary files a/skins/vector/images/video-icon.png and b/skins/vector/images/video-icon.png differ diff --git a/skins/vector/images/watch-icons.png b/skins/vector/images/watch-icons.png index 54b2c793..a2871626 100644 Binary files a/skins/vector/images/watch-icons.png and b/skins/vector/images/watch-icons.png differ diff --git a/skins/vector/main-ltr.css b/skins/vector/main-ltr.css deleted file mode 100644 index 78dd1e2b..00000000 --- a/skins/vector/main-ltr.css +++ /dev/null @@ -1,1128 +0,0 @@ -/* - * main-rtl.css is automatically generated using CSSJanus, a python script for - * creating RTL versions of otherwise LTR stylesheets. - * - * You may download the tool to rebuild this stylesheet - * http://code.google.com/p/cssjanus/ - * - * An online version of this tool can be used at: - * http://cssjanus.commoner.com/ - * - * The following command is used to generate the RTL version of this file - * ./cssjanus.py --swap_ltr_rtl_in_url < main-ltr.css > main-rtl.css - * - * Any rules which should not be flipped should be prepended with @noflip in - * a comment block. - */ -/* Framework */ -html, -body { - height: 100%; - margin: 0; - padding: 0; - font-family: sans-serif; - font-size: 1em; -} -body { - background-color: #f3f3f3; - background-image: url(images/page-base.png); -} -/* Content */ -#content { - margin-left: 10em; - padding: 1em; - background-image: url(images/border.png); - background-position: top left; - background-repeat: repeat-y; - background-color: white; -} -/* Head */ -#mw-page-base { - height: 5em; - background-color: white; - background-image: url(images/page-fade.png); - background-position: bottom left; - background-repeat: repeat-x; -} -#mw-head-base { - margin-top: -5em; - margin-left: 10em; - height: 5em; - background-image: url(images/border.png); - background-position: bottom left; - background-repeat: repeat-x; -} -#mw-head { - position: absolute; - top: 0; - right: 0; - width: 100%; -} -#mw-head h5 { - margin: 0; - padding: 0; -} - /* Hide empty portlets */ - div.emptyPortlet { - display: none; - } - /* Personal */ - #p-personal { - position: absolute; - top: 0; - margin-left: 10em; - right: 0.75em; - } - #p-personal h5 { - display: none; - } - #p-personal ul { - list-style: none; - margin: 0; - padding: 0; - } - /* @noflip */ - #p-personal li { - line-height: 1.125em; - float: left; - } - #p-personal li { - margin-left: 0.75em; - margin-top: 0.5em; - font-size: 0.75em; - } - /* Navigation Containers */ - #left-navigation { - position: absolute; - left: 10em; - top: 2.5em; - } - #right-navigation { - float: right; - margin-top: 2.5em; - } - /* Navigation Labels */ - div.vectorTabs h5, - div.vectorMenu h5 span { - display: none; - } - /* Namespaces and Views */ - /* @noflip */ - div.vectorTabs { - float: left; - } - div.vectorTabs { - background-image: url(images/tab-break.png); - background-position: bottom left; - background-repeat: no-repeat; - padding-left: 1px; - } - /* @noflip */ - div.vectorTabs ul { - float: left; - } - div.vectorTabs ul { - height: 100%; - list-style: none; - margin: 0; - padding: 0; - } - /* @noflip */ - div.vectorTabs ul li { - float: left; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - div.vectorTabs ul li { - line-height: 1.125em; - display: inline-block; - height: 100%; - margin: 0; - padding: 0; - background-color: #f3f3f3; - background-image: url(images/tab-normal-fade.png); - background-position: bottom left; - background-repeat: repeat-x; - white-space:nowrap; - } - /* IGNORED BY IE6 */ - div.vectorTabs ul > li { - display: block; - } - div.vectorTabs li.selected { - background-image: url(images/tab-current-fade.png); - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - div.vectorTabs li a { - display: inline-block; - height: 2.5em; - padding-left: 0.4em; - padding-right: 0.4em; - background-image: url(images/tab-break.png); - background-position: bottom right; - background-repeat: no-repeat; - } - div.vectorTabs li a, - div.vectorTabs li a span { - color: #0645ad; - cursor: pointer; - } - div.vectorTabs li a span { - font-size: 0.8em; - } - /* IGNORED BY IE6 */ - div.vectorTabs li > a { - display: block; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - div.vectorTabs a span { - display: inline-block; - padding-top: 1.25em; - } - /* IGNORED BY IE6 */ - /* @noflip */ - div.vectorTabs a > span { - float: left; - display: block; - } - div.vectorTabs li.selected a, - div.vectorTabs li.selected a span, - div.vectorTabs li.selected a:visited - div.vectorTabs li.selected a:visited span { - color: #333333; - text-decoration: none; - } - div.vectorTabs li.new a, - div.vectorTabs li.new a span, - div.vectorTabs li.new a:visited, - div.vectorTabs li.new a:visited span { - color: #a55858; - } - /* Variants and Actions */ - /* @noflip */ - div.vectorMenu { - direction: ltr; - float: left; - background-image: url(images/arrow-down-icon.png); - background-position: center center; - background-repeat: no-repeat; - } - /* @noflip */ - body.rtl div.vectorMenu { - direction: rtl; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - /* @noflip */ - #mw-head div.vectorMenu h5 { - float: left; - background-image: url(images/tab-break.png); - background-repeat: no-repeat; - } - /* IGNORED BY IE6 */ - #mw-head div.vectorMenu > h5 { - background-image: none; - } - #mw-head div.vectorMenu h5 { - background-position: bottom left; - margin-left: -1px; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - /* @noflip */ - div.vectorMenu h5 a { - display: inline-block; - width: 24px; - height: 2.5em; - text-decoration: none; - background-image: url(images/tab-break.png); - background-repeat: no-repeat; - } - div.vectorMenu h5 a{ - background-position: bottom right; - } - /* IGNORED BY IE6 */ - div.vectorMenu h5 > a { - display: block; - } - div.vectorMenu div.menu { - position: relative; - display: none; - clear: both; - text-align: left; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - /* @noflip */ - body.rtl div.vectorMenu div.menu { - margin-left: 24px; - } - /* IGNORED BY IE6 */ - /* @noflip */ - body.rtl div.vectorMenu > div.menu { - margin-left: auto; - } - /* Fixes old versions of FireFox */ - /* @noflip */ - body.rtl div.vectorMenu > div.menu, - x:-moz-any-link { - margin-left: 23px; - } - div.vectorMenu:hover div.menu { - display: block; - } - div.vectorMenu ul { - position: absolute; - background-color: white; - border: solid 1px silver; - border-top-width: 0; - list-style: none; - list-style-image: none; - list-style-type: none; - padding: 0; - margin: 0; - margin-left: -1px; - text-align: left; - } - /* Fixes old versions of FireFox */ - div.vectorMenu ul, - x:-moz-any-link { - min-width: 5em; - } - /* Returns things back to normal in modern versions of FireFox */ - div.vectorMenu ul, - x:-moz-any-link, - x:default { - min-width: 0; - } - div.vectorMenu li { - padding: 0; - margin: 0; - text-align: left; - line-height: 1em; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - div.vectorMenu li a { - display: inline-block; - padding: 0.5em; - white-space: nowrap; - } - /* IGNORED BY IE6 */ - div.vectorMenu li > a { - display: block; - } - div.vectorMenu li a { - color: #0645ad; - cursor: pointer; - font-size: 0.8em; - } - div.vectorMenu li.selected a, - div.vectorMenu li.selected a:visited { - color: #333333; - text-decoration: none; - } - /* Search */ - #p-search h5 { - display: none; - } - /* @noflip */ - #p-search { - float: left; - } - #p-search { - margin-right: 0.5em; - margin-left: 0.5em; - } - #p-search form, - #p-search input { - margin: 0; - margin-top: 0.4em; - } - #simpleSearch { - margin-top: 0.5em; - position: relative; - border: solid 1px #AAAAAA; - background-color: white; - background-image: url(images/search-fade.png); - background-position: top left; - background-repeat: repeat-x; - } - #simpleSearch label { - font-size: 0.8em; - top: 0.25em; - } - #simpleSearch input#searchInput { - margin: 0; - border-width: 0; - padding: 0.25em; - line-height: 1em; - font-size: 0.8em; - width: 9em; - background-color: transparent; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - #simpleSearch button#searchButton { - margin: 0; - padding: 0; - width: 1.75em; - height: 1.5em; - border: none; - cursor: pointer; - background-color: transparent; - background-image: url(images/search-ltr.png); - background-position: center center; - background-repeat: no-repeat; - } - /* IGNORED BY IE6 */ - #simpleSearch > button#searchButton { - height: 100%; - } - .suggestions-special .special-label { - font-size: 0.8em; - color: gray; - } - .suggestions-special .special-query { - color: black; - font-style: italic; - } - .suggestions-special .special-hover { - background-color: silver; - } -/* Panel */ -#mw-panel { - position: absolute; - top: 160px; - padding-top: 1em; - width: 10em; - left: 0; -} - #mw-panel div.portal { - padding-bottom: 1.5em; - } - #mw-panel div.portal h5 { - font-weight: normal; - color: #444444; - padding: 0.25em; - padding-top: 0; - padding-left: 1.75em; - cursor: default; - border: none; - font-size: 0.75em; - } - #mw-panel div.portal div.body { - margin: 0; - padding-top: 0.5em; - margin-left: 1.25em; - background-image: url(images/portal-break.png); - background-repeat: no-repeat; - background-position: top left; - } - #mw-panel div.portal div.body ul { - list-style: none; - list-style-image: none; - list-style-type: none; - padding: 0; - margin: 0; - } - #mw-panel div.portal div.body ul li { - line-height: 1.125em; - padding: 0; - padding-bottom: 0.5em; - margin: 0; - overflow: hidden; - font-size: 0.75em; - } - #mw-panel div.portal div.body ul li a { - color: #0645ad; - } - #mw-panel div.portal div.body ul li a:visited { - color: #0b0080; - } -/* Footer */ -#footer { - margin-left: 10em; - margin-top: 0; - padding: 0.75em; - background-image: url(images/border.png); - background-position: top left; - background-repeat: repeat-x; -} -#footer ul { - list-style: none; - list-style-image: none; - list-style-type: none; - margin: 0; - padding: 0; -} -#footer ul li { - margin: 0; - padding: 0; - padding-top: 0.5em; - padding-bottom: 0.5em; - color: #333333; - font-size: 0.7em; -} -#footer #footer-icons { - float: right; -} -/* @noflip */ -body.ltr #footer #footer-places { - float: left; -} -#footer #footer-info li { - line-height: 1.4em; -} -#footer #footer-icons li { - float: left; - margin-left: 0.5em; - line-height: 2em; -} -#footer #footer-places li { - float: left; - margin-right: 1em; - line-height: 2em; -} -/* Logo */ -#p-logo { - position: absolute; - top: -160px; - left: 0; - width: 10em; - height: 160px; -} -#p-logo a { - display: block; - width: 10em; - height: 160px; - background-repeat: no-repeat; - background-position: center center; - text-decoration: none; -} - -/* - * - * The following code is highly modified from monobook. It would be nice if the - * preftoc id was more human readable like preferences-toc for instance, - * howerver this would require backporting the other skins. - */ - -/* Preferences */ -#preftoc { - /* Tabs */ - width: 100%; - float: left; - clear: both; - margin: 0 !important; - padding: 0 !important; - background-image: url(images/preferences-break.png); - background-position: bottom left; - background-repeat: no-repeat; -} - #preftoc li { - /* Tab */ - float: left; - margin: 0; - padding: 0; - padding-right: 1px; - height: 2.25em; - white-space: nowrap; - list-style-type: none; - list-style-image: none; - background-image: url(images/preferences-break.png); - background-position: bottom right; - background-repeat: no-repeat; - } - /* IGNORED BY IE6 */ - #preftoc li:first-child { - margin-left: 1px; - } - #preftoc a, - #preftoc a:active { - display: inline-block; - position: relative; - color: #0645ad; - padding: 0.5em; - text-decoration: none; - background-image: none; - font-size: 0.9em; - } - #preftoc a:hover { - text-decoration: underline; - } - #preftoc li.selected a { - background-image: url(images/preferences-fade.png); - background-position: bottom; - background-repeat: repeat-x; - color: #333333; - text-decoration: none; - } -#preferences { - float: left; - width: 100%; - margin: 0; - margin-top: -2px; - clear: both; - border: solid 1px #cccccc; - background-color: #f9f9f9; - background-image: url(images/preferences-base.png); -} -#preferences fieldset.prefsection { - border: none; - padding: 0; - margin: 1em; -} -#preferences fieldset.prefsection fieldset { - border: none; - border-top: solid 1px #cccccc; -} -#preferences legend { - color: #666666; -} -#preferences fieldset.prefsection legend.mainLegend { - display: none; -} -#preferences td { - padding-left: 0.5em; - padding-right: 0.5em; -} -#preferences td.htmlform-tip { - font-size: x-small; - padding: .2em 2em; - color: #666666; -} -#preferences div.mw-prefs-buttons { - padding: 1em; -} -#preferences div.mw-prefs-buttons input { - margin-right: 0.25em; -} - -/* - * Styles for the user login and create account forms - */ -#userlogin, #userloginForm { - border: solid 1px #cccccc; - padding: 1.2em; - margin: .5em; - float: left; -} - -#userlogin { - min-width: 20em; - max-width: 90%; - width: 40em; -} - -/* - * - * The following code is slightly modified from monobook - * - */ -#content { - line-height: 1.5em; -} -#bodyContent { - font-size: 0.8em; -} -/* Links */ -a { - text-decoration: none; - color: #0645ad; - background: none; -} -a:visited { - color: #0b0080; -} -a:active { - color: #faa700; -} -a:hover { - text-decoration: underline; -} -a.stub { - color: #772233; -} -a.new, #p-personal a.new { - color: #ba0000; -} -a.new:visited, #p-personal a.new:visited { - color: #a55858; -} - -/* Inline Elements */ -img { - border: none; - vertical-align: middle; -} -hr { - height: 1px; - color: #aaa; - background-color: #aaa; - border: 0; - margin: .2em 0 .2em 0; -} - -/* Structural Elements */ -h1, -h2, -h3, -h4, -h5, -h6 { - color: black; - background: none; - font-weight: normal; - margin: 0; - padding-top: .5em; - padding-bottom: .17em; - border-bottom: 1px solid #aaa; - width: auto; -} -h1 { font-size: 188%; } -h1 .editsection { font-size: 53%; } -h2 { font-size: 150%; } -h2 .editsection { font-size: 67%; } -h3, -h4, -h5, -h6 { - border-bottom: none; - font-weight: bold; -} -h3 { font-size: 132%; } -h3 .editsection { font-size: 76%; font-weight: normal; } -h4 { font-size: 116%; } -h4 .editsection { font-size: 86%; font-weight: normal; } -h5 { font-size: 100%; } -h5 .editsection { font-weight: normal; } -h6 { font-size: 80%; } -h6 .editsection { font-size: 125%; font-weight: normal; } -p { - margin: .4em 0 .5em 0; - line-height: 1.5em; -} - p img { - margin: 0; - } -abbr, -acronym, -.explain { - border-bottom: 1px dotted black; - color: black; - background: none; - cursor: help; -} -q { - font-family: Times, "Times New Roman", serif; - font-style: italic; -} -/* Disabled for now -blockquote { - font-family: Times, "Times New Roman", serif; - font-style: italic; -}*/ -code { - background-color: #f9f9f9; -} -pre { - padding: 1em; - border: 1px dashed #2f6fab; - color: black; - background-color: #f9f9f9; - line-height: 1.1em; -} -ul { - line-height: 1.5em; - list-style-type: square; - margin: .3em 0 0 1.5em; - padding: 0; - list-style-image: url(images/bullet-icon.png); -} -ol { - line-height: 1.5em; - margin: .3em 0 0 3.2em; - padding: 0; - list-style-image: none; -} -li { - margin-bottom: .1em; -} -dt { - font-weight: bold; - margin-bottom: .1em; -} -dl { - margin-top: .2em; - margin-bottom: .5em; -} -dd { - line-height: 1.5em; - margin-left: 2em; - margin-bottom: .1em; -} -/* Tables */ -table { - font-size: 100%; - color: black; - /* we don't want the bottom borders of

      s to be visible through - * floated tables */ - background-color: white; -} -fieldset table { - /* but keep table layouts in forms clean... */ - background: none; -} -/* Forms */ -fieldset { - border: 1px solid #2f6fab; - margin: 1em 0 1em 0; - padding: 0 1em 1em; - line-height: 1.5em; -} - fieldset.nested { - margin: 0 0 0.5em 0; - padding: 0 0.5em 0.5em; - } -legend { - padding: .5em; - font-size: 95%; -} -form { - border: none; - margin: 0; -} -textarea { - width: 100%; - padding: .1em; -} -select { - vertical-align: top; -} -/* Table of Contents */ -#toc, -.toc, -.mw-warning { - border: 1px solid #aaa; - background-color: #f9f9f9; - padding: 5px; - font-size: 95%; -} -#toc h2, -.toc h2 { - display: inline; - border: none; - padding: 0; - font-size: 100%; - font-weight: bold; -} -#toc #toctitle, -.toc #toctitle, -#toc .toctitle, -.toc .toctitle { - text-align: center; -} -#toc ul, -.toc ul { - list-style-type: none; - list-style-image: none; - margin-left: 0; - padding-left: 0; - text-align: left; -} -#toc ul ul, -.toc ul ul { - margin: 0 0 0 2em; -} -#toc .toctoggle, -.toc .toctoggle { - font-size: 94%; -} -/* Images */ -div.floatright, table.floatright { - clear: right; - float: right; - position: relative; - margin: 0 0 .5em .5em; - border: 0; -} -div.floatright p { font-style: italic; } -div.floatleft, table.floatleft { - float: left; - clear: left; - position: relative; - margin: 0 .5em .5em 0; - border: 0; -} -div.floatleft p { font-style: italic; } -/* Thumbnails */ -div.thumb { - margin-bottom: .5em; - border-style: solid; - border-color: white; - width: auto; - background-color: transparent; -} -div.thumbinner { - border: 1px solid #ccc; - padding: 3px !important; - background-color: #f9f9f9; - font-size: 94%; - text-align: center; - overflow: hidden; -} -html .thumbimage { - border: 1px solid #ccc; -} -html .thumbcaption { - border: none; - text-align: left; - line-height: 1.4em; - padding: 3px !important; - font-size: 94%; -} -div.magnify { - float: right; - border: none !important; - background: none !important; -} -div.magnify a, div.magnify img { - display: block; - border: none !important; - background: none !important; -} -div.tright { - clear: right; - float: right; - border-width: .5em 0 .8em 1.4em; -} -div.tleft { - float: left; - clear: left; - margin-right: .5em; - border-width: .5em 1.4em .8em 0; -} -img.thumbborder { - border: 1px solid #dddddd; -} -.hiddenStructure { - display: none; -} -/* Warning */ -.mw-warning { - margin-left: 50px; - margin-right: 50px; - text-align: center; -} -/* User Message */ -.usermessage { - background-color: #ffce7b; - border: 1px solid #ffa500; - color: black; - font-weight: bold; - margin: 2em 0 1em; - padding: .5em 1em; - vertical-align: middle; -} -/* Site Notice */ -#siteNotice { - text-align: center; - font-size: 0.8em; - margin: 0; -} - #siteNotice div, - #siteNotice p { - margin: 0; - padding: 0; - margin-bottom: 0.9em; - } -/* Categories */ -.catlinks { - border: 1px solid #aaa; - background-color: #f9f9f9; - padding: 5px; - margin-top: 1em; - clear: both; -} -/* Sub-navigation */ -#siteSub { - display: none; -} -#jump-to-nav { - display: none; -} -#contentSub, #contentSub2 { - font-size: 84%; - line-height: 1.2em; - margin: 0 0 1.4em 1em; - color: #7d7d7d; - width: auto; -} -span.subpages { - display: block; -} -/* Emulate Center */ -.center { - width: 100%; - text-align: center; -} -*.center * { - margin-left: auto; - margin-right: auto; -} -/* Small for tables and similar */ -.small, .small * { - font-size: 94%; -} -table.small { - font-size: 100%; -} -/* Edge Cases for Content */ -h1, h2 { - margin-bottom: .6em; -} -h3, h4, h5 { - margin-bottom: .3em; -} -#firstHeading { - padding-top: 0; - margin-top: 0; - padding-top: 0; - margin-bottom: 0.1em; - line-height: 1.2em; - font-size: 1.6em; - padding-bottom: 0; -} -#content a.external, -#content a[href ^="gopher://"] { - background: url(images/external-link-ltr-icon.png) center right no-repeat; - padding: 0 13px 0 0; -} -#content a[href ^="https://"], -.link-https { - background: url(images/lock-icon.png) center right no-repeat; - padding: 0 18px 0 0; -} -#content a[href ^="mailto:"], -.link-mailto { - background: url(images/mail-icon.png) center right no-repeat; - padding: 0 18px 0 0; -} -#content a[href ^="news://"] { - background: url(images/news-icon.png) center right no-repeat; - padding: 0 18px 0 0; -} -#content a[href ^="ftp://"], -.link-ftp { - background: url(images/file-icon.png) center right no-repeat; - padding: 0 18px 0 0; -} -#content a[href ^="irc://"], -#content a.extiw[href ^="irc://"], -.link-irc { - background: url(images/talk-icon.png) center right no-repeat; - padding: 0 18px 0 0; -} -#content a.external[href $=".ogg"], #content a.external[href $=".OGG"], -#content a.external[href $=".mid"], #content a.external[href $=".MID"], -#content a.external[href $=".midi"], #content a.external[href $=".MIDI"], -#content a.external[href $=".mp3"], #content a.external[href $=".MP3"], -#content a.external[href $=".wav"], #content a.external[href $=".WAV"], -#content a.external[href $=".wma"], #content a.external[href $=".WMA"], -.link-audio { - background: url("images/audio-icon.png") center right no-repeat; - padding: 0 18px 0 0; -} -#content a.external[href $=".ogm"], #content a.external[href $=".OGM"], -#content a.external[href $=".avi"], #content a.external[href $=".AVI"], -#content a.external[href $=".mpeg"], #content a.external[href $=".MPEG"], -#content a.external[href $=".mpg"], #content a.external[href $=".MPG"], -.link-video { - background: url("images/video-icon.png") center right no-repeat; - padding: 0 18px 0 0; -} -#content a.external[href $=".pdf"], #content a.external[href $=".PDF"], -#content a.external[href *=".pdf#"], #content a.external[href *=".PDF#"], -#content a.external[href *=".pdf?"], #content a.external[href *=".PDF?"], -.link-document { - background: url("images/document-icon.png") center right no-repeat; - padding: 0 18px 0 0; -} -/* Interwiki Styling (Disabled) */ -#content a.extiw, -#content a.extiw:active { - color: #36b; - background: none; - padding: 0; -} -#content a.external { - color: #36b; -} -#content .printfooter { - display: none; -} -/* Icon for Usernames */ -#pt-userpage, -#pt-anonuserpage, -#pt-login { - background: url(images/user-icon.png) left top no-repeat; - padding-left: 15px !important; - text-transform: none; -} - -.toccolours { - border: 1px solid #aaa; - background-color: #f9f9f9; - padding: 5px; - font-size: 95%; -} -#bodyContent { - position: relative; - width: 100%; -} -#mw-js-message { - font-size: 0.8em; -} -div#bodyContent { - line-height: 1.5em; -} - -/* Watch/Unwatch Icon Styling */ -#ca-unwatch.icon, -#ca-watch.icon { - margin-right:1px; -} -#ca-unwatch.icon a, -#ca-watch.icon a { - margin: 0; - padding: 0; - outline: none; - display: block; - width: 26px; - height: 2.5em; -} -#ca-unwatch.icon a { - background-image: url(images/watch-icons.png); - background-position: -43px 60%; -} -#ca-watch.icon a { - background-image: url(images/watch-icons.png); - background-position: 5px 60%; -} -#ca-unwatch.icon a:hover { - background-image: url(images/watch-icons.png); - background-position: -67px 60%; -} -#ca-watch.icon a:hover { - background-image: url(images/watch-icons.png); - background-position: -19px 60%; -} -#ca-unwatch.icon a.loading, -#ca-watch.icon a.loading { - background-image: url(images/watch-icon-loading.gif); - background-position: center 60%; -} -#ca-unwatch.icon a span, -#ca-watch.icon a span { - display: none; -} -div.vectorTabs ul { - background-image:url(images/tab-break.png); - background-position:right bottom; - background-repeat:no-repeat; -} diff --git a/skins/vector/main-rtl.css b/skins/vector/main-rtl.css deleted file mode 100644 index 5387289f..00000000 --- a/skins/vector/main-rtl.css +++ /dev/null @@ -1,1128 +0,0 @@ -/* - * main-rtl.css is automatically generated using CSSJanus, a python script for - * creating RTL versions of otherwise LTR stylesheets. - * - * You may download the tool to rebuild this stylesheet - * http://code.google.com/p/cssjanus/ - * - * An online version of this tool can be used at: - * http://cssjanus.commoner.com/ - * - * The following command is used to generate the RTL version of this file - * ./cssjanus.py --swap_ltr_rtl_in_url < main-ltr.css > main-rtl.css - * - * Any rules which should not be flipped should be prepended with @noflip in - * a comment block. - */ -/* Framework */ -html, -body { - height: 100%; - margin: 0; - padding: 0; - font-family: sans-serif; - font-size: 1em; -} -body { - background-color: #f3f3f3; - background-image: url(images/page-base.png); -} -/* Content */ -#content { - margin-right: 10em; - padding: 1em; - background-image: url(images/border.png); - background-position: top right; - background-repeat: repeat-y; - background-color: white; -} -/* Head */ -#mw-page-base { - height: 5em; - background-color: white; - background-image: url(images/page-fade.png); - background-position: bottom right; - background-repeat: repeat-x; -} -#mw-head-base { - margin-top: -5em; - margin-right: 10em; - height: 5em; - background-image: url(images/border.png); - background-position: bottom right; - background-repeat: repeat-x; -} -#mw-head { - position: absolute; - top: 0; - left: 0; - width: 100%; -} -#mw-head h5 { - margin: 0; - padding: 0; -} - /* Hide empty portlets */ - div.emptyPortlet { - display: none; - } - /* Personal */ - #p-personal { - position: absolute; - top: 0; - margin-right: 10em; - left: 0.75em; - } - #p-personal h5 { - display: none; - } - #p-personal ul { - list-style: none; - margin: 0; - padding: 0; - } - /* @noflip */ - #p-personal li { - line-height: 1.125em; - float: left; - } - #p-personal li { - margin-right: 0.75em; - margin-top: 0.5em; - font-size: 0.75em; - } - /* Navigation Containers */ - #left-navigation { - position: absolute; - right: 10em; - top: 2.5em; - } - #right-navigation { - float: left; - margin-top: 2.5em; - } - /* Navigation Labels */ - div.vectorTabs h5, - div.vectorMenu h5 span { - display: none; - } - /* Namespaces and Views */ - /* @noflip */ - div.vectorTabs { - float: left; - } - div.vectorTabs { - background-image: url(images/tab-break.png); - background-position: bottom right; - background-repeat: no-repeat; - padding-right: 1px; - } - /* @noflip */ - div.vectorTabs ul { - float: left; - } - div.vectorTabs ul { - height: 100%; - list-style: none; - margin: 0; - padding: 0; - } - /* @noflip */ - div.vectorTabs ul li { - float: left; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - div.vectorTabs ul li { - line-height: 1.125em; - display: inline-block; - height: 100%; - margin: 0; - padding: 0; - background-color: #f3f3f3; - background-image: url(images/tab-normal-fade.png); - background-position: bottom right; - background-repeat: repeat-x; - white-space:nowrap; - } - /* IGNORED BY IE6 */ - div.vectorTabs ul > li { - display: block; - } - div.vectorTabs li.selected { - background-image: url(images/tab-current-fade.png); - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - div.vectorTabs li a { - display: inline-block; - height: 2.5em; - padding-right: 0.4em; - padding-left: 0.4em; - background-image: url(images/tab-break.png); - background-position: bottom left; - background-repeat: no-repeat; - } - div.vectorTabs li a, - div.vectorTabs li a span { - color: #0645ad; - cursor: pointer; - } - div.vectorTabs li a span { - font-size: 0.8em; - } - /* IGNORED BY IE6 */ - div.vectorTabs li > a { - display: block; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - div.vectorTabs a span { - display: inline-block; - padding-top: 1.25em; - } - /* IGNORED BY IE6 */ - /* @noflip */ - div.vectorTabs a > span { - float: left; - display: block; - } - div.vectorTabs li.selected a, - div.vectorTabs li.selected a span, - div.vectorTabs li.selected a:visited - div.vectorTabs li.selected a:visited span { - color: #333333; - text-decoration: none; - } - div.vectorTabs li.new a, - div.vectorTabs li.new a span, - div.vectorTabs li.new a:visited, - div.vectorTabs li.new a:visited span { - color: #a55858; - } - /* Variants and Actions */ - /* @noflip */ - div.vectorMenu { - direction: ltr; - float: left; - background-image: url(images/arrow-down-icon.png); - background-position: center center; - background-repeat: no-repeat; - } - /* @noflip */ - body.rtl div.vectorMenu { - direction: rtl; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - /* @noflip */ - #mw-head div.vectorMenu h5 { - float: left; - background-image: url(images/tab-break.png); - background-repeat: no-repeat; - } - /* IGNORED BY IE6 */ - #mw-head div.vectorMenu > h5 { - background-image: none; - } - #mw-head div.vectorMenu h5 { - background-position: bottom right; - margin-right: -1px; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - /* @noflip */ - div.vectorMenu h5 a { - display: inline-block; - width: 24px; - height: 2.5em; - text-decoration: none; - background-image: url(images/tab-break.png); - background-repeat: no-repeat; - } - div.vectorMenu h5 a{ - background-position: bottom left; - } - /* IGNORED BY IE6 */ - div.vectorMenu h5 > a { - display: block; - } - div.vectorMenu div.menu { - position: relative; - display: none; - clear: both; - text-align: right; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - /* @noflip */ - body.rtl div.vectorMenu div.menu { - margin-left: 24px; - } - /* IGNORED BY IE6 */ - /* @noflip */ - body.rtl div.vectorMenu > div.menu { - margin-left: auto; - } - /* Fixes old versions of FireFox */ - /* @noflip */ - body.rtl div.vectorMenu > div.menu, - x:-moz-any-link { - margin-left: 23px; - } - div.vectorMenu:hover div.menu { - display: block; - } - div.vectorMenu ul { - position: absolute; - background-color: white; - border: solid 1px silver; - border-top-width: 0; - list-style: none; - list-style-image: none; - list-style-type: none; - padding: 0; - margin: 0; - margin-right: -1px; - text-align: right; - } - /* Fixes old versions of FireFox */ - div.vectorMenu ul, - x:-moz-any-link { - min-width: 5em; - } - /* Returns things back to normal in modern versions of FireFox */ - div.vectorMenu ul, - x:-moz-any-link, - x:default { - min-width: 0; - } - div.vectorMenu li { - padding: 0; - margin: 0; - text-align: right; - line-height: 1em; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - div.vectorMenu li a { - display: inline-block; - padding: 0.5em; - white-space: nowrap; - } - /* IGNORED BY IE6 */ - div.vectorMenu li > a { - display: block; - } - div.vectorMenu li a { - color: #0645ad; - cursor: pointer; - font-size: 0.8em; - } - div.vectorMenu li.selected a, - div.vectorMenu li.selected a:visited { - color: #333333; - text-decoration: none; - } - /* Search */ - #p-search h5 { - display: none; - } - /* @noflip */ - #p-search { - float: left; - } - #p-search { - margin-left: 0.5em; - margin-right: 0.5em; - } - #p-search form, - #p-search input { - margin: 0; - margin-top: 0.4em; - } - #simpleSearch { - margin-top: 0.5em; - position: relative; - border: solid 1px #AAAAAA; - background-color: white; - background-image: url(images/search-fade.png); - background-position: top right; - background-repeat: repeat-x; - } - #simpleSearch label { - font-size: 0.8em; - top: 0.25em; - } - #simpleSearch input#searchInput { - margin: 0; - border-width: 0; - padding: 0.25em; - line-height: 1em; - font-size: 0.8em; - width: 9em; - background-color: transparent; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - #simpleSearch button#searchButton { - margin: 0; - padding: 0; - width: 1.75em; - height: 1.5em; - border: none; - cursor: pointer; - background-color: transparent; - background-image: url(images/search-rtl.png); - background-position: center center; - background-repeat: no-repeat; - } - /* IGNORED BY IE6 */ - #simpleSearch > button#searchButton { - height: 100%; - } - .suggestions-special .special-label { - font-size: 0.8em; - color: gray; - } - .suggestions-special .special-query { - color: black; - font-style: italic; - } - .suggestions-special .special-hover { - background-color: silver; - } -/* Panel */ -#mw-panel { - position: absolute; - top: 160px; - padding-top: 1em; - width: 10em; - right: 0; -} - #mw-panel div.portal { - padding-bottom: 1.5em; - } - #mw-panel div.portal h5 { - font-weight: normal; - color: #444444; - padding: 0.25em; - padding-top: 0; - padding-right: 1.75em; - cursor: default; - border: none; - font-size: 0.75em; - } - #mw-panel div.portal div.body { - margin: 0; - padding-top: 0.5em; - margin-right: 1.25em; - background-image: url(images/portal-break.png); - background-repeat: no-repeat; - background-position: top right; - } - #mw-panel div.portal div.body ul { - list-style: none; - list-style-image: none; - list-style-type: none; - padding: 0; - margin: 0; - } - #mw-panel div.portal div.body ul li { - line-height: 1.125em; - padding: 0; - padding-bottom: 0.5em; - margin: 0; - overflow: hidden; - font-size: 0.75em; - } - #mw-panel div.portal div.body ul li a { - color: #0645ad; - } - #mw-panel div.portal div.body ul li a:visited { - color: #0b0080; - } -/* Footer */ -#footer { - margin-right: 10em; - margin-top: 0; - padding: 0.75em; - background-image: url(images/border.png); - background-position: top right; - background-repeat: repeat-x; -} -#footer ul { - list-style: none; - list-style-image: none; - list-style-type: none; - margin: 0; - padding: 0; -} -#footer ul li { - margin: 0; - padding: 0; - padding-top: 0.5em; - padding-bottom: 0.5em; - color: #333333; - font-size: 0.7em; -} -#footer #footer-icons { - float: left; -} -/* @noflip */ -body.ltr #footer #footer-places { - float: left; -} -#footer #footer-info li { - line-height: 1.4em; -} -#footer #footer-icons li { - float: right; - margin-right: 0.5em; - line-height: 2em; -} -#footer #footer-places li { - float: right; - margin-left: 1em; - line-height: 2em; -} -/* Logo */ -#p-logo { - position: absolute; - top: -160px; - right: 0; - width: 10em; - height: 160px; -} -#p-logo a { - display: block; - width: 10em; - height: 160px; - background-repeat: no-repeat; - background-position: center center; - text-decoration: none; -} - -/* - * - * The following code is highly modified from monobook. It would be nice if the - * preftoc id was more human readable like preferences-toc for instance, - * howerver this would require backporting the other skins. - */ - -/* Preferences */ -#preftoc { - /* Tabs */ - width: 100%; - float: right; - clear: both; - margin: 0 !important; - padding: 0 !important; - background-image: url(images/preferences-break.png); - background-position: bottom right; - background-repeat: no-repeat; -} - #preftoc li { - /* Tab */ - float: right; - margin: 0; - padding: 0; - padding-left: 1px; - height: 2.25em; - white-space: nowrap; - list-style-type: none; - list-style-image: none; - background-image: url(images/preferences-break.png); - background-position: bottom left; - background-repeat: no-repeat; - } - /* IGNORED BY IE6 */ - #preftoc li:first-child { - margin-right: 1px; - } - #preftoc a, - #preftoc a:active { - display: inline-block; - position: relative; - color: #0645ad; - padding: 0.5em; - text-decoration: none; - background-image: none; - font-size: 0.9em; - } - #preftoc a:hover { - text-decoration: underline; - } - #preftoc li.selected a { - background-image: url(images/preferences-fade.png); - background-position: bottom; - background-repeat: repeat-x; - color: #333333; - text-decoration: none; - } -#preferences { - float: right; - width: 100%; - margin: 0; - margin-top: -2px; - clear: both; - border: solid 1px #cccccc; - background-color: #f9f9f9; - background-image: url(images/preferences-base.png); -} -#preferences fieldset.prefsection { - border: none; - padding: 0; - margin: 1em; -} -#preferences fieldset.prefsection fieldset { - border: none; - border-top: solid 1px #cccccc; -} -#preferences legend { - color: #666666; -} -#preferences fieldset.prefsection legend.mainLegend { - display: none; -} -#preferences td { - padding-right: 0.5em; - padding-left: 0.5em; -} -#preferences td.htmlform-tip { - font-size: x-small; - padding: .2em 2em; - color: #666666; -} -#preferences div.mw-prefs-buttons { - padding: 1em; -} -#preferences div.mw-prefs-buttons input { - margin-left: 0.25em; -} - -/* - * Styles for the user login and create account forms - */ -#userlogin, #userloginForm { - border: solid 1px #cccccc; - padding: 1.2em; - margin: .5em; - float: right; -} - -#userlogin { - min-width: 20em; - max-width: 90%; - width: 40em; -} - -/* - * - * The following code is slightly modified from monobook - * - */ -#content { - line-height: 1.5em; -} -#bodyContent { - font-size: 0.8em; -} -/* Links */ -a { - text-decoration: none; - color: #0645ad; - background: none; -} -a:visited { - color: #0b0080; -} -a:active { - color: #faa700; -} -a:hover { - text-decoration: underline; -} -a.stub { - color: #772233; -} -a.new, #p-personal a.new { - color: #ba0000; -} -a.new:visited, #p-personal a.new:visited { - color: #a55858; -} - -/* Inline Elements */ -img { - border: none; - vertical-align: middle; -} -hr { - height: 1px; - color: #aaa; - background-color: #aaa; - border: 0; - margin: .2em 0 .2em 0; -} - -/* Structural Elements */ -h1, -h2, -h3, -h4, -h5, -h6 { - color: black; - background: none; - font-weight: normal; - margin: 0; - padding-top: .5em; - padding-bottom: .17em; - border-bottom: 1px solid #aaa; - width: auto; -} -h1 { font-size: 188%; } -h1 .editsection { font-size: 53%; } -h2 { font-size: 150%; } -h2 .editsection { font-size: 67%; } -h3, -h4, -h5, -h6 { - border-bottom: none; - font-weight: bold; -} -h3 { font-size: 132%; } -h3 .editsection { font-size: 76%; font-weight: normal; } -h4 { font-size: 116%; } -h4 .editsection { font-size: 86%; font-weight: normal; } -h5 { font-size: 100%; } -h5 .editsection { font-weight: normal; } -h6 { font-size: 80%; } -h6 .editsection { font-size: 125%; font-weight: normal; } -p { - margin: .4em 0 .5em 0; - line-height: 1.5em; -} - p img { - margin: 0; - } -abbr, -acronym, -.explain { - border-bottom: 1px dotted black; - color: black; - background: none; - cursor: help; -} -q { - font-family: Times, "Times New Roman", serif; - font-style: italic; -} -/* Disabled for now -blockquote { - font-family: Times, "Times New Roman", serif; - font-style: italic; -}*/ -code { - background-color: #f9f9f9; -} -pre { - padding: 1em; - border: 1px dashed #2f6fab; - color: black; - background-color: #f9f9f9; - line-height: 1.1em; -} -ul { - line-height: 1.5em; - list-style-type: square; - margin: .3em 1.5em 0 0; - padding: 0; - list-style-image: url(images/bullet-icon.png); -} -ol { - line-height: 1.5em; - margin: .3em 3.2em 0 0; - padding: 0; - list-style-image: none; -} -li { - margin-bottom: .1em; -} -dt { - font-weight: bold; - margin-bottom: .1em; -} -dl { - margin-top: .2em; - margin-bottom: .5em; -} -dd { - line-height: 1.5em; - margin-right: 2em; - margin-bottom: .1em; -} -/* Tables */ -table { - font-size: 100%; - color: black; - /* we don't want the bottom borders of

      s to be visible through - * floated tables */ - background-color: white; -} -fieldset table { - /* but keep table layouts in forms clean... */ - background: none; -} -/* Forms */ -fieldset { - border: 1px solid #2f6fab; - margin: 1em 0 1em 0; - padding: 0 1em 1em; - line-height: 1.5em; -} - fieldset.nested { - margin: 0 0 0.5em 0; - padding: 0 0.5em 0.5em; - } -legend { - padding: .5em; - font-size: 95%; -} -form { - border: none; - margin: 0; -} -textarea { - width: 100%; - padding: .1em; -} -select { - vertical-align: top; -} -/* Table of Contents */ -#toc, -.toc, -.mw-warning { - border: 1px solid #aaa; - background-color: #f9f9f9; - padding: 5px; - font-size: 95%; -} -#toc h2, -.toc h2 { - display: inline; - border: none; - padding: 0; - font-size: 100%; - font-weight: bold; -} -#toc #toctitle, -.toc #toctitle, -#toc .toctitle, -.toc .toctitle { - text-align: center; -} -#toc ul, -.toc ul { - list-style-type: none; - list-style-image: none; - margin-right: 0; - padding-right: 0; - text-align: right; -} -#toc ul ul, -.toc ul ul { - margin: 0 2em 0 0; -} -#toc .toctoggle, -.toc .toctoggle { - font-size: 94%; -} -/* Images */ -div.floatright, table.floatright { - clear: left; - float: left; - position: relative; - margin: 0 .5em .5em 0; - border: 0; -} -div.floatright p { font-style: italic; } -div.floatleft, table.floatleft { - float: right; - clear: right; - position: relative; - margin: 0 0 .5em .5em; - border: 0; -} -div.floatleft p { font-style: italic; } -/* Thumbnails */ -div.thumb { - margin-bottom: .5em; - border-style: solid; - border-color: white; - width: auto; - background-color: transparent; -} -div.thumbinner { - border: 1px solid #ccc; - padding: 3px !important; - background-color: #f9f9f9; - font-size: 94%; - text-align: center; - overflow: hidden; -} -html .thumbimage { - border: 1px solid #ccc; -} -html .thumbcaption { - border: none; - text-align: right; - line-height: 1.4em; - padding: 3px !important; - font-size: 94%; -} -div.magnify { - float: left; - border: none !important; - background: none !important; -} -div.magnify a, div.magnify img { - display: block; - border: none !important; - background: none !important; -} -div.tright { - clear: left; - float: left; - border-width: .5em 1.4em .8em 0; -} -div.tleft { - float: right; - clear: right; - margin-left: .5em; - border-width: .5em 0 .8em 1.4em; -} -img.thumbborder { - border: 1px solid #dddddd; -} -.hiddenStructure { - display: none; -} -/* Warning */ -.mw-warning { - margin-right: 50px; - margin-left: 50px; - text-align: center; -} -/* User Message */ -.usermessage { - background-color: #ffce7b; - border: 1px solid #ffa500; - color: black; - font-weight: bold; - margin: 2em 0 1em; - padding: .5em 1em; - vertical-align: middle; -} -/* Site Notice */ -#siteNotice { - text-align: center; - font-size: 0.8em; - margin: 0; -} - #siteNotice div, - #siteNotice p { - margin: 0; - padding: 0; - margin-bottom: 0.9em; - } -/* Categories */ -.catlinks { - border: 1px solid #aaa; - background-color: #f9f9f9; - padding: 5px; - margin-top: 1em; - clear: both; -} -/* Sub-navigation */ -#siteSub { - display: none; -} -#jump-to-nav { - display: none; -} -#contentSub, #contentSub2 { - font-size: 84%; - line-height: 1.2em; - margin: 0 1em 1.4em 0; - color: #7d7d7d; - width: auto; -} -span.subpages { - display: block; -} -/* Emulate Center */ -.center { - width: 100%; - text-align: center; -} -*.center * { - margin-right: auto; - margin-left: auto; -} -/* Small for tables and similar */ -.small, .small * { - font-size: 94%; -} -table.small { - font-size: 100%; -} -/* Edge Cases for Content */ -h1, h2 { - margin-bottom: .6em; -} -h3, h4, h5 { - margin-bottom: .3em; -} -#firstHeading { - padding-top: 0; - margin-top: 0; - padding-top: 0; - margin-bottom: 0.1em; - line-height: 1.2em; - font-size: 1.6em; - padding-bottom: 0; -} -#content a.external, -#content a[href ^="gopher://"] { - background: url(images/external-link-rtl-icon.png) center left no-repeat; - padding: 0 0 0 13px; -} -#content a[href ^="https://"], -.link-https { - background: url(images/lock-icon.png) center left no-repeat; - padding: 0 0 0 18px; -} -#content a[href ^="mailto:"], -.link-mailto { - background: url(images/mail-icon.png) center left no-repeat; - padding: 0 0 0 18px; -} -#content a[href ^="news://"] { - background: url(images/news-icon.png) center left no-repeat; - padding: 0 0 0 18px; -} -#content a[href ^="ftp://"], -.link-ftp { - background: url(images/file-icon.png) center left no-repeat; - padding: 0 0 0 18px; -} -#content a[href ^="irc://"], -#content a.extiw[href ^="irc://"], -.link-irc { - background: url(images/talk-icon.png) center left no-repeat; - padding: 0 0 0 18px; -} -#content a.external[href $=".ogg"], #content a.external[href $=".OGG"], -#content a.external[href $=".mid"], #content a.external[href $=".MID"], -#content a.external[href $=".midi"], #content a.external[href $=".MIDI"], -#content a.external[href $=".mp3"], #content a.external[href $=".MP3"], -#content a.external[href $=".wav"], #content a.external[href $=".WAV"], -#content a.external[href $=".wma"], #content a.external[href $=".WMA"], -.link-audio { - background: url("images/audio-icon.png") center left no-repeat; - padding: 0 0 0 18px; -} -#content a.external[href $=".ogm"], #content a.external[href $=".OGM"], -#content a.external[href $=".avi"], #content a.external[href $=".AVI"], -#content a.external[href $=".mpeg"], #content a.external[href $=".MPEG"], -#content a.external[href $=".mpg"], #content a.external[href $=".MPG"], -.link-video { - background: url("images/video-icon.png") center left no-repeat; - padding: 0 0 0 18px; -} -#content a.external[href $=".pdf"], #content a.external[href $=".PDF"], -#content a.external[href *=".pdf#"], #content a.external[href *=".PDF#"], -#content a.external[href *=".pdf?"], #content a.external[href *=".PDF?"], -.link-document { - background: url("images/document-icon.png") center left no-repeat; - padding: 0 0 0 18px; -} -/* Interwiki Styling (Disabled) */ -#content a.extiw, -#content a.extiw:active { - color: #36b; - background: none; - padding: 0; -} -#content a.external { - color: #36b; -} -#content .printfooter { - display: none; -} -/* Icon for Usernames */ -#pt-userpage, -#pt-anonuserpage, -#pt-login { - background: url(images/user-icon.png) right top no-repeat; - padding-right: 15px !important; - text-transform: none; -} - -.toccolours { - border: 1px solid #aaa; - background-color: #f9f9f9; - padding: 5px; - font-size: 95%; -} -#bodyContent { - position: relative; - width: 100%; -} -#mw-js-message { - font-size: 0.8em; -} -div#bodyContent { - line-height: 1.5em; -} - -/* Watch/Unwatch Icon Styling */ -#ca-unwatch.icon, -#ca-watch.icon { - margin-left:1px; -} -#ca-unwatch.icon a, -#ca-watch.icon a { - margin: 0; - padding: 0; - outline: none; - display: block; - width: 26px; - height: 2.5em; -} -#ca-unwatch.icon a { - background-image: url(images/watch-icons.png); - background-position: -43px 60%; -} -#ca-watch.icon a { - background-image: url(images/watch-icons.png); - background-position: 5px 60%; -} -#ca-unwatch.icon a:hover { - background-image: url(images/watch-icons.png); - background-position: -67px 60%; -} -#ca-watch.icon a:hover { - background-image: url(images/watch-icons.png); - background-position: -19px 60%; -} -#ca-unwatch.icon a.loading, -#ca-watch.icon a.loading { - background-image: url(images/watch-icon-loading.gif); - background-position: center 60%; -} -#ca-unwatch.icon a span, -#ca-watch.icon a span { - display: none; -} -div.vectorTabs ul { - background-image:url(images/tab-break.png); - background-position:left bottom; - background-repeat:no-repeat; -} diff --git a/skins/vector/screen.css b/skins/vector/screen.css new file mode 100644 index 00000000..703db0ab --- /dev/null +++ b/skins/vector/screen.css @@ -0,0 +1,1203 @@ +/* + * Any rules which should not be flipped automatically in right-to-left situations should be + * prepended with @noflip in a comment block. Images that should be embedded as base64 data-URLs + * should be prepended with @embed in a comment block. + * + * This style-sheet employs a few CSS trick to accomplish compatibility with a wide range of web + * browsers. The most common trick is to use some styles in IE6 only. This is accomplished by using + * a rule that makes things work in IE6, and then following it with a rule that begins with + * "html > body" or use a child selector ">", which is ignored by IE6 because it does not support + * the child selector. You can spot this by looking for the "OVERRIDDEN BY COMPLIANT BROWSERS" and + * "IGNORED BY IE6" comments. + */ + +/* Framework */ +html, +body { + height: 100%; + margin: 0; + padding: 0; + font-family: sans-serif; + font-size: 1em; +} +body { + background-color: #f3f3f3; + /* @embed */ + background-image: url(images/page-base.png); +} +/* Content */ +div#content { + margin-left: 10em; + padding: 1em; + /* @embed */ + background-image: url(images/border.png); + background-position: top left; + background-repeat: repeat-y; + background-color: white; + color: black; + direction: ltr; +} +/* Head */ +#mw-page-base { + height: 5em; + background-color: white; + /* @embed */ + background-image: url(images/page-fade.png); + background-position: bottom left; + background-repeat: repeat-x; +} +#mw-head-base { + margin-top: -5em; + margin-left: 10em; + height: 5em; + /* @embed */ + background-image: url(images/border.png); + background-position: bottom left; + background-repeat: repeat-x; +} +div#mw-head { + position: absolute; + top: 0; + right: 0; + width: 100%; +} +div#mw-head h5 { + margin: 0; + padding: 0; +} + /* Hide empty portlets */ + div.emptyPortlet { + display: none; + } + /* Personal */ + #p-personal { + position: absolute; + top: 0; + right: 0.75em; + } + #p-personal h5 { + display: none; + } + #p-personal ul { + list-style: none; + margin: 0; + padding-left: 10em; /* Keep from overlapping logo */ + } + /* @noflip */ + #p-personal li { + line-height: 1.125em; + float: left; + } + /* This one flips! */ + #p-personal li { + margin-left: 0.75em; + margin-top: 0.5em; + font-size: 0.75em; + white-space: nowrap; + } + /* Navigation Containers */ + #left-navigation { + position: absolute; + left: 10em; + top: 2.5em; + } + #right-navigation { + float: right; + margin-top: 2.5em; + } + /* Navigation Labels */ + div.vectorTabs h5, + div.vectorMenu h5 span { + display: none; + } + /* Namespaces and Views */ + /* @noflip */ + div.vectorTabs { + float: left; + height: 2.5em; + } + div.vectorTabs { + /* @embed */ + background-image: url(images/tab-break.png); + background-position: bottom left; + background-repeat: no-repeat; + padding-left: 1px; + } + /* @noflip */ + div.vectorTabs ul { + float: left; + } + div.vectorTabs ul { + height: 100%; + list-style: none; + margin: 0; + padding: 0; + } + /* @noflip */ + div.vectorTabs ul li { + float: left; + } + /* OVERRIDDEN BY COMPLIANT BROWSERS */ + div.vectorTabs ul li { + line-height: 1.125em; + display: inline-block; + height: 100%; + margin: 0; + padding: 0; + background-color: #f3f3f3; + /* @embed */ + background-image: url(images/tab-normal-fade.png); + background-position: bottom left; + background-repeat: repeat-x; + white-space:nowrap; + } + /* IGNORED BY IE6 */ + div.vectorTabs ul > li { + display: block; + } + div.vectorTabs li.selected { + /* @embed */ + background-image: url(images/tab-current-fade.png); + } + /* OVERRIDDEN BY COMPLIANT BROWSERS */ + div.vectorTabs li a { + display: inline-block; + height: 1.9em; + padding-left: 0.5em; + padding-right: 0.5em; + /* @embed */ + background-image: url(images/tab-break.png); + background-position: bottom right; + background-repeat: no-repeat; + color: #0645ad; + cursor: pointer; + font-size: 0.8em; + } + /* IGNORED BY IE6 */ + div.vectorTabs li > a { + display: block; + } + /* OVERRIDDEN BY COMPLIANT BROWSERS */ + div.vectorTabs span a { + display: inline-block; + padding-top: 1.25em; + } + /* IGNORED BY IE6 */ + /* @noflip */ + div.vectorTabs span > a { + float: left; + display: block; + } + div.vectorTabs li.selected a, + div.vectorTabs li.selected a:visited{ + color: #333333; + text-decoration: none; + } + div.vectorTabs li.new a, + div.vectorTabs li.new a:visited{ + color: #a55858; + } + /* Variants and Actions */ + /* @noflip */ + div.vectorMenu { + direction: ltr; + float: left; + /* @embed */ + background-image: url(images/arrow-down-icon.png); + background-position: 100% 60%; + background-repeat: no-repeat; + cursor: pointer; + } + /* @noflip */ + body.rtl div.vectorMenu { + direction: rtl; + } + /* OVERRIDDEN BY COMPLIANT BROWSERS */ + /* @noflip */ + div#mw-head div.vectorMenu h5 { + float: left; + /* @embed */ + background-image: url(images/tab-break.png); + background-repeat: no-repeat; + } + /* This will be flipped - unlike the one above it */ + div#mw-head div.vectorMenu h5 { + background-position: bottom left; + margin-left: -1px; + } + /* IGNORED BY IE6 */ + div#mw-head div.vectorMenu > h5 { + background-image: none; + } + div#mw-head div.vectorMenu h4 { + display: inline-block; + float: left; + font-size: 0.8em; + padding-left: 0.5em; + padding-top: 1.375em; + font-weight: normal; + border: none; + } + /* OVERRIDDEN BY COMPLIANT BROWSERS */ + /* @noflip */ + div.vectorMenu h5 a { + display: inline-block; + width: 24px; + height: 2.5em; + text-decoration: none; + /* @embed */ + background-image: url(images/tab-break.png); + background-repeat: no-repeat; + } + /* This will be flipped - unlike the one above it */ + div.vectorMenu h5 a { + background-position: bottom right; + } + /* IGNORED BY IE6 */ + div.vectorMenu h5 > a { + display: block; + } + div.vectorMenu div.menu { + position: relative; + display: none; + clear: both; + text-align: left; + } + /* OVERRIDDEN BY COMPLIANT BROWSERS */ + /* @noflip */ + body.rtl div.vectorMenu div.menu { + margin-left: 24px; + } + /* IGNORED BY IE6 */ + /* @noflip */ + body.rtl div.vectorMenu > div.menu { + margin-left: auto; + } + /* IGNORED BY IE6 */ + /* Also fixes old versions of FireFox */ + /* @noflip */ + body.rtl div.vectorMenu > div.menu, + x:-moz-any-link { + margin-left: 23px; + } + div.vectorMenu:hover div.menu { + display: block; + } + div.vectorMenu ul { + position: absolute; + background-color: white; + border: solid 1px silver; + border-top-width: 0; + list-style: none; + list-style-image: none; + list-style-type: none; + padding: 0; + margin: 0; + margin-left: -1px; + text-align: left; + } + /* Fixes old versions of FireFox */ + div.vectorMenu ul, + x:-moz-any-link { + min-width: 5em; + } + /* Returns things back to normal in modern versions of FireFox */ + div.vectorMenu ul, + x:-moz-any-link, + x:default { + min-width: 0; + } + div.vectorMenu li { + padding: 0; + margin: 0; + text-align: left; + line-height: 1em; + } + /* OVERRIDDEN BY COMPLIANT BROWSERS */ + div.vectorMenu li a { + display: inline-block; + padding: 0.5em; + white-space: nowrap; + color: #0645ad; + cursor: pointer; + font-size: 0.8em; + } + /* IGNORED BY IE6 */ + div.vectorMenu li > a { + display: block; + } + div.vectorMenu li.selected a, + div.vectorMenu li.selected a:visited { + color: #333333; + text-decoration: none; + } + /* Search */ + #p-search h5 { + display: none; + } + /* @noflip */ + #p-search { + float: left; + } + #p-search { + margin-right: 0.5em; + margin-left: 0.5em; + } + #p-search form, + #p-search input { + margin: 0; + margin-top: 0.4em; + } + div#simpleSearch { + display: block; + width: 14em; + height: 1.4em; + margin-top: 0.65em; + position: relative; + min-height: 1px; /* Gotta trigger hasLayout for IE7 */ + border: solid 1px #AAAAAA; + color: black; + background-color: white; + /* @embed */ + background-image: url(images/search-fade.png); + background-position: top left; + background-repeat: repeat-x; + } + div#simpleSearch label { + /* + * DON'T PANIC! Browsers that won't scale this properly are the same browsers that have JS issues that prevent + * this from ever being shown anyways. + */ + font-size: 13px; + top: 0.25em; + direction: ltr; + } + div#simpleSearch input { + color: black; + direction: ltr; + } + div#simpleSearch input:focus { + outline: none; + } + div#simpleSearch input.placeholder { + color: #999999; + } + div#simpleSearch input::-webkit-input-placeholder { + color: #999999; + } + div#simpleSearch input#searchInput { + position: absolute; + top: 0; + left: 0; + width: 90%; + margin: 0; + padding: 0; + padding-left: 0.2em; + padding-top: 0.2em; + padding-bottom: 0.2em; + outline: none; + border: none; + /* + * DON'T PANIC! Browsers that won't scale this properly are the same browsers that have JS issues that prevent + * this from ever being shown anyways. + */ + font-size: 13px; + background-color: transparent; + direction: ltr; + } + div#simpleSearch button#searchButton { + position: absolute; + width: 10%; + right: 0; + top: 0; + padding: 0; + padding-top: 0.2em; + padding-bottom: 0.2em; + padding-right: 0.4em; + margin: 0; + border: none; + cursor: pointer; + background-color: transparent; + } + /* OVERRIDDEN BY COMPLIANT BROWSERS */ + div#simpleSearch button#searchButton img { + border: none; + margin: 0; + margin-top: -3px; + padding: 0; + } + /* IGNORED BY IE6 */ + div#simpleSearch button#searchButton > img { + margin: 0; + } +/* Panel */ +div#mw-panel { + position: absolute; + top: 160px; + padding-top: 1em; + width: 10em; + left: 0; +} + div#mw-panel div.portal { + padding-bottom: 1.5em; + direction: ltr; + } + div#mw-panel div.portal h5 { + font-weight: normal; + color: #444444; + padding: 0.25em; + padding-top: 0; + padding-left: 1.75em; + cursor: default; + border: none; + font-size: 0.75em; + } + div#mw-panel div.portal div.body { + margin: 0; + padding-top: 0.5em; + margin-left: 1.25em; + /* @embed */ + background-image: url(images/portal-break.png); + background-repeat: no-repeat; + background-position: top left; + } + div#mw-panel div.portal div.body ul { + list-style: none; + list-style-image: none; + list-style-type: none; + padding: 0; + margin: 0; + } + div#mw-panel div.portal div.body ul li { + line-height: 1.125em; + padding: 0; + padding-bottom: 0.5em; + margin: 0; + overflow: hidden; + font-size: 0.75em; + } + div#mw-panel div.portal div.body ul li a { + color: #0645ad; + } + div#mw-panel div.portal div.body ul li a:visited { + color: #0b0080; + } +/* Footer */ +div#footer { + margin-left: 10em; + margin-top: 0; + padding: 0.75em; + /* @embed */ + background-image: url(images/border.png); + background-position: top left; + background-repeat: repeat-x; + direction: ltr; +} +div#footer ul { + list-style: none; + list-style-image: none; + list-style-type: none; + margin: 0; + padding: 0; +} +div#footer ul li { + margin: 0; + padding: 0; + padding-top: 0.5em; + padding-bottom: 0.5em; + color: #333333; + font-size: 0.7em; +} +div#footer #footer-icons { + float: right; +} +/* @noflip */ +body.ltr div#footer #footer-places { + float: left; +} +div#footer #footer-info li { + line-height: 1.4em; +} +div#footer #footer-icons li { + float: left; + margin-left: 0.5em; + line-height: 2em; +} +div#footer #footer-places li { + float: left; + margin-right: 1em; + line-height: 2em; +} +/* Logo */ +#p-logo { + position: absolute; + top: -160px; + left: 0; + width: 10em; + height: 160px; +} +#p-logo a { + display: block; + width: 10em; + height: 160px; + background-repeat: no-repeat; + background-position: center center; + text-decoration: none; +} + +/* + * + * The following code is highly modified from monobook. It would be nice if the + * preftoc id was more human readable like preferences-toc for instance, + * howerver this would require backporting the other skins. + */ + +/* Preferences */ +#preftoc { + /* Tabs */ + width: 100%; + float: left; + clear: both; + margin: 0 !important; + padding: 0 !important; + /* @embed */ + background-image: url(images/preferences-break.png); + background-position: bottom left; + background-repeat: no-repeat; +} + #preftoc li { + /* Tab */ + float: left; + margin: 0; + padding: 0; + padding-right: 1px; + height: 2.25em; + white-space: nowrap; + list-style-type: none; + list-style-image: none; + /* @embed */ + background-image: url(images/preferences-break.png); + background-position: bottom right; + background-repeat: no-repeat; + } + /* Sadly, IE6 won't understand this */ + #preftoc li:first-child { + margin-left: 1px; + } + #preftoc a, + #preftoc a:active { + display: inline-block; + position: relative; + color: #0645ad; + padding: 0.5em; + text-decoration: none; + background-image: none; + font-size: 0.9em; + } + #preftoc a:hover, + #preftoc a:focus { + text-decoration: underline; + } + #preftoc li.selected a { + /* @embed */ + background-image: url(images/preferences-fade.png); + background-position: bottom; + background-repeat: repeat-x; + color: #333333; + text-decoration: none; + } +#preferences { + float: left; + width: 100%; + margin: 0; + margin-top: -2px; + clear: both; + border: solid 1px #cccccc; + background-color: #f9f9f9; + /* @embed */ + background-image: url(images/preferences-base.png); +} +#preferences fieldset.prefsection { + border: none; + padding: 0; + margin: 1em; +} +#preferences fieldset.prefsection fieldset { + border: none; + border-top: solid 1px #cccccc; +} +#preferences legend { + color: #666666; +} +#preferences fieldset.prefsection legend.mainLegend { + display: none; +} +#preferences td { + padding-left: 0.5em; + padding-right: 0.5em; +} +#preferences td.htmlform-tip { + font-size: x-small; + padding: .2em 2em; + color: #666666; +} +#preferences div.mw-prefs-buttons { + padding: 1em; +} +#preferences div.mw-prefs-buttons input { + margin-right: 0.25em; +} + +/* + * Styles for the user login and create account forms + */ +#userlogin, #userloginForm { + border: solid 1px #cccccc; + padding: 1.2em; + margin: .5em; + float: left; +} + +#userlogin { + min-width: 20em; + max-width: 90%; + width: 40em; +} + +/* + * + * The following code is slightly modified from monobook + * + */ +div#content { + line-height: 1.5em; +} +#bodyContent { + font-size: 0.8em; +} +/* Links */ +a { + text-decoration: none; + color: #0645ad; + background: none; +} +a:visited { + color: #0b0080; +} +a:active { + color: #faa700; +} +a:hover, a:focus { + text-decoration: underline; +} +a.stub { + color: #772233; +} +a.new, #p-personal a.new { + color: #ba0000; +} +a.new:visited, #p-personal a.new:visited { + color: #a55858; +} + +/* Inline Elements */ +img { + border: none; + vertical-align: middle; +} +hr { + height: 1px; + color: #aaa; + background-color: #aaa; + border: 0; + margin: .2em 0 .2em 0; +} + +/* Structural Elements */ +h1, +h2, +h3, +h4, +h5, +h6 { + color: black; + background: none; + font-weight: normal; + margin: 0; + overflow: hidden; + padding-top: .5em; + padding-bottom: .17em; + border-bottom: 1px solid #aaa; + width: auto; +} +h1 { font-size: 188%; } +h1 .editsection { font-size: 53%; } +h2 { font-size: 150%; } +h2 .editsection { font-size: 67%; } +h3, +h4, +h5, +h6 { + border-bottom: none; + font-weight: bold; +} +h3 { font-size: 132%; } +h3 .editsection { font-size: 76%; font-weight: normal; } +h4 { font-size: 116%; } +h4 .editsection { font-size: 86%; font-weight: normal; } +h5 { font-size: 100%; } +h5 .editsection { font-weight: normal; } +h6 { font-size: 80%; } +h6 .editsection { font-size: 125%; font-weight: normal; } +.editsection { float: right; } +p { + margin: .4em 0 .5em 0; + line-height: 1.5em; +} +p img { + margin: 0; +} +q { + font-family: Times, "Times New Roman", serif; + font-style: italic; +} +/* Disabled for now +blockquote { + font-family: Times, "Times New Roman", serif; + font-style: italic; +}*/ +pre, code, tt, kbd, samp { + /* + * It's important for this rule to first reference an actual font name, some browsers will render the monospace text + * too small otherwise, namely Firefox, Chrome and Safari + */ + font-family: monospace, "Courier New"; +} +code { + background-color: #f9f9f9; +} +pre { + padding: 1em; + border: 1px dashed #2f6fab; + color: black; + background-color: #f9f9f9; + line-height: 1.1em; +} +ul { + line-height: 1.5em; + list-style-type: square; + margin: .3em 0 0 1.5em; + padding: 0; + /* @embed */ + list-style-image: url(images/bullet-icon.png); +} +ol { + line-height: 1.5em; + margin: .3em 0 0 3.2em; + padding: 0; + list-style-image: none; +} +li { + margin-bottom: .1em; +} +dt { + font-weight: bold; + margin-bottom: .1em; +} +dl { + margin-top: .2em; + margin-bottom: .5em; +} +dd { + line-height: 1.5em; + margin-left: 2em; + margin-bottom: .1em; +} +/* Tables */ +table { + font-size: 100%; +} +/* Forms */ +fieldset { + border: 1px solid #2f6fab; + margin: 1em 0 1em 0; + padding: 0 1em 1em; + line-height: 1.5em; +} + fieldset.nested { + margin: 0 0 0.5em 0; + padding: 0 0.5em 0.5em; + } +legend { + padding: .5em; + font-size: 95%; +} +form { + border: none; + margin: 0; +} +textarea { + width: 100%; + padding: .1em; +} +select { + vertical-align: top; +} +/* Table of Contents */ +#toc, +.toc, +.mw-warning { + border: 1px solid #aaa; + background-color: #f9f9f9; + padding: 5px; + font-size: 95%; +} +#toc h2, +.toc h2 { + display: inline; + border: none; + padding: 0; + font-size: 100%; + font-weight: bold; +} +#toc #toctitle, +.toc #toctitle, +#toc .toctitle, +.toc .toctitle { + text-align: center; +} +#toc ul, +.toc ul { + list-style-type: none; + list-style-image: none; + margin-left: 0; + padding-left: 0; + text-align: left; +} +#toc ul ul, +.toc ul ul { + margin: 0 0 0 2em; +} +#toc .toctoggle, +.toc .toctoggle { + font-size: 94%; +} +/* Images */ +div.floatright, table.floatright { + clear: right; + float: right; + position: relative; + margin: 0 0 .5em .5em; + border: 0; +} +div.floatright p { font-style: italic; } +div.floatleft, table.floatleft { + float: left; + clear: left; + position: relative; + margin: 0 .5em .5em 0; + border: 0; +} +div.floatleft p { font-style: italic; } +/* Thumbnails */ +div.thumb { + margin-bottom: .5em; + width: auto; + background-color: transparent; +} +div.thumbinner { + border: 1px solid #ccc; + padding: 3px !important; + background-color: #f9f9f9; + font-size: 94%; + text-align: center; + overflow: hidden; +} +html .thumbimage { + border: 1px solid #ccc; +} +html .thumbcaption { + border: none; + text-align: left; + line-height: 1.4em; + padding: 3px !important; + font-size: 94%; +} +div.magnify { + float: right; + border: none !important; + background: none !important; +} +div.magnify a, div.magnify img { + display: block; + border: none !important; + background: none !important; +} +/* @noflip */ +div.tright { + clear: right; + float: right; + margin: .5em 0 1.3em 1.4em; +} +/* @noflip */ +div.tleft { + float: left; + clear: left; + margin: .5em 1.4em 1.3em 0; +} +img.thumbborder { + border: 1px solid #dddddd; +} +.hiddenStructure { + display: none; +} +/* Warning */ +.mw-warning { + margin-left: 50px; + margin-right: 50px; + text-align: center; +} +/* User Message */ +.usermessage { + background-color: #ffce7b; + border: 1px solid #ffa500; + color: black; + font-weight: bold; + margin: 2em 0 1em; + padding: .5em 1em; + vertical-align: middle; +} +/* Site Notice (includes notices from CentralNotice extension) */ +#siteNotice { + position: relative; + text-align: center; + font-size: 0.8em; + margin: 0; +} +#localNotice { + margin-bottom: 0.9em; +} +/* Categories */ +.catlinks { + border: 1px solid #aaa; + background-color: #f9f9f9; + padding: 5px; + margin-top: 1em; + clear: both; +} +/* Sub-navigation */ +#siteSub { + display: none; +} +#jump-to-nav { + display: none; +} +#contentSub, #contentSub2 { + font-size: 84%; + line-height: 1.2em; + margin: 0 0 1.4em 1em; + color: #7d7d7d; + width: auto; +} +span.subpages { + display: block; +} +/* Emulate Center */ +.center { + width: 100%; + text-align: center; +} +*.center * { + margin-left: auto; + margin-right: auto; +} +/* Small for tables and similar */ +.small, .small * { + font-size: 94%; +} +table.small { + font-size: 100%; +} +/* Edge Cases for Content */ +h1, h2 { + margin-bottom: .6em; +} +h3, h4, h5 { + margin-bottom: .3em; +} +#firstHeading { + padding-top: 0; + margin-top: 0; + padding-top: 0; + margin-bottom: 0.1em; + line-height: 1.2em; + font-size: 1.6em; + padding-bottom: 0; +} +div#content a.external, +div#content a[href ^="gopher://"] { + /* @embed */ + background: url(images/external-link-ltr-icon.png) center right no-repeat; + padding-right: 13px; +} +div#content a[href ^="https://"], +.link-https { + /* @embed */ + background: url(images/lock-icon.png) center right no-repeat; + padding-right: 13px; +} +div#content a[href ^="mailto:"], +.link-mailto { + /* @embed */ + background: url(images/mail-icon.png) center right no-repeat; + padding-right: 13px; +} +div#content a[href ^="news://"] { + /* @embed */ + background: url(images/news-icon.png) center right no-repeat; + padding-right: 13px; +} +div#content a[href ^="ftp://"], +.link-ftp { + /* @embed */ + background: url(images/file-icon.png) center right no-repeat; + padding-right: 13px; +} +div#content a[href ^="irc://"], +div#content a.extiw[href ^="irc://"], +.link-irc { + /* @embed */ + background: url(images/talk-icon.png) center right no-repeat; + padding-right: 13px; +} +div#content a.external[href $=".ogg"], div#content a.external[href $=".OGG"], +div#content a.external[href $=".mid"], div#content a.external[href $=".MID"], +div#content a.external[href $=".midi"], div#content a.external[href $=".MIDI"], +div#content a.external[href $=".mp3"], div#content a.external[href $=".MP3"], +div#content a.external[href $=".wav"], div#content a.external[href $=".WAV"], +div#content a.external[href $=".wma"], div#content a.external[href $=".WMA"], +.link-audio { + /* @embed */ + background: url("images/audio-icon.png?2") center right no-repeat; + padding-right: 13px; +} +div#content a.external[href $=".ogm"], div#content a.external[href $=".OGM"], +div#content a.external[href $=".avi"], div#content a.external[href $=".AVI"], +div#content a.external[href $=".mpeg"], div#content a.external[href $=".MPEG"], +div#content a.external[href $=".mpg"], div#content a.external[href $=".MPG"], +.link-video { + /* @embed */ + background: url("images/video-icon.png?2") center right no-repeat; + padding-right: 13px; +} +div#content a.external[href $=".pdf"], div#content a.external[href $=".PDF"], +div#content a.external[href *=".pdf#"], div#content a.external[href *=".PDF#"], +div#content a.external[href *=".pdf?"], div#content a.external[href *=".PDF?"], +.link-document { + /* @embed */ + background: url("images/document-icon.png?2") center right no-repeat; + padding-right: 13px; +} +/* Interwiki Styling (Disabled) */ +div#content a.extiw, +div#content a.extiw:active { + color: #36b; + background: none; + padding: 0; +} +div#content a.external { + color: #36b; +} +div#content .printfooter { + display: none; +} +/* Icon for Usernames */ +#pt-userpage, +#pt-anonuserpage, +#pt-login { + /* @embed */ + background: url(images/user-icon.png) left top no-repeat; + padding-left: 15px !important; + text-transform: none; +} + +.toccolours { + border: 1px solid #aaa; + background-color: #f9f9f9; + padding: 5px; + font-size: 95%; +} +#bodyContent { + position: relative; + width: 100%; +} +#mw-js-message { + font-size: 0.8em; +} +div#bodyContent { + line-height: 1.5em; +} + +/* Watch/Unwatch Icon Styling */ +#ca-unwatch.icon, +#ca-watch.icon { + margin-right:1px; +} +#ca-unwatch.icon a, +#ca-watch.icon a { + margin: 0; + padding: 0; + outline: none; + display: block; + width: 26px; + /* This hides the text but shows the background image */ + padding-top: 3.1em; + margin-top: 0; + /* Only applied in IE6 */ + margin-top: -0.8em !ie; + height: 0; + overflow: hidden; + /* @embed */ + background-image: url(images/watch-icons.png); +} +#ca-unwatch.icon a { + background-position: -43px 60%; +} +#ca-watch.icon a { + background-position: 5px 60%; +} +#ca-unwatch.icon a:hover, +#ca-unwatch.icon a:focus { + background-position: -67px 60%; +} +#ca-watch.icon a:hover, +#ca-watch.icon a:focus { + background-position: -19px 60%; +} +#ca-unwatch.icon a.loading, +#ca-watch.icon a.loading { + /* @embed */ + background-image: url(images/watch-icon-loading.gif); + background-position: 5px 60%; +} +#ca-unwatch.icon a span, +#ca-watch.icon a span { + display: none; +} +div.vectorTabs ul { + /* @embed */ + background-image:url(images/tab-break.png); + background-position:right bottom; + background-repeat:no-repeat; +} + +/* Convenience links to edit block, delete and protect reasons */ +p.mw-ipb-conveniencelinks, p.mw-protect-editreasons, +p.mw-filedelete-editreasons, p.mw-delete-editreasons { + float: right; +} + +/* Tooltips are outside of the normal body code, so this helps make the size of the text sensible */ +.tipsy { + font-size: 0.8em; +} \ No newline at end of file diff --git a/skins/vector/wiki-indexed.png b/skins/vector/wiki-indexed.png deleted file mode 100644 index 189a2ae3..00000000 Binary files a/skins/vector/wiki-indexed.png and /dev/null differ diff --git a/skins/vector/wiki.png b/skins/vector/wiki.png deleted file mode 100644 index 2463b521..00000000 Binary files a/skins/vector/wiki.png and /dev/null differ diff --git a/thumb.php b/thumb.php index 6e04f4aa..1a1dee46 100644 --- a/thumb.php +++ b/thumb.php @@ -56,11 +56,13 @@ function wfThumbMain() { $bits = explode( '!', $fileName, 2 ); if( !isset($bits[1]) ) { wfThumbError( 404, wfMsg( 'badtitletext' ) ); + wfProfileOut( __METHOD__ ); return; } $title = Title::makeTitleSafe( NS_FILE, $bits[1] ); if( is_null($title) ) { wfThumbError( 404, wfMsg( 'badtitletext' ) ); + wfProfileOut( __METHOD__ ); return; } $img = RepoGroup::singleton()->getLocalRepo()->newFromArchiveName( $title, $fileName ); @@ -73,6 +75,7 @@ function wfThumbMain() { if ( !$img->getTitle()->userCanRead() ) { wfThumbError( 403, 'Access denied. You do not have permission to access ' . 'the source file.' ); + wfProfileOut( __METHOD__ ); return; } $headers[] = 'Cache-Control: private'; @@ -81,15 +84,18 @@ function wfThumbMain() { if ( !$img ) { wfThumbError( 404, wfMsg( 'badtitletext' ) ); + wfProfileOut( __METHOD__ ); return; } if ( !$img->exists() ) { wfThumbError( 404, 'The source file for the specified thumbnail does not exist.' ); + wfProfileOut( __METHOD__ ); return; } $sourcePath = $img->getPath(); if ( $sourcePath === false ) { wfThumbError( 500, 'The source file is not locally accessible.' ); + wfProfileOut( __METHOD__ ); return; } @@ -101,10 +107,11 @@ function wfThumbMain() { // Calculate time wfSuppressWarnings(); $imsUnix = strtotime( $imsString ); + $stat = stat( $sourcePath ); wfRestoreWarnings(); - $stat = @stat( $sourcePath ); if ( $stat['mtime'] <= $imsUnix ) { header( 'HTTP/1.1 304 Not Modified' ); + wfProfileOut( __METHOD__ ); return; } } @@ -116,11 +123,13 @@ function wfThumbMain() { if ( is_file( $thumbPath ) ) { wfStreamFile( $thumbPath, $headers ); + wfProfileOut( __METHOD__ ); return; } } } catch ( MWException $e ) { wfThumbError( 500, $e->getHTML() ); + wfProfileOut( __METHOD__ ); return; } @@ -164,7 +173,7 @@ function wfThumbError( $status, $msg ) { header( 'HTTP/1.1 500 Internal server error' ); } if( $wgShowHostnames ) { - $url = htmlspecialchars( @$_SERVER['REQUEST_URI'] ); + $url = htmlspecialchars( isset( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : '' ); $hostname = htmlspecialchars( wfHostname() ); $debug = "\n\n"; } else { diff --git a/trackback.php b/trackback.php index 398cc794..f673c508 100644 --- a/trackback.php +++ b/trackback.php @@ -7,55 +7,79 @@ require_once( './includes/WebStart.php' ); -function XMLsuccess() { - header( "Content-Type: application/xml; charset=utf-8" ); - echo " +class TrackBack { + + private $r, $url, $title = null; + + private function XMLsuccess() { + header( "Content-Type: application/xml; charset=utf-8" ); + echo << -0 + 0 - "; - exit; -} +XML; + exit; + } -function XMLerror( $err = "Invalid request." ) { - header( "HTTP/1.0 400 Bad Request" ); - header( "Content-Type: application/xml; charset=utf-8" ); - echo " + private function XMLerror( $err = "Invalid request." ) { + header( "HTTP/1.0 400 Bad Request" ); + header( "Content-Type: application/xml; charset=utf-8" ); + echo << -1 -Invalid request: $err + 1 + Invalid request: $err -"; - exit; -} +XML; + exit; + } -if( !$wgUseTrackbacks ) - XMLerror("Trackbacks are disabled."); + public function __construct() { + global $wgUseTrackbacks, $wgRequest; -if( !isset( $_POST['url'] ) - || !isset( $_REQUEST['article'] ) ) - XMLerror("Required field not specified"); + if( !$wgUseTrackbacks ) + $this->XMLerror( "Trackbacks are disabled" ); -$dbw = wfGetDB( DB_MASTER ); + $this->r = $wgRequest; -$tbtitle = strval( @$_POST['title'] ); -$tbex = strval( @$_POST['excerpt'] ); -$tburl = strval( $_POST['url'] ); -$tbname = strval( @$_POST['blog_name'] ); -$tbarticle = strval( $_REQUEST['article'] ); + if( !$this->r->wasPosted() ) { + $this->XMLerror( "Must be posted" ); + } -$title = Title::newFromText($tbarticle); -if( !$title || !$title->exists() ) - XMLerror( "Specified article does not exist." ); + $this->url = $wgRequest->getText( 'url' ); + $article = $wgRequest->getText( 'article' ); -$dbw->insert('trackbacks', array( - 'tb_page' => $title->getArticleID(), - 'tb_title' => $tbtitle, - 'tb_url' => $tburl, - 'tb_ex' => $tbex, - 'tb_name' => $tbname -)); + if( !$this->url || !$article ) { + $this->XMLerror( "Required field not specified" ); + } -$dbw->commit(); + $this->title = Title::newFromText( $article ); + if( !$this->title || !$this->title->exists() ) { + $this->XMLerror( "Specified article does not exist." ); + } + } + + public function write() { + $dbw = wfGetDB( DB_MASTER ); + + $tbtitle = $this->r->getText( 'title' ); + $tbex = $this->r->getText( 'excerpt' ); + $tbname = $this->r->getText( 'blog_name' ); + + $dbw->insert('trackbacks', array( + 'tb_page' => $this->title->getArticleID(), + 'tb_title' => $tbtitle, + 'tb_url' => $this->url, + 'tb_ex' => $tbex, + 'tb_name' => $tbname + )); + + $dbw->commit(); + + $this->XMLsuccess(); + } +} -XMLsuccess(); +$tb = new TrackBack(); +$tb->write(); -- cgit v1.2.3-54-g00ecf